Merge commit 'ac41854149776a30b7acaa89808cee0a7cad7380' into new-isle-decomp

This commit is contained in:
Anonymous Maarten 2024-06-25 17:47:35 +02:00
commit 94081312c3
167 changed files with 2747 additions and 919 deletions
CMakeLists.txt
LEGO1
define.cppdefine.h
lego/legoomni
include
src

View file

@ -304,12 +304,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

View file

@ -20,6 +20,10 @@ const char* g_strAUTO_CREATE = "AUTO_CREATE";
// 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";
@ -68,6 +72,14 @@ 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";

View file

@ -34,5 +34,8 @@ 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

@ -32,7 +32,7 @@ public:
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 @@ public:
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 @@ public:
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 @@ public:
// SYNTHETIC: LEGO1 0x100376c0
// AmbulanceMissionState::`scalar deleting destructor'
protected:
undefined4 m_unk0x08; // 0x08
undefined4 m_unk0x0c; // 0x0c
MxU16 m_unk0x10; // 0x10

View file

@ -23,10 +23,10 @@ public:
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 @@ public:
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 @@ public:
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 @@ public:
// 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 @@ public:
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 @@ public:
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 @@ public:
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 @@ protected:
UnknownMx4DPointFloat m_unk0x1f4; // 0x1f4
HelicopterState* m_state; // 0x228
MxAtomId m_script; // 0x22c
private:
void GetState();
};
#endif // HELICOPTER_H

View file

@ -31,7 +31,7 @@ public:
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 @@ public:
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 @@ private:
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 @@ public:
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 @@ private:
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 @@ public:
// 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 @@ public:
private:
LegoGameState::Area m_destLocation; // 0xf8
MxLong HandleClick(LegoControlManagerEvent& p_param);
MxLong HandleControl(LegoControlManagerEvent& p_param);
};
#endif // INFOCENTERDOOR_H

View file

@ -6,19 +6,20 @@
#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
@ -57,19 +58,26 @@ public:
// 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 @@ public:
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 @@ public:
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 @@ public:
// FUNCTION: LEGO1 0x1000e650
virtual undefined4 VTable0x80(MxParam&) { return 0; } // vtable+0x80
private:
protected:
LegoWorld* m_world; // 0x78
};

View file

@ -106,13 +106,13 @@ public:
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 @@ public:
// 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 @@ public:
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 @@ public:
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 @@ public:
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

@ -1,5 +1,5 @@
#ifndef LEGOUNKNOWN100D5778_H
#define LEGOUNKNOWN100D5778_H
#ifndef LEGO3DSOUND_H
#define LEGO3DSOUND_H
#include "decomp.h"
#include "mxtypes.h"
@ -10,20 +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
@ -34,7 +34,7 @@ private:
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 @@ public:
// 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 @@ public:
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 @@ public:
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 @@ public:
// 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

@ -28,7 +28,7 @@ public:
// SIZE 0x18
struct Character {
char* m_name; // 0x00
MxBool m_unk0x04; // 0x04
MxBool m_inExtras; // 0x04
MxS8 m_vehicleId; // 0x05
undefined m_unk0x06; // 0x06 (unused?)
MxBool m_unk0x07; // 0x07
@ -108,10 +108,11 @@ public:
void FUN_10062770();
void PurgeExtra(MxBool p_und);
void AddExtra(MxS32 p_location, MxBool p_und);
void FUN_10063270(LegoROIList*, LegoAnimPresenter*);
void FUN_10063270(LegoROIList* p_list, LegoAnimPresenter* p_presenter);
void FUN_10063780(LegoROIList* p_list);
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);
@ -150,9 +151,12 @@ private:
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_unk0x14, MxU32 p_characterId);
MxBool FUN_10063b90(LegoWorld* p_world, LegoExtraActor* p_actor, MxU8 p_mood, MxU32 p_characterId);
void FUN_10063d10();
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);
@ -169,7 +173,7 @@ private:
MxS32 p_unk0x10,
float p_speed
);
void FUN_100648f0(LegoTranInfo*, MxLong);
void FUN_100648f0(LegoTranInfo* p_tranInfo, MxLong p_unk0x404);
void FUN_10064b50(MxLong p_time);
MxS32 m_scriptIndex; // 0x08

View file

@ -29,13 +29,20 @@ public:
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
{

View file

@ -41,34 +41,41 @@ public:
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 @@ public:
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:
@ -124,9 +136,11 @@ protected:
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,7 +2,7 @@
#define LEGOCACHSOUND_H
#include "decomp.h"
#include "legounknown100d5778.h"
#include "lego3dsound.h"
#include "mxcore.h"
#include "mxstring.h"
@ -47,7 +47,7 @@ private:
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 @@ public:
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

@ -29,7 +29,7 @@ public:
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 @@ public:
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

@ -71,7 +71,7 @@ public:
LegoCharacterInfo* GetInfo(LegoROI* p_roi);
MxBool SwitchHat(LegoROI* p_roi);
MxU32 FUN_10085140(LegoROI* p_roi, MxBool p_und);
MxU8 FUN_10085180(LegoROI* p_roi);
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 @@ public:
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 @@ public:
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 @@ public:
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

@ -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

@ -25,13 +25,20 @@ public:
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
{

View file

@ -13,13 +13,20 @@ public:
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

@ -11,13 +11,20 @@ public:
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
{

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 @@ public:
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 @@ public:
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 @@ private:
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 @@ public:
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 @@ public:
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

@ -13,13 +13,20 @@ public:
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 @@ public:
// 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

@ -126,6 +126,7 @@ public:
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; }
@ -155,7 +156,7 @@ protected:
MxU32 m_state; // 0xdc
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

View file

@ -131,6 +131,39 @@ private:
// 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

@ -81,7 +81,7 @@ public:
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_name,
MxS32 p_src,
@ -89,13 +89,13 @@ public:
MxS32 p_dest,
float p_destScale
);
MxResult FUN_10046050(
MxResult PlaceActor(
LegoPathActor* p_actor,
LegoAnimPresenter* p_presenter,
Vector3& p_position,
Vector3& p_direction
);
MxResult AddActor(LegoPathActor* p_actor);
MxResult PlaceActor(LegoPathActor* p_actor);
MxResult RemoveActor(LegoPathActor* p_actor);
void FUN_100468f0(LegoAnimPresenter* p_presenter);
void FUN_10046930(LegoAnimPresenter* p_presenter);

View file

@ -11,13 +11,20 @@ public:
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

@ -15,13 +15,20 @@ public:
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 @@ public:
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 @@ public:
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

@ -11,13 +11,20 @@ public:
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

@ -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

@ -8,7 +8,6 @@
#include "mxpresenterlist.h"
#include "roi/legoroi.h"
class IslePathActor;
class LegoCameraController;
class LegoPathBoundary;
class LegoHideAnimPresenter;
@ -60,7 +59,7 @@ public:
// 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();
@ -73,14 +72,14 @@ public:
MxS32 p_dest,
float p_destScale
);
MxResult AddPathActor(LegoPathActor* p_actor);
MxResult FUN_1001fb70(
MxResult PlaceActor(LegoPathActor* p_actor);
MxResult PlaceActor(
LegoPathActor* p_actor,
LegoAnimPresenter* p_presenter,
Vector3& p_position,
Vector3& p_direction
);
void RemovePathActor(LegoPathActor* 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);

View file

@ -18,13 +18,20 @@ public:
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 @@ public:
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 @@ public:
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 @@ public:
}
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 @@ public:
// 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 @@ public:
// 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 @@ public:
}
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 @@ public:
// 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 @@ public:
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 @@ public:
}
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 @@ public:
}
void Initialize(MxBool p_und);
void CreateState();
void Play();
void Stop();
@ -39,14 +40,12 @@ public:
// 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 @@ public:
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 @@ private:
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 @@ public:
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,11 +26,13 @@ public:
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
inline void SetUnknown0x160(MxBool p_unk0x160) { m_unk0x160 = p_unk0x160; }
void ActivateSceneActions();

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 @@ public:
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 @@ public:
// SYNTHETIC: LEGO1 0x1004e060
// TowTrackMissionState::`scalar deleting destructor'
protected:
undefined4 m_unk0x08; // 0x08
undefined4 m_unk0x0c; // 0x0c
MxU8 m_unk0x10; // 0x10

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
}

View file

