From 82ba3ff31176383a6cd7902aaf6e2941d039e02e Mon Sep 17 00:00:00 2001 From: mike8699 Date: Tue, 31 Dec 2024 01:21:30 -0500 Subject: [PATCH 01/23] Start decompiling `LinkStateItem` --- config/eur/arm9/overlays/ov000/symbols.txt | 2 +- config/usa/arm9/overlays/ov000/symbols.txt | 2 +- include/Save/AdventureFlags.hpp | 2 +- src/00_Core/Player/LinkStateItem.cpp | 34 ++++++++++++++++++---- src/00_Core/Save/AdventureFlags.cpp | 2 +- 5 files changed, 33 insertions(+), 9 deletions(-) diff --git a/config/eur/arm9/overlays/ov000/symbols.txt b/config/eur/arm9/overlays/ov000/symbols.txt index 8493df3d..95fde85a 100644 --- a/config/eur/arm9/overlays/ov000/symbols.txt +++ b/config/eur/arm9/overlays/ov000/symbols.txt @@ -1288,7 +1288,7 @@ _ZN14AdventureFlags3SetEjb kind:function(arm,size=0x74) addr:0x209779c _ZN14AdventureFlags18func_Ov00_02097810Ei kind:function(arm,size=0x158) addr:0x2097810 _ZN14AdventureFlags18func_ov00_02097968Ei kind:function(arm,size=0xdc) addr:0x2097968 _ZN14AdventureFlags18func_ov00_02097a44Eii kind:function(arm,size=0x158) addr:0x2097a44 -_ZN14AdventureFlags18func_ov00_02097b9cEv kind:function(arm,size=0x10) addr:0x2097b9c +_ZN14AdventureFlags18func_ov00_02097b9cEi kind:function(arm,size=0x10) addr:0x2097b9c _ZN14AdventureFlags18func_ov00_02097bacEv kind:function(arm,size=0x10) addr:0x2097bac _ZN14AdventureFlags18func_ov00_02097bbcEv kind:function(arm,size=0x10) addr:0x2097bbc _ZN14AdventureFlags18func_ov00_02097bccEv kind:function(arm,size=0x10) addr:0x2097bcc diff --git a/config/usa/arm9/overlays/ov000/symbols.txt b/config/usa/arm9/overlays/ov000/symbols.txt index 45a0c886..afb58cce 100644 --- a/config/usa/arm9/overlays/ov000/symbols.txt +++ b/config/usa/arm9/overlays/ov000/symbols.txt @@ -1288,7 +1288,7 @@ _ZN14AdventureFlags3SetEjb kind:function(arm,size=0x74) addr:0x209773c _ZN14AdventureFlags18func_Ov00_02097810Ei kind:function(arm,size=0x158) addr:0x20977b0 _ZN14AdventureFlags18func_ov00_02097968Ei kind:function(arm,size=0xdc) addr:0x2097908 _ZN14AdventureFlags18func_ov00_02097a44Eii kind:function(arm,size=0x158) addr:0x20979e4 -_ZN14AdventureFlags18func_ov00_02097b9cEv kind:function(arm,size=0x10) addr:0x2097b3c +_ZN14AdventureFlags18func_ov00_02097b9cEi kind:function(arm,size=0x10) addr:0x2097b3c _ZN14AdventureFlags18func_ov00_02097bacEv kind:function(arm,size=0x10) addr:0x2097b4c _ZN14AdventureFlags18func_ov00_02097bbcEv kind:function(arm,size=0x10) addr:0x2097b5c _ZN14AdventureFlags18func_ov00_02097bccEv kind:function(arm,size=0x10) addr:0x2097b6c diff --git a/include/Save/AdventureFlags.hpp b/include/Save/AdventureFlags.hpp index 65831d20..2a353075 100644 --- a/include/Save/AdventureFlags.hpp +++ b/include/Save/AdventureFlags.hpp @@ -92,7 +92,7 @@ public: void func_Ov00_02097810(s32 param1); unk32 func_ov00_02097968(unk32 param1); unk32 func_ov00_02097a44(unk32 param1, s32 param2); - bool func_ov00_02097b9c(); + bool func_ov00_02097b9c(s32 param1); bool func_ov00_02097bac(); bool func_ov00_02097bbc(); bool func_ov00_02097bcc(); diff --git a/src/00_Core/Player/LinkStateItem.cpp b/src/00_Core/Player/LinkStateItem.cpp index ecedca78..6719ee12 100644 --- a/src/00_Core/Player/LinkStateItem.cpp +++ b/src/00_Core/Player/LinkStateItem.cpp @@ -1,10 +1,34 @@ +#include "Item/ItemManager.hpp" #include "Player/LinkStateItem.hpp" +#include "Save/AdventureFlags.hpp" void LinkStateItem::vfunc_00() {} -LinkStateId LinkStateItem::GetId() {} -s32 LinkStateItem::IsHammerEquipped() {} + +LinkStateId LinkStateItem::GetId() { + return 1; +} + +s32 LinkStateItem::IsHammerEquipped() { + switch (this->mEquipId) { + case 8: + return 0; + default: + return -1; + } +} + void LinkStateItem::OnStateLeave(s32 param1) {} -EquipBombchu *LinkStateItem::GetEquipBombchu() {} + +EquipBombchu *LinkStateItem::GetEquipBombchu() { + return (EquipBombchu *)ItemManager::GetEquipItemUnchecked(7); +} + LinkStateMove *LinkStateItem::GetLinkStateMove() {} -bool LinkStateItem::func_ov00_020abf70() {} -bool LinkStateItem::vfunc_28() {} + +bool LinkStateItem::func_ov00_020abf70() { + return gAdventureFlags->func_ov00_02097b9c(this->mUnk_5c); +} + +bool LinkStateItem::vfunc_28() { + return this->mUnk_5c < 0; +} diff --git a/src/00_Core/Save/AdventureFlags.cpp b/src/00_Core/Save/AdventureFlags.cpp index 03bb6c76..a6a944b5 100644 --- a/src/00_Core/Save/AdventureFlags.cpp +++ b/src/00_Core/Save/AdventureFlags.cpp @@ -14,7 +14,7 @@ void AdventureFlags::Set(AdventureFlag flag, bool value) {} void AdventureFlags::func_Ov00_02097810(s32 param1) {} unk32 AdventureFlags::func_ov00_02097968(unk32 param1) {} unk32 AdventureFlags::func_ov00_02097a44(unk32 param1, s32 param2) {} -bool AdventureFlags::func_ov00_02097b9c() {} +bool AdventureFlags::func_ov00_02097b9c(s32 param1) {} bool AdventureFlags::func_ov00_02097bac() {} bool AdventureFlags::func_ov00_02097bbc() {} bool AdventureFlags::func_ov00_02097bcc() {} From f9da67860b7e6cc55bf48c251c8ecfd2bcde6369 Mon Sep 17 00:00:00 2001 From: mike8699 Date: Tue, 31 Dec 2024 15:11:25 -0500 Subject: [PATCH 02/23] Decompile `GetLinkState` arm9 function This is not part of the `LinkStateItem` class, but it is called by a method in that class. I wasn't sure the best place to put this. --- config/eur/arm9/dtcm/symbols.txt | 2 +- config/eur/arm9/itcm/symbols.txt | 2 +- config/usa/arm9/dtcm/symbols.txt | 2 +- config/usa/arm9/itcm/symbols.txt | 2 +- include/Player/LinkStateBase.hpp | 4 ++++ src/Main/Player/LinkState.cpp | 5 +++++ 6 files changed, 13 insertions(+), 4 deletions(-) create mode 100644 src/Main/Player/LinkState.cpp diff --git a/config/eur/arm9/dtcm/symbols.txt b/config/eur/arm9/dtcm/symbols.txt index 42ca4f97..f80704e7 100644 --- a/config/eur/arm9/dtcm/symbols.txt +++ b/config/eur/arm9/dtcm/symbols.txt @@ -144,7 +144,7 @@ data_027e0fce kind:bss addr:0x27e0fce data_027e0fd0 kind:bss addr:0x27e0fd0 data_027e0fd4 kind:bss addr:0x27e0fd4 data_027e0fd8 kind:bss addr:0x27e0fd8 -data_027e0fdc kind:bss addr:0x27e0fdc +gLinkStates kind:bss addr:0x27e0fdc data_027e0fe0 kind:bss addr:0x27e0fe0 gActorManager kind:bss addr:0x27e0fe4 data_027e0fe8 kind:bss addr:0x27e0fe8 diff --git a/config/eur/arm9/itcm/symbols.txt b/config/eur/arm9/itcm/symbols.txt index 7905c0b7..b8aab999 100644 --- a/config/eur/arm9/itcm/symbols.txt +++ b/config/eur/arm9/itcm/symbols.txt @@ -106,7 +106,7 @@ func_01fffb80 kind:function(arm,size=0x6c) addr:0x1fffb80 func_01fffbec kind:function(arm,size=0x58) addr:0x1fffbec func_01fffc44 kind:function(arm,size=0x50) addr:0x1fffc44 func_01fffc94 kind:function(arm,size=0x44) addr:0x1fffc94 -func_01fffcd8 kind:function(arm,size=0x14) addr:0x1fffcd8 +_Z12GetLinkStatei kind:function(arm,size=0x14) addr:0x1fffcd8 _ZN11ItemManager21GetEquipItemUncheckedEi kind:function(arm,size=0x18) addr:0x1fffcec _ZN5Actor13func_01fffd04Ei kind:function(arm,size=0x204) addr:0x1fffd04 func_01ffff08 kind:function(arm,size=0x8c) addr:0x1ffff08 diff --git a/config/usa/arm9/dtcm/symbols.txt b/config/usa/arm9/dtcm/symbols.txt index 42ca4f97..f80704e7 100644 --- a/config/usa/arm9/dtcm/symbols.txt +++ b/config/usa/arm9/dtcm/symbols.txt @@ -144,7 +144,7 @@ data_027e0fce kind:bss addr:0x27e0fce data_027e0fd0 kind:bss addr:0x27e0fd0 data_027e0fd4 kind:bss addr:0x27e0fd4 data_027e0fd8 kind:bss addr:0x27e0fd8 -data_027e0fdc kind:bss addr:0x27e0fdc +gLinkStates kind:bss addr:0x27e0fdc data_027e0fe0 kind:bss addr:0x27e0fe0 gActorManager kind:bss addr:0x27e0fe4 data_027e0fe8 kind:bss addr:0x27e0fe8 diff --git a/config/usa/arm9/itcm/symbols.txt b/config/usa/arm9/itcm/symbols.txt index 7905c0b7..b8aab999 100644 --- a/config/usa/arm9/itcm/symbols.txt +++ b/config/usa/arm9/itcm/symbols.txt @@ -106,7 +106,7 @@ func_01fffb80 kind:function(arm,size=0x6c) addr:0x1fffb80 func_01fffbec kind:function(arm,size=0x58) addr:0x1fffbec func_01fffc44 kind:function(arm,size=0x50) addr:0x1fffc44 func_01fffc94 kind:function(arm,size=0x44) addr:0x1fffc94 -func_01fffcd8 kind:function(arm,size=0x14) addr:0x1fffcd8 +_Z12GetLinkStatei kind:function(arm,size=0x14) addr:0x1fffcd8 _ZN11ItemManager21GetEquipItemUncheckedEi kind:function(arm,size=0x18) addr:0x1fffcec _ZN5Actor13func_01fffd04Ei kind:function(arm,size=0x204) addr:0x1fffd04 func_01ffff08 kind:function(arm,size=0x8c) addr:0x1ffff08 diff --git a/include/Player/LinkStateBase.hpp b/include/Player/LinkStateBase.hpp index f4591991..46038d2d 100644 --- a/include/Player/LinkStateBase.hpp +++ b/include/Player/LinkStateBase.hpp @@ -128,3 +128,7 @@ public: DebugHierarchy *GetDebugHierarchy0(); DebugHierarchy *GetDebugHierarchy1(); }; + +unk32 GetLinkState(s32 index); + +extern LinkStateBase **gLinkStates; diff --git a/src/Main/Player/LinkState.cpp b/src/Main/Player/LinkState.cpp new file mode 100644 index 00000000..316e3f50 --- /dev/null +++ b/src/Main/Player/LinkState.cpp @@ -0,0 +1,5 @@ +#include "Player/LinkStateBase.hpp" + +unk32 GetLinkState(s32 index) { + return (unk32)gLinkStates[index]; +} From be7b197c340463e9225c4180e1286b827685d783 Mon Sep 17 00:00:00 2001 From: mike8699 Date: Tue, 31 Dec 2024 15:12:32 -0500 Subject: [PATCH 03/23] Decompile `LinkStateItem::GetLinkStateMove` --- include/Player/LinkStateBase.hpp | 2 +- src/00_Core/Player/LinkStateItem.cpp | 4 +++- src/Main/Player/LinkState.cpp | 4 ++-- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/include/Player/LinkStateBase.hpp b/include/Player/LinkStateBase.hpp index 46038d2d..3371b937 100644 --- a/include/Player/LinkStateBase.hpp +++ b/include/Player/LinkStateBase.hpp @@ -129,6 +129,6 @@ public: DebugHierarchy *GetDebugHierarchy1(); }; -unk32 GetLinkState(s32 index); +LinkStateBase *GetLinkState(s32 index); extern LinkStateBase **gLinkStates; diff --git a/src/00_Core/Player/LinkStateItem.cpp b/src/00_Core/Player/LinkStateItem.cpp index 6719ee12..ade648fc 100644 --- a/src/00_Core/Player/LinkStateItem.cpp +++ b/src/00_Core/Player/LinkStateItem.cpp @@ -23,7 +23,9 @@ EquipBombchu *LinkStateItem::GetEquipBombchu() { return (EquipBombchu *)ItemManager::GetEquipItemUnchecked(7); } -LinkStateMove *LinkStateItem::GetLinkStateMove() {} +LinkStateMove *LinkStateItem::GetLinkStateMove() { + return (LinkStateMove *)GetLinkState(0); +} bool LinkStateItem::func_ov00_020abf70() { return gAdventureFlags->func_ov00_02097b9c(this->mUnk_5c); diff --git a/src/Main/Player/LinkState.cpp b/src/Main/Player/LinkState.cpp index 316e3f50..b5e5621e 100644 --- a/src/Main/Player/LinkState.cpp +++ b/src/Main/Player/LinkState.cpp @@ -1,5 +1,5 @@ #include "Player/LinkStateBase.hpp" -unk32 GetLinkState(s32 index) { - return (unk32)gLinkStates[index]; +LinkStateBase *GetLinkState(s32 index) { + return gLinkStates[index]; } From dc09e23c6068913ec96708e0e49597252043cdb6 Mon Sep 17 00:00:00 2001 From: mike8699 Date: Tue, 31 Dec 2024 16:09:11 -0500 Subject: [PATCH 04/23] Add `StopUsing` methods to several classes These are used in `LinkStateItem::OnStateLeave` --- config/eur/arm9/overlays/ov054/symbols.txt | 2 +- config/eur/arm9/overlays/ov055/symbols.txt | 2 +- config/eur/arm9/overlays/ov057/symbols.txt | 2 +- config/eur/arm9/overlays/ov059/symbols.txt | 2 +- config/usa/arm9/overlays/ov054/symbols.txt | 2 +- config/usa/arm9/overlays/ov055/symbols.txt | 2 +- config/usa/arm9/overlays/ov057/symbols.txt | 2 +- config/usa/arm9/overlays/ov059/symbols.txt | 2 +- include/Player/EquipBomb.hpp | 4 ++++ include/Player/EquipHammer.hpp | 6 +++++- include/Player/EquipRope.hpp | 3 +++ include/Player/EquipScoop.hpp | 4 ++++ 12 files changed, 24 insertions(+), 9 deletions(-) diff --git a/config/eur/arm9/overlays/ov054/symbols.txt b/config/eur/arm9/overlays/ov054/symbols.txt index 8414c258..3284e7c3 100644 --- a/config/eur/arm9/overlays/ov054/symbols.txt +++ b/config/eur/arm9/overlays/ov054/symbols.txt @@ -13,7 +13,7 @@ func_ov054_02198eec kind:function(arm,size=0x10) addr:0x2198eec func_ov054_02198efc kind:function(arm,size=0x3cc) addr:0x2198efc func_ov054_021992c8 kind:function(arm,size=0x518) addr:0x21992c8 func_ov054_021997e0 kind:function(arm,size=0x10) addr:0x21997e0 -func_ov054_021997f0 kind:function(arm,size=0xe4) addr:0x21997f0 +_ZN10EquipScoop9StopUsingEP13LinkStateItem kind:function(arm,size=0xe4) addr:0x21997f0 func_ov054_021998d4 kind:function(arm,size=0x40) addr:0x21998d4 data_ov054_02199914 kind:data(any) addr:0x2199914 func_ov054_02199924 kind:function(arm,size=0x30) addr:0x2199924 diff --git a/config/eur/arm9/overlays/ov055/symbols.txt b/config/eur/arm9/overlays/ov055/symbols.txt index 6c67528d..6a9914c3 100644 --- a/config/eur/arm9/overlays/ov055/symbols.txt +++ b/config/eur/arm9/overlays/ov055/symbols.txt @@ -5,7 +5,7 @@ func_ov055_02198da4 kind:function(arm,size=0x54) addr:0x2198da4 func_ov055_02198df8 kind:function(arm,size=0x68) addr:0x2198df8 func_ov055_02198e60 kind:function(arm,size=0x118) addr:0x2198e60 func_ov055_02198f78 kind:function(arm,size=0x18) addr:0x2198f78 -func_ov055_02198f90 kind:function(arm,size=0x80) addr:0x2198f90 +_ZN9EquipBomb9StopUsingEP13LinkStateItem kind:function(arm,size=0x80) addr:0x2198f90 func_ov055_02199010 kind:function(arm,size=0x10) addr:0x2199010 func_ov055_02199020 kind:function(arm,size=0x188) addr:0x2199020 func_ov055_021991a8 kind:function(arm,size=0x4) addr:0x21991a8 diff --git a/config/eur/arm9/overlays/ov057/symbols.txt b/config/eur/arm9/overlays/ov057/symbols.txt index 2acb6748..9b95976e 100644 --- a/config/eur/arm9/overlays/ov057/symbols.txt +++ b/config/eur/arm9/overlays/ov057/symbols.txt @@ -31,7 +31,7 @@ func_ov057_02199e64 kind:function(arm,size=0x68) addr:0x2199e64 func_ov057_02199ecc kind:function(arm,size=0x10) addr:0x2199ecc func_ov057_02199edc kind:function(arm,size=0x32c) addr:0x2199edc func_ov057_0219a208 kind:function(arm,size=0x124) addr:0x219a208 -func_ov057_0219a32c kind:function(arm,size=0x38) addr:0x219a32c +_ZN9EquipRope9StopUsingEP13LinkStateItem kind:function(arm,size=0x38) addr:0x219a32c func_ov057_0219a364 kind:function(arm,size=0x4c) addr:0x219a364 func_ov057_0219a3b0 kind:function(arm,size=0x4c) addr:0x219a3b0 func_ov057_0219a3fc kind:function(arm,size=0x64) addr:0x219a3fc diff --git a/config/eur/arm9/overlays/ov059/symbols.txt b/config/eur/arm9/overlays/ov059/symbols.txt index 67794c81..754f0f57 100644 --- a/config/eur/arm9/overlays/ov059/symbols.txt +++ b/config/eur/arm9/overlays/ov059/symbols.txt @@ -15,7 +15,7 @@ func_ov059_02198ffc kind:function(arm,size=0x80) addr:0x2198ffc func_ov059_0219907c kind:function(arm,size=0x28) addr:0x219907c func_ov059_021990a4 kind:function(arm,size=0x268) addr:0x21990a4 func_ov059_0219930c kind:function(arm,size=0x10) addr:0x219930c -func_ov059_0219931c kind:function(arm,size=0x20) addr:0x219931c +_ZN11EquipHammer9StopUsingEP13LinkStateItem kind:function(arm,size=0x20) addr:0x219931c func_ov059_0219933c kind:function(arm,size=0xd70) addr:0x219933c func_ov059_0219a0ac kind:function(arm,size=0x95c) addr:0x219a0ac func_ov059_0219aa08 kind:function(arm,size=0x1a0) addr:0x219aa08 diff --git a/config/usa/arm9/overlays/ov054/symbols.txt b/config/usa/arm9/overlays/ov054/symbols.txt index 91290893..0a781ca3 100644 --- a/config/usa/arm9/overlays/ov054/symbols.txt +++ b/config/usa/arm9/overlays/ov054/symbols.txt @@ -13,7 +13,7 @@ func_ov054_02198eec kind:function(arm,size=0x10) addr:0x2198e4c func_ov054_02198efc kind:function(arm,size=0x3cc) addr:0x2198e5c func_ov054_021992c8 kind:function(arm,size=0x518) addr:0x2199228 func_ov054_021997e0 kind:function(arm,size=0x10) addr:0x2199740 -func_ov054_021997f0 kind:function(arm,size=0xe4) addr:0x2199750 +_ZN10EquipScoop9StopUsingEP13LinkStateItem kind:function(arm,size=0xe4) addr:0x2199750 func_ov054_021998d4 kind:function(arm,size=0x40) addr:0x2199834 data_ov054_02199914 kind:data(any) addr:0x2199874 func_ov054_02199924 kind:function(arm,size=0x30) addr:0x2199884 diff --git a/config/usa/arm9/overlays/ov055/symbols.txt b/config/usa/arm9/overlays/ov055/symbols.txt index f0f12c91..79e0c8fe 100644 --- a/config/usa/arm9/overlays/ov055/symbols.txt +++ b/config/usa/arm9/overlays/ov055/symbols.txt @@ -5,7 +5,7 @@ func_ov055_02198da4 kind:function(arm,size=0x54) addr:0x2198d04 func_ov055_02198df8 kind:function(arm,size=0x68) addr:0x2198d58 func_ov055_02198e60 kind:function(arm,size=0x118) addr:0x2198dc0 func_ov055_02198f78 kind:function(arm,size=0x18) addr:0x2198ed8 -func_ov055_02198f90 kind:function(arm,size=0x80) addr:0x2198ef0 +_ZN9EquipBomb9StopUsingEP13LinkStateItem kind:function(arm,size=0x80) addr:0x2198ef0 func_ov055_02199010 kind:function(arm,size=0x10) addr:0x2198f70 func_ov055_02199020 kind:function(arm,size=0x188) addr:0x2198f80 func_ov055_021991a8 kind:function(arm,size=0x4) addr:0x2199108 diff --git a/config/usa/arm9/overlays/ov057/symbols.txt b/config/usa/arm9/overlays/ov057/symbols.txt index d846c004..de0bc77e 100644 --- a/config/usa/arm9/overlays/ov057/symbols.txt +++ b/config/usa/arm9/overlays/ov057/symbols.txt @@ -31,7 +31,7 @@ func_ov057_02199e64 kind:function(arm,size=0x68) addr:0x2199dc4 func_ov057_02199ecc kind:function(arm,size=0x10) addr:0x2199e2c func_ov057_02199edc kind:function(arm,size=0x32c) addr:0x2199e3c func_ov057_0219a208 kind:function(arm,size=0x124) addr:0x219a168 -func_ov057_0219a32c kind:function(arm,size=0x38) addr:0x219a28c +_ZN9EquipRope9StopUsingEP13LinkStateItem kind:function(arm,size=0x38) addr:0x219a28c func_ov057_0219a364 kind:function(arm,size=0x4c) addr:0x219a2c4 func_ov057_0219a3b0 kind:function(arm,size=0x4c) addr:0x219a310 func_ov057_0219a3fc kind:function(arm,size=0x64) addr:0x219a35c diff --git a/config/usa/arm9/overlays/ov059/symbols.txt b/config/usa/arm9/overlays/ov059/symbols.txt index 30043ecc..58b1b5f3 100644 --- a/config/usa/arm9/overlays/ov059/symbols.txt +++ b/config/usa/arm9/overlays/ov059/symbols.txt @@ -15,7 +15,7 @@ func_ov059_02198ffc kind:function(arm,size=0x80) addr:0x2198f5c func_ov059_0219907c kind:function(arm,size=0x28) addr:0x2198fdc func_ov059_021990a4 kind:function(arm,size=0x268) addr:0x2199004 func_ov059_0219930c kind:function(arm,size=0x10) addr:0x219926c -func_ov059_0219931c kind:function(arm,size=0x20) addr:0x219927c +_ZN11EquipHammer9StopUsingEP13LinkStateItem kind:function(arm,size=0x20) addr:0x219927c func_ov059_0219933c kind:function(arm,size=0xd70) addr:0x219929c func_ov059_0219a0ac kind:function(arm,size=0x95c) addr:0x219a00c func_ov059_0219aa08 kind:function(arm,size=0x1a0) addr:0x219a968 diff --git a/include/Player/EquipBomb.hpp b/include/Player/EquipBomb.hpp index d21e12f1..8b5fde65 100644 --- a/include/Player/EquipBomb.hpp +++ b/include/Player/EquipBomb.hpp @@ -4,6 +4,8 @@ #include "Player/EquipItem.hpp" +class LinkStateItem; + class EquipBomb : public EquipItem { private: /* 00 (base) */ @@ -26,4 +28,6 @@ public: /* 38 */ virtual void vfunc_38(unk32 param1) override; // func_ov55_2198df8 /* 50 */ virtual void vfunc_50(); // func_ov14_0213d228 /* 54 */ + + static void StopUsing(LinkStateItem *param1); }; diff --git a/include/Player/EquipHammer.hpp b/include/Player/EquipHammer.hpp index 4cf56a21..9d3f0394 100644 --- a/include/Player/EquipHammer.hpp +++ b/include/Player/EquipHammer.hpp @@ -4,6 +4,8 @@ #include "Player/EquipItem.hpp" +class LinkStateItem; + class EquipHammer : public EquipItem { private: /* 00 (base) */ @@ -29,10 +31,12 @@ public: /* 18 */ virtual void vfunc_18() override; // func_ov59_02198e3c /* 1c */ virtual void vfunc_1c() override; // func_ov59_02198e58 - /* 2c */ virtual unk32 vfunc_2c() override; // func_ov59_02198fcc + /* 2c */ virtual u32 vfunc_2c() override; // func_ov59_02198fcc /* 30 */ virtual void vfunc_30() override; // func_ov59_02198e6c /* 38 */ virtual void vfunc_38(unk32 param1) override; // func_0v59_02198fc8 /* 3c */ virtual bool GetHitbox(Cylinder *hitbox) const override; // func_ov14_0213ee10 /* 4c */ virtual s32 vfunc_4c() const override; // func_ov14_0213eea8 /* 50 */ + + static void StopUsing(LinkStateItem *param1); }; diff --git a/include/Player/EquipRope.hpp b/include/Player/EquipRope.hpp index 9eb7cdec..127eb974 100644 --- a/include/Player/EquipRope.hpp +++ b/include/Player/EquipRope.hpp @@ -15,6 +15,7 @@ struct EquipRope_Unk_18 { }; class Actor; +class LinkStateItem; class EquipRope : public EquipItem { public: @@ -59,4 +60,6 @@ public: bool func_ov14_0213dadc(s32 index, Cylinder *cylinder); s32 func_ov14_0213ddd4(Actor *actor); bool func_ov14_0213defc(Actor *actor); + + static void StopUsing(LinkStateItem *param1); }; diff --git a/include/Player/EquipScoop.hpp b/include/Player/EquipScoop.hpp index f0958df5..8c4694bc 100644 --- a/include/Player/EquipScoop.hpp +++ b/include/Player/EquipScoop.hpp @@ -4,6 +4,8 @@ #include "Player/EquipItem.hpp" +class LinkStateItem; + class EquipScoop : public EquipItem { private: /* 0 (base) */ @@ -24,4 +26,6 @@ public: /* 44 */ virtual unk32 vfunc_44(unk32 param1) const override; // func_ov54_02198d38 /* 48 */ virtual unk32 vfunc_48(unk32 param1) const override; // func_ov54_02198d48 /* 50 */ + + static void StopUsing(LinkStateItem *param1); }; From 12877211edf856fc4226cab9404c615dfa4d15ae Mon Sep 17 00:00:00 2001 From: mike8699 Date: Tue, 31 Dec 2024 16:10:05 -0500 Subject: [PATCH 05/23] [wip] decomp `LinkStateItem::OnStateLeave` --- src/00_Core/Player/LinkStateItem.cpp | 45 +++++++++++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) diff --git a/src/00_Core/Player/LinkStateItem.cpp b/src/00_Core/Player/LinkStateItem.cpp index ade648fc..646afc5d 100644 --- a/src/00_Core/Player/LinkStateItem.cpp +++ b/src/00_Core/Player/LinkStateItem.cpp @@ -1,4 +1,8 @@ #include "Item/ItemManager.hpp" +#include "Player/EquipBomb.hpp" +#include "Player/EquipHammer.hpp" +#include "Player/EquipItem.hpp" +#include "Player/EquipScoop.hpp" #include "Player/LinkStateItem.hpp" #include "Save/AdventureFlags.hpp" @@ -17,7 +21,46 @@ s32 LinkStateItem::IsHammerEquipped() { } } -void LinkStateItem::OnStateLeave(s32 param1) {} +void LinkStateItem::OnStateLeave(s32 param1) { + EquipItem *pEVar1; + LinkStateMove *pLVar2; + s32 iVar3; + unk32 *puVar4; + + LinkStateBase::OnStateLeave(param1); + + switch(this->mEquipId) { + case 0: + break; + case 1: + break; + case 2: + break; + case 3: + EquipScoop::StopUsing(this); + break; + case 4: + EquipBomb::StopUsing(this); + break; + case 5: + break; + case 6: + EquipRope::StopUsing(this); + break; + case 7: + // TODO + break; + case 8: + EquipHammer::StopUsing(this); + break; + case 9: + case 10: + // TODO + break; + } + + this->mNextEquip = 0xffffffff; +} EquipBombchu *LinkStateItem::GetEquipBombchu() { return (EquipBombchu *)ItemManager::GetEquipItemUnchecked(7); From bf43adef41ba02c860f05fc17e577089c8b5c1dc Mon Sep 17 00:00:00 2001 From: mike8699 Date: Wed, 1 Jan 2025 21:12:01 -0500 Subject: [PATCH 06/23] LinkStateItem::OnStateLeave 71% match --- config/eur/arm9/overlays/ov000/symbols.txt | 6 +- config/eur/arm9/overlays/ov014/symbols.txt | 4 +- config/usa/arm9/overlays/ov000/symbols.txt | 6 +- config/usa/arm9/overlays/ov014/symbols.txt | 4 +- src/00_Core/Player/LinkStateItem.cpp | 100 +++++++++++++-------- 5 files changed, 75 insertions(+), 45 deletions(-) diff --git a/config/eur/arm9/overlays/ov000/symbols.txt b/config/eur/arm9/overlays/ov000/symbols.txt index 95fde85a..63208160 100644 --- a/config/eur/arm9/overlays/ov000/symbols.txt +++ b/config/eur/arm9/overlays/ov000/symbols.txt @@ -2387,7 +2387,7 @@ func_ov000_020b7d4c kind:function(arm,size=0x20) addr:0x20b7d4c func_ov000_020b7d6c kind:function(arm,size=0x8) addr:0x20b7d6c func_ov000_020b7d74 kind:function(arm,size=0x7c) addr:0x20b7d74 func_ov000_020b7df0 kind:function(arm,size=0x7c) addr:0x20b7df0 -func_ov000_020b7e6c kind:function(arm,size=0x38) addr:0x20b7e6c +_Z19func_ov000_020b7e6cPi kind:function(arm,size=0x38) addr:0x20b7e6c func_ov000_020b7ea4 kind:function(arm,size=0x20) addr:0x20b7ea4 func_ov000_020b7ec4 kind:function(thumb,size=0x24) addr:0x20b7ec4 func_ov000_020b7ee8 kind:function(arm,size=0x40) addr:0x20b7ee8 @@ -3240,7 +3240,7 @@ func_ov000_020cef9c kind:function(arm,size=0x20) addr:0x20cef9c func_ov000_020cefbc kind:function(arm,size=0x20) addr:0x20cefbc func_ov000_020cefdc kind:function(arm,size=0x20) addr:0x20cefdc func_ov000_020ceffc kind:function(arm,size=0x20) addr:0x20ceffc -func_ov000_020cf01c kind:function(arm,size=0x20) addr:0x20cf01c +_Z19func_ov000_020cf01cPi kind:function(arm,size=0x20) addr:0x20cf01c func_ov000_020cf03c kind:function(arm,size=0x20) addr:0x20cf03c func_ov000_020cf05c kind:function(arm,size=0x20) addr:0x20cf05c func_ov000_020cf07c kind:function(arm,size=0x20) addr:0x20cf07c @@ -3288,7 +3288,7 @@ func_ov000_020cf7e8 kind:function(arm,size=0x7c) addr:0x20cf7e8 func_ov000_020cf864 kind:function(arm,size=0x98) addr:0x20cf864 func_ov000_020cf8fc kind:function(arm,size=0x4c) addr:0x20cf8fc func_ov000_020cf948 kind:function(arm,size=0x94) addr:0x20cf948 -func_ov000_020cf9dc kind:function(arm,size=0x48) addr:0x20cf9dc +_Z19func_ov000_020cf9dciii kind:function(arm,size=0x48) addr:0x20cf9dc func_ov000_020cfa24 kind:function(arm,size=0x40) addr:0x20cfa24 func_ov000_020cfa64 kind:function(arm,size=0xc) addr:0x20cfa64 func_ov000_020cfa70 kind:function(arm,size=0x40) addr:0x20cfa70 diff --git a/config/eur/arm9/overlays/ov014/symbols.txt b/config/eur/arm9/overlays/ov014/symbols.txt index d53f225f..2b0034c8 100644 --- a/config/eur/arm9/overlays/ov014/symbols.txt +++ b/config/eur/arm9/overlays/ov014/symbols.txt @@ -8,7 +8,7 @@ func_ov014_0211f980 kind:function(arm,size=0x130) addr:0x211f980 func_ov014_0211fab0 kind:function(arm,size=0x1dc) addr:0x211fab0 func_ov014_0211fc8c kind:function(arm,size=0x50) addr:0x211fc8c func_ov014_0211fcdc kind:function(thumb,size=0x28) addr:0x211fcdc -func_ov014_0211fd04 kind:function(thumb,size=0x4c) addr:0x211fd04 +_Z19func_ov014_0211fd04i kind:function(thumb,size=0x4c) addr:0x211fd04 func_ov014_0211fd50 kind:function(arm,size=0x30) addr:0x211fd50 func_ov014_0211fd80 kind:function(arm,size=0x10) addr:0x211fd80 func_ov014_0211fd90 kind:function(arm,size=0x14) addr:0x211fd90 @@ -917,7 +917,7 @@ func_ov014_0213eb5c kind:function(thumb,size=0x20) addr:0x213eb5c func_ov014_0213eb7c kind:function(thumb,size=0x28) addr:0x213eb7c func_ov014_0213eba4 kind:function(arm,size=0x9c) addr:0x213eba4 func_ov014_0213ec40 kind:function(arm,size=0x24) addr:0x213ec40 -func_ov014_0213ec64 kind:function(arm,size=0x48) addr:0x213ec64 +_Z19func_ov014_0213ec64i kind:function(arm,size=0x48) addr:0x213ec64 func_ov014_0213ecac kind:function(arm,size=0x8) addr:0x213ecac func_ov014_0213ecb4 kind:function(arm,size=0xc0) addr:0x213ecb4 func_ov014_0213ed74 kind:function(arm,size=0x20) addr:0x213ed74 diff --git a/config/usa/arm9/overlays/ov000/symbols.txt b/config/usa/arm9/overlays/ov000/symbols.txt index afb58cce..b8a5116b 100644 --- a/config/usa/arm9/overlays/ov000/symbols.txt +++ b/config/usa/arm9/overlays/ov000/symbols.txt @@ -2387,7 +2387,7 @@ func_ov000_020b7d4c kind:function(arm,size=0x20) addr:0x20b7cec func_ov000_020b7d6c kind:function(arm,size=0x8) addr:0x20b7d0c func_ov000_020b7d74 kind:function(arm,size=0x7c) addr:0x20b7d14 func_ov000_020b7df0 kind:function(arm,size=0x7c) addr:0x20b7d90 -func_ov000_020b7e6c kind:function(arm,size=0x38) addr:0x20b7e0c +_Z19func_ov000_020b7e6cPi kind:function(arm,size=0x38) addr:0x20b7e0c func_ov000_020b7ea4 kind:function(arm,size=0x20) addr:0x20b7e44 func_ov000_020b7ec4 kind:function(thumb,size=0x24) addr:0x20b7e64 func_ov000_020b7ee8 kind:function(arm,size=0x40) addr:0x20b7e88 @@ -3240,7 +3240,7 @@ func_ov000_020cef9c kind:function(arm,size=0x20) addr:0x20cef3c func_ov000_020cefbc kind:function(arm,size=0x20) addr:0x20cef5c func_ov000_020cefdc kind:function(arm,size=0x20) addr:0x20cef7c func_ov000_020ceffc kind:function(arm,size=0x20) addr:0x20cef9c -func_ov000_020cf01c kind:function(arm,size=0x20) addr:0x20cefbc +_Z19func_ov000_020cf01cPi kind:function(arm,size=0x20) addr:0x20cefbc func_ov000_020cf03c kind:function(arm,size=0x20) addr:0x20cefdc func_ov000_020cf05c kind:function(arm,size=0x20) addr:0x20ceffc func_ov000_020cf07c kind:function(arm,size=0x20) addr:0x20cf01c @@ -3288,7 +3288,7 @@ func_ov000_020cf7e8 kind:function(arm,size=0x7c) addr:0x20cf788 func_ov000_020cf864 kind:function(arm,size=0x98) addr:0x20cf804 func_ov000_020cf8fc kind:function(arm,size=0x4c) addr:0x20cf89c func_ov000_020cf948 kind:function(arm,size=0x94) addr:0x20cf8e8 -func_ov000_020cf9dc kind:function(arm,size=0x48) addr:0x20cf97c +_Z19func_ov000_020cf9dciii kind:function(arm,size=0x48) addr:0x20cf97c func_ov000_020cfa24 kind:function(arm,size=0x40) addr:0x20cf9c4 func_ov000_020cfa64 kind:function(arm,size=0xc) addr:0x20cfa04 func_ov000_020cfa70 kind:function(arm,size=0x40) addr:0x20cfa10 diff --git a/config/usa/arm9/overlays/ov014/symbols.txt b/config/usa/arm9/overlays/ov014/symbols.txt index 028839a5..a9587106 100644 --- a/config/usa/arm9/overlays/ov014/symbols.txt +++ b/config/usa/arm9/overlays/ov014/symbols.txt @@ -8,7 +8,7 @@ func_ov014_0211f980 kind:function(arm,size=0x130) addr:0x211f900 func_ov014_0211fab0 kind:function(arm,size=0x1dc) addr:0x211fa30 func_ov014_0211fc8c kind:function(arm,size=0x50) addr:0x211fc0c func_ov014_0211fcdc kind:function(thumb,size=0x28) addr:0x211fc5c -func_ov014_0211fd04 kind:function(thumb,size=0x4c) addr:0x211fc84 +_Z19func_ov014_0211fd04i kind:function(thumb,size=0x4c) addr:0x211fc84 func_ov014_0211fd50 kind:function(arm,size=0x30) addr:0x211fcd0 func_ov014_0211fd80 kind:function(arm,size=0x10) addr:0x211fd00 func_ov014_0211fd90 kind:function(arm,size=0x14) addr:0x211fd10 @@ -917,7 +917,7 @@ func_ov014_0213eb5c kind:function(thumb,size=0x20) addr:0x213eab8 func_ov014_0213eb7c kind:function(thumb,size=0x28) addr:0x213ead8 func_ov014_0213eba4 kind:function(arm,size=0x9c) addr:0x213eb00 func_ov014_0213ec40 kind:function(arm,size=0x24) addr:0x213eb9c -func_ov014_0213ec64 kind:function(arm,size=0x48) addr:0x213ebc0 +_Z19func_ov014_0213ec64i kind:function(arm,size=0x48) addr:0x213ebc0 func_ov014_0213ecac kind:function(arm,size=0x8) addr:0x213ec08 func_ov014_0213ecb4 kind:function(arm,size=0xc0) addr:0x213ec10 func_ov014_0213ed74 kind:function(arm,size=0x20) addr:0x213ecd0 diff --git a/src/00_Core/Player/LinkStateItem.cpp b/src/00_Core/Player/LinkStateItem.cpp index 646afc5d..83bc9dd6 100644 --- a/src/00_Core/Player/LinkStateItem.cpp +++ b/src/00_Core/Player/LinkStateItem.cpp @@ -4,8 +4,15 @@ #include "Player/EquipItem.hpp" #include "Player/EquipScoop.hpp" #include "Player/LinkStateItem.hpp" +#include "Player/PlayerControl.hpp" #include "Save/AdventureFlags.hpp" +extern unk32 func_ov000_020cf01c(s32 *param1); +extern void func_ov000_020cf9dc(s32 param1, s32 param2, s32 param3); +extern void func_ov014_0213ec64(s32 param1); +extern void func_ov014_0211fd04(s32 param1); +extern void func_ov000_020b7e6c(s32 *param1); + void LinkStateItem::vfunc_00() {} LinkStateId LinkStateItem::GetId() { @@ -21,45 +28,68 @@ s32 LinkStateItem::IsHammerEquipped() { } } + void LinkStateItem::OnStateLeave(s32 param1) { - EquipItem *pEVar1; - LinkStateMove *pLVar2; - s32 iVar3; - unk32 *puVar4; + EquipItem *pEVar1; + LinkStateMove *pLVar2; + s32 iVar3; + unk32 *puVar4; + unk32 *puVar5; - LinkStateBase::OnStateLeave(param1); + LinkStateBase::OnStateLeave(param1); - switch(this->mEquipId) { - case 0: - break; - case 1: - break; - case 2: - break; - case 3: - EquipScoop::StopUsing(this); - break; - case 4: - EquipBomb::StopUsing(this); - break; - case 5: - break; - case 6: - EquipRope::StopUsing(this); - break; - case 7: - // TODO - break; - case 8: - EquipHammer::StopUsing(this); - break; - case 9: - case 10: - // TODO - break; - } + switch (this->mEquipId) { + case 0: break; + case 1: break; + case 2: break; + case 3: EquipScoop::StopUsing(this); break; + case 4: EquipBomb::StopUsing(this); break; + case 5: break; + case 6: EquipRope::StopUsing(this); break; + case 7: + /* bombchu */ + iVar3 = func_ov000_020cf01c((s32 *) (*(s32 *) 0x20abf44)); + if (*(char *) (iVar3 + 0xe0) == '\0') { + func_ov014_0213ec64((s32) GetEquipBombchu()); + } + func_ov014_0211fd04(*(s32 *) (0x20abf48)); + break; + case 8: EquipHammer::StopUsing(this); break; + case 9: + case 10: + iVar3 = *(int *) (0x20abf44); + *(unk8 *) (iVar3 + 0x2a) = 0; + func_ov000_020cf9dc(iVar3, 0, 0); + } - this->mNextEquip = 0xffffffff; + if (this->mEquipId != -1) { + pEVar1 = this->GetEquipItem(this->mEquipId); + pEVar1->vfunc_1c(); + } + + if ((this->mEquipId <= 9 && this->mEquipId >= 9) || (this->mEquipId <= 1 && this->mEquipId >= -1)) { + this->EquipItem_vfunc_28(); + } else { + this->EquipItem_vfunc_28(); + + if (param1 != 4 && param1 != 2) { + pLVar2 = this->GetLinkStateMove(); + pLVar2->mUnk_14 = true; + } + } + + this->mNextEquip = 0xffffffff; + + puVar4 = (unk32 *) this + 20; + puVar5 = (unk32 *) this + 22; + for (; puVar4 != puVar5; puVar4 = puVar4 + 4) { + func_ov000_020b7e6c(puVar4); + } + if (gPlayerControl->mUnk_80 != false) { + gPlayerControl->StopFollowing(); + } + this->mUnk_25[1] = 0; + return; } EquipBombchu *LinkStateItem::GetEquipBombchu() { From c3ac80ab600b002e0d1702659e151c9e3276df04 Mon Sep 17 00:00:00 2001 From: mike8699 Date: Wed, 1 Jan 2025 21:52:01 -0500 Subject: [PATCH 07/23] LinkStateItem::OnStateLeave 88% match --- src/00_Core/Player/LinkStateItem.cpp | 30 +++++++++++++++------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/src/00_Core/Player/LinkStateItem.cpp b/src/00_Core/Player/LinkStateItem.cpp index 83bc9dd6..2c447778 100644 --- a/src/00_Core/Player/LinkStateItem.cpp +++ b/src/00_Core/Player/LinkStateItem.cpp @@ -39,27 +39,28 @@ void LinkStateItem::OnStateLeave(s32 param1) { LinkStateBase::OnStateLeave(param1); switch (this->mEquipId) { - case 0: break; - case 1: break; - case 2: break; - case 3: EquipScoop::StopUsing(this); break; - case 4: EquipBomb::StopUsing(this); break; - case 5: break; - case 6: EquipRope::StopUsing(this); break; case 7: - /* bombchu */ + /* bombchu */ iVar3 = func_ov000_020cf01c((s32 *) (*(s32 *) 0x20abf44)); - if (*(char *) (iVar3 + 0xe0) == '\0') { + if (*(u8 *) (iVar3 + 0xe0) == '\0') { func_ov014_0213ec64((s32) GetEquipBombchu()); } func_ov014_0211fd04(*(s32 *) (0x20abf48)); break; - case 8: EquipHammer::StopUsing(this); break; case 9: + case 0: break; + case 1: break; + case 2: break; + case 4: EquipBomb::StopUsing(this); break; + case 5: break; + case 6: EquipRope::StopUsing(this); break; + case 8: EquipHammer::StopUsing(this); break; case 10: iVar3 = *(int *) (0x20abf44); *(unk8 *) (iVar3 + 0x2a) = 0; func_ov000_020cf9dc(iVar3, 0, 0); + break; + case 3: EquipScoop::StopUsing(this); break; } if (this->mEquipId != -1) { @@ -67,13 +68,14 @@ void LinkStateItem::OnStateLeave(s32 param1) { pEVar1->vfunc_1c(); } - if ((this->mEquipId <= 9 && this->mEquipId >= 9) || (this->mEquipId <= 1 && this->mEquipId >= -1)) { - this->EquipItem_vfunc_28(); - } else { + if ((this->mEquipId <= 9 && this->mEquipId >= 9) || (this->mEquipId <= 1 && this->mEquipId >= -1) && (this->mEquipId != -1 && this->mEquipId != 0 && this->mEquipId != 1)) { + if (this->mEquipId == 10) this->EquipItem_vfunc_28(); + } + else { this->EquipItem_vfunc_28(); if (param1 != 4 && param1 != 2) { - pLVar2 = this->GetLinkStateMove(); + pLVar2 = this->GetLinkStateMove(); pLVar2->mUnk_14 = true; } } From ae2062bb589f7df214464d67c546246c368ddccb Mon Sep 17 00:00:00 2001 From: mike8699 Date: Wed, 1 Jan 2025 22:17:28 -0500 Subject: [PATCH 08/23] Properly define static methods as static --- include/Player/LinkStateItem.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/Player/LinkStateItem.hpp b/include/Player/LinkStateItem.hpp index 591614f2..b7877502 100644 --- a/include/Player/LinkStateItem.hpp +++ b/include/Player/LinkStateItem.hpp @@ -47,7 +47,7 @@ public: /* 44 */ s32 IsHammerEquipped(); // returns 0 if hammer is equipped, otherwise -1 - EquipBombchu *GetEquipBombchu(); - LinkStateMove *GetLinkStateMove(); + static EquipBombchu *GetEquipBombchu(); + static LinkStateMove *GetLinkStateMove(); bool func_ov00_020abf70(); }; From 11a3df2d99a16600d40a04da43122bd12b6e3b92 Mon Sep 17 00:00:00 2001 From: mike8699 Date: Wed, 1 Jan 2025 22:20:00 -0500 Subject: [PATCH 09/23] Update `EquipBomb::StopUsing` method signature This method has an additional argument. --- config/eur/arm9/overlays/ov055/symbols.txt | 2 +- config/usa/arm9/overlays/ov055/symbols.txt | 2 +- include/Player/EquipBomb.hpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/config/eur/arm9/overlays/ov055/symbols.txt b/config/eur/arm9/overlays/ov055/symbols.txt index 6a9914c3..f060b1b3 100644 --- a/config/eur/arm9/overlays/ov055/symbols.txt +++ b/config/eur/arm9/overlays/ov055/symbols.txt @@ -5,7 +5,7 @@ func_ov055_02198da4 kind:function(arm,size=0x54) addr:0x2198da4 func_ov055_02198df8 kind:function(arm,size=0x68) addr:0x2198df8 func_ov055_02198e60 kind:function(arm,size=0x118) addr:0x2198e60 func_ov055_02198f78 kind:function(arm,size=0x18) addr:0x2198f78 -_ZN9EquipBomb9StopUsingEP13LinkStateItem kind:function(arm,size=0x80) addr:0x2198f90 +_ZN9EquipBomb9StopUsingEP13LinkStateItemi kind:function(arm,size=0x80) addr:0x2198f90 func_ov055_02199010 kind:function(arm,size=0x10) addr:0x2199010 func_ov055_02199020 kind:function(arm,size=0x188) addr:0x2199020 func_ov055_021991a8 kind:function(arm,size=0x4) addr:0x21991a8 diff --git a/config/usa/arm9/overlays/ov055/symbols.txt b/config/usa/arm9/overlays/ov055/symbols.txt index 79e0c8fe..8569f1af 100644 --- a/config/usa/arm9/overlays/ov055/symbols.txt +++ b/config/usa/arm9/overlays/ov055/symbols.txt @@ -5,7 +5,7 @@ func_ov055_02198da4 kind:function(arm,size=0x54) addr:0x2198d04 func_ov055_02198df8 kind:function(arm,size=0x68) addr:0x2198d58 func_ov055_02198e60 kind:function(arm,size=0x118) addr:0x2198dc0 func_ov055_02198f78 kind:function(arm,size=0x18) addr:0x2198ed8 -_ZN9EquipBomb9StopUsingEP13LinkStateItem kind:function(arm,size=0x80) addr:0x2198ef0 +_ZN9EquipBomb9StopUsingEP13LinkStateItemi kind:function(arm,size=0x80) addr:0x2198ef0 func_ov055_02199010 kind:function(arm,size=0x10) addr:0x2198f70 func_ov055_02199020 kind:function(arm,size=0x188) addr:0x2198f80 func_ov055_021991a8 kind:function(arm,size=0x4) addr:0x2199108 diff --git a/include/Player/EquipBomb.hpp b/include/Player/EquipBomb.hpp index 8b5fde65..9eb26ec9 100644 --- a/include/Player/EquipBomb.hpp +++ b/include/Player/EquipBomb.hpp @@ -29,5 +29,5 @@ public: /* 50 */ virtual void vfunc_50(); // func_ov14_0213d228 /* 54 */ - static void StopUsing(LinkStateItem *param1); + static void StopUsing(LinkStateItem *param1, unk32 param2); }; From 200a68b3de85ed98e5b07b33abce3fe930428828 Mon Sep 17 00:00:00 2001 From: mike8699 Date: Wed, 1 Jan 2025 22:31:14 -0500 Subject: [PATCH 10/23] LinkStateItem::OnStateLeave 92% match --- src/00_Core/Player/LinkStateItem.cpp | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/src/00_Core/Player/LinkStateItem.cpp b/src/00_Core/Player/LinkStateItem.cpp index 2c447778..4b85f21b 100644 --- a/src/00_Core/Player/LinkStateItem.cpp +++ b/src/00_Core/Player/LinkStateItem.cpp @@ -51,7 +51,7 @@ void LinkStateItem::OnStateLeave(s32 param1) { case 0: break; case 1: break; case 2: break; - case 4: EquipBomb::StopUsing(this); break; + case 4: EquipBomb::StopUsing(this, param1); break; case 5: break; case 6: EquipRope::StopUsing(this); break; case 8: EquipHammer::StopUsing(this); break; @@ -68,16 +68,22 @@ void LinkStateItem::OnStateLeave(s32 param1) { pEVar1->vfunc_1c(); } - if ((this->mEquipId <= 9 && this->mEquipId >= 9) || (this->mEquipId <= 1 && this->mEquipId >= -1) && (this->mEquipId != -1 && this->mEquipId != 0 && this->mEquipId != 1)) { - if (this->mEquipId == 10) this->EquipItem_vfunc_28(); - } - else { - this->EquipItem_vfunc_28(); - - if (param1 != 4 && param1 != 2) { - pLVar2 = this->GetLinkStateMove(); - pLVar2->mUnk_14 = true; - } + switch (this->mEquipId) { + case -1: + case 0: + break; + case 1: + break; + case 9: + case 10: + this->EquipItem_vfunc_28(); + break; + default: + this->EquipItem_vfunc_28(); + if (param1 != 4 && param1 != 2) { + pLVar2 = this->GetLinkStateMove(); + pLVar2->mUnk_14 = true; + } } this->mNextEquip = 0xffffffff; From 4ab7b47bcd874e322a57ca84da31273939bcdd96 Mon Sep 17 00:00:00 2001 From: mike8699 Date: Wed, 1 Jan 2025 22:47:13 -0500 Subject: [PATCH 11/23] Add arm/thumb macros --- src/00_Core/Player/LinkStateItem.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/00_Core/Player/LinkStateItem.cpp b/src/00_Core/Player/LinkStateItem.cpp index 4b85f21b..7fe96734 100644 --- a/src/00_Core/Player/LinkStateItem.cpp +++ b/src/00_Core/Player/LinkStateItem.cpp @@ -13,13 +13,13 @@ extern void func_ov014_0213ec64(s32 param1); extern void func_ov014_0211fd04(s32 param1); extern void func_ov000_020b7e6c(s32 *param1); -void LinkStateItem::vfunc_00() {} +THUMB void LinkStateItem::vfunc_00() {} -LinkStateId LinkStateItem::GetId() { +ARM LinkStateId LinkStateItem::GetId() { return 1; } -s32 LinkStateItem::IsHammerEquipped() { +ARM s32 LinkStateItem::IsHammerEquipped() { switch (this->mEquipId) { case 8: return 0; @@ -29,7 +29,7 @@ s32 LinkStateItem::IsHammerEquipped() { } -void LinkStateItem::OnStateLeave(s32 param1) { +ARM void LinkStateItem::OnStateLeave(s32 param1) { EquipItem *pEVar1; LinkStateMove *pLVar2; s32 iVar3; @@ -100,18 +100,18 @@ void LinkStateItem::OnStateLeave(s32 param1) { return; } -EquipBombchu *LinkStateItem::GetEquipBombchu() { +ARM EquipBombchu *LinkStateItem::GetEquipBombchu() { return (EquipBombchu *)ItemManager::GetEquipItemUnchecked(7); } -LinkStateMove *LinkStateItem::GetLinkStateMove() { +ARM LinkStateMove *LinkStateItem::GetLinkStateMove() { return (LinkStateMove *)GetLinkState(0); } -bool LinkStateItem::func_ov00_020abf70() { +ARM bool LinkStateItem::func_ov00_020abf70() { return gAdventureFlags->func_ov00_02097b9c(this->mUnk_5c); } -bool LinkStateItem::vfunc_28() { +ARM bool LinkStateItem::vfunc_28() { return this->mUnk_5c < 0; } From d2d3b6b75fa8697069d0d546ef813f85d795447f Mon Sep 17 00:00:00 2001 From: mike8699 Date: Thu, 2 Jan 2025 14:50:12 -0500 Subject: [PATCH 12/23] Use -1 instead of 0xfffffff --- src/00_Core/Player/LinkStateItem.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/00_Core/Player/LinkStateItem.cpp b/src/00_Core/Player/LinkStateItem.cpp index 7fe96734..93c1e336 100644 --- a/src/00_Core/Player/LinkStateItem.cpp +++ b/src/00_Core/Player/LinkStateItem.cpp @@ -86,7 +86,7 @@ ARM void LinkStateItem::OnStateLeave(s32 param1) { } } - this->mNextEquip = 0xffffffff; + this->mNextEquip = -1; puVar4 = (unk32 *) this + 20; puVar5 = (unk32 *) this + 22; From 13735059033c8bd5ca4ef1f2c983200ef1d310bb Mon Sep 17 00:00:00 2001 From: mike8699 Date: Thu, 2 Jan 2025 19:48:47 -0500 Subject: [PATCH 13/23] Add rest of LinkStateItem methods to symbols --- config/eur/arm9/overlays/ov004/symbols.txt | 4 ++-- config/eur/arm9/overlays/ov005/symbols.txt | 8 ++++---- config/usa/arm9/overlays/ov004/symbols.txt | 4 ++-- config/usa/arm9/overlays/ov005/symbols.txt | 8 ++++---- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/config/eur/arm9/overlays/ov004/symbols.txt b/config/eur/arm9/overlays/ov004/symbols.txt index b260299b..342ac90f 100644 --- a/config/eur/arm9/overlays/ov004/symbols.txt +++ b/config/eur/arm9/overlays/ov004/symbols.txt @@ -264,8 +264,8 @@ func_ov004_02109968 kind:function(thumb,size=0x48) addr:0x2109968 func_ov004_021099b0 kind:function(thumb,size=0x5c) addr:0x21099b0 func_ov004_02109a0c kind:function(thumb,size=0x4c) addr:0x2109a0c func_ov004_02109a58 kind:function(thumb,size=0x90) addr:0x2109a58 -func_ov004_02109ae8 kind:function(thumb,size=0x20) addr:0x2109ae8 -func_ov004_02109b08 kind:function(thumb,size=0x24) addr:0x2109b08 +_ZN13LinkStateItemD1Ev kind:function(thumb,size=0x20) addr:0x2109ae8 +_ZN13LinkStateItemD0Ev kind:function(thumb,size=0x24) addr:0x2109b08 func_ov004_02109b2c kind:function(thumb,size=0x4c) addr:0x2109b2c func_ov004_02109b78 kind:function(thumb,size=0x234) addr:0x2109b78 func_ov004_02109dac kind:function(thumb,size=0x64) addr:0x2109dac diff --git a/config/eur/arm9/overlays/ov005/symbols.txt b/config/eur/arm9/overlays/ov005/symbols.txt index dd5f1700..81547f61 100644 --- a/config/eur/arm9/overlays/ov005/symbols.txt +++ b/config/eur/arm9/overlays/ov005/symbols.txt @@ -126,12 +126,12 @@ func_ov005_02104f28 kind:function(arm,size=0x218) addr:0x2104f28 func_ov005_02105140 kind:function(arm,size=0x1c4) addr:0x2105140 func_ov005_02105304 kind:function(arm,size=0x58) addr:0x2105304 func_ov005_0210535c kind:function(arm,size=0xb0) addr:0x210535c -func_ov005_0210540c kind:function(arm,size=0x1c4) addr:0x210540c +_ZN13LinkStateItem12OnStateEnterEv kind:function(arm,size=0x1c4) addr:0x210540c func_ov005_021055d0 kind:function(arm,size=0x10) addr:0x21055d0 -func_ov005_021055e0 kind:function(arm,size=0x90) addr:0x21055e0 -func_ov005_02105670 kind:function(arm,size=0x144) addr:0x2105670 +_ZN13LinkStateItem8vfunc_1cEv kind:function(arm,size=0x90) addr:0x21055e0 +_ZN13LinkStateItem8vfunc_20Ei kind:function(arm,size=0x144) addr:0x2105670 func_ov005_021057b4 kind:function(arm,size=0x10) addr:0x21057b4 -func_ov005_021057c4 kind:function(arm,size=0x8c) addr:0x21057c4 +_ZN13LinkStateItem8vfunc_24Ei kind:function(arm,size=0x8c) addr:0x21057c4 func_ov005_02105850 kind:function(arm,size=0x3d8) addr:0x2105850 func_ov005_02105c28 kind:function(arm,size=0x15c) addr:0x2105c28 func_ov005_02105d84 kind:function(arm,size=0x10) addr:0x2105d84 diff --git a/config/usa/arm9/overlays/ov004/symbols.txt b/config/usa/arm9/overlays/ov004/symbols.txt index 37276c76..bcb51beb 100644 --- a/config/usa/arm9/overlays/ov004/symbols.txt +++ b/config/usa/arm9/overlays/ov004/symbols.txt @@ -264,8 +264,8 @@ func_ov004_02109968 kind:function(thumb,size=0x48) addr:0x21098e8 func_ov004_021099b0 kind:function(thumb,size=0x5c) addr:0x2109930 func_ov004_02109a0c kind:function(thumb,size=0x4c) addr:0x210998c func_ov004_02109a58 kind:function(thumb,size=0x90) addr:0x21099d8 -func_ov004_02109ae8 kind:function(thumb,size=0x20) addr:0x2109a68 -func_ov004_02109b08 kind:function(thumb,size=0x24) addr:0x2109a88 +_ZN13LinkStateItemD1Ev kind:function(thumb,size=0x20) addr:0x2109a68 +_ZN13LinkStateItemD0Ev kind:function(thumb,size=0x24) addr:0x2109a88 func_ov004_02109b2c kind:function(thumb,size=0x4c) addr:0x2109aac func_ov004_02109b78 kind:function(thumb,size=0x234) addr:0x2109af8 func_ov004_02109dac kind:function(thumb,size=0x64) addr:0x2109d2c diff --git a/config/usa/arm9/overlays/ov005/symbols.txt b/config/usa/arm9/overlays/ov005/symbols.txt index b64c608f..44019db5 100644 --- a/config/usa/arm9/overlays/ov005/symbols.txt +++ b/config/usa/arm9/overlays/ov005/symbols.txt @@ -126,12 +126,12 @@ func_ov005_02104f28 kind:function(arm,size=0x218) addr:0x2104ea8 func_ov005_02105140 kind:function(arm,size=0x1c4) addr:0x21050c0 func_ov005_02105304 kind:function(arm,size=0x58) addr:0x2105284 func_ov005_0210535c kind:function(arm,size=0xb0) addr:0x21052dc -func_ov005_0210540c kind:function(arm,size=0x1c4) addr:0x210538c +_ZN13LinkStateItem12OnStateEnterEv kind:function(arm,size=0x1c4) addr:0x210538c func_ov005_021055d0 kind:function(arm,size=0x10) addr:0x2105550 -func_ov005_021055e0 kind:function(arm,size=0x90) addr:0x2105560 -func_ov005_02105670 kind:function(arm,size=0x144) addr:0x21055f0 +_ZN13LinkStateItem8vfunc_1cEv kind:function(arm,size=0x90) addr:0x2105560 +_ZN13LinkStateItem8vfunc_20Ei kind:function(arm,size=0x144) addr:0x21055f0 func_ov005_021057b4 kind:function(arm,size=0x10) addr:0x2105734 -func_ov005_021057c4 kind:function(arm,size=0x8c) addr:0x2105744 +_ZN13LinkStateItem8vfunc_24Ei kind:function(arm,size=0x8c) addr:0x2105744 func_ov005_02105850 kind:function(arm,size=0x3d8) addr:0x21057d0 func_ov005_02105c28 kind:function(arm,size=0x15c) addr:0x2105ba8 func_ov005_02105d84 kind:function(arm,size=0x10) addr:0x2105d04 From cd8ce661161b8e2bdaaeb3acac871ba2737bae1a Mon Sep 17 00:00:00 2001 From: mike8699 Date: Fri, 3 Jan 2025 22:56:28 -0500 Subject: [PATCH 14/23] Add LinkStateBase methods to symbols --- config/eur/arm9/overlays/ov004/symbols.txt | 2 +- config/eur/arm9/overlays/ov005/symbols.txt | 10 +++++----- config/usa/arm9/overlays/ov004/symbols.txt | 2 +- config/usa/arm9/overlays/ov005/symbols.txt | 10 +++++----- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/config/eur/arm9/overlays/ov004/symbols.txt b/config/eur/arm9/overlays/ov004/symbols.txt index 342ac90f..0fd913c5 100644 --- a/config/eur/arm9/overlays/ov004/symbols.txt +++ b/config/eur/arm9/overlays/ov004/symbols.txt @@ -293,7 +293,7 @@ func_ov004_0210add4 kind:function(thumb,size=0x10) addr:0x210add4 func_ov004_0210ade4 kind:function(thumb,size=0x4) addr:0x210ade4 func_ov004_0210ade8 kind:function(thumb,size=0xc) addr:0x210ade8 func_ov004_0210adf4 kind:function(thumb,size=0x4) addr:0x210adf4 -func_ov004_0210adf8 kind:function(thumb,size=0x4) addr:0x210adf8 +_ZN13LinkStateBase20CreateDebugHierarchyEv kind:function(thumb,size=0x4) addr:0x210adf8 func_ov004_0210adfc kind:function(thumb,size=0x84) addr:0x210adfc func_ov004_0210ae80 kind:function(thumb,size=0x28) addr:0x210ae80 func_ov004_0210aea8 kind:function(thumb,size=0x2c) addr:0x210aea8 diff --git a/config/eur/arm9/overlays/ov005/symbols.txt b/config/eur/arm9/overlays/ov005/symbols.txt index 81547f61..0209a999 100644 --- a/config/eur/arm9/overlays/ov005/symbols.txt +++ b/config/eur/arm9/overlays/ov005/symbols.txt @@ -278,11 +278,11 @@ func_ov005_0210ec3c kind:function(arm,size=0xaa0) addr:0x210ec3c func_ov005_0210f6dc kind:function(arm,size=0x8) addr:0x210f6dc func_ov005_0210f6e4 kind:function(arm,size=0x1c) addr:0x210f6e4 func_ov005_0210f700 kind:function(arm,size=0x4) addr:0x210f700 -func_ov005_0210f704 kind:function(arm,size=0x4) addr:0x210f704 -func_ov005_0210f708 kind:function(arm,size=0x4) addr:0x210f708 -func_ov005_0210f70c kind:function(arm,size=0x8) addr:0x210f70c -func_ov005_0210f714 kind:function(arm,size=0x8) addr:0x210f714 -func_ov005_0210f71c kind:function(arm,size=0x3c) addr:0x210f71c +_ZN13LinkStateBase8vfunc_2cEPt kind:function(arm,size=0x4) addr:0x210f704 +_ZN13LinkStateBase8vfunc_30Ei kind:function(arm,size=0x4) addr:0x210f708 +_ZN13LinkStateBase8vfunc_38Ev kind:function(arm,size=0x8) addr:0x210f70c +_ZN13LinkStateBase8vfunc_3cEv kind:function(arm,size=0x8) addr:0x210f714 +_ZN13LinkStateBase8vfunc_40Ev kind:function(arm,size=0x3c) addr:0x210f71c func_ov005_0210f758 kind:function(arm,size=0x60) addr:0x210f758 func_ov005_0210f7b8 kind:function(arm,size=0x50) addr:0x210f7b8 func_ov005_0210f808 kind:function(arm,size=0xa18) addr:0x210f808 diff --git a/config/usa/arm9/overlays/ov004/symbols.txt b/config/usa/arm9/overlays/ov004/symbols.txt index bcb51beb..1728bd3a 100644 --- a/config/usa/arm9/overlays/ov004/symbols.txt +++ b/config/usa/arm9/overlays/ov004/symbols.txt @@ -293,7 +293,7 @@ func_ov004_0210add4 kind:function(thumb,size=0x10) addr:0x210ad54 func_ov004_0210ade4 kind:function(thumb,size=0x4) addr:0x210ad64 func_ov004_0210ade8 kind:function(thumb,size=0xc) addr:0x210ad68 func_ov004_0210adf4 kind:function(thumb,size=0x4) addr:0x210ad74 -func_ov004_0210adf8 kind:function(thumb,size=0x4) addr:0x210ad78 +_ZN13LinkStateBase20CreateDebugHierarchyEv kind:function(thumb,size=0x4) addr:0x210ad78 func_ov004_0210adfc kind:function(thumb,size=0x84) addr:0x210ad7c func_ov004_0210ae80 kind:function(thumb,size=0x28) addr:0x210ae00 func_ov004_0210aea8 kind:function(thumb,size=0x2c) addr:0x210ae28 diff --git a/config/usa/arm9/overlays/ov005/symbols.txt b/config/usa/arm9/overlays/ov005/symbols.txt index 44019db5..7268453d 100644 --- a/config/usa/arm9/overlays/ov005/symbols.txt +++ b/config/usa/arm9/overlays/ov005/symbols.txt @@ -278,11 +278,11 @@ func_ov005_0210ec3c kind:function(arm,size=0xaa0) addr:0x210ebbc func_ov005_0210f6dc kind:function(arm,size=0x8) addr:0x210f65c func_ov005_0210f6e4 kind:function(arm,size=0x1c) addr:0x210f664 func_ov005_0210f700 kind:function(arm,size=0x4) addr:0x210f680 -func_ov005_0210f704 kind:function(arm,size=0x4) addr:0x210f684 -func_ov005_0210f708 kind:function(arm,size=0x4) addr:0x210f688 -func_ov005_0210f70c kind:function(arm,size=0x8) addr:0x210f68c -func_ov005_0210f714 kind:function(arm,size=0x8) addr:0x210f694 -func_ov005_0210f71c kind:function(arm,size=0x3c) addr:0x210f69c +_ZN13LinkStateBase8vfunc_2cEPt kind:function(arm,size=0x4) addr:0x210f684 +_ZN13LinkStateBase8vfunc_30Ei kind:function(arm,size=0x4) addr:0x210f688 +_ZN13LinkStateBase8vfunc_38Ev kind:function(arm,size=0x8) addr:0x210f68c +_ZN13LinkStateBase8vfunc_3cEv kind:function(arm,size=0x8) addr:0x210f694 +_ZN13LinkStateBase8vfunc_40Ev kind:function(arm,size=0x3c) addr:0x210f69c func_ov005_0210f758 kind:function(arm,size=0x60) addr:0x210f6d8 func_ov005_0210f7b8 kind:function(arm,size=0x50) addr:0x210f738 func_ov005_0210f808 kind:function(arm,size=0xa18) addr:0x210f788 From 6ab289196ebaed3b8b452f4c65b679b4a58c5446 Mon Sep 17 00:00:00 2001 From: mike8699 Date: Sat, 4 Jan 2025 18:24:30 -0500 Subject: [PATCH 15/23] Fix regalloc issue --- src/00_Core/Player/LinkStateItem.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/00_Core/Player/LinkStateItem.cpp b/src/00_Core/Player/LinkStateItem.cpp index 93c1e336..35363720 100644 --- a/src/00_Core/Player/LinkStateItem.cpp +++ b/src/00_Core/Player/LinkStateItem.cpp @@ -34,7 +34,6 @@ ARM void LinkStateItem::OnStateLeave(s32 param1) { LinkStateMove *pLVar2; s32 iVar3; unk32 *puVar4; - unk32 *puVar5; LinkStateBase::OnStateLeave(param1); @@ -89,8 +88,7 @@ ARM void LinkStateItem::OnStateLeave(s32 param1) { this->mNextEquip = -1; puVar4 = (unk32 *) this + 20; - puVar5 = (unk32 *) this + 22; - for (; puVar4 != puVar5; puVar4 = puVar4 + 4) { + for (; puVar4 != (unk32 *) this + 22; puVar4 = puVar4 + 4) { func_ov000_020b7e6c(puVar4); } if (gPlayerControl->mUnk_80 != false) { From 5f526aadb563bc3083dd8709b9b87bd628079f42 Mon Sep 17 00:00:00 2001 From: mike8699 Date: Sat, 4 Jan 2025 18:26:53 -0500 Subject: [PATCH 16/23] Fix misplaced case block --- src/00_Core/Player/LinkStateItem.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/00_Core/Player/LinkStateItem.cpp b/src/00_Core/Player/LinkStateItem.cpp index 35363720..313c11fa 100644 --- a/src/00_Core/Player/LinkStateItem.cpp +++ b/src/00_Core/Player/LinkStateItem.cpp @@ -46,7 +46,6 @@ ARM void LinkStateItem::OnStateLeave(s32 param1) { } func_ov014_0211fd04(*(s32 *) (0x20abf48)); break; - case 9: case 0: break; case 1: break; case 2: break; @@ -54,6 +53,7 @@ ARM void LinkStateItem::OnStateLeave(s32 param1) { case 5: break; case 6: EquipRope::StopUsing(this); break; case 8: EquipHammer::StopUsing(this); break; + case 9: case 10: iVar3 = *(int *) (0x20abf44); *(unk8 *) (iVar3 + 0x2a) = 0; From 70d24e07765610cdbae4876e71a46e736868fcfb Mon Sep 17 00:00:00 2001 From: mike8699 Date: Sat, 4 Jan 2025 18:29:20 -0500 Subject: [PATCH 17/23] Fix error --- src/00_Core/Player/LinkStateItem.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/00_Core/Player/LinkStateItem.cpp b/src/00_Core/Player/LinkStateItem.cpp index 313c11fa..30643a87 100644 --- a/src/00_Core/Player/LinkStateItem.cpp +++ b/src/00_Core/Player/LinkStateItem.cpp @@ -88,7 +88,7 @@ ARM void LinkStateItem::OnStateLeave(s32 param1) { this->mNextEquip = -1; puVar4 = (unk32 *) this + 20; - for (; puVar4 != (unk32 *) this + 22; puVar4 = puVar4 + 4) { + for (; puVar4 != (unk32 *) this + 22; puVar4++) { func_ov000_020b7e6c(puVar4); } if (gPlayerControl->mUnk_80 != false) { From 254ee79fe04241913570c498c76c7ec258b79dcd Mon Sep 17 00:00:00 2001 From: mike8699 Date: Sat, 4 Jan 2025 18:59:19 -0500 Subject: [PATCH 18/23] Match data section --- config/eur/arm9/overlays/ov014/symbols.txt | 2 +- config/usa/arm9/overlays/ov014/symbols.txt | 2 +- src/00_Core/Player/LinkStateItem.cpp | 13 ++++++++----- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/config/eur/arm9/overlays/ov014/symbols.txt b/config/eur/arm9/overlays/ov014/symbols.txt index 2b0034c8..4046d529 100644 --- a/config/eur/arm9/overlays/ov014/symbols.txt +++ b/config/eur/arm9/overlays/ov014/symbols.txt @@ -8,7 +8,7 @@ func_ov014_0211f980 kind:function(arm,size=0x130) addr:0x211f980 func_ov014_0211fab0 kind:function(arm,size=0x1dc) addr:0x211fab0 func_ov014_0211fc8c kind:function(arm,size=0x50) addr:0x211fc8c func_ov014_0211fcdc kind:function(thumb,size=0x28) addr:0x211fcdc -_Z19func_ov014_0211fd04i kind:function(thumb,size=0x4c) addr:0x211fd04 +_Z19func_ov014_0211fd04Pi kind:function(thumb,size=0x4c) addr:0x211fd04 func_ov014_0211fd50 kind:function(arm,size=0x30) addr:0x211fd50 func_ov014_0211fd80 kind:function(arm,size=0x10) addr:0x211fd80 func_ov014_0211fd90 kind:function(arm,size=0x14) addr:0x211fd90 diff --git a/config/usa/arm9/overlays/ov014/symbols.txt b/config/usa/arm9/overlays/ov014/symbols.txt index a9587106..8456081e 100644 --- a/config/usa/arm9/overlays/ov014/symbols.txt +++ b/config/usa/arm9/overlays/ov014/symbols.txt @@ -8,7 +8,7 @@ func_ov014_0211f980 kind:function(arm,size=0x130) addr:0x211f900 func_ov014_0211fab0 kind:function(arm,size=0x1dc) addr:0x211fa30 func_ov014_0211fc8c kind:function(arm,size=0x50) addr:0x211fc0c func_ov014_0211fcdc kind:function(thumb,size=0x28) addr:0x211fc5c -_Z19func_ov014_0211fd04i kind:function(thumb,size=0x4c) addr:0x211fc84 +_Z19func_ov014_0211fd04Pi kind:function(thumb,size=0x4c) addr:0x211fc84 func_ov014_0211fd50 kind:function(arm,size=0x30) addr:0x211fcd0 func_ov014_0211fd80 kind:function(arm,size=0x10) addr:0x211fd00 func_ov014_0211fd90 kind:function(arm,size=0x14) addr:0x211fd10 diff --git a/src/00_Core/Player/LinkStateItem.cpp b/src/00_Core/Player/LinkStateItem.cpp index 30643a87..f61c14b0 100644 --- a/src/00_Core/Player/LinkStateItem.cpp +++ b/src/00_Core/Player/LinkStateItem.cpp @@ -10,9 +10,12 @@ extern unk32 func_ov000_020cf01c(s32 *param1); extern void func_ov000_020cf9dc(s32 param1, s32 param2, s32 param3); extern void func_ov014_0213ec64(s32 param1); -extern void func_ov014_0211fd04(s32 param1); +extern void func_ov014_0211fd04(s32 *param1); extern void func_ov000_020b7e6c(s32 *param1); +extern s32 *data_027e103c; +extern s32 *data_027e1098; + THUMB void LinkStateItem::vfunc_00() {} ARM LinkStateId LinkStateItem::GetId() { @@ -40,11 +43,11 @@ ARM void LinkStateItem::OnStateLeave(s32 param1) { switch (this->mEquipId) { case 7: /* bombchu */ - iVar3 = func_ov000_020cf01c((s32 *) (*(s32 *) 0x20abf44)); + iVar3 = func_ov000_020cf01c(data_027e103c); if (*(u8 *) (iVar3 + 0xe0) == '\0') { func_ov014_0213ec64((s32) GetEquipBombchu()); } - func_ov014_0211fd04(*(s32 *) (0x20abf48)); + func_ov014_0211fd04(data_027e1098); break; case 0: break; case 1: break; @@ -55,8 +58,8 @@ ARM void LinkStateItem::OnStateLeave(s32 param1) { case 8: EquipHammer::StopUsing(this); break; case 9: case 10: - iVar3 = *(int *) (0x20abf44); - *(unk8 *) (iVar3 + 0x2a) = 0; + iVar3 = (int ) (data_027e103c); + *(unk8 *) ((s16*)data_027e103c + 0x15) = 0; func_ov000_020cf9dc(iVar3, 0, 0); break; case 3: EquipScoop::StopUsing(this); break; From 19290c9d923b43ad360baf8e2fe8fc77ac15c135 Mon Sep 17 00:00:00 2001 From: mike8699 Date: Sat, 4 Jan 2025 19:13:59 -0500 Subject: [PATCH 19/23] Run `clang-format` --- src/00_Core/Player/LinkStateItem.cpp | 29 +++++++++++----------------- 1 file changed, 11 insertions(+), 18 deletions(-) diff --git a/src/00_Core/Player/LinkStateItem.cpp b/src/00_Core/Player/LinkStateItem.cpp index f61c14b0..368ad214 100644 --- a/src/00_Core/Player/LinkStateItem.cpp +++ b/src/00_Core/Player/LinkStateItem.cpp @@ -1,9 +1,9 @@ +#include "Player/LinkStateItem.hpp" #include "Item/ItemManager.hpp" #include "Player/EquipBomb.hpp" #include "Player/EquipHammer.hpp" #include "Player/EquipItem.hpp" #include "Player/EquipScoop.hpp" -#include "Player/LinkStateItem.hpp" #include "Player/PlayerControl.hpp" #include "Save/AdventureFlags.hpp" @@ -24,14 +24,11 @@ ARM LinkStateId LinkStateItem::GetId() { ARM s32 LinkStateItem::IsHammerEquipped() { switch (this->mEquipId) { - case 8: - return 0; - default: - return -1; + case 8: return 0; + default: return -1; } } - ARM void LinkStateItem::OnStateLeave(s32 param1) { EquipItem *pEVar1; LinkStateMove *pLVar2; @@ -58,8 +55,8 @@ ARM void LinkStateItem::OnStateLeave(s32 param1) { case 8: EquipHammer::StopUsing(this); break; case 9: case 10: - iVar3 = (int ) (data_027e103c); - *(unk8 *) ((s16*)data_027e103c + 0x15) = 0; + iVar3 = (int) (data_027e103c); + *(unk8 *) ((s16 *) data_027e103c + 0x15) = 0; func_ov000_020cf9dc(iVar3, 0, 0); break; case 3: EquipScoop::StopUsing(this); break; @@ -72,18 +69,14 @@ ARM void LinkStateItem::OnStateLeave(s32 param1) { switch (this->mEquipId) { case -1: - case 0: - break; - case 1: - break; + case 0: break; + case 1: break; case 9: - case 10: - this->EquipItem_vfunc_28(); - break; + case 10: this->EquipItem_vfunc_28(); break; default: this->EquipItem_vfunc_28(); if (param1 != 4 && param1 != 2) { - pLVar2 = this->GetLinkStateMove(); + pLVar2 = this->GetLinkStateMove(); pLVar2->mUnk_14 = true; } } @@ -102,11 +95,11 @@ ARM void LinkStateItem::OnStateLeave(s32 param1) { } ARM EquipBombchu *LinkStateItem::GetEquipBombchu() { - return (EquipBombchu *)ItemManager::GetEquipItemUnchecked(7); + return (EquipBombchu *) ItemManager::GetEquipItemUnchecked(7); } ARM LinkStateMove *LinkStateItem::GetLinkStateMove() { - return (LinkStateMove *)GetLinkState(0); + return (LinkStateMove *) GetLinkState(0); } ARM bool LinkStateItem::func_ov00_020abf70() { From f817a35c26cae5990b54e86250a4d643b61c98bd Mon Sep 17 00:00:00 2001 From: mike8699 Date: Sun, 5 Jan 2025 19:04:23 -0500 Subject: [PATCH 20/23] Update relocs.txt --- config/eur/arm9/overlays/ov004/relocs.txt | 2 +- config/usa/arm9/overlays/ov004/relocs.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/config/eur/arm9/overlays/ov004/relocs.txt b/config/eur/arm9/overlays/ov004/relocs.txt index daa63436..ce85e811 100644 --- a/config/eur/arm9/overlays/ov004/relocs.txt +++ b/config/eur/arm9/overlays/ov004/relocs.txt @@ -1960,7 +1960,7 @@ from:0x02109a4c kind:thumb_call_arm to:0x020d0530 module:overlay(0) from:0x02109a52 kind:thumb_call to:0x021099b0 module:overlay(4) from:0x02109a5e kind:thumb_call to:0x0210add4 module:overlay(4) from:0x02109aba kind:thumb_call_arm to:0x0204f614 module:main -from:0x02109ad8 kind:load to:0x020e5a48 module:overlay(0) +from:0x02109ad8 kind:load to:0x020e5a48 add:8 module:overlay(0) from:0x02109adc kind:load to:0x021079d5 module:overlay(4) from:0x02109ae0 kind:load to:0x02057200 module:main from:0x02109ae4 kind:load to:0x020b7d74 module:overlay(0) diff --git a/config/usa/arm9/overlays/ov004/relocs.txt b/config/usa/arm9/overlays/ov004/relocs.txt index b6a09277..76d78e03 100644 --- a/config/usa/arm9/overlays/ov004/relocs.txt +++ b/config/usa/arm9/overlays/ov004/relocs.txt @@ -1960,7 +1960,7 @@ from:0x021099cc kind:thumb_call_arm to:0x020d04d0 module:overlay(0) from:0x021099d2 kind:thumb_call to:0x02109930 module:overlay(4) from:0x021099de kind:thumb_call to:0x0210ad54 module:overlay(4) from:0x02109a3a kind:thumb_call_arm to:0x0204f5d0 module:main -from:0x02109a58 kind:load to:0x020e59e8 module:overlay(0) +from:0x02109a58 kind:load to:0x020e59e8 add:8 module:overlay(0) from:0x02109a5c kind:load to:0x02107955 module:overlay(4) from:0x02109a60 kind:load to:0x020571b8 module:main from:0x02109a64 kind:load to:0x020b7d14 module:overlay(0) From f5f1f7ae1b2ac975a0da13da3198062a0b1e3858 Mon Sep 17 00:00:00 2001 From: mike8699 Date: Sun, 5 Jan 2025 19:05:53 -0500 Subject: [PATCH 21/23] Add `complete` directive to delinks.txt --- config/eur/arm9/overlays/ov000/delinks.txt | 1 + config/usa/arm9/overlays/ov000/delinks.txt | 1 + 2 files changed, 2 insertions(+) diff --git a/config/eur/arm9/overlays/ov000/delinks.txt b/config/eur/arm9/overlays/ov000/delinks.txt index 3d73e576..78534402 100644 --- a/config/eur/arm9/overlays/ov000/delinks.txt +++ b/config/eur/arm9/overlays/ov000/delinks.txt @@ -62,6 +62,7 @@ src/00_Core/Player/LinkStateInteract.cpp: .data start:0x020e58e8 end:0x020e5a40 src/00_Core/Player/LinkStateItem.cpp: + complete .text start:0x020abd78 end:0x020abfa4 .data start:0x020e5a40 end:0x020e5a8c diff --git a/config/usa/arm9/overlays/ov000/delinks.txt b/config/usa/arm9/overlays/ov000/delinks.txt index a924815e..356452b7 100644 --- a/config/usa/arm9/overlays/ov000/delinks.txt +++ b/config/usa/arm9/overlays/ov000/delinks.txt @@ -62,6 +62,7 @@ src/00_Core/Player/LinkStateInteract.cpp: .data start:0x020e5888 end:0x020e59e0 src/00_Core/Player/LinkStateItem.cpp: + complete .text start:0x020abd18 end:0x020abf44 .data start:0x020e59e0 end:0x020e5a2c From 6f33b0c7ad02f6cf0e886f6b1287c061851b2d40 Mon Sep 17 00:00:00 2001 From: Aetias Date: Mon, 6 Jan 2025 16:36:05 +0100 Subject: [PATCH 22/23] LinkStateItem: Use enums --- include/Player/LinkStateItem.hpp | 4 +-- src/00_Core/Player/LinkStateItem.cpp | 45 ++++++++++++++-------------- 2 files changed, 24 insertions(+), 25 deletions(-) diff --git a/include/Player/LinkStateItem.hpp b/include/Player/LinkStateItem.hpp index b7877502..0c5f4a4d 100644 --- a/include/Player/LinkStateItem.hpp +++ b/include/Player/LinkStateItem.hpp @@ -13,8 +13,8 @@ public: /* 00 (base) */ /* 0c */ void *mUnk_0c; /* 10 */ unk32 mUnk_10; - /* 14 */ ItemId mEquipId; - /* 18 */ ItemId mNextEquip; + /* 14 */ ItemFlag mEquipId; + /* 18 */ ItemFlag mNextEquip; /* 1c */ unk32 mUnk_1c; /* 20 */ unk16 mUnk_20; /* 22 */ unk8 mUnk_22[2]; diff --git a/src/00_Core/Player/LinkStateItem.cpp b/src/00_Core/Player/LinkStateItem.cpp index 368ad214..5cbccd85 100644 --- a/src/00_Core/Player/LinkStateItem.cpp +++ b/src/00_Core/Player/LinkStateItem.cpp @@ -19,12 +19,12 @@ extern s32 *data_027e1098; THUMB void LinkStateItem::vfunc_00() {} ARM LinkStateId LinkStateItem::GetId() { - return 1; + return LinkStateId_Item; } ARM s32 LinkStateItem::IsHammerEquipped() { switch (this->mEquipId) { - case 8: return 0; + case ItemFlag_Hammer: return 0; default: return -1; } } @@ -38,41 +38,40 @@ ARM void LinkStateItem::OnStateLeave(s32 param1) { LinkStateBase::OnStateLeave(param1); switch (this->mEquipId) { - case 7: - /* bombchu */ + case ItemFlag_BombchuBag: iVar3 = func_ov000_020cf01c(data_027e103c); if (*(u8 *) (iVar3 + 0xe0) == '\0') { func_ov014_0213ec64((s32) GetEquipBombchu()); } func_ov014_0211fd04(data_027e1098); break; - case 0: break; - case 1: break; - case 2: break; - case 4: EquipBomb::StopUsing(this, param1); break; - case 5: break; - case 6: EquipRope::StopUsing(this); break; - case 8: EquipHammer::StopUsing(this); break; - case 9: - case 10: + case ItemFlag_OshusSword: break; + case ItemFlag_WoodenShield: break; + case ItemFlag_Boomerang: break; + case ItemFlag_BombBag: EquipBomb::StopUsing(this, param1); break; + case ItemFlag_Bow: break; + case ItemFlag_GrapplingHook: EquipRope::StopUsing(this); break; + case ItemFlag_Hammer: EquipHammer::StopUsing(this); break; + case ItemFlag_PotionA: + case ItemFlag_PotionB: iVar3 = (int) (data_027e103c); *(unk8 *) ((s16 *) data_027e103c + 0x15) = 0; func_ov000_020cf9dc(iVar3, 0, 0); break; - case 3: EquipScoop::StopUsing(this); break; + case ItemFlag_Shovel: EquipScoop::StopUsing(this); break; } - if (this->mEquipId != -1) { + if (this->mEquipId != ItemFlag_None) { pEVar1 = this->GetEquipItem(this->mEquipId); pEVar1->vfunc_1c(); } switch (this->mEquipId) { - case -1: - case 0: break; - case 1: break; - case 9: - case 10: this->EquipItem_vfunc_28(); break; + case ItemFlag_None: + case ItemFlag_OshusSword: break; + case ItemFlag_WoodenShield: break; + case ItemFlag_PotionA: + case ItemFlag_PotionB: this->EquipItem_vfunc_28(); break; default: this->EquipItem_vfunc_28(); if (param1 != 4 && param1 != 2) { @@ -81,7 +80,7 @@ ARM void LinkStateItem::OnStateLeave(s32 param1) { } } - this->mNextEquip = -1; + this->mNextEquip = ItemFlag_None; puVar4 = (unk32 *) this + 20; for (; puVar4 != (unk32 *) this + 22; puVar4++) { @@ -95,11 +94,11 @@ ARM void LinkStateItem::OnStateLeave(s32 param1) { } ARM EquipBombchu *LinkStateItem::GetEquipBombchu() { - return (EquipBombchu *) ItemManager::GetEquipItemUnchecked(7); + return (EquipBombchu *) ItemManager::GetEquipItemUnchecked(ItemFlag_BombchuBag); } ARM LinkStateMove *LinkStateItem::GetLinkStateMove() { - return (LinkStateMove *) GetLinkState(0); + return (LinkStateMove *) GetLinkState(LinkStateId_Move); } ARM bool LinkStateItem::func_ov00_020abf70() { From 01102bf317119076f70ce7a110a8b2e7247c91dc Mon Sep 17 00:00:00 2001 From: mike8699 Date: Mon, 6 Jan 2025 11:26:11 -0500 Subject: [PATCH 23/23] Fix `clang-format` error --- include/System/SysNew.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/System/SysNew.hpp b/include/System/SysNew.hpp index 20d4a46f..78f3b290 100644 --- a/include/System/SysNew.hpp +++ b/include/System/SysNew.hpp @@ -4,6 +4,6 @@ class SysObject { public: - static void* operator new(unsigned long length, u32 *id, u32 idLength); + static void *operator new(unsigned long length, u32 *id, u32 idLength); static void operator delete(void *ptr); };