From cb9e088399cc2fa35357789ca5ee8acfbdaa840a Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Mon, 13 Nov 2023 18:45:18 +0000 Subject: [PATCH] Add setting to control autosave interval mode --- src/lang/extra/english.txt | 3 +++ src/openttd.cpp | 5 +++-- src/settings_gui.cpp | 1 + src/settings_type.h | 1 + src/table/settings/settings.ini | 10 ++++++++++ 5 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/lang/extra/english.txt b/src/lang/extra/english.txt index 1ce4360d05..cf2b0b1432 100644 --- a/src/lang/extra/english.txt +++ b/src/lang/extra/english.txt @@ -437,6 +437,9 @@ STR_CONFIG_SETTING_VIEWPORT_MAP_DRAW_ROUTE_DASH_HELPTEXT :How to draw the STR_CONFIG_SETTING_VIEWPORT_MAP_DRAW_ROUTE_DASH_VALUE :dashed lines of {COMMA} pixel{P "" s} STR_CONFIG_SETTING_VIEWPORT_MAP_DRAW_ROUTE_DASH_DISABLED :plain lines +STR_CONFIG_SETTING_AUTOSAVE_REALTIME :Autosave interval uses real-time: {STRING2} +STR_CONFIG_SETTING_AUTOSAVE_REALTIME_HELPTEXT :When enabled, autosave intervals uses real elapsed wall-clock time, (when paused autosaving will stop until you make any change to the game).{}When disabled, autosave intervals use elapsed game simulation time. + STR_CONFIG_SETTING_AUTOSAVE_ON_NETWORK_DISCONNECT :Autosave on network disconnection: {STRING2} STR_CONFIG_SETTING_AUTOSAVE_ON_NETWORK_DISCONNECT_HELPTEXT :When enabled, multiplayer clients automatically save the game when disconnected from the server diff --git a/src/openttd.cpp b/src/openttd.cpp index 2af5b8044b..85604f20c7 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -2106,7 +2106,7 @@ void StateGameLoop() _scaled_date_ticks++; // This must update in lock-step with _tick_skip_counter, such that it always matches what SetScaledTickVariables would return. } - if (!(_game_mode == GM_MENU || _game_mode == GM_BOOTSTRAP) && + if (!(_game_mode == GM_MENU || _game_mode == GM_BOOTSTRAP) && !_settings_client.gui.autosave_realtime && (_scaled_date_ticks % (_settings_client.gui.autosave_interval * (_settings_game.economy.tick_rate == TRM_MODERN ? (60000 / 27) : (60000 / 30)))) == 0) { _do_autosave = true; _check_special_modes = true; @@ -2228,7 +2228,8 @@ static IntervalTimer _autosave_interval({std::chrono::millise */ void ChangeAutosaveFrequency(bool reset) { - _autosave_interval.SetInterval({_settings_client.gui.autosave_realtime, TimerGameRealtime::AUTOSAVE}, reset); + std::chrono::minutes interval = _settings_client.gui.autosave_realtime ? std::chrono::minutes(_settings_client.gui.autosave_interval) : std::chrono::minutes::zero(); + _autosave_interval.SetInterval({interval, TimerGameRealtime::AUTOSAVE}, reset); } /** diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp index 5143ccddd0..a47adc8821 100644 --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -2001,6 +2001,7 @@ static SettingsContainer &GetSettingsTree() SettingsPage *save = interface->Add(new SettingsPage(STR_CONFIG_SETTING_INTERFACE_SAVE)); { save->Add(new SettingEntry("gui.autosave_interval")); + save->Add(new SettingEntry("gui.autosave_realtime")); save->Add(new SettingEntry("gui.autosave_on_network_disconnect")); save->Add(new SettingEntry("gui.savegame_overwrite_confirm")); } diff --git a/src/settings_type.h b/src/settings_type.h index d205a356de..a99ecc6795 100644 --- a/src/settings_type.h +++ b/src/settings_type.h @@ -177,6 +177,7 @@ struct GUISettings : public TimeSettings { ZoomLevel zoom_max; ///< maximum zoom out level ZoomLevel sprite_zoom_min; ///< maximum zoom level at which higher-resolution alternative sprites will be used (if available) instead of scaling a lower resolution sprite uint32 autosave_interval; ///< how often should we do autosaves? + bool autosave_realtime; ///< autosaves based on real elapsed time (with pause handling) bool threaded_saves; ///< should we do threaded saves? bool keep_all_autosave; ///< name the autosave in a different way bool autosave_on_exit; ///< save an autosave when you quit the game, but do not ask "Do you really want to quit?" diff --git a/src/table/settings/settings.ini b/src/table/settings/settings.ini index 877a3bc4ae..6ba0079c79 100644 --- a/src/table/settings/settings.ini +++ b/src/table/settings/settings.ini @@ -4525,6 +4525,16 @@ strval = STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_MINUTES_CUSTOM post_cb = AutosaveModeChanged cat = SC_BASIC +[SDTC_BOOL] +var = gui.autosave_realtime +flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC +def = true +str = STR_CONFIG_SETTING_AUTOSAVE_REALTIME +strhelp = STR_CONFIG_SETTING_AUTOSAVE_REALTIME_HELPTEXT +post_cb = AutosaveModeChanged +patchcat = SC_PATCH +cat = SC_EXPERT + [SDTC_BOOL] var = gui.threaded_saves flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC