diff --git a/LEGO1/lego/legoomni/include/legoomni.h b/LEGO1/lego/legoomni/include/legoomni.h index ff973f95..0d31d48b 100644 --- a/LEGO1/lego/legoomni/include/legoomni.h +++ b/LEGO1/lego/legoomni/include/legoomni.h @@ -69,12 +69,6 @@ public: c_clearScreen = 0x04 }; - void CreateBackgroundAudio(); - void RemoveWorld(const MxAtomId&, MxLong); - static int GetCurrPathInfo(LegoPathBoundary**, MxS32&); - static void CreateInstance(); - static LegoOmni* GetInstance(); - LegoOmni(); ~LegoOmni() override; // vtable+00 @@ -108,6 +102,12 @@ public: void AddWorld(LegoWorld* p_world); void DeleteWorld(LegoWorld* p_world); void FUN_1005b4f0(MxBool p_disable, MxU16 p_flags); + void CreateBackgroundAudio(); + void RemoveWorld(const MxAtomId&, MxLong); + + static MxS32 GetCurrPathInfo(LegoPathBoundary**, MxS32&); + static void CreateInstance(); + static LegoOmni* GetInstance(); LegoVideoManager* GetVideoManager() { return (LegoVideoManager*) m_videoManager; } LegoSoundManager* GetSoundManager() { return (LegoSoundManager*) m_soundManager; } diff --git a/LEGO1/lego/legoomni/include/legopathcontroller.h b/LEGO1/lego/legoomni/include/legopathcontroller.h index 4ad0b03f..5d054356 100644 --- a/LEGO1/lego/legoomni/include/legopathcontroller.h +++ b/LEGO1/lego/legoomni/include/legopathcontroller.h @@ -1,8 +1,12 @@ #ifndef LEGOPATHCONTROLLER_H #define LEGOPATHCONTROLLER_H +#include "decomp.h" #include "mxcore.h" +class IslePathActor; +class LegoPathBoundary; + // VTABLE: LEGO1 0x100d7d60 // SIZE 0x40 class LegoPathController : public MxCore { @@ -31,6 +35,8 @@ public: virtual void VTable0x14(); // vtable+0x14 virtual void Destroy(); // vtable+0x18 + undefined4 FUN_10046770(IslePathActor* p_actor); + MxResult FUN_10046b30(LegoPathBoundary** p_path, MxS32& p_value); void Enable(MxBool p_enable); }; diff --git a/LEGO1/lego/legoomni/include/legoworld.h b/LEGO1/lego/legoomni/include/legoworld.h index 98dbbd5c..bd07ddc5 100644 --- a/LEGO1/lego/legoomni/include/legoworld.h +++ b/LEGO1/lego/legoomni/include/legoworld.h @@ -70,7 +70,7 @@ public: MxBool PresentersPending(); void Remove(MxCore* p_object); void FUN_1001fc80(IslePathActor* p_actor); - MxS32 GetCurrPathInfo(LegoPathBoundary** p_path, MxS32& p_value); + MxResult GetCurrPathInfo(LegoPathBoundary** p_path, MxS32& p_value); MxCore* Find(const char* p_class, const char* p_name); MxCore* Find(const MxAtomId& p_atom, MxS32 p_entityId); diff --git a/LEGO1/lego/legoomni/src/entity/legoworld.cpp b/LEGO1/lego/legoomni/src/entity/legoworld.cpp index f9c0b63c..ee9d8231 100644 --- a/LEGO1/lego/legoomni/src/entity/legoworld.cpp +++ b/LEGO1/lego/legoomni/src/entity/legoworld.cpp @@ -265,16 +265,32 @@ done: return m_cameraController; } -// STUB: LEGO1 0x1001fc80 +// FUNCTION: LEGO1 0x1001fc80 void LegoWorld::FUN_1001fc80(IslePathActor* p_actor) { + LegoPathControllerListCursor cursor(&m_list0x68); + LegoPathController* controller; + + while (cursor.Next(controller)) { + if (!controller->FUN_10046770(p_actor)) { + break; + } + } } -// STUB: LEGO1 0x10020120 -MxS32 LegoWorld::GetCurrPathInfo(LegoPathBoundary** p_path, MxS32& p_value) +// FUNCTION: LEGO1 0x10020120 +MxResult LegoWorld::GetCurrPathInfo(LegoPathBoundary** p_path, MxS32& p_value) { - // TODO - return 0; + LegoPathControllerListCursor cursor(&m_list0x68); + LegoPathController* controller; + + cursor.Next(controller); + + if (!controller) { + return FAILURE; + } + + return controller->FUN_10046b30(p_path, p_value); } // FUNCTION: LEGO1 0x10020220 diff --git a/LEGO1/lego/legoomni/src/main/legoomni.cpp b/LEGO1/lego/legoomni/src/main/legoomni.cpp index 7384da72..17106e9d 100644 --- a/LEGO1/lego/legoomni/src/main/legoomni.cpp +++ b/LEGO1/lego/legoomni/src/main/legoomni.cpp @@ -748,7 +748,7 @@ MxBool LegoOmni::DoesEntityExist(MxDSAction& p_dsAction) MxS32 LegoOmni::GetCurrPathInfo(LegoPathBoundary** p_path, MxS32& p_value) { if (::CurrentWorld() == NULL) { - return -1; + return FAILURE; } return ::CurrentWorld()->GetCurrPathInfo(p_path, p_value); diff --git a/LEGO1/lego/legoomni/src/paths/legopathcontroller.cpp b/LEGO1/lego/legoomni/src/paths/legopathcontroller.cpp index f2b4d0bb..404835eb 100644 --- a/LEGO1/lego/legoomni/src/paths/legopathcontroller.cpp +++ b/LEGO1/lego/legoomni/src/paths/legopathcontroller.cpp @@ -25,6 +25,18 @@ MxResult LegoPathController::Tickle() return SUCCESS; } +// STUB: LEGO1 0x10046770 +undefined4 LegoPathController::FUN_10046770(IslePathActor* p_actor) +{ + return 0; +} + +// STUB: LEGO1 0x10046b30 +MxResult LegoPathController::FUN_10046b30(LegoPathBoundary** p_path, MxS32& p_value) +{ + return SUCCESS; +} + // STUB: LEGO1 0x10046be0 void LegoPathController::Enable(MxBool p_enable) {