From 046c7d7ac8bcac7d8bfea833c624557260ab5ab5 Mon Sep 17 00:00:00 2001 From: Aetias Date: Tue, 4 Mar 2025 20:59:04 +0100 Subject: Delink `ActorEventIcon` --- src/00_Core/Actor/Dungeon/ActorEventIcon.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/00_Core/Actor') diff --git a/src/00_Core/Actor/Dungeon/ActorEventIcon.cpp b/src/00_Core/Actor/Dungeon/ActorEventIcon.cpp index 8e943095..94e7381d 100644 --- a/src/00_Core/Actor/Dungeon/ActorEventIcon.cpp +++ b/src/00_Core/Actor/Dungeon/ActorEventIcon.cpp @@ -8,6 +8,6 @@ bool ActorEventIcon::vfunc_08() {} void ActorEventIcon::vfunc_14(u32 param1) {} void ActorEventIcon::vfunc_18(u32 param1) {} u32 ActorEventIcon::func_ov000_02090648(u32 param1) {} -bool func_ov000_02090774(u32 param1) {} +bool ActorEventIcon::func_ov000_02090774(u32 param1) {} void ActorEventIcon::vfunc_1c(u16 *param1) {} ActorEventIcon::~ActorEventIcon() {} -- cgit v1.2.3 From 3c223d570c19e1b244705bfb5893d51f30a17f80 Mon Sep 17 00:00:00 2001 From: Aetias Date: Thu, 6 Mar 2025 00:14:06 +0100 Subject: Delink `ActorNavi` --- src/00_Core/Actor/Navi/ActorNavi.cpp | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 src/00_Core/Actor/Navi/ActorNavi.cpp (limited to 'src/00_Core/Actor') diff --git a/src/00_Core/Actor/Navi/ActorNavi.cpp b/src/00_Core/Actor/Navi/ActorNavi.cpp new file mode 100644 index 00000000..5c4c18f4 --- /dev/null +++ b/src/00_Core/Actor/Navi/ActorNavi.cpp @@ -0,0 +1,32 @@ +#include "Actor/Navi/ActorNavi.hpp" +#include "Player/EquipHammer.hpp" + +ActorType ActorNavi::gType = ActorType(ActorTypeId_Navi, (ActorCreateFunc) ActorNavi::Create, NULL); +UnkStruct_ov000_020b8110 data_ov000_020ee1cc; + +ActorNavi *ActorNavi::Create() {} +UnkStruct_ov000_020b8110::UnkStruct_ov000_020b8110() : + UnkStruct_ov000_020beba8(7) {} +UnkStruct_ov000_020b8110::~UnkStruct_ov000_020b8110() {} +void UnkStruct_ov000_020b8110::vfunc_08(unk16 *param1) {} +void UnkStruct_ov000_020b8110::vfunc_18(s32 *param1) {} +void UnkStruct_ov000_020b8110::vfunc_14(u16 *param1) {} +void ActorNavi::func_ov000_020b8200() {} +void ActorNavi::vfunc_c4() {} +void ActorNavi::vfunc_c8() {} +void ActorNavi::vfunc_b4() {} +s32 ActorNavi::vfunc_b8() {} +void ActorNavi::vfunc_d4() {} +void ActorNavi::vfunc_d0() {} +void ActorNavi::SetActive(bool active) {} +void ActorNavi::vfunc_e0() {} +void ActorNavi::vfunc_d8() {} +void ActorNavi::vfunc_20(bool param1) {} +bool ActorNavi::vfunc_cc(unk32 *param1) {} +bool ActorNavi::vfunc_c0(Vec3p *param1) {} +void ActorNavi::vfunc_e8() {} +bool ActorNavi::vfunc_8c() {} +void ActorNavi::vfunc_ec() {} +EquipHammer *GetEquipHammer() {} +void ActorNavi::func_ov000_020b853c() {} +ActorNavi::~ActorNavi() {} -- cgit v1.2.3 From 1998ff3444b3a264cdaace5b10194ca0270ce260 Mon Sep 17 00:00:00 2001 From: Aetias Date: Thu, 6 Mar 2025 20:34:34 +0100 Subject: Delink `ActorForceNavi` --- src/00_Core/Actor/Navi/ActorForceNavi.cpp | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 src/00_Core/Actor/Navi/ActorForceNavi.cpp (limited to 'src/00_Core/Actor') diff --git a/src/00_Core/Actor/Navi/ActorForceNavi.cpp b/src/00_Core/Actor/Navi/ActorForceNavi.cpp new file mode 100644 index 00000000..6037082d --- /dev/null +++ b/src/00_Core/Actor/Navi/ActorForceNavi.cpp @@ -0,0 +1,7 @@ +#include "Actor/Navi/ActorForceNavi.hpp" + +ActorType ActorForceNavi::gType = ActorType(ActorTypeId_ForceNavi, (ActorCreateFunc) ActorForceNavi::Create, NULL); + +ActorForceNavi *ActorForceNavi::Create() {} +void ActorForceNavi::vfunc_b4() {} +ActorForceNavi::~ActorForceNavi() {} -- cgit v1.2.3 From 656ec5779cccb3f8e2146299ab9af1d4bb95d7c4 Mon Sep 17 00:00:00 2001 From: Aetias Date: Fri, 7 Mar 2025 19:25:02 +0100 Subject: Delink `ActorWisdomNavi` --- src/00_Core/Actor/Navi/ActorWisdomNavi.cpp | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 src/00_Core/Actor/Navi/ActorWisdomNavi.cpp (limited to 'src/00_Core/Actor') diff --git a/src/00_Core/Actor/Navi/ActorWisdomNavi.cpp b/src/00_Core/Actor/Navi/ActorWisdomNavi.cpp new file mode 100644 index 00000000..2567dc03 --- /dev/null +++ b/src/00_Core/Actor/Navi/ActorWisdomNavi.cpp @@ -0,0 +1,7 @@ +#include "Actor/Navi/ActorWisdomNavi.hpp" + +ActorType ActorWisdomNavi::gType = ActorType(ActorTypeId_WisdomNavi, (ActorCreateFunc) ActorWisdomNavi::Create, NULL); + +ActorWisdomNavi *ActorWisdomNavi::Create() {} +void ActorWisdomNavi::vfunc_b4() {} +ActorWisdomNavi::~ActorWisdomNavi() {} -- cgit v1.2.3 From 44ba14e823fd9d67fd92166f5370683fad56f428 Mon Sep 17 00:00:00 2001 From: Aetias Date: Sat, 8 Mar 2025 11:46:49 +0100 Subject: Decomp `ActorForceNavi` and `ActorWisdomNavi` 100% --- src/00_Core/Actor/Navi/ActorForceNavi.cpp | 13 ++++++++++--- src/00_Core/Actor/Navi/ActorNavi.cpp | 2 +- src/00_Core/Actor/Navi/ActorWisdomNavi.cpp | 13 ++++++++++--- 3 files changed, 21 insertions(+), 7 deletions(-) (limited to 'src/00_Core/Actor') diff --git a/src/00_Core/Actor/Navi/ActorForceNavi.cpp b/src/00_Core/Actor/Navi/ActorForceNavi.cpp index 6037082d..04b83c13 100644 --- a/src/00_Core/Actor/Navi/ActorForceNavi.cpp +++ b/src/00_Core/Actor/Navi/ActorForceNavi.cpp @@ -1,7 +1,14 @@ #include "Actor/Navi/ActorForceNavi.hpp" +#pragma section sbss begin ActorType ActorForceNavi::gType = ActorType(ActorTypeId_ForceNavi, (ActorCreateFunc) ActorForceNavi::Create, NULL); +#pragma section sbss end -ActorForceNavi *ActorForceNavi::Create() {} -void ActorForceNavi::vfunc_b4() {} -ActorForceNavi::~ActorForceNavi() {} +extern u32 **data_027e0fe0[]; +ActorForceNavi *ActorForceNavi::Create() { + return new(*data_027e0fe0[0], 4) ActorForceNavi(); +} + +ARM FairyId ActorForceNavi::GetFairyId() { + return FairyId_Power; +} diff --git a/src/00_Core/Actor/Navi/ActorNavi.cpp b/src/00_Core/Actor/Navi/ActorNavi.cpp index 5c4c18f4..7c195178 100644 --- a/src/00_Core/Actor/Navi/ActorNavi.cpp +++ b/src/00_Core/Actor/Navi/ActorNavi.cpp @@ -14,7 +14,7 @@ void UnkStruct_ov000_020b8110::vfunc_14(u16 *param1) {} void ActorNavi::func_ov000_020b8200() {} void ActorNavi::vfunc_c4() {} void ActorNavi::vfunc_c8() {} -void ActorNavi::vfunc_b4() {} +FairyId ActorNavi::GetFairyId() {} s32 ActorNavi::vfunc_b8() {} void ActorNavi::vfunc_d4() {} void ActorNavi::vfunc_d0() {} diff --git a/src/00_Core/Actor/Navi/ActorWisdomNavi.cpp b/src/00_Core/Actor/Navi/ActorWisdomNavi.cpp index 2567dc03..84c02e33 100644 --- a/src/00_Core/Actor/Navi/ActorWisdomNavi.cpp +++ b/src/00_Core/Actor/Navi/ActorWisdomNavi.cpp @@ -1,7 +1,14 @@ #include "Actor/Navi/ActorWisdomNavi.hpp" +#pragma section sbss begin ActorType ActorWisdomNavi::gType = ActorType(ActorTypeId_WisdomNavi, (ActorCreateFunc) ActorWisdomNavi::Create, NULL); +#pragma section sbss end -ActorWisdomNavi *ActorWisdomNavi::Create() {} -void ActorWisdomNavi::vfunc_b4() {} -ActorWisdomNavi::~ActorWisdomNavi() {} +extern u32 **data_027e0fe0[]; +ARM ActorWisdomNavi *ActorWisdomNavi::Create() { + return new(*data_027e0fe0[0], 4) ActorWisdomNavi(); +} + +ARM FairyId ActorWisdomNavi::GetFairyId() { + return FairyId_Wisdom; +} -- cgit v1.2.3 From a8dc7ef705f777cc725e1ec08918fc8c2d61b60a Mon Sep 17 00:00:00 2001 From: Aetias Date: Sat, 8 Mar 2025 12:35:55 +0100 Subject: Delink and 81% decomp `ActorActionObject` --- src/00_Core/Actor/Actor.cpp | 4 +- src/00_Core/Actor/Dungeon/ActorActionObject.cpp | 85 +++++++++++++++++++++++++ 2 files changed, 87 insertions(+), 2 deletions(-) create mode 100644 src/00_Core/Actor/Dungeon/ActorActionObject.cpp (limited to 'src/00_Core/Actor') diff --git a/src/00_Core/Actor/Actor.cpp b/src/00_Core/Actor/Actor.cpp index f008064d..572ead78 100644 --- a/src/00_Core/Actor/Actor.cpp +++ b/src/00_Core/Actor/Actor.cpp @@ -318,8 +318,8 @@ ARM void Actor::SetTransform(Transform *transform) { 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 bool Actor::func_Ov00_020c1bfc(s32 param1) { + return gMapManager->func_ov00_02084be0(mUnk_020.mUnk_0a[param1], mUnk_020.mUnk_08[param1]); } ARM void Actor::func_ov00_020c1c20(s32 param1, unk32 param2) { diff --git a/src/00_Core/Actor/Dungeon/ActorActionObject.cpp b/src/00_Core/Actor/Dungeon/ActorActionObject.cpp new file mode 100644 index 00000000..fdef3d9e --- /dev/null +++ b/src/00_Core/Actor/Dungeon/ActorActionObject.cpp @@ -0,0 +1,85 @@ +#include "Actor/Dungeon/ActorActionObject.hpp" +#include "Map/MapManager.hpp" +#include "Player/LinkStateBase.hpp" +#include "Player/PlayerLinkBase.hpp" +#include "Save/AdventureFlags.hpp" + +#pragma section sbss begin +ActorType ActorActionObject::gType = ActorType(ActorTypeId_ActionObject, (ActorCreateFunc) ActorActionObject::Create, NULL); +#pragma section sbss end + +extern u32 **data_027e0fe0[]; +ARM ActorActionObject *ActorActionObject::Create() { + return new(*data_027e0fe0[0], 4) ActorActionObject(); +} + +ARM ActorActionObject::ActorActionObject() {} + +ARM ActorActionObject::~ActorActionObject() {} + +// non-matching +ARM bool ActorActionObject::vfunc_08() { + mGravity = 0; + mHitbox.pos = gVec3p_ZERO; + mHitbox.size = -1; + mUnk_08c.pos = mHitbox.pos; + mUnk_08c.size = mHitbox.size; + mUnk_0a4.mUnk_04 = gVec3p_ZERO; + mUnk_0a4.mUnk_10 = -1; + mVisible = false; + mUnk_130 = 0; + return true; +} + +ARM void ActorActionObject::vfunc_14(u32 param1) { + if (!this->func_ov00_020c313c(param1)) { + return; + } + + u32 flag = mUnk_020.mUnk_00[2]; + bool bVar3; + switch (mUnk_020.mUnk_00[0]) { + case 0: bVar3 = true; break; + case 1: + if (gPlayerLink->mGrabActor.id != -1 && gPlayerLink->GetStateId() == LinkStateId_Move) { + bVar3 = true; + } else { + bVar3 = false; + } + break; + case 2: + if (gPlayerLink->mGrabActor.id == -1 && gPlayerLink->GetStateId() == LinkStateId_Move) { + bVar3 = true; + } else { + bVar3 = false; + } + break; + default: bVar3 = false; break; + } + + if (!bVar3) { + return; + } + if (!gMapManager->func_ov00_020836dc((u32) mUnk_020.mUnk_00[1], 0)) { + return; + } + if (mUnk_020.mUnk_0a[0] != 0 && !this->func_Ov00_020c1bfc(0)) { + return; + } + if (flag != 0 && !gAdventureFlags->Get(flag)) { + return; + } + + PlayerLinkBase *link = gPlayerLink; + if (link != NULL && link->vfunc_18(7)) { + if (mUnk_020.mUnk_00[3] == 1) { + link->func_ov000_020bcf50(&mPos, 0x800); + } + this->func_ov00_020c1c20(1, 1); + this->Kill(); + } +} + +ARM void ActorActionObject::vfunc_18(u32 param1) { + this->func_ov00_020c313c(param1); +} -- cgit v1.2.3 From 59648074067128dbe6306b9fdb80af3f6abfa91b Mon Sep 17 00:00:00 2001 From: Aetias Date: Sun, 9 Mar 2025 09:57:20 +0100 Subject: Fix accidental capital letter in `func_Ov00_020c1bfc` --- src/00_Core/Actor/Actor.cpp | 2 +- src/00_Core/Actor/Dungeon/ActorActionObject.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'src/00_Core/Actor') diff --git a/src/00_Core/Actor/Actor.cpp b/src/00_Core/Actor/Actor.cpp index 572ead78..74f0da25 100644 --- a/src/00_Core/Actor/Actor.cpp +++ b/src/00_Core/Actor/Actor.cpp @@ -318,7 +318,7 @@ ARM void Actor::SetTransform(Transform *transform) { ARM void Actor::vfunc_a8() {} -ARM bool Actor::func_Ov00_020c1bfc(s32 param1) { +ARM bool Actor::func_ov00_020c1bfc(s32 param1) { return gMapManager->func_ov00_02084be0(mUnk_020.mUnk_0a[param1], mUnk_020.mUnk_08[param1]); } diff --git a/src/00_Core/Actor/Dungeon/ActorActionObject.cpp b/src/00_Core/Actor/Dungeon/ActorActionObject.cpp index fdef3d9e..0a2c3970 100644 --- a/src/00_Core/Actor/Dungeon/ActorActionObject.cpp +++ b/src/00_Core/Actor/Dungeon/ActorActionObject.cpp @@ -63,7 +63,7 @@ ARM void ActorActionObject::vfunc_14(u32 param1) { if (!gMapManager->func_ov00_020836dc((u32) mUnk_020.mUnk_00[1], 0)) { return; } - if (mUnk_020.mUnk_0a[0] != 0 && !this->func_Ov00_020c1bfc(0)) { + if (mUnk_020.mUnk_0a[0] != 0 && !this->func_ov00_020c1bfc(0)) { return; } if (flag != 0 && !gAdventureFlags->Get(flag)) { -- cgit v1.2.3