diff options
| author | Aetias <aetias@outlook.com> | 2024-10-19 13:34:42 +0200 |
|---|---|---|
| committer | Aetias <aetias@outlook.com> | 2024-10-19 13:34:42 +0200 |
| commit | 4826a6e764b92d623b8517883cd8e901a4348f86 (patch) | |
| tree | bc8df7ba0805e37d1e44a18e755679f2ae1cc145 /src | |
| parent | 0d62c02f14bd122690306976d8a58c5449dd3040 (diff) | |
| parent | ffdfd609fb9bc8f968ddc6f187da1d50731cbf69 (diff) | |
Merge branch 'main' into match_actor_rupee
Diffstat (limited to 'src')
| -rw-r--r-- | src/00_Core/Actor/Actor.cpp | 1065 | ||||
| -rw-r--r-- | src/00_Core/Actor/ActorManager.cpp | 22 | ||||
| -rw-r--r-- | src/00_Core/Item/Item.cpp | 4 | ||||
| -rw-r--r-- | src/00_Core/Item/ItemManager.cpp | 170 | ||||
| -rw-r--r-- | src/00_Core/Map/Course.cpp | 12 | ||||
| -rw-r--r-- | src/00_Core/Map/MapBase.cpp | 10 | ||||
| -rw-r--r-- | src/00_Core/Map/MapManager.cpp | 16 | ||||
| -rw-r--r-- | src/00_Core/Player/LinkStateBase.cpp | 30 | ||||
| -rw-r--r-- | src/00_Core/Player/LinkStateDamage.cpp | 4 | ||||
| -rw-r--r-- | src/00_Core/Player/LinkStateFollow.cpp | 6 | ||||
| -rw-r--r-- | src/00_Core/Player/LinkStateInteract.cpp | 6 | ||||
| -rw-r--r-- | src/00_Core/Player/LinkStateItem.cpp | 8 | ||||
| -rw-r--r-- | src/00_Core/Player/LinkStateMove.cpp | 4 | ||||
| -rw-r--r-- | src/00_Core/Player/LinkStateRoll.cpp | 4 | ||||
| -rw-r--r-- | src/00_Core/Player/PlayerBase.cpp | 16 | ||||
| -rw-r--r-- | src/00_Core/Player/PlayerControl.cpp | 6 | ||||
| -rw-r--r-- | src/00_Core/Player/TouchControl.cpp | 4 | ||||
| -rw-r--r-- | src/00_Core/Player/TouchGesture.cpp | 4 | ||||
| -rw-r--r-- | src/00_Core/Save/AdventureFlags.cpp | 12 | ||||
| -rw-r--r-- | src/14_Land/Actor/ActorRupee.cpp | 184 | ||||
| -rw-r--r-- | src/Main/Actor/ActorType.cpp | 68 |
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, ¶m1->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; +} |
