mirror of
https://github.com/isledecomp/isle.git
synced 2024-11-26 01:28:30 -05:00
Implement/match LegoOmni::Create (#556)
* Implement/match LegoOmni::Create * Fix var * Rename * Fix style
This commit is contained in:
parent
c69cd4d818
commit
a29c0aca3f
17 changed files with 208 additions and 50 deletions
|
@ -292,6 +292,7 @@ add_library(lego1 SHARED
|
|||
LEGO1/lego/legoomni/src/common/legostate.cpp
|
||||
LEGO1/lego/legoomni/src/common/legounksavedatawriter.cpp
|
||||
LEGO1/lego/legoomni/src/common/legoutil.cpp
|
||||
LEGO1/lego/legoomni/src/common/legovariables.cpp
|
||||
LEGO1/lego/legoomni/src/common/mxcompositemediapresenter.cpp
|
||||
LEGO1/lego/legoomni/src/control/legocontrolmanager.cpp
|
||||
LEGO1/lego/legoomni/src/control/mxcontrolpresenter.cpp
|
||||
|
|
|
@ -64,6 +64,8 @@ class GifManagerBase {
|
|||
return NULL;
|
||||
}
|
||||
|
||||
inline void SetOwnership(MxBool p_ownership) { m_ownership = p_ownership; }
|
||||
|
||||
// SYNTHETIC: LEGO1 0x1005a310
|
||||
// GifManagerBase::`scalar deleting destructor'
|
||||
|
||||
|
|
|
@ -42,6 +42,8 @@ class LegoAnimationManager : public MxCore {
|
|||
|
||||
private:
|
||||
void Init();
|
||||
|
||||
undefined m_unk0x08[0x4f8]; // 0x08
|
||||
};
|
||||
|
||||
#endif // LEGOANIMATIONMANAGER_H
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
#ifndef LEGOBUILDINGMANAGER_H
|
||||
#define LEGOBUILDINGMANAGER_H
|
||||
|
||||
#include "decomp.h"
|
||||
#include "mxcore.h"
|
||||
|
||||
// VTABLE: LEGO1 0x100d6f50
|
||||
|
@ -30,6 +31,8 @@ class LegoBuildingManager : public MxCore {
|
|||
|
||||
private:
|
||||
void Init();
|
||||
|
||||
undefined m_unk0x08[0x28]; // 0x08
|
||||
};
|
||||
|
||||
#endif // LEGOBUILDINGMANAGER_H
|
||||
|
|
|
@ -104,6 +104,7 @@ class LegoOmni : public MxOmni {
|
|||
void FUN_1005b4f0(MxBool p_disable, MxU16 p_flags);
|
||||
void CreateBackgroundAudio();
|
||||
void RemoveWorld(const MxAtomId&, MxLong);
|
||||
MxResult FUN_1005a5f0();
|
||||
undefined4 FUN_1005b490(char* p_worldName);
|
||||
|
||||
static MxS32 GetCurrPathInfo(LegoPathBoundary**, MxS32&);
|
||||
|
|
|
@ -29,6 +29,8 @@ class LegoPlantManager : public MxCore {
|
|||
|
||||
private:
|
||||
void Init();
|
||||
|
||||
undefined m_unk0x08[0x24]; // 0x08
|
||||
};
|
||||
|
||||
#endif // LEGOPLANTMANAGER_H
|
||||
|
|
|
@ -33,12 +33,18 @@ struct LegoSaveDataEntry3 {
|
|||
MxU8 m_savePart10; // 0x104
|
||||
};
|
||||
|
||||
// SIZE 0x08
|
||||
class LegoUnkSaveDataWriter {
|
||||
public:
|
||||
LegoUnkSaveDataWriter();
|
||||
|
||||
MxResult WriteSaveData3(LegoStorage* p_stream);
|
||||
AutoROI* FUN_10083500(undefined4, undefined4);
|
||||
void FUN_100832a0();
|
||||
void FUN_10083db0(LegoROI* p_roi);
|
||||
|
||||
private:
|
||||
undefined m_unk0x00[0x08]; // 0x00
|
||||
};
|
||||
|
||||
#endif // LEGOUNKSAVEDATAWRITER_H
|
||||
|
|
47
LEGO1/lego/legoomni/include/legovariables.h
Normal file
47
LEGO1/lego/legoomni/include/legovariables.h
Normal file
|
@ -0,0 +1,47 @@
|
|||
#ifndef LEGOVARIABLES_H
|
||||
#define LEGOVARIABLES_H
|
||||
|
||||
#include "mxvariable.h"
|
||||
|
||||
extern const char* g_varVISIBILITY;
|
||||
extern const char* g_varCAMERALOCATION;
|
||||
extern const char* g_varCURSOR;
|
||||
extern const char* g_varWHOAMI;
|
||||
|
||||
// VTABLE: LEGO1 0x100d86c8
|
||||
// SIZE 0x24
|
||||
class VisibilityVariable : public MxVariable {
|
||||
public:
|
||||
VisibilityVariable() { m_key = g_varVISIBILITY; }
|
||||
|
||||
void SetValue(const char* p_value) override; // vtable+0x04
|
||||
};
|
||||
|
||||
// VTABLE: LEGO1 0x100d86b8
|
||||
// SIZE 0x24
|
||||
class CameraLocationVariable : public MxVariable {
|
||||
public:
|
||||
CameraLocationVariable() { m_key = g_varCAMERALOCATION; }
|
||||
|
||||
void SetValue(const char* p_value) override; // vtable+0x04
|
||||
};
|
||||
|
||||
// VTABLE: LEGO1 0x100d86a8
|
||||
// SIZE 0x24
|
||||
class CursorVariable : public MxVariable {
|
||||
public:
|
||||
CursorVariable() { m_key = g_varCURSOR; }
|
||||
|
||||
void SetValue(const char* p_value) override; // vtable+0x04
|
||||
};
|
||||
|
||||
// VTABLE: LEGO1 0x100d8698
|
||||
// SIZE 0x24
|
||||
class WhoAmIVariable : public MxVariable {
|
||||
public:
|
||||
WhoAmIVariable() { m_key = g_varWHOAMI; }
|
||||
|
||||
void SetValue(const char* p_value) override; // vtable+0x04
|
||||
};
|
||||
|
||||
#endif // LEGOVARIABLES_H
|
|
@ -74,6 +74,9 @@ class LegoWorldListCursor : public MxPtrListCursor<LegoWorld> {
|
|||
// TEMPLATE: LEGO1 0x100599f0
|
||||
// MxPtrList<LegoWorld>::Destroy
|
||||
|
||||
// TEMPLATE: LEGO1 0x10059a70
|
||||
// MxPtrList<LegoWorld>::~MxPtrList<LegoWorld>
|
||||
|
||||
// SYNTHETIC: LEGO1 0x10059ac0
|
||||
// MxCollection<LegoWorld *>::`scalar deleting destructor'
|
||||
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
#include "legobuildingmanager.h"
|
||||
|
||||
DECOMP_SIZE_ASSERT(LegoBuildingManager, 0x30)
|
||||
|
||||
// GLOBAL: LEGO1 0x100f37cc
|
||||
int g_buildingManagerConfig = 1;
|
||||
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
#include "legoplantmanager.h"
|
||||
|
||||
DECOMP_SIZE_ASSERT(LegoPlantManager, 0x2c)
|
||||
|
||||
// FUNCTION: LEGO1 0x10026220
|
||||
LegoPlantManager::LegoPlantManager()
|
||||
{
|
||||
|
|
|
@ -3,11 +3,18 @@
|
|||
#include "legogamestate.h"
|
||||
#include "roi/legoroi.h"
|
||||
|
||||
DECOMP_SIZE_ASSERT(LegoSaveDataEntry3, 0x108);
|
||||
DECOMP_SIZE_ASSERT(LegoUnkSaveDataWriter, 0x08)
|
||||
DECOMP_SIZE_ASSERT(LegoSaveDataEntry3, 0x108)
|
||||
|
||||
// GLOBAL: LEGO1 0x10104f20
|
||||
LegoSaveDataEntry3 g_saveData3[66];
|
||||
|
||||
// STUB: LEGO1 0x10082a20
|
||||
LegoUnkSaveDataWriter::LegoUnkSaveDataWriter()
|
||||
{
|
||||
// TODO
|
||||
}
|
||||
|
||||
// STUB: LEGO1 0x100832a0
|
||||
void LegoUnkSaveDataWriter::FUN_100832a0()
|
||||
{
|
||||
|
|
40
LEGO1/lego/legoomni/src/common/legovariables.cpp
Normal file
40
LEGO1/lego/legoomni/src/common/legovariables.cpp
Normal file
|
@ -0,0 +1,40 @@
|
|||
#include "legovariables.h"
|
||||
|
||||
// GLOBAL: LEGO1 0x100f3a40
|
||||
// STRING: LEGO1 0x100f3808
|
||||
const char* g_varVISIBILITY = "VISIBILITY";
|
||||
|
||||
// GLOBAL: LEGO1 0x100f3a44
|
||||
// STRING: LEGO1 0x100f3a30
|
||||
const char* g_varCAMERALOCATION = "CAMERA_LOCATION";
|
||||
|
||||
// GLOBAL: LEGO1 0x100f3a48
|
||||
// STRING: LEGO1 0x100f3a28
|
||||
const char* g_varCURSOR = "CURSOR";
|
||||
|
||||
// GLOBAL: LEGO1 0x100f3a4c
|
||||
// STRING: LEGO1 0x100f3a1c
|
||||
const char* g_varWHOAMI = "WHO_AM_I";
|
||||
|
||||
// STUB: LEGO1 0x10037d00
|
||||
void VisibilityVariable::SetValue(const char* p_value)
|
||||
{
|
||||
// TODO
|
||||
}
|
||||
|
||||
// STUB: LEGO1 0x10037d80
|
||||
void CameraLocationVariable::SetValue(const char* p_value)
|
||||
{
|
||||
// TODO
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x10037e30
|
||||
void CursorVariable::SetValue(const char* p_value)
|
||||
{
|
||||
}
|
||||
|
||||
// STUB: LEGO1 0x10037e40
|
||||
void WhoAmIVariable::SetValue(const char* p_value)
|
||||
{
|
||||
// TODO
|
||||
}
|
|
@ -6,16 +6,13 @@
|
|||
#include "legogamestate.h"
|
||||
#include "legoinputmanager.h"
|
||||
#include "legoomni.h"
|
||||
#include "legovariables.h"
|
||||
#include "mxnotificationmanager.h"
|
||||
#include "mxomni.h"
|
||||
#include "mxtransitionmanager.h"
|
||||
|
||||
DECOMP_SIZE_ASSERT(ElevatorBottom, 0xfc)
|
||||
|
||||
// STRING: LEGO1 0x100f0d34
|
||||
// GLOBAL: LEGO1 0x100f3a44
|
||||
const char* g_cameraLoc = "CAMERA_LOCATION";
|
||||
|
||||
// FUNCTION: LEGO1 0x10017e90
|
||||
ElevatorBottom::ElevatorBottom()
|
||||
{
|
||||
|
@ -106,7 +103,7 @@ MxLong ElevatorBottom::HandleClick(LegoControlManagerEvent& p_param)
|
|||
state->SetUnknown1c(1);
|
||||
m_unk0xf8 = LegoGameState::e_unk6;
|
||||
TransitionManager()->StartTransition(MxTransitionManager::e_pixelation, 50, FALSE, FALSE);
|
||||
VariableTable()->SetVariable(g_cameraLoc, "LCAMZI1,90");
|
||||
VariableTable()->SetVariable(g_varCAMERALOCATION, "LCAMZI1,90");
|
||||
result = 1;
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -10,6 +10,7 @@
|
|||
#include "legosoundmanager.h"
|
||||
#include "legounksavedatawriter.h"
|
||||
#include "legoutil.h"
|
||||
#include "legovariables.h"
|
||||
#include "legovideomanager.h"
|
||||
#include "legoworld.h"
|
||||
#include "legoworldlist.h"
|
||||
|
@ -532,70 +533,110 @@ MxResult LegoOmni::Create(MxOmniCreateParam& p_param)
|
|||
p_param.CreateFlags().CreateTickleManager(FALSE);
|
||||
|
||||
if (!(m_tickleManager = new MxTickleManager())) {
|
||||
return FAILURE;
|
||||
goto done;
|
||||
}
|
||||
|
||||
if (MxOmni::Create(p_param) != SUCCESS) {
|
||||
return FAILURE;
|
||||
goto done;
|
||||
}
|
||||
|
||||
m_objectFactory = new LegoObjectFactory();
|
||||
if (m_objectFactory == NULL) {
|
||||
return FAILURE;
|
||||
if (!(m_objectFactory = new LegoObjectFactory())) {
|
||||
goto done;
|
||||
}
|
||||
|
||||
if ((m_soundManager = new LegoSoundManager())) {
|
||||
if (m_soundManager->Create(10, 0) != SUCCESS) {
|
||||
if (!(m_soundManager = new LegoSoundManager()) || m_soundManager->Create(10, 0) != SUCCESS) {
|
||||
delete m_soundManager;
|
||||
m_soundManager = NULL;
|
||||
return FAILURE;
|
||||
}
|
||||
goto done;
|
||||
}
|
||||
|
||||
if ((m_videoManager = new LegoVideoManager())) {
|
||||
if (m_videoManager->Create(p_param.GetVideoParam(), 100, 0) != SUCCESS) {
|
||||
if (!(m_videoManager = new LegoVideoManager()) ||
|
||||
m_videoManager->Create(p_param.GetVideoParam(), 100, 0) != SUCCESS) {
|
||||
delete m_videoManager;
|
||||
m_videoManager = NULL;
|
||||
}
|
||||
goto done;
|
||||
}
|
||||
|
||||
if ((m_inputMgr = new LegoInputManager())) {
|
||||
if (m_inputMgr->Create(p_param.GetWindowHandle()) != SUCCESS) {
|
||||
if (!(m_inputMgr = new LegoInputManager()) || m_inputMgr->Create(p_param.GetWindowHandle()) != SUCCESS) {
|
||||
delete m_inputMgr;
|
||||
m_inputMgr = NULL;
|
||||
}
|
||||
goto done;
|
||||
}
|
||||
|
||||
m_viewLODListManager = new ViewLODListManager();
|
||||
m_gifManager = new GifManager();
|
||||
// TODO: there is another class here
|
||||
m_gifManager->SetOwnership(FALSE);
|
||||
// FUN_10046c10
|
||||
|
||||
m_saveDataWriter = new LegoUnkSaveDataWriter();
|
||||
m_plantManager = new LegoPlantManager();
|
||||
m_animationManager = new LegoAnimationManager();
|
||||
m_buildingManager = new LegoBuildingManager();
|
||||
m_gameState = new LegoGameState();
|
||||
m_worldList = new LegoWorldList(TRUE);
|
||||
|
||||
if (m_viewLODListManager && m_gifManager && m_worldList && m_plantManager && m_animationManager &&
|
||||
m_buildingManager) {
|
||||
// TODO: initialize a bunch of MxVariables
|
||||
if (!m_viewLODListManager || !m_gifManager || !m_worldList || !m_saveDataWriter || !m_plantManager ||
|
||||
!m_animationManager || !m_buildingManager) {
|
||||
goto done;
|
||||
}
|
||||
|
||||
MxVariable* variable;
|
||||
|
||||
if (!(variable = new VisibilityVariable())) {
|
||||
goto done;
|
||||
}
|
||||
m_variableTable->SetVariable(variable);
|
||||
|
||||
if (!(variable = new CameraLocationVariable())) {
|
||||
goto done;
|
||||
}
|
||||
m_variableTable->SetVariable(variable);
|
||||
|
||||
if (!(variable = new CursorVariable())) {
|
||||
goto done;
|
||||
}
|
||||
m_variableTable->SetVariable(variable);
|
||||
|
||||
if (!(variable = new WhoAmIVariable())) {
|
||||
goto done;
|
||||
}
|
||||
m_variableTable->SetVariable(variable);
|
||||
|
||||
RegisterScripts();
|
||||
FUN_1001a700();
|
||||
// todo: another function call. in legoomni maybe?
|
||||
m_bkgAudioManager = new MxBackgroundAudioManager();
|
||||
if (m_bkgAudioManager != NULL) {
|
||||
m_transitionManager = new MxTransitionManager();
|
||||
if (m_transitionManager != NULL) {
|
||||
if (m_transitionManager->GetDDrawSurfaceFromVideoManager() == SUCCESS) {
|
||||
result = FUN_1005a5f0();
|
||||
|
||||
if (result != SUCCESS) {
|
||||
goto done;
|
||||
}
|
||||
|
||||
if (!(m_bkgAudioManager = new MxBackgroundAudioManager())) {
|
||||
goto done;
|
||||
}
|
||||
|
||||
if (!(m_transitionManager = new MxTransitionManager())) {
|
||||
goto done;
|
||||
}
|
||||
|
||||
if (m_transitionManager->GetDDrawSurfaceFromVideoManager() != SUCCESS) {
|
||||
goto done;
|
||||
}
|
||||
|
||||
m_notificationManager->Register(this);
|
||||
SetAppCursor(1);
|
||||
m_gameState->SetCurrentAct(LegoGameState::e_act1);
|
||||
return SUCCESS;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
result = SUCCESS;
|
||||
|
||||
done:
|
||||
return result;
|
||||
}
|
||||
|
||||
return FAILURE;
|
||||
// STUB: LEGO1 0x1005a5f0
|
||||
MxResult LegoOmni::FUN_1005a5f0()
|
||||
{
|
||||
// TODO
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x1005ac90
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
#include "legoanimationmanager.h"
|
||||
|
||||
DECOMP_SIZE_ASSERT(LegoAnimationManager, 0x500)
|
||||
|
||||
// GLOBAL: LEGO1 0x100f74f8
|
||||
int g_legoAnimationManagerConfig = 1;
|
||||
|
||||
|
|
|
@ -22,13 +22,13 @@ class MxVariable {
|
|||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x1003bea0
|
||||
virtual MxString* GetValue() { return &m_value; }
|
||||
virtual MxString* GetValue() { return &m_value; } // vtable+0x00
|
||||
|
||||
// FUNCTION: LEGO1 0x1003beb0
|
||||
virtual void SetValue(const char* p_value) { m_value = p_value; }
|
||||
virtual void SetValue(const char* p_value) { m_value = p_value; } // vtable+0x04
|
||||
|
||||
// FUNCTION: LEGO1 0x1003bec0
|
||||
virtual void Destroy() { delete this; }
|
||||
virtual void Destroy() { delete this; } // vtable+0x08
|
||||
|
||||
inline const MxString* GetKey() const { return &m_key; }
|
||||
|
||||
|
|
Loading…
Reference in a new issue