From 3d5f2474bf409fa8ab691adc55555dca61b3f0ef Mon Sep 17 00:00:00 2001 From: madeline Date: Sun, 5 Apr 2026 11:47:49 -0700 Subject: [PATCH] turbo keybind tool --- include/dusk/hotkeys.h | 2 ++ include/dusk/settings.h | 4 ++++ libs/JSystem/src/JFramework/JFWDisplay.cpp | 7 ++++++- src/dusk/imgui/ImGuiConsole.cpp | 3 +++ src/dusk/imgui/ImGuiMenuTools.cpp | 3 +++ src/dusk/settings.cpp | 4 ++++ 6 files changed, 22 insertions(+), 1 deletion(-) diff --git a/include/dusk/hotkeys.h b/include/dusk/hotkeys.h index ba187a544c..c40f35925f 100644 --- a/include/dusk/hotkeys.h +++ b/include/dusk/hotkeys.h @@ -14,6 +14,8 @@ constexpr const char* SHOW_STUB_LOG = "F5"; constexpr const char* SHOW_CAMERA_DEBUG = "F6"; constexpr const char* SHOW_AUDIO_DEBUG = "F7"; +constexpr const char* TURBO = "Tab"; + } #endif // DUSK_HOTKEYS_H diff --git a/include/dusk/settings.h b/include/dusk/settings.h index c58b0434a3..5d46311168 100644 --- a/include/dusk/settings.h +++ b/include/dusk/settings.h @@ -57,6 +57,9 @@ struct UserSettings { // Technical bool restoreWiiGlitches; + + // Controls + bool enableTurboKeybind; } game; }; @@ -77,6 +80,7 @@ struct CollisionViewSettings { struct TransientSettings { CollisionViewSettings collisionView; + bool skipFrameRateLimit; }; TransientSettings& getTransientSettings(); diff --git a/libs/JSystem/src/JFramework/JFWDisplay.cpp b/libs/JSystem/src/JFramework/JFWDisplay.cpp index b55649a1bc..6a257f5244 100644 --- a/libs/JSystem/src/JFramework/JFWDisplay.cpp +++ b/libs/JSystem/src/JFramework/JFWDisplay.cpp @@ -15,6 +15,7 @@ #include "aurora/aurora.h" #include "dusk/gx_helper.h" #include "dusk/logging.h" +#include "dusk/settings.h" #include "global.h" void JFWDisplay::ctor_subroutine(bool enableAlpha) { @@ -347,7 +348,11 @@ void JFWDisplay::waitBlanking(int param_0) { } static void waitForTick(u32 p1, u16 p2) { - + #if TARGET_PC + if (dusk::getTransientSettings().skipFrameRateLimit) { + p1 = OS_TIMER_CLOCK / 120; + } + #endif if (p1 != 0) { diff --git a/src/dusk/imgui/ImGuiConsole.cpp b/src/dusk/imgui/ImGuiConsole.cpp index 6a06fce882..2cec734534 100644 --- a/src/dusk/imgui/ImGuiConsole.cpp +++ b/src/dusk/imgui/ImGuiConsole.cpp @@ -13,6 +13,7 @@ #include "ImGuiConsole.hpp" #include "JSystem/JUtility/JUTGamePad.h" +#include "dusk/settings.h" #if _WIN32 #define NOMINMAX @@ -182,6 +183,8 @@ namespace dusk { m_isLaunchInitialized = true; } + getTransientSettings().skipFrameRateLimit = getSettings().game.enableTurboKeybind && ImGui::IsKeyDown(ImGuiKey_Tab); + if (CheckMenuViewToggle(ImGuiKey_F1, m_isHidden)) { ShowToasts(); return; diff --git a/src/dusk/imgui/ImGuiMenuTools.cpp b/src/dusk/imgui/ImGuiMenuTools.cpp index 20e92768a6..6b27ac64b2 100644 --- a/src/dusk/imgui/ImGuiMenuTools.cpp +++ b/src/dusk/imgui/ImGuiMenuTools.cpp @@ -3,6 +3,7 @@ #include "aurora/gfx.h" #include "dusk/hotkeys.h" +#include "dusk/settings.h" #include "ImGuiConsole.hpp" #include "ImGuiMenuTools.hpp" @@ -48,6 +49,8 @@ namespace dusk { ImGui::MenuItem("Save Editor", nullptr, &m_showSaveEditor); ImGui::MenuItem("Audio Debug", hotkeys::SHOW_AUDIO_DEBUG, &m_showAudioDebug); ImGui::MenuItem("OSReport Force", nullptr, &OSReportReallyForceEnable); + ImGui::Separator(); + ImGui::MenuItem("Enable Turbo Key", hotkeys::TURBO, &getSettings().game.enableTurboKeybind); ImGui::EndMenu(); } diff --git a/src/dusk/settings.cpp b/src/dusk/settings.cpp index 23bc7327bd..29eba4c694 100644 --- a/src/dusk/settings.cpp +++ b/src/dusk/settings.cpp @@ -53,6 +53,9 @@ UserSettings g_userSettings = { // Technical .restoreWiiGlitches = false, + + // Controls + .enableTurboKeybind = true, } }; @@ -73,6 +76,7 @@ static TransientSettings g_transientSettings = { .colliderViewOpacity = 50.0f, .drawRange = 100.0f, }, + .skipFrameRateLimit = false, }; TransientSettings& getTransientSettings() {