From 23457da730e6651f760ef623b65c381381b4a6e8 Mon Sep 17 00:00:00 2001 From: Joshua Peisach Date: Mon, 28 Aug 2023 05:38:46 -0400 Subject: [PATCH] Matching spree (#98) * LegoNavController: Match CalculateNewTargetSpeed Ghidra showed this correctly too, but the asm showed the problem simply, an incorrect comparison * Match a MxPresenter vtable function * Match known functions in LegoPhonemePresenter * Revert "LegoNavController: Match CalculateNewTargetSpeed" This reverts commit 718489923b4dd5a3f12d53510d299033924c5dea. * MxPresenter: rename tickle flag fields * LegoPhonemePresenter: add size assert --------- Co-authored-by: MattKC <34096995+itsmattkc@users.noreply.github.com> --- LEGO1/legophonemepresenter.cpp | 12 ++++++++---- LEGO1/legophonemepresenter.h | 9 ++++++++- LEGO1/mxpresenter.cpp | 35 +++++++++++++++++----------------- LEGO1/mxpresenter.h | 4 ++-- 4 files changed, 36 insertions(+), 24 deletions(-) diff --git a/LEGO1/legophonemepresenter.cpp b/LEGO1/legophonemepresenter.cpp index 43948fc7..ca8fba78 100644 --- a/LEGO1/legophonemepresenter.cpp +++ b/LEGO1/legophonemepresenter.cpp @@ -1,19 +1,23 @@ #include "legophonemepresenter.h" +DECOMP_SIZE_ASSERT(LegoPhonemePresenter, 0x88); + // OFFSET: LEGO1 0x1004e180 LegoPhonemePresenter::LegoPhonemePresenter() { Init(); } -// OFFSET: LEGO1 0x1004e3b0 STUB +// OFFSET: LEGO1 0x1004e3b0 void LegoPhonemePresenter::Init() { - // TODO + m_unk68 = 0; + m_unk6c = 0; + m_unk70 = 0; + m_unk84 = 0; } -// OFFSET: LEGO1 0x1004e340 STUB +// OFFSET: LEGO1 0x1004e340 LegoPhonemePresenter::~LegoPhonemePresenter() { - // TODO } diff --git a/LEGO1/legophonemepresenter.h b/LEGO1/legophonemepresenter.h index c2616448..1a72dc6c 100644 --- a/LEGO1/legophonemepresenter.h +++ b/LEGO1/legophonemepresenter.h @@ -1,7 +1,10 @@ #ifndef LEGOPHONEMEPRESENTER_H #define LEGOPHONEMEPRESENTER_H +#include "decomp.h" #include "mxflcpresenter.h" +#include "mxstring.h" +#include "mxtypes.h" // VTABLE 0x100d8040 // SIZE 0x88 @@ -20,7 +23,11 @@ public: private: void Init(); - + int m_unk68; + int m_unk6c; + undefined m_unk70; + MxString m_string; // 0x74 + undefined m_unk84; }; #endif // LEGOPHONEMEPRESENTER_H diff --git a/LEGO1/mxpresenter.cpp b/LEGO1/mxpresenter.cpp index 4629fdba..9d8722b6 100644 --- a/LEGO1/mxpresenter.cpp +++ b/LEGO1/mxpresenter.cpp @@ -4,20 +4,21 @@ DECOMP_SIZE_ASSERT(MxPresenter, 0x40); -// OFFSET: LEGO1 0x1000bee0 STUB +// OFFSET: LEGO1 0x1000bee0 void MxPresenter::DoneTickle() { - // TODO + m_previousTickleFlags |= 1 << m_currentTickleFlag; + m_currentTickleFlag = 0; } // OFFSET: LEGO1 0x100b4d50 void MxPresenter::Init() { - m_unk0x8 = 0; + m_currentTickleFlag = 0; m_action = NULL; m_unk0x18 = 0; m_unk0x3c = 0; - m_unk0xc = 0; + m_previousTickleFlags = 0; m_unk0x10 = 0; m_unk0x14 = 0; } @@ -70,36 +71,36 @@ void MxPresenter::VTable0x14() void MxPresenter::VTable0x18() { ParseExtra(); - m_unk0xc |= 1 << (unsigned char)m_unk0x8; - m_unk0x8 = 2; + m_previousTickleFlags |= 1 << (unsigned char)m_currentTickleFlag; + m_currentTickleFlag = 2; } // OFFSET: LEGO1 0x1000be60 void MxPresenter::VTable0x1c() { - m_unk0xc |= 1 << (unsigned char)m_unk0x8; - m_unk0x8 = 3; + m_previousTickleFlags |= 1 << (unsigned char)m_currentTickleFlag; + m_currentTickleFlag = 3; } // OFFSET: LEGO1 0x1000be80 void MxPresenter::VTable0x20() { - m_unk0xc |= 1 << (unsigned char)m_unk0x8; - m_unk0x8 = 4; + m_previousTickleFlags |= 1 << (unsigned char)m_currentTickleFlag; + m_currentTickleFlag = 4; } // OFFSET: LEGO1 0x1000bea0 void MxPresenter::VTable0x24() { - m_unk0xc |= 1 << (unsigned char)m_unk0x8; - m_unk0x8 = 5; + m_previousTickleFlags |= 1 << (unsigned char)m_currentTickleFlag; + m_currentTickleFlag = 5; } // OFFSET: LEGO1 0x1000bec0 void MxPresenter::VTable0x28() { - m_unk0xc |= 1 << (unsigned char)m_unk0x8; - m_unk0x8 = 6; + m_previousTickleFlags |= 1 << (unsigned char)m_currentTickleFlag; + m_currentTickleFlag = 6; } // OFFSET: LEGO1 0x1000bf70 @@ -116,14 +117,14 @@ void MxPresenter::InitVirtual() // OFFSET: LEGO1 0x1000bf90 void MxPresenter::VTable0x44(undefined4 param) { - m_unk0xc |= 1 << (unsigned char)m_unk0x8; - m_unk0x8 = param; + m_previousTickleFlags |= 1 << (unsigned char)m_currentTickleFlag; + m_currentTickleFlag = param; } // OFFSET: LEGO1 0x1000bfb0 unsigned char MxPresenter::VTable0x48(unsigned char param) { - return m_unk0xc & (1 << param); + return m_previousTickleFlags & (1 << param); } // OFFSET: LEGO1 0x1000bfc0 diff --git a/LEGO1/mxpresenter.h b/LEGO1/mxpresenter.h index e01100c1..4bb7be10 100644 --- a/LEGO1/mxpresenter.h +++ b/LEGO1/mxpresenter.h @@ -55,8 +55,8 @@ protected: __declspec(dllexport) void Init(); public: - undefined4 m_unk0x8; - undefined4 m_unk0xc; + MxS32 m_currentTickleFlag; // 0x8 + MxU32 m_previousTickleFlags; undefined4 m_unk0x10; undefined4 m_unk0x14; undefined4 m_unk0x18;