diff options
Diffstat (limited to 'src/00_Core/Actor')
| -rw-r--r-- | src/00_Core/Actor/Actor.cpp | 143 | ||||
| -rw-r--r-- | src/00_Core/Actor/ActorManager.cpp | 7 |
2 files changed, 63 insertions, 87 deletions
diff --git a/src/00_Core/Actor/Actor.cpp b/src/00_Core/Actor/Actor.cpp index b15fee13..57f405b8 100644 --- a/src/00_Core/Actor/Actor.cpp +++ b/src/00_Core/Actor/Actor.cpp @@ -1,5 +1,5 @@ extern "C" { - #include <stdlib.h> +#include <stdlib.h> } #include "Actor/Actor.hpp" @@ -13,7 +13,7 @@ extern "C" { #include "Player/TouchControl.hpp" #include "Save/AdventureFlags.hpp" -static char *sShipTypes[] = { "brg", "anc", "bow", "hul", "can", "dco", "pdl", "fnl" }; +static char *sShipTypes[] = {"brg", "anc", "bow", "hul", "can", "dco", "pdl", "fnl"}; struct UnkStruct3 { /* 0 */ s16 mUnk_0; @@ -21,45 +21,16 @@ struct UnkStruct3 { /* 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 }, + {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}, }; -KILL(_ZN19Actor_UnkStruct_020C2Ev) -Actor_UnkStruct_020::Actor_UnkStruct_020(): +Actor_UnkStruct_020::Actor_UnkStruct_020() : mUnk_0c(-1), mUnk_0d(0), mUnk_0e(1), - mUnk_10(-1) -{ + mUnk_10(-1) { for (s32 i = 0; i < 4; ++i) { mUnk_00[i] = 0; } @@ -69,8 +40,7 @@ Actor_UnkStruct_020::Actor_UnkStruct_020(): } } -KILL(_ZN5ActorC1Ev) -ARM Actor::Actor(): +ARM Actor::Actor() : mType(ActorTypeId_Null), mRef(-1, -1), mUnk_010(0), @@ -124,20 +94,19 @@ ARM Actor::Actor(): mActiveFrames(0), mUnk_13c(0), mUnk_140(0), - mUnk_144(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; + 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; + mVel.x = 0; + mVel.y = 0; + mVel.z = 0; } ARM Actor::~Actor() {} @@ -198,7 +167,8 @@ struct UnkStruct1 { }; 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" 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) { @@ -231,7 +201,7 @@ ARM bool Actor::SetUnk_11b() { ARM bool Actor::SetVelocity(Vec3p *vel) { if (!mUnk_11b) return false; - mVel = *vel; + mVel = *vel; mUnk_11b = false; return true; } @@ -297,13 +267,9 @@ 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 - ) { + 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; @@ -321,8 +287,7 @@ ARM bool KillPickupsFilter::Filter(Actor *actor) { case ActorTypeId_FLAL: case ActorTypeId_FLBM: case ActorTypeId_FLBT: - case ActorTypeId_FLTM: - { + case ActorTypeId_FLTM: { actor->Kill(); return true; } @@ -338,16 +303,16 @@ ARM void Actor::KillPickupItemActors() { ARM bool Actor::TrySetTransform(Transform *transform) { mPrevPos = mPos; - mPos = transform->pos; - mAngle = transform->angle; + 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; + mPos = transform->pos; + mAngle = transform->angle; mVisible = transform->visible; } @@ -378,7 +343,8 @@ ARM bool Actor::vfunc_4c(unk32 *param1) { ARM bool Actor::IsNearLink() { Vec3p playerPos = gPlayerPos; - q20 z = playerPos.z; + + 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); @@ -459,38 +425,42 @@ ARM bool Actor::func_ov00_020c1fc8(PlayerCollide flags) { if (this->CollidesWithPlayer(flags & PlayerCollide_Sword)) { Knockback knockback; knockback.mUnk_00 = gPlayer->EquipItem_vfunc_2c(); - knockback.vec = vecFromPlayer; + knockback.vec = vecFromPlayer; knockback.mUnk_10 = 0; - knockback.actor = NULL; + knockback.actor = NULL; + result = this->vfunc_48(&knockback); } else if (this->CollidesWithPlayer(flags & PlayerCollide_Shield)) { Knockback knockback; knockback.mUnk_00 = 0; - knockback.vec = vecFromPlayer; + 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.vec = vecFromPlayer; knockback.mUnk_10 = 4; - knockback.actor = NULL; + 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; + 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); } } @@ -501,8 +471,8 @@ 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; + 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; @@ -558,6 +528,7 @@ ARM bool Actor::func_ov00_020c243c(ActorTypeId *actorTypes, Actor **out) { 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; @@ -565,7 +536,7 @@ ARM bool Actor::func_ov00_020c243c(ActorTypeId *actorTypes, Actor **out) { Vec3p_Sub(&mPos, &actor->mPrevPos, &knockback.vec); } knockback.mUnk_00 = actor->mUnk_125; - knockback.actor = actor; + knockback.actor = actor; switch (actor->mType) { case ActorTypeId_SBEM: { @@ -599,8 +570,7 @@ ARM bool Actor::func_ov00_020c243c(ActorTypeId *actorTypes, Actor **out) { case ActorTypeId_BKEY: case ActorTypeId_FORC: case ActorTypeId_FLTB: - case ActorTypeId_TSUB: - { + case ActorTypeId_TSUB: { knockback.mUnk_10 = 10; } break; @@ -678,12 +648,14 @@ 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) { @@ -700,10 +672,11 @@ 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); + q20 dist = this->XzDistanceTo(param1); if (dist < param2) param2 = dist; func_0202d95c(param3, param2); } @@ -719,8 +692,8 @@ ARM bool Actor::func_ov00_020c29ec(q20 param1) { } ARM void Actor::GetHitbox(Cylinder *hitbox) { - hitbox->size = mHitbox.size; - u32 angle = 2 * (mAngle >> 4); + hitbox->size = mHitbox.size; + u32 angle = 2 * (mAngle >> 4); hitbox->pos.x = mPos.x; hitbox->pos.y = mPos.y; hitbox->pos.z = mPos.z; @@ -732,8 +705,8 @@ ARM void Actor::GetHitbox(Cylinder *hitbox) { } ARM void Actor::GetUnk_08c(Cylinder *param1) { - param1->size = mUnk_08c.size; - u32 angle = 2 * (mAngle >> 4); + 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; @@ -780,8 +753,8 @@ ARM bool Actor::func_ov00_020c2c70() { return boomerang != NULL; } -ARM EquipBoomerang* Actor::GetEquipBoomerang() { - return (EquipBoomerang*) ItemManager::GetEquipItemUnchecked(ItemFlag_Boomerang); +ARM EquipBoomerang *Actor::GetEquipBoomerang() { + return (EquipBoomerang *) ItemManager::GetEquipItemUnchecked(ItemFlag_Boomerang); } ARM bool Actor::func_ov00_020c2d54() { @@ -806,6 +779,7 @@ 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); @@ -822,6 +796,7 @@ ARM bool Actor::func_ov00_020c2de4() { ARM bool Actor::func_ov00_020c2e7c() { bool result = false; + EquipRope *rope = EquipSword::GetEquipRope(); if (!mUnk_11d) { s32 unk1 = rope->func_ov14_0213ddd4(this); @@ -841,6 +816,7 @@ ARM bool Actor::func_ov00_020c2ebc() { 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(); @@ -870,6 +846,7 @@ ARM bool Actor::func_ov00_020c2ed4() { ARM bool Actor::IsHitboxTouched(bool param1) { q20 size = mHitbox.size; + bool result = false; if (size >= 0) { Vec3p pos = mPos; @@ -901,7 +878,7 @@ ARM bool Actor::func_ov00_020c3094() { return result; } -ARM Vec3p* Actor::GetPos() { +ARM Vec3p *Actor::GetPos() { return &mPos; } @@ -948,6 +925,7 @@ 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; @@ -965,7 +943,7 @@ ARM void Actor::GetLinkPos(Vec3p *result) { ARM void Actor::GetLinkDummyPos(Vec3p *result) { ActorRef dummyRef; ActorManager::FindActorByType(&dummyRef, gActorManager, ActorTypeId_PlayerDummy); - ActorPlayerDummy *dummy = (ActorPlayerDummy*) gActorManager->GetActor(&dummyRef); + ActorPlayerDummy *dummy = (ActorPlayerDummy *) gActorManager->GetActor(&dummyRef); if (dummy != NULL && dummy->mUnk_16e == 0) { *result = dummy->mPos; return; @@ -979,4 +957,3 @@ Actor_UnkStruct_09c::Actor_UnkStruct_09c() { mUnk_3 = 0; mUnk_4 = 0; } - diff --git a/src/00_Core/Actor/ActorManager.cpp b/src/00_Core/Actor/ActorManager.cpp index 472eede2..467196d7 100644 --- a/src/00_Core/Actor/ActorManager.cpp +++ b/src/00_Core/Actor/ActorManager.cpp @@ -3,18 +3,17 @@ 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(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) {} +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, ActorTypeId *types) {} - |
