From 6ea40b449319772c3eb6ed05fc620a4024d75123 Mon Sep 17 00:00:00 2001 From: Mityno <84503460+Mityno@users.noreply.github.com> Date: Mon, 29 Jun 2026 18:30:10 +0000 Subject: [PATCH] Decompiling ActorUnkRSMF (#73) * Decompile func_ov063_0215c250 and func_ov063_0215c290 * Decompile ActorUnkRMSF::~ActorUnkRMSF Unsure what the added ldr/str instructions are * Update func_ov063_0215c250 and func_ov063_0215c290 with right classes * chore: Tidy up code using the right functions * feat: Duplicate code for jp version * feat: Add placeholder parent class to match dtors * fix: Update the handling of jp version * fix: Remove dup code and rename symbols * fix: Rename vfuncs * feat: Rename more symbols and add member to match class size * chore: Remove autogen comments at the top of files * feat: Fix reloc and unify used functions with RMSD * fix: Rename vfuncs to the right id --- config/eur/arm9/overlays/ov063/symbols.txt | 8 +++---- config/jp/arm9/overlays/ov063/symbols.txt | 13 ++++++----- include/Actor/ActorUnkRMSF.hpp | 25 ++++++++++++++++------ src/063_Shrine/Actor/ActorUnkRMSF.cpp | 17 ++++++++++----- 4 files changed, 41 insertions(+), 22 deletions(-) diff --git a/config/eur/arm9/overlays/ov063/symbols.txt b/config/eur/arm9/overlays/ov063/symbols.txt index 11b13797..1378ad29 100644 --- a/config/eur/arm9/overlays/ov063/symbols.txt +++ b/config/eur/arm9/overlays/ov063/symbols.txt @@ -146,8 +146,8 @@ _ZN19ActorProfileUnkRMSF10GetProfileEv kind:function(arm,size=0xc) addr:0x0215c1 _ZN19ActorProfileUnkRMSF6CreateEv kind:function(arm,size=0x24) addr:0x0215c1e4 _ZN19ActorProfileUnkRMSFC1Ev kind:function(arm,size=0x28) addr:0x0215c208 _ZN12ActorUnkRMSFC1Ev kind:function(arm,size=0x20) addr:0x0215c230 -_ZN12ActorUnkRMSF19func_ov063_0215c250Ev kind:function(arm,size=0x40) addr:0x0215c250 -_ZN12ActorUnkRMSF19func_ov063_0215c290Ev kind:function(arm,size=0x40) addr:0x0215c290 +_ZN12ActorUnkRMSF8vfunc_54Ev kind:function(arm,size=0x40) addr:0x0215c250 +_ZN12ActorUnkRMSF8vfunc_58Ev kind:function(arm,size=0x40) addr:0x0215c290 _ZN12ActorUnkRMSFD1Ev kind:function(arm,size=0x28) addr:0x0215c2d0 _ZN12ActorUnkRMSFD0Ev kind:function(arm,size=0x30) addr:0x0215c2f8 _ZN19ActorProfileUnkRMSFD1Ev kind:function(arm,size=0x14) addr:0x0215c328 @@ -444,8 +444,8 @@ _ZTV19data_ov063_02163324 kind:data(any) addr:0x02163324 data_ov063_02163388 kind:data(any) addr:0x02163388 _ZTV19data_ov063_021633a0 kind:data(any) addr:0x021633a0 _ZTV19data_ov063_021633c4 kind:data(any) addr:0x021633c4 -_ZTV19data_ov063_02163428 kind:data(any) addr:0x02163428 -_ZTV19data_ov063_0216344c kind:data(any) addr:0x0216344c +_ZTV19ActorProfileUnkRMSF kind:data(any) addr:0x02163428 +_ZTV12ActorUnkRMSF kind:data(any) addr:0x0216344c data_ov063_021634b0 kind:data(any) addr:0x021634b0 _ZTV19ActorProfileUnkRMSD kind:data(any) addr:0x021634c8 _ZTV12ActorUnkRMSD kind:data(any) addr:0x021634ec diff --git a/config/jp/arm9/overlays/ov063/symbols.txt b/config/jp/arm9/overlays/ov063/symbols.txt index a65454e4..a99a83dd 100644 --- a/config/jp/arm9/overlays/ov063/symbols.txt +++ b/config/jp/arm9/overlays/ov063/symbols.txt @@ -146,8 +146,8 @@ _ZN19ActorProfileUnkRMSF10GetProfileEv kind:function(arm,size=0xc) addr:0x0215df _ZN19ActorProfileUnkRMSF6CreateEv kind:function(arm,size=0x24) addr:0x0215df78 _ZN19ActorProfileUnkRMSFC1Ev kind:function(arm,size=0x28) addr:0x0215df9c _ZN12ActorUnkRMSFC1Ev kind:function(arm,size=0x20) addr:0x0215dfc4 -_ZN12ActorUnkRMSF19func_ov063_0215dfe4Ev kind:function(arm,size=0x40) addr:0x0215dfe4 -_ZN12ActorUnkRMSF19func_ov063_0215e024Ev kind:function(arm,size=0x40) addr:0x0215e024 +_ZN12ActorUnkRMSF8vfunc_54Ev kind:function(arm,size=0x40) addr:0x0215dfe4 +_ZN12ActorUnkRMSF8vfunc_58Ev kind:function(arm,size=0x40) addr:0x0215e024 _ZN12ActorUnkRMSFD1Ev kind:function(arm,size=0x28) addr:0x0215e064 _ZN12ActorUnkRMSFD0Ev kind:function(arm,size=0x30) addr:0x0215e08c _ZN19ActorProfileUnkRMSFD1Ev kind:function(arm,size=0x14) addr:0x0215e0bc @@ -370,8 +370,8 @@ data_ov063_02164390 kind:data(any) addr:0x02164390 data_ov063_021643a0 kind:data(any) addr:0x021643a0 data_ov063_021643b0 kind:data(any) addr:0x021643b0 data_ov063_021643c0 kind:data(any) addr:0x021643c0 -data_ov063_021643d0 kind:data(any) addr:0x021643d0 -data_ov063_021643e0 kind:data(any) addr:0x021643e0 +data_ov063_021625b8 kind:data(any) addr:0x021643d0 +data_ov063_021625c8 kind:data(any) addr:0x021643e0 data_ov063_021625d8 kind:data(any) addr:0x021643f0 data_ov063_021625e8 kind:data(any) addr:0x02164400 data_ov063_02164410 kind:data(any) addr:0x02164410 @@ -445,9 +445,8 @@ _ZTV19data_ov063_0216518c kind:data(any) addr:0x0216518c ambiguous data_ov063_021651a8 kind:data(any) addr:0x021651a8 _ZTV19data_ov063_021651c0 kind:data(any) addr:0x021651c0 _ZTV19data_ov063_021651e4 kind:data(any) addr:0x021651e4 -data_ov063_02165248 kind:data(any) addr:0x02165248 ambiguous -_ZTV19data_ov063_02165248 kind:data(any) addr:0x02165248 -_ZTV19data_ov063_0216526c kind:data(any) addr:0x0216526c +_ZTV19ActorProfileUnkRMSF kind:data(any) addr:0x02165248 +_ZTV12ActorUnkRMSF kind:data(any) addr:0x0216526c data_ov063_021652d0 kind:data(any) addr:0x021652d0 _ZTV19ActorProfileUnkRMSD kind:data(any) addr:0x021652e8 _ZTV12ActorUnkRMSD kind:data(any) addr:0x0216530c diff --git a/include/Actor/ActorUnkRMSF.hpp b/include/Actor/ActorUnkRMSF.hpp index 218946ae..3c3df238 100644 --- a/include/Actor/ActorUnkRMSF.hpp +++ b/include/Actor/ActorUnkRMSF.hpp @@ -1,10 +1,11 @@ -//! TODO: This file was generated automatically and might contain errors - #pragma once #include "Actor/Actor.hpp" #include "Actor/ActorProfile.hpp" +#include "Actor/ActorUnkRMSD.hpp" +#include "Render/ModelRender.hpp" #include "global.h" +#include "nns/g3d/g3d.h" #include "types.h" class ActorUnkRMSF_C4 : public Actor_C4 { @@ -17,17 +18,29 @@ public: /* 0C */ virtual void vfunc_0C(unk32 param1) override; }; -class ActorUnkRMSF : public Actor { +class ActorUnkRMSF_Base : public Actor { public: /* 00 (base) */ - /* 94 */ + /* 94 */ ModelRender mUnk_94; + /* F4 */ ModelRender mUnk_F4; + /* 154 */ unk32 mUnk_154; + /* 158 */ + + ActorUnkRMSF_Base(); +}; + +class ActorUnkRMSF : public ActorUnkRMSBase { +public: + /* 00 (base) */ + /* 158 */ ActorUnkRMSF(); /* 4C */ virtual ~ActorUnkRMSF() override; + /* 50 */ - void func_ov063_0215c250(void); - void func_ov063_0215c290(void); + /* 54 */ virtual G3d_Model *vfunc_54(void); + /* 58 */ virtual G3d_Model *vfunc_58(void); }; class ActorProfileUnkRMSF : public ActorProfile_Derived1 { diff --git a/src/063_Shrine/Actor/ActorUnkRMSF.cpp b/src/063_Shrine/Actor/ActorUnkRMSF.cpp index dae6f8e0..32c8fc5c 100644 --- a/src/063_Shrine/Actor/ActorUnkRMSF.cpp +++ b/src/063_Shrine/Actor/ActorUnkRMSF.cpp @@ -1,7 +1,9 @@ -//! TODO: This file was generated automatically and might contain errors - #include "Actor/ActorUnkRMSF.hpp" -#include "System/SysNew.hpp" +#include "nns/g3d/g3d.h" +#include "profile.hpp" + +extern char data_ov063_021625b8[0x10]; // = "RMSF_wall"; +extern char data_ov063_021625c8[0x10]; // = "RMSF"; DECL_PROFILE(ActorProfileUnkRMSF); @@ -14,8 +16,13 @@ ActorProfileUnkRMSF::ActorProfileUnkRMSF() : ActorUnkRMSF::ActorUnkRMSF() {} -void ActorUnkRMSF::func_ov063_0215c250(void) {} -void ActorUnkRMSF::func_ov063_0215c290(void) {} +G3d_Model *ActorUnkRMSF::vfunc_54(void) { + return GetModelFromProfile3(&GET_PROFILE(ActorProfileUnkRMSF)->mUnk_3C, data_ov063_021625c8); +} + +G3d_Model *ActorUnkRMSF::vfunc_58(void) { + return GetModelFromProfile3(&GET_PROFILE(ActorProfileUnkRMSF)->mUnk_3C, data_ov063_021625b8); +} ActorUnkRMSF::~ActorUnkRMSF() {} ActorProfileUnkRMSF::~ActorProfileUnkRMSF() {}