From 5a8d327e77172f316fb747d08c178acd2ccdaf69 Mon Sep 17 00:00:00 2001 From: Max Roncace Date: Sun, 5 Apr 2026 14:20:55 -0400 Subject: [PATCH 1/4] Revert "Get rid of separate game dylib" This reverts commit 68fff3feeb2bf8d39d3e8a08fadb698f4504ab8a. --- CMakeLists.txt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 12650efb25..e3fbb82437 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -113,7 +113,8 @@ target_include_directories(game_debug PUBLIC build/${DUSK_TP_VERSION}/include) target_link_libraries(game_debug PUBLIC aurora::core aurora::gx aurora::gd aurora::si aurora::vi aurora::pad aurora::mtx aurora::os aurora::dvd aurora::card freeverb) -add_library(game STATIC ${DOLZEL_FILES} ${Z2AUDIOLIB_FILES} ${SSYSTEM_FILES} ${JSYSTEM_FILES} ${REL_FILES} ${DUSK_FILES} ${DOLPHIN_FILES} +set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON) +add_library(game SHARED ${DOLZEL_FILES} ${Z2AUDIOLIB_FILES} ${SSYSTEM_FILES} ${JSYSTEM_FILES} ${REL_FILES} ${DUSK_FILES} ${DOLPHIN_FILES} src/dusk/imgui/ImGuiStubLog.cpp src/dusk/imgui/ImGuiAudio.cpp) @@ -144,7 +145,7 @@ add_custom_command(TARGET dusk POST_BUILD ) include(extern/aurora/cmake/AuroraCopyRuntimeDLLs.cmake) -aurora_copy_runtime_dlls(dusk) +aurora_copy_runtime_dlls(dusk game) if (DUSK_SELECTED_OPT) if (CMAKE_CXX_COMPILER_FRONTEND_VARIANT STREQUAL "MSVC") From 0bfbe97850c035964bfcbd34df9a3a5dfbc3a350 Mon Sep 17 00:00:00 2001 From: Jeffrey Crowell Date: Sun, 5 Apr 2026 20:30:03 +0200 Subject: [PATCH 2/4] force scale of 1.0 (#230) combine with https://github.com/encounter/aurora/pull/54 to have aurora actually handle the scaling properly instead of doing it hackily in dusk. --- src/dusk/imgui/ImGuiConsole.cpp | 2 +- src/dusk/imgui/ImGuiEngine.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/dusk/imgui/ImGuiConsole.cpp b/src/dusk/imgui/ImGuiConsole.cpp index 6a06fce882..c3d84b375e 100644 --- a/src/dusk/imgui/ImGuiConsole.cpp +++ b/src/dusk/imgui/ImGuiConsole.cpp @@ -23,7 +23,7 @@ using namespace std::string_literals; using namespace std::string_view_literals; namespace dusk { - float ImGuiScale() { return ImGui::GetIO().DisplayFramebufferScale.x; } + float ImGuiScale() { return 1.0f; } void ImGuiStringViewText(std::string_view text) { // begin()/end() do not work on MSVC diff --git a/src/dusk/imgui/ImGuiEngine.cpp b/src/dusk/imgui/ImGuiEngine.cpp index 4e2097cf3d..a6abc5b0b9 100644 --- a/src/dusk/imgui/ImGuiEngine.cpp +++ b/src/dusk/imgui/ImGuiEngine.cpp @@ -38,6 +38,7 @@ void ImGuiEngine_Initialize(float scale) { ImGui::GetCurrentContext(); ImGuiIO& io = ImGui::GetIO(); io.Fonts->Clear(); + io.FontGlobalScale = scale > 0.0f ? 1.0f / scale : 1.0f; const std::string fontPath = GetAssetPath("NotoMono-Regular.ttf"); const bool hasFontFile = AssetExists(fontPath); @@ -146,7 +147,6 @@ void ImGuiEngine_Initialize(float scale) { colors[ImGuiCol_NavWindowingDimBg] = ImVec4(0.80f, 0.80f, 0.80f, 0.20f); colors[ImGuiCol_ModalWindowDimBg] = ImVec4(0.80f, 0.80f, 0.80f, 0.35f); - style.ScaleAllSizes(scale); } Icon GetIcon() { From bc62b667409432d2b219b783c3f9ea8857796bb2 Mon Sep 17 00:00:00 2001 From: MelonSpeedruns Date: Sun, 5 Apr 2026 14:30:48 -0400 Subject: [PATCH 3/4] Resize ImGui windows automatically + Move "Tools" menu after "Enhancements" (#232) * Resize ImGui windows automatically + Move "Tools" menu after "Enhancements" * Oops, forgot one of those * Always resize Tools menu * Moved hotkeys to allow fullscreen & reset to be done without the menu open --- src/dusk/imgui/ImGuiCameraOverlay.cpp | 2 -- src/dusk/imgui/ImGuiConsole.cpp | 15 ++++++++++++++- src/dusk/imgui/ImGuiConsole.hpp | 5 ++++- src/dusk/imgui/ImGuiMapLoader.cpp | 2 -- src/dusk/imgui/ImGuiMenuGame.cpp | 11 ----------- src/dusk/imgui/ImGuiMenuTools.cpp | 4 ++-- src/dusk/imgui/ImGuiSaveEditor.cpp | 4 ++-- 7 files changed, 22 insertions(+), 21 deletions(-) diff --git a/src/dusk/imgui/ImGuiCameraOverlay.cpp b/src/dusk/imgui/ImGuiCameraOverlay.cpp index 9d3ef60142..599af30f37 100644 --- a/src/dusk/imgui/ImGuiCameraOverlay.cpp +++ b/src/dusk/imgui/ImGuiCameraOverlay.cpp @@ -26,8 +26,6 @@ namespace dusk { } ImGui::SetNextWindowBgAlpha(0.65f); - ImGui::SetNextWindowSizeConstraints(ImVec2(300.f * ImGuiScale(), 0), - ImVec2(FLT_MAX, FLT_MAX)); if (!ImGui::Begin("Camera Debug", nullptr, windowFlags)) { ImGui::End(); diff --git a/src/dusk/imgui/ImGuiConsole.cpp b/src/dusk/imgui/ImGuiConsole.cpp index c3d84b375e..5ccfb1d68f 100644 --- a/src/dusk/imgui/ImGuiConsole.cpp +++ b/src/dusk/imgui/ImGuiConsole.cpp @@ -182,6 +182,17 @@ namespace dusk { m_isLaunchInitialized = true; } + if ((ImGui::IsKeyDown(ImGuiKey_LeftCtrl) || ImGui::IsKeyDown(ImGuiKey_RightCtrl)) && + ImGui::IsKeyPressed(ImGuiKey_R)) + { + JUTGamePad::C3ButtonReset::sResetSwitchPushing = true; + } + + if (ImGui::IsKeyPressed(ImGuiKey_F11)) { + getSettings().video.enableFullscreen = !getSettings().video.enableFullscreen; + VISetWindowFullscreen(getSettings().video.enableFullscreen); + } + if (CheckMenuViewToggle(ImGuiKey_F1, m_isHidden)) { ShowToasts(); return; @@ -192,9 +203,11 @@ namespace dusk { if (ImGui::BeginMainMenuBar()) { m_menuGame.draw(); - m_menuTools.draw(); m_menuEnhancements.draw(); + // Keep always last + m_menuTools.draw(); + ImGui::SetCursorPosX(ImGui::GetWindowWidth() - 80.0f * ImGuiScale()); ImGuiIO& io = ImGui::GetIO(); ImGuiStringViewText(fmt::format(FMT_STRING("FPS: {:.2f}\n"), io.Framerate)); diff --git a/src/dusk/imgui/ImGuiConsole.hpp b/src/dusk/imgui/ImGuiConsole.hpp index a7c433be4d..27032ed39b 100644 --- a/src/dusk/imgui/ImGuiConsole.hpp +++ b/src/dusk/imgui/ImGuiConsole.hpp @@ -31,10 +31,13 @@ private: bool m_isHidden = true; bool m_isLaunchInitialized = false; std::deque m_toasts; + ImGuiMenuGame m_menuGame; - ImGuiMenuTools m_menuTools; ImGuiMenuEnhancements m_menuEnhancements; + // Keep always last + ImGuiMenuTools m_menuTools; + void ShowToasts(); void ShowPipelineProgress(); }; diff --git a/src/dusk/imgui/ImGuiMapLoader.cpp b/src/dusk/imgui/ImGuiMapLoader.cpp index 4baf48bdab..428d458903 100644 --- a/src/dusk/imgui/ImGuiMapLoader.cpp +++ b/src/dusk/imgui/ImGuiMapLoader.cpp @@ -17,8 +17,6 @@ namespace dusk { ImGuiWindowFlags_NoFocusOnAppearing | ImGuiWindowFlags_NoNav; ImGui::SetNextWindowBgAlpha(0.65f); - ImGui::SetNextWindowSizeConstraints(ImVec2(300.f * ImGuiScale(), 0), - ImVec2(FLT_MAX, FLT_MAX)); if (!ImGui::Begin("Map Loader", &m_showMapLoader, windowFlags)) { ImGui::End(); diff --git a/src/dusk/imgui/ImGuiMenuGame.cpp b/src/dusk/imgui/ImGuiMenuGame.cpp index 7bdea47862..961c9e8381 100644 --- a/src/dusk/imgui/ImGuiMenuGame.cpp +++ b/src/dusk/imgui/ImGuiMenuGame.cpp @@ -73,15 +73,6 @@ namespace dusk { windowInputViewer(); windowControllerConfig(); - - if ((ImGui::IsKeyDown(ImGuiKey_LeftCtrl) || ImGui::IsKeyDown(ImGuiKey_RightCtrl)) && ImGui::IsKeyPressed(ImGuiKey_R)) { - JUTGamePad::C3ButtonReset::sResetSwitchPushing = true; - } - - if (ImGui::IsKeyPressed(ImGuiKey_F11)) { - getSettings().video.enableFullscreen = !getSettings().video.enableFullscreen; - VISetWindowFullscreen(getSettings().video.enableFullscreen); - } } static void drawVirtualStick(const char* id, const ImVec2& stick) { @@ -147,8 +138,6 @@ namespace dusk { ImGuiWindowFlags_AlwaysAutoResize; ImGui::SetNextWindowBgAlpha(0.65f); - ImGui::SetNextWindowSizeConstraints(ImVec2(850 * scale, 400 * scale), - ImVec2(850 * scale, 400 * scale)); if (!ImGui::Begin("Controller Config", &m_showControllerConfig, windowFlags)) { ImGui::End(); diff --git a/src/dusk/imgui/ImGuiMenuTools.cpp b/src/dusk/imgui/ImGuiMenuTools.cpp index 20e92768a6..c0494b1e5b 100644 --- a/src/dusk/imgui/ImGuiMenuTools.cpp +++ b/src/dusk/imgui/ImGuiMenuTools.cpp @@ -146,10 +146,10 @@ namespace dusk { } ImGuiIO& io = ImGui::GetIO(); - ImGuiWindowFlags windowFlags = ImGuiWindowFlags_NoResize; + ImGuiWindowFlags windowFlags = + ImGuiWindowFlags_NoResize | ImGuiWindowFlags_AlwaysAutoResize; ImGui::SetNextWindowBgAlpha(0.65f); - ImGui::SetNextWindowSizeConstraints(ImVec2(300, 200), ImVec2(300, 200)); if (ImGui::Begin("Player Info", &m_showPlayerInfo, windowFlags)) { daAlink_c* player = (daAlink_c*)dComIfGp_getPlayer(0); diff --git a/src/dusk/imgui/ImGuiSaveEditor.cpp b/src/dusk/imgui/ImGuiSaveEditor.cpp index a9cca636f8..9748893571 100644 --- a/src/dusk/imgui/ImGuiSaveEditor.cpp +++ b/src/dusk/imgui/ImGuiSaveEditor.cpp @@ -284,10 +284,10 @@ namespace dusk { void ImGuiSaveEditor::draw(bool& open) { ImGuiIO& io = ImGui::GetIO(); - ImGuiWindowFlags windowFlags = ImGuiWindowFlags_NoResize; + ImGuiWindowFlags windowFlags = + ImGuiWindowFlags_NoResize | ImGuiWindowFlags_AlwaysAutoResize; ImGui::SetNextWindowBgAlpha(0.65f); - ImGui::SetNextWindowSizeConstraints(ImVec2(600, 700), ImVec2(600, 700)); if (ImGui::Begin("Save Editor", &open, windowFlags)) { if (ImGui::BeginTabBar("SaveEditorTabBar", ImGuiTabBarFlags_NoCloseWithMiddleMouseButton)) { From 9a0986535faf71eef742ac671de4d1063642801e Mon Sep 17 00:00:00 2001 From: Irastris Date: Sun, 5 Apr 2026 14:31:45 -0400 Subject: [PATCH 4/4] Use int for audio sliders, show current value (#235) --- include/dusk/settings.h | 10 +++++----- src/dusk/imgui/ImGuiMenuGame.cpp | 15 ++++++++------- src/dusk/settings.cpp | 10 +++++----- 3 files changed, 18 insertions(+), 17 deletions(-) diff --git a/include/dusk/settings.h b/include/dusk/settings.h index c58b0434a3..86b192f6f0 100644 --- a/include/dusk/settings.h +++ b/include/dusk/settings.h @@ -15,11 +15,11 @@ struct UserSettings { struct { // Audio - float masterVolume; - float mainMusicVolume; - float subMusicVolume; - float soundEffectsVolume; - float fanfareVolume; + int masterVolume; + int mainMusicVolume; + int subMusicVolume; + int soundEffectsVolume; + int fanfareVolume; bool enableReverb; } audio; diff --git a/src/dusk/imgui/ImGuiMenuGame.cpp b/src/dusk/imgui/ImGuiMenuGame.cpp index 961c9e8381..cd1d5a06f3 100644 --- a/src/dusk/imgui/ImGuiMenuGame.cpp +++ b/src/dusk/imgui/ImGuiMenuGame.cpp @@ -34,28 +34,29 @@ namespace dusk { if (ImGui::BeginMenu("Audio")) { ImGui::Text("Master Volume"); - ImGui::SliderFloat("##masterVolume", &getSettings().audio.masterVolume, 0.0f, 1.0f, ""); + ImGui::SliderInt("##masterVolume", &getSettings().audio.masterVolume, 0, 100); ImGui::Checkbox("Enable Reverb", &getSettings().audio.enableReverb); + /* - // TODO: implement additional settings + // TODO: Implement additional settings ImGui::Text("Main Music Volume"); - ImGui::SliderFloat("##mainMusicVolume", &getSettings().audio.mainMusicVolume, 0.0f, 1.0f, ""); + ImGui::SliderFloat("##mainMusicVolume", &getSettings().audio.mainMusicVolume, 0, 100); ImGui::Text("Sub Music Volume"); - ImGui::SliderFloat("##subMusicVolume", &getSettings().audio.subMusicVolume, 0.0f, 1.0f, ""); + ImGui::SliderFloat("##subMusicVolume", &getSettings().audio.subMusicVolume, 0, 100); ImGui::Text("Sound Effects Volume"); - ImGui::SliderFloat("##soundEffectsVolume", &getSettings().audio.soundEffectsVolume, 0.0f, 1.0f, ""); + ImGui::SliderFloat("##soundEffectsVolume", &getSettings().audio.soundEffectsVolume, 0, 100); ImGui::Text("Fanfare Volume"); - ImGui::SliderFloat("##fanfareVolume", &getSettings().audio.fanfareVolume, 0.0f, 1.0f, ""); + ImGui::SliderFloat("##fanfareVolume", &getSettings().audio.fanfareVolume, 0, 100); Z2AudioMgr* audioMgr = Z2AudioMgr::getInterface(); if (audioMgr != nullptr) { } */ - audio::SetMasterVolume(getSettings().audio.masterVolume); + audio::SetMasterVolume(getSettings().audio.masterVolume / 100.0f); audio::EnableReverb = getSettings().audio.enableReverb; ImGui::EndMenu(); diff --git a/src/dusk/settings.cpp b/src/dusk/settings.cpp index 23bc7327bd..88a212cbc7 100644 --- a/src/dusk/settings.cpp +++ b/src/dusk/settings.cpp @@ -12,11 +12,11 @@ UserSettings g_userSettings = { // Audio .audio = { - .masterVolume = 0.8f, - .mainMusicVolume = 1.0f, - .subMusicVolume = 1.0f, - .soundEffectsVolume = 1.0f, - .fanfareVolume = 1.0f, + .masterVolume = 80, + .mainMusicVolume = 100, + .subMusicVolume = 100, + .soundEffectsVolume = 100, + .fanfareVolume = 100, .enableReverb = true },