MxDSBuffer::ParseChunk to 100% (#1257)

* MxDSBuffer::ParseChunk to 100%

* Restore SUCCESS tests
This commit is contained in:
MS
2024-12-21 22:03:12 -05:00
committed by GitHub
parent 1caf275fc4
commit 276ad8d735
6 changed files with 40 additions and 19 deletions

View File

@@ -83,6 +83,7 @@ public:
// FUNCTION: BETA10 0x1012be80 // FUNCTION: BETA10 0x1012be80
MxS32 GetLoopCount() { return m_loopCount; } MxS32 GetLoopCount() { return m_loopCount; }
// FUNCTION: BETA10 0x100f27f0
void SetLoopCount(MxS32 p_loopCount) { m_loopCount = p_loopCount; } void SetLoopCount(MxS32 p_loopCount) { m_loopCount = p_loopCount; }
// FUNCTION: BETA10 0x1003db50 // FUNCTION: BETA10 0x1003db50

View File

@@ -11,6 +11,7 @@ class MxStreamChunk;
class MxDSChunk; class MxDSChunk;
// VTABLE: LEGO1 0x100dcca0 // VTABLE: LEGO1 0x100dcca0
// VTABLE: BETA10 0x101c2898
// SIZE 0x34 // SIZE 0x34
class MxDSBuffer : public MxCore { class MxDSBuffer : public MxCore {
public: public:
@@ -25,6 +26,7 @@ public:
~MxDSBuffer() override; ~MxDSBuffer() override;
// FUNCTION: LEGO1 0x100c6500 // FUNCTION: LEGO1 0x100c6500
// FUNCTION: BETA10 0x10158510
const char* ClassName() const override // vtable+0x0c const char* ClassName() const override // vtable+0x0c
{ {
// STRING: LEGO1 0x101025b8 // STRING: LEGO1 0x101025b8
@@ -87,6 +89,7 @@ public:
void SetUnk30(MxDSStreamingAction* p_unk0x30) { m_unk0x30 = p_unk0x30; } void SetUnk30(MxDSStreamingAction* p_unk0x30) { m_unk0x30 = p_unk0x30; }
// SYNTHETIC: LEGO1 0x100c6510 // SYNTHETIC: LEGO1 0x100c6510
// SYNTHETIC: BETA10 0x10158530
// MxDSBuffer::`scalar deleting destructor' // MxDSBuffer::`scalar deleting destructor'
private: private:

View File

@@ -12,6 +12,7 @@
#define DS_CHUNK_BIT16 0x8000 #define DS_CHUNK_BIT16 0x8000
// VTABLE: LEGO1 0x100dc7f8 // VTABLE: LEGO1 0x100dc7f8
// VTABLE: BETA10 0x101c23d0
// SIZE 0x1c // SIZE 0x1c
class MxDSChunk : public MxCore { class MxDSChunk : public MxCore {
public: public:
@@ -19,6 +20,7 @@ public:
~MxDSChunk() override; ~MxDSChunk() override;
// FUNCTION: LEGO1 0x100be0c0 // FUNCTION: LEGO1 0x100be0c0
// FUNCTION: BETA10 0x10134580
const char* ClassName() const override // vtable+0x0c const char* ClassName() const override // vtable+0x0c
{ {
// STRING: LEGO1 0x10101e6c // STRING: LEGO1 0x10101e6c
@@ -26,6 +28,7 @@ public:
} }
// FUNCTION: LEGO1 0x100be0d0 // FUNCTION: LEGO1 0x100be0d0
// FUNCTION: BETA10 0x10134520
MxBool IsA(const char* p_name) const override // vtable+0x10 MxBool IsA(const char* p_name) const override // vtable+0x10
{ {
return !strcmp(p_name, MxDSChunk::ClassName()) || MxCore::IsA(p_name); return !strcmp(p_name, MxDSChunk::ClassName()) || MxCore::IsA(p_name);
@@ -39,14 +42,26 @@ public:
void SetChunkFlags(MxU16 p_flags) { m_flags = p_flags; } void SetChunkFlags(MxU16 p_flags) { m_flags = p_flags; }
void SetObjectId(undefined4 p_objectid) { m_objectId = p_objectid; } void SetObjectId(undefined4 p_objectid) { m_objectId = p_objectid; }
// FUNCTION: BETA10 0x101343f0
void SetTime(MxLong p_time) { m_time = p_time; } void SetTime(MxLong p_time) { m_time = p_time; }
void SetLength(MxU32 p_length) { m_length = p_length; } void SetLength(MxU32 p_length) { m_length = p_length; }
void SetData(MxU8* p_data) { m_data = p_data; } void SetData(MxU8* p_data) { m_data = p_data; }
// FUNCTION: BETA10 0x1005ab90
MxU16 GetChunkFlags() { return m_flags; } MxU16 GetChunkFlags() { return m_flags; }
// FUNCTION: BETA10 0x10159110
undefined4 GetObjectId() { return m_objectId; } undefined4 GetObjectId() { return m_objectId; }
// FUNCTION: BETA10 0x1005ab30
MxLong GetTime() { return m_time; } MxLong GetTime() { return m_time; }
// FUNCTION: BETA10 0x1008d000
MxU32 GetLength() { return m_length; } MxU32 GetLength() { return m_length; }
// FUNCTION: BETA10 0x10056d60
MxU8* GetData() { return m_data; } MxU8* GetData() { return m_data; }
void Release() void Release()
@@ -57,6 +72,7 @@ public:
} }
// SYNTHETIC: LEGO1 0x100be150 // SYNTHETIC: LEGO1 0x100be150
// SYNTHETIC: BETA10 0x101474c0
// MxDSChunk::`scalar deleting destructor' // MxDSChunk::`scalar deleting destructor'
protected: protected:

View File

@@ -13,12 +13,13 @@
DECOMP_SIZE_ASSERT(MxDSBuffer, 0x34); DECOMP_SIZE_ASSERT(MxDSBuffer, 0x34);
// FUNCTION: LEGO1 0x100c6470 // FUNCTION: LEGO1 0x100c6470
// FUNCTION: BETA10 0x10156f00
MxDSBuffer::MxDSBuffer() MxDSBuffer::MxDSBuffer()
{ {
m_referenceCount = 0;
m_pBuffer = NULL; m_pBuffer = NULL;
m_pIntoBuffer = NULL; m_pIntoBuffer = NULL;
m_pIntoBuffer2 = NULL; m_pIntoBuffer2 = NULL;
m_referenceCount = 0;
m_unk0x14 = 0; m_unk0x14 = 0;
m_unk0x18 = 0; m_unk0x18 = 0;
m_unk0x1c = 0; m_unk0x1c = 0;
@@ -29,6 +30,7 @@ MxDSBuffer::MxDSBuffer()
} }
// FUNCTION: LEGO1 0x100c6530 // FUNCTION: LEGO1 0x100c6530
// FUNCTION: BETA10 0x10156ff7
MxDSBuffer::~MxDSBuffer() MxDSBuffer::~MxDSBuffer()
{ {
assert(m_referenceCount == 0); assert(m_referenceCount == 0);
@@ -54,6 +56,7 @@ MxDSBuffer::~MxDSBuffer()
} }
// FUNCTION: LEGO1 0x100c6640 // FUNCTION: LEGO1 0x100c6640
// FUNCTION: BETA10 0x10157146
MxResult MxDSBuffer::AllocateBuffer(MxU32 p_bufferSize, Type p_mode) MxResult MxDSBuffer::AllocateBuffer(MxU32 p_bufferSize, Type p_mode)
{ {
MxResult result = FAILURE; MxResult result = FAILURE;
@@ -233,6 +236,7 @@ MxResult MxDSBuffer::StartPresenterFromAction(
} }
// FUNCTION: LEGO1 0x100c6a50 // FUNCTION: LEGO1 0x100c6a50
// FUNCTION: BETA10 0x10157795
MxResult MxDSBuffer::ParseChunk( MxResult MxDSBuffer::ParseChunk(
MxStreamController* p_controller, MxStreamController* p_controller,
MxU32* p_data, MxU32* p_data,
@@ -254,26 +258,19 @@ MxResult MxDSBuffer::ParseChunk(
MxU32 length = p_header->GetLength() + MxDSChunk::GetHeaderSize() + 8; MxU32 length = p_header->GetLength() + MxDSChunk::GetHeaderSize() + 8;
MxDSBuffer* buffer = new MxDSBuffer(); MxDSBuffer* buffer = new MxDSBuffer();
if (buffer && buffer->AllocateBuffer(length, e_allocate) == SUCCESS && if (!buffer || buffer->AllocateBuffer(length, e_allocate) != SUCCESS ||
buffer->CalcBytesRemaining((MxU8*) p_data) == SUCCESS) { buffer->CalcBytesRemaining((MxU8*) p_data) != SUCCESS ||
*p_streamingAction = new MxDSStreamingAction((MxDSStreamingAction&) *p_action); (*p_streamingAction = new MxDSStreamingAction((MxDSStreamingAction&) *p_action)) == NULL) {
if (*p_streamingAction) {
MxU16* flags = MxStreamChunk::IntoFlags(buffer->GetBuffer());
*flags = p_header->GetChunkFlags() & ~DS_CHUNK_SPLIT;
delete p_header;
(*p_streamingAction)->SetUnknowna0(buffer);
goto done;
}
}
if (buffer) {
delete buffer; delete buffer;
delete p_header;
return FAILURE;
} }
MxU16* flags = MxStreamChunk::IntoFlags(buffer->GetBuffer());
*flags = p_header->GetChunkFlags() & ~DS_CHUNK_SPLIT;
delete p_header; delete p_header;
return FAILURE; (*p_streamingAction)->SetUnknowna0(buffer);
} }
else { else {
if (p_header->GetChunkFlags() & DS_CHUNK_END_OF_STREAM) { if (p_header->GetChunkFlags() & DS_CHUNK_END_OF_STREAM) {
@@ -317,7 +314,6 @@ MxResult MxDSBuffer::ParseChunk(
} }
} }
done:
return result; return result;
} }

View File

@@ -3,16 +3,18 @@
DECOMP_SIZE_ASSERT(MxDSChunk, 0x1c); DECOMP_SIZE_ASSERT(MxDSChunk, 0x1c);
// FUNCTION: LEGO1 0x100be050 // FUNCTION: LEGO1 0x100be050
// FUNCTION: BETA10 0x10147290
MxDSChunk::MxDSChunk() MxDSChunk::MxDSChunk()
{ {
m_flags = 0;
m_data = NULL; m_data = NULL;
m_flags = 0;
m_objectId = -1; m_objectId = -1;
m_time = 0; m_time = 0;
m_length = 0; m_length = 0;
} }
// FUNCTION: LEGO1 0x100be170 // FUNCTION: LEGO1 0x100be170
// FUNCTION: BETA10 0x10147330
MxDSChunk::~MxDSChunk() MxDSChunk::~MxDSChunk()
{ {
if (m_flags & DS_CHUNK_BIT1) { if (m_flags & DS_CHUNK_BIT1) {
@@ -21,6 +23,7 @@ MxDSChunk::~MxDSChunk()
} }
// FUNCTION: LEGO1 0x100be1e0 // FUNCTION: LEGO1 0x100be1e0
// FUNCTION: BETA10 0x101473c5
MxU32 MxDSChunk::GetHeaderSize() MxU32 MxDSChunk::GetHeaderSize()
{ {
return 0x0e; return 0x0e;

View File

@@ -57,6 +57,7 @@ MxU32 MxStreamChunk::ReadChunkHeader(MxU8* p_chunkData)
} }
// FUNCTION: LEGO1 0x100c30e0 // FUNCTION: LEGO1 0x100c30e0
// FUNCTION: BETA10 0x10151517
MxResult MxStreamChunk::SendChunk(MxStreamListMxDSSubscriber& p_subscriberList, MxBool p_append, MxS16 p_obj24val) MxResult MxStreamChunk::SendChunk(MxStreamListMxDSSubscriber& p_subscriberList, MxBool p_append, MxS16 p_obj24val)
{ {
for (MxStreamListMxDSSubscriber::iterator it = p_subscriberList.begin(); it != p_subscriberList.end(); it++) { for (MxStreamListMxDSSubscriber::iterator it = p_subscriberList.begin(); it != p_subscriberList.end(); it++) {
@@ -82,6 +83,7 @@ void MxStreamChunk::SetBuffer(MxDSBuffer* p_buffer)
} }
// FUNCTION: LEGO1 0x100c3180 // FUNCTION: LEGO1 0x100c3180
// FUNCTION: BETA10 0x101515f1
MxU16* MxStreamChunk::IntoFlags(MxU8* p_buffer) MxU16* MxStreamChunk::IntoFlags(MxU8* p_buffer)
{ {
return (MxU16*) (p_buffer + 0x08); return (MxU16*) (p_buffer + 0x08);