Fix weird stacking speed dropoff issue

Thanks so much Indev!
This commit is contained in:
NepDisk 2025-05-18 18:52:45 -04:00
parent e9b79efe2d
commit 1897f9d1e7
3 changed files with 7 additions and 4 deletions

View file

@ -635,6 +635,7 @@ struct player_t
fixed_t boostpower; // Base boost value, for offroad
fixed_t speedboost; // Boost value smoothing for max speed
fixed_t prevspeedboost; // Max speed boost value from the last frame
fixed_t accelboost; // Boost value smoothing for acceleration
angle_t boostangle; // angle set when not spun out OR boosted to determine what direction you should keep going at if you're spun out and boosted.
boostinfo_t boostinfo; // Stores values used for setting speed and accel boosts.

View file

@ -3589,7 +3589,6 @@ static void K_GetKartBoostPower(player_t *player)
fixed_t finalspeedboost = 0;
fixed_t finalaccelboost = 0;
UINT8 finalgrade = 0;
fixed_t prevspeedboost = player->speedboost;
if (player->spinouttimer && player->wipeoutslow == 1) // Slow down after you've been bumped
{
@ -3686,19 +3685,19 @@ static void K_GetKartBoostPower(player_t *player)
player->speedboost = max(finalspeedboost, player->speedboost)/2;
player->accelboost = max(finalaccelboost, player->accelboost)/2;
}
else if (finalspeedboost >= prevspeedboost)
else if (finalspeedboost >= player->prevspeedboost)
{
player->speedboost = max(player->speedboost, finalspeedboost);
player->accelboost = max(player->accelboost, finalaccelboost);
}
else if ((player->aizdriftstrat && abs((player->drift) < 5)) || (K_GetKartButtons(player) & BT_BRAKE))
{
player->speedboost = max(prevspeedboost - SPEEDBOOSTDROPOFF_BRAKE, min(player->speedboost, MAXVANILLABOOST));
player->speedboost = max(player->prevspeedboost - SPEEDBOOSTDROPOFF_BRAKE, min(player->speedboost, MAXVANILLABOOST));
player->accelboost = finalaccelboost;
}
else
{
player->speedboost = prevspeedboost - SPEEDBOOSTDROPOFF;
player->speedboost = max(player->speedboost + (finalspeedboost - player->speedboost) / (TICRATE/2), player->speedboost - SPEEDBOOSTDROPOFF);
player->accelboost = finalaccelboost;
}
}
@ -3718,6 +3717,7 @@ static void K_GetKartBoostPower(player_t *player)
player->numboosts = finalgrade;
K_ClearBoost(player);
player->prevspeedboost = player->speedboost;
}
// Returns value based on being Grown or Shrunk otherwise returns FRACUNIT

View file

@ -277,6 +277,7 @@ static void P_NetArchivePlayers(savebuffer_t *save)
WRITEFIXED(save->p, players[i].boostpower);
WRITEFIXED(save->p, players[i].speedboost);
WRITEFIXED(save->p, players[i].prevspeedboost);
WRITEFIXED(save->p, players[i].accelboost);
WRITEANGLE(save->p, players[i].boostangle);
WRITEUINT8(save->p, players[i].numsneakers);
@ -605,6 +606,7 @@ static void P_NetUnArchivePlayers(savebuffer_t *save)
players[i].boostpower = READFIXED(save->p);
players[i].speedboost = READFIXED(save->p);
players[i].prevspeedboost = READFIXED(save->p);
players[i].accelboost = READFIXED(save->p);
players[i].boostangle = READANGLE(save->p);
players[i].numsneakers = READUINT8(save->p);