summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike <mikebuntu68@gmail.com>2024-05-11 14:44:34 -0400
committerMike <mikebuntu68@gmail.com>2024-07-20 11:37:22 -0400
commit902f3bbce4ab442abd897df1d084e4913774c787 (patch)
tree9f55b01c643b5b149bf267fc7289d38b63c38abc
parentb7a6355bc660424ccf246ad3bfec25a9560a4ddf (diff)
Match `ActorManager::FindActorById`
-rw-r--r--asm/ov00/Actor/ActorManager_Actor_FindActorById.inc43
-rw-r--r--src/00_Core/Actor/ActorManager.cpp16
2 files changed, 6 insertions, 53 deletions
diff --git a/asm/ov00/Actor/ActorManager_Actor_FindActorById.inc b/asm/ov00/Actor/ActorManager_Actor_FindActorById.inc
deleted file mode 100644
index 1fe5c176..00000000
--- a/asm/ov00/Actor/ActorManager_Actor_FindActorById.inc
+++ /dev/null
@@ -1,43 +0,0 @@
- stmdb sp!, {r3, lr}
- cmp r1, #0
- mov ip, #0
- blt _020c366c
- ldr r3, [r0, #8]
- cmp r3, #0
- blt _020c3628
- ldr r2, [r0, #4]
- cmp r3, r2
- bge _020c3628
- ldr r2, [r0, #0x10]
- ldr r3, [r2, r3, lsl #2]
- cmp r3, #0
- ldrneb r2, [r3, #0x118]
- cmpne r2, #0
- beq _020c3628
- ldr r2, [r3, #8]
- cmp r1, r2
- moveq ip, r3
- beq _020c366c
-_020c3628:
- ldr r3, [r0, #0x10]
- ldr r0, [r0, #4]
- add lr, r3, r0, lsl #2
- cmp r3, lr
- bhs _020c366c
-_020c363c:
- ldr r2, [r3]
- cmp r2, #0
- ldrneb r0, [r2, #0x118]
- cmpne r0, #0
- beq _020c3660
- ldr r0, [r2, #8]
- cmp r1, r0
- moveq ip, r2
- beq _020c366c
-_020c3660:
- add r3, r3, #4
- cmp r3, lr
- blo _020c363c
-_020c366c:
- mov r0, ip
- ldmia sp!, {r3, pc}
diff --git a/src/00_Core/Actor/ActorManager.cpp b/src/00_Core/Actor/ActorManager.cpp
index 7390dcda..6408d6aa 100644
--- a/src/00_Core/Actor/ActorManager.cpp
+++ b/src/00_Core/Actor/ActorManager.cpp
@@ -135,10 +135,7 @@ ARM void ActorManager::Actor_vfunc_10(u32 param1) {
return;
}
-Actor* NONMATCH(ActorManager::FindActorById)(s32 id) {
- #ifndef NONMATCHING
- #include "../asm/ov00/Actor/ActorManager_Actor_FindActorById.inc"
- #else
+ARM Actor* ActorManager::FindActorById(s32 id) {
u32 actorId;
s32 cacheIndex;
Actor *actor;
@@ -150,11 +147,10 @@ Actor* NONMATCH(ActorManager::FindActorById)(s32 id) {
cacheIndex = this->mCacheEmptyActorIndex;
if ((cacheIndex >= 0) && (cacheIndex < this->mMaxActorIndex)) {
pActor = this->mActorTable;
- actor = this->mActorTable[cacheIndex];
- if (actor != NULL) {
- pActor = (Actor**)(u32)actor->mAlive;
- if (pActor != NULL && id == actor->mId) {
- return actor;
+ if (pActor[cacheIndex] != NULL) {
+ if ((Actor**)(u32)pActor[cacheIndex]->mAlive != NULL && id == pActor[cacheIndex]->mId) {
+ actor = pActor[cacheIndex];
+ goto ret;
}
}
}
@@ -173,8 +169,8 @@ Actor* NONMATCH(ActorManager::FindActorById)(s32 id) {
}
}
+ret:
return actor;
- #endif
}
Actor* ActorManager::GetActor(ActorRef *ref) {