mirror of
https://github.com/ACreTeam/ac-decomp
synced 2026-05-23 06:34:18 -04:00
Implement & link m_cpmail_ovl
This commit is contained in:
+1
-1
@@ -1391,7 +1391,7 @@ config.libs = [
|
||||
Object(Matching, "game/m_controller.c"),
|
||||
Object(Matching, "game/m_cpak.c"),
|
||||
Object(Matching, "game/m_cpedit_ovl.c"),
|
||||
Object(NonMatching, "game/m_cpmail_ovl.c"),
|
||||
Object(Matching, "game/m_cpmail_ovl.c"),
|
||||
Object(NonMatching, "game/m_cporiginal_ovl.c"),
|
||||
Object(Matching, "game/m_cpwarning_ovl.c"),
|
||||
Object(Matching, "game/m_debug.c"),
|
||||
|
||||
+6
-2
@@ -140,25 +140,29 @@ typedef struct {
|
||||
|
||||
#define mCD_KEEP_ORIGINAL_PAGE_COUNT 8
|
||||
#define mCD_KEEP_ORIGINAL_COUNT 12
|
||||
#define mCD_KEEP_ORIGINAL_FOLDER_NAME_LEN 12
|
||||
|
||||
typedef struct {
|
||||
u16 checksum;
|
||||
u16 landid;
|
||||
u8 _0004[mCD_KEEP_ORIGINAL_PAGE_COUNT][12];
|
||||
u8 folder_names[mCD_KEEP_ORIGINAL_PAGE_COUNT][mCD_KEEP_ORIGINAL_FOLDER_NAME_LEN];
|
||||
mNW_original_design_c original[mCD_KEEP_ORIGINAL_PAGE_COUNT][mCD_KEEP_ORIGINAL_COUNT];
|
||||
int _CC80; // force size to 0xCCA0
|
||||
} mCD_keep_original_c ATTRIBUTE_ALIGN(32);
|
||||
|
||||
#define mCD_KEEP_MAIL_PAGE_COUNT 8
|
||||
#define mCD_KEEP_MAIL_COUNT 20
|
||||
#define mCD_KEEP_MAIL_FOLDER_NAME_LEN 12
|
||||
|
||||
typedef struct {
|
||||
u16 checksum;
|
||||
u16 landid;
|
||||
u8 _0004[mCD_KEEP_MAIL_PAGE_COUNT][12];
|
||||
u8 folder_names[mCD_KEEP_MAIL_PAGE_COUNT][mCD_KEEP_MAIL_FOLDER_NAME_LEN];
|
||||
Mail_c mail[mCD_KEEP_MAIL_PAGE_COUNT][mCD_KEEP_MAIL_COUNT];
|
||||
} mCD_keep_mail_c ATTRIBUTE_ALIGN(32);
|
||||
|
||||
#define mCD_KEEP_MAIL_SIZE ALIGN_NEXT(sizeof(mCD_keep_mail_c), 32)
|
||||
|
||||
#define mCD_KEEP_DIARY_COUNT PLAYER_NUM
|
||||
#define mCD_KEEP_DIARY_ENTRY_COUNT lbRTC_MONTHS_MAX
|
||||
|
||||
|
||||
+7
-12
@@ -4,29 +4,24 @@
|
||||
#include "types.h"
|
||||
#include "m_cpmail_ovl_h.h"
|
||||
#include "m_submenu.h"
|
||||
#include "m_card.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define mCM_PAGE_COUNT 8
|
||||
#define mCM_MAIL_COUNT 20
|
||||
#define mCM_FOLDER_NAME_LEN 12
|
||||
// #define mCM_PAGE_COUNT 8
|
||||
// #define mCM_MAIL_COUNT 20
|
||||
// #define mCM_FOLDER_NAME_LEN 12
|
||||
#define mCM_FOLDER_NAME_MAX_WIDTH 120
|
||||
|
||||
/* TODO: move this to a better header */
|
||||
typedef struct card_mail_s {
|
||||
int count;
|
||||
u8 folder_names[mCM_PAGE_COUNT][mCM_FOLDER_NAME_LEN];
|
||||
Mail_c mail[mCM_PAGE_COUNT][mCM_MAIL_COUNT];
|
||||
} mCD_mail_c;
|
||||
|
||||
struct cpmail_ovl_s {
|
||||
mCD_mail_c* card_mail;
|
||||
mCD_keep_mail_c* card_mail;
|
||||
Mail_c player_mail[mPr_INVENTORY_MAIL_COUNT];
|
||||
u8 page_order[mCM_PAGE_COUNT];
|
||||
u8 page_order[mCD_KEEP_MAIL_PAGE_COUNT];
|
||||
s16 page_move_timer;
|
||||
u8 next_page_id;
|
||||
u8 _BB3;
|
||||
u32 mark_bitfield;
|
||||
int mark_flag;
|
||||
u8 _BBC;
|
||||
|
||||
+2
-2
@@ -1605,7 +1605,7 @@ static void mCD_set_init_mail_data(u8* buf) {
|
||||
int j;
|
||||
|
||||
for (i = 0; i < mCD_KEEP_MAIL_PAGE_COUNT; i++) {
|
||||
mem_clear(keep_mail->_0004[i], sizeof(keep_mail->_0004[i]), CHAR_SPACE);
|
||||
mem_clear(keep_mail->folder_names[i], sizeof(keep_mail->folder_names[i]), CHAR_SPACE);
|
||||
for (j = 0; j < mCD_KEEP_MAIL_COUNT; j++) {
|
||||
mMl_clear_mail(mail);
|
||||
mail++;
|
||||
@@ -1619,7 +1619,7 @@ static void mCD_set_init_original_data(u8* buf) {
|
||||
int j;
|
||||
|
||||
for (i = 0; i < mCD_KEEP_ORIGINAL_PAGE_COUNT; i++) {
|
||||
mem_clear(keep_original->_0004[i], sizeof(keep_original->_0004[i]), CHAR_SPACE);
|
||||
mem_clear(keep_original->folder_names[i], sizeof(keep_original->folder_names[i]), CHAR_SPACE);
|
||||
for (j = 0; j < mCD_KEEP_ORIGINAL_COUNT; j++) {
|
||||
mNW_InitOriginalData(&keep_original->original[i][j]);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,456 @@
|
||||
#include "m_cpmail_ovl.h"
|
||||
|
||||
#include "m_submenu_ovl.h"
|
||||
#include "m_tag_ovl.h"
|
||||
#include "m_hand_ovl.h"
|
||||
#include "m_editEndChk_ovl.h"
|
||||
#include "m_card.h"
|
||||
#include "m_cpwarning_ovl.h"
|
||||
#include "m_inventory_ovl.h"
|
||||
#include "sys_matrix.h"
|
||||
#include "m_editor_ovl.h"
|
||||
#include "m_font.h"
|
||||
#include "m_common_data.h"
|
||||
#include "m_malloc.h"
|
||||
|
||||
static mCM_Ovl_c cpmail_ovl_data;
|
||||
|
||||
typedef struct {
|
||||
Gfx* tag_gfx;
|
||||
Gfx* color_gfx;
|
||||
u16* pal_p;
|
||||
u8* tex_p;
|
||||
rgba_t title_color;
|
||||
} mCM_disp_data_c;
|
||||
|
||||
extern Gfx ctl_win1_color_mode[];
|
||||
extern Gfx ctl_win1_tagu1T_model[];
|
||||
extern Gfx ctl_win1_tagu2T_model[];
|
||||
extern Gfx ctl_win1_tagu3T_model[];
|
||||
extern Gfx ctl_win1_tagu4T_model[];
|
||||
extern Gfx ctl_win1_tagu5T_model[];
|
||||
extern Gfx ctl_win1_tagu6T_model[];
|
||||
extern Gfx ctl_win1_tagu7T_model[];
|
||||
extern Gfx ctl_win1_tagu8T_model[];
|
||||
extern Gfx ctl_win2_color_mode[];
|
||||
extern Gfx ctl_win3_color_mode[];
|
||||
extern Gfx ctl_win4_color_mode[];
|
||||
extern Gfx ctl_win5_color_mode[];
|
||||
extern Gfx ctl_win6_color_mode[];
|
||||
extern Gfx ctl_win7_color_mode[];
|
||||
extern Gfx ctl_win8_color_mode[];
|
||||
extern u8 ctl_win_nuno1_tex_rgb_ci4[];
|
||||
extern u16 ctl_win_nuno1_tex_rgb_ci4_pal[];
|
||||
extern u8 ctl_win_nuno2_tex_rgb_ci4[];
|
||||
extern u16 ctl_win_nuno2_tex_rgb_ci4_pal[];
|
||||
extern u8 ctl_win_nuno3_tex_rgb_ci4[];
|
||||
extern u16 ctl_win_nuno3_tex_rgb_ci4_pal[];
|
||||
extern u8 ctl_win_nuno4_tex_rgb_ci4[];
|
||||
extern u16 ctl_win_nuno4_tex_rgb_ci4_pal[];
|
||||
extern u8 ctl_win_nuno5_tex_rgb_ci4[];
|
||||
extern u16 ctl_win_nuno5_tex_rgb_ci4_pal[];
|
||||
extern u8 ctl_win_nuno6_tex_rgb_ci4[];
|
||||
extern u16 ctl_win_nuno6_tex_rgb_ci4_pal[];
|
||||
extern u8 ctl_win_nuno7_tex_rgb_ci4[];
|
||||
extern u16 ctl_win_nuno7_tex_rgb_ci4_pal[];
|
||||
extern u8 ctl_win_nuno8_tex_rgb_ci4[];
|
||||
extern u16 ctl_win_nuno8_tex_rgb_ci4_pal[];
|
||||
|
||||
static mCM_disp_data_c mCM_disp_data[8] = {
|
||||
{ctl_win1_tagu1T_model, ctl_win1_color_mode, ctl_win_nuno1_tex_rgb_ci4_pal, ctl_win_nuno1_tex_rgb_ci4, { 0x46, 0x28, 0x14, 0xFF } },
|
||||
{ctl_win1_tagu2T_model, ctl_win2_color_mode, ctl_win_nuno2_tex_rgb_ci4_pal, ctl_win_nuno2_tex_rgb_ci4, { 0x14, 0x3C, 0x5A, 0xFF } },
|
||||
{ctl_win1_tagu3T_model, ctl_win3_color_mode, ctl_win_nuno3_tex_rgb_ci4_pal, ctl_win_nuno3_tex_rgb_ci4, { 0x3C, 0x1E, 0x46, 0xFF } },
|
||||
{ctl_win1_tagu4T_model, ctl_win4_color_mode, ctl_win_nuno4_tex_rgb_ci4_pal, ctl_win_nuno4_tex_rgb_ci4, { 0x0A, 0x46, 0x32, 0xFF } },
|
||||
{ctl_win1_tagu5T_model, ctl_win5_color_mode, ctl_win_nuno5_tex_rgb_ci4_pal, ctl_win_nuno5_tex_rgb_ci4, { 0x46, 0x32, 0x14, 0xFF } },
|
||||
{ctl_win1_tagu6T_model, ctl_win6_color_mode, ctl_win_nuno6_tex_rgb_ci4_pal, ctl_win_nuno6_tex_rgb_ci4, { 0x3C, 0x32, 0x46, 0xFF } },
|
||||
{ctl_win1_tagu7T_model, ctl_win7_color_mode, ctl_win_nuno7_tex_rgb_ci4_pal, ctl_win_nuno7_tex_rgb_ci4, { 0x46, 0x14, 0x1E, 0xFF } },
|
||||
{ctl_win1_tagu8T_model, ctl_win8_color_mode, ctl_win_nuno8_tex_rgb_ci4_pal, ctl_win_nuno8_tex_rgb_ci4, { 0x32, 0x46, 0x0A, 0xFF } },
|
||||
};
|
||||
|
||||
// lines 224-226 (3 lines)
|
||||
static void mCM_move_Move(Submenu* submenu, mSM_MenuInfo_c* menu_info) {
|
||||
submenu->overlay->move_Move_proc(submenu, menu_info);
|
||||
}
|
||||
|
||||
// lines 234-286 (53 lines)
|
||||
static void mCM_move_Play(Submenu* submenu, mSM_MenuInfo_c* menu_info) {
|
||||
mCM_Ovl_c* cpmail_ovl = submenu->overlay->cpmail_ovl;
|
||||
|
||||
if (menu_info->open_flag == FALSE) {
|
||||
submenu->overlay->tag_ovl->chg_tag_func_proc(submenu, mTG_TABLE_CPMAIL, mTG_TYPE_NONE, 0, 0.0f, 0.0f);
|
||||
menu_info->open_flag = TRUE;
|
||||
} else if (cpmail_ovl->page_move_timer != 0) {
|
||||
cpmail_ovl->page_move_timer--;
|
||||
menu_info->position[1] = 100.0f * sinf_table(cpmail_ovl->page_move_timer * DEG2RAD(4.5f));
|
||||
if (cpmail_ovl->page_move_timer == 20) {
|
||||
u8* page_order = cpmail_ovl->page_order;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < mCD_KEEP_MAIL_PAGE_COUNT; i++, page_order++) {
|
||||
if (*page_order == cpmail_ovl->next_page_id) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
for (i; i > 0; i--) {
|
||||
page_order[0] = page_order[-1];
|
||||
page_order--;
|
||||
}
|
||||
|
||||
cpmail_ovl->page_order[0] = cpmail_ovl->next_page_id;
|
||||
} else if (cpmail_ovl->page_move_timer == 0) {
|
||||
menu_info->position[1] = 0.0f;
|
||||
submenu->overlay->hand_ovl->set_hand_func(submenu);
|
||||
submenu->overlay->tag_ovl->init_tag_data_item_win_proc(submenu);
|
||||
}
|
||||
} else {
|
||||
submenu->overlay->menu_control.tag_move_func(submenu, menu_info);
|
||||
}
|
||||
}
|
||||
|
||||
// lines 294-345 (52 lines)
|
||||
static void mCM_move_Wait(Submenu* submenu, mSM_MenuInfo_c* menu_info) {
|
||||
mCM_Ovl_c* cpmail_ovl = submenu->overlay->cpmail_ovl;
|
||||
mSM_MenuInfo_c* next_menu_info = &submenu->overlay->menu_info[menu_info->next_menu_type];
|
||||
|
||||
if (next_menu_info->proc_status == mSM_OVL_PROC_MOVE && next_menu_info->next_proc_status == mSM_OVL_PROC_END) {
|
||||
if (next_menu_info->menu_type == mSM_OVL_EDITENDCHK) {
|
||||
if (next_menu_info->data1 == 0) {
|
||||
mCD_save_data_main_to_aram(cpmail_ovl->card_mail, mCD_KEEP_MAIL_SIZE, mCD_ARAM_DATA_MAIL);
|
||||
submenu->overlay->move_chg_base_proc(menu_info, mSM_MOVE_OUT_RIGHT);
|
||||
} else if (next_menu_info->data1 == 1) {
|
||||
menu_info->proc_status = mSM_OVL_PROC_PLAY;
|
||||
} else {
|
||||
cpmail_ovl->_BB3 = 1;
|
||||
submenu->overlay->move_chg_base_proc(menu_info, mSM_MOVE_OUT_RIGHT);
|
||||
}
|
||||
} else if (next_menu_info->menu_type == mSM_OVL_EDITOR) {
|
||||
menu_info->proc_status = mSM_OVL_PROC_PLAY;
|
||||
menu_info->next_proc_status = mSM_OVL_PROC_PLAY;
|
||||
} else if (next_menu_info->menu_type == mSM_OVL_BOARD) {
|
||||
menu_info->proc_status = mSM_OVL_PROC_MOVE;
|
||||
menu_info->move_drt = mSM_MOVE_IN_LEFT;
|
||||
menu_info->next_proc_status = mSM_OVL_PROC_PLAY;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void mCM_move_End(Submenu* submenu, mSM_MenuInfo_c* menu_info) {
|
||||
submenu->overlay->move_End_proc(submenu, menu_info);
|
||||
}
|
||||
|
||||
typedef void (*mCM_OVL_MOVE_PROC)(Submenu* submenu, mSM_MenuInfo_c* menu_info);
|
||||
|
||||
static void mCM_cpmail_ovl_move(Submenu* submenu) {
|
||||
static mCM_OVL_MOVE_PROC ovl_move_proc[] = {
|
||||
// clang-format off
|
||||
mCM_move_Move,
|
||||
mCM_move_Play,
|
||||
mCM_move_Wait,
|
||||
(mCM_OVL_MOVE_PROC)none_proc1,
|
||||
mCM_move_End,
|
||||
// clang-format on
|
||||
};
|
||||
|
||||
Submenu_Overlay_c* ovl = submenu->overlay;
|
||||
mSM_MenuInfo_c* menu_info = &ovl->menu_info[mSM_OVL_CPMAIL];
|
||||
|
||||
menu_info->pre_move_func(submenu);
|
||||
(*ovl_move_proc[menu_info->proc_status])(submenu, menu_info);
|
||||
if (menu_info->proc_status == mSM_OVL_PROC_PLAY) {
|
||||
ovl->menu_control.animation_flag = TRUE;
|
||||
} else {
|
||||
ovl->menu_control.animation_flag = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
extern Gfx inv_item_mode[];
|
||||
|
||||
static void mCM_set_mail(Submenu* submenu, GRAPH* graph, float pos_x, float pos_y, int page_num) {
|
||||
mIV_Ovl_c* inv_ovl = submenu->overlay->inventory_ovl;
|
||||
mCM_Ovl_c* cpmail_ovl = submenu->overlay->cpmail_ovl;
|
||||
mTG_tag_c* tag = &submenu->overlay->tag_ovl->tags[0];
|
||||
Mail_c* mail = cpmail_ovl->card_mail->mail[page_num];
|
||||
int i;
|
||||
int mark_bitfield = 0;
|
||||
int mark_flag;
|
||||
float pos[2];
|
||||
float scale;
|
||||
|
||||
OPEN_POLY_OPA_DISP(graph);
|
||||
|
||||
gSPDisplayList(POLY_OPA_DISP++, inv_item_mode);
|
||||
|
||||
CLOSE_POLY_OPA_DISP(graph);
|
||||
|
||||
if (inv_ovl != NULL && inv_ovl->remove_timer > 0 && (tag->table == mTG_TABLE_CPMAIL || cpmail_ovl->mark_flag == TRUE)) {
|
||||
if (cpmail_ovl->mark_flag == TRUE) {
|
||||
mark_bitfield = cpmail_ovl->mark_bitfield;
|
||||
} else if (cpmail_ovl->mark_flag == FALSE) {
|
||||
mark_bitfield = 1 << submenu->overlay->tag_ovl->get_table_idx_proc(tag);
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < mCD_KEEP_MAIL_COUNT; i++) {
|
||||
if ((cpmail_ovl->mark_bitfield2 & (1 << i)) == 0 && mMl_check_not_used_mail(mail) != TRUE) {
|
||||
if ((mark_bitfield & (1 << i)) != 0) {
|
||||
scale = inv_ovl->remove_timer * (1.0f / 24.0f);
|
||||
} else {
|
||||
scale = 1.0f;
|
||||
}
|
||||
|
||||
if ((cpmail_ovl->mark_bitfield & (1 << i)) != 0 && cpmail_ovl->mark_flag == FALSE) {
|
||||
mark_flag = TRUE;
|
||||
} else {
|
||||
mark_flag = FALSE;
|
||||
}
|
||||
|
||||
submenu->overlay->tag_ovl->set_hand_pos_proc(submenu, pos, mTG_TABLE_CPMAIL, i);
|
||||
submenu->overlay->draw_mail_proc(graph, pos_x + pos[0], pos_y + pos[1], scale, mail, TRUE, FALSE, mark_flag);
|
||||
}
|
||||
|
||||
mail++;
|
||||
}
|
||||
}
|
||||
|
||||
static float mCM_get_page_posY(Submenu* submenu, mSM_MenuInfo_c* menu_info, int page_num) {
|
||||
mCM_Ovl_c* cpmail_ovl = submenu->overlay->cpmail_ovl;
|
||||
|
||||
if (cpmail_ovl->page_move_timer == 0 || page_num == cpmail_ovl->next_page_id) {
|
||||
return menu_info->position[1];
|
||||
} else {
|
||||
return -menu_info->position[1];
|
||||
}
|
||||
}
|
||||
|
||||
extern Gfx ctl_tag_mode[];
|
||||
extern Gfx ctl_win_mode[];
|
||||
extern Gfx ctl_win_model[];
|
||||
extern Gfx ctl_win1_kageT_model[];
|
||||
extern Gfx ctl_sentaku_taguT_model[];
|
||||
|
||||
static void mCM_set_page_dl(Submenu* submenu, mSM_MenuInfo_c* menu_info, GAME* game, GRAPH* graph, int page_num, int flag) {
|
||||
mCM_disp_data_c* disp_data_p = &mCM_disp_data[page_num];
|
||||
mCM_Ovl_c* cpmail_ovl = submenu->overlay->cpmail_ovl;
|
||||
float pos_x = menu_info->position[0];
|
||||
float pos_y = mCM_get_page_posY(submenu, menu_info, page_num);
|
||||
int tex_x;
|
||||
int tex_y;
|
||||
|
||||
Matrix_scale(16.0f, 16.0f, 1.0f, 0);
|
||||
Matrix_translate(pos_x, pos_y, 140.0f, 1);
|
||||
|
||||
OPEN_POLY_OPA_DISP(graph);
|
||||
|
||||
gSPMatrix(POLY_OPA_DISP++, _Matrix_to_Mtx_new(graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPSegment(POLY_OPA_DISP++, ANIME_1_TXT_SEG, disp_data_p->color_gfx);
|
||||
|
||||
if (flag) {
|
||||
gSPDisplayList(POLY_OPA_DISP++, ctl_win_mode);
|
||||
gDPLoadTLUT_Dolphin(POLY_OPA_DISP++, 14, 16, 1, disp_data_p->pal_p);
|
||||
gDPLoadTextureBlock_4b_Dolphin(POLY_OPA_DISP++, disp_data_p->tex_p, G_IM_FMT_CI, 32, 32, 14, GX_REPEAT, GX_REPEAT, 0, 0);
|
||||
gDPTileSync(POLY_OPA_DISP++);
|
||||
|
||||
tex_x = -submenu->overlay->menu_control.texture_pos[0] * 4.0f;
|
||||
tex_y = -submenu->overlay->menu_control.texture_pos[1] * 4.0f;
|
||||
gDPSetTileSize_Dolphin(POLY_OPA_DISP++, G_TX_RENDERTILE, (u8)tex_x, (u8)tex_y, 32, 32);
|
||||
gSPDisplayList(POLY_OPA_DISP++, ctl_win_model);
|
||||
} else {
|
||||
gSPDisplayList(POLY_OPA_DISP++, ctl_tag_mode);
|
||||
}
|
||||
|
||||
gSPDisplayList(POLY_OPA_DISP++, disp_data_p->tag_gfx);
|
||||
|
||||
if (flag) {
|
||||
gSPDisplayList(POLY_OPA_DISP++, ctl_win1_kageT_model);
|
||||
}
|
||||
|
||||
if (cpmail_ovl->next_page_id == page_num) {
|
||||
Matrix_translate(97.0f, 51.0f - 15.0f * page_num, 0.0f, 1);
|
||||
gSPMatrix(POLY_OPA_DISP++, _Matrix_to_Mtx_new(graph), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(POLY_OPA_DISP++, ctl_sentaku_taguT_model);
|
||||
}
|
||||
|
||||
CLOSE_POLY_OPA_DISP(graph);
|
||||
|
||||
if (flag) {
|
||||
float str_x;
|
||||
float str_y;
|
||||
int len;
|
||||
|
||||
mCM_set_mail(submenu, graph, pos_x, pos_y, page_num);
|
||||
submenu->overlay->set_char_matrix_proc(graph);
|
||||
|
||||
str_x = 160.0f + pos_x + 24.0f;
|
||||
|
||||
if (menu_info->proc_status == mSM_OVL_PROC_WAIT && menu_info->next_menu_type == mSM_OVL_EDITOR) {
|
||||
mED_Ovl_c* editor_ovl = submenu->overlay->editor_ovl;
|
||||
|
||||
len = mCD_KEEP_MAIL_FOLDER_NAME_LEN;
|
||||
if (editor_ovl != NULL) {
|
||||
str_x -= editor_ovl->line_width * 0.5f;
|
||||
}
|
||||
} else {
|
||||
len = mMl_strlen(cpmail_ovl->card_mail->folder_names[page_num], mCD_KEEP_MAIL_FOLDER_NAME_LEN, CHAR_SPACE);
|
||||
str_x -= mFont_GetStringWidth(cpmail_ovl->card_mail->folder_names[page_num], len, TRUE) * 0.5f;
|
||||
}
|
||||
|
||||
str_y = 120.0f - ((pos_y + 84.0f) - 5.0f);
|
||||
mFont_SetLineStrings(
|
||||
// clang-format off
|
||||
game,
|
||||
cpmail_ovl->card_mail->folder_names[page_num], len,
|
||||
str_x, str_y,
|
||||
disp_data_p->title_color.r, disp_data_p->title_color.g, disp_data_p->title_color.b, 255,
|
||||
FALSE, TRUE,
|
||||
1.0f, 1.0f,
|
||||
mFont_MODE_POLY
|
||||
// clang-format on
|
||||
);
|
||||
|
||||
if (menu_info->proc_status == mSM_OVL_PROC_WAIT && menu_info->next_menu_type == mSM_OVL_EDITOR) {
|
||||
mED_Ovl_c* editor_ovl = submenu->overlay->editor_ovl;
|
||||
|
||||
if (editor_ovl != NULL) {
|
||||
editor_ovl->cursol_draw(submenu, game, str_x + editor_ovl->_26 + -6.0f, str_y);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void mCM_set_dl(Submenu* submenu, mSM_MenuInfo_c* menu_info, GAME* game) {
|
||||
GRAPH* graph = game->graph;
|
||||
mCM_Ovl_c* cpmail_ovl = submenu->overlay->cpmail_ovl;
|
||||
int i;
|
||||
int flag;
|
||||
u8* page_order_p = &cpmail_ovl->page_order[mCD_KEEP_MAIL_PAGE_COUNT - 1];
|
||||
|
||||
for (i = mCD_KEEP_MAIL_PAGE_COUNT - 1; i >= 0; i--, page_order_p--) {
|
||||
if (i == 0 || *page_order_p == cpmail_ovl->next_page_id || (i == 1 && page_order_p[-1] == cpmail_ovl->next_page_id)) {
|
||||
flag = TRUE;
|
||||
} else {
|
||||
flag = FALSE;
|
||||
}
|
||||
|
||||
mCM_set_page_dl(submenu, menu_info, game, graph, *page_order_p, flag);
|
||||
}
|
||||
|
||||
if (cpmail_ovl->page_move_timer == 0) {
|
||||
submenu->overlay->menu_control.tag_draw_func(submenu, game, mSM_OVL_CPMAIL);
|
||||
}
|
||||
}
|
||||
|
||||
static void mCM_cpmail_ovl_draw(Submenu* submenu, GAME* game) {
|
||||
mSM_MenuInfo_c* menu_info = &submenu->overlay->menu_info[mSM_OVL_CPMAIL];
|
||||
|
||||
if (submenu->overlay->cpmail_ovl != NULL) {
|
||||
menu_info->pre_draw_func(submenu, game);
|
||||
mCM_set_dl(submenu, menu_info, game);
|
||||
}
|
||||
}
|
||||
|
||||
static void mCM_cpmail_draw_init(mSM_MenuInfo_c* menu_info) {
|
||||
mCM_disp_data_c* disp_data_p = &mCM_disp_data[0];
|
||||
int i;
|
||||
|
||||
for (i = 0; i < mCD_KEEP_MAIL_PAGE_COUNT; i++) {
|
||||
disp_data_p->color_gfx = (Gfx*)disp_data_p->color_gfx;
|
||||
disp_data_p->pal_p = (u16*)disp_data_p->pal_p;
|
||||
disp_data_p->tex_p = (u8*)disp_data_p->tex_p;
|
||||
disp_data_p++;
|
||||
}
|
||||
}
|
||||
|
||||
extern void mCM_cpmail_ovl_set_proc(Submenu* submenu) {
|
||||
Submenu_Overlay_c* ovl = submenu->overlay;
|
||||
mSM_Control_c* ctrl = &ovl->menu_control;
|
||||
|
||||
ctrl->menu_move_func = mCM_cpmail_ovl_move;
|
||||
ctrl->menu_draw_func = mCM_cpmail_ovl_draw;
|
||||
if (ovl->hand_ovl != NULL && ovl->menu_info[mSM_OVL_CPMAIL].next_proc_status != mSM_OVL_PROC_END) {
|
||||
submenu->overlay->hand_ovl->set_hand_func(submenu);
|
||||
}
|
||||
}
|
||||
|
||||
static void mCM_cpmail_load_memory(Submenu* submenu, mSM_MenuInfo_c* menu_info) {
|
||||
mCM_Ovl_c* cpmail_ovl = submenu->overlay->cpmail_ovl;
|
||||
|
||||
mCD_save_data_aram_to_main(cpmail_ovl->card_mail, mCD_KEEP_MAIL_SIZE, mCD_ARAM_DATA_MAIL);
|
||||
}
|
||||
|
||||
static void mCM_cpmail_ovl_init(Submenu* submenu, mSM_MenuInfo_c* menu_info) {
|
||||
mCM_Ovl_c* cpmail_ovl = submenu->overlay->cpmail_ovl;
|
||||
Mail_c* player_mail = cpmail_ovl->player_mail;
|
||||
Mail_c* mail = Now_Private->mail;
|
||||
u8* page_order_p;
|
||||
u8* title_p;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < mPr_INVENTORY_MAIL_COUNT; i++) {
|
||||
mMl_copy_mail(player_mail, mail);
|
||||
player_mail++;
|
||||
mail++;
|
||||
}
|
||||
|
||||
page_order_p = cpmail_ovl->page_order;
|
||||
for (i = 0; i < mCD_KEEP_MAIL_PAGE_COUNT; i++, page_order_p++) {
|
||||
*page_order_p = i;
|
||||
}
|
||||
|
||||
mail = cpmail_ovl->card_mail->mail[0];
|
||||
for (i = 0; i < mCD_KEEP_MAIL_COUNT * mCD_KEEP_MAIL_PAGE_COUNT; i++) {
|
||||
mMl_clear_mail(mail);
|
||||
mail++;
|
||||
}
|
||||
|
||||
title_p = cpmail_ovl->card_mail->folder_names[0];
|
||||
for (i = 0; i < mCD_KEEP_MAIL_PAGE_COUNT; i++) {
|
||||
mem_clear(title_p, mCD_KEEP_MAIL_FOLDER_NAME_LEN, CHAR_SPACE);
|
||||
title_p += mCD_KEEP_MAIL_FOLDER_NAME_LEN;
|
||||
}
|
||||
|
||||
cpmail_ovl->_BB3 = 0;
|
||||
mCM_cpmail_load_memory(submenu, menu_info);
|
||||
submenu->item_p->slot_no = 1;
|
||||
submenu->overlay->move_chg_base_proc(menu_info, mSM_MOVE_IN_RIGHT);
|
||||
}
|
||||
|
||||
extern void mCM_cpmail_ovl_construct(Submenu* submenu) {
|
||||
Submenu_Overlay_c* ovl = submenu->overlay;
|
||||
mSM_MenuInfo_c* menu_info = &ovl->menu_info[mSM_OVL_CPMAIL];
|
||||
|
||||
if (ovl->cpmail_ovl == NULL) {
|
||||
mem_clear((u8*)&cpmail_ovl_data, sizeof(cpmail_ovl_data), 0);
|
||||
ovl->cpmail_ovl = &cpmail_ovl_data;
|
||||
cpmail_ovl_data.card_mail = (mCD_keep_mail_c*)zelda_malloc_align(mCD_KEEP_MAIL_SIZE, 32);
|
||||
mem_clear((u8*)cpmail_ovl_data.card_mail, mCD_KEEP_MAIL_SIZE, 0);
|
||||
mCM_cpmail_draw_init(menu_info);
|
||||
}
|
||||
|
||||
mCM_cpmail_ovl_init(submenu, menu_info);
|
||||
mCM_cpmail_ovl_set_proc(submenu);
|
||||
}
|
||||
|
||||
extern void mCM_cpmail_ovl_destruct(Submenu* submenu) {
|
||||
mCM_Ovl_c* cpmail_ovl = submenu->overlay->cpmail_ovl;
|
||||
Mail_c* player_mail;
|
||||
Mail_c* mail;
|
||||
int i;
|
||||
|
||||
if (cpmail_ovl->_BB3 != 0) {
|
||||
mail = Now_Private->mail;
|
||||
player_mail = cpmail_ovl->player_mail;
|
||||
for (i = 0; i < mPr_INVENTORY_MAIL_COUNT; i++) {
|
||||
mMl_copy_mail(mail, player_mail);
|
||||
player_mail++;
|
||||
mail++;
|
||||
}
|
||||
}
|
||||
|
||||
if (cpmail_ovl_data.card_mail != NULL) {
|
||||
zelda_free(cpmail_ovl_data.card_mail);
|
||||
cpmail_ovl_data.card_mail = NULL;
|
||||
}
|
||||
|
||||
submenu->overlay->cpmail_ovl = NULL;
|
||||
}
|
||||
+11
-11
@@ -2040,8 +2040,8 @@ static void mTG_init_tag_data_cpmail_wc_win(Submenu* submenu, int folder_idx) {
|
||||
mTG_tag_c* tag = &submenu->overlay->tag_ovl->tags[0];
|
||||
int len;
|
||||
|
||||
mem_copy(tag->str0, cpmail_ovl->card_mail->folder_names[folder_idx], mCM_FOLDER_NAME_LEN);
|
||||
len = mMl_strlen(tag->str0, mCM_FOLDER_NAME_LEN, CHAR_SPACE);
|
||||
mem_copy(tag->str0, cpmail_ovl->card_mail->folder_names[folder_idx], mCD_KEEP_MAIL_FOLDER_NAME_LEN);
|
||||
len = mMl_strlen(tag->str0, mCD_KEEP_MAIL_FOLDER_NAME_LEN, CHAR_SPACE);
|
||||
|
||||
if (len <= 0 || cpmail_ovl->page_order[0] == tag->tag_row) {
|
||||
tag->arrow_dir = 0;
|
||||
@@ -3356,7 +3356,7 @@ static void mTG_dump_mail_mark_exe_proc(Submenu* submenu, mSM_MenuInfo_c* menu_i
|
||||
} else if (menu_info->menu_type == mSM_OVL_CPMAIL) {
|
||||
int page = cpmail_ovl->page_order[0];
|
||||
|
||||
for (i = 0; i < mCM_MAIL_COUNT; i++) {
|
||||
for (i = 0; i < mCD_KEEP_MAIL_COUNT; i++) {
|
||||
Mail_c* mail = &cpmail_ovl->card_mail->mail[page][i];
|
||||
|
||||
// clear selected mail if it has a present or is from the player (sending)
|
||||
@@ -3447,7 +3447,7 @@ static void mTG_cpmail_change_mail_proc(Submenu* submenu, mSM_MenuInfo_c* menu_i
|
||||
}
|
||||
|
||||
cpmail_mark_cnt = 0;
|
||||
for (i = 0; i < mCM_MAIL_COUNT; i++) {
|
||||
for (i = 0; i < mCD_KEEP_MAIL_COUNT; i++) {
|
||||
if ((cpmail_ovl->mark_bitfield & (1 << i)) != 0) {
|
||||
cpmail_mark_cnt++;
|
||||
}
|
||||
@@ -3462,7 +3462,7 @@ static void mTG_cpmail_change_mail_proc(Submenu* submenu, mSM_MenuInfo_c* menu_i
|
||||
|
||||
cpmail_free_cnt = 0;
|
||||
page = cpmail_ovl->page_order[0];
|
||||
for (i = 0; i < mCM_MAIL_COUNT; i++) {
|
||||
for (i = 0; i < mCD_KEEP_MAIL_COUNT; i++) {
|
||||
if (mMl_check_not_used_mail(&cpmail_ovl->card_mail->mail[page][i]) == TRUE) {
|
||||
cpmail_free_cnt++;
|
||||
}
|
||||
@@ -3493,7 +3493,7 @@ static void mTG_cpmail_change_mail_proc(Submenu* submenu, mSM_MenuInfo_c* menu_i
|
||||
}
|
||||
|
||||
if (cpmail_cnt > 0) {
|
||||
for (cnt = 0, i = 0; cnt < cpmail_cnt && i < mCM_MAIL_COUNT; i++) {
|
||||
for (cnt = 0, i = 0; cnt < cpmail_cnt && i < mCD_KEEP_MAIL_COUNT; i++) {
|
||||
if ((cpmail_ovl->mark_bitfield & (1 << i)) != 0) {
|
||||
cpmail_ovl->mark_bitfield &= ~(1 << i);
|
||||
cnt++;
|
||||
@@ -4462,7 +4462,7 @@ static int mTG_mark_main_sub(Submenu* submenu, int menu_type, int param, int tab
|
||||
|
||||
*(u32**)mark_bitfield_p = &cpmail_ovl->mark_bitfield;
|
||||
updated_mark_bitfield->field32 = 1 << table_idx;
|
||||
*max_mark_count = mCM_MAIL_COUNT;
|
||||
*max_mark_count = mCD_KEEP_MAIL_COUNT;
|
||||
} else {
|
||||
return FALSE;
|
||||
}
|
||||
@@ -5541,7 +5541,7 @@ static void mTG_cpack_change_mail_mark_decide(Submenu* submenu, mIV_Ovl_c* inv_o
|
||||
cpmail_free_idx = -1;
|
||||
cpmail_move_mail = NULL;
|
||||
cpmail_free_mail = NULL;
|
||||
for (i = 0; i < mCM_MAIL_COUNT; i++, cpmail_mail++) {
|
||||
for (i = 0; i < mCD_KEEP_MAIL_COUNT; i++, cpmail_mail++) {
|
||||
if (cpmail_move_idx < 0 && (cpmail_ovl->mark_bitfield & (1 << i)) != 0) {
|
||||
cpmail_move_mail = cpmail_mail;
|
||||
cpmail_move_idx = i;
|
||||
@@ -6993,7 +6993,7 @@ static int mTG_select_tag_decide_cpmail_wchange(Submenu* submenu, mSM_MenuInfo_c
|
||||
static int mTG_select_tag_decide_cpmail_title(Submenu* submenu, mSM_MenuInfo_c* menu_info, mTG_tag_c* tag) {
|
||||
mCM_Ovl_c* cpmail_ovl = submenu->overlay->cpmail_ovl;
|
||||
|
||||
mSM_open_submenu_new2(submenu, mSM_OVL_EDITOR, mED_TYPE_CP_TITLE, mCM_FOLDER_NAME_LEN,
|
||||
mSM_open_submenu_new2(submenu, mSM_OVL_EDITOR, mED_TYPE_CP_TITLE, mCD_KEEP_MAIL_FOLDER_NAME_LEN,
|
||||
&cpmail_ovl->card_mail->folder_names[cpmail_ovl->page_order[0]], mCM_FOLDER_NAME_MAX_WIDTH);
|
||||
menu_info->proc_status = mSM_OVL_PROC_WAIT;
|
||||
submenu->overlay->hand_ovl->nop_hand_func(submenu);
|
||||
@@ -7613,7 +7613,7 @@ static void mTG_move_change(Submenu* submenu, mSM_MenuInfo_c* menu_info, mTG_tag
|
||||
mTG_init_tag_data(submenu, mTG_TABLE_CATALOG, mTG_TYPE_NONE, 0.0f, 0.0f, 0, 0);
|
||||
} else if (menu_info->menu_type == mSM_OVL_CPMAIL) {
|
||||
row = tag->tag_row;
|
||||
tag->tag_row = (submenu->overlay->cpmail_ovl->page_order[0] + 1) % mCM_PAGE_COUNT;
|
||||
tag->tag_row = (submenu->overlay->cpmail_ovl->page_order[0] + 1) % mCD_KEEP_MAIL_PAGE_COUNT;
|
||||
mTG_select_tag_decide_cpmail_wchange(submenu, menu_info, tag);
|
||||
tag->tag_row = row;
|
||||
} else if (menu_info->menu_type == mSM_OVL_CPORIGINAL) {
|
||||
@@ -7879,7 +7879,7 @@ static void mTG_move_delete(Submenu* submenu, mTG_tag_c* tag) {
|
||||
int i;
|
||||
int page = cpmail_ovl->page_order[0];
|
||||
|
||||
for (i = 0; i < mCM_MAIL_COUNT; i++) {
|
||||
for (i = 0; i < mCD_KEEP_MAIL_COUNT; i++) {
|
||||
if ((cpmail_ovl->mark_bitfield & (1 << i)) != 0) {
|
||||
mMl_clear_mail(&cpmail_ovl->card_mail->mail[page][i]);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user