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