From 1a098fe4b95a6eaf6c544363eb151f5d05162318 Mon Sep 17 00:00:00 2001 From: Alessevan <44125445+Alessevan@users.noreply.github.com> Date: Tue, 16 Jun 2026 11:12:01 -0400 Subject: [PATCH] Decompilation of ActorUnkSWON (#79) * feat: decompiling ActorUnkSnow * feat: rename function to vfunc_18 * refactor: remove unused ActorUnkSWON_c4 * refactor: use union field Co-authored-by: Yanis <35189056+Yanis002@users.noreply.github.com> * mark as completed and match jp * fix build issues --------- Co-authored-by: Yanis <35189056+Yanis002@users.noreply.github.com> --- config/eur/arm9/overlays/ov031/delinks.txt | 2 ++ config/eur/arm9/overlays/ov031/symbols.txt | 12 +++++------ config/jp/arm9/overlays/ov031/delinks.txt | 2 ++ config/jp/arm9/overlays/ov031/symbols.txt | 12 +++++------ include/Actor/ActorUnkSWON.hpp | 15 +------------ src/031_Land/Actor/ActorUnkSWON.cpp | 25 +++++++++++++++++++--- 6 files changed, 39 insertions(+), 29 deletions(-) diff --git a/config/eur/arm9/overlays/ov031/delinks.txt b/config/eur/arm9/overlays/ov031/delinks.txt index b1454c96..5551b1fa 100644 --- a/config/eur/arm9/overlays/ov031/delinks.txt +++ b/config/eur/arm9/overlays/ov031/delinks.txt @@ -125,9 +125,11 @@ src/031_Land/Actor/ActorUnkSWCH.cpp: .bss start:0x02116c54 end:0x02116ca0 src/031_Land/Actor/ActorUnkSWON.cpp: + complete .text start:0x020f7dbc end:0x020f7f14 .init start:0x02111710 end:0x02111760 .ctor start:0x021127ec end:0x021127f0 + .data start:0x021148b8 end:0x02114938 .bss start:0x02116ca0 end:0x02116cec src/031_Land/Actor/ActorUnkNORE.cpp: diff --git a/config/eur/arm9/overlays/ov031/symbols.txt b/config/eur/arm9/overlays/ov031/symbols.txt index cdd983f1..0b5eda79 100644 --- a/config/eur/arm9/overlays/ov031/symbols.txt +++ b/config/eur/arm9/overlays/ov031/symbols.txt @@ -1084,7 +1084,7 @@ _ZN19ActorProfileUnkSWON10GetProfileEv kind:function(arm,size=0xc) addr:0x020f7d _ZN19ActorProfileUnkSWON6CreateEv kind:function(arm,size=0x24) addr:0x020f7dc8 _ZN19ActorProfileUnkSWONC1Ev kind:function(arm,size=0x28) addr:0x020f7dec _ZN12ActorUnkSWONC1Ev kind:function(arm,size=0x20) addr:0x020f7e14 -_ZN12ActorUnkSWON19func_ov031_020f7e34Ev kind:function(arm,size=0x9c) addr:0x020f7e34 +_ZN12ActorUnkSWON8vfunc_18Ei kind:function(arm,size=0x9c) addr:0x020f7e34 _ZN12ActorUnkSWOND1Ev kind:function(arm,size=0x14) addr:0x020f7ed0 _ZN12ActorUnkSWOND0Ev kind:function(arm,size=0x1c) addr:0x020f7ee4 _ZN19ActorProfileUnkSWOND1Ev kind:function(arm,size=0x14) addr:0x020f7f00 @@ -2090,7 +2090,7 @@ __sinit_ActorUnkNTTZ.cpp kind:function(arm,size=0x50) addr:0x021115e8 __sinit_ov031_02111638 kind:function(arm,size=0x24) addr:0x02111638 __sinit_ActorUnkTGTZ.cpp kind:function(arm,size=0x64) addr:0x0211165c __sinit_ActorUnkSWCH.cpp kind:function(arm,size=0x50) addr:0x021116c0 -__sinit_ActorUnkSWON.cpp kind:function(arm,size=0x50) addr:0x02111710 +__sinit_ActorUnkSWON.cpp kind:function(arm,size=0x50) addr:0x02111710 local __sinit_ActorUnkNORE.cpp kind:function(arm,size=0x50) addr:0x02111760 __sinit_ActorUnkFLEN.cpp kind:function(arm,size=0x50) addr:0x021117b0 __sinit_ActorUnkRLST.cpp kind:function(arm,size=0x50) addr:0x02111800 @@ -2154,7 +2154,7 @@ __sinit_MapObjectUnkSWFS.cpp kind:function(arm,size=0x70) addr:0x02112724 .p__sinit_ov031_02111638 kind:data(word) addr:0x021127e0 .p__sinit_ActorUnkTGTZ.cpp kind:data(word) addr:0x021127e4 .p__sinit_ActorUnkSWCH.cpp kind:data(word) addr:0x021127e8 -.p__sinit_ActorUnkSWON.cpp kind:data(word) addr:0x021127ec +.p__sinit_ActorUnkSWON.cpp kind:data(word) addr:0x021127ec local .p__sinit_ActorUnkNORE.cpp kind:data(word) addr:0x021127f0 .p__sinit_ActorUnkFLEN.cpp kind:data(word) addr:0x021127f4 .p__sinit_ActorUnkRLST.cpp kind:data(word) addr:0x021127f8 @@ -2379,8 +2379,8 @@ _ZTV19data_ov031_02114818 kind:data(any) addr:0x02114818 _ZTV19data_ov031_0211483c kind:data(any) addr:0x0211483c data_ov031_021148a0 kind:data(any) addr:0x021148a0 ambiguous data_ov031_021148b0 kind:data(any) addr:0x021148b0 -_ZTV19data_ov031_021148b8 kind:data(any) addr:0x021148b8 -_ZTV19data_ov031_021148dc kind:data(any) addr:0x021148dc +_ZTV19ActorProfileUnkSWON kind:data(any) addr:0x021148b8 +_ZTV12ActorUnkSWON kind:data(any) addr:0x021148dc _ZTV19ActorProfileUnkNORE kind:data(any) addr:0x02114938 _ZTV12ActorUnkNORE kind:data(any) addr:0x0211495c _ZTV19data_ov031_021149b8 kind:data(any) addr:0x021149b8 @@ -2585,7 +2585,7 @@ _ZGVN15ProfileInstanceI19ActorProfileUnkSWCHE8sProfileE kind:bss addr:0x02116c54 @10884 kind:bss addr:0x02116c58 _ZN15ProfileInstanceI19ActorProfileUnkSWCHE8sProfileE kind:bss addr:0x02116c64 _ZGVN15ProfileInstanceI19ActorProfileUnkSWONE8sProfileE kind:bss addr:0x02116ca0 -@10890 kind:bss addr:0x02116ca4 +@10890 kind:bss addr:0x02116ca4 local _ZN15ProfileInstanceI19ActorProfileUnkSWONE8sProfileE kind:bss addr:0x02116cb0 _ZGVN15ProfileInstanceI19ActorProfileUnkNOREE8sProfileE kind:bss addr:0x02116cec @10896 kind:bss addr:0x02116cf0 diff --git a/config/jp/arm9/overlays/ov031/delinks.txt b/config/jp/arm9/overlays/ov031/delinks.txt index feb3420f..b9ef4a0e 100644 --- a/config/jp/arm9/overlays/ov031/delinks.txt +++ b/config/jp/arm9/overlays/ov031/delinks.txt @@ -125,7 +125,9 @@ src/031_Land/Actor/ActorUnkSWCH.cpp: .bss start:0x021189f4 end:0x02118a40 src/031_Land/Actor/ActorUnkSWON.cpp: + complete .text start:0x020f9800 end:0x020f9958 + .data start:0x0211662c end:0x021166ac .init start:0x0211349c end:0x021134ec .ctor start:0x02114578 end:0x0211457c .bss start:0x02118a40 end:0x02118a8c diff --git a/config/jp/arm9/overlays/ov031/symbols.txt b/config/jp/arm9/overlays/ov031/symbols.txt index 8f5c75ac..bd2dc19a 100644 --- a/config/jp/arm9/overlays/ov031/symbols.txt +++ b/config/jp/arm9/overlays/ov031/symbols.txt @@ -1083,7 +1083,7 @@ _ZN19ActorProfileUnkSWON10GetProfileEv kind:function(arm,size=0xc) addr:0x020f98 _ZN19ActorProfileUnkSWON6CreateEv kind:function(arm,size=0x24) addr:0x020f980c _ZN19ActorProfileUnkSWONC1Ev kind:function(arm,size=0x28) addr:0x020f9830 _ZN12ActorUnkSWONC1Ev kind:function(arm,size=0x20) addr:0x020f9858 -_ZN12ActorUnkSWON19func_ov031_020f7e34Ev kind:function(arm,size=0x9c) addr:0x020f9878 +_ZN12ActorUnkSWON8vfunc_18Ei kind:function(arm,size=0x9c) addr:0x020f9878 _ZN12ActorUnkSWOND1Ev kind:function(arm,size=0x14) addr:0x020f9914 _ZN12ActorUnkSWOND0Ev kind:function(arm,size=0x1c) addr:0x020f9928 _ZN19ActorProfileUnkSWOND1Ev kind:function(arm,size=0x14) addr:0x020f9944 @@ -2087,7 +2087,7 @@ __sinit_ActorUnkNTTZ.cpp kind:function(arm,size=0x50) addr:0x02113358 __sinit_ov031_021133a8 kind:function(arm,size=0x24) addr:0x021133a8 __sinit_ActorUnkTGTZ.cpp kind:function(arm,size=0x80) addr:0x021133cc __sinit_ActorUnkSWCH.cpp kind:function(arm,size=0x50) addr:0x0211344c -__sinit_ActorUnkSWON.cpp kind:function(arm,size=0x50) addr:0x0211349c +__sinit_ActorUnkSWON.cpp kind:function(arm,size=0x50) addr:0x0211349c local __sinit_ActorUnkNORE.cpp kind:function(arm,size=0x50) addr:0x021134ec __sinit_ActorUnkFLEN.cpp kind:function(arm,size=0x50) addr:0x0211353c __sinit_ActorUnkRLST.cpp kind:function(arm,size=0x50) addr:0x0211358c @@ -2151,7 +2151,7 @@ __sinit_MapObjectUnkSWFS.cpp kind:function(arm,size=0x70) addr:0x021144b0 .p__sinit_ov031_021133a8 kind:data(word) addr:0x0211456c .p__sinit_ActorUnkTGTZ.cpp kind:data(word) addr:0x02114570 .p__sinit_ActorUnkSWCH.cpp kind:data(word) addr:0x02114574 -.p__sinit_ActorUnkSWON.cpp kind:data(word) addr:0x02114578 +.p__sinit_ActorUnkSWON.cpp kind:data(word) addr:0x02114578 local .p__sinit_ActorUnkNORE.cpp kind:data(word) addr:0x0211457c .p__sinit_ActorUnkFLEN.cpp kind:data(word) addr:0x02114580 .p__sinit_ActorUnkRLST.cpp kind:data(word) addr:0x02114584 @@ -2374,8 +2374,8 @@ _ZTV19data_ov031_0211658c kind:data(any) addr:0x0211658c _ZTV19data_ov031_021165b0 kind:data(any) addr:0x021165b0 data_ov031_02116614 kind:data(any) addr:0x02116614 ambiguous data_ov031_02116624 kind:data(any) addr:0x02116624 -_ZTV19data_ov031_0211662c kind:data(any) addr:0x0211662c -_ZTV19data_ov031_02116650 kind:data(any) addr:0x02116650 +_ZTV19ActorProfileUnkSWON kind:data(any) addr:0x0211662c +_ZTV12ActorUnkSWON kind:data(any) addr:0x02116650 _ZTV19ActorProfileUnkNORE kind:data(any) addr:0x021166ac _ZTV12ActorUnkNORE kind:data(any) addr:0x021166d0 _ZTV19data_ov031_0211672c kind:data(any) addr:0x0211672c @@ -2581,7 +2581,7 @@ _ZGVN15ProfileInstanceI19ActorProfileUnkSWCHE8sProfileE kind:bss addr:0x021189f4 _ZN15ProfileInstanceI19ActorProfileUnkSWCHE8sProfileE kind:bss addr:0x02118a04 data_ov031_02118a1c kind:bss addr:0x02118a1c ambiguous _ZGVN15ProfileInstanceI19ActorProfileUnkSWONE8sProfileE kind:bss addr:0x02118a40 -@30890 kind:bss addr:0x02118a44 +@30890 kind:bss addr:0x02118a44 local _ZN15ProfileInstanceI19ActorProfileUnkSWONE8sProfileE kind:bss addr:0x02118a50 _ZGVN15ProfileInstanceI19ActorProfileUnkNOREE8sProfileE kind:bss addr:0x02118a8c @30896 kind:bss addr:0x02118a90 diff --git a/include/Actor/ActorUnkSWON.hpp b/include/Actor/ActorUnkSWON.hpp index 36959a0e..540dd775 100644 --- a/include/Actor/ActorUnkSWON.hpp +++ b/include/Actor/ActorUnkSWON.hpp @@ -1,5 +1,3 @@ -//! TODO: This file was generated automatically and might contain errors - #pragma once #include "Actor/Actor.hpp" @@ -7,16 +5,6 @@ #include "global.h" #include "types.h" -class ActorUnkSWON_c4 : public Actor_c4 { -public: - ActorUnkSWON_c4(Actor *param1); - - /* 00 */ virtual unk32 vfunc_00(Actor_c4_stack param1, unk32 param2) override; - /* 04 */ virtual void vfunc_04() override; - /* 08 */ virtual void vfunc_08() override; - /* 0C */ virtual void vfunc_0c(unk32 param1) override; -}; - class ActorUnkSWON : public Actor { public: /* 00 (base) */ @@ -24,9 +12,8 @@ public: ActorUnkSWON(); + /* 18 */ virtual bool vfunc_18(unk32 param_1) override; /* 4C */ virtual ~ActorUnkSWON() override; - - void func_ov031_020f7e34(void); }; class ActorProfileUnkSWON : public ActorProfile { diff --git a/src/031_Land/Actor/ActorUnkSWON.cpp b/src/031_Land/Actor/ActorUnkSWON.cpp index 14b1e37d..b8dc9710 100644 --- a/src/031_Land/Actor/ActorUnkSWON.cpp +++ b/src/031_Land/Actor/ActorUnkSWON.cpp @@ -1,5 +1,3 @@ -//! TODO: This file was generated automatically and might contain errors - #include "Actor/ActorUnkSWON.hpp" #include "System/SysNew.hpp" @@ -14,7 +12,28 @@ ARM ActorProfileUnkSWON::ActorProfileUnkSWON() : ARM ActorUnkSWON::ActorUnkSWON() {} -ARM void ActorUnkSWON::func_ov031_020f7e34(void) {} +ARM bool ActorUnkSWON::vfunc_18(unk32 param_1) { + switch (this->mUnk_5C.mParams[0]) { + case 0x0: + if (!this->func_ov000_02098a60(0x1)) { + this->func_ov000_02098a88(0x0, 0x1); + } + this->func_ov000_020984d0(); + this->func_ov000_020984f0(); + if (this->mUnk_5C.mUnk_1C_0) { + this->func_ov000_02098a88(0x1, 0x1); + } + break; + case 0x1: + if (!this->func_ov000_02098a60(0x1)) { + this->func_ov000_02098a88(0x0, 0x1); + } + break; + default: + break; + } + return true; +} ARM ActorUnkSWON::~ActorUnkSWON() {} ARM ActorProfileUnkSWON::~ActorProfileUnkSWON() {}