diff --git a/src/k_collide.c b/src/k_collide.c index 96fe30182..9b0463bfc 100644 --- a/src/k_collide.c +++ b/src/k_collide.c @@ -17,6 +17,9 @@ boolean K_OrbinautJawzCollide(mobj_t *t1, mobj_t *t2) boolean damageitem = false; boolean sprung = false; + if ((t1->threshold > 0 && t2->hitlag > 0) || (t2->threshold > 0 && t1->hitlag > 0)) + return true; + if (((t1->target == t2) || (t1->target == t2->target)) && (t1->threshold > 0 || (t2->type != MT_PLAYER && t2->threshold > 0))) return true; @@ -108,6 +111,9 @@ boolean K_BananaBallhogCollide(mobj_t *t1, mobj_t *t2) { boolean damageitem = false; + if ((t1->threshold > 0 && t2->hitlag > 0) || (t2->threshold > 0 && t1->hitlag > 0)) + return true; + if (((t1->target == t2) || (t1->target == t2->target)) && (t1->threshold > 0 || (t2->type != MT_PLAYER && t2->threshold > 0))) return true; @@ -186,6 +192,9 @@ boolean K_BananaBallhogCollide(mobj_t *t1, mobj_t *t2) boolean K_EggItemCollide(mobj_t *t1, mobj_t *t2) { + if ((t1->threshold > 0 && t2->hitlag > 0) || (t2->threshold > 0 && t1->hitlag > 0)) + return true; + // Push fakes out of other item boxes if (t2->type == MT_RANDOMITEM || t2->type == MT_EGGMANITEM) { @@ -258,6 +267,9 @@ boolean K_EggItemCollide(mobj_t *t1, mobj_t *t2) boolean K_MineCollide(mobj_t *t1, mobj_t *t2) { + if ((t1->threshold > 0 && t2->hitlag > 0) || (t2->threshold > 0 && t1->hitlag > 0)) + return true; + if (((t1->target == t2) || (t1->target == t2->target)) && (t1->threshold > 0 || (t2->type != MT_PLAYER && t2->threshold > 0))) return true; @@ -331,6 +343,9 @@ boolean K_MineExplosionCollide(mobj_t *t1, mobj_t *t2) boolean K_LandMineCollide(mobj_t *t1, mobj_t *t2) { + if ((t1->threshold > 0 && t2->hitlag > 0) || (t2->threshold > 0 && t1->hitlag > 0)) + return true; + if (((t1->target == t2) || (t1->target == t2->target)) && (t1->threshold > 0 || (t2->type != MT_PLAYER && t2->threshold > 0))) return true; @@ -398,6 +413,9 @@ boolean K_LandMineCollide(mobj_t *t1, mobj_t *t2) boolean K_KitchenSinkCollide(mobj_t *t1, mobj_t *t2) { + if ((t1->threshold > 0 && t2->hitlag > 0) || (t2->threshold > 0 && t1->hitlag > 0)) + return true; + if (((t1->target == t2) || (t1->target == t2->target)) && (t1->threshold > 0 || (t2->type != MT_PLAYER && t2->threshold > 0))) return true; @@ -465,7 +483,8 @@ boolean K_PvPTouchDamage(mobj_t *t1, mobj_t *t2) { boolean t1Condition = false; boolean t2Condition = false; - boolean stung = false; + boolean stungT1 = false; + boolean stungT2 = false; // Grow damage t1Condition = (t1->scale > t2->scale + (mapobjectscale/8)); @@ -537,25 +556,35 @@ boolean K_PvPTouchDamage(mobj_t *t1, mobj_t *t2) if (t1Condition == true) { - P_PlayerRingBurst(t2->player, 1); - if (t2->player->rings <= 0) { P_DamageMobj(t2, t1, t1, 1, DMG_STING); - stung = true; + stungT2 = true; } + + P_PlayerRingBurst(t2->player, 1); } if (t2Condition == true) { - P_PlayerRingBurst(t1->player, 1); - if (t1->player->rings <= 0) { P_DamageMobj(t1, t2, t2, 1, DMG_STING); - stung = true; + stungT1 = true; } + + P_PlayerRingBurst(t1->player, 1); } - return stung; + // No damage hitlag for stinging. + if (stungT1 == true && stungT2 == false) + { + t2->eflags &= ~MFE_DAMAGEHITLAG; + } + else if (stungT2 == true && stungT1 == false) + { + t1->eflags &= ~MFE_DAMAGEHITLAG; + } + + return (stungT1 || stungT2); } diff --git a/src/p_inter.c b/src/p_inter.c index 596bef294..6a352ecec 100644 --- a/src/p_inter.c +++ b/src/p_inter.c @@ -1844,8 +1844,10 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da if (!(target->flags & MF_SHOOTABLE)) return false; // shouldn't happen... +#if 0 if (!(damagetype & DMG_DEATHMASK) && target->hitlag > 0) return false; +#endif } if (target->flags2 & MF2_SKULLFLY) @@ -1928,7 +1930,7 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da if (combo == false) { - if (player->flashing > 0) + if (player->mo->hitlag == 0 && player->flashing > 0) { // Post-hit invincibility K_DoInstashield(player);