From 6baeffef445673f68918f37dbcad89d794251a0a Mon Sep 17 00:00:00 2001 From: Ramen2X Date: Fri, 15 Mar 2024 18:50:43 -0400 Subject: [PATCH] implement/match Hospital::Tickle() --- LEGO1/lego/legoomni/include/hospital.h | 5 +-- LEGO1/lego/legoomni/src/worlds/hospital.cpp | 35 +++++++++++++++++++-- 2 files changed, 36 insertions(+), 4 deletions(-) diff --git a/LEGO1/lego/legoomni/include/hospital.h b/LEGO1/lego/legoomni/include/hospital.h index 2b6fde1e..7717bf6d 100644 --- a/LEGO1/lego/legoomni/include/hospital.h +++ b/LEGO1/lego/legoomni/include/hospital.h @@ -5,6 +5,7 @@ #include "hospitalstate.h" #include "legogamestate.h" #include "legoworld.h" +#include "mxstillpresenter.h" #include "radio.h" // VTABLE: LEGO1 0x100d9730 @@ -51,8 +52,8 @@ class Hospital : public LegoWorld { HospitalState* m_hospitalState; // 0x104 undefined2 m_unk0x108; // 0x108 undefined4 m_unk0x10c; // 0x10c - undefined4 m_unk0x110; // 0x110 - undefined4 m_unk0x114; // 0x114 + MxStillPresenter* m_unk0x110; // 0x110 + MxStillPresenter* m_unk0x114; // 0x114 undefined m_unk0x118; // 0x118 undefined4 m_unk0x11c; // 0x11c undefined4 m_unk0x120; // 0x120 diff --git a/LEGO1/lego/legoomni/src/worlds/hospital.cpp b/LEGO1/lego/legoomni/src/worlds/hospital.cpp index 36e4add0..fd7d0cf9 100644 --- a/LEGO1/lego/legoomni/src/worlds/hospital.cpp +++ b/LEGO1/lego/legoomni/src/worlds/hospital.cpp @@ -7,12 +7,19 @@ #include "mxmisc.h" #include "mxnotificationmanager.h" #include "mxticklemanager.h" +#include "mxtimer.h" DECOMP_SIZE_ASSERT(Hospital, 0x12c) // GLOBAL: LEGO1 0x100f7918 undefined4 g_unk0x100f7918 = 3; +// GLOBAL: LEGO1 0x100f791c +undefined g_unk0x100f791c = 0; + +// GLOBAL: LEGO1 0x100f7920 +undefined g_unk0x100f7920 = 0; + // FUNCTION: LEGO1 0x100745e0 Hospital::Hospital() { @@ -167,10 +174,34 @@ void Hospital::Enable(MxBool p_enable) } } -// STUB: LEGO1 0x10076270 +// FUNCTION: LEGO1 0x10076270 MxResult Hospital::Tickle() { - // TODO + if (!m_worldStarted) { + LegoWorld::Tickle(); + return SUCCESS; + } + else { + if (g_unk0x100f7918 != 0) { + g_unk0x100f7918 -= 1; + } + + MxLong time = Timer()->GetTime(); + + if (m_unk0x118 != 0) { + if (300 < (MxLong)(time - m_unk0x11c)) { + m_unk0x11c = time; + g_unk0x100f791c = !g_unk0x100f791c; + m_unk0x110->Enable(g_unk0x100f791c); + } + + if (200 < (MxLong)(time - m_unk0x120)) { + m_unk0x120 = time; + g_unk0x100f7920 = !g_unk0x100f7920; + m_unk0x114->Enable(g_unk0x100f7920); + } + } + } return SUCCESS; }