Introduce BgCheckFlags Defines (#1195)

* flags

* cleanup

* adjust comment
This commit is contained in:
engineer124
2023-03-04 19:53:56 -03:00
committed by GitHub
parent 8b025badd1
commit 2cce8f6767
149 changed files with 719 additions and 672 deletions
+15 -15
View File
@@ -132,6 +132,20 @@ typedef struct {
/* 0x18 */ Vec3f feetPos[2]; // Update by using `Actor_SetFeetPos` in PostLimbDrawOpa
} ActorShape; // size = 0x30
#define BGCHECKFLAG_GROUND (1 << 0) // Standing on the ground
#define BGCHECKFLAG_GROUND_TOUCH (1 << 1) // Has touched the ground (only active for 1 frame)
#define BGCHECKFLAG_GROUND_LEAVE (1 << 2) // Has left the ground (only active for 1 frame)
#define BGCHECKFLAG_WALL (1 << 3) // Touching a wall
#define BGCHECKFLAG_CEILING (1 << 4) // Touching a ceiling
#define BGCHECKFLAG_WATER (1 << 5) // In water
#define BGCHECKFLAG_WATER_TOUCH (1 << 6) // Has touched water (reset when leaving water)
#define BGCHECKFLAG_GROUND_STRICT (1 << 7) // Similar to BGCHECKFLAG_GROUND but with no velocity check and is cleared every frame
#define BGCHECKFLAG_CRUSHED (1 << 8) // Crushed between a floor and ceiling (triggers a void for player)
#define BGCHECKFLAG_PLAYER_WALL_INTERACT (1 << 9) // Only set/used by player, related to interacting with walls
#define BGCHECKFLAG_PLAYER_400 (1 << 10) //
#define BGCHECKFLAG_PLAYER_800 (1 << 11) //
#define BGCHECKFLAG_PLAYER_1000 (1 << 12) //
typedef struct Actor {
/* 0x000 */ s16 id; // Actor ID
/* 0x002 */ u8 category; // Actor category. Refer to the corresponding enum for values
@@ -160,7 +174,7 @@ typedef struct 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 depthInWater; // Directed distance to the surface of active waterbox. Negative value means water is below.
/* 0x090 */ u16 bgCheckFlags; // See comments below actor struct for wip docs. TODO: macros for these flags
/* 0x090 */ u16 bgCheckFlags; // Flags indicating how the actor is interacting with collision
/* 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
@@ -198,20 +212,6 @@ typedef enum {
/* 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 : Only set/used by player, related to interacting with walls
*/
typedef struct {
/* 0x000 */ Actor actor;
/* 0x144 */ s32 bgId;