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;
}
// STUB: LEGO1 0x100c6320
MxResult MxRAMStreamController::vtable0x24(undefined4 p_unknown)
// FUNCTION: LEGO1 0x100c6320
MxResult MxRAMStreamController::vtable0x24(MxDSAction* p_action)
{
// TODO STUB
return FAILURE;
MxDSAction action;
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

View file

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

View file

@ -117,11 +117,20 @@ MxResult MxStreamController::vtable0x20(MxDSAction* p_action)
return result;
}
// STUB: LEGO1 0x100c1740
MxResult MxStreamController::vtable0x24(undefined4 p_unknown)
// FUNCTION: LEGO1 0x100c1740
MxResult MxStreamController::vtable0x24(MxDSAction* p_action)
{
// TODO STUB
return FAILURE;
MxAutoLocker locker(&m_criticalSection);
vtable0x30(p_action);
m_action0x60 = m_unkList0x54.Find(p_action, TRUE);
if (m_action0x60 == NULL) {
return FAILURE;
}
else {
p_action->SetUnknown24(m_action0x60->GetUnknown24());
p_action->SetObjectId(m_action0x60->GetObjectId());
return FUN_100c1f00(m_action0x60);
}
}
// 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());
}
// STUB: LEGO1 0x100c1ce0
MxResult MxStreamController::vtable0x30(undefined4 p_unknown)
// FUNCTION: LEGO1 0x100c1ce0
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;
}

View file

@ -36,14 +36,15 @@ class MxStreamController : public MxCore {
virtual MxResult vtable0x18(undefined4 p_unknown, undefined4 p_unknown2); // vtable+0x18
virtual MxResult vtable0x1C(undefined4 p_unknown, undefined4 p_unknown2); // vtable+0x1c
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);
virtual MxResult vtable0x28(); // vtable+0x28
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);
MxResult FUN_100c1a00(MxDSAction* p_action, MxU32 p_bufferval);
MxResult FUN_100c1f00(MxDSAction* p_action);
inline MxAtomId& GetAtom() { return atom; };