From 5082409aecee0c91d9c7b9171750102b3adfae82 Mon Sep 17 00:00:00 2001 From: minenice55 Date: Sun, 8 Feb 2026 02:32:42 -0500 Subject: [PATCH] try to fix tapping recovery spin input keeping boosted acceleration --- src/d_netcmd.c | 10 +-- src/k_kart.c | 201 +++++++++++++++++++++++++------------------------ 2 files changed, 109 insertions(+), 102 deletions(-) diff --git a/src/d_netcmd.c b/src/d_netcmd.c index a63bc6265..4d8e5ca5d 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -557,15 +557,15 @@ consvar_t cv_kartstacking_heavydrop_handleboost = CVAR_INIT ("vanillaboost_heavy consvar_t cv_kartstacking_heavydrop_stackable = CVAR_INIT ("vanillaboost_heavydrop_stackable", "On", CV_NETVAR|CV_CHEAT|CV_GUARD, CV_OnOff, NULL); consvar_t cv_kartstacking_heavydrop_uniform = CVAR_INIT ("vanillaboost_heavydrop_uniform", "No", CV_NETVAR|CV_CHEAT|CV_GUARD, CV_YesNo, NULL); -consvar_t cv_kartstacking_ssmt_speedboost = CVAR_INIT ("vanillaboost_ssmt_speedboost", "0.1", CV_NETVAR|CV_CHEAT|CV_FLOAT|CV_GUARD, CV_Unsigned, NULL); -consvar_t cv_kartstacking_ssmt_accelboost = CVAR_INIT ("vanillaboost_ssmt_accelboost", "8.0", CV_NETVAR|CV_CHEAT|CV_FLOAT|CV_GUARD, CV_Unsigned, NULL); -consvar_t cv_kartstacking_ssmt_handleboost = CVAR_INIT ("vanillaboost_ssmt_handleboost", "0.1", CV_NETVAR|CV_CHEAT|CV_FLOAT|CV_GUARD, CV_Unsigned, NULL); +consvar_t cv_kartstacking_ssmt_speedboost = CVAR_INIT ("vanillaboost_ssmt_speedboost", "0.125", CV_NETVAR|CV_CHEAT|CV_FLOAT|CV_GUARD, CV_Unsigned, NULL); +consvar_t cv_kartstacking_ssmt_accelboost = CVAR_INIT ("vanillaboost_ssmt_accelboost", "10.0", CV_NETVAR|CV_CHEAT|CV_FLOAT|CV_GUARD, CV_Unsigned, NULL); +consvar_t cv_kartstacking_ssmt_handleboost = CVAR_INIT ("vanillaboost_ssmt_handleboost", "0.01", CV_NETVAR|CV_CHEAT|CV_FLOAT|CV_GUARD, CV_Unsigned, NULL); -consvar_t cv_kartstacking_recspin_speedboost_lo = CVAR_INIT ("vanillaboost_recspin_speedboost_lo", "0.0001", CV_NETVAR|CV_CHEAT|CV_FLOAT|CV_GUARD, CV_Unsigned, NULL); +consvar_t cv_kartstacking_recspin_speedboost_lo = CVAR_INIT ("vanillaboost_recspin_speedboost_lo", "0", CV_NETVAR|CV_CHEAT|CV_FLOAT|CV_GUARD, CV_Unsigned, NULL); consvar_t cv_kartstacking_recspin_accelboost_lo = CVAR_INIT ("vanillaboost_recspin_accelboost_lo", "2.0", CV_NETVAR|CV_CHEAT|CV_FLOAT|CV_GUARD, CV_Unsigned, NULL); consvar_t cv_kartstacking_recspin_handleboost_lo = CVAR_INIT ("vanillaboost_recspin_handleboost_lo", "0.25", CV_NETVAR|CV_CHEAT|CV_FLOAT|CV_GUARD, CV_Unsigned, NULL); -consvar_t cv_kartstacking_recspin_speedboost_hi = CVAR_INIT ("vanillaboost_recspin_speedboost_hi", "0.0001", CV_NETVAR|CV_CHEAT|CV_FLOAT|CV_GUARD, CV_Unsigned, NULL); +consvar_t cv_kartstacking_recspin_speedboost_hi = CVAR_INIT ("vanillaboost_recspin_speedboost_hi", "0", CV_NETVAR|CV_CHEAT|CV_FLOAT|CV_GUARD, CV_Unsigned, NULL); consvar_t cv_kartstacking_recspin_accelboost_hi = CVAR_INIT ("vanillaboost_recspin_accelboost_hi", "8.0", CV_NETVAR|CV_CHEAT|CV_FLOAT|CV_GUARD, CV_Unsigned, NULL); consvar_t cv_kartstacking_recspin_handleboost_hi = CVAR_INIT ("vanillaboost_recspin_handleboost_hi", "0.5", CV_NETVAR|CV_CHEAT|CV_FLOAT|CV_GUARD, CV_Unsigned, NULL); diff --git a/src/k_kart.c b/src/k_kart.c index e49e32363..ebbd888ea 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -2934,8 +2934,7 @@ static void K_GetKartBoostPower(player_t *player) { K_DoBoost(player, SSMTSPEEDBOOST, SSMTACCELBOOST, SSMTHANDLEBOOST, false, true); // + 10% top speed, + ?% acceleration } - - if ((player->pflags & PF_RECOVERYSPIN)) + else if (player->pflags & PF_RECOVERYSPIN) { if (player->flashing || player->recoverydashcharge >= TICRATE) { @@ -9907,7 +9906,7 @@ static void K_KartSlipdash(player_t *player, boolean onground) static boolean K_PlayerWantsRecoverySpin(player_t *player) { - return ((player->cmd.buttons & BT_ACCELERATE) && (player->cmd.buttons & BT_BRAKE) && !(player->cmd.buttons & BT_DRIFT)); + return ((player->cmd.buttons & BT_ACCELERATE) && (player->cmd.buttons & BT_BRAKE) && (!(player->cmd.buttons & BT_DRIFT))); } static boolean K_PlayerCanStartRecoverySpin(player_t *player) @@ -9931,112 +9930,29 @@ static void K_RecoveryDash(player_t *player) { player->wipeoutslow = player->spinouttimer; } + + if ((player->pflags & PF_RECOVERYSPIN) && player->forcedtopspeed == 0 && player->speed >= 10*player->mo->scale) + { + player->pflags &= ~PF_RECOVERYSPIN; + player->forcedtopspeed = 0; + player->recoverydashcharge = 0; + } + if (K_PlayerCanRecoverySpin(player)) { if (K_PlayerWantsRecoverySpin(player) && K_PlayerCanStartRecoverySpin(player)) { player->pflags |= PF_RECOVERYSPIN; + player->forcedtopspeed = cv_kartrecoverydash_spinspeed.value + 8; S_StartSound(player->mo, sfx_cdfm20); } + if (player->pflags & PF_RECOVERYSPIN) { - if ((player->cmd.buttons & BT_ACCELERATE) && (player->cmd.buttons & BT_BRAKE)) - { - player->forcedtopspeed = cv_kartrecoverydash_spinspeed.value + 8; - if (P_IsObjectOnGround(player->mo)) - { - player->recoverydashcharge += 1; - K_SpawnWipeoutTrail(player->mo, (player->recoverydashcharge < 3*TICRATE/2)); - - if (leveltime % 6 == 0) - { - if (player->recoverydashcharge < 2*TICRATE) - { - S_StartSound(player->mo, sfx_s225); - } - } - if (leveltime % 4 == 0) - { - fixed_t newx; - fixed_t newy; - mobj_t *skid; - angle_t travelangle; - travelangle = player->mo->angle; - for (INT32 i = 0; i < 2; i++) - { - newx = P_ReturnThrustX(player->mo, travelangle + ((i&1) ? -1 : 1)*ANGLE_135, FixedMul(28*FRACUNIT, player->mo->scale)); - newy = P_ReturnThrustY(player->mo, travelangle + ((i&1) ? -1 : 1)*ANGLE_135, FixedMul(28*FRACUNIT, player->mo->scale)); - skid = P_SpawnMobjFromMobj(player->mo, newx, newy, (10*player->mo->scale), MT_OVERLAY); - P_SetTarget(&skid->target, player->mo); - skid->sprxoff = newx; - skid->spryoff = newy; - skid->sprzoff = (10*player->mo->scale); - - P_SetScale(skid, player->mo->scale); - skid->destscale = player->mo->destscale; - skid->scalespeed = player->mo->scalespeed; - skid->movefactor = FRACUNIT; - skid->angle = travelangle; - - - P_SetMobjState(skid, S_RECSPIN_SKID); - K_MatchGenericExtraFlags(skid, player->mo); - if (player->recoverydashcharge >= 2*TICRATE) - { - skid->renderflags |= RF_TRANS20; - } - else - { - skid->renderflags |= RF_TRANS40; - } - if (i) skid->renderflags |= RF_HORIZONTALFLIP; - } - } - } - if (player->recoverydashcharge >= 2*TICRATE) - { - if (player->recoverydashcharge == 2*TICRATE) - { - S_StartSound(player->mo, sfx_s3ka2); - } - if (leveltime & 1) - { - fixed_t newx; - fixed_t newy; - mobj_t *spark; - angle_t travelangle, sparkangle; - travelangle = player->mo->angle; - sparkangle = R_PointToAngle2(0, 0, player->mo->momx, player->mo->momy); - for (INT32 i = 0; i < 2; i++) - { - newx = player->mo->x + P_ReturnThrustX(player->mo, travelangle + ((i&1) ? -1 : 1)*ANGLE_135, FixedMul(32*FRACUNIT, player->mo->scale)); - newy = player->mo->y + P_ReturnThrustY(player->mo, travelangle + ((i&1) ? -1 : 1)*ANGLE_135, FixedMul(32*FRACUNIT, player->mo->scale)); - spark = P_SpawnMobj(newx, newy, player->mo->z, MT_DRIFTSPARK); - spark->momx = player->mo->momx/2; - spark->momy = player->mo->momy/2; - - P_SetTarget(&spark->target, player->mo); - spark->angle = sparkangle; - spark->color = SKINCOLOR_WHITE; - - if (player->recoverydashcharge >= 2*TICRATE + TICRATE/4) - { - P_SetMobjState(spark, S_DRIFTSPARK_B1); - } - else - { - P_SetMobjState(spark, S_DRIFTSPARK_A1); - } - K_MatchGenericExtraFlags(spark, player->mo); - } - } - } - } - else + if (!((player->cmd.buttons & BT_ACCELERATE) && (player->cmd.buttons & BT_BRAKE))) { player->pflags &= ~PF_RECOVERYSPIN; player->forcedtopspeed = 0; - player->tiregrease = 2*TICRATE; if (player->recoverydashcharge >= 2*TICRATE && (player->cmd.buttons & BT_ACCELERATE)) { player->outrun = TICRATE/4; @@ -10046,6 +9962,97 @@ static void K_RecoveryDash(player_t *player) K_SpawnDashDustRelease(player, true); } player->recoverydashcharge = 0; + return; + } + + player->forcedtopspeed = cv_kartrecoverydash_spinspeed.value + 8; + if (P_IsObjectOnGround(player->mo)) + { + player->recoverydashcharge += 1; + K_SpawnWipeoutTrail(player->mo, (player->recoverydashcharge < 3*TICRATE/2)); + + if (leveltime % 6 == 0) + { + if (player->recoverydashcharge < 2*TICRATE) + { + S_StartSound(player->mo, sfx_s225); + } + } + if (leveltime % 4 == 0) + { + fixed_t newx; + fixed_t newy; + mobj_t *skid; + angle_t travelangle; + travelangle = player->mo->angle; + for (INT32 i = 0; i < 2; i++) + { + newx = P_ReturnThrustX(player->mo, travelangle + ((i&1) ? -1 : 1)*ANGLE_135, FixedMul(28*FRACUNIT, player->mo->scale)); + newy = P_ReturnThrustY(player->mo, travelangle + ((i&1) ? -1 : 1)*ANGLE_135, FixedMul(28*FRACUNIT, player->mo->scale)); + skid = P_SpawnMobjFromMobj(player->mo, newx, newy, (10*player->mo->scale), MT_OVERLAY); + P_SetTarget(&skid->target, player->mo); + skid->sprxoff = newx; + skid->spryoff = newy; + skid->sprzoff = (10*player->mo->scale); + + P_SetScale(skid, player->mo->scale); + skid->destscale = player->mo->destscale; + skid->scalespeed = player->mo->scalespeed; + skid->movefactor = FRACUNIT; + skid->angle = travelangle; + + + P_SetMobjState(skid, S_RECSPIN_SKID); + K_MatchGenericExtraFlags(skid, player->mo); + if (player->recoverydashcharge >= 2*TICRATE) + { + skid->renderflags |= RF_TRANS20; + } + else + { + skid->renderflags |= RF_TRANS40; + } + if (i) skid->renderflags |= RF_HORIZONTALFLIP; + } + } + } + + if (player->recoverydashcharge >= 2*TICRATE) + { + if (player->recoverydashcharge == 2*TICRATE) + S_StartSound(player->mo, sfx_s3ka2); + + if (leveltime & 1) + { + fixed_t newx; + fixed_t newy; + mobj_t *spark; + angle_t travelangle, sparkangle; + travelangle = player->mo->angle; + sparkangle = R_PointToAngle2(0, 0, player->mo->momx, player->mo->momy); + for (INT32 i = 0; i < 2; i++) + { + newx = player->mo->x + P_ReturnThrustX(player->mo, travelangle + ((i&1) ? -1 : 1)*ANGLE_135, FixedMul(32*FRACUNIT, player->mo->scale)); + newy = player->mo->y + P_ReturnThrustY(player->mo, travelangle + ((i&1) ? -1 : 1)*ANGLE_135, FixedMul(32*FRACUNIT, player->mo->scale)); + spark = P_SpawnMobj(newx, newy, player->mo->z, MT_DRIFTSPARK); + spark->momx = player->mo->momx/2; + spark->momy = player->mo->momy/2; + + P_SetTarget(&spark->target, player->mo); + spark->angle = sparkangle; + spark->color = SKINCOLOR_WHITE; + + if (player->recoverydashcharge >= 2*TICRATE + TICRATE/4) + { + P_SetMobjState(spark, S_DRIFTSPARK_B1); + } + else + { + P_SetMobjState(spark, S_DRIFTSPARK_A1); + } + K_MatchGenericExtraFlags(spark, player->mo); + } + } } } }