From 0e71e7bb6d736a2573ae961e8911497d7900d1db Mon Sep 17 00:00:00 2001 From: James R Date: Sun, 19 Mar 2023 05:20:33 -0700 Subject: [PATCH] VFX for overcharged and emergency spindashes - Bubble alternates flashing red for 6 tics during overcharge. - Bubble shakes violently during emergency spindash. --- src/k_kart.c | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/src/k_kart.c b/src/k_kart.c index 05f093459..c056bedcf 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -9713,6 +9713,10 @@ void K_KartEbrakeVisuals(player_t *p) K_FlipFromObject(p->mo->hprev, p->mo); K_ReduceVFX(p->mo->hprev, p); p->mo->hprev->sprzoff = p->mo->sprzoff; + + p->mo->hprev->colorized = false; + p->mo->hprev->spritexoffset = 0; + p->mo->hprev->spriteyoffset = 0; } if (!p->spindash) @@ -9740,13 +9744,32 @@ void K_KartEbrakeVisuals(player_t *p) // update HOLD bubble with numbers based on charge. if (p->mo->hprev && !P_MobjWasRemoved(p->mo->hprev)) { + const INT16 overcharge = (p->spindash - MAXCHARGETIME); + const boolean desperation = (p->rings <= 0); // desperation spindash + UINT8 frame = min(1 + ((p->spindash*3) / MAXCHARGETIME), 4); // ?! limit. - if (p->spindash >= MAXCHARGETIME +TICRATE) + if (overcharge >= TICRATE) frame = 5; p->mo->hprev->frame = frame|FF_FULLBRIGHT; + + if (overcharge >= 0) + { + // overcharged spindash flashes red. + p->mo->hprev->color = SKINCOLOR_MAROON; + p->mo->hprev->colorized = (overcharge % 12) >= 6; + + p->mo->hprev->spritexoffset = P_AltFlip(2*FRACUNIT, 2); + } + + if (desperation) + { + // desperation spindash shakes VIOLENTLY. + p->mo->hprev->spritexoffset = P_AltFlip(4*FRACUNIT, 2); + p->mo->hprev->spriteyoffset = P_AltFlip(2*FRACUNIT, 1); + } } // shake the player as they charge their spindash!