From fbe2f9fd569e96c01e9e35a9c041fe26d1914d04 Mon Sep 17 00:00:00 2001 From: Antonio Martinez Date: Fri, 26 Sep 2025 17:26:09 -0400 Subject: [PATCH] Lightningcharge can punt, blocks --- src/k_kart.c | 17 +++++++++++------ src/p_inter.c | 17 +++++++++++++++++ 2 files changed, 28 insertions(+), 6 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index fd6cd7c54..a71060797 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -3183,24 +3183,24 @@ fixed_t K_PlayerTripwireSpeedThreshold(const player_t *player) if (modeattacking && !(gametyperules & GTR_CATCHER)) required_speed = 4 * K_GetKartSpeed(player, false, false); - if ((gametyperules & GTR_CIRCUIT) && !K_Cooperative() && M_NotFreePlay() && !modeattacking) + if ((gametyperules & GTR_CIRCUIT) && !K_Cooperative() && M_NotFreePlay() && !modeattacking) { - /* + /* All of this will be for making Sonic Boom easier when you're drowning in the back, like a "reverse" proration */ #define REVERSED_SONICBOOM_PRORATION (30000) #define MAX_SONICBOOM_REDUCTION (7*FRACUNIT/8) - UINT32 dist = K_GetItemRouletteDistance(player, D_NumPlayersInRace()); + UINT32 dist = K_GetItemRouletteDistance(player, D_NumPlayersInRace()); - if (dist > REVERSED_SONICBOOM_PRORATION) + if (dist > REVERSED_SONICBOOM_PRORATION) { dist = REVERSED_SONICBOOM_PRORATION; } fixed_t distfactor = FixedDiv(dist, REVERSED_SONICBOOM_PRORATION); // - fixed_t sonicboom_aid = Easing_InCubic(distfactor, FRACUNIT, MAX_SONICBOOM_REDUCTION); + fixed_t sonicboom_aid = Easing_InCubic(distfactor, FRACUNIT, MAX_SONICBOOM_REDUCTION); required_speed = FixedMul(sonicboom_aid, required_speed); @@ -3209,7 +3209,7 @@ fixed_t K_PlayerTripwireSpeedThreshold(const player_t *player) */ required_speed += FixedMul(required_speed, K_PlayerScamPercentage(player, 3/2)); - + if(player->position == 1) { required_speed = 9 * K_GetKartSpeed(player, false, false); // Seek employment @@ -17103,6 +17103,11 @@ boolean K_PlayerCanPunt(player_t *player) return true; } + if (player->lightningcharge > 0) + { + return true; + } + if (player->tripwirePass >= TRIPWIRE_BLASTER && player->speed >= K_PlayerTripwireSpeedThreshold(player)) { return true; diff --git a/src/p_inter.c b/src/p_inter.c index b9938310e..6a3f6d4e2 100644 --- a/src/p_inter.c +++ b/src/p_inter.c @@ -3944,6 +3944,12 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da { ; } + else if (player->lightningcharge && + (type != DMG_EXPLODE || inflictor->type != MT_SPBEXPLOSION || !inflictor->movefactor)) + { + ; + sfx = sfx_s3k45; + } else if (player->hyudorotimer > 0) ; else @@ -4016,13 +4022,24 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da { K_DoPowerClash(target, inflictor); + if (player->lightningcharge) + { + K_SpawnDriftElectricSparks(player, SKINCOLOR_PURPLE, true); + } + if (inflictor->type == MT_SUPER_FLICKY) { Obj_BlockSuperFlicky(inflictor); } + + S_StartSound(target, sfx); } else if (source) + { K_DoPowerClash(target, source); + S_StartSound(target, sfx); + } + } // Full invulnerability