diff --git a/Runtime/Graphics/CLight.cpp b/Runtime/Graphics/CLight.cpp index bd81256ae..832ee02eb 100644 --- a/Runtime/Graphics/CLight.cpp +++ b/Runtime/Graphics/CLight.cpp @@ -8,20 +8,21 @@ constexpr zeus::CVector3f kDefaultPosition(0.f, 0.f, 0.f); constexpr zeus::CVector3f kDefaultDirection(0.f, -1.f, 0.f); float CLight::CalculateLightRadius() const { - if (FLT_EPSILON > x28_distL && FLT_EPSILON > x2c_distQ) { + if (x28_distL < FLT_EPSILON && x2c_distQ < FLT_EPSILON) { return FLT_MAX; } float intensity = GetIntensity(); - if (x2c_distQ <= FLT_EPSILON) { + float ret = 0.f; + if (x2c_distQ > FLT_EPSILON) { constexpr float mulVal = std::min(0.05882353f, 0.2f); // Yes, retro really did do this - if (x28_distL > FLT_EPSILON) { - return intensity / (mulVal * x28_distL); + if (intensity > FLT_EPSILON) { + return std::sqrt(intensity / (mulVal * x2c_distQ)); } } else { constexpr float mulVal = std::min(0.05882353f, 0.2f); // See above comment - if (intensity > FLT_EPSILON) { - return std::sqrt(intensity / (mulVal * x2c_distQ)); + if (x28_distL > FLT_EPSILON) { + return intensity / (mulVal * x28_distL); } } @@ -69,7 +70,7 @@ zeus::CColor CLight::GetNormalIndependentLightingAtPoint(const zeus::CVector3f& return x18_color; float dist = std::max((x0_pos - point).magnitude(), FLT_EPSILON); - return x18_color * (1.f / (x2c_distQ * dist * dist + x28_distL * dist + x24_distC)); + return x18_color * (1.f / (dist * (x2c_distQ * dist) + (x28_distL * dist + x24_distC))); } CLight CLight::BuildDirectional(const zeus::CVector3f& dir, const zeus::CColor& color) { diff --git a/Runtime/MP1/World/CDroneLaser.cpp b/Runtime/MP1/World/CDroneLaser.cpp index 658ed81c5..4bf5dfcfb 100644 --- a/Runtime/MP1/World/CDroneLaser.cpp +++ b/Runtime/MP1/World/CDroneLaser.cpp @@ -49,9 +49,9 @@ void CDroneLaser::AddToRenderer(const zeus::CFrustum& frustum, CStateManager& mg } void CDroneLaser::Render(CStateManager& mgr) { - // g_Renderer->SetDepthReadWrite(true, true); + g_Renderer->SetDepthReadWrite(true, true); RenderBeam(4, 0.01f, zeus::CColor(1.f, .9f, .9f, 1.f), true); - // g_Renderer->SetDepthReadWrite(true, false); + g_Renderer->SetDepthReadWrite(true, false); RenderBeam(5, 0.06f, zeus::CColor(.4f, .0f, .0f, .5f), true); RenderBeam(7, 0.06f, zeus::CColor(.4f, .2f, .2f, .1f), true); } diff --git a/Runtime/Weapon/CPlayerGun.cpp b/Runtime/Weapon/CPlayerGun.cpp index 39e813aec..4cde5fdec 100644 --- a/Runtime/Weapon/CPlayerGun.cpp +++ b/Runtime/Weapon/CPlayerGun.cpp @@ -733,9 +733,11 @@ void CPlayerGun::ReturnToRestPose() { } void CPlayerGun::ResetIdle(CStateManager& mgr) { + CFidget::EState fidgetState = x3a4_fidget.GetState(); + x370_gunMotionSpeedMult = 1.f; x550_camBob.SetState(CPlayerCameraBob::ECameraBobState::GunFireNoBob, mgr); - if (x3a4_fidget.GetState() != CFidget::EState::NoFidget) { - if (x3a4_fidget.GetState() == CFidget::EState::Loading) + if (fidgetState != CFidget::EState::NoFidget) { + if (fidgetState == CFidget::EState::Loading) UnLoadFidget(); ReturnArmAndGunToDefault(mgr, true); } @@ -1423,20 +1425,25 @@ void CPlayerGun::ActivateCombo(CStateManager& mgr) { } void CPlayerGun::ProcessChargeState(u32 releasedStates, u32 pressedStates, CStateManager& mgr, float dt) { - if ((releasedStates & 0x1) != 0) + if ((releasedStates & 0x1) != 0) { ResetCharged(dt, mgr); + return; + } if ((pressedStates & 0x1) != 0) { if (x32c_chargePhase == EChargePhase::NotCharging && (pressedStates & 0x1) != 0 && - x348_chargeCooldownTimer == 0.f && x832_28_readyForShot) { + x348_chargeCooldownTimer == 0.f && x832_28_readyForShot == 1) { UpdateNormalShotCycle(dt, mgr); x32c_chargePhase = EChargePhase::ChargeRequested; } - } else if (mgr.GetPlayerState()->HasPowerUp(CPlayerState::EItemType::Missiles) && (pressedStates & 0x2) != 0) { - if (x32c_chargePhase >= EChargePhase::FxGrown) { - if (mgr.GetPlayerState()->HasPowerUp(skBeamComboArr[size_t(x310_currentBeam)])) - ActivateCombo(mgr); - } else if (x32c_chargePhase == EChargePhase::NotCharging) { - FireSecondary(dt, mgr); + } else { + const auto& state = mgr.GetPlayerState(); + if (state->HasPowerUp(CPlayerState::EItemType::Missiles) && (pressedStates & 0x2) != 0) { + if (x32c_chargePhase >= EChargePhase::FxGrown) { + if (state->HasPowerUp(skBeamComboArr[size_t(x310_currentBeam)])) + ActivateCombo(mgr); + } else if (x32c_chargePhase == EChargePhase::NotCharging) { + FireSecondary(dt, mgr); + } } } } @@ -1473,12 +1480,18 @@ void CPlayerGun::UpdateNormalShotCycle(float dt, CStateManager& mgr) { } void CPlayerGun::ProcessNormalState(u32 releasedStates, u32 pressedStates, CStateManager& mgr, float dt) { - if ((releasedStates & 0x1) != 0) + if ((releasedStates & 0x1) != 0) { ResetNormal(mgr); - if ((pressedStates & 0x1) != 0 && x348_chargeCooldownTimer == 0.f && x832_28_readyForShot) + return; + } + + if ((pressedStates & 0x1) != 0 && x348_chargeCooldownTimer == 0.f && x832_28_readyForShot == 1) { UpdateNormalShotCycle(dt, mgr); - else if ((pressedStates & 0x2) != 0) + return; + } + if ((pressedStates & 0x2) != 0) { FireSecondary(dt, mgr); + } } void CPlayerGun::UpdateWeaponFire(float dt, const CPlayerState& playerState, CStateManager& mgr) {