Merge remote-tracking branch 'upstream/master' into ghidra-function-import-script

This commit is contained in:
jonschz 2024-05-30 20:35:56 +02:00
commit bdce6575cd
271 changed files with 9260 additions and 1913 deletions

View File

@ -306,12 +306,12 @@ add_library(lego1 SHARED
LEGO1/lego/legoomni/src/actors/radio.cpp
LEGO1/lego/legoomni/src/actors/skateboard.cpp
LEGO1/lego/legoomni/src/actors/towtrack.cpp
LEGO1/lego/legoomni/src/audio/lego3dsound.cpp
LEGO1/lego/legoomni/src/audio/lego3dwavepresenter.cpp
LEGO1/lego/legoomni/src/audio/legocachsound.cpp
LEGO1/lego/legoomni/src/audio/legocachesoundmanager.cpp
LEGO1/lego/legoomni/src/audio/legoloadcachesoundpresenter.cpp
LEGO1/lego/legoomni/src/audio/legosoundmanager.cpp
LEGO1/lego/legoomni/src/audio/legounknown100d5778.cpp
LEGO1/lego/legoomni/src/audio/mxbackgroundaudiomanager.cpp
LEGO1/lego/legoomni/src/build/buildingentity.cpp
LEGO1/lego/legoomni/src/build/helicopterstate.cpp
@ -345,12 +345,12 @@ add_library(lego1 SHARED
LEGO1/lego/legoomni/src/entity/legoactor.cpp
LEGO1/lego/legoomni/src/entity/legoactorpresenter.cpp
LEGO1/lego/legoomni/src/entity/legocameracontroller.cpp
LEGO1/lego/legoomni/src/entity/legocameralocations.cpp
LEGO1/lego/legoomni/src/entity/legocarraceactor.cpp
LEGO1/lego/legoomni/src/entity/legoentity.cpp
LEGO1/lego/legoomni/src/entity/legoentitypresenter.cpp
LEGO1/lego/legoomni/src/entity/legojetski.cpp
LEGO1/lego/legoomni/src/entity/legojetskiraceactor.cpp
LEGO1/lego/legoomni/src/entity/legolocations.cpp
LEGO1/lego/legoomni/src/entity/legonavcontroller.cpp
LEGO1/lego/legoomni/src/entity/legopovcontroller.cpp
LEGO1/lego/legoomni/src/entity/legoworld.cpp
@ -376,6 +376,7 @@ add_library(lego1 SHARED
LEGO1/lego/legoomni/src/paths/legopathboundary.cpp
LEGO1/lego/legoomni/src/paths/legopathcontroller.cpp
LEGO1/lego/legoomni/src/paths/legopathpresenter.cpp
LEGO1/lego/legoomni/src/paths/legopathstruct.cpp
LEGO1/lego/legoomni/src/pizzeria/pizzamissionstate.cpp
LEGO1/lego/legoomni/src/pizzeria/pizzeriastate.cpp
LEGO1/lego/legoomni/src/police/policeentity.cpp

View File

@ -177,7 +177,7 @@ void CMainDialog::UpdateInterface()
CheckDlgButton(IDC_CHK_FLIP_VIDEO_MEM_PAGES, currentConfigApp->m_flip_surfaces);
CheckDlgButton(IDC_CHK_3D_VIDEO_MEMORY, currentConfigApp->m_3d_video_ram);
BOOL full_screen = currentConfigApp->m_full_screen;
currentConfigApp->FUN_00403810();
currentConfigApp->AdjustDisplayBitDepthBasedOnRenderStatus();
if (currentConfigApp->GetHardwareDeviceColorModel()) {
CheckDlgButton(IDC_CHK_DRAW_CURSOR, TRUE);
}
@ -198,8 +198,9 @@ void CMainDialog::UpdateInterface()
CheckDlgButton(IDC_RAD_PALETTE_16BIT, 0);
currentConfigApp->m_display_bit_depth = 0;
}
GetDlgItem(IDC_RAD_PALETTE_256)->EnableWindow(full_screen && currentConfigApp->FUN_004037a0());
GetDlgItem(IDC_RAD_PALETTE_16BIT)->EnableWindow(full_screen && currentConfigApp->FUN_004037e0());
GetDlgItem(IDC_RAD_PALETTE_256)
->EnableWindow(full_screen && currentConfigApp->GetConditionalDeviceRenderBitDepth());
GetDlgItem(IDC_RAD_PALETTE_16BIT)->EnableWindow(full_screen && currentConfigApp->GetDeviceRenderBitStatus());
CheckDlgButton(IDC_CHK_3DSOUND, currentConfigApp->m_3d_sound);
CheckDlgButton(IDC_CHK_DRAW_CURSOR, currentConfigApp->m_draw_cursor);
switch (currentConfigApp->m_model_quality) {

View File

@ -198,7 +198,7 @@ BOOL CConfigApp::ReadRegInt(LPCSTR p_key, int* p_value) const
}
// FUNCTION: CONFIG 0x004033d0
BOOL CConfigApp::FUN_004033d0() const
BOOL CConfigApp::IsDeviceInBasicRGBMode() const
{
/*
* BUG: should be:
@ -286,7 +286,7 @@ BOOL CConfigApp::ValidateSettings()
m_full_screen = TRUE;
is_modified = TRUE;
}
if (FUN_004033d0()) {
if (IsDeviceInBasicRGBMode()) {
if (m_3d_video_ram) {
m_3d_video_ram = FALSE;
is_modified = TRUE;
@ -340,9 +340,9 @@ BOOL CConfigApp::ValidateSettings()
}
// FUNCTION: CONFIG 0x004037a0
DWORD CConfigApp::FUN_004037a0() const
DWORD CConfigApp::GetConditionalDeviceRenderBitDepth() const
{
if (FUN_004033d0()) {
if (IsDeviceInBasicRGBMode()) {
return 0;
}
if (GetHardwareDeviceColorModel()) {
@ -352,7 +352,7 @@ DWORD CConfigApp::FUN_004037a0() const
}
// FUNCTION: CONFIG 0x004037e0
DWORD CConfigApp::FUN_004037e0() const
DWORD CConfigApp::GetDeviceRenderBitStatus() const
{
if (GetHardwareDeviceColorModel()) {
return m_device->m_HWDesc.dwDeviceRenderBitDepth & 0x400;
@ -363,23 +363,23 @@ DWORD CConfigApp::FUN_004037e0() const
}
// FUNCTION: CONFIG 0x00403810
BOOL CConfigApp::FUN_00403810()
BOOL CConfigApp::AdjustDisplayBitDepthBasedOnRenderStatus()
{
if (m_display_bit_depth == 8) {
if (FUN_004037a0()) {
if (GetConditionalDeviceRenderBitDepth()) {
return FALSE;
}
}
if (m_display_bit_depth == 16) {
if (FUN_004037e0()) {
if (GetDeviceRenderBitStatus()) {
return FALSE;
}
}
if (FUN_004037a0()) {
if (GetConditionalDeviceRenderBitDepth()) {
m_display_bit_depth = 8;
return TRUE;
}
if (FUN_004037e0()) {
if (GetDeviceRenderBitStatus()) {
m_display_bit_depth = 16;
return TRUE;
}

View File

@ -34,14 +34,14 @@ class CConfigApp : public CWinApp {
BOOL ReadReg(LPCSTR p_key, LPCSTR p_value, DWORD p_size) const;
BOOL ReadRegBool(LPCSTR p_key, BOOL* p_bool) const;
BOOL ReadRegInt(LPCSTR p_key, int* p_value) const;
BOOL FUN_004033d0() const;
BOOL IsDeviceInBasicRGBMode() const;
D3DCOLORMODEL GetHardwareDeviceColorModel() const;
BOOL IsPrimaryDriver() const;
BOOL ReadRegisterSettings();
BOOL ValidateSettings();
DWORD FUN_004037a0() const;
DWORD FUN_004037e0() const;
BOOL FUN_00403810();
DWORD GetConditionalDeviceRenderBitDepth() const;
DWORD GetDeviceRenderBitStatus() const;
BOOL AdjustDisplayBitDepthBasedOnRenderStatus();
void CConfigApp::WriteRegisterSettings() const;
//{{AFX_MSG(CConfigApp)

View File

@ -12,6 +12,42 @@ const char* g_strANIMATION = "ANIMATION";
// STRING: LEGO1 0x10102024
const char* g_strATTACH_CAMERA = "ATTACH_CAMERA";
// GLOBAL: LEGO1 0x10102054
// STRING: LEGO1 0x10102018
const char* g_strAUTO_CREATE = "AUTO_CREATE";
// GLOBAL: LEGO1 0x1010205c
// STRING: LEGO1 0x10102000
const char* g_strBOTTOM_TO_TOP = "BOTTOM_TO_TOP";
// GLOBAL: LEGO1 0x10102060
// STRING: LEGO1 0x10101ff4
const char* g_strCOLLIDEBOX = "COLLIDEBOX";
// GLOBAL: LEGO1 0x10102064
// STRING: LEGO1 0x10101fec
const char* g_strSTYLE = "STYLE";
// GLOBAL: LEGO1 0x10102068
// STRING: LEGO1 0x10101fe4
const char* g_strGRID = "GRID";
// GLOBAL: LEGO1 0x1010206c
// STRING: LEGO1 0x10101fe0
const char* g_strMAP = "MAP";
// GLOBAL: LEGO1 0x10102074
// STRING: LEGO1 0x10101fd0
const char* g_strTOGGLE = "TOGGLE";
// GLOBAL: LEGO1 0x10102078
// STRING: LEGO1 0x10101fc4
const char* g_strDB_CREATE = "DB_CREATE";
// GLOBAL: LEGO1 0x1010207c
// STRING: LEGO1 0x10101fb4
const char* g_strFILLER_INDEX = "FILLER_INDEX";
// GLOBAL: LEGO1 0x10102080
// STRING: LEGO1 0x100f4368
const char* g_strFROM_PARENT = "FROM_PARENT";
@ -20,6 +56,14 @@ const char* g_strFROM_PARENT = "FROM_PARENT";
// STRING: LEGO1 0x10101fa4
const char* g_strHIDE_ON_STOP = "HIDE_ON_STOP";
// GLOBAL: LEGO1 0x10102088
// STRING: LEGO1 0x10101f94
const char* g_strLEFT_TO_RIGHT = "LEFT_TO_RIGHT";
// GLOBAL: LEGO1 0x10102094
// STRING: LEGO1 0x10101f70
const char* g_strTYPE = "TYPE";
// GLOBAL: LEGO1 0x10102098
// STRING: LEGO1 0x10101f60
const char* g_strMUST_SUCCEED = "MUST_SUCCEED";
@ -28,10 +72,22 @@ const char* g_strMUST_SUCCEED = "MUST_SUCCEED";
// STRING: LEGO1 0x10101f58
const char* g_strOBJECT = "OBJECT";
// GLOBAL: LEGO1 0x101020a0
// STRING: LEGO1 0x10101f50
const char* g_strPATH = "PATH";
// GLOBAL: LEGO1 0x101020a4
// STRING: LEGO1 0x10101f40
const char* g_strPERMIT_NAVIGATE = "PERMIT_NAVIGATE";
// GLOBAL: LEGO1 0x101020a8
// STRING: LEGO1 0x10101f38
const char* g_strPTATCAM = "PTATCAM";
// GLOBAL: LEGO1 0x101020ac
// STRING: LEGO1 0x10101f28
const char* g_strRIGHT_TO_LEFT = "RIGHT_TO_LEFT";
// GLOBAL: LEGO1 0x101020b0
// STRING: LEGO1 0x10101f20
const char* g_strSOUND = "SOUND";
@ -48,6 +104,18 @@ const char* g_strSPEED = "SPEED";
// STRING: LEGO1 0x10101f10
const char* g_strSUBST = "SUBST";
// GLOBAL: LEGO1 0x101020c0
// STRING: LEGO1 0x10101f00
const char* g_strTOP_TO_BOTTOM = "TOP_TO_BOTTOM";
// GLOBAL: LEGO1 0x101020c4
// STRING: LEGO1 0x10101ef0
const char* g_strTRIGGERS_SOURCE = "TRIGGERS_SOURCE";
// GLOBAL: LEGO1 0x101020c8
// STRING: LEGO1 0x10101ee4
const char* g_strVARIABLE = "VARIABLE";
// GLOBAL: LEGO1 0x101020cc
// STRING: LEGO1 0x100f3808
const char* g_strVISIBILITY = "VISIBILITY";
@ -60,6 +128,10 @@ const char* g_strWORLD = "WORLD";
// STRING: LEGO1 0x10101ed0
const char* g_strANIMMAN_ID = "ANIMMAN_ID";
// GLOBAL: LEGO1 0x101020e0
// STRING: LEGO1 0x10101eb0
const char* g_strBMP_ISMAP = "BMP_ISMAP";
// GLOBAL: LEGO1 0x101020e4
// STRING: LEGO1 0x10101eac
const char* g_parseExtraTokens = ":;";

View File

@ -18,6 +18,24 @@ extern const char* g_strFROM_PARENT;
extern const char* g_strHIDE_ON_STOP;
extern const char* g_strMUST_SUCCEED;
extern const char* g_strSUBST;
extern const char* g_strTRIGGERS_SOURCE;
extern const char* g_strPTATCAM;
extern const char* g_strTOGGLE;
extern const char* g_strMAP;
extern const char* g_strGRID;
extern const char* g_strSTYLE;
extern const char* g_strTYPE;
extern const char* g_strLEFT_TO_RIGHT;
extern const char* g_strRIGHT_TO_LEFT;
extern const char* g_strBOTTOM_TO_TOP;
extern const char* g_strTOP_TO_BOTTOM;
extern const char* g_strFILLER_INDEX;
extern const char* g_strVARIABLE;
extern const char* g_strBMP_ISMAP;
extern const char* g_strAUTO_CREATE;
extern const char* g_strDB_CREATE;
extern const char* g_strPERMIT_NAVIGATE;
extern const char* g_strPATH;
extern const char* g_strCOLLIDEBOX;
#endif // DEFINE_H

View File

@ -15,7 +15,7 @@ class Act2Actor : public LegoAnimActor {
MxS32 VTable0x68(Vector3&, Vector3&, Vector3&) override; // vtable+0x68
void VTable0x70(float p_und) override; // vtable+0x70
MxResult VTable0x94(LegoPathActor*, MxBool) override; // vtable+0x94
MxResult WaitForAnimation() override; // vtable+0x9c
MxResult VTable0x9c() override; // vtable+0x9c
MxS32 VTable0xa0() override; // vtable+0xa0
// SYNTHETIC: LEGO1 0x1001a0a0

View File

@ -32,7 +32,7 @@ class Act3 : public LegoWorld {
void ReadyWorld() override; // vtable+0x50
MxBool VTable0x5c() override; // vtable+0x5c
void VTable0x60() override; // vtable+0x60
MxBool VTable0x64() override; // vtable+0x64
MxBool Escape() override; // vtable+0x64
void Enable(MxBool p_enable) override; // vtable+0x68
inline void SetUnknown420c(MxEntity* p_entity) { m_unk0x420c = p_entity; }

View File

@ -28,16 +28,19 @@ class Ambulance : public IslePathActor {
return !strcmp(p_name, Ambulance::ClassName()) || IslePathActor::IsA(p_name);
}
MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
void Destroy(MxBool p_fromDestructor) override; // vtable+0x1c
void VTable0x70(float p_float) override; // vtable+0x70
MxU32 VTable0xcc() override; // vtable+0xcc
MxU32 VTable0xd4(LegoControlManagerEvent& p_param) override; // vtable+0xd4
MxU32 VTable0xdc(MxType19NotificationParam&) override; // vtable+0xdc
void VTable0xe4() override; // vtable+0xe4
MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
void Destroy(MxBool p_fromDestructor) override; // vtable+0x1c
void VTable0x70(float p_float) override; // vtable+0x70
MxU32 HandleClick() override; // vtable+0xcc
MxU32 HandleControl(LegoControlManagerEvent& p_param) override; // vtable+0xd4
MxU32 VTable0xdc(MxType19NotificationParam&) override; // vtable+0xdc
void VTable0xe4() override; // vtable+0xe4
void CreateState();
void FUN_10036e60();
void FUN_10037060();
void FUN_10037240();
void FUN_10037250();
// SYNTHETIC: LEGO1 0x10036130
// Ambulance::`scalar deleting destructor'

View File

@ -24,8 +24,6 @@ class AmbulanceMissionState : public LegoState {
MxResult Serialize(LegoFile* p_legoFile) override; // vtable+0x1c
inline void SetUnknown0x08(undefined4 p_unk0x08) { m_unk0x08 = p_unk0x08; }
inline MxU16 GetScore(MxU8 p_id)
{
switch (p_id) {
@ -47,7 +45,6 @@ class AmbulanceMissionState : public LegoState {
// SYNTHETIC: LEGO1 0x100376c0
// AmbulanceMissionState::`scalar deleting destructor'
protected:
undefined4 m_unk0x08; // 0x08
undefined4 m_unk0x0c; // 0x0c
MxU16 m_unk0x10; // 0x10

View File

@ -5,7 +5,7 @@
// SIZE 0x30
struct ModelInfo {
char* m_modelName; // 0x00
char* m_name; // 0x00
MxU8 m_unk0x04; // 0x04
float m_location[3]; // 0x08
float m_direction[3]; // 0x14
@ -15,18 +15,18 @@ struct ModelInfo {
// SIZE 0x30
struct AnimInfo {
char* m_animName; // 0x00
char* m_name; // 0x00
MxU32 m_objectId; // 0x04
MxS16 m_unk0x08; // 0x08
MxS16 m_location; // 0x08
MxBool m_unk0x0a; // 0x0a
MxU8 m_unk0x0b; // 0x0b
MxU8 m_unk0x0c; // 0x0c
MxU8 m_unk0x0d; // 0x0d
MxU32 m_unk0x10[4]; // 0x10
float m_unk0x10[4]; // 0x10
MxU8 m_modelCount; // 0x20
MxS16 m_unk0x22; // 0x22
MxU16 m_unk0x22; // 0x22
ModelInfo* m_models; // 0x24
MxU8 m_unk0x28; // 0x28
MxS8 m_unk0x28; // 0x28
MxBool m_unk0x29; // 0x29
MxS8 m_unk0x2a[3]; // 0x2a
};

View File

@ -23,10 +23,10 @@ class Bike : public IslePathActor {
return !strcmp(p_name, Bike::ClassName()) || IslePathActor::IsA(p_name);
}
MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
MxU32 VTable0xcc() override; // vtable+0xcc
MxU32 VTable0xd4(LegoControlManagerEvent& p_param) override; // vtable+0xd4
void VTable0xe4() override; // vtable+0xe4
MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
MxU32 HandleClick() override; // vtable+0xcc
MxU32 HandleControl(LegoControlManagerEvent& p_param) override; // vtable+0xd4
void VTable0xe4() override; // vtable+0xe4
void FUN_10076b60();

View File

@ -25,7 +25,7 @@ class CarRace : public LegoRace {
MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
void ReadyWorld() override; // vtable+0x50
MxBool VTable0x64() override; // vtable+0x64
MxBool Escape() override; // vtable+0x64
undefined4 VTable0x6c(undefined4) override; // vtable+0x6c
undefined4 VTable0x70(undefined4) override; // vtable+0x70
undefined4 VTable0x74(undefined4) override; // vtable+0x74

View File

@ -23,12 +23,12 @@ class DuneBuggy : public IslePathActor {
return !strcmp(p_name, DuneBuggy::ClassName()) || IslePathActor::IsA(p_name);
}
MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
void VTable0x70(float p_float) override; // vtable+0x70
MxU32 VTable0xcc() override; // vtable+0xcc
MxU32 VTable0xd4(LegoControlManagerEvent& p_param) override; // vtable+0xd4
MxU32 VTable0xdc(MxType19NotificationParam& p_param) override; // vtable+0xdc
void VTable0xe4() override; // vtable+0xe4
MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
void VTable0x70(float p_float) override; // vtable+0x70
MxU32 HandleClick() override; // vtable+0xcc
MxU32 HandleControl(LegoControlManagerEvent& p_param) override; // vtable+0xd4
MxU32 VTable0xdc(MxType19NotificationParam& p_param) override; // vtable+0xdc
void VTable0xe4() override; // vtable+0xe4
void FUN_10068350();

View File

@ -35,7 +35,7 @@ class ElevatorBottom : public LegoWorld {
// FUNCTION: LEGO1 0x10017f10
MxBool VTable0x5c() override { return TRUE; } // vtable+0x5c
MxBool VTable0x64() override; // vtable+0x64
MxBool Escape() override; // vtable+0x64
void Enable(MxBool p_enable) override; // vtable+0x68
// SYNTHETIC: LEGO1 0x10018040
@ -44,7 +44,7 @@ class ElevatorBottom : public LegoWorld {
private:
LegoGameState::Area m_destLocation; // 0xf8
MxLong HandleClick(LegoControlManagerEvent& p_param);
MxLong HandleControl(LegoControlManagerEvent& p_param);
};
#endif // ELEVATORBOTTOM_H

View File

@ -32,12 +32,12 @@ class GasStation : public LegoWorld {
return !strcmp(p_name, GasStation::ClassName()) || LegoWorld::IsA(p_name);
}
MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
void ReadyWorld() override; // vtable+0x50
MxBool VTable0x5c() override; // vtable+0x5c
MxBool VTable0x64() override; // vtable+0x64
void Enable(MxBool p_enable) override; // vtable+0x68
virtual MxLong HandleClick(LegoControlManagerEvent& p_param); // vtable+0x6c
MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
void ReadyWorld() override; // vtable+0x50
MxBool VTable0x5c() override; // vtable+0x5c
MxBool Escape() override; // vtable+0x64
void Enable(MxBool p_enable) override; // vtable+0x68
virtual MxLong HandleControl(LegoControlManagerEvent& p_param); // vtable+0x6c
inline void PlayAction(MxU32 p_objectId);

View File

@ -29,14 +29,16 @@ class Helicopter : public IslePathActor {
MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
void VTable0x70(float p_float) override; // vtable+0x70
void VTable0x74(Matrix4& p_transform) override; // vtable+0x74
MxU32 VTable0xcc() override; // vtable+0xcc
MxU32 VTable0xd4(LegoControlManagerEvent& p_param) override; // vtable+0xd4
MxU32 HandleClick() override; // vtable+0xcc
MxU32 HandleControl(LegoControlManagerEvent& p_param) override; // vtable+0xd4
MxU32 VTable0xd8(LegoEndAnimNotificationParam& p_param) override; // vtable+0xd8
void VTable0xe4() override; // vtable+0xe4
// SYNTHETIC: LEGO1 0x10003210
// Helicopter::`scalar deleting destructor'
void CreateState();
protected:
MxMatrix m_unk0x160; // 0x160
MxMatrix m_unk0x1a8; // 0x1a8
@ -44,9 +46,6 @@ class Helicopter : public IslePathActor {
UnknownMx4DPointFloat m_unk0x1f4; // 0x1f4
HelicopterState* m_state; // 0x228
MxAtomId m_script; // 0x22c
private:
void GetState();
};
#endif // HELICOPTER_H

View File

@ -31,7 +31,7 @@ class HistoryBook : public LegoWorld {
MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
void ReadyWorld() override; // vtable+0x50
MxBool VTable0x64() override; // vtable+0x64
MxBool Escape() override; // vtable+0x64
// SYNTHETIC: LEGO1 0x100824b0
// HistoryBook::`scalar deleting destructor'

View File

@ -37,7 +37,7 @@ class Hospital : public LegoWorld {
MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
void ReadyWorld() override; // vtable+0x50
MxBool VTable0x5c() override; // vtable+0x5c
MxBool VTable0x64() override; // vtable+0x64
MxBool Escape() override; // vtable+0x64
void Enable(MxBool p_enable) override; // vtable+0x68
inline void PlayAction(MxU32 p_objectId);
@ -49,7 +49,7 @@ class Hospital : public LegoWorld {
MxLong HandleKeyPress(MxS8 p_key);
MxLong HandleEndAction(MxEndActionNotificationParam& p_param);
MxLong HandleButtonDown(LegoControlManagerEvent& p_param);
MxBool HandleClick(LegoControlManagerEvent& p_param);
MxBool HandleControl(LegoControlManagerEvent& p_param);
MxS16 m_currentActorId; // 0xf8
LegoGameState::Area m_destLocation; // 0xfc

View File

@ -67,7 +67,7 @@ class Infocenter : public LegoWorld {
MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
void ReadyWorld() override; // vtable+0x50
MxBool VTable0x5c() override; // vtable+0x5c
MxBool VTable0x64() override; // vtable+0x64
MxBool Escape() override; // vtable+0x64
void Enable(MxBool p_enable) override; // vtable+0x68
// SYNTHETIC: LEGO1 0x1006ec60
@ -79,7 +79,7 @@ class Infocenter : public LegoWorld {
MxLong HandleKeyPress(MxS8 p_key);
MxU8 HandleMouseMove(MxS32 p_x, MxS32 p_y);
MxU8 HandleButtonUp(MxS32 p_x, MxS32 p_y);
MxU8 HandleClick(LegoControlManagerEvent& p_param);
MxU8 HandleControl(LegoControlManagerEvent& p_param);
MxLong HandleEndAction(MxEndActionNotificationParam& p_param);
MxLong HandleNotification0(MxNotificationParam& p_param);

View File

@ -34,7 +34,7 @@ class InfocenterDoor : public LegoWorld {
// FUNCTION: LEGO1 0x100377a0
MxBool VTable0x5c() override { return TRUE; } // vtable+0x5c
MxBool VTable0x64() override; // vtable+0x64
MxBool Escape() override; // vtable+0x64
void Enable(MxBool p_enable) override; // vtable+0x68
// SYNTHETIC: LEGO1 0x100378d0
@ -43,7 +43,7 @@ class InfocenterDoor : public LegoWorld {
private:
LegoGameState::Area m_destLocation; // 0xf8
MxLong HandleClick(LegoControlManagerEvent& p_param);
MxLong HandleControl(LegoControlManagerEvent& p_param);
};
#endif // INFOCENTERDOOR_H

View File

@ -30,7 +30,7 @@ class InfocenterState : public LegoState {
// FUNCTION: LEGO1 0x10071830
MxBool IsSerializable() override { return FALSE; } // vtable+0x14
inline MxS16 GetMaxNameLength() { return _countof(m_letters); }
inline MxS16 GetMaxNameLength() { return sizeOfArray(m_letters); }
inline MxStillPresenter* GetNameLetter(MxS32 p_index) { return m_letters[p_index]; }
inline void SetNameLetter(MxS32 p_index, MxStillPresenter* p_letter) { m_letters[p_index] = p_letter; }
inline MxBool HasRegistered() { return m_letters[0] != NULL; }

View File

@ -6,27 +6,28 @@
#include "legoworld.h"
#include "radio.h"
class Pizza;
class Pizzeria;
class TowTrack;
class Act1State;
class Ambulance;
class JukeBoxEntity;
class Helicopter;
class Bike;
class DuneBuggy;
class Motocycle;
class SkateBoard;
class RaceCar;
class Helicopter;
class Jetski;
class Act1State;
class JukeBoxEntity;
class Motocycle;
class MxType19NotificationParam;
class Pizza;
class Pizzeria;
class RaceCar;
class SkateBoard;
class TowTrack;
// VTABLE: LEGO1 0x100d6fb8
// SIZE 0x140
class Isle : public LegoWorld {
public:
// For g_unk0x100f1198
enum {
c_bit7 = 0x40
c_playCamAnims = 0x20,
c_playMusic = 0x40
};
Isle();
@ -57,19 +58,26 @@ class Isle : public LegoWorld {
// FUNCTION: LEGO1 0x10033170
void VTable0x60() override {} // vtable+60
MxBool VTable0x64() override; // vtable+64
MxBool Escape() override; // vtable+64
void Enable(MxBool p_enable) override; // vtable+68
virtual void VTable0x6c(IslePathActor* p_actor); // vtable+6c
virtual void VTable0x6c(LegoPathActor* p_actor); // vtable+6c
inline void SetDestLocation(LegoGameState::Area p_destLocation) { m_destLocation = p_destLocation; }
void FUN_10033350();
// SYNTHETIC: LEGO1 0x10030a30
// Isle::`scalar deleting destructor'
protected:
MxLong HandleEndAction(MxEndActionNotificationParam& p_param);
MxLong HandleClick(LegoControlManagerEvent& p_param);
MxLong HandleType19Notification(MxParam& p_param);
MxLong HandleControl(LegoControlManagerEvent& p_param);
MxLong HandleType19Notification(MxType19NotificationParam& p_param);
MxLong HandleTransitionEnd();
void HandleElevatorEndAction();
void FUN_10031590();
void UpdateGlobe();
void FUN_10032620();
void FUN_100330e0();
void FUN_10033350();
void CreateState();
void FUN_10032d30(
IsleScript::Script p_script,
JukeboxScript::Script p_music,
@ -77,12 +85,6 @@ class Isle : public LegoWorld {
MxBool p_und
);
inline void SetDestLocation(LegoGameState::Area p_destLocation) { m_destLocation = p_destLocation; }
// SYNTHETIC: LEGO1 0x10030a30
// Isle::`scalar deleting destructor'
protected:
Act1State* m_act1state; // 0xf8
Pizza* m_pizza; // 0xfc
Pizzeria* m_pizzeria; // 0x100

View File

@ -29,7 +29,7 @@ class IsleActor : public LegoActor {
MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
// FUNCTION: LEGO1 0x1000e5f0
virtual undefined4 VTable0x68() { return 0; } // vtable+0x68
virtual undefined4 HandleClick() { return 0; } // vtable+0x68
// FUNCTION: LEGO1 0x1000e600
virtual undefined4 VTable0x6c() { return 0; } // vtable+0x6c
@ -49,7 +49,7 @@ class IsleActor : public LegoActor {
// FUNCTION: LEGO1 0x1000e650
virtual undefined4 VTable0x80(MxParam&) { return 0; } // vtable+0x80
private:
protected:
LegoWorld* m_world; // 0x78
};

View File

@ -33,24 +33,24 @@ class IslePathActor : public LegoPathActor {
LegoGameState::Area p_area,
MxAtomId* p_script,
MxS32 p_entityId,
const char* p_path,
const char* p_name,
MxS16 p_src,
float p_srcScale,
MxS16 p_dest,
float p_destScale,
undefined4 p_unk0x30,
MxU32 p_location,
JukeboxScript::Script p_music
)
{
m_area = p_area;
m_script = p_script;
m_entityId = p_entityId;
strcpy(m_path, p_path);
strcpy(m_name, p_name);
m_src = p_src;
m_srcScale = p_srcScale;
m_dest = p_dest;
m_destScale = p_destScale;
m_unk0x30 = p_unk0x30;
m_location = p_location;
m_music = p_music;
}
@ -60,12 +60,12 @@ class IslePathActor : public LegoPathActor {
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);
strcpy(m_name, p_location.m_name);
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_location = p_location.m_location;
m_music = p_location.m_music;
return *this;
}
@ -73,12 +73,12 @@ class IslePathActor : public LegoPathActor {
LegoGameState::Area m_area; // 0x00
MxAtomId* m_script; // 0x04
MxS32 m_entityId; // 0x08
char m_path[20]; // 0x0c
char m_name[20]; // 0x0c
MxS16 m_src; // 0x20
float m_srcScale; // 0x24
MxS16 m_dest; // 0x28
float m_destScale; // 0x2c
undefined4 m_unk0x30; // 0x30
MxU32 m_location; // 0x30
JukeboxScript::Script m_music; // 0x34
};
@ -106,13 +106,13 @@ class IslePathActor : public LegoPathActor {
void Destroy(MxBool p_fromDestructor) override; // vtable+0x1c
// FUNCTION: LEGO1 0x10002e70
virtual MxU32 VTable0xcc() { return 0; } // vtable+0xcc
virtual MxU32 HandleClick() { return 0; } // vtable+0xcc
// FUNCTION: LEGO1 0x10002df0
virtual MxU32 VTable0xd0() { return 0; } // vtable+0xd0
// FUNCTION: LEGO1 0x10002e80
virtual MxU32 VTable0xd4(LegoControlManagerEvent&) { return 0; } // vtable+0xd4
virtual MxU32 HandleControl(LegoControlManagerEvent&) { return 0; } // vtable+0xd4
// FUNCTION: LEGO1 0x10002e90
virtual MxU32 VTable0xd8(LegoEndAnimNotificationParam&) { return 0; } // vtable+0xd8
@ -128,16 +128,13 @@ class IslePathActor : public LegoPathActor {
// SYNTHETIC: LEGO1 0x10002ff0
// IslePathActor::`scalar deleting destructor'
inline void SetWorld(LegoWorld* p_world) { m_world = p_world; }
inline LegoWorld* GetWorld() { return m_world; }
void FUN_1001b660();
static void RegisterSpawnLocations();
protected:
LegoWorld* m_world; // 0x154
IslePathActor* m_unk0x158; // 0x158
LegoPathActor* m_unk0x158; // 0x158
MxFloat m_unk0x15c; // 0x15c
};

View File

@ -25,11 +25,11 @@ class Jetski : public IslePathActor {
return !strcmp(p_name, Jetski::ClassName()) || IslePathActor::IsA(p_name);
}
MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
void VTable0x70(float p_float) override; // vtable+0x70
MxU32 VTable0xcc() override; // vtable+0xcc
MxU32 VTable0xd4(LegoControlManagerEvent&) override; // vtable+0xd4
void VTable0xe4() override; // vtable+0xe4
MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
void VTable0x70(float p_float) override; // vtable+0x70
MxU32 HandleClick() override; // vtable+0xcc
MxU32 HandleControl(LegoControlManagerEvent&) override; // vtable+0xd4
void VTable0xe4() override; // vtable+0xe4
void FUN_1007e990();

View File

@ -7,13 +7,20 @@
// SIZE 0x144
class JetskiRace : public LegoRace {
public:
// FUNCTION: LEGO1 0x1000daf0
inline const char* ClassName() const override // vtable+0x0c
// FUNCTION: BETA10 0x100a8840
static const char* HandlerClassName()
{
// STRING: LEGO1 0x100f0530
return "JetskiRace";
}
// FUNCTION: LEGO1 0x1000daf0
// FUNCTION: BETA10 0x100a8810
inline const char* ClassName() const override // vtable+0x0c
{
return HandlerClassName();
}
// FUNCTION: LEGO1 0x1000db00
inline MxBool IsA(const char* p_name) const override // vtable+0x10
{
@ -22,7 +29,7 @@ class JetskiRace : public LegoRace {
MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
void ReadyWorld() override; // vtable+0x50
MxBool VTable0x64() override; // vtable+0x64
MxBool Escape() override; // vtable+0x64
undefined4 VTable0x6c(undefined4) override; // vtable+0x6c
undefined4 VTable0x70(undefined4) override; // vtable+0x70
undefined4 VTable0x74(undefined4) override; // vtable+0x74

View File

@ -34,14 +34,14 @@ class JukeBox : public LegoWorld {
MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
void ReadyWorld() override; // vtable+0x50
MxBool VTable0x5c() override; // vtable+0x5c
MxBool VTable0x64() override; // vtable+0x64
MxBool Escape() override; // vtable+0x64
void Enable(MxBool p_enable) override; // vtable+0x68
// SYNTHETIC: LEGO1 0x1005d810
// JukeBox::`scalar deleting destructor'
private:
MxBool HandleClick(LegoControlManagerEvent& p_param);
MxBool HandleControl(LegoControlManagerEvent& p_param);
LegoGameState::Area m_destLocation; // 0xf8
JukeBoxState* m_state; // 0xfc

View File

@ -30,7 +30,7 @@ class JukeBoxState : public LegoState {
// SYNTHETIC: LEGO1 0x1000f3d0
// JukeBoxState::`scalar deleting destructor'
protected:
// protected:
MxU32 m_state; // 0x08
MxU32 m_active; // 0x0c
};

View File

@ -1,5 +1,5 @@
#ifndef LEGOUNKNOWN100D5778_H
#define LEGOUNKNOWN100D5778_H
#ifndef LEGO3DSOUND_H
#define LEGO3DSOUND_H
#include "decomp.h"
#include "mxtypes.h"
@ -10,19 +10,20 @@ class LegoROI;
// VTABLE: LEGO1 0x100d5778
// SIZE 0x30
class LegoUnknown100d5778 {
class Lego3DSound {
public:
LegoUnknown100d5778();
virtual ~LegoUnknown100d5778();
Lego3DSound();
virtual ~Lego3DSound();
void Init();
MxResult FUN_100116a0(LPDIRECTSOUND p_dsound, undefined4, undefined4 p_unk0x2c);
MxResult Create(LPDIRECTSOUNDBUFFER p_directSoundBuffer, const char*, MxS32 p_volume);
void Destroy();
undefined4 FUN_100118e0(LPDIRECTSOUNDBUFFER p_dsBuffer);
undefined4 FUN_100118e0(LPDIRECTSOUNDBUFFER p_directSoundBuffer);
void FUN_10011ca0();
MxS32 FUN_10011cf0(undefined4, undefined4);
// SYNTHETIC: LEGO1 0x10011650
// LegoUnknown100d5778::`scalar deleting destructor'
// Lego3DSound::`scalar deleting destructor'
private:
undefined m_unk0x04[4]; // 0x04
@ -33,7 +34,7 @@ class LegoUnknown100d5778 {
MxBool m_unk0x15; // 0x15
undefined4 m_unk0x18; // 0x18
undefined m_unk0x1c[0x10]; // 0x1c
undefined4 m_unk0x2c; // 0x2c
MxS32 m_volume; // 0x2c
};
#endif // LEGOUNKNOWN100D5778_H
#endif // LEGO3DSOUND_H

View File

@ -2,20 +2,27 @@
#define LEGO3DWAVEPRESENTER_H
#include "decomp.h"
#include "legounknown100d5778.h"
#include "lego3dsound.h"
#include "mxwavepresenter.h"
// VTABLE: LEGO1 0x100d52b0
// SIZE 0xa0
class Lego3DWavePresenter : public MxWavePresenter {
public:
// FUNCTION: LEGO1 0x1000d890
inline const char* ClassName() const override // vtable+0x0c
// FUNCTION: BETA10 0x100a8670
static const char* HandlerClassName()
{
// STRING: LEGO1 0x100f058c
return "Lego3DWavePresenter";
}
// FUNCTION: LEGO1 0x1000d890
// FUNCTION: BETA10 0x100a8640
inline const char* ClassName() const override // vtable+0x0c
{
return HandlerClassName();
}
// FUNCTION: LEGO1 0x1000d8a0
inline MxBool IsA(const char* p_name) const override // vtable+0x10
{
@ -31,8 +38,8 @@ class Lego3DWavePresenter : public MxWavePresenter {
// Lego3DWavePresenter::`scalar deleting destructor'
private:
undefined m_unk0x6c[4]; // 0x6c
LegoUnknown100d5778 m_unk0x70; // 0x70
undefined m_unk0x6c[4]; // 0x6c
Lego3DSound m_sound; // 0x70
};
#endif // LEGO3DWAVEPRESENTER_H

View File

@ -14,7 +14,7 @@ class LegoAct2 : public LegoWorld {
void ReadyWorld() override; // vtable+0x50
MxBool VTable0x5c() override; // vtable+0x5c
void VTable0x60() override; // vtable+0x60
MxBool VTable0x64() override; // vtable+0x64
MxBool Escape() override; // vtable+0x64
void Enable(MxBool p_enable) override; // vtable+0x68
inline void SetUnknown0x1150(undefined4 p_unk0x1150) { m_unk0x1150 = p_unk0x1150; }

View File

@ -13,13 +13,20 @@ class LegoActionControlPresenter : public MxMediaPresenter {
LegoActionControlPresenter() { m_unk0x50 = Extra::ActionType::e_none; }
~LegoActionControlPresenter() override { Destroy(TRUE); } // vtable+0x00
// FUNCTION: LEGO1 0x1000d0e0
inline const char* ClassName() const override // vtable+0x0c
// FUNCTION: BETA10 0x100a7840
static const char* HandlerClassName()
{
// STRING: LEGO1 0x100f05bc
return "LegoActionControlPresenter";
}
// FUNCTION: LEGO1 0x1000d0e0
// FUNCTION: BETA10 0x100a7810
inline const char* ClassName() const override // vtable+0x0c
{
return HandlerClassName();
}
// FUNCTION: LEGO1 0x1000d0f0
inline MxBool IsA(const char* p_name) const override // vtable+0x10
{

View File

@ -12,13 +12,20 @@ class LegoActorPresenter : public LegoEntityPresenter {
// FUNCTION: LEGO1 0x100679c0
~LegoActorPresenter() override {}
// FUNCTION: LEGO1 0x1000cb10
inline const char* ClassName() const override // vtable+0x0c
// FUNCTION: BETA10 0x100a6f10
static const char* HandlerClassName()
{
// STRING: LEGO1 0x100f06a4
return "LegoActorPresenter";
}
// FUNCTION: LEGO1 0x1000cb10
// FUNCTION: BETA10 0x100a6ee0
inline const char* ClassName() const override // vtable+0x0c
{
return HandlerClassName();
}
// FUNCTION: LEGO1 0x1000cb20
inline MxBool IsA(const char* p_name) const override // vtable+0x10
{

View File

@ -3,6 +3,7 @@
#include "actionsfwd.h"
#include "decomp.h"
#include "legolocations.h"
#include "legotraninfolist.h"
#include "mxcore.h"
#include "mxgeometry/mxgeometry3d.h"
@ -10,50 +11,54 @@
class AnimState;
class LegoAnimPresenter;
class LegoEntity;
class LegoExtraActor;
class LegoFile;
class LegoPathActor;
class LegoPathBoundary;
class LegoROIList;
struct LegoUnknown100db7f4;
class LegoWorld;
struct ModelInfo;
class MxDSAction;
// SIZE 0x18
struct Character {
char* m_name; // 0x00
MxBool m_unk0x04; // 0x04
MxS8 m_vehicleId; // 0x05
undefined m_unk0x06; // 0x06 (unused?)
MxBool m_unk0x07; // 0x07
MxBool m_unk0x08; // 0x08
MxBool m_unk0x09; // 0x09
MxU32 m_unk0x0c; // 0x0c
MxU32 m_unk0x10; // 0x10
MxBool m_active; // 0x14
MxU8 m_unk0x15; // 0x15
MxU8 m_unk0x16; // 0x16
};
// SIZE 0x08
struct Vehicle {
char* m_name; // 0x00
undefined m_unk0x04; // 0x04
MxBool m_unk0x05; // 0x05
};
// SIZE 0x18
struct Unknown0x3c {
LegoROI* m_roi; // 0x00
MxS32 m_characterId; // 0x04
undefined4 m_unk0x08; // 0x08
undefined m_unk0x0c; // 0x0c
MxBool m_unk0x0d; // 0x0d
float m_unk0x10; // 0x10
MxBool m_unk0x14; // 0x14
};
// VTABLE: LEGO1 0x100d8c18
// SIZE 0x500
class LegoAnimationManager : public MxCore {
public:
// SIZE 0x18
struct Character {
char* m_name; // 0x00
MxBool m_inExtras; // 0x04
MxS8 m_vehicleId; // 0x05
undefined m_unk0x06; // 0x06 (unused?)
MxBool m_unk0x07; // 0x07
MxBool m_unk0x08; // 0x08
MxBool m_unk0x09; // 0x09
MxS32 m_unk0x0c; // 0x0c
MxS32 m_unk0x10; // 0x10
MxBool m_active; // 0x14
MxU8 m_unk0x15; // 0x15
MxS8 m_unk0x16; // 0x16
};
// SIZE 0x08
struct Vehicle {
char* m_name; // 0x00
MxBool m_unk0x04; // 0x04
MxBool m_unk0x05; // 0x05
};
// SIZE 0x18
struct Extra {
LegoROI* m_roi; // 0x00
MxS32 m_characterId; // 0x04
MxLong m_unk0x08; // 0x08
MxBool m_unk0x0c; // 0x0c
MxBool m_unk0x0d; // 0x0d
float m_speed; // 0x10
MxBool m_unk0x14; // 0x14
};
LegoAnimationManager();
~LegoAnimationManager() override;
@ -77,12 +82,14 @@ class LegoAnimationManager : public MxCore {
void Suspend();
void Resume();
void FUN_1005f6d0(MxBool p_unk0x400);
void FUN_1005f700(MxBool p_unk0x3a);
void EnableCamAnims(MxBool p_enableCamAnims);
MxResult LoadScriptInfo(MxS32 p_scriptIndex);
MxBool FindVehicle(const char* p_name, MxU32& p_index);
MxResult ReadAnimInfo(LegoFile* p_file, AnimInfo* p_info);
MxResult ReadModelInfo(LegoFile* p_file, ModelInfo* p_info);
void FUN_10060570(MxBool);
void FUN_100604d0(MxBool p_unk0x08);
void FUN_10060540(MxBool p_unk0x29);
void FUN_10060570(MxBool p_unk0x1a);
MxResult StartEntityAction(MxDSAction& p_dsAction, LegoEntity* p_entity);
MxResult FUN_10060dc0(
IsleScript::Script p_objectId,
@ -95,16 +102,17 @@ class LegoAnimationManager : public MxCore {
MxBool p_param8,
MxBool p_param9
);
void FUN_10061010(undefined4);
void FUN_100617c0(MxS32, MxU16&, MxU16&);
void CameraTriggerFire(LegoPathActor* p_actor, MxBool, MxU32 p_location, MxBool p_bool);
void FUN_10061010(MxBool p_und);
LegoTranInfo* GetTranInfo(MxU32 p_index);
void FUN_10062770();
void FUN_100627d0(MxBool);
void FUN_100629b0(MxU32, MxBool);
void FUN_10063270(LegoROIList*, LegoAnimPresenter*);
void PurgeExtra(MxBool p_und);
void AddExtra(MxS32 p_location, MxBool p_und);
void FUN_10063270(LegoROIList* p_list, LegoAnimPresenter* p_presenter);
void FUN_10063780(LegoROIList* p_list);
void FUN_10064670(Vector3*);
void FUN_10064740(Vector3*);
MxResult FUN_10064670(Vector3* p_position);
MxResult FUN_10064740(Vector3* p_position);
MxResult FUN_10064880(const char* p_name, MxS32 p_unk0x0c, MxS32 p_unk0x10);
static void configureLegoAnimationManager(MxS32 p_legoAnimationManagerConfig);
@ -127,22 +135,45 @@ class LegoAnimationManager : public MxCore {
MxResult FUN_100609f0(MxU32 p_objectId, MxMatrix* p_matrix, MxBool p_und1, MxBool p_und2);
void DeleteAnimations();
void FUN_10061530();
MxResult FUN_100617c0(MxS32 p_unk0x08, MxU16& p_unk0x0e, MxU16& p_unk0x10);
MxU16 FUN_10062110(
LegoROI* p_roi,
Vector3& p_direction,
Vector3& p_position,
LegoPathBoundary* p_boundary,
float p_speed,
MxU8 p_und,
MxU8 p_unk0x0c,
MxBool p_unk0x14
);
MxS8 GetCharacterIndex(const char* p_name);
MxBool FUN_100623a0(AnimInfo& p_info);
MxBool ModelExists(AnimInfo& p_info, const char* p_name);
void FUN_10062580(AnimInfo& p_info);
MxBool FUN_10062650(Vector3& p_position, float p_und, LegoROI* p_roi);
MxBool FUN_10062710(AnimInfo& p_info);
MxBool FUN_10062e20(LegoROI* p_roi, LegoAnimPresenter* p_presenter);
void FUN_10063950(LegoROI* p_roi);
void FUN_10063aa0();
MxBool FUN_10063b90(LegoWorld* p_world, LegoExtraActor* p_actor, MxU8 p_mood, MxU32 p_characterId);
void FUN_10063d10();
void FUN_100648f0(LegoTranInfo*, MxLong);
void FUN_10063e40(LegoAnimPresenter* p_presenter);
MxBool FUN_10063fb0(LegoLocation::Boundary* p_boundary, LegoWorld* p_world);
MxBool FUN_10064010(LegoPathBoundary* p_boundary, LegoUnknown100db7f4* p_edge, float p_destScale);
MxBool FUN_10064120(LegoLocation::Boundary* p_boundary, MxBool p_bool1, MxBool p_bool2);
MxResult FUN_10064380(
const char* p_name,
const char* p_boundaryName,
MxS32 p_src,
float p_srcScale,
MxS32 p_dest,
float p_destScale,
MxU32 p_undIdx1,
MxS32 p_unk0x0c,
MxU32 p_undIdx2,
MxS32 p_unk0x10,
float p_speed
);
void FUN_100648f0(LegoTranInfo* p_tranInfo, MxLong p_unk0x404);
void FUN_10064b50(MxLong p_time);
MxS32 m_scriptIndex; // 0x08
@ -158,10 +189,10 @@ class LegoAnimationManager : public MxCore {
MxPresenter* m_unk0x28[2]; // 0x28
MxLong m_unk0x30[2]; // 0x30
MxBool m_unk0x38; // 0x38
MxBool m_unk0x39; // 0x39
MxBool m_unk0x3a; // 0x3a
Unknown0x3c m_unk0x3c[40]; // 0x3c
undefined4 m_unk0x3fc; // 0x3fc
MxBool m_animRunning; // 0x39
MxBool m_enableCamAnims; // 0x3a
Extra m_extras[40]; // 0x3c
MxU32 m_lastExtraCharacterId; // 0x3fc
MxBool m_unk0x400; // 0x400
MxBool m_unk0x401; // 0x401
MxBool m_unk0x402; // 0x402
@ -169,21 +200,25 @@ class LegoAnimationManager : public MxCore {
MxLong m_unk0x408; // 0x408
MxLong m_unk0x40c; // 0x40c
MxLong m_unk0x410; // 0x410
undefined4 m_unk0x414; // 0x414
MxU32 m_unk0x414; // 0x414
MxU32 m_numAllowedExtras; // 0x418
undefined4 m_unk0x41c; // 0x41c
AnimState* m_animState; // 0x420
LegoROIList* m_unk0x424; // 0x424
MxBool m_unk0x428; // 0x428
MxBool m_suspendedEnableCamAnims; // 0x428
MxBool m_unk0x429; // 0x429
MxBool m_unk0x42a; // 0x42a
MxBool m_suspended; // 0x42b
LegoTranInfo* m_unk0x42c; // 0x42c
MxBool m_unk0x430; // 0x430
undefined4 m_unk0x434[2]; // 0x434
MxLong m_unk0x434; // 0x434
MxLong m_unk0x438; // 0x438
MxMatrix m_unk0x43c; // 0x43c
MxMatrix m_unk0x484; // 0x484
UnknownMx4DPointFloat m_unk0x4cc; // 0x4cc
};
// TEMPLATE: LEGO1 0x10061750
// MxListCursor<LegoTranInfo *>::MxListCursor<LegoTranInfo *>
#endif // LEGOANIMATIONMANAGER_H

View File

@ -29,13 +29,20 @@ class LegoAnimMMPresenter : public MxCompositePresenter {
MxLong Notify(MxParam& p_param) override; // vtable+0x04
// FUNCTION: LEGO1 0x1004a950
inline const char* ClassName() const override // vtable+0x0c
// FUNCTION: BETA10 0x1004d840
static const char* HandlerClassName()
{
// STRING: LEGO1 0x100f046c
return "LegoAnimMMPresenter";
}
// FUNCTION: LEGO1 0x1004a950
// FUNCTION: BETA10 0x1004d810
inline const char* ClassName() const override // vtable+0x0c
{
return HandlerClassName();
}
// FUNCTION: LEGO1 0x1004a960
inline MxBool IsA(const char* p_name) const override // vtable+0x10
{
@ -55,7 +62,11 @@ class LegoAnimMMPresenter : public MxCompositePresenter {
// SYNTHETIC: LEGO1 0x1004aa40
// LegoAnimMMPresenter::`scalar deleting destructor'
void FUN_1004b840();
MxBool FUN_1004b8b0();
void FUN_1004b8c0();
inline LegoAnimPresenter* GetPresenter() { return m_presenter; }
private:
MxBool FUN_1004b450();

View File

@ -26,7 +26,7 @@ struct LegoAnimStruct {
MxU32 m_index; // 0x04
};
typedef map<const char*, LegoAnimStruct, LegoAnimStructComparator> LegoAnimPresenterMap;
typedef map<const char*, LegoAnimStruct, LegoAnimStructComparator> LegoAnimStructMap;
typedef map<const char*, const char*, LegoAnimSubstComparator> LegoAnimSubstMap;
// VTABLE: LEGO1 0x100d90c8
@ -41,34 +41,41 @@ class LegoAnimPresenter : public MxVideoPresenter {
LegoAnimPresenter();
~LegoAnimPresenter() override;
// FUNCTION: LEGO1 0x10068530
inline const char* ClassName() const override // vtable+0x0c
// FUNCTION: BETA10 0x10055300
static const char* HandlerClassName()
{
// STRING: LEGO1 0x100f071c
return "LegoAnimPresenter";
}
// FUNCTION: LEGO1 0x10068530
// FUNCTION: BETA10 0x100552d0
inline const char* ClassName() const override // vtable+0x0c
{
return HandlerClassName();
}
// FUNCTION: LEGO1 0x10068540
inline MxBool IsA(const char* p_name) const override // vtable+0x10
{
return !strcmp(p_name, LegoAnimPresenter::ClassName()) || MxVideoPresenter::IsA(p_name);
}
void ReadyTickle() override; // vtable+0x18
void StartingTickle() override; // vtable+0x1c
void StreamingTickle() override; // vtable+0x20
void DoneTickle() override; // vtable+0x2c
void ParseExtra() override; // vtable+0x30
MxResult AddToManager() override; // vtable+0x34
void Destroy() override; // vtable+0x38
MxResult StartAction(MxStreamController* p_controller, MxDSAction* p_action) override; // vtable+0x3c
void EndAction() override; // vtable+0x40
void PutFrame() override; // vtable+0x6c
virtual MxResult CreateAnim(MxStreamChunk* p_chunk); // vtable+0x88
virtual void VTable0x8c(); // vtable+0x8c
virtual void VTable0x90(); // vtable+0x90
virtual MxU32 VTable0x94(Vector3& p_vec1, Vector3& p_vec2, float p_f1, float p_f2, Vector3& p_vec3); // vtable+0x94
virtual MxResult VTable0x98(LegoPathBoundary* p_boundary); // vtable+0x98
void ReadyTickle() override; // vtable+0x18
void StartingTickle() override; // vtable+0x1c
void StreamingTickle() override; // vtable+0x20
void DoneTickle() override; // vtable+0x2c
void ParseExtra() override; // vtable+0x30
MxResult AddToManager() override; // vtable+0x34
void Destroy() override; // vtable+0x38
MxResult StartAction(MxStreamController* p_controller, MxDSAction* p_action) override; // vtable+0x3c
void EndAction() override; // vtable+0x40
void PutFrame() override; // vtable+0x6c
virtual MxResult CreateAnim(MxStreamChunk* p_chunk); // vtable+0x88
virtual void VTable0x8c(); // vtable+0x8c
virtual void VTable0x90(); // vtable+0x90
virtual MxU32 VTable0x94(Vector3& p_v1, Vector3& p_v2, float p_f1, float p_f2, Vector3& p_v3); // vtable+0x94
virtual MxResult VTable0x98(LegoPathBoundary* p_boundary); // vtable+0x98
// FUNCTION: LEGO1 0x1000c990
virtual LegoROI** GetROIMap(MxU32& p_roiMapSize)
@ -81,8 +88,13 @@ class LegoAnimPresenter : public MxVideoPresenter {
MxResult FUN_1006afc0(MxMatrix*& p_matrix, float p_und);
MxResult FUN_1006b140(LegoROI* p_roi);
void FUN_1006c7a0();
const char* GetActionObjectName();
inline void SetCurrentWorld(LegoWorld* p_currentWorld) { m_currentWorld = p_currentWorld; }
inline void SetUnknown0x0cTo1() { m_unk0x9c = 1; }
inline void SetUnknown0xa0(MxMatrix* p_unk0xa0) { m_unk0xa0 = p_unk0xa0; }
inline LegoAnim* GetAnimation() { return m_anim; }
protected:
@ -95,8 +107,8 @@ class LegoAnimPresenter : public MxVideoPresenter {
LegoBool FUN_100698b0(const CompoundObject& p_rois, const LegoChar* p_und2);
LegoROI* FUN_100699e0(const LegoChar* p_und);
void FUN_10069b10();
void FUN_1006a3c0(LegoAnimPresenterMap& p_map, LegoTreeNode* p_node, LegoROI* p_roi);
void FUN_1006a4f0(LegoAnimPresenterMap& p_map, LegoAnimNodeData* p_data, const LegoChar* p_und, LegoROI* p_roi);
void FUN_1006a3c0(LegoAnimStructMap& p_map, LegoTreeNode* p_node, LegoROI* p_roi);
void FUN_1006a4f0(LegoAnimStructMap& p_map, LegoAnimNodeData* p_data, const LegoChar* p_und, LegoROI* p_roi);
void FUN_1006aa60();
void FUN_1006ab70();
LegoBool FUN_1006aba0();
@ -119,14 +131,16 @@ class LegoAnimPresenter : public MxVideoPresenter {
LegoROI** m_unk0x8c; // 0x8c
char** m_unk0x90; // 0x90
MxU8 m_unk0x94; // 0x94
undefined m_unk0x95; // 0x95
MxBool m_unk0x95; // 0x95
MxBool m_unk0x96; // 0x96
undefined m_unk0x97; // 0x97
LegoAnimSubstMap* m_substMap; // 0x98
MxS16 m_unk0x9c; // 0x9c
undefined4* m_unk0xa0; // 0xa0
float m_unk0xa4; // 0xa4
Mx3DPointFloat m_unk0xa8; // 0xa8
MxMatrix* m_unk0xa0; // 0xa0
public:
float m_unk0xa4; // 0xa4
Mx3DPointFloat m_unk0xa8; // 0xa8
};
// clang-format off

View File

@ -2,16 +2,54 @@
#define LEGOBUILDINGMANAGER_H
#include "decomp.h"
#include "misc/legotypes.h"
#include "mxcore.h"
class LegoEntity;
class LegoROI;
class LegoStorage;
class LegoWorld;
class LegoCacheSound;
class LegoPathBoundary;
// SIZE 0x2c
struct LegoBuildingInfo {
enum {
c_bit1 = 0x01,
c_bit2 = 0x02,
c_bit3 = 0x04,
c_bit4 = 0x08
};
LegoEntity* m_entity; // 0x00
const char* m_hausName; // 0x04
MxU32 m_cycle1; // 0x08
MxU32 m_cycle2; // 0x0c
MxU8 m_cycle3; // 0x10
MxS8 m_unk0x11; // 0x11
MxS8 m_initialUnk0x11; // 0x12 = initial value loaded to m_unk0x11
MxU8 m_flags; // 0x13
float m_unk0x014; // 0x14
const char* m_unk0x18; // 0x18
float m_x; // 0x1c
float m_y; // 0x20
float m_z; // 0x24
LegoPathBoundary* m_boundary; // 0x28
};
// VTABLE: LEGO1 0x100d6f50
// SIZE 0x30
class LegoBuildingManager : public MxCore {
public:
// SIZE 0x14
struct AnimEntry {
LegoEntity* m_entity; // 0x00
LegoROI* m_roi; // 0x04
LegoTime m_time; // 0x08
float m_unk0x0c; // 0x0c
MxBool m_muted; // 0x10
};
LegoBuildingManager();
~LegoBuildingManager() override;
@ -29,13 +67,28 @@ class LegoBuildingManager : public MxCore {
void Init();
void FUN_1002fa00();
void UpdatePosition(MxS32 p_index, LegoWorld* p_world);
void FUN_1002fb30();
MxResult Write(LegoStorage* p_storage);
MxResult Read(LegoStorage* p_storage);
MxBool FUN_1002fdb0(LegoEntity* p_entity);
LegoBuildingInfo* GetInfo(LegoEntity* p_entity);
MxBool IncrementVariant(LegoEntity* p_entity);
MxBool FUN_1002fe40(LegoEntity* p_entity);
MxBool FUN_1002fe80(LegoEntity* p_entity);
MxBool FUN_1002fed0(LegoEntity* p_entity);
MxU32 GetBuildingEntityId(LegoEntity* p_entity);
MxU32 FUN_1002ff40(LegoEntity*, MxBool);
void FUN_10030000(LegoEntity* p_entity);
MxBool FUN_10030000(LegoEntity* p_entity);
MxBool FUN_10030030(MxS32 p_index);
MxBool FUN_10030110(LegoBuildingInfo* p_data);
void ScheduleAnimation(LegoEntity* p_entity, MxU32 p_length, MxBool p_haveSound, MxBool p_unk0x28);
void FUN_10030590();
void AdjustHeight(MxS32 p_index);
MxResult FUN_10030630();
LegoBuildingInfo* GetInfoArray(MxS32& p_length);
void FUN_100307b0(LegoEntity* p_entity, MxS32 p_adjust);
static void FUN_10030800();
// SYNTHETIC: LEGO1 0x1002f940
// LegoBuildingManager::`scalar deleting destructor'
@ -43,7 +96,13 @@ class LegoBuildingManager : public MxCore {
private:
static char* g_customizeAnimFile;
undefined m_unk0x08[0x28]; // 0x08
MxU8 m_nextVariant; // 0x08
MxU8 m_unk0x09; // 0x09
AnimEntry* m_entries[5]; // 0x0c
MxS8 m_numEntries; // 0x20
LegoCacheSound* m_sound; // 0x24
MxBool m_unk0x28; // 0x28
LegoWorld* m_world; // 0x2c
};
#endif // LEGOBUILDINGMANAGER_H

View File

@ -54,8 +54,8 @@ class LegoCacheSoundManager {
virtual MxResult Tickle(); // vtable+0x00
LegoCacheSound* FUN_1003d170(const char* p_key);
LegoCacheSound* FUN_1003d290(LegoCacheSound* p_sound);
LegoCacheSound* FindSoundByKey(const char* p_key);
LegoCacheSound* ManageSoundEntry(LegoCacheSound* p_sound);
LegoCacheSound* FUN_1003dae0(const char* p_one, const char* p_two, MxBool p_three);
LegoCacheSound* FUN_1003db10(LegoCacheSound* p_one, const char* p_two, MxBool p_three);
void FUN_1003dc40(LegoCacheSound** p_und);

View File

@ -2,7 +2,7 @@
#define LEGOCACHSOUND_H
#include "decomp.h"
#include "legounknown100d5778.h"
#include "lego3dsound.h"
#include "mxcore.h"
#include "mxstring.h"
@ -37,6 +37,7 @@ class LegoCacheSound : public MxCore {
MxResult FUN_10006a30(const char* p_str, MxBool);
void FUN_10006b80();
void FUN_10006be0();
void FUN_10006cb0(undefined4 p_und1, undefined4 p_und2);
// SYNTHETIC: LEGO1 0x10006610
// LegoCacheSound::`scalar deleting destructor'
@ -46,7 +47,7 @@ class LegoCacheSound : public MxCore {
LPDIRECTSOUNDBUFFER m_dsBuffer; // 0x08
undefined m_unk0xc[4]; // 0x0c
LegoUnknown100d5778 m_unk0x10; // 0x10
Lego3DSound m_unk0x10; // 0x10
undefined* m_unk0x40; // 0x40
undefined4 m_unk0x44; // 0x44
MxString m_string0x48; // 0x48

View File

@ -36,8 +36,8 @@ class LegoCameraController : public LegoPointOfViewController {
virtual MxResult Create(); // vtable+0x44
void SetWorldTransform(const Vector3& p_at, const Vector3& p_dir, const Vector3& p_up);
void FUN_10012290(float);
void FUN_10012320(MxFloat);
void FUN_10012290(float p_angle);
void FUN_10012320(float p_angle);
void FUN_100123e0(const Matrix4& p_transform, MxU32 p_und);
Mx3DPointFloat GetWorldUp();
Mx3DPointFloat GetWorldLocation();

View File

@ -1,31 +0,0 @@
#ifndef LEGOCAMERALOCATIONS_H
#define LEGOCAMERALOCATIONS_H
#include "decomp.h"
#include "mxtypes.h"
// SIZE 0x60
struct LegoCameraLocation {
MxU32 m_index; // 0x00
const char* m_name; // 0x04
float m_position[3]; // 0x08
float m_direction[3]; // 0x14
float m_up[3]; // 0x20
const char* m_edgeName; // 0x2c
undefined4 m_unk0x30; // 0x30
float m_unk0x34; // 0x34
undefined4 m_unk0x38; // 0x38
float m_unk0x3c; // 0x3c
undefined4 m_unk0x40; // 0x40
undefined4 m_unk0x44; // 0x44
undefined4 m_unk0x48; // 0x48
undefined4 m_unk0x4c; // 0x4c
undefined4 m_unk0x50; // 0x50
undefined4 m_unk0x54; // 0x54
undefined4 m_unk0x58; // 0x58
undefined4 m_unk0x5c; // 0x5c
};
extern LegoCameraLocation g_cameraLocations[70];
#endif // LEGOCAMERALOCATIONS_H

View File

@ -29,7 +29,7 @@ class LegoCarBuild : public LegoWorld {
MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
void ReadyWorld() override; // vtable+0x50
MxBool VTable0x5c() override; // vtable+0x5c
MxBool VTable0x64() override; // vtable+0x64
MxBool Escape() override; // vtable+0x64
void Enable(MxBool p_enable) override; // vtable+0x68
// SYNTHETIC: LEGO1 0x10022a60

View File

@ -11,13 +11,20 @@ class LegoCarBuildAnimPresenter : public LegoAnimPresenter {
LegoCarBuildAnimPresenter();
~LegoCarBuildAnimPresenter() override; // vtable+0x00
// FUNCTION: LEGO1 0x10078510
inline const char* ClassName() const override // vtable+0x0c
// FUNCTION: BETA10 0x10073290
static const char* HandlerClassName()
{
// STRING: LEGO1 0x100f05ec
return "LegoCarBuildAnimPresenter";
}
// FUNCTION: LEGO1 0x10078510
// FUNCTION: BETA10 0x10073260
inline const char* ClassName() const override // vtable+0x0c
{
return HandlerClassName();
}
// FUNCTION: LEGO1 0x10078520
inline MxBool IsA(const char* p_name) const override // vtable+0x10
{

View File

@ -38,8 +38,9 @@ class LegoCarRaceActor : public virtual LegoRaceActor {
void VTable0x70(float p_float) override; // vtable+0x70
MxU32 VTable0x90(float, Matrix4&) override; // vtable+0x90
MxResult VTable0x94(LegoPathActor* p_actor, MxBool p_bool) override; // vtable+0x94
void VTable0x98() override; // vtable+0x98
MxResult WaitForAnimation() override; // vtable+0x9c
void SwitchBoundary(LegoPathBoundary*& p_boundary, LegoUnknown100db7f4*& p_edge, float& p_unk0xe4)
override; // vtable+0x98
MxResult VTable0x9c() override; // vtable+0x9c
virtual void FUN_10080590();

View File

@ -49,6 +49,7 @@ typedef map<char*, LegoCharacter*, LegoCharacterComparator> LegoCharacterMap;
class LegoCharacterManager {
public:
LegoCharacterManager();
~LegoCharacterManager();
MxResult Write(LegoStorage* p_storage);
MxResult Read(LegoStorage* p_storage);
@ -59,6 +60,7 @@ class LegoCharacterManager {
static MxBool Exists(const char* p_key);
void FUN_100832a0();
MxBool FUN_10083b20(const char* p_key);
MxU32 GetRefCount(LegoROI* p_roi);
void FUN_10083c30(const char* p_name);
void FUN_10083db0(LegoROI* p_roi);
@ -69,6 +71,7 @@ class LegoCharacterManager {
LegoCharacterInfo* GetInfo(LegoROI* p_roi);
MxBool SwitchHat(LegoROI* p_roi);
MxU32 FUN_10085140(LegoROI* p_roi, MxBool p_und);
MxU8 GetMood(LegoROI* p_roi);
LegoROI* FUN_10085210(const char* p_name, const char* p_lodName, MxBool p_createEntity);
LegoROI* FUN_10085a80(const char* p_name, const char* p_lodName, MxBool p_createEntity);

View File

@ -24,7 +24,7 @@ struct LegoCharacterInfo {
LegoExtraActor* m_actor; // 0x08
MxS32 m_unk0x0c; // 0x0c
MxS32 m_unk0x10; // 0x10
MxU8 m_unk0x14; // 0x14
MxU8 m_mood; // 0x14
Part m_parts[10]; // 0x18
};

View File

@ -46,13 +46,20 @@ class LegoControlManager : public MxCore {
MxResult Tickle() override; // vtable+0x08
// FUNCTION: LEGO1 0x10028cb0
inline const char* ClassName() const override // vtable+0x0c
// FUNCTION: BETA10 0x1008af70
static const char* HandlerClassName()
{
// STRING: LEGO1 0x100f31b8
return "LegoControlManager";
}
// FUNCTION: LEGO1 0x10028cb0
// FUNCTION: BETA10 0x1008af40
inline const char* ClassName() const override // vtable+0x0c
{
return HandlerClassName();
}
// FUNCTION: LEGO1 0x10028cc0
inline MxBool IsA(const char* p_name) const override // vtable+0x10
{
@ -63,7 +70,7 @@ class LegoControlManager : public MxCore {
void Register(MxCore* p_listener);
void Unregister(MxCore* p_listener);
MxBool FUN_10029210(LegoEventNotificationParam& p_param, MxPresenter* p_presenter);
void FUN_100293c0(undefined4, const char*, undefined2);
void FUN_100293c0(MxU32 p_objectId, const char* p_atom, MxS16 p_unk0x4e);
MxControlPresenter* FUN_100294e0(MxS32 p_x, MxS32 p_y);
MxBool FUN_10029630();
MxBool FUN_10029750();

View File

@ -13,13 +13,20 @@ class LegoEntityPresenter : public MxCompositePresenter {
LegoEntityPresenter();
~LegoEntityPresenter() override; // vtable+0x00
// FUNCTION: LEGO1 0x100534b0
inline const char* ClassName() const override // vtable+0x0c
// FUNCTION: BETA10 0x10080780
static const char* HandlerClassName()
{
// STRING: LEGO1 0x100f06b8
return "LegoEntityPresenter";
}
// FUNCTION: LEGO1 0x100534b0
// FUNCTION: BETA10 0x10080750
inline const char* ClassName() const override // vtable+0x0c
{
return HandlerClassName();
}
// FUNCTION: LEGO1 0x100534c0
inline MxBool IsA(const char* p_name) const override // vtable+0x10
{

View File

@ -46,14 +46,17 @@ class LegoExtraActor : public virtual LegoAnimActor {
void VTable0x74(Matrix4& p_transform) override; // vtable+0x74
MxU32 VTable0x90(float p_float, Matrix4& p_matrix) override; // vtable+0x90
MxResult VTable0x94(LegoPathActor* p_actor, MxBool p_bool) override; // vtable+0x94
MxResult WaitForAnimation() override; // vtable+0x9c
void VTable0xa4(MxU8& p_und1, MxS32& p_und2) override; // vtable+0xa4
MxResult VTable0x9c() override; // vtable+0x9c
void VTable0xa4(MxBool& p_und1, MxS32& p_und2) override; // vtable+0xa4
void VTable0xc4() override; // vtable+0xc4
virtual MxResult FUN_1002aae0();
void Restart();
inline void FUN_1002ad8a();
inline void SetUnknown0x0c(undefined p_unk0x0c) { m_unk0x0c = p_unk0x0c; }
// SYNTHETIC: LEGO1 0x1002b760
// LegoExtraActor::`scalar deleting destructor'

View File

@ -10,13 +10,20 @@ class LegoFlcTexturePresenter : public MxFlcPresenter {
public:
LegoFlcTexturePresenter();
// FUNCTION: LEGO1 0x1005def0
inline const char* ClassName() const override // vtable+0x0c
// FUNCTION: BETA10 0x100837e0
static const char* HandlerClassName()
{
// STRING: LEGO1 0x100f0634
return "LegoFlcTexturePresenter";
}
// FUNCTION: LEGO1 0x1005def0
// FUNCTION: BETA10 0x100837b0
inline const char* ClassName() const override // vtable+0x0c
{
return HandlerClassName();
}
void StartingTickle() override; // vtable+0x1c
void LoadFrame(MxStreamChunk* p_chunk) override; // vtable+0x68
void PutFrame() override; // vtable+0x6c

View File

@ -16,6 +16,8 @@ class MxVariable;
class MxVariableTable;
class MxString;
extern const char* g_actorNames[7];
// SIZE 0x08
struct ColorStringStruct {
const char* m_targetName; // 0x00
@ -164,6 +166,10 @@ class LegoGameState {
void Init();
inline MxU8 GetActorId() { return m_actorId; }
// FUNCTION: BETA10 0x1004a2d0
inline const char* GetActorName() { return g_actorNames[GetActorId()]; }
inline Act GetCurrentAct() { return m_currentAct; }
inline Act GetLoadedAct() { return m_loadedAct; }
inline Area GetCurrentArea() { return m_currentArea; }

View File

@ -4,6 +4,20 @@
#include "decomp.h"
#include "legoloopinganimpresenter.h"
class LegoPathBoundary;
struct LegoHideAnimStructComparator {
MxBool operator()(const char* const& p_a, const char* const& p_b) const { return strcmp(p_a, p_b) < 0; }
};
// SIZE 0x08
struct LegoHideAnimStruct {
LegoPathBoundary* m_boundary; // 0x00
MxU32 m_index; // 0x04
};
typedef map<const char*, LegoHideAnimStruct, LegoHideAnimStructComparator> LegoHideAnimStructMap;
// VTABLE: LEGO1 0x100d9278
// SIZE 0xc4
class LegoHideAnimPresenter : public LegoLoopingAnimPresenter {
@ -11,13 +25,20 @@ class LegoHideAnimPresenter : public LegoLoopingAnimPresenter {
LegoHideAnimPresenter();
~LegoHideAnimPresenter() override;
// FUNCTION: LEGO1 0x1006d880
inline const char* ClassName() const override // vtable+0x0c
// FUNCTION: BETA10 0x1005d4a0
static const char* HandlerClassName()
{
// STRING: LEGO1 0x100f06cc
return "LegoHideAnimPresenter";
}
// FUNCTION: LEGO1 0x1006d880
// FUNCTION: BETA10 0x1005d470
inline const char* ClassName() const override // vtable+0x0c
{
return HandlerClassName();
}
// FUNCTION: LEGO1 0x1006d890
inline MxBool IsA(const char* p_name) const override // vtable+0x10
{
@ -33,14 +54,54 @@ class LegoHideAnimPresenter : public LegoLoopingAnimPresenter {
void VTable0x8c() override; // vtable+0x8c
void VTable0x90() override; // vtable+0x90
void FUN_1006db40(LegoTime p_time);
private:
void Init();
void Destroy(MxBool p_fromDestructor);
void FUN_1006db60(LegoTreeNode* p_node, LegoTime p_time);
void FUN_1006dc10();
void FUN_1006e3f0(LegoHideAnimStructMap& p_map, LegoTreeNode* p_node);
void FUN_1006e470(
LegoHideAnimStructMap& p_map,
LegoAnimNodeData* p_data,
const char* p_name,
LegoPathBoundary* p_boundary
);
undefined4* m_unk0xc0; // 0xc0
LegoPathBoundary** m_boundaryMap; // 0xc0
};
// clang-format off
// SYNTHETIC: LEGO1 0x1006d9d0
// LegoHideAnimPresenter::`scalar deleting destructor'
// TEMPLATE: LEGO1 0x1006ddb0
// _Tree<char const *,pair<char const * const,LegoHideAnimStruct>,map<char const *,LegoHideAnimStruct,LegoHideAnimStructComparator,allocator<LegoHideAnimStruct> >::_Kfn,LegoHideAnimStructComparator,allocator<LegoHideAnimStruct> >::~_Tree<char const *,pair<ch
// TEMPLATE: LEGO1 0x1006de80
// _Tree<char const *,pair<char const * const,LegoHideAnimStruct>,map<char const *,LegoHideAnimStruct,LegoHideAnimStructComparator,allocator<LegoHideAnimStruct> >::_Kfn,LegoHideAnimStructComparator,allocator<LegoHideAnimStruct> >::iterator::_Inc
// TEMPLATE: LEGO1 0x1006dec0
// _Tree<char const *,pair<char const * const,LegoHideAnimStruct>,map<char const *,LegoHideAnimStruct,LegoHideAnimStructComparator,allocator<LegoHideAnimStruct> >::_Kfn,LegoHideAnimStructComparator,allocator<LegoHideAnimStruct> >::erase
// TEMPLATE: LEGO1 0x1006e310
// _Tree<char const *,pair<char const * const,LegoHideAnimStruct>,map<char const *,LegoHideAnimStruct,LegoHideAnimStructComparator,allocator<LegoHideAnimStruct> >::_Kfn,LegoHideAnimStructComparator,allocator<LegoHideAnimStruct> >::_Erase
// TEMPLATE: LEGO1 0x1006e350
// Map<char const *,LegoHideAnimStruct,LegoHideAnimStructComparator>::~Map<char const *,LegoHideAnimStruct,LegoHideAnimStructComparator>
// TEMPLATE: LEGO1 0x1006e3a0
// map<char const *,LegoHideAnimStruct,LegoHideAnimStructComparator,allocator<LegoHideAnimStruct> >::~map<char const *,LegoHideAnimStruct,LegoHideAnimStructComparator,allocator<LegoHideAnimStruct> >
// TEMPLATE: LEGO1 0x1006e6d0
// _Tree<char const *,pair<char const * const,LegoHideAnimStruct>,map<char const *,LegoHideAnimStruct,LegoHideAnimStructComparator,allocator<LegoHideAnimStruct> >::_Kfn,LegoHideAnimStructComparator,allocator<LegoHideAnimStruct> >::iterator::_Dec
// TEMPLATE: LEGO1 0x1006e720
// _Tree<char const *,pair<char const * const,LegoHideAnimStruct>,map<char const *,LegoHideAnimStruct,LegoHideAnimStructComparator,allocator<LegoHideAnimStruct> >::_Kfn,LegoHideAnimStructComparator,allocator<LegoHideAnimStruct> >::_Insert
// GLOBAL: LEGO1 0x100f768c
// _Tree<char const *,pair<char const * const,LegoHideAnimStruct>,map<char const *,LegoHideAnimStruct,LegoHideAnimStructComparator,allocator<LegoHideAnimStruct> >::_Kfn,LegoHideAnimStructComparator,allocator<LegoHideAnimStruct> >::_Nil
// clang-format on
#endif // LEGOHIDEANIMPRESENTER_H

View File

@ -43,8 +43,9 @@ class LegoJetski : public LegoJetskiRaceActor, public LegoRaceMap {
) override; // vtable+0x6c
void VTable0x70(float p_float) override; // vtable+0x70
MxResult VTable0x94(LegoPathActor* p_actor, MxBool p_bool) override; // vtable+0x94
void VTable0x98() override; // vtable+0x98
MxResult WaitForAnimation() override; // vtable+0x9c
void SwitchBoundary(LegoPathBoundary*& p_boundary, LegoUnknown100db7f4*& p_edge, float& p_unk0xe4)
override; // vtable+0x98
MxResult VTable0x9c() override; // vtable+0x9c
virtual void FUN_100136f0(float p_worldSpeed);

View File

@ -36,9 +36,10 @@ class LegoJetskiRaceActor : public virtual LegoCarRaceActor {
Vector3& p_v3
) override; // vtable+0x6c
void VTable0x70(float p_float) override; // vtable+0x70
void VTable0x98() override; // vtable+0x98
MxResult WaitForAnimation() override; // vtable+0x9c
void VTable0x1c() override; // vtable+0x1c
void SwitchBoundary(LegoPathBoundary*& p_boundary, LegoUnknown100db7f4*& p_edge, float& p_unk0xe4)
override; // vtable+0x98
MxResult VTable0x9c() override; // vtable+0x9c
void VTable0x1c() override; // vtable+0x1c
// SYNTHETIC: LEGO1 0x10081d40
// LegoJetskiRaceActor::`scalar deleting destructor'

View File

@ -13,13 +13,20 @@ class LegoLoadCacheSoundPresenter : public MxWavePresenter {
LegoLoadCacheSoundPresenter();
~LegoLoadCacheSoundPresenter() override;
// FUNCTION: LEGO1 0x10018450
inline const char* ClassName() const override // vtable+0x0c
// FUNCTION: BETA10 0x1008cf90
static const char* HandlerClassName()
{
// STRING: LEGO1 0x100f05a0
return "LegoLoadCacheSoundPresenter";
}
// FUNCTION: LEGO1 0x10018450
// FUNCTION: BETA10 0x1008cf60
inline const char* ClassName() const override // vtable+0x0c
{
return HandlerClassName();
}
void ReadyTickle() override; // vtable+0x18
void StreamingTickle() override; // vtable+0x20
void DoneTickle() override; // vtable+0x2c

View File

@ -0,0 +1,32 @@
#ifndef LEGOLOCATIONS_H
#define LEGOLOCATIONS_H
#include "decomp.h"
#include "mxtypes.h"
// SIZE 0x60
struct LegoLocation {
// SIZE 0x18
struct Boundary {
const char* m_name; // 0x00
MxS32 m_src; // 0x04
float m_srcScale; // 0x08
MxS32 m_dest; // 0x0c
float m_destScale; // 0x10
MxBool m_unk0x10; // 0x14
};
MxU32 m_index; // 0x00
const char* m_name; // 0x04
float m_position[3]; // 0x08
float m_direction[3]; // 0x14
float m_up[3]; // 0x20
Boundary m_boundaryA; // 0x2c
Boundary m_boundaryB; // 0x44
MxBool m_unk0x5c; // 0x5c
MxU8 m_frequency; // 0x5d
};
extern LegoLocation g_locations[70];
#endif // LEGOLOCATIONS_H

View File

@ -2,6 +2,7 @@
#define LEGOLOCOMOTIONANIMPRESENTER_H
#include "legoloopinganimpresenter.h"
#include "legoroimaplist.h"
// VTABLE: LEGO1 0x100d9170
// SIZE 0xd8
@ -10,13 +11,20 @@ class LegoLocomotionAnimPresenter : public LegoLoopingAnimPresenter {
LegoLocomotionAnimPresenter();
~LegoLocomotionAnimPresenter() override;
// FUNCTION: LEGO1 0x1006ce50
inline const char* ClassName() const override // vtable+0x0c
// FUNCTION: BETA10 0x1005c4e0
static const char* HandlerClassName()
{
// STRING: LEGO1 0x100f06e4
return "LegoLocomotionAnimPresenter";
}
// FUNCTION: LEGO1 0x1006ce50
// FUNCTION: BETA10 0x1005c4b0
inline const char* ClassName() const override // vtable+0x0c
{
return HandlerClassName();
}
// FUNCTION: LEGO1 0x1006ce60
inline MxBool IsA(const char* p_name) const override // vtable+0x10
{
@ -50,12 +58,12 @@ class LegoLocomotionAnimPresenter : public LegoLoopingAnimPresenter {
void Init();
void Destroy(MxBool p_fromDestructor);
undefined4 m_unk0xc0; // 0xc0
undefined4* m_unk0xc4; // 0xc4
MxCore* m_unk0xc8; // 0xc8
MxS32 m_unk0xcc; // 0xcc
MxS32 m_unk0xd0; // 0xd0
undefined2 m_unk0xd4; // 0xd4
undefined4 m_unk0xc0; // 0xc0
undefined4* m_unk0xc4; // 0xc4
LegoROIMapList* m_roiMapList; // 0xc8
MxS32 m_unk0xcc; // 0xcc
MxS32 m_unk0xd0; // 0xd0
undefined2 m_unk0xd4; // 0xd4
};
#endif // LEGOLOCOMOTIONANIMPRESENTER_H

View File

@ -7,13 +7,20 @@
// SIZE 0xc0
class LegoLoopingAnimPresenter : public LegoAnimPresenter {
public:
// FUNCTION: LEGO1 0x1000c9a0
inline const char* ClassName() const override // vtable+0x0c
// FUNCTION: BETA10 0x1005c6f0
static const char* HandlerClassName()
{
// STRING: LEGO1 0x100f0700
return "LegoLoopingAnimPresenter";
}
// FUNCTION: LEGO1 0x1000c9a0
// FUNCTION: BETA10 0x1005c6c0
inline const char* ClassName() const override // vtable+0x0c
{
return HandlerClassName();
}
// FUNCTION: LEGO1 0x1000c9b0
inline MxBool IsA(const char* p_name) const override // vtable+0x10
{

View File

@ -6,7 +6,6 @@
#include "mxomni.h"
class Isle;
class IslePathActor;
class LegoAnimationManager;
class LegoBuildingManager;
class LegoCharacterManager;
@ -14,6 +13,7 @@ class LegoEntity;
class LegoGameState;
class LegoInputManager;
class LegoNavController;
class LegoPathActor;
class LegoPathBoundary;
class LegoPlantManager;
class LegoROI;
@ -127,7 +127,7 @@ class LegoOmni : public MxOmni {
ViewLODListManager* GetViewLODListManager() { return m_viewLODListManager; }
LegoWorld* GetCurrentWorld() { return m_currentWorld; }
LegoNavController* GetNavController() { return m_navController; }
IslePathActor* GetCurrentActor() { return m_currentActor; }
LegoPathActor* GetCurrentActor() { return m_currentActor; }
LegoPlantManager* GetLegoPlantManager() { return m_plantManager; }
LegoAnimationManager* GetAnimationManager() { return m_animationManager; }
LegoBuildingManager* GetLegoBuildingManager() { return m_buildingManager; }
@ -139,7 +139,7 @@ class LegoOmni : public MxOmni {
LegoWorldList* GetWorldList() { return m_worldList; }
inline void SetNavController(LegoNavController* p_navController) { m_navController = p_navController; }
inline void SetCurrentActor(IslePathActor* p_currentActor) { m_currentActor = p_currentActor; }
inline void SetCurrentActor(LegoPathActor* p_currentActor) { m_currentActor = p_currentActor; }
inline void SetCurrentWorld(LegoWorld* p_currentWorld) { m_currentWorld = p_currentWorld; }
inline void SetExit(MxBool p_exit) { m_exit = p_exit; }
inline MxResult StartActionIfUnknown0x13c(MxDSAction& p_dsAction)
@ -162,7 +162,7 @@ class LegoOmni : public MxOmni {
LegoWorld* m_currentWorld; // 0x7c
MxBool m_exit; // 0x80
LegoNavController* m_navController; // 0x84
IslePathActor* m_currentActor; // 0x88
LegoPathActor* m_currentActor; // 0x88
LegoCharacterManager* m_characterManager; // 0x8c
LegoPlantManager* m_plantManager; // 0x90
LegoAnimationManager* m_animationManager; // 0x94

View File

@ -1,10 +1,18 @@
#ifndef LEGOMETERPRESENTER_H
#define LEGOMETERPRESENTER_H
#include "mxrect16.h"
#include "mxstillpresenter.h"
#include "mxstring.h"
// SIZE 0x08
struct MeterRect : public MxRect16 {
// FUNCTION: BETA10 0x10097eb0
MeterRect() {}
};
// VTABLE: LEGO1 0x100d7ac8
// VTABLE: BETA10 0x101bca68
// SIZE 0x94
class LegoMeterPresenter : public MxStillPresenter {
public:
@ -18,17 +26,21 @@ class LegoMeterPresenter : public MxStillPresenter {
void ParseExtra() override; // vtable+0x30
private:
void FUN_10043a50();
enum MeterLayout {
e_leftToRight = 0,
e_rightToLeft,
e_bottomToTop,
e_topToBottom
};
MxU8* m_unk0x6c; // 0x6c
MxU16 m_type; // 0x70
MxString m_variable; // 0x74
MxFloat m_unk0x84; // 0x84
MxU16 m_unk0x88; // 0x88
MxU16 m_unk0x8a; // 0x8a
MxU16 m_unk0x8c; // 0x8c
MxU16 m_unk0x8e; // 0x8e
MxU16 m_layout; // 0x90
void DrawMeter();
MxU8* m_meterPixels; // 0x6c
MxU16 m_fillColor; // 0x70
MxString m_variable; // 0x74
MxFloat m_curPercent; // 0x84
MeterRect m_meterRect; // 0x88
MxS16 m_layout; // 0x90
};
// SYNTHETIC: LEGO1 0x10043760

View File

@ -19,13 +19,20 @@ class LegoModelPresenter : public MxVideoPresenter {
static void configureLegoModelPresenter(MxS32 p_modelPresenterConfig);
// FUNCTION: LEGO1 0x1000ccb0
inline const char* ClassName() const override // vtable+0x0c
// FUNCTION: BETA10 0x100a7180
static const char* HandlerClassName()
{
// STRING: LEGO1 0x100f067c
return "LegoModelPresenter";
}
// FUNCTION: LEGO1 0x1000ccb0
// FUNCTION: BETA10 0x100a7150
inline const char* ClassName() const override // vtable+0x0c
{
return HandlerClassName();
}
// FUNCTION: LEGO1 0x1000ccc0
inline MxBool IsA(const char* p_name) const override // vtable+0x10
{

View File

@ -5,6 +5,7 @@
#include "mxcore.h"
#include "mxtypes.h"
struct LegoLocation;
class Vector3;
//////////////////////////////////////////////////////////////////////////////
@ -71,8 +72,10 @@ class LegoNavController : public MxCore {
float p_rs,
MxBool p_urs
);
static MxResult UpdateCameraLocation(MxU32 p_location);
static MxResult UpdateCameraLocation(const char* p_location);
static MxResult UpdateLocation(MxU32 p_location);
static MxResult UpdateLocation(const char* p_location);
static LegoLocation* GetLocation(MxU32 p_location);
inline void SetLinearVel(MxFloat p_linearVel) { m_linearVel = p_linearVel; }
inline MxFloat GetLinearVel() { return m_linearVel; }
inline MxFloat GetRotationalVel() { return m_rotationalVel; }

View File

@ -13,13 +13,20 @@ class LegoPalettePresenter : public MxVideoPresenter {
LegoPalettePresenter();
~LegoPalettePresenter() override; // vtable+0x00
// FUNCTION: LEGO1 0x10079f30
inline const char* ClassName() const override // vtable+0x0c
// FUNCTION: BETA10 0x100ab250
static const char* HandlerClassName()
{
// STRING: LEGO1 0x100f061c
return "LegoPalettePresenter";
}
// FUNCTION: LEGO1 0x10079f30
// FUNCTION: BETA10 0x100ab220
inline const char* ClassName() const override // vtable+0x0c
{
return HandlerClassName();
}
// FUNCTION: LEGO1 0x10079f40
inline MxBool IsA(const char* p_name) const override // vtable+0x10
{

View File

@ -13,13 +13,20 @@ class LegoPartPresenter : public MxMediaPresenter {
// FUNCTION: LEGO1 0x10067300
~LegoPartPresenter() override { Destroy(TRUE); }
// FUNCTION: LEGO1 0x1000cf70
inline const char* ClassName() const override // vtable+0x0c
// FUNCTION: BETA10 0x100a75d0
static const char* HandlerClassName()
{
// STRING: LEGO1 0x100f05d8
return "LegoPartPresenter";
}
// FUNCTION: LEGO1 0x1000cf70
// FUNCTION: BETA10 0x100a75a0
inline const char* ClassName() const override // vtable+0x0c
{
return HandlerClassName();
}
// FUNCTION: LEGO1 0x1000cf80
inline MxBool IsA(const char* p_name) const override // vtable+0x10
{

View File

@ -9,12 +9,18 @@
struct LegoEdge;
class LegoPathBoundary;
class LegoPathController;
class LegoUnknown100db7f4;
struct LegoPathEdgeContainer;
struct LegoUnknown100db7f4;
class LegoWEEdge;
// VTABLE: LEGO1 0x100d6e28
// SIZE 0x154
class LegoPathActor : public LegoActor {
public:
enum {
c_bit3 = 0x04
};
LegoPathActor();
~LegoPathActor() override;
@ -31,8 +37,8 @@ class LegoPathActor : public LegoActor {
return !strcmp(p_name, LegoPathActor::ClassName()) || LegoActor::IsA(p_name);
}
void ParseAction(char* p_extra) override; // vtable+0x20
virtual MxS32 VTable0x68(Vector3&, Vector3&, Vector3&); // vtable+0x68
void ParseAction(char* p_extra) override; // vtable+0x20
virtual MxS32 VTable0x68(Vector3& p_v1, Vector3& p_v2, Vector3& p_v3); // vtable+0x68
virtual MxU32 VTable0x6c(
LegoPathBoundary* p_boundary,
Vector3& p_v1,
@ -48,7 +54,7 @@ class LegoPathActor : public LegoActor {
virtual void SetUserNavFlag(MxBool p_userNavFlag) { m_userNavFlag = p_userNavFlag; } // vtable+0x78
// FUNCTION: LEGO1 0x10002d30
virtual MxU8 GetUserNavFlag() { return m_userNavFlag; } // vtable+0x7c
virtual MxBool GetUserNavFlag() { return m_userNavFlag; } // vtable+0x7c
virtual MxResult VTable0x80(
Vector3& p_point1,
@ -80,14 +86,18 @@ class LegoPathActor : public LegoActor {
// FUNCTION: LEGO1 0x10002d50
virtual MxResult VTable0x94(LegoPathActor*, MxBool) { return 0; } // vtable+0x94
virtual void VTable0x98(); // vtable+0x98
virtual MxResult WaitForAnimation(); // vtable+0x9c
virtual void SwitchBoundary(
LegoPathBoundary*& p_boundary,
LegoUnknown100db7f4*& p_edge,
float& p_unk0xe4
); // vtable+0x98
virtual MxResult VTable0x9c(); // vtable+0x9c
// FUNCTION: LEGO1 0x10002d60
virtual MxS32 VTable0xa0() { return 0; } // vtable+0xa0
virtual void VTable0xa4(MxU8&, MxS32&); // vtable+0xa4
virtual void VTable0xa8(); // vtable+0xa8
virtual void VTable0xa4(MxBool& p_und1, MxS32& p_und2); // vtable+0xa4
virtual void VTable0xa8(); // vtable+0xa8
// FUNCTION: LEGO1 0x10002d70
virtual void VTable0xac(MxFloat p_unk0x13c) { m_unk0x13c = p_unk0x13c; } // vtable+0xac
@ -116,15 +126,27 @@ class LegoPathActor : public LegoActor {
inline LegoPathBoundary* GetBoundary() { return m_boundary; }
inline MxU32 GetState() { return m_state; }
inline LegoPathController* GetController() { return m_controller; }
inline MxBool GetCollideBox() { return m_collideBox; }
inline void SetBoundary(LegoPathBoundary* p_boundary) { m_boundary = p_boundary; }
inline void SetState(MxU32 p_state) { m_state = p_state; }
inline void ClearController() { m_controller = NULL; }
inline void SetController(LegoPathController* p_controller) { m_controller = p_controller; }
// SYNTHETIC: LEGO1 0x1002d800
// LegoPathActor::`scalar deleting destructor'
protected:
inline MxU32 FUN_1002edd0(
list<LegoPathBoundary*>& p_boundaries,
LegoPathBoundary* p_boundary,
Vector3& p_v1,
Vector3& p_v2,
float p_f1,
float p_f2,
Vector3& p_v3,
MxS32 p_und
);
MxFloat m_BADuration; // 0x78
MxFloat m_unk0x7c; // 0x7c
MxFloat m_actorTime; // 0x80
@ -132,13 +154,13 @@ class LegoPathActor : public LegoActor {
LegoPathBoundary* m_boundary; // 0x88
LegoUnknown m_unk0x8c; // 0x8c
MxU32 m_state; // 0xdc
LegoEdge* m_destEdge; // 0xe0
LegoUnknown100db7f4* m_destEdge; // 0xe0
MxFloat m_unk0xe4; // 0xe4
undefined m_unk0xe8; // 0xe8
MxBool m_collideBox; // 0xe8
undefined m_unk0xe9; // 0xe9
MxBool m_userNavFlag; // 0xea
MxMatrix m_unk0xec; // 0xec
undefined* m_unk0x134; // 0x134
LegoPathEdgeContainer* m_grec; // 0x134
LegoPathController* m_controller; // 0x138
MxFloat m_unk0x13c; // 0x13c
MxFloat m_unk0x140; // 0x140
@ -148,4 +170,19 @@ class LegoPathActor : public LegoActor {
MxFloat m_unk0x150; // 0x150
};
// TEMPLATE: LEGO1 0x10018b70
// List<LegoBoundaryEdge>::~List<LegoBoundaryEdge>
// TEMPLATE: LEGO1 0x10018bc0
// list<LegoBoundaryEdge,allocator<LegoBoundaryEdge> >::~list<LegoBoundaryEdge,allocator<LegoBoundaryEdge> >
// TEMPLATE: LEGO1 0x1002ef10
// list<LegoPathBoundary *,allocator<LegoPathBoundary *> >::~list<LegoPathBoundary *,allocator<LegoPathBoundary *> >
// TEMPLATE: LEGO1 0x1002ef80
// list<LegoPathBoundary *,allocator<LegoPathBoundary *> >::insert
// TEMPLATE: LEGO1 0x1002efd0
// List<LegoPathBoundary *>::~List<LegoPathBoundary *>
#endif // LEGOPATHACTOR_H

View File

@ -15,7 +15,10 @@ struct LegoPathActorSetCompare {
};
struct LegoAnimPresenterSetCompare {
MxBool operator()(const LegoAnimPresenter* p_lhs, const LegoAnimPresenter* p_rhs) const { return 0; }
MxBool operator()(const LegoAnimPresenter* p_lhs, const LegoAnimPresenter* p_rhs) const
{
return (MxS32) p_lhs < (MxS32) p_rhs;
}
};
typedef set<LegoPathActor*, LegoPathActorSetCompare> LegoPathActorSet;
@ -26,16 +29,32 @@ typedef set<LegoAnimPresenter*, LegoAnimPresenterSetCompare> LegoAnimPresenterSe
class LegoPathBoundary : public LegoWEGEdge {
public:
LegoPathBoundary();
~LegoPathBoundary() override;
MxResult AddActor(LegoPathActor* p_actor);
MxResult RemoveActor(LegoPathActor* p_actor);
void FUN_100575b0(Vector3& p_point1, Vector3& p_point2, LegoPathActor* p_actor);
MxU32 Intersect(float p_scale, Vector3& p_point1, Vector3& p_point2, Vector3& p_point3, LegoEdge*& p_edge);
void SwitchBoundary(
LegoPathActor* p_actor,
LegoPathBoundary*& p_boundary,
LegoUnknown100db7f4*& p_edge,
float& p_unk0xe4
);
MxU32 Intersect(
float p_scale,
Vector3& p_point1,
Vector3& p_point2,
Vector3& p_point3,
LegoUnknown100db7f4*& p_edge
);
MxU32 FUN_10057fe0(LegoAnimPresenter* p_presenter);
MxU32 FUN_100586e0(LegoAnimPresenter* p_presenter);
inline LegoPathActorSet* GetActors() { return &m_actors; }
inline LegoAnimPresenterSet* GetPresenters() { return &m_presenters; }
inline LegoPathActorSet& GetActors() { return m_actors; }
inline LegoAnimPresenterSet& GetPresenters() { return m_presenters; }
// SYNTHETIC: LEGO1 0x10047a80
// LegoPathBoundary::`scalar deleting destructor'
// LegoPathBoundary::`vector deleting destructor'
private:
LegoPathActorSet m_actors; // 0x54
@ -79,6 +98,72 @@ class LegoPathBoundary : public LegoWEGEdge {
// TEMPLATE: LEGO1 0x10045dd0
// _Tree<LegoPathActor *,LegoPathActor *,set<LegoPathActor *,LegoPathActorSetCompare,allocator<LegoPathActor *> >::_Kfn,LegoPathActorSetCompare,allocator<LegoPathActor *> >::_Insert
// TEMPLATE: LEGO1 0x10046310
// _Tree<LegoPathActor *,LegoPathActor *,set<LegoPathActor *,LegoPathActorSetCompare,allocator<LegoPathActor *> >::_Kfn,LegoPathActorSetCompare,allocator<LegoPathActor *> >::insert
// TEMPLATE: LEGO1 0x10046580
// _Tree<LegoPathActor *,LegoPathActor *,set<LegoPathActor *,LegoPathActorSetCompare,allocator<LegoPathActor *> >::_Kfn,LegoPathActorSetCompare,allocator<LegoPathActor *> >::_Lrotate
// TEMPLATE: LEGO1 0x100465e0
// _Tree<LegoPathActor *,LegoPathActor *,set<LegoPathActor *,LegoPathActorSetCompare,allocator<LegoPathActor *> >::_Kfn,LegoPathActorSetCompare,allocator<LegoPathActor *> >::_Rrotate
// TEMPLATE: LEGO1 0x1004a7a0
// _Construct
// TEMPLATE: LEGO1 0x10056c20
// _Tree<LegoAnimPresenter *,LegoAnimPresenter *,set<LegoAnimPresenter *,LegoAnimPresenterSetCompare,allocator<LegoAnimPresenter *> >::_Kfn,LegoAnimPresenterSetCompare,allocator<LegoAnimPresenter *> >::~_Tree<LegoAnimPresenter *,LegoAnimPresenter *,set<LegoA
// TEMPLATE: LEGO1 0x10056cf0
// _Tree<LegoAnimPresenter *,LegoAnimPresenter *,set<LegoAnimPresenter *,LegoAnimPresenterSetCompare,allocator<LegoAnimPresenter *> >::_Kfn,LegoAnimPresenterSetCompare,allocator<LegoAnimPresenter *> >::iterator::_Inc
// TEMPLATE: LEGO1 0x10056d30
// _Tree<LegoAnimPresenter *,LegoAnimPresenter *,set<LegoAnimPresenter *,LegoAnimPresenterSetCompare,allocator<LegoAnimPresenter *> >::_Kfn,LegoAnimPresenterSetCompare,allocator<LegoAnimPresenter *> >::erase
// TEMPLATE: LEGO1 0x10057180
// _Tree<LegoAnimPresenter *,LegoAnimPresenter *,set<LegoAnimPresenter *,LegoAnimPresenterSetCompare,allocator<LegoAnimPresenter *> >::_Kfn,LegoAnimPresenterSetCompare,allocator<LegoAnimPresenter *> >::_Erase
// TEMPLATE: LEGO1 0x100571c0
// set<LegoAnimPresenter *,LegoAnimPresenterSetCompare,allocator<LegoAnimPresenter *> >::~set<LegoAnimPresenter *,LegoAnimPresenterSetCompare,allocator<LegoAnimPresenter *> >
// TEMPLATE: LEGO1 0x10057210
// Set<LegoAnimPresenter *,LegoAnimPresenterSetCompare>::~Set<LegoAnimPresenter *,LegoAnimPresenterSetCompare>
// TEMPLATE: LEGO1 0x100573e0
// _Tree<LegoPathActor *,LegoPathActor *,set<LegoPathActor *,LegoPathActorSetCompare,allocator<LegoPathActor *> >::_Kfn,LegoPathActorSetCompare,allocator<LegoPathActor *> >::begin
// TEMPLATE: LEGO1 0x100580c0
// _Tree<LegoAnimPresenter *,LegoAnimPresenter *,set<LegoAnimPresenter *,LegoAnimPresenterSetCompare,allocator<LegoAnimPresenter *> >::_Kfn,LegoAnimPresenterSetCompare,allocator<LegoAnimPresenter *> >::insert
// TEMPLATE: LEGO1 0x10058330
// _Tree<LegoAnimPresenter *,LegoAnimPresenter *,set<LegoAnimPresenter *,LegoAnimPresenterSetCompare,allocator<LegoAnimPresenter *> >::_Kfn,LegoAnimPresenterSetCompare,allocator<LegoAnimPresenter *> >::iterator::_Dec
// TEMPLATE: LEGO1 0x10058380
// _Tree<LegoAnimPresenter *,LegoAnimPresenter *,set<LegoAnimPresenter *,LegoAnimPresenterSetCompare,allocator<LegoAnimPresenter *> >::_Kfn,LegoAnimPresenterSetCompare,allocator<LegoAnimPresenter *> >::_Buynode
// TEMPLATE: LEGO1 0x100583a0
// _Tree<LegoAnimPresenter *,LegoAnimPresenter *,set<LegoAnimPresenter *,LegoAnimPresenterSetCompare,allocator<LegoAnimPresenter *> >::_Kfn,LegoAnimPresenterSetCompare,allocator<LegoAnimPresenter *> >::_Insert
// TEMPLATE: LEGO1 0x10058620
// _Tree<LegoAnimPresenter *,LegoAnimPresenter *,set<LegoAnimPresenter *,LegoAnimPresenterSetCompare,allocator<LegoAnimPresenter *> >::_Kfn,LegoAnimPresenterSetCompare,allocator<LegoAnimPresenter *> >::_Lrotate
// TEMPLATE: LEGO1 0x10058680
// _Tree<LegoAnimPresenter *,LegoAnimPresenter *,set<LegoAnimPresenter *,LegoAnimPresenterSetCompare,allocator<LegoAnimPresenter *> >::_Kfn,LegoAnimPresenterSetCompare,allocator<LegoAnimPresenter *> >::_Rrotate
// TEMPLATE: LEGO1 0x10058820
// _Tree<LegoAnimPresenter *,LegoAnimPresenter *,set<LegoAnimPresenter *,LegoAnimPresenterSetCompare,allocator<LegoAnimPresenter *> >::_Kfn,LegoAnimPresenterSetCompare,allocator<LegoAnimPresenter *> >::erase
// TEMPLATE: LEGO1 0x100588e0
// _Tree<LegoAnimPresenter *,LegoAnimPresenter *,set<LegoAnimPresenter *,LegoAnimPresenterSetCompare,allocator<LegoAnimPresenter *> >::_Kfn,LegoAnimPresenterSetCompare,allocator<LegoAnimPresenter *> >::equal_range
// TEMPLATE: LEGO1 0x10058950
// _Tree<LegoAnimPresenter *,LegoAnimPresenter *,set<LegoAnimPresenter *,LegoAnimPresenterSetCompare,allocator<LegoAnimPresenter *> >::_Kfn,LegoAnimPresenterSetCompare,allocator<LegoAnimPresenter *> >::_Lbound
// TEMPLATE: LEGO1 0x10058980
// _Construct
// TEMPLATE: LEGO1 0x100589a0
// _Distance
// GLOBAL: LEGO1 0x100f11a4
// _Tree<LegoPathActor *,LegoPathActor *,set<LegoPathActor *,LegoPathActorSetCompare,allocator<LegoPathActor *> >::_Kfn,LegoPathActorSetCompare,allocator<LegoPathActor *> >::_Nil

View File

@ -2,24 +2,61 @@
#define LEGOPATHCONTROLLER_H
#include "decomp.h"
#include "geom/legounkown100db7f4.h"
#include "legopathactor.h"
#include "legopathboundary.h"
#include "mxcore.h"
#include "mxstl/stlcompat.h"
class LegoAnimPresenter;
class LegoPathActor;
class LegoPathBoundary;
class LegoPathStruct;
class LegoWorld;
class MxAtomId;
class Vector3;
struct LegoPathControllerComparator {
MxBool operator()(const undefined*, const undefined*) const { return 0; }
// VTABLE: LEGO1 0x100d7da8
// SIZE 0x40
struct LegoPathCtrlEdge : public LegoUnknown100db7f4 {};
struct LegoPathCtrlEdgeCompare {
MxU32 operator()(const LegoPathCtrlEdge* p_lhs, const LegoPathCtrlEdge* p_rhs) const
{
return (MxS32) p_lhs < (MxS32) p_rhs;
}
};
typedef set<LegoPathCtrlEdge*, LegoPathCtrlEdgeCompare> LegoPathCtrlEdgeSet;
// VTABLE: LEGO1 0x100d7d60
// SIZE 0x40
class LegoPathController : public MxCore {
public:
// SIZE 0x08
struct CtrlBoundary {
// FUNCTION: LEGO1 0x10046dc0
CtrlBoundary()
{
m_controller = NULL;
m_boundary = NULL;
}
LegoPathController* m_controller; // 0x00
LegoPathBoundary* m_boundary; // 0x04
};
// SIZE 0x08
struct CtrlEdge {
// FUNCTION: LEGO1 0x10046dd0
CtrlEdge()
{
m_controller = NULL;
m_edge = NULL;
}
LegoPathController* m_controller; // 0x00
LegoEdge* m_edge; // 0x04
};
LegoPathController();
~LegoPathController() override { Destroy(); }
@ -41,35 +78,121 @@ class LegoPathController : public MxCore {
// SYNTHETIC: LEGO1 0x10045740
// LegoPathController::`scalar deleting destructor'
virtual void VTable0x14(MxU8* p_data, Vector3& p_location, MxAtomId& p_trigger); // vtable+0x14
virtual void Destroy(); // vtable+0x18
virtual MxResult Create(MxU8* p_data, const Vector3& p_location, const MxAtomId& p_trigger); // vtable+0x14
virtual void Destroy(); // vtable+0x18
MxResult FUN_10045c20(
MxResult PlaceActor(
LegoPathActor* p_actor,
const char* p_path,
const char* p_name,
MxS32 p_src,
float p_srcScale,
MxS32 p_dest,
float p_destScale
);
undefined4 FUN_10046770(LegoPathActor* p_actor);
MxResult PlaceActor(
LegoPathActor* p_actor,
LegoAnimPresenter* p_presenter,
Vector3& p_position,
Vector3& p_direction
);
MxResult PlaceActor(LegoPathActor* p_actor);
MxResult RemoveActor(LegoPathActor* p_actor);
void FUN_100468f0(LegoAnimPresenter* p_presenter);
void FUN_10046930(LegoAnimPresenter* p_presenter);
MxResult FUN_10046b30(LegoPathBoundary** p_path, MxS32& p_value);
MxResult FUN_10046b30(LegoPathBoundary*& p_boundaries, MxS32& p_numL);
LegoPathBoundary* GetPathBoundary(const char* p_name);
void Enable(MxBool p_enable);
void FUN_10046bb0(LegoWorld* p_world);
MxS32 FUN_1004a240(
LegoPathEdgeContainer& p_grec,
Vector3& p_v1,
Vector3& p_v2,
float p_f1,
LegoUnknown100db7f4*& p_edge,
LegoPathBoundary*& p_boundary
);
static MxResult Init();
static MxResult Reset();
private:
LegoPathBoundary* m_unk0x08; // 0x08
undefined4 m_unk0x0c; // 0x0c
undefined4 m_unk0x10; // 0x10
undefined4 m_unk0x14; // 0x14
MxS16 m_numL; // 0x18
MxS16 m_numE; // 0x1a
MxS16 m_numN; // 0x1c
MxS16 m_numT; // 0x1e
map<undefined*, undefined*, LegoPathControllerComparator> m_pfsE; // 0x20
map<undefined*, undefined*, LegoPathControllerComparator> m_unk0x30; // 0x30
void FUN_10046970();
MxResult Read(LegoStorage* p_storage);
MxResult ReadStructs(LegoStorage* p_storage);
MxResult ReadEdges(LegoStorage* p_storage);
MxResult ReadBoundaries(LegoStorage* p_storage);
static MxResult ReadVector(LegoStorage* p_storage, Mx3DPointFloat& p_vec);
static MxResult ReadVector(LegoStorage* p_storage, Mx4DPointFloat& p_vec);
LegoPathBoundary* m_boundaries; // 0x08
LegoPathCtrlEdge* m_edges; // 0x0c
Mx3DPointFloat* m_unk0x10; // 0x10
LegoPathStruct* m_structs; // 0x14
MxU16 m_numL; // 0x18
MxU16 m_numE; // 0x1a
MxU16 m_numN; // 0x1c
MxU16 m_numT; // 0x1e
LegoPathCtrlEdgeSet m_pfsE; // 0x20
LegoPathActorSet m_actors; // 0x30
};
// clang-format off
// TEMPLATE: LEGO1 0x1001fd70
// _Tree<LegoPathActor *,LegoPathActor *,set<LegoPathActor *,LegoPathActorSetCompare,allocator<LegoPathActor *> >::_Kfn,LegoPathActorSetCompare,allocator<LegoPathActor *> >::_Lbound
// TEMPLATE: LEGO1 0x1002c4a0
// _Tree<LegoPathActor *,LegoPathActor *,set<LegoPathActor *,LegoPathActorSetCompare,allocator<LegoPathActor *> >::_Kfn,LegoPathActorSetCompare,allocator<LegoPathActor *> >::_Buynode
// TEMPLATE: LEGO1 0x100451a0
// _Tree<LegoPathCtrlEdge *,LegoPathCtrlEdge *,set<LegoPathCtrlEdge *,LegoPathCtrlEdgeCompare,allocator<LegoPathCtrlEdge *> >::_Kfn,LegoPathCtrlEdgeCompare,allocator<LegoPathCtrlEdge *> >::~_Tree<LegoPathCtrlEdge *,LegoPathCtrlEdge *,set<LegoPathCtrlEdge *,LegoPathControl
// TEMPLATE: LEGO1 0x100457e0
// Set<LegoPathCtrlEdge *,LegoPathCtrlEdgeCompare>::~Set<LegoPathCtrlEdge *,LegoPathCtrlEdgeCompare>
// TEMPLATE: LEGO1 0x10045830
// set<LegoPathCtrlEdge *,LegoPathCtrlEdgeCompare,allocator<LegoPathCtrlEdge *> >::~set<LegoPathCtrlEdge *,LegoPathCtrlEdgeCompare,allocator<LegoPathCtrlEdge *> >
// TEMPLATE: LEGO1 0x10046640
// _Tree<LegoAnimPresenter *,LegoAnimPresenter *,set<LegoAnimPresenter *,LegoAnimPresenterSetCompare,allocator<LegoAnimPresenter *> >::_Kfn,LegoAnimPresenterSetCompare,allocator<LegoAnimPresenter *> >::find
// TEMPLATE: LEGO1 0x100468c0
// _Tree<LegoPathActor *,LegoPathActor *,set<LegoPathActor *,LegoPathActorSetCompare,allocator<LegoPathActor *> >::_Kfn,LegoPathActorSetCompare,allocator<LegoPathActor *> >::_Ubound
// TEMPLATE: LEGO1 0x10047550
// _Tree<LegoPathCtrlEdge *,LegoPathCtrlEdge *,set<LegoPathCtrlEdge *,LegoPathCtrlEdgeCompare,allocator<LegoPathCtrlEdge *> >::_Kfn,LegoPathCtrlEdgeCompare,allocator<LegoPathCtrlEdge *> >::_Insert
// TEMPLATE: LEGO1 0x100474e0
// _Tree<LegoPathCtrlEdge *,LegoPathCtrlEdge *,set<LegoPathCtrlEdge *,LegoPathCtrlEdgeCompare,allocator<LegoPathCtrlEdge *> >::_Kfn,LegoPathCtrlEdgeCompare,allocator<LegoPathCtrlEdge *> >::iterator::_Dec
// TEMPLATE: LEGO1 0x10047530
// _Tree<LegoPathCtrlEdge *,LegoPathCtrlEdge *,set<LegoPathCtrlEdge *,LegoPathCtrlEdgeCompare,allocator<LegoPathCtrlEdge *> >::_Kfn,LegoPathCtrlEdgeCompare,allocator<LegoPathCtrlEdge *> >::_Buynode
// TEMPLATE: LEGO1 0x100477d0
// _Tree<LegoPathCtrlEdge *,LegoPathCtrlEdge *,set<LegoPathCtrlEdge *,LegoPathCtrlEdgeCompare,allocator<LegoPathCtrlEdge *> >::_Kfn,LegoPathCtrlEdgeCompare,allocator<LegoPathCtrlEdge *> >::_Lrotate
// TEMPLATE: LEGO1 0x10047830
// _Tree<LegoPathCtrlEdge *,LegoPathCtrlEdge *,set<LegoPathCtrlEdge *,LegoPathCtrlEdgeCompare,allocator<LegoPathCtrlEdge *> >::_Kfn,LegoPathCtrlEdgeCompare,allocator<LegoPathCtrlEdge *> >::_Rrotate
// SYNTHETIC: LEGO1 0x10047940
// LegoPathCtrlEdge::`vector deleting destructor'
// SYNTHETIC: LEGO1 0x100479d0
// LegoPathCtrlEdge::LegoPathCtrlEdge
// SYNTHETIC: LEGO1 0x10047a30
// LegoPathCtrlEdge::~LegoPathCtrlEdge
// SYNTHETIC: LEGO1 0x10047ae0
// LegoUnknown100db7f4::~LegoUnknown100db7f4
// TEMPLATE: LEGO1 0x10048f70
// list<LegoBoundaryEdge,allocator<LegoBoundaryEdge> >::erase
// TEMPLATE: LEGO1 0x1004a780
// _Construct
// GLOBAL: LEGO1 0x100f4360
// _Tree<LegoPathCtrlEdge *,LegoPathCtrlEdge *,set<LegoPathCtrlEdge *,LegoPathCtrlEdgeCompare,allocator<LegoPathCtrlEdge *> >::_Kfn,LegoPathCtrlEdgeCompare,allocator<LegoPathCtrlEdge *> >::_Nil
// clang-format on
#endif // LEGOPATHCONTROLLER_H

View File

@ -0,0 +1,51 @@
#ifndef LEGOPATHEDGECONTAINER_H
#define LEGOPATHEDGECONTAINER_H
#include "mxgeometry/mxgeometry3d.h"
#include "mxstl/stlcompat.h"
#include "mxtypes.h"
class LegoPathBoundary;
struct LegoUnknown100db7f4;
// SIZE 0x08
struct LegoBoundaryEdge {
LegoUnknown100db7f4* m_edge; // 0x00
LegoPathBoundary* m_boundary; // 0x04
int operator==(LegoBoundaryEdge) const { return 0; }
int operator<(LegoBoundaryEdge) const { return 0; }
};
// SIZE 0x3c
struct LegoPathEdgeContainer : public list<LegoBoundaryEdge> {
enum {
c_bit1 = 0x01
};
// FUNCTION: BETA10 0x100118e0
LegoPathEdgeContainer()
{
m_boundary = NULL;
m_flags = 0;
}
void SetBit1(MxU32 p_flag)
{
if (p_flag) {
m_flags |= c_bit1;
}
else {
m_flags &= ~c_bit1;
}
}
MxU32 GetBit1() { return m_flags & c_bit1; }
Mx3DPointFloat m_unk0x0c; // 0x0c
Mx3DPointFloat m_unk0x20; // 0x20
LegoPathBoundary* m_boundary; // 0x34
MxU8 m_flags; // 0x38
};
#endif // LEGOPATHEDGECONTAINER_H

View File

@ -11,13 +11,20 @@ class LegoPathPresenter : public MxMediaPresenter {
LegoPathPresenter();
~LegoPathPresenter() override;
// FUNCTION: LEGO1 0x100449a0
inline const char* ClassName() const override // vtable+0x0c
// FUNCTION: BETA10 0x100c24d0
static const char* HandlerClassName()
{
// STRING: LEGO1 0x100f0690
return "LegoPathPresenter";
}
// FUNCTION: LEGO1 0x100449a0
// FUNCTION: BETA10 0x100c24a0
inline const char* ClassName() const override // vtable+0x0c
{
return HandlerClassName();
}
// FUNCTION: LEGO1 0x100449b0
inline MxBool IsA(const char* p_name) const override // vtable+0x10
{

View File

@ -0,0 +1,80 @@
#ifndef LEGOPATHSTRUCT_H
#define LEGOPATHSTRUCT_H
#include "decomp.h"
#include "mxatom.h"
#include "mxtypes.h"
class LegoPathActor;
class LegoWorld;
// VTABLE: LEGO1 0x100d7d9c
// SIZE 0x0c
struct LegoPathStructBase {
public:
enum {
c_bit1 = 0x01 << 24,
c_bit2 = 0x02 << 24,
c_bit3 = 0x04 << 24,
c_bit4 = 0x08 << 24,
c_bit5 = 0x10 << 24,
c_bit6 = 0x20 << 24,
c_bit7 = 0x40 << 24
};
LegoPathStructBase() : m_name(NULL), m_flags(0) {}
// FUNCTION: LEGO1 0x10047420
virtual ~LegoPathStructBase()
{
if (m_name != NULL) {
delete[] m_name;
}
}
char* m_name; // 0x04
MxU32 m_flags; // 0x08
};
// VTABLE: LEGO1 0x100d7da0
// SIZE 0x14
class LegoPathStruct : public LegoPathStructBase {
public:
enum Trigger {
c_camAnim = 'C',
c_d = 'D',
c_e = 'E',
c_g = 'G',
c_h = 'H',
c_music = 'M',
c_s = 'S',
c_w = 'W'
};
// FUNCTION: LEGO1 0x100473a0
LegoPathStruct() : m_world(NULL) {}
// FUNCTION: LEGO1 0x10047470
~LegoPathStruct() override {}
virtual void HandleTrigger(LegoPathActor* p_actor, MxBool p_direction, MxU32 p_data); // vtable+0x04
inline void SetWorld(LegoWorld* p_world) { m_world = p_world; }
inline void SetAtomId(const MxAtomId& p_atomId) { m_atomId = p_atomId; }
private:
MxBool HandleTrigger(LegoPathActor* p_actor, MxBool p_direction, MxU32 p_data, MxBool p_bool);
void FUN_1001bc40(const char* p_name, MxU32 p_data, MxBool p_bool);
void PlayMusic(MxBool p_direction, MxU32 p_data);
LegoWorld* m_world; // 0x0c
MxAtomId m_atomId; // 0x10
};
// SYNTHETIC: LEGO1 0x10047440
// LegoPathStructBase::`scalar deleting destructor'
// SYNTHETIC: LEGO1 0x10047890
// LegoPathStruct::`vector deleting destructor'
#endif // LEGOPATHSTRUCT_H

View File

@ -15,13 +15,20 @@ class LegoPhonemePresenter : public MxFlcPresenter {
LegoPhonemePresenter();
~LegoPhonemePresenter() override; // vtable+0x00
// FUNCTION: LEGO1 0x1004e310
inline const char* ClassName() const override // vtable+0x0c
// FUNCTION: BETA10 0x100c4220
static const char* HandlerClassName()
{
// STRING: LEGO1 0x100f064c
return "LegoPhonemePresenter";
}
// FUNCTION: LEGO1 0x1004e310
// FUNCTION: BETA10 0x100c41f0
inline const char* ClassName() const override // vtable+0x0c
{
return HandlerClassName();
}
void StartingTickle() override; // vtable+0x1c
void EndAction() override; // vtable+0x40
void LoadFrame(MxStreamChunk* p_chunk) override; // vtable+0x68

View File

@ -15,13 +15,20 @@ class LegoRace : public LegoWorld {
MxLong Notify(MxParam& p_param) override; // vtable+0x04
// FUNCTION: LEGO1 0x10015ba0
inline const char* ClassName() const override // vtable+0x0c
// FUNCTION: BETA10 0x100a8970
static const char* HandlerClassName()
{
// STRING: LEGO1 0x100f07c4
return "LegoRace";
}
// FUNCTION: LEGO1 0x10015ba0
// FUNCTION: BETA10 0x100a8940
inline const char* ClassName() const override // vtable+0x0c
{
return HandlerClassName();
}
// FUNCTION: LEGO1 0x10015bb0
inline MxBool IsA(const char* p_name) const override // vtable+0x10
{
@ -30,7 +37,7 @@ class LegoRace : public LegoWorld {
MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
MxBool VTable0x5c() override; // vtable+0x5c
MxBool VTable0x64() override; // vtable+0x64
MxBool Escape() override; // vtable+0x64
void Enable(MxBool p_enable) override; // vtable+0x68
virtual undefined4 VTable0x6c(undefined4) = 0; // vtable+0x6c
virtual undefined4 VTable0x70(undefined4); // vtable+0x70

View File

@ -42,8 +42,9 @@ class LegoRaceCar : public LegoCarRaceActor, public LegoRaceMap {
) override; // vtable+0x6c
void VTable0x70(float p_float) override; // vtable+0x70
MxResult VTable0x94(LegoPathActor* p_actor, MxBool p_bool) override; // vtable+0x94
void VTable0x98() override; // vtable+0x98
MxResult WaitForAnimation() override; // vtable+0x9c
void SwitchBoundary(LegoPathBoundary*& p_boundary, LegoUnknown100db7f4*& p_edge, float& p_unk0xe4)
override; // vtable+0x98
MxResult VTable0x9c() override; // vtable+0x9c
virtual void FUN_10012ea0(float p_worldSpeed);
virtual void FUN_10012ff0(float);

View File

@ -0,0 +1,55 @@
#ifndef LEGOROIMAPLIST_H
#define LEGOROIMAPLIST_H
#include "mxlist.h"
#include "mxtypes.h"
class LegoROI;
// VTABLE: LEGO1 0x100d9218
// class MxCollection<LegoROI **>
// VTABLE: LEGO1 0x100d9230
// class MxList<LegoROI **>
// VTABLE: LEGO1 0x100d9248
// class MxPtrList<LegoROI *>
// VTABLE: LEGO1 0x100d9260
// SIZE 0x18
class LegoROIMapList : public MxPtrList<LegoROI*> {
public:
LegoROIMapList() : MxPtrList<LegoROI*>(TRUE) {}
// SYNTHETIC: LEGO1 0x1006d360
// LegoROIMapList::`scalar deleting destructor'
};
// TEMPLATE: LEGO1 0x1006d250
// MxCollection<LegoROI * *>::Compare
// TEMPLATE: LEGO1 0x1006d260
// MxCollection<LegoROI * *>::~MxCollection<LegoROI * *>
// TEMPLATE: LEGO1 0x1006d2b0
// MxCollection<LegoROI * *>::Destroy
// TEMPLATE: LEGO1 0x1006d2c0
// MxList<LegoROI * *>::~MxList<LegoROI * *>
// TEMPLATE: LEGO1 0x1006d3d0
// MxPtrList<LegoROI *>::~MxPtrList<LegoROI *>
// TEMPLATE: LEGO1 0x1006d350
// MxPtrList<LegoROI *>::Destroy
// SYNTHETIC: LEGO1 0x1006d420
// MxCollection<LegoROI * *>::`scalar deleting destructor'
// SYNTHETIC: LEGO1 0x1006d490
// MxList<LegoROI * *>::`scalar deleting destructor'
// SYNTHETIC: LEGO1 0x1006d540
// MxPtrList<LegoROI *>::`scalar deleting destructor'
#endif // LEGOROIMAPLIST_H

View File

@ -11,13 +11,20 @@ class LegoTexturePresenter : public MxMediaPresenter {
LegoTexturePresenter() : m_textures(NULL) {}
~LegoTexturePresenter() override;
// FUNCTION: LEGO1 0x1000ce50
inline const char* ClassName() const override // vtable+0x0c
// FUNCTION: BETA10 0x100a73c0
static const char* HandlerClassName()
{
// STRING: LEGO1 0x100f0664
return "LegoTexturePresenter";
}
// FUNCTION: LEGO1 0x1000ce50
// FUNCTION: BETA10 0x100a7390
inline const char* ClassName() const override // vtable+0x0c
{
return HandlerClassName();
}
// FUNCTION: LEGO1 0x1000ce60
inline MxBool IsA(const char* p_name) const override // vtable+0x10
{

View File

@ -13,6 +13,7 @@ class MxPresenter;
// SIZE 0x78
struct LegoTranInfo {
enum {
c_bit1 = 0x01,
c_bit2 = 0x02
};
@ -22,7 +23,7 @@ struct LegoTranInfo {
m_unk0x08 = NULL;
m_unk0x0c = NULL;
m_unk0x10 = 0;
m_unk0x12 = -1;
m_location = -1;
m_unk0x14 = FALSE;
m_unk0x1c = NULL;
m_unk0x20 = NULL;
@ -41,7 +42,7 @@ struct LegoTranInfo {
LegoROI* m_unk0x08; // 0x08
MxMatrix* m_unk0x0c; // 0x0c
MxU8 m_unk0x10; // 0x10
MxS16 m_unk0x12; // 0x12
MxS16 m_location; // 0x12
MxBool m_unk0x14; // 0x14
MxBool m_unk0x15; // 0x15
MxU32 m_objectId; // 0x18

View File

@ -7,12 +7,12 @@
#include <windows.h>
class IslePathActor;
class MxAtomId;
class LegoEntity;
class LegoFile;
class LegoAnimPresenter;
class LegoNamedTexture;
class LegoPathActor;
class LegoROI;
class LegoTreeNode;
@ -24,10 +24,10 @@ 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 PlayCamAnim(LegoPathActor* p_actor, MxBool p_unused, MxU32 p_location, MxBool p_bool);
void FUN_1003eda0();
MxBool RemoveFromCurrentWorld(const MxAtomId& p_atomId, MxS32 p_id);
void FUN_1003ef00(MxBool);
void FUN_1003ef00(MxBool p_enable);
void SetAppCursor(WPARAM p_wparam);
MxBool FUN_1003ef60();
MxBool RemoveFromWorld(MxAtomId& p_entityAtom, MxS32 p_entityId, MxAtomId& p_worldAtom, MxS32 p_worldEntityId);

View File

@ -4,6 +4,7 @@
#include "mxvariable.h"
extern const char* g_varAMBULFUEL;
extern const char* g_varTOWFUEL;
extern const char* g_varVISIBILITY;
extern const char* g_varCAMERALOCATION;
extern const char* g_varCURSOR;

View File

@ -88,7 +88,7 @@ class LegoVideoManager : public MxVideoManager {
MxS32 m_cursorY; // 0x510
LPDIRECTDRAWSURFACE m_cursorSurface; // 0x514
RECT m_cursorRect; // 0x518
undefined4 m_unk0x528; // 0x528
LPDIRECTDRAWSURFACE m_unk0x528; // 0x528
MxBool m_drawFPS; // 0x52c
RECT m_fpsRect; // 0x530
HFONT m_arialFont; // 0x540

View File

@ -8,7 +8,6 @@
#include "mxpresenterlist.h"
#include "roi/legoroi.h"
class IslePathActor;
class LegoCameraController;
class LegoPathBoundary;
class LegoHideAnimPresenter;
@ -60,38 +59,41 @@ class LegoWorld : public LegoEntity {
// FUNCTION: LEGO1 0x100010a0
virtual void VTable0x60() {} // vtable+0x60
virtual MxBool VTable0x64(); // vtable+0x64
virtual MxBool Escape(); // vtable+0x64
virtual void Enable(MxBool p_enable); // vtable+0x68
MxBool PresentersPending();
void Remove(MxCore* p_object);
MxResult FUN_1001f720(
IslePathActor* p_actor,
const char* p_path,
MxResult PlaceActor(
LegoPathActor* p_actor,
const char* p_name,
MxS32 p_src,
float p_srcScale,
MxS32 p_dest,
float p_destScale
);
undefined4 FUN_1001fa70(IslePathActor* p_actor);
undefined4 FUN_1001fb70(
IslePathActor* p_actor,
MxResult PlaceActor(LegoPathActor* p_actor);
MxResult PlaceActor(
LegoPathActor* p_actor,
LegoAnimPresenter* p_presenter,
Vector3& p_position,
Vector3& p_direction
);
void FUN_1001fc80(IslePathActor* p_actor);
void RemoveActor(LegoPathActor* p_actor);
void FUN_1001fda0(LegoAnimPresenter* p_presenter);
void FUN_1001fe90(LegoAnimPresenter* p_presenter);
LegoPathBoundary* FindPathBoundary(const char* p_name);
void AddPath(LegoPathController* p_controller);
MxResult GetCurrPathInfo(LegoPathBoundary** p_path, MxS32& p_value);
MxResult GetCurrPathInfo(LegoPathBoundary** p_boundaries, MxS32& p_numL);
MxCore* Find(const char* p_class, const char* p_name);
MxCore* Find(const MxAtomId& p_atom, MxS32 p_entityId);
inline LegoCameraController* GetCamera() { return m_cameraController; }
inline LegoEntityList* GetEntityList() { return m_entityList; }
inline MxS32 GetScriptIndex() { return m_scriptIndex; }
inline MxCoreSet& GetUnknown0xd0() { return m_set0xd0; }
inline list<LegoROI*>& GetROIList() { return m_roiList; }
inline LegoHideAnimPresenter* GetHideAnimPresenter() { return m_hideAnimPresenter; }
inline void SetScriptIndex(MxS32 p_scriptIndex) { m_scriptIndex = p_scriptIndex; }

View File

@ -18,13 +18,20 @@ class LegoWorldPresenter : public LegoEntityPresenter {
static void configureLegoWorldPresenter(MxS32 p_legoWorldPresenterQuality);
// FUNCTION: LEGO1 0x10066630
inline const char* ClassName() const override // vtable+0x0c
// FUNCTION: BETA10 0x100e41c0
static const char* HandlerClassName()
{
// STRING: LEGO1 0x100f0608
return "LegoWorldPresenter";
}
// FUNCTION: LEGO1 0x10066630
// FUNCTION: BETA10 0x100e4190
inline const char* ClassName() const override // vtable+0x0c
{
return HandlerClassName();
}
// FUNCTION: LEGO1 0x10066640
inline MxBool IsA(const char* p_name) const override // vtable+0x10
{

View File

@ -7,7 +7,6 @@
#include "lego/legoomni/include/actions/actionsfwd.h"
#include "mxtypes.h"
class IslePathActor;
class LegoAnimationManager;
class LegoBuildingManager;
class LegoCharacterManager;
@ -16,6 +15,7 @@ class LegoGameState;
class LegoInputManager;
class LegoNavController;
class LegoOmni;
class LegoPathActor;
class LegoPlantManager;
class LegoROI;
class LegoSoundManager;
@ -40,7 +40,7 @@ LegoControlManager* ControlManager();
LegoGameState* GameState();
LegoAnimationManager* AnimationManager();
LegoNavController* NavController();
IslePathActor* CurrentActor();
LegoPathActor* CurrentActor();
LegoWorld* CurrentWorld();
LegoCharacterManager* CharacterManager();
ViewManager* GetViewManager();
@ -51,7 +51,7 @@ ViewLODListManager* GetViewLODListManager();
void FUN_10015820(MxBool p_disable, MxU16 p_flags);
LegoROI* FindROI(const char* p_name);
void SetROIVisible(const char* p_name, MxBool p_visible);
void SetCurrentActor(IslePathActor* p_currentActor);
void SetCurrentActor(LegoPathActor* p_currentActor);
MxResult StartActionIfUnknown0x13c(MxDSAction& p_dsAction);
void DeleteAction();
LegoWorld* FindWorld(const MxAtomId& p_atom, MxS32 p_entityid);

View File

@ -23,12 +23,12 @@ class Motocycle : public IslePathActor {
return !strcmp(p_name, Motocycle::ClassName()) || IslePathActor::IsA(p_name);
}
MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
void VTable0x70(float p_float) override; // vtable+0x70
MxU32 VTable0xcc() override; // vtable+0xcc
MxU32 VTable0xd4(LegoControlManagerEvent& p_param) override; // vtable+0xd4
MxU32 VTable0xdc(MxType19NotificationParam&) override; // vtable+0xdc
void VTable0xe4() override; // vtable+0xe4
MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
void VTable0x70(float p_float) override; // vtable+0x70
MxU32 HandleClick() override; // vtable+0xcc
MxU32 HandleControl(LegoControlManagerEvent& p_param) override; // vtable+0xd4
MxU32 VTable0xdc(MxType19NotificationParam&) override; // vtable+0xdc
void VTable0xe4() override; // vtable+0xe4
void FUN_10035e10();

View File

@ -37,11 +37,13 @@ class MxControlPresenter : public MxCompositePresenter {
void Enable(MxBool p_enable) override; // vtable+0x54
MxBool VTable0x64(undefined4 p_undefined) override; // vtable+0x64
virtual void VTable0x68(MxBool p_unk0x50); // vtable+0x68
virtual void VTable0x6c(MxS16); // vtable+0x6c
virtual void VTable0x6c(MxS16 p_unk0x4e); // vtable+0x6c
MxBool FUN_10044480(LegoControlManagerEvent* p_event, MxPresenter* p_presenter);
MxBool FUN_10044270(MxS32 p_x, MxS32 p_y, MxVideoPresenter* p_presenter);
inline MxS16 GetUnknown0x4e() { return m_unk0x4e; }
private:
undefined2 m_unk0x4c; // 0x4c
MxS16 m_unk0x4e; // 0x4e

View File

@ -4,6 +4,8 @@
#include "decomp.h"
#include "isleactor.h"
class Act1State;
class PizzaMissionState;
class SkateBoard;
// VTABLE: LEGO1 0x100d7380
@ -29,10 +31,12 @@ class Pizza : public IsleActor {
}
MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
undefined4 VTable0x68() override; // vtable+0x68
undefined4 HandleClick() override; // vtable+0x68
undefined4 HandleEndAction(MxEndActionNotificationParam&) override; // vtable+0x74
undefined4 VTable0x80(MxParam&) override; // vtable+0x80
void CreateState();
void FUN_10038220(MxU32 p_objectId);
void FUN_100382b0();
void FUN_10038380();
@ -42,14 +46,14 @@ class Pizza : public IsleActor {
// Pizza::`scalar deleting destructor'
private:
undefined4 m_unk0x7c; // 0x7c
undefined4 m_unk0x80; // 0x80
SkateBoard* m_skateboard; // 0x84
undefined4 m_unk0x88; // 0x88
undefined4 m_unk0x8c; // 0x8c
undefined4 m_unk0x90; // 0x90
undefined4 m_unk0x94; // 0x94
undefined m_unk0x98; // 0x98
PizzaMissionState* m_state; // 0x7c
undefined4 m_unk0x80; // 0x80
SkateBoard* m_skateboard; // 0x84
Act1State* m_act1state; // 0x88
undefined4 m_unk0x8c; // 0x8c
undefined4 m_unk0x90; // 0x90
undefined4 m_unk0x94; // 0x94
undefined m_unk0x98; // 0x98
};
#endif // PIZZA_H

View File

@ -37,10 +37,8 @@ class PizzaMissionState : public LegoState {
// SYNTHETIC: LEGO1 0x10039350
// PizzaMissionState::`scalar deleting destructor'
private:
PizzaMissionStateEntry* GetState(MxU8 p_id);
protected:
undefined4 m_unk0x08; // 0x08
undefined4 m_unk0x0c; // 0x0c
PizzaMissionStateEntry m_state[5]; // 0x10

View File

@ -27,14 +27,14 @@ class Pizzeria : public IsleActor {
}
MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
undefined4 VTable0x68() override; // vtable+0x68
undefined4 HandleClick() override; // vtable+0x68
void CreateState();
// SYNTHETIC: LEGO1 0x1000e8d0
// Pizzeria::`scalar deleting destructor'
private:
void Init();
PizzeriaState* m_pizzeriaState; // 0x7c
PizzaMissionState* m_pizzaMissionState; // 0x80
};

View File

@ -36,6 +36,8 @@ class PizzeriaState : public LegoState {
// SYNTHETIC: LEGO1 0x10017ce0
// PizzeriaState::`scalar deleting destructor'
MxU32 FUN_10017d70();
private:
Playlist m_unk0x08[5]; // 0x08
PizzeriaStateStruct m_unk0x44; // 0x44

View File

@ -36,14 +36,14 @@ class Police : public LegoWorld {
MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
void ReadyWorld() override; // vtable+0x50
MxBool VTable0x5c() override; // vtable+0x5c
MxBool VTable0x64() override; // vtable+0x64
MxBool Escape() override; // vtable+0x64
void Enable(MxBool p_enable) override; // vtable+0x68
// SYNTHETIC: LEGO1 0x1005e300
// Police::`scalar deleting destructor'
private:
MxLong HandleClick(LegoControlManagerEvent& p_param);
MxLong HandleControl(LegoControlManagerEvent& p_param);
MxLong HandleEndAction(MxEndActionNotificationParam& p_param);
MxLong HandleKeyPress(LegoEventNotificationParam& p_param);

View File

@ -25,7 +25,7 @@ class RaceCar : public IslePathActor {
}
MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
MxU32 VTable0xcc() override; // vtable+0xcc
MxU32 HandleClick() override; // vtable+0xcc
// SYNTHETIC: LEGO1 0x10028400
// RaceCar::`scalar deleting destructor'

View File

@ -30,6 +30,7 @@ class Radio : public MxCore {
}
void Initialize(MxBool p_und);
void CreateState();
void Play();
void Stop();
@ -39,14 +40,12 @@ class Radio : public MxCore {
// Radio::`scalar deleting destructor'
private:
void CreateRadioState();
RadioState* m_state; // 0x08
MxBool m_unk0x0c; // 0x0c
MxBool m_audioEnabled; // 0x0d
MxLong HandleEndAction(MxEndActionNotificationParam& p_param);
MxLong HandleClick(LegoControlManagerEvent& p_param);
MxLong HandleControl(LegoControlManagerEvent& p_param);
};
#endif // RADIO_H

View File

@ -34,7 +34,7 @@ class RegistrationBook : public LegoWorld {
MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
void ReadyWorld() override; // vtable+0x50
MxBool VTable0x64() override; // vtable+0x64
MxBool Escape() override; // vtable+0x64
void Enable(MxBool p_enable) override; // vtable+0x68
inline void PlayAction(MxU32 p_objectId);
@ -64,7 +64,7 @@ class RegistrationBook : public LegoWorld {
MxLong HandleEndAction(MxEndActionNotificationParam& p_param);
MxLong HandleKeyPress(MxU8 p_key);
MxLong HandleClick(LegoControlManagerEvent& p_param);
MxLong HandleControl(LegoControlManagerEvent& p_param);
MxLong HandleNotification19(MxParam& p_param);
void FUN_100775c0(MxS16 p_playerIndex);
void WriteInfocenterLetters(MxS16);

View File

@ -35,7 +35,7 @@ class Score : public LegoWorld {
MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
void ReadyWorld() override; // vtable+0x50
MxBool VTable0x5c() override; // vtable+0x5c
MxBool VTable0x64() override; // vtable+0x64
MxBool Escape() override; // vtable+0x64
void Enable(MxBool p_enable) override; // vtable+0x68
void Paint();

View File

@ -26,19 +26,21 @@ class SkateBoard : public IslePathActor {
return !strcmp(p_name, SkateBoard::ClassName()) || IslePathActor::IsA(p_name);
}
MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
MxU32 VTable0xcc() override; // vtable+0xcc
MxU32 VTable0xd0() override; // vtable+0xd0
MxU32 VTable0xd4(LegoControlManagerEvent& p_param) override; // vtable+0xd4
void VTable0xe4() override; // vtable+0xe4
MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
MxU32 HandleClick() override; // vtable+0xcc
MxU32 VTable0xd0() override; // vtable+0xd0
MxU32 HandleControl(LegoControlManagerEvent& p_param) override; // vtable+0xd4
void VTable0xe4() override; // vtable+0xe4
void FUN_10010510();
inline void SetUnknown0x160(MxBool p_unk0x160) { m_unk0x160 = p_unk0x160; }
void ActivateSceneActions();
// SYNTHETIC: LEGO1 0x1000ff60
// SkateBoard::`scalar deleting destructor'
private:
void FUN_10010270(MxBool p_enable);
void EnableScenePresentation(MxBool p_enable);
MxBool m_unk0x160; // 0x160
Act1State* m_act1state; // 0x164

View File

@ -4,6 +4,8 @@
#include "decomp.h"
#include "islepathactor.h"
class TowTrackMissionState;
// VTABLE: LEGO1 0x100d7ee0
// SIZE 0x180
class TowTrack : public IslePathActor {
@ -26,30 +28,32 @@ class TowTrack : public IslePathActor {
MxLong Notify(MxParam& p_param) override; // vtable+0x04
MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
void VTable0x70(float p_float) override; // vtable+0x70
MxU32 VTable0xcc() override; // vtable+0xcc
MxU32 VTable0xd4(LegoControlManagerEvent& p_param) override; // vtable+0xd4
MxU32 HandleClick() override; // vtable+0xcc
MxU32 HandleControl(LegoControlManagerEvent& p_param) override; // vtable+0xd4
MxU32 VTable0xd8(LegoEndAnimNotificationParam& p_param) override; // vtable+0xd8
MxU32 VTable0xdc(MxType19NotificationParam& p_param) override; // vtable+0xdc
void VTable0xe4() override; // vtable+0xe4
void CreateState();
void FUN_1004dab0();
void FUN_1004dad0();
void FUN_1004db10();
void FUN_1004dbe0();
// SYNTHETIC: LEGO1 0x1004c950
// TowTrack::`scalar deleting destructor'
private:
// TODO: TowTrack field types
undefined m_unk0x154[4];
MxS32 m_unk0x164;
MxS16 m_unk0x168;
MxS16 m_unk0x16a;
MxS16 m_unk0x16c;
MxS16 m_unk0x16e;
MxS32 m_unk0x170;
MxS32 m_unk0x174;
MxFloat m_unk0x178;
undefined4 m_unk0x17c;
undefined4 m_unk0x160; // 0x160
TowTrackMissionState* m_state; // 0x164
MxS16 m_unk0x168; // 0x168
MxS16 m_unk0x16a; // 0x16a
MxS16 m_unk0x16c; // 0x16c
MxS16 m_unk0x16e; // 0x16e
MxS32 m_unk0x170; // 0x170
MxS32 m_unk0x174; // 0x174
MxFloat m_unk0x178; // 0x178
MxFloat m_time; // 0x17c
};
#endif // TOWTRACK_H

View File

@ -45,7 +45,6 @@ class TowTrackMissionState : public LegoState {
// SYNTHETIC: LEGO1 0x1004e060
// TowTrackMissionState::`scalar deleting destructor'
protected:
undefined4 m_unk0x08; // 0x08
undefined4 m_unk0x0c; // 0x0c
MxU8 m_unk0x10; // 0x10

View File

@ -34,7 +34,7 @@ Act1State::Act1State() : m_unk0x00c(0), m_unk0x00e(0), m_unk0x008(NULL), m_unk0x
m_unk0x1b0 = NULL;
m_unk0x021 = 1;
m_elevFloor = Act1State::c_floor1;
m_unk0x00c = _countof(g_unk0x100f37f0);
m_unk0x00c = sizeOfArray(g_unk0x100f37f0);
m_unk0x1b4 = NULL;
m_unk0x1b8 = NULL;
m_unk0x208 = NULL;

View File

@ -22,7 +22,7 @@ MxResult Act2Actor::VTable0x94(LegoPathActor*, MxBool)
}
// STUB: LEGO1 0x10018a20
MxResult Act2Actor::WaitForAnimation()
MxResult Act2Actor::VTable0x9c()
{
// TODO
return SUCCESS;

View File

@ -18,17 +18,17 @@ DECOMP_SIZE_ASSERT(Ambulance, 0x184)
// FUNCTION: LEGO1 0x10035ee0
Ambulance::Ambulance()
{
this->m_unk0x168 = 0;
this->m_unk0x16a = -1;
this->m_state = NULL;
this->m_unk0x16c = 0;
this->m_unk0x174 = -1;
this->m_unk0x16e = 0;
this->m_unk0x178 = -1;
this->m_unk0x170 = 0;
this->m_unk0x172 = 0;
this->m_unk0x13c = 40.0;
this->m_unk0x17c = 1.0;
m_unk0x168 = 0;
m_unk0x16a = -1;
m_state = NULL;
m_unk0x16c = 0;
m_unk0x174 = -1;
m_unk0x16e = 0;
m_unk0x178 = -1;
m_unk0x170 = 0;
m_unk0x172 = 0;
m_unk0x13c = 40.0;
m_unk0x17c = 1.0;
}
// FUNCTION: LEGO1 0x10035f90
@ -58,7 +58,7 @@ MxResult Ambulance::Create(MxDSAction& p_dsAction)
m_state = (AmbulanceMissionState*) GameState()->GetState("AmbulanceMissionState");
if (!m_state) {
m_state = new AmbulanceMissionState();
m_state->SetUnknown0x08(0);
m_state->m_unk0x08 = 0;
GameState()->RegisterState(m_state);
}
}
@ -66,7 +66,6 @@ MxResult Ambulance::Create(MxDSAction& p_dsAction)
VariableTable()->SetVariable(g_varAMBULFUEL, "1.0");
m_unk0x17c = 1.0;
m_time = Timer()->GetTime();
return result;
}
@ -76,6 +75,19 @@ void Ambulance::VTable0x70(float p_float)
// TODO
}
// FUNCTION: LEGO1 0x100363f0
void Ambulance::CreateState()
{
LegoGameState* gameState = GameState();
AmbulanceMissionState* state = (AmbulanceMissionState*) gameState->GetState("AmbulanceMissionState");
if (state == NULL) {
state = (AmbulanceMissionState*) gameState->CreateState("AmbulanceMissionState");
}
m_state = state;
}
// STUB: LEGO1 0x10036420
MxLong Ambulance::Notify(MxParam& p_param)
{
@ -91,7 +103,7 @@ MxU32 Ambulance::VTable0xdc(MxType19NotificationParam& p_param)
}
// STUB: LEGO1 0x10036ce0
MxU32 Ambulance::VTable0xcc()
MxU32 Ambulance::HandleClick()
{
// TODO
return 0;
@ -110,7 +122,7 @@ void Ambulance::VTable0xe4()
}
// STUB: LEGO1 0x10036f90
MxU32 Ambulance::VTable0xd4(LegoControlManagerEvent& p_param)
MxU32 Ambulance::HandleControl(LegoControlManagerEvent& p_param)
{
// TODO
return 0;
@ -128,3 +140,15 @@ MxResult Ambulance::Tickle()
// TODO
return SUCCESS;
}
// STUB: LEGO1 0x10037240
void Ambulance::FUN_10037240()
{
// TODO
}
// STUB: LEGO1 0x10037250
void Ambulance::FUN_10037250()
{
// TODO
}

Some files were not shown because too many files have changed in this diff Show More