From ab36a9060291e91f6105e2c677aa255cb18ef409 Mon Sep 17 00:00:00 2001 From: Misha Date: Fri, 6 Oct 2023 20:03:15 -0400 Subject: [PATCH] Implement Start() --- LEGO1/legoomni.cpp | 7 +++---- LEGO1/mxomni.cpp | 16 +++++++++++----- LEGO1/mxomni.h | 2 +- LEGO1/mxstreamcontroller.cpp | 19 +++++++++++++++++++ LEGO1/mxstreamcontroller.h | 4 ++++ LEGO1/mxstreamer.cpp | 16 ++++++++++++++++ LEGO1/mxstreamer.h | 2 ++ 7 files changed, 56 insertions(+), 10 deletions(-) diff --git a/LEGO1/legoomni.cpp b/LEGO1/legoomni.cpp index 929ba556..05b9f574 100644 --- a/LEGO1/legoomni.cpp +++ b/LEGO1/legoomni.cpp @@ -99,11 +99,10 @@ void SetOmniUserMessage(void (*p_userMsg)(const char *,int)) g_omniUserMessage = p_userMsg; } -// OFFSET: LEGO1 0x100acf50 STUB -MxLong Start(MxDSAction *) +// OFFSET: LEGO1 0x100acf50 +MxLong Start(MxDSAction* action) { - // TODO - return 0; + return MxOmni::GetInstance()->Start(action); } // OFFSET: LEGO1 0x1005ad10 diff --git a/LEGO1/mxomni.cpp b/LEGO1/mxomni.cpp index 200e5bdf..6711386c 100644 --- a/LEGO1/mxomni.cpp +++ b/LEGO1/mxomni.cpp @@ -42,10 +42,16 @@ void MxOmni::Init() m_unk64 = NULL; } -// OFFSET: LEGO1 0x100b0090 STUB -void MxOmni::vtable0x20() +// OFFSET: LEGO1 0x100b0090 +long MxOmni::Start(MxDSAction* ds) { - // TODO + MxResult result = -1; + if(ds->GetAtomId().GetInternal() != NULL && ds->GetObjectId() != -1 && m_streamer != NULL) + { + result = m_streamer->Unknown100b99b0(ds); + } + + return result; } // OFFSET: LEGO1 0x100b00c0 STUB @@ -258,7 +264,7 @@ MxAtomIdCounterSet *AtomIdCounterSet() MxStreamer* Streamer() { return MxOmni::GetInstance()->GetStreamer(); -} +} // OFFSET: LEGO1 0x100acf00 MxSoundManager* MSoundManager() @@ -288,4 +294,4 @@ MxMusicManager* MusicManager() MxEventManager* EventManager() { return MxOmni::GetInstance()->GetEventManager(); -} \ No newline at end of file +} diff --git a/LEGO1/mxomni.h b/LEGO1/mxomni.h index a8fa9db8..592ba2f6 100644 --- a/LEGO1/mxomni.h +++ b/LEGO1/mxomni.h @@ -38,7 +38,7 @@ class MxOmni : public MxCore virtual void Init(); // vtable+14 virtual MxResult Create(COMPAT_CONST MxOmniCreateParam &p); // vtable+18 virtual void Destroy(); // vtable+1c - virtual void vtable0x20(); // vtable+20 + virtual MxResult Start(MxDSAction* ds); // vtable+20 virtual void DeleteObject(MxDSAction &ds); // vtable+24 virtual MxBool DoesEntityExist(MxDSAction &ds); // vtable+28 virtual void vtable0x2c(); // vtable+2c diff --git a/LEGO1/mxstreamcontroller.cpp b/LEGO1/mxstreamcontroller.cpp index 09f2d95c..40b1c936 100644 --- a/LEGO1/mxstreamcontroller.cpp +++ b/LEGO1/mxstreamcontroller.cpp @@ -30,3 +30,22 @@ MxResult MxStreamController::Open(const char *p_filename) return SUCCESS; } + +// OFFSET: LEGO1 0x100b9400 +undefined4 MxStreamController::vtable0x18(undefined4 p_unknown, undefined4 p_unknown2) +{ + return -1; +} + +// OFFSET: LEGO1 0x100b9410 +undefined4 MxStreamController::vtable0x1C(undefined4 p_unknown, undefined4 p_unknown2) +{ + return -1; +} + +// OFFSET: LEGO1 0x100c1690 STUB +long MxStreamController::vtable0x20(MxDSAction* action) +{ + // TODO STUB + return -1; +} diff --git a/LEGO1/mxstreamcontroller.h b/LEGO1/mxstreamcontroller.h index c7e4309e..966bd97b 100644 --- a/LEGO1/mxstreamcontroller.h +++ b/LEGO1/mxstreamcontroller.h @@ -6,6 +6,7 @@ #include "mxcriticalsection.h" #include "mxcore.h" #include "mxdsobject.h" +#include "mxdsaction.h" // VTABLE 0x100dc968 // SIZE 0x64 @@ -30,6 +31,9 @@ class MxStreamController : public MxCore } virtual MxResult Open(const char *p_filename); // vtable+0x14 + virtual undefined4 vtable0x18(undefined4 p_unknown, undefined4 p_unknown2); //vtable+0x18 + virtual undefined4 vtable0x1C(undefined4 p_unknown, undefined4 p_unknown2); //vtable+0x1c + virtual long vtable0x20(MxDSAction* action); //vtable+0x20 MxBool FUN_100c20d0(MxDSObject &p_obj); diff --git a/LEGO1/mxstreamer.cpp b/LEGO1/mxstreamer.cpp index 2121773e..bea2d349 100644 --- a/LEGO1/mxstreamer.cpp +++ b/LEGO1/mxstreamer.cpp @@ -133,6 +133,22 @@ MxResult MxStreamer::AddStreamControllerToOpenList(MxStreamController *stream) return FAILURE; } +// OFFSET: LEGO1 0x100b99b0 +MxResult MxStreamer::Unknown100b99b0(MxDSAction* p_action) +{ + MxStreamController* controller; + if (p_action != NULL && p_action->GetAtomId().GetInternal() != NULL && p_action->GetObjectId() != -1) + { + controller = GetOpenStream(p_action->GetAtomId().GetInternal()); + if (controller == NULL) + { + return -1; + } + return controller->vtable0x20(p_action); + } + return -1; +} + // OFFSET: LEGO1 0x100b9b60 MxLong MxStreamer::Notify(MxParam &p) { diff --git a/LEGO1/mxstreamer.h b/LEGO1/mxstreamer.h index 5ab02cbb..444e2099 100644 --- a/LEGO1/mxstreamer.h +++ b/LEGO1/mxstreamer.h @@ -96,6 +96,8 @@ class MxStreamer : public MxCore MxResult AddStreamControllerToOpenList(MxStreamController *p_stream); + MxResult Unknown100b99b0(MxDSAction* p_action); + private: list m_openStreams; // 0x8 MxStreamerSubClass2 m_subclass1; // 0x14