From 44ba14e823fd9d67fd92166f5370683fad56f428 Mon Sep 17 00:00:00 2001 From: Aetias Date: Sat, 8 Mar 2025 11:46:49 +0100 Subject: [PATCH] Decomp `ActorForceNavi` and `ActorWisdomNavi` 100% --- config/eur/arm9/overlays/ov000/delinks.txt | 2 ++ config/eur/arm9/overlays/ov000/symbols.txt | 14 +++++++------- config/usa/arm9/overlays/ov000/delinks.txt | 4 +++- config/usa/arm9/overlays/ov000/symbols.txt | 14 +++++++------- include/Actor/Navi/ActorForceNavi.hpp | 3 +-- include/Actor/Navi/ActorNavi.hpp | 2 +- include/Actor/Navi/ActorNaviBase.hpp | 19 +++++++++++++------ include/Actor/Navi/ActorWisdomNavi.hpp | 3 +-- include/Item/ItemManager.hpp | 15 +++------------ src/00_Core/Actor/Navi/ActorForceNavi.cpp | 13 ++++++++++--- src/00_Core/Actor/Navi/ActorNavi.cpp | 2 +- src/00_Core/Actor/Navi/ActorWisdomNavi.cpp | 13 ++++++++++--- src/00_Core/Item/ItemManager.cpp | 2 +- 13 files changed, 60 insertions(+), 46 deletions(-) diff --git a/config/eur/arm9/overlays/ov000/delinks.txt b/config/eur/arm9/overlays/ov000/delinks.txt index 3cea47c4..10c98e22 100644 --- a/config/eur/arm9/overlays/ov000/delinks.txt +++ b/config/eur/arm9/overlays/ov000/delinks.txt @@ -38,6 +38,7 @@ src/00_Core/Actor/Navi/ActorNavi.cpp: .sbss start:0x020ee1a0 end:0x020ee1d8 src/00_Core/Actor/Navi/ActorForceNavi.cpp: + complete .text start:0x020b862c end:0x020b86a4 .init start:0x020e133c end:0x020e137c .ctor start:0x020e1f0c end:0x020e1f10 @@ -51,6 +52,7 @@ src/00_Core/Actor/Navi/ActorNaviBase.cpp: .sbss start:0x020ee1f8 end:0x020ee1fc src/00_Core/Actor/Navi/ActorWisdomNavi.cpp: + complete .text start:0x020c0b64 end:0x020c0bdc .init start:0x020e1b54 end:0x020e1b94 .ctor start:0x020e1f18 end:0x020e1f1c diff --git a/config/eur/arm9/overlays/ov000/symbols.txt b/config/eur/arm9/overlays/ov000/symbols.txt index b3642fb1..094ec935 100644 --- a/config/eur/arm9/overlays/ov000/symbols.txt +++ b/config/eur/arm9/overlays/ov000/symbols.txt @@ -2407,7 +2407,7 @@ _ZN24UnkStruct_ov000_020b81108vfunc_14EPt kind:function(arm,size=0xc) addr:0x20b _ZN9ActorNavi19func_ov000_020b8200Ev kind:function(arm,size=0x10) addr:0x20b8200 _ZN9ActorNavi8vfunc_c4Ev kind:function(arm,size=0x38) addr:0x20b8210 _ZN9ActorNavi8vfunc_c8Ev kind:function(arm,size=0x38) addr:0x20b8248 -_ZN9ActorNavi8vfunc_b4Ev kind:function(arm,size=0x8) addr:0x20b8280 +_ZN9ActorNavi10GetFairyIdEv kind:function(arm,size=0x8) addr:0x20b8280 _ZN9ActorNavi8vfunc_b8Ev kind:function(arm,size=0x8) addr:0x20b8288 _ZN9ActorNavi8vfunc_d4Ev kind:function(arm,size=0x2c) addr:0x20b8290 _ZN9ActorNavi8vfunc_d0Ev kind:function(arm,size=0x2c) addr:0x20b82bc @@ -2428,9 +2428,9 @@ func_ov000_020b85d8 kind:function(thumb,size=0x28) addr:0x20b85d8 func_ov000_020b8600 kind:function(arm,size=0x10) addr:0x20b8600 func_ov000_020b8610 kind:function(arm,size=0x1c) addr:0x20b8610 _ZN14ActorForceNavi6CreateEv kind:function(arm,size=0x40) addr:0x20b862c -_ZN14ActorForceNavi8vfunc_b4Ev kind:function(arm,size=0x8) addr:0x20b866c -_ZN14ActorForceNaviD1Ev kind:function(arm,size=0x1c) addr:0x20b8674 -_ZN14ActorForceNaviD0Ev kind:function(arm,size=0x14) addr:0x20b8690 +_ZN14ActorForceNavi10GetFairyIdEv kind:function(arm,size=0x8) addr:0x20b866c +_ZN14ActorForceNaviD0Ev kind:function(arm,size=0x1c) addr:0x20b8674 +_ZN14ActorForceNaviD1Ev kind:function(arm,size=0x14) addr:0x20b8690 func_ov000_020b86a4 kind:function(arm,size=0x44) addr:0x20b86a4 func_ov000_020b86e8 kind:function(arm,size=0x30) addr:0x20b86e8 func_ov000_020b8718 kind:function(arm,size=0x8) addr:0x20b8718 @@ -2697,9 +2697,9 @@ _ZN11EquipShield8vfunc_30Ev kind:function(arm,size=0x68) addr:0x20c0804 _ZN11EquipShield8vfunc_38Ei kind:function(arm,size=0x21c) addr:0x20c086c _ZNK11EquipShield9GetHitboxEP8Cylinder kind:function(arm,size=0xdc) addr:0x20c0a88 _ZN15ActorWisdomNavi6CreateEv kind:function(arm,size=0x40) addr:0x20c0b64 -_ZN15ActorWisdomNavi8vfunc_b4Ev kind:function(arm,size=0x8) addr:0x20c0ba4 -_ZN15ActorWisdomNaviD1Ev kind:function(arm,size=0x1c) addr:0x20c0bac -_ZN15ActorWisdomNaviD0Ev kind:function(arm,size=0x14) addr:0x20c0bc8 +_ZN15ActorWisdomNavi10GetFairyIdEv kind:function(arm,size=0x8) addr:0x20c0ba4 +_ZN15ActorWisdomNaviD0Ev kind:function(arm,size=0x1c) addr:0x20c0bac +_ZN15ActorWisdomNaviD1Ev kind:function(arm,size=0x14) addr:0x20c0bc8 func_ov000_020c0bdc kind:function(arm,size=0x2c) addr:0x20c0bdc func_ov000_020c0c08 kind:function(thumb,size=0x28) addr:0x20c0c08 func_ov000_020c0c30 kind:function(thumb,size=0x4) addr:0x20c0c30 diff --git a/config/usa/arm9/overlays/ov000/delinks.txt b/config/usa/arm9/overlays/ov000/delinks.txt index 95a103c2..38c29926 100644 --- a/config/usa/arm9/overlays/ov000/delinks.txt +++ b/config/usa/arm9/overlays/ov000/delinks.txt @@ -38,6 +38,7 @@ src/00_Core/Actor/Navi/ActorNavi.cpp: .sbss start:0x020ee140 end:0x020ee178 src/00_Core/Actor/Navi/ActorForceNavi.cpp: + complete .text start:0x020b85cc end:0x020b8644 .init start:0x020e12dc end:0x020e131c .ctor start:0x020e1eac end:0x020e1eb0 @@ -51,11 +52,12 @@ src/00_Core/Actor/Navi/ActorNaviBase.cpp: .sbss start:0x020ee198 end:0x020ee19c src/00_Core/Actor/Navi/ActorWisdomNavi.cpp: + complete .text start:0x020c0b04 end:0x020c0b7c .init start:0x020e1af4 end:0x020e1b34 .ctor start:0x020e1eb8 end:0x020e1ebc .data start:0x020e7038 end:0x020e7130 - .sbss start:0x020ee530 end:0x020ee53c + .sbss start:0x020ee530 end:0x020ee550 src/00_Core/Item/Item.cpp: .text start:0x020acfc0 end:0x020ad030 diff --git a/config/usa/arm9/overlays/ov000/symbols.txt b/config/usa/arm9/overlays/ov000/symbols.txt index 3de717bc..d93ee38b 100644 --- a/config/usa/arm9/overlays/ov000/symbols.txt +++ b/config/usa/arm9/overlays/ov000/symbols.txt @@ -2407,7 +2407,7 @@ _ZN24UnkStruct_ov000_020b81108vfunc_14EPt kind:function(arm,size=0xc) addr:0x20b _ZN9ActorNavi19func_ov000_020b8200Ev kind:function(arm,size=0x10) addr:0x20b81a0 _ZN9ActorNavi8vfunc_c4Ev kind:function(arm,size=0x38) addr:0x20b81b0 _ZN9ActorNavi8vfunc_c8Ev kind:function(arm,size=0x38) addr:0x20b81e8 -_ZN9ActorNavi8vfunc_b4Ev kind:function(arm,size=0x8) addr:0x20b8220 +_ZN9ActorNavi10GetFairyIdEv kind:function(arm,size=0x8) addr:0x20b8220 _ZN9ActorNavi8vfunc_b8Ev kind:function(arm,size=0x8) addr:0x20b8228 _ZN9ActorNavi8vfunc_d4Ev kind:function(arm,size=0x2c) addr:0x20b8230 _ZN9ActorNavi8vfunc_d0Ev kind:function(arm,size=0x2c) addr:0x20b825c @@ -2428,9 +2428,9 @@ func_ov000_020b85d8 kind:function(thumb,size=0x28) addr:0x20b8578 func_ov000_020b8600 kind:function(arm,size=0x10) addr:0x20b85a0 func_ov000_020b8610 kind:function(arm,size=0x1c) addr:0x20b85b0 _ZN14ActorForceNavi6CreateEv kind:function(arm,size=0x40) addr:0x20b85cc -_ZN14ActorForceNavi8vfunc_b4Ev kind:function(arm,size=0x8) addr:0x20b860c -_ZN14ActorForceNaviD1Ev kind:function(arm,size=0x1c) addr:0x20b8614 -_ZN14ActorForceNaviD0Ev kind:function(arm,size=0x14) addr:0x20b8630 +_ZN14ActorForceNavi10GetFairyIdEv kind:function(arm,size=0x8) addr:0x20b860c +_ZN14ActorForceNaviD0Ev kind:function(arm,size=0x1c) addr:0x20b8614 +_ZN14ActorForceNaviD1Ev kind:function(arm,size=0x14) addr:0x20b8630 func_ov000_020b86a4 kind:function(arm,size=0x44) addr:0x20b8644 func_ov000_020b86e8 kind:function(arm,size=0x30) addr:0x20b8688 func_ov000_020b8718 kind:function(arm,size=0x8) addr:0x20b86b8 @@ -2697,9 +2697,9 @@ _ZN11EquipShield8vfunc_30Ev kind:function(arm,size=0x68) addr:0x20c07a4 _ZN11EquipShield8vfunc_38Ei kind:function(arm,size=0x21c) addr:0x20c080c _ZNK11EquipShield9GetHitboxEP8Cylinder kind:function(arm,size=0xdc) addr:0x20c0a28 _ZN15ActorWisdomNavi6CreateEv kind:function(arm,size=0x40) addr:0x20c0b04 -_ZN15ActorWisdomNavi8vfunc_b4Ev kind:function(arm,size=0x8) addr:0x20c0b44 -_ZN15ActorWisdomNaviD1Ev kind:function(arm,size=0x1c) addr:0x20c0b4c -_ZN15ActorWisdomNaviD0Ev kind:function(arm,size=0x14) addr:0x20c0b68 +_ZN15ActorWisdomNavi10GetFairyIdEv kind:function(arm,size=0x8) addr:0x20c0b44 +_ZN15ActorWisdomNaviD0Ev kind:function(arm,size=0x1c) addr:0x20c0b4c +_ZN15ActorWisdomNaviD1Ev kind:function(arm,size=0x14) addr:0x20c0b68 func_ov000_020c0bdc kind:function(arm,size=0x2c) addr:0x20c0b7c func_ov000_020c0c08 kind:function(thumb,size=0x28) addr:0x20c0ba8 func_ov000_020c0c30 kind:function(thumb,size=0x4) addr:0x20c0bd0 diff --git a/include/Actor/Navi/ActorForceNavi.hpp b/include/Actor/Navi/ActorForceNavi.hpp index 1623e705..18a124f4 100644 --- a/include/Actor/Navi/ActorForceNavi.hpp +++ b/include/Actor/Navi/ActorForceNavi.hpp @@ -9,8 +9,7 @@ public: /* 000 (base) */ /* 294 */ - /* 00 */ virtual ~ActorForceNavi() override; - /* b4 */ virtual void vfunc_b4() override; + /* b4 */ virtual FairyId GetFairyId() override; static ActorForceNavi *Create(); }; diff --git a/include/Actor/Navi/ActorNavi.hpp b/include/Actor/Navi/ActorNavi.hpp index 0d0b2fb5..86774de4 100644 --- a/include/Actor/Navi/ActorNavi.hpp +++ b/include/Actor/Navi/ActorNavi.hpp @@ -43,7 +43,7 @@ public: /* 08 */ virtual bool vfunc_08() override; /* 20 */ virtual void vfunc_20(bool param1) override; /* 8c */ virtual bool vfunc_8c() override; - /* b4 */ virtual void vfunc_b4() override; + /* b4 */ virtual FairyId GetFairyId() override; /* b8 */ virtual s32 vfunc_b8() override; /* c0 */ virtual bool vfunc_c0(Vec3p *param1) override; /* c4 */ virtual void vfunc_c4() override; diff --git a/include/Actor/Navi/ActorNaviBase.hpp b/include/Actor/Navi/ActorNaviBase.hpp index 2af8acdf..4c2a20cf 100644 --- a/include/Actor/Navi/ActorNaviBase.hpp +++ b/include/Actor/Navi/ActorNaviBase.hpp @@ -7,6 +7,15 @@ #include "Player/EquipHammer.hpp" #include "Render/ModelRender.hpp" +typedef s32 FairyId; +enum FairyId_ { + FairyId_None = -1, + FairyId_Courage = 0, + FairyId_Power = 1, + FairyId_Wisdom = 2, + FairyId_COUNT = 3, +}; + class ActorNaviBase_Unk1 {}; class ActorNaviBase : public Actor { @@ -16,12 +25,12 @@ public: /* 164 */ unk32 mUnk_164; /* 168 */ ModelRender mUnk_168; /* 1c4 */ unk8 mUnk_1c4[0xc]; - /* 1d0 */ void *mUnk_1d0; - /* 1d4 */ unk8 mUnk_1d4[0x30]; + /* 1d0 */ unk8 mUnk_1d0[0x24]; + /* 1f4 */ unk8 mUnk_1f4[0x20]; /* 214 */ unk16 mUnk_214; /* 216 */ unk8 mUnk_216[0xc]; /* 222 */ unk16 mUnk_222; - /* 224 */ unk8 mUnk_224[0x18]; + /* 224 */ unk8 mUnk_224[0x28]; /* 24c */ unk32 mUnk_24c; /* 250 */ unk32 mUnk_250; /* 254 */ unk32 mUnk_254; @@ -51,9 +60,7 @@ public: /* 84 */ virtual void vfunc_84() override; /* 90 */ virtual bool vfunc_90() override; /* 94 */ virtual void vfunc_94() override; - /* a0 */ virtual bool TrySetTransform(Transform *transform) override; - /* b0 */ virtual void SetTransform(Transform *transform) override; - /* b4 */ virtual void vfunc_b4() = 0; + /* b4 */ virtual FairyId GetFairyId() = 0; /* b8 */ virtual s32 vfunc_b8(); /* bc */ virtual bool vfunc_bc(unk32 param1, unk8 param2, s32 param3); /* c0 */ virtual bool vfunc_c0(Vec3p *param1); diff --git a/include/Actor/Navi/ActorWisdomNavi.hpp b/include/Actor/Navi/ActorWisdomNavi.hpp index 85bce572..fb6d2641 100644 --- a/include/Actor/Navi/ActorWisdomNavi.hpp +++ b/include/Actor/Navi/ActorWisdomNavi.hpp @@ -9,8 +9,7 @@ public: /* 000 (base) */ /* 294 */ - /* 00 */ virtual ~ActorWisdomNavi() override; - /* b4 */ virtual void vfunc_b4() override; + /* b4 */ virtual FairyId GetFairyId() override; static ActorWisdomNavi *Create(); }; diff --git a/include/Item/ItemManager.hpp b/include/Item/ItemManager.hpp index c0a84aa7..9e473fc2 100644 --- a/include/Item/ItemManager.hpp +++ b/include/Item/ItemManager.hpp @@ -8,7 +8,7 @@ extern "C" { #include "nds/math.h" #include "types.h" -#include "Actor/Navi/ActorNavi.hpp" +#include "Actor/Navi/ActorNaviBase.hpp" #include "Item/Item.hpp" #include "Player/EquipItem.hpp" #include "Render/ModelRender.hpp" @@ -20,15 +20,6 @@ extern "C" { #define MAX_AMMO_UPGRADE 2 #define MAX_UNK_0BA 9 -typedef s32 FairyId; -enum FairyId_ { - FairyId_None = -1, - FairyId_Courage = 0, - FairyId_Power = 1, - FairyId_Wisdom = 2, - FairyId_COUNT = 3, -}; - typedef u32 ItemModelId; enum ItemModelId_ { ItemModelId_OshusSword, // swA @@ -66,7 +57,7 @@ private: /* 008 */ ItemFlag mForcedItem; // game crashes when any item besides this one is equipped /* 00c */ u32 mHourglassSandFrames; /* 010 */ FairyId mEquippedFairy; - /* 014 */ ActorNavi *mFairies[FairyId_COUNT]; + /* 014 */ ActorNaviBase *mFairies[FairyId_COUNT]; /* 020 */ u16 mEquipLoadTimer; /* 022 */ u16 mNumRupees; /* 024 */ u8 mNumGems[Gem_COUNT]; @@ -114,7 +105,7 @@ public: // Fairy FairyId GetEquippedFairy() const; - ActorNavi *GetFairy(FairyId id) const; + ActorNaviBase *GetFairy(FairyId id) const; u32 GetActiveFairyLevel(FairyId id) const; u32 GetFairyLevel(FairyId id) const; void SpawnFairies(); diff --git a/src/00_Core/Actor/Navi/ActorForceNavi.cpp b/src/00_Core/Actor/Navi/ActorForceNavi.cpp index 6037082d..04b83c13 100644 --- a/src/00_Core/Actor/Navi/ActorForceNavi.cpp +++ b/src/00_Core/Actor/Navi/ActorForceNavi.cpp @@ -1,7 +1,14 @@ #include "Actor/Navi/ActorForceNavi.hpp" +#pragma section sbss begin ActorType ActorForceNavi::gType = ActorType(ActorTypeId_ForceNavi, (ActorCreateFunc) ActorForceNavi::Create, NULL); +#pragma section sbss end -ActorForceNavi *ActorForceNavi::Create() {} -void ActorForceNavi::vfunc_b4() {} -ActorForceNavi::~ActorForceNavi() {} +extern u32 **data_027e0fe0[]; +ActorForceNavi *ActorForceNavi::Create() { + return new(*data_027e0fe0[0], 4) ActorForceNavi(); +} + +ARM FairyId ActorForceNavi::GetFairyId() { + return FairyId_Power; +} diff --git a/src/00_Core/Actor/Navi/ActorNavi.cpp b/src/00_Core/Actor/Navi/ActorNavi.cpp index 5c4c18f4..7c195178 100644 --- a/src/00_Core/Actor/Navi/ActorNavi.cpp +++ b/src/00_Core/Actor/Navi/ActorNavi.cpp @@ -14,7 +14,7 @@ void UnkStruct_ov000_020b8110::vfunc_14(u16 *param1) {} void ActorNavi::func_ov000_020b8200() {} void ActorNavi::vfunc_c4() {} void ActorNavi::vfunc_c8() {} -void ActorNavi::vfunc_b4() {} +FairyId ActorNavi::GetFairyId() {} s32 ActorNavi::vfunc_b8() {} void ActorNavi::vfunc_d4() {} void ActorNavi::vfunc_d0() {} diff --git a/src/00_Core/Actor/Navi/ActorWisdomNavi.cpp b/src/00_Core/Actor/Navi/ActorWisdomNavi.cpp index 2567dc03..84c02e33 100644 --- a/src/00_Core/Actor/Navi/ActorWisdomNavi.cpp +++ b/src/00_Core/Actor/Navi/ActorWisdomNavi.cpp @@ -1,7 +1,14 @@ #include "Actor/Navi/ActorWisdomNavi.hpp" +#pragma section sbss begin ActorType ActorWisdomNavi::gType = ActorType(ActorTypeId_WisdomNavi, (ActorCreateFunc) ActorWisdomNavi::Create, NULL); +#pragma section sbss end -ActorWisdomNavi *ActorWisdomNavi::Create() {} -void ActorWisdomNavi::vfunc_b4() {} -ActorWisdomNavi::~ActorWisdomNavi() {} +extern u32 **data_027e0fe0[]; +ARM ActorWisdomNavi *ActorWisdomNavi::Create() { + return new(*data_027e0fe0[0], 4) ActorWisdomNavi(); +} + +ARM FairyId ActorWisdomNavi::GetFairyId() { + return FairyId_Wisdom; +} diff --git a/src/00_Core/Item/ItemManager.cpp b/src/00_Core/Item/ItemManager.cpp index 96fbad4c..3344c74e 100644 --- a/src/00_Core/Item/ItemManager.cpp +++ b/src/00_Core/Item/ItemManager.cpp @@ -126,7 +126,7 @@ ARM FairyId ItemManager::GetEquippedFairy() const { return fairy; } -ARM ActorNavi *ItemManager::GetFairy(FairyId id) const { +ARM ActorNaviBase *ItemManager::GetFairy(FairyId id) const { return mFairies[id]; }