summaryrefslogtreecommitdiff
path: root/src/00_Core/Actor/ActorManager.cpp
diff options
context:
space:
mode:
authorMike <mikebuntu68@gmail.com>2024-05-05 15:52:24 -0400
committerMike <mikebuntu68@gmail.com>2024-07-20 11:33:14 -0400
commit900fe701574c03be0674b4c9a908aeb19b40ce3a (patch)
treecb97e68df70813716664dbb58ff4017e6d5de6ea /src/00_Core/Actor/ActorManager.cpp
parente0192754339abccb40b906cc00976d7bd4ed2900 (diff)
Add nonmatching function for `func_ov00_020c3484`
Diffstat (limited to 'src/00_Core/Actor/ActorManager.cpp')
-rw-r--r--src/00_Core/Actor/ActorManager.cpp61
1 files changed, 61 insertions, 0 deletions
diff --git a/src/00_Core/Actor/ActorManager.cpp b/src/00_Core/Actor/ActorManager.cpp
index 31a2e2b4..55efc223 100644
--- a/src/00_Core/Actor/ActorManager.cpp
+++ b/src/00_Core/Actor/ActorManager.cpp
@@ -18,6 +18,9 @@ bool ActorManager::ActorTypeIsOneOf(u32 type, ActorTypeId *types) {}
extern void func_ov00_020c3f54(void *, u32 param2);
+extern s32 *data_027e103c;
+extern s32 *data_027e077c;
+extern s32 data_02056be4[];
ARM void ActorManager::DeleteActor(u32 index, bool param2) {
if (!param2) {
@@ -54,6 +57,64 @@ ARM void ActorManager::DeleteActor(u32 index, bool param2) {
return;
}
+static void NONMATCH(func_ov00_020c3484)(ActorRef *ref, Actor *actor, unk32 param3) {
+ #ifndef NONMATCHING
+ #include "../asm/ov00/Actor/ActorManager_func_ov00_020c3484.inc"
+ #else
+ char bVar1;
+ s32 iVar3;
+ s32 iVar4;
+ u32 uVar7;
+ Actor **ppAVar5;
+ Actor **ppAVar6;
+ Actor *pActor;
+
+ ref->id = 0xffffffff;
+
+ int *puVar2 = data_027e103c;
+
+ ref->index = 0xffffffff;
+
+ if (*(char *)(*puVar2 + 0x24) == '\0') {
+ return;
+ }
+
+ ppAVar5 = *(Actor ***)&actor->mUnk_010;
+
+ bVar1 = data_02056be4[*data_027e077c];
+
+ iVar4 = 0x7fffffff;
+ ppAVar6 = ppAVar5 + actor->mType;
+
+ for (; ppAVar5 < ppAVar6; ppAVar5++) {
+ pActor = *ppAVar5;
+ if (pActor != NULL) {
+ actor = (Actor *)(u32)actor->mAlive;
+ }
+ if (pActor != NULL && actor != NULL) {
+ uVar7 = pActor->func_ov00_020c27a8(param3);
+ actor = (Actor *)(uVar7 >> 0x20);
+ if (uVar7 != 0) {
+ pActor = *ppAVar5;
+ actor = (Actor *)(u32)(pActor->mUnk_0a4.mUnk_00);
+ }
+ if (actor != NULL || (bVar1 & 1) != 0) {
+ uVar7 = pActor->mUnk_040(0);
+ pActor = (Actor *)(uVar7 >> 0x20);
+ iVar3 = (*ppAVar5)->DistanceToLink();
+ if (uVar7 != 0 && iVar3 < iVar4) {
+ pActor = *ppAVar5;
+ ref->id = actor->mId;
+ ref->index = actor->mIndex;
+ iVar4 = iVar3;
+ }
+ }
+ }
+ }
+ return;
+ #endif
+}
+
void NONMATCH(ActorManager::Actor_vfunc_10)(u32 param1) {
#ifndef NONMATCHING
#include "../asm/ov00/Actor/ActorManager_Actor_vfunc_10.inc"