static int mMsg_Check_ScrollOrder(mMsg_Window_c* msg_p) { return (chkTrigger(BUTTON_A) || chkTrigger(BUTTON_B)); } static int mMsg_MsgTimeEnd_dec(mMsg_Window_c* msg_p) { if (msg_p->end_timer == 0) { return FALSE; } else if (msg_p->end_timer == 1) { return TRUE; } else { msg_p->end_timer--; return FALSE; } } static int mMsg_end_to_disappear(mMsg_Window_c* msg_p) { if (mMsg_Change_request_main_index(msg_p, mMsg_INDEX_DISAPPEAR, 5)) { mMsg_Clear_CursolIndex(msg_p); mMsg_Unset_ForceNext(msg_p); return TRUE; } return FALSE; } static void mMsg_request_main_index_fromNormal(mMsg_Window_c* msg_p, GAME* game) { if (mMsg_MsgTimeEnd_dec(msg_p) && mMsg_Check_NextIndex_MsgTimeEndCode(msg_p)) { mMsg_end_to_disappear(msg_p); } else if ((mMsg_Check_ScrollOrder(msg_p) || msg_p->force_next) && msg_p->lock_continue == FALSE) { int last = FALSE; if (mMsg_Check_NextIndex_ContinueCode(msg_p) && msg_p->continue_cancel_flag == FALSE) { int continue_msg = msg_p->continue_msg_no; if (continue_msg >= 0 && continue_msg < MSG_MAX && mMsg_ChangeMsgData(msg_p, continue_msg)) { if (mMsg_request_main_cursol(msg_p, FALSE, 5) && msg_p->force_next == FALSE && mMsg_Check_NextIndex_SetSelectWindowCode(msg_p) == FALSE) { if ((msg_p->status_flags & mMsg_STATUS_FLAG_NO_SE_PAGE_OKURI) == 0) { mMsg_sound_PAGE_OKURI(); } } mMsg_Unset_ForceNext(msg_p); mMsg_Set_continue_msg_num(msg_p, -1); } } else if ( (mMsg_Check_NextIndex_ContinueCode(msg_p) && msg_p->continue_cancel_flag) || (last = mMsg_Check_NextIndex_LastCode(msg_p)) || // hate this but it works mMsg_Check_NextIndex_MsgTimeEndCode(msg_p) ) { if ((msg_p->status_flags & mMsg_STATUS_FLAG_IDLING_NOW) == 0) { if (last && (msg_p->status_flags & mMsg_STATUS_FLAG_IDLING_REQ)) { msg_p->status_flags |= mMsg_STATUS_FLAG_IDLING_NOW; } else { mMsg_end_to_disappear(msg_p); } } } else if (mMsg_request_main_cursol(msg_p, FALSE, 5)) { if ( msg_p->force_next == FALSE && mMsg_Check_NextIndex_SetSelectWindowCode(msg_p) == FALSE && (msg_p->status_flags & mMsg_STATUS_FLAG_NO_SE_PAGE_OKURI) == 0 ) { mMsg_sound_PAGE_OKURI(); } mMsg_Unset_ForceNext(msg_p); } } } static void mMsg_Set_display_button_turn_color(mMsg_Window_c* msg_p, GAME* game) { f32* timer = &msg_p->continue_button_timer; f32 target; (*timer) += 1.0f; if (*timer >= mMsg_BUTTON_TURN_TIME) { *timer = 0.0f; } target = (*timer - mMsg_BUTTON_TURN_TIME * 0.5f) / (mMsg_BUTTON_TURN_TIME * 0.5f); target = target <= 0.0f ? 1.0f + target : 1.0f - target; if (target < 0.0f) { target = 0.0f; } else if (target > 1.0f) { target = 1.0f; } msg_p->continue_button_color.a = (int)(target * 255.0f); } static void mMsg_Main_Normal(mMsg_Window_c* msg_p, GAME* game) { mMsg_Set_display_button_turn_color(msg_p, game); mMsg_request_main_index_fromNormal(msg_p, game); mMsg_MainSetup_Window(msg_p, game); if (msg_p->main_index != mMsg_INDEX_NORMAL) { msg_p->status_flags &= ~mMsg_STATUS_FLAG_NO_SE_PAGE_OKURI; } } static void mMsg_MainSetup_Normal(mMsg_Window_c* msg_p, GAME* game) { mMsg_Request_MainNormal_Data_c* normal_data = &msg_p->request_data.request_main_normal; int wait_flag = normal_data->wait_flag; msg_p->main_index = mMsg_INDEX_NORMAL; msg_p->draw_flag = TRUE; msg_p->requested_main_index = -1; msg_p->requested_priority = 4; msg_p->status_flags &= ~mMsg_STATUS_FLAG_IDLING_NOW; if (wait_flag != TRUE) { msg_p->continue_button_timer = 0.0f; msg_p->continue_button_color.a = 0; if (msg_p->end_timer == 0) { msg_p->show_continue_button = TRUE; } else { msg_p->show_continue_button = FALSE; } msg_p->cancel_flag = FALSE; } }