Files
dusklight/src/d/d_bright_check.cpp
T
2026-05-11 22:20:53 -07:00

217 lines
8.7 KiB
C++

/**
* d_bright_check.cpp
*
*/
#include "d/dolzel.h" // IWYU pragma: keep
#include "d/d_bright_check.h"
#include "JSystem/J2DGraph/J2DScreen.h"
#include "JSystem/J2DGraph/J2DTextBox.h"
#include "d/d_msg_string.h"
#include "dusk/livesplit.h"
#include "dusk/imgui/ImGuiConsole.hpp"
#include "dusk/speedrun.h"
#include "m_Do/m_Do_controller_pad.h"
dBrightCheck_c::dBrightCheck_c(JKRArchive* i_archive) {
mArchive = i_archive;
mBrightCheck.mMsgString = JKR_NEW dMsgString_c();
JUT_ASSERT(0, mBrightCheck.mMsgString != NULL);
screenSet();
mCompleteCheck = false;
mMode = MODE_MOVE_e;
}
dBrightCheck_c::~dBrightCheck_c() {
JKR_DELETE(mBrightCheck.Scr);
JKR_DELETE(mBrightCheck.mMsgString);
}
void dBrightCheck_c::screenSet() {
static u64 const tv_btnA[] = {
MULTI_CHAR('cont_at1'), MULTI_CHAR('cont_at2'), MULTI_CHAR('cont_at3'), MULTI_CHAR('cont_at4'), MULTI_CHAR('cont_at'),
};
static u64 const ftv_btnA[] = {
MULTI_CHAR('font_a1'), MULTI_CHAR('font_at2'), MULTI_CHAR('font_at3'), MULTI_CHAR('font_at4'), MULTI_CHAR('font_at'),
};
#if (VERSION == VERSION_GCN_JPN) || (VERSION == VERSION_WII_JPN)
static u64 const txTV[] = {
MULTI_CHAR('menu_t6s'), MULTI_CHAR('menu_t6'), MULTI_CHAR('menu_t9s'), MULTI_CHAR('menu_t9'), MULTI_CHAR('menut10s'),
MULTI_CHAR('menu_t10'), MULTI_CHAR('menu_t7s'), MULTI_CHAR('menu_t7'), MULTI_CHAR('menu_t8s'), MULTI_CHAR('menu_t8'),
};
#else
static u64 const txTV[] = {
MULTI_CHAR('menu_t61'), MULTI_CHAR('menu_t2'), MULTI_CHAR('menu_t91'), MULTI_CHAR('menu_t1'), MULTI_CHAR('menut101'),
MULTI_CHAR('menu_t01'), MULTI_CHAR('menu_t71'), MULTI_CHAR('menu_t3'), MULTI_CHAR('menu_t81'), MULTI_CHAR('menu_t4'),
};
#endif
#if (VERSION == VERSION_GCN_JPN) || (VERSION == VERSION_WII_JPN)
static u64 const txTVhide[] = {
MULTI_CHAR('fmenu_6n'), MULTI_CHAR('fmenu_9n'), MULTI_CHAR('fmenu_10'), MULTI_CHAR('fmenu_7n'), MULTI_CHAR('fmenu_8n'),
};
#else
static u64 const txTVhide[] = {
MULTI_CHAR('menu_6n'), MULTI_CHAR('menu_9n'), MULTI_CHAR('menu_10n'), MULTI_CHAR('menu_7n'), MULTI_CHAR('menu_8n'),
};
#endif
mBrightCheck.Scr = JKR_NEW J2DScreen();
JUT_ASSERT(0, mBrightCheck.Scr != NULL);
mBrightCheck.Scr->setPriority("zelda_option_check.blo", 0x1100000, mArchive);
mBrightCheck.Scr->search(MULTI_CHAR('g_abtn_n'))->hide();
#if (VERSION == VERSION_GCN_JPN) || (VERSION == VERSION_WII_JPN)
J2DTextBox* settings_text = (J2DTextBox*)mBrightCheck.Scr->search(MULTI_CHAR('t_t00'));
mBrightCheck.Scr->search(MULTI_CHAR('t_t00'))->show();
mBrightCheck.Scr->search(MULTI_CHAR('f_t00'))->hide();
#else
J2DTextBox* settings_text = (J2DTextBox*)mBrightCheck.Scr->search(MULTI_CHAR('f_t00'));
mBrightCheck.Scr->search(MULTI_CHAR('f_t00'))->show();
mBrightCheck.Scr->search(MULTI_CHAR('t_t00'))->hide();
#endif
settings_text->setFont(mDoExt_getRubyFont());
settings_text->setString(0x40, "");
mBrightCheck.mMsgString->getString(0x55C, settings_text, NULL, NULL, NULL, 0); // "TV Settings"
J2DTextBox* btna_text[5];
for (int i = 0; i < 5; i++) {
#if (VERSION == VERSION_GCN_JPN) || (VERSION == VERSION_WII_JPN)
btna_text[i] = (J2DTextBox*)mBrightCheck.Scr->search(tv_btnA[i]);
mBrightCheck.Scr->search(ftv_btnA[i])->hide();
#else
btna_text[i] = (J2DTextBox*)mBrightCheck.Scr->search(ftv_btnA[i]);
mBrightCheck.Scr->search(tv_btnA[i])->hide();
#endif
btna_text[i]->setFont(mDoExt_getMesgFont());
btna_text[i]->setString(0x40, "");
mBrightCheck.mMsgString->getString(0x564, btna_text[i], NULL, NULL, NULL, 0); // "Complete"
}
for (int i = 0; i < 5; i++) {
mBrightCheck.Scr->search(txTVhide[i])->hide();
}
for (int i = 0; i < 10; i++) {
J2DTextBox* check_text = (J2DTextBox*)mBrightCheck.Scr->search(txTV[i]);
check_text->setFont(mDoExt_getMesgFont());
#if (VERSION != VERSION_GCN_JPN) && (VERSION != VERSION_WII_JPN)
check_text->setCharSpace(0.0f);
#endif
if (i < 2) {
check_text->setString(0x100, "");
mBrightCheck.mMsgString->getString(0x558, check_text, NULL, NULL, NULL, 0);
} else if (i < 4) {
check_text->setString(0x100, "");
mBrightCheck.mMsgString->getString(0x557, check_text, NULL, NULL, NULL, 0);
} else if (i < 6) {
check_text->setString(0x100, "");
mBrightCheck.mMsgString->getString(0x559, check_text, NULL, NULL, NULL, 0);
} else if (i < 8) {
check_text->setString(0x100, "");
mBrightCheck.mMsgString->getString(0x55A, check_text, NULL, NULL, NULL, 0);
} else {
check_text->setString(0x100, "");
mBrightCheck.mMsgString->getString(0x55B, check_text, NULL, NULL, NULL, 0);
}
}
}
typedef void (dBrightCheck_c::*procFunc)();
static procFunc brightChackProc[] = {
&dBrightCheck_c::modeWait,
&dBrightCheck_c::modeMove,
};
void dBrightCheck_c::_move() {
(this->*brightChackProc[mMode])();
}
void dBrightCheck_c::modeWait() {}
void dBrightCheck_c::modeMove() {
if (mDoCPd_c::getTrigA(PAD_1) || mDoCPd_c::getTrigStart(PAD_1)) {
mDoAud_seStart(Z2SE_ENTER_GAME, NULL, 0, 0);
#ifdef TARGET_PC
dusk::speedrun::start();
if (dusk::getSettings().game.speedrunMode && !dusk::getSettings().game.hideTvSettingsScreen) {
// start a new run if a run isn't already in progress
if (!dusk::m_speedrunInfo.m_isRunStarted) {
dusk::resetForSpeedrunMode();
dusk::m_speedrunInfo.startRun();
}
}
#endif
mCompleteCheck = true;
mMode = MODE_WAIT_e;
}
}
#if TARGET_PC
void dBrightCheck_c::brightCheckWide() {
// Main Canvas
mBrightCheck.Scr->scale(mDoGph_gInf_c::hudAspectScaleUp, 1.0f);
mBrightCheck.Scr->translate(mDoGph_gInf_c::getSafeMinXF(), 0.0f);
// Right Square
mBrightCheck.Scr->search(MULTI_CHAR('fuchi_1'))->scale(mDoGph_gInf_c::hudAspectScaleDown, 1.0f);
mBrightCheck.Scr->search(MULTI_CHAR('big_squa'))->scale(mDoGph_gInf_c::hudAspectScaleDown, 1.0f);
// Middle Square
mBrightCheck.Scr->search(MULTI_CHAR('fuchi_3'))->scale(mDoGph_gInf_c::hudAspectScaleDown, 1.0f);
mBrightCheck.Scr->search(MULTI_CHAR('big_squ1'))->scale(mDoGph_gInf_c::hudAspectScaleDown, 1.0f);
// Left Square
mBrightCheck.Scr->search(MULTI_CHAR('fuchi_4'))->scale(mDoGph_gInf_c::hudAspectScaleDown, 1.0f);
mBrightCheck.Scr->search(MULTI_CHAR('big_squ2'))->scale(mDoGph_gInf_c::hudAspectScaleDown, 1.0f);
// Gray Squares
mBrightCheck.Scr->search(MULTI_CHAR('gray_n'))->scale(mDoGph_gInf_c::hudAspectScaleDown, 1.0f);
mBrightCheck.Scr->search(MULTI_CHAR('fuchi_2'))->scale(mDoGph_gInf_c::hudAspectScaleDown, 1.0f);
// Confirm A Button
mBrightCheck.Scr->search(MULTI_CHAR('abtn_n'))->scale(mDoGph_gInf_c::hudAspectScaleDown, 1.0f);
mBrightCheck.Scr->search(MULTI_CHAR('gcabtn_n'))->scale(mDoGph_gInf_c::hudAspectScaleDown, 1.0f);
// Text
mBrightCheck.Scr->search(MULTI_CHAR('menu_6n'))->scale(mDoGph_gInf_c::hudAspectScaleDown, 1.0f);
mBrightCheck.Scr->search(MULTI_CHAR('menu_9n'))->scale(mDoGph_gInf_c::hudAspectScaleDown, 1.0f);
mBrightCheck.Scr->search(MULTI_CHAR('menu_10n'))->scale(mDoGph_gInf_c::hudAspectScaleDown, 1.0f);
mBrightCheck.Scr->search(MULTI_CHAR('menu_7n'))->scale(mDoGph_gInf_c::hudAspectScaleDown, 1.0f);
mBrightCheck.Scr->search(MULTI_CHAR('menu_8n'))->scale(mDoGph_gInf_c::hudAspectScaleDown, 1.0f);
mBrightCheck.Scr->search(MULTI_CHAR('fmenu_8n'))->scale(mDoGph_gInf_c::hudAspectScaleDown, 1.0f);
mBrightCheck.Scr->search(MULTI_CHAR('fmenu_7n'))->scale(mDoGph_gInf_c::hudAspectScaleDown, 1.0f);
mBrightCheck.Scr->search(MULTI_CHAR('fmenu_10'))->scale(mDoGph_gInf_c::hudAspectScaleDown, 1.0f);
mBrightCheck.Scr->search(MULTI_CHAR('fmenu_6n'))->scale(mDoGph_gInf_c::hudAspectScaleDown, 1.0f);
mBrightCheck.Scr->search(MULTI_CHAR('fmenu_9n'))->scale(mDoGph_gInf_c::hudAspectScaleDown, 1.0f);
mBrightCheck.Scr->search(MULTI_CHAR('t_t00'))->scale(mDoGph_gInf_c::hudAspectScaleDown, 1.0f);
mBrightCheck.Scr->search(MULTI_CHAR('f_t00'))->scale(mDoGph_gInf_c::hudAspectScaleDown, 1.0f);
// Spirals
mBrightCheck.Scr->search(MULTI_CHAR('t_mo_l_n'))->scale(mDoGph_gInf_c::hudAspectScaleDown, 1.0f);
mBrightCheck.Scr->search(MULTI_CHAR('t_mo_r_n'))->scale(mDoGph_gInf_c::hudAspectScaleDown, 1.0f);
}
#endif
void dBrightCheck_c::_draw() {
#if TARGET_PC
brightCheckWide();
#endif
dComIfGd_set2DOpa(&mBrightCheck);
}
void dDlst_BrightCheck_c::draw() {
J2DGrafContext* graf_ctx = dComIfGp_getCurrentGrafPort();
Scr->draw(0.0f, 0.0f, graf_ctx);
}