Match MxStreamController::vtable0x20

This commit is contained in:
Christian Semmler 2023-10-10 04:20:24 -04:00
parent 8500407bab
commit 2c0ac5ee59
9 changed files with 22 additions and 28 deletions

View File

@ -79,7 +79,7 @@ MxU32 MxDiskStreamProvider::GetLengthInDWords()
}
// OFFSET: LEGO1 0x100d1ec0
void* MxDiskStreamProvider::GetBufferForDWords()
MxU32* MxDiskStreamProvider::GetBufferForDWords()
{
return m_pFile->GetBuffer();
}

View File

@ -54,7 +54,7 @@ class MxDiskStreamProvider : public MxStreamProvider
virtual MxU32 GetStreamBuffersNum() override; //vtable+0x1c
virtual void vtable0x20(undefined4 p_unknown1) override; //vtable+0x20
virtual MxU32 GetLengthInDWords() override; //vtable+0x24
virtual void* GetBufferForDWords()override; //vtable+0x28
virtual MxU32* GetBufferForDWords()override; //vtable+0x28
private:
MxDiskStreamProviderThread m_thread; // 0x10

View File

@ -81,7 +81,7 @@ MxLong MxDSFile::ReadChunks()
}
MxULong* pLengthInDWords = &m_lengthInDWords;
m_io.Read(pLengthInDWords, 4);
m_pBuffer = malloc(*pLengthInDWords * 4);
m_pBuffer = new MxU32[*pLengthInDWords];
m_io.Read(m_pBuffer, *pLengthInDWords * 4);
return 0;
}
@ -120,7 +120,7 @@ MxLong MxDSFile::Close()
if (m_lengthInDWords != 0)
{
m_lengthInDWords = 0;
free(m_pBuffer);
delete[] m_pBuffer;
m_pBuffer = NULL;
}
return 0;

View File

@ -14,7 +14,7 @@ MxLong MxDSSource::GetLengthInDWords()
}
// OFFSET: LEGO1 0x100c0000
void *MxDSSource::GetBuffer()
MxU32 *MxDSSource::GetBuffer()
{
return m_pBuffer;
}

View File

@ -34,11 +34,11 @@ class MxDSSource : public MxCore
virtual MxULong GetBufferSize() = 0;
virtual MxULong GetStreamBuffersNum() = 0;
virtual MxLong GetLengthInDWords();
virtual void* GetBuffer(); // 0x34
virtual MxU32* GetBuffer(); // 0x34
protected:
MxULong m_lengthInDWords;
void* m_pBuffer;
MxU32* m_pBuffer;
MxLong m_position;
};

View File

@ -53,7 +53,7 @@ MxU32 MxRAMStreamProvider::GetLengthInDWords()
}
// OFFSET: LEGO1 0x100d0960
void* MxRAMStreamProvider::GetBufferForDWords()
MxU32* MxRAMStreamProvider::GetBufferForDWords()
{
return m_bufferForDWords;
}

View File

@ -14,14 +14,14 @@ class MxRAMStreamProvider : public MxStreamProvider
virtual MxU32 GetFileSize() override; //vtable+0x18
virtual MxU32 GetStreamBuffersNum() override; //vtable+0x1c
virtual MxU32 GetLengthInDWords() override; //vtable+0x24
virtual void* GetBufferForDWords() override; //vtable+0x28
virtual MxU32* GetBufferForDWords() override; //vtable+0x28
protected:
MxU32 m_bufferSize;
MxU32 m_fileSize;
void* m_pBufferOfFileSize;
MxU32 m_lengthInDWords;
void* m_bufferForDWords;
MxU32* m_bufferForDWords;
};
#endif // MXRAMSTREAMPROVIDER_H

View File

@ -48,27 +48,21 @@ MxResult MxStreamController::vtable0x1C(undefined4 p_unknown, undefined4 p_unkno
// OFFSET: LEGO1 0x100c1690
MxResult MxStreamController::vtable0x20(MxDSAction* p_action)
{
MxResult result;
void* buffer;
MxU32 buffer_value;
MxAutoLocker locker(&m_criticalSection);
MxStreamProvider* provider = m_provider;
MxU32 objectId = p_action->GetObjectId();
if(objectId < provider->GetLengthInDWords())
{
buffer = provider->GetBufferForDWords();
buffer_value = *(MxU32 *)((MxU32)buffer + objectId * 4);
}
MxResult result;
MxU32 offset = 0;
if (buffer_value == NULL)
{
result = FAILURE;
}
MxS32 objectId = p_action->GetObjectId();
MxStreamProvider *provider = m_provider;
if ((MxS32) provider->GetLengthInDWords() > objectId)
offset = provider->GetBufferForDWords()[objectId];
if (offset)
result = vtable0x2c(p_action, offset);
else
{
result = vtable0x2c(p_action, buffer_value);
}
result = FAILURE;
return result;
}

View File

@ -29,7 +29,7 @@ class MxStreamProvider : public MxCore
virtual MxU32 GetStreamBuffersNum() = 0; //vtable+0x1c
virtual void vtable0x20(undefined4 p_unknown1); //vtable+0x20
virtual MxU32 GetLengthInDWords() = 0; //vtable+0x24
virtual void* GetBufferForDWords() = 0; //vtable+0x28
virtual MxU32* GetBufferForDWords() = 0; //vtable+0x28
protected:
void *m_pLookup;