diff --git a/asm/ov00/Actor/ActorManager_Actor_vfunc_10.inc b/asm/ov00/Actor/ActorManager_Actor_vfunc_10.inc new file mode 100644 index 00000000..1818df29 --- /dev/null +++ b/asm/ov00/Actor/ActorManager_Actor_vfunc_10.inc @@ -0,0 +1,25 @@ + stmdb sp!, {r3, r4, r5, r6, r7, lr} + mov r5, r0 + ldr r0, [r5, #4] + ldr r7, [r5, #0x10] + mov r4, r1 + mov r6, #0 + cmp r0, #0 + ldmleia sp!, {r3, r4, r5, r6, r7, pc} +_020c359c: + ldr r0, [r7] + cmp r0, #0 + ldrneb r1, [r0, #0x118] + cmpne r1, #0 + beq _020c35c0 + ldr r2, [r0] + mov r1, r4 + ldr r2, [r2, #0x10] + blx r2 +_020c35c0: + ldr r0, [r5, #4] + add r6, r6, #1 + cmp r6, r0 + add r7, r7, #4 + blt _020c359c + ldmia sp!, {r3, r4, r5, r6, r7, pc} diff --git a/src/00_Core/Actor/ActorManager.cpp b/src/00_Core/Actor/ActorManager.cpp index d2927098..31a2e2b4 100644 --- a/src/00_Core/Actor/ActorManager.cpp +++ b/src/00_Core/Actor/ActorManager.cpp @@ -1,7 +1,6 @@ #include "Actor/ActorManager.hpp" 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) {} bool FilterActor::Filter(Actor *actor) {} @@ -54,3 +53,30 @@ ARM void ActorManager::DeleteActor(u32 index, bool param2) { this->mMaxActorIndex = i + 1 & 0xffff; return; } + +void NONMATCH(ActorManager::Actor_vfunc_10)(u32 param1) { + #ifndef NONMATCHING + #include "../asm/ov00/Actor/ActorManager_Actor_vfunc_10.inc" + #else + Actor *actor; + Actor **currentActor; + u32 uVar1; + int i; + + uVar1 = param1; + + currentActor = this->mActorTable; + + for (i = 0; i < this->mMaxActorIndex; ++i) { + actor = *currentActor; + if (actor != NULL) { + uVar1 = actor->mAlive; + if (uVar1 != 0) { + actor->vfunc_10(param1); + } + } + currentActor = currentActor + 1; + } + return; + #endif +}