Implement Helicopter::VTable0xe4 (#243)

Clean up parent classes
This commit is contained in:
Nathan M Gilbert 2023-10-24 08:37:02 -04:00 committed by GitHub
parent 74329d681b
commit af1745db18
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
19 changed files with 513 additions and 162 deletions

View File

@ -1,8 +1,10 @@
#include "helicopter.h" #include "helicopter.h"
#include "act3.h" #include "act3.h"
#include "legoomni.h" #include "legoanimationmanager.h"
#include "legocontrolmanager.h" #include "legocontrolmanager.h"
#include "legogamestate.h" #include "legogamestate.h"
#include "legoomni.h"
#include "legoutil.h"
#include "legoworld.h" #include "legoworld.h"
DECOMP_SIZE_ASSERT(Helicopter, 0x230) DECOMP_SIZE_ASSERT(Helicopter, 0x230)
@ -41,3 +43,34 @@ void Helicopter::GetState()
m_state = (HelicopterState *)GameState()->GetState("HelicopterState"); m_state = (HelicopterState *)GameState()->GetState("HelicopterState");
if (!m_state) m_state = (HelicopterState *)GameState()->CreateState("HelicopterState"); if (!m_state) m_state = (HelicopterState *)GameState()->CreateState("HelicopterState");
} }
// OFFSET: LEGO1 0x10003360
void Helicopter::VTable0xe4()
{
if (!GameState()->GetUnknown10()) {
VTable0xe8(0x28, TRUE, 7);
}
IslePathActor::VTable0xe4();
if (!GameState()->GetUnknown10()) {
GameState()->SetUnknown424(0x3c);
if (GetCurrentVehicle()) {
if (GetCurrentVehicle()->IsA("IslePathActor")) {
((IslePathActor *)GetCurrentVehicle())->VTable0xe8(0x37, TRUE, 7);
}
}
}
m_state->SetUnknown8(0);
FUN_1003ee00(m_unk22c, 0x16);
FUN_1003ee00(m_unk22c, 0x17);
FUN_1003ee00(m_unk22c, 0x18);
FUN_1003ee00(m_unk22c, 0x19);
FUN_1003ee00(m_unk22c, 0x1a);
FUN_1003ee00(m_unk22c, 0x1b);
FUN_1003ee00(m_unk22c, 0x1c);
FUN_1003ee00(m_unk22c, 0x1d);
FUN_1003ee00(m_unk22c, 0x1e);
FUN_1003ee00(m_unk22c, 0x1f);
AnimationManager()->FUN_1005f6d0(TRUE);
ControlManager()->Unregister(this);
}

View File

@ -26,6 +26,7 @@ public:
} }
virtual MxResult InitFromMxDSObject(MxDSObject &p_dsObject) override; // vtable+0x18 virtual MxResult InitFromMxDSObject(MxDSObject &p_dsObject) override; // vtable+0x18
virtual void VTable0xe4() override;
// OFFSET: LEGO1 0x10003210 TEMPLATE // OFFSET: LEGO1 0x10003210 TEMPLATE
// Helicopter::`scalar deleting destructor' // Helicopter::`scalar deleting destructor'

View File

@ -1,6 +1,7 @@
#ifndef HELICOPTERSTATE_H #ifndef HELICOPTERSTATE_H
#define HELICOPTERSTATE_H #define HELICOPTERSTATE_H
#include "decomp.h"
#include "legostate.h" #include "legostate.h"
// VTABLE 0x100d5418 // VTABLE 0x100d5418
@ -20,6 +21,10 @@ public:
{ {
return !strcmp(name, HelicopterState::ClassName()) || LegoState::IsA(name); return !strcmp(name, HelicopterState::ClassName()) || LegoState::IsA(name);
} }
inline void SetUnknown8(undefined4 p_unk8) { m_unk8 = p_unk8; }
protected:
undefined4 m_unk8;
}; };
#endif // HELICOPTERSTATE_H #endif // HELICOPTERSTATE_H

View File