@ -45,14 +45,14 @@ void Bike::VTable0xe4()
}
// STUB: LEGO1 0x100769a0
MxU32 Bike::VTable0xcc()
MxU32 Bike::HandleClick()
{
// TODO
return 0;
}
// STUB: LEGO1 0x10076aa0
MxU32 Bike::VTable0xd4(LegoControlManagerEvent& p_param)
MxU32 Bike::HandleControl(LegoControlManagerEvent& p_param)
{
// TODO
return 0;

View file

@ -31,14 +31,14 @@ void DuneBuggy::VTable0xe4()
}
// STUB: LEGO1 0x10068060
MxU32 DuneBuggy::VTable0xcc()
MxU32 DuneBuggy::HandleClick()
{
// TODO
return 0;
}
// STUB: LEGO1 0x100681b0
MxU32 DuneBuggy::VTable0xd4(LegoControlManagerEvent& p_param)
MxU32 DuneBuggy::HandleControl(LegoControlManagerEvent& p_param)
{
// TODO
return 0;

View file

@ -40,21 +40,22 @@ Helicopter::~Helicopter()
MxResult Helicopter::Create(MxDSAction& p_dsAction)
{
MxResult result = IslePathActor::Create(p_dsAction);
LegoWorld* world = CurrentWorld();
SetWorld(world);
if (world->IsA("Act3")) {
((Act3*) GetWorld())->SetUnknown420c(this);
m_world = CurrentWorld();
if (m_world->IsA("Act3")) {
((Act3*) m_world)->SetUnknown420c(this);
}
world = GetWorld();
if (world) {
world->Add(this);
if (m_world != NULL) {
m_world->Add(this);
}
GetState();
CreateState();
return result;
}
// FUNCTION: LEGO1 0x10003320
void Helicopter::GetState()
void Helicopter::CreateState()
{
m_state = (HelicopterState*) GameState()->GetState("HelicopterState");
if (!m_state) {
@ -78,11 +79,12 @@ void Helicopter::VTable0xe4()
if (GameState()->GetCurrentAct() == LegoGameState::e_act1) {
GameState()->SetCurrentArea(LegoGameState::e_copter);
if (CurrentActor() && CurrentActor()->IsA("IslePathActor")) {
CurrentActor()->SpawnPlayer(
LegoGameState::e_unk55,
TRUE,
IslePathActor::c_spawnBit1 | IslePathActor::c_playMusic | IslePathActor::c_spawnBit3
);
((IslePathActor*) CurrentActor())
->SpawnPlayer(
LegoGameState::e_unk55,
TRUE,
IslePathActor::c_spawnBit1 | IslePathActor::c_playMusic | IslePathActor::c_spawnBit3
);
}
}
@ -102,7 +104,7 @@ void Helicopter::VTable0xe4()
}
// FUNCTION: LEGO1 0x10003480
MxU32 Helicopter::VTable0xcc()
MxU32 Helicopter::HandleClick()
{
if (!FUN_1003ef60()) {
return 1;
@ -116,7 +118,7 @@ MxU32 Helicopter::VTable0xcc()
if (CurrentActor()) {
if (CurrentActor()->GetActorId() != GameState()->GetActorId()) {
CurrentActor()->VTable0xe4();
((IslePathActor*) CurrentActor())->VTable0xe4();
}
}
@ -151,7 +153,7 @@ MxU32 Helicopter::VTable0xcc()
}
// FUNCTION: LEGO1 0x100035e0
MxU32 Helicopter::VTable0xd4(LegoControlManagerEvent& p_param)
MxU32 Helicopter::HandleControl(LegoControlManagerEvent& p_param)
{
MxU32 ret = 0;
MxAtomId script;
@ -190,7 +192,7 @@ MxU32 Helicopter::VTable0xd4(LegoControlManagerEvent& p_param)
if (m_state->GetUnkown8() == 0) {
state->SetUnknown18(4);
m_state->SetUnknown8(1);
m_world->RemovePathActor(this);
m_world->RemoveActor(this);
InvokeAction(Extra::ActionType::e_start, script, IsleScript::c_HelicopterTakeOff_Anim, NULL);
SetState(0);
}
@ -203,7 +205,7 @@ MxU32 Helicopter::VTable0xd4(LegoControlManagerEvent& p_param)
}
if (m_state->GetUnkown8() == 2) {
m_state->SetUnknown8(3);
m_world->RemovePathActor(this);
m_world->RemoveActor(this);
InvokeAction(Extra::ActionType::e_start, script, IsleScript::c_HelicopterLand_Anim, NULL);
SetState(4);
}
@ -376,11 +378,7 @@ void Helicopter::VTable0x70(float p_float)
Vector3 v2(m_unk0x1a8[3]);
float* loc = m_unk0x1a8[3];
mat.SetIdentity();
float fa[4];
Vector4 v3(fa);
if (m_unk0x1f4.FUN_100040a0(v3, f2) == SUCCESS) {
mat.FromQuaternion(v3);
}
m_unk0x1f4.Unknown6(mat, f2);
v2.SetVector(loc);
v2.Sub(&v);
v2.Mul(f2);

View file

@ -42,8 +42,8 @@ MxLong IsleActor::Notify(MxParam& p_param)
case c_notificationButtonDown:
result = HandleButtonDown((MxNotificationParam&) p_param);
break;
case c_notificationType11:
result = VTable0x68();
case c_notificationClick:
result = HandleClick();
break;
case c_notificationEndAnim:
result = VTable0x70();

View file

@ -27,7 +27,7 @@ IslePathActor::IslePathActor()
m_world = NULL;
m_unk0x13c = 6.0;
m_unk0x15c = 1.0;
m_unk0x158 = 0;
m_unk0x158 = NULL;
}
// FUNCTION: LEGO1 0x1001a280
@ -53,11 +53,11 @@ MxLong IslePathActor::Notify(MxParam& p_param)
case c_notificationType0:
ret = VTable0xd0();
break;
case c_notificationType11:
ret = VTable0xcc();
break;
case c_notificationClick:
ret = VTable0xd4((LegoControlManagerEvent&) p_param);
ret = HandleClick();
break;
case c_notificationControl:
ret = HandleControl((LegoControlManagerEvent&) p_param);
break;
case c_notificationEndAnim:
ret = VTable0xd8((LegoEndAnimNotificationParam&) p_param);
@ -471,7 +471,7 @@ void IslePathActor::SpawnPlayer(LegoGameState::Area p_area, MxBool p_und, MxU8 p
assert(world);
if (m_world != NULL) {
m_world->RemovePathActor(this);
m_world->RemoveActor(this);
m_world->Remove(this);
VideoManager()->Get3DManager()->Remove(*m_roi);
}
@ -556,7 +556,7 @@ void IslePathActor::SpawnPlayer(LegoGameState::Area p_area, MxBool p_und, MxU8 p
void IslePathActor::VTable0xec(MxMatrix p_transform, LegoPathBoundary* p_boundary, MxBool p_reset)
{
if (m_world) {
m_world->RemovePathActor(this);
m_world->RemoveActor(this);
m_world->Remove(this);
VideoManager()->Get3DManager()->GetLego3DView()->Remove(*m_roi);
}
@ -566,7 +566,7 @@ void IslePathActor::VTable0xec(MxMatrix p_transform, LegoPathBoundary* p_boundar
VTable0xe0();
}
m_world->AddPathActor(this);
m_world->PlaceActor(this);
p_boundary->AddActor(this);
if (m_actorId != GameState()->GetActorId()) {
m_world->Add(this);
@ -579,8 +579,17 @@ void IslePathActor::VTable0xec(MxMatrix p_transform, LegoPathBoundary* p_boundar
}
}
// STUB: LEGO1 0x1001b660
// FUNCTION: LEGO1 0x1001b660
// FUNCTION: BETA10 0x10036ea2
void IslePathActor::FUN_1001b660()
{
// TODO
MxMatrix transform(m_roi->GetLocal2World());
Vector3 position(transform[0]);
Vector3 direction(transform[1]);
Vector3 up(transform[2]);
((Vector3&) up).Mul(-1.0f);
position.EqualsCross(&direction, &up);
m_roi->FUN_100a58f0(transform);
m_roi->VTable0x14();
}

View file

@ -30,14 +30,14 @@ void Jetski::VTable0xe4()
}
// STUB: LEGO1 0x1007e750
MxU32 Jetski::VTable0xcc()
MxU32 Jetski::HandleClick()
{
// TODO
return 0;
}
// STUB: LEGO1 0x1007e8e0
MxU32 Jetski::VTable0xd4(LegoControlManagerEvent& p_param)
MxU32 Jetski::HandleControl(LegoControlManagerEvent& p_param)
{
// TODO
return 0;

View file

@ -32,13 +32,13 @@ JukeBoxEntity::~JukeBoxEntity()
// FUNCTION: LEGO1 0x10085e40
MxLong JukeBoxEntity::Notify(MxParam& p_param)
{
if (((MxNotificationParam&) p_param).GetType() == c_notificationType11) {
if (((MxNotificationParam&) p_param).GetType() == c_notificationClick) {
if (!FUN_1003ef60()) {
return 1;
}
if (CurrentActor()->GetActorId() != GameState()->GetActorId()) {
CurrentActor()->VTable0xe4();
((IslePathActor*) CurrentActor())->VTable0xe4();
}
((Isle*) FindWorld(*g_isleScript, 0))->SetDestLocation(LegoGameState::e_jukeboxw);

View file

@ -31,14 +31,14 @@ void Motocycle::VTable0xe4()
}
// STUB: LEGO1 0x10035c50
MxU32 Motocycle::VTable0xcc()
MxU32 Motocycle::HandleClick()
{
// TODO
return 0;
}
// STUB: LEGO1 0x10035d70
MxU32 Motocycle::VTable0xd4(LegoControlManagerEvent& p_param)
MxU32 Motocycle::HandleControl(LegoControlManagerEvent& p_param)
{
// TODO
return 0;

View file

@ -1,17 +1,23 @@
#include "pizza.h"
#include "act1state.h"
#include "isle_actions.h"
#include "legogamestate.h"
#include "legoworld.h"
#include "misc.h"
#include "mxmisc.h"
#include "mxticklemanager.h"
#include "pizzamissionstate.h"
DECOMP_SIZE_ASSERT(Pizza, 0x9c)
// FUNCTION: LEGO1 0x10037ef0
Pizza::Pizza()
{
m_unk0x7c = 0;
m_state = NULL;
m_unk0x80 = 0;
m_skateboard = NULL;
m_unk0x88 = 0;
m_act1state = NULL;
m_unk0x8c = -1;
m_unk0x98 = 0;
m_unk0x90 = 0x80000000;
@ -23,11 +29,36 @@ Pizza::~Pizza()
TickleManager()->UnregisterClient(this);
}
// STUB: LEGO1 0x10038170
// FUNCTION: LEGO1 0x10038170
MxResult Pizza::Create(MxDSAction& p_dsAction)
{
// TODO
return SUCCESS;
MxResult result = IsleActor::Create(p_dsAction);
if (result == SUCCESS) {
CreateState();
m_skateboard = (SkateBoard*) m_world->Find(m_atom, IsleScript::c_SkateBoard_Actor);
}
return result;
}
// FUNCTION: LEGO1 0x100381b0
void Pizza::CreateState()
{
m_state = (PizzaMissionState*) GameState()->GetState("PizzaMissionState");
if (m_state == NULL) {
m_state = (PizzaMissionState*) GameState()->CreateState("PizzaMissionState");
}
m_act1state = (Act1State*) GameState()->GetState("Act1State");
if (m_act1state == NULL) {
m_act1state = (Act1State*) GameState()->CreateState("Act1State");
}
}
// STUB: LEGO1 0x10038220
void Pizza::FUN_10038220(MxU32 p_objectId)
{
}
// STUB: LEGO1 0x100382b0
@ -41,7 +72,7 @@ void Pizza::FUN_10038380()
}
// STUB: LEGO1 0x100383f0
undefined4 Pizza::VTable0x68()
undefined4 Pizza::HandleClick()
{
// TODO
return 0;

View file

@ -1,7 +1,17 @@
#include "pizzeria.h"
#include "isle_actions.h"
#include "islepathactor.h"
#include "legoanimationmanager.h"
#include "legogamestate.h"
#include "legopathactor.h"
#include "legoutils.h"
#include "legoworld.h"
#include "misc.h"
#include "pizza.h"
#include "pizzamissionstate.h"
#include "pizzeriastate.h"
#include "scripts.h"
DECOMP_SIZE_ASSERT(Pizzeria, 0x84)
@ -11,14 +21,14 @@ MxResult Pizzeria::Create(MxDSAction& p_dsAction)
MxResult result = IsleActor::Create(p_dsAction);
if (result == SUCCESS) {
Init();
CreateState();
}
return result;
}
// FUNCTION: LEGO1 0x100179f0
void Pizzeria::Init()
void Pizzeria::CreateState()
{
LegoGameState* gameState = GameState();
PizzeriaState* pizzeriaState = (PizzeriaState*) gameState->GetState("PizzeriaState");
@ -35,9 +45,21 @@ void Pizzeria::Init()
m_pizzaMissionState = pizzaMissionState;
}
// STUB: LEGO1 0x10017a50
undefined4 Pizzeria::VTable0x68()
// FUNCTION: LEGO1 0x10017a50
undefined4 Pizzeria::HandleClick()
{
// TODO
return 0;
if (FUN_1003ef60() && m_pizzaMissionState->m_unk0x0c == 0) {
if (CurrentActor()->GetActorId() != GameState()->GetActorId()) {
if (!CurrentActor()->IsA("SkateBoard")) {
((IslePathActor*) CurrentActor())->VTable0xe4();
}
}
AnimationManager()->FUN_10061010(FALSE);
Pizza* pizza = (Pizza*) CurrentWorld()->Find(*g_isleScript, IsleScript::c_Pizza_Actor);
pizza->FUN_10038220(m_pizzeriaState->FUN_10017d70());
}
return 1;
}

View file

@ -26,7 +26,7 @@ MxResult RaceCar::Create(MxDSAction& p_dsAction)
}
// STUB: LEGO1 0x100284d0
MxU32 RaceCar::VTable0xcc()
MxU32 RaceCar::HandleClick()
{
// TODO
return 0;

View file

@ -22,7 +22,7 @@ Radio::Radio()
ControlManager()->Register(this);
m_unk0x0c = TRUE;
CreateRadioState();
CreateState();
}
// FUNCTION: LEGO1 0x1002c990
@ -47,8 +47,8 @@ MxLong Radio::Notify(MxParam& p_param)
case c_notificationEndAction:
result = HandleEndAction((MxEndActionNotificationParam&) p_param);
break;
case c_notificationClick:
result = HandleClick((LegoControlManagerEvent&) p_param);
case c_notificationControl:
result = HandleControl((LegoControlManagerEvent&) p_param);
break;
}
}
@ -96,7 +96,7 @@ void Radio::Stop()
}
// FUNCTION: LEGO1 0x1002cbc0
MxLong Radio::HandleClick(LegoControlManagerEvent& p_param)
MxLong Radio::HandleControl(LegoControlManagerEvent& p_param)
{
MxDSAction action; // Unused
MxS32 objectId = p_param.GetClickedObjectId();
@ -147,12 +147,12 @@ void Radio::Initialize(MxBool p_und)
{
if (m_unk0x0c != p_und) {
m_unk0x0c = p_und;
CreateRadioState();
CreateState();
}
}
// FUNCTION: LEGO1 0x1002cde0
void Radio::CreateRadioState()
void Radio::CreateState()
{
LegoGameState* gameState = GameState();
RadioState* state = (RadioState*) gameState->GetState("RadioState");

View file

@ -72,7 +72,7 @@ void SkateBoard::VTable0xe4()
}
// FUNCTION: LEGO1 0x100100e0
MxU32 SkateBoard::VTable0xcc()
MxU32 SkateBoard::HandleClick()
{
Act1State* state = (Act1State*) GameState()->GetState("Act1State");
@ -87,7 +87,7 @@ MxU32 SkateBoard::VTable0xcc()
if (GameState()->GetActorId() != CurrentActor()->GetActorId()) {
if (!CurrentActor()->IsA("SkateBoard")) {
CurrentActor()->VTable0xe4();
((IslePathActor*) CurrentActor())->VTable0xe4();
}
}
@ -107,7 +107,7 @@ MxU32 SkateBoard::VTable0xcc()
}
// FUNCTION: LEGO1 0x10010230
MxU32 SkateBoard::VTable0xd4(LegoControlManagerEvent& p_param)
MxU32 SkateBoard::HandleControl(LegoControlManagerEvent& p_param)
{
MxU32 result = 0;

View file

@ -1,26 +1,55 @@
#include "towtrack.h"
#include "legogamestate.h"
#include "legovariables.h"
#include "legoworld.h"
#include "misc.h"
#include "mxmisc.h"
#include "mxtimer.h"
#include "mxvariabletable.h"
#include "towtrackmissionstate.h"
DECOMP_SIZE_ASSERT(TowTrack, 0x180)
// FUNCTION: LEGO1 0x1004c720
TowTrack::TowTrack()
{
this->m_unk0x168 = 0;
this->m_unk0x16a = -1;
this->m_unk0x164 = 0;
this->m_unk0x16c = 0;
this->m_unk0x170 = -1;
this->m_unk0x16e = 0;
this->m_unk0x174 = -1;
this->m_unk0x13c = 40.0;
this->m_unk0x178 = 1.0;
m_unk0x168 = 0;
m_unk0x16a = -1;
m_state = NULL;
m_unk0x16c = 0;
m_unk0x170 = -1;
m_unk0x16e = 0;
m_unk0x174 = -1;
m_unk0x13c = 40.0;
m_unk0x178 = 1.0;
}
// STUB: LEGO1 0x1004c9e0
// FUNCTION: LEGO1 0x1004c9e0
// FUNCTION: BETA10 0x100f6bf1
MxResult TowTrack::Create(MxDSAction& p_dsAction)
{
// TODO
return SUCCESS;
MxResult result = IslePathActor::Create(p_dsAction);
if (result == SUCCESS) {
m_world = CurrentWorld();
if (m_world) {
m_world->Add(this);
}
m_state = (TowTrackMissionState*) GameState()->GetState("TowTrackMissionState");
if (!m_state) {
m_state = new TowTrackMissionState();
m_state->m_unk0x08 = 0;
GameState()->RegisterState(m_state);
}
}
VariableTable()->SetVariable(g_varTOWFUEL, "1.0");
m_unk0x178 = 1.0;
m_time = Timer()->GetTime();
return result;
}
// STUB: LEGO1 0x1004cb10
@ -29,6 +58,15 @@ void TowTrack::VTable0x70(float p_float)
// TODO
}
// FUNCTION: LEGO1 0x1004cc40
void TowTrack::CreateState()
{
m_state = (TowTrackMissionState*) GameState()->GetState("TowTrackMissionState");
if (m_state == NULL) {
m_state = (TowTrackMissionState*) GameState()->CreateState("TowTrackMissionState");
}
}
// STUB: LEGO1 0x1004cc80
MxLong TowTrack::Notify(MxParam& p_param)
{
@ -51,7 +89,7 @@ MxU32 TowTrack::VTable0xdc(MxType19NotificationParam& p_param)
}
// STUB: LEGO1 0x1004d690
MxU32 TowTrack::VTable0xcc()
MxU32 TowTrack::HandleClick()
{
// TODO
return 0;
@ -64,7 +102,7 @@ void TowTrack::VTable0xe4()
}
// STUB: LEGO1 0x1004d9e0
MxU32 TowTrack::VTable0xd4(LegoControlManagerEvent& p_param)
MxU32 TowTrack::HandleControl(LegoControlManagerEvent& p_param)
{
// TODO
return 0;
@ -81,3 +119,15 @@ void TowTrack::FUN_1004dad0()
{
// TODO
}
// STUB: LEGO1 0x1004db10
void TowTrack::FUN_1004db10()
{
// TODO
}
// STUB: LEGO1 0x1004dbe0
void TowTrack::FUN_1004dbe0()
{
// TODO
}

View file

@ -1,25 +1,25 @@
#include "legounknown100d5778.h"
#include "lego3dsound.h"
#include "legocharactermanager.h"
#include "misc.h"
#include "mxomni.h"
DECOMP_SIZE_ASSERT(LegoUnknown100d5778, 0x30)
DECOMP_SIZE_ASSERT(Lego3DSound, 0x30)
// FUNCTION: LEGO1 0x10011630
LegoUnknown100d5778::LegoUnknown100d5778()
Lego3DSound::Lego3DSound()
{
Init();
}
// FUNCTION: LEGO1 0x10011670
LegoUnknown100d5778::~LegoUnknown100d5778()
Lego3DSound::~Lego3DSound()
{
Destroy();
}
// FUNCTION: LEGO1 0x10011680
void LegoUnknown100d5778::Init()
void Lego3DSound::Init()
{
m_dsBuffer = NULL;
m_unk0x0c = NULL;
@ -27,16 +27,17 @@ void LegoUnknown100d5778::Init()
m_unk0x18 = 0;
m_unk0x14 = FALSE;
m_unk0x15 = FALSE;
m_unk0x2c = 79;
m_volume = 79;
}
// STUB: LEGO1 0x100116a0
MxResult LegoUnknown100d5778::FUN_100116a0(LPDIRECTSOUND p_dsound, undefined4, undefined4 p_unk0x2c)
// FUNCTION: BETA10 0x10039647
MxResult Lego3DSound::Create(LPDIRECTSOUNDBUFFER p_directSoundBuffer, const char*, MxS32 p_volume)
{
m_unk0x2c = p_unk0x2c;
m_volume = p_volume;
if (MxOmni::IsSound3D()) {
p_dsound->QueryInterface(IID_IDirectSoundBuffer, (LPVOID*) &m_dsBuffer);
p_directSoundBuffer->QueryInterface(IID_IDirectSoundBuffer, (LPVOID*) &m_dsBuffer);
if (m_dsBuffer == NULL) {
return FAILURE;
}
@ -50,7 +51,7 @@ MxResult LegoUnknown100d5778::FUN_100116a0(LPDIRECTSOUND p_dsound, undefined4, u
}
// FUNCTION: LEGO1 0x10011880
void LegoUnknown100d5778::Destroy()
void Lego3DSound::Destroy()
{
if (m_dsBuffer) {
m_dsBuffer->Release();
@ -70,20 +71,21 @@ void LegoUnknown100d5778::Destroy()
}
// STUB: LEGO1 0x100118e0
undefined4 LegoUnknown100d5778::FUN_100118e0(LPDIRECTSOUNDBUFFER p_dsBuffer)
// FUNCTION: BETA10 0x10039a2a
undefined4 Lego3DSound::FUN_100118e0(LPDIRECTSOUNDBUFFER p_directSoundBuffer)
{
// TODO
return 0;
}
// STUB: LEGO1 0x10011ca0
void LegoUnknown100d5778::FUN_10011ca0()
void Lego3DSound::FUN_10011ca0()
{
// TODO
}
// STUB: LEGO1 0x10011cf0
MxS32 LegoUnknown100d5778::FUN_10011cf0(undefined4, undefined4)
MxS32 Lego3DSound::FUN_10011cf0(undefined4, undefined4)
{
// TODO
return 0;

View file

@ -1,5 +1,7 @@
#include "lego3dwavepresenter.h"
#include "mxcompositepresenter.h"
#include "mxdsaction.h"
#include "mxomni.h"
DECOMP_SIZE_ASSERT(Lego3DWavePresenter, 0xa0)
@ -28,7 +30,8 @@ void Lego3DWavePresenter::Destroy()
}
}
// STUB: LEGO1 0x1004a810
// FUNCTION: LEGO1 0x1004a810
// FUNCTION: BETA10 0x1003a3b0
void Lego3DWavePresenter::StartingTickle()
{
if (MxOmni::IsSound3D()) {
@ -37,12 +40,27 @@ void Lego3DWavePresenter::StartingTickle()
MxWavePresenter::StartingTickle();
// TODO
if (m_dsBuffer != NULL) {
MxU16 extraLength;
char* buff;
m_action->GetExtra(extraLength, buff);
if (!strcmp(buff, "FROM_PARENT") && m_compositePresenter != NULL) {
m_compositePresenter->GetAction()->GetExtra(extraLength, buff);
}
if (m_sound.Create(m_dsBuffer, buff, m_volume) != SUCCESS) {
m_dsBuffer->Release();
m_dsBuffer = NULL;
EndAction();
}
}
}
// STUB: LEGO1 0x1004a8b0
// FUNCTION: LEGO1 0x1004a8b0
// FUNCTION: BETA10 0x1003a4cc
void Lego3DWavePresenter::StreamingTickle()
{
MxWavePresenter::StreamingTickle();
// TODO
m_sound.FUN_100118e0(m_dsBuffer);
}

View file

@ -21,7 +21,7 @@ BuildingEntity::~BuildingEntity()
// FUNCTION: LEGO1 0x100150a0
MxLong BuildingEntity::Notify(MxParam& p_param)
{
if (((MxNotificationParam&) p_param).GetType() == c_notificationType11) {
if (((MxNotificationParam&) p_param).GetType() == c_notificationClick) {
return VTable0x50(p_param);
}

View file

@ -56,7 +56,7 @@ void LegoCarBuild::Enable(MxBool p_enable)
}
// STUB: LEGO1 0x10025e70
MxBool LegoCarBuild::VTable0x64()
MxBool LegoCarBuild::Escape()
{
// TODO
return FALSE;

View file

@ -25,6 +25,7 @@
#include "mxticklemanager.h"
#include "mxtimer.h"
#include "mxutilities.h"
#include "realtime/realtime.h"
#include "viewmanager/viewmanager.h"
#include <io.h>
@ -51,7 +52,7 @@ LegoAnimationManager::Vehicle g_vehicles[] = {
};
// GLOBAL: LEGO1 0x100f6d58
const char* g_unk0x100f6d58[11][17] = {
const char* g_cycles[11][17] = {
{"CNs001xx",
"CNs002xx",
"CNs003xx",
@ -346,7 +347,7 @@ LegoAnimationManager::~LegoAnimationManager()
LegoPathActor* actor = CharacterManager()->GetActor(roi->GetName());
if (actor != NULL && actor->GetController() != NULL && CurrentWorld() != NULL) {
CurrentWorld()->RemovePathActor(actor);
CurrentWorld()->RemoveActor(actor);
actor->SetController(NULL);
}
@ -466,7 +467,7 @@ void LegoAnimationManager::Suspend()
m_unk0x401 = FALSE;
for (i = 0; i < (MxS32) sizeOfArray(g_characters); i++) {
g_characters[i].m_unk0x04 = FALSE;
g_characters[i].m_inExtras = FALSE;
}
}
}
@ -530,7 +531,7 @@ void LegoAnimationManager::Init()
for (i = 0; i < (MxS32) sizeOfArray(g_characters); i++) {
g_characters[i].m_active = FALSE;
g_characters[i].m_unk0x04 = FALSE;
g_characters[i].m_inExtras = FALSE;
}
for (i = 0; i < (MxS32) sizeOfArray(g_vehicles); i++) {
@ -994,7 +995,7 @@ MxResult LegoAnimationManager::FUN_100605e0(
FUN_100648f0(tranInfo, m_unk0x404);
}
else if (p_unk0x0a) {
IslePathActor* actor = CurrentActor();
LegoPathActor* actor = CurrentActor();
if (actor != NULL) {
actor->SetState(4);
@ -1395,7 +1396,6 @@ MxLong LegoAnimationManager::Notify(MxParam& p_param)
if (roi != NULL) {
LegoExtraActor* actor = CharacterManager()->GetActor(roi->GetName());
if (actor != NULL) {
actor->Restart();
}
@ -1432,7 +1432,7 @@ MxResult LegoAnimationManager::Tickle()
return SUCCESS;
}
IslePathActor* actor = CurrentActor();
LegoPathActor* actor = CurrentActor();
LegoROI* roi;
if (actor == NULL || (roi = actor->GetROI()) == NULL) {
@ -1468,7 +1468,7 @@ MxResult LegoAnimationManager::Tickle()
}
m_extras[i].m_roi = NULL;
g_characters[m_extras[i].m_characterId].m_unk0x04 = FALSE;
g_characters[m_extras[i].m_characterId].m_inExtras = FALSE;
g_characters[m_extras[i].m_characterId].m_unk0x07 = FALSE;
m_extras[i].m_characterId = -1;
m_extras[i].m_unk0x0d = FALSE;
@ -1655,7 +1655,7 @@ MxBool LegoAnimationManager::FUN_100623a0(AnimInfo& p_info)
LegoEntityListCursor cursor(entityList);
LegoEntity* entity;
IslePathActor* actor = CurrentActor();
LegoPathActor* actor = CurrentActor();
while (cursor.Next(entity)) {
if (entity != actor && entity->IsA("LegoPathActor")) {
@ -1837,7 +1837,7 @@ void LegoAnimationManager::PurgeExtra(MxBool p_und)
}
m_extras[i].m_roi = NULL;
g_characters[m_extras[i].m_characterId].m_unk0x04 = FALSE;
g_characters[m_extras[i].m_characterId].m_inExtras = FALSE;
g_characters[m_extras[i].m_characterId].m_unk0x07 = FALSE;
m_extras[i].m_characterId = -1;
}
@ -1858,7 +1858,7 @@ void LegoAnimationManager::AddExtra(MxS32 p_location, MxBool p_und)
if (world != NULL) {
PurgeExtra(FALSE);
IslePathActor* actor = CurrentActor();
LegoPathActor* actor = CurrentActor();
if (actor == NULL || actor->GetWorldSpeed() <= 20.0f) {
MxU32 i;
for (i = 0; i < m_numAllowedExtras && m_extras[i].m_roi != NULL; i++) {
@ -1928,7 +1928,7 @@ void LegoAnimationManager::AddExtra(MxS32 p_location, MxBool p_und)
tryNextCharacter:
if (g_characters[m_lastExtraCharacterId].m_unk0x09 &&
g_characters[m_lastExtraCharacterId].m_unk0x08 &&
!g_characters[m_lastExtraCharacterId].m_unk0x04 &&
!g_characters[m_lastExtraCharacterId].m_inExtras &&
g_characters[m_lastExtraCharacterId].m_active == active) {
if (!CharacterManager()->FUN_10083b20(g_characters[m_lastExtraCharacterId].m_name
)) {
@ -1973,7 +1973,7 @@ void LegoAnimationManager::AddExtra(MxS32 p_location, MxBool p_und)
if (FUN_10063b90(
world,
actor,
CharacterManager()->FUN_10085180(m_extras[i].m_roi),
CharacterManager()->GetMood(m_extras[i].m_roi),
m_lastExtraCharacterId
)) {
m_extras[i].m_unk0x14 = TRUE;
@ -1994,7 +1994,7 @@ void LegoAnimationManager::AddExtra(MxS32 p_location, MxBool p_und)
actor->SetWorldSpeed(speed);
m_extras[i].m_characterId = m_lastExtraCharacterId;
g_characters[m_lastExtraCharacterId].m_unk0x04 = TRUE;
g_characters[m_lastExtraCharacterId].m_inExtras = TRUE;
m_extras[i].m_unk0x08 = Timer()->GetTime();
m_extras[i].m_speed = -1;
m_extras[i].m_unk0x0d = FALSE;
@ -2029,10 +2029,242 @@ void LegoAnimationManager::AddExtra(MxS32 p_location, MxBool p_und)
}
}
// STUB: LEGO1 0x10063270
void LegoAnimationManager::FUN_10063270(LegoROIList*, LegoAnimPresenter*)
// FUNCTION: LEGO1 0x10062e20
// FUNCTION: BETA10 0x100444cb
MxBool LegoAnimationManager::FUN_10062e20(LegoROI* p_roi, LegoAnimPresenter* p_presenter)
{
// TODO
LegoWorld* world = CurrentWorld();
if (world == NULL || m_suspended || !m_unk0x400) {
return FALSE;
}
MxBool inExtras = FALSE;
const char* name = p_roi->GetName();
LegoExtraActor* actor = CharacterManager()->GetActor(name);
if (actor != NULL) {
MxS32 characterId = -1;
MxS32 i;
for (i = 0; i < (MxS32) sizeOfArray(g_characters); i++) {
if (!strcmpi(name, g_characters[i].m_name)) {
characterId = i;
break;
}
}
if (characterId == -1) {
return FALSE;
}
if (!g_characters[characterId].m_inExtras) {
for (i = 0; i < (MxS32) sizeOfArray(m_extras); i++) {
if (m_extras[i].m_roi == NULL) {
m_extras[i].m_roi = p_roi;
break;
}
}
if (i == (MxS32) sizeOfArray(m_extras)) {
return FALSE;
}
}
else {
inExtras = TRUE;
for (i = 0; i < (MxS32) sizeOfArray(m_extras); i++) {
if (m_extras[i].m_roi == p_roi) {
break;
}
}
if (i == (MxS32) sizeOfArray(m_extras)) {
return FALSE;
}
}
if (g_characters[characterId].m_unk0x07) {
m_unk0x414--;
if (actor->GetBoundary() == NULL) {
g_characters[characterId].m_unk0x07 = FALSE;
if (g_characters[characterId].m_unk0x0c < 0) {
g_characters[characterId].m_unk0x0c = 0;
}
if (g_characters[characterId].m_unk0x10 < 0) {
g_characters[characterId].m_unk0x10 = 0;
}
m_extras[i].m_roi = NULL;
g_characters[characterId].m_unk0x07 = FALSE;
g_characters[characterId].m_inExtras = FALSE;
return FALSE;
}
CharacterManager()->FUN_10083db0(p_roi);
}
else {
if (inExtras) {
return FALSE;
}
}
if (GameState()->GetCurrentAct() != LegoGameState::e_act1 && !strcmp(name, "brickstr")) {
return FALSE;
}
MxBool local24 = inExtras && g_characters[characterId].m_unk0x07 &&
(g_characters[characterId].m_unk0x0c < 0 || g_characters[characterId].m_unk0x10 < 0);
MxResult result = 1; // Not a valid MxResult value
if (!local24) {
MxU8 unk0x0c;
switch (rand() % 3) {
case 0:
unk0x0c = 1;
break;
case 1:
unk0x0c = 2;
break;
case 2:
unk0x0c = 0;
break;
}
actor->SetUnknown0x0c(unk0x0c);
Mx3DPointFloat position;
Mx3DPointFloat direction;
position = p_roi->GetWorldPosition();
direction = p_roi->GetWorldDirection();
((Vector3&) direction).Mul(-1.0f);
m_extras[i].m_speed = -1.0f;
if (inExtras) {
actor->ClearMaps();
}
if (FUN_10063b90(world, actor, CharacterManager()->GetMood(p_roi), characterId)) {
m_extras[i].m_unk0x14 = TRUE;
}
else {
m_extras[i].m_unk0x14 = FALSE;
}
result = world->PlaceActor(actor, p_presenter, position, direction);
}
if (result != SUCCESS && g_characters[characterId].m_unk0x07) {
result = world->PlaceActor(actor);
}
g_characters[characterId].m_unk0x07 = FALSE;
if (result != SUCCESS) {
m_extras[i].m_roi = NULL;
g_characters[characterId].m_inExtras = FALSE;
}
else {
m_extras[i].m_characterId = characterId;
m_extras[i].m_unk0x08 = Timer()->GetTime();
m_extras[i].m_unk0x0c = TRUE;
m_extras[i].m_unk0x0d = FALSE;
g_characters[characterId].m_inExtras = TRUE;
actor->SetWorldSpeed(0.0f);
m_unk0x414++;
return TRUE;
}
}
return FALSE;
}
// FUNCTION: LEGO1 0x10063270
// FUNCTION: BETA10 0x10044b9a
void LegoAnimationManager::FUN_10063270(LegoROIList* p_list, LegoAnimPresenter* p_presenter)
{
if (p_list != NULL) {
LegoWorld* world = CurrentWorld();
LegoROI* roi;
MxU32 i;
for (i = 0; i < sizeOfArray(g_vehicles); i++) {
roi = Lego()->FindROI(g_vehicles[i].m_name);
if (roi != NULL) {
if (!g_vehicles[i].m_unk0x05 && roi->GetVisibility()) {
g_vehicles[i].m_unk0x04 = TRUE;
}
else {
g_vehicles[i].m_unk0x04 = FALSE;
}
}
}
LegoROIListCursor cursor(p_list);
while (cursor.Next(roi)) {
if (roi->GetVisibility() && FUN_10062e20(roi, p_presenter)) {
cursor.Detach();
FUN_10063950(roi);
}
else {
LegoExtraActor* actor = CharacterManager()->GetActor(roi->GetName());
if (actor != NULL) {
for (MxS32 i = 0; i < (MxS32) sizeOfArray(m_extras); i++) {
if (m_extras[i].m_roi == roi) {
if (actor->GetController() != NULL) {
actor->GetController()->RemoveActor(actor);
actor->SetController(NULL);
}
if (m_extras[i].m_unk0x14) {
m_extras[i].m_unk0x14 = FALSE;
MxS32 vehicleId = g_characters[m_extras[i].m_characterId].m_vehicleId;
if (vehicleId >= 0) {
g_vehicles[vehicleId].m_unk0x05 = FALSE;
LegoROI* roi = Lego()->FindROI(g_vehicles[vehicleId].m_name);
if (roi != NULL) {
roi->SetVisibility(FALSE);
}
}
}
m_extras[i].m_roi = NULL;
g_characters[m_extras[i].m_characterId].m_inExtras = FALSE;
g_characters[m_extras[i].m_characterId].m_unk0x07 = FALSE;
m_extras[i].m_characterId = -1;
m_extras[i].m_unk0x0d = FALSE;
m_unk0x414--;
break;
}
}
}
}
}
FUN_10063e40(p_presenter);
for (i = 0; i < sizeOfArray(g_vehicles); i++) {
if (!g_vehicles[i].m_unk0x05) {
roi = Lego()->FindROI(g_vehicles[i].m_name);
if (roi != NULL) {
roi->SetVisibility(FALSE);
}
}
}
}
}
// FUNCTION: LEGO1 0x10063780
@ -2053,6 +2285,19 @@ void LegoAnimationManager::FUN_10063780(LegoROIList* p_list)
}
}
// FUNCTION: LEGO1 0x10063950
void LegoAnimationManager::FUN_10063950(LegoROI* p_roi)
{
if (m_unk0x424 != NULL) {
LegoROIListCursor cursor(m_unk0x424);
if (cursor.Find(p_roi)) {
CharacterManager()->FUN_10083db0(p_roi);
cursor.Detach();
}
}
}
// FUNCTION: LEGO1 0x10063aa0
void LegoAnimationManager::FUN_10063aa0()
{
@ -2064,17 +2309,67 @@ void LegoAnimationManager::FUN_10063aa0()
}
}
// STUB: LEGO1 0x10063b90
// FUNCTION: LEGO1 0x10063b90
// FUNCTION: BETA10 0x10044d46
MxBool LegoAnimationManager::FUN_10063b90(
LegoWorld* p_world,
LegoExtraActor* p_actor,
MxU8 p_unk0x14,
MxU32 p_characterId
)
MxBool LegoAnimationManager::FUN_10063b90(LegoWorld* p_world, LegoExtraActor* p_actor, MxU8 p_mood, MxU32 p_characterId)
{
// TODO
return TRUE;
const char** cycles = g_cycles[g_characters[p_characterId].m_unk0x16];
const char* vehicleWC;
if (g_characters[p_characterId].m_vehicleId >= 0 && g_vehicles[g_characters[p_characterId].m_vehicleId].m_unk0x04 &&
(vehicleWC = cycles[10]) != NULL) {
LegoLocomotionAnimPresenter* presenter =
(LegoLocomotionAnimPresenter*) p_world->Find("LegoAnimPresenter", vehicleWC);
if (presenter != NULL) {
presenter->FUN_1006d680(p_actor, 1.7f);
}
g_vehicles[g_characters[p_characterId].m_vehicleId].m_unk0x04 = FALSE;
g_vehicles[g_characters[p_characterId].m_vehicleId].m_unk0x05 = TRUE;
return TRUE;
}
else {
vehicleWC = cycles[p_mood];
if (vehicleWC != NULL) {
LegoLocomotionAnimPresenter* presenter =
(LegoLocomotionAnimPresenter*) p_world->Find("LegoAnimPresenter", vehicleWC);
if (presenter != NULL) {
presenter->FUN_1006d680(p_actor, 0.7f);
}
}
if (p_mood >= 2) {
p_mood--;
}
vehicleWC = cycles[p_mood + 4];
if (vehicleWC != NULL) {
LegoLocomotionAnimPresenter* presenter =
(LegoLocomotionAnimPresenter*) p_world->Find("LegoAnimPresenter", vehicleWC);
if (presenter != NULL) {
presenter->FUN_1006d680(p_actor, 4.0f);
}
}
if (p_mood >= 1) {
p_mood--;
}
vehicleWC = cycles[p_mood + 7];
if (vehicleWC != NULL) {
LegoLocomotionAnimPresenter* presenter =
(LegoLocomotionAnimPresenter*) p_world->Find("LegoAnimPresenter", vehicleWC);
if (presenter != NULL) {
presenter->FUN_1006d680(p_actor, 0.0f);
}
}
return FALSE;
}
}
// FUNCTION: LEGO1 0x10063d10
@ -2120,6 +2415,23 @@ void LegoAnimationManager::FUN_10063d10()
}
}
// FUNCTION: LEGO1 0x10063e40
void LegoAnimationManager::FUN_10063e40(LegoAnimPresenter* p_presenter)
{
if (m_unk0x424 != NULL) {
LegoROIListCursor cursor(m_unk0x424);
LegoROI* roi;
while (cursor.Next(roi)) {
if (!FUN_10062e20(roi, p_presenter)) {
CharacterManager()->FUN_10083db0(roi);
}
cursor.Detach();
}
}
}
// FUNCTION: LEGO1 0x10063fb0
// FUNCTION: BETA10 0x100452a7
MxBool LegoAnimationManager::FUN_10063fb0(LegoLocation::Boundary* p_boundary, LegoWorld* p_world)
@ -2163,7 +2475,7 @@ MxBool LegoAnimationManager::FUN_10064120(LegoLocation::Boundary* p_boundary, Mx
{
MxU32 local2c = 12;
float destScale = ((rand() * 0.5) / 32767.0) + 0.25;
IslePathActor* actor = CurrentActor();
LegoPathActor* actor = CurrentActor();
if (actor == NULL) {
return FALSE;
@ -2329,15 +2641,15 @@ MxResult LegoAnimationManager::FUN_10064380(
}
MxS32 characterId = m_extras[i].m_characterId;
const char** unk0x100f6d58 = g_unk0x100f6d58[g_characters[characterId].m_unk0x16];
const char** cycles = g_cycles[g_characters[characterId].m_unk0x16];
LegoLocomotionAnimPresenter* presenter =
(LegoLocomotionAnimPresenter*) world->Find("LegoAnimPresenter", unk0x100f6d58[p_undIdx1]);
(LegoLocomotionAnimPresenter*) world->Find("LegoAnimPresenter", cycles[p_undIdx1]);
if (presenter != NULL) {
presenter->FUN_1006d680(actor, 0.0f);
}
presenter = (LegoLocomotionAnimPresenter*) world->Find("LegoAnimPresenter", unk0x100f6d58[p_undIdx2]);
presenter = (LegoLocomotionAnimPresenter*) world->Find("LegoAnimPresenter", cycles[p_undIdx2]);
if (presenter != NULL) {
presenter->FUN_1006d680(actor, 4.0f);
}
@ -2348,7 +2660,7 @@ MxResult LegoAnimationManager::FUN_10064380(
g_characters[characterId].m_unk0x0c = p_unk0x0c;
g_characters[characterId].m_unk0x10 = p_unk0x10;
g_characters[characterId].m_unk0x04 = TRUE;
g_characters[characterId].m_inExtras = TRUE;
return SUCCESS;
}
@ -2411,11 +2723,61 @@ MxResult LegoAnimationManager::FUN_10064740(Vector3* p_position)
return FAILURE;
}
// STUB: LEGO1 0x100648f0
// FUNCTION: BETA10 0x10045daf
void LegoAnimationManager::FUN_100648f0(LegoTranInfo*, MxLong)
// FUNCTION: LEGO1 0x10064880
// FUNCTION: BETA10 0x10045d02
MxResult LegoAnimationManager::FUN_10064880(const char* p_name, MxS32 p_unk0x0c, MxS32 p_unk0x10)
{
// TODO
for (MxS32 i = 0; i < (MxS32) sizeOfArray(m_extras); i++) {
LegoROI* roi = m_extras[i].m_roi;
if (roi != NULL) {
if (!strcmpi(roi->GetName(), p_name)) {
g_characters[m_extras[i].m_characterId].m_unk0x0c = p_unk0x0c;
g_characters[m_extras[i].m_characterId].m_unk0x10 = p_unk0x10;
return SUCCESS;
}
}
}
return FAILURE;
}
// FUNCTION: LEGO1 0x100648f0
// FUNCTION: BETA10 0x10045daf
void LegoAnimationManager::FUN_100648f0(LegoTranInfo* p_tranInfo, MxLong p_unk0x404)
{
if (m_unk0x402 && p_tranInfo->m_unk0x14) {
p_tranInfo->m_flags |= LegoTranInfo::c_bit1;
m_unk0x430 = TRUE;
m_unk0x42c = p_tranInfo;
m_unk0x434 = p_unk0x404;
m_unk0x438 = p_unk0x404 + 1000;
ViewROI* viewROI = VideoManager()->GetViewROI();
m_unk0x43c = viewROI->GetLocal2World();
p_tranInfo->m_unk0x2c = m_unk0x43c;
LegoPathActor* actor = CurrentActor();
if (actor != NULL) {
actor->SetState(4);
actor->SetWorldSpeed(0.0f);
}
LegoLocation* location = NavController()->GetLocation(p_tranInfo->m_location);
if (location != NULL) {
CalcLocalTransform(location->m_position, location->m_direction, location->m_up, m_unk0x484);
m_unk0x4cc.Unknown1(m_unk0x43c, m_unk0x484);
m_unk0x4cc.Unknown7();
}
else {
p_tranInfo->m_flags &= ~LegoTranInfo::c_bit1;
m_unk0x430 = FALSE;
}
Mx3DPointFloat vec;
vec.Clear();
viewROI->FUN_100a5a30(vec);
}
}
// FUNCTION: LEGO1 0x10064b50
@ -2439,7 +2801,7 @@ void LegoAnimationManager::FUN_10064b50(MxLong p_time)
sub[1] = (m_unk0x484[3][1] - m_unk0x43c[3][1]) * und;
sub[2] = (m_unk0x484[3][2] - m_unk0x43c[3][2]) * und;
m_unk0x4cc.Unknown_100040a0(mat, (float) (p_time - m_unk0x434) / 1000.0f);
m_unk0x4cc.Unknown6(mat, (float) (p_time - m_unk0x434) / 1000.0f);
VPV3(mat[3], m_unk0x43c[3], sub);
mat[3][4] = 1.0f;

View file

@ -16,6 +16,7 @@
#include "mxmisc.h"
#include "mxnotificationmanager.h"
#include "mxobjectfactory.h"
#include "mxstreamer.h"
#include "mxtimer.h"
#include "mxutilities.h"
@ -425,14 +426,14 @@ MxBool LegoAnimMMPresenter::FUN_1004b6b0(MxLong p_time)
MxBool LegoAnimMMPresenter::FUN_1004b6d0(MxLong p_time)
{
LegoROI* viewROI = VideoManager()->GetViewROI();
IslePathActor* actor = CurrentActor();
LegoPathActor* actor = CurrentActor();
if (m_tranInfo != NULL && m_tranInfo->m_unk0x14 && m_tranInfo->m_location != -1 && actor != NULL) {
if (m_unk0x64 != NULL) {
undefined4 und = 1;
if (m_presenter != NULL) {
m_unk0x64->RemovePathActor(actor);
m_unk0x64->RemoveActor(actor);
if (m_tranInfo->m_unk0x29) {
Mx3DPointFloat position, direction;
@ -441,7 +442,7 @@ MxBool LegoAnimMMPresenter::FUN_1004b6d0(MxLong p_time)
direction = viewROI->GetWorldDirection();
position[1] -= 1.25;
und = m_unk0x64->FUN_1001fb70(actor, m_presenter, position, direction);
und = m_unk0x64->PlaceActor(actor, m_presenter, position, direction);
}
else {
und = 0;
@ -451,7 +452,7 @@ MxBool LegoAnimMMPresenter::FUN_1004b6d0(MxLong p_time)
if (und != 0) {
viewROI->WrappedSetLocalTransform(m_tranInfo->m_unk0x2c);
VideoManager()->Get3DManager()->Moved(*viewROI);
m_unk0x64->AddPathActor(actor);
m_unk0x64->PlaceActor(actor);
}
if (m_tranInfo->m_unk0x29) {
@ -465,10 +466,28 @@ MxBool LegoAnimMMPresenter::FUN_1004b6d0(MxLong p_time)
return TRUE;
}
// STUB: LEGO1 0x1004b840
// FUNCTION: LEGO1 0x1004b840
// FUNCTION: BETA10 0x1004d033
void LegoAnimMMPresenter::FUN_1004b840()
{
// TODO
MxDSAction* action = m_action;
if (m_presenter != NULL) {
m_presenter->FUN_1006c7a0();
}
for (MxCompositePresenterList::iterator it = m_list.begin(); it != m_list.end(); it++) {
if (*it != m_presenter) {
(*it)->EndAction();
}
}
FUN_1004b6d0(0);
EndAction();
if (action != NULL) {
Streamer()->FUN_100b98f0(action);
}
}
// FUNCTION: LEGO1 0x1004b8b0
@ -478,8 +497,9 @@ MxBool LegoAnimMMPresenter::FUN_1004b8b0()
return m_tranInfo != NULL ? m_tranInfo->m_unk0x28 : TRUE;
}
// STUB: LEGO1 0x1004b8c0
// FUNCTION: LEGO1 0x1004b8c0
// FUNCTION: BETA10 0x1004d13d
void LegoAnimMMPresenter::FUN_1004b8c0()
{
// TODO
FUN_1004b6d0(0);
}

View file

@ -116,7 +116,7 @@ MxResult LegoCharacterManager::Write(LegoStorage* p_storage)
if (p_storage->Write(&info->m_unk0x10, sizeof(info->m_unk0x10)) != SUCCESS) {
goto done;
}
if (p_storage->Write(&info->m_unk0x14, sizeof(info->m_unk0x14)) != SUCCESS) {
if (p_storage->Write(&info->m_mood, sizeof(info->m_mood)) != SUCCESS) {
goto done;
}
if (p_storage->Write(&info->m_parts[c_infohatPart].m_unk0x08, sizeof(info->m_parts[c_infohatPart].m_unk0x08)) !=
@ -171,7 +171,7 @@ MxResult LegoCharacterManager::Read(LegoStorage* p_storage)
if (p_storage->Read(&info->m_unk0x10, sizeof(info->m_unk0x10)) != SUCCESS) {
goto done;
}
if (p_storage->Read(&info->m_unk0x14, sizeof(info->m_unk0x14)) != SUCCESS) {
if (p_storage->Read(&info->m_mood, sizeof(info->m_mood)) != SUCCESS) {
goto done;
}
if (p_storage->Read(&info->m_parts[c_infohatPart].m_unk0x08, sizeof(info->m_parts[c_infohatPart].m_unk0x08)) !=
@ -449,7 +449,7 @@ LegoROI* LegoCharacterManager::CreateROI(const char* p_key)
info->m_unk0x0c = pepper->m_unk0x0c;
info->m_unk0x10 = pepper->m_unk0x10;
info->m_unk0x14 = pepper->m_unk0x14;
info->m_mood = pepper->m_mood;
for (i = 0; i < sizeOfArray(info->m_parts); i++) {
info->m_parts[i] = pepper->m_parts[i];
@ -760,7 +760,7 @@ MxU32 LegoCharacterManager::FUN_10085140(LegoROI* p_roi, MxBool p_und)
LegoCharacterInfo* info = GetInfo(p_roi);
if (p_und) {
return info->m_unk0x14 + g_unk0x100fc4dc;
return info->m_mood + g_unk0x100fc4dc;
}
if (info != NULL) {
@ -772,12 +772,12 @@ MxU32 LegoCharacterManager::FUN_10085140(LegoROI* p_roi, MxBool p_und)
// FUNCTION: LEGO1 0x10085180
// FUNCTION: BETA10 0x100768c5
MxU8 LegoCharacterManager::FUN_10085180(LegoROI* p_roi)
MxU8 LegoCharacterManager::GetMood(LegoROI* p_roi)
{
LegoCharacterInfo* info = GetInfo(p_roi);
if (info != NULL) {
return info->m_unk0x14;
return info->m_mood;
}
return 0;

View file

@ -172,7 +172,7 @@ void LegoGameState::SetActor(MxU8 p_actorId)
m_actorId = p_actorId;
}
IslePathActor* oldActor = CurrentActor();
LegoPathActor* oldActor = CurrentActor();
SetCurrentActor(NULL);
IslePathActor* newActor = new IslePathActor();
@ -199,7 +199,7 @@ void LegoGameState::SetActor(MxU8 p_actorId)
// FUNCTION: LEGO1 0x10039910
void LegoGameState::RemoveActor()
{
IslePathActor* actor = CurrentActor();
LegoPathActor* actor = CurrentActor();
SetCurrentActor(NULL);
delete actor;
m_actorId = 0;
@ -209,7 +209,7 @@ void LegoGameState::RemoveActor()
void LegoGameState::ResetROI()
{
if (m_actorId) {
IslePathActor* actor = CurrentActor();
LegoPathActor* actor = CurrentActor();
if (actor) {
LegoROI* roi = actor->GetROI();
@ -906,11 +906,12 @@ void LegoGameState::SwitchArea(Area p_area)
AnimationManager()->Resume();
}
CurrentActor()->SpawnPlayer(
p_area,
TRUE,
IslePathActor::c_spawnBit1 | IslePathActor::c_playMusic | IslePathActor::c_spawnBit3
);
((IslePathActor*) CurrentActor())
->SpawnPlayer(
p_area,
TRUE,
IslePathActor::c_spawnBit1 | IslePathActor::c_playMusic | IslePathActor::c_spawnBit3
);
break;
}
case e_hospital:
@ -922,11 +923,12 @@ void LegoGameState::SwitchArea(Area p_area)
SetCameraControllerFromIsle();
CurrentActor()->ResetWorldTransform(TRUE);
AnimationManager()->Resume();
CurrentActor()->SpawnPlayer(
p_area,
TRUE,
IslePathActor::c_spawnBit1 | IslePathActor::c_playMusic | IslePathActor::c_spawnBit3
);
((IslePathActor*) CurrentActor())
->SpawnPlayer(
p_area,
TRUE,
IslePathActor::c_spawnBit1 | IslePathActor::c_playMusic | IslePathActor::c_spawnBit3
);
break;
case e_police:
VideoManager()->SetUnk0x554(TRUE);
@ -1100,28 +1102,28 @@ void LegoGameState::Init()
Helicopter* copter = (Helicopter*) isle->Find(*g_copterScript, CopterScript::c_Helicopter_Actor);
if (copter) {
isle->RemovePathActor(copter);
isle->RemoveActor(copter);
isle->VTable0x6c(copter);
delete copter;
}
DuneBuggy* dunebuggy = (DuneBuggy*) isle->Find(*g_dunecarScript, DunecarScript::c_DuneBugy_Actor);
if (dunebuggy) {
isle->RemovePathActor(dunebuggy);
isle->RemoveActor(dunebuggy);
isle->VTable0x6c(dunebuggy);
delete dunebuggy;
}
Jetski* jetski = (Jetski*) isle->Find(*g_jetskiScript, JetskiScript::c_Jetski_Actor);
if (jetski) {
isle->RemovePathActor(jetski);
isle->RemoveActor(jetski);
isle->VTable0x6c(jetski);
delete jetski;
}
RaceCar* racecar = (RaceCar*) isle->Find(*g_racecarScript, RacecarScript::c_RaceCar_Actor);
if (racecar) {
isle->RemovePathActor(racecar);
isle->RemoveActor(racecar);
isle->VTable0x6c(racecar);
delete racecar;
}

View file

@ -20,6 +20,10 @@ DECOMP_SIZE_ASSERT(CustomizeAnimFileVariable, 0x24)
// STRING: LEGO1 0x100f39a0
const char* g_varAMBULFUEL = "ambulFUEL";
// GLOBAL: LEGO1 0x100f43b4
// STRING: LEGO1 0x100f439c
const char* g_varTOWFUEL = "towFUEL";
// GLOBAL: LEGO1 0x100f3a40
// STRING: LEGO1 0x100f3808
const char* g_varVISIBILITY = "VISIBILITY";

View file

@ -67,7 +67,7 @@ LegoNavController* NavController()
}
// FUNCTION: LEGO1 0x10015790
IslePathActor* CurrentActor()
LegoPathActor* CurrentActor()
{
return LegoOmni::GetInstance()->GetCurrentActor();
}
@ -137,7 +137,7 @@ void SetROIVisible(const char* p_name, MxBool p_visible)
}
// FUNCTION: LEGO1 0x10015880
void SetCurrentActor(IslePathActor* p_currentActor)
void SetCurrentActor(LegoPathActor* p_currentActor)
{
LegoOmni::GetInstance()->SetCurrentActor(p_currentActor);
}

View file

@ -184,7 +184,7 @@ MxBool MxControlPresenter::FUN_10044480(LegoControlManagerEvent* p_event, MxPres
p_event->SetClickedObjectId(m_action->GetObjectId());
p_event->SetClickedAtom(m_action->GetAtomId().GetInternal());
VTable0x6c(0);
p_event->SetType(c_notificationClick);
p_event->SetType(c_notificationControl);
p_event->SetUnknown0x28(m_unk0x4e);
return TRUE;
}
@ -194,7 +194,7 @@ MxBool MxControlPresenter::FUN_10044480(LegoControlManagerEvent* p_event, MxPres
p_event->SetClickedObjectId(m_action->GetObjectId());
p_event->SetClickedAtom(m_action->GetAtomId().GetInternal());
VTable0x6c(m_unk0x56);
p_event->SetType(c_notificationClick);
p_event->SetType(c_notificationControl);
p_event->SetUnknown0x28(m_unk0x4e);
return TRUE;
}
@ -206,9 +206,9 @@ MxBool MxControlPresenter::FUN_10044480(LegoControlManagerEvent* p_event, MxPres
}
// FUNCTION: LEGO1 0x10044540
void MxControlPresenter::VTable0x6c(MxS16 p_val)
void MxControlPresenter::VTable0x6c(MxS16 p_unk0x4e)
{
if (p_val == -1) {
if (p_unk0x4e == -1) {
if ((MxS16) ((MxDSMultiAction*) m_action)->GetActionList()->GetCount() - m_unk0x4e == 1) {
m_unk0x4e = 0;
}
@ -217,7 +217,7 @@ void MxControlPresenter::VTable0x6c(MxS16 p_val)
}
}
else {
m_unk0x4e = p_val;
m_unk0x4e = p_unk0x4e;
}
m_action->SetUnknown90(Timer()->GetTime());

View file

@ -116,9 +116,27 @@ void LegoControlManager::FUN_100292e0()
}
}
// STUB: LEGO1 0x100293c0
void LegoControlManager::FUN_100293c0(undefined4, const char*, undefined2)
// FUNCTION: LEGO1 0x100293c0
void LegoControlManager::FUN_100293c0(MxU32 p_objectId, const char* p_atom, MxS16 p_unk0x4e)
{
if (m_presenterList) {
MxPresenterListCursor cursor(m_presenterList);
MxPresenter* control;
while (cursor.Next(control)) {
MxDSAction* action = control->GetAction();
if (action->GetObjectId() == p_objectId && action->GetAtomId().GetInternal() == p_atom) {
((MxControlPresenter*) control)->VTable0x6c(p_unk0x4e);
if (((MxControlPresenter*) control)->GetUnknown0x4e() == 0) {
g_unk0x100f31b0 = -1;
g_unk0x100f31b4 = NULL;
break;
}
}
}
}
}
// FUNCTION: LEGO1 0x100294e0

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