Files
ac-decomp/src/m_submenu_ovl.c
T
2024-06-03 14:51:53 -04:00

2343 lines
78 KiB
C

#include "m_submenu_ovl.h"
#include "m_font.h"
#include "m_play.h"
#include "m_trademark.h"
#include "m_rcp.h"
#include "libultra/libultra.h"
#include "sys_matrix.h"
#include "libforest/emu64/emu64_wrapper.h"
#include "m_inventory_ovl.h"
#include "m_hboard_ovl.h"
#include "m_timeIn_ovl.h"
#include "m_ledit_ovl.h"
#include "m_map_ovl.h"
#include "m_notice_ovl.h"
#include "m_repay_ovl.h"
#include "m_mscore_ovl.h"
#include "m_birthday_ovl.h"
#include "m_editor_ovl.h"
#include "m_mailbox_ovl.h"
#include "m_board_ovl.h"
#include "m_address_ovl.h"
#include "m_haniwa_ovl.h"
#include "m_editEndChk_ovl.h"
#include "m_warning_ovl.h"
#include "m_cpmail_ovl.h"
#include "m_cpwarning_ovl.h"
#include "m_cpedit_ovl.h"
#include "m_catalog_ovl.h"
#include "m_music_ovl.h"
#include "m_bank_ovl.h"
#include "m_needlework_ovl.h"
#include "m_cporiginal_ovl.h"
#include "m_design_ovl.h"
#include "m_gba_ovl.h"
#include "m_diary_ovl.h"
#include "m_calendar_ovl.h"
#include "m_passwordMake_ovl.h"
#include "m_passwordChk_ovl.h"
#include "m_tag_ovl.h"
#include "m_hand_ovl.h"
#include "m_haniwaPortrait_ovl.h"
static Submenu_Overlay_c ovl_base;
static void mSM_setup_view(Submenu* submenu, GRAPH* graph, int init_flag) {
Mtx* mtx;
if (init_flag) {
mtx = GRAPH_ALLOC_TYPE(graph, Mtx, 1);
mFont_CulcOrthoMatrix(mtx);
submenu->overlay->projection_matrix = mtx;
} else {
mtx = submenu->overlay->projection_matrix;
}
OPEN_POLY_OPA_DISP(graph);
if (init_flag == FALSE) {
View* view;
if (submenu->mode != 4) {
view = &((GAME_PLAY*)gamePT)->view;
} else {
view = &((GAME_TRADEMARK*)gamePT)->view; // I'm not sure this is the correct game subclass
}
gDPPipeSync(POLY_OPA_DISP++);
gDPSetScissor(POLY_OPA_DISP++, G_SC_NON_INTERLACE, view->screen.l, view->screen.top, view->screen.r,
view->screen.bottom);
gSPViewport(POLY_OPA_DISP++, &view->viewport);
gDPSetScissor(POLY_OPA_DISP++, G_SC_NON_INTERLACE, 0, 0, 640, 480);
}
gSPMatrix(POLY_OPA_DISP++, mtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION);
CLOSE_POLY_OPA_DISP(graph);
}
static void mSM_change_view(GRAPH* graph, f32 eye_dist, f32 y_lookAt, f32 vp_x, f32 vp_y, s16 angle, int width,
int height) {
static Vp viewport_data = { 0, 0, 511, 0, 0, 0, 511, 0 };
static Lights0 light_data = {
{ 105, 90, 90, 0, 105, 90, 90, 0 }, // Ambient
{ { 255, 255, 245, 0, 255, 255, 245, 0, 0, 60, 60, 0 } } // Light
};
Vp* viewport = GRAPH_ALLOC_TYPE(graph, Vp, 1);
Mtx* mtx = GRAPH_ALLOC_TYPE(graph, Mtx, 1);
Mtx* view_mtx = GRAPH_ALLOC_TYPE(graph, Mtx, 1);
u16 persp_norm;
f32 y_eye;
f32 z_eye;
if (viewport == NULL) {
viewport = &viewport_data;
} else {
viewport->vp.vscale[0] = width << 1;
viewport->vp.vtrans[0] = (width << 1) + (s16)(int)vp_x;
viewport->vp.vscale[1] = height << 1;
viewport->vp.vtrans[1] = (height << 1) + (s16)(int)vp_y;
viewport->vp.vtrans[2] = 511;
viewport->vp.vscale[2] = 511;
viewport->vp.vtrans[3] = 0;
viewport->vp.vscale[3] = 0;
}
OPEN_DISP(graph);
gSPViewport(NOW_POLY_OPA_DISP++, viewport);
CLOSE_DISP(graph);
if (width != 256) {
guPerspective(mtx, &persp_norm, 35.0f, (f32)width / (f32)height, 1.0f, 2000.0f, 1.0f);
} else {
guPerspective(mtx, &persp_norm, 20.0f, (f32)width / (f32)height, 100.0f, 800.0f, 1.0f);
}
OPEN_DISP(graph);
gSPPerspNormalize(NOW_POLY_OPA_DISP++, persp_norm);
gSPMatrix(NOW_POLY_OPA_DISP++, mtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION);
CLOSE_DISP(graph);
if (angle == DEG2SHORT_ANGLE(90.0f)) {
angle = 0x4100;
} else if (angle == DEG2SHORT_ANGLE(-90.0f)) {
angle = -0x3F00;
}
y_eye = y_lookAt + eye_dist * sin_s(angle);
z_eye = eye_dist * cos_s(angle);
if (angle < DEG2SHORT_ANGLE(-90.0f) || angle >= DEG2SHORT_ANGLE(90.0f)) {
guLookAt(view_mtx, 0.0f, y_eye, z_eye, 0.0f, y_lookAt, 0.0f, 0.0f, -1.0f, 0.0f);
} else {
guLookAt(view_mtx, 0.0f, y_eye, z_eye, 0.0f, y_lookAt, 0.0f, 0.0f, 1.0f, 0.0f);
}
OPEN_DISP(graph);
gSPMatrix(NOW_POLY_OPA_DISP++, view_mtx, G_MTX_NOPUSH | G_MTX_MUL | G_MTX_PROJECTION);
gSPSetLights0(NOW_POLY_OPA_DISP++, light_data);
SET_POLY_OPA_DISP(gfx_set_fog_nosync(NOW_POLY_OPA_DISP++, 255, 255, 255, 255, 1000, 1000));
CLOSE_DISP(graph);
}
static void mSM_set_char_matrix(GRAPH* graph) {
OPEN_POLY_OPA_DISP(graph);
gSPMatrix(POLY_OPA_DISP++, &Mtx_clear, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
CLOSE_POLY_OPA_DISP(graph);
}
static void mSM_cbuf_copy(GRAPH* graph, PreRender* prerender, int x, int y, int mode) {
int temp;
int temp0;
int src_w;
int src_h;
int dst_w;
int dst_h;
int uls;
int ult;
int lrs;
int lrt;
int tmem_line;
int y_min;
int x_min;
int x_max;
int y_max;
int tex_wd;
void* src_buffer;
void* dst_buffer;
if (x >= (640 - 1) || x <= -prerender->width_bak || y <= -prerender->height_bak || y >= (480 - 1)) {
return;
}
if (x < 0) {
x_max = prerender->width_bak + x;
x_min = -x;
x = 0;
} else {
x_min = 0;
if (x + prerender->width_bak >= 640) {
x_max = 640 - x;
} else {
x_max = prerender->width_bak;
}
}
if (y < 0) {
y_max = prerender->height_bak + y;
y_min = -y;
y = 0;
} else {
y_min = 0;
if (y + prerender->height_bak >= 480) {
y_max = (480 - 1) - y;
} else {
y_max = prerender->height_bak;
}
}
if (mode == 0) {
src_w = 640;
src_h = 480;
dst_w = prerender->width_bak;
dst_h = prerender->height_bak;
uls = x;
ult = y;
lrt = y_min;
lrs = x_min;
src_buffer = prerender->framebuffer_bak;
} else {
src_w = prerender->width_bak;
src_h = prerender->height_bak;
dst_w = 640;
dst_h = 480;
uls = x_min;
ult = y_min;
lrt = y;
lrs = x;
dst_buffer = prerender->framebuffer_bak;
}
tmem_line = (4 << 10) / ((((x_max + 4) - 1) & ~(4 - 1)) * 2);
temp0 = uls + (x_max - 1);
tex_wd = (lrs + x_max - 1) << 2;
lrs <<= 2;
OPEN_DISP(graph);
if (mode) {
Gfx* gfx = NOW_POLY_OPA_DISP;
prerender->width = 640;
prerender->height = 480;
PreRender_CopyRGBC(prerender, &gfx, x - x_min, y - y_min);
SET_POLY_OPA_DISP(gfx);
} else {
gDPPipeSync(NEXT_POLY_OPA_DISP);
gSPClearGeometryMode(NEXT_POLY_OPA_DISP, 0xFFFFFF);
gDPSetOtherMode(NEXT_POLY_OPA_DISP,
G_AD_DISABLE | G_CD_DISABLE | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
G_TD_CLAMP | G_TP_NONE | G_CYC_COPY | G_PM_NPRIMITIVE,
G_AC_NONE | G_ZS_PRIM | G_RM_NOOP | G_RM_NOOP2);
gDPSetColorImage(NEXT_POLY_OPA_DISP, G_IM_FMT_RGBA, G_IM_SIZ_16b, dst_w, src_buffer);
gDPSetScissor(NEXT_POLY_OPA_DISP, G_SC_NON_INTERLACE, 0, 0, dst_w, dst_h);
while (y_max > 0) {
if (tmem_line > y_max) {
tmem_line = y_max;
}
temp = ult + tmem_line - 1;
gDPLoadTextureTile(NEXT_POLY_OPA_DISP, dst_buffer, G_IM_FMT_RGBA, G_IM_SIZ_16b, src_w, src_h, uls, ult,
temp0, temp, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK,
G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
gSPTextureRectangle(NEXT_POLY_OPA_DISP, lrs, lrt << 2, tex_wd, (lrt + tmem_line - 1) << 2, G_TX_RENDERTILE,
uls << 5, ult << 5, (4 << 10), (1 << 10));
ult += tmem_line;
lrt += tmem_line;
y_max -= tmem_line;
}
}
CLOSE_DISP(graph);
}
static void mSM_set_drawMode(GRAPH* graph, PreRender* prerender, f32 eye_dist, f32 eye_height, s16 angle) {
static Vp viewport_data = { 0, 0, 511, 0, 0, 0, 511, 0 };
static Lights1 light_data = {
/* Ambient */
105, 90, 90, /* ambient color */
0, /* pad */
105, 90, 90, /* ambient color copy */
0, /* pad */
/* Light */
255, 255, 245, /* color */
0, /* pad */
255, 255, 245, /* color copy */
0, /* pad */
0, 60, 60, /* direction */
0 /* pad */
};
int width = prerender->width_bak;
int height = prerender->height_bak;
OPEN_DISP(graph);
gDPPipeSync(NEXT_POLY_OPA_DISP);
gSPClearGeometryMode(NEXT_POLY_OPA_DISP, 0xFFFFFF);
gSPTexture(NEXT_POLY_OPA_DISP, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF);
gDPSetCombineMode(NEXT_POLY_OPA_DISP, G_CC_SHADE, G_CC_SHADE);
gDPSetOtherMode(NEXT_POLY_OPA_DISP,
G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_BILERP | G_TT_NONE | G_TL_TILE |
G_TD_CLAMP | G_TP_PERSP | G_CYC_FILL | G_PM_NPRIMITIVE,
G_AC_NONE | G_ZS_PIXEL | G_RM_NOOP | G_RM_NOOP2);
gSPLoadGeometryMode(NEXT_POLY_OPA_DISP, G_ZBUFFER | G_SHADE | G_CULL_BACK | G_LIGHTING | G_SHADING_SMOOTH);
gDPSetScissor(NEXT_POLY_OPA_DISP, G_SC_NON_INTERLACE, 0, 0, width, height);
gSPClipRatio(NEXT_POLY_OPA_DISP, FRUSTRATIO_1);
gDPSetColorImage(NEXT_POLY_OPA_DISP, G_IM_FMT_RGBA, G_IM_SIZ_16b, width, prerender->zbuffer_bak);
gDPSetFillColor(NEXT_POLY_OPA_DISP, ((0xFFFC) << 16) | (0xFFFC));
gDPFillRectangle(NEXT_POLY_OPA_DISP, 0, 0, width - 1, height - 1);
gDPPipeSync(NEXT_POLY_OPA_DISP);
gDPSetColorImage(NEXT_POLY_OPA_DISP, G_IM_FMT_RGBA, G_IM_SIZ_16b, width, prerender->framebuffer_bak);
gDPPipeSync(NEXT_POLY_OPA_DISP);
gDPSetDepthImage(NEXT_POLY_OPA_DISP, prerender->zbuffer_bak);
{
Vp* vp = GRAPH_ALLOC_TYPE(graph, Vp, 1);
Mtx* projMtx = GRAPH_ALLOC_TYPE(graph, Mtx, 1);
Mtx* viewMtx = GRAPH_ALLOC_TYPE(graph, Mtx, 1);
u16 perspNorm;
if (vp == NULL) {
vp = &viewport_data;
} else {
vp->vp.vscale[0] = vp->vp.vtrans[0] = width * 2;
vp->vp.vscale[1] = vp->vp.vtrans[1] = height * 2;
vp->vp.vscale[2] = vp->vp.vtrans[2] = 511;
vp->vp.vscale[3] = vp->vp.vtrans[3] = 0;
}
gSPViewport(NEXT_POLY_OPA_DISP, vp);
if (width != 256) {
guPerspective(projMtx, &perspNorm, 35.0f, (f32)width / (f32)height, 1.0f, 2000.0f, 1.0f);
} else {
guPerspective(projMtx, &perspNorm, 20.0f, (f32)width / (f32)height, 100.0f, 800.0f, 1.0f);
}
gSPPerspNormalize(NEXT_POLY_OPA_DISP, perspNorm);
gSPMatrix(NEXT_POLY_OPA_DISP, projMtx, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION);
{
f32 yEye;
f32 zEye;
if (angle == DEG2SHORT_ANGLE(90.0f)) {
angle = 0x4100;
} else if (angle == DEG2SHORT_ANGLE(-90.0f)) {
angle = -0x3F00;
}
yEye = eye_height + eye_dist * sin_s(angle);
zEye = eye_dist * cos_s(angle);
if (angle < DEG2SHORT_ANGLE(-90.0f) || angle >= DEG2SHORT_ANGLE(90.0f)) {
guLookAt(viewMtx, 0.0f, yEye, zEye, 0.0f, eye_height, 0.0f, 0.0f, -1.0f, 0.0f);
} else {
guLookAt(viewMtx, 0.0f, yEye, zEye, 0.0f, eye_height, 0.0f, 0.0f, 1.0f, 0.0f);
}
}
gSPMatrix(NEXT_POLY_OPA_DISP, viewMtx, G_MTX_NOPUSH | G_MTX_MUL | G_MTX_PROJECTION);
gSPSetLights1(NEXT_POLY_OPA_DISP, light_data);
}
SET_POLY_OPA_DISP(gfx_set_fog_nosync(NEXT_POLY_OPA_DISP, 255, 255, 255, 255, 1000, 1000));
CLOSE_DISP(graph);
}
static int mSM_get_groupNo(mActor_name_t item) {
return ITEM_NAME_GET_INDEX(item);
}
typedef struct inventory_icon_info_s {
u16* pal;
u8* tex;
} mSM_inventory_icon_info_c;
extern u8 inv_win_mark_tex[];
static void mSM_set_dl_item(GRAPH* graph, f32 x, f32 y, f32 scale, mSM_inventory_icon_info_c* icon_info, u16* palette,
u8 l, rgba_t* color, int draw_shadow, int draw_mark) {
f32 rect_xh;
f32 rect_yh;
int t;
int scale_factor;
OPEN_POLY_OPA_DISP(graph);
gDPPipeSync(POLY_OPA_DISP++);
gDPSetAlphaCompare(POLY_OPA_DISP++, G_AC_THRESHOLD);
gDPSetPrimColor(POLY_OPA_DISP++, 0, l, color->r, color->g, color->b, color->a);
/* Check if we're drawing the shadow or the actual icon */
if (draw_shadow) {
gDPSetBlendColor(POLY_OPA_DISP++, 255, 255, 255, 40);
} else {
if (color->a == 255) {
gDPSetBlendColor(POLY_OPA_DISP++, 255, 255, 255, 254);
gDPSetCombineLERP(POLY_OPA_DISP++, TEXEL0, PRIMITIVE, PRIM_LOD_FRAC, PRIMITIVE, 0, 0, 0, TEXEL0, TEXEL0,
PRIMITIVE, PRIM_LOD_FRAC, PRIMITIVE, 0, 0, 0, TEXEL0);
} else {
gDPSetBlendColor(POLY_OPA_DISP++, 255, 255, 255, 40);
gDPSetCombineLERP(POLY_OPA_DISP++, TEXEL0, PRIMITIVE, PRIM_LOD_FRAC, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0,
TEXEL0, PRIMITIVE, PRIM_LOD_FRAC, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0);
}
}
gDPPipeSync(POLY_OPA_DISP++);
gDPSetTextureLUT(POLY_OPA_DISP++, G_TT_RGBA16);
gDPSetTexturePersp(POLY_OPA_DISP++, G_TP_NONE);
gDPLoadTLUT_Dolphin(POLY_OPA_DISP++, 15, 16, 1, palette);
gDPSetTextureImage_Dolphin(POLY_OPA_DISP++, G_IM_FMT_CI, G_IM_SIZ_4b, 32, 32, icon_info->tex);
gDPSetTile_Dolphin(POLY_OPA_DISP++, G_DOLPHIN_TLUT_DEFAULT_MODE, G_TX_RENDERTILE, 15, GX_MIRROR, GX_MIRROR,
GX_CLAMP, GX_CLAMP);
t = (int)(x * 0.975f);
x = (160.0f + (f32)t) - scale * 12.0f;
y = (120.0f - y) - scale * 12.0f;
scale_factor = (int)((1.0f / scale) * 1365.333333333f);
/* Draw 2D rectangle with icon texture */
if (x < 320.0f) {
f32 mod = scale * 24.0f;
rect_xh = x + mod;
rect_yh = y + mod;
POLY_OPA_DISP = gfx_gSPScisTextureRectangle1(POLY_OPA_DISP, x * 4.0f, y * 4.0f, rect_xh * 4.0f, rect_yh * 4.0f,
G_TX_RENDERTILE, 0, 0, scale_factor, scale_factor);
}
if (draw_mark) {
f32 frame_per = (((f32)(gamePT->frame_counter % 40)) * (1.0f / 40.0f)) * 2.0f;
if (frame_per > 1.0f) {
frame_per = 2.0f - frame_per;
}
gDPPipeSync(POLY_OPA_DISP++);
gDPSetTextureLUT(POLY_OPA_DISP++, G_TT_NONE);
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 0, (int)(frame_per * 90.0f + 95.0f), 0, 255);
gDPSetEnvColor(POLY_OPA_DISP++, (int)(frame_per * 60.0f), (int)(frame_per * 45.0f + 210.0f),
(int)(frame_per * 60.0f), 255);
gDPSetAlphaCompare(POLY_OPA_DISP++, G_AC_NONE);
gDPSetBlendColor(POLY_OPA_DISP++, 255, 255, 255, 8);
gDPSetTextureLUT(POLY_OPA_DISP++, G_TT_NONE); // duplicate?
gDPSetTextureImage_Dolphin(POLY_OPA_DISP++, G_IM_FMT_IA, G_IM_SIZ_8b, 16, 16, inv_win_mark_tex);
gDPSetTile_Dolphin(POLY_OPA_DISP++, G_DOLPHIN_TLUT_DEFAULT_MODE, G_TX_RENDERTILE, 0, GX_MIRROR, GX_MIRROR,
GX_CLAMP, GX_CLAMP);
gDPSetBlendColor(POLY_OPA_DISP++, 255, 255, 255, 254); // bug? doesn't this undo the previous blend color set?
gDPSetCombineMode(POLY_OPA_DISP++, G_CC_BLENDPEDECALA, G_CC_BLENDPEDECALA);
/* Draw 2D rectangle with mark texture */
if (x < 320.0f) {
f32 mod = scale * 24.0f;
rect_xh = x + mod;
rect_yh = y + mod;
POLY_OPA_DISP =
gfx_gSPScisTextureRectangle1(POLY_OPA_DISP, x * 4.0f, y * 4.0f, rect_xh * 4.0f, rect_yh * 4.0f,
G_TX_RENDERTILE, 0, 0, scale_factor, scale_factor);
}
}
gDPPipeSync(POLY_OPA_DISP++);
gDPSetTextureLUT(POLY_OPA_DISP++, G_TT_RGBA16);
gDPSetAlphaCompare(POLY_OPA_DISP++, G_AC_NONE);
gDPSetBlendColor(POLY_OPA_DISP++, 255, 255, 255, 8);
gDPSetTexturePersp(POLY_OPA_DISP++, G_TP_PERSP);
CLOSE_POLY_OPA_DISP(graph);
}
extern u16 inv_mwin_leaf_pal[];
extern u8 inv_mwin_leaf_tex[];
extern u16 inv_mwin_haniwa_pal[];
extern u8 inv_mwin_haniwa_tex[];
extern u16 inv_mwin_kaseki2_pal[];
extern u8 inv_mwin_kaseki2_tex[];
extern u16 inv_mwin_unknown_pal[];
extern u8 inv_mwin_unknown_tex[];
extern u16 inv_mwin_pbox2_pal[];
extern u8 inv_mwin_pbox_tex[];
extern u16 inv_mwin_pbox1_tex_rgb_ci4_pal[];
extern u8 inv_mwin_pbox1_tex_rgb_ci4[];
extern u16 inv_mwin_pbox2_tex_rgb_ci4_pal[];
extern u8 inv_mwin_pbox2_tex_rgb_ci4[];
extern u16 inv_mwin_pbox3_tex_rgb_ci4_pal[];
extern u8 inv_mwin_pbox3_tex_rgb_ci4[];
extern u16 inv_mwin_pbox4_tex_rgb_ci4_pal[];
extern u8 inv_mwin_pbox4_tex_rgb_ci4[];
extern u16 inv_mwin_pbox5_tex_rgb_ci4_pal[];
extern u8 inv_mwin_pbox5_tex_rgb_ci4[];
extern u16 inv_mwin_binsen1_pal[];
extern u8 inv_mwin_binsen1_tex[];
extern u8 inv_mwin_binsen2_tex[];
extern u8 inv_mwin_binsen3_tex[];
extern u8 inv_mwin_binsen4_tex[];
extern u16 inv_mwin_okane1_pal[];
extern u8 inv_mwin_okane1_tex[];
extern u8 inv_mwin_okane2_tex[];
extern u8 inv_mwin_okane3_tex[];
extern u8 inv_mwin_okane4_tex[];
extern u16 inv_mwin_mushi_pal[];
extern u8 inv_mwin_mushi_tex[];
extern u16 inv_mwin_ono_pal[];
extern u8 inv_mwin_ono_tex[];
extern u16 inv_mwin_scoop_pal[];
extern u8 inv_mwin_scoop_tex[];
extern u16 inv_mwin_turi_tex_pal[];
extern u8 inv_mwin_turi_tex[];
extern u16 inv_mwin_unbrella_pal[];
extern u8 inv_mwin_unbrella_tex[];
extern u16 inv_mwin_mushi_pal[];
extern u8 inv_mwin_mushi_tex[];
extern u16 inv_mwin_gmushi_pal[];
extern u8 inv_mwin_gmushi_tex[];
extern u16 inv_mwin_gono_pal[];
extern u8 inv_mwin_gono_tex[];
extern u16 inv_mwin_gscoop_pal[];
extern u8 inv_mwin_gscoop_tex[];
extern u16 inv_mwin_gturi_pal[];
extern u8 inv_mwin_gturi_tex[];
extern u16 inv_mwin_ono_pal[];
extern u8 inv_mwin_ono_tex[];
extern u8 inv_mwin_ono2_tex[];
extern u8 inv_mwin_ono3_tex[];
extern u16 inv_mwin_fuusen_pal[];
extern u8 inv_mwin_fuusen_tex[];
extern u16 inv_mwin_kazaguruma_pal[];
extern u8 inv_mwin_kazaguruma_tex[];
extern u16 inv_mwin_utiwa_pal[];
extern u8 inv_mwin_utiwa_tex[];
extern u16 inv_mwin_01funa_pal[];
extern u8 inv_mwin_01funa_tex[];
extern u16 inv_mwin_02masu_pal[];
extern u8 inv_mwin_02masu_tex[];
extern u16 inv_mwin_03koi_pal[];
extern u8 inv_mwin_03koi_tex[];
extern u16 inv_mwin_04nishiki_pal[];
extern u8 inv_mwin_04nishiki_tex[];
extern u16 inv_mwin_07namazu_pal[];
extern u8 inv_mwin_07namazu_tex[];
extern u16 inv_mwin_13bass_pal[];
extern u8 inv_mwin_13bass_tex[];
extern u16 inv_mwin_14bassm_pal[];
extern u8 inv_mwin_14bassm_tex[];
extern u16 inv_mwin_15bassl_pal[];
extern u8 inv_mwin_15bassl_tex[];
extern u16 inv_mwin_12gill_pal[];
extern u8 inv_mwin_12gill_tex[];
extern u16 inv_mwin_08oonamazu_pal[];
extern u8 inv_mwin_08oonamazu_tex[];
extern u16 inv_mwin_16raigyo_pal[];
extern u8 inv_mwin_16raigyo_tex[];
extern u16 inv_mwin_05nigoi_pal[];
extern u8 inv_mwin_05nigoi_tex[];
extern u16 inv_mwin_06ugui_pal[];
extern u8 inv_mwin_06ugui_tex[];
extern u16 inv_mwin_09oikawa_pal[];
extern u8 inv_mwin_09oikawa_tex[];
extern u16 inv_mwin_10tanago_pal[];
extern u8 inv_mwin_10tanago_tex[];
extern u16 inv_mwin_11dojyou_pal[];
extern u8 inv_mwin_11dojyou_tex[];
extern u16 inv_mwin_19wakasagi_pal[];
extern u8 inv_mwin_19wakasagi_tex[];
extern u16 inv_mwin_20ayu_pal[];
extern u8 inv_mwin_20ayu_tex[];
extern u16 inv_mwin_21yamame_pal[];
extern u8 inv_mwin_21yamame_tex[];
extern u16 inv_mwin_23iwana_pal[];
extern u8 inv_mwin_23iwana_tex[];
extern u16 inv_mwin_22niji_pal[];
extern u8 inv_mwin_22niji_tex[];
extern u16 inv_mwin_24itou_pal[];
extern u8 inv_mwin_24itou_tex[];
extern u16 inv_mwin_25sake_pal[];
extern u8 inv_mwin_25sake_tex[];
extern u16 inv_mwin_26kingyo_pal[];
extern u8 inv_mwin_26kingyo_tex[];
extern u16 inv_mwin_30pirania_pal[];
extern u8 inv_mwin_30pirania_tex[];
extern u16 inv_mwin_31aroana_pal[];
extern u8 inv_mwin_31aroana_tex[];
extern u16 inv_mwin_17unagi_pal[];
extern u8 inv_mwin_17unagi_tex[];
extern u16 inv_mwin_18donko_pal[];
extern u8 inv_mwin_18donko_tex[];
extern u16 inv_mwin_29angel_pal[];
extern u8 inv_mwin_29angel_tex[];
extern u16 inv_mwin_28gupi_pal[];
extern u8 inv_mwin_28gupi_tex[];
extern u16 inv_mwin_27demekin_pal[];
extern u8 inv_mwin_27demekin_tex[];
extern u16 inv_mwin_32kaseki_pal[];
extern u8 inv_mwin_32kaseki_tex[];
extern u16 inv_mwin_33zarigani_pal[];
extern u8 inv_mwin_33zarigani_tex[];
extern u16 inv_mwin_34kaeru_pal[];
extern u8 inv_mwin_34kaeru_tex[];
extern u16 inv_mwin_35medaka_pal[];
extern u8 inv_mwin_35medaka_tex[];
extern u16 inv_mwin_36kurage_pal[];
extern u8 inv_mwin_36kurage_tex[];
extern u16 inv_mwin_37suzuki_pal[];
extern u8 inv_mwin_37suzuki_tex[];
extern u16 inv_mwin_38tai_pal[];
extern u8 inv_mwin_38tai_tex[];
extern u16 inv_mwin_39ishidai_pal[];
extern u8 inv_mwin_39ishidai_tex[];
extern u16 inv_mwin_40piraruku_pal[];
extern u8 inv_mwin_40piraruku_tex[];
extern u16 inv_mwin_fuku3_pal[];
extern u8 inv_mwin_fuku3_tex[];
extern u16 inv_mwin_mtegami_pal[];
extern u8 inv_mwin_mtegami_tex[];
extern u16 inv_mwin_video_pal[];
extern u8 inv_mwin_video_tex[];
extern u16 inv_mwin_tetyou_pal[];
extern u8 inv_mwin_tetyou_tex[];
extern u16 inv_mwin_pokepi_pal[];
extern u8 inv_mwin_pokepi_tex[];
extern u16 inv_mwin_manga_pal[];
extern u8 inv_mwin_manga_tex[];
extern u16 inv_mwin_ehon_pal[];
extern u8 inv_mwin_ehon_tex[];
extern u16 inv_mwin_GB_pal[];
extern u8 inv_mwin_GB_tex[];
extern u16 inv_mwin_camera2_pal[];
extern u8 inv_mwin_camera_tex[];
extern u16 inv_mwin_tokei_pal[];
extern u8 inv_mwin_tokei_tex[];
extern u16 inv_mwin_hankati_pal[];
extern u8 inv_mwin_hankati_tex[];
extern u16 inv_mwin_glasses_pal[];
extern u8 inv_mwin_glasses_tex[];
extern u16 inv_mwin_aki_pal[];
extern u8 inv_mwin_akikan_tex[];
extern u16 inv_mwin_kutu_pal[];
extern u8 inv_mwin_kutu_tex[];
extern u8 inv_mwin_taiya_tex[];
extern u16 inv_mwin_kaseki_pal[];
extern u8 inv_mwin_kaseki_tex[];
extern u16 inv_mwin_ana_pal[];
extern u8 inv_mwin_ana_tex[];
extern u16 inv_mwin_hiougi_pal[];
extern u8 inv_mwin_hiougi_tex[];
extern u16 inv_mwin_hirako_pal[];
extern u8 inv_mwin_hirako_tex[];
extern u16 inv_mwin_hone_pal[];
extern u8 inv_mwin_hone_tex[];
extern u16 inv_mwin_hoshida_pal[];
extern u8 inv_mwin_hoshida_tex[];
extern u16 inv_mwin_sanddollar_pal[];
extern u8 inv_mwin_sanddollar_tex[];
extern u16 inv_mwin_syako_pal[];
extern u8 inv_mwin_syako_tex[];
extern u16 inv_mwin_hora_pal[];
extern u8 inv_mwin_hora_tex[];
extern u16 inv_mwin_sango_pal[];
extern u8 inv_mwin_sango_tex[];
extern u16 inv_mwin_kanban_pal[];
extern u8 inv_mwin_kanban_tex[];
extern u16 inv_mwin_taisou_pal[];
extern u8 inv_mwin_taisou_tex[];
extern u16 inv_mwin_fork_pal[];
extern u8 inv_mwin_fork_tex[];
extern u16 inv_mwin_jyuutan_pal[];
extern u8 inv_mwin_jyuutan_tex[];
extern u16 inv_mwin_kabe2_pal[];
extern u8 inv_mwin_kabe_tex[];
extern u16 inv_mwin_apple_pal[];
extern u8 inv_mwin_apple_tex[];
extern u16 inv_mwin_nuts_pal[];
extern u8 inv_mwin_nuts_tex[];
extern u16 inv_mwin_pear_pal[];
extern u8 inv_mwin_pear_tex[];
extern u16 inv_mwin_peach_pal[];
extern u8 inv_mwin_peach_tex[];
extern u16 inv_mwin_orange_pal[];
extern u8 inv_mwin_orange_tex[];
extern u16 inv_mwin_matutake2_pal[];
extern u8 inv_mwin_matutake_tex[];
extern u16 inv_mwin_ame_pal[];
extern u8 inv_mwin_ame_tex[];
extern u16 inv_mwin_yashi_pal[];
extern u8 inv_mwin_yashi_tex[];
extern u16 inv_mwin_naegi_pal[];
extern u8 inv_mwin_naegi_tex[];
extern u16 inv_mwin_cnaegi_pal[];
extern u8 inv_mwin_cnaegi_tex[];
extern u16 inv_mwin_seed_pal[];
extern u8 inv_mwin_seed_tex[];
extern u16 inv_mwin_onpu_pal[];
extern u8 inv_mwin_onpu_tex[];
extern u16 inv_mwin_nittki_pal[];
extern u8 inv_mwin_nittki_tex[];
extern u16 inv_mwin_1fukubiki_pal[];
extern u16 inv_mwin_2fukubiki_pal[];
extern u16 inv_mwin_3fukubiki_pal[];
extern u16 inv_mwin_4fukubiki_pal[];
extern u16 inv_mwin_5fukubiki_pal[];
extern u16 inv_mwin_6fukubiki_pal[];
extern u16 inv_mwin_7fukubiki_pal[];
extern u16 inv_mwin_8fukubiki_pal[];
extern u16 inv_mwin_9fukubiki_pal[];
extern u16 inv_mwin_10fukubiki_pal[];
extern u16 inv_mwin_11fukubiki_pal[];
extern u16 inv_mwin_12fukubiki_pal[];
extern u8 inv_mwin_1biki1_tex[];
extern u8 inv_mwin_1biki2_tex[];
extern u8 inv_mwin_1biki3_tex[];
extern u8 inv_mwin_1biki4_tex[];
extern u8 inv_mwin_1biki5_tex[];
extern u16 inv_mwin_01monshiro_pal[];
extern u8 inv_mwin_01monshiro_tex[];
extern u16 inv_mwin_02monki_pal[];
extern u8 inv_mwin_02monki_tex[];
extern u16 inv_mwin_03kiageha_pal[];
extern u8 inv_mwin_03kiageha_tex[];
extern u16 inv_mwin_04ohmurasaki_pal[];
extern u8 inv_mwin_04ohmurasaki_tex[];
extern u16 inv_mwin_06minmin_pal[];
extern u8 inv_mwin_06minmin_tex[];
extern u16 inv_mwin_07tukutuku_pal[];
extern u8 inv_mwin_07tukutuku_tex[];
extern u16 inv_mwin_08higurashi_pal[];
extern u8 inv_mwin_08higurashi_tex[];
extern u16 inv_mwin_05abura_pal[];
extern u8 inv_mwin_05abura_tex[];
extern u16 inv_mwin_23hati_pal[];
extern u8 inv_mwin_23hati_tex[];
extern u16 inv_mwin_10shiokara_pal[];
extern u8 inv_mwin_10shiokara_tex[];
extern u16 inv_mwin_09akiakane_pal[];
extern u8 inv_mwin_09akiakane_tex[];
extern u16 inv_mwin_11ginyanma_pal[];
extern u8 inv_mwin_11ginyanma_tex[];
extern u16 inv_mwin_12oniyanma_pal[];
extern u8 inv_mwin_12oniyanma_tex[];
extern u16 inv_mwin_20syouryou_pal[];
extern u8 inv_mwin_20syouryou_tex[];
extern u16 inv_mwin_21tonosama_pal[];
extern u8 inv_mwin_21tonosama_tex[];
extern u16 inv_mwin_13koorogi_pal[];
extern u8 inv_mwin_13koorogi_tex[];
extern u16 inv_mwin_14kirigirisu_pal[];
extern u8 inv_mwin_14kirigirisu_tex[];
extern u16 inv_mwin_16suzumushi_pal[];
extern u8 inv_mwin_16suzumushi_tex[];
extern u16 inv_mwin_15matumushi_pal[];
extern u8 inv_mwin_15matumushi_tex[];
extern u16 inv_mwin_25kanabun_pal[];
extern u8 inv_mwin_25kanabun_tex[];
extern u16 inv_mwin_28kabuto_pal[];
extern u8 inv_mwin_28kabuto_tex[];
extern u16 inv_mwin_29hirata_pal[];
extern u8 inv_mwin_29hirata_tex[];
extern u16 inv_mwin_27tamamushi_pal[];
extern u8 inv_mwin_27tamamushi_tex[];
extern u16 inv_mwin_26gomadara_pal[];
extern u8 inv_mwin_26gomadara_tex[];
extern u16 inv_mwin_17tentou_pal[];
extern u8 inv_mwin_17tentou_tex[];
extern u16 inv_mwin_18nanahoshi_pal[];
extern u8 inv_mwin_18nanahoshi_tex[];
extern u16 inv_mwin_19kamakiri_pal[];
extern u8 inv_mwin_19kamakiri_tex[];
extern u16 inv_mwin_24genji_pal[];
extern u8 inv_mwin_24genji_tex[];
extern u16 inv_mwin_22danna_pal[];
extern u8 inv_mwin_22danna_tex[];
extern u16 inv_mwin_30nokogiri_pal[];
extern u8 inv_mwin_30nokogiri_tex[];
extern u16 inv_mwin_31miyama_pal[];
extern u8 inv_mwin_31miyama_tex[];
extern u16 inv_mwin_32okuwa_pal[];
extern u8 inv_mwin_32okuwa_tex[];
extern u16 inv_mwin_33maimai_pal[];
extern u8 inv_mwin_33maimai_tex[];
extern u16 inv_mwin_34kera_pal[];
extern u8 inv_mwin_34kera_tex[];
extern u16 inv_mwin_35amenbo_pal[];
extern u8 inv_mwin_35amenbo_tex[];
extern u16 inv_mwin_36mino_pal[];
extern u8 inv_mwin_36mino_tex[];
extern u16 inv_mwin_37dango_pal[];
extern u8 inv_mwin_37dango_tex[];
extern u16 inv_mwin_38kumo_pal[];
extern u8 inv_mwin_38kumo_tex[];
extern u16 inv_mwin_39ari_pal[];
extern u8 inv_mwin_39ari_tex[];
extern u16 inv_mwin_40ka_pal[];
extern u8 inv_mwin_40ka_tex[];
extern u16 inv_mwin_hitodama_pal[];
extern u8 inv_mwin_hitodama1_tex[];
extern u8 inv_mwin_hitodama2_tex[];
extern u8 inv_mwin_hitodama3_tex[];
extern u8 inv_mwin_hitodama4_tex[];
extern u8 inv_mwin_hitodama5_tex[];
extern u16 inv_mwin_fukubukuro_pal[];
extern u8 inv_mwin_fukubukuro_tex[];
extern u16 inv_mwin_fukubukuro2_pal[];
extern u8 inv_mwin_fukubukuro_tex_rgb_ci4[];
extern u16 inv_mwin_fukubukuro2_tex_rgb_ci4_pal[];
extern u8 inv_mwin_fukubukuro2_tex_rgb_ci4[];
extern u16 inv_mwin_cabu1_pal[];
extern u8 inv_mwin_cabu1_tex[];
extern u8 inv_mwin_cabu2_tex[];
extern u8 inv_mwin_cabu3_tex[];
extern u16 inv_mwin_2cabu1_pal[];
extern u8 inv_mwin_2cabu1_tex[];
static void mSM_draw_item(GRAPH* graph, f32 pos_x, f32 pos_y, f32 scale, mActor_name_t item, int present_flag,
int color_flag, int anim_frame, int shadow_flag, int mark_flag) {
static mSM_inventory_icon_info_c furniture_tex_data = { inv_mwin_leaf_pal, inv_mwin_leaf_tex };
static mSM_inventory_icon_info_c haniwa_tex_data = { inv_mwin_haniwa_pal, inv_mwin_haniwa_tex };
static mSM_inventory_icon_info_c fossil_tex_data = { inv_mwin_kaseki2_pal, inv_mwin_kaseki2_tex };
static mSM_inventory_icon_info_c unknown_tex_data = { inv_mwin_unknown_pal, inv_mwin_unknown_tex };
// clang-format off
static mSM_inventory_icon_info_c present_tex_data[] = {
{ inv_mwin_pbox2_pal, inv_mwin_pbox_tex },
{ inv_mwin_pbox2_pal, inv_mwin_pbox_tex },
{ inv_mwin_pbox1_tex_rgb_ci4_pal, inv_mwin_pbox1_tex_rgb_ci4 },
{ inv_mwin_pbox1_tex_rgb_ci4_pal, inv_mwin_pbox1_tex_rgb_ci4 },
{ inv_mwin_pbox2_tex_rgb_ci4_pal, inv_mwin_pbox2_tex_rgb_ci4 },
{ inv_mwin_pbox2_tex_rgb_ci4_pal, inv_mwin_pbox2_tex_rgb_ci4 },
{ inv_mwin_pbox3_tex_rgb_ci4_pal, inv_mwin_pbox3_tex_rgb_ci4 },
{ inv_mwin_pbox3_tex_rgb_ci4_pal, inv_mwin_pbox3_tex_rgb_ci4 },
{ inv_mwin_pbox4_tex_rgb_ci4_pal, inv_mwin_pbox4_tex_rgb_ci4 },
{ inv_mwin_pbox4_tex_rgb_ci4_pal, inv_mwin_pbox4_tex_rgb_ci4 },
{ inv_mwin_pbox5_tex_rgb_ci4_pal, inv_mwin_pbox5_tex_rgb_ci4 },
{ inv_mwin_pbox5_tex_rgb_ci4_pal, inv_mwin_pbox5_tex_rgb_ci4 },
};
// clang-format on
// clang-format off
static mSM_inventory_icon_info_c binsen_tex_table[] = {
{ inv_mwin_binsen1_pal, inv_mwin_binsen1_tex },
{ inv_mwin_binsen1_pal, inv_mwin_binsen2_tex },
{ inv_mwin_binsen1_pal, inv_mwin_binsen3_tex },
{ inv_mwin_binsen1_pal, inv_mwin_binsen4_tex },
};
// clang-format on
// clang-format off
static mSM_inventory_icon_info_c money_tex_table[] = {
{ inv_mwin_okane1_pal, inv_mwin_okane1_tex },
{ inv_mwin_okane1_pal, inv_mwin_okane2_tex },
{ inv_mwin_okane1_pal, inv_mwin_okane3_tex },
{ inv_mwin_okane1_pal, inv_mwin_okane4_tex },
};
// clang-format on
// clang-format off
static mSM_inventory_icon_info_c tool_tex_table[] = {
{ inv_mwin_mushi_pal, inv_mwin_mushi_tex },
{ inv_mwin_ono_pal, inv_mwin_ono_tex },
{ inv_mwin_scoop_pal, inv_mwin_scoop_tex },
{ inv_mwin_turi_tex_pal, inv_mwin_turi_tex },
{ inv_mwin_unbrella_pal, inv_mwin_unbrella_tex },
{ inv_mwin_unbrella_pal, inv_mwin_unbrella_tex },
{ inv_mwin_unbrella_pal, inv_mwin_unbrella_tex },
{ inv_mwin_unbrella_pal, inv_mwin_unbrella_tex },
{ inv_mwin_unbrella_pal, inv_mwin_unbrella_tex },
{ inv_mwin_unbrella_pal, inv_mwin_unbrella_tex },
{ inv_mwin_unbrella_pal, inv_mwin_unbrella_tex },
{ inv_mwin_unbrella_pal, inv_mwin_unbrella_tex },
{ inv_mwin_unbrella_pal, inv_mwin_unbrella_tex },
{ inv_mwin_unbrella_pal, inv_mwin_unbrella_tex },
{ inv_mwin_unbrella_pal, inv_mwin_unbrella_tex },
{ inv_mwin_unbrella_pal, inv_mwin_unbrella_tex },
{ inv_mwin_unbrella_pal, inv_mwin_unbrella_tex },
{ inv_mwin_unbrella_pal, inv_mwin_unbrella_tex },
{ inv_mwin_unbrella_pal, inv_mwin_unbrella_tex },
{ inv_mwin_unbrella_pal, inv_mwin_unbrella_tex },
{ inv_mwin_unbrella_pal, inv_mwin_unbrella_tex },
{ inv_mwin_unbrella_pal, inv_mwin_unbrella_tex },
{ inv_mwin_unbrella_pal, inv_mwin_unbrella_tex },
{ inv_mwin_unbrella_pal, inv_mwin_unbrella_tex },
{ inv_mwin_unbrella_pal, inv_mwin_unbrella_tex },
{ inv_mwin_unbrella_pal, inv_mwin_unbrella_tex },
{ inv_mwin_unbrella_pal, inv_mwin_unbrella_tex },
{ inv_mwin_unbrella_pal, inv_mwin_unbrella_tex },
{ inv_mwin_unbrella_pal, inv_mwin_unbrella_tex },
{ inv_mwin_unbrella_pal, inv_mwin_unbrella_tex },
{ inv_mwin_unbrella_pal, inv_mwin_unbrella_tex },
{ inv_mwin_unbrella_pal, inv_mwin_unbrella_tex },
{ inv_mwin_unbrella_pal, inv_mwin_unbrella_tex },
{ inv_mwin_unbrella_pal, inv_mwin_unbrella_tex },
{ inv_mwin_unbrella_pal, inv_mwin_unbrella_tex },
{ inv_mwin_unbrella_pal, inv_mwin_unbrella_tex },
{ inv_mwin_unbrella_pal, inv_mwin_unbrella_tex },
{ inv_mwin_unbrella_pal, inv_mwin_unbrella_tex },
{ inv_mwin_unbrella_pal, inv_mwin_unbrella_tex },
{ inv_mwin_unbrella_pal, inv_mwin_unbrella_tex },
{ inv_mwin_unbrella_pal, inv_mwin_unbrella_tex },
{ inv_mwin_unbrella_pal, inv_mwin_unbrella_tex },
{ inv_mwin_unbrella_pal, inv_mwin_unbrella_tex },
{ inv_mwin_unbrella_pal, inv_mwin_unbrella_tex },
{ inv_mwin_mushi_pal, inv_mwin_mushi_tex },
{ inv_mwin_mushi_pal, inv_mwin_mushi_tex },
{ inv_mwin_mushi_pal, inv_mwin_mushi_tex },
{ inv_mwin_mushi_pal, inv_mwin_mushi_tex },
{ inv_mwin_mushi_pal, inv_mwin_mushi_tex },
{ inv_mwin_mushi_pal, inv_mwin_mushi_tex },
{ inv_mwin_mushi_pal, inv_mwin_mushi_tex },
{ inv_mwin_mushi_pal, inv_mwin_mushi_tex },
{ inv_mwin_mushi_pal, inv_mwin_mushi_tex },
{ inv_mwin_mushi_pal, inv_mwin_mushi_tex },
{ inv_mwin_mushi_pal, inv_mwin_mushi_tex },
{ inv_mwin_mushi_pal, inv_mwin_mushi_tex },
{ inv_mwin_mushi_pal, inv_mwin_mushi_tex },
{ inv_mwin_gmushi_pal, inv_mwin_gmushi_tex },
{ inv_mwin_gono_pal, inv_mwin_gono_tex },
{ inv_mwin_gscoop_pal, inv_mwin_gscoop_tex },
{ inv_mwin_gturi_pal, inv_mwin_gturi_tex },
{ inv_mwin_ono_pal, inv_mwin_ono_tex },
{ inv_mwin_ono_pal, inv_mwin_ono2_tex },
{ inv_mwin_ono_pal, inv_mwin_ono2_tex },
{ inv_mwin_ono_pal, inv_mwin_ono2_tex },
{ inv_mwin_ono_pal, inv_mwin_ono3_tex },
{ inv_mwin_ono_pal, inv_mwin_ono3_tex },
{ inv_mwin_ono_pal, inv_mwin_ono3_tex },
{ inv_mwin_fuusen_pal, inv_mwin_fuusen_tex },
{ inv_mwin_fuusen_pal, inv_mwin_fuusen_tex },
{ inv_mwin_fuusen_pal, inv_mwin_fuusen_tex },
{ inv_mwin_fuusen_pal, inv_mwin_fuusen_tex },
{ inv_mwin_fuusen_pal, inv_mwin_fuusen_tex },
{ inv_mwin_fuusen_pal, inv_mwin_fuusen_tex },
{ inv_mwin_fuusen_pal, inv_mwin_fuusen_tex },
{ inv_mwin_fuusen_pal, inv_mwin_fuusen_tex },
{ inv_mwin_kazaguruma_pal, inv_mwin_kazaguruma_tex },
{ inv_mwin_kazaguruma_pal, inv_mwin_kazaguruma_tex },
{ inv_mwin_kazaguruma_pal, inv_mwin_kazaguruma_tex },
{ inv_mwin_kazaguruma_pal, inv_mwin_kazaguruma_tex },
{ inv_mwin_kazaguruma_pal, inv_mwin_kazaguruma_tex },
{ inv_mwin_kazaguruma_pal, inv_mwin_kazaguruma_tex },
{ inv_mwin_kazaguruma_pal, inv_mwin_kazaguruma_tex },
{ inv_mwin_kazaguruma_pal, inv_mwin_kazaguruma_tex },
{ inv_mwin_utiwa_pal, inv_mwin_utiwa_tex },
{ inv_mwin_utiwa_pal, inv_mwin_utiwa_tex },
{ inv_mwin_utiwa_pal, inv_mwin_utiwa_tex },
{ inv_mwin_utiwa_pal, inv_mwin_utiwa_tex },
{ inv_mwin_utiwa_pal, inv_mwin_utiwa_tex },
{ inv_mwin_utiwa_pal, inv_mwin_utiwa_tex },
{ inv_mwin_utiwa_pal, inv_mwin_utiwa_tex },
{ inv_mwin_utiwa_pal, inv_mwin_utiwa_tex },
};
// clang-format on
// clang-format off
static mSM_inventory_icon_info_c fish_tex_table[] = {
{ inv_mwin_01funa_pal, inv_mwin_01funa_tex },
{ inv_mwin_02masu_pal, inv_mwin_02masu_tex },
{ inv_mwin_03koi_pal, inv_mwin_03koi_tex },
{ inv_mwin_04nishiki_pal, inv_mwin_04nishiki_tex },
{ inv_mwin_07namazu_pal, inv_mwin_07namazu_tex },
{ inv_mwin_13bass_pal, inv_mwin_13bass_tex },
{ inv_mwin_14bassm_pal, inv_mwin_14bassm_tex },
{ inv_mwin_15bassl_pal, inv_mwin_15bassl_tex },
{ inv_mwin_12gill_pal, inv_mwin_12gill_tex },
{ inv_mwin_08oonamazu_pal, inv_mwin_08oonamazu_tex },
{ inv_mwin_16raigyo_pal, inv_mwin_16raigyo_tex },
{ inv_mwin_05nigoi_pal, inv_mwin_05nigoi_tex },
{ inv_mwin_06ugui_pal, inv_mwin_06ugui_tex },
{ inv_mwin_09oikawa_pal, inv_mwin_09oikawa_tex },
{ inv_mwin_10tanago_pal, inv_mwin_10tanago_tex },
{ inv_mwin_11dojyou_pal, inv_mwin_11dojyou_tex },
{ inv_mwin_19wakasagi_pal, inv_mwin_19wakasagi_tex },
{ inv_mwin_20ayu_pal, inv_mwin_20ayu_tex },
{ inv_mwin_21yamame_pal, inv_mwin_21yamame_tex },
{ inv_mwin_23iwana_pal, inv_mwin_23iwana_tex },
{ inv_mwin_22niji_pal, inv_mwin_22niji_tex },
{ inv_mwin_24itou_pal, inv_mwin_24itou_tex },
{ inv_mwin_25sake_pal, inv_mwin_25sake_tex },
{ inv_mwin_26kingyo_pal, inv_mwin_26kingyo_tex },
{ inv_mwin_30pirania_pal, inv_mwin_30pirania_tex },
{ inv_mwin_31aroana_pal, inv_mwin_31aroana_tex },
{ inv_mwin_17unagi_pal, inv_mwin_17unagi_tex },
{ inv_mwin_18donko_pal, inv_mwin_18donko_tex },
{ inv_mwin_29angel_pal, inv_mwin_29angel_tex },
{ inv_mwin_28gupi_pal, inv_mwin_28gupi_tex },
{ inv_mwin_27demekin_pal, inv_mwin_27demekin_tex },
{ inv_mwin_32kaseki_pal, inv_mwin_32kaseki_tex },
{ inv_mwin_33zarigani_pal, inv_mwin_33zarigani_tex },
{ inv_mwin_34kaeru_pal, inv_mwin_34kaeru_tex },
{ inv_mwin_35medaka_pal, inv_mwin_35medaka_tex },
{ inv_mwin_36kurage_pal, inv_mwin_36kurage_tex },
{ inv_mwin_37suzuki_pal, inv_mwin_37suzuki_tex },
{ inv_mwin_38tai_pal, inv_mwin_38tai_tex },
{ inv_mwin_39ishidai_pal, inv_mwin_39ishidai_tex },
{ inv_mwin_40piraruku_pal, inv_mwin_40piraruku_tex },
};
// clang-format on
// clang-format off
static mSM_inventory_icon_info_c cloth_tex_table[1] = {
{ inv_mwin_fuku3_pal, inv_mwin_fuku3_tex },
};
// clang-format on
// clang-format off
static mSM_inventory_icon_info_c etc_tex_table[] = {
{ inv_mwin_mtegami_pal, inv_mwin_mtegami_tex },
{ inv_mwin_fuku3_pal, inv_mwin_fuku3_tex },
{ inv_mwin_okane1_pal, inv_mwin_okane1_tex },
{ inv_mwin_video_pal, inv_mwin_video_tex },
{ inv_mwin_tetyou_pal, inv_mwin_tetyou_tex },
{ inv_mwin_pokepi_pal, inv_mwin_pokepi_tex },
{ inv_mwin_manga_pal, inv_mwin_manga_tex },
{ inv_mwin_ehon_pal, inv_mwin_ehon_tex },
{ inv_mwin_GB_pal, inv_mwin_GB_tex },
{ inv_mwin_camera2_pal, inv_mwin_camera_tex },
{ inv_mwin_tokei_pal, inv_mwin_tokei_tex },
{ inv_mwin_hankati_pal, inv_mwin_hankati_tex },
{ inv_mwin_glasses_pal, inv_mwin_glasses_tex },
{ inv_mwin_okane1_pal, inv_mwin_okane1_tex },
{ inv_mwin_aki_pal, inv_mwin_akikan_tex },
{ inv_mwin_kutu_pal, inv_mwin_kutu_tex },
{ inv_mwin_kutu_pal, inv_mwin_taiya_tex },
{ inv_mwin_kaseki_pal, inv_mwin_kaseki_tex },
{ inv_mwin_ana_pal, inv_mwin_ana_tex },
{ inv_mwin_ana_pal, inv_mwin_ana_tex },
{ inv_mwin_hiougi_pal, inv_mwin_hiougi_tex },
{ inv_mwin_hirako_pal, inv_mwin_hirako_tex },
{ inv_mwin_hone_pal, inv_mwin_hone_tex },
{ inv_mwin_hoshida_pal, inv_mwin_hoshida_tex },
{ inv_mwin_sanddollar_pal, inv_mwin_sanddollar_tex },
{ inv_mwin_syako_pal, inv_mwin_syako_tex },
{ inv_mwin_hora_pal, inv_mwin_hora_tex },
{ inv_mwin_sango_pal, inv_mwin_sango_tex },
{ inv_mwin_pbox2_pal, inv_mwin_pbox_tex },
{ inv_mwin_pbox2_pal, inv_mwin_pbox_tex },
{ inv_mwin_kanban_pal, inv_mwin_kanban_tex },
{ inv_mwin_pbox2_pal, inv_mwin_pbox_tex },
{ inv_mwin_pbox2_pal, inv_mwin_pbox_tex },
{ inv_mwin_pbox2_pal, inv_mwin_pbox_tex },
{ inv_mwin_pbox2_pal, inv_mwin_pbox_tex },
{ inv_mwin_taisou_pal, inv_mwin_taisou_tex },
{ inv_mwin_taisou_pal, inv_mwin_taisou_tex },
{ inv_mwin_taisou_pal, inv_mwin_taisou_tex },
{ inv_mwin_taisou_pal, inv_mwin_taisou_tex },
{ inv_mwin_taisou_pal, inv_mwin_taisou_tex },
{ inv_mwin_taisou_pal, inv_mwin_taisou_tex },
{ inv_mwin_taisou_pal, inv_mwin_taisou_tex },
{ inv_mwin_taisou_pal, inv_mwin_taisou_tex },
{ inv_mwin_taisou_pal, inv_mwin_taisou_tex },
{ inv_mwin_taisou_pal, inv_mwin_taisou_tex },
{ inv_mwin_taisou_pal, inv_mwin_taisou_tex },
{ inv_mwin_taisou_pal, inv_mwin_taisou_tex },
{ inv_mwin_taisou_pal, inv_mwin_taisou_tex },
{ inv_mwin_fork_pal, inv_mwin_fork_tex },
};
// clang-format on
// clang-format off
static mSM_inventory_icon_info_c carpet_tex_table[1] = {
{ inv_mwin_jyuutan_pal, inv_mwin_jyuutan_tex },
};
// clang-format on
// clang-format off
static mSM_inventory_icon_info_c wall_tex_table[1] = {
{ inv_mwin_kabe2_pal, inv_mwin_kabe_tex },
};
// clang-format on
// clang-format off
static mSM_inventory_icon_info_c food_tex_table[] = {
{ inv_mwin_apple_pal, inv_mwin_apple_tex },
{ inv_mwin_nuts_pal, inv_mwin_nuts_tex },
{ inv_mwin_pear_pal, inv_mwin_pear_tex },
{ inv_mwin_peach_pal, inv_mwin_peach_tex },
{ inv_mwin_orange_pal, inv_mwin_orange_tex },
{ inv_mwin_matutake2_pal, inv_mwin_matutake_tex },
{ inv_mwin_ame_pal, inv_mwin_ame_tex },
{ inv_mwin_yashi_pal, inv_mwin_yashi_tex },
};
// clang-format on
// clang-format off
static mSM_inventory_icon_info_c plant_tex_table[] = {
{ inv_mwin_naegi_pal, inv_mwin_naegi_tex },
{ inv_mwin_cnaegi_pal, inv_mwin_cnaegi_tex },
{ inv_mwin_seed_pal, inv_mwin_seed_tex },
{ inv_mwin_seed_pal, inv_mwin_seed_tex },
{ inv_mwin_seed_pal, inv_mwin_seed_tex },
{ inv_mwin_seed_pal, inv_mwin_seed_tex },
{ inv_mwin_seed_pal, inv_mwin_seed_tex },
{ inv_mwin_seed_pal, inv_mwin_seed_tex },
{ inv_mwin_seed_pal, inv_mwin_seed_tex },
{ inv_mwin_seed_pal, inv_mwin_seed_tex },
{ inv_mwin_seed_pal, inv_mwin_seed_tex },
};
// clang-format on
// clang-format off
static mSM_inventory_icon_info_c minidisk_tex_table[1] = {
{ inv_mwin_onpu_pal, inv_mwin_onpu_tex },
};
// clang-format on
// clang-format off
static mSM_inventory_icon_info_c etc2_tex_table[] = {
{ inv_mwin_nittki_pal, inv_mwin_nittki_tex },
{ inv_mwin_nittki_pal, inv_mwin_nittki_tex },
{ inv_mwin_nittki_pal, inv_mwin_nittki_tex },
{ inv_mwin_nittki_pal, inv_mwin_nittki_tex },
{ inv_mwin_nittki_pal, inv_mwin_nittki_tex },
{ inv_mwin_nittki_pal, inv_mwin_nittki_tex },
{ inv_mwin_nittki_pal, inv_mwin_nittki_tex },
{ inv_mwin_nittki_pal, inv_mwin_nittki_tex },
{ inv_mwin_nittki_pal, inv_mwin_nittki_tex },
{ inv_mwin_nittki_pal, inv_mwin_nittki_tex },
{ inv_mwin_nittki_pal, inv_mwin_nittki_tex },
{ inv_mwin_nittki_pal, inv_mwin_nittki_tex },
{ inv_mwin_nittki_pal, inv_mwin_nittki_tex },
{ inv_mwin_nittki_pal, inv_mwin_nittki_tex },
{ inv_mwin_nittki_pal, inv_mwin_nittki_tex },
{ inv_mwin_nittki_pal, inv_mwin_nittki_tex },
};
// clang-format on
// clang-format off
static mSM_inventory_icon_info_c ticket_tex_table[] = {
{ inv_mwin_1fukubiki_pal, inv_mwin_1biki1_tex },
{ inv_mwin_1fukubiki_pal, inv_mwin_1biki2_tex },
{ inv_mwin_1fukubiki_pal, inv_mwin_1biki3_tex },
{ inv_mwin_1fukubiki_pal, inv_mwin_1biki4_tex },
{ inv_mwin_1fukubiki_pal, inv_mwin_1biki5_tex },
{ inv_mwin_1fukubiki_pal, inv_mwin_1biki1_tex },
{ inv_mwin_1fukubiki_pal, inv_mwin_1biki1_tex },
{ inv_mwin_1fukubiki_pal, inv_mwin_1biki1_tex },
{ inv_mwin_2fukubiki_pal, inv_mwin_1biki1_tex },
{ inv_mwin_2fukubiki_pal, inv_mwin_1biki2_tex },
{ inv_mwin_2fukubiki_pal, inv_mwin_1biki3_tex },
{ inv_mwin_2fukubiki_pal, inv_mwin_1biki4_tex },
{ inv_mwin_2fukubiki_pal, inv_mwin_1biki5_tex },
{ inv_mwin_2fukubiki_pal, inv_mwin_1biki1_tex },
{ inv_mwin_2fukubiki_pal, inv_mwin_1biki1_tex },
{ inv_mwin_2fukubiki_pal, inv_mwin_1biki1_tex },
{ inv_mwin_3fukubiki_pal, inv_mwin_1biki1_tex },
{ inv_mwin_3fukubiki_pal, inv_mwin_1biki2_tex },
{ inv_mwin_3fukubiki_pal, inv_mwin_1biki3_tex },
{ inv_mwin_3fukubiki_pal, inv_mwin_1biki4_tex },
{ inv_mwin_3fukubiki_pal, inv_mwin_1biki5_tex },
{ inv_mwin_3fukubiki_pal, inv_mwin_1biki1_tex },
{ inv_mwin_3fukubiki_pal, inv_mwin_1biki1_tex },
{ inv_mwin_3fukubiki_pal, inv_mwin_1biki1_tex },
{ inv_mwin_4fukubiki_pal, inv_mwin_1biki1_tex },
{ inv_mwin_4fukubiki_pal, inv_mwin_1biki2_tex },
{ inv_mwin_4fukubiki_pal, inv_mwin_1biki3_tex },
{ inv_mwin_4fukubiki_pal, inv_mwin_1biki4_tex },
{ inv_mwin_4fukubiki_pal, inv_mwin_1biki5_tex },
{ inv_mwin_4fukubiki_pal, inv_mwin_1biki1_tex },
{ inv_mwin_4fukubiki_pal, inv_mwin_1biki1_tex },
{ inv_mwin_4fukubiki_pal, inv_mwin_1biki1_tex },
{ inv_mwin_5fukubiki_pal, inv_mwin_1biki1_tex },
{ inv_mwin_5fukubiki_pal, inv_mwin_1biki2_tex },
{ inv_mwin_5fukubiki_pal, inv_mwin_1biki3_tex },
{ inv_mwin_5fukubiki_pal, inv_mwin_1biki4_tex },
{ inv_mwin_5fukubiki_pal, inv_mwin_1biki5_tex },
{ inv_mwin_5fukubiki_pal, inv_mwin_1biki1_tex },
{ inv_mwin_5fukubiki_pal, inv_mwin_1biki1_tex },
{ inv_mwin_5fukubiki_pal, inv_mwin_1biki1_tex },
{ inv_mwin_6fukubiki_pal, inv_mwin_1biki1_tex },
{ inv_mwin_6fukubiki_pal, inv_mwin_1biki2_tex },
{ inv_mwin_6fukubiki_pal, inv_mwin_1biki3_tex },
{ inv_mwin_6fukubiki_pal, inv_mwin_1biki4_tex },
{ inv_mwin_6fukubiki_pal, inv_mwin_1biki5_tex },
{ inv_mwin_6fukubiki_pal, inv_mwin_1biki1_tex },
{ inv_mwin_6fukubiki_pal, inv_mwin_1biki1_tex },
{ inv_mwin_6fukubiki_pal, inv_mwin_1biki1_tex },
{ inv_mwin_7fukubiki_pal, inv_mwin_1biki1_tex },
{ inv_mwin_7fukubiki_pal, inv_mwin_1biki2_tex },
{ inv_mwin_7fukubiki_pal, inv_mwin_1biki3_tex },
{ inv_mwin_7fukubiki_pal, inv_mwin_1biki4_tex },
{ inv_mwin_7fukubiki_pal, inv_mwin_1biki5_tex },
{ inv_mwin_7fukubiki_pal, inv_mwin_1biki1_tex },
{ inv_mwin_7fukubiki_pal, inv_mwin_1biki1_tex },
{ inv_mwin_7fukubiki_pal, inv_mwin_1biki1_tex },
{ inv_mwin_8fukubiki_pal, inv_mwin_1biki1_tex },
{ inv_mwin_8fukubiki_pal, inv_mwin_1biki2_tex },
{ inv_mwin_8fukubiki_pal, inv_mwin_1biki3_tex },
{ inv_mwin_8fukubiki_pal, inv_mwin_1biki4_tex },
{ inv_mwin_8fukubiki_pal, inv_mwin_1biki5_tex },
{ inv_mwin_8fukubiki_pal, inv_mwin_1biki1_tex },
{ inv_mwin_8fukubiki_pal, inv_mwin_1biki1_tex },
{ inv_mwin_8fukubiki_pal, inv_mwin_1biki1_tex },
{ inv_mwin_9fukubiki_pal, inv_mwin_1biki1_tex },
{ inv_mwin_9fukubiki_pal, inv_mwin_1biki2_tex },
{ inv_mwin_9fukubiki_pal, inv_mwin_1biki3_tex },
{ inv_mwin_9fukubiki_pal, inv_mwin_1biki4_tex },
{ inv_mwin_9fukubiki_pal, inv_mwin_1biki5_tex },
{ inv_mwin_9fukubiki_pal, inv_mwin_1biki1_tex },
{ inv_mwin_9fukubiki_pal, inv_mwin_1biki1_tex },
{ inv_mwin_9fukubiki_pal, inv_mwin_1biki1_tex },
{ inv_mwin_10fukubiki_pal, inv_mwin_1biki1_tex },
{ inv_mwin_10fukubiki_pal, inv_mwin_1biki2_tex },
{ inv_mwin_10fukubiki_pal, inv_mwin_1biki3_tex },
{ inv_mwin_10fukubiki_pal, inv_mwin_1biki4_tex },
{ inv_mwin_10fukubiki_pal, inv_mwin_1biki5_tex },
{ inv_mwin_10fukubiki_pal, inv_mwin_1biki1_tex },
{ inv_mwin_10fukubiki_pal, inv_mwin_1biki1_tex },
{ inv_mwin_10fukubiki_pal, inv_mwin_1biki1_tex },
{ inv_mwin_11fukubiki_pal, inv_mwin_1biki1_tex },
{ inv_mwin_11fukubiki_pal, inv_mwin_1biki2_tex },
{ inv_mwin_11fukubiki_pal, inv_mwin_1biki3_tex },
{ inv_mwin_11fukubiki_pal, inv_mwin_1biki4_tex },
{ inv_mwin_11fukubiki_pal, inv_mwin_1biki5_tex },
{ inv_mwin_11fukubiki_pal, inv_mwin_1biki1_tex },
{ inv_mwin_11fukubiki_pal, inv_mwin_1biki1_tex },
{ inv_mwin_11fukubiki_pal, inv_mwin_1biki1_tex },
{ inv_mwin_12fukubiki_pal, inv_mwin_1biki1_tex },
{ inv_mwin_12fukubiki_pal, inv_mwin_1biki2_tex },
{ inv_mwin_12fukubiki_pal, inv_mwin_1biki3_tex },
{ inv_mwin_12fukubiki_pal, inv_mwin_1biki4_tex },
{ inv_mwin_12fukubiki_pal, inv_mwin_1biki5_tex },
{ inv_mwin_12fukubiki_pal, inv_mwin_1biki1_tex },
{ inv_mwin_12fukubiki_pal, inv_mwin_1biki1_tex },
{ inv_mwin_12fukubiki_pal, inv_mwin_1biki1_tex },
};
// clang-format on
// clang-format off
static mSM_inventory_icon_info_c insect_tex_table[] = {
{ inv_mwin_01monshiro_pal, inv_mwin_01monshiro_tex },
{ inv_mwin_02monki_pal, inv_mwin_02monki_tex },
{ inv_mwin_03kiageha_pal, inv_mwin_03kiageha_tex },
{ inv_mwin_04ohmurasaki_pal, inv_mwin_04ohmurasaki_tex },
{ inv_mwin_06minmin_pal, inv_mwin_06minmin_tex },
{ inv_mwin_07tukutuku_pal, inv_mwin_07tukutuku_tex },
{ inv_mwin_08higurashi_pal, inv_mwin_08higurashi_tex },
{ inv_mwin_05abura_pal, inv_mwin_05abura_tex },
{ inv_mwin_23hati_pal, inv_mwin_23hati_tex },
{ inv_mwin_10shiokara_pal, inv_mwin_10shiokara_tex },
{ inv_mwin_09akiakane_pal, inv_mwin_09akiakane_tex },
{ inv_mwin_11ginyanma_pal, inv_mwin_11ginyanma_tex },
{ inv_mwin_12oniyanma_pal, inv_mwin_12oniyanma_tex },
{ inv_mwin_20syouryou_pal, inv_mwin_20syouryou_tex },
{ inv_mwin_21tonosama_pal, inv_mwin_21tonosama_tex },
{ inv_mwin_13koorogi_pal, inv_mwin_13koorogi_tex },
{ inv_mwin_14kirigirisu_pal, inv_mwin_14kirigirisu_tex },
{ inv_mwin_16suzumushi_pal, inv_mwin_16suzumushi_tex },
{ inv_mwin_15matumushi_pal, inv_mwin_15matumushi_tex },
{ inv_mwin_25kanabun_pal, inv_mwin_25kanabun_tex },
{ inv_mwin_28kabuto_pal, inv_mwin_28kabuto_tex },
{ inv_mwin_29hirata_pal, inv_mwin_29hirata_tex },
{ inv_mwin_27tamamushi_pal, inv_mwin_27tamamushi_tex },
{ inv_mwin_26gomadara_pal, inv_mwin_26gomadara_tex },
{ inv_mwin_17tentou_pal, inv_mwin_17tentou_tex },
{ inv_mwin_18nanahoshi_pal, inv_mwin_18nanahoshi_tex },
{ inv_mwin_19kamakiri_pal, inv_mwin_19kamakiri_tex },
{ inv_mwin_24genji_pal, inv_mwin_24genji_tex },
{ inv_mwin_22danna_pal, inv_mwin_22danna_tex },
{ inv_mwin_30nokogiri_pal, inv_mwin_30nokogiri_tex },
{ inv_mwin_31miyama_pal, inv_mwin_31miyama_tex },
{ inv_mwin_32okuwa_pal, inv_mwin_32okuwa_tex },
{ inv_mwin_33maimai_pal, inv_mwin_33maimai_tex },
{ inv_mwin_34kera_pal, inv_mwin_34kera_tex },
{ inv_mwin_35amenbo_pal, inv_mwin_35amenbo_tex },
{ inv_mwin_36mino_pal, inv_mwin_36mino_tex },
{ inv_mwin_37dango_pal, inv_mwin_37dango_tex },
{ inv_mwin_38kumo_pal, inv_mwin_38kumo_tex },
{ inv_mwin_39ari_pal, inv_mwin_39ari_tex },
{ inv_mwin_40ka_pal, inv_mwin_40ka_tex },
{ inv_mwin_hitodama_pal, inv_mwin_hitodama1_tex },
{ inv_mwin_hitodama_pal, inv_mwin_hitodama2_tex },
{ inv_mwin_hitodama_pal, inv_mwin_hitodama3_tex },
{ inv_mwin_hitodama_pal, inv_mwin_hitodama4_tex },
{ inv_mwin_hitodama_pal, inv_mwin_hitodama5_tex },
};
// clang-format on
// clang-format off
static mSM_inventory_icon_info_c hukuro_tex_table[] = {
{ inv_mwin_fukubukuro_pal, inv_mwin_fukubukuro_tex },
{ inv_mwin_fukubukuro_pal, inv_mwin_fukubukuro_tex },
{ inv_mwin_fukubukuro2_pal, inv_mwin_fukubukuro_tex_rgb_ci4 },
{ inv_mwin_fukubukuro2_pal, inv_mwin_fukubukuro_tex_rgb_ci4 },
{ inv_mwin_fukubukuro2_tex_rgb_ci4_pal, inv_mwin_fukubukuro2_tex_rgb_ci4 },
{ inv_mwin_fukubukuro2_tex_rgb_ci4_pal, inv_mwin_fukubukuro2_tex_rgb_ci4 },
};
// clang-format on
// clang-format off
static mSM_inventory_icon_info_c kabu_tex_table[] = {
{ inv_mwin_cabu1_pal, inv_mwin_cabu1_tex },
{ inv_mwin_cabu1_pal, inv_mwin_cabu2_tex },
{ inv_mwin_cabu1_pal, inv_mwin_cabu3_tex },
{ inv_mwin_2cabu1_pal, inv_mwin_2cabu1_tex },
};
// clang-format on
// clang-format off
static mSM_inventory_icon_info_c* item_tex_data_table[] = {
binsen_tex_table,
money_tex_table,
tool_tex_table,
fish_tex_table,
cloth_tex_table,
etc_tex_table,
carpet_tex_table,
wall_tex_table,
food_tex_table,
plant_tex_table,
minidisk_tex_table,
etc2_tex_table,
ticket_tex_table,
insect_tex_table,
hukuro_tex_table,
kabu_tex_table,
};
// clang-format on
mSM_inventory_icon_info_c* icon;
u16* palette;
rgba_t color;
int category = -1;
int alpha_flag = FALSE;
u8 l;
if (scale < 0.05f) {
return;
}
if (present_flag) {
if (anim_frame > 11) {
/* Start fading out */
icon = &present_tex_data[11];
if (anim_frame > 22) {
alpha_flag = TRUE;
}
} else {
icon = &present_tex_data[anim_frame];
}
} else {
if (item >= HANIWA_START && item <= HANIWA_END) {
icon = &haniwa_tex_data;
} else if (item >= FTR_DINO_START && item <= FTR_DINO_END) {
icon = &fossil_tex_data;
} else if (mNT_check_unknown(item) == TRUE) {
icon = &unknown_tex_data;
} else if (ITEM_IS_FTR(item)) {
icon = &furniture_tex_data;
} else {
int groupNo = mSM_get_groupNo(item);
category = ITEM_NAME_GET_CAT(item);
switch (category) {
case ITEM1_CAT_HUKUBUKURO:
icon = &item_tex_data_table[category][anim_frame];
break;
case ITEM1_CAT_PAPER:
icon = &item_tex_data_table[category][1 + PAPER2STACK(item - ITM_PAPER_START)] - 1;
break;
case ITEM1_CAT_CLOTH:
case ITEM1_CAT_CARPET:
case ITEM1_CAT_WALL:
case ITEM1_CAT_MINIDISK:
case ITEM1_CAT_DUMMY:
icon = &item_tex_data_table[category][0];
break;
default:
icon = &item_tex_data_table[category][groupNo];
break;
}
}
}
if (icon != NULL) {
if ((category == ITEM1_CAT_FISH || category == ITEM1_CAT_INSECT) && anim_frame != 0) {
/* Fish & insects have two back-to-back palettes for inventory & collection windows */
palette = 16 + icon->pal;
} else {
palette = icon->pal;
}
if (color_flag) {
if (alpha_flag) {
color.a = (int)(((48 - anim_frame) * 255) / 26);
} else {
color.a = 255;
}
color.r = 255;
color.g = 255;
color.b = 255;
l = 255;
} else {
color.r = 100;
color.g = 115;
color.b = 160;
color.a = 255;
l = 100;
}
}
if (icon != NULL) {
mSM_set_dl_item(graph, pos_x, pos_y, scale, icon, palette, l, &color, shadow_flag, mark_flag);
}
}
enum {
mSM_MAIL_NORMAL,
mSM_MAIL_PRESENT,
mSM_MAIL_SEND,
mSM_MAIL_SEND_PRESENT,
mSM_MAIL_NORMAL2,
mSM_MAIL_PRESENT2,
mSM_MAIL_NUM
};
extern u16 inv_mwin_mtegami_pal[];
extern u8 inv_mwin_mtegami_tex[];
extern u8 inv_mwin_pmtegami_tex[];
extern u16 inv_mwin_otegami_pal[];
extern u8 inv_mwin_otegami_tex[];
extern u8 inv_mwin_potegami_tex[];
extern u16 inv_mwin_mtegami2_pal[];
extern u8 inv_mwin_mtegami2_tex[];
extern u8 inv_mwin_pmtegami2_tex[];
extern Gfx inv_item_model[];
extern Gfx inv_mark_model[];
static void mSM_draw_mail(GRAPH* graph, f32 pos_x, f32 pos_y, f32 scale, Mail_c* mail, int color_flag, int shadow_flag,
int mark_flag) {
static mSM_inventory_icon_info_c letter_tex_data_table[] = {
/* Letters */
{ inv_mwin_mtegami_pal, inv_mwin_mtegami_tex },
{ inv_mwin_mtegami_pal, inv_mwin_pmtegami_tex },
/* Send letters */
{ inv_mwin_otegami_pal, inv_mwin_otegami_tex },
{ inv_mwin_otegami_pal, inv_mwin_potegami_tex },
/* Opened? letters */
{ inv_mwin_mtegami2_pal, inv_mwin_mtegami2_tex },
{ inv_mwin_mtegami2_pal, inv_mwin_pmtegami2_tex },
};
mSM_inventory_icon_info_c* icon;
int type;
if (mMl_check_send_mail(mail)) {
type = mSM_MAIL_SEND;
} else if (mail->content.font == mMl_FONT_4 || mail->content.font == mMl_FONT_2) {
type = mSM_MAIL_NORMAL2;
} else {
type = mSM_MAIL_NORMAL;
}
if (mail->present != EMPTY_NO) {
type++;
}
icon = &letter_tex_data_table[type];
Matrix_scale(16.0f, 16.0f, 1.0f, 0);
Matrix_translate(pos_x, pos_y, 140.0f, 1);
Matrix_scale(scale, scale, 1.0f, 1);
OPEN_POLY_OPA_DISP(graph);
gDPPipeSync(POLY_OPA_DISP++);
gSPMatrix(POLY_OPA_DISP++, _Matrix_to_Mtx_new(graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPSegment(POLY_OPA_DISP++, G_MWO_SEGMENT_9, icon->pal);
gSPSegment(POLY_OPA_DISP++, G_MWO_SEGMENT_A, icon->tex);
gDPSetAlphaCompare(POLY_OPA_DISP++, G_AC_THRESHOLD);
gDPSetBlendColor(POLY_OPA_DISP++, 255, 255, 255, 40);
if (color_flag) {
gDPSetPrimColor(POLY_OPA_DISP++, 0, 255, 255, 255, 255, 255);
} else {
gDPSetPrimColor(POLY_OPA_DISP++, 0, 130, 255, 110, 105, 255);
}
if (shadow_flag == FALSE) {
gDPSetCombineLERP(POLY_OPA_DISP++, TEXEL0, PRIMITIVE, PRIM_LOD_FRAC, PRIMITIVE, 0, 0, 0, TEXEL0, TEXEL0,
PRIMITIVE, PRIM_LOD_FRAC, PRIMITIVE, 0, 0, 0, TEXEL0);
}
gSPDisplayList(POLY_OPA_DISP++, inv_item_model);
if (mark_flag) {
f32 frame_per = (((f32)(gamePT->frame_counter % 40)) * (1.0f / 40.0f)) * 2.0f;
if (frame_per > 1.0f) {
frame_per = 2.0f - frame_per;
}
gDPPipeSync(POLY_OPA_DISP++);
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 0, (int)(frame_per * 90.0f + 95.0f), 0, 255);
gDPSetEnvColor(POLY_OPA_DISP++, (int)(frame_per * 60.0f), (int)(frame_per * 45.0f + 210.0f),
(int)(frame_per * 60.0f), 255);
gSPDisplayList(POLY_OPA_DISP++, inv_mark_model);
}
gDPPipeSync(POLY_OPA_DISP++);
gDPSetTextureLUT(POLY_OPA_DISP++, G_TT_RGBA16);
gDPSetAlphaCompare(POLY_OPA_DISP++, G_AC_NONE);
gDPSetBlendColor(POLY_OPA_DISP++, 255, 255, 255, 8);
CLOSE_POLY_OPA_DISP(graph);
}
extern void mSM_draw_original(Submenu* submenu, GRAPH* graph, f32 pos_x, f32 pos_y, f32 scale, mActor_name_t item,
int color_flag) {
if (ITEM_IS_RSVNWORG(item)) {
mNW_draw_original(submenu, graph, pos_x, pos_y, scale, item - RSV_NW_ORIGINAL0, color_flag);
}
if (ITEM_IS_RSVCPORG(item)) {
mCO_draw_cporiginal(submenu, graph, pos_x, pos_y, scale, item - RSV_NW_ORIGINAL0, color_flag);
}
if (ITEM_IS_RSVGBAORG(item)) {
mGB_draw_gba(submenu, graph, pos_x, pos_y, scale, item - RSV_GBAORIGINAL0, color_flag);
}
}
static mSM_Ovl_dlftbl_c mSM_program_dlftbl[] = {
{
0,
0,
NULL,
NULL,
&mIV_inventory_ovl_construct,
&mIV_inventory_ovl_destruct,
&mIV_inventory_ovl_set_proc,
FALSE,
},
{
0,
0,
NULL,
NULL,
&mIV_inventory_ovl_construct,
&mIV_inventory_ovl_destruct,
&mIV_inventory_ovl_set_proc,
FALSE,
},
{
0,
0,
NULL,
NULL,
&mHB_hboard_ovl_construct,
&mHB_hboard_ovl_destruct,
&mHB_hboard_ovl_set_proc,
FALSE,
},
{
0,
0,
NULL,
NULL,
&mTI_timeIn_ovl_construct,
&mTI_timeIn_ovl_destruct,
&mTI_timeIn_ovl_set_proc,
FALSE,
},
{
0,
0,
NULL,
NULL,
&mLE_ledit_ovl_construct,
&mLE_ledit_ovl_destruct,
&mLE_ledit_ovl_set_proc,
FALSE,
},
{
0,
0,
NULL,
NULL,
&mMP_map_ovl_construct,
&mMP_map_ovl_destruct,
&mMP_map_ovl_set_proc,
FALSE,
},
{
0,
0,
NULL,
NULL,
&mNT_notice_ovl_construct,
&mNT_notice_ovl_destruct,
&mNT_notice_ovl_set_proc,
FALSE,
},
{
0,
0,
NULL,
NULL,
&mRP_repay_ovl_construct,
&mRP_repay_ovl_destruct,
&mRP_repay_ovl_set_proc,
FALSE,
},
{
0,
0,
NULL,
NULL,
&mMS_mscore_ovl_construct,
&mMS_mscore_ovl_destruct,
&mMS_mscore_ovl_set_proc,
FALSE,
},
{
0,
0,
NULL,
NULL,
&mBR_birthday_ovl_construct,
&mBR_birthday_ovl_destruct,
&mBR_birthday_ovl_set_proc,
FALSE,
},
{
0,
0,
NULL,
NULL,
&mED_editor_ovl_construct,
&mED_editor_ovl_destruct,
&mED_editor_ovl_set_proc,
FALSE,
},
{
0,
0,
NULL,
NULL,
&mMB_mailbox_ovl_construct,
&mMB_mailbox_ovl_destruct,
&mMB_mailbox_ovl_set_proc,
FALSE,
},
{
0,
0,
NULL,
NULL,
&mBD_board_ovl_construct,
&mBD_board_ovl_destruct,
&mBD_board_ovl_set_proc,
FALSE,
},
{
0,
0,
NULL,
NULL,
&mAD_address_ovl_construct,
&mAD_address_ovl_destruct,
&mAD_address_ovl_set_proc,
FALSE,
},
{
0,
0,
NULL,
NULL,
&mHW_haniwa_ovl_construct,
&mHW_haniwa_ovl_destruct,
&mHW_haniwa_ovl_set_proc,
FALSE,
},
{
0,
0,
NULL,
NULL,
&mEE_editEndChk_ovl_construct,
&mEE_editEndChk_ovl_destruct,
&mEE_editEndChk_ovl_set_proc,
FALSE,
},
{
0,
0,
NULL,
NULL,
&mWR_warning_ovl_construct,
&mWR_warning_ovl_destruct,
&mWR_warning_ovl_set_proc,
FALSE,
},
{
0,
0,
NULL,
NULL,
&mCM_cpmail_ovl_construct,
&mCM_cpmail_ovl_destruct,
&mCM_cpmail_ovl_set_proc,
FALSE,
},
{
0,
0,
NULL,
NULL,
&mCW_cpwarning_ovl_construct,
&mCW_cpwarning_ovl_destruct,
&mCW_cpwarning_ovl_set_proc,
FALSE,
},
{
0,
0,
NULL,
NULL,
&mCE_cpedit_ovl_construct,
&mCE_cpedit_ovl_destruct,
&mCE_cpedit_ovl_set_proc,
FALSE,
},
{
0,
0,
NULL,
NULL,
&mCL_catalog_ovl_construct,
&mCL_catalog_ovl_destruct,
&mCL_catalog_ovl_set_proc,
FALSE,
},
{
0,
0,
NULL,
NULL,
&mMU_music_ovl_construct,
&mMU_music_ovl_destruct,
&mMU_music_ovl_set_proc,
FALSE,
},
{
0,
0,
NULL,
NULL,
&mBN_bank_ovl_construct,
&mBN_bank_ovl_destruct,
&mBN_bank_ovl_set_proc,
FALSE,
},
{
0,
0,
NULL,
NULL,
&mNW_needlework_ovl_construct,
&mNW_needlework_ovl_destruct,
&mNW_needlework_ovl_set_proc,
FALSE,
},
{
0,
0,
NULL,
NULL,
&mCO_cporiginal_ovl_construct,
&mCO_cporiginal_ovl_destruct,
&mCO_cporiginal_ovl_set_proc,
FALSE,
},
{
0,
0,
NULL,
NULL,
&mDE_design_ovl_construct,
&mDE_design_ovl_destruct,
&mDE_design_ovl_set_proc,
FALSE,
},
{
0,
0,
NULL,
NULL,
&mGB_gba_ovl_construct,
&mGB_gba_ovl_destruct,
&mGB_gba_ovl_set_proc,
FALSE,
},
{
0,
0,
NULL,
NULL,
&mDI_diary_ovl_construct,
&mDI_diary_ovl_destruct,
&mDI_diary_ovl_set_proc,
FALSE,
},
{
0,
0,
NULL,
NULL,
&mCD_calendar_ovl_construct,
&mCD_calendar_ovl_destruct,
&mCD_calendar_ovl_set_proc,
FALSE,
},
{
0,
0,
NULL,
NULL,
&mPM_passwordMake_ovl_construct,
&mPM_passwordMake_ovl_destruct,
&mPM_passwordMake_ovl_set_proc,
FALSE,
},
{
0,
0,
NULL,
NULL,
&mPC_passwordChk_ovl_construct,
&mPC_passwordChk_ovl_destruct,
&mPC_passwordChk_ovl_set_proc,
FALSE,
},
};
// clang-format off
static mSM_Ovl_dlftbl_c tag_program_dlftbl = {
0,
0,
NULL,
NULL,
&mTG_tag_ovl_construct,
&mTG_tag_ovl_destruct,
&mTG_tag_ovl_destruct,
FALSE,
};
// clang-format on
// clang-format off
static mSM_Ovl_dlftbl_c hand_program_dlftbl = {
0,
0,
NULL,
NULL,
&mHD_hand_ovl_construct,
&mHD_hand_ovl_destruct,
&mHD_hand_ovl_destruct,
FALSE,
};
// clang-format on
// clang-format off
static mSM_Ovl_dlftbl_c haniwa_program_dlftbl = {
0,
0,
NULL,
NULL,
&mHP_haniwaPortrait_ovl_construct,
&mHP_haniwaPortrait_ovl_destruct,
&mHP_haniwaPortrait_ovl_destruct,
FALSE,
};
// clang-format on
static void mSM_ovl_prog_seg(Submenu* submenu, mSM_Ovl_dlftbl_c* dlftbl) {
mSM_Segment_c* segment = &submenu->overlay->segment;
if (dlftbl->in_ram_flag == TRUE) {
dlftbl->ct_proc(submenu);
} else {
mSM_OVL_CT_PROC ct_proc;
dlftbl->seg_start = NULL;
dlftbl->seg_end = NULL;
submenu->next_overlay_address = (char*)ALIGN_NEXT((u32)dlftbl->seg_end - (u32)dlftbl->seg_start, 64);
ct_proc = dlftbl->ct_proc;
(*ct_proc)(submenu);
dlftbl->ct_proc = ct_proc;
dlftbl->in_ram_flag = TRUE;
segment->dlftbl_loaded_tbl[segment->dlftbl_loaded_num] = dlftbl;
segment->dlftbl_loaded_num++;
}
}
static void mSM_set_other_seg(Submenu* submenu) {
static u8 flg_table[] = {
mSM_OVL_FLAG_NONE,
mSM_OVL_FLAG_USE_ITEM | mSM_OVL_FLAG_USE_TAG | mSM_OVL_FLAG_USE_HAND,
mSM_OVL_FLAG_USE_HANIWA_PORTRAIT,
mSM_OVL_FLAG_NONE,
mSM_OVL_FLAG_NONE,
mSM_OVL_FLAG_NONE,
mSM_OVL_FLAG_NONE,
mSM_OVL_FLAG_NONE,
mSM_OVL_FLAG_NONE,
mSM_OVL_FLAG_NONE,
mSM_OVL_FLAG_NONE,
mSM_OVL_FLAG_USE_ITEM | mSM_OVL_FLAG_USE_TAG | mSM_OVL_FLAG_USE_HAND,
mSM_OVL_FLAG_NONE,
mSM_OVL_FLAG_NONE,
mSM_OVL_FLAG_USE_ITEM | mSM_OVL_FLAG_USE_TAG | mSM_OVL_FLAG_USE_HAND | mSM_OVL_FLAG_USE_HANIWA_PORTRAIT,
mSM_OVL_FLAG_NONE,
mSM_OVL_FLAG_NONE,
mSM_OVL_FLAG_USE_ITEM | mSM_OVL_FLAG_USE_TAG | mSM_OVL_FLAG_USE_HAND,
mSM_OVL_FLAG_NONE,
mSM_OVL_FLAG_USE_TAG | mSM_OVL_FLAG_USE_HAND,
mSM_OVL_FLAG_USE_TAG | mSM_OVL_FLAG_USE_HAND,
mSM_OVL_FLAG_USE_ITEM | mSM_OVL_FLAG_USE_TAG | mSM_OVL_FLAG_USE_HAND,
mSM_OVL_FLAG_NONE,
mSM_OVL_FLAG_USE_TAG | mSM_OVL_FLAG_USE_HAND,
mSM_OVL_FLAG_NONE,
mSM_OVL_FLAG_NONE,
mSM_OVL_FLAG_NONE,
mSM_OVL_FLAG_NONE,
mSM_OVL_FLAG_NONE,
mSM_OVL_FLAG_NONE,
mSM_OVL_FLAG_NONE,
};
int flg = flg_table[submenu->current_menu_type];
if ((flg & mSM_OVL_FLAG_USE_TAG) != 0) {
mSM_ovl_prog_seg(submenu, &tag_program_dlftbl);
}
if ((flg & mSM_OVL_FLAG_USE_HAND) != 0) {
mSM_ovl_prog_seg(submenu, &hand_program_dlftbl);
}
if ((flg & mSM_OVL_FLAG_USE_HANIWA_PORTRAIT) != 0) {
mSM_ovl_prog_seg(submenu, &haniwa_program_dlftbl);
}
}
static void mSM_set_before_menu_proc(Submenu* submenu) {
int type = submenu->menu_type;
mSM_Ovl_dlftbl_c* dlftbl = &mSM_program_dlftbl[type];
mSM_MenuInfo_c* menu_info;
dlftbl->set_proc(submenu);
submenu->current_menu_type = type;
menu_info = &submenu->overlay->menu_info[type];
menu_info->next_menu_type = mSM_OVL_NONE;
}
static void mSM_set_new_seg(Submenu* submenu) {
int type = submenu->menu_type;
mSM_ovl_prog_seg(submenu, &mSM_program_dlftbl[type]);
submenu->current_menu_type = type;
}
typedef struct submenu_ovl_start_data_s {
f32 pos_x;
f32 pos_y;
f32 speed_x;
f32 speed_y;
} mSM_ovl_start_data_c;
static void mSM_set_new_start_data(Submenu* submenu) {
// clang-format off
static mSM_ovl_start_data_c data_table[] = {
{ 0.0, 0.0, 0.0, 0.0, },
{ 300.0, 0.0, 75.0, 0.0, },
{ 0.0, 300.0, 0.0, 75.0, },
{ 0.0, 300.0, 0.0, 75.0, },
{ 0.0, 300.0, 0.0, 75.0, },
{ 0.0, 300.0, 0.0, 75.0, },
{ 0.0, 300.0, 0.0, 75.0, },
{ 0.0, 300.0, 0.0, 75.0, },
{ 0.0, 300.0, 0.0, 75.0, },
{ 0.0, 300.0, 0.0, 75.0, },
{ 0.0, -300.0, 0.0, 75.0, },
{ -300.0, 0.0, 75.0, 0.0, },
{ 0.0, 300.0, 0.0, 75.0, },
{ 0.0, 0.0, 0.0, 0.0, },
{ -300.0, 0.0, 75.0, 0.0, },
{ 0.0, -300.0, 0.0, 75.0, },
{ 0.0, 0.0, 0.0, 0.0, },
{ 300.0, 0.0, 75.0, 0.0, },
{ 0.0, 0.0, 0.0, 0.0, },
{ 0.0, 300.0, 0.0, 75.0, },
{ 300.0, 0.0, 75.0, 0.0, },
{ -300.0, 0.0, 75.0, 0.0, },
{ 0.0, 300.0, 0.0, 75.0, },
{ 300.0, 0.0, 75.0, 0.0, },
{ 300.0, 0.0, 75.0, 0.0, },
{ 0.0, 300.0, 0.0, 75.0, },
{ -300.0, 0.0, 75.0, 0.0, },
{ -300.0, 0.0, 75.0, 0.0, },
{ 0.0, 300.0, 0.0, 75.0, },
{ 0.0, 300.0, 0.0, 75.0, },
{ 0.0, 300.0, 0.0, 75.0, },
};
// clang-format on
int type = submenu->menu_type;
mSM_MenuInfo_c* menu = &submenu->overlay->menu_info[type];
mSM_ovl_start_data_c* data = &data_table[type];
menu->menu_type = type;
menu->position[0] = data->pos_x;
menu->position[1] = data->pos_y;
menu->speed[0] = data->speed_x;
menu->speed[1] = data->speed_y;
menu->data0 = submenu->param0;
menu->data1 = submenu->param1;
menu->data2 = submenu->param2;
menu->data3 = submenu->param3;
menu->move_flag = FALSE;
if (type == mSM_OVL_INVENTORY && submenu->param0 == mSM_IV_OPEN_CPMAIL) {
menu->position[0] = -300.0f;
}
if (type == mSM_OVL_NEEDLEWORK && submenu->param0 == 2) {
menu->position[0] = -300.0f;
}
}
static void mSM_move_chg_base(mSM_MenuInfo_c* menu_info, int mv_dir) {
menu_info->proc_status = mSM_OVL_PROC_MOVE;
menu_info->move_drt = mv_dir;
if ((mv_dir & 1) != 0) {
menu_info->next_proc_status = mSM_OVL_PROC_PLAY;
} else {
menu_info->next_proc_status = mSM_OVL_PROC_END;
}
}
static void mSM_make_trigger_data(Submenu* submenu) {
static u32 add_trigger[] = { BUTTON_CRIGHT, BUTTON_CUP, BUTTON_CLEFT, BUTTON_CDOWN };
int trigger = (getButton() & 0xF) | getTrigger();
mSM_Control_c* control = &submenu->overlay->menu_control;
if (gamePT->mcon.move_pR > 0.5f) {
u16 angle = gamePT->mcon.move_angle + DEG2SHORT_ANGLE2(45.0f);
trigger |= add_trigger[angle / DEG2SHORT_ANGLE2(90.0f)];
}
if (trigger == control->last_trigger) {
if (control->repeat_timer > 0) {
control->repeat_timer--;
trigger = 0;
} else {
control->repeat_timer = 3;
}
} else {
control->last_trigger = trigger;
control->repeat_timer = 25;
}
control->trigger = trigger;
}
static void mSM_save_before_func(Submenu* submenu) {
Submenu_Overlay_c* ovl = submenu->overlay;
mSM_MenuInfo_c* menu_info = &ovl->menu_info[submenu->menu_type];
mSM_MenuInfo_c* prev_info = &ovl->menu_info[submenu->current_menu_type];
menu_info->pre_menu_type = submenu->current_menu_type;
menu_info->pre_move_func = ovl->menu_control.menu_move_func;
menu_info->pre_draw_func = ovl->menu_control.menu_draw_func;
prev_info->next_menu_type = submenu->menu_type;
}
static void mSM_set_proc(Submenu* submenu) {
mSM_save_before_func(submenu);
mSM_set_new_start_data(submenu);
mSM_set_new_seg(submenu);
mSM_set_other_seg(submenu);
}
static void mSM_tex_move(Submenu* submenu) {
mSM_Control_c* control = &submenu->overlay->menu_control;
control->texture_pos[0] += 0.3535f;
control->texture_pos[1] += 0.3535f;
while (control->texture_pos[0] >= 1024.0f) {
control->texture_pos[0] -= 1024.0f;
}
while (control->texture_pos[1] >= 1024.0f) {
control->texture_pos[1] -= 1024.0f;
}
}
static void mSM_return_func(Submenu* submenu, mSM_MenuInfo_c* menu_info) {
if (menu_info->next_menu_type != mSM_OVL_NONE) {
mSM_MenuInfo_c* next_menu_info = &submenu->overlay->menu_info[menu_info->next_menu_type];
mSM_MenuInfo_c* prev_menu_info = &submenu->overlay->menu_info[menu_info->pre_menu_type];
next_menu_info->pre_menu_type = menu_info->pre_menu_type;
next_menu_info->pre_move_func = menu_info->pre_move_func;
next_menu_info->pre_draw_func = menu_info->pre_draw_func;
prev_menu_info->next_menu_type = menu_info->next_menu_type;
} else {
mSM_Segment_c* segment = &submenu->overlay->segment;
submenu->menu_type = menu_info->pre_menu_type;
if (submenu->menu_type == mSM_OVL_NONE) {
while (segment->dlftbl_loaded_num != 0) {
segment->dlftbl_loaded_num--;
segment->dlftbl_loaded_tbl[segment->dlftbl_loaded_num]->dt_proc(submenu);
}
submenu->process_status = mSM_PROCESS_END;
submenu->move_proc = (SUBMENU_PROC)&none_proc1;
submenu->current_menu_type = menu_info->pre_menu_type;
submenu->overlay->menu_control.menu_move_func = (SUBMENU_PROC)&none_proc1;
submenu->overlay->menu_control.menu_draw_func = (SUBMENU_GAME_PROC)&none_proc1;
emu64_refresh();
} else {
mSM_set_before_menu_proc(submenu);
}
}
menu_info->open_flag = FALSE;
menu_info->pre_menu_type = mSM_OVL_NONE;
menu_info->next_menu_type = mSM_OVL_NONE;
menu_info->proc_status = mSM_OVL_PROC_MOVE;
menu_info->next_proc_status = mSM_OVL_PROC_MOVE;
}
static int mSM_move_menu(f32* pos, f32* speed, s16* flag, f32 speed_mult, f32 p0, f32 p1, f32 p2) {
if (*flag == FALSE) {
if ((p2 * (*pos - p0)) >= 0.0f) {
*speed *= speed_mult;
if (*speed < 1.0f) {
*speed = 1.0f;
} else if (*speed > 75.0f) {
*speed = 75.0f;
}
}
*flag = TRUE;
} else {
*flag = FALSE;
}
*pos += *speed * p2 * 0.5f;
if ((p2 * (*pos - p1)) > 0.0f) {
*flag = FALSE;
*pos = p1;
return TRUE;
}
return FALSE;
}
typedef struct submenu_move_data_s {
f32 speed_mult;
f32 start_pos;
f32 target_pos;
f32 check_mult;
} mSM_move_data_c;
static void mSM_move_Move(Submenu* submenu, mSM_MenuInfo_c* menu_info) {
static mSM_move_data_c move_data[] = {
{ 2.0f, 0.0f, 300.0f, 1.0f },
{ 0.5f, 120.0f, 0.0f, -1.0f },
};
int move_dir = menu_info->move_drt;
int idx = move_dir >> 2;
mSM_move_data_c* data_p = &move_data[move_dir & 1];
f32 dir;
int res;
if ((move_dir & 2)) {
dir = -1.0f;
} else {
dir = 1.0f;
}
res = mSM_move_menu(&menu_info->position[idx], &menu_info->speed[idx], &menu_info->move_flag, data_p->speed_mult,
data_p->start_pos * dir, data_p->target_pos * dir, data_p->check_mult * dir);
if (res == TRUE) {
menu_info->proc_status = menu_info->next_proc_status;
}
/* Round down to nearest int */
menu_info->position[idx] = (f32)(int)menu_info->position[idx];
}
static void mSM_move_End(Submenu* submenu, mSM_MenuInfo_c* menu_info) {
mSM_return_func(submenu, menu_info);
}
static void mSM_menu_ovl_move(Submenu* submenu) {
mSM_Control_c* control = &submenu->overlay->menu_control;
mSM_make_trigger_data(submenu);
if (submenu->menu_type != submenu->current_menu_type) {
mSM_set_proc(submenu);
}
mSM_tex_move(submenu);
control->menu_move_func(submenu);
}
static void mSM_menu_ovl_draw(Submenu* submenu, GAME* game) {
mSM_setup_view(submenu, game->graph, TRUE);
submenu->overlay->menu_control.menu_draw_func(submenu, game);
}
extern void mSM_menu_ovl_init(Submenu* submenu) {
mSM_Control_c* control = &ovl_base.menu_control;
int i;
submenu->overlay = &ovl_base;
bzero(&ovl_base, sizeof(Submenu_Overlay_c));
for (i = 0; i < mSM_OVL_NUM; i++) {
mSM_program_dlftbl[i].in_ram_flag = FALSE;
}
tag_program_dlftbl.in_ram_flag = FALSE;
hand_program_dlftbl.in_ram_flag = FALSE;
haniwa_program_dlftbl.in_ram_flag = FALSE;
emu64_refresh();
submenu->current_menu_type = mSM_OVL_NONE;
control->menu_move_func = (SUBMENU_PROC)&none_proc1;
control->menu_draw_func = (SUBMENU_GAME_PROC)&none_proc1;
control->hand_move_func = (mSM_HAND_MOVE_FUNC)&none_proc1;
control->hand_draw_func = (mSM_HAND_DRAW_FUNC)&none_proc1;
control->tag_move_func = (mSM_TAG_MOVE_FUNC)&none_proc1;
control->tag_draw_func = (mSM_TAG_DRAW_FUNC)&none_proc1;
control->texture_movement_angle = DEG2SHORT_ANGLE2(45.0f);
submenu->overlay->return_func_proc = &mSM_return_func;
submenu->overlay->move_Move_proc = &mSM_move_Move;
submenu->overlay->move_End_proc = &mSM_move_End;
submenu->overlay->move_chg_base_proc = &mSM_move_chg_base;
submenu->overlay->set_char_matrix_proc = &mSM_set_char_matrix;
submenu->overlay->cbuf_copy_proc = &mSM_cbuf_copy;
submenu->overlay->set_drawMode_proc = &mSM_set_drawMode;
submenu->overlay->draw_item_proc = &mSM_draw_item;
submenu->overlay->draw_mail_proc = &mSM_draw_mail;
submenu->overlay->setup_view_proc = &mSM_setup_view;
submenu->overlay->change_view_proc = &mSM_change_view;
submenu->overlay->unused_func_968 = NULL;
mSM_set_proc(submenu);
submenu->move_proc = &mSM_menu_ovl_move;
submenu->draw_proc = &mSM_menu_ovl_draw;
mSM_menu_ovl_move(submenu);
}