diff --git a/config/rel_slices.yml b/config/rel_slices.yml index 92e1e980..edcdaeda 100644 --- a/config/rel_slices.yml +++ b/config/rel_slices.yml @@ -973,6 +973,11 @@ m_repay_ovl.c: .rodata: [0x8064B830, 0x8064B870] .data: [0x806CE4E0, 0x806CE550] .bss: [0x813405A8, 0x813405C0] +m_submenu_ovl.c: + .text: [0x805ED0FC, 0x805EF6CC] + .rodata: [0x8064B870, 0x8064B900] + .data: [0x806CE550, 0x806CF928] + .bss: [0x813405C0, 0x81340FC8] m_timeIn_ovl.c: .text: [0x805FF3C4, 0x80600370] .rodata: [0x8064BA00, 0x8064BA58] diff --git a/include/graph.h b/include/graph.h index 56a5ab50..62e6c155 100644 --- a/include/graph.h +++ b/include/graph.h @@ -11,81 +11,81 @@ extern "C" { #endif typedef enum { - GRAPH_DOING_ZERO = 0, - GRAPH_DOING_CT, - GRAPH_DOING_GAME_CT, - GRAPH_DOING_GAME_CT_FINISHED, - GRAPH_DOING_GAME_MAIN, - GRAPH_DOING_GAME_TIME, - GRAPH_DOING_GAME_TIME_FINISHED, - GRAPH_DOING_GAME_EXEC, - GRAPH_DOING_GAME_EXEC_FINISHED, - GRAPH_DOING_GAME_BGM, - GRAPH_DOING_GAME_BGM_FINISHED, - GRAPH_DOING_GAME_MAIN_FINISHED, - GRAPH_DOING_TASK_SET, - GRAPH_DOING_WAIT_TASK, - GRAPH_DOING_WAIT_TASK_FINISHED, - GRAPH_DOING_TASK_SET_FINISHED, - GRAPH_DOING_AUDIO, - GRAPH_DOING_AUDIO_FINISHED, - GRAPH_DOING_GAME_18, /* Not sure what this is, relevant code removed */ - GRAPH_DOING_GAME_DT, - GRAPH_DOING_GAME_DT_FINISHED, - GRAPH_DOING_DT, - GRAPH_DOING_END + GRAPH_DOING_ZERO = 0, + GRAPH_DOING_CT, + GRAPH_DOING_GAME_CT, + GRAPH_DOING_GAME_CT_FINISHED, + GRAPH_DOING_GAME_MAIN, + GRAPH_DOING_GAME_TIME, + GRAPH_DOING_GAME_TIME_FINISHED, + GRAPH_DOING_GAME_EXEC, + GRAPH_DOING_GAME_EXEC_FINISHED, + GRAPH_DOING_GAME_BGM, + GRAPH_DOING_GAME_BGM_FINISHED, + GRAPH_DOING_GAME_MAIN_FINISHED, + GRAPH_DOING_TASK_SET, + GRAPH_DOING_WAIT_TASK, + GRAPH_DOING_WAIT_TASK_FINISHED, + GRAPH_DOING_TASK_SET_FINISHED, + GRAPH_DOING_AUDIO, + GRAPH_DOING_AUDIO_FINISHED, + GRAPH_DOING_GAME_18, /* Not sure what this is, relevant code removed */ + GRAPH_DOING_GAME_DT, + GRAPH_DOING_GAME_DT_FINISHED, + GRAPH_DOING_DT, + GRAPH_DOING_END } GRAPH_DOING_POINT; #define GRAPH_MSG_BUF_COUNT 8 typedef struct graph_s { - /* 0x0000 */ Gfx* Gfx_list00; /* polygon opaque */ - /* 0x0004 */ Gfx* Gfx_list01; /* polygon translucent */ - /* 0x0008 */ void* DepthBuffer; - /* 0x000C */ Gfx* Gfx_list03; /* unused */ - /* 0x0010 */ Gfx* Gfx_list04; /* overlay */ - /* 0x0014 */ Gfx* Gfx_list07; /* font */ - /* 0x0018 */ Gfx* Gfx_list08; /* shadow */ - /* 0x001C */ Gfx* Gfx_list09; /* light */ - /* 0x0020 */ Gfx* gfxsave; - /* 0x0024 */ u8 _unk24[32]; - /* 0x0044 */ OSMessage graphReplyMesgBuf[GRAPH_MSG_BUF_COUNT]; - /* 0x0064 */ OSMessageQueue* schedMesgQueue; - /* 0x0068 */ OSMessageQueue graphReplyMesgQueue; - /* 0x0088 */ u8 _unused_ossctask00p[0x68]; /* real type = OSScTask */ - /* 0x00F0 */ u8 _unused_ossctask01p[0x68]; /* real type = OSScTask */ - /* 0x0158 */ u8 _unused_ossctask02p[0x68]; /* real type = OSScTask */ - /* 0x01C0 */ Gfx* Gfx_list05; /* work */ - /* 0x01C4 */ THA_GA work_thaga; - /* 0x01D4 */ u8 _unk1D4[0xBC]; /* Maybe related to more OSScTask stuff? */ - /* 0x0290 */ void* scheduler; /* Actually points to OSSched struct, only used in DnM? */ - /* 0x0294 */ void* vimode; /* Actually points to OSViMode struct, not used in AC. */ - /* 0x0298 */ THA_GA line_opaque_thaga; - /* 0x02A8 */ THA_GA line_translucent_thaga; - /* 0x02B8 */ THA_GA overlay_thaga; - /* 0x02C8 */ THA_GA polygon_opaque_thaga; - /* 0x02D8 */ THA_GA polygon_translucent_thaga; - /* 0x02E8 */ THA_GA font_thaga; - /* 0x02F8 */ THA_GA shadow_thaga; - /* 0x0308 */ THA_GA light_thaga; - /* 0x0318 */ THA_GA bg_opaque_thaga; - /* 0x0328 */ THA_GA bg_translucent_thaga; - /* 0x0338 */ int frame_counter; - /* 0x033C */ u16* frameBuffer; - /* 0x0340 */ u16* renderBuffer; - /* 0x0344 */ u32 vispecial; - /* 0x0348 */ u8 doing_point; - /* 0x0349 */ u8 _unk349; - /* 0x034A */ u8 need_viupdate; - /* 0x034B */ u8 cfb_bank; - /* 0x034C */ void (*taskEndCallback)(struct graph_s*, void*); - /* 0x0350 */ void* taskEndData; - /* 0x0354 */ f32 vixscale; - /* 0x0358 */ f32 viyscale; - /* 0x035C */ Gfx* last_dl; - /* 0x0360 */ Gfx* Gfx_list10; /* new0 (highlight/reflections?) */ - /* 0x0364 */ Gfx* Gfx_list11; /* new1 (highlight/reflections?) */ -} GRAPH ATTRIBUTE_ALIGN(8); // one of the missing structs is likely aligned to 8 bytes. + /* 0x0000 */ Gfx* Gfx_list00; /* polygon opaque */ + /* 0x0004 */ Gfx* Gfx_list01; /* polygon translucent */ + /* 0x0008 */ void* DepthBuffer; + /* 0x000C */ Gfx* Gfx_list03; /* unused */ + /* 0x0010 */ Gfx* Gfx_list04; /* overlay */ + /* 0x0014 */ Gfx* Gfx_list07; /* font */ + /* 0x0018 */ Gfx* Gfx_list08; /* shadow */ + /* 0x001C */ Gfx* Gfx_list09; /* light */ + /* 0x0020 */ Gfx* gfxsave; + /* 0x0024 */ u8 _unk24[32]; + /* 0x0044 */ OSMessage graphReplyMesgBuf[GRAPH_MSG_BUF_COUNT]; + /* 0x0064 */ OSMessageQueue* schedMesgQueue; + /* 0x0068 */ OSMessageQueue graphReplyMesgQueue; + /* 0x0088 */ u8 _unused_ossctask00p[0x68]; /* real type = OSScTask */ + /* 0x00F0 */ u8 _unused_ossctask01p[0x68]; /* real type = OSScTask */ + /* 0x0158 */ u8 _unused_ossctask02p[0x68]; /* real type = OSScTask */ + /* 0x01C0 */ Gfx* Gfx_list05; /* work */ + /* 0x01C4 */ THA_GA work_thaga; + /* 0x01D4 */ u8 _unk1D4[0xBC]; /* Maybe related to more OSScTask stuff? */ + /* 0x0290 */ void* scheduler; /* Actually points to OSSched struct, only used in DnM? */ + /* 0x0294 */ void* vimode; /* Actually points to OSViMode struct, not used in AC. */ + /* 0x0298 */ THA_GA line_opaque_thaga; + /* 0x02A8 */ THA_GA line_translucent_thaga; + /* 0x02B8 */ THA_GA overlay_thaga; + /* 0x02C8 */ THA_GA polygon_opaque_thaga; + /* 0x02D8 */ THA_GA polygon_translucent_thaga; + /* 0x02E8 */ THA_GA font_thaga; + /* 0x02F8 */ THA_GA shadow_thaga; + /* 0x0308 */ THA_GA light_thaga; + /* 0x0318 */ THA_GA bg_opaque_thaga; + /* 0x0328 */ THA_GA bg_translucent_thaga; + /* 0x0338 */ int frame_counter; + /* 0x033C */ u16* frameBuffer; + /* 0x0340 */ u16* renderBuffer; + /* 0x0344 */ u32 vispecial; + /* 0x0348 */ u8 doing_point; + /* 0x0349 */ u8 _unk349; + /* 0x034A */ u8 need_viupdate; + /* 0x034B */ u8 cfb_bank; + /* 0x034C */ void (*taskEndCallback)(struct graph_s*, void*); + /* 0x0350 */ void* taskEndData; + /* 0x0354 */ f32 vixscale; + /* 0x0358 */ f32 viyscale; + /* 0x035C */ Gfx* last_dl; + /* 0x0360 */ Gfx* Gfx_list10; /* new0 (highlight/reflections?) */ + /* 0x0364 */ Gfx* Gfx_list11; /* new1 (highlight/reflections?) */ +} GRAPH ATTRIBUTE_ALIGN(8); // one of the missing structs is likely aligned to 8 bytes. extern void graph_proc(void* arg); extern void graph_ct(GRAPH* graph); @@ -95,16 +95,22 @@ extern void graph_dt(GRAPH* graph); /* Graph display list macros for style and correctness enforcement */ -#define OPEN_DISP(graph) \ - { \ - GRAPH* __graph = (graph); \ - int __gfx_opened = 0; \ - while (0) +// clang-format off +#define OPEN_DISP(graph) \ + do {} while (0); \ + { \ + GRAPH* __graph = (graph); \ + int __gfx_opened = 0; \ + do {} while (0) +// clang-format on -#define CLOSE_DISP(graph) \ - (void)__gfx_opened; \ - } \ - while (0) +// clang-format off +#define CLOSE_DISP(graph) \ + do {} while (0); \ + (void)__gfx_opened; \ + } \ + do {} while (0) +// clang-format on #define NEXT_DISP(thaga) ((thaga)->thaGfx.head_p++) #define NOW_DISP(thaga) ((thaga)->thaGfx.head_p) @@ -116,7 +122,7 @@ extern void graph_dt(GRAPH* graph); #define NEXT_WORK_DISP NEXT_DISP(&__graph->work_thaga) #define NEXT_FONT_DISP NEXT_DISP(&__graph->font_thaga) #define NEXT_SHADOW_DISP NEXT_DISP(&__graph->shadow_thaga) -#define NEXT_LIGHT_DISP NEXT_DISP(&__graph->light_thaga) +#define NEXT_LIGHT_DISP NEXT_DISP(&__graph->light_thaga) #define NEXT_BG_OPA_DISP NEXT_DISP(&__graph->bg_opaque_thaga) #define NEXT_BG_XLU_DISP NEXT_DISP(&__graph->bg_translucent_thaga) @@ -140,7 +146,97 @@ extern void graph_dt(GRAPH* graph); #define SET_BG_OPA_DISP(p) SET_DISP(&__graph->bg_opaque_thaga, p) #define SET_BG_XLU_DISP(p) SET_DISP(&__graph->bg_translucent_thaga, p) -#define GRAPH_ALLOC(graph, size) ((void*)((graph)->polygon_opaque_thaga.tha.tail_p = (char*)((int)(graph)->polygon_opaque_thaga.tha.tail_p - (int)(size)))) +// clang-format off +#define OPEN_POLY_OPA_DISP(g) \ + do {} while (0); \ + OPEN_DISP(g); \ + { \ + Gfx* __polyOpa = NOW_POLY_OPA_DISP; \ + s32 __poly_opa_gfx = 0; \ + do {} while (0) +// clang-format on + +// clang-format off +#define CLOSE_POLY_OPA_DISP(g) \ + do {} while (0); \ + (void)__poly_opa_gfx; \ + SET_POLY_OPA_DISP(__polyOpa); \ + } \ + CLOSE_DISP(g); \ + do {} while (0) +// clang-format on + +#define POLY_OPA_DISP __polyOpa + +// clang-format off +#define OPEN_POLY_XLU_DISP(g) \ + do {} while (0); \ + OPEN_DISP(g); \ + { \ + Gfx* __polyXlu = NOW_POLY_XLU_DISP; \ + s32 __poly_xlu_gfx = 0; \ + do {} while (0) +// clang-format on + +// clang-format off +#define CLOSE_POLY_XLU_DISP(g) \ + do {} while (0); \ + (void)__poly_xlu_gfx; \ + SET_POLY_XLU_DISP(__polyXlu); \ + } \ + CLOSE_DISP(g); \ + do {} while (0) +// clang-format on + +#define POLY_XLU_DISP __polyXlu + +// clang-format off +#define OPEN_LIGHT_DISP(g) \ + do {} while (0); \ + OPEN_DISP(g); \ + { \ + Gfx* __light = NOW_LIGHT_DISP; \ + s32 __light_gfx = 0; \ + do {} while (0) +// clang-format on + +// clang-format off +#define CLOSE_LIGHT_DISP(g) \ + do {} while (0); \ + SET_LIGHT_DISP(__light); \ + (void)__light_gfx; \ + } \ + CLOSE_DISP(g); \ + do {} while (0) +// clang-format on + +#define LIGHT_DISP __light + +// clang-format off +#define OPEN_SHADOW_DISP(g) \ + do {} while (0); \ + OPEN_DISP(g); \ + { \ + Gfx* __shadow_gfx = NOW_SHADOW_DISP; \ + s32 __shadow_opened = 0; \ + do {} while (0) +// clang-format on + +// clang-format off +#define CLOSE_SHADOW_DISP(g) \ + do {} while (0); \ + (void)__shadow_opened; \ + SET_SHADOW_DISP(__shadow_gfx); \ + } \ + CLOSE_DISP(g); \ + do {} while (0) +// clang-format on + +#define SHADOW_DISP __shadow_gfx + +#define GRAPH_ALLOC(graph, size) \ + ((void*)((graph)->polygon_opaque_thaga.tha.tail_p = \ + (char*)((int)(graph)->polygon_opaque_thaga.tha.tail_p - (int)(size)))) #define GRAPH_ALLOC_TYPE(graph, type, num) (GRAPH_ALLOC(graph, sizeof(type) * (num))) extern u8 SoftResetEnable; diff --git a/include/m_address_ovl.h b/include/m_address_ovl.h index 93946d07..0c6ea56d 100644 --- a/include/m_address_ovl.h +++ b/include/m_address_ovl.h @@ -13,24 +13,28 @@ extern "C" { #define mAD_PAGE_NUM 3 struct address_ovl_s { - u8 _00; - u8 _01; - u8 command; - u8 _03; - u8 _04; - u8 selected_entry; - u8 show_museum_address; - u8 _07; - u8 page_entry_count[mAD_PAGE_NUM]; - f32 _0C; - f32 _10; - f32 _14[mAD_PAGE_NUM]; - f32 _20[mAD_PAGE_NUM]; - Mail_nm_c player_mail_name[PLAYER_NUM + 1]; // last entry is the museum name - Mail_nm_c animal_mail_name[ANIMAL_NUM_MAX]; - Gfx* display_list; // set to the beginning of the address display list data for drawing over editor etc + u8 _00; + u8 _01; + u8 command; + u8 _03; + u8 _04; + u8 selected_entry; + u8 show_museum_address; + u8 _07; + u8 page_entry_count[mAD_PAGE_NUM]; + f32 _0C; + f32 _10; + f32 _14[mAD_PAGE_NUM]; + f32 _20[mAD_PAGE_NUM]; + Mail_nm_c player_mail_name[PLAYER_NUM + 1]; // last entry is the museum name + Mail_nm_c animal_mail_name[ANIMAL_NUM_MAX]; + Gfx* display_list; // set to the beginning of the address display list data for drawing over editor etc }; +extern void mAD_address_ovl_construct(Submenu* submenu); +extern void mAD_address_ovl_destruct(Submenu* submenu); +extern void mAD_address_ovl_set_proc(Submenu* submenu); + #ifdef __cplusplus } #endif diff --git a/include/m_calendar_ovl.h b/include/m_calendar_ovl.h new file mode 100644 index 00000000..66471c23 --- /dev/null +++ b/include/m_calendar_ovl.h @@ -0,0 +1,18 @@ +#ifndef M_CALENDAR_OVL_H +#define M_CALENDAR_OVL_H + +#include "types.h" + +#ifdef __cplusplus +extern "C" { +#endif + +extern void mCD_calendar_ovl_construct(Submenu* submenu); +extern void mCD_calendar_ovl_destruct(Submenu* submenu); +extern void mCD_calendar_ovl_set_proc(Submenu* submenu); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/include/m_calendar_ovl_h.h b/include/m_calendar_ovl_h.h new file mode 100644 index 00000000..2fca2ef1 --- /dev/null +++ b/include/m_calendar_ovl_h.h @@ -0,0 +1,14 @@ +#ifndef M_CALENDAR_OVL_H_H +#define M_CALENDAR_OVL_H_H + +#include "types.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/include/m_cpedit_ovl.h b/include/m_cpedit_ovl.h new file mode 100644 index 00000000..a2c2f5d6 --- /dev/null +++ b/include/m_cpedit_ovl.h @@ -0,0 +1,18 @@ +#ifndef M_CPEDIT_OVL_H +#define M_CPEDIT_OVL_H + +#include "types.h" + +#ifdef __cplusplus +extern "C" { +#endif + +extern void mCE_cpedit_ovl_construct(Submenu* submenu); +extern void mCE_cpedit_ovl_destruct(Submenu* submenu); +extern void mCE_cpedit_ovl_set_proc(Submenu* submenu); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/include/m_cpedit_ovl_h.h b/include/m_cpedit_ovl_h.h new file mode 100644 index 00000000..e5af438e --- /dev/null +++ b/include/m_cpedit_ovl_h.h @@ -0,0 +1,14 @@ +#ifndef M_CPEDIT_OVL_H_H +#define M_CPEDIT_OVL_H_H + +#include "types.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/include/m_cpmail_ovl.h b/include/m_cpmail_ovl.h new file mode 100644 index 00000000..da1ca72f --- /dev/null +++ b/include/m_cpmail_ovl.h @@ -0,0 +1,18 @@ +#ifndef M_CPMAIL_OVL_H +#define M_CPMAIL_OVL_H + +#include "types.h" + +#ifdef __cplusplus +extern "C" { +#endif + +extern void mCM_cpmail_ovl_construct(Submenu* submenu); +extern void mCM_cpmail_ovl_destruct(Submenu* submenu); +extern void mCM_cpmail_ovl_set_proc(Submenu* submenu); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/include/m_cpmail_ovl_h.h b/include/m_cpmail_ovl_h.h new file mode 100644 index 00000000..0249784d --- /dev/null +++ b/include/m_cpmail_ovl_h.h @@ -0,0 +1,14 @@ +#ifndef M_CPMAIL_OVL_H_H +#define M_CPMAIL_OVL_H_H + +#include "types.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/include/m_cporiginal_ovl.h b/include/m_cporiginal_ovl.h index 103f50f9..5a5b1fe7 100644 --- a/include/m_cporiginal_ovl.h +++ b/include/m_cporiginal_ovl.h @@ -13,6 +13,12 @@ extern int mCO_top_folder(Submenu* submenu); 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); +extern void mCO_draw_cporiginal(Submenu* submenu, GRAPH* graph, f32 pos_x, f32 pos_y, f32 scale, int idx, + int color_flag); + +extern void mCO_cporiginal_ovl_construct(Submenu* submenu); +extern void mCO_cporiginal_ovl_destruct(Submenu* submenu); +extern void mCO_cporiginal_ovl_set_proc(Submenu* submenu); #ifdef __cplusplus } diff --git a/include/m_cpwarning_ovl.h b/include/m_cpwarning_ovl.h new file mode 100644 index 00000000..8315626b --- /dev/null +++ b/include/m_cpwarning_ovl.h @@ -0,0 +1,18 @@ +#ifndef M_CPWARNING_OVL_H +#define M_CPWARNING_OVL_H + +#include "types.h" + +#ifdef __cplusplus +extern "C" { +#endif + +extern void mCW_cpwarning_ovl_construct(Submenu* submenu); +extern void mCW_cpwarning_ovl_destruct(Submenu* submenu); +extern void mCW_cpwarning_ovl_set_proc(Submenu* submenu); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/include/m_cpwarning_ovl_h.h b/include/m_cpwarning_ovl_h.h new file mode 100644 index 00000000..08aa6d22 --- /dev/null +++ b/include/m_cpwarning_ovl_h.h @@ -0,0 +1,14 @@ +#ifndef M_CPWARNING_OVL_H_H +#define M_CPWARNING_OVL_H_H + +#include "types.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/include/m_design_ovl.h b/include/m_design_ovl.h index 13e0998a..b24fcd11 100644 --- a/include/m_design_ovl.h +++ b/include/m_design_ovl.h @@ -10,6 +10,10 @@ extern "C" { extern void mDE_maskcat_init(MaskCat_c* mask_cat); +extern void mDE_design_ovl_construct(Submenu* submenu); +extern void mDE_design_ovl_destruct(Submenu* submenu); +extern void mDE_design_ovl_set_proc(Submenu* submenu); + #ifdef __cplusplus } #endif diff --git a/include/m_diary_ovl.h b/include/m_diary_ovl.h index 58f9d823..65c5fd55 100644 --- a/include/m_diary_ovl.h +++ b/include/m_diary_ovl.h @@ -10,41 +10,45 @@ extern "C" { #endif enum { - mDI_FIELD_BODY, + mDI_FIELD_BODY, - mDI_FIELD_NUM + mDI_FIELD_NUM }; struct diary_ovl_s { - mDi_data_c* data; - u8 field; - u8 _05; - s16 entry_len[mDI_FIELD_NUM]; - mDi_entry_c* current_entry; - int _0C; - int _10; - int _14; - int _18; - s16 move_proc; - s16 _1E; - s16 _20; - s16 _22; - s16 _24; - f32 _28; - s16 _2C; - s16 _2E; - s16 _30; - s16 _32; - u32 trigger; - u32 button; - u32 last_button; - s16 _40; - s16 _42; - s16 cursor_idx; - s16 _46; - s16 _48; + mDi_data_c* data; + u8 field; + u8 _05; + s16 entry_len[mDI_FIELD_NUM]; + mDi_entry_c* current_entry; + int _0C; + int _10; + int _14; + int _18; + s16 move_proc; + s16 _1E; + s16 _20; + s16 _22; + s16 _24; + f32 _28; + s16 _2C; + s16 _2E; + s16 _30; + s16 _32; + u32 trigger; + u32 button; + u32 last_button; + s16 _40; + s16 _42; + s16 cursor_idx; + s16 _46; + s16 _48; }; +extern void mDI_diary_ovl_construct(Submenu* submenu); +extern void mDI_diary_ovl_destruct(Submenu* submenu); +extern void mDI_diary_ovl_set_proc(Submenu* submenu); + #ifdef __cplusplus } #endif diff --git a/include/m_editEndChk.h b/include/m_editEndChk_ovl.h similarity index 60% rename from include/m_editEndChk.h rename to include/m_editEndChk_ovl.h index 52a59f06..dbcbf760 100644 --- a/include/m_editEndChk.h +++ b/include/m_editEndChk_ovl.h @@ -2,7 +2,7 @@ #define M_ENDEDITCHK_H #include "types.h" -#include "m_editEndChk_h.h" +#include "m_editEndChk_ovl_h.h" #include "m_submenu_ovl.h" #ifdef __cplusplus @@ -11,21 +11,21 @@ extern "C" { /* TODO: verify these */ enum { - mEE_TYPE_BOARD, - mEE_TYPE_NOTICE, - mEE_TYPE_MSCORE, - mEE_TYPE_CPORIGINAL, - mEE_TYPE_ORIGINAL_DESIGN, + mEE_TYPE_BOARD, + mEE_TYPE_NOTICE, + mEE_TYPE_MSCORE, + mEE_TYPE_CPORIGINAL, + mEE_TYPE_ORIGINAL_DESIGN, - mEE_TYPE_NUM + mEE_TYPE_NUM }; struct end_edit_chk_s { - u8 moving_in; - u8 selected_answer; - u8 question_alpha_step; - u8 question_alpha; - f32 scale; + u8 moving_in; + u8 selected_answer; + u8 question_alpha_step; + u8 question_alpha; + f32 scale; }; extern void mEE_editEndChk_ovl_set_proc(Submenu* submenu); diff --git a/include/m_editEndChk_h.h b/include/m_editEndChk_ovl_h.h similarity index 100% rename from include/m_editEndChk_h.h rename to include/m_editEndChk_ovl_h.h diff --git a/include/m_gba_ovl.h b/include/m_gba_ovl.h index 8fb4896f..f720b999 100644 --- a/include/m_gba_ovl.h +++ b/include/m_gba_ovl.h @@ -9,6 +9,11 @@ extern "C" { #endif extern void mGB_copy_image(Submenu*, mActor_name_t, mActor_name_t); +extern void mGB_draw_gba(Submenu* submenu, GRAPH* graph, f32 pos_x, f32 pos_y, f32 scale, int idx, int color_flag); + +extern void mGB_gba_ovl_construct(Submenu* submenu); +extern void mGB_gba_ovl_destruct(Submenu* submenu); +extern void mGB_gba_ovl_set_proc(Submenu* submenu); #ifdef __cplusplus } diff --git a/include/m_haniwa_ovl.h b/include/m_haniwa_ovl.h new file mode 100644 index 00000000..18c9b07a --- /dev/null +++ b/include/m_haniwa_ovl.h @@ -0,0 +1,18 @@ +#ifndef M_HANIWA_OVL_H +#define M_HANIWA_OVL_H + +#include "types.h" + +#ifdef __cplusplus +extern "C" { +#endif + +extern void mHW_haniwa_ovl_construct(Submenu* submenu); +extern void mHW_haniwa_ovl_destruct(Submenu* submenu); +extern void mHW_haniwa_ovl_set_proc(Submenu* submenu); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/include/m_haniwa_ovl_h.h b/include/m_haniwa_ovl_h.h new file mode 100644 index 00000000..accb48d5 --- /dev/null +++ b/include/m_haniwa_ovl_h.h @@ -0,0 +1,14 @@ +#ifndef M_HANIWA_OVL_H_H +#define M_HANIWA_OVL_H_H + +#include "types.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/include/m_inventory_ovl.h b/include/m_inventory_ovl.h index bb698174..8d316922 100644 --- a/include/m_inventory_ovl.h +++ b/include/m_inventory_ovl.h @@ -46,6 +46,10 @@ struct inventory_ovl_s { u8 _3E3[0x5EC - 0x3E3]; }; +extern void mIV_inventory_ovl_construct(Submenu* submenu); +extern void mIV_inventory_ovl_destruct(Submenu* submenu); +extern void mIV_inventory_ovl_set_proc(Submenu* submenu); + #ifdef __cplusplus } #endif diff --git a/include/m_ledit_ovl.h b/include/m_ledit_ovl.h index 0deacc0c..ed2372e8 100644 --- a/include/m_ledit_ovl.h +++ b/include/m_ledit_ovl.h @@ -8,17 +8,21 @@ extern "C" { #endif enum { - mLE_TYPE_PLAYER_NAME, - mLE_TYPE_COUNTRY_NAME, - mLE_TYPE_EPHRASE, - mLE_TYPE_RESET, - mLE_TYPE_REQUEST, - mLE_TYPE_MYORIGINAL_NAME, - mLE_TYPE_ISLAND_NAME, + mLE_TYPE_PLAYER_NAME, + mLE_TYPE_COUNTRY_NAME, + mLE_TYPE_EPHRASE, + mLE_TYPE_RESET, + mLE_TYPE_REQUEST, + mLE_TYPE_MYORIGINAL_NAME, + mLE_TYPE_ISLAND_NAME, - mLE_TYPE_NUM + mLE_TYPE_NUM }; +extern void mLE_ledit_ovl_construct(Submenu* submenu); +extern void mLE_ledit_ovl_destruct(Submenu* submenu); +extern void mLE_ledit_ovl_set_proc(Submenu* submenu); + #ifdef __cplusplus } #endif diff --git a/include/m_mailbox_ovl.h b/include/m_mailbox_ovl.h new file mode 100644 index 00000000..5e85bd13 --- /dev/null +++ b/include/m_mailbox_ovl.h @@ -0,0 +1,18 @@ +#ifndef M_MAILBOX_OVL_H +#define M_MAILBOX_OVL_H + +#include "types.h" + +#ifdef __cplusplus +extern "C" { +#endif + +extern void mMB_mailbox_ovl_construct(Submenu* submenu); +extern void mMB_mailbox_ovl_destruct(Submenu* submenu); +extern void mMB_mailbox_ovl_set_proc(Submenu* submenu); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/include/m_mailbox_ovl_h.h b/include/m_mailbox_ovl_h.h new file mode 100644 index 00000000..97c14269 --- /dev/null +++ b/include/m_mailbox_ovl_h.h @@ -0,0 +1,14 @@ +#ifndef M_MAILBOX_OVL_H_H +#define M_MAILBOX_OVL_H_H + +#include "types.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/include/m_mscore_ovl.h b/include/m_mscore_ovl.h new file mode 100644 index 00000000..7891970d --- /dev/null +++ b/include/m_mscore_ovl.h @@ -0,0 +1,18 @@ +#ifndef M_MSCORE_OVL_H +#define M_MSCORE_OVL_H + +#include "types.h" + +#ifdef __cplusplus +extern "C" { +#endif + +extern void mMS_mscore_ovl_construct(Submenu* submenu); +extern void mMS_mscore_ovl_destruct(Submenu* submenu); +extern void mMS_mscore_ovl_set_proc(Submenu* submenu); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/include/m_mscore_ovl_h.h b/include/m_mscore_ovl_h.h new file mode 100644 index 00000000..f39bc8e8 --- /dev/null +++ b/include/m_mscore_ovl_h.h @@ -0,0 +1,14 @@ +#ifndef M_MSCORE_OVL_H_H +#define M_MSCORE_OVL_H_H + +#include "types.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/include/m_needlework_ovl.h b/include/m_needlework_ovl.h index 4dfe124f..e33f6f16 100644 --- a/include/m_needlework_ovl.h +++ b/include/m_needlework_ovl.h @@ -12,6 +12,11 @@ extern u8 mNW_get_image_no(Submenu* submenu, int slot_no); extern int mNW_check_hide_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); + +extern void mNW_needlework_ovl_construct(Submenu* submenu); +extern void mNW_needlework_ovl_destruct(Submenu* submenu); +extern void mNW_needlework_ovl_set_proc(Submenu* submenu); #ifdef __cplusplus } diff --git a/include/m_passwordChk_ovl.h b/include/m_passwordChk_ovl.h index 7662ed92..e48ba704 100644 --- a/include/m_passwordChk_ovl.h +++ b/include/m_passwordChk_ovl.h @@ -13,13 +13,17 @@ extern "C" { #define mPC_LINE_COUNT 2 struct passwordChk_ovl_s { - int selected_line; - u8 _04; - u8 _05; - u8 line0[mPC_STR_SIZE]; - u8 line1[mPC_STR_SIZE]; + int selected_line; + u8 _04; + u8 _05; + u8 line0[mPC_STR_SIZE]; + u8 line1[mPC_STR_SIZE]; }; +extern void mPC_passwordChk_ovl_construct(Submenu* submenu); +extern void mPC_passwordChk_ovl_destruct(Submenu* submenu); +extern void mPC_passwordChk_ovl_set_proc(Submenu* submenu); + #ifdef __cplusplus } #endif diff --git a/include/m_passwordMake_ovl.h b/include/m_passwordMake_ovl.h index b9e66b9a..8b6acf25 100644 --- a/include/m_passwordMake_ovl.h +++ b/include/m_passwordMake_ovl.h @@ -11,19 +11,23 @@ extern "C" { #endif enum { - mPM_ENTRY_TOWN, - mPM_ENTRY_PLAYER, + mPM_ENTRY_TOWN, + mPM_ENTRY_PLAYER, - mPM_ENTRY_NUM + mPM_ENTRY_NUM }; struct passwordMake_ovl_s { - int selected_idx; - u8 lengths[mPM_ENTRY_NUM]; - u8 town_name[LAND_NAME_SIZE]; - u8 player_name[PLAYER_NAME_LEN]; + int selected_idx; + u8 lengths[mPM_ENTRY_NUM]; + u8 town_name[LAND_NAME_SIZE]; + u8 player_name[PLAYER_NAME_LEN]; }; +extern void mPM_passwordMake_ovl_construct(Submenu* submenu); +extern void mPM_passwordMake_ovl_destruct(Submenu* submenu); +extern void mPM_passwordMake_ovl_set_proc(Submenu* submenu); + #ifdef __cplusplus } #endif diff --git a/include/m_submenu_ovl.h b/include/m_submenu_ovl.h index 10f904e6..abee6321 100644 --- a/include/m_submenu_ovl.h +++ b/include/m_submenu_ovl.h @@ -18,7 +18,7 @@ #include "m_board_ovl_h.h" #include "m_diary_ovl_h.h" #include "m_address_ovl_h.h" -#include "m_editEndChk_h.h" +#include "m_editEndChk_ovl_h.h" #include "m_haniwaPortrait_ovl_h.h" #include "m_timeIn_ovl_h.h" #include "m_repay_ovl_h.h" @@ -43,6 +43,28 @@ enum { mSM_OVL_PROC_NUM }; +#define mSM_OVL_FLAG_NONE (0) +#define mSM_OVL_FLAG_0 (1 << 0) +#define mSM_OVL_FLAG_USE_ITEM (1 << 1) +#define mSM_OVL_FLAG_USE_TAG (1 << 2) +#define mSM_OVL_FLAG_USE_HAND (1 << 3) +#define mSM_OVL_FLAG_USE_HANIWA_PORTRAIT (1 << 4) + +typedef void (*mSM_OVL_CT_PROC)(Submenu*); +typedef void (*mSM_OVL_DT_PROC)(Submenu*); +typedef void (*mSM_OVL_SET_PROC)(Submenu*); + +typedef struct submenu_ovl_dlftbl_s { + int _00; + int _04; + u8* seg_start; + u8* seg_end; + mSM_OVL_CT_PROC ct_proc; + mSM_OVL_DT_PROC dt_proc; + mSM_OVL_SET_PROC set_proc; + int in_ram_flag; +} mSM_Ovl_dlftbl_c; + // TODO: fill this out typedef struct submenu_segment_s { int _00; @@ -50,7 +72,9 @@ typedef struct submenu_segment_s { s16 _06; s16 _08; s16 _0A; - u8 _0C[0x54 - 0x0C]; + u8 _0C[0x30 - 0x0C]; + int dlftbl_loaded_num; + mSM_Ovl_dlftbl_c* dlftbl_loaded_tbl[8]; } mSM_Segment_c; typedef struct submenu_menu_info_s { @@ -71,7 +95,7 @@ typedef struct submenu_menu_info_s { int next_proc_status; s16 move_drt; - u16 _36; + s16 move_flag; int data0; int data1; @@ -181,7 +205,7 @@ struct submenu_overlay_s { extern void mSM_menu_ovl_init(Submenu* submenu); extern void mSM_draw_original(Submenu* submenu, GRAPH* graph, f32 pos_x, f32 pos_y, f32 scale, mActor_name_t item, - int shadow_flag); + int color_flag); #ifdef __cplusplus } diff --git a/include/m_tag_ovl.h b/include/m_tag_ovl.h index 70128978..d44cbd8e 100644 --- a/include/m_tag_ovl.h +++ b/include/m_tag_ovl.h @@ -166,6 +166,9 @@ struct tag_ovl_s { extern int mTG_mark_main(Submenu*, mSM_MenuInfo_c*, int, int); extern int mTG_mark_mainX(Submenu*, mSM_MenuInfo_c*, int, int, int, int); +extern void mTG_tag_ovl_construct(Submenu* submenu); +extern void mTG_tag_ovl_destruct(Submenu* submenu); + #ifdef __cplusplus } #endif diff --git a/src/m_all_grow_ovl.c b/src/m_all_grow_ovl.c index 479c2a0d..68ba573e 100644 --- a/src/m_all_grow_ovl.c +++ b/src/m_all_grow_ovl.c @@ -12,10 +12,6 @@ #include "m_shop.h" #include "m_scene_table.h" -#ifdef MUST_MATCH -#include "ppcdis.h" -#endif - static u8 l_candidate_num[FG_BLOCK_TOTAL_NUM]; static s8 l_non_area[mAGrw_CHECK_CANCEL_NUM][4] = { diff --git a/src/m_board_ovl.c b/src/m_board_ovl.c index 5da621d8..4d9844e0 100644 --- a/src/m_board_ovl.c +++ b/src/m_board_ovl.c @@ -2,7 +2,7 @@ #include "m_common_data.h" #include "m_editor_ovl.h" -#include "m_editEndChk.h" +#include "m_editEndChk_ovl.h" #include "m_font.h" #include "m_tag_ovl.h" #include "sys_matrix.h" @@ -74,264 +74,262 @@ extern Gfx lat_letter62_model[]; extern Gfx lat_letter63_win_model[]; extern Gfx lat_letter64_model[]; -static Gfx* paper_disp_model[PAPER_NUM] = { - lat_letter01_model, - lat_letter02_model, - lat_letter03_model, - lat_letter04_model, - lat_letter05_model, - lat_letter06_model, - lat_letter07_model, - lat_letter08_model, - lat_letter09_model, - lat_letter10_model, - lat_letter11_model, - lat_letter12_model, - lat_letter13_model, - lat_letter14_model, - lat_letter15_model, - lat_letter16_model, - lat_letter17_model, - lat_letter18_model, - lat_letter19_model, - lat_letter20_model, - lat_letter21_model, - lat_letter22_model, - lat_letter23_model, - lat_letter24_model, - lat_letter25_model, - lat_letter26_model, - lat_letter27_model, - lat_letter28_model, - lat_letter29_model, - lat_letter30_model, - lat_letter31_model, - lat_letter32_model, - lat_letter33_model, - lat_letter34_model, - lat_letter35_model, - lat_letter36_model, - lat_letter37_model, - lat_letter38_model, - lat_letter39_model, - lat_letter40_model, - lat_letter41_model, - lat_letter42_model, - lat_letter43_model, - lat_letter44_model, - lat_letter45_model, - lat_letter46_model, - lat_letter47_model, - lat_letter48_model, - lat_letter49_model, - lat_letter50_model, - lat_letter51_model, - lat_letter52_model, - lat_letter53_model, - lat_letter54_model, - lat_letter55_model, - lat_letter56_model, - lat_letter57_model, - lat_letter58_model, - lat_letter59_model, - lat_letter60_model, - lat_letter61_model, - lat_letter62_model, - lat_letter63_win_model, - lat_letter64_model, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL -}; +static Gfx* paper_disp_model[PAPER_NUM] = { lat_letter01_model, + lat_letter02_model, + lat_letter03_model, + lat_letter04_model, + lat_letter05_model, + lat_letter06_model, + lat_letter07_model, + lat_letter08_model, + lat_letter09_model, + lat_letter10_model, + lat_letter11_model, + lat_letter12_model, + lat_letter13_model, + lat_letter14_model, + lat_letter15_model, + lat_letter16_model, + lat_letter17_model, + lat_letter18_model, + lat_letter19_model, + lat_letter20_model, + lat_letter21_model, + lat_letter22_model, + lat_letter23_model, + lat_letter24_model, + lat_letter25_model, + lat_letter26_model, + lat_letter27_model, + lat_letter28_model, + lat_letter29_model, + lat_letter30_model, + lat_letter31_model, + lat_letter32_model, + lat_letter33_model, + lat_letter34_model, + lat_letter35_model, + lat_letter36_model, + lat_letter37_model, + lat_letter38_model, + lat_letter39_model, + lat_letter40_model, + lat_letter41_model, + lat_letter42_model, + lat_letter43_model, + lat_letter44_model, + lat_letter45_model, + lat_letter46_model, + lat_letter47_model, + lat_letter48_model, + lat_letter49_model, + lat_letter50_model, + lat_letter51_model, + lat_letter52_model, + lat_letter53_model, + lat_letter54_model, + lat_letter55_model, + lat_letter56_model, + lat_letter57_model, + lat_letter58_model, + lat_letter59_model, + lat_letter60_model, + lat_letter61_model, + lat_letter62_model, + lat_letter63_win_model, + lat_letter64_model, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL }; extern Gfx lat_letter01_sen_model[]; extern Gfx lat_letter02_sen_model[]; @@ -385,1265 +383,987 @@ extern Gfx lat_letter62_sen_model[]; extern Gfx lat_letter63_senT_model[]; extern Gfx lat_letter64_sen_model[]; -static Gfx* paper_disp_sen_model[PAPER_NUM] = { - lat_letter01_sen_model, - lat_letter02_sen_model, - lat_letter03_sen_model, - lat_letter04_senT_model, - NULL, - lat_letter06_sen_model, - lat_letter07_sen_model, - lat_letter08_sen_model, - NULL, - lat_letter10_sen_model, - NULL, - lat_letter12_sen_model, - NULL, - NULL, - NULL, - lat_letter16_sen_model, - lat_letter17_sen_model, - lat_letter18_sen_model, - NULL, - lat_letter20_sen_model, - lat_letter21_sen_model, - lat_letter22_sen_model, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - lat_letter29_sen_model, - lat_letter30_sen_model, - lat_letter31_sen_model, - lat_letter32_sen_model, - lat_letter33_sen_model, - lat_letter34_sen_model, - lat_letter35_sen_model, - lat_letter36_sen_model, - lat_letter37_sen_model, - lat_letter38_sen_model, - lat_letter39_sen_model, - lat_letter40_sen_model, - lat_letter41_sen_model, - lat_letter42_sen_model, - lat_letter43_sen_model, - lat_letter44_sen_model, - lat_letter45_sen_model, - lat_letter46_sen_model, - lat_letter47_sen_model, - lat_letter48_sen_model, - lat_letter49_sen_model, - lat_letter50_sen_model, - lat_letter51_sen_model, - lat_letter52_sen_model, - lat_letter53_sen_model, - lat_letter54_sen_model, - lat_letter55_sen_model, - lat_letter56_sen_model, - lat_letter57_sen_model, - lat_letter58_sen_model, - lat_letter59_sen_model, - lat_letter60_sen_model, - lat_letter61_sen_model, - lat_letter62_sen_model, - lat_letter63_senT_model, - lat_letter64_sen_model, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL -}; +static Gfx* paper_disp_sen_model[PAPER_NUM] = { lat_letter01_sen_model, + lat_letter02_sen_model, + lat_letter03_sen_model, + lat_letter04_senT_model, + NULL, + lat_letter06_sen_model, + lat_letter07_sen_model, + lat_letter08_sen_model, + NULL, + lat_letter10_sen_model, + NULL, + lat_letter12_sen_model, + NULL, + NULL, + NULL, + lat_letter16_sen_model, + lat_letter17_sen_model, + lat_letter18_sen_model, + NULL, + lat_letter20_sen_model, + lat_letter21_sen_model, + lat_letter22_sen_model, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + lat_letter29_sen_model, + lat_letter30_sen_model, + lat_letter31_sen_model, + lat_letter32_sen_model, + lat_letter33_sen_model, + lat_letter34_sen_model, + lat_letter35_sen_model, + lat_letter36_sen_model, + lat_letter37_sen_model, + lat_letter38_sen_model, + lat_letter39_sen_model, + lat_letter40_sen_model, + lat_letter41_sen_model, + lat_letter42_sen_model, + lat_letter43_sen_model, + lat_letter44_sen_model, + lat_letter45_sen_model, + lat_letter46_sen_model, + lat_letter47_sen_model, + lat_letter48_sen_model, + lat_letter49_sen_model, + lat_letter50_sen_model, + lat_letter51_sen_model, + lat_letter52_sen_model, + lat_letter53_sen_model, + lat_letter54_sen_model, + lat_letter55_sen_model, + lat_letter56_sen_model, + lat_letter57_sen_model, + lat_letter58_sen_model, + lat_letter59_sen_model, + lat_letter60_sen_model, + lat_letter61_sen_model, + lat_letter62_sen_model, + lat_letter63_senT_model, + lat_letter64_sen_model, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL }; static rgba_t letter_color[PAPER_NUM] = { - { 70, 40, 50, 255 }, - { 40, 40, 130, 255 }, - { 90, 30, 30, 255 }, - { 75, 115, 215, 255 }, - { 90, 70, 20, 255 }, - { 110, 60, 0, 255 }, - { 95, 25, 0, 255 }, - { 255, 255, 255, 255 }, - { 0, 100, 120, 255 }, - { 40, 85, 0, 255 }, - { 0, 40, 135, 255 }, - { 155, 50, 60, 255 }, - { 255, 255, 255, 255 }, - { 255, 255, 255, 255 }, - { 90, 90, 90, 255 }, - { 0, 10, 130, 255 }, - { 200, 255, 235, 255 }, - { 70, 45, 30, 255 }, - { 105, 65, 160, 255 }, - { 65, 60, 0, 255 }, - { 60, 0, 90, 255 }, - { 85, 85, 85, 255 }, - { 255, 180, 0, 255 }, - { 85, 55, 0, 255 }, - { 95, 75, 10, 255 }, - { 120, 120, 120, 255 }, - { 255, 255, 105, 255 }, - { 109, 83, 21, 255 }, - { 0, 155, 0, 255 }, - { 100, 130, 185, 255 }, - { 0, 100, 0, 255 }, - { 90, 100, 0, 255 }, - { 160, 0, 0, 255 }, - { 115, 60, 0, 255 }, - { 255, 185, 0, 255 }, - { 255, 255, 205, 255 }, - { 0, 0, 100, 255 }, - { 0, 100, 155, 255 }, - { 0, 100, 205, 255 }, - { 165, 20, 0, 255 }, - { 155, 40, 40, 255 }, - { 0, 80, 135, 255 }, - { 0, 20, 90, 255 }, - { 100, 100, 155, 255 }, - { 0, 80, 5, 255 }, - { 95, 70, 0, 255 }, - { 100, 140, 100, 255 }, - { 255, 255, 255, 255 }, - { 100, 110, 100, 255 }, - { 80, 70, 0, 255 }, - { 50, 155, 0, 255 }, - { 0, 95, 175, 255 }, - { 0, 50, 90, 255 }, - { 0, 60, 205, 255 }, - { 0, 100, 0, 255 }, - { 0, 80, 80, 255 }, - { 0, 115, 60, 255 }, - { 100, 80, 100, 255 }, - { 255, 255, 200, 255 }, - { 90, 60, 0, 255 }, - { 55, 125, 0, 255 }, - { 0, 155, 0, 255 }, - { 70, 50, 235, 255 }, - { 255, 255, 255, 255 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 } + { 70, 40, 50, 255 }, { 40, 40, 130, 255 }, { 90, 30, 30, 255 }, { 75, 115, 215, 255 }, + { 90, 70, 20, 255 }, { 110, 60, 0, 255 }, { 95, 25, 0, 255 }, { 255, 255, 255, 255 }, + { 0, 100, 120, 255 }, { 40, 85, 0, 255 }, { 0, 40, 135, 255 }, { 155, 50, 60, 255 }, + { 255, 255, 255, 255 }, { 255, 255, 255, 255 }, { 90, 90, 90, 255 }, { 0, 10, 130, 255 }, + { 200, 255, 235, 255 }, { 70, 45, 30, 255 }, { 105, 65, 160, 255 }, { 65, 60, 0, 255 }, + { 60, 0, 90, 255 }, { 85, 85, 85, 255 }, { 255, 180, 0, 255 }, { 85, 55, 0, 255 }, + { 95, 75, 10, 255 }, { 120, 120, 120, 255 }, { 255, 255, 105, 255 }, { 109, 83, 21, 255 }, + { 0, 155, 0, 255 }, { 100, 130, 185, 255 }, { 0, 100, 0, 255 }, { 90, 100, 0, 255 }, + { 160, 0, 0, 255 }, { 115, 60, 0, 255 }, { 255, 185, 0, 255 }, { 255, 255, 205, 255 }, + { 0, 0, 100, 255 }, { 0, 100, 155, 255 }, { 0, 100, 205, 255 }, { 165, 20, 0, 255 }, + { 155, 40, 40, 255 }, { 0, 80, 135, 255 }, { 0, 20, 90, 255 }, { 100, 100, 155, 255 }, + { 0, 80, 5, 255 }, { 95, 70, 0, 255 }, { 100, 140, 100, 255 }, { 255, 255, 255, 255 }, + { 100, 110, 100, 255 }, { 80, 70, 0, 255 }, { 50, 155, 0, 255 }, { 0, 95, 175, 255 }, + { 0, 50, 90, 255 }, { 0, 60, 205, 255 }, { 0, 100, 0, 255 }, { 0, 80, 80, 255 }, + { 0, 115, 60, 255 }, { 100, 80, 100, 255 }, { 255, 255, 200, 255 }, { 90, 60, 0, 255 }, + { 55, 125, 0, 255 }, { 0, 155, 0, 255 }, { 70, 50, 235, 255 }, { 255, 255, 255, 255 }, + { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, + { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, + { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, + { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, + { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, + { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, + { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, + { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, + { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, + { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, + { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, + { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, + { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, + { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, + { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, + { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, + { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, + { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, + { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, + { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, + { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, + { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, + { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, + { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, + { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, + { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, + { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, + { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, + { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, + { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, + { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, + { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, + { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, + { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, + { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, + { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, + { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, + { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, + { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, + { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, + { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, + { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, + { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, + { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, + { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, + { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, + { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, + { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 } }; static int mBD_strLineCheck(u8** str_pp, u8* str_end_p, int* width, int* line) { - u8* str_p = *str_pp; - int res = mBD_LINE_CHECK_OK; + u8* str_p = *str_pp; + int res = mBD_LINE_CHECK_OK; - if (str_p >= str_end_p) { - res = mBD_LINE_CHECK_OVERSTRING; - } - else if (*str_p == CHAR_NEW_LINE) { - str_pp[0] = str_p + 1; - line[0]++; - res = mBD_LINE_CHECK_NEWLINE; - } - else { - width[0] += mFont_GetCodeWidth(*str_p, TRUE); + if (str_p >= str_end_p) { + res = mBD_LINE_CHECK_OVERSTRING; + } else if (*str_p == CHAR_NEW_LINE) { + str_pp[0] = str_p + 1; + line[0]++; + res = mBD_LINE_CHECK_NEWLINE; + } else { + width[0] += mFont_GetCodeWidth(*str_p, TRUE); - if (*width > mBD_MAX_WIDTH) { - res = mBD_LINE_CHECK_OVERLINE; + if (*width > mBD_MAX_WIDTH) { + res = mBD_LINE_CHECK_OVERLINE; + } else { + str_pp[0]++; + line[0]++; + } } - else { - str_pp[0]++; - line[0]++; - } - } - return res; + return res; } static void mBD_roll_control(Submenu* submenu, mSM_MenuInfo_c* menu_info) { - mED_Ovl_c* editor_ovl = submenu->overlay->editor_ovl; - mBD_Ovl_c* board_ovl = submenu->overlay->board_ovl; + mED_Ovl_c* editor_ovl = submenu->overlay->editor_ovl; + mBD_Ovl_c* board_ovl = submenu->overlay->board_ovl; - if (editor_ovl != NULL) { - int line; - int dist; - f32 pos; - f32 pos_dist; - f32 abs_pos_dist; + if (editor_ovl != NULL) { + int line; + int dist; + f32 pos; + f32 pos_dist; + f32 abs_pos_dist; - if (board_ovl->field == mBD_FIELD_BODY) { - line = editor_ovl->_24 + 2; - } - else if (board_ovl->field == mBD_FIELD_HEADER) { - line = 0; - } - else { - line = 9; - } - - /* Calculate if we need to move the center of the display to the selected line */ - dist = line - board_ovl->center_line; - if (dist < -2) { - board_ovl->center_line = line + 2; - menu_info->speed[1] = 1.0f; - } - else if (dist > 2) { - board_ovl->center_line = line - 2; - menu_info->speed[1] = -1.0f; - } - - pos = (f32)((board_ovl->center_line - 2) * 16); - pos_dist = pos - menu_info->position[1]; - abs_pos_dist = fabsf(pos_dist); - - if (abs_pos_dist > 0.1f) { - /* Interpolate to final position */ - if (abs_pos_dist > 9.0f) { - menu_info->speed[1] *= 2.0f; - - if (menu_info->speed[1] > 4.0f) { - menu_info->speed[1] = 4.0f; + if (board_ovl->field == mBD_FIELD_BODY) { + line = editor_ovl->_24 + 2; + } else if (board_ovl->field == mBD_FIELD_HEADER) { + line = 0; + } else { + line = 9; } - } - else if (abs_pos_dist < 7.0f) { - menu_info->speed[1] *= 0.5f; - if (menu_info->speed[1] < 1.0f) { - menu_info->speed[1] = 1.0f; + /* Calculate if we need to move the center of the display to the selected line */ + dist = line - board_ovl->center_line; + if (dist < -2) { + board_ovl->center_line = line + 2; + menu_info->speed[1] = 1.0f; + } else if (dist > 2) { + board_ovl->center_line = line - 2; + menu_info->speed[1] = -1.0f; } - } - chase_f(&menu_info->position[1], pos, menu_info->speed[1]); + pos = (f32)((board_ovl->center_line - 2) * 16); + pos_dist = pos - menu_info->position[1]; + abs_pos_dist = fabsf(pos_dist); + + if (abs_pos_dist > 0.1f) { + /* Interpolate to final position */ + if (abs_pos_dist > 9.0f) { + menu_info->speed[1] *= 2.0f; + + if (menu_info->speed[1] > 4.0f) { + menu_info->speed[1] = 4.0f; + } + } else if (abs_pos_dist < 7.0f) { + menu_info->speed[1] *= 0.5f; + + if (menu_info->speed[1] < 1.0f) { + menu_info->speed[1] = 1.0f; + } + } + + chase_f(&menu_info->position[1], pos, menu_info->speed[1]); + } else { + /* Close enough so immediately move to final position */ + menu_info->position[1] = pos; + } } - else { - /* Close enough so immediately move to final position */ - menu_info->position[1] = pos; - } - } } static void mBD_roll_control2(mSM_MenuInfo_c* menu_info) { - f32 next_pos = menu_info->position[1] - menu_info->speed[1]; + f32 next_pos = menu_info->position[1] - menu_info->speed[1]; - if (menu_info->speed[1] < 1.0f) { - menu_info->speed[1] = 1.0f; - } - - if (next_pos > 0.0f) { - menu_info->position[1] = next_pos; - - if (next_pos > -15.0f) { - /* Speed up if the position is greater than -15 */ - - /* -15 is a weird choice because we're supposed to slow down - after passing 31... */ - menu_info->speed[1] *= 2.0f; - - if (menu_info->speed[1] > 16.0f) { - menu_info->speed[1] = 16.0f; - } - } - else if (next_pos < 31.0f) { - /* Slow down speed exponentially as we approach the top */ - menu_info->speed[1] *= 0.5f; - - if (menu_info->speed[1] < 1.0f) { + if (menu_info->speed[1] < 1.0f) { menu_info->speed[1] = 1.0f; - } } - } - else { - /* Clamp Y position to 0.0f */ - menu_info->position[1] = 0.0f; - menu_info->speed[1] = 0.0f; - } + + if (next_pos > 0.0f) { + menu_info->position[1] = next_pos; + + if (next_pos > -15.0f) { + /* Speed up if the position is greater than -15 */ + + /* -15 is a weird choice because we're supposed to slow down + after passing 31... */ + menu_info->speed[1] *= 2.0f; + + if (menu_info->speed[1] > 16.0f) { + menu_info->speed[1] = 16.0f; + } + } else if (next_pos < 31.0f) { + /* Slow down speed exponentially as we approach the top */ + menu_info->speed[1] *= 0.5f; + + if (menu_info->speed[1] < 1.0f) { + menu_info->speed[1] = 1.0f; + } + } + } else { + /* Clamp Y position to 0.0f */ + menu_info->position[1] = 0.0f; + menu_info->speed[1] = 0.0f; + } } static void mBD_move_Move(Submenu* submenu, mSM_MenuInfo_c* menu_info) { - (*submenu->overlay->move_Move_proc)(submenu, menu_info); + (*submenu->overlay->move_Move_proc)(submenu, menu_info); } static void mBD_move_Wait(Submenu* submenu, mSM_MenuInfo_c* menu_info) { - if ((getTrigger() & (BUTTON_A | BUTTON_B | BUTTON_START))) { - (*submenu->overlay->move_chg_base_proc)(menu_info, mSM_MOVE_OUT_TOP); - sAdo_SysTrgStart(0x5F); - } + if ((getTrigger() & (BUTTON_A | BUTTON_B | BUTTON_START))) { + (*submenu->overlay->move_chg_base_proc)(menu_info, mSM_MOVE_OUT_TOP); + sAdo_SysTrgStart(0x5F); + } } static void mBD_end_board(Submenu* submenu, mSM_MenuInfo_c* menu_info) { - mSM_MenuInfo_c* address_menu = &submenu->overlay->menu_info[mSM_OVL_ADDRESS]; + mSM_MenuInfo_c* address_menu = &submenu->overlay->menu_info[mSM_OVL_ADDRESS]; - (*submenu->overlay->move_chg_base_proc)(menu_info, mSM_MOVE_OUT_TOP); - (*submenu->overlay->return_func_proc)(submenu, address_menu); + (*submenu->overlay->move_chg_base_proc)(menu_info, mSM_MOVE_OUT_TOP); + (*submenu->overlay->return_func_proc)(submenu, address_menu); } static void mBD_move_play(Submenu* submenu, mSM_MenuInfo_c* menu_info) { - mSM_MenuInfo_c* editor_menu = &submenu->overlay->menu_info[mSM_OVL_EDITOR]; + mSM_MenuInfo_c* editor_menu = &submenu->overlay->menu_info[mSM_OVL_EDITOR]; - if (editor_menu->next_proc_status == mSM_OVL_PROC_END) { - menu_info->proc_status = mSM_OVL_PROC_OBEY; - submenu->overlay->board_ovl->center_line = 2; - mSM_open_submenu(submenu, mSM_OVL_EDITENDCHK, mEE_TYPE_BOARD, 0); - } - else { - mBD_roll_control(submenu, menu_info); - } + if (editor_menu->next_proc_status == mSM_OVL_PROC_END) { + menu_info->proc_status = mSM_OVL_PROC_OBEY; + submenu->overlay->board_ovl->center_line = 2; + mSM_open_submenu(submenu, mSM_OVL_EDITENDCHK, mEE_TYPE_BOARD, 0); + } else { + mBD_roll_control(submenu, menu_info); + } } -static void mBD_move_Obey(Submenu* submenu, mSM_MenuInfo_c* menu_info) { - mSM_MenuInfo_c* editEndChk_menu = &submenu->overlay->menu_info[mSM_OVL_EDITENDCHK]; - mBD_Ovl_c* board_ovl = submenu->overlay->board_ovl; - mED_Ovl_c* editor_ovl; - Mail_hs_c* mail_header; - int footer_len; - int footer_len_diff; - int t_footer_len; - u8 t_footer[48]; - u8* t_footer_p; - int i; +static void mBD_move_Obey(Submenu* submenu, mSM_MenuInfo_c* menu_info) { + mSM_MenuInfo_c* editEndChk_menu = &submenu->overlay->menu_info[mSM_OVL_EDITENDCHK]; + mBD_Ovl_c* board_ovl = submenu->overlay->board_ovl; + mED_Ovl_c* editor_ovl; + Mail_hs_c* mail_header; + int footer_len; + int footer_len_diff; + int t_footer_len; + u8 t_footer[48]; + u8* t_footer_p; + int i; - mBD_roll_control2(menu_info); + mBD_roll_control2(menu_info); - if (editEndChk_menu->proc_status == mSM_OVL_PROC_MOVE && editEndChk_menu->next_proc_status == mSM_OVL_PROC_END) { - editor_ovl = submenu->overlay->editor_ovl; + if (editEndChk_menu->proc_status == mSM_OVL_PROC_MOVE && editEndChk_menu->next_proc_status == mSM_OVL_PROC_END) { + editor_ovl = submenu->overlay->editor_ovl; - /* Did they select the 'yes' option? */ - if (editEndChk_menu->data1 == 0) { - mail_header = &Common_Get(now_private)->saved_mail_header; - mMl_copy_mail(board_ovl->dst_p, &board_ovl->mail); // copy over mail - footer_len = mMl_strlen(board_ovl->mail.content.footer, MAIL_FOOTER_LEN, CHAR_SPACE); - footer_len_diff = board_ovl->lengths[mBD_FIELD_FOOTER] - footer_len; - mem_copy(t_footer, board_ovl->dst_p->content.footer, MAIL_FOOTER_LEN); - t_footer_p = t_footer; - t_footer_len = 0; + /* Did they select the 'yes' option? */ + if (editEndChk_menu->data1 == 0) { + mail_header = &Common_Get(now_private)->saved_mail_header; + mMl_copy_mail(board_ovl->dst_p, &board_ovl->mail); // copy over mail + footer_len = mMl_strlen(board_ovl->mail.content.footer, MAIL_FOOTER_LEN, CHAR_SPACE); + footer_len_diff = board_ovl->lengths[mBD_FIELD_FOOTER] - footer_len; + mem_copy(t_footer, board_ovl->dst_p->content.footer, MAIL_FOOTER_LEN); + t_footer_p = t_footer; + t_footer_len = 0; - for (i = 0; i < footer_len; i++) { - if (*t_footer_p != CHAR_SPACE) { - break; + for (i = 0; i < footer_len; i++) { + if (*t_footer_p != CHAR_SPACE) { + break; + } + + t_footer_len++; + t_footer_p++; + } + + mem_clear(board_ovl->dst_p->content.footer, MAIL_FOOTER_LEN, CHAR_SPACE); + + /* Check if we should copy part of the old footer back */ + if (footer_len_diff < MAIL_FOOTER_LEN) { + mem_copy(board_ovl->dst_p->content.footer + footer_len_diff, t_footer_p, footer_len - t_footer_len); + } + + if (menu_info->data0 != mSM_BD_OPEN_WRITE_ISLAND) { + mail_header->header_back_start = board_ovl->mail.content.header_back_start; + mem_copy(mail_header->header, board_ovl->dst_p->content.header, MAIL_HEADER_LEN); + mem_copy(mail_header->footer, board_ovl->dst_p->content.footer, MAIL_FOOTER_LEN); + } + + /* Decrement stationery count */ + if (menu_info->data1 != -1) { + int paper_tmp = Common_Get(now_private)->inventory.pockets[menu_info->data1] - ITM_PAPER_START; + int paper_num = (paper_tmp / PAPER_UNIQUE_NUM) + 1; + int paper_no = paper_tmp % PAPER_UNIQUE_NUM; + + if (paper_num > 1) { + mPr_SetPossessionItem(Common_Get(now_private), menu_info->data1, + ITM_PAPER_START + paper_no + (paper_num - 2) * PAPER_UNIQUE_NUM, + mPr_ITEM_COND_NORMAL); + } else { + mPr_SetPossessionItem(Common_Get(now_private), menu_info->data1, EMPTY_NO, mPr_ITEM_COND_NORMAL); + } + + (*submenu->overlay->tag_ovl->init_tag_data_item_win_proc)(submenu); + } + + mBD_end_board(submenu, menu_info); + } else if (editEndChk_menu->data1 == 1) { + /* 'No' option was selected */ + mSM_open_submenu_new2(submenu, mSM_OVL_EDITOR, mED_TYPE_BOARD, 0, board_ovl->mail.content.body, + MAIL_BODY_LEN); + board_ovl->field = mBD_FIELD_BODY; + board_ovl->header_pos = mBD_HEADER_POS_PRE_NAME; + menu_info->proc_status = mSM_OVL_PROC_PLAY; + } else { + /* 'Cancel' option was selected */ + mBD_end_board(submenu, menu_info); } - t_footer_len++; - t_footer_p++; - } - - mem_clear(board_ovl->dst_p->content.footer, MAIL_FOOTER_LEN, CHAR_SPACE); - - /* Check if we should copy part of the old footer back */ - if (footer_len_diff < MAIL_FOOTER_LEN) { - mem_copy(board_ovl->dst_p->content.footer + footer_len_diff, t_footer_p, footer_len - t_footer_len); - } - - if (menu_info->data0 != mSM_BD_OPEN_WRITE_ISLAND) { - mail_header->header_back_start = board_ovl->mail.content.header_back_start; - mem_copy(mail_header->header, board_ovl->dst_p->content.header, MAIL_HEADER_LEN); - mem_copy(mail_header->footer, board_ovl->dst_p->content.footer, MAIL_FOOTER_LEN); - } - - /* Decrement stationery count */ - if (menu_info->data1 != -1) { - int paper_tmp = Common_Get(now_private)->inventory.pockets[menu_info->data1] - ITM_PAPER_START; - int paper_num = (paper_tmp / PAPER_UNIQUE_NUM) + 1; - int paper_no = paper_tmp % PAPER_UNIQUE_NUM; - - if (paper_num > 1) { - mPr_SetPossessionItem(Common_Get(now_private), menu_info->data1, ITM_PAPER_START + paper_no + (paper_num - 2) * PAPER_UNIQUE_NUM, mPr_ITEM_COND_NORMAL); + if (editor_ovl != NULL) { + editor_ovl->cursor_idx = 0; + editor_ovl->_22 = 0; + editor_ovl->_24 = 0; } - else { - mPr_SetPossessionItem(Common_Get(now_private), menu_info->data1, EMPTY_NO, mPr_ITEM_COND_NORMAL); - } - - (*submenu->overlay->tag_ovl->init_tag_data_item_win_proc)(submenu); - } - - mBD_end_board(submenu, menu_info); } - else if (editEndChk_menu->data1 == 1) { - /* 'No' option was selected */ - mSM_open_submenu_new2(submenu, mSM_OVL_EDITOR, mED_TYPE_BOARD, 0, board_ovl->mail.content.body, MAIL_BODY_LEN); - board_ovl->field = mBD_FIELD_BODY; - board_ovl->header_pos = mBD_HEADER_POS_PRE_NAME; - menu_info->proc_status = mSM_OVL_PROC_PLAY; - } - else { - /* 'Cancel' option was selected */ - mBD_end_board(submenu, menu_info); - } - - if (editor_ovl != NULL) { - editor_ovl->cursor_idx = 0; - editor_ovl->_22 = 0; - editor_ovl->_24 = 0; - } - } } static void mBD_move_End(Submenu* submenu, mSM_MenuInfo_c* menu_info) { - (*submenu->overlay->move_End_proc)(submenu, menu_info); + (*submenu->overlay->move_End_proc)(submenu, menu_info); } typedef void (*mBD_OVL_MOVE_PROC)(Submenu*, mSM_MenuInfo_c*); static void mBD_board_ovl_move(Submenu* submenu) { - static mBD_OVL_MOVE_PROC ovl_move_proc[mSM_OVL_PROC_NUM] = { - &mBD_move_Move, - &mBD_move_play, - &mBD_move_Wait, - &mBD_move_Obey, - &mBD_move_End - }; + static mBD_OVL_MOVE_PROC ovl_move_proc[mSM_OVL_PROC_NUM] = { &mBD_move_Move, &mBD_move_play, &mBD_move_Wait, + &mBD_move_Obey, &mBD_move_End }; - mSM_MenuInfo_c* menu_info = &submenu->overlay->menu_info[mSM_OVL_BOARD]; + mSM_MenuInfo_c* menu_info = &submenu->overlay->menu_info[mSM_OVL_BOARD]; - (*menu_info->pre_move_func)(submenu); - (*ovl_move_proc[menu_info->proc_status])(submenu, menu_info); + (*menu_info->pre_move_func)(submenu); + (*ovl_move_proc[menu_info->proc_status])(submenu, menu_info); } extern Gfx lat_letter_mode[]; extern Gfx lat_letter_sen_mode[]; static void mBD_set_frame_dl(GRAPH* graph, mSM_MenuInfo_c* menu_info, f32 x, f32 y, mBD_Ovl_c* board_ovl) { - int paper_type = board_ovl->mail.content.paper_type; - Gfx* gfx; + int paper_type = board_ovl->mail.content.paper_type; + Gfx* gfx; - Matrix_scale(16.0f, 16.0f, 1.0f, 0); - Matrix_translate(x, y, 140.0f, 1); + Matrix_scale(16.0f, 16.0f, 1.0f, 0); + Matrix_translate(x, y, 140.0f, 1); - OPEN_DISP(graph); - gfx = NOW_POLY_OPA_DISP; + OPEN_DISP(graph); + gfx = NOW_POLY_OPA_DISP; - gSPMatrix(gfx++, _Matrix_to_Mtx_new(graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - - /* Draw paper background */ - gSPDisplayList(gfx++, lat_letter_mode); - gSPDisplayList(gfx++, paper_disp_model[paper_type]); + gSPMatrix(gfx++, _Matrix_to_Mtx_new(graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - /* Draw extra Gfx if necessary */ - if (paper_disp_sen_model[paper_type] != NULL) { - gSPDisplayList(gfx++, lat_letter_sen_mode); - gSPDisplayList(gfx++, paper_disp_sen_model[paper_type]); - } + /* Draw paper background */ + gSPDisplayList(gfx++, lat_letter_mode); + gSPDisplayList(gfx++, paper_disp_model[paper_type]); - SET_POLY_OPA_DISP(gfx); - CLOSE_DISP(graph); + /* Draw extra Gfx if necessary */ + if (paper_disp_sen_model[paper_type] != NULL) { + gSPDisplayList(gfx++, lat_letter_sen_mode); + gSPDisplayList(gfx++, paper_disp_sen_model[paper_type]); + } + + SET_POLY_OPA_DISP(gfx); + CLOSE_DISP(graph); } extern Gfx lat_point_mT_model[]; extern Gfx lat_hani_senT_model[]; static void mBD_set_point(Submenu* submenu, GAME* game, f32 x, f32 y) { - mBD_Ovl_c* board_ovl = submenu->overlay->board_ovl; - GRAPH* graph = game->graph; - u8* str_p; - int i; - int pre_back_width = 0; - Gfx* gfx; + mBD_Ovl_c* board_ovl = submenu->overlay->board_ovl; + GRAPH* graph = game->graph; + u8* str_p; + int i; + int pre_back_width = 0; + Gfx* gfx; - str_p = board_ovl->mail.content.header; - i = board_ovl->mail.content.header_back_start; - while (i-- != 0) { - pre_back_width += mFont_GetCodeWidth(*str_p, TRUE); - str_p++; - } + str_p = board_ovl->mail.content.header; + i = board_ovl->mail.content.header_back_start; + while (i-- != 0) { + pre_back_width += mFont_GetCodeWidth(*str_p, TRUE); + str_p++; + } - board_ovl->ofs_x = x + (f32)pre_back_width + 36.0f + -96.0f; - board_ovl->ofs_y = y - -76.0f; + board_ovl->ofs_x = x + (f32)pre_back_width + 36.0f + -96.0f; + board_ovl->ofs_y = y - -76.0f; - Matrix_scale(16.0f, 16.0f, 1.0f, 0); - Matrix_translate(board_ovl->ofs_x, board_ovl->ofs_y, 140.0f, 1); + Matrix_scale(16.0f, 16.0f, 1.0f, 0); + Matrix_translate(board_ovl->ofs_x, board_ovl->ofs_y, 140.0f, 1); - OPEN_DISP(graph); - gfx = NOW_POLY_OPA_DISP; + OPEN_DISP(graph); + gfx = NOW_POLY_OPA_DISP; - gSPMatrix(gfx++, _Matrix_to_Mtx_new(graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(gfx++, lat_letter_mode); - gSPDisplayList(gfx++, lat_point_mT_model); - gSPDisplayList(gfx++, lat_hani_senT_model); + gSPMatrix(gfx++, _Matrix_to_Mtx_new(graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(gfx++, lat_letter_mode); + gSPDisplayList(gfx++, lat_point_mT_model); + gSPDisplayList(gfx++, lat_hani_senT_model); - SET_POLY_OPA_DISP(gfx); - CLOSE_DISP(graph); + SET_POLY_OPA_DISP(gfx); + CLOSE_DISP(graph); } /* TODO: @nonmatching - float operation incorrectness in default switch case & cursol_draw call */ static void mBD_set_cursol(Submenu* submenu, GAME* game, f32 x, f32 y) { - mBD_Ovl_c* board_ovl = submenu->overlay->board_ovl; + mBD_Ovl_c* board_ovl = submenu->overlay->board_ovl; - if (board_ovl->header_pos == mBD_HEADER_POS_ON_NAME) { - mBD_set_point(submenu, game, x, y); - } - else { - mED_Ovl_c* editor_ovl = submenu->overlay->editor_ovl; - f32 ofs_x; - f32 ofs_y; - f32 t_x; - f32 t_y; - f32 line; + if (board_ovl->header_pos == mBD_HEADER_POS_ON_NAME) { + mBD_set_point(submenu, game, x, y); + } else { + mED_Ovl_c* editor_ovl = submenu->overlay->editor_ovl; + f32 ofs_x; + f32 ofs_y; + f32 t_x; + f32 t_y; + f32 line; - switch (board_ovl->field) { - case mBD_FIELD_HEADER: - { - int ox = 0; + switch (board_ovl->field) { + case mBD_FIELD_HEADER: { + int ox = 0; - if (board_ovl->header_pos == mBD_HEADER_POS_POST_NAME) { - ox = 80; + if (board_ovl->header_pos == mBD_HEADER_POS_POST_NAME) { + ox = 80; + } + + ofs_x = (f32)editor_ovl->_26 + (f32)ox + -7.0f; + ofs_y = 0.0f; + line = 0.0f; + break; + } + + case mBD_FIELD_BODY: { + ofs_x = (f32)editor_ovl->_26 + -7.0f; + ofs_y = 12.0f; + line = (f32)(editor_ovl->_24 + 1); + break; + } + + default: { + ofs_x = 192.0f - (f32)mFont_GetStringWidth(board_ovl->mail.content.footer, + board_ovl->lengths[mBD_FIELD_FOOTER], TRUE); + line = 7.0f; + ofs_x += (f32)editor_ovl->_26 + -7.0f; + // ofs_x = tmp + tmp2; + ofs_y = 24.0f; + break; + } } - ofs_x = (f32)editor_ovl->_26 + (f32)ox + -7.0f; - ofs_y = 0.0f; - line = 0.0f; - break; - } - - case mBD_FIELD_BODY: - { - ofs_x = (f32)editor_ovl->_26 + -7.0f; - ofs_y = 12.0f; - line = (f32)(editor_ovl->_24 + 1); - break; - } - - default: - { - ofs_x = 192.0f - (f32)mFont_GetStringWidth(board_ovl->mail.content.footer, board_ovl->lengths[mBD_FIELD_FOOTER], TRUE); - line = 7.0f; - ofs_x += (f32)editor_ovl->_26 + -7.0f; - //ofs_x = tmp + tmp2; - ofs_y = 24.0f; - break; - } + t_x = x + 64.0f + ofs_x; + t_y = (line * 16.0f); + (*submenu->overlay->editor_ovl->cursol_draw)(submenu, game, x + 64.0f + ofs_x, -y + 36.0f - t_y - ofs_y); } - - t_x = x + 64.0f + ofs_x; - t_y = (line * 16.0f); - (*submenu->overlay->editor_ovl->cursol_draw)(submenu, game, x + 64.0f + ofs_x, -y + 36.0f - t_y - ofs_y); - } } static void mBD_set_writing_footer(Submenu* submenu, GAME* game, f32 x, f32 y, rgba_t* color) { - int footer_len = submenu->overlay->board_ovl->lengths[mBD_FIELD_FOOTER]; - int i; - int footer_size = 0; - u8* str_p; + int footer_len = submenu->overlay->board_ovl->lengths[mBD_FIELD_FOOTER]; + int i; + int footer_size = 0; + u8* str_p; - str_p = submenu->overlay->board_ovl->mail.content.footer; - i = footer_len; - while (i-- != 0) { - footer_size += mFont_GetCodeWidth(*str_p, TRUE); - str_p++; - } + str_p = submenu->overlay->board_ovl->mail.content.footer; + i = footer_len; + while (i-- != 0) { + footer_size += mFont_GetCodeWidth(*str_p, TRUE); + str_p++; + } - x += 192.0f - (f32)footer_size; - mFont_SetLineStrings( - game, - submenu->overlay->board_ovl->mail.content.footer, footer_len, - x, y, - color->r, color->g, color->b, 255, - FALSE, - TRUE, - 1.0f, 1.0f, - mFont_MODE_POLY - ); + x += 192.0f - (f32)footer_size; + mFont_SetLineStrings(game, submenu->overlay->board_ovl->mail.content.footer, footer_len, x, y, color->r, color->g, + color->b, 255, FALSE, TRUE, 1.0f, 1.0f, mFont_MODE_POLY); } -static void mBD_set_writing_body(Submenu* submenu, mSM_MenuInfo_c* menu_info, GAME* game, f32 x, f32* y, f32* end_x, f32* end_y, rgba_t* color) { - mBD_Ovl_c* board_ovl = submenu->overlay->board_ovl; - u8* str = board_ovl->mail.content.body; - u8* str_p; - u8* str_end_p = str + submenu->overlay->board_ovl->lengths[mBD_FIELD_BODY]; - int body_len; - int i; - int width = 0; - int line = 0; - int line_ret; - - for (i = 0; i < mBD_BODY_LINE_NUM; i++) { - width = 0; - line = 0; +static void mBD_set_writing_body(Submenu* submenu, mSM_MenuInfo_c* menu_info, GAME* game, f32 x, f32* y, f32* end_x, + f32* end_y, rgba_t* color) { + mBD_Ovl_c* board_ovl = submenu->overlay->board_ovl; + u8* str = board_ovl->mail.content.body; + u8* str_p; + u8* str_end_p = str + submenu->overlay->board_ovl->lengths[mBD_FIELD_BODY]; + int body_len; + int i; + int width = 0; + int line = 0; + int line_ret; - str_p = str; - do { - line_ret = mBD_strLineCheck(&str, str_end_p, &width, &line); + for (i = 0; i < mBD_BODY_LINE_NUM; i++) { + width = 0; + line = 0; - if (line_ret == mBD_LINE_CHECK_OVERSTRING) { - if (i != (mBD_BODY_LINE_NUM - 1) && ((str != str_p && str[-1] == CHAR_NEW_LINE) || width + mFont_GetCodeWidth(*str, TRUE) > mBD_MAX_WIDTH)) { - (*end_x) = (x + 1.0f) - 160.0f; - (*end_y) = -(*y + 16.0f) + 120.0f; - } - else { - (*end_x) = (x + (f32)width + 1.0f) - 160.0f; - (*end_y) = -(*y) + 120.0f; - } + str_p = str; + do { + line_ret = mBD_strLineCheck(&str, str_end_p, &width, &line); - if (menu_info->proc_status != mSM_OVL_PROC_PLAY && str[-1] == CHAR_NEW_LINE) { - line--; + if (line_ret == mBD_LINE_CHECK_OVERSTRING) { + if (i != (mBD_BODY_LINE_NUM - 1) && ((str != str_p && str[-1] == CHAR_NEW_LINE) || + width + mFont_GetCodeWidth(*str, TRUE) > mBD_MAX_WIDTH)) { + (*end_x) = (x + 1.0f) - 160.0f; + (*end_y) = -(*y + 16.0f) + 120.0f; + } else { + (*end_x) = (x + (f32)width + 1.0f) - 160.0f; + (*end_y) = -(*y) + 120.0f; + } + + if (menu_info->proc_status != mSM_OVL_PROC_PLAY && str[-1] == CHAR_NEW_LINE) { + line--; + } + + if (line != 0) { + mFont_SetLineStrings(game, str_p, line, x, *y, color->r, color->g, color->b, 255, FALSE, TRUE, 1.0f, + 1.0f, mFont_MODE_POLY); + } + + (*y) += (f32)(mBD_BODY_LINE_NUM - i) * 16.0f; + return; + } + } while (line_ret == mBD_LINE_CHECK_OK); + + if (line_ret == mBD_LINE_CHECK_NEWLINE && menu_info->proc_status != mSM_OVL_PROC_PLAY) { + line--; } if (line != 0) { - mFont_SetLineStrings( - game, - str_p, line, - x, *y, - color->r, color->g, color->b, 255, - FALSE, - TRUE, - 1.0f, 1.0f, - mFont_MODE_POLY - ); + mFont_SetLineStrings(game, str_p, line, x, *y, color->r, color->g, color->b, 255, FALSE, TRUE, 1.0f, 1.0f, + mFont_MODE_POLY); } - (*y) += (f32)(mBD_BODY_LINE_NUM - i) * 16.0f; - return; - } - } while (line_ret == mBD_LINE_CHECK_OK); - - if (line_ret == mBD_LINE_CHECK_NEWLINE && menu_info->proc_status != mSM_OVL_PROC_PLAY) { - line--; + (*y) += 16.0f; } - - if (line != 0) { - mFont_SetLineStrings( - game, - str_p, line, - x, *y, - color->r, color->g, color->b, 255, - FALSE, - TRUE, - 1.0f, 1.0f, - mFont_MODE_POLY - ); - } - - (*y) += 16.0f; - } } /* TODO: @nonmatching - prolog instruction swap (likely due to way variables are accessed) */ -static void mBD_set_writing_header(Submenu* submenu, GAME* game, mSM_MenuInfo_c* menu_info, f32 x, f32 y, rgba_t* color) { - mBD_Ovl_c* board_ovl = submenu->overlay->board_ovl; - Mail_ct_c* mail_content = &board_ovl->mail.content; - u8* str_p; - int i = mail_content->header_back_start; - int header_len = 0; - int len; +static void mBD_set_writing_header(Submenu* submenu, GAME* game, mSM_MenuInfo_c* menu_info, f32 x, f32 y, + rgba_t* color) { + mBD_Ovl_c* board_ovl = submenu->overlay->board_ovl; + Mail_ct_c* mail_content = &board_ovl->mail.content; + u8* str_p; + int i = mail_content->header_back_start; + int header_len = 0; + int len; - if (menu_info->proc_status == mSM_OVL_PROC_PLAY) { - if (menu_info->data0 == mSM_BD_OPEN_WRITE_ISLAND) { - mFont_SetLineStrings( - game, - mail_content->header, board_ovl->lengths[mBD_FIELD_HEADER], - x, y, - color->r, color->g, color->b, 255, - FALSE, - TRUE, - 1.0f, 1.0f, - mFont_MODE_POLY - ); + if (menu_info->proc_status == mSM_OVL_PROC_PLAY) { + if (menu_info->data0 == mSM_BD_OPEN_WRITE_ISLAND) { + mFont_SetLineStrings(game, mail_content->header, board_ovl->lengths[mBD_FIELD_HEADER], x, y, color->r, + color->g, color->b, 255, FALSE, TRUE, 1.0f, 1.0f, mFont_MODE_POLY); + } else { + if (board_ovl->field == mBD_FIELD_HEADER) { + len = PLAYER_NAME_LEN; + } else { + len = board_ovl->header_name_len; + } + + mFont_SetLineStrings(game, mail_content->header, mail_content->header_back_start, x, y, color->r, color->g, + color->b, 255, FALSE, TRUE, 1.0f, 1.0f, mFont_MODE_POLY); + + str_p = mail_content->header; + while (i-- != 0) { + header_len += mFont_GetCodeWidth(*str_p, TRUE); + str_p++; + } + + x += (f32)header_len; + mFont_SetLineStrings(game, board_ovl->mail.header.recipient.personalID.player_name, len, x, y, 185, 0, 0, + 255, FALSE, TRUE, 1.0f, 1.0f, mFont_MODE_POLY); + + if (mail_content->header_back_start < MAIL_HEADER_LEN) { + x += 80.0f; + mFont_SetLineStrings(game, &mail_content->header[mail_content->header_back_start], + board_ovl->lengths[mBD_FIELD_HEADER] - mail_content->header_back_start, x, y, + color->r, color->g, color->b, 255, FALSE, TRUE, 1.0f, 1.0f, mFont_MODE_POLY); + } + } + } else { + u8 tmp_header[MAIL_HEADER_LEN + PLAYER_NAME_LEN]; + + if (menu_info->data0 == mSM_BD_OPEN_WRITE_ISLAND || menu_info->data0 == mSM_BD_OPEN_READ_ISLAND) { + mem_copy(tmp_header, mail_content->header, board_ovl->lengths[mBD_FIELD_HEADER]); + len = board_ovl->lengths[mBD_FIELD_HEADER]; + } else if (mail_content->mail_type == mMl_TYPE_SHOP_SALE_LEAFLET || + mail_content->mail_type == mMl_TYPE_BROKER_SALE_LEAFLET || mail_content->mail_type == mMl_TYPE_5) { + mem_copy(tmp_header, mail_content->header, MAIL_HEADER_LEN); + len = MAIL_HEADER_LEN; + } else { + mem_copy(tmp_header, mail_content->header, mail_content->header_back_start); + mem_copy(&tmp_header[mail_content->header_back_start], + board_ovl->mail.header.recipient.personalID.player_name, board_ovl->header_name_len); + + if (mail_content->header_back_start < MAIL_HEADER_LEN) { + mem_copy(&tmp_header[board_ovl->header_name_len + mail_content->header_back_start], + &mail_content->header[mail_content->header_back_start], + board_ovl->lengths[mBD_FIELD_HEADER] - mail_content->header_back_start); + } + + len = board_ovl->header_name_len + board_ovl->lengths[mBD_FIELD_HEADER]; + } + + mFont_SetLineStrings(game, tmp_header, len, x, y, color->r, color->g, color->b, 255, FALSE, TRUE, 1.0f, 1.0f, + mFont_MODE_POLY); } - else { - if (board_ovl->field == mBD_FIELD_HEADER) { - len = PLAYER_NAME_LEN; - } - else { - len = board_ovl->header_name_len; - } - - mFont_SetLineStrings( - game, - mail_content->header, mail_content->header_back_start, - x, y, - color->r, color->g, color->b, 255, - FALSE, - TRUE, - 1.0f, 1.0f, - mFont_MODE_POLY - ); - - str_p = mail_content->header; - while (i-- != 0) { - header_len += mFont_GetCodeWidth(*str_p, TRUE); - str_p++; - } - - x += (f32)header_len; - mFont_SetLineStrings( - game, - board_ovl->mail.header.recipient.personalID.player_name, len, - x, y, - 185, 0, 0, 255, - FALSE, - TRUE, - 1.0f, 1.0f, - mFont_MODE_POLY - ); - - if (mail_content->header_back_start < MAIL_HEADER_LEN) { - x += 80.0f; - mFont_SetLineStrings( - game, - &mail_content->header[mail_content->header_back_start], board_ovl->lengths[mBD_FIELD_HEADER] - mail_content->header_back_start, - x, y, - color->r, color->g, color->b, 255, - FALSE, - TRUE, - 1.0f, 1.0f, - mFont_MODE_POLY - ); - } - } - } - else { - u8 tmp_header[MAIL_HEADER_LEN + PLAYER_NAME_LEN]; - - if (menu_info->data0 == mSM_BD_OPEN_WRITE_ISLAND || menu_info->data0 == mSM_BD_OPEN_READ_ISLAND) { - mem_copy(tmp_header, mail_content->header, board_ovl->lengths[mBD_FIELD_HEADER]); - len = board_ovl->lengths[mBD_FIELD_HEADER]; - } - else if ( - mail_content->mail_type == mMl_TYPE_SHOP_SALE_LEAFLET || - mail_content->mail_type == mMl_TYPE_BROKER_SALE_LEAFLET || - mail_content->mail_type == mMl_TYPE_5 - ) { - mem_copy(tmp_header, mail_content->header, MAIL_HEADER_LEN); - len = MAIL_HEADER_LEN; - } - else { - mem_copy(tmp_header, mail_content->header, mail_content->header_back_start); - mem_copy(&tmp_header[mail_content->header_back_start], board_ovl->mail.header.recipient.personalID.player_name, board_ovl->header_name_len); - - if (mail_content->header_back_start < MAIL_HEADER_LEN) { - mem_copy(&tmp_header[board_ovl->header_name_len + mail_content->header_back_start], &mail_content->header[mail_content->header_back_start], board_ovl->lengths[mBD_FIELD_HEADER] - mail_content->header_back_start); - } - - len = board_ovl->header_name_len + board_ovl->lengths[mBD_FIELD_HEADER]; - } - - mFont_SetLineStrings( - game, - tmp_header, len, - x, y, - color->r, color->g, color->b, 255, - FALSE, - TRUE, - 1.0f, 1.0f, - mFont_MODE_POLY - ); - } } static void mBD_set_character(Submenu* submenu, GAME* game, mSM_MenuInfo_c* menu_info, f32 x, f32 y) { - int paper_type = submenu->overlay->board_ovl->mail.content.paper_type; - rgba_t* color = &letter_color[paper_type]; - f32 b_x = x + 64.0f; - f32 b_y = -y + 36.0f; - f32 end_x; - f32 end_y; + int paper_type = submenu->overlay->board_ovl->mail.content.paper_type; + rgba_t* color = &letter_color[paper_type]; + f32 b_x = x + 64.0f; + f32 b_y = -y + 36.0f; + f32 end_x; + f32 end_y; - mBD_set_writing_header(submenu, game, menu_info, b_x, b_y, color); + mBD_set_writing_header(submenu, game, menu_info, b_x, b_y, color); - b_y += 28.0f; - end_x = b_x - 160.0f; - end_y = -b_y + 120.0f; - mBD_set_writing_body(submenu, menu_info, game, b_x, &b_y, &end_x, &end_y, color); - b_y += 12.0f; - mBD_set_writing_footer(submenu, game, b_x, b_y, color); + b_y += 28.0f; + end_x = b_x - 160.0f; + end_y = -b_y + 120.0f; + mBD_set_writing_body(submenu, menu_info, game, b_x, &b_y, &end_x, &end_y, color); + b_y += 12.0f; + mBD_set_writing_footer(submenu, game, b_x, b_y, color); - if (menu_info->proc_status == mSM_OVL_PROC_PLAY && submenu->overlay->editor_ovl != NULL) { - mBD_set_cursol(submenu, game, x, y); - (*submenu->overlay->editor_ovl->end_code_draw)(submenu, game, end_x, end_y); - } + if (menu_info->proc_status == mSM_OVL_PROC_PLAY && submenu->overlay->editor_ovl != NULL) { + mBD_set_cursol(submenu, game, x, y); + (*submenu->overlay->editor_ovl->end_code_draw)(submenu, game, end_x, end_y); + } } static void mBD_set_dl(Submenu* submenu, GAME* game, mSM_MenuInfo_c* menu_info) { - GRAPH* graph = game->graph; - f32 x = menu_info->position[0]; - f32 y = menu_info->position[1]; + GRAPH* graph = game->graph; + f32 x = menu_info->position[0]; + f32 y = menu_info->position[1]; - mBD_set_frame_dl(graph, menu_info, x, y, submenu->overlay->board_ovl); + mBD_set_frame_dl(graph, menu_info, x, y, submenu->overlay->board_ovl); - if (menu_info->data0 == mSM_BD_OPEN_READ || menu_info->data0 == mSM_BD_OPEN_READ_ISLAND || submenu->overlay->board_ovl->first == FALSE) { - (*submenu->overlay->set_char_matrix_proc)(graph); - mBD_set_character(submenu, game, menu_info, x, y); - } + if (menu_info->data0 == mSM_BD_OPEN_READ || menu_info->data0 == mSM_BD_OPEN_READ_ISLAND || + submenu->overlay->board_ovl->first == FALSE) { + (*submenu->overlay->set_char_matrix_proc)(graph); + mBD_set_character(submenu, game, menu_info, x, y); + } } static void mBD_board_ovl_draw(Submenu* submenu, GAME* game) { - mSM_MenuInfo_c* menu_info = &submenu->overlay->menu_info[mSM_OVL_BOARD]; + mSM_MenuInfo_c* menu_info = &submenu->overlay->menu_info[mSM_OVL_BOARD]; - (*menu_info->pre_draw_func)(submenu, game); - mBD_set_dl(submenu, game, menu_info); + (*menu_info->pre_draw_func)(submenu, game); + mBD_set_dl(submenu, game, menu_info); } extern void mBD_board_ovl_set_proc(Submenu* submenu) { - mSM_Control_c* control = &submenu->overlay->menu_control; + mSM_Control_c* control = &submenu->overlay->menu_control; - control->menu_move_func = &mBD_board_ovl_move; - control->menu_draw_func = &mBD_board_ovl_draw; + control->menu_move_func = &mBD_board_ovl_move; + control->menu_draw_func = &mBD_board_ovl_draw; } static void mBD_board_ovl_init(Submenu* submenu) { - static u8 header_str[3] = "To "; - static u8 footer_str[5] = "from "; - mSM_MenuInfo_c* menu_info = &submenu->overlay->menu_info[mSM_OVL_BOARD]; - mBD_Ovl_c* board_ovl = submenu->overlay->board_ovl; + static u8 header_str[3] = "To "; + static u8 footer_str[5] = "from "; + mSM_MenuInfo_c* menu_info = &submenu->overlay->menu_info[mSM_OVL_BOARD]; + mBD_Ovl_c* board_ovl = submenu->overlay->board_ovl; - submenu->overlay->menu_control.animation_flag = FALSE; - menu_info->proc_status = mSM_OVL_PROC_MOVE; - menu_info->move_drt = mSM_MOVE_IN_TOP; + submenu->overlay->menu_control.animation_flag = FALSE; + menu_info->proc_status = mSM_OVL_PROC_MOVE; + menu_info->move_drt = mSM_MOVE_IN_TOP; - board_ovl->field = mBD_FIELD_BODY; - board_ovl->center_line = 2; - board_ovl->header_pos = mBD_HEADER_POS_PRE_NAME; - board_ovl->dst_p = (Mail_c*)menu_info->data2; + board_ovl->field = mBD_FIELD_BODY; + board_ovl->center_line = 2; + board_ovl->header_pos = mBD_HEADER_POS_PRE_NAME; + board_ovl->dst_p = (Mail_c*)menu_info->data2; - if (menu_info->data0 == mSM_BD_OPEN_WRITE) { - Mail_hs_c* mail_header = &Common_Get(now_private)->saved_mail_header; - board_ovl->first = TRUE; - menu_info->next_proc_status = mSM_OVL_PROC_PLAY; - mSM_open_submenu_new2(submenu, mSM_OVL_ADDRESS, 0, 0, board_ovl->mail.content.body, mBD_MAX_WIDTH); - mMl_init_mail(&board_ovl->mail, &Common_Get(now_private)->player_ID); - board_ovl->mail.content.paper_type = (Common_Get(now_private)->inventory.pockets[menu_info->data1] - ITM_PAPER_START) % PAPER_UNIQUE_NUM; + if (menu_info->data0 == mSM_BD_OPEN_WRITE) { + Mail_hs_c* mail_header = &Common_Get(now_private)->saved_mail_header; + board_ovl->first = TRUE; + menu_info->next_proc_status = mSM_OVL_PROC_PLAY; + mSM_open_submenu_new2(submenu, mSM_OVL_ADDRESS, 0, 0, board_ovl->mail.content.body, mBD_MAX_WIDTH); + mMl_init_mail(&board_ovl->mail, &Common_Get(now_private)->player_ID); + board_ovl->mail.content.paper_type = + (Common_Get(now_private)->inventory.pockets[menu_info->data1] - ITM_PAPER_START) % PAPER_UNIQUE_NUM; - if (mail_header->header_back_start == -1) { - int name_len = mMl_strlen(Common_Get(now_private)->player_ID.player_name, PLAYER_NAME_LEN, CHAR_SPACE); + if (mail_header->header_back_start == -1) { + int name_len = mMl_strlen(Common_Get(now_private)->player_ID.player_name, PLAYER_NAME_LEN, CHAR_SPACE); - mem_copy(board_ovl->mail.content.header, header_str, sizeof(header_str)); - mem_copy(board_ovl->mail.content.footer + sizeof(footer_str), Common_Get(now_private)->player_ID.player_name, name_len); - mem_copy(board_ovl->mail.content.footer, footer_str, sizeof(footer_str)); - board_ovl->mail.content.header_back_start = sizeof(header_str); - } - else { - mem_copy(board_ovl->mail.content.header, mail_header->header, MAIL_HEADER_LEN); - mem_copy(board_ovl->mail.content.footer, mail_header->footer, MAIL_FOOTER_LEN); - board_ovl->mail.content.header_back_start = mail_header->header_back_start; - } - } - else { - mMl_copy_mail(&board_ovl->mail, (Mail_c*)menu_info->data2); + mem_copy(board_ovl->mail.content.header, header_str, sizeof(header_str)); + mem_copy(board_ovl->mail.content.footer + sizeof(footer_str), + Common_Get(now_private)->player_ID.player_name, name_len); + mem_copy(board_ovl->mail.content.footer, footer_str, sizeof(footer_str)); + board_ovl->mail.content.header_back_start = sizeof(header_str); + } else { + mem_copy(board_ovl->mail.content.header, mail_header->header, MAIL_HEADER_LEN); + mem_copy(board_ovl->mail.content.footer, mail_header->footer, MAIL_FOOTER_LEN); + board_ovl->mail.content.header_back_start = mail_header->header_back_start; + } + } else { + mMl_copy_mail(&board_ovl->mail, (Mail_c*)menu_info->data2); - if (menu_info->data0 == mSM_BD_OPEN_READ || menu_info->data0 == mSM_BD_OPEN_READ_ISLAND) { - menu_info->next_proc_status = mSM_OVL_PROC_WAIT; - } - else { - menu_info->next_proc_status = mSM_OVL_PROC_PLAY; - mSM_open_submenu_new2(submenu, mSM_OVL_ADDRESS, 1, 0, board_ovl->mail.content.body, mBD_MAX_WIDTH); + if (menu_info->data0 == mSM_BD_OPEN_READ || menu_info->data0 == mSM_BD_OPEN_READ_ISLAND) { + menu_info->next_proc_status = mSM_OVL_PROC_WAIT; + } else { + menu_info->next_proc_status = mSM_OVL_PROC_PLAY; + mSM_open_submenu_new2(submenu, mSM_OVL_ADDRESS, 1, 0, board_ovl->mail.content.body, mBD_MAX_WIDTH); + } + + board_ovl->first = FALSE; + board_ovl->header_name_len = + mMl_strlen(board_ovl->mail.header.recipient.personalID.player_name, PLAYER_NAME_LEN, CHAR_SPACE); } - board_ovl->first = FALSE; - board_ovl->header_name_len = mMl_strlen(board_ovl->mail.header.recipient.personalID.player_name, PLAYER_NAME_LEN, CHAR_SPACE); - } + board_ovl->lengths[mBD_FIELD_HEADER] = mMl_strlen(board_ovl->mail.content.header, MAIL_HEADER_LEN, CHAR_SPACE); + board_ovl->lengths[mBD_FIELD_FOOTER] = mMl_strlen(board_ovl->mail.content.footer, MAIL_FOOTER_LEN, CHAR_SPACE); + board_ovl->lengths[mBD_FIELD_BODY] = mMl_strlen(board_ovl->mail.content.body, MAIL_BODY_LEN, CHAR_SPACE); - board_ovl->lengths[mBD_FIELD_HEADER] = mMl_strlen(board_ovl->mail.content.header, MAIL_HEADER_LEN, CHAR_SPACE); - board_ovl->lengths[mBD_FIELD_FOOTER] = mMl_strlen(board_ovl->mail.content.footer, MAIL_FOOTER_LEN, CHAR_SPACE); - board_ovl->lengths[mBD_FIELD_BODY] = mMl_strlen(board_ovl->mail.content.body, MAIL_BODY_LEN, CHAR_SPACE); - - if (board_ovl->mail.content.header_back_start > MAIL_HEADER_LEN) { - board_ovl->mail.content.header_back_start = MAIL_HEADER_LEN; - } - - if (board_ovl->mail.content.header_back_start > board_ovl->lengths[mBD_FIELD_HEADER]) { - board_ovl->lengths[mBD_FIELD_HEADER] = board_ovl->mail.content.header_back_start; - } - - board_ovl->ofs_x = 0.0f; - board_ovl->ofs_y = 76.0f; - - if (board_ovl->lengths[mBD_FIELD_FOOTER] != 0) { - int i; - u8* tmp_footer_p; - u8 tmp_footer[MAIL_FOOTER_LEN]; - - /* Cut out any left padding spaces */ - tmp_footer_p = tmp_footer; - mem_copy(tmp_footer_p, board_ovl->mail.content.footer, MAIL_FOOTER_LEN); - for (i = 0; i < board_ovl->lengths[mBD_FIELD_FOOTER]; i++, tmp_footer_p++) { - if (*tmp_footer_p != CHAR_SPACE) { - break; - } + if (board_ovl->mail.content.header_back_start > MAIL_HEADER_LEN) { + board_ovl->mail.content.header_back_start = MAIL_HEADER_LEN; } - mem_clear(board_ovl->mail.content.footer, MAIL_FOOTER_LEN, CHAR_SPACE); - mem_copy(board_ovl->mail.content.footer, tmp_footer_p, board_ovl->lengths[mBD_FIELD_FOOTER] - i); - } + if (board_ovl->mail.content.header_back_start > board_ovl->lengths[mBD_FIELD_HEADER]) { + board_ovl->lengths[mBD_FIELD_HEADER] = board_ovl->mail.content.header_back_start; + } + + board_ovl->ofs_x = 0.0f; + board_ovl->ofs_y = 76.0f; + + if (board_ovl->lengths[mBD_FIELD_FOOTER] != 0) { + int i; + u8* tmp_footer_p; + u8 tmp_footer[MAIL_FOOTER_LEN]; + + /* Cut out any left padding spaces */ + tmp_footer_p = tmp_footer; + mem_copy(tmp_footer_p, board_ovl->mail.content.footer, MAIL_FOOTER_LEN); + for (i = 0; i < board_ovl->lengths[mBD_FIELD_FOOTER]; i++, tmp_footer_p++) { + if (*tmp_footer_p != CHAR_SPACE) { + break; + } + } + + mem_clear(board_ovl->mail.content.footer, MAIL_FOOTER_LEN, CHAR_SPACE); + mem_copy(board_ovl->mail.content.footer, tmp_footer_p, board_ovl->lengths[mBD_FIELD_FOOTER] - i); + } } extern void mBD_board_ovl_construct(Submenu* submenu) { - if (submenu->overlay->board_ovl == NULL) { - submenu->overlay->board_ovl = &board_ovl_data; - } + if (submenu->overlay->board_ovl == NULL) { + submenu->overlay->board_ovl = &board_ovl_data; + } - mBD_board_ovl_init(submenu); - mBD_board_ovl_set_proc(submenu); + mBD_board_ovl_init(submenu); + mBD_board_ovl_set_proc(submenu); } extern void mBD_board_ovl_destruct(Submenu* submenu) { - submenu->overlay->board_ovl = NULL; + submenu->overlay->board_ovl = NULL; } diff --git a/src/m_editEndChk_ovl.c b/src/m_editEndChk_ovl.c index ece4f7ca..36171c1a 100644 --- a/src/m_editEndChk_ovl.c +++ b/src/m_editEndChk_ovl.c @@ -1,19 +1,19 @@ -#include "m_editEndChk.h" +#include "m_editEndChk_ovl.h" #include "audio.h" #include "m_font.h" #include "sys_matrix.h" typedef struct editEndChk_win_data_s { - int answer_num; - Gfx* win_model; - Gfx* char_model; - f32 char_x; - f32 char_y; - f32 answer_x; - f32 answer_y; - f32 question_x; - f32 question_y; + int answer_num; + Gfx* win_model; + Gfx* char_model; + f32 char_x; + f32 char_y; + f32 answer_x; + f32 answer_y; + f32 question_x; + f32 question_y; } mEE_win_data_c; extern Gfx lat_sentaku2_winT_model[]; @@ -23,46 +23,11 @@ extern Gfx lat_sentaku_winT_model[]; extern Gfx lat_sentaku_c_model[]; static mEE_win_data_c win_data[] = { - { - 2, - lat_sentaku2_winT_model, - lat_sentaku2_c_model, - -45.0f, 43.0f, - 65.0f, -74.0f, - 0.0f, 0.0f - }, - { - 3, - lat_sentaku_winT_model, - lat_sentaku_c_model, - -81.0f, 58.0f, - 60.0f, -71.0f, - 1.0f, -4.0f - }, - { - 3, - lat_sentaku_winT_model, - lat_sentaku_c_model, - -81.0f, 58.0f, - 42.0f, -55.0f, - 1.0f, 15.0f - }, - { - 3, - lat_sentaku_winT_model, - lat_sentaku_c_model, - -81.0f, 58.0f, - 60.0f, -71.0f, - 0.0f, 0.0f - }, - { - 3, - lat_sentaku_winT_model, - lat_sentaku_c_model, - -81.0f, 58.0f, - 60.0f, -71.0f, - 1.0f, -4.0f - }, + { 2, lat_sentaku2_winT_model, lat_sentaku2_c_model, -45.0f, 43.0f, 65.0f, -74.0f, 0.0f, 0.0f }, + { 3, lat_sentaku_winT_model, lat_sentaku_c_model, -81.0f, 58.0f, 60.0f, -71.0f, 1.0f, -4.0f }, + { 3, lat_sentaku_winT_model, lat_sentaku_c_model, -81.0f, 58.0f, 42.0f, -55.0f, 1.0f, 15.0f }, + { 3, lat_sentaku_winT_model, lat_sentaku_c_model, -81.0f, 58.0f, 60.0f, -71.0f, 0.0f, 0.0f }, + { 3, lat_sentaku_winT_model, lat_sentaku_c_model, -81.0f, 58.0f, 60.0f, -71.0f, 1.0f, -4.0f }, }; static u8 mEE_str_table[11] = "Is this OK?"; @@ -71,98 +36,86 @@ static u8 mEE_str_data1[7] = "Rewrite"; static u8 mEE_str_data2[12] = "Throw it out"; static void mEE_move_Move(Submenu* submenu, mSM_MenuInfo_c* menu_info) { - (*submenu->overlay->move_Move_proc)(submenu, menu_info); + (*submenu->overlay->move_Move_proc)(submenu, menu_info); } static void mEE_move_Play(Submenu* submenu, mSM_MenuInfo_c* menu_info) { - mEE_win_data_c* data = &win_data[menu_info->data0]; - mEE_Ovl_c* editEndChk_ovl = submenu->overlay->editEndChk_ovl; - u32 trigger = submenu->overlay->menu_control.trigger; - int max_answer_no = data->answer_num - 1; + mEE_win_data_c* data = &win_data[menu_info->data0]; + mEE_Ovl_c* editEndChk_ovl = submenu->overlay->editEndChk_ovl; + u32 trigger = submenu->overlay->menu_control.trigger; + int max_answer_no = data->answer_num - 1; - if ((trigger & BUTTON_B)) { - sAdo_SysTrgStart(0x1003); - menu_info->proc_status = mSM_OVL_PROC_MOVE; - menu_info->move_drt = mSM_MOVE_OUT_BOTTOM; - menu_info->next_proc_status = mSM_OVL_PROC_END; - menu_info->data1 = 1; - } - else if ((trigger & (BUTTON_A | BUTTON_START))) { - if (editEndChk_ovl->moving_in == FALSE) { - editEndChk_ovl->moving_in = TRUE; - editEndChk_ovl->scale = 0.0f; - } - else { - menu_info->proc_status = mSM_OVL_PROC_MOVE; - menu_info->move_drt = mSM_MOVE_OUT_BOTTOM; - menu_info->next_proc_status = mSM_OVL_PROC_END; - menu_info->data1 = editEndChk_ovl->selected_answer; - } - - if (menu_info->data1 == 2) { - sAdo_SysTrgStart(0x1003); - } - else { - sAdo_SysTrgStart(NA_SE_MENU_EXIT); - } - } - else if (editEndChk_ovl->moving_in == TRUE) { - if (editEndChk_ovl->scale < 1.0f) { - editEndChk_ovl->scale += 0.2f; - } - else { - editEndChk_ovl->scale = 1.0f; - - if ((trigger & BUTTON_CUP)) { - if (editEndChk_ovl->selected_answer != 0) { - editEndChk_ovl->selected_answer--; - sAdo_SysTrgStart(NA_SE_CURSOL); + if ((trigger & BUTTON_B)) { + sAdo_SysTrgStart(0x1003); + menu_info->proc_status = mSM_OVL_PROC_MOVE; + menu_info->move_drt = mSM_MOVE_OUT_BOTTOM; + menu_info->next_proc_status = mSM_OVL_PROC_END; + menu_info->data1 = 1; + } else if ((trigger & (BUTTON_A | BUTTON_START))) { + if (editEndChk_ovl->moving_in == FALSE) { + editEndChk_ovl->moving_in = TRUE; + editEndChk_ovl->scale = 0.0f; + } else { + menu_info->proc_status = mSM_OVL_PROC_MOVE; + menu_info->move_drt = mSM_MOVE_OUT_BOTTOM; + menu_info->next_proc_status = mSM_OVL_PROC_END; + menu_info->data1 = editEndChk_ovl->selected_answer; } - } - else if ((trigger & BUTTON_CDOWN)) { - if (editEndChk_ovl->selected_answer < max_answer_no) { - editEndChk_ovl->selected_answer++; - sAdo_SysTrgStart(NA_SE_CURSOL); - } - } - } - editEndChk_ovl->question_alpha_step = 0; - editEndChk_ovl->question_alpha = 0; - } - else { - int step = (editEndChk_ovl->question_alpha_step + 1) % 30; - - editEndChk_ovl->question_alpha_step = step; - if (step < 15) { - editEndChk_ovl->question_alpha = ((f32)step * 255.0f) / 15.0f; + if (menu_info->data1 == 2) { + sAdo_SysTrgStart(0x1003); + } else { + sAdo_SysTrgStart(NA_SE_MENU_EXIT); + } + } else if (editEndChk_ovl->moving_in == TRUE) { + if (editEndChk_ovl->scale < 1.0f) { + editEndChk_ovl->scale += 0.2f; + } else { + editEndChk_ovl->scale = 1.0f; + + if ((trigger & BUTTON_CUP)) { + if (editEndChk_ovl->selected_answer != 0) { + editEndChk_ovl->selected_answer--; + sAdo_SysTrgStart(NA_SE_CURSOL); + } + } else if ((trigger & BUTTON_CDOWN)) { + if (editEndChk_ovl->selected_answer < max_answer_no) { + editEndChk_ovl->selected_answer++; + sAdo_SysTrgStart(NA_SE_CURSOL); + } + } + } + + editEndChk_ovl->question_alpha_step = 0; + editEndChk_ovl->question_alpha = 0; + } else { + int step = (editEndChk_ovl->question_alpha_step + 1) % 30; + + editEndChk_ovl->question_alpha_step = step; + if (step < 15) { + editEndChk_ovl->question_alpha = ((f32)step * 255.0f) / 15.0f; + } else { + editEndChk_ovl->question_alpha = ((f32)(30 - step) * 255.0f) / 15.0f; + } } - else { - editEndChk_ovl->question_alpha = ((f32)(30 - step) * 255.0f) / 15.0f; - } - } } static void mEE_move_End(Submenu* submenu, mSM_MenuInfo_c* menu_info) { - (*submenu->overlay->move_End_proc)(submenu, menu_info); + (*submenu->overlay->move_End_proc)(submenu, menu_info); } typedef void (*mEE_OVL_MOVE_PROC)(Submenu*, mSM_MenuInfo_c*); static void mEE_editEndChk_ovl_move(Submenu* submenu) { - static mEE_OVL_MOVE_PROC ovl_move_proc[mSM_OVL_PROC_NUM] = { - &mEE_move_Move, - &mEE_move_Play, - (mEE_OVL_MOVE_PROC)&none_proc1, - (mEE_OVL_MOVE_PROC)&none_proc1, - mEE_move_End - }; - - Submenu_Overlay_c* overlay = submenu->overlay; - mSM_MenuInfo_c* menu_info = &overlay->menu_info[mSM_OVL_EDITENDCHK]; + static mEE_OVL_MOVE_PROC ovl_move_proc[mSM_OVL_PROC_NUM] = { &mEE_move_Move, &mEE_move_Play, + (mEE_OVL_MOVE_PROC)&none_proc1, + (mEE_OVL_MOVE_PROC)&none_proc1, mEE_move_End }; - (*menu_info->pre_move_func)(submenu); - (*ovl_move_proc[menu_info->proc_status])(submenu, menu_info); + Submenu_Overlay_c* overlay = submenu->overlay; + mSM_MenuInfo_c* menu_info = &overlay->menu_info[mSM_OVL_EDITENDCHK]; + + (*menu_info->pre_move_func)(submenu); + (*ovl_move_proc[menu_info->proc_status])(submenu, menu_info); } extern Gfx lat_kakunin_DL_mode[]; @@ -170,175 +123,156 @@ extern Gfx lat_kakunin_wakuT_model[]; extern Gfx lat_kakunin_c_model[]; static void mEE_set_question_field(Submenu* submenu, GRAPH* graph, f32 x, f32 y) { - Gfx* gfx; + Gfx* gfx; - Matrix_scale(16.0f, 16.0f, 1.0f, 0); - Matrix_translate(x, y, 140.0f, 1); + Matrix_scale(16.0f, 16.0f, 1.0f, 0); + Matrix_translate(x, y, 140.0f, 1); - OPEN_DISP(graph); - gfx = NOW_POLY_OPA_DISP; + OPEN_DISP(graph); + gfx = NOW_POLY_OPA_DISP; - gSPMatrix(gfx++, _Matrix_to_Mtx_new(graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(gfx++, lat_kakunin_DL_mode); - gSPDisplayList(gfx++, lat_kakunin_wakuT_model); - gDPPipeSync(gfx++); - gDPSetPrimColor(gfx++, 0, 255, 0, 0, 255, submenu->overlay->editEndChk_ovl->question_alpha); - gSPDisplayList(gfx++, lat_kakunin_c_model); + gSPMatrix(gfx++, _Matrix_to_Mtx_new(graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(gfx++, lat_kakunin_DL_mode); + gSPDisplayList(gfx++, lat_kakunin_wakuT_model); + gDPPipeSync(gfx++); + gDPSetPrimColor(gfx++, 0, 255, 0, 0, 255, submenu->overlay->editEndChk_ovl->question_alpha); + gSPDisplayList(gfx++, lat_kakunin_c_model); - SET_POLY_OPA_DISP(gfx); - CLOSE_DISP(graph); + SET_POLY_OPA_DISP(gfx); + CLOSE_DISP(graph); } static void mEE_set_answer_field(Submenu* submenu, GRAPH* graph, mEE_win_data_c* data, f32 x, f32 y) { - f32 scale = submenu->overlay->editEndChk_ovl->scale; - Gfx* gfx; + f32 scale = submenu->overlay->editEndChk_ovl->scale; + Gfx* gfx; - Matrix_scale(16.0f, 16.0f, 1.0f, 0); - Matrix_translate(x, y, 140.0f, 1); - Matrix_scale(scale, scale, 1.0f, 1); - - OPEN_DISP(graph); - gfx = NOW_POLY_OPA_DISP; - - gSPMatrix(gfx++, _Matrix_to_Mtx_new(graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(gfx++, lat_kakunin_DL_mode); - gSPDisplayList(gfx++, data->win_model); - - if (scale == 1.0f) { Matrix_scale(16.0f, 16.0f, 1.0f, 0); - Matrix_translate(x, y - ((f32)submenu->overlay->editEndChk_ovl->selected_answer * 16.0f), 140.0f, 1); - gSPMatrix(gfx++, _Matrix_to_Mtx_new(graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(gfx++, data->char_model); - } + Matrix_translate(x, y, 140.0f, 1); + Matrix_scale(scale, scale, 1.0f, 1); - SET_POLY_OPA_DISP(gfx); - CLOSE_DISP(graph); + OPEN_DISP(graph); + gfx = NOW_POLY_OPA_DISP; + + gSPMatrix(gfx++, _Matrix_to_Mtx_new(graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(gfx++, lat_kakunin_DL_mode); + gSPDisplayList(gfx++, data->win_model); + + if (scale == 1.0f) { + Matrix_scale(16.0f, 16.0f, 1.0f, 0); + Matrix_translate(x, y - ((f32)submenu->overlay->editEndChk_ovl->selected_answer * 16.0f), 140.0f, 1); + gSPMatrix(gfx++, _Matrix_to_Mtx_new(graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(gfx++, data->char_model); + } + + SET_POLY_OPA_DISP(gfx); + CLOSE_DISP(graph); } static void mEE_set_question_character(Submenu* submenu, GRAPH* graph, GAME* game, f32 x, f32 y) { - (*submenu->overlay->set_char_matrix_proc)(graph); - mFont_SetLineStrings( - game, - mEE_str_table, sizeof(mEE_str_table), - 107.0f + x, 194.0f - y, - 80, 80, 230, 255, - FALSE, - TRUE, - 1.0f, 1.0f, - mFont_MODE_POLY - ); + (*submenu->overlay->set_char_matrix_proc)(graph); + mFont_SetLineStrings(game, mEE_str_table, sizeof(mEE_str_table), 107.0f + x, 194.0f - y, 80, 80, 230, 255, FALSE, + TRUE, 1.0f, 1.0f, mFont_MODE_POLY); } typedef struct editEndChk_str_s { - u8* str; - int len; + u8* str; + int len; } mEE_str_c; static void mEE_set_answer_character(Submenu* submenu, GRAPH* graph, GAME* game, mEE_win_data_c* data, f32 x, f32 y) { - static mEE_str_c str_table[] = { - { mEE_str_data0, sizeof(mEE_str_data0) }, - { mEE_str_data1, sizeof(mEE_str_data1) }, - { mEE_str_data2, sizeof(mEE_str_data2) }, - }; + static mEE_str_c str_table[] = { + { mEE_str_data0, sizeof(mEE_str_data0) }, + { mEE_str_data1, sizeof(mEE_str_data1) }, + { mEE_str_data2, sizeof(mEE_str_data2) }, + }; - static int col_table[2][3] = { - { 165, 185, 185 }, - { 100, 130, 245 } - }; + static int col_table[2][3] = { { 165, 185, 185 }, { 100, 130, 245 } }; - mEE_Ovl_c* editEndChk_ovl = submenu->overlay->editEndChk_ovl; - mEE_str_c* str_p = str_table; - f32 scale = editEndChk_ovl->scale; - int max = data->answer_num; - int i; + mEE_Ovl_c* editEndChk_ovl = submenu->overlay->editEndChk_ovl; + mEE_str_c* str_p = str_table; + f32 scale = editEndChk_ovl->scale; + int max = data->answer_num; + int i; - (*submenu->overlay->set_char_matrix_proc)(graph); - x = (160.0f + x) + (data->char_x * scale); - y = (120.0f - y) - (data->char_y * scale); + (*submenu->overlay->set_char_matrix_proc)(graph); + x = (160.0f + x) + (data->char_x * scale); + y = (120.0f - y) - (data->char_y * scale); - for (i = 0; i < max; i++, str_p++) { - int idx = i == editEndChk_ovl->selected_answer ? 1 : 0; - int* col = col_table[idx]; + for (i = 0; i < max; i++, str_p++) { + int idx = i == editEndChk_ovl->selected_answer ? 1 : 0; + int* col = col_table[idx]; - mFont_SetLineStrings( - game, - str_p->str, str_p->len, - x, y, - col[0], col[1], col[2], 255, - FALSE, - TRUE, - scale, scale, - mFont_MODE_POLY - ); + mFont_SetLineStrings(game, str_p->str, str_p->len, x, y, col[0], col[1], col[2], 255, FALSE, TRUE, scale, scale, + mFont_MODE_POLY); - y += scale * 16.0f; - } + y += scale * 16.0f; + } } static void mEE_set_dl(Submenu* submenu, GAME* game, mSM_MenuInfo_c* menu_info) { - mEE_win_data_c* data = &win_data[menu_info->data0]; - GRAPH* graph = game->graph; - f32 x; - f32 y; + mEE_win_data_c* data = &win_data[menu_info->data0]; + GRAPH* graph = game->graph; + f32 x; + f32 y; - x = menu_info->position[0] + data->question_x; - y = menu_info->position[1] + data->question_y; + x = menu_info->position[0] + data->question_x; + y = menu_info->position[1] + data->question_y; - mEE_set_question_field(submenu, graph, x, y); - mEE_set_question_character(submenu, graph, game, x, y); + mEE_set_question_field(submenu, graph, x, y); + mEE_set_question_character(submenu, graph, game, x, y); - if (submenu->overlay->editEndChk_ovl->moving_in == TRUE) { - x = menu_info->position[0] + data->answer_x; - y = menu_info->position[1] + data->answer_y; + if (submenu->overlay->editEndChk_ovl->moving_in == TRUE) { + x = menu_info->position[0] + data->answer_x; + y = menu_info->position[1] + data->answer_y; - mEE_set_answer_field(submenu, graph, data, x, y); - mEE_set_answer_character(submenu, graph, game, data, x, y); - } + mEE_set_answer_field(submenu, graph, data, x, y); + mEE_set_answer_character(submenu, graph, game, data, x, y); + } } static void mEE_editEndChk_ovl_draw(Submenu* submenu, GAME* game) { - Submenu_Overlay_c* overlay = submenu->overlay; - mSM_MenuInfo_c* menu_info = &overlay->menu_info[mSM_OVL_EDITENDCHK]; + Submenu_Overlay_c* overlay = submenu->overlay; + mSM_MenuInfo_c* menu_info = &overlay->menu_info[mSM_OVL_EDITENDCHK]; - (*menu_info->pre_draw_func)(submenu, game); - mEE_set_dl(submenu, game, menu_info); + (*menu_info->pre_draw_func)(submenu, game); + mEE_set_dl(submenu, game, menu_info); } extern void mEE_editEndChk_ovl_set_proc(Submenu* submenu) { - Submenu_Overlay_c* overlay = submenu->overlay; + Submenu_Overlay_c* overlay = submenu->overlay; - overlay->menu_control.menu_move_func = &mEE_editEndChk_ovl_move; - overlay->menu_control.menu_draw_func = &mEE_editEndChk_ovl_draw; + overlay->menu_control.menu_move_func = &mEE_editEndChk_ovl_move; + overlay->menu_control.menu_draw_func = &mEE_editEndChk_ovl_draw; } static void mEE_editEndChk_ovl_init(Submenu* submenu) { - Submenu_Overlay_c* overlay = submenu->overlay; - mSM_MenuInfo_c* menu_info = &overlay->menu_info[mSM_OVL_EDITENDCHK]; + Submenu_Overlay_c* overlay = submenu->overlay; + mSM_MenuInfo_c* menu_info = &overlay->menu_info[mSM_OVL_EDITENDCHK]; - overlay->menu_control.animation_flag = FALSE; - menu_info->proc_status = mSM_OVL_PROC_MOVE; - menu_info->move_drt = mSM_MOVE_IN_BOTTOM; - menu_info->next_proc_status = mSM_OVL_PROC_PLAY; + overlay->menu_control.animation_flag = FALSE; + menu_info->proc_status = mSM_OVL_PROC_MOVE; + menu_info->move_drt = mSM_MOVE_IN_BOTTOM; + menu_info->next_proc_status = mSM_OVL_PROC_PLAY; } static mEE_Ovl_c ee_ovl_data; extern void mEE_editEndChk_ovl_construct(Submenu* submenu) { - if (submenu->overlay->editEndChk_ovl == NULL) { - submenu->overlay->editEndChk_ovl = &ee_ovl_data; - } + if (submenu->overlay->editEndChk_ovl == NULL) { + submenu->overlay->editEndChk_ovl = &ee_ovl_data; + } - ee_ovl_data.moving_in = FALSE; - ee_ovl_data.selected_answer = 0; - ee_ovl_data.question_alpha_step = 0; - ee_ovl_data.question_alpha = 0; + ee_ovl_data.moving_in = FALSE; + ee_ovl_data.selected_answer = 0; + ee_ovl_data.question_alpha_step = 0; + ee_ovl_data.question_alpha = 0; - mEE_editEndChk_ovl_init(submenu); - mEE_editEndChk_ovl_set_proc(submenu); + mEE_editEndChk_ovl_init(submenu); + mEE_editEndChk_ovl_set_proc(submenu); } extern void mEE_editEndChk_ovl_destruct(Submenu* submenu) { - Submenu_Overlay_c* overlay = submenu->overlay; + Submenu_Overlay_c* overlay = submenu->overlay; - overlay->editEndChk_ovl = NULL; + overlay->editEndChk_ovl = NULL; } diff --git a/src/m_notice_ovl.c b/src/m_notice_ovl.c index c92a995a..a85d555f 100644 --- a/src/m_notice_ovl.c +++ b/src/m_notice_ovl.c @@ -3,7 +3,7 @@ #include "m_bgm.h" #include "m_common_data.h" #include "m_editor_ovl.h" -#include "m_editEndChk.h" +#include "m_editEndChk_ovl.h" #include "m_event.h" #include "m_font.h" #include "m_quest.h" @@ -18,469 +18,418 @@ extern u8 kei_win_st4_tex_rgb_ia8[]; extern u8 kei_win_st5_tex_rgb_ia8[]; extern u8 kei_win_st6_tex_rgb_ia8[]; -static u8* kei_win_st_tex_tbl[] = { - kei_win_st5_tex_rgb_ia8, - kei_win_st4_tex_rgb_ia8, - kei_win_st2_tex_rgb_ia8, - kei_win_st4_tex_rgb_ia8, - kei_win_st5_tex_rgb_ia8, - kei_win_st6_tex_rgb_ia8, - kei_win_st3_tex_rgb_ia8, - kei_win_st6_tex_rgb_ia8, - kei_win_st1_tex_rgb_ia8 -}; +static u8* kei_win_st_tex_tbl[] = { kei_win_st5_tex_rgb_ia8, kei_win_st4_tex_rgb_ia8, kei_win_st2_tex_rgb_ia8, + kei_win_st4_tex_rgb_ia8, kei_win_st5_tex_rgb_ia8, kei_win_st6_tex_rgb_ia8, + kei_win_st3_tex_rgb_ia8, kei_win_st6_tex_rgb_ia8, kei_win_st1_tex_rgb_ia8 }; static int mNT_strLineCheck(u8** str_pp, u8* str_end_p, int* width, int* line) { - u8* str_p = *str_pp; - int res = mNT_LINE_CHECK_OK; + u8* str_p = *str_pp; + int res = mNT_LINE_CHECK_OK; - if (str_p >= str_end_p) { - res = mNT_LINE_CHECK_OVERSTRING; - } - else if (*str_p == CHAR_NEW_LINE) { - str_pp[0] = str_p + 1; - line[0]++; - res = mNT_LINE_CHECK_NEWLINE; - } - else { - width[0] += mFont_GetCodeWidth(*str_p, TRUE); + if (str_p >= str_end_p) { + res = mNT_LINE_CHECK_OVERSTRING; + } else if (*str_p == CHAR_NEW_LINE) { + str_pp[0] = str_p + 1; + line[0]++; + res = mNT_LINE_CHECK_NEWLINE; + } else { + width[0] += mFont_GetCodeWidth(*str_p, TRUE); - if (*width > mNT_MAX_WIDTH) { - res = mNT_LINE_CHECK_OVERLINE; + if (*width > mNT_MAX_WIDTH) { + res = mNT_LINE_CHECK_OVERLINE; + } else { + str_pp[0]++; + line[0]++; + } } - else { - str_pp[0]++; - line[0]++; - } - } - return res; + return res; } static void mNT_set_init_data(mNT_Ovl_c* notice_ovl, mSM_MenuInfo_c* menu_info) { - notice_ovl->mode = 0; - notice_ovl->page_center = 0; - notice_ovl->page_count = mNtc_notice_write_num(); - notice_ovl->now_page = notice_ovl->page_count - 1; - notice_ovl->disp_page = notice_ovl->now_page; - notice_ovl->move_time = 0; - notice_ovl->control_position = menu_info->position[0]; + notice_ovl->mode = 0; + notice_ovl->page_center = 0; + notice_ovl->page_count = mNtc_notice_write_num(); + notice_ovl->now_page = notice_ovl->page_count - 1; + notice_ovl->disp_page = notice_ovl->now_page; + notice_ovl->move_time = 0; + notice_ovl->control_position = menu_info->position[0]; } static void mNT_finish_notice_first_job() { - if (mEv_CheckFirstJob() == TRUE) { - mQst_errand_c* errand_p = mQst_GetFirstJobData(); + if (mEv_CheckFirstJob() == TRUE) { + mQst_errand_c* errand_p = mQst_GetFirstJobData(); - if (errand_p != NULL && errand_p->base.quest_type == mQst_QUEST_TYPE_ERRAND) { - if (errand_p->base.quest_kind == mQst_ERRAND_FIRSTJOB_POST_NOTICE && errand_p->base.progress != 0) { - errand_p->base.progress = 0; - } + if (errand_p != NULL && errand_p->base.quest_type == mQst_QUEST_TYPE_ERRAND) { + if (errand_p->base.quest_kind == mQst_ERRAND_FIRSTJOB_POST_NOTICE && errand_p->base.progress != 0) { + errand_p->base.progress = 0; + } + } } - } } static void mNT_roll_control(Submenu* submenu, mSM_MenuInfo_c* menu_info) { - mED_Ovl_c* editor_ovl = submenu->overlay->editor_ovl; - mNT_Ovl_c* notice_ovl = submenu->overlay->notice_ovl; + mED_Ovl_c* editor_ovl = submenu->overlay->editor_ovl; + mNT_Ovl_c* notice_ovl = submenu->overlay->notice_ovl; - if (editor_ovl != NULL) { - int line = editor_ovl->_24; - int dist = line - notice_ovl->page_center; - f32 roll_pos; - f32 abs_pos_dist; - f32 pos_dist; + if (editor_ovl != NULL) { + int line = editor_ovl->_24; + int dist = line - notice_ovl->page_center; + f32 roll_pos; + f32 abs_pos_dist; + f32 pos_dist; - if (dist < 0) { - notice_ovl->page_center = line; - menu_info->speed[1] = 1.0f; - } - else if (dist > 2) { - notice_ovl->page_center = line - 2; - menu_info->speed[1] = 1.0f; - } - - roll_pos = (f32)(notice_ovl->page_center * 16); - pos_dist = roll_pos - menu_info->position[1]; - abs_pos_dist = fabsf(pos_dist); - - if (abs_pos_dist > 0.1f) { - if (abs_pos_dist > 9.0f) { - menu_info->speed[1] *= 2.0f; - - if (menu_info->speed[1] > 4.0f) { - menu_info->speed[1] = 4.0f; + if (dist < 0) { + notice_ovl->page_center = line; + menu_info->speed[1] = 1.0f; + } else if (dist > 2) { + notice_ovl->page_center = line - 2; + menu_info->speed[1] = 1.0f; } - } - else if (abs_pos_dist < 7.0f) { - menu_info->speed[1] *= 0.5f; - if (menu_info->speed[1] < 1.0f) { - menu_info->speed[1] = 1.0f; + roll_pos = (f32)(notice_ovl->page_center * 16); + pos_dist = roll_pos - menu_info->position[1]; + abs_pos_dist = fabsf(pos_dist); + + if (abs_pos_dist > 0.1f) { + if (abs_pos_dist > 9.0f) { + menu_info->speed[1] *= 2.0f; + + if (menu_info->speed[1] > 4.0f) { + menu_info->speed[1] = 4.0f; + } + } else if (abs_pos_dist < 7.0f) { + menu_info->speed[1] *= 0.5f; + + if (menu_info->speed[1] < 1.0f) { + menu_info->speed[1] = 1.0f; + } + } + + chase_f(&menu_info->position[1], roll_pos, menu_info->speed[1]); + } else { + menu_info->position[1] = roll_pos; } - } - - chase_f(&menu_info->position[1], roll_pos, menu_info->speed[1]); } - else { - menu_info->position[1] = roll_pos; - } - } } static void mNT_roll_control2(mSM_MenuInfo_c* menu_info) { - f32 next_pos = menu_info->position[1] - menu_info->speed[1]; + f32 next_pos = menu_info->position[1] - menu_info->speed[1]; - if (menu_info->speed[1] < 1.0f) { - menu_info->speed[1] = 1.0f; - } - - if (next_pos > 0.0f) { - menu_info->position[1] = next_pos; - - if (next_pos > -15.0f) { - menu_info->speed[1] *= 2.0f; - - if (menu_info->speed[1] > 16.0f) { - menu_info->speed[1] = 16.0f; - } - } - else if (next_pos < 31.0f) { - menu_info->speed[1] *= 0.5f; - - if (menu_info->speed[1] < 1.0f) { + if (menu_info->speed[1] < 1.0f) { menu_info->speed[1] = 1.0f; - } } - } - else { - menu_info->position[1] = 0.0f; - menu_info->speed[1] = 0.0f; - } + + if (next_pos > 0.0f) { + menu_info->position[1] = next_pos; + + if (next_pos > -15.0f) { + menu_info->speed[1] *= 2.0f; + + if (menu_info->speed[1] > 16.0f) { + menu_info->speed[1] = 16.0f; + } + } else if (next_pos < 31.0f) { + menu_info->speed[1] *= 0.5f; + + if (menu_info->speed[1] < 1.0f) { + menu_info->speed[1] = 1.0f; + } + } + } else { + menu_info->position[1] = 0.0f; + menu_info->speed[1] = 0.0f; + } } static void mNT_Play_page_read(Submenu* submenu, mSM_MenuInfo_c* menu_info, mNT_Ovl_c* notice_ovl) { - int stick_area = notice_ovl->stick_area; - int move_page = 0; - int move_time; + int stick_area = notice_ovl->stick_area; + int move_page = 0; + int move_time; - if (notice_ovl->now_page != 0 && (stick_area == mED_STICK_AREA_LEFT || chkTrigger(BUTTON_CLEFT))) { - move_page = -1; - } - else if (notice_ovl->now_page < (notice_ovl->page_count - 1) && (stick_area == mED_STICK_AREA_RIGHT || chkTrigger(BUTTON_CRIGHT))) { - move_page = 1; - } - else if (notice_ovl->now_page != 0 && (stick_area == mED_STICK_AREA_BOTTOM || chkTrigger(BUTTON_CDOWN))) { - move_page = -notice_ovl->now_page; - } - else if (notice_ovl->now_page < (notice_ovl->page_count - 1) && (stick_area == mED_STICK_AREA_TOP || chkTrigger(BUTTON_CUP))) { - move_page = (notice_ovl->page_count - notice_ovl->now_page) - 1; - } - else if (chkTrigger(BUTTON_A)) { - notice_ovl->mode = mNT_PLAY_PAGE_TO_WRITE; - notice_ovl->now_page = mNtc_BOARD_POST_COUNT; - menu_info->position[0] = 320.0f; - mem_copy((u8*)¬ice_ovl->post.post_time, (u8*)Common_GetPointer(time.rtc_time), sizeof(lbRTC_time_c)); - mem_clear(notice_ovl->post.message, sizeof(notice_ovl->post.message), CHAR_SPACE); - sAdo_SysTrgStart(0x5F); - mSM_open_submenu_new2(submenu, mSM_OVL_EDITOR, mED_TYPE_NOTICE, 32, notice_ovl->post.message, sizeof(notice_ovl->post.message)); - } - else if ((chkTrigger(BUTTON_B) | chkTrigger(BUTTON_START))) { - (*submenu->overlay->move_chg_base_proc)(menu_info, mSM_MOVE_OUT_TOP); - sAdo_SysTrgStart(0x17D); - } - - if (move_page != 0) { - - move_time = ABS(move_page); - notice_ovl->mode = mNT_PLAY_PAGE_MOVE; - - if (move_time > 3) { - notice_ovl->move_time = 3; - } - else { - notice_ovl->move_time = move_time; + if (notice_ovl->now_page != 0 && (stick_area == mED_STICK_AREA_LEFT || chkTrigger(BUTTON_CLEFT))) { + move_page = -1; + } else if (notice_ovl->now_page < (notice_ovl->page_count - 1) && + (stick_area == mED_STICK_AREA_RIGHT || chkTrigger(BUTTON_CRIGHT))) { + move_page = 1; + } else if (notice_ovl->now_page != 0 && (stick_area == mED_STICK_AREA_BOTTOM || chkTrigger(BUTTON_CDOWN))) { + move_page = -notice_ovl->now_page; + } else if (notice_ovl->now_page < (notice_ovl->page_count - 1) && + (stick_area == mED_STICK_AREA_TOP || chkTrigger(BUTTON_CUP))) { + move_page = (notice_ovl->page_count - notice_ovl->now_page) - 1; + } else if (chkTrigger(BUTTON_A)) { + notice_ovl->mode = mNT_PLAY_PAGE_TO_WRITE; + notice_ovl->now_page = mNtc_BOARD_POST_COUNT; + menu_info->position[0] = 320.0f; + mem_copy((u8*)¬ice_ovl->post.post_time, (u8*)Common_GetPointer(time.rtc_time), sizeof(lbRTC_time_c)); + mem_clear(notice_ovl->post.message, sizeof(notice_ovl->post.message), CHAR_SPACE); + sAdo_SysTrgStart(0x5F); + mSM_open_submenu_new2(submenu, mSM_OVL_EDITOR, mED_TYPE_NOTICE, 32, notice_ovl->post.message, + sizeof(notice_ovl->post.message)); + } else if ((chkTrigger(BUTTON_B) | chkTrigger(BUTTON_START))) { + (*submenu->overlay->move_chg_base_proc)(menu_info, mSM_MOVE_OUT_TOP); + sAdo_SysTrgStart(0x17D); } - notice_ovl->now_page += (move_page / notice_ovl->move_time); + if (move_page != 0) { - if (move_page > 0) { - menu_info->position[0] = 320.0f; - } - else { - menu_info->position[0] = -320.0f; - } + move_time = ABS(move_page); + notice_ovl->mode = mNT_PLAY_PAGE_MOVE; - sAdo_SysTrgStart(0x5F); - } + if (move_time > 3) { + notice_ovl->move_time = 3; + } else { + notice_ovl->move_time = move_time; + } + + notice_ovl->now_page += (move_page / notice_ovl->move_time); + + if (move_page > 0) { + menu_info->position[0] = 320.0f; + } else { + menu_info->position[0] = -320.0f; + } + + sAdo_SysTrgStart(0x5F); + } } static void mNT_Play_page_move(Submenu* submenu, mSM_MenuInfo_c* menu_info, mNT_Ovl_c* notice_ovl) { - int move_flag; - int direction = 0; - f32 tmp; + int move_flag; + int direction = 0; + f32 tmp; - if (notice_ovl->move_time == 1) { - tmp = add_calc(&menu_info->position[0], 0.0f, 0.4f, 74.0f, 2.5f); + if (notice_ovl->move_time == 1) { + tmp = add_calc(&menu_info->position[0], 0.0f, 0.4f, 74.0f, 2.5f); - if (fabsf(tmp) < 0.1f) { - move_flag = TRUE; + if (fabsf(tmp) < 0.1f) { + move_flag = TRUE; + } else { + move_flag = FALSE; + } + } else { + if (menu_info->position[0] > 0.0f) { + direction = 1; + menu_info->position[0] = menu_info->position[0] - 74.0f; + + if (menu_info->position[0] <= 0.0f) { + move_flag = TRUE; + } else { + move_flag = FALSE; + } + } else { + direction = 0; + menu_info->position[0] += 74.0f; + + if (menu_info->position[0] >= 0.0f) { + move_flag = TRUE; + } else { + move_flag = FALSE; + } + } } - else { - move_flag = FALSE; - } - } - else { - if (menu_info->position[0] > 0.0f) { - direction = 1; - menu_info->position[0] = menu_info->position[0] - 74.0f; - if (menu_info->position[0] <= 0.0f) { - move_flag = TRUE; - } - else { - move_flag = FALSE; - } - } - else { - direction = 0; - menu_info->position[0] += 74.0f; + if (move_flag) { + notice_ovl->move_time--; - if (menu_info->position[0] >= 0.0f) { - move_flag = TRUE; - } - else { - move_flag = FALSE; - } - } - } + if (notice_ovl->move_time == 0) { + menu_info->position[0] = 0.0f; + notice_ovl->disp_page = notice_ovl->now_page; + notice_ovl->mode = mNT_PLAY_PAGE_READ; + } else { + sAdo_SysTrgStart(0x5F); + notice_ovl->disp_page = notice_ovl->now_page; - if (move_flag) { - notice_ovl->move_time--; - - if (notice_ovl->move_time == 0) { - menu_info->position[0] = 0.0f; - notice_ovl->disp_page = notice_ovl->now_page; - notice_ovl->mode = mNT_PLAY_PAGE_READ; + if (direction) { + menu_info->position[0] += 320.0f; + notice_ovl->now_page += ((notice_ovl->page_count - notice_ovl->now_page) - 1) / notice_ovl->move_time; + } else { + menu_info->position[0] -= 320.0f; + notice_ovl->now_page -= notice_ovl->now_page / notice_ovl->move_time; + } + } } - else { - sAdo_SysTrgStart(0x5F); - notice_ovl->disp_page = notice_ovl->now_page; - - if (direction) { - menu_info->position[0] += 320.0f; - notice_ovl->now_page += ((notice_ovl->page_count - notice_ovl->now_page) - 1) / notice_ovl->move_time; - } - else { - menu_info->position[0] -= 320.0f; - notice_ovl->now_page -= notice_ovl->now_page / notice_ovl->move_time; - } - } - } } static void mNT_Play_page_to_write(Submenu* submenu, mSM_MenuInfo_c* menu_info, mNT_Ovl_c* notice_ovl) { - f32 c0 = add_calc(&menu_info->position[0], 0.0f, 0.4f, 74.0f, 2.5f); - f32 c1; - int page_stopped; - int control_stopped; + f32 c0 = add_calc(&menu_info->position[0], 0.0f, 0.4f, 74.0f, 2.5f); + f32 c1; + int page_stopped; + int control_stopped; - if (fabsf(c0) < 0.1f) { - notice_ovl->disp_page = notice_ovl->now_page; - menu_info->position[0] = 0.0f; - page_stopped = TRUE; - } - else { - page_stopped = FALSE; - } + if (fabsf(c0) < 0.1f) { + notice_ovl->disp_page = notice_ovl->now_page; + menu_info->position[0] = 0.0f; + page_stopped = TRUE; + } else { + page_stopped = FALSE; + } - c1 = add_calc(¬ice_ovl->control_position, -100.0f, 0.4f, 74.0f, 2.5f); - if (fabsf(c1) < 0.1f) { - notice_ovl->control_position = -100.0f; - control_stopped = TRUE; - } - else { - control_stopped = FALSE; - } + c1 = add_calc(¬ice_ovl->control_position, -100.0f, 0.4f, 74.0f, 2.5f); + if (fabsf(c1) < 0.1f) { + notice_ovl->control_position = -100.0f; + control_stopped = TRUE; + } else { + control_stopped = FALSE; + } - if (page_stopped && control_stopped) { - menu_info->proc_status = mSM_OVL_PROC_WAIT; - } + if (page_stopped && control_stopped) { + menu_info->proc_status = mSM_OVL_PROC_WAIT; + } } static void mNT_Play_page_to_read(Submenu* submenu, mSM_MenuInfo_c* menu_info, mNT_Ovl_c* notice_ovl) { - f32 c0 = add_calc(&menu_info->position[0], 0.0f, 0.4f, 74.0f, 2.5f); - f32 c1; - int page_stopped; - int control_stopped; + f32 c0 = add_calc(&menu_info->position[0], 0.0f, 0.4f, 74.0f, 2.5f); + f32 c1; + int page_stopped; + int control_stopped; - if (fabsf(c0) < 0.1f) { - menu_info->position[0] = 0.0f; - notice_ovl->disp_page = notice_ovl->now_page; - page_stopped = TRUE; - } - else { - page_stopped = FALSE; - } + if (fabsf(c0) < 0.1f) { + menu_info->position[0] = 0.0f; + notice_ovl->disp_page = notice_ovl->now_page; + page_stopped = TRUE; + } else { + page_stopped = FALSE; + } - c1 = add_calc(¬ice_ovl->control_position, 0.0f, 0.4f, 74.0f, 2.5f); - if (fabsf(c1) < 0.1f) { - notice_ovl->control_position = 0.0f; - control_stopped = TRUE; - } - else { - control_stopped = FALSE; - } + c1 = add_calc(¬ice_ovl->control_position, 0.0f, 0.4f, 74.0f, 2.5f); + if (fabsf(c1) < 0.1f) { + notice_ovl->control_position = 0.0f; + control_stopped = TRUE; + } else { + control_stopped = FALSE; + } - if (page_stopped && control_stopped) { - notice_ovl->mode = mNT_PLAY_PAGE_READ; - } + if (page_stopped && control_stopped) { + notice_ovl->mode = mNT_PLAY_PAGE_READ; + } } static void mNT_move_Move(Submenu* submenu, mSM_MenuInfo_c* menu_info) { - (*submenu->overlay->move_Move_proc)(submenu, menu_info); - submenu->overlay->notice_ovl->control_position = -menu_info->position[1]; + (*submenu->overlay->move_Move_proc)(submenu, menu_info); + submenu->overlay->notice_ovl->control_position = -menu_info->position[1]; } typedef void (*mNT_MOVE_PROC)(Submenu*, mSM_MenuInfo_c*, mNT_Ovl_c*); static void mNT_move_Play(Submenu* submenu, mSM_MenuInfo_c* menu_info) { - static mNT_MOVE_PROC move_proc[mNT_PLAY_PAGE_NUM] = { - &mNT_Play_page_read, - &mNT_Play_page_move, - &mNT_Play_page_to_write, - &mNT_Play_page_to_read - }; + static mNT_MOVE_PROC move_proc[mNT_PLAY_PAGE_NUM] = { &mNT_Play_page_read, &mNT_Play_page_move, + &mNT_Play_page_to_write, &mNT_Play_page_to_read }; - mNT_Ovl_c* notice_ovl = submenu->overlay->notice_ovl; + mNT_Ovl_c* notice_ovl = submenu->overlay->notice_ovl; - (*move_proc[notice_ovl->mode])(submenu, menu_info, notice_ovl); + (*move_proc[notice_ovl->mode])(submenu, menu_info, notice_ovl); } static void mNT_move_Wait(Submenu* submenu, mSM_MenuInfo_c* menu_info) { - mSM_MenuInfo_c* editor_menu = &submenu->overlay->menu_info[mSM_OVL_EDITOR]; + mSM_MenuInfo_c* editor_menu = &submenu->overlay->menu_info[mSM_OVL_EDITOR]; - if (editor_menu->next_proc_status == mSM_OVL_PROC_END) { - menu_info->proc_status = mSM_OVL_PROC_OBEY; - mSM_open_submenu(submenu, mSM_OVL_EDITENDCHK, mEE_TYPE_NOTICE, 0); - } - else { - mNT_roll_control(submenu, menu_info); - } + if (editor_menu->next_proc_status == mSM_OVL_PROC_END) { + menu_info->proc_status = mSM_OVL_PROC_OBEY; + mSM_open_submenu(submenu, mSM_OVL_EDITENDCHK, mEE_TYPE_NOTICE, 0); + } else { + mNT_roll_control(submenu, menu_info); + } } static void mNT_move_Obey(Submenu* submenu, mSM_MenuInfo_c* menu_info) { - mSM_MenuInfo_c* editEndChk_menu = &submenu->overlay->menu_info[mSM_OVL_EDITENDCHK]; - mNT_Ovl_c* notice_ovl = submenu->overlay->notice_ovl; + mSM_MenuInfo_c* editEndChk_menu = &submenu->overlay->menu_info[mSM_OVL_EDITENDCHK]; + mNT_Ovl_c* notice_ovl = submenu->overlay->notice_ovl; - mNT_roll_control2(menu_info); - if (editEndChk_menu->proc_status == mSM_OVL_PROC_MOVE && editEndChk_menu->next_proc_status == mSM_OVL_PROC_END) { - if (editEndChk_menu->data1 == 0) { - mNtc_notice_write(¬ice_ovl->post); - (*submenu->overlay->move_chg_base_proc)(menu_info, mSM_MOVE_OUT_TOP); - mNT_finish_notice_first_job(); + mNT_roll_control2(menu_info); + if (editEndChk_menu->proc_status == mSM_OVL_PROC_MOVE && editEndChk_menu->next_proc_status == mSM_OVL_PROC_END) { + if (editEndChk_menu->data1 == 0) { + mNtc_notice_write(¬ice_ovl->post); + (*submenu->overlay->move_chg_base_proc)(menu_info, mSM_MOVE_OUT_TOP); + mNT_finish_notice_first_job(); + } else if (editEndChk_menu->data1 == 1) { + mSM_open_submenu_new2(submenu, mSM_OVL_EDITOR, mED_TYPE_NOTICE, 0, notice_ovl->post.message, + sizeof(notice_ovl->post.message)); + menu_info->proc_status = mSM_OVL_PROC_PLAY; + } else { + menu_info->proc_status = mSM_OVL_PROC_PLAY; + notice_ovl->mode = mNT_PLAY_PAGE_TO_READ; + notice_ovl->now_page = notice_ovl->page_count - 1; + menu_info->position[0] = -320.0f; + } } - else if (editEndChk_menu->data1 == 1) { - mSM_open_submenu_new2(submenu, mSM_OVL_EDITOR, mED_TYPE_NOTICE, 0, notice_ovl->post.message, sizeof(notice_ovl->post.message)); - menu_info->proc_status = mSM_OVL_PROC_PLAY; - } - else { - menu_info->proc_status = mSM_OVL_PROC_PLAY; - notice_ovl->mode = mNT_PLAY_PAGE_TO_READ; - notice_ovl->now_page = notice_ovl->page_count - 1; - menu_info->position[0] = -320.0f; - } - } } static void mNT_move_End(Submenu* submenu, mSM_MenuInfo_c* menu_info) { - (*submenu->overlay->move_End_proc)(submenu, menu_info); - mBGMPsComp_pause(5); + (*submenu->overlay->move_End_proc)(submenu, menu_info); + mBGMPsComp_pause(5); } static void mNT_stick_area_check(Submenu* submenu) { - u8* stick_area_p = &submenu->overlay->notice_ovl->stick_area; + u8* stick_area_p = &submenu->overlay->notice_ovl->stick_area; - if (gamePT->mcon.adjusted_pR < 0.2f) { - stick_area_p[0] = mED_STICK_AREA_CENTER; - } - else { - s16 angle = gamePT->mcon.move_angle; + if (gamePT->mcon.adjusted_pR < 0.2f) { + stick_area_p[0] = mED_STICK_AREA_CENTER; + } else { + s16 angle = gamePT->mcon.move_angle; - if (angle < -0x7000) { - stick_area_p[0] = mED_STICK_AREA_LEFT; + if (angle < -0x7000) { + stick_area_p[0] = mED_STICK_AREA_LEFT; + } else if (angle >= -0x7000 && angle < -0x5000) { + stick_area_p[0] = mED_STICK_AREA_BOTTOM_LEFT; + } else if (angle < -0x3000) { + stick_area_p[0] = mED_STICK_AREA_BOTTOM; + } else if (angle < -0x1000) { + stick_area_p[0] = mED_STICK_AREA_BOTTOM_RIGHT; + } else if (angle < 0x1000) { + stick_area_p[0] = mED_STICK_AREA_RIGHT; + } else if (angle < 0x3000) { + stick_area_p[0] = mED_STICK_AREA_TOP_RIGHT; + } else if (angle < 0x5000) { + stick_area_p[0] = mED_STICK_AREA_TOP; + } else if (angle < 0x7000) { + stick_area_p[0] = mED_STICK_AREA_TOP_LEFT; + } else { + stick_area_p[0] = mED_STICK_AREA_LEFT; + } } - else if (angle >= -0x7000 && angle < -0x5000) { - stick_area_p[0] = mED_STICK_AREA_BOTTOM_LEFT; - } - else if (angle < -0x3000) { - stick_area_p[0] = mED_STICK_AREA_BOTTOM; - } - else if (angle < -0x1000) { - stick_area_p[0] = mED_STICK_AREA_BOTTOM_RIGHT; - } - else if (angle < 0x1000) { - stick_area_p[0] = mED_STICK_AREA_RIGHT; - } - else if (angle < 0x3000) { - stick_area_p[0] = mED_STICK_AREA_TOP_RIGHT; - } - else if (angle < 0x5000) { - stick_area_p[0] = mED_STICK_AREA_TOP; - } - else if (angle < 0x7000) { - stick_area_p[0] = mED_STICK_AREA_TOP_LEFT; - } - else { - stick_area_p[0] = mED_STICK_AREA_LEFT; - } - } } typedef void (*mNT_OVL_MOVE_PROC)(Submenu*, mSM_MenuInfo_c*); static void mNT_notice_ovl_move(Submenu* submenu) { - static mNT_OVL_MOVE_PROC ovl_move_proc[mSM_OVL_PROC_NUM] = { - &mNT_move_Move, - &mNT_move_Play, - &mNT_move_Wait, - &mNT_move_Obey, - &mNT_move_End - }; + static mNT_OVL_MOVE_PROC ovl_move_proc[mSM_OVL_PROC_NUM] = { &mNT_move_Move, &mNT_move_Play, &mNT_move_Wait, + &mNT_move_Obey, &mNT_move_End }; - mSM_MenuInfo_c* menu_info = &submenu->overlay->menu_info[mSM_OVL_NOTICE]; + mSM_MenuInfo_c* menu_info = &submenu->overlay->menu_info[mSM_OVL_NOTICE]; - mNT_stick_area_check(submenu); - (*menu_info->pre_move_func)(submenu); - (*ovl_move_proc[menu_info->proc_status])(submenu, menu_info); + mNT_stick_area_check(submenu); + (*menu_info->pre_move_func)(submenu); + (*ovl_move_proc[menu_info->proc_status])(submenu, menu_info); } static u8** mNT_notice_draw_init(mSM_MenuInfo_c* menu_info) { - u8** tex_p = kei_win_st_tex_tbl; - int i; + u8** tex_p = kei_win_st_tex_tbl; + int i; - for (i = 0; i < ARRAY_COUNT(kei_win_st_tex_tbl); i++) { - tex_p++; - } + for (i = 0; i < ARRAY_COUNT(kei_win_st_tex_tbl); i++) { + tex_p++; + } - return tex_p; + return tex_p; } extern Gfx kei_win_model[]; static void mNT_set_frame_dl(GRAPH* graph, f32 x, f32 y) { - Gfx* gfx; + Gfx* gfx; - Matrix_scale(16.0f, 16.0f, 1.0f, 0); - Matrix_translate(x, y, 140.0f, 1); + Matrix_scale(16.0f, 16.0f, 1.0f, 0); + Matrix_translate(x, y, 140.0f, 1); - OPEN_DISP(graph); - gfx = NOW_POLY_OPA_DISP; + OPEN_DISP(graph); + gfx = NOW_POLY_OPA_DISP; - gSPMatrix(gfx++, _Matrix_to_Mtx_new(graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(gfx++, kei_win_model); + gSPMatrix(gfx++, _Matrix_to_Mtx_new(graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(gfx++, kei_win_model); - SET_POLY_OPA_DISP(gfx); - CLOSE_DISP(graph); + SET_POLY_OPA_DISP(gfx); + CLOSE_DISP(graph); } extern Gfx kei_hyouji_model[]; @@ -490,58 +439,50 @@ extern Gfx kei_win_yaji2T_model[]; extern Gfx kei_win_stT_model[]; static void mNT_set_key_dl(mNT_Ovl_c* notice_ovl, GRAPH* graph, f32 y) { - Gfx* gfx; + Gfx* gfx; - Matrix_scale(16.0f, 16.0f, 1.0f, 0); - Matrix_translate(0.0f, y, 140.0f, 1); + Matrix_scale(16.0f, 16.0f, 1.0f, 0); + Matrix_translate(0.0f, y, 140.0f, 1); - OPEN_DISP(graph); - gfx = NOW_POLY_OPA_DISP; + OPEN_DISP(graph); + gfx = NOW_POLY_OPA_DISP; - gSPMatrix(gfx++, _Matrix_to_Mtx_new(graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(gfx++, kei_hyouji_model); + gSPMatrix(gfx++, _Matrix_to_Mtx_new(graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(gfx++, kei_hyouji_model); - if (notice_ovl->mode == mNT_PLAY_PAGE_READ) { - gSPDisplayList(gfx++, kei_win_yaji1T_mode); + if (notice_ovl->mode == mNT_PLAY_PAGE_READ) { + gSPDisplayList(gfx++, kei_win_yaji1T_mode); - if (notice_ovl->now_page < (notice_ovl->page_count - 1)) { - gSPDisplayList(gfx++, kei_win_yaji1T_model); + if (notice_ovl->now_page < (notice_ovl->page_count - 1)) { + gSPDisplayList(gfx++, kei_win_yaji1T_model); + } + + if (notice_ovl->now_page != 0) { + gSPDisplayList(gfx++, kei_win_yaji2T_model); + } } - if (notice_ovl->now_page != 0) { - gSPDisplayList(gfx++, kei_win_yaji2T_model); + Matrix_translate(3.0f, 0.0f, 0.0f, 1); + + if (notice_ovl->stick_area >= mED_STICK_AREA_TOP_RIGHT && notice_ovl->stick_area <= mED_STICK_AREA_BOTTOM_RIGHT) { + Matrix_translate(-0.5f, 0.0f, 0.0f, 1); + Matrix_RotateY(DEG2SHORT_ANGLE(-180.0f), 1); } - } - Matrix_translate(3.0f, 0.0f, 0.0f, 1); + gSPMatrix(gfx++, _Matrix_to_Mtx_new(graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPSegment(gfx++, G_MWO_SEGMENT_8, kei_win_st_tex_tbl[notice_ovl->stick_area]); + gSPDisplayList(gfx++, kei_win_stT_model); - if (notice_ovl->stick_area >= mED_STICK_AREA_TOP_RIGHT && notice_ovl->stick_area <= mED_STICK_AREA_BOTTOM_RIGHT) { - Matrix_translate(-0.5f, 0.0f, 0.0f, 1); - Matrix_RotateY(DEG2SHORT_ANGLE(-180.0f), 1); - } - - gSPMatrix(gfx++, _Matrix_to_Mtx_new(graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPSegment(gfx++, G_MWO_SEGMENT_8, kei_win_st_tex_tbl[notice_ovl->stick_area]); - gSPDisplayList(gfx++, kei_win_stT_model); - - SET_POLY_OPA_DISP(gfx); - CLOSE_DISP(graph); + SET_POLY_OPA_DISP(gfx); + CLOSE_DISP(graph); } static void mNT_set_num_strings_dl(GAME* game, int page_no, f32 x, f32 y) { - static u8 num_str[8] = "entry "; + static u8 num_str[8] = "entry "; - mFont_UnintToString(&num_str[6], 2, page_no, 2, TRUE, FALSE, TRUE); - mFont_SetLineStrings( - game, - num_str, sizeof(num_str), - x + 63.0f, -y + 46.0f, - 0, 0, 255, 255, - FALSE, - TRUE, - 0.75f, 0.75f, - mFont_MODE_POLY - ); + mFont_UnintToString(&num_str[6], 2, page_no, 2, TRUE, FALSE, TRUE); + mFont_SetLineStrings(game, num_str, sizeof(num_str), x + 63.0f, -y + 46.0f, 0, 0, 255, 255, FALSE, TRUE, 0.75f, + 0.75f, mFont_MODE_POLY); } u8 january_str[7] = "January"; @@ -559,274 +500,216 @@ u8 december_str[8] = "December"; u8 qqq_str[3] = "???"; typedef struct { - u8* str; - int len; + u8* str; + int len; } mNT_month_str_c; -#define mNT_MONTH_STR(str) { str, sizeof(str) } +#define mNT_MONTH_STR(str) \ + { str, sizeof(str) } static void mNT_set_day_strings_dl(GAME* game, lbRTC_time_c* time_p, f32 x, f32 y) { - static mNT_month_str_c month_str[lbRTC_MONTHS_MAX + 1] = { - mNT_MONTH_STR(january_str), - mNT_MONTH_STR(february_str), - mNT_MONTH_STR(march_str), - mNT_MONTH_STR(april_str), - mNT_MONTH_STR(may_str), - mNT_MONTH_STR(june_str), - mNT_MONTH_STR(july_str), - mNT_MONTH_STR(august_str), - mNT_MONTH_STR(september_str), - mNT_MONTH_STR(october_str), - mNT_MONTH_STR(november_str), - mNT_MONTH_STR(december_str), - mNT_MONTH_STR(qqq_str) - }; - static u8 comma_str[1] = ","; + static mNT_month_str_c month_str[lbRTC_MONTHS_MAX + 1] = { + mNT_MONTH_STR(january_str), mNT_MONTH_STR(february_str), mNT_MONTH_STR(march_str), + mNT_MONTH_STR(april_str), mNT_MONTH_STR(may_str), mNT_MONTH_STR(june_str), + mNT_MONTH_STR(july_str), mNT_MONTH_STR(august_str), mNT_MONTH_STR(september_str), + mNT_MONTH_STR(october_str), mNT_MONTH_STR(november_str), mNT_MONTH_STR(december_str), + mNT_MONTH_STR(qqq_str) + }; + static u8 comma_str[1] = ","; - u8 day_str[2]; - u8 year_str[4]; - mNT_month_str_c* str_p; - f32 month_width; + u8 day_str[2]; + u8 year_str[4]; + mNT_month_str_c* str_p; + f32 month_width; - if (time_p->month < lbRTC_JANUARY || time_p->month > lbRTC_DECEMBER) { - time_p->month = 13; - } + if (time_p->month < lbRTC_JANUARY || time_p->month > lbRTC_DECEMBER) { + time_p->month = 13; + } - str_p = &month_str[time_p->month - 1]; - month_width = (f32)mFont_GetStringWidth(str_p->str, str_p->len, TRUE) * 0.75f; + str_p = &month_str[time_p->month - 1]; + month_width = (f32)mFont_GetStringWidth(str_p->str, str_p->len, TRUE) * 0.75f; - mFont_SetLineStrings( - game, - str_p->str, str_p->len, - (x + 213.0f) - month_width, -y + 46, - 0, 0, 255, 255, - FALSE, - TRUE, - 0.75f, 0.75f, - mFont_MODE_POLY - ); + mFont_SetLineStrings(game, str_p->str, str_p->len, (x + 213.0f) - month_width, -y + 46, 0, 0, 255, 255, FALSE, TRUE, + 0.75f, 0.75f, mFont_MODE_POLY); - mFont_UnintToString(day_str, 2, time_p->day, 2, FALSE, TRUE, TRUE); - mFont_SetLineStrings( - game, - day_str, sizeof(day_str), - x + 215.0f, -y + 46, - 0, 0, 255, 255, - FALSE, - TRUE, - 0.75f, 0.75f, - mFont_MODE_POLY - ); + mFont_UnintToString(day_str, 2, time_p->day, 2, FALSE, TRUE, TRUE); + mFont_SetLineStrings(game, day_str, sizeof(day_str), x + 215.0f, -y + 46, 0, 0, 255, 255, FALSE, TRUE, 0.75f, 0.75f, + mFont_MODE_POLY); - mFont_SetLineStrings( - game, - comma_str, sizeof(comma_str), - x + 227.0f, -y + 46, - 0, 0, 255, 255, - FALSE, - TRUE, - 0.75f, 0.75f, - mFont_MODE_POLY - ); + mFont_SetLineStrings(game, comma_str, sizeof(comma_str), x + 227.0f, -y + 46, 0, 0, 255, 255, FALSE, TRUE, 0.75f, + 0.75f, mFont_MODE_POLY); - mFont_UnintToString(&year_str[0], 2, time_p->year / 100, 2, FALSE, TRUE, FALSE); - mFont_UnintToString(&year_str[2], 2, time_p->year % 100, 2, FALSE, TRUE, FALSE); - mFont_SetLineStrings( - game, - year_str, sizeof(year_str), - x + 233.0f, -y + 46, - 0, 0, 255, 255, - FALSE, - TRUE, - 0.75f, 0.75f, - mFont_MODE_POLY - ); + mFont_UnintToString(&year_str[0], 2, time_p->year / 100, 2, FALSE, TRUE, FALSE); + mFont_UnintToString(&year_str[2], 2, time_p->year % 100, 2, FALSE, TRUE, FALSE); + mFont_SetLineStrings(game, year_str, sizeof(year_str), x + 233.0f, -y + 46, 0, 0, 255, 255, FALSE, TRUE, 0.75f, + 0.75f, mFont_MODE_POLY); } -static void mNT_set_strings_dl(mSM_MenuInfo_c* menu_info, GAME* game, u8* str_p, int body_len, f32 x, f32 y, f32* end_x, f32* end_y) { - u8* end_p; - int i; - int j; - int width; - int disp_chars; - u8* now_str_p = str_p; - int line_chk; - - end_x[0] = x; - end_y[0] = y; - end_p = str_p + body_len; +static void mNT_set_strings_dl(mSM_MenuInfo_c* menu_info, GAME* game, u8* str_p, int body_len, f32 x, f32 y, f32* end_x, + f32* end_y) { + u8* end_p; + int i; + int j; + int width; + int disp_chars; + u8* now_str_p = str_p; + int line_chk; - for (i = 0; i < mNT_MAX_LINES; i++) { - u8* original_str_p = now_str_p; - - width = 0; - disp_chars = 0; + end_x[0] = x; + end_y[0] = y; + end_p = str_p + body_len; - do { - line_chk = mNT_strLineCheck(&now_str_p, end_p, &width, &disp_chars); + for (i = 0; i < mNT_MAX_LINES; i++) { + u8* original_str_p = now_str_p; - if (line_chk == mNT_LINE_CHECK_OVERSTRING) { - if ( - i != (mNT_MAX_LINES - 1) && - ((now_str_p != original_str_p && now_str_p[-1] == CHAR_NEW_LINE) || width + mFont_GetCodeWidth(*now_str_p, TRUE) > mNT_MAX_WIDTH) - ) { - end_x[0] = (x + 1.0f) - 160.0f; - end_y[0] = -(y + 16.0f) + 120.0f; - } - else { - end_x[0] = (x + (f32)width + 1.0f) - 160.0f; - end_y[0] = -y + 120.0f; - } + width = 0; + disp_chars = 0; - if (menu_info->proc_status != mSM_OVL_PROC_WAIT && now_str_p[-1] == CHAR_NEW_LINE) { - disp_chars--; + do { + line_chk = mNT_strLineCheck(&now_str_p, end_p, &width, &disp_chars); + + if (line_chk == mNT_LINE_CHECK_OVERSTRING) { + if (i != (mNT_MAX_LINES - 1) && ((now_str_p != original_str_p && now_str_p[-1] == CHAR_NEW_LINE) || + width + mFont_GetCodeWidth(*now_str_p, TRUE) > mNT_MAX_WIDTH)) { + end_x[0] = (x + 1.0f) - 160.0f; + end_y[0] = -(y + 16.0f) + 120.0f; + } else { + end_x[0] = (x + (f32)width + 1.0f) - 160.0f; + end_y[0] = -y + 120.0f; + } + + if (menu_info->proc_status != mSM_OVL_PROC_WAIT && now_str_p[-1] == CHAR_NEW_LINE) { + disp_chars--; + } + + if (disp_chars != 0) { + mFont_SetLineStrings(game, original_str_p, disp_chars, x, y, 30, 0, 0, 255, FALSE, TRUE, 1.0f, 1.0f, + mFont_MODE_POLY); + } + + return; + } + } while (line_chk == mNT_LINE_CHECK_OK); + + if (line_chk == mNT_LINE_CHECK_NEWLINE && menu_info->proc_status != mSM_OVL_PROC_WAIT) { + disp_chars--; } if (disp_chars != 0) { - mFont_SetLineStrings( - game, - original_str_p, disp_chars, - x, y, - 30, 0, 0, 255, - FALSE, - TRUE, - 1.0f, 1.0f, - mFont_MODE_POLY - ); + mFont_SetLineStrings(game, original_str_p, disp_chars, x, y, 30, 0, 0, 255, FALSE, TRUE, 1.0f, 1.0f, + mFont_MODE_POLY); } - - return; - } - } while (line_chk == mNT_LINE_CHECK_OK); - if (line_chk == mNT_LINE_CHECK_NEWLINE && menu_info->proc_status != mSM_OVL_PROC_WAIT) { - disp_chars--; + y += 16.0f; } - - if (disp_chars != 0) { - mFont_SetLineStrings( - game, - original_str_p, disp_chars, - x, y, - 30, 0, 0, 255, - FALSE, - TRUE, - 1.0f, 1.0f, - mFont_MODE_POLY - ); - } - - y += 16.0f; - } } -static void mNT_set_page_dl(Submenu* submenu, mSM_MenuInfo_c* menu_info, GAME* game, GRAPH* graph, f32 x, f32 y, int page_no) { - mNT_Ovl_c* notice_ovl = submenu->overlay->notice_ovl; - mED_Ovl_c* editor_ovl = submenu->overlay->editor_ovl; - mNtc_board_post_c* post_p; - u32 now_post; - int body_len; - f32 end_x; - f32 end_y; +static void mNT_set_page_dl(Submenu* submenu, mSM_MenuInfo_c* menu_info, GAME* game, GRAPH* graph, f32 x, f32 y, + int page_no) { + mNT_Ovl_c* notice_ovl = submenu->overlay->notice_ovl; + mED_Ovl_c* editor_ovl = submenu->overlay->editor_ovl; + mNtc_board_post_c* post_p; + u32 now_post; + int body_len; + f32 end_x; + f32 end_y; - mNT_set_frame_dl(graph, x, y); - (*submenu->overlay->set_char_matrix_proc)(graph); + mNT_set_frame_dl(graph, x, y); + (*submenu->overlay->set_char_matrix_proc)(graph); - if (page_no == mNtc_BOARD_POST_COUNT) { - now_post = notice_ovl->page_count + 1; + if (page_no == mNtc_BOARD_POST_COUNT) { + now_post = notice_ovl->page_count + 1; - if (now_post > mNtc_BOARD_POST_COUNT) { - now_post = mNtc_BOARD_POST_COUNT; + if (now_post > mNtc_BOARD_POST_COUNT) { + now_post = mNtc_BOARD_POST_COUNT; + } + + post_p = ¬ice_ovl->post; + + if (editor_ovl != NULL) { + body_len = editor_ovl->now_str_len; + } else { + body_len = 0; + } + } else { + now_post = page_no + 1; + post_p = Save_GetPointer(noticeboard[page_no]); + body_len = mMl_strlen(post_p->message, mNT_MAX_WIDTH, CHAR_SPACE); } - post_p = ¬ice_ovl->post; + mNT_set_num_strings_dl(game, now_post, x, y); + mNT_set_day_strings_dl(game, &post_p->post_time, x, y); + x += 63.0f; + y = -y + 63.0f; + mNT_set_strings_dl(menu_info, game, post_p->message, body_len, x, y, &end_x, &end_y); - if (editor_ovl != NULL) { - body_len = editor_ovl->now_str_len; + if (menu_info->proc_status == mSM_OVL_PROC_WAIT && editor_ovl != NULL) { + (*submenu->overlay->editor_ovl->cursol_draw)(submenu, game, x + (f32)editor_ovl->_26 + -7.0f, + y + editor_ovl->_24 * 16.0f); + (*submenu->overlay->editor_ovl->end_code_draw)(submenu, game, end_x, end_y); } - else { - body_len = 0; - } - } - else { - now_post = page_no + 1; - post_p = Save_GetPointer(noticeboard[page_no]); - body_len = mMl_strlen(post_p->message, mNT_MAX_WIDTH, CHAR_SPACE); - } - - mNT_set_num_strings_dl(game, now_post, x, y); - mNT_set_day_strings_dl(game, &post_p->post_time, x, y); - x += 63.0f; - y = -y + 63.0f; - mNT_set_strings_dl(menu_info, game, post_p->message, body_len, x, y, &end_x, &end_y); - - if (menu_info->proc_status == mSM_OVL_PROC_WAIT && editor_ovl != NULL) { - (*submenu->overlay->editor_ovl->cursol_draw)(submenu, game, x + (f32)editor_ovl->_26 + -7.0f, y + editor_ovl->_24 * 16.0f); - (*submenu->overlay->editor_ovl->end_code_draw)(submenu, game, end_x, end_y); - } } static void mNT_set_dl(Submenu* submenu, GAME* game, mSM_MenuInfo_c* menu_info) { - mNT_Ovl_c* notice_ovl = submenu->overlay->notice_ovl; - GRAPH* graph = game->graph; - f32 x = menu_info->position[0]; - f32 y = menu_info->position[1]; + mNT_Ovl_c* notice_ovl = submenu->overlay->notice_ovl; + GRAPH* graph = game->graph; + f32 x = menu_info->position[0]; + f32 y = menu_info->position[1]; - mNT_set_page_dl(submenu, menu_info, game, graph, x, y, notice_ovl->now_page); - if (notice_ovl->disp_page != notice_ovl->now_page) { - if (notice_ovl->now_page > notice_ovl->disp_page) { - x -= 320.0f; - } - else { - x += 320.0f; + mNT_set_page_dl(submenu, menu_info, game, graph, x, y, notice_ovl->now_page); + if (notice_ovl->disp_page != notice_ovl->now_page) { + if (notice_ovl->now_page > notice_ovl->disp_page) { + x -= 320.0f; + } else { + x += 320.0f; + } + + mNT_set_page_dl(submenu, menu_info, game, graph, x, y, notice_ovl->disp_page); } - mNT_set_page_dl(submenu, menu_info, game, graph, x, y, notice_ovl->disp_page); - } - - if (menu_info->proc_status != mSM_OVL_PROC_WAIT && menu_info->proc_status != mSM_OVL_PROC_OBEY) { - mNT_set_key_dl(notice_ovl, graph, notice_ovl->control_position); - } + if (menu_info->proc_status != mSM_OVL_PROC_WAIT && menu_info->proc_status != mSM_OVL_PROC_OBEY) { + mNT_set_key_dl(notice_ovl, graph, notice_ovl->control_position); + } } static void mNT_notice_ovl_draw(Submenu* submenu, GAME* game) { - mSM_MenuInfo_c* menu_info = &submenu->overlay->menu_info[mSM_OVL_NOTICE]; + mSM_MenuInfo_c* menu_info = &submenu->overlay->menu_info[mSM_OVL_NOTICE]; - (*menu_info->pre_draw_func)(submenu, game); - mNT_set_dl(submenu, game, menu_info); + (*menu_info->pre_draw_func)(submenu, game); + mNT_set_dl(submenu, game, menu_info); } extern void mNT_notice_ovl_set_proc(Submenu* submenu) { - mSM_Control_c* control = &submenu->overlay->menu_control; + mSM_Control_c* control = &submenu->overlay->menu_control; - control->menu_move_func = &mNT_notice_ovl_move; - control->menu_draw_func = &mNT_notice_ovl_draw; + control->menu_move_func = &mNT_notice_ovl_move; + control->menu_draw_func = &mNT_notice_ovl_draw; } static void mNT_notice_ovl_init(Submenu* submenu) { - mSM_MenuInfo_c* menu_info = &submenu->overlay->menu_info[mSM_OVL_NOTICE]; + mSM_MenuInfo_c* menu_info = &submenu->overlay->menu_info[mSM_OVL_NOTICE]; - submenu->overlay->menu_control.animation_flag = FALSE; - (*submenu->overlay->move_chg_base_proc)(menu_info, mSM_MOVE_IN_TOP); - sAdo_SysTrgStart(0x17C); - mNT_set_init_data(submenu->overlay->notice_ovl, menu_info); - submenu->overlay->notice_ovl->stick_area = mED_STICK_AREA_CENTER; - mBGMPsComp_pause(3); + submenu->overlay->menu_control.animation_flag = FALSE; + (*submenu->overlay->move_chg_base_proc)(menu_info, mSM_MOVE_IN_TOP); + sAdo_SysTrgStart(0x17C); + mNT_set_init_data(submenu->overlay->notice_ovl, menu_info); + submenu->overlay->notice_ovl->stick_area = mED_STICK_AREA_CENTER; + mBGMPsComp_pause(3); } extern void mNT_notice_ovl_construct(Submenu* submenu) { - if (submenu->overlay->notice_ovl == NULL) { - mSM_MenuInfo_c* menu_info = &submenu->overlay->menu_info[mSM_OVL_NOTICE]; - - submenu->overlay->notice_ovl = ¬ice_ovl_data; - mNT_notice_draw_init(menu_info); - } + if (submenu->overlay->notice_ovl == NULL) { + mSM_MenuInfo_c* menu_info = &submenu->overlay->menu_info[mSM_OVL_NOTICE]; - mNT_notice_ovl_init(submenu); - mNT_notice_ovl_set_proc(submenu); + submenu->overlay->notice_ovl = ¬ice_ovl_data; + mNT_notice_draw_init(menu_info); + } + + mNT_notice_ovl_init(submenu); + mNT_notice_ovl_set_proc(submenu); } extern void mNT_notice_ovl_destruct(Submenu* submenu) { - submenu->overlay->notice_ovl = NULL; + submenu->overlay->notice_ovl = NULL; } diff --git a/src/m_submenu_ovl.c b/src/m_submenu_ovl.c index 52f5203b..5d392d7a 100644 --- a/src/m_submenu_ovl.c +++ b/src/m_submenu_ovl.c @@ -6,6 +6,42 @@ #include "m_rcp.h" #include "libultra/libultra.h" #include "sys_matrix.h" +#include "libforest/emu64/emu64_wrapper.h" +#include "m_inventory_ovl.h" +#include "m_hboard_ovl.h" +#include "m_timeIn_ovl.h" +#include "m_ledit_ovl.h" +#include "m_map_ovl.h" +#include "m_notice_ovl.h" +#include "m_repay_ovl.h" +#include "m_mscore_ovl.h" +#include "m_birthday_ovl.h" +#include "m_editor_ovl.h" +#include "m_mailbox_ovl.h" +#include "m_board_ovl.h" +#include "m_address_ovl.h" +#include "m_haniwa_ovl.h" +#include "m_editEndChk_ovl.h" +#include "m_warning_ovl.h" +#include "m_cpmail_ovl.h" +#include "m_cpwarning_ovl.h" +#include "m_cpedit_ovl.h" +#include "m_catalog_ovl.h" +#include "m_music_ovl.h" +#include "m_bank_ovl.h" +#include "m_needlework_ovl.h" +#include "m_cporiginal_ovl.h" +#include "m_design_ovl.h" +#include "m_gba_ovl.h" +#include "m_diary_ovl.h" +#include "m_calendar_ovl.h" +#include "m_passwordMake_ovl.h" +#include "m_passwordChk_ovl.h" +#include "m_tag_ovl.h" +#include "m_hand_ovl.h" +#include "m_haniwaPortrait_ovl.h" + +static Submenu_Overlay_c ovl_base; static void mSM_setup_view(Submenu* submenu, GRAPH* graph, int init_flag) { Gfx* gfx; @@ -42,17 +78,18 @@ static void mSM_setup_view(Submenu* submenu, GRAPH* graph, int init_flag) { CLOSE_DISP(graph); } -static void mSM_change_view(GRAPH* graph, s16 angle, int width, int height, f32 eye_dist, f32 y_lookAt, f32 vp_x, - f32 vp_y) { - static Vp viewport_data = { { 0, 0, 511, 0 }, { 0, 0, 511, 0 } }; +static void mSM_change_view(GRAPH* graph, f32 eye_dist, f32 y_lookAt, f32 vp_x, f32 vp_y, s16 angle, int width, + int height) { + static Vp viewport_data = { 0, 0, 511, 0, 0, 0, 511, 0 }; static Lights0 light_data = { - { { 105, 90, 90 }, 0, { 105, 90, 90 }, 0 }, // Ambient - { { { 255, 255, 245 }, 0, { 255, 255, 245 }, 0, { 0, 60, 60 }, 0 } } // Light + { 105, 90, 90, 0, 105, 90, 90, 0 }, // Ambient + { { 255, 255, 245, 0, 255, 255, 245, 0, 0, 60, 60, 0 } } // Light }; Vp* viewport = GRAPH_ALLOC_TYPE(graph, Vp, 1); - Mtx* mtx = GRAPH_ALLOC_TYPE(graph, mtx, 1); + Mtx* mtx = GRAPH_ALLOC_TYPE(graph, Mtx, 1); + Mtx* view_mtx = GRAPH_ALLOC_TYPE(graph, Mtx, 1); u16 persp_norm; f32 y_eye; f32 z_eye; @@ -61,16 +98,16 @@ static void mSM_change_view(GRAPH* graph, s16 angle, int width, int height, f32 viewport = &viewport_data; } else { viewport->vp.vscale[0] = width << 1; - viewport->vp.vtrans[0] = (width << 1) + (s16)vp_x; + viewport->vp.vtrans[0] = (width << 1) + (s16)(int)vp_x; viewport->vp.vscale[1] = height << 1; - viewport->vp.vtrans[1] = (height << 1) + (s16)vp_y; + viewport->vp.vtrans[1] = (height << 1) + (s16)(int)vp_y; - viewport->vp.vscale[2] = 511; viewport->vp.vtrans[2] = 511; + viewport->vp.vscale[2] = 511; - viewport->vp.vscale[3] = 0; viewport->vp.vtrans[3] = 0; + viewport->vp.vscale[3] = 0; } OPEN_DISP(graph); @@ -101,15 +138,15 @@ static void mSM_change_view(GRAPH* graph, s16 angle, int width, int height, f32 y_eye = y_lookAt + eye_dist * sin_s(angle); z_eye = eye_dist * cos_s(angle); - if (angle < DEG2SHORT_ANGLE(-90.0f) || angle > DEG2SHORT_ANGLE(90.0f)) { - guLookAt(mtx, 0.0f, y_eye, z_eye, 0.0f, y_lookAt, 0.0f, 0.0f, -1.0f, 0.0f); + if (angle < DEG2SHORT_ANGLE(-90.0f) || angle >= DEG2SHORT_ANGLE(90.0f)) { + guLookAt(view_mtx, 0.0f, y_eye, z_eye, 0.0f, y_lookAt, 0.0f, 0.0f, -1.0f, 0.0f); } else { - guLookAt(mtx, 0.0f, y_eye, z_eye, 0.0f, y_lookAt, 0.0f, 0.0f, 1.0f, 0.0f); + guLookAt(view_mtx, 0.0f, y_eye, z_eye, 0.0f, y_lookAt, 0.0f, 0.0f, 1.0f, 0.0f); } OPEN_DISP(graph); - gSPMatrix(NOW_POLY_OPA_DISP++, mtx, G_MTX_NOPUSH | G_MTX_MUL | G_MTX_PROJECTION); + gSPMatrix(NOW_POLY_OPA_DISP++, view_mtx, G_MTX_NOPUSH | G_MTX_MUL | G_MTX_PROJECTION); gSPSetLights0(NOW_POLY_OPA_DISP++, light_data); SET_POLY_OPA_DISP(gfx_set_fog_nosync(NOW_POLY_OPA_DISP++, 255, 255, 255, 255, 1000, 1000)); @@ -117,162 +154,254 @@ static void mSM_change_view(GRAPH* graph, s16 angle, int width, int height, f32 } static void mSM_set_char_matrix(GRAPH* graph) { - OPEN_DISP(graph); - gSPMatrix(NOW_POLY_OPA_DISP++, &Mtx_clear, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - CLOSE_DISP(graph); + OPEN_POLY_OPA_DISP(graph); + + gSPMatrix(POLY_OPA_DISP++, &Mtx_clear, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + + CLOSE_POLY_OPA_DISP(graph); } +/* @nonmatching - functionally equivalent */ +/* + @note - this function is functionally broken. It was stubbed + in DnM+ and would break if actually used. It is modified + vs its DnM implementation slightly. Additionally, it is entirely + unused. It is set to a func pointer member but that member is + never used. +*/ +#ifndef MUST_MATCH static void mSM_cbuf_copy(GRAPH* graph, PreRender* prerender, int x, int y, int mode) { - if (x < (640 - 1)) { - u32 width = prerender->width_bak; + s32 src_w; + s32 src_h; + s32 dst_w; + s32 dst_h; + int uls; + int ult; + int lrs; + int lrt; + int tmem_line; + int x_min; + int y_min; + int y_max; + int x_max; + int tex_wd; + int temp0; + int temp1; + void* src_buffer; + void* dst_buffer; - if (x > -width) { - int height = prerender->height_bak; + if (x >= (640 - 1) || x <= -prerender->width_bak || y <= -prerender->height_bak || y >= (480 - 1)) { + return; + } - if (y > -height && y < (480 - 1)) { - int x_max; - int x_min; - int y_max; - int y_min; - u8* color_img_buf; - u8* texture_img_buf; - u32 w; - u32 h; - u32 tmem_line; - u32 uls; - u32 ult; - u32 lrs; - u32 lrt; - u32 width2; - u32 height2; - u32 lrt2; + if (x < 0) { + x_max = prerender->width_bak + x; + x_min = -x; + x = 0; + } else { + x_min = 0; - if (x < 0) { - x_max = width + x; - x_min = -x; - x = 0; - } else { - x_min = 0; - - if (x + width >= 640) { - x_max = 640 - x; - } else { - x_max = width; - } - } - - if (y < 0) { - y_max = height + y; - y_min = -y; - y = 0; - } else { - y_min = 0; - - if (y + height >= 480) { - y_max = (480 - 1) - y; - } else { - y_max = height; - } - } - - if (mode == 0) { - color_img_buf = prerender->framebuffer_bak; - w = width; - height = height; - uls = x; - ult = y; - lrt = y_min; - lrs = x_min; - width2 = 640; - height2 = 480; - } else { - texture_img_buf = prerender->framebuffer_bak; - w = 640; - h = 480; - uls = x_min; - ult = y_min; - lrs = x; - lrt = y; - width2 = width; - height2 = height; - } - - // TODO: finish - tmem_line = (1 << 12) / (u32)((x_max + 3) << 1); - lrt2 = (x_max + uls) - 1; - if (mode) { - Gfx* gfx; - - OPEN_DISP(graph); - - gfx = NOW_POLY_OPA_DISP; - prerender->width = 640; - prerender->height = 480; - PreRender_CopyRGBC(prerender, &gfx, x - x_min, y - y_min); - SET_POLY_OPA_DISP(gfx); - - CLOSE_DISP(graph); - } else { - OPEN_DISP(graph); - - gDPPipeSync(NOW_POLY_OPA_DISP++); - gSPClearGeometryMode(NOW_POLY_OPA_DISP++, 0xFFFFFF); - gDPSetOtherMode(NOW_POLY_OPA_DISP++, - G_AD_DISABLE | G_CD_DISABLE | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | - G_TL_TILE | G_TD_CLAMP | G_TP_NONE | G_CYC_COPY | G_PM_NPRIMITIVE, - G_AC_NONE | G_ZS_PRIM | G_RM_NOOP | G_RM_NOOP2); - gDPSetColorImage(NOW_POLY_OPA_DISP++, G_IM_FMT_RGBA, G_IM_SIZ_16b, width, color_img_buf); - gDPSetScissor(NOW_POLY_OPA_DISP++, G_SC_NON_INTERLACE, 0, 0, width, height); - - while (y_max > 0) { - if (tmem_line > y_max) { - tmem_line = y_max; - } - - gDPLoadTextureTile(NEXT_POLY_OPA_DISP, texture_img_buf, G_IM_FMT_RGBA, G_IM_SIZ_16b, width2, - height2, uls, ult, lrt2, (ult + tmem_line - 1), 0, G_TX_NOMIRROR | G_TX_WRAP, - G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD); - - gSPTextureRectangle(NEXT_POLY_OPA_DISP, (lrs) * 4, (lrt) << G_TEXTURE_IMAGE_FRAC, - (lrs + (x_max - 1)) << G_TEXTURE_IMAGE_FRAC, - (lrt + (tmem_line - 1)) << G_TEXTURE_IMAGE_FRAC, G_TX_RENDERTILE, uls << 5, - ult << 5, (1 << 1) << 10, 1 << 10); - - y_max -= tmem_line; - ult += tmem_line; - lrt += tmem_line; - } - - CLOSE_DISP(graph); - } - } + if (x + prerender->width_bak >= 640) { + x_max = 640 - x; + } else { + x_max = prerender->width_bak; } } - // gDPPipeSync(NOW_POLY_OPA_DISP++) - // gSPClearGeometryMode(NOW_POLY_OPA_DISP++, 0xFFFFFF) - // gDPSetOtherMode(NOW_POLY_OPA_DISP++, G_AD_DISABLE | G_CD_DISABLE | G_CK_NONE | G_TC_FILT | G_TF_BILERP | - // G_TT_NONE | G_TL_TILE | G_TD_CLAMP | G_TP_NONE | G_CYC_COPY | G_PM_NPRIMITIVE, G_AC_NONE | G_ZS_PRIM | G_RM_NOOP - // | G_RM_NOOP2) gDPSetColorImage(NOW_POLY_OPA_DISP++, G_IM_FMT_RGBA, G_IM_SIZ_16b, width, color_image_buf); - // gDPSetScissor(NOW_POLY_OPA_DISP++, G_SC_NON_INTERLACE, 0, 0, width, height); + if (y < 0) { + y_max = prerender->height_bak + y; + y_min = -y; + y = 0; + } else { + y_min = 0; - // LOOP - // [gDPLoadTextureTile] - // gDPSetTextureImage(NOW_POLY_OPA_DISP++, G_IM_FMT_RGBA, G_IM_SIZ_16b, some_width, texture_img_buf); - // gDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0x0000, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, - // G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD) gDPLoadSync() gDPLoadTile(G_TX_LOADTILE, ...) - // gDPPipeSync() - // gDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0x0000, G_TX_RENDERTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, - // G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD) gDPSetTileSize(G_TX_RENDERTILE, ...) - // - // [gSPTextureRectangle] - // gTexRect(..., G_TX_RENDERTILE) - // gDPHalf1(...) - // gDPHalf2(...) + if (y + prerender->height_bak >= 480) { + y_max = (480 - 1) - y; + } else { + y_max = prerender->height_bak; + } + } + + if (mode == 0) { + src_w = 640; + src_h = 480; + dst_w = prerender->width_bak; + dst_h = prerender->height_bak; + uls = x; + ult = y; + lrt = y_min; + lrs = x_min; + src_buffer = prerender->framebuffer_bak; + } else { + src_w = prerender->width_bak; + src_h = prerender->height_bak; + dst_w = 640; + dst_h = 480; + uls = x_min; + ult = y_min; + lrt = y; + lrs = x; + dst_buffer = prerender->framebuffer_bak; + } + + OPEN_DISP(graph); + + tmem_line = (1 << 12) / (((x_max + 3) & ~3) * 2); + temp0 = uls + (x_max - 1); + tex_wd = (lrs + x_max - 1) << G_TEXTURE_IMAGE_FRAC; + + if (mode) { + Gfx* gfx = NOW_POLY_OPA_DISP; + + src_w = x - x_min; + src_h = y - y_min; + prerender->width = 640; + prerender->height = 480; + PreRender_CopyRGBC(prerender, &gfx, src_w, src_h); + + SET_POLY_OPA_DISP(gfx); + + } else { + gDPPipeSync(NEXT_POLY_OPA_DISP); + gSPClearGeometryMode(NEXT_POLY_OPA_DISP, 0xFFFFFF); + gDPSetOtherMode(NEXT_POLY_OPA_DISP, + G_AD_DISABLE | G_CD_DISABLE | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_NONE | G_CYC_COPY | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PRIM | G_RM_NOOP | G_RM_NOOP2); + gDPSetColorImage(NEXT_POLY_OPA_DISP, G_IM_FMT_RGBA, G_IM_SIZ_16b, dst_w, src_buffer); + gDPSetScissor(NEXT_POLY_OPA_DISP, G_SC_NON_INTERLACE, 0, 0, dst_w, dst_h); + + while (y_max > 0) { + if (tmem_line > y_max) { + tmem_line = y_max; + } + + gDPLoadTextureTile(NEXT_POLY_OPA_DISP, dst_buffer, G_IM_FMT_RGBA, G_IM_SIZ_16b, src_w, 0, uls, ult, temp0, + (ult + tmem_line - 1), 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD); + + gSPTextureRectangle(NEXT_POLY_OPA_DISP, lrs << G_TEXTURE_IMAGE_FRAC, lrt << G_TEXTURE_IMAGE_FRAC, tex_wd, + (lrt + tmem_line - 1) << G_TEXTURE_IMAGE_FRAC, G_TX_RENDERTILE, uls << 5, ult << 5, + (1 << 2) << 10, 1 << 10); + + ult += tmem_line; + lrt += tmem_line; + y_max -= tmem_line; + } + } + CLOSE_DISP(graph); } +#else +#pragma push +#pragma force_active on +extern f32 lbl_8064b870; /* 4.0f */ +REL_SYMBOL_AT(lbl_8064b870, 0x8064B870); -static void mSM_set_drawMode(GRAPH* graph, PreRender* prerender, f32 dist, f32 height, s16 angle) { - // TODO +extern f64 lbl_8064b878; /* int -> float magic */ +REL_SYMBOL_AT(lbl_8064b878, 0x8064B878); + +#pragma pop + +static asm void mSM_cbuf_copy(GRAPH* graph, PreRender* prerender, int x, int y, int mode) { +#include "asm/805ed694.s" +} +#endif + +static void mSM_set_drawMode(GRAPH* graph, PreRender* prerender, f32 eye_dist, f32 eye_height, s16 angle) { + static Vp viewport_data = { 0, 0, 511, 0, 0, 0, 511, 0 }; + static Lights1 light_data = { + /* Ambient */ + 105, 90, 90, /* ambient color */ + 0, /* pad */ + 105, 90, 90, /* ambient color copy */ + 0, /* pad */ + + /* Light */ + 255, 255, 245, /* color */ + 0, /* pad */ + 255, 255, 245, /* color copy */ + 0, /* pad */ + 0, 60, 60, /* direction */ + 0 /* pad */ + }; + + int width = prerender->width_bak; + int height = prerender->height_bak; + + OPEN_DISP(graph); + + gDPPipeSync(NEXT_POLY_OPA_DISP); + gSPClearGeometryMode(NEXT_POLY_OPA_DISP, 0xFFFFFF); + gSPTexture(NEXT_POLY_OPA_DISP, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF); + gDPSetCombineMode(NEXT_POLY_OPA_DISP, G_CC_SHADE, G_CC_SHADE); + gDPSetOtherMode(NEXT_POLY_OPA_DISP, + G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_PERSP | G_CYC_FILL | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PIXEL | G_RM_NOOP | G_RM_NOOP2); + gSPLoadGeometryMode(NEXT_POLY_OPA_DISP, G_ZBUFFER | G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH); + gDPSetScissor(NEXT_POLY_OPA_DISP, G_SC_NON_INTERLACE, 0, 0, width, height); + gSPClipRatio(NEXT_POLY_OPA_DISP, FRUSTRATIO_1); + gDPSetColorImage(NEXT_POLY_OPA_DISP, G_IM_FMT_RGBA, G_IM_SIZ_16b, width, prerender->zbuffer_bak); + gDPSetFillColor(NEXT_POLY_OPA_DISP, ((0xFFFC) << 16) | (0xFFFC)); + gDPFillRectangle(NEXT_POLY_OPA_DISP, 0, 0, width - 1, height - 1); + gDPPipeSync(NEXT_POLY_OPA_DISP); + gDPSetColorImage(NEXT_POLY_OPA_DISP, G_IM_FMT_RGBA, G_IM_SIZ_16b, width, prerender->framebuffer_bak); + gDPPipeSync(NEXT_POLY_OPA_DISP); + gDPSetDepthImage(NEXT_POLY_OPA_DISP, prerender->zbuffer_bak); + + { + Vp* vp = GRAPH_ALLOC_TYPE(graph, Vp, 1); + Mtx* projMtx = GRAPH_ALLOC_TYPE(graph, Mtx, 1); + Mtx* viewMtx = GRAPH_ALLOC_TYPE(graph, Mtx, 1); + u16 perspNorm; + + if (vp == NULL) { + vp = &viewport_data; + } else { + vp->vp.vscale[0] = vp->vp.vtrans[0] = width * 2; + vp->vp.vscale[1] = vp->vp.vtrans[1] = height * 2; + vp->vp.vscale[2] = vp->vp.vtrans[2] = 511; + vp->vp.vscale[3] = vp->vp.vtrans[3] = 0; + } + + gSPViewport(NEXT_POLY_OPA_DISP, vp); + + if (width != 256) { + guPerspective(projMtx, &perspNorm, 35.0f, (f32)width / (f32)height, 1.0f, 2000.0f, 1.0f); + } else { + guPerspective(projMtx, &perspNorm, 20.0f, (f32)width / (f32)height, 100.0f, 800.0f, 1.0f); + } + + gSPPerspNormalize(NEXT_POLY_OPA_DISP, perspNorm); + gSPMatrix(NEXT_POLY_OPA_DISP, projMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION); + + { + f32 yEye; + f32 zEye; + + if (angle == DEG2SHORT_ANGLE(90.0f)) { + angle = 0x4100; + } else if (angle == DEG2SHORT_ANGLE(-90.0f)) { + angle = -0x3F00; + } + + yEye = eye_height + eye_dist * sin_s(angle); + zEye = eye_dist * cos_s(angle); + + if (angle < DEG2SHORT_ANGLE(-90.0f) || angle >= DEG2SHORT_ANGLE(90.0f)) { + guLookAt(viewMtx, 0.0f, yEye, zEye, 0.0f, eye_height, 0.0f, 0.0f, -1.0f, 0.0f); + } else { + guLookAt(viewMtx, 0.0f, yEye, zEye, 0.0f, eye_height, 0.0f, 0.0f, 1.0f, 0.0f); + } + } + + gSPMatrix(NEXT_POLY_OPA_DISP, viewMtx, G_MTX_NOPUSH | G_MTX_MUL | G_MTX_PROJECTION); + gSPSetLights1(NEXT_POLY_OPA_DISP, light_data); + } + + SET_POLY_OPA_DISP(gfx_set_fog_nosync(NEXT_POLY_OPA_DISP, 255, 255, 255, 255, 1000, 1000)); + + CLOSE_DISP(graph); } static int mSM_get_groupNo(mActor_name_t item) { @@ -284,7 +413,1957 @@ typedef struct inventory_icon_info_s { u8* tex; } mSM_inventory_icon_info_c; +extern u8 inv_win_mark_tex[]; + static void mSM_set_dl_item(GRAPH* graph, f32 x, f32 y, f32 scale, mSM_inventory_icon_info_c* icon_info, u16* palette, u8 l, rgba_t* color, int draw_shadow, int draw_mark) { - // TODO + f32 rect_xh; + f32 rect_yh; + int t; + int scale_factor; + + OPEN_POLY_OPA_DISP(graph); + + gDPPipeSync(POLY_OPA_DISP++); + gDPSetAlphaCompare(POLY_OPA_DISP++, G_AC_THRESHOLD); + gDPSetPrimColor(POLY_OPA_DISP++, 0, l, color->r, color->g, color->b, color->a); + + /* Check if we're drawing the shadow or the actual icon */ + if (draw_shadow) { + gDPSetBlendColor(POLY_OPA_DISP++, 255, 255, 255, 40); + } else { + if (color->a == 255) { + gDPSetBlendColor(POLY_OPA_DISP++, 255, 255, 255, 254); + gDPSetCombineLERP(POLY_OPA_DISP++, TEXEL0, PRIMITIVE, PRIM_LOD_FRAC, PRIMITIVE, 0, 0, 0, TEXEL0, TEXEL0, + PRIMITIVE, PRIM_LOD_FRAC, PRIMITIVE, 0, 0, 0, TEXEL0); + } else { + gDPSetBlendColor(POLY_OPA_DISP++, 255, 255, 255, 40); + gDPSetCombineLERP(POLY_OPA_DISP++, TEXEL0, PRIMITIVE, PRIM_LOD_FRAC, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, + TEXEL0, PRIMITIVE, PRIM_LOD_FRAC, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0); + } + } + + gDPPipeSync(POLY_OPA_DISP++); + gDPSetTextureLUT(POLY_OPA_DISP++, G_TT_RGBA16); + gDPSetTexturePersp(POLY_OPA_DISP++, G_TP_NONE); + gDPLoadTLUT_Dolphin(POLY_OPA_DISP++, 15, 16, 1, palette); + gDPSetTextureImage_Dolphin(POLY_OPA_DISP++, G_IM_FMT_CI, G_IM_SIZ_4b, 32, 32, icon_info->tex); + gDPSetTile_Dolphin(POLY_OPA_DISP++, G_DOLPHIN_TLUT_DEFAULT_MODE, G_TX_RENDERTILE, 15, GX_MIRROR, GX_MIRROR, + GX_CLAMP, GX_CLAMP); + + t = (int)(x * 0.975f); + x = (160.0f + (f32)t) - scale * 12.0f; + y = (120.0f - y) - scale * 12.0f; + scale_factor = (int)((1.0f / scale) * 1365.333333333f); + + /* Draw 2D rectangle with icon texture */ + if (x < 320.0f) { + f32 mod = scale * 24.0f; + + rect_xh = x + mod; + rect_yh = y + mod; + + POLY_OPA_DISP = gfx_gSPScisTextureRectangle1(POLY_OPA_DISP, x * 4.0f, y * 4.0f, rect_xh * 4.0f, rect_yh * 4.0f, + G_TX_RENDERTILE, 0, 0, scale_factor, scale_factor); + } + + if (draw_mark) { + f32 frame_per = (((f32)(gamePT->frame_counter % 40)) * (1.0f / 40.0f)) * 2.0f; + + if (frame_per > 1.0f) { + frame_per = 2.0f - frame_per; + } + + gDPPipeSync(POLY_OPA_DISP++); + gDPSetTextureLUT(POLY_OPA_DISP++, G_TT_NONE); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 0, (int)(frame_per * 90.0f + 95.0f), 0, 255); + gDPSetEnvColor(POLY_OPA_DISP++, (int)(frame_per * 60.0f), (int)(frame_per * 45.0f + 210.0f), + (int)(frame_per * 60.0f), 255); + gDPSetAlphaCompare(POLY_OPA_DISP++, G_AC_NONE); + gDPSetBlendColor(POLY_OPA_DISP++, 255, 255, 255, 8); + gDPSetTextureLUT(POLY_OPA_DISP++, G_TT_NONE); // duplicate? + gDPSetTextureImage_Dolphin(POLY_OPA_DISP++, G_IM_FMT_IA, G_IM_SIZ_8b, 16, 16, inv_win_mark_tex); + gDPSetTile_Dolphin(POLY_OPA_DISP++, G_DOLPHIN_TLUT_DEFAULT_MODE, G_TX_RENDERTILE, 0, GX_MIRROR, GX_MIRROR, + GX_CLAMP, GX_CLAMP); + gDPSetBlendColor(POLY_OPA_DISP++, 255, 255, 255, 254); // bug? doesn't this undo the previous blend color set? + gDPSetCombineMode(POLY_OPA_DISP++, G_CC_BLENDPEDECALA, G_CC_BLENDPEDECALA); + + /* Draw 2D rectangle with mark texture */ + if (x < 320.0f) { + f32 mod = scale * 24.0f; + + rect_xh = x + mod; + rect_yh = y + mod; + + POLY_OPA_DISP = + gfx_gSPScisTextureRectangle1(POLY_OPA_DISP, x * 4.0f, y * 4.0f, rect_xh * 4.0f, rect_yh * 4.0f, + G_TX_RENDERTILE, 0, 0, scale_factor, scale_factor); + } + } + + gDPPipeSync(POLY_OPA_DISP++); + gDPSetTextureLUT(POLY_OPA_DISP++, G_TT_RGBA16); + gDPSetAlphaCompare(POLY_OPA_DISP++, G_AC_NONE); + gDPSetBlendColor(POLY_OPA_DISP++, 255, 255, 255, 8); + gDPSetTexturePersp(POLY_OPA_DISP++, G_TP_PERSP); + + CLOSE_POLY_OPA_DISP(graph); +} + +extern u16 inv_mwin_leaf_pal[]; +extern u8 inv_mwin_leaf_tex[]; + +extern u16 inv_mwin_haniwa_pal[]; +extern u8 inv_mwin_haniwa_tex[]; + +extern u16 inv_mwin_kaseki2_pal[]; +extern u8 inv_mwin_kaseki2_tex[]; + +extern u16 inv_mwin_unknown_pal[]; +extern u8 inv_mwin_unknown_tex[]; + +extern u16 inv_mwin_pbox2_pal[]; +extern u8 inv_mwin_pbox_tex[]; + +extern u16 inv_mwin_pbox1_tex_rgb_ci4_pal[]; +extern u8 inv_mwin_pbox1_tex_rgb_ci4[]; + +extern u16 inv_mwin_pbox2_tex_rgb_ci4_pal[]; +extern u8 inv_mwin_pbox2_tex_rgb_ci4[]; + +extern u16 inv_mwin_pbox3_tex_rgb_ci4_pal[]; +extern u8 inv_mwin_pbox3_tex_rgb_ci4[]; + +extern u16 inv_mwin_pbox4_tex_rgb_ci4_pal[]; +extern u8 inv_mwin_pbox4_tex_rgb_ci4[]; + +extern u16 inv_mwin_pbox5_tex_rgb_ci4_pal[]; +extern u8 inv_mwin_pbox5_tex_rgb_ci4[]; + +extern u16 inv_mwin_binsen1_pal[]; +extern u8 inv_mwin_binsen1_tex[]; +extern u8 inv_mwin_binsen2_tex[]; +extern u8 inv_mwin_binsen3_tex[]; +extern u8 inv_mwin_binsen4_tex[]; + +extern u16 inv_mwin_okane1_pal[]; +extern u8 inv_mwin_okane1_tex[]; +extern u8 inv_mwin_okane2_tex[]; +extern u8 inv_mwin_okane3_tex[]; +extern u8 inv_mwin_okane4_tex[]; + +extern u16 inv_mwin_mushi_pal[]; +extern u8 inv_mwin_mushi_tex[]; +extern u16 inv_mwin_ono_pal[]; +extern u8 inv_mwin_ono_tex[]; +extern u16 inv_mwin_scoop_pal[]; +extern u8 inv_mwin_scoop_tex[]; +extern u16 inv_mwin_turi_tex_pal[]; +extern u8 inv_mwin_turi_tex[]; +extern u16 inv_mwin_unbrella_pal[]; +extern u8 inv_mwin_unbrella_tex[]; +extern u16 inv_mwin_mushi_pal[]; +extern u8 inv_mwin_mushi_tex[]; +extern u16 inv_mwin_gmushi_pal[]; +extern u8 inv_mwin_gmushi_tex[]; +extern u16 inv_mwin_gono_pal[]; +extern u8 inv_mwin_gono_tex[]; +extern u16 inv_mwin_gscoop_pal[]; +extern u8 inv_mwin_gscoop_tex[]; +extern u16 inv_mwin_gturi_pal[]; +extern u8 inv_mwin_gturi_tex[]; +extern u16 inv_mwin_ono_pal[]; +extern u8 inv_mwin_ono_tex[]; +extern u8 inv_mwin_ono2_tex[]; +extern u8 inv_mwin_ono3_tex[]; +extern u16 inv_mwin_fuusen_pal[]; +extern u8 inv_mwin_fuusen_tex[]; +extern u16 inv_mwin_kazaguruma_pal[]; +extern u8 inv_mwin_kazaguruma_tex[]; +extern u16 inv_mwin_utiwa_pal[]; +extern u8 inv_mwin_utiwa_tex[]; + +extern u16 inv_mwin_01funa_pal[]; +extern u8 inv_mwin_01funa_tex[]; +extern u16 inv_mwin_02masu_pal[]; +extern u8 inv_mwin_02masu_tex[]; +extern u16 inv_mwin_03koi_pal[]; +extern u8 inv_mwin_03koi_tex[]; +extern u16 inv_mwin_04nishiki_pal[]; +extern u8 inv_mwin_04nishiki_tex[]; +extern u16 inv_mwin_07namazu_pal[]; +extern u8 inv_mwin_07namazu_tex[]; +extern u16 inv_mwin_13bass_pal[]; +extern u8 inv_mwin_13bass_tex[]; +extern u16 inv_mwin_14bassm_pal[]; +extern u8 inv_mwin_14bassm_tex[]; +extern u16 inv_mwin_15bassl_pal[]; +extern u8 inv_mwin_15bassl_tex[]; +extern u16 inv_mwin_12gill_pal[]; +extern u8 inv_mwin_12gill_tex[]; +extern u16 inv_mwin_08oonamazu_pal[]; +extern u8 inv_mwin_08oonamazu_tex[]; +extern u16 inv_mwin_16raigyo_pal[]; +extern u8 inv_mwin_16raigyo_tex[]; +extern u16 inv_mwin_05nigoi_pal[]; +extern u8 inv_mwin_05nigoi_tex[]; +extern u16 inv_mwin_06ugui_pal[]; +extern u8 inv_mwin_06ugui_tex[]; +extern u16 inv_mwin_09oikawa_pal[]; +extern u8 inv_mwin_09oikawa_tex[]; +extern u16 inv_mwin_10tanago_pal[]; +extern u8 inv_mwin_10tanago_tex[]; +extern u16 inv_mwin_11dojyou_pal[]; +extern u8 inv_mwin_11dojyou_tex[]; +extern u16 inv_mwin_19wakasagi_pal[]; +extern u8 inv_mwin_19wakasagi_tex[]; +extern u16 inv_mwin_20ayu_pal[]; +extern u8 inv_mwin_20ayu_tex[]; +extern u16 inv_mwin_21yamame_pal[]; +extern u8 inv_mwin_21yamame_tex[]; +extern u16 inv_mwin_23iwana_pal[]; +extern u8 inv_mwin_23iwana_tex[]; +extern u16 inv_mwin_22niji_pal[]; +extern u8 inv_mwin_22niji_tex[]; +extern u16 inv_mwin_24itou_pal[]; +extern u8 inv_mwin_24itou_tex[]; +extern u16 inv_mwin_25sake_pal[]; +extern u8 inv_mwin_25sake_tex[]; +extern u16 inv_mwin_26kingyo_pal[]; +extern u8 inv_mwin_26kingyo_tex[]; +extern u16 inv_mwin_30pirania_pal[]; +extern u8 inv_mwin_30pirania_tex[]; +extern u16 inv_mwin_31aroana_pal[]; +extern u8 inv_mwin_31aroana_tex[]; +extern u16 inv_mwin_17unagi_pal[]; +extern u8 inv_mwin_17unagi_tex[]; +extern u16 inv_mwin_18donko_pal[]; +extern u8 inv_mwin_18donko_tex[]; +extern u16 inv_mwin_29angel_pal[]; +extern u8 inv_mwin_29angel_tex[]; +extern u16 inv_mwin_28gupi_pal[]; +extern u8 inv_mwin_28gupi_tex[]; +extern u16 inv_mwin_27demekin_pal[]; +extern u8 inv_mwin_27demekin_tex[]; +extern u16 inv_mwin_32kaseki_pal[]; +extern u8 inv_mwin_32kaseki_tex[]; +extern u16 inv_mwin_33zarigani_pal[]; +extern u8 inv_mwin_33zarigani_tex[]; +extern u16 inv_mwin_34kaeru_pal[]; +extern u8 inv_mwin_34kaeru_tex[]; +extern u16 inv_mwin_35medaka_pal[]; +extern u8 inv_mwin_35medaka_tex[]; +extern u16 inv_mwin_36kurage_pal[]; +extern u8 inv_mwin_36kurage_tex[]; +extern u16 inv_mwin_37suzuki_pal[]; +extern u8 inv_mwin_37suzuki_tex[]; +extern u16 inv_mwin_38tai_pal[]; +extern u8 inv_mwin_38tai_tex[]; +extern u16 inv_mwin_39ishidai_pal[]; +extern u8 inv_mwin_39ishidai_tex[]; +extern u16 inv_mwin_40piraruku_pal[]; +extern u8 inv_mwin_40piraruku_tex[]; + +extern u16 inv_mwin_fuku3_pal[]; +extern u8 inv_mwin_fuku3_tex[]; + +extern u16 inv_mwin_mtegami_pal[]; +extern u8 inv_mwin_mtegami_tex[]; + +extern u16 inv_mwin_video_pal[]; +extern u8 inv_mwin_video_tex[]; + +extern u16 inv_mwin_tetyou_pal[]; +extern u8 inv_mwin_tetyou_tex[]; + +extern u16 inv_mwin_pokepi_pal[]; +extern u8 inv_mwin_pokepi_tex[]; + +extern u16 inv_mwin_manga_pal[]; +extern u8 inv_mwin_manga_tex[]; + +extern u16 inv_mwin_ehon_pal[]; +extern u8 inv_mwin_ehon_tex[]; + +extern u16 inv_mwin_GB_pal[]; +extern u8 inv_mwin_GB_tex[]; + +extern u16 inv_mwin_camera2_pal[]; +extern u8 inv_mwin_camera_tex[]; + +extern u16 inv_mwin_tokei_pal[]; +extern u8 inv_mwin_tokei_tex[]; + +extern u16 inv_mwin_hankati_pal[]; +extern u8 inv_mwin_hankati_tex[]; + +extern u16 inv_mwin_glasses_pal[]; +extern u8 inv_mwin_glasses_tex[]; + +extern u16 inv_mwin_aki_pal[]; +extern u8 inv_mwin_akikan_tex[]; + +extern u16 inv_mwin_kutu_pal[]; +extern u8 inv_mwin_kutu_tex[]; + +extern u8 inv_mwin_taiya_tex[]; + +extern u16 inv_mwin_kaseki_pal[]; +extern u8 inv_mwin_kaseki_tex[]; + +extern u16 inv_mwin_ana_pal[]; +extern u8 inv_mwin_ana_tex[]; + +extern u16 inv_mwin_hiougi_pal[]; +extern u8 inv_mwin_hiougi_tex[]; + +extern u16 inv_mwin_hirako_pal[]; +extern u8 inv_mwin_hirako_tex[]; + +extern u16 inv_mwin_hone_pal[]; +extern u8 inv_mwin_hone_tex[]; + +extern u16 inv_mwin_hoshida_pal[]; +extern u8 inv_mwin_hoshida_tex[]; + +extern u16 inv_mwin_sanddollar_pal[]; +extern u8 inv_mwin_sanddollar_tex[]; + +extern u16 inv_mwin_syako_pal[]; +extern u8 inv_mwin_syako_tex[]; + +extern u16 inv_mwin_hora_pal[]; +extern u8 inv_mwin_hora_tex[]; + +extern u16 inv_mwin_sango_pal[]; +extern u8 inv_mwin_sango_tex[]; + +extern u16 inv_mwin_kanban_pal[]; +extern u8 inv_mwin_kanban_tex[]; + +extern u16 inv_mwin_taisou_pal[]; +extern u8 inv_mwin_taisou_tex[]; + +extern u16 inv_mwin_fork_pal[]; +extern u8 inv_mwin_fork_tex[]; + +extern u16 inv_mwin_jyuutan_pal[]; +extern u8 inv_mwin_jyuutan_tex[]; + +extern u16 inv_mwin_kabe2_pal[]; +extern u8 inv_mwin_kabe_tex[]; + +extern u16 inv_mwin_apple_pal[]; +extern u8 inv_mwin_apple_tex[]; + +extern u16 inv_mwin_nuts_pal[]; +extern u8 inv_mwin_nuts_tex[]; + +extern u16 inv_mwin_pear_pal[]; +extern u8 inv_mwin_pear_tex[]; + +extern u16 inv_mwin_peach_pal[]; +extern u8 inv_mwin_peach_tex[]; + +extern u16 inv_mwin_orange_pal[]; +extern u8 inv_mwin_orange_tex[]; + +extern u16 inv_mwin_matutake2_pal[]; +extern u8 inv_mwin_matutake_tex[]; + +extern u16 inv_mwin_ame_pal[]; +extern u8 inv_mwin_ame_tex[]; + +extern u16 inv_mwin_yashi_pal[]; +extern u8 inv_mwin_yashi_tex[]; + +extern u16 inv_mwin_naegi_pal[]; +extern u8 inv_mwin_naegi_tex[]; + +extern u16 inv_mwin_cnaegi_pal[]; +extern u8 inv_mwin_cnaegi_tex[]; + +extern u16 inv_mwin_seed_pal[]; +extern u8 inv_mwin_seed_tex[]; + +extern u16 inv_mwin_onpu_pal[]; +extern u8 inv_mwin_onpu_tex[]; + +extern u16 inv_mwin_nittki_pal[]; +extern u8 inv_mwin_nittki_tex[]; + +extern u16 inv_mwin_1fukubiki_pal[]; +extern u16 inv_mwin_2fukubiki_pal[]; +extern u16 inv_mwin_3fukubiki_pal[]; +extern u16 inv_mwin_4fukubiki_pal[]; +extern u16 inv_mwin_5fukubiki_pal[]; +extern u16 inv_mwin_6fukubiki_pal[]; +extern u16 inv_mwin_7fukubiki_pal[]; +extern u16 inv_mwin_8fukubiki_pal[]; +extern u16 inv_mwin_9fukubiki_pal[]; +extern u16 inv_mwin_10fukubiki_pal[]; +extern u16 inv_mwin_11fukubiki_pal[]; +extern u16 inv_mwin_12fukubiki_pal[]; + +extern u8 inv_mwin_1biki1_tex[]; +extern u8 inv_mwin_1biki2_tex[]; +extern u8 inv_mwin_1biki3_tex[]; +extern u8 inv_mwin_1biki4_tex[]; +extern u8 inv_mwin_1biki5_tex[]; + +extern u16 inv_mwin_01monshiro_pal[]; +extern u8 inv_mwin_01monshiro_tex[]; +extern u16 inv_mwin_02monki_pal[]; +extern u8 inv_mwin_02monki_tex[]; +extern u16 inv_mwin_03kiageha_pal[]; +extern u8 inv_mwin_03kiageha_tex[]; +extern u16 inv_mwin_04ohmurasaki_pal[]; +extern u8 inv_mwin_04ohmurasaki_tex[]; +extern u16 inv_mwin_06minmin_pal[]; +extern u8 inv_mwin_06minmin_tex[]; +extern u16 inv_mwin_07tukutuku_pal[]; +extern u8 inv_mwin_07tukutuku_tex[]; +extern u16 inv_mwin_08higurashi_pal[]; +extern u8 inv_mwin_08higurashi_tex[]; +extern u16 inv_mwin_05abura_pal[]; +extern u8 inv_mwin_05abura_tex[]; +extern u16 inv_mwin_23hati_pal[]; +extern u8 inv_mwin_23hati_tex[]; +extern u16 inv_mwin_10shiokara_pal[]; +extern u8 inv_mwin_10shiokara_tex[]; +extern u16 inv_mwin_09akiakane_pal[]; +extern u8 inv_mwin_09akiakane_tex[]; +extern u16 inv_mwin_11ginyanma_pal[]; +extern u8 inv_mwin_11ginyanma_tex[]; +extern u16 inv_mwin_12oniyanma_pal[]; +extern u8 inv_mwin_12oniyanma_tex[]; +extern u16 inv_mwin_20syouryou_pal[]; +extern u8 inv_mwin_20syouryou_tex[]; +extern u16 inv_mwin_21tonosama_pal[]; +extern u8 inv_mwin_21tonosama_tex[]; +extern u16 inv_mwin_13koorogi_pal[]; +extern u8 inv_mwin_13koorogi_tex[]; +extern u16 inv_mwin_14kirigirisu_pal[]; +extern u8 inv_mwin_14kirigirisu_tex[]; +extern u16 inv_mwin_16suzumushi_pal[]; +extern u8 inv_mwin_16suzumushi_tex[]; +extern u16 inv_mwin_15matumushi_pal[]; +extern u8 inv_mwin_15matumushi_tex[]; +extern u16 inv_mwin_25kanabun_pal[]; +extern u8 inv_mwin_25kanabun_tex[]; +extern u16 inv_mwin_28kabuto_pal[]; +extern u8 inv_mwin_28kabuto_tex[]; +extern u16 inv_mwin_29hirata_pal[]; +extern u8 inv_mwin_29hirata_tex[]; +extern u16 inv_mwin_27tamamushi_pal[]; +extern u8 inv_mwin_27tamamushi_tex[]; +extern u16 inv_mwin_26gomadara_pal[]; +extern u8 inv_mwin_26gomadara_tex[]; +extern u16 inv_mwin_17tentou_pal[]; +extern u8 inv_mwin_17tentou_tex[]; +extern u16 inv_mwin_18nanahoshi_pal[]; +extern u8 inv_mwin_18nanahoshi_tex[]; +extern u16 inv_mwin_19kamakiri_pal[]; +extern u8 inv_mwin_19kamakiri_tex[]; +extern u16 inv_mwin_24genji_pal[]; +extern u8 inv_mwin_24genji_tex[]; +extern u16 inv_mwin_22danna_pal[]; +extern u8 inv_mwin_22danna_tex[]; +extern u16 inv_mwin_30nokogiri_pal[]; +extern u8 inv_mwin_30nokogiri_tex[]; +extern u16 inv_mwin_31miyama_pal[]; +extern u8 inv_mwin_31miyama_tex[]; +extern u16 inv_mwin_32okuwa_pal[]; +extern u8 inv_mwin_32okuwa_tex[]; +extern u16 inv_mwin_33maimai_pal[]; +extern u8 inv_mwin_33maimai_tex[]; +extern u16 inv_mwin_34kera_pal[]; +extern u8 inv_mwin_34kera_tex[]; +extern u16 inv_mwin_35amenbo_pal[]; +extern u8 inv_mwin_35amenbo_tex[]; +extern u16 inv_mwin_36mino_pal[]; +extern u8 inv_mwin_36mino_tex[]; +extern u16 inv_mwin_37dango_pal[]; +extern u8 inv_mwin_37dango_tex[]; +extern u16 inv_mwin_38kumo_pal[]; +extern u8 inv_mwin_38kumo_tex[]; +extern u16 inv_mwin_39ari_pal[]; +extern u8 inv_mwin_39ari_tex[]; +extern u16 inv_mwin_40ka_pal[]; +extern u8 inv_mwin_40ka_tex[]; +extern u16 inv_mwin_hitodama_pal[]; +extern u8 inv_mwin_hitodama1_tex[]; +extern u8 inv_mwin_hitodama2_tex[]; +extern u8 inv_mwin_hitodama3_tex[]; +extern u8 inv_mwin_hitodama4_tex[]; +extern u8 inv_mwin_hitodama5_tex[]; + +extern u16 inv_mwin_fukubukuro_pal[]; +extern u8 inv_mwin_fukubukuro_tex[]; + +extern u16 inv_mwin_fukubukuro2_pal[]; +extern u8 inv_mwin_fukubukuro_tex_rgb_ci4[]; + +extern u16 inv_mwin_fukubukuro2_tex_rgb_ci4_pal[]; +extern u8 inv_mwin_fukubukuro2_tex_rgb_ci4[]; + +extern u16 inv_mwin_cabu1_pal[]; +extern u8 inv_mwin_cabu1_tex[]; +extern u8 inv_mwin_cabu2_tex[]; +extern u8 inv_mwin_cabu3_tex[]; + +extern u16 inv_mwin_2cabu1_pal[]; +extern u8 inv_mwin_2cabu1_tex[]; + +static void mSM_draw_item(GRAPH* graph, f32 pos_x, f32 pos_y, f32 scale, mActor_name_t item, int present_flag, + int color_flag, int anim_frame, int shadow_flag, int mark_flag) { + static mSM_inventory_icon_info_c furniture_tex_data = { inv_mwin_leaf_pal, inv_mwin_leaf_tex }; + static mSM_inventory_icon_info_c haniwa_tex_data = { inv_mwin_haniwa_pal, inv_mwin_haniwa_tex }; + static mSM_inventory_icon_info_c fossil_tex_data = { inv_mwin_kaseki2_pal, inv_mwin_kaseki2_tex }; + static mSM_inventory_icon_info_c unknown_tex_data = { inv_mwin_unknown_pal, inv_mwin_unknown_tex }; + + // clang-format off + static mSM_inventory_icon_info_c present_tex_data[] = { + { inv_mwin_pbox2_pal, inv_mwin_pbox_tex }, + { inv_mwin_pbox2_pal, inv_mwin_pbox_tex }, + { inv_mwin_pbox1_tex_rgb_ci4_pal, inv_mwin_pbox1_tex_rgb_ci4 }, + { inv_mwin_pbox1_tex_rgb_ci4_pal, inv_mwin_pbox1_tex_rgb_ci4 }, + { inv_mwin_pbox2_tex_rgb_ci4_pal, inv_mwin_pbox2_tex_rgb_ci4 }, + { inv_mwin_pbox2_tex_rgb_ci4_pal, inv_mwin_pbox2_tex_rgb_ci4 }, + { inv_mwin_pbox3_tex_rgb_ci4_pal, inv_mwin_pbox3_tex_rgb_ci4 }, + { inv_mwin_pbox3_tex_rgb_ci4_pal, inv_mwin_pbox3_tex_rgb_ci4 }, + { inv_mwin_pbox4_tex_rgb_ci4_pal, inv_mwin_pbox4_tex_rgb_ci4 }, + { inv_mwin_pbox4_tex_rgb_ci4_pal, inv_mwin_pbox4_tex_rgb_ci4 }, + { inv_mwin_pbox5_tex_rgb_ci4_pal, inv_mwin_pbox5_tex_rgb_ci4 }, + { inv_mwin_pbox5_tex_rgb_ci4_pal, inv_mwin_pbox5_tex_rgb_ci4 }, + }; + // clang-format on + + // clang-format off + static mSM_inventory_icon_info_c binsen_tex_table[] = { + { inv_mwin_binsen1_pal, inv_mwin_binsen1_tex }, + { inv_mwin_binsen1_pal, inv_mwin_binsen2_tex }, + { inv_mwin_binsen1_pal, inv_mwin_binsen3_tex }, + { inv_mwin_binsen1_pal, inv_mwin_binsen4_tex }, + }; + // clang-format on + + // clang-format off + static mSM_inventory_icon_info_c money_tex_table[] = { + { inv_mwin_okane1_pal, inv_mwin_okane1_tex }, + { inv_mwin_okane1_pal, inv_mwin_okane2_tex }, + { inv_mwin_okane1_pal, inv_mwin_okane3_tex }, + { inv_mwin_okane1_pal, inv_mwin_okane4_tex }, + }; + // clang-format on + + // clang-format off + static mSM_inventory_icon_info_c tool_tex_table[] = { + { inv_mwin_mushi_pal, inv_mwin_mushi_tex }, + { inv_mwin_ono_pal, inv_mwin_ono_tex }, + { inv_mwin_scoop_pal, inv_mwin_scoop_tex }, + { inv_mwin_turi_tex_pal, inv_mwin_turi_tex }, + { inv_mwin_unbrella_pal, inv_mwin_unbrella_tex }, + { inv_mwin_unbrella_pal, inv_mwin_unbrella_tex }, + { inv_mwin_unbrella_pal, inv_mwin_unbrella_tex }, + { inv_mwin_unbrella_pal, inv_mwin_unbrella_tex }, + { inv_mwin_unbrella_pal, inv_mwin_unbrella_tex }, + { inv_mwin_unbrella_pal, inv_mwin_unbrella_tex }, + { inv_mwin_unbrella_pal, inv_mwin_unbrella_tex }, + { inv_mwin_unbrella_pal, inv_mwin_unbrella_tex }, + { inv_mwin_unbrella_pal, inv_mwin_unbrella_tex }, + { inv_mwin_unbrella_pal, inv_mwin_unbrella_tex }, + { inv_mwin_unbrella_pal, inv_mwin_unbrella_tex }, + { inv_mwin_unbrella_pal, inv_mwin_unbrella_tex }, + { inv_mwin_unbrella_pal, inv_mwin_unbrella_tex }, + { inv_mwin_unbrella_pal, inv_mwin_unbrella_tex }, + { inv_mwin_unbrella_pal, inv_mwin_unbrella_tex }, + { inv_mwin_unbrella_pal, inv_mwin_unbrella_tex }, + { inv_mwin_unbrella_pal, inv_mwin_unbrella_tex }, + { inv_mwin_unbrella_pal, inv_mwin_unbrella_tex }, + { inv_mwin_unbrella_pal, inv_mwin_unbrella_tex }, + { inv_mwin_unbrella_pal, inv_mwin_unbrella_tex }, + { inv_mwin_unbrella_pal, inv_mwin_unbrella_tex }, + { inv_mwin_unbrella_pal, inv_mwin_unbrella_tex }, + { inv_mwin_unbrella_pal, inv_mwin_unbrella_tex }, + { inv_mwin_unbrella_pal, inv_mwin_unbrella_tex }, + { inv_mwin_unbrella_pal, inv_mwin_unbrella_tex }, + { inv_mwin_unbrella_pal, inv_mwin_unbrella_tex }, + { inv_mwin_unbrella_pal, inv_mwin_unbrella_tex }, + { inv_mwin_unbrella_pal, inv_mwin_unbrella_tex }, + { inv_mwin_unbrella_pal, inv_mwin_unbrella_tex }, + { inv_mwin_unbrella_pal, inv_mwin_unbrella_tex }, + { inv_mwin_unbrella_pal, inv_mwin_unbrella_tex }, + { inv_mwin_unbrella_pal, inv_mwin_unbrella_tex }, + { inv_mwin_unbrella_pal, inv_mwin_unbrella_tex }, + { inv_mwin_unbrella_pal, inv_mwin_unbrella_tex }, + { inv_mwin_unbrella_pal, inv_mwin_unbrella_tex }, + { inv_mwin_unbrella_pal, inv_mwin_unbrella_tex }, + { inv_mwin_unbrella_pal, inv_mwin_unbrella_tex }, + { inv_mwin_unbrella_pal, inv_mwin_unbrella_tex }, + { inv_mwin_unbrella_pal, inv_mwin_unbrella_tex }, + { inv_mwin_unbrella_pal, inv_mwin_unbrella_tex }, + { inv_mwin_mushi_pal, inv_mwin_mushi_tex }, + { inv_mwin_mushi_pal, inv_mwin_mushi_tex }, + { inv_mwin_mushi_pal, inv_mwin_mushi_tex }, + { inv_mwin_mushi_pal, inv_mwin_mushi_tex }, + { inv_mwin_mushi_pal, inv_mwin_mushi_tex }, + { inv_mwin_mushi_pal, inv_mwin_mushi_tex }, + { inv_mwin_mushi_pal, inv_mwin_mushi_tex }, + { inv_mwin_mushi_pal, inv_mwin_mushi_tex }, + { inv_mwin_mushi_pal, inv_mwin_mushi_tex }, + { inv_mwin_mushi_pal, inv_mwin_mushi_tex }, + { inv_mwin_mushi_pal, inv_mwin_mushi_tex }, + { inv_mwin_mushi_pal, inv_mwin_mushi_tex }, + { inv_mwin_mushi_pal, inv_mwin_mushi_tex }, + { inv_mwin_gmushi_pal, inv_mwin_gmushi_tex }, + { inv_mwin_gono_pal, inv_mwin_gono_tex }, + { inv_mwin_gscoop_pal, inv_mwin_gscoop_tex }, + { inv_mwin_gturi_pal, inv_mwin_gturi_tex }, + { inv_mwin_ono_pal, inv_mwin_ono_tex }, + { inv_mwin_ono_pal, inv_mwin_ono2_tex }, + { inv_mwin_ono_pal, inv_mwin_ono2_tex }, + { inv_mwin_ono_pal, inv_mwin_ono2_tex }, + { inv_mwin_ono_pal, inv_mwin_ono3_tex }, + { inv_mwin_ono_pal, inv_mwin_ono3_tex }, + { inv_mwin_ono_pal, inv_mwin_ono3_tex }, + { inv_mwin_fuusen_pal, inv_mwin_fuusen_tex }, + { inv_mwin_fuusen_pal, inv_mwin_fuusen_tex }, + { inv_mwin_fuusen_pal, inv_mwin_fuusen_tex }, + { inv_mwin_fuusen_pal, inv_mwin_fuusen_tex }, + { inv_mwin_fuusen_pal, inv_mwin_fuusen_tex }, + { inv_mwin_fuusen_pal, inv_mwin_fuusen_tex }, + { inv_mwin_fuusen_pal, inv_mwin_fuusen_tex }, + { inv_mwin_fuusen_pal, inv_mwin_fuusen_tex }, + { inv_mwin_kazaguruma_pal, inv_mwin_kazaguruma_tex }, + { inv_mwin_kazaguruma_pal, inv_mwin_kazaguruma_tex }, + { inv_mwin_kazaguruma_pal, inv_mwin_kazaguruma_tex }, + { inv_mwin_kazaguruma_pal, inv_mwin_kazaguruma_tex }, + { inv_mwin_kazaguruma_pal, inv_mwin_kazaguruma_tex }, + { inv_mwin_kazaguruma_pal, inv_mwin_kazaguruma_tex }, + { inv_mwin_kazaguruma_pal, inv_mwin_kazaguruma_tex }, + { inv_mwin_kazaguruma_pal, inv_mwin_kazaguruma_tex }, + { inv_mwin_utiwa_pal, inv_mwin_utiwa_tex }, + { inv_mwin_utiwa_pal, inv_mwin_utiwa_tex }, + { inv_mwin_utiwa_pal, inv_mwin_utiwa_tex }, + { inv_mwin_utiwa_pal, inv_mwin_utiwa_tex }, + { inv_mwin_utiwa_pal, inv_mwin_utiwa_tex }, + { inv_mwin_utiwa_pal, inv_mwin_utiwa_tex }, + { inv_mwin_utiwa_pal, inv_mwin_utiwa_tex }, + { inv_mwin_utiwa_pal, inv_mwin_utiwa_tex }, + }; + // clang-format on + + // clang-format off + static mSM_inventory_icon_info_c fish_tex_table[] = { + { inv_mwin_01funa_pal, inv_mwin_01funa_tex }, + { inv_mwin_02masu_pal, inv_mwin_02masu_tex }, + { inv_mwin_03koi_pal, inv_mwin_03koi_tex }, + { inv_mwin_04nishiki_pal, inv_mwin_04nishiki_tex }, + { inv_mwin_07namazu_pal, inv_mwin_07namazu_tex }, + { inv_mwin_13bass_pal, inv_mwin_13bass_tex }, + { inv_mwin_14bassm_pal, inv_mwin_14bassm_tex }, + { inv_mwin_15bassl_pal, inv_mwin_15bassl_tex }, + { inv_mwin_12gill_pal, inv_mwin_12gill_tex }, + { inv_mwin_08oonamazu_pal, inv_mwin_08oonamazu_tex }, + { inv_mwin_16raigyo_pal, inv_mwin_16raigyo_tex }, + { inv_mwin_05nigoi_pal, inv_mwin_05nigoi_tex }, + { inv_mwin_06ugui_pal, inv_mwin_06ugui_tex }, + { inv_mwin_09oikawa_pal, inv_mwin_09oikawa_tex }, + { inv_mwin_10tanago_pal, inv_mwin_10tanago_tex }, + { inv_mwin_11dojyou_pal, inv_mwin_11dojyou_tex }, + { inv_mwin_19wakasagi_pal, inv_mwin_19wakasagi_tex }, + { inv_mwin_20ayu_pal, inv_mwin_20ayu_tex }, + { inv_mwin_21yamame_pal, inv_mwin_21yamame_tex }, + { inv_mwin_23iwana_pal, inv_mwin_23iwana_tex }, + { inv_mwin_22niji_pal, inv_mwin_22niji_tex }, + { inv_mwin_24itou_pal, inv_mwin_24itou_tex }, + { inv_mwin_25sake_pal, inv_mwin_25sake_tex }, + { inv_mwin_26kingyo_pal, inv_mwin_26kingyo_tex }, + { inv_mwin_30pirania_pal, inv_mwin_30pirania_tex }, + { inv_mwin_31aroana_pal, inv_mwin_31aroana_tex }, + { inv_mwin_17unagi_pal, inv_mwin_17unagi_tex }, + { inv_mwin_18donko_pal, inv_mwin_18donko_tex }, + { inv_mwin_29angel_pal, inv_mwin_29angel_tex }, + { inv_mwin_28gupi_pal, inv_mwin_28gupi_tex }, + { inv_mwin_27demekin_pal, inv_mwin_27demekin_tex }, + { inv_mwin_32kaseki_pal, inv_mwin_32kaseki_tex }, + { inv_mwin_33zarigani_pal, inv_mwin_33zarigani_tex }, + { inv_mwin_34kaeru_pal, inv_mwin_34kaeru_tex }, + { inv_mwin_35medaka_pal, inv_mwin_35medaka_tex }, + { inv_mwin_36kurage_pal, inv_mwin_36kurage_tex }, + { inv_mwin_37suzuki_pal, inv_mwin_37suzuki_tex }, + { inv_mwin_38tai_pal, inv_mwin_38tai_tex }, + { inv_mwin_39ishidai_pal, inv_mwin_39ishidai_tex }, + { inv_mwin_40piraruku_pal, inv_mwin_40piraruku_tex }, + }; + // clang-format on + + // clang-format off + static mSM_inventory_icon_info_c cloth_tex_table[1] = { + { inv_mwin_fuku3_pal, inv_mwin_fuku3_tex }, + }; + // clang-format on + + // clang-format off + static mSM_inventory_icon_info_c etc_tex_table[] = { + { inv_mwin_mtegami_pal, inv_mwin_mtegami_tex }, + { inv_mwin_fuku3_pal, inv_mwin_fuku3_tex }, + { inv_mwin_okane1_pal, inv_mwin_okane1_tex }, + { inv_mwin_video_pal, inv_mwin_video_tex }, + { inv_mwin_tetyou_pal, inv_mwin_tetyou_tex }, + { inv_mwin_pokepi_pal, inv_mwin_pokepi_tex }, + { inv_mwin_manga_pal, inv_mwin_manga_tex }, + { inv_mwin_ehon_pal, inv_mwin_ehon_tex }, + { inv_mwin_GB_pal, inv_mwin_GB_tex }, + { inv_mwin_camera2_pal, inv_mwin_camera_tex }, + { inv_mwin_tokei_pal, inv_mwin_tokei_tex }, + { inv_mwin_hankati_pal, inv_mwin_hankati_tex }, + { inv_mwin_glasses_pal, inv_mwin_glasses_tex }, + { inv_mwin_okane1_pal, inv_mwin_okane1_tex }, + { inv_mwin_aki_pal, inv_mwin_akikan_tex }, + { inv_mwin_kutu_pal, inv_mwin_kutu_tex }, + { inv_mwin_kutu_pal, inv_mwin_taiya_tex }, + { inv_mwin_kaseki_pal, inv_mwin_kaseki_tex }, + { inv_mwin_ana_pal, inv_mwin_ana_tex }, + { inv_mwin_ana_pal, inv_mwin_ana_tex }, + { inv_mwin_hiougi_pal, inv_mwin_hiougi_tex }, + { inv_mwin_hirako_pal, inv_mwin_hirako_tex }, + { inv_mwin_hone_pal, inv_mwin_hone_tex }, + { inv_mwin_hoshida_pal, inv_mwin_hoshida_tex }, + { inv_mwin_sanddollar_pal, inv_mwin_sanddollar_tex }, + { inv_mwin_syako_pal, inv_mwin_syako_tex }, + { inv_mwin_hora_pal, inv_mwin_hora_tex }, + { inv_mwin_sango_pal, inv_mwin_sango_tex }, + { inv_mwin_pbox2_pal, inv_mwin_pbox_tex }, + { inv_mwin_pbox2_pal, inv_mwin_pbox_tex }, + { inv_mwin_kanban_pal, inv_mwin_kanban_tex }, + { inv_mwin_pbox2_pal, inv_mwin_pbox_tex }, + { inv_mwin_pbox2_pal, inv_mwin_pbox_tex }, + { inv_mwin_pbox2_pal, inv_mwin_pbox_tex }, + { inv_mwin_pbox2_pal, inv_mwin_pbox_tex }, + { inv_mwin_taisou_pal, inv_mwin_taisou_tex }, + { inv_mwin_taisou_pal, inv_mwin_taisou_tex }, + { inv_mwin_taisou_pal, inv_mwin_taisou_tex }, + { inv_mwin_taisou_pal, inv_mwin_taisou_tex }, + { inv_mwin_taisou_pal, inv_mwin_taisou_tex }, + { inv_mwin_taisou_pal, inv_mwin_taisou_tex }, + { inv_mwin_taisou_pal, inv_mwin_taisou_tex }, + { inv_mwin_taisou_pal, inv_mwin_taisou_tex }, + { inv_mwin_taisou_pal, inv_mwin_taisou_tex }, + { inv_mwin_taisou_pal, inv_mwin_taisou_tex }, + { inv_mwin_taisou_pal, inv_mwin_taisou_tex }, + { inv_mwin_taisou_pal, inv_mwin_taisou_tex }, + { inv_mwin_taisou_pal, inv_mwin_taisou_tex }, + { inv_mwin_fork_pal, inv_mwin_fork_tex }, + }; + // clang-format on + + // clang-format off + static mSM_inventory_icon_info_c carpet_tex_table[1] = { + { inv_mwin_jyuutan_pal, inv_mwin_jyuutan_tex }, + }; + // clang-format on + + // clang-format off + static mSM_inventory_icon_info_c wall_tex_table[1] = { + { inv_mwin_kabe2_pal, inv_mwin_kabe_tex }, + }; + // clang-format on + + // clang-format off + static mSM_inventory_icon_info_c food_tex_table[] = { + { inv_mwin_apple_pal, inv_mwin_apple_tex }, + { inv_mwin_nuts_pal, inv_mwin_nuts_tex }, + { inv_mwin_pear_pal, inv_mwin_pear_tex }, + { inv_mwin_peach_pal, inv_mwin_peach_tex }, + { inv_mwin_orange_pal, inv_mwin_orange_tex }, + { inv_mwin_matutake2_pal, inv_mwin_matutake_tex }, + { inv_mwin_ame_pal, inv_mwin_ame_tex }, + { inv_mwin_yashi_pal, inv_mwin_yashi_tex }, + }; + // clang-format on + + // clang-format off + static mSM_inventory_icon_info_c plant_tex_table[] = { + { inv_mwin_naegi_pal, inv_mwin_naegi_tex }, + { inv_mwin_cnaegi_pal, inv_mwin_cnaegi_tex }, + { inv_mwin_seed_pal, inv_mwin_seed_tex }, + { inv_mwin_seed_pal, inv_mwin_seed_tex }, + { inv_mwin_seed_pal, inv_mwin_seed_tex }, + { inv_mwin_seed_pal, inv_mwin_seed_tex }, + { inv_mwin_seed_pal, inv_mwin_seed_tex }, + { inv_mwin_seed_pal, inv_mwin_seed_tex }, + { inv_mwin_seed_pal, inv_mwin_seed_tex }, + { inv_mwin_seed_pal, inv_mwin_seed_tex }, + { inv_mwin_seed_pal, inv_mwin_seed_tex }, + }; + // clang-format on + + // clang-format off + static mSM_inventory_icon_info_c minidisk_tex_table[1] = { + { inv_mwin_onpu_pal, inv_mwin_onpu_tex }, + }; + // clang-format on + + // clang-format off + static mSM_inventory_icon_info_c etc2_tex_table[] = { + { inv_mwin_nittki_pal, inv_mwin_nittki_tex }, + { inv_mwin_nittki_pal, inv_mwin_nittki_tex }, + { inv_mwin_nittki_pal, inv_mwin_nittki_tex }, + { inv_mwin_nittki_pal, inv_mwin_nittki_tex }, + { inv_mwin_nittki_pal, inv_mwin_nittki_tex }, + { inv_mwin_nittki_pal, inv_mwin_nittki_tex }, + { inv_mwin_nittki_pal, inv_mwin_nittki_tex }, + { inv_mwin_nittki_pal, inv_mwin_nittki_tex }, + { inv_mwin_nittki_pal, inv_mwin_nittki_tex }, + { inv_mwin_nittki_pal, inv_mwin_nittki_tex }, + { inv_mwin_nittki_pal, inv_mwin_nittki_tex }, + { inv_mwin_nittki_pal, inv_mwin_nittki_tex }, + { inv_mwin_nittki_pal, inv_mwin_nittki_tex }, + { inv_mwin_nittki_pal, inv_mwin_nittki_tex }, + { inv_mwin_nittki_pal, inv_mwin_nittki_tex }, + { inv_mwin_nittki_pal, inv_mwin_nittki_tex }, + }; + // clang-format on + + // clang-format off + static mSM_inventory_icon_info_c ticket_tex_table[] = { + { inv_mwin_1fukubiki_pal, inv_mwin_1biki1_tex }, + { inv_mwin_1fukubiki_pal, inv_mwin_1biki2_tex }, + { inv_mwin_1fukubiki_pal, inv_mwin_1biki3_tex }, + { inv_mwin_1fukubiki_pal, inv_mwin_1biki4_tex }, + { inv_mwin_1fukubiki_pal, inv_mwin_1biki5_tex }, + { inv_mwin_1fukubiki_pal, inv_mwin_1biki1_tex }, + { inv_mwin_1fukubiki_pal, inv_mwin_1biki1_tex }, + { inv_mwin_1fukubiki_pal, inv_mwin_1biki1_tex }, + { inv_mwin_2fukubiki_pal, inv_mwin_1biki1_tex }, + { inv_mwin_2fukubiki_pal, inv_mwin_1biki2_tex }, + { inv_mwin_2fukubiki_pal, inv_mwin_1biki3_tex }, + { inv_mwin_2fukubiki_pal, inv_mwin_1biki4_tex }, + { inv_mwin_2fukubiki_pal, inv_mwin_1biki5_tex }, + { inv_mwin_2fukubiki_pal, inv_mwin_1biki1_tex }, + { inv_mwin_2fukubiki_pal, inv_mwin_1biki1_tex }, + { inv_mwin_2fukubiki_pal, inv_mwin_1biki1_tex }, + { inv_mwin_3fukubiki_pal, inv_mwin_1biki1_tex }, + { inv_mwin_3fukubiki_pal, inv_mwin_1biki2_tex }, + { inv_mwin_3fukubiki_pal, inv_mwin_1biki3_tex }, + { inv_mwin_3fukubiki_pal, inv_mwin_1biki4_tex }, + { inv_mwin_3fukubiki_pal, inv_mwin_1biki5_tex }, + { inv_mwin_3fukubiki_pal, inv_mwin_1biki1_tex }, + { inv_mwin_3fukubiki_pal, inv_mwin_1biki1_tex }, + { inv_mwin_3fukubiki_pal, inv_mwin_1biki1_tex }, + { inv_mwin_4fukubiki_pal, inv_mwin_1biki1_tex }, + { inv_mwin_4fukubiki_pal, inv_mwin_1biki2_tex }, + { inv_mwin_4fukubiki_pal, inv_mwin_1biki3_tex }, + { inv_mwin_4fukubiki_pal, inv_mwin_1biki4_tex }, + { inv_mwin_4fukubiki_pal, inv_mwin_1biki5_tex }, + { inv_mwin_4fukubiki_pal, inv_mwin_1biki1_tex }, + { inv_mwin_4fukubiki_pal, inv_mwin_1biki1_tex }, + { inv_mwin_4fukubiki_pal, inv_mwin_1biki1_tex }, + { inv_mwin_5fukubiki_pal, inv_mwin_1biki1_tex }, + { inv_mwin_5fukubiki_pal, inv_mwin_1biki2_tex }, + { inv_mwin_5fukubiki_pal, inv_mwin_1biki3_tex }, + { inv_mwin_5fukubiki_pal, inv_mwin_1biki4_tex }, + { inv_mwin_5fukubiki_pal, inv_mwin_1biki5_tex }, + { inv_mwin_5fukubiki_pal, inv_mwin_1biki1_tex }, + { inv_mwin_5fukubiki_pal, inv_mwin_1biki1_tex }, + { inv_mwin_5fukubiki_pal, inv_mwin_1biki1_tex }, + { inv_mwin_6fukubiki_pal, inv_mwin_1biki1_tex }, + { inv_mwin_6fukubiki_pal, inv_mwin_1biki2_tex }, + { inv_mwin_6fukubiki_pal, inv_mwin_1biki3_tex }, + { inv_mwin_6fukubiki_pal, inv_mwin_1biki4_tex }, + { inv_mwin_6fukubiki_pal, inv_mwin_1biki5_tex }, + { inv_mwin_6fukubiki_pal, inv_mwin_1biki1_tex }, + { inv_mwin_6fukubiki_pal, inv_mwin_1biki1_tex }, + { inv_mwin_6fukubiki_pal, inv_mwin_1biki1_tex }, + { inv_mwin_7fukubiki_pal, inv_mwin_1biki1_tex }, + { inv_mwin_7fukubiki_pal, inv_mwin_1biki2_tex }, + { inv_mwin_7fukubiki_pal, inv_mwin_1biki3_tex }, + { inv_mwin_7fukubiki_pal, inv_mwin_1biki4_tex }, + { inv_mwin_7fukubiki_pal, inv_mwin_1biki5_tex }, + { inv_mwin_7fukubiki_pal, inv_mwin_1biki1_tex }, + { inv_mwin_7fukubiki_pal, inv_mwin_1biki1_tex }, + { inv_mwin_7fukubiki_pal, inv_mwin_1biki1_tex }, + { inv_mwin_8fukubiki_pal, inv_mwin_1biki1_tex }, + { inv_mwin_8fukubiki_pal, inv_mwin_1biki2_tex }, + { inv_mwin_8fukubiki_pal, inv_mwin_1biki3_tex }, + { inv_mwin_8fukubiki_pal, inv_mwin_1biki4_tex }, + { inv_mwin_8fukubiki_pal, inv_mwin_1biki5_tex }, + { inv_mwin_8fukubiki_pal, inv_mwin_1biki1_tex }, + { inv_mwin_8fukubiki_pal, inv_mwin_1biki1_tex }, + { inv_mwin_8fukubiki_pal, inv_mwin_1biki1_tex }, + { inv_mwin_9fukubiki_pal, inv_mwin_1biki1_tex }, + { inv_mwin_9fukubiki_pal, inv_mwin_1biki2_tex }, + { inv_mwin_9fukubiki_pal, inv_mwin_1biki3_tex }, + { inv_mwin_9fukubiki_pal, inv_mwin_1biki4_tex }, + { inv_mwin_9fukubiki_pal, inv_mwin_1biki5_tex }, + { inv_mwin_9fukubiki_pal, inv_mwin_1biki1_tex }, + { inv_mwin_9fukubiki_pal, inv_mwin_1biki1_tex }, + { inv_mwin_9fukubiki_pal, inv_mwin_1biki1_tex }, + { inv_mwin_10fukubiki_pal, inv_mwin_1biki1_tex }, + { inv_mwin_10fukubiki_pal, inv_mwin_1biki2_tex }, + { inv_mwin_10fukubiki_pal, inv_mwin_1biki3_tex }, + { inv_mwin_10fukubiki_pal, inv_mwin_1biki4_tex }, + { inv_mwin_10fukubiki_pal, inv_mwin_1biki5_tex }, + { inv_mwin_10fukubiki_pal, inv_mwin_1biki1_tex }, + { inv_mwin_10fukubiki_pal, inv_mwin_1biki1_tex }, + { inv_mwin_10fukubiki_pal, inv_mwin_1biki1_tex }, + { inv_mwin_11fukubiki_pal, inv_mwin_1biki1_tex }, + { inv_mwin_11fukubiki_pal, inv_mwin_1biki2_tex }, + { inv_mwin_11fukubiki_pal, inv_mwin_1biki3_tex }, + { inv_mwin_11fukubiki_pal, inv_mwin_1biki4_tex }, + { inv_mwin_11fukubiki_pal, inv_mwin_1biki5_tex }, + { inv_mwin_11fukubiki_pal, inv_mwin_1biki1_tex }, + { inv_mwin_11fukubiki_pal, inv_mwin_1biki1_tex }, + { inv_mwin_11fukubiki_pal, inv_mwin_1biki1_tex }, + { inv_mwin_12fukubiki_pal, inv_mwin_1biki1_tex }, + { inv_mwin_12fukubiki_pal, inv_mwin_1biki2_tex }, + { inv_mwin_12fukubiki_pal, inv_mwin_1biki3_tex }, + { inv_mwin_12fukubiki_pal, inv_mwin_1biki4_tex }, + { inv_mwin_12fukubiki_pal, inv_mwin_1biki5_tex }, + { inv_mwin_12fukubiki_pal, inv_mwin_1biki1_tex }, + { inv_mwin_12fukubiki_pal, inv_mwin_1biki1_tex }, + { inv_mwin_12fukubiki_pal, inv_mwin_1biki1_tex }, + }; + // clang-format on + + // clang-format off + static mSM_inventory_icon_info_c insect_tex_table[] = { + { inv_mwin_01monshiro_pal, inv_mwin_01monshiro_tex }, + { inv_mwin_02monki_pal, inv_mwin_02monki_tex }, + { inv_mwin_03kiageha_pal, inv_mwin_03kiageha_tex }, + { inv_mwin_04ohmurasaki_pal, inv_mwin_04ohmurasaki_tex }, + { inv_mwin_06minmin_pal, inv_mwin_06minmin_tex }, + { inv_mwin_07tukutuku_pal, inv_mwin_07tukutuku_tex }, + { inv_mwin_08higurashi_pal, inv_mwin_08higurashi_tex }, + { inv_mwin_05abura_pal, inv_mwin_05abura_tex }, + { inv_mwin_23hati_pal, inv_mwin_23hati_tex }, + { inv_mwin_10shiokara_pal, inv_mwin_10shiokara_tex }, + { inv_mwin_09akiakane_pal, inv_mwin_09akiakane_tex }, + { inv_mwin_11ginyanma_pal, inv_mwin_11ginyanma_tex }, + { inv_mwin_12oniyanma_pal, inv_mwin_12oniyanma_tex }, + { inv_mwin_20syouryou_pal, inv_mwin_20syouryou_tex }, + { inv_mwin_21tonosama_pal, inv_mwin_21tonosama_tex }, + { inv_mwin_13koorogi_pal, inv_mwin_13koorogi_tex }, + { inv_mwin_14kirigirisu_pal, inv_mwin_14kirigirisu_tex }, + { inv_mwin_16suzumushi_pal, inv_mwin_16suzumushi_tex }, + { inv_mwin_15matumushi_pal, inv_mwin_15matumushi_tex }, + { inv_mwin_25kanabun_pal, inv_mwin_25kanabun_tex }, + { inv_mwin_28kabuto_pal, inv_mwin_28kabuto_tex }, + { inv_mwin_29hirata_pal, inv_mwin_29hirata_tex }, + { inv_mwin_27tamamushi_pal, inv_mwin_27tamamushi_tex }, + { inv_mwin_26gomadara_pal, inv_mwin_26gomadara_tex }, + { inv_mwin_17tentou_pal, inv_mwin_17tentou_tex }, + { inv_mwin_18nanahoshi_pal, inv_mwin_18nanahoshi_tex }, + { inv_mwin_19kamakiri_pal, inv_mwin_19kamakiri_tex }, + { inv_mwin_24genji_pal, inv_mwin_24genji_tex }, + { inv_mwin_22danna_pal, inv_mwin_22danna_tex }, + { inv_mwin_30nokogiri_pal, inv_mwin_30nokogiri_tex }, + { inv_mwin_31miyama_pal, inv_mwin_31miyama_tex }, + { inv_mwin_32okuwa_pal, inv_mwin_32okuwa_tex }, + { inv_mwin_33maimai_pal, inv_mwin_33maimai_tex }, + { inv_mwin_34kera_pal, inv_mwin_34kera_tex }, + { inv_mwin_35amenbo_pal, inv_mwin_35amenbo_tex }, + { inv_mwin_36mino_pal, inv_mwin_36mino_tex }, + { inv_mwin_37dango_pal, inv_mwin_37dango_tex }, + { inv_mwin_38kumo_pal, inv_mwin_38kumo_tex }, + { inv_mwin_39ari_pal, inv_mwin_39ari_tex }, + { inv_mwin_40ka_pal, inv_mwin_40ka_tex }, + { inv_mwin_hitodama_pal, inv_mwin_hitodama1_tex }, + { inv_mwin_hitodama_pal, inv_mwin_hitodama2_tex }, + { inv_mwin_hitodama_pal, inv_mwin_hitodama3_tex }, + { inv_mwin_hitodama_pal, inv_mwin_hitodama4_tex }, + { inv_mwin_hitodama_pal, inv_mwin_hitodama5_tex }, + }; + // clang-format on + + // clang-format off + static mSM_inventory_icon_info_c hukuro_tex_table[] = { + { inv_mwin_fukubukuro_pal, inv_mwin_fukubukuro_tex }, + { inv_mwin_fukubukuro_pal, inv_mwin_fukubukuro_tex }, + { inv_mwin_fukubukuro2_pal, inv_mwin_fukubukuro_tex_rgb_ci4 }, + { inv_mwin_fukubukuro2_pal, inv_mwin_fukubukuro_tex_rgb_ci4 }, + { inv_mwin_fukubukuro2_tex_rgb_ci4_pal, inv_mwin_fukubukuro2_tex_rgb_ci4 }, + { inv_mwin_fukubukuro2_tex_rgb_ci4_pal, inv_mwin_fukubukuro2_tex_rgb_ci4 }, + }; + // clang-format on + + // clang-format off + static mSM_inventory_icon_info_c kabu_tex_table[] = { + { inv_mwin_cabu1_pal, inv_mwin_cabu1_tex }, + { inv_mwin_cabu1_pal, inv_mwin_cabu2_tex }, + { inv_mwin_cabu1_pal, inv_mwin_cabu3_tex }, + { inv_mwin_2cabu1_pal, inv_mwin_2cabu1_tex }, + }; + // clang-format on + + // clang-format off + static mSM_inventory_icon_info_c* item_tex_data_table[] = { + binsen_tex_table, + money_tex_table, + tool_tex_table, + fish_tex_table, + cloth_tex_table, + etc_tex_table, + carpet_tex_table, + wall_tex_table, + food_tex_table, + plant_tex_table, + minidisk_tex_table, + etc2_tex_table, + ticket_tex_table, + insect_tex_table, + hukuro_tex_table, + kabu_tex_table, + }; + // clang-format on + + mSM_inventory_icon_info_c* icon; + u16* palette; + rgba_t color; + int category = -1; + int alpha_flag = FALSE; + u8 l; + + if (scale < 0.05f) { + return; + } + + if (present_flag) { + if (anim_frame > 11) { + /* Start fading out */ + icon = &present_tex_data[11]; + if (anim_frame > 22) { + alpha_flag = TRUE; + } + } else { + icon = &present_tex_data[anim_frame]; + } + } else { + if (item >= HANIWA_START && item <= HANIWA_END) { + icon = &haniwa_tex_data; + } else if (item >= FTR_DINO_START && item <= FTR_DINO_END) { + icon = &fossil_tex_data; + } else if (mNT_check_unknown(item) == TRUE) { + icon = &unknown_tex_data; + } else if (ITEM_IS_FTR(item)) { + icon = &furniture_tex_data; + } else { + int groupNo = mSM_get_groupNo(item); + + category = ITEM_NAME_GET_CAT(item); + switch (category) { + case ITEM1_CAT_HUKUBUKURO: + icon = &item_tex_data_table[category][anim_frame]; + break; + case ITEM1_CAT_PAPER: + icon = &item_tex_data_table[category][1 + PAPER2STACK(item - ITM_PAPER_START)] - 1; + break; + case ITEM1_CAT_CLOTH: + case ITEM1_CAT_CARPET: + case ITEM1_CAT_WALL: + case ITEM1_CAT_MINIDISK: + case ITEM1_CAT_DUMMY: + icon = &item_tex_data_table[category][0]; + break; + default: + icon = &item_tex_data_table[category][groupNo]; + break; + } + } + } + + if (icon != NULL) { + if ((category == ITEM1_CAT_FISH || category == ITEM1_CAT_INSECT) && anim_frame != 0) { + /* Fish & insects have two back-to-back palettes for inventory & collection windows */ + palette = 16 + icon->pal; + } else { + palette = icon->pal; + } + + if (color_flag) { + if (alpha_flag) { + color.a = (int)(((48 - anim_frame) * 255) / 26); + } else { + color.a = 255; + } + + color.r = 255; + color.g = 255; + color.b = 255; + l = 255; + } else { + color.r = 100; + color.g = 115; + color.b = 160; + color.a = 255; + l = 100; + } + } + + if (icon != NULL) { + mSM_set_dl_item(graph, pos_x, pos_y, scale, icon, palette, l, &color, shadow_flag, mark_flag); + } +} + +enum { + mSM_MAIL_NORMAL, + mSM_MAIL_PRESENT, + mSM_MAIL_SEND, + mSM_MAIL_SEND_PRESENT, + mSM_MAIL_NORMAL2, + mSM_MAIL_PRESENT2, + + mSM_MAIL_NUM +}; + +extern u16 inv_mwin_mtegami_pal[]; +extern u8 inv_mwin_mtegami_tex[]; +extern u8 inv_mwin_pmtegami_tex[]; + +extern u16 inv_mwin_otegami_pal[]; +extern u8 inv_mwin_otegami_tex[]; +extern u8 inv_mwin_potegami_tex[]; + +extern u16 inv_mwin_mtegami2_pal[]; +extern u8 inv_mwin_mtegami2_tex[]; +extern u8 inv_mwin_pmtegami2_tex[]; + +extern Gfx inv_item_model[]; +extern Gfx inv_mark_model[]; + +static void mSM_draw_mail(GRAPH* graph, f32 pos_x, f32 pos_y, f32 scale, Mail_c* mail, int color_flag, int shadow_flag, + int mark_flag) { + static mSM_inventory_icon_info_c letter_tex_data_table[] = { + /* Letters */ + { inv_mwin_mtegami_pal, inv_mwin_mtegami_tex }, + { inv_mwin_mtegami_pal, inv_mwin_pmtegami_tex }, + + /* Send letters */ + { inv_mwin_otegami_pal, inv_mwin_otegami_tex }, + { inv_mwin_otegami_pal, inv_mwin_potegami_tex }, + + /* Opened? letters */ + { inv_mwin_mtegami2_pal, inv_mwin_mtegami2_tex }, + { inv_mwin_mtegami2_pal, inv_mwin_pmtegami2_tex }, + }; + + mSM_inventory_icon_info_c* icon; + int type; + + if (mMl_check_send_mail(mail)) { + type = mSM_MAIL_SEND; + } else if (mail->content.font == mMl_FONT_4 || mail->content.font == mMl_FONT_2) { + type = mSM_MAIL_NORMAL2; + } else { + type = mSM_MAIL_NORMAL; + } + + if (mail->present != EMPTY_NO) { + type++; + } + + icon = &letter_tex_data_table[type]; + Matrix_scale(16.0f, 16.0f, 1.0f, 0); + Matrix_translate(pos_x, pos_y, 140.0f, 1); + Matrix_scale(scale, scale, 1.0f, 1); + + OPEN_POLY_OPA_DISP(graph); + + gDPPipeSync(POLY_OPA_DISP++); + gSPMatrix(POLY_OPA_DISP++, _Matrix_to_Mtx_new(graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPSegment(POLY_OPA_DISP++, G_MWO_SEGMENT_9, icon->pal); + gSPSegment(POLY_OPA_DISP++, G_MWO_SEGMENT_A, icon->tex); + gDPSetAlphaCompare(POLY_OPA_DISP++, G_AC_THRESHOLD); + gDPSetBlendColor(POLY_OPA_DISP++, 255, 255, 255, 40); + + if (color_flag) { + gDPSetPrimColor(POLY_OPA_DISP++, 0, 255, 255, 255, 255, 255); + } else { + gDPSetPrimColor(POLY_OPA_DISP++, 0, 130, 255, 110, 105, 255); + } + + if (shadow_flag == FALSE) { + gDPSetCombineLERP(POLY_OPA_DISP++, TEXEL0, PRIMITIVE, PRIM_LOD_FRAC, PRIMITIVE, 0, 0, 0, TEXEL0, TEXEL0, + PRIMITIVE, PRIM_LOD_FRAC, PRIMITIVE, 0, 0, 0, TEXEL0); + } + + gSPDisplayList(POLY_OPA_DISP++, inv_item_model); + + if (mark_flag) { + f32 frame_per = (((f32)(gamePT->frame_counter % 40)) * (1.0f / 40.0f)) * 2.0f; + + if (frame_per > 1.0f) { + frame_per = 2.0f - frame_per; + } + + gDPPipeSync(POLY_OPA_DISP++); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 0, (int)(frame_per * 90.0f + 95.0f), 0, 255); + gDPSetEnvColor(POLY_OPA_DISP++, (int)(frame_per * 60.0f), (int)(frame_per * 45.0f + 210.0f), + (int)(frame_per * 60.0f), 255); + gSPDisplayList(POLY_OPA_DISP++, inv_mark_model); + } + + gDPPipeSync(POLY_OPA_DISP++); + gDPSetTextureLUT(POLY_OPA_DISP++, G_TT_RGBA16); + gDPSetAlphaCompare(POLY_OPA_DISP++, G_AC_NONE); + gDPSetBlendColor(POLY_OPA_DISP++, 255, 255, 255, 8); + + CLOSE_POLY_OPA_DISP(graph); +} + +extern void mSM_draw_original(Submenu* submenu, GRAPH* graph, f32 pos_x, f32 pos_y, f32 scale, mActor_name_t item, + int color_flag) { + if (ITEM_IS_RSVNWORG(item)) { + mNW_draw_original(submenu, graph, pos_x, pos_y, scale, item - RSV_NW_ORIGINAL0, color_flag); + } + + if (ITEM_IS_RSVCPORG(item)) { + mCO_draw_cporiginal(submenu, graph, pos_x, pos_y, scale, item - RSV_NW_ORIGINAL0, color_flag); + } + + if (ITEM_IS_RSVGBAORG(item)) { + mGB_draw_gba(submenu, graph, pos_x, pos_y, scale, item - RSV_GBAORIGINAL0, color_flag); + } +} + +static mSM_Ovl_dlftbl_c mSM_program_dlftbl[] = { + { + 0, + 0, + NULL, + NULL, + &mIV_inventory_ovl_construct, + &mIV_inventory_ovl_destruct, + &mIV_inventory_ovl_set_proc, + FALSE, + }, + { + 0, + 0, + NULL, + NULL, + &mIV_inventory_ovl_construct, + &mIV_inventory_ovl_destruct, + &mIV_inventory_ovl_set_proc, + FALSE, + }, + { + 0, + 0, + NULL, + NULL, + &mHB_hboard_ovl_construct, + &mHB_hboard_ovl_destruct, + &mHB_hboard_ovl_set_proc, + FALSE, + }, + { + 0, + 0, + NULL, + NULL, + &mTI_timeIn_ovl_construct, + &mTI_timeIn_ovl_destruct, + &mTI_timeIn_ovl_set_proc, + FALSE, + }, + { + 0, + 0, + NULL, + NULL, + &mLE_ledit_ovl_construct, + &mLE_ledit_ovl_destruct, + &mLE_ledit_ovl_set_proc, + FALSE, + }, + { + 0, + 0, + NULL, + NULL, + &mMP_map_ovl_construct, + &mMP_map_ovl_destruct, + &mMP_map_ovl_set_proc, + FALSE, + }, + { + 0, + 0, + NULL, + NULL, + &mNT_notice_ovl_construct, + &mNT_notice_ovl_destruct, + &mNT_notice_ovl_set_proc, + FALSE, + }, + { + 0, + 0, + NULL, + NULL, + &mRP_repay_ovl_construct, + &mRP_repay_ovl_destruct, + &mRP_repay_ovl_set_proc, + FALSE, + }, + { + 0, + 0, + NULL, + NULL, + &mMS_mscore_ovl_construct, + &mMS_mscore_ovl_destruct, + &mMS_mscore_ovl_set_proc, + FALSE, + }, + { + 0, + 0, + NULL, + NULL, + &mBR_birthday_ovl_construct, + &mBR_birthday_ovl_destruct, + &mBR_birthday_ovl_set_proc, + FALSE, + }, + { + 0, + 0, + NULL, + NULL, + &mED_editor_ovl_construct, + &mED_editor_ovl_destruct, + &mED_editor_ovl_set_proc, + FALSE, + }, + { + 0, + 0, + NULL, + NULL, + &mMB_mailbox_ovl_construct, + &mMB_mailbox_ovl_destruct, + &mMB_mailbox_ovl_set_proc, + FALSE, + }, + { + 0, + 0, + NULL, + NULL, + &mBD_board_ovl_construct, + &mBD_board_ovl_destruct, + &mBD_board_ovl_set_proc, + FALSE, + }, + { + 0, + 0, + NULL, + NULL, + &mAD_address_ovl_construct, + &mAD_address_ovl_destruct, + &mAD_address_ovl_set_proc, + FALSE, + }, + { + 0, + 0, + NULL, + NULL, + &mHW_haniwa_ovl_construct, + &mHW_haniwa_ovl_destruct, + &mHW_haniwa_ovl_set_proc, + FALSE, + }, + { + 0, + 0, + NULL, + NULL, + &mEE_editEndChk_ovl_construct, + &mEE_editEndChk_ovl_destruct, + &mEE_editEndChk_ovl_set_proc, + FALSE, + }, + { + 0, + 0, + NULL, + NULL, + &mWR_warning_ovl_construct, + &mWR_warning_ovl_destruct, + &mWR_warning_ovl_set_proc, + FALSE, + }, + { + 0, + 0, + NULL, + NULL, + &mCM_cpmail_ovl_construct, + &mCM_cpmail_ovl_destruct, + &mCM_cpmail_ovl_set_proc, + FALSE, + }, + { + 0, + 0, + NULL, + NULL, + &mCW_cpwarning_ovl_construct, + &mCW_cpwarning_ovl_destruct, + &mCW_cpwarning_ovl_set_proc, + FALSE, + }, + { + 0, + 0, + NULL, + NULL, + &mCE_cpedit_ovl_construct, + &mCE_cpedit_ovl_destruct, + &mCE_cpedit_ovl_set_proc, + FALSE, + }, + { + 0, + 0, + NULL, + NULL, + &mCL_catalog_ovl_construct, + &mCL_catalog_ovl_destruct, + &mCL_catalog_ovl_set_proc, + FALSE, + }, + { + 0, + 0, + NULL, + NULL, + &mMU_music_ovl_construct, + &mMU_music_ovl_destruct, + &mMU_music_ovl_set_proc, + FALSE, + }, + { + 0, + 0, + NULL, + NULL, + &mBN_bank_ovl_construct, + &mBN_bank_ovl_destruct, + &mBN_bank_ovl_set_proc, + FALSE, + }, + { + 0, + 0, + NULL, + NULL, + &mNW_needlework_ovl_construct, + &mNW_needlework_ovl_destruct, + &mNW_needlework_ovl_set_proc, + FALSE, + }, + { + 0, + 0, + NULL, + NULL, + &mCO_cporiginal_ovl_construct, + &mCO_cporiginal_ovl_destruct, + &mCO_cporiginal_ovl_set_proc, + FALSE, + }, + { + 0, + 0, + NULL, + NULL, + &mDE_design_ovl_construct, + &mDE_design_ovl_destruct, + &mDE_design_ovl_set_proc, + FALSE, + }, + { + 0, + 0, + NULL, + NULL, + &mGB_gba_ovl_construct, + &mGB_gba_ovl_destruct, + &mGB_gba_ovl_set_proc, + FALSE, + }, + { + 0, + 0, + NULL, + NULL, + &mDI_diary_ovl_construct, + &mDI_diary_ovl_destruct, + &mDI_diary_ovl_set_proc, + FALSE, + }, + { + 0, + 0, + NULL, + NULL, + &mCD_calendar_ovl_construct, + &mCD_calendar_ovl_destruct, + &mCD_calendar_ovl_set_proc, + FALSE, + }, + { + 0, + 0, + NULL, + NULL, + &mPM_passwordMake_ovl_construct, + &mPM_passwordMake_ovl_destruct, + &mPM_passwordMake_ovl_set_proc, + FALSE, + }, + { + 0, + 0, + NULL, + NULL, + &mPC_passwordChk_ovl_construct, + &mPC_passwordChk_ovl_destruct, + &mPC_passwordChk_ovl_set_proc, + FALSE, + }, +}; + +// clang-format off +static mSM_Ovl_dlftbl_c tag_program_dlftbl = { + 0, + 0, + NULL, + NULL, + &mTG_tag_ovl_construct, + &mTG_tag_ovl_destruct, + &mTG_tag_ovl_destruct, + FALSE, +}; +// clang-format on + +// clang-format off +static mSM_Ovl_dlftbl_c hand_program_dlftbl = { + 0, + 0, + NULL, + NULL, + &mHD_hand_ovl_construct, + &mHD_hand_ovl_destruct, + &mHD_hand_ovl_destruct, + FALSE, +}; +// clang-format on + +// clang-format off +static mSM_Ovl_dlftbl_c haniwa_program_dlftbl = { + 0, + 0, + NULL, + NULL, + &mHP_haniwaPortrait_ovl_construct, + &mHP_haniwaPortrait_ovl_destruct, + &mHP_haniwaPortrait_ovl_destruct, + FALSE, +}; +// clang-format on + +static void mSM_ovl_prog_seg(Submenu* submenu, mSM_Ovl_dlftbl_c* dlftbl) { + mSM_Segment_c* segment = &submenu->overlay->segment; + + if (dlftbl->in_ram_flag == TRUE) { + dlftbl->ct_proc(submenu); + } else { + mSM_OVL_CT_PROC ct_proc; + + dlftbl->seg_start = NULL; + dlftbl->seg_end = NULL; + submenu->next_overlay_address = (char*)ALIGN_NEXT((u32)dlftbl->seg_end - (u32)dlftbl->seg_start, 64); + ct_proc = dlftbl->ct_proc; + (*ct_proc)(submenu); + dlftbl->ct_proc = ct_proc; + dlftbl->in_ram_flag = TRUE; + segment->dlftbl_loaded_tbl[segment->dlftbl_loaded_num] = dlftbl; + segment->dlftbl_loaded_num++; + } +} + +static void mSM_set_other_seg(Submenu* submenu) { + static u8 flg_table[] = { + mSM_OVL_FLAG_NONE, + mSM_OVL_FLAG_USE_ITEM | mSM_OVL_FLAG_USE_TAG | mSM_OVL_FLAG_USE_HAND, + mSM_OVL_FLAG_USE_HANIWA_PORTRAIT, + mSM_OVL_FLAG_NONE, + mSM_OVL_FLAG_NONE, + mSM_OVL_FLAG_NONE, + mSM_OVL_FLAG_NONE, + mSM_OVL_FLAG_NONE, + mSM_OVL_FLAG_NONE, + mSM_OVL_FLAG_NONE, + mSM_OVL_FLAG_NONE, + mSM_OVL_FLAG_USE_ITEM | mSM_OVL_FLAG_USE_TAG | mSM_OVL_FLAG_USE_HAND, + mSM_OVL_FLAG_NONE, + mSM_OVL_FLAG_NONE, + mSM_OVL_FLAG_USE_ITEM | mSM_OVL_FLAG_USE_TAG | mSM_OVL_FLAG_USE_HAND | mSM_OVL_FLAG_USE_HANIWA_PORTRAIT, + mSM_OVL_FLAG_NONE, + mSM_OVL_FLAG_NONE, + mSM_OVL_FLAG_USE_ITEM | mSM_OVL_FLAG_USE_TAG | mSM_OVL_FLAG_USE_HAND, + mSM_OVL_FLAG_NONE, + mSM_OVL_FLAG_USE_TAG | mSM_OVL_FLAG_USE_HAND, + mSM_OVL_FLAG_USE_TAG | mSM_OVL_FLAG_USE_HAND, + mSM_OVL_FLAG_USE_ITEM | mSM_OVL_FLAG_USE_TAG | mSM_OVL_FLAG_USE_HAND, + mSM_OVL_FLAG_NONE, + mSM_OVL_FLAG_USE_TAG | mSM_OVL_FLAG_USE_HAND, + mSM_OVL_FLAG_NONE, + mSM_OVL_FLAG_NONE, + mSM_OVL_FLAG_NONE, + mSM_OVL_FLAG_NONE, + mSM_OVL_FLAG_NONE, + mSM_OVL_FLAG_NONE, + mSM_OVL_FLAG_NONE, + }; + + int flg = flg_table[submenu->current_menu_type]; + + if ((flg & mSM_OVL_FLAG_USE_TAG) != 0) { + mSM_ovl_prog_seg(submenu, &tag_program_dlftbl); + } + + if ((flg & mSM_OVL_FLAG_USE_HAND) != 0) { + mSM_ovl_prog_seg(submenu, &hand_program_dlftbl); + } + + if ((flg & mSM_OVL_FLAG_USE_HANIWA_PORTRAIT) != 0) { + mSM_ovl_prog_seg(submenu, &haniwa_program_dlftbl); + } +} + +static void mSM_set_before_menu_proc(Submenu* submenu) { + int type = submenu->menu_type; + mSM_Ovl_dlftbl_c* dlftbl = &mSM_program_dlftbl[type]; + mSM_MenuInfo_c* menu_info; + + dlftbl->set_proc(submenu); + submenu->current_menu_type = type; + menu_info = &submenu->overlay->menu_info[type]; + menu_info->next_menu_type = mSM_OVL_NONE; +} + +static void mSM_set_new_seg(Submenu* submenu) { + int type = submenu->menu_type; + + mSM_ovl_prog_seg(submenu, &mSM_program_dlftbl[type]); + submenu->current_menu_type = type; +} + +typedef struct submenu_ovl_start_data_s { + f32 pos_x; + f32 pos_y; + f32 speed_x; + f32 speed_y; +} mSM_ovl_start_data_c; + +static void mSM_set_new_start_data(Submenu* submenu) { + // clang-format off + static mSM_ovl_start_data_c data_table[] = { + { 0.0, 0.0, 0.0, 0.0, }, + { 300.0, 0.0, 75.0, 0.0, }, + { 0.0, 300.0, 0.0, 75.0, }, + { 0.0, 300.0, 0.0, 75.0, }, + { 0.0, 300.0, 0.0, 75.0, }, + { 0.0, 300.0, 0.0, 75.0, }, + { 0.0, 300.0, 0.0, 75.0, }, + { 0.0, 300.0, 0.0, 75.0, }, + { 0.0, 300.0, 0.0, 75.0, }, + { 0.0, 300.0, 0.0, 75.0, }, + { 0.0, -300.0, 0.0, 75.0, }, + { -300.0, 0.0, 75.0, 0.0, }, + { 0.0, 300.0, 0.0, 75.0, }, + { 0.0, 0.0, 0.0, 0.0, }, + { -300.0, 0.0, 75.0, 0.0, }, + { 0.0, -300.0, 0.0, 75.0, }, + { 0.0, 0.0, 0.0, 0.0, }, + { 300.0, 0.0, 75.0, 0.0, }, + { 0.0, 0.0, 0.0, 0.0, }, + { 0.0, 300.0, 0.0, 75.0, }, + { 300.0, 0.0, 75.0, 0.0, }, + { -300.0, 0.0, 75.0, 0.0, }, + { 0.0, 300.0, 0.0, 75.0, }, + { 300.0, 0.0, 75.0, 0.0, }, + { 300.0, 0.0, 75.0, 0.0, }, + { 0.0, 300.0, 0.0, 75.0, }, + { -300.0, 0.0, 75.0, 0.0, }, + { -300.0, 0.0, 75.0, 0.0, }, + { 0.0, 300.0, 0.0, 75.0, }, + { 0.0, 300.0, 0.0, 75.0, }, + { 0.0, 300.0, 0.0, 75.0, }, + }; + // clang-format on + int type = submenu->menu_type; + mSM_MenuInfo_c* menu = &submenu->overlay->menu_info[type]; + mSM_ovl_start_data_c* data = &data_table[type]; + + menu->menu_type = type; + menu->position[0] = data->pos_x; + menu->position[1] = data->pos_y; + menu->speed[0] = data->speed_x; + menu->speed[1] = data->speed_y; + menu->data0 = submenu->param0; + menu->data1 = submenu->param1; + menu->data2 = submenu->param2; + menu->data3 = submenu->param3; + menu->move_flag = FALSE; + + if (type == mSM_OVL_INVENTORY && submenu->param0 == mSM_IV_OPEN_14) { + menu->position[0] = -300.0f; + } + + if (type == mSM_OVL_NEEDLEWORK && submenu->param0 == 2) { + menu->position[0] = -300.0f; + } +} + +static void mSM_move_chg_base(mSM_MenuInfo_c* menu_info, int mv_dir) { + menu_info->proc_status = mSM_OVL_PROC_MOVE; + menu_info->move_drt = mv_dir; + + if ((mv_dir & 1) != 0) { + menu_info->next_proc_status = mSM_OVL_PROC_PLAY; + } else { + menu_info->next_proc_status = mSM_OVL_PROC_END; + } +} + +static void mSM_make_trigger_data(Submenu* submenu) { + static u32 add_trigger[] = { BUTTON_CRIGHT, BUTTON_CUP, BUTTON_CLEFT, BUTTON_CDOWN }; + int trigger = (getButton() & 0xF) | getTrigger(); + mSM_Control_c* control = &submenu->overlay->menu_control; + + if (gamePT->mcon.move_pR > 0.5f) { + u16 angle = gamePT->mcon.move_angle + DEG2SHORT_ANGLE2(45.0f); + + trigger |= add_trigger[angle / DEG2SHORT_ANGLE2(90.0f)]; + } + + if (trigger == control->last_trigger) { + if (control->repeat_timer > 0) { + control->repeat_timer--; + trigger = 0; + } else { + control->repeat_timer = 3; + } + } else { + control->last_trigger = trigger; + control->repeat_timer = 25; + } + + control->trigger = trigger; +} + +static void mSM_save_before_func(Submenu* submenu) { + Submenu_Overlay_c* ovl = submenu->overlay; + mSM_MenuInfo_c* menu_info = &ovl->menu_info[submenu->menu_type]; + mSM_MenuInfo_c* prev_info = &ovl->menu_info[submenu->current_menu_type]; + + menu_info->pre_menu_type = submenu->current_menu_type; + menu_info->pre_move_func = ovl->menu_control.menu_move_func; + menu_info->pre_draw_func = ovl->menu_control.menu_draw_func; + prev_info->next_menu_type = submenu->menu_type; +} + +static void mSM_set_proc(Submenu* submenu) { + mSM_save_before_func(submenu); + mSM_set_new_start_data(submenu); + mSM_set_new_seg(submenu); + mSM_set_other_seg(submenu); +} + +static void mSM_tex_move(Submenu* submenu) { + mSM_Control_c* control = &submenu->overlay->menu_control; + + control->texture_pos[0] += 0.3535f; + control->texture_pos[1] += 0.3535f; + + while (control->texture_pos[0] >= 1024.0f) { + control->texture_pos[0] -= 1024.0f; + } + + while (control->texture_pos[1] >= 1024.0f) { + control->texture_pos[1] -= 1024.0f; + } +} + +static void mSM_return_func(Submenu* submenu, mSM_MenuInfo_c* menu_info) { + if (menu_info->next_menu_type != mSM_OVL_NONE) { + mSM_MenuInfo_c* next_menu_info = &submenu->overlay->menu_info[menu_info->next_menu_type]; + mSM_MenuInfo_c* prev_menu_info = &submenu->overlay->menu_info[menu_info->pre_menu_type]; + + next_menu_info->pre_menu_type = menu_info->pre_menu_type; + next_menu_info->pre_move_func = menu_info->pre_move_func; + next_menu_info->pre_draw_func = menu_info->pre_draw_func; + prev_menu_info->next_menu_type = menu_info->next_menu_type; + } else { + mSM_Segment_c* segment = &submenu->overlay->segment; + + submenu->menu_type = menu_info->pre_menu_type; + if (submenu->menu_type == mSM_OVL_NONE) { + + while (segment->dlftbl_loaded_num != 0) { + segment->dlftbl_loaded_num--; + segment->dlftbl_loaded_tbl[segment->dlftbl_loaded_num]->dt_proc(submenu); + } + + submenu->process_status = mSM_PROCESS_END; + submenu->move_proc = (SUBMENU_PROC)&none_proc1; + submenu->current_menu_type = menu_info->pre_menu_type; + submenu->overlay->menu_control.menu_move_func = (SUBMENU_PROC)&none_proc1; + submenu->overlay->menu_control.menu_draw_func = (SUBMENU_GAME_PROC)&none_proc1; + emu64_refresh(); + } else { + mSM_set_before_menu_proc(submenu); + } + } + + menu_info->_2C = FALSE; + menu_info->pre_menu_type = mSM_OVL_NONE; + menu_info->next_menu_type = mSM_OVL_NONE; + menu_info->proc_status = mSM_OVL_PROC_MOVE; + menu_info->next_proc_status = mSM_OVL_PROC_MOVE; +} + +static int mSM_move_menu(f32* pos, f32* speed, s16* flag, f32 speed_mult, f32 p0, f32 p1, f32 p2) { + if (*flag == FALSE) { + if ((p2 * (*pos - p0)) >= 0.0f) { + *speed *= speed_mult; + if (*speed < 1.0f) { + *speed = 1.0f; + } else if (*speed > 75.0f) { + *speed = 75.0f; + } + } + + *flag = TRUE; + } else { + *flag = FALSE; + } + + *pos += *speed * p2 * 0.5f; + if ((p2 * (*pos - p1)) > 0.0f) { + *flag = FALSE; + *pos = p1; + return TRUE; + } + + return FALSE; +} + +typedef struct submenu_move_data_s { + f32 speed_mult; + f32 start_pos; + f32 target_pos; + f32 check_mult; +} mSM_move_data_c; + +static void mSM_move_Move(Submenu* submenu, mSM_MenuInfo_c* menu_info) { + static mSM_move_data_c move_data[] = { + { 2.0f, 0.0f, 300.0f, 1.0f }, + { 0.5f, 120.0f, 0.0f, -1.0f }, + }; + int move_dir = menu_info->move_drt; + int idx = move_dir >> 2; + mSM_move_data_c* data_p = &move_data[move_dir & 1]; + f32 dir; + int res; + + if ((move_dir & 2)) { + dir = -1.0f; + } else { + dir = 1.0f; + } + + res = mSM_move_menu(&menu_info->position[idx], &menu_info->speed[idx], &menu_info->move_flag, data_p->speed_mult, + data_p->start_pos * dir, data_p->target_pos * dir, data_p->check_mult * dir); + if (res == TRUE) { + menu_info->proc_status = menu_info->next_proc_status; + } + + /* Round down to nearest int */ + menu_info->position[idx] = (f32)(int)menu_info->position[idx]; +} + +static void mSM_move_End(Submenu* submenu, mSM_MenuInfo_c* menu_info) { + mSM_return_func(submenu, menu_info); +} + +static void mSM_menu_ovl_move(Submenu* submenu) { + mSM_Control_c* control = &submenu->overlay->menu_control; + + mSM_make_trigger_data(submenu); + if (submenu->menu_type != submenu->current_menu_type) { + mSM_set_proc(submenu); + } + + mSM_tex_move(submenu); + control->menu_move_func(submenu); +} + +static void mSM_menu_ovl_draw(Submenu* submenu, GAME* game) { + mSM_setup_view(submenu, game->graph, TRUE); + submenu->overlay->menu_control.menu_draw_func(submenu, game); +} + +extern void mSM_menu_ovl_init(Submenu* submenu) { + mSM_Control_c* control = &ovl_base.menu_control; + int i; + + submenu->overlay = &ovl_base; + bzero(&ovl_base, sizeof(Submenu_Overlay_c)); + + for (i = 0; i < mSM_OVL_NUM; i++) { + mSM_program_dlftbl[i].in_ram_flag = FALSE; + } + + tag_program_dlftbl.in_ram_flag = FALSE; + hand_program_dlftbl.in_ram_flag = FALSE; + haniwa_program_dlftbl.in_ram_flag = FALSE; + + emu64_refresh(); + submenu->current_menu_type = mSM_OVL_NONE; + control->menu_move_func = (SUBMENU_PROC)&none_proc1; + control->menu_draw_func = (SUBMENU_GAME_PROC)&none_proc1; + control->hand_move_func = (mSM_HAND_MOVE_FUNC)&none_proc1; + control->hand_draw_func = (mSM_HAND_DRAW_FUNC)&none_proc1; + control->tag_move_func = (mSM_TAG_MOVE_FUNC)&none_proc1; + control->tag_draw_func = (mSM_TAG_DRAW_FUNC)&none_proc1; + control->texture_movement_angle = DEG2SHORT_ANGLE2(45.0f); + + submenu->overlay->return_func_proc = &mSM_return_func; + submenu->overlay->move_Move_proc = &mSM_move_Move; + submenu->overlay->move_End_proc = &mSM_move_End; + submenu->overlay->move_chg_base_proc = &mSM_move_chg_base; + submenu->overlay->set_char_matrix_proc = &mSM_set_char_matrix; + submenu->overlay->cbuf_copy_proc = &mSM_cbuf_copy; + submenu->overlay->set_drawMode_proc = &mSM_set_drawMode; + submenu->overlay->draw_item_proc = &mSM_draw_item; + submenu->overlay->draw_mail_proc = &mSM_draw_mail; + submenu->overlay->setup_view_proc = &mSM_setup_view; + submenu->overlay->change_view_proc = &mSM_change_view; + submenu->overlay->unused_func_968 = NULL; + + mSM_set_proc(submenu); + submenu->move_proc = &mSM_menu_ovl_move; + submenu->draw_proc = &mSM_menu_ovl_draw; + mSM_menu_ovl_move(submenu); }