summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAetias <144526980+AetiasHax@users.noreply.github.com>2025-07-31 21:22:55 +0200
committerGitHub <noreply@github.com>2025-07-31 21:22:55 +0200
commit82f54b2f075e7f6612b80edf52b37bb6377e0d49 (patch)
tree93550aa10732bc050088b5773ce3ea0d09f6e0dc /src
parent8ad6359c7d3c7afcbddd7d450b7fa4b9764255b6 (diff)
EquipBombchu (#131)
* Map symbol in Game * EquipBombchu 12% * EquipBombchu 53% * EquipBombchu 71% * configure: Don't verify dsd version if `--dsd` specified * EquipBombchu 89% * Fix regression
Diffstat (limited to 'src')
-rw-r--r--src/00_Core/Actor/Actor.cpp9
-rw-r--r--src/00_Core/Actor/Navi/ActorNavi.cpp2
-rw-r--r--src/00_Core/Item/ItemManager.cpp14
-rw-r--r--src/00_Core/Map/MapBase.cpp2
-rw-r--r--src/00_Core/Map/MapManager.cpp14
-rw-r--r--src/00_Core/Player/EquipItem.cpp2
-rw-r--r--src/00_Core/Player/PlayerBase.cpp2
-rw-r--r--src/00_Core/Player/PlayerControl.cpp4
-rw-r--r--src/00_Core/Render/ModelRender.cpp4
-rw-r--r--src/00_Core/Unknown/UnkStruct_ov000_020beba8.cpp6
-rw-r--r--src/04_Load/Actor/Navi/ActorNavi.cpp5
-rw-r--r--src/04_Load/Actor/Navi/ActorNaviBase.cpp3
-rw-r--r--src/04_Load/Player/LinkStateDamage.cpp3
-rw-r--r--src/05/DTCM/UnkStruct_027e103c.cpp2
-rw-r--r--src/05/Player/LinkStateMove_05.cpp2
-rw-r--r--src/14_Land/Actor/Player/ActorBlast.cpp2
-rw-r--r--src/14_Land/Actor/Player/ActorBomb.cpp2
-rw-r--r--src/14_Land/Player/EquipBombchu.cpp3
-rw-r--r--src/18_Overworld/Map/MapOverworld.cpp2
-rw-r--r--src/54_Scoop/Player/EquipScoop.cpp2
-rw-r--r--src/55_Bomb/Player/EquipBomb.cpp2
-rw-r--r--src/56_Bow/Player/EquipBow.cpp4
-rw-r--r--src/57_Rope/Actor/Player/ActorRope.cpp2
-rw-r--r--src/58_Bombchu/Player/EquipBombchu.cpp911
-rw-r--r--src/59_Hammer/Actor/Navi/ActorNaviBase_59.cpp227
-rw-r--r--src/59_Hammer/Player/EquipHammer.cpp2
-rw-r--r--src/ITCM/Map/MapManager.cpp5
27 files changed, 996 insertions, 242 deletions
diff --git a/src/00_Core/Actor/Actor.cpp b/src/00_Core/Actor/Actor.cpp
index 47d5e3d6..c2a0f06c 100644
--- a/src/00_Core/Actor/Actor.cpp
+++ b/src/00_Core/Actor/Actor.cpp
@@ -15,6 +15,7 @@ extern "C" {
#include "Player/PlayerLinkBase.hpp"
#include "Player/TouchControl.hpp"
#include "Save/AdventureFlags.hpp"
+#include "Unknown/UnkStruct_ov000_020e9c88.hpp"
static char *sShipTypes[] = {"brg", "anc", "bow", "hul", "can", "dco", "pdl", "fnl"};
@@ -491,7 +492,7 @@ ARM bool Actor::CollidesWithShield(Cylinder *param1) {
Vec3p vecFromPlayer;
Vec3p_Sub(&mPos, &gPlayerPos, &vecFromPlayer);
s32 currAngle = gPlayerAngle;
- s32 angle = Atan2(vecFromPlayer.x, vecFromPlayer.z);
+ s32 angle = FX_Atan2Idx(vecFromPlayer.x, vecFromPlayer.z);
s32 angleDiff = (s16) angle - currAngle;
if (angleDiff < 0) {
angleDiff = -angleDiff;
@@ -705,7 +706,7 @@ ARM s16 Actor::GetAngleTo(Vec3p *vec) {
q20 dz = vec->z - mPos.z;
q20 dx = vec->x - mPos.x;
if (dx != 0 || dz != 0) {
- angle = Atan2(dx, dz);
+ angle = FX_Atan2Idx(dx, dz);
}
return angle;
}
@@ -973,11 +974,9 @@ ARM void Actor::KillInBounds() {
this->Kill();
}
-extern unk32 data_ov00_020e9c88;
-extern "C" void func_ov00_0207b89c(unk32 *param1, s32 param2, Vec3p *param3, void *param4, Actor *param5);
void vfunc_ac_Thunk(Actor *actor);
ARM void Actor::func_ov00_020c31c0(unk32 param1) {
- func_ov00_0207b89c(&data_ov00_020e9c88, param1, &mPos, &vfunc_ac_Thunk, this);
+ data_ov000_020e9c88.func_ov000_0207b89c(param1, &mPos, (void (*)(void *)) &vfunc_ac_Thunk, this);
}
ARM void vfunc_ac_Thunk(Actor *actor) {
diff --git a/src/00_Core/Actor/Navi/ActorNavi.cpp b/src/00_Core/Actor/Navi/ActorNavi.cpp
index 41a2015a..dd93a77a 100644
--- a/src/00_Core/Actor/Navi/ActorNavi.cpp
+++ b/src/00_Core/Actor/Navi/ActorNavi.cpp
@@ -10,7 +10,7 @@ UnkStruct_ov000_020b8110::UnkStruct_ov000_020b8110() :
UnkStruct_ov000_020b8110::~UnkStruct_ov000_020b8110() {}
void UnkStruct_ov000_020b8110::vfunc_08(unk16 *param1) {}
void UnkStruct_ov000_020b8110::vfunc_18(s32 *param1) {}
-void UnkStruct_ov000_020b8110::vfunc_14(u16 *param1) {}
+bool UnkStruct_ov000_020b8110::vfunc_14(u16 *param1) {}
void ActorNavi::func_ov000_020b8200() {}
void ActorNavi::vfunc_c4() {}
void ActorNavi::vfunc_c8() {}
diff --git a/src/00_Core/Item/ItemManager.cpp b/src/00_Core/Item/ItemManager.cpp
index 9fed2bf7..c15eafe4 100644
--- a/src/00_Core/Item/ItemManager.cpp
+++ b/src/00_Core/Item/ItemManager.cpp
@@ -167,24 +167,24 @@ ARM ItemModel *ItemManager::GetItemModel(ItemModelId id) {
return mItemModels[id];
}
-extern "C" void func_ov000_020c0bdc(unk32 param1, unk32 param2);
-ARM void ItemManager::func_ov00_020ad538(unk32 param1) const {
+extern "C" void *func_ov000_020c0bdc(unk32 param1, const ItemManager_Unk1 *param2);
+ARM void *ItemManager::func_ov00_020ad538(const ItemManager_Unk1 *param1) const {
unk32 unk1 = gItemModelLoader->func_ov000_020bb3a8(6);
- func_ov000_020c0bdc(unk1, param1);
+ return func_ov000_020c0bdc(unk1, param1);
}
-ARM void ItemManager::func_ov00_020ad560(unk32 param1) const {
+ARM void *ItemManager::func_ov00_020ad560(const ItemManager_Unk1 *param1) const {
unk32 unk1 = gItemModelLoader->func_ov000_020bb3a8(7);
- func_ov000_020c0bdc(unk1, param1);
+ return func_ov000_020c0bdc(unk1, param1);
}
ARM ItemModel *ItemManager::GetDungeonItemModel(u32 index) {
return mDungeonItemModels[index];
}
-ARM void ItemManager::func_ov00_020ad594(unk32 param1) const {
+ARM void *ItemManager::func_ov00_020ad594(const ItemManager_Unk1 *param1) const {
unk32 unk1 = gItemModelLoader->func_ov000_020bb3a8(11);
- func_ov000_020c0bdc(unk1, param1);
+ return func_ov000_020c0bdc(unk1, param1);
}
ARM void ItemManager::Sword_vfunc_38(unk32 param1) {
diff --git a/src/00_Core/Map/MapBase.cpp b/src/00_Core/Map/MapBase.cpp
index 555024bc..b3a7122e 100644
--- a/src/00_Core/Map/MapBase.cpp
+++ b/src/00_Core/Map/MapBase.cpp
@@ -27,7 +27,7 @@ unk32 MapBase::vfunc_68(Vec3p *param_1, bool param_2) {}
unk8 MapBase::func_ov00_0207e940(unk8 *param_1) {}
unk8 MapBase::func_ov00_0207e968() {}
unk8 MapBase::func_ov00_0207e96c() {}
-unk8 MapBase::vfunc_6c(unk32 param_2, unk32 param_3, unk32 param_4) {}
+unk8 MapBase::vfunc_6c(Vec3p *param_2, unk32 *param_3, Vec3p *param_4) {}
unk32 MapBase::vfunc_70(Vec3p *param_2) {}
unk32 *MapBase::vfunc_74(Vec3p *param_2) {}
unk8 MapBase::func_ov00_0207f100() {}
diff --git a/src/00_Core/Map/MapManager.cpp b/src/00_Core/Map/MapManager.cpp
index f2c38569..71bcd9dc 100644
--- a/src/00_Core/Map/MapManager.cpp
+++ b/src/00_Core/Map/MapManager.cpp
@@ -1264,7 +1264,7 @@ ARM unk32 MapManager::func_ov00_02083f44(Vec3p *param_2, bool param_3) {
return this->func_ov00_02083ef8(param_2, &local_18, param_3);
}
-unk8 MapManager::MapData_vfunc_6c(unk32 param_2, unk32 param_3, unk32 param_4) {
+unk8 MapManager::MapData_vfunc_6c(Vec3p *param_2, unk32 *param_3, Vec3p *param_4) {
this->mMap->vfunc_6c(param_2, param_3, param_4);
}
@@ -2503,7 +2503,7 @@ unk8 MapManager::func_ov00_02085c60(Vec3p *param_2, unk32 *param_3, unk32 *param
Vec2p iStack_104;
Vec3p VStack_f0;
Vec3p VStack_e4;
- Vec4p VStack_d8;
+ Sphere VStack_d8;
Vec3p VStack_c8;
Vec3p VStack_bc;
Vec3p VStack_b0;
@@ -2566,11 +2566,11 @@ unk8 MapManager::func_ov00_02085c60(Vec3p *param_2, unk32 *param_3, unk32 *param
VStack_b0.z = VStack_bc.z;
Vec3p_Add(&VStack_b0, &VStack_c8, &VStack_b0);
}
- bVar5 = false;
- VStack_d8.y = param_5 << 1;
- VStack_d8.x = 0;
- VStack_d8.z = 0;
- VStack_d8.w = param_5;
+ bVar5 = false;
+ VStack_d8.pos.y = param_5 << 1;
+ VStack_d8.pos.x = 0;
+ VStack_d8.pos.z = 0;
+ VStack_d8.radius = param_5;
do {
bVar4 = func_01ffbe78(param_2, &VStack_b0, &VStack_bc, &VStack_d8);
if (bVar4) {
diff --git a/src/00_Core/Player/EquipItem.cpp b/src/00_Core/Player/EquipItem.cpp
index 8751b91d..1c51f48d 100644
--- a/src/00_Core/Player/EquipItem.cpp
+++ b/src/00_Core/Player/EquipItem.cpp
@@ -13,7 +13,7 @@ unk32 EquipItem::vfunc_48(unk32 param1) const {}
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) {}
+void EquipItem::func_ov000_020be9e4(Vec3p param3, s16 param4) {}
s16 EquipItem::GetAmmo() const {}
void EquipItem::GiveAmmo(u32 amount) {}
bool EquipItem::GetHitbox(Cylinder *hitbox) const {}
diff --git a/src/00_Core/Player/PlayerBase.cpp b/src/00_Core/Player/PlayerBase.cpp
index 6f89f0d1..5edea52f 100644
--- a/src/00_Core/Player/PlayerBase.cpp
+++ b/src/00_Core/Player/PlayerBase.cpp
@@ -54,7 +54,7 @@ ARM void PlayerBase::LookAt(Vec3p *target) {
if (vec.x == 0 && vec.z == 0) {
return;
}
- gPlayerAngle = Atan2(*(vs32 *) &vec.x, vec.z);
+ gPlayerAngle = FX_Atan2Idx(*(vs32 *) &vec.x, vec.z);
}
ARM bool PlayerBase::func_ov00_020a7c00(s32 param1) {
diff --git a/src/00_Core/Player/PlayerControl.cpp b/src/00_Core/Player/PlayerControl.cpp
index 1e5f5d98..50c08bda 100644
--- a/src/00_Core/Player/PlayerControl.cpp
+++ b/src/00_Core/Player/PlayerControl.cpp
@@ -873,7 +873,7 @@ ARM bool PlayerControl::func_ov00_020b0b0c(s16 *pAngle, ItemFlag *pEquipId, unk3
*pAngle = mTouchAngle + ((s16) (mTouchFastAngle - mTouchAngle)) / 2;
if (mTouchSpeed > FLOAT_TO_Q20(0.5)) {
- q4 touchMoveAngle = Atan2(mTouchSpeedX, mTouchSpeedY) - *pAngle;
+ q4 touchMoveAngle = FX_Atan2Idx(mTouchSpeedX, mTouchSpeedY) - *pAngle;
if (pFast != NULL) {
*pFast = true;
}
@@ -881,7 +881,7 @@ ARM bool PlayerControl::func_ov00_020b0b0c(s16 *pAngle, ItemFlag *pEquipId, unk3
return true;
}
- s32 unkAngle = Atan2(local_20.x, local_20.z);
+ s32 unkAngle = FX_Atan2Idx(local_20.x, local_20.z);
s32 unkAngle2 = (s16) ((s16) unkAngle - *pAngle);
Vec3p VStack_2c = {INT_TO_Q20(mTouchFastX), INT_TO_Q20(mTouchFastY), 0};
diff --git a/src/00_Core/Render/ModelRender.cpp b/src/00_Core/Render/ModelRender.cpp
index 03a66133..208ddb45 100644
--- a/src/00_Core/Render/ModelRender.cpp
+++ b/src/00_Core/Render/ModelRender.cpp
@@ -1,6 +1,6 @@
#include "Render/ModelRender.hpp"
-ModelRender::ModelRender() {}
+ModelRender::ModelRender(unk32 param1) {}
ModelRender::~ModelRender() {}
void *ModelRender::GetLcdcAddress() {}
void ModelRender::vfunc_0c(ItemModel *model) {}
@@ -10,7 +10,7 @@ void ModelRender::SetRotationTranslation(Mat3p *rotation, Vec3p *translation) {}
void ModelRender::SetTranslation(Vec3p *translation) {}
void ModelRender::PushGeometryCommands() {}
void ModelRender::vfunc_20() {}
-void ModelRender::vfunc_24(unk32 param1) {}
+void ModelRender::vfunc_24(UnkStruct_ov000_020c0c08 *param1) {}
void ModelRender::vfunc_28() {}
void ModelRender::vfunc_2c() {}
void ModelRender::vfunc_34() {}
diff --git a/src/00_Core/Unknown/UnkStruct_ov000_020beba8.cpp b/src/00_Core/Unknown/UnkStruct_ov000_020beba8.cpp
index 1d46c6b3..076ddcbf 100644
--- a/src/00_Core/Unknown/UnkStruct_ov000_020beba8.cpp
+++ b/src/00_Core/Unknown/UnkStruct_ov000_020beba8.cpp
@@ -1,9 +1,9 @@
#include "Unknown/UnkStruct_ov000_020beba8.hpp"
UnkStruct_ov000_020beba8::UnkStruct_ov000_020beba8(unk32 param1) {}
-void UnkStruct_ov000_020beba8::vfunc_08(unk16 *param1) {}
+bool UnkStruct_ov000_020beba8::vfunc_08(UnkStruct_ov000_020beba8_08 *param1) {}
void UnkStruct_ov000_020beba8::vfunc_0c(unk16 *param1) {}
-void UnkStruct_ov000_020beba8::vfunc_10(s32 *param1) {}
+bool UnkStruct_ov000_020beba8::vfunc_10(s32 *param1) {}
void UnkStruct_ov000_020beba8::vfunc_18(s32 *param1) {}
-void UnkStruct_ov000_020beba8::vfunc_14(u16 *param1) {}
+bool UnkStruct_ov000_020beba8::vfunc_14(u16 *param1, s32 param2) {}
UnkStruct_ov000_020beba8::~UnkStruct_ov000_020beba8() {}
diff --git a/src/04_Load/Actor/Navi/ActorNavi.cpp b/src/04_Load/Actor/Navi/ActorNavi.cpp
index 12939c04..ca1635f8 100644
--- a/src/04_Load/Actor/Navi/ActorNavi.cpp
+++ b/src/04_Load/Actor/Navi/ActorNavi.cpp
@@ -1,3 +1,6 @@
#include "Actor/Navi/ActorNavi.hpp"
+#include "Item/ItemManager.hpp"
-ActorNavi::ActorNavi() {}
+ActorNavi::ActorNavi() :
+ mUnk_294(0),
+ mUnk_2f0(&mUnk_314, gItemManager->GetItemModel(ItemModelId_Hammer)) {}
diff --git a/src/04_Load/Actor/Navi/ActorNaviBase.cpp b/src/04_Load/Actor/Navi/ActorNaviBase.cpp
index 21d91459..2ad0dc0b 100644
--- a/src/04_Load/Actor/Navi/ActorNaviBase.cpp
+++ b/src/04_Load/Actor/Navi/ActorNaviBase.cpp
@@ -1,6 +1,7 @@
#include "Actor/Navi/ActorNaviBase.hpp"
-ActorNaviBase::ActorNaviBase() {}
+ActorNaviBase::ActorNaviBase() :
+ mUnk_168(0) {}
ActorNaviBase::~ActorNaviBase() {}
void func_ov004_021079d4(unk32 *param1) {}
bool ActorNaviBase::Init() {}
diff --git a/src/04_Load/Player/LinkStateDamage.cpp b/src/04_Load/Player/LinkStateDamage.cpp
index 2eecae46..3f526599 100644
--- a/src/04_Load/Player/LinkStateDamage.cpp
+++ b/src/04_Load/Player/LinkStateDamage.cpp
@@ -1,6 +1,7 @@
#include "Player/LinkStateDamage.hpp"
LinkStateDamage::LinkStateDamage(PlayerLinkBase *link) :
- LinkStateBase(link) {}
+ LinkStateBase(link),
+ mUnk_3c(0) {}
unk32 *_Z19func_ov004_021083f4Piiii(unk32 *param1, unk32 param2, unk32 param3, unk32 param4) {}
LinkStateDamage::~LinkStateDamage() {}
diff --git a/src/05/DTCM/UnkStruct_027e103c.cpp b/src/05/DTCM/UnkStruct_027e103c.cpp
index 5e84fbe5..d3829d88 100644
--- a/src/05/DTCM/UnkStruct_027e103c.cpp
+++ b/src/05/DTCM/UnkStruct_027e103c.cpp
@@ -21,4 +21,4 @@ bool UnkStruct_027e103c::func_ov005_021040ec() {}
void UnkStruct_027e103c::func_ov005_02104114() {}
void UnkStruct_027e103c::func_ov005_0210413c() {}
void UnkStruct_027e103c::func_ov005_02104160() {}
-void UnkStruct_027e103c::func_Ov005_0210418c(char param1) {}
+void UnkStruct_027e103c::func_ov005_0210418c(char param1) {}
diff --git a/src/05/Player/LinkStateMove_05.cpp b/src/05/Player/LinkStateMove_05.cpp
index 805685b3..043a05b7 100644
--- a/src/05/Player/LinkStateMove_05.cpp
+++ b/src/05/Player/LinkStateMove_05.cpp
@@ -227,7 +227,7 @@ ARM bool UnkFilterActor::Filter(Actor *actor) {
Vec3p sp0;
Vec3p_Sub(&actor->mPos, &mPos, &sp0);
s16 angle2 = mAngle;
- s16 angle1 = (s16) Atan2(sp0.x, sp0.z);
+ s16 angle1 = (s16) FX_Atan2Idx(sp0.x, sp0.z);
s32 var_r6 = (s16) (angle1 - angle2) >> 3;
if (var_r6 < 0) {
var_r6 = -var_r6;
diff --git a/src/14_Land/Actor/Player/ActorBlast.cpp b/src/14_Land/Actor/Player/ActorBlast.cpp
index 06f82f63..64bea809 100644
--- a/src/14_Land/Actor/Player/ActorBlast.cpp
+++ b/src/14_Land/Actor/Player/ActorBlast.cpp
@@ -3,7 +3,7 @@
ActorType ActorBlast::gType = ActorType(ActorTypeId_Blast, (ActorCreateFunc) ActorBlast::Create, NULL);
ActorBlast *ActorBlast::Create() {}
-void ActorBlast_Unk1::vfunc_10(s32 *param1) {}
+bool ActorBlast_Unk1::vfunc_10(s32 *param1) {}
ActorBlast::ActorBlast() {}
ActorBlast::~ActorBlast() {}
bool ActorBlast::Init() {}
diff --git a/src/14_Land/Actor/Player/ActorBomb.cpp b/src/14_Land/Actor/Player/ActorBomb.cpp
index 91224f12..ce804b85 100644
--- a/src/14_Land/Actor/Player/ActorBomb.cpp
+++ b/src/14_Land/Actor/Player/ActorBomb.cpp
@@ -4,7 +4,7 @@ ActorType ActorBomb::gType = ActorType(ActorTypeId_Bomb, (ActorCreateFunc) Actor
ActorBomb *ActorBomb::Create() {}
void ActorBomb_Unk1::vfunc_0c(unk16 *param1) {}
-void ActorBomb_Unk1::vfunc_10(s32 *param1) {}
+bool ActorBomb_Unk1::vfunc_10(s32 *param1) {}
ActorBomb::ActorBomb() {}
ActorBomb_Unk2::~ActorBomb_Unk2() {}
ActorBomb::~ActorBomb() {}
diff --git a/src/14_Land/Player/EquipBombchu.cpp b/src/14_Land/Player/EquipBombchu.cpp
index 5ebfe5b8..de5fdb6b 100644
--- a/src/14_Land/Player/EquipBombchu.cpp
+++ b/src/14_Land/Player/EquipBombchu.cpp
@@ -1,13 +1,12 @@
#include "Player/EquipBombchu.hpp"
EquipBombchu::EquipBombchu() {}
-EquipBombchu_Unk1::EquipBombchu_Unk1() {}
EquipBombchu::~EquipBombchu() {}
void EquipBombchu::func_ov014_0213eba4() {}
void EquipBombchu::func_ov014_0213ec40() {}
void EquipBombchu::func_ov014_0213ec64() {}
ItemFlag EquipBombchu::GetId() const {}
void EquipBombchu::vfunc_34(unk16 *param1) {}
-Actor *EquipBombchu::func_ov014_0213ed74() {}
+Actor *EquipBombchu::func_ov014_0213ed74() const {}
void *EquipBombchu::func_ov014_0213ed94(s32 param1) {}
void EquipBombchu::func_ov014_0213eda0() {}
diff --git a/src/18_Overworld/Map/MapOverworld.cpp b/src/18_Overworld/Map/MapOverworld.cpp
index de9b727e..9b892131 100644
--- a/src/18_Overworld/Map/MapOverworld.cpp
+++ b/src/18_Overworld/Map/MapOverworld.cpp
@@ -29,7 +29,7 @@ void MapOverworld::vfunc_b0(unk32 param_2, unk32 param_3) {}
void MapOverworld::func_ov018_0215c650() {}
void MapOverworld::func_ov018_0215c6ac() {}
void MapOverworld::func_ov018_0215c6d0() {}
-MapOverworld_Unk1::MapOverworld_Unk1(u32 param1, u8 *param2, unk32 param3) :
+MapOverworld_Unk1::MapOverworld_Unk1(u32 param1, ItemModel *param2, unk32 param3) :
UnkStruct_ov000_020c0c08(0, param2) {}
void MapOverworld::func_ov018_0215c9ac() {}
void func_ov018_0215ca24(s32 param1) {}
diff --git a/src/54_Scoop/Player/EquipScoop.cpp b/src/54_Scoop/Player/EquipScoop.cpp
index ba34e890..5c30cc39 100644
--- a/src/54_Scoop/Player/EquipScoop.cpp
+++ b/src/54_Scoop/Player/EquipScoop.cpp
@@ -1,7 +1,7 @@
#include "Player/EquipScoop.hpp"
#include "Player/LinkStateItem.hpp"
-ModelRender EquipScoop::gModelRender;
+ModelRender EquipScoop::gModelRender(0);
void EquipScoop::vfunc_00() {}
void EquipScoop::vfunc_18() {}
diff --git a/src/55_Bomb/Player/EquipBomb.cpp b/src/55_Bomb/Player/EquipBomb.cpp
index fcfb30c6..e51972c1 100644
--- a/src/55_Bomb/Player/EquipBomb.cpp
+++ b/src/55_Bomb/Player/EquipBomb.cpp
@@ -1,7 +1,7 @@
#include "Player/EquipBomb.hpp"
#include "Player/LinkStateItem.hpp"
-ModelRender EquipBomb::gModelRender;
+ModelRender EquipBomb::gModelRender(0);
void EquipBomb::vfunc_00() {}
bool EquipBomb::IsUsable(unk32 param1) const {}
diff --git a/src/56_Bow/Player/EquipBow.cpp b/src/56_Bow/Player/EquipBow.cpp
index 8cb51602..8310f781 100644
--- a/src/56_Bow/Player/EquipBow.cpp
+++ b/src/56_Bow/Player/EquipBow.cpp
@@ -1,8 +1,8 @@
#include "Player/EquipBow.hpp"
#include "Player/LinkStateItem.hpp"
-ModelRender EquipBow::gModelRenderBow;
-ModelRender EquipBow::gModelRenderArrow;
+ModelRender EquipBow::gModelRenderBow(0);
+ModelRender EquipBow::gModelRenderArrow(0);
void EquipBow::vfunc_00() {}
bool EquipBow::IsUsable(unk32 param1) const {}
diff --git a/src/57_Rope/Actor/Player/ActorRope.cpp b/src/57_Rope/Actor/Player/ActorRope.cpp
index 40ab1aa4..bbcf4115 100644
--- a/src/57_Rope/Actor/Player/ActorRope.cpp
+++ b/src/57_Rope/Actor/Player/ActorRope.cpp
@@ -3,7 +3,7 @@
ActorRope_Unk_0219a3b0 gUnk_0219a3b0;
void ActorRope_Unk_0219a3b0::vfunc_08(unk16 *param1) {}
-void ActorRope_Unk_0219a3b0::vfunc_10(s32 *param1) {}
+bool ActorRope_Unk_0219a3b0::vfunc_10(s32 *param1) {}
ActorRope::ActorRope() {}
bool ActorRope::Init() {}
q20 ActorRope::func_ov057_0219a5ac() {}
diff --git a/src/58_Bombchu/Player/EquipBombchu.cpp b/src/58_Bombchu/Player/EquipBombchu.cpp
index 7e6c0742..68ee77a1 100644
--- a/src/58_Bombchu/Player/EquipBombchu.cpp
+++ b/src/58_Bombchu/Player/EquipBombchu.cpp
@@ -1,33 +1,884 @@
#include "Player/EquipBombchu.hpp"
+#include "Actor/ActorSpawner.hpp"
+#include "DTCM/UnkStruct_027e077c.hpp"
+#include "DTCM/UnkStruct_027e0c54.hpp"
+#include "DTCM/UnkStruct_027e0de4.hpp"
+#include "DTCM/UnkStruct_027e0f6c.hpp"
+#include "DTCM/UnkStruct_027e0fd4.hpp"
+#include "DTCM/UnkStruct_027e103c.hpp"
+#include "Map/MapManager.hpp"
#include "Player/LinkStateItem.hpp"
+#include "Player/PlayerControl.hpp"
+#include "Unknown/UnkStruct_020e9360.hpp"
+#include "Unknown/UnkStruct_ov000_020c0c08.hpp"
+#include "Unknown/UnkStruct_ov000_020e9c88.hpp"
-ModelRender EquipBombchu::gModelRenderBombchu;
-ModelRender EquipBombchu::gModelRenderBombchuPt;
-EquipBombchu_Unk_02198d00 sUnk_02198d00;
-
-void EquipBombchu_Unk_02198d00::vfunc_08(unk16 *param1) {}
-void func_ov058_02198ef4() {}
-void func_ov058_02198ef8() {}
-void EquipBombchu_Unk_02198d00::vfunc_14(u16 *param1) {}
-void EquipBombchu_Unk_02198d00::vfunc_10(s32 *param1) {}
-void EquipBombchu::vfunc_00() {}
-void EquipBombchu::vfunc_18() {}
-void EquipBombchu::vfunc_1c() {}
-void EquipBombchu::vfunc_30() {}
-void EquipBombchu::vfunc_38(unk32 param1) {}
-void EquipBombchu::func_ov058_02199220() {}
-void EquipBombchu::func_ov058_02199228() {}
-void EquipBombchu::func_ov058_02199264() {}
-void EquipBombchu::func_ov058_0219926c() {}
-bool EquipBombchu::IsUsable(unk32 param1) const {}
-bool EquipBombchu::CheckUsable(unk32 param1) const {}
-Actor *EquipBombchu::func_ov058_02199400() {}
-bool EquipBombchu::func_ov058_02199498(Vec3p *vec) {}
-void EquipBombchu::func_ov058_02199ef0(unk16 param1) {}
-void EquipBombchu::func_ov058_02199fd8(u32 param1) {}
-unk32 EquipBombchu::func_ov058_0219a084(unk16 param1) {}
-bool EquipBombchu::func_ov058_0219a3b4(unk16 param1) {}
-EquipBombchu_Unk_02198d00::~EquipBombchu_Unk_02198d00() {}
-void LinkStateItem::func_ov058_0219a454() {}
-void LinkStateItem::func_ov058_0219a47c() {}
-EquipBombchu *GetEquipBombchu() {}
+static char *sShipParts[8] = {"anc", "bow", "hul", "can", "dco", "pdl", "fnl", "brg"};
+
+ARM bool EquipBombchu_Unk_02198d00::vfunc_08(UnkStruct_ov000_020beba8_08 *param1) {
+ Vec3p sp14 = {param1->mUnk_04.x, param1->mUnk_04.y, param1->mUnk_04.z};
+ UnkStruct_027e0f6c_20 sp38;
+ s32 temp_r1 = param1->mUnk_00;
+ UnkStruct_027e0f6c_20 *temp_r2 = data_027e0f6c->mUnk_20;
+ sp38 = *(temp_r2 + temp_r1);
+
+ Vec3p sp8 = {sp38.mUnk_08.x, sp38.mUnk_08.y, sp38.mUnk_08.z};
+ Vec3p_Normalize(&sp8, &sp8);
+ Vec3p_Scale(&sp8, -0x400);
+ Vec3p_Add(&sp14, &sp8, &sp14);
+ MapManager *pMapManager = gMapManager;
+ TilePos sp4 = pMapManager->func_ov00_02083a1c(&sp14);
+ if ((pMapManager->func_ov00_020840dc(&sp4) == 0x46) && (gMapManager->func_ov00_02083f44(&sp14, 0) <= (sp14.y + 0x17FF))) {
+ return 0;
+ }
+ return this->func_ov014_02124034(param1);
+}
+
+static unk32 data_ov058_0219aee0 = -1;
+
+ModelRender EquipBombchu::gModelRenderBombchu(0);
+ModelRender EquipBombchu::gModelRenderBombchuPt(0);
+static unk16 data_ov058_0219b090;
+extern UnkStruct_ov000_020c0c08_04 data_ov058_0219b0c4;
+static UnkStruct_ov000_020c0c08 data_ov058_0219b0a0(&data_ov058_0219b0c4, 0);
+static UnkStruct_ov000_020c0c08_04 data_ov058_0219b0c4;
+static EquipBombchu_Unk_02198d00 sUnk_02198d00;
+static TilePos data_ov058_0219b110;
+
+ARM UnkStruct_027e0f6c_Unk_1::~UnkStruct_027e0f6c_Unk_1() {}
+
+ARM UnkStruct_027e0f6c_Unk_1::UnkStruct_027e0f6c_Unk_1() {}
+
+struct UnkStruct1 {
+ /* 00 */ unk8 mUnk_00[0xc];
+ /* 0c */ Vec3p mUnk_0c;
+ /* 18 */
+
+ UnkStruct1(Vec3p vec) :
+ mUnk_0c(vec) {}
+};
+
+ARM bool EquipBombchu_Unk_02198d00::vfunc_14(u16 *param1, s32 param2) {
+ Actor *temp_r0 = gActorManager->FindActorById(param2);
+ if ((temp_r0 != NULL) && (temp_r0->mType == ActorTypeId_PWBS)) {
+ mUnk_10.y = 1;
+ UnkStruct1 unk(*(Vec3p *) ((u32) temp_r0 + 0x820));
+ mUnk_14 = unk.mUnk_0c;
+ }
+ return true;
+}
+
+ARM bool EquipBombchu_Unk_02198d00::vfunc_10(s32 *param1) {
+ Actor *temp_r0 = (Actor *) param1;
+ if (!temp_r0->SetUnk_11b()) {
+ return false;
+ }
+ bool result;
+ if ((*(s32 *) ((s32) param1 + 4) & 0x800) == 0) {
+ return false;
+ }
+ sUnk_02198d00.mUnk_10 = true;
+ return false;
+}
+
+static const ItemManager_Unk1 sEquipBombchu_Unk1 = {
+ .mUnk_00 = "bomchu_pt",
+ .mUnk_10 = {0, 100},
+};
+
+THUMB void EquipBombchu::vfunc_00() {
+ gModelRenderBombchu.vfunc_0c(gItemManager->GetItemModel(ItemModelId_Bombchu));
+ gModelRenderBombchuPt.vfunc_0c(gItemManager->GetItemModel(ItemModelId_BombchuPt));
+ data_ov058_0219b0a0.mUnk_08 = gItemManager->GetItemModel(ItemModelId_BombchuPt);
+ data_ov058_0219b0a0.func_ov000_020c0c44(gItemManager->func_ov00_020ad538(&sEquipBombchu_Unk1));
+ data_ov058_0219b0a0.func_ov000_020c0e5c(0);
+ gModelRenderBombchuPt.vfunc_24(&data_ov058_0219b0a0);
+ data_ov058_0219b090 = 2;
+}
+
+THUMB void EquipBombchu::vfunc_18() {
+ this->UpdateInUse(1);
+ mBombchuRef.Reset();
+ this->func_ov014_0213eda0();
+ this->func_ov014_0213ec64();
+}
+
+THUMB void EquipBombchu::vfunc_1c() {
+ data_ov058_0219b090 = 2;
+}
+
+THUMB void EquipBombchu::vfunc_30() {
+ mUnk_44 += 1;
+ if ((gPlayerControl->IsUntouchedNow() || !mUnk_47) && !mUnk_48 && mUnk_18 > 0) {
+ data_027e103c->func_ov005_0210418c(1);
+ mUnk_48 = true;
+ }
+ if (mUnk_18 <= 0) {
+ return;
+ }
+
+ data_ov058_0219b0a0.func_ov000_020c0e04();
+ if (data_027e077c.mUnk_0 != 0xd) {
+ return;
+ }
+
+ Vec3p local_18 = mUnk_2c;
+ Vec3p_Sub(&local_18, &mUnk_20, &local_18);
+ q20 length = Vec3p_Length(&local_18);
+ if (length < FLOAT_TO_Q20(0.2)) {
+ mUnk_20 = mUnk_2c;
+ } else if (Vec3p_TryNormalize(&local_18)) {
+ if (length < FLOAT_TO_Q20(1.0)) {
+ Vec3p_Scale(&local_18, FLOAT_TO_Q20(0.2));
+ } else {
+ Vec3p_Scale(&local_18, FX_Mul(length, FLOAT_TO_Q20(0.2)));
+ }
+ Vec3p_Add(&mUnk_20, &local_18, &mUnk_20);
+ } else {
+ mUnk_20 = mUnk_2c;
+ }
+ gPlayerLink->func_ov000_020bb810(&mUnk_20, 0x800);
+}
+
+void func_ov058_02199220(EquipBombchu *bombchu);
+void func_ov058_02199264(EquipBombchu *bombchu);
+
+THUMB void EquipBombchu::vfunc_38(unk32 param1) {
+ if (this->IsInUse()) {
+ Vec3p VStack_1c;
+ this->func_ov000_020be99c(&VStack_1c);
+ VStack_1c.y += FLOAT_TO_Q20(0.7);
+ gModelRenderBombchu.func_ov000_020b413c(mUnk_04, &VStack_1c);
+ if ((mUnk_14 == 1) && (mUnk_18 > 0)) {
+ data_ov000_020e9c88.func_ov000_0207b89c(param1, &mUnk_20, (void (*)(void *)) &func_ov058_02199220, this);
+ }
+ } else {
+ if (this->CheckUsable(1)) {
+ if (data_ov058_0219b090 > 0) {
+ data_ov058_0219b090 -= 1;
+ }
+ } else {
+ data_ov058_0219b090 = 2;
+ }
+ }
+ if (mUnk_46 && data_027e077c.mUnk_0 == 0xd) {
+ data_027e0de4.func_ov000_0207bb1c(5, (void (*)(void *)) &func_ov058_02199264, this);
+ }
+ return;
+}
+
+THUMB void func_ov058_02199220(EquipBombchu *bombchu) {
+ bombchu->func_ov058_02199228();
+}
+
+extern "C" void func_020197bc(void *param1, unk32 param2);
+extern "C" void func_0201987c(void *param1, unk32 param2);
+THUMB void EquipBombchu::func_ov058_02199228() {
+ unk32 uVar1 = data_ov000_020e9360.func_ov000_02079e68(2);
+ void *pvVar2 = gModelRenderBombchuPt.GetLcdcAddress();
+ func_020197bc(pvVar2, uVar1);
+ pvVar2 = gModelRenderBombchuPt.GetLcdcAddress();
+ func_0201987c(pvVar2, 1);
+ gModelRenderBombchuPt.SetTranslation(&mUnk_20);
+}
+
+THUMB void func_ov058_02199264(EquipBombchu *bombchu) {
+ bombchu->func_ov058_0219926c();
+}
+
+THUMB void EquipBombchu::func_ov058_0219926c() {
+ this->func_ov000_020be9e4(mUnk_38, mUnk_44);
+}
+
+ARM bool EquipBombchu::IsUsable(unk32 param1) const {
+ if (!this->CheckUsable(param1)) {
+ return false;
+ }
+ if ((param1 != 0) && (data_ov058_0219b090 > 0)) {
+ return false;
+ }
+ return true;
+}
+
+extern "C" unk32 func_ov014_0212505c();
+ARM bool EquipBombchu::CheckUsable(unk32 param1) const {
+ if (!gMapManager->func_ov00_0208499c() || data_027e0c54.mUnk_0 || data_027e0d38->mUnk_0c.func_ov000_020a5e9c() == 0x33) {
+ return false;
+ }
+ if (data_027e0fd4->mUnk_05a != 0) {
+ return false;
+ }
+ if (this->GetAmmo() <= 0) {
+ return false;
+ }
+ if (param1 != 0) {
+ if (!gPlayerLink->func_ov000_020bba28()) {
+ return false;
+ }
+ switch (data_027e077c.mUnk_0) {
+ case 0x1:
+ case 0xb:
+ case 0xc:
+ case 0xd:
+ case 0x33:
+ case 0x34:
+ return this->func_ov014_0213ed74() == NULL || func_ov014_0212505c() != 0;
+ }
+ return false;
+ }
+ return true;
+}
+
+THUMB Actor *EquipBombchu::func_ov058_02199400() {
+ if (this->EquipItem::GetAmmo() <= 0 || mUnk_18 <= 0) {
+ return NULL;
+ }
+ Vec3p *playerPos = EquipItem::GetPlayerPos();
+ Vec3p spawnPos = *playerPos;
+ spawnPos.y += FLOAT_TO_Q20(0.5);
+ ActorSpawnOptions options;
+ options.mUnk_1c.id = 1;
+ options.mAngle = mUnk_04;
+ gActorSpawner->Spawn(ActorTypeId_Bombchu, &spawnPos, &options, &mBombchuRef);
+ Actor *iVar3 = this->func_ov014_0213ed74();
+ if (iVar3 != NULL) {
+ this->GiveAmmo(-1);
+ }
+ this->UpdateInUse(0);
+ return iVar3;
+}
+
+extern "C" void func_ov014_02124ff4(Sphere *sphere);
+extern "C" bool func_0202b2f8(Vec3p *param_1, Vec3p *param_2, unk32 param_3);
+THUMB bool EquipBombchu::func_ov058_02199498(Vec3p *vec) {
+ struct TempStruct1 {
+ /* 00 */ unk8 mUnk_00[0xe];
+ /* 0e */ unk8 mUnk_0e;
+ /* 0f */ unk8 mUnk_0f;
+ /* 10 */ unk8 mUnk_10;
+ /* 11 */ unk8 mUnk_11;
+ /* 12 */ unk8 mUnk_12[0x6];
+ /* 18 */ volatile unk8 mUnk_18;
+ /* 19 */ unk8 mUnk_19;
+ /* 1a */ unk8 mUnk_1a;
+ /* 1b */ unk8 mUnk_1b;
+ /* 1c */ unk8 mUnk_1c;
+ /* 1d */ unk8 mUnk_1d;
+ /* 1e */
+ };
+
+ struct TempStruct2 {
+ union {
+ /* 00 */ Vec3p mUnk_00;
+ struct {
+ /* 00 */ u16 mUnk_00_x;
+ /* 02 */ u16 mUnk_02;
+ /* 04 */ u16 mUnk_04;
+ /* 06 */ u16 mUnk_06;
+ /* 08 */ unk32 mUnk_08;
+ };
+ };
+ /* 0c */ unk8 mUnk_0c[0x34];
+ /* 40 */
+ };
+
+ TempStruct1 sp214;
+ TempStruct2 sp1D4;
+ AABB sp1BC;
+ Vec3p sp1B0;
+ Vec3p sp1A4;
+ Sphere sp194;
+ Vec3p sp188;
+ Vec3p sp17C;
+ Vec3p sp170;
+ Vec3p sp164;
+ Vec3p sp158;
+ Vec3p sp14C;
+ Vec3p sp140;
+ Vec3p sp134;
+ Vec3p sp128;
+ Vec3p sp11C;
+ Vec3p sp110;
+ Vec3p sp104;
+ Vec3p spF8;
+ Vec3p spEC;
+ Vec3p spE0;
+ Vec3p spD4;
+ Vec3p spBC;
+ Vec3p spB0;
+ Vec3p spA4;
+ Vec3p sp98;
+ Vec3p sp8C;
+ Vec3p sp80;
+ Vec3p sp74;
+ unk32 sp64;
+ u32 sp60;
+ u32 sp5C;
+ unk32 sp50;
+ unk32 sp48;
+ unk32 sp44;
+ s32 sp20;
+ s32 sp1C;
+ s32 sp18;
+ s32 sp14;
+ s32 temp_r0_13;
+ s32 temp_r0_16;
+ s32 temp_r0_21;
+ s32 temp_r0_22;
+ s32 temp_r0_23;
+ s32 temp_r0_24;
+ s32 temp_r0_25;
+ s32 temp_r0_27;
+ s32 temp_r0_3;
+ s32 temp_r0_4;
+ s32 temp_r0_5;
+ s32 temp_r0_6;
+ s32 temp_r0_7;
+ s32 temp_r0_8;
+ s32 temp_r0_9;
+ s32 temp_r1;
+ s32 temp_r1_10;
+ s32 temp_r1_14;
+ s32 temp_r1_2;
+ s32 temp_r1_3;
+ s32 temp_r7_2;
+ s32 temp_r7_3;
+ s32 var_r0;
+ s32 var_r0_2;
+ s32 var_r1;
+ s32 var_r1_2;
+ s32 var_r1_3;
+ s32 var_r6;
+ s32 var_r6_2;
+ s32 var_r6_3;
+ s32 var_r7;
+
+ data_ov058_0219aee0 = -1;
+ if ((mUnk_18 >= 0x64) || (!mUnk_47)) {
+ return 0;
+ }
+ gMapManager->func_ov00_0208346c(&sp1BC);
+ sp128.x = vec->x;
+ sp128.y = vec->y;
+ sp128.z = vec->z;
+ if (!sp1BC.Contains(&sp128)) {
+ var_r0 = 1;
+ } else {
+ var_r0 = 0;
+ }
+ if (var_r0 != 0) {
+ if (mUnk_18 > 0) {
+ mUnk_47 = 0;
+ }
+ return 0;
+ }
+ TilePos sp5a = gMapManager->func_ov00_02083a1c(vec);
+ sp1B0.x = vec->x;
+ sp1B0.y = vec->y;
+ sp1B0.z = vec->z;
+ gMapManager->func_ov00_02083c7c(&sp1B0, sp5a);
+ sp1B0.y = vec->y;
+ temp_r1 = mUnk_18;
+ if (temp_r1 > 0) {
+ TilePos sp24_unk1C = sp5a;
+ TilePos sp24_unk6 = mUnk_1c[temp_r1 - 1];
+ TilePos sp24_unk1E = sp24_unk6;
+ if (sp24_unk1E == sp24_unk1C) {
+ return 0;
+ }
+ gMapManager->func_ov00_02083c7c(&sp1A4, sp24_unk6);
+ var_r1 = vec->x - sp1A4.x;
+ if (var_r1 < 0) {
+ var_r1 = 0 - var_r1;
+ }
+ if (var_r1 < 0x1000) {
+ var_r1_2 = vec->z - sp1A4.z;
+ if (var_r1_2 < 0) {
+ var_r1_2 = 0 - var_r1_2;
+ }
+ if (var_r1_2 < 0x1000) {
+ return 0;
+ }
+ }
+ }
+ func_ov014_02124ff4(&sp194);
+ if (mUnk_18 <= 0) {
+ var_r6 = gPlayerPos.y;
+ sp18 = gPlayerPos.x;
+ sp1B0.y = var_r6;
+ sp14 = gPlayerPos.z;
+ } else {
+ var_r6 = mUnk_2c.y;
+ sp18 = mUnk_2c.x;
+ sp14 = mUnk_2c.z;
+ sp11C.x = sp1B0.x;
+ sp11C.y = sp1B0.y;
+ sp11C.z = sp1B0.z;
+ sp1B0.y = gMapManager->MapData_vfunc_68(&sp11C, 0);
+ }
+ var_r6_2 = var_r6 + sp194.pos.y;
+ temp_r1_2 = sp1B0.y + sp194.pos.y;
+ sp1B0.y = temp_r1_2;
+ sp188.x = sp1B0.x;
+ sp188.y = temp_r1_2;
+ sp188.z = sp1B0.z;
+ sp110.x = sp18;
+ sp110.y = var_r6_2;
+ sp110.z = sp14;
+ Vec3p_Sub(&sp188, &sp110, &sp188);
+ var_r7 = sp188.y;
+ sp188.y = 0;
+ sp20 = Vec3p_Length(&sp188);
+ sp1C = 0;
+ if (Vec3p_TryNormalize(&sp188) == 0) {
+ return 0;
+ }
+ if (sp20 > 0x7000) {
+ Vec3p_Scale(&sp188, 0x7000);
+ sp1C = 1;
+ } else if (sp20 >= 0x1000) {
+ if (mUnk_18 > 0 || ABS(var_r7) > 0) {
+ Vec3p_Scale(&sp188, 0x1000);
+ sp1C = 1;
+ }
+ }
+ if (sp1C != 0) {
+ sp1B0.x = sp18 + sp188.x;
+ sp1B0.z = sp14 + sp188.z;
+ TilePos sp58 = gMapManager->func_ov00_02083a1c(&sp1B0);
+ gMapManager->func_ov00_02083c7c(&sp1B0, sp58);
+ temp_r1_3 = sp1B0.y + 0x999;
+ sp1B0.y = temp_r1_3;
+ sp104.x = sp1B0.x;
+ sp104.x = temp_r1_3;
+ sp104.x = sp1B0.z;
+ temp_r0_3 = gMapManager->MapData_vfunc_68(&sp104, 0);
+ sp1B0.y = temp_r0_3;
+ temp_r0_4 = temp_r0_3 + sp194.pos.y;
+ sp1B0.y = temp_r0_4;
+ vec->x = sp1B0.x;
+ vec->y = temp_r0_4;
+ vec->z = sp1B0.z;
+ }
+ if (this->func_ov058_0219a3b4(sp5a) != 0) {
+ temp_r0_5 = this->func_ov058_02199ef0(sp5a);
+ sp1B0.y = temp_r0_5;
+ temp_r0_6 = temp_r0_5 + sp194.pos.y;
+ sp1B0.y = temp_r0_6;
+ vec->x = sp1B0.x;
+ vec->y = temp_r0_6;
+ vec->z = sp1B0.z;
+ }
+ if (mUnk_18 > 0) {
+ if (this->func_ov058_0219a3b4(mUnk_1c[mUnk_18 - 1]) != 0) {
+ var_r6_2 = this->func_ov058_02199ef0(mUnk_1c[mUnk_18 - 1]);
+ }
+ if (gMapManager->MapData_vfunc_54(&mUnk_1c[mUnk_18 - 1]) == 0x19) {
+ temp_r0_7 = gMapManager->MapData_vfunc_60(&mUnk_1c[mUnk_18 - 1]);
+ spF8.x = sp18;
+ spF8.y = temp_r0_7 - 0x1333;
+ spF8.z = sp14;
+ var_r6_2 = gMapManager->MapData_vfunc_68(&spF8, 0);
+ if ((sp1B0.y - var_r6_2) >= 0x999) {
+ return 0;
+ }
+ }
+ }
+ sp1D4.mUnk_00_x = -1;
+ sp1D4.mUnk_02 = -1;
+ sp1D4.mUnk_04 = -1;
+ sp1D4.mUnk_06 = -1;
+ sp1D4.mUnk_00.z = 0;
+ sp214.mUnk_0e = 0;
+ sp214.mUnk_0f = 0;
+ sp214.mUnk_10 = 0;
+ sp214.mUnk_11 = 0;
+ sp214.mUnk_18 = 0U;
+ sp214.mUnk_19 = 0U;
+ sp214.mUnk_1a = 0;
+ sp214.mUnk_1b = 0;
+ sp214.mUnk_1c = 0;
+ sp214.mUnk_1d = 0;
+ if (var_r6_2 < sp1B0.y) {
+ if ((sp1B0.y - var_r6_2) < 0x999) {
+ var_r6_2 = sp1B0.y;
+ } else {
+ spEC.x = sp18;
+ spEC.z = sp14;
+ spEC.y = var_r6_2;
+ gMapManager->MapData_vfunc_6c(&spEC, &sp64, &sp17C);
+ if ((sp17C.x != 0) || (sp17C.z != 0)) {
+ var_r6_2 += 0x99A;
+ if (var_r6_2 >= sp1B0.y) {
+ var_r6_2 = sp1B0.y;
+ }
+ }
+ }
+ } else {
+ sp1B0.y = var_r6_2;
+ }
+ sUnk_02198d00.mUnk_10.x = 0;
+ sUnk_02198d00.mUnk_10.y = 0;
+ spD4.y = var_r6_2;
+ spE0.x = sp1B0.x;
+ spE0.y = sp1B0.y;
+ spE0.z = sp1B0.z;
+ spD4.x = sp18;
+ spD4.z = sp14;
+ sp194.pos.y = 9;
+ sp194.pos.z = 0xCF;
+ sp194.radius = 1;
+ temp_r0_8 = gMapManager->func_01ffbe78(&sp1D4.mUnk_00, &spE0, &spD4, &sp194);
+ if (sUnk_02198d00.mUnk_10.x != 0) {
+ return 0;
+ }
+ if (temp_r0_8 != 0) {
+ if (sUnk_02198d00.mUnk_10.y != 0) {
+ sp1B0.x = sUnk_02198d00.mUnk_14.x;
+ sp1B0.y = sUnk_02198d00.mUnk_14.y;
+ sp1B0.z = sUnk_02198d00.mUnk_14.z;
+ sp1B0.y = mUnk_20.y;
+ TilePos sp56 = gMapManager->func_ov00_02083a1c(&sp1B0);
+ sp5a.x = sp56.x;
+ sp5a.y = sp56.y;
+ vec->x = sp1B0.x;
+ vec->y = sp1B0.y;
+ vec->z = sp1B0.z;
+ mUnk_38.x = sp1B0.x;
+ mUnk_38.y = sp1B0.y;
+ mUnk_38.z = sp1B0.z;
+ mUnk_47 = 0;
+ mUnk_46 = 1;
+ } else {
+ if (sp214.mUnk_18 != 0) {
+ if (mUnk_18 <= 0) {
+ return 0;
+ }
+ sp170.x = sp1D4.mUnk_00.x;
+ sp170.y = sp1D4.mUnk_00.y;
+ sp170.z = sp1D4.mUnk_00.z;
+ TilePos sp54 = gMapManager->func_ov00_02083a1c(&sp170);
+ sp5a = sp54;
+ if (this->func_ov058_0219a3b4(sp5a) != 0) {
+ return 0;
+ }
+ gMapManager->func_ov00_02083c7c(&sp170, sp5a);
+ TilePos sp24_unk18 = sp5a;
+ TilePos sp24_unk1A = mUnk_1c[mUnk_18 - 1];
+ if (sp24_unk1A == sp24_unk18) {
+ sp164.x = sp1D4.mUnk_00.x;
+ spBC.y = var_r6_2;
+ sp164.y = sp1D4.mUnk_00.y;
+ sp164.z = sp1D4.mUnk_00.z;
+ spBC.x = sp18;
+ spBC.z = sp14;
+ Vec3p_Sub(&sp164, &spBC, &sp164);
+ var_r0_2 = sp164.z;
+ if (var_r0_2 < 0) {
+ var_r0_2 = 0 - var_r0_2;
+ }
+ var_r1_3 = sp164.x;
+ if (var_r1_3 < 0) {
+ var_r1_3 = 0 - var_r1_3;
+ }
+ if (var_r1_3 > var_r0_2) {
+ sp164.z = 0;
+ } else {
+ sp164.x = 0;
+ }
+ if (Vec3p_TryNormalize(&sp164) != 0) {
+ sp170.x = sp18;
+ sp170.y = var_r6_2;
+ sp170.z = sp14;
+ Vec3p_Add(&sp170, &sp164, &sp170);
+ } else {
+ return 0;
+ }
+ TilePos sp52 = gMapManager->func_ov00_02083a1c(&sp170);
+ sp5a = sp52;
+ if (this->func_ov058_0219a3b4(sp5a) != 0) {
+ return 0;
+ }
+ sUnk_02198d00.mUnk_10.x = 0;
+ sUnk_02198d00.mUnk_10.y = 0;
+ spB0.y = var_r6_2;
+ spB0.x = sp18;
+ spB0.z = sp14;
+ sp194.pos.y = 9;
+ sp194.pos.z = 0xCF;
+ sp194.radius = 1;
+ temp_r0_16 = gMapManager->func_01ffbe78(&sp1D4.mUnk_00, &sp170, &spB0, &sp194);
+ if (sUnk_02198d00.mUnk_10.x != 0) {
+ return 0;
+ }
+ if (temp_r0_16 == 0) {
+ TilePos sp50 = gMapManager->func_ov00_02083a1c(&sp170);
+ TilePos sp24_unk4 = sp50;
+ TilePos sp24_unk14 = sp24_unk4;
+ TilePos sp24_unk16 = mUnk_1c[mUnk_18 - 1];
+ if (sp24_unk16 == sp24_unk14) {
+ return 0;
+ }
+ gMapManager->func_ov00_02083c7c(&sp170, sp24_unk4);
+ } else {
+ if (sp214.mUnk_18 == 0) {
+ return false;
+ }
+ sp170.x = sp1D4.mUnk_00.x;
+ sp170.y = sp1D4.mUnk_00.y;
+ sp170.z = sp1D4.mUnk_00.z;
+ TilePos sp4E = gMapManager->func_ov00_02083a1c(&sp170);
+ sp5a = sp4E;
+ TilePos sp24_unk2 = sp5a;
+ TilePos sp24_unk10 = sp24_unk2;
+ TilePos sp24_unk12 = mUnk_1c[mUnk_18 - 1];
+ if (sp24_unk12 == sp24_unk10) {
+ return 0;
+ }
+ gMapManager->func_ov00_02083c7c(&sp170, sp24_unk2);
+ }
+ }
+ sp1B0.x = sp170.x;
+ spA4.x = sp170.x;
+ temp_r1_14 = sp170.y + 0x999;
+ sp1B0.y = sp170.y;
+ sp1B0.z = sp170.z;
+ spA4.z = sp170.z;
+ sp1B0.y = temp_r1_14;
+ spA4.y = temp_r1_14;
+ temp_r0_21 = gMapManager->MapData_vfunc_68(&spA4, 0);
+ sp1B0.y = temp_r0_21;
+ temp_r0_22 = temp_r0_21 + sp194.pos.y;
+ sp1B0.y = temp_r0_22;
+ vec->x = sp1B0.x;
+ vec->y = temp_r0_22;
+ vec->z = sp1B0.z;
+ } else {
+ if (sp214.mUnk_19 == 0) {
+ return 0;
+ }
+ sp158.x = sp1D4.mUnk_00.x;
+ sp158.y = sp1D4.mUnk_00.y;
+ sp158.z = sp1D4.mUnk_00.z;
+ TilePos sp4C = gMapManager->func_ov00_02083a1c(&sp158);
+ sp5a.x = sp4C.x;
+ sp5a.y = sp4C.y;
+ TilePos sp24_unk0 = sp5a;
+ TilePos sp24_unkC = sp24_unk0;
+ TilePos sp24_unkE = mUnk_1c[mUnk_18 - 1];
+ if (sp24_unkE == sp24_unkC) {
+ return 0;
+ }
+ gMapManager->func_ov00_02083c7c(&sp158, sp24_unk0);
+ sp1B0.x = sp158.x;
+ sp98.x = sp158.x;
+ temp_r1_10 = sp158.y + 0x999;
+ sp1B0.y = sp158.y;
+ sp1B0.z = sp158.z;
+ sp98.z = sp158.z;
+ sp1B0.y = temp_r1_10;
+ sp98.y = temp_r1_10;
+ temp_r0_13 = gMapManager->MapData_vfunc_68(&sp98, 0);
+ sp1B0.y = temp_r0_13;
+ sp1B0.y = temp_r0_13 + sp194.pos.y;
+ }
+ }
+ } else {
+ MapManager *temp_r7_2 = gMapManager;
+ TilePos sp4a = temp_r7_2->func_ov00_02083a1c(&sp1B0);
+ if (temp_r7_2->MapData_vfunc_54(&sp4a) == 0x19) {
+ MapManager *temp_r7_3 = gMapManager;
+ TilePos sp48 = temp_r7_3->func_ov00_02083a1c(&sp1B0);
+ temp_r0_9 = temp_r7_3->MapData_vfunc_60(&sp48);
+ sp1B0.y = temp_r0_9;
+ sp1B0.y = temp_r0_9 - 0x1333;
+ }
+ sp8C.x = sp1B0.x;
+ sp8C.y = sp1B0.y;
+ sp8C.z = sp1B0.z;
+ sp1B0.y = gMapManager->MapData_vfunc_68(&sp8C, 0);
+ }
+ sp14C.y = var_r6_2;
+ sp14C.x = sp18;
+ sp140.y = var_r6_2;
+ sp14C.z = sp14;
+ var_r6_3 = 1;
+ sp140.x = sp18;
+ sp140.z = sp14;
+ while (true) {
+ if (func_0202b2f8(&sp14C, &sp1B0, 0x1000) != 0) {
+ var_r6_3 = 0;
+ }
+ MapManager::func_ov00_02083fb0(&sp60, gMapManager, &sp14C);
+ if (((3 & (sp60 >> 5)) == 2) && ((sp60 & 0x1F) != 0xA)) {
+ sp1B0.y = sp140.y;
+ temp_r0_23 = sp140.y + 0x999;
+ sp1B0.y = temp_r0_23;
+ sp80.y = temp_r0_23;
+ sp1B0.z = sp140.z;
+ sp80.z = sp140.z;
+ sp1B0.x = sp140.x;
+ sp80.x = sp140.x;
+ temp_r0_24 = gMapManager->MapData_vfunc_68(&sp80, 0);
+ sp1B0.y = temp_r0_24;
+ temp_r0_25 = temp_r0_24 + sp194.pos.y;
+ sp1B0.y = temp_r0_25;
+ vec->x = sp1B0.x;
+ vec->y = temp_r0_25;
+ vec->z = sp1B0.z;
+ TilePos sp46 = gMapManager->func_ov00_02083a1c(&sp1B0);
+ sp5a = sp46;
+ TilePos sp24_unk8 = sp5a;
+ TilePos sp24_unkA = mUnk_1c[mUnk_18 - 1];
+ if (sp24_unkA == sp24_unk8) {
+ return 0;
+ }
+ goto block_114;
+ } else {
+ sp140.x = sp14C.x;
+ sp140.y = sp14C.y;
+ sp140.z = sp14C.z;
+ }
+ if (var_r6_3 == 0) {
+ block_114:
+ if (this->func_ov058_0219a3b4(sp5a) != 0) {
+ TilePos sp44 = gMapManager->func_ov00_02083a1c(&sp1B0);
+ temp_r0_27 = this->func_ov058_02199ef0(sp44);
+ sp1B0.y = temp_r0_27;
+ sp1B0.y = temp_r0_27 + sp194.pos.y;
+ } else {
+ sp74.x = sp1B0.x;
+ sp74.y = sp1B0.y;
+ sp74.z = sp1B0.z;
+ MapManager::func_ov00_02083fb0(&sp5C, gMapManager, &sp74);
+ if (((3 & (sp5C >> 5)) == 2) && ((0x1F & sp5C) != 0xA)) {
+ return 0;
+ }
+ }
+ mUnk_1c[mUnk_18] = sp5a;
+ mUnk_18 += 1;
+ sp134.x = sp1B0.x;
+ sp134.y = sp1B0.y;
+ sp134.z = sp1B0.z;
+ Vec3p_Sub(&sp134, &mUnk_20, &sp134);
+ mUnk_2c = sp1B0;
+ if (mUnk_18 <= 1) {
+ mUnk_20 = sp1B0;
+ }
+ mUnk_14 = 1;
+ return 1;
+ }
+ }
+}
+
+extern "C" void func_ov000_020a61ac(Vec3p *vec, s16 angle);
+ARM unk32 EquipBombchu::func_ov058_02199ef0(TilePos param1) {
+ s32 iVar1;
+ s32 iVar2;
+ s16 sVar3;
+ s32 result;
+ Vec3p local_58;
+ Vec3p local_4c;
+ Vec3p local_40;
+
+ TilePos local_5c = param1;
+ gMapManager->func_ov00_02083c7c(&local_40, local_5c);
+ for (s32 iVar2 = 0; iVar2 < 4; iVar2++) {
+ sVar3 = 0;
+ local_58.x = 0;
+ local_58.y = 0;
+ local_58.z = 0x400;
+ func_ov000_020a61ac(&local_58, (int) sVar3);
+ local_4c.x = local_40.x;
+ local_4c.y = local_40.y;
+ local_4c.z = local_40.z;
+ Vec3p_Add(&local_4c, &local_58, &local_4c);
+ if (iVar2 == 0) {
+ result = gMapManager->func_ov00_02083f44(&local_4c, false);
+ } else {
+ iVar1 = gMapManager->func_ov00_02083f44(&local_4c, false);
+ if (result <= iVar1) {
+ result = iVar1;
+ }
+ }
+ sVar3 = sVar3 + 0x4000;
+ }
+ return result;
+}
+
+ARM unk32 EquipBombchu::func_ov058_02199fd8(TilePos param1) {
+ if (data_ov058_0219aee0 != -1) {
+ if (data_ov058_0219b110 == param1) {
+ return data_ov058_0219aee0;
+ }
+ }
+ data_ov058_0219aee0 = this->func_ov058_0219a084(param1);
+ data_ov058_0219b110 = param1;
+ return data_ov058_0219aee0;
+}
+
+ARM unk32 EquipBombchu::func_ov058_0219a084(TilePos param1) {
+ Vec3p sp3C[4];
+
+ Vec3p sp30;
+ gMapManager->func_ov00_02083c7c(&sp30, param1);
+ Vec3p sp24;
+ for (s32 i = 0; i < 4; i++) {
+ sp24.x = 0;
+ sp24.y = 0;
+ sp24.z = FLOAT_TO_Q20(0.25);
+ func_ov000_020a61ac(&sp24, 0x4000 * i);
+ sp3C[i] = sp30;
+ Vec3p_Add(&sp3C[i], &sp24, &sp3C[i]);
+ sp3C[i].y = gMapManager->func_ov00_02083f44(&sp3C[i], 0);
+ }
+ if ((sp3C[0].y == sp3C[1].y) && (sp3C[0].y == sp3C[2].y) && (sp3C[0].y == sp3C[3].y)) {
+ UnkStruct sp90;
+ if (gMapManager->func_01ffbf5c(&sp90, &sp3C[0], &sp3C[2], 0x200, 9, 1, &sUnk_02198d00, 0)) {
+ return 7;
+ }
+ if (gMapManager->func_01ffbf5c(&sp90, &sp3C[1], &sp3C[3], 0x200, 9, 1, &sUnk_02198d00, 0)) {
+ return 7;
+ }
+ if (gMapManager->func_01ffbf5c(&sp90, &sp3C[2], &sp3C[0], 0x200, 9, 1, &sUnk_02198d00, 0)) {
+ return 7;
+ }
+ if (gMapManager->func_01ffbf5c(&sp90, &sp3C[3], &sp3C[1], 0x200, 9, 1, &sUnk_02198d00, 0)) {
+ return 7;
+ }
+ return 0;
+ }
+ if ((sp3C[0].y == sp3C[1].y) && (sp3C[2].y == sp3C[3].y)) {
+ if (sp3C[0].y < sp3C[2].y) {
+ return 4;
+ }
+ return 1;
+ }
+ if ((sp3C[0].y == sp3C[3].y) && (sp3C[1].y == sp3C[2].y)) {
+ if (sp3C[0].y < sp3C[1].y) {
+ return 3;
+ }
+ return 2;
+ }
+
+ Vec3p sp18;
+ unk32 sp14;
+ gMapManager->MapData_vfunc_6c(&sp30, &sp14, &sp18);
+ if ((sp18.x != 0) || (sp18.z != 0)) {
+ return 5;
+ }
+ return 7;
+}
+
+bool EquipBombchu::func_ov058_0219a3b4(TilePos param1) {
+ switch (this->func_ov058_02199fd8(param1)) {
+ case 1:
+ case 2:
+ case 3:
+ case 4:
+ case 7:
+ return true;
+ default:
+ return false;
+ }
+}
diff --git a/src/59_Hammer/Actor/Navi/ActorNaviBase_59.cpp b/src/59_Hammer/Actor/Navi/ActorNaviBase_59.cpp
index 7fac2ba5..acaa3bd3 100644
--- a/src/59_Hammer/Actor/Navi/ActorNaviBase_59.cpp
+++ b/src/59_Hammer/Actor/Navi/ActorNaviBase_59.cpp
@@ -7,8 +7,8 @@
#include "Player/PlayerBase.hpp"
#include "Player/PlayerControl.hpp"
-extern unk32 data_ov000_020dc7d0;
-extern unk32 data_ov000_020dc7e4;
+extern const ItemManager_Unk1 data_ov000_020dc7d0;
+extern const ItemManager_Unk1 data_ov000_020dc7e4;
extern u32 data_ov000_020e9370[];
extern "C" void Vec3p_RotateY(u32, Vec3p *);
extern "C" void func_ov005_02102c2c(u32 *param_1, int param_2, Vec3p *param_3, int param_4, int param_5, u32 param_6,
@@ -58,200 +58,99 @@ ARM void ActorNavi::func_ov059_0219aa08() {
}
}
-struct UnkStruct {
- /* 00 */ u16 mUnk_00;
- /* 02 */ unk16 mUnk_02;
- /* 04 */ unk16 mUnk_04;
- /* 06 */ unk16 mUnk_06;
- /* 08 */ unk16 mUnk_08;
- /* 09 */ unk8 mUnk_09;
- /* 0a */ unk8 mUnk_0a;
- /* 0b */ unk8 mUnk_0b;
- /* 0c */ unk8 mUnk_0c;
- /* 0d */ unk8 mUnk_0d;
- /* 0e */ unk8 mUnk_0e;
- /* 0f */ unk8 mUnk_0f;
- /* 10 */ unk8 mUnk_10;
- /* 11 */ unk8 mUnk_11;
- /* 12 */ unk8 mUnk_12;
- /* 13 */ unk8 mUnk_13;
- /* 14 */ Vec3p mUnk_14;
- /* 14 */ unk8 mUnk_20[4];
- /* 24 */
-};
-
// non-matching
ARM void ActorNavi::func_ov059_0219aba8(u32 param1) {
- bool bVar1;
- LinkStateItem *uVar1;
- ItemManager *pIVar3;
- int uVar4;
- int iVar5;
- int uVar6;
- bool bVar7;
- Vec3p local_134;
- Vec3p local_128;
- Vec3p local_11c;
- Vec3p local_110;
- Vec3p local_104;
- Vec3p local_e4;
-
- UnkStruct auStack_e0;
- u16 local_bc;
- unk16 local_ba;
- unk16 local_b8;
- unk16 local_b6;
- unk16 local_b4;
- unk32 local_92;
- unk32 local_91;
- unk32 local_90;
- unk32 local_8f;
- unk32 local_88;
- unk32 local_87;
- unk32 local_86;
- unk32 local_85;
- unk32 local_84;
- unk32 local_83;
- UnkStruct auStack_80;
- u16 local_5c;
- unk16 local_5a;
- unk16 local_58;
- unk16 local_56;
- unk16 local_54;
- unk32 local_32;
- unk32 local_31;
- unk32 local_30;
- unk32 local_2f;
- unk32 local_28;
- unk32 local_27;
- unk32 local_26;
- unk32 local_25;
- unk32 local_24;
- unk32 local_23;
- ItemManager *puVar1;
-
switch (param1) {
- case 3:
- uVar1 = EquipHammer::GetLinkStateItem();
+ case 3: {
+ LinkStateItem *uVar1 = EquipHammer::GetLinkStateItem();
if (uVar1->mUnk_25[2] != 0 && uVar1->mUnk_25[3] != 0) {
break;
}
- local_11c.x = data_027e0fd4->mUnk_020.pos.x;
- local_11c.z = data_027e0fd4->mUnk_020.pos.z;
-
- iVar5 = gPlayerPos.y + FLOAT_TO_Q20(0.5);
- uVar4 = this->mPos.x;
- uVar6 = this->mPos.z;
-
- auStack_80.mUnk_00 = -1;
- auStack_80.mUnk_02 = 0;
- auStack_80.mUnk_04 = 0;
- auStack_80.mUnk_06 = 0;
- auStack_80.mUnk_08 = 0;
- auStack_80.mUnk_09 = 0;
- auStack_80.mUnk_0a = 0;
- auStack_80.mUnk_0b = 0;
- auStack_80.mUnk_0c = 0;
- auStack_80.mUnk_0d = 0;
- auStack_80.mUnk_0e = 0;
- auStack_80.mUnk_0f = 0;
- auStack_80.mUnk_10 = 0;
- auStack_80.mUnk_11 = 0;
- auStack_80.mUnk_12 = 0;
- local_11c.y = iVar5;
-
- local_110.x = uVar4;
- local_110.y = iVar5;
- // local_110.z = uVar6;
-
- local_e4.x = local_11c.x;
- local_e4.y = iVar5;
- local_e4.z = local_11c.z;
-
- local_5a = local_5c;
- local_58 = local_5c;
- local_56 = local_5c;
-
- if (gMapManager->func_01ffbf5c(&auStack_80, &local_110, &local_11c, this->mUnk_08c.size) ? false : true) {
- this->mPos = local_e4;
- this->mPrevPos = local_e4;
- this->mOffsetPos = local_e4;
- } else {
+ Vec3p local_11c = data_027e0fd4->mUnk_020.pos;
+
+ q20 iVar5 = gPlayerPos.y + FLOAT_TO_Q20(0.5);
+ q20 uVar4 = this->mPos.x;
+ q20 uVar6 = this->mPos.z;
+
+ UnkStruct auStack_80;
+ local_11c.y = iVar5;
+
+ Vec3p local_110 = {uVar4, iVar5, uVar6};
+
+ Vec3p local_e4 = local_11c;
+
+ // if (gMapManager->func_01ffbf5c(&auStack_80, &local_110, &local_11c, this->mUnk_08c.size, 0, 0, NULL, 0) ? false
+ if (gMapManager->func_01ffbf5c(&auStack_80, &local_110, &local_11c, this->mUnk_08c.size, this->mRef.id,
+ this->mUnk_09c.mUnk_0, this->mUnk_09c.mUnk_4, 0)
+ ? false
+ : true) {
this->mOffsetPos.x = uVar4;
this->mOffsetPos.y = iVar5;
this->mOffsetPos.z = uVar6;
+ } else {
+ this->mPos.x = local_e4.x;
+ this->mPos.y = local_e4.y;
+ this->mPos.z = local_e4.z;
+ this->mPrevPos = local_e4;
+ this->mOffsetPos = local_e4;
}
- break;
- case 4:
- uVar1 = EquipHammer::GetLinkStateItem();
+ } break;
+ case 4: {
+ LinkStateItem *uVar1 = EquipHammer::GetLinkStateItem();
if (uVar1->mUnk_25[2] != 0 && uVar1->mUnk_25[3] != 0) {
break;
}
- auStack_e0.mUnk_14.x = data_027e0fd4->mUnk_020.pos.x;
- auStack_e0.mUnk_14.y = gPlayerPos.y + FLOAT_TO_Q20(0.5);
- auStack_e0.mUnk_14.z = data_027e0fd4->mUnk_020.pos.z;
-
- bVar1 = gPlayerControl->UpdateAimWorld(&local_104);
- bVar7 = false;
- local_104.y = auStack_e0.mUnk_14.y;
- auStack_80.mUnk_00 = -1;
- auStack_80.mUnk_02 = 0;
- auStack_80.mUnk_04 = 0;
- auStack_80.mUnk_06 = 0;
- auStack_80.mUnk_08 = 0;
- auStack_80.mUnk_09 = 0;
- auStack_80.mUnk_0a = 0;
- auStack_80.mUnk_0b = 0;
- auStack_80.mUnk_0c = 0;
- auStack_80.mUnk_0d = 0;
- auStack_80.mUnk_0e = 0;
- auStack_80.mUnk_0f = 0;
- auStack_80.mUnk_10 = 0;
- auStack_80.mUnk_11 = 0;
- auStack_80.mUnk_12 = 0;
- local_ba = local_bc;
- local_b8 = local_bc;
- local_b6 = local_bc;
+ Vec3p local_f8 = data_027e0fd4->mUnk_020.pos;
+ local_f8.y = gPlayerPos.y + FLOAT_TO_Q20(0.5);
+ Vec3p local_104;
+ bool bVar1 = gPlayerControl->UpdateAimWorld(&local_104);
+ local_104.y = local_f8.y;
+ UnkStruct auStack_e0;
+ bool bVar7 = false;
+ UnkStruct auStack_80;
if (bVar1) {
- local_128 = auStack_e0.mUnk_14;
+ s32 id = this->mRef.id;
+ Vec3p local_128 = local_f8;
- // local_134.x = local_104.x;
- // local_134.y = auStack_e0.mUnk_14.y;
- // local_134.z = local_104.z;
+ Vec3p local_134;
+ local_134 = local_104;
+ local_134.y = local_f8.y;
- if (!gMapManager->func_01ffbf5c(&auStack_e0, &local_134, &local_128, this->mUnk_08c.size)) {
+ if (!gMapManager->func_01ffbf5c(&auStack_e0, &local_134, &local_128, this->mUnk_08c.size, id,
+ this->mUnk_09c.mUnk_0, this->mUnk_09c.mUnk_4, 0)) {
bVar7 = true;
}
- }
- if (!bVar7) {
- this->mPos = auStack_e0.mUnk_14;
- this->mPrevPos = auStack_e0.mUnk_14;
- this->mOffsetPos = auStack_e0.mUnk_14;
+ if (!bVar7) {
+ this->mPos = auStack_e0.mUnk_3c;
+ this->mPrevPos = auStack_e0.mUnk_3c;
+ this->mOffsetPos = auStack_e0.mUnk_3c;
+ }
+ break;
+ default:
+ this->func_ov000_020b853c();
+ break;
}
- break;
- default:
- this->func_ov000_020b853c();
- break;
+ }
}
- pIVar3 = gItemManager;
+ void *pvVar2;
switch (param1) {
case 3:
- pIVar3->func_ov00_020ad538(data_ov000_020dc7d0);
- pIVar3->func_ov000_020c0c44(&this->mUnk_2f0);
- pIVar3->func_ov000_020c0e5c(&this->mUnk_2f0, 0);
+ pvVar2 = gItemManager->func_ov00_020ad538(&data_ov000_020dc7d0);
+ this->mUnk_2f0.func_ov000_020c0c44(pvVar2);
+ this->mUnk_2f0.func_ov000_020c0e5c(0);
break;
case 4:
this->mUnk_348 = 0;
- pIVar3->func_ov00_020ad538(data_ov000_020dc7e4);
- pIVar3->func_ov000_020c0c44(&this->mUnk_2f0);
- pIVar3->func_ov000_020c0e5c(&this->mUnk_2f0, 1);
+ pvVar2 = gItemManager->func_ov00_020ad538(&data_ov000_020dc7e4);
+ this->mUnk_2f0.func_ov000_020c0c44(pvVar2);
+ this->mUnk_2f0.func_ov000_020c0e5c(1);
break;
default:
break;
diff --git a/src/59_Hammer/Player/EquipHammer.cpp b/src/59_Hammer/Player/EquipHammer.cpp
index cfccec9b..3928cb6e 100644
--- a/src/59_Hammer/Player/EquipHammer.cpp
+++ b/src/59_Hammer/Player/EquipHammer.cpp
@@ -161,7 +161,7 @@ ARM void LinkStateItem::func_ov059_02198ffc() {
local_20 = *this->GetPlayerPos();
Vec3p_Sub(&local_14, &local_20, &local_14);
- dest = Atan2(local_14.x, local_14.z);
+ dest = FX_Atan2Idx(local_14.x, local_14.z);
ApproachAngle_thunk(this->GetPlayerAngle(), dest, 0x2000);
}
diff --git a/src/ITCM/Map/MapManager.cpp b/src/ITCM/Map/MapManager.cpp
index 467b0990..2cf203c7 100644
--- a/src/ITCM/Map/MapManager.cpp
+++ b/src/ITCM/Map/MapManager.cpp
@@ -1,6 +1,7 @@
#include "Map/MapManager.hpp"
-bool MapManager::func_01ffbe78(Vec3p *param1, Vec3p *param2, Vec3p *param3, Vec4p *param4) {}
-bool MapManager::func_01ffbf5c(struct UnkStruct *param1, Vec3p *param2, Vec3p *param3, s32 length) {}
+bool MapManager::func_01ffbe78(Vec3p *param1, Vec3p *param2, Vec3p *param3, Sphere *param4) {}
+bool MapManager::func_01ffbf5c(struct UnkStruct *param1, Vec3p *param2, Vec3p *param3, s32 length, unk32 param5, unk32 param6,
+ UnkStruct_ov000_020beba8 *param7, unk32 param8) {}
bool MapManager::func_01ffc118(s32 *param1, Vec3p *param2, Vec3p *param3, s32 param4, s32 *param5, u32 param6, s32 *param7) {}
bool MapManager::func_01ffd1e0(s32 *param1, Vec3p *param2, Vec3p *param3, s32 param4, s32 *param5, u32 param6, s32 *param7) {}