diff --git a/src/k_kart.c b/src/k_kart.c index 14e887e47..5a96b65fd 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -7109,9 +7109,15 @@ static void K_HandleRingDeincrement(player_t *player, boolean chainnerf) finalringtimer += subring; } + + if (player->ringboost - finalringtimer > player->chaintimer) + { + // Cap this to prevent displacement between chaintimer and ringtimer. + player->chaintimer = min(player->ringboost, (TICRATE - TICRATE/4)); + } } - player->ringboost = max(0, K_ChainOrDeincrementTime(player, player->ringboost, finalringtimer)); + player->ringboost = max(player->chaintimer ? 1: 0, player->ringboost - finalringtimer); } /** \brief Decreases various kart timers and powers per frame. Called in P_PlayerThink in p_user.c diff --git a/src/p_enemy.c b/src/p_enemy.c index b03409253..e79b11c4e 100644 --- a/src/p_enemy.c +++ b/src/p_enemy.c @@ -3583,6 +3583,9 @@ void A_AttractChase(mobj_t *actor) actor->target->player->ringboost += K_GetKartRingPower(actor->target->player, true) + 3; S_StartSoundAtVolume(actor->target, sfx_s1b5, actor->target->player->ringvolume); + if (actor->target->player->ringboost > (4*TICRATE + TICRATE/2)) + actor->target->player->ringboost = (4*TICRATE + TICRATE/2); + actor->target->player->ringvolume -= RINGVOLUMEUSEPENALTY; P_KillMobj(actor, actor->target, actor->target, DMG_NORMAL); @@ -3607,6 +3610,9 @@ void A_AttractChase(mobj_t *actor) if (!P_GivePlayerRings(actor->target->player, 1)) // returns 0 if addition failed actor->target->player->ringboost += K_GetKartRingPower(actor->target->player, true) + 3; + if (actor->target->player->ringboost > (4*TICRATE + TICRATE/2)) + actor->target->player->ringboost = (4*TICRATE + TICRATE/2); + if (actor->cvmem) // caching S_StartSound(actor->target, sfx_s1c5); else