Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Name collider fields for "effects" / misc. #1925

Draft
wants to merge 22 commits into
base: main
Choose a base branch
from
Draft
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
remove temporary suffixes
Dragorn421 committed Mar 16, 2024
commit 84ad36b80899823db2e5dbc4f43e2569f31fc651
2 changes: 1 addition & 1 deletion docs/tutorial/introduction.md
Original file line number Diff line number Diff line change
@@ -33,7 +33,7 @@ void func_80A13098(EnFirefly* this) {
} else {
this->actor.params -= 2;
}
this->collider.list->body.atDmgInfo.playerACHitReaction_ColliderElementDamageInfoAT = PLAYER_AC_HIT_REACTION_1;
this->collider.list->body.atDmgInfo.playerACHitReaction = PLAYER_AC_HIT_REACTION_1;
this->auraType = 1;
this->onFire = 1;
this->actor.naviEnemyId = 0x11;
8 changes: 4 additions & 4 deletions include/z64actor.h
Original file line number Diff line number Diff line change
@@ -140,10 +140,10 @@ typedef struct {
/* 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_CollisionCheckInfo; // Amount to decrement health by
/* 0x19 */ u8 damageEffect_CollisionCheckInfo; // If a damageTable is set, the effect corresponding to the damage type, as specified in the damage table
/* 0x1A */ u8 playerATHitReaction_CollisionCheckInfo; // (for Player) Reaction from an AT collider hit
/* 0x1B */ u8 playerACHitReaction_CollisionCheckInfo; // (for Player) Reaction from an AC collider hit
/* 0x18 */ u8 damage; // Amount to decrement health by
/* 0x19 */ u8 damageEffect; // If a damageTable is set, the effect corresponding to the damage type, as specified in the damage table
/* 0x1A */ u8 playerATHitReaction; // (for Player) Reaction from an AT collider hit
/* 0x1B */ u8 playerACHitReaction; // (for Player) Reaction from an AC collider hit
} CollisionCheckInfo; // size = 0x1C

typedef struct {
28 changes: 14 additions & 14 deletions include/z64collision_check.h
Original file line number Diff line number Diff line change
@@ -46,12 +46,12 @@ typedef struct {
/* 0x11 */ u8 acFlags;
/* 0x12 */ u8 ocFlags1;
/* 0x13 */ u8 ocFlags2; // Flags related to which colliders it can OC collide with.
/* 0x14 */ u8 colMaterial_Collider; // 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 {
/* 0x00 */ u8 colMaterial_ColliderInit;
/* 0x00 */ u8 colMaterial;
/* 0x01 */ u8 atFlags;
/* 0x02 */ u8 acFlags;
/* 0x03 */ u8 ocFlags1;
@@ -60,7 +60,7 @@ typedef struct {
} ColliderInit; // size = 0x06

typedef struct {
/* 0x00 */ u8 colMaterial_ColliderInitType1;
/* 0x00 */ u8 colMaterial;
/* 0x01 */ u8 atFlags;
/* 0x02 */ u8 acFlags;
/* 0x03 */ u8 ocFlags1;
@@ -76,22 +76,22 @@ typedef struct {
} ColliderInitToActor; // size = 0x08

typedef struct {
/* 0x00 */ u32 dmgFlags_ColliderElementDamageInfoAT; // Damage types dealt by this collider element as AT.
/* 0x04 */ u8 playerACHitReaction_ColliderElementDamageInfoAT; // Player reaction to a Player AC collider hitting this AT collider
/* 0x05 */ u8 damage_ColliderElementDamageInfoAT; // Damage
/* 0x00 */ u32 dmgFlags; // Damage types dealt by this collider element as AT.
/* 0x04 */ u8 playerACHitReaction; // Player reaction to a Player AC collider hitting this AT collider
/* 0x05 */ u8 damage; // Damage
} ColliderElementDamageInfoAT; // size = 0x08

typedef struct {
/* 0x00 */ u32 dmgFlags_ColliderElementDamageInfoAC; // Damage types that may affect this collider element as AC.
/* 0x04 */ u8 playerATHitReaction_ColliderElementDamageInfoAC; // Player reaction to a Player AT collider hitting this AC collider
/* 0x05 */ u8 defense_ColliderElementDamageInfoAC; // Damage Resistance
/* 0x00 */ u32 dmgFlags; // Damage types that may affect this collider element as AC.
/* 0x04 */ u8 playerATHitReaction; // Player reaction to a Player AT collider hitting this AC collider
/* 0x05 */ u8 defense; // Damage Resistance
/* 0x06 */ Vec3s hitPos; // Point of contact
} ColliderElementDamageInfoAC; // size = 0x0C

typedef struct {
/* 0x00 */ u32 dmgFlags_ColliderElementDamageInfoACInit; // Damage types that may affect this collider element as AC.
/* 0x04 */ u8 playerATHitReaction_ColliderElementDamageInfoACInit; // Player reaction to a Player AT collider hitting this AC collider
/* 0x05 */ u8 defense_ColliderElementDamageInfoACInit; // Damage Resistance
/* 0x00 */ u32 dmgFlags; // Damage types that may affect this collider element as AC.
/* 0x04 */ u8 playerATHitReaction; // Player reaction to a Player AT collider hitting this AC collider
/* 0x05 */ u8 defense; // Damage Resistance
} ColliderElementDamageInfoACInit; // size = 0x08

typedef enum {
@@ -108,7 +108,7 @@ typedef enum {
typedef struct ColliderElement {
/* 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_ColliderElement; // Affects sfx when attacked by Player, and interaction with hookshot and arrows.
/* 0x14 */ u8 elemMaterial; // Affects sfx when attacked by Player, and interaction with hookshot and arrows.
/* 0x15 */ u8 atElemFlags; // Information flags for AT collisions
/* 0x16 */ u8 acElemFlags; // Information flags for AC collisions
/* 0x17 */ u8 ocElemFlags; // Information flags for OC collisions
@@ -119,7 +119,7 @@ typedef struct ColliderElement {
} ColliderElement; // size = 0x28

typedef struct {
/* 0x00 */ u8 elemMaterial_ColliderElementInit; // Affects sfx when attacked by Player, and interaction with hookshot and arrows.
/* 0x00 */ u8 elemMaterial; // Affects sfx when attacked by Player, and interaction with hookshot and arrows.
/* 0x04 */ ColliderElementDamageInfoAT 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
44 changes: 22 additions & 22 deletions src/code/z_actor.c
Original file line number Diff line number Diff line change
@@ -4312,10 +4312,10 @@ u8 func_800355E4(PlayState* play, Collider* collider) {
}

u8 Actor_ApplyDamage(Actor* actor) {
if (actor->colChkInfo.damage_CollisionCheckInfo >= actor->colChkInfo.health) {
if (actor->colChkInfo.damage >= actor->colChkInfo.health) {
actor->colChkInfo.health = 0;
} else {
actor->colChkInfo.health -= actor->colChkInfo.damage_CollisionCheckInfo;
actor->colChkInfo.health -= actor->colChkInfo.damage;
}

return actor->colChkInfo.health;
@@ -4324,24 +4324,24 @@ u8 Actor_ApplyDamage(Actor* actor) {
void Actor_SetDropFlag(Actor* actor, ColliderElement* elem, s32 freezeFlag) {
if (elem->acHitElem == NULL) {
actor->dropFlag = 0x00;
} else if (freezeFlag && (elem->acHitElem->atDmgInfo.dmgFlags_ColliderElementDamageInfoAT & (DMG_UNKNOWN_1 | DMG_MAGIC_ICE | DMG_MAGIC_FIRE))) {
actor->freezeTimer = elem->acHitElem->atDmgInfo.damage_ColliderElementDamageInfoAT;
} else if (freezeFlag && (elem->acHitElem->atDmgInfo.dmgFlags & (DMG_UNKNOWN_1 | DMG_MAGIC_ICE | DMG_MAGIC_FIRE))) {
actor->freezeTimer = elem->acHitElem->atDmgInfo.damage;
actor->dropFlag = 0x00;
} else if (elem->acHitElem->atDmgInfo.dmgFlags_ColliderElementDamageInfoAT & DMG_ARROW_FIRE) {
} else if (elem->acHitElem->atDmgInfo.dmgFlags & DMG_ARROW_FIRE) {
actor->dropFlag = 0x01;
} else if (elem->acHitElem->atDmgInfo.dmgFlags_ColliderElementDamageInfoAT & DMG_ARROW_ICE) {
} else if (elem->acHitElem->atDmgInfo.dmgFlags & DMG_ARROW_ICE) {
actor->dropFlag = 0x02;
} else if (elem->acHitElem->atDmgInfo.dmgFlags_ColliderElementDamageInfoAT & DMG_ARROW_UNK1) {
} else if (elem->acHitElem->atDmgInfo.dmgFlags & DMG_ARROW_UNK1) {
actor->dropFlag = 0x04;
} else if (elem->acHitElem->atDmgInfo.dmgFlags_ColliderElementDamageInfoAT & DMG_ARROW_UNK2) {
} else if (elem->acHitElem->atDmgInfo.dmgFlags & DMG_ARROW_UNK2) {
actor->dropFlag = 0x08;
} else if (elem->acHitElem->atDmgInfo.dmgFlags_ColliderElementDamageInfoAT & DMG_ARROW_UNK3) {
} else if (elem->acHitElem->atDmgInfo.dmgFlags & DMG_ARROW_UNK3) {
actor->dropFlag = 0x10;
} else if (elem->acHitElem->atDmgInfo.dmgFlags_ColliderElementDamageInfoAT & DMG_ARROW_LIGHT) {
} else if (elem->acHitElem->atDmgInfo.dmgFlags & DMG_ARROW_LIGHT) {
actor->dropFlag = 0x20;
} else if (elem->acHitElem->atDmgInfo.dmgFlags_ColliderElementDamageInfoAT & DMG_MAGIC_LIGHT) {
} else if (elem->acHitElem->atDmgInfo.dmgFlags & DMG_MAGIC_LIGHT) {
if (freezeFlag) {
actor->freezeTimer = elem->acHitElem->atDmgInfo.damage_ColliderElementDamageInfoAT;
actor->freezeTimer = elem->acHitElem->atDmgInfo.damage;
}
actor->dropFlag = 0x40;
} else {
@@ -4361,24 +4361,24 @@ void Actor_SetDropFlagJntSph(Actor* actor, ColliderJntSph* jntSph, s32 freezeFla
if (elem->acHitElem == NULL) {
flag = 0x00;
} else if (freezeFlag &&
(elem->acHitElem->atDmgInfo.dmgFlags_ColliderElementDamageInfoAT & (DMG_UNKNOWN_1 | DMG_MAGIC_ICE | DMG_MAGIC_FIRE))) {
actor->freezeTimer = elem->acHitElem->atDmgInfo.damage_ColliderElementDamageInfoAT;
(elem->acHitElem->atDmgInfo.dmgFlags & (DMG_UNKNOWN_1 | DMG_MAGIC_ICE | DMG_MAGIC_FIRE))) {
actor->freezeTimer = elem->acHitElem->atDmgInfo.damage;
flag = 0x00;
} else if (elem->acHitElem->atDmgInfo.dmgFlags_ColliderElementDamageInfoAT & DMG_ARROW_FIRE) {
} else if (elem->acHitElem->atDmgInfo.dmgFlags & DMG_ARROW_FIRE) {
flag = 0x01;
} else if (elem->acHitElem->atDmgInfo.dmgFlags_ColliderElementDamageInfoAT & DMG_ARROW_ICE) {
} else if (elem->acHitElem->atDmgInfo.dmgFlags & DMG_ARROW_ICE) {
flag = 0x02;
} else if (elem->acHitElem->atDmgInfo.dmgFlags_ColliderElementDamageInfoAT & DMG_ARROW_UNK1) {
} else if (elem->acHitElem->atDmgInfo.dmgFlags & DMG_ARROW_UNK1) {
flag = 0x04;
} else if (elem->acHitElem->atDmgInfo.dmgFlags_ColliderElementDamageInfoAT & DMG_ARROW_UNK2) {
} else if (elem->acHitElem->atDmgInfo.dmgFlags & DMG_ARROW_UNK2) {
flag = 0x08;
} else if (elem->acHitElem->atDmgInfo.dmgFlags_ColliderElementDamageInfoAT & DMG_ARROW_UNK3) {
} else if (elem->acHitElem->atDmgInfo.dmgFlags & DMG_ARROW_UNK3) {
flag = 0x10;
} else if (elem->acHitElem->atDmgInfo.dmgFlags_ColliderElementDamageInfoAT & DMG_ARROW_LIGHT) {
} else if (elem->acHitElem->atDmgInfo.dmgFlags & DMG_ARROW_LIGHT) {
flag = 0x20;
} else if (elem->acHitElem->atDmgInfo.dmgFlags_ColliderElementDamageInfoAT & DMG_MAGIC_LIGHT) {
} else if (elem->acHitElem->atDmgInfo.dmgFlags & DMG_MAGIC_LIGHT) {
if (freezeFlag) {
actor->freezeTimer = elem->acHitElem->atDmgInfo.damage_ColliderElementDamageInfoAT;
actor->freezeTimer = elem->acHitElem->atDmgInfo.damage;
}
flag = 0x40;
} else {
Loading