metaforce/Runtime/World/CDamageVulnerability.hpp

87 lines
3.0 KiB
C++

#pragma once
#include "RetroTypes.hpp"
#include "Weapon/CWeaponMode.hpp"
namespace urde
{
enum class EVulnerability
{
DoubleDamage,
Normal,
Deflect,
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;
/* FIXME: What's going on here? */
EVulnerability x38_unk2;
bool x38_25 : 1;
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_deflected;
EVulnerability x60_chargedDeflected;
EVulnerability x64_comboDeflected;
void ConstructNew(CInputStream& in, int propCount);
static const CDamageVulnerability sNormalVulnerability;
static const CDamageVulnerability sImmuneVulnerability;
static const CDamageVulnerability sReflectVulnerability;
static const CDamageVulnerability sPassThroughVulnerability;
public:
CDamageVulnerability(CInputStream& in);
CDamageVulnerability(EVulnerability power, EVulnerability ice, EVulnerability wave, EVulnerability plasma,
EVulnerability bomb, EVulnerability powerBomb, EVulnerability missile,
EVulnerability boostBall, EVulnerability phazon, EVulnerability enemyWp1,
EVulnerability enemyWp2, EVulnerability enemyWp3, EVulnerability enemyWp4, EVulnerability v1,
EVulnerability v2, EVulnerability chargedPower, EVulnerability chargedIce,
EVulnerability chargedWave, EVulnerability chargedPlasma, EVulnerability superMissile,
EVulnerability iceSpreader, EVulnerability waveBuster, EVulnerability flameThrower,
EVulnerability deflected);
EVulnerability GetDeflectionType(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;
static const CDamageVulnerability& NormalVulnerabilty() { return sNormalVulnerability; }
static const CDamageVulnerability& ImmuneVulnerabilty() { return sImmuneVulnerability; }
static const CDamageVulnerability& ReflectVulnerabilty() { return sReflectVulnerability; }
static const CDamageVulnerability& PasshThroughVulnerabilty() { return sPassThroughVulnerability; }
void SetX38_25(bool) { x38_25 = true; }
};
}