mirror of
https://github.com/isledecomp/isle.git
synced 2026-01-23 16:21:15 +00:00
Match MxStreamController::vtable0x20
This commit is contained in:
parent
8500407bab
commit
2c0ac5ee59
@ -79,7 +79,7 @@ MxU32 MxDiskStreamProvider::GetLengthInDWords()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// OFFSET: LEGO1 0x100d1ec0
|
// OFFSET: LEGO1 0x100d1ec0
|
||||||
void* MxDiskStreamProvider::GetBufferForDWords()
|
MxU32* MxDiskStreamProvider::GetBufferForDWords()
|
||||||
{
|
{
|
||||||
return m_pFile->GetBuffer();
|
return m_pFile->GetBuffer();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -54,7 +54,7 @@ class MxDiskStreamProvider : public MxStreamProvider
|
|||||||
virtual MxU32 GetStreamBuffersNum() override; //vtable+0x1c
|
virtual MxU32 GetStreamBuffersNum() override; //vtable+0x1c
|
||||||
virtual void vtable0x20(undefined4 p_unknown1) override; //vtable+0x20
|
virtual void vtable0x20(undefined4 p_unknown1) override; //vtable+0x20
|
||||||
virtual MxU32 GetLengthInDWords() override; //vtable+0x24
|
virtual MxU32 GetLengthInDWords() override; //vtable+0x24
|
||||||
virtual void* GetBufferForDWords()override; //vtable+0x28
|
virtual MxU32* GetBufferForDWords()override; //vtable+0x28
|
||||||
|
|
||||||
private:
|
private:
|
||||||
MxDiskStreamProviderThread m_thread; // 0x10
|
MxDiskStreamProviderThread m_thread; // 0x10
|
||||||
|
|||||||
@ -81,7 +81,7 @@ MxLong MxDSFile::ReadChunks()
|
|||||||
}
|
}
|
||||||
MxULong* pLengthInDWords = &m_lengthInDWords;
|
MxULong* pLengthInDWords = &m_lengthInDWords;
|
||||||
m_io.Read(pLengthInDWords, 4);
|
m_io.Read(pLengthInDWords, 4);
|
||||||
m_pBuffer = malloc(*pLengthInDWords * 4);
|
m_pBuffer = new MxU32[*pLengthInDWords];
|
||||||
m_io.Read(m_pBuffer, *pLengthInDWords * 4);
|
m_io.Read(m_pBuffer, *pLengthInDWords * 4);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -120,7 +120,7 @@ MxLong MxDSFile::Close()
|
|||||||
if (m_lengthInDWords != 0)
|
if (m_lengthInDWords != 0)
|
||||||
{
|
{
|
||||||
m_lengthInDWords = 0;
|
m_lengthInDWords = 0;
|
||||||
free(m_pBuffer);
|
delete[] m_pBuffer;
|
||||||
m_pBuffer = NULL;
|
m_pBuffer = NULL;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
@ -14,7 +14,7 @@ MxLong MxDSSource::GetLengthInDWords()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// OFFSET: LEGO1 0x100c0000
|
// OFFSET: LEGO1 0x100c0000
|
||||||
void *MxDSSource::GetBuffer()
|
MxU32 *MxDSSource::GetBuffer()
|
||||||
{
|
{
|
||||||
return m_pBuffer;
|
return m_pBuffer;
|
||||||
}
|
}
|
||||||
@ -34,11 +34,11 @@ class MxDSSource : public MxCore
|
|||||||
virtual MxULong GetBufferSize() = 0;
|
virtual MxULong GetBufferSize() = 0;
|
||||||
virtual MxULong GetStreamBuffersNum() = 0;
|
virtual MxULong GetStreamBuffersNum() = 0;
|
||||||
virtual MxLong GetLengthInDWords();
|
virtual MxLong GetLengthInDWords();
|
||||||
virtual void* GetBuffer(); // 0x34
|
virtual MxU32* GetBuffer(); // 0x34
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
MxULong m_lengthInDWords;
|
MxULong m_lengthInDWords;
|
||||||
void* m_pBuffer;
|
MxU32* m_pBuffer;
|
||||||
MxLong m_position;
|
MxLong m_position;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -53,7 +53,7 @@ MxU32 MxRAMStreamProvider::GetLengthInDWords()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// OFFSET: LEGO1 0x100d0960
|
// OFFSET: LEGO1 0x100d0960
|
||||||
void* MxRAMStreamProvider::GetBufferForDWords()
|
MxU32* MxRAMStreamProvider::GetBufferForDWords()
|
||||||
{
|
{
|
||||||
return m_bufferForDWords;
|
return m_bufferForDWords;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -14,14 +14,14 @@ class MxRAMStreamProvider : public MxStreamProvider
|
|||||||
virtual MxU32 GetFileSize() override; //vtable+0x18
|
virtual MxU32 GetFileSize() override; //vtable+0x18
|
||||||
virtual MxU32 GetStreamBuffersNum() override; //vtable+0x1c
|
virtual MxU32 GetStreamBuffersNum() override; //vtable+0x1c
|
||||||
virtual MxU32 GetLengthInDWords() override; //vtable+0x24
|
virtual MxU32 GetLengthInDWords() override; //vtable+0x24
|
||||||
virtual void* GetBufferForDWords() override; //vtable+0x28
|
virtual MxU32* GetBufferForDWords() override; //vtable+0x28
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
MxU32 m_bufferSize;
|
MxU32 m_bufferSize;
|
||||||
MxU32 m_fileSize;
|
MxU32 m_fileSize;
|
||||||
void* m_pBufferOfFileSize;
|
void* m_pBufferOfFileSize;
|
||||||
MxU32 m_lengthInDWords;
|
MxU32 m_lengthInDWords;
|
||||||
void* m_bufferForDWords;
|
MxU32* m_bufferForDWords;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // MXRAMSTREAMPROVIDER_H
|
#endif // MXRAMSTREAMPROVIDER_H
|
||||||
|
|||||||
@ -48,27 +48,21 @@ MxResult MxStreamController::vtable0x1C(undefined4 p_unknown, undefined4 p_unkno
|
|||||||
// OFFSET: LEGO1 0x100c1690
|
// OFFSET: LEGO1 0x100c1690
|
||||||
MxResult MxStreamController::vtable0x20(MxDSAction* p_action)
|
MxResult MxStreamController::vtable0x20(MxDSAction* p_action)
|
||||||
{
|
{
|
||||||
MxResult result;
|
|
||||||
void* buffer;
|
|
||||||
MxU32 buffer_value;
|
|
||||||
MxAutoLocker locker(&m_criticalSection);
|
MxAutoLocker locker(&m_criticalSection);
|
||||||
|
|
||||||
MxStreamProvider* provider = m_provider;
|
MxResult result;
|
||||||
MxU32 objectId = p_action->GetObjectId();
|
MxU32 offset = 0;
|
||||||
if(objectId < provider->GetLengthInDWords())
|
|
||||||
{
|
|
||||||
buffer = provider->GetBufferForDWords();
|
|
||||||
buffer_value = *(MxU32 *)((MxU32)buffer + objectId * 4);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (buffer_value == NULL)
|
MxS32 objectId = p_action->GetObjectId();
|
||||||
{
|
MxStreamProvider *provider = m_provider;
|
||||||
result = FAILURE;
|
|
||||||
}
|
if ((MxS32) provider->GetLengthInDWords() > objectId)
|
||||||
|
offset = provider->GetBufferForDWords()[objectId];
|
||||||
|
|
||||||
|
if (offset)
|
||||||
|
result = vtable0x2c(p_action, offset);
|
||||||
else
|
else
|
||||||
{
|
result = FAILURE;
|
||||||
result = vtable0x2c(p_action, buffer_value);
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -29,7 +29,7 @@ class MxStreamProvider : public MxCore
|
|||||||
virtual MxU32 GetStreamBuffersNum() = 0; //vtable+0x1c
|
virtual MxU32 GetStreamBuffersNum() = 0; //vtable+0x1c
|
||||||
virtual void vtable0x20(undefined4 p_unknown1); //vtable+0x20
|
virtual void vtable0x20(undefined4 p_unknown1); //vtable+0x20
|
||||||
virtual MxU32 GetLengthInDWords() = 0; //vtable+0x24
|
virtual MxU32 GetLengthInDWords() = 0; //vtable+0x24
|
||||||
virtual void* GetBufferForDWords() = 0; //vtable+0x28
|
virtual MxU32* GetBufferForDWords() = 0; //vtable+0x28
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void *m_pLookup;
|
void *m_pLookup;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user