Lightningcharge can punt, blocks

This commit is contained in:
Antonio Martinez 2025-09-26 17:26:09 -04:00
parent 7b4cf9a07c
commit fbe2f9fd56
2 changed files with 28 additions and 6 deletions

View file

@ -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;

View file

@ -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