mirror of
https://github.com/zeldaret/ph
synced 2026-05-30 08:56:32 -04:00
Decomp ActorManager
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
};
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -9,5 +9,6 @@ struct AABB {
|
||||
Vec3p min;
|
||||
Vec3p max;
|
||||
|
||||
bool Contains(Vec3p *vec);
|
||||
bool ContainsInXZ(Vec3p *vec);
|
||||
};
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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) {}
|
||||
|
||||
Reference in New Issue
Block a user