diff --git a/config/eur/arm9/overlays/ov000/symbols.txt b/config/eur/arm9/overlays/ov000/symbols.txt index 539b6f97..5dca6757 100644 --- a/config/eur/arm9/overlays/ov000/symbols.txt +++ b/config/eur/arm9/overlays/ov000/symbols.txt @@ -680,7 +680,7 @@ _ZN10MapManager18func_ov00_0208527cEv kind:function(arm,size=0x180) addr:0x20852 _ZN10MapManager18func_ov00_020853fcEv kind:function(arm,size=0x198) addr:0x20853fc _ZN10MapManager18func_ov00_02085594Ev kind:function(arm,size=0x2a8) addr:0x2085594 _ZN10MapManager18func_ov00_0208583cEiP5Vec3pi kind:function(arm,size=0x74) addr:0x208583c -_ZN10MapManager18func_ov00_020858b0Ev kind:function(arm,size=0x184) addr:0x20858b0 +_ZN10MapManager18func_ov00_020858b0EPS_P5Vec3pi kind:function(arm,size=0x184) addr:0x20858b0 _ZN10MapManager18func_ov00_02085a34Eii kind:function(arm,size=0x22c) addr:0x2085a34 _ZN10MapManager18func_ov00_02085c60Eiiii kind:function(arm,size=0x3e4) addr:0x2085c60 _ZN10MapManager18func_ov00_02086044Eiii kind:function(arm,size=0x240) addr:0x2086044 @@ -1921,7 +1921,7 @@ _ZN13LinkStateBase18func_ov00_020a8774EP5Vec3pi kind:function(arm,size=0xd0) add _ZN13LinkStateBase18func_ov00_020a8844EP5Vec3pbb kind:function(arm,size=0x110) addr:0x20a8844 _ZN13LinkStateBase18func_ov00_020a8954EbPi kind:function(arm,size=0x40) addr:0x20a8954 _ZN13LinkStateBase18func_ov00_020a8994Ev kind:function(arm,size=0x28) addr:0x20a8994 -_ZN13LinkStateBase18func_ov00_020a89bcEii kind:function(arm,size=0x4c) addr:0x20a89bc +_ZN13LinkStateBase18func_ov00_020a89bcEPii kind:function(arm,size=0x4c) addr:0x20a89bc _ZN13LinkStateBase18func_ov00_020a8a08Ei kind:function(arm,size=0x44) addr:0x20a8a08 _ZN13LinkStateBase18func_ov00_020a8a4cEii kind:function(arm,size=0x44) addr:0x20a8a4c _ZN13LinkStateBase18func_ov00_020a8a90Ei kind:function(arm,size=0x20) addr:0x20a8a90 diff --git a/config/eur/arm9/overlays/ov059/delinks.txt b/config/eur/arm9/overlays/ov059/delinks.txt index 4554202b..0bf10b3a 100644 --- a/config/eur/arm9/overlays/ov059/delinks.txt +++ b/config/eur/arm9/overlays/ov059/delinks.txt @@ -4,3 +4,9 @@ .data start:0x0219b140 end:0x0219b1c0 kind:data align:32 .bss start:0x0219b1c0 end:0x0219b1c0 kind:bss align:32 + +src/59_Hammer/Player/EquipHammer.cpp: + .text start:0x02198d00 end:0x0219933c + +src/59_Hammer/Actor/Navi/ActorNaviBase.cpp: + .text start:0x0219933c end:0x0219b110 diff --git a/config/usa/arm9/overlays/ov000/symbols.txt b/config/usa/arm9/overlays/ov000/symbols.txt index 6a5f320f..a8665dd1 100644 --- a/config/usa/arm9/overlays/ov000/symbols.txt +++ b/config/usa/arm9/overlays/ov000/symbols.txt @@ -680,7 +680,7 @@ _ZN10MapManager18func_ov00_0208527cEv kind:function(arm,size=0x180) addr:0x20852 _ZN10MapManager18func_ov00_020853fcEv kind:function(arm,size=0x198) addr:0x208539c _ZN10MapManager18func_ov00_02085594Ev kind:function(arm,size=0x2a8) addr:0x2085534 _ZN10MapManager18func_ov00_0208583cEiP5Vec3pi kind:function(arm,size=0x74) addr:0x20857dc -_ZN10MapManager18func_ov00_020858b0Ev kind:function(arm,size=0x184) addr:0x2085850 +_ZN10MapManager18func_ov00_020858b0EPS_P5Vec3pi kind:function(arm,size=0x184) addr:0x2085850 _ZN10MapManager18func_ov00_02085a34Eii kind:function(arm,size=0x22c) addr:0x20859d4 _ZN10MapManager18func_ov00_02085c60Eiiii kind:function(arm,size=0x3e4) addr:0x2085c00 _ZN10MapManager18func_ov00_02086044Eiii kind:function(arm,size=0x240) addr:0x2085fe4 @@ -1921,7 +1921,7 @@ _ZN13LinkStateBase18func_ov00_020a8774EP5Vec3pi kind:function(arm,size=0xd0) add _ZN13LinkStateBase18func_ov00_020a8844EP5Vec3pbb kind:function(arm,size=0x110) addr:0x20a87e4 _ZN13LinkStateBase18func_ov00_020a8954EbPi kind:function(arm,size=0x40) addr:0x20a88f4 _ZN13LinkStateBase18func_ov00_020a8994Ev kind:function(arm,size=0x28) addr:0x20a8934 -_ZN13LinkStateBase18func_ov00_020a89bcEii kind:function(arm,size=0x4c) addr:0x20a895c +_ZN13LinkStateBase18func_ov00_020a89bcEPii kind:function(arm,size=0x4c) addr:0x20a895c _ZN13LinkStateBase18func_ov00_020a8a08Ei kind:function(arm,size=0x44) addr:0x20a89a8 _ZN13LinkStateBase18func_ov00_020a8a4cEii kind:function(arm,size=0x44) addr:0x20a89ec _ZN13LinkStateBase18func_ov00_020a8a90Ei kind:function(arm,size=0x20) addr:0x20a8a30 diff --git a/include/Map/MapManager.hpp b/include/Map/MapManager.hpp index 13ca4348..346d43d8 100644 --- a/include/Map/MapManager.hpp +++ b/include/Map/MapManager.hpp @@ -237,7 +237,7 @@ public: static unk8 func_ov00_020853fc(); static unk8 func_ov00_02085594(); static void func_ov00_0208583c(unk32 param_1, Vec3p *param_2, unk32 param_3); - static unk8 func_ov00_020858b0(); + static unk8 func_ov00_020858b0(MapManager *param_1, Vec3p *param_2, s32 param_3); s32 func_ov00_02085a34(unk32 param_2, unk32 param_3); unk8 func_ov00_02085c60(unk32 param_2, unk32 param_3, unk32 param_4, unk32 param_5); unk8 func_ov00_02086044(unk32 param_2, unk32 param_3, unk32 param_4); diff --git a/include/Player/EquipHammer.hpp b/include/Player/EquipHammer.hpp index 27e046c5..0ac23473 100644 --- a/include/Player/EquipHammer.hpp +++ b/include/Player/EquipHammer.hpp @@ -11,12 +11,12 @@ private: /* 00 (base) */ /* 09 */ unk8 mUnk_09[3]; /* 0c */ Vec3p mUnk_0c; - /* 18 */ unk32 mUnk_18; - /* 1c */ unk8 mUnk_1c; - /* 1d */ unk8 mUnk_1d; + /* 18 */ s32 mUnk_18; + /* 1c */ u8 mUnk_1c; + /* 1d */ u8 mUnk_1d; /* 1e */ unk8 mUnk_1e[2]; /* 20 */ unk32 mUnk_20; - /* 24 */ void *mUnk_24; + /* 24 */ unk32 mUnk_24; /* 28 */ unk32 mUnk_28; /* 2c */ diff --git a/include/Player/LinkStateBase.hpp b/include/Player/LinkStateBase.hpp index bca6c796..e099c021 100644 --- a/include/Player/LinkStateBase.hpp +++ b/include/Player/LinkStateBase.hpp @@ -88,7 +88,7 @@ public: void func_ov00_020a8844(Vec3p *param1, bool param2, bool param3); void func_ov00_020a8954(bool param1, unk32 *param2); void func_ov00_020a8994(); - void func_ov00_020a89bc(unk32 param1, unk32 param2); + void func_ov00_020a89bc(unk32* param1, unk32 param2); void func_ov00_020a8a08(unk32 param1); void func_ov00_020a8a4c(unk32 param1, unk32 param2); void func_ov00_020a8a90(unk32 param1); diff --git a/include/Player/LinkStateItem.hpp b/include/Player/LinkStateItem.hpp index cba602f8..9a5d4585 100644 --- a/include/Player/LinkStateItem.hpp +++ b/include/Player/LinkStateItem.hpp @@ -24,9 +24,7 @@ public: /* 2e */ unk8 mUnk_2e[2]; /* 30 */ void *mUnk_30; /* 34 */ unk32 mUnk_34; - /* 38 */ unk32 mUnk_38; - /* 3c */ void *mUnk_3c; - /* 40 */ unk32 mUnk_40; + /* 38 */ Vec3p mUnk_38; /* 44 */ unk32 mUnk_44; /* 48 */ void *mUnk_48; /* 4c */ unk32 mUnk_4c; diff --git a/src/00_Core/Map/MapManager.cpp b/src/00_Core/Map/MapManager.cpp index 9c23a95b..f3311bf5 100644 --- a/src/00_Core/Map/MapManager.cpp +++ b/src/00_Core/Map/MapManager.cpp @@ -192,7 +192,7 @@ unk8 MapManager::func_ov00_0208527c() {} unk8 MapManager::func_ov00_020853fc() {} unk8 MapManager::func_ov00_02085594() {} void MapManager::func_ov00_0208583c(unk32 param_1, Vec3p *param_2, unk32 param_3) {} -unk8 MapManager::func_ov00_020858b0() {} +unk8 MapManager::func_ov00_020858b0(MapManager *param_1, Vec3p *param_2, s32 param_3) {} s32 MapManager::func_ov00_02085a34(unk32 param_2, unk32 param_3) {} unk8 MapManager::func_ov00_02085c60(unk32 param_2, unk32 param_3, unk32 param_4, unk32 param_5) {} unk8 MapManager::func_ov00_02086044(unk32 param_2, unk32 param_3, unk32 param_4) {} diff --git a/src/00_Core/Player/LinkStateBase.cpp b/src/00_Core/Player/LinkStateBase.cpp index 7479667e..70946bd2 100644 --- a/src/00_Core/Player/LinkStateBase.cpp +++ b/src/00_Core/Player/LinkStateBase.cpp @@ -44,7 +44,7 @@ bool LinkStateBase::func_ov00_020a8774(Vec3p *param1, s32 angle) {} void LinkStateBase::func_ov00_020a8844(Vec3p *param1, bool param2, bool param3) {} void LinkStateBase::func_ov00_020a8954(bool param1, unk32 *param2) {} void LinkStateBase::func_ov00_020a8994() {} -void LinkStateBase::func_ov00_020a89bc(unk32 param1, unk32 param2) {} +void LinkStateBase::func_ov00_020a89bc(unk32* param1, unk32 param2) {} void LinkStateBase::func_ov00_020a8a08(unk32 param1) {} void LinkStateBase::func_ov00_020a8a4c(unk32 param1, unk32 param2) {} void LinkStateBase::func_ov00_020a8a90(unk32 param1) {} diff --git a/src/59_Hammer/Player/EquipHammer.cpp b/src/59_Hammer/Player/EquipHammer.cpp index 00fbd208..85a024a3 100644 --- a/src/59_Hammer/Player/EquipHammer.cpp +++ b/src/59_Hammer/Player/EquipHammer.cpp @@ -1,21 +1,133 @@ #include "Player/EquipHammer.hpp" #include "Player/LinkStateItem.hpp" +#include "Map/MapManager.hpp" +#include "Item/ItemManager.hpp" -bool EquipHammer::IsUsable(unk32 param1) const {} -LinkStateItem *GetLinkStateItem() {} -void EquipHammer::vfunc_18() {} -void EquipHammer::vfunc_1c() {} -void EquipHammer::vfunc_30() {} -void EquipHammer::func_ov059_02198e90() {} -bool EquipHammer::func_ov059_02198ebc() {} -bool EquipHammer::func_ov059_02198ed4() {} -void EquipHammer::func_ov059_02198f10(Vec3p *vec, unk32 param2, s32 param3) {} -void EquipHammer::func_ov059_02198fa8(unk32 param1) {} -void EquipHammer::vfunc_38(unk32 param1) {} -u32 EquipHammer::vfunc_2c() {} -bool EquipHammer::func_ov059_02198fe0() {} -void LinkStateItem::func_ov059_02198ffc() {} -void LinkStateItem::func_ov059_0219907c() {} -void LinkStateItem::func_ov059_021990a4() {} -EquipHammer *GetEquipHammer() {} -void LinkStateItem::StopUsingHammer() {} +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 LinkStateItem *GetLinkStateItem() { + return (LinkStateItem*)GetLinkState(1); +} + +ARM void EquipHammer::vfunc_18() { + this->mUnk_1c = 0; + this->mUnk_1d = 0; + this->mUnk_18 = 0; + this->mUnk_28 = 0x1000; +} + +ARM void EquipHammer::vfunc_1c() { + this->mUnk_1c = 0; + this->mUnk_1d = 0; + this->mUnk_18 = 0; +} + +ARM void EquipHammer::vfunc_30() { + if (this->mUnk_24 > 0) { + this->mUnk_24--; + + if (this->mUnk_24 <= 1) { + this->mUnk_18 = 0; + } + } +} + +ARM void EquipHammer::func_ov059_02198e90() { + if (this->mUnk_24 <= 0 && this->mUnk_1c == 0) { + this->mUnk_1c = 1; + this->mUnk_20 = 0x28; + } +} + +ARM bool EquipHammer::func_ov059_02198ebc() { + if (this->mUnk_24 <= 0) { + this->mUnk_1d = 1; + } + + return true; +} + +ARM bool EquipHammer::func_ov059_02198ed4() { + if (this->mUnk_20 > 0) { + this->mUnk_18 = 0x10000; + this->mUnk_20--; + return this->mUnk_20 == 0; + } + + this->mUnk_18 = 0x20000; + return false; +} + +ARM void EquipHammer::func_ov059_02198f10(Vec3p *vec, unk32 param2, s32 param3) { + Vec3p local_18; + + this->mUnk_0c = *vec; + + if (this->mUnk_1d != 0) { + this->mUnk_1d = 0; + + if (param3 == 0) { + local_18 = this->mUnk_0c; + MapManager::func_ov00_020858b0(gMapManager, &local_18, this->mUnk_20 == 0x0); + } + } + + this->mUnk_1c = 0; + this->mUnk_24 = 4; + this->mUnk_28 = param2; +} + +ARM void EquipHammer::func_ov059_02198fa8(unk32 param1) { + this->mUnk_1d = 0; + this->mUnk_1c = 0; + this->mUnk_18 = 0; + this->mUnk_24 = 4; + this->mUnk_28 = param1; +} + +ARM void EquipHammer::vfunc_38(unk32 param1) { +} + +ARM u32 EquipHammer::vfunc_2c() { + //! TODO: fake? + return (this->mUnk_18 + (s32)((u32)(this->mUnk_18 >> 0xB) >> 0x14)) >> 0xC; +} + +ARM bool EquipHammer::func_ov059_02198fe0() { + return this->mUnk_18 == 0x20000 && this->mUnk_20 == 0; +} + +// non-matching +ARM void LinkStateItem::func_ov059_02198ffc() { + s16 dest; + Vec3p local_20; + Vec3p local_14; + + local_14 = this->mUnk_38; + local_20 = *this->GetPlayerPos(); + + Vec3p_Sub(&local_14, &local_20, &local_14); + dest = Atan2(local_14.x, local_14.z); + ApproachAngle_thunk(this->GetPlayerAngle(), &dest, 0x2000); +} + +ARM void LinkStateItem::func_ov059_0219907c() { + this->func_ov00_020a89bc(&data_ov059_0219b180, 1); + this->mUnk_25[2] = 0; + this->mUnk_25[3] = 0; +} + +ARM void LinkStateItem::func_ov059_021990a4() {} + +ARM EquipHammer *GetEquipHammer() { + return (EquipHammer*)ItemManager::GetEquipItemUnchecked(ItemFlag_Hammer); +} + +ARM void LinkStateItem::StopUsingHammer() { + gItemManager->GetFairy(FairyId_Courage); + func_ov000_020b853c(); +}