Implement/match LegoOmni::GetScriptIndex (#571)

* Implement/match LegoOmni::GetScriptIndex

* Fix type

* Fix
This commit is contained in:
Christian Semmler 2024-02-16 20:10:42 -05:00 committed by GitHub
parent c67f613b8d
commit b47412183b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
9 changed files with 35 additions and 25 deletions

View file

@ -31,7 +31,7 @@ class LegoAnimationManager : public MxCore {
void FUN_1005ef10(); void FUN_1005ef10();
void FUN_1005f0b0(); void FUN_1005f0b0();
void FUN_1005f6d0(MxBool); void FUN_1005f6d0(MxBool);
void FUN_1005f720(undefined4); void FUN_1005f720(MxS32 p_scriptIndex);
void FUN_10061010(undefined4); void FUN_10061010(undefined4);
void FUN_10064670(MxBool); void FUN_10064670(MxBool);

View file

@ -98,6 +98,9 @@ class LegoOmni : public MxOmni {
return *this; return *this;
} }
inline MxS32 GetIndex() { return m_index; }
inline const char* GetKey() { return m_key; }
private: private:
MxS32 m_index; // 0x00 MxS32 m_index; // 0x00
char m_key[20]; // 0x04 char m_key[20]; // 0x04
@ -200,7 +203,7 @@ class LegoOmni : public MxOmni {
void CreateBackgroundAudio(); void CreateBackgroundAudio();
void RemoveWorld(const MxAtomId&, MxLong); void RemoveWorld(const MxAtomId&, MxLong);
MxResult RegisterScripts(); MxResult RegisterScripts();
undefined4 FUN_1005b490(char* p_worldName); MxS32 GetScriptIndex(const char* p_key);
static MxS32 GetCurrPathInfo(LegoPathBoundary**, MxS32&); static MxS32 GetCurrPathInfo(LegoPathBoundary**, MxS32&);
static void CreateInstance(); static void CreateInstance();

View file

@ -20,7 +20,7 @@ class LegoPlantManager : public MxCore {
return "LegoPlantManager"; return "LegoPlantManager";
} }
void FUN_10026360(undefined4 p_world); void FUN_10026360(MxS32 p_scriptIndex);
void FUN_100263a0(undefined4 p_und); void FUN_100263a0(undefined4 p_und);
void FUN_10027120(); void FUN_10027120();

View file

@ -65,11 +65,12 @@ class LegoWorld : public LegoEntity {
virtual void Enable(MxBool p_enable); // vtable+0x68 virtual void Enable(MxBool p_enable); // vtable+0x68
inline LegoCameraController* GetCamera() { return m_cameraController; } inline LegoCameraController* GetCamera() { return m_cameraController; }
inline void SetUnknown0xec(undefined4 p_unk0xec) { m_unk0xec = p_unk0xec; } inline MxS32 GetScriptIndex() { return m_scriptIndex; }
inline undefined4 GetUnknown0xec() { return m_unk0xec; }
inline MxCoreSet& GetUnknown0xd0() { return m_set0xd0; } inline MxCoreSet& GetUnknown0xd0() { return m_set0xd0; }
inline list<AutoROI*>& GetUnknownList0xe0() { return m_list0xe0; } inline list<AutoROI*>& GetUnknownList0xe0() { return m_list0xe0; }
inline void SetScriptIndex(MxS32 p_scriptIndex) { m_scriptIndex = p_scriptIndex; }
MxBool PresentersPending(); MxBool PresentersPending();
void Remove(MxCore* p_object); void Remove(MxCore* p_object);
void FUN_1001fc80(IslePathActor* p_actor); void FUN_1001fc80(IslePathActor* p_actor);
@ -91,7 +92,7 @@ class LegoWorld : public LegoEntity {
MxPresenterList m_controlPresenters; // 0xb8 MxPresenterList m_controlPresenters; // 0xb8
MxCoreSet m_set0xd0; // 0xd0 MxCoreSet m_set0xd0; // 0xd0
list<AutoROI*> m_list0xe0; // 0xe0 list<AutoROI*> m_list0xe0; // 0xe0
undefined4 m_unk0xec; // 0xec MxS32 m_scriptIndex; // 0xec
LegoHideAnimPresenter* m_hideAnimPresenter; // 0xf0 LegoHideAnimPresenter* m_hideAnimPresenter; // 0xf0
MxS16 m_startupTicks; // 0xf4 MxS16 m_startupTicks; // 0xf4
MxBool m_worldStarted; // 0xf6 MxBool m_worldStarted; // 0xf6

View file

@ -21,7 +21,7 @@ void LegoPlantManager::Init()
} }
// STUB: LEGO1 0x10026360 // STUB: LEGO1 0x10026360
void LegoPlantManager::FUN_10026360(undefined4 p_world) void LegoPlantManager::FUN_10026360(MxS32 p_scriptIndex)
{ {
// TODO // TODO
} }

View file

@ -84,7 +84,7 @@ MxResult LegoWorld::Create(MxDSAction& p_dsAction)
if (p_dsAction.GetFlags() & MxDSAction::c_enabled) { if (p_dsAction.GetFlags() & MxDSAction::c_enabled) {
if (CurrentWorld()) { if (CurrentWorld()) {
CurrentWorld()->Enable(0); CurrentWorld()->Enable(FALSE);
} }
SetCurrentWorld(this); SetCurrentWorld(this);
@ -92,7 +92,7 @@ MxResult LegoWorld::Create(MxDSAction& p_dsAction)
} }
SetIsWorldActive(TRUE); SetIsWorldActive(TRUE);
m_unk0xec = -1; m_scriptIndex = -1;
return SUCCESS; return SUCCESS;
} }
@ -169,8 +169,8 @@ void LegoWorld::Destroy(MxBool p_fromDestructor)
} }
} }
if (m_unk0xec != -1 && m_set0xd0.empty()) { if (m_scriptIndex != -1 && m_set0xd0.empty()) {
PlantManager()->FUN_100263a0(m_unk0xec); PlantManager()->FUN_100263a0(m_scriptIndex);
BuildingManager()->FUN_1002fb30(); BuildingManager()->FUN_1002fb30();
} }
@ -574,9 +574,9 @@ void LegoWorld::Enable(MxBool p_enable)
Lego()->SetNavController(m_cameraController->GetNavController()); Lego()->SetNavController(m_cameraController->GetNavController());
} }
if (m_unk0xec != -1) { if (m_scriptIndex != -1) {
PlantManager()->FUN_10026360(m_unk0xec); PlantManager()->FUN_10026360(m_scriptIndex);
AnimationManager()->FUN_1005f720(m_unk0xec); AnimationManager()->FUN_1005f720(m_scriptIndex);
BuildingManager()->FUN_1002fa00(); BuildingManager()->FUN_1002fa00();
AnimationManager()->FUN_1005f0b0(); AnimationManager()->FUN_1005f0b0();
} }
@ -597,8 +597,8 @@ void LegoWorld::Enable(MxBool p_enable)
AnimationManager()->FUN_1005ee80(FALSE); AnimationManager()->FUN_1005ee80(FALSE);
m_set0xd0.insert(this); m_set0xd0.insert(this);
if (m_unk0xec != -1) { if (m_scriptIndex != -1) {
PlantManager()->FUN_100263a0(m_unk0xec); PlantManager()->FUN_100263a0(m_scriptIndex);
BuildingManager()->FUN_1002fb30(); BuildingManager()->FUN_1002fb30();
} }

