metaforce/Runtime/MP1/World/CMetroidPrimeExo.hpp

336 lines
12 KiB
C++
Raw Normal View History

2018-10-07 03:42:33 +00:00
#pragma once
2017-08-20 05:23:22 +00:00
#include "Runtime/Camera/CCameraShakeData.hpp"
2020-09-14 04:12:00 +00:00
#include "Runtime/Character/CBoneTracking.hpp"
#include "Runtime/MP1/World/CMetroidPrimeProjectile.hpp"
#include "Runtime/Weapon/CBeamInfo.hpp"
2020-09-14 04:12:00 +00:00
#include "Runtime/Weapon/CProjectileInfo.hpp"
#include "Runtime/World/CActorParameters.hpp"
#include "Runtime/World/CPatterned.hpp"
#include "Runtime/World/CPatternedInfo.hpp"
2020-09-14 04:12:00 +00:00
#include "Runtime/rstl.hpp"
#include <zeus/CColor.hpp>
2017-08-20 05:23:22 +00:00
2018-12-08 05:30:43 +00:00
namespace urde {
2017-08-20 05:23:22 +00:00
class CCameraShakeData;
2020-09-14 04:12:00 +00:00
class CCollisionActorManager;
class CGenDescription;
class CElementGen;
class CProjectedShadow;
2017-08-20 05:23:22 +00:00
2018-12-08 05:30:43 +00:00
namespace MP1 {
2017-08-20 05:23:22 +00:00
2018-12-08 05:30:43 +00:00
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);
2017-08-20 05:23:22 +00:00
};
2018-12-08 05:30:43 +00:00
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);
2017-08-20 05:23:22 +00:00
};
2018-12-08 05:30:43 +00:00
struct SPrimeStruct4 {
CBeamInfo x0_beamInfo;
u32 x44_;
CDamageInfo x48_dInfo1;
SPrimeStruct5 x64_struct5;
float x88_;
CDamageInfo x8c_dInfo2;
explicit SPrimeStruct4(CInputStream& in);
2017-08-20 05:23:22 +00:00
};
2018-12-08 05:30:43 +00:00
struct SPrimeStruct6 {
u32 x0_propertyCount;
CDamageVulnerability x4_damageVulnerability;
zeus::CColor x6c_color;
u32 x70_;
u32 x74_;
explicit SPrimeStruct6(CInputStream& in);
2017-08-20 05:23:22 +00:00
};
2018-12-08 05:30:43 +00:00
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<SPrimeStruct4, 4> 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<SPrimeStruct6, 4> xa2c_;
explicit SPrimeExoParameters(CInputStream& in);
2017-08-20 05:23:22 +00:00
};
2018-12-08 05:30:43 +00:00
struct SPrimeExoRoomParameters {
rstl::reserved_vector<float, 14> x0_;
explicit SPrimeExoRoomParameters(CInputStream& in);
2017-08-20 05:23:22 +00:00
};
2018-12-08 05:30:43 +00:00
class CMetroidPrimeExo : public CPatterned {
2020-09-14 04:12:00 +00:00
TUniqueId x568_relayId = kInvalidUniqueId;
std::unique_ptr<CCollisionActorManager> x56c_collisionManager;
u32 x570_ = 1;
u32 x574_ = 1;
u32 x578_ = 0;
u32 x57c_ = 0;
u32 x580_ = 0;
bool x584_ = false;
rstl::reserved_vector<SPrimeStruct6, 4> x588_;
rstl::reserved_vector<CBoneTracking, 6> 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<CProjectileInfo, 4> xa80_;
rstl::reserved_vector<TUniqueId, 4> xb24_;
rstl::reserved_vector<SPrimeStruct5, 4> xb30_;
// xbc4_;
TLockedToken<CGenDescription> xc48_;
std::unique_ptr<CElementGen> 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<CElectricDescription> xfa4_;
std::unique_ptr<CParticleElectric> 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<CGenDescription> x1014_;
TToken<CGenDescription> x101c_;
std::unique_ptr<CElementGen> x1024_;
rstl::reserved_vector<float, 2> x102c_;
rstl::reserved_vector<float, 2> 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;
2020-09-23 19:41:51 +00:00
u32 x1254_ = -1;
2020-09-14 04:12:00 +00:00
u32 x1258_ = 0;
CCameraShakeData x1294_;
CCameraShakeData x1368_;
std::unique_ptr<CProjectedShadow> 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);
2020-09-23 19:41:51 +00:00
void sub80278130(const zeus::CColor& col);
2020-09-14 04:12:00 +00:00
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);
2020-09-23 19:41:51 +00:00
void UpdateBoneTracking(float f1, CStateManager& mgr);
2020-09-14 04:12:00 +00:00
void sub80278cc8(TUniqueId uid, CStateManager& mgr);
2020-09-23 19:41:51 +00:00
void UpdateCollision(floatdt, CStateManager& mgr);
2020-09-14 04:12:00 +00:00
void sub8027903c();
void sub8027c22c(int w1, int w2);
void SetupCollisionActorManager(CStateManager& mgr);
2017-08-20 05:23:22 +00:00
public:
DEFINE_PATTERNED(MetroidPrimeExo);
2018-12-08 05:30:43 +00:00
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<SPrimeStruct4, 4>& 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<SPrimeStruct6, 4>& struct6s);
2020-09-14 04:12:00 +00:00
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;
2020-09-23 19:41:51 +00:00
bool ShouldJumpBack(CStateManager& mgr, float arg) override { return x1254_ == 11; }
2020-09-14 04:12:00 +00:00
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;
2017-08-20 05:23:22 +00:00
};
2018-12-08 05:30:43 +00:00
} // namespace MP1
} // namespace urde