From 64eb425b789f7cb2cae4d3a201e1d7f1cf0e6eaa Mon Sep 17 00:00:00 2001 From: NepDisk Date: Tue, 25 Mar 2025 23:26:48 -0400 Subject: [PATCH] stacking pt.4.5: Ring Adjustments Rings are now capped for all modes to around chao's max duration. Ringboost affect on chaintimer has been capped to prevent them from desynching too much due to ring chaining nerf --- src/k_kart.c | 8 +++++++- src/p_enemy.c | 6 ++++++ 2 files changed, 13 insertions(+), 1 deletion(-) 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