From 4e9dbfe3317658828bdffa7b8b07618180f0bd49 Mon Sep 17 00:00:00 2001 From: Ramen2X Date: Tue, 26 Mar 2024 18:25:41 -0400 Subject: [PATCH] implement HospitalState::VTable0x1c() (#734) --- .../legoomni/src/hospital/hospitalstate.cpp | 48 +++++++++++++++---- 1 file changed, 39 insertions(+), 9 deletions(-) diff --git a/LEGO1/lego/legoomni/src/hospital/hospitalstate.cpp b/LEGO1/lego/legoomni/src/hospital/hospitalstate.cpp index 326415d1..42f57fdb 100644 --- a/LEGO1/lego/legoomni/src/hospital/hospitalstate.cpp +++ b/LEGO1/lego/legoomni/src/hospital/hospitalstate.cpp @@ -5,17 +5,47 @@ DECOMP_SIZE_ASSERT(HospitalState, 0x18) // FUNCTION: LEGO1 0x10076370 HospitalState::HospitalState() { - this->m_unk0x0c = 0; - this->m_unk0x0e = 0; - this->m_unk0x10 = 0; - this->m_unk0x12 = 0; - this->m_unk0x14 = 0; - this->m_unk0x16 = 0; + m_unk0x0c = 0; + m_unk0x0e = 0; + m_unk0x10 = 0; + m_unk0x12 = 0; + m_unk0x14 = 0; + m_unk0x16 = 0; } -// STUB: LEGO1 0x10076530 +// FUNCTION: LEGO1 0x10076530 MxResult HospitalState::VTable0x1c(LegoFile* p_legoFile) { - // TODO - return 0; + if (p_legoFile->IsWriteMode()) { + p_legoFile->FUN_10006030(ClassName()); + } + + if (p_legoFile->IsWriteMode()) { + // A write variable needs to be used here, otherwise + // the compiler aggresively optimizes the function + MxS16 write; + + write = m_unk0x0c; + p_legoFile->Write(&write, sizeof(m_unk0x0c)); + write = m_unk0x0e; + p_legoFile->Write(&write, sizeof(m_unk0x0e)); + write = m_unk0x10; + p_legoFile->Write(&write, sizeof(m_unk0x10)); + write = m_unk0x12; + p_legoFile->Write(&write, sizeof(m_unk0x12)); + write = m_unk0x14; + p_legoFile->Write(&write, sizeof(m_unk0x14)); + write = m_unk0x16; + p_legoFile->Write(&write, sizeof(m_unk0x16)); + } + else if (p_legoFile->IsReadMode()) { + p_legoFile->Read(&m_unk0x0c, sizeof(m_unk0x0c)); + p_legoFile->Read(&m_unk0x0e, sizeof(m_unk0x0e)); + p_legoFile->Read(&m_unk0x10, sizeof(m_unk0x10)); + p_legoFile->Read(&m_unk0x12, sizeof(m_unk0x12)); + p_legoFile->Read(&m_unk0x14, sizeof(m_unk0x14)); + p_legoFile->Read(&m_unk0x16, sizeof(m_unk0x16)); + } + + return SUCCESS; }