FUN_100c7d10 & FUN_100c8360

This commit is contained in:
Misha 2023-12-22 11:46:48 -05:00
parent 20c9a39849
commit c41cc9c29a
No known key found for this signature in database
GPG Key ID: 8441D12AEF33FED8
5 changed files with 56 additions and 4 deletions

View File

@ -160,12 +160,30 @@ void MxDiskStreamController::FUN_100c7ce0(MxDSBuffer* p_buffer)
} }
} }
// STUB: LEGO1 0x100c7d10 // FUNCTION: LEGO1 0x100c7d10
MxResult MxDiskStreamController::FUN_100c7d10() MxResult MxDiskStreamController::FUN_100c7d10()
{ {
MxAutoLocker lock(&this->m_criticalSection);
MxDSStreamingAction* action = FUN_100c7db0();
if (action) {
if (FUN_100c8360(action) == SUCCESS) {
return SUCCESS;
}
else {
VTable0x24(action);
FUN_100c7cb0(action);
}
}
return FAILURE; return FAILURE;
} }
// STUB: LEGO1 0x100c7db0
MxDSStreamingAction* MxDiskStreamController::FUN_100c7db0()
{
// TODO
return NULL;
}
// FUNCTION: LEGO1 0x100c7f40 // FUNCTION: LEGO1 0x100c7f40
void MxDiskStreamController::FUN_100c7f40(MxDSStreamingAction* p_streamingaction) void MxDiskStreamController::FUN_100c7f40(MxDSStreamingAction* p_streamingaction)
{ {
@ -209,6 +227,37 @@ MxResult MxDiskStreamController::VTable0x24(MxDSAction* p_action)
return FAILURE; return FAILURE;
} }
// FUNCTION: LEGO1 0x100c8360
MxResult MxDiskStreamController::FUN_100c8360(MxDSStreamingAction* p_action)
{
MxAutoLocker lock(&this->m_criticalSection);
MxDSBuffer* buffer = p_action->GetUnknowna0();
MxDSStreamingAction* action2 = (MxDSStreamingAction*) m_list0x90.Find(p_action, TRUE);
buffer->FUN_100c6f80(p_action->GetUnknown94() - p_action->GetBufferOffset());
buffer->FUN_100c67b0(this, p_action, &action2);
if (buffer->GetRefCount()) {
p_action->SetUnknowna0(NULL);
InsertToList74(buffer);
}
if (action2) {
if (action2->GetUnknowna0() == NULL) {
FUN_100c7cb0(action2);
}
else {
if (action2->GetObjectId() == -1) {
action2->SetObjectId(p_action->GetObjectId());
}
m_list0x90.push_back(action2);
}
}
FUN_100c7cb0(p_action);
return SUCCESS;
}
// FUNCTION: LEGO1 0x100c84a0 // FUNCTION: LEGO1 0x100c84a0
void MxDiskStreamController::InsertToList74(MxDSBuffer* p_buffer) void MxDiskStreamController::InsertToList74(MxDSBuffer* p_buffer)
{ {

View File

@ -54,7 +54,9 @@ class MxDiskStreamController : public MxStreamController {
void FUN_100c7ce0(MxDSBuffer* p_buffer); void FUN_100c7ce0(MxDSBuffer* p_buffer);
MxResult FUN_100c7d10(); MxResult FUN_100c7d10();
void FUN_100c7980(); void FUN_100c7980();
MxDSStreamingAction* FUN_100c7db0();
void FUN_100c7f40(MxDSStreamingAction* p_streamingaction); void FUN_100c7f40(MxDSStreamingAction* p_streamingaction);
MxResult FUN_100c8360(MxDSStreamingAction* p_action);
void InsertToList74(MxDSBuffer* p_buffer); void InsertToList74(MxDSBuffer* p_buffer);
void FUN_100c8540(); void FUN_100c8540();
void FUN_100c8720(); void FUN_100c8720();

View File

@ -123,7 +123,7 @@ MxResult MxDSBuffer::SetBufferPointer(MxU32* p_buffer, MxU32 p_size)
} }
// STUB: LEGO1 0x100c67b0 // STUB: LEGO1 0x100c67b0
MxResult MxDSBuffer::FUN_100c67b0(MxStreamController* p_controller, MxDSAction* p_action, undefined4*) MxResult MxDSBuffer::FUN_100c67b0(MxStreamController* p_controller, MxDSAction* p_action, MxDSStreamingAction** p_streamingAction)
{ {
// TODO STUB // TODO STUB
return FAILURE; return FAILURE;

View File

@ -33,7 +33,7 @@ class MxDSBuffer : public MxCore {
MxResult AllocateBuffer(MxU32 p_bufferSize, MxDSBufferType p_mode); MxResult AllocateBuffer(MxU32 p_bufferSize, MxDSBufferType p_mode);
MxResult SetBufferPointer(MxU32* p_buffer, MxU32 p_size); MxResult SetBufferPointer(MxU32* p_buffer, MxU32 p_size);
MxResult FUN_100c67b0(MxStreamController* p_controller, MxDSAction* p_action, undefined4*); MxResult FUN_100c67b0(MxStreamController* p_controller, MxDSAction* p_action, MxDSStreamingAction** p_streamingAction);
MxResult CreateObject( MxResult CreateObject(
MxStreamController* p_controller, MxStreamController* p_controller,
MxU32* p_data, MxU32* p_data,
@ -55,6 +55,7 @@ class MxDSBuffer : public MxCore {
inline MxU8* GetBuffer() { return m_pBuffer; } inline MxU8* GetBuffer() { return m_pBuffer; }
inline MxU32 GetWriteOffset() { return m_writeOffset; } inline MxU32 GetWriteOffset() { return m_writeOffset; }
inline MxU16 GetRefCount() { return m_refcount; }
inline MxDSBufferType GetMode() { return m_mode; } inline MxDSBufferType GetMode() { return m_mode; }
private: private:

View File

@ -84,7 +84,7 @@ MxResult MxRAMStreamController::DeserializeObject(MxDSStreamingAction& p_action)
{ {
MxAutoLocker locker(&m_criticalSection); MxAutoLocker locker(&m_criticalSection);
MxResult result; MxResult result;
undefined4 value = 0; MxDSStreamingAction* value = 0;
do { do {
m_buffer.FUN_100c6f80(p_action.GetUnknown94()); m_buffer.FUN_100c6f80(p_action.GetUnknown94());
result = m_buffer.FUN_100c67b0(this, &p_action, &value); result = m_buffer.FUN_100c67b0(this, &p_action, &value);