From bcc41256f8c7183d0f6183ce4e5f4c212722ed01 Mon Sep 17 00:00:00 2001 From: Christian Semmler Date: Sat, 21 Dec 2024 10:08:55 -0700 Subject: [PATCH] Add `LegoOmni::World` enum (#1252) --- .../legoomni/include/legoanimationmanager.h | 5 +- LEGO1/lego/legoomni/include/legomain.h | 37 +++++++++--- .../lego/legoomni/include/legoplantmanager.h | 19 ++++--- LEGO1/lego/legoomni/include/legoworld.h | 7 ++- .../src/common/legoanimationmanager.cpp | 12 ++-- .../legoomni/src/common/legoplantmanager.cpp | 12 ++-- LEGO1/lego/legoomni/src/entity/legoworld.cpp | 10 ++-- .../src/entity/legoworldpresenter.cpp | 2 +- LEGO1/lego/legoomni/src/main/legomain.cpp | 57 +++++++++---------- LEGO1/lego/legoomni/src/worlds/legoact2.cpp | 2 +- 10 files changed, 93 insertions(+), 70 deletions(-) diff --git a/LEGO1/lego/legoomni/include/legoanimationmanager.h b/LEGO1/lego/legoomni/include/legoanimationmanager.h index f09c8dae..24850f0e 100644 --- a/LEGO1/lego/legoomni/include/legoanimationmanager.h +++ b/LEGO1/lego/legoomni/include/legoanimationmanager.h @@ -3,6 +3,7 @@ #include "decomp.h" #include "legolocations.h" +#include "legomain.h" #include "legostate.h" #include "legotraninfolist.h" #include "mxcore.h" @@ -151,7 +152,7 @@ public: void Resume(); void FUN_1005f6d0(MxBool p_unk0x400); void EnableCamAnims(MxBool p_enableCamAnims); - MxResult LoadWorldInfo(MxS32 p_worldId); + MxResult LoadWorldInfo(LegoOmni::World p_worldId); MxBool FindVehicle(const char* p_name, MxU32& p_index); MxResult ReadAnimInfo(LegoFile* p_file, AnimInfo* p_info); MxResult ReadModelInfo(LegoFile* p_file, ModelInfo* p_info); @@ -247,7 +248,7 @@ private: void FUN_100648f0(LegoTranInfo* p_tranInfo, MxLong p_unk0x404); void FUN_10064b50(MxLong p_time); - MxS32 m_worldId; // 0x08 + LegoOmni::World m_worldId; // 0x08 MxU16 m_animCount; // 0x0c MxU16 m_unk0x0e; // 0x0e MxU16 m_unk0x10; // 0x10 diff --git a/LEGO1/lego/legoomni/include/legomain.h b/LEGO1/lego/legoomni/include/legomain.h index f0443bd6..58780b7e 100644 --- a/LEGO1/lego/legoomni/include/legomain.h +++ b/LEGO1/lego/legoomni/include/legomain.h @@ -37,16 +37,39 @@ public: c_clearScreen = 0x04 }; + enum World { + e_undefined = -1, + e_act1 = 0, + e_imain, + e_icube, + e_ireg, + e_ielev, + e_iisle, + e_hosp, + e_police, + e_gmain, + e_bldh, + e_bldd, + e_bldj, + e_bldr, + e_racc, + e_racj, + e_act2, + e_act3, + e_test, + e_numWorlds = e_test + 2 // count e_undefined + }; + // SIZE 0x1c struct WorldContainer { // FUNCTION: LEGO1 0x1005ac40 WorldContainer() { - m_id = -1; + m_id = e_undefined; m_atomId = NULL; } - WorldContainer(MxS32 p_id, const char* p_key, MxAtomId* p_atomId) + WorldContainer(World p_id, const char* p_key, MxAtomId* p_atomId) { m_id = p_id; @@ -66,10 +89,10 @@ public: return *this; } - MxS32 GetId() { return m_id; } + World GetId() { return m_id; } const char* GetKey() { return m_key; } - MxS32 m_id; // 0x00 + World m_id; // 0x00 char m_key[20]; // 0x04 MxAtomId* m_atomId; // 0x18 }; @@ -111,9 +134,9 @@ public: void CreateBackgroundAudio(); void RemoveWorld(const MxAtomId& p_atom, MxLong p_objectId); MxResult RegisterWorlds(); - const char* GetWorldName(MxU32 p_id); - MxAtomId* GetWorldAtom(MxU32 p_id); - MxS32 GetWorldId(const char* p_key); + const char* GetWorldName(LegoOmni::World p_id); + MxAtomId* GetWorldAtom(LegoOmni::World p_id); + World GetWorldId(const char* p_key); void DeleteAction(); static MxS32 GetCurrPathInfo(LegoPathBoundary**, MxS32&); diff --git a/LEGO1/lego/legoomni/include/legoplantmanager.h b/LEGO1/lego/legoomni/include/legoplantmanager.h index dcb87ffb..3b3bb976 100644 --- a/LEGO1/lego/legoomni/include/legoplantmanager.h +++ b/LEGO1/lego/legoomni/include/legoplantmanager.h @@ -2,6 +2,7 @@ #define LEGOPLANTMANAGER_H #include "decomp.h" +#include "legomain.h" #include "mxcore.h" class LegoEntity; @@ -35,8 +36,8 @@ public: } void Init(); - void LoadWorldInfo(MxS32 p_worldId); - void Reset(MxS32 p_worldId); + void LoadWorldInfo(LegoOmni::World p_worldId); + void Reset(LegoOmni::World p_worldId); MxResult Write(LegoStorage* p_storage); MxResult Read(LegoStorage* p_storage); MxBool SwitchColor(LegoEntity* p_entity); @@ -60,8 +61,8 @@ public: // LegoPlantManager::`scalar deleting destructor' private: - LegoEntity* CreatePlant(MxS32 p_index, LegoWorld* p_world, MxS32 p_worldId); - void RemovePlant(MxS32 p_index, MxS32 p_worldId); + LegoEntity* CreatePlant(MxS32 p_index, LegoWorld* p_world, LegoOmni::World p_worldId); + void RemovePlant(MxS32 p_index, LegoOmni::World p_worldId); void FUN_10026860(MxS32 p_index); LegoPlantInfo* GetInfo(LegoEntity* p_entity); MxBool FUN_10026c80(MxS32 p_index); @@ -71,11 +72,11 @@ private: static MxS32 g_maxMove[4]; static MxU32 g_maxSound; - MxS32 m_worldId; // 0x08 - undefined m_unk0x0c; // 0x0c - AnimEntry* m_entries[5]; // 0x10 - MxS8 m_numEntries; // 0x24 - LegoWorld* m_world; // 0x28 + LegoOmni::World m_worldId; // 0x08 + undefined m_unk0x0c; // 0x0c + AnimEntry* m_entries[5]; // 0x10 + MxS8 m_numEntries; // 0x24 + LegoWorld* m_world; // 0x28 }; #endif // LEGOPLANTMANAGER_H diff --git a/LEGO1/lego/legoomni/include/legoworld.h b/LEGO1/lego/legoomni/include/legoworld.h index 7a3e6d76..52ef3baf 100644 --- a/LEGO1/lego/legoomni/include/legoworld.h +++ b/LEGO1/lego/legoomni/include/legoworld.h @@ -2,6 +2,7 @@ #define LEGOWORLD_H #include "legoentity.h" +#include "legomain.h" #include "legopathcontrollerlist.h" #include "mxpresenterlist.h" #include "roi/legoroi.h" @@ -104,12 +105,12 @@ public: LegoCameraController* GetCamera() { return m_cameraController; } LegoEntityList* GetEntityList() { return m_entityList; } - MxS32 GetWorldId() { return m_worldId; } + LegoOmni::World GetWorldId() { return m_worldId; } MxBool GetUnknown0xd0Empty() { return m_set0xd0.empty(); } list& GetROIList() { return m_roiList; } LegoHideAnimPresenter* GetHideAnimPresenter() { return m_hideAnim; } - void SetWorldId(MxS32 p_worldId) { m_worldId = p_worldId; } + void SetWorldId(LegoOmni::World p_worldId) { m_worldId = p_worldId; } // SYNTHETIC: LEGO1 0x1001dee0 // LegoWorld::`scalar deleting destructor' @@ -125,7 +126,7 @@ protected: MxPresenterList m_controlPresenters; // 0xb8 MxCoreSet m_set0xd0; // 0xd0 list m_roiList; // 0xe0 - MxS32 m_worldId; // 0xec + LegoOmni::World m_worldId; // 0xec // name verified by BETA10 0x100c7f59 LegoHideAnimPresenter* m_hideAnim; // 0xf0 diff --git a/LEGO1/lego/legoomni/src/common/legoanimationmanager.cpp b/LEGO1/lego/legoomni/src/common/legoanimationmanager.cpp index ec73ba08..379101f1 100644 --- a/LEGO1/lego/legoomni/src/common/legoanimationmanager.cpp +++ b/LEGO1/lego/legoomni/src/common/legoanimationmanager.cpp @@ -416,7 +416,7 @@ void LegoAnimationManager::Suspend() m_animState = (AnimState*) GameState()->CreateState("AnimState"); } - if (m_worldId == 0) { + if (m_worldId == LegoOmni::e_act1) { m_animState->InitFromAnims(m_animCount, m_anims, m_lastExtraCharacterId); } @@ -495,7 +495,7 @@ void LegoAnimationManager::Resume() void LegoAnimationManager::Init() { m_unk0x402 = FALSE; - m_worldId = -1; + m_worldId = LegoOmni::e_undefined; m_animCount = 0; m_anims = NULL; m_unk0x18 = 0; @@ -580,7 +580,7 @@ void LegoAnimationManager::EnableCamAnims(MxBool p_enableCamAnims) } // FUNCTION: LEGO1 0x1005f720 -MxResult LegoAnimationManager::LoadWorldInfo(MxS32 p_worldId) +MxResult LegoAnimationManager::LoadWorldInfo(LegoOmni::World p_worldId) { MxResult result = FAILURE; MxS32 i, j, k; @@ -615,7 +615,7 @@ MxResult LegoAnimationManager::LoadWorldInfo(MxS32 p_worldId) m_animState = (AnimState*) GameState()->CreateState("AnimState"); } - if (m_worldId == 0) { + if (m_worldId == LegoOmni::e_act1) { m_animState->InitFromAnims(m_animCount, m_anims, m_lastExtraCharacterId); } @@ -623,7 +623,7 @@ MxResult LegoAnimationManager::LoadWorldInfo(MxS32 p_worldId) LegoFile file; - if (p_worldId == -1) { + if (p_worldId == LegoOmni::e_undefined) { result = SUCCESS; goto done; } @@ -961,7 +961,7 @@ MxResult LegoAnimationManager::FUN_100605e0( { MxResult result = FAILURE; - if (m_worldId != -1 && p_index < m_animCount && m_tranInfoList != NULL) { + if (m_worldId != LegoOmni::e_undefined && p_index < m_animCount && m_tranInfoList != NULL) { PurgeExtra(FALSE); FUN_10062770(); diff --git a/LEGO1/lego/legoomni/src/common/legoplantmanager.cpp b/LEGO1/lego/legoomni/src/common/legoplantmanager.cpp index 7544b63e..401d0782 100644 --- a/LEGO1/lego/legoomni/src/common/legoplantmanager.cpp +++ b/LEGO1/lego/legoomni/src/common/legoplantmanager.cpp @@ -78,14 +78,14 @@ void LegoPlantManager::Init() g_plantInfo[i] = g_plantInfoInit[i]; } - m_worldId = -1; + m_worldId = LegoOmni::e_undefined; m_unk0x0c = 0; m_numEntries = 0; } // FUNCTION: LEGO1 0x10026360 // FUNCTION: BETA10 0x100c5032 -void LegoPlantManager::LoadWorldInfo(MxS32 p_worldId) +void LegoPlantManager::LoadWorldInfo(LegoOmni::World p_worldId) { m_worldId = p_worldId; LegoWorld* world = CurrentWorld(); @@ -98,7 +98,7 @@ void LegoPlantManager::LoadWorldInfo(MxS32 p_worldId) } // FUNCTION: LEGO1 0x100263a0 -void LegoPlantManager::Reset(MxS32 p_worldId) +void LegoPlantManager::Reset(LegoOmni::World p_worldId) { MxU32 i; DeleteObjects(g_sndAnimScript, SndanimScript::c_AnimC1, SndanimScript::c_AnimBld18); @@ -113,7 +113,7 @@ void LegoPlantManager::Reset(MxS32 p_worldId) RemovePlant(i, p_worldId); } - m_worldId = -1; + m_worldId = LegoOmni::e_undefined; m_unk0x0c = 0; } @@ -205,7 +205,7 @@ LegoPlantInfo* LegoPlantManager::GetInfoArray(MxS32& p_length) // FUNCTION: LEGO1 0x10026590 // FUNCTION: BETA10 0x100c561e -LegoEntity* LegoPlantManager::CreatePlant(MxS32 p_index, LegoWorld* p_world, MxS32 p_worldId) +LegoEntity* LegoPlantManager::CreatePlant(MxS32 p_index, LegoWorld* p_world, LegoOmni::World p_worldId) { LegoEntity* entity = NULL; @@ -244,7 +244,7 @@ LegoEntity* LegoPlantManager::CreatePlant(MxS32 p_index, LegoWorld* p_world, MxS // FUNCTION: LEGO1 0x100266c0 // FUNCTION: BETA10 0x100c5859 -void LegoPlantManager::RemovePlant(MxS32 p_index, MxS32 p_worldId) +void LegoPlantManager::RemovePlant(MxS32 p_index, LegoOmni::World p_worldId) { if (p_index < sizeOfArray(g_plantInfo)) { MxU32 world = 1 << (MxU8) p_worldId; diff --git a/LEGO1/lego/legoomni/src/entity/legoworld.cpp b/LEGO1/lego/legoomni/src/entity/legoworld.cpp index 2dbcce2e..ee144513 100644 --- a/LEGO1/lego/legoomni/src/entity/legoworld.cpp +++ b/LEGO1/lego/legoomni/src/entity/legoworld.cpp @@ -12,7 +12,6 @@ #include "legogamestate.h" #include "legoinputmanager.h" #include "legolocomotionanimpresenter.h" -#include "legomain.h" #include "legonavcontroller.h" #include "legoplantmanager.h" #include "legosoundmanager.h" @@ -102,8 +101,7 @@ MxResult LegoWorld::Create(MxDSAction& p_dsAction) } SetIsWorldActive(TRUE); - m_worldId = -1; - + m_worldId = LegoOmni::e_undefined; return SUCCESS; } @@ -180,7 +178,7 @@ void LegoWorld::Destroy(MxBool p_fromDestructor) } } - if (m_worldId != -1 && m_set0xd0.empty()) { + if (m_worldId != LegoOmni::e_undefined && m_set0xd0.empty()) { PlantManager()->Reset(m_worldId); BuildingManager()->Reset(); } @@ -701,7 +699,7 @@ void LegoWorld::Enable(MxBool p_enable) Lego()->SetNavController(m_cameraController->GetNavController()); } - if (m_worldId != -1) { + if (m_worldId != LegoOmni::e_undefined) { PlantManager()->LoadWorldInfo(m_worldId); AnimationManager()->LoadWorldInfo(m_worldId); BuildingManager()->LoadWorldInfo(); @@ -724,7 +722,7 @@ void LegoWorld::Enable(MxBool p_enable) AnimationManager()->Reset(FALSE); m_set0xd0.insert(this); - if (m_worldId != -1) { + if (m_worldId != LegoOmni::e_undefined) { PlantManager()->Reset(m_worldId); BuildingManager()->Reset(); } diff --git a/LEGO1/lego/legoomni/src/entity/legoworldpresenter.cpp b/LEGO1/lego/legoomni/src/entity/legoworldpresenter.cpp index c4b8c52e..3a8842a5 100644 --- a/LEGO1/lego/legoomni/src/entity/legoworldpresenter.cpp +++ b/LEGO1/lego/legoomni/src/entity/legoworldpresenter.cpp @@ -54,7 +54,7 @@ LegoWorldPresenter::~LegoWorldPresenter() { MxBool result = FALSE; if (m_entity) { - MxS32 worldId = ((LegoWorld*) m_entity)->GetWorldId(); + LegoOmni::World worldId = ((LegoWorld*) m_entity)->GetWorldId(); PlantManager()->LoadWorldInfo(worldId); AnimationManager()->LoadWorldInfo(worldId); BuildingManager()->LoadWorldInfo(); diff --git a/LEGO1/lego/legoomni/src/main/legomain.cpp b/LEGO1/lego/legoomni/src/main/legomain.cpp index 4a751ab7..b065c6e4 100644 --- a/LEGO1/lego/legoomni/src/main/legomain.cpp +++ b/LEGO1/lego/legoomni/src/main/legomain.cpp @@ -266,32 +266,31 @@ done: // FUNCTION: LEGO1 0x1005a5f0 MxResult LegoOmni::RegisterWorlds() { - m_worlds = new WorldContainer[19]; + m_worlds = new WorldContainer[e_numWorlds]; if (!m_worlds) { return FAILURE; } m_worlds[0] = WorldContainer(); - m_worlds[1] = WorldContainer(0, "ACT1", g_isleScript); - m_worlds[2] = WorldContainer(1, "IMAIN", g_infomainScript); - m_worlds[3] = WorldContainer(2, "ICUBE", g_infoscorScript); - m_worlds[4] = WorldContainer(3, "IREG", g_regbookScript); - m_worlds[5] = WorldContainer(4, "IELEV", g_elevbottScript); - m_worlds[6] = WorldContainer(5, "IISLE", g_infodoorScript); - m_worlds[7] = WorldContainer(6, "HOSP", g_hospitalScript); - m_worlds[8] = WorldContainer(7, "POLICE", g_policeScript); - m_worlds[9] = WorldContainer(8, "GMAIN", g_garageScript); - m_worlds[10] = WorldContainer(9, "BLDH", g_copterScript); - m_worlds[11] = WorldContainer(10, "BLDD", g_dunecarScript); - m_worlds[12] = WorldContainer(11, "BLDJ", g_jetskiScript); - m_worlds[13] = WorldContainer(12, "BLDR", g_racecarScript); - m_worlds[14] = WorldContainer(13, "RACC", g_carraceScript); - m_worlds[15] = WorldContainer(14, "RACJ", g_jetraceScript); - m_worlds[16] = WorldContainer(15, "ACT2", g_act2mainScript); - m_worlds[17] = WorldContainer(16, "ACT3", g_act3Script); - m_worlds[18] = WorldContainer(17, "TEST", g_testScript); - + m_worlds[1] = WorldContainer(e_act1, "ACT1", g_isleScript); + m_worlds[2] = WorldContainer(e_imain, "IMAIN", g_infomainScript); + m_worlds[3] = WorldContainer(e_icube, "ICUBE", g_infoscorScript); + m_worlds[4] = WorldContainer(e_ireg, "IREG", g_regbookScript); + m_worlds[5] = WorldContainer(e_ielev, "IELEV", g_elevbottScript); + m_worlds[6] = WorldContainer(e_iisle, "IISLE", g_infodoorScript); + m_worlds[7] = WorldContainer(e_hosp, "HOSP", g_hospitalScript); + m_worlds[8] = WorldContainer(e_police, "POLICE", g_policeScript); + m_worlds[9] = WorldContainer(e_gmain, "GMAIN", g_garageScript); + m_worlds[10] = WorldContainer(e_bldh, "BLDH", g_copterScript); + m_worlds[11] = WorldContainer(e_bldd, "BLDD", g_dunecarScript); + m_worlds[12] = WorldContainer(e_bldj, "BLDJ", g_jetskiScript); + m_worlds[13] = WorldContainer(e_bldr, "BLDR", g_racecarScript); + m_worlds[14] = WorldContainer(e_racc, "RACC", g_carraceScript); + m_worlds[15] = WorldContainer(e_racj, "RACJ", g_jetraceScript); + m_worlds[16] = WorldContainer(e_act2, "ACT2", g_act2mainScript); + m_worlds[17] = WorldContainer(e_act3, "ACT3", g_act3Script); + m_worlds[18] = WorldContainer(e_test, "TEST", g_testScript); return SUCCESS; } @@ -476,10 +475,10 @@ MxS32 LegoOmni::GetCurrPathInfo(LegoPathBoundary** p_path, MxS32& p_value) } // FUNCTION: LEGO1 0x1005b430 -const char* LegoOmni::GetWorldName(MxU32 p_id) +const char* LegoOmni::GetWorldName(LegoOmni::World p_worldId) { - for (MxS32 i = 0; i < 19; i++) { - if (m_worlds[i].m_id == p_id) { + for (MxS32 i = 0; i < e_numWorlds; i++) { + if (m_worlds[i].m_id == p_worldId) { return m_worlds[i].m_key; } } @@ -489,10 +488,10 @@ const char* LegoOmni::GetWorldName(MxU32 p_id) // FUNCTION: LEGO1 0x1005b460 // FUNCTION: BETA10 0x1008edd8 -MxAtomId* LegoOmni::GetWorldAtom(MxU32 p_id) +MxAtomId* LegoOmni::GetWorldAtom(LegoOmni::World p_worldId) { - for (MxS32 i = 0; i < 19; i++) { - if (m_worlds[i].m_id == p_id) { + for (MxS32 i = 0; i < e_numWorlds; i++) { + if (m_worlds[i].m_id == p_worldId) { return m_worlds[i].m_atomId; } } @@ -503,15 +502,15 @@ MxAtomId* LegoOmni::GetWorldAtom(MxU32 p_id) } // FUNCTION: LEGO1 0x1005b490 -MxS32 LegoOmni::GetWorldId(const char* p_key) +LegoOmni::World LegoOmni::GetWorldId(const char* p_key) { - for (MxS32 i = 0; i < 19; i++) { + for (MxS32 i = 0; i < e_numWorlds; i++) { if ((MxS32) &m_worlds[i] != -4 && !strcmpi(m_worlds[i].GetKey(), p_key)) { return m_worlds[i].GetId(); } } - return -1; + return e_undefined; } // FUNCTION: LEGO1 0x1005b4f0 diff --git a/LEGO1/lego/legoomni/src/worlds/legoact2.cpp b/LEGO1/lego/legoomni/src/worlds/legoact2.cpp index 2543d727..6397ac66 100644 --- a/LEGO1/lego/legoomni/src/worlds/legoact2.cpp +++ b/LEGO1/lego/legoomni/src/worlds/legoact2.cpp @@ -1111,7 +1111,7 @@ MxResult LegoAct2::FUN_10052560( action.SetObjectId(p_objectId); // World index: see LegoOmni::RegisterWorlds - action.SetAtomId(*Lego()->GetWorldAtom(15)); + action.SetAtomId(*Lego()->GetWorldAtom(LegoOmni::e_act2)); if (p_location) { action.SetUp(Mx3DPointFloat(0.0f, 1.0f, 0.0f));