Implement/match IslePathActor::SpawnPlayer (#884)

* Implement/match IslePathActor::SpawnPlayer

* Fix

* Fix

* Add skip

* Rename param
This commit is contained in:
Christian Semmler
2024-05-04 10:13:05 -04:00
committed by GitHub
parent 1b1d2ecde6
commit 45f9f54f21
14 changed files with 278 additions and 57 deletions

View File

@@ -14,6 +14,16 @@ class MxType19NotificationParam;
// SIZE 0x160
class IslePathActor : public LegoPathActor {
public:
enum {
c_LOCATIONS_NUM = 29
};
enum {
c_spawnBit1 = 0x01,
c_playMusic = 0x02,
c_spawnBit3 = 0x04
};
// SIZE 0x38
struct SpawnLocation {
SpawnLocation() {}
@@ -23,11 +33,11 @@ public:
LegoGameState::Area p_area,
MxAtomId* p_script,
MxS32 p_entityId,
const char* p_key,
undefined2 p_unk0x20,
float p_unk0x24,
undefined2 p_unk0x28,
float p_unk0x2c,
const char* p_path,
MxS16 p_src,
float p_srcScale,
MxS16 p_dest,
float p_destScale,
undefined4 p_unk0x30,
JukeboxScript::Script p_music
)
@@ -35,40 +45,39 @@ public:
m_area = p_area;
m_script = p_script;
m_entityId = p_entityId;
strcpy(m_key, p_key);
m_unk0x20 = p_unk0x20;
m_unk0x24 = p_unk0x24;
m_unk0x28 = p_unk0x28;
m_unk0x2c = p_unk0x2c;
strcpy(m_path, p_path);
m_src = p_src;
m_srcScale = p_srcScale;
m_dest = p_dest;
m_destScale = p_destScale;
m_unk0x30 = p_unk0x30;
m_music = p_music;
}
// FUNCTION: LEGO1 0x1001b230
SpawnLocation& operator=(const SpawnLocation& p_container)
SpawnLocation& operator=(const SpawnLocation& p_location)
{
m_area = p_container.m_area;
m_script = p_container.m_script;
m_entityId = p_container.m_entityId;
strcpy(m_key, p_container.m_key);
m_unk0x20 = p_container.m_unk0x20;
m_unk0x24 = p_container.m_unk0x24;
m_unk0x28 = p_container.m_unk0x28;
m_unk0x2c = p_container.m_unk0x2c;
m_unk0x30 = p_container.m_unk0x30;
m_music = p_container.m_music;
m_area = p_location.m_area;
m_script = p_location.m_script;
m_entityId = p_location.m_entityId;
strcpy(m_path, p_location.m_path);
m_src = p_location.m_src;
m_srcScale = p_location.m_srcScale;
m_dest = p_location.m_dest;
m_destScale = p_location.m_destScale;
m_unk0x30 = p_location.m_unk0x30;
m_music = p_location.m_music;
return *this;
}
private:
LegoGameState::Area m_area; // 0x00
MxAtomId* m_script; // 0x04
MxS32 m_entityId; // 0x08
char m_key[20]; // 0x0c
undefined2 m_unk0x20; // 0x20
float m_unk0x24; // 0x24
undefined2 m_unk0x28; // 0x28
float m_unk0x2c; // 0x2c
char m_path[20]; // 0x0c
MxS16 m_src; // 0x20
float m_srcScale; // 0x24
MxS16 m_dest; // 0x28
float m_destScale; // 0x2c
undefined4 m_unk0x30; // 0x30
JukeboxScript::Script m_music; // 0x34
};
@@ -111,10 +120,10 @@ public:
// FUNCTION: LEGO1 0x10002e00
virtual MxU32 VTable0xdc(MxType19NotificationParam&) { return 0; } // vtable+0xdc
virtual void VTable0xe0(); // vtable+0xe0
virtual void VTable0xe4(); // vtable+0xe4
virtual void VTable0xe8(LegoGameState::Area, MxBool, MxU8); // vtable+0xe8
virtual void VTable0xec(MxMatrix p_transform, LegoPathBoundary* p_boundary, MxBool p_reset);
virtual void VTable0xe0(); // vtable+0xe0
virtual void VTable0xe4(); // vtable+0xe4
virtual void SpawnPlayer(LegoGameState::Area p_area, MxBool p_und, MxU8 p_flags); // vtable+0xe8
virtual void VTable0xec(MxMatrix p_transform, LegoPathBoundary* p_boundary, MxBool p_reset); // vtable+0xec
// SYNTHETIC: LEGO1 0x10002ff0
// IslePathActor::`scalar deleting destructor'

View File

@@ -44,6 +44,14 @@ public:
virtual void VTable0x14(MxU8* p_data, Vector3& p_location, MxAtomId& p_trigger); // vtable+0x14
virtual void Destroy(); // vtable+0x18
MxResult FUN_10045c20(
LegoPathActor* p_actor,
const char* p_path,
MxS32 p_src,
float p_srcScale,
MxS32 p_dest,
float p_destScale
);
undefined4 FUN_10046770(LegoPathActor* p_actor);
void FUN_100468f0(LegoAnimPresenter* p_presenter);
void FUN_10046930(LegoAnimPresenter* p_presenter);

View File

@@ -1,11 +1,13 @@
#ifndef LEGOUTILS_H
#define LEGOUTILS_H
#include "decomp.h"
#include "extra.h"
#include "mxtypes.h"
#include <windows.h>
class IslePathActor;
class MxAtomId;
class LegoEntity;
class LegoFile;
@@ -22,6 +24,7 @@ Extra::ActionType MatchActionString(const char*);
void InvokeAction(Extra::ActionType p_actionId, const MxAtomId& p_pAtom, MxS32 p_targetEntityId, LegoEntity* p_sender);
void SetCameraControllerFromIsle();
void ConvertHSVToRGB(float p_h, float p_s, float p_v, float* p_rOut, float* p_bOut, float* p_gOut);
void FUN_1003ecc0(IslePathActor* p_actor, undefined4, undefined4, MxBool);
void FUN_1003eda0();
MxBool RemoveFromCurrentWorld(const MxAtomId& p_atomId, MxS32 p_id);
void FUN_1003ef00(MxBool);

View File

@@ -28,7 +28,7 @@ public:
// SYNTHETIC: LEGO1 0x100260a0
// LegoVehicleBuildState::`scalar deleting destructor'
private:
// private:
Playlist m_unk0x08[4]; // 0x08
// This can be one of the following:
@@ -44,8 +44,8 @@ private:
// * 6 == exit(ing) build screen
MxU32 m_animationState; // 0x48
undefined m_unk0x4c; // 0x4c
undefined m_unk0x4d; // 0x4d
undefined m_unk0x4e; // 0x4e
MxBool m_unk0x4d; // 0x4d
MxBool m_unk0x4e; // 0x4e
MxU8 m_placedPartCount; // 0x4f
};

View File

@@ -65,6 +65,14 @@ public:
MxBool PresentersPending();
void Remove(MxCore* p_object);
MxResult FUN_1001f720(
IslePathActor* p_actor,
const char* p_path,
MxS32 p_src,
float p_srcScale,
MxS32 p_dest,
float p_destScale
);
undefined4 FUN_1001fa70(IslePathActor* p_actor);
undefined4 FUN_1001fb70(
IslePathActor* p_actor,