- Added DMSS_NOPROTECT.

Bypasses PowerProtection inventory items.
This commit is contained in:
MajorCooke 2014-10-27 22:29:10 -05:00
parent f802d7a44c
commit c01d1a8003
4 changed files with 10 additions and 5 deletions

View file

@ -1053,8 +1053,8 @@ int P_DamageMobj (AActor *target, AActor *inflictor, AActor *source, int damage,
return -1; return -1;
} }
} }
// Handle passive damage modifiers (e.g. PowerProtection) // Handle passive damage modifiers (e.g. PowerProtection), provided they are not afflicted with protection penetrating powers.
if (target->Inventory != NULL) if ((target->Inventory != NULL) && !(flags & DMG_NO_PROTECT))
{ {
int olddam = damage; int olddam = damage;
target->Inventory->ModifyDamage(olddam, mod, damage, true); target->Inventory->ModifyDamage(olddam, mod, damage, true);
@ -1592,7 +1592,7 @@ bool AActor::OkayToSwitchTarget (AActor *other)
bool P_PoisonPlayer (player_t *player, AActor *poisoner, AActor *source, int poison) bool P_PoisonPlayer (player_t *player, AActor *poisoner, AActor *source, int poison)
{ {
if((player->cheats&CF_GODMODE) || (player->mo->flags2 & MF2_INVULNERABLE)) if((player->cheats&CF_GODMODE) || (player->mo->flags2 & MF2_INVULNERABLE) || (player->cheats & CF_GODMODE2))
{ {
return false; return false;
} }
@ -1643,8 +1643,8 @@ void P_PoisonDamage (player_t *player, AActor *source, int damage,
{ {
return; return;
} }
if (damage < TELEFRAG_DAMAGE && ((target->flags2 & MF2_INVULNERABLE) || if ((damage < TELEFRAG_DAMAGE && ((target->flags2 & MF2_INVULNERABLE) ||
(player->cheats & CF_GODMODE))) (player->cheats & CF_GODMODE))) || (player->cheats & CF_GODMODE2))
{ // target is invulnerable { // target is invulnerable
return; return;
} }

View file

@ -560,6 +560,7 @@ enum EDmgFlags
DMG_PLAYERATTACK = 32, DMG_PLAYERATTACK = 32,
DMG_FOILINVUL = 64, DMG_FOILINVUL = 64,
DMG_FOILBUDDHA = 128, DMG_FOILBUDDHA = 128,
DMG_NO_PROTECT = 256,
}; };

View file

@ -4832,6 +4832,7 @@ enum DMSS
DMSS_KILL = 4, DMSS_KILL = 4,
DMSS_NOFACTOR = 8, DMSS_NOFACTOR = 8,
DMSS_FOILBUDDHA = 16, DMSS_FOILBUDDHA = 16,
DMSS_NOPROTECT = 32,
}; };
static void DoDamage(AActor *dmgtarget, AActor *self, int amount, FName DamageType, int flags) static void DoDamage(AActor *dmgtarget, AActor *self, int amount, FName DamageType, int flags)
@ -4847,6 +4848,8 @@ static void DoDamage(AActor *dmgtarget, AActor *self, int amount, FName DamageTy
dmgFlags += DMG_NO_ARMOR; dmgFlags += DMG_NO_ARMOR;
if (flags & DMSS_KILL) //Kill adds the value of the damage done to it. Allows for more controlled extreme death types. if (flags & DMSS_KILL) //Kill adds the value of the damage done to it. Allows for more controlled extreme death types.
amount += dmgtarget->health; amount += dmgtarget->health;
if (flags & DMSS_NOPROTECT) //Ignore PowerProtection.
dmgFlags += DMG_NO_PROTECT;
if (amount > 0) if (amount > 0)
P_DamageMobj(dmgtarget, self, self, amount, DamageType, dmgFlags); //Should wind up passing them through just fine. P_DamageMobj(dmgtarget, self, self, amount, DamageType, dmgFlags); //Should wind up passing them through just fine.

View file

@ -383,6 +383,7 @@ const int DMSS_AFFECTARMOR = 2;
const int DMSS_KILL = 4; const int DMSS_KILL = 4;
const int DMSS_NOFACTOR = 8; const int DMSS_NOFACTOR = 8;
const int DMSS_FOILBUDDHA = 16; const int DMSS_FOILBUDDHA = 16;
const int DMSS_NOPROTECT = 32;
// Flags for A_AlertMonsters // Flags for A_AlertMonsters
const int AMF_TARGETEMITTER = 1; const int AMF_TARGETEMITTER = 1;