mirror of https://github.com/zeldaret/tp.git
1991 lines
72 KiB
C++
1991 lines
72 KiB
C++
/**
|
||
* d_s_menu.cpp
|
||
* Debug Level Select Menu
|
||
*/
|
||
|
||
#include "d/d_s_menu.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
|
||
1, // mListID
|
||
fpcPi_CURRENT_e, // mListPrio
|
||
PROC_MENU_SCENE, // mProcName
|
||
&g_fpcNd_Method.base, // sub_method
|
||
0, // mSize
|
||
0, // mSizeOther
|
||
0, // mParameters
|
||
&g_fopScn_Method.base, // sub_method
|
||
NULL, // mpMtd
|
||
};
|
||
#endif
|