diff --git a/Runtime/MP1/World/CFlaahgra.cpp b/Runtime/MP1/World/CFlaahgra.cpp index fa4a027d8..57d726c8e 100644 --- a/Runtime/MP1/World/CFlaahgra.cpp +++ b/Runtime/MP1/World/CFlaahgra.cpp @@ -798,13 +798,13 @@ void CFlaahgra::SetMaterialProperties(const std::unique_ptr zeus::degToRad(15.f); } -void CFlaahgra::TurnAround(CStateManager& mgr, EStateMsg msg, float /*unused*/) { +void CFlaahgra::TurnAround(CStateManager& mgr, EStateMsg msg, float /*arg*/) { if (msg == EStateMsg::Activate) { x6cc_boneTracking->SetTarget(mgr.GetPlayer().GetUniqueId()); x6cc_boneTracking->SetActive(true); @@ -833,7 +833,7 @@ bool CFlaahgra::IsSphereCollider(TUniqueId uid) const { return it != x7fc_sphereColliders.end(); } -void CFlaahgra::GetUp(CStateManager& mgr, EStateMsg msg, float /*unused*/) { +void CFlaahgra::GetUp(CStateManager& mgr, EStateMsg msg, float /*arg*/) { if (msg == EStateMsg::Activate) { x568_state = EState::Zero; x784_ = x780_; @@ -923,7 +923,7 @@ float CFlaahgra::GetEndActionTime() const { return eventTime.GetSeconds(); } -void CFlaahgra::Generate(CStateManager& mgr, EStateMsg msg, float /*unused*/) { +void CFlaahgra::Generate(CStateManager& mgr, EStateMsg msg, float /*arg*/) { if (msg == EStateMsg::Activate) { x568_state = EState::Zero; } else if (msg == EStateMsg::Update) { @@ -1015,7 +1015,7 @@ void CFlaahgra::Faint(CStateManager& mgr, EStateMsg msg, float arg) { } } -void CFlaahgra::Dead(CStateManager& mgr, EStateMsg msg, float /*dt*/) { +void CFlaahgra::Dead(CStateManager& mgr, EStateMsg msg, float /*arg*/) { if (msg == EStateMsg::Activate) { x568_state = (x450_bodyController->GetFallState() != pas::EFallState::Zero || x450_bodyController->GetBodyStateInfo().GetCurrentStateId() == pas::EAnimationState::Fall) @@ -1054,6 +1054,9 @@ void CFlaahgra::Dead(CStateManager& mgr, EStateMsg msg, float /*dt*/) { } void CFlaahgra::Attack(CStateManager& mgr, EStateMsg msg, float arg) { + fmt::print(FMT_STRING("CFlaahgra::Attack {}\n"), (msg == EStateMsg::Activate ? "Activate" + : msg == EStateMsg::Update ? "Update" + : "Deactivate")); static constexpr std::array kStates1{ -1, -1, -1, 2, -1, }; @@ -1076,24 +1079,22 @@ void CFlaahgra::Attack(CStateManager& mgr, EStateMsg msg, float arg) { } x78c_ = sub801ae754(mgr); - x798_meleeInitialAnimState = x450_bodyController->GetBodyStateInfo().GetCurrentStateId(); + x798_meleeInitialAnimState = x450_bodyController->GetCurrentAnimId(); } else { x450_bodyController->GetCommandMgr().DeliverCmd(CBCMeleeAttackCmd(kSeverity[x7a8_])); } } else if (x568_state == EState::One) { - if (x450_bodyController->GetBodyStateInfo().GetCurrentStateId() != pas::EAnimationState::MeleeAttack) { - x568_state = EState::Four; - } else { - if (x798_meleeInitialAnimState != x450_bodyController->GetBodyStateInfo().GetCurrentStateId()) { - x568_state = EState::Two; - } else { + if (x450_bodyController->GetBodyStateInfo().GetCurrentStateId() == pas::EAnimationState::MeleeAttack) { + if (x798_meleeInitialAnimState == x450_bodyController->GetCurrentAnimId()) { x450_bodyController->GetCommandMgr().DeliverTargetVector(x78c_); - if (!ShouldAttack(mgr, 0.f)) { - return; + if (ShouldAttack(mgr, 0.f)) { + x450_bodyController->GetCommandMgr().DeliverCmd(CBCMeleeAttackCmd(kSeverity[kStates1[x7a8_]])); } - - x450_bodyController->GetCommandMgr().DeliverCmd(CBCMeleeAttackCmd(kSeverity[kStates1[x7a8_]])); + } else { + x568_state = EState::Two; } + } else { + x568_state = EState::Four; } } else if (x568_state == EState::Two) { if (x450_bodyController->GetBodyStateInfo().GetCurrentStateId() != pas::EAnimationState::MeleeAttack) { @@ -1120,10 +1121,9 @@ void CFlaahgra::Attack(CStateManager& mgr, EStateMsg msg, float arg) { u32 CFlaahgra::sub801ae828(const CStateManager& mgr) const { const CPlayer& player = mgr.GetPlayer(); - if (player.GetMorphballTransitionState() != CPlayer::EPlayerMorphBallState::Morphed) { - if (x7cc_generateEndCooldown > 0.f || player.GetVelocity().magSquared() < 25.f) { - return 3; - } + if (player.GetMorphballTransitionState() != CPlayer::EPlayerMorphBallState::Morphed && + (x7cc_generateEndCooldown > 0.f || player.GetVelocity().magSquared() < 25.f)) { + return 3; } if (GetTransform().basis[0].dot(player.GetVelocity()) > 0.f) { @@ -1161,7 +1161,7 @@ void CFlaahgra::Dizzy(CStateManager& /*unused*/, EStateMsg msg, float arg) { } } -void CFlaahgra::Suck(CStateManager& mgr, EStateMsg msg, float /*unused*/) { +void CFlaahgra::Suck(CStateManager& mgr, EStateMsg msg, float /*arg*/) { if (msg == EStateMsg::Activate) { x568_state = EState::Zero; x8e4_26_ = false; @@ -1190,7 +1190,7 @@ void CFlaahgra::Suck(CStateManager& mgr, EStateMsg msg, float /*unused*/) { } } -void CFlaahgra::ProjectileAttack(CStateManager& mgr, EStateMsg msg, float /*unused*/) { +void CFlaahgra::ProjectileAttack(CStateManager& mgr, EStateMsg msg, float /*arg*/) { if (msg == EStateMsg::Activate) { x568_state = EState::Zero; SendScriptMsgs(EScriptObjectState::Attack, mgr, EScriptObjectMessage::None); @@ -1237,7 +1237,7 @@ void CFlaahgra::ProjectileAttack(CStateManager& mgr, EStateMsg msg, float /*unus } } -void CFlaahgra::Cover(CStateManager& mgr, EStateMsg msg, float /*unused*/) { +void CFlaahgra::Cover(CStateManager& mgr, EStateMsg msg, float /*arg*/) { static constexpr std::array severities{pas::ESeverity::Eight, pas::ESeverity::Seven}; if (msg == EStateMsg::Activate) { x77c_targetMirrorWaypointId = GetMirrorNearestPlayer(mgr); @@ -1285,7 +1285,7 @@ void CFlaahgra::Cover(CStateManager& mgr, EStateMsg msg, float /*unused*/) { } } -void CFlaahgra::SpecialAttack(CStateManager& mgr, EStateMsg msg, float /*unused*/) { +void CFlaahgra::SpecialAttack(CStateManager& mgr, EStateMsg msg, float /*arg*/) { if (msg == EStateMsg::Activate) { x568_state = EState::Zero; x8e5_24_ = false; @@ -1317,7 +1317,7 @@ void CFlaahgra::SpecialAttack(CStateManager& mgr, EStateMsg msg, float /*unused* } } -bool CFlaahgra::CoverCheck(CStateManager& mgr, float /*unused*/) { +bool CFlaahgra::CoverCheck(CStateManager& mgr, float /*arg*/) { if (x7f8_ <= 0 && x7bc_ > 0.f) { return false; } @@ -1353,7 +1353,7 @@ TUniqueId CFlaahgra::GetMirrorNearestPlayer(const CStateManager& mgr) const { return nearId; } -void CFlaahgra::Enraged(CStateManager& /*unused*/, EStateMsg msg, float /*unused*/) { +void CFlaahgra::Enraged(CStateManager& /*mgr*/, EStateMsg msg, float /*arg*/) { if (msg == EStateMsg::Activate) { x568_state = EState::Zero; } else if (msg == EStateMsg::Update) { diff --git a/Runtime/MP1/World/CFlaahgra.hpp b/Runtime/MP1/World/CFlaahgra.hpp index ad69bd707..16b349dd3 100644 --- a/Runtime/MP1/World/CFlaahgra.hpp +++ b/Runtime/MP1/World/CFlaahgra.hpp @@ -5,13 +5,13 @@ #include #include "Runtime/CDependencyGroup.hpp" -#include "Runtime/rstl.hpp" #include "Runtime/Collision/CJointCollisionDescription.hpp" #include "Runtime/MP1/World/CFlaahgraProjectile.hpp" #include "Runtime/Weapon/CProjectileInfo.hpp" #include "Runtime/World/CActorParameters.hpp" #include "Runtime/World/CAnimationParameters.hpp" #include "Runtime/World/CPatterned.hpp" +#include "Runtime/rstl.hpp" #include #include @@ -51,7 +51,7 @@ public: static constexpr u32 GetNumProperties() { return 23; } explicit CFlaahgraData(CInputStream&); - const CAnimationParameters& GetAnimationParameters() const { return x14c_animationParameters; } + [[nodiscard]] const CAnimationParameters& GetAnimationParameters() const { return x14c_animationParameters; } }; class CFlaahgraRenderer : public CActor { @@ -60,9 +60,9 @@ class CFlaahgraRenderer : public CActor { public: CFlaahgraRenderer(TUniqueId, TUniqueId, std::string_view, const CEntityInfo&, const zeus::CTransform&); - void AddToRenderer(const zeus::CFrustum&, CStateManager&) override; - void Accept(IVisitor&) override; - std::optional GetTouchBounds() const override { return {}; } + void AddToRenderer(const zeus::CFrustum& frustum, CStateManager& mgr) override; + void Accept(IVisitor& visitor) override; + [[nodiscard]] std::optional GetTouchBounds() const override { return {}; } }; class CFlaahgraPlants : public CActor { @@ -78,23 +78,16 @@ public: CFlaahgraPlants(const TToken&, const CActorParameters&, TUniqueId, TAreaId, TUniqueId, const zeus::CTransform&, const CDamageInfo&, const zeus::CVector3f&); - void Accept(IVisitor&) override; - void AcceptScriptMsg(EScriptObjectMessage, TUniqueId, CStateManager&) override; - void Think(float, CStateManager&) override; - void AddToRenderer(const zeus::CFrustum&, CStateManager&) override; - std::optional GetTouchBounds() const override; - void Touch(CActor&, CStateManager&) override; + void Accept(IVisitor& visitor) override; + void AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId sender, CStateManager& mgr) override; + void Think(float dt, CStateManager& mgr) override; + void AddToRenderer(const zeus::CFrustum& frustum, CStateManager& mgr) override; + [[nodiscard]] std::optional GetTouchBounds() const override; + void Touch(CActor& actor, CStateManager& mgr) override; }; class CFlaahgra : public CPatterned { - enum class EState { - Invalid = -1, - Zero, - One, - Two, - Three, - Four - } x568_state = EState::Invalid; + enum class EState { Invalid = -1, Zero, One, Two, Three, Four } x568_state = EState::Invalid; CFlaahgraData x56c_data; std::unique_ptr x6cc_boneTracking; // Used to be an rstl::optional_object TUniqueId x6d0_rendererId = kInvalidUniqueId; @@ -109,7 +102,7 @@ class CFlaahgra : public CPatterned { u32 x784_ = 1; u32 x788_stage = 0; zeus::CVector3f x78c_; - pas::EAnimationState x798_meleeInitialAnimState = pas::EAnimationState::Invalid; + s32 x798_meleeInitialAnimState = -1; std::unique_ptr x79c_leftArmCollision; std::unique_ptr x7a0_rightArmCollision; std::unique_ptr x7a4_sphereCollision; @@ -173,25 +166,25 @@ class CFlaahgra : public CPatterned { void UpdateHealthInfo(CStateManager&); void UpdateAimPosition(CStateManager&, float); void SetMaterialProperties(const std::unique_ptr&, CStateManager&); - bool sub801ae650() const { return (x7a8_ == 0 || x7a8_ == 1); } - bool sub801ae670() const { return (x7a8_ == 2 || x7a8_ == 3 || x7a8_ == 4); } - bool IsSphereCollider(TUniqueId) const; + [[nodiscard]] bool sub801ae650() const { return x7a8_ == 0 || x7a8_ == 1; } + [[nodiscard]] bool sub801ae670() const { return (x7a8_ == 2 || x7a8_ == 3 || x7a8_ == 4); } + [[nodiscard]] bool IsSphereCollider(TUniqueId) const; void SetCollisionActorBounds(CStateManager& mgr, const std::unique_ptr& colMgr, const zeus::CVector3f& extendedBounds); void UpdateScale(float, float, float); - float GetEndActionTime() const; + [[nodiscard]] float GetEndActionTime() const; void SetupHealthInfo(CStateManager&); - zeus::CVector3f GetAttackTargetPos(const CStateManager& mgr) const; + [[nodiscard]] zeus::CVector3f GetAttackTargetPos(const CStateManager& mgr) const; void RattlePlayer(CStateManager& mgr, const zeus::CVector3f& vec); void CalculateFallDirection(); void UpdateHeadDamageVulnerability(CStateManager&, bool); - u32 sub801ae828(const CStateManager&) const; - zeus::CVector3f sub801ae754(const CStateManager&) const; + [[nodiscard]] u32 sub801ae828(const CStateManager&) const; + [[nodiscard]] zeus::CVector3f sub801ae754(const CStateManager&) const; CFlaahgraProjectile* CreateProjectile(const zeus::CTransform& xf, CStateManager& mgr); - TUniqueId GetMirrorNearestPlayer(const CStateManager&) const; + [[nodiscard]] TUniqueId GetMirrorNearestPlayer(const CStateManager&) const; bool sub_801ae638(); public: @@ -200,47 +193,51 @@ public: const CPatternedInfo&, const CActorParameters&, CFlaahgraData); void Accept(IVisitor& visitor) override; - void Think(float, CStateManager&) override; - void PreThink(float, CStateManager&) override; - void AcceptScriptMsg(EScriptObjectMessage, TUniqueId, CStateManager&) override; - void AddToRenderer(const zeus::CFrustum&, CStateManager&) override; - bool CanRenderUnsorted(const CStateManager&) const override { return true; } - zeus::CVector3f GetAimPosition(const CStateManager&, float) const override { return x820_aimPosition; } - void Death(CStateManager&, const zeus::CVector3f&, EScriptObjectState) override; - void DoUserAnimEvent(CStateManager&, const CInt32POINode&, EUserEventType, float dt) override; + void Think(float dt, CStateManager& mgr) override; + void PreThink(float dt, CStateManager& mgr) override; + void AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId sender, CStateManager& mgr) override; + void AddToRenderer(const zeus::CFrustum& frustum, CStateManager& mgr) override; + [[nodiscard]] bool CanRenderUnsorted(const CStateManager& mgr) const override { return true; } + [[nodiscard]] zeus::CVector3f GetAimPosition(const CStateManager& mgr, float dt) const override { + return x820_aimPosition; + } + void Death(CStateManager& mgr, const zeus::CVector3f& direction, EScriptObjectState state) override; + void DoUserAnimEvent(CStateManager& mgr, const CInt32POINode& node, EUserEventType type, float dt) override; CProjectileInfo* GetProjectileInfo() override { return x8e4_30_bigStrike ? &x704_bigStrikeProjectileInfo : &x6dc_normalProjectileInfo; } - bool AnimOver(CStateManager&, float) override { return x568_state == EState::Four; } - bool AIStage(CStateManager&, float arg) override { return x780_ == u32(arg); } - bool HitSomething(CStateManager&, float arg) override { return x7d0_hitSomethingTime > 0.f; } - bool OffLine(CStateManager&, float) override { return (x8e5_29_ && x8e5_28_); } - bool ShouldTurn(CStateManager&, float) override; - bool ShouldAttack(CStateManager&, float) override; - bool BreakAttack(CStateManager&, float) override { return x7d4_faintTime >= x56c_data.xc_faintDuration && !x8e4_29_getup; } - bool IsDizzy(CStateManager&, float) override { + bool AnimOver(CStateManager& mgr, float arg) override { return x568_state == EState::Four; } + bool AIStage(CStateManager& mgr, float arg) override { return x780_ == u32(arg); } + bool HitSomething(CStateManager& mgr, float arg) override { return x7d0_hitSomethingTime > 0.f; } + bool OffLine(CStateManager& mgr, float arg) override { return (x8e5_29_ && x8e5_28_); } + bool ShouldTurn(CStateManager& mgr, float arg) override; + bool ShouldAttack(CStateManager& mgr, float arg) override; + bool BreakAttack(CStateManager& mgr, float arg) override { + return x7d4_faintTime >= x56c_data.xc_faintDuration && !x8e4_29_getup; + } + bool IsDizzy(CStateManager& mgr, float arg) override { return x450_bodyController->GetBodyStateInfo().GetCurrentStateId() == pas::EAnimationState::LoopReaction; } - bool CoverCheck(CStateManager&, float) override; + bool CoverCheck(CStateManager& mgr, float arg) override; bool ShouldSpecialAttack(CStateManager& mgr, float arg) override; bool ShouldFire(CStateManager& mgr, float arg) override; - void FadeIn(CStateManager&, EStateMsg, float) override; - void FadeOut(CStateManager&, EStateMsg, float) override; - void TurnAround(CStateManager&, EStateMsg, float) override; - void GetUp(CStateManager&, EStateMsg, float) override; - void Growth(CStateManager&, EStateMsg, float) override; - void Generate(CStateManager&, EStateMsg, float) override; - void Faint(CStateManager&, EStateMsg, float) override; - void Dead(CStateManager&, EStateMsg, float) override; - void Attack(CStateManager&, EStateMsg, float) override; - void Dizzy(CStateManager&, EStateMsg, float) override; - void Suck(CStateManager&, EStateMsg, float) override; - void ProjectileAttack(CStateManager&, EStateMsg, float) override; - void Cover(CStateManager&, EStateMsg, float) override; - void SpecialAttack(CStateManager&, EStateMsg, float) override; - void Enraged(CStateManager&, EStateMsg, float) override; + void FadeIn(CStateManager& mgr, EStateMsg msg, float arg) override; + void FadeOut(CStateManager& mgr, EStateMsg msg, float arg) override; + void TurnAround(CStateManager& mgr, EStateMsg msg, float arg) override; + void GetUp(CStateManager& mgr, EStateMsg msg, float arg) override; + void Growth(CStateManager& mgr, EStateMsg msg, float arg) override; + void Generate(CStateManager& mgr, EStateMsg msg, float arg) override; + void Faint(CStateManager& mgr, EStateMsg msg, float arg) override; + void Dead(CStateManager& mgr, EStateMsg msg, float arg) override; + void Attack(CStateManager& mgr, EStateMsg msg, float arg) override; + void Dizzy(CStateManager& mgr, EStateMsg msg, float arg) override; + void Suck(CStateManager& mgr, EStateMsg msg, float arg) override; + void ProjectileAttack(CStateManager& mgr, EStateMsg msg, float arg) override; + void Cover(CStateManager& mgr, EStateMsg msg, float arg) override; + void SpecialAttack(CStateManager& mgr, EStateMsg msg, float arg) override; + void Enraged(CStateManager& mgr, EStateMsg msg, float arg) override; }; } // namespace metaforce::MP1