diff --git a/LEGO1/lego/legoomni/include/legoextraactor.h b/LEGO1/lego/legoomni/include/legoextraactor.h index 2b2612a6..be929f92 100644 --- a/LEGO1/lego/legoomni/include/legoextraactor.h +++ b/LEGO1/lego/legoomni/include/legoextraactor.h @@ -41,7 +41,7 @@ class LegoExtraActor : public virtual LegoAnimActor { MxU32 VTable0x90(float p_float, Matrix4& p_matrix) override; // vtable+0x90 MxS32 VTable0x94() override; // vtable+0x94 void VTable0x9c() override; // vtable+0x9c - void VTable0xa4() override; // vtable+0xa4 + void VTable0xa4(MxU8& p_und1, MxS32& p_und2) override; // vtable+0xa4 void VTable0xc4() override; // vtable+0xc4 virtual MxResult FUN_1002aae0(); diff --git a/LEGO1/lego/legoomni/include/legopathactor.h b/LEGO1/lego/legoomni/include/legopathactor.h index 8cdf5b00..2c22df81 100644 --- a/LEGO1/lego/legoomni/include/legopathactor.h +++ b/LEGO1/lego/legoomni/include/legopathactor.h @@ -57,8 +57,8 @@ class LegoPathActor : public LegoActor { // FUNCTION: LEGO1 0x10002d60 virtual MxS32 VTable0xa0() { return 0; } // vtable+0xa0 - virtual void VTable0xa4(); // vtable+0xa4 - virtual void VTable0xa8(); // vtable+0xa8 + virtual void VTable0xa4(MxU8&, MxS32&); // vtable+0xa4 + virtual void VTable0xa8(); // vtable+0xa8 // FUNCTION: LEGO1 0x10002d70 virtual void VTable0xac(MxFloat p_unk0x13c) { m_unk0x13c = p_unk0x13c; } // vtable+0xac @@ -104,7 +104,7 @@ class LegoPathActor : public LegoActor { MxFloat m_unk0xa0; // 0xa0 undefined m_unk0xa4[0x38]; // 0xa4 MxU32 m_unk0xdc; // 0xdc - undefined4 m_destEdge; // 0xe0 + Edge* m_destEdge; // 0xe0 undefined4 m_unk0xe4; // 0xe4 undefined2 m_unk0xe8; // 0xe8 MxBool m_userNavFlag; // 0xea diff --git a/LEGO1/lego/legoomni/src/paths/legoextraactor.cpp b/LEGO1/lego/legoomni/src/paths/legoextraactor.cpp index d469a7b2..14ec8c6a 100644 --- a/LEGO1/lego/legoomni/src/paths/legoextraactor.cpp +++ b/LEGO1/lego/legoomni/src/paths/legoextraactor.cpp @@ -86,16 +86,45 @@ MxU32 LegoExtraActor::VTable0x90(float p_time, Matrix4& p_transform) } } -// STUB: LEGO1 0x1002aa90 -void LegoExtraActor::VTable0xa4() +// FUNCTION: LEGO1 0x1002aa90 +void LegoExtraActor::VTable0xa4(MxU8& p_und1, MxS32& p_und2) { + switch (m_unk0x0c) { + case 1: + p_und1 = 1; + p_und2 = 1; + return; + case 2: + p_und1 = 0; + p_und2 = 1; + return; + default: + p_und1 = 1; + p_und2 = rand() % p_und2 + 1; + return; + } } -// STUB: LEGO1 0x1002aae0 +// FUNCTION: LEGO1 0x1002aae0 MxResult LegoExtraActor::FUN_1002aae0() { - // TODO - VTable0x9c(); + LegoPathBoundary* oldEdge = m_boundary; + Vector3 dir(m_unk0xec[0]); + Vector3 up(m_unk0xec[2]); + float scale = -1.0f; + float* right = m_unk0xec[1]; + up.Mul(scale); + ((Vector3&) dir).EqualsCrossImpl(right, up.GetData()); + if (m_boundary == m_destEdge->m_faceA) { + m_boundary = (LegoPathBoundary*) m_destEdge->m_faceB; + } + else { + m_boundary = (LegoPathBoundary*) m_destEdge->m_faceA; + } + if (!m_boundary) { + m_boundary = oldEdge; + } + LegoPathActor::VTable0x9c(); return SUCCESS; } diff --git a/LEGO1/lego/legoomni/src/paths/legopathactor.cpp b/LEGO1/lego/legoomni/src/paths/legopathactor.cpp index f8b8d297..8ab1c470 100644 --- a/LEGO1/lego/legoomni/src/paths/legopathactor.cpp +++ b/LEGO1/lego/legoomni/src/paths/legopathactor.cpp @@ -81,7 +81,7 @@ void LegoPathActor::VTable0x9c() } // STUB: LEGO1 0x1002f650 -void LegoPathActor::VTable0xa4() +void LegoPathActor::VTable0xa4(MxU8&, MxS32&) { // TODO }