mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2026-04-26 20:11:47 +00:00
Do guardbreak in touchdamage, guarantee punish (PF2_ALWAYSDAMAGED)
This commit is contained in:
parent
72c680b54f
commit
dfaece7d3d
4 changed files with 35 additions and 24 deletions
|
|
@ -135,11 +135,12 @@ typedef enum
|
||||||
|
|
||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
PF2_SELFMUTE = 1<<1,
|
PF2_SELFMUTE = 1<<1,
|
||||||
PF2_SELFDEAFEN = 1<<2,
|
PF2_SELFDEAFEN = 1<<2,
|
||||||
PF2_SERVERMUTE = 1<<3,
|
PF2_SERVERMUTE = 1<<3,
|
||||||
PF2_SERVERDEAFEN = 1<<4,
|
PF2_SERVERDEAFEN = 1<<4,
|
||||||
PF2_STRICTFASTFALL = 1<<5,
|
PF2_STRICTFASTFALL = 1<<5,
|
||||||
|
PF2_ALWAYSDAMAGED = 1<<6,
|
||||||
} pflags2_t;
|
} pflags2_t;
|
||||||
|
|
||||||
typedef enum
|
typedef enum
|
||||||
|
|
|
||||||
|
|
@ -1168,6 +1168,27 @@ boolean K_PvPTouchDamage(mobj_t *t1, mobj_t *t2)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
boolean guard1 = K_PlayerGuard(t1->player);
|
||||||
|
boolean guard2 = K_PlayerGuard(t2->player);
|
||||||
|
|
||||||
|
// Bubble Shield physically extends past guard when inflated,
|
||||||
|
// makes some sense to suppress this behavior
|
||||||
|
if (t1->player->bubbleblowup)
|
||||||
|
guard1 = false;
|
||||||
|
if (t2->player->bubbleblowup)
|
||||||
|
guard2 = false;
|
||||||
|
|
||||||
|
if (guard1 && guard2)
|
||||||
|
K_DoPowerClash(t1, t2);
|
||||||
|
else if (guard1)
|
||||||
|
K_DoGuardBreak(t1, t2);
|
||||||
|
else if (guard2)
|
||||||
|
K_DoGuardBreak(t2, t1);
|
||||||
|
|
||||||
|
if (guard1 || guard2)
|
||||||
|
return false;
|
||||||
|
|
||||||
// Clash instead of damage if both parties have any of these conditions
|
// Clash instead of damage if both parties have any of these conditions
|
||||||
auto canClash = [](mobj_t *t1, mobj_t *t2)
|
auto canClash = [](mobj_t *t1, mobj_t *t2)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
21
src/k_kart.c
21
src/k_kart.c
|
|
@ -1182,25 +1182,6 @@ boolean K_KartBouncing(mobj_t *mobj1, mobj_t *mobj2)
|
||||||
|
|
||||||
K_SpawnBumpForObjs(mobj1, mobj2);
|
K_SpawnBumpForObjs(mobj1, mobj2);
|
||||||
|
|
||||||
if (mobj1->type == MT_PLAYER && mobj2->type == MT_PLAYER
|
|
||||||
&& !mobj1->player->powerupVFXTimer && !mobj2->player->powerupVFXTimer)
|
|
||||||
{
|
|
||||||
boolean guard1 = K_PlayerGuard(mobj1->player);
|
|
||||||
boolean guard2 = K_PlayerGuard(mobj2->player);
|
|
||||||
|
|
||||||
if (mobj1->player->bubbleblowup)
|
|
||||||
guard1 = false;
|
|
||||||
if (mobj2->player->bubbleblowup)
|
|
||||||
guard2 = false;
|
|
||||||
|
|
||||||
if (guard1 && guard2)
|
|
||||||
K_DoPowerClash(mobj1, mobj2);
|
|
||||||
else if (guard1)
|
|
||||||
K_DoGuardBreak(mobj1, mobj2);
|
|
||||||
else if (guard2)
|
|
||||||
K_DoGuardBreak(mobj2, mobj1);
|
|
||||||
}
|
|
||||||
|
|
||||||
K_PlayerJustBumped(mobj1->player);
|
K_PlayerJustBumped(mobj1->player);
|
||||||
K_PlayerJustBumped(mobj2->player);
|
K_PlayerJustBumped(mobj2->player);
|
||||||
|
|
||||||
|
|
@ -4620,7 +4601,9 @@ void K_DoGuardBreak(mobj_t *t1, mobj_t *t2) {
|
||||||
angle_t thrangle = R_PointToAngle2(t2->x, t2->y, t1->x, t1->y);
|
angle_t thrangle = R_PointToAngle2(t2->x, t2->y, t1->x, t1->y);
|
||||||
P_Thrust(t1, thrangle, 7*mapobjectscale);
|
P_Thrust(t1, thrangle, 7*mapobjectscale);
|
||||||
|
|
||||||
|
t1->player->pflags2 |= PF2_ALWAYSDAMAGED;
|
||||||
P_DamageMobj(t1, t2, t2, 1, DMG_TUMBLE);
|
P_DamageMobj(t1, t2, t2, 1, DMG_TUMBLE);
|
||||||
|
t1->player->pflags2 &= ~PF2_ALWAYSDAMAGED;
|
||||||
|
|
||||||
clash = P_SpawnMobj((t1->x/2) + (t2->x/2), (t1->y/2) + (t2->y/2), (t1->z/2) + (t2->z/2), MT_GUARDBREAK);
|
clash = P_SpawnMobj((t1->x/2) + (t2->x/2), (t1->y/2) + (t2->y/2), (t1->z/2) + (t2->z/2), MT_GUARDBREAK);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3094,6 +3094,12 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da
|
||||||
invincible = false;
|
invincible = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (player->pflags2 && PF2_ALWAYSDAMAGED)
|
||||||
|
{
|
||||||
|
invincible = false;
|
||||||
|
clash = false;
|
||||||
|
}
|
||||||
|
|
||||||
// TODO: doing this from P_DamageMobj limits punting to objects that damage the player.
|
// TODO: doing this from P_DamageMobj limits punting to objects that damage the player.
|
||||||
// And it may be kind of yucky.
|
// And it may be kind of yucky.
|
||||||
// But this is easier than accounting for every condition in PIT_CheckThing!
|
// But this is easier than accounting for every condition in PIT_CheckThing!
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue