From 83be26cd76a367f8b7654ca9dd585e8b2d3c8a0c Mon Sep 17 00:00:00 2001 From: Antonio Martinez Date: Sun, 4 Aug 2024 00:09:16 -0700 Subject: [PATCH] Defensive Overdrive when hit into debt --- src/k_kart.c | 21 +++++++++++++++++++++ src/k_kart.h | 1 + src/p_inter.c | 2 ++ 3 files changed, 24 insertions(+) diff --git a/src/k_kart.c b/src/k_kart.c index 4de45a660..28ac439a6 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -4087,6 +4087,27 @@ boolean K_Overdrive(player_t *player) return true; } +boolean K_DefensiveOverdrive(player_t *player) +{ + if (player->amps == 0) + return false; + if (player->rings > 0) + return false; + + K_SpawnDriftBoostExplosion(player, 3); + K_SpawnDriftElectricSparks(player, player->skincolor, true); + S_StartSound(player->mo, sfx_cdfm35); + S_StartSound(player->mo, sfx_cdfm13); + + player->overdrive += (player->amps)*4; + player->overshield += (player->amps)*2 + TICRATE*2; + player->overdrivepower = FRACUNIT; + + player->amps = 0; + + return true; +} + void K_DoInstashield(player_t *player) { mobj_t *layera; diff --git a/src/k_kart.h b/src/k_kart.h index 9dd5ae478..8e2d081d7 100644 --- a/src/k_kart.h +++ b/src/k_kart.h @@ -135,6 +135,7 @@ void K_SpawnAmps(player_t *player, UINT8 amps, mobj_t *impact); void K_AwardPlayerAmps(player_t *player, UINT8 amps); void K_AwardPlayerRings(player_t *player, UINT16 rings, boolean overload); boolean K_Overdrive(player_t *player); +boolean K_DefensiveOverdrive(player_t *player); void K_DoInstashield(player_t *player); void K_DoPowerClash(mobj_t *t1, mobj_t *t2); void K_DoGuardBreak(mobj_t *t1, mobj_t *t2); diff --git a/src/p_inter.c b/src/p_inter.c index 4245f50fb..b7bfbfdb8 100644 --- a/src/p_inter.c +++ b/src/p_inter.c @@ -3357,6 +3357,8 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da { player->flipDI = true; } + + K_DefensiveOverdrive(target->player); } } else