Implement & link m_cpmail_ovl

This commit is contained in:
Cuyler36
2025-05-12 07:53:24 -04:00
parent 526b5af4a9
commit f217682289
6 changed files with 483 additions and 28 deletions
+1 -1
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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]);
}
+456
View File
@@ -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
View File
@@ -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]);
}