summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorAetiasHax <144526980+AetiasHax@users.noreply.github.com>2024-04-14 13:59:57 +0200
committerGitHub <noreply@github.com>2024-04-14 13:59:57 +0200
commit9ac440e5ec100de026204c49aae118bdc79a5349 (patch)
tree3b839fa08281c0e23b623ab00574dd9106ef347e /include
parentd4493f49bc72991cf5df2a72f386f04638159958 (diff)
parent35c6652f33678d802acb93633fb77c3edd1bce18 (diff)
Merge pull request #24 from AetiasHax/actor
Delink `Actor` and `ActorManager`, update docs
Diffstat (limited to 'include')
-rw-r--r--include/Actor/Actor.hpp147
-rw-r--r--include/Actor/ActorManager.hpp93
-rw-r--r--include/Actor/ActorRef.hpp10
-rw-r--r--include/Actor/FilterActorBase.hpp15
-rw-r--r--include/Physics/AABB.hpp11
-rw-r--r--include/Physics/Sphere.hpp11
-rw-r--r--include/Player/PlayerBase.hpp2
-rw-r--r--include/Player/PlayerLinkBase.hpp2
8 files changed, 264 insertions, 27 deletions
diff --git a/include/Actor/Actor.hpp b/include/Actor/Actor.hpp
index 278cce90..c5b71193 100644
--- a/include/Actor/Actor.hpp
+++ b/include/Actor/Actor.hpp
@@ -5,8 +5,60 @@
#include "lib/math.h"
+#include "Actor/ActorRef.hpp"
+#include "Actor/FilterActorBase.hpp"
#include "Physics/Cylinder.hpp"
#include "Physics/Transform.hpp"
+#include "Player/EquipBoomerang.hpp"
+
+struct Actor_UnkStruct_020 {
+ /* 00 */ unk16 mUnk_00[4];
+ /* 08 */ unk8 mUnk_08[2];
+ /* 0a */ unk8 mUnk_0a[2];
+ /* 0c */ unk8 mUnk_0c;
+ /* 0c */ unk8 mUnk_0d;
+ /* 0c */ unk8 mUnk_0e;
+ /* 0c */ unk8 mUnk_0f;
+ /* 10 */ unk32 mUnk_10;
+ /* 14 */
+};
+
+struct Actor_UnkStruct_09c {
+ /* 0 */ unk16 mUnk_0;
+ /* 2 */ unk8 mUnk_2;
+ /* 3 */ unk8 mUnk_3;
+ /* 4 */ unk32 mUnk_4;
+ /* 8 */
+
+ Actor_UnkStruct_09c();
+};
+
+struct Actor_UnkStruct_0a4 {
+ /* 00 */ bool mUnk_00;
+ /* 01 */ bool mUnk_01;
+ /* 01 */ bool mUnk_02;
+ /* 01 */ bool mUnk_03;
+ /* 04 */ Vec3p mUnk_04;
+ /* 10 */ s32 mUnk_10;
+ /* 14 */
+};
+
+class KillPickupItemActors : public FilterActorBase {
+ /* 0 (base) */
+ /* 4 */
+
+ /* 0 */ virtual bool Filter(Actor *actor) override;
+ /* 4 */
+};
+
+typedef u32 PlayerCollide;
+enum PlayerCollide_ {
+ PlayerCollide_Player = 0x1,
+ PlayerCollide_Sword = 0x2,
+ PlayerCollide_Shield = 0x4,
+ PlayerCollide_Gongoron = 0x8,
+ PlayerCollide_Hammer = 0x10,
+};
class Actor {
public:
@@ -20,8 +72,7 @@ public:
/* 014 */ unk32 mUnk_014;
/* 018 */ unk32 mUnk_018;
/* 01c */ unk32 mUnk_01c;
- /* 020 */ unk32 mUnk_020;
- /* 024 */ unk8 mUnk_024[0x10];
+ /* 020 */ Actor_UnkStruct_020 mUnk_020;
/* 034 */ unk32 mUnk_034;
/* 038 */ unk32 mUnk_038;
/* 03c */ unk32 mUnk_03c;
@@ -30,21 +81,15 @@ public:
/* 048 */ Vec3p mPos;
/* 054 */ Vec3p mPrevPos;
/* 060 */ Vec3p mVel;
- /* 06c */ unk32 mUnk_06c;
- /* 070 */ unk32 mUnk_070;
+ /* 06c */ unk32 mGravity;
+ /* 070 */ unk32 mMaxFall;
/* 074 */ unk32 mUnk_074;
- /* 078 */ unk16 mUnk_078;
+ /* 078 */ s16 mRotation;
/* 07a */ unk16 mUnk_07a;
/* 07c */ Cylinder mHitbox;
/* 08c */ Cylinder mUnk_08c;
- /* 09c */ unk16 mUnk_09c;
- /* 09e */ unk8 mUnk_09e;
- /* 09f */ unk8 mUnk_09f;
- /* 0a4 */ unk8 mUnk_0a4[0x4];
- /* 0a8 */ unk32 mUnk_0a8;
- /* 0ac */ unk32 mUnk_0ac;
- /* 0b0 */ unk32 mUnk_0b0;
- /* 0b4 */ unk32 mUnk_0b4;
+ /* 09c */ Actor_UnkStruct_09c mUnk_09c;
+ /* 0a4 */ Actor_UnkStruct_0a4 mUnk_0a4;
/* 0b8 */ unk8 mUnk_0b8[0x24];
/* 0dc */ unk16 mUnk_0dc;
/* 0de */ unk16 mUnk_0de;
@@ -78,24 +123,24 @@ public:
/* 125 */ unk8 mUnk_125;
/* 126 */ unk16 mUnk_126;
/* 128 */ bool mUnk_128;
- /* 129 */ unk8 mUnk_129;
+ /* 129 */ bool mUnk_129;
/* 12a */ unk8 mUnk_12a;
/* 12b */ unk8 mUnk_12b;
/* 12c */ unk32 mUnk_12c;
/* 130 */ unk32 mUnk_130;
/* 134 */ unk32 mUnk_134;
- /* 138 */ unk32 mUnk_138;
+ /* 138 */ unk32 mActiveFrames;
/* 13c */ unk32 mUnk_13c;
/* 140 */ unk32 mUnk_140;
/* 144 */ unk32 mUnk_144;
- /* 148 */
-
- Actor();
+ /* 148 */ Vec3p mWallTouch;
+ /* 154 */ u32 mInactive;
+ /* 158 */
/* 00 */ virtual ~Actor();
/* 08 */ virtual bool vfunc_08();
/* 0c */ virtual void vfunc_0c();
- /* 10 */ virtual void vfunc_10();
+ /* 10 */ virtual void vfunc_10(u32 param1);
/* 14 */ virtual void vfunc_14(u32 param1);
/* 18 */ virtual void vfunc_18(u32 param1);
/* 1c */ virtual void vfunc_1c(u16 param1);
@@ -109,7 +154,7 @@ public:
/* 3c */ virtual bool CollidesWithLink();
/* 40 */ virtual bool IsHitboxTouched(bool param1);
/* 44 */ virtual bool CollidesWith(const Actor *other);
- /* 48 */ virtual bool vfunc_48();
+ /* 48 */ virtual bool vfunc_48(unk32 param1);
/* 4c */ virtual bool vfunc_4c(unk32 *param1);
/* 50 */ virtual Vec3p* GetPos();
/* 54 */ virtual void vfunc_54();
@@ -129,12 +174,70 @@ public:
/* 8c */ virtual void vfunc_8c();
/* 90 */ virtual bool vfunc_90();
/* 94 */ virtual void vfunc_94();
- /* 98 */ virtual void vfunc_98();
- /* 9c */ virtual void vfunc_9c();
+ /* 98 */ virtual bool vfunc_98();
+ /* 9c */ virtual bool vfunc_9c();
/* a0 */ virtual bool TrySetTransform(Transform *transform);
/* a4 */ virtual void SetTransform(Transform *transform);
/* a8 */ virtual void vfunc_a8();
/* ac */ virtual void vfunc_ac();
/* b0 */ virtual void vfunc_b0();
/* b4 */
+
+ Actor();
+ void func_ov00_020c1788();
+ void SetUnk_129(bool value);
+ void SetUnk_11c(unk8 value);
+ bool func_ov00_020c195c();
+ bool func_ov00_020c198c();
+ void KillPickupItemActors();
+ void func_Ov00_020c1bfc(s32 param1);
+ void func_ov00_020c1c20(s32 param1, unk32 param2, unk32 param3);
+ bool IsNearLink();
+ void func_ov00_020c1cf8();
+ bool func_ov00_020c1d58();
+ bool func_ov00_020c1da0(s32 param1, Vec3p *param2);
+ bool func_ov00_020c1e2c(s32 param1, Vec3p *param2);
+ bool func_ov00_020c1ef8(Cylinder *param1, Vec3p *param2, s32 param3, s32 param4);
+ bool func_ov00_020c1f5c(Vec3p *param1, Vec3p *param2, s32 param3, Vec3p *param4, s32 param5, s32 param6);
+ bool func_ov00_020c1fc8(PlayerCollide flags);
+ bool CollidesWithShield(Cylinder *param1);
+ bool CollidesWithPlayer(PlayerCollide flags);
+ static void func_ov00_020c23c4(ActorRef *ref, Actor *actor);
+ static void func_ov00_020c23d4(ActorRef *ref, Actor *actor, Cylinder *cylinder);
+ bool func_ov00_020c243c(unk32 param1, s32 *param2);
+ bool func_ov00_020c27a8(unk32 param1);
+ bool IsFollowedByLink();
+ void StopLinkFollow();
+ bool IsGrabbed();
+ s32 XzDistanceTo(Vec3p *vec);
+ s32 DistanceToLink();
+ s32 XzDistanceToLink();
+ s32 GetAngleTo(Vec3p *vec);
+ s32 GetAngleToLink();
+ void func_ov00_020c2988(Vec3p *param1, s32 param2, Vec3p *param3);
+ void ResetWallTouch();
+ bool func_ov00_020c29ec(s32 param1);
+ void GetHitbox(Cylinder *param1);
+ void GetUnk_08c(Cylinder *param1);
+ void IncreaseActiveFrames();
+ bool func_ov00_020c2c0c();
+ bool func_ov00_020c2c70();
+ EquipBoomerang* GetEquipBoomerang();
+ bool func_ov00_020c2d54();
+ bool func_ov00_020c2de4();
+ bool func_ov00_020c2e7c();
+ bool func_ov00_020c2ebc();
+ bool func_ov00_020c2ed4();
+ void ApplyGravity();
+ bool func_ov00_020c3094();
+ bool func_ov00_020c3118(unk16 param1);
+ bool func_ov00_020c313c(u32 param1);
+ void func_ov00_020c3158();
+ void Kill();
+ void KillInBounds();
+ void func_ov00_020c31c0(unk32 param1);
+ void vfunc_ac_Thunk();
+ void func_ov00_020c3200(s32 param1);
+ void GetLinkPos(Vec3p *result);
+ void GetLinkDummyPos(Vec3p *result);
};
diff --git a/include/Actor/ActorManager.hpp b/include/Actor/ActorManager.hpp
index 139c0079..bf659965 100644
--- a/include/Actor/ActorManager.hpp
+++ b/include/Actor/ActorManager.hpp
@@ -3,7 +3,94 @@
#include "global.h"
#include "types.h"
-struct ActorRef {
- s32 id;
- s32 index;
+#include "Actor/Actor.hpp"
+#include "Actor/ActorRef.hpp"
+#include "Actor/FilterActorBase.hpp"
+#include "Physics/AABB.hpp"
+#include "Physics/Sphere.hpp"
+
+struct ActorManager_UnkStruct_68 {
+ /* 0 */ u32 unk_0;
+ /* 4 */ u32 unk_4;
+ /* 8 */ u32 unk_8;
+ /* c */
+};
+
+class FilterActor : public FilterActorBase {
+ /* 00 (base) */
+ /* 04 */ u32 mType;
+ /* 08 */ s32 mUnk_08;
+ /* 0c */ s32 mUnk_0c;
+ /* 10 */ s32 *mExcludeIds; // 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;
+ /* 44 */
+
+ /* 0 */ virtual bool Filter(Actor *actor) override;
+ /* 4 */
+};
+
+struct ActorList {
+ /* 0 */ ActorRef *actors;
+ /* 4 */ s32 capacity;
+ /* 8 */ s32 length;
+ /* c */
+};
+
+class ActorManager {
+public:
+ /* 00 */ u16 mMaxActors;
+ /* 02 */ unk16 mNumActors;
+ /* 04 */ unk32 mMaxActorIndex;
+ /* 08 */ s32 mCacheEmptyActorIndex;
+ /* 0c */ unk32 mNextActorId;
+ /* 10 */ Actor **mActorTable;
+ /* 14 */ void *mUnk_14;
+ /* 18 */ unk8 mUnk_18[4];
+ /* 1c */ unk32 mUnk_1c;
+ /* 20 */ unk32 mUnk_20;
+ /* 24 */ unk32 mUnk_24;
+ /* 28 */ unk8 mUnk_28;
+ /* 29 */ bool mUnk_29;
+ /* 2a */ unk8 mUnk_2a;
+ /* 2b */ unk8 mUnk_2b;
+ /* 2c */ unk32 mUnk_2c;
+ /* 30 */ unk32 mUnk_30;
+ /* 34 */ unk32 mUnk_34;
+ /* 38 */ unk8 mUnk_38[4];
+ /* 3c */ u32 mUnk_3c;
+ /* 40 */ unk32 mUnk_40;
+ /* 44 */ unk32 mUnk_44;
+ /* 48 */ u32 mUnk_48;
+ /* 4c */ unk32 mUnk_4c;
+ /* 50 */ unk32 mUnk_50;
+ /* 54 */ unk8 mUnk_54[4];
+ /* 58 */ u32 mUnk_58;
+ /* 5c */ unk32 mUnk_5c;
+ /* 60 */ unk32 mUnk_60;
+ /* 64 */ unk8 mUnk_64[4];
+ /* 68 */ ActorManager_UnkStruct_68 mUnk_68[5];
+ /* a4 */ unk8 mUnk_a4[0x20];
+ /* c4 */
+
+ 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* GetActor(ActorRef *ref);
+ s32 FilterActors(FilterActorBase *filter, ActorList *filteredActors);
+ static void FindActorByType(ActorRef *ref, ActorManager *manager, u32 type);
+ static void FindNearestActorOfType(ActorRef *ref, ActorManager *manager, u32 type, Vec3p *pos);
+ void func_ov00_020c398c();
+ void func_ov00_020c399c();
+ void func_ov00_020c39ac(u32 index, u32 *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(u32 type, u32 *types);
};
diff --git a/include/Actor/ActorRef.hpp b/include/Actor/ActorRef.hpp
new file mode 100644
index 00000000..b98c86a9
--- /dev/null
+++ b/include/Actor/ActorRef.hpp
@@ -0,0 +1,10 @@
+#pragma once
+
+#include "global.h"
+#include "types.h"
+
+struct ActorRef {
+ /* 0 */ s32 id;
+ /* 4 */ s32 index;
+ /* 8 */
+};
diff --git a/include/Actor/FilterActorBase.hpp b/include/Actor/FilterActorBase.hpp
new file mode 100644
index 00000000..6a969411
--- /dev/null
+++ b/include/Actor/FilterActorBase.hpp
@@ -0,0 +1,15 @@
+#pragma once
+
+#include "global.h"
+#include "types.h"
+
+class Actor;
+
+class FilterActorBase {
+public:
+ /* 0 (vtable) */
+ /* 4 */
+
+ /* 0 */ virtual bool Filter(Actor *actor) = 0;
+ /* 4 */
+};
diff --git a/include/Physics/AABB.hpp b/include/Physics/AABB.hpp
new file mode 100644
index 00000000..358aed1c
--- /dev/null
+++ b/include/Physics/AABB.hpp
@@ -0,0 +1,11 @@
+#pragma once
+
+#include "global.h"
+#include "types.h"
+
+#include "lib/math.h"
+
+struct AABB {
+ Vec3p min;
+ Vec3p max;
+};
diff --git a/include/Physics/Sphere.hpp b/include/Physics/Sphere.hpp
new file mode 100644
index 00000000..eaed104d
--- /dev/null
+++ b/include/Physics/Sphere.hpp
@@ -0,0 +1,11 @@
+#pragma once
+
+#include "global.h"
+#include "types.h"
+
+#include "lib/math.h"
+
+struct Sphere {
+ Vec3p pos;
+ int radius;
+};
diff --git a/include/Player/PlayerBase.hpp b/include/Player/PlayerBase.hpp
index 53daf578..7fac1b3c 100644
--- a/include/Player/PlayerBase.hpp
+++ b/include/Player/PlayerBase.hpp
@@ -36,7 +36,7 @@ public:
/* 24 */ virtual void vfunc_24() = 0;
/* 28 */ virtual void vfunc_28(s32 param1) = 0;
/* 2c */ virtual void vfunc_2c(s32 param1, unk8 param2) = 0;
- /* 30 */ virtual void vfunc_30() = 0;
+ /* 30 */ virtual bool vfunc_30(s32 param1, Vec3p *param2, s32 param3) = 0;
/* 34 */ virtual bool Teleport(Vec3p *pos, s16 angle, unk32 param3, bool param4, bool param5);
/* 38 */ virtual bool TeleportToEntrance(unk32 entranceId, bool param2);
/* 3c */ virtual bool TeleportToLastEntrance(bool param1);
diff --git a/include/Player/PlayerLinkBase.hpp b/include/Player/PlayerLinkBase.hpp
index 631343fb..e708f235 100644
--- a/include/Player/PlayerLinkBase.hpp
+++ b/include/Player/PlayerLinkBase.hpp
@@ -55,7 +55,7 @@ class PlayerLinkBase: public PlayerBase {
/* 24 */ void vfunc_24() override;
/* 28 */ void vfunc_28(s32 param1) override;
/* 2c */ void vfunc_2c(s32 param1, unk8 param2) override;
- /* 30 */ void vfunc_30(s32 param1, Vec3p *param2, s32 param3) override;
+ /* 30 */ bool vfunc_30(s32 param1, Vec3p *param2, s32 param3) override;
/* 34 */ bool Teleport(Vec3p *pos, s16 angle, unk32 param3, bool param4, bool param5) override;
/* 38 */ bool TeleportToEntrance(unk32 entranceId, bool param2) override;
/* 3c */ bool TeleportToLastEntrance(bool param1) override;