mirror of
https://github.com/ACreTeam/ac-decomp
synced 2026-05-29 16:14:59 -04:00
Add flags for collision object/collision check
This commit is contained in:
@@ -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)
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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)) {
|
||||
|
||||
@@ -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)) {
|
||||
|
||||
+181
-390
File diff suppressed because it is too large
Load Diff
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user