From 13be84845a721d0f9b0c18d0cdd657fc239e65ae Mon Sep 17 00:00:00 2001 From: Mityno <84503460+Mityno@users.noreply.github.com> Date: Sun, 5 Jul 2026 00:39:31 +0000 Subject: [PATCH] Start decompiling ActorUnkRBLS (#98) * feat: Match ActorUnkRBLS vfunc_18, 20, 24 and 2C * fix: Use FLOAT_TO_FX32 instead of raw hex * feat: Update symbols * fix: Fix ModelRender::vfunc_18 symbol and childs declarations --- config/eur/arm9/overlays/ov000/symbols.txt | 2 +- config/eur/arm9/overlays/ov063/symbols.txt | 10 ++--- config/jp/arm9/overlays/ov000/symbols.txt | 2 +- config/jp/arm9/overlays/ov063/symbols.txt | 10 ++--- include/Actor/ActorUnkRBLS.hpp | 27 +++++++++++--- include/Render/ModelRender.hpp | 7 ++-- src/063_Shrine/Actor/ActorUnkRBLS.cpp | 43 +++++++++++++++++++--- 7 files changed, 75 insertions(+), 26 deletions(-) diff --git a/config/eur/arm9/overlays/ov000/symbols.txt b/config/eur/arm9/overlays/ov000/symbols.txt index e5fc9dc1..02c879d3 100644 --- a/config/eur/arm9/overlays/ov000/symbols.txt +++ b/config/eur/arm9/overlays/ov000/symbols.txt @@ -111,7 +111,7 @@ _ZN11ModelRender8vfunc_20Ev kind:function(arm,size=0x18) addr:0x02057d84 func_ov000_02057d9c kind:function(arm,size=0x2c) addr:0x02057d9c _ZN11ModelRender8vfunc_10EP7VecFx32P5Mat3pS1_ kind:function(arm,size=0x7c) addr:0x02057dc8 _ZN11ModelRender8vfunc_14EP5Mat3pP7VecFx32 kind:function(arm,size=0x64) addr:0x02057e44 -_ZN11ModelRender8vfunc_18Ev kind:function(arm,size=0x1c) addr:0x02057ea8 +_ZN11ModelRender8vfunc_18EP7VecFx32 kind:function(arm,size=0x1c) addr:0x02057ea8 _ZN15ModelRenderBaseD1Ev kind:function(thumb,size=0x2) addr:0x02057ec4 _ZN15ModelRenderBaseD0Ev kind:function(thumb,size=0xc) addr:0x02057ec8 _ZN15ModelRenderBaseD2Ev kind:function(thumb,size=0x2) addr:0x02057ed4 diff --git a/config/eur/arm9/overlays/ov063/symbols.txt b/config/eur/arm9/overlays/ov063/symbols.txt index b48d2438..5fe58267 100644 --- a/config/eur/arm9/overlays/ov063/symbols.txt +++ b/config/eur/arm9/overlays/ov063/symbols.txt @@ -252,10 +252,10 @@ _ZN19ActorProfileUnkRBLS6CreateEv kind:function(arm,size=0x24) addr:0x0215f2c4 _ZN19ActorProfileUnkRBLSC1Ev kind:function(arm,size=0x28) addr:0x0215f2e8 _ZN12ActorUnkRBLSC1Ev kind:function(arm,size=0xc4) addr:0x0215f310 _ZN12ActorUnkRBLS19func_ov063_0215f3d4Ev kind:function(arm,size=0x14) addr:0x0215f3d4 -_ZN12ActorUnkRBLS19func_ov063_0215f3e8Ev kind:function(arm,size=0x8c) addr:0x0215f3e8 -_ZN12ActorUnkRBLS19func_ov063_0215f474Ev kind:function(arm,size=0x14) addr:0x0215f474 -_ZN12ActorUnkRBLS19func_ov063_0215f488Ev kind:function(arm,size=0x14) addr:0x0215f488 -_ZN12ActorUnkRBLS19func_ov063_0215f49cEv kind:function(arm,size=0x20) addr:0x0215f49c +_ZN12ActorUnkRBLS8vfunc_18Ev kind:function(arm,size=0x8c) addr:0x0215f3e8 +_ZN12ActorUnkRBLS8vfunc_20Ev kind:function(arm,size=0x14) addr:0x0215f474 +_ZN12ActorUnkRBLS8vfunc_24Ev kind:function(arm,size=0x14) addr:0x0215f488 +_ZN12ActorUnkRBLS8vfunc_2CEv kind:function(arm,size=0x20) addr:0x0215f49c _ZN12ActorUnkRBLSD0Ev kind:function(arm,size=0x1c) addr:0x0215f4bc _ZN12ActorUnkRBLSD1Ev kind:function(arm,size=0x28) addr:0x0215f4d8 _ZN12ActorUnkRBLS19func_ov063_0215f500Ev kind:function(arm,size=0x30) addr:0x0215f500 @@ -465,7 +465,7 @@ data_ov063_021636f0 kind:data(any) addr:0x021636f0 data_ov063_02163704 kind:data(any) addr:0x02163704 _ZTV19data_ov063_0216370c kind:data(any) addr:0x0216370c data_ov063_02163740 kind:data(any) addr:0x02163740 -_ZTV19data_ov063_02163758 kind:data(any) addr:0x02163758 +_ZTV19ActorProfileUnkRBLS kind:data(any) addr:0x02163758 data_ov063_02163784 kind:data(any) addr:0x02163784 _ZTV19data_ov063_021637c4 kind:data(any) addr:0x021637c4 data_ov063_02163828 kind:data(any) addr:0x02163828 diff --git a/config/jp/arm9/overlays/ov000/symbols.txt b/config/jp/arm9/overlays/ov000/symbols.txt index 4f14121b..a3257129 100644 --- a/config/jp/arm9/overlays/ov000/symbols.txt +++ b/config/jp/arm9/overlays/ov000/symbols.txt @@ -111,7 +111,7 @@ _ZN11ModelRender8vfunc_20Ev kind:function(arm,size=0x18) addr:0x02059304 func_ov000_0205931c kind:function(arm,size=0x2c) addr:0x0205931c _ZN11ModelRender8vfunc_10EP7VecFx32P5Mat3pS1_ kind:function(arm,size=0x7c) addr:0x02059348 _ZN11ModelRender8vfunc_14EP5Mat3pP7VecFx32 kind:function(arm,size=0x64) addr:0x020593c4 -_ZN11ModelRender8vfunc_18Ev kind:function(arm,size=0x1c) addr:0x02059428 +_ZN11ModelRender8vfunc_18EP7VecFx32 kind:function(arm,size=0x1c) addr:0x02059428 _ZN15ModelRenderBaseD1Ev kind:function(thumb,size=0x2) addr:0x02059444 _ZN15ModelRenderBaseD0Ev kind:function(thumb,size=0xc) addr:0x02059448 _ZN15ModelRenderBaseD2Ev kind:function(thumb,size=0x2) addr:0x02059454 diff --git a/config/jp/arm9/overlays/ov063/symbols.txt b/config/jp/arm9/overlays/ov063/symbols.txt index cbaada98..dce67f29 100644 --- a/config/jp/arm9/overlays/ov063/symbols.txt +++ b/config/jp/arm9/overlays/ov063/symbols.txt @@ -253,10 +253,10 @@ _ZN19ActorProfileUnkRBLS6CreateEv kind:function(arm,size=0x24) addr:0x02161098 _ZN19ActorProfileUnkRBLSC1Ev kind:function(arm,size=0x28) addr:0x021610bc _ZN12ActorUnkRBLSC1Ev kind:function(arm,size=0xc4) addr:0x021610e4 _ZN12ActorUnkRBLS19func_ov063_021611a8Ev kind:function(arm,size=0x14) addr:0x021611a8 -_ZN12ActorUnkRBLS19func_ov063_021611bcEv kind:function(arm,size=0x8c) addr:0x021611bc -_ZN12ActorUnkRBLS19func_ov063_02161248Ev kind:function(arm,size=0x14) addr:0x02161248 -_ZN12ActorUnkRBLS19func_ov063_0216125cEv kind:function(arm,size=0x14) addr:0x0216125c -_ZN12ActorUnkRBLS19func_ov063_02161270Ev kind:function(arm,size=0x20) addr:0x02161270 +_ZN12ActorUnkRBLS8vfunc_18Ev kind:function(arm,size=0x8c) addr:0x021611bc +_ZN12ActorUnkRBLS8vfunc_20Ev kind:function(arm,size=0x14) addr:0x02161248 +_ZN12ActorUnkRBLS8vfunc_24Ev kind:function(arm,size=0x14) addr:0x0216125c +_ZN12ActorUnkRBLS8vfunc_2CEv kind:function(arm,size=0x20) addr:0x02161270 _ZN12ActorUnkRBLSD0Ev kind:function(arm,size=0x1c) addr:0x02161290 _ZN12ActorUnkRBLSD1Ev kind:function(arm,size=0x28) addr:0x021612ac _ZN12ActorUnkRBLS19func_ov063_021612d4Ev kind:function(arm,size=0x30) addr:0x021612d4 @@ -466,7 +466,7 @@ data_ov063_02165518 kind:data(any) addr:0x02165518 ambiguous data_ov063_02165524 kind:data(any) addr:0x02165524 _ZTV19data_ov063_0216552c kind:data(any) addr:0x0216552c data_ov063_02165560 kind:data(any) addr:0x02165560 -_ZTV19data_ov063_02165578 kind:data(any) addr:0x02165578 +_ZTV19ActorProfileUnkRBLS kind:data(any) addr:0x02165578 data_ov063_021655a4 kind:data(any) addr:0x021655a4 _ZTV19data_ov063_021655e4 kind:data(any) addr:0x021655e4 data_ov063_02165648 kind:data(any) addr:0x02165648 diff --git a/include/Actor/ActorUnkRBLS.hpp b/include/Actor/ActorUnkRBLS.hpp index b7ced03b..babc5bf8 100644 --- a/include/Actor/ActorUnkRBLS.hpp +++ b/include/Actor/ActorUnkRBLS.hpp @@ -4,9 +4,19 @@ #include "Actor/Actor.hpp" #include "Actor/ActorProfile.hpp" +#include "Render/ModelRender.hpp" #include "global.h" #include "types.h" +struct UnkStruct_data_ov063_02163740 { + /* 00 */ unk32 mUnk_00; + /* 04 */ unk32 mUnk_04; + /* 08 */ unk32 mUnk_08; + /* 0C */ unk32 mUnk_0C; + /* 10 */ unk32 mUnk_10; + /* 14 */ unk32 mUnk_14; +}; + class ActorUnkRBLS_C4 : public Actor_C4 { public: ActorUnkRBLS_C4(Actor *param1); @@ -20,17 +30,24 @@ public: class ActorUnkRBLS : public Actor { public: /* 00 (base) */ - /* 94 */ + /* 94 */ ModelRender mUnk_94; + /* F4 */ unk32 mUnk_F4; + /* F8 */ STRUCT_PAD(0xF8, 0x110); + /* 110 */ UnkSystem5 mUnk_110; + /* 130 */ void *mUnk_130; + /* 134 */ STRUCT_PAD(0x134, 0x160); + /* 160 */ ActorUnkRBLS(); + /* 18 */ virtual unk32 vfunc_18(void); + /* 20 */ virtual void vfunc_20(void); + /* 24 */ virtual void vfunc_24(void); + /* 2C */ virtual void vfunc_2C(void); + /* 4C */ virtual ~ActorUnkRBLS() override; void func_ov063_0215f3d4(void); - void func_ov063_0215f3e8(void); - void func_ov063_0215f474(void); - void func_ov063_0215f488(void); - void func_ov063_0215f49c(void); void func_ov063_0215f500(void); }; diff --git a/include/Render/ModelRender.hpp b/include/Render/ModelRender.hpp index dc6f450c..0faf0843 100644 --- a/include/Render/ModelRender.hpp +++ b/include/Render/ModelRender.hpp @@ -1,6 +1,7 @@ #pragma once #include "global.h" +#include "nitro/fx.h" #include "types.h" #include @@ -40,7 +41,7 @@ public: /* 0C */ virtual void vfunc_0C() = 0; /* 10 */ virtual void vfunc_10(VecFx32 *param1, Mat3p *param2, VecFx32 *param3) = 0; /* 14 */ virtual void vfunc_14(Mat3p *param1, VecFx32 *param2) = 0; - /* 18 */ virtual void vfunc_18() = 0; + /* 18 */ virtual void vfunc_18(VecFx32 *param1) = 0; /* 1C */ }; @@ -59,7 +60,7 @@ public: /* 0C */ virtual void vfunc_0C() override; /* 10 */ virtual void vfunc_10(VecFx32 *param1, Mat3p *param2, VecFx32 *param3) override; // SetTransform? /* 14 */ virtual void vfunc_14(Mat3p *param1, VecFx32 *param2) override; // SetRotationTranslation? - /* 18 */ virtual void vfunc_18() override; + /* 18 */ virtual void vfunc_18(VecFx32 *param1) override; /* 1C */ virtual void vfunc_1C(UnkSystem4_vfunc_1C *param1); /* 20 */ virtual void vfunc_20(); @@ -79,7 +80,7 @@ public: /* 00 */ virtual ~UnkSystem6_Derived1() override {} /* 10 */ virtual void vfunc_10(VecFx32 *param1, Mat3p *param2, VecFx32 *param3) override; /* 14 */ virtual void vfunc_14(Mat3p *param1, VecFx32 *param2) override; - /* 18 */ virtual void vfunc_18() override; + /* 18 */ virtual void vfunc_18(VecFx32 *param1) override; }; class UnkSystem6_Derived2 : public UnkSystem6_Derived1 { diff --git a/src/063_Shrine/Actor/ActorUnkRBLS.cpp b/src/063_Shrine/Actor/ActorUnkRBLS.cpp index 8bbb2c1e..8c1538f3 100644 --- a/src/063_Shrine/Actor/ActorUnkRBLS.cpp +++ b/src/063_Shrine/Actor/ActorUnkRBLS.cpp @@ -1,7 +1,15 @@ //! TODO: This file was generated automatically and might contain errors #include "Actor/ActorUnkRBLS.hpp" -#include "System/SysNew.hpp" +#include "MapObject/MapObjectTreasureSpawned.hpp" +#include "Render/ModelRender.hpp" +#include "Unknown/UnkStruct_027e0cd8.hpp" +#include "nitro/fx.h" +#include "nitro/math.h" + +extern UnkStruct_data_ov063_02163740 data_ov063_02163740; // = {0, 0x534C4252, 0, 0, 0, 0}; + +extern "C" void func_ov000_02099f64(unk32 *param1, UnkStruct_data_ov063_02163740 param2, unk32 param3); DECL_PROFILE(ActorProfileUnkRBLS); @@ -12,13 +20,36 @@ Actor *ActorProfileUnkRBLS::Create() { ActorProfileUnkRBLS::ActorProfileUnkRBLS() : ActorProfile_Derived1(ActorId_RBLS) {} -ActorUnkRBLS::ActorUnkRBLS() {} +ActorUnkRBLS::ActorUnkRBLS() : + mUnk_94(NULL), + mUnk_110(&mUnk_130, NULL) {} + +unk32 ActorUnkRBLS::vfunc_18(void) { + this->mPos.x -= FLOAT_TO_FX32(0.5f); + this->mPos.z -= FLOAT_TO_FX32(0.5f); + this->mPos.y = 0; + func_ov000_02099f64(&this->mUnk_F4, data_ov063_02163740, 0x1000); + (*(MapObjectTreasureSpawned *) &this->mUnk_F4).vfunc_3C(); + + data_027e0cd8->mUnk_0C->mUnk_12A = 0; + return 1; //! INFO: bool? +} + +void ActorUnkRBLS::vfunc_20(void) { + (*(Actor *) &this->mUnk_F4).vfunc_34(); //! WARN: NOT an Actor +} + +void ActorUnkRBLS::vfunc_24(void) { + this->vfunc_20(); +} + +void ActorUnkRBLS::vfunc_2C(void) { + ModelRender *param1 = &this->mUnk_94; + VecFx32 *param2 = &this->mPos; + param1->vfunc_18(param2); +} void ActorUnkRBLS::func_ov063_0215f3d4(void) {} -void ActorUnkRBLS::func_ov063_0215f3e8(void) {} -void ActorUnkRBLS::func_ov063_0215f474(void) {} -void ActorUnkRBLS::func_ov063_0215f488(void) {} -void ActorUnkRBLS::func_ov063_0215f49c(void) {} void ActorUnkRBLS::func_ov063_0215f500(void) {} ActorUnkRBLS::~ActorUnkRBLS() {}