2
0
mirror of https://github.com/AxioDL/metaforce.git synced 2025-12-08 15:44:56 +00:00

Various bug fixes

This commit is contained in:
Jack Andersen
2018-11-18 15:19:44 -10:00
parent 57c1196599
commit 35a3923cdf
21 changed files with 68 additions and 53 deletions

View File

@@ -31,7 +31,7 @@ float CDamageInfo::GetDamage(const CDamageVulnerability& dVuln) const
EVulnerability vuln = dVuln.GetVulnerability(x0_weaponMode, false);
if (vuln == EVulnerability::Deflect)
return 0.f;
else if (vuln == EVulnerability::DoubleDamage)
else if (vuln == EVulnerability::Weak)
return 2.f * x8_damage;
return x8_damage;
@@ -42,7 +42,7 @@ float CDamageInfo::GetRadiusDamage(const CDamageVulnerability& dVuln) const
EVulnerability vuln = dVuln.GetVulnerability(x0_weaponMode, false);
if (vuln == EVulnerability::Deflect)
return 0.f;
else if (vuln == EVulnerability::DoubleDamage)
else if (vuln == EVulnerability::Weak)
return 2.f * xc_radiusDamage;
return xc_radiusDamage;

View File

@@ -9,7 +9,7 @@ const CDamageVulnerability CDamageVulnerability::sNormalVulnerability(
EVulnerability::Normal, EVulnerability::Normal, EVulnerability::Normal, EVulnerability::Normal,
EVulnerability::Normal, EVulnerability::Normal, EVulnerability::Normal, EVulnerability::Normal,
EVulnerability::Normal, EVulnerability::Normal, EVulnerability::Normal, EVulnerability::Normal,
EVulnerability::Normal, EVulnerability::Normal, EVulnerability::Normal, EVulnerability::DoubleDamage);
EVulnerability::Normal, EVulnerability::Normal, EVulnerability::Normal, EVulnerability::Weak);
const CDamageVulnerability CDamageVulnerability::sImmuneVulnerability(
EVulnerability::Deflect, EVulnerability::Deflect, EVulnerability::Deflect, EVulnerability::Deflect,
@@ -17,7 +17,7 @@ const CDamageVulnerability CDamageVulnerability::sImmuneVulnerability(
EVulnerability::Deflect, EVulnerability::Deflect, EVulnerability::Deflect, EVulnerability::Deflect,
EVulnerability::Deflect, EVulnerability::Deflect, EVulnerability::Deflect, EVulnerability::Deflect,
EVulnerability::Deflect, EVulnerability::Deflect, EVulnerability::Deflect, EVulnerability::Deflect,
EVulnerability::Deflect, EVulnerability::Deflect, EVulnerability::Deflect, EVulnerability::DoubleDamage);
EVulnerability::Deflect, EVulnerability::Deflect, EVulnerability::Deflect, EVulnerability::Weak);
/* LOL, thanks retro */
const CDamageVulnerability CDamageVulnerability::sReflectVulnerability(
EVulnerability::Deflect, EVulnerability::Deflect, EVulnerability::Deflect, EVulnerability::Deflect,
@@ -25,7 +25,7 @@ const CDamageVulnerability CDamageVulnerability::sReflectVulnerability(
EVulnerability::Deflect, EVulnerability::Deflect, EVulnerability::Deflect, EVulnerability::Deflect,
EVulnerability::Deflect, EVulnerability::Deflect, EVulnerability::Deflect, EVulnerability::Deflect,
EVulnerability::Deflect, EVulnerability::Deflect, EVulnerability::Deflect, EVulnerability::Deflect,
EVulnerability::Deflect, EVulnerability::Deflect, EVulnerability::Deflect, EVulnerability::DoubleDamage);
EVulnerability::Deflect, EVulnerability::Deflect, EVulnerability::Deflect, EVulnerability::Weak);
const CDamageVulnerability CDamageVulnerability::sPassThroughVulnerability(
EVulnerability::PassThrough, EVulnerability::PassThrough, EVulnerability::PassThrough, EVulnerability::PassThrough,
@@ -33,13 +33,18 @@ const CDamageVulnerability CDamageVulnerability::sPassThroughVulnerability(
EVulnerability::PassThrough, EVulnerability::PassThrough, EVulnerability::PassThrough, EVulnerability::PassThrough,
EVulnerability::PassThrough, EVulnerability::PassThrough, EVulnerability::PassThrough, EVulnerability::PassThrough,
EVulnerability::PassThrough, EVulnerability::PassThrough, EVulnerability::PassThrough, EVulnerability::PassThrough,
EVulnerability::PassThrough, EVulnerability::PassThrough, EVulnerability::PassThrough, EVulnerability::DoubleDamage);
EVulnerability::PassThrough, EVulnerability::PassThrough, EVulnerability::PassThrough, EVulnerability::Weak);
static inline bool is_not_immune(EVulnerability vuln)
{
return vuln != EVulnerability::Immune && vuln != EVulnerability::DirectImmune;
}
static inline bool is_normal_or_weak(EVulnerability vuln)
{
return vuln == EVulnerability::Normal || vuln == EVulnerability::Weak;
}
void CDamageVulnerability::ConstructNew(CInputStream& in, int propCount)
{
propCount -= 3;
@@ -81,7 +86,7 @@ CDamageVulnerability::CDamageVulnerability(CInputStream& in)
vulns[i] = EVulnerability(in.readUint32Big());
if (propCount == 15)
x5c_deflected = EVulnerability::DoubleDamage;
x5c_deflected = EVulnerability::Weak;
else
x5c_deflected = EVulnerability(in.readUint32Big());
@@ -154,11 +159,13 @@ bool CDamageVulnerability::WeaponHurts(const CWeaponMode& mode, bool ignoreDirec
EVulnerability normalVuln = (&x0_power)[u32(mode.GetType())];
bool normalHurts = true;
if (ignoreDirect)
normalHurts = is_not_immune(normalVuln);
{
normalHurts = is_normal_or_weak(normalVuln);
}
else
{
if (!is_not_immune(normalVuln) &&
(normalVuln != EVulnerability::DirectDouble && normalVuln != EVulnerability::DirectNormal))
if (!is_normal_or_weak(normalVuln) &&
(normalVuln != EVulnerability::DirectWeak && normalVuln != EVulnerability::DirectNormal))
normalHurts = false;
}
@@ -170,16 +177,16 @@ bool CDamageVulnerability::WeaponHurts(const CWeaponMode& mode, bool ignoreDirec
EVulnerability comboedVuln = (&x4c_superMissile)[u32(mode.GetType())];
if (ignoreDirect)
{
chargedHurts = is_not_immune(chargedVuln);
comboedHurts = is_not_immune(comboedVuln);
chargedHurts = is_normal_or_weak(chargedVuln);
comboedHurts = is_normal_or_weak(comboedVuln);
}
else
{
if (!is_not_immune(chargedVuln) &&
(chargedVuln != EVulnerability::DirectDouble && chargedVuln != EVulnerability::DirectNormal))
if (!is_normal_or_weak(chargedVuln) &&
(chargedVuln != EVulnerability::DirectWeak && chargedVuln != EVulnerability::DirectNormal))
chargedHurts = false;
if (!is_not_immune(comboedVuln) &&
(comboedVuln != EVulnerability::DirectDouble && comboedVuln != EVulnerability::DirectNormal))
if (!is_normal_or_weak(comboedVuln) &&
(comboedVuln != EVulnerability::DirectWeak && comboedVuln != EVulnerability::DirectNormal))
comboedHurts = false;
}
}
@@ -258,8 +265,8 @@ EVulnerability CDamageVulnerability::GetVulnerability(const CWeaponMode& mode, b
if (ignoreDirect)
return vuln;
if (vuln == EVulnerability::DirectDouble)
return EVulnerability::DoubleDamage;
if (vuln == EVulnerability::DirectWeak)
return EVulnerability::Weak;
else if (vuln == EVulnerability::DirectNormal)
return EVulnerability::Normal;
else if (vuln == EVulnerability::DirectImmune)

View File

@@ -8,12 +8,12 @@ namespace urde
enum class EVulnerability
{
DoubleDamage,
Weak,
Normal,
Deflect,
Immune,
PassThrough,
DirectDouble,
DirectWeak,
DirectNormal,
DirectImmune
};

View File

@@ -1099,7 +1099,7 @@ void CPatterned::Burn(float duration, float damage)
{
switch (GetDamageVulnerability()->GetVulnerability(CWeaponMode(EWeaponType::Plasma), false))
{
case EVulnerability::DoubleDamage:
case EVulnerability::Weak:
x450_bodyController->SetOnFire(1.5f * duration);
x3ec_pendingFireDamage = 1.5f * damage;
break;
@@ -1116,7 +1116,7 @@ void CPatterned::Shock(float duration, float damage)
{
switch (GetDamageVulnerability()->GetVulnerability(CWeaponMode(EWeaponType::Wave), false))
{
case EVulnerability::DoubleDamage:
case EVulnerability::Weak:
x450_bodyController->SetElectrocuting(1.5f * duration);
x3f0_pendingShockDamage = 1.5f * damage;
break;

View File

@@ -29,6 +29,7 @@ const float CPlayerCameraBob::kCameraDamping = 6.f * std::sqrt(80.f);
CPlayerCameraBob::CPlayerCameraBob(ECameraBobType type, const zeus::CVector2f& vec, float bobPeriod)
: x0_type(type), x4_vec(vec), xc_bobPeriod(bobPeriod)
{
std::fill(std::begin(x7c_wanderPoints), std::end(x7c_wanderPoints), zeus::CVector3f::skForward);
}
zeus::CTransform CPlayerCameraBob::GetViewWanderTransform() const { return xd0_viewWanderXf; }
@@ -107,19 +108,19 @@ void CPlayerCameraBob::UpdateViewWander(float dt, CStateManager& mgr)
{
zeus::CVector3f pt = zeus::getCatmullRomSplinePoint(
x7c_wanderPoints[xcc_wanderIndex], x7c_wanderPoints[(xcc_wanderIndex + 1) & 3],
x7c_wanderPoints[(xcc_wanderIndex + 2) & 3], x7c_wanderPoints[(xcc_wanderIndex + 3) & 3], dt);
x7c_wanderPoints[(xcc_wanderIndex + 2) & 3], x7c_wanderPoints[(xcc_wanderIndex + 3) & 3], xc4_wanderTime);
pt.x *= x100_wanderMagnitude;
pt.z *= x100_wanderMagnitude;
zeus::CTransform orient = zeus::CTransform::RotateY((
zeus::getCatmullRomSplinePoint(xb0_wanderPitches[xcc_wanderIndex], xb0_wanderPitches[(xcc_wanderIndex + 1) & 3],
xb0_wanderPitches[(xcc_wanderIndex + 2) & 3],
xb0_wanderPitches[(xcc_wanderIndex + 3) & 3], dt) *
xb0_wanderPitches[(xcc_wanderIndex + 3) & 3], xc4_wanderTime) *
x100_wanderMagnitude));
xd0_viewWanderXf = zeus::lookAt(zeus::CVector3f::skZero, pt, zeus::CVector3f::skUp) * orient;
xc4_wanderTime = (xc8_viewWanderSpeed * xc4_wanderTime) + dt;
if (xc4_wanderTime > 1.f)
xc4_wanderTime += xc8_viewWanderSpeed * dt;
if (xc4_wanderTime >= 1.f)
{
x7c_wanderPoints[xcc_wanderIndex] = CalculateRandomViewWanderPosition(mgr);
xb0_wanderPitches[xcc_wanderIndex] = CalculateRandomViewWanderPitch(mgr);

View File

@@ -69,8 +69,8 @@ private:
float x70_landingTranslation = 0.f;
float x74_camVelocity = 0.f;
float x78_camTranslation = 0.f;
zeus::CVector3f x7c_wanderPoints[4] = {zeus::CVector3f{0.f, 1.f, 0.f}};
float xb0_wanderPitches[4] = {0.f};
zeus::CVector3f x7c_wanderPoints[4];
float xb0_wanderPitches[4] = {};
float xc4_wanderTime = 0.f;
float xc8_viewWanderSpeed = kViewWanderSpeedMin;
u32 xcc_wanderIndex = 0;