implement a few mxstreamercontroller vtables (#323)

* implement a few mxstreamercontroller vtables

* Update mxstreamcontroller.cpp
This commit is contained in:
Misha 2023-12-11 16:17:25 -05:00 committed by GitHub
parent 02aaf1533f
commit 3b30607337
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 47 additions and 13 deletions

View file

@ -42,11 +42,19 @@ MxResult MxRAMStreamController::vtable0x20(MxDSAction* p_action)
return FAILURE; return FAILURE;
} }
// STUB: LEGO1 0x100c6320 // FUNCTION: LEGO1 0x100c6320
MxResult MxRAMStreamController::vtable0x24(undefined4 p_unknown) MxResult MxRAMStreamController::vtable0x24(MxDSAction* p_action)
{ {
// TODO STUB MxDSAction action;
return FAILURE; do {
if (m_action0x60 != NULL) {
delete m_action0x60;
m_action0x60 = NULL;
}
action = *p_action;
MxStreamController::vtable0x24(&action);
} while (m_action0x60 != NULL);
return SUCCESS;
} }
// STUB: LEGO1 0x100d0d80 // STUB: LEGO1 0x100d0d80

View file

@ -26,7 +26,7 @@ class MxRAMStreamController : public MxStreamController {
virtual MxResult Open(const char* p_filename) override; virtual MxResult Open(const char* p_filename) override;
virtual MxResult vtable0x20(MxDSAction* p_action) override; virtual MxResult vtable0x20(MxDSAction* p_action) override;
virtual MxResult vtable0x24(undefined4 p_unknown) override; virtual MxResult vtable0x24(MxDSAction* p_action) override;
private: private:
MxDSBuffer m_buffer; MxDSBuffer m_buffer;

View file

@ -117,11 +117,20 @@ MxResult MxStreamController::vtable0x20(MxDSAction* p_action)
return result; return result;
} }
// STUB: LEGO1 0x100c1740 // FUNCTION: LEGO1 0x100c1740
MxResult MxStreamController::vtable0x24(undefined4 p_unknown) MxResult MxStreamController::vtable0x24(MxDSAction* p_action)
{ {
// TODO STUB MxAutoLocker locker(&m_criticalSection);
vtable0x30(p_action);
m_action0x60 = m_unkList0x54.Find(p_action, TRUE);
if (m_action0x60 == NULL) {
return FAILURE; return FAILURE;
}
else {
p_action->SetUnknown24(m_action0x60->GetUnknown24());
p_action->SetObjectId(m_action0x60->GetObjectId());
return FUN_100c1f00(m_action0x60);
}
} }
// FUNCTION: LEGO1 0x100c1800 // FUNCTION: LEGO1 0x100c1800
@ -153,9 +162,25 @@ MxResult MxStreamController::vtable0x2c(MxDSAction* p_action, MxU32 p_bufferval)
return FUN_100c1800(p_action, (p_bufferval / m_provider->GetFileSize()) * m_provider->GetFileSize()); return FUN_100c1800(p_action, (p_bufferval / m_provider->GetFileSize()) * m_provider->GetFileSize());
} }
// STUB: LEGO1 0x100c1ce0 // FUNCTION: LEGO1 0x100c1ce0
MxResult MxStreamController::vtable0x30(undefined4 p_unknown) MxResult MxStreamController::vtable0x30(MxDSAction* p_unknown)
{ {
MxAutoLocker locker(&m_criticalSection);
MxResult result = FAILURE;
MxDSAction* action = m_unkList0x3c.Find(p_unknown, TRUE);
if (action != NULL) {
MxNextActionDataStart* data = m_nextActionList.Find(action->GetObjectId(), action->GetUnknown24());
delete action;
delete data;
result = SUCCESS;
}
return result;
}
// STUB: LEGO1 0x100c1f00
MxResult MxStreamController::FUN_100c1f00(MxDSAction* p_action)
{
// TODO
return FAILURE; return FAILURE;
} }

View file

@ -36,14 +36,15 @@ class MxStreamController : public MxCore {
virtual MxResult vtable0x18(undefined4 p_unknown, undefined4 p_unknown2); // vtable+0x18 virtual MxResult vtable0x18(undefined4 p_unknown, undefined4 p_unknown2); // vtable+0x18
virtual MxResult vtable0x1C(undefined4 p_unknown, undefined4 p_unknown2); // vtable+0x1c virtual MxResult vtable0x1C(undefined4 p_unknown, undefined4 p_unknown2); // vtable+0x1c
virtual MxResult vtable0x20(MxDSAction* p_action); // vtable+0x20 virtual MxResult vtable0x20(MxDSAction* p_action); // vtable+0x20
virtual MxResult vtable0x24(undefined4 p_unknown); // vtable+0x24 virtual MxResult vtable0x24(MxDSAction* p_unknown); // vtable+0x24
MxResult FUN_100c1800(MxDSAction* p_action, MxU32 p_val); MxResult FUN_100c1800(MxDSAction* p_action, MxU32 p_val);
virtual MxResult vtable0x28(); // vtable+0x28 virtual MxResult vtable0x28(); // vtable+0x28
virtual MxResult vtable0x2c(MxDSAction* p_action, MxU32 p_bufferval); // vtable+0x2c virtual MxResult vtable0x2c(MxDSAction* p_action, MxU32 p_bufferval); // vtable+0x2c
virtual MxResult vtable0x30(undefined4 p_unknown); // vtable+0x30 virtual MxResult vtable0x30(MxDSAction* p_unknown); // vtable+0x30
MxBool FUN_100c20d0(MxDSObject& p_obj); MxBool FUN_100c20d0(MxDSObject& p_obj);
MxResult FUN_100c1a00(MxDSAction* p_action, MxU32 p_bufferval); MxResult FUN_100c1a00(MxDSAction* p_action, MxU32 p_bufferval);
MxResult FUN_100c1f00(MxDSAction* p_action);
inline MxAtomId& GetAtom() { return atom; }; inline MxAtomId& GetAtom() { return atom; };