From 98c74c972e999000340c7953cdd1ef68949be6d2 Mon Sep 17 00:00:00 2001 From: Christian Semmler Date: Mon, 15 Jan 2024 10:13:33 -0500 Subject: [PATCH] Match functions --- .../legoomni/include/legometerpresenter.h | 9 +++-- .../legoomni/src/video/legometerpresenter.cpp | 38 ++++++++++--------- 2 files changed, 27 insertions(+), 20 deletions(-) diff --git a/LEGO1/lego/legoomni/include/legometerpresenter.h b/LEGO1/lego/legoomni/include/legometerpresenter.h index 81f25bad..33c7aa37 100644 --- a/LEGO1/lego/legoomni/include/legometerpresenter.h +++ b/LEGO1/lego/legoomni/include/legometerpresenter.h @@ -8,7 +8,7 @@ class LegoMeterPresenter : public MxStillPresenter { public: LegoMeterPresenter(); - virtual ~LegoMeterPresenter(); + virtual ~LegoMeterPresenter() override; // MxStillPresenter's `::ClassName` and `::IsA` are used. @@ -17,6 +17,8 @@ class LegoMeterPresenter : public MxStillPresenter { virtual void ParseExtra() override; // vtable+0x30 private: + void FUN_10043a50(); + MxU8* m_unk0x6c; // 0x6c MxU16 m_type; // 0x70 MxString m_variable; // 0x74 @@ -26,8 +28,9 @@ class LegoMeterPresenter : public MxStillPresenter { MxU16 m_unk0x8c; // 0x8c MxU16 m_unk0x8e; // 0x8e MxU16 m_layout; // 0x90 - - void FUN_10043a50(); }; +// SYNTHETIC: LEGO1 0x10043760 +// LegoMeterPresenter::`scalar deleting destructor' + #endif // LEGOMETERPRESENTER_H diff --git a/LEGO1/lego/legoomni/src/video/legometerpresenter.cpp b/LEGO1/lego/legoomni/src/video/legometerpresenter.cpp index f0f36264..db8c6055 100644 --- a/LEGO1/lego/legoomni/src/video/legometerpresenter.cpp +++ b/LEGO1/lego/legoomni/src/video/legometerpresenter.cpp @@ -4,6 +4,8 @@ #include "mxbitmap.h" #include "mxutil.h" +DECOMP_SIZE_ASSERT(LegoMeterPresenter, 0x94) + // GLOBAL: LEGO1 0x1010207c const char* g_filterIndex = "FILTER_INDEX"; @@ -25,18 +27,16 @@ const char* g_topToBottom = "TOP_TO_BOTTOM"; // GLOBAL: LEGO1 0x101020c8 const char* g_variable = "VARIABLE"; -// Uncomment when member class variables are fleshed out. -DECOMP_SIZE_ASSERT(LegoMeterPresenter, 0x94); // 0x1000a163 - // FUNCTION: LEGO1 0x10043430 LegoMeterPresenter::LegoMeterPresenter() { m_layout = 0; - m_flags &= ~Flag_Bit2; - m_type = 1; m_unk0x6c = 0; m_unk0x84 = 0; + m_type = 1; + m_flags &= ~Flag_Bit2; } + // FUNCTION: LEGO1 0x10043780 LegoMeterPresenter::~LegoMeterPresenter() { @@ -46,26 +46,29 @@ LegoMeterPresenter::~LegoMeterPresenter() // FUNCTION: LEGO1 0x10043800 void LegoMeterPresenter::ParseExtra() { + char buffer[256]; + MxStillPresenter::ParseExtra(); + *((MxU16*) &buffer[0]) = m_action->GetExtraLength(); + char* extraData = m_action->GetExtraData(); + + if (*((MxU16*) &buffer[0])) { + MxU16 len = *((MxU16*) &buffer[0]); + memcpy(buffer, extraData, len); + buffer[len] = '\0'; - if (m_action->GetExtraLength()) { - char buffer[256]; char result[256]; - *((MxU16*) &result[0]) = m_action->GetExtraLength(); - - memcpy(buffer, m_action->GetExtraData(), *((MxU16*) &result[0])); - if (KeyValueStringParse(buffer, g_type, result)) { - if (!strcmp(result, g_leftToRight)) { + if (!strcmpi(result, g_leftToRight)) { m_layout = 0; } - else if (!strcmp(result, g_rightToLeft)) { + else if (!strcmpi(result, g_rightToLeft)) { m_layout = 1; } - else if (!strcmp(result, g_bottomToTop)) { + else if (!strcmpi(result, g_bottomToTop)) { m_layout = 2; } - else if (!strcmp(result, g_topToBottom)) { + else if (!strcmpi(result, g_topToBottom)) { m_layout = 3; } } @@ -90,12 +93,13 @@ void LegoMeterPresenter::ParseExtra() void LegoMeterPresenter::StreamingTickle() { MxStillPresenter::StreamingTickle(); - m_unk0x6c = new MxU8[((m_bitmap->GetBmiWidth() + 3) & -4) * m_bitmap->GetBmiHeightAbs()]; + m_unk0x6c = new MxU8[m_bitmap->GetBmiStride() * m_bitmap->GetBmiHeightAbs()]; if (m_unk0x6c == NULL) { EndAction(); } - memcpy(m_unk0x6c, m_bitmap->GetBitmapData(), ((m_bitmap->GetBmiWidth() + 3) & -4) * m_bitmap->GetBmiHeightAbs()); + memcpy(m_unk0x6c, m_bitmap->GetBitmapData(), m_bitmap->GetBmiStride() * m_bitmap->GetBmiHeightAbs()); + m_unk0x88 = 0; m_unk0x8a = 0; m_unk0x8c = m_bitmap->GetBmiWidth() - 1;