From ecf9fd53f60ad670b295755d5c80853de1ddb4b7 Mon Sep 17 00:00:00 2001 From: James R Date: Thu, 11 Jan 2024 22:33:59 -0800 Subject: [PATCH] Players cannot be invincible to Insta-whip vs Guard counter Hacked into P_DamageMobj by way of inflictor == target --- src/k_collide.cpp | 5 +++-- src/p_inter.c | 6 ++++++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/k_collide.cpp b/src/k_collide.cpp index b9338e681..38e69c8e4 100644 --- a/src/k_collide.cpp +++ b/src/k_collide.cpp @@ -860,7 +860,8 @@ boolean K_InstaWhipCollide(mobj_t *shield, mobj_t *victim) attacker->momx = attacker->momy = 0; P_Thrust(attacker, thrangle, mapobjectscale*7); - P_DamageMobj(attacker, victim, victim, 1, DMG_TUMBLE); + // target is inflictor: hack to let invincible players lose to guard + P_DamageMobj(attacker, attacker, victim, 1, DMG_TUMBLE); // A little extra juice, so successful reads are usually positive or zero on spheres. victimPlayer->spheres = std::min(victimPlayer->spheres + 10, 40); @@ -883,7 +884,7 @@ boolean K_InstaWhipCollide(mobj_t *shield, mobj_t *victim) P_PlayVictorySound(victim); - P_DamageMobj(attacker, victim, victim, 1, DMG_TUMBLE); + P_DamageMobj(attacker, attacker, victim, 1, DMG_TUMBLE); S_StartSound(victim, sfx_mbv92); K_AddHitLag(attacker, victimHitlag, true); diff --git a/src/p_inter.c b/src/p_inter.c index 4bc4cf9d8..24edf3fdd 100644 --- a/src/p_inter.c +++ b/src/p_inter.c @@ -3076,6 +3076,12 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da invincible = false; } + // Hack for instawhip-guard counter, lets invincible players lose to guard + if (inflictor == target) + { + invincible = false; + } + // TODO: doing this from P_DamageMobj limits punting to objects that damage the player. // And it may be kind of yucky. // But this is easier than accounting for every condition in PIT_CheckThing!