diff --git a/src/timer/timer_game_calendar.cpp b/src/timer/timer_game_calendar.cpp index 3b7bc870a8..30f938464c 100644 --- a/src/timer/timer_game_calendar.cpp +++ b/src/timer/timer_game_calendar.cpp @@ -105,10 +105,13 @@ bool TimerManager::Elapsed([[maybe_unused]] TimerGameCalendar /* If we are using a non-default calendar progression speed, we need to check the sub_date_fract before updating date_fract. */ if (_settings_game.economy.minutes_per_calendar_year != CalendarTime::DEF_MINUTES_PER_YEAR) { - TimerGameCalendar::sub_date_fract++; + TimerGameCalendar::sub_date_fract += Ticks::DAY_TICKS; /* Check if we are ready to increment date_fract */ - if (TimerGameCalendar::sub_date_fract < (Ticks::DAY_TICKS * _settings_game.economy.minutes_per_calendar_year) / CalendarTime::DEF_MINUTES_PER_YEAR) return false; + const uint16_t threshold = (_settings_game.economy.minutes_per_calendar_year * Ticks::DAY_TICKS) / CalendarTime::DEF_MINUTES_PER_YEAR; + if (TimerGameCalendar::sub_date_fract < threshold) return false; + + TimerGameCalendar::sub_date_fract = std::min(TimerGameCalendar::sub_date_fract - threshold, Ticks::DAY_TICKS - 1); } TimerGameCalendar::date_fract++;