From 9c89b648c1885907029efc0d8f7d1a803dbb0fbb Mon Sep 17 00:00:00 2001 From: Fabian Neundorf Date: Mon, 28 Jul 2025 08:33:27 +0200 Subject: [PATCH] Clear unknowns in `IslePathActor` --- LEGO1/lego/legoomni/include/islepathactor.h | 10 +++++----- .../lego/legoomni/src/actors/islepathactor.cpp | 18 +++++++++--------- LEGO1/lego/legoomni/src/worlds/isle.cpp | 2 +- LEGO1/lego/legoomni/src/worlds/legoact2.cpp | 2 +- 4 files changed, 16 insertions(+), 16 deletions(-) diff --git a/LEGO1/lego/legoomni/include/islepathactor.h b/LEGO1/lego/legoomni/include/islepathactor.h index 46630e29..d1966b9c 100644 --- a/LEGO1/lego/legoomni/include/islepathactor.h +++ b/LEGO1/lego/legoomni/include/islepathactor.h @@ -102,10 +102,10 @@ class IslePathActor : public LegoPathActor { // FUNCTION: LEGO1 0x10002e00 virtual MxLong HandlePathStruct(LegoPathStructNotificationParam&) { return 0; } // vtable+0xdc - virtual void Enter(); // vtable+0xe0 - virtual void Exit(); // vtable+0xe4 - virtual void SpawnPlayer(LegoGameState::Area p_area, MxBool p_enter, MxU8 p_flags); // vtable+0xe8 - virtual void VTable0xec(MxMatrix p_transform, LegoPathBoundary* p_boundary, MxBool p_reset); // vtable+0xec + virtual void Enter(); // vtable+0xe0 + virtual void Exit(); // vtable+0xe4 + virtual void SpawnPlayer(LegoGameState::Area p_area, MxBool p_enter, MxU8 p_flags); // vtable+0xe8 + virtual void UpdateWorld(MxMatrix p_transform, LegoPathBoundary* p_boundary, MxBool p_reset); // vtable+0xec // FUNCTION: LEGO1 0x10002e10 ~IslePathActor() override { IslePathActor::Destroy(TRUE); } @@ -129,7 +129,7 @@ class IslePathActor : public LegoPathActor { MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18 void Destroy(MxBool p_fromDestructor) override; // vtable+0x1c - void FUN_1001b660(); + void TurnAround(); void SetWorld(LegoWorld* p_world) { m_world = p_world; } diff --git a/LEGO1/lego/legoomni/src/actors/islepathactor.cpp b/LEGO1/lego/legoomni/src/actors/islepathactor.cpp index 7d7776a2..df7c3634 100644 --- a/LEGO1/lego/legoomni/src/actors/islepathactor.cpp +++ b/LEGO1/lego/legoomni/src/actors/islepathactor.cpp @@ -92,7 +92,7 @@ void IslePathActor::Enter() NavController()->ResetMaxLinearVel(m_maxLinearVel); SetUserActor(this); - FUN_1001b660(); + TurnAround(); TransformPointOfView(); } } @@ -151,7 +151,7 @@ void IslePathActor::Exit() GameState()->m_currentArea = LegoGameState::Area::e_vehicleExited; } - FUN_1001b660(); + TurnAround(); TransformPointOfView(); ResetViewVelocity(); } @@ -611,7 +611,7 @@ void IslePathActor::SpawnPlayer(LegoGameState::Area p_area, MxBool p_enter, MxU8 } // FUNCTION: LEGO1 0x1001b5b0 -void IslePathActor::VTable0xec(MxMatrix p_transform, LegoPathBoundary* p_boundary, MxBool p_reset) +void IslePathActor::UpdateWorld(MxMatrix p_transform, LegoPathBoundary* p_boundary, MxBool p_reset) { if (m_world) { m_world->RemoveActor(this); @@ -639,15 +639,15 @@ void IslePathActor::VTable0xec(MxMatrix p_transform, LegoPathBoundary* p_boundar // FUNCTION: LEGO1 0x1001b660 // FUNCTION: BETA10 0x10036ea2 -void IslePathActor::FUN_1001b660() +void IslePathActor::TurnAround() { MxMatrix transform(m_roi->GetLocal2World()); - Vector3 position(transform[0]); - Vector3 direction(transform[1]); - Vector3 up(transform[2]); + Vector3 right(transform[0]); + Vector3 up(transform[1]); + Vector3 direction(transform[2]); - up *= -1.0f; - position.EqualsCross(direction, up); + direction *= -1.0f; + right.EqualsCross(up, direction); m_roi->SetLocal2World(transform); m_roi->WrappedUpdateWorldData(); } diff --git a/LEGO1/lego/legoomni/src/worlds/isle.cpp b/LEGO1/lego/legoomni/src/worlds/isle.cpp index 54c91475..373befa0 100644 --- a/LEGO1/lego/legoomni/src/worlds/isle.cpp +++ b/LEGO1/lego/legoomni/src/worlds/isle.cpp @@ -867,7 +867,7 @@ void Isle::CheckAreaExiting() case LegoGameState::e_vehicleExited: { MxMatrix mat(UserActor()->GetROI()->GetLocal2World()); LegoPathBoundary* boundary = UserActor()->GetBoundary(); - ((IslePathActor*) UserActor())->VTable0xec(mat, boundary, TRUE); + ((IslePathActor*) UserActor())->UpdateWorld(mat, boundary, TRUE); break; } case LegoGameState::e_infocenterExited: diff --git a/LEGO1/lego/legoomni/src/worlds/legoact2.cpp b/LEGO1/lego/legoomni/src/worlds/legoact2.cpp index 0e84566e..3fe704c6 100644 --- a/LEGO1/lego/legoomni/src/worlds/legoact2.cpp +++ b/LEGO1/lego/legoomni/src/worlds/legoact2.cpp @@ -534,7 +534,7 @@ void LegoAct2::Enable(MxBool p_enable) GameState()->SetActor(LegoActor::c_pepper); m_pepper = FindROI("pepper"); - ((IslePathActor*) m_pepper->GetEntity())->VTable0xec(m_transformOnDisable, m_boundaryOnDisable, TRUE); + ((IslePathActor*) m_pepper->GetEntity())->UpdateWorld(m_transformOnDisable, m_boundaryOnDisable, TRUE); if (GameState()->m_previousArea == LegoGameState::e_infomain) { GameState()->StopArea(LegoGameState::e_infomain);