diff options
| author | TakaRikka <38417346+TakaRikka@users.noreply.github.com> | 2025-04-06 11:08:25 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-04-06 21:08:25 +0300 |
| commit | 54dd7640969e1f414f9b1111f874f85171ab6987 (patch) | |
| tree | 8f83caa22c5ab811736e3625be599061d478af10 /src/d/d_s_menu.cpp | |
| parent | 4361019959acf84f347fec62315f8aefb2d63a6f (diff) | |
GCN pal / jpn support, some debug work (#2375)
* d_save debug cleanup / d_s_menu debug
* gameinfo / kankyo struct debug fixes
* pal building ok
* jp building ok
* some tests with jp
* some more pal/jp tests
Diffstat (limited to 'src/d/d_s_menu.cpp')
| -rw-r--r-- | src/d/d_s_menu.cpp | 1972 |
1 files changed, 1970 insertions, 2 deletions
diff --git a/src/d/d_s_menu.cpp b/src/d/d_s_menu.cpp index fe3dc3d19c..8493530afb 100644 --- a/src/d/d_s_menu.cpp +++ b/src/d/d_s_menu.cpp @@ -4,9 +4,1976 @@ */ #include "d/d_s_menu.h" -#include "f_pc/f_pc_leaf.h" -#include "f_op/f_op_scene.h" +#include "d/d_com_inf_game.h" +#include "d/d_com_static.h" +#include "d/d_meter2_info.h" +#include "d/d_s_play.h" +#include "f_ap/f_ap_game.h" +#include "f_op/f_op_msg_mng.h" +#include "m_Do/m_Do_controller_pad.h" +#include "m_Do/m_Do_graphic.h" +#include "m_Do/m_Do_main.h" +#include "JSystem/JFramework/JFWSystem.h" +#include "JSystem/JUtility/JUTDbPrint.h" +#include "JSystem/JUtility/JUTReport.h" +#include <strtoul.h> + +#ifdef DEBUG +extern "C" int atoi(const char* str); + +void dScnMenu_setItem(int i_slotNo, u8 i_itemNo); +void dScnMenu_setPlayerDebugMode(); +void dScnMenu_setPlayerItemReset(); +bool dScnMenu_setPlayerDebugModeDungeon(); + +#define ERR_MAP 1 +#define ERR_ROOM 2 +#define ERR_LAYER 4 +#define ERR_POINT 8 + +int g_playerKind = 0; +int g_debugHpMode = 0; +int g_horsePosInit = 0; + +char dScnMenu_c::cursolStageName[8]; +int dScnMenu_c::cursolRoomNo = -1; +int dScnMenu_c::cursolLayer = -1; +int dScnMenu_c::cursolPoint = -1; + +u8 dScnMenu_c::m_error_flags; +bool dScnMenu_c::m_autoSelect; +int dScnMenu_c::m_autoCursolID; +int dScnMenu_c::m_autoGroupPoint; + +s32 l_cursolID; +s8* l_groupPoint; +s32 l_startID; +s32 l_timepat; +s16 l_weekpat; +s16 l_moonpat; + +int S_line_cnt; +int S_antei_cnt; +u8 l_languageType; + +int dSm_read_get_number(u8* i_data, int* i_pos) { + BOOL var_r28; + int pos; + int number; + + number = 0; + pos = *i_pos; + var_r28 = 0; + if (pos > 0) { + pos--; + } + + while (true) { + if (++pos >= 10000) { + OS_REPORT("\npreset text error!"); + number = -9; + break; + } + + if (i_data[pos] >= 0x30 && i_data[pos] <= 0x39) { + var_r28 = 1; + number *= 10; + number += (i_data[pos] & 0xF); + } else if (var_r28) { + if (i_data[pos] == 10) { + S_line_cnt++; + } + break; + } else if (i_data[pos] == 10) { + S_line_cnt++; + number = -1; + break; + } + } + + *i_pos = pos; + return number; +} + +int dSm_read_comp_keyword(int i_pos, u8* i_data, char* i_keyword, int i_size) { + BOOL diff; + BOOL var_r29; + + var_r29 = FALSE; + diff = TRUE; + + if (i_pos == 0 && (&i_data[i_pos])[i_size] < 0x30) { + var_r29 = TRUE; + } else if (i_pos != 0 && i_data[i_pos - 1] < 0x30 && (&i_data[i_pos])[i_size] < 0x30) { + var_r29 = TRUE; + } + + if (var_r29 && memcmp(&i_data[i_pos], i_keyword, i_size) == 0) { + diff = FALSE; + } + + return diff; +} + +int dSm_read_comp_spel(int i_pos, u8* i_data) { + BOOL diff = TRUE; + + if (i_pos != 0) { + if (i_data[i_pos - 1] == 10 && i_data[i_pos] >= 0x30) { + diff = FALSE; + } + } else if (i_data[i_pos] >= 0x30) { + diff = FALSE; + } + + return diff; +} + +u8 dSm_read_presettxt(u8* i_data) { + u8 error = 0; + + OS_REPORT("\n\n\n==========================================="); + // "\n= Preset File Read START =" + OS_REPORT("\n= 状況ファイル読み込み START ="); + OS_REPORT("\n===========================================\n"); + + S_line_cnt = 0; + + for (int pos = 0; pos < 10000; pos++) { + if (i_data[pos] == (u8)'\n') { + S_line_cnt++; + } + + int value; + if (dSm_read_comp_spel(pos, i_data) == 0) { + if (memcmp(&i_data[pos], "#", 1) == 0) { + loop_1: + if (i_data[pos] != 10 && i_data[pos] != 0) { + pos++; + goto loop_1; + } + } else if (dSm_read_comp_keyword(pos, i_data, "initialize", 10) == 0) { + value = dSm_read_get_number(i_data, &pos); + if (value < 0) { + OS_REPORT("\ninitialize error!!!!!\n"); + pos = 10000; + error = 1; + } else if (value == 0) { + // "\n Items initialize once" + OS_REPORT("\nアイテム類 一旦初期化", value); + dComIfG_playerStatusD_pre_clear(); + } else { + // "\n Item Debug Settings" + OS_REPORT("\nアイテム類 デバッグ設定", value); + dComIfG_playerStatusD(); + } + } else if (dSm_read_comp_keyword(pos, i_data, "hp", 2) == 0) { + value = dSm_read_get_number(i_data, &pos); + if (value < 0) { + OS_REPORT("\nhp error!!!!!\n"); + pos = 10000; + error = 1; + } else { + OS_REPORT("\nhp max[%d]", value); + dComIfGs_setMaxLife(value); + } + + value = dSm_read_get_number(i_data, &pos); + if (value < 0) { + OS_REPORT("\nhp max to onaji ni [%d]", dComIfGs_getMaxLife()); + dComIfGs_setLife(dComIfGs_getMaxLife()); + } else { + OS_REPORT("\nhp [%d]", value); + dComIfGs_setLife((u16)value); + } + } else if (dSm_read_comp_keyword(pos, i_data, "mp", 2) == 0) { + value = dSm_read_get_number(i_data, &pos); + if (value < 0) { + OS_REPORT("\nmp error!!!!!"); + pos = 10000; + error = 1; + } else { + OS_REPORT("\nmp max[%d]", value); + dComIfGs_setMaxMagic(value); + } + + value = dSm_read_get_number(i_data, &pos); + if (value < 0) { + OS_REPORT("\nmp max to onaji ni [%d]", dComIfGs_getMaxMagic()); + dComIfGs_setMagic(dComIfGs_getMaxMagic()); + } else { + OS_REPORT("\nmp [%d]", value); + dComIfGs_setMagic(value); + } + } else if (dSm_read_comp_keyword(pos, i_data, "sword", 5) == 0) { + value = dSm_read_get_number(i_data, &pos); + if (value < 0) { + OS_REPORT("\nsword error!!!!!"); + pos = 10000; + error = 1; + } else { + OS_REPORT("\nsword[%d]", value); + switch (value) { + case 0: + dMeter2Info_setSword(fpcNm_ITEM_NONE, false); + break; + case 1: + dMeter2Info_setSword(fpcNm_ITEM_SWORD, false); + break; + case 2: + dMeter2Info_setSword(fpcNm_ITEM_MASTER_SWORD, false); + break; + case 3: + dMeter2Info_setSword(fpcNm_ITEM_WOOD_STICK, false); + break; + case 4: + dMeter2Info_setSword(fpcNm_ITEM_LIGHT_SWORD, false); + break; + } + } + } else if (dSm_read_comp_keyword(pos, i_data, "shield", 6) == 0) { + value = dSm_read_get_number(i_data, &pos); + if (value < 0) { + OS_REPORT("\nshield error!!!!!\n"); + pos = 10000; + error = 1; + } else { + OS_REPORT("\nshield[%d]", value); + switch (value) { + case 0: + dMeter2Info_setShield(fpcNm_ITEM_NONE, false); + break; + case 1: + dMeter2Info_setShield(fpcNm_ITEM_WOOD_SHIELD, false); + break; + case 2: + dMeter2Info_setShield(fpcNm_ITEM_SHIELD, false); + break; + case 3: + dMeter2Info_setShield(fpcNm_ITEM_HYLIA_SHIELD, false); + break; + } + } + } else if (dSm_read_comp_keyword(pos, i_data, "boomerang", 9) == 0) { + value = dSm_read_get_number(i_data, &pos); + if (value < 0) { + OS_REPORT("\nboomerang error!!!!!\n"); + pos = 10000; + error = 1; + } else { + OS_REPORT("\nboomerang[%d]", value); + switch (value) { + case 0: + dScnMenu_setItem(SLOT_0, fpcNm_ITEM_NONE); + break; + case 1: + dScnMenu_setItem(SLOT_0, fpcNm_ITEM_BOOMERANG); + break; + } + } + } else if (dSm_read_comp_keyword(pos, i_data, "bow", 3) == 0) { + value = dSm_read_get_number(i_data, &pos); + if (value < 0) { + OS_REPORT("\nbow error!!!!!\n"); + pos = 10000; + error = 1; + } else { + OS_REPORT("\nbow max[%d]", value); + if (value == 0) { + dScnMenu_setItem(SLOT_4, fpcNm_ITEM_NONE); + } else if (value <= 10) { + dScnMenu_setItem(SLOT_4, fpcNm_ITEM_ARROW_10); + } else if (value <= 20) { + dScnMenu_setItem(SLOT_4, fpcNm_ITEM_ARROW_20); + } else { + dScnMenu_setItem(SLOT_4, fpcNm_ITEM_ARROW_30); + } + dComIfGs_setArrowMax(value); + } + + value = dSm_read_get_number(i_data, &pos); + if (value < 0) { + OS_REPORT("\nbow max to onaji ni [%d]", dComIfGs_getArrowMax()); + dComIfGs_setArrowNum(dComIfGs_getArrowMax()); + } else { + OS_REPORT("\nbow [%d]", value); + dComIfGs_setArrowNum(value); + } + } else if (dSm_read_comp_keyword(pos, i_data, "arrow-fire", 10) == 0) { + value = dSm_read_get_number(i_data, &pos); + if (value < 0) { + OS_REPORT("\narror-fire error!!!!!\n"); + pos = 10000; + error = 1; + } else if (value == 1) { + OS_REPORT("\narror-fire[%d]", value); + dScnMenu_setItem(SLOT_4, fpcNm_ITEM_LIGHT_ARROW); + } + } else if (dSm_read_comp_keyword(pos, i_data, "arrow-light", 11) == 0) { + value = dSm_read_get_number(i_data, &pos); + if (value < 0) { + OS_REPORT("\narror-light error!!!!!\n"); + pos = 10000; + error = 1; + } else if (value == 1) { + OS_REPORT("\narror-light[%d]", value); + dScnMenu_setItem(SLOT_4, fpcNm_ITEM_LIGHT_ARROW); + } + } else if (dSm_read_comp_keyword(pos, i_data, "bomb", 4) == 0) { + value = dSm_read_get_number(i_data, &pos); + if (value < 0) { + OS_REPORT("\nbomb error!!!!!\n"); + pos = 10000; + error = 1; + } else { + OS_REPORT("\nbomb max [%d]", value); + if (value == 0) { + dScnMenu_setItem(SLOT_15, fpcNm_ITEM_NONE); + dComIfGs_setBombMax(value); + } else { + dScnMenu_setItem(SLOT_15, fpcNm_ITEM_BOMB_BAG_LV1); + dComIfGs_setBombMax(value); + } + } + + value = dSm_read_get_number(i_data, &pos); + if (value < 0) { + OS_REPORT("\nbomb max to onaji ni [%d]", dComIfGp_getItemMaxBombNumCount()); + dComIfGs_setBombNum(dComIfGs_getBombMax()); + } else { + OS_REPORT("\nbomb [%d]", value); + dComIfGs_setBombNum(value); + } + } else if (dSm_read_comp_keyword(pos, i_data, "bottle", 6) == 0) { + value = dSm_read_get_number(i_data, &pos); + if (value < 0) { + OS_REPORT("\nbottle error!!!!!\n"); + pos = 10000; + error = 1; + } else { + OS_REPORT("\nbottle [%d]", value); + if (value <= 4) { + for (int i = 0; i < value; i++) { + dScnMenu_setItem((u8)(i + SLOT_11), fpcNm_ITEM_EMPTY_BOTTLE); + } + } + } + } else if ((dSm_read_comp_keyword(pos, i_data, "equip-x", 7) == 0) || + (dSm_read_comp_keyword(pos, i_data, "equip-y", 7) == 0) || + (dSm_read_comp_keyword(pos, i_data, "equip-z", 7) == 0)) + { + int i; + int equip_btn = 0; + if (dSm_read_comp_keyword(pos, i_data, "equip-x", 7) == 0) { + equip_btn = 0; + } else if (dSm_read_comp_keyword(pos, i_data, "equip-y", 7) == 0) { + equip_btn = 1; + } else if (dSm_read_comp_keyword(pos, i_data, "equip-z", 7) == 0) { + equip_btn = 2; + } + + for (i = 0; i < 20; i++) { + if (dSm_read_comp_keyword(pos + i, i_data, "boomerang", 9) == 0) { + dComIfGs_setSelectItemIndex(equip_btn, SLOT_0); + break; + } else if (dSm_read_comp_keyword(pos + i, i_data, "bomb", 4) == 0) { + dComIfGs_setSelectItemIndex(equip_btn, SLOT_15); + break; + } else if (dSm_read_comp_keyword(pos + i, i_data, "bow", 3) == 0) { + dComIfGs_setSelectItemIndex(equip_btn, SLOT_4); + break; + } else if ((&i_data[pos])[i] == 10) { + switch (equip_btn) { + case 0: + // "\nerror! equip-x is NO ITEM" + OS_REPORT("\nerror! equip-x 該当アイテム無し"); + break; + case 1: + // "\nerror! equip-y is NO ITEM" + OS_REPORT("\nerror! equip-y 該当アイテム無し"); + break; + case 2: + default: + // "\nerror! equip-zx is NO ITEM" + OS_REPORT("\nerror! equip-zx 該当アイテム無し"); + break; + } + pos = (10000 - i); + error = 1; + break; + } + } + + pos += i; + } else if (dSm_read_comp_keyword(pos, i_data, "end", 3) == 0) { + // "\nend command!" + OS_REPORT("\nend指令!"); + break; + } else if (dSm_read_comp_keyword(pos, i_data, "stage", 5) != 0) { + // "\nCommand Wrong! [Line%d]=[%-10.10s]" + OS_REPORT("\nコマンドまちがい![%d行目]=[%-10.10s]", S_line_cnt + 1, &i_data[pos]); + pos = 10000; + error = 1; + break; + } + } + + if (i_data[pos] == 0x1A || i_data[pos] == 0) { + break; + } + } + + OS_REPORT("\n==========================================="); + // "\n= Preset File Read end =" + OS_REPORT("\n= 状況ファイル読み込み end ="); + OS_REPORT("\n===========================================\n\n\n"); + return error; +} + +u8 dSm_read_stageset(u8* i_data) { + u8 sp8 = 0; + u8 buffer[10]; + BOOL char_copied = FALSE; + + for (int pos = 0; pos < 10000; pos++) { + int value; + + if (memcmp(&i_data[pos], "#", 1) == 0) { + loop_2: + if (i_data[pos] == 10 || i_data[pos] == 0) { + S_line_cnt++; + OS_REPORT("\n6[%d][%x]", pos, i_data[pos]); + } else { + pos++; + goto loop_2; + } + } + + if (dSm_read_comp_keyword(pos, i_data, "stage", 5) == 0) { + pos += 6; + memset(buffer, 0, 10); + + int buffer_pos = 0; + for (; buffer_pos < 8; buffer_pos++) { + if ((&i_data[buffer_pos])[pos] >= 0x30) { + buffer[buffer_pos] = (&i_data[buffer_pos])[pos]; + char_copied = TRUE; + } else if (char_copied) { + buffer[buffer_pos] = 0; + break; + } + } + + sp8 = 1; + memcpy(dScnMenu_c::cursolStageName, buffer, 8); + dScnMenu_c::m_error_flags |= (u8)ERR_MAP; + pos += buffer_pos; + + value = dSm_read_get_number(i_data, &pos); + if (value < 0) { + dScnMenu_c::cursolRoomNo = -1; + dScnMenu_c::cursolLayer = -1; + dScnMenu_c::cursolPoint = -1; + break; + } + + dScnMenu_c::cursolRoomNo = value; + dScnMenu_c::m_error_flags |= (u8)ERR_ROOM; + value = dSm_read_get_number(i_data, &pos); + if (value < 0) { + dScnMenu_c::cursolLayer = -1; + dScnMenu_c::cursolPoint = -1; + break; + } + + dScnMenu_c::cursolLayer = value; + dScnMenu_c::m_error_flags |= (u8)ERR_LAYER; + value = dSm_read_get_number(i_data, &pos); + if (value < 0) { + dScnMenu_c::cursolPoint = -1; + break; + } + + dScnMenu_c::cursolPoint = value; + dScnMenu_c::m_error_flags |= (u8)ERR_POINT; + break; + } + + if (i_data[pos] == 0x1A || i_data[pos] == 0) { + break; + } + } + + return sp8; +} + +// NONMATCHING - regalloc / stack +int dScnMenu_Draw(dScnMenu_c* i_this) { + static dDlst_2DQuad_c effectQuad; + static dDlst_2DQuad_c effectQuad2[40]; + static dDlst_2DQuad_c effectQuad3; + + GXColor category_color = {0xFF, 0x00, 0x00, 0x3C}; + effectQuad3.init(50, 55, 280, 38, category_color); + dComIfGd_set2DOpa(&effectQuad3); + + if (i_this->current_category != 0) { + JUTReport(50, 55, "[%s]", i_this->category_info->data[i_this->current_category - 1].name); + } else { + // "[Uncategorized]" + JUTReport(50, 55, "[未分類]"); + } + + // "Analog Up/Down - Category Selection" + JUTReport(340, 39, "アナログ 上下-カテゴリ選択"); + // " Left/Right - Expand Sub-menu" + JUTReport(340, 55, " 左右-サブ拡大"); + // "After Change" + JUTReport(540, 55, "変更後"); + + if (dScnMenu_c::m_error_flags & ERR_MAP) { + // " (Map Selection Error) " + JUTReport(150, 55, "(マップ指定の誤り)"); + } else if (dScnMenu_c::m_error_flags & ERR_ROOM) { + // " (Room Selection Error) " + JUTReport(150, 55, "(部屋指定の誤り)"); + } else if (dScnMenu_c::m_error_flags & ERR_LAYER) { + // " (Layer Selection Error) " + JUTReport(150, 55, "(レイヤー指定の誤り)"); + } else if (dScnMenu_c::m_error_flags & ERR_POINT) { + // " (Link No Selection Error) " + JUTReport(150, 55, "(リンクNo指定の誤り)"); + } + + if (i_this->select_point != 0) { + JUTReport(400, 50, "<%d>", i_this->select_point - 1); + } + + menu_info_class* menu_info = i_this->info; + int line_y_pos = 70; + int dist_from_startID = (l_cursolID - l_startID); + int line_num = menu_info->num < 20 ? menu_info->num : 20; + + if (dist_from_startID < 5) { + l_startID += dist_from_startID - 5; + if (l_startID < 0) { + l_startID = 0; + } + } else if (dist_from_startID > 15) { + int sp34 = (menu_info->num - 20); + if (sp34 < 0) { + sp34 = 0; + } + l_startID += dist_from_startID - 15; + if (l_startID > sp34) { + l_startID = sp34; + } + } + + int line_no = l_startID; + static int effectQuad2_cnt = 0; + + for (int i = 0; i < line_num; i++) { + if (line_no < menu_info->num) { + char map_name[100]; + memset(map_name, 0, 100); + memset(map_name, 32, 99); + memcpy(map_name, &menu_info->stage_data[line_no], 30); + + char room_desc[100]; + memset(room_desc, 0, 100); + memset(room_desc, 32, 99); + memcpy(room_desc, &menu_info->stage_data[line_no].data[l_groupPoint[line_no]], 27); + + char sub_room_desc[65]; + memset(sub_room_desc, 0, 65); + memset(sub_room_desc, 32, 64); + memcpy(sub_room_desc, &menu_info->stage_data[line_no].data[l_groupPoint[line_no]], 60); + + if (i_this->current_category == menu_info->stage_data[line_no].field_0x43) { + GXColor sp2C = {0x00, 0x00, 0xFF, 0x37}; + effectQuad2[effectQuad2_cnt].init(30, line_y_pos - 16, 540, line_y_pos, sp2C); + dComIfGd_set2DOpa(&effectQuad2[effectQuad2_cnt]); + effectQuad2_cnt++; + } + + if (l_cursolID == line_no) { + if (fabsf(mDoCPd_c::getStickX(PAD_1)) < 0.5f) { + JUTReport(20, line_y_pos, "%c %2d %s", l_cursolID == line_no ? 'O' : ' ', + line_no, map_name); + JUTReport(300, line_y_pos, "%2d:%s", l_groupPoint[line_no], room_desc); + } else { + JUTReport(20, line_y_pos, " %2d:%s", l_groupPoint[line_no], sub_room_desc); + } + + GXColor sp28 = {0x00, 0x00, 0x78, 0xFF}; + effectQuad.init(30, line_y_pos - 18, 540, line_y_pos - 2, sp28); + dComIfGd_set2DOpa(&effectQuad); + } else { + if (fabsf(mDoCPd_c::getStickX(PAD_1)) < 0.5f) { + JUTReport(20, line_y_pos, "%c %2d %s", l_cursolID == line_no ? 'O' : ' ', + line_no, map_name); + JUTReport(300, line_y_pos, "%2d:%s", l_groupPoint[line_no], room_desc); + } else { + JUTReport(20, line_y_pos, " %2d:%s", l_groupPoint[line_no], sub_room_desc); + } + } + + if (menu_info->stage_data[line_no].field_0x42 != 0xFF) { + JUTReport(540, line_y_pos, "+%02d", menu_info->stage_data[line_no].field_0x42); + if (menu_info->stage_data[line_no].field_0x42 <= 5) { + u8 alpha = (menu_info->stage_data[line_no].field_0x42 / 5.0f) * 80.0f; + GXColor sp24 = {0x14, 0x78, 0x14, 0xDC - alpha}; + + effectQuad2[effectQuad2_cnt].init(540, line_y_pos - 17, 578, line_y_pos - 2, + sp24); + dComIfGd_set2DOpa(&effectQuad2[effectQuad2_cnt]); + effectQuad2_cnt++; + } + } else { + JUTReport(540, line_y_pos, "***"); + } + line_no++; + line_y_pos += 16; + } else { + break; + } + } + + char* time_setting[] = { + "つうじょう(8:00)", // Normal (8:00) + "じこくひきつぎ", // Time Passing + "あさ固定", // Fixed Morning + "ひる固定", // Fixed Afternoon + "ゆうがた固定", // Fixed Dusk + "よる固定", // Fixed Night + "時に固定", // Time Fixed + }; + + char* season_setting[] = { + "はる", // Spring + "なつ", // Summer + "あき", // Fall + "ふゆ", // Winter + "無視", // Ignore + }; + + char* moon_setting[] = { + "1", "2", "3", "4", "5", "6", "7", + }; + + char* light_setting[] = { + "つうじょう", // Normal + "1灯", // 1 Light + "2灯", // 2 Light + "3灯", // 3 Light + "4灯", // 4 Light + "5灯", // 5 Light + "6灯", // 6 Light + "7灯", // 7 Light + }; + + if (l_timepat >= 6) { + int sp20 = l_timepat - 6; + // "(Y or X) Time:%d%s" + JUTReport(120, 420, "(YorX)じこく:%d%s", sp20, time_setting[6]); + } else { + // "(Y or X) Time:%s" + JUTReport(120, 420, "(YorX)じこく:%s", time_setting[l_timepat]); + } + + // "(3B) Light:%s" + JUTReport(290, 400, "(3B)ライト:%s", light_setting[g_env_light.light_mask_type & 0xF]); + // "(3X) Moon:%s" + JUTReport(470, 400, "(3X)月:%s", moon_setting[l_moonpat]); + // "%d Clears" + JUTReport(40, 400, "%d周目", dComIfGs_getClearCount()); + + static char* language[] = { + "ENGLISH", "GERMAN", "FRENCH", "SPANISH", "ITALIAN", + }; + + JUTReport(40, 440, "%s", language[dComIfGs_getPalLanguage()]); + + if (g_debugHpMode == 0) { + // "(3Y) Normal" + JUTReport(100, 400, "(3Y)通常"); + } else { + // "(3Y) Invincible" + JUTReport(100, 400, "(3Y)無敵"); + } + + if (g_playerKind == 0) { + // "Z: Normal" + JUTReport(400, 420, "Z:通常"); + } else if (g_playerKind == 1) { + // "Z: Fixed Wolf" + JUTReport(400, 420, "Z:狼固定"); + } else if (g_playerKind == 2) { + // "Z: Ranch Fixed" + JUTReport(400, 420, "Z:牧童固定"); + } else if (g_playerKind == 3) { + // "Z: Kokiri Fixed" + JUTReport(400, 420, "Z:コキリ固定"); + } else if (g_playerKind == 4) { + // "Z: Zora Fixed" + JUTReport(400, 420, "Z:ゾーラ固定"); + } else { + // "Z: Armor Fixed" + JUTReport(400, 420, "Z:鎧固定"); + } + + if (dComIfGs_isEventBit(dSv_event_flag_c::M_067)) { + // "Midna ON" + JUTReport(500, 420, "ミドナON"); + } else { + // "Midna OFF" + JUTReport(500, 420, "ミドナOFF"); + } + + int header_x = 36; + int sp18 = 40; + sp18 += 12; + int header_y = sp18 - 12; + + JUTReport(header_x, header_y, "_DEBUG %s %s", mDoMain::COPYDATE_STRING, "Authorized User"); + + if (g_presetHIO.mPresetData[0] != 0) { + // "Preset File In Use" + JUTReport(450, 380, "状況ファイル 使用中"); + } + + return 1; +} + +int toGameScene(dScnMenu_c* i_this) { + int rt; + + if ((strcmp(dComIfGp_getNextStageName(), "F_SP127") == 0 || + strcmp(dComIfGp_getNextStageName(), "R_SP127") == 0) && + dComIfGp_getNextStageLayer() <= 3) + { + g_env_light.fishing_hole_season = dComIfGp_getNextStageLayer() + 1; + } + + if (strcmp(dComIfGp_getNextStageName(), "OPENING") == 0) { + dComIfGs_offEventBit(dSv_event_flag_c::M_068); + dComIfGs_offEventBit(dSv_event_flag_c::M_077); + dComIfGs_offEventBit((u16)dSv_event_flag_c::saveBitLabels[550]); + dComIfGs_offEventBit(dSv_event_flag_c::F_0338); + rt = fopScnM_ChangeReq(i_this, PROC_PLAY_SCENE, 0, 5); + dComIfGs_init(); + dComIfGp_offEnableNextStage(); + daNpcMsg_setEvtNum(7); + dComIfGp_setNextStage("F_SP108", 21, 1, 13); + dComIfGs_resetDan(); + dComIfGs_setRestartRoomParam(0); + } else { + if (strcmp(dComIfGp_getNextStageName(), "D_MN54") == 0 || + strcmp(dComIfGp_getNextStageName(), "D_MN04A") == 0 || + strcmp(dComIfGp_getNextStageName(), "F_SP127") == 0) + { + dComIfGs_offEventBit(dSv_event_flag_c::M_077); + } + + if (g_env_light.light_mask_type != 0) { + g_env_light.light_mask_type = (u8)(g_env_light.light_mask_type | 0xF0); + } + + rt = fopScnM_ChangeReq(i_this, PROC_PLAY_SCENE, 0, 5); + dComIfGs_setRestartRoomParam(0); + } + + return rt; +} + +// Matching ? +void setEnvData(menu_data_class* i_data) { + int i; + int time = 99; + dComIfGs_setTime(120.0f); + + for (i = 0; i < 65; i++) { + if (memcmp(&i_data->env_data[i], "TIME", 4) == 0) { + time = (i_data->env_data[i + 4] & 0xF) * 10; + time += i_data->env_data[i + 5] & 0xF; + break; + } + } + + if (time != 99) { + dComIfGs_setTime(15.0f * (f32)time); + g_env_light.daytime = 15.0f * (f32)time; + } + + for (int i = 0; i < 65; i++) { + if (memcmp(&i_data->env_data[i], "(光0)", 6) == 0) { + // "(Light 0)" + dComIfGs_onDarkClearLV(0); + dComIfGs_onDarkClearLV(1); + dComIfGs_onDarkClearLV(2); + dComIfGs_onDarkClearLV(3); + dComIfGs_onDarkClearLV(4); + dComIfGs_onDarkClearLV(5); + } else if (memcmp(&i_data->env_data[i], "(光1)", 6) == 0) { + // "(Light 1)" + dComIfGs_onDarkClearLV(0); + } else if (memcmp(&i_data->env_data[i], "(光2)", 6) == 0) { + // "(Light 2)" + dComIfGs_onDarkClearLV(1); + } else if (memcmp(&i_data->env_data[i], "(光3)", 6) == 0) { + // "(Light 3)" + dComIfGs_onDarkClearLV(2); + } else if (memcmp(&i_data->env_data[i], "(光4)", 6) == 0) { + // "(Light 4)" + dComIfGs_onDarkClearLV(3); + } else if (memcmp(&i_data->env_data[i], "(光5)", 6) == 0) { + // "(Light 5)" + dComIfGs_onDarkClearLV(4); + } else if (memcmp(&i_data->env_data[i], "剣無", 4) == 0) { + // "No Sword" + dMeter2Info_setSword(fpcNm_ITEM_NONE, false); + dComIfGs_offItemFirstBit(fpcNm_ITEM_WOOD_STICK); + dComIfGs_offItemFirstBit(fpcNm_ITEM_SWORD); + dComIfGs_offItemFirstBit(fpcNm_ITEM_MASTER_SWORD); + dComIfGs_offItemFirstBit(fpcNm_ITEM_LIGHT_SWORD); + dMeter2Info_setShield(fpcNm_ITEM_NONE, false); + dComIfGs_offItemFirstBit(fpcNm_ITEM_SHIELD); + dComIfGs_offItemFirstBit(fpcNm_ITEM_WOOD_SHIELD); + dComIfGs_offItemFirstBit(fpcNm_ITEM_HYLIA_SHIELD); + } else if (memcmp(&i_data->env_data[i], "神剣", 4) == 0) { + // "Master Sword" + dMeter2Info_setSword(fpcNm_ITEM_MASTER_SWORD, false); + dComIfGs_onItemFirstBit(fpcNm_ITEM_WOOD_STICK); + dComIfGs_onItemFirstBit(fpcNm_ITEM_SWORD); + dComIfGs_onItemFirstBit(fpcNm_ITEM_MASTER_SWORD); + dComIfGs_onItemFirstBit(fpcNm_ITEM_LIGHT_SWORD); + } else if (memcmp(&i_data->env_data[i], "木刀", 4) == 0) { + // "Wooden Sword" + dMeter2Info_setSword(fpcNm_ITEM_WOOD_STICK, false); + dComIfGs_onItemFirstBit(fpcNm_ITEM_WOOD_STICK); + dMeter2Info_setShield(fpcNm_ITEM_NONE, false); + dComIfGs_offItemFirstBit(fpcNm_ITEM_SHIELD); + dComIfGs_offItemFirstBit(fpcNm_ITEM_WOOD_SHIELD); + dComIfGs_offItemFirstBit(fpcNm_ITEM_HYLIA_SHIELD); + } else if (memcmp(&i_data->env_data[i], "童", 2) == 0) { + // "Child" + if (g_playerKind == 0) { + g_playerKind = 2; + } + } else if (memcmp(&i_data->env_data[i], "狼", 2) == 0) { + // "Wolf" + if (g_playerKind == 0) { + g_playerKind = 1; + } + } else if ((dScnMenu_c::isAutoSelect() && i == 0) || + memcmp(&i_data->env_data[i], "緑服", 4) == 0) + { + // "Green Tunic" + if (g_playerKind == 0) { + g_playerKind = 3; + dMeter2Info_setSword(fpcNm_ITEM_SWORD, false); + dMeter2Info_setShield(fpcNm_ITEM_HYLIA_SHIELD, false); + } + } else if (memcmp(&i_data->env_data[i], "SET", 3) == 0 && i_data->env_data[i + 3] >= '0' && + i_data->env_data[i + 3] <= '9') + { + i += 3; + + while (true) { + char string[4]; + int label_no; + int j = 0; + + memset(string, 0, 4); + + while (true) { + if (i_data->env_data[i] >= '0' && i_data->env_data[i] <= '9' && j < 3) { + string[j] = i_data->env_data[i]; + + j++; + i++; + } else { + break; + } + } + + label_no = atoi(string); + if (label_no >= 0 && label_no <= 999) { + dComIfGs_onEventBit((u16)dSv_event_flag_c::saveBitLabels[label_no]); + } + + if (i_data->env_data[i] != '+') { + break; + } + i++; + } + + i--; + } else if (memcmp(&i_data->env_data[i], "RESET", 5) == 0 && + i_data->env_data[i + 5] >= '0' && i_data->env_data[i + 5] <= '9') + { + i += 5; + + while (true) { + char string[4]; + int label_no; + int j = 0; + + memset(string, 0, 4); + + while (true) { + if (i_data->env_data[i] >= '0' && i_data->env_data[i] <= '9' && j < 3) { + string[j] = i_data->env_data[i]; + + j++; + i++; + } else { + break; + } + } + + label_no = atoi(string); + if (label_no >= 0 && label_no <= 999) { + dComIfGs_offEventBit((u16)dSv_event_flag_c::saveBitLabels[label_no]); + } + + if (i_data->env_data[i] != '+') { + break; + } + i++; + } + + i--; + } else if (memcmp(&i_data->env_data[i], "SETT", 4) == 0) { + i += 4; + + while (true) { + char string[4]; + int label_no; + int j = 0; + + memset(string, 0, 4); + + while (true) { + if (i_data->env_data[i] >= '0' && i_data->env_data[i] <= '9' && j < 3) { + string[j] = i_data->env_data[i]; + + j++; + i++; + } else { + break; + } + } + + label_no = atoi(string); + if (label_no >= 0 && label_no <= 999) { + dComIfGs_onTmpBit((u16)dSv_event_tmp_flag_c::tempBitLabels[label_no]); + OS_WARNING("onTmpBit[%d]\n", label_no); + } + + if (i_data->env_data[i] != '+') { + break; + } + i++; + } + + i--; + } else if (memcmp(&i_data->env_data[i], "RESETT", 6) == 0) { + i += 6; + + while (true) { + char string[4]; + int label_no; + int j = 0; + + memset(string, 0, 4); + + while (true) { + if (i_data->env_data[i] >= '0' && i_data->env_data[i] <= '9' && j < 3) { + string[j] = i_data->env_data[i]; + + j++; + i++; + } else { + break; + } + } + + label_no = atoi(string); + if (label_no >= 0 && label_no <= 999) { + dComIfGs_offTmpBit((u16)dSv_event_tmp_flag_c::tempBitLabels[label_no]); + OS_WARNING("offTmpBit[%d]\n", label_no); + } + + if (i_data->env_data[i] != '+') { + break; + } + i++; + } + + i--; + } else if (memcmp(&i_data->env_data[i], "鉄靴", 4) == 0) { + // "Iron Boots" + dScnMenu_setItem(SLOT_3, fpcNm_ITEM_HVY_BOOTS); + dComIfGs_setSelectItemIndex(SELECT_ITEM_Y, SLOT_3); + } else if (memcmp(&i_data->env_data[i], "水服", 4) == 0) { + // "Water Tunic" + dMeter2Info_setCloth(fpcNm_ITEM_WEAR_ZORA, false); + } else if (memcmp(&i_data->env_data[i], "(初)", 4) == 0 || + memcmp(&i_data->env_data[i], "(初)", 6) == 0) + { + // "(First)" + dComIfGs_offGetMagicUseFlag(); + dComIfGs_offItemFirstBit(fpcNm_ITEM_BOW); + } else if (memcmp(&i_data->env_data[i], "ミドナ瀕死", 10) == 0) { + // "Midna Dying" + dComIfGs_onDarkClearLV(0); + dComIfGs_onDarkClearLV(1); + dComIfGs_onDarkClearLV(2); + dComIfGs_offDarkClearLV(3); + dComIfGs_offDarkClearLV(4); + dComIfGs_onTransformLV(0); + dComIfGs_onTransformLV(1); + dComIfGs_onTransformLV(2); + dComIfGs_onTransformLV(3); + } else if (memcmp(&i_data->env_data[i], "変身自由", 8) == 0) { + // "Transform Unlocked" + dComIfGs_onDarkClearLV(0); + dComIfGs_onDarkClearLV(1); + dComIfGs_onDarkClearLV(2); + dComIfGs_onDarkClearLV(3); + dComIfGs_onTransformLV(0); + dComIfGs_onTransformLV(1); + dComIfGs_onTransformLV(2); + dComIfGs_onTransformLV(3); + dComIfGs_onEventBit(dSv_event_flag_c::F_0250); + } else if (memcmp(&i_data->env_data[i], "奥1", 4) == 0) { + // Hidden Skill 1 + dComIfGs_onEventBit(dSv_event_flag_c::F_0339); + } else if (memcmp(&i_data->env_data[i], "奥2", 4) == 0) { + // Hidden Skill 2 + dComIfGs_onEventBit(dSv_event_flag_c::F_0338); + dComIfGs_onEventBit(dSv_event_flag_c::F_0339); + } else if (memcmp(&i_data->env_data[i], "奥3", 4) == 0) { + // Hidden Skill 3 + dComIfGs_onEventBit(dSv_event_flag_c::F_0338); + dComIfGs_onEventBit(dSv_event_flag_c::F_0339); + dComIfGs_onEventBit(dSv_event_flag_c::F_0340); + } else if (memcmp(&i_data->env_data[i], "奥4", 4) == 0) { + // Hidden Skill 4 + dComIfGs_onEventBit(dSv_event_flag_c::F_0338); + dComIfGs_onEventBit(dSv_event_flag_c::F_0339); + dComIfGs_onEventBit(dSv_event_flag_c::F_0340); + dComIfGs_onEventBit(dSv_event_flag_c::F_0341); + } else if (memcmp(&i_data->env_data[i], "奥5", 4) == 0) { + // Hidden Skill 5 + dComIfGs_onEventBit(dSv_event_flag_c::F_0338); + dComIfGs_onEventBit(dSv_event_flag_c::F_0339); + dComIfGs_onEventBit(dSv_event_flag_c::F_0340); + dComIfGs_onEventBit(dSv_event_flag_c::F_0341); + dComIfGs_onEventBit(dSv_event_flag_c::F_0342); + } else if (memcmp(&i_data->env_data[i], "奥6", 4) == 0) { + // Hidden Skill 6 + dComIfGs_onEventBit(dSv_event_flag_c::F_0338); + dComIfGs_onEventBit(dSv_event_flag_c::F_0339); + dComIfGs_onEventBit(dSv_event_flag_c::F_0340); + dComIfGs_onEventBit(dSv_event_flag_c::F_0341); + dComIfGs_onEventBit(dSv_event_flag_c::F_0342); + dComIfGs_onEventBit(dSv_event_flag_c::F_0343); + } else if (memcmp(&i_data->env_data[i], "奥7", 4) == 0) { + // Hidden Skill 7 + dComIfGs_onEventBit(dSv_event_flag_c::F_0338); + dComIfGs_onEventBit(dSv_event_flag_c::F_0339); + dComIfGs_onEventBit(dSv_event_flag_c::F_0340); + dComIfGs_onEventBit(dSv_event_flag_c::F_0341); + dComIfGs_onEventBit(dSv_event_flag_c::F_0342); + dComIfGs_onEventBit(dSv_event_flag_c::F_0343); + dComIfGs_onEventBit(dSv_event_flag_c::F_0344); + } + } +} + +// NONMATCHING - some stack issues +int dScnMenu_Execute(dScnMenu_c* i_this) { + static const u8 l_autoCancel[2][2] = { + {99, 99}, + {0, 0}, + }; + + menu_info_class* menu_info = i_this->info; + + if (!mDoCPd_c::getHoldL(PAD_1) && !mDoCPd_c::getHoldR(PAD_1) && + mDoCPd_c::getAnalogL(PAD_1) > 0.8f && mDoCPd_c::getAnalogR(PAD_1) > 0.8f && + mDoCPd_c::getTrigA(PAD_1)) + { + dScnMenu_c::m_autoSelect = true; + dScnMenu_c::m_autoCursolID = l_cursolID; + dScnMenu_c::m_autoGroupPoint = l_groupPoint[l_cursolID]; + } + + if (dScnMenu_c::m_autoSelect) { + if (dScnMenu_c::m_autoCursolID > menu_info->num) { + dScnMenu_c::m_autoSelect = false; + goto block_24; + } else if (i_this->field_0x1ee == 0) { + menu_data_class* menu_data = &menu_info->stage_data[dScnMenu_c::m_autoCursolID] + .data[dScnMenu_c::m_autoGroupPoint]; + dComIfGp_offEnableNextStage(); + dComIfGp_setNextStage(menu_data->stage_name, menu_data->point, menu_data->room_no, + menu_data->layer); + g_playerKind = 0; + setEnvData(menu_data); + + if (toGameScene(i_this)) { + OS_REPORT("\x1b[45;30m自動メニュー選択(<%s>ステージ<%s> レイヤー<%d> 部屋No<%d> " + "プレイヤーNo<%d> ---<%d,%d>)\n\x1b[40;37m", + menu_data->env_data, menu_data->stage_name, menu_data->layer, + menu_data->room_no, menu_data->point, dScnMenu_c::m_autoCursolID, + dScnMenu_c::m_autoGroupPoint); + + u8 sp8; + do { + if (++dScnMenu_c::m_autoGroupPoint >= + menu_info->stage_data[dScnMenu_c::m_autoCursolID].field_0x41) + { + dScnMenu_c::m_autoCursolID++; + dScnMenu_c::m_autoGroupPoint = 0; + } + + sp8 = 0; + + const u8* sp34 = l_autoCancel[0]; + for (u32 i = 0; i < 1; i++) { + if (dScnMenu_c::m_autoCursolID >= 82 || + (dScnMenu_c::m_autoCursolID == sp34[0] && + dScnMenu_c::m_autoGroupPoint == sp34[1])) + { + sp8 = 1; + break; + } + + sp34 += 2; + } + } while (sp8 != 0); + + i_this->field_0x1ee = 1; + } + } + return 1; + } + +block_24: + if (mDoCPd_c::getHoldUp(PAD_1) || mDoCPd_c::getHoldDown(PAD_1)) { + BOOL move_cursor = TRUE; + + if (mDoCPd_c::getTrigUp(PAD_1) || mDoCPd_c::getTrigDown(PAD_1)) { + i_this->cursor_move_timer = 20; + } else { + if (cLib_calcTimer<u8>(&i_this->cursor_move_timer) == 0) { + i_this->cursor_move_timer = 4; + } else { + move_cursor = FALSE; + } + } + + if (move_cursor) { + if (mDoCPd_c::getHoldUp(PAD_1)) { + if (--l_cursolID < 0) { + l_cursolID = menu_info->num - 1; + } + } else { + if (++l_cursolID >= menu_info->num) { + l_cursolID = 0; + } + } + + i_this->current_category = menu_info->stage_data[l_cursolID].field_0x43; + } + } + + f32 stick_x = mDoCPd_c::getStickX(PAD_1); + f32 stick_y = mDoCPd_c::getStickY(PAD_1); + + if (fabsf(stick_y) > 0.5f) { + BOOL move_cursor = TRUE; + if (i_this->category_move_timer == 20) { + i_this->category_move_timer--; + } else { + if (cLib_calcTimer<u8>(&i_this->category_move_timer) == 0) { + i_this->category_move_timer = 19; + } else { + move_cursor = FALSE; + } + } + + if (move_cursor) { + if (stick_y > 0.0f) { + if (i_this->current_category != 0) { + i_this->current_category--; + } else { + i_this->current_category = i_this->category_info->num; + } + + for (int i = 0; i < menu_info->num; i++) { + if (i_this->current_category == menu_info->stage_data[i].field_0x43) { + l_cursolID = i; + break; + } + } + } else { + if (i_this->current_category < i_this->category_info->num) { + i_this->current_category++; + } else { + i_this->current_category = 0; + } + + for (int i = 0; i < menu_info->num; i++) { + if (i_this->current_category == menu_info->stage_data[i].field_0x43) { + l_cursolID = i; + break; + } + } + } + + l_startID = l_cursolID; + } + } else { + i_this->category_move_timer = 20; + } + + if (mDoCPd_c::getHoldB(PAD_1) || mDoCPd_c::getHoldA(PAD_1)) { + BOOL change_point = TRUE; + if (mDoCPd_c::getTrigB(PAD_1) || mDoCPd_c::getTrigA(PAD_1)) { + i_this->group_move_timer = 20; + } else { + if (cLib_calcTimer<u8>(&i_this->group_move_timer) == 0) { + i_this->group_move_timer = 4; + } else { + change_point = FALSE; + } + } + + if (change_point) { + if (mDoCPd_c::getHoldB(PAD_1)) { + if (--l_groupPoint[l_cursolID] < 0) { + l_groupPoint[l_cursolID] = menu_info->stage_data[l_cursolID].field_0x41 - 1; + } + } else { + if (++l_groupPoint[l_cursolID] >= menu_info->stage_data[l_cursolID].field_0x41) { + l_groupPoint[l_cursolID] = 0; + } + } + } + } + + if (mDoCPd_c::getTrigR(PAD_1)) { + if (++i_this->select_point == 0) { + i_this->select_point++; + } + } else if (mDoCPd_c::getTrigL(PAD_1)) { + if (--i_this->select_point == 0) { + i_this->select_point--; + } + } + + if (mDoCPd_c::getTrigStart(PAD_1) || g_presetHIO.field_0x2717 == 2) { + menu_data_class* data = &menu_info->stage_data[l_cursolID].data[l_groupPoint[l_cursolID]]; + dComIfGp_offEnableNextStage(); + + int point; + if (i_this->select_point != 0) { + point = i_this->select_point - 1; + } else { + point = data->point; + } + + dComIfGp_setNextStage(data->stage_name, point, data->room_no, data->layer); + setEnvData(data); + + if (g_presetHIO.field_0x2717 == 2) { + g_presetHIO.field_0x2717 = 0; + dSm_read_stageset(g_presetHIO.mPresetData); + fopScnM_ChangeReq(i_this, PROC_MENU_SCENE, 0, 5); + } else { + dScnMenu_c::cursolStageName[0] = 0; + toGameScene(i_this); + } + + dScnMenu_setPlayerDebugMode(); + } + + if (mDoCPd_c::getTrigY(PAD_1)) { + if (--l_timepat < 0) { + l_timepat = 29; + } + } else if (mDoCPd_c::getTrigX(PAD_1)) { + if (++l_timepat > 29) { + l_timepat = 0; + } + } + + f32 substick_x = mDoCPd_c::getSubStickX(PAD_1); + if (fabsf(substick_x) > 0.5f) { + if (i_this->week_move_timer == 0) { + if (substick_x < 0.0f) { + if (--l_weekpat < 0) { + l_weekpat = 4; + } + } else { + if (++l_weekpat >= 5) { + l_weekpat = 0; + } + } + i_this->week_move_timer = 99; + } + } else { + i_this->week_move_timer = 0; + } + + f32 temp_f27 = mDoCPd_c::getSubStickX(PAD_1); + if (mDoCPd_c::getTrigX(PAD_3)) { + if (++l_moonpat >= 7) { + l_moonpat = 0; + } + } + + dComIfGs_setDate(l_moonpat); + + if (mDoCPd_c::getTrigB(PAD_3)) { + g_env_light.light_mask_type++; + if (g_env_light.light_mask_type > 7) { + g_env_light.light_mask_type = 0; + } + } + + if (mDoCPd_c::getTrigZ(PAD_1)) { + g_playerKind++; + if (g_playerKind == 6) { + g_playerKind = 0; + } + } + + g_horsePosInit = 1; + + if (mDoCPd_c::getTrigY(PAD_3)) { + g_debugHpMode ^= 1; + } + + if (mDoCPd_c::getTrigA(PAD_3)) { + if (dComIfGs_isEventBit(dSv_event_flag_c::M_067) != 0) { + dComIfGs_offEventBit(dSv_event_flag_c::M_067); + dComIfGs_offEventBit(dSv_event_flag_c::M_011); + dComIfGs_offGetMagicUseFlag(); + + for (int i = 0; i < 4; i++) { + dComIfGs_offLightDropGetFlag(i); + } + } else { + dComIfGs_onEventBit(dSv_event_flag_c::M_067); + dComIfGs_onEventBit(dSv_event_flag_c::M_011); + + for (int i = 0; i < 4; i++) { + dComIfGs_onLightDropGetFlag(i); + } + } + } + + g_env_light.time_change_rate = 0.0f; + + if (l_timepat >= 6) { + f32 time = 15.0f * (f32)(l_timepat - 6); + dComIfGs_setTime(time); + g_env_light.time_change_rate = 1000.0f; + } else { + switch (l_timepat) { + case 0: + case 1: + break; + case 2: + dComIfGs_setTime(90.0f); + g_env_light.daytime = 90.0f; + g_env_light.time_change_rate = 1000.0f; + break; + case 3: + dComIfGs_setTime(195.0f); + g_env_light.daytime = 195.0f; + g_env_light.time_change_rate = 1001.0f; + break; + case 4: + dComIfGs_setTime(255.0f); + g_env_light.daytime = 255.0f; + g_env_light.time_change_rate = 1002.0f; + break; + case 5: + dComIfGs_setTime(315.0f); + g_env_light.daytime = 315.0f; + g_env_light.time_change_rate = 1003.0f; + break; + } + } + + if (S_antei_cnt > 30) { + g_presetHIO.exePreset(); + } else { + S_antei_cnt++; + } + + return 1; +} + +int dScnMenu_IsDelete(dScnMenu_c* i_this) { + "Is Delete -> Menu scene\n"; + return 1; +} + +int dScnMenu_Delete(dScnMenu_c* i_this) { + "dScnMenu_Delete():\n"; + + JUTDbPrint::getManager()->changeFont(JFWSystem::getSystemFont()); + delete i_this->font; + + JKRFree(i_this->info); + JKRFree(i_this->fontRes); + fapGmHIO_offMenu(); + + if (g_presetHIO.mPresetData[0] != 0) { + g_presetHIO.field_0x2716 = dSm_read_presettxt(g_presetHIO.mPresetData); + if (g_presetHIO.field_0x2716 != 0) { + dComIfG_playerStatusD(); + } + } else { + dComIfGp_itemDataInit(); + } + + fapGmHIO_offMenu(); + return 1; +} + +int phase_1(dScnMenu_c* i_this) { + if (!dStage_roomControl_c::resetArchiveBank(0)) { + return cPhs_INIT_e; + } + + JKRHeap* heap = mDoExt_getZeldaHeap(); + s32 total_free = heap->getTotalFreeSize(); + "dScnMenu_Create(): TotalFreeSize=%d\n"; + OS_REPORT("Menu Create !!\n"); + + i_this->command = mDoDvdThd_toMainRam_c::create("/res/Menu/Menu1.dat", 0, NULL); + JUT_ASSERT(3083, i_this->command != 0); + + i_this->fontCommand = mDoDvdThd_toMainRam_c::create("/res/Menu/kanfont_fix16.bfn", 0, NULL); + JUT_ASSERT(3086, i_this->fontCommand != 0); + + dComIfG_playerStatusD(); + dComIfGs_offDarkClearLV(0); + dComIfGs_offDarkClearLV(1); + dComIfGs_offDarkClearLV(2); + dComIfGs_offDarkClearLV(3); + dComIfGs_offDarkClearLV(4); + dComIfGs_offDarkClearLV(5); + dComIfGs_offTransformLV(0); + dComIfGs_offTransformLV(1); + dComIfGs_offTransformLV(2); + dComIfGs_offTransformLV(3); + g_env_light.light_mask_type = 0; + return cPhs_NEXT_e; +} + +u8 search(menu_info_class* i_info) { + int index; + u8 rt = 0; + if (dScnMenu_c::cursolStageName[0] != 0) { + index = i_info->num - 1; + while (index >= 0) { + menu_data_class* data = i_info->stage_data[index].data; + + for (s8 i = 0; i < i_info->stage_data[index].field_0x41; i++) { + if (strcmp(data->stage_name, dScnMenu_c::cursolStageName) == 0) { + l_cursolID = index; + rt = 1; + l_groupPoint[l_cursolID] = i; + + dScnMenu_c::m_error_flags &= (u8)~ERR_MAP; + if (data->room_no == dScnMenu_c::cursolRoomNo) { + dScnMenu_c::m_error_flags &= (u8)~ERR_ROOM; + if (data->layer == dScnMenu_c::cursolLayer) { + dScnMenu_c::m_error_flags &= (u8)~ERR_LAYER; + if (data->point == dScnMenu_c::cursolPoint) { + dScnMenu_c::m_error_flags &= (u8)~ERR_POINT; + return rt; + } + + if (dScnMenu_c::cursolPoint == -1) { + return rt; + } + } else if (dScnMenu_c::cursolLayer == -1) { + return rt; + } + } + } + data++; + } + index--; + } + + dScnMenu_c::cursolStageName[0] = 0; + } + + return rt; +} + +// NONMATCHING - small regalloc +int phase_2(dScnMenu_c* i_this) { + if (!i_this->command->sync() || !i_this->fontCommand->sync()) { + return cPhs_INIT_e; + } + + i_this->info = (menu_info_class*)i_this->command->getMemAddress(); + JUT_ASSERT(3237, i_this->info != 0); + + menu_info_class* menu_info = i_this->info; + menu_info->stage_data = (menu_stage_class*)((u32)menu_info->stage_data + (u32)menu_info); + + for (int i = 0; i < menu_info->num; i++) { + menu_info->stage_data[i].data = + (menu_data_class*)((u32)menu_info->stage_data[i].data + (u32)menu_info); + } + + if (l_groupPoint == NULL) { + l_groupPoint = new s8[menu_info->num]; + JUT_ASSERT(3252, l_groupPoint != 0); + + if (mDoExt_getSafeZeldaHeapSize() >= 0) { + mDoExt_addSafeZeldaHeapSize(-(mDoExt_getZeldaHeap()->getSize(l_groupPoint) + 0x10)); + } + + for (int i = 0; i < menu_info->num; i++) { + l_groupPoint[i] = 0; + } + } + + menu_category_class* category_info; + + u32 category_offset = 8; + category_offset += menu_info->num * sizeof(menu_stage_class); + + for (int i = 0; i < menu_info->num; i++) { + category_offset += menu_info->stage_data[i].field_0x41 * sizeof(menu_data_class); + } + + i_this->category_info = (menu_category_class*)((u32)i_this->command->getMemAddress() + category_offset); + JUT_ASSERT(3282, i_this->category_info != 0); + + category_info = i_this->category_info; + category_info->data = (menu_category_data_class*)((u32)category_info->data + (u32)menu_info); + i_this->current_category = menu_info->stage_data[l_cursolID].field_0x43; + + delete i_this->command; + + u8 sp8 = search(menu_info); + + i_this->fontRes = (ResFONT*)i_this->fontCommand->getMemAddress(); + delete i_this->fontCommand; + + if (i_this->fontRes != NULL) { + i_this->font = new myFontClass(i_this->fontRes, NULL); + if (i_this->font != NULL) { + JUTDbPrint::getManager()->changeFont(i_this->font); + } + } + + mDoGph_gInf_c::setTickRate(OS_TIMER_CLOCK / 60); + mDoGph_gInf_c::setBackColor(g_clearColor); + fapGmHIO_onMenu(); + i_this->current_category = menu_info->stage_data[l_cursolID].field_0x43; + + dComIfGs_onEventBit(dSv_event_flag_c::M_077); + dComIfGs_onEventBit(dSv_event_flag_c::M_068); + dComIfGs_onEventBit((u16)dSv_event_flag_c::saveBitLabels[550]); + return cPhs_COMPLEATE_e; +} + +int dScnMenu_Create(scene_class* i_this) { + typedef int (*method)(void*); + static method l_method[] = { + (method)phase_1, + (method)phase_2, + }; + + dScnMenu_c* a_this = (dScnMenu_c*)i_this; + + l_languageType = dComIfGs_getPalLanguage(); + return dComLbG_PhaseHandler(&a_this->phase, l_method, a_this); +} + +void dScnMenu_setItem(int i_slotNo, u8 i_itemNo) { + dComIfGs_setItem(i_slotNo, i_itemNo); + + if (i_itemNo != fpcNm_ITEM_NONE) { + dComIfGs_onItemFirstBit(i_itemNo); + } +} + +void dScnMenu_setPlayerDebugMode() { + if (mDoCPd_c::isConnect(PAD_3) || !dScnMenu_setPlayerDebugModeDungeon()) { + if (strcmp(dComIfGp_getNextStageName(), "D_MN05") == 0) { + dScnMenu_setItem(SLOT_11, fpcNm_ITEM_EMPTY_BOTTLE); + dScnMenu_setItem(SLOT_12, fpcNm_ITEM_RED_BOTTLE); + dComIfGs_setSelectItemIndex(SELECT_ITEM_X, SLOT_11); + dComIfGs_setSelectItemIndex(SELECT_ITEM_Y, SLOT_12); + dComIfGs_setRupee(0); + dComIfGs_setMaxLife(25); + dComIfGs_setLife(20); + } else if (strcmp(dComIfGp_getNextStageName(), "D_MN54") == 0 || + strcmp(dComIfGp_getNextStageName(), "D_MN04A") == 0) + { + for (int i = 0x17; i >= 0; i--) { + dScnMenu_setItem(i, fpcNm_ITEM_NONE); + } + + for (int i = 0; i < 0x100; i++) { + dComIfGs_offItemFirstBit(i); + } + + dComIfGs_onItemFirstBit(fpcNm_ITEM_L2_KEY_PIECES1); + dComIfGs_onItemFirstBit(fpcNm_ITEM_L2_KEY_PIECES2); + dComIfGs_onItemFirstBit(fpcNm_ITEM_L2_KEY_PIECES3); + dComIfGs_onItemFirstBit(fpcNm_ITEM_LV2_BOSS_KEY); + dComIfGs_onItemFirstBit(fpcNm_ITEM_BOW); + dComIfGs_onItemFirstBit(fpcNm_ITEM_HOOKSHOT); + dComIfGs_onItemFirstBit(fpcNm_ITEM_BOOMERANG); + dComIfGs_onItemFirstBit(fpcNm_ITEM_RED_BOTTLE); + dComIfGs_onItemFirstBit(fpcNm_ITEM_OIL_BOTTLE); + dComIfGs_onItemFirstBit(fpcNm_ITEM_FAIRY); + dComIfGs_onItemFirstBit(fpcNm_ITEM_KANTERA); + dComIfGs_onItemFirstBit(fpcNm_ITEM_PACHINKO); + dComIfGs_onItemFirstBit(fpcNm_ITEM_HVY_BOOTS); + + dScnMenu_setItem(SLOT_4, fpcNm_ITEM_BOW); + dScnMenu_setItem(SLOT_9, fpcNm_ITEM_HOOKSHOT); + dScnMenu_setItem(SLOT_0, fpcNm_ITEM_BOOMERANG); + dScnMenu_setItem(SLOT_13, fpcNm_ITEM_FAIRY); + dScnMenu_setItem(SLOT_12, fpcNm_ITEM_OIL_BOTTLE); + dScnMenu_setItem(SLOT_11, fpcNm_ITEM_RED_BOTTLE); + dScnMenu_setItem(SLOT_1, fpcNm_ITEM_KANTERA); + dScnMenu_setItem(SLOT_23, fpcNm_ITEM_PACHINKO); + dScnMenu_setItem(SLOT_3, fpcNm_ITEM_HVY_BOOTS); + + dComIfGs_setMixItemIndex(SELECT_ITEM_X, 0xFF); + dComIfGs_setMixItemIndex(SELECT_ITEM_Y, 0xFF); + dComIfGs_setMixItemIndex(2, 0xFF); + dComIfGs_setMixItemIndex(3, 0xFF); + dComIfGs_setSelectItemIndex(2, SLOT_4); + dComIfGs_setSelectItemIndex(3, 0xFF); + dComIfGs_setSelectItemIndex(SELECT_ITEM_Y, SLOT_0); + dComIfGs_setSelectItemIndex(SELECT_ITEM_X, SLOT_3); + + dComIfGs_setRupee(0); + dComIfGs_setMaxLife(25); + dComIfGs_setLife(20); + dComIfGs_setArrowNum(60); + dComIfGs_setArrowMax(60); + dComIfGs_setMaxOil(21600); + dComIfGs_setOil(21600); + dComIfGp_setMaxOxygen(600); + dComIfGp_setOxygen(600); + g_dComIfG_gameInfo.info.getSavedata().getSave(17).getBit().onDungeonItemBossKey(); + dComIfGs_onEventBit(dSv_event_flag_c::M_067); + + if (strcmp(dComIfGp_getNextStageName(), "D_MN54") == 0) { + dMeter2Info_onTempBit(0); + } + } else if (strcmp(dComIfGp_getNextStageName(), "R_SP107") == 0) { + dMeter2Info_setSword(fpcNm_ITEM_NONE, false); + dMeter2Info_setShield(fpcNm_ITEM_NONE, false); + } else if (dMeter2Info_isNextStage("F_SP102", 0, 0, 0) == 0) { + if (strcmp(dComIfGp_getNextStageName(), "D_MN01A") == 0) { + dScnMenu_setItem(SLOT_9, fpcNm_ITEM_HOOKSHOT); + dScnMenu_setItem(SLOT_3, fpcNm_ITEM_HVY_BOOTS); + dComIfGs_setSelectItemIndex(SELECT_ITEM_X, SLOT_9); + dComIfGs_setSelectItemIndex(SELECT_ITEM_Y, SLOT_3); + dMeter2Info_setCloth(fpcNm_ITEM_WEAR_ZORA, false); + } + } + } +} + +void dScnMenu_setPlayerItemReset() { + for (int i = 23; i >= 0; i--) { + dScnMenu_setItem(i, fpcNm_ITEM_NONE); + } + + for (int i = 0; i < 0x100; i++) { + dComIfGs_offItemFirstBit(i); + } + + dComIfGs_onItemFirstBit(fpcNm_ITEM_SWORD); + dComIfGs_onItemFirstBit(fpcNm_ITEM_MASTER_SWORD); + dComIfGs_onItemFirstBit(fpcNm_ITEM_WOOD_STICK); + dComIfGs_offItemFirstBit(fpcNm_ITEM_LIGHT_SWORD); + dComIfGs_onItemFirstBit(fpcNm_ITEM_SHIELD); + dComIfGs_onItemFirstBit(fpcNm_ITEM_HYLIA_SHIELD); + dComIfGs_onItemFirstBit(fpcNm_ITEM_WEAR_CASUAL); + dComIfGs_onItemFirstBit(fpcNm_ITEM_WEAR_KOKIRI); + dComIfGs_onItemFirstBit(fpcNm_ITEM_ARMOR); + dComIfGs_onItemFirstBit(fpcNm_ITEM_WEAR_ZORA); + + dComIfGs_setMixItemIndex(SELECT_ITEM_X, 0xFF); + dComIfGs_setSelectItemIndex(SELECT_ITEM_X, 0xFF); + dComIfGs_setMixItemIndex(SELECT_ITEM_Y, 0xFF); + dComIfGs_setSelectItemIndex(SELECT_ITEM_Y, 0xFF); + dComIfGs_setMixItemIndex(2, 0xFF); + dComIfGs_setSelectItemIndex(2, 0xFF); + dComIfGs_setMixItemIndex(3, 0xFF); + dComIfGs_setSelectItemIndex(3, 0xFF); +} + +bool dScnMenu_setPlayerDebugModeDungeon() { + if (strcmp(dComIfGp_getNextStageName(), "D_MN05") == 0) { + dScnMenu_setPlayerItemReset(); + dScnMenu_setItem(SLOT_1, fpcNm_ITEM_KANTERA); + dScnMenu_setItem(SLOT_23, fpcNm_ITEM_PACHINKO); + dScnMenu_setItem(SLOT_11, fpcNm_ITEM_OIL_BOTTLE); + dScnMenu_setItem(SLOT_12, fpcNm_ITEM_RED_BOTTLE); + dComIfGs_setSelectItemIndex(SELECT_ITEM_X, SLOT_11); + dComIfGs_setSelectItemIndex(SELECT_ITEM_Y, SLOT_12); + dComIfGs_setMaxLife(20); + dComIfGs_setLife(16); + dComIfGs_setRupee(0); + dComIfGs_setArrowNum(0); + } else if (strcmp(dComIfGp_getNextStageName(), "D_MN04") == 0 || + strcmp(dComIfGp_getNextStageName(), "D_MN04A") == 0) + { + dScnMenu_setPlayerItemReset(); + dScnMenu_setItem(SLOT_0, fpcNm_ITEM_BOOMERANG); + dScnMenu_setItem(SLOT_1, fpcNm_ITEM_KANTERA); + dScnMenu_setItem(SLOT_23, fpcNm_ITEM_PACHINKO); + dScnMenu_setItem(SLOT_3, fpcNm_ITEM_HVY_BOOTS); + dScnMenu_setItem(SLOT_4, fpcNm_ITEM_BOW); + dScnMenu_setItem(SLOT_15, fpcNm_ITEM_NORMAL_BOMB); + dScnMenu_setItem(SLOT_11, fpcNm_ITEM_OIL_BOTTLE); + dScnMenu_setItem(SLOT_12, fpcNm_ITEM_RED_BOTTLE); + dComIfGs_setSelectItemIndex(SELECT_ITEM_X, 0); + dComIfGs_setSelectItemIndex(SELECT_ITEM_Y, 3); + dComIfGs_setMaxLife(25); + dComIfGs_setLife(20); + dComIfGs_setRupee(0); + dComIfGs_setArrowNum(30); + dComIfGs_setArrowMax(30); + dComIfGs_setBombNum(0, 10); + } else if (strcmp(dComIfGp_getNextStageName(), "D_MN01") == 0 || + strcmp(dComIfGp_getNextStageName(), "D_MN01A") == 0 || + strcmp(dComIfGp_getNextStageName(), "D_MN01B") == 0) + { + dScnMenu_setPlayerItemReset(); + dScnMenu_setItem(SLOT_0, fpcNm_ITEM_BOOMERANG); + dScnMenu_setItem(SLOT_1, fpcNm_ITEM_KANTERA); + dScnMenu_setItem(SLOT_23, fpcNm_ITEM_PACHINKO); + dScnMenu_setItem(SLOT_3, fpcNm_ITEM_HVY_BOOTS); + dScnMenu_setItem(SLOT_4, fpcNm_ITEM_BOW); + dScnMenu_setItem(SLOT_15, fpcNm_ITEM_NORMAL_BOMB); + dScnMenu_setItem(SLOT_16, fpcNm_ITEM_WATER_BOMB); + dScnMenu_setItem(SLOT_11, fpcNm_ITEM_OIL_BOTTLE); + dScnMenu_setItem(SLOT_12, fpcNm_ITEM_RED_BOTTLE); + dComIfGs_setSelectItemIndex(SELECT_ITEM_X, SLOT_16); + dComIfGs_setSelectItemIndex(SELECT_ITEM_Y, SLOT_3); + dComIfGs_setMaxLife(30); + dComIfGs_setLife(24); + dComIfGs_setRupee(0); + dComIfGs_setArrowNum(30); + dComIfGs_setArrowMax(30); + dComIfGs_setBombNum(0, 10); + dComIfGs_setBombNum(1, 15); + } else if (strcmp(dComIfGp_getNextStageName(), "D_MN10") == 0 || + strcmp(dComIfGp_getNextStageName(), "D_MN10A") == 0 || + strcmp(dComIfGp_getNextStageName(), "D_MN10B") == 0) + { + dScnMenu_setPlayerItemReset(); + dScnMenu_setItem(SLOT_0, fpcNm_ITEM_BOOMERANG); + dScnMenu_setItem(SLOT_1, fpcNm_ITEM_KANTERA); + dScnMenu_setItem(SLOT_23, fpcNm_ITEM_PACHINKO); + dScnMenu_setItem(SLOT_3, fpcNm_ITEM_HVY_BOOTS); + dScnMenu_setItem(SLOT_4, fpcNm_ITEM_BOW); + dScnMenu_setItem(SLOT_9, fpcNm_ITEM_HOOKSHOT); + dScnMenu_setItem(SLOT_15, fpcNm_ITEM_NORMAL_BOMB); + dScnMenu_setItem(SLOT_16, fpcNm_ITEM_WATER_BOMB); + dScnMenu_setItem(SLOT_11, fpcNm_ITEM_GREEN_BOTTLE); + dScnMenu_setItem(SLOT_12, fpcNm_ITEM_RED_BOTTLE); + dComIfGs_setSelectItemIndex(SELECT_ITEM_X, SLOT_9); + dComIfGs_setSelectItemIndex(SELECT_ITEM_Y, SLOT_4); + dComIfGs_setMaxLife(40); + dComIfGs_setLife(32); + dComIfGs_setRupee(0); + dComIfGs_setArrowNum(60); + dComIfGs_setArrowMax(60); + dComIfGs_setBombNum(0, 20); + dComIfGs_setBombNum(1, 15); + } else if (strcmp(dComIfGp_getNextStageName(), "D_MN11") == 0 || + strcmp(dComIfGp_getNextStageName(), "D_MN11A") == 0 || + strcmp(dComIfGp_getNextStageName(), "D_MN11B") == 0) + { + dScnMenu_setPlayerItemReset(); + dScnMenu_setItem(SLOT_0, fpcNm_ITEM_BOOMERANG); + dScnMenu_setItem(SLOT_1, fpcNm_ITEM_KANTERA); + dScnMenu_setItem(SLOT_23, fpcNm_ITEM_PACHINKO); + dScnMenu_setItem(SLOT_2, fpcNm_ITEM_SPINNER); + dScnMenu_setItem(SLOT_3, fpcNm_ITEM_HVY_BOOTS); + dScnMenu_setItem(SLOT_4, fpcNm_ITEM_BOW); + dScnMenu_setItem(SLOT_9, fpcNm_ITEM_HOOKSHOT); + dScnMenu_setItem(SLOT_15, fpcNm_ITEM_NORMAL_BOMB); + dScnMenu_setItem(SLOT_16, fpcNm_ITEM_WATER_BOMB); + dScnMenu_setItem(SLOT_11, fpcNm_ITEM_GREEN_BOTTLE); + dScnMenu_setItem(SLOT_12, fpcNm_ITEM_RED_BOTTLE); + dComIfGs_setSelectItemIndex(SELECT_ITEM_X, SLOT_2); + dComIfGs_setSelectItemIndex(SELECT_ITEM_Y, SLOT_12); + dComIfGs_setMaxLife(45); + dComIfGs_setLife(36); + dComIfGs_setRupee(0); + dComIfGs_setArrowNum(60); + dComIfGs_setArrowMax(60); + dComIfGs_setBombNum(0, 20); + dComIfGs_setBombNum(1, 15); + } else if (strcmp(dComIfGp_getNextStageName(), "D_MN06") == 0 || + strcmp(dComIfGp_getNextStageName(), "T_MN06") == 0) + { + dScnMenu_setPlayerItemReset(); + dScnMenu_setItem(SLOT_0, fpcNm_ITEM_BOOMERANG); + dScnMenu_setItem(SLOT_1, fpcNm_ITEM_KANTERA); + dScnMenu_setItem(SLOT_23, fpcNm_ITEM_PACHINKO); + dScnMenu_setItem(SLOT_2, fpcNm_ITEM_SPINNER); + dScnMenu_setItem(SLOT_3, fpcNm_ITEM_HVY_BOOTS); + dScnMenu_setItem(SLOT_4, fpcNm_ITEM_BOW); + dScnMenu_setItem(SLOT_9, fpcNm_ITEM_HOOKSHOT); + dScnMenu_setItem(SLOT_6, fpcNm_ITEM_IRONBALL); + dScnMenu_setItem(SLOT_15, fpcNm_ITEM_NORMAL_BOMB); + dScnMenu_setItem(SLOT_16, fpcNm_ITEM_WATER_BOMB); + dScnMenu_setItem(SLOT_11, fpcNm_ITEM_FAIRY); + dScnMenu_setItem(SLOT_12, fpcNm_ITEM_RED_BOTTLE); + dComIfGs_setSelectItemIndex(SELECT_ITEM_X, SLOT_6); + dComIfGs_setSelectItemIndex(SELECT_ITEM_Y, SLOT_12); + dComIfGs_setMaxLife(50); + dComIfGs_setLife(40); + dComIfGs_setRupee(0); + dComIfGs_setArrowNum(60); + dComIfGs_setArrowMax(60); + dComIfGs_setBombNum(0, 20); + dComIfGs_setBombNum(1, 15); + } else if (strcmp(dComIfGp_getNextStageName(), "D_MN07") == 0 || + strcmp(dComIfGp_getNextStageName(), "T_MN07") == 0) + { + dScnMenu_setPlayerItemReset(); + dScnMenu_setItem(SLOT_0, fpcNm_ITEM_BOOMERANG); + dScnMenu_setItem(SLOT_1, fpcNm_ITEM_KANTERA); + dScnMenu_setItem(SLOT_23, fpcNm_ITEM_PACHINKO); + dScnMenu_setItem(SLOT_2, fpcNm_ITEM_SPINNER); + dScnMenu_setItem(SLOT_3, fpcNm_ITEM_HVY_BOOTS); + dScnMenu_setItem(SLOT_4, fpcNm_ITEM_BOW); + dScnMenu_setItem(SLOT_9, fpcNm_ITEM_HOOKSHOT); + dScnMenu_setItem(SLOT_6, fpcNm_ITEM_IRONBALL); + dScnMenu_setItem(SLOT_8, fpcNm_ITEM_COPY_ROD); + dScnMenu_setItem(SLOT_15, fpcNm_ITEM_NORMAL_BOMB); + dScnMenu_setItem(SLOT_16, fpcNm_ITEM_WATER_BOMB); + dScnMenu_setItem(SLOT_11, fpcNm_ITEM_GREEN_BOTTLE); + dScnMenu_setItem(SLOT_12, fpcNm_ITEM_RED_BOTTLE); + dComIfGs_setSelectItemIndex(SELECT_ITEM_X, SLOT_8); + dComIfGs_setSelectItemIndex(SELECT_ITEM_Y, SLOT_12); + dComIfGs_setMaxLife(55); + dComIfGs_setLife(44); + dComIfGs_setRupee(0); + dComIfGs_setArrowNum(60); + dComIfGs_setArrowMax(60); + dComIfGs_setBombNum(0, 20); + dComIfGs_setBombNum(1, 15); + } else if (strcmp(dComIfGp_getNextStageName(), "D_MN08") == 0) { + dScnMenu_setPlayerItemReset(); + dScnMenu_setItem(SLOT_0, fpcNm_ITEM_BOOMERANG); + dScnMenu_setItem(SLOT_1, fpcNm_ITEM_KANTERA); + dScnMenu_setItem(SLOT_23, fpcNm_ITEM_PACHINKO); + dScnMenu_setItem(SLOT_2, fpcNm_ITEM_SPINNER); + dScnMenu_setItem(SLOT_3, fpcNm_ITEM_HVY_BOOTS); + dScnMenu_setItem(SLOT_4, fpcNm_ITEM_BOW); + dScnMenu_setItem(SLOT_9, fpcNm_ITEM_HOOKSHOT); + dScnMenu_setItem(SLOT_6, fpcNm_ITEM_IRONBALL); + dScnMenu_setItem(SLOT_8, fpcNm_ITEM_COPY_ROD); + dScnMenu_setItem(SLOT_10, fpcNm_ITEM_W_HOOKSHOT); + dScnMenu_setItem(SLOT_15, fpcNm_ITEM_NORMAL_BOMB); + dScnMenu_setItem(SLOT_16, fpcNm_ITEM_WATER_BOMB); + dScnMenu_setItem(SLOT_11, fpcNm_ITEM_BLUE_BOTTLE); + dScnMenu_setItem(SLOT_12, fpcNm_ITEM_RED_BOTTLE); + dComIfGs_setSelectItemIndex(SELECT_ITEM_X, SLOT_10); + dComIfGs_setSelectItemIndex(SELECT_ITEM_Y, SLOT_11); + dComIfGs_setMaxLife(65); + dComIfGs_setLife(52); + dComIfGs_setRupee(0); + dComIfGs_setArrowNum(60); + dComIfGs_setArrowMax(60); + dComIfGs_setBombNum(0, 30); + dComIfGs_setBombNum(1, 15); + } else if (strcmp(dComIfGp_getNextStageName(), "D_MN09") == 0) { + dScnMenu_setPlayerItemReset(); + dScnMenu_setItem(SLOT_0, fpcNm_ITEM_BOOMERANG); + dScnMenu_setItem(SLOT_1, fpcNm_ITEM_KANTERA); + dScnMenu_setItem(SLOT_23, fpcNm_ITEM_PACHINKO); + dScnMenu_setItem(SLOT_2, fpcNm_ITEM_SPINNER); + dScnMenu_setItem(SLOT_3, fpcNm_ITEM_HVY_BOOTS); + dScnMenu_setItem(SLOT_4, fpcNm_ITEM_BOW); + dScnMenu_setItem(SLOT_9, fpcNm_ITEM_HOOKSHOT); + dScnMenu_setItem(SLOT_6, fpcNm_ITEM_IRONBALL); + dScnMenu_setItem(SLOT_8, fpcNm_ITEM_COPY_ROD); + dScnMenu_setItem(SLOT_10, fpcNm_ITEM_W_HOOKSHOT); + dScnMenu_setItem(SLOT_15, fpcNm_ITEM_NORMAL_BOMB); + dScnMenu_setItem(SLOT_16, fpcNm_ITEM_WATER_BOMB); + dScnMenu_setItem(SLOT_11, fpcNm_ITEM_BLUE_BOTTLE); + dScnMenu_setItem(SLOT_12, fpcNm_ITEM_RED_BOTTLE); + dComIfGs_setSelectItemIndex(SELECT_ITEM_X, SLOT_4); + dComIfGs_setSelectItemIndex(SELECT_ITEM_Y, SLOT_12); + dComIfGs_setMaxLife(75); + dComIfGs_setLife(60); + dComIfGs_setRupee(0); + dComIfGs_setArrowNum(60); + dComIfGs_setArrowMax(60); + dComIfGs_setBombNum(0, 30); + dComIfGs_setBombNum(1, 15); + } + + return 0; +} + +myFontClass::~myFontClass() {} + +f32 myFontClass::drawChar_scale(f32 param_0, f32 param_1, f32 param_2, f32 param_3, int param_4, bool param_5) { + param_2; + + if (param_4 < 0xFF) { + return field_0x70.drawChar_scale(param_0, param_1, 8.75f, param_3, param_4, param_5); + } else { + return JUTResFont::drawChar_scale(param_0, param_1, 13.5f, param_3, param_4, param_5); + } +} + +static leafdraw_method_class l_dScnMenu_Method = { + (process_method_func)dScnMenu_Create, (process_method_func)dScnMenu_Delete, + (process_method_func)dScnMenu_Execute, (process_method_func)dScnMenu_IsDelete, + (process_method_func)dScnMenu_Draw, +}; + +/* 803C3018-803C3040 -00001 0028+00 0/0 0/0 1/0 .data g_profile_MENU_SCENE */ +extern scene_process_profile_definition g_profile_MENU_SCENE = { + fpcLy_ROOT_e, // mLayerID + 1, // mListID + fpcPi_CURRENT_e, // mListPrio + PROC_MENU_SCENE, // mProcName + &g_fpcNd_Method.base, // sub_method + sizeof(dScnMenu_c), // mSize + 0, // mSizeOther + 0, // mParameters + &g_fopScn_Method.base, // sub_method + (process_method_class*)&l_dScnMenu_Method, // mpMtd +}; +#else /* 803C3018-803C3040 -00001 0028+00 0/0 0/0 1/0 .data g_profile_MENU_SCENE */ extern scene_process_profile_definition g_profile_MENU_SCENE = { fpcLy_ROOT_e, // mLayerID @@ -20,3 +1987,4 @@ extern scene_process_profile_definition g_profile_MENU_SCENE = { &g_fopScn_Method.base, // sub_method NULL, // mpMtd }; +#endif |
