From 673269f181f456d7dbaebbe6d4bc95078833aa36 Mon Sep 17 00:00:00 2001 From: Aetias Date: Thu, 24 Oct 2024 21:55:19 +0200 Subject: [PATCH] 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;