From 284a86c7b9ff69ddb73b7aaf41bac6cbd853e75f Mon Sep 17 00:00:00 2001 From: NepDisk Date: Sun, 12 Apr 2026 11:57:58 -0400 Subject: [PATCH] Nerf ring chains by improving ring burnout performance Finally its halfed then smoothed down rather then just dropping to 2 then 1. Makes Ring Chains still exist but less broken since you can't chain as large of sections anymore. I need to add better visuals and sound design for this since its much more noticable now. --- src/k_kart.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index cb97973ce..007925706 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -9087,9 +9087,11 @@ INT32 K_GetKartRingPower(const player_t *player, boolean boosted) finalPower += 3; // If you use alot of rings at a time, you start gaining less ring timer... - if (player->ringtime == finalPower*ringcap) + fixed_t burnStart = finalPower*ringcap; + fixed_t burnEnd = finalPower*(ringcap+(ringcap/2)); + if (player->ringtime >= burnStart) { - if (P_IsLocalPlayer(player)) + if (P_IsLocalPlayer(player) && player->ringtime == burnStart) { efx_t efx; S_InitEFXArray(&efx); @@ -9098,14 +9100,12 @@ INT32 K_GetKartRingPower(const player_t *player, boolean boosted) S_StartSoundAtVolumeEx(NULL, sfx_cdfm66, 255, &efx); } - } - else if (player->ringtime > finalPower*(ringcap+(ringcap/2))) - { - finalPower = 1; - } - else if (player->ringtime > finalPower*ringcap) - { - finalPower = 2; + + fixed_t usage = CLAMP(FixedDiv(player->ringtime - burnStart, burnEnd - burnStart), 0, FRACUNIT); + + usage = Easing_OutCubic(usage, finalPower * FRACUNIT, FRACUNIT); + + finalPower = max(usage / FRACUNIT, 1); } return finalPower;