From b036ef63e98729071b6a1ba3388670b01ad02865 Mon Sep 17 00:00:00 2001 From: Randy Heit Date: Thu, 19 Apr 2012 03:40:27 +0000 Subject: [PATCH] - Fixed: The 0-damage FORCEPAIN checks in P_DamageMobj() also need to check the PAINLESS and NOPAIN flags. SVN r3573 (trunk) --- src/p_interaction.cpp | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/src/p_interaction.cpp b/src/p_interaction.cpp index 1df327fab..48cb87747 100644 --- a/src/p_interaction.cpp +++ b/src/p_interaction.cpp @@ -985,8 +985,11 @@ void P_DamageMobj (AActor *target, AActor *inflictor, AActor *source, int damage source->Inventory->ModifyDamage(olddam, mod, damage, false); if (olddam != damage && damage <= 0) { // Still allow FORCEPAIN - if (inflictor != NULL && (inflictor->flags6 & MF6_FORCEPAIN)) + if (!(target->flags5 & MF5_NOPAIN) && inflictor != NULL && + (inflictor->flags6 & MF6_FORCEPAIN) && !(inflictor->flags5 & MF5_PAINLESS)) + { goto dopain; + } return; } } @@ -997,8 +1000,11 @@ void P_DamageMobj (AActor *target, AActor *inflictor, AActor *source, int damage target->Inventory->ModifyDamage(olddam, mod, damage, true); if (olddam != damage && damage <= 0) { // Still allow FORCEPAIN - if (inflictor != NULL && (inflictor->flags6 & MF6_FORCEPAIN)) + if (!(target->flags5 & MF5_NOPAIN) && inflictor != NULL && + (inflictor->flags6 & MF6_FORCEPAIN) && !(inflictor->flags5 & MF5_PAINLESS)) + { goto dopain; + } return; } } @@ -1012,8 +1018,11 @@ void P_DamageMobj (AActor *target, AActor *inflictor, AActor *source, int damage } if (damage <= 0) { // Still allow FORCEPAIN - if (inflictor != NULL && (inflictor->flags6 & MF6_FORCEPAIN)) + if (!(target->flags5 & MF5_NOPAIN) && inflictor != NULL && + (inflictor->flags6 & MF6_FORCEPAIN) && !(inflictor->flags5 & MF5_PAINLESS)) + { goto dopain; + } return; } } @@ -1146,8 +1155,11 @@ void P_DamageMobj (AActor *target, AActor *inflictor, AActor *source, int damage if (damage <= 0) { // If MF6_FORCEPAIN is set, make the player enter the pain state. - if (inflictor != NULL && (inflictor->flags6 & MF6_FORCEPAIN)) - goto dopain; + if (!(target->flags5 & MF5_NOPAIN) && inflictor != NULL && + (inflictor->flags6 & MF6_FORCEPAIN) && !(inflictor->flags5 & MF5_PAINLESS)) + { + goto dopain; + } return; } }