From bfd8b9f453a1458123e4aa8a4f7cf8cdf43dc918 Mon Sep 17 00:00:00 2001 From: madeline Date: Wed, 22 Apr 2026 22:27:14 -0700 Subject: [PATCH] make state share loads basically instant --- include/dusk/settings.h | 1 + libs/JSystem/src/JFramework/JFWDisplay.cpp | 8 ++++++++ src/dusk/imgui/ImGuiStateShare.cpp | 7 +++++-- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/include/dusk/settings.h b/include/dusk/settings.h index 2cec252006..5eb333c6fd 100644 --- a/include/dusk/settings.h +++ b/include/dusk/settings.h @@ -148,6 +148,7 @@ struct TransientSettings { CollisionViewSettings collisionView; bool skipFrameRateLimit; bool moveLinkActive; + bool stateShareLoadActive; }; TransientSettings& getTransientSettings(); diff --git a/libs/JSystem/src/JFramework/JFWDisplay.cpp b/libs/JSystem/src/JFramework/JFWDisplay.cpp index 9ea826feee..889fe0ebea 100644 --- a/libs/JSystem/src/JFramework/JFWDisplay.cpp +++ b/libs/JSystem/src/JFramework/JFWDisplay.cpp @@ -18,6 +18,7 @@ #include "dusk/logging.h" #include "dusk/settings.h" #include "dusk/time.h" +#include "f_op/f_op_overlap_mng.h" #include "SDL3/SDL_timer.h" #include "tracy/Tracy.hpp" @@ -385,6 +386,13 @@ static void waitForTick(u32 p1, u16 p2) { if (dusk::getTransientSettings().skipFrameRateLimit) { p1 = OS_TIMER_CLOCK / 120; } + + #if TARGET_PC + if (fopOvlpM_IsPeek() && dusk::getTransientSettings().stateShareLoadActive) { + return; + } + #endif + ZoneScopedC(tracy::Color::DimGray); #endif diff --git a/src/dusk/imgui/ImGuiStateShare.cpp b/src/dusk/imgui/ImGuiStateShare.cpp index 9d88181b10..c7a1c9bf94 100644 --- a/src/dusk/imgui/ImGuiStateShare.cpp +++ b/src/dusk/imgui/ImGuiStateShare.cpp @@ -11,6 +11,7 @@ #include "dusk/main.h" #include "dusk/io.hpp" #include "dusk/logging.h" +#include "dusk/settings.h" #include "../file_select.hpp" #include "aurora/lib/window.hpp" @@ -153,7 +154,8 @@ bool ImGuiStateShare::applyEncodedState(const std::string& encoded, const std::s dComIfGs_setRestartRoomParam(pkt.roomNo & 0x3F); } - dComIfGp_setNextStage(pkt.stageName, spawnPoint, pkt.roomNo, pkt.layer); + dusk::getTransientSettings().stateShareLoadActive = true; + dComIfGp_setNextStage(pkt.stageName, spawnPoint, pkt.roomNo, pkt.layer, 0.0f, 0, 1, 0, 0, 1, 3); if (name.empty()) { m_statusMsg = fmt::format("{} room {} layer {}.", pkt.stageName, (int)pkt.roomNo, (int)pkt.layer); @@ -180,6 +182,7 @@ void ImGuiStateShare::tickPendingApply() { dComIfGp_offOxygenShowFlag(); dComIfGp_setMaxOxygen(600); dComIfGp_setOxygen(600); + dusk::getTransientSettings().stateShareLoadActive = false; } static bool ValidateEncodedState(const std::string& encoded) { @@ -258,7 +261,7 @@ void ImGuiStateShare::draw(bool& open) { } ImGui::SetNextWindowSizeConstraints(ImVec2(400, 0), ImVec2(FLT_MAX, FLT_MAX)); - if (!ImGui::Begin("State Share", &open, ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoFocusOnAppearing | ImGuiWindowFlags_NoNav)) { + if (!ImGui::Begin("State Manager", &open, ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoFocusOnAppearing | ImGuiWindowFlags_NoNav)) { ImGui::End(); return; }