Slowest bot rubberbanding at the end of maps

This commit is contained in:
Sally Coolatta 2024-04-29 01:35:29 -04:00
parent 8e6ae6179d
commit e287474ef1

View file

@ -649,6 +649,18 @@ static UINT32 K_BotRubberbandDistance(const player_t *player)
--------------------------------------------------*/
fixed_t K_BotRubberband(const player_t *player)
{
if (player->exiting)
{
// You're done, we don't need to rubberband anymore.
return FRACUNIT;
}
const botcontroller_t *botController = K_GetBotController(player->mo);
if (botController != nullptr && (botController->flags & TMBOT_NORUBBERBAND) == TMBOT_NORUBBERBAND) // Disable rubberbanding
{
return FRACUNIT;
}
const fixed_t difficultyEase = ((player->botvars.difficulty - 1) * FRACUNIT) / (MAXBOTDIFFICULTY - 1);
// Lv. 1: x0.65 avg
@ -682,18 +694,6 @@ fixed_t K_BotRubberband(const player_t *player)
player_t *firstplace = nullptr;
size_t i = SIZE_MAX;
if (player->exiting)
{
// You're done, we don't need to rubberband anymore.
return FRACUNIT;
}
const botcontroller_t *botController = K_GetBotController(player->mo);
if (botController != nullptr && (botController->flags & TMBOT_NORUBBERBAND) == TMBOT_NORUBBERBAND) // Disable rubberbanding
{
return FRACUNIT;
}
for (i = 0; i < MAXPLAYERS; i++)
{
if (!playeringame[i] || players[i].spectator)
@ -751,6 +751,20 @@ fixed_t K_BotRubberband(const player_t *player)
}
}
UINT32 scaled_dist = player->distancetofinish;
if (mapobjectscale != FRACUNIT)
{
// Bring back to normal scale.
scaled_dist = FixedDiv(scaled_dist, mapobjectscale);
}
constexpr UINT32 END_DIST = 2048 * 14;
if (scaled_dist < END_DIST)
{
// At the end of tracks, start slowing down.
rubberband = FixedMul(rubberband, FixedDiv(scaled_dist, END_DIST));
}
return Easing_Linear(rubberband, rubberSlow, rubberFast);
}