Add nonmatching function for func_ov00_020c3484

This commit is contained in:
Mike
2024-05-05 15:52:24 -04:00
parent e019275433
commit 900fe70157
2 changed files with 124 additions and 0 deletions
@@ -0,0 +1,63 @@
stmdb sp!, {r4, r5, r6, r7, r8, r9, r10, lr}
mov r10, r0
mvn r3, #0
str r3, [r10]
ldr r0, data_027e103c
str r3, [r10, #4]
ldr r0, [r0]
mov r9, r2
ldrb r0, [r0, #0x24]
cmp r0, #0
ldmeqia sp!, {r4, r5, r6, r7, r8, r9, r10, pc}
ldr r0, data_027e077c
ldr r2, data_02056be4
ldr r0, [r0]
ldr r6, [r1, #0x10]
ldrb r0, [r2, r0]
sub r5, r3, #0x80000000
tst r0, #1
ldr r0, [r1, #4]
movne r8, #1
moveq r8, #0
add r7, r6, r0, lsl #2
cmp r6, r7
ldmhsia sp!, {r4, r5, r6, r7, r8, r9, r10, pc}
mov r4, #0
_020c34e8:
ldr r0, [r6]
cmp r0, #0
ldrneb r1, [r0, #0x118]
cmpne r1, #0
beq _020c3560
mov r1, r9
bl _ZN5Actor18func_ov00_020c27a8Ei
cmp r0, #0
beq _020c3560
ldr r0, [r6]
ldrb r1, [r0, #0xa4]
cmp r1, #0
cmpeq r8, #0
beq _020c3560
ldr r2, [r0]
mov r1, r4
ldr r2, [r2, #0x40]
blx r2
cmp r0, #0
beq _020c3560
ldr r0, [r6]
bl _ZN5Actor14DistanceToLinkEv
cmp r0, r5
bge _020c3560
ldr r1, [r6]
mov r5, r0
ldr r0, [r1, #8]
str r0, [r10]
ldr r0, [r1, #0xc]
str r0, [r10, #4]
_020c3560:
add r6, r6, #4
cmp r6, r7
blo _020c34e8
ldmia sp!, {r4, r5, r6, r7, r8, r9, r10, pc}
.align 2, 0
arm_func_end _ZN12ActorManager18func_ov00_020c3484EP8ActorRefP5Actori
+61
View File
@@ -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"