mirror of
https://github.com/isledecomp/isle.git
synced 2026-01-31 12:11:15 +00:00
Changes
This commit is contained in:
parent
961cd151a1
commit
0d8caf3d34
@ -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
|
||||||
|
|||||||
@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user