summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAetias <aetias@outlook.com>2024-10-19 13:34:42 +0200
committerAetias <aetias@outlook.com>2024-10-19 13:34:42 +0200
commit4826a6e764b92d623b8517883cd8e901a4348f86 (patch)
treebc8df7ba0805e37d1e44a18e755679f2ae1cc145 /src
parent0d62c02f14bd122690306976d8a58c5449dd3040 (diff)
parentffdfd609fb9bc8f968ddc6f187da1d50731cbf69 (diff)
Merge branch 'main' into match_actor_rupee
Diffstat (limited to 'src')
-rw-r--r--src/00_Core/Actor/Actor.cpp1065
-rw-r--r--src/00_Core/Actor/ActorManager.cpp22
-rw-r--r--src/00_Core/Item/Item.cpp4
-rw-r--r--src/00_Core/Item/ItemManager.cpp170
-rw-r--r--src/00_Core/Map/Course.cpp12
-rw-r--r--src/00_Core/Map/MapBase.cpp10
-rw-r--r--src/00_Core/Map/MapManager.cpp16
-rw-r--r--src/00_Core/Player/LinkStateBase.cpp30
-rw-r--r--src/00_Core/Player/LinkStateDamage.cpp4
-rw-r--r--src/00_Core/Player/LinkStateFollow.cpp6
-rw-r--r--src/00_Core/Player/LinkStateInteract.cpp6
-rw-r--r--src/00_Core/Player/LinkStateItem.cpp8
-rw-r--r--src/00_Core/Player/LinkStateMove.cpp4
-rw-r--r--src/00_Core/Player/LinkStateRoll.cpp4
-rw-r--r--src/00_Core/Player/PlayerBase.cpp16
-rw-r--r--src/00_Core/Player/PlayerControl.cpp6
-rw-r--r--src/00_Core/Player/TouchControl.cpp4
-rw-r--r--src/00_Core/Player/TouchGesture.cpp4
-rw-r--r--src/00_Core/Save/AdventureFlags.cpp12
-rw-r--r--src/14_Land/Actor/ActorRupee.cpp184
-rw-r--r--src/Main/Actor/ActorType.cpp68
21 files changed, 1216 insertions, 439 deletions
diff --git a/src/00_Core/Actor/Actor.cpp b/src/00_Core/Actor/Actor.cpp
index 719cad35..4150b42f 100644
--- a/src/00_Core/Actor/Actor.cpp
+++ b/src/00_Core/Actor/Actor.cpp
@@ -1,110 +1,961 @@
+extern "C" {
+#include <stdlib.h>
+}
+
#include "Actor/Actor.hpp"
+#include "Actor/ActorManager.hpp"
+#include "Actor/ActorPlayerDummy.hpp"
+#include "Item/ItemManager.hpp"
+#include "Map/MapManager.hpp"
+#include "Player/EquipSword.hpp"
+#include "Player/PlayerControl.hpp"
+#include "Player/PlayerLinkBase.hpp"
+#include "Player/TouchControl.hpp"
+#include "Save/AdventureFlags.hpp"
-#ifdef STUBS
-
-Actor::Actor() {}
-Actor::~Actor() {}
-bool Actor::vfunc_08() {}
-void Actor::vfunc_0c() {}
-void Actor::vfunc_10(u32 param1) {}
-void Actor::vfunc_24() {}
-void Actor::vfunc_28() {}
-void Actor::GetOffsetPos(Vec3p *pos) {}
-unk32 Actor::vfunc_38() {}
-void Actor::func_ov00_020c1788() {}
-s32 Actor::vfunc_2c() {}
-unk32 Actor::vfunc_30() {}
-void Actor::vfunc_14(u32 param1) {}
-void Actor::vfunc_18(u32 param1) {}
-void Actor::vfunc_1c(u16 param1) {}
-void Actor::vfunc_20(s32 param1) {}
-void Actor::SetUnk_129(bool value) {}
-void Actor::SetUnk_11b() {}
-bool Actor::SetVelocity(Vec3p *vel) {}
-bool Actor::vfunc_60() {}
-void Actor::vfunc_64() {}
-void Actor::SetUnk_11c(unk8 value) {}
-void Actor::vfunc_68() {}
-bool Actor::vfunc_6c() {}
-bool Actor::vfunc_70() {}
-void Actor::vfunc_74() {}
-void Actor::vfunc_7c() {}
-bool Actor::vfunc_78() {}
-void Actor::vfunc_80() {}
-void Actor::vfunc_84() {}
-void Actor::vfunc_88() {}
-void Actor::vfunc_8c() {}
-bool Actor::vfunc_90() {}
-void Actor::vfunc_94() {}
-bool Actor::vfunc_98() {}
-bool Actor::vfunc_9c() {}
-bool Actor::func_ov00_020c195c() {}
-bool Actor::func_ov00_020c198c() {}
-bool KillPickupItemActors::Filter(Actor *actor) {}
-void Actor::KillPickupItemActors() {}
-bool Actor::TrySetTransform(Transform *transform) {}
-void Actor::SetTransform(Transform *transform) {}
-void Actor::vfunc_a8() {}
-void Actor::func_Ov00_020c1bfc(s32 param1) {}
-void Actor::func_ov00_020c1c20(s32 param1, unk32 param2, unk32 param3) {}
-bool Actor::vfunc_48(unk32 param1) {}
-bool Actor::vfunc_4c(unk32 *param1) {}
-bool Actor::IsNearLink() {}
-void Actor::func_ov00_020c1cf8() {}
-bool Actor::func_ov00_020c1d58() {}
-bool Actor::func_ov00_020c1da0(s32 param1, Vec3p *param2) {}
-bool Actor::func_ov00_020c1e2c(s32 param1, Vec3p *param2) {}
-bool Actor::func_ov00_020c1ef8(Cylinder *param1, Vec3p *param2, s32 param3, s32 param4) {}
-bool Actor::func_ov00_020c1f5c(Vec3p *param1, Vec3p *param2, s32 param3, Vec3p *param4, s32 param5, s32 param6) {}
-bool Actor::func_ov00_020c1fc8(PlayerCollide flags) {}
-bool Actor::CollidesWithShield(Cylinder *param1) {}
-bool Actor::CollidesWithPlayer(PlayerCollide flags) {}
-void Actor::func_ov00_020c23c4(ActorRef *ref, Actor *actor) {}
-void Actor::func_ov00_020c23d4(ActorRef *ref, Actor *actor, Cylinder *cylinder) {}
-bool Actor::func_ov00_020c243c(unk32 param1, s32 *param2) {}
-bool Actor::CollidesWith(const Actor *other) {}
-bool Actor::func_ov00_020c27a8(unk32 param1) {}
-bool Actor::CollidesWithLink() {}
-bool Actor::IsFollowedByLink() {}
-void Actor::StopLinkFollow() {}
-bool Actor::IsGrabbed() {}
-s32 Actor::XzDistanceTo(Vec3p *vec) {}
-s32 Actor::DistanceToLink() {}
-s32 Actor::XzDistanceToLink() {}
-s32 Actor::GetAngleTo(Vec3p *vec) {}
-s32 Actor::GetAngleToLink() {}
-void Actor::func_ov00_020c2988(Vec3p *param1, s32 param2, Vec3p *param3) {}
-void Actor::ResetWallTouch() {}
-bool Actor::func_ov00_020c29ec(s32 param1) {}
-void Actor::GetHitbox(Cylinder *param1) {}
-void Actor::GetUnk_08c(Cylinder *param1) {}
-void Actor::IncreaseActiveFrames() {}
-bool Actor::func_ov00_020c2c0c() {}
-bool Actor::func_ov00_020c2c70() {}
-EquipBoomerang* Actor::GetEquipBoomerang() {}
-bool Actor::func_ov00_020c2d54() {}
-bool Actor::func_ov00_020c2de4() {}
-bool Actor::func_ov00_020c2e7c() {}
-bool Actor::func_ov00_020c2ebc() {}
-bool Actor::func_ov00_020c2ed4() {}
-bool Actor::IsHitboxTouched(bool param1) {}
-void Actor::ApplyGravity() {}
-bool Actor::func_ov00_020c3094() {}
-Vec3p* Actor::GetPos() {}
-void Actor::vfunc_54() {}
-bool Actor::func_ov00_020c3118(unk16 param1) {}
-bool Actor::func_ov00_020c313c(u32 param1) {}
-void Actor::func_ov00_020c3158() {}
-void Actor::Kill() {}
-void Actor::KillInBounds() {}
-void Actor::func_ov00_020c31c0(unk32 param1) {}
-void Actor::vfunc_ac_Thunk() {}
-void Actor::vfunc_ac() {}
-void Actor::func_ov00_020c3200(s32 param1) {}
-void Actor::vfunc_b0() {}
-void Actor::GetLinkPos(Vec3p *result) {}
-void Actor::GetLinkDummyPos(Vec3p *result) {}
-Actor_UnkStruct_09c::Actor_UnkStruct_09c() {}
-Actor_UnkStruct_012::Actor_UnkStruct_012() {}
+static char *sShipTypes[] = {"brg", "anc", "bow", "hul", "can", "dco", "pdl", "fnl"};
+
+struct UnkStruct3 {
+ /* 0 */ s16 mUnk_0;
+ /* 2 */ u8 mUnk_2;
+ /* 3 */
+};
+const UnkStruct3 sUnkTable[] = {
+ {0xff, 2}, {0xff, 2}, {0xff, 2}, {0xff, 2}, {0xff, 2}, {6, 2}, {4, 2}, {4, 2}, {4, 2}, {1, 2},
+ {12, 2}, {4, 2}, {4, 2}, {8, 2}, {12, 2}, {2, 2}, {2, 2}, {20, 2}, {20, 2}, {1, 2},
+ {4, 2}, {4, 2}, {4, 2}, {8, 2}, {4, 2}, {0xff, 2}, {20, 2}, {6, 2}, {6, 2}, {2, 2},
+};
+
+Actor_UnkStruct_020::Actor_UnkStruct_020() :
+ mUnk_0c(-1),
+ mUnk_0d(0),
+ mUnk_0e(1),
+ mUnk_10(-1) {
+ for (s32 i = 0; i < 4; ++i) {
+ mUnk_00[i] = 0;
+ }
+ for (s32 i = 0; i < 2; ++i) {
+ mUnk_08[i] = 0;
+ mUnk_0a[i] = 0;
+ }
+}
+
+ARM Actor::Actor() :
+ mType(ActorTypeId_Null),
+ mRef(-1, -1),
+ mUnk_010(0),
+ mUnk_011(0),
+ mUnk_012(0),
+ mUnk_034(-1),
+ mUnk_038(-1),
+ mUnk_03c(-1),
+ mUnk_040(-1, -1),
+ mGravity(FLOAT_TO_Q20(0.0498)),
+ mMaxFall(FLOAT_TO_Q20(0.5)),
+ mUnk_074(2),
+ mAngle(0),
+ mUnk_07a(-1),
+ mHitbox(FLOAT_TO_Q20(0.5)),
+ mUnk_08c(mHitbox),
+ mUnk_0a4(0, FLOAT_TO_Q20(1.0), 0, FLOAT_TO_Q20(1.0)),
+ mUnk_0dc(0xffff),
+ mUnk_0de(0xffff),
+ mUnk_0e0(0xffff),
+ mUnk_0e2(0xffff),
+ mUnk_0e4(0),
+ mUnk_106(0),
+ mUnk_107(0),
+ mUnk_108(0),
+ mUnk_109(0),
+ mUnk_110(0),
+ mUnk_111(0),
+ mUnk_112(0),
+ mUnk_113(0),
+ mUnk_114(0),
+ mUnk_115(0),
+ mAlive(true),
+ mUnk_119(1),
+ mVisible(true),
+ mUnk_11b(false),
+ mUnk_11c(0),
+ mUnk_11d(false),
+ mYOffset(0),
+ mUnk_120(4),
+ mUnk_122(0xff),
+ mUnk_124(1),
+ mUnk_125(4),
+ mUnk_126(3),
+ mUnk_128(false),
+ mUnk_129(false),
+ mUnk_12a(0),
+ mUnk_12c(0),
+ mUnk_130(-1),
+ mUnk_134(-1),
+ mActiveFrames(0),
+ mUnk_13c(0),
+ mUnk_140(0),
+ mUnk_144(0) {
+ mUnk_014.x = 0;
+ mUnk_014.y = 0;
+ mUnk_014.z = 0;
+ mPos.x = 0;
+ mPos.y = 0;
+ mPos.z = 0;
+ mPrevPos.x = 0;
+ mPrevPos.y = 0;
+ mPrevPos.z = 0;
+ mVel.x = 0;
+ mVel.y = 0;
+ mVel.z = 0;
+}
+
+ARM Actor::~Actor() {}
+
+ARM bool Actor::vfunc_08() {
+ return true;
+}
+
+ARM void Actor::vfunc_0c() {}
+ARM void Actor::vfunc_10(u32 param1) {}
+ARM void Actor::vfunc_24() {}
+ARM void Actor::vfunc_28() {}
+
+ARM void Actor::GetOffsetPos(Vec3p *pos) {
+ *pos = mPos;
+ pos->y += mYOffset;
+}
+
+extern "C" unk32 func_ov00_02087ef0();
+ARM unk32 Actor::vfunc_38() {
+ return func_ov00_02087ef0();
+}
+
+ARM unk8 Actor::func_ov00_020c1788() {
+ return gMapManager->func_ov00_02083570(mUnk_010, mUnk_011);
+}
+
+ARM s32 Actor::vfunc_2c() {
+ return -1;
+}
+
+ARM unk32 Actor::vfunc_30() {
+ return 0;
+}
+
+ARM void Actor::vfunc_14(u32 param1) {}
+
+extern "C" void func_ov00_0207a1c8(Actor_UnkStruct_0a4 *param1, u32 param2, Vec3p *param3);
+ARM void Actor::vfunc_18(u32 param1) {
+ func_ov00_0207a1c8(&mUnk_0a4, param1, &mPos);
+}
+
+struct UnkStruct1 {
+ /* 00 */ unk32 mUnk_00;
+ /* 04 */ unk32 mUnk_04;
+ /* 08 */ unk8 mUnk_08;
+ /* 09 */ unk8 mUnk_09;
+ /* 0a */ unk8 mUnk_0a;
+ /* 0b */ unk8 mUnk_0b;
+ /* 0c */ unk32 mUnk_0c;
+ /* 10 */ unk32 mUnk_10;
+ /* 14 */ unk8 mUnk_14;
+ /* 15 */ unk8 mUnk_15;
+ /* 16 */ unk16 mUnk_16;
+ /* 18 */ unk32 mUnk_18;
+ /* 1c */ unk32 mUnk_1c;
+ /* 20 */
+};
+extern void *data_027e0d3c;
+extern unk32 data_02063e4c;
+extern "C" bool func_ov00_02079470(void *param1, Vec3p *param2, unk32 param3, unk32 param4, unk32 *param5, unk32 *param6,
+ unk32 param7, unk32 param8);
+extern "C" void func_01ffbe34(UnkStruct1 *param1);
+extern "C" void func_020313c8(unk32 *param1, unk32 param2, unk32 param3, u32 param4, UnkStruct1 *param5);
+ARM void Actor::vfunc_1c(u16 *param1) {
+ u16 unk1 = mUnk_07a;
+ if (mUnk_129) unk1 = mUnk_126;
+ if (unk1 != 0xffff) {
+ if ((*param1 & 4) == 0 && (*param1 & 8) == 0) return;
+ unk32 unk2;
+ unk32 unk3;
+ if (func_ov00_02079470(data_027e0d3c, &mPos, 0, 0, &unk2, &unk3, 0, 0)) {
+ UnkStruct1 unk4;
+ func_01ffbe34(&unk4);
+ unk4.mUnk_04 = 1;
+ func_020313c8(&data_02063e4c, unk2, unk3, unk1, &unk4);
+ }
+ }
+}
+
+ARM void Actor::vfunc_20(s32 param1) {}
+
+ARM void Actor::SetUnk_129(bool value) {
+ if (mUnk_128) mUnk_129 = value;
+}
+
+ARM bool Actor::SetUnk_11b() {
+ if (mUnk_11b) return false;
+ mUnk_11b = true;
+ return true;
+}
+
+ARM bool Actor::SetVelocity(Vec3p *vel) {
+ if (!mUnk_11b) return false;
+ mVel = *vel;
+ mUnk_11b = false;
+ return true;
+}
+
+ARM bool Actor::vfunc_60() {
+ return false;
+}
+
+ARM void Actor::vfunc_64() {}
+
+ARM void Actor::SetUnk_11c(unk8 value) {
+ mUnk_11c = value;
+}
+
+ARM void Actor::vfunc_68() {}
+
+ARM bool Actor::vfunc_6c() {
+ return true;
+}
+
+ARM bool Actor::vfunc_70() {
+ return true;
+}
+
+ARM void Actor::vfunc_74() {}
+ARM void Actor::vfunc_7c() {}
+
+ARM bool Actor::vfunc_78() {
+ return true;
+}
+
+ARM void Actor::vfunc_80() {}
+ARM void Actor::vfunc_84() {}
+ARM void Actor::vfunc_88() {}
+
+ARM bool Actor::vfunc_8c() {
+ return true;
+}
+
+ARM bool Actor::vfunc_90() {
+ return true;
+}
+
+ARM void Actor::vfunc_94() {}
+ARM bool Actor::vfunc_98() {}
+ARM bool Actor::vfunc_9c() {}
+
+ARM bool Actor::func_ov00_020c195c() {
+ if (!mUnk_11b) return false;
+ gPlayerLink->func_ov00_020bc854(&mPos);
+ return true;
+}
+
+struct UnkStruct2 {
+ /* 0 */ u32 mUnk_0;
+ /* 4 */ u32 mUnk_4;
+ /* 8 */
+};
+extern UnkStruct2 data_027e077c;
+extern u8 data_02056be4[];
+extern "C" bool func_ov05_02103f4c(s32 param1);
+extern s32 data_027e103c;
+ARM bool Actor::func_ov00_020c198c() {
+ u32 unk1 = data_027e077c.mUnk_0;
+ u32 unk2 = data_027e077c.mUnk_4;
+ if (data_027e077c.mUnk_0 != data_027e077c.mUnk_4 || (data_02056be4[unk1] & 1) != 0 || (data_02056be4[unk2] & 4) != 0 ||
+ func_ov05_02103f4c(data_027e103c) || gPlayer->mHealth <= 0)
+ {
+ return false;
+ }
+ if (gPlayerLink && !gPlayerLink->func_ov00_020bd304()) return false;
+ return true;
+}
+
+ARM bool KillPickupsFilter::Filter(Actor *actor) {
+ switch (actor->mType) {
+ case ActorTypeId_Rupee:
+ case ActorTypeId_Heart:
+ case ActorTypeId_Bomb:
+ case ActorTypeId_Arrow:
+ case ActorTypeId_BMRN:
+ case ActorTypeId_BMTY:
+ case ActorTypeId_FLAL:
+ case ActorTypeId_FLBM:
+ case ActorTypeId_FLBT:
+ case ActorTypeId_FLTM: {
+ actor->Kill();
+ return true;
+ }
+
+ default: return false;
+ }
+}
+
+ARM void Actor::KillPickupItemActors() {
+ KillPickupsFilter killPickups;
+ gActorManager->FilterActors(&killPickups, NULL);
+}
+
+ARM bool Actor::TrySetTransform(Transform *transform) {
+ mPrevPos = mPos;
+ mPos = transform->pos;
+ mAngle = transform->angle;
+ mVisible = transform->visible;
+ return true;
+}
+
+ARM void Actor::SetTransform(Transform *transform) {
+ mPrevPos = mPos;
+ mPos = transform->pos;
+ mAngle = transform->angle;
+ mVisible = transform->visible;
+}
+
+ARM void Actor::vfunc_a8() {}
+
+ARM void Actor::func_Ov00_020c1bfc(s32 param1) {
+ gMapManager->func_ov00_02084be0(mUnk_020.mUnk_0a[param1], mUnk_020.mUnk_08[param1]);
+}
+
+ARM void Actor::func_ov00_020c1c20(s32 param1, unk32 param2) {
+ gMapManager->func_ov00_02084b38(mUnk_020.mUnk_0a[param1], mUnk_020.mUnk_08[param1], param2);
+}
+
+ARM bool Actor::vfunc_48(Knockback *param1) {
+ return true;
+}
+
+extern "C" void func_ov00_020c8398(ActorTypeId type, Vec3p *pos, unk32 param2);
+ARM bool Actor::vfunc_4c(unk32 *param1) {
+ if ((*param1 & 0x1f) == 0x8) {
+ func_ov00_020c8398(mType, &mPos, 1);
+ this->Kill();
+ return true;
+ }
+ this->Kill();
+ return true;
+}
+
+ARM bool Actor::IsNearLink() {
+ Vec3p playerPos = gPlayerPos;
+
+ q20 z = playerPos.z;
+ q20 dx = abs(playerPos.x - mPos.x);
+ if (dx > FLOAT_TO_Q20(10.0)) return false;
+ q20 dz = abs(playerPos.z - mPos.z);
+ return dz <= FLOAT_TO_Q20(10.0);
+}
+
+ARM void Actor::func_ov00_020c1cf8() {
+ if (mUnk_0a4.mUnk_00 || mUnk_0a4.mUnk_01 || mUnk_129 == true || mUnk_11d == true || mUnk_11b == true) {
+ mInactive = 0;
+ } else {
+ if (this->IsNearLink()) {
+ mInactive = 1;
+ } else {
+ mInactive = 2;
+ }
+ }
+}
+
+ARM bool Actor::func_ov00_020c1d58() {
+ if (gAdventureFlags->func_ov00_02097738()) return false;
+ return gPlayer->vfunc_04() != false;
+}
+
+ARM bool Actor::func_ov00_020c1da0(s32 param1, Vec3p *param2) {
+ if (!this->func_ov00_020c1d58()) return false;
+
+ Vec3p vec;
+ if (param2) {
+ vec = *param2;
+ } else {
+ Vec3p_Sub(&gPlayerPos, &mPrevPos, &vec);
+ }
+
+ return gPlayer->vfunc_30(mUnk_124, &vec, param1);
+}
+
+ARM bool Actor::func_ov00_020c1e2c(s32 param1, Vec3p *param2) {
+ if (!this->func_ov00_020c1d58()) return false;
+ if (mHitbox.size < 0) return false;
+
+ Vec3p vec;
+ if (param2) {
+ vec = *param2;
+ } else {
+ Vec3p_Sub(&gPlayerPos, &mPrevPos, &vec);
+ }
+
+ Cylinder hitbox;
+ this->GetHitbox(&hitbox);
+ if (gPlayer->CollidesWith(&hitbox)) {
+ return gPlayer->vfunc_30(mUnk_124, &vec, param1);
+ }
+ return false;
+}
+
+ARM bool Actor::func_ov00_020c1ef8(Cylinder *param1, Vec3p *param2, s32 param3, s32 param4) {
+ if (!this->func_ov00_020c1d58()) return false;
+ if (gPlayer->CollidesWith(param1)) {
+ return gPlayer->vfunc_30(param3, param2, param4);
+ }
+ return false;
+}
+
+ARM bool Actor::func_ov00_020c1f5c(Vec3p *param1, Vec3p *param2, s32 param3, Vec3p *param4, u8 param5, s32 param6) {
+ if (!this->func_ov00_020c1d58()) return false;
+ if (gPlayer->func_ov00_020a7c60(param1, param2, param3)) {
+ return gPlayer->vfunc_30(param5, param4, param6);
+ }
+ return false;
+}
+
+ARM bool Actor::func_ov00_020c1fc8(PlayerCollide flags) {
+ if (gAdventureFlags->func_ov00_02097738()) return false;
+ bool result = false;
+ if (mHitbox.size >= 0) {
+ Vec3p vecFromPlayer;
+ Vec3p_Sub(&mPos, &gPlayerPos, &vecFromPlayer);
+ if (this->CollidesWithPlayer(flags & PlayerCollide_Sword)) {
+ Knockback knockback;
+ knockback.mUnk_00 = gPlayer->EquipItem_vfunc_2c();
+ knockback.vec = vecFromPlayer;
+ knockback.mUnk_10 = 0;
+ knockback.actor = NULL;
+
+ result = this->vfunc_48(&knockback);
+ } else if (this->CollidesWithPlayer(flags & PlayerCollide_Shield)) {
+ Knockback knockback;
+ knockback.mUnk_00 = 0;
+ knockback.vec = vecFromPlayer;
+ if ((s32) gItemManager->GetActiveFairyLevel(FairyId_Wisdom) >= 1) {
+ knockback.mUnk_10 = 3;
+ } else {
+ knockback.mUnk_10 = 2;
+ }
+ knockback.actor = NULL;
+
+ result = this->vfunc_48(&knockback);
+ } else if (this->CollidesWithPlayer(flags & PlayerCollide_Hammer)) {
+ Knockback knockback;
+ knockback.mUnk_00 = gPlayer->EquipItem_vfunc_2c();
+ knockback.vec = vecFromPlayer;
+ knockback.mUnk_10 = 4;
+ knockback.actor = NULL;
+
+ result = this->vfunc_48(&knockback);
+ } else if (this->CollidesWithPlayer(flags & PlayerCollide_Gongoron)) {
+ Knockback knockback;
+ knockback.mUnk_00 = gPlayerLink->vfunc_78();
+ knockback.vec = vecFromPlayer;
+ if (knockback.mUnk_00 != 0) {
+ knockback.mUnk_10 = 9;
+ } else {
+ knockback.mUnk_10 = 2;
+ }
+ knockback.actor = NULL;
+
+ result = this->vfunc_48(&knockback);
+ }
+ }
+ return result;
+}
+
+ARM bool Actor::CollidesWithShield(Cylinder *param1) {
+ Vec3p vecFromPlayer;
+ Vec3p_Sub(&mPos, &gPlayerPos, &vecFromPlayer);
+ s32 currAngle = gPlayerAngle;
+ s32 angle = Atan2(vecFromPlayer.x, vecFromPlayer.z);
+ s32 angleDiff = (s16) angle - currAngle;
+ if (angleDiff < 0) angleDiff = -angleDiff;
+ if (angleDiff <= DEG_TO_ANG(90) && gPlayer->EquipCollidesWith(param1, ItemFlag_WoodenShield)) {
+ return true;
+ }
+ return false;
+}
+
+ARM bool Actor::CollidesWithPlayer(PlayerCollide flags) {
+ if (flags != 0 && mHitbox.size >= 0) {
+ Cylinder hitbox;
+ this->GetHitbox(&hitbox);
+ if (flags & PlayerCollide_Player) {
+ if (gPlayer->CollidesWith(&hitbox)) return true;
+ }
+ if (flags & PlayerCollide_Sword) {
+ if (gPlayer->EquipCollidesWith(&hitbox, ItemFlag_OshusSword)) return true;
+ }
+ if (flags & PlayerCollide_Shield) {
+ if (this->CollidesWithShield(&hitbox)) return true;
+ }
+ if (flags & PlayerCollide_Gongoron) {
+ if (gPlayerLink && gPlayerLink->GongoronCollidesWith(&hitbox)) return true;
+ }
+ if (flags & PlayerCollide_Hammer) {
+ if (gPlayer->EquipCollidesWith(&hitbox, ItemFlag_Hammer)) return true;
+ }
+ }
+ return false;
+}
+
+ARM void Actor::func_ov00_020c23c4(ActorRef *ref, Actor *actor) {
+ Actor::func_ov00_020c23d4(ref, actor, &actor->mHitbox);
+}
+
+ARM void Actor::func_ov00_020c23d4(ActorRef *ref, Actor *actor, Cylinder *cylinder) {
+ *ref = actor->mUnk_040;
+ if (!gActorManager->func_ov00_020c398c(actor->mRef.index)) {
+ ref->Reset();
+ }
+ actor->mUnk_040.Reset();
+ gActorManager->func_ov00_020c399c(actor->mRef.index, cylinder);
+}
+
+ARM bool Actor::func_ov00_020c243c(ActorTypeId *actorTypes, Actor **out) {
+ if (out) *out = NULL;
+ if (gAdventureFlags->func_ov00_02097738()) return false;
-#endif
+ bool result = false;
+ if (mHitbox.size >= 0) {
+ Actor *actor = gActorManager->func_ov00_020c39ac(mRef.index, actorTypes, false);
+ if (actor) {
+ Knockback knockback;
+ if (actor->mType == ActorTypeId_Arrow || actor->mType == ActorTypeId_SBEM) {
+ q20 cos = COS(actor->mAngle);
+ q20 sin = SIN(actor->mAngle);
+
+ knockback.vec.x = sin;
+ knockback.vec.y = 0;
+ knockback.vec.z = cos;
+ } else {
+ Vec3p_Sub(&mPos, &actor->mPrevPos, &knockback.vec);
+ }
+ knockback.mUnk_00 = actor->mUnk_125;
+ knockback.actor = actor;
+
+ switch (actor->mType) {
+ case ActorTypeId_SBEM: {
+ knockback.mUnk_10 = 1;
+ } break;
+
+ case ActorTypeId_Arrow: {
+ knockback.mUnk_10 = 7;
+ } break;
+
+ case ActorTypeId_BMRN: {
+ knockback.mUnk_10 = 5;
+ } break;
+
+ case ActorTypeId_ROPE: {
+ knockback.mUnk_10 = 8;
+ } break;
+
+ case ActorTypeId_Bomb:
+ case ActorTypeId_BLST:
+ case ActorTypeId_BMTY:
+ case ActorTypeId_CBLS: {
+ knockback.mUnk_10 = 6;
+ } break;
+
+ case ActorTypeId_TSBH:
+ case ActorTypeId_BIGR:
+ case ActorTypeId_BTRF:
+ case ActorTypeId_STNE:
+ case ActorTypeId_TARU:
+ case ActorTypeId_BKEY:
+ case ActorTypeId_FORC:
+ case ActorTypeId_FLTB:
+ case ActorTypeId_TSUB: {
+ knockback.mUnk_10 = 10;
+ } break;
+
+ case ActorTypeId_VLR0: {
+ knockback.mUnk_10 = 4;
+ } break;
+
+ default: {
+ knockback.mUnk_10 = 11;
+ } break;
+ }
+
+ result = this->vfunc_48(&knockback);
+ if (result) {
+ actor->mUnk_040 = this->mRef;
+ if (out) *out = actor;
+ }
+ }
+ }
+ return result;
+}
+
+ARM bool Actor::CollidesWith(Actor *other) {
+ bool collides = false;
+ if (other->mAlive) {
+ if (other->mHitbox.size >= 0 && mHitbox.size >= 0) {
+ Cylinder a, b;
+ this->GetHitbox(&a);
+ other->GetHitbox(&b);
+ if (a.Overlaps(&b)) collides = true;
+ }
+ }
+ return collides;
+}
+
+ARM bool Actor::func_ov00_020c27a8(unk32 param1) {
+ if (mUnk_11b) return false;
+ if (param1 == 0) return mUnk_12c != 0;
+ return mUnk_12c == param1;
+}
+
+ARM bool Actor::CollidesWithLink() {
+ Cylinder hitbox;
+ this->GetHitbox(&hitbox);
+ // Link's hitbox has a radius of 1, hence why they add 1.0 here
+ return this->DistanceToLink() < hitbox.size + FLOAT_TO_Q20(1.0);
+}
+
+ARM bool Actor::IsFollowedByLink() {
+ return mRef.id == gPlayerControl->mFollowRef.id;
+}
+
+ARM void Actor::StopLinkFollow() {
+ if (!this->IsFollowedByLink()) return;
+ gPlayerControl->StopFollowing();
+}
+
+ARM bool Actor::IsGrabbed() {
+ s32 id = mRef.id;
+ return id == gPlayerLink->GetGrabActorId();
+}
+
+ARM q20 Actor::XzDistanceTo(Vec3p *vec) {
+ Vec3p src, dest;
+ Vec3p_CopyXZ(&mPos, &src);
+ Vec3p_CopyXZ(vec, &dest);
+ return Vec3p_Distance(&src, &dest);
+}
+
+ARM q20 Actor::DistanceToLink() {
+ return Vec3p_Distance(&mPos, &gPlayerPos);
+}
+
+ARM q20 Actor::XzDistanceToLink() {
+ Vec3p src;
+ Vec3p_CopyXZ(&mPos, &src);
+ Vec3p dest = gPlayerPos;
+
+ dest.y = 0;
+ return Vec3p_Distance(&src, &dest);
+}
+
+ARM s16 Actor::GetAngleTo(Vec3p *vec) {
+ s16 angle = mAngle;
+
+ q20 dz = vec->z - mPos.z;
+ q20 dx = vec->x - mPos.x;
+ if (dx != 0 || dz != 0) {
+ angle = Atan2(dx, dz);
+ }
+ return angle;
+}
+
+ARM s32 Actor::GetAngleToLink() {
+ return this->GetAngleTo(&gPlayerPos);
+}
+
+extern "C" void func_0202d95c(Vec3p *param1, q20 param2);
+ARM void Actor::func_ov00_020c2988(Vec3p *param1, q20 param2, Vec3p *param3) {
+ q20 z1 = param1->z;
+ q20 z0 = mPos.z;
+
+ param3->x = param1->x - mPos.x;
+ param3->y = 0;
+ param3->z = z1 - z0;
+ q20 dist = this->XzDistanceTo(param1);
+ if (dist < param2) param2 = dist;
+ func_0202d95c(param3, param2);
+}
+
+ARM void Actor::ResetWallTouch() {
+ mWallTouch.x = 0;
+ mWallTouch.y = 0;
+ mWallTouch.z = 0;
+}
+
+ARM bool Actor::func_ov00_020c29ec(q20 param1) {
+ return Vec3p_Length(&mWallTouch) > param1;
+}
+
+ARM void Actor::GetHitbox(Cylinder *hitbox) {
+ hitbox->size = mHitbox.size;
+ u32 angle = 2 * (mAngle >> 4);
+ hitbox->pos.x = mPos.x;
+ hitbox->pos.y = mPos.y;
+ hitbox->pos.z = mPos.z;
+ hitbox->pos.y += mHitbox.pos.y;
+
+ q20 sin = gSinCosTable[angle];
+ q20 cos = gSinCosTable[angle + 1];
+ Vec3p_Rotate(&mHitbox.pos, sin, cos, &hitbox->pos);
+}
+
+ARM void Actor::GetUnk_08c(Cylinder *param1) {
+ param1->size = mUnk_08c.size;
+ u32 angle = 2 * (mAngle >> 4);
+ param1->pos.x = mPos.x;
+ param1->pos.y = mPos.y;
+ param1->pos.z = mPos.z;
+ param1->pos.y += mUnk_08c.pos.y;
+
+ q20 sin = gSinCosTable[angle];
+ q20 cos = gSinCosTable[angle + 1];
+ Vec3p_Rotate(&mUnk_08c.pos, sin, cos, &param1->pos);
+}
+
+ARM void Actor::IncreaseActiveFrames() {
+ mActiveFrames += 1;
+ if (mActiveFrames < 0) mActiveFrames = 0;
+}
+
+ARM bool Actor::func_ov00_020c2c0c() {
+ const ActorTypeId types[] = {
+ ActorTypeId_BMRN,
+ ActorTypeId_Null,
+ };
+ return mHitbox.size >= 0 && gActorManager->func_ov00_020c39ac(mRef.index, types, false);
+}
+
+ARM bool Actor::func_ov00_020c2c70() {
+ Vec3p vel;
+ Actor *boomerang = this->GetEquipBoomerang()->GetActor();
+ if (boomerang) {
+ Vec3p_Sub(&boomerang->mPos, &mPos, &vel);
+ if (Vec3p_Length(&vel) > FLOAT_TO_Q20(1.0)) {
+ func_0202d95c(&vel, FLOAT_TO_Q20(1.0));
+ }
+ } else {
+ PlayerCharacter character = gPlayerLink->GetCurrentCharacter();
+ if (character == PlayerCharacter_Gongoron) {
+ Vec3p pos;
+ this->GetLinkPos(&pos);
+ Vec3p_Sub(&pos, &mPos, &vel);
+ } else {
+ Vec3p_Sub(&gPlayerPos, &mPos, &vel);
+ }
+ }
+ Vec3p_Add(&mPos, &vel, &mPos);
+ mVel = vel;
+ return boomerang != NULL;
+}
+
+ARM EquipBoomerang *Actor::GetEquipBoomerang() {
+ return (EquipBoomerang *) ItemManager::GetEquipItemUnchecked(ItemFlag_Boomerang);
+}
+
+ARM bool Actor::func_ov00_020c2d54() {
+ const ActorTypeId types[] = {
+ ActorTypeId_ROPE,
+ ActorTypeId_Null,
+ };
+ if (mHitbox.size >= 0) {
+ Actor *actor = gActorManager->func_ov00_020c39ac(mRef.index, types, false);
+ if (actor) {
+ EquipRope *rope = EquipSword::GetEquipRope();
+ if (rope->func_ov14_0213d480(mRef.id) < 0) {
+ actor->mUnk_040 = mRef;
+ return true;
+ }
+ }
+ }
+ return false;
+}
+
+ARM bool Actor::func_ov00_020c2de4() {
+ Vec3p vel;
+
+ EquipRope *rope = EquipSword::GetEquipRope();
+
+ Actor *actor = rope->func_ov14_0213d420();
+ if (actor) {
+ Vec3p_Sub(&actor->mPos, &mPos, &vel);
+ if (Vec3p_Length(&vel) > FLOAT_TO_Q20(1.0)) {
+ func_0202d95c(&vel, FLOAT_TO_Q20(1.0));
+ }
+ } else {
+ Vec3p_Sub(&gPlayerPos, &mPos, &vel);
+ }
+ Vec3p_Add(&mPos, &vel, &mPos);
+ mVel = vel;
+ return actor != NULL;
+}
+
+ARM bool Actor::func_ov00_020c2e7c() {
+ bool result = false;
+
+ EquipRope *rope = EquipSword::GetEquipRope();
+ if (!mUnk_11d) {
+ s32 unk1 = rope->func_ov14_0213ddd4(this);
+ s32 unk2 = unk1;
+ if (unk1 >= 0) {
+ unk1 = rope->mUnk_70;
+ if (unk1 >= unk2) result = true;
+ }
+ }
+ return result;
+}
+
+ARM bool Actor::func_ov00_020c2ebc() {
+ EquipRope *rope = EquipSword::GetEquipRope();
+ return rope->func_ov14_0213defc(this);
+}
+
+ARM bool Actor::func_ov00_020c2ed4() {
+ EquipRope *rope = EquipSword::GetEquipRope();
+
+ s32 index = rope->func_ov14_0213d440(mRef.id);
+ if (index >= 0) {
+ bool unk1 = rope->func_ov14_0213d420();
+ if (unk1) {
+ Vec3p vel;
+ if (rope->func_ov14_0213d81c(index, &vel)) {
+ mVel = vel;
+ Vec3p_Add(&mPos, &mVel, &mPos);
+ if (!this->func_01fffd04(1)) {
+ Cylinder hitbox;
+ this->GetHitbox(&hitbox);
+ return rope->func_ov14_0213dadc(index, &hitbox);
+ }
+ rope->func_ov14_0213d91c(index);
+ return false;
+ } else {
+ return true;
+ }
+ }
+ } else {
+ index = rope->func_ov14_0213d480(mRef.id);
+ if (index >= 0) return true;
+ }
+ if (rope->mUnk_6a) mVel = gVec3p_ZERO;
+ return false;
+}
+
+ARM bool Actor::IsHitboxTouched(bool param1) {
+ q20 size = mHitbox.size;
+
+ bool result = false;
+ if (size >= 0) {
+ Vec3p pos = mPos;
+ pos.y += size;
+ if (param1) {
+ result = TouchControl::func_0202b864(&pos, size, 8);
+ } else {
+ result = TouchControl::func_0202b894(&pos, size, 8);
+ }
+ }
+ return result;
+}
+
+ARM void Actor::ApplyGravity() {
+ mVel.y -= mGravity;
+ if (mVel.y < -mMaxFall) mVel.y = -mMaxFall;
+}
+
+ARM bool Actor::func_ov00_020c3094() {
+ bool result = false;
+ Vec3p pos, prevPos;
+ Vec3p_Copy(&mPos, &pos);
+ Vec3p_Copy(&mPrevPos, &prevPos);
+ s32 unk1 = gMapManager->func_ov00_02083ef8(&pos, &prevPos, 0);
+ if (mPos.y <= unk1) {
+ result = true;
+ mPos.y = unk1;
+ }
+ return result;
+}
+
+ARM Vec3p *Actor::GetPos() {
+ return &mPos;
+}
+
+ARM void Actor::vfunc_54() {}
+
+extern "C" bool func_ov00_020c5924(Vec3p *param1, unk16 param2, ActorRef *param3, unk32 param4, ActorRef *param5);
+ARM bool Actor::func_ov00_020c3118(unk16 param1) {
+ return func_ov00_020c5924(&mPos, param1, &mRef, 2, NULL);
+}
+
+extern u8 data_027e0c54;
+ARM bool Actor::func_ov00_020c313c(u32 param1) {
+ return param1 == data_027e0c54;
+}
+
+ARM void Actor::func_ov00_020c3158() {
+ if (mUnk_03c < 0) return;
+ gMapManager->func_ov00_02084c5c(mUnk_03c, 1);
+}
+
+ARM void Actor::Kill() {
+ mAlive = false;
+ if (mUnk_119 == 0) return;
+ this->func_ov00_020c3158();
+}
+
+ARM void Actor::KillInBounds() {
+ if (mPos.y >= -FLOAT_TO_Q20(10.0)) return;
+ 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);
+}
+
+ARM void vfunc_ac_Thunk(Actor *actor) {
+ actor->vfunc_ac();
+}
+
+ARM void Actor::vfunc_ac() {}
+
+ARM void Actor::func_ov00_020c3200(s32 param1) {
+ const UnkStruct3 *entry = &sUnkTable[param1];
+
+ mUnk_122 = sUnkTable[param1].mUnk_0;
+ mUnk_120 = sUnkTable[param1].mUnk_0;
+ mUnk_124 = entry->mUnk_2;
+}
+
+ARM void Actor::vfunc_b0() {}
+
+ARM void Actor::GetLinkPos(Vec3p *result) {
+ if (gPlayerLink != NULL && gPlayerLink->GetCurrentCharacter() != PlayerCharacter_Link) {
+ return this->GetLinkDummyPos(result);
+ }
+ *result = gPlayerPos;
+}
+
+ARM void Actor::GetLinkDummyPos(Vec3p *result) {
+ ActorRef dummyRef;
+ ActorManager::FindActorByType(&dummyRef, gActorManager, ActorTypeId_PlayerDummy);
+ ActorPlayerDummy *dummy = (ActorPlayerDummy *) gActorManager->GetActor(&dummyRef);
+ if (dummy != NULL && dummy->mUnk_16e == 0) {
+ *result = dummy->mPos;
+ return;
+ }
+ *result = gPlayerPos;
+}
+
+Actor_UnkStruct_09c::Actor_UnkStruct_09c() {
+ mUnk_0 = 0xff;
+ mUnk_2 = 1;
+ mUnk_3 = 0;
+ mUnk_4 = 0;
+}
+
+Actor_UnkStruct_012::Actor_UnkStruct_012() {}
diff --git a/src/00_Core/Actor/ActorManager.cpp b/src/00_Core/Actor/ActorManager.cpp
index ad56f951..467196d7 100644
--- a/src/00_Core/Actor/ActorManager.cpp
+++ b/src/00_Core/Actor/ActorManager.cpp
@@ -1,23 +1,19 @@
#include "Actor/ActorManager.hpp"
-#ifdef STUBS
-
void ActorManager::DeleteActor(u32 index, bool param2) {}
void ActorManager::func_ov00_020c3484(ActorRef *ref, Actor *actor, unk32 param3) {}
void ActorManager::Actor_vfunc_10(u32 param1) {}
-Actor* ActorManager::FindActorById(u32 id) {}
-Actor* ActorManager::GetActor(ActorRef *ref) {}
+Actor *ActorManager::FindActorById(u32 id) {}
+Actor *ActorManager::GetActor(ActorRef *ref) {}
bool FilterActor::Filter(Actor *actor) {}
-s32 ActorManager::FilterActors(ActorFilterBase *filter, ActorList *filteredActors) {}
-void ActorManager::FindActorByType(ActorRef *ref, ActorManager *manager, u32 type) {}
-void ActorManager::FindNearestActorOfType(ActorRef *ref, ActorManager *manager, u32 type, Vec3p *pos) {}
-void ActorManager::func_ov00_020c398c() {}
-void ActorManager::func_ov00_020c399c() {}
-void ActorManager::func_ov00_020c39ac(u32 index, u32 *actorTypes, bool param3) {}
+s32 ActorManager::FilterActors(FilterActorBase *filter, ActorList *filteredActors) {}
+void ActorManager::FindActorByType(ActorRef *ref, ActorManager *manager, ActorTypeId type) {}
+void ActorManager::FindNearestActorOfType(ActorRef *ref, ActorManager *manager, ActorTypeId type, Vec3p *pos) {}
+bool ActorManager::func_ov00_020c398c(u32 index) {}
+void ActorManager::func_ov00_020c399c(u32 index, Cylinder *cylinder) {}
+Actor *ActorManager::func_ov00_020c39ac(u32 index, const ActorTypeId *actorTypes, bool param3) {}
s32 ActorManager::func_ov00_020c3b2c(s32 *param1) {}
s32 ActorManager::func_ov00_020c3bb0(unk32 param1, s32 *param2) {}
void ActorManager::func_ov00_020c3ce8(unk32 param1, unk32 param2) {}
void ActorManager::Actor_vfunc_28() {}
-bool ActorManager::ActorTypeIsOneOf(u32 type, u32 *types) {}
-
-#endif
+bool ActorManager::ActorTypeIsOneOf(u32 type, ActorTypeId *types) {}
diff --git a/src/00_Core/Item/Item.cpp b/src/00_Core/Item/Item.cpp
index 522dd51d..817d86db 100644
--- a/src/00_Core/Item/Item.cpp
+++ b/src/00_Core/Item/Item.cpp
@@ -1,8 +1,4 @@
#include "Item/Item.hpp"
-#ifdef STUBS
-
bool Item::func_ov00_020ad020(ItemId item) {}
bool Item::func_ov00_020ad068(ItemId item) {}
-
-#endif
diff --git a/src/00_Core/Item/ItemManager.cpp b/src/00_Core/Item/ItemManager.cpp
index 17538f4f..66fba02a 100644
--- a/src/00_Core/Item/ItemManager.cpp
+++ b/src/00_Core/Item/ItemManager.cpp
@@ -1,9 +1,10 @@
#include "Item/ItemManager.hpp"
+#include "Player/PlayerLinkBase.hpp"
-static const char *sShipPartTypes[] = { "anc", "bow", "hul", "can", "dco", "pdl", "fnl", "brg" };
+static const char *sShipPartTypes[] = {"anc", "bow", "hul", "can", "dco", "pdl", "fnl", "brg"};
extern u32 *data_027e0ce0[];
-THUMB ItemManager* ItemManager::Create() {
+THUMB ItemManager *ItemManager::Create() {
gItemManager = new(data_027e0ce0[1], 4) ItemManager();
return gItemManager;
}
@@ -23,12 +24,12 @@ THUMB void ItemManager::Save(SaveItemManager *save) {
for (s32 i = 0; i < NUM_POTIONS; ++i) {
save->potions[i] = mPotions[i];
}
- save->numBombs = (u8) (*mAmmo)[ItemFlag_BombBag];
- save->numBombchus = (u8) (*mAmmo)[ItemFlag_BombchuBag];
- save->numArrows = (u8) (*mAmmo)[ItemFlag_Bow];
- save->equippedItem = (u8) mEquippedItem;
+ save->numBombs = (u8) (*mAmmo)[ItemFlag_BombBag];
+ save->numBombchus = (u8) (*mAmmo)[ItemFlag_BombchuBag];
+ save->numArrows = (u8) (*mAmmo)[ItemFlag_Bow];
+ save->equippedItem = (u8) mEquippedItem;
save->salvagedTreasureFlags = mSalvagedTreasureFlags;
- save->hourglassSeconds = FastDivide(mHourglassSandFrames, 60);
+ save->hourglassSeconds = FastDivide(mHourglassSandFrames, 60);
for (s32 i = 0; i < Gem_COUNT; ++i) {
save->numGems[i] = mNumGems[i];
}
@@ -47,8 +48,8 @@ THUMB void ItemManager::Save(SaveItemManager *save) {
save->unk_9f[i] = mUnk_098[i];
save->unk_82[i] = mUnk_09e[i];
}
- save->quiverSize = mQuiverSize;
- save->bombBagSize = mBombBagSize;
+ save->quiverSize = mQuiverSize;
+ save->bombBagSize = mBombBagSize;
save->bombchuBagSize = mBombchuBagSize;
if (mEquippedFairy == FairyId_None) {
save->equippedFairy = 3;
@@ -60,21 +61,20 @@ THUMB void ItemManager::Save(SaveItemManager *save) {
THUMB void ItemManager::Load(const SaveItemManager *save) {
mItemFlags = save->itemFlags;
mNumRupees = save->numRupees;
- mHourglassSandFrames = save->hourglassSeconds <= MAX_HOURGLASS_SECONDS
- ? save->hourglassSeconds * 60
- : MAX_HOURGLASS_SECONDS * 60;
+ mHourglassSandFrames =
+ save->hourglassSeconds <= MAX_HOURGLASS_SECONDS ? save->hourglassSeconds * 60 : MAX_HOURGLASS_SECONDS * 60;
for (s32 i = ItemFlag_EQUIP_START; i < ItemFlag_EQUIP_END; ++i) {
if (GET_FLAG(mItemFlags.flags, (u32) i)) {
(*mAmmo)[i] = 1;
}
}
- (*mAmmo)[ItemFlag_BombBag] = save->numBombs;
+ (*mAmmo)[ItemFlag_BombBag] = save->numBombs;
(*mAmmo)[ItemFlag_BombchuBag] = save->numBombchus;
- (*mAmmo)[ItemFlag_Bow] = save->numArrows;
+ (*mAmmo)[ItemFlag_Bow] = save->numArrows;
for (s32 i = 0; i < NUM_POTIONS; ++i) {
mPotions[i] = save->potions[i];
}
- mEquippedItem = save->equippedItem;
+ mEquippedItem = save->equippedItem;
mSalvagedTreasureFlags = save->salvagedTreasureFlags;
for (s32 i = 0; i < Gem_COUNT; ++i) {
mNumGems[i] = save->numGems[i];
@@ -94,10 +94,10 @@ THUMB void ItemManager::Load(const SaveItemManager *save) {
mUnk_098[i] = save->unk_9f[i];
mUnk_09e[i] = save->unk_82[i];
}
- mQuiverSize = save->quiverSize;
- mBombBagSize = save->bombBagSize;
+ mQuiverSize = save->quiverSize;
+ mBombBagSize = save->bombBagSize;
mBombchuBagSize = save->bombchuBagSize;
- mEquippedFairy = save->equippedFairy;
+ mEquippedFairy = save->equippedFairy;
if (mEquippedFairy >= FairyId_COUNT) {
mEquippedFairy = FairyId_None;
}
@@ -120,7 +120,7 @@ ARM FairyId ItemManager::GetEquippedFairy() const {
return fairy;
}
-ARM ActorNavi* ItemManager::GetFairy(FairyId id) const {
+ARM ActorNavi *ItemManager::GetFairy(FairyId id) const {
return mFairies[id];
}
@@ -149,29 +149,29 @@ ARM void ItemManager::TickEquipItem(void) {
ARM void ItemManager::func_ov00_020ad528() {}
-ARM ItemModel* ItemManager::GetItemModel(ItemModelId id) {
+ARM ItemModel *ItemManager::GetItemModel(ItemModelId id) {
return mItemModels[id];
}
extern unk32 data_027e0fc4;
-extern "C" void* func_ov00_020bb3a8(unk32 param1, u32 index);
+extern "C" void *func_ov00_020bb3a8(unk32 param1, u32 index);
extern "C" void func_ov00_020c0bdc(void *param1, unk32 param2);
ARM void ItemManager::func_ov00_020ad538(unk32 param1) const {
- void* unk1 = func_ov00_020bb3a8(data_027e0fc4, 6);
+ void *unk1 = func_ov00_020bb3a8(data_027e0fc4, 6);
func_ov00_020c0bdc(unk1, param1);
}
ARM void ItemManager::func_ov00_020ad560(unk32 param1) const {
- void* unk1 = func_ov00_020bb3a8(data_027e0fc4, 7);
+ void *unk1 = func_ov00_020bb3a8(data_027e0fc4, 7);
func_ov00_020c0bdc(unk1, param1);
}
-ARM ItemModel* ItemManager::GetDungeonItemModel(u32 index) {
+ARM ItemModel *ItemManager::GetDungeonItemModel(u32 index) {
return mDungeonItemModels[index];
}
ARM void ItemManager::func_ov00_020ad594(unk32 param1) const {
- void* unk1 = func_ov00_020bb3a8(data_027e0fc4, 11);
+ void *unk1 = func_ov00_020bb3a8(data_027e0fc4, 11);
func_ov00_020c0bdc(unk1, param1);
}
@@ -190,7 +190,7 @@ ARM void ItemManager::EquipItem_vfunc_38(unk32 param1) {
this->Shield_vfunc_38(param1);
}
if (data_027e0d38->mUnk_14 == 1) return;
-
+
ItemFlag equip = this->GetEquippedItem();
if (equip == ItemFlag_None) return;
if (mEquipLoadTimer > 0) return;
@@ -198,23 +198,23 @@ ARM void ItemManager::EquipItem_vfunc_38(unk32 param1) {
(*mEquipItems)[equip]->vfunc_38(param1);
}
-ARM bool ItemManager::EquipItem_vfunc_3c(Vec4p *param1, ItemFlag equipId) {
- Vec4p result;
- if ((*mEquipItems)[equipId]->vfunc_3c(&result)) {
+ARM bool ItemManager::EquipCollidesWith(Cylinder *hitbox, ItemFlag equipId) {
+ Cylinder equipHitbox;
+ if ((*mEquipItems)[equipId]->GetHitbox(&equipHitbox)) {
s32 step = (*mEquipItems)[equipId]->vfunc_4c();
if (step > 0) {
- Approach_thunk(&result.y, param1->y, step);
+ Approach_thunk(&equipHitbox.pos.y, hitbox->pos.y, step);
}
- return func_01ffec34(param1, &result);
+ return hitbox->Overlaps(&equipHitbox);
}
return false;
}
-ARM void ItemManager::EquipItem_vfunc_2c(ItemFlag equipId) {
- (*mEquipItems)[equipId]->vfunc_2c();
+ARM s32 ItemManager::EquipItem_vfunc_2c(ItemFlag equipId) {
+ return (*mEquipItems)[equipId]->vfunc_2c();
}
-ARM EquipItem* ItemManager::GetEquipItem(ItemFlag equipId) {
+ARM EquipItem *ItemManager::GetEquipItem(ItemFlag equipId) {
if (equipId == ItemFlag_None) {
return NULL;
} else {
@@ -236,15 +236,10 @@ extern "C" unk32 func_ov00_02078b40(UnkStruct_027e0d38 *param1);
extern void *data_027e10a4;
extern "C" bool func_ov15_02136670(void *param1);
extern unk8 data_ov29_0217a4ac[];
-extern "C" bool _ZN10MapManager18func_ov00_020849f8Ei(void *param1);
-extern unk32 data_027e0fc8;
-extern "C" bool func_ov00_020bbd80(unk32 param1, unk32 param2);
+extern "C" bool _ZN14PlayerLinkBase18func_ov00_020bbd80Ei(unk32 param1, unk32 param2);
extern "C" bool _ZNK11ItemManager7HasItemEi();
extern "C" void _ZN11ItemManager12GetEquipItemEi();
-ARM bool NONMATCH(ItemManager::func_ov00_020ad790)(unk32 param1) {
- #ifndef NONMATCHING
- #include "../asm/ov00/Item/ItemManager_func_ov00_020ad790.inc"
- #else
+ARM bool ItemManager::func_ov00_020ad790(unk32 param1) {
unk32 unk1 = func_ov00_02078b40(data_027e0d38);
if (unk1 == 2) return func_ov15_02136670(data_027e10a4);
if (data_027e0d38->mUnk_14 == 1) return false;
@@ -252,24 +247,20 @@ ARM bool NONMATCH(ItemManager::func_ov00_020ad790)(unk32 param1) {
if (gOverlayManager.mLoadedOverlays[OverlayIndex_6] == OverlayId_29 && data_ov29_0217a4ac[0x54] != 0) {
return false;
}
-
+
ItemFlag equipId = mForcedItem;
- bool unk2 = !gMapManager->func_ov00_020849f8();
- if (
- mEquippedItem != ItemFlag_None &&
- (unk2 || (u32) mEquippedItem - 9 <= 1) &&
- (data_027e0fc8 == 0 || func_ov00_020bbd80(data_027e0fc8, param1)) &&
- this->HasItem(mEquippedItem)
- ) {
+ bool unk2 = !gMapManager->func_ov00_020849f8(equipId);
+ if (mEquippedItem != ItemFlag_None && (unk2 || (u32) mEquippedItem - 9 <= 1) &&
+ (gPlayerLink == 0 || gPlayerLink->func_ov00_020bbd80(param1)) && this->HasItem(mEquippedItem))
+ {
equipId = mEquippedItem;
}
-
+
if (equipId != ItemFlag_None) {
if (mEquipLoadTimer != 0) return param1 == 0;
return this->GetEquipItem(equipId)->IsUsable(param1);
}
return false;
- #endif
}
THUMB ShipType ItemManager::GetEquippedShipPart(ShipPart part) const {
@@ -308,7 +299,7 @@ THUMB u16 ItemManager::GetUnk_09e(u32 index) const {
THUMB s32 ItemManager::GetUnk_09e_Divided(u32 index) const {
q20 quotient = Divide(INT_TO_Q20(mUnk_09e[index]), FLOAT_TO_Q20(2.54));
- s32 result = ROUND_Q20(quotient);
+ s32 result = ROUND_Q20(quotient);
if (result < 1) result = 1;
return result;
}
@@ -323,7 +314,7 @@ THUMB void ItemManager::SetUnk_09e(u32 index, u16 value) {
}
}
-const u16 sQuiverSizes[] = {20, 20, 30, 50};
+const u16 sQuiverSizes[] = {20, 20, 30, 50};
const u16 sBombBagSizes[] = {10, 20, 30};
THUMB u16 ItemManager::GetMaxAmmo(ItemFlag equipId) const {
@@ -383,9 +374,10 @@ THUMB void ItemManager::RemoveItem(ItemFlag item) {
extern ItemModel **data_027e1058;
extern ItemModel **data_027e105c;
-extern "C" ItemModel* func_ov00_02079ffc(void*, const char *modelName, const char *textureName, unk32 param4, unk8 param5, unk8 param6, bool param7);
-extern "C" ItemModel* LoadTreasureItemFanfare(ItemModel**, s32 treasureType, bool, bool);
-static char *sDefaultItemModel = "key";
+extern "C" ItemModel *func_ov00_02079ffc(void *, const char *modelName, const char *textureName, unk32 param4, unk8 param5,
+ unk8 param6, bool param7);
+extern "C" ItemModel *LoadTreasureItemFanfare(ItemModel **, s32 treasureType, bool, bool);
+static char *sDefaultItemModel = "key";
static char *sItemModelNames[70] = {
[ItemId_Nothing] = "key",
[ItemId_SmallKey] = "key",
@@ -480,37 +472,24 @@ static char *sItemModelNames3[9] = {
[ItemId_Unk_135 - ItemId_CycloneSlate] = NULL,
};
char *sSpecialItemModelNames[7] = {
- "mapTakara\0\0",
- "arrowpodL\0\0",
- "bmbagL\0",
- "bcbagL\0",
- "Player/get/gd_\0",
- ".nsbmd\0",
- ".nsbtx\0",
+ "mapTakara\0\0", "arrowpodL\0\0", "bmbagL\0", "bcbagL\0", "Player/get/gd_\0", ".nsbmd\0", ".nsbtx\0",
};
THUMB void ItemManager::LoadFanfareItem(ItemId id) {
mFanfareItem = id;
-
+
ItemModel *model;
- if (
- id == ItemId_Unk_43 ||
- id == ItemId_Cannon ||
- (id >= ItemId_GOLDEN_SHIP_START && id <= ItemId_GOLDEN_SHIP_END) ||
- id == ItemId_Unk_126 ||
- id == ItemId_Unk_133
- ) {
+ if (id == ItemId_Unk_43 || id == ItemId_Cannon || (id >= ItemId_GOLDEN_SHIP_START && id <= ItemId_GOLDEN_SHIP_END) ||
+ id == ItemId_Unk_126 || id == ItemId_Unk_133)
+ {
model = *data_027e1058;
- } else if (
- id >= ItemId_TREASURE_START &&
- id <= ItemId_TREASURE_END
- ) {
+ } else if (id >= ItemId_TREASURE_START && id <= ItemId_TREASURE_END) {
model = LoadTreasureItemFanfare(data_027e105c, id - ItemId_TREASURE_START, true, false);
} else if (id == ItemId_Unk_125) {
model = *data_027e105c;
} else {
- char modelName[0x80] = {};
+ char modelName[0x80] = {};
char textureName[0x80] = {};
- const char *itemName = NULL;
+ const char *itemName = NULL;
if (id == ItemId_Quiver && (s32) mQuiverSize >= 1) {
itemName = sSpecialItemModelNames[1];
} else if (id == ItemId_BigBombBag && (s32) mBombBagSize >= 1) {
@@ -774,11 +753,11 @@ THUMB void ItemManager::GiveItem(ItemId id) {
break;
}
} break;
-
+
case ItemId_SandOfHours: {
mHourglassSandFrames += 3600;
} break;
-
+
case ItemId_GoldenChimney: {
gAdventureFlags->Set(AdventureFlag_ReceivedGoldenChimney, true);
GiveShipPart(ShipPart_Chimney, ShipType_Golden);
@@ -814,7 +793,7 @@ THUMB void ItemManager::GiveItem(ItemId id) {
case ItemId_Rupoor50: {
this->GiveRupees(-50, true);
} break;
-
+
case ItemId_Nothing: break;
case ItemId_Unk_5: break;
case ItemId_Unk_16: break;
@@ -827,11 +806,9 @@ THUMB void ItemManager::GiveItem(ItemId id) {
}
} break;
}
- if (
- gAdventureFlags->Get(AdventureFlag_Azurine) &&
- gAdventureFlags->Get(AdventureFlag_Crimsonine) &&
- gAdventureFlags->Get(AdventureFlag_Aquanine)
- ) {
+ if (gAdventureFlags->Get(AdventureFlag_Azurine) && gAdventureFlags->Get(AdventureFlag_Crimsonine) &&
+ gAdventureFlags->Get(AdventureFlag_Aquanine))
+ {
gAdventureFlags->Set(AdventureFlag_Unk_128, true);
}
}
@@ -841,7 +818,7 @@ THUMB void ItemManager::GiveEquipItem(ItemFlag item, u16 ammo) {
SET_FLAG(mItemFlags.flags, flag);
this->GetEquipItem(item)->GiveAmmo(ammo);
if (mEquippedItem == ItemFlag_None) {
- this->mEquippedItem = item;
+ this->mEquippedItem = item;
this->mEquipLoadTimer = 1;
}
}
@@ -898,8 +875,8 @@ ARM ItemFlag ItemManager::GetEquippedItem() const {
ARM bool ItemManager::SetEquippedItem(ItemFlag equipId) {
mPrevEquippedItem = mEquippedItem;
- mEquippedItem = equipId;
- mEquipLoadTimer = 2;
+ mEquippedItem = equipId;
+ mEquipLoadTimer = 2;
return true;
}
@@ -912,7 +889,7 @@ THUMB void ItemManager::ForceEquipItem(ItemFlag equipId) {
if (i == equipId) continue;
(*mEquipItems)[i - ItemFlag_EQUIP_START]->UpdateInUse(0);
}
- mForcedItem = equipId;
+ mForcedItem = equipId;
mEquipLoadTimer = 1;
}
@@ -966,12 +943,10 @@ ARM bool ItemManager::HasPotion(u32 index) const {
switch (mPotions[index]) {
case Potion_Red:
case Potion_Purple:
- case Potion_Yellow:
- return true;
-
+ case Potion_Yellow: return true;
+
case Potion_None:
- default:
- return false;
+ default: return false;
}
}
@@ -1032,7 +1007,7 @@ THUMB void ItemManager::PlayItemFanfareSfx(ItemId item) {
case ItemId_GoldRupee: {
sfx = SfxId_Fanfare_GoldRupee;
} break;
-
+
case ItemId_SmallKey:
case ItemId_GreenRupee:
case ItemId_BlueRupee:
@@ -1040,7 +1015,7 @@ THUMB void ItemManager::PlayItemFanfareSfx(ItemId item) {
sfx = SfxId_Fanfare_Rupee;
} break;
- case ItemId_Rupoor10:
+ case ItemId_Rupoor10:
case ItemId_Rupoor50: {
sfx = SfxId_Fanfare_Rupoor;
} break;
@@ -1053,13 +1028,14 @@ THUMB void ItemManager::PlayItemFanfareSfx(ItemId item) {
case ItemId_HeartContainer: {
sfx = SfxId_Fanfare_HeartContainer;
} break;
-
+
default: {
sfx = SfxId_Fanfare_Treasure;
} break;
}
if (gItemManager->mFanfareSfx != SfxId_None) {
sfx = gItemManager->mFanfareSfx;
+
gItemManager->mFanfareSfx = SfxId_None;
}
PlaySoundEffect(&data_ov00_020eec68, sfx);
diff --git a/src/00_Core/Map/Course.cpp b/src/00_Core/Map/Course.cpp
index 560169e8..4771048d 100644
--- a/src/00_Core/Map/Course.cpp
+++ b/src/00_Core/Map/Course.cpp
@@ -1,15 +1,13 @@
#include "Map/Course.hpp"
-#ifdef STUBS
-
void Course::GetDungeonProgress(CourseProgress *param_2) {}
void Course::func_ov00_0207ca28(s32 param_2, unk32 param_3, unk32 param_4) {}
-char* Course::SetCourseName(char *src) {}
+char *Course::SetCourseName(char *src) {}
void Course::func_ov00_0207ca78(unk32 param_2, unk8 param_3, unk32 param_4) {}
bool Course::func_ov00_0207caa8(s32 param_2, unk32 *param_3, unk8 *param_4) {}
unk32 Course::func_ov00_0207cb30(s32 param_2) {}
void Course::FindMapGridPos(Vec2b *pos, Course *param_2, u32 map) {}
-Vec3p* Course::FindMapCenter(unk32 map) {}
+Vec3p *Course::FindMapCenter(unk32 map) {}
void Course::func_ov00_0207cbe8(s32 param_2) {}
unk8 Course::func_ov00_0207cc24(s32 param_2) {}
unk32 Course::FindMapData_Unk_08(unk32 map) {}
@@ -49,7 +47,5 @@ void Course::SetMapDataFlag3(unk32 param_2, bool param_3) {}
bool Course::GetMapDataFlag3(unk32 param_2) {}
void Course::SetMapDataFlag4(unk32 param_2, unk32 param_3) {}
bool Course::GetMapDataFlag4(unk32 param_2) {}
-MapData* Course::FindMapData(u32 map) {}
-MapData* Course::FindCurrentMapData() {}
-
-#endif
+MapData *Course::FindMapData(u32 map) {}
+MapData *Course::FindCurrentMapData() {}
diff --git a/src/00_Core/Map/MapBase.cpp b/src/00_Core/Map/MapBase.cpp
index 5a5ed636..8d6d3c96 100644
--- a/src/00_Core/Map/MapBase.cpp
+++ b/src/00_Core/Map/MapBase.cpp
@@ -1,8 +1,6 @@
#include "Map/MapBase.hpp"
#include "Map/MapManager.hpp"
-#ifdef STUBS
-
MapBase::~MapBase() {}
MapBase_Unk_180::~MapBase_Unk_180() {}
void MapBase::SetBounds(unk32 map, unk32 course) {}
@@ -31,7 +29,7 @@ unk8 MapBase::func_ov00_0207e968() {}
unk8 MapBase::func_ov00_0207e96c() {}
unk8 MapBase::vfunc_6c(unk32 param_2, unk32 param_3, unk32 param_4) {}
unk32 MapBase::vfunc_70(Vec3p *param_2) {}
-s32* MapBase::vfunc_74(Vec3p *param_2) {}
+s32 *MapBase::vfunc_74(Vec3p *param_2) {}
unk8 MapBase::func_ov00_0207f100() {}
bool MapBase::func_ov00_0207f104(unk32 param_2, unk32 param_3) {}
unk32 MapBase::func_ov00_0207f1f4(Vec3p *param_2, unk32 *param_3) {}
@@ -76,7 +74,7 @@ unk8 MapBase::GetTriggerBoundingBoxes(unk32 param_2, AABB *param_3, unk32 param_
unk32 MapBase::GetOverlappingTrigger(Vec3p *param_2) {}
bool TriggerBase::Overlaps() {}
unk8 MapBase::FindTrigger(unk32 type) {}
-unk8 MapBase::GetOverlappingTriggers(Vec3p *param_2, TriggerBase * *triggers, unk32 capacity) {}
+unk8 MapBase::GetOverlappingTriggers(Vec3p *param_2, TriggerBase **triggers, unk32 capacity) {}
bool MapBase::IsTriggerTypeOverlapped(unk32 type, Vec3p *param_3) {}
bool MapBase::AnyTrigger_func_0c(unk32 type) {}
unk32 TriggerBase::vfunc_0c() {}
@@ -101,7 +99,7 @@ bool MapBase::func_ov00_02080824(unk32 param_2, unk32 param_3) {}
bool MapBase::AddUnk_130(unk32 param_2) {}
bool MapBase::func_ov00_020809b8(unk32 param_2) {}
unk8 MapBase::func_ov00_02080a78(Vec3p *param_2) {}
-void MapBase_Unk2::func_ov00_02080ad0(TriggerBase * *param_2, TriggerBase * *param_3) {}
+void MapBase_Unk2::func_ov00_02080ad0(TriggerBase **param_2, TriggerBase **param_3) {}
unk8 MapBase::func_ov00_02080b24(Vec2b *param_2) {}
void MapBase::func_ov00_02080d08(unk32 param_2) {}
void MapBase::vfunc_bc() {}
@@ -112,5 +110,3 @@ unk32 TriggerBase::vfunc_10() {}
void MapBase::func_ov00_02080de4() {}
unk8 MapBase::func_ov00_02080de8(unk32 param_2) {}
void MapBase::func_ov00_02080edc() {}
-
-#endif
diff --git a/src/00_Core/Map/MapManager.cpp b/src/00_Core/Map/MapManager.cpp
index 409dc9bd..3dc72153 100644
--- a/src/00_Core/Map/MapManager.cpp
+++ b/src/00_Core/Map/MapManager.cpp
@@ -1,7 +1,5 @@
#include "Map/MapManager.hpp"
-#ifdef STUBS
-
void MapManager::func_ov00_020820ec(unk32 *param_2) {}
void MapManager::func_ov00_020820fc(s32 param_2, unk32 param_3, unk32 param_4) {}
unk8 MapManager::func_ov00_0208210c(unk32 param_2, unk32 param_3) {}
@@ -19,7 +17,7 @@ unk8 MapManager::func_ov00_02082454(unk32 param_2, unk32 param_3) {}
unk8 MapManager::func_ov00_02082494(unk32 param_2) {}
unk8 MapManager::func_ov00_020824cc(unk32 param_2) {}
unk8 MapManager::func_ov00_02082504() {}
-unk8 * MapManager::func_ov00_02082538() {}
+unk8 *MapManager::func_ov00_02082538() {}
void MapManager::func_ov00_02082594() {}
void MapManager::func_ov00_020825ac() {}
s32 MapManager::GetCourseFilePath(char *courseName, char *buf) {}
@@ -41,7 +39,7 @@ bool MapManager::func_ov00_020828f8(s32 *param_2) {}
unk8 MapManager::GetCourseData_Unk_b0() {}
s32 MapManager::func_ov00_02082914(unk32 param_2) {}
unk8 MapManager::func_ov00_02082acc() {}
-unk32 * MapManager::func_ov00_02082adc() {}
+unk32 *MapManager::func_ov00_02082adc() {}
unk8 MapManager::func_ov00_02082af4() {}
bool MapManager::func_ov00_02082b3c(s32 param_2) {}
unk8 MapManager::func_ov00_02082d08() {}
@@ -129,7 +127,7 @@ unk8 MapManager::func_ov00_02083e34(unk8 param_2, unk8 param_3, unk32 param_4) {
unk8 MapManager::MapData_vfunc_60() {}
unk8 MapManager::func_ov00_02083e70() {}
unk8 MapManager::MapData_vfunc_68() {}
-void MapManager::func_ov00_02083ef8(Vec3p *param_2, Vec3p *param_3) {}
+s32 MapManager::func_ov00_02083ef8(Vec3p *param_2, Vec3p *param_3, unk32 param_4) {}
void MapManager::func_ov00_02083f44(Vec3p *param_2) {}
unk8 MapManager::MapData_vfunc_6c() {}
unk8 MapManager::MapData_vfunc_70() {}
@@ -198,7 +196,7 @@ unk8 MapManager::func_ov00_020858b0() {}
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) {}
-bool MapManager::func_ov00_02086284(s32 *param_2, Vec3p *param_3, Vec3p *param_4, s32 param_5, u16 param_6, Vec3p *param_7, Vec3p *param_8) {}
-bool MapManager::func_ov00_02086a84(s32 *param_2, Vec3p *param_3, Vec3p *param_4, s32 param_5, s32 param_6, unk32 param_7, Vec3p *param_8, Vec3p *param_9) {}
-
-#endif
+bool MapManager::func_ov00_02086284(s32 *param_2, Vec3p *param_3, Vec3p *param_4, s32 param_5, u16 param_6, Vec3p *param_7,
+ Vec3p *param_8) {}
+bool MapManager::func_ov00_02086a84(s32 *param_2, Vec3p *param_3, Vec3p *param_4, s32 param_5, s32 param_6, unk32 param_7,
+ Vec3p *param_8, Vec3p *param_9) {}
diff --git a/src/00_Core/Player/LinkStateBase.cpp b/src/00_Core/Player/LinkStateBase.cpp
index 482a8371..7479667e 100644
--- a/src/00_Core/Player/LinkStateBase.cpp
+++ b/src/00_Core/Player/LinkStateBase.cpp
@@ -1,7 +1,5 @@
#include "Player/LinkStateBase.hpp"
-#ifdef STUBS
-
void LinkStateBase::vfunc_00() {}
void LinkStateBase::OnStateEnter() {}
void LinkStateBase::OnStateLeave(s32 param1) {}
@@ -16,7 +14,7 @@ void LinkStateBase::ChangeLinkSubState(LinkStateId id, s32 subState) {}
void LinkStateBase::EquipItem_vfunc_28() {}
void LinkStateBase::UpdateSwordShieldInUse() {}
void LinkStateBase::func_ov00_020a81b8(unk32 param1, unk32 param2) {}
-LinkStateItem* LinkStateBase::GetLinkItemState() {}
+LinkStateItem *LinkStateBase::GetLinkItemState() {}
void LinkStateBase::LookAt(Vec3p *target) {}
void LinkStateBase::func_ov00_020a81fc() {}
void LinkStateBase::AddHealth(s16 amount) {}
@@ -59,31 +57,29 @@ bool LinkStateBase::HasFlags_PlayerLinkBase_Unk48(u16 flags) {}
unk8 LinkStateBase::Get_PlayerLinkBase_Unk5e() {}
unk32 LinkStateBase::Get_PlayerControlData_Unk004() {}
PlayerCharacter LinkStateBase::GetCurrentCharacter() {}
-PlayerControlData* LinkStateBase::GetPlayerControlData() {}
+PlayerControlData *LinkStateBase::GetPlayerControlData() {}
LinkStateId LinkStateBase::GetStateId() {}
s32 LinkStateBase::GetHealth() {}
s32 LinkStateBase::GetCurrentCharacterHealth() {}
bool LinkStateBase::func_ov00_020a8c34() {}
-Vec3p* LinkStateBase::GetPlayerPos() {}
-Vec3p* LinkStateBase::GetPlayerVel() {}
-unk8* LinkStateBase::func_ov00_020a8c64() {}
-s16* LinkStateBase::GetPlayerAngle() {}
-void* LinkStateBase::GetPlayer_Unk18() {}
+Vec3p *LinkStateBase::GetPlayerPos() {}
+Vec3p *LinkStateBase::GetPlayerVel() {}
+unk8 *LinkStateBase::func_ov00_020a8c64() {}
+s16 *LinkStateBase::GetPlayerAngle() {}
+void *LinkStateBase::GetPlayer_Unk18() {}
s32 LinkStateBase::Get_PlayerControlData_Unk32() {}
-Actor* LinkStateBase::GetGrabActor() {}
-ActorRef* LinkStateBase::GetGrabActorRef() {}
+Actor *LinkStateBase::GetGrabActor() {}
+ActorRef *LinkStateBase::GetGrabActorRef() {}
unk32 LinkStateBase::Grab() {}
s32 LinkStateBase::Get_PlayerLinkBase_Unk44() {}
bool LinkStateBase::IsEquipBeingUsed(ItemFlag id) {}
-EquipItem* LinkStateBase::GetEquipItem(ItemFlag id) {}
-void* LinkStateBase::func_ov00_020a8d40() {}
+EquipItem *LinkStateBase::GetEquipItem(ItemFlag id) {}
+void *LinkStateBase::func_ov00_020a8d40() {}
unk32 LinkStateBase::func_ov00_020a8d50() {}
unk32 LinkStateBase::func_ov00_020a8d6c() {}
s32 LinkStateBase::PlayerControlData_vfunc_14(s32 param1) {}
unk32 LinkStateBase::Get_PlayerControlData_Unk100() {}
unk32 LinkStateBase::Get_PlayerControlData_Unk120() {}
s32 LinkStateBase::Get_PlayerLinkBase_Unk38() {}
-DebugHierarchy* LinkStateBase::GetDebugHierarchy0() {}
-DebugHierarchy* LinkStateBase::GetDebugHierarchy1() {}
-
-#endif
+DebugHierarchy *LinkStateBase::GetDebugHierarchy0() {}
+DebugHierarchy *LinkStateBase::GetDebugHierarchy1() {}
diff --git a/src/00_Core/Player/LinkStateDamage.cpp b/src/00_Core/Player/LinkStateDamage.cpp
index 84674461..c544b154 100644
--- a/src/00_Core/Player/LinkStateDamage.cpp
+++ b/src/00_Core/Player/LinkStateDamage.cpp
@@ -1,7 +1,5 @@
#include "Player/LinkStateDamage.hpp"
-#ifdef STUBS
-
void LinkStateDamage::vfunc_00() {}
void LinkStateDamage::CreateDebugHierarchy() {}
void LinkStateDamage::OnStateEnter() {}
@@ -16,5 +14,3 @@ bool LinkStateDamage::vfunc_24(s32 param1) {}
bool LinkStateDamage::vfunc_20(s32 param1) {}
void LinkStateDamage::func_ov00_020acfe8(bool param1) {}
LinkStateId LinkStateDamage::GetId() {}
-
-#endif
diff --git a/src/00_Core/Player/LinkStateFollow.cpp b/src/00_Core/Player/LinkStateFollow.cpp
index 54e87938..4ffbb0a4 100644
--- a/src/00_Core/Player/LinkStateFollow.cpp
+++ b/src/00_Core/Player/LinkStateFollow.cpp
@@ -1,16 +1,12 @@
#include "Player/LinkStateFollow.hpp"
-#ifdef STUBS
-
void LinkStateFollow::vfunc_00() {}
LinkStateId LinkStateFollow::GetId() {}
void LinkStateFollow::MoveTowardTarget() {}
void LinkStateFollow::OnStateLeave(s32 param1) {}
bool LinkStateFollow::vfunc_24(s32 param1) {}
bool LinkStateFollow::vfunc_28() {}
-LinkStateCutscene* LinkStateFollow::GetLinkStateCutscene() {}
+LinkStateCutscene *LinkStateFollow::GetLinkStateCutscene() {}
bool LinkStateFollow::vfunc_34(Vec3p *param1) {}
bool LinkStateFollow::func_ov00_020a9180(Vec3p *param1) {}
bool LinkStateFollow::func_ov00_020a9210(Vec3p *param1, Actor *param2) {}
-
-#endif
diff --git a/src/00_Core/Player/LinkStateInteract.cpp b/src/00_Core/Player/LinkStateInteract.cpp
index a3a7ddca..cf71654d 100644
--- a/src/00_Core/Player/LinkStateInteract.cpp
+++ b/src/00_Core/Player/LinkStateInteract.cpp
@@ -1,7 +1,5 @@
#include "Player/LinkStateInteract.hpp"
-#ifdef STUBS
-
void LinkStateInteract::vfunc_00() {}
LinkStateId LinkStateInteract::GetId() {}
void LinkStateInteract::CreateDebugHierarchy() {}
@@ -11,7 +9,7 @@ void LinkStateInteract::OnStateLeave(s32 param1) {}
bool LinkStateInteract::func_ov00_020aa818() {}
void LinkStateInteract::func_ov00_020aa844(Actor *param1) {}
bool LinkStateInteract::vfunc_20(s32 param1) {}
-LinkStateRoll* LinkStateInteract::GetLinkStateRoll() {}
+LinkStateRoll *LinkStateInteract::GetLinkStateRoll() {}
bool LinkStateInteract::vfunc_24(s32 param1) {}
bool LinkStateInteract::vfunc_34(Vec3p *param1) {}
void LinkStateInteract::SetGrabActorVelocity(Vec3p *velocity) {}
@@ -30,5 +28,3 @@ void LinkStateInteract::func_ov00_020abbdc(ActorRef *ref) {}
void LinkStateInteract::func_ov00_020abc18(ActorRef *ref) {}
bool LinkStateInteract::func_ov00_020abc40() {}
bool LinkStateInteract::func_ov00_020abc78(ActorRef *ref) {}
-
-#endif
diff --git a/src/00_Core/Player/LinkStateItem.cpp b/src/00_Core/Player/LinkStateItem.cpp
index 1faf16ab..ecedca78 100644
--- a/src/00_Core/Player/LinkStateItem.cpp
+++ b/src/00_Core/Player/LinkStateItem.cpp
@@ -1,14 +1,10 @@
#include "Player/LinkStateItem.hpp"
-#ifdef STUBS
-
void LinkStateItem::vfunc_00() {}
LinkStateId LinkStateItem::GetId() {}
s32 LinkStateItem::IsHammerEquipped() {}
void LinkStateItem::OnStateLeave(s32 param1) {}
-EquipBombchu* LinkStateItem::GetEquipBombchu() {}
-LinkStateMove* LinkStateItem::GetLinkStateMove() {}
+EquipBombchu *LinkStateItem::GetEquipBombchu() {}
+LinkStateMove *LinkStateItem::GetLinkStateMove() {}
bool LinkStateItem::func_ov00_020abf70() {}
bool LinkStateItem::vfunc_28() {}
-
-#endif
diff --git a/src/00_Core/Player/LinkStateMove.cpp b/src/00_Core/Player/LinkStateMove.cpp
index 586a331e..918a92fe 100644
--- a/src/00_Core/Player/LinkStateMove.cpp
+++ b/src/00_Core/Player/LinkStateMove.cpp
@@ -1,7 +1,5 @@
#include "Player/LinkStateMove.hpp"
-#ifdef STUBS
-
void LinkStateMove::vfunc_00() {}
LinkStateId LinkStateMove::GetId() {}
void LinkStateMove::CreateDebugHierarchy() {}
@@ -10,5 +8,3 @@ void LinkStateMove::OnStateLeave(s32 param1) {}
bool LinkStateMove::vfunc_24(s32 param1) {}
bool LinkStateMove::func_ov00_020a8f2c() {}
bool LinkStateMove::func_ov00_020a8f4c() {}
-
-#endif
diff --git a/src/00_Core/Player/LinkStateRoll.cpp b/src/00_Core/Player/LinkStateRoll.cpp
index d6a93463..91044e21 100644
--- a/src/00_Core/Player/LinkStateRoll.cpp
+++ b/src/00_Core/Player/LinkStateRoll.cpp
@@ -1,7 +1,5 @@
#include "Player/LinkStateRoll.hpp"
-#ifdef STUBS
-
void LinkStateRoll::vfunc_00() {}
LinkStateId LinkStateRoll::GetId() {}
void LinkStateRoll::CreateDebugHierarchy() {}
@@ -12,5 +10,3 @@ bool LinkStateRoll::vfunc_24(s32 param1) {}
void LinkStateRoll::func_ov00_020aee58(s16 param1, u16 param2) {}
void LinkStateRoll::func_ov00_020aee84() {}
bool LinkStateRoll::func_ov00_020aeeac() {}
-
-#endif
diff --git a/src/00_Core/Player/PlayerBase.cpp b/src/00_Core/Player/PlayerBase.cpp
index 24619493..a33dc210 100644
--- a/src/00_Core/Player/PlayerBase.cpp
+++ b/src/00_Core/Player/PlayerBase.cpp
@@ -1,24 +1,20 @@
-#include "Player/PlayerLinkBase.hpp"
-
-#ifdef STUBS
+#include "Player/PlayerBase.hpp"
bool PlayerBase::vfunc_04() {}
ItemFlag PlayerBase::GetEquipId() {}
bool PlayerBase::CanMove() {}
void PlayerBase::SetUpdatePos(bool updatePos) {}
void PlayerBase::SetVisible(bool visible) {}
-EquipSword* PlayerBase::GetEquipSword() {}
-EquipShield* PlayerBase::GetEquipShield() {}
+EquipSword *PlayerBase::GetEquipSword() {}
+EquipShield *PlayerBase::GetEquipShield() {}
void PlayerBase::LookAt(Vec3p *target) {}
bool PlayerBase::func_ov00_020a7c00(s32 param1) {}
-bool PlayerBase::func_ov00_020a7c1c(Cylinder *cylinder) {}
+bool PlayerBase::CollidesWith(Cylinder *cylinder) {}
bool PlayerBase::func_ov00_020a7c60(Vec3p *param1, Vec3p *param2, s32 param3) {}
-void PlayerBase::EquipItem_vfunc_3c(Cylinder *cylinder, ItemFlag equipId) {}
-void PlayerBase::EquipItem_vfunc_2c() {}
+bool PlayerBase::EquipCollidesWith(Cylinder *cylinder, ItemFlag equipId) {}
+s32 PlayerBase::EquipItem_vfunc_2c() {}
void PlayerBase::SetHealth(s16 health) {}
void PlayerBase::AddHealth(s16 amount) {}
bool PlayerBase::Teleport(Vec3p *pos, s16 angle, unk32 param3, bool param4, bool param5) {}
bool PlayerBase::TeleportToEntrance(unk32 entranceId, bool param2) {}
bool PlayerBase::TeleportToLastEntrance(bool param1) {}
-
-#endif
diff --git a/src/00_Core/Player/PlayerControl.cpp b/src/00_Core/Player/PlayerControl.cpp
index 48c52e7a..6cf39bda 100644
--- a/src/00_Core/Player/PlayerControl.cpp
+++ b/src/00_Core/Player/PlayerControl.cpp
@@ -1,12 +1,10 @@
#include "Player/PlayerControl.hpp"
-#ifdef STUBS
-
bool PlayerControl::func_ov00_020aeeac() {}
void PlayerControl::func_ov00_020aeef8() {}
void PlayerControl::func_ov00_020aef30() {}
void PlayerControl::UpdateAim() {}
-Actor* PlayerControl::GetFollowActor() {}
+Actor *PlayerControl::GetFollowActor() {}
bool PlayerControl::func_ov00_020af01c(unk8 *param1) {}
void PlayerControl::SetUnk_80() {}
void PlayerControl::StopFollowing() {}
@@ -52,5 +50,3 @@ bool PlayerControl::IsNotTouching() {}
bool PlayerControl::IsTouchingFast() {}
bool PlayerControl::IsTappedNow() {}
bool PlayerControl::func_ov00_020b13c4() {}
-
-#endif
diff --git a/src/00_Core/Player/TouchControl.cpp b/src/00_Core/Player/TouchControl.cpp
index df8bbfe0..5cae75a5 100644
--- a/src/00_Core/Player/TouchControl.cpp
+++ b/src/00_Core/Player/TouchControl.cpp
@@ -1,7 +1,5 @@
#include "Player/TouchControl.hpp"
-#ifdef STUBS
-
TouchControl::TouchControl() {}
void TouchControl::IncreaseSpeed(s16 increase) {}
void TouchControl::UpdateFlags(u16 speed) {}
@@ -11,5 +9,3 @@ bool TouchControl::func_ov00_0207aeac() {}
void TouchControl::UpdateConditionally(TouchState *state, u16 speed) {}
void TouchControl::func_ov00_0207af38(u16 speed, bool param2) {}
TouchControl::~TouchControl() {}
-
-#endif
diff --git a/src/00_Core/Player/TouchGesture.cpp b/src/00_Core/Player/TouchGesture.cpp
index 83879415..027e3e0a 100644
--- a/src/00_Core/Player/TouchGesture.cpp
+++ b/src/00_Core/Player/TouchGesture.cpp
@@ -1,7 +1,5 @@
#include "Player/TouchGesture.hpp"
-#ifdef STUBS
-
TouchGesture::TouchGesture() {}
void TouchGesture::ResetTouchHistory() {}
void TouchGesture::Update(void *param1) {}
@@ -9,5 +7,3 @@ TouchGesture::~TouchGesture() {}
void TouchGestureBase::ResetTouchHistory() {}
TouchGestureBase::~TouchGestureBase() {}
-
-#endif STUBS
diff --git a/src/00_Core/Save/AdventureFlags.cpp b/src/00_Core/Save/AdventureFlags.cpp
index dd05dff6..03bb6c76 100644
--- a/src/00_Core/Save/AdventureFlags.cpp
+++ b/src/00_Core/Save/AdventureFlags.cpp
@@ -1,7 +1,5 @@
#include "Save/AdventureFlags.hpp"
-#ifdef STUBS
-
bool AdventureFlags::Exists() {}
void AdventureFlags::CopyTo(unk32 *flags) {}
void AdventureFlags::func_ov00_02097674() {}
@@ -34,14 +32,14 @@ unk32 AdventureFlags::Get_FlagsUnk_44(int index) {}
unk32 AdventureFlags::Get_FlagsUnk_30(int index) {}
bool AdventureFlags::Get_FlagsUnk_00(int index, FlagsUnk2 *result) {}
bool AdventureFlags::Get_FlagsUnk_18(int index, FlagsUnk2 *result) {}
-FlagsUnk* AdventureFlags::Get_FlagsUnk(int index) {}
+FlagsUnk *AdventureFlags::Get_FlagsUnk(int index) {}
bool AdventureFlags::func_ov00_02097e6c() {}
bool AdventureFlags::func_ov00_02097e7c() {}
bool AdventureFlags::func_ov00_02097ea4() {}
unk32 AdventureFlags::func_ov00_02097ecc() {}
-void* AdventureFlags::func_ov00_02097f8c() {}
-void* AdventureFlags::func_ov00_02097fac() {}
-void* AdventureFlags::func_ov00_02097fd0() {}
+void *AdventureFlags::func_ov00_02097f8c() {}
+void *AdventureFlags::func_ov00_02097fac() {}
+void *AdventureFlags::func_ov00_02097fd0() {}
void AdventureFlags::func_ov00_02097ff4(bool param1, bool param2) {}
unk32 AdventureFlags::func_ov00_02098058() {}
bool AdventureFlags::func_ov00_02098064(unk32 param1) {}
@@ -50,5 +48,3 @@ bool AdventureFlags::func_ov00_0209809c() {}
bool AdventureFlags::func_ov00_020980ac() {}
void AdventureFlags::func_ov00_020980bc(s32 param1) {}
void AdventureFlags::func_ov00_020980d0() {}
-
-#endif
diff --git a/src/14_Land/Actor/ActorRupee.cpp b/src/14_Land/Actor/ActorRupee.cpp
index c7605af0..5f55847f 100644
--- a/src/14_Land/Actor/ActorRupee.cpp
+++ b/src/14_Land/Actor/ActorRupee.cpp
@@ -2,24 +2,23 @@
#include "Item/ItemManager.hpp"
#include "Map/MapManager.hpp"
-
// char* data_ov14_021589b4 = *data_ov14_02158994;
extern "C" {
void func_01ff9bc4(Vec3p *a, Vec3p *b, Vec3p *sum);
- u32 func_01fffd04(void*, u32);
+ u32 func_01fffd04(void *, u32);
bool func_ov00_020c313c();
void func_ov00_0207a1c8(bool *param_1, bool param_2, Vec3p *param_3);
void func_0202bc38(unk32 param_1, Vec3p *param_2, u32 param_3, Actor_UnkStruct_012 *param_4, bool);
- void func_ov05_02102c2c(u32* param_1, int param_2, Vec3p *param_3, int param_4, int param_5,
- u32 param_6, int param_7, char param_8, char param_9, char param_10);
- void func_ov00_020d7ad4(u32* param1, u32 param2);
+ void func_ov05_02102c2c(u32 *param_1, int param_2, Vec3p *param_3, int param_4, int param_5, u32 param_6, int param_7,
+ char param_8, char param_9, char param_10);
+ void func_ov00_020d7ad4(u32 *param1, u32 param2);
u16 func_ov00_020c5a24(RupeeId id); // GetRupeeValue
- bool func_ov00_020bce48(PlayerLinkBase* implicit, ItemId cutsceneItemId);
- void func_ov00_0207a13c(Actor_UnkStruct_012* implicit);
+ bool func_ov00_020bce48(PlayerLinkBase *implicit, ItemId cutsceneItemId);
+ void func_ov00_0207a13c(Actor_UnkStruct_012 *implicit);
void _ZN5ActorD2Ev();
void _ZN9SysObjectdlEPv();
- ActorRupee* _ZN5ActorC2Ev(ActorRupee *thisx);
+ ActorRupee *_ZN5ActorC2Ev(ActorRupee *thisx);
void _ZN10ActorRupeeD2Ev();
u32 data_ov14_021589b4;
@@ -27,34 +26,34 @@ extern "C" {
u32 data_ov14_021589d8;
}
-/* inline */ char *data_ov14_02158994[8] = { "brg", "fnl", "pdl", "dco", "can", "hul", "bow", "anc" }; // gShipParts
-extern "C" void* _ZTV10ActorRupee = _ZN10ActorRupeeD2Ev;
+/* inline */ char *data_ov14_02158994[8] = {"brg", "fnl", "pdl", "dco", "can", "hul", "bow", "anc"}; // gShipParts
+extern "C" void *_ZTV10ActorRupee = _ZN10ActorRupeeD2Ev;
extern u32 data_ov00_020e9370[];
extern u32 data_ov00_020eec9c[];
extern PlayerLinkBase *data_027e0fc8; // gPlayerLink
extern u32 **data_027e0fe0[];
-ActorType ActorRupee::gType = ActorType(ActorTypeId_Rupee, (ActorCreateFunc)ActorRupee::Create, NULL);
+ActorType ActorRupee::gType = ActorType(ActorTypeId_Rupee, (ActorCreateFunc) ActorRupee::Create, NULL);
ActorType_UnkClass data_ov14_021589f4 = ActorType_UnkClass(0x3bb, 0xeeb);
// #pragma section pinit begin
// extern "C" void* data_ov14_0215591c = func_ov14_0215517c;
// #pragma section pinit end
-ActorRupee* ActorRupee::Create() {
- ActorRupee* newRupee = new(*data_027e0fe0[0], 4) ActorRupee();
+ActorRupee *ActorRupee::Create() {
+ ActorRupee *newRupee = new(*data_027e0fe0[0], 4) ActorRupee();
return newRupee;
}
-extern "C" asm ActorRupee* _ZN10ActorRupeeC1Ev(ActorRupee *thisx) {
+extern "C" asm ActorRupee *_ZN10ActorRupeeC1Ev(ActorRupee *thisx) {
#ifndef NONMATCHING
#include "../../../asm/ov14/Actor/ActorRupee_ActorRupee.inc"
#else
_ZN5ActorC2Ev(thisx);
_ZTV10ActorRupee = thisx;
- thisx->mRupeeId = 8;
- thisx->mUnk_15c = 0;
+ thisx->mRupeeId = 8;
+ thisx->mUnk_15c = 0;
return thisx;
#endif
}
@@ -74,9 +73,9 @@ extern "C" void _ZN10ActorRupee8vfunc_60Ev();
extern "C" void _ZN10ActorRupee8vfunc_64Ev();
extern "C" u32 data_027e0764[];
bool NONMATCH(ActorRupee::vfunc_08)() {
- #ifndef NONMATCHING
+#ifndef NONMATCHING
#include "../../../asm/ov14/Actor/ActorRupee_vfunc_08.inc"
- #else
+#else
u32 *puVar2; // undefined
u32 uVar4;
u32 dVar5;
@@ -91,28 +90,28 @@ bool NONMATCH(ActorRupee::vfunc_08)() {
mRupeeId = mUnk_020.mUnk_00[0];
dVar5 = func_ov14_0213b70c(mRupeeId) ? data_ov14_021589d8[0] : FLOAT_TO_Q20(0.666);
- iVar7 = (s32)dVar5 >> 1;
-
- mHitbox.pos.x = 0;
- mHitbox.pos.y = iVar7;
- mHitbox.pos.z = 0;
- mHitbox.size = iVar7;
- mUnk_08c.pos = mHitbox.pos;
- mUnk_08c.size = mHitbox.size;
+ iVar7 = (s32) dVar5 >> 1;
+
+ mHitbox.pos.x = 0;
+ mHitbox.pos.y = iVar7;
+ mHitbox.pos.z = 0;
+ mHitbox.size = iVar7;
+ mUnk_08c.pos = mHitbox.pos;
+ mUnk_08c.size = mHitbox.size;
mUnk_0a4.mUnk_04.x = 0;
mUnk_0a4.mUnk_04.y = iVar7;
mUnk_0a4.mUnk_04.z = 0;
- mUnk_0a4.mUnk_10 = iVar7 + FLOAT_TO_Q20(1.0);
+ mUnk_0a4.mUnk_10 = iVar7 + FLOAT_TO_Q20(1.0);
mUnk_09c.mUnk_0 &= 0xFFFFFF4F;
mUnk_09c.mUnk_3 = 1;
- mMaxFall = mUnk_08c.size - 1;
+ mMaxFall = mUnk_08c.size - 1;
puVar2 = data_027e0764;
if (mUnk_03c >= 0) {
func_ov14_0213b204(1);
} else {
- switch(mUnk_144) {
+ switch (mUnk_144) {
case 0:
mVel.x = 0;
mVel.y = 0;
@@ -123,50 +122,39 @@ bool NONMATCH(ActorRupee::vfunc_08)() {
uVar8 = PTR_DWORD_overlay_d_14__0213b108[8];
uVar4 = PTR_DWORD_overlay_d_14__0213b108[uVar8];
- uVar9 = PTR_DWORD_overlay_d_14__0213b108[16];
- iVar7 = PTR_DWORD_overlay_d_14__0213b108[12];
+ uVar9 = PTR_DWORD_overlay_d_14__0213b108[16];
+ iVar7 = PTR_DWORD_overlay_d_14__0213b108[12];
uVar11 = uVar9 + uVar4;
iVar12 = PTR_DWORD_overlay_d_14__0213b108[20];
- uVar6 = (u64)uVar11 * (u64)uVar8;
- uVar10 = (
- iVar12
- + (iVar7 * PTR_DWORD_overlay_d_14__0213b108[0])
- + (uVar8 * PTR_DWORD_overlay_d_14__0213b108[4])
- + ((uVar4) >> 0x20)
+ uVar6 = (u64) uVar11 * (u64) uVar8;
+ uVar10 = (iVar12 + (iVar7 * PTR_DWORD_overlay_d_14__0213b108[0]) +
+ (uVar8 * PTR_DWORD_overlay_d_14__0213b108[4]) + ((uVar4) >> 0x20)
// + CARRY4(uVar9, uVar4)
);
- uVar4 = uVar9 + uVar6;
+ uVar4 = uVar9 + uVar6;
PTR_DWORD_overlay_d_14__0213b108[0] = uVar11;
- puVar2[4] = uVar10;
+ puVar2[4] = uVar10;
puVar2[0] = uVar4;
- uVar6 = (
- iVar12
- + (iVar7 * uVar11)
- + (uVar8 * uVar10)
- + ((u64)uVar11 * (FP_1(uVar8) >> 0x20))
+ uVar6 = (iVar12 + (iVar7 * uVar11) + (uVar8 * uVar10) + ((u64) uVar11 * (FP_1(uVar8) >> 0x20))
// + CARRY4(uVar9, uVar6)
);
- uVar11 = uVar4 * uVar8;
+ uVar11 = uVar4 * uVar8;
PTR_DWORD_overlay_d_14__0213b108[4] = uVar6;
- puVar2 = PTR_DWORD_overlay_d_14__0213b108;
- uVar4 = (
- iVar12
- + (iVar7 * uVar4)
- + (uVar8 * uVar6)
- + ((u64)uVar4 * (FP_1(uVar8) >> 0x20))
+ puVar2 = PTR_DWORD_overlay_d_14__0213b108;
+ uVar4 = (iVar12 + (iVar7 * uVar4) + (uVar8 * uVar6) + ((u64) uVar4 * (FP_1(uVar8) >> 0x20))
// + CARRY4(uVar9, uVar11)
);
PTR_DWORD_overlay_d_14__0213b108[0] = uVar9 + uVar11;
- puVar2[4] = uVar4;
+ puVar2[4] = uVar4;
- mVel.x = (s32)((u64)uVar4 * FLOAT_TO_Q20(0.1335) >> 0x20) - FLOAT_TO_Q20(0.0666);
- mVel.y = (s32)((u64)uVar6 * FLOAT_TO_Q20(0.2) >> 0x20) + FLOAT_TO_Q20(0.3333);
- mVel.z = (s32)((u64)uVar10 * FLOAT_TO_Q20(0.1335) >> 0x20) - FLOAT_TO_Q20(0.0666);
+ mVel.x = (s32) ((u64) uVar4 * FLOAT_TO_Q20(0.1335) >> 0x20) - FLOAT_TO_Q20(0.0666);
+ mVel.y = (s32) ((u64) uVar6 * FLOAT_TO_Q20(0.2) >> 0x20) + FLOAT_TO_Q20(0.3333);
+ mVel.z = (s32) ((u64) uVar10 * FLOAT_TO_Q20(0.1335) >> 0x20) - FLOAT_TO_Q20(0.0666);
func_ov14_0213b204(0);
break;
case 2:
@@ -175,14 +163,12 @@ bool NONMATCH(ActorRupee::vfunc_08)() {
mVel.z = 0;
func_ov14_0213b204(0);
break;
- case 3:
- func_ov14_0213b204(5);
- break;
+ case 3: func_ov14_0213b204(5); break;
}
}
return true;
- #endif
+#endif
}
bool ActorRupee::vfunc_60() {
@@ -214,32 +200,23 @@ void ActorRupee::Move() {
ItemId ActorRupee::GetRupeeCutsceneItemId() {
switch (mRupeeId) {
- case RupeeId_Green:
- return ItemId_None;
+ case RupeeId_Green: return ItemId_None;
- case RupeeId_Blue:
- return ItemId_None;
+ case RupeeId_Blue: return ItemId_None;
- case RupeeId_Red:
- return ItemId_None;
+ case RupeeId_Red: return ItemId_None;
- case RupeeId_BigGreen:
- return ItemId_BigGreenRupee;
+ case RupeeId_BigGreen: return ItemId_BigGreenRupee;
- case RupeeId_BigRed:
- return ItemId_BigRedRupee;
+ case RupeeId_BigRed: return ItemId_BigRedRupee;
- case RupeeId_Gold:
- return ItemId_GoldRupee;
+ case RupeeId_Gold: return ItemId_GoldRupee;
- case RupeeId_Rupoor10:
- return ItemId_Rupoor10;
+ case RupeeId_Rupoor10: return ItemId_Rupoor10;
- case RupeeId_Rupoor50:
- return ItemId_Rupoor50;
+ case RupeeId_Rupoor50: return ItemId_Rupoor50;
- default:
- break;
+ default: break;
}
return ItemId_None;
@@ -247,9 +224,7 @@ ItemId ActorRupee::GetRupeeCutsceneItemId() {
void ActorRupee::func_ov14_0213b204(unk32 param1) {
switch (param1) {
- case 0:
- mVisible = true;
- break;
+ case 0: mVisible = true; break;
case 1:
case 2:
case 3:
@@ -262,10 +237,10 @@ void ActorRupee::func_ov14_0213b204(unk32 param1) {
}
mActiveFrames = 0;
- mUnk_130 = param1;
+ mUnk_130 = param1;
}
-extern "C" void _ZN11ItemManager10GiveRupeesEsb(ItemManager* implicit, u16 amount, unk32 param2);
+extern "C" void _ZN11ItemManager10GiveRupeesEsb(ItemManager *implicit, u16 amount, unk32 param2);
void ActorRupee::Update(bool param1) {
ItemId cutsceneItemId;
s32 uVar3;
@@ -280,29 +255,22 @@ void ActorRupee::Update(bool param1) {
cutsceneItemId = GetRupeeCutsceneItemId();
if (cutsceneItemId >= 0) {
- if (/*data_027e0fc8->*/func_ov00_020bce48(data_027e0fc8, cutsceneItemId)) {
+ if (/*data_027e0fc8->*/ func_ov00_020bce48(data_027e0fc8, cutsceneItemId)) {
Kill();
} else {
func_ov14_0213b204(3);
}
} else {
- ItemManager* pItem = gItemManager;
- rupeeValue = func_ov00_020c5a24(mRupeeId);
+ ItemManager *pItem = gItemManager;
+ rupeeValue = func_ov00_020c5a24(mRupeeId);
pItem->GiveRupees(rupeeValue, false); // giverupees
uVar3 = -1;
switch (mRupeeId) {
- case RupeeId_Green:
- uVar3 = 0xfa;
- break;
- case RupeeId_Blue:
- uVar3 = 0xfb;
- break;
- case RupeeId_Red:
- uVar3 = 0xfc;
- break;
- default:
- break;
+ case RupeeId_Green: uVar3 = 0xfa; break;
+ case RupeeId_Blue: uVar3 = 0xfb; break;
+ case RupeeId_Red: uVar3 = 0xfc; break;
+ default: break;
}
func_ov00_020d7ad4(data_ov00_020eec9c, uVar3);
@@ -332,8 +300,8 @@ void ActorRupee::Update(bool param1) {
}
break;
case 3:
- PlayerLinkBase* pLink = data_027e0fc8;
- if (/*pLink->*/func_ov00_020bce48(pLink, GetRupeeCutsceneItemId())) {
+ PlayerLinkBase *pLink = data_027e0fc8;
+ if (/*pLink->*/ func_ov00_020bce48(pLink, GetRupeeCutsceneItemId())) {
Kill();
}
break;
@@ -363,8 +331,7 @@ void ActorRupee::Update(bool param1) {
func_ov14_0213b204(1);
}
break;
- default:
- break;
+ default: break;
}
KillInBounds();
@@ -393,7 +360,8 @@ void ActorRupee::vfunc_20(bool param1) {
void ActorRupee::func_ov14_0213b5f4(RupeeId id, unk32 param2, Vec3p *param3, bool param4) {
Actor_UnkStruct_012 unk_class;
- static const u32 data_ov14_02153e28[] = { // sRupeePalettes
+ static const u32 data_ov14_02153e28[] = {
+ // sRupeePalettes
0x9, // RupeeId_Green
0xA, // RupeeId_Blue
0x8, // RupeeId_Red
@@ -435,26 +403,24 @@ bool ActorRupee::func_ov14_0213b70c(RupeeId id) {
case RupeeId_BigGreen:
case RupeeId_BigRed:
case RupeeId_Gold:
- case RupeeId_Rupoor50:
- return true;
+ case RupeeId_Rupoor50: return true;
- default:
- break;
+ default: break;
}
return false;
}
extern "C" asm void _ZN10ActorRupeeD0Ev() {
- #ifndef NONMATCHING
+#ifndef NONMATCHING
#include "../../../asm/ov14/Actor/ActorRupee__ZN10ActorRupeeD0Ev.inc"
- #endif
+#endif
}
extern "C" asm void _ZN10ActorRupeeD2Ev() {
- #ifndef NONMATCHING
+#ifndef NONMATCHING
#include "../../../asm/ov14/Actor/ActorRupee__ZN10ActorRupeeD2Ev.inc"
- #endif
+#endif
}
// ActorRupee::~ActorRupee() {}
diff --git a/src/Main/Actor/ActorType.cpp b/src/Main/Actor/ActorType.cpp
index bf8f54ae..ec5f564f 100644
--- a/src/Main/Actor/ActorType.cpp
+++ b/src/Main/Actor/ActorType.cpp
@@ -1,14 +1,64 @@
#include "Actor/ActorType.hpp"
-#ifdef STUBS
-
ActorTypeList sActorTypeList;
-ActorType::ActorType(ActorTypeId id, ActorCreateFunc create, void *unk_08) {}
-ActorType::~ActorType() {}
-void ActorType::func_0203e7c8() {}
-void ActorType::Register() {}
-void ActorType::Unregister() {}
-ActorType* ActorType::Find(ActorTypeId id) {}
+ARM ActorType::ActorType(ActorTypeId id, ActorCreateFunc create, unk32 (*unk_08)()) {
+ this->id = id;
+ this->create = create;
+ this->unk_08 = unk_08;
+ this->unk_0c = 0;
+ this->next = NULL;
+ this->Register();
+ sActorTypeList.tail = this;
+}
+
+ARM ActorType::~ActorType() {
+ this->Unregister();
+}
+
+ARM unk32 ActorType::func_0203e7c8() {
+ if (this->unk_08 == NULL) {
+ return 0;
+ }
+ return (*unk_08)();
+}
+
+ARM void ActorType::Register() {
+ ActorType *actorType;
+ ActorType **tail = &sActorTypeList.head;
+
+ for (actorType = sActorTypeList.head; actorType != NULL; actorType = actorType->next) {
+ tail = &actorType->next;
+ }
+
+ *tail = this;
+}
+
+ARM void ActorType::Unregister() {
+ ActorType *actorType;
+
+ ActorType **current = &sActorTypeList.head;
+ ActorType **previous = NULL;
+
+ for (actorType = sActorTypeList.head; actorType != NULL; actorType = actorType->next) {
+ if (actorType == this) break;
+ previous = current;
+ current = &actorType->next;
+ }
+
+ if (previous != NULL) {
+ (*previous)->next = this->next;
+ }
+}
+
+ARM ActorType *ActorType::Find(ActorTypeId id) {
+ ActorType *actorType;
+
+ for (actorType = sActorTypeList.head; actorType != NULL; actorType = actorType->next) {
+ if (id == actorType->id) {
+ return actorType;
+ }
+ }
-#endif
+ return NULL;
+}