From bf43adef41ba02c860f05fc17e577089c8b5c1dc Mon Sep 17 00:00:00 2001 From: mike8699 Date: Wed, 1 Jan 2025 21:12:01 -0500 Subject: [PATCH] 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() {