From 56a22daf64e98a722f0f63690c245781143f9cc6 Mon Sep 17 00:00:00 2001 From: Misha <106913236+MishaProductions@users.noreply.github.com> Date: Wed, 13 Dec 2023 14:26:36 -0500 Subject: [PATCH] push code --- LEGO1/mxdiskstreamcontroller.cpp | 34 +++++++++++++++++++++++++++++--- LEGO1/mxdiskstreamcontroller.h | 2 ++ LEGO1/mxdsaction.h | 1 + LEGO1/mxdsstreamingaction.h | 4 ++++ 4 files changed, 38 insertions(+), 3 deletions(-) diff --git a/LEGO1/mxdiskstreamcontroller.cpp b/LEGO1/mxdiskstreamcontroller.cpp index b9acfb9d..57189605 100644 --- a/LEGO1/mxdiskstreamcontroller.cpp +++ b/LEGO1/mxdiskstreamcontroller.cpp @@ -2,6 +2,7 @@ #include "mxautolocker.h" #include "mxdiskstreamprovider.h" +#include "mxdsstreamingaction.h" #include "mxomni.h" #include "mxticklemanager.h" @@ -71,11 +72,38 @@ MxResult MxDiskStreamController::VTable0x30(MxDSAction* p_action) return FAILURE; } -// STUB: LEGO1 0x100c7ff0 -MxResult MxDiskStreamController::VTable0x20(MxDSAction* p_action) +// STUB: LEGO1 0x100c7f4 +void MxDiskStreamController::FUN_100c7f4(MxDSStreamingAction* p_streamingaction) { // TODO - return FAILURE; + // seems to do something with a list +} + +// FUNCTION: LEGO1 0x100c7ff0 +MxResult MxDiskStreamController::VTable0x20(MxDSAction* p_action) +{ + MxAutoLocker lock(&this->m_criticalSection); + MxResult result; + MxDSStreamingAction* entry = (MxDSStreamingAction*)m_list0x80.Find(p_action, FALSE); // TODO: is this a seperate class? + if (!entry) { + result = MxStreamController::VTable0x20((MxDSAction*)p_action); + } + else { + MxDSStreamingAction* action = new MxDSStreamingAction(*p_action, 0); + action->SetUnknown84(entry->GetUnknown84()); + action->SetUnknown8c(entry->GetUnknown8c()); + action->SetUnknowna0(entry->GetUnknowna0()); + + FUN_100c7f4(action); + result = vtable0x2c(p_action, action->GetBufferOffset()); + } + + if (result == SUCCESS) + { + m_unk70 = 1; + m_unkc4 = 1; + } + return result; } // STUB: LEGO1 0x100c8160 diff --git a/LEGO1/mxdiskstreamcontroller.h b/LEGO1/mxdiskstreamcontroller.h index 2e320fa0..49648122 100644 --- a/LEGO1/mxdiskstreamcontroller.h +++ b/LEGO1/mxdiskstreamcontroller.h @@ -48,6 +48,8 @@ class MxDiskStreamController : public MxStreamController { MxCriticalSection m_critical9c; // 0x9c MxStreamListMxDSAction m_list0xb8; // 0xb8 undefined m_unk0xc4; // 0xc4 + + void FUN_100c7f4(MxDSStreamingAction* p_streamingaction); }; // TEMPLATE: LEGO1 0x100c7330 diff --git a/LEGO1/mxdsaction.h b/LEGO1/mxdsaction.h index 94421b1f..13bc4916 100644 --- a/LEGO1/mxdsaction.h +++ b/LEGO1/mxdsaction.h @@ -63,6 +63,7 @@ class MxDSAction : public MxDSObject { inline MxS32 GetLoopCount() { return m_loopCount; } inline void SetLoopCount(MxS32 p_loopCount) { m_loopCount = p_loopCount; } inline const Vector3Data& GetLocation() const { return m_location; } + inline MxCore* GetUnknown84() const { return m_unk84; } inline void SetUnknown84(MxCore* p_unk0x84) { m_unk0x84 = p_unk0x84; } inline MxCore* GetOrigin() { return m_origin; } inline void SetOrigin(MxCore* p_origin) { m_origin = p_origin; } diff --git a/LEGO1/mxdsstreamingaction.h b/LEGO1/mxdsstreamingaction.h index 63c22b8d..344d5463 100644 --- a/LEGO1/mxdsstreamingaction.h +++ b/LEGO1/mxdsstreamingaction.h @@ -31,6 +31,10 @@ class MxDSStreamingAction : public MxDSAction { void SetInternalAction(MxDSAction* p_dsAction); void FUN_100cd2d0(); + inline MxU32 GetBufferOffset() { return m_bufferOffset; } + inline MxDSBuffer* GetUnknowna0() { return m_unka0; } + inline void SetUnknowna0(MxDSBuffer* p_unka0) { m_unka0 = p_unka0; } + private: MxU32 m_unk0x94; MxU32 m_bufferOffset;