From 24e889ee3d2a9bfdc72af4822217bd2a94395bad Mon Sep 17 00:00:00 2001 From: Misha <106913236+MishaProductions@users.noreply.github.com> Date: Thu, 2 Nov 2023 06:54:08 -0400 Subject: [PATCH] some LegoEntityPresenter & LegoWorldPresenter functions (#260) * LegoEntityPresenter & LegoWorldPresenter * format fix * Fixes * Add size assert --------- Co-authored-by: Christian Semmler --- LEGO1/legoentitypresenter.cpp | 44 +++++++++++++++++++++++++++------- LEGO1/legoentitypresenter.h | 9 ++++++- LEGO1/legoworldpresenter.cpp | 13 ++++++---- LEGO1/legoworldpresenter.h | 3 +++ LEGO1/mxcompositepresenter.cpp | 24 +++++++++++++++++++ LEGO1/mxcompositepresenter.h | 6 +++++ LEGO1/mxpresenter.h | 1 + 7 files changed, 86 insertions(+), 14 deletions(-) diff --git a/LEGO1/legoentitypresenter.cpp b/LEGO1/legoentitypresenter.cpp index a8d4bc8b..f3ac23c5 100644 --- a/LEGO1/legoentitypresenter.cpp +++ b/LEGO1/legoentitypresenter.cpp @@ -1,19 +1,47 @@ #include "legoentitypresenter.h" +#include "legoomni.h" +#include "legovideomanager.h" + +DECOMP_SIZE_ASSERT(LegoEntityPresenter, 0x50); + // OFFSET: LEGO1 0x10053440 LegoEntityPresenter::LegoEntityPresenter() { Init(); } -// OFFSET: LEGO1 0x100535d0 STUB -LegoEntityPresenter::~LegoEntityPresenter() -{ - // TODO -} - -// OFFSET: LEGO1 0x100535c0 STUB +// OFFSET: LEGO1 0x100535c0 void LegoEntityPresenter::Init() { - // TODO + m_unk4c = 0; +} + +// OFFSET: LEGO1 0x100535d0 +LegoEntityPresenter::~LegoEntityPresenter() +{ + Destroy(TRUE); +} + +// OFFSET: LEGO1 0x10053630 +undefined4 LegoEntityPresenter::vtable6c(undefined4 p_unknown) +{ + m_unk4c = p_unknown; + return 0; +} + +// OFFSET: LEGO1 0x10053640 +void LegoEntityPresenter::Destroy(MxBool p_fromDestructor) +{ + if (VideoManager()) { + VideoManager()->RemovePresenter(*this); + } + + Init(); +} + +// OFFSET: LEGO1 0x10053670 +void LegoEntityPresenter::Destroy() +{ + Destroy(FALSE); } diff --git a/LEGO1/legoentitypresenter.h b/LEGO1/legoentitypresenter.h index 30360919..2ee9f701 100644 --- a/LEGO1/legoentitypresenter.h +++ b/LEGO1/legoentitypresenter.h @@ -4,6 +4,7 @@ #include "mxcompositepresenter.h" // VTABLE 0x100d8398 +// SIZE 0x50 class LegoEntityPresenter : public MxCompositePresenter { public: LegoEntityPresenter(); @@ -22,8 +23,14 @@ public: return !strcmp(name, LegoEntityPresenter::ClassName()) || MxCompositePresenter::IsA(name); } + virtual void Destroy() override; // vtable+0x38 + virtual void Init(); // vtable+0x68 + virtual undefined4 vtable6c(undefined4 p_unknown); // vtable+0x6c + private: - void Init(); + void Destroy(MxBool p_fromDestructor); + + undefined4 m_unk4c; }; #endif // LEGOENTITYPRESENTER_H diff --git a/LEGO1/legoworldpresenter.cpp b/LEGO1/legoworldpresenter.cpp index 44e8022d..1e1d7558 100644 --- a/LEGO1/legoworldpresenter.cpp +++ b/LEGO1/legoworldpresenter.cpp @@ -1,9 +1,12 @@ #include "legoworldpresenter.h" -// OFFSET: LEGO1 0x100665c0 STUB +// 0x100f75d4 +undefined4 g_LegoWorldPresenterQuality = 1; + +// OFFSET: LEGO1 0x100665c0 LegoWorldPresenter::LegoWorldPresenter() { - // TODO + m_unk50 = 50000; } // OFFSET: LEGO1 0x10066770 STUB @@ -12,8 +15,8 @@ LegoWorldPresenter::~LegoWorldPresenter() // TODO } -// OFFSET: LEGO1 0x100665b0 STUB -void LegoWorldPresenter::configureLegoWorldPresenter(int param_1) +// OFFSET: LEGO1 0x100665b0 +void LegoWorldPresenter::configureLegoWorldPresenter(int p_quality) { - // TODO + g_LegoWorldPresenterQuality = p_quality; } diff --git a/LEGO1/legoworldpresenter.h b/LEGO1/legoworldpresenter.h index 284c0437..da9b0e2d 100644 --- a/LEGO1/legoworldpresenter.h +++ b/LEGO1/legoworldpresenter.h @@ -24,6 +24,9 @@ public: { return !strcmp(name, LegoWorldPresenter::ClassName()) || LegoEntityPresenter::IsA(name); } + +private: + undefined4 m_unk50; }; #endif // LEGOWORLDPRESENTER_H diff --git a/LEGO1/mxcompositepresenter.cpp b/LEGO1/mxcompositepresenter.cpp index 219b140c..b6a38fa7 100644 --- a/LEGO1/mxcompositepresenter.cpp +++ b/LEGO1/mxcompositepresenter.cpp @@ -16,3 +16,27 @@ MxCompositePresenter::~MxCompositePresenter() { NotificationManager()->Unregister(this); } + +// OFFSET: LEGO1 0x100b67f0 STUB +void MxCompositePresenter::VTable0x58() +{ + // TODO +} + +// OFFSET: LEGO1 0x100b69b0 STUB +void MxCompositePresenter::VTable0x5c() +{ + // TODO +} + +// OFFSET: LEGO1 0x100b6b40 STUB +void MxCompositePresenter::VTable0x60() +{ + // TODO +} + +// OFFSET: LEGO1 0x1000caf0 STUB +void MxCompositePresenter::VTable0x64() +{ + // TODO +} diff --git a/LEGO1/mxcompositepresenter.h b/LEGO1/mxcompositepresenter.h index f7fbd1cf..c41f4a0c 100644 --- a/LEGO1/mxcompositepresenter.h +++ b/LEGO1/mxcompositepresenter.h @@ -24,6 +24,12 @@ public: return !strcmp(name, MxCompositePresenter::ClassName()) || MxPresenter::IsA(name); } + virtual void VTable0x58(); + virtual void VTable0x5c(); + virtual void VTable0x60(); + virtual void VTable0x64(); + +private: MxUnkList m_list; }; diff --git a/LEGO1/mxpresenter.h b/LEGO1/mxpresenter.h index ce61fa7e..9427e79d 100644 --- a/LEGO1/mxpresenter.h +++ b/LEGO1/mxpresenter.h @@ -11,6 +11,7 @@ class MxStreamController; // VTABLE 0x100d4d38 +// SIZE 0x40 class MxPresenter : public MxCore { public: enum TickleState {