From acdaf4ed4c1c9f13c4db734405a2f4e4ba591886 Mon Sep 17 00:00:00 2001 From: Christian Semmler Date: Fri, 22 Dec 2023 07:26:54 -0500 Subject: [PATCH] Finish implementation of MxSmack (#349) * Finish implementation of MxSmack * Fix var name --- LEGO1/mxsmack.cpp | 38 ++++++++++++++++++++++++++++++++------ LEGO1/mxsmack.h | 5 ++++- 2 files changed, 36 insertions(+), 7 deletions(-) diff --git a/LEGO1/mxsmack.cpp b/LEGO1/mxsmack.cpp index 8a1c8fde..551b87c9 100644 --- a/LEGO1/mxsmack.cpp +++ b/LEGO1/mxsmack.cpp @@ -206,11 +206,11 @@ MxResult MxSmack::LoadFrame( SmackDoFrameToBuffer(p_chunkData, p_mxSmack->m_huffmanTables, p_mxSmack->m_unk0x6b4); - MxS16 und1 = 1; - MxU32 und2[4]; + MxU16 und = 1; + u32 smackRect[4]; MxRect32 rect; - while (FUN_100c6050(p_mxSmack->m_unk0x6b4, &und1, und2, &rect)) { + while (GetRect(p_mxSmack->m_unk0x6b4, &und, smackRect, &rect)) { MxRect32* newRect = new MxRect32(rect); p_list->Append(newRect); } @@ -218,9 +218,35 @@ MxResult MxSmack::LoadFrame( return SUCCESS; } -// STUB: LEGO1 0x100c6050 -MxBool MxSmack::FUN_100c6050(MxU8* p_unk0x6b4, MxS16* p_und1, MxU32* p_und2, MxRect32* p_rect) +// FUNCTION: LEGO1 0x100c6050 +MxBool MxSmack::GetRect(MxU8* p_unk0x6b4, MxU16* p_und, u32* p_smackRect, MxRect32* p_rect) { - // TODO + u32 left, bottom, top, right; + + if (!*p_und) + return FALSE; + + if (*p_und == 1) { + if (!SmackGetRect(p_unk0x6b4, p_smackRect)) + return FALSE; + *p_und = 2; + } + + left = p_smackRect[0]; + top = p_smackRect[1]; + right = p_smackRect[2] + p_smackRect[0]; + bottom = p_smackRect[3] + p_smackRect[1]; + + while (SmackGetRect(p_unk0x6b4, p_smackRect)) { + if (left > p_smackRect[0]) + left = p_smackRect[0]; + if (right < p_smackRect[0] + p_smackRect[2]) + right = p_smackRect[0] + p_smackRect[2]; + + bottom = p_smackRect[1] + p_smackRect[3]; + } + + *p_und = 0; + *p_rect = MxRect32(left, top, right, bottom); return TRUE; } diff --git a/LEGO1/mxsmack.h b/LEGO1/mxsmack.h index b5e34781..e0f8c76e 100644 --- a/LEGO1/mxsmack.h +++ b/LEGO1/mxsmack.h @@ -30,6 +30,9 @@ extern "C" // (SMACK.LIB) FUNCTION: LEGO1 0x100d052c u32 SmackGetSizeDeltas(u32 p_width, u32 p_height); + + // (SMACK.LIB) FUNCTION: LEGO1 0x100d0543 + u8 SmackGetRect(u8* p_unk0x6b4, u32* p_rect); } // SIZE 0x6b8 @@ -53,7 +56,7 @@ struct MxSmack { MxBool p_paletteChanged, MxRectList* p_list ); - static MxBool FUN_100c6050(MxU8* p_unk0x6b4, MxS16* p_und1, MxU32* p_und2, MxRect32* p_rect); + static MxBool GetRect(MxU8* p_unk0x6b4, MxU16* p_und, u32* p_smackRect, MxRect32* p_rect); }; #endif // MXSMACK_H