2018-10-07 03:42:33 +00:00
|
|
|
#pragma once
|
2017-08-20 05:23:22 +00:00
|
|
|
|
2019-09-28 02:53:03 +00:00
|
|
|
#include "Runtime/Camera/CCameraShakeData.hpp"
|
2020-09-14 04:12:00 +00:00
|
|
|
#include "Runtime/Character/CBoneTracking.hpp"
|
2019-09-28 02:53:03 +00:00
|
|
|
#include "Runtime/MP1/World/CMetroidPrimeProjectile.hpp"
|
|
|
|
#include "Runtime/Weapon/CBeamInfo.hpp"
|
2020-09-14 04:12:00 +00:00
|
|
|
#include "Runtime/Weapon/CProjectileInfo.hpp"
|
2019-09-28 02:53:03 +00:00
|
|
|
#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"
|
2019-09-28 02:53:03 +00:00
|
|
|
|
|
|
|
#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:
|
2020-08-23 19:03:33 +00:00
|
|
|
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
|