summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAetias <aetias@outlook.com>2024-10-24 21:55:19 +0200
committerAetias <aetias@outlook.com>2024-10-24 21:55:19 +0200
commit673269f181f456d7dbaebbe6d4bc95078833aa36 (patch)
tree117796070716546eb33b29e8deee1191b9d04e93
parent9846ef3d665f15143e88111416569dda42ead1d3 (diff)
Decomp `ActorManager` 100%
-rw-r--r--config/eur/arm9/overlays/ov000/symbols.txt4
-rw-r--r--config/usa/arm9/overlays/ov000/symbols.txt4
-rw-r--r--include/Actor/ActorManager.hpp4
-rw-r--r--src/00_Core/Actor/ActorManager.cpp24
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;