From 5be9b343c46ad94a46a1e178295e2d2cb9cb4ef2 Mon Sep 17 00:00:00 2001 From: jonschz <17198703+jonschz@users.noreply.github.com> Date: Tue, 19 Nov 2024 16:20:27 +0100 Subject: [PATCH] Implement `LegoJetskiRaceActor::VTable0x6c`, add BETA10 annotations (#1160) Co-authored-by: jonschz --- LEGO1/lego/legoomni/include/legoentity.h | 2 + .../lego/legoomni/include/legopathboundary.h | 29 +++++++++++++++ LEGO1/lego/legoomni/include/legoracers.h | 1 + .../src/entity/legojetskiraceactor.cpp | 37 ++++++++++++++++++- LEGO1/realtime/roi.h | 1 + 5 files changed, 68 insertions(+), 2 deletions(-) diff --git a/LEGO1/lego/legoomni/include/legoentity.h b/LEGO1/lego/legoomni/include/legoentity.h index 26256c84..c984e097 100644 --- a/LEGO1/lego/legoomni/include/legoentity.h +++ b/LEGO1/lego/legoomni/include/legoentity.h @@ -90,6 +90,8 @@ class LegoEntity : public MxEntity { LegoROI* GetROI() { return m_roi; } MxU8 GetType() { return m_type; } + + // FUNCTION: BETA10 0x1007ff00 MxBool GetCameraFlag() { return m_cameraFlag; } void SetFlags(MxU8 p_flags) { m_flags = p_flags; } diff --git a/LEGO1/lego/legoomni/include/legopathboundary.h b/LEGO1/lego/legoomni/include/legopathboundary.h index f9bc970b..ad2a216a 100644 --- a/LEGO1/lego/legoomni/include/legopathboundary.h +++ b/LEGO1/lego/legoomni/include/legopathboundary.h @@ -81,6 +81,7 @@ class LegoPathBoundary : public LegoWEGEdge { // _Tree >::_Kfn,LegoPathActorSetCompare,allocator >::erase // TEMPLATE: LEGO1 0x1002c440 +// TEMPLATE: BETA10 0x100b6480 // _Tree >::_Kfn,LegoPathActorSetCompare,allocator >::find // TEMPLATE: LEGO1 0x1002c4c0 @@ -93,6 +94,7 @@ class LegoPathBoundary : public LegoWEGEdge { // set >::~set > // TEMPLATE: LEGO1 0x1002c6c0 +// TEMPLATE: BETA10 0x10020760 // Set::~Set // TEMPLATE: LEGO1 0x1002eb10 @@ -101,6 +103,9 @@ class LegoPathBoundary : public LegoWEGEdge { // TEMPLATE: LEGO1 0x1002ebc0 // _Tree >::_Kfn,LegoAnimPresenterSetCompare,allocator >::_Min +// TEMPLATE: LEGO1 0x100822a0 +// _Tree >::_Kfn,LegoPathActorSetCompare,allocator >::_Min + // TEMPLATE: LEGO1 0x10045d80 // _Tree >::_Kfn,LegoPathActorSetCompare,allocator >::iterator::_Dec @@ -137,6 +142,9 @@ class LegoPathBoundary : public LegoWEGEdge { // TEMPLATE: LEGO1 0x10057210 // Set::~Set +// TEMPLATE: BETA10 0x10082de0 +// set >::begin + // TEMPLATE: LEGO1 0x100573e0 // _Tree >::_Kfn,LegoPathActorSetCompare,allocator >::begin @@ -176,6 +184,27 @@ class LegoPathBoundary : public LegoWEGEdge { // TEMPLATE: LEGO1 0x10081cd0 // _Tree >::_Kfn,LegoPathActorSetCompare,allocator >::lower_bound +// TEMPLATE: BETA10 0x10082b90 +// _Tree >::_Kfn,LegoAnimPresenterSetCompare,allocator >::const_iterator::operator++ + +// TEMPLATE: BETA10 0x10082ee0 +// set >::end + +// TEMPLATE: BETA10 0x10082b40 +// _Tree >::_Kfn,LegoAnimPresenterSetCompare,allocator >::const_iterator::operator* + +// TEMPLATE: BETA10 0x10021dc0 +// Set::Set + +// TEMPLATE: BETA10 0x100202d0 +// set >::begin + +// TEMPLATE: BETA10 0x10020030 +// _Tree >::_Kfn,LegoPathActorSetCompare,allocator >::const_iterator::operator++ + +// TEMPLATE: BETA10 0x100203d0 +// set >::end + // GLOBAL: LEGO1 0x100f11a4 // _Tree >::_Kfn,LegoPathActorSetCompare,allocator >::_Nil diff --git a/LEGO1/lego/legoomni/include/legoracers.h b/LEGO1/lego/legoomni/include/legoracers.h index 9b460dee..3648987f 100644 --- a/LEGO1/lego/legoomni/include/legoracers.h +++ b/LEGO1/lego/legoomni/include/legoracers.h @@ -43,6 +43,7 @@ class LegoRaceCar : public LegoCarRaceActor, public LegoRaceMap { MxLong Notify(MxParam& p_param) override; // vtable+0x04 // FUNCTION: LEGO1 0x100142a0 + // FUNCTION: BETA10 0x100cd500 const char* ClassName() const override // vtable+0x0c { // STRING: LEGO1 0x100f0548 diff --git a/LEGO1/lego/legoomni/src/entity/legojetskiraceactor.cpp b/LEGO1/lego/legoomni/src/entity/legojetskiraceactor.cpp index 7ecaa04a..0e64d2d0 100644 --- a/LEGO1/lego/legoomni/src/entity/legojetskiraceactor.cpp +++ b/LEGO1/lego/legoomni/src/entity/legojetskiraceactor.cpp @@ -138,7 +138,7 @@ void LegoJetskiRaceActor::VTable0x70(float p_float) } } -// STUB: LEGO1 0x10081fd0 +// FUNCTION: LEGO1 0x10081fd0 MxU32 LegoJetskiRaceActor::VTable0x6c( LegoPathBoundary* p_boundary, Vector3& p_v1, @@ -148,6 +148,39 @@ MxU32 LegoJetskiRaceActor::VTable0x6c( Vector3& p_v3 ) { - // TODO + LegoAnimPresenterSet& presenters = p_boundary->GetPresenters(); + + for (LegoAnimPresenterSet::iterator itap = presenters.begin(); itap != presenters.end(); itap++) { + if ((*itap)->VTable0x94(p_v1, p_v2, p_f1, p_f2, p_v3)) { + return 1; + } + } + + LegoPathActorSet& plpas = p_boundary->GetActors(); + LegoPathActorSet lpas(plpas); + + for (LegoPathActorSet::iterator itpa = lpas.begin(); itpa != lpas.end(); itpa++) { + if (plpas.find(*itpa) != plpas.end()) { + LegoPathActor* actor = *itpa; + + if (this != actor) { + LegoROI* roi = actor->GetROI(); + + if (roi != NULL && (roi->GetVisibility() || actor->GetCameraFlag())) { + if (roi->FUN_100a9410(p_v1, p_v2, p_f1, p_f2, p_v3, m_collideBox && actor->GetCollideBox())) { + VTable0x94(actor, TRUE); + + if (actor->VTable0x94(this, FALSE) < 0) { + return 0; + } + else { + return 2; + } + } + } + } + } + } + return 0; } diff --git a/LEGO1/realtime/roi.h b/LEGO1/realtime/roi.h index 224c9607..87cbe8f1 100644 --- a/LEGO1/realtime/roi.h +++ b/LEGO1/realtime/roi.h @@ -117,6 +117,7 @@ class ROI { // FUNCTION: BETA10 0x10027110 const CompoundObject* GetComp() const { return comp; } + // FUNCTION: BETA10 0x10049e10 unsigned char GetVisibility() { return m_visible; } // FUNCTION: BETA10 0x10011720