diff options
| author | Aetias <aetias@outlook.com> | 2025-01-06 20:41:07 +0100 |
|---|---|---|
| committer | Aetias <aetias@outlook.com> | 2025-01-06 20:41:07 +0100 |
| commit | ff81b3fd1ad1afd981135e91013acb38bcf66192 (patch) | |
| tree | 55d666682b0967115860814f334db26f13aea9e9 /src/00_Core/Player/LinkStateItem.cpp | |
| parent | 820b8fefdc0b42a644dc5af2cc564169d0534db4 (diff) | |
| parent | e980fe780395dbdbdf1348cd910d0c723315c46a (diff) | |
Merge remote-tracking branch 'origin/main' into add-precommit
Diffstat (limited to 'src/00_Core/Player/LinkStateItem.cpp')
| -rw-r--r-- | src/00_Core/Player/LinkStateItem.cpp | 116 |
1 files changed, 108 insertions, 8 deletions
diff --git a/src/00_Core/Player/LinkStateItem.cpp b/src/00_Core/Player/LinkStateItem.cpp index ecedca78..5cbccd85 100644 --- a/src/00_Core/Player/LinkStateItem.cpp +++ b/src/00_Core/Player/LinkStateItem.cpp @@ -1,10 +1,110 @@ #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/PlayerControl.hpp" +#include "Save/AdventureFlags.hpp" -void LinkStateItem::vfunc_00() {} -LinkStateId LinkStateItem::GetId() {} -s32 LinkStateItem::IsHammerEquipped() {} -void LinkStateItem::OnStateLeave(s32 param1) {} -EquipBombchu *LinkStateItem::GetEquipBombchu() {} -LinkStateMove *LinkStateItem::GetLinkStateMove() {} -bool LinkStateItem::func_ov00_020abf70() {} -bool LinkStateItem::vfunc_28() {} +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); + +extern s32 *data_027e103c; +extern s32 *data_027e1098; + +THUMB void LinkStateItem::vfunc_00() {} + +ARM LinkStateId LinkStateItem::GetId() { + return LinkStateId_Item; +} + +ARM s32 LinkStateItem::IsHammerEquipped() { + switch (this->mEquipId) { + case ItemFlag_Hammer: return 0; + default: return -1; + } +} + +ARM void LinkStateItem::OnStateLeave(s32 param1) { + EquipItem *pEVar1; + LinkStateMove *pLVar2; + s32 iVar3; + unk32 *puVar4; + + LinkStateBase::OnStateLeave(param1); + + switch (this->mEquipId) { + 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 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 ItemFlag_Shovel: EquipScoop::StopUsing(this); break; + } + + if (this->mEquipId != ItemFlag_None) { + pEVar1 = this->GetEquipItem(this->mEquipId); + pEVar1->vfunc_1c(); + } + + switch (this->mEquipId) { + 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) { + pLVar2 = this->GetLinkStateMove(); + pLVar2->mUnk_14 = true; + } + } + + this->mNextEquip = ItemFlag_None; + + puVar4 = (unk32 *) this + 20; + for (; puVar4 != (unk32 *) this + 22; puVar4++) { + func_ov000_020b7e6c(puVar4); + } + if (gPlayerControl->mUnk_80 != false) { + gPlayerControl->StopFollowing(); + } + this->mUnk_25[1] = 0; + return; +} + +ARM EquipBombchu *LinkStateItem::GetEquipBombchu() { + return (EquipBombchu *) ItemManager::GetEquipItemUnchecked(ItemFlag_BombchuBag); +} + +ARM LinkStateMove *LinkStateItem::GetLinkStateMove() { + return (LinkStateMove *) GetLinkState(LinkStateId_Move); +} + +ARM bool LinkStateItem::func_ov00_020abf70() { + return gAdventureFlags->func_ov00_02097b9c(this->mUnk_5c); +} + +ARM bool LinkStateItem::vfunc_28() { + return this->mUnk_5c < 0; +} |
