#pragma once #include "a_pickups.h" // Armor absorbs some damage for the player. class AArmor : public AInventory { DECLARE_CLASS (AArmor, AInventory) }; // Basic armor absorbs a specific percent of the damage. You should // never pickup a BasicArmor. Instead, you pickup a BasicArmorPickup // or BasicArmorBonus and those gives you BasicArmor when it activates. class ABasicArmor : public AArmor { DECLARE_CLASS (ABasicArmor, AArmor) public: virtual void Serialize(FSerializer &arc); virtual void Tick (); virtual AInventory *CreateCopy (AActor *other); virtual bool HandlePickup (AInventory *item); virtual void AbsorbDamage (int damage, FName damageType, int &newdamage); int AbsorbCount; double SavePercent; int MaxAbsorb; int MaxFullAbsorb; int BonusCount; FNameNoInit ArmorType; int ActualSaveAmount; }; // BasicArmorPickup replaces the armor you have. class ABasicArmorPickup : public AArmor { DECLARE_CLASS (ABasicArmorPickup, AArmor) public: virtual void Serialize(FSerializer &arc); virtual AInventory *CreateCopy (AActor *other); virtual bool Use (bool pickup); double SavePercent; int MaxAbsorb; int MaxFullAbsorb; int SaveAmount; }; // BasicArmorBonus adds to the armor you have. class ABasicArmorBonus : public AArmor { DECLARE_CLASS (ABasicArmorBonus, AArmor) public: virtual void Serialize(FSerializer &arc); virtual AInventory *CreateCopy (AActor *other); virtual bool Use (bool pickup); double SavePercent; // The default, for when you don't already have armor int MaxSaveAmount; int MaxAbsorb; int MaxFullAbsorb; int SaveAmount; int BonusCount; int BonusMax; }; // Hexen armor consists of four separate armor types plus a conceptual armor // type (the player himself) that work together as a single armor. class AHexenArmor : public AArmor { DECLARE_CLASS (AHexenArmor, AArmor) public: virtual void Serialize(FSerializer &arc); virtual AInventory *CreateCopy (AActor *other); virtual AInventory *CreateTossable (); virtual bool HandlePickup (AInventory *item); virtual void AbsorbDamage (int damage, FName damageType, int &newdamage); void DepleteOrDestroy(); double Slots[5]; double SlotsIncrement[4]; protected: bool AddArmorToSlot (AActor *actor, int slot, int amount); };