From 4b21329bca4f26e98855ad54ebeacc680c30dc55 Mon Sep 17 00:00:00 2001 From: Cuyler36 <24523422+Cuyler36@users.noreply.github.com> Date: Sun, 20 Oct 2024 11:06:16 -0400 Subject: [PATCH] m_tag_ovl 75% matched --- include/ac_my_room.h | 4 + include/audio_defs.h | 5 +- include/m_cpmail_ovl.h | 4 +- include/m_cporiginal_ovl.h | 1 + include/m_mail.h | 10 +- include/m_mailbox_ovl.h | 2 + include/m_name_table.h | 4 + include/m_needlework_ovl.h | 1 + include/m_shop.h | 1 + include/m_tag_ovl.h | 57 +- src/ac_my_room_move.c_inc | 14 +- src/ac_shop_level.c | 2 +- src/m_fishrecord.c | 2 +- src/m_hand_ovl.c | 26 +- src/m_mail.c | 4 +- src/m_mark_room.c | 2 +- src/m_mark_room_ovl.c | 2 +- src/m_npc.c | 6 +- src/m_post_office.c | 2 +- src/m_quest.c | 2 +- src/m_shop.c | 4 +- src/m_submenu_ovl.c | 2 +- src/m_tag_ovl.c | 2138 +++++++++++++++++++++++++++++++++++- src/save_check.c_inc | 2 +- 24 files changed, 2206 insertions(+), 91 deletions(-) diff --git a/include/ac_my_room.h b/include/ac_my_room.h index 766ca477..cdfedbc2 100644 --- a/include/ac_my_room.h +++ b/include/ac_my_room.h @@ -19,6 +19,10 @@ extern "C" { #define aMR_NO_FTR_ID 200 #define aMR_NO_FTR_ID2 201 +#define aMR_JUDGE_MAX_FTR -1 +#define aMR_JUDGE_CANT_PLACE_FTR -2 +#define aMR_JUDGE_OTHER_ROOM -3 + typedef struct my_room_actor_s MY_ROOM_ACTOR; enum { diff --git a/include/audio_defs.h b/include/audio_defs.h index 8a730450..d56c3a82 100644 --- a/include/audio_defs.h +++ b/include/audio_defs.h @@ -69,7 +69,7 @@ typedef enum audio_sound_effects { NA_SE_TOOL_FURI = 0x5A, // swing? NA_SE_AMI_HIT = 0x5C, NA_SE_TOOL_GET, - + NA_SE_5E = 0x5E, NA_SE_5F = 0x5F, NA_SE_60 = 0x60, @@ -157,6 +157,8 @@ typedef enum audio_sound_effects { NA_SE_SOFT_CHAIR_STANDUP, NA_SE_HARD_CHAIR_STANDUP, + NA_SE_426 = 0x426, + NA_SE_BUBU_CHAIR_STANDUP = 0x429, NA_SE_JUMP, NA_SE_LANDING, @@ -174,6 +176,7 @@ typedef enum audio_sound_effects { NA_SE_KARABURI = 0x43A, NA_SE_ROD_STROKE_SMALL = 0x445, + NA_SE_446 = 0x446, NA_SE_SCOOP_TREE_HIT = 0x448, NA_SE_SCOOP_ITEM_HIT, diff --git a/include/m_cpmail_ovl.h b/include/m_cpmail_ovl.h index a771e9f5..b9d1ea4e 100644 --- a/include/m_cpmail_ovl.h +++ b/include/m_cpmail_ovl.h @@ -27,7 +27,9 @@ struct cpmail_ovl_s { u32 _BB0; u32 mark_bitfield; int mark_flag; - u8 _BBC[0xBC4 - 0xBBC]; + u8 _BBC; + u32 mark_bitfield2; + // u8 _BBC[0xBC4 - 0xBBC]; }; extern void mCM_cpmail_ovl_construct(Submenu* submenu); diff --git a/include/m_cporiginal_ovl.h b/include/m_cporiginal_ovl.h index c225c9e5..fe70dd30 100644 --- a/include/m_cporiginal_ovl.h +++ b/include/m_cporiginal_ovl.h @@ -39,6 +39,7 @@ extern void mCO_swap_image(Submenu* submenu, mActor_name_t item0, mActor_name_t extern int mCO_top_folder(Submenu* submenu); extern u8* mCO_get_folder_name(Submenu* submenu, int folder); extern u8* mCO_get_image_name(Submenu* submenu, int folder, int idx); +extern int mCO_check_mark_flg(Submenu* submenu, int idx); extern int mCO_check_hide_flg(Submenu* submenu, int folder, int idx); extern void mCO_on_hide_flg(Submenu* submenu, int folder, int idx); extern void mCO_clear_hide_flg(Submenu* submenu); diff --git a/include/m_mail.h b/include/m_mail.h index 8c5b95a6..088e3f5f 100644 --- a/include/m_mail.h +++ b/include/m_mail.h @@ -31,11 +31,11 @@ enum { }; enum { - mMl_FONT_0, - mMl_FONT_SEND, - mMl_FONT_2, - mMl_FONT_3, - mMl_FONT_4, + mMl_FONT_RECV, /* Received letter (with or without a present attached), unread */ + mMl_FONT_SEND, /* Player-written letter */ + mMl_FONT_RECV_READ, /* Recieved letter, with/without present, and then read it */ + mMl_FONT_RECV_PLAYER_PRESENT, /* Recieved letter where present was attached, unread */ + mMl_FONT_RECV_PLAYER_PRESENT_READ, /* Recieved letter where present was attached, read */ mMl_FONT_NUM }; diff --git a/include/m_mailbox_ovl.h b/include/m_mailbox_ovl.h index 0737d341..a1d66da5 100644 --- a/include/m_mailbox_ovl.h +++ b/include/m_mailbox_ovl.h @@ -8,6 +8,8 @@ extern "C" { #endif +#define mMB_MAIL_COUNT HOME_MAILBOX_SIZE + typedef int (*mMB_GET_LAST_MAIL_IDX_PROC)(void); struct mailbox_ovl_s { diff --git a/include/m_name_table.h b/include/m_name_table.h index 20beb1f6..97d2c389 100644 --- a/include/m_name_table.h +++ b/include/m_name_table.h @@ -207,6 +207,7 @@ extern int mNT_check_unknown(mActor_name_t item_no); #define NPC_HOUSE_ID_TO_NPC_ID(house) (house + 0x9000) #define NPC_ID_TO_NPC_HOUSE_ID(npc) (npc - 0x9000) +#define ITEM_IS_INSECT(n) ((n) >= ITM_INSECT_START && (n) < ITM_INSECT_END) #define ITEM_IS_WISP(n) ((n) >= ITM_SPIRIT0 && (n) <= ITM_SPIRIT4) #define ITEM_IS_PAPER(n) ((n) >= ITM_PAPER_START && (n) <= (ITM_PAPER_END - 1)) #define ITEM_IS_CLOTH(n) ((n) >= ITM_CLOTH_START && (n) < ITM_CLOTH_END) @@ -530,6 +531,9 @@ extern int mNT_check_unknown(mActor_name_t item_no); #define ITEM_IS_EXERCISE_CARD(item) ((item) >= ITM_EXCERCISE_CARD00 && (item) <= ITM_EXCERCISE_CARD12) #define ITEM_IS_BALLOON(item) ((item) >= ITM_BALLOON_START && (item) <= ITM_BUNNY_O_BALLOON) #define ITEM_IS_UMBRELLA(item) ((item) >= ITM_UMBRELLA_START && (item) <= ITM_UMBRELLA_END) +#define ITEM_IS_MYUMBRELLA_TOOL(item) ((item) >= ITM_MY_ORG_UMBRELLA0 && (item) <= ITM_MY_ORG_UMBRELLA7) +#define ITEM_IS_SCOOP(item) ((item) >= ITM_SHOVEL && (item) <= ITM_SHOVEL) +#define ITEM_IS_GOLD_SCOOP(item) ((item) >= ITM_GOLDEN_SHOVEL && (item) <= ITM_GOLDEN_SHOVEL) #define BG_CATEGORY 0 #define ENV_CATEGORY 8 diff --git a/include/m_needlework_ovl.h b/include/m_needlework_ovl.h index 4230ceba..3d845af1 100644 --- a/include/m_needlework_ovl.h +++ b/include/m_needlework_ovl.h @@ -20,6 +20,7 @@ struct needlework_ovl_s { extern u8 mNW_get_image_no(Submenu* submenu, int slot_no); extern u8* mNW_get_image_name(Submenu* submenu, int idx); extern int mNW_check_hide_flg(Submenu* submenu, int idx); +extern int mNW_check_mark_flg(Submenu* submenu, int idx); extern void mNW_on_hide_flg(Submenu* submenu, int idx); extern void mNW_clear_hide_flg(Submenu* submenu); extern void mNW_draw_original(Submenu* submenu, GRAPH* graph, f32 pos_x, f32 pos_y, f32 scale, int idx, int color_flag); diff --git a/include/m_shop.h b/include/m_shop.h index 5605202d..4cae32a4 100644 --- a/include/m_shop.h +++ b/include/m_shop.h @@ -212,6 +212,7 @@ typedef struct shop_s { /* 0x13C */ int visitor_flag; /* set when a foreign player enters Nook's shop, required for Nookington's */ } Shop_c; +#define mSP_GC_FAMICOM_TABLE_CNT 8 // update this if the # of items in mSP_gc_famicom_table is changed extern mActor_name_t mSP_gc_famicom_table[]; extern int mSP_CollectCheck(mActor_name_t item); diff --git a/include/m_tag_ovl.h b/include/m_tag_ovl.h index ba031322..fd773e10 100644 --- a/include/m_tag_ovl.h +++ b/include/m_tag_ovl.h @@ -47,6 +47,20 @@ enum { mTG_MARK_TYPE_NUM }; +enum { + mTG_CHANGE_ORIGINAL_MARK_NONE, + mTG_CHANGE_ORIGINAL_MARK_DECIDE, + mTG_CHANGE_ORIGINAL_MARK_MOVE, + + mTG_CHANGE_ORIGINAL_MARK_NUM +}; + +enum { + mTG_CHANGE_MAIL_MARK_DECIDE, + mTG_CHANGE_MAIL_MARK_MOVE, + + mTG_CHANGE_MAIL_MARK_NUM +}; enum { mTG_TYPE_NONE, @@ -158,11 +172,16 @@ enum { mTG_TABLE_GBA, mTG_TABLE_GBA_NW, mTG_TABLE_CARD, - mTG_TABLE_GBA_NW2, + mTG_TABLE_CARD_NW, mTG_TABLE_NUM }; +#define mTG_RETURN_CLOSE 0 +#define mTG_RETURN_KEEP 1 + +#define mTG_MARK_IDX_UNSET 0x7FFF + /* sizeof(mTG_tag_c) == 0xB4 */ typedef struct tag_s { u8 type; @@ -193,6 +212,28 @@ typedef void (*mTG_EXCHANGE_PROC)(Submenu*, mSM_MenuInfo_c*); typedef Mail_c* (*mTG_GET_MAIL_POINTER_PROC)(Submenu*, mHD_Ovl_c*); typedef int (*mTG_GET_TABLE_IDX_PROC)(mTG_tag_c*); +typedef struct tag_cpmail_mark_pos_s { + Mail_c* _00; + f32 pos[2]; +} mTG_cpmail_mark_pos_c; + +typedef struct tag_cpmail_mark_s { + Mail_c* _00[4]; + Mail_c* mail_tbl[4]; + f32 _20[2][2]; + f32 _30[2][2]; + s16 idx_tbl[4]; + s16 mode; + s16 _4A; +} mTG_cpmail_mark_c; + +typedef struct tag_cporiginal_mark_s { + f32 _00[2][2]; + f32 _10[2][2]; + s16 needlework_idx; + s16 cporiginal_idx; +} mTG_cporiginal_mark_c; + /* TODO */ struct tag_ovl_s { /* 0x000 */ int sel_tag_idx; @@ -205,7 +246,19 @@ struct tag_ovl_s { /* 0x2E8 */ mTG_GET_MAIL_POINTER_PROC get_mail_pointer_proc; /* 0x2EC */ mTG_GET_TABLE_IDX_PROC get_table_idx_proc; /* 0x2F0 */ s16 item_name_wait_time; - /* 0x2F2 */ u8 _2F2[0x3C4 - 0x2F2]; + /* 0x2F4 */ mTG_cpmail_mark_pos_c _2F4[4]; + /* 0x324 */ mTG_cpmail_mark_c cpmail_mark[1]; + /* 0x370 */ f32 _370; + /* 0x374 */ int _374; + /* 0x378 */ mActor_name_t _378[2]; + /* 0x37C */ int _37C[5]; + /* 0x390 */ mTG_cporiginal_mark_c cporiginal_mark[1]; + /* 0x3B4 */ f32 _3B4; + /* 0x3B8 */ u16 needlework_mark_flg; + /* 0x3BA */ u16 cporiginal_mark_flg; + /* 0x3BC */ s16 needlework_mark_max; + /* 0x3BE */ s16 cporiginal_mark_max; + /* 0x3C0 */ s16 change_original_mark_mode; }; extern int mTG_mark_main(Submenu*, mSM_MenuInfo_c*, int, int*); diff --git a/src/ac_my_room_move.c_inc b/src/ac_my_room_move.c_inc index c15c7d25..9b7b662b 100644 --- a/src/ac_my_room_move.c_inc +++ b/src/ac_my_room_move.c_inc @@ -1863,14 +1863,14 @@ static int aMR_JudgeBreedNewFurniture(GAME* game, u16 ftr_no, int* ut_x, int* ut u16 angle; if (mCoBG_CheckUtFlat(&player_pos) == FALSE) { - return -2; + return aMR_JUDGE_CANT_PLACE_FTR; } if (aMR_CLIP != NULL && my_room != NULL && aMR_CheckReserveFlag(my_room, 0) == FALSE) { *rotation = 0; *square_offset = 0; *layer = 0; - return -2; + return aMR_JUDGE_CANT_PLACE_FTR; } aMR_Wpos2PlaceNumber(&cur_ut_x, &cur_ut_z, player_pos, 0); @@ -1907,7 +1907,7 @@ static int aMR_JudgeBreedNewFurniture(GAME* game, u16 ftr_no, int* ut_x, int* ut for (i = 0; i < 5; i++) { if (aMR_WeightPossible((ACTOR*)my_room, profile->shape) == FALSE) { - return -1; + return aMR_JUDGE_MAX_FTR; } target_ut_x = cur_ut_x; @@ -1975,7 +1975,7 @@ static int aMR_JudgeBreedNewFurniture(GAME* game, u16 ftr_no, int* ut_x, int* ut for (i = 0; i < 5; i++) { angle_idx = (int)angle_idx; if (aMR_WeightPossible((ACTOR*)my_room, profile->shape) == FALSE) { - return -1; + return aMR_JUDGE_MAX_FTR; } target_ut_x = cur_ut_x; @@ -2084,16 +2084,16 @@ static int aMR_JudgeBreedNewFurniture(GAME* game, u16 ftr_no, int* ut_x, int* ut } } - return -2; + return aMR_JUDGE_CANT_PLACE_FTR; } } - return -1; + return aMR_JUDGE_MAX_FTR; } else { *rotation = 0; *square_offset = 0; *layer = 0; - return -3; + return aMR_JUDGE_OTHER_ROOM; } } diff --git a/src/ac_shop_level.c b/src/ac_shop_level.c index 2fd802fc..7db02a45 100644 --- a/src/ac_shop_level.c +++ b/src/ac_shop_level.c @@ -57,7 +57,7 @@ static void aSL_SetShopRenewalChirashi_Notice(int shop_level, lbRTC_time_c* time mHandbill_Load_HandbillFromRom(content->header, &header_back_start, content->footer, content->body, renewal_chirashi_bunmen[shop_level & 3]); content->header_back_start = header_back_start; - content->font = mMl_FONT_0; + content->font = mMl_FONT_RECV; content->paper_type = (u8)ITM_PAPER55; content->mail_type = mMl_TYPE_SHOP_SALE_LEAFLET; mPr_CopyPersonalID(&mail.header.recipient.personalID, &Save_Get(private_data[player_no]).player_ID); diff --git a/src/m_fishrecord.c b/src/m_fishrecord.c index cb5f81f5..0691465c 100644 --- a/src/m_fishrecord.c +++ b/src/m_fishrecord.c @@ -454,7 +454,7 @@ static void mFR_GetFishPresentMail(mFR_record_c* record, Mail_c* mail) { ); mail->content.header_back_start = header_back_start; - mail->content.font = mMl_FONT_0; + mail->content.font = mMl_FONT_RECV; mail->content.mail_type = mMl_TYPE_FISHING_CONTENST; mail->present = present; mail->content.paper_type = 15; // deep sea paper diff --git a/src/m_hand_ovl.c b/src/m_hand_ovl.c index 027dadab..142985ef 100644 --- a/src/m_hand_ovl.c +++ b/src/m_hand_ovl.c @@ -86,7 +86,7 @@ static void mHD_hand_pos_get(Submenu* submenu, f32* pos, int table_type, int tab pos[1] += 23.0f; } } else if ((table_type == mTG_TABLE_GBA || table_type == mTG_TABLE_GBA_NW || table_type == mTG_TABLE_CARD || - table_type == mTG_TABLE_GBA_NW2 || table_type == mTG_TABLE_CPORIGINAL || + table_type == mTG_TABLE_CARD_NW || table_type == mTG_TABLE_CPORIGINAL || table_type == mTG_TABLE_CPORIGINAL_NW) && item != EMPTY_NO) { pos[0] += -2.0f; @@ -178,7 +178,7 @@ static void mHD_drop_item(Submenu* submenu, mTG_tag_c* tag, mActor_name_t* item, table = tag->table; } - if (item != NULL && *item != EMPTY_NO && table != mTG_TABLE_GBA_NW2 && table != mTG_TABLE_GBA_NW) { + if (item != NULL && *item != EMPTY_NO && table != mTG_TABLE_CARD_NW && table != mTG_TABLE_GBA_NW) { now_item = *item; mTG_mark_mainX(submenu, menu_info, table, table_idx, 2, 0); @@ -222,11 +222,11 @@ static void mHD_drop_item(Submenu* submenu, mTG_tag_c* tag, mActor_name_t* item, sAdo_SysTrgStart(NA_SE_41C); if (mail != NULL) { - if (mail->content.font == mMl_FONT_0) { - mail->content.font = mMl_FONT_3; + if (mail->content.font == mMl_FONT_RECV) { + mail->content.font = mMl_FONT_RECV_PLAYER_PRESENT; hand_ovl->info.item_cond = mPr_ITEM_COND_PRESENT; - } else if (mail->content.font == mMl_FONT_2) { - mail->content.font = mMl_FONT_4; + } else if (mail->content.font == mMl_FONT_RECV_READ) { + mail->content.font = mMl_FONT_RECV_PLAYER_PRESENT_READ; hand_ovl->info.item_cond = mPr_ITEM_COND_PRESENT; } } @@ -280,16 +280,16 @@ static void mHD_drop_item(Submenu* submenu, mTG_tag_c* tag, mActor_name_t* item, mTG_mark_mainX(submenu, menu_info, table, table_idx, 2, 0); - if (table == mTG_TABLE_GBA_NW || table == mTG_TABLE_GBA_NW2) { + if (table == mTG_TABLE_GBA_NW || table == mTG_TABLE_CARD_NW) { mGB_copy_image(submenu, hand_ovl->info.item, *item); } else if (item != NULL) { *item = hand_ovl->info.item; if (mail != NULL) { - if (mail->content.font == mMl_FONT_0) { - mail->content.font = mMl_FONT_3; - } else if (mail->content.font == mMl_FONT_2) { - mail->content.font = mMl_FONT_4; + if (mail->content.font == mMl_FONT_RECV) { + mail->content.font = mMl_FONT_RECV_PLAYER_PRESENT; + } else if (mail->content.font == mMl_FONT_RECV_READ) { + mail->content.font = mMl_FONT_RECV_PLAYER_PRESENT_READ; } } } @@ -589,7 +589,7 @@ static void mHD_open_end_proc_item_type17(Submenu* submenu, int idx, int table) } break; case mTG_TABLE_GBA_NW: - case mTG_TABLE_GBA_NW2: + case mTG_TABLE_CARD_NW: tmp_item = RSV_NW_ORIGINAL0 + idx; break; case mTG_TABLE_CPORIGINAL: @@ -664,7 +664,7 @@ static void mHD_open_end_proc_item(Submenu* submenu) { &mHD_open_end_proc_item_type17, /* mTG_TABLE_GBA */ &mHD_open_end_proc_item_type17, /* mTG_TABLE_GBA_NW */ &mHD_open_end_proc_item_type17, /* mTG_TABLE_CARD */ - &mHD_open_end_proc_item_type17, /* mTG_TABLE_GBA_NW2 */ + &mHD_open_end_proc_item_type17, /* mTG_TABLE_CARD_NW */ }; mSM_MenuInfo_c* menu_info; diff --git a/src/m_mail.c b/src/m_mail.c index 046d0ffc..502b2e7a 100644 --- a/src/m_mail.c +++ b/src/m_mail.c @@ -199,7 +199,7 @@ extern int mMl_check_send_mail(Mail_c* mail) { extern int mMl_check_set_present_myself(Mail_c* mail) { u8 font = mail->content.font; - if (font == mMl_FONT_SEND || font == mMl_FONT_3 || font == mMl_FONT_4) { + if (font == mMl_FONT_SEND || font == mMl_FONT_RECV_PLAYER_PRESENT || font == mMl_FONT_RECV_PLAYER_PRESENT_READ) { return TRUE; } @@ -235,7 +235,7 @@ static void mMl_get_mail_to_player_com(Mail_c* mail, PersonalID_c* recipient_pid mMl_clear_mail(mail); (*get_proc[proc_type])(mail, mail_no); - mail->content.font = mMl_FONT_0; + mail->content.font = mMl_FONT_RECV; mail->content.mail_type = mail_type; mPr_CopyPersonalID(&mail->header.recipient.personalID, recipient_pid); diff --git a/src/m_mark_room.c b/src/m_mark_room.c index ef536c33..64905cdf 100644 --- a/src/m_mark_room.c +++ b/src/m_mark_room.c @@ -70,7 +70,7 @@ static int mMkRm_NoMarkLetter(int arrange_idx, int handbill_no) { mMl_clear_mail(&mail); mHandbill_Load_HandbillFromRom(mail.content.header, &header_back_start, mail.content.footer, mail.content.body, handbill_no); - mail.content.font = mMl_FONT_0; + mail.content.font = mMl_FONT_RECV; mail.content.header_back_start = header_back_start; mail.content.mail_type = mMl_TYPE_HRA; mail.content.paper_type = 51; /* wing paper */ diff --git a/src/m_mark_room_ovl.c b/src/m_mark_room_ovl.c index 5290a16c..76587ca2 100644 --- a/src/m_mark_room_ovl.c +++ b/src/m_mark_room_ovl.c @@ -2932,7 +2932,7 @@ static void mMkRm_SendMarkLetter(mHm_hs_c* house, int points, int room_size, u8* mMl_clear_mail(&letter); mHandbill_Load_HandbillFromRom(letter.content.header, &header_back_start, letter.content.footer, letter.content.body, handbill_no); - letter.content.font = mMl_FONT_0; + letter.content.font = mMl_FONT_RECV; letter.content.header_back_start = header_back_start; letter.content.mail_type = mMl_TYPE_HRA; letter.content.paper_type = 51; /* wing paper */ diff --git a/src/m_npc.c b/src/m_npc.c index ae2679b3..1152e890 100644 --- a/src/m_npc.c +++ b/src/m_npc.c @@ -1571,7 +1571,7 @@ static void mNpc_GetRemailData(Mail_c* mail, PersonalID_c* pid, AnmPersonalID_c* int paper_no; (*get_remail[cond])(mail, pid, anm_id, remail, foreign); - mail->content.font = mMl_FONT_0; + mail->content.font = mMl_FONT_RECV; mail->content.mail_type = mMl_TYPE_MAIL; mPr_CopyPersonalID(&mail->header.recipient.personalID, pid); mail->header.recipient.type = mMl_NAME_TYPE_PLAYER; @@ -1680,7 +1680,7 @@ static void mNpc_LoadMailDataCommon2(Mail_c* mail, PersonalID_c* pid, AnmPersona mem_copy(mail->content.header, super, MAIL_HEADER_LEN); mem_copy(mail->content.footer, ps, MAIL_FOOTER_LEN); mail->content.header_back_start = header_back_start; - mail->content.font = mMl_FONT_0; + mail->content.font = mMl_FONT_RECV; mail->content.mail_type = mMl_TYPE_MAIL; mPr_CopyPersonalID(&mail->header.recipient.personalID, pid); mail->header.recipient.type = mMl_NAME_TYPE_PLAYER; @@ -1920,7 +1920,7 @@ static void mNpc_GetXmasCardData(Mail_c* mail, PersonalID_c* pid) { mHandbill_Load_HandbillFromRom(mail->content.header, &header_back_start, mail->content.footer, mail->content.body, 0xD7); mail->content.header_back_start = header_back_start; - mail->content.font = mMl_FONT_0; + mail->content.font = mMl_FONT_RECV; mail->content.mail_type = mMl_TYPE_XMAS; mPr_CopyPersonalID(&mail->header.recipient.personalID, pid); mail->header.recipient.type = mMl_NAME_TYPE_PLAYER; diff --git a/src/m_post_office.c b/src/m_post_office.c index 5fb900d1..ca6f97d7 100644 --- a/src/m_post_office.c +++ b/src/m_post_office.c @@ -164,7 +164,7 @@ static void mPO_delivery_mail_with_item(Mail_c* mail, int mail_no, mActor_name_t mHandbill_Load_HandbillFromRom(mail->content.header, &header_back_start, mail->content.footer, mail->content.body, mail_no); - mail->content.font = mMl_FONT_0; + mail->content.font = mMl_FONT_RECV; mail->content.header_back_start = header_back_start; mail->content.mail_type = 7; mail->content.paper_type = ITM_PAPER55; diff --git a/src/m_quest.c b/src/m_quest.c index 8c82288f..da0e29e5 100644 --- a/src/m_quest.c +++ b/src/m_quest.c @@ -603,7 +603,7 @@ static void mQst_GetRemailData(Mail_c* letter, PersonalID_c* recipient_id, AnmPe mem_copy(letter->content.header, header, MAIL_HEADER_LEN); mem_copy(letter->content.footer, footer, MAIL_FOOTER_LEN); letter->content.header_back_start = header_back_pos; - letter->content.font = mMl_FONT_0; + letter->content.font = mMl_FONT_RECV; letter->content.mail_type = 0; mPr_CopyPersonalID(&letter->header.recipient.personalID, recipient_id); diff --git a/src/m_shop.c b/src/m_shop.c index 21cdb9f6..660ac3dd 100644 --- a/src/m_shop.c +++ b/src/m_shop.c @@ -1094,7 +1094,7 @@ extern void mSP_ShopItsumoChirashi(int house_no, int shop_level, mActor_name_t i mMl_clear_mail(&leaflet); mHandbill_Load_HandbillFromRom(leaflet.content.header, &header_back_start, leaflet.content.footer, leaflet.content.body, rare_chirashi_bunmen[shop_level][type & 1]); - leaflet.content.font = mMl_FONT_0; + leaflet.content.font = mMl_FONT_RECV; leaflet.content.header_back_start = header_back_start; leaflet.content.mail_type = mMl_TYPE_SHOP_SALE_LEAFLET; leaflet.content.paper_type = ITM_PAPER55; // simple paper @@ -1226,7 +1226,7 @@ extern void mSP_SetRenewalChiraswhi_AppoDay() { mMl_clear_mail(&leaflet); mHandbill_Load_HandbillFromRom(content->header, &header_back_start, content->footer, content->body, chirashi_idx_appoday[shop_level]); - leaflet.content.font = mMl_FONT_0; + leaflet.content.font = mMl_FONT_RECV; leaflet.content.header_back_start = header_back_start; leaflet.content.mail_type = mMl_TYPE_SHOP_SALE_LEAFLET; leaflet.content.paper_type = ITM_PAPER55; // simple paper diff --git a/src/m_submenu_ovl.c b/src/m_submenu_ovl.c index 55321ea1..dcb74bfe 100644 --- a/src/m_submenu_ovl.c +++ b/src/m_submenu_ovl.c @@ -1527,7 +1527,7 @@ static void mSM_draw_mail(GRAPH* graph, f32 pos_x, f32 pos_y, f32 scale, Mail_c* if (mMl_check_send_mail(mail)) { type = mSM_MAIL_SEND; - } else if (mail->content.font == mMl_FONT_4 || mail->content.font == mMl_FONT_2) { + } else if (mail->content.font == mMl_FONT_RECV_PLAYER_PRESENT_READ || mail->content.font == mMl_FONT_RECV_READ) { type = mSM_MAIL_NORMAL2; } else { type = mSM_MAIL_NORMAL; diff --git a/src/m_tag_ovl.c b/src/m_tag_ovl.c index 6ef5f79a..1b12983f 100644 --- a/src/m_tag_ovl.c +++ b/src/m_tag_ovl.c @@ -20,6 +20,7 @@ #include "m_mailbox_ovl.h" #include "m_music_ovl.h" #include "m_mark_room.h" +#include "ac_set_ovl_insect.h" static mTG_Ovl_c tag_ovl_data; @@ -123,7 +124,7 @@ static mTG_tag_data_table_c mTG_table_data[] = { { 4, 2, mTG_gba_col_pos, mTG_gba_line_pos }, /* mTG_TABLE_GBA */ { 2, 4, mTG_gba_nw_col_pos, mTG_gba_nw_line_pos }, /* mTG_TABLE_GBA_NW */ { 1, 1, mTG_card_col_pos, mTG_card_line_pos }, /* mTG_TABLE_CARD */ - { 2, 4, mTG_gba_nw_col_pos, mTG_gba_nw_line_pos }, /* mTG_TABLE_GBA_NW2 */ + { 2, 4, mTG_gba_nw_col_pos, mTG_gba_nw_line_pos }, /* mTG_TABLE_CARD_NW */ }; static u8 str_omikuji[7] = "fortune"; @@ -1172,7 +1173,7 @@ static int mTG_return_tag_init(Submenu* submenu, int ret_type, int type) { tag_ovl->ret_tag_idx = ret_idx; } - if (type == mTG_TYPE_NONE) { + if (type == mTG_RETURN_CLOSE) { tag = &tag_ovl->tags[tag_ovl->sel_tag_idx]; for (i = tag_ovl->sel_tag_idx - tag_ovl->ret_tag_idx; i != 0; i--) { @@ -2100,7 +2101,7 @@ static void mTG_init_tag_data_item_win(Submenu* submenu) { mTG_init_tag_data_cporiginal_wc_win(submenu); } else if (tag->table == mTG_TABLE_CPORIGINAL_NW || tag->table == mTG_TABLE_NEEDLEWORK || tag->table == mTG_TABLE_CPORIGINAL || tag->table == mTG_TABLE_GBA_NW || - tag->table == mTG_TABLE_CARD || tag->table == mTG_TABLE_GBA_NW2 || tag->table == mTG_TABLE_GBA) { + tag->table == mTG_TABLE_CARD || tag->table == mTG_TABLE_CARD_NW || tag->table == mTG_TABLE_GBA) { mTG_init_tag_data_needlework_win(submenu, idx); } else { tag->arrow_dir = 0; @@ -2767,7 +2768,7 @@ static void mTG_open_warning_window(Submenu* submenu, mSM_MenuInfo_c* menu_info, mSM_open_submenu(submenu, mSM_OVL_WARNING, type, 0); menu_info->proc_status = mSM_OVL_PROC_WAIT; menu_info->next_proc_status = mSM_OVL_PROC_WAIT; - mTG_return_tag_init(submenu, mTG_TYPE_NONE, mTG_TYPE_NONE); + mTG_return_tag_init(submenu, mTG_TYPE_NONE, mTG_RETURN_CLOSE); sAdo_SysTrgStart(MONO(NA_SE_3)); } @@ -2892,7 +2893,7 @@ static void mTG_catch_item_from_table(Submenu* submenu, Mail_c* mail, mActor_nam } } - mTG_return_tag_init(submenu, mTG_TYPE_NONE, mTG_TYPE_NONE); + mTG_return_tag_init(submenu, mTG_TYPE_NONE, mTG_RETURN_CLOSE); mTG_set_catch_se(submenu); } @@ -2928,7 +2929,7 @@ static int mTG_make_money_sack(Submenu* submenu, mSM_MenuInfo_c* menu_info, mAct hand_ovl->info.hold_idx = 0; hand_ovl->info.catch_pg = 0; mTG_mark_main_CLR(submenu, menu_info); - mTG_return_tag_init(submenu, mTG_TYPE_NONE, mTG_TYPE_NONE); + mTG_return_tag_init(submenu, mTG_TYPE_NONE, mTG_RETURN_CLOSE); submenu->overlay->inventory_ovl->disp_money_change_frames = -(amount / 42); sAdo_SysTrgStart(MONO(NA_SE_52)); res = TRUE; @@ -2958,31 +2959,31 @@ static int mTG_drop_furniture(GAME_PLAY* play, mActor_name_t item) { return idx; } -static int mTG_nw_drop_furniture(GAME_PLAY* play, int image_no, mActor_name_t itemNo) { +static int mTG_nw_drop_furniture(GAME_PLAY* play, int type, int image_no) { GAME* game = (GAME*)play; - int idx = -1; + int idx = aMR_JUDGE_MAX_FTR; int sq_ofs; int layer; int ux; int uz; u16 rot; - switch (image_no) { + switch (type) { case mNW_TYPE_MANEKIN: - idx = aMR_CLIP->judge_breed_new_ftr_proc(game, 0x2EA + (itemNo & 7), &ux, &uz, &rot, &sq_ofs, &layer); + idx = aMR_CLIP->judge_breed_new_ftr_proc(game, 0x2EA + (image_no & 7), &ux, &uz, &rot, &sq_ofs, &layer); break; case mNW_TYPE_UMBRELLA: - idx = aMR_CLIP->judge_breed_new_ftr_proc(game, 0x362 + (itemNo & 7), &ux, &uz, &rot, &sq_ofs, &layer); + idx = aMR_CLIP->judge_breed_new_ftr_proc(game, 0x362 + (image_no & 7), &ux, &uz, &rot, &sq_ofs, &layer); break; } if (idx >= 0) { - switch (image_no) { + switch (type) { case mNW_TYPE_MANEKIN: - aMR_CLIP->reserve_ftr_proc(game, 0x2EA + (itemNo & 7), idx, ux, uz, rot, sq_ofs, layer); + aMR_CLIP->reserve_ftr_proc(game, 0x2EA + (image_no & 7), idx, ux, uz, rot, sq_ofs, layer); break; case mNW_TYPE_UMBRELLA: - aMR_CLIP->reserve_ftr_proc(game, 0x362 + (itemNo & 7), idx, ux, uz, rot, sq_ofs, layer); + aMR_CLIP->reserve_ftr_proc(game, 0x362 + (image_no & 7), idx, ux, uz, rot, sq_ofs, layer); break; } } @@ -3051,7 +3052,7 @@ static void mTG_set_trade_cond(Submenu* submenu, mSM_MenuInfo_c* menu_info, s16 Save_Get(homes[menu_info->data1]).haniwa.items[tag->tag_col].exchange_type = cond; Save_Get(homes[menu_info->data1]).haniwa.items[tag->tag_col].extra_data = arg; - mTG_return_tag_init(submenu, mTG_TYPE_NONE, mTG_TYPE_NONE); + mTG_return_tag_init(submenu, mTG_TYPE_NONE, mTG_RETURN_CLOSE); sAdo_SysTrgStart(NA_SE_33); submenu->overlay->haniwa_ovl->set_interrupt_message_proc(submenu, tag, 4); } @@ -3060,7 +3061,7 @@ static void mTG_present_open_proc(Submenu* submenu, mSM_MenuInfo_c* menu_info) { int table_idx; table_idx = mTG_get_table_idx(&submenu->overlay->tag_ovl->tags[0]); - mTG_return_tag_init(submenu, mTG_TYPE_NONE, mTG_TYPE_FIELD_DEFAULT); + mTG_return_tag_init(submenu, mTG_TYPE_NONE, mTG_RETURN_KEEP); sAdo_SysTrgStart(NA_SE_436); mPr_SetItemCollectBit(Now_Private->inventory.pockets[table_idx]); submenu->overlay->inventory_ovl->item_scale_type[table_idx] = 5; @@ -3188,7 +3189,7 @@ static void mTG_get_proc(Submenu* submenu, mSM_MenuInfo_c* menu_info) { haniwa_ovl->table_idx = tag->table; haniwa_ovl->sub_idx = tag->tag_col; haniwa_ovl->msg_time = 120; - mTG_return_tag_init(submenu, mTG_TYPE_NONE, mTG_TYPE_NONE); + mTG_return_tag_init(submenu, mTG_TYPE_NONE, mTG_RETURN_CLOSE); sAdo_SysTrgStart(MONO(NA_SE_3)); } else { haniwa_item_p = &Save_Get(homes[menu_info->data1]).haniwa.items[tag->tag_col]; @@ -3205,7 +3206,7 @@ static void mTG_get_proc(Submenu* submenu, mSM_MenuInfo_c* menu_info) { changed_money -= haniwa_item_p->extra_data; if (changed_money < 0) { submenu->overlay->haniwa_ovl->set_interrupt_message_proc(submenu, tag, 7); - mTG_return_tag_init(submenu, mTG_TYPE_NONE, mTG_TYPE_NONE); + mTG_return_tag_init(submenu, mTG_TYPE_NONE, mTG_RETURN_CLOSE); sAdo_SysTrgStart(MONO(NA_SE_3)); } else { inventory_ovl = submenu->overlay->inventory_ovl; @@ -3231,7 +3232,7 @@ static void mTG_get_proc(Submenu* submenu, mSM_MenuInfo_c* menu_info) { Now_Private->inventory.wallet = keep_money; mPr_SetPossessionItem(Now_Private, idx, haniwa_item_p->item, mPr_ITEM_COND_NORMAL); submenu->overlay->haniwa_ovl->set_interrupt_message_proc(submenu, tag, 8); - mTG_return_tag_init(submenu, mTG_TYPE_NONE, mTG_TYPE_NONE); + mTG_return_tag_init(submenu, mTG_TYPE_NONE, mTG_RETURN_CLOSE); Save_Get(homes[menu_info->data1]).haniwa.bells += haniwa_item_p->extra_data; haniwa_item_p->item = EMPTY_NO; @@ -3274,7 +3275,8 @@ static void mTG_dump_mail_mark_exe_proc(Submenu* submenu, mSM_MenuInfo_c* menu_i Mail_c* mail = &Common_Get(now_home)->mailbox[i]; // clear selected mail if it has a present or is from the player (sending) - if (mail->present != EMPTY_NO || (mail->content.font != mMl_FONT_2 && mail->content.font != mMl_FONT_4)) { + if (mail->present != EMPTY_NO || + (mail->content.font != mMl_FONT_RECV_READ && mail->content.font != mMl_FONT_RECV_PLAYER_PRESENT_READ)) { mailbox_ovl->mark_bitfield &= ~(1 << i); } } @@ -3289,7 +3291,8 @@ static void mTG_dump_mail_mark_exe_proc(Submenu* submenu, mSM_MenuInfo_c* menu_i Mail_c* mail = &cpmail_ovl->card_mail->mail[page][i]; // clear selected mail if it has a present or is from the player (sending) - if (mail->present != EMPTY_NO || (mail->content.font != mMl_FONT_2 && mail->content.font != mMl_FONT_4)) { + if (mail->present != EMPTY_NO || + (mail->content.font != mMl_FONT_RECV_READ && mail->content.font != mMl_FONT_RECV_PLAYER_PRESENT_READ)) { cpmail_ovl->mark_bitfield &= ~(1 << i); } } @@ -3304,7 +3307,8 @@ static void mTG_dump_mail_mark_exe_proc(Submenu* submenu, mSM_MenuInfo_c* menu_i Mail_c* mail = &Now_Private->mail[i]; // clear selected mail if it has a present or is from the player (sending) - if (mail->present != EMPTY_NO || (mail->content.font != mMl_FONT_2 && mail->content.font != mMl_FONT_4)) { + if (mail->present != EMPTY_NO || + (mail->content.font != mMl_FONT_RECV_READ && mail->content.font != mMl_FONT_RECV_PLAYER_PRESENT_READ)) { inv_ovl->mail_mark_bitfield2 &= ~(1 << i); } } @@ -3334,7 +3338,7 @@ static void mTG_dump_mail_mark_exe_proc(Submenu* submenu, mSM_MenuInfo_c* menu_i sAdo_SysTrgStart(MONO(NA_SE_A)); } - mTG_return_tag_init(submenu, mTG_TYPE_NONE, mTG_TYPE_NONE); + mTG_return_tag_init(submenu, mTG_TYPE_NONE, mTG_RETURN_CLOSE); } static void mTG_mailbox_change_mail_proc(Submenu* submenu, mSM_MenuInfo_c* menu_info) { @@ -3351,7 +3355,7 @@ static void mTG_mailbox_change_mail_proc(Submenu* submenu, mSM_MenuInfo_c* menu_ sAdo_SysTrgStart(MONO(NA_SE_A)); } - mTG_return_tag_init(submenu, mTG_TYPE_NONE, mTG_TYPE_NONE); + mTG_return_tag_init(submenu, mTG_TYPE_NONE, mTG_RETURN_CLOSE); } static void mTG_cpmail_change_mail_proc(Submenu* submenu, mSM_MenuInfo_c* menu_info) { @@ -3433,14 +3437,14 @@ static void mTG_cpmail_change_mail_proc(Submenu* submenu, mSM_MenuInfo_c* menu_i sAdo_SysTrgStart(NA_SE_MENU_EXIT); } - mTG_return_tag_init(submenu, mTG_TYPE_NONE, mTG_TYPE_NONE); + mTG_return_tag_init(submenu, mTG_TYPE_NONE, mTG_RETURN_CLOSE); } static void mTG_dump_mail_proc(Submenu* submenu, mSM_MenuInfo_c* menu_info) { mIV_Ovl_c* inv_ovl = submenu->overlay->inventory_ovl; inv_ovl->remove_timer = 24; - mTG_return_tag_init(submenu, mTG_TYPE_NONE, mTG_TYPE_NONE); + mTG_return_tag_init(submenu, mTG_TYPE_NONE, mTG_RETURN_CLOSE); sAdo_SysTrgStart(NA_SE_435); } @@ -3451,7 +3455,7 @@ static void mTG_dump_item_proc(Submenu* submenu, mSM_MenuInfo_c* menu_info) { inv_ovl->remove_timer = 12; inv_ovl->item_scale_type[idx] = mIV_ITEM_SCALE_TYPE_SHRINK; - mTG_return_tag_init(submenu, mTG_TYPE_NONE, mTG_TYPE_NONE); + mTG_return_tag_init(submenu, mTG_TYPE_NONE, mTG_RETURN_CLOSE); sAdo_SysTrgStart(NA_SE_435); } @@ -3461,7 +3465,7 @@ static void mTG_send_proc(Submenu* submenu, mSM_MenuInfo_c* menu_info) { Mail_c* mail = &Now_Private->mail[idx]; Submenu_Item_c* item_p = submenu->item_p; - mail->content.font = mMl_FONT_0; + mail->content.font = mMl_FONT_RECV; mMl_copy_mail(&submenu->mail, mail); mMl_clear_mail(mail); item_p->slot_no = idx; @@ -3529,7 +3533,7 @@ static void mTG_nw_carpet_proc(Submenu* submenu, mSM_MenuInfo_c* menu_info) { inv_ovl->original_flag = TRUE; } - mTG_return_tag_init(submenu, mTG_TYPE_NONE, mTG_TYPE_NONE); + mTG_return_tag_init(submenu, mTG_TYPE_NONE, mTG_RETURN_CLOSE); mTG_close_window(submenu, menu_info, FALSE); } } @@ -3551,7 +3555,7 @@ static void mTG_carpet_proc(Submenu* submenu, mSM_MenuInfo_c* menu_info) { *item_p = item; } - mTG_return_tag_init(submenu, mTG_TYPE_NONE, mTG_TYPE_NONE); + mTG_return_tag_init(submenu, mTG_TYPE_NONE, mTG_RETURN_CLOSE); mTG_close_window(submenu, menu_info, FALSE); } } @@ -3601,7 +3605,7 @@ static void mTG_nw_cover_proc(Submenu* submenu, mSM_MenuInfo_c* menu_info) { inv_ovl->original_flag = TRUE; } - mTG_return_tag_init(submenu, mTG_TYPE_NONE, mTG_TYPE_NONE); + mTG_return_tag_init(submenu, mTG_TYPE_NONE, mTG_RETURN_CLOSE); mTG_close_window(submenu, menu_info, FALSE); } } @@ -3623,7 +3627,7 @@ static void mTG_cover_proc(Submenu* submenu, mSM_MenuInfo_c* menu_info) { *item_p = item; } - mTG_return_tag_init(submenu, mTG_TYPE_NONE, mTG_TYPE_NONE); + mTG_return_tag_init(submenu, mTG_TYPE_NONE, mTG_RETURN_CLOSE); mTG_close_window(submenu, menu_info, FALSE); } } @@ -3689,7 +3693,7 @@ static void mTG_music_takeout_proc(Submenu* submenu, mSM_MenuInfo_c* menu_info) mPr_SetPossessionItem(Now_Private, free_idx, ITM_MINIDISK_START + idx, mPr_ITEM_COND_NORMAL); } - mTG_return_tag_init(submenu, mTG_TYPE_NONE, mTG_TYPE_NONE); + mTG_return_tag_init(submenu, mTG_TYPE_NONE, mTG_RETURN_CLOSE); mTG_close_window(submenu, menu_info, TRUE); } else { mTG_open_warning_window(submenu, menu_info, mWR_WARNING_MUSIC); @@ -3707,7 +3711,7 @@ static void mTG_music_takeout_proc(Submenu* submenu, mSM_MenuInfo_c* menu_info) } } - mTG_return_tag_init(submenu, mTG_TYPE_NONE, mTG_TYPE_NONE); + mTG_return_tag_init(submenu, mTG_TYPE_NONE, mTG_RETURN_CLOSE); mTG_close_window(submenu, menu_info, TRUE); } else { mTG_open_warning_window(submenu, menu_info, mWR_WARNING_MUSIC); @@ -3776,7 +3780,7 @@ static void mTG_plant_proc(Submenu* submenu, mSM_MenuInfo_c* menu_info) { mTG_island_check_fruit_plant(plant_item); mPlib_request_main_putin_scoop_from_submenu(&inv_ovl->shovel_pos, Now_Private->inventory.pockets[idx], FALSE); mPr_SetPossessionItem(Now_Private, idx, EMPTY_NO, mPr_ITEM_COND_NORMAL); - mTG_return_tag_init(submenu, mTG_TYPE_NONE, mTG_TYPE_NONE); + mTG_return_tag_init(submenu, mTG_TYPE_NONE, mTG_RETURN_CLOSE); mTG_close_window(submenu, menu_info, TRUE); return; } else { @@ -3798,7 +3802,7 @@ static void mTG_plant_proc(Submenu* submenu, mSM_MenuInfo_c* menu_info) { mPr_SetPossessionItem(Now_Private, idx, EMPTY_NO, mPr_ITEM_COND_NORMAL); pos.y = mCoBG_GetBgY_OnlyCenter_FromWpos2(pos, 0.0f); sAdo_OngenTrgStart(NA_SE_2A, &pos); - mTG_return_tag_init(submenu, mTG_TYPE_NONE, mTG_TYPE_NONE); + mTG_return_tag_init(submenu, mTG_TYPE_NONE, mTG_RETURN_CLOSE); mTG_close_window(submenu, menu_info, TRUE); return; } @@ -3852,7 +3856,7 @@ static void mTG_field_put_proc(Submenu* submenu, mSM_MenuInfo_c* menu_info) { } if (put_cnt != 0) { - mTG_return_tag_init(submenu, mTG_TYPE_NONE, mTG_TYPE_NONE); + mTG_return_tag_init(submenu, mTG_TYPE_NONE, mTG_RETURN_CLOSE); mTG_close_window(submenu, menu_info, TRUE); } else if (bad_famicom_cnt != 0) { mTG_open_warning_window(submenu, menu_info, mWR_WARNING_PUT_FAMI); @@ -3883,7 +3887,7 @@ static void mTG_field_put_proc(Submenu* submenu, mSM_MenuInfo_c* menu_info) { mPr_SetPossessionItem(Now_Private, idx, EMPTY_NO, mPr_ITEM_COND_NORMAL); } - mTG_return_tag_init(submenu, mTG_TYPE_NONE, mTG_TYPE_NONE); + mTG_return_tag_init(submenu, mTG_TYPE_NONE, mTG_RETURN_CLOSE); mTG_close_window(submenu, menu_info, FALSE); } else { if (put_item == ITM_SIGNBOARD) { @@ -3922,7 +3926,7 @@ static void mTG_room_put_proc(Submenu* submenu, mSM_MenuInfo_c* menu_info) { ftrID = mTG_drop_furniture(play, put_item); if (ftrID >= 0) { mPr_SetPossessionItem(Now_Private, idx, EMPTY_NO, mPr_ITEM_COND_NORMAL); - mTG_return_tag_init(submenu, mTG_TYPE_NONE, mTG_TYPE_NONE); + mTG_return_tag_init(submenu, mTG_TYPE_NONE, mTG_RETURN_CLOSE); mTG_close_window(submenu, menu_info, FALSE); mMkRm_ReportChangePlayerRoom(); } else { @@ -3956,7 +3960,7 @@ static void mTG_room_put_proc(Submenu* submenu, mSM_MenuInfo_c* menu_info) { } if (cnt > 0) { - mTG_return_tag_init(submenu, mTG_TYPE_NONE, mTG_TYPE_NONE); + mTG_return_tag_init(submenu, mTG_TYPE_NONE, mTG_RETURN_CLOSE); mMkRm_ReportChangePlayerRoom(); mTG_close_window(submenu, menu_info, FALSE); } else { @@ -3969,7 +3973,7 @@ static void mTG_room_put_proc(Submenu* submenu, mSM_MenuInfo_c* menu_info) { if (mFI_Wpos2UtNum(&ux, &uz, ut_pos) && aMR_CLIP->judge_place_2nd_layer_proc(ux, uz) && mTG_common_throw_put_room(play, put_item, &ut_pos, mCoBG_LAYER1, 0)) { mPr_SetPossessionItem(Now_Private, idx, EMPTY_NO, mPr_ITEM_COND_NORMAL); - mTG_return_tag_init(submenu, mTG_TYPE_NONE, mTG_TYPE_NONE); + mTG_return_tag_init(submenu, mTG_TYPE_NONE, mTG_RETURN_CLOSE); mTG_close_window(submenu, menu_info, FALSE); mMkRm_ReportChangePlayerRoom(); return; @@ -3980,7 +3984,7 @@ static void mTG_room_put_proc(Submenu* submenu, mSM_MenuInfo_c* menu_info) { if (mTG_search_put_pos(player, &pos, FALSE, FALSE, 0, FALSE, FALSE) && mTG_common_throw_put_room(play, put_item, &pos, mCoBG_LAYER0, 0)) { mPr_SetPossessionItem(Now_Private, idx, EMPTY_NO, mPr_ITEM_COND_NORMAL); - mTG_return_tag_init(submenu, mTG_TYPE_NONE, mTG_TYPE_NONE); + mTG_return_tag_init(submenu, mTG_TYPE_NONE, mTG_RETURN_CLOSE); mMkRm_ReportChangePlayerRoom(); mTG_close_window(submenu, menu_info, FALSE); } else { @@ -4162,7 +4166,7 @@ static void mTG_catch_proc(Submenu* submenu, mSM_MenuInfo_c* menu_info) { } mTG_catch_item_from_table(submenu, mail_p, item_p, item_cond, cur_tag->table, idx); - mTG_return_tag_init(submenu, mTG_TYPE_NONE, mTG_TYPE_NONE); + mTG_return_tag_init(submenu, mTG_TYPE_NONE, mTG_RETURN_CLOSE); } } @@ -4347,7 +4351,8 @@ static int mTG_mark_main_sub(Submenu* submenu, int menu_type, int param, int tab if (menu_type == mSM_OVL_MAILBOX) { if (mail->present != EMPTY_NO || - (mail->content.font != mMl_FONT_2 && mail->content.font != mMl_FONT_4) || + (mail->content.font != mMl_FONT_RECV_READ && + mail->content.font != mMl_FONT_RECV_PLAYER_PRESENT_READ) || (mTG_mail_check(mail) & mTG_MAIL_FLAG_RECV) != mTG_MAIL_FLAG_RECV) { return FALSE; } @@ -4356,7 +4361,8 @@ static int mTG_mark_main_sub(Submenu* submenu, int menu_type, int param, int tab return FALSE; } } else { - if ((mail->content.font != mMl_FONT_2 && mail->content.font != mMl_FONT_4) || + if ((mail->content.font != mMl_FONT_RECV_READ && + mail->content.font != mMl_FONT_RECV_PLAYER_PRESENT_READ) || (mTG_mail_check(mail) & mTG_MAIL_FLAG_RECV) != mTG_MAIL_FLAG_RECV || (mTG_mail_check(mail) & mTG_MAIL_FLAG_PRESENT) == mTG_MAIL_FLAG_PRESENT) { return FALSE; @@ -4622,11 +4628,2049 @@ static void mTG_cancel_proc(Submenu* submenu, mSM_MenuInfo_c* menu_info) { inv_ovl->mail_mark_flag = 0; } - mTG_return_tag_init(submenu, mTG_TYPE_NONE, mTG_TYPE_FIELD_DEFAULT); + mTG_return_tag_init(submenu, mTG_TYPE_NONE, mTG_RETURN_KEEP); sAdo_SysTrgStart(MONO(NA_SE_3)); } } else { - mTG_return_tag_init(submenu, mTG_TYPE_NONE, mTG_TYPE_FIELD_DEFAULT); + mTG_return_tag_init(submenu, mTG_TYPE_NONE, mTG_RETURN_KEEP); sAdo_SysTrgStart(MONO(NA_SE_3)); } } + +static void mTG_read_proc(Submenu* submenu, mSM_MenuInfo_c* menu_info) { + Mail_c* mail; + + mTG_open_board_init(submenu, menu_info, -1, mSM_BD_OPEN_READ, -1); + mail = mTG_get_mail_pointer(submenu, NULL); + if (mail->content.font == mMl_FONT_RECV_PLAYER_PRESENT) { + mail->content.font = mMl_FONT_RECV_PLAYER_PRESENT_READ; + } else if (mail->content.font == mMl_FONT_RECV) { + mail->content.font = mMl_FONT_RECV_READ; + } + + mPr_SetItemCollectBit(ITM_PAPER_START + mail->content.paper_type); +} + +static void mTG_take_proc(Submenu* submenu, mSM_MenuInfo_c* menu_info) { + Submenu_Item_c* item_p = submenu->item_p; + int idx; + + if (menu_info->data0 == 4) { + idx = menu_info->data1; + } else { + idx = mTG_get_table_idx(&submenu->overlay->tag_ovl->tags[0]); + } + + item_p->item = Now_Private->inventory.pockets[idx]; + item_p->slot_no = idx; + submenu->selected_item_num = 1; + + mPr_SetPossessionItem(Now_Private, idx, EMPTY_NO, mPr_ITEM_COND_NORMAL); + + if (menu_info->data0 == 4) { + if (menu_info->data3 == 1) { + submenu->after_mode = aHOI_REQUEST_PUTAWAY; + } else if (ITEM_NAME_GET_TYPE(item_p->item) == NAME_TYPE_ITEM1) { + int category = ITEM_NAME_GET_CAT(item_p->item); + + if (category == ITEM1_CAT_FRUIT || category == ITEM1_CAT_FISH) { + submenu->after_mode = aHOI_REQUEST_EAT; + } else if (category == ITEM1_CAT_CLOTH) { + submenu->after_mode = aHOI_REQUEST_GET_PULL_WAIT; + } else { + submenu->after_mode = aHOI_REQUEST_PUTAWAY; + } + } else { + submenu->after_mode = aHOI_REQUEST_PUTAWAY; + } + } else if (menu_info->data3 == 2) { + submenu->after_mode = aHOI_REQUEST_GET_PULL_WAIT; + } else { + submenu->after_mode = aHOI_REQUEST_PUTAWAY; + } + + mPlib_request_main_give_from_submenu( + item_p->item, submenu->after_mode, + mPr_GET_ITEM_COND(Now_Private->inventory.item_conditions, item_p->slot_no) & mPr_ITEM_COND_PRESENT, FALSE); + mTG_close_window(submenu, menu_info, TRUE); +} + +static void mTG_m100_proc(Submenu* submenu, mSM_MenuInfo_c* menu_info) { + mTG_make_money_sack(submenu, menu_info, ITM_MONEY_100); +} + +static void mTG_m1000_proc(Submenu* submenu, mSM_MenuInfo_c* menu_info) { + mTG_make_money_sack(submenu, menu_info, ITM_MONEY_1000); +} + +static void mTG_m10000_proc(Submenu* submenu, mSM_MenuInfo_c* menu_info) { + mTG_make_money_sack(submenu, menu_info, ITM_MONEY_10000); +} + +static void mTG_m30000_proc(Submenu* submenu, mSM_MenuInfo_c* menu_info) { + mTG_make_money_sack(submenu, menu_info, ITM_MONEY_30000); +} + +static void mTG_1catch_proc(Submenu* submenu, mSM_MenuInfo_c* menu_info) { + mHD_Ovl_c* hand_ovl = submenu->overlay->hand_ovl; + mTG_tag_c* tag = &submenu->overlay->tag_ovl->tags[0]; + int idx = mTG_get_table_idx(tag); + mActor_name_t item = Now_Private->inventory.pockets[idx]; + + mTG_mark_main_CLR(submenu, menu_info); + if (ITEM_IS_WISP(item)) { + hand_ovl->info.next_act = mHD_ACTION_CLOSE; + hand_ovl->info.item = ITM_SPIRIT0; + hand_ovl->info.item_cond = mPr_GET_ITEM_COND(Now_Private->inventory.item_conditions, idx); + hand_ovl->info.hold_tbl = mTG_TABLE_ITEM; + hand_ovl->info.hold_idx = idx; + hand_ovl->info.catch_pg = 0; + Now_Private->inventory.pockets[idx] = item - 1; + } else if (ITEM_IS_PAPER(item)) { + int paper_idx = item - ITM_PAPER_START; + int paper_item = ITM_PAPER_START + PAPER2TYPE(paper_idx); + + hand_ovl->info.next_act = mHD_ACTION_CLOSE; + hand_ovl->info.item = paper_item; + hand_ovl->info.item_cond = mPr_GET_ITEM_COND(Now_Private->inventory.item_conditions, idx); + hand_ovl->info.hold_tbl = mTG_TABLE_ITEM; + hand_ovl->info.hold_idx = idx; + hand_ovl->info.catch_pg = 0; + Now_Private->inventory.pockets[idx] = paper_item + (PAPER2STACK(paper_idx) - 1) * PAPER_UNIQUE_NUM; + } else { + hand_ovl->info.next_act = mHD_ACTION_CLOSE; + hand_ovl->info.item = ITM_TICKET_START | (item & (0xF << 3)); + hand_ovl->info.item_cond = mPr_GET_ITEM_COND(Now_Private->inventory.item_conditions, idx); + hand_ovl->info.hold_tbl = mTG_TABLE_ITEM; + hand_ovl->info.hold_idx = idx; + hand_ovl->info.catch_pg = 0; + Now_Private->inventory.pockets[idx] = item - 1; + } + + mTG_return_tag_init(submenu, mTG_TYPE_NONE, mTG_RETURN_CLOSE); + mTG_init_tag_data_item_win(submenu); + sAdo_SysTrgStart(NA_SE_33); +} + +static void mTG_order_proc(Submenu* submenu, mSM_MenuInfo_c* menu_info) { + mCL_Ovl_c* catalog_ovl = submenu->overlay->catalog_ovl; + Submenu_Item_c* item_p = submenu->item_p; + mCL_Menu_c* menu_p = &catalog_ovl->menu_data[catalog_ovl->page_order[0]]; + + item_p->item = mRmTp_FtrItemNo2Item1ItemNo(menu_p->item_list[menu_p->top_idx + menu_p->y_idx], TRUE); + submenu->selected_item_num = 1; + if (catalog_ovl->item_data[catalog_ovl->item_data_idx].price == 0) { + item_p->slot_no = 0; + } else { + item_p->slot_no = 1; + } + + mTG_close_window(submenu, menu_info, TRUE); +} + +static void mTG_bury_proc(Submenu* submenu, mSM_MenuInfo_c* menu_info) { + mIV_Ovl_c* inv_ovl = submenu->overlay->inventory_ovl; + mTG_tag_c* tag = &submenu->overlay->tag_ovl->tags[0]; + int idx = mTG_get_table_idx(tag); + mActor_name_t item = Now_Private->inventory.pockets[idx]; + + mTG_island_check_plant_plant(item); + mTG_island_check_fruit_plant(item); + + if (!mFI_CheckInIsland() || + (!mSP_SearchItemCategoryPriority(item, mSP_KIND_FURNITURE, mSP_LISTTYPE_HOMEPAGE, NULL) && + !mSP_SearchItemCategoryPriority(item, mSP_KIND_FURNITURE, mSP_LISTTYPE_SPECIALPRESENT, NULL))) { + mPlib_request_main_putin_scoop_from_submenu(&inv_ovl->shovel_pos, item, FALSE); + mPr_SetPossessionItem(Now_Private, idx, EMPTY_NO, mPr_ITEM_COND_NORMAL); + mTG_return_tag_init(submenu, mTG_TYPE_NONE, mTG_RETURN_CLOSE); + mTG_close_window(submenu, menu_info, TRUE); + } else { + mTG_open_warning_window(submenu, menu_info, mWR_WARNING_PUT_FAMI); + } +} + +static void mTG_insect_release_sub(mActor_name_t item, int gold_scoop) { + if (ITEM_IS_WISP(item)) { + mPlib_request_main_release_creature_insect_from_submenu(aSOI_INSECT_TYPE_SPIRIT, gold_scoop); + } else { + mPlib_request_main_release_creature_insect_from_submenu(ITEM_IS_INSECT(item) ? item - ITM_INSECT_START : 0, + gold_scoop); + } +} + +static void mTG_insect_release_demo_gold_scoop(mActor_name_t item) { + mTG_insect_release_sub(item, TRUE); +} + +static void mTG_insect_release(mActor_name_t item) { + mTG_insect_release_sub(item, FALSE); +} + +static void mTG_release_proc(Submenu* submenu, mSM_MenuInfo_c* menu_info) { + int idx = mTG_get_table_idx(&submenu->overlay->tag_ovl->tags[0]); + mActor_name_t item = Now_Private->inventory.pockets[idx]; + GAME_PLAY* play = (GAME_PLAY*)gamePT; + ACTOR* player = GET_PLAYER_ACTOR_ACTOR(play); + s16 angle_y; + Submenu_Item_c* item_p = submenu->item_p; + + item_p->slot_no = idx; + item_p->item = item; + submenu->selected_item_num = 1; + + if (menu_info->data0 == 13) { + mPr_SetPossessionItem(Now_Private, idx, (mActor_name_t)menu_info->data1, mPr_ITEM_COND_NORMAL); + angle_y = (s16)menu_info->data3; + } else { + mPr_SetPossessionItem(Now_Private, idx, EMPTY_NO, mPr_ITEM_COND_NORMAL); + angle_y = player->shape_info.rotation.y; + } + + mTG_return_tag_init(submenu, mTG_TYPE_NONE, mTG_RETURN_CLOSE); + mTG_close_window(submenu, menu_info, TRUE); + + if (ITEM_NAME_GET_CAT(item) == ITEM1_CAT_FISH) { + xyz_t_move(&submenu->water_pos, &submenu->overlay->inventory_ovl->release_pos); + mPlib_request_main_release_creature_gyoei_from_submenu(angle_y, item, FALSE); + } else if (ITEM_IS_WISP(item)) { + int wisp_count = ITEM_IS_WISP(item) ? 1 + (item - ITM_SPIRIT0) : 0; + + if (wisp_count >= 2) { + mPr_SetPossessionItem(Now_Private, idx, ITM_SPIRIT0 + (wisp_count - 2), mPr_ITEM_COND_NORMAL); + } else { + mPr_SetPossessionItem(Now_Private, idx, EMPTY_NO, + mPr_ITEM_COND_NORMAL); // @cleanup - we already cleared the item before + } + mTG_insect_release(ITM_SPIRIT0); + } else { + mTG_insect_release(item); + } +} + +static void mTG_fly_proc(Submenu* submenu, mSM_MenuInfo_c* menu_info) { + int idx = mTG_get_table_idx(&submenu->overlay->tag_ovl->tags[0]); + mActor_name_t item = Now_Private->inventory.pockets[idx]; + // @cleanup - copy-paste leftovers, we don't need player or angle + GAME_PLAY* play = (GAME_PLAY*)gamePT; + ACTOR* player = GET_PLAYER_ACTOR_ACTOR(play); + s16 angle_y; + Submenu_Item_c* item_p = submenu->item_p; + + item_p->slot_no = idx; + item_p->item = item; + submenu->selected_item_num = 1; + + if (menu_info->data0 == 13) { + mPr_SetPossessionItem(Now_Private, idx, (mActor_name_t)menu_info->data1, mPr_ITEM_COND_NORMAL); + angle_y = (s16)menu_info->data3; + } else { + mPr_SetPossessionItem(Now_Private, idx, EMPTY_NO, mPr_ITEM_COND_NORMAL); + angle_y = player->shape_info.rotation.y; + } + + mTG_return_tag_init(submenu, mTG_TYPE_NONE, mTG_RETURN_CLOSE); + mTG_close_window(submenu, menu_info, TRUE); + + mPlib_request_main_release_creature_balloon_from_submenu(item, FALSE); +} + +static void mTG_exchange_proc(Submenu* submenu, mSM_MenuInfo_c* menu_info) { + GAME_PLAY* play = (GAME_PLAY*)gamePT; + ACTOR* player = GET_PLAYER_ACTOR_ACTOR(play); + int sfx = NA_SE_31; + + if (!mTG_check_hand_condition(submenu)) { + mActor_name_t item = (mActor_name_t)submenu->overlay->hand_ovl->info.item; + int demo_gold_scoop = FALSE; + int type = ITEM_NAME_GET_TYPE(item); + int category = ITEM_NAME_GET_CAT(item); + + mTG_mark_main(submenu, menu_info, mTG_MARK_OFF, NULL); + if (submenu->overlay->hand_ovl->info.item_cond == mPr_ITEM_COND_PRESENT) { + switch (item) { + case ITM_GOLDEN_NET: + item = ITM_GOLDEN_NET_PRESENT; + break; + case ITM_GOLDEN_AXE: + item = ITM_GOLDEN_AXE_PRESENT; + break; + case ITM_GOLDEN_SHOVEL: + item = ITM_GOLDEN_SHOVEL_PRESENT; + break; + case ITM_GOLDEN_ROD: + item = ITM_GOLDEN_ROD_PRESENT; + break; + default: + item = ITM_PRESENT; + break; + } + } + + if (mPlib_Check_golden_item_get_demo_end(mPlayer_GOLDEN_ITEM_TYPE_SHOVEL) == FALSE && + ITEM_IS_GOLD_SCOOP(menu_info->data1) && !ITEM_IS_GOLD_SCOOP(item)) { + demo_gold_scoop = TRUE; + } + + if (type == NAME_TYPE_ITEM1 && category == ITEM1_CAT_FISH) { + mPlib_request_main_release_creature_gyoei_from_submenu((s16)menu_info->data3, item, demo_gold_scoop); + } else if (type == NAME_TYPE_ITEM1 && category == ITEM1_CAT_INSECT) { + if (demo_gold_scoop) { + mTG_insect_release_demo_gold_scoop(item); + } else { + mTG_insect_release(item); + } + } else if (ITEM_IS_BALLOON(item)) { + mPlib_request_main_release_creature_balloon_from_submenu(item, demo_gold_scoop); + } else { + xyz_t pos; + + if (!mFI_CheckInIsland() || + (!mSP_SearchItemCategoryPriority(item, mSP_KIND_FURNITURE, mSP_LISTTYPE_HOMEPAGE, NULL) && + !mSP_SearchItemCategoryPriority(item, mSP_KIND_FURNITURE, mSP_LISTTYPE_SPECIALPRESENT, NULL))) { + if (mTG_search_put_pos(player, &pos, item == ITM_SIGNBOARD, 0, item == ITM_SIGNBOARD, FALSE, + item == ITM_SIGNBOARD) && + mTG_common_throw_put_field(play, item, &pos, mCoBG_LAYER0)) { + if (demo_gold_scoop) { + mPlib_request_main_demo_get_golden_item_from_submenu(); + } else { + mPlib_request_main_wait_from_submenu(); + sfx = -1; + mPlib_request_main_wait_from_submenu(); + } + } else { + if (menu_info->data2 != NULL && + (ITEM_IS_SCOOP(Now_Private->equipment) || ITEM_IS_GOLD_SCOOP(Now_Private->equipment))) { + mTG_island_check_plant_plant(item); + mTG_island_check_fruit_plant(item); + mPlib_request_main_putin_scoop_from_submenu((xyz_t*)menu_info->data2, item, demo_gold_scoop); + } else if (item == ITM_SIGNBOARD) { + mTG_open_warning_window(submenu, menu_info, mWR_WARNING_PUT_SIGN); + return; + } else { + mTG_open_warning_window(submenu, menu_info, mWR_WARNING_PUT_ITEM); + return; + } + } + } else { + mTG_open_warning_window(submenu, menu_info, mWR_WARNING_PUT_FAMI); + return; + } + } + } else { + int demo_gold_scoop = FALSE; + + if (mPlib_Check_golden_item_get_demo_end(mPlayer_GOLDEN_ITEM_TYPE_SHOVEL) == FALSE && + ITEM_IS_GOLD_SCOOP(menu_info->data1)) { + demo_gold_scoop = TRUE; + } + + if (demo_gold_scoop) { + mPlib_request_main_demo_get_golden_item_from_submenu(); + } else { + mPlib_request_main_wait_from_submenu(); + } + } + + submenu->overlay->move_chg_base_proc(menu_info, mSM_MOVE_OUT_RIGHT); + if (sfx >= 0) { + sAdo_SysTrgStart(sfx); + } +} + +static void mTG_hukubukuro_open_proc(Submenu* submenu, mSM_MenuInfo_c* menu_info) { + int free_idx[3]; + mActor_name_t items[3]; + int idx; + int t_idx; + int i; + int j; + int count; + mActor_name_t* item_p; + mIV_Ovl_c* inv_ovl; + mActor_name_t huku_item; + int rng; + int pinwheel_flag; + int rng1; + int rng2; + + item_p = Now_Private->inventory.pockets; + count = 0; + idx = mTG_get_table_idx(&submenu->overlay->tag_ovl->tags[0]); + for (i = 0; i < mPr_POCKETS_SLOT_COUNT; i++, item_p++) { + if (*item_p == EMPTY_NO) { + free_idx[count++] = i; + if (count == 3) { + break; + } + } + } + + if (count != 3) { + mTG_open_warning_window(submenu, menu_info, mWR_WARNING_HUKUBUKURO_OPEN); + } else { + inv_ovl = submenu->overlay->inventory_ovl; + huku_item = Now_Private->inventory.pockets[idx]; + inv_ovl->remove_timer = 70; + inv_ovl->item_scale_type[idx] = mIV_ITEM_SCALE_TYPE_SHRINK; + + if (huku_item == ITM_HUKUBUKURO_BAG) { + // Nook sale day grab bag + pinwheel_flag = FALSE; + rng = RANDOM(3) % 3; // @cleanup - why do we modulo 3 when we're already bound to three? + + for (i = 0; i < 3; i++) { + if (i == rng && fqrand() <= 0.5f) { + pinwheel_flag = TRUE; + } + + if (pinwheel_flag) { + int rng2 = RANDOM(8.0f) % 8; // @cleanup - again, why are we taking the modulus here? + + pinwheel_flag = FALSE; + items[i] = ITM_YELLOW_PINWHEEL + rng2; + } else { + int category; + f32 rngf = fqrand(); + + /* Equal 25% chance of the following */ + if (rngf < 0.25f) { + category = mSP_KIND_CLOTH; + } else if (rngf < 0.5f) { + category = mSP_KIND_CARPET; + } else if (rngf < 0.75f) { + category = mSP_KIND_WALLPAPER; + } else { + category = mSP_KIND_FURNITURE; + } + + mSP_SelectRandomItem_New(NULL, &items[i], 1, items, i, category, mSP_LISTTYPE_RARE, FALSE); + } + } + } else { + items[0] = ITM_MINIDISK35; // K.K. Love Song + rng1 = RANDOM(mSP_GC_FAMICOM_TABLE_CNT) % + mSP_GC_FAMICOM_TABLE_CNT; // @cleanup - again with the unnecessary modulus + rng2 = RANDOM(mSP_GC_FAMICOM_TABLE_CNT - 1) % + (mSP_GC_FAMICOM_TABLE_CNT - 1); // @cleanup - tired of repeating myself + if (rng2 >= rng1) { + rng2++; // ensure we don't land on the same famicom twice + } + + items[1] = mSP_gc_famicom_table[rng1]; + items[2] = mSP_gc_famicom_table[rng2]; + } + + /* Give items */ + for (j = 0; j < 3; j++) { + t_idx = free_idx[j]; + mPr_SetPossessionItem(Now_Private, t_idx, items[j], mPr_ITEM_COND_NORMAL); + inv_ovl->item_scale_type[t_idx] = mIV_ITEM_SCALE_TYPE_GROW + j; + } + + mTG_return_tag_init(submenu, mTG_TYPE_NONE, mTG_RETURN_CLOSE); + sAdo_SysTrgStart(NA_SE_MENU_EXIT); + } +} + +static void mTG_cp_data_delete_proc(Submenu* submenu, mSM_MenuInfo_c* menu_info) { + // @stubbed - only used in N64 version for controller pak management +} + +static void mTG_nw_room_put_proc(Submenu* submenu, mSM_MenuInfo_c* menu_info, int type) { + mIV_Ovl_c* inv_ovl = submenu->overlay->inventory_ovl; + GAME_PLAY* play = (GAME_PLAY*)gamePT; + // @cleanup - we don't need the player here + ACTOR* player = GET_PLAYER_ACTOR_ACTOR(play); + int idx = mTG_get_table_idx(&submenu->overlay->tag_ovl->tags[0]); + int res = mTG_nw_drop_furniture(play, type, mNW_get_image_no(submenu, idx)); + + if (res >= 0) { + if (inv_ovl != NULL) { + inv_ovl->original_flag = TRUE; + } + + mTG_return_tag_init(submenu, mTG_TYPE_NONE, mTG_RETURN_CLOSE); + mTG_close_window(submenu, menu_info, TRUE); + mMkRm_ReportChangePlayerRoom(); + } else if (res == aMR_JUDGE_MAX_FTR) { + mTG_open_warning_window(submenu, menu_info, mWR_WARNING_PUT_MAX_FURNITURE); + } else { + mTG_open_warning_window(submenu, menu_info, mWR_WARNING_PUT_FURNITURE); + } +} + +static void mTG_nw_room_put_manekin_proc(Submenu* submenu, mSM_MenuInfo_c* menu_info) { + mTG_nw_room_put_proc(submenu, menu_info, mNW_TYPE_MANEKIN); +} + +static void mTG_nw_stk_pat_proc(Submenu* submenu, mSM_MenuInfo_c* menu_info) { + mTG_tag_c* tag = &submenu->overlay->tag_ovl->tags[2]; + + switch (tag->tag_row) { + case 2: + mTG_nw_cover_proc(submenu, menu_info); + break; + case 3: + mTG_nw_carpet_proc(submenu, menu_info); + break; + } +} + +static void mTG_tag_remove_proc(Submenu* submenu, mSM_MenuInfo_c* menu_info) { + mTG_tag_c* tag = &submenu->overlay->tag_ovl->tags[0]; + + if (tag->table == mTG_TABLE_PLAYER) { + mTG_catch_proc(submenu, menu_info); + } +} + +static void mTG_nw_room_put_umbrella_proc(Submenu* submenu, mSM_MenuInfo_c* menu_info) { + mTG_nw_room_put_proc(submenu, menu_info, mNW_TYPE_UMBRELLA); +} + +static void mTG_nw_st_umbrella_proc(Submenu* submenu, mSM_MenuInfo_c* menu_info) { + mHD_Ovl_c* hand_ovl = submenu->overlay->hand_ovl; + mTG_tag_c* tag = &submenu->overlay->tag_ovl->tags[0]; + int idx = mTG_get_table_idx(tag); + + if (mPr_GetPossessionItemIdx(Now_Private, EMPTY_NO) >= 0 || + (ITEM_IS_MYUMBRELLA_TOOL(Now_Private->equipment) || Now_Private->equipment == EMPTY_NO)) { + hand_ovl->info.next_act = mHD_ACTION_SASU2; + hand_ovl->info.item = ITM_MY_ORG_UMBRELLA0 + mNW_get_image_no(submenu, idx); + hand_ovl->info.hold_tbl = mTG_TABLE_NUM; + + mTG_return_tag_init(submenu, mTG_TYPE_NONE, mTG_RETURN_CLOSE); + submenu->overlay->segment.change_player_main_anime_idx = mIV_ANIM_CATCH; + hand_ovl->info.wait_timer = 14; + sAdo_SysTrgStart(NA_SE_5E); + } else { + mTG_open_warning_window(submenu, menu_info, mWR_WARNING_ORIGINAL); + } +} + +static void mTG_nw_st_wear_proc(Submenu* submenu, mSM_MenuInfo_c* menu_info) { + mHD_Ovl_c* hand_ovl = submenu->overlay->hand_ovl; + + if (mPr_GetPossessionItemIdx(Now_Private, EMPTY_NO) >= 0 || ITEM_IS_RSVCLOTH(Now_Private->cloth.item)) { + hand_ovl->info.next_act = mHD_ACTION_SASU2; + hand_ovl->info.item = RSV_CLOTH; + hand_ovl->info.hold_tbl = mTG_TABLE_NUM; + + mTG_return_tag_init(submenu, mTG_TYPE_NONE, mTG_RETURN_CLOSE); + submenu->overlay->segment.change_player_main_anime_idx = mIV_ANIM_CHANGE; + sAdo_SysTrgStart(NA_SE_WEAR); + } else { + mTG_open_warning_window(submenu, menu_info, mWR_WARNING_ORIGINAL); + } +} + +static void mTG_change_original_proc(Submenu* submenu, mSM_MenuInfo_c* menu_info) { + mNW_Ovl_c* needlework_ovl = submenu->overlay->needlework_ovl; + mCO_Ovl_c* cporiginal_ovl = submenu->overlay->cporiginal_ovl; + int needlework_mark_num; + int needlework_clear_num; + int cporiginal_mark_num; + int cporiginal_clear_num; + int i; + + needlework_mark_num = 0; + for (i = 0; i < mPr_ORIGINAL_DESIGN_COUNT; i++) { + if (mNW_check_mark_flg(submenu, i)) { + needlework_mark_num++; + } + } + + cporiginal_mark_num = 0; + for (i = 0; i < mCO_ORIGINAL_NUM; i++) { + if (mCO_check_mark_flg(submenu, i)) { + cporiginal_mark_num++; + } + } + + needlework_clear_num = 0; + cporiginal_clear_num = 0; + + if (needlework_mark_num > cporiginal_mark_num) { + needlework_clear_num = needlework_mark_num - cporiginal_mark_num; + } + + if (!(needlework_mark_num > cporiginal_mark_num)) { + cporiginal_clear_num = cporiginal_mark_num - needlework_mark_num; + } + + if (needlework_mark_num == 0 || cporiginal_mark_num == 0) { + needlework_ovl->mark_flg = 0; + cporiginal_ovl->mark_flg = 0; + sAdo_SysTrgStart(MONO(NA_SE_A)); + } else { + mTG_Ovl_c* tag_ovl; + int n; + + if (needlework_clear_num > 0) { + n = 0; + for (i = mPr_ORIGINAL_DESIGN_COUNT - 1; n < needlework_clear_num && i >= 0; i--) { + if (mNW_check_mark_flg(submenu, i)) { + needlework_ovl->mark_flg &= ~(1 << i); + n++; + } + } + } + + if (cporiginal_clear_num > 0) { + n = 0; + for (i = mCO_ORIGINAL_NUM - 1; n < cporiginal_clear_num && i >= 0; i--) { + if (mCO_check_mark_flg(submenu, i)) { + cporiginal_ovl->mark_flg &= ~(1 << i); + n++; + } + } + } + + tag_ovl = submenu->overlay->tag_ovl; + tag_ovl->needlework_mark_flg = needlework_ovl->mark_flg; + tag_ovl->cporiginal_mark_flg = cporiginal_ovl->mark_flg; + tag_ovl->needlework_mark_max = mPr_ORIGINAL_DESIGN_COUNT; + tag_ovl->cporiginal_mark_max = mCO_ORIGINAL_NUM; + tag_ovl->change_original_mark_mode = mTG_CHANGE_ORIGINAL_MARK_DECIDE; + + sAdo_SysTrgStart(NA_SE_MENU_EXIT); + + needlework_ovl->mark_flg = 0; + cporiginal_ovl->mark_flg = 0; + } + + mTG_return_tag_init(submenu, mTG_TYPE_NONE, mTG_RETURN_CLOSE); +} + +static void mTG_mv_priceSet(Submenu* submenu, mSM_MenuInfo_c* menu_info, mTG_tag_c* tag) { + static int add_data[] = { 10000, 1000, 100, 10, 1 }; + u32 trigger = submenu->overlay->menu_control.trigger; + int price = submenu->overlay->haniwa_ovl->price; + + if ((trigger & (BUTTON_B | BUTTON_START | BUTTON_Y)) != 0) { + mTG_Ovl_c* tag_ovl = submenu->overlay->tag_ovl; + mTG_tag_c* last_tag = &tag_ovl->tags[tag_ovl->sel_tag_idx - 1]; + + mTG_return_tag_init(submenu, last_tag->type, mTG_RETURN_KEEP); + sAdo_SysTrgStart(MONO(NA_SE_3)); + } else if ((trigger & BUTTON_A) != 0) { + if (price == 0) { + mTG_set_trade_cond(submenu, menu_info, mHm_HANIWA_TRADE_0, 0); + } else { + mTG_set_trade_cond(submenu, menu_info, mHm_HANIWA_TRADE_2, price); + } + } else if ((trigger & (BUTTON_CUP | BUTTON_CDOWN)) != 0) { + if ((trigger & BUTTON_CDOWN) != 0) { + price -= add_data[tag->tag_col]; + if (price < 0) { + price = 0; + } else { + sAdo_SysTrgStart(NA_SE_426); + } + } else { + price += add_data[tag->tag_col]; + if (price > 99999) { + price = 99999; + } else { + sAdo_SysTrgStart(NA_SE_426); + } + } + + submenu->overlay->haniwa_ovl->price = price; + } else if ((trigger & (BUTTON_CLEFT | BUTTON_CRIGHT)) != 0) { + if ((trigger & BUTTON_CLEFT) != 0) { + if (tag->tag_col > 0) { + tag->tag_col--; + sAdo_SysTrgStart(NA_SE_CURSOL); + } + } else { + if (tag->tag_col < 4) { + tag->tag_col++; + sAdo_SysTrgStart(NA_SE_CURSOL); + } + } + } +} + +static void mTG_change_mail(Mail_c* mail_a, Mail_c* mail_b) { + Mail_c tmp_mail; + + mMl_copy_mail(&tmp_mail, mail_a); + mMl_copy_mail(mail_a, mail_b); + mMl_copy_mail(mail_b, &tmp_mail); +} + +static void mTG_change_mail2(s16 field_a, Mail_c* mail_a, s16 field_b, Mail_c* mail_b) { + if (field_a != mTG_MARK_IDX_UNSET && field_b != mTG_MARK_IDX_UNSET) { + mTG_change_mail(mail_a, mail_b); + } +} + +static void mTG_change_mail3(s16 idx0, s16 idx1, Mail_c* mail0, Mail_c* mail1, s16 idx2, s16 idx3, Mail_c* mail2, + Mail_c* mail3) { + if (idx0 < idx1) { + if (idx2 < idx3) { + mTG_change_mail2(idx0, mail0, idx2, mail2); + } else { + mTG_change_mail2(idx0, mail0, idx3, mail3); + mTG_change_mail2(idx0, mail0, idx2, mail2); + } + } else { + if (idx2 < idx3) { + mTG_change_mail2(idx1, mail1, idx2, mail2); + mTG_change_mail2(idx0, mail0, idx2, mail2); + } else { + mTG_change_mail2(idx1, mail1, idx2, mail2); + mTG_change_mail2(idx0, mail0, idx3, mail3); + } + } +} + +static f32 mIV_get_win_posY(Submenu* submenu, mSM_MenuInfo_c* menu_info, int page_idx) { + if (page_idx == submenu->overlay->inventory_ovl->next_page_id) { + return menu_info->position[1]; + } else { + return -menu_info->position[1]; + } +} + +static void mTG_cpack_change_mail_mark_move(Submenu* submenu, mIV_Ovl_c* inv_ovl, mCM_Ovl_c* cpmail_ovl, int mark_idx) { + mTG_Ovl_c* tag_ovl = submenu->overlay->tag_ovl; + mTG_cpmail_mark_c* cpmail_mark = &tag_ovl->cpmail_mark[mark_idx]; + + if ((cpmail_mark->_4A & 3) == 3) { + int i; + + tag_ovl->_2F4[0]._00 = 0; + tag_ovl->_2F4[1]._00 = 0; + // clang-format off + mTG_change_mail3( + cpmail_mark->idx_tbl[0], cpmail_mark->idx_tbl[1], cpmail_mark->mail_tbl[0], cpmail_mark->mail_tbl[1], + cpmail_mark->idx_tbl[2], cpmail_mark->idx_tbl[3], cpmail_mark->mail_tbl[2], cpmail_mark->mail_tbl[3] + ); + // clang-format on + + if (cpmail_mark->idx_tbl[0] != mTG_MARK_IDX_UNSET) { + inv_ovl->mail_mark_bitfield &= ~(1 << cpmail_mark->idx_tbl[0]); + } + + if (cpmail_mark->idx_tbl[1] != mTG_MARK_IDX_UNSET) { + inv_ovl->mail_mark_bitfield &= ~(1 << cpmail_mark->idx_tbl[1]); + } + + if (cpmail_mark->idx_tbl[2] != mTG_MARK_IDX_UNSET) { + cpmail_ovl->mark_bitfield2 &= ~(1 << cpmail_mark->idx_tbl[2]); + } + + if (cpmail_mark->idx_tbl[3] != mTG_MARK_IDX_UNSET) { + cpmail_ovl->mark_bitfield2 &= ~(1 << cpmail_mark->idx_tbl[3]); + } + + // Clear primary bitfields + if (cpmail_mark->idx_tbl[0] != mTG_MARK_IDX_UNSET) { + inv_ovl->mail_mark_bitfield2 &= ~(1 << cpmail_mark->idx_tbl[0]); + } + + if (cpmail_mark->idx_tbl[2] != mTG_MARK_IDX_UNSET) { + cpmail_ovl->mark_bitfield &= ~(1 << cpmail_mark->idx_tbl[2]); + } + + for (i = 0; i < 4; i++) { + cpmail_mark->idx_tbl[i] = mTG_MARK_IDX_UNSET; + cpmail_mark->mail_tbl[i] = NULL; + } + + sAdo_SysTrgStart(NA_SE_446); + cpmail_mark->mode = mTG_CHANGE_MAIL_MARK_DECIDE; + mTG_init_tag_data_item_win(submenu); + } else { + mTG_cpmail_mark_pos_c* pos_p; + int i; + + add_calc(&tag_ovl->_370, 1.0f, 1.0f - sqrtf(0.5f), 0.175f, 0.005f); + for (i = 0; i < 2; i++) { + pos_p = &tag_ovl->_2F4[i]; + + if ((cpmail_mark->_4A & (1 << i)) != 0) { + pos_p->_00 = 0; + } else { + f32 x0; + f32 y0; + f32 y1; + f32 x1; + f32 tmp; + + x0 = cpmail_mark->_20[i][0]; + y0 = cpmail_mark->_20[i][1]; + x1 = cpmail_mark->_30[i][0]; + y1 = cpmail_mark->_30[i][1]; + tmp = tag_ovl->_370; + + if (1.0f - tmp <= 0.01f) { + pos_p->pos[0] = x1; + pos_p->pos[1] = y1; + cpmail_mark->_4A |= (1 << i); + } else { + pos_p->pos[0] = x0 + (x1 - x0) * tmp; + pos_p->pos[1] = y0 + (y1 - y0) * tag_ovl->_370; + pos_p->_00 = cpmail_mark->_00[i]; + } + } + } + + mTG_init_tag_data_item_win(submenu); + } +} + +static void mTG_cpack_change_mail_mark_decide(Submenu* submenu, mIV_Ovl_c* inv_ovl, mCM_Ovl_c* cpmail_ovl, + int mark_idx) { + static int table_no[] = { mTG_TABLE_MAIL, mTG_TABLE_CPMAIL }; + int k; + int j; + mTG_Ovl_c* tag_ovl = submenu->overlay->tag_ovl; + s16 inv_move_idx; + s16 cpmail_move_idx; + s16 inv_free_idx; + s16 cpmail_free_idx; + Mail_c* inv_mail; + Mail_c* cpmail_mail; + int cpmail_top_page = cpmail_ovl->page_order[0]; + s16 i; + Mail_c* inv_move_mail; + Mail_c* cpmail_move_mail; + Mail_c* inv_free_mail; + Mail_c* cpmail_free_mail; + mTG_cpmail_mark_c* cpmail_mark; // = &tag_ovl->cpmail_mark[mark_idx]; + s16 mail_idx1[2]; + s16 mail_idx0[2]; + Mail_c* mail_tbl1[2]; + Mail_c* mail_tbl0[2]; + mSM_MenuInfo_c* inv_menu; + mSM_MenuInfo_c* cpmail_menu; + + inv_mail = Now_Private->mail; + inv_move_idx = -1; + inv_free_idx = -1; + inv_move_mail = NULL; + inv_free_mail = NULL; + for (i = 0; i < mPr_INVENTORY_MAIL_COUNT; i++, inv_mail++) { + if (inv_move_idx < 0 && (inv_ovl->mail_mark_bitfield2 & (1 << i)) != 0) { + inv_move_idx = i; + inv_move_mail = inv_mail; + } else if (inv_free_idx < 0 && mMl_check_not_used_mail(inv_mail)) { + inv_free_idx = i; + inv_free_mail = inv_mail; + } + + if (inv_move_idx >= 0 && inv_free_idx >= 0) { + break; + } + } + + cpmail_mail = cpmail_ovl->card_mail->mail[cpmail_top_page]; + cpmail_move_idx = -1; + cpmail_free_idx = -1; + cpmail_move_mail = NULL; + cpmail_free_mail = NULL; + for (i = 0; i < mCM_MAIL_COUNT; i++, cpmail_mail++) { + if (cpmail_move_idx < 0 && (cpmail_ovl->mark_bitfield & (1 << i)) != 0) { + cpmail_move_mail = cpmail_mail; + cpmail_move_idx = i; + } else if (cpmail_free_idx < 0 && mMl_check_not_used_mail(cpmail_mail)) { + cpmail_free_mail = cpmail_mail; + cpmail_free_idx = i; + } + + if (cpmail_free_idx >= 0 && cpmail_move_idx >= 0) { + break; + } + } + + if (inv_move_idx < 0) { + cpmail_free_idx = -1; + cpmail_free_mail = NULL; + } + + if (cpmail_move_idx < 0) { + inv_free_idx = -1; + inv_free_mail = NULL; + } + + for (j = 0; j < 2; j++) { + mail_idx1[j] = mTG_MARK_IDX_UNSET; + mail_idx0[j] = mTG_MARK_IDX_UNSET; + mail_tbl1[j] = NULL; + mail_tbl0[j] = NULL; + } + + if (inv_move_idx < 0) { + inv_move_idx = mTG_MARK_IDX_UNSET; + inv_move_mail = NULL; + } + + mail_idx1[0] = inv_move_idx; + mail_idx0[1] = inv_move_idx; + mail_tbl1[0] = inv_move_mail; + mail_tbl0[1] = inv_move_mail; + + if (inv_free_idx >= 0) { + if (inv_free_idx < inv_move_idx) { + mail_idx0[1] = inv_free_idx; + mail_tbl0[1] = inv_free_mail; + } else { + inv_free_idx = mTG_MARK_IDX_UNSET; + inv_free_mail = NULL; + } + } else { + inv_free_idx = mTG_MARK_IDX_UNSET; + inv_free_mail = NULL; + } + + if (cpmail_move_idx < 0) { + cpmail_move_idx = mTG_MARK_IDX_UNSET; + cpmail_move_mail = NULL; + } + + mail_idx1[1] = cpmail_move_idx; + mail_idx0[0] = cpmail_move_idx; + mail_tbl1[1] = cpmail_move_mail; + mail_tbl0[0] = cpmail_move_mail; + + if (cpmail_free_idx >= 0) { + if (cpmail_free_idx < cpmail_move_idx) { + mail_idx0[0] = cpmail_free_idx; + mail_tbl0[0] = cpmail_free_mail; + } else { + cpmail_free_idx = mTG_MARK_IDX_UNSET; + cpmail_free_mail = NULL; + } + } else { + cpmail_free_idx = mTG_MARK_IDX_UNSET; + cpmail_free_mail = NULL; + } + + cpmail_mark = &tag_ovl->cpmail_mark[mark_idx]; + + cpmail_mark->mail_tbl[0] = inv_move_mail; + cpmail_mark->mail_tbl[1] = inv_free_mail; + cpmail_mark->mail_tbl[2] = cpmail_move_mail; + cpmail_mark->mail_tbl[3] = cpmail_free_mail; + + cpmail_mark->idx_tbl[0] = inv_move_idx; + cpmail_mark->idx_tbl[1] = inv_free_idx; + cpmail_mark->idx_tbl[2] = cpmail_move_idx; + cpmail_mark->idx_tbl[3] = cpmail_free_idx; + + tag_ovl->_370 = 0.0f; + cpmail_mark->_4A = 0b11; // 3 + cpmail_mark->mode = mTG_CHANGE_MAIL_MARK_MOVE; + + inv_menu = &submenu->overlay->menu_info[mSM_OVL_INVENTORY]; + cpmail_menu = &submenu->overlay->menu_info[mSM_OVL_CPMAIL]; + + for (k = 0; k < 2; k++) { + if (mail_idx1[k] != mTG_MARK_IDX_UNSET) { + cpmail_mark->_00[k] = mail_tbl1[k]; + cpmail_mark->_00[2 + k] = mail_tbl0[k]; + mTG_set_hand_pos(submenu, cpmail_mark->_20[k], table_no[k], mail_idx1[k]); + mTG_set_hand_pos(submenu, cpmail_mark->_30[k], table_no[1 - k], mail_idx0[k]); + + switch (k) { + case 0: { + cpmail_mark->_20[k][0] += inv_menu->position[0]; + cpmail_mark->_20[k][1] += mIV_get_win_posY(submenu, inv_menu, 1); + cpmail_mark->_30[k][0] += cpmail_menu->position[0]; + cpmail_mark->_30[k][1] += mIV_get_win_posY(submenu, cpmail_menu, 1); + break; + } + case 1: { + cpmail_mark->_20[k][0] += cpmail_menu->position[0]; + cpmail_mark->_20[k][1] += mIV_get_win_posY(submenu, cpmail_menu, 1); + cpmail_mark->_30[k][0] += inv_menu->position[0]; + cpmail_mark->_30[k][1] += mIV_get_win_posY(submenu, inv_menu, 1); + break; + } + } + + switch (k) { + case 0: + inv_ovl->mail_mark_bitfield |= (1 << inv_move_idx); + break; + case 1: + cpmail_ovl->mark_bitfield2 |= (1 << cpmail_move_idx); + } + + cpmail_mark->_4A &= ~(1 << k); + } + } + + mTG_init_tag_data_item_win(submenu); +} + +static int mTG_cpack_change_mail_mark_main(Submenu* submenu, mIV_Ovl_c* inv_ovl, mCM_Ovl_c* cpmail_ovl) { + switch (submenu->overlay->tag_ovl->cpmail_mark[0].mode) { + case mTG_CHANGE_MAIL_MARK_DECIDE: + mTG_cpack_change_mail_mark_decide(submenu, inv_ovl, cpmail_ovl, 0); + // fallthrough + case mTG_CHANGE_MAIL_MARK_MOVE: + mTG_cpack_change_mail_mark_move(submenu, inv_ovl, cpmail_ovl, 0); + break; + } + + return TRUE; +} + +static int mTG_trans_mail_mark(Submenu* submenu, mSM_MenuInfo_c* menu_info, mTG_tag_c* tag) { + mMB_Ovl_c* mailbox_ovl = submenu->overlay->mailbox_ovl; + Mail_c* src; + + mailbox_ovl->_03++; + if (mailbox_ovl->_03 % 3 == 0) { + int dst_idx = mMl_chk_mail_free_space(Now_Private->mail, mPr_INVENTORY_MAIL_COUNT); + + if (dst_idx != -1) { + int src_idx = 0; + int i; + + for (i = mMB_MAIL_COUNT - 1; i >= 0; i--) { + if ((mailbox_ovl->mark_bitfield & (1 << i)) != 0) { + src_idx = i; + break; + } + } + + src = &Common_Get(now_home)->mailbox[src_idx]; + mMl_copy_mail(&Now_Private->mail[dst_idx], src); + mMl_clear_mail(src); + tag->tag_col = src_idx % 2; + tag->tag_row = src_idx / 2; + mTG_set_hand_pos(submenu, tag->base_pos, tag->table, src_idx); + sAdo_SysTrgStart(NA_SE_446); + mailbox_ovl->mark_bitfield &= ~(1 << src_idx); + mTG_init_tag_data_item_win(submenu); + return TRUE; + } else { + mailbox_ovl->mark_flag = 0; + mailbox_ovl->mark_bitfield = 0; + return TRUE; + } + } + + return mailbox_ovl->open_flag == TRUE; +} + +static int mTG_trans_mail(Submenu* submenu, mSM_MenuInfo_c* menu_info, mTG_tag_c* tag) { + mMB_Ovl_c* mailbox_ovl = submenu->overlay->mailbox_ovl; + Mail_c* src; + + mailbox_ovl->_03++; + if (mailbox_ovl->_03 % 3 == 0) { + int dst_idx = mMl_chk_mail_free_space(Now_Private->mail, mPr_INVENTORY_MAIL_COUNT); + + if (dst_idx != -1) { + int src_idx = submenu->overlay->mailbox_ovl->get_last_mail_idx_proc(); + + src = &Common_Get(now_home)->mailbox[src_idx]; + mMl_copy_mail(&Now_Private->mail[dst_idx], src); + mMl_clear_mail(src); + src_idx = submenu->overlay->mailbox_ovl->get_last_mail_idx_proc(); + tag->tag_col = src_idx % 2; + tag->tag_row = src_idx / 2; + mTG_set_hand_pos(submenu, tag->base_pos, tag->table, src_idx); + sAdo_SysTrgStart(NA_SE_446); + mTG_init_tag_data_item_win(submenu); + return TRUE; + } + + if (mailbox_ovl->open_flag == TRUE) { + mTG_open_warning_window(submenu, menu_info, mWR_WARNING_MAILBOX); + return TRUE; + } + } + + if (mailbox_ovl->open_flag == TRUE) { + return TRUE; + } + + return FALSE; +} + +static int mTG_check_trans_mail(Submenu* submenu, mSM_MenuInfo_c* menu_info, mTG_tag_c* tag) { + int res = FALSE; + + if (mMl_count_use_mail_space(Common_Get(now_home)->mailbox, HOME_MAILBOX_SIZE) != 0) { + res = mTG_trans_mail(submenu, menu_info, tag); + } else { + submenu->overlay->mailbox_ovl->open_flag = FALSE; + } + + return res; +} + +static int mTG_check_trans_mail_mark(Submenu* submenu, mSM_MenuInfo_c* menu_info, mTG_tag_c* tag) { + mMB_Ovl_c* mailbox_ovl = submenu->overlay->mailbox_ovl; + int res = FALSE; + + if (mailbox_ovl->mark_bitfield != 0) { + res = mTG_trans_mail_mark(submenu, menu_info, tag); + } else { + mailbox_ovl->open_flag = FALSE; + mailbox_ovl->mark_bitfield = 0; + mailbox_ovl->mark_flag = 0; + } + + return res; +} + +static int mTG_cpack_change_mail_mark(Submenu* submenu, mSM_MenuInfo_c* menu_info, mTG_tag_c* tag) { + mCM_Ovl_c* cpmail_ovl = submenu->overlay->cpmail_ovl; + mIV_Ovl_c* inv_ovl = submenu->overlay->inventory_ovl; + int res = FALSE; + + cpmail_ovl->_BBC++; + if (inv_ovl->mail_mark_bitfield2 != 0 || cpmail_ovl->mark_bitfield != 0) { + res = mTG_cpack_change_mail_mark_main(submenu, inv_ovl, cpmail_ovl); + } else { + inv_ovl->mail_mark_flag = 0; + cpmail_ovl->mark_flag = 0; + } + + return res; +} + +static int mTG_move_cursol_in_cpedit(Submenu* submenu, mTG_tag_c* tag, u32 trigger) { + return FALSE; +} + +static int mTG_move_cursol_in_catalog(Submenu* submenu, mTG_tag_c* tag, u32 trigger) { + mCL_Ovl_c* catalog_ovl = submenu->overlay->catalog_ovl; + u32 btns = getButton() | getTrigger(); + mCL_Menu_c* catalog_menu = &catalog_ovl->menu_data[catalog_ovl->page_order[0]]; + int target = catalog_menu->top_idx + tag->tag_row; + u32 masked_btns = btns & (BUTTON_CLEFT | BUTTON_CRIGHT | BUTTON_CDOWN | BUTTON_CUP); + int new_target; + int idx; + + if ((masked_btns & BUTTON_CLEFT) != 0) { + if (catalog_menu->top_idx != 0 || tag->tag_row != 0) { + catalog_menu->top_idx = 0; + tag->tag_row = 0; + catalog_ovl->change_flag = TRUE; + } + } else if ((masked_btns & BUTTON_CRIGHT) != 0) { + s16 target = catalog_menu->item_count; + int new_top_idx; + int new_row; + + if (target > 0) { + if (target < mCL_MENU_PAGE_SIZE) { + new_top_idx = 0; + new_row = target - 1; + } else { + new_top_idx = catalog_menu->item_count - mCL_MENU_PAGE_SIZE; + new_row = mCL_MENU_PAGE_SIZE - 1; + } + + if (catalog_menu->top_idx != new_top_idx || tag->tag_row != new_row) { + catalog_menu->top_idx = new_top_idx; + tag->tag_row = new_row; + catalog_ovl->change_flag = TRUE; + } + } + } else if ((trigger & BUTTON_CDOWN) != 0) { + if ((masked_btns & BUTTON_CDOWN) != 0) { + idx = catalog_menu->item_count - mCL_MENU_PAGE_SIZE; + if ((catalog_menu->top_idx + mCL_MENU_PAGE_SIZE) <= idx) { + catalog_menu->top_idx = catalog_menu->top_idx + mCL_MENU_PAGE_SIZE; + catalog_ovl->change_flag = TRUE; + } else if (target < catalog_menu->item_count - 1) { + catalog_menu->top_idx = idx; + if (catalog_menu->top_idx < 0) { + catalog_menu->top_idx = 0; + } + tag->tag_row = (catalog_menu->item_count - catalog_menu->top_idx) - 1; + catalog_ovl->change_flag = TRUE; + } + } else { + if (target < (catalog_menu->item_count - 1)) { + if (tag->tag_row < 5 || (target == (catalog_menu->item_count - 2) && tag->tag_row < 6)) { + tag->tag_row++; + } else { + catalog_menu->top_idx++; + } + + catalog_ovl->change_flag = TRUE; + } + } + } else if ((trigger & BUTTON_CUP) != 0) { + if ((masked_btns & BUTTON_CUP) != 0) { + if ((catalog_menu->top_idx - mCL_MENU_PAGE_SIZE) >= 0) { + catalog_menu->top_idx -= mCL_MENU_PAGE_SIZE; + catalog_ovl->change_flag = TRUE; + } else if (target > 0) { + catalog_menu->top_idx = 0; + tag->tag_row = 0; + catalog_ovl->change_flag = TRUE; + } + } else { + if (target > 0) { + if (tag->tag_row > 1 || (target == 1 && tag->tag_row > 0)) { + tag->tag_row--; + } else { + catalog_menu->top_idx--; + } + + catalog_ovl->change_flag = TRUE; + } + } + } + + return catalog_ovl->change_flag; +} + +static int mTG_move_cursol_base_left(mTG_tag_c* tag) { + int res; + + if (tag->tag_col > 0) { + tag->tag_col--; + res = TRUE; + } else { + res = FALSE; + } + + return res; +} + +static int mTG_move_cursol_base_right(mTG_tag_c* tag) { + int res; + + if (tag->tag_col < (mTG_table_data[tag->table].col_num - 1)) { + tag->tag_col++; + res = TRUE; + } else { + res = FALSE; + } + + return res; +} + +static int mTG_move_cursol_base_upper(mTG_tag_c* tag) { + int res; + + if (tag->tag_row > 0) { + tag->tag_row--; + res = TRUE; + } else { + res = FALSE; + } + + return res; +} + +static int mTG_move_cursol_base_lower(mTG_tag_c* tag) { + int res; + + if (tag->tag_row < (mTG_table_data[tag->table].row_num - 1)) { + tag->tag_row++; + res = TRUE; + } else { + res = FALSE; + } + + return res; +} + +static int mTG_move_check_hand_item_on_player(mActor_name_t item) { + int category = ITEM_NAME_GET_CAT(item); + + return (ITEM_NAME_GET_TYPE(item) == NAME_TYPE_ITEM1 && + (category == ITEM1_CAT_CLOTH || category == ITEM1_CAT_FRUIT || category == ITEM1_CAT_TOOL || + (category == ITEM1_CAT_KABU && item != ITM_KABU_SPOILED))); +} + +static int mTG_move_check_hand_item(Submenu* submenu, int table) { + mHD_Ovl_c* hand_ovl = submenu->overlay->hand_ovl; + + if (hand_ovl->info.item == EMPTY_NO) { + if (table != mTG_TABLE_BG) { + return TRUE; + } + } else if (hand_ovl->info.item_cond != mPr_ITEM_COND_NORMAL || ITEM_IS_FTR(hand_ovl->info.item)) { + if (table == mTG_TABLE_ITEM || table == mTG_TABLE_MAIL) { + return TRUE; + } + } else { + int category = ITEM_NAME_GET_CAT(hand_ovl->info.item); + + if (table == mTG_TABLE_MONEY) { + if (category == ITEM1_CAT_MONEY) { + return TRUE; + } + } else if (table == mTG_TABLE_BG) { + if (category == ITEM1_CAT_CLOTH) { + return TRUE; + } + } else if (table == mTG_TABLE_PLAYER) { + if (mTG_move_check_hand_item_on_player(hand_ovl->info.item)) { + return TRUE; + } + } else { + return TRUE; + } + } + + return FALSE; +} + +static int mTG_move_cursol_between_table_inventory_left(Submenu* submenu, mTG_tag_c* tag) { + if (tag->table == mTG_TABLE_MAIL) { + if (mMl_check_not_used_mail(&submenu->overlay->hand_ovl->info.mail) == TRUE) { + if (tag->tag_row < 2 && mTG_move_check_hand_item(submenu, mTG_TABLE_MONEY)) { + tag->table = mTG_TABLE_MONEY; + tag->tag_row = 0; + return TRUE; + } else { + tag->table = mTG_TABLE_ITEM; + tag->tag_col = 4; + tag->tag_row--; + if (tag->tag_row < 0) { + tag->tag_row = 0; + } + + return TRUE; + } + } + } else if (tag->table == mTG_TABLE_WCHANGE) { + if (submenu->overlay->inventory_ovl->page_order[0] != mIV_PAGE_INVENTORY) { + tag->table = mTG_TABLE_COLLECT; + tag->tag_col = 7; + if (tag->tag_row == 1) { + tag->tag_row = 2; + } else if (tag->tag_row == 2) { + tag->tag_row = 4; + } + } else { + tag->table = mTG_TABLE_MAIL; + tag->tag_col = 1; + if (tag->tag_row == 0) { + tag->tag_row = 0; + } else if (tag->tag_row == 1) { + tag->tag_row = 2; + } else { + tag->tag_row = 3; + } + } + + return TRUE; + } else if (tag->table == mTG_TABLE_MONEY) { + if (mTG_move_check_hand_item(submenu, mTG_TABLE_PLAYER)) { + tag->table = mTG_TABLE_PLAYER; + return TRUE; + } + } else if (tag->table == mTG_TABLE_ITEM) { + if (mTG_check_hand_condition(submenu) == TRUE) { + tag->table = mTG_TABLE_INVENTORY_WC_ORG; + tag->tag_row = 0; + return TRUE; + } + } else if (tag->table == mTG_TABLE_PLAYER) { + if (mTG_check_hand_condition(submenu) == TRUE) { + tag->table = mTG_TABLE_INVENTORY_WC_ORG; + return TRUE; + } + } else if (tag->table == mTG_TABLE_COLLECT) { + submenu->overlay->hand_ovl->info.move_flag = mHD_MOVE_SWITCH_LEFT; + tag->table = mTG_TABLE_WCHANGE; + if (tag->tag_row == 1) { + tag->tag_row = 0; + } else if (tag->tag_row == 2) { + tag->tag_row = 1; + } else if (tag->tag_row == 3 || tag->tag_row == 4) { + tag->tag_row = 2; + } + + return TRUE; + } else if (tag->table == mTG_TABLE_INVENTORY_WC_ORG) { + tag->table = mTG_TABLE_WCHANGE; + tag->tag_row = 1; + submenu->overlay->hand_ovl->info.move_flag = mHD_MOVE_SWITCH_LEFT; + return TRUE; + } + + return FALSE; +} + +static int mTG_move_cursol_between_table_inventory_right(Submenu* submenu, mTG_tag_c* tag) { + if (tag->table == mTG_TABLE_MONEY) { + tag->table = mTG_TABLE_MAIL; + tag->tag_row = 1; + return TRUE; + } else if (tag->table == mTG_TABLE_ITEM) { + if (mTG_move_check_hand_item(submenu, mTG_TABLE_MAIL)) { + tag->table = mTG_TABLE_MAIL; + tag->tag_col = 0; + tag->tag_row += 2; + return TRUE; + } + } else if (tag->table == mTG_TABLE_MAIL) { + if (mTG_check_hand_condition(submenu) == TRUE) { + tag->table = mTG_TABLE_WCHANGE; + tag->tag_col = 0; + tag->tag_row = (tag->tag_row + 1) >> 1; + return TRUE; + } + } else if (tag->table == mTG_TABLE_COLLECT) { + tag->table = mTG_TABLE_WCHANGE; + tag->tag_col = 0; + if (tag->tag_row > 2) { + tag->tag_row = 2; + } else if (tag->tag_row == 1) { + tag->tag_row = 0; + } else if (tag->tag_row == 2) { + tag->tag_row = 1; + } + + return TRUE; + } else if (tag->table == mTG_TABLE_PLAYER) { + if (mTG_move_check_hand_item(submenu, mTG_TABLE_MONEY)) { + tag->table = mTG_TABLE_MONEY; + return TRUE; + } + } else if (tag->table == mTG_TABLE_WCHANGE) { + if (submenu->overlay->inventory_ovl->page_order[0] != mIV_PAGE_INVENTORY) { + tag->table = mTG_TABLE_COLLECT; + if (tag->tag_row == 1) { + tag->tag_row = 2; + } else if (tag->tag_row == 2) { + tag->tag_row = 4; + } + } else { + tag->table = mTG_TABLE_INVENTORY_WC_ORG; + tag->tag_row = 0; + } + + submenu->overlay->hand_ovl->info.move_flag = mHD_MOVE_SWITCH_RIGHT; + return TRUE; + } else if (tag->table == mTG_TABLE_INVENTORY_WC_ORG) { + tag->table = mTG_TABLE_ITEM; + tag->tag_row = 0; + return TRUE; + } + + return FALSE; +} + +static int mTG_move_cursol_between_table_inventory_upper(Submenu* submenu, mTG_tag_c* tag) { + if (tag->table == mTG_TABLE_BG) { + tag->table = mTG_TABLE_ITEM; + tag->tag_col = 4; + tag->tag_row = 2; + return TRUE; + } else if (tag->table == mTG_TABLE_ITEM) { + mHD_Ovl_c* hand_ovl = submenu->overlay->hand_ovl; + int category = ITEM_NAME_GET_CAT(hand_ovl->info.item); + + if (ITEM_NAME_GET_TYPE(hand_ovl->info.item) == NAME_TYPE_ITEM1 && + hand_ovl->info.item_cond == mPr_ITEM_COND_NORMAL) { + if (category == ITEM1_CAT_MONEY) { + tag->table = mTG_TABLE_MONEY; + tag->tag_col = 0; + tag->tag_row = 0; + return TRUE; + } else if (mTG_move_check_hand_item_on_player(hand_ovl->info.item)) { + tag->table = mTG_TABLE_PLAYER; + tag->tag_col = 0; + tag->tag_row = 0; + return TRUE; + } + } + + if (tag->tag_col < 2) { + if (mTG_move_check_hand_item(submenu, mTG_TABLE_PLAYER)) { + tag->table = mTG_TABLE_PLAYER; + tag->tag_col = 0; + tag->tag_row = 0; + return TRUE; + } + } else { + if (mTG_move_check_hand_item(submenu, mTG_TABLE_MONEY)) { + tag->table = mTG_TABLE_MONEY; + tag->tag_col = 0; + tag->tag_row = 0; + return TRUE; + } + } + } else if (tag->table == mTG_TABLE_MONEY) { + if (mTG_move_check_hand_item(submenu, mTG_TABLE_PLAYER)) { + tag->table = mTG_TABLE_MONEY; + return TRUE; + } + } + + return FALSE; +} + +static int mTG_move_cursol_between_table_inventory_lower(Submenu* submenu, mTG_tag_c* tag) { + if (tag->table == mTG_TABLE_ITEM) { + if (tag->tag_col == 4) { + if (mTG_move_check_hand_item(submenu, mTG_TABLE_BG)) { + tag->table = mTG_TABLE_BG; + tag->tag_col = 0; + tag->tag_row = 0; + return TRUE; + } + } + } else if (tag->table == mTG_TABLE_MONEY) { + tag->table = mTG_TABLE_ITEM; + tag->tag_col = 4; + return TRUE; + } else if (tag->table == mTG_TABLE_PLAYER) { + tag->table = mTG_TABLE_ITEM; + return TRUE; + } + + return FALSE; +} + +static int mTG_move_cursol_between_table_cpmail(Submenu* submenu, mTG_tag_c* tag, u32 trigger) { + mHD_Ovl_c* hand_ovl = submenu->overlay->hand_ovl; + + if ((trigger & BUTTON_CLEFT) != 0) { + if (tag->table == mTG_TABLE_CPMAIL_TI || tag->table == mTG_TABLE_CPMAIL) { + tag->tag_col = 1; + tag->table = mTG_TABLE_MAIL; + return TRUE; + } else if (tag->table == mTG_TABLE_CPMAIL_WC) { + tag->table = mTG_TABLE_CPMAIL; + tag->tag_col = 3; + + if (tag->tag_row < 2) { + tag->tag_row = 0; + } else if (tag->tag_row < 4) { + tag->tag_row = 1; + } else if (tag->tag_row < 6) { + tag->tag_row = 2; + } else if (tag->tag_row < 7) { + tag->tag_row = 3; + } else { + tag->tag_row = 4; + } + + if (!mTG_check_hand_condition(submenu)) { + hand_ovl->info.next_act = mHD_ACTION_CLOSE2; + } + + return TRUE; + } + } else if ((trigger & BUTTON_CDOWN) != 0) { + if (tag->table == mTG_TABLE_CPMAIL_TI) { + tag->table = mTG_TABLE_CPMAIL; + tag->tag_row = 0; + tag->tag_col = 0; + return TRUE; + } + } else if ((trigger & BUTTON_CUP) != 0) { + if (mMl_check_not_used_mail(&hand_ovl->info.mail) == TRUE) { + if (tag->table != mTG_TABLE_CPMAIL_TI) { + tag->table = mTG_TABLE_CPMAIL_TI; + tag->tag_col = 0; + tag->tag_row = 0; + return TRUE; + } + } + } else if ((trigger & BUTTON_CRIGHT) != 0) { + if (tag->table == mTG_TABLE_MAIL) { + tag->table = mTG_TABLE_CPMAIL; + tag->tag_col = 0; + return TRUE; + } else if (tag->table == mTG_TABLE_CPMAIL_TI) { + tag->table = mTG_TABLE_CPMAIL_WC; + return TRUE; + } else if (tag->table == mTG_TABLE_CPMAIL) { + tag->table = mTG_TABLE_CPMAIL_WC; + tag->tag_col = 0; + if (tag->tag_row == 0) { + tag->tag_row = 1; + } else if (tag->tag_row == 1) { + tag->tag_row = 3; + } else if (tag->tag_row == 2) { + tag->tag_row = 4; + } else if (tag->tag_row == 3) { + tag->tag_row = 6; + } else { + tag->tag_row = 7; + } + + if (!mTG_check_hand_condition(submenu)) { + hand_ovl->info.next_act = mHD_ACTION_OPEN; + } + + return TRUE; + } + } + + return FALSE; +} + +static int mTG_move_cursol_between_table_music(Submenu* submenu, mTG_tag_c* tag, u32 trigger) { + return FALSE; +} + +static int mTG_move_cursol_between_table_haniwa(mTG_tag_c* tag, u32 trigger) { + int res = FALSE; + + if ((trigger & BUTTON_CDOWN) != 0 && tag->table == mTG_TABLE_HANIWA) { + if (tag->tag_col == 3) { + tag->tag_col = 4; + } else { + tag->tag_col += 2; + } + + tag->table = mTG_TABLE_ITEM; + res = TRUE; + } else if ((trigger & BUTTON_CUP) != 0 && tag->table == mTG_TABLE_ITEM) { + tag->table = mTG_TABLE_HANIWA; + if (tag->tag_col < 2) { + tag->tag_col = 0; + } else { + tag->tag_col -= 2; + } + + tag->tag_row = 0; + res = TRUE; + } + return res; +} + +static int mTG_move_cursol_between_table_mailbox(Submenu* submenu, mTG_tag_c* tag, u32 trigger) { + int res = FALSE; + + if ((trigger & BUTTON_CLEFT) != 0 && tag->table == mTG_TABLE_MAIL) { + if (mTG_check_hand_condition(submenu)) { + tag->table = mTG_TABLE_MBOX; + tag->tag_col = 1; + res = TRUE; + } + } else if ((trigger & BUTTON_CRIGHT) != 0 && tag->table == mTG_TABLE_MBOX) { + tag->table = mTG_TABLE_MAIL; + tag->tag_col = 0; + res = TRUE; + } + return res; +} + +static int mTG_move_cursol_between_table_catalog(Submenu* submenu, mTG_tag_c* tag, u32 trigger) { + int res = FALSE; + + if ((trigger & BUTTON_CLEFT) != 0) { + mCL_Ovl_c* catalog_ovl = submenu->overlay->catalog_ovl; + mCL_Menu_c* catalog_menu = &catalog_ovl->menu_data[catalog_ovl->page_order[0]]; + + if (tag->table == mTG_TABLE_CATALOG_WC) { + if (tag->tag_row >= 4) { + tag->tag_row--; + } + + if (catalog_menu->item_count == 0) { + tag->tag_row = 0; + } else if (catalog_menu->item_count <= tag->tag_row) { + tag->tag_row = catalog_menu->item_count - 1; + } else if (tag->tag_row >= (mCL_MENU_PAGE_SIZE - 1)) { + tag->tag_row = (mCL_MENU_PAGE_SIZE - 1); + } + + tag->table = mTG_TABLE_CATALOG; + catalog_ovl->change_flag = TRUE; + res = TRUE; + } + } else if ((trigger & BUTTON_CRIGHT) != 0) { + if (tag->table == mTG_TABLE_CATALOG) { + tag->table = mTG_TABLE_CATALOG_WC; + if (tag->tag_row >= 3) { + tag->tag_row++; + } + res = TRUE; + } + } + return res; +} + +static int mTG_move_cursol_between_table_cporiginal(Submenu* submenu, mTG_tag_c* tag, u32 trigger) { + mHD_Ovl_c* hand_ovl = submenu->overlay->hand_ovl; + int res = FALSE; + + if ((trigger & BUTTON_CLEFT) != 0) { + if (tag->table == mTG_TABLE_CPORIGINAL_TI || tag->table == mTG_TABLE_CPORIGINAL) { + tag->tag_col = 1; + tag->table = mTG_TABLE_CPORIGINAL_NW; + res = TRUE; + } else if (tag->table == mTG_TABLE_CPORIGINAL_WC) { + tag->table = mTG_TABLE_CPORIGINAL; + tag->tag_col = 2; + + if (tag->tag_row < 2) { + tag->tag_row = 0; + } else if (tag->tag_row < 4) { + tag->tag_row = 1; + } else if (tag->tag_row < 6) { + tag->tag_row = 2; + } else { + tag->tag_row = 3; + } + + if (!mTG_check_hand_condition(submenu)) { + hand_ovl->info.next_act = mHD_ACTION_CLOSE2; + } + + res = TRUE; + } + } else if ((trigger & BUTTON_CDOWN) != 0) { + if (tag->table == mTG_TABLE_CPORIGINAL_TI) { + tag->table = mTG_TABLE_CPORIGINAL; + tag->tag_row = 0; + tag->tag_col = 0; + res = TRUE; + } + } else if ((trigger & BUTTON_CUP) != 0) { + if (mTG_check_hand_condition(submenu)) { + if (tag->table != mTG_TABLE_CPORIGINAL_TI) { + tag->table = mTG_TABLE_CPORIGINAL_TI; + tag->tag_col = 0; + tag->tag_row = 0; + res = TRUE; + } + } + } else if ((trigger & BUTTON_CRIGHT) != 0) { + if (tag->table == mTG_TABLE_CPORIGINAL_NW) { + tag->table = mTG_TABLE_CPORIGINAL; + tag->tag_col = 0; + res = TRUE; + } else if (tag->table == mTG_TABLE_CPORIGINAL_TI) { + tag->table = mTG_TABLE_CPORIGINAL_WC; + res = TRUE; + } else if (tag->table == mTG_TABLE_CPORIGINAL) { + tag->table = mTG_TABLE_CPORIGINAL_WC; + tag->tag_col = 0; + if (tag->tag_row == 0) { + tag->tag_row = 0; + } else if (tag->tag_row == 1) { + tag->tag_row = 2; + } else if (tag->tag_row == 2) { + tag->tag_row = 4; + } else { + tag->tag_row = 6; + } + + if (!mTG_check_hand_condition(submenu)) { + hand_ovl->info.next_act = mHD_ACTION_OPEN; + } + + res = TRUE; + } + } + + return res; +} + +static int mTG_move_cursol_between_table_gba(Submenu* submenu, mTG_tag_c* tag, u32 trigger) { + int res = FALSE; + + if ((trigger & BUTTON_CLEFT) != 0) { + if (tag->table == mTG_TABLE_GBA_NW) { + tag->tag_col = 3; + if (tag->tag_row == 0 || tag->tag_row == 1) { + tag->tag_row = 0; + } else { + tag->tag_row = 1; + } + tag->table = mTG_TABLE_GBA; + res = TRUE; + } + } else if ((trigger & BUTTON_CRIGHT) != 0) { + if (tag->table == mTG_TABLE_GBA) { + tag->tag_col = 0; + if (tag->tag_row == 0) { + tag->tag_row = 1; + } else if (tag->tag_row == 1) { + tag->tag_row = 2; + } + tag->table = mTG_TABLE_GBA_NW; + res = TRUE; + } + } + return res; +} + +static int mTG_move_cursol_between_table_card(Submenu* submenu, mTG_tag_c* tag, u32 trigger) { + int res = FALSE; + + if ((trigger & BUTTON_CLEFT) != 0) { + if (tag->table == mTG_TABLE_CARD_NW) { + tag->tag_col = 0; + tag->tag_row = 0; + tag->table = mTG_TABLE_CARD; + res = TRUE; + } + } else if ((trigger & BUTTON_CRIGHT) != 0) { + if (tag->table == mTG_TABLE_CARD) { + tag->tag_col = 0; + tag->tag_row = 1; + tag->table = mTG_TABLE_CARD_NW; + res = TRUE; + } + } + return res; +} + +static int mTG_move_cursol_between_table_inventory(Submenu* submenu, mTG_tag_c* tag, mSM_MenuInfo_c* menu_info, + u32 trigger) { + int res = FALSE; + + if ((menu_info->menu_type == mSM_OVL_INVENTORY && + (menu_info->data0 == mSM_IV_OPEN_NORMAL || menu_info->data0 == mSM_IV_OPEN_EXCHANGE)) || + (menu_info->menu_type == mSM_OVL_NEEDLEWORK && menu_info->data0 == 1)) { + if ((trigger & BUTTON_CLEFT) != 0) { + res = mTG_move_cursol_between_table_inventory_left(submenu, tag); + } else if ((trigger & BUTTON_CDOWN) != 0) { + res = mTG_move_cursol_between_table_inventory_lower(submenu, tag); + } else if ((trigger & BUTTON_CUP) != 0) { + res = mTG_move_cursol_between_table_inventory_upper(submenu, tag); + } else { + res = mTG_move_cursol_between_table_inventory_right(submenu, tag); + } + } + + return res; +} + +static int mTG_move_cursol_base(Submenu* submenu, mTG_tag_c* tag, mSM_MenuInfo_c* menu_info) { + u32 trigger = submenu->overlay->menu_control.trigger; + int res = FALSE; + + if ((trigger & (BUTTON_CLEFT | BUTTON_CDOWN | BUTTON_CUP | BUTTON_CRIGHT)) != 0 || + (tag->table == mTG_TABLE_CATALOG && + (trigger & (BUTTON_DLEFT | BUTTON_DDOWN | BUTTON_DUP | BUTTON_DRIGHT | BUTTON_CLEFT | BUTTON_CDOWN | + BUTTON_CUP | BUTTON_CRIGHT)) != 0)) { + if (tag->table == mTG_TABLE_CPEDIT) { + res = mTG_move_cursol_in_cpedit(submenu, tag, trigger); + } else if (tag->table == mTG_TABLE_CATALOG) { + res = mTG_move_cursol_in_catalog(submenu, tag, trigger); + } else { + if ((trigger & BUTTON_CLEFT) != 0) { + res = mTG_move_cursol_base_left(tag); + } else if ((trigger & BUTTON_CDOWN) != 0) { + res = mTG_move_cursol_base_lower(tag); + } else if ((trigger & BUTTON_CUP) != 0) { + res = mTG_move_cursol_base_upper(tag); + } else { + res = mTG_move_cursol_base_right(tag); + } + } + + if (res == FALSE) { + /* Process movement between tables */ + if (menu_info->menu_type == mSM_OVL_CPMAIL) { + res = mTG_move_cursol_between_table_cpmail(submenu, tag, trigger); + } else if (menu_info->menu_type == mSM_OVL_HANIWA) { + res = mTG_move_cursol_between_table_haniwa(tag, trigger); + } else if (menu_info->menu_type == mSM_OVL_MAILBOX) { + res = mTG_move_cursol_between_table_mailbox(submenu, tag, trigger); + } else if (menu_info->menu_type == mSM_OVL_CATALOG) { + res = mTG_move_cursol_between_table_catalog(submenu, tag, trigger); + } else if (menu_info->menu_type == mSM_OVL_MUSIC) { + res = mTG_move_cursol_between_table_music(submenu, tag, trigger); + } else if (menu_info->menu_type == mSM_OVL_CPORIGINAL) { + res = mTG_move_cursol_between_table_cporiginal(submenu, tag, trigger); + } else if (menu_info->menu_type == mSM_OVL_GBA) { + switch (menu_info->data0) { + case 3: + res = mTG_move_cursol_between_table_gba(submenu, tag, trigger); + break; + case 4: + res = mTG_move_cursol_between_table_card(submenu, tag, trigger); + break; + } + } else { + res = mTG_move_cursol_between_table_inventory(submenu, tag, menu_info, trigger); + } + } + } + + return res; +} + +static int mTG_select_tag_decide_item_normal(Submenu* submenu, mActor_name_t item, int idx) { + static int tag_type_field[] = { + mTG_TYPE_FIELD_LETTER, // ITEM1_CAT_PAPER + mTG_TYPE_FIELD_DEFAULT, // ITEM1_CAT_MONEY + mTG_TYPE_FIELD_DEFAULT, // ITEM1_CAT_TOOL + mTG_TYPE_CATCH_ITEM, // ITEM1_CAT_FISH + mTG_TYPE_FIELD_DEFAULT, // ITEM1_CAT_CLOTH + mTG_TYPE_FIELD_DEFAULT, // ITEM1_CAT_ETC + mTG_TYPE_FIELD_DEFAULT, // ITEM1_CAT_CARPET + mTG_TYPE_FIELD_DEFAULT, // ITEM1_CAT_WALL + mTG_TYPE_FIELD_DEFAULT, // ITEM1_CAT_FRUIT + mTG_TYPE_FIELD_PLANT, // ITEM1_CAT_PLANT + mTG_TYPE_FIELD_DEFAULT, // ITEM1_CAT_MINIDISK + mTG_TYPE_FIELD_DEFAULT, // ITEM1_CAT_DUMMY + mTG_TYPE_FIELD_TICKET, // ITEM1_CAT_TICKET + mTG_TYPE_FIELD_RELEASE, // ITEM1_CAT_INSECT + mTG_TYPE_FIELD_HUKUBUKURO, // ITEM1_CAT_HUKUBUKURO + mTG_TYPE_FIELD_DEFAULT, // ITEM1_CAT_KABU + }; + static int tag_type_my_room[] = { + mTG_TYPE_ROOM_LETTER, // ITEM1_CAT_PAPER + mTG_TYPE_ROOM_DEFAULT, // ITEM1_CAT_MONEY + mTG_TYPE_ROOM_DEFAULT, // ITEM1_CAT_TOOL + mTG_TYPE_ROOM_DEFAULT, // ITEM1_CAT_FISH + mTG_TYPE_ROOM_DEFAULT, // ITEM1_CAT_CLOTH + mTG_TYPE_ROOM_DEFAULT, // ITEM1_CAT_ETC + mTG_TYPE_ROOM_CARPET, // ITEM1_CAT_CARPET + mTG_TYPE_ROOM_WALL, // ITEM1_CAT_WALL + mTG_TYPE_ROOM_DEFAULT, // ITEM1_CAT_FRUIT + mTG_TYPE_ROOM_DEFAULT, // ITEM1_CAT_PLANT + mTG_TYPE_ROOM_DEFAULT, // ITEM1_CAT_MINIDISK + mTG_TYPE_ROOM_DEFAULT, // ITEM1_CAT_DUMMY + mTG_TYPE_ROOM_TICKET, // ITEM1_CAT_TICKET + mTG_TYPE_ROOM_DEFAULT, // ITEM1_CAT_INSECT + mTG_TYPE_ROOM_DEFAULT, // ITEM1_CAT_HUKUBUKURO + mTG_TYPE_ROOM_DEFAULT, // ITEM1_CAT_KABU + }; + static int tag_type_other_room[] = { + mTG_TYPE_OTHER_LETTER, // ITEM1_CAT_PAPER + mTG_TYPE_CATCH_ITEM, // ITEM1_CAT_MONEY + mTG_TYPE_CATCH_ITEM, // ITEM1_CAT_TOOL + mTG_TYPE_CATCH_ITEM, // ITEM1_CAT_FISH + mTG_TYPE_CATCH_ITEM, // ITEM1_CAT_CLOTH + mTG_TYPE_CATCH_ITEM, // ITEM1_CAT_ETC + mTG_TYPE_CATCH_ITEM, // ITEM1_CAT_CARPET + mTG_TYPE_CATCH_ITEM, // ITEM1_CAT_WALL + mTG_TYPE_CATCH_ITEM, // ITEM1_CAT_FRUIT + mTG_TYPE_CATCH_ITEM, // ITEM1_CAT_PLANT + mTG_TYPE_CATCH_ITEM, // ITEM1_CAT_MINIDISK + mTG_TYPE_CATCH_ITEM, // ITEM1_CAT_DUMMY + mTG_TYPE_CATCH_TICKET, // ITEM1_CAT_TICKET + mTG_TYPE_CATCH_ITEM, // ITEM1_CAT_INSECT + mTG_TYPE_OTHER_HUKUBUKURO, // ITEM1_CAT_HUKUBUKURO + mTG_TYPE_CATCH_ITEM, // ITEM1_CAT_KABU + }; + static int* tag_type[] = { + tag_type_field, + tag_type_my_room, + tag_type_other_room, + tag_type_other_room, + }; + static int tag_type_wisp_many[] = { + mTG_TYPE_FIELD_RELEASE, + mTG_TYPE_CATCH_ITEM, + mTG_TYPE_CATCH_ITEM, + mTG_TYPE_CATCH_ITEM, + }; + static int tag_type_wisp_one[] = { + mTG_TYPE_FIELD_RELEASE, + mTG_TYPE_CATCH_ITEM, + mTG_TYPE_CATCH_ITEM, + mTG_TYPE_CATCH_ITEM, + }; + static int tag_type_letters[] = { + mTG_TYPE_FIELD_LETTERS, + mTG_TYPE_ROOM_LETTERS, + mTG_TYPE_OTHER_LETTERS, + mTG_TYPE_OTHER_LETTERS, + }; + + mIV_Ovl_c* inv_ovl = submenu->overlay->inventory_ovl; + u32 item_cond = mPr_GET_ITEM_COND(Now_Private->inventory.item_conditions, idx); + int type = ITEM_NAME_GET_TYPE(item); + int category = ITEM_NAME_GET_CAT(item); + int ret_tag_type; + + if (inv_ovl->item_mark_bitfield != 0 && (inv_ovl->item_mark_bitfield & (1 << idx)) != 0) { + ret_tag_type = mTG_TYPE_TAG_PUT_ALL; + } else if ((item_cond & mPr_ITEM_COND_PRESENT) != 0) { + ret_tag_type = mTG_TYPE_PRESENT_ITEM; + } else if ((item_cond & mPr_ITEM_COND_QUEST) != 0) { + ret_tag_type = mTG_TYPE_CATCH_ITEM; + } else if (item == ITM_SIGNBOARD && Common_Get(field_type) == mFI_FIELDTYPE2_FG) { + ret_tag_type = mTG_TYPE_FIELD_SIGN; + } else if (ITEM_IS_EXERCISE_CARD(item) || item == ITM_KNIFE_AND_FORK) { + ret_tag_type = mTG_TYPE_TAISOU_CARD; + } else if (type == NAME_TYPE_FTR0 || type == NAME_TYPE_FTR1) { + ret_tag_type = tag_type[Common_Get(field_type)][ITEM1_CAT_CLOTH]; + } else if (ITEM_IS_WISP(item)) { + int wisp_cnt = ITEM_IS_WISP(item) ? (1 + (item - ITM_SPIRIT0)) : 0; + + if (wisp_cnt > 1) { + ret_tag_type = tag_type_wisp_many[Common_Get(field_type)]; + } else { + ret_tag_type = tag_type_wisp_one[Common_Get(field_type)]; + } + } else if (ITEM_IS_PAPER(item)) { + int paper_idx = item - ITM_PAPER_START; + int paper_stack = PAPER2STACK(paper_idx); + + if (paper_stack == 0) { + ret_tag_type = tag_type[Common_Get(field_type)][ITEM1_CAT_PAPER]; + category = ITEM1_CAT_PAPER; // @cleanup - why are we doing this? + } else { + ret_tag_type = tag_type_letters[Common_Get(field_type)]; + } + } else if (ITEM_IS_BALLOON(item)) { + if (Common_Get(field_type) == mFI_FIELDTYPE2_FG) { + ret_tag_type = mTG_TYPE_FIELD_BALLOON; + } else if (Common_Get(field_type) == mFI_FIELDTYPE2_PLAYER_ROOM) { + ret_tag_type = mTG_TYPE_ROOM_DEFAULT; + } else { + ret_tag_type = mTG_TYPE_CATCH_ITEM; + } + } else { + if (category == ITEM1_CAT_TICKET && (item & 7) == 0) { + category = ITEM1_CAT_ETC; + } + + ret_tag_type = tag_type[Common_Get(field_type)][category]; + + /* Don't allow wallpaper & carpet options in the player basement */ + if (Common_Get(field_type) == mFI_FIELDTYPE2_PLAYER_ROOM) { + if (mSc_IS_SCENE_BASEMENT(Save_Get(scene_no)) && + /* @BUG - developers missed a | for || here */ +#ifndef BUGFIXES + (category == ITEM1_CAT_CARPET | category == ITEM1_CAT_WALL)) { +#else + (category == ITEM1_CAT_CARPET || category == ITEM1_CAT_WALL)) { +#endif + ret_tag_type = mTG_TYPE_ROOM_DEFAULT; + } + } + } + + if (inv_ovl != NULL) { + if (type == NAME_TYPE_ITEM1 && category == ITEM1_CAT_FISH && inv_ovl->release_flag == TRUE) { + ret_tag_type = mTG_TYPE_FIELD_RELEASE; + } else if ((ITEM_IS_SCOOP(Now_Private->equipment) || ITEM_IS_GOLD_SCOOP(Now_Private->equipment)) && + inv_ovl->shovel_flag == TRUE && item != ITM_SIGNBOARD && + (type != NAME_TYPE_ITEM1 || category != ITEM1_CAT_INSECT)) { + if (ret_tag_type == mTG_TYPE_FIELD_DEFAULT) { + ret_tag_type = mTG_TYPE_FIELD_DEFAULT_BURY; + } else if (ret_tag_type == mTG_TYPE_FIELD_LETTER) { + ret_tag_type = mTG_TYPE_FIELD_LETTER_BURY; + } else if (ret_tag_type == mTG_TYPE_FIELD_LETTERS) { + ret_tag_type = mTG_TYPE_FIELD_LETTERS_BURY; + } else if (ret_tag_type == mTG_TYPE_FIELD_HUKUBUKURO) { + ret_tag_type = mTG_TYPE_FIELD_HUKUBUKURO_BURY; + } else if (ret_tag_type == mTG_TYPE_FIELD_TICKET) { + ret_tag_type = mTG_TYPE_FIELD_TICKET_BURY; + } + } + } + + if (mEv_CheckFirstJob()) { + if (ret_tag_type == mTG_TYPE_FIELD_PLANT) { + ret_tag_type = mTG_TYPE_FIELD_PLANT_JOB; + } + } + + return ret_tag_type; +} + +// diff --git a/src/save_check.c_inc b/src/save_check.c_inc index 10d6cfa9..70412f8d 100644 --- a/src/save_check.c_inc +++ b/src/save_check.c_inc @@ -172,7 +172,7 @@ static int sChk_font_sub(u8* font_p) { int res = FALSE; /* This check seems wrong lol */ - if (font != 0xFF && (font >= 0xFF || font >= mMl_FONT_NUM || font < mMl_FONT_0)) { + if (font != 0xFF && (font >= 0xFF || font >= mMl_FONT_NUM || font < mMl_FONT_RECV)) { mFRm_ERRORLINE(612); res = TRUE; }