From eb75915d3893981e1c5f292d9dad7bbc527ab5df Mon Sep 17 00:00:00 2001 From: Mike Date: Sat, 4 May 2024 14:54:36 -0400 Subject: [PATCH 01/18] Update type of `ActorManager.mNumActors` --- include/Actor/ActorManager.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/Actor/ActorManager.hpp b/include/Actor/ActorManager.hpp index 9222bc6d..c7db07c2 100644 --- a/include/Actor/ActorManager.hpp +++ b/include/Actor/ActorManager.hpp @@ -44,7 +44,7 @@ struct ActorList { class ActorManager { public: /* 00 */ u16 mMaxActors; - /* 02 */ unk16 mNumActors; + /* 02 */ u16 mNumActors; /* 04 */ unk32 mMaxActorIndex; /* 08 */ s32 mCacheEmptyActorIndex; /* 0c */ unk32 mNextActorId; From 9266f69aa7b7fb36ba0c9d78f5a194496420e2e9 Mon Sep 17 00:00:00 2001 From: Mike Date: Sat, 4 May 2024 15:13:35 -0400 Subject: [PATCH 02/18] Match `ActorManager::DeleteActor` --- src/00_Core/Actor/ActorManager.cpp | 38 +++++++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/src/00_Core/Actor/ActorManager.cpp b/src/00_Core/Actor/ActorManager.cpp index 472eede2..d2927098 100644 --- a/src/00_Core/Actor/ActorManager.cpp +++ b/src/00_Core/Actor/ActorManager.cpp @@ -1,6 +1,5 @@ #include "Actor/ActorManager.hpp" -void ActorManager::DeleteActor(u32 index, bool param2) {} void ActorManager::func_ov00_020c3484(ActorRef *ref, Actor *actor, unk32 param3) {} void ActorManager::Actor_vfunc_10(u32 param1) {} Actor* ActorManager::FindActorById(u32 id) {} @@ -18,3 +17,40 @@ void ActorManager::func_ov00_020c3ce8(unk32 param1, unk32 param2) {} void ActorManager::Actor_vfunc_28() {} bool ActorManager::ActorTypeIsOneOf(u32 type, ActorTypeId *types) {} + +extern void func_ov00_020c3f54(void *, u32 param2); + +ARM void ActorManager::DeleteActor(u32 index, bool param2) { + if (!param2) { + func_ov00_020c3f54(this->mUnk_14, index & 0xffff); + this->mActorTable[index]->StopLinkFollow(); + } + + if (this->mActorTable[index] != NULL) { + delete this->mActorTable[index]; + } + + this->mActorTable[index] = NULL; + + if (param2) { + return; + } + + this->mNumActors--; + + if (index + 1 != this->mMaxActorIndex) { + return; + } + + int i = index - 1; + + while (i >= 0) { + if (this->mActorTable[i] != NULL) { + break; + } + i--; + } + + this->mMaxActorIndex = i + 1 & 0xffff; + return; +} From 251896330895bd10611f75068b9029462858d47c Mon Sep 17 00:00:00 2001 From: Mike Date: Sun, 5 May 2024 07:57:09 -0400 Subject: [PATCH 03/18] Add nonmatched `ActorManager::Actor_vfunc_10` --- .../Actor/ActorManager_Actor_vfunc_10.inc | 25 +++++++++++++++++ src/00_Core/Actor/ActorManager.cpp | 28 ++++++++++++++++++- 2 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 asm/ov00/Actor/ActorManager_Actor_vfunc_10.inc 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 +} From e0192754339abccb40b906cc00976d7bd4ed2900 Mon Sep 17 00:00:00 2001 From: Mike Date: Sun, 5 May 2024 13:02:15 -0400 Subject: [PATCH 04/18] Update function arg type --- include/Actor/ActorManager.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/Actor/ActorManager.hpp b/include/Actor/ActorManager.hpp index c7db07c2..41d09d4a 100644 --- a/include/Actor/ActorManager.hpp +++ b/include/Actor/ActorManager.hpp @@ -80,7 +80,7 @@ public: void DeleteActor(u32 index, bool param2); static void func_ov00_020c3484(ActorRef *ref, Actor *actor, unk32 param3); void Actor_vfunc_10(u32 param1); - Actor* FindActorById(u32 id); + Actor* FindActorById(s32 id); Actor* GetActor(ActorRef *ref); s32 FilterActors(FilterActorBase *filter, ActorList *filteredActors); static void FindActorByType(ActorRef *ref, ActorManager *manager, ActorTypeId type); From 900fe701574c03be0674b4c9a908aeb19b40ce3a Mon Sep 17 00:00:00 2001 From: Mike Date: Sun, 5 May 2024 15:52:24 -0400 Subject: [PATCH 05/18] Add nonmatching function for `func_ov00_020c3484` --- .../Actor/ActorManager_func_ov00_020c3484.inc | 63 +++++++++++++++++++ src/00_Core/Actor/ActorManager.cpp | 61 ++++++++++++++++++ 2 files changed, 124 insertions(+) create mode 100644 asm/ov00/Actor/ActorManager_func_ov00_020c3484.inc diff --git a/asm/ov00/Actor/ActorManager_func_ov00_020c3484.inc b/asm/ov00/Actor/ActorManager_func_ov00_020c3484.inc new file mode 100644 index 00000000..2fa2d9dc --- /dev/null +++ b/asm/ov00/Actor/ActorManager_func_ov00_020c3484.inc @@ -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 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" From f1559f1ef11b525d32f54275ef6d09871fdc074a Mon Sep 17 00:00:00 2001 From: Mike Date: Sun, 5 May 2024 15:56:39 -0400 Subject: [PATCH 06/18] Add nonmatching function for `FindActorById` --- .../ActorManager_Actor_FindActorById.inc | 43 +++++++++++++++++++ src/00_Core/Actor/ActorManager.cpp | 42 ++++++++++++++++++ 2 files changed, 85 insertions(+) create mode 100644 asm/ov00/Actor/ActorManager_Actor_FindActorById.inc diff --git a/asm/ov00/Actor/ActorManager_Actor_FindActorById.inc b/asm/ov00/Actor/ActorManager_Actor_FindActorById.inc new file mode 100644 index 00000000..1fe5c176 --- /dev/null +++ b/asm/ov00/Actor/ActorManager_Actor_FindActorById.inc @@ -0,0 +1,43 @@ + 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 55efc223..27acf972 100644 --- a/src/00_Core/Actor/ActorManager.cpp +++ b/src/00_Core/Actor/ActorManager.cpp @@ -141,3 +141,45 @@ void NONMATCH(ActorManager::Actor_vfunc_10)(u32 param1) { return; #endif } + +Actor* NONMATCH(ActorManager::FindActorById)(s32 id) { + #ifndef NONMATCHING + #include "../asm/ov00/Actor/ActorManager_Actor_FindActorById.inc" + #else + u32 actorId; + s32 cacheIndex; + Actor *actor; + Actor **pActor; + Actor **lastActor; + + actor = NULL; + if (id >= 0) { + 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; + } + } + } + pActor = this->mActorTable; + actorId = this->mMaxActorIndex; + lastActor = pActor + actorId; + + for (; pActor < lastActor; pActor = pActor + 1) { + if (*pActor != NULL) { + actorId = (u32)(*pActor)->mAlive; + if (actorId != 0 && id == (*pActor)->mId) { + actor = *pActor; + break; + } + } + } + } + + return actor; + #endif +} From ea0fcb1d74128940f9d1c62b6aa7b1a65e3060d1 Mon Sep 17 00:00:00 2001 From: Mike Date: Sun, 5 May 2024 16:15:07 -0400 Subject: [PATCH 07/18] Match `ActorManager::GetActor` --- src/00_Core/Actor/ActorManager.cpp | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/00_Core/Actor/ActorManager.cpp b/src/00_Core/Actor/ActorManager.cpp index 27acf972..e85dd20f 100644 --- a/src/00_Core/Actor/ActorManager.cpp +++ b/src/00_Core/Actor/ActorManager.cpp @@ -183,3 +183,24 @@ Actor* NONMATCH(ActorManager::FindActorById)(s32 id) { return actor; #endif } + +Actor* ActorManager::GetActor(ActorRef *ref) { + Actor *pActor; + u32 alive; + + alive = ref->index; + + if ((s32)alive < 0) { + return NULL; + } + + pActor = this->mActorTable[alive]; + if (pActor != NULL) { + alive = pActor->mAlive; + if (alive != 0 && ref->id == pActor->mId) { + return pActor; + } + } + + return NULL; +} From 33a875477dc9ec2d352b066002ef1c1f38467174 Mon Sep 17 00:00:00 2001 From: Mike Date: Sun, 5 May 2024 16:47:04 -0400 Subject: [PATCH 08/18] Add fields to `FilterActorBase` --- include/Actor/FilterActorBase.hpp | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/include/Actor/FilterActorBase.hpp b/include/Actor/FilterActorBase.hpp index 092987a7..a94100d0 100644 --- a/include/Actor/FilterActorBase.hpp +++ b/include/Actor/FilterActorBase.hpp @@ -4,13 +4,28 @@ #include "types.h" #include "Actor/ActorRef.hpp" +#include "Physics/AABB.hpp" +#include "Physics/Sphere.hpp" class Actor; class FilterActorBase { public: - /* 0 (vtable) */ - /* 4 */ + /* 00 (vtable) */ + /* 04 */ unk32 mType; + /* 08 */ unk32 mUnk_08; + /* 0c */ unk32 mUnk_0c; + /* 10 */ s32 *mExcludeIds; + /* 14 */ bool mExcludeNotInAABB; + /* 15 */ unk8 mUnk_15; + /* 16 */ unk8 mUnk_16; + /* 17 */ unk8 mUnk_17; + /* 18 */ AABB mAABB; + /* 30 */ bool mExcludeNotInSphere; + /* 31 */ unk8 mUnk_31; + /* 32 */ unk8 mUnk_32; + /* 33 */ unk8 mUnk_33; + /* 34 */ Sphere mSphere; /* 0 */ virtual bool Filter(Actor *actor) = 0; /* 4 */ From 2c2723578779711c79e86ff267a19a449d3e883d Mon Sep 17 00:00:00 2001 From: Mike Date: Sun, 5 May 2024 20:31:06 -0400 Subject: [PATCH 09/18] Match `ActorManager::Actor_vfunc_28` --- src/00_Core/Actor/ActorManager.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/00_Core/Actor/ActorManager.cpp b/src/00_Core/Actor/ActorManager.cpp index e85dd20f..66c431c4 100644 --- a/src/00_Core/Actor/ActorManager.cpp +++ b/src/00_Core/Actor/ActorManager.cpp @@ -204,3 +204,17 @@ Actor* ActorManager::GetActor(ActorRef *ref) { return NULL; } + +void ActorManager::Actor_vfunc_28() { + int i; + Actor **pActor; + + pActor = this->mActorTable; + + for (i = 0; i < this->mMaxActors; i++) { + if (*pActor != NULL) { + (*pActor)->vfunc_28(); + } + pActor = pActor + 1; + } +} From 481da76f4d47df864d460647e905f74684be26a1 Mon Sep 17 00:00:00 2001 From: Mike Date: Sat, 11 May 2024 14:20:09 -0400 Subject: [PATCH 10/18] Match `ActorTypeIsOneOf` --- include/Actor/ActorManager.hpp | 2 +- src/00_Core/Actor/ActorManager.cpp | 17 +++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/include/Actor/ActorManager.hpp b/include/Actor/ActorManager.hpp index 41d09d4a..d513df37 100644 --- a/include/Actor/ActorManager.hpp +++ b/include/Actor/ActorManager.hpp @@ -92,7 +92,7 @@ public: s32 func_ov00_020c3bb0(unk32 param1, s32 *param2); void func_ov00_020c3ce8(unk32 param1, unk32 param2); void Actor_vfunc_28(); - static bool ActorTypeIsOneOf(u32 type, ActorTypeId *types); + static bool ActorTypeIsOneOf(char *type,char **types); }; extern ActorManager *gActorManager; diff --git a/src/00_Core/Actor/ActorManager.cpp b/src/00_Core/Actor/ActorManager.cpp index 66c431c4..9e4d2b88 100644 --- a/src/00_Core/Actor/ActorManager.cpp +++ b/src/00_Core/Actor/ActorManager.cpp @@ -218,3 +218,20 @@ void ActorManager::Actor_vfunc_28() { pActor = pActor + 1; } } + +char nullStr[] = "LLUN"; + +ARM bool ActorManager::ActorTypeIsOneOf(char *type, char **types) { + int i; + bool found = false; + + for (i = 0; *types != nullStr; i++) { + if (type == *types) { + found = true; + break; + } + types += 1; + } + + return found; +} From b7a6355bc660424ccf246ad3bfec25a9560a4ddf Mon Sep 17 00:00:00 2001 From: Mike Date: Sat, 11 May 2024 14:30:20 -0400 Subject: [PATCH 11/18] Match `ActorManager::Actor_vfunc_10` --- .../Actor/ActorManager_Actor_vfunc_10.inc | 25 ------------------- src/00_Core/Actor/ActorManager.cpp | 15 +++-------- 2 files changed, 4 insertions(+), 36 deletions(-) delete mode 100644 asm/ov00/Actor/ActorManager_Actor_vfunc_10.inc diff --git a/asm/ov00/Actor/ActorManager_Actor_vfunc_10.inc b/asm/ov00/Actor/ActorManager_Actor_vfunc_10.inc deleted file mode 100644 index 1818df29..00000000 --- a/asm/ov00/Actor/ActorManager_Actor_vfunc_10.inc +++ /dev/null @@ -1,25 +0,0 @@ - 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 9e4d2b88..7390dcda 100644 --- a/src/00_Core/Actor/ActorManager.cpp +++ b/src/00_Core/Actor/ActorManager.cpp @@ -115,18 +115,12 @@ static void NONMATCH(func_ov00_020c3484)(ActorRef *ref, Actor *actor, unk32 para #endif } -void NONMATCH(ActorManager::Actor_vfunc_10)(u32 param1) { - #ifndef NONMATCHING - #include "../asm/ov00/Actor/ActorManager_Actor_vfunc_10.inc" - #else +ARM void ActorManager::Actor_vfunc_10(u32 param1) { Actor *actor; - Actor **currentActor; - u32 uVar1; int i; - uVar1 = param1; - - currentActor = this->mActorTable; + u32 uVar1 = param1; + Actor **currentActor = this->mActorTable; for (i = 0; i < this->mMaxActorIndex; ++i) { actor = *currentActor; @@ -136,10 +130,9 @@ void NONMATCH(ActorManager::Actor_vfunc_10)(u32 param1) { actor->vfunc_10(param1); } } - currentActor = currentActor + 1; + currentActor += 1; } return; - #endif } Actor* NONMATCH(ActorManager::FindActorById)(s32 id) { From 902f3bbce4ab442abd897df1d084e4913774c787 Mon Sep 17 00:00:00 2001 From: Mike Date: Sat, 11 May 2024 14:44:34 -0400 Subject: [PATCH 12/18] Match `ActorManager::FindActorById` --- .../ActorManager_Actor_FindActorById.inc | 43 ------------------- src/00_Core/Actor/ActorManager.cpp | 16 +++---- 2 files changed, 6 insertions(+), 53 deletions(-) delete mode 100644 asm/ov00/Actor/ActorManager_Actor_FindActorById.inc 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) { From 5c3e3aee99af35884462f518a9bc1fbf65ae92d4 Mon Sep 17 00:00:00 2001 From: Mike Date: Sun, 2 Jun 2024 15:40:04 -0400 Subject: [PATCH 13/18] Remove nonmatching function, fix static function type --- asm/ov00/Actor/ActorManager.s | 10 +-- .../Actor/ActorManager_func_ov00_020c3484.inc | 63 ------------------- src/00_Core/Actor/ActorManager.cpp | 62 +----------------- 3 files changed, 6 insertions(+), 129 deletions(-) delete mode 100644 asm/ov00/Actor/ActorManager_func_ov00_020c3484.inc diff --git a/asm/ov00/Actor/ActorManager.s b/asm/ov00/Actor/ActorManager.s index eeb3471b..eba45425 100644 --- a/asm/ov00/Actor/ActorManager.s +++ b/asm/ov00/Actor/ActorManager.s @@ -506,7 +506,7 @@ _020c3a14: mov r1, r8 ldr r0, [r0, r5, lsl #2] ldr r0, [r0, #4] - bl _ZN12ActorManager16ActorTypeIsOneOfEjPj + bl _Z16ActorTypeIsOneOfPcPS_ cmp r7, r0 beq _020c3b08 _020c3a60: @@ -791,9 +791,9 @@ _020c3e04: ldmia sp!, {r4, r5, r6, pc} arm_func_end _ZN12ActorManager14Actor_vfunc_28Ev - .global _ZN12ActorManager16ActorTypeIsOneOfEjPj - arm_func_start _ZN12ActorManager16ActorTypeIsOneOfEjPj -_ZN12ActorManager16ActorTypeIsOneOfEjPj: ; 0x020c3e1c + .global _Z16ActorTypeIsOneOfPcPS_ + arm_func_start _Z16ActorTypeIsOneOfPcPS_ +_Z16ActorTypeIsOneOfPcPS_: ; 0x020c3e1c ldr ip, [r1] ldr r2, _020c3e50 ; =0x4e554c4c mov r3, #0 @@ -811,7 +811,7 @@ _020c3e48: bx lr .align 2, 0 _020c3e50: .word 0x4e554c4c - arm_func_end _ZN12ActorManager16ActorTypeIsOneOfEjPj + arm_func_end _Z16ActorTypeIsOneOfPcPS_ .data .global data_ov00_020e72a8 diff --git a/asm/ov00/Actor/ActorManager_func_ov00_020c3484.inc b/asm/ov00/Actor/ActorManager_func_ov00_020c3484.inc deleted file mode 100644 index 2fa2d9dc..00000000 --- a/asm/ov00/Actor/ActorManager_func_ov00_020c3484.inc +++ /dev/null @@ -1,63 +0,0 @@ - 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 diff --git a/src/00_Core/Actor/ActorManager.cpp b/src/00_Core/Actor/ActorManager.cpp index 6408d6aa..d3e7f13f 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) {} -Actor* ActorManager::FindActorById(u32 id) {} Actor* ActorManager::GetActor(ActorRef *ref) {} bool FilterActor::Filter(Actor *actor) {} s32 ActorManager::FilterActors(FilterActorBase *filter, ActorList *filteredActors) {} @@ -14,7 +13,6 @@ s32 ActorManager::func_ov00_020c3b2c(s32 *param1) {} s32 ActorManager::func_ov00_020c3bb0(unk32 param1, s32 *param2) {} void ActorManager::func_ov00_020c3ce8(unk32 param1, unk32 param2) {} void ActorManager::Actor_vfunc_28() {} -bool ActorManager::ActorTypeIsOneOf(u32 type, ActorTypeId *types) {} extern void func_ov00_020c3f54(void *, u32 param2); @@ -57,64 +55,6 @@ 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 -} - ARM void ActorManager::Actor_vfunc_10(u32 param1) { Actor *actor; int i; @@ -210,7 +150,7 @@ void ActorManager::Actor_vfunc_28() { char nullStr[] = "LLUN"; -ARM bool ActorManager::ActorTypeIsOneOf(char *type, char **types) { +ARM static bool ActorTypeIsOneOf(char *type, char **types) { int i; bool found = false; From 52d4fce35141121262d0a93b64f2f778ef89767a Mon Sep 17 00:00:00 2001 From: Aetias Date: Mon, 21 Oct 2024 23:32:28 +0200 Subject: [PATCH 14/18] Decomp `ActorManager` --- config/eur/arm9/overlays/ov000/symbols.txt | 10 +- config/usa/arm9/overlays/ov000/symbols.txt | 10 +- include/Actor/ActorManager.hpp | 14 +- include/Actor/FilterActorBase.hpp | 14 -- include/DTCM/UnkStruct_027e103c.hpp | 23 +++ include/Physics/AABB.hpp | 2 + include/Physics/Sphere.hpp | 2 + src/00_Core/Actor/ActorManager.cpp | 209 ++++++++++++++++++--- 8 files changed, 224 insertions(+), 60 deletions(-) create mode 100644 include/DTCM/UnkStruct_027e103c.hpp diff --git a/config/eur/arm9/overlays/ov000/symbols.txt b/config/eur/arm9/overlays/ov000/symbols.txt index 009ce35d..1deef029 100644 --- a/config/eur/arm9/overlays/ov000/symbols.txt +++ b/config/eur/arm9/overlays/ov000/symbols.txt @@ -915,7 +915,7 @@ func_ov000_0208e6f0 kind:function(arm,size=0x14) addr:0x208e6f0 func_ov000_0208e704 kind:function(arm,size=0x14) addr:0x208e704 func_ov000_0208e718 kind:function(arm,size=0x14) addr:0x208e718 func_ov000_0208e72c kind:function(arm,size=0x78) addr:0x208e72c -func_ov000_0208e7a4 kind:function(arm,size=0x44) addr:0x208e7a4 +_ZN4AABB12ContainsInXZEP5Vec3p kind:function(arm,size=0x44) addr:0x208e7a4 func_ov000_0208e7e8 kind:function(arm,size=0x44) addr:0x208e7e8 func_ov000_0208e82c kind:function(arm,size=0x50) addr:0x208e82c func_ov000_0208e87c kind:function(arm,size=0x4f8) addr:0x208e87c @@ -927,7 +927,7 @@ func_ov000_0208ee90 kind:function(arm,size=0x1a0) addr:0x208ee90 func_ov000_0208f030 kind:function(arm,size=0x170) addr:0x208f030 func_ov000_0208f1a0 kind:function(arm,size=0xf4) addr:0x208f1a0 func_ov000_0208f294 kind:function(arm,size=0x84) addr:0x208f294 -func_ov000_0208f318 kind:function(arm,size=0x5c) addr:0x208f318 +_ZN6Sphere12ContainsInXZEP5Vec3p kind:function(arm,size=0x5c) addr:0x208f318 func_ov000_0208f374 kind:function(arm,size=0x104) addr:0x208f374 func_ov000_0208f478 kind:function(arm,size=0x224) addr:0x208f478 func_ov000_0208f69c kind:function(arm,size=0x38) addr:0x208f69c @@ -2838,9 +2838,9 @@ func_ov000_020c336c kind:function(thumb,size=0x1c) addr:0x20c336c func_ov000_020c3388 kind:function(thumb,size=0x28) addr:0x20c3388 func_ov000_020c33b0 kind:function(thumb,size=0x24) addr:0x20c33b0 _ZN12ActorManager11DeleteActorEjb kind:function(arm,size=0xb0) addr:0x20c33d4 -_ZN12ActorManager18func_ov00_020c3484EP8ActorRefP5Actori kind:function(arm,size=0xf8) addr:0x20c3484 +_ZN12ActorManager18func_ov00_020c3484EP8ActorRefPS_i kind:function(arm,size=0xf8) addr:0x20c3484 _ZN12ActorManager14Actor_vfunc_10Ej kind:function(arm,size=0x5c) addr:0x20c357c -_ZN12ActorManager13FindActorByIdEj kind:function(arm,size=0x9c) addr:0x20c35d8 +_ZN12ActorManager13FindActorByIdEi kind:function(arm,size=0x9c) addr:0x20c35d8 _ZN12ActorManager8GetActorEP8ActorRef kind:function(arm,size=0x40) addr:0x20c3674 _ZN11FilterActor6FilterEP5Actor kind:function(arm,size=0x138) addr:0x20c36b4 _ZN12ActorManager12FilterActorsEP15FilterActorBaseP9ActorList kind:function(arm,size=0xa8) addr:0x20c37ec @@ -2848,7 +2848,7 @@ _ZN12ActorManager15FindActorByTypeEP8ActorRefPS_j kind:function(arm,size=0x68) a _ZN12ActorManager22FindNearestActorOfTypeEP8ActorRefPS_jP5Vec3p kind:function(arm,size=0x90) addr:0x20c38fc _ZN12ActorManager18func_ov00_020c398cEj kind:function(arm,size=0x10) addr:0x20c398c _ZN12ActorManager18func_ov00_020c399cEjP8Cylinder kind:function(arm,size=0x10) addr:0x20c399c -_ZN12ActorManager18func_ov00_020c39acEjPKjb kind:function(arm,size=0x180) addr:0x20c39ac +_ZN12ActorManager18func_ov00_020c39acEjPjb kind:function(arm,size=0x180) addr:0x20c39ac _ZN12ActorManager18func_ov00_020c3b2cEPi kind:function(arm,size=0x84) addr:0x20c3b2c _ZN12ActorManager18func_ov00_020c3bb0EiPi kind:function(arm,size=0x138) addr:0x20c3bb0 _ZN12ActorManager18func_ov00_020c3ce8Eii kind:function(arm,size=0xe8) addr:0x20c3ce8 diff --git a/config/usa/arm9/overlays/ov000/symbols.txt b/config/usa/arm9/overlays/ov000/symbols.txt index ba0a3d3b..b5f107f9 100644 --- a/config/usa/arm9/overlays/ov000/symbols.txt +++ b/config/usa/arm9/overlays/ov000/symbols.txt @@ -915,7 +915,7 @@ func_ov000_0208e6f0 kind:function(arm,size=0x14) addr:0x208e690 func_ov000_0208e704 kind:function(arm,size=0x14) addr:0x208e6a4 func_ov000_0208e718 kind:function(arm,size=0x14) addr:0x208e6b8 func_ov000_0208e72c kind:function(arm,size=0x78) addr:0x208e6cc -func_ov000_0208e7a4 kind:function(arm,size=0x44) addr:0x208e744 +_ZN4AABB12ContainsInXZEP5Vec3p kind:function(arm,size=0x44) addr:0x208e744 func_ov000_0208e7e8 kind:function(arm,size=0x44) addr:0x208e788 func_ov000_0208e82c kind:function(arm,size=0x50) addr:0x208e7cc func_ov000_0208e87c kind:function(arm,size=0x4f8) addr:0x208e81c @@ -927,7 +927,7 @@ func_ov000_0208ee90 kind:function(arm,size=0x1a0) addr:0x208ee30 func_ov000_0208f030 kind:function(arm,size=0x170) addr:0x208efd0 func_ov000_0208f1a0 kind:function(arm,size=0xf4) addr:0x208f140 func_ov000_0208f294 kind:function(arm,size=0x84) addr:0x208f234 -func_ov000_0208f318 kind:function(arm,size=0x5c) addr:0x208f2b8 +_ZN6Sphere12ContainsInXZEP5Vec3p kind:function(arm,size=0x5c) addr:0x208f2b8 func_ov000_0208f374 kind:function(arm,size=0x104) addr:0x208f314 func_ov000_0208f478 kind:function(arm,size=0x224) addr:0x208f418 func_ov000_0208f69c kind:function(arm,size=0x38) addr:0x208f63c @@ -2838,9 +2838,9 @@ func_ov000_020c336c kind:function(thumb,size=0x1c) addr:0x20c330c func_ov000_020c3388 kind:function(thumb,size=0x28) addr:0x20c3328 func_ov000_020c33b0 kind:function(thumb,size=0x24) addr:0x20c3350 _ZN12ActorManager11DeleteActorEjb kind:function(arm,size=0xb0) addr:0x20c3374 -_ZN12ActorManager18func_ov00_020c3484EP8ActorRefP5Actori kind:function(arm,size=0xf8) addr:0x20c3424 +_ZN12ActorManager18func_ov00_020c3484EP8ActorRefPS_i kind:function(arm,size=0xf8) addr:0x20c3424 _ZN12ActorManager14Actor_vfunc_10Ej kind:function(arm,size=0x5c) addr:0x20c351c -_ZN12ActorManager13FindActorByIdEj kind:function(arm,size=0x9c) addr:0x20c3578 +_ZN12ActorManager13FindActorByIdEi kind:function(arm,size=0x9c) addr:0x20c3578 _ZN12ActorManager8GetActorEP8ActorRef kind:function(arm,size=0x40) addr:0x20c3614 _ZN11FilterActor6FilterEP5Actor kind:function(arm,size=0x138) addr:0x20c3654 _ZN12ActorManager12FilterActorsEP15FilterActorBaseP9ActorList kind:function(arm,size=0xa8) addr:0x20c378c @@ -2848,7 +2848,7 @@ _ZN12ActorManager15FindActorByTypeEP8ActorRefPS_j kind:function(arm,size=0x68) a _ZN12ActorManager22FindNearestActorOfTypeEP8ActorRefPS_jP5Vec3p kind:function(arm,size=0x90) addr:0x20c389c _ZN12ActorManager18func_ov00_020c398cEj kind:function(arm,size=0x10) addr:0x20c392c _ZN12ActorManager18func_ov00_020c399cEjP8Cylinder kind:function(arm,size=0x10) addr:0x20c393c -_ZN12ActorManager18func_ov00_020c39acEjPKjb kind:function(arm,size=0x180) addr:0x20c394c +_ZN12ActorManager18func_ov00_020c39acEjPjb kind:function(arm,size=0x180) addr:0x20c394c _ZN12ActorManager18func_ov00_020c3b2cEPi kind:function(arm,size=0x84) addr:0x20c3acc _ZN12ActorManager18func_ov00_020c3bb0EiPi kind:function(arm,size=0x138) addr:0x20c3b50 _ZN12ActorManager18func_ov00_020c3ce8Eii kind:function(arm,size=0xe8) addr:0x20c3c88 diff --git a/include/Actor/ActorManager.hpp b/include/Actor/ActorManager.hpp index 7b3b1b46..d4acdc5f 100644 --- a/include/Actor/ActorManager.hpp +++ b/include/Actor/ActorManager.hpp @@ -21,13 +21,13 @@ class FilterActor : public FilterActorBase { /* 04 */ u32 mType; /* 08 */ s32 mUnk_08; /* 0c */ s32 mUnk_0c; - /* 10 */ s32 *mExcludeIds; // list of excluded actor ids, terminated by -1 + /* 10 */ ActorRef *mExcludeRefs; // list of excluded actor ids, terminated by -1 /* 14 */ bool mExcludeNotInAABB; /* 15 */ unk8 mUnk_15[3]; /* 18 */ AABB mAABB; /* 30 */ bool mExcludeNotInSphere; /* 31 */ unk8 mUnk_1a[3]; - /* 34 */ Sphere sphere; + /* 34 */ Sphere mSphere; /* 44 */ /* 0 */ virtual bool Filter(Actor *actor) override; @@ -78,21 +78,21 @@ public: /* c4 */ void DeleteActor(u32 index, bool param2); - static void func_ov00_020c3484(ActorRef *ref, Actor *actor, unk32 param3); + static void func_ov00_020c3484(ActorRef *ref, ActorManager *actorMgr, unk32 param3); void Actor_vfunc_10(u32 param1); Actor *FindActorById(s32 id); Actor *GetActor(ActorRef *ref); s32 FilterActors(FilterActorBase *filter, ActorList *filteredActors); - static void FindActorByType(ActorRef *ref, ActorManager *manager, ActorTypeId type); - static void FindNearestActorOfType(ActorRef *ref, ActorManager *manager, ActorTypeId type, Vec3p *pos); + static void FindActorByType(ActorRef *ref, ActorManager *actorMgr, ActorTypeId type); + static void FindNearestActorOfType(ActorRef *ref, ActorManager *actorMgr, ActorTypeId type, Vec3p *pos); bool func_ov00_020c398c(u32 index); void func_ov00_020c399c(u32 index, Cylinder *cylinder); - Actor *func_ov00_020c39ac(u32 index, const ActorTypeId *actorTypes, bool param3); + Actor *func_ov00_020c39ac(u32 index, ActorTypeId *actorTypes, bool param3); s32 func_ov00_020c3b2c(s32 *param1); s32 func_ov00_020c3bb0(unk32 param1, s32 *param2); void func_ov00_020c3ce8(unk32 param1, unk32 param2); void Actor_vfunc_28(); - static bool ActorTypeIsOneOf(char *type, char **types); + static bool ActorTypeIsOneOf(ActorTypeId type, ActorTypeId *types); }; extern ActorManager *gActorManager; diff --git a/include/Actor/FilterActorBase.hpp b/include/Actor/FilterActorBase.hpp index a94100d0..8d721195 100644 --- a/include/Actor/FilterActorBase.hpp +++ b/include/Actor/FilterActorBase.hpp @@ -12,20 +12,6 @@ class Actor; class FilterActorBase { public: /* 00 (vtable) */ - /* 04 */ unk32 mType; - /* 08 */ unk32 mUnk_08; - /* 0c */ unk32 mUnk_0c; - /* 10 */ s32 *mExcludeIds; - /* 14 */ bool mExcludeNotInAABB; - /* 15 */ unk8 mUnk_15; - /* 16 */ unk8 mUnk_16; - /* 17 */ unk8 mUnk_17; - /* 18 */ AABB mAABB; - /* 30 */ bool mExcludeNotInSphere; - /* 31 */ unk8 mUnk_31; - /* 32 */ unk8 mUnk_32; - /* 33 */ unk8 mUnk_33; - /* 34 */ Sphere mSphere; /* 0 */ virtual bool Filter(Actor *actor) = 0; /* 4 */ diff --git a/include/DTCM/UnkStruct_027e103c.hpp b/include/DTCM/UnkStruct_027e103c.hpp new file mode 100644 index 00000000..c95f759a --- /dev/null +++ b/include/DTCM/UnkStruct_027e103c.hpp @@ -0,0 +1,23 @@ +#pragma once + +#include "global.h" +#include "types.h" + +struct UnkStruct_027e103c { + /* 00 */ unk32 mUnk_00; + /* 04 */ unk32 mUnk_04; + /* 08 */ unk32 mUnk_08; + /* 0c */ unk32 mUnk_0c; + /* 10 */ unk32 mUnk_10; + /* 14 */ unk16 *mUnk_14; + /* 18 */ unk32 mUnk_18; + /* 1c */ unk16 mUnk_1c; + /* 1e */ unk16 mUnk_1a; + /* 20 */ unk16 mUnk_20; + /* 22 */ s16 mUnk_22; + /* 24 */ u8 mUnk_24; + /* 25 */ unk8 mUnk_25[7]; + /* 2c */ +}; + +extern UnkStruct_027e103c *data_027e103c; diff --git a/include/Physics/AABB.hpp b/include/Physics/AABB.hpp index 358aed1c..07f64910 100644 --- a/include/Physics/AABB.hpp +++ b/include/Physics/AABB.hpp @@ -8,4 +8,6 @@ struct AABB { Vec3p min; Vec3p max; + + bool ContainsInXZ(Vec3p *vec); }; diff --git a/include/Physics/Sphere.hpp b/include/Physics/Sphere.hpp index eaed104d..eb88f74d 100644 --- a/include/Physics/Sphere.hpp +++ b/include/Physics/Sphere.hpp @@ -8,4 +8,6 @@ struct Sphere { Vec3p pos; int radius; + + bool ContainsInXZ(Vec3p *vec); }; diff --git a/src/00_Core/Actor/ActorManager.cpp b/src/00_Core/Actor/ActorManager.cpp index 4438c7a1..7809ad38 100644 --- a/src/00_Core/Actor/ActorManager.cpp +++ b/src/00_Core/Actor/ActorManager.cpp @@ -1,29 +1,18 @@ #include "Actor/ActorManager.hpp" +#include "DTCM/UnkStruct_027e103c.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) {} -s32 ActorManager::FilterActors(FilterActorBase *filter, ActorList *filteredActors) {} -void ActorManager::FindActorByType(ActorRef *ref, ActorManager *manager, ActorTypeId type) {} -void ActorManager::FindNearestActorOfType(ActorRef *ref, ActorManager *manager, ActorTypeId type, Vec3p *pos) {} -bool ActorManager::func_ov00_020c398c(u32 index) {} -void ActorManager::func_ov00_020c399c(u32 index, Cylinder *cylinder) {} -Actor *ActorManager::func_ov00_020c39ac(u32 index, const ActorTypeId *actorTypes, bool param3) {} -s32 ActorManager::func_ov00_020c3b2c(s32 *param1) {} -s32 ActorManager::func_ov00_020c3bb0(unk32 param1, s32 *param2) {} -void ActorManager::func_ov00_020c3ce8(unk32 param1, unk32 param2) {} -void ActorManager::Actor_vfunc_28() {} +char *gShipParts[8] = {"anc", "bow", "hul", "can", "dco", "pdl", "fnl", "brg"}; -extern void func_ov00_020c3f54(void *, u32 param2); -extern s32 *data_027e103c; -extern s32 *data_027e077c; -extern s32 data_02056be4[]; +extern "C" Cylinder *func_ov000_020c3ef0(void *, u32 index); +extern "C" bool func_ov000_020c3f08(void *, u32 index); +extern "C" void func_ov000_020c3f3c(void *, u32 index, Cylinder *cylinder); +extern "C" void func_ov000_020c3f54(void *, u32 param2); +extern s32 data_027e077c; +extern u8 data_02056be4[]; ARM void ActorManager::DeleteActor(u32 index, bool param2) { if (!param2) { - func_ov00_020c3f54(this->mUnk_14, index & 0xffff); + func_ov000_020c3f54(this->mUnk_14, index & 0xffff); this->mActorTable[index]->StopLinkFollow(); } @@ -56,6 +45,34 @@ ARM void ActorManager::DeleteActor(u32 index, bool param2) { return; } +ARM void ActorManager::func_ov00_020c3484(ActorRef *ref, ActorManager *actorMgr, unk32 param3) { + ref->Reset(); + if (data_027e103c->mUnk_24 == 0) return; + + Actor **actorIter = actorMgr->mActorTable; + q20 minDistance = 0x7fffffff; + u8 unkByte = data_02056be4[data_027e077c]; + bool unk1 = (unkByte & 1) != 0; + Actor **actorTableEnd = actorIter + actorMgr->mMaxActorIndex; + + for (; actorIter < actorTableEnd; actorIter++) { + Actor *actor = *actorIter; + if (actor != NULL && actor->mAlive) { + if (actor->func_ov00_020c27a8(param3)) { + if (actor->mUnk_0a4.mUnk_00 || unk1) { + if (actor->IsHitboxTouched(false)) { + q20 distance = actor->DistanceToLink(); + if (distance < minDistance) { + *ref = actor->mRef; + minDistance = distance; + } + } + } + } + } + } +} + ARM void ActorManager::Actor_vfunc_10(u32 param1) { Actor *actor; int i; @@ -89,7 +106,7 @@ ARM Actor *ActorManager::FindActorById(s32 id) { if ((cacheIndex >= 0) && (cacheIndex < this->mMaxActorIndex)) { pActor = this->mActorTable; if (pActor[cacheIndex] != NULL) { - if ((Actor **) (u32) pActor[cacheIndex]->mAlive != NULL && id == pActor[cacheIndex]->mId) { + if ((Actor **) (u32) pActor[cacheIndex]->mAlive != NULL && id == pActor[cacheIndex]->mRef.id) { actor = pActor[cacheIndex]; goto ret; } @@ -102,7 +119,7 @@ ARM Actor *ActorManager::FindActorById(s32 id) { for (; pActor < lastActor; pActor = pActor + 1) { if (*pActor != NULL) { actorId = (u32) (*pActor)->mAlive; - if (actorId != 0 && id == (*pActor)->mId) { + if (actorId != 0 && id == (*pActor)->mRef.id) { actor = *pActor; break; } @@ -114,7 +131,7 @@ ret: return actor; } -Actor *ActorManager::GetActor(ActorRef *ref) { +ARM Actor *ActorManager::GetActor(ActorRef *ref) { Actor *pActor; u32 alive; @@ -127,7 +144,7 @@ Actor *ActorManager::GetActor(ActorRef *ref) { pActor = this->mActorTable[alive]; if (pActor != NULL) { alive = pActor->mAlive; - if (alive != 0 && ref->id == pActor->mId) { + if (alive != 0 && ref->id == pActor->mRef.id) { return pActor; } } @@ -135,7 +152,143 @@ Actor *ActorManager::GetActor(ActorRef *ref) { return NULL; } -void ActorManager::Actor_vfunc_28() { +ARM bool FilterActor::Filter(Actor *actor) { + if (mType != actor->mType) return false; + if (mUnk_08 != -1 && mUnk_08 != actor->mUnk_034) return false; + if (mExcludeRefs != NULL) { + for (s32 i = 0; mExcludeRefs[i].id != -1; ++i) { + if (mExcludeRefs[i].id == actor->mRef.id) return false; + } + } + if (mExcludeNotInAABB) { + Vec3p pos; + pos.x = actor->mPos.x; + pos.y = actor->mPos.y; + pos.z = actor->mPos.z; + bool result = !mAABB.ContainsInXZ(&pos); + if (result) return false; + } + if (mExcludeNotInSphere) { + Vec3p pos; + pos.x = actor->mPos.x; + pos.y = actor->mPos.y; + pos.z = actor->mPos.z; + bool result = !mSphere.ContainsInXZ(&pos); + if (result) return false; + } + return true; +} + +ARM s32 ActorManager::FilterActors(FilterActorBase *filter, ActorList *filteredActors) { + s32 numApplied = 0; + if (filteredActors != NULL) filteredActors->length = 0; + + Actor **actorIter = mActorTable; + Actor **actorTableEnd = actorIter + mMaxActorIndex; + for (; actorIter < actorTableEnd; actorIter++) { + Actor *actor = *actorIter; + if (actor != NULL && actor->mAlive && filter->Filter(actor)) { + if (filteredActors != NULL && filteredActors->length < filteredActors->capacity) { + ActorRef *ref = &filteredActors->actors[filteredActors->length]; + + *ref = (*actorIter)->mRef; + filteredActors->length += 1; + } + numApplied += 1; + } + } + + return numApplied; +} + +ARM void ActorManager::FindActorByType(ActorRef *ref, ActorManager *actorMgr, ActorTypeId type) { + ref->Reset(); + + Actor **actorIter = actorMgr->mActorTable; + Actor **actorTableEnd = actorIter + actorMgr->mMaxActorIndex; + + for (; actorIter < actorTableEnd; actorIter++) { + Actor *actor = *actorIter; + if (actor != NULL && actor->mAlive && type == actor->mType) { + *ref = actor->mRef; + return; + } + } +} + +ARM void ActorManager::FindNearestActorOfType(ActorRef *ref, ActorManager *actorMgr, ActorTypeId type, Vec3p *pos) { + ref->Reset(); + + q20 minDistance = 0x7fffffff; + + Actor **actorIter = actorMgr->mActorTable; + Actor **actorTableEnd = actorIter + actorMgr->mMaxActorIndex; + + for (; actorIter < actorTableEnd; actorIter++) { + Actor *actor = *actorIter; + if (actor != NULL && actor->mAlive && type == actor->mType) { + q20 distance = Vec3p_Distance(&actor->mPos, pos); + if (distance < minDistance) { + *ref = (*actorIter)->mRef; + minDistance = distance; + } + } + } +} + +ARM bool ActorManager::func_ov00_020c398c(u32 index) { + return func_ov000_020c3f08(mUnk_14, index); +} + +ARM void ActorManager::func_ov00_020c399c(u32 index, Cylinder *cylinder) { + func_ov000_020c3f3c(mUnk_14, index, cylinder); +} + +ARM Actor *ActorManager::func_ov00_020c39ac(u32 index, ActorTypeId *actorTypes, bool param3) { + if (actorTypes == NULL && param3) return NULL; + + Actor *actor = mActorTable[index]; + Actor *result = NULL; + if (actor != NULL && actor->mAlive) { + if (actorTypes != NULL || mMaxActorIndex > 0) { + for (s16 i = 0; i < mMaxActorIndex; ++i) { + if (i != index) { + Actor *otherActor = mActorTable[i]; + if (otherActor != NULL && func_ov000_020c3f08(mUnk_14, i)) { + if ((actorTypes == NULL && !param3) || + (this->ActorTypeIsOneOf(mActorTable[i]->mType, actorTypes) != param3)) + { + Cylinder oldHitbox = otherActor->mHitbox; + // q20 x = otherActor->mHitbox.pos.x; + // q20 y = otherActor->mHitbox.pos.y; + // q20 z = otherActor->mHitbox.pos.z; + // q20 size = otherActor->mHitbox.size; + Cylinder *newHitbox = func_ov000_020c3ef0(mUnk_14, i); + + otherActor->mHitbox = *newHitbox; + if (otherActor->CollidesWith(actor)) result = otherActor; + otherActor->mHitbox = oldHitbox; + // otherActor->mHitbox.pos.x = x; + // otherActor->mHitbox.pos.y = y; + // otherActor->mHitbox.pos.z = z; + // otherActor->mHitbox.size = size; + + if (result != NULL) return result; + } + } + } + } + } + } + + return result; +} + +ARM s32 ActorManager::func_ov00_020c3b2c(s32 *param1) {} +ARM s32 ActorManager::func_ov00_020c3bb0(unk32 param1, s32 *param2) {} +ARM void ActorManager::func_ov00_020c3ce8(unk32 param1, unk32 param2) {} + +ARM void ActorManager::Actor_vfunc_28() { int i; Actor **pActor; @@ -149,13 +302,11 @@ void ActorManager::Actor_vfunc_28() { } } -char nullStr[] = "LLUN"; - -ARM static bool ActorTypeIsOneOf(char *type, char **types) { +ARM bool ActorManager::ActorTypeIsOneOf(ActorTypeId type, ActorTypeId *types) { int i; bool found = false; - for (i = 0; *types != nullStr; i++) { + for (i = 0; *types != ActorTypeId_Null; i++) { if (type == *types) { found = true; break; From bced23471af823a455810168448db457ec03097b Mon Sep 17 00:00:00 2001 From: Aetias Date: Tue, 22 Oct 2024 21:25:59 +0200 Subject: [PATCH 15/18] Decomp `ActorManager` --- config/eur/arm9/overlays/ov000/symbols.txt | 6 +- config/usa/arm9/overlays/ov000/symbols.txt | 6 +- include/Actor/ActorManager.hpp | 2 +- include/Map/MapManager.hpp | 2 +- include/Physics/AABB.hpp | 1 + include/global.h | 2 + src/00_Core/Actor/ActorManager.cpp | 119 +++++++++++++++++---- src/00_Core/Map/MapManager.cpp | 2 +- 8 files changed, 113 insertions(+), 27 deletions(-) diff --git a/config/eur/arm9/overlays/ov000/symbols.txt b/config/eur/arm9/overlays/ov000/symbols.txt index 1deef029..6a56a143 100644 --- a/config/eur/arm9/overlays/ov000/symbols.txt +++ b/config/eur/arm9/overlays/ov000/symbols.txt @@ -579,7 +579,7 @@ _ZN10MapManager18func_ov00_02083614Ei kind:function(arm,size=0x10) addr:0x208361 _ZN10MapManager14GetEntrancePosEP5Vec3pi kind:function(arm,size=0x40) addr:0x2083624 _ZN10MapManager18func_ov00_02083664EP5Vec3pi kind:function(arm,size=0x58) addr:0x2083664 _ZN10MapManager18func_ov00_020836bcEjPi kind:function(arm,size=0x10) addr:0x20836bc -_ZN10MapManager18func_ov00_020836ccEjP4AABBj kind:function(arm,size=0x10) addr:0x20836cc +_ZN10MapManager23GetTriggerBoundingBoxesEjP4AABBj kind:function(arm,size=0x10) addr:0x20836cc _ZN10MapManager18func_ov00_020836dcEii kind:function(arm,size=0x94) addr:0x20836dc _ZN10MapManager18func_ov00_02083770Eji kind:function(arm,size=0x10) addr:0x2083770 _ZN10MapManager18func_ov00_02083780Ei kind:function(arm,size=0x10) addr:0x2083780 @@ -914,7 +914,7 @@ func_ov000_0208e6b0 kind:function(arm,size=0x40) addr:0x208e6b0 func_ov000_0208e6f0 kind:function(arm,size=0x14) addr:0x208e6f0 func_ov000_0208e704 kind:function(arm,size=0x14) addr:0x208e704 func_ov000_0208e718 kind:function(arm,size=0x14) addr:0x208e718 -func_ov000_0208e72c kind:function(arm,size=0x78) addr:0x208e72c +_ZN4AABB8ContainsEP5Vec3p kind:function(arm,size=0x78) addr:0x208e72c _ZN4AABB12ContainsInXZEP5Vec3p kind:function(arm,size=0x44) addr:0x208e7a4 func_ov000_0208e7e8 kind:function(arm,size=0x44) addr:0x208e7e8 func_ov000_0208e82c kind:function(arm,size=0x50) addr:0x208e82c @@ -2851,7 +2851,7 @@ _ZN12ActorManager18func_ov00_020c399cEjP8Cylinder kind:function(arm,size=0x10) a _ZN12ActorManager18func_ov00_020c39acEjPjb kind:function(arm,size=0x180) addr:0x20c39ac _ZN12ActorManager18func_ov00_020c3b2cEPi kind:function(arm,size=0x84) addr:0x20c3b2c _ZN12ActorManager18func_ov00_020c3bb0EiPi kind:function(arm,size=0x138) addr:0x20c3bb0 -_ZN12ActorManager18func_ov00_020c3ce8Eii kind:function(arm,size=0xe8) addr:0x20c3ce8 +_ZN12ActorManager18func_ov00_020c3ce8Eib kind:function(arm,size=0xe8) addr:0x20c3ce8 _ZN12ActorManager14Actor_vfunc_28Ev kind:function(arm,size=0x4c) addr:0x20c3dd0 _ZN12ActorManager16ActorTypeIsOneOfEjPj kind:function(arm,size=0x38) addr:0x20c3e1c func_ov000_020c3e54 kind:function(arm,size=0x8) addr:0x20c3e54 diff --git a/config/usa/arm9/overlays/ov000/symbols.txt b/config/usa/arm9/overlays/ov000/symbols.txt index b5f107f9..8f2b644c 100644 --- a/config/usa/arm9/overlays/ov000/symbols.txt +++ b/config/usa/arm9/overlays/ov000/symbols.txt @@ -579,7 +579,7 @@ _ZN10MapManager18func_ov00_02083614Ei kind:function(arm,size=0x10) addr:0x20835b _ZN10MapManager14GetEntrancePosEP5Vec3pi kind:function(arm,size=0x40) addr:0x20835c4 _ZN10MapManager18func_ov00_02083664EP5Vec3pi kind:function(arm,size=0x58) addr:0x2083604 _ZN10MapManager18func_ov00_020836bcEjPi kind:function(arm,size=0x10) addr:0x208365c -_ZN10MapManager18func_ov00_020836ccEjP4AABBj kind:function(arm,size=0x10) addr:0x208366c +_ZN10MapManager23GetTriggerBoundingBoxesEjP4AABBj kind:function(arm,size=0x10) addr:0x208366c _ZN10MapManager18func_ov00_020836dcEii kind:function(arm,size=0x94) addr:0x208367c _ZN10MapManager18func_ov00_02083770Eji kind:function(arm,size=0x10) addr:0x2083710 _ZN10MapManager18func_ov00_02083780Ei kind:function(arm,size=0x10) addr:0x2083720 @@ -914,7 +914,7 @@ func_ov000_0208e6b0 kind:function(arm,size=0x40) addr:0x208e650 func_ov000_0208e6f0 kind:function(arm,size=0x14) addr:0x208e690 func_ov000_0208e704 kind:function(arm,size=0x14) addr:0x208e6a4 func_ov000_0208e718 kind:function(arm,size=0x14) addr:0x208e6b8 -func_ov000_0208e72c kind:function(arm,size=0x78) addr:0x208e6cc +_ZN4AABB8ContainsEP5Vec3p kind:function(arm,size=0x78) addr:0x208e6cc _ZN4AABB12ContainsInXZEP5Vec3p kind:function(arm,size=0x44) addr:0x208e744 func_ov000_0208e7e8 kind:function(arm,size=0x44) addr:0x208e788 func_ov000_0208e82c kind:function(arm,size=0x50) addr:0x208e7cc @@ -2851,7 +2851,7 @@ _ZN12ActorManager18func_ov00_020c399cEjP8Cylinder kind:function(arm,size=0x10) a _ZN12ActorManager18func_ov00_020c39acEjPjb kind:function(arm,size=0x180) addr:0x20c394c _ZN12ActorManager18func_ov00_020c3b2cEPi kind:function(arm,size=0x84) addr:0x20c3acc _ZN12ActorManager18func_ov00_020c3bb0EiPi kind:function(arm,size=0x138) addr:0x20c3b50 -_ZN12ActorManager18func_ov00_020c3ce8Eii kind:function(arm,size=0xe8) addr:0x20c3c88 +_ZN12ActorManager18func_ov00_020c3ce8Eib kind:function(arm,size=0xe8) addr:0x20c3c88 _ZN12ActorManager14Actor_vfunc_28Ev kind:function(arm,size=0x4c) addr:0x20c3d70 _ZN12ActorManager16ActorTypeIsOneOfEjPj kind:function(arm,size=0x38) addr:0x20c3dbc func_ov000_020c3e54 kind:function(arm,size=0x8) addr:0x20c3df4 diff --git a/include/Actor/ActorManager.hpp b/include/Actor/ActorManager.hpp index d4acdc5f..88a9cc0b 100644 --- a/include/Actor/ActorManager.hpp +++ b/include/Actor/ActorManager.hpp @@ -90,7 +90,7 @@ public: Actor *func_ov00_020c39ac(u32 index, ActorTypeId *actorTypes, bool param3); s32 func_ov00_020c3b2c(s32 *param1); s32 func_ov00_020c3bb0(unk32 param1, s32 *param2); - void func_ov00_020c3ce8(unk32 param1, unk32 param2); + void func_ov00_020c3ce8(unk32 param1, bool param2); void Actor_vfunc_28(); static bool ActorTypeIsOneOf(ActorTypeId type, ActorTypeId *types); }; diff --git a/include/Map/MapManager.hpp b/include/Map/MapManager.hpp index 4e969c5a..ff3397b9 100644 --- a/include/Map/MapManager.hpp +++ b/include/Map/MapManager.hpp @@ -131,7 +131,7 @@ public: bool GetEntrancePos(Vec3p *param_2, unk32 entranceId); bool func_ov00_02083664(Vec3p *param_2, unk32 entranceId); s32 func_ov00_020836bc(u32 param_2, unk32 *param_3); - u32 func_ov00_020836cc(u32 param_2, AABB *param_3, u32 param_4); + s32 GetTriggerBoundingBoxes(u32 param_2, AABB *param_3, u32 param_4); unk8 func_ov00_020836dc(unk32 param_2, unk32 param_3); bool func_ov00_02083770(u32 param_2, unk32 param_3); bool func_ov00_02083780(unk32 param_2); diff --git a/include/Physics/AABB.hpp b/include/Physics/AABB.hpp index 07f64910..ef90ffcd 100644 --- a/include/Physics/AABB.hpp +++ b/include/Physics/AABB.hpp @@ -9,5 +9,6 @@ struct AABB { Vec3p min; Vec3p max; + bool Contains(Vec3p *vec); bool ContainsInXZ(Vec3p *vec); }; diff --git a/include/global.h b/include/global.h index 83b4c87f..617f672f 100644 --- a/include/global.h +++ b/include/global.h @@ -7,6 +7,8 @@ #define SET_FLAG(arr, pos) ((arr)[((u32) (pos)) >> 5] |= 1 << ((pos) & 0x1f)) #define RESET_FLAG(arr, pos) ((arr)[((u32) (pos)) >> 5] &= ~(1 << ((pos) & 0x1f))) +#define ARRAY_LEN(arr) ((sizeof(arr) / sizeof(*arr))) + // Prevent the IDE from reporting errors that the compiler/linker won't report #ifdef __INTELLISENSE__ #endif diff --git a/src/00_Core/Actor/ActorManager.cpp b/src/00_Core/Actor/ActorManager.cpp index 7809ad38..013a8276 100644 --- a/src/00_Core/Actor/ActorManager.cpp +++ b/src/00_Core/Actor/ActorManager.cpp @@ -1,5 +1,6 @@ #include "Actor/ActorManager.hpp" #include "DTCM/UnkStruct_027e103c.hpp" +#include "Map/MapManager.hpp" char *gShipParts[8] = {"anc", "bow", "hul", "can", "dco", "pdl", "fnl", "brg"}; @@ -250,28 +251,30 @@ ARM Actor *ActorManager::func_ov00_020c39ac(u32 index, ActorTypeId *actorTypes, Actor *actor = mActorTable[index]; Actor *result = NULL; if (actor != NULL && actor->mAlive) { - if (actorTypes != NULL || mMaxActorIndex > 0) { - for (s16 i = 0; i < mMaxActorIndex; ++i) { + if (mMaxActorIndex > 0) { + for (u16 i = 0; i < mMaxActorIndex; ++i) { if (i != index) { Actor *otherActor = mActorTable[i]; if (otherActor != NULL && func_ov000_020c3f08(mUnk_14, i)) { if ((actorTypes == NULL && !param3) || - (this->ActorTypeIsOneOf(mActorTable[i]->mType, actorTypes) != param3)) + (param3 != this->ActorTypeIsOneOf(mActorTable[i]->mType, actorTypes))) { - Cylinder oldHitbox = otherActor->mHitbox; - // q20 x = otherActor->mHitbox.pos.x; - // q20 y = otherActor->mHitbox.pos.y; - // q20 z = otherActor->mHitbox.pos.z; - // q20 size = otherActor->mHitbox.size; + Cylinder oldHitbox = mActorTable[i]->mHitbox; Cylinder *newHitbox = func_ov000_020c3ef0(mUnk_14, i); - otherActor->mHitbox = *newHitbox; - if (otherActor->CollidesWith(actor)) result = otherActor; - otherActor->mHitbox = oldHitbox; - // otherActor->mHitbox.pos.x = x; - // otherActor->mHitbox.pos.y = y; - // otherActor->mHitbox.pos.z = z; - // otherActor->mHitbox.size = size; + Actor *otherActor2 = mActorTable[i]; + otherActor2->mHitbox.pos.x = newHitbox->pos.x; + otherActor2->mHitbox.pos.y = newHitbox->pos.y; + otherActor2->mHitbox.pos.z = newHitbox->pos.z; + otherActor2->mHitbox.size = newHitbox->size; + if (mActorTable[i]->CollidesWith(actor)) { + result = mActorTable[i]; + } + + otherActor->mHitbox.pos.x = oldHitbox.pos.x; + otherActor->mHitbox.pos.y = oldHitbox.pos.y; + otherActor->mHitbox.pos.z = oldHitbox.pos.z; + otherActor->mHitbox.size = oldHitbox.size; if (result != NULL) return result; } @@ -284,9 +287,89 @@ ARM Actor *ActorManager::func_ov00_020c39ac(u32 index, ActorTypeId *actorTypes, return result; } -ARM s32 ActorManager::func_ov00_020c3b2c(s32 *param1) {} -ARM s32 ActorManager::func_ov00_020c3bb0(unk32 param1, s32 *param2) {} -ARM void ActorManager::func_ov00_020c3ce8(unk32 param1, unk32 param2) {} +ARM s32 ActorManager::func_ov00_020c3b2c(s32 *param1) { + if (param1 != NULL) *param1 = 0; + + s32 i; + s32 numAlive = 0; + + Actor **actorIter = mActorTable; + + for (i = 0; i < mMaxActorIndex; ++i, ++actorIter) { + Actor *actor = *actorIter; + if (actor != NULL && actor->mAlive && actor->mUnk_128) { + if (param1 != NULL && actor->mUnk_120 > 0) { + *param1 += 1; + } + numAlive += 1; + } + } + + return numAlive; +} + +ARM s32 ActorManager::func_ov00_020c3bb0(unk32 param1, s32 *param2) { + if (param2 != NULL) *param2 = 0; + + AABB boxes[8]; + s32 numBoxes = gMapManager->GetTriggerBoundingBoxes(param1, boxes, ARRAY_LEN(boxes)); + if (numBoxes <= 0) return 0; + + s32 i; + s32 numInBox = 0; + bool isInBox; + + Actor **actorIter = mActorTable; + for (i = 0; i < mMaxActorIndex; ++i, ++actorIter) { + Actor *actor = *actorIter; + if (actor != NULL && actor->mAlive && actor->mUnk_128) { + isInBox = false; + for (s32 j = 0; j < numBoxes; ++j) { + Actor *actor2 = *actorIter; + Vec3p pos; + pos.x = actor2->mPos.x; + pos.y = actor2->mPos.y; + pos.z = actor2->mPos.z; + if (boxes[j].ContainsInXZ(&pos)) { + isInBox = true; + break; + } + } + if (isInBox) { + if (param2 != NULL && (*actorIter)->mUnk_120 > 0) { + *param2 += 1; + } + numInBox += 1; + } + } + } + + return numInBox; +} + +ARM void ActorManager::func_ov00_020c3ce8(unk32 param1, bool param2) { + AABB boxes[8]; + s32 numBoxes = gMapManager->GetTriggerBoundingBoxes(param1, boxes, ARRAY_LEN(boxes)); + if (numBoxes <= 0) return; + + s32 i; + Actor **actorIter = mActorTable; + for (i = 0; i < mMaxActorIndex; ++i, ++actorIter) { + Actor *actor = *actorIter; + if (actor != NULL && actor->mAlive && actor->mUnk_128) { + for (s32 j = 0; j < numBoxes; ++j) { + Actor *actor2 = *actorIter; + Vec3p pos; + pos.x = actor2->mPos.x; + pos.y = actor2->mPos.y; + pos.z = actor2->mPos.z; + if (boxes[j].Contains(&pos)) { + (*actorIter)->SetUnk_129(param2); + } + } + } + } +} ARM void ActorManager::Actor_vfunc_28() { int i; diff --git a/src/00_Core/Map/MapManager.cpp b/src/00_Core/Map/MapManager.cpp index 3dc72153..69be3117 100644 --- a/src/00_Core/Map/MapManager.cpp +++ b/src/00_Core/Map/MapManager.cpp @@ -91,7 +91,7 @@ unk8 MapManager::func_ov00_02083614(s32 param_2) {} bool MapManager::GetEntrancePos(Vec3p *param_2, unk32 entranceId) {} bool MapManager::func_ov00_02083664(Vec3p *param_2, unk32 entranceId) {} s32 MapManager::func_ov00_020836bc(u32 param_2, unk32 *param_3) {} -u32 MapManager::func_ov00_020836cc(u32 param_2, AABB *param_3, u32 param_4) {} +s32 MapManager::GetTriggerBoundingBoxes(u32 param_2, AABB *param_3, u32 param_4) {} unk8 MapManager::func_ov00_020836dc(unk32 param_2, unk32 param_3) {} bool MapManager::func_ov00_02083770(u32 param_2, unk32 param_3) {} bool MapManager::func_ov00_02083780(unk32 param_2) {} From 9846ef3d665f15143e88111416569dda42ead1d3 Mon Sep 17 00:00:00 2001 From: Aetias Date: Wed, 23 Oct 2024 23:25:15 +0200 Subject: [PATCH 16/18] Decomp `ActorManager` (97%) --- src/00_Core/Actor/ActorManager.cpp | 61 +++++++++++++++--------------- 1 file changed, 30 insertions(+), 31 deletions(-) diff --git a/src/00_Core/Actor/ActorManager.cpp b/src/00_Core/Actor/ActorManager.cpp index 013a8276..219778a0 100644 --- a/src/00_Core/Actor/ActorManager.cpp +++ b/src/00_Core/Actor/ActorManager.cpp @@ -50,8 +50,8 @@ ARM void ActorManager::func_ov00_020c3484(ActorRef *ref, ActorManager *actorMgr, ref->Reset(); if (data_027e103c->mUnk_24 == 0) return; - Actor **actorIter = actorMgr->mActorTable; q20 minDistance = 0x7fffffff; + Actor **actorIter = actorMgr->mActorTable; u8 unkByte = data_02056be4[data_027e077c]; bool unk1 = (unkByte & 1) != 0; Actor **actorTableEnd = actorIter + actorMgr->mMaxActorIndex; @@ -60,11 +60,11 @@ ARM void ActorManager::func_ov00_020c3484(ActorRef *ref, ActorManager *actorMgr, Actor *actor = *actorIter; if (actor != NULL && actor->mAlive) { if (actor->func_ov00_020c27a8(param3)) { - if (actor->mUnk_0a4.mUnk_00 || unk1) { - if (actor->IsHitboxTouched(false)) { - q20 distance = actor->DistanceToLink(); + if ((*actorIter)->mUnk_0a4.mUnk_00 || unk1) { + if ((*actorIter)->IsHitboxTouched(false)) { + q20 distance = (*actorIter)->DistanceToLink(); if (distance < minDistance) { - *ref = actor->mRef; + *ref = (*actorIter)->mRef; minDistance = distance; } } @@ -158,7 +158,8 @@ ARM bool FilterActor::Filter(Actor *actor) { if (mUnk_08 != -1 && mUnk_08 != actor->mUnk_034) return false; if (mExcludeRefs != NULL) { for (s32 i = 0; mExcludeRefs[i].id != -1; ++i) { - if (mExcludeRefs[i].id == actor->mRef.id) return false; + volatile Actor *actor2 = actor; + if (mExcludeRefs[i].id == actor2->mRef.id) return false; } } if (mExcludeNotInAABB) { @@ -251,33 +252,31 @@ ARM Actor *ActorManager::func_ov00_020c39ac(u32 index, ActorTypeId *actorTypes, Actor *actor = mActorTable[index]; Actor *result = NULL; if (actor != NULL && actor->mAlive) { - if (mMaxActorIndex > 0) { - for (u16 i = 0; i < mMaxActorIndex; ++i) { - if (i != index) { - Actor *otherActor = mActorTable[i]; - if (otherActor != NULL && func_ov000_020c3f08(mUnk_14, i)) { - if ((actorTypes == NULL && !param3) || - (param3 != this->ActorTypeIsOneOf(mActorTable[i]->mType, actorTypes))) - { - Cylinder oldHitbox = mActorTable[i]->mHitbox; - Cylinder *newHitbox = func_ov000_020c3ef0(mUnk_14, i); + for (u16 i = 0; i < mMaxActorIndex; ++i) { + if (i != index) { + Actor *otherActor = mActorTable[i]; + if (otherActor != NULL && func_ov000_020c3f08(mUnk_14, i)) { + if ((actorTypes != NULL && !param3) && + (param3 != this->ActorTypeIsOneOf(mActorTable[i]->mType, actorTypes))) + { + Cylinder oldHitbox = mActorTable[i]->mHitbox; + Cylinder *newHitbox = func_ov000_020c3ef0(mUnk_14, i); - Actor *otherActor2 = mActorTable[i]; - otherActor2->mHitbox.pos.x = newHitbox->pos.x; - otherActor2->mHitbox.pos.y = newHitbox->pos.y; - otherActor2->mHitbox.pos.z = newHitbox->pos.z; - otherActor2->mHitbox.size = newHitbox->size; - if (mActorTable[i]->CollidesWith(actor)) { - result = mActorTable[i]; - } - - otherActor->mHitbox.pos.x = oldHitbox.pos.x; - otherActor->mHitbox.pos.y = oldHitbox.pos.y; - otherActor->mHitbox.pos.z = oldHitbox.pos.z; - otherActor->mHitbox.size = oldHitbox.size; - - if (result != NULL) return result; + Actor *otherActor2 = mActorTable[i]; + otherActor2->mHitbox.pos.x = newHitbox->pos.x; + otherActor2->mHitbox.pos.y = newHitbox->pos.y; + otherActor2->mHitbox.pos.z = newHitbox->pos.z; + otherActor2->mHitbox.size = newHitbox->size; + if (mActorTable[i]->CollidesWith(actor)) { + result = mActorTable[i]; } + + otherActor->mHitbox.pos.x = oldHitbox.pos.x; + otherActor->mHitbox.pos.y = oldHitbox.pos.y; + otherActor->mHitbox.pos.z = oldHitbox.pos.z; + otherActor->mHitbox.size = oldHitbox.size; + + if (result != NULL) break; } } } From 673269f181f456d7dbaebbe6d4bc95078833aa36 Mon Sep 17 00:00:00 2001 From: Aetias Date: Thu, 24 Oct 2024 21:55:19 +0200 Subject: [PATCH 17/18] Decomp `ActorManager` 100% --- config/eur/arm9/overlays/ov000/symbols.txt | 4 ++-- config/usa/arm9/overlays/ov000/symbols.txt | 4 ++-- include/Actor/ActorManager.hpp | 4 ++-- src/00_Core/Actor/ActorManager.cpp | 24 ++++++++++++---------- 4 files changed, 19 insertions(+), 17 deletions(-) diff --git a/config/eur/arm9/overlays/ov000/symbols.txt b/config/eur/arm9/overlays/ov000/symbols.txt index 6a56a143..1075a3d3 100644 --- a/config/eur/arm9/overlays/ov000/symbols.txt +++ b/config/eur/arm9/overlays/ov000/symbols.txt @@ -2848,12 +2848,12 @@ _ZN12ActorManager15FindActorByTypeEP8ActorRefPS_j kind:function(arm,size=0x68) a _ZN12ActorManager22FindNearestActorOfTypeEP8ActorRefPS_jP5Vec3p kind:function(arm,size=0x90) addr:0x20c38fc _ZN12ActorManager18func_ov00_020c398cEj kind:function(arm,size=0x10) addr:0x20c398c _ZN12ActorManager18func_ov00_020c399cEjP8Cylinder kind:function(arm,size=0x10) addr:0x20c399c -_ZN12ActorManager18func_ov00_020c39acEjPjb kind:function(arm,size=0x180) addr:0x20c39ac +_ZN12ActorManager18func_ov00_020c39acEiPKjb kind:function(arm,size=0x180) addr:0x20c39ac _ZN12ActorManager18func_ov00_020c3b2cEPi kind:function(arm,size=0x84) addr:0x20c3b2c _ZN12ActorManager18func_ov00_020c3bb0EiPi kind:function(arm,size=0x138) addr:0x20c3bb0 _ZN12ActorManager18func_ov00_020c3ce8Eib kind:function(arm,size=0xe8) addr:0x20c3ce8 _ZN12ActorManager14Actor_vfunc_28Ev kind:function(arm,size=0x4c) addr:0x20c3dd0 -_ZN12ActorManager16ActorTypeIsOneOfEjPj kind:function(arm,size=0x38) addr:0x20c3e1c +_ZN12ActorManager16ActorTypeIsOneOfEjPKj kind:function(arm,size=0x38) addr:0x20c3e1c func_ov000_020c3e54 kind:function(arm,size=0x8) addr:0x20c3e54 func_ov000_020c3e5c kind:function(arm,size=0x54) addr:0x20c3e5c func_ov000_020c3eb0 kind:function(arm,size=0x40) addr:0x20c3eb0 diff --git a/config/usa/arm9/overlays/ov000/symbols.txt b/config/usa/arm9/overlays/ov000/symbols.txt index 8f2b644c..6b1adf44 100644 --- a/config/usa/arm9/overlays/ov000/symbols.txt +++ b/config/usa/arm9/overlays/ov000/symbols.txt @@ -2848,12 +2848,12 @@ _ZN12ActorManager15FindActorByTypeEP8ActorRefPS_j kind:function(arm,size=0x68) a _ZN12ActorManager22FindNearestActorOfTypeEP8ActorRefPS_jP5Vec3p kind:function(arm,size=0x90) addr:0x20c389c _ZN12ActorManager18func_ov00_020c398cEj kind:function(arm,size=0x10) addr:0x20c392c _ZN12ActorManager18func_ov00_020c399cEjP8Cylinder kind:function(arm,size=0x10) addr:0x20c393c -_ZN12ActorManager18func_ov00_020c39acEjPjb kind:function(arm,size=0x180) addr:0x20c394c +_ZN12ActorManager18func_ov00_020c39acEiPKjb kind:function(arm,size=0x180) addr:0x20c394c _ZN12ActorManager18func_ov00_020c3b2cEPi kind:function(arm,size=0x84) addr:0x20c3acc _ZN12ActorManager18func_ov00_020c3bb0EiPi kind:function(arm,size=0x138) addr:0x20c3b50 _ZN12ActorManager18func_ov00_020c3ce8Eib kind:function(arm,size=0xe8) addr:0x20c3c88 _ZN12ActorManager14Actor_vfunc_28Ev kind:function(arm,size=0x4c) addr:0x20c3d70 -_ZN12ActorManager16ActorTypeIsOneOfEjPj kind:function(arm,size=0x38) addr:0x20c3dbc +_ZN12ActorManager16ActorTypeIsOneOfEjPKj kind:function(arm,size=0x38) addr:0x20c3dbc func_ov000_020c3e54 kind:function(arm,size=0x8) addr:0x20c3df4 func_ov000_020c3e5c kind:function(arm,size=0x54) addr:0x20c3dfc func_ov000_020c3eb0 kind:function(arm,size=0x40) addr:0x20c3e50 diff --git a/include/Actor/ActorManager.hpp b/include/Actor/ActorManager.hpp index 88a9cc0b..6d3cce71 100644 --- a/include/Actor/ActorManager.hpp +++ b/include/Actor/ActorManager.hpp @@ -87,12 +87,12 @@ public: static void FindNearestActorOfType(ActorRef *ref, ActorManager *actorMgr, ActorTypeId type, Vec3p *pos); bool func_ov00_020c398c(u32 index); void func_ov00_020c399c(u32 index, Cylinder *cylinder); - Actor *func_ov00_020c39ac(u32 index, ActorTypeId *actorTypes, bool param3); + Actor *func_ov00_020c39ac(s32 index, const ActorTypeId *actorTypes, bool param3); s32 func_ov00_020c3b2c(s32 *param1); s32 func_ov00_020c3bb0(unk32 param1, s32 *param2); void func_ov00_020c3ce8(unk32 param1, bool param2); void Actor_vfunc_28(); - static bool ActorTypeIsOneOf(ActorTypeId type, ActorTypeId *types); + static bool ActorTypeIsOneOf(ActorTypeId type, const ActorTypeId *types); }; extern ActorManager *gActorManager; diff --git a/src/00_Core/Actor/ActorManager.cpp b/src/00_Core/Actor/ActorManager.cpp index 219778a0..5344745d 100644 --- a/src/00_Core/Actor/ActorManager.cpp +++ b/src/00_Core/Actor/ActorManager.cpp @@ -158,8 +158,9 @@ ARM bool FilterActor::Filter(Actor *actor) { if (mUnk_08 != -1 && mUnk_08 != actor->mUnk_034) return false; if (mExcludeRefs != NULL) { for (s32 i = 0; mExcludeRefs[i].id != -1; ++i) { + ActorRef *ref = &mExcludeRefs[i]; volatile Actor *actor2 = actor; - if (mExcludeRefs[i].id == actor2->mRef.id) return false; + if (ref->id == actor2->mRef.id) return false; } } if (mExcludeNotInAABB) { @@ -246,19 +247,19 @@ ARM void ActorManager::func_ov00_020c399c(u32 index, Cylinder *cylinder) { func_ov000_020c3f3c(mUnk_14, index, cylinder); } -ARM Actor *ActorManager::func_ov00_020c39ac(u32 index, ActorTypeId *actorTypes, bool param3) { +ARM Actor *ActorManager::func_ov00_020c39ac(s32 index, const ActorTypeId *actorTypes, bool param3) { if (actorTypes == NULL && param3) return NULL; Actor *actor = mActorTable[index]; Actor *result = NULL; if (actor != NULL && actor->mAlive) { + u16 i; + bool unk1 = actorTypes == NULL && !param3 ? true : false; for (u16 i = 0; i < mMaxActorIndex; ++i) { if (i != index) { Actor *otherActor = mActorTable[i]; - if (otherActor != NULL && func_ov000_020c3f08(mUnk_14, i)) { - if ((actorTypes != NULL && !param3) && - (param3 != this->ActorTypeIsOneOf(mActorTable[i]->mType, actorTypes))) - { + if (mActorTable[i] != NULL && func_ov000_020c3f08(mUnk_14, i)) { + if (unk1 || (param3 != this->ActorTypeIsOneOf(mActorTable[i]->mType, actorTypes))) { Cylinder oldHitbox = mActorTable[i]->mHitbox; Cylinder *newHitbox = func_ov000_020c3ef0(mUnk_14, i); @@ -271,10 +272,11 @@ ARM Actor *ActorManager::func_ov00_020c39ac(u32 index, ActorTypeId *actorTypes, result = mActorTable[i]; } - otherActor->mHitbox.pos.x = oldHitbox.pos.x; - otherActor->mHitbox.pos.y = oldHitbox.pos.y; - otherActor->mHitbox.pos.z = oldHitbox.pos.z; - otherActor->mHitbox.size = oldHitbox.size; + Actor *otherActor3 = mActorTable[i]; + otherActor3->mHitbox.pos.x = oldHitbox.pos.x; + otherActor3->mHitbox.pos.y = oldHitbox.pos.y; + otherActor3->mHitbox.pos.z = oldHitbox.pos.z; + otherActor3->mHitbox.size = oldHitbox.size; if (result != NULL) break; } @@ -384,7 +386,7 @@ ARM void ActorManager::Actor_vfunc_28() { } } -ARM bool ActorManager::ActorTypeIsOneOf(ActorTypeId type, ActorTypeId *types) { +ARM bool ActorManager::ActorTypeIsOneOf(ActorTypeId type, const ActorTypeId *types) { int i; bool found = false; From d179159b1f13344bb9c0a7556b71ab9aaeb6dac8 Mon Sep 17 00:00:00 2001 From: Aetias Date: Thu, 24 Oct 2024 22:10:56 +0200 Subject: [PATCH 18/18] Match `ActorManager` --- config/eur/arm9/overlays/ov000/delinks.txt | 1 + config/eur/arm9/overlays/ov000/symbols.txt | 2 +- config/eur/arm9/overlays/ov014/relocs.txt | 2 +- config/eur/arm9/overlays/ov015/relocs.txt | 2 +- config/eur/arm9/overlays/ov019/relocs.txt | 2 +- config/eur/arm9/overlays/ov023/relocs.txt | 6 +++--- config/eur/arm9/overlays/ov025/relocs.txt | 12 ++++++------ config/eur/arm9/overlays/ov030/relocs.txt | 6 +++--- config/eur/arm9/overlays/ov032/relocs.txt | 2 +- config/eur/arm9/overlays/ov043/relocs.txt | 4 ++-- config/eur/arm9/overlays/ov044/relocs.txt | 4 ++-- config/eur/arm9/overlays/ov048/relocs.txt | 2 +- config/usa/arm9/overlays/ov000/delinks.txt | 1 + config/usa/arm9/overlays/ov000/relocs.txt | 2 +- config/usa/arm9/overlays/ov000/symbols.txt | 2 +- config/usa/arm9/overlays/ov014/relocs.txt | 2 +- config/usa/arm9/overlays/ov015/relocs.txt | 2 +- config/usa/arm9/overlays/ov019/relocs.txt | 2 +- config/usa/arm9/overlays/ov023/relocs.txt | 6 +++--- config/usa/arm9/overlays/ov025/relocs.txt | 12 ++++++------ config/usa/arm9/overlays/ov030/relocs.txt | 6 +++--- config/usa/arm9/overlays/ov032/relocs.txt | 2 +- config/usa/arm9/overlays/ov043/relocs.txt | 4 ++-- config/usa/arm9/overlays/ov044/relocs.txt | 4 ++-- config/usa/arm9/overlays/ov048/relocs.txt | 2 +- src/00_Core/Actor/ActorManager.cpp | 2 +- 26 files changed, 48 insertions(+), 46 deletions(-) diff --git a/config/eur/arm9/overlays/ov000/delinks.txt b/config/eur/arm9/overlays/ov000/delinks.txt index 71987257..3d73e576 100644 --- a/config/eur/arm9/overlays/ov000/delinks.txt +++ b/config/eur/arm9/overlays/ov000/delinks.txt @@ -12,6 +12,7 @@ src/00_Core/Actor/Actor.cpp: .data start:0x020e71a0 end:0x020e72a8 src/00_Core/Actor/ActorManager.cpp: + complete .text start:0x020c33d4 end:0x020c3e54 .data start:0x020e72a8 end:0x020e72f4 diff --git a/config/eur/arm9/overlays/ov000/symbols.txt b/config/eur/arm9/overlays/ov000/symbols.txt index 1075a3d3..8493df3d 100644 --- a/config/eur/arm9/overlays/ov000/symbols.txt +++ b/config/eur/arm9/overlays/ov000/symbols.txt @@ -5078,7 +5078,7 @@ data_ov000_020e72b8 kind:data(any) addr:0x20e72b8 data_ov000_020e72bc kind:data(any) addr:0x20e72bc data_ov000_020e72c0 kind:data(any) addr:0x20e72c0 data_ov000_020e72c4 kind:data(any) addr:0x20e72c4 -_ZTV11FilterActor kind:data(any) addr:0x20e72f0 +_ZTV11FilterActor kind:data(any) addr:0x20e72e8 data_ov000_020e72fc kind:data(any) addr:0x20e72fc data_ov000_020e7300 kind:data(any) addr:0x20e7300 data_ov000_020e7304 kind:data(any) addr:0x20e7304 diff --git a/config/eur/arm9/overlays/ov014/relocs.txt b/config/eur/arm9/overlays/ov014/relocs.txt index 2893de9a..422bdbad 100644 --- a/config/eur/arm9/overlays/ov014/relocs.txt +++ b/config/eur/arm9/overlays/ov014/relocs.txt @@ -3281,7 +3281,7 @@ from:0x0213b76c kind:arm_call to:0x020c1730 module:overlay(0) from:0x0213b804 kind:arm_call to:0x020c37ec module:overlay(0) from:0x0213b860 kind:arm_call to:0x020c3674 module:overlay(0) from:0x0213b8fc kind:load to:0x027e0fe4 module:dtcm -from:0x0213b900 kind:load to:0x020e72f0 module:overlay(0) +from:0x0213b900 kind:load to:0x020e72e8 add:8 module:overlay(0) from:0x0213b91c kind:arm_call to:0x01ff991c module:itcm from:0x0213b974 kind:arm_call to:0x01ff98e0 module:itcm from:0x0213b9a4 kind:load to:0x01ff9958 module:itcm diff --git a/config/eur/arm9/overlays/ov015/relocs.txt b/config/eur/arm9/overlays/ov015/relocs.txt index ef684898..d2bcc96a 100644 --- a/config/eur/arm9/overlays/ov015/relocs.txt +++ b/config/eur/arm9/overlays/ov015/relocs.txt @@ -5876,7 +5876,7 @@ from:0x021522a8 kind:arm_call to:0x02152548 module:overlay(15) from:0x021522d8 kind:arm_call to:0x020c3674 module:overlay(0) from:0x021522e4 kind:arm_call to:0x02183bc4 module:overlay(15) from:0x02152348 kind:load to:0x027e0fe4 module:dtcm -from:0x0215234c kind:load to:0x020e72f0 module:overlay(0) +from:0x0215234c kind:load to:0x020e72e8 add:8 module:overlay(0) from:0x02152354 kind:load to:0x027e1060 module:dtcm from:0x0215236c kind:arm_call to:0x020ada78 module:overlay(0) from:0x021523a8 kind:arm_call to:0x020c3674 module:overlay(0) diff --git a/config/eur/arm9/overlays/ov019/relocs.txt b/config/eur/arm9/overlays/ov019/relocs.txt index 06497f51..40d32a34 100644 --- a/config/eur/arm9/overlays/ov019/relocs.txt +++ b/config/eur/arm9/overlays/ov019/relocs.txt @@ -1032,7 +1032,7 @@ from:0x02174984 kind:arm_call to:0x020c37ec module:overlay(0) from:0x021749b0 kind:arm_call to:0x020c3674 module:overlay(0) from:0x021749b4 kind:arm_call to:0x021748e0 module:overlay(19) from:0x021749e8 kind:load to:0x027e0fe4 module:dtcm -from:0x021749ec kind:load to:0x020e72f0 module:overlay(0) +from:0x021749ec kind:load to:0x020e72e8 add:8 module:overlay(0) from:0x02174a64 kind:arm_call to:0x020c29d8 module:overlay(0) from:0x02174a78 kind:arm_call to:0x020c5d74 module:overlay(0) from:0x02174aa8 kind:arm_call to:0x0207c1b0 module:overlay(0) diff --git a/config/eur/arm9/overlays/ov023/relocs.txt b/config/eur/arm9/overlays/ov023/relocs.txt index 56baf051..6e6af0ca 100644 --- a/config/eur/arm9/overlays/ov023/relocs.txt +++ b/config/eur/arm9/overlays/ov023/relocs.txt @@ -266,7 +266,7 @@ from:0x0216f798 kind:arm_call to:0x020c37ec module:overlay(0) from:0x0216f7c0 kind:arm_call to:0x020c3674 module:overlay(0) from:0x0216f878 kind:load to:0x027e0e60 module:dtcm from:0x0216f884 kind:load to:0x027e0fe4 module:dtcm -from:0x0216f890 kind:load to:0x020e72f0 module:overlay(0) +from:0x0216f890 kind:load to:0x020e72e8 add:8 module:overlay(0) from:0x0216f8ac kind:arm_call to:0x020c5374 module:overlay(0) from:0x0216f8b4 kind:arm_call to:0x020c2974 module:overlay(0) from:0x0216f8b8 kind:arm_call to:0x0202bc10 module:main @@ -738,7 +738,7 @@ from:0x02172b68 kind:arm_call to:0x020c28ec module:overlay(0) from:0x02172b80 kind:arm_call to:0x020cca18 module:overlay(0) from:0x02172bdc kind:arm_call to:0x020c37ec module:overlay(0) from:0x02172bf4 kind:load to:0x027e0fe4 module:dtcm -from:0x02172bf8 kind:load to:0x020e72f0 module:overlay(0) +from:0x02172bf8 kind:load to:0x020e72e8 add:8 module:overlay(0) from:0x02172c14 kind:arm_call to:0x02172cac module:overlay(23) from:0x02172c1c kind:arm_call to:0x020cc180 module:overlay(0) from:0x02172c2c kind:arm_call to:0x020caef8 module:overlay(0) @@ -794,7 +794,7 @@ from:0x02173490 kind:arm_call to:0x02172568 module:overlay(23) from:0x021734a4 kind:arm_call to:0x020ceacc module:overlay(0) from:0x021734c8 kind:load to:0x02050f54 module:main from:0x021734cc kind:load to:0x027e0ffc module:dtcm -from:0x021734d0 kind:load to:0x020e72f0 module:overlay(0) +from:0x021734d0 kind:load to:0x020e72e8 add:8 module:overlay(0) from:0x021734d8 kind:load to:0x027e0fe4 module:dtcm from:0x021734e0 kind:load to:0x027e0e60 module:dtcm from:0x02173518 kind:arm_call to:0x020cb60c module:overlay(0) diff --git a/config/eur/arm9/overlays/ov025/relocs.txt b/config/eur/arm9/overlays/ov025/relocs.txt index 057f9bc2..ecf2289b 100644 --- a/config/eur/arm9/overlays/ov025/relocs.txt +++ b/config/eur/arm9/overlays/ov025/relocs.txt @@ -14,7 +14,7 @@ from:0x0216d8d4 kind:arm_call to:0x020c37ec module:overlay(0) from:0x0216d900 kind:arm_call to:0x020c3674 module:overlay(0) from:0x0216d908 kind:arm_call to:0x02173238 module:overlay(25) from:0x0216da98 kind:load to:0x027e0fe4 module:dtcm -from:0x0216da9c kind:load to:0x020e72f0 module:overlay(0) +from:0x0216da9c kind:load to:0x020e72e8 add:8 module:overlay(0) from:0x0216dae4 kind:arm_call to:0x020c1500 module:overlay(0) from:0x0216daf4 kind:arm_call to:0x020c3348 module:overlay(0) from:0x0216db7c kind:arm_call to:0x020c4048 module:overlay(0) @@ -99,7 +99,7 @@ from:0x0216eb58 kind:load to:0x027e0764 module:dtcm from:0x0216edac kind:arm_call to:0x020c37ec module:overlay(0) from:0x0216ee18 kind:arm_call to:0x020c3674 module:overlay(0) from:0x0216ee1c kind:arm_call to:0x0216eee4 module:overlay(25) -from:0x0216eed4 kind:load to:0x020e72f0 module:overlay(0) +from:0x0216eed4 kind:load to:0x020e72e8 add:8 module:overlay(0) from:0x0216eedc kind:load to:0x027e0fe4 module:dtcm from:0x0216eee0 kind:load to:0x027e0764 module:dtcm from:0x0216eef8 kind:arm_call to:0x020c288c module:overlay(0) @@ -661,7 +661,7 @@ from:0x021734e8 kind:arm_call to:0x020c37ec module:overlay(0) from:0x02173528 kind:arm_call to:0x020c3674 module:overlay(0) from:0x02173530 kind:arm_call to:0x02178cf0 module:overlay(25) from:0x02173544 kind:arm_call to:0x020c288c module:overlay(0) -from:0x02173580 kind:load to:0x020e72f0 module:overlay(0) +from:0x02173580 kind:load to:0x020e72e8 add:8 module:overlay(0) from:0x02173588 kind:load to:0x027e0fe4 module:dtcm from:0x021735a0 kind:arm_call to:0x0217345c module:overlay(25) from:0x02173600 kind:load to:0x027e10b4 module:dtcm @@ -672,7 +672,7 @@ from:0x02173898 kind:arm_call to:0x020c3674 module:overlay(0) from:0x0217392c kind:arm_call to:0x020c3674 module:overlay(0) from:0x021739c0 kind:arm_call to:0x020c3674 module:overlay(0) from:0x02173a3c kind:load to:0x027e0fe4 module:dtcm -from:0x02173a40 kind:load to:0x020e72f0 module:overlay(0) +from:0x02173a40 kind:load to:0x020e72e8 add:8 module:overlay(0) from:0x02173ab0 kind:load to:0x020e8b08 module:overlay(0) from:0x02173b60 kind:arm_call to:0x021460b8 module:overlay(14) from:0x02173b6c kind:arm_call to:0x02145e48 module:overlay(14) @@ -862,7 +862,7 @@ from:0x02175098 kind:load to:0x020eed2c module:overlay(0) from:0x021750a0 kind:load to:0x027e0f64 module:dtcm from:0x021750a4 kind:load to:0x027e0fe4 module:dtcm from:0x021750a8 kind:load to:0x027e0c68 module:dtcm -from:0x021750ac kind:load to:0x020e72f0 module:overlay(0) +from:0x021750ac kind:load to:0x020e72e8 add:8 module:overlay(0) from:0x021750b4 kind:load to:0x027e0d38 module:dtcm from:0x021750e4 kind:arm_call to:0x0214aa0c module:overlay(14) from:0x021750ec kind:arm_call to:0x02145318 module:overlay(14) @@ -929,7 +929,7 @@ from:0x02175bc4 kind:arm_call to:0x020c3674 module:overlay(0) from:0x02175c1c kind:arm_call to:0x020c3674 module:overlay(0) from:0x02175c2c kind:arm_call to:0x0216eca4 module:overlay(25) from:0x02175c48 kind:load to:0x027e0fe4 module:dtcm -from:0x02175c4c kind:load to:0x020e72f0 module:overlay(0) +from:0x02175c4c kind:load to:0x020e72e8 add:8 module:overlay(0) from:0x02175c6c kind:arm_call to:0x020c5a5c module:overlay(0) from:0x02175c80 kind:arm_call to:0x020836bc module:overlay(0) from:0x02175cbc kind:arm_call to:0x02175fac module:overlay(25) diff --git a/config/eur/arm9/overlays/ov030/relocs.txt b/config/eur/arm9/overlays/ov030/relocs.txt index 1f49c36e..b52f2126 100644 --- a/config/eur/arm9/overlays/ov030/relocs.txt +++ b/config/eur/arm9/overlays/ov030/relocs.txt @@ -1052,7 +1052,7 @@ from:0x02182a70 kind:arm_call to:0x0207c1b0 module:overlay(0) from:0x02182a94 kind:arm_call to:0x0207c1b0 module:overlay(0) from:0x02182aa4 kind:arm_call to:0x020c51d0 module:overlay(0) from:0x02182ab8 kind:load to:0x027e0e60 module:dtcm -from:0x02182abc kind:load to:0x020e72f0 module:overlay(0) +from:0x02182abc kind:load to:0x020e72e8 add:8 module:overlay(0) from:0x02182ac4 kind:load to:0x027e0fe4 module:dtcm from:0x02182ac8 kind:load to:0x02050f54 module:main from:0x02182ad0 kind:load to:0x021887e4 module:overlay(30) @@ -1132,7 +1132,7 @@ from:0x02183738 kind:arm_call to:0x020c3674 module:overlay(0) from:0x02183748 kind:arm_call to:0x020c5288 module:overlay(0) from:0x021837a4 kind:arm_call to:0x020c3674 module:overlay(0) from:0x021837b4 kind:arm_call to:0x0217d4e8 module:overlay(30) -from:0x02183804 kind:load to:0x020e72f0 module:overlay(0) +from:0x02183804 kind:load to:0x020e72e8 add:8 module:overlay(0) from:0x0218380c kind:load to:0x027e0fe4 module:dtcm from:0x02183830 kind:arm_call to:0x020c3674 module:overlay(0) from:0x02183848 kind:arm_call to:0x01ff9ec0 module:itcm @@ -1281,7 +1281,7 @@ from:0x0218523c kind:arm_call to:0x020c1c20 module:overlay(0) from:0x0218524c kind:load to:0x02188b08 module:overlay(30) from:0x02185250 kind:load to:0x027e0fe4 module:dtcm from:0x02185254 kind:load to:0x027e0e60 module:dtcm -from:0x02185258 kind:load to:0x020e72f0 module:overlay(0) +from:0x02185258 kind:load to:0x020e72e8 add:8 module:overlay(0) from:0x02185274 kind:arm_call to:0x020c1730 module:overlay(0) from:0x0218527c kind:arm_call to:0x0202ea0c module:main from:0x02185290 kind:arm_call to:0x020c1730 module:overlay(0) diff --git a/config/eur/arm9/overlays/ov032/relocs.txt b/config/eur/arm9/overlays/ov032/relocs.txt index 193858eb..efcb8ce3 100644 --- a/config/eur/arm9/overlays/ov032/relocs.txt +++ b/config/eur/arm9/overlays/ov032/relocs.txt @@ -1087,7 +1087,7 @@ from:0x02184440 kind:arm_call to:0x020c1500 module:overlay(0) from:0x02184454 kind:arm_call to:0x020c3348 module:overlay(0) from:0x02184524 kind:arm_call to:0x020c4048 module:overlay(0) from:0x0218453c kind:load to:0x027e0fe4 module:dtcm -from:0x02184540 kind:load to:0x020e72f0 module:overlay(0) +from:0x02184540 kind:load to:0x020e72e8 add:8 module:overlay(0) from:0x02184548 kind:load to:0x02050f54 module:main from:0x02184550 kind:load to:0x027e0fe8 module:dtcm from:0x021845c0 kind:arm_call to:0x0218439c module:overlay(32) diff --git a/config/eur/arm9/overlays/ov043/relocs.txt b/config/eur/arm9/overlays/ov043/relocs.txt index db0546d7..4d478ee5 100644 --- a/config/eur/arm9/overlays/ov043/relocs.txt +++ b/config/eur/arm9/overlays/ov043/relocs.txt @@ -92,14 +92,14 @@ from:0x02189f30 kind:arm_call to:0x020c37ec module:overlay(0) from:0x02189f60 kind:arm_call to:0x020c3674 module:overlay(0) from:0x02189f74 kind:arm_call to:0x02189e88 module:overlay(43) from:0x02189f94 kind:load to:0x027e0fe4 module:dtcm -from:0x02189f98 kind:load to:0x020e72f0 module:overlay(0) +from:0x02189f98 kind:load to:0x020e72e8 add:8 module:overlay(0) from:0x0218a02c kind:arm_call to:0x020c37ec module:overlay(0) from:0x0218a058 kind:arm_call to:0x020c3674 module:overlay(0) from:0x0218a0c4 kind:arm_call to:0x020ceacc module:overlay(0) from:0x0218a0d8 kind:arm_call to:0x020ceacc module:overlay(0) from:0x0218a0e0 kind:arm_call to:0x020cc180 module:overlay(0) from:0x0218a0ec kind:load to:0x027e0fe4 module:dtcm -from:0x0218a0f0 kind:load to:0x020e72f0 module:overlay(0) +from:0x0218a0f0 kind:load to:0x020e72e8 add:8 module:overlay(0) from:0x0218a0f8 kind:load to:0x027e0ffc module:dtcm from:0x0218a10c kind:arm_call to:0x020caef8 module:overlay(0) from:0x0218a16c kind:arm_call to:0x0218a21c module:overlay(43) diff --git a/config/eur/arm9/overlays/ov044/relocs.txt b/config/eur/arm9/overlays/ov044/relocs.txt index 1d957093..fca3d2a7 100644 --- a/config/eur/arm9/overlays/ov044/relocs.txt +++ b/config/eur/arm9/overlays/ov044/relocs.txt @@ -757,11 +757,11 @@ from:0x0218e4c0 kind:arm_call to:0x02083a1c module:overlay(0) from:0x0218e4cc kind:arm_call to:0x020840c4 module:overlay(0) from:0x0218e570 kind:arm_call to:0x020c37ec module:overlay(0) from:0x0218e588 kind:load to:0x027e0e60 module:dtcm -from:0x0218e58c kind:load to:0x020e72f0 module:overlay(0) +from:0x0218e58c kind:load to:0x020e72e8 add:8 module:overlay(0) from:0x0218e594 kind:load to:0x027e0fe4 module:dtcm from:0x0218e624 kind:arm_call to:0x020c37ec module:overlay(0) from:0x0218e6a4 kind:load to:0x027e0fe4 module:dtcm -from:0x0218e6a8 kind:load to:0x020e72f0 module:overlay(0) +from:0x0218e6a8 kind:load to:0x020e72e8 add:8 module:overlay(0) from:0x0218e6b0 kind:load to:0x027e0764 module:dtcm from:0x0218e748 kind:arm_call to:0x01ff9e64 module:itcm from:0x0218e760 kind:arm_call_thumb to:0x020b3ea8 module:overlay(0) diff --git a/config/eur/arm9/overlays/ov048/relocs.txt b/config/eur/arm9/overlays/ov048/relocs.txt index 79959620..3d5065f8 100644 --- a/config/eur/arm9/overlays/ov048/relocs.txt +++ b/config/eur/arm9/overlays/ov048/relocs.txt @@ -464,7 +464,7 @@ from:0x02193f1c kind:arm_call to:0x0207a1c8 module:overlay(0) from:0x02193f28 kind:load to:0x02050f54 module:main from:0x02193f2c kind:load to:0x027e0e58 module:dtcm from:0x02193f34 kind:load to:0x02194688 module:overlay(48) -from:0x02193f38 kind:load to:0x020e72f0 module:overlay(0) +from:0x02193f38 kind:load to:0x020e72e8 add:8 module:overlay(0) from:0x02193f40 kind:load to:0x027e0fe4 module:dtcm from:0x02193f64 kind:arm_call to:0x0204f754 module:main from:0x02193f6c kind:arm_call to:0x020b7e6c module:overlay(0) diff --git a/config/usa/arm9/overlays/ov000/delinks.txt b/config/usa/arm9/overlays/ov000/delinks.txt index becb7401..a924815e 100644 --- a/config/usa/arm9/overlays/ov000/delinks.txt +++ b/config/usa/arm9/overlays/ov000/delinks.txt @@ -12,6 +12,7 @@ src/00_Core/Actor/Actor.cpp: .data start:0x020e7140 end:0x020e7248 src/00_Core/Actor/ActorManager.cpp: + complete .text start:0x020c3374 end:0x020c3df4 .data start:0x020e7248 end:0x020e7294 diff --git a/config/usa/arm9/overlays/ov000/relocs.txt b/config/usa/arm9/overlays/ov000/relocs.txt index 3a3b86d8..eb606487 100644 --- a/config/usa/arm9/overlays/ov000/relocs.txt +++ b/config/usa/arm9/overlays/ov000/relocs.txt @@ -10621,7 +10621,7 @@ from:0x020de3d8 kind:load to:0x020e7774 module:overlay(0) from:0x020de3dc kind:load to:0x020e81f8 module:overlay(0) from:0x020de3e4 kind:load to:0x020e7724 module:overlay(0) from:0x020de3e8 kind:load to:0x020e7b60 module:overlay(0) -from:0x020de3f0 kind:load to:0x020e72f0 module:overlay(0) +from:0x020de3f0 kind:load to:0x020e72e8 add:8 module:overlay(0) from:0x020de3f4 kind:load to:0x020e7b68 module:overlay(0) from:0x020de3fc kind:load to:0x020e7558 module:overlay(0) from:0x020de400 kind:load to:0x020e7e40 module:overlay(0) diff --git a/config/usa/arm9/overlays/ov000/symbols.txt b/config/usa/arm9/overlays/ov000/symbols.txt index 6b1adf44..45a0c886 100644 --- a/config/usa/arm9/overlays/ov000/symbols.txt +++ b/config/usa/arm9/overlays/ov000/symbols.txt @@ -5078,7 +5078,7 @@ data_ov000_020e72b8 kind:data(any) addr:0x20e7258 data_ov000_020e72bc kind:data(any) addr:0x20e725c data_ov000_020e72c0 kind:data(any) addr:0x20e7260 data_ov000_020e72c4 kind:data(any) addr:0x20e7264 -_ZTV11FilterActor kind:data(any) addr:0x20e7290 +_ZTV11FilterActor kind:data(any) addr:0x20e7288 data_ov000_020e72fc kind:data(any) addr:0x20e729c data_ov000_020e7300 kind:data(any) addr:0x20e72a0 data_ov000_020e7304 kind:data(any) addr:0x20e72a4 diff --git a/config/usa/arm9/overlays/ov014/relocs.txt b/config/usa/arm9/overlays/ov014/relocs.txt index c7441ced..180807df 100644 --- a/config/usa/arm9/overlays/ov014/relocs.txt +++ b/config/usa/arm9/overlays/ov014/relocs.txt @@ -3281,7 +3281,7 @@ from:0x0213b6c8 kind:arm_call to:0x020c16d0 module:overlay(0) from:0x0213b760 kind:arm_call to:0x020c378c module:overlay(0) from:0x0213b7bc kind:arm_call to:0x020c3614 module:overlay(0) from:0x0213b858 kind:load to:0x027e0fe4 module:dtcm -from:0x0213b85c kind:load to:0x020e7290 module:overlay(0) +from:0x0213b85c kind:load to:0x020e7288 add:8 module:overlay(0) from:0x0213b878 kind:arm_call to:0x01ff991c module:itcm from:0x0213b8d0 kind:arm_call to:0x01ff98e0 module:itcm from:0x0213b900 kind:load to:0x01ff9958 module:itcm diff --git a/config/usa/arm9/overlays/ov015/relocs.txt b/config/usa/arm9/overlays/ov015/relocs.txt index 0246462a..24f15796 100644 --- a/config/usa/arm9/overlays/ov015/relocs.txt +++ b/config/usa/arm9/overlays/ov015/relocs.txt @@ -5876,7 +5876,7 @@ from:0x02152228 kind:arm_call to:0x021524c8 module:overlay(15) from:0x02152258 kind:arm_call to:0x020c3614 module:overlay(0) from:0x02152264 kind:arm_call to:0x02183b44 module:overlay(15) from:0x021522c8 kind:load to:0x027e0fe4 module:dtcm -from:0x021522cc kind:load to:0x020e7290 module:overlay(0) +from:0x021522cc kind:load to:0x020e7288 add:8 module:overlay(0) from:0x021522d4 kind:load to:0x027e1060 module:dtcm from:0x021522ec kind:arm_call to:0x020ada18 module:overlay(0) from:0x02152328 kind:arm_call to:0x020c3614 module:overlay(0) diff --git a/config/usa/arm9/overlays/ov019/relocs.txt b/config/usa/arm9/overlays/ov019/relocs.txt index f198ccae..b58c640d 100644 --- a/config/usa/arm9/overlays/ov019/relocs.txt +++ b/config/usa/arm9/overlays/ov019/relocs.txt @@ -1032,7 +1032,7 @@ from:0x021748e4 kind:arm_call to:0x020c378c module:overlay(0) from:0x02174910 kind:arm_call to:0x020c3614 module:overlay(0) from:0x02174914 kind:arm_call to:0x02174840 module:overlay(19) from:0x02174948 kind:load to:0x027e0fe4 module:dtcm -from:0x0217494c kind:load to:0x020e7290 module:overlay(0) +from:0x0217494c kind:load to:0x020e7288 add:8 module:overlay(0) from:0x021749c4 kind:arm_call to:0x020c2978 module:overlay(0) from:0x021749d8 kind:arm_call to:0x020c5d14 module:overlay(0) from:0x02174a08 kind:arm_call to:0x0207c150 module:overlay(0) diff --git a/config/usa/arm9/overlays/ov023/relocs.txt b/config/usa/arm9/overlays/ov023/relocs.txt index d2cc4f09..dfa88eda 100644 --- a/config/usa/arm9/overlays/ov023/relocs.txt +++ b/config/usa/arm9/overlays/ov023/relocs.txt @@ -266,7 +266,7 @@ from:0x0216f6f8 kind:arm_call to:0x020c378c module:overlay(0) from:0x0216f720 kind:arm_call to:0x020c3614 module:overlay(0) from:0x0216f7d8 kind:load to:0x027e0e60 module:dtcm from:0x0216f7e4 kind:load to:0x027e0fe4 module:dtcm -from:0x0216f7f0 kind:load to:0x020e7290 module:overlay(0) +from:0x0216f7f0 kind:load to:0x020e7288 add:8 module:overlay(0) from:0x0216f80c kind:arm_call to:0x020c5314 module:overlay(0) from:0x0216f814 kind:arm_call to:0x020c2914 module:overlay(0) from:0x0216f818 kind:arm_call to:0x0202bbf8 module:main @@ -738,7 +738,7 @@ from:0x02172ac8 kind:arm_call to:0x020c288c module:overlay(0) from:0x02172ae0 kind:arm_call to:0x020cc9b8 module:overlay(0) from:0x02172b3c kind:arm_call to:0x020c378c module:overlay(0) from:0x02172b54 kind:load to:0x027e0fe4 module:dtcm -from:0x02172b58 kind:load to:0x020e7290 module:overlay(0) +from:0x02172b58 kind:load to:0x020e7288 add:8 module:overlay(0) from:0x02172b74 kind:arm_call to:0x02172c0c module:overlay(23) from:0x02172b7c kind:arm_call to:0x020cc120 module:overlay(0) from:0x02172b8c kind:arm_call to:0x020cae98 module:overlay(0) @@ -794,7 +794,7 @@ from:0x021733f0 kind:arm_call to:0x021724c8 module:overlay(23) from:0x02173404 kind:arm_call to:0x020cea6c module:overlay(0) from:0x02173428 kind:load to:0x02050f10 module:main from:0x0217342c kind:load to:0x027e0ffc module:dtcm -from:0x02173430 kind:load to:0x020e7290 module:overlay(0) +from:0x02173430 kind:load to:0x020e7288 add:8 module:overlay(0) from:0x02173438 kind:load to:0x027e0fe4 module:dtcm from:0x02173440 kind:load to:0x027e0e60 module:dtcm from:0x02173478 kind:arm_call to:0x020cb5ac module:overlay(0) diff --git a/config/usa/arm9/overlays/ov025/relocs.txt b/config/usa/arm9/overlays/ov025/relocs.txt index 755aabed..858b529e 100644 --- a/config/usa/arm9/overlays/ov025/relocs.txt +++ b/config/usa/arm9/overlays/ov025/relocs.txt @@ -14,7 +14,7 @@ from:0x0216d834 kind:arm_call to:0x020c378c module:overlay(0) from:0x0216d860 kind:arm_call to:0x020c3614 module:overlay(0) from:0x0216d868 kind:arm_call to:0x02173198 module:overlay(25) from:0x0216d9f8 kind:load to:0x027e0fe4 module:dtcm -from:0x0216d9fc kind:load to:0x020e7290 module:overlay(0) +from:0x0216d9fc kind:load to:0x020e7288 add:8 module:overlay(0) from:0x0216da44 kind:arm_call to:0x020c14a0 module:overlay(0) from:0x0216da54 kind:arm_call to:0x020c32e8 module:overlay(0) from:0x0216dadc kind:arm_call to:0x020c3fe8 module:overlay(0) @@ -99,7 +99,7 @@ from:0x0216eab8 kind:load to:0x027e0764 module:dtcm from:0x0216ed0c kind:arm_call to:0x020c378c module:overlay(0) from:0x0216ed78 kind:arm_call to:0x020c3614 module:overlay(0) from:0x0216ed7c kind:arm_call to:0x0216ee44 module:overlay(25) -from:0x0216ee34 kind:load to:0x020e7290 module:overlay(0) +from:0x0216ee34 kind:load to:0x020e7288 add:8 module:overlay(0) from:0x0216ee3c kind:load to:0x027e0fe4 module:dtcm from:0x0216ee40 kind:load to:0x027e0764 module:dtcm from:0x0216ee58 kind:arm_call to:0x020c282c module:overlay(0) @@ -661,7 +661,7 @@ from:0x02173448 kind:arm_call to:0x020c378c module:overlay(0) from:0x02173488 kind:arm_call to:0x020c3614 module:overlay(0) from:0x02173490 kind:arm_call to:0x02178c50 module:overlay(25) from:0x021734a4 kind:arm_call to:0x020c282c module:overlay(0) -from:0x021734e0 kind:load to:0x020e7290 module:overlay(0) +from:0x021734e0 kind:load to:0x020e7288 add:8 module:overlay(0) from:0x021734e8 kind:load to:0x027e0fe4 module:dtcm from:0x02173500 kind:arm_call to:0x021733bc module:overlay(25) from:0x02173560 kind:load to:0x027e10b4 module:dtcm @@ -672,7 +672,7 @@ from:0x021737f8 kind:arm_call to:0x020c3614 module:overlay(0) from:0x0217388c kind:arm_call to:0x020c3614 module:overlay(0) from:0x02173920 kind:arm_call to:0x020c3614 module:overlay(0) from:0x0217399c kind:load to:0x027e0fe4 module:dtcm -from:0x021739a0 kind:load to:0x020e7290 module:overlay(0) +from:0x021739a0 kind:load to:0x020e7288 add:8 module:overlay(0) from:0x02173a10 kind:load to:0x020e8aa8 module:overlay(0) from:0x02173ac0 kind:arm_call to:0x02146014 module:overlay(14) from:0x02173acc kind:arm_call to:0x02145da4 module:overlay(14) @@ -862,7 +862,7 @@ from:0x02174ff8 kind:load to:0x020eeccc module:overlay(0) from:0x02175000 kind:load to:0x027e0f64 module:dtcm from:0x02175004 kind:load to:0x027e0fe4 module:dtcm from:0x02175008 kind:load to:0x027e0c68 module:dtcm -from:0x0217500c kind:load to:0x020e7290 module:overlay(0) +from:0x0217500c kind:load to:0x020e7288 add:8 module:overlay(0) from:0x02175014 kind:load to:0x027e0d38 module:dtcm from:0x02175044 kind:arm_call to:0x0214a968 module:overlay(14) from:0x0217504c kind:arm_call to:0x02145274 module:overlay(14) @@ -929,7 +929,7 @@ from:0x02175b24 kind:arm_call to:0x020c3614 module:overlay(0) from:0x02175b7c kind:arm_call to:0x020c3614 module:overlay(0) from:0x02175b8c kind:arm_call to:0x0216ec04 module:overlay(25) from:0x02175ba8 kind:load to:0x027e0fe4 module:dtcm -from:0x02175bac kind:load to:0x020e7290 module:overlay(0) +from:0x02175bac kind:load to:0x020e7288 add:8 module:overlay(0) from:0x02175bcc kind:arm_call to:0x020c59fc module:overlay(0) from:0x02175be0 kind:arm_call to:0x0208365c module:overlay(0) from:0x02175c1c kind:arm_call to:0x02175f0c module:overlay(25) diff --git a/config/usa/arm9/overlays/ov030/relocs.txt b/config/usa/arm9/overlays/ov030/relocs.txt index 608d452b..b9ca5e14 100644 --- a/config/usa/arm9/overlays/ov030/relocs.txt +++ b/config/usa/arm9/overlays/ov030/relocs.txt @@ -1052,7 +1052,7 @@ from:0x021829d0 kind:arm_call to:0x0207c150 module:overlay(0) from:0x021829f4 kind:arm_call to:0x0207c150 module:overlay(0) from:0x02182a04 kind:arm_call to:0x020c5170 module:overlay(0) from:0x02182a18 kind:load to:0x027e0e60 module:dtcm -from:0x02182a1c kind:load to:0x020e7290 module:overlay(0) +from:0x02182a1c kind:load to:0x020e7288 add:8 module:overlay(0) from:0x02182a24 kind:load to:0x027e0fe4 module:dtcm from:0x02182a28 kind:load to:0x02050f10 module:main from:0x02182a30 kind:load to:0x02188744 module:overlay(30) @@ -1132,7 +1132,7 @@ from:0x02183698 kind:arm_call to:0x020c3614 module:overlay(0) from:0x021836a8 kind:arm_call to:0x020c5228 module:overlay(0) from:0x02183704 kind:arm_call to:0x020c3614 module:overlay(0) from:0x02183714 kind:arm_call to:0x0217d448 module:overlay(30) -from:0x02183764 kind:load to:0x020e7290 module:overlay(0) +from:0x02183764 kind:load to:0x020e7288 add:8 module:overlay(0) from:0x0218376c kind:load to:0x027e0fe4 module:dtcm from:0x02183790 kind:arm_call to:0x020c3614 module:overlay(0) from:0x021837a8 kind:arm_call to:0x01ff9ec0 module:itcm @@ -1281,7 +1281,7 @@ from:0x0218519c kind:arm_call to:0x020c1bc0 module:overlay(0) from:0x021851ac kind:load to:0x02188a68 module:overlay(30) from:0x021851b0 kind:load to:0x027e0fe4 module:dtcm from:0x021851b4 kind:load to:0x027e0e60 module:dtcm -from:0x021851b8 kind:load to:0x020e7290 module:overlay(0) +from:0x021851b8 kind:load to:0x020e7288 add:8 module:overlay(0) from:0x021851d4 kind:arm_call to:0x020c16d0 module:overlay(0) from:0x021851dc kind:arm_call to:0x0202ea08 module:main from:0x021851f0 kind:arm_call to:0x020c16d0 module:overlay(0) diff --git a/config/usa/arm9/overlays/ov032/relocs.txt b/config/usa/arm9/overlays/ov032/relocs.txt index 086c042d..ab5815ae 100644 --- a/config/usa/arm9/overlays/ov032/relocs.txt +++ b/config/usa/arm9/overlays/ov032/relocs.txt @@ -1087,7 +1087,7 @@ from:0x021843a0 kind:arm_call to:0x020c14a0 module:overlay(0) from:0x021843b4 kind:arm_call to:0x020c32e8 module:overlay(0) from:0x02184484 kind:arm_call to:0x020c3fe8 module:overlay(0) from:0x0218449c kind:load to:0x027e0fe4 module:dtcm -from:0x021844a0 kind:load to:0x020e7290 module:overlay(0) +from:0x021844a0 kind:load to:0x020e7288 add:8 module:overlay(0) from:0x021844a8 kind:load to:0x02050f10 module:main from:0x021844b0 kind:load to:0x027e0fe8 module:dtcm from:0x02184520 kind:arm_call to:0x021842fc module:overlay(32) diff --git a/config/usa/arm9/overlays/ov043/relocs.txt b/config/usa/arm9/overlays/ov043/relocs.txt index 51900d8f..351a77a4 100644 --- a/config/usa/arm9/overlays/ov043/relocs.txt +++ b/config/usa/arm9/overlays/ov043/relocs.txt @@ -92,14 +92,14 @@ from:0x02189e90 kind:arm_call to:0x020c378c module:overlay(0) from:0x02189ec0 kind:arm_call to:0x020c3614 module:overlay(0) from:0x02189ed4 kind:arm_call to:0x02189de8 module:overlay(43) from:0x02189ef4 kind:load to:0x027e0fe4 module:dtcm -from:0x02189ef8 kind:load to:0x020e7290 module:overlay(0) +from:0x02189ef8 kind:load to:0x020e7288 add:8 module:overlay(0) from:0x02189f8c kind:arm_call to:0x020c378c module:overlay(0) from:0x02189fb8 kind:arm_call to:0x020c3614 module:overlay(0) from:0x0218a024 kind:arm_call to:0x020cea6c module:overlay(0) from:0x0218a038 kind:arm_call to:0x020cea6c module:overlay(0) from:0x0218a040 kind:arm_call to:0x020cc120 module:overlay(0) from:0x0218a04c kind:load to:0x027e0fe4 module:dtcm -from:0x0218a050 kind:load to:0x020e7290 module:overlay(0) +from:0x0218a050 kind:load to:0x020e7288 add:8 module:overlay(0) from:0x0218a058 kind:load to:0x027e0ffc module:dtcm from:0x0218a06c kind:arm_call to:0x020cae98 module:overlay(0) from:0x0218a0cc kind:arm_call to:0x0218a17c module:overlay(43) diff --git a/config/usa/arm9/overlays/ov044/relocs.txt b/config/usa/arm9/overlays/ov044/relocs.txt index 2389269e..3a9203d5 100644 --- a/config/usa/arm9/overlays/ov044/relocs.txt +++ b/config/usa/arm9/overlays/ov044/relocs.txt @@ -757,11 +757,11 @@ from:0x0218e420 kind:arm_call to:0x020839bc module:overlay(0) from:0x0218e42c kind:arm_call to:0x02084064 module:overlay(0) from:0x0218e4d0 kind:arm_call to:0x020c378c module:overlay(0) from:0x0218e4e8 kind:load to:0x027e0e60 module:dtcm -from:0x0218e4ec kind:load to:0x020e7290 module:overlay(0) +from:0x0218e4ec kind:load to:0x020e7288 add:8 module:overlay(0) from:0x0218e4f4 kind:load to:0x027e0fe4 module:dtcm from:0x0218e584 kind:arm_call to:0x020c378c module:overlay(0) from:0x0218e604 kind:load to:0x027e0fe4 module:dtcm -from:0x0218e608 kind:load to:0x020e7290 module:overlay(0) +from:0x0218e608 kind:load to:0x020e7288 add:8 module:overlay(0) from:0x0218e610 kind:load to:0x027e0764 module:dtcm from:0x0218e6a8 kind:arm_call to:0x01ff9e64 module:itcm from:0x0218e6c0 kind:arm_call_thumb to:0x020b3e48 module:overlay(0) diff --git a/config/usa/arm9/overlays/ov048/relocs.txt b/config/usa/arm9/overlays/ov048/relocs.txt index 3f1f2b8a..caf19ead 100644 --- a/config/usa/arm9/overlays/ov048/relocs.txt +++ b/config/usa/arm9/overlays/ov048/relocs.txt @@ -464,7 +464,7 @@ from:0x02193e7c kind:arm_call to:0x0207a168 module:overlay(0) from:0x02193e88 kind:load to:0x02050f10 module:main from:0x02193e8c kind:load to:0x027e0e58 module:dtcm from:0x02193e94 kind:load to:0x021945e8 module:overlay(48) -from:0x02193e98 kind:load to:0x020e7290 module:overlay(0) +from:0x02193e98 kind:load to:0x020e7288 add:8 module:overlay(0) from:0x02193ea0 kind:load to:0x027e0fe4 module:dtcm from:0x02193ec4 kind:arm_call to:0x0204f710 module:main from:0x02193ecc kind:arm_call to:0x020b7e0c module:overlay(0) diff --git a/src/00_Core/Actor/ActorManager.cpp b/src/00_Core/Actor/ActorManager.cpp index 5344745d..73ab6bbb 100644 --- a/src/00_Core/Actor/ActorManager.cpp +++ b/src/00_Core/Actor/ActorManager.cpp @@ -2,7 +2,7 @@ #include "DTCM/UnkStruct_027e103c.hpp" #include "Map/MapManager.hpp" -char *gShipParts[8] = {"anc", "bow", "hul", "can", "dco", "pdl", "fnl", "brg"}; +static char *sShipTypes[8] = {"anc", "bow", "hul", "can", "dco", "pdl", "fnl", "brg"}; extern "C" Cylinder *func_ov000_020c3ef0(void *, u32 index); extern "C" bool func_ov000_020c3f08(void *, u32 index);