From 2c11aa36c32ae8b4fbe0a4b9c702369b6eddf9ed Mon Sep 17 00:00:00 2001 From: Lach Date: Thu, 19 Jun 2025 22:13:23 +1000 Subject: [PATCH] Move stunned timer calculations from P_DamageMobj into K_ApplyStun --- src/k_kart.c | 26 ++++++++++++++++++++++++++ src/k_kart.h | 2 ++ src/p_inter.c | 22 +--------------------- 3 files changed, 29 insertions(+), 21 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index 493776254..4b3445f2b 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -16307,4 +16307,30 @@ fixed_t K_TeamComebackMultiplier(player_t *player) return multiplier; } +void K_ApplyStun(player_t *player, mobj_t *inflictor, mobj_t *source, INT32 damage, UINT8 damagetype) +{ + #define BASE_STUN_TICS_MIN (4 * TICRATE) + #define BASE_STUN_TICS_MAX (10 * TICRATE) + UINT16 stunTics = 0; + + stunTics = Easing_Linear((player->kartweight - 1) * FRACUNIT / 8, BASE_STUN_TICS_MAX, BASE_STUN_TICS_MIN); + stunTics >>= player->stunnedCombo; // consecutive hits add half as much stun as the previous hit + + // 1/3 base stun values in battle + if (gametyperules & GTR_SPHERES) + { + stunTics /= 3; + } + + if (player->stunnedCombo < UINT8_MAX) + { + player->stunnedCombo++; + } + stunTics = min(player->stunned + stunTics, UINT16_MAX); + player->stunned = stunTics; + + #undef BASE_STUN_TICS_MIN + #undef BASE_STUN_TICS_MAX +} + //} diff --git a/src/k_kart.h b/src/k_kart.h index 9d9f3fdf8..a31e886d3 100644 --- a/src/k_kart.h +++ b/src/k_kart.h @@ -340,6 +340,8 @@ boolean K_TryPickMeUp(mobj_t *m1, mobj_t *m2, boolean allowHostile); fixed_t K_TeamComebackMultiplier(player_t *player); +void K_ApplyStun(player_t *player, mobj_t *inflictor, mobj_t *source, INT32 damage, UINT8 damagetype); + #ifdef __cplusplus } // extern "C" #endif diff --git a/src/p_inter.c b/src/p_inter.c index dea1597d0..aaf0c7f0b 100644 --- a/src/p_inter.c +++ b/src/p_inter.c @@ -3041,7 +3041,6 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da UINT8 type = (damagetype & DMG_TYPEMASK); const boolean hardhit = (type == DMG_EXPLODE || type == DMG_KARMA || type == DMG_TUMBLE); // This damage type can do evil stuff like ALWAYS combo INT16 ringburst = 5; - UINT16 stunTics = 0; // Check if the player is allowed to be damaged! // If not, then spawn the instashield effect instead. @@ -3488,26 +3487,7 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da } // Apply stun! - // Feel free to move these calculations higher up if different damage sources should apply variable stun in future - #define MIN_STUNTICS (4 * TICRATE) - #define MAX_STUNTICS (10 * TICRATE) - stunTics = Easing_Linear((player->kartweight - 1) * FRACUNIT / 8, MAX_STUNTICS, MIN_STUNTICS); - stunTics >>= player->stunnedCombo; // consecutive hits add half as much stun as the previous hit - - // 1/3 base stun values in battle - if (gametyperules & GTR_SPHERES) - { - stunTics /= 3; - } - - if (player->stunnedCombo < UINT8_MAX) - { - player->stunnedCombo++; - } - stunTics = min(player->stunned + stunTics, UINT16_MAX); - player->stunned = stunTics; - #undef MIN_STUNTICS - #undef MAX_STUNTICS + K_ApplyStun(player, inflictor, source, damage, damagetype); K_DefensiveOverdrive(target->player); }