diff --git a/LEGO1/lego/legoomni/src/actors/act3actors.cpp b/LEGO1/lego/legoomni/src/actors/act3actors.cpp index 6a0a1132..0b04b09a 100644 --- a/LEGO1/lego/legoomni/src/actors/act3actors.cpp +++ b/LEGO1/lego/legoomni/src/actors/act3actors.cpp @@ -376,7 +376,7 @@ MxResult Act3Cop::FUN_10040360() MxMatrix locald0 = proi->GetLocal2World(); Vector3 local88(locald0[3]); Mx3DPointFloat localec(local88); - localec -= local88; + localec -= local2c; LegoPathEdgeContainer* r2 = new LegoPathEdgeContainer(); assert(r2); diff --git a/LEGO1/omni/src/stream/mxdsbuffer.cpp b/LEGO1/omni/src/stream/mxdsbuffer.cpp index 732f9fac..57099601 100644 --- a/LEGO1/omni/src/stream/mxdsbuffer.cpp +++ b/LEGO1/omni/src/stream/mxdsbuffer.cpp @@ -485,31 +485,34 @@ void MxDSBuffer::FUN_100c6f80(MxU32 p_writeOffset) } // FUNCTION: LEGO1 0x100c6fa0 +// FUNCTION: BETA10 0x101582f2 MxU8* MxDSBuffer::FUN_100c6fa0(MxU8* p_data) { - MxU8* current = p_data ? p_data : m_pBuffer; - MxU8* end = m_writeOffset + m_pBuffer - 8; + MxU8* volatile current = p_data ? p_data : m_pBuffer; - while (current <= end) { + while (current <= m_writeOffset + m_pBuffer - 8) { switch (UnalignedRead(current)) { - case FOURCC('L', 'I', 'S', 'T'): - case FOURCC('R', 'I', 'F', 'F'): - current += 12; + case FOURCC('M', 'x', 'O', 'b'): + case FOURCC('M', 'x', 'C', 'h'): + if (current == p_data) { + MxU32 size = UnalignedRead(current + 4); + current += (size & 1) + size; + current += 8; + } + else { + return current; + } break; case FOURCC('M', 'x', 'D', 'a'): case FOURCC('M', 'x', 'S', 't'): current += 8; break; - case FOURCC('M', 'x', 'O', 'b'): - case FOURCC('M', 'x', 'C', 'h'): - if (current != p_data) { - return current; - } - current += ((uintptr_t) current) & 1; - current += 8; - break; case FOURCC('M', 'x', 'H', 'd'): - current += (((MxU32*) current)[1] + 8); + current += UnalignedRead(current + 4) + 8; + break; + case FOURCC('L', 'I', 'S', 'T'): + case FOURCC('R', 'I', 'F', 'F'): + current += 12; break; default: return NULL;