From ce559168454342e78198c5be6dd3d18e36b47fc8 Mon Sep 17 00:00:00 2001 From: Irastris Date: Sat, 2 May 2026 17:01:30 -0400 Subject: [PATCH] Add Autosave to RmlUi, remove ImGui gameplay menu, formatting consistency --- src/dusk/imgui/ImGuiMenuGame.cpp | 164 ------------------------------- src/dusk/imgui/ImGuiMenuGame.hpp | 1 - src/dusk/ui/settings.cpp | 32 +++--- 3 files changed, 19 insertions(+), 178 deletions(-) diff --git a/src/dusk/imgui/ImGuiMenuGame.cpp b/src/dusk/imgui/ImGuiMenuGame.cpp index b22b1aaffa..f45b6d3ac8 100644 --- a/src/dusk/imgui/ImGuiMenuGame.cpp +++ b/src/dusk/imgui/ImGuiMenuGame.cpp @@ -3,17 +3,10 @@ #include "ImGuiEngine.hpp" #include "ImGuiConsole.hpp" -#include "ImGuiMenuGame.hpp" #include "ImGuiConfig.hpp" -#include "JSystem/JUtility/JUTGamePad.h" -#include "dusk/audio/DuskAudioSystem.h" -#include "dusk/audio/DuskDsp.hpp" #include "dusk/main.h" #include "dusk/hotkeys.h" -#include "dusk/settings.h" -#include "dusk/livesplit.h" -#include "m_Do/m_Do_controller_pad.h" #include "m_Do/m_Do_main.h" #include @@ -29,7 +22,6 @@ namespace dusk { void ImGuiMenuGame::draw() { if (ImGui::BeginMenu("Settings")) { - drawGameplayMenu(); drawInputMenu(); drawInterfaceMenu(); @@ -47,162 +39,6 @@ namespace dusk { } } - void ImGuiMenuGame::drawGameplayMenu() { - if (ImGui::BeginMenu("Gameplay")) { - ImGui::SeparatorText("General"); - - config::ImGuiCheckbox("Mirror Mode", getSettings().game.enableMirrorMode); - if (ImGui::IsItemHovered()) { - ImGui::SetTooltip("Mirrors the world horizontally, matching the Wii version of the game."); - } - - config::ImGuiCheckbox("Disable Main HUD", getSettings().game.disableMainHUD); - if (ImGui::IsItemHovered()) { - ImGui::SetTooltip("Disables the main HUD of the game.\n" - "Useful for recording or a more immersive experience!"); - } - - config::ImGuiCheckbox("Restore Wii 1.0 Glitches", getSettings().game.restoreWiiGlitches); - if (ImGui::IsItemHovered()) { - ImGui::SetTooltip("Restores patched glitches from Wii USA 1.0,\n" - "the first released version."); - } - - config::ImGuiCheckbox("Enable Rotating Link Doll", getSettings().game.enableLinkDollRotation); - if (ImGui::IsItemHovered()) { - ImGui::SetTooltip("Enables rotating Link in the collection menu with the C-Stick"); - } - - ImGui::SeparatorText("Difficulty"); - - ImGui::BeginDisabled(getSettings().game.speedrunMode); - config::ImGuiSliderInt("Damage Multiplier", getSettings().game.damageMultiplier, 1, 8, "x%d"); - - config::ImGuiCheckbox("Instant Death", getSettings().game.instantDeath); - if (ImGui::IsItemHovered()) { - ImGui::SetTooltip("Any hit will instantly kill you."); - } - - config::ImGuiCheckbox("No Heart Drops", getSettings().game.noHeartDrops); - if (ImGui::IsItemHovered()) { - ImGui::SetTooltip("Hearts will never drop from enemies,\n" - "pots and various other places."); - } - ImGui::EndDisabled(); - - ImGui::SeparatorText("Quality of Life"); - - config::ImGuiCheckbox("Bigger Wallets", getSettings().game.biggerWallets); - if (ImGui::IsItemHovered()) { - ImGui::SetTooltip("Wallet sizes are like in the HD version. (500, 1000, 2000)"); - } - - config::ImGuiCheckbox("Disable Rupee Cutscenes", getSettings().game.disableRupeeCutscenes); - if (ImGui::IsItemHovered()) { - ImGui::SetTooltip("Rupees won't play cutscenes after you've collected them the first time."); - } - - config::ImGuiCheckbox("Faster Climbing", getSettings().game.fastClimbing); - if (ImGui::IsItemHovered()) { - ImGui::SetTooltip("Quicker climbing on ladders and vines like the HD version."); - } - - config::ImGuiCheckbox("Faster Tears of Light", getSettings().game.fastTears); - if (ImGui::IsItemHovered()) { - ImGui::SetTooltip("Tears of Light dropped by Shadow Insects pop out faster like the HD version."); - } - - config::ImGuiCheckbox("Autosave", getSettings().game.autoSave); - const bool autoSaveHovered = ImGui::IsItemHovered(); - ImGui::SameLine(); - ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(1.0f, 0.72f, 0.2f, 1.0f)); - ImGui::TextUnformatted("[EXPERIMENTAL]"); - ImGui::PopStyleColor(); - if (autoSaveHovered || ImGui::IsItemHovered()) { - ImGui::SetTooltip("Autosaves the game when going to a new area,\n" - "opening a dungeon door, or getting a new item."); - } - - config::ImGuiCheckbox("Instant Saves", getSettings().game.instantSaves); - if (ImGui::IsItemHovered()) { - ImGui::SetTooltip("Skip the delay when writing to the Memory Card."); - } - - config::ImGuiCheckbox("Hold B for Instant Text", getSettings().game.instantText); - if (ImGui::IsItemHovered()) { - ImGui::SetTooltip("Make text scroll immediately by holding B."); - } - - config::ImGuiCheckbox("No Climbing Miss Animation", getSettings().game.noMissClimbing); - if (ImGui::IsItemHovered()) { - ImGui::SetTooltip("Prevents Link from playing a struggle animation\n" - "when grabbing ledges or climbing on vines."); - } - - config::ImGuiCheckbox("No Rupee Returns", getSettings().game.noReturnRupees); - if (ImGui::IsItemHovered()) { - ImGui::SetTooltip("Always collect Rupees even if your Wallet is too full."); - } - - config::ImGuiCheckbox("No Sword Recoil", getSettings().game.noSwordRecoil); - if (ImGui::IsItemHovered()) { - ImGui::SetTooltip("Link won't recoil when his sword hits walls."); - } - - config::ImGuiCheckbox("No 2nd Fish for Cat", getSettings().game.no2ndFishForCat); - if (ImGui::IsItemHovered()) { - ImGui::SetTooltip("Only need to fish once for Sera's cat to return."); - } - - config::ImGuiCheckbox("Skip TV Settings Screen", getSettings().game.hideTvSettingsScreen); - if (ImGui::IsItemHovered()) { - ImGui::SetTooltip("Skip the TV calibration screen shown when loading a save."); - } - - config::ImGuiCheckbox("Skip Warning Screen", getSettings().game.skipWarningScreen); - if (ImGui::IsItemHovered()) { - ImGui::SetTooltip("Skip the warning screen shown when starting the game."); - } - - config::ImGuiCheckbox("Sun's Song (R+X)", getSettings().game.sunsSong); - if (ImGui::IsItemHovered()) { - ImGui::SetTooltip("Allows Wolf Link to howl and change the time of day."); - } - - config::ImGuiCheckbox("Quick Transform (R+Y)", getSettings().game.enableQuickTransform); - if (ImGui::IsItemHovered()) { - ImGui::SetTooltip("Transform instantly by pressing R and Y simultaneously."); - } - - ImGui::SeparatorText("Speedrunning"); - if (config::ImGuiCheckbox("Speedrun Mode", getSettings().game.speedrunMode)) { - resetForSpeedrunMode(); - } - if (ImGui::IsItemHovered()) { - ImGui::SetTooltip("Enables Speedrunning options, while restricting certain gameplay modifiers."); - } - - ImGui::BeginDisabled(!getSettings().game.speedrunMode); - bool prevLiveSplit = getSettings().game.liveSplitEnabled; - config::ImGuiCheckbox("LiveSplit Connection", getSettings().game.liveSplitEnabled); - if (ImGui::IsItemHovered()) { - ImGui::SetTooltip("Connect to LiveSplit server on localhost:16834."); - } - ImGui::EndDisabled(); - - if ((bool)getSettings().game.liveSplitEnabled != prevLiveSplit) { - if (getSettings().game.liveSplitEnabled) { - dusk::speedrun::connectLiveSplit(); - } else { - dusk::speedrun::disconnectLiveSplit(); - DuskToast("LiveSplit disconnected", 3.f); - } - } - - ImGui::EndMenu(); - } - } - void ImGuiMenuGame::drawInputMenu() { if (ImGui::BeginMenu("Input")) { ImGui::SeparatorText("Controller"); diff --git a/src/dusk/imgui/ImGuiMenuGame.hpp b/src/dusk/imgui/ImGuiMenuGame.hpp index cf942b2bbb..81a7714109 100644 --- a/src/dusk/imgui/ImGuiMenuGame.hpp +++ b/src/dusk/imgui/ImGuiMenuGame.hpp @@ -56,7 +56,6 @@ namespace dusk { private: void drawInputMenu(); - void drawGameplayMenu(); void drawInterfaceMenu(); struct { diff --git a/src/dusk/ui/settings.cpp b/src/dusk/ui/settings.cpp index 5af598ffcd..acf50b26e4 100644 --- a/src/dusk/ui/settings.cpp +++ b/src/dusk/ui/settings.cpp @@ -207,21 +207,24 @@ SettingsWindow::SettingsWindow() { }; leftPane.add_section("Resources"); - addCheat("Infinite Hearts", getSettings().game.infiniteHearts, "Keeps your health full."); - addCheat( - "Infinite Arrows", getSettings().game.infiniteArrows, "Keeps your arrow count full."); - addCheat("Infinite Bombs", getSettings().game.infiniteBombs, "Keeps all bomb bags full."); - addCheat("Infinite Oil", getSettings().game.infiniteOil, "Keeps your lantern oil full."); + addCheat("Infinite Hearts", getSettings().game.infiniteHearts, + "Keeps your health full."); + addCheat("Infinite Arrows", getSettings().game.infiniteArrows, + "Keeps your arrow count full."); + addCheat("Infinite Bombs", getSettings().game.infiniteBombs, + "Keeps all bomb bags full."); + addCheat("Infinite Oil", getSettings().game.infiniteOil, + "Keeps your lantern oil full."); addCheat("Infinite Oxygen", getSettings().game.infiniteOxygen, "Keeps your underwater oxygen meter full."); - addCheat( - "Infinite Rupees", getSettings().game.infiniteRupees, "Keeps your rupee count full."); + addCheat("Infinite Rupees", getSettings().game.infiniteRupees, + "Keeps your rupee count full."); addCheat("No Item Timer", getSettings().game.enableIndefiniteItemDrops, "Item drops such as rupees and hearts will never disappear after they drop."); leftPane.add_section("Abilities"); - addCheat( - "Moon Jump (R+A)", getSettings().game.moonJump, "Hold R and A to rise into the air."); + addCheat("Moon Jump (R+A)", getSettings().game.moonJump, + "Hold R and A to rise into the air."); addCheat("Super Clawshot", getSettings().game.superClawshot, "Extends clawshot behavior beyond the normal game rules."); addCheat("Always Greatspin", getSettings().game.alwaysGreatspin, @@ -288,8 +291,8 @@ SettingsWindow::SettingsWindow() { rightPane.clear(); rightPane.add_text("Multiplies incoming damage."); }); - addSpeedrunDisabledOption( - "Instant Death", getSettings().game.instantDeath, "Any hit will instantly kill you."); + addSpeedrunDisabledOption("Instant Death", getSettings().game.instantDeath, + "Any hit will instantly kill you."); addSpeedrunDisabledOption("No Heart Drops", getSettings().game.noHeartDrops, "Hearts will never drop from enemies, pots, and various other places."); @@ -302,13 +305,16 @@ SettingsWindow::SettingsWindow() { "Quicker climbing on ladders and vines like the HD version."); addOption("Faster Tears of Light", getSettings().game.fastTears, "Tears of Light dropped by Shadow Insects pop out faster like the HD version."); + addOption("Autosave", getSettings().game.autoSave, + "Autosaves the game when going to a new area, opening a dungeon door, or getting " + "a new item.

This feature is currently experimental, use at your own risk."); addOption("Instant Saves", getSettings().game.instantSaves, "Skips the delay when writing to the Memory Card."); addOption("Hold B for Instant Text", getSettings().game.instantText, "Makes text scroll immediately by holding B."); addOption("No Climbing Miss Animation", getSettings().game.noMissClimbing, - "Prevents Link from playing a struggle animation when grabbing ledges or climbing on " - "vines."); + "Prevents Link from playing a struggle animation when grabbing ledges or " + "climbing on vines."); addOption("No Rupee Returns", getSettings().game.noReturnRupees, "Always collect Rupees even if your Wallet is too full."); addOption("No Sword Recoil", getSettings().game.noSwordRecoil,