From 86203f17045968624afe258813fef917118eb037 Mon Sep 17 00:00:00 2001 From: Christian Semmler Date: Sat, 27 Apr 2024 09:07:28 -0400 Subject: [PATCH] Implement/match LegoAnimationManager::Init (#858) --- .../legoomni/include/legoanimationmanager.h | 18 ++++-- .../src/common/legoanimationmanager.cpp | 60 ++++++++++++++++++- 2 files changed, 70 insertions(+), 8 deletions(-) diff --git a/LEGO1/lego/legoomni/include/legoanimationmanager.h b/LEGO1/lego/legoomni/include/legoanimationmanager.h index ebc5ac43..54947650 100644 --- a/LEGO1/lego/legoomni/include/legoanimationmanager.h +++ b/LEGO1/lego/legoomni/include/legoanimationmanager.h @@ -38,7 +38,9 @@ struct Vehicle { struct Unknown0x3c { LegoROI* m_roi; // 0x00 MxU32 m_id; // 0x04 - undefined m_unk0x08[0x10]; // 0x08 + undefined m_unk0x08[0x08]; // 0x08 + float m_unk0x10; // 0x10 + undefined m_unk0x14; // 0x14 }; // VTABLE: LEGO1 0x100d8c18 @@ -87,7 +89,7 @@ class LegoAnimationManager : public MxCore { undefined p_param9 ); void FUN_10061010(undefined4); - void FUN_100617c0(MxS32, MxU16&, MxU32&); + void FUN_100617c0(MxS32, MxU16&, MxU16&); LegoTranInfo* GetTranInfo(MxU32 p_index); MxS8 FUN_10062360(char*); void FUN_10062770(); @@ -123,9 +125,10 @@ class LegoAnimationManager : public MxCore { MxU32 m_scriptIndex; // 0x08 MxU16 m_animCount; // 0x0c MxU16 m_unk0x0e; // 0x0e - MxU32 m_unk0x10; // 0x10 + MxU16 m_unk0x10; // 0x10 AnimInfo* m_anims; // 0x14 - undefined m_unk0x18[4]; // 0x18 + undefined2 m_unk0x18; // 0x18 + undefined m_unk0x1a; // 0x1a MxU32 m_unk0x1c; // 0x1c LegoTranInfoList* m_tranInfoList; // 0x20 LegoTranInfoList* m_tranInfoList2; // 0x24 @@ -140,7 +143,12 @@ class LegoAnimationManager : public MxCore { undefined m_unk0x401; // 0x401 MxU8 m_unk0x402; // 0x402 MxLong m_unk0x404; // 0x404 - undefined m_unk0x408[0x18]; // 0x408 + MxLong m_unk0x408; // 0x408 + MxLong m_unk0x40c; // 0x40c + undefined4 m_unk0x410; // 0x410 + undefined4 m_unk0x414; // 0x414 + undefined4 m_unk0x418; // 0x418 + undefined4 m_unk0x41c; // 0x41c AnimState* m_animState; // 0x420 LegoROIList* m_unk0x424; // 0x424 undefined m_unk0x428; // 0x428 diff --git a/LEGO1/lego/legoomni/src/common/legoanimationmanager.cpp b/LEGO1/lego/legoomni/src/common/legoanimationmanager.cpp index 41a44a55..648e5128 100644 --- a/LEGO1/lego/legoomni/src/common/legoanimationmanager.cpp +++ b/LEGO1/lego/legoomni/src/common/legoanimationmanager.cpp @@ -166,11 +166,65 @@ void LegoAnimationManager::FUN_1005f0b0() // TODO } -// STUB: LEGO1 0x1005f130 +// FUNCTION: LEGO1 0x1005f130 // FUNCTION: BETA10 0x1003ffb7 void LegoAnimationManager::Init() { - // TODO + m_unk0x402 = 0; + m_scriptIndex = -1; + m_animCount = 0; + m_anims = NULL; + m_unk0x18 = 0; + m_unk0x1a = 0; + m_tranInfoList = NULL; + m_tranInfoList2 = NULL; + m_unk0x41c = g_legoAnimationManagerConfig <= 1 ? 10 : 20; + + MxS32 i; + for (i = 0; i < (MxS32) _countof(m_unk0x28); i++) { + m_unk0x28[i] = NULL; + m_unk0x30[i] = 0; + } + + for (i = 0; i < (MxS32) _countof(m_unk0x3c); i++) { + m_unk0x3c[i].m_roi = NULL; + m_unk0x3c[i].m_id = -1; + m_unk0x3c[i].m_unk0x10 = -1.0f; + m_unk0x3c[i].m_unk0x14 = 0; + } + + m_unk0x38 = 0; + m_unk0x39 = FALSE; + m_unk0x3a = 1; + m_unk0x3fc = 0; + m_unk0x400 = 0; + m_unk0x414 = 0; + m_unk0x418 = 5; + m_unk0x0e = 0; + m_unk0x10 = 0; + m_unk0x401 = 0; + m_unk0x42b = 0; + m_unk0x430 = 0; + m_unk0x42c = 0; + m_unk0x408 = m_unk0x40c = m_unk0x404 = Timer()->GetTime(); + m_unk0x410 = 5000; + + for (i = 0; i < (MxS32) _countof(g_characters); i++) { + g_characters[i].m_active = FALSE; + g_characters[i].m_unk0x04 = FALSE; + } + + for (i = 0; i < (MxS32) _countof(g_vehicles); i++) { + g_vehicles[i].m_unk0x04 = 0; + g_vehicles[i].m_unk0x05 = FALSE; + } + + if (m_unk0x424 != NULL) { + FUN_10063aa0(); + delete m_unk0x424; + } + + m_unk0x424 = new LegoROIList(); } // STUB: LEGO1 0x1005f6d0 @@ -657,7 +711,7 @@ void LegoAnimationManager::FUN_10061010(undefined4) } // STUB: LEGO1 0x100617c0 -void LegoAnimationManager::FUN_100617c0(MxS32, MxU16&, MxU32&) +void LegoAnimationManager::FUN_100617c0(MxS32, MxU16&, MxU16&) { // TODO }