From 32bc6c426433e078e4ab00cafb9b9910c89e3ccb Mon Sep 17 00:00:00 2001 From: Nathan M Gilbert Date: Tue, 26 Mar 2024 19:24:01 -0400 Subject: [PATCH] Implement ExtraActor vftable and passthrough methods (#735) * Implement ExtraActor vftable and passthrough methods * Remove unused param names --- LEGO1/lego/legoomni/include/legoanimactor.h | 2 +- .../lego/legoomni/include/legocarraceactor.h | 1 - LEGO1/lego/legoomni/include/legoextraactor.h | 30 ++++++--- LEGO1/lego/legoomni/include/legopathactor.h | 10 +-- LEGO1/lego/legoomni/include/legoraceactor.h | 13 ++-- .../legoomni/src/entity/legocarraceactor.cpp | 6 -- .../legoomni/src/paths/legoextraactor.cpp | 67 +++++++++++++++++++ .../lego/legoomni/src/paths/legopathactor.cpp | 2 +- .../lego/legoomni/src/race/legoraceactor.cpp | 8 +-- 9 files changed, 103 insertions(+), 36 deletions(-) diff --git a/LEGO1/lego/legoomni/include/legoanimactor.h b/LEGO1/lego/legoomni/include/legoanimactor.h index eb96d632..9219a063 100644 --- a/LEGO1/lego/legoomni/include/legoanimactor.h +++ b/LEGO1/lego/legoomni/include/legoanimactor.h @@ -53,7 +53,7 @@ class LegoAnimActor : public virtual LegoPathActor { // SYNTHETIC: LEGO1 0x1000fb60 // LegoAnimActor::`scalar deleting destructor' -private: +protected: vector m_animMaps; // 0x08 MxS16 m_curAnim; // 0x18 }; diff --git a/LEGO1/lego/legoomni/include/legocarraceactor.h b/LEGO1/lego/legoomni/include/legocarraceactor.h index 3d78db17..aff84b8e 100644 --- a/LEGO1/lego/legoomni/include/legocarraceactor.h +++ b/LEGO1/lego/legoomni/include/legocarraceactor.h @@ -27,7 +27,6 @@ class LegoCarRaceActor : public virtual LegoRaceActor { return !strcmp(p_name, LegoCarRaceActor::ClassName()) || LegoRaceActor::IsA(p_name); } - void VTable0x68() override; // vtable+0x68 void VTable0x6c() override; // vtable+0x6c void VTable0x70(float p_float) override; // vtable+0x70 MxS32 VTable0x90() override; // vtable+0x90 diff --git a/LEGO1/lego/legoomni/include/legoextraactor.h b/LEGO1/lego/legoomni/include/legoextraactor.h index 0aaf58f2..407676b7 100644 --- a/LEGO1/lego/legoomni/include/legoextraactor.h +++ b/LEGO1/lego/legoomni/include/legoextraactor.h @@ -3,38 +3,52 @@ #include "legoanimactor.h" -/* - VTABLE: LEGO1 0x100d6c00 LegoAnimActor - VTABLE: LEGO1 0x100d6c10 LegoPathActor - VTABLE: LEGO1 0x100d6cdc LegoExtraActor -*/ +// VTABLE: LEGO1 0x100d6c00 LegoAnimActor +// VTABLE: LEGO1 0x100d6c10 LegoPathActor +// VTABLE: LEGO1 0x100d6cdc LegoExtraActor // SIZE 0x1dc class LegoExtraActor : public virtual LegoAnimActor { public: LegoExtraActor(); + ~LegoExtraActor() override; - // FUNCTION: LEGO1 0x1002b7a0 + // FUNCTION: LEGO1 0x1002b7b0 inline const char* ClassName() const override // vtable+0x0c { // STRING: LEGO1 0x100f3204 return "LegoExtraActor"; } - // FUNCTION: LEGO1 0x1002b7c0 + // FUNCTION: LEGO1 0x1002b7d0 inline MxBool IsA(const char* p_name) const override // vtable+0x10 { return !strcmp(p_name, LegoExtraActor::ClassName()) || LegoAnimActor::IsA(p_name); } + void SetWorldSpeed(MxFloat p_worldSpeed) override; // vtable+0x30 + void VTable0x68(Mx3DPointFloat& p_point1, Mx3DPointFloat& p_point2, Mx3DPointFloat& p_point3) + override; // vtable+0x68 + void VTable0x6c() override; // vtable+0x6c + void VTable0x70(float) override; // vtable+0x70 + void VTable0x74(Matrix4& p_transform) override; // vtable+0x74 + MxS32 VTable0x90() override; // vtable+0x90 + MxS32 VTable0x94() override; // vtable+0x94 + void VTable0x9c() override; // vtable+0x9c + void VTable0xa4() override; // vtable+0xa4 + void VTable0xc4() override; // vtable+0xc4 + virtual MxResult FUN_1002aae0(); + // SYNTHETIC: LEGO1 0x1002b760 + // LegoExtraActor::`scalar deleting destructor' + private: undefined4 m_unk0x08; // 0x08 undefined m_unk0x0c; // 0x0c undefined m_unk0x0d; // 0x0d undefined m_unk0x0e; // 0x0e undefined4 m_unk0x10; // 0x10 - undefined m_unk0x14; // 0x14 + MxU8 m_unk0x14; // 0x14 MxMatrix m_unk0x18; // 0x18 undefined4 m_unk0x60; // 0x60 undefined4 m_unk0x64; // 0x64 diff --git a/LEGO1/lego/legoomni/include/legopathactor.h b/LEGO1/lego/legoomni/include/legopathactor.h index adff5952..a45b93e7 100644 --- a/LEGO1/lego/legoomni/include/legopathactor.h +++ b/LEGO1/lego/legoomni/include/legopathactor.h @@ -28,11 +28,11 @@ class LegoPathActor : public LegoActor { return !strcmp(p_name, LegoPathActor::ClassName()) || LegoActor::IsA(p_name); } - void ParseAction(char*) override; // vtable+0x20 - virtual void VTable0x68(); // vtable+0x68 - virtual void VTable0x6c(); // vtable+0x6c - virtual void VTable0x70(float p_float); // vtable+0x70 - virtual void VTable0x74(Matrix4& p_transform); // vtable+0x74 + void ParseAction(char*) override; // vtable+0x20 + virtual void VTable0x68(Mx3DPointFloat&, Mx3DPointFloat&, Mx3DPointFloat&); // vtable+0x68 + virtual void VTable0x6c(); // vtable+0x6c + virtual void VTable0x70(float p_float); // vtable+0x70 + virtual void VTable0x74(Matrix4& p_transform); // vtable+0x74 // FUNCTION: LEGO1 0x10002d20 virtual void SetUserNavFlag(MxBool p_userNavFlag) { m_userNavFlag = p_userNavFlag; } // vtable+0x78 diff --git a/LEGO1/lego/legoomni/include/legoraceactor.h b/LEGO1/lego/legoomni/include/legoraceactor.h index d43a6799..65453d10 100644 --- a/LEGO1/lego/legoomni/include/legoraceactor.h +++ b/LEGO1/lego/legoomni/include/legoraceactor.h @@ -27,13 +27,12 @@ class LegoRaceActor : public virtual LegoAnimActor { return !strcmp(p_name, LegoRaceActor::ClassName()) || LegoAnimActor::IsA(p_name); } - void ParseAction(char*) override; // vtable+0x20 - void SetWorldSpeed(MxFloat p_worldSpeed) override; // vtable+0x30 - void VTable0x68() override; // vtable+0x68 - void VTable0x70(float p_float) override; // vtable+0x70 - void VTable0x74(Matrix4& p_transform) override; // vtable+0x74 - MxS32 VTable0x90() override; // vtable+0x90 - MxS32 VTable0x94() override; // vtable+0x94 + void SetWorldSpeed(MxFloat p_worldSpeed) override; // vtable+0x30 + void VTable0x68(Mx3DPointFloat&, Mx3DPointFloat&, Mx3DPointFloat&) override; // vtable+0x68 + void VTable0x70(float p_float) override; // vtable+0x70 + void VTable0x74(Matrix4& p_transform) override; // vtable+0x74 + MxS32 VTable0x90() override; // vtable+0x90 + MxS32 VTable0x94() override; // vtable+0x94 // FUNCTION: LEGO1 0x10014aa0 virtual MxResult FUN_10014aa0() { return SUCCESS; } diff --git a/LEGO1/lego/legoomni/src/entity/legocarraceactor.cpp b/LEGO1/lego/legoomni/src/entity/legocarraceactor.cpp index d58f796b..8c2eb822 100644 --- a/LEGO1/lego/legoomni/src/entity/legocarraceactor.cpp +++ b/LEGO1/lego/legoomni/src/entity/legocarraceactor.cpp @@ -9,12 +9,6 @@ DECOMP_SIZE_ASSERT(LegoCarRaceActor, 0x1a0) // STRING: LEGO1 0x100f7ae4 const char* g_fuel = "FUEL"; -// STUB: LEGO1 0x10014130 -void LegoCarRaceActor::VTable0x68() -{ - // TODO -} - // STUB: LEGO1 0x100141a0 MxS32 LegoCarRaceActor::VTable0x90() { diff --git a/LEGO1/lego/legoomni/src/paths/legoextraactor.cpp b/LEGO1/lego/legoomni/src/paths/legoextraactor.cpp index 677f95c9..fa451bc4 100644 --- a/LEGO1/lego/legoomni/src/paths/legoextraactor.cpp +++ b/LEGO1/lego/legoomni/src/paths/legoextraactor.cpp @@ -7,6 +7,22 @@ LegoExtraActor::LegoExtraActor() { } +// STUB: LEGO1 0x1002a6b0 +LegoExtraActor::~LegoExtraActor() +{ +} + +// STUB: LEGO1 0x1002a720 +MxS32 LegoExtraActor::VTable0x90() +{ + return 0; +} + +// STUB: LEGO1 0x1002aa90 +void LegoExtraActor::VTable0xa4() +{ +} + // STUB: LEGO1 0x1002aae0 MxResult LegoExtraActor::FUN_1002aae0() { @@ -14,3 +30,54 @@ MxResult LegoExtraActor::FUN_1002aae0() VTable0x9c(); return SUCCESS; } + +// STUB: LEGO1 0x1002aba0 +MxS32 LegoExtraActor::VTable0x94() +{ + return 0; +} + +// STUB: LEGO1 0x1002b290 +void LegoExtraActor::VTable0x9c() +{ + // TODO +} + +// STUB: LEGO1 0x1002b440 +void LegoExtraActor::VTable0x70(float) +{ + // TODO +} + +// FUNCTION: LEGO1 0x1002b5d0 +void LegoExtraActor::VTable0x74(Matrix4& p_transform) +{ + if (m_unk0x14 == 0) { + LegoAnimActor::VTable0x74(p_transform); + } +} + +// FUNCTION: LEGO1 0x1002b5f0 +void LegoExtraActor::SetWorldSpeed(MxFloat p_worldSpeed) +{ + if (m_curAnim == 0 && p_worldSpeed > 0) { + VTable0xc4(); + } + LegoAnimActor::SetWorldSpeed(p_worldSpeed); +} + +// STUB: LEGO1 0x1002b630 +void LegoExtraActor::VTable0xc4() +{ +} + +// FUNCTION: LEGO1 0x1002b6f0 +void LegoExtraActor::VTable0x68(Mx3DPointFloat& p_point1, Mx3DPointFloat& p_point2, Mx3DPointFloat& p_point3) +{ + LegoPathActor::VTable0x68(p_point1, p_point2, p_point3); +} + +// STUB: LEGO1 0x1002b980 +void LegoExtraActor::VTable0x6c() +{ +} diff --git a/LEGO1/lego/legoomni/src/paths/legopathactor.cpp b/LEGO1/lego/legoomni/src/paths/legopathactor.cpp index b3174f83..f8b8d297 100644 --- a/LEGO1/lego/legoomni/src/paths/legopathactor.cpp +++ b/LEGO1/lego/legoomni/src/paths/legopathactor.cpp @@ -63,7 +63,7 @@ void LegoPathActor::VTable0x6c() } // STUB: LEGO1 0x1002ebe0 -void LegoPathActor::VTable0x68() +void LegoPathActor::VTable0x68(Mx3DPointFloat&, Mx3DPointFloat&, Mx3DPointFloat&) { // TODO } diff --git a/LEGO1/lego/legoomni/src/race/legoraceactor.cpp b/LEGO1/lego/legoomni/src/race/legoraceactor.cpp index b8259711..6221693d 100644 --- a/LEGO1/lego/legoomni/src/race/legoraceactor.cpp +++ b/LEGO1/lego/legoomni/src/race/legoraceactor.cpp @@ -15,12 +15,6 @@ LegoRaceActor::LegoRaceActor() m_unk0x08 = 0; } -// STUB: LEGO1 0x10014ca0 -void LegoRaceActor::ParseAction(char*) -{ - // TODO -} - // STUB: LEGO1 0x10014cb0 void LegoRaceActor::SetWorldSpeed(MxFloat p_worldSpeed) { @@ -28,7 +22,7 @@ void LegoRaceActor::SetWorldSpeed(MxFloat p_worldSpeed) } // STUB: LEGO1 0x10014cc0 -void LegoRaceActor::VTable0x68() +void LegoRaceActor::VTable0x68(Mx3DPointFloat&, Mx3DPointFloat&, Mx3DPointFloat&) { // TODO }