From 3d77b18b9a7a498a9c4d361ddd6dafd58b60d04c Mon Sep 17 00:00:00 2001 From: Cuyler36 Date: Wed, 17 Apr 2024 10:19:53 -0400 Subject: [PATCH] Implement & link m_catalog_ovl --- config/rel_slices.yml | 4 + include/m_catalog_ovl.h | 80 ++ include/m_catalog_ovl_h.h | 16 + include/m_hand_ovl.h | 26 + include/m_hand_ovl_h.h | 16 + include/m_submenu_ovl.h | 195 ++-- include/m_tag_ovl.h | 22 +- src/ac_furniture_data.c_inc | 1269 +---------------------- src/ac_furniture_profile_data.c_inc | 1268 +++++++++++++++++++++++ src/m_catalog_ovl.c | 1436 +++++++++++++++++++++++++++ src/m_catalog_ovl_data.c_inc | 1363 +++++++++++++++++++++++++ src/m_catalog_ovl_paper_data.c_inc | 636 ++++++++++++ 12 files changed, 4966 insertions(+), 1365 deletions(-) create mode 100644 include/m_catalog_ovl.h create mode 100644 include/m_catalog_ovl_h.h create mode 100644 include/m_hand_ovl.h create mode 100644 include/m_hand_ovl_h.h create mode 100644 src/ac_furniture_profile_data.c_inc create mode 100644 src/m_catalog_ovl.c create mode 100644 src/m_catalog_ovl_data.c_inc create mode 100644 src/m_catalog_ovl_paper_data.c_inc diff --git a/config/rel_slices.yml b/config/rel_slices.yml index ad3e9ef6..bc782823 100644 --- a/config/rel_slices.yml +++ b/config/rel_slices.yml @@ -897,6 +897,10 @@ m_birthday_ovl.c: .rodata: [0x8064AE90, 0x8064AEB8] .data: [0x806C7BE0, 0x806C7C60] .bss: [0x8133E0C0, 0x8133E0C8] +m_catalog_ovl.c: + .text: [0x805C9254, 0x805CC1F4] + .rodata: [0x8064AF90, 0x8064B090] + .data: [0x806C8AB0, 0x806CB838] m_editEndChk_ovl.c: .text: [0x805D7A64, 0x805D8498] .rodata: [0x8064B2C0, 0x8064B300] diff --git a/include/m_catalog_ovl.h b/include/m_catalog_ovl.h new file mode 100644 index 00000000..ad6c5916 --- /dev/null +++ b/include/m_catalog_ovl.h @@ -0,0 +1,80 @@ +#ifndef M_CATALOG_OVL_H +#define M_CATALOG_OVL_H + +#include "types.h" +#include "m_catalog_ovl_h.h" +#include "m_submenu_ovl.h" +#include "ac_furniture.h" +#include "m_item_name.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define mCL_MENU_ITEM_MAX 742 +#define mCL_MENU_PAGE_SIZE 7 +#define mCL_ITEM_DATA_NUM 2 + +enum { + mCL_MENU_FTR, + mCL_MENU_WALL, + mCL_MENU_CARPET, + mCL_MENU_CLOTH, + mCL_MENU_UMBRELLA, + mCL_MENU_PAPER, + mCL_MENU_HANIWA, + mCL_MENU_FOSSIL, + mCL_MENU_MUSIC, + + mCL_MENU_NUM +}; + +typedef struct catalog_item_s { + FTR_ACTOR ftr_actor; + u8* seg0; + u8* seg1; + u8 segment_data[0x4820]; + aFTR_PROFILE* profile; + int seg_ofs; + s16 gfx_type; + s16 timer; + u32 price; + f32 scale; + f32 pos_y; + mActor_name_t item_no; + u16 _509A; + u16 _509C; +} mCL_Item_c; + +typedef struct catalog_menu_s { + s16 item_count; + s16 top_idx; + s16 y_idx; + u8 completed_flag; + mActor_name_t item_list[mCL_MENU_ITEM_MAX]; + u8 item_name[mCL_MENU_PAGE_SIZE][mIN_ITEM_NAME_LEN]; +} mCL_Menu_c; + +struct catalog_ovl_s { + u8 item_data_idx; + u8 page_no; + s16 page_timer; + int _0004; + mCL_Item_c item_data[mCL_ITEM_DATA_NUM]; + mCL_Menu_c menu_data[mCL_MENU_NUM]; + u8 _D9AC[72]; + u8 page_order[mCL_MENU_NUM]; + u8 change_flag; + u8 counter; + u8 alpha; +}; + +extern void mCL_catalog_ovl_set_proc(Submenu* submenu); +extern void mCL_catalog_ovl_construct(Submenu* submenu); +extern void mCL_catalog_ovl_destruct(Submenu* submenu); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/include/m_catalog_ovl_h.h b/include/m_catalog_ovl_h.h new file mode 100644 index 00000000..7d94a58e --- /dev/null +++ b/include/m_catalog_ovl_h.h @@ -0,0 +1,16 @@ +#ifndef M_CATALOG_OVL_H_H +#define M_CATALOG_OVL_H_H + +#include "types.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct catalog_ovl_s mCL_Ovl_c; + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/include/m_hand_ovl.h b/include/m_hand_ovl.h new file mode 100644 index 00000000..67a51fa4 --- /dev/null +++ b/include/m_hand_ovl.h @@ -0,0 +1,26 @@ +#ifndef M_HAND_OVL_H +#define M_HAND_OVL_H + +#include "types.h" +#include "m_hand_ovl_h.h" +#include "m_submenu_ovl.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef void (*mHD_OVL_NOP_HAND_FUNC)(Submenu*); +typedef void (*mHD_OVL_SET_HAND_FUNC)(Submenu*); + +/* sizeof(struct hand_ovl_s) == 0x378 */ +struct hand_ovl_s { + u8 _000[0x370 - 0x000]; /* TODO */ + mHD_OVL_NOP_HAND_FUNC nop_hand_func; + mHD_OVL_SET_HAND_FUNC set_hand_func; +}; + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/include/m_hand_ovl_h.h b/include/m_hand_ovl_h.h new file mode 100644 index 00000000..b8ffc172 --- /dev/null +++ b/include/m_hand_ovl_h.h @@ -0,0 +1,16 @@ +#ifndef M_HAND_OVL_H_H +#define M_HAND_OVL_H_H + +#include "types.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct hand_ovl_s mHD_Ovl_c; + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/include/m_submenu_ovl.h b/include/m_submenu_ovl.h index a7de468a..15e28afd 100644 --- a/include/m_submenu_ovl.h +++ b/include/m_submenu_ovl.h @@ -25,69 +25,76 @@ #include "m_notice_ovl_h.h" #include "m_birthday_ovl_h.h" #include "m_tag_ovl_h.h" +#include "m_catalog_ovl_h.h" +#include "m_hand_ovl_h.h" #ifdef __cplusplus extern "C" { #endif enum { - mSM_OVL_PROC_MOVE, - mSM_OVL_PROC_PLAY, - mSM_OVL_PROC_WAIT, - mSM_OVL_PROC_OBEY, - mSM_OVL_PROC_END, + mSM_OVL_PROC_MOVE, + mSM_OVL_PROC_PLAY, + mSM_OVL_PROC_WAIT, + mSM_OVL_PROC_OBEY, + mSM_OVL_PROC_END, - mSM_OVL_PROC_NUM + mSM_OVL_PROC_NUM }; // TODO: fill this out typedef struct submenu_segment_s { - u8 _00[0x54]; + u8 _00[0x54]; } mSM_Segment_c; typedef struct submenu_menu_info_s { - int menu_type; - int proc_status; - - int pre_menu_type; - SUBMENU_PROC pre_move_func; - SUBMENU_GAME_PROC pre_draw_func; + int menu_type; + int proc_status; - int next_menu_type; + int pre_menu_type; + SUBMENU_PROC pre_move_func; + SUBMENU_GAME_PROC pre_draw_func; - f32 position[2]; - f32 speed[2]; + int next_menu_type; - char* _28; - int _2C; + f32 position[2]; + f32 speed[2]; - int next_proc_status; - s16 move_drt; - u16 _36; + char* _28; + int _2C; - int data0; - int data1; - void* data2; - int data3; + int next_proc_status; + s16 move_drt; + u16 _36; + + int data0; + int data1; + void* data2; + int data3; } mSM_MenuInfo_c; +typedef void (*mSM_HAND_MOVE_FUNC)(Submenu*); +typedef void (*mSM_HAND_DRAW_FUNC)(Submenu*, GAME*); +typedef void (*mSM_TAG_MOVE_FUNC)(Submenu*, mSM_MenuInfo_c*); +typedef void (*mSM_TAG_DRAW_FUNC)(Submenu*, GAME*, int); + typedef struct submenu_control_s { - SUBMENU_PROC menu_move_func; - SUBMENU_GAME_PROC menu_draw_func; + SUBMENU_PROC menu_move_func; + SUBMENU_GAME_PROC menu_draw_func; - void* hand_move_func; - void* hand_draw_func; + mSM_HAND_MOVE_FUNC hand_move_func; + mSM_HAND_DRAW_FUNC hand_draw_func; - void* tag_move_func; - void* tag_draw_func; + mSM_TAG_MOVE_FUNC tag_move_func; + mSM_TAG_DRAW_FUNC tag_draw_func; - int stick_release; - u32 trigger; - u32 last_trigger; - s16 repeat_timer; - s16 texture_movement_angle; - f32 texture_pos[2]; - int animation_flag; + int stick_release; + u32 trigger; + u32 last_trigger; + s16 repeat_timer; + s16 texture_movement_angle; + f32 texture_pos[2]; + int animation_flag; } mSM_Control_c; typedef void (*mSM_RETURN_FUNC_PROC)(Submenu*, mSM_MenuInfo_c*); @@ -106,62 +113,62 @@ typedef void (*mSM_MOVE_PROC)(Submenu*, mSM_MenuInfo_c*); /* sizeof(struct submenu_overlay_s) == 0xA04 */ struct submenu_overlay_s { - /* TODO: finish */ - /* 0x000 */ mSM_Segment_c segment; - /* 0x054 */ mSM_MenuInfo_c menu_info[mSM_OVL_NUM]; - /* 0x90C */ mSM_Control_c menu_control; - /* 0x940 */ mSM_RETURN_FUNC_PROC return_func_proc; - /* 0x944 */ mSM_MOVE_MOVE_PROC move_Move_proc; - /* 0x948 */ mSM_MOVE_END_PROC move_End_proc; - /* 0x94C */ mSM_MOVE_CHG_BASE_PROC move_chg_base_proc; - /* 0x950 */ mSM_SET_CHAR_MATRIX_PROC set_char_matrix_proc; - /* 0x954 */ mSM_CBUF_COPY_PROC cbuf_copy_proc; - /* 0x958 */ mSM_SET_DRAWMODE_PROC set_drawMode_proc; - /* 0x95C */ mSM_DRAW_ITEM_PROC draw_item_proc; - /* 0x960 */ mSM_DRAW_MAIL_PROC draw_mail_proc; - /* 0x964 */ mSM_SETUP_VIEW_PROC setup_view_proc; - /* 0x968 */ void* unused_func_968; - /* 0x96C */ mSM_CHANGE_VIEW_PROC change_view_proc; - /* 0x970 */ void* _970; - /* 0x974 */ void* _974; - /* 0x978 */ void* _978; - /* 0x97C */ mTG_Ovl_c* tag_ovl; - /* 0x980 */ void* _980; - /* 0x984 */ mHP_Ovl_c* hanwiaPortrait_ovl; - /* 0x988 */ void* inventory_ovl; - /* 0x98C */ mED_Ovl_c* editor_ovl; - /* 0x990 */ mBD_Ovl_c* board_ovl; - /* 0x994 */ mAD_Ovl_c* address_ovl; - /* 0x998 */ void* _998; - /* 0x99C */ void* _99C; - /* 0x9A0 */ mTI_Ovl_c* timeIn_ovl; - /* 0x9A4 */ mEE_Ovl_c* editEndChk_ovl; - /* 0x9A8 */ mWR_Ovl_c* warning_ovl; - /* 0x9AC */ mRP_Ovl_c* repay_ovl; - /* 0x9B0 */ void* _9B0; - /* 0x9B4 */ mMP_Overlay_c* map_ovl; - /* 0x9B8 */ mNT_Ovl_c* notice_ovl; - /* 0x9BC */ mBR_Ovl_c* birthday_ovl; - /* 0x9C0 */ void* _9C0; - /* 0x9C4 */ void* _9C4; - /* 0x9C8 */ void* _9C8; - /* 0x9CC */ void* _9CC; - /* 0x9D0 */ mMU_Overlay_c* music_ovl; - /* 0x9D4 */ mBN_Overlay_c* bank_ovl; - /* 0x9D8 */ void* _9D8; - /* 0x9DC */ void* _9DC; - /* 0x9E0 */ void* _9E0; - /* 0x9E4 */ void* _9E4; - /* 0x9E8 */ mDI_Ovl_c* diary_ovl; - /* 0x9EC */ void* _9EC; - /* 0x9F0 */ mPM_Ovl_c* passwordMake_ovl; - /* 0x9F4 */ mPC_Ovl_c* passwordChk_ovl; - /* 0x9F8 */ u8 hboard_exists; - /* 0x9F9 */ u8 le_exists; - /* 0x9FA */ u8 _9FA; - /* 0x9FB */ u8 _9FB; - /* 0x9FC */ int _9FC; - /* 0xA00 */ Mtx* projection_matrix; + /* TODO: finish */ + /* 0x000 */ mSM_Segment_c segment; + /* 0x054 */ mSM_MenuInfo_c menu_info[mSM_OVL_NUM]; + /* 0x90C */ mSM_Control_c menu_control; + /* 0x940 */ mSM_RETURN_FUNC_PROC return_func_proc; + /* 0x944 */ mSM_MOVE_MOVE_PROC move_Move_proc; + /* 0x948 */ mSM_MOVE_END_PROC move_End_proc; + /* 0x94C */ mSM_MOVE_CHG_BASE_PROC move_chg_base_proc; + /* 0x950 */ mSM_SET_CHAR_MATRIX_PROC set_char_matrix_proc; + /* 0x954 */ mSM_CBUF_COPY_PROC cbuf_copy_proc; + /* 0x958 */ mSM_SET_DRAWMODE_PROC set_drawMode_proc; + /* 0x95C */ mSM_DRAW_ITEM_PROC draw_item_proc; + /* 0x960 */ mSM_DRAW_MAIL_PROC draw_mail_proc; + /* 0x964 */ mSM_SETUP_VIEW_PROC setup_view_proc; + /* 0x968 */ void* unused_func_968; + /* 0x96C */ mSM_CHANGE_VIEW_PROC change_view_proc; + /* 0x970 */ void* _970; + /* 0x974 */ void* _974; + /* 0x978 */ void* _978; + /* 0x97C */ mTG_Ovl_c* tag_ovl; + /* 0x980 */ mHD_Ovl_c* hand_ovl; + /* 0x984 */ mHP_Ovl_c* hanwiaPortrait_ovl; + /* 0x988 */ void* inventory_ovl; + /* 0x98C */ mED_Ovl_c* editor_ovl; + /* 0x990 */ mBD_Ovl_c* board_ovl; + /* 0x994 */ mAD_Ovl_c* address_ovl; + /* 0x998 */ void* _998; + /* 0x99C */ void* _99C; + /* 0x9A0 */ mTI_Ovl_c* timeIn_ovl; + /* 0x9A4 */ mEE_Ovl_c* editEndChk_ovl; + /* 0x9A8 */ mWR_Ovl_c* warning_ovl; + /* 0x9AC */ mRP_Ovl_c* repay_ovl; + /* 0x9B0 */ void* _9B0; + /* 0x9B4 */ mMP_Overlay_c* map_ovl; + /* 0x9B8 */ mNT_Ovl_c* notice_ovl; + /* 0x9BC */ mBR_Ovl_c* birthday_ovl; + /* 0x9C0 */ void* _9C0; + /* 0x9C4 */ void* _9C4; + /* 0x9C8 */ void* _9C8; + /* 0x9CC */ mCL_Ovl_c* catalog_ovl; + /* 0x9D0 */ mMU_Overlay_c* music_ovl; + /* 0x9D4 */ mBN_Overlay_c* bank_ovl; + /* 0x9D8 */ void* _9D8; + /* 0x9DC */ void* _9DC; + /* 0x9E0 */ void* _9E0; + /* 0x9E4 */ void* _9E4; + /* 0x9E8 */ mDI_Ovl_c* diary_ovl; + /* 0x9EC */ void* _9EC; + /* 0x9F0 */ mPM_Ovl_c* passwordMake_ovl; + /* 0x9F4 */ mPC_Ovl_c* passwordChk_ovl; + /* 0x9F8 */ u8 hboard_exists; + /* 0x9F9 */ u8 le_exists; + /* 0x9FA */ u8 _9FA; + /* 0x9FB */ u8 _9FB; + /* 0x9FC */ int _9FC; + /* 0xA00 */ Mtx* projection_matrix; }; extern void mSM_menu_ovl_init(Submenu* submenu); diff --git a/include/m_tag_ovl.h b/include/m_tag_ovl.h index 477e9b1f..1fd216de 100644 --- a/include/m_tag_ovl.h +++ b/include/m_tag_ovl.h @@ -9,13 +9,29 @@ extern "C" { #endif +#define mTG_TAG_NUM 4 + typedef void (*mTG_INIT_TAG_DATA_ITEM_WIN_PROC)(Submenu*); +typedef void (*mTG_CHG_TAG_FUNC_PROC)(Submenu*, int, int, int, f32, f32); + +/* sizeof(mTG_tag_c) == 0xB4 */ +typedef struct tag_s { + u8 type; + u8 _01[0x40 - 0x01]; + int _40; + u8 _44[0xB4 - 0x44]; +} mTG_tag_c; /* TODO */ struct tag_ovl_s { - /* 0x000 */ u8 _000[0x2E0 - 0x000]; - /* 0x2E0 */ mTG_INIT_TAG_DATA_ITEM_WIN_PROC init_tag_data_item_win_proc; - /* 0x2E4 */ u8 _2E4[0x3C4 - 0x2E4]; + /* 0x000 */ int sel_tag_idx; + /* 0x004 */ int ret_tag_idx; + /* 0x008 */ mTG_tag_c tags[mTG_TAG_NUM]; + /* 0x2D8 */ void* _2D8; + /* 0x2DC */ void* _2DC; + /* 0x2E0 */ mTG_INIT_TAG_DATA_ITEM_WIN_PROC init_tag_data_item_win_proc; + /* 0x2E4 */ mTG_CHG_TAG_FUNC_PROC chg_tag_func_proc; + /* 0x2E8 */ u8 _2E8[0x3C4 - 0x2E8]; }; #ifdef __cplusplus diff --git a/src/ac_furniture_data.c_inc b/src/ac_furniture_data.c_inc index a905e8e2..bebf2289 100644 --- a/src/ac_furniture_data.c_inc +++ b/src/ac_furniture_data.c_inc @@ -15,1274 +15,7 @@ static aFTR_size_info_c* aMR_furniture_size_table[] = { &l_size_typeB_90, &l_size_typeB_180, &l_size_typeB_270, &l_size_typeB_0, &l_size_typeA, &l_size_typeC, }; -static aFTR_PROFILE* furniture_quality[] = { - &iam_sum_hal_chest02, - &iam_sum_clchest03, - &iam_sum_blue_bureau01, - &iam_kob_locker1, - &iam_sum_x_chest01, - &iam_sum_whi_chest02, - &iam_sum_ratan_chest02, - &iam_sum_log_chest02, - &iam_sum_liccachest, - &iam_sum_gre_chest02, - &iam_sum_fruitchest03, - &iam_sum_cont_chest02, - &iam_sum_blue_cab01, - &iam_sum_bla_chest03, - &iam_sum_asi_chest03, - &iam_sum_x_chest02, - &iam_sum_whi_chest01, - &iam_sum_ratan_chest01, - &iam_sum_log_chest01, - &iam_sum_liccalowchest, - &iam_sum_hal_chest03, - &iam_sum_gre_chest03, - &iam_sum_fruitchest01, - &iam_sum_cont_chest03, - &iam_sum_classicchest01, - &iam_sum_blue_lowchest01, - &iam_sum_bla_chest01, - &iam_sum_asi_chest02, - &iam_nog_tri_chest01, - &iam_nog_tri_chest02, - &iam_nog_tri_chest03, - &iam_dummy, - &iam_dummy, - &iam_dummy, - &iam_nog_fan01, - &iam_dummy, - &iam_dummy, - &iam_dummy, - &iam_dummy, - &iam_dummy, - &iam_dummy, - &iam_ari_isu01, - &iam_ari_table01, - &iam_ari_reizou01, - &iam_dummy, - &iam_dummy, - &iam_sum_sofe01, - &iam_sum_sofe02, - &iam_dummy, - &iam_ari_kitchen01, - &iam_sum_sofe03, - &iam_dummy, - &iam_dummy, - &iam_dummy, - &iam_sum_guitar01, - &iam_sum_guitar02, - &iam_sum_guitar03, - &iam_sum_doll01, - &iam_sum_doll02, - &iam_sum_doll03, - &iam_sum_doll04, - &iam_sum_classiccabinet01, - &iam_sum_classicchair01, - &iam_sum_classicchest02, - &iam_sum_classictable01, - &iam_sum_classicwardrope01, - &iam_sum_clchair02, - &iam_sum_cupboard01, - &iam_sum_desk01, - &iam_sum_doll05, - &iam_sum_doll06, - &iam_sum_doll07, - &iam_sum_doll08, - &iam_sum_doll09, - &iam_sum_doll10, - &iam_sum_globe01, - &iam_sum_kitchair01, - &iam_sum_kittable01, - &iam_sum_tv01, - &iam_sum_totemp01, - &iam_sum_totemp02, - &iam_sum_totemp03, - &iam_sum_totemp04, - &iam_sum_taiko01, - &iam_sum_stove01, - &iam_sum_stereo01, - &iam_sum_ratan_isu01, - &iam_sum_oldsofa01, - &iam_sum_liccatable, - &iam_sum_liccasofa, - &iam_sum_liccapiano, - &iam_sum_liccalanp, - &iam_sum_liccakitchen, - &iam_sum_liccachair, - &iam_sum_liccabed, - &iam_sum_oldclk01, - &iam_sum_ratan_bed01, - &iam_sum_golfbag01, - &iam_sum_golfbag02, - &iam_sum_golfbag03, - &iam_sum_bookcht01, - &iam_sum_chair01, - &iam_sum_cont_sofa01, - &iam_sum_cont_sofa02, - &iam_sum_cont_table01, - &iam_sum_cont_cab01, - &iam_sum_cont_chest01, - &iam_sum_cont_chair01, - &iam_sum_cont_bed01, - &iam_sum_cont_table02, - &iam_sum_comp01, - &iam_kob_jimudesk, - &iam_kob_mastersword, - &iam_kob_ncube, - &iam_sum_tekin01, - &iam_sum_biwa01, - &iam_sum_conga01, - &iam_sum_shoukaki, - &iam_sum_col_chair01, - &iam_sum_col_chair02, - &iam_sum_col_chair03, - &iam_sum_conpo01, - &iam_kob_pipeisu, - &iam_sum_liccamirror, - &iam_sum_pet01, - &iam_sum_timpani01, - &iam_dummy, - &iam_sum_bdcake01, - &iam_dummy, - &iam_dummy, - &iam_dummy, - &iam_sum_sabo01, - &iam_sum_sabo02, - &iam_sum_clbed02, - &iam_sum_tv02, - &iam_sum_liccalowtable, - &iam_dummy, - &iam_dummy, - &iam_sum_touro01, - &iam_sum_touro02, - &iam_sum_touro03, - &iam_kob_jimuisu, - &iam_kob_getabako1, - &iam_kob_getabako2, - &iam_dummy, - &iam_dummy, - &iam_dummy, - &iam_kob_rika_desk, - &iam_dummy, - &iam_sum_touro04, - &iam_sum_taru01, - &iam_sum_taru02, - &iam_kob_tobibako, - &iam_kon_tukue, - &iam_sum_mezaclock, - &iam_sum_poptable01, - &iam_sum_poptable02, - &iam_sum_poptable03, - &iam_kon_tubo, - &iam_sum_popchair01, - &iam_sum_popchair02, - &iam_sum_popchair03, - &iam_sum_suberi01, - &iam_sum_wc01, - &iam_sum_wc02, - &iam_tak_table02, - &iam_tak_isu03, - &iam_kon_tubo2, - &iam_kon_tubo3, - &iam_sum_misin01, - &iam_sum_billiads, - &iam_sum_art01, - &iam_ike_art_ang, - &iam_ike_art_sya, - &iam_sum_art04, - &iam_sum_art05, - &iam_sum_art06, - &iam_ike_art_fel, - &iam_sum_art08, - &iam_sum_art09, - &iam_sum_art10, - &iam_sum_art11, - &iam_sum_art12, - &iam_sum_art13, - &iam_sum_art14, - &iam_sum_art15, - &iam_sum_fruitbed01, - &iam_sum_fruitchair01, - &iam_dummy, - &iam_sum_fruittable01, - &iam_sum_fruittv01, - &iam_sum_takkyu, - &iam_sum_harp, - &iam_sum_log_hatoclk, - &iam_sum_kisha, - &iam_sum_mizunomi, - &iam_sum_okiagari01, - &iam_dummy, - &iam_sum_slot, - &iam_sum_asi_chair01, - &iam_sum_asi_chair02, - &iam_sum_asi_chest01, - &iam_sum_asi_lanp01, - &iam_sum_pl_caladium01, - &iam_sum_pl_shuroci, - &iam_sum_asi_screen01, - &iam_sum_asi_table01, - &iam_sum_asi_taiko, - &iam_sum_bla_bed01, - &iam_dummy, - &iam_sum_bla_chest02, - &iam_sum_bla_desk01, - &iam_sum_bla_sofa02, - &iam_sum_bla_table01, - &iam_sum_blue_bed01, - &iam_sum_blue_bench01, - &iam_sum_blue_chair01, - &iam_sum_blue_chest01, - &iam_sum_blue_chest02, - &iam_sum_blue_table01, - &iam_sum_gre_bed01, - &iam_sum_gre_chair01, - &iam_sum_gre_chair02, - &iam_sum_gre_chest01, - &iam_sum_gre_counter01, - &iam_sum_gre_lanp01, - &iam_sum_gre_table01, - &iam_sum_log_bed01, - &iam_sum_log_chair01, - &iam_sum_log_chair02, - &iam_sum_log_chest03, - &iam_sum_log_table01, - &iam_sum_pl_aloe01, - &iam_sum_pl_ananas, - &iam_sum_pl_cocos, - &iam_sum_pl_compacta, - &iam_sum_pl_dracaena, - &iam_sum_pl_gomunoki, - &iam_sum_pl_pothos, - &iam_sum_pl_yamayasi, - &iam_sum_fruittable02, - &iam_sum_fruitchair02, - &iam_sum_pl_benjyami, - &iam_sum_pl_draca02, - &iam_sum_pl_kuroton, - &iam_sum_pl_pakila, - &iam_sum_pl_hirasabo, - &iam_tak_metro, - &iam_kon_sisiodosi, - &iam_sum_bon_matu01, - &iam_sum_bon_matu02, - &iam_tak_barber, - &iam_sum_bon_matu03, - &iam_sum_bon_ume, - &iam_dummy, - &iam_dummy, - &iam_dummy, - &iam_sum_bon_boke, - &iam_sum_bon_satuki, - &iam_sum_bon_sanshu, - &iam_kon_cracker, - &iam_tak_cone01, - &iam_dummy, - &iam_tak_cone03, - &iam_dummy, - &iam_sum_bon_momiji, - &iam_sum_bon_pira, - &iam_sum_bon_turu, - &iam_dummy, - &iam_dummy, - &iam_dummy, - &iam_dummy, - &iam_kon_jihanki02, - &iam_tak_hole01, - &iam_kon_jihanki03, - &iam_dummy, - &iam_tak_drum02, - &iam_dummy, - &iam_dummy, - &iam_tak_tekkin, - &iam_dummy, - &iam_dummy, - &iam_sum_fruitchair03, - &iam_sum_fruitchair04, - &iam_sum_fruittable03, - &iam_dummy, - &iam_kon_gomi03, - &iam_kon_gomi04, - &iam_sum_viola01, - &iam_sum_bass01, - &iam_sum_cello01, - &iam_sum_piano01, - &iam_dummy, - &iam_tak_neko, - &iam_dummy, - &iam_sum_hal_pkin, - &iam_dummy, - &iam_tak_yaji, - &iam_kon_isi01, - &iam_kon_isi02, - &iam_dummy, - &iam_dummy, - &iam_dummy, - &iam_dummy, - &iam_sum_hal_bed01, - &iam_sum_hal_box01, - &iam_sum_hal_chair01, - &iam_dummy, - &iam_sum_hal_chest01, - &iam_sum_hal_sofa01, - &iam_sum_hal_table01, - &iam_tak_apollo1, - &iam_tak_eisei, - &iam_kon_isi03, - &iam_kon_isi04, - &iam_kon_isi05, - &iam_tak_ufo, - &iam_kon_isi06, - &iam_kon_pound, - &iam_tak_rocket1, - &iam_tak_astro, - &iam_sum_hal_clk01, - &iam_sum_hal_lanp01, - &iam_sum_asi_bed01, - &iam_sum_asi_table02, - &iam_tak_asteroid1, - &iam_sum_ratan_lanp, - &iam_sum_ratan_table01, - &iam_dummy, - &iam_kon_taiju, - &iam_dummy, - &iam_dummy, - &iam_sum_ratan_screen, - &iam_sum_ratan_mirror, - &iam_sum_ratan_isu02, - &iam_sum_ratan_chest03, - &iam_tak_arwing, - &iam_tak_mooncar, - &iam_dummy, - &iam_dummy, - &iam_dummy, - &iam_sum_blue_clk, - &iam_tak_moti, - &iam_sum_hal_mirror01, - &iam_sum_gre_desk01, - &iam_dummy, - &iam_sum_bla_chair02, - &iam_sum_bla_table02, - &iam_tak_station, - &iam_dummy, - &iam_sum_log_chair03, - &iam_sum_whi_bed01, - &iam_tak_shuttle, - &iam_sum_whi_mirror, - &iam_sum_whi_sofa01, - &iam_sum_whi_lanp, - &iam_sum_log_table02, - &iam_dummy, - &iam_dummy, - &iam_sum_uwa_cup01, - &iam_sum_uwa_poto01, - &iam_sum_uwa_vase01, - &iam_sum_uwa_vase02, - &iam_sum_uwa_vase03, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_hnw_common, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_fmanekin, - &iam_myfmanekin, - &iam_myfmanekin, - &iam_myfmanekin, - &iam_myfmanekin, - &iam_myfmanekin, - &iam_myfmanekin, - &iam_myfmanekin, - &iam_myfmanekin, - &iam_sum_monshiro, - &iam_sum_monki, - &iam_sum_kiageha, - &iam_sum_ohmurasaki, - &iam_sum_minmin, - &iam_sum_tukutuku, - &iam_sum_higurashi, - &iam_sum_abura, - &iam_sum_hachi, - &iam_sum_shiokara, - &iam_sum_akiakane, - &iam_sum_ginyanma, - &iam_sum_oniyanma, - &iam_sum_syouryou, - &iam_sum_tonosama, - &iam_sum_koorogi, - &iam_sum_kirigirisu, - &iam_sum_suzumushi, - &iam_sum_matumushi, - &iam_sum_kanabun, - &iam_sum_kabuto, - &iam_sum_hirata, - &iam_sum_tamamushi, - &iam_sum_gomadara, - &iam_sum_tentou, - &iam_sum_nanahoshi, - &iam_sum_kamakiri, - &iam_sum_genji, - &iam_sum_danna, - &iam_sum_nokogiri, - &iam_sum_miyama, - &iam_sum_okuwa, - &iam_nog_maimai, - &iam_nog_kera, - &iam_nog_amenbo, - &iam_nog_mino, - &iam_nog_dango, - &iam_nog_kumo, - &iam_nog_ari, - &iam_nog_ka, - &iam_sum_funa, - &iam_sum_hera, - &iam_sum_koi, - &iam_sum_nisiki, - &iam_sum_namazu, - &iam_sum_bass, - &iam_sum_bassm, - &iam_sum_bassl, - &iam_sum_gill, - &iam_sum_oonamazu, - &iam_sum_raigyo, - &iam_sum_nigoi, - &iam_sum_ugui, - &iam_sum_oikawa, - &iam_sum_tanago, - &iam_sum_dojyo, - &iam_sum_wakasagi, - &iam_sum_ayu, - &iam_sum_yamame, - &iam_sum_iwana, - &iam_sum_niji, - &iam_sum_ito, - &iam_sum_sake, - &iam_sum_kingyo, - &iam_sum_pirania, - &iam_sum_aroana, - &iam_sum_unagi, - &iam_sum_donko, - &iam_sum_angel, - &iam_sum_gupi, - &iam_sum_demekin, - &iam_sum_kaseki, - &iam_nog_zarigani, - &iam_nog_kaeru, - &iam_nog_medaka, - &iam_nog_kurage, - &iam_nog_suzuki, - &iam_nog_tai, - &iam_nog_isidai, - &iam_nog_piraluku, - &iam_fumbrella, - &iam_fumbrella, - &iam_fumbrella, - &iam_fumbrella, - &iam_fumbrella, - &iam_fumbrella, - &iam_fumbrella, - &iam_fumbrella, - &iam_fumbrella, - &iam_fumbrella, - &iam_fumbrella, - &iam_fumbrella, - &iam_fumbrella, - &iam_fumbrella, - &iam_fumbrella, - &iam_fumbrella, - &iam_fumbrella, - &iam_fumbrella, - &iam_fumbrella, - &iam_fumbrella, - &iam_fumbrella, - &iam_fumbrella, - &iam_fumbrella, - &iam_fumbrella, - &iam_fumbrella, - &iam_fumbrella, - &iam_fumbrella, - &iam_fumbrella, - &iam_fumbrella, - &iam_fumbrella, - &iam_fumbrella, - &iam_fumbrella, - &iam_myfumbrella, - &iam_myfumbrella, - &iam_myfumbrella, - &iam_myfumbrella, - &iam_myfumbrella, - &iam_myfumbrella, - &iam_myfumbrella, - &iam_myfumbrella, - &iam_famicom_common, - &iam_famicom_common, - &iam_famicom_common, - &iam_famicom_common, - &iam_famicom_common, - &iam_famicom_common, - &iam_famicom_common, - &iam_famicom_common, - &iam_famicom_common, - &iam_famicom_common, - &iam_famicom_common, - &iam_famicom_common, - &iam_famicom_common, - &iam_famicom_common, - &iam_famicom_common, - &iam_famicom_common, - &iam_famicom_common, - &iam_famicom_common, - &iam_famicom_common, - &iam_kob_disksystem8, - &iam_sum_chikuon01, - &iam_sum_chikuon02, - &iam_sum_jukebox, - &iam_sum_radio01, - &iam_sum_radio02, - &iam_sum_conpo02, - &iam_sum_stereo02, - &iam_sum_lv_stereo, - &iam_sum_x_lanp, - &iam_sum_x_chair01, - &iam_sum_x_chest03, - &iam_sum_x_sofa01, - &iam_sum_x_bed01, - &iam_sum_x_clk, - &iam_sum_x_table01, - &iam_sum_x_piano, - &iam_sum_doll11, - &iam_sum_roboconpo, - &iam_sum_saiconpo, - &iam_sum_fruitclk, - &iam_sum_roboclk, - &iam_kon_ameclock, - &iam_kon_atqclock, - &iam_sum_reco01, - &iam_sum_casse01, - &iam_sum_md01, - &iam_kon_grclock, - &iam_kon_waclock, - &iam_kon_redclock, - &iam_kon_blueclock, - &iam_kon_mimiclock, - &iam_dummy, - &iam_dummy, - &iam_kon_musya, - &iam_dummy, - &iam_dummy, - &iam_kon_xtree02, - &iam_nog_rookW, - &iam_nog_rookB, - &iam_nog_queenW, - &iam_nog_queenB, - &iam_nog_bishopW, - &iam_nog_bishopB, - &iam_nog_kingW, - &iam_nog_kingB, - &iam_nog_knightW, - &iam_nog_knightB, - &iam_nog_pawnW, - &iam_nog_pawnB, - &iam_nog_xtree, - &iam_nog_tri_clock01, - &iam_nog_tri_bed01, - &iam_nog_tri_table01, - &iam_nog_tri_sofa01, - &iam_nog_tri_audio01, - &iam_nog_tri_chair01, - &iam_nog_tri_rack01, - &iam_dummy, - &iam_dummy, - &iam_sum_kokuban, - &iam_sum_baketu, - &iam_din_trikera_head, - &iam_din_trikera_tail, - &iam_din_trikera_body, - &iam_din_trex_head, - &iam_din_trex_tail, - &iam_din_trex_body, - &iam_din_bront_head, - &iam_din_bront_tail, - &iam_din_bront_body, - &iam_din_stego_head, - &iam_din_stego_tail, - &iam_din_stego_body, - &iam_din_ptera_head, - &iam_din_ptera_Rwing, - &iam_din_ptera_Lwing, - &iam_din_hutaba_head, - &iam_din_hutaba_neck, - &iam_din_hutaba_body, - &iam_din_mammoth_head, - &iam_din_mammoth_body, - &iam_din_amber, - &iam_din_stump, - &iam_din_ammonite, - &iam_din_egg, - &iam_din_trilobite, - &iam_sum_bla_lanp, - &iam_kon_snowfreezer, - &iam_kon_snowtable, - &iam_kon_snowbed, - &iam_tak_snowisu, - &iam_tak_snowlamp, - &iam_kon_snowsofa, - &iam_kon_snowtv, - &iam_kon_snowtansu, - &iam_kon_snowbox, - &iam_kon_snowclock, - &iam_din_trikera_dummy, - &iam_din_trex_dummy, - &iam_din_bront_dummy, - &iam_din_ptera_dummy, - &iam_din_hutaba_dummy, - &iam_din_mammoth_dummy, - &iam_din_stego_dummyA, - &iam_din_stego_dummyB, - &iam_din_dummy, - &iam_tak_syogi, - &iam_ike_jny_makada01, - &iam_dummy, - &iam_ike_pst_pig01, - &iam_ike_pst_tesyu01, - &iam_ike_jny_afmen01, - &iam_ike_jny_rosia01, - &iam_hayakawa_famicom, - &iam_ike_jny_botle01, - &iam_ike_jny_hariko01, - &iam_ike_jny_moai01, - &iam_radio_test, - &iam_ike_jny_gojyu01, - &iam_ike_jny_kibori01, - &iam_ike_jny_truth01, - &iam_ike_jny_sirser01, - &iam_ike_jny_pisa01, - &iam_tak_lion, - &iam_ike_jny_syon01, - &iam_ike_jny_tower01, - &iam_nog_balloon_common, - &iam_nog_balloon_common, - &iam_nog_balloon_common, - &iam_nog_balloon_common, - &iam_nog_balloon_common, - &iam_nog_balloon_common, - &iam_nog_balloon_common, - &iam_nog_balloon_common, - &iam_tak_megami, - &iam_ike_jny_gate01, - &iam_tak_money, - &iam_ike_jny_ningyo01, - &iam_nog_yubin, - &iam_nog_myhome2, - &iam_nog_myhome4, - &iam_nog_koban, - &iam_nog_museum, - &iam_tak_yoroi, - &iam_dummy, - &iam_dummy, - &iam_dummy, - &iam_ike_k_otome01, - &iam_nog_yamishop, - &iam_nog_uranai, - &iam_ike_jny_sirser201, - &iam_ike_k_tanabata01, - &iam_dummy, - &iam_dummy, - &iam_nog_shop1, - &iam_ike_jny_houi01, - &iam_dummy, - &iam_dummy, - &iam_tak_toudai, - &iam_ike_k_sum01, - &iam_nog_s_tree, - &iam_nog_f_tree, - &iam_nog_zassou, - &iam_tak_tailor, - &iam_nog_dump, - &iam_dummy, - &iam_nog_snowman, - &iam_ike_k_iveboy01, - &iam_dummy, - &iam_tak_moon, - &iam_ike_k_kid01, - &iam_iid_ningyou, - &iam_nog_station, - &iam_nog_station, - &iam_nog_station, - &iam_nog_station, - &iam_nog_station, - &iam_nog_station, - &iam_nog_station, - &iam_nog_station, - &iam_nog_station, - &iam_nog_station, - &iam_nog_station, - &iam_nog_station, - &iam_nog_station, - &iam_nog_station, - &iam_nog_station, - &iam_nog_shrine, - &iam_nog_flat, - &iam_nog_rail, - &iam_nog_earth, - &iam_ike_k_kid02, - &iam_nog_mikanbox, - &iam_nog_collegenote, - &iam_nog_schoolnote, - &iam_nog_systemnote, - &iam_nog_harddiary, - &iam_nog_tudurinote, - &iam_iid_diary, - &iam_iid_funediary, - &iam_iid_mdiary, - &iam_iid_newdiary, - &iam_tak_nikki01, - &iam_ike_nikki_fan1, - &iam_ike_nikki_fan2, - &iam_ike_nikki_fan3, - &iam_ike_nikki_fan4, - &iam_ike_nikki_fan5, - &iam_ike_nikki_wafu1, - &iam_gold_item, - &iam_gold_item, - &iam_gold_item, - &iam_gold_item, - &iam_utiwa, - &iam_utiwa, - &iam_utiwa, - &iam_utiwa, - &iam_utiwa, - &iam_utiwa, - &iam_utiwa, - &iam_utiwa, - &iam_kazaguruma, - &iam_kazaguruma, - &iam_kazaguruma, - &iam_kazaguruma, - &iam_kazaguruma, - &iam_kazaguruma, - &iam_kazaguruma, - &iam_kazaguruma, - &iam_tool, - &iam_tool, - &iam_tool, - &iam_tool, - &iam_nog_nabe, - &iam_ike_kama_danro01, - &iam_nog_kamakura, - &iam_nog_w_tree, - &iam_tak_ice, - &iam_ike_island_hako01, - &iam_nog_beachbed, - &iam_nog_beachtable, - &iam_dummy, - &iam_iid_surf, - &iam_iid_snow, - &iam_tak_tetra, - &iam_ike_island_uku01, - &iam_ike_island_sensui01, - &iam_iid_yuki, - &iam_dummy, - &iam_dummy, - &iam_tak_sori01, - &iam_iid_benti, - &iam_tak_cube, - &iam_iku_denko, - &iam_yaz_rocket, - &iam_iku_slip, - &iam_iku_ukai, - &iam_iku_work, - &iam_hos_deskL, - &iam_hos_deskR, - &iam_hos_flip, - &iam_iku_flagman, - &iam_yaz_fish_trophy, - &iam_iku_jersey, - &iam_iku_reducespeed, - &iam_dummy, - &iam_hos_Tdesk, - &iam_iku_hazardous_top, - &iam_dummy, - &iam_iku_sawhousev, - &iam_dummy, - &iam_iku_bugzapper, - &iam_yaz_telescope, - &iam_iku_cocoa, - &iam_yaz_b_bath, - &iam_sugi_barbecue, - &iam_sugi_radiatorl, - &iam_sugi_alchair, - &iam_sugi_chesstable, - &iam_iku_candy, - &iam_sugi_kpool, - &iam_iku_cement, - &iam_iku_jack, - &iam_sugi_torch, - &iam_yaz_b_house, - &iam_yos_pbstove, - &iam_iku_busstop, - &iam_tak_ham1, - &iam_iku_flip_top, - &iam_yos_kflag, - &iam_tak_nes01, - &iam_yos_b_feeder, - &iam_iku_chair, - &iam_iku_roller, - &iam_yos_flamingo, - &iam_yos_mailbox, - &iam_yaz_candle, - &iam_iku_ham, - &iam_yos_gnome, - &iam_yos_flamingo2, - &iam_iku_gold_green, - &iam_iku_gold_red, - &iam_iku_tumble, - &iam_iku_cow, - &iam_iku_orange, - &iam_iku_saku_a, - &iam_iku_saku_b, - &iam_yaz_tub, - &iam_yos_luigi, - &iam_yos_mario, - &iam_iku_turkey_lamp, - &iam_yaz_wagon, - &iam_yos_terrace, - &iam_hos_piknic, - &iam_iku_turkey_table, - &iam_iku_turkey_TV, - &iam_iku_turkey_bed, - &iam_yaz_turkey_chair, - &iam_yos_turkey_watch, - &iam_hos_turkey_sofa, - &iam_iku_mario_dokan, - &iam_iku_mario_renga, - &iam_yaz_turkey_closet, - &iam_hos_mario_hata, - &iam_yaz_turkey_chest, - &iam_hos_mario_kinoko, - &iam_yos_turkey_mirror, - &iam_iku_mario_coin, - &iam_iku_mario_hatena, - &iam_iku_mario_star, - &iam_iku_mario_koura, - &iam_iku_mario_taihou, - &iam_yos_cactus, - &iam_yaz_mario_flower, - &iam_yos_wheel, - &iam_iku_ido, - &iam_ike_prores_fense01, - &iam_ike_prores_ling01, - &iam_ike_prores_ling02, - &iam_ike_prores_ling03, - &iam_ike_prores_mat01, - &iam_ike_prores_table01, - &iam_ike_prores_punch01, - &iam_ike_prores_sandbag01, - &iam_ike_prores_bench01, - &iam_ike_tent_fire01, - &iam_ike_tent_fire02, - &iam_ike_tent_kayak01, - &iam_nog_sprinkler, - &iam_tak_tent, - &iam_ike_tent_knap01, - &iam_ike_fish_tro2, - &iam_nog_flower, - &iam_nog_flower, - &iam_nog_flower, - &iam_nog_flower, - &iam_nog_flower, - &iam_nog_flower, - &iam_nog_flower, - &iam_nog_flower, - &iam_nog_flower, - &iam_tak_tent_lamp, - &iam_nog_lawnmower, - &iam_tak_tent_box, - &iam_ike_tent_bike01, - &iam_ike_tent_sleepbag01, - &iam_nog_burner, - &iam_nog_cornucopia, - &iam_nog_gong, - &iam_tak_noise, - &iam_tak_stew, - &iam_dummy, -}; +#include "../src/ac_furniture_profile_data.c_inc" // clang-format off static u8 l_place_table[] = { diff --git a/src/ac_furniture_profile_data.c_inc b/src/ac_furniture_profile_data.c_inc new file mode 100644 index 00000000..9edc1b3a --- /dev/null +++ b/src/ac_furniture_profile_data.c_inc @@ -0,0 +1,1268 @@ +static aFTR_PROFILE* furniture_quality[] = { + &iam_sum_hal_chest02, + &iam_sum_clchest03, + &iam_sum_blue_bureau01, + &iam_kob_locker1, + &iam_sum_x_chest01, + &iam_sum_whi_chest02, + &iam_sum_ratan_chest02, + &iam_sum_log_chest02, + &iam_sum_liccachest, + &iam_sum_gre_chest02, + &iam_sum_fruitchest03, + &iam_sum_cont_chest02, + &iam_sum_blue_cab01, + &iam_sum_bla_chest03, + &iam_sum_asi_chest03, + &iam_sum_x_chest02, + &iam_sum_whi_chest01, + &iam_sum_ratan_chest01, + &iam_sum_log_chest01, + &iam_sum_liccalowchest, + &iam_sum_hal_chest03, + &iam_sum_gre_chest03, + &iam_sum_fruitchest01, + &iam_sum_cont_chest03, + &iam_sum_classicchest01, + &iam_sum_blue_lowchest01, + &iam_sum_bla_chest01, + &iam_sum_asi_chest02, + &iam_nog_tri_chest01, + &iam_nog_tri_chest02, + &iam_nog_tri_chest03, + &iam_dummy, + &iam_dummy, + &iam_dummy, + &iam_nog_fan01, + &iam_dummy, + &iam_dummy, + &iam_dummy, + &iam_dummy, + &iam_dummy, + &iam_dummy, + &iam_ari_isu01, + &iam_ari_table01, + &iam_ari_reizou01, + &iam_dummy, + &iam_dummy, + &iam_sum_sofe01, + &iam_sum_sofe02, + &iam_dummy, + &iam_ari_kitchen01, + &iam_sum_sofe03, + &iam_dummy, + &iam_dummy, + &iam_dummy, + &iam_sum_guitar01, + &iam_sum_guitar02, + &iam_sum_guitar03, + &iam_sum_doll01, + &iam_sum_doll02, + &iam_sum_doll03, + &iam_sum_doll04, + &iam_sum_classiccabinet01, + &iam_sum_classicchair01, + &iam_sum_classicchest02, + &iam_sum_classictable01, + &iam_sum_classicwardrope01, + &iam_sum_clchair02, + &iam_sum_cupboard01, + &iam_sum_desk01, + &iam_sum_doll05, + &iam_sum_doll06, + &iam_sum_doll07, + &iam_sum_doll08, + &iam_sum_doll09, + &iam_sum_doll10, + &iam_sum_globe01, + &iam_sum_kitchair01, + &iam_sum_kittable01, + &iam_sum_tv01, + &iam_sum_totemp01, + &iam_sum_totemp02, + &iam_sum_totemp03, + &iam_sum_totemp04, + &iam_sum_taiko01, + &iam_sum_stove01, + &iam_sum_stereo01, + &iam_sum_ratan_isu01, + &iam_sum_oldsofa01, + &iam_sum_liccatable, + &iam_sum_liccasofa, + &iam_sum_liccapiano, + &iam_sum_liccalanp, + &iam_sum_liccakitchen, + &iam_sum_liccachair, + &iam_sum_liccabed, + &iam_sum_oldclk01, + &iam_sum_ratan_bed01, + &iam_sum_golfbag01, + &iam_sum_golfbag02, + &iam_sum_golfbag03, + &iam_sum_bookcht01, + &iam_sum_chair01, + &iam_sum_cont_sofa01, + &iam_sum_cont_sofa02, + &iam_sum_cont_table01, + &iam_sum_cont_cab01, + &iam_sum_cont_chest01, + &iam_sum_cont_chair01, + &iam_sum_cont_bed01, + &iam_sum_cont_table02, + &iam_sum_comp01, + &iam_kob_jimudesk, + &iam_kob_mastersword, + &iam_kob_ncube, + &iam_sum_tekin01, + &iam_sum_biwa01, + &iam_sum_conga01, + &iam_sum_shoukaki, + &iam_sum_col_chair01, + &iam_sum_col_chair02, + &iam_sum_col_chair03, + &iam_sum_conpo01, + &iam_kob_pipeisu, + &iam_sum_liccamirror, + &iam_sum_pet01, + &iam_sum_timpani01, + &iam_dummy, + &iam_sum_bdcake01, + &iam_dummy, + &iam_dummy, + &iam_dummy, + &iam_sum_sabo01, + &iam_sum_sabo02, + &iam_sum_clbed02, + &iam_sum_tv02, + &iam_sum_liccalowtable, + &iam_dummy, + &iam_dummy, + &iam_sum_touro01, + &iam_sum_touro02, + &iam_sum_touro03, + &iam_kob_jimuisu, + &iam_kob_getabako1, + &iam_kob_getabako2, + &iam_dummy, + &iam_dummy, + &iam_dummy, + &iam_kob_rika_desk, + &iam_dummy, + &iam_sum_touro04, + &iam_sum_taru01, + &iam_sum_taru02, + &iam_kob_tobibako, + &iam_kon_tukue, + &iam_sum_mezaclock, + &iam_sum_poptable01, + &iam_sum_poptable02, + &iam_sum_poptable03, + &iam_kon_tubo, + &iam_sum_popchair01, + &iam_sum_popchair02, + &iam_sum_popchair03, + &iam_sum_suberi01, + &iam_sum_wc01, + &iam_sum_wc02, + &iam_tak_table02, + &iam_tak_isu03, + &iam_kon_tubo2, + &iam_kon_tubo3, + &iam_sum_misin01, + &iam_sum_billiads, + &iam_sum_art01, + &iam_ike_art_ang, + &iam_ike_art_sya, + &iam_sum_art04, + &iam_sum_art05, + &iam_sum_art06, + &iam_ike_art_fel, + &iam_sum_art08, + &iam_sum_art09, + &iam_sum_art10, + &iam_sum_art11, + &iam_sum_art12, + &iam_sum_art13, + &iam_sum_art14, + &iam_sum_art15, + &iam_sum_fruitbed01, + &iam_sum_fruitchair01, + &iam_dummy, + &iam_sum_fruittable01, + &iam_sum_fruittv01, + &iam_sum_takkyu, + &iam_sum_harp, + &iam_sum_log_hatoclk, + &iam_sum_kisha, + &iam_sum_mizunomi, + &iam_sum_okiagari01, + &iam_dummy, + &iam_sum_slot, + &iam_sum_asi_chair01, + &iam_sum_asi_chair02, + &iam_sum_asi_chest01, + &iam_sum_asi_lanp01, + &iam_sum_pl_caladium01, + &iam_sum_pl_shuroci, + &iam_sum_asi_screen01, + &iam_sum_asi_table01, + &iam_sum_asi_taiko, + &iam_sum_bla_bed01, + &iam_dummy, + &iam_sum_bla_chest02, + &iam_sum_bla_desk01, + &iam_sum_bla_sofa02, + &iam_sum_bla_table01, + &iam_sum_blue_bed01, + &iam_sum_blue_bench01, + &iam_sum_blue_chair01, + &iam_sum_blue_chest01, + &iam_sum_blue_chest02, + &iam_sum_blue_table01, + &iam_sum_gre_bed01, + &iam_sum_gre_chair01, + &iam_sum_gre_chair02, + &iam_sum_gre_chest01, + &iam_sum_gre_counter01, + &iam_sum_gre_lanp01, + &iam_sum_gre_table01, + &iam_sum_log_bed01, + &iam_sum_log_chair01, + &iam_sum_log_chair02, + &iam_sum_log_chest03, + &iam_sum_log_table01, + &iam_sum_pl_aloe01, + &iam_sum_pl_ananas, + &iam_sum_pl_cocos, + &iam_sum_pl_compacta, + &iam_sum_pl_dracaena, + &iam_sum_pl_gomunoki, + &iam_sum_pl_pothos, + &iam_sum_pl_yamayasi, + &iam_sum_fruittable02, + &iam_sum_fruitchair02, + &iam_sum_pl_benjyami, + &iam_sum_pl_draca02, + &iam_sum_pl_kuroton, + &iam_sum_pl_pakila, + &iam_sum_pl_hirasabo, + &iam_tak_metro, + &iam_kon_sisiodosi, + &iam_sum_bon_matu01, + &iam_sum_bon_matu02, + &iam_tak_barber, + &iam_sum_bon_matu03, + &iam_sum_bon_ume, + &iam_dummy, + &iam_dummy, + &iam_dummy, + &iam_sum_bon_boke, + &iam_sum_bon_satuki, + &iam_sum_bon_sanshu, + &iam_kon_cracker, + &iam_tak_cone01, + &iam_dummy, + &iam_tak_cone03, + &iam_dummy, + &iam_sum_bon_momiji, + &iam_sum_bon_pira, + &iam_sum_bon_turu, + &iam_dummy, + &iam_dummy, + &iam_dummy, + &iam_dummy, + &iam_kon_jihanki02, + &iam_tak_hole01, + &iam_kon_jihanki03, + &iam_dummy, + &iam_tak_drum02, + &iam_dummy, + &iam_dummy, + &iam_tak_tekkin, + &iam_dummy, + &iam_dummy, + &iam_sum_fruitchair03, + &iam_sum_fruitchair04, + &iam_sum_fruittable03, + &iam_dummy, + &iam_kon_gomi03, + &iam_kon_gomi04, + &iam_sum_viola01, + &iam_sum_bass01, + &iam_sum_cello01, + &iam_sum_piano01, + &iam_dummy, + &iam_tak_neko, + &iam_dummy, + &iam_sum_hal_pkin, + &iam_dummy, + &iam_tak_yaji, + &iam_kon_isi01, + &iam_kon_isi02, + &iam_dummy, + &iam_dummy, + &iam_dummy, + &iam_dummy, + &iam_sum_hal_bed01, + &iam_sum_hal_box01, + &iam_sum_hal_chair01, + &iam_dummy, + &iam_sum_hal_chest01, + &iam_sum_hal_sofa01, + &iam_sum_hal_table01, + &iam_tak_apollo1, + &iam_tak_eisei, + &iam_kon_isi03, + &iam_kon_isi04, + &iam_kon_isi05, + &iam_tak_ufo, + &iam_kon_isi06, + &iam_kon_pound, + &iam_tak_rocket1, + &iam_tak_astro, + &iam_sum_hal_clk01, + &iam_sum_hal_lanp01, + &iam_sum_asi_bed01, + &iam_sum_asi_table02, + &iam_tak_asteroid1, + &iam_sum_ratan_lanp, + &iam_sum_ratan_table01, + &iam_dummy, + &iam_kon_taiju, + &iam_dummy, + &iam_dummy, + &iam_sum_ratan_screen, + &iam_sum_ratan_mirror, + &iam_sum_ratan_isu02, + &iam_sum_ratan_chest03, + &iam_tak_arwing, + &iam_tak_mooncar, + &iam_dummy, + &iam_dummy, + &iam_dummy, + &iam_sum_blue_clk, + &iam_tak_moti, + &iam_sum_hal_mirror01, + &iam_sum_gre_desk01, + &iam_dummy, + &iam_sum_bla_chair02, + &iam_sum_bla_table02, + &iam_tak_station, + &iam_dummy, + &iam_sum_log_chair03, + &iam_sum_whi_bed01, + &iam_tak_shuttle, + &iam_sum_whi_mirror, + &iam_sum_whi_sofa01, + &iam_sum_whi_lanp, + &iam_sum_log_table02, + &iam_dummy, + &iam_dummy, + &iam_sum_uwa_cup01, + &iam_sum_uwa_poto01, + &iam_sum_uwa_vase01, + &iam_sum_uwa_vase02, + &iam_sum_uwa_vase03, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_hnw_common, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_fmanekin, + &iam_myfmanekin, + &iam_myfmanekin, + &iam_myfmanekin, + &iam_myfmanekin, + &iam_myfmanekin, + &iam_myfmanekin, + &iam_myfmanekin, + &iam_myfmanekin, + &iam_sum_monshiro, + &iam_sum_monki, + &iam_sum_kiageha, + &iam_sum_ohmurasaki, + &iam_sum_minmin, + &iam_sum_tukutuku, + &iam_sum_higurashi, + &iam_sum_abura, + &iam_sum_hachi, + &iam_sum_shiokara, + &iam_sum_akiakane, + &iam_sum_ginyanma, + &iam_sum_oniyanma, + &iam_sum_syouryou, + &iam_sum_tonosama, + &iam_sum_koorogi, + &iam_sum_kirigirisu, + &iam_sum_suzumushi, + &iam_sum_matumushi, + &iam_sum_kanabun, + &iam_sum_kabuto, + &iam_sum_hirata, + &iam_sum_tamamushi, + &iam_sum_gomadara, + &iam_sum_tentou, + &iam_sum_nanahoshi, + &iam_sum_kamakiri, + &iam_sum_genji, + &iam_sum_danna, + &iam_sum_nokogiri, + &iam_sum_miyama, + &iam_sum_okuwa, + &iam_nog_maimai, + &iam_nog_kera, + &iam_nog_amenbo, + &iam_nog_mino, + &iam_nog_dango, + &iam_nog_kumo, + &iam_nog_ari, + &iam_nog_ka, + &iam_sum_funa, + &iam_sum_hera, + &iam_sum_koi, + &iam_sum_nisiki, + &iam_sum_namazu, + &iam_sum_bass, + &iam_sum_bassm, + &iam_sum_bassl, + &iam_sum_gill, + &iam_sum_oonamazu, + &iam_sum_raigyo, + &iam_sum_nigoi, + &iam_sum_ugui, + &iam_sum_oikawa, + &iam_sum_tanago, + &iam_sum_dojyo, + &iam_sum_wakasagi, + &iam_sum_ayu, + &iam_sum_yamame, + &iam_sum_iwana, + &iam_sum_niji, + &iam_sum_ito, + &iam_sum_sake, + &iam_sum_kingyo, + &iam_sum_pirania, + &iam_sum_aroana, + &iam_sum_unagi, + &iam_sum_donko, + &iam_sum_angel, + &iam_sum_gupi, + &iam_sum_demekin, + &iam_sum_kaseki, + &iam_nog_zarigani, + &iam_nog_kaeru, + &iam_nog_medaka, + &iam_nog_kurage, + &iam_nog_suzuki, + &iam_nog_tai, + &iam_nog_isidai, + &iam_nog_piraluku, + &iam_fumbrella, + &iam_fumbrella, + &iam_fumbrella, + &iam_fumbrella, + &iam_fumbrella, + &iam_fumbrella, + &iam_fumbrella, + &iam_fumbrella, + &iam_fumbrella, + &iam_fumbrella, + &iam_fumbrella, + &iam_fumbrella, + &iam_fumbrella, + &iam_fumbrella, + &iam_fumbrella, + &iam_fumbrella, + &iam_fumbrella, + &iam_fumbrella, + &iam_fumbrella, + &iam_fumbrella, + &iam_fumbrella, + &iam_fumbrella, + &iam_fumbrella, + &iam_fumbrella, + &iam_fumbrella, + &iam_fumbrella, + &iam_fumbrella, + &iam_fumbrella, + &iam_fumbrella, + &iam_fumbrella, + &iam_fumbrella, + &iam_fumbrella, + &iam_myfumbrella, + &iam_myfumbrella, + &iam_myfumbrella, + &iam_myfumbrella, + &iam_myfumbrella, + &iam_myfumbrella, + &iam_myfumbrella, + &iam_myfumbrella, + &iam_famicom_common, + &iam_famicom_common, + &iam_famicom_common, + &iam_famicom_common, + &iam_famicom_common, + &iam_famicom_common, + &iam_famicom_common, + &iam_famicom_common, + &iam_famicom_common, + &iam_famicom_common, + &iam_famicom_common, + &iam_famicom_common, + &iam_famicom_common, + &iam_famicom_common, + &iam_famicom_common, + &iam_famicom_common, + &iam_famicom_common, + &iam_famicom_common, + &iam_famicom_common, + &iam_kob_disksystem8, + &iam_sum_chikuon01, + &iam_sum_chikuon02, + &iam_sum_jukebox, + &iam_sum_radio01, + &iam_sum_radio02, + &iam_sum_conpo02, + &iam_sum_stereo02, + &iam_sum_lv_stereo, + &iam_sum_x_lanp, + &iam_sum_x_chair01, + &iam_sum_x_chest03, + &iam_sum_x_sofa01, + &iam_sum_x_bed01, + &iam_sum_x_clk, + &iam_sum_x_table01, + &iam_sum_x_piano, + &iam_sum_doll11, + &iam_sum_roboconpo, + &iam_sum_saiconpo, + &iam_sum_fruitclk, + &iam_sum_roboclk, + &iam_kon_ameclock, + &iam_kon_atqclock, + &iam_sum_reco01, + &iam_sum_casse01, + &iam_sum_md01, + &iam_kon_grclock, + &iam_kon_waclock, + &iam_kon_redclock, + &iam_kon_blueclock, + &iam_kon_mimiclock, + &iam_dummy, + &iam_dummy, + &iam_kon_musya, + &iam_dummy, + &iam_dummy, + &iam_kon_xtree02, + &iam_nog_rookW, + &iam_nog_rookB, + &iam_nog_queenW, + &iam_nog_queenB, + &iam_nog_bishopW, + &iam_nog_bishopB, + &iam_nog_kingW, + &iam_nog_kingB, + &iam_nog_knightW, + &iam_nog_knightB, + &iam_nog_pawnW, + &iam_nog_pawnB, + &iam_nog_xtree, + &iam_nog_tri_clock01, + &iam_nog_tri_bed01, + &iam_nog_tri_table01, + &iam_nog_tri_sofa01, + &iam_nog_tri_audio01, + &iam_nog_tri_chair01, + &iam_nog_tri_rack01, + &iam_dummy, + &iam_dummy, + &iam_sum_kokuban, + &iam_sum_baketu, + &iam_din_trikera_head, + &iam_din_trikera_tail, + &iam_din_trikera_body, + &iam_din_trex_head, + &iam_din_trex_tail, + &iam_din_trex_body, + &iam_din_bront_head, + &iam_din_bront_tail, + &iam_din_bront_body, + &iam_din_stego_head, + &iam_din_stego_tail, + &iam_din_stego_body, + &iam_din_ptera_head, + &iam_din_ptera_Rwing, + &iam_din_ptera_Lwing, + &iam_din_hutaba_head, + &iam_din_hutaba_neck, + &iam_din_hutaba_body, + &iam_din_mammoth_head, + &iam_din_mammoth_body, + &iam_din_amber, + &iam_din_stump, + &iam_din_ammonite, + &iam_din_egg, + &iam_din_trilobite, + &iam_sum_bla_lanp, + &iam_kon_snowfreezer, + &iam_kon_snowtable, + &iam_kon_snowbed, + &iam_tak_snowisu, + &iam_tak_snowlamp, + &iam_kon_snowsofa, + &iam_kon_snowtv, + &iam_kon_snowtansu, + &iam_kon_snowbox, + &iam_kon_snowclock, + &iam_din_trikera_dummy, + &iam_din_trex_dummy, + &iam_din_bront_dummy, + &iam_din_ptera_dummy, + &iam_din_hutaba_dummy, + &iam_din_mammoth_dummy, + &iam_din_stego_dummyA, + &iam_din_stego_dummyB, + &iam_din_dummy, + &iam_tak_syogi, + &iam_ike_jny_makada01, + &iam_dummy, + &iam_ike_pst_pig01, + &iam_ike_pst_tesyu01, + &iam_ike_jny_afmen01, + &iam_ike_jny_rosia01, + &iam_hayakawa_famicom, + &iam_ike_jny_botle01, + &iam_ike_jny_hariko01, + &iam_ike_jny_moai01, + &iam_radio_test, + &iam_ike_jny_gojyu01, + &iam_ike_jny_kibori01, + &iam_ike_jny_truth01, + &iam_ike_jny_sirser01, + &iam_ike_jny_pisa01, + &iam_tak_lion, + &iam_ike_jny_syon01, + &iam_ike_jny_tower01, + &iam_nog_balloon_common, + &iam_nog_balloon_common, + &iam_nog_balloon_common, + &iam_nog_balloon_common, + &iam_nog_balloon_common, + &iam_nog_balloon_common, + &iam_nog_balloon_common, + &iam_nog_balloon_common, + &iam_tak_megami, + &iam_ike_jny_gate01, + &iam_tak_money, + &iam_ike_jny_ningyo01, + &iam_nog_yubin, + &iam_nog_myhome2, + &iam_nog_myhome4, + &iam_nog_koban, + &iam_nog_museum, + &iam_tak_yoroi, + &iam_dummy, + &iam_dummy, + &iam_dummy, + &iam_ike_k_otome01, + &iam_nog_yamishop, + &iam_nog_uranai, + &iam_ike_jny_sirser201, + &iam_ike_k_tanabata01, + &iam_dummy, + &iam_dummy, + &iam_nog_shop1, + &iam_ike_jny_houi01, + &iam_dummy, + &iam_dummy, + &iam_tak_toudai, + &iam_ike_k_sum01, + &iam_nog_s_tree, + &iam_nog_f_tree, + &iam_nog_zassou, + &iam_tak_tailor, + &iam_nog_dump, + &iam_dummy, + &iam_nog_snowman, + &iam_ike_k_iveboy01, + &iam_dummy, + &iam_tak_moon, + &iam_ike_k_kid01, + &iam_iid_ningyou, + &iam_nog_station, + &iam_nog_station, + &iam_nog_station, + &iam_nog_station, + &iam_nog_station, + &iam_nog_station, + &iam_nog_station, + &iam_nog_station, + &iam_nog_station, + &iam_nog_station, + &iam_nog_station, + &iam_nog_station, + &iam_nog_station, + &iam_nog_station, + &iam_nog_station, + &iam_nog_shrine, + &iam_nog_flat, + &iam_nog_rail, + &iam_nog_earth, + &iam_ike_k_kid02, + &iam_nog_mikanbox, + &iam_nog_collegenote, + &iam_nog_schoolnote, + &iam_nog_systemnote, + &iam_nog_harddiary, + &iam_nog_tudurinote, + &iam_iid_diary, + &iam_iid_funediary, + &iam_iid_mdiary, + &iam_iid_newdiary, + &iam_tak_nikki01, + &iam_ike_nikki_fan1, + &iam_ike_nikki_fan2, + &iam_ike_nikki_fan3, + &iam_ike_nikki_fan4, + &iam_ike_nikki_fan5, + &iam_ike_nikki_wafu1, + &iam_gold_item, + &iam_gold_item, + &iam_gold_item, + &iam_gold_item, + &iam_utiwa, + &iam_utiwa, + &iam_utiwa, + &iam_utiwa, + &iam_utiwa, + &iam_utiwa, + &iam_utiwa, + &iam_utiwa, + &iam_kazaguruma, + &iam_kazaguruma, + &iam_kazaguruma, + &iam_kazaguruma, + &iam_kazaguruma, + &iam_kazaguruma, + &iam_kazaguruma, + &iam_kazaguruma, + &iam_tool, + &iam_tool, + &iam_tool, + &iam_tool, + &iam_nog_nabe, + &iam_ike_kama_danro01, + &iam_nog_kamakura, + &iam_nog_w_tree, + &iam_tak_ice, + &iam_ike_island_hako01, + &iam_nog_beachbed, + &iam_nog_beachtable, + &iam_dummy, + &iam_iid_surf, + &iam_iid_snow, + &iam_tak_tetra, + &iam_ike_island_uku01, + &iam_ike_island_sensui01, + &iam_iid_yuki, + &iam_dummy, + &iam_dummy, + &iam_tak_sori01, + &iam_iid_benti, + &iam_tak_cube, + &iam_iku_denko, + &iam_yaz_rocket, + &iam_iku_slip, + &iam_iku_ukai, + &iam_iku_work, + &iam_hos_deskL, + &iam_hos_deskR, + &iam_hos_flip, + &iam_iku_flagman, + &iam_yaz_fish_trophy, + &iam_iku_jersey, + &iam_iku_reducespeed, + &iam_dummy, + &iam_hos_Tdesk, + &iam_iku_hazardous_top, + &iam_dummy, + &iam_iku_sawhousev, + &iam_dummy, + &iam_iku_bugzapper, + &iam_yaz_telescope, + &iam_iku_cocoa, + &iam_yaz_b_bath, + &iam_sugi_barbecue, + &iam_sugi_radiatorl, + &iam_sugi_alchair, + &iam_sugi_chesstable, + &iam_iku_candy, + &iam_sugi_kpool, + &iam_iku_cement, + &iam_iku_jack, + &iam_sugi_torch, + &iam_yaz_b_house, + &iam_yos_pbstove, + &iam_iku_busstop, + &iam_tak_ham1, + &iam_iku_flip_top, + &iam_yos_kflag, + &iam_tak_nes01, + &iam_yos_b_feeder, + &iam_iku_chair, + &iam_iku_roller, + &iam_yos_flamingo, + &iam_yos_mailbox, + &iam_yaz_candle, + &iam_iku_ham, + &iam_yos_gnome, + &iam_yos_flamingo2, + &iam_iku_gold_green, + &iam_iku_gold_red, + &iam_iku_tumble, + &iam_iku_cow, + &iam_iku_orange, + &iam_iku_saku_a, + &iam_iku_saku_b, + &iam_yaz_tub, + &iam_yos_luigi, + &iam_yos_mario, + &iam_iku_turkey_lamp, + &iam_yaz_wagon, + &iam_yos_terrace, + &iam_hos_piknic, + &iam_iku_turkey_table, + &iam_iku_turkey_TV, + &iam_iku_turkey_bed, + &iam_yaz_turkey_chair, + &iam_yos_turkey_watch, + &iam_hos_turkey_sofa, + &iam_iku_mario_dokan, + &iam_iku_mario_renga, + &iam_yaz_turkey_closet, + &iam_hos_mario_hata, + &iam_yaz_turkey_chest, + &iam_hos_mario_kinoko, + &iam_yos_turkey_mirror, + &iam_iku_mario_coin, + &iam_iku_mario_hatena, + &iam_iku_mario_star, + &iam_iku_mario_koura, + &iam_iku_mario_taihou, + &iam_yos_cactus, + &iam_yaz_mario_flower, + &iam_yos_wheel, + &iam_iku_ido, + &iam_ike_prores_fense01, + &iam_ike_prores_ling01, + &iam_ike_prores_ling02, + &iam_ike_prores_ling03, + &iam_ike_prores_mat01, + &iam_ike_prores_table01, + &iam_ike_prores_punch01, + &iam_ike_prores_sandbag01, + &iam_ike_prores_bench01, + &iam_ike_tent_fire01, + &iam_ike_tent_fire02, + &iam_ike_tent_kayak01, + &iam_nog_sprinkler, + &iam_tak_tent, + &iam_ike_tent_knap01, + &iam_ike_fish_tro2, + &iam_nog_flower, + &iam_nog_flower, + &iam_nog_flower, + &iam_nog_flower, + &iam_nog_flower, + &iam_nog_flower, + &iam_nog_flower, + &iam_nog_flower, + &iam_nog_flower, + &iam_tak_tent_lamp, + &iam_nog_lawnmower, + &iam_tak_tent_box, + &iam_ike_tent_bike01, + &iam_ike_tent_sleepbag01, + &iam_nog_burner, + &iam_nog_cornucopia, + &iam_nog_gong, + &iam_tak_noise, + &iam_tak_stew, + &iam_dummy, +}; diff --git a/src/m_catalog_ovl.c b/src/m_catalog_ovl.c new file mode 100644 index 00000000..faa1e315 --- /dev/null +++ b/src/m_catalog_ovl.c @@ -0,0 +1,1436 @@ +#include "m_catalog_ovl.h" + +#include "f_furniture.h" +#include "m_room_type.h" +#include "m_field_info.h" +#include "m_shop.h" +#include "m_tag_ovl.h" +#include "m_hand_ovl.h" +#include "m_play.h" +#include "m_rcp.h" +#include "ac_my_room.h" +#include "sys_matrix.h" +#include "m_font.h" +#include "m_common_data.h" +#include "m_malloc.h" + +enum { + mCL_DRAW_TYPE_FTR, + mCL_DRAW_TYPE_PAPER, + mCL_DRAW_TYPE_WALL, + mCL_DRAW_TYPE_CARPET, + mCL_DRAW_TYPE_MUSIC, + + mCL_DRAW_TYPE_NONE, + mCL_DRAW_TYPE_NUM = mCL_DRAW_TYPE_NONE +}; + +typedef struct { + u16 ftr_idx; + s16 draw_type; +} mCL_ftr_info_c; + +typedef struct { + u16* idx_list_p; + int list_size; +} mCL_item_info_c; + +typedef struct { + f32 scale; + f32 pos_y; +} mCL_furniture_draw_data_c; + +typedef struct { + u16* win_pal; + u8* win_tex; + Gfx* sel_gfx0; + Gfx* sel_gfx1; +} mCL_win_data_c; + +#include "../src/ac_furniture_profile_data.c_inc" /* furniture quality */ +#include "../src/m_catalog_ovl_paper_data.c_inc" +#include "../src/m_catalog_ovl_data.c_inc" + +#define mCL_ITEM_INFO(list) \ + { (list), ARRAY_COUNT(list) } + +// clang-format off +static mCL_item_info_c mCL_item_idx_data[] = { + { NULL, mCL_FTR_LIST_COUNT }, + mCL_ITEM_INFO(mCL_wall_idx_list), + mCL_ITEM_INFO(mCL_carpet_idx_list), + mCL_ITEM_INFO(mCL_cloth_idx_list), + mCL_ITEM_INFO(mCL_umbrella_idx_list), + mCL_ITEM_INFO(mCL_paper_idx_list), + mCL_ITEM_INFO(mCL_haniwa_idx_list), + mCL_ITEM_INFO(mCL_fossil_idx_list), + mCL_ITEM_INFO(mCL_music_idx_list), +}; +// clang-format on + +extern u16 clg_win_ha_tex_rgb_ci4_pal[]; +extern u8 clg_win_ha_tex_rgb_ci4[]; +extern Gfx clg_win_haT_model[]; +extern Gfx clg_win_ha2T_model[]; +extern u16 clg_win_kabe_tex_rgb_ci4_pal[]; +extern u8 clg_win_kabe_tex_rgb_ci4[]; +extern Gfx clg_win_kabeT_model[]; +extern Gfx clg_win_kabe2T_model[]; +extern u16 clg_win_jyuutan_tex_rgb_ci4_pal[]; +extern u8 clg_win_jyuutan_tex_rgb_ci4[]; +extern Gfx clg_win_jyuutanT_model[]; +extern Gfx clg_win_jyuutan2T_model[]; +extern u16 clg_win_fuku_tex_rgb_ci4_pal[]; +extern u8 clg_win_fuku_tex_rgb_ci4[]; +extern Gfx clg_win_fukuT_model[]; +extern Gfx clg_win_fuku2T_model[]; +extern u16 clg_win_kasa_tex_rgb_ci4_pal[]; +extern u8 clg_win_kasa_tex_rgb_ci4[]; +extern Gfx clg_win_kasaT_model[]; +extern Gfx clg_win_kasa2T_model[]; +extern u16 clg_win_tegami_tex_rgb_ci4_pal[]; +extern u8 clg_win_tegami_tex_rgb_ci4[]; +extern Gfx clg_win_tegamiT_model[]; +extern Gfx clg_win_tegami2T_model[]; +extern u16 clg_win_hani_tex_rgb_ci4_pal[]; +extern u8 clg_win_hani_tex_rgb_ci4[]; +extern Gfx clg_win_haniwaT_model[]; +extern Gfx clg_win_haniwa2T_model[]; +extern u16 clg_win_hone_tex_rgb_ci4_pal[]; +extern u8 clg_win_hone_tex_rgb_ci4[]; +extern Gfx clg_win_honeT_model[]; +extern Gfx clg_win_hone2T_model[]; +extern u16 clg_win_onpu_tex_rgb_ci4_pal[]; +extern u8 clg_win_onpu_tex_rgb_ci4[]; +extern Gfx clg_win_onpuT_model[]; +extern Gfx clg_win_onpu2T_model[]; + +// clang-format off +static mCL_win_data_c mCL_win_data[] = { + { + clg_win_ha_tex_rgb_ci4_pal, + clg_win_ha_tex_rgb_ci4, + clg_win_haT_model, + clg_win_ha2T_model + }, + { + clg_win_kabe_tex_rgb_ci4_pal, + clg_win_kabe_tex_rgb_ci4, + clg_win_kabeT_model, + clg_win_kabe2T_model + }, + { + clg_win_jyuutan_tex_rgb_ci4_pal, + clg_win_jyuutan_tex_rgb_ci4, + clg_win_jyuutanT_model, + clg_win_jyuutan2T_model + }, + { + clg_win_fuku_tex_rgb_ci4_pal, + clg_win_fuku_tex_rgb_ci4, + clg_win_fukuT_model, + clg_win_fuku2T_model + }, + { + clg_win_kasa_tex_rgb_ci4_pal, + clg_win_kasa_tex_rgb_ci4, + clg_win_kasaT_model, + clg_win_kasa2T_model + }, + { + clg_win_tegami_tex_rgb_ci4_pal, + clg_win_tegami_tex_rgb_ci4, + clg_win_tegamiT_model, + clg_win_tegami2T_model + }, + { + clg_win_hani_tex_rgb_ci4_pal, + clg_win_hani_tex_rgb_ci4, + clg_win_haniwaT_model, + clg_win_haniwa2T_model + }, + { + clg_win_hone_tex_rgb_ci4_pal, + clg_win_hone_tex_rgb_ci4, + clg_win_honeT_model, + clg_win_hone2T_model + }, + { + clg_win_onpu_tex_rgb_ci4_pal, + clg_win_onpu_tex_rgb_ci4, + clg_win_onpuT_model, + clg_win_onpu2T_model + }, +}; +// clang-format on + +static u8 not_sell[12] = "Not for Sale"; + +static void mCL_dma_furniture_program(mCL_Item_c* item) { + item->profile = furniture_quality[item->ftr_actor.name]; +} + +static void mCL_dma_furniture_bank(mCL_Item_c* item, mActor_name_t item_no) { + aFTR_PROFILE* profile = item->profile; + + if (profile->vtable != NULL && profile->vtable->dma_proc != NULL) { + profile->vtable->dma_proc(item_no, item->seg1); + } +} + +static void mCL_furniture_init(mCL_Item_c* item, mActor_name_t item_no) { + // clang-format off + static mCL_furniture_draw_data_c furniture_draw_data[] = { + { 0.90f, -3.0f }, + { 0.90f, -8.0f }, + { 0.85f, -3.0f }, + { 0.87f, -3.0f }, + { 0.90f, 0.0f }, + { 0.82f, -9.0f }, + { 0.82f, -5.0f }, + { 0.90f, -6.0f }, + { 0.90f, -7.0f }, + { 0.76f, -3.0f }, + { 0.77f, -25.0f }, + { 0.83f, -27.0f }, + { 0.90f, -10.0f }, + { 0.90f, -13.0f }, + { 0.86f, -20.0f }, + { 0.82f, -25.0f }, + { 0.69f, -6.0f }, + { 0.90f, -10.0f }, + { 0.49f, -29.0f }, + { 0.86f, -3.0f }, + { 0.65f, -3.0f }, + { 0.88f, -3.0f }, + { 0.78f, -3.0f }, + { 0.89f, -12.0f }, + { 0.85f, -3.0f }, + { 0.90f, -6.0f }, + { 0.89f, -9.0f }, + { 0.82f, -14.0f }, + { 0.84f, -3.0f }, + { 0.87f, -5.0f }, + { 0.74f, -3.0f }, + { 0.78f, -13.0f }, + { 0.72f, -3.0f }, + { 0.85f, -15.0f }, + { 0.81f, -3.0f }, + { 0.78f, -9.0f }, + { 0.77f, -3.0f }, + { 0.83f, -3.0f }, + { 0.86f, -6.0f }, + { 0.82f, -3.0f }, + { 0.82f, -30.0f }, + }; + // clang-format on + + aFTR_PROFILE* profile; + FTR_ACTOR* ftr_actor; + + item->gfx_type = mCL_DRAW_TYPE_FTR; + item->ftr_actor.name = mRmTp_FtrItemNo2FtrIdx(item_no); + mCL_dma_furniture_program(item); + mCL_dma_furniture_bank(item, item_no); + + ftr_actor = &item->ftr_actor; + profile = item->profile; + + ftr_actor->tex_animation.frame = 0; + ftr_actor->switch_bit = TRUE; + + if (profile->shape == aFTR_SHAPE_TYPEB_90) { + ftr_actor->position.x = 0.0f; + ftr_actor->position.z = -mFI_UT_WORLDSIZE_HALF_Z_F; + } else if (profile->shape == aFTR_SHAPE_TYPEB_180) { + ftr_actor->position.x = mFI_UT_WORLDSIZE_HALF_X_F; + ftr_actor->position.z = 0.0f; + } else if (profile->shape == aFTR_SHAPE_TYPEB_270) { + ftr_actor->position.x = 0.0f; + ftr_actor->position.z = mFI_UT_WORLDSIZE_HALF_Z_F; + } else if (profile->shape == aFTR_SHAPE_TYPEB_0) { + ftr_actor->position.x = -mFI_UT_WORLDSIZE_HALF_X_F; + ftr_actor->position.z = 0.0f; + } else { + ftr_actor->position.x = 0.0f; + ftr_actor->position.z = 0.0f; + } + + ftr_actor->angle_y = 0.0f; + ftr_actor->keyframe.skeleton = NULL; + ftr_actor->keyframe.animation = NULL; + item->timer = 15; + + if (profile->rig != NULL) { + cKF_SkeletonInfo_R_ct(&ftr_actor->keyframe, profile->rig->skeleton, profile->rig->animation, ftr_actor->joint, + ftr_actor->morph); + cKF_SkeletonInfo_R_init_standard_repeat(&ftr_actor->keyframe, profile->rig->animation, NULL); + cKF_SkeletonInfo_R_play(&ftr_actor->keyframe); + ftr_actor->keyframe.frame_control.speed = 0.5f; + } + + if (profile->vtable != NULL && profile->vtable->ct_proc != NULL) { + profile->vtable->ct_proc(ftr_actor, item->seg1); + + if (ftr_actor->keyframe.skeleton != NULL && ftr_actor->keyframe.animation != NULL) { + ftr_actor->keyframe.frame_control.speed = 0.5f; + } + } + + if (item_no >= HANIWA_START && item_no <= HANIWA_END) { + item->pos_y = 38.0f; + item->scale = 1.0f; + ftr_actor->position.y = -7.0f; + item->price = 0; + } else if (item_no >= FTR_CLOTH_START && item_no <= FTR_CLOTH_END) { + mActor_name_t cloth_item; + + item->pos_y = 38.0f; + item->scale = 1.0f; + ftr_actor->position.y = -4.0f; + cloth_item = mRmTp_FtrItemNo2Item1ItemNo(item_no, FALSE); + + if (mSP_SearchItemCategoryPriority(cloth_item, mSP_KIND_CLOTH, mSP_LISTTYPE_COMMON, NULL) || + mSP_SearchItemCategoryPriority(cloth_item, mSP_KIND_CLOTH, mSP_LISTTYPE_UNCOMMON, NULL) || + mSP_SearchItemCategoryPriority(cloth_item, mSP_KIND_CLOTH, mSP_LISTTYPE_RARE, NULL)) { + item->price = mSP_ItemNo2ItemPrice(cloth_item); + } else { + item->price = 0; + } + } else if (item_no >= FTR_UMBRELLA_START && item_no <= FTR_UMBRELLA_END) { + item->pos_y = 36.0f; + item->scale = 1.0f; + ftr_actor->position.y = 0.0f; + item->price = mSP_ItemNo2ItemPrice(item_no); + } else if ((mRmTp_FtrItemNo2FtrIdx(item_no) >= 0x3FC && mRmTp_FtrItemNo2FtrIdx(item_no) <= 0x403) || + (item_no >= FTR_COLLEGERULE && item_no <= FTR_CALLIGRAPHY_PAD_WEST) || + (mRmTp_FtrItemNo2FtrIdx(item_no) >= 0x453 && mRmTp_FtrItemNo2FtrIdx(item_no) <= 0x45A) || + (mRmTp_FtrItemNo2FtrIdx(item_no) >= 0x45B && mRmTp_FtrItemNo2FtrIdx(item_no) <= 0x462) || + (mRmTp_FtrItemNo2FtrIdx(item_no) >= 0x44F && mRmTp_FtrItemNo2FtrIdx(item_no) <= 0x452) || + (mRmTp_FtrItemNo2FtrIdx(item_no) >= 0x463 && mRmTp_FtrItemNo2FtrIdx(item_no) <= 0x466)) { + item->pos_y = 36.0f; + item->scale = 1.0f; + ftr_actor->position.y = 0.0f; + item->price = mSP_ItemNo2ItemPrice(item_no); + } else if (item_no >= FTR_DINO_START && item_no <= FTR_DINO_END) { + item->pos_y = 45.0f; + + if (item_no == FTR_DINO_APATO_SKULL) { + item->scale = 0.5f; + ftr_actor->position.y = -mFI_UNIT_BASE_SIZE_F; + } else { + item->scale = 0.65f; + ftr_actor->position.y = 0.0f; + } + + item->price = 0; + } else { + mCL_ftr_info_c* ftr_info = mCL_furniture_list; + int i; + + item->pos_y = 42.0f; + for (i = 0; i < mCL_FTR_LIST_COUNT; i++, ftr_info++) { + if (ftr_info->ftr_idx == ftr_actor->name) { + ftr_actor->position.y = furniture_draw_data[ftr_info->draw_type].pos_y; + item->scale = furniture_draw_data[ftr_info->draw_type].scale; + break; + } + } + + if (i == mCL_FTR_LIST_COUNT) { + /* Default to first entry */ + ftr_actor->position.y = furniture_draw_data[0].pos_y; + item->scale = furniture_draw_data[0].scale; + } + + if (mSP_SearchItemCategoryPriority(item_no, mSP_KIND_FURNITURE, mSP_LISTTYPE_COMMON, NULL) || + mSP_SearchItemCategoryPriority(item_no, mSP_KIND_FURNITURE, mSP_LISTTYPE_UNCOMMON, NULL) || + mSP_SearchItemCategoryPriority(item_no, mSP_KIND_FURNITURE, mSP_LISTTYPE_RARE, NULL) || + mSP_SearchItemCategoryPriority(item_no, mSP_KIND_FURNITURE, mSP_LISTTYPE_TRAIN, NULL) || + mSP_SearchItemCategoryPriority(item_no, mSP_KIND_FURNITURE, mSP_LISTTYPE_EVENT, NULL) || + mSP_SearchItemCategoryPriority(item_no, mSP_KIND_FURNITURE, mSP_LISTTYPE_LOTTERY, NULL) || + mSP_SearchItemCategoryPriority(item_no, mSP_KIND_FURNITURE, mSP_LISTTYPE_EVENTPRESENTCHUMON, NULL)) { + item->price = mSP_ItemNo2ItemPrice(item_no); + } else { + item->price = 0; + } + } +} + +static void mCL_paper_init(mCL_Item_c* item, mActor_name_t item_no) { + item->gfx_type = mCL_DRAW_TYPE_PAPER; + item->profile = NULL; + item->ftr_actor.name = (item_no - ITM_PAPER_START) % PAPER_UNIQUE_NUM; + item->pos_y = -93.0f; + item->scale = 0.28f; + + if (mSP_SearchItemCategoryPriority(item_no, mSP_KIND_PAPER, mSP_LISTTYPE_COMMON, NULL) || + mSP_SearchItemCategoryPriority(item_no, mSP_KIND_PAPER, mSP_LISTTYPE_UNCOMMON, NULL) || + mSP_SearchItemCategoryPriority(item_no, mSP_KIND_PAPER, mSP_LISTTYPE_RARE, NULL)) { + item->price = mSP_ItemNo2ItemPrice(item_no); + } else { + item->price = 0; + } +} + +static void mCL_wall_init(mCL_Item_c* item, mActor_name_t item_no) { + item->gfx_type = mCL_DRAW_TYPE_WALL; + item->profile = NULL; + item->ftr_actor.name = (item_no - ITM_WALL_START); + item->pos_y = -90.0f; + item->scale = 0.54f; + item->seg_ofs = (item_no - ITM_WALL_START) * (mNW_PALETTE_SIZE + 0x1000); + + mRmTp_CopyWallData(item->seg1, item_no - ITM_WALL_START); + if (mSP_SearchItemCategoryPriority(item_no, mSP_KIND_WALLPAPER, mSP_LISTTYPE_COMMON, NULL) || + mSP_SearchItemCategoryPriority(item_no, mSP_KIND_WALLPAPER, mSP_LISTTYPE_UNCOMMON, NULL) || + mSP_SearchItemCategoryPriority(item_no, mSP_KIND_WALLPAPER, mSP_LISTTYPE_RARE, NULL)) { + item->price = mSP_ItemNo2ItemPrice(item_no); + } else { + item->price = 0; + } +} + +static void mCL_carpet_init(mCL_Item_c* item, mActor_name_t item_no) { + item->gfx_type = mCL_DRAW_TYPE_CARPET; + item->profile = NULL; + item->ftr_actor.name = (item_no - ITM_CARPET_START); + item->pos_y = -90.0f; + item->scale = 0.54f; + item->seg_ofs = (item_no - ITM_CARPET_START) * (mNW_PALETTE_SIZE + 0x2000); + + mRmTp_CopyFloorData(item->seg1, item_no - ITM_CARPET_START); + if (mSP_SearchItemCategoryPriority(item_no, mSP_KIND_CARPET, mSP_LISTTYPE_COMMON, NULL) || + mSP_SearchItemCategoryPriority(item_no, mSP_KIND_CARPET, mSP_LISTTYPE_UNCOMMON, NULL) || + mSP_SearchItemCategoryPriority(item_no, mSP_KIND_CARPET, mSP_LISTTYPE_RARE, NULL)) { + item->price = mSP_ItemNo2ItemPrice(item_no); + } else { + item->price = 0; + } +} + +static void mCL_music_init(mCL_Item_c* item, mActor_name_t item_no) { + item->profile = NULL; + item->gfx_type = mCL_DRAW_TYPE_MUSIC; + item->price = 0; + item->timer = 60; + item->scale = 0.55f; + item->pos_y = -90.0f; + item->ftr_actor.name = (item_no - ITM_MINIDISK_START); +} + +static void mCL_item_data_set(Submenu* submenu, int page_no) { + mCL_Ovl_c* catalog_ovl = submenu->overlay->catalog_ovl; + mCL_Menu_c* page = &catalog_ovl->menu_data[page_no]; + mActor_name_t item_no; + mCL_Item_c* item; + mActor_name_t* item_list; + u8* item_name; + int i; + + catalog_ovl->item_data_idx ^= 1; + item = &catalog_ovl->item_data[catalog_ovl->item_data_idx]; + item_no = page->item_list[page->top_idx + page->y_idx]; + item->item_no = item_no; + + if (ITEM_IS_FTR(item_no)) { + mCL_furniture_init(item, item_no); + } else if (ITEM_IS_ITEM1(item_no)) { + int cat = ITEM_NAME_GET_CAT(item_no); + + xyz_t_move(&item->ftr_actor.position, &ZeroVec); + + if (cat == ITEM1_CAT_PAPER) { + mCL_paper_init(item, item_no); + } else if (cat == ITEM1_CAT_WALL) { + mCL_wall_init(item, item_no); + } else if (cat == ITEM1_CAT_CARPET) { + mCL_carpet_init(item, item_no); + } else if (cat == ITEM1_CAT_MINIDISK) { + mCL_music_init(item, item_no); + } else { + item->gfx_type = mCL_DRAW_TYPE_NONE; + item->price = 0; + } + } else { + item->gfx_type = mCL_DRAW_TYPE_NONE; + item->price = 0; + } + + item_name = (u8*)page->item_name; + item_list = &page->item_list[page->top_idx]; + for (i = 0; i < mCL_MENU_PAGE_SIZE; i++) { + mIN_copy_name_str(item_name, *item_list); + item_list++; + item_name += mIN_ITEM_NAME_LEN; + } +} + +static void mCL_item_move(mCL_Ovl_c* catalog_ovl) { + mCL_Item_c* item = catalog_ovl->item_data; + int i; + + for (i = 0; i < mCL_ITEM_DATA_NUM; i++) { + if (item->gfx_type == 0) { + aFTR_tex_anim_c* tex_anim; + aFTR_PROFILE* profile = item->profile; + cKF_SkeletonInfo_R_c* keyframe = &item->ftr_actor.keyframe; + + if (profile != NULL) { + tex_anim = profile->tex_anim; + + if (tex_anim != NULL) { + int count = tex_anim->animation_count; + + item->ftr_actor.tex_animation.frame++; + if (item->ftr_actor.tex_animation.frame >= count || item->ftr_actor.tex_animation.frame < 0) { + item->ftr_actor.tex_animation.frame = 0; + } + } + } + + if (profile->rig != NULL || (keyframe->skeleton != NULL && keyframe->animation != NULL)) { + if (cKF_SkeletonInfo_R_play(keyframe) == cKF_STATE_STOPPED) { + if (item->timer != 0) { + item->timer--; + } else { + /* Animation is ready to be played in the opposite direction */ + f32 tmp; + + item->timer = 15; + tmp = keyframe->frame_control.start_frame; + keyframe->frame_control.start_frame = keyframe->frame_control.end_frame; + keyframe->frame_control.end_frame = tmp; + } + } + } + + item->ftr_actor.angle_y += 1.25f; /* Step rotation */ + + if (item->ftr_actor.angle_y > 360.0f) { + item->ftr_actor.angle_y -= 360.0f; + } + } else if (item->gfx_type == 4) { + item->timer--; + item->pos_y = -90.0f + sin_s(item->timer * DEG2SHORT_ANGLE(6.0f)) * 6.0f; + item->ftr_actor.position.x = sin_s(item->timer * DEG2SHORT_ANGLE(3.0f)) * 6.0f; + } + + item++; + } +} + +static void mCL_move_Move(Submenu* submenu, mSM_MenuInfo_c* menu_info) { + submenu->overlay->move_Move_proc(submenu, menu_info); +} + +static void mCL_move_Play(Submenu* submenu, mSM_MenuInfo_c* menu_info) { + mCL_Ovl_c* catalog_ovl = submenu->overlay->catalog_ovl; + + if (menu_info->_2C == FALSE) { + menu_info->_2C = TRUE; + submenu->overlay->tag_ovl->chg_tag_func_proc(submenu, 14, 0, 0, 0.0f, 0.0f); + } else if (catalog_ovl->page_timer != 0) { + catalog_ovl->page_timer--; + menu_info->position[1] = 100.0f * sinf_table((f32)catalog_ovl->page_timer * 0.078539819f); // needs macro? + + if (catalog_ovl->page_timer == 20) { + u8* page_order = catalog_ovl->page_order; + int i; + + for (i = 0; i < mCL_MENU_NUM; i++, page_order++) { + if (*page_order == catalog_ovl->page_no) { + break; + } + } + + for (i; i > 0; i--) { + page_order[0] = page_order[-1]; + page_order--; + } + + catalog_ovl->page_order[0] = catalog_ovl->page_no; + } else if (catalog_ovl->page_timer == 0) { + menu_info->position[1] = 0.0f; + submenu->overlay->hand_ovl->set_hand_func(submenu); + } + + mCL_item_move(catalog_ovl); + } else { + submenu->overlay->menu_control.tag_move_func(submenu, menu_info); + + if (catalog_ovl->change_flag) { + catalog_ovl->menu_data[catalog_ovl->page_order[0]].y_idx = submenu->overlay->tag_ovl->tags[0]._40; + mCL_item_data_set(submenu, catalog_ovl->page_order[0]); + catalog_ovl->change_flag = FALSE; + } else { + if (catalog_ovl->page_timer == 40) { + mCL_item_data_set(submenu, catalog_ovl->page_no); + } else { + mCL_item_move(catalog_ovl); + } + } + } +} + +static void mCL_move_End(Submenu* submenu, mSM_MenuInfo_c* menu_info) { + submenu->overlay->move_End_proc(submenu, menu_info); +} + +typedef void (*mCL_OVL_MOVE_PROC)(Submenu*, mSM_MenuInfo_c*); + +static void mCL_catalog_ovl_move(Submenu* submenu) { + static mCL_OVL_MOVE_PROC ovl_move_proc[] = { + &mCL_move_Move, &mCL_move_Play, (mCL_OVL_MOVE_PROC)none_proc1, (mCL_OVL_MOVE_PROC)none_proc1, mCL_move_End, + }; + + mSM_MenuInfo_c* menu_info = &submenu->overlay->menu_info[mSM_OVL_CATALOG]; + mCL_Ovl_c* catalog_ovl = submenu->overlay->catalog_ovl; + + menu_info->pre_move_func(submenu); + (*ovl_move_proc[menu_info->proc_status])(submenu, menu_info); + + catalog_ovl->counter = (catalog_ovl->counter + 1) % 35; + if (catalog_ovl->counter < 17) { + catalog_ovl->alpha = ((f32)catalog_ovl->counter * 255.0f) / 17.0f; + } else { + catalog_ovl->alpha = ((f32)(35 - catalog_ovl->counter) * 255.0f) / 18.0f; + } +} + +static void mCL_LoadTexturePal(aFTR_PROFILE* profile, GAME* game) { + OPEN_DISP(game->graph); + + if (profile->opaque0 != NULL || profile->opaque1 != NULL || profile->rig != NULL) { + if (profile->texture != NULL) { + gDPLoadTextureBlockS(NEXT_POLY_OPA_DISP, profile->texture, G_IM_FMT_I, G_IM_SIZ_8b, 64, 64, 0, + G_TX_MIRROR | G_TX_WRAP, G_TX_MIRROR | G_TX_WRAP, 7, 7, G_TX_NOLOD, G_TX_NOLOD); + } + + if (profile->palette != NULL) { + gDPLoadTLUT_pal16(NEXT_POLY_OPA_DISP, 15, profile->palette); + } + } + + if (profile->translucent0 != NULL || profile->translucent1 != NULL || profile->rig != NULL) { + if (profile->texture != NULL) { + gDPLoadTextureBlockS(NEXT_POLY_XLU_DISP, profile->texture, G_IM_FMT_I, G_IM_SIZ_8b, 64, 64, 0, + G_TX_MIRROR | G_TX_WRAP, G_TX_MIRROR | G_TX_WRAP, 7, 7, G_TX_NOLOD, G_TX_NOLOD); + } + + if (profile->palette != NULL) { + gDPLoadTLUT_pal16(NEXT_POLY_XLU_DISP, 15, profile->palette); + } + } + + CLOSE_DISP(game->graph); +} + +static void mCL_SetKankyoMapping(aFTR_PROFILE* profile, GAME_PLAY* play) { + static xyz_t light_direction = { 0.0f, 60.0f, 60.0f }; + static xyz_t obj_pos = { 0.0f, 25.0f, 0.0f }; + xyz_t eye_pos; + + eye_pos.x = 0.0f; + eye_pos.y = 25.0f + sin_s(0x900) * 330.0f; + eye_pos.z = cos_s(0x900) * 330.0f; + + if (profile->kankyo_map == aFTR_KANKYO_MAP_OPA) { + HiliteReflect_init(&obj_pos, &eye_pos, &light_direction, play->game.graph); + } else if (profile->kankyo_map == aFTR_KANKYO_MAP_XLU) { + HiliteReflect_xlu_init(&obj_pos, &eye_pos, &light_direction, play->game.graph); + } +} + +static void mCL_SetLoopTextureAnime(mCL_Item_c* item, aFTR_PROFILE* profile, GAME* game) { + aFTR_tex_anim_c* tex_anime = profile->tex_anim; + + if (tex_anime != NULL) { + u8* tex_p = tex_anime->animation[item->ftr_actor.tex_animation.frame]; + + OPEN_DISP(game->graph); + + gSPSegment(NEXT_POLY_OPA_DISP, G_MWO_SEGMENT_8, tex_p); + gSPSegment(NEXT_POLY_XLU_DISP, G_MWO_SEGMENT_8, tex_p); + + CLOSE_DISP(game->graph); + } +} + +static void mCL_DrawRegistModel(aFTR_PROFILE* profile, GAME* game) { + OPEN_DISP(game->graph); + + if (profile->opaque0 != NULL) { + gSPDisplayList(NEXT_POLY_OPA_DISP, profile->opaque0); + } + + if (profile->opaque1 != NULL) { + gSPDisplayList(NEXT_POLY_OPA_DISP, profile->opaque1); + } + + if (profile->translucent0 != NULL) { + gSPDisplayList(NEXT_POLY_XLU_DISP, profile->translucent0); + } + + if (profile->translucent1 != NULL) { + gSPDisplayList(NEXT_POLY_XLU_DISP, profile->translucent1); + } + + CLOSE_DISP(game->graph); +} + +static void mCL_DrawSkelShape(mCL_Item_c* item, aFTR_PROFILE* profile, GAME* game) { + if (profile->rig != NULL) { + cKF_SkeletonInfo_R_c* keyframe = &item->ftr_actor.keyframe; + int mtx_idx = game->frame_counter & 1; + Mtx* mtx = item->ftr_actor.skeleton_mtx[mtx_idx]; + + cKF_Si3_draw_R_SV(game, keyframe, mtx, NULL, NULL, NULL); + } +} + +static void mCL_DrawUniqueShape(mCL_Item_c* item, aFTR_PROFILE* profile, GAME* game) { + if (profile->vtable != NULL && profile->vtable->draw_proc != NULL) { + OPEN_DISP(game->graph); + + gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(game->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPMatrix(NEXT_POLY_XLU_DISP, _Matrix_to_Mtx_new(game->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + + CLOSE_DISP(game->graph); + + profile->vtable->draw_proc(&item->ftr_actor, NULL, game, item->seg1); + } +} + +static void mCL_furniture_draw(mCL_Item_c* item, GAME* game) { + // clang-format off + static Lights0 light_data = { + 105, 90, 90, + 0, + 105, 90, 90, + 0, + + 255, 255, 245, + 0, + 255, 255, 245, + 0, + 0, 60, 60, + 0, + }; + // clang-format on + + aFTR_PROFILE* profile; + FTR_ACTOR* ftr_actor; + Gfx* xlu_main; + Gfx* xlu_first; + int edge_alpha; + f32 scale; + + profile = item->profile; + ftr_actor = &item->ftr_actor; + + OPEN_DISP(game->graph); + xlu_main = NOW_POLY_XLU_DISP; + NEXT_POLY_XLU_DISP; + xlu_first = NOW_POLY_XLU_DISP; + + _texture_z_light_fog_prim(game->graph); + _texture_z_light_fog_prim_xlu(game->graph); + edge_alpha = aMR_GetAlphaEdge(ftr_actor->name); + + gDPSetTexEdgeAlpha(NEXT_POLY_OPA_DISP, edge_alpha); + gDPSetTexEdgeAlpha(NEXT_POLY_XLU_DISP, edge_alpha); + + if (aMR_DrawDolphinMode(ftr_actor->name)) { + gDPSetTextureAdjustMode(NEXT_POLY_OPA_DISP, G_TA_DOLPHIN); + gDPSetTextureAdjustMode(NEXT_POLY_XLU_DISP, G_TA_DOLPHIN); + } else { + gDPSetTextureAdjustMode(NEXT_POLY_OPA_DISP, G_TA_N64); + gDPSetTextureAdjustMode(NEXT_POLY_XLU_DISP, G_TA_N64); + } + + gSPSetLights0(NEXT_POLY_OPA_DISP, light_data); + gSPSetLights0(NEXT_POLY_XLU_DISP, light_data); + + mCL_LoadTexturePal(profile, game); + mCL_SetKankyoMapping(profile, (GAME_PLAY*)game); + + scale = item->scale; + Matrix_RotateY(RAD2SHORT_ANGLE2(DEG2RAD(ftr_actor->angle_y)), 0); + Matrix_scale(scale, scale, scale, 1); + Matrix_translate(ftr_actor->position.x, ftr_actor->position.y, ftr_actor->position.z, 1); + Matrix_scale(profile->scale, profile->scale, profile->scale, 1); + + gSPMatrix(NEXT_POLY_OPA_DISP, _Matrix_to_Mtx_new(game->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + + mCL_SetLoopTextureAnime(item, profile, game); + mCL_DrawRegistModel(profile, game); + mCL_DrawSkelShape(item, profile, game); + mCL_DrawUniqueShape(item, profile, game); + + gSPEndDisplayList(NEXT_POLY_XLU_DISP); + gSPBranchList(xlu_main, NOW_POLY_XLU_DISP); + gSPDisplayList(NEXT_POLY_OPA_DISP, xlu_first); + + gDPSetTexEdgeAlpha(NEXT_POLY_OPA_DISP, 144); + gDPSetTexEdgeAlpha(NEXT_POLY_XLU_DISP, 144); + + gDPSetTextureAdjustMode(NEXT_POLY_OPA_DISP, G_TA_N64); + gDPSetTextureAdjustMode(NEXT_POLY_XLU_DISP, G_TA_N64); + + CLOSE_DISP(game->graph); +} + +extern Gfx mCL_lat_letter_sen_mode[]; + +static void mCL_paper_draw(mCL_Item_c* item, mSM_MenuInfo_c* menu_info, GRAPH* graph) { + Gfx* gfx; + + OPEN_DISP(graph); + gfx = NOW_POLY_OPA_DISP; + + gSPDisplayList(gfx++, paper_disp_model[item->ftr_actor.name]); + + if (paper_disp_sen_model[item->ftr_actor.name] != NULL) { + gSPDisplayList(gfx++, mCL_lat_letter_sen_mode); + gSPDisplayList(gfx++, paper_disp_sen_model[item->ftr_actor.name]); + } + + SET_POLY_OPA_DISP(gfx); + CLOSE_DISP(graph); +} + +extern Gfx mCL_rom_myhome1_wall_model[]; + +static void mCL_wall_draw(mCL_Item_c* item, mSM_MenuInfo_c* menu_info, GRAPH* graph) { + u8* wall_p = item->seg1; + u8* tex0 = wall_p + mNW_PALETTE_SIZE; + u8* tex1 = wall_p + mNW_PALETTE_SIZE + 0x800; + Gfx* gfx; + + OPEN_DISP(graph); + gfx = NOW_POLY_OPA_DISP; + + gSPSegment(gfx++, G_MWO_SEGMENT_A, wall_p); /* palette */ + gSPSegment(gfx++, G_MWO_SEGMENT_8, tex0); /* texture 0 */ + gSPSegment(gfx++, G_MWO_SEGMENT_9, tex1); /* texture 1 */ + gSPDisplayList(gfx++, mCL_rom_myhome1_wall_model); + + SET_POLY_OPA_DISP(gfx); + CLOSE_DISP(graph); +} + +extern Gfx mCL_rom_myhome1_floor_model[]; + +static void mCL_carpet_draw(mCL_Item_c* item, mSM_MenuInfo_c* menu_info, GRAPH* graph) { + u8* floor_p = item->seg1; + u8* tex0 = floor_p + mNW_PALETTE_SIZE; + u8* tex1 = floor_p + mNW_PALETTE_SIZE + 0x800; + u8* tex2 = floor_p + mNW_PALETTE_SIZE + 0x1000; + u8* tex3 = floor_p + mNW_PALETTE_SIZE + 0x1800; + Gfx* gfx; + + OPEN_DISP(graph); + gfx = NOW_POLY_OPA_DISP; + + gSPSegment(gfx++, G_MWO_SEGMENT_D, floor_p); /* palette */ + gSPSegment(gfx++, G_MWO_SEGMENT_8, tex0); /* texture 0 */ + gSPSegment(gfx++, G_MWO_SEGMENT_9, tex1); /* texture 1 */ + gSPSegment(gfx++, G_MWO_SEGMENT_A, tex2); /* texture 2 */ + gSPSegment(gfx++, G_MWO_SEGMENT_B, tex3); /* texture 3 */ + gSPDisplayList(gfx++, mCL_rom_myhome1_floor_model); + + SET_POLY_OPA_DISP(gfx); + CLOSE_DISP(graph); +} + +extern Gfx mCL_music_model[]; + +static void mCL_music_draw(mCL_Item_c* item, mSM_MenuInfo_c* menu_info, GRAPH* graph) { + Gfx* gfx; + + OPEN_DISP(graph); + gfx = NOW_POLY_OPA_DISP; + + Matrix_RotateZ(cos_s(item->timer * 0x222) * 0x1000, 1); + gSPMatrix(gfx++, _Matrix_to_Mtx_new(graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(gfx++, mCL_music_model); + + SET_POLY_OPA_DISP(gfx); + CLOSE_DISP(graph); +} + +extern Gfx mCL_lat_letter_mode[]; +typedef void (*mCL_ITEM_DRAW_PROC)(mCL_Item_c*, mSM_MenuInfo_c*, GRAPH*); + +static void mCL_item_draw(Submenu* submenu, mSM_MenuInfo_c* menu_info, GAME* game, GRAPH* graph, mCL_Item_c* item, + f32 pos_x, f32 pos_y) { + static mCL_ITEM_DRAW_PROC draw_proc[mCL_DRAW_TYPE_NUM] = { + (mCL_ITEM_DRAW_PROC)&none_proc1, &mCL_paper_draw, &mCL_wall_draw, &mCL_carpet_draw, &mCL_music_draw, + }; + + if (item->gfx_type == mCL_DRAW_TYPE_FTR) { + Matrix_push(); + OPEN_DISP(graph); + + gDPPipeSync(NEXT_POLY_OPA_DISP); + submenu->overlay->change_view_proc(graph, 330.0f, 25.0f, (pos_x + 15.0f) * 4.0f, (pos_y - 38.0f) * -4.0f, 0x900, + 0x100, 0x100); + mCL_furniture_draw(item, game); + submenu->overlay->setup_view_proc(submenu, graph, 0); + + CLOSE_DISP(graph); + Matrix_pull(); + } else if (item->gfx_type != mCL_DRAW_TYPE_NONE) { + Gfx* gfx; + + Matrix_scale(16.0f, 16.0f, 1.0f, 0); + Matrix_translate((-143.0f + pos_x) + 58.0f + item->ftr_actor.position.x, (97.0f + pos_y) + item->pos_y, 0.0f, + 1); + Matrix_scale(item->scale, item->scale, 1.0f, 1); + + OPEN_DISP(graph); + gfx = NOW_POLY_OPA_DISP; + + gSPMatrix(gfx++, _Matrix_to_Mtx_new(game->graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(gfx++, mCL_lat_letter_mode); + + SET_POLY_OPA_DISP(gfx); + CLOSE_DISP(graph); + + (*draw_proc[item->gfx_type])(item, menu_info, graph); + } +} + +static void mCL_price_draw(Submenu* submenu, GAME* game, GRAPH* graph, mCL_Item_c* item, f32 pos_x, f32 pos_y) { + submenu->overlay->set_char_matrix_proc(graph); + + if (item->price == 0) { + // clang-format off + mFont_SetLineStrings( + game, + not_sell, sizeof(not_sell), + (-112.0f + pos_x) + 160.0f, 120 - (-47.0f + pos_y), + 205, 0, 0, 255, + FALSE, + TRUE, + 0.875f, 0.875f, + mFont_MODE_POLY + ); + // clang-format on + } else { + u8 price_str[6]; + f32 str_x; + f32 str_y; + u32 price; + f32 width; + int i; + + mFont_UnintToString(price_str, sizeof(price_str), item->price, 5, TRUE, FALSE, TRUE); + + price = item->price; + for (i = 1; i < 6; i++) { + price /= 10; + + if (price == 0) { + break; + } + } + + if (i > 3) { + i++; /* account for comma */ + } + + width = mFont_GetStringWidth(price_str, i, TRUE) * 0.875f; + str_x = 160.0f + (-73.5f + pos_x) - width; + str_y = 120.0f - (-47.0f + pos_y); + + // clang-format off + mFont_SetLineStrings( + game, + price_str, sizeof(price_str), + str_x, str_y, + 205, 0, 0, 255, + FALSE, + TRUE, + 0.875f, 0.875f, + mFont_MODE_POLY + ); + // clang-format on + } +} + +extern Gfx clg_win_na1T_model[]; +extern Gfx clg_win_na2T_model[]; +extern Gfx clg_win_na3T_model[]; +extern Gfx clg_win_na4T_model[]; +extern Gfx clg_win_na5T_model[]; +extern Gfx clg_win_na6T_model[]; +extern Gfx clg_win_na7T_model[]; + +extern Gfx clg_mwin_mode[]; +extern Gfx clg_mwin1_model[]; +extern Gfx clg_name_mode[]; +extern Gfx clg_mwin2_model[]; +extern Gfx clg_win_cbT_model[]; +extern Gfx clg_win_beruT_model[]; +extern Gfx clg_win_shirushi1T_model[]; +extern Gfx clg_win_hoshiT_model[]; + +static void mCL_set_page_dl(Submenu* submenu, mSM_MenuInfo_c* menu_info, GAME* game, GRAPH* graph, int page_no, + int disp_entries_flag) { + static Gfx* name_disp[] = { + clg_win_na1T_model, clg_win_na2T_model, clg_win_na3T_model, clg_win_na4T_model, + clg_win_na5T_model, clg_win_na6T_model, clg_win_na7T_model, + }; + + static int item_name_color[][3] = { { 155, 155, 155 }, { 255, 255, 255 } }; + + mCL_Ovl_c* catalog_ovl = submenu->overlay->catalog_ovl; + mCL_win_data_c* win_data = &mCL_win_data[page_no]; + mCL_Menu_c* menu = &catalog_ovl->menu_data[page_no]; + mCL_Item_c* item; + f32 pos_x = menu_info->position[0]; // f31 + f32 pos_y; // f30 + int i; + Gfx* gfx; + int x; + int y; + + if (catalog_ovl->page_timer == 0 || page_no == catalog_ovl->page_no) { + item = &catalog_ovl->item_data[catalog_ovl->item_data_idx]; + pos_y = menu_info->position[1]; + } else { + item = &catalog_ovl->item_data[catalog_ovl->item_data_idx ^ 1]; + pos_y = -menu_info->position[1]; + } + + Matrix_scale(16.0f, 16.0f, 1.0f, 0); + Matrix_translate(pos_x, pos_y, 140.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); + + if (disp_entries_flag) { + gSPDisplayList(gfx++, clg_mwin_mode); + gDPLoadTLUT_Dolphin(gfx++, 14, 16, 1, win_data->win_pal); + gDPSetTextureImage_Dolphin(gfx++, G_IM_FMT_CI, G_IM_SIZ_4b, 32, 32, win_data->win_tex); + gDPSetTile_Dolphin(gfx++, G_DOLPHIN_TLUT_DEFAULT_MODE, G_TX_RENDERTILE, 14, GX_REPEAT, GX_REPEAT, GX_CLAMP, + GX_CLAMP); + gDPTileSync(gfx++); + x = (int)(-submenu->overlay->menu_control.texture_pos[0] * 4.0f); + y = (int)(-submenu->overlay->menu_control.texture_pos[1] * 4.0f); + gDPSetTileSize_Dolphin(gfx++, G_TX_RENDERTILE, x, y, 32, 32); + gSPDisplayList(gfx++, clg_mwin1_model); + gSPDisplayList(gfx++, clg_name_mode); + + for (i = 0; i < mCL_MENU_PAGE_SIZE; i++) { + if (i == menu->y_idx) { + gDPSetPrimColor(gfx++, 0, 255, 205, 0, 0, 255); + } else { + gDPSetPrimColor(gfx++, 0, 255, 10, 10, 50, 255); + } + + gSPDisplayList(gfx++, name_disp[i]); + } + + gSPDisplayList(gfx++, clg_mwin2_model); + gSPDisplayList(gfx++, clg_win_cbT_model); + + if (item->price != 0) { + gSPDisplayList(gfx++, clg_win_beruT_model); + } + + gDPSetPrimColor(gfx++, 0, 255, 0, 50, 255, catalog_ovl->alpha); + + if (menu->top_idx != 0) { + Matrix_push(); + Matrix_translate(-11.0f, 80.0f, 0.0f, 1); + + gSPMatrix(gfx++, _Matrix_to_Mtx_new(graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(gfx++, clg_win_shirushi1T_model); + + Matrix_pull(); + } + + if (menu->top_idx + mCL_MENU_PAGE_SIZE < menu->item_count) { + Matrix_push(); + Matrix_translate(-11.0f, -66.0f, 0.0f, 1); + Matrix_RotateZ(DEG2SHORT_ANGLE2(-180.0f), 1); + + gSPMatrix(gfx++, _Matrix_to_Mtx_new(graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(gfx++, clg_win_shirushi1T_model); + + Matrix_pull(); + } + + gSPMatrix(gfx++, _Matrix_to_Mtx_new(graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + } + + SET_POLY_OPA_DISP(gfx); + CLOSE_DISP(graph); + + if (disp_entries_flag) { + u8* item_name = menu->item_name[0]; + f32 str_x; + f32 str_y; + f32 tmp_x; + int idx; + int idx_str_len; + f32 idx_str_width; + u8 idx_str[3]; + f32 tmp; + int width; + int i; + + submenu->overlay->set_char_matrix_proc(graph); + str_x = 160.0f + ((-64.0f + pos_x) + 24.0f); // r28 + str_y = 120.0f - ((69.0f + pos_y) - 2.0f); // r27 + for (i = 0; i < mCL_MENU_PAGE_SIZE; i++) { + int col_idx; + + if (i == menu->y_idx) { + col_idx = 1; + } else { + col_idx = 0; + } + + // clang-format off + mFont_SetLineStrings( + game, + item_name, mIN_ITEM_NAME_LEN, + str_x, str_y, + item_name_color[col_idx][0], item_name_color[col_idx][1], item_name_color[col_idx][2], 255, + FALSE, + TRUE, + 0.875f, 0.875f, + mFont_MODE_POLY + ); + // clang-format on + + str_y += 18.0f; + item_name += mIN_ITEM_NAME_LEN; + } + + if (menu->item_count != 0) { + idx = menu->top_idx + menu->y_idx + 1; + } else { + idx = 0; + } + + idx_str_len = mFont_UnintToString(idx_str, sizeof(idx_str), idx, sizeof(idx_str), TRUE, FALSE, TRUE); + width = mFont_GetStringWidth(idx_str, idx_str_len, TRUE); + str_x = 160.0f + (28.0f + pos_x - width * 0.875f); + str_y = 120.0f - ((-62.0f + pos_y) + 1.0f); + + // clang-format off + mFont_SetLineStrings( + game, + idx_str, idx_str_len, + str_x, str_y, + 20, 20, 70, 255, + FALSE, + TRUE, + 0.875f, 0.875f, + mFont_MODE_POLY + ); + // clang-format on + + mFont_UnintToString(idx_str, sizeof(idx_str), menu->item_count, sizeof(idx_str), TRUE, FALSE, TRUE); + str_x = (pos_x + 40.0f) + -2.0f; + idx_str_width = 7.0f + (mMl_strlen(idx_str, sizeof(idx_str), CHAR_SPACE) * 8.0f) * 0.875f; + tmp = str_x + (idx_str_width); + + // clang-format off + mFont_SetLineStrings( + game, + idx_str, sizeof(idx_str), + 160.0f + str_x, str_y, + 20, 20, 70, 255, + FALSE, + TRUE, + 0.875f, 0.875f, + mFont_MODE_POLY + ); + // clang-format on + + if (menu->completed_flag) { + Gfx* gfx; + + Matrix_scale(16.0f, 16.0f, 1.0f, 0); + Matrix_translate(tmp, (97.0f + pos_y) - 163.0f, 140.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++, mCL_lat_letter_mode); + gSPDisplayList(gfx++, clg_win_hoshiT_model); + + SET_POLY_OPA_DISP(gfx); + CLOSE_DISP(graph); + } + + if (menu->item_count != 0) { + mCL_item_draw(submenu, menu_info, game, graph, item, pos_x, pos_y); + mCL_price_draw(submenu, game, graph, item, pos_x, pos_y); + } + } +} + +extern Gfx clg_tag_win_mode[]; +extern Gfx clg_tag_picture_mode[]; + +static void mCL_set_wchange_dl(Submenu* submenu, mSM_MenuInfo_c* menu_info, GRAPH* graph) { + mCL_Ovl_c* catalog_ovl = submenu->overlay->catalog_ovl; + mCL_win_data_c* win_data; + int i; + Gfx* gfx; + + Matrix_scale(16.0f, 16.0f, 1.0f, 0); + Matrix_translate(menu_info->position[0], -menu_info->position[1], 140.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++, clg_mwin_mode); + gDPSetCycleType(gfx++, G_CYC_1CYCLE); + gDPSetTextureLUT(gfx++, G_TT_NONE); + + win_data = mCL_win_data; + gSPDisplayList(gfx++, clg_tag_win_mode); + gDPSetPrimColor(gfx++, 0, 255, 0, 0, 0, 255); + gDPSetEnvColor(gfx++, 50, 50, 125, 255); + + for (i = 0; i < mCL_MENU_NUM; i++, win_data++) { + if (i != catalog_ovl->page_no) { + gSPDisplayList(gfx++, win_data->sel_gfx0); + } + } + + win_data = mCL_win_data; + gSPDisplayList(gfx++, clg_tag_picture_mode); + gDPSetPrimColor(gfx++, 0, 255, 145, 145, 205, 255); + + for (i = 0; i < mCL_MENU_NUM; i++, win_data++) { + if (i != catalog_ovl->page_no) { + gSPDisplayList(gfx++, win_data->sel_gfx1); + } + } + + Matrix_translate(0.0f, menu_info->position[1] * 2.0f, 0.0f, 1); + gSPMatrix(gfx++, _Matrix_to_Mtx_new(graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + + win_data = &mCL_win_data[catalog_ovl->page_no]; + gSPDisplayList(gfx++, clg_tag_win_mode); + gDPSetPrimColor(gfx++, 0, 255, 0, 20, 110, 255); + gDPSetEnvColor(gfx++, 50, 50, 255, 255); + gSPDisplayList(gfx++, win_data->sel_gfx0); + gSPDisplayList(gfx++, clg_tag_picture_mode); + gDPSetPrimColor(gfx++, 0, 255, 255, 255, 255, 255); + gSPDisplayList(gfx++, win_data->sel_gfx1); + + if (catalog_ovl->page_timer < 20) { + gSPDisplayList(gfx++, clg_name_mode); + gSPDisplayList(gfx++, clg_win_cbT_model); + } + + SET_POLY_OPA_DISP(gfx); + CLOSE_DISP(graph); +} + +static void mCL_set_dl(Submenu* submenu, mSM_MenuInfo_c* menu_info, GAME* game) { + mCL_Ovl_c* catalog_ovl = submenu->overlay->catalog_ovl; + u8* page_order = catalog_ovl->page_order + (mCL_MENU_NUM - 1); + GRAPH* graph = game->graph; + int flag; + int i; + + for (i = mCL_MENU_NUM - 1; i >= 0; i--) { + if (i == 0 || *page_order == catalog_ovl->page_no || + (catalog_ovl->page_timer != 0 && i == 1 && page_order[-1] == catalog_ovl->page_no)) { + flag = TRUE; + } else { + flag = FALSE; + } + + mCL_set_page_dl(submenu, menu_info, game, graph, *page_order, flag); + page_order--; + } + + mCL_set_wchange_dl(submenu, menu_info, graph); + submenu->overlay->menu_control.tag_draw_func(submenu, game, mSM_OVL_CATALOG); +} + +static void mCL_catalog_ovl_draw(Submenu* submenu, GAME* game) { + mSM_MenuInfo_c* menu_info = &submenu->overlay->menu_info[mSM_OVL_CATALOG]; + + menu_info->pre_draw_func(submenu, game); + mCL_set_dl(submenu, menu_info, game); +} + +extern void mCL_catalog_ovl_set_proc(Submenu* submenu) { + mSM_Control_c* control = &submenu->overlay->menu_control; + + control->menu_move_func = &mCL_catalog_ovl_move; + control->menu_draw_func = &mCL_catalog_ovl_draw; +} + +static int mCL_check_item_collect_bit(u32* bit_data, int idx) { + int entry = idx >> 5; + int subidx = idx & 0x1F; + + if (((1 << subidx) & bit_data[entry]) != 0) { + return TRUE; + } + + return FALSE; +} + +static void mCL_catalog_ovl_init(Submenu* submenu) { + int j; + mCL_Ovl_c* catalog_ovl = submenu->overlay->catalog_ovl; + mSM_MenuInfo_c* menu_info = &submenu->overlay->menu_info[mSM_OVL_CATALOG]; + int i; + mCL_Menu_c* menu; + mActor_name_t* item_list; + u8* item_name; + int k; + mCL_item_info_c* item_info; + u16* idx_list; + mCL_ftr_info_c* ftr_info; + u32* bit_data; + + submenu->overlay->move_chg_base_proc(menu_info, mSM_MOVE_IN_RIGHT); + + catalog_ovl->item_data[0].ftr_actor.scale.x = 1.0f; + catalog_ovl->item_data[0].ftr_actor.scale.y = 1.0f; + catalog_ovl->item_data[0].ftr_actor.scale.z = 1.0f; + catalog_ovl->item_data[0].gfx_type = mCL_DRAW_TYPE_NONE; + + catalog_ovl->item_data[1].ftr_actor.scale.x = 1.0f; + catalog_ovl->item_data[1].ftr_actor.scale.y = 1.0f; + catalog_ovl->item_data[1].ftr_actor.scale.z = 1.0f; + catalog_ovl->item_data[1].gfx_type = mCL_DRAW_TYPE_NONE; + + submenu->overlay->menu_control.animation_flag = FALSE; + + ftr_info = mCL_furniture_list; + menu = &catalog_ovl->menu_data[mCL_MENU_FTR]; + item_list = menu->item_list; + for (i = 0; i < mCL_FTR_LIST_COUNT; i++) { + if (mCL_check_item_collect_bit(Now_Private->furniture_collected_bitfield, ftr_info->ftr_idx)) { + *item_list++ = mRmTp_FtrIdx2FtrItemNo(ftr_info->ftr_idx, mRmTp_DIRECT_SOUTH); + menu->item_count++; + } + + ftr_info++; + } + + menu++; + item_info = &mCL_item_idx_data[mCL_MENU_WALL]; + for (k = mCL_MENU_WALL; k < mCL_MENU_NUM; k++) { + if (k == mCL_MENU_WALL) { + bit_data = Now_Private->wall_collected_bitfield; + } else if (k == mCL_MENU_CARPET) { + bit_data = Now_Private->carpet_collected_bitfield; + } else if (k == mCL_MENU_PAPER) { + bit_data = Now_Private->paper_collected_bitfield; + } else if (k == mCL_MENU_MUSIC) { + bit_data = Now_Private->music_collected_bitfield; + } else { + bit_data = Now_Private->furniture_collected_bitfield; + } + + idx_list = item_info->idx_list_p; + item_list = menu->item_list; + + for (j = 0; j < item_info->list_size; j++, idx_list++) { + if (mCL_check_item_collect_bit(bit_data, *idx_list)) { + if (k == mCL_MENU_WALL) { + *item_list = ITM_WALL_START + *idx_list; + } else if (k == mCL_MENU_CARPET) { + *item_list = ITM_CARPET_START + *idx_list; + } else if (k == mCL_MENU_PAPER) { + *item_list = ITM_PAPER_STACK_FOUR_START + *idx_list; + } else if (k == mCL_MENU_MUSIC) { + *item_list = ITM_MINIDISK_START + *idx_list; + } else { + *item_list = mRmTp_FtrIdx2FtrItemNo(*idx_list, mRmTp_DIRECT_SOUTH); + } + + item_list++; + menu->item_count++; + } + } + + menu++; + item_info++; + } + + item_info = mCL_item_idx_data; + menu = catalog_ovl->menu_data; + for (j = 0; j < mCL_MENU_NUM; j++) { + item_list = menu->item_list; + item_name = (u8*)menu->item_name; + catalog_ovl->page_order[j] = j; + for (i = 0; i < mCL_MENU_PAGE_SIZE; i++) { + mIN_copy_name_str(item_name, *item_list); + item_list++; + item_name += mIN_ITEM_NAME_LEN; + } + + if (menu->item_count == item_info->list_size) { + menu->completed_flag = TRUE; + } else { + menu->completed_flag = FALSE; + } + + menu++; + item_info++; + } + + menu = &catalog_ovl->menu_data[mCL_MENU_FTR]; + if (menu->item_list[0] != EMPTY_NO) { + mCL_furniture_init(catalog_ovl->item_data, menu->item_list[0]); + } +} + +extern void mCL_catalog_ovl_construct(Submenu* submenu) { + Submenu_Overlay_c* overlay = submenu->overlay; + + if (overlay->catalog_ovl == NULL) { + mCL_Ovl_c* catalog_ovl; + u8* seg0_p; + int i; + + overlay->catalog_ovl = (mCL_Ovl_c*)zelda_malloc(sizeof(mCL_Ovl_c)); + mem_clear((u8*)overlay->catalog_ovl, sizeof(mCL_Ovl_c), 0); + overlay->catalog_ovl->item_data_idx = 0; + seg0_p = (u8*)submenu->next_overlay_address; + + for (i = 0; i < mCL_ITEM_DATA_NUM; i++) { + overlay->catalog_ovl->item_data[i].seg0 = seg0_p; + seg0_p += 0x2000; + + overlay->catalog_ovl->item_data[i].seg1 = + (u8*)ALIGN_NEXT((u32)overlay->catalog_ovl->item_data[i].segment_data, 32); + } + + submenu->next_overlay_address = (char*)seg0_p; + } + + mCL_catalog_ovl_init(submenu); + mCL_catalog_ovl_set_proc(submenu); +} + +extern void mCL_catalog_ovl_destruct(Submenu* submenu) { + if (submenu->overlay->catalog_ovl != NULL) { + zelda_free(submenu->overlay->catalog_ovl); + } + + submenu->overlay->catalog_ovl = NULL; +} diff --git a/src/m_catalog_ovl_data.c_inc b/src/m_catalog_ovl_data.c_inc new file mode 100644 index 00000000..c450c85b --- /dev/null +++ b/src/m_catalog_ovl_data.c_inc @@ -0,0 +1,1363 @@ +// clang-format off +static mCL_ftr_info_c mCL_furniture_list[] = { + { 0x00D6, 0 }, + { 0x00D7, 0 }, + { 0x00DA, 0 }, + { 0x0019, 0 }, + { 0x000C, 13 }, + { 0x00D8, 0 }, + { 0x0155, 0 }, + { 0x00D9, 0 }, + { 0x00DB, 0 }, + { 0x0002, 0 }, + { 0x0056, 0 }, + { 0x0060, 0 }, + { 0x014F, 0 }, + { 0x014E, 0 }, + { 0x0011, 0 }, + { 0x0146, 0 }, + { 0x014C, 35 }, + { 0x0147, 0 }, + { 0x014D, 0 }, + { 0x0006, 0 }, + { 0x00E5, 0 }, + { 0x00E3, 0 }, + { 0x00E6, 0 }, + { 0x015E, 0 }, + { 0x00C1, 0 }, + { 0x00E4, 0 }, + { 0x0012, 0 }, + { 0x00E7, 0 }, + { 0x0164, 0 }, + { 0x0007, 0 }, + { 0x0085, 32 }, + { 0x0041, 1 }, + { 0x003E, 0 }, + { 0x005F, 0 }, + { 0x003F, 0 }, + { 0x003D, 33 }, + { 0x0057, 0 }, + { 0x0040, 0 }, + { 0x0018, 0 }, + { 0x0001, 0 }, + { 0x0143, 30 }, + { 0x00C7, 19 }, + { 0x001B, 5 }, + { 0x00C8, 0 }, + { 0x00C9, 19 }, + { 0x0144, 0 }, + { 0x00CA, 1 }, + { 0x00CD, 31 }, + { 0x00CE, 0 }, + { 0x000E, 0 }, + { 0x00DC, 0 }, + { 0x00DD, 0 }, + { 0x00DE, 0 }, + { 0x00E0, 0 }, + { 0x0158, 0 }, + { 0x0015, 0 }, + { 0x00E1, 0 }, + { 0x00DF, 0 }, + { 0x00E2, 28 }, + { 0x0009, 0 }, + { 0x03B1, 0 }, + { 0x03B6, 0 }, + { 0x001D, 0 }, + { 0x03B5, 0 }, + { 0x03B0, 0 }, + { 0x03B3, 19 }, + { 0x001C, 28 }, + { 0x03B4, 0 }, + { 0x03B2, 16 }, + { 0x001E, 0 }, + { 0x0059, 0 }, + { 0x0008, 0 }, + { 0x005E, 0 }, + { 0x005D, 0 }, + { 0x0013, 0 }, + { 0x0058, 0 }, + { 0x005C, 34 }, + { 0x005B, 0 }, + { 0x0087, 0 }, + { 0x007B, 0 }, + { 0x00D0, 0 }, + { 0x00D2, 0 }, + { 0x015A, 0 }, + { 0x00D3, 0 }, + { 0x001A, 0 }, + { 0x015B, 0 }, + { 0x03D4, 0 }, + { 0x00D4, 0 }, + { 0x00D5, 0 }, + { 0x000D, 0 }, + { 0x0067, 0 }, + { 0x006C, 0 }, + { 0x006A, 0 }, + { 0x006B, 0 }, + { 0x0066, 0 }, + { 0x0017, 0 }, + { 0x0069, 0 }, + { 0x006D, 28 }, + { 0x0068, 0 }, + { 0x000B, 0 }, + { 0x0005, 0 }, + { 0x015F, 9 }, + { 0x0064, 19 }, + { 0x004C, 0 }, + { 0x0043, 0 }, + { 0x0010, 0 }, + { 0x0163, 0 }, + { 0x0162, 0 }, + { 0x004D, 0 }, + { 0x0161, 0 }, + { 0x04BA, 0 }, + { 0x04C0, 0 }, + { 0x04BB, 0 }, + { 0x04BC, 0 }, + { 0x04C2, 0 }, + { 0x04B4, 0 }, + { 0x04C4, 0 }, + { 0x04BD, 3 }, + { 0x04B8, 0 }, + { 0x04B9, 0 }, + { 0x038A, 0 }, + { 0x0387, 0 }, + { 0x038B, 0 }, + { 0x000F, 0 }, + { 0x0386, 0 }, + { 0x038D, 2 }, + { 0x0388, 13 }, + { 0x0389, 0 }, + { 0x038C, 24 }, + { 0x0004, 0 }, + { 0x03D7, 0 }, + { 0x03D8, 0 }, + { 0x03DE, 0 }, + { 0x03DC, 0 }, + { 0x03D5, 0 }, + { 0x03D9, 0 }, + { 0x03DA, 0 }, + { 0x03D6, 0 }, + { 0x03DB, 0 }, + { 0x03DD, 8 }, + { 0x0130, 0 }, + { 0x0134, 0 }, + { 0x0132, 0 }, + { 0x0141, 0 }, + { 0x0014, 0 }, + { 0x0142, 0 }, + { 0x0135, 0 }, + { 0x0136, 28 }, + { 0x0157, 0 }, + { 0x0000, 0 }, + { 0x0131, 0 }, + { 0x0127, 0 }, + { 0x0496, 37 }, + { 0x0491, 0 }, + { 0x0490, 0 }, + { 0x04A1, 0 }, + { 0x049A, 0 }, + { 0x048D, 0 }, + { 0x04A8, 0 }, + { 0x04A7, 0 }, + { 0x0493, 0 }, + { 0x04E8, 0 }, + { 0x04A4, 0 }, + { 0x04A9, 0 }, + { 0x04B7, 0 }, + { 0x04DA, 0 }, + { 0x0499, 0 }, + { 0x04D1, 20 }, + { 0x04CE, 0 }, + { 0x04D2, 0 }, + { 0x04EE, 0 }, + { 0x04CF, 20 }, + { 0x04D0, 20 }, + { 0x04D3, 0 }, + { 0x04D5, 0 }, + { 0x04D4, 0 }, + { 0x04D6, 0 }, + { 0x03A8, 0 }, + { 0x03AA, 0 }, + { 0x03AC, 0 }, + { 0x03AE, 0 }, + { 0x03A6, 0 }, + { 0x03A4, 0 }, + { 0x03A7, 0 }, + { 0x03A9, 0 }, + { 0x03AB, 0 }, + { 0x03AD, 0 }, + { 0x03A5, 0 }, + { 0x03A3, 0 }, + { 0x0497, 0 }, + { 0x0129, 0 }, + { 0x047E, 0 }, + { 0x0483, 0 }, + { 0x0114, 0 }, + { 0x0125, 0 }, + { 0x0489, 0 }, + { 0x0117, 0 }, + { 0x0498, 0 }, + { 0x0485, 0 }, + { 0x0111, 0 }, + { 0x047F, 0 }, + { 0x047B, 0 }, + { 0x04AE, 0 }, + { 0x0107, 0 }, + { 0x048B, 0 }, + { 0x0486, 0 }, + { 0x04A3, 19 }, + { 0x0105, 0 }, + { 0x047D, 0 }, + { 0x00F8, 0 }, + { 0x013E, 0 }, + { 0x008A, 0 }, + { 0x008C, 0 }, + { 0x0095, 0 }, + { 0x008B, 0 }, + { 0x04C6, 0 }, + { 0x04BF, 0 }, + { 0x04C9, 21 }, + { 0x04C5, 0 }, + { 0x04CB, 0 }, + { 0x04C1, 18 }, + { 0x04BE, 22 }, + { 0x04C8, 0 }, + { 0x04C7, 0 }, + { 0x04C3, 0 }, + { 0x013B, 0 }, + { 0x012A, 0 }, + { 0x013A, 0 }, + { 0x0139, 0 }, + { 0x012B, 0 }, + { 0x013D, 0 }, + { 0x04A2, 0 }, + { 0x03B9, 0 }, + { 0x008E, 0 }, + { 0x049E, 0 }, + { 0x0482, 0 }, + { 0x007A, 0 }, + { 0x0480, 0 }, + { 0x0481, 0 }, + { 0x008F, 0 }, + { 0x049D, 0 }, + { 0x03BA, 0 }, + { 0x0093, 0 }, + { 0x0488, 0 }, + { 0x0098, 0 }, + { 0x0145, 0 }, + { 0x013C, 0 }, + { 0x0137, 36 }, + { 0x0151, 0 }, + { 0x013F, 15 }, + { 0x0138, 0 }, + { 0x0160, 0 }, + { 0x015C, 0 }, + { 0x0140, 0 }, + { 0x04B5, 29 }, + { 0x04AD, 0 }, + { 0x04CA, 0 }, + { 0x04AF, 0 }, + { 0x04B6, 6 }, + { 0x04AC, 0 }, + { 0x04CC, 0 }, + { 0x04B1, 0 }, + { 0x04CD, 0 }, + { 0x04B0, 0 }, + { 0x0391, 0 }, + { 0x00BE, 0 }, + { 0x003C, 0 }, + { 0x003B, 0 }, + { 0x003A, 38 }, + { 0x00FA, 0 }, + { 0x00F9, 0 }, + { 0x00FC, 0 }, + { 0x00F6, 0 }, + { 0x0084, 0 }, + { 0x0083, 0 }, + { 0x00F0, 0 }, + { 0x00BD, 0 }, + { 0x00F1, 0 }, + { 0x00BB, 0 }, + { 0x009C, 0 }, + { 0x00A0, 0 }, + { 0x00A1, 0 }, + { 0x009D, 0 }, + { 0x009F, 0 }, + { 0x009B, 0 }, + { 0x0074, 0 }, + { 0x00CF, 0 }, + { 0x007D, 0 }, + { 0x038E, 7 }, + { 0x0048, 7 }, + { 0x0045, 7 }, + { 0x0049, 7 }, + { 0x004A, 7 }, + { 0x0047, 7 }, + { 0x0046, 7 }, + { 0x0029, 0 }, + { 0x002A, 0 }, + { 0x0036, 7 }, + { 0x0037, 7 }, + { 0x0038, 7 }, + { 0x04B2, 0 }, + { 0x04B3, 0 }, + { 0x011B, 0 }, + { 0x011A, 0 }, + { 0x011C, 0 }, + { 0x0150, 0 }, + { 0x047A, 0 }, + { 0x0070, 0 }, + { 0x0071, 4 }, + { 0x008D, 0 }, + { 0x006F, 0 }, + { 0x0003, 0 }, + { 0x0016, 0 }, + { 0x000A, 0 }, + { 0x00A6, 0 }, + { 0x00A5, 28 }, + { 0x0392, 0 }, + { 0x038F, 0 }, + { 0x0121, 14 }, + { 0x0122, 7 }, + { 0x0120, 7 }, + { 0x0051, 11 }, + { 0x004F, 11 }, + { 0x0052, 11 }, + { 0x0050, 11 }, + { 0x009E, 0 }, + { 0x00A8, 0 }, + { 0x00A7, 0 }, + { 0x0495, 0 }, + { 0x048F, 0 }, + { 0x0112, 0 }, + { 0x0110, 0 }, + { 0x004B, 0 }, + { 0x0065, 0 }, + { 0x0044, 0 }, + { 0x00FB, 0 }, + { 0x007C, 0 }, + { 0x049C, 0 }, + { 0x0075, 0 }, + { 0x0022, 0 }, + { 0x011E, 0 }, + { 0x011F, 0 }, + { 0x0167, 0 }, + { 0x0099, 0 }, + { 0x043E, 0 }, + { 0x00BA, 0 }, + { 0x049B, 0 }, + { 0x0492, 0 }, + { 0x0042, 0 }, + { 0x0149, 0 }, + { 0x00A9, 0 }, + { 0x0054, 0 }, + { 0x002B, 0 }, + { 0x0031, 0 }, + { 0x0156, 0 }, + { 0x0073, 7 }, + { 0x0053, 0 }, + { 0x0494, 0 }, + { 0x00BF, 0 }, + { 0x00AA, 0 }, + { 0x0104, 0 }, + { 0x00C6, 0 }, + { 0x00C3, 0 }, + { 0x00C4, 0 }, + { 0x006E, 0 }, + { 0x00A3, 0 }, + { 0x00A4, 0 }, + { 0x016B, 0 }, + { 0x0169, 0 }, + { 0x016A, 0 }, + { 0x0039, 9 }, + { 0x039F, 0 }, + { 0x0415, 23 }, + { 0x00A2, 39 }, + { 0x00C2, 22 }, + { 0x004E, 0 }, + { 0x0086, 0 }, + { 0x03A2, 40 }, + { 0x03AF, 0 }, + { 0x04A6, 0 }, + { 0x049F, 0 }, + { 0x00F7, 0 }, + { 0x00C0, 0 }, + { 0x0072, 0 }, + { 0x0123, 39 }, + { 0x005A, 36 }, + { 0x0096, 0 }, + { 0x0097, 0 }, + { 0x0063, 7 }, + { 0x0061, 7 }, + { 0x0062, 7 }, + { 0x0168, 0 }, + { 0x0032, 0 }, + { 0x002E, 0 }, + { 0x002F, 0 }, + { 0x0077, 0 }, + { 0x0078, 0 }, + { 0x0076, 0 }, + { 0x009A, 8 }, + { 0x0394, 0 }, + { 0x039B, 0 }, + { 0x0398, 0 }, + { 0x0393, 0 }, + { 0x0399, 0 }, + { 0x039C, 0 }, + { 0x039A, 0 }, + { 0x0102, 0 }, + { 0x010A, 0 }, + { 0x010B, 0 }, + { 0x0103, 0 }, + { 0x0109, 0 }, + { 0x0101, 0 }, + { 0x00FD, 0 }, + { 0x00E8, 0 }, + { 0x00E9, 0 }, + { 0x00CB, 0 }, + { 0x00EA, 0 }, + { 0x00F3, 7 }, + { 0x00F4, 0 }, + { 0x00EC, 12 }, + { 0x00EF, 0 }, + { 0x00CC, 0 }, + { 0x00F5, 0 }, + { 0x00EE, 0 }, + { 0x00ED, 0 }, + { 0x00EB, 0 }, + { 0x00F2, 0 }, + { 0x0396, 0 }, + { 0x0381, 0 }, + { 0x0382, 0 }, + { 0x0397, 0 }, + { 0x037E, 0 }, + { 0x0380, 0 }, + { 0x037F, 0 }, + { 0x0055, 0 }, + { 0x0383, 0 }, + { 0x0395, 0 }, + { 0x0079, 0 }, + { 0x0385, 0 }, + { 0x0390, 0 }, + { 0x0384, 0 }, + { 0x00B6, 0 }, + { 0x00B8, 0 }, + { 0x00B7, 0 }, + { 0x00B5, 0 }, + { 0x00B4, 0 }, + { 0x00B9, 0 }, + { 0x00B3, 0 }, + { 0x00AC, 0 }, + { 0x00B0, 0 }, + { 0x00B2, 0 }, + { 0x00AB, 0 }, + { 0x00AF, 0 }, + { 0x00AE, 0 }, + { 0x00B1, 0 }, + { 0x00AD, 0 }, + { 0x04F0, 0 }, + { 0x0467, 0 }, + { 0x0468, 0 }, + { 0x0478, 0 }, + { 0x0475, 0 }, + { 0x0471, 0 }, + { 0x04DC, 0 }, + { 0x04D8, 19 }, + { 0x04D7, 0 }, + { 0x04E9, 0 }, + { 0x04D9, 0 }, + { 0x04E7, 0 }, + { 0x04EA, 24 }, + { 0x04EC, 0 }, + { 0x04EB, 0 }, + { 0x046D, 0 }, + { 0x046E, 0 }, + { 0x0474, 0 }, + { 0x041D, 0 }, + { 0x046B, 0 }, + { 0x0470, 17 }, + { 0x046C, 0 }, + { 0x0473, 0 }, + { 0x0472, 26 }, + { 0x0405, 0 }, + { 0x0414, 0 }, + { 0x03F7, 0 }, + { 0x0419, 0 }, + { 0x03F5, 0 }, + { 0x0404, 10 }, + { 0x03FA, 0 }, + { 0x03EE, 0 }, + { 0x03F9, 0 }, + { 0x0407, 0 }, + { 0x03F2, 0 }, + { 0x03F6, 25 }, + { 0x03F4, 0 }, + { 0x040D, 0 }, + { 0x03E8, 0 }, + { 0x0406, 9 }, + { 0x03F1, 0 }, + { 0x03FB, 0 }, + { 0x03F8, 0 }, + { 0x03ED, 0 }, + { 0x0479, 0 }, + { 0x007F, 0 }, + { 0x03E9, 0 }, + { 0x03EC, 0 }, + { 0x03EB, 0 }, + { 0x04A5, 0 }, + { 0x048E, 0 }, + { 0x03F3, 0 }, + { 0x04DD, 0 }, + { 0x04AB, 0 }, + { 0x04AA, 0 }, + { 0x047C, 0 }, + { 0x03F0, 0 }, + { 0x04ED, 0 }, + { 0x0429, 0 }, + { 0x0484, 0 }, + { 0x0411, 0 }, + { 0x0427, 0 }, + { 0x04EF, 0 }, + { 0x036B, 0 }, + { 0x0372, 0 }, + { 0x036A, 0 }, + { 0x0373, 0 }, + { 0x036D, 0 }, + { 0x036C, 0 }, + { 0x0374, 0 }, + { 0x0375, 0 }, + { 0x0377, 0 }, + { 0x0370, 0 }, + { 0x036E, 0 }, + { 0x0371, 0 }, + { 0x0376, 0 }, + { 0x036F, 0 }, + { 0x0378, 0 }, + { 0x037D, 0 }, + { 0x04A0, 0 }, + { 0x04E1, 0 }, + { 0x04E2, 0 }, + { 0x04E3, 0 }, + { 0x04DE, 0 }, + { 0x04DF, 0 }, + { 0x04E0, 0 }, + { 0x04E4, 0 }, + { 0x04E5, 0 }, + { 0x04E6, 0 }, + { 0x043C, 0 }, + { 0x043A, 0 }, + { 0x0420, 0 }, + { 0x041F, 0 }, + { 0x041E, 0 }, + { 0x046A, 0 }, + { 0x0469, 0 }, + { 0x0424, 0 }, + { 0x04DB, 0 }, + { 0x043B, 0 }, + { 0x0428, 0 }, + { 0x043D, 0 }, + { 0x0425, 0 }, + { 0x0422, 0 }, + { 0x0439, 0 }, + { 0x0413, 0 }, + { 0x0412, 0 }, + { 0x040B, 0 }, + { 0x0418, 0 }, + { 0x0408, 0 }, + { 0x0421, 0 }, + { 0x041C, 0 }, + { 0x0409, 0 }, + { 0x040A, 0 }, + { 0x040C, 28 }, + { 0x042A, 28 }, + { 0x042B, 28 }, + { 0x042C, 28 }, + { 0x042D, 28 }, + { 0x042E, 28 }, + { 0x042F, 28 }, + { 0x0430, 28 }, + { 0x0431, 28 }, + { 0x0432, 28 }, + { 0x0433, 28 }, + { 0x0434, 28 }, + { 0x0435, 28 }, + { 0x0436, 28 }, + { 0x0437, 28 }, + { 0x0438, 28 }, + { 0x0446, 0 }, + { 0x044A, 0 }, + { 0x044E, 0 }, + { 0x0445, 0 }, + { 0x043F, 0 }, + { 0x0442, 0 }, + { 0x0447, 0 }, + { 0x044B, 0 }, + { 0x0443, 0 }, + { 0x0441, 0 }, + { 0x0444, 0 }, + { 0x0449, 0 }, + { 0x044C, 0 }, + { 0x0440, 0 }, + { 0x0448, 0 }, + { 0x044D, 0 }, +}; +// clang-format on + +#define mCL_FTR_LIST_COUNT (ARRAY_COUNT(mCL_furniture_list)) + +// clang-format off +static u16 mCL_wall_idx_list[] = { + 0x0000, + 0x0001, + 0x0002, + 0x0003, + 0x0004, + 0x0005, + 0x0006, + 0x0007, + 0x0008, + 0x0009, + 0x000A, + 0x000B, + 0x000C, + 0x000D, + 0x000E, + 0x000F, + 0x0010, + 0x0011, + 0x0012, + 0x0013, + 0x0014, + 0x0015, + 0x0016, + 0x0017, + 0x0018, + 0x0019, + 0x001A, + 0x001B, + 0x001C, + 0x001D, + 0x001E, + 0x001F, + 0x0020, + 0x0021, + 0x0022, + 0x0023, + 0x0024, + 0x0025, + 0x0026, + 0x0027, + 0x0028, + 0x0029, + 0x002A, + 0x002B, + 0x002C, + 0x002D, + 0x002E, + 0x002F, + 0x0030, + 0x0031, + 0x0032, + 0x0033, + 0x0034, + 0x0035, + 0x0036, + 0x0037, + 0x0038, + 0x0039, + 0x003A, + 0x003B, + 0x003C, + 0x003D, + 0x003E, + 0x003F, + 0x0040, + 0x0041, + 0x0042, +}; +// clang-format on + +// clang-format off +static u16 mCL_carpet_idx_list[] = { + 0x0000, + 0x0001, + 0x0002, + 0x0003, + 0x0004, + 0x0005, + 0x0006, + 0x0007, + 0x0008, + 0x0009, + 0x000A, + 0x000B, + 0x000C, + 0x000D, + 0x000E, + 0x000F, + 0x0010, + 0x0011, + 0x0012, + 0x0013, + 0x0014, + 0x0015, + 0x0016, + 0x0017, + 0x0018, + 0x0019, + 0x001A, + 0x001B, + 0x001C, + 0x001D, + 0x001E, + 0x001F, + 0x0020, + 0x0021, + 0x0022, + 0x0023, + 0x0024, + 0x0025, + 0x0026, + 0x0027, + 0x0028, + 0x0029, + 0x002A, + 0x002B, + 0x002C, + 0x002D, + 0x002E, + 0x002F, + 0x0030, + 0x0031, + 0x0032, + 0x0033, + 0x0034, + 0x0035, + 0x0036, + 0x0037, + 0x0038, + 0x0039, + 0x003A, + 0x003B, + 0x003C, + 0x003D, + 0x003E, + 0x003F, + 0x0040, + 0x0041, + 0x0042, +}; +// clang-format on + +// clang-format off +static u16 mCL_cloth_idx_list[] = { + 0x01EB, + 0x01EC, + 0x01ED, + 0x01EE, + 0x01EF, + 0x01F0, + 0x01F1, + 0x01F2, + 0x01F3, + 0x01F4, + 0x01F5, + 0x01F6, + 0x01F7, + 0x01F8, + 0x01F9, + 0x01FA, + 0x01FB, + 0x01FC, + 0x0205, + 0x0206, + 0x0207, + 0x0208, + 0x0209, + 0x020A, + 0x020B, + 0x020C, + 0x020D, + 0x020E, + 0x020F, + 0x0210, + 0x0211, + 0x0212, + 0x0213, + 0x0214, + 0x0215, + 0x0216, + 0x0217, + 0x0218, + 0x0219, + 0x021A, + 0x021B, + 0x021C, + 0x021D, + 0x021E, + 0x021F, + 0x0220, + 0x0221, + 0x0222, + 0x0223, + 0x0224, + 0x0225, + 0x0226, + 0x0227, + 0x0228, + 0x0229, + 0x022A, + 0x022B, + 0x022C, + 0x022D, + 0x022E, + 0x022F, + 0x0230, + 0x0231, + 0x0232, + 0x0233, + 0x0234, + 0x0235, + 0x0236, + 0x0237, + 0x0238, + 0x0239, + 0x023A, + 0x023B, + 0x023C, + 0x023D, + 0x023E, + 0x023F, + 0x0240, + 0x0241, + 0x0242, + 0x0243, + 0x0244, + 0x0245, + 0x0246, + 0x0247, + 0x0248, + 0x0249, + 0x024A, + 0x024B, + 0x024C, + 0x024D, + 0x024E, + 0x024F, + 0x0250, + 0x0251, + 0x0252, + 0x0253, + 0x0254, + 0x0255, + 0x0256, + 0x0257, + 0x0258, + 0x0259, + 0x025A, + 0x025B, + 0x025C, + 0x025D, + 0x025E, + 0x025F, + 0x0260, + 0x0261, + 0x0262, + 0x0263, + 0x0264, + 0x0265, + 0x0266, + 0x0267, + 0x0268, + 0x0269, + 0x026A, + 0x026B, + 0x026C, + 0x026D, + 0x026E, + 0x026F, + 0x0270, + 0x0271, + 0x0272, + 0x0273, + 0x0274, + 0x0275, + 0x0276, + 0x0277, + 0x0278, + 0x0279, + 0x027A, + 0x027B, + 0x027C, + 0x027D, + 0x027E, + 0x027F, + 0x0280, + 0x0281, + 0x0282, + 0x0283, + 0x0284, + 0x0285, + 0x0286, + 0x0287, + 0x0288, + 0x0289, + 0x028A, + 0x028B, + 0x028C, + 0x028D, + 0x028E, + 0x028F, + 0x0290, + 0x0291, + 0x0292, + 0x0293, + 0x0294, + 0x0295, + 0x0296, + 0x0297, + 0x0298, + 0x0299, + 0x029A, + 0x029B, + 0x029C, + 0x029D, + 0x029E, + 0x029F, + 0x02A0, + 0x02A1, + 0x02A2, + 0x02A3, + 0x02A4, + 0x02A5, + 0x02A6, + 0x02A7, + 0x02A8, + 0x02A9, + 0x02AA, + 0x02AB, + 0x02AC, + 0x02AD, + 0x02AE, + 0x02AF, + 0x02B0, + 0x02B1, + 0x02B2, + 0x02B3, + 0x02B4, + 0x02B5, + 0x02B6, + 0x02B7, + 0x02B8, + 0x02B9, + 0x02BA, + 0x02BB, + 0x02BC, + 0x02BD, + 0x02BE, + 0x02BF, + 0x02C0, + 0x02C1, + 0x02C2, + 0x02C3, + 0x02C4, + 0x02C5, + 0x02C6, + 0x02C7, + 0x02C8, + 0x02C9, + 0x02CA, + 0x02CB, + 0x02CC, + 0x02CD, + 0x02CE, + 0x02CF, + 0x02D0, + 0x02D1, + 0x02D2, + 0x02D3, + 0x02D4, + 0x02D5, + 0x02D6, + 0x02D7, + 0x02D8, + 0x02D9, + 0x02DA, + 0x02DB, + 0x02DC, + 0x02DD, + 0x02DE, + 0x02DF, + 0x02E0, + 0x02E1, + 0x02E2, + 0x02E3, + 0x02E4, + 0x02E5, + 0x02E6, + 0x02E7, + 0x02E8, + 0x02E9, +}; +// clang-format on + +// clang-format off +static u16 mCL_umbrella_idx_list[] = { + 0x0342, + 0x0343, + 0x0344, + 0x0345, + 0x0346, + 0x0347, + 0x0348, + 0x0349, + 0x034A, + 0x034B, + 0x034C, + 0x034D, + 0x034E, + 0x034F, + 0x0350, + 0x0351, + 0x0352, + 0x0353, + 0x0354, + 0x0355, + 0x0356, + 0x0357, + 0x0358, + 0x0359, + 0x035A, + 0x035B, + 0x035C, + 0x035D, + 0x035E, + 0x035F, + 0x0360, + 0x0361, + 0x0453, + 0x0454, + 0x0455, + 0x0456, + 0x0457, + 0x0458, + 0x0459, + 0x045A, + 0x045B, + 0x045C, + 0x045D, + 0x045E, + 0x045F, + 0x0460, + 0x0461, + 0x0462, + 0x03FC, + 0x03FD, + 0x03FE, + 0x03FF, + 0x0400, + 0x0401, + 0x0402, + 0x0403, + 0x044F, + 0x0450, + 0x0451, + 0x0452, + 0x0463, + 0x0464, + 0x0465, + 0x0466, +}; +// clang-format on + +// clang-format off +static u16 mCL_paper_idx_list[] = { + 0x0000, + 0x0001, + 0x0002, + 0x0003, + 0x0004, + 0x0005, + 0x0006, + 0x0007, + 0x0008, + 0x0009, + 0x000A, + 0x000B, + 0x000C, + 0x000D, + 0x000E, + 0x000F, + 0x0010, + 0x0011, + 0x0012, + 0x0013, + 0x0014, + 0x0015, + 0x0016, + 0x0017, + 0x0018, + 0x0019, + 0x001A, + 0x001B, + 0x001C, + 0x001D, + 0x001E, + 0x001F, + 0x0020, + 0x0021, + 0x0022, + 0x0023, + 0x0024, + 0x0025, + 0x0026, + 0x0027, + 0x0028, + 0x0029, + 0x002A, + 0x002B, + 0x002C, + 0x002D, + 0x002E, + 0x002F, + 0x0030, + 0x0031, + 0x0032, + 0x0033, + 0x0034, + 0x0035, + 0x0036, + 0x0037, + 0x0038, + 0x0039, + 0x003A, + 0x003B, + 0x003C, + 0x003D, + 0x003E, + 0x003F, +}; +// clang-format on + +// clang-format off +static u16 mCL_haniwa_idx_list[] = { + 0x017F, + 0x0180, + 0x0181, + 0x01BD, + 0x01BC, + 0x01BB, + 0x01A5, + 0x01A6, + 0x0175, + 0x0174, + 0x0176, + 0x016E, + 0x016D, + 0x016F, + 0x016C, + 0x01BA, + 0x01B7, + 0x01B9, + 0x01B8, + 0x0199, + 0x0196, + 0x0198, + 0x0197, + 0x0190, + 0x0191, + 0x01EA, + 0x01E9, + 0x01E8, + 0x017C, + 0x017D, + 0x01E7, + 0x01E5, + 0x01E6, + 0x01B6, + 0x01B4, + 0x01B3, + 0x01B5, + 0x01D7, + 0x01D5, + 0x01D6, + 0x01D4, + 0x01C0, + 0x01BE, + 0x01BF, + 0x0185, + 0x0182, + 0x0184, + 0x0183, + 0x019A, + 0x019C, + 0x019B, + 0x01CC, + 0x01A1, + 0x019F, + 0x01A0, + 0x01DE, + 0x01DC, + 0x01DD, + 0x01C9, + 0x01CA, + 0x01CB, + 0x01B2, + 0x01AF, + 0x01B0, + 0x01B1, + 0x01A4, + 0x01A2, + 0x01A3, + 0x017B, + 0x017E, + 0x018D, + 0x01D3, + 0x01D0, + 0x01D1, + 0x01D2, + 0x018B, + 0x018C, + 0x018A, + 0x01CD, + 0x01CF, + 0x01CE, + 0x0192, + 0x0194, + 0x0193, + 0x0195, + 0x01E3, + 0x01DF, + 0x01E1, + 0x01E0, + 0x01E2, + 0x01E4, + 0x01AE, + 0x01AD, + 0x01AA, + 0x01A9, + 0x01AC, + 0x01AB, + 0x01C4, + 0x01C3, + 0x01C5, + 0x01DB, + 0x01D8, + 0x01DA, + 0x01D9, + 0x01C1, + 0x01C2, + 0x0187, + 0x0188, + 0x0186, + 0x0189, + 0x01C7, + 0x01C6, + 0x0170, + 0x0172, + 0x0171, + 0x0173, + 0x018E, + 0x018F, + 0x0177, + 0x0179, + 0x0178, + 0x017A, + 0x01A8, + 0x019E, + 0x019D, + 0x01A7, + 0x01C8, +}; +// clang-format on + +// clang-format off +static u16 mCL_fossil_idx_list[] = { + 0x03BB, + 0x03BD, + 0x03BC, + 0x03BE, + 0x03C0, + 0x03BF, + 0x03C1, + 0x03C3, + 0x03C2, + 0x03C4, + 0x03C6, + 0x03C5, + 0x03C7, + 0x03C8, + 0x03C9, + 0x03CA, + 0x03CB, + 0x03CC, + 0x03CD, + 0x03CE, + 0x03CF, + 0x03D0, + 0x03D1, + 0x03D2, + 0x03D3, +}; +// clang-format on + +// clang-format off +static u16 mCL_music_idx_list[] = { + 0x0000, + 0x0001, + 0x0002, + 0x0003, + 0x0004, + 0x0005, + 0x0006, + 0x0007, + 0x0008, + 0x0009, + 0x000A, + 0x000B, + 0x000C, + 0x000D, + 0x000E, + 0x000F, + 0x0010, + 0x0011, + 0x0012, + 0x0013, + 0x0014, + 0x0015, + 0x0016, + 0x0017, + 0x0018, + 0x0019, + 0x001A, + 0x001B, + 0x001C, + 0x001D, + 0x001E, + 0x001F, + 0x0020, + 0x0021, + 0x0022, + 0x0023, + 0x0024, + 0x0025, + 0x0026, + 0x0027, + 0x0028, + 0x0029, + 0x002A, + 0x002B, + 0x002C, + 0x002D, + 0x002E, + 0x002F, + 0x0030, + 0x0031, + 0x0032, + 0x0033, + 0x0034, + 0x0035, + 0x0036, +}; +// clang-format on diff --git a/src/m_catalog_ovl_paper_data.c_inc b/src/m_catalog_ovl_paper_data.c_inc new file mode 100644 index 00000000..ac460eff --- /dev/null +++ b/src/m_catalog_ovl_paper_data.c_inc @@ -0,0 +1,636 @@ +extern Gfx lat_letter01_model[]; +extern Gfx lat_letter02_model[]; +extern Gfx lat_letter03_model[]; +extern Gfx lat_letter04_model[]; +extern Gfx lat_letter05_model[]; +extern Gfx lat_letter06_model[]; +extern Gfx lat_letter07_model[]; +extern Gfx lat_letter08_model[]; +extern Gfx lat_letter09_model[]; +extern Gfx lat_letter10_model[]; +extern Gfx lat_letter11_model[]; +extern Gfx lat_letter12_model[]; +extern Gfx lat_letter13_model[]; +extern Gfx lat_letter14_model[]; +extern Gfx lat_letter15_model[]; +extern Gfx lat_letter16_model[]; +extern Gfx lat_letter17_model[]; +extern Gfx lat_letter18_model[]; +extern Gfx lat_letter19_model[]; +extern Gfx lat_letter20_model[]; +extern Gfx lat_letter21_model[]; +extern Gfx lat_letter22_model[]; +extern Gfx lat_letter23_model[]; +extern Gfx lat_letter24_model[]; +extern Gfx lat_letter25_model[]; +extern Gfx lat_letter26_model[]; +extern Gfx lat_letter27_model[]; +extern Gfx lat_letter28_model[]; +extern Gfx lat_letter29_model[]; +extern Gfx lat_letter30_model[]; +extern Gfx lat_letter31_model[]; +extern Gfx lat_letter32_model[]; +extern Gfx lat_letter33_model[]; +extern Gfx lat_letter34_model[]; +extern Gfx lat_letter35_model[]; +extern Gfx lat_letter36_model[]; +extern Gfx lat_letter37_model[]; +extern Gfx lat_letter38_model[]; +extern Gfx lat_letter39_model[]; +extern Gfx lat_letter40_model[]; +extern Gfx lat_letter41_model[]; +extern Gfx lat_letter42_model[]; +extern Gfx lat_letter43_model[]; +extern Gfx lat_letter44_model[]; +extern Gfx lat_letter45_model[]; +extern Gfx lat_letter46_model[]; +extern Gfx lat_letter47_model[]; +extern Gfx lat_letter48_model[]; +extern Gfx lat_letter49_model[]; +extern Gfx lat_letter50_model[]; +extern Gfx lat_letter51_model[]; +extern Gfx lat_letter52_model[]; +extern Gfx lat_letter53_model[]; +extern Gfx lat_letter54_model[]; +extern Gfx lat_letter55_model[]; +extern Gfx lat_letter56_model[]; +extern Gfx lat_letter57_model[]; +extern Gfx lat_letter58_model[]; +extern Gfx lat_letter59_model[]; +extern Gfx lat_letter60_model[]; +extern Gfx lat_letter61_model[]; +extern Gfx lat_letter62_model[]; +extern Gfx lat_letter63_win_model[]; +extern Gfx lat_letter64_model[]; + +// clang-format off +static Gfx* paper_disp_model[] = { + 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, +}; +// clang-format on + +extern Gfx lat_letter01_sen_model[]; +extern Gfx lat_letter02_sen_model[]; +extern Gfx lat_letter03_sen_model[]; +extern Gfx lat_letter04_senT_model[]; +extern Gfx lat_letter06_sen_model[]; +extern Gfx lat_letter07_sen_model[]; +extern Gfx lat_letter08_sen_model[]; +extern Gfx lat_letter10_sen_model[]; +extern Gfx lat_letter12_sen_model[]; +extern Gfx lat_letter16_sen_model[]; +extern Gfx lat_letter17_sen_model[]; +extern Gfx lat_letter18_sen_model[]; +extern Gfx lat_letter20_sen_model[]; +extern Gfx lat_letter21_sen_model[]; +extern Gfx lat_letter22_sen_model[]; +extern Gfx lat_letter29_sen_model[]; +extern Gfx lat_letter30_sen_model[]; +extern Gfx lat_letter31_sen_model[]; +extern Gfx lat_letter32_sen_model[]; +extern Gfx lat_letter33_sen_model[]; +extern Gfx lat_letter34_sen_model[]; +extern Gfx lat_letter35_sen_model[]; +extern Gfx lat_letter36_sen_model[]; +extern Gfx lat_letter37_sen_model[]; +extern Gfx lat_letter38_sen_model[]; +extern Gfx lat_letter39_sen_model[]; +extern Gfx lat_letter40_sen_model[]; +extern Gfx lat_letter41_sen_model[]; +extern Gfx lat_letter42_sen_model[]; +extern Gfx lat_letter43_sen_model[]; +extern Gfx lat_letter44_sen_model[]; +extern Gfx lat_letter45_sen_model[]; +extern Gfx lat_letter46_sen_model[]; +extern Gfx lat_letter47_sen_model[]; +extern Gfx lat_letter48_sen_model[]; +extern Gfx lat_letter49_sen_model[]; +extern Gfx lat_letter50_sen_model[]; +extern Gfx lat_letter51_sen_model[]; +extern Gfx lat_letter52_sen_model[]; +extern Gfx lat_letter53_sen_model[]; +extern Gfx lat_letter54_sen_model[]; +extern Gfx lat_letter55_sen_model[]; +extern Gfx lat_letter56_sen_model[]; +extern Gfx lat_letter57_sen_model[]; +extern Gfx lat_letter58_sen_model[]; +extern Gfx lat_letter59_sen_model[]; +extern Gfx lat_letter60_sen_model[]; +extern Gfx lat_letter61_sen_model[]; +extern Gfx lat_letter62_sen_model[]; +extern Gfx lat_letter63_senT_model[]; +extern Gfx lat_letter64_sen_model[]; + +static Gfx* paper_disp_sen_model[] = { + 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, +};