From 21c55a090af4fbf2dfcd3916c692cabcef36ae2a Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Wed, 24 Feb 2016 10:50:42 +0100 Subject: [PATCH] - fixed: "take armor" cheat should only deplete the armor, not destroy it. - fixed: Hexen armor cannot be depleted by the common function, it needs an override to achieve that. --- src/g_shared/a_armor.cpp | 8 ++++++++ src/g_shared/a_pickups.h | 1 + src/m_cheat.cpp | 6 +++--- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/g_shared/a_armor.cpp b/src/g_shared/a_armor.cpp index c18f4172aa..7be18139d7 100644 --- a/src/g_shared/a_armor.cpp +++ b/src/g_shared/a_armor.cpp @@ -550,3 +550,11 @@ void AHexenArmor::AbsorbDamage (int damage, FName damageType, int &newdamage) } } + +void AHexenArmor::DepleteOrDestroy() +{ + for (int i = 0; i < 4; i++) + { + Slots[i] = 0; + } +} \ No newline at end of file diff --git a/src/g_shared/a_pickups.h b/src/g_shared/a_pickups.h index 10391e0c8b..ec16e129bd 100644 --- a/src/g_shared/a_pickups.h +++ b/src/g_shared/a_pickups.h @@ -508,6 +508,7 @@ public: virtual AInventory *CreateTossable (); virtual bool HandlePickup (AInventory *item); virtual void AbsorbDamage (int damage, FName damageType, int &newdamage); + void DepleteOrDestroy(); fixed_t Slots[5]; fixed_t SlotsIncrement[4]; diff --git a/src/m_cheat.cpp b/src/m_cheat.cpp index aa539f96bf..b5da2a0a63 100644 --- a/src/m_cheat.cpp +++ b/src/m_cheat.cpp @@ -927,7 +927,7 @@ void cht_Take (player_t *player, const char *name, int amount) AInventory *ammo = player->mo->FindInventory(static_cast(type)); if (ammo) - ammo->Amount = 0; + ammo->DepleteOrDestroy(); } } @@ -943,10 +943,10 @@ void cht_Take (player_t *player, const char *name, int amount) if (type->IsDescendantOf (RUNTIME_CLASS (AArmor))) { - AActor *armor = player->mo->FindInventory(static_cast(type)); + AInventory *armor = player->mo->FindInventory(static_cast(type)); if (armor) - armor->Destroy (); + armor->DepleteOrDestroy(); } }