Files
ph/src/00_Core/Player/LinkStateItem.cpp
T

106 lines
3.1 KiB
C++

#include "Player/LinkStateItem.hpp"
#include "DTCM/UnkStruct_027e103c.hpp"
#include "DTCM/UnkStruct_027e1098.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"
extern void func_ov000_020b7e6c(s32 *param1);
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 = data_027e103c->func_ov000_020cf01c();
if (*(u8 *) (iVar3 + 0xe0) == '\0') {
GetEquipBombchu()->func_ov014_0213ec64();
}
data_027e1098->func_ov014_0211fd04();
break;
case ItemFlag_OshusSword: break;
case ItemFlag_WoodenShield: break;
case ItemFlag_Boomerang: break;
case ItemFlag_BombBag: this->StopUsingBomb(param1); break;
case ItemFlag_Bow: break;
case ItemFlag_GrapplingHook: this->StopUsingRope(); break;
case ItemFlag_Hammer: this->StopUsingHammer(); break;
case ItemFlag_PotionA:
case ItemFlag_PotionB:
UnkStruct_027e103c *pData_027e103c = data_027e103c;
pData_027e103c->mUnk_2a = 0;
pData_027e103c->func_ov000_020cf9dc(0, 0);
break;
case ItemFlag_Shovel: this->StopUsingScoop(); 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;
}