diff --git a/src/playsim/actor.h b/src/playsim/actor.h index 32ea5dfd1..d7ccf45df 100644 --- a/src/playsim/actor.h +++ b/src/playsim/actor.h @@ -675,7 +675,7 @@ public: // Adjusts the angle for deflection/reflection of incoming missiles // Returns true if the missile should be allowed to explode anyway bool AdjustReflectionAngle (AActor *thing, DAngle &angle); - int AbsorbDamage(int damage, FName dmgtype); + int AbsorbDamage(int damage, FName dmgtype, AActor *inflictor, AActor *source, int flags); void AlterWeaponSprite(visstyle_t *vis); // Returns true if this actor is within melee range of its target diff --git a/src/playsim/p_interaction.cpp b/src/playsim/p_interaction.cpp index 7d16b46fb..d892e675d 100644 --- a/src/playsim/p_interaction.cpp +++ b/src/playsim/p_interaction.cpp @@ -1301,7 +1301,7 @@ static int DamageMobj (AActor *target, AActor *inflictor, AActor *source, int da int newdam = damage; if (damage > 0) { - newdam = player->mo->AbsorbDamage(damage, mod); + newdam = player->mo->AbsorbDamage(damage, mod, inflictor, source, flags); } if (!telefragDamage || (player->mo->flags7 & MF7_LAXTELEFRAGDMG)) //rawdamage is never modified. { @@ -1371,7 +1371,7 @@ static int DamageMobj (AActor *target, AActor *inflictor, AActor *source, int da if (!(flags & (DMG_NO_ARMOR|DMG_FORCED)) && target->Inventory != NULL && damage > 0) { int newdam = damage; - newdam = target->AbsorbDamage(damage, mod); + newdam = target->AbsorbDamage(damage, mod, inflictor, source, flags); damage = newdam; if (damage <= 0) { diff --git a/src/playsim/p_mobj.cpp b/src/playsim/p_mobj.cpp index cd2631993..7208305dd 100644 --- a/src/playsim/p_mobj.cpp +++ b/src/playsim/p_mobj.cpp @@ -3231,14 +3231,14 @@ bool AActor::AdjustReflectionAngle (AActor *thing, DAngle &angle) return false; } -int AActor::AbsorbDamage(int damage, FName dmgtype) +int AActor::AbsorbDamage(int damage, FName dmgtype, AActor *inflictor, AActor *source, int flags) { for (AActor *item = Inventory; item != nullptr; item = item->Inventory) { IFVIRTUALPTRNAME(item, NAME_Inventory, AbsorbDamage) { - VMValue params[4] = { item, damage, dmgtype.GetIndex(), &damage }; - VMCall(func, params, 4, nullptr, 0); + VMValue params[7] = { item, damage, dmgtype.GetIndex(), &damage, inflictor, source, flags }; + VMCall(func, params, 7, nullptr, 0); } } return damage; diff --git a/wadsrc/static/zscript/actors/inventory/armor.zs b/wadsrc/static/zscript/actors/inventory/armor.zs index 0887197b1..bc764fc2c 100644 --- a/wadsrc/static/zscript/actors/inventory/armor.zs +++ b/wadsrc/static/zscript/actors/inventory/armor.zs @@ -141,7 +141,7 @@ class BasicArmor : Armor // //=========================================================================== - override void AbsorbDamage (int damage, Name damageType, out int newdamage) + override void AbsorbDamage (int damage, Name damageType, out int newdamage, Actor inflictor, Actor source, int flags) { int saved; @@ -552,7 +552,7 @@ class HexenArmor : Armor // //=========================================================================== - override void AbsorbDamage (int damage, Name damageType, out int newdamage) + override void AbsorbDamage (int damage, Name damageType, out int newdamage, Actor inflictor, Actor source, int flags) { if (!DamageTypeDefinition.IgnoreArmor(damageType)) { diff --git a/wadsrc/static/zscript/actors/inventory/inventory.zs b/wadsrc/static/zscript/actors/inventory/inventory.zs index 91fc72958..439f0c532 100644 --- a/wadsrc/static/zscript/actors/inventory/inventory.zs +++ b/wadsrc/static/zscript/actors/inventory/inventory.zs @@ -1099,7 +1099,7 @@ class Inventory : Actor // //=========================================================================== - virtual void AbsorbDamage (int damage, Name damageType, out int newdamage) {} + virtual void AbsorbDamage (int damage, Name damageType, out int newdamage, Actor inflictor = null, Actor source = null, int flags = 0) {} //=========================================================================== // diff --git a/wadsrc/static/zscript/actors/inventory/powerups.zs b/wadsrc/static/zscript/actors/inventory/powerups.zs index 307bfd411..ede8f7aa7 100644 --- a/wadsrc/static/zscript/actors/inventory/powerups.zs +++ b/wadsrc/static/zscript/actors/inventory/powerups.zs @@ -761,7 +761,7 @@ class PowerIronFeet : Powerup Powerup.Color "00 ff 00", 0.125; } - override void AbsorbDamage (int damage, Name damageType, out int newdamage) + override void AbsorbDamage (int damage, Name damageType, out int newdamage, Actor inflictor, Actor source, int flags) { if (damageType == 'Drowning') { @@ -795,7 +795,7 @@ class PowerMask : PowerIronFeet Inventory.Icon "I_MASK"; } - override void AbsorbDamage (int damage, Name damageType, out int newdamage) + override void AbsorbDamage (int damage, Name damageType, out int newdamage, Actor inflictor, Actor source, int flags) { if (damageType == 'Fire' || damageType == 'Drowning') {