summaryrefslogtreecommitdiff
path: root/src/00_Core/Player/LinkStateItem.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/00_Core/Player/LinkStateItem.cpp')
-rw-r--r--src/00_Core/Player/LinkStateItem.cpp106
1 files changed, 68 insertions, 38 deletions
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;
-
- 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;
+ EquipItem *pEVar1;
+ LinkStateMove *pLVar2;
+ s32 iVar3;
+ unk32 *puVar4;
+ unk32 *puVar5;
+
+ 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 */
+ 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);
+ }
+
+ 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() {