diff --git a/docs/timestream.rst b/docs/timestream.rst index dc8405ec7..8b6b8eba6 100644 --- a/docs/timestream.rst +++ b/docs/timestream.rst @@ -19,14 +19,10 @@ your fully developed fort appear as energetic as the dwarves in a newly created fort, and mature forts are much more fun to play. Note that whereas your dwarves zip around like you're running at 100 FPS, the -onscreen FPS counter, if enabled, will still show a lower number. See the -`Technical details`_ section below if you're interested in what's going on +vanilla onscreen FPS counter, if enabled, will still show a lower number. See +the `Technical details`_ section below if you're interested in what's going on under the hood. -You can also use this tool to change the in-game calendar speed. Your dwarves -will be able to get less/more done per season (depending on whether you speed -up or slow down the calendar). - Usage ----- @@ -46,12 +42,7 @@ Examples which is usually 100). ``timestream set fps 50`` - Tweak the simulation so dwarves move at an apparent 50 frames per second. - -``timestream set calendar-rate 0.5`` - Make the days twice as long and allow dwarves to accomplish twice as much - per day (requires that your target FPS is set at least 2x higher than the - FPS the game is actually running at). + Tweak the simulation so it runs at an apparent 50 frames per second. ``timestream reset`` Reset settings to defaults: the vanilla FPS cap with no calendar speed @@ -66,15 +57,6 @@ Settings to set the vanilla FPS cap for that. Set a target FPS of -1 to make no adjustment at all to the apparent FPS of the game. -:calendar-rate: Set the calendar rate in relation to the target FPS. A calendar - rate factor of 1 means time flows "normally" for the units in the game. - Values between 0 and 1 slow the calendar relative to the world, allowing - units to get more done per day, and values above 1 speed the calendar - relative to the world, causing the days to pass quicker and preventing - units from getting as much done per day. The actual fps must be below the - configured target ``fps`` setting for the ``calendar-rate`` setting to take - effect. - Technical details ----------------- @@ -113,11 +95,12 @@ of their advantage. Limitations ----------- -DF does critial game tasks every 10 ticks that must not be skipped, so -`timestream` cannot advance more than 9 ticks at a time. This means that, with -the default target of 100 FPS, the game will start showing signs of slowdown if -the real FPS drops below about 15. The interface will also become less -responsive to mouse gestures as the real FPS drops. +DF does critial game tasks every 10 calendar ticks that must not be skipped, so +`timestream` cannot advance more than 9 ticks at a time. This puts an upper +limit on how much `timestream` can help. With the default target of 100 FPS, +the game will start showing signs of slowdown if the real FPS drops below about +15. The interface will also become less responsive to mouse gestures as the +real FPS drops. Finally, not all aspects of the game are perfectly adjusted. For example, armies on world map will move at the same (real-time) rate regardless of diff --git a/timestream.lua b/timestream.lua index da82f1673..38af30a8f 100644 --- a/timestream.lua +++ b/timestream.lua @@ -22,16 +22,6 @@ local SETTINGS = { end, default=function() return df.global.init.fps_cap end, }, - { - name='calendar-rate', - internal_name='calendar_rate', - validate=function(arg) - local val = tonumber(arg) - if not val or val <= 0 then qerror('calendar-rate must be larger than 0') end - return val - end, - default=1.0, - }, } local function get_default_state() @@ -74,7 +64,7 @@ local TICK_TRIGGERS = { } -- "owed" ticks we would like to skip at the next opportunity -local timeskip_deficit, calendar_timeskip_deficit = 0.0, 0.0 +local timeskip_deficit = 0.0 local function get_desired_timeskip(real_fps, desired_fps) -- minus 1 to account for the current frame @@ -265,7 +255,7 @@ end local function on_tick() local real_fps = math.max(1, dfhack.internal.getUnpausedFps()) if real_fps >= state.settings.fps then - timeskip_deficit, calendar_timeskip_deficit = 0.0, 0.0 + timeskip_deficit = 0.0 return end @@ -292,12 +282,8 @@ local function on_tick() end if timeskip <= 0 then return end - local desired_calendar_timeskip = (timeskip * state.settings.calendar_rate) + calendar_timeskip_deficit - local calendar_timeskip = math.max(1, math.floor(desired_calendar_timeskip)) - calendar_timeskip_deficit = math.max(0, desired_calendar_timeskip - calendar_timeskip) - - df.global.cur_year_tick = df.global.cur_year_tick + calendar_timeskip - df.global.cur_year_tick_advmode = df.global.cur_year_tick_advmode + calendar_timeskip*144 + df.global.cur_year_tick = df.global.cur_year_tick + timeskip + df.global.cur_year_tick_advmode = df.global.cur_year_tick_advmode + timeskip*144 adjust_units(timeskip) adjust_activities(timeskip) @@ -307,7 +293,7 @@ end -- hook management local function do_enable() - timeskip_deficit, calendar_timeskip_deficit = 0.0, 0.0 + timeskip_deficit = 0.0 state.enabled = true repeatutil.scheduleEvery(GLOBAL_KEY, 1, 'ticks', on_tick) end