From e7777ad8dedb2fc62cf2bdc780bf17df27c47f5d Mon Sep 17 00:00:00 2001 From: Christian Semmler Date: Mon, 15 Jan 2024 14:22:34 -0500 Subject: [PATCH] Match LegoAnimPresenter::VTable0x88 --- .../lego/legoomni/include/legoanimpresenter.h | 47 ++++++++++--------- .../legoomni/src/video/legoanimpresenter.cpp | 18 ++++--- LEGO1/mxgeometry/mxgeometry3d.h | 4 -- LEGO1/omni/include/mxatomid.h | 3 +- 4 files changed, 38 insertions(+), 34 deletions(-) diff --git a/LEGO1/lego/legoomni/include/legoanimpresenter.h b/LEGO1/lego/legoomni/include/legoanimpresenter.h index 82ab17f2..79a33f7c 100644 --- a/LEGO1/lego/legoomni/include/legoanimpresenter.h +++ b/LEGO1/lego/legoomni/include/legoanimpresenter.h @@ -9,6 +9,7 @@ class LegoMemoryStream; class LegoAnimClass; // VTABLE: LEGO1 0x100d90c8 +// SIZE 0xc0 class LegoAnimPresenter : public MxVideoPresenter { public: LegoAnimPresenter(); @@ -27,15 +28,15 @@ class LegoAnimPresenter : public MxVideoPresenter { return !strcmp(p_name, LegoAnimPresenter::ClassName()) || MxVideoPresenter::IsA(p_name); } - virtual void ReadyTickle() override; // vtable+0x18 - virtual void StartingTickle() override; // vtable+0x1c - virtual void StreamingTickle() override; // vtable+0x20 - virtual void ParseExtra() override; // vtable+0x30 - virtual void Destroy() override; // vtable+0x38 - virtual MxResult StartAction(MxStreamController*, MxDSAction*) override; // vtable+0x3c - virtual void EndAction() override; // vtable+0x40 - virtual void PutFrame(); // vtable+0x6c - virtual MxS32 VTable0x88(MxStreamChunk* p_chunk); // vtable+0x88 + virtual void ReadyTickle() override; // vtable+0x18 + virtual void StartingTickle() override; // vtable+0x1c + virtual void StreamingTickle() override; // vtable+0x20 + virtual void ParseExtra() override; // vtable+0x30 + virtual void Destroy() override; // vtable+0x38 + virtual MxResult StartAction(MxStreamController* p_controller, MxDSAction* p_action) override; // vtable+0x3c + virtual void EndAction() override; // vtable+0x40 + virtual void PutFrame() override; // vtable+0x6c + virtual MxS32 VTable0x88(MxStreamChunk* p_chunk) override; // vtable+0x88 private: void Init(); @@ -58,10 +59,10 @@ class LegoAnimPresenter : public MxVideoPresenter { undefined m_unk0x96; // 0x96 undefined m_unk0x97; // 0x97 undefined4 m_unk0x98; // 0x98 - MxS16 m_unk0x9c; // 0x9f + MxS16 m_unk0x9c; // 0x9c undefined4 m_unk0xa0; // 0xa0 undefined4 m_unk0xa4; // 0xa4 - Mx3DPointFloat m_vec; // 0xa8 + Mx3DPointFloat m_unk0xa8; // 0xa8 undefined4 m_unk0xbc; // 0xbc }; @@ -69,35 +70,37 @@ class LegoAnimPresenter : public MxVideoPresenter { // LegoAnimPresenter::`scalar deleting destructor' // VTABLE: LEGO1 0x100db768 +// SIZE 0x08 class LegoAnimClassBase { public: LegoAnimClassBase(); virtual ~LegoAnimClassBase(); - virtual void VTable0x4(); - virtual void VTable0x8(); - virtual void VTable0xc(); + virtual void VTable0x4(); // vtable+0x04 + virtual void VTable0x8(); // vtable+0x08 + virtual void VTable0xc(); // vtable+0x0c - undefined4 m_unk0x4; + undefined4 m_unk0x4; // 0x04 }; // SYNTHETIC: LEGO1 0x10099de0 // LegoAnimClassBase::`scalar deleting destructor' // VTABLE: LEGO1 0x100db8d8 +// SIZE 0x18 class LegoAnimClass : public LegoAnimClassBase { public: LegoAnimClass(); virtual ~LegoAnimClass() override; - virtual void VTable0x8() override; - virtual void VTable0xc() override; - virtual MxResult VTable0x10(LegoMemoryStream* p_stream, MxS32); + virtual void VTable0x8() override; // vtable+0x08 + virtual void VTable0xc() override; // vtable+0x0c + virtual MxResult VTable0x10(LegoMemoryStream* p_stream, MxS32); // vtable+0x10 - undefined4 m_unk0x8; - undefined4 m_unk0xc; - undefined4 m_unk0x10; - undefined4 m_unk0x14; + undefined4 m_unk0x8; // 0x08 + undefined4 m_unk0xc; // 0x0c + undefined4 m_unk0x10; // 0x10 + undefined4 m_unk0x14; // 0x14 }; // SYNTHETIC: LEGO1 0x100a0ba0 diff --git a/LEGO1/lego/legoomni/src/video/legoanimpresenter.cpp b/LEGO1/lego/legoomni/src/video/legoanimpresenter.cpp index b9e39d23..2b94acbb 100644 --- a/LEGO1/lego/legoomni/src/video/legoanimpresenter.cpp +++ b/LEGO1/lego/legoomni/src/video/legoanimpresenter.cpp @@ -7,7 +7,9 @@ #include "mxdsanim.h" #include "mxstreamchunk.h" -DECOMP_SIZE_ASSERT(LegoAnimPresenter, 0xc0); +DECOMP_SIZE_ASSERT(LegoAnimPresenter, 0xc0) +DECOMP_SIZE_ASSERT(LegoAnimClassBase, 0x08) +DECOMP_SIZE_ASSERT(LegoAnimClass, 0x18) // FUNCTION: LEGO1 0x10068420 LegoAnimPresenter::LegoAnimPresenter() @@ -31,7 +33,7 @@ void LegoAnimPresenter::Init() m_unk0x70 = 0; m_unk0x78 = 0; m_unk0x7c = 0; - m_vec.Clear(); + m_unk0xa8.Clear(); m_unk0xa4 = 0; m_currentWorld = NULL; m_unk0x95 = 0; @@ -58,19 +60,21 @@ MxS32 LegoAnimPresenter::VTable0x88(MxStreamChunk* p_chunk) { MxS32 result = FAILURE; LegoMemoryStream stream((char*) p_chunk->GetData()); + MxS32 magicSig; - MxS32 val3; MxS32 val2 = 0; + MxS32 val3; + if (stream.Read(&magicSig, sizeof(MxS32)) == SUCCESS && magicSig == 0x11) { if (stream.Read(&m_unk0xa4, sizeof(MxU32)) == SUCCESS) { - if (stream.Read(m_vec.GetX(), sizeof(float)) == SUCCESS) { - if (stream.Read(m_vec.GetY(), sizeof(float)) == SUCCESS) { - if (stream.Read(m_vec.GetZ(), sizeof(float)) == SUCCESS) { + if (stream.Read(&m_unk0xa8[0], sizeof(float)) == SUCCESS) { + if (stream.Read(&m_unk0xa8[1], sizeof(float)) == SUCCESS) { + if (stream.Read(&m_unk0xa8[2], sizeof(float)) == SUCCESS) { if (stream.Read(&val2, sizeof(MxS32)) == SUCCESS) { if (stream.Read(&val3, sizeof(MxS32)) == SUCCESS) { m_unk0x64 = new LegoAnimClass(); if (m_unk0x64) { - if (m_unk0x64->VTable0x10(&stream, val3) == SUCCESS) { + if (m_unk0x64->VTable0x10(&stream, val2) == SUCCESS) { result = SUCCESS; } } diff --git a/LEGO1/mxgeometry/mxgeometry3d.h b/LEGO1/mxgeometry/mxgeometry3d.h index 6cf5fa55..13781722 100644 --- a/LEGO1/mxgeometry/mxgeometry3d.h +++ b/LEGO1/mxgeometry/mxgeometry3d.h @@ -31,10 +31,6 @@ class Mx3DPointFloat : public Vector3 { inline void EqualsCross(Mx3DPointFloat& p_a, Mx3DPointFloat& p_b) { EqualsCrossImpl(p_a.m_data, p_b.m_data); } - inline float* GetX() { return &m_elements[0]; } - inline float* GetY() { return &m_elements[1]; } - inline float* GetZ() { return &m_elements[2]; } - private: float m_elements[3]; }; diff --git a/LEGO1/omni/include/mxatomid.h b/LEGO1/omni/include/mxatomid.h index 3abe6479..0573cc84 100644 --- a/LEGO1/omni/include/mxatomid.h +++ b/LEGO1/omni/include/mxatomid.h @@ -11,6 +11,7 @@ enum LookupMode { LookupMode_LowerCase2 = 3 }; +// SIZE 0x04 class MxAtomId { public: __declspec(dllexport) MxAtomId(const char*, LookupMode); @@ -30,7 +31,7 @@ class MxAtomId { MxAtomIdCounter* GetCounter(const char*, LookupMode); void Destroy(); - const char* m_internal; + const char* m_internal; // 0x00 }; #endif // MXATOMID_H