From 30b003c9d9cef0d94b9a1e1f94e43fd92b79d0e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFs?= <49660929+SailorSnoW@users.noreply.github.com> Date: Fri, 15 May 2026 23:16:36 +0200 Subject: [PATCH 1/5] fix rein interpolation jitter by rolling snapshot once per sim tick (#1421) --- include/dusk/frame_interpolation.h | 1 + src/d/actor/d_a_horse.cpp | 14 ++++++++++---- src/dusk/frame_interpolation.cpp | 6 ++++++ 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/include/dusk/frame_interpolation.h b/include/dusk/frame_interpolation.h index 8c19e7e59b..0fa8c208bd 100644 --- a/include/dusk/frame_interpolation.h +++ b/include/dusk/frame_interpolation.h @@ -17,6 +17,7 @@ void ensure_initialized(); void begin_record(); void end_record(); void begin_sim_tick(); +uint64_t sim_tick_seq(); void begin_frame(bool enabled, bool is_sim_frame, float step); void interpolate(); float get_interpolation_step(); diff --git a/src/d/actor/d_a_horse.cpp b/src/d/actor/d_a_horse.cpp index 68112eba47..16790d42ff 100644 --- a/src/d/actor/d_a_horse.cpp +++ b/src/d/actor/d_a_horse.cpp @@ -22,6 +22,7 @@ #if TARGET_PC #include "dusk/dusk.h" +#include "dusk/frame_interpolation.h" namespace { // FRAME INTERP NOTE: Sim tick control point snapshots for interpolation @@ -32,6 +33,7 @@ int s_horseReinSimNumPrev; int s_horseReinSimNumCurr; bool s_horseReinSimPrevValid; bool s_horseReinSimCurrValid; +uint64_t s_horseReinSimRolledSeq; } // namespace #endif @@ -3033,10 +3035,14 @@ void daHorse_c::copyReinPos() { } #if TARGET_PC if (field_0x1204 > 0) { - if (s_horseReinSimCurrValid && s_horseReinSimNumCurr > 0) { - memcpy(s_horseReinSimPrev, s_horseReinSimCurr, s_horseReinSimNumCurr * sizeof(cXyz)); - s_horseReinSimNumPrev = s_horseReinSimNumCurr; - s_horseReinSimPrevValid = true; + const uint64_t simSeq = dusk::frame_interp::sim_tick_seq(); + if (simSeq != s_horseReinSimRolledSeq) { + s_horseReinSimRolledSeq = simSeq; + if (s_horseReinSimCurrValid && s_horseReinSimNumCurr > 0) { + memcpy(s_horseReinSimPrev, s_horseReinSimCurr, s_horseReinSimNumCurr * sizeof(cXyz)); + s_horseReinSimNumPrev = s_horseReinSimNumCurr; + s_horseReinSimPrevValid = true; + } } memcpy(s_horseReinSimCurr, m_reinLine.getPos(0), field_0x1204 * sizeof(cXyz)); s_horseReinSimNumCurr = field_0x1204; diff --git a/src/dusk/frame_interpolation.cpp b/src/dusk/frame_interpolation.cpp index ff54e3b463..06cc70c330 100644 --- a/src/dusk/frame_interpolation.cpp +++ b/src/dusk/frame_interpolation.cpp @@ -21,6 +21,7 @@ bool g_sync_presentation = false; float g_step = 0.0f; bool g_is_sim_frame = false; bool g_ui_tick_pending = false; +uint64_t g_sim_tick_seq = 0; Recording g_current_recording; Recording g_previous_recording; @@ -134,6 +135,11 @@ void begin_sim_tick() { s_interpolationCallBackWork.clear(); s_cam_prev = std::move(s_cam_curr); + ++g_sim_tick_seq; +} + +uint64_t sim_tick_seq() { + return g_sim_tick_seq; } void begin_frame(bool enabled, bool is_sim_frame, float step) { From 2541c3f29314abb5066360d21e95159414bf8583 Mon Sep 17 00:00:00 2001 From: SuperDude88 <82904174+SuperDude88@users.noreply.github.com> Date: Sat, 16 May 2026 04:28:21 -0400 Subject: [PATCH 2/5] Update Description (#1439) Mention that it applies to other cases besides just boots --- src/dusk/ui/settings.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/dusk/ui/settings.cpp b/src/dusk/ui/settings.cpp index 34b7496df0..f12cb11ade 100644 --- a/src/dusk/ui/settings.cpp +++ b/src/dusk/ui/settings.cpp @@ -1165,7 +1165,7 @@ SettingsWindow::SettingsWindow(bool prelaunch) : mPrelaunch(prelaunch) { addCheat("Always Greatspin", getSettings().game.alwaysGreatspin, "Allows the Great Spin attack without requiring full health."); addCheat("Fast Iron Boots", getSettings().game.enableFastIronBoots, - "Speeds up movement while wearing the Iron Boots."); + "Speeds up movement while heavy, including wearing the Iron Boots, holding the Ball and Chain, wearing Magic Armor without rupees, etc."); addCheat("Can Transform Anywhere", getSettings().game.canTransformAnywhere, "Allows transforming even if NPCs are looking."); addCheat("Fast Roll", getSettings().game.fastRoll, From 8adc40708ecd7451b6ea1ea964a42feaa5e68b97 Mon Sep 17 00:00:00 2001 From: MelonSpeedruns Date: Sat, 16 May 2026 04:28:45 -0400 Subject: [PATCH 3/5] Infinite Rupee now set to max Rupees (#1417) Co-authored-by: MelonSpeedruns --- src/f_ap/f_ap_game.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/f_ap/f_ap_game.cpp b/src/f_ap/f_ap_game.cpp index 2e7e5b531e..72219e98dd 100644 --- a/src/f_ap/f_ap_game.cpp +++ b/src/f_ap/f_ap_game.cpp @@ -807,7 +807,7 @@ static void duskExecute() { } if (dusk::getSettings().game.infiniteRupees) { - dComIfGs_setRupee(9999); + dComIfGs_setRupee(dComIfGs_getRupeeMax()); } if (dusk::getSettings().game.infiniteOxygen) { From 3b30c09e792aef8cd01f4383d567412405bf660a Mon Sep 17 00:00:00 2001 From: Pieter-Jan Briers Date: Sat, 16 May 2026 14:15:27 +0200 Subject: [PATCH 4/5] Fix PAL name keyboard (#1467) Fixes #1460 --- src/d/d_name.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/d/d_name.cpp b/src/d/d_name.cpp index e4b4b91b00..abc7512f14 100644 --- a/src/d/d_name.cpp +++ b/src/d/d_name.cpp @@ -77,16 +77,16 @@ static const char* l_mojiEisu[65] = { // That can't work on a modern platform, so instead I've filled them out ahead of time. static const char* l_mojiEisuPal_1[65] = { "A", "N", "\xC0", "\xCF", "1", "B", "O", "\xC1", "\xD0", "2", "C", "P", "\xC2", "\xD1", "3", "D", "Q", - "\xC3", "\xD2", "4", "E", "R", "\xC4", "\xD3", "5", "F", "S", "\xC5", "\xD4", "6", "G", "T", "\xC6", "\xD5", - "7", "H", "U", "\xC7", "\xD6", "8", "I", "V", "\xC8", "\xD7", "9", "J", "W", "\xC9", "\xD8", "0", "K", - "X", "\xCA", "\xD9", ",", "L", "Y", "\xCB", "\xDA", ".", "M", "Z", "\xCC", "\xDB", " ", + "\xC4", "\xD2", "4", "E", "R", "\xC6", "\xD3", "5", "F", "S", "\xC7", "\xD4", "6", "G", "T", "\xC8", "\xD6", + "7", "H", "U", "\xC9", "\x8C", "8", "I", "V", "\xCA", "\xD9", "9", "J", "W", "\xCB", "\xDA", "0", "K", + "X", "\xCC", "\xDB", ",", "L", "Y", "\xCD", "\xDC", ".", "M", "Z", "\xCE", "\x2D", " ", }; static const char* l_mojiEisuPal_2[65] = { "a", "n", "\xE0", "\xEF", "1", "b", "o", "\xE1", "\xF0", "2", "c", "p", "\xE2", "\xF1", "3", "d", "q", - "\xE3", "\xF2", "4", "e", "r", "\xE4", "\xF3", "5", "f", "s", "\xE5", "\xF4", "6", "g", "t", "\xE6", - "\xF5", "7", "h", "u", "\xE7", "\xF6", "8", "i", "v", "\xE8", "\xF7", "9", "j", "w", "\xE9", "\xF8", "0", - "k", "x", "\xEA", "\xF9", ",", "l", "y", "\xEB", "\xFA", ".", "m", "z", "\xEC", "\xFB", " ", + "\xE4", "\xF2", "4", "e", "r", "\xE6", "\xF3", "5", "f", "s", "\xE7", "\xF4", "6", "g", "t", "\xE8", + "\xF6", "7", "h", "u", "\xE9", "\x9C", "8", "i", "v", "\xEA", "\xF9", "9", "j", "w", "\xEB", "\xFA", "0", + "k", "x", "\xEC", "\xFB", ",", "l", "y", "\xED", "\xFC", ".", "m", "z", "\xEE", "\xDF", " ", }; #elif REGION_PAL static const char* l_mojiEisuPal_1[65] = { From 5d2811955c05875af2665725e61334b895fd701b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFs?= <49660929+SailorSnoW@users.noreply.github.com> Date: Sat, 16 May 2026 14:19:57 +0200 Subject: [PATCH 5/5] Fix item wheel background capturing interpolated frame instead of current sim (#1447) --- src/d/d_menu_window.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/d/d_menu_window.cpp b/src/d/d_menu_window.cpp index 7f76f807df..e2e7b4e91f 100644 --- a/src/d/d_menu_window.cpp +++ b/src/d/d_menu_window.cpp @@ -26,6 +26,10 @@ #include "f_op/f_op_overlap_mng.h" #include "m_Do/m_Do_controller_pad.h" +#ifdef TARGET_PC +#include "dusk/frame_interpolation.h" +#endif + class dDlst_MENU_CAPTURE_c : public dDlst_base_c { public: virtual void draw() { @@ -1088,6 +1092,10 @@ void dMw_c::dMw_ring_create(u8 i_origin) { } mpCapture->setCaptureFlag(); + +#ifdef TARGET_PC + dusk::frame_interp::request_presentation_sync(); +#endif } bool dMw_c::dMw_ring_delete() {