@ -2,6 +2,38 @@
DECOMP_SIZE_ASSERT(IslePathActor, 0x160) DECOMP_SIZE_ASSERT(IslePathActor, 0x160)
// Probably in header
// OFFSET: LEGO1 0x10002df0 STUB
void IslePathActor::VTable0xd0()
{
// TODO
}
// OFFSET: LEGO1 0x10002e00 STUB
void IslePathActor::VTable0xdc()
{
// TODO
}
// OFFSET: LEGO1 0x10002e70 STUB
void IslePathActor::VTable0xcc()
{
// TODO
}
// OFFSET: LEGO1 0x10002e80 STUB
void IslePathActor::VTable0xd4()
{
// TODO
}
// OFFSET: LEGO1 0x10002e90 STUB
void IslePathActor::VTable0xd8()
{
// TODO
}
// End header
// OFFSET: LEGO1 0x1001a200 // OFFSET: LEGO1 0x1001a200
IslePathActor::IslePathActor() IslePathActor::IslePathActor()
{ {
@ -15,3 +47,27 @@ IslePathActor::IslePathActor()
MxResult IslePathActor::InitFromMxDSObject(MxDSObject &p_dsObject) { MxResult IslePathActor::InitFromMxDSObject(MxDSObject &p_dsObject) {
return MxEntity::InitFromMxDSObject(p_dsObject); return MxEntity::InitFromMxDSObject(p_dsObject);
} }
// OFFSET: LEGO1 0x1001a350 STUB
void IslePathActor::VTable0xe0()
{
// TODO
}
// OFFSET: LEGO1 0x1001a3f0 STUB
void IslePathActor::VTable0xe4()
{
// TODO
}
// OFFSET: LEGO1 0x1001b2a0 STUB
void IslePathActor::VTable0xe8(MxU32 p_1, MxBool p_2, MxU8 p_3)
{
// TODO
}
// OFFSET: LEGO1 0x1001b5b0 STUB
void IslePathActor::VTable0xec()
{
// TODO
}

View File

@ -33,6 +33,15 @@ public:
} }
virtual MxResult InitFromMxDSObject(MxDSObject &p_dsObject) override; // vtable+0x18 virtual MxResult InitFromMxDSObject(MxDSObject &p_dsObject) override; // vtable+0x18
virtual void VTable0xcc(); // vtable+0xcc
virtual void VTable0xd0(); // vtable+0xd0
virtual void VTable0xd4(); // vtable+0xd4
virtual void VTable0xd8(); // vtable+0xd8
virtual void VTable0xdc(); // vtable+0xdc
virtual void VTable0xe0(); // vtable+0xe0
virtual void VTable0xe4(); // vtable+0xe4
virtual void VTable0xe8(MxU32 p_1, MxBool p_2, MxU8 p_3); // vtable+0xe8
virtual void VTable0xec(); // vtable+0xec
inline void SetWorld(LegoWorld *p_world) { m_pLegoWorld = p_world; } inline void SetWorld(LegoWorld *p_world) { m_pLegoWorld = p_world; }
inline LegoWorld *GetWorld() { return m_pLegoWorld; } inline LegoWorld *GetWorld() { return m_pLegoWorld; }

View File

@ -2,7 +2,44 @@
DECOMP_SIZE_ASSERT(LegoActor, 0x78) DECOMP_SIZE_ASSERT(LegoActor, 0x78)
// OFFSET: LEGO1 0x1002d110 STUB // Probably in header
// OFFSET: LEGO1 0x10002cc0 STUB
void LegoActor::VTable0x50()
{
// TODO
}
// OFFSET: LEGO1 0x10002cd0 STUB
void LegoActor::VTable0x54()
{
// TODO
}
// OFFSET: LEGO1 0x10002ce0 STUB
void LegoActor::VTable0x58()
{
// TODO
}
// OFFSET: LEGO1 0x10002cf0 STUB
void LegoActor::VTable0x5c()
{
// TODO
}
// OFFSET: LEGO1 0x10002d00 STUB
void LegoActor::VTable0x60()
{
// TODO
}
// OFFSET: LEGO1 0x10002d10 STUB
void LegoActor::VTable0x64()
{
// TODO
}
// End header
LegoActor::LegoActor() LegoActor::LegoActor()
{ {
} }

View File

@ -24,6 +24,13 @@ public:
return !strcmp(name, LegoActor::ClassName()) || LegoEntity::IsA(name); return !strcmp(name, LegoActor::ClassName()) || LegoEntity::IsA(name);
} }
virtual void VTable0x50(); // vtable+0x50
virtual void VTable0x54(); // vtable+0x54
virtual void VTable0x58(); // vtable+0x58
virtual void VTable0x5c(); // vtable+0x5c
virtual void VTable0x60(); // vtable+0x60
virtual void VTable0x64(); // vtable+0x64
private: private:
undefined unk68[0x10]; undefined unk68[0x10];

View File

@ -3,9 +3,16 @@
// 0x100f74f8 // 0x100f74f8
int g_legoAnimationManagerConfig = 1; int g_legoAnimationManagerConfig = 1;
// OFFSET: LEGO1 0x1005eb50
void LegoAnimationManager::configureLegoAnimationManager(int param_1)
{
g_legoAnimationManagerConfig = param_1;
}
// OFFSET: LEGO1 0x1005eb60 STUB // OFFSET: LEGO1 0x1005eb60 STUB
LegoAnimationManager::LegoAnimationManager() LegoAnimationManager::LegoAnimationManager()
{ {
// TODO
} }
// OFFSET: LEGO1 0x1005ed30 STUB // OFFSET: LEGO1 0x1005ed30 STUB
@ -14,6 +21,18 @@ LegoAnimationManager::~LegoAnimationManager()
// TODO // TODO
} }
// OFFSET: LEGO1 0x1005f130 STUB
void LegoAnimationManager::Init()
{
// TODO
}
// OFFSET: LEGO1 0x1005f6d0 STUB
void LegoAnimationManager::FUN_1005f6d0(MxBool p)
{
// TODO
}
// OFFSET: LEGO1 0x100619f0 STUB // OFFSET: LEGO1 0x100619f0 STUB
MxLong LegoAnimationManager::Notify(MxParam &p) MxLong LegoAnimationManager::Notify(MxParam &p)
{ {
@ -29,15 +48,3 @@ MxResult LegoAnimationManager::Tickle()
return SUCCESS; return SUCCESS;
} }
// OFFSET: LEGO1 0x1005f130 STUB
void LegoAnimationManager::Init()
{
// TODO
}
// OFFSET: LEGO1 0x1005eb50
void LegoAnimationManager::configureLegoAnimationManager(int param_1)
{
g_legoAnimationManagerConfig = param_1;
}

View File

