From cb216876d9ee2322c06bc1e1840addd352dde721 Mon Sep 17 00:00:00 2001 From: Cuyler36 Date: Thu, 15 May 2025 22:32:23 -0400 Subject: [PATCH] Cleanup ac_halloween_npc --- include/Famicom/famicom.h | 2 +- include/ac_halloween_npc.h | 61 ++++--- src/actor/npc/ac_halloween_npc.c | 54 +++---- src/actor/npc/ac_halloween_npc_move.c_inc | 2 +- src/actor/npc/ac_halloween_npc_schedule.c_inc | 74 ++++----- src/actor/npc/ac_halloween_npc_talk.c_inc | 153 +++++++++--------- 6 files changed, 183 insertions(+), 163 deletions(-) diff --git a/include/Famicom/famicom.h b/include/Famicom/famicom.h index 4ce4c198..6c38d482 100644 --- a/include/Famicom/famicom.h +++ b/include/Famicom/famicom.h @@ -187,7 +187,7 @@ extern u8 ics_bad; extern FamicomCommon famicomCommon; -typedef s32 (*FAMICOM_GETSAVECHAN_PROC)(int* player_no, s32* slot_card_result); +typedef int (*FAMICOM_GETSAVECHAN_PROC)(int* player_no, s32* slot_card_result); extern int famicom_getErrorChan(); extern void famicom_setCallback_getSaveChan(FAMICOM_GETSAVECHAN_PROC proc); diff --git a/include/ac_halloween_npc.h b/include/ac_halloween_npc.h index b7484a48..bbdc933d 100644 --- a/include/ac_halloween_npc.h +++ b/include/ac_halloween_npc.h @@ -9,38 +9,54 @@ extern "C" { #endif -typedef struct halloween_npc_s NPC_HALLOWEEN_ACTOR; +typedef struct halloween_npc_s HALLOWEEN_NPC_ACTOR; + +typedef void (*aHWN_TALK_PROC)(HALLOWEEN_NPC_ACTOR*, GAME_PLAY*); +typedef void (*aHWN_THINK_PROC)(HALLOWEEN_NPC_ACTOR*, GAME_PLAY*); -typedef void (*aHWN_TALK_PROC)(NPC_HALLOWEEN_ACTOR*, GAME_PLAY*); -// has to be _P because a function is already defined as aHWN_think_proc -typedef void (*aHWN_THINK_PROC_P)(NPC_ACTOR*, GAME_PLAY*); /* sizeof(halloween_npc_s) == 0x9AC*/ struct halloween_npc_s { /* 0x000 */ NPC_ACTOR npc_class; /* 0x994 */ int dt_tbl_idx; - /* 0x998 */ aHWN_THINK_PROC_P think_proc; + /* 0x998 */ aHWN_THINK_PROC think_proc; /* 0x99C */ int _99C; /* 0x9A0 */ aHWN_TALK_PROC talk_proc; /* 0x9A4 */ mActor_name_t item; - /* 0x9A8 */ BOOL _9A0; -}; -enum { - aHWN_TALK_FIRST_CALL_TALK_PROC, // 0 - aHWN_TALK_TRICK_OR_TREAT_TALK_PROC, // 1 - aHWN_TALK_MENU_OPEN_WAIT_TALK_PROC, // 2 - aHWN_TALK_MENU_CLOSE_WAIT_TALK_PROC, // 3 - aHWN_TALK_GET_OTHER_ITEM_WAIT_TALK_PROC, // 4 - aHWN_TALK_RECEIVE_TOOL_ITEM_START_WAIT_TALK_PROC, // 5 - aHWN_TALK_RECEIVE_TOOL_ITEM_END_WAIT_TALK_PROC, // 6 - aHWN_TALK_TRICK_TIMING_WAIT_TALK_PROC, // 7 - aHWN_TALK_TRICK_CHG_CLOTH_TALK_PROC, // 8 - aHWN_TALK_TRICK_CHG_CLOTH_END_WAIT_TALK_PROC, // 9 - aHWN_TALK_GET_AME_WAIT_TALK_PROC, // 10 - aHWN_TALK_GET_AME_TALK_PROC, // 11 - aHWN_TALK_PL_DEMO_CODE_END_WAIT_TALK_PROC, // 12 - aHWN_TALK_NONE_PROC1, // 13 + /* 0x9A8 */ BOOL wait_think_done; }; +enum { + aHWN_TALK_FIRST_CALL_TALK, // 0 + aHWN_TALK_TRICK_OR_TREAT_TALK, // 1 + aHWN_TALK_MENU_OPEN_WAIT_TALK, // 2 + aHWN_TALK_MENU_CLOSE_WAIT_TALK, // 3 + aHWN_TALK_GET_OTHER_ITEM_WAIT_TALK, // 4 + aHWN_TALK_RECEIVE_TOOL_ITEM_START_WAIT_TALK, // 5 + aHWN_TALK_RECEIVE_TOOL_ITEM_END_WAIT_TALK, // 6 + aHWN_TALK_TRICK_TIMING_WAIT_TALK, // 7 + aHWN_TALK_TRICK_CHG_CLOTH_TALK, // 8 + aHWN_TALK_TRICK_CHG_CLOTH_END_WAIT_TALK, // 9 + aHWN_TALK_GET_AME_WAIT_TALK, // 10 + aHWN_TALK_GET_AME_TALK, // 11 + aHWN_TALK_PL_DEMO_CODE_END_WAIT_TALK, // 12 + aHWN_TALK_END_WAIT, // 13 + + aHWN_TALK_NUM +}; + +enum { + aHWN_THINK_APPROACH, + aHWN_THINK_APPROACH_WAIT, + + aHWN_THINK_NUM +}; + +enum { + aHWN_TRICK_TYPE_CHG_CLOTH, + aHWN_TRICK_TYPE_CHG_ITEM, + + aHWN_TRICK_TYPE_NUM +}; extern ACTOR_PROFILE Halloween_Npc_Profile; @@ -49,4 +65,3 @@ extern ACTOR_PROFILE Halloween_Npc_Profile; #endif #endif - diff --git a/src/actor/npc/ac_halloween_npc.c b/src/actor/npc/ac_halloween_npc.c index e3866fe8..87627a5a 100644 --- a/src/actor/npc/ac_halloween_npc.c +++ b/src/actor/npc/ac_halloween_npc.c @@ -30,40 +30,40 @@ static void aHWN_actor_save(ACTOR* actorx, GAME* game); static void aHWN_actor_init(ACTOR* actorx, GAME* game); static void aHWN_actor_draw(ACTOR* actorx, GAME* game); -static BOOL aHWN_set_request_act(NPC_HALLOWEEN_ACTOR* actorx, u8 prio, u8 idx, u8 type, u16 obj, s16 move_x, +static BOOL aHWN_set_request_act(HALLOWEEN_NPC_ACTOR* actorx, u8 prio, u8 idx, u8 type, u16 obj, s16 move_x, s16 move_z); static void aHWN_actor_move(ACTOR* actorx, GAME* game); static int aHWN_get_trick_type(); -static void aHWN_restart_msg_win(NPC_HALLOWEEN_ACTOR* actorx, int msg_idx); -static void aHWN_first_call_talk_proc(NPC_HALLOWEEN_ACTOR* actorx, GAME_PLAY* play); -static void aHWN_trick_or_treat_talk_proc(NPC_HALLOWEEN_ACTOR* actorx, GAME_PLAY* play); -static void aHWN_menu_open_wait_talk_proc(NPC_HALLOWEEN_ACTOR* actorx, GAME_PLAY* play); -static void aHWN_menu_close_wait_talk_proc(NPC_HALLOWEEN_ACTOR* actorx, GAME_PLAY* play); -static void aHWN_get_other_item_wait_talk_proc(NPC_HALLOWEEN_ACTOR* actorx, GAME_PLAY* play); -static void aHWN_receive_tool_item_start_wait_talk_proc(NPC_HALLOWEEN_ACTOR* actorx, GAME_PLAY* play); -static void aHWN_receive_tool_item_end_wait_talk_proc(NPC_HALLOWEEN_ACTOR* actorx, GAME_PLAY* play); -static void aHWN_trick_timing_wait_talk_proc(NPC_HALLOWEEN_ACTOR* actorx, GAME_PLAY* play); -static void aHWN_trick_chg_cloth_talk_proc(NPC_HALLOWEEN_ACTOR* actorx, GAME_PLAY* play); -static void aHWN_trick_chg_cloth_end_wait_talk_proc(NPC_HALLOWEEN_ACTOR* actorx, GAME_PLAY* play); -static void aHWN_get_ame_wait_talk_proc(NPC_HALLOWEEN_ACTOR* actorx, GAME_PLAY* play); -static void aHWN_get_ame_talk_proc(NPC_HALLOWEEN_ACTOR* actorx, GAME_PLAY* play); -static void aHWN_pl_demo_code_end_wait_talk_proc(NPC_HALLOWEEN_ACTOR* actorx, GAME_PLAY* play); -static void aHWN_change_talk_proc(NPC_HALLOWEEN_ACTOR* actorx, int talk_proc_idx); +static void aHWN_restart_msg_win(HALLOWEEN_NPC_ACTOR* actorx, int msg_idx); +static void aHWN_first_call_talk_proc(HALLOWEEN_NPC_ACTOR* actorx, GAME_PLAY* play); +static void aHWN_trick_or_treat_talk_proc(HALLOWEEN_NPC_ACTOR* actorx, GAME_PLAY* play); +static void aHWN_menu_open_wait_talk_proc(HALLOWEEN_NPC_ACTOR* actorx, GAME_PLAY* play); +static void aHWN_menu_close_wait_talk_proc(HALLOWEEN_NPC_ACTOR* actorx, GAME_PLAY* play); +static void aHWN_get_other_item_wait_talk_proc(HALLOWEEN_NPC_ACTOR* actorx, GAME_PLAY* play); +static void aHWN_receive_tool_item_start_wait_talk_proc(HALLOWEEN_NPC_ACTOR* actorx, GAME_PLAY* play); +static void aHWN_receive_tool_item_end_wait_talk_proc(HALLOWEEN_NPC_ACTOR* actorx, GAME_PLAY* play); +static void aHWN_trick_timing_wait_talk_proc(HALLOWEEN_NPC_ACTOR* actorx, GAME_PLAY* play); +static void aHWN_trick_chg_cloth_talk_proc(HALLOWEEN_NPC_ACTOR* actorx, GAME_PLAY* play); +static void aHWN_trick_chg_cloth_end_wait_talk_proc(HALLOWEEN_NPC_ACTOR* actorx, GAME_PLAY* play); +static void aHWN_get_ame_wait_talk_proc(HALLOWEEN_NPC_ACTOR* actorx, GAME_PLAY* play); +static void aHWN_get_ame_talk_proc(HALLOWEEN_NPC_ACTOR* actorx, GAME_PLAY* play); +static void aHWN_pl_demo_code_end_wait_talk_proc(HALLOWEEN_NPC_ACTOR* actorx, GAME_PLAY* play); +static void aHWN_change_talk_proc(HALLOWEEN_NPC_ACTOR* actorx, int talk_proc_idx); static void aHWN_set_force_talk_info(ACTOR* actorx); static void aHWN_force_talk_request(ACTOR* actorx, GAME* game); -static void aHWN_set_norm_talk_info(NPC_HALLOWEEN_ACTOR* actorx); -static void aHWN_norm_talk_request(NPC_HALLOWEEN_ACTOR* actorx); +static void aHWN_set_norm_talk_info(HALLOWEEN_NPC_ACTOR* actorx); +static void aHWN_norm_talk_request(ACTOR* actorx, GAME* game); static int aHWN_talk_init(); static BOOL aHWN_talk_end_chk(ACTOR* actorx, GAME* game); -static void aHWN_approach(NPC_ACTOR* actorx, GAME_PLAY* play); -static void aHWN_approach_wait(NPC_ACTOR* actorx, GAME_PLAY* play); -static void aHWN_think_main_proc(NPC_ACTOR* actorx, GAME_PLAY* playe); +static void aHWN_approach(HALLOWEEN_NPC_ACTOR* hwn_actor, GAME_PLAY* play); +static void aHWN_approach_wait(HALLOWEEN_NPC_ACTOR* hwn_actor, GAME_PLAY* play); +static void aHWN_think_main_proc(NPC_ACTOR* actorx, GAME_PLAY* play); static void aHWN_think_init_proc(NPC_ACTOR* actorx, GAME_PLAY* play); -static void aHWN_approach_init(NPC_ACTOR* actorx, GAME_PLAY* play); -static void aHWN_approach_wait_init(NPC_ACTOR* actorx, GAME_PLAY* play); -static void aHWN_setup_think_proc(ACTOR* actorx, GAME* game, int dt_tbl_idx); +static void aHWN_approach_init(HALLOWEEN_NPC_ACTOR* hwn_actor, GAME_PLAY* play); +static void aHWN_approach_wait_init(HALLOWEEN_NPC_ACTOR* hwn_actor, GAME_PLAY* play); +static void aHWN_setup_think_proc(HALLOWEEN_NPC_ACTOR* hwn_actor, GAME_PLAY* play, int dt_tbl_idx); static void aHWN_think_proc(NPC_ACTOR* actorx, GAME_PLAY* play, int think_proc_idx); static void aHWN_schedule_think_init(NPC_ACTOR* actorx, GAME_PLAY* play); static void aHWN_schedule_init_proc(NPC_ACTOR* actorx, GAME_PLAY* play); @@ -75,9 +75,9 @@ ACTOR_PROFILE Halloween_Npc_Profile = { mAc_PROFILE_HALLOWEEN_NPC, ACTOR_PART_NPC, ACTOR_STATE_NONE, - 0, + EMPTY_NO, ACTOR_OBJ_BANK_KEEP, - sizeof(NPC_HALLOWEEN_ACTOR), + sizeof(HALLOWEEN_NPC_ACTOR), aHWN_actor_ct, aHWN_actor_dt, aHWN_actor_init, @@ -98,7 +98,7 @@ static void aHWN_actor_ct(ACTOR* actorx, GAME* game) { 0, }; // clang-format on - NPC_HALLOWEEN_ACTOR* hwn_actor = (NPC_HALLOWEEN_ACTOR*)actorx; + HALLOWEEN_NPC_ACTOR* hwn_actor = (HALLOWEEN_NPC_ACTOR*)actorx; if (NPC_CLIP->birth_check_proc(actorx, game) == TRUE) { hwn_actor->npc_class.schedule.schedule_proc = &aHWN_schedule_proc; NPC_CLIP->ct_proc(actorx, game, &ct_data); diff --git a/src/actor/npc/ac_halloween_npc_move.c_inc b/src/actor/npc/ac_halloween_npc_move.c_inc index ea1af053..663e255e 100644 --- a/src/actor/npc/ac_halloween_npc_move.c_inc +++ b/src/actor/npc/ac_halloween_npc_move.c_inc @@ -1,4 +1,4 @@ -static BOOL aHWN_set_request_act(NPC_HALLOWEEN_ACTOR* actorx, u8 prio, u8 idx, u8 type, u16 obj, s16 move_x, +static BOOL aHWN_set_request_act(HALLOWEEN_NPC_ACTOR* actorx, u8 prio, u8 idx, u8 type, u16 obj, s16 move_x, s16 move_z) { BOOL res = FALSE; if (prio >= actorx->npc_class.request.act_priority) { diff --git a/src/actor/npc/ac_halloween_npc_schedule.c_inc b/src/actor/npc/ac_halloween_npc_schedule.c_inc index 845ca6e1..61967ed8 100644 --- a/src/actor/npc/ac_halloween_npc_schedule.c_inc +++ b/src/actor/npc/ac_halloween_npc_schedule.c_inc @@ -1,57 +1,56 @@ -static void aHWN_approach(NPC_ACTOR* actorx, GAME_PLAY* play) { - NPC_HALLOWEEN_ACTOR* hwn_actor = (NPC_HALLOWEEN_ACTOR*)actorx; +static void aHWN_approach(HALLOWEEN_NPC_ACTOR* hwn_actor, GAME_PLAY* play) { ACTOR* talk_actor = mDemo_Get_talk_actor(); - if ((talk_actor != NULL && talk_actor != &actorx->actor_class) || + + if ((talk_actor != NULL && talk_actor != (ACTOR*)hwn_actor) || (hwn_actor->npc_class.actor_class.block_x != play->block_table.block_x || hwn_actor->npc_class.actor_class.block_z != play->block_table.block_z)) { - aHWN_setup_think_proc(&actorx->actor_class, &play->game, 1); + aHWN_setup_think_proc(hwn_actor, play, aHWN_THINK_APPROACH_WAIT); } else if (hwn_actor->npc_class.action.step == aNPC_ACTION_END_STEP) { - aHWN_setup_think_proc(&actorx->actor_class, &play->game, 0); + aHWN_setup_think_proc(hwn_actor, play, aHWN_THINK_APPROACH); } } -static void aHWN_approach_wait(NPC_ACTOR* actorx, GAME_PLAY* play) { - NPC_HALLOWEEN_ACTOR* hwn_actor = (NPC_HALLOWEEN_ACTOR*)actorx; - if (((mDemo_Get_talk_actor() == 0) && (hwn_actor->npc_class.actor_class.block_x == (play->block_table).block_x)) && +static void aHWN_approach_wait(HALLOWEEN_NPC_ACTOR* hwn_actor, GAME_PLAY* play) { + if (((mDemo_Get_talk_actor() == NULL) && + (hwn_actor->npc_class.actor_class.block_x == (play->block_table).block_x)) && (hwn_actor->npc_class.actor_class.block_z == (play->block_table).block_z)) { - aHWN_setup_think_proc(&actorx->actor_class, &play->game, 0); + aHWN_setup_think_proc(hwn_actor, play, aHWN_THINK_APPROACH); } else if (hwn_actor->npc_class.action.step == aNPC_ACTION_END_STEP) { - aHWN_setup_think_proc(&actorx->actor_class, &play->game, 1); + aHWN_setup_think_proc(hwn_actor, play, aHWN_THINK_APPROACH_WAIT); } } static void aHWN_think_main_proc(NPC_ACTOR* actorx, GAME_PLAY* play) { - NPC_HALLOWEEN_ACTOR* hwn_actor = (NPC_HALLOWEEN_ACTOR*)actorx; - hwn_actor->think_proc(actorx, play); + HALLOWEEN_NPC_ACTOR* hwn_actor = (HALLOWEEN_NPC_ACTOR*)actorx; + + hwn_actor->think_proc(hwn_actor, play); } -static void aHWN_think_init_proc(NPC_ACTOR* actorx, GAME_PLAY* play) { - NPC_HALLOWEEN_ACTOR* hwn_actor = (NPC_HALLOWEEN_ACTOR*)actorx; - aHWN_setup_think_proc(&actorx->actor_class, &play->game, 0); +static void aHWN_think_init_proc(NPC_ACTOR* nactorx, GAME_PLAY* play) { + HALLOWEEN_NPC_ACTOR* hwn_actor = (HALLOWEEN_NPC_ACTOR*)nactorx; + + aHWN_setup_think_proc(hwn_actor, play, aHWN_THINK_APPROACH); hwn_actor->npc_class.condition_info.hide_request = 0; hwn_actor->npc_class.think.interrupt_flags = aNPC_THINK_INTERRUPT_ENTRANCE | aNPC_THINK_INTERRUPT_OBSTACLE; hwn_actor->npc_class.condition_info.demo_flg = aNPC_COND_DEMO_SKIP_MOVE_CIRCLE_REV; } -static void aHWN_approach_init(NPC_ACTOR* actorx, GAME_PLAY* play) { - aHWN_set_request_act((NPC_HALLOWEEN_ACTOR*)actorx, 4, aNPC_ACT_RUN, aNPC_ACT_TYPE_SEARCH, aNPC_ACT_OBJ_PLAYER, 0, - 0); +static void aHWN_approach_init(HALLOWEEN_NPC_ACTOR* hwn_actor, GAME_PLAY* play) { + aHWN_set_request_act(hwn_actor, 4, aNPC_ACT_RUN, aNPC_ACT_TYPE_SEARCH, aNPC_ACT_OBJ_PLAYER, 0, 0); } -static void aHWN_approach_wait_init(NPC_ACTOR* actorx, GAME_PLAY* play) { - aHWN_set_request_act((NPC_HALLOWEEN_ACTOR*)actorx, 4, aNPC_ACT_WAIT, aNPC_ACT_TYPE_SEARCH, aNPC_ACT_OBJ_PLAYER, 0, - 0); +static void aHWN_approach_wait_init(HALLOWEEN_NPC_ACTOR* hwn_actor, GAME_PLAY* play) { + aHWN_set_request_act(hwn_actor, 4, aNPC_ACT_WAIT, aNPC_ACT_TYPE_SEARCH, aNPC_ACT_OBJ_PLAYER, 0, 0); } typedef struct { - aHWN_THINK_PROC_P approach_proc; - aHWN_THINK_PROC_P approach_init_proc; + aHWN_THINK_PROC approach_proc; + aHWN_THINK_PROC approach_init_proc; aNPC_TALK_REQUEST_PROC talk_request_proc; u8 unk; } aHWN_talk_data_c; -static void aHWN_setup_think_proc(ACTOR* actorx, GAME* game, int dt_tbl_idx) { - NPC_HALLOWEEN_ACTOR* hwn_actor = (NPC_HALLOWEEN_ACTOR*)actorx; +static void aHWN_setup_think_proc(HALLOWEEN_NPC_ACTOR* hwn_actor, GAME_PLAY* play, int dt_tbl_idx) { aHWN_talk_data_c* data; // clang-format off static aHWN_talk_data_c dt_tbl[] = { @@ -65,21 +64,23 @@ static void aHWN_setup_think_proc(ACTOR* actorx, GAME* game, int dt_tbl_idx) { hwn_actor->think_proc = data->approach_proc; hwn_actor->npc_class.talk_info.talk_request_proc = data->talk_request_proc; hwn_actor->_99C = data->unk; - data->approach_init_proc((NPC_ACTOR*)actorx, (GAME_PLAY*)game); + data->approach_init_proc(hwn_actor, play); } static void aHWN_think_proc(NPC_ACTOR* actorx, GAME_PLAY* play, int think_proc_idx) { - static aHWN_THINK_PROC_P think_proc[] = { aHWN_think_init_proc, aHWN_think_main_proc }; + static aNPC_SUB_PROC think_proc[] = { aHWN_think_init_proc, aHWN_think_main_proc }; think_proc[think_proc_idx](actorx, play); } static void aHWN_schedule_think_init(NPC_ACTOR* actorx, GAME_PLAY* play) { - static int think_idx[] = { 5, 9, 1 }; - NPC_CLIP->think_proc(actorx, play, think_idx[actorx->schedule.step], 0); + static int think_idx[] = { aNPC_THINK_LEAVE_HOUSE, aNPC_THINK_SPECIAL, aNPC_THINK_WANDER }; + + NPC_CLIP->think_proc(actorx, play, think_idx[actorx->schedule.step], aNPC_THINK_TYPE_INIT); } static void aHWN_schedule_init_proc(NPC_ACTOR* actorx, GAME_PLAY* play) { int step = 1; + actorx->think.think_proc = aHWN_think_proc; if (actorx->npc_info.animal->is_home == TRUE) { step = 0; @@ -89,32 +90,33 @@ static void aHWN_schedule_init_proc(NPC_ACTOR* actorx, GAME_PLAY* play) { } static void aHWN_schedule_main_proc(NPC_ACTOR* actorx, GAME_PLAY* play) { - NPC_HALLOWEEN_ACTOR* hwn_actor = (NPC_HALLOWEEN_ACTOR*)actorx; + HALLOWEEN_NPC_ACTOR* hwn_actor = (HALLOWEEN_NPC_ACTOR*)actorx; if (actorx->think.end_flag == TRUE) { if (actorx->schedule.step != 2) { actorx->schedule.step += 1; } aHWN_schedule_think_init(actorx, play); - } else if (hwn_actor->_9A0 == TRUE) { - if (NPC_CLIP->think_proc(actorx, play, -1, 1) == 0) { + } else if (hwn_actor->wait_think_done == TRUE) { + if (NPC_CLIP->think_proc(actorx, play, -1, aNPC_THINK_TYPE_CHK_INTERRUPT) == FALSE) { if (actorx->action.step == aNPC_ACTION_END_STEP) { - hwn_actor->_9A0 = FALSE; + hwn_actor->wait_think_done = FALSE; aHWN_schedule_think_init(actorx, play); } } else { actorx->request.act_priority = 4; } } else { - if (NPC_CLIP->think_proc(actorx, play, -1, 1) == 0) { - NPC_CLIP->think_proc(actorx, play, -1, 2); + if (NPC_CLIP->think_proc(actorx, play, -1, aNPC_THINK_TYPE_CHK_INTERRUPT) == FALSE) { + NPC_CLIP->think_proc(actorx, play, -1, aNPC_THINK_TYPE_MAIN); } else { actorx->request.act_priority = 4; - hwn_actor->_9A0 = TRUE; + hwn_actor->wait_think_done = TRUE; } } } static void aHWN_schedule_proc(NPC_ACTOR* actorx, GAME_PLAY* play, int sche_proc_idx) { static aNPC_SUB_PROC sche_proc[] = { aHWN_schedule_init_proc, aHWN_schedule_main_proc }; + sche_proc[sche_proc_idx](actorx, play); } diff --git a/src/actor/npc/ac_halloween_npc_talk.c_inc b/src/actor/npc/ac_halloween_npc_talk.c_inc index 297dfbf4..954e3ba7 100644 --- a/src/actor/npc/ac_halloween_npc_talk.c_inc +++ b/src/actor/npc/ac_halloween_npc_talk.c_inc @@ -3,7 +3,7 @@ static int aHWN_get_trick_type(void) { int idx[mPr_POCKETS_SLOT_COUNT]; mActor_name_t* pockets_p = Now_Private->inventory.pockets; int i; - int ret = 0; // trick type enum/define + int ret = aHWN_TRICK_TYPE_CHG_CLOTH; for (i = 0; i < mPr_POCKETS_SLOT_COUNT; i++) { switch (ITEM_NAME_GET_TYPE(*pockets_p)) { @@ -35,55 +35,53 @@ static int aHWN_get_trick_type(void) { mSP_SelectRandomItem_New(NULL, &new_item, 1, NULL, 0, mSP_KIND_FURNITURE, mSP_LISTTYPE_HALLOWEEN2, FALSE); mPr_SetPossessionItem(Now_Private, idx[RANDOM(count)], new_item, mPr_ITEM_COND_NORMAL); mDemo_Set_OrderValue(mDemo_ORDER_PLAYER, 0, 0xFD); // play trick animation - ret = 1; + ret = aHWN_TRICK_TYPE_CHG_ITEM; } return ret; } -static void aHWN_restart_msg_win(NPC_HALLOWEEN_ACTOR* actorx, int msg_idx) { - int msg_data; +static void aHWN_restart_msg_win(HALLOWEEN_NPC_ACTOR* actorx, int msg_idx) { mMsg_Window_c* msg_p = mMsg_Get_base_window_p(); - int look = mNpc_GetLooks(actorx->npc_class.npc_info.event->npc_id); + int looks = mNpc_GetLooks(actorx->npc_class.npc_info.event->npc_id); mMsg_request_main_appear_wait_type1(msg_p); - mMsg_ChangeMsgData(msg_p, ((look & 0xFF) * 6 + msg_idx)); + mMsg_ChangeMsgData(msg_p, msg_idx + looks * 6); mMsg_Set_ForceNext(msg_p); mMsg_Unset_LockContinue(msg_p); } -static void aHWN_first_call_talk_proc(NPC_HALLOWEEN_ACTOR* actorx, GAME_PLAY* play) { - int look = mNpc_GetLooks(actorx->npc_class.npc_info.event->npc_id); - mMsg_Window_c* msg_p = mMsg_Get_base_window_p(); - mMsg_Set_continue_msg_num(msg_p, ((look & 0xFF) * 6) + 0x98b); - aHWN_change_talk_proc(actorx, aHWN_TALK_TRICK_OR_TREAT_TALK_PROC); +static void aHWN_first_call_talk_proc(HALLOWEEN_NPC_ACTOR* actorx, GAME_PLAY* play) { + int looks = mNpc_GetLooks(actorx->npc_class.npc_info.event->npc_id); + mMsg_SET_CONTINUE_MSG_NUM(0x098B + looks * 6); + aHWN_change_talk_proc(actorx, aHWN_TALK_TRICK_OR_TREAT_TALK); } -static void aHWN_trick_or_treat_talk_proc(NPC_HALLOWEEN_ACTOR* actorx, GAME_PLAY* play) { +static void aHWN_trick_or_treat_talk_proc(HALLOWEEN_NPC_ACTOR* actorx, GAME_PLAY* play) { int talk_proc_idx; mMsg_Window_c* msg_p = mMsg_Get_base_window_p(); int order_value = mDemo_Get_OrderValue(mDemo_ORDER_NPC0, 9); if (order_value && mMsg_Check_MainNormalContinue(msg_p) == TRUE) { - if (mChoice_GET_CHOSENUM() == 0) { + if (mChoice_GET_CHOSENUM() == mChoice_CHOICE0) { mMsg_request_main_disappear_wait_type1(msg_p); - talk_proc_idx = aHWN_TALK_MENU_OPEN_WAIT_TALK_PROC; + talk_proc_idx = aHWN_TALK_MENU_OPEN_WAIT_TALK; } else { - talk_proc_idx = aHWN_TALK_TRICK_TIMING_WAIT_TALK_PROC; + talk_proc_idx = aHWN_TALK_TRICK_TIMING_WAIT_TALK; } aHWN_change_talk_proc(actorx, talk_proc_idx); mDemo_Set_OrderValue(mDemo_ORDER_NPC0, 9, 0); } } -static void aHWN_menu_open_wait_talk_proc(NPC_HALLOWEEN_ACTOR* actorx, GAME_PLAY* play) { +static void aHWN_menu_open_wait_talk_proc(HALLOWEEN_NPC_ACTOR* actorx, GAME_PLAY* play) { mMsg_Window_c* msg_p = mMsg_Get_base_window_p(); if (mMsg_Check_main_wait(msg_p) == TRUE) { mSM_open_submenu(&play->submenu, mSM_OVL_INVENTORY, 6, 0); mMsg_Set_LockContinue(msg_p); - aHWN_change_talk_proc(actorx, aHWN_TALK_MENU_CLOSE_WAIT_TALK_PROC); + aHWN_change_talk_proc(actorx, aHWN_TALK_MENU_CLOSE_WAIT_TALK); } } -static void aHWN_menu_close_wait_talk_proc(NPC_HALLOWEEN_ACTOR* actor, GAME_PLAY* play) { +static void aHWN_menu_close_wait_talk_proc(HALLOWEEN_NPC_ACTOR* actor, GAME_PLAY* play) { Submenu_Item_c* item_p; int talk_proc_idx; BOOL shouldSetPosessionItem; @@ -95,64 +93,62 @@ static void aHWN_menu_close_wait_talk_proc(NPC_HALLOWEEN_ACTOR* actor, GAME_PLAY item = item_p->item; actor->item = item; if (item == EMPTY_NO) { - talk_proc_idx = aHWN_TALK_TRICK_TIMING_WAIT_TALK_PROC; - aHWN_restart_msg_win(actor, 0x98c); + talk_proc_idx = aHWN_TALK_TRICK_TIMING_WAIT_TALK; + aHWN_restart_msg_win(actor, 0x098C); shouldSetPosessionItem = FALSE; } else if (item != ITM_FOOD_CANDY) { if ((item >= ITM_NET && item <= ITM_ROD) || (item >= ITM_GOLDEN_NET && item <= ITM_GOLDEN_ROD)) { shouldSetPosessionItem = FALSE; } - talk_proc_idx = aHWN_TALK_GET_OTHER_ITEM_WAIT_TALK_PROC; + talk_proc_idx = aHWN_TALK_GET_OTHER_ITEM_WAIT_TALK; mDemo_Set_OrderValue(mDemo_ORDER_NPC0, 1, 3); } else { - talk_proc_idx = aHWN_TALK_GET_AME_WAIT_TALK_PROC; - aHWN_restart_msg_win(actor, 0x98f); + talk_proc_idx = aHWN_TALK_GET_AME_WAIT_TALK; + aHWN_restart_msg_win(actor, 0x098F); } if (shouldSetPosessionItem == TRUE) { - mPr_SetPossessionItem(Now_Private, item_p->slot_no, 0, 0); + mPr_SetPossessionItem(Now_Private, item_p->slot_no, EMPTY_NO, mPr_ITEM_COND_NORMAL); } aHWN_change_talk_proc(actor, talk_proc_idx); } } -static void aHWN_get_other_item_wait_talk_proc(NPC_HALLOWEEN_ACTOR* actorx, GAME_PLAY* play) { +static void aHWN_get_other_item_wait_talk_proc(HALLOWEEN_NPC_ACTOR* actorx, GAME_PLAY* play) { mActor_name_t item; int talk_proc_idx; int msg_idx; - if (CLIP(handOverItem_clip)->master_actor == 0) { + if (CLIP(handOverItem_clip)->master_actor == NULL) { item = actorx->item; - talk_proc_idx = aHWN_TALK_TRICK_TIMING_WAIT_TALK_PROC; - msg_idx = 0x98e; + talk_proc_idx = aHWN_TALK_TRICK_TIMING_WAIT_TALK; + msg_idx = 0x098E; if ((item >= ITM_NET && item <= ITM_ROD) || (item >= ITM_GOLDEN_NET && item <= ITM_GOLDEN_ROD)) { mDemo_Set_OrderValue(mDemo_ORDER_NPC0, 1, 0); - msg_idx = 0x990; - talk_proc_idx = aHWN_TALK_RECEIVE_TOOL_ITEM_START_WAIT_TALK_PROC; + msg_idx = 0x0990; + talk_proc_idx = aHWN_TALK_RECEIVE_TOOL_ITEM_START_WAIT_TALK; } aHWN_restart_msg_win(actorx, msg_idx); aHWN_change_talk_proc(actorx, talk_proc_idx); } } -static void aHWN_receive_tool_item_start_wait_talk_proc(NPC_HALLOWEEN_ACTOR* actorx, GAME_PLAY* play) { +static void aHWN_receive_tool_item_start_wait_talk_proc(HALLOWEEN_NPC_ACTOR* actorx, GAME_PLAY* play) { int OrderValue = mDemo_Get_OrderValue(mDemo_ORDER_NPC0, 1); if (OrderValue == 2) { - mDemo_Set_OrderValue(mDemo_ORDER_NPC1, 0, actorx->item); - mDemo_Set_OrderValue(mDemo_ORDER_NPC1, 1, 7); - mDemo_Set_OrderValue(mDemo_ORDER_NPC1, 2, 0); + aNPC_DEMO_GIVE_ITEM(actorx->item, aHOI_REQUEST_PUTAWAY, FALSE); mMsg_SET_LOCKCONTINUE(); - aHWN_change_talk_proc(actorx, aHWN_TALK_RECEIVE_TOOL_ITEM_END_WAIT_TALK_PROC); + aHWN_change_talk_proc(actorx, aHWN_TALK_RECEIVE_TOOL_ITEM_END_WAIT_TALK); } } -static void aHWN_receive_tool_item_end_wait_talk_proc(NPC_HALLOWEEN_ACTOR* actorx, GAME_PLAY* play) { +static void aHWN_receive_tool_item_end_wait_talk_proc(HALLOWEEN_NPC_ACTOR* actorx, GAME_PLAY* play) { int OrderValue = mDemo_Get_OrderValue(mDemo_ORDER_NPC0, 1); - if ((OrderValue == 0) && (CLIP(handOverItem_clip)->master_actor == 0)) { + if ((OrderValue == 0) && (CLIP(handOverItem_clip)->master_actor == NULL)) { mMsg_UNSET_LOCKCONTINUE(); - aHWN_change_talk_proc(actorx, aHWN_TALK_TRICK_TIMING_WAIT_TALK_PROC); + aHWN_change_talk_proc(actorx, aHWN_TALK_TRICK_TIMING_WAIT_TALK); } } -static void aHWN_trick_timing_wait_talk_proc(NPC_HALLOWEEN_ACTOR* actorx, GAME_PLAY* play) { +static void aHWN_trick_timing_wait_talk_proc(HALLOWEEN_NPC_ACTOR* actorx, GAME_PLAY* play) { int trick_type; int talk_proc_idx; int OrderValue = mDemo_Get_OrderValue(mDemo_ORDER_NPC0, 9); @@ -160,9 +156,9 @@ static void aHWN_trick_timing_wait_talk_proc(NPC_HALLOWEEN_ACTOR* actorx, GAME_P if (OrderValue != 0) { msg_p = mMsg_Get_base_window_p(); trick_type = aHWN_get_trick_type(); - talk_proc_idx = aHWN_TALK_PL_DEMO_CODE_END_WAIT_TALK_PROC; - if (trick_type == 0) { - talk_proc_idx = aHWN_TALK_TRICK_CHG_CLOTH_TALK_PROC; + talk_proc_idx = aHWN_TALK_PL_DEMO_CODE_END_WAIT_TALK; + if (trick_type == aHWN_TRICK_TYPE_CHG_CLOTH) { + talk_proc_idx = aHWN_TALK_TRICK_CHG_CLOTH_TALK; } mMsg_Set_LockContinue(msg_p); aHWN_change_talk_proc(actorx, talk_proc_idx); @@ -170,59 +166,61 @@ static void aHWN_trick_timing_wait_talk_proc(NPC_HALLOWEEN_ACTOR* actorx, GAME_P } } -static void aHWN_trick_chg_cloth_talk_proc(NPC_HALLOWEEN_ACTOR* actorx, GAME_PLAY* play) { +static void aHWN_trick_chg_cloth_talk_proc(HALLOWEEN_NPC_ACTOR* actorx, GAME_PLAY* play) { int player_actor_main_index = mPlib_get_player_actor_main_index(&play->game); if (player_actor_main_index == mPlayer_INDEX_CHANGE_CLOTH) { - aHWN_change_talk_proc(actorx, aHWN_TALK_TRICK_CHG_CLOTH_END_WAIT_TALK_PROC); + aHWN_change_talk_proc(actorx, aHWN_TALK_TRICK_CHG_CLOTH_END_WAIT_TALK); } else { - mPlib_request_main_change_cloth_forNPC_type1(&play->game, ITM_CLOTH017, 0x11, 0); + mPlib_request_main_change_cloth_forNPC_type1(&play->game, ITM_CLOTH017, 17, 0); } } -static void aHWN_trick_chg_cloth_end_wait_talk_proc(NPC_HALLOWEEN_ACTOR* actorx, GAME_PLAY* play) { +static void aHWN_trick_chg_cloth_end_wait_talk_proc(HALLOWEEN_NPC_ACTOR* actorx, GAME_PLAY* play) { mMsg_Window_c* msg_p; int looks; int player_actor_main_index = mPlib_get_player_actor_main_index(&play->game); + if (player_actor_main_index != mPlayer_INDEX_CHANGE_CLOTH) { msg_p = mMsg_Get_base_window_p(); looks = mNpc_GetLooks(actorx->npc_class.npc_info.event->npc_id); mMsg_Unset_LockContinue(msg_p); mMsg_Set_ForceNext(msg_p); - mMsg_ChangeMsgData(msg_p, (looks * 6 + 0x98d)); - aHWN_change_talk_proc(actorx, aHWN_TALK_NONE_PROC1); + mMsg_ChangeMsgData(msg_p, 0x098D + looks * 6); + aHWN_change_talk_proc(actorx, aHWN_TALK_END_WAIT); } } -static void aHWN_get_ame_wait_talk_proc(NPC_HALLOWEEN_ACTOR* actorx, GAME_PLAY* play) { +static void aHWN_get_ame_wait_talk_proc(HALLOWEEN_NPC_ACTOR* actorx, GAME_PLAY* play) { int OrderValue = mDemo_Get_OrderValue(mDemo_ORDER_NPC0, 1); - if ((OrderValue == 3) && (CLIP(handOverItem_clip)->master_actor != 0)) { + if ((OrderValue == 3) && (CLIP(handOverItem_clip)->master_actor != NULL)) { mMsg_SET_LOCKCONTINUE(); - aHWN_change_talk_proc(actorx, aHWN_TALK_GET_AME_TALK_PROC); + aHWN_change_talk_proc(actorx, aHWN_TALK_GET_AME_TALK); } } -static void aHWN_get_ame_talk_proc(NPC_HALLOWEEN_ACTOR* actorx, GAME_PLAY* play) { +static void aHWN_get_ame_talk_proc(HALLOWEEN_NPC_ACTOR* actorx, GAME_PLAY* play) { if (CLIP(handOverItem_clip)->master_actor == 0) { mMsg_UNSET_LOCKCONTINUE(); - aHWN_change_talk_proc(actorx, aHWN_TALK_NONE_PROC1); + aHWN_change_talk_proc(actorx, aHWN_TALK_END_WAIT); } } -static void aHWN_pl_demo_code_end_wait_talk_proc(NPC_HALLOWEEN_ACTOR* actorx, GAME_PLAY* play) { +static void aHWN_pl_demo_code_end_wait_talk_proc(HALLOWEEN_NPC_ACTOR* actorx, GAME_PLAY* play) { mMsg_Window_c* msg_p; - int look; - int OrderValue = mDemo_Get_OrderValue(mDemo_ORDER_PLAYER, 0); - if (OrderValue == 0) { + int looks; + int order = mDemo_Get_OrderValue(mDemo_ORDER_PLAYER, 0); + + if (order == 0) { msg_p = mMsg_Get_base_window_p(); - look = mNpc_GetLooks(actorx->npc_class.npc_info.event->npc_id); + looks = mNpc_GetLooks(actorx->npc_class.npc_info.event->npc_id); mMsg_Unset_LockContinue(msg_p); mMsg_Set_ForceNext(msg_p); - mMsg_ChangeMsgData(msg_p, ((look & 0xFF) * 6 + 0x98d)); - aHWN_change_talk_proc(actorx, aHWN_TALK_NONE_PROC1); + mMsg_ChangeMsgData(msg_p, 0x098D + looks * 6); + aHWN_change_talk_proc(actorx, aHWN_TALK_END_WAIT); } } -static void aHWN_change_talk_proc(NPC_HALLOWEEN_ACTOR* actorx, int talk_proc_idx) { +static void aHWN_change_talk_proc(HALLOWEEN_NPC_ACTOR* actorx, int talk_proc_idx) { // clang-format off static aHWN_TALK_PROC talk_proc[] = { &aHWN_first_call_talk_proc, @@ -245,9 +243,11 @@ static void aHWN_change_talk_proc(NPC_HALLOWEEN_ACTOR* actorx, int talk_proc_idx } static void aHWN_set_force_talk_info(ACTOR* actorx) { - mDemo_Set_msg_num(0x98a); - mDemo_Set_talk_turn(1); - aHWN_change_talk_proc((NPC_HALLOWEEN_ACTOR*)actorx, aHWN_TALK_FIRST_CALL_TALK_PROC); + HALLOWEEN_NPC_ACTOR* hwn_actor = (HALLOWEEN_NPC_ACTOR*)actorx; + + mDemo_Set_msg_num(0x098A); + mDemo_Set_talk_turn(TRUE); + aHWN_change_talk_proc(hwn_actor, aHWN_TALK_FIRST_CALL_TALK); } static void aHWN_force_talk_request(ACTOR* actorx, GAME* game) { @@ -270,32 +270,35 @@ static void aHWN_force_talk_request(ACTOR* actorx, GAME* game) { } } -static void aHWN_set_norm_talk_info(NPC_HALLOWEEN_ACTOR* actorx) { +static void aHWN_set_norm_talk_info(HALLOWEEN_NPC_ACTOR* actorx) { int looks = mNpc_GetLooks(actorx->npc_class.npc_info.event->npc_id); - mDemo_Set_msg_num((looks & 0xFF) + 0x9af); - aHWN_change_talk_proc(actorx, aHWN_TALK_NONE_PROC1); + + mDemo_Set_msg_num(0x09AF + looks); + aHWN_change_talk_proc(actorx, aHWN_TALK_END_WAIT); } -static void aHWN_norm_talk_request(NPC_HALLOWEEN_ACTOR* actorx) { - mDemo_Request(mDemo_TYPE_TALK, &actorx->npc_class.actor_class, (mDemo_REQUEST_PROC)aHWN_set_norm_talk_info); +static void aHWN_norm_talk_request(ACTOR* actorx, GAME* game) { + mDemo_Request(mDemo_TYPE_TALK, actorx, (mDemo_REQUEST_PROC)aHWN_set_norm_talk_info); } static int aHWN_talk_init() { mDemo_Set_ListenAble(); - return 1; + return TRUE; } static BOOL aHWN_talk_end_chk(ACTOR* actorx, GAME* game) { + HALLOWEEN_NPC_ACTOR* hwn_actor = (HALLOWEEN_NPC_ACTOR*)actorx; + GAME_PLAY* play = (GAME_PLAY*)game; BOOL res = FALSE; - NPC_HALLOWEEN_ACTOR* hwn_actor = (NPC_HALLOWEEN_ACTOR*)actorx; - hwn_actor->talk_proc((NPC_HALLOWEEN_ACTOR*)actorx, (GAME_PLAY*)game); - if ((mDemo_Check(mDemo_TYPE_SPEAK, &hwn_actor->npc_class.actor_class) == FALSE) && - (mDemo_Check(mDemo_TYPE_TALK, &hwn_actor->npc_class.actor_class) == FALSE)) { + + hwn_actor->talk_proc(hwn_actor, play); + if ((mDemo_Check(mDemo_TYPE_SPEAK, actorx) == FALSE) && + (mDemo_Check(mDemo_TYPE_TALK, actorx) == FALSE)) { if (hwn_actor->npc_class.schedule.step == 1) { hwn_actor->npc_class.think.end_flag = TRUE; } res = TRUE; - hwn_actor->npc_class.talk_info.talk_request_proc = (aNPC_TALK_REQUEST_PROC)aHWN_norm_talk_request; + hwn_actor->npc_class.talk_info.talk_request_proc = aHWN_norm_talk_request; } return res; }