View file

@ -39,9 +39,9 @@ LegoWorldPresenter::~LegoWorldPresenter()
{ {
MxBool result = FALSE; MxBool result = FALSE;
if (m_entity) { if (m_entity) {
undefined4 world = ((LegoWorld*) m_entity)->GetUnknown0xec(); MxS32 scriptIndex = ((LegoWorld*) m_entity)->GetScriptIndex();
PlantManager()->FUN_10026360(world); PlantManager()->FUN_10026360(scriptIndex);
AnimationManager()->FUN_1005f720(world); AnimationManager()->FUN_1005f720(scriptIndex);
BuildingManager()->FUN_1002fa00(); BuildingManager()->FUN_1002fa00();
result = ((LegoWorld*) m_entity)->VTable0x5c(); result = ((LegoWorld*) m_entity)->VTable0x5c();
} }
@ -189,9 +189,9 @@ void LegoWorldPresenter::ParseExtra()
data[len] = 0; data[len] = 0;
if (KeyValueStringParse(output, g_strWORLD, data)) { if (KeyValueStringParse(output, g_strWORLD, data)) {
char* worldName = strtok(output, g_parseExtraTokens); char* worldKey = strtok(output, g_parseExtraTokens);
LoadWorld(worldName, (LegoWorld*) m_entity); LoadWorld(worldKey, (LegoWorld*) m_entity);
((LegoWorld*) m_entity)->SetUnknown0xec(Lego()->FUN_1005b490(worldName)); ((LegoWorld*) m_entity)->SetScriptIndex(Lego()->GetScriptIndex(worldKey));
} }
} }
} }

View file

@ -883,9 +883,15 @@ MxS32 LegoOmni::GetCurrPathInfo(LegoPathBoundary** p_path, MxS32& p_value)
return ::CurrentWorld()->GetCurrPathInfo(p_path, p_value); return ::CurrentWorld()->GetCurrPathInfo(p_path, p_value);
} }
// STUB: LEGO1 0x1005b490 // FUNCTION: LEGO1 0x1005b490
undefined4 LegoOmni::FUN_1005b490(char* p_worldName) MxS32 LegoOmni::GetScriptIndex(const char* p_key)
{ {
for (MxS32 i = 0; i < 19; i++) {
if ((MxS32) &m_scripts[i] != -4 && !strcmpi(m_scripts[i].GetKey(), p_key)) {
return m_scripts[i].GetIndex();
}
}
return -1; return -1;
} }

View file

@ -54,7 +54,7 @@ void LegoAnimationManager::FUN_1005f6d0(MxBool)
} }
// STUB: LEGO1 0x1005f720 // STUB: LEGO1 0x1005f720
void LegoAnimationManager::FUN_1005f720(undefined4) void LegoAnimationManager::FUN_1005f720(MxS32 p_scriptIndex)
{ {
// TODO // TODO
} }