@ -27,6 +27,8 @@ public:
return !strcmp(name, ClassName()) || MxCore::IsA(name); return !strcmp(name, ClassName()) || MxCore::IsA(name);
} }
void FUN_1005f6d0(MxBool p);
__declspec(dllexport) static void configureLegoAnimationManager(int param_1); __declspec(dllexport) static void configureLegoAnimationManager(int param_1);
private: private:

View File

@ -36,6 +36,7 @@ public:
void FUN_1003a720(MxU32 p_unk); void FUN_1003a720(MxU32 p_unk);
void HandleAction(MxU32 p_unk); void HandleAction(MxU32 p_unk);
inline MxU32 GetUnknown10() { return m_unk10; }
inline void SetUnknown424(undefined4 p_unk424) { m_unk424 = p_unk424; } inline void SetUnknown424(undefined4 p_unk424) { m_unk424 = p_unk424; }
private: private:

View File

@ -146,16 +146,52 @@ LegoVideoManager *VideoManager()
return LegoOmni::GetInstance()->GetVideoManager(); return LegoOmni::GetInstance()->GetVideoManager();
} }
// OFFSET: LEGO1 0x100157f0 // OFFSET: LEGO1 0x10015730
LegoBuildingManager *BuildingManager() MxBackgroundAudioManager *BackgroundAudioManager()
{ {
return LegoOmni::GetInstance()->GetLegoBuildingManager(); return LegoOmni::GetInstance()->GetBackgroundAudioManager();
}
// OFFSET: LEGO1 0x10015740
LegoInputManager *InputManager()
{
return LegoOmni::GetInstance()->GetInputManager();
}
// OFFSET: LEGO1 0x10015750
LegoControlManager *ControlManager()
{
return LegoOmni::GetInstance()->GetInputManager()->GetControlManager();
}
// OFFSET: LEGO1 0x10015760
LegoGameState *GameState()
{
return LegoOmni::GetInstance()->GetGameState();
}
// OFFSET: LEGO1 0x10015770
LegoAnimationManager *AnimationManager()
{
return LegoOmni::GetInstance()->GetAnimationManager();
}
// OFFSET: LEGO1 0x10015780
LegoNavController *NavController()
{
return LegoOmni::GetInstance()->GetNavController();
} }
// OFFSET: LEGO1 0x10015790 // OFFSET: LEGO1 0x10015790
Isle *GetIsle() LegoWorld *GetCurrentVehicle()
{ {
return LegoOmni::GetInstance()->GetIsle(); return LegoOmni::GetInstance()->GetCurrentVehicle();
}
// OFFSET: LEGO1 0x100157a0
LegoWorld *GetCurrentWorld()
{
return LegoOmni::GetInstance()->GetCurrentWorld();
} }
// OFFSET: LEGO1 0x100157e0 // OFFSET: LEGO1 0x100157e0
@ -164,10 +200,22 @@ LegoPlantManager *PlantManager()
return LegoOmni::GetInstance()->GetLegoPlantManager(); return LegoOmni::GetInstance()->GetLegoPlantManager();
} }
// OFFSET: LEGO1 0x10015730 // OFFSET: LEGO1 0x100157f0
MxBackgroundAudioManager *BackgroundAudioManager() LegoBuildingManager *BuildingManager()
{ {
return LegoOmni::GetInstance()->GetBackgroundAudioManager(); return LegoOmni::GetInstance()->GetLegoBuildingManager();
}
// OFFSET: LEGO1 0x10015800
GifManager *GetGifManager()
{
return LegoOmni::GetInstance()->GetGifManager();
}
// OFFSET: LEGO1 0x10015900
MxTransitionManager *TransitionManager()
{
return LegoOmni::GetInstance()->GetTransitionManager();
} }
// OFFSET: LEGO1 0x100c0280 // OFFSET: LEGO1 0x100c0280
@ -205,36 +253,6 @@ MxDSObject *CreateStreamObject(MxDSFile *p_file, MxS16 p_ofs)
return NULL; return NULL;
} }
// OFFSET: LEGO1 0x10015740
LegoInputManager *InputManager()
{
return LegoOmni::GetInstance()->GetInputManager();
}
// OFFSET: LEGO1 0x10015750
LegoControlManager *ControlManager()
{
return LegoOmni::GetInstance()->GetInputManager()->GetControlManager();
}
// OFFSET: LEGO1 0x10015760
LegoGameState *GameState()
{
return LegoOmni::GetInstance()->GetGameState();
}
// OFFSET: LEGO1 0x10015780
LegoNavController *NavController()
{
return LegoOmni::GetInstance()->GetNavController();
}
// OFFSET: LEGO1 0x10015900
MxTransitionManager *TransitionManager()
{
return LegoOmni::GetInstance()->GetTransitionManager();
}
// OFFSET: LEGO1 0x10053430 // OFFSET: LEGO1 0x10053430
const char *GetNoCD_SourceName() const char *GetNoCD_SourceName()
{ {
@ -244,7 +262,7 @@ const char *GetNoCD_SourceName()
// OFFSET: LEGO1 0x1005b5f0 // OFFSET: LEGO1 0x1005b5f0
MxLong LegoOmni::Notify(MxParam &p) MxLong LegoOmni::Notify(MxParam &p)
{ {
// FIXME: Stub // TODO
return 0; return 0;
} }
@ -273,7 +291,7 @@ void LegoOmni::Init()
m_unk78 = 0; m_unk78 = 0;
m_currentWorld = NULL; m_currentWorld = NULL;
m_unk80 = FALSE; m_unk80 = FALSE;
m_isle = NULL; m_currentVehicle = NULL;
m_unkLegoSaveDataWriter = NULL; m_unkLegoSaveDataWriter = NULL;
m_plantManager = NULL; m_plantManager = NULL;
m_gameState = NULL; m_gameState = NULL;
@ -299,7 +317,7 @@ MxResult LegoOmni::Create(COMPAT_CONST MxOmniCreateParam &p)
// OFFSET: LEGO1 0x10058c30 STUB // OFFSET: LEGO1 0x10058c30 STUB
void LegoOmni::Destroy() void LegoOmni::Destroy()
{ {
// FIXME: Stub // TODO
} }
// OFFSET: LEGO1 0x1005b580 // OFFSET: LEGO1 0x1005b580
@ -312,26 +330,24 @@ MxResult LegoOmni::Start(MxDSAction* action)
return result; return result;
} }
// OFFSET: LEGO1 0x1005b1d0 STUB
MxResult LegoOmni::DeleteObject(MxDSAction &ds) MxResult LegoOmni::DeleteObject(MxDSAction &ds)
{ {
// FIXME: Stub // TODO
return FAILURE; return FAILURE;
} }
// OFFSET: LEGO1 0x1005b3c0 STUB
MxBool LegoOmni::DoesEntityExist(MxDSAction &ds) MxBool LegoOmni::DoesEntityExist(MxDSAction &ds)
{ {
// FIXME: Stub // TODO
return TRUE; return TRUE;
} }
void LegoOmni::vtable0x2c() // OFFSET: LEGO1 0x1005b2f0 STUB
int LegoOmni::Vtable0x30(char*, int, MxCore*)
{ {
// FIXME: Stub // TODO
}
int LegoOmni::vtable0x30(char*, int, MxCore*)
{
// FIXME: Stub
return 0; return 0;
} }
@ -355,15 +371,3 @@ void LegoOmni::StopTimer()
MxOmni::StopTimer(); MxOmni::StopTimer();
SetAppCursor(0); SetAppCursor(0);
} }
// OFFSET: LEGO1 0x100157a0
LegoWorld *GetCurrentWorld()
{
return LegoOmni::GetInstance()->GetCurrentWorld();
}
// OFFSET: LEGO1 0x10015800
GifManager *GetGifManager()
{
return LegoOmni::GetInstance()->GetGifManager();
}

