diff --git a/Runtime/World/CScriptSpecialFunction.cpp b/Runtime/World/CScriptSpecialFunction.cpp index 0395c1b3c..c854b53da 100644 --- a/Runtime/World/CScriptSpecialFunction.cpp +++ b/Runtime/World/CScriptSpecialFunction.cpp @@ -48,15 +48,18 @@ CScriptSpecialFunction::CScriptSpecialFunction(TUniqueId uid, std::string_view n , x1bc_areaSaveId(aId1) , x1c0_layerIdx(aId2) , x1c4_item(itemType) { - if (xe8_function == ESpecialFunction::HUDTarget) + if (xe8_function == ESpecialFunction::HUDTarget) { x1c8_touchBounds = {-1.f, 1.f}; + } } void CScriptSpecialFunction::Accept(IVisitor& visitor) { visitor.Visit(this); } void CScriptSpecialFunction::Think(float dt, CStateManager& mgr) { - if (!GetActive()) + if (!GetActive()) { return; + } + switch (xe8_function) { case ESpecialFunction::PlayerFollowLocator: ThinkPlayerFollowLocator(dt, mgr); @@ -125,25 +128,29 @@ constexpr std::array fxTranslation{ void CScriptSpecialFunction::AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId uid, CStateManager& mgr) { if (GetActive() && msg == EScriptObjectMessage::Deactivate && xe8_function == ESpecialFunction::Billboard) { mgr.SetPendingOnScreenTex(CAssetId(), zeus::CVector2i(), zeus::CVector2i()); - if (x1e8_) + if (x1e8_) { x1e8_ = TLockedToken(); + } x1e5_26_displayBillboard = false; } CActor::AcceptScriptMsg(msg, uid, mgr); - if (xe8_function == ESpecialFunction::ChaffTarget && msg == EScriptObjectMessage::InitializedInArea) + if (xe8_function == ESpecialFunction::ChaffTarget && msg == EScriptObjectMessage::InitializedInArea) { AddMaterial(EMaterialTypes::Target, mgr); + } if (GetActive()) { switch (xe8_function) { case ESpecialFunction::HUDFadeIn: { - if (msg == EScriptObjectMessage::Action) + if (msg == EScriptObjectMessage::Action) { mgr.Player()->SetHudDisable(xfc_float1, 0.f, 0.5f); + } break; } case ESpecialFunction::EscapeSequence: { - if (msg == EScriptObjectMessage::Action && xfc_float1 >= 0.f) + if (msg == EScriptObjectMessage::Action && xfc_float1 >= 0.f) { mgr.ResetEscapeSequenceTimer(xfc_float1); + } break; } case ESpecialFunction::SpinnerController: { @@ -211,9 +218,9 @@ void CScriptSpecialFunction::AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId case ESpecialFunction::SaveStation: { if (msg == EScriptObjectMessage::Action) { g_GameState->GetPlayerState()->IncrPickup(CPlayerState::EItemType::EnergyTanks, 1); - if (g_GameState->GetCardSerial() == 0) + if (g_GameState->GetCardSerial() == 0) { SendScriptMsgs(EScriptObjectState::Closed, mgr, EScriptObjectMessage::None); - else { + } else { mgr.DeferStateTransition(EStateManagerTransition::SaveGame); x1e5_24_doSave = true; } @@ -224,14 +231,16 @@ void CScriptSpecialFunction::AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId if (x1a8_ringState != ERingState::Breakup) { switch (msg) { case EScriptObjectMessage::Play: { - if (x1a8_ringState != ERingState::Scramble) + if (x1a8_ringState != ERingState::Scramble) { RingScramble(mgr); + } for (SRingController& cont : x198_ringControllers) { - if (TCastToPtr act = mgr.ObjectById(cont.x0_id)) + if (const TCastToPtr act = mgr.ObjectById(cont.x0_id)) { cont.xc_ = act->GetTransform().frontVector(); - else + } else { cont.xc_ = zeus::skForward; + } } x1a8_ringState = ERingState::Breakup; @@ -251,12 +260,13 @@ void CScriptSpecialFunction::AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId case EScriptObjectMessage::InitializedInArea: { x198_ringControllers.reserve(3); for (const SConnection& conn : x20_conns) { - if (conn.x0_state != EScriptObjectState::Play || conn.x4_msg != EScriptObjectMessage::Activate) + if (conn.x0_state != EScriptObjectState::Play || conn.x4_msg != EScriptObjectMessage::Activate) { continue; + } auto search = mgr.GetIdListForScript(conn.x8_objId); for (auto it = search.first; it != search.second; ++it) { - if (TCastToPtr act = mgr.ObjectById(it->second)) { + if (const TCastToPtr act = mgr.ObjectById(it->second)) { x198_ringControllers.emplace_back(it->second, 0.f, false); act->RemoveMaterial(EMaterialTypes::Occluder, mgr); } @@ -265,10 +275,11 @@ void CScriptSpecialFunction::AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId std::sort(x198_ringControllers.begin(), x198_ringControllers.end(), [&mgr](const SRingController& a, const SRingController& b) { - TCastToConstPtr actA(mgr.GetObjectById(a.x0_id)); - TCastToConstPtr actB(mgr.GetObjectById(b.x0_id)); - if (actA && actB) + const TCastToConstPtr actA(mgr.GetObjectById(a.x0_id)); + const TCastToConstPtr actB(mgr.GetObjectById(b.x0_id)); + if (actA && actB) { return actA->GetTranslation().z() < actB->GetTranslation().z(); + } return false; }); @@ -294,10 +305,11 @@ void CScriptSpecialFunction::AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId break; } case ESpecialFunction::BossEnergyBar: { - if (msg == EScriptObjectMessage::Increment) + if (msg == EScriptObjectMessage::Increment) { mgr.SetBossParams(uid, xfc_float1, u32(x100_float2) + 86); - else if (msg == EScriptObjectMessage::Decrement) + } else if (msg == EScriptObjectMessage::Decrement) { mgr.SetBossParams(kInvalidUniqueId, 0.f, 0); + } break; } case ESpecialFunction::EndGame: { @@ -319,8 +331,9 @@ void CScriptSpecialFunction::AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId } case ESpecialFunction::CinematicSkip: { if (msg == EScriptObjectMessage::Increment) { - if (ShouldSkipCinematic(mgr)) + if (ShouldSkipCinematic(mgr)) { mgr.SetSkipCinematicSpecialFunction(GetUniqueId()); + } } else if (msg == EScriptObjectMessage::Decrement) { mgr.SetSkipCinematicSpecialFunction(kInvalidUniqueId); g_GameState->SystemOptions().SetCinematicState(mgr.GetWorld()->GetWorldAssetId(), GetEditorId(), true); @@ -332,18 +345,19 @@ void CScriptSpecialFunction::AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId if (x1bc_areaSaveId != -1 && x1c0_layerIdx != -1) { TAreaId aId = mgr.GetWorld()->GetAreaIdForSaveId(x1bc_areaSaveId); std::shared_ptr worldLayerState; - if (aId != kInvalidAreaId) + if (aId != kInvalidAreaId) { worldLayerState = mgr.WorldLayerState(); - else { - std::pair worldAreaPair = g_MemoryCardSys->GetAreaAndWorldIdForSaveId(x1bc_areaSaveId); + } else { + const std::pair worldAreaPair = g_MemoryCardSys->GetAreaAndWorldIdForSaveId(x1bc_areaSaveId); if (worldAreaPair.first.IsValid()) { worldLayerState = g_GameState->StateForWorld(worldAreaPair.first).GetLayerState(); aId = worldAreaPair.second; } } - if (aId != kInvalidAreaId) + if (aId != kInvalidAreaId) { worldLayerState->SetLayerActive(aId, x1c0_layerIdx, msg == EScriptObjectMessage::Increment); + } } } break; @@ -354,30 +368,34 @@ void CScriptSpecialFunction::AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId We won't do that though */ case ESpecialFunction::EnvFxDensityController: { - if (msg == EScriptObjectMessage::Action) + if (msg == EScriptObjectMessage::Action) { mgr.GetEnvFxManager()->SetFxDensity(s32(x100_float2), xfc_float1); + } break; } case ESpecialFunction::RumbleEffect: if (msg == EScriptObjectMessage::Action) { - s32 rumbFx = s32(x100_float2); - /* Retro originally did not check the upper bounds, this could potentially cause a crash - * with some runtimes, so let's make sure we're not out of bounds in either direction - */ - if (rumbFx < 0 || rumbFx >= 6) + const s32 rumbFx = s32(x100_float2); + + // Retro originally did not check the upper bounds, this could potentially cause a crash + // with some runtimes, so let's make sure we're not out of bounds in either direction. + if (rumbFx < 0 || rumbFx >= 6) { break; + } mgr.GetRumbleManager().Rumble(mgr, fxTranslation[rumbFx], 1.f, ERumblePriority::One); } break; case ESpecialFunction::InventoryActivator: { - if (msg == EScriptObjectMessage::Action && mgr.GetPlayerState()->HasPowerUp(x1c4_item)) + if (msg == EScriptObjectMessage::Action && mgr.GetPlayerState()->HasPowerUp(x1c4_item)) { SendScriptMsgs(EScriptObjectState::Zero, mgr, EScriptObjectMessage::None); + } break; } case ESpecialFunction::FusionRelay: { - if (msg == EScriptObjectMessage::Action && mgr.GetPlayerState()->IsFusionEnabled()) + if (msg == EScriptObjectMessage::Action && mgr.GetPlayerState()->IsFusionEnabled()) { SendScriptMsgs(EScriptObjectState::Zero, mgr, EScriptObjectMessage::None); + } break; } case ESpecialFunction::AreaDamage: { @@ -390,10 +408,11 @@ void CScriptSpecialFunction::AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId } case ESpecialFunction::DropBomb: { if (msg == EScriptObjectMessage::Action) { - if (xfc_float1 >= 1.f) + if (xfc_float1 >= 1.f) { mgr.GetPlayer().GetPlayerGun()->DropBomb(CPlayerGun::EBWeapon::PowerBomb, mgr); - else + } else { mgr.GetPlayer().GetPlayerGun()->DropBomb(CPlayerGun::EBWeapon::Bomb, mgr); + } } break; } @@ -411,7 +430,7 @@ void CScriptSpecialFunction::AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId case ESpecialFunction::Billboard: { if (msg == EScriptObjectMessage::Increment) { const SObjectTag* objectTag = g_ResFactory->GetResourceIdByName(xec_locatorName); - CAssetId assetId = objectTag ? objectTag->id : CAssetId(); + const CAssetId assetId = objectTag ? objectTag->id : CAssetId(); mgr.SetPendingOnScreenTex(assetId, {int(x104_float3), int(x108_float4)}, {int(xfc_float1), int(x100_float2)}); if (objectTag) { @@ -434,27 +453,31 @@ void CScriptSpecialFunction::AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId break; } case ESpecialFunction::HUDTarget: { - if (msg == EScriptObjectMessage::Increment) + if (msg == EScriptObjectMessage::Increment) { AddMaterial(EMaterialTypes::Target, EMaterialTypes::RadarObject, mgr); - else if (msg == EScriptObjectMessage::Decrement) + } else if (msg == EScriptObjectMessage::Decrement) { RemoveMaterial(EMaterialTypes::Target, EMaterialTypes::RadarObject, mgr); + } break; } case ESpecialFunction::FogFader: { - if (msg == EScriptObjectMessage::Increment) + if (msg == EScriptObjectMessage::Increment) { mgr.GetCameraManager()->SetFogDensity(x100_float2, xfc_float1); - else if (msg == EScriptObjectMessage::Decrement) + } else if (msg == EScriptObjectMessage::Decrement) { mgr.GetCameraManager()->SetFogDensity(x100_float2, 1.f); + } break; } case ESpecialFunction::EnterLogbook: { - if (msg == EScriptObjectMessage::Action) + if (msg == EScriptObjectMessage::Action) { mgr.DeferStateTransition(EStateManagerTransition::LogBook); + } break; } case ESpecialFunction::Ending: { - if (msg == EScriptObjectMessage::Action && GetSpecialEnding(mgr) == u32(xfc_float1)) + if (msg == EScriptObjectMessage::Action && GetSpecialEnding(mgr) == u32(xfc_float1)) { SendScriptMsgs(EScriptObjectState::Zero, mgr, EScriptObjectMessage::None); + } break; } default: @@ -464,10 +487,12 @@ void CScriptSpecialFunction::AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId } void CScriptSpecialFunction::PreRender(CStateManager&, const zeus::CFrustum& frustum) { - if (xe8_function != ESpecialFunction::FogVolume && xe8_function != ESpecialFunction::ViewFrustumTester) + if (xe8_function != ESpecialFunction::FogVolume && xe8_function != ESpecialFunction::ViewFrustumTester) { return; - if (!GetActive()) + } + if (!GetActive()) { return; + } bool val; if (xe8_function == ESpecialFunction::FogVolume) { @@ -476,12 +501,14 @@ void CScriptSpecialFunction::PreRender(CStateManager&, const zeus::CFrustum& fru val = frustum.pointFrustumTest(GetTranslation()); } - if (x1e4_30_ == val) + if (x1e4_30_ == val) { return; - if (!val) + } + if (!val) { x1e4_29_frustumExited = true; - else + } else { x1e4_28_frustumEntered = true; + } } void CScriptSpecialFunction::AddToRenderer(const zeus::CFrustum&, CStateManager& mgr) { @@ -496,18 +523,18 @@ void CScriptSpecialFunction::AddToRenderer(const zeus::CFrustum&, CStateManager& void CScriptSpecialFunction::Render(CStateManager& mgr) { if (xe8_function == ESpecialFunction::FogVolume) { - float z = mgr.IntegrateVisorFog(xfc_float1 * std::sin(CGraphics::GetSecondsMod900())); + const float z = mgr.IntegrateVisorFog(xfc_float1 * std::sin(CGraphics::GetSecondsMod900())); if (z > 0.f) { zeus::CVector3f max = GetTranslation() + x10c_vector3f; max.z() += z; - zeus::CAABox box(GetTranslation() - x10c_vector3f, max); - zeus::CTransform modelMtx = zeus::CTransform::Translate(box.center()) * zeus::CTransform::Scale(box.extents()); + const zeus::CAABox box(GetTranslation() - x10c_vector3f, max); + const zeus::CTransform modelMtx = zeus::CTransform::Translate(box.center()) * zeus::CTransform::Scale(box.extents()); g_Renderer->SetModelMatrix(modelMtx); g_Renderer->RenderFogVolume(x118_color, zeus::CAABox(-1.f, 1.f), nullptr, nullptr); } - - } else + } else { CActor::Render(mgr); + } } void CScriptSpecialFunction::SkipCinematic(CStateManager& stateMgr) { @@ -530,7 +557,7 @@ void CScriptSpecialFunction::RingScramble(CStateManager& mgr) { void CScriptSpecialFunction::ThinkIntroBossRingController(float dt, CStateManager& mgr) { if (x1a8_ringState != ERingState::Breakup) { for (const auto& rc : x198_ringControllers) { - if (TCastToPtr act = mgr.ObjectById(rc.x0_id)) { + if (const TCastToPtr act = mgr.ObjectById(rc.x0_id)) { zeus::CTransform newXf = act->GetTransform(); newXf.rotateLocalZ(zeus::degToRad(rc.x4_rotateSpeed * dt)); act->SetTransform(newXf); @@ -541,7 +568,7 @@ void CScriptSpecialFunction::ThinkIntroBossRingController(float dt, CStateManage case ERingState::Breakup: { float minMag = 0.f; for (const auto& rc : x198_ringControllers) { - if (TCastToPtr act = mgr.ObjectById(rc.x0_id)) { + if (const TCastToPtr act = mgr.ObjectById(rc.x0_id)) { act->SetTranslation(act->GetTransform().basis[1] * 50.f * dt + act->GetTranslation()); minMag = std::min(act->GetTranslation().magnitude(), minMag); } @@ -550,8 +577,9 @@ void CScriptSpecialFunction::ThinkIntroBossRingController(float dt, CStateManage if (minMag != 0.f) { /* Never actually happens */ for (const auto& rc : x198_ringControllers) { - if (CEntity* ent = mgr.ObjectById(rc.x0_id)) + if (CEntity* ent = mgr.ObjectById(rc.x0_id)) { ent->SetActive(false); + } } SetActive(false); } @@ -563,7 +591,7 @@ void CScriptSpecialFunction::ThinkIntroBossRingController(float dt, CStateManage .transform(x1ac_ringRotateTarget); bool allReachedTarget = true; for (auto& rc : x198_ringControllers) { - if (TCastToPtr act = mgr.ObjectById(rc.x0_id)) { + if (const TCastToPtr act = mgr.ObjectById(rc.x0_id)) { zeus::CVector3f lookDirFlat = act->GetTransform().basis[1]; lookDirFlat.z() = 0.f; lookDirFlat.normalize(); @@ -583,8 +611,9 @@ void CScriptSpecialFunction::ThinkIntroBossRingController(float dt, CStateManage if (allReachedTarget) { SendScriptMsgs(EScriptObjectState::MaxReached, mgr, EScriptObjectMessage::None); x1a8_ringState = ERingState::Stopped; - for (auto& rc : x198_ringControllers) + for (auto& rc : x198_ringControllers) { rc.x8_reachedTarget = false; + } } break; } @@ -595,36 +624,39 @@ void CScriptSpecialFunction::ThinkIntroBossRingController(float dt, CStateManage void CScriptSpecialFunction::ThinkPlayerFollowLocator(float, CStateManager& mgr) { for (const SConnection& conn : GetConnectionList()) { - if (conn.x0_state == EScriptObjectState::Play && conn.x4_msg == EScriptObjectMessage::Activate) { - auto search = mgr.GetIdListForScript(conn.x8_objId); - for (auto it = search.first; it != search.second; ++it) { - if (TCastToConstPtr act = mgr.GetObjectById(it->second)) { - zeus::CTransform xf = act->GetTransform() * act->GetLocatorTransform(xec_locatorName); - CPlayer& pl = mgr.GetPlayer(); - pl.SetTransform(xf); - pl.SetVelocityWR({}); - pl.SetAngularVelocityWR({}); - pl.ClearForcesAndTorques(); - return; - } + if (conn.x0_state != EScriptObjectState::Play || conn.x4_msg != EScriptObjectMessage::Activate) { + continue; + } + + const auto search = mgr.GetIdListForScript(conn.x8_objId); + for (auto it = search.first; it != search.second; ++it) { + if (const TCastToConstPtr act = mgr.GetObjectById(it->second)) { + const zeus::CTransform xf = act->GetTransform() * act->GetLocatorTransform(xec_locatorName); + CPlayer& pl = mgr.GetPlayer(); + pl.SetTransform(xf); + pl.SetVelocityWR({}); + pl.SetAngularVelocityWR({}); + pl.ClearForcesAndTorques(); + return; } } } } void CScriptSpecialFunction::ThinkSpinnerController(float dt, CStateManager& mgr, ESpinnerControllerMode mode) { - bool allowWrap = xec_locatorName.find("AllowWrap") != std::string::npos; - bool noBackward = xec_locatorName.find("NoBackward") != std::string::npos; - float pointOneByDt = 0.1f * dt; - float twoByDt = 2.f * dt; + const bool allowWrap = xec_locatorName.find("AllowWrap") != std::string::npos; + const bool noBackward = xec_locatorName.find("NoBackward") != std::string::npos; + const float pointOneByDt = 0.1f * dt; + const float twoByDt = 2.f * dt; for (const SConnection& conn : x20_conns) { - if (conn.x0_state != EScriptObjectState::Play || conn.x4_msg != EScriptObjectMessage::Activate) + if (conn.x0_state != EScriptObjectState::Play || conn.x4_msg != EScriptObjectMessage::Activate) { continue; + } - auto search = mgr.GetIdListForScript(conn.x8_objId); + const auto search = mgr.GetIdListForScript(conn.x8_objId); for (auto it = search.first; it != search.second; ++it) { - if (TCastToPtr plat = mgr.ObjectById((*it).second)) { + if (const TCastToPtr plat = mgr.ObjectById((*it).second)) { if (plat->HasModelData() && plat->GetModelData()->HasAnimData()) { plat->SetControlledAnimation(true); if (!x1e4_24_) { @@ -633,26 +665,29 @@ void CScriptSpecialFunction::ThinkSpinnerController(float dt, CStateManager& mgr } float f28 = x138_; - float f29 = pointOneByDt * x100_float2; + const float f29 = pointOneByDt * x100_float2; if (mode == ESpinnerControllerMode::Zero) { if (x1e4_25_spinnerCanMove) { - CPlayer& pl = mgr.GetPlayer(); - zeus::CVector3f angVel = pl.GetAngularVelocityOR().getVector(); + const CPlayer& pl = mgr.GetPlayer(); + const zeus::CVector3f angVel = pl.GetAngularVelocityOR().getVector(); float mag = 0.f; - if (angVel.canBeNormalized()) + if (angVel.canBeNormalized()) { mag = angVel.magnitude(); + } - float spinImpulse = + const float spinImpulse = (pl.GetMorphballTransitionState() == CPlayer::EPlayerMorphBallState::Morphed ? 0.025f * mag : 0.f); - if (spinImpulse >= x180_) + if (spinImpulse >= x180_) { SendScriptMsgs(EScriptObjectState::Play, mgr, EScriptObjectMessage::None); + } x180_ = spinImpulse; x138_ += 0.01f * spinImpulse * xfc_float1; - if (!noBackward) + if (!noBackward) { x138_ -= f29; + } } else if (!noBackward) { x138_ = f28 - twoByDt; } @@ -662,17 +697,19 @@ void CScriptSpecialFunction::ThinkSpinnerController(float dt, CStateManager& mgr if (!noBackward) { x138_ -= f29; - if (std::fabs(x16c_) < dt) + if (std::fabs(x16c_) < dt) { x16c_ = 0.f; - else + } else { x16c_ -= (dt * (x16c_ <= 0.f ? -1.f : 1.f)); + } } } if (allowWrap) { x138_ = std::fmod(x138_, 1.f); - if (x138_ < 0.f) + if (x138_ < 0.f) { x138_ += 1.f; + } } else { x138_ = zeus::clamp(0.f, x138_, 1.f); } @@ -681,29 +718,33 @@ void CScriptSpecialFunction::ThinkSpinnerController(float dt, CStateManager& mgr f28 = x138_ - f28; if (zeus::close_enough(x138_, 1.f, FLT_EPSILON)) { if (!x1e4_27_sfx3Played) { - if (x174_sfx3 != 0xFFFF) + if (x174_sfx3 != 0xFFFF) { CSfxManager::AddEmitter(x174_sfx3, GetTranslation(), {}, true, false, 0x7F, kInvalidAreaId); + } x1e4_27_sfx3Played = true; } SendScriptMsgs(EScriptObjectState::MaxReached, mgr, EScriptObjectMessage::None); r23 = false; - } else + } else { x1e4_27_sfx3Played = false; + } if (zeus::close_enough(x138_, 0.f, FLT_EPSILON)) { if (!x1e4_26_sfx2Played) { - if (x172_sfx2 != 0xFFFF) + if (x172_sfx2 != 0xFFFF) { CSfxManager::AddEmitter(x172_sfx2, GetTranslation(), {}, true, false, 0x7F, kInvalidAreaId); + } x1e4_26_sfx2Played = true; } SendScriptMsgs(EScriptObjectState::Zero, mgr, EScriptObjectMessage::None); r23 = false; - } else + } else { x1e4_26_sfx2Played = false; + } // local_1ac = x184_.GetAverage(); if (r23) { @@ -713,7 +754,7 @@ void CScriptSpecialFunction::ThinkSpinnerController(float dt, CStateManager& mgr } else { x184_.AddValue(0.f); } - const std::optional& avg = x184_.GetAverage(); + const std::optional avg = x184_.GetAverage(); AddOrUpdateEmitter(0.f <= f28 ? x108_float4 : 1.f, x178_sfxHandle, x170_sfx1, GetTranslation(), avg.value()); } @@ -722,7 +763,7 @@ void CScriptSpecialFunction::ThinkSpinnerController(float dt, CStateManager& mgr } CAnimData* animData = plat->GetModelData()->GetAnimationData(); - float dur = animData->GetAnimationDuration(animData->GetDefaultAnimation()) * x138_; + const float dur = animData->GetAnimationDuration(animData->GetDefaultAnimation()) * x138_; animData->SetPhase(0.f); animData->SetPlaybackRate(1.f); const SAdvancementDeltas& deltas = plat->UpdateAnimation(dur, mgr, true); @@ -738,12 +779,13 @@ void CScriptSpecialFunction::ThinkObjectFollowLocator(float, CStateManager& mgr) TUniqueId followedAct = kInvalidUniqueId; for (const SConnection& conn : x20_conns) { if (conn.x0_state != EScriptObjectState::Play || - (conn.x4_msg != EScriptObjectMessage::Activate && conn.x4_msg != EScriptObjectMessage::Deactivate)) + (conn.x4_msg != EScriptObjectMessage::Activate && conn.x4_msg != EScriptObjectMessage::Deactivate)) { continue; + } - auto search = mgr.GetIdListForScript(conn.x8_objId); + const auto search = mgr.GetIdListForScript(conn.x8_objId); for (auto it = search.first; it != search.second; ++it) { - if (TCastToConstPtr act = mgr.GetObjectById(it->second)) { + if (const TCastToConstPtr act = mgr.GetObjectById(it->second)) { if (conn.x4_msg == EScriptObjectMessage::Activate && (act->HasModelData() && act->GetModelData()->HasAnimData()) && act->GetActive()) { followedAct = it->second; @@ -754,11 +796,12 @@ void CScriptSpecialFunction::ThinkObjectFollowLocator(float, CStateManager& mgr) } } - if (followerAct == kInvalidUniqueId || followedAct == kInvalidUniqueId) + if (followerAct == kInvalidUniqueId || followedAct == kInvalidUniqueId) { return; + } - TCastToConstPtr fromAct = mgr.GetObjectById(followedAct); - TCastToPtr toAct = mgr.ObjectById(followerAct); + const TCastToConstPtr fromAct = mgr.GetObjectById(followedAct); + const TCastToPtr toAct = mgr.ObjectById(followerAct); toAct->SetTransform(fromAct->GetTransform() * fromAct->GetScaledLocatorTransform(xec_locatorName)); } @@ -767,12 +810,13 @@ void CScriptSpecialFunction::ThinkObjectFollowObject(float, CStateManager& mgr) TUniqueId followedAct = kInvalidUniqueId; for (const SConnection& conn : x20_conns) { if (conn.x0_state != EScriptObjectState::Play || - (conn.x4_msg != EScriptObjectMessage::Activate && conn.x4_msg != EScriptObjectMessage::Deactivate)) + (conn.x4_msg != EScriptObjectMessage::Activate && conn.x4_msg != EScriptObjectMessage::Deactivate)) { continue; + } - auto search = mgr.GetIdListForScript(conn.x8_objId); + const auto search = mgr.GetIdListForScript(conn.x8_objId); for (auto it = search.first; it != search.second; ++it) { - if (TCastToConstPtr act = mgr.GetObjectById(it->second)) { + if (const TCastToConstPtr act = mgr.GetObjectById(it->second)) { if (conn.x4_msg == EScriptObjectMessage::Activate && act->GetActive()) { followedAct = it->second; } else if (conn.x4_msg == EScriptObjectMessage::Deactivate) { @@ -782,20 +826,21 @@ void CScriptSpecialFunction::ThinkObjectFollowObject(float, CStateManager& mgr) } } - TCastToConstPtr followed = mgr.GetObjectById(followedAct); - TCastToPtr follower = mgr.ObjectById(followerAct); - if (followed && follower) + const TCastToConstPtr followed = mgr.GetObjectById(followedAct); + const TCastToPtr follower = mgr.ObjectById(followerAct); + if (followed && follower) { follower->SetTransform(followed->GetTransform()); + } } void CScriptSpecialFunction::ThinkChaffTarget(float dt, CStateManager& mgr) { - zeus::CAABox box(5.f - GetTranslation(), 5.f + GetTranslation()); + const zeus::CAABox box(5.f - GetTranslation(), 5.f + GetTranslation()); rstl::reserved_vector nearList; mgr.BuildNearList(nearList, box, CMaterialFilter::MakeInclude({EMaterialTypes::Projectile}), nullptr); CCameraFilterPassPoly& filter = mgr.GetCameraFilterPass(7); - for (TUniqueId uid : nearList) { - if (TCastToPtr proj = mgr.ObjectById(uid)) { + for (const TUniqueId uid : nearList) { + if (const TCastToPtr proj = mgr.ObjectById(uid)) { if (proj->GetHomingTargetId() == GetUniqueId()) { proj->Set3d0_26(true); if (mgr.GetPlayer().GetAreaIdAlways() == GetAreaIdAlways()) { @@ -810,33 +855,38 @@ void CScriptSpecialFunction::ThinkChaffTarget(float dt, CStateManager& mgr) { x194_ = zeus::max(0.f, x194_ - dt); if (x194_ != 0.f && mgr.GetPlayer().GetAreaIdAlways() == GetAreaIdAlways()) { float intfMag = x104_float3 * (0.5f + ((0.5f + x194_) / xfc_float1)); - if (x194_ < 1.f) + if (x194_ < 1.f) { intfMag *= x194_; + } mgr.GetPlayerState()->GetStaticInterference().AddSource(GetUniqueId(), intfMag, .5f); - if (mgr.GetPlayerState()->GetCurrentVisor() != CPlayerState::EPlayerVisor::Scan) + if (mgr.GetPlayerState()->GetCurrentVisor() != CPlayerState::EPlayerVisor::Scan) { mgr.GetPlayer().AddOrbitDisableSource(mgr, GetUniqueId()); - else + } else { mgr.GetPlayer().RemoveOrbitDisableSource(GetUniqueId()); + } } } void CScriptSpecialFunction::ThinkActorScale(float dt, CStateManager& mgr) { - float deltaScale = dt * xfc_float1; + const float deltaScale = dt * xfc_float1; for (const SConnection& conn : x20_conns) { - if (conn.x0_state != EScriptObjectState::Play || conn.x4_msg != EScriptObjectMessage::Activate) + if (conn.x0_state != EScriptObjectState::Play || conn.x4_msg != EScriptObjectMessage::Activate) { continue; - if (TCastToPtr act = mgr.ObjectById(mgr.GetIdForScript(conn.x8_objId))) { + } + + if (const TCastToPtr act = mgr.ObjectById(mgr.GetIdForScript(conn.x8_objId))) { CModelData* mData = act->GetModelData(); if (mData && (mData->HasAnimData() || mData->HasNormalModel())) { zeus::CVector3f scale = mData->GetScale(); - if (deltaScale > 0.f) + if (deltaScale > 0.f) { scale = zeus::min(zeus::CVector3f(deltaScale) + scale, zeus::CVector3f(x100_float2)); - else + } else { scale = zeus::max(zeus::CVector3f(deltaScale) + scale, zeus::CVector3f(x100_float2)); + } mData->SetScale(scale); } @@ -845,25 +895,30 @@ void CScriptSpecialFunction::ThinkActorScale(float dt, CStateManager& mgr) { } void CScriptSpecialFunction::ThinkSaveStation(float, CStateManager& mgr) { - if (x1e5_24_doSave && mgr.GetDeferredStateTransition() != EStateManagerTransition::SaveGame) { - x1e5_24_doSave = false; - if (mgr.GetInSaveUI()) - SendScriptMsgs(EScriptObjectState::MaxReached, mgr, EScriptObjectMessage::None); - else - SendScriptMsgs(EScriptObjectState::Zero, mgr, EScriptObjectMessage::None); + if (!x1e5_24_doSave || mgr.GetDeferredStateTransition() == EStateManagerTransition::SaveGame) { + return; + } + + x1e5_24_doSave = false; + if (mgr.GetInSaveUI()) { + SendScriptMsgs(EScriptObjectState::MaxReached, mgr, EScriptObjectMessage::None); + } else { + SendScriptMsgs(EScriptObjectState::Zero, mgr, EScriptObjectMessage::None); } } void CScriptSpecialFunction::ThinkRainSimulator(float, CStateManager& mgr) { - if ((float(mgr.GetInputFrameIdx()) / 3600.f) < 0.5f) + if ((float(mgr.GetInputFrameIdx()) / 3600.f) < 0.5f) { SendScriptMsgs(EScriptObjectState::MaxReached, mgr, EScriptObjectMessage::None); - else + } else { SendScriptMsgs(EScriptObjectState::Zero, mgr, EScriptObjectMessage::None); + } } void CScriptSpecialFunction::ThinkAreaDamage(float dt, CStateManager& mgr) { const auto& playerState = mgr.GetPlayerState(); CPlayer& player = mgr.GetPlayer(); + /* The following check is a URDE addition */ if (!playerState->CanTakeDamage()) { /* Make sure we're not currently set to take damage, if so reset our state to be as if we're not */ @@ -879,8 +934,9 @@ void CScriptSpecialFunction::ThinkAreaDamage(float dt, CStateManager& mgr) { if (!x1e4_31_inAreaDamage) { if (mgr.GetPlayer().GetAreaIdAlways() != GetAreaIdAlways() || - playerState->GetCurrentSuitRaw() != CPlayerState::EPlayerSuit::Power) + playerState->GetCurrentSuitRaw() != CPlayerState::EPlayerSuit::Power) { return; + } x1e4_31_inAreaDamage = true; player.IncrementEnvironmentDamage(); SendScriptMsgs(EScriptObjectState::Entered, mgr, EScriptObjectMessage::None); @@ -902,8 +958,9 @@ void CScriptSpecialFunction::ThinkAreaDamage(float dt, CStateManager& mgr) { void CScriptSpecialFunction::ThinkPlayerInArea(float dt, CStateManager& mgr) { if (mgr.GetPlayer().GetAreaIdAlways() == GetAreaIdAlways()) { - if (x1e5_25_playerInArea) + if (x1e5_25_playerInArea) { return; + } x1e5_25_playerInArea = true; SendScriptMsgs(EScriptObjectState::Entered, mgr, EScriptObjectMessage::None); @@ -914,22 +971,28 @@ void CScriptSpecialFunction::ThinkPlayerInArea(float dt, CStateManager& mgr) { } bool CScriptSpecialFunction::ShouldSkipCinematic(CStateManager& stateMgr) const { - if (hecl::com_developer->toBoolean()) + if (hecl::com_developer->toBoolean()) { return true; + } return g_GameState->SystemOptions().GetCinematicState(stateMgr.GetWorld()->IGetWorldAssetId(), GetEditorId()); } void CScriptSpecialFunction::DeleteEmitter(const CSfxHandle& handle) { - if (handle) - CSfxManager::RemoveEmitter(handle); + if (!handle) { + return; + } + + CSfxManager::RemoveEmitter(handle); } u32 CScriptSpecialFunction::GetSpecialEnding(const CStateManager& mgr) const { const u32 rate = (mgr.GetPlayerState()->CalculateItemCollectionRate() * 100) / mgr.GetPlayerState()->GetPickupTotal(); - if (rate < 75) + if (rate < 75) { return 0; - else if (rate < 100) + } + if (rate < 100) { return 1; + } return 2; }