From 51abee48cd2d1c64ad0b24610e0863c5dd7bdcef Mon Sep 17 00:00:00 2001 From: Antonio Martinez Date: Wed, 25 Jun 2025 14:23:32 -0400 Subject: [PATCH] Reduce stun based on distance to leader --- src/k_kart.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/k_kart.c b/src/k_kart.c index 6a83abda4..794f193b4 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -16302,10 +16302,12 @@ 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) +void K_ApplyStun(player_t *player, mobj_t *inflictor, mobj_t *source, ATTRUNUSED INT32 damage, ATTRUNUSED UINT8 damagetype) { #define BASE_STUN_TICS_MIN (4 * TICRATE) #define BASE_STUN_TICS_MAX (10 * TICRATE) + #define MAX_STUN_REDUCTION (FRACUNIT/2) + #define STUN_REDUCTION_DISTANCE (20000) INT32 stunTics = 0; UINT8 numPlayers = 0; UINT8 i; @@ -16350,10 +16352,20 @@ void K_ApplyStun(player_t *player, mobj_t *inflictor, mobj_t *source, INT32 dama stunTics /= 4; } + UINT32 dist = K_GetItemRouletteDistance(player, D_NumPlayersInRace()); + if (dist > STUN_REDUCTION_DISTANCE) + dist = STUN_REDUCTION_DISTANCE; + + fixed_t distfactor = FixedDiv(dist, STUN_REDUCTION_DISTANCE); // 0-1 as you approach STUN_REDUCTION_DISTANCE + fixed_t stunfactor = Easing_Linear(distfactor, FRACUNIT, MAX_STUN_REDUCTION); + stunTics = FixedMul(stunTics*FRACUNIT, stunfactor)/FRACUNIT; + player->stunned = max(stunTics, 0); #undef BASE_STUN_TICS_MIN #undef BASE_STUN_TICS_MAX + #undef MAX_STUN_REDUCTION + #undef STUN_REDUCTION_DISTANCE } //}