From 13bedab06119e4469c8ae09cf8ebecd85749f81f Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Mon, 11 Mar 2019 03:09:16 -0400 Subject: [PATCH] Change HUD ring spin mechanic Instead of spinning at max speed while boosting & slowing down after, the spinning speed depends on how much ring boost you're currently using. This means Tails/Chao's ring spins super fast, Metal/Omega's ring spins super slow. --- src/k_kart.c | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index cd2611736..bd096ceb0 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -7914,10 +7914,10 @@ static void K_drawKartRingsAndLives(void) { #define RINGANIM_NUMFRAMES 10 #define RINGANIM_FLIPFRAME (RINGANIM_NUMFRAMES/2) -#define RINGANIM_DELAYMAX 3 +#define RINGANIM_DELAYMAX 5 static UINT8 ringanim_frame = 0; - static UINT8 ringanim_tics = 1; + static UINT8 ringanim_tics = 0; static UINT8 ringanim_delay = RINGANIM_DELAYMAX+1; SINT8 ringanim_realframe = ringanim_frame; @@ -7960,26 +7960,29 @@ static void K_drawKartRingsAndLives(void) V_DrawMappedPatch(LAPS_X+29, LAPS_Y-11, V_HUDTRANS|splitflags, kp_facenum[secondnum], ringmap); } - if (ringanim_frame == 0) // Update delay on resting frame - { - if (stplyr->kartstuff[k_ringboost]) - ringanim_delay = 0; // set the fast spin animation! - else if (ringanim_delay <= RINGANIM_DELAYMAX) - ringanim_delay++; // slow down spin - } + // 0 is the fast spin animation, set at 30 tics of ring boost or higher! + if (stplyr->kartstuff[k_ringboost] >= 30) + ringanim_delay = 0; + else + ringanim_delay = ((RINGANIM_DELAYMAX+1) * (30 - stplyr->kartstuff[k_ringboost])) / 30; - if (ringanim_delay > RINGANIM_DELAYMAX) + if (ringanim_frame == 0 && ringanim_delay > RINGANIM_DELAYMAX) { ringanim_frame = 0; - ringanim_tics = 1; + ringanim_tics = 0; } else if ((ringanim_tics--) <= 0) { if (ringanim_delay == 0) // fast spin animation + { ringanim_frame = ((ringanim_frame+2) % RINGANIM_NUMFRAMES); + ringanim_tics = 0; + } else + { ringanim_frame = ((ringanim_frame+1) % RINGANIM_NUMFRAMES); - ringanim_tics = max(1, ringanim_delay); + ringanim_tics = min(RINGANIM_DELAYMAX, ringanim_delay)-1; + } } #undef RINGANIM_NUMFRAMES