#ifndef __URDE_CDAMAGEVULNERABILITY_HPP__ #define __URDE_CDAMAGEVULNERABILITY_HPP__ #include "RetroTypes.hpp" #include "Weapon/CWeaponMode.hpp" namespace urde { enum class EVulnerability { DoubleDamage, Normal, Reflect, Immune, PassThrough, DirectDouble, DirectNormal, DirectImmune }; class CDamageVulnerability { EVulnerability x0_power; EVulnerability x4_ice; EVulnerability x8_wave; EVulnerability xc_plasma; EVulnerability x10_bomb; EVulnerability x14_powerbomb; EVulnerability x18_missile; EVulnerability x1c_boostBall; EVulnerability x20_phazon; EVulnerability x24_enemyWp1; EVulnerability x28_enemyWp2Poison; EVulnerability x2c_enemyWp3Lava; EVulnerability x30_enemyWp4; EVulnerability x34_unk1; EVulnerability x38_unk2; EVulnerability x3c_chargedPower; EVulnerability x40_chargedIce; EVulnerability x44_chargedWave; EVulnerability x48_chargedPlasma; EVulnerability x4c_superMissile; EVulnerability x50_iceSpreader; EVulnerability x54_wavebuster; EVulnerability x58_flamethrower; EVulnerability x5c_; EVulnerability x60_chargedPhazon; EVulnerability x64_phazonCombo; void ConstructNew(CInputStream& in, int propCount); public: CDamageVulnerability(CInputStream& in); EVulnerability GetPhazonVulnerability(const CWeaponMode& mode) const; bool WeaponHurts(const CWeaponMode&, bool ignoreDirect) const; bool WeaponHits(const CWeaponMode& mode, bool checkDirect) const; EVulnerability GetVulnerability(const CWeaponMode& mode, bool ignoreDirect) const; }; } #endif // __URDE_CDAMAGEVULNERABILITY_HPP__