From f13e592af9c98218ad47a4ac0f3cd9e67cd4eb7a Mon Sep 17 00:00:00 2001 From: Cuyler36 Date: Tue, 10 Jun 2025 23:12:22 -0400 Subject: [PATCH] Add flags for collision object/collision check --- include/m_collision_obj.h | 26 +- src/actor/ac_lotus_move.c_inc | 2 +- src/actor/npc/ac_npc2_think.c_inc | 2 +- src/actor/npc/ac_npc_shop_common.c | 6 +- src/game/m_collision_obj.c | 571 +++++++++-------------------- src/game/m_player_common.c_inc | 4 +- 6 files changed, 213 insertions(+), 398 deletions(-) diff --git a/include/m_collision_obj.h b/include/m_collision_obj.h index d3c463e8..dffa4643 100644 --- a/include/m_collision_obj.h +++ b/include/m_collision_obj.h @@ -18,7 +18,31 @@ enum collision_type { ClObj_TYPE_NUM }; -#define ClObj_FLAG_COLLIDED (1 << 1) +#define CollisionCheck_FLAG_SKIP (1 << 0) + +#define ClObj_GROUP_PLAYER (1 << 3) // 0x08 +#define ClObj_GROUP_2 (1 << 4) // 0x10 +#define ClObj_GROUP_3 (1 << 5) // 0x20 +#define ClObj_GROUP_ALL (ClObj_GROUP_PLAYER | ClObj_GROUP_2 | ClObj_GROUP_3) // 0x38 + +#define ClObj_FLAG_CHECK (1 << 0) // 0x01 +#define ClObj_FLAG_COLLIDED (1 << 1) // 0x02 +#define ClObj_FLAG_DONT_UPDATE_POS (1 << 2) // 0x04 +#define ClObj_FLAG_COLLIDE_PLAYER ClObj_GROUP_PLAYER +#define ClObj_FLAG_COLLIDE_GROUP_2 ClObj_GROUP_2 +#define ClObj_FLAG_COLLIDE_GROUP_3 ClObj_GROUP_3 +#define ClObj_FLAG_COLLISION_PRIORITY (1 << 6) +#define ClObj_FLAG_7 (1 << 7) + +#define ClObj_FLAG2_PLAYER_WAS_HIT (1 << 0) // 0x01 +#define ClObj_FLAG2_OCC_CHECK (1 << 1) // 0x02 +#define ClObj_FLAG2_TRIS_HIT (1 << 2) // 0x04 +#define ClObj_FLAG2_IS_PLAYER ClObj_GROUP_PLAYER +#define ClObj_FLAG2_IS_GROUP_2 ClObj_GROUP_2 +#define ClObj_FLAG2_IS_GROUP_3 ClObj_GROUP_3 + +#define ClObjElem_FLAG_CHECK (1 << 0) +#define ClObjElem_FLAG_HIT (1 << 1) #define ClObj_DID_COLLIDE(obj) ((obj).collision_flags0 & ClObj_FLAG_COLLIDED) diff --git a/src/actor/ac_lotus_move.c_inc b/src/actor/ac_lotus_move.c_inc index 44bfde40..608b89cb 100644 --- a/src/actor/ac_lotus_move.c_inc +++ b/src/actor/ac_lotus_move.c_inc @@ -13,7 +13,7 @@ static void aLOT_wait(STRUCTURE_ACTOR* actorx, GAME_PLAY* play) { lotus = (LOTUS_ACTOR*)actorx; comeback_status = mPlib_Check_UKI_COMEBACK_STATUS(); - if (comeback_status == FALSE && (pipeinfo.collision_obj.collision_flags0 & 2) != 0 && + if (comeback_status == FALSE && ClObj_DID_COLLIDE(pipeinfo.collision_obj) && pipeinfo.collision_obj.collided_actor != NULL && pipeinfo.collision_obj.collided_actor->id == mAc_PROFILE_UKI) { lotus->structure_class.keyframe.frame_control.speed = 2.0f; aLOT_setup_action(lotus, aLOT_ACTION_SHAKE); diff --git a/src/actor/npc/ac_npc2_think.c_inc b/src/actor/npc/ac_npc2_think.c_inc index 9589c108..d7aae9da 100644 --- a/src/actor/npc/ac_npc2_think.c_inc +++ b/src/actor/npc/ac_npc2_think.c_inc @@ -567,7 +567,7 @@ static int aNPC_avoid_obstacle(NPC_ACTOR* nactorx, GAME_PLAY* play) { if ((nactorx->think.interrupt_flags & aNPC_THINK_INTERRUPT_OBSTACLE) != 0) { if (ClObj_DID_COLLIDE(nactorx->collision.pipe.collision_obj)) { - if ((nactorx->collision.pipe.collision_obj.collision_flags1 & 1)) { + if ((nactorx->collision.pipe.collision_obj.collision_flags1 & ClObj_FLAG2_PLAYER_WAS_HIT)) { s16 d_angle = nactorx->actor_class.player_angle_y - nactorx->actor_class.shape_info.rotation.y; if (ABS(d_angle) < DEG2SHORT_ANGLE2(45.0f)) { diff --git a/src/actor/npc/ac_npc_shop_common.c b/src/actor/npc/ac_npc_shop_common.c index b29598ba..5808e8fb 100644 --- a/src/actor/npc/ac_npc_shop_common.c +++ b/src/actor/npc/ac_npc_shop_common.c @@ -691,7 +691,7 @@ static void aNSC_set_buy_sum_str(mActor_name_t item, u32 p2) { static int aNSC_decide_next_move_act(NPC_SHOP_COMMON_ACTOR* shop_common, GAME_PLAY* play) { int res; ACTOR* player; - if ((shop_common->npc_class.collision.pipe.collision_obj.collision_flags0 & 0x2) != 0) { + if (ClObj_DID_COLLIDE(shop_common->npc_class.collision.pipe.collision_obj)) { return aNSC_ACTION_WAIT; } else { player = GET_PLAYER_ACTOR_ACTOR(play); @@ -736,11 +736,11 @@ static int aNSC_decide_next_move_act(NPC_SHOP_COMMON_ACTOR* shop_common, GAME_PL if (player == NULL) { res = shop_common->action; - } else if ((shop_common->npc_class.collision.pipe.collision_obj.collision_flags0 & 0x2) != 0 && + } else if (ClObj_DID_COLLIDE(shop_common->npc_class.collision.pipe.collision_obj) && shop_common->npc_class.collision.pipe.collision_obj.collided_actor == player) { res = aNSC_ACTION_WAIT; } else if (talk_actor != NULL && talk_actor != (ACTOR*)shop_common && mDemo_Check_ListenAble() == TRUE && - ((shop_common->npc_class.collision.pipe.collision_obj.collision_flags0 & 2) != 0 || + (ClObj_DID_COLLIDE(shop_common->npc_class.collision.pipe.collision_obj) || shop_common->action == aNSC_ACTION_WAIT)) { res = aNSC_ACTION_WAIT; } else if (player->world.position.z < 120.0f && (shop_common->zone == 2 || shop_common->zone == 3)) { diff --git a/src/game/m_collision_obj.c b/src/game/m_collision_obj.c index be366b83..0164dc7f 100644 --- a/src/game/m_collision_obj.c +++ b/src/game/m_collision_obj.c @@ -1,38 +1,28 @@ #include "m_collision_obj.h" #include "m_actor.h" +#include McoWork mco_work; - -void CollisionCheck_workTrisElemCenter(ClObjTrisElem_c* tri, xyz_t* vec) -{ - +void CollisionCheck_workTrisElemCenter(ClObjTrisElem_c* tri, xyz_t* vec) { vec->x = (tri->attribute.tri.vtx[0].x + tri->attribute.tri.vtx[1].x + tri->attribute.tri.vtx[2].x) * (1.0f / 3.0f); - vec->y = (tri->attribute.tri.vtx[0].y + tri->attribute.tri.vtx[1].y + - tri->attribute.tri.vtx[2].y) * - (1.0f / 3.0f); - vec->z = (tri->attribute.tri.vtx[0].z + tri->attribute.tri.vtx[1].z + - tri->attribute.tri.vtx[2].z) * - (1.0f / 3.0f); + vec->y = (tri->attribute.tri.vtx[0].y + tri->attribute.tri.vtx[1].y + tri->attribute.tri.vtx[2].y) * (1.0f / 3.0f); + vec->z = (tri->attribute.tri.vtx[0].z + tri->attribute.tri.vtx[1].z + tri->attribute.tri.vtx[2].z) * (1.0f / 3.0f); } -int ClObj_ct(GAME* game, ClObj_c* cl) -{ - static ClObj_c clobj_default = {NULL, NULL, 0, 0, 3}; +int ClObj_ct(GAME* game, ClObj_c* cl) { + static ClObj_c clobj_default = { NULL, NULL, 0, 0, 3 }; *cl = clobj_default; return 1; } -int ClObj_dt(GAME*, ClObj_c*) -{ +int ClObj_dt(GAME*, ClObj_c*) { return 1; } -int ClObj_set4(GAME*, ClObj_c* cl, ACTOR* actor, ClObjData_c* data) -{ - +int ClObj_set4(GAME*, ClObj_c* cl, ACTOR* actor, ClObjData_c* data) { cl->owner_actor = actor; cl->collision_flags0 = data->collision_flags0; cl->collision_flags1 = data->collision_flags1; @@ -41,86 +31,68 @@ int ClObj_set4(GAME*, ClObj_c* cl, ACTOR* actor, ClObjData_c* data) return 1; } -void ClObj_OCClear(GAME *, ClObj_c* cl) -{ - - cl->collision_flags0 &= ~2; +void ClObj_OCClear(GAME*, ClObj_c* cl) { + cl->collision_flags0 &= ~ClObj_FLAG_COLLIDED; cl->collided_actor = NULL; - cl->collision_flags1 &= 0xFE; + cl->collision_flags1 &= ~ClObj_FLAG2_PLAYER_WAS_HIT; } -int ClObjElem_ct(ClObjElem_c* elem) -{ - +int ClObjElem_ct(ClObjElem_c* elem) { elem->flags = 0; return 1; } -int ClObjElem_set(ClObjElem_c* elem, ClObjElemData_c* data) -{ - +int ClObjElem_set(ClObjElem_c* elem, ClObjElemData_c* data) { elem->flags = data->flags; return 1; } -void ClObjElem_OCClear(GAME*, ClObjElem_c* elem) -{ - - elem->flags &= ~2; +void ClObjElem_OCClear(GAME*, ClObjElem_c* elem) { + elem->flags &= ~ClObjElem_FLAG_HIT; } -int ClObjJntSphElem_OCClear(GAME* game, ClObjJntSphElem_c* col) -{ +int ClObjJntSphElem_OCClear(GAME* game, ClObjJntSphElem_c* col) { GAME_PLAY* play = (GAME_PLAY*)game; ClObjElem_OCClear(game, &col->element); return 1; } -int ClObjJntSph_OCClear(GAME* game, ClObj_c* cl) -{ +int ClObjJntSph_OCClear(GAME* game, ClObj_c* cl) { GAME_PLAY* play = (GAME_PLAY*)game; ClObjJntSph_c* jntsph = (ClObjJntSph_c*)cl; ClObjJntSphElem_c* elem; ClObj_OCClear(game, &jntsph->collision_obj); - for (elem = jntsph->elements; elem < &jntsph->elements[jntsph->count]; elem++) - { + for (elem = jntsph->elements; elem < &jntsph->elements[jntsph->count]; elem++) { ClObjJntSphElem_OCClear(game, elem); } return 1; } -int ClObjPipeAttr_ct(GAME* game, ClObjPipeAttr_c* attribute) -{ - - static ClObjPipeAttr_c default_pipe_attr = {0, 0, 0}; +int ClObjPipeAttr_ct(GAME* game, ClObjPipeAttr_c* attribute) { + static ClObjPipeAttr_c default_pipe_attr = { 0, 0, 0 }; *attribute = default_pipe_attr; return 1; } -int ClObjPipeAttr_dt(GAME*, ClObjPipeAttr_c*) -{ - +int ClObjPipeAttr_dt(GAME*, ClObjPipeAttr_c*) { return 1; } -int ClObjPipeAttr_set(GAME* game, ClObjPipeAttr_c* dst, ClObjPipeAttr_c* src) -{ - +int ClObjPipeAttr_set(GAME* game, ClObjPipeAttr_c* dst, ClObjPipeAttr_c* src) { *dst = *src; return 1; } -int ClObjPipe_ct(GAME* game, ClObjPipe_c* pipe) -{ +int ClObjPipe_ct(GAME* game, ClObjPipe_c* pipe) { GAME_PLAY* play = (GAME_PLAY*)game; ClObj_ct(game, &pipe->collision_obj); ClObjElem_ct(&pipe->element); @@ -129,8 +101,7 @@ int ClObjPipe_ct(GAME* game, ClObjPipe_c* pipe) return 1; } -int ClObjPipe_dt(GAME* game, ClObjPipe_c* pipe) -{ +int ClObjPipe_dt(GAME* game, ClObjPipe_c* pipe) { GAME_PLAY* play = (GAME_PLAY*)game; ClObj_dt(game, &pipe->collision_obj); ClObjPipeAttr_dt(game, &pipe->attribute); @@ -138,20 +109,18 @@ int ClObjPipe_dt(GAME* game, ClObjPipe_c* pipe) return 1; } -int ClObjPipe_set5(GAME* game, ClObjPipe_c* pipe, ACTOR* owner, ClObjPipeData_c* data) -{ +int ClObjPipe_set5(GAME* game, ClObjPipe_c* pipe, ACTOR* owner, ClObjPipeData_c* data) { GAME_PLAY* play = (GAME_PLAY*)game; ClObj_set4(game, &pipe->collision_obj, owner, &data->collision_data); ClObjElem_set(&pipe->element, &data->element_data); - ClObjPipeAttr_set(game, &pipe->attribute, (ClObjPipeAttr_c *)&data->attribute_data); + ClObjPipeAttr_set(game, &pipe->attribute, (ClObjPipeAttr_c*)&data->attribute_data); return 1; } -int ClObjPipe_OCClear(GAME* game, ClObj_c* cl) -{ +int ClObjPipe_OCClear(GAME* game, ClObj_c* cl) { GAME_PLAY* play = (GAME_PLAY*)game; - ClObjPipe_c* pipe = (ClObjPipe_c *)cl; + ClObjPipe_c* pipe = (ClObjPipe_c*)cl; ClObj_OCClear(game, &pipe->collision_obj); ClObjElem_OCClear(game, &pipe->element); @@ -159,32 +128,25 @@ int ClObjPipe_OCClear(GAME* game, ClObj_c* cl) return 1; } -int ClObjTrisElemAttr_ct(GAME* game, ClObjTrisElemAttr_c *tris) -{ - - static ClObjTrisElemAttr_c default_clobjtriselem_attr = { - 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f}; +int ClObjTrisElemAttr_ct(GAME* game, ClObjTrisElemAttr_c* tris) { + static ClObjTrisElemAttr_c default_clobjtriselem_attr = { 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f }; *tris = default_clobjtriselem_attr; return 1; } -int ClObjTrisElemAttr_dt(GAME* game, ClObjTrisElemAttr_c *tris) -{ - +int ClObjTrisElemAttr_dt(GAME* game, ClObjTrisElemAttr_c* tris) { return 1; } -int ClObjTrisElemAttr_set(GAME* game, ClObjTrisElemAttr_c* tris, ClObjTrisElemAttrData_c* data) -{ - +int ClObjTrisElemAttr_set(GAME* game, ClObjTrisElemAttr_c* tris, ClObjTrisElemAttrData_c* data) { xyz_t* dst; xyz_t* src; f32 nox, noy, noz, odist; - for (dst = tris->tri.vtx, src = data->vtx; dst < &tris->tri.vtx[3]; dst++, src++) - { + for (dst = tris->tri.vtx, src = data->vtx; dst < &tris->tri.vtx[3]; dst++, src++) { *dst = *src; } @@ -197,8 +159,7 @@ int ClObjTrisElemAttr_set(GAME* game, ClObjTrisElemAttr_c* tris, ClObjTrisElemAt return 1; } -int ClObjTrisElem_ct(GAME* game, ClObjTrisElem_c* tris) -{ +int ClObjTrisElem_ct(GAME* game, ClObjTrisElem_c* tris) { GAME_PLAY* play = (GAME_PLAY*)game; ClObjElem_ct(&tris->element); ClObjTrisElemAttr_ct(game, &tris->attribute); @@ -206,16 +167,14 @@ int ClObjTrisElem_ct(GAME* game, ClObjTrisElem_c* tris) return 1; } -int ClObjTrisElem_dt(GAME* game, ClObjTrisElem_c* tris) -{ +int ClObjTrisElem_dt(GAME* game, ClObjTrisElem_c* tris) { GAME_PLAY* play = (GAME_PLAY*)game; ClObjTrisElemAttr_dt(game, &tris->attribute); return 1; } -int ClObjTrisElem_set(GAME* game, ClObjTrisElem_c* tris, ClObjTrisElemData_c* data) -{ +int ClObjTrisElem_set(GAME* game, ClObjTrisElem_c* tris, ClObjTrisElemData_c* data) { GAME_PLAY* play = (GAME_PLAY*)game; ClObjElem_set(&tris->element, &data->element); ClObjTrisElemAttr_set(game, &tris->attribute, &data->data); @@ -223,16 +182,14 @@ int ClObjTrisElem_set(GAME* game, ClObjTrisElem_c* tris, ClObjTrisElemData_c* da return 1; } -int ClObjTrisElem_OCClear(GAME* game, ClObjTrisElem_c* tris) -{ +int ClObjTrisElem_OCClear(GAME* game, ClObjTrisElem_c* tris) { GAME_PLAY* play = (GAME_PLAY*)game; ClObjElem_OCClear(game, &tris->element); return 1; } -int ClObjTris_ct(GAME* game, ClObjTris_c* tris) -{ +int ClObjTris_ct(GAME* game, ClObjTris_c* tris) { GAME_PLAY* play = (GAME_PLAY*)game; ClObj_ct(game, &tris->collision_obj); tris->count = 0; @@ -241,15 +198,13 @@ int ClObjTris_ct(GAME* game, ClObjTris_c* tris) return 1; } -int ClObjTris_dt_nzf(GAME* game, ClObjTris_c *tris) -{ +int ClObjTris_dt_nzf(GAME* game, ClObjTris_c* tris) { GAME_PLAY* play = (GAME_PLAY*)game; - ClObjTrisElem_c *element; + ClObjTrisElem_c* element; ClObj_dt(game, &tris->collision_obj); - for (element = tris->elements; element < &tris->elements[tris->count]; element++) - { + for (element = tris->elements; element < &tris->elements[tris->count]; element++) { ClObjTrisElem_dt(game, element); } tris->count = 0; @@ -258,9 +213,7 @@ int ClObjTris_dt_nzf(GAME* game, ClObjTris_c *tris) return 1; } -int ClObjTris_set5_nzm(GAME* game, ClObjTris_c* tris, ACTOR* actor, ClObjTrisData_c* data, - ClObjTrisElem_c *elem) -{ +int ClObjTris_set5_nzm(GAME* game, ClObjTris_c* tris, ACTOR* actor, ClObjTrisData_c* data, ClObjTrisElem_c* elem) { GAME_PLAY* play = (GAME_PLAY*)game; ClObjTrisElem_c* element; ClObjTrisElemData_c* elementData; @@ -270,9 +223,8 @@ int ClObjTris_set5_nzm(GAME* game, ClObjTris_c* tris, ACTOR* actor, ClObjTrisDat tris->count = data->count; tris->elements = elem; - for (element = tris->elements, elementData = data->elem_data; - element < &tris->elements[tris->count]; element++, elementData++) - { + for (element = tris->elements, elementData = data->elem_data; element < &tris->elements[tris->count]; + element++, elementData++) { ClObjTrisElem_ct(game, element); ClObjTrisElem_set(game, element, elementData); } @@ -280,103 +232,85 @@ int ClObjTris_set5_nzm(GAME* game, ClObjTris_c* tris, ACTOR* actor, ClObjTrisDat return 1; } -int ClObjTris_OCClear(GAME* game, ClObj_c* cl) -{ +int ClObjTris_OCClear(GAME* game, ClObj_c* cl) { GAME_PLAY* play = (GAME_PLAY*)game; ClObjTris_c* tris = (ClObjTris_c*)cl; ClObjTrisElem_c* element; - ClObj_OCClear(game, &tris->collision_obj); - for (element = tris->elements; element < &tris->elements[tris->count]; element++) - { + for (element = tris->elements; element < &tris->elements[tris->count]; element++) { ClObjTrisElem_OCClear(game, element); } return 1; } -void CollisionCheck_ct(GAME* game, CollisionCheck_c* col) -{ +void CollisionCheck_ct(GAME* game, CollisionCheck_c* col) { GAME_PLAY* play = (GAME_PLAY*)game; col->flags = 0; CollisionCheck_clear(game, col); } -void CollisionCheck_dt(GAME* game, CollisionCheck_c* col) -{ +void CollisionCheck_dt(GAME* game, CollisionCheck_c* col) { } -void CollisionCheck_clear(GAME* game, CollisionCheck_c* col) -{ - +void CollisionCheck_clear(GAME* game, CollisionCheck_c* col) { ClObj_c** clp; - if (col->flags & 1) - { + if (col->flags & CollisionCheck_FLAG_SKIP) { return; } col->collider_num = 0; - for (clp = col->collider_table; clp < &col->collider_table[Cl_COLLIDER_NUM]; clp++) - { + for (clp = col->collider_table; clp < &col->collider_table[Cl_COLLIDER_NUM]; clp++) { *clp = NULL; } mco_work.count = 0; - for (clp = mco_work.colliders; clp < &mco_work.colliders[10]; clp++) - { + for (clp = mco_work.colliders; clp < &mco_work.colliders[10]; clp++) { *clp = NULL; } } -CollisionClearFunction OCClearFunctionTable[ClObj_TYPE_NUM] = { - ClObjJntSph_OCClear,ClObjPipe_OCClear,ClObjTris_OCClear -}; +CollisionClearFunction OCClearFunctionTable[ClObj_TYPE_NUM] = { ClObjJntSph_OCClear, ClObjPipe_OCClear, + ClObjTris_OCClear }; CollisionOCFunction oc_collision_function[ClObj_TYPE_NUM][ClObj_TYPE_NUM] = { - {CollisionCheck_OC_JntSph_Vs_JntSph, CollisionCheck_OC_JntSph_Vs_Pipe, NULL}, - {CollisionCheck_OC_Pipe_Vs_JntSph, CollisionCheck_OC_Pipe_Vs_Pipe, NULL}, - {NULL, NULL, NULL}}; + { CollisionCheck_OC_JntSph_Vs_JntSph, CollisionCheck_OC_JntSph_Vs_Pipe, NULL }, + { CollisionCheck_OC_Pipe_Vs_JntSph, CollisionCheck_OC_Pipe_Vs_Pipe, NULL }, + { NULL, NULL, NULL } +}; CollisionOCFunction occ_collision_function[ClObj_TYPE_NUM][ClObj_TYPE_NUM] = { - {NULL, NULL, NULL}, - {NULL, NULL, NULL}, - {(CollisionOCFunction)CollisionCheck_OCC_Tris_Vs_JntSph, (CollisionOCFunction)CollisionCheck_OCC_Tris_Vs_Pipe, NULL} - }; + { NULL, NULL, NULL }, + { NULL, NULL, NULL }, + { (CollisionOCFunction)CollisionCheck_OCC_Tris_Vs_JntSph, (CollisionOCFunction)CollisionCheck_OCC_Tris_Vs_Pipe, + NULL } +}; -CollisionOCClear OCCClearFunctionTable[ClObj_TYPE_NUM] = { - NULL, NULL, ClObjTris_OCCClear}; +CollisionOCClear OCCClearFunctionTable[ClObj_TYPE_NUM] = { NULL, NULL, ClObjTris_OCCClear }; - -int CollisionCheck_setOC(GAME* game, CollisionCheck_c* col, ClObj_c* cl) -{ +int CollisionCheck_setOC(GAME* game, CollisionCheck_c* col, ClObj_c* cl) { GAME_PLAY* play = (GAME_PLAY*)game; int ret; - if (_Game_play_isPause(play) == 1) - { + if (_Game_play_isPause(play) == 1) { return -1; - } - else - { + } else { OCClearFunctionTable[cl->collision_type](game, cl); - if ((cl->owner_actor != NULL) && (cl->owner_actor->mv_proc == NULL)) - { + if ((cl->owner_actor != NULL) && (cl->owner_actor->mv_proc == NULL)) { return -1; } - if (col->collider_num >= Cl_COLLIDER_NUM) - { + if (col->collider_num >= Cl_COLLIDER_NUM) { return -1; } - if (col->flags & 1) - { + if (col->flags & CollisionCheck_FLAG_SKIP) { return -1; } @@ -388,16 +322,12 @@ int CollisionCheck_setOC(GAME* game, CollisionCheck_c* col, ClObj_c* cl) return ret; } -int get_type(u8 type) -{ - - if (type == MASSTYPE_IMMOVABLE) - { +int get_type(u8 type) { + if (type == MASSTYPE_IMMOVABLE) { return MASS_IMMOVABLE; } - if (type == MASSTYPE_HEAVY) - { + if (type == MASSTYPE_HEAVY) { return MASS_HEAVY; } @@ -405,9 +335,7 @@ int get_type(u8 type) } void CollisionCheck_setOC_HitInfo(ClObj_c* col1, ClObjElem_c* colelem1, xyz_t* pos1, ClObj_c* col2, - ClObjElem_c* colelem2, xyz_t* pos2, f32 diff) -{ - + ClObjElem_c* colelem2, xyz_t* pos2, f32 diff) { ACTOR* actor1; ACTOR* actor2; int type1; @@ -429,30 +357,26 @@ void CollisionCheck_setOC_HitInfo(ClObj_c* col1, ClObjElem_c* colelem1, xyz_t* p actor2 = col2->owner_actor; col1->collided_actor = actor2; - col1->collision_flags0 |= 2; - colelem1->flags |= 2; + col1->collision_flags0 |= ClObj_FLAG_COLLIDED; + colelem1->flags |= ClObjElem_FLAG_HIT; - if (col2->collision_flags1 & 8) - { - col1->collision_flags1 |= 1; + if (col2->collision_flags1 & ClObj_FLAG2_IS_PLAYER) { + col1->collision_flags1 |= ClObj_FLAG2_PLAYER_WAS_HIT; } col2->collided_actor = actor1; - col2->collision_flags0 |= 2; - colelem2->flags |= 2; + col2->collision_flags0 |= ClObj_FLAG_COLLIDED; + colelem2->flags |= ClObjElem_FLAG_HIT; - if (col1->collision_flags1 & 8) - { - col2->collision_flags1 |= 1; + if (col1->collision_flags1 & ClObj_FLAG2_IS_PLAYER) { + col2->collision_flags1 |= ClObj_FLAG2_PLAYER_WAS_HIT; } - if ((actor1 == NULL) || (actor2 == NULL)) - { + if ((actor1 == NULL) || (actor2 == NULL)) { return; } - if ((col1->collision_flags0 & 4) || (col2->collision_flags0 & 4)) - { + if ((col1->collision_flags0 & ClObj_FLAG_DONT_UPDATE_POS) || (col2->collision_flags0 & ClObj_FLAG_DONT_UPDATE_POS)) { return; } @@ -464,8 +388,7 @@ void CollisionCheck_setOC_HitInfo(ClObj_c* col1, ClObjElem_c* colelem1, xyz_t* p comweight = weight1 + weight2; - if (F32_IS_ZERO(comweight)) - { + if (F32_IS_ZERO(comweight)) { weight1 = weight2 = 1.0f; comweight = 2.0f; } @@ -477,63 +400,44 @@ void CollisionCheck_setOC_HitInfo(ClObj_c* col1, ClObjElem_c* colelem1, xyz_t* p xzdist = sqrtf((xdiff * xdiff) + (zdiff * zdiff)); - if (type1 == 0) - { - if (type2 == 0) - { + if (type1 == MASS_IMMOVABLE) { + if (type2 == MASS_IMMOVABLE) { return; } coldis1 = 0.0f; coldis2 = 1.0f; - } - else if (type1 == 1) - { - if (type2 == 0) - { + } else if (type1 == MASS_HEAVY) { + if (type2 == MASS_IMMOVABLE) { coldis1 = 1.0f; coldis2 = 0.0f; - } - else if (type2 == 1) - { + } else if (type2 == MASS_HEAVY) { coldis1 = 0.5f; coldis2 = 0.5f; - } - else - { + } else { coldis1 = 0.0f; coldis2 = 1.0f; } - } - else - { - if (type2 == 2) - { + } else { + if (type2 == MASS_NORMAL) { coldis1 = weight2 * minweight; coldis2 = weight1 * minweight; - } - else - { + } else { coldis1 = 1.0f; coldis2 = 0.0f; } } - if (col1->collision_flags0 & 0x40) - { + if (col1->collision_flags0 & ClObj_FLAG_COLLISION_PRIORITY) { coldis1 = 0.0f; coldis2 = 1.0f; actor2->speed = 0.0f; - } - else if (col2->collision_flags0 & 0x40) - { + } else if (col2->collision_flags0 & ClObj_FLAG_COLLISION_PRIORITY) { coldis1 = 1.0f; coldis2 = 0.0f; actor1->speed = 0.0f; } - if (!(F32_IS_ZERO(xzdist))) - { - + if (!(F32_IS_ZERO(xzdist))) { xdiff *= diff / xzdist; zdiff *= diff / xzdist; @@ -542,51 +446,33 @@ void CollisionCheck_setOC_HitInfo(ClObj_c* col1, ClObjElem_c* colelem1, xyz_t* p actor2->status_data.collision_vec.x += xdiff * coldis2; actor2->status_data.collision_vec.z += zdiff * coldis2; - } - else if (diff != 0) - { + } else if (diff != 0) { actor1->status_data.collision_vec.x += -diff * coldis1; actor2->status_data.collision_vec.x += diff * coldis2; - } - else - { + } else { actor1->status_data.collision_vec.x -= coldis1; actor2->status_data.collision_vec.x += coldis2; } } -void CollisionCheck_OC_JntSph_Vs_JntSph(GAME* game, CollisionCheck_c* check, ClObj_c* col1, - ClObj_c* col2) -{ - +void CollisionCheck_OC_JntSph_Vs_JntSph(GAME* game, CollisionCheck_c* check, ClObj_c* col1, ClObj_c* col2) { ClObjJntSph_c* jntsph1 = (ClObjJntSph_c*)col1; ClObjJntSph_c* jntsph2 = (ClObjJntSph_c*)col2; ClObjJntSphElem_c* elem1; ClObjJntSphElem_c* elem2; - if ((jntsph1->count <= 0) || (jntsph1->elements == NULL) || (jntsph2->count <= 0) || (jntsph2->elements == NULL)) - { + if ((jntsph1->count <= 0) || (jntsph1->elements == NULL) || (jntsph2->count <= 0) || (jntsph2->elements == NULL)) { return; } - for (elem1 = jntsph1->elements; elem1 < &jntsph1->elements[jntsph1->count]; elem1++) - { - - if ((elem1->element.flags & 1)) - { - - for (elem2 = jntsph2->elements; elem2 < &jntsph2->elements[jntsph2->count]; elem2++) - { - + for (elem1 = jntsph1->elements; elem1 < &jntsph1->elements[jntsph1->count]; elem1++) { + if ((elem1->element.flags & ClObjElem_FLAG_CHECK)) { + for (elem2 = jntsph2->elements; elem2 < &jntsph2->elements[jntsph2->count]; elem2++) { f32 in; - if ((elem2->element.flags & 1)) - { - - if (Math3D_sphereCrossSphere_cl(&elem1->attribute.s2, &elem2->attribute.s2, &in) == 1) - { - + if ((elem2->element.flags & ClObjElem_FLAG_CHECK)) { + if (Math3D_sphereCrossSphere_cl(&elem1->attribute.s2, &elem2->attribute.s2, &in) == 1) { xyz_t pos1; xyz_t pos2; @@ -601,10 +487,7 @@ void CollisionCheck_OC_JntSph_Vs_JntSph(GAME* game, CollisionCheck_c* check, ClO } } -void CollisionCheck_OC_JntSph_Vs_Pipe(GAME* game, CollisionCheck_c* check, ClObj_c* col1, - ClObj_c* col2) -{ - +void CollisionCheck_OC_JntSph_Vs_Pipe(GAME* game, CollisionCheck_c* check, ClObj_c* col1, ClObj_c* col2) { ClObjJntSph_c* jntsph = (ClObjJntSph_c*)col1; ClObjPipe_c* pipe = (ClObjPipe_c*)col2; ClObjJntSphElem_c* elem; @@ -612,145 +495,112 @@ void CollisionCheck_OC_JntSph_Vs_Pipe(GAME* game, CollisionCheck_c* check, ClObj xyz_t sphpos; xyz_t pipepos; - if ((jntsph->count > 0) && (jntsph->elements) != NULL) - { - - if (!(jntsph->collision_obj.collision_flags0 & 1) || !(pipe->collision_obj.collision_flags0 & 1) || - !(pipe->element.flags & 1)) - { + if ((jntsph->count > 0) && (jntsph->elements) != NULL) { + if (!(jntsph->collision_obj.collision_flags0 & ClObj_FLAG_CHECK) || !(pipe->collision_obj.collision_flags0 & ClObj_FLAG_CHECK) || + !(pipe->element.flags & ClObjElem_FLAG_CHECK)) { return; } - for (elem = jntsph->elements; elem < &jntsph->elements[jntsph->count]; elem++) - { - - if (!(elem->element.flags & 1)) - { + for (elem = jntsph->elements; elem < &jntsph->elements[jntsph->count]; elem++) { + if (!(elem->element.flags & ClObjElem_FLAG_CHECK)) { continue; } - if (Math3D_sphereVsPipe_cl(&elem->attribute.s2, &pipe->attribute.pipe, &in) == 1) - { - + if (Math3D_sphereVsPipe_cl(&elem->attribute.s2, &pipe->attribute.pipe, &in) == 1) { xyz_t_move_s_xyz(&sphpos, &elem->attribute.s2.center); xyz_t_move_s_xyz(&pipepos, &pipe->attribute.pipe.center); - CollisionCheck_setOC_HitInfo(&jntsph->collision_obj, &elem->element, &sphpos, - &pipe->collision_obj, &pipe->element, &pipepos, in); + CollisionCheck_setOC_HitInfo(&jntsph->collision_obj, &elem->element, &sphpos, &pipe->collision_obj, + &pipe->element, &pipepos, in); } } } } -void CollisionCheck_OC_Pipe_Vs_JntSph(GAME* game, CollisionCheck_c* colcheck, ClObj_c* col1, - ClObj_c* col2) -{ +void CollisionCheck_OC_Pipe_Vs_JntSph(GAME* game, CollisionCheck_c* colcheck, ClObj_c* col1, ClObj_c* col2) { GAME_PLAY* play = (GAME_PLAY*)game; CollisionCheck_OC_JntSph_Vs_Pipe(game, colcheck, col2, col1); } -void CollisionCheck_OC_Pipe_Vs_Pipe(GAME* game, CollisionCheck_c* colcheck, ClObj_c* col1, - ClObj_c* col2) -{ - +void CollisionCheck_OC_Pipe_Vs_Pipe(GAME* game, CollisionCheck_c* colcheck, ClObj_c* col1, ClObj_c* col2) { ClObjPipe_c* pipe1 = (ClObjPipe_c*)col1; ClObjPipe_c* pipe2 = (ClObjPipe_c*)col2; f32 in; xyz_t pipepos1; xyz_t pipepos2; - if (!(pipe1->collision_obj.collision_flags0 & 1) || !(pipe2->collision_obj.collision_flags0 & 1) || !(pipe1->element.flags & 1) || !(pipe2->element.flags & 1)) - { + if (!(pipe1->collision_obj.collision_flags0 & ClObj_FLAG_CHECK) || !(pipe2->collision_obj.collision_flags0 & ClObj_FLAG_CHECK) || + !(pipe1->element.flags & ClObjElem_FLAG_CHECK) || !(pipe2->element.flags & ClObjElem_FLAG_CHECK)) { return; } - if (Math3D_pipeVsPipe_cl(&pipe1->attribute.pipe, &pipe2->attribute.pipe, &in) != 1) - { + if (Math3D_pipeVsPipe_cl(&pipe1->attribute.pipe, &pipe2->attribute.pipe, &in) != 1) { return; } xyz_t_move_s_xyz(&pipepos1, &pipe1->attribute.pipe.center); xyz_t_move_s_xyz(&pipepos2, &pipe2->attribute.pipe.center); - CollisionCheck_setOC_HitInfo(&pipe1->collision_obj, &pipe1->element, &pipepos1, - &pipe2->collision_obj, &pipe2->element, &pipepos2, in); + CollisionCheck_setOC_HitInfo(&pipe1->collision_obj, &pipe1->element, &pipepos1, &pipe2->collision_obj, + &pipe2->element, &pipepos2, in); } -int CollisionCheck_Check1ClObjNoOC(ClObj_c* col) -{ - - return col->collision_flags0 & 1 ^ 1; +int CollisionCheck_Check1ClObjNoOC(ClObj_c* col) { + return col->collision_flags0 & ClObj_FLAG_CHECK ^ ClObj_FLAG_CHECK; } -int CollisionCheck_Check2ClObjNoOC(ClObj_c* col1, ClObj_c* col2) -{ - - if (!(col1->collision_flags0 & col2->collision_flags1 & 0x38) || - !(col1->collision_flags1 & col2->collision_flags0 & 0x38)) - { +int CollisionCheck_Check2ClObjNoOC(ClObj_c* col1, ClObj_c* col2) { + if (!(col1->collision_flags0 & col2->collision_flags1 & ClObj_GROUP_ALL) || + !(col1->collision_flags1 & col2->collision_flags0 & ClObj_GROUP_ALL)) { return 1; } - if (col1->owner_actor == col2->owner_actor) - { + if (col1->owner_actor == col2->owner_actor) { return 1; } return 0; } - - -void CollisionCheck_OC(GAME* game, CollisionCheck_c* colcheck) -{ +void CollisionCheck_OC(GAME* game, CollisionCheck_c* colcheck) { GAME_PLAY* play = (GAME_PLAY*)game; ClObj_c** col1p; ClObj_c** col2p; CollisionOCFunction current; - for (col1p = colcheck->collider_table; col1p < &colcheck->collider_table[colcheck->collider_num]; col1p++) - { - - if (((*col1p) == NULL) || (CollisionCheck_Check1ClObjNoOC(*col1p) == 1)) - { + for (col1p = colcheck->collider_table; col1p < &colcheck->collider_table[colcheck->collider_num]; col1p++) { + if (((*col1p) == NULL) || (CollisionCheck_Check1ClObjNoOC(*col1p) == 1)) { continue; } - for (col2p = col1p + 1; col2p < &colcheck->collider_table[colcheck->collider_num]; col2p++) - { - + for (col2p = col1p + 1; col2p < &colcheck->collider_table[colcheck->collider_num]; col2p++) { if ((*col2p == NULL) || (CollisionCheck_Check1ClObjNoOC(*col2p) == 1) || - (CollisionCheck_Check2ClObjNoOC(*col1p, *col2p) == 1)) - { + (CollisionCheck_Check2ClObjNoOC(*col1p, *col2p) == 1)) { continue; } current = oc_collision_function[(*col1p)->collision_type][(*col2p)->collision_type]; - if (current == NULL) - { + if (current == NULL) { continue; } current(game, colcheck, *col1p, *col2p); } } + CollisionCheck_OCC(game, colcheck); } -void CollisionCheck_setOCC_HitInfo(GAME* game, ClObj_c* col1, ClObjTrisElem_c* elem1, xyz_t* pos1, - ClObj_c* col2, ClObjElem_c* elem2, xyz_t* pos2, xyz_t* pos3) -{ - +void CollisionCheck_setOCC_HitInfo(GAME* game, ClObj_c* col1, ClObjTrisElem_c* elem1, xyz_t* pos1, ClObj_c* col2, + ClObjElem_c* elem2, xyz_t* pos2, xyz_t* pos3) { col1->collided_actor = col2->owner_actor; - col1->collision_flags1 |= 4; + col1->collision_flags1 |= ClObj_FLAG2_TRIS_HIT; elem1->attribute.t.x = pos3->x; elem1->attribute.t.y = pos3->y; elem1->attribute.t.z = pos3->z; } - void CollisionCheck_OCC_Tris_Vs_JntSph(GAME* game, CollisionCheck_c* colcheck, ClObjTris_c* tris, - ClObjJntSph_c* jntsph) -{ + ClObjJntSph_c* jntsph) { GAME_PLAY* play = (GAME_PLAY*)game; ClObjTrisElem_c* triselem; ClObjJntSphElem_c* jntsphelem; @@ -758,110 +608,78 @@ void CollisionCheck_OCC_Tris_Vs_JntSph(GAME* game, CollisionCheck_c* colcheck, C xyz_t sphpos; xyz_t trispos; - if ((tris->count <= 0) || (tris->elements == NULL) || - (jntsph->count <= 0) || (jntsph->elements == NULL)) - { + if ((tris->count <= 0) || (tris->elements == NULL) || (jntsph->count <= 0) || (jntsph->elements == NULL)) { return; } - for (jntsphelem = jntsph->elements; jntsphelem < &jntsph->elements[jntsph->count]; jntsphelem++) - { - - if ((jntsphelem->element.flags & 1)) - { - - for (triselem = tris->elements; triselem < &tris->elements[tris->count]; triselem++) - { - - if (Math3D_sphereCrossTriangle3_cp(&jntsphelem->attribute.s2, &triselem->attribute.tri, &pos) != 0) - { - + for (jntsphelem = jntsph->elements; jntsphelem < &jntsph->elements[jntsph->count]; jntsphelem++) { + if ((jntsphelem->element.flags & ClObjElem_FLAG_CHECK)) { + for (triselem = tris->elements; triselem < &tris->elements[tris->count]; triselem++) { + if (Math3D_sphereCrossTriangle3_cp(&jntsphelem->attribute.s2, &triselem->attribute.tri, &pos) != 0) { xyz_t_move_s_xyz(&sphpos, &jntsphelem->attribute.s2.center); CollisionCheck_workTrisElemCenter(triselem, &trispos); - CollisionCheck_setOCC_HitInfo(game, &tris->collision_obj, triselem, &trispos, &jntsph->collision_obj, &jntsphelem->element, - &sphpos, &pos); + CollisionCheck_setOCC_HitInfo(game, &tris->collision_obj, triselem, &trispos, + &jntsph->collision_obj, &jntsphelem->element, &sphpos, &pos); } } } } } - -void CollisionCheck_OCC_Tris_Vs_Pipe(GAME* game, CollisionCheck_c* colcheck, ClObjTris_c* tris, ClObjPipe_c* pipe) -{ +void CollisionCheck_OCC_Tris_Vs_Pipe(GAME* game, CollisionCheck_c* colcheck, ClObjTris_c* tris, ClObjPipe_c* pipe) { GAME_PLAY* play = (GAME_PLAY*)game; ClObjTrisElem_c* triselem; xyz_t pos; xyz_t pipepos; xyz_t trispos; - if ((pipe->attribute.pipe.radius > 0) && (pipe->attribute.pipe.height > 0) && (pipe->element.flags & 1)) - { - - if ((tris->count <= 0) || (tris->elements == NULL)) - { + if ((pipe->attribute.pipe.radius > 0) && (pipe->attribute.pipe.height > 0) && (pipe->element.flags & ClObjElem_FLAG_CHECK)) { + if ((tris->count <= 0) || (tris->elements == NULL)) { return; } - for (triselem = tris->elements; triselem < &tris->elements[tris->count]; triselem++) - { - - if (Math3D_pipeCrossTriangle_cp(&pipe->attribute.pipe, &triselem->attribute.tri, &pos) != 0) - { - + for (triselem = tris->elements; triselem < &tris->elements[tris->count]; triselem++) { + if (Math3D_pipeCrossTriangle_cp(&pipe->attribute.pipe, &triselem->attribute.tri, &pos) != 0) { CollisionCheck_workTrisElemCenter(triselem, &trispos); xyz_t_move_s_xyz(&pipepos, &pipe->attribute.pipe.center); - CollisionCheck_setOCC_HitInfo(game, &tris->collision_obj, triselem, &trispos, &pipe->collision_obj, &pipe->element, &pipepos, &pos); + CollisionCheck_setOCC_HitInfo(game, &tris->collision_obj, triselem, &trispos, &pipe->collision_obj, + &pipe->element, &pipepos, &pos); break; } } } } -int CollisionCheck_Check1ClObjNoOCC(ClObj_c* col) -{ - - return col->collision_flags1 >> 1 & 1 ^ 1; +int CollisionCheck_Check1ClObjNoOCC(ClObj_c* col) { + return (col->collision_flags1 & ClObj_FLAG2_OCC_CHECK) >> 1 ^ 1; } -void CollisionCheck_OCC(GAME* game, CollisionCheck_c* colcheck) -{ - - +void CollisionCheck_OCC(GAME* game, CollisionCheck_c* colcheck) { ClObj_c** col1p; ClObj_c** col2p; CollisionOCFunction current; - if (mco_work.count == 0) - { + if (mco_work.count == 0) { return; } - for (col1p = mco_work.colliders; col1p < &mco_work.colliders[mco_work.count]; col1p++) - { - - if (((*col1p) == NULL) || (CollisionCheck_Check1ClObjNoOCC(*col1p) == 1)) - { + for (col1p = mco_work.colliders; col1p < &mco_work.colliders[mco_work.count]; col1p++) { + if (((*col1p) == NULL) || (CollisionCheck_Check1ClObjNoOCC(*col1p) == 1)) { continue; } - for (col2p = colcheck->collider_table; col2p < &colcheck->collider_table[colcheck->collider_num]; col2p++) - { - - if ((*col2p) == NULL) - { + for (col2p = colcheck->collider_table; col2p < &colcheck->collider_table[colcheck->collider_num]; col2p++) { + if ((*col2p) == NULL) { continue; } - if ((*col1p)->owner_actor == (*col2p)->owner_actor) - { + if ((*col1p)->owner_actor == (*col2p)->owner_actor) { continue; } current = occ_collision_function[(*col1p)->collision_type][(*col2p)->collision_type]; - if (current == NULL) - { + if (current == NULL) { continue; } @@ -870,73 +688,54 @@ void CollisionCheck_OCC(GAME* game, CollisionCheck_c* colcheck) } } -int ClObjTrisElem_OCCClear(GAME* game, ClObjTrisElem_c* triselem) -{ - +int ClObjTrisElem_OCCClear(GAME* game, ClObjTrisElem_c* triselem) { triselem->attribute.t.x = 0.0f; triselem->attribute.t.y = 0.0f; triselem->attribute.t.z = 0.0f; return 1; } -int ClObj_OCCClear(GAME* game, ClObj_c* col) -{ - +int ClObj_OCCClear(GAME* game, ClObj_c* col) { col->collided_actor = NULL; - col->collision_flags1 &= ~4; + col->collision_flags1 &= ~ClObj_FLAG_DONT_UPDATE_POS; } -int ClObjTris_OCCClear(GAME* game, ClObj_c* col) -{ - +int ClObjTris_OCCClear(GAME* game, ClObj_c* col) { ClObjTris_c* tris = (ClObjTris_c*)col; ClObjTrisElem_c* triselem; ClObj_OCCClear(game, &tris->collision_obj); - for (triselem = tris->elements; triselem < &tris->elements[tris->count]; triselem++) - { - + for (triselem = tris->elements; triselem < &tris->elements[tris->count]; triselem++) { ClObjTrisElem_OCCClear(game, triselem); } return 1; } -int CollisionCheck_setOCC(GAME* game, CollisionCheck_c* colcheck, ClObj_c* col) -{ +int CollisionCheck_setOCC(GAME* game, CollisionCheck_c* colcheck, ClObj_c* col) { GAME_PLAY* play = (GAME_PLAY*)game; int ret; - if (_Game_play_isPause(play) == 1) - { - + if (_Game_play_isPause(play) == 1) { return -1; } - if ((col->collision_type == 0) || (col->collision_type == 1)) - { - + if ((col->collision_type == ClObj_TYPE_JNT_SPH) || (col->collision_type == ClObj_TYPE_PIPE)) { return -1; } OCCClearFunctionTable[col->collision_type](game, col); - if ((col->owner_actor != NULL) && (col->owner_actor->mv_proc == NULL)) - { - + if ((col->owner_actor != NULL) && (col->owner_actor->mv_proc == NULL)) { return -1; } - if (mco_work.count >= 10) - { - + if (mco_work.count >= 10) { return -1; } - if (colcheck->flags & 1) - { - + if (colcheck->flags & CollisionCheck_FLAG_SKIP) { return -1; } @@ -947,17 +746,13 @@ int CollisionCheck_setOCC(GAME* game, CollisionCheck_c* colcheck, ClObj_c* col) return ret; } -void CollisionCheck_Status_ct(Status_c* status) -{ - - static Status_c status_org = {{0.0f, 0.0f, 0.0f}, 10, 10, 0, 50, 8, 0, 0, 0}; +void CollisionCheck_Status_ct(Status_c* status) { + static Status_c status_org = { { 0.0f, 0.0f, 0.0f }, 10, 10, 0, 50, 8, 0, 0, 0 }; *status = status_org; } -void CollisionCheck_Status_Clear(Status_c* status) -{ - +void CollisionCheck_Status_Clear(Status_c* status) { status->damage = 0; status->damage_effect = 0; status->at_hit_effect = 0; @@ -967,9 +762,7 @@ void CollisionCheck_Status_Clear(Status_c* status) status->collision_vec.x = 0.0f; } -void CollisionCheck_Status_set3(Status_c* status, StatusData_c* data) -{ - +void CollisionCheck_Status_set3(Status_c* status, StatusData_c* data) { status->hp = data->health; status->radius = data->radius; status->height = data->height; @@ -977,10 +770,8 @@ void CollisionCheck_Status_set3(Status_c* status, StatusData_c* data) status->weight = data->weight; } -int CollisionCheck_Uty_ActorWorldPosSetPipeC(ACTOR* actor, ClObjPipe_c* pipe) -{ - +int CollisionCheck_Uty_ActorWorldPosSetPipeC(ACTOR* actor, ClObjPipe_c* pipe) { pipe->attribute.pipe.center.x = actor->world.position.x; pipe->attribute.pipe.center.y = actor->world.position.y; pipe->attribute.pipe.center.z = actor->world.position.z; -} \ No newline at end of file +} diff --git a/src/game/m_player_common.c_inc b/src/game/m_player_common.c_inc index 5e3c3b90..efcd25cc 100644 --- a/src/game/m_player_common.c_inc +++ b/src/game/m_player_common.c_inc @@ -2045,14 +2045,14 @@ static int Player_actor_Check_OBJtoLine_forItem_axe(ACTOR* actorx) { PLAYER_ACTOR* player = (PLAYER_ACTOR*)actorx; ClObjTris_c* axe_tris_p = &player->item_axe_tris; - return axe_tris_p->collision_obj.collision_flags1 & (1 << 2); + return axe_tris_p->collision_obj.collision_flags1 & ClObj_FLAG2_TRIS_HIT; } static int Player_actor_Check_OBJtoLine_forItem_net(ACTOR* actorx, ACTOR** hit_actor) { PLAYER_ACTOR* player = (PLAYER_ACTOR*)actorx; ClObjTris_c* net_tris_p = &player->item_net_tris; - if ((net_tris_p->collision_obj.collision_flags1 & (1 << 2)) == 0) { + if ((net_tris_p->collision_obj.collision_flags1 & ClObj_FLAG2_TRIS_HIT) == 0) { *hit_actor = NULL; return FALSE; } else {