This commit is contained in:
Christian Semmler 2024-01-10 06:13:54 -05:00
parent 961cd151a1
commit 0d8caf3d34
2 changed files with 12 additions and 5 deletions

View File

@ -42,6 +42,6 @@ class MxRAMStreamProvider : public MxStreamProvider {
// SYNTHETIC: LEGO1 0x100d0a30 // SYNTHETIC: LEGO1 0x100d0a30
// MxRAMStreamProvider::`scalar deleting destructor' // MxRAMStreamProvider::`scalar deleting destructor'
MxU32 __cdecl ReadData(MxU8* p_fileSizeBuffer, MxU32 p_fileSize); MxU32 ReadData(MxU8* p_fileSizeBuffer, MxU32 p_fileSize);
#endif // MXRAMSTREAMPROVIDER_H #endif // MXRAMSTREAMPROVIDER_H

View File

@ -99,27 +99,31 @@ MxResult MxRAMStreamProvider::SetResourceToGet(MxStreamController* p_resource)
} }
// FUNCTION: LEGO1 0x100d0d80 // FUNCTION: LEGO1 0x100d0d80
MxU32 __cdecl ReadData(MxU8* p_buffer, MxU32 p_size) MxU32 ReadData(MxU8* p_buffer, MxU32 p_size)
{ {
MxU32 id; MxU32 id;
MxU8* data = p_buffer; MxU8* data = p_buffer;
MxU8* end = p_buffer + p_size; MxU8* end = p_buffer + p_size;
MxU8* data2; MxU8* data2;
if (p_buffer < end) { if (p_buffer < end) {
do { do {
if (*MxDSChunk::IntoType(data) == 'bOxM') { if (*MxDSChunk::IntoType(data) == FOURCC('M', 'x', 'O', 'b')) {
data2 = data; data2 = data;
data += 8; data += 8;
MxDSObject* obj = DeserializeDSObjectDispatch(&data, -1); MxDSObject* obj = DeserializeDSObjectDispatch(&data, -1);
id = obj->GetObjectId(); id = obj->GetObjectId();
delete obj; delete obj;
data = MxDSChunk::End(data2); data = MxDSChunk::End(data2);
while (data < end) { while (data < end) {
if ((*MxDSChunk::IntoType(data) == 'hCxM')) { if (*MxDSChunk::IntoType(data) == FOURCC('M', 'x', 'C', 'h')) {
MxU8* data3 = data; MxU8* data3 = data;
MxU32* psize = MxDSChunk::IntoLength(data); MxU32* psize = MxDSChunk::IntoLength(data);
data += MxDSChunk::Size(*psize); data += MxDSChunk::Size(*psize);
if ((*MxDSChunk::IntoType(data2) == 'hCxM') &&
if ((*MxDSChunk::IntoType(data2) == FOURCC('M', 'x', 'C', 'h')) &&
(*MxStreamChunk::IntoFlags(data2) & MxDSChunk::Flag_Split)) { (*MxStreamChunk::IntoFlags(data2) & MxDSChunk::Flag_Split)) {
if (*MxStreamChunk::IntoObjectId(data2) == *MxStreamChunk::IntoObjectId(data3) && if (*MxStreamChunk::IntoObjectId(data2) == *MxStreamChunk::IntoObjectId(data3) &&
(*MxStreamChunk::IntoFlags(data3) & MxDSChunk::Flag_Split) && (*MxStreamChunk::IntoFlags(data3) & MxDSChunk::Flag_Split) &&
@ -130,8 +134,10 @@ MxU32 __cdecl ReadData(MxU8* p_buffer, MxU32 p_size)
else else
*MxStreamChunk::IntoFlags(data2) &= ~MxDSChunk::Flag_Split; *MxStreamChunk::IntoFlags(data2) &= ~MxDSChunk::Flag_Split;
} }
data2 += MxDSChunk::Size(*MxDSChunk::IntoLength(data2)); data2 += MxDSChunk::Size(*MxDSChunk::IntoLength(data2));
memcpy(data2, data3, MxDSChunk::Size(*psize)); memcpy(data2, data3, MxDSChunk::Size(*psize));
if (*MxStreamChunk::IntoObjectId(data2) == id && if (*MxStreamChunk::IntoObjectId(data2) == id &&
(*MxStreamChunk::IntoFlags(data2) & MxDSChunk::Flag_End)) (*MxStreamChunk::IntoFlags(data2) & MxDSChunk::Flag_End))
break; break;
@ -144,6 +150,7 @@ MxU32 __cdecl ReadData(MxU8* p_buffer, MxU32 p_size)
data++; data++;
} while (data < end); } while (data < end);
} }
*MxStreamChunk::IntoFlags(data2) &= ~MxDSChunk::Flag_Split; *MxStreamChunk::IntoFlags(data2) &= ~MxDSChunk::Flag_Split;
return MxDSChunk::End(data2) - p_buffer; return MxDSChunk::End(data2) - p_buffer;
} }