From e287474ef12fc7190654975293e5f2112dc18d55 Mon Sep 17 00:00:00 2001 From: Sally Coolatta Date: Mon, 29 Apr 2024 01:35:29 -0400 Subject: [PATCH] Slowest bot rubberbanding at the end of maps --- src/k_bot.cpp | 38 ++++++++++++++++++++++++++------------ 1 file changed, 26 insertions(+), 12 deletions(-) diff --git a/src/k_bot.cpp b/src/k_bot.cpp index be054fa15..6ee701c62 100644 --- a/src/k_bot.cpp +++ b/src/k_bot.cpp @@ -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); }