2
0
mirror of https://github.com/AxioDL/metaforce.git synced 2025-12-10 13:47:46 +00:00

CDamageInfo and CDamageVulnerability imps

This commit is contained in:
2017-02-09 21:43:07 -08:00
parent 48c295f9d8
commit 43bfb638c9
8 changed files with 265 additions and 73 deletions

View File

@@ -15,7 +15,8 @@ enum class EVulnerability
Immune,
PassThrough,
DirectDouble,
Direct
DirectNormal,
DirectImmune
};
class CDamageVulnerability
@@ -50,78 +51,17 @@ class CDamageVulnerability
u32 x60_;
u32 x64_;
void ConstructNew(CInputStream& in, int propCount)
{
EVulnerability* vulns = &x0_power;
for (int i=0 ; i<std::min(propCount - 3, 15) ; ++i)
vulns[i] = EVulnerability(in.readUint32Big());
if (propCount < 15)
{
for (int i=propCount ; i<15 ; ++i)
vulns[i] = EVulnerability::Reflect;
}
for (int i=15 ; i<propCount ; ++i)
in.readUint32Big();
x5c_ = in.readUint32Big();
EVulnerability* vulns2 = &x3c_chargedPower;
in.readUint32Big();
for (int i=0 ; i<4 ; ++i)
vulns2[i] = EVulnerability(in.readUint32Big());
x60_ = in.readUint32Big();
EVulnerability* vulns3 = &x4c_superMissile;
in.readUint32Big();
for (int i=0 ; i<4 ; ++i)
vulns3[i] = EVulnerability(in.readUint32Big());
x64_ = in.readUint32Big();
}
void ConstructNew(CInputStream& in, int propCount);
public:
CDamageVulnerability(CInputStream& in)
{
u32 propCount = in.readUint32Big();;
if (propCount == 11)
{
EVulnerability* vulns = &x0_power;
for (int i=0 ; i<15 ; ++i)
vulns[i] = EVulnerability(in.readUint32Big());
CDamageVulnerability(CInputStream& in);
if (propCount == 15)
x5c_ = 0;
else
x5c_ = in.readUint32Big();
u32 sub80102490(const CWeaponMode& mode) const;
x3c_chargedPower = x0_power;
x4c_superMissile = x0_power;
x40_chargedIce = x4_ice;
x50_iceSpreader = x4_ice;
x44_chargedWave = x8_wave;
x54_wavebuster = x8_wave;
x48_chargedPlasma = xc_plasma;
x58_flamethrower = xc_plasma;
}
else
ConstructNew(in, propCount);
}
bool WeaponHurts(const CWeaponMode&, u32) const { return false; }
EVulnerability GetVulnerability(const CWeaponMode& mode, u32 w) const
{
if (int(mode.GetType()) < int(EWeaponType::None) || int(mode.GetType()) > int(EWeaponType::Unused2))
return EVulnerability::Reflect;
if (!mode.IsInstantKill())
return EVulnerability::Normal;
// TODO: Finish
return EVulnerability::Normal;
}
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__