mirror of
https://github.com/zeldaret/mm.git
synced 2026-09-06 02:38:08 -04:00
Sync Colliders Final (#1718)
* ElementDamageInfoAT * ElementDamageInfoAC * colMaterial * elemMaterial
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user