From 80f043334638d75fe97ea5221e800891f3db139e Mon Sep 17 00:00:00 2001 From: jonschz Date: Thu, 19 Dec 2024 21:39:25 +0100 Subject: [PATCH] Improve `UnknownMx4DPointFloat::Unknown7` match, add BETA10 --- LEGO1/lego/legoomni/include/helicopter.h | 3 ++ LEGO1/mxgeometry/mxgeometry3d.h | 36 ++++++++++++++---------- reccmp-project.yml | 1 + 3 files changed, 25 insertions(+), 15 deletions(-) diff --git a/LEGO1/lego/legoomni/include/helicopter.h b/LEGO1/lego/legoomni/include/helicopter.h index 4c9b1c0e..5ab62138 100644 --- a/LEGO1/lego/legoomni/include/helicopter.h +++ b/LEGO1/lego/legoomni/include/helicopter.h @@ -48,6 +48,7 @@ class HelicopterState : public LegoState { }; // VTABLE: LEGO1 0x100d40f8 +// VTABLE: BETA10 0x101b9880 // SIZE 0x230 class Helicopter : public IslePathActor { public: @@ -55,6 +56,7 @@ class Helicopter : public IslePathActor { ~Helicopter() override; // vtable+0x00 // FUNCTION: LEGO1 0x10003070 + // FUNCTION: BETA10 0x1002b300 const char* ClassName() const override // vtable+0x0c { // STRING: LEGO1 0x100f0130 @@ -62,6 +64,7 @@ class Helicopter : public IslePathActor { } // FUNCTION: LEGO1 0x10003080 + // FUNCTION: BETA10 0x1002b330 MxBool IsA(const char* p_name) const override // vtable+0x10 { return !strcmp(p_name, Helicopter::ClassName()) || IslePathActor::IsA(p_name); diff --git a/LEGO1/mxgeometry/mxgeometry3d.h b/LEGO1/mxgeometry/mxgeometry3d.h index 1cfa82ac..fc830f47 100644 --- a/LEGO1/mxgeometry/mxgeometry3d.h +++ b/LEGO1/mxgeometry/mxgeometry3d.h @@ -115,6 +115,7 @@ class UnknownMx4DPointFloat { m_unk0x30 |= c_bit1; } + // FUNCTION: LEGO1 0x10004620 // FUNCTION: BETA10 0x1004aa30 void Unknown3(Matrix4& p_m) { @@ -141,7 +142,7 @@ class UnknownMx4DPointFloat { undefined4 GetUnknown0x30() const { return m_unk0x30; } inline int Unknown6(Matrix4& p_matrix, float p_f); - inline void Unknown7(); + inline long Unknown7(); private: inline int FUN_100040a0(Vector4& p_v, float p_f); @@ -165,22 +166,27 @@ int UnknownMx4DPointFloat::Unknown6(Matrix4& p_matrix, float p_f) } } -inline void UnknownMx4DPointFloat::Unknown7() +// FUNCTION: LEGO1 0x10004520 +inline long UnknownMx4DPointFloat::Unknown7() { - if (m_unk0x30) { - Mx4DPointFloat v1; - Mx4DPointFloat v2; - - v1 = m_unk0x00; - v1 += m_unk0x18; - - v2 = m_unk0x00; - v2 -= m_unk0x18; - - if (v1.Dot(&v1, &v1) < v2.Dot(&v2, &v2)) { - m_unk0x18 *= -1.0f; - } + if (!m_unk0x30) { + return -1; } + + Mx4DPointFloat v1; + Mx4DPointFloat v2; + + v1 = m_unk0x00; + v1 += m_unk0x18; + + v2 = m_unk0x00; + v2 -= m_unk0x18; + + if (v1.Dot(&v1, &v1) < v2.Dot(&v2, &v2)) { + m_unk0x18 *= -1.0f; + } + + return 0; } // FUNCTION: LEGO1 0x100040a0 diff --git a/reccmp-project.yml b/reccmp-project.yml index d2aaf9ba..c614cded 100644 --- a/reccmp-project.yml +++ b/reccmp-project.yml @@ -31,5 +31,6 @@ targets: - LegoWorld ignore-functions: # strcpy, strlen, ... (arguments are imported incorrectly) + - 0x100f8ad0 - 0x100fa200 - 0x100f9780