#pragma once #include "global.h" #include "types.h" #include "nds/math.h" #include "Actor/ActorRef.hpp" #include "Actor/ActorType.hpp" #include "Actor/FilterActorBase.hpp" #include "Physics/Cylinder.hpp" #include "Physics/Transform.hpp" #include "Player/EquipBoomerang.hpp" #include "System/SysNew.hpp" struct Actor_UnkStruct_012 { /* 00 */ u16 mUnk_00; /* 02 */ u8 mUnk_02; /* 03 */ u8 mUnk_03; /* 04 */ u32 mUnk_04; /* 08 */ u32 mUnk_08; /* 0c */ u32 mUnk_0c; /* 10 */ u8 mUnk_10; /* 11 */ u8 mUnk_11; /* 12 */ u8 mUnk_12[0x2]; /* 14 */ u32 mUnk_14; /* 18 */ u32 mUnk_18; /* 1c */ Actor_UnkStruct_012(); }; struct Actor_UnkStruct_020 { /* 00 */ u16 mUnk_00[4]; /* 08 */ u8 mUnk_08[2]; /* 0a */ u8 mUnk_0a[2]; /* 0c */ unk8 mUnk_0c; /* 0d */ u8 mUnk_0d; /* 0e */ u8 mUnk_0e; /* 0f */ unk8 mUnk_0f; /* 10 */ unk32 mUnk_10; /* 14 */ Actor_UnkStruct_020(); }; struct Actor_UnkStruct_09c { /* 0 */ u16 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; /* 02 */ bool mUnk_02; /* 03 */ bool mUnk_03; /* 04 */ Vec3p mUnk_04; /* 10 */ s32 mUnk_10; /* 14 */ Actor_UnkStruct_0a4(q20 x, q20 y, q20 z, s32 unk_10); void func_ov000_0207a1c8(unk32 param1, Vec3p *param2); }; class KillPickupsFilter : FilterActorReturn, public FilterActorBase { public: /* 00 (base) */ /* 04 */ /* 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, /* 0x1b */ PlayerCollide_PickupFlags = PlayerCollide_Hammer | PlayerCollide_Gongoron | PlayerCollide_Sword | PlayerCollide_Player, }; struct Knockback { /* 00 */ u8 mUnk_00; /* 04 */ Vec3p vec; /* 10 */ unk32 mUnk_10; /* 14 */ Actor *actor; inline Knockback() : mUnk_00(0), mUnk_10(0xb), actor(NULL) {} }; class Actor : public SysObject { public: /* 000 (vtable) */ /* 004 */ ActorTypeId mType; /* 008 */ ActorRef mRef; /* 010 */ u8 mUnk_010; /* 011 */ u8 mUnk_011; /* 012 */ unk16 mUnk_012; /* 014 */ Vec3p mUnk_014; /* 020 */ Actor_UnkStruct_020 mUnk_020; /* 034 */ ActorRef mUnk_034; /* 03c */ unk32 mUnk_03c; /* 040 */ ActorRef mUnk_040; /* 048 */ Vec3p mPos; /* 054 */ Vec3p mPrevPos; /* 060 */ Vec3p mVel; /* 06c */ unk32 mGravity; /* 070 */ unk32 mMaxFall; /* 074 */ unk32 mUnk_074; /* 078 */ u16 mAngle; /* 07a */ u16 mUnk_07a; /* 07c */ Cylinder mHitbox; /* 08c */ Cylinder mUnk_08c; /* 09c */ Actor_UnkStruct_09c mUnk_09c; /* 0a4 */ Actor_UnkStruct_0a4 mUnk_0a4; /* 0b8 */ unk8 mUnk_0b8[0x24]; /* 0dc */ u16 mUnk_0dc; /* 0de */ u16 mUnk_0de; /* 0e0 */ u16 mUnk_0e0; /* 0e2 */ u16 mUnk_0e2; /* 0e4 */ unk16 mUnk_0e4; /* 0e6 */ unk8 mUnk_0e6[0x20]; /* 106 */ unk8 mUnk_106; /* 107 */ unk8 mUnk_107; /* 108 */ unk8 mUnk_108; /* 109 */ unk8 mUnk_109; /* 10a */ unk8 mUnk_10a[0x6]; /* 110 */ bool mUnk_110; /* 111 */ bool mUnk_111; /* 112 */ bool mUnk_112; /* 113 */ bool mUnk_113; /* 114 */ unk8 mUnk_114; /* 115 */ unk8 mUnk_115; /* 116 */ unk8 mUnk_116; /* 117 */ unk8 mUnk_117; /* 118 */ bool mAlive; /* 119 */ u8 mUnk_119; /* 11a */ bool mVisible; /* 11b */ bool mUnk_11b; /* 11c */ unk8 mUnk_11c; /* 11d */ bool mUnk_11d; /* 11e */ q4 mYOffset; /* 120 */ s16 mUnk_120; /* 122 */ unk16 mUnk_122; /* 124 */ u8 mUnk_124; /* 125 */ u8 mUnk_125; /* 126 */ u16 mUnk_126; /* 128 */ bool mUnk_128; /* 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 mActiveFrames; /* 13c */ unk32 mUnk_13c; /* 140 */ unk32 mUnk_140; /* 144 */ unk32 mUnk_144; /* 148 */ Vec3p mWallTouch; /* 154 */ u32 mInactive; /* 158 */ /* 00 */ virtual ~Actor(); /* 08 */ virtual bool Init(); /* 0c */ virtual bool vfunc_0c(); /* 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); /* 20 */ virtual void vfunc_20(bool param1); /* 24 */ virtual void vfunc_24(); /* 28 */ virtual void vfunc_28(); /* 2c */ virtual s32 vfunc_2c(); /* 30 */ virtual unk32 vfunc_30(); /* 34 */ virtual void GetOffsetPos(Vec3p *pos); /* 38 */ virtual unk32 vfunc_38(); /* 3c */ virtual bool CollidesWithLink(); /* 40 */ virtual bool IsHitboxTouched(bool param1); /* 44 */ virtual bool CollidesWith(Actor *other); /* 48 */ virtual bool vfunc_48(Knockback *param1); /* 4c */ virtual bool vfunc_4c(unk32 *param1); /* 50 */ virtual Vec3p *GetPos(); /* 54 */ virtual void vfunc_54(); /* 58 */ virtual bool SetUnk_11b(); /* 5c */ virtual bool SetVelocity(Vec3p *vel); /* 60 */ virtual bool vfunc_60(); /* 64 */ virtual void vfunc_64(); /* 68 */ virtual void vfunc_68(); /* 6c */ virtual bool vfunc_6c(); /* 70 */ virtual bool vfunc_70(); /* 74 */ virtual void vfunc_74(); /* 78 */ virtual bool vfunc_78(); /* 7c */ virtual void vfunc_7c(); /* 80 */ virtual void vfunc_80(); /* 84 */ virtual void vfunc_84(); /* 88 */ virtual void vfunc_88(); /* 8c */ virtual bool vfunc_8c(); /* 90 */ virtual bool vfunc_90(); /* 94 */ virtual void vfunc_94(); /* 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(); bool func_01fffd04(s32 param1); unk8 func_ov00_020c1788(); void SetUnk_129(bool value); void SetUnk_11c(unk8 value); bool func_ov00_020c195c(); bool func_ov00_020c198c(); void KillPickupItemActors(); bool func_ov00_020c1bfc(s32 param1); void func_ov00_020c1c20(s32 param1, unk32 param2); 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, u8 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(ActorTypeId *actorTypes, Actor **result); bool func_ov00_020c27a8(unk32 param1); bool IsFollowedByLink(); void StopLinkFollow(); bool IsGrabbed(); q20 XzDistanceTo(Vec3p *vec); q20 DistanceToLink(); q20 XzDistanceToLink(); s16 GetAngleTo(Vec3p *vec); s32 GetAngleToLink(); void func_ov00_020c2988(Vec3p *param1, q20 param2, Vec3p *param3); void ResetWallTouch(); bool func_ov00_020c29ec(q20 param1); void GetHitbox(Cylinder *hitbox); 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 func_ov00_020c3200(s32 param1); void GetLinkPos(Vec3p *result); void GetLinkDummyPos(Vec3p *result); };