From ce554a107d0a64378e39e608f4a8f25e77b84f74 Mon Sep 17 00:00:00 2001 From: qwertyquerty Date: Wed, 13 May 2026 00:10:25 -0700 Subject: [PATCH] speedrun mode hotfixes (#1160) --- include/dusk/config_var.hpp | 10 ++++++++++ src/dusk/config.cpp | 5 +++-- src/m_Do/m_Do_main.cpp | 4 ++++ 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/include/dusk/config_var.hpp b/include/dusk/config_var.hpp index cc8c700ed4..59eed2199e 100644 --- a/include/dusk/config_var.hpp +++ b/include/dusk/config_var.hpp @@ -285,6 +285,16 @@ public: layer = ConfigVarLayer::Value; } } + + /** + * \brief Get the user-persisted value, ignoring any temporary overrides. + * + * Used by Save() to write the correct value even when a speedrun override is active. + */ + [[nodiscard]] constexpr const T& getValueForSave() const noexcept { + checkRegistered(); + return layer == ConfigVarLayer::Default ? defaultValue : value; + } }; using ActionBindConfigVar = ConfigVar; diff --git a/src/dusk/config.cpp b/src/dusk/config.cpp index de4cc227a3..f0a4b986bd 100644 --- a/src/dusk/config.cpp +++ b/src/dusk/config.cpp @@ -61,7 +61,7 @@ void ConfigImpl::loadFromJson(ConfigVar& cVar, const json& jsonValue) { template nlohmann::json ConfigImpl::dumpToJson(const ConfigVar& cVar) { - return cVar.getValue(); + return cVar.getValueForSave(); } template requires std::is_integral_v && std::is_signed_v @@ -249,7 +249,8 @@ void dusk::config::Save() { json j; for (const auto& pair : RegisteredConfigVars) { - if (pair.second->getLayer() == ConfigVarLayer::Value) { + const auto layer = pair.second->getLayer(); + if (layer == ConfigVarLayer::Value || layer == ConfigVarLayer::Speedrun) { j[pair.first] = pair.second->getImpl()->dumpToJson(*pair.second); } } diff --git a/src/m_Do/m_Do_main.cpp b/src/m_Do/m_Do_main.cpp index 5b62ae92ed..8cfd235344 100644 --- a/src/m_Do/m_Do_main.cpp +++ b/src/m_Do/m_Do_main.cpp @@ -80,6 +80,7 @@ #include "dusk/audio/DuskAudioSystem.h" #include "dusk/audio/DuskDsp.hpp" #include "dusk/config.hpp" +#include "dusk/speedrun.h" #include "dusk/settings.h" #include "dusk/io.hpp" #include "dusk/version.hpp" @@ -522,6 +523,9 @@ int game_main(int argc, char* argv[]) { log_build_info(); dusk::config::LoadFromUserPreferences(); + if (dusk::getSettings().game.speedrunMode) { + dusk::resetForSpeedrunMode(); + } ApplyCVarOverrides(parsed_arg_options["cvar"]); dusk::crash_reporting::initialize(); // TODO: How to handle this?