From 479a992a3e91a85ad9e25e6a1cc72b9db2a3ddc6 Mon Sep 17 00:00:00 2001 From: Blue Shadow Date: Fri, 2 Aug 2019 15:10:06 +0300 Subject: [PATCH 1/2] - fixed buggy ArmorFactor behavior when set to a value other than 1.0 --- .../static/zscript/actors/inventory/armor.zs | 45 ++++++++----------- 1 file changed, 19 insertions(+), 26 deletions(-) diff --git a/wadsrc/static/zscript/actors/inventory/armor.zs b/wadsrc/static/zscript/actors/inventory/armor.zs index 96d355e19..bfb5d15ac 100644 --- a/wadsrc/static/zscript/actors/inventory/armor.zs +++ b/wadsrc/static/zscript/actors/inventory/armor.zs @@ -40,6 +40,23 @@ class Armor : Inventory Inventory.PickupSound "misc/armor_pkup"; +INVENTORY.ISARMOR } + + int GetSaveAmount () + { + if (self is 'BasicArmorBonus') + { + let armor = BasicArmorBonus(self); + return !armor.bIgnoreSkill ? int(armor.SaveAmount * G_SkillPropertyFloat(SKILLP_ArmorFactor)) : armor.SaveAmount; + } + + if (self is 'BasicArmorPickup') + { + let armor = BasicArmorPickup(self); + return !armor.bIgnoreSkill ? int(armor.SaveAmount * G_SkillPropertyFloat(SKILLP_ArmorFactor)) : armor.SaveAmount; + } + + return 0; + } } //=========================================================================== @@ -132,19 +149,6 @@ class BasicArmor : Armor // You shouldn't be picking up BasicArmor anyway. return true; } - if (!item.bIgnoreSkill) - { - if (item is "BasicArmorBonus") - { - let armor = BasicArmorBonus(item); - armor.SaveAmount = int(armor.SaveAmount * G_SkillPropertyFloat(SKILLP_ArmorFactor)); - } - else if (item is "BasicArmorPickup") - { - let armor = BasicArmorPickup(item); - armor.SaveAmount = int(armor.SaveAmount * G_SkillPropertyFloat(SKILLP_ArmorFactor)); - } - } return false; } @@ -263,12 +267,6 @@ class BasicArmorBonus : Armor override Inventory CreateCopy (Actor other) { let copy = BasicArmorBonus(Super.CreateCopy (other)); - - if (!bIgnoreSkill) - { - SaveAmount = int(SaveAmount * G_SkillPropertyFloat(SKILLP_ArmorFactor)); - } - copy.SavePercent = SavePercent; copy.SaveAmount = SaveAmount; copy.MaxSaveAmount = MaxSaveAmount; @@ -309,7 +307,7 @@ class BasicArmorBonus : Armor result = true; } - int saveAmount = min(SaveAmount, MaxSaveAmount); + int saveAmount = min(GetSaveAmount(), MaxSaveAmount); if (saveAmount <= 0) { // If it can't give you anything, it's as good as used. @@ -383,12 +381,6 @@ class BasicArmorPickup : Armor override Inventory CreateCopy (Actor other) { let copy = BasicArmorPickup(Super.CreateCopy (other)); - - if (!bIgnoreSkill) - { - SaveAmount = int(SaveAmount * G_SkillPropertyFloat(SKILLP_ArmorFactor)); - } - copy.SavePercent = SavePercent; copy.SaveAmount = SaveAmount; copy.MaxAbsorb = MaxAbsorb; @@ -410,6 +402,7 @@ class BasicArmorPickup : Armor override bool Use (bool pickup) { + int SaveAmount = GetSaveAmount(); let armor = BasicArmor(Owner.FindInventory("BasicArmor")); // This should really never happen but let's be prepared for a broken inventory. From 5abffabb560f6b456657e25a11793a05f39bb063 Mon Sep 17 00:00:00 2001 From: Blue Shadow Date: Sat, 3 Aug 2019 11:14:03 +0300 Subject: [PATCH 2/2] - moved GetSaveAmount() from the base armor class --- .../static/zscript/actors/inventory/armor.zs | 26 +++++++------------ 1 file changed, 9 insertions(+), 17 deletions(-) diff --git a/wadsrc/static/zscript/actors/inventory/armor.zs b/wadsrc/static/zscript/actors/inventory/armor.zs index bfb5d15ac..0887197b1 100644 --- a/wadsrc/static/zscript/actors/inventory/armor.zs +++ b/wadsrc/static/zscript/actors/inventory/armor.zs @@ -40,23 +40,6 @@ class Armor : Inventory Inventory.PickupSound "misc/armor_pkup"; +INVENTORY.ISARMOR } - - int GetSaveAmount () - { - if (self is 'BasicArmorBonus') - { - let armor = BasicArmorBonus(self); - return !armor.bIgnoreSkill ? int(armor.SaveAmount * G_SkillPropertyFloat(SKILLP_ArmorFactor)) : armor.SaveAmount; - } - - if (self is 'BasicArmorPickup') - { - let armor = BasicArmorPickup(self); - return !armor.bIgnoreSkill ? int(armor.SaveAmount * G_SkillPropertyFloat(SKILLP_ArmorFactor)) : armor.SaveAmount; - } - - return 0; - } } //=========================================================================== @@ -342,6 +325,11 @@ class BasicArmorBonus : Armor { SaveAmount *= amount; } + + int GetSaveAmount () + { + return !bIgnoreSkill ? int(SaveAmount * G_SkillPropertyFloat(SKILLP_ArmorFactor)) : SaveAmount; + } } //=========================================================================== @@ -443,6 +431,10 @@ class BasicArmorPickup : Armor SaveAmount *= amount; } + int GetSaveAmount () + { + return !bIgnoreSkill ? int(SaveAmount * G_SkillPropertyFloat(SKILLP_ArmorFactor)) : SaveAmount; + } } //===========================================================================