Sync Colliders Final (#1718)

* ElementDamageInfoAT

* ElementDamageInfoAC

* colMaterial

* elemMaterial
This commit is contained in:
Derek Hensley
2024-10-18 05:54:54 -07:00
committed by GitHub
parent 001c6f0bff
commit 784c1724ff
329 changed files with 3222 additions and 3205 deletions
+76 -76
View File
@@ -17,12 +17,12 @@ typedef struct {
/* 0x11 */ u8 acFlags; // Information flags for AC collisions.
/* 0x12 */ u8 ocFlags1; // Information flags for OC collisions.
/* 0x13 */ u8 ocFlags2; // Flags related to which colliders it can OC collide with.
/* 0x14 */ u8 colType; // Determines hitmarks and sound effects during AC collisions. See `ColliderType` enum
/* 0x14 */ u8 colMaterial; // Determines hitmarks and sound effects during AC collisions. See `ColliderMaterial` enum
/* 0x15 */ u8 shape; // See `ColliderShape` enum
} Collider; // size = 0x18
typedef struct {
/* 0x0 */ u8 colType; // Determines hitmarks and sound effects during AC collisions. See `ColliderType` enum
/* 0x0 */ u8 colMaterial; // Determines hitmarks and sound effects during AC collisions. See `ColliderMaterial` enum
/* 0x1 */ u8 atFlags; // Information flags for AT collisions.
/* 0x2 */ u8 acFlags; // Information flags for AC collisions.
/* 0x3 */ u8 ocFlags1; // Information flags for OC collisions.
@@ -31,7 +31,7 @@ typedef struct {
} ColliderInit; // size = 0x6
typedef struct {
/* 0x0 */ u8 colType; // Determines hitmarks and sound effects during AC collisions. See `ColliderType` enum
/* 0x0 */ u8 colMaterial; // Determines hitmarks and sound effects during AC collisions. See `ColliderMaterial` enum
/* 0x1 */ u8 atFlags; // Information flags for AT collisions.
/* 0x2 */ u8 acFlags; // Information flags for AC collisions.
/* 0x3 */ u8 ocFlags1; // Information flags for OC collisions.
@@ -47,36 +47,36 @@ typedef struct {
} ColliderInitToActor; // size = 0x8
typedef struct {
/* 0x0 */ u32 dmgFlags; // Toucher damage type flags.
/* 0x0 */ u32 dmgFlags; // Damage types dealt by this collider element as AT.
/* 0x4 */ u8 effect; // Damage Effect (Knockback, Fire, etc.)
/* 0x5 */ u8 damage; // Damage or Stun Timer
} ColliderTouch; // size = 0x8
} ColliderElementDamageInfoAT; // size = 0x8
typedef struct {
/* 0x0 */ u32 dmgFlags; // Toucher damage type flags.
/* 0x0 */ u32 dmgFlags; // Damage types dealt by this collider element as AT.
/* 0x4 */ u8 effect; // Damage Effect (Knockback, Fire, etc.)
/* 0x5 */ u8 damage; // Damage or Stun Timer
} ColliderTouchInit; // size = 0x8
} ColliderElementDamageInfoATInit; // size = 0x8
typedef struct {
/* 0x0 */ u32 dmgFlags; // Bumper damage type flags.
/* 0x4 */ u8 effect; // Damage Effect (Knockback, Fire, etc.)
/* 0x5 */ u8 defense; // Damage Resistance
/* 0x6 */ Vec3s hitPos; // Point of contact
} ColliderBump; // size = 0xC
} ColliderElementDamageInfoAC; // size = 0xC
typedef struct {
/* 0x0 */ u32 dmgFlags; // Bumper exclusion mask
/* 0x4 */ u8 effect; // Damage Effect (Knockback, Fire, etc.)
/* 0x5 */ u8 defense; // Damage Resistance
} ColliderBumpInit; // size = 0x8
} ColliderElementDamageInfoACInit; // size = 0x8
typedef struct ColliderElement {
/* 0x00 */ ColliderTouch toucher; // Damage properties when acting as an AT collider
/* 0x08 */ ColliderBump bumper; // Damage properties when acting as an AC collider
/* 0x14 */ u8 elemType; // Affects sfx reaction when attacked by Link and hookability. Full purpose unknown.
/* 0x15 */ u8 toucherFlags; // Information flags for AT collisions
/* 0x16 */ u8 bumperFlags; // Information flags for AC collisions
/* 0x00 */ ColliderElementDamageInfoAT atDmgInfo; // Damage properties when acting as an AT collider
/* 0x08 */ ColliderElementDamageInfoAC acDmgInfo; // Damage properties when acting as an AC collider
/* 0x14 */ u8 elemMaterial; // Affects sfx when attacked by Player, and interaction with hookshot and arrows. See `ElementMaterial` enum
/* 0x15 */ u8 atElemFlags; // Information flags for AT collisions
/* 0x16 */ u8 acElemFlags; // Information flags for AC collisions
/* 0x17 */ u8 ocElemFlags; // Information flags for OC collisions
/* 0x18 */ Collider* atHit; // object touching this element's AT collider
/* 0x1C */ Collider* acHit; // object touching this element's AC collider
@@ -85,11 +85,11 @@ typedef struct ColliderElement {
} ColliderElement; // size = 0x28
typedef struct {
/* 0x00 */ u8 elemType; // Affects sfx reaction when attacked by Link and hookability. Full purpose unknown.
/* 0x04 */ ColliderTouchInit toucher; // Damage properties when acting as an AT collider
/* 0x0C */ ColliderBumpInit bumper; // Damage properties when acting as an AC collider
/* 0x14 */ u8 toucherFlags; // Information flags for AT collisions
/* 0x15 */ u8 bumperFlags; // Information flags for AC collisions
/* 0x00 */ u8 elemMaterial; // Affects sfx when attacked by Player, and interaction with hookshot and arrows. See `ElementMaterial` enum
/* 0x04 */ ColliderElementDamageInfoATInit atDmgInfo; // Damage properties when acting as an AT collider
/* 0x0C */ ColliderElementDamageInfoACInit acDmgInfo; // Damage properties when acting as an AC collider
/* 0x14 */ u8 atElemFlags; // Information flags for AT collisions
/* 0x15 */ u8 acElemFlags; // Information flags for AC collisions
/* 0x16 */ u8 ocElemFlags; // Information flags for OC collisions
} ColliderElementInit; // size = 0x18
@@ -327,22 +327,22 @@ typedef enum {
/* 2 */ MASSTYPE_NORMAL
} ColChkMassType;
typedef enum {
/* 0 */ COLTYPE_HIT0, // Blue blood, white hitmark
/* 1 */ COLTYPE_HIT1, // No blood, dust hitmark
/* 2 */ COLTYPE_HIT2, // Green blood, dust hitmark
/* 3 */ COLTYPE_HIT3, // No blood, white hitmark
/* 4 */ COLTYPE_HIT4, // Water burst, no hitmark
/* 5 */ COLTYPE_HIT5, // No blood, red hitmark
/* 6 */ COLTYPE_HIT6, // Green blood, white hitmark
/* 7 */ COLTYPE_HIT7, // Red blood, white hitmark
/* 8 */ COLTYPE_HIT8, // Blue blood, red hitmark
/* 9 */ COLTYPE_METAL,
/* 10 */ COLTYPE_NONE,
/* 11 */ COLTYPE_WOOD,
/* 12 */ COLTYPE_HARD,
/* 13 */ COLTYPE_TREE
} ColliderType;
typedef enum ColliderMaterial {
/* 0 */ COL_MATERIAL_HIT0, // Blue blood, white hitmark
/* 1 */ COL_MATERIAL_HIT1, // No blood, dust hitmark
/* 2 */ COL_MATERIAL_HIT2, // Green blood, dust hitmark
/* 3 */ COL_MATERIAL_HIT3, // No blood, white hitmark
/* 4 */ COL_MATERIAL_HIT4, // Water burst, no hitmark
/* 5 */ COL_MATERIAL_HIT5, // No blood, red hitmark
/* 6 */ COL_MATERIAL_HIT6, // Green blood, white hitmark
/* 7 */ COL_MATERIAL_HIT7, // Red blood, white hitmark
/* 8 */ COL_MATERIAL_HIT8, // Blue blood, red hitmark
/* 9 */ COL_MATERIAL_METAL,
/* 10 */ COL_MATERIAL_NONE,
/* 11 */ COL_MATERIAL_WOOD,
/* 12 */ COL_MATERIAL_HARD,
/* 13 */ COL_MATERIAL_TREE
} ColliderMaterial;
typedef enum {
/* 0 */ COLSHAPE_JNTSPH,
@@ -353,16 +353,16 @@ typedef enum {
/* 5 */ COLSHAPE_MAX
} ColliderShape;
typedef enum {
/* 0 */ ELEMTYPE_UNK0,
/* 1 */ ELEMTYPE_UNK1,
/* 2 */ ELEMTYPE_UNK2,
/* 3 */ ELEMTYPE_UNK3,
/* 4 */ ELEMTYPE_UNK4,
/* 5 */ ELEMTYPE_UNK5,
/* 6 */ ELEMTYPE_UNK6,
/* 7 */ ELEMTYPE_UNK7
} ElementType;
typedef enum ElementMaterial {
/* 0 */ ELEM_MATERIAL_UNK0,
/* 1 */ ELEM_MATERIAL_UNK1,
/* 2 */ ELEM_MATERIAL_UNK2,
/* 3 */ ELEM_MATERIAL_UNK3,
/* 4 */ ELEM_MATERIAL_UNK4,
/* 5 */ ELEM_MATERIAL_UNK5,
/* 6 */ ELEM_MATERIAL_UNK6,
/* 7 */ ELEM_MATERIAL_UNK7
} ElementMaterial;
#define SAC_ON (1 << 0) // CollisionContext SAC Flag
@@ -405,27 +405,27 @@ typedef enum {
#define OC2_TYPE_2 OC1_TYPE_2 // Has OC type 2
#define OC2_FIRST_ONLY (1 << 6) // Skips AC checks on elements after the first collision. Only used by Ganon
#define TOUCH_NONE 0 // No flags set. Cannot have AT collisions
#define TOUCH_ON (1 << 0) // Can have AT collisions
#define TOUCH_HIT (1 << 1) // Had an AT collision
#define TOUCH_NEAREST (1 << 2) // If a Quad, only collides with the closest bumper
#define TOUCH_SFX_NORMAL (0 << 3) // Hit sound effect based on AC collider's type
#define TOUCH_SFX_HARD (1 << 3) // Always uses hard deflection sound
#define TOUCH_SFX_WOOD (2 << 3) // Always uses wood deflection sound
#define TOUCH_SFX_NONE (3 << 3) // No hit sound effect
#define TOUCH_AT_HITMARK (1 << 5) // Draw hitmarks for every AT collision
#define TOUCH_DREW_HITMARK (1 << 6) // Already drew hitmark for this frame
#define TOUCH_UNK7 (1 << 7) // Unknown purpose. Used by some enemy quads
#define ATELEM_NONE 0 // No flags set. Cannot have AT collisions
#define ATELEM_ON (1 << 0) // Can have AT collisions
#define ATELEM_HIT (1 << 1) // Had an AT collision
#define ATELEM_NEAREST (1 << 2) // If a Quad, only collides with the closest AC element
#define ATELEM_SFX_NORMAL (0 << 3) // Hit sound effect based on AC collider's type
#define ATELEM_SFX_HARD (1 << 3) // Always uses hard deflection sound
#define ATELEM_SFX_WOOD (2 << 3) // Always uses wood deflection sound
#define ATELEM_SFX_NONE (3 << 3) // No hit sound effect
#define ATELEM_AT_HITMARK (1 << 5) // Draw hitmarks for every AT collision
#define ATELEM_DREW_HITMARK (1 << 6) // Already drew hitmark for this frame
#define ATELEM_UNK7 (1 << 7) // Unknown purpose. Used by some enemy quads
#define BUMP_NONE 0 // No flags set. Cannot have AC collisions
#define BUMP_ON (1 << 0) // Can have AC collisions
#define BUMP_HIT (1 << 1) // Had an AC collision
#define BUMP_HOOKABLE (1 << 2) // Can be hooked if actor has hookability flags set.
#define BUMP_NO_AT_INFO (1 << 3) // Does not give its info to the AT collider that hit it.
#define BUMP_NO_DAMAGE (1 << 4) // Does not take damage.
#define BUMP_NO_SWORD_SFX (1 << 5) // Does not have a sound when hit by player-attached AT colliders.
#define BUMP_NO_HITMARK (1 << 6) // Skips hit effects.
#define BUMP_DRAW_HITMARK (1 << 7) // Draw hitmark for AC collision this frame.
#define ACELEM_NONE 0 // No flags set. Cannot have AC collisions
#define ACELEM_ON (1 << 0) // Can have AC collisions
#define ACELEM_HIT (1 << 1) // Had an AC collision
#define ACELEM_HOOKABLE (1 << 2) // Can be hooked if actor has hookability flags set.
#define ACELEM_NO_AT_INFO (1 << 3) // Does not give its info to the AT collider that hit it.
#define ACELEM_NO_DAMAGE (1 << 4) // Does not take damage.
#define ACELEM_NO_SWORD_SFX (1 << 5) // Does not have a sound when hit by player-attached AT colliders.
#define ACELEM_NO_HITMARK (1 << 6) // Skips hit effects.
#define ACELEM_DRAW_HITMARK (1 << 7) // Draw hitmark for AC collision this frame.
#define OCELEM_NONE 0 // No flags set. Cannot have OC collisions
#define OCELEM_ON (1 << 0) // Can have OC collisions
@@ -509,9 +509,9 @@ typedef struct CollisionCheckInfo {
DamageTable* DamageTable_Get(s32 index);
void DamageTable_Clear(DamageTable* damageTable);
f32 CollisionCheck_GetDamageAndEffectOnBumper(Collider* atCol, ColliderElement* atElem, Collider* acCol, ColliderElement* acElem, u32* effect);
f32 CollisionCheck_ApplyBumperDefense(f32 damage, ColliderElement* acElem);
s32 CollisionCheck_GetToucherDamage(Collider* atCol, ColliderElement* atElem, Collider* acCol, ColliderElement* acElem);
f32 CollisionCheck_GetDamageAndEffectOnElementAC(Collider* atCol, ColliderElement* atElem, Collider* acCol, ColliderElement* acElem, u32* effect);
f32 CollisionCheck_ApplyElementATDefense(f32 damage, ColliderElement* acElem);
s32 CollisionCheck_GetElementATDamage(Collider* atCol, ColliderElement* atElem, Collider* acCol, ColliderElement* acElem);
s32 Collider_InitBase(struct PlayState* play, Collider* col);
s32 Collider_DestroyBase(struct PlayState* play, Collider* collider);
s32 Collider_SetBaseToActor(struct PlayState* play, Collider* col, ColliderInitToActor* src);
@@ -520,13 +520,13 @@ s32 Collider_SetBase(struct PlayState* play, Collider* col, struct Actor* actor,
void Collider_ResetATBase(struct PlayState* play, Collider* col);
void Collider_ResetACBase(struct PlayState* play, Collider* col);
void Collider_ResetOCBase(struct PlayState* play, Collider* col);
s32 Collider_InitTouch(struct PlayState* play, ColliderTouch* touch);
s32 Collider_DestroyTouch(struct PlayState* play, ColliderTouch* touch);
s32 Collider_SetTouch(struct PlayState* play, ColliderTouch* touch, ColliderTouchInit* src);
s32 Collider_InitElementDamageInfoAT(struct PlayState* play, ColliderElementDamageInfoAT* atDmgInfo);
s32 Collider_DestroyElementDamageInfoAT(struct PlayState* play, ColliderElementDamageInfoAT* atDmgInfo);
s32 Collider_SetElementDamageInfoAT(struct PlayState* play, ColliderElementDamageInfoAT* dest, ColliderElementDamageInfoATInit* src);
void Collider_ResetATElementUnk(struct PlayState* play, ColliderElement* elem);
s32 Collider_InitBump(struct PlayState* play, ColliderBump* bump);
s32 Collider_DestroyBump(struct PlayState* play, ColliderBump* bump);
s32 Collider_SetBump(struct PlayState* play, ColliderBump* bump, ColliderBumpInit* src);
s32 Collider_InitElementDamageInfoAC(struct PlayState* play, ColliderElementDamageInfoAC* acDmgInfo);
s32 Collider_DestroyElementDamageInfoAC(struct PlayState* play, ColliderElementDamageInfoAC* acDmgInfo);
s32 Collider_SetElementDamageInfoAC(struct PlayState* play, ColliderElementDamageInfoAC* dest, ColliderElementDamageInfoACInit* src);
s32 Collider_InitElement(struct PlayState* play, ColliderElement* elem);
s32 Collider_DestroyElement(struct PlayState* play, ColliderElement* elem);
s32 Collider_SetElement(struct PlayState* play, ColliderElement* elem, ColliderElementInit* elemInit);
@@ -620,8 +620,8 @@ s32 CollisionCheck_SetAC_SAC(struct PlayState* play, CollisionCheckContext* colC
s32 CollisionCheck_SetOC(struct PlayState* play, CollisionCheckContext* colChkCtx, Collider* col);
s32 CollisionCheck_SetOC_SAC(struct PlayState* play, CollisionCheckContext* colChkCtx, Collider* col, s32 index);
s32 CollisionCheck_SetOCLine(struct PlayState* play, CollisionCheckContext* colChkCtx, OcLine* line);
s32 CollisionCheck_SkipTouch(ColliderElement* elem);
s32 CollisionCheck_SkipBump(ColliderElement* elem);
s32 CollisionCheck_IsElementNotAT(ColliderElement* elem);
s32 CollisionCheck_IsElementNotAC(ColliderElement* elem);
s32 CollisionCheck_NoSharedFlags(ColliderElement* atElem, ColliderElement* acElem);
void CollisionCheck_NoBlood(struct PlayState* play, Collider* collider, Vec3f* v);
void CollisionCheck_BlueBlood(struct PlayState* play, Collider* collider, Vec3f* v);