From b628a1beb6e8411bf938d1869d6fa7ff1cadac3a Mon Sep 17 00:00:00 2001 From: Irastris Date: Sat, 11 Apr 2026 18:19:09 -0400 Subject: [PATCH] Frame interp: Fix fmap scroll arrows --- include/d/d_menu_fmap2D.h | 3 +++ src/d/d_menu_fmap.cpp | 6 ++++++ src/d/d_menu_fmap2D.cpp | 6 ++++++ 3 files changed, 15 insertions(+) diff --git a/include/d/d_menu_fmap2D.h b/include/d/d_menu_fmap2D.h index c0344c7903..9b237f2771 100644 --- a/include/d/d_menu_fmap2D.h +++ b/include/d/d_menu_fmap2D.h @@ -152,6 +152,9 @@ public: void setRegionCursor(u8 i_value) { mRegionCursor = i_value; } void setMapDrawFlag(bool i_flag) { mMapDrawFlag = i_flag; } void resetDrug() { field_0x1238 = 0; } +#if TARGET_PC + void resetScrollArrowMask() { field_0x122d = 0; } +#endif void offArrowDrawFlag() { mArrowDrawFlag = false; } void onArrowDrawFlag() { mArrowDrawFlag = true; } diff --git a/src/d/d_menu_fmap.cpp b/src/d/d_menu_fmap.cpp index 652f3a06c5..149e03349d 100644 --- a/src/d/d_menu_fmap.cpp +++ b/src/d/d_menu_fmap.cpp @@ -1133,6 +1133,12 @@ void dMenu_Fmap_c::zoom_region_to_spot_proc() { void dMenu_Fmap_c::zoom_spot_to_region_init() { mZoomLevel = 10; field_0x1ec = 1.0f; +#if TARGET_PC + // Frame interp note: field_0x122d used to be set every draw, causing flickering. Do it here instead. + if (dusk::getSettings().game.enableFrameInterpolation) { + mpDraw2DBack->resetScrollArrowMask(); + } +#endif Z2GetAudioMgr()->seStart(Z2SE_SY_MAP_ZOOMOUT, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0); } diff --git a/src/d/d_menu_fmap2D.cpp b/src/d/d_menu_fmap2D.cpp index e016ed14dd..558ad05d6d 100644 --- a/src/d/d_menu_fmap2D.cpp +++ b/src/d/d_menu_fmap2D.cpp @@ -432,7 +432,13 @@ void dMenu_Fmap2DBack_c::draw() { if (field_0x122d) { mpMeterHaihai->drawHaihai(field_0x122d); +#if TARGET_PC + if (!dusk::getSettings().game.enableFrameInterpolation) { + field_0x122d = 0; + } +#else field_0x122d = 0; +#endif } if (g_fmapHIO.mRangeCheck && !g_fmapHIO.mRangeCheckDrawPriority) {