View File

@ -58,27 +58,28 @@ public:
virtual void Init() override; // vtable+14 virtual void Init() override; // vtable+14
virtual MxResult Create(COMPAT_CONST MxOmniCreateParam &p) override; // vtable+18 virtual MxResult Create(COMPAT_CONST MxOmniCreateParam &p) override; // vtable+18
virtual void Destroy() override; // vtable+1c virtual void Destroy() override; // vtable+1c
virtual MxResult Start(MxDSAction* action) override; virtual MxResult Start(MxDSAction* action) override; // vtable+20
virtual MxResult DeleteObject(MxDSAction &ds) override; virtual MxResult DeleteObject(MxDSAction &ds) override; // vtable+24
virtual MxBool DoesEntityExist(MxDSAction &ds) override; virtual MxBool DoesEntityExist(MxDSAction &ds) override; // vtable+28
virtual void vtable0x2c() override; virtual int Vtable0x30(char*, int, MxCore*) override; // vtable+30
virtual int vtable0x30(char*, int, MxCore*) override; virtual void NotifyCurrentEntity(MxNotificationParam *p_param) override; //vtable+34
virtual void NotifyCurrentEntity(MxNotificationParam *p_param) override; virtual void StartTimer() override; // vtable+38
virtual void StartTimer() override; virtual void StopTimer() override; //vtable+3c
virtual void StopTimer() override;
LegoVideoManager *GetVideoManager() { return (LegoVideoManager *)m_videoManager; }
LegoSoundManager *GetSoundManager() { return (LegoSoundManager *)m_soundManager; }
LegoVideoManager *GetVideoManager() { return (LegoVideoManager *) m_videoManager; }
LegoSoundManager *GetSoundManager() { return (LegoSoundManager *)m_soundManager;}
MxBackgroundAudioManager *GetBackgroundAudioManager() { return m_bkgAudioManager; }
LegoInputManager *GetInputManager() { return m_inputMgr; } LegoInputManager *GetInputManager() { return m_inputMgr; }
Isle *GetIsle() { return m_isle; }
LegoBuildingManager *GetLegoBuildingManager() { return m_buildingManager; }
LegoPlantManager *GetLegoPlantManager() { return m_plantManager; }
LegoGameState *GetGameState() { return m_gameState; }
LegoNavController *GetNavController() { return m_navController; }
MxTransitionManager *GetTransitionManager() { return m_transitionManager; }
LegoWorld *GetCurrentWorld() { return m_currentWorld; }
GifManager *GetGifManager() { return m_gifManager; } GifManager *GetGifManager() { return m_gifManager; }
LegoWorld *GetCurrentWorld() { return m_currentWorld; }
LegoNavController *GetNavController() { return m_navController; }
LegoWorld *GetCurrentVehicle() { return m_currentVehicle; }
LegoPlantManager *GetLegoPlantManager() { return m_plantManager; }
LegoAnimationManager *GetAnimationManager() { return m_animationManager; }
LegoBuildingManager *GetLegoBuildingManager() { return m_buildingManager; }
LegoGameState *GetGameState() { return m_gameState; }
MxBackgroundAudioManager *GetBackgroundAudioManager() { return m_bkgAudioManager; }
MxTransitionManager *GetTransitionManager() { return m_transitionManager; }
private: private:
undefined4 m_unk68; undefined4 m_unk68;
@ -89,10 +90,10 @@ private:
LegoWorld *m_currentWorld; LegoWorld *m_currentWorld;
MxBool m_unk80; MxBool m_unk80;
LegoNavController *m_navController; // 0x84 LegoNavController *m_navController; // 0x84
Isle* m_isle; // 0x88 LegoWorld *m_currentVehicle; // 0x88
LegoUnkSaveDataWriter* m_unkLegoSaveDataWriter; LegoUnkSaveDataWriter *m_unkLegoSaveDataWriter;
LegoPlantManager* m_plantManager; // 0x90 LegoPlantManager *m_plantManager; // 0x90
LegoAnimationManager* m_animationManager; LegoAnimationManager *m_animationManager;
LegoBuildingManager* m_buildingManager; // 0x98 LegoBuildingManager* m_buildingManager; // 0x98
LegoGameState *m_gameState; // 0x9c LegoGameState *m_gameState; // 0x9c
MxDSAction m_action; MxDSAction m_action;
@ -101,25 +102,26 @@ private:
MxBool m_unk13c; MxBool m_unk13c;
}; };
__declspec(dllexport) MxBackgroundAudioManager * BackgroundAudioManager(); __declspec(dllexport) MxBackgroundAudioManager *BackgroundAudioManager();
__declspec(dllexport) MxDSObject * CreateStreamObject(MxDSFile *,MxS16); __declspec(dllexport) MxDSObject *CreateStreamObject(MxDSFile *, MxS16);
__declspec(dllexport) LegoGameState * GameState(); __declspec(dllexport) LegoGameState *GameState();
__declspec(dllexport) const char * GetNoCD_SourceName(); __declspec(dllexport) const char *GetNoCD_SourceName();
__declspec(dllexport) LegoInputManager * InputManager(); __declspec(dllexport) LegoInputManager *InputManager();
__declspec(dllexport) LegoOmni * Lego(); __declspec(dllexport) LegoOmni *Lego();
__declspec(dllexport) void MakeSourceName(char *, const char *); __declspec(dllexport) void MakeSourceName(char *, const char *);
__declspec(dllexport) LegoEntity * PickEntity(MxLong,MxLong); __declspec(dllexport) LegoEntity *PickEntity(MxLong,MxLong);
__declspec(dllexport) LegoROI * PickROI(MxLong,MxLong); __declspec(dllexport) LegoROI *PickROI(MxLong,MxLong);
__declspec(dllexport) void SetOmniUserMessage(void (*)(const char *,int)); __declspec(dllexport) void SetOmniUserMessage(void (*)(const char *, int));
__declspec(dllexport) LegoSoundManager * SoundManager(); __declspec(dllexport) LegoSoundManager *SoundManager();
__declspec(dllexport) MxResult Start(MxDSAction*); __declspec(dllexport) MxResult Start(MxDSAction*);
__declspec(dllexport) MxTransitionManager * TransitionManager(); __declspec(dllexport) MxTransitionManager *TransitionManager();
__declspec(dllexport) LegoVideoManager * VideoManager(); __declspec(dllexport) LegoVideoManager *VideoManager();
LegoBuildingManager* BuildingManager(); LegoAnimationManager *AnimationManager();
LegoControlManager* ControlManager(); LegoBuildingManager *BuildingManager();
Isle* GetIsle(); LegoControlManager *ControlManager();
LegoPlantManager* PlantManager(); LegoWorld *GetCurrentVehicle();
LegoPlantManager *PlantManager();
MxBool KeyValueStringParse(char *, const char *, const char *); MxBool KeyValueStringParse(char *, const char *, const char *);
LegoWorld *GetCurrentWorld(); LegoWorld *GetCurrentWorld();
GifManager *GetGifManager(); GifManager *GetGifManager();

View File

@ -2,6 +2,86 @@
DECOMP_SIZE_ASSERT(LegoPathActor, 0x154) DECOMP_SIZE_ASSERT(LegoPathActor, 0x154)
// Probably in header
// OFFSET: LEGO1 0x10002d20 STUB
void LegoPathActor::VTable0x78()
{
// TODO
}
// OFFSET: LEGO1 0x10002d30 STUB
void LegoPathActor::VTable0x7c()
{
// TODO
}
// OFFSET: LEGO1 0x10002d40 STUB
void LegoPathActor::VTable0x90()
{
// TODO
}
// OFFSET: LEGO1 0x10002d50 STUB
void LegoPathActor::VTable0x94()
{
// TODO
}
// OFFSET: LEGO1 0x10002d60 STUB
void LegoPathActor::VTable0xa0()
{
// TODO
}
// OFFSET: LEGO1 0x10002d70 STUB
void LegoPathActor::VTable0xac()
{
// TODO
}
// OFFSET: LEGO1 0x10002d80 STUB
void LegoPathActor::VTable0xb0()
{
// TODO
}
// OFFSET: LEGO1 0x10002d90 STUB
void LegoPathActor::VTable0xb4()
{
// TODO
}
// OFFSET: LEGO1 0x10002da0 STUB
void LegoPathActor::VTable0xb8()
{
// TODO
}
// OFFSET: LEGO1 0x10002db0 STUB
void LegoPathActor::VTable0xbc()
{
// TODO
}
// OFFSET: LEGO1 0x10002dc0 STUB
void LegoPathActor::VTable0xc0()
{
// TODO
}
// OFFSET: LEGO1 0x10002dd0 STUB
void LegoPathActor::VTable0xc4()
{
// TODO
}
// OFFSET: LEGO1 0x10002de0 STUB
void LegoPathActor::VTable0xc8()
{
// TODO
}
// End header
// OFFSET: LEGO1 0x1002d700 STUB // OFFSET: LEGO1 0x1002d700 STUB
LegoPathActor::LegoPathActor() LegoPathActor::LegoPathActor()
{ {
@ -13,3 +93,75 @@ LegoPathActor::~LegoPathActor()
{ {
// TODO // TODO
} }
// OFFSET: LEGO1 0x1002d8d0 STUB
void LegoPathActor::VTable0x80()
{
// TODO
}
// OFFSET: LEGO1 0x1002d9c0 STUB
void LegoPathActor::VTable0x88()
{
// TODO
}
// OFFSET: LEGO1 0x1002de10 STUB
void LegoPathActor::VTable0x84()
{
// TODO
}
// OFFSET: LEGO1 0x1002e100 STUB
void LegoPathActor::VTable0x8c()
{
// TODO
}
// OFFSET: LEGO1 0x1002e740 STUB
void LegoPathActor::VTable0x74()
{
// TODO
}
// OFFSET: LEGO1 0x1002e790 STUB
void LegoPathActor::VTable0x70()
{
// TODO
}
// OFFSET: LEGO1 0x1002e8b0 STUB
void LegoPathActor::VTable0x98()
{
// TODO
}
// OFFSET: LEGO1 0x1002e8d0 STUB
void LegoPathActor::VTable0x6c()
{
// TODO
}
// OFFSET: LEGO1 0x1002ebe0 STUB
void LegoPathActor::VTable0x68()
{
// TODO
}
// OFFSET: LEGO1 0x1002f1b0 STUB
void LegoPathActor::VTable0x9c()
{
// TODO
}
// OFFSET: LEGO1 0x1002f650 STUB
void LegoPathActor::VTable0xa4()
{
// TODO
}
// OFFSET: LEGO1 0x1002f700 STUB
void LegoPathActor::VTable0xa8()
{
// TODO
}

View File

@ -25,6 +25,33 @@ public:
{ {
return !strcmp(name, LegoPathActor::ClassName()) || LegoActor::IsA(name); return !strcmp(name, LegoPathActor::ClassName()) || LegoActor::IsA(name);
} }
virtual void VTable0x68(); // vtable+0x68
virtual void VTable0x6c(); // vtable+0x6c
virtual void VTable0x70(); // vtable+0x70
virtual void VTable0x74(); // vtable+0x74
virtual void VTable0x78(); // vtable+0x78
virtual void VTable0x7c(); // vtable+0x7c
virtual void VTable0x80(); // vtable+0x80
virtual void VTable0x84(); // vtable+0x84
virtual void VTable0x88(); // vtable+0x88
virtual void VTable0x8c(); // vtable+0x8c
virtual void VTable0x90(); // vtable+0x90
virtual void VTable0x94(); // vtable+0x94
virtual void VTable0x98(); // vtable+0x98
virtual void VTable0x9c(); // vtable+0x9c
virtual void VTable0xa0(); // vtable+0xa0
virtual void VTable0xa4(); // vtable+0xa4
virtual void VTable0xa8(); // vtable+0xa8
virtual void VTable0xac(); // vtable+0xac
virtual void VTable0xb0(); // vtable+0xb0
virtual void VTable0xb4(); // vtable+0xb4
virtual void VTable0xb8(); // vtable+0xb8
virtual void VTable0xbc(); // vtable+0xbc
virtual void VTable0xc0(); // vtable+0xc0
virtual void VTable0xc4(); // vtable+0xc4
virtual void VTable0xc8(); // vtable+0xc8
protected: protected:
// TODO: the types // TODO: the types
undefined unk78[0xc4]; undefined unk78[0xc4];

View File

@ -103,6 +103,12 @@ void ConvertHSVToRGB(float h, float s, float v, float *r_out, float *b_out, floa
} }
} }
// OFFSET: LEGO1 0x1003ee00 STUB
void FUN_1003ee00(MxAtomId &p_atomId, MxS32 p_id)
{
}
// OFFSET: LEGO1 0x1003ef40 // OFFSET: LEGO1 0x1003ef40
void SetAppCursor(WPARAM p_wparam) void SetAppCursor(WPARAM p_wparam)
{ {

View File

@ -4,6 +4,7 @@
#include <windows.h> #include <windows.h>
#include "extra.h" #include "extra.h"
#include "mxatomid.h"
template <class T> template <class T>
inline T Abs(T p_t) inline T Abs(T p_t)
@ -54,6 +55,7 @@ inline void GetString(char **p_source, const char *&p_dest, T *p_obj, void (T::*
ExtraActionType MatchActionString(const char *); ExtraActionType MatchActionString(const char *);
void ConvertHSVToRGB(float r, float g, float b, float* out_r, float* out_g, float* out_b); void ConvertHSVToRGB(float r, float g, float b, float* out_r, float* out_g, float* out_b);
void FUN_1003ee00(MxAtomId &p_atomId, MxS32 p_id);
void SetAppCursor(WPARAM p_wparam); void SetAppCursor(WPARAM p_wparam);
#endif // LEGOUTIL_H #endif // LEGOUTIL_H

View File

@ -56,7 +56,7 @@ void MxOmni::Init()
} }
// OFFSET: LEGO1 0x100b0090 // OFFSET: LEGO1 0x100b0090
MxResult MxOmni::Start(MxDSAction* p_dsAction) MxResult MxOmni::Start(MxDSAction *p_dsAction)
{ {
MxResult result = FAILURE; MxResult result = FAILURE;
if(p_dsAction->GetAtomId().GetInternal() != NULL && p_dsAction->GetObjectId() != -1 && m_streamer != NULL) if(p_dsAction->GetAtomId().GetInternal() != NULL && p_dsAction->GetObjectId() != -1 && m_streamer != NULL)
@ -87,13 +87,13 @@ MxBool MxOmni::DoesEntityExist(MxDSAction &p_dsAction)
} }
// OFFSET: LEGO1 0x100b00e0 STUB // OFFSET: LEGO1 0x100b00e0 STUB
void MxOmni::vtable0x2c() void MxOmni::Vtable0x2c()
{ {
// TODO // TODO
} }
// OFFSET: LEGO1 0x100aefb0 STUB // OFFSET: LEGO1 0x100aefb0 STUB
int MxOmni::vtable0x30(char*, int, MxCore*) int MxOmni::Vtable0x30(char *, int, MxCore *)
{ {
// TODO // TODO
return 0; return 0;
@ -332,7 +332,7 @@ MxLong MxOmni::Notify(MxParam &p)
} }
// OFFSET: LEGO1 0x100b0880 STUB // OFFSET: LEGO1 0x100b0880 STUB
MxResult MxOmni::HandleNotificationType2(MxParam& p_param) MxResult MxOmni::HandleNotificationType2(MxParam &p_param)
{ {
// TODO STUB // TODO STUB
return FAILURE; return FAILURE;
@ -369,37 +369,37 @@ MxAtomIdCounterSet *AtomIdCounterSet()
} }
// OFFSET: LEGO1 0x100acef0 // OFFSET: LEGO1 0x100acef0
MxStreamer* Streamer() MxStreamer *Streamer()
{ {
return MxOmni::GetInstance()->GetStreamer(); return MxOmni::GetInstance()->GetStreamer();
} }
// OFFSET: LEGO1 0x100acf00 // OFFSET: LEGO1 0x100acf00
MxSoundManager* MSoundManager() MxSoundManager *MSoundManager()
{ {
return MxOmni::GetInstance()->GetSoundManager(); return MxOmni::GetInstance()->GetSoundManager();
} }
// OFFSET: LEGO1 0x100acf10 // OFFSET: LEGO1 0x100acf10
MxVideoManager* MVideoManager() MxVideoManager *MVideoManager()
{ {
return MxOmni::GetInstance()->GetVideoManager(); return MxOmni::GetInstance()->GetVideoManager();
} }
// OFFSET: LEGO1 0x100acf20 // OFFSET: LEGO1 0x100acf20
MxVariableTable* VariableTable() MxVariableTable *VariableTable()
{ {
return MxOmni::GetInstance()->GetVariableTable(); return MxOmni::GetInstance()->GetVariableTable();
} }
// OFFSET: LEGO1 0x100acf30 // OFFSET: LEGO1 0x100acf30
MxMusicManager* MusicManager() MxMusicManager *MusicManager()
{ {
return MxOmni::GetInstance()->GetMusicManager(); return MxOmni::GetInstance()->GetMusicManager();
} }
// OFFSET: LEGO1 0x100acf40 // OFFSET: LEGO1 0x100acf40
MxEventManager* EventManager() MxEventManager *EventManager()
{ {
return MxOmni::GetInstance()->GetEventManager(); return MxOmni::GetInstance()->GetEventManager();
} }

View File

@ -42,59 +42,59 @@ public:
virtual void Init(); // vtable+14 virtual void Init(); // vtable+14
virtual MxResult Create(COMPAT_CONST MxOmniCreateParam &p); // vtable+18 virtual MxResult Create(COMPAT_CONST MxOmniCreateParam &p); // vtable+18
virtual void Destroy(); // vtable+1c virtual void Destroy(); // vtable+1c
virtual MxResult Start(MxDSAction* p_dsAction); // vtable+20 virtual MxResult Start(MxDSAction *p_dsAction); // vtable+20
virtual MxResult DeleteObject(MxDSAction &p_dsAction); // vtable+24 virtual MxResult DeleteObject(MxDSAction &p_dsAction); // vtable+24
virtual MxBool DoesEntityExist(MxDSAction &p_dsAction); // vtable+28 virtual MxBool DoesEntityExist(MxDSAction &p_dsAction); // vtable+28
virtual void vtable0x2c(); // vtable+2c virtual void Vtable0x2c(); // vtable+2c
virtual int vtable0x30(char*, int, MxCore*); // vtable+30 virtual int Vtable0x30(char*, int, MxCore *); // vtable+30
virtual void NotifyCurrentEntity(MxNotificationParam *p_param); // vtable+34 virtual void NotifyCurrentEntity(MxNotificationParam *p_param); // vtable+34
virtual void StartTimer(); // vtable+38 virtual void StartTimer(); // vtable+38
virtual void StopTimer(); // vtable+3c virtual void StopTimer(); // vtable+3c
virtual MxBool IsTimerRunning(); //vtable+40 virtual MxBool IsTimerRunning(); //vtable+40
static void SetInstance(MxOmni* instance); static void SetInstance(MxOmni *instance);
HWND GetWindowHandle() const { return this->m_windowHandle; } HWND GetWindowHandle() const { return this->m_windowHandle; }
MxObjectFactory* GetObjectFactory() const { return this->m_objectFactory; } MxObjectFactory *GetObjectFactory() const { return this->m_objectFactory; }
MxNotificationManager* GetNotificationManager() const { return this->m_notificationManager; } MxNotificationManager *GetNotificationManager() const { return this->m_notificationManager; }
MxTickleManager* GetTickleManager() const { return this->m_tickleManager; } MxTickleManager *GetTickleManager() const { return this->m_tickleManager; }
MxTimer* GetTimer() const { return this->m_timer; } MxTimer *GetTimer() const { return this->m_timer; }
MxStreamer* GetStreamer() const { return this->m_streamer; } MxStreamer *GetStreamer() const { return this->m_streamer; }
MxSoundManager* GetSoundManager() const { return this->m_soundManager; } MxSoundManager *GetSoundManager() const { return this->m_soundManager; }
MxVideoManager* GetVideoManager() const { return this->m_videoManager; } MxVideoManager *GetVideoManager() const { return this->m_videoManager; }
MxVariableTable* GetVariableTable() const { return this->m_variableTable; } MxVariableTable *GetVariableTable() const { return this->m_variableTable; }
MxMusicManager* GetMusicManager() const { return this->m_musicManager; } MxMusicManager *GetMusicManager() const { return this->m_musicManager; }
MxEventManager* GetEventManager() const { return this->m_eventManager; } MxEventManager *GetEventManager() const { return this->m_eventManager; }
MxAtomIdCounterSet* GetAtomIdCounterSet() const { return this->m_atomIdCounterSet; } MxAtomIdCounterSet *GetAtomIdCounterSet() const { return this->m_atomIdCounterSet; }
MxResult HandleNotificationType2(MxParam& p_param); MxResult HandleNotificationType2(MxParam &p_param);
protected: protected:
static MxOmni* g_instance; static MxOmni *g_instance;
MxString m_mediaPath; // 0x8 MxString m_mediaPath; // 0x8
HWND m_windowHandle; // 0x18; HWND m_windowHandle; // 0x18;
MxObjectFactory *m_objectFactory; // 0x1C MxObjectFactory *m_objectFactory; // 0x1C
MxVariableTable* m_variableTable; //0x20 MxVariableTable *m_variableTable; //0x20
MxTickleManager* m_tickleManager; //0x24 MxTickleManager *m_tickleManager; //0x24
MxNotificationManager* m_notificationManager; //0x28 MxNotificationManager *m_notificationManager; //0x28
MxVideoManager *m_videoManager; //0x2C MxVideoManager *m_videoManager; //0x2C
MxSoundManager* m_soundManager; //0x30 MxSoundManager *m_soundManager; //0x30
MxMusicManager* m_musicManager; //0x34 MxMusicManager *m_musicManager; //0x34
MxEventManager* m_eventManager; //0x38 MxEventManager *m_eventManager; //0x38
MxTimer* m_timer; //0x3C MxTimer *m_timer; //0x3C
MxStreamer* m_streamer; //0x40 MxStreamer *m_streamer; //0x40
MxAtomIdCounterSet* m_atomIdCounterSet; // 0x44 MxAtomIdCounterSet *m_atomIdCounterSet; // 0x44
MxCriticalSection m_criticalsection; // 0x48 MxCriticalSection m_criticalsection; // 0x48
MxBool m_timerRunning; // 0x64 MxBool m_timerRunning; // 0x64
}; };
__declspec(dllexport) MxTickleManager * TickleManager(); __declspec(dllexport) MxTickleManager *TickleManager();
__declspec(dllexport) MxTimer * Timer(); __declspec(dllexport) MxTimer *Timer();
__declspec(dllexport) MxStreamer * Streamer(); __declspec(dllexport) MxStreamer *Streamer();
__declspec(dllexport) MxSoundManager * MSoundManager(); __declspec(dllexport) MxSoundManager *MSoundManager();
__declspec(dllexport) MxVariableTable * VariableTable(); __declspec(dllexport) MxVariableTable *VariableTable();
__declspec(dllexport) MxMusicManager * MusicManager(); __declspec(dllexport) MxMusicManager *MusicManager();
__declspec(dllexport) MxEventManager * EventManager(); __declspec(dllexport) MxEventManager *EventManager();
__declspec(dllexport) MxNotificationManager * NotificationManager(); __declspec(dllexport) MxNotificationManager *NotificationManager();
MxResult DeleteObject(MxDSAction &p_dsAction); MxResult DeleteObject(MxDSAction &p_dsAction);
MxVideoManager *MVideoManager(); MxVideoManager *MVideoManager();

View File

@ -47,7 +47,7 @@ void MxPresenter::ParseExtra()
token = strtok(NULL, g_parseExtraTokens); token = strtok(NULL, g_parseExtraTokens);
MxS32 val = token ? atoi(token) : 0; MxS32 val = token ? atoi(token) : 0;
MxS32 result = MxOmni::GetInstance()->vtable0x30(t_token, val, this); MxS32 result = MxOmni::GetInstance()->Vtable0x30(t_token, val, this);
m_action->SetFlags(m_action->GetFlags() | MxDSAction::Flag_Parsed); m_action->SetFlags(m_action->GetFlags() | MxDSAction::Flag_Parsed);