From a4f3370d9b98ff7086b0966f9e76779fa5147df1 Mon Sep 17 00:00:00 2001 From: Bobby Battista Date: Mon, 6 Jul 2026 17:30:32 -0400 Subject: [PATCH 1/2] tweak: decouple the general promotion star blink from the render frame rate --- Core/GameEngine/Include/GameClient/ControlBar.h | 1 + .../Source/GameClient/GUI/ControlBar/ControlBar.cpp | 11 ++++++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/Core/GameEngine/Include/GameClient/ControlBar.h b/Core/GameEngine/Include/GameClient/ControlBar.h index b564739ecc2..18b0501c863 100644 --- a/Core/GameEngine/Include/GameClient/ControlBar.h +++ b/Core/GameEngine/Include/GameClient/ControlBar.h @@ -1029,6 +1029,7 @@ class ControlBar : public SubsystemInterface Bool m_genStarFlash; + Real m_genStarFlashAccumSec; Int m_lastFlashedAtPointValue; ICoord2D m_controlBarForegroundMarkerPos; diff --git a/Core/GameEngine/Source/GameClient/GUI/ControlBar/ControlBar.cpp b/Core/GameEngine/Source/GameClient/GUI/ControlBar/ControlBar.cpp index 2c90a3d80d2..2e022c9249e 100644 --- a/Core/GameEngine/Source/GameClient/GUI/ControlBar/ControlBar.cpp +++ b/Core/GameEngine/Source/GameClient/GUI/ControlBar/ControlBar.cpp @@ -36,6 +36,7 @@ #define DEFINE_RADIUSCURSOR_NAMES #include "Common/ActionManager.h" +#include "Common/FramePacer.h" #include "Common/GameType.h" #include "Common/MultiplayerSettings.h" #include "Common/NameKeyGenerator.h" @@ -904,6 +905,7 @@ ControlBar::ControlBar() m_currContext = CB_CONTEXT_NONE; m_defaultControlBarPosition.x = m_defaultControlBarPosition.y = 0; m_genStarFlash = FALSE; + m_genStarFlashAccumSec = 0.0f; m_genStarOff = nullptr; m_genStarOn = nullptr; m_UIDirty = FALSE; @@ -1681,7 +1683,14 @@ const Image *ControlBar::getStarImage() return nullptr; } - if(TheGameLogic->getFrame()% LOGICFRAMES_PER_SECOND > LOGICFRAMES_PER_SECOND/2) + // TheSuperHackers @tweak bobtista 27/06/2026 Blink on a wall-clock cycle so the rate is independent of render frame rate and logic time scale. + m_genStarFlashAccumSec += TheFramePacer->getUpdateTime(); + const Real blinkPeriodSec = 1.0f; + while( m_genStarFlashAccumSec >= blinkPeriodSec ) + { + m_genStarFlashAccumSec -= blinkPeriodSec; + } + if( m_genStarFlashAccumSec >= blinkPeriodSec / 2 ) { GadgetButtonSetEnabledImage(win, m_generalButtonHighlight); return nullptr; From 70e017fd1ca4857471230f82f6d062f7366be09d Mon Sep 17 00:00:00 2001 From: Bobby Battista Date: Wed, 8 Jul 2026 22:22:31 +0400 Subject: [PATCH 2/2] refactor(controlbar): rename star blink time accumulator for clarity --- Core/GameEngine/Include/GameClient/ControlBar.h | 2 +- .../Source/GameClient/GUI/ControlBar/ControlBar.cpp | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/Core/GameEngine/Include/GameClient/ControlBar.h b/Core/GameEngine/Include/GameClient/ControlBar.h index 18b0501c863..446277a13be 100644 --- a/Core/GameEngine/Include/GameClient/ControlBar.h +++ b/Core/GameEngine/Include/GameClient/ControlBar.h @@ -1029,7 +1029,7 @@ class ControlBar : public SubsystemInterface Bool m_genStarFlash; - Real m_genStarFlashAccumSec; + Real m_genStarFlashTimeAccumulator; ///< Frame time accumulated within the current star blink cycle, in seconds Int m_lastFlashedAtPointValue; ICoord2D m_controlBarForegroundMarkerPos; diff --git a/Core/GameEngine/Source/GameClient/GUI/ControlBar/ControlBar.cpp b/Core/GameEngine/Source/GameClient/GUI/ControlBar/ControlBar.cpp index 2e022c9249e..697ee47a0a4 100644 --- a/Core/GameEngine/Source/GameClient/GUI/ControlBar/ControlBar.cpp +++ b/Core/GameEngine/Source/GameClient/GUI/ControlBar/ControlBar.cpp @@ -905,7 +905,7 @@ ControlBar::ControlBar() m_currContext = CB_CONTEXT_NONE; m_defaultControlBarPosition.x = m_defaultControlBarPosition.y = 0; m_genStarFlash = FALSE; - m_genStarFlashAccumSec = 0.0f; + m_genStarFlashTimeAccumulator = 0.0f; m_genStarOff = nullptr; m_genStarOn = nullptr; m_UIDirty = FALSE; @@ -1684,13 +1684,13 @@ const Image *ControlBar::getStarImage() } // TheSuperHackers @tweak bobtista 27/06/2026 Blink on a wall-clock cycle so the rate is independent of render frame rate and logic time scale. - m_genStarFlashAccumSec += TheFramePacer->getUpdateTime(); - const Real blinkPeriodSec = 1.0f; - while( m_genStarFlashAccumSec >= blinkPeriodSec ) + m_genStarFlashTimeAccumulator += TheFramePacer->getUpdateTime(); + const Real blinkPeriodSeconds = 1.0f; + while( m_genStarFlashTimeAccumulator >= blinkPeriodSeconds ) { - m_genStarFlashAccumSec -= blinkPeriodSec; + m_genStarFlashTimeAccumulator -= blinkPeriodSeconds; } - if( m_genStarFlashAccumSec >= blinkPeriodSec / 2 ) + if( m_genStarFlashTimeAccumulator >= blinkPeriodSeconds / 2 ) { GadgetButtonSetEnabledImage(win, m_generalButtonHighlight); return nullptr;