diff options
| author | Derek Hensley <hensley.derek58@gmail.com> | 2024-09-27 22:00:54 -0700 |
|---|---|---|
| committer | Eblo <7004497+Eblo@users.noreply.github.com> | 2025-09-15 21:46:58 -0400 |
| commit | 65d8529fe784b8ea4fd5e7b89a654331ac0cd0f9 (patch) | |
| tree | cf1eda0e7f64a8f74f263bd8030eff70a25c55a7 /mm/src/code | |
| parent | ac354278b27de483e6c3cf7ffcaa21e4176ea2c5 (diff) | |
Colliders Sync ColliderElement (#1698)
Diffstat (limited to 'mm/src/code')
| -rw-r--r-- | mm/src/code/z_actor.c | 26 | ||||
| -rw-r--r-- | mm/src/code/z_collision_check.c | 311 | ||||
| -rw-r--r-- | mm/src/code/z_fireobj.c | 2 |
3 files changed, 170 insertions, 169 deletions
diff --git a/mm/src/code/z_actor.c b/mm/src/code/z_actor.c index 7faee4dcd..97ef2b9c4 100644 --- a/mm/src/code/z_actor.c +++ b/mm/src/code/z_actor.c @@ -5033,16 +5033,16 @@ u8 Actor_ApplyDamage(Actor* actor) { return actor->colChkInfo.health; } -void Actor_SetDropFlag(Actor* actor, ColliderInfo* colInfo) { - ColliderInfo* acHitInfo = colInfo->acHitInfo; +void Actor_SetDropFlag(Actor* actor, ColliderElement* elem) { + ColliderElement* acHitElem = elem->acHitElem; - if (acHitInfo == NULL) { + if (acHitElem == NULL) { actor->dropFlag = DROPFLAG_NONE; - } else if (acHitInfo->toucher.dmgFlags & DMG_FIRE_ARROW) { + } else if (acHitElem->toucher.dmgFlags & DMG_FIRE_ARROW) { actor->dropFlag = DROPFLAG_1; - } else if (acHitInfo->toucher.dmgFlags & DMG_ICE_ARROW) { + } else if (acHitElem->toucher.dmgFlags & DMG_ICE_ARROW) { actor->dropFlag = DROPFLAG_2; - } else if (acHitInfo->toucher.dmgFlags & DMG_LIGHT_ARROW) { + } else if (acHitElem->toucher.dmgFlags & DMG_LIGHT_ARROW) { actor->dropFlag = DROPFLAG_20; } else { actor->dropFlag = DROPFLAG_NONE; @@ -5052,19 +5052,19 @@ void Actor_SetDropFlag(Actor* actor, ColliderInfo* colInfo) { void Actor_SetDropFlagJntSph(Actor* actor, ColliderJntSph* jntSphere) { s32 i; ColliderJntSphElement* jntElement; - ColliderInfo* acHitInfo; + ColliderElement* acHitElem; s32 flag; actor->dropFlag = DROPFLAG_NONE; for (i = jntSphere->count - 1; i >= 0; i--) { jntElement = &jntSphere->elements[i]; - acHitInfo = jntElement->info.acHitInfo; + acHitElem = jntElement->info.acHitElem; - if (acHitInfo == NULL) { + if (acHitElem == NULL) { flag = DROPFLAG_NONE; } else { - s32 dmgFlags = acHitInfo->toucher.dmgFlags; + s32 dmgFlags = acHitElem->toucher.dmgFlags; if (dmgFlags & DMG_FIRE_ARROW) { flag = DROPFLAG_1; @@ -5117,7 +5117,7 @@ void func_800BE3D0(Actor* actor, s16 angle, Vec3s* arg2) { void func_800BE504(Actor* actor, ColliderCylinder* collider) { // Checks if was hit by either DMG_NORMAL_ARROW, DMG_FIRE_ARROW, DMG_ICE_ARROW, DMG_LIGHT_ARROW or DMG_DEKU_BUBBLE - if ((collider->info.acHitInfo->toucher.dmgFlags & (0x10000 | 0x2000 | 0x1000 | 0x800 | 0x20))) { + if ((collider->info.acHitElem->toucher.dmgFlags & (0x10000 | 0x2000 | 0x1000 | 0x800 | 0x20))) { actor->world.rot.y = collider->base.ac->shape.rot.y; } else { actor->world.rot.y = Actor_WorldYawTowardActor(collider->base.ac, actor); @@ -5125,7 +5125,7 @@ void func_800BE504(Actor* actor, ColliderCylinder* collider) { } void func_800BE568(Actor* actor, ColliderSphere* collider) { - if (collider->info.acHitInfo->toucher.dmgFlags & (0x10000 | 0x2000 | 0x1000 | 0x800 | 0x20)) { + if (collider->info.acHitElem->toucher.dmgFlags & (0x10000 | 0x2000 | 0x1000 | 0x800 | 0x20)) { actor->world.rot.y = collider->base.ac->shape.rot.y; } else { actor->world.rot.y = Actor_WorldYawTowardActor(collider->base.ac, actor); @@ -5133,7 +5133,7 @@ void func_800BE568(Actor* actor, ColliderSphere* collider) { } void func_800BE5CC(Actor* actor, ColliderJntSph* collider, s32 colliderIndex) { - if (collider->elements[colliderIndex].info.acHitInfo->toucher.dmgFlags & + if (collider->elements[colliderIndex].info.acHitElem->toucher.dmgFlags & (0x10000 | 0x2000 | 0x1000 | 0x800 | 0x20)) { actor->world.rot.y = collider->base.ac->shape.rot.y; } else { diff --git a/mm/src/code/z_collision_check.c b/mm/src/code/z_collision_check.c index 7300f19d6..1f6d63748 100644 --- a/mm/src/code/z_collision_check.c +++ b/mm/src/code/z_collision_check.c @@ -49,8 +49,8 @@ TriNorm D_801EE188; * Gets the damage and effect that should be applied for the collision between * `at` and `ac`, referring to the ac actor's damage chart if applicable. */ -f32 CollisionCheck_GetDamageAndEffectOnBumper(Collider* atCol, ColliderInfo* atInfo, Collider* acCol, - ColliderInfo* acInfo, u32* effect) { +f32 CollisionCheck_GetDamageAndEffectOnBumper(Collider* atCol, ColliderElement* atElem, Collider* acCol, + ColliderElement* acElem, u32* effect) { static f32 sDamageMultipliers[] = { 0.0f, 1.0f, 2.0f, 0.5f, 0.25f, 3.0f, 4.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, }; @@ -59,10 +59,10 @@ f32 CollisionCheck_GetDamageAndEffectOnBumper(Collider* atCol, ColliderInfo* atI f32 damage; *effect = 0; - damage = CollisionCheck_GetToucherDamage(atCol, atInfo, acCol, acInfo); + damage = CollisionCheck_GetToucherDamage(atCol, atElem, acCol, acElem); if (acCol->actor->colChkInfo.damageTable != NULL) { - dmgFlags = atInfo->toucher.dmgFlags; + dmgFlags = atElem->toucher.dmgFlags; for (i = 0; i < ARRAY_COUNT(acCol->actor->colChkInfo.damageTable->attack); i++) { if (dmgFlags == 1) { @@ -88,8 +88,8 @@ f32 CollisionCheck_GetDamageAndEffectOnBumper(Collider* atCol, ColliderInfo* atI /** * Calculates damage after factoring in the ac collider's defense */ -f32 CollisionCheck_ApplyBumperDefense(f32 damage, ColliderInfo* ac) { - f32 finalDamage = damage - ac->bumper.defense; +f32 CollisionCheck_ApplyBumperDefense(f32 damage, ColliderElement* acElem) { + f32 finalDamage = damage - acElem->bumper.defense; return finalDamage; } @@ -98,12 +98,13 @@ f32 CollisionCheck_ApplyBumperDefense(f32 damage, ColliderInfo* ac) { * Gets the damage to be inflicted by `at` on `ac`, before applying other * factors such as the ac collider's defense. */ -s32 CollisionCheck_GetToucherDamage(Collider* atCol, ColliderInfo* atInfo, Collider* acCol, ColliderInfo* acInfo) { +s32 CollisionCheck_GetToucherDamage(Collider* atCol, ColliderElement* atElem, Collider* acCol, + ColliderElement* acElem) { if ((atCol->actor != NULL) && (atCol->actor->id == ACTOR_EN_BOM) && (acCol->actor != NULL) && (acCol->actor->id == ACTOR_PLAYER)) { return 8; } - return atInfo->toucher.damage; + return atElem->toucher.damage; } s32 Collider_InitBase(struct PlayState* play, Collider* col) { @@ -191,7 +192,7 @@ s32 Collider_SetTouch(struct PlayState* play, ColliderTouch* touch, ColliderTouc return 1; } -void Collider_ResetATInfoUnk(struct PlayState* play, ColliderInfo* info) { +void Collider_ResetATElementUnk(struct PlayState* play, ColliderElement* elem) { } s32 Collider_InitBump(struct PlayState* play, ColliderBump* bump) { @@ -212,8 +213,8 @@ s32 Collider_SetBump(struct PlayState* play, ColliderBump* bump, ColliderBumpIni return 1; } -s32 Collider_InitInfo(struct PlayState* play, ColliderInfo* info) { - static ColliderInfo sDefaultColliderInfo = { +s32 Collider_InitElement(struct PlayState* play, ColliderElement* elem) { + static ColliderElement sDefaultColliderElement = { { 0, 0, 0 }, { 0xF7CFFFFF, 0, 0, { 0, 0, 0 } }, ELEMTYPE_UNK0, TOUCH_NONE, BUMP_NONE, OCELEM_NONE, @@ -221,46 +222,46 @@ s32 Collider_InitInfo(struct PlayState* play, ColliderInfo* info) { NULL, NULL, }; - *info = sDefaultColliderInfo; - Collider_InitTouch(play, &info->toucher); - Collider_InitBump(play, &info->bumper); + *elem = sDefaultColliderElement; + Collider_InitTouch(play, &elem->toucher); + Collider_InitBump(play, &elem->bumper); return 1; } -s32 Collider_DestroyInfo(struct PlayState* play, ColliderInfo* info) { - Collider_DestroyTouch(play, &info->toucher); - Collider_DestroyBump(play, &info->bumper); +s32 Collider_DestroyElement(struct PlayState* play, ColliderElement* elem) { + Collider_DestroyTouch(play, &elem->toucher); + Collider_DestroyBump(play, &elem->bumper); return 1; } -s32 Collider_SetInfo(struct PlayState* play, ColliderInfo* info, ColliderInfoInit* src) { - info->elemType = src->elemType; - Collider_SetTouch(play, &info->toucher, &src->toucher); - Collider_SetBump(play, &info->bumper, &src->bumper); - info->toucherFlags = src->toucherFlags; - info->bumperFlags = src->bumperFlags; - info->ocElemFlags = src->ocElemFlags; +s32 Collider_SetElement(struct PlayState* play, ColliderElement* elem, ColliderElementInit* elemInit) { + elem->elemType = elemInit->elemType; + Collider_SetTouch(play, &elem->toucher, &elemInit->toucher); + Collider_SetBump(play, &elem->bumper, &elemInit->bumper); + elem->toucherFlags = elemInit->toucherFlags; + elem->bumperFlags = elemInit->bumperFlags; + elem->ocElemFlags = elemInit->ocElemFlags; return 1; } -void Collider_ResetATInfo(struct PlayState* play, ColliderInfo* info) { - info->atHit = NULL; - info->atHitInfo = NULL; - info->toucherFlags &= ~TOUCH_HIT; - info->toucherFlags &= ~TOUCH_DREW_HITMARK; - Collider_ResetATInfoUnk(play, info); +void Collider_ResetATElement(struct PlayState* play, ColliderElement* elem) { + elem->atHit = NULL; + elem->atHitElem = NULL; + elem->toucherFlags &= ~TOUCH_HIT; + elem->toucherFlags &= ~TOUCH_DREW_HITMARK; + Collider_ResetATElementUnk(play, elem); } -void Collider_ResetACInfo(struct PlayState* play, ColliderInfo* info) { - info->bumper.hitPos.x = info->bumper.hitPos.y = info->bumper.hitPos.z = 0; - info->bumperFlags &= ~BUMP_HIT; - info->bumperFlags &= ~BUMP_DRAW_HITMARK; - info->acHit = NULL; - info->acHitInfo = NULL; +void Collider_ResetACElement(struct PlayState* play, ColliderElement* elem) { + elem->bumper.hitPos.x = elem->bumper.hitPos.y = elem->bumper.hitPos.z = 0; + elem->bumperFlags &= ~BUMP_HIT; + elem->bumperFlags &= ~BUMP_DRAW_HITMARK; + elem->acHit = NULL; + elem->acHitElem = NULL; } -void Collider_ResetOCInfo(struct PlayState* play, ColliderInfo* info) { - info->ocElemFlags &= ~OCELEM_HIT; +void Collider_ResetOCElement(struct PlayState* play, ColliderElement* elem) { + elem->ocElemFlags &= ~OCELEM_HIT; } s32 Collider_InitJntSphElementDim(struct PlayState* play, ColliderJntSphElementDim* dim) { @@ -288,35 +289,35 @@ s32 Collider_SetJntSphElementDim(struct PlayState* play, ColliderJntSphElementDi } s32 Collider_InitJntSphElement(struct PlayState* play, ColliderJntSphElement* element) { - Collider_InitInfo(play, &element->info); + Collider_InitElement(play, &element->info); Collider_InitJntSphElementDim(play, &element->dim); return 1; } s32 Collider_DestroyJntSphElement(struct PlayState* play, ColliderJntSphElement* element) { - Collider_DestroyInfo(play, &element->info); + Collider_DestroyElement(play, &element->info); Collider_DestroyJntSphElementDim(play, &element->dim); return 1; } s32 Collider_SetJntSphElement(struct PlayState* play, ColliderJntSphElement* dest, ColliderJntSphElementInit* src) { - Collider_SetInfo(play, &dest->info, &src->info); + Collider_SetElement(play, &dest->info, &src->info); Collider_SetJntSphElementDim(play, &dest->dim, &src->dim); return 1; } s32 Collider_ResetJntSphElementAT(struct PlayState* play, ColliderJntSphElement* collider) { - Collider_ResetATInfo(play, &collider->info); + Collider_ResetATElement(play, &collider->info); return 1; } s32 Collider_ResetJntSphElementAC(struct PlayState* play, ColliderJntSphElement* collider) { - Collider_ResetACInfo(play, &collider->info); + Collider_ResetACElement(play, &collider->info); return 1; } s32 Collider_ResetJntSphElementOC(struct PlayState* play, ColliderJntSphElement* collider) { - Collider_ResetOCInfo(play, &collider->info); + Collider_ResetOCElement(play, &collider->info); return 1; } @@ -513,7 +514,7 @@ s32 Collider_SetCylinderDim(struct PlayState* play, Cylinder16* dim, Cylinder16* */ s32 Collider_InitCylinder(struct PlayState* play, ColliderCylinder* collider) { Collider_InitBase(play, &collider->base); - Collider_InitInfo(play, &collider->info); + Collider_InitElement(play, &collider->info); Collider_InitCylinderDim(play, &collider->dim); return 1; } @@ -523,7 +524,7 @@ s32 Collider_InitCylinder(struct PlayState* play, ColliderCylinder* collider) { */ s32 Collider_DestroyCylinder(struct PlayState* play, ColliderCylinder* collider) { Collider_DestroyBase(play, &collider->base); - Collider_DestroyInfo(play, &collider->info); + Collider_DestroyElement(play, &collider->info); Collider_DestroyCylinderDim(play, &collider->dim); return 1; } @@ -534,7 +535,7 @@ s32 Collider_DestroyCylinder(struct PlayState* play, ColliderCylinder* collider) */ s32 Collider_SetCylinderToActor(struct PlayState* play, ColliderCylinder* collider, ColliderCylinderInitToActor* src) { Collider_SetBaseToActor(play, &collider->base, &src->base); - Collider_SetInfo(play, &collider->info, &src->info); + Collider_SetElement(play, &collider->info, &src->info); Collider_SetCylinderDim(play, &collider->dim, &src->dim); return 1; } @@ -545,7 +546,7 @@ s32 Collider_SetCylinderToActor(struct PlayState* play, ColliderCylinder* collid s32 Collider_SetCylinderType1(struct PlayState* play, ColliderCylinder* collider, Actor* actor, ColliderCylinderInitType1* src) { Collider_SetBaseType1(play, &collider->base, actor, &src->base); - Collider_SetInfo(play, &collider->info, &src->info); + Collider_SetElement(play, &collider->info, &src->info); Collider_SetCylinderDim(play, &collider->dim, &src->dim); return 1; } @@ -555,7 +556,7 @@ s32 Collider_SetCylinderType1(struct PlayState* play, ColliderCylinder* collider */ s32 Collider_SetCylinder(struct PlayState* play, ColliderCylinder* collider, Actor* actor, ColliderCylinderInit* src) { Collider_SetBase(play, &collider->base, actor, &src->base); - Collider_SetInfo(play, &collider->info, &src->info); + Collider_SetElement(play, &collider->info, &src->info); Collider_SetCylinderDim(play, &collider->dim, &src->dim); return 1; } @@ -577,7 +578,7 @@ s32 Collider_ResetCylinderAT(struct PlayState* play, Collider* col) { ColliderCylinder* cylinder = (ColliderCylinder*)col; Collider_ResetATBase(play, &cylinder->base); - Collider_ResetATInfo(play, &cylinder->info); + Collider_ResetATElement(play, &cylinder->info); return 1; } @@ -588,7 +589,7 @@ s32 Collider_ResetCylinderAC(struct PlayState* play, Collider* col) { ColliderCylinder* cylinder = (ColliderCylinder*)col; Collider_ResetACBase(play, &cylinder->base); - Collider_ResetACInfo(play, &cylinder->info); + Collider_ResetACElement(play, &cylinder->info); return 1; } @@ -599,7 +600,7 @@ s32 Collider_ResetCylinderOC(struct PlayState* play, Collider* col) { ColliderCylinder* cylinder = (ColliderCylinder*)col; Collider_ResetOCBase(play, &cylinder->base); - Collider_ResetOCInfo(play, &cylinder->info); + Collider_ResetOCElement(play, &cylinder->info); return 1; } @@ -639,35 +640,35 @@ s32 Collider_SetTrisElementDim(struct PlayState* play, TriNorm* dim, ColliderTri } s32 Collider_InitTrisElement(struct PlayState* play, ColliderTrisElement* element) { - Collider_InitInfo(play, &element->info); + Collider_InitElement(play, &element->info); Collider_InitTrisElementDim(play, &element->dim); return 1; } s32 Collider_DestroyTrisElement(struct PlayState* play, ColliderTrisElement* element) { - Collider_DestroyInfo(play, &element->info); + Collider_DestroyElement(play, &element->info); Collider_DestroyTrisElementDim(play, &element->dim); return 1; } s32 Collider_SetTrisElement(struct PlayState* play, ColliderTrisElement* element, ColliderTrisElementInit* src) { - Collider_SetInfo(play, &element->info, &src->info); + Collider_SetElement(play, &element->info, &src->info); Collider_SetTrisElementDim(play, &element->dim, &src->dim); return 1; } s32 Collider_ResetTrisElementAT(struct PlayState* play, ColliderTrisElement* element) { - Collider_ResetATInfo(play, &element->info); + Collider_ResetATElement(play, &element->info); return 1; } s32 Collider_ResetTrisElementAC(struct PlayState* play, ColliderTrisElement* element) { - Collider_ResetACInfo(play, &element->info); + Collider_ResetACElement(play, &element->info); return 1; } s32 Collider_ResetTrisElementOC(struct PlayState* play, ColliderTrisElement* element) { - Collider_ResetOCInfo(play, &element->info); + Collider_ResetOCElement(play, &element->info); return 1; } @@ -865,7 +866,7 @@ s32 Collider_SetQuadDim(struct PlayState* play, ColliderQuadDim* dim, ColliderQu */ s32 Collider_InitQuad(struct PlayState* play, ColliderQuad* collider) { Collider_InitBase(play, &collider->base); - Collider_InitInfo(play, &collider->info); + Collider_InitElement(play, &collider->info); Collider_InitQuadDim(play, &collider->dim); return 1; } @@ -875,7 +876,7 @@ s32 Collider_InitQuad(struct PlayState* play, ColliderQuad* collider) { */ s32 Collider_DestroyQuad(struct PlayState* play, ColliderQuad* collider) { Collider_DestroyBase(play, &collider->base); - Collider_DestroyInfo(play, &collider->info); + Collider_DestroyElement(play, &collider->info); Collider_DestroyQuadDim(play, &collider->dim); return 1; } @@ -885,7 +886,7 @@ s32 Collider_DestroyQuad(struct PlayState* play, ColliderQuad* collider) { */ s32 Collider_SetQuadType1(struct PlayState* play, ColliderQuad* collider, Actor* actor, ColliderQuadInitType1* src) { Collider_SetBaseType1(play, &collider->base, actor, &src->base); - Collider_SetInfo(play, &collider->info, &src->info); + Collider_SetElement(play, &collider->info, &src->info); Collider_SetQuadDim(play, &collider->dim, &src->dim); return 1; } @@ -895,7 +896,7 @@ s32 Collider_SetQuadType1(struct PlayState* play, ColliderQuad* collider, Actor* */ s32 Collider_SetQuad(struct PlayState* play, ColliderQuad* collider, Actor* actor, ColliderQuadInit* src) { Collider_SetBase(play, &collider->base, actor, &src->base); - Collider_SetInfo(play, &collider->info, &src->info); + Collider_SetElement(play, &collider->info, &src->info); Collider_SetQuadDim(play, &collider->dim, &src->dim); return 1; } @@ -916,7 +917,7 @@ s32 Collider_ResetQuadAT(struct PlayState* play, Collider* col) { ColliderQuad* quad = (ColliderQuad*)col; Collider_ResetATBase(play, &quad->base); - Collider_ResetATInfo(play, &quad->info); + Collider_ResetATElement(play, &quad->info); Collider_ResetQuadACDist(play, &quad->dim); return 1; } @@ -928,7 +929,7 @@ s32 Collider_ResetQuadAC(struct PlayState* play, Collider* col) { ColliderQuad* quad = (ColliderQuad*)col; Collider_ResetACBase(play, &quad->base); - Collider_ResetACInfo(play, &quad->info); + Collider_ResetACElement(play, &quad->info); return 1; } @@ -939,7 +940,7 @@ s32 Collider_ResetQuadOC(struct PlayState* play, Collider* col) { ColliderQuad* quad = (ColliderQuad*)col; Collider_ResetOCBase(play, &quad->base); - Collider_ResetOCInfo(play, &quad->info); + Collider_ResetOCElement(play, &quad->info); return 1; } @@ -963,8 +964,8 @@ s32 Collider_QuadSetNearestAC(struct PlayState* play, ColliderQuad* quad, Vec3f* if (quad->info.atHit != NULL) { Collider_ResetACBase(play, quad->info.atHit); } - if (quad->info.atHitInfo != NULL) { - Collider_ResetACInfo(play, quad->info.atHitInfo); + if (quad->info.atHitElem != NULL) { + Collider_ResetACElement(play, quad->info.atHitElem); } return 1; } else { @@ -977,7 +978,7 @@ s32 Collider_QuadSetNearestAC(struct PlayState* play, ColliderQuad* quad, Vec3f* */ s32 Collider_InitSphere(struct PlayState* play, ColliderSphere* collider) { Collider_InitBase(play, &collider->base); - Collider_InitInfo(play, &collider->info); + Collider_InitElement(play, &collider->info); Collider_InitJntSphElementDim(play, &collider->dim); return 1; } @@ -987,7 +988,7 @@ s32 Collider_InitSphere(struct PlayState* play, ColliderSphere* collider) { */ s32 Collider_DestroySphere(struct PlayState* play, ColliderSphere* collider) { Collider_DestroyBase(play, &collider->base); - Collider_DestroyInfo(play, &collider->info); + Collider_DestroyElement(play, &collider->info); Collider_DestroyJntSphElementDim(play, &collider->dim); return 1; } @@ -997,7 +998,7 @@ s32 Collider_DestroySphere(struct PlayState* play, ColliderSphere* collider) { */ s32 Collider_SetSphere(struct PlayState* play, ColliderSphere* collider, Actor* actor, ColliderSphereInit* src) { Collider_SetBase(play, &collider->base, actor, &src->base); - Collider_SetInfo(play, &collider->info, &src->info); + Collider_SetElement(play, &collider->info, &src->info); Collider_SetJntSphElementDim(play, &collider->dim, &src->dim); return 1; } @@ -1018,7 +1019,7 @@ s32 Collider_ResetSphereAT(struct PlayState* play, Collider* col) { ColliderSphere* sphere = (ColliderSphere*)col; Collider_ResetATBase(play, &sphere->base); - Collider_ResetATInfo(play, &sphere->info); + Collider_ResetATElement(play, &sphere->info); return 1; } @@ -1029,7 +1030,7 @@ s32 Collider_ResetSphereAC(struct PlayState* play, Collider* col) { ColliderSphere* sphere = (ColliderSphere*)col; Collider_ResetACBase(play, &sphere->base); - Collider_ResetACInfo(play, &sphere->info); + Collider_ResetACElement(play, &sphere->info); return 1; } @@ -1040,7 +1041,7 @@ s32 Collider_ResetSphereOC(struct PlayState* play, Collider* col) { ColliderSphere* sphere = (ColliderSphere*)col; Collider_ResetOCBase(play, &sphere->base); - Collider_ResetOCInfo(play, &sphere->info); + Collider_ResetOCElement(play, &sphere->info); return 1; } @@ -1371,8 +1372,8 @@ s32 CollisionCheck_SetOCLine(struct PlayState* play, CollisionCheckContext* colC /** * Skips AT elements that are off. */ -s32 CollisionCheck_SkipTouch(ColliderInfo* info) { - if (!(info->toucherFlags & TOUCH_ON)) { +s32 CollisionCheck_SkipTouch(ColliderElement* elem) { + if (!(elem->toucherFlags & TOUCH_ON)) { return 1; } return 0; @@ -1381,8 +1382,8 @@ s32 CollisionCheck_SkipTouch(ColliderInfo* info) { /** * Skips AC elements that are off. */ -s32 CollisionCheck_SkipBump(ColliderInfo* info) { - if (!(info->bumperFlags & BUMP_ON)) { +s32 CollisionCheck_SkipBump(ColliderElement* elem) { + if (!(elem->bumperFlags & BUMP_ON)) { return 1; } return 0; @@ -1391,9 +1392,9 @@ s32 CollisionCheck_SkipBump(ColliderInfo* info) { /** * If the AT element has no dmgFlags in common with the AC element, no collision happens. */ -s32 CollisionCheck_NoSharedFlags(ColliderInfo* toucher, ColliderInfo* bumper) { - if (GameInteractor_Should(VB_CHECK_BUMPER_COLLISION, !(toucher->toucher.dmgFlags & bumper->bumper.dmgFlags), - toucher, bumper)) { +s32 CollisionCheck_NoSharedFlags(ColliderElement* atElem, ColliderElement* acElem) { + if (GameInteractor_Should(VB_CHECK_BUMPER_COLLISION, !(atElem->toucher.dmgFlags & acElem->bumper.dmgFlags), + atElem, acElem)) { return true; } return false; @@ -1542,8 +1543,8 @@ void CollisionCheck_RedBloodUnused(struct PlayState* play, Collider* col, Vec3f* /** * Plays sound effects and displays hitmarks for solid-type AC colliders (METAL, WOOD, HARD, and TREE) */ -void CollisionCheck_HitSolid(struct PlayState* play, ColliderInfo* info, Collider* col, Vec3f* hitPos) { - s32 flags = info->toucherFlags & TOUCH_SFX_NONE; +void CollisionCheck_HitSolid(struct PlayState* play, ColliderElement* elem, Collider* col, Vec3f* hitPos) { + s32 flags = elem->toucherFlags & TOUCH_SFX_NONE; if ((flags == TOUCH_SFX_NORMAL) && (col->colType != COLTYPE_METAL)) { EffectSsHitmark_SpawnFixedScale(play, 0, hitPos); @@ -1579,15 +1580,15 @@ void CollisionCheck_HitSolid(struct PlayState* play, ColliderInfo* info, Collide /** * Plays a hit sound effect for AT colliders attached to Player based on the AC element's elemType. */ -s32 CollisionCheck_SwordHitAudio(Collider* at, ColliderInfo* acInfo) { +s32 CollisionCheck_SwordHitAudio(Collider* at, ColliderElement* acElem) { if ((at->actor != NULL) && (at->actor->category == ACTORCAT_PLAYER)) { - if (acInfo->elemType == ELEMTYPE_UNK0) { + if (acElem->elemType == ELEMTYPE_UNK0) { Audio_PlaySfx_AtPos(&at->actor->projectedPos, NA_SE_IT_SWORD_STRIKE); - } else if (acInfo->elemType == ELEMTYPE_UNK1) { + } else if (acElem->elemType == ELEMTYPE_UNK1) { Audio_PlaySfx_AtPos(&at->actor->projectedPos, NA_SE_IT_SWORD_STRIKE_HARD); - } else if (acInfo->elemType == ELEMTYPE_UNK2) { + } else if (acElem->elemType == ELEMTYPE_UNK2) { Audio_PlaySfx_AtPos(&at->actor->projectedPos, 0); - } else if (acInfo->elemType == ELEMTYPE_UNK3) { + } else if (acElem->elemType == ELEMTYPE_UNK3) { Audio_PlaySfx_AtPos(&at->actor->projectedPos, 0); } } @@ -1609,13 +1610,13 @@ HitInfo sHitInfo[] = { /** * Handles hitmarks, blood, and sound effects for each AC collision, determined by the AC collider's colType */ -void CollisionCheck_HitEffects(struct PlayState* play, Collider* at, ColliderInfo* atInfo, Collider* ac, - ColliderInfo* acInfo, Vec3f* hitPos) { - if (acInfo->bumperFlags & BUMP_NO_HITMARK) { +void CollisionCheck_HitEffects(struct PlayState* play, Collider* at, ColliderElement* atElem, Collider* ac, + ColliderElement* acElem, Vec3f* hitPos) { + if (acElem->bumperFlags & BUMP_NO_HITMARK) { return; } - if (!(atInfo->toucherFlags & TOUCH_AT_HITMARK) && (atInfo->toucherFlags & TOUCH_DREW_HITMARK)) { + if (!(atElem->toucherFlags & TOUCH_AT_HITMARK) && (atElem->toucherFlags & TOUCH_DREW_HITMARK)) { return; } @@ -1624,7 +1625,7 @@ void CollisionCheck_HitEffects(struct PlayState* play, Collider* at, ColliderInf } if (ac->actor != NULL) { if (sHitInfo[ac->colType].effect == HIT_SOLID) { - CollisionCheck_HitSolid(play, atInfo, ac, hitPos); + CollisionCheck_HitSolid(play, atElem, ac, hitPos); } else if (sHitInfo[ac->colType].effect == HIT_WOOD) { if (at->actor == NULL) { CollisionCheck_SpawnShieldParticles(play, hitPos); @@ -1634,8 +1635,8 @@ void CollisionCheck_HitEffects(struct PlayState* play, Collider* at, ColliderInf } } else if (sHitInfo[ac->colType].effect != HIT_NONE) { EffectSsHitmark_SpawnFixedScale(play, sHitInfo[ac->colType].effect, hitPos); - if (!(acInfo->bumperFlags & BUMP_NO_SWORD_SFX)) { - CollisionCheck_SwordHitAudio(at, acInfo); + if (!(acElem->bumperFlags & BUMP_NO_SWORD_SFX)) { + CollisionCheck_SwordHitAudio(at, acElem); } } } else { @@ -1659,62 +1660,62 @@ void CollisionCheck_SetBounce(Collider* at, Collider* ac) { /** * Performs the AC collision between the AT element and AC element that collided. */ -s32 CollisionCheck_SetATvsAC(struct PlayState* play, Collider* atCol, ColliderInfo* atInfo, Vec3f* atPos, - Collider* acCol, ColliderInfo* acInfo, Vec3f* acPos, Vec3f* hitPos) { - if (!GameInteractor_Should(VB_PERFORM_AC_COLLISION, true, atCol, acCol, atInfo, acInfo)) { +s32 CollisionCheck_SetATvsAC(struct PlayState* play, Collider* atCol, ColliderElement* atElem, Vec3f* atPos, + Collider* acCol, ColliderElement* acElem, Vec3f* acPos, Vec3f* hitPos) { + if (!GameInteractor_Should(VB_PERFORM_AC_COLLISION, true, atCol, acCol, atElem, acElem)) { return 0; } f32 damage; u32 effect; - if (CollisionCheck_GetToucherDamage(atCol, atInfo, acCol, acInfo) != 0) { - damage = CollisionCheck_GetDamageAndEffectOnBumper(atCol, atInfo, acCol, acInfo, &effect); + if (CollisionCheck_GetToucherDamage(atCol, atElem, acCol, acElem) != 0) { + damage = CollisionCheck_GetDamageAndEffectOnBumper(atCol, atElem, acCol, acElem, &effect); if (damage < 1.0f) { if (effect == 0) { return 0; } - } else if ((CollisionCheck_ApplyBumperDefense(damage, acInfo) < 1.0f) && (effect == 0)) { + } else if ((CollisionCheck_ApplyBumperDefense(damage, acElem) < 1.0f) && (effect == 0)) { return 0; } } if ((acCol->acFlags & AC_HARD) && (atCol->actor != NULL) && (acCol->actor != NULL)) { CollisionCheck_SetBounce(atCol, acCol); } - if (!(acInfo->bumperFlags & BUMP_NO_AT_INFO)) { + if (!(acElem->bumperFlags & BUMP_NO_AT_INFO)) { atCol->atFlags |= AT_HIT; atCol->at = acCol->actor; - atInfo->atHit = acCol; - atInfo->toucherFlags |= TOUCH_HIT; - atInfo->atHitInfo = acInfo; - if (!(atInfo->bumperFlags & BUMP_HIT)) { - atInfo->bumper.hitPos.x = hitPos->x; - atInfo->bumper.hitPos.y = hitPos->y; - atInfo->bumper.hitPos.z = hitPos->z; + atElem->atHit = acCol; + atElem->toucherFlags |= TOUCH_HIT; + atElem->atHitElem = acElem; + if (!(atElem->bumperFlags & BUMP_HIT)) { + atElem->bumper.hitPos.x = hitPos->x; + atElem->bumper.hitPos.y = hitPos->y; + atElem->bumper.hitPos.z = hitPos->z; } if (atCol->actor != NULL) { - atCol->actor->colChkInfo.atHitEffect = acInfo->bumper.effect; + atCol->actor->colChkInfo.atHitEffect = acElem->bumper.effect; } } - if (!(atInfo->ocElemFlags & OCELEM_UNK2)) { + if (!(atElem->ocElemFlags & OCELEM_UNK2)) { acCol->acFlags |= AC_HIT; acCol->ac = atCol->actor; - acInfo->acHit = atCol; - acInfo->acHitInfo = atInfo; - acInfo->bumperFlags |= BUMP_HIT; + acElem->acHit = atCol; + acElem->acHitElem = atElem; + acElem->bumperFlags |= BUMP_HIT; if (acCol->actor != NULL) { - acCol->actor->colChkInfo.acHitEffect = atInfo->toucher.effect; + acCol->actor->colChkInfo.acHitEffect = atElem->toucher.effect; } - acInfo->bumper.hitPos.x = hitPos->x; - acInfo->bumper.hitPos.y = hitPos->y; - acInfo->bumper.hitPos.z = hitPos->z; + acElem->bumper.hitPos.x = hitPos->x; + acElem->bumper.hitPos.y = hitPos->y; + acElem->bumper.hitPos.z = hitPos->z; } - if (!(atInfo->toucherFlags & TOUCH_AT_HITMARK) && (acCol->colType != COLTYPE_METAL) && + if (!(atElem->toucherFlags & TOUCH_AT_HITMARK) && (acCol->colType != COLTYPE_METAL) && (acCol->colType != COLTYPE_WOOD) && (acCol->colType != COLTYPE_HARD)) { - acInfo->bumperFlags |= BUMP_DRAW_HITMARK; + acElem->bumperFlags |= BUMP_DRAW_HITMARK; } else { - CollisionCheck_HitEffects(play, atCol, atInfo, acCol, acInfo, hitPos); - atInfo->toucherFlags |= TOUCH_DREW_HITMARK; + CollisionCheck_HitEffects(play, atCol, atElem, acCol, acElem, hitPos); + atElem->toucherFlags |= TOUCH_DREW_HITMARK; } return 1; } @@ -2786,14 +2787,14 @@ void CollisionCheck_SetJntSphHitFX(struct PlayState* play, CollisionCheckContext ColliderJntSphElement* element; for (element = jntSph->elements; element < &jntSph->elements[jntSph->count]; element++) { - if ((element->info.bumperFlags & BUMP_DRAW_HITMARK) && (element->info.acHitInfo != NULL) && - !(element->info.acHitInfo->toucherFlags & TOUCH_DREW_HITMARK)) { + if ((element->info.bumperFlags & BUMP_DRAW_HITMARK) && (element->info.acHitElem != NULL) && + !(element->info.acHitElem->toucherFlags & TOUCH_DREW_HITMARK)) { Vec3f hitPos; Math_Vec3s_ToVec3f(&hitPos, &element->info.bumper.hitPos); - CollisionCheck_HitEffects(play, element->info.acHit, element->info.acHitInfo, &jntSph->base, &element->info, + CollisionCheck_HitEffects(play, element->info.acHit, element->info.acHitElem, &jntSph->base, &element->info, &hitPos); - element->info.acHitInfo->toucherFlags |= TOUCH_DREW_HITMARK; + element->info.acHitElem->toucherFlags |= TOUCH_DREW_HITMARK; return; } } @@ -2805,14 +2806,14 @@ void CollisionCheck_SetJntSphHitFX(struct PlayState* play, CollisionCheckContext void CollisionCheck_SetCylHitFX(struct PlayState* play, CollisionCheckContext* colChkCtx, Collider* col) { ColliderCylinder* cylinder = (ColliderCylinder*)col; - if ((cylinder->info.bumperFlags & BUMP_DRAW_HITMARK) && (cylinder->info.acHitInfo != NULL) && - !(cylinder->info.acHitInfo->toucherFlags & TOUCH_DREW_HITMARK)) { + if ((cylinder->info.bumperFlags & BUMP_DRAW_HITMARK) && (cylinder->info.acHitElem != NULL) && + !(cylinder->info.acHitElem->toucherFlags & TOUCH_DREW_HITMARK)) { Vec3f hitPos; Math_Vec3s_ToVec3f(&hitPos, &cylinder->info.bumper.hitPos); - CollisionCheck_HitEffects(play, cylinder->info.acHit, cylinder->info.acHitInfo, &cylinder->base, + CollisionCheck_HitEffects(play, cylinder->info.acHit, cylinder->info.acHitElem, &cylinder->base, &cylinder->info, &hitPos); - cylinder->info.acHitInfo->toucherFlags |= TOUCH_DREW_HITMARK; + cylinder->info.acHitElem->toucherFlags |= TOUCH_DREW_HITMARK; } } @@ -2824,14 +2825,14 @@ void CollisionCheck_SetTrisHitFX(struct PlayState* play, CollisionCheckContext* ColliderTrisElement* element; for (element = tris->elements; element < &tris->elements[tris->count]; element++) { - if ((element->info.bumperFlags & BUMP_DRAW_HITMARK) && (element->info.acHitInfo != NULL) && - !(element->info.acHitInfo->toucherFlags & TOUCH_DREW_HITMARK)) { + if ((element->info.bumperFlags & BUMP_DRAW_HITMARK) && (element->info.acHitElem != NULL) && + !(element->info.acHitElem->toucherFlags & TOUCH_DREW_HITMARK)) { Vec3f hitPos; Math_Vec3s_ToVec3f(&hitPos, &element->info.bumper.hitPos); - CollisionCheck_HitEffects(play, element->info.acHit, element->info.acHitInfo, &tris->base, &element->info, + CollisionCheck_HitEffects(play, element->info.acHit, element->info.acHitElem, &tris->base, &element->info, &hitPos); - element->info.acHitInfo->toucherFlags |= TOUCH_DREW_HITMARK; + element->info.acHitElem->toucherFlags |= TOUCH_DREW_HITMARK; return; } } @@ -2843,13 +2844,13 @@ void CollisionCheck_SetTrisHitFX(struct PlayState* play, CollisionCheckContext* void CollisionCheck_SetQuadHitFX(struct PlayState* play, CollisionCheckContext* colChkCtx, Collider* col) { ColliderQuad* quad = (ColliderQuad*)col; - if ((quad->info.bumperFlags & BUMP_DRAW_HITMARK) && (quad->info.acHitInfo != NULL) && - !(quad->info.acHitInfo->toucherFlags & TOUCH_DREW_HITMARK)) { + if ((quad->info.bumperFlags & BUMP_DRAW_HITMARK) && (quad->info.acHitElem != NULL) && + !(quad->info.acHitElem->toucherFlags & TOUCH_DREW_HITMARK)) { Vec3f hitPos; Math_Vec3s_ToVec3f(&hitPos, &quad->info.bumper.hitPos); - CollisionCheck_HitEffects(play, quad->info.acHit, quad->info.acHitInfo, &quad->base, &quad->info, &hitPos); - quad->info.acHitInfo->toucherFlags |= TOUCH_DREW_HITMARK; + CollisionCheck_HitEffects(play, quad->info.acHit, quad->info.acHitElem, &quad->base, &quad->info, &hitPos); + quad->info.acHitElem->toucherFlags |= TOUCH_DREW_HITMARK; } } @@ -2859,14 +2860,14 @@ void CollisionCheck_SetQuadHitFX(struct PlayState* play, CollisionCheckContext* void CollisionCheck_SetSphereHitFX(struct PlayState* play, CollisionCheckContext* colChkCtx, Collider* col) { ColliderSphere* sphere = (ColliderSphere*)col; - if ((sphere->info.bumperFlags & BUMP_DRAW_HITMARK) && (sphere->info.acHitInfo != NULL) && - !(sphere->info.acHitInfo->toucherFlags & TOUCH_DREW_HITMARK)) { + if ((sphere->info.bumperFlags & BUMP_DRAW_HITMARK) && (sphere->info.acHitElem != NULL) && + !(sphere->info.acHitElem->toucherFlags & TOUCH_DREW_HITMARK)) { Vec3f hitPos; Math_Vec3s_ToVec3f(&hitPos, &sphere->info.bumper.hitPos); - CollisionCheck_HitEffects(play, sphere->info.acHit, sphere->info.acHitInfo, &sphere->base, &sphere->info, + CollisionCheck_HitEffects(play, sphere->info.acHit, sphere->info.acHitElem, &sphere->base, &sphere->info, &hitPos); - sphere->info.acHitInfo->toucherFlags |= TOUCH_DREW_HITMARK; + sphere->info.acHitElem->toucherFlags |= TOUCH_DREW_HITMARK; } } @@ -3007,8 +3008,8 @@ s32 CollisionCheck_GetMassType(u8 mass) { * Sets OC collision flags for OC collider overlaps. If both colliders are attached to actors and can push, * also performs an elastic collision where both colliders are moved apart in proportion to their masses. */ -void CollisionCheck_SetOCvsOC(struct PlayState* play, Collider* leftCol, ColliderInfo* leftInfo, Vec3f* leftPos, - Collider* rightCol, ColliderInfo* rightInfo, Vec3f* rightPos, f32 overlapSize) { +void CollisionCheck_SetOCvsOC(struct PlayState* play, Collider* leftCol, ColliderElement* leftElem, Vec3f* leftPos, + Collider* rightCol, ColliderElement* rightElem, Vec3f* rightPos, f32 overlapSize) { f32 pad; f32 leftDispRatio; f32 rightDispRatio; @@ -3026,14 +3027,14 @@ void CollisionCheck_SetOCvsOC(struct PlayState* play, Collider* leftCol, Collide leftCol->ocFlags1 |= OC1_HIT; leftCol->oc = rightActor; - leftInfo->ocElemFlags |= OCELEM_HIT; + leftElem->ocElemFlags |= OCELEM_HIT; if (rightCol->ocFlags2 & OC2_TYPE_PLAYER) { leftCol->ocFlags2 |= OC2_HIT_PLAYER; } rightCol->ocFlags1 |= OC1_HIT; rightCol->oc = leftActor; - rightInfo->ocElemFlags |= OCELEM_HIT; + rightElem->ocElemFlags |= OCELEM_HIT; if (leftCol->ocFlags2 & OC2_TYPE_PLAYER) { rightCol->ocFlags2 |= OC2_HIT_PLAYER; } @@ -3460,36 +3461,36 @@ void CollisionCheck_SetInfoGetDamageTable(CollisionCheckInfo* info, s32 index, C * Apply AC damage effect */ void CollisionCheck_ApplyDamage(struct PlayState* play, CollisionCheckContext* colChkCtx, Collider* col, - ColliderInfo* info) { + ColliderElement* elem) { f32 damage; f32 finalDamage = 0.0f; s32 pad; Collider* atCol; - ColliderInfo* atInfo; + ColliderElement* atElem; s32 pad1; u32 effect; if ((col->actor == NULL) || !(col->acFlags & AC_HIT)) { return; } - if (!(info->bumperFlags & BUMP_HIT) || (info->bumperFlags & BUMP_NO_DAMAGE)) { + if (!(elem->bumperFlags & BUMP_HIT) || (elem->bumperFlags & BUMP_NO_DAMAGE)) { return; } - atCol = info->acHit; - atInfo = info->acHitInfo; + atCol = elem->acHit; + atElem = elem->acHitElem; - if ((atCol != NULL) && (atInfo != NULL) && (col != NULL) && (info != NULL)) { - damage = CollisionCheck_GetDamageAndEffectOnBumper(atCol, atInfo, col, info, &effect); + if ((atCol != NULL) && (atElem != NULL) && (col != NULL) && (elem != NULL)) { + damage = CollisionCheck_GetDamageAndEffectOnBumper(atCol, atElem, col, elem, &effect); - if (CollisionCheck_GetToucherDamage(atCol, atInfo, col, info) != 0) { + if (CollisionCheck_GetToucherDamage(atCol, atElem, col, elem) != 0) { if (damage < 1.0f) { finalDamage = 0.0f; if (effect == 0) { return; } } else { - finalDamage = CollisionCheck_ApplyBumperDefense(damage, info); + finalDamage = CollisionCheck_ApplyBumperDefense(damage, elem); if ((finalDamage < 1.0f) && (effect == 0)) { return; } @@ -3498,7 +3499,7 @@ void CollisionCheck_ApplyDamage(struct PlayState* play, CollisionCheckContext* c if (col->actor->colChkInfo.damageTable != NULL) { col->actor->colChkInfo.damageEffect = effect; } - if (!(col->acFlags & AC_HARD) || ((col->acFlags & AC_HARD) && (atInfo->toucher.dmgFlags == 0x20000000))) { + if (!(col->acFlags & AC_HARD) || ((col->acFlags & AC_HARD) && (atElem->toucher.dmgFlags == 0x20000000))) { if (col->actor->colChkInfo.damage < finalDamage) { col->actor->colChkInfo.damage = finalDamage; } diff --git a/mm/src/code/z_fireobj.c b/mm/src/code/z_fireobj.c index dd98ef8ea..1e6e22547 100644 --- a/mm/src/code/z_fireobj.c +++ b/mm/src/code/z_fireobj.c @@ -223,7 +223,7 @@ void FireObj_Update(PlayState* play, FireObj* fire, Actor* actor) { FireObj_UpdateStateTransitions(play, fire); if (fire->state == FIRE_STATE_NOT_LIT) { if ((fire->collision.base.acFlags & AC_HIT) && - (fire->collision.info.acHitInfo->toucher.dmgFlags & DMG_FIRE_ARROW)) { + (fire->collision.info.acHitElem->toucher.dmgFlags & DMG_FIRE_ARROW)) { FireObj_SetState(fire, fire->dynamicSizeStep, FIRE_STATE_GROWING); } } else if ((fire->collision.base.acFlags & AC_HIT) && (arrow->actor.update != NULL) && |
