From 20e272fd25c1bdc4e96c876eb2c854771aa88eb8 Mon Sep 17 00:00:00 2001 From: Misha Date: Sun, 22 Oct 2023 14:56:30 -0400 Subject: [PATCH] Implement MxDSBuffer constructor, match FUN_100bffd0 --- LEGO1/mxdsbuffer.cpp | 25 ++++++++++++++++++++++++- LEGO1/mxdsbuffer.h | 25 +++++++++++++++++++++++-- LEGO1/mxdssource.cpp | 8 ++++---- LEGO1/mxdssource.h | 3 ++- 4 files changed, 53 insertions(+), 8 deletions(-) diff --git a/LEGO1/mxdsbuffer.cpp b/LEGO1/mxdsbuffer.cpp index 686627a4..76df228d 100644 --- a/LEGO1/mxdsbuffer.cpp +++ b/LEGO1/mxdsbuffer.cpp @@ -1,9 +1,21 @@ #include "mxdsbuffer.h" +DECOMP_SIZE_ASSERT(MxDSBuffer, 0x34); + // OFFSET: LEGO1 0x100c6470 MxDSBuffer::MxDSBuffer() { - // TODO + m_unk20 = 0; + m_pBuffer = NULL; + m_pIntoBuffer = NULL; + m_pIntoBuffer2 = NULL; + m_unk14 = 0; + m_unk18 = 0; + m_unk1c = 0; + m_writeOffset = 0; + m_bytesRemaining = 0; + m_mode = 2; + m_unk30 = 0; } // OFFSET: LEGO1 0x100c6530 @@ -11,3 +23,14 @@ MxDSBuffer::~MxDSBuffer() { // TODO } + +// OFFSET: LEGO1 0x100c6780 +void MxDSBuffer::FUN_100c678(void* p_buffer, MxU32 p_size) +{ + m_pBuffer = p_buffer; + m_pIntoBuffer = p_buffer; + m_mode = 2; + m_pIntoBuffer2 = p_buffer; + m_bytesRemaining = p_size; + m_writeOffset = p_size; +} diff --git a/LEGO1/mxdsbuffer.h b/LEGO1/mxdsbuffer.h index cb962cea..ed33c57e 100644 --- a/LEGO1/mxdsbuffer.h +++ b/LEGO1/mxdsbuffer.h @@ -12,9 +12,30 @@ class MxDSBuffer : public MxCore MxDSBuffer(); virtual ~MxDSBuffer() override; -private: - undefined m_unk08[0x2C]; + // OFFSET: LEGO1 0x100c6500 + inline virtual const char *ClassName() const override // vtable+0x0c + { + // 0x100f0568 + return "MxDSBuffer"; + } + void FUN_100c678(void* p_buffer, MxU32 p_size); + + inline void* GetBuffer() { return m_pBuffer;} + inline MxU32 GetWriteOffset() { return m_writeOffset;} + +private: + void* m_pBuffer; + void* m_pIntoBuffer; + void* m_pIntoBuffer2; + undefined4 m_unk14; + undefined4 m_unk18; + undefined4 m_unk1c; + undefined2 m_unk20; + int m_mode; + MxU32 m_writeOffset; + MxU32 m_bytesRemaining; + undefined4 m_unk30; }; #endif // MXDSBUFFER_H diff --git a/LEGO1/mxdssource.cpp b/LEGO1/mxdssource.cpp index 0ede6402..556a0d2e 100644 --- a/LEGO1/mxdssource.cpp +++ b/LEGO1/mxdssource.cpp @@ -1,10 +1,10 @@ #include "mxdssource.h" +#include "mxdsbuffer.h" // OFFSET: LEGO1 0x100bffd0 -void MxDSSource::FUN_100bffd0(void* p_unk) +void MxDSSource::ReadToBuffer(MxDSBuffer* p_unk) { - // TODO: Calls read, reading into a buffer somewhere in p_unk. - Read(NULL, 0); + Read((unsigned char*)p_unk->GetBuffer(), p_unk->GetWriteOffset()); } // OFFSET: LEGO1 0x100bfff0 @@ -17,4 +17,4 @@ MxLong MxDSSource::GetLengthInDWords() MxU32 *MxDSSource::GetBuffer() { return m_pBuffer; -} \ No newline at end of file +} diff --git a/LEGO1/mxdssource.h b/LEGO1/mxdssource.h index 2891f426..4ccee64e 100644 --- a/LEGO1/mxdssource.h +++ b/LEGO1/mxdssource.h @@ -2,6 +2,7 @@ #define MXDSSOURCE_H #include "mxcore.h" +class MxDSBuffer; // VTABLE 0x100dc8c8 class MxDSSource : public MxCore @@ -28,7 +29,7 @@ class MxDSSource : public MxCore virtual MxLong Open(MxULong) = 0; virtual MxLong Close() = 0; - virtual void FUN_100bffd0(void* p_unk); + virtual void ReadToBuffer(MxDSBuffer* p_unk); virtual MxResult Read(unsigned char *, MxULong) = 0; virtual MxLong Seek(MxLong, int) = 0; virtual MxULong GetBufferSize() = 0;