From f5aa2a701b08858753d408026b060d4ad7de9a79 Mon Sep 17 00:00:00 2001 From: Ashnal Date: Sat, 7 Jun 2025 17:32:42 -0400 Subject: [PATCH] Bail button Transforms BT_RESPAWN into BT_BAIL User bindings should migrate along with this Respawn is now EBRAKE+BAIL Respawn blocks LOOKBACK Time Attack quick respawn is now VOTE --- src/d_clisrv.c | 2 +- src/d_ticcmd.h | 3 ++- src/deh_tables.c | 3 ++- src/g_build_ticcmd.cpp | 5 +---- src/g_input.h | 2 +- src/hud/input-display.cpp | 2 +- src/hud/spectator.cpp | 2 +- src/k_bot.cpp | 2 +- src/k_follower.c | 2 +- src/k_hud.cpp | 4 ++-- src/k_kart.c | 16 ++++++++++++---- src/k_menufunc.c | 2 +- src/menus/options-profiles-edit-controls.c | 4 ++-- src/objects/ring-shooter.c | 4 ++-- src/p_user.c | 4 ++-- 15 files changed, 32 insertions(+), 25 deletions(-) diff --git a/src/d_clisrv.c b/src/d_clisrv.c index fac79bcab..f5a486f1d 100644 --- a/src/d_clisrv.c +++ b/src/d_clisrv.c @@ -5397,7 +5397,7 @@ static void FuzzTiccmd(ticcmd_t* target) { target->buttons |= BT_ACCELERATE; target->buttons &= ~BT_LOOKBACK; - target->buttons &= ~BT_RESPAWN; + target->buttons &= ~BT_BAIL; target->buttons &= ~BT_BRAKE; } } diff --git a/src/d_ticcmd.h b/src/d_ticcmd.h index f0c5f4f28..2ac3bb07a 100644 --- a/src/d_ticcmd.h +++ b/src/d_ticcmd.h @@ -32,12 +32,13 @@ typedef enum BT_BRAKE = 1<<3, // Brake BT_ATTACK = 1<<4, // Use Item BT_LOOKBACK = 1<<5, // Look Backward - BT_RESPAWN = 1<<6, // Respawn + BT_BAIL = 1<<6, // Bail BT_VOTE = 1<<7, // Vote BT_SPINDASH = 1<<8, // Spindash BT_EBRAKEMASK = (BT_ACCELERATE|BT_BRAKE), BT_SPINDASHMASK = (BT_ACCELERATE|BT_BRAKE|BT_DRIFT), + BT_RESPAWNMASK = (BT_EBRAKEMASK|BT_BAIL), // free: 1<<9 to 1<<12 diff --git a/src/deh_tables.c b/src/deh_tables.c index 7f3ac6310..9e037f4f2 100644 --- a/src/deh_tables.c +++ b/src/deh_tables.c @@ -5057,11 +5057,12 @@ struct int_const_s const INT_CONST[] = { {"BT_BRAKE",BT_BRAKE}, {"BT_ATTACK",BT_ATTACK}, {"BT_LOOKBACK",BT_LOOKBACK}, - {"BT_RESPAWN",BT_RESPAWN}, + {"BT_BAIL",BT_BAIL}, {"BT_VOTE",BT_VOTE}, {"BT_SPINDASH",BT_SPINDASH}, // Real button now, but triggers the macro same as always. {"BT_EBRAKEMASK",BT_EBRAKEMASK}, // Macro button {"BT_SPINDASHMASK",BT_SPINDASHMASK}, // Macro button + {"BT_RESPAWNMASK",BT_RESPAWNMASK}, // Macro button {"BT_LUAA",BT_LUAA}, // Lua customizable {"BT_LUAB",BT_LUAB}, // Lua customizable {"BT_LUAC",BT_LUAC}, // Lua customizable diff --git a/src/g_build_ticcmd.cpp b/src/g_build_ticcmd.cpp index f32c1f509..cfd962e28 100644 --- a/src/g_build_ticcmd.cpp +++ b/src/g_build_ticcmd.cpp @@ -404,10 +404,7 @@ class TiccmdBuilder map(gc_item, BT_ATTACK); // fire map(gc_lookback, BT_LOOKBACK); // rear view - if (!modeattacking) - { - map(gc_respawn, BT_RESPAWN | (freecam() ? 0 : BT_EBRAKEMASK)); // respawn - } + map(gc_bail, BT_BAIL); // bail map(gc_vote, BT_VOTE); // mp general function button // lua buttons a thru c diff --git a/src/g_input.h b/src/g_input.h index d2f2d535c..7991923e8 100644 --- a/src/g_input.h +++ b/src/g_input.h @@ -123,7 +123,7 @@ typedef enum gc_lookback = gc_b, gc_spindash = gc_c, gc_brake = gc_x, - gc_respawn = gc_y, + gc_bail = gc_y, gc_vote = gc_z, gc_item = gc_l, gc_drift = gc_r, diff --git a/src/hud/input-display.cpp b/src/hud/input-display.cpp index c3dab0a53..14678c87a 100644 --- a/src/hud/input-display.cpp +++ b/src/hud/input-display.cpp @@ -113,7 +113,7 @@ void K_DrawInputDisplay(float x, float y, INT32 flags, char mode, UINT8 pid, boo box.patch(but('B', gc_b, BT_LOOKBACK)); box.patch(but('C', gc_c, BT_SPINDASH)); box.patch(but('X', gc_x, BT_BRAKE)); - box.patch(but('Y', gc_y, BT_RESPAWN)); + box.patch(but('Y', gc_y, BT_BAIL)); box.patch(but('Z', gc_z, BT_VOTE)); box.patch(but('L', gc_l, BT_ATTACK)); box.patch(but('R', gc_r, BT_DRIFT)); diff --git a/src/hud/spectator.cpp b/src/hud/spectator.cpp index f0606378a..512f64d6a 100644 --- a/src/hud/spectator.cpp +++ b/src/hud/spectator.cpp @@ -198,7 +198,7 @@ void K_drawSpectatorHUD(boolean director) } else { - bool press = D_LocalTiccmd(viewnum)->buttons & BT_RESPAWN; + bool press = D_LocalTiccmd(viewnum)->buttons & BT_BAIL; const char* label = (press && I_GetTime() % 16 < 8) ? "> <" : ">< "; list.insert({{label, press ? "" : ""}, {"Exit", ""}}); diff --git a/src/k_bot.cpp b/src/k_bot.cpp index 3caab89e7..1d827138a 100644 --- a/src/k_bot.cpp +++ b/src/k_bot.cpp @@ -1803,7 +1803,7 @@ static void K_BuildBotTiccmdNormal(player_t *player, ticcmd_t *cmd) if (K_TryRingShooter(player, botController) == true && player->botvars.respawnconfirm >= BOTRESPAWNCONFIRM) { // We want to respawn. Simply hold Y and stop here! - cmd->buttons |= (BT_RESPAWN | BT_EBRAKEMASK); + cmd->buttons |= BT_RESPAWNMASK; return; } diff --git a/src/k_follower.c b/src/k_follower.c index aee769b95..b4ed0bf84 100644 --- a/src/k_follower.c +++ b/src/k_follower.c @@ -546,7 +546,7 @@ void K_HandleFollower(player_t *player) } // Sal: Turn the follower around when looking backwards. - if ( player->cmd.buttons & BT_LOOKBACK ) + if (K_GetKartButtons(player) & BT_LOOKBACK) { destAngle += ANGLE_180; } diff --git a/src/k_hud.cpp b/src/k_hud.cpp index 986b28eaa..a5e25edbf 100644 --- a/src/k_hud.cpp +++ b/src/k_hud.cpp @@ -4876,7 +4876,7 @@ static void K_drawKartPlayerCheck(void) return; } - if (stplyr->cmd.buttons & BT_LOOKBACK) + if (K_GetKartButtons(stplyr) & BT_LOOKBACK) { return; } @@ -7521,7 +7521,7 @@ void K_drawKartHUD(void) if (ta) { using srb2::Draw; - Draw::TextElement text = Draw::TextElement().parse(" Restart"); + Draw::TextElement text = Draw::TextElement().parse(" Restart"); Draw(BASEVIDWIDTH - 19, 2) .flags(flags | V_YELLOWMAP) .align(Draw::Align::kRight) diff --git a/src/k_kart.c b/src/k_kart.c index cb62aa853..85d74c0cb 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -4069,8 +4069,16 @@ boolean K_KartKickstart(const player_t *player) UINT16 K_GetKartButtons(const player_t *player) { - return (player->cmd.buttons | - (K_KartKickstart(player) ? BT_ACCELERATE : 0)); + UINT16 buttons = player->cmd.buttons; + if ((buttons & BT_RESPAWNMASK) == BT_RESPAWNMASK) + { + buttons &= ~BT_LOOKBACK; + } + if (K_KartKickstart(player)) + { + buttons = buttons | BT_ACCELERATE; + } + return buttons; } SINT8 K_GetForwardMove(const player_t *player) @@ -10129,7 +10137,7 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd) K_RemoveGrowShrink(player); } - if (player->respawn.state != RESPAWNST_MOVE && (player->cmd.buttons & BT_RESPAWN) == BT_RESPAWN) + if (player->respawn.state != RESPAWNST_MOVE && (player->cmd.buttons & BT_RESPAWNMASK) == BT_RESPAWNMASK) { player->finalfailsafe++; // Decremented by ringshooter to "freeze" this timer // Part-way through the auto-respawn timer, you can tap Ring Shooter to respawn early @@ -13955,7 +13963,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground) } - if ((player->cmd.buttons & BT_VOTE) && ((player->itemtype && player->itemamount) || (player->rings > 0) || player->superring > 0 || player->pickuprings > 0 || player->itemRoulette.active)) + if ((player->cmd.buttons & BT_BAIL) && (player->cmd.buttons & BT_RESPAWNMASK) != BT_RESPAWNMASK && ((player->itemtype && player->itemamount) || (player->rings > 0) || player->superring > 0 || player->pickuprings > 0 || player->itemRoulette.active)) { boolean grounded = P_IsObjectOnGround(player->mo); onground && player->tumbleBounces == 0 ? player->bailcharge += 2 : player->bailcharge++; // charge twice as fast on the ground diff --git a/src/k_menufunc.c b/src/k_menufunc.c index 3631441b0..4438781cc 100644 --- a/src/k_menufunc.c +++ b/src/k_menufunc.c @@ -466,7 +466,7 @@ boolean M_Responder(event_t *ev) if (Playing() && !demo.playback) { // Quick Retry (Y in modeattacking) - if (modeattacking && G_PlayerInputDown(0, gc_respawn, splitscreen + 1) == true) + if (modeattacking && G_PlayerInputDown(0, gc_bail, splitscreen + 1) == true) { M_TryAgain(0); return true; diff --git a/src/menus/options-profiles-edit-controls.c b/src/menus/options-profiles-edit-controls.c index 628035f3a..1fc1b914e 100644 --- a/src/menus/options-profiles-edit-controls.c +++ b/src/menus/options-profiles-edit-controls.c @@ -39,10 +39,10 @@ menuitem_t OPTIONS_ProfileControls[] = { {IT_CONTROL, "Brake / Go back", "Brake / Go back", "TLB_X", {.routine = M_ProfileSetControl}, gc_x, 0}, - {IT_CONTROL, "Respawn", "Respawn", + {IT_CONTROL, "Ring Bail", "Ring Bail / Burst", "TLB_Y", {.routine = M_ProfileSetControl}, gc_y, 0}, - {IT_CONTROL, "Action", "Multiplayer quick-chat / quick-vote", + {IT_CONTROL, "Action", "Quick-vote / Quick-chat / Time Attack Quick Restart", "TLB_Z", {.routine = M_ProfileSetControl}, gc_z, 0}, {IT_CONTROL, "Use Item", "Use item", diff --git a/src/objects/ring-shooter.c b/src/objects/ring-shooter.c index 83613d3c5..2f731a7cd 100644 --- a/src/objects/ring-shooter.c +++ b/src/objects/ring-shooter.c @@ -668,7 +668,7 @@ boolean Obj_PlayerRingShooterFreeze(const player_t *player) const mobj_t *base = player->ringShooter; if (AllowRingShooter(player) == true - && (player->cmd.buttons & BT_RESPAWN) == BT_RESPAWN + && (player->cmd.buttons & BT_RESPAWNMASK) == BT_RESPAWNMASK && P_MobjWasRemoved(base) == false) { return (rs_base_canceled(base) == 0); @@ -682,7 +682,7 @@ void Obj_RingShooterInput(player_t *player) mobj_t *const base = player->ringShooter; if (AllowRingShooter(player) == true - && (player->cmd.buttons & BT_RESPAWN) == BT_RESPAWN) + && (player->cmd.buttons & BT_RESPAWNMASK) == BT_RESPAWNMASK) { // "Freeze" final-failsafe timer if we're eligible to ringshooter, but don't reset it. if (player->finalfailsafe) diff --git a/src/p_user.c b/src/p_user.c index 74a4be388..feebebc48 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -3067,7 +3067,7 @@ void P_DemoCameraMovement(camera_t *cam, UINT8 num) } // if you hold Y, you will lock on to displayplayer. (The last player you were ""f12-ing"") - if (cam->freecam && cmd->buttons & BT_RESPAWN) + if (cam->freecam && cmd->buttons & BT_BAIL) { lastp = &players[displayplayers[0]]; // Fun fact, I was trying displayplayers[0]->mo as if it was Lua like an absolute idiot. cam->angle = R_PointToAngle2(cam->x, cam->y, lastp->mo->x, lastp->mo->y); @@ -3369,7 +3369,7 @@ boolean P_MoveChaseCamera(player_t *player, camera_t *thiscam, boolean resetcall if (P_CameraThinker(player, thiscam, resetcalled)) return true; - lookback = ( player->cmd.buttons & BT_LOOKBACK ); + lookback = K_GetKartButtons(player) & BT_LOOKBACK; camspeed = cv_cam_speed[num].value; camstill = cv_cam_still[num].value || player->seasaw; // RR: seasaws lock the camera so that it isn't disorienting.