summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--config/eur/arm9/overlays/ov000/symbols.txt4
-rw-r--r--config/usa/arm9/overlays/ov000/symbols.txt4
-rw-r--r--include/Actor/Navi/ActorNavi.hpp6
-rw-r--r--include/Actor/Navi/ActorNaviBase.hpp5
-rw-r--r--include/DTCM/UnkStruct_027e0d38.hpp8
-rw-r--r--include/DTCM/UnkStruct_027e0fd4.hpp2
-rw-r--r--include/Item/ItemManager.hpp5
-rw-r--r--include/Player/EquipHammer.hpp2
-rw-r--r--include/Player/EquipItem.hpp2
-rw-r--r--include/Player/LinkStateBase.hpp1
-rw-r--r--include/Player/LinkStateItem.hpp2
-rw-r--r--src/00_Core/Player/EquipItem.cpp2
-rw-r--r--src/59_Hammer/Player/EquipHammer.cpp47
13 files changed, 78 insertions, 12 deletions
diff --git a/config/eur/arm9/overlays/ov000/symbols.txt b/config/eur/arm9/overlays/ov000/symbols.txt
index 5dca6757..4279427d 100644
--- a/config/eur/arm9/overlays/ov000/symbols.txt
+++ b/config/eur/arm9/overlays/ov000/symbols.txt
@@ -1783,7 +1783,7 @@ func_ov000_020a5d50 kind:function(arm,size=0xc) addr:0x20a5d50
func_ov000_020a5d5c kind:function(arm,size=0x18) addr:0x20a5d5c
func_ov000_020a5d74 kind:function(arm,size=0x94) addr:0x20a5d74
func_ov000_020a5e08 kind:function(arm,size=0x94) addr:0x20a5e08
-func_ov000_020a5e9c kind:function(arm,size=0x5c) addr:0x20a5e9c
+_ZN23UnkStruct_027e0d38_UnkC19func_ov000_020a5e9cEv kind:function(arm,size=0x5c) addr:0x20a5e9c
func_ov000_020a5ef8 kind:function(arm,size=0x30) addr:0x20a5ef8
func_ov000_020a5f28 kind:function(arm,size=0x30) addr:0x20a5f28
func_ov000_020a5f58 kind:function(arm,size=0x14) addr:0x20a5f58
@@ -2743,7 +2743,7 @@ _ZNK9EquipItem8vfunc_4cEv kind:function(arm,size=0x8) addr:0x20be988
_ZN9EquipItem12GetPlayerPosEv kind:function(arm,size=0xc) addr:0x20be990
_ZN9EquipItem19func_ov000_020be99cEP5Vec3p kind:function(arm,size=0x48) addr:0x20be99c
_ZN9EquipItem19func_ov000_020be9e4Eiiis kind:function(arm,size=0x14c) addr:0x20be9e4
-_ZN9EquipItem7GetAmmoEv kind:function(arm,size=0x2c) addr:0x20beb30
+_ZNK9EquipItem7GetAmmoEv kind:function(arm,size=0x2c) addr:0x20beb30
_ZN9EquipItem8GiveAmmoEj kind:function(arm,size=0x34) addr:0x20beb5c
_ZNK9EquipItem9GetHitboxEP8Cylinder kind:function(arm,size=0x18) addr:0x20beb90
_ZN24UnkStruct_ov000_020beba8C1Ei kind:function(arm,size=0x18) addr:0x20beba8
diff --git a/config/usa/arm9/overlays/ov000/symbols.txt b/config/usa/arm9/overlays/ov000/symbols.txt
index a8665dd1..bee557ee 100644
--- a/config/usa/arm9/overlays/ov000/symbols.txt
+++ b/config/usa/arm9/overlays/ov000/symbols.txt
@@ -1783,7 +1783,7 @@ func_ov000_020a5d50 kind:function(arm,size=0xc) addr:0x20a5cf0
func_ov000_020a5d5c kind:function(arm,size=0x18) addr:0x20a5cfc
func_ov000_020a5d74 kind:function(arm,size=0x94) addr:0x20a5d14
func_ov000_020a5e08 kind:function(arm,size=0x94) addr:0x20a5da8
-func_ov000_020a5e9c kind:function(arm,size=0x5c) addr:0x20a5e3c
+_ZN23UnkStruct_027e0d38_UnkC19func_ov000_020a5e9cEv kind:function(arm,size=0x5c) addr:0x20a5e3c
func_ov000_020a5ef8 kind:function(arm,size=0x30) addr:0x20a5e98
func_ov000_020a5f28 kind:function(arm,size=0x30) addr:0x20a5ec8
func_ov000_020a5f58 kind:function(arm,size=0x14) addr:0x20a5ef8
@@ -2645,7 +2645,7 @@ _ZNK9EquipItem8vfunc_4cEv kind:function(arm,size=0x8) addr:0x20be928
_ZN9EquipItem12GetPlayerPosEv kind:function(arm,size=0xc) addr:0x20be930
_ZN9EquipItem19func_ov000_020be99cEP5Vec3p kind:function(arm,size=0x48) addr:0x20be93c
_ZN9EquipItem19func_ov000_020be9e4Eiiis kind:function(arm,size=0x14c) addr:0x20be984
-_ZN9EquipItem7GetAmmoEv kind:function(arm,size=0x2c) addr:0x20bead0
+_ZNK9EquipItem7GetAmmoEv kind:function(arm,size=0x2c) addr:0x20bead0
_ZN9EquipItem8GiveAmmoEj kind:function(arm,size=0x34) addr:0x20beafc
_ZNK9EquipItem9GetHitboxEP8Cylinder kind:function(arm,size=0x18) addr:0x20beb30
_ZN24UnkStruct_ov000_020beba8C1Ei kind:function(arm,size=0x18) addr:0x20beb48
diff --git a/include/Actor/Navi/ActorNavi.hpp b/include/Actor/Navi/ActorNavi.hpp
index 98ebcf51..dab24701 100644
--- a/include/Actor/Navi/ActorNavi.hpp
+++ b/include/Actor/Navi/ActorNavi.hpp
@@ -1,3 +1,7 @@
#pragma once
-class ActorNavi;
+#include "Actor/Navi/ActorNaviBase.hpp"
+
+class ActorNavi : public ActorNaviBase {
+
+};
diff --git a/include/Actor/Navi/ActorNaviBase.hpp b/include/Actor/Navi/ActorNaviBase.hpp
index f3a45e8a..d42a82b3 100644
--- a/include/Actor/Navi/ActorNaviBase.hpp
+++ b/include/Actor/Navi/ActorNaviBase.hpp
@@ -10,17 +10,18 @@
class ActorNaviBase_Unk1 {};
class ActorNaviBase : public Actor {
+public:
/* 000 (base) */
/* 158 */ Vec3p mUnk_158;
/* 164 */ unk32 mUnk_164;
/* 168 */ ModelRender mUnk_168;
/* 1c4 */ unk8 mUnk_1c4[0xc];
/* 1d0 */ void *mUnk_1d0;
- /* 1d4 */ unk8 mUnk_1d4[0x30];
+ /* 1d4 */ unk8 mUnk_1d4[0x40];
/* 214 */ unk16 mUnk_214;
/* 216 */ unk8 mUnk_216[0xc];
/* 222 */ unk16 mUnk_222;
- /* 224 */ unk8 mUnk_224[0x18];
+ /* 224 */ unk8 mUnk_224[0x28];
/* 24c */ unk32 mUnk_24c;
/* 250 */ unk32 mUnk_250;
/* 254 */ unk32 mUnk_254;
diff --git a/include/DTCM/UnkStruct_027e0d38.hpp b/include/DTCM/UnkStruct_027e0d38.hpp
index a36af0fe..a462a6e8 100644
--- a/include/DTCM/UnkStruct_027e0d38.hpp
+++ b/include/DTCM/UnkStruct_027e0d38.hpp
@@ -3,12 +3,18 @@
#include "global.h"
#include "types.h"
+struct UnkStruct_027e0d38_UnkC {
+ /* 00 */ unk32 mUnk_00;
+
+ unk32 func_ov000_020a5e9c(void);
+};
+
struct UnkStruct_027e0d38 {
/* 00 */ unk8 mUnk_00;
/* 01 */ unk8 mUnk_01[3]; // padding?
/* 04 */ unk32 mUnk_04;
/* 08 */ unk32 mUnk_08;
- /* 0c */ unk32 mUnk_0c;
+ /* 0c */ UnkStruct_027e0d38_UnkC mUnk_0c;
/* 10 */ unk32 mUnk_10;
/* 14 */ unk32 mUnk_14;
/* 18 */ unk32 mUnk_18;
diff --git a/include/DTCM/UnkStruct_027e0fd4.hpp b/include/DTCM/UnkStruct_027e0fd4.hpp
index 4d931bd5..42e254ea 100644
--- a/include/DTCM/UnkStruct_027e0fd4.hpp
+++ b/include/DTCM/UnkStruct_027e0fd4.hpp
@@ -128,3 +128,5 @@ public:
void func_ov000_020b6ba4(s32 param1, s32 param2);
bool func_ov000_020b6e70();
};
+
+extern UnkStruct_027e0fd4* data_027e0fd4;
diff --git a/include/Item/ItemManager.hpp b/include/Item/ItemManager.hpp
index c0a84aa7..3d5340ce 100644
--- a/include/Item/ItemManager.hpp
+++ b/include/Item/ItemManager.hpp
@@ -108,6 +108,11 @@ public:
~ItemManager();
void Init();
+ // Access to members
+ inline u8 GetUnk_14d(void) {
+ return mUnk_14d;
+ }
+
// Save/load
void Save(SaveItemManager *save);
void Load(const SaveItemManager *save);
diff --git a/include/Player/EquipHammer.hpp b/include/Player/EquipHammer.hpp
index 0ac23473..a367090d 100644
--- a/include/Player/EquipHammer.hpp
+++ b/include/Player/EquipHammer.hpp
@@ -43,3 +43,5 @@ public:
void func_ov059_02198fa8(unk32 param1);
bool func_ov059_02198fe0();
};
+
+extern LinkStateItem *GetLinkStateItem();
diff --git a/include/Player/EquipItem.hpp b/include/Player/EquipItem.hpp
index 6702bc48..79165634 100644
--- a/include/Player/EquipItem.hpp
+++ b/include/Player/EquipItem.hpp
@@ -41,5 +41,5 @@ public:
Vec3p *GetPlayerPos();
void func_ov000_020be99c(Vec3p *param1);
void func_ov000_020be9e4(s32 param1, s32 param2, s32 param3, s16 param4);
- u16 GetAmmo();
+ s16 GetAmmo() const;
};
diff --git a/include/Player/LinkStateBase.hpp b/include/Player/LinkStateBase.hpp
index e099c021..470f6096 100644
--- a/include/Player/LinkStateBase.hpp
+++ b/include/Player/LinkStateBase.hpp
@@ -154,4 +154,5 @@ public:
LinkStateBase *GetLinkState(s32 index);
+extern LinkStateBase *gLinkState;
extern LinkStateBase **gLinkStates;
diff --git a/include/Player/LinkStateItem.hpp b/include/Player/LinkStateItem.hpp
index 9a5d4585..c96f75d1 100644
--- a/include/Player/LinkStateItem.hpp
+++ b/include/Player/LinkStateItem.hpp
@@ -19,7 +19,7 @@ public:
/* 20 */ unk16 mUnk_20;
/* 22 */ unk8 mUnk_22[2];
/* 24 */ s8 mUnk_24;
- /* 25 */ unk8 mUnk_25[7];
+ /* 25 */ u8 mUnk_25[7];
/* 2c */ unk16 mUnk_2c;
/* 2e */ unk8 mUnk_2e[2];
/* 30 */ void *mUnk_30;
diff --git a/src/00_Core/Player/EquipItem.cpp b/src/00_Core/Player/EquipItem.cpp
index 9256b13a..8751b91d 100644
--- a/src/00_Core/Player/EquipItem.cpp
+++ b/src/00_Core/Player/EquipItem.cpp
@@ -14,6 +14,6 @@ s32 EquipItem::vfunc_4c() const {}
Vec3p *EquipItem::GetPlayerPos() {}
void EquipItem::func_ov000_020be99c(Vec3p *param1) {}
void EquipItem::func_ov000_020be9e4(s32 param1, s32 param2, s32 param3, s16 param4) {}
-u16 EquipItem::GetAmmo() {}
+s16 EquipItem::GetAmmo() const {}
void EquipItem::GiveAmmo(u32 amount) {}
bool EquipItem::GetHitbox(Cylinder *hitbox) const {}
diff --git a/src/59_Hammer/Player/EquipHammer.cpp b/src/59_Hammer/Player/EquipHammer.cpp
index 85a024a3..947f3132 100644
--- a/src/59_Hammer/Player/EquipHammer.cpp
+++ b/src/59_Hammer/Player/EquipHammer.cpp
@@ -1,13 +1,58 @@
#include "Player/EquipHammer.hpp"
#include "Player/LinkStateItem.hpp"
+#include "Player/PlayerLink.hpp"
#include "Map/MapManager.hpp"
#include "Item/ItemManager.hpp"
+#include "DTCM/UnkStruct_027e0fd4.hpp"
+#include "DTCM/UnkStruct_027e0d38.hpp"
extern "C" void ApproachAngle_thunk(s16* src, s16* dst, u32 param3);
extern "C" void func_ov000_020b853c(void);
extern unk32 data_ov059_0219b180;
-ARM bool EquipHammer::IsUsable(unk32 param1) const {}
+ARM bool EquipHammer::IsUsable(unk32 param1) const {
+ ActorNavi *pAVar3;
+
+ if (this->GetAmmo() <= 0) {
+ return false;
+ }
+
+ if (data_027e0fd4->mUnk_0f0 != 0 || data_027e0fd4->mUnk_0f8 != 0) {
+ return false;
+ }
+
+ pAVar3 = gItemManager->GetFairy(FairyId_Courage);
+
+ if (pAVar3 == NULL || pAVar3->mUnk_3b8 != 0) {
+ return false;
+ }
+
+ if (gItemManager->GetUnk_14d() != 0) {
+ return false;
+ }
+
+ if (param1 != 0) {
+ LinkStateItem* pLVar4 = GetLinkStateItem();
+
+ if (pLVar4->mUnk_25[2] != 0 && pLVar4->mUnk_25[3] == 0) {
+ return false;
+ }
+
+ if (data_027e0fd4->mUnk_0c6 < 0 && data_027e0d38->mUnk_0c.func_ov000_020a5e9c() != 0x2f) {
+ bool bVar5 = false;
+
+ if (gPlayerLink->GetStateId() == 4 && gLinkState != NULL && gLinkState->mSubState == 0) {
+ bVar5 = true;
+ }
+
+ if (!bVar5) {
+ return false;
+ }
+ }
+ }
+
+ return true;
+}
ARM LinkStateItem *GetLinkStateItem() {
return (LinkStateItem*)GetLinkState(1);