Add OoT actor structs and enums (#55)

* add oot structs

* revert formatting

* fix comment thing

* fix accidental renames

* slight fix

* naviEnemyId -> hintId

* fix headers
This commit is contained in:
Zelllll
2021-02-28 21:52:12 -06:00
committed by GitHub
parent 5c761c33f0
commit fb1ed529ad
586 changed files with 888 additions and 870 deletions
+14 -14
View File
@@ -676,7 +676,7 @@ void func_800B3644(void); // func_800B3644
void DLF_LoadGameState(GameStateOverlay* gameState); // func_800B3880
void DLF_FreeGameState(GameStateOverlay* gameState); // func_800B39A4
void Actor_PrintLists(ActorContext* actCtxt); // func_800B3AD0
void Actor_SetDrawParams(ActorShape* iParm1, f32 yDisplacement, actor_shadow_draw_func func, f32 scale); // func_800B3BA4
void Actor_SetDrawParams(ActorShape* actorShape, f32 yOffset, ActorShadowFunc func, f32 scale); // func_800B3BA4
void Actor_PostDraw(Actor* actor, LightMapper* mapper, GlobalContext* ctxt, u32 displayList, ColorRGBA8* color); // func_800B3BC8
void func_800B3FC0(Actor* actor, LightMapper* mapper, GlobalContext* ctxt); // func_800B3FC0
void func_800B4024(Actor* actor, LightMapper* mapper, GlobalContext* ctxt); // func_800B4024
@@ -686,7 +686,7 @@ void func_800B40E0(GlobalContext* ctxt, int iParm2, z_Matrix* pzParm3, int iParm
void func_800B42F8(Actor* actor, LightMapper* mapper, GlobalContext* ctxt); // func_800B42F8
void func_800B4A98(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6); // func_800B4A98
void func_800B4AEC(GlobalContext* ctxt, Actor* actor, f32 param_3); // func_800B4AEC
void func_800B4B50(Actor* iParm1, int iParm2, GlobalContext* pzParm3); // func_800B4B50
void func_800B4B50(Actor* actor, int iParm2, GlobalContext* pzParm3); // func_800B4B50
void func_800B4EDC(GlobalContext* ctxt, Vec3f* pzParm2, Vec3f* pzParm3, f32* pfParm4); // func_800B4EDC
void func_800B4F40(TargetContext* targetContext, int param_2, UNK_TYPE4 param_3, UNK_TYPE4 param_4, UNK_TYPE4 param_5); // func_800B4F40
void func_800B4F78(TargetContext* targetContext, u8 type, GlobalContext* ctxt); // func_800B4F78
@@ -734,7 +734,7 @@ void Actor_InitToDefaultValues(Actor* actor, GlobalContext* ctxt); // func_800B6
void Actor_FiniActor(Actor* actor, GlobalContext* ctxt); // func_800B6948
void Actor_SetMovementScale(s32 scale); // func_800B6988
void Actor_ApplyMovement(Actor* actor); // func_800B69AC
void Actor_SetVelocityYRotationAndGravity(Actor* iParm1); // func_800B6A10
void Actor_SetVelocityYRotationAndGravity(Actor* actor); // func_800B6A10
void Actor_SetVelocityAndMoveYRotationAndGravity(Actor* actor); // func_800B6A88
void Actor_SetVelocityXYRotation(Actor* actor); // func_800B6AB4
void Actor_SetVelocityAndMoveXYRotation(Actor* actor); // func_800B6B24
@@ -805,7 +805,7 @@ void func_800B886C(void); // func_800B886C
void func_800B8898(GlobalContext* ctxt, Actor* actor, UNK_PTR param_3, UNK_PTR param_4); // func_800B8898
void func_800B8934(void); // func_800B8934
u32 Actor_HasParent(Actor* actor, GlobalContext* ctxt); // func_800B89F8
UNK_TYPE4 func_800B8A1C(Actor* iParm1, GlobalContext* ctxt, int iParm3, float fParm4, float param_5); // func_800B8A1C
UNK_TYPE4 func_800B8A1C(Actor* actor, GlobalContext* ctxt, int iParm3, float fParm4, float param_5); // func_800B8A1C
void func_800B8B84(void); // func_800B8B84
void func_800B8BB0(void); // func_800B8BB0
void func_800B8BD0(void); // func_800B8BD0
@@ -821,7 +821,7 @@ void func_800B8D98(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_
void func_800B8DD4(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5, UNK_TYPE4 param_6); // func_800B8DD4
void func_800B8E1C(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5); // func_800B8E1C
void func_800B8E58(void); // func_800B8E58
void func_800B8EC8(Actor* iParm1, u32 uParm2); // func_800B8EC8
void func_800B8EC8(Actor* actor, u32 uParm2); // func_800B8EC8
void func_800B8EF4(void); // func_800B8EF4
void func_800B8F98(Actor* actor, u16 sfxId); // func_800B8F98
void func_800B8FC0(void); // func_800B8FC0
@@ -1493,11 +1493,11 @@ void Collision_SphereWithSphereOT(GlobalContext* ctxt, CollisionCheckContext* co
UNK_TYPE4 func_800E7264(ColCommon* iParm1); // func_800E7264
UNK_TYPE4 func_800E7288(ColCommon* piParm1, ColCommon* piParm2); // func_800E7288
void Collision_DoOTWithOT(GlobalContext* ctxt, CollisionCheckContext* colCtxt); // func_800E7308
void func_800E7494(ActorA0* param_1); // func_800E7494
void func_800E74DC(ActorA0* param_1); // func_800E74DC
void func_800E7494(CollisionCheckInfo* param_1); // func_800E7494
void func_800E74DC(CollisionCheckInfo* param_1); // func_800E74DC
void func_800E7508(s32 param_1, UNK_PTR param_2); // func_800E7508
void func_800E7530(ActorA0* param_1, ActorDamageChart* param_2, UNK_PTR param_3); // func_800E7530
void func_800E755C(ActorA0* puParm1, ActorDamageChart* uParm2, UNK_PTR puParm3); // func_800E755C
void func_800E7530(CollisionCheckInfo* param_1, DamageTable* param_2, UNK_PTR param_3); // func_800E7530
void func_800E755C(CollisionCheckInfo* puParm1, DamageTable* uParm2, UNK_PTR puParm3); // func_800E755C
void func_800E7590(void); // func_800E7590
void func_800E75C8(void); // func_800E75C8
void func_800E77EC(void); // func_800E77EC
@@ -2436,7 +2436,7 @@ s32 Scene_LoadObject(SceneContext* sceneCtxt, s16 id); // func_8012F2E0
void Scene_Init(GlobalContext* ctxt, SceneContext* sceneCtxt); // func_8012F3D0
void Scene_ReloadUnloadedObjects(SceneContext* sceneCtxt); // func_8012F4FC
s32 Scene_FindSceneObjectIndex(SceneContext* sceneCtxt, s16 id); // func_8012F608
s32 Scene_IsObjectLoaded(SceneContext* iParm1, s32 index); // func_8012F668
s32 Scene_IsObjectLoaded(SceneContext* sceneCtxt, s32 index); // func_8012F668
void Scene_DmaAllObjects(SceneContext* sceneCtxt); // func_8012F698
void* func_8012F73C(SceneContext* sceneCtxt, s32 iParm2, s16 id); // func_8012F73C
void Scene_HeaderCommand00(GlobalContext* ctxt, SceneCmd* entry); // func_8012F79C
@@ -2885,9 +2885,9 @@ void func_801496C8(void); // func_801496C8
void func_8014995C(void); // func_8014995C
void func_80149C18(void); // func_80149C18
void func_80149EBC(void); // func_80149EBC
void func_80149F74(GlobalContext* iParm1, unsigned int** ppuParm2); // func_80149F74
void func_80149F74(GlobalContext* globalCtx, unsigned int** ppuParm2); // func_80149F74
void func_8014AAD0(void); // func_8014AAD0
void func_8014ADBC(GlobalContext* iParm1, UNK_PTR puParm2); // func_8014ADBC
void func_8014ADBC(GlobalContext* globalCtx, UNK_PTR puParm2); // func_8014ADBC
void func_8014C70C(void); // func_8014C70C
void func_8014CC14(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE2 param_5); // func_8014CC14
void func_8014CCB4(void); // func_8014CCB4
@@ -2907,7 +2907,7 @@ void func_80151C9C(void); // func_80151C9C
void func_80151DA4(void); // func_80151DA4
void func_80152434(void); // func_80152434
void func_80152464(void); // func_80152464
UNK_TYPE4 func_80152498(MessageContext* iParm1); // func_80152498
UNK_TYPE4 func_80152498(MessageContext* msgCtx); // func_80152498
void func_8015268C(void); // func_8015268C
void func_80152C64(void); // func_80152C64
void func_80152CAC(void); // func_80152CAC
@@ -2933,7 +2933,7 @@ void func_8015966C(void); // func_8015966C
void func_8015A144(void); // func_8015A144
void func_8015B198(void); // func_8015B198
void func_8015E750(void); // func_8015E750
void func_8015E7EC(GlobalContext* iParm1, UNK_PTR puParm2); // func_8015E7EC
void func_8015E7EC(GlobalContext* globalCtx, UNK_PTR puParm2); // func_8015E7EC
void func_8015F8A8(UNK_TYPE4 ctxt); // func_8015F8A8
void func_80160A90(void); // func_80160A90
void func_80160AF8(void); // func_80160AF8
+1 -1
View File
@@ -21,7 +21,7 @@
(curState)->nextGameStateInit = (GameStateFunc)newInit; \
(curState)->nextGameStateSize = sizeof(newStruct);
#define PLAYER ((ActorPlayer*)globalCtx->actorCtx.actorList[ACTORTYPE_PLAYER].first)
#define PLAYER ((ActorPlayer*)globalCtx->actorCtx.actorList[ACTORCAT_PLAYER].first)
#define SQ(x) ((x)*(x))
#define DECR(x) ((x) == 0 ? 0 : ((x) -= 1))
+1 -1
View File
@@ -872,7 +872,7 @@ extern UNK_TYPE1 D_801BA38D; // D_801BA38D
extern UNK_PTR D_801BA3A8; // D_801BA3A8
extern collision_func collisionFuncTableATwithAC[25]; // D_801BA3BC
extern collision_func collisionFuncTableOTwithOT[25]; // D_801BA420
extern ActorA0 D_801BA484; // D_801BA484
extern CollisionCheckInfo D_801BA484; // D_801BA484
extern UNK_PTR D_801BA4A0; // D_801BA4A0
extern UNK_TYPE1 D_801BA4B4; // D_801BA4B4
extern EffShieldParticleInit D_801BA4C8; // D_801BA4C8
+2 -2
View File
@@ -1502,7 +1502,7 @@ extern ActorInit En_Firefly_InitVars; // En_Firefly_InitVars
extern ColSphereInit enFireflyCollisionInit; // D_8087B470
extern UNK_TYPE1 D_8087B498; // D_8087B498
extern UNK_TYPE1 D_8087B49C; // D_8087B49C
extern ActorDamageChart enFireflyDamageChart; // D_8087B4A4
extern DamageTable enFireflyDamageTable; // D_8087B4A4
extern InitChainEntry enFireflyInitVars[4]; // D_8087B4C4
extern UNK_TYPE1 D_8087B4D4; // D_8087B4D4
extern UNK_TYPE1 D_8087B4D8; // D_8087B4D8
@@ -7639,7 +7639,7 @@ extern ActorInit Obj_Bell_InitVars; // Obj_Bell_InitVars
extern UNK_TYPE1 D_80A35E90; // D_80A35E90
extern UNK_TYPE1 D_80A35EBC; // D_80A35EBC
extern UNK_TYPE1 D_80A35EE8; // D_80A35EE8
extern ActorDamageChart D_80A35EF4; // D_80A35EF4
extern DamageTable D_80A35EF4; // D_80A35EF4
extern f32 D_80A35F20; // D_80A35F20
extern f32 D_80A35F24; // D_80A35F24
extern f32 D_80A35F28; // D_80A35F28
+115 -97
View File
@@ -19,8 +19,8 @@ typedef struct {
} PosRot; // size = 0x14
typedef struct {
/* 0x00 */ u8 attack[32];
} ActorDamageChart; // size = 0x20
/* 0x00 */ u8 table[32];
} DamageTable; // size = 0x20
typedef struct {
/* 0x00 */ s32 unk0;
@@ -45,18 +45,18 @@ typedef struct {
// Related to collision?
typedef struct {
/* 0x00 */ ActorDamageChart* damageChart;
/* 0x04 */ Vec3f displacement;
/* 0x10 */ s16 unk10;
/* 0x12 */ s16 unk12;
/* 0x14 */ s16 unk14;
/* 0x16 */ u8 mass;
/* 0x17 */ u8 health;
/* 0x18 */ u8 damage;
/* 0x19 */ u8 damageEffect;
/* 0x1A */ u8 impactEffect;
/* 0x1B */ UNK_TYPE1 pad1B[0x1];
} ActorA0; // size = 0x1C
/* 0x00 */ DamageTable* damageTable;
/* 0x04 */ Vec3f displacement; // Amount to correct velocity (0x5C) by when colliding into a body
/* 0x10 */ s16 cylRadius; // Used for various purposes
/* 0x12 */ s16 cylHeight; // Used for various purposes
/* 0x14 */ s16 cylYShift; // Unused. Purpose inferred from Cylinder16 and CollisionCheck_CylSideVsLineSeg
/* 0x16 */ u8 mass; // Used to compute displacement for OC collisions
/* 0x17 */ u8 health; // Note: some actors may use their own health variable instead of this one
/* 0x18 */ u8 damage; // Amount to decrement health by
/* 0x19 */ u8 damageEffect; // Stores what effect should occur when hit by a weapon
/* 0x1A */ u8 atHitEffect; // Stores what effect should occur when AT connects with an AC
/* 0x1B */ u8 acHitEffect; // Stores what effect should occur when AC is touched by an AT
} CollisionCheckInfo; // size = 0x1C
typedef struct {
/* 0x00 */ s16 id;
@@ -89,91 +89,109 @@ typedef struct {
/* 0x1F */ UNK_TYPE1 pad1F[0x1];
} ActorOverlay; // size = 0x20
typedef void(*actor_shadow_draw_func)(struct Actor* actor, struct LightMapper* mapper, struct GlobalContext* ctxt);
typedef void(*ActorShadowFunc)(struct Actor* actor, struct LightMapper* mapper, struct GlobalContext* ctxt);
typedef struct {
/* 0x00 */ Vec3s rot;
/* 0x08 */ f32 yDisplacement;
/* 0x0C */ actor_shadow_draw_func shadowDrawFunc;
/* 0x10 */ f32 scale;
/* 0x14 */ u8 alphaScale; // 255 means always draw full opacity if visible
} ActorShape; // size = 0x18
/* 0x00 */ Vec3s rot; // Current actor shape rotation
/* 0x06 */ s16 face; // Used to index eyebrow/eye/mouth textures. Only used by player
/* 0x08 */ f32 yOffset; // Model y axis offset. Represents model space units
/* 0x0C */ ActorShadowFunc shadowDraw; // Shadow draw function
/* 0x10 */ f32 shadowScale; // Changes the size of the shadow
/* 0x14 */ u8 shadowAlpha; // Default is 255
/* 0x15 */ u8 feetFloorFlags; // Set if the actor's foot is clipped under the floor. & 1 is right foot, & 2 is left
/* 0x18 */ Vec3f feetPos[2]; // Update by using `Actor_SetFeetPos` in PostLimbDraw
} ActorShape; // size = 0x30
typedef struct Actor {
/* 0x000 */ s16 id;
/* 0x002 */ u8 type;
/* 0x003 */ s8 room;
/* 0x004 */ u32 flags; // bit 20: is playing cutscene; bit 22: disable positional lights if bit 28 is not set; bit 28: enable positional lights on actor
/* 0x008 */ PosRot initPosRot;
/* 0x01C */ s16 params;
/* 0x01E */ s8 objBankIndex;
/* 0x01F */ UNK_TYPE1 unk1F;
/* 0x000 */ s16 id; // Actor ID
/* 0x002 */ u8 category; // Actor category. Refer to the corresponding enum for values
/* 0x003 */ s8 room; // Room number the actor is in. -1 denotes that the actor won't despawn on a room change
/* 0x004 */ u32 flags; // Flags used for various purposes
/* 0x008 */ PosRot home; // Initial position/rotation when spawned. Can be used for other purposes
/* 0x01C */ s16 params; // Configurable variable set by the actor's spawn data; original name: "args_data"
/* 0x01E */ s8 objBankIndex; // Object bank index of the actor's object dependency; original name: "bank"
/* 0x01F */ s8 targetMode; // Controls how far the actor can be targeted from and how far it can stay locked on
/* 0x020 */ u16 unk20;
/* 0x022 */ u16 unk22;
/* 0x024 */ PosRot currPosRot;
/* 0x024 */ PosRot world; // Position/rotation in the world
/* 0x038 */ s8 cutscene;
/* 0x039 */ u8 unk39;
/* 0x03A */ UNK_TYPE1 pad3A[0x2];
/* 0x03C */ PosRot topPosRot;
/* 0x050 */ u16 unk50;
/* 0x052 */ UNK_TYPE1 pad52[0x2];
/* 0x054 */ f32 unk54;
/* 0x058 */ Vec3f scale;
/* 0x064 */ Vec3f velocity;
/* 0x070 */ f32 speedXZ;
/* 0x074 */ f32 gravity;
/* 0x078 */ f32 minVelocityY;
/* 0x07C */ struct BgPolygon* wallPoly;
/* 0x080 */ struct BgPolygon* floorPoly;
/* 0x084 */ u8 wallPolySource;
/* 0x085 */ u8 floorPolySource;
/* 0x086 */ UNK_TYPE1 pad86[0x2];
/* 0x088 */ f32 unk88;
/* 0x08C */ f32 unk8C;
/* 0x090 */ u16 unk90;
/* 0x092 */ s16 rotTowardsLinkY;
/* 0x094 */ f32 sqrdDistanceFromLink;
/* 0x098 */ f32 xzDistanceFromLink;
/* 0x09C */ f32 yDistanceFromLink;
/* 0x0A0 */ ActorA0 unkA0;
/* 0x0BC */ ActorShape shape;
/* 0x0D4 */ UNK_TYPE1 padD4[0x18];
/* 0x0EC */ Vec3f projectedPos;
/* 0x0F8 */ f32 unkF8;
/* 0x0FC */ f32 unkFC;
/* 0x100 */ f32 unk100;
/* 0x104 */ f32 unk104;
/* 0x108 */ Vec3f lastPos;
/* 0x114 */ u8 unk114;
/* 0x115 */ u8 unk115;
/* 0x116 */ u16 textId;
/* 0x118 */ u16 freeze;
/* 0x11A */ u16 hitEffectParams; // TODO make into bitfield
/* 0x11C */ u8 hitEffectIntensity;
/* 0x11D */ u8 hasBeenDrawn;
/* 0x11E */ UNK_TYPE1 pad11E[0x1];
/* 0x11F */ u8 naviEnemyId;
/* 0x120 */ struct Actor* parent;
/* 0x124 */ struct Actor* child;
/* 0x128 */ struct Actor* prev;
/* 0x12C */ struct Actor* next;
/* 0x130 */ ActorFunc init;
/* 0x134 */ ActorFunc destroy;
/* 0x138 */ ActorFunc update;
/* 0x13C */ ActorFunc draw;
/* 0x140 */ ActorOverlay* overlayEntry;
/* 0x039 */ s8 unk39;
/* 0x03C */ PosRot focus; // Target reticle focuses on this position. For player this represents head pos and rot
/* 0x050 */ u16 sfx; // SFX ID to play. Sound plays when value is set, then is cleared the following update cycle
/* 0x054 */ f32 targetArrowOffset; // Height offset of the target arrow relative to `focus` position
/* 0x058 */ Vec3f scale; // Scale of the actor in each axis
/* 0x064 */ Vec3f velocity; // Velocity of the actor in each axis
/* 0x070 */ f32 speedXZ; // How fast the actor is traveling along the XZ plane
/* 0x074 */ f32 gravity; // Acceleration due to gravity. Value is added to Y velocity every frame
/* 0x078 */ f32 minVelocityY; // Sets the lower bounds cap on velocity along the Y axis
/* 0x07C */ struct BgPolygon* wallPoly; // Wall polygon the actor is touching
/* 0x080 */ struct BgPolygon* floorPoly; // Floor polygon directly below the actor
/* 0x084 */ u8 wallBgId; // Bg ID of the wall polygon the actor is touching
/* 0x085 */ u8 floorBgId; // Bg ID of the floor polygon directly below the actor
/* 0x086 */ s16 wallYaw; // Y rotation of the wall polygon the actor is touching
/* 0x088 */ f32 floorHeight; // Y position of the floor polygon directly below the actor
/* 0x08C */ f32 yDistToWater; // Distance to the surface of active waterbox. Negative value means above water
/* 0x090 */ u16 bgCheckFlags; // See comments below actor struct for wip docs. TODO: macros for these flags
/* 0x092 */ s16 yawTowardsPlayer; // Y rotation difference between the actor and the player
/* 0x094 */ f32 xyzDistToPlayerSq; // Squared distance between the actor and the player in the x,y,z axis
/* 0x098 */ f32 xzDistToPlayer; // Distance between the actor and the player in the XZ plane
/* 0x09C */ f32 yDistToPlayer; // Dist is negative if the actor is above the player
/* 0x0A0 */ CollisionCheckInfo colChkInfo; // Variables related to the Collision Check system
/* 0x0BC */ ActorShape shape; // Variables related to the physical shape of the actor
/* 0x0EC */ Vec3f projectedPos; // Position of the actor in projected space
/* 0x0F8 */ f32 projectedW; // w component of the projected actor position
/* 0x0FC */ f32 uncullZoneForward; // Amount to increase the uncull zone forward by (in projected space)
/* 0x100 */ f32 uncullZoneScale; // Amount to increase the uncull zone scale by (in projected space)
/* 0x104 */ f32 uncullZoneDownward; // Amount to increase uncull zone downward by (in projected space)
/* 0x108 */ Vec3f prevPos; // World position from the previous update cycle
/* 0x114 */ u8 isTargeted; // Set to true if the actor is currently being targeted by the player
/* 0x115 */ u8 targetPriority; // Lower values have higher priority. Resets to 0 when player stops targeting
/* 0x116 */ u16 textId; // Text ID to pass to link/display when interacting with the actor
/* 0x118 */ u16 freezeTimer; // Actor does not update when set. Timer decrements automatically
/* 0x11A */ u16 colorFilterParams; // Set color filter to red, blue, or white. Toggle opa or xlu
/* 0x11C */ u8 colorFilterTimer; // A non-zero value enables the color filter. Decrements automatically
/* 0x11D */ u8 isDrawn; // Set to true if the actor is currently being drawn. Always stays false for lens actors
/* 0x11E */ u8 dropFlag; // Configures what item is dropped by the actor from `Item_DropCollectibleRandom`
/* 0x11F */ u8 hintId; // Sets what 0600 dialog to display when talking to navi. Default 0xFF
/* 0x120 */ struct Actor* parent; // Usage is actor specific. Set if actor is spawned via `Actor_SpawnAsChild`
/* 0x124 */ struct Actor* child; // Usage is actor specific. Set if actor is spawned via `Actor_SpawnAsChild`
/* 0x128 */ struct Actor* prev; // Previous actor of this category
/* 0x12C */ struct Actor* next; // Next actor of this category
/* 0x130 */ ActorFunc init; // Initialization Routine. Called by `Actor_Init` or `Actor_UpdateAll`
/* 0x134 */ ActorFunc destroy; // Destruction Routine. Called by `Actor_Destroy`
/* 0x138 */ ActorFunc update; // Update Routine. Called by `Actor_UpdateAll`
/* 0x13C */ ActorFunc draw; // Draw Routine. Called by `Actor_Draw`
/* 0x140 */ ActorOverlay* overlayEntry; // Pointer to the overlay table entry for this actor
} Actor; // size = 0x144
typedef enum {
/* 0 */ FOOT_LEFT,
/* 1 */ FOOT_RIGHT
} ActorFootIndex;
/**
* BgCheckFlags WIP documentation (logical masks):
* 0x001 : Standing on the ground
* 0x002 : Has touched the ground (only active for 1 frame)
* 0x004 : Has left the ground (only active for 1 frame)
* 0x008 : Touching a wall
* 0x010 : Touching a ceiling
* 0x020 : On or below water surface
* 0x040 : Has touched water (actor is responsible for unsetting this the frame it touches the water)
* 0x080 : Similar to & 0x1 but with no velocity check and is cleared every frame
* 0x100 : Crushed between a floor and ceiling (triggers a void for player)
* 0x200 : Unknown (only set/used by player so far)
*/
typedef struct {
/* 0x000 */ Actor actor;
/* 0x144 */ s32 dynaPolyId;
/* 0x144 */ s32 bgId;
/* 0x148 */ f32 unk148;
/* 0x14C */ f32 unk14C;
/* 0x150 */ s16 unk150;
/* 0x152 */ s16 unk152;
/* 0x152 */ u16 unk152;
/* 0x154 */ u32 unk154;
/* 0x158 */ u8 dynaFlags;
/* 0x159 */ UNK_TYPE1 pad159[0x3];
/* 0x158 */ u8 unk_158;
/* 0x15A */ s16 pad15A;
} DynaPolyActor; // size = 0x15C
typedef struct {
@@ -242,18 +260,18 @@ typedef struct {
} ActorEnAObj; // size = 0x1A8
typedef enum {
/* 0x00 */ ACTORTYPE_SWITCH,
/* 0x01 */ ACTORTYPE_BG,
/* 0x02 */ ACTORTYPE_PLAYER,
/* 0x03 */ ACTORTYPE_EXPLOSIVES,
/* 0x04 */ ACTORTYPE_NPC,
/* 0x05 */ ACTORTYPE_ENEMY,
/* 0x06 */ ACTORTYPE_PROP,
/* 0x07 */ ACTORTYPE_ITEMACTION,
/* 0x08 */ ACTORTYPE_MISC,
/* 0x09 */ ACTORTYPE_BOSS,
/* 0x0A */ ACTORTYPE_DOOR,
/* 0x0B */ ACTORTYPE_CHEST
/* 0x00 */ ACTORCAT_SWITCH,
/* 0x01 */ ACTORCAT_BG,
/* 0x02 */ ACTORCAT_PLAYER,
/* 0x03 */ ACTORCAT_EXPLOSIVES,
/* 0x04 */ ACTORCAT_NPC,
/* 0x05 */ ACTORCAT_ENEMY,
/* 0x06 */ ACTORCAT_PROP,
/* 0x07 */ ACTORCAT_ITEMACTION,
/* 0x08 */ ACTORCAT_MISC,
/* 0x09 */ ACTORCAT_BOSS,
/* 0x0A */ ACTORCAT_DOOR,
/* 0x0B */ ACTORCAT_CHEST
} ActorType;
typedef enum {