From c46a57da1e096a980da6b2e5a87a664e578d981b Mon Sep 17 00:00:00 2001 From: MelonSpeedruns Date: Sun, 12 Apr 2026 12:03:09 -0400 Subject: [PATCH 1/3] Restore Warning screen for Release Builds WIP --- src/d/d_s_logo.cpp | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/d/d_s_logo.cpp b/src/d/d_s_logo.cpp index 71b4d21de4..a08cbe910e 100644 --- a/src/d/d_s_logo.cpp +++ b/src/d/d_s_logo.cpp @@ -480,7 +480,13 @@ void dScnLogo_c::warningInDraw() { if (mTimer == 0) { mExecCommand = EXEC_WARNING_DISP; + + #if TARGET_PC && TEMP_DEBUG_TEST mTimer = 30; + #else + mTimer = 3510; + #endif + field_0x20e = 30; field_0x210 = field_0x20e; field_0x212 = 1; @@ -547,7 +553,13 @@ void dScnLogo_c::nintendoOutDraw() { if (mTimer == 0) { mExecCommand = EXEC_DOLBY_IN; + + #if TARGET_PC && TEMP_DEBUG_TEST mTimer = 30; + #else + mTimer = 90; + #endif + mDoGph_gInf_c::startFadeIn(30); } } @@ -1104,10 +1116,14 @@ int dScnLogo_c::create() { checkProgSelect(); if (field_0x20a != 0) { mExecCommand = EXEC_PROG_IN; + #if TARGET_PC && TEMP_DEBUG_TEST mTimer = 1; + #else + mTimer = 30; + #endif field_0x218 = getProgressiveMode(); } else { - #if TARGET_PC + #if TARGET_PC && TEMP_DEBUG_TEST mTimer = 0; // Possibly unnecessary but just in case mExecCommand = EXEC_DVD_WAIT; #else From b3472d3f61b06b294250a4112f15be42a6f41440 Mon Sep 17 00:00:00 2001 From: MelonSpeedruns Date: Sun, 12 Apr 2026 12:33:05 -0400 Subject: [PATCH 2/3] added skip warning screen toggle --- include/dusk/settings.h | 1 + src/d/d_s_logo.cpp | 28 ++++++++++++++++-------- src/dusk/imgui/ImGuiFirstRunPreset.cpp | 1 + src/dusk/imgui/ImGuiMenuEnhancements.cpp | 5 +++++ src/dusk/settings.cpp | 2 ++ 5 files changed, 28 insertions(+), 9 deletions(-) diff --git a/include/dusk/settings.h b/include/dusk/settings.h index 8418602251..7291f672ef 100644 --- a/include/dusk/settings.h +++ b/include/dusk/settings.h @@ -35,6 +35,7 @@ struct UserSettings { // QoL ConfigVar enableQuickTransform; ConfigVar hideTvSettingsScreen; + ConfigVar skipWarningScreen; ConfigVar biggerWallets; ConfigVar noReturnRupees; ConfigVar disableRupeeCutscenes; diff --git a/src/d/d_s_logo.cpp b/src/d/d_s_logo.cpp index a08cbe910e..5d129ad246 100644 --- a/src/d/d_s_logo.cpp +++ b/src/d/d_s_logo.cpp @@ -481,8 +481,8 @@ void dScnLogo_c::warningInDraw() { if (mTimer == 0) { mExecCommand = EXEC_WARNING_DISP; - #if TARGET_PC && TEMP_DEBUG_TEST - mTimer = 30; + #if TARGET_PC + mTimer = dusk::getSettings().game.skipWarningScreen ? 30 : 3510; #else mTimer = 3510; #endif @@ -554,8 +554,8 @@ void dScnLogo_c::nintendoOutDraw() { if (mTimer == 0) { mExecCommand = EXEC_DOLBY_IN; - #if TARGET_PC && TEMP_DEBUG_TEST - mTimer = 30; + #if TARGET_PC + mTimer = dusk::getSettings().game.skipWarningScreen ? 30 : 90; #else mTimer = 90; #endif @@ -1116,16 +1116,26 @@ int dScnLogo_c::create() { checkProgSelect(); if (field_0x20a != 0) { mExecCommand = EXEC_PROG_IN; - #if TARGET_PC && TEMP_DEBUG_TEST - mTimer = 1; + #if TARGET_PC + mTimer = dusk::getSettings().game.skipWarningScreen ? 1 : 30; #else mTimer = 30; #endif field_0x218 = getProgressiveMode(); } else { - #if TARGET_PC && TEMP_DEBUG_TEST - mTimer = 0; // Possibly unnecessary but just in case - mExecCommand = EXEC_DVD_WAIT; + #if TARGET_PC + if (dusk::getSettings().game.skipWarningScreen) { + mTimer = 0; // Possibly unnecessary but just in case + mExecCommand = EXEC_DVD_WAIT; + } else { + if (mDoRst::getWarningDispFlag()) { + mTimer = 90; + mExecCommand = EXEC_NINTENDO_IN; + } else { + mTimer = 120; + mExecCommand = EXEC_WARNING_IN; + } + } #else if (mDoRst::getWarningDispFlag()) { mTimer = 90; diff --git a/src/dusk/imgui/ImGuiFirstRunPreset.cpp b/src/dusk/imgui/ImGuiFirstRunPreset.cpp index be4866fd6a..b73eaff6e6 100644 --- a/src/dusk/imgui/ImGuiFirstRunPreset.cpp +++ b/src/dusk/imgui/ImGuiFirstRunPreset.cpp @@ -18,6 +18,7 @@ static void ApplyPresetClassic() { static void ApplyPresetHD() { auto& s = getSettings(); s.game.hideTvSettingsScreen.setValue(true); + s.game.skipWarningScreen.setValue(true); s.game.noReturnRupees.setValue(true); s.game.disableRupeeCutscenes.setValue(true); s.game.noSwordRecoil.setValue(true); diff --git a/src/dusk/imgui/ImGuiMenuEnhancements.cpp b/src/dusk/imgui/ImGuiMenuEnhancements.cpp index b505d84345..4706f20288 100644 --- a/src/dusk/imgui/ImGuiMenuEnhancements.cpp +++ b/src/dusk/imgui/ImGuiMenuEnhancements.cpp @@ -53,6 +53,11 @@ namespace dusk { ImGui::SetTooltip("Hides the TV calibration screen shown when loading a save."); } + config::ImGuiCheckbox("Skip Warning Screen", getSettings().game.skipWarningScreen); + if (ImGui::IsItemHovered()) { + ImGui::SetTooltip("Skips the warning screen shown when loading the game."); + } + config::ImGuiCheckbox("Instant Saves", getSettings().game.instantSaves); if (ImGui::IsItemHovered()) { ImGui::SetTooltip("Skip the delay when writing to the Memory Card."); diff --git a/src/dusk/settings.cpp b/src/dusk/settings.cpp index dabed72f19..4aa1c7f2e0 100644 --- a/src/dusk/settings.cpp +++ b/src/dusk/settings.cpp @@ -23,6 +23,7 @@ UserSettings g_userSettings = { // Quality of Life .enableQuickTransform {"game.enableQuickTransform", false}, .hideTvSettingsScreen {"game.hideTvSettingsScreen", false}, + .skipWarningScreen {"game.skipWarningScreen", false}, .biggerWallets {"game.biggerWallets", false}, .noReturnRupees {"game.noReturnRupees", false}, .disableRupeeCutscenes {"game.disableRupeeCutscenes", false}, @@ -91,6 +92,7 @@ void registerSettings() { // Game Register(g_userSettings.game.enableQuickTransform); Register(g_userSettings.game.hideTvSettingsScreen); + Register(g_userSettings.game.skipWarningScreen); Register(g_userSettings.game.biggerWallets); Register(g_userSettings.game.noReturnRupees); Register(g_userSettings.game.disableRupeeCutscenes); From 089661f94aa32556bf6b3f3a3a9e1adad3291d90 Mon Sep 17 00:00:00 2001 From: MelonSpeedruns Date: Sun, 12 Apr 2026 14:50:28 -0400 Subject: [PATCH 3/3] remove unused code --- src/d/d_s_logo.cpp | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/src/d/d_s_logo.cpp b/src/d/d_s_logo.cpp index 5d129ad246..f04df0fa39 100644 --- a/src/d/d_s_logo.cpp +++ b/src/d/d_s_logo.cpp @@ -480,13 +480,7 @@ void dScnLogo_c::warningInDraw() { if (mTimer == 0) { mExecCommand = EXEC_WARNING_DISP; - - #if TARGET_PC - mTimer = dusk::getSettings().game.skipWarningScreen ? 30 : 3510; - #else mTimer = 3510; - #endif - field_0x20e = 30; field_0x210 = field_0x20e; field_0x212 = 1; @@ -553,13 +547,7 @@ void dScnLogo_c::nintendoOutDraw() { if (mTimer == 0) { mExecCommand = EXEC_DOLBY_IN; - - #if TARGET_PC - mTimer = dusk::getSettings().game.skipWarningScreen ? 30 : 90; - #else mTimer = 90; - #endif - mDoGph_gInf_c::startFadeIn(30); } }