#pragma once #include "Runtime/Camera/CCameraShakeData.hpp" #include "Runtime/Character/CBoneTracking.hpp" #include "Runtime/MP1/World/CMetroidPrimeProjectile.hpp" #include "Runtime/Weapon/CBeamInfo.hpp" #include "Runtime/Weapon/CProjectileInfo.hpp" #include "Runtime/World/CActorParameters.hpp" #include "Runtime/World/CPatterned.hpp" #include "Runtime/World/CPatternedInfo.hpp" #include "Runtime/rstl.hpp" #include namespace urde { class CCameraShakeData; class CCollisionActorManager; class CGenDescription; class CElementGen; class CProjectedShadow; namespace MP1 { struct SPrimeStruct2B { u32 x0_propertyCount; CAssetId x4_particle1; CAssetId x8_particle2; CAssetId xc_particle3; CDamageInfo x10_dInfo; float x2c_; float x30_; CAssetId x34_texture; u16 x38_; u16 x3a_; explicit SPrimeStruct2B(CInputStream& in); }; struct SPrimeStruct5 { u32 x0_propertyCount; CAssetId x4_; u32 x8_; CAssetId xc_; CAssetId x10_; u32 x14_; u32 x18_; u32 x1c_; u32 x20_; explicit SPrimeStruct5(CInputStream& in); }; struct SPrimeStruct4 { CBeamInfo x0_beamInfo; u32 x44_; CDamageInfo x48_dInfo1; SPrimeStruct5 x64_struct5; float x88_; CDamageInfo x8c_dInfo2; explicit SPrimeStruct4(CInputStream& in); }; struct SPrimeStruct6 { u32 x0_propertyCount; CDamageVulnerability x4_damageVulnerability; zeus::CColor x6c_color; u32 x70_; u32 x74_; explicit SPrimeStruct6(CInputStream& in); }; struct SPrimeExoParameters { u32 x0_propertyCount; CPatternedInfo x4_patternedInfo; CActorParameters x13c_actorParms; u32 x1a4_; CCameraShakeData x1a8_; CCameraShakeData x27c_; CCameraShakeData x350_; SPrimeStruct2B x424_; CAssetId x460_particle1; rstl::reserved_vector x464_; CAssetId x708_wpsc1; CDamageInfo x70c_dInfo1; CCameraShakeData x728_shakeData1; CAssetId x7fc_wpsc2; CDamageInfo x800_dInfo2; CCameraShakeData x81c_shakeData2; SPrimeProjectileInfo x8f0_; CDamageInfo x92c_; CCameraShakeData x948_; CAssetId xa1c_particle2; CAssetId xa20_swoosh; CAssetId xa24_particle3; CAssetId xa28_particle4; rstl::reserved_vector xa2c_; explicit SPrimeExoParameters(CInputStream& in); }; struct SPrimeExoRoomParameters { rstl::reserved_vector x0_; explicit SPrimeExoRoomParameters(CInputStream& in); }; class CMetroidPrimeExo : public CPatterned { TUniqueId x568_relayId = kInvalidUniqueId; std::unique_ptr x56c_collisionManager; u32 x570_ = 1; u32 x574_ = 1; u32 x578_ = 0; u32 x57c_ = 0; u32 x580_ = 0; bool x584_ = false; rstl::reserved_vector x588_; rstl::reserved_vector x76c_; CHealthInfo x8c0_ = CHealthInfo(150.f, 0.f); float x8c8_ = 0.f; TUniqueId x8cc_ = kInvalidUniqueId; u32 x8d0_ = 3; u32 x8d4_ = 3; zeus::CColor x8d8_ = zeus::skBlack; zeus::CColor x8dc_ = zeus::skBlack; zeus::CColor x8e0_ = zeus::skBlack; float x8e4_ = 0.f; s32 x8e8_headUpAdditiveBodyAnimIndex; float x8ec_ = 0.f; float x8f0_ = 0.f; bool x8f4_24_ : 1 = false; bool x8f4_25_ : 1 = false; bool x8f4_26_ : 1 = false; bool x8f4_27_ : 1 = false; bool x8f4_28_ : 1 = false; zeus::CVector3f x8f8_; zeus::CVector3f x904_; float x910_ = 5.f; bool x914_24_ : 1 = false; s32 x918_ = -1; s32 x91c_; float x920_ = 0.f; float x924_ = 4.f; float x928_ = 5.f; u32 x92c_ = 0; SPrimeStruct2B x930_; // x96c_; rstl::reserved_vector xa80_; rstl::reserved_vector xb24_; rstl::reserved_vector xb30_; // xbc4_; TLockedToken xc48_; std::unique_ptr xc54_; s32 xc58_ = -1; float xc5c_ = 0.f; zeus::CVector3f xc60_; zeus::CVector3f xc6c_; CProjectileInfo xc78_; CCameraShakeData xca0_; CProjectileInfo xd74_; CCameraShakeData xd9c_; SPrimeProjectileInfo xe70_; TUniqueId xeac_ = kInvalidUniqueId; u32 xeb0_ = 0; CDamageInfo xeb4_; CCameraShakeData xed0_; TLockedToken xfa4_; std::unique_ptr xfb0_; float xfb4_ = 0.f; float xfb8_ = 0.f; CSfxHandle xfbc_; bool xfc0_ = false; bool xfc1_ = false; u32 xfc4_ = 0; u32 xfd8_ = 0; u32 xfec_ = 0; u32 x1000_ = 0; TToken x1014_; TToken x101c_; std::unique_ptr x1024_; rstl::reserved_vector x102c_; rstl::reserved_vector x1038_; TUniqueId x1044_ = kInvalidUniqueId; TUniqueId x1046_ = kInvalidUniqueId; float x1048_ = 0.f; float x104c_ = 75.f; float x1050_ = 0.f; bool x1054_24_ : 1 = false; bool x1054_25_ : 1 = false; bool x1054_26_ : 1 = false; bool x1054_27_ : 1 = false; u32 x1058_ = 0; u32 x106c_ = 0; float x1074_ = 0.f; s32 x1078_ = -1; float x107c_ = 0.f; float x1080_; float x1084_ = 0.f; float x1088_ = 0.f; CCameraShakeData x108c_; u32 x1160_ = 0; u32 x1254_ = -1; u32 x1258_ = 0; CCameraShakeData x1294_; CCameraShakeData x1368_; std::unique_ptr x143c_; s32 x1440_ = 0; bool x1444_24_ : 1 = false; bool x1444_25_ : 1 = false; void sub802738d4(CStateManager& mgr); void sub80273910(float dt, CStateManager& mgr); void sub80273c78(CStateManager& mgr); void sub80273d38(CStateManager& mgr); void sub80273f10(CStateManager& mgr); void sub80274054(CStateManager& mgr); void sub802740cc(CStateManager& mgr); void sub802740fc(CStateManager& mgr); void sub802743e0(CStateManager& mgr, u32); void sub8027444c(CStateManager& mgr); void sub8027447c(CStateManager& mgr); void sub802747b8(float f1, CStateManager& mgr, const zeus::CVector3f& vec); void sub80274e6c(float f1, CStateManager& mgr); void sub802755ac(CStateManager& mgr, bool b1); void sub802756b8(CStateManager& mgr); void sub8027571c(CStateManager& mgr); void sub80275780(float mgr); void sub80275800(CStateManager& mgr); void sub802759a8(CStateManager& mgr, int w1, int w2); void sub80275b04(CStateManager& mgr, int w1, int w2); void sub80275b68(); void sub80275c60(CStateManager& mgr, int w1, int w2); void sub80275d68(int w1); void sub80275e14(int w1); void sub80275e34(int w1); void sub80275e54(float f1, CStateManager& mgr); void sub80276164(float f1, CStateManager& mgr); void sub80276204(CStateManager& mgr, bool b1); void sub8027639c(CStateManager& mgr, bool b1); void sub802764c4(CStateManager& mgr, TUniqueId uid, TAreaId aid); void sub80276528(CStateManager& mgr); void sub802766e4(EScriptObjectState state, CStateManager& mgr); void sub80276754(CStateManager& mgr); zeus::CVector3f sub802769e0(CStateManager& mgr, bool b1); zeus::CVector3f sub80276b3c(CStateManager& mgr, EScriptObjectState state, EScriptObjectMessage msg); void UpdateRelay(CStateManager& mgr, TAreaId areaId); bool sub80276ec0(CStateManager& mgr, TAreaId w2); void sub80277224(float f1, CStateManager& mgr); void sub80277380(CStateManager& mgr, bool b1); void sub80277570(float f1, CStateManager& mgr); zeus::CVector3f sub80778c4(CStateManager& mgr); void sub80277b74(CStateManager& mgr); void sub80277c04(CStateManager& mgr); void sub80277e30(CStateManager& mgr); void sub80278044(float f1, CStateManager& mgr); void sub80278130(const zeus::CColor& col); void sub802781e0(const zeus::CColor& col); void sub8027815c(float f1); void sub8027827c(TUniqueId uid, CStateManager& mgr); void sub80278508(CStateManager& mgr, int w1, bool b1); void sub802786fc(CStateManager& mgr); void sub80278800(CStateManager& mgr, bool b); void sub802788c8(CStateManager& mgr); void sub8027894c(CStateManager& mgr); void sub80278b60(CStateManager& mgr, bool b1); void UpdateBoneTracking(float f1, CStateManager& mgr); void sub80278cc8(TUniqueId uid, CStateManager& mgr); void UpdateCollision(floatdt, CStateManager& mgr); void sub8027903c(); void sub8027c22c(int w1, int w2); void SetupCollisionActorManager(CStateManager& mgr); public: DEFINE_PATTERNED(MetroidPrimeExo); CMetroidPrimeExo(TUniqueId uid, std::string_view name, const CEntityInfo& info, const zeus::CTransform& xf, CModelData&& mData, const CPatternedInfo& pInfo, const CActorParameters& aParms, u32 pw1, const CCameraShakeData& shakeData1, const CCameraShakeData& shakeData2, const CCameraShakeData& shakeData3, const SPrimeStruct2B& struct2b, CAssetId particle1, const rstl::reserved_vector& struct4s, CAssetId wpsc1, const CDamageInfo& dInfo1, const CCameraShakeData& shakeData4, CAssetId wpsc2, const CDamageInfo& dInfo2, const CCameraShakeData& shakeData5, const SPrimeProjectileInfo& projectileInfo, const CDamageInfo& dInfo3, const CCameraShakeData& shakeData6, CAssetId particle2, CAssetId swoosh, CAssetId particle3, CAssetId particle4, const rstl::reserved_vector& struct6s); void PreThink(float dt, CStateManager& mgr) override; void Think(float dt, CStateManager& mgr) override; void AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId other, CStateManager& mgr) override; void PreRender(CStateManager& mgr, const zeus::CFrustum& frustum) override; void AddToRenderer(const zeus::CFrustum& frustum, CStateManager& mgr) override; void Render(CStateManager &mgr) override; bool CanRenderUnsorted(const CStateManager &mgr) const override; void Touch(CActor &act, CStateManager &mgr) override; void DoUserAnimEvent(CStateManager &mgr, const CInt32POINode &node, EUserEventType type, float dt) override; void SelectTarget(CStateManager& mgr, EStateMsg msg, float arg) override; void Run(CStateManager& mgr, EStateMsg msg, float arg) override; void Attack(CStateManager& mgr, EStateMsg msg, float arg) override; void TurnAround(CStateManager& mgr, EStateMsg msg, float arg) override; void Active(CStateManager& mgr, EStateMsg msg, float arg) override; void InActive(CStateManager& mgr, EStateMsg msg, float arg) override; void CoverAttack(CStateManager& mgr, EStateMsg msg, float arg) override; void Crouch(CStateManager& mgr, EStateMsg msg, float arg) override; void Taunt(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 Flinch(CStateManager& mgr, EStateMsg msg, float arg) override; void Dodge(CStateManager& mgr, EStateMsg msg, float arg) override; void Retreat(CStateManager& mgr, EStateMsg msg, float arg) override; void Cover(CStateManager& mgr, EStateMsg msg, float arg) override; void Approach(CStateManager& mgr, EStateMsg msg, float arg) override; void Enraged(CStateManager& mgr, EStateMsg msg, float arg) override; void SpecialAttack(CStateManager& mgr, EStateMsg msg, float arg) override; void Growth(CStateManager& mgr, EStateMsg msg, float arg) override; void Land(CStateManager& mgr, EStateMsg msg, float arg) override; bool TooClose(CStateManager& mgr,float arg) override; bool InMaxRange(CStateManager& mgr,float arg) override; bool PlayerSpot(CStateManager& mgr,float arg) override; bool ShouldAttack(CStateManager& mgr,float arg) override; bool ShouldDoubleSnap(CStateManager& mgr,float arg) override; bool InPosition(CStateManager& mgr,float arg) override; bool ShouldTurn(CStateManager& mgr,float arg) override; bool ShouldJumpBack(CStateManager& mgr, float arg) override { return x1254_ == 11; } bool CoverCheck(CStateManager& mgr,float arg) override; bool CoverFind(CStateManager& mgr,float arg) override; bool CoveringFire(CStateManager& mgr,float arg) override; bool AggressionCheck(CStateManager& mgr,float arg) override; bool AttackOver(CStateManager& mgr,float arg) override; bool ShouldFire(CStateManager& mgr,float arg) override; bool ShouldFlinch(CStateManager& mgr,float arg) override; bool ShouldRetreat(CStateManager& mgr,float arg) override; bool ShouldCrouch(CStateManager& mgr,float arg) override; bool ShouldMove(CStateManager& mgr,float arg) override; bool AIStage(CStateManager& mgr,float arg) override; bool StartAttack(CStateManager& mgr,float arg) override; bool ShouldSpecialAttack(CStateManager& mgr,float arg) override; bool CodeTrigger(CStateManager& mgr,float arg) override; CProjectileInfo* GetProjectileInfo() override; }; } // namespace MP1 } // namespace urde