summaryrefslogtreecommitdiff
path: root/src/table/settings
diff options
context:
space:
mode:
Diffstat (limited to 'src/table/settings')
-rw-r--r--src/table/settings/CMakeLists.txt47
-rw-r--r--src/table/settings/company_settings.ini130
-rw-r--r--src/table/settings/currency_settings.ini64
-rw-r--r--src/table/settings/gameopt_settings.ini178
-rw-r--r--src/table/settings/misc_settings.ini356
-rw-r--r--src/table/settings/settings.ini3893
-rw-r--r--src/table/settings/win32_settings.ini44
-rw-r--r--src/table/settings/window_settings.ini53
8 files changed, 4765 insertions, 0 deletions
diff --git a/src/table/settings/CMakeLists.txt b/src/table/settings/CMakeLists.txt
new file mode 100644
index 000000000..b1503145f
--- /dev/null
+++ b/src/table/settings/CMakeLists.txt
@@ -0,0 +1,47 @@
+set(GENERATED_BINARY_DIR ${CMAKE_BINARY_DIR}/generated)
+set(TABLE_BINARY_DIR ${GENERATED_BINARY_DIR}/table)
+
+set(TABLE_INI_SOURCE_FILES
+ ${CMAKE_CURRENT_SOURCE_DIR}/company_settings.ini
+ ${CMAKE_CURRENT_SOURCE_DIR}/currency_settings.ini
+ ${CMAKE_CURRENT_SOURCE_DIR}/gameopt_settings.ini
+ ${CMAKE_CURRENT_SOURCE_DIR}/misc_settings.ini
+ ${CMAKE_CURRENT_SOURCE_DIR}/settings.ini
+ ${CMAKE_CURRENT_SOURCE_DIR}/win32_settings.ini
+ ${CMAKE_CURRENT_SOURCE_DIR}/window_settings.ini
+)
+
+if (HOST_BINARY_DIR)
+ include(${HOST_BINARY_DIR}/settingsgen.cmake)
+endif()
+
+# Generate a command and target to create the settings table
+add_custom_command_timestamp(OUTPUT ${TABLE_BINARY_DIR}/settings.h
+ COMMAND ${CMAKE_COMMAND} -E make_directory ${TABLE_BINARY_DIR}
+ COMMAND settingsgen
+ -o ${TABLE_BINARY_DIR}/settings.h
+ -b ${CMAKE_SOURCE_DIR}/src/table/settings.h.preamble
+ -a ${CMAKE_SOURCE_DIR}/src/table/settings.h.postamble
+ ${TABLE_INI_SOURCE_FILES}
+ DEPENDS settingsgen ${TABLE_INI_SOURCE_FILES}
+ ${CMAKE_SOURCE_DIR}/src/table/settings.h.preamble
+ ${CMAKE_SOURCE_DIR}/src/table/settings.h.postamble
+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+ COMMENT "Generating table/settings.h"
+)
+add_custom_target_timestamp(table_settings
+ DEPENDS
+ ${TABLE_BINARY_DIR}/settings.h
+)
+
+add_library(settings
+ INTERFACE
+)
+target_include_directories(settings
+ INTERFACE
+ ${GENERATED_BINARY_DIR}
+)
+add_dependencies(settings
+ table_settings
+)
+add_library(openttd::settings ALIAS settings)
diff --git a/src/table/settings/company_settings.ini b/src/table/settings/company_settings.ini
new file mode 100644
index 000000000..bb104adeb
--- /dev/null
+++ b/src/table/settings/company_settings.ini
@@ -0,0 +1,130 @@
+; This file is part of OpenTTD.
+; OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
+; OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+; See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
+;
+
+[pre-amble]
+static void UpdateServiceInterval(int32 new_value);
+static bool CanUpdateServiceInterval(VehicleType type, int32 &new_value);
+static void UpdateServiceInterval(VehicleType type, int32 new_value);
+
+static const SettingTable _company_settings{
+[post-amble]
+};
+[templates]
+SDT_BOOL = SDT_BOOL(CompanySettings, $var, $flags, $guiflags, $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $cat, $extra, $startup),
+SDT_VAR = SDT_VAR(CompanySettings, $var, $type, $flags, $guiflags, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $cat, $extra, $startup),
+
+[validation]
+SDT_VAR = static_assert($max <= MAX_$type, "Maximum value for CompanySettings.$var exceeds storage size");
+
+[defaults]
+flags = 0
+guiflags = SGF_PER_COMPANY
+interval = 0
+str = STR_NULL
+strhelp = STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT
+strval = STR_NULL
+pre_cb = nullptr
+post_cb = nullptr
+load = nullptr
+from = SL_MIN_VERSION
+to = SL_MAX_VERSION
+cat = SC_ADVANCED
+extra = 0
+startup = false
+
+
+
+[SDT_BOOL]
+var = engine_renew
+def = true
+str = STR_CONFIG_SETTING_AUTORENEW_VEHICLE
+strhelp = STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT
+cat = SC_BASIC
+
+[SDT_VAR]
+var = engine_renew_months
+type = SLE_INT16
+guiflags = SGF_PER_COMPANY | SGF_DISPLAY_ABS
+def = 6
+min = -12
+max = 12
+str = STR_CONFIG_SETTING_AUTORENEW_MONTHS
+strhelp = STR_CONFIG_SETTING_AUTORENEW_MONTHS_HELPTEXT
+strval = STR_CONFIG_SETTING_AUTORENEW_MONTHS_VALUE_BEFORE
+
+[SDT_VAR]
+var = engine_renew_money
+type = SLE_UINT
+guiflags = SGF_PER_COMPANY | SGF_CURRENCY
+def = 100000
+min = 0
+max = 2000000
+str = STR_CONFIG_SETTING_AUTORENEW_MONEY
+strhelp = STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT
+strval = STR_JUST_CURRENCY_LONG
+
+[SDT_BOOL]
+var = renew_keep_length
+def = false
+
+[SDT_BOOL]
+var = vehicle.servint_ispercent
+def = false
+str = STR_CONFIG_SETTING_SERVINT_ISPERCENT
+strhelp = STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT
+post_cb = UpdateServiceInterval
+
+[SDT_VAR]
+var = vehicle.servint_trains
+type = SLE_UINT16
+guiflags = SGF_PER_COMPANY | SGF_0ISDISABLED
+def = 150
+min = 5
+max = 800
+str = STR_CONFIG_SETTING_SERVINT_TRAINS
+strhelp = STR_CONFIG_SETTING_SERVINT_TRAINS_HELPTEXT
+strval = STR_CONFIG_SETTING_SERVINT_VALUE
+pre_cb = [](auto new_value) { return CanUpdateServiceInterval(VEH_TRAIN, new_value); }
+post_cb = [](auto new_value) { UpdateServiceInterval(VEH_TRAIN, new_value); }
+
+[SDT_VAR]
+var = vehicle.servint_roadveh
+type = SLE_UINT16
+guiflags = SGF_PER_COMPANY | SGF_0ISDISABLED
+def = 150
+min = 5
+max = 800
+str = STR_CONFIG_SETTING_SERVINT_ROAD_VEHICLES
+strhelp = STR_CONFIG_SETTING_SERVINT_ROAD_VEHICLES_HELPTEXT
+strval = STR_CONFIG_SETTING_SERVINT_VALUE
+pre_cb = [](auto new_value) { return CanUpdateServiceInterval(VEH_ROAD, new_value); }
+post_cb = [](auto new_value) { UpdateServiceInterval(VEH_ROAD, new_value); }
+
+[SDT_VAR]
+var = vehicle.servint_ships
+type = SLE_UINT16
+guiflags = SGF_PER_COMPANY | SGF_0ISDISABLED
+def = 360
+min = 5
+max = 800
+str = STR_CONFIG_SETTING_SERVINT_SHIPS
+strhelp = STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT
+strval = STR_CONFIG_SETTING_SERVINT_VALUE
+pre_cb = [](auto new_value) { return CanUpdateServiceInterval(VEH_SHIP, new_value); }
+post_cb = [](auto new_value) { UpdateServiceInterval(VEH_SHIP, new_value); }
+
+[SDT_VAR]
+var = vehicle.servint_aircraft
+type = SLE_UINT16
+guiflags = SGF_PER_COMPANY | SGF_0ISDISABLED
+def = 100
+min = 5
+max = 800
+str = STR_CONFIG_SETTING_SERVINT_AIRCRAFT
+strhelp = STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT
+strval = STR_CONFIG_SETTING_SERVINT_VALUE
+pre_cb = [](auto new_value) { return CanUpdateServiceInterval(VEH_AIRCRAFT, new_value); }
+post_cb = [](auto new_value) { UpdateServiceInterval(VEH_AIRCRAFT, new_value); }
diff --git a/src/table/settings/currency_settings.ini b/src/table/settings/currency_settings.ini
new file mode 100644
index 000000000..ce0213758
--- /dev/null
+++ b/src/table/settings/currency_settings.ini
@@ -0,0 +1,64 @@
+; This file is part of OpenTTD.
+; OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
+; OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+; See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
+;
+
+[pre-amble]
+static const SettingTable _currency_settings{
+[post-amble]
+};
+[templates]
+SDT_VAR = SDT_VAR (CurrencySpec, $var, $type, $flags, $guiflags, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $cat, $extra, $startup),
+SDT_SSTR = SDT_SSTR(CurrencySpec, $var, $type, $flags, $guiflags, $def, $pre_cb, $post_cb, $from, $to, $cat, $extra, $startup),
+
+[validation]
+SDT_VAR = static_assert($max <= MAX_$type, "Maximum value for CurrencySpec.$var exceeds storage size");
+
+[defaults]
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+guiflags = SGF_NONE
+interval = 0
+str = STR_NULL
+strhelp = STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT
+strval = STR_NULL
+pre_cb = nullptr
+post_cb = nullptr
+load = nullptr
+from = SL_MIN_VERSION
+to = SL_MAX_VERSION
+cat = SC_ADVANCED
+extra = 0
+startup = false
+
+
+
+[SDT_VAR]
+var = rate
+type = SLE_UINT16
+def = 1
+min = 0
+max = UINT16_MAX
+
+[SDT_SSTR]
+var = separator
+type = SLE_STRQ
+def = "".""
+cat = SC_BASIC
+
+[SDT_VAR]
+var = to_euro
+type = SLE_INT32
+def = 0
+min = MIN_YEAR
+max = MAX_YEAR
+
+[SDT_SSTR]
+var = prefix
+type = SLE_STRQ
+def = nullptr
+
+[SDT_SSTR]
+var = suffix
+type = SLE_STRQ
+def = "" credits""
diff --git a/src/table/settings/gameopt_settings.ini b/src/table/settings/gameopt_settings.ini
new file mode 100644
index 000000000..b3b7ec651
--- /dev/null
+++ b/src/table/settings/gameopt_settings.ini
@@ -0,0 +1,178 @@
+; This file is part of OpenTTD.
+; OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
+; OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+; See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
+;
+
+[pre-amble]
+static const uint GAME_DIFFICULTY_NUM = 18;
+static uint16 _old_diff_custom[GAME_DIFFICULTY_NUM];
+uint8 _old_diff_level; ///< Old difficulty level from old savegames
+uint8 _old_units; ///< Old units from old savegames
+
+/* Most of these strings are used both for gameopt-backward compatibility
+ * and the settings tables. The rest is here for consistency. */
+static std::initializer_list<const char*> _locale_currencies{"GBP", "USD", "EUR", "YEN", "ATS", "BEF", "CHF", "CZK", "DEM", "DKK", "ESP", "FIM", "FRF", "GRD", "HUF", "ISK", "ITL", "NLG", "NOK", "PLN", "RON", "RUR", "SIT", "SEK", "YTL", "SKK", "BRL", "EEK", "custom"};
+static std::initializer_list<const char*> _locale_units{"imperial", "metric", "si", "gameunits"};
+static std::initializer_list<const char*> _town_names{"english", "french", "german", "american", "latin", "silly", "swedish", "dutch", "finnish", "polish", "slovak", "norwegian", "hungarian", "austrian", "romanian", "czech", "swiss", "danish", "turkish", "italian", "catalan"};
+static std::initializer_list<const char*> _climates{"temperate", "arctic", "tropic", "toyland"};
+static std::initializer_list<const char*> _autosave_interval{"off", "monthly", "quarterly", "half year", "yearly"};
+static std::initializer_list<const char*> _roadsides{"left", "right"};
+static std::initializer_list<const char*> _savegame_date{"long", "short", "iso"};
+static std::initializer_list<const char*> _osk_activation{"disabled", "double", "single", "immediately"};
+static std::initializer_list<const char*> _settings_profiles{"easy", "medium", "hard"};
+static std::initializer_list<const char*> _news_display{ "off", "summarized", "full"};
+
+static const SettingTable _gameopt_settings{
+/* In version 4 a new difficulty setting has been added to the difficulty settings,
+ * town attitude towards demolishing. Needs special handling because some dimwit thought
+ * it funny to have the GameDifficulty struct be an array while it is a struct of
+ * same-sized members
+ * XXX - To save file-space and since values are never bigger than about 10? only
+ * save the first 16 bits in the savegame. Question is why the values are still int32
+ * and why not byte for example?
+ * 'SLE_FILE_I16 | SLE_VAR_U16' in "diff_custom" is needed to get around SlArray() hack
+ * for savegames version 0 - though it is an array, it has to go through the byteswap process */
+[post-amble]
+};
+[templates]
+SDTG_LIST = SDTG_LIST($name, $type, $flags, $guiflags, $var, $def, $length, $from, $to, $cat, $extra, $startup),
+SDTG_VAR = SDTG_VAR($name, $type, $flags, $guiflags, $var, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $cat, $extra, $startup),
+SDT_NULL = SDT_NULL( $length, $from, $to),
+SDTC_OMANY = SDTC_OMANY( $var, $type, $flags, $guiflags, $def, $max, $full, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $cat, $extra, $startup),
+SDTG_OMANY = SDTG_OMANY($name, $type, $flags, $guiflags, $var, $def, $max, $full, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $cat, $extra, $startup),
+SDT_OMANY = SDT_OMANY(GameSettings, $var, $type, $flags, $guiflags, $def, $max, $full, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $load, $cat, $extra, $startup),
+SDT_VAR = SDT_VAR(GameSettings, $var, $type, $flags, $guiflags, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $cat, $extra, $startup),
+
+[validation]
+SDTG_VAR = static_assert($max <= MAX_$type, "Maximum value for $var exceeds storage size");
+SDTG_OMANY = static_assert($max <= MAX_$type, "Maximum value for $var exceeds storage size");
+SDTC_OMANY = static_assert($max <= MAX_$type, "Maximum value for $var exceeds storage size");
+SDT_OMANY = static_assert($max <= MAX_$type, "Maximum value for GameSettings.$var exceeds storage size");
+SDT_VAR = static_assert($max <= MAX_$type, "Maximum value for GameSettings.$var exceeds storage size");
+
+[defaults]
+flags = 0
+guiflags = SGF_NONE
+interval = 0
+str = STR_NULL
+strhelp = STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT
+strval = STR_NULL
+pre_cb = nullptr
+post_cb = nullptr
+load = nullptr
+from = SL_MIN_VERSION
+to = SL_MAX_VERSION
+cat = SC_ADVANCED
+extra = 0
+startup = false
+
+
+
+[SDTG_LIST]
+name = ""diff_custom""
+sdt_cmd = SDT_INTLIST
+sle_cmd = SL_ARR
+type = SLE_FILE_I16 | SLE_VAR_U16
+flags = SLF_NOT_IN_CONFIG
+var = _old_diff_custom
+length = 17
+def = nullptr
+to = SLV_4
+
+[SDTG_LIST]
+name = ""diff_custom""
+sdt_cmd = SDT_INTLIST
+sle_cmd = SL_ARR
+type = SLE_UINT16
+flags = SLF_NOT_IN_CONFIG
+var = _old_diff_custom
+length = 18
+def = nullptr
+full = nullptr
+from = SLV_4
+
+##
+[SDTG_VAR]
+name = ""diff_level""
+var = _old_diff_level
+type = SLE_UINT8
+flags = SLF_NOT_IN_CONFIG
+def = SP_CUSTOM
+min = SP_EASY
+max = SP_CUSTOM
+cat = SC_BASIC
+
+[SDT_OMANY]
+var = locale.currency
+type = SLE_UINT8
+flags = SLF_NO_NETWORK_SYNC
+def = 0
+max = CURRENCY_END - 1
+full = _locale_currencies
+cat = SC_BASIC
+
+[SDTG_OMANY]
+name = ""units""
+var = _old_units
+type = SLE_UINT8
+flags = SLF_NOT_IN_CONFIG
+def = 1
+max = 2
+full = _locale_units
+cat = SC_BASIC
+
+# There are only 21 predefined town_name values (0-20), but you can have more with newgrf action F so allow
+# these bigger values (21-255). Invalid values will fallback to english on use and (undefined string) in GUI.
+[SDT_OMANY]
+var = game_creation.town_name
+type = SLE_UINT8
+def = 0
+max = 255
+full = _town_names
+cat = SC_BASIC
+
+[SDT_OMANY]
+var = game_creation.landscape
+type = SLE_UINT8
+def = 0
+max = 3
+full = _climates
+load = ConvertLandscape
+cat = SC_BASIC
+
+[SDT_VAR]
+var = game_creation.snow_line_height
+type = SLE_UINT8
+def = DEF_SNOWLINE_HEIGHT * TILE_HEIGHT
+min = MIN_SNOWLINE_HEIGHT * TILE_HEIGHT
+# "max" used to be MAX_SNOWLINE_HEIGHT * TILE_HEIGHT, but this would overflow the storage.
+max = UINT8_MAX
+to = SLV_22
+
+[SDT_NULL]
+length = 1
+from = SLV_22
+to = SLV_165
+
+[SDT_NULL]
+length = 1
+to = SLV_23
+
+[SDTC_OMANY]
+var = gui.autosave
+type = SLE_UINT8
+from = SLV_23
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+def = 1
+max = 4
+full = _autosave_interval
+cat = SC_BASIC
+
+[SDT_OMANY]
+var = vehicle.road_side
+type = SLE_UINT8
+def = 1
+max = 1
+full = _roadsides
+cat = SC_BASIC
diff --git a/src/table/settings/misc_settings.ini b/src/table/settings/misc_settings.ini
new file mode 100644
index 000000000..1b633a65a
--- /dev/null
+++ b/src/table/settings/misc_settings.ini
@@ -0,0 +1,356 @@
+; This file is part of OpenTTD.
+; OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
+; OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+; See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
+;
+
+[pre-amble]
+extern std::string _config_language_file;
+
+static std::initializer_list<const char*> _support8bppmodes{"no", "system" , "hardware"};
+static std::initializer_list<const char*> _display_opt_modes{"SHOW_TOWN_NAMES", "SHOW_STATION_NAMES", "SHOW_SIGNS", "FULL_ANIMATION", "", "FULL_DETAIL", "WAYPOINTS", "SHOW_COMPETITOR_SIGNS"};
+
+#ifdef WITH_COCOA
+extern bool _allow_hidpi_window;
+#endif
+#ifndef WITH_COCOA
+#define WITHOUT_COCOA
+#endif
+
+static const SettingTable _misc_settings{
+[post-amble]
+};
+[templates]
+SDTG_LIST = SDTG_LIST($name, $type, $flags, $guiflags, $var, $def, $length, $from, $to, $cat, $extra, $startup),
+SDTG_MMANY = SDTG_MMANY($name, $type, $flags, $guiflags, $var, $def, $full, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $cat, $extra, $startup),
+SDTG_OMANY = SDTG_OMANY($name, $type, $flags, $guiflags, $var, $def, $max, $full, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $cat, $extra, $startup),
+SDTG_SSTR = SDTG_SSTR($name, $type, $flags, $guiflags, $var, $def, 0, $pre_cb, $post_cb, $from, $to, $cat, $extra, $startup),
+SDTG_BOOL = SDTG_BOOL($name, $flags, $guiflags, $var, $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $cat, $extra, $startup),
+SDTG_VAR = SDTG_VAR($name, $type, $flags, $guiflags, $var, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $cat, $extra, $startup),
+
+[validation]
+SDTG_VAR = static_assert($max <= MAX_$type, "Maximum value for $var exceeds storage size");
+SDTG_OMANY = static_assert($max <= MAX_$type, "Maximum value for $var exceeds storage size");
+
+[defaults]
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+guiflags = SGF_NONE
+interval = 0
+str = STR_NULL
+strhelp = STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT
+strval = STR_NULL
+pre_cb = nullptr
+post_cb = nullptr
+load = nullptr
+from = SL_MIN_VERSION
+to = SL_MAX_VERSION
+cat = SC_ADVANCED
+extra = 0
+startup = true
+
+
+
+[SDTG_MMANY]
+name = ""display_opt""
+type = SLE_UINT8
+var = _display_opt
+def = (1 << DO_SHOW_TOWN_NAMES | 1 << DO_SHOW_STATION_NAMES | 1 << DO_SHOW_SIGNS | 1 << DO_FULL_ANIMATION | 1 << DO_FULL_DETAIL | 1 << DO_SHOW_WAYPOINT_NAMES | 1 << DO_SHOW_COMPETITOR_SIGNS)
+full = _display_opt_modes
+
+[SDTG_BOOL]
+name = ""fullscreen""
+var = _fullscreen
+def = false
+cat = SC_BASIC
+
+[SDTG_BOOL]
+ifdef = WITH_COCOA
+name = ""video_hw_accel""
+var = _video_hw_accel
+def = false
+cat = SC_BASIC
+
+[SDTG_BOOL]
+ifdef = WITHOUT_COCOA
+name = ""video_hw_accel""
+var = _video_hw_accel
+def = true
+cat = SC_BASIC
+
+[SDTG_BOOL]
+name = ""video_vsync""
+var = _video_vsync
+def = false
+cat = SC_BASIC
+
+[SDTG_OMANY]
+name = ""support8bpp""
+type = SLE_UINT8
+var = _support8bpp
+def = 0
+max = 2
+full = _support8bppmodes
+cat = SC_BASIC
+
+[SDTG_SSTR]
+name = ""graphicsset""
+type = SLE_STRQ
+var = BaseGraphics::ini_set
+def = nullptr
+cat = SC_BASIC
+
+[SDTG_SSTR]
+name = ""soundsset""
+type = SLE_STRQ
+var = BaseSounds::ini_set
+def = nullptr
+cat = SC_BASIC
+
+[SDTG_SSTR]
+name = ""musicset""
+type = SLE_STRQ
+var = BaseMusic::ini_set
+def = nullptr
+cat = SC_BASIC
+
+[SDTG_SSTR]
+name = ""videodriver""
+type = SLE_STRQ
+var = _ini_videodriver
+def = nullptr
+cat = SC_EXPERT
+
+[SDTG_SSTR]
+name = ""musicdriver""
+type = SLE_STRQ
+var = _ini_musicdriver
+def = nullptr
+cat = SC_EXPERT
+
+[SDTG_SSTR]
+name = ""sounddriver""
+type = SLE_STRQ
+var = _ini_sounddriver
+def = nullptr
+cat = SC_EXPERT
+
+[SDTG_SSTR]
+name = ""blitter""
+type = SLE_STRQ
+var = _ini_blitter
+def = nullptr
+
+[SDTG_SSTR]
+name = ""language""
+type = SLE_STR
+var = _config_language_file
+def = nullptr
+cat = SC_BASIC
+
+; workaround for implicit lengthof() in SDTG_LIST
+[SDTG_LIST]
+name = ""resolution""
+type = SLE_INT
+length = 2
+var = _cur_resolution
+def = ""0,0""
+cat = SC_BASIC
+
+[SDTG_SSTR]
+name = ""screenshot_format""
+type = SLE_STR
+var = _screenshot_format_name
+def = nullptr
+cat = SC_EXPERT
+
+[SDTG_SSTR]
+name = ""savegame_format""
+type = SLE_STR
+var = _savegame_format
+def = nullptr
+cat = SC_EXPERT
+
+[SDTG_BOOL]
+name = ""rightclick_emulate""
+var = _rightclick_emulate
+def = false
+
+[SDTG_SSTR]
+ifdef = HAS_TRUETYPE_FONT
+name = ""small_font""
+type = SLE_STR
+var = _freetype.small.font
+def = nullptr
+
+[SDTG_SSTR]
+ifdef = HAS_TRUETYPE_FONT
+name = ""medium_font""
+type = SLE_STR
+var = _freetype.medium.font
+def = nullptr
+
+[SDTG_SSTR]
+ifdef = HAS_TRUETYPE_FONT
+name = ""large_font""
+type = SLE_STR
+var = _freetype.large.font
+def = nullptr
+
+[SDTG_SSTR]
+ifdef = HAS_TRUETYPE_FONT
+name = ""mono_font""
+type = SLE_STR
+var = _freetype.mono.font
+def = nullptr
+
+[SDTG_VAR]
+ifdef = HAS_TRUETYPE_FONT
+name = ""small_size""
+type = SLE_UINT
+var = _freetype.small.size
+def = 0
+min = 0
+max = 72
+
+[SDTG_VAR]
+ifdef = HAS_TRUETYPE_FONT
+name = ""medium_size""
+type = SLE_UINT
+var = _freetype.medium.size
+def = 0
+min = 0
+max = 72
+
+[SDTG_VAR]
+ifdef = HAS_TRUETYPE_FONT
+name = ""large_size""
+type = SLE_UINT
+var = _freetype.large.size
+def = 0
+min = 0
+max = 72
+
+[SDTG_VAR]
+ifdef = HAS_TRUETYPE_FONT
+name = ""mono_size""
+type = SLE_UINT
+var = _freetype.mono.size
+def = 0
+min = 0
+max = 72
+
+[SDTG_BOOL]
+ifdef = HAS_TRUETYPE_FONT
+name = ""small_aa""
+var = _freetype.small.aa
+def = false
+
+[SDTG_BOOL]
+ifdef = HAS_TRUETYPE_FONT
+name = ""medium_aa""
+var = _freetype.medium.aa
+def = false
+
+[SDTG_BOOL]
+ifdef = HAS_TRUETYPE_FONT
+name = ""large_aa""
+var = _freetype.large.aa
+def = false
+
+[SDTG_BOOL]
+ifdef = HAS_TRUETYPE_FONT
+name = ""mono_aa""
+var = _freetype.mono.aa
+def = false
+
+[SDTG_VAR]
+name = ""sprite_cache_size_px""
+type = SLE_UINT
+var = _sprite_cache_size
+def = 128
+min = 1
+max = 512
+cat = SC_EXPERT
+
+[SDTG_VAR]
+name = ""player_face""
+type = SLE_UINT32
+var = _company_manager_face
+def = 0
+min = 0
+max = 0xFFFFFFFF
+cat = SC_BASIC
+
+[SDTG_VAR]
+name = ""transparency_options""
+type = SLE_UINT
+var = _transparency_opt
+def = 0
+min = 0
+max = 0x1FF
+cat = SC_BASIC
+
+[SDTG_VAR]
+name = ""transparency_locks""
+type = SLE_UINT
+var = _transparency_lock
+def = 0
+min = 0
+max = 0x1FF
+cat = SC_BASIC
+
+[SDTG_VAR]
+name = ""invisibility_options""
+type = SLE_UINT
+var = _invisibility_opt
+def = 0
+min = 0
+max = 0xFF
+cat = SC_BASIC
+
+[SDTG_SSTR]
+name = ""keyboard""
+type = SLE_STR
+var = _keyboard_opt[0]
+def = nullptr
+cat = SC_EXPERT
+
+[SDTG_SSTR]
+name = ""keyboard_caps""
+type = SLE_STR
+var = _keyboard_opt[1]
+def = nullptr
+cat = SC_EXPERT
+
+[SDTG_VAR]
+name = ""last_newgrf_count""
+type = SLE_UINT32
+var = _settings_client.gui.last_newgrf_count
+def = 100
+min = 0
+max = UINT32_MAX
+cat = SC_EXPERT
+
+[SDTG_VAR]
+name = ""gui_zoom""
+type = SLE_INT8
+var = _gui_zoom_cfg
+def = ZOOM_LVL_CFG_AUTO
+min = ZOOM_LVL_CFG_AUTO
+max = ZOOM_LVL_OUT_4X
+cat = SC_BASIC
+
+[SDTG_VAR]
+name = ""font_zoom""
+type = SLE_INT8
+var = _font_zoom_cfg
+def = ZOOM_LVL_CFG_AUTO
+min = ZOOM_LVL_CFG_AUTO
+max = ZOOM_LVL_OUT_4X
+cat = SC_BASIC
+
+[SDTG_BOOL]
+ifdef = WITH_COCOA
+name = ""allow_hidpi""
+var = _allow_hidpi_window
+def = true
diff --git a/src/table/settings/settings.ini b/src/table/settings/settings.ini
new file mode 100644
index 000000000..3c22ec4c1
--- /dev/null
+++ b/src/table/settings/settings.ini
@@ -0,0 +1,3893 @@
+; This file is part of OpenTTD.
+; OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
+; OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+; See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
+;
+
+[pre-amble]
+/* Begin - Callback Functions for the various settings */
+static void v_PositionMainToolbar(int32 new_value);
+static void v_PositionStatusbar(int32 new_value);
+static void RedrawSmallmap(int32 new_value);
+static void StationSpreadChanged(int32 new_value);
+static void CloseSignalGUI(int32 new_value);
+static void UpdateConsists(int32 new_value);
+static void TrainAccelerationModelChanged(int32 new_value);
+static void RoadVehAccelerationModelChanged(int32 new_value);
+static void TrainSlopeSteepnessChanged(int32 new_value);
+static void RoadVehSlopeSteepnessChanged(int32 new_value);
+static void TownFoundingChanged(int32 new_value);
+static void DifficultyNoiseChange(int32 new_value);
+static void MaxNoAIsChange(int32 new_value);
+static bool CheckRoadSide(int32 &new_value);
+static bool CheckMaxHeightLevel(int32 &new_value);
+static bool CheckFreeformEdges(int32 &new_value);
+static void UpdateFreeformEdges(int32 new_value);
+static bool CheckDynamicEngines(int32 &new_value);
+static void StationCatchmentChanged(int32 new_value);
+static void InvalidateCompanyLiveryWindow(int32 new_value);
+static void InvalidateNewGRFChangeWindows(int32 new_value);
+static void ZoomMinMaxChanged(int32 new_value);
+static void SpriteZoomMinChanged(int32 new_value);
+static void MaxVehiclesChanged(int32 new_value);
+static void InvalidateShipPathCache(int32 new_value);
+
+static bool ReplaceAsteriskWithEmptyPassword(std::string &newval);
+static void UpdateClientConfigValues();
+
+/* End - Callback Functions for the various settings */
+
+/* Some settings do not need to be synchronised when playing in multiplayer.
+ * These include for example the GUI settings and will not be saved with the
+ * savegame.
+ * It is also a bit tricky since you would think that service_interval
+ * for example does not need to be synched. Every client assigns the
+ * service_interval value to the v->service_interval, meaning that every client
+ * assigns its own value. If the setting was company-based, that would mean that
+ * vehicles could decide on different moments that they are heading back to a
+ * service depot, causing desyncs on a massive scale. */
+const SettingTable _settings{
+[post-amble]
+};
+[templates]
+SDTG_BOOL = SDTG_BOOL($name, $flags, $guiflags, $var, $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $cat, $extra, $startup),
+SDTG_VAR = SDTG_VAR($name, $type, $flags, $guiflags, $var, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $cat, $extra, $startup),
+SDTG_OMANY = SDTG_OMANY($name, $type, $flags, $guiflags, $var, $def, $max, $full, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $cat, $extra, $startup),
+SDTC_BOOL = SDTC_BOOL( $var, $flags, $guiflags, $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $cat, $extra, $startup),
+SDTC_LIST = SDTC_LIST( $var, $type, $flags, $guiflags, $def, $from, $to, $cat, $extra, $startup),
+SDTC_OMANY = SDTC_OMANY( $var, $type, $flags, $guiflags, $def, $max, $full, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $cat, $extra, $startup),
+SDTC_SSTR = SDTC_SSTR( $var, $type, $flags, $guiflags, $def, $length, $pre_cb, $post_cb, $from, $to, $cat, $extra, $startup),
+SDTC_VAR = SDTC_VAR( $var, $type, $flags, $guiflags, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $cat, $extra, $startup),
+SDT_BOOL = SDT_BOOL(GameSettings, $var, $flags, $guiflags, $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $cat, $extra, $startup),
+SDT_OMANY = SDT_OMANY(GameSettings, $var, $type, $flags, $guiflags, $def, $max, $full, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $load, $cat, $extra, $startup),
+SDT_SSTR = SDT_SSTR(GameSettings, $var, $type, $flags, $guiflags, $def, $pre_cb, $post_cb, $from, $to, $cat, $extra, $startup),
+SDT_VAR = SDT_VAR(GameSettings, $var, $type, $flags, $guiflags, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $cat, $extra, $startup),
+SDT_NULL = SDT_NULL( $length, $from, $to),
+
+[validation]
+SDTG_VAR = static_assert($max <= MAX_$type, "Maximum value for $var exceeds storage size");
+SDTG_OMANY = static_assert($max <= MAX_$type, "Maximum value for $var exceeds storage size");
+SDTC_OMANY = static_assert($max <= MAX_$type, "Maximum value for $var exceeds storage size");
+SDTC_VAR = static_assert($max <= MAX_$type, "Maximum value for $var exceeds storage size");
+SDT_OMANY = static_assert($max <= MAX_$type, "Maximum value for GameSettings.$var exceeds storage size");
+SDT_VAR = static_assert($max <= MAX_$type, "Maximum value for GameSettings.$var exceeds storage size");
+
+[defaults]
+flags = 0
+guiflags = SGF_NONE
+interval = 0
+str = STR_NULL
+strhelp = STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT
+strval = STR_NULL
+pre_cb = nullptr
+post_cb = nullptr
+load = nullptr
+from = SL_MIN_VERSION
+to = SL_MAX_VERSION
+cat = SC_ADVANCED
+extra = 0
+startup = false
+
+
+
+; Saved settings variables.
+; Do not ADD or REMOVE something in this "difficulty.XXX" table or before it. It breaks savegame compatibility.
+[SDT_VAR]
+var = difficulty.max_no_competitors
+type = SLE_UINT8
+from = SLV_97
+def = 0
+min = 0
+max = MAX_COMPANIES - 1
+interval = 1
+post_cb = MaxNoAIsChange
+cat = SC_BASIC
+
+[SDT_NULL]
+length = 1
+from = SLV_97
+to = SLV_110
+
+[SDT_VAR]
+var = difficulty.number_towns
+type = SLE_UINT8
+from = SLV_97
+guiflags = SGF_NEWGAME_ONLY
+def = 2
+min = 0
+max = 4
+interval = 1
+strval = STR_NUM_VERY_LOW
+cat = SC_BASIC
+
+[SDT_VAR]
+var = difficulty.industry_density
+type = SLE_UINT8
+from = SLV_97
+guiflags = SGF_MULTISTRING
+def = ID_END - 1
+min = 0
+max = ID_END - 1
+interval = 1
+str = STR_CONFIG_SETTING_INDUSTRY_DENSITY
+strhelp = STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT
+strval = STR_FUNDING_ONLY
+cat = SC_BASIC
+
+[SDT_VAR]
+var = difficulty.max_loan
+type = SLE_UINT32
+from = SLV_97
+guiflags = SGF_NEWGAME_ONLY | SGF_SCENEDIT_TOO | SGF_CURRENCY
+def = 300000
+min = 0
+max = 2000000000
+interval = 50000
+str = STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN
+strhelp = STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT
+strval = STR_JUST_CURRENCY_LONG
+cat = SC_BASIC
+
+[SDT_VAR]
+var = difficulty.initial_interest
+type = SLE_UINT8
+from = SLV_97
+guiflags = SGF_NEWGAME_ONLY | SGF_SCENEDIT_TOO
+def = 2
+min = 2
+max = 4
+interval = 1
+str = STR_CONFIG_SETTING_INTEREST_RATE
+strhelp = STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT
+strval = STR_CONFIG_SETTING_PERCENTAGE
+
+[SDT_VAR]
+var = difficulty.vehicle_costs
+type = SLE_UINT8
+from = SLV_97
+guiflags = SGF_NEWGAME_ONLY | SGF_SCENEDIT_TOO | SGF_MULTISTRING
+def = 0
+min = 0
+max = 2
+interval = 1
+str = STR_CONFIG_SETTING_RUNNING_COSTS
+strhelp = STR_CONFIG_SETTING_RUNNING_COSTS_HELPTEXT
+strval = STR_SEA_LEVEL_LOW
+cat = SC_BASIC
+
+[SDT_VAR]
+var = difficulty.competitor_speed
+type = SLE_UINT8
+from = SLV_97
+guiflags = SGF_MULTISTRING
+def = 2
+min = 0
+max = 4
+interval = 1
+str = STR_CONFIG_SETTING_CONSTRUCTION_SPEED
+strhelp = STR_CONFIG_SETTING_CONSTRUCTION_SPEED_HELPTEXT
+strval = STR_AI_SPEED_VERY_SLOW
+cat = SC_BASIC
+
+[SDT_NULL]
+length = 1
+from = SLV_97
+to = SLV_110
+
+[SDT_VAR]
+var = difficulty.vehicle_breakdowns
+type = SLE_UINT8
+from = SLV_97
+guiflags = SGF_MULTISTRING
+def = 1
+min = 0
+max = 2
+interval = 1
+str = STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS
+strhelp = STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS_HELPTEXT
+strval = STR_DISASTER_NONE
+cat = SC_BASIC
+
+[SDT_VAR]
+var = difficulty.subsidy_multiplier
+type = SLE_UINT8
+from = SLV_97
+guiflags = SGF_MULTISTRING
+def = 2
+min = 0
+max = 3
+interval = 1
+str = STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER
+strhelp = STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER_HELPTEXT
+strval = STR_SUBSIDY_X1_5
+
+[SDT_VAR]
+var = difficulty.construction_cost
+type = SLE_UINT8
+from = SLV_97
+guiflags = SGF_NEWGAME_ONLY | SGF_SCENEDIT_TOO | SGF_MULTISTRING
+def = 0
+min = 0
+max = 2
+interval = 1
+str = STR_CONFIG_SETTING_CONSTRUCTION_COSTS
+strhelp = STR_CONFIG_SETTING_CONSTRUCTION_COSTS_HELPTEXT
+strval = STR_SEA_LEVEL_LOW
+cat = SC_BASIC
+
+[SDT_VAR]
+var = difficulty.terrain_type
+type = SLE_UINT8
+from = SLV_97
+guiflags = SGF_MULTISTRING | SGF_NEWGAME_ONLY
+def = 1
+min = 0
+max = 5
+interval = 1
+str = STR_CONFIG_SETTING_TERRAIN_TYPE
+strhelp = STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT
+strval = STR_TERRAIN_TYPE_VERY_FLAT
+cat = SC_BASIC
+
+[SDT_VAR]
+var = difficulty.quantity_sea_lakes
+type = SLE_UINT8
+from = SLV_97
+guiflags = SGF_NEWGAME_ONLY
+def = 0
+min = 0
+max = 4
+interval = 1
+strval = STR_SEA_LEVEL_VERY_LOW
+cat = SC_BASIC
+
+[SDT_BOOL]
+var = difficulty.economy
+from = SLV_97
+def = false
+str = STR_CONFIG_SETTING_RECESSIONS
+strhelp = STR_CONFIG_SETTING_RECESSIONS_HELPTEXT
+
+[SDT_BOOL]
+var = difficulty.line_reverse_mode
+from = SLV_97
+def = false
+str = STR_CONFIG_SETTING_TRAIN_REVERSING
+strhelp = STR_CONFIG_SETTING_TRAIN_REVERSING_HELPTEXT
+
+[SDT_BOOL]
+var = difficulty.disasters
+from = SLV_97
+def = false
+str = STR_CONFIG_SETTING_DISASTERS
+strhelp = STR_CONFIG_SETTING_DISASTERS_HELPTEXT
+cat = SC_BASIC
+
+[SDT_VAR]
+var = difficulty.town_council_tolerance
+type = SLE_UINT8
+from = SLV_97
+guiflags = SGF_MULTISTRING
+def = 0
+min = 0
+max = 2
+interval = 1
+str = STR_CONFIG_SETTING_CITY_APPROVAL
+strhelp = STR_CONFIG_SETTING_CITY_APPROVAL_HELPTEXT
+strval = STR_CITY_APPROVAL_PERMISSIVE
+post_cb = DifficultyNoiseChange
+
+[SDTG_VAR]
+name = ""diff_level""
+var = _old_diff_level
+type = SLE_UINT8
+flags = SLF_NOT_IN_CONFIG
+from = SLV_97
+to = SLV_178
+def = 3
+min = 0
+max = 3
+cat = SC_BASIC
+
+; There are only 21 predefined town_name values (0-20), but you can have more with newgrf action F so allow
+; these bigger values (21-255). Invalid values will fallback to english on use and (undefined string) in GUI.
+[SDT_OMANY]
+var = game_creation.town_name
+type = SLE_UINT8
+from = SLV_97
+guiflags = SGF_NO_NETWORK
+def = 0
+max = 255
+full = _town_names
+cat = SC_BASIC
+
+[SDT_OMANY]
+var = game_creation.landscape
+type = SLE_UINT8
+from = SLV_97
+guiflags = SGF_MULTISTRING | SGF_NEWGAME_ONLY
+def = 0
+max = 3
+full = _climates
+load = ConvertLandscape
+str = STR_CONFIG_SETTING_LANDSCAPE
+strhelp = STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT
+strval = STR_CHEAT_SWITCH_CLIMATE_TEMPERATE_LANDSCAPE
+cat = SC_BASIC
+
+; Snow line (or snow_line_height * TILE_HEIGHT)
+[SDT_NULL]
+length = 1
+from = SLV_97
+to = SLV_164
+
+[SDT_OMANY]
+var = vehicle.road_side
+type = SLE_UINT8
+from = SLV_97
+guiflags = SGF_MULTISTRING | SGF_NO_NETWORK
+def = 1
+max = 1
+full = _roadsides
+str = STR_CONFIG_SETTING_ROAD_SIDE
+strhelp = STR_CONFIG_SETTING_ROAD_SIDE_HELPTEXT
+strval = STR_GAME_OPTIONS_ROAD_VEHICLES_DROPDOWN_LEFT
+pre_cb = CheckRoadSide
+cat = SC_BASIC
+
+; Construction
+
+[SDT_VAR]
+var = construction.map_height_limit
+type = SLE_UINT8
+from = SLV_194
+guiflags = SGF_NEWGAME_ONLY | SGF_SCENEDIT_TOO | SGF_0ISDISABLED
+def = 0
+min = MIN_MAP_HEIGHT_LIMIT
+max = MAX_MAP_HEIGHT_LIMIT
+interval = 1
+str = STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT
+strhelp = STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_HELPTEXT
+strval = STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_VALUE
+pre_cb = CheckMaxHeightLevel
+post_cb = [](auto) { InvalidateWindowClassesData(WC_SMALLMAP, 2); }
+cat = SC_ADVANCED
+
+[SDT_VAR]
+var = game_creation.heightmap_height
+type = SLE_UINT8
+from = SLV_MAPGEN_SETTINGS_REVAMP
+guiflags = SGF_NEWGAME_ONLY
+def = MAP_HEIGHT_LIMIT_AUTO_MINIMUM
+min = MIN_HEIGHTMAP_HEIGHT
+max = MAX_MAP_HEIGHT_LIMIT
+interval = 1
+
+[SDT_BOOL]
+var = construction.build_on_slopes
+guiflags = SGF_NO_NETWORK
+def = true
+cat = SC_EXPERT
+
+[SDT_VAR]
+var = construction.command_pause_level
+type = SLE_UINT8
+from = SLV_154
+guiflags = SGF_MULTISTRING | SGF_NO_NETWORK
+def = 1
+min = 0
+max = 3
+interval = 1
+str = STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL
+strhelp = STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_HELPTEXT
+strval = STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_NO_ACTIONS
+
+[SDT_VAR]
+var = construction.terraform_per_64k_frames
+type = SLE_UINT32
+from = SLV_156
+def = 64 << 16
+min = 0
+max = 1 << 30
+interval = 1
+cat = SC_EXPERT
+
+[SDT_VAR]
+var = construction.terraform_frame_burst
+type = SLE_UINT16
+from = SLV_156
+def = 4096
+min = 0
+max = 1 << 15
+interval = 1
+cat = SC_EXPERT
+
+[SDT_VAR]
+var = construction.clear_per_64k_frames
+type = SLE_UINT32
+from = SLV_156
+def = 64 << 16
+min = 0
+max = 1 << 30
+interval = 1
+cat = SC_EXPERT
+
+[SDT_VAR]
+var = construction.clear_frame_burst
+type = SLE_UINT16
+from = SLV_156
+def = 4096
+min = 0
+max = 1 << 15
+interval = 1
+cat = SC_EXPERT
+
+[SDT_VAR]
+var = construction.tree_per_64k_frames
+type = SLE_UINT32
+from = SLV_175
+def = 64 << 16
+min = 0
+max = 1 << 30
+interval = 1
+cat = SC_EXPERT
+
+[SDT_VAR]
+var = construction.tree_frame_burst
+type = SLE_UINT16
+from = SLV_175
+def = 4096
+min = 0
+max = 1 << 15
+interval = 1
+cat = SC_EXPERT
+
+[SDT_BOOL]
+var = construction.autoslope
+from = SLV_75
+def = true
+str = STR_CONFIG_SETTING_AUTOSLOPE
+strhelp = STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT
+cat = SC_EXPERT
+
+[SDT_BOOL]
+var = construction.extra_dynamite
+def = true
+str = STR_CONFIG_SETTING_EXTRADYNAMITE
+strhelp = STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT
+
+[SDT_VAR]
+var = construction.max_bridge_length
+type = SLE_UINT16
+from = SLV_159
+guiflags = SGF_NO_NETWORK
+def = 64
+min = 1
+max = MAX_MAP_SIZE
+interval = 1
+str = STR_CONFIG_SETTING_MAX_BRIDGE_LENGTH
+strhelp = STR_CONFIG_SETTING_MAX_BRIDGE_LENGTH_HELPTEXT
+strval = STR_CONFIG_SETTING_TILE_LENGTH
+
+[SDT_VAR]
+var = construction.max_bridge_height
+type = SLE_UINT8
+from = SLV_194
+guiflags = SGF_NO_NETWORK
+def = 12
+min = 1
+max = MAX_TILE_HEIGHT
+interval = 1
+str = STR_CONFIG_SETTING_MAX_BRIDGE_HEIGHT
+strhelp = STR_CONFIG_SETTING_MAX_BRIDGE_HEIGHT_HELPTEXT
+strval = STR_JUST_COMMA
+cat = SC_EXPERT
+
+[SDT_VAR]
+var = construction.max_tunnel_length
+type = SLE_UINT16
+from = SLV_159
+guiflags = SGF_NO_NETWORK
+def = 64
+min = 1
+max = MAX_MAP_SIZE
+interval = 1
+str = STR_CONFIG_SETTING_MAX_TUNNEL_LENGTH
+strhelp = STR_CONFIG_SETTING_MAX_TUNNEL_LENGTH_HELPTEXT
+strval = STR_CONFIG_SETTING_TILE_LENGTH
+
+# construction.longbridges
+[SDT_NULL]
+length = 1
+to = SLV_159
+
+[SDT_VAR]
+var = construction.train_signal_side
+type = SLE_UINT8
+guiflags = SGF_MULTISTRING | SGF_NO_NETWORK
+def = 1
+min = 0
+max = 2
+str = STR_CONFIG_SETTING_SIGNALSIDE
+strhelp = STR_CONFIG_SETTING_SIGNALSIDE_HELPTEXT
+strval = STR_CONFIG_SETTING_SIGNALSIDE_LEFT
+post_cb = [](auto) { MarkWholeScreenDirty(); }
+cat = SC_BASIC
+
+[SDT_BOOL]
+var = station.never_expire_airports
+guiflags = SGF_NO_NETWORK
+def = false
+str = STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS
+strhelp = STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT
+
+[SDT_VAR]
+var = economy.town_layout
+type = SLE_UINT8
+from = SLV_59
+guiflags = SGF_MULTISTRING
+def = TL_ORIGINAL
+min = TL_BEGIN
+max = NUM_TLS - 1
+interval = 1
+str = STR_CONFIG_SETTING_TOWN_LAYOUT
+strhelp = STR_CONFIG_SETTING_TOWN_LAYOUT_HELPTEXT
+strval = STR_CONFIG_SETTING_TOWN_LAYOUT_DEFAULT
+post_cb = TownFoundingChanged
+
+[SDT_BOOL]
+var = economy.allow_town_roads
+from = SLV_113
+guiflags = SGF_NO_NETWORK
+def = true
+str = STR_CONFIG_SETTING_ALLOW_TOWN_ROADS
+strhelp = STR_CONFIG_SETTING_ALLOW_TOWN_ROADS_HELPTEXT
+
+[SDT_VAR]
+var = economy.found_town
+type = SLE_UINT8
+from = SLV_128
+guiflags = SGF_MULTISTRING
+def = TF_FORBIDDEN
+min = TF_BEGIN
+max = TF_END - 1
+interval = 1
+str = STR_CONFIG_SETTING_TOWN_FOUNDING
+strhelp = STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT
+strval = STR_CONFIG_SETTING_TOWN_FOUNDING_FORBIDDEN
+post_cb = TownFoundingChanged
+cat = SC_BASIC
+
+[SDT_BOOL]
+var = economy.allow_town_level_crossings
+from = SLV_143
+guiflags = SGF_NO_NETWORK
+def = true
+str = STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS
+strhelp = STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS_HELPTEXT
+
+[SDT_VAR]
+var = economy.town_cargogen_mode
+type = SLE_UINT8
+from = SLV_TOWN_CARGOGEN
+guiflags = SGF_MULTISTRING
+def = TCGM_BITCOUNT
+min = TCGM_BEGIN
+max = TCGM_END - 1
+interval = 1
+str = STR_CONFIG_SETTING_TOWN_CARGOGENMODE
+strhelp = STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT
+strval = STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL
+cat = SC_ADVANCED
+
+; link graph
+
+[SDT_VAR]
+var = linkgraph.recalc_interval
+type = SLE_UINT16
+from = SLV_183
+def = 4
+min = 2
+max = 32
+interval = 2
+str = STR_CONFIG_SETTING_LINKGRAPH_INTERVAL
+strval = STR_JUST_COMMA
+strhelp = STR_CONFIG_SETTING_LINKGRAPH_INTERVAL_HELPTEXT
+extra = offsetof(LinkGraphSettings, recalc_interval)
+
+[SDT_VAR]
+var = linkgraph.recalc_time
+type = SLE_UINT16
+from = SLV_183
+def = 16
+min = 1
+max = 4096
+interval = 1
+str = STR_CONFIG_SETTING_LINKGRAPH_TIME
+strval = STR_JUST_COMMA
+strhelp = STR_CONFIG_SETTING_LINKGRAPH_TIME_HELPTEXT
+extra = offsetof(LinkGraphSettings, recalc_time)
+
+
+[SDT_VAR]
+var = linkgraph.distribution_pax
+type = SLE_UINT8
+from = SLV_183
+guiflags = SGF_MULTISTRING
+def = DT_MANUAL
+min = DT_MIN
+max = DT_MAX
+interval = 1
+str = STR_CONFIG_SETTING_DISTRIBUTION_PAX
+strval = STR_CONFIG_SETTING_DISTRIBUTION_MANUAL
+strhelp = STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT
+extra = offsetof(LinkGraphSettings, distribution_pax)
+
+
+[SDT_VAR]
+var = linkgraph.distribution_mail
+type = SLE_UINT8
+from = SLV_183
+guiflags = SGF_MULTISTRING
+def = DT_MANUAL
+min = DT_MIN
+max = DT_MAX
+interval = 1
+str = STR_CONFIG_SETTING_DISTRIBUTION_MAIL
+strval = STR_CONFIG_SETTING_DISTRIBUTION_MANUAL
+strhelp = STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT
+extra = offsetof(LinkGraphSettings, distribution_mail)
+
+
+[SDT_VAR]
+var = linkgraph.distribution_armoured
+type = SLE_UINT8
+from = SLV_183
+guiflags = SGF_MULTISTRING
+def = DT_MANUAL
+min = DT_MIN
+max = DT_MAX
+interval = 1
+str = STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED
+strval = STR_CONFIG_SETTING_DISTRIBUTION_MANUAL
+strhelp = STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT
+extra = offsetof(LinkGraphSettings, distribution_armoured)
+
+
+[SDT_VAR]
+var = linkgraph.distribution_default
+type = SLE_UINT8
+from = SLV_183
+guiflags = SGF_MULTISTRING
+def = DT_MANUAL
+min = DT_BEGIN
+max = DT_MAX_NONSYMMETRIC
+interval = 1
+str = STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT
+strval = STR_CONFIG_SETTING_DISTRIBUTION_MANUAL
+strhelp = STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT
+extra = offsetof(LinkGraphSettings, distribution_default)
+
+
+[SDT_VAR]
+var = linkgraph.accuracy
+type = SLE_UINT8
+from = SLV_183
+def = 16
+min = 2
+max = 64
+interval = 1
+str = STR_CONFIG_SETTING_LINKGRAPH_ACCURACY
+strval = STR_JUST_COMMA
+strhelp = STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT
+extra = offsetof(LinkGraphSettings, accuracy)
+
+
+[SDT_VAR]
+var = linkgraph.demand_distance
+type = SLE_UINT8
+from = SLV_183
+def = 100
+min = 0
+max = 255
+interval = 5
+str = STR_CONFIG_SETTING_DEMAND_DISTANCE
+strval = STR_CONFIG_SETTING_PERCENTAGE
+strhelp = STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT
+extra = offsetof(LinkGraphSettings, demand_distance)
+
+
+[SDT_VAR]
+var = linkgraph.demand_size
+type = SLE_UINT8
+from = SLV_183
+def = 100
+min = 0
+max = 100
+interval = 5
+str = STR_CONFIG_SETTING_DEMAND_SIZE
+strval = STR_CONFIG_SETTING_PERCENTAGE
+strhelp = STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT
+extra = offsetof(LinkGraphSettings, demand_size)
+
+
+[SDT_VAR]
+var = linkgraph.short_path_saturation
+type = SLE_UINT8
+from = SLV_183
+def = 80
+min = 0
+max = 250
+interval = 5
+str = STR_CONFIG_SETTING_SHORT_PATH_SATURATION
+strval = STR_CONFIG_SETTING_PERCENTAGE
+strhelp = STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT
+extra = offsetof(LinkGraphSettings, short_path_saturation)
+
+
+; Vehicles
+
+[SDT_VAR]
+var = vehicle.train_acceleration_model
+type = SLE_UINT8
+guiflags = SGF_MULTISTRING
+def = 1
+min = 0
+max = 1
+interval = 1
+str = STR_CONFIG_SETTING_TRAIN_ACCELERATION_MODEL
+strhelp = STR_CONFIG_SETTING_TRAIN_ACCELERATION_MODEL_HELPTEXT
+strval = STR_CONFIG_SETTING_ORIGINAL
+post_cb = TrainAccelerationModelChanged
+
+[SDT_VAR]
+var = vehicle.roadveh_acceleration_model
+type = SLE_UINT8
+from = SLV_139
+guiflags = SGF_MULTISTRING
+def = 1
+min = 0
+max = 1
+interval = 1
+str = STR_CONFIG_SETTING_ROAD_VEHICLE_ACCELERATION_MODEL
+strhelp = STR_CONFIG_SETTING_ROAD_VEHICLE_ACCELERATION_MODEL_HELPTEXT
+strval = STR_CONFIG_SETTING_ORIGINAL
+post_cb = RoadVehAccelerationModelChanged
+
+[SDT_VAR]
+var = vehicle.train_slope_steepness
+type = SLE_UINT8
+from = SLV_133
+def = 3
+min = 0
+max = 10
+interval = 1
+str = STR_CONFIG_SETTING_TRAIN_SLOPE_STEEPNESS
+strhelp = STR_CONFIG_SETTING_TRAIN_SLOPE_STEEPNESS_HELPTEXT
+strval = STR_CONFIG_SETTING_PERCENTAGE
+post_cb = TrainSlopeSteepnessChanged
+cat = SC_EXPERT
+
+[SDT_VAR]
+var = vehicle.roadveh_slope_steepness
+type = SLE_UINT8
+from = SLV_139
+def = 7
+min = 0
+max = 10
+interval = 1
+str = STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS
+strhelp = STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS_HELPTEXT
+strval = STR_CONFIG_SETTING_PERCENTAGE
+post_cb = RoadVehSlopeSteepnessChanged
+cat = SC_EXPERT
+
+[SDT_BOOL]
+var = pf.forbid_90_deg
+def = false
+str = STR_CONFIG_SETTING_FORBID_90_DEG
+strhelp = STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT
+post_cb = InvalidateShipPathCache
+cat = SC_EXPERT
+
+[SDT_VAR]
+var = vehicle.max_train_length
+type = SLE_UINT8
+from = SLV_159
+def = 7
+min = 1
+max = 64
+interval = 1
+str = STR_CONFIG_SETTING_TRAIN_LENGTH
+strhelp = STR_CONFIG_SETTING_TRAIN_LENGTH_HELPTEXT
+strval = STR_CONFIG_SETTING_TILE_LENGTH
+cat = SC_BASIC
+
+; vehicle.mammoth_trains
+[SDT_NULL]
+length = 1
+to = SLV_159
+
+[SDT_VAR]
+var = vehicle.smoke_amount
+type = SLE_UINT8
+from = SLV_145
+guiflags = SGF_MULTISTRING
+def = 1
+min = 0
+max = 2
+str = STR_CONFIG_SETTING_SMOKE_AMOUNT
+strhelp = STR_CONFIG_SETTING_SMOKE_AMOUNT_HELPTEXT
+strval = STR_CONFIG_SETTING_NONE
+
+; order.gotodepot
+[SDT_NULL]
+length = 1
+to = SLV_159
+
+; path finder
+
+[SDT_BOOL]
+var = pf.roadveh_queue
+def = true
+cat = SC_EXPERT
+
+[SDT_BOOL]
+var = pf.new_pathfinding_all
+to = SLV_87
+def = false
+cat = SC_EXPERT
+
+[SDT_BOOL]
+var = pf.yapf.ship_use_yapf
+from = SLV_28
+to = SLV_87
+def = false
+cat = SC_EXPERT
+
+[SDT_BOOL]
+var = pf.yapf.road_use_yapf
+from = SLV_28
+to = SLV_87
+def = true
+cat = SC_EXPERT
+
+[SDT_BOOL]
+var = pf.yapf.rail_use_yapf
+from = SLV_28
+to = SLV_87
+def = true
+cat = SC_EXPERT
+
+##
+[SDT_VAR]
+var = pf.pathfinder_for_trains
+type = SLE_UINT8
+from = SLV_87
+guiflags = SGF_MULTISTRING
+def = 2
+min = 1
+max = 2
+interval = 1
+str = STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS
+strhelp = STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS_HELPTEXT
+strval = STR_CONFIG_SETTING_PATHFINDER_NPF
+cat = SC_EXPERT
+
+[SDT_VAR]
+var = pf.pathfinder_for_roadvehs
+type = SLE_UINT8
+from = SLV_87
+guiflags = SGF_MULTISTRING
+def = 2
+min = 1
+max = 2
+interval = 1
+str = STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES
+strhelp = STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES_HELPTEXT
+strval = STR_CONFIG_SETTING_PATHFINDER_NPF
+cat = SC_EXPERT
+
+[SDT_VAR]
+var = pf.pathfinder_for_ships
+type = SLE_UINT8
+from = SLV_87
+guiflags = SGF_MULTISTRING
+def = 2
+min = 1
+max = 2
+interval = 1
+str = STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS
+strhelp = STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS_HELPTEXT
+strval = STR_CONFIG_SETTING_PATHFINDER_NPF
+post_cb = InvalidateShipPathCache
+cat = SC_EXPERT
+
+[SDT_BOOL]
+var = vehicle.never_expire_vehicles
+guiflags = SGF_NO_NETWORK
+def = false
+str = STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES
+strhelp = STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT
+
+[SDT_VAR]
+var = vehicle.max_trains
+type = SLE_UINT16
+def = 500
+min = 0
+max = 5000
+str = STR_CONFIG_SETTING_MAX_TRAINS
+strhelp = STR_CONFIG_SETTING_MAX_TRAINS_HELPTEXT
+strval = STR_JUST_COMMA
+post_cb = MaxVehiclesChanged
+cat = SC_BASIC
+
+[SDT_VAR]
+var = vehicle.max_roadveh
+type = SLE_UINT16
+def = 500
+min = 0
+max = 5000
+str = STR_CONFIG_SETTING_MAX_ROAD_VEHICLES
+strhelp = STR_CONFIG_SETTING_MAX_ROAD_VEHICLES_HELPTEXT
+strval = STR_JUST_COMMA
+post_cb = MaxVehiclesChanged
+cat = SC_BASIC
+
+[SDT_VAR]
+var = vehicle.max_aircraft
+type = SLE_UINT16
+def = 200
+min = 0
+max = 5000
+str = STR_CONFIG_SETTING_MAX_AIRCRAFT
+strhelp = STR_CONFIG_SETTING_MAX_AIRCRAFT_HELPTEXT
+strval = STR_JUST_COMMA
+post_cb = MaxVehiclesChanged
+cat = SC_BASIC
+
+[SDT_VAR]
+var = vehicle.max_ships
+type = SLE_UINT16
+def = 300
+min = 0
+max = 5000
+str = STR_CONFIG_SETTING_MAX_SHIPS
+strhelp = STR_CONFIG_SETTING_MAX_SHIPS_HELPTEXT
+strval = STR_JUST_COMMA
+post_cb = MaxVehiclesChanged
+cat = SC_BASIC
+
+[SDTG_BOOL]
+name = nullptr
+guiflags = SGF_NO_NETWORK
+var = _old_vds.servint_ispercent
+def = false
+to = SLV_120
+
+[SDTG_VAR]
+name = nullptr
+type = SLE_UINT16
+guiflags = SGF_0ISDISABLED
+var = _old_vds.servint_trains
+def = 150
+min = 5
+max = 800
+to = SLV_120
+
+[SDTG_VAR]
+name = nullptr
+type = SLE_UINT16
+guiflags = SGF_0ISDISABLED
+var = _old_vds.servint_roadveh
+def = 150
+min = 5
+max = 800
+to = SLV_120
+
+[SDTG_VAR]
+name = nullptr
+type = SLE_UINT16
+guiflags = SGF_0ISDISABLED
+var = _old_vds.servint_ships
+def = 360
+min = 5
+max = 800
+to = SLV_120
+
+[SDTG_VAR]
+name = nullptr
+type = SLE_UINT16
+guiflags = SGF_0ISDISABLED
+var = _old_vds.servint_aircraft
+def = 150
+min = 5
+max = 800
+to = SLV_120
+
+[SDT_BOOL]
+var = order.no_servicing_if_no_breakdowns
+def = true
+str = STR_CONFIG_SETTING_NOSERVICE
+strhelp = STR_CONFIG_SETTING_NOSERVICE_HELPTEXT
+
+[SDT_BOOL]
+var = vehicle.wagon_speed_limits
+guiflags = SGF_NO_NETWORK
+def = true
+str = STR_CONFIG_SETTING_WAGONSPEEDLIMITS
+strhelp = STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT
+post_cb = UpdateConsists
+
+[SDT_BOOL]
+var = vehicle.disable_elrails
+from = SLV_38
+guiflags = SGF_NO_NETWORK
+def = false
+str = STR_CONFIG_SETTING_DISABLE_ELRAILS
+strhelp = STR_CONFIG_SETTING_DISABLE_ELRAILS_HELPTEXT
+post_cb = SettingsDisableElrail
+cat = SC_EXPERT
+
+[SDT_VAR]
+var = vehicle.freight_trains
+type = SLE_UINT8
+from = SLV_39
+guiflags = SGF_NO_NETWORK
+def = 1
+min = 1
+max = 255
+interval = 1
+str = STR_CONFIG_SETTING_FREIGHT_TRAINS
+strhelp = STR_CONFIG_SETTING_FREIGHT_TRAINS_HELPTEXT
+strval = STR_JUST_COMMA
+post_cb = UpdateConsists
+
+; order.timetabling
+[SDT_NULL]
+length = 1
+from = SLV_67
+to = SLV_159
+
+[SDT_VAR]
+var = vehicle.plane_speed
+type = SLE_UINT8
+from = SLV_90
+guiflags = SGF_NO_NETWORK
+def = 4
+min = 1
+max = 4
+str = STR_CONFIG_SETTING_PLANE_SPEED
+strhelp = STR_CONFIG_SETTING_PLANE_SPEED_HELPTEXT
+strval = STR_CONFIG_SETTING_PLANE_SPEED_VALUE
+
+[SDT_BOOL]
+var = vehicle.dynamic_engines
+from = SLV_95
+guiflags = SGF_NO_NETWORK
+def = true
+pre_cb = CheckDynamicEngines
+cat = SC_EXPERT
+
+[SDT_VAR]
+var = vehicle.plane_crashes
+type = SLE_UINT8
+from = SLV_138
+guiflags = SGF_MULTISTRING
+def = 2
+min = 0
+max = 2
+interval = 1
+str = STR_CONFIG_SETTING_PLANE_CRASHES
+strhelp = STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT
+strval = STR_CONFIG_SETTING_PLANE_CRASHES_NONE
+cat = SC_BASIC
+
+; station.join_stations
+[SDT_NULL]
+length = 1
+to = SLV_159
+
+[SDTC_BOOL]
+var = gui.sg_full_load_any
+from = SLV_22
+to = SLV_93
+def = true
+
+[SDT_BOOL]
+var = order.improved_load
+guiflags = SGF_NO_NETWORK
+def = true
+cat = SC_EXPERT
+
+[SDT_BOOL]
+var = order.selectgoods
+def = true
+cat = SC_EXPERT
+
+[SDTC_BOOL]
+var = gui.sg_new_nonstop
+from = SLV_22
+to = SLV_93
+def = false
+
+; station.nonuniform_stations
+[SDT_NULL]
+length = 1
+to = SLV_159
+
+[SDT_VAR]
+var = station.station_spread
+type = SLE_UINT8
+def = 12
+min = 4
+max = 64
+str = STR_CONFIG_SETTING_STATION_SPREAD
+strhelp = STR_CONFIG_SETTING_STATION_SPREAD_HELPTEXT
+strval = STR_CONFIG_SETTING_TILE_LENGTH
+post_cb = StationSpreadChanged
+cat = SC_BASIC
+
+[SDT_BOOL]
+var = order.serviceathelipad
+def = true
+str = STR_CONFIG_SETTING_SERVICEATHELIPAD
+strhelp = STR_CONFIG_SETTING_SERVICEATHELIPAD_HELPTEXT
+cat = SC_EXPERT
+
+[SDT_BOOL]
+var = station.modified_catchment
+def = true
+str = STR_CONFIG_SETTING_CATCHMENT
+strhelp = STR_CONFIG_SETTING_CATCHMENT_HELPTEXT
+post_cb = StationCatchmentChanged
+cat = SC_EXPERT
+
+[SDT_BOOL]
+var = station.serve_neutral_industries
+def = true
+from = SLV_SERVE_NEUTRAL_INDUSTRIES
+str = STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES
+strhelp = STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES_HELPTEXT
+post_cb = StationCatchmentChanged
+
+[SDT_BOOL]
+var = order.gradual_loading
+from = SLV_40
+guiflags = SGF_NO_NETWORK
+def = true
+cat = SC_EXPERT
+
+[SDT_BOOL]
+var = construction.road_stop_on_town_road
+from = SLV_47
+def = true
+str = STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD
+strhelp = STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD_HELPTEXT
+cat = SC_BASIC
+
+[SDT_BOOL]
+var = construction.road_stop_on_competitor_road
+from = SLV_114
+def = true
+str = STR_CONFIG_SETTING_STOP_ON_COMPETITOR_ROAD
+strhelp = STR_CONFIG_SETTING_STOP_ON_COMPETITOR_ROAD_HELPTEXT
+cat = SC_BASIC
+
+[SDT_BOOL]
+var = station.adjacent_stations
+from = SLV_62
+def = true
+cat = SC_EXPERT
+
+[SDT_BOOL]
+var = economy.station_noise_level
+from = SLV_96
+guiflags = SGF_NO_NETWORK
+def = false
+str = STR_CONFIG_SETTING_NOISE_LEVEL
+strhelp = STR_CONFIG_SETTING_NOISE_LEVEL_HELPTEXT
+post_cb = [](auto new_value) { InvalidateWindowClassesData(WC_TOWN_VIEW, new_value); }
+
+[SDT_BOOL]
+var = station.distant_join_stations
+from = SLV_106
+def = true
+str = STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS
+strhelp = STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT
+post_cb = [](auto) { DeleteWindowById(WC_SELECT_STATION, 0); }
+
+##
+[SDT_BOOL]
+var = economy.inflation
+guiflags = SGF_NO_NETWORK
+def = false
+str = STR_CONFIG_SETTING_INFLATION
+strhelp = STR_CONFIG_SETTING_INFLATION_HELPTEXT
+cat = SC_BASIC
+
+[SDT_VAR]
+var = construction.raw_industry_construction
+type = SLE_UINT8
+guiflags = SGF_MULTISTRING
+def = 0
+min = 0
+max = 2
+str = STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD
+strhelp = STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_HELPTEXT
+strval = STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_NONE
+post_cb = [](auto) { InvalidateWindowData(WC_BUILD_INDUSTRY, 0); }
+cat = SC_BASIC
+
+[SDT_VAR]
+var = construction.industry_platform
+type = SLE_UINT8
+from = SLV_148
+def = 1
+min = 0
+max = 4
+str = STR_CONFIG_SETTING_INDUSTRY_PLATFORM
+strhelp = STR_CONFIG_SETTING_INDUSTRY_PLATFORM_HELPTEXT
+strval = STR_CONFIG_SETTING_TILE_LENGTH
+cat = SC_EXPERT
+
+[SDT_BOOL]
+var = economy.multiple_industry_per_town
+def = false
+str = STR_CONFIG_SETTING_MULTIPINDTOWN
+strhelp = STR_CONFIG_SETTING_MULTIPINDTOWN_HELPTEXT
+
+[SDT_NULL]
+length = 1
+to = SLV_141
+
+[SDT_BOOL]
+var = economy.bribe
+def = true
+str = STR_CONFIG_SETTING_BRIBE
+strhelp = STR_CONFIG_SETTING_BRIBE_HELPTEXT
+post_cb = [](auto) { SetWindowClassesDirty(WC_TOWN_AUTHORITY); }
+cat = SC_BASIC
+
+[SDT_BOOL]
+var = economy.exclusive_rights
+from = SLV_79
+def = true
+str = STR_CONFIG_SETTING_ALLOW_EXCLUSIVE
+strhelp = STR_CONFIG_SETTING_ALLOW_EXCLUSIVE_HELPTEXT
+post_cb = [](auto) { SetWindowClassesDirty(WC_TOWN_AUTHORITY); }
+cat = SC_BASIC
+
+[SDT_BOOL]
+var = economy.fund_buildings
+from = SLV_165
+def = true
+str = STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS
+strhelp = STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS_HELPTEXT
+post_cb = [](auto) { SetWindowClassesDirty(WC_TOWN_AUTHORITY); }
+cat = SC_BASIC
+
+[SDT_BOOL]
+var = economy.fund_roads
+from = SLV_160
+def = true
+str = STR_CONFIG_SETTING_ALLOW_FUND_ROAD
+strhelp = STR_CONFIG_SETTING_ALLOW_FUND_ROAD_HELPTEXT
+post_cb = [](auto) { SetWindowClassesDirty(WC_TOWN_AUTHORITY); }
+cat = SC_BASIC
+
+[SDT_BOOL]
+var = economy.give_money
+from = SLV_79
+def = true
+str = STR_CONFIG_SETTING_ALLOW_GIVE_MONEY
+strhelp = STR_CONFIG_SETTING_ALLOW_GIVE_MONEY_HELPTEXT
+cat = SC_BASIC
+
+[SDT_VAR]
+var = game_creation.snow_line_height
+type = SLE_UINT8
+guiflags = SGF_SCENEDIT_ONLY
+def = DEF_SNOWLINE_HEIGHT
+min = MIN_SNOWLINE_HEIGHT
+max = MAX_SNOWLINE_HEIGHT
+interval = 1
+str = STR_CONFIG_SETTING_SNOWLINE_HEIGHT
+strhelp = STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT
+strval = STR_JUST_COMMA
+cat = SC_BASIC
+
+[SDT_VAR]
+var = game_creation.snow_coverage
+type = SLE_UINT8
+from = SLV_MAPGEN_SETTINGS_REVAMP
+guiflags = SGF_NEWGAME_ONLY
+def = DEF_SNOW_COVERAGE
+min = 0
+max = 100
+interval = 10
+str = STR_CONFIG_SETTING_SNOW_COVERAGE
+strhelp = STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT
+strval = STR_CONFIG_SETTING_SNOW_COVERAGE_VALUE
+cat = SC_BASIC
+
+[SDT_VAR]
+var = game_creation.desert_coverage
+type = SLE_UINT8
+from = SLV_MAPGEN_SETTINGS_REVAMP
+guiflags = SGF_NEWGAME_ONLY
+def = DEF_DESERT_COVERAGE
+min = 0
+max = 100
+interval = 10
+str = STR_CONFIG_SETTING_DESERT_COVERAGE
+strhelp = STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT
+strval = STR_CONFIG_SETTING_DESERT_COVERAGE_VALUE
+cat = SC_BASIC
+
+[SDT_NULL]
+length = 4
+to = SLV_144
+
+[SDT_VAR]
+var = game_creation.starting_year
+type = SLE_INT32
+def = DEF_START_YEAR
+min = MIN_YEAR
+max = MAX_YEAR
+interval = 1
+str = STR_CONFIG_SETTING_STARTING_YEAR
+strval = STR_JUST_INT
+cat = SC_BASIC
+
+[SDT_NULL]
+length = 4
+to = SLV_105
+
+[SDT_VAR]
+var = game_creation.ending_year
+type = SLE_INT32
+from = SLV_ENDING_YEAR
+guiflags = SGF_0ISDISABLED
+def = DEF_END_YEAR
+min = MIN_YEAR
+max = MAX_YEAR - 1
+interval = 1
+str = STR_CONFIG_SETTING_ENDING_YEAR
+strhelp = STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT
+strval = STR_CONFIG_SETTING_ENDING_YEAR_VALUE
+cat = SC_ADVANCED
+
+[SDT_VAR]
+var = economy.type
+type = SLE_UINT8
+guiflags = SGF_MULTISTRING
+def = ET_SMOOTH
+min = ET_BEGIN
+max = ET_END - 1
+str = STR_CONFIG_SETTING_ECONOMY_TYPE
+strhelp = STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT
+strval = STR_CONFIG_SETTING_ECONOMY_TYPE_ORIGINAL
+post_cb = [](auto) { InvalidateWindowClassesData(WC_INDUSTRY_VIEW); }
+cat = SC_BASIC
+
+[SDT_BOOL]
+var = economy.allow_shares
+def = false
+str = STR_CONFIG_SETTING_ALLOW_SHARES
+strhelp = STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT
+post_cb = [](auto) { InvalidateWindowClassesData(WC_COMPANY); }
+
+[SDT_VAR]
+var = economy.min_years_for_shares
+type = SLE_UINT8
+from = SLV_TRADING_AGE
+def = 6
+min = 0
+max = 255
+interval = 1
+str = STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES
+strhelp = STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES_HELPTEXT
+strval = STR_JUST_INT
+cat = SC_EXPERT
+
+[SDT_VAR]
+var = economy.feeder_payment_share
+type = SLE_UINT8
+from = SLV_134
+def = 75
+min = 0
+max = 100
+str = STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE
+strhelp = STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT
+strval = STR_CONFIG_SETTING_PERCENTAGE
+cat = SC_EXPERT
+
+[SDT_VAR]
+var = economy.town_growth_rate
+type = SLE_UINT8
+from = SLV_54
+guiflags = SGF_MULTISTRING
+def = 2
+min = 0
+max = 4
+str = STR_CONFIG_SETTING_TOWN_GROWTH
+strhelp = STR_CONFIG_SETTING_TOWN_GROWTH_HELPTEXT
+strval = STR_CONFIG_SETTING_TOWN_GROWTH_NONE
+
+[SDT_VAR]
+var = economy.larger_towns
+type = SLE_UINT8
+from = SLV_54
+guiflags = SGF_0ISDISABLED
+def = 4
+min = 0
+max = 255
+interval = 1
+str = STR_CONFIG_SETTING_LARGER_TOWNS
+strhelp = STR_CONFIG_SETTING_LARGER_TOWNS_HELPTEXT
+strval = STR_CONFIG_SETTING_LARGER_TOWNS_VALUE
+
+[SDT_VAR]
+var = economy.initial_city_size
+type = SLE_UINT8
+from = SLV_56
+def = 2
+min = 1
+max = 10
+interval = 1
+str = STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER
+strhelp = STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT
+strval = STR_JUST_COMMA
+
+[SDT_BOOL]
+var = economy.mod_road_rebuild
+from = SLV_77
+def = true
+cat = SC_EXPERT
+
+; previously ai-new setting.
+[SDT_NULL]
+length = 1
+to = SLV_107
+
+[SDT_OMANY]
+var = script.settings_profile
+type = SLE_UINT8
+from = SLV_178
+guiflags = SGF_MULTISTRING
+def = SP_EASY
+min = SP_EASY
+max = SP_HARD
+full = _settings_profiles
+str = STR_CONFIG_SETTING_AI_PROFILE
+strhelp = STR_CONFIG_SETTING_AI_PROFILE_HELPTEXT
+strval = STR_CONFIG_SETTING_AI_PROFILE_EASY
+cat = SC_BASIC
+
+[SDT_BOOL]
+var = ai.ai_in_multiplayer
+def = true
+str = STR_CONFIG_SETTING_AI_IN_MULTIPLAYER
+strhelp = STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT
+cat = SC_BASIC
+
+[SDT_BOOL]
+var = ai.ai_disable_veh_train
+def = false
+str = STR_CONFIG_SETTING_AI_BUILDS_TRAINS
+strhelp = STR_CONFIG_SETTING_AI_BUILDS_TRAINS_HELPTEXT
+
+[SDT_BOOL]
+var = ai.ai_disable_veh_roadveh
+def = false
+str = STR_CONFIG_SETTING_AI_BUILDS_ROAD_VEHICLES
+strhelp = STR_CONFIG_SETTING_AI_BUILDS_ROAD_VEHICLES_HELPTEXT
+
+[SDT_BOOL]
+var = ai.ai_disable_veh_aircraft
+def = false
+str = STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT
+strhelp = STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT_HELPTEXT
+
+[SDT_BOOL]
+var = ai.ai_disable_veh_ship
+def = false
+str = STR_CONFIG_SETTING_AI_BUILDS_SHIPS
+strhelp = STR_CONFIG_SETTING_AI_BUILDS_SHIPS_HELPTEXT
+
+[SDT_VAR]
+var = script.script_max_opcode_till_suspend
+type = SLE_UINT32
+from = SLV_107
+guiflags = SGF_NEWGAME_ONLY
+def = 10000
+min = 500
+max = 250000
+interval = 2500
+str = STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES
+strhelp = STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES_HELPTEXT
+strval = STR_JUST_COMMA
+cat = SC_EXPERT
+
+[SDT_VAR]
+var = script.script_max_memory_megabytes
+type = SLE_UINT32
+from = SLV_SCRIPT_MEMLIMIT
+guiflags = SGF_NEWGAME_ONLY
+def = 1024
+min = 8
+max = 8192
+interval = 8
+str = STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY
+strhelp = STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT
+strval = STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE
+cat = SC_EXPERT
+
+##
+[SDT_VAR]
+var = vehicle.extend_vehicle_life
+type = SLE_UINT8
+def = 0
+min = 0
+max = 100
+cat = SC_EXPERT
+
+[SDT_VAR]
+var = economy.dist_local_authority
+type = SLE_UINT8
+def = 20
+min = 5
+max = 60
+cat = SC_EXPERT
+
+[SDT_BOOL]
+var = pf.reverse_at_signals
+from = SLV_159
+def = false
+str = STR_CONFIG_SETTING_REVERSE_AT_SIGNALS
+strhelp = STR_CONFIG_SETTING_REVERSE_AT_SIGNALS_HELPTEXT
+
+[SDT_VAR]
+var = pf.wait_oneway_signal
+type = SLE_UINT8
+def = 15
+min = 2
+max = 255
+cat = SC_EXPERT
+
+[SDT_VAR]
+var = pf.wait_twoway_signal
+type = SLE_UINT8
+def = 41
+min = 2
+max = 255
+cat = SC_EXPERT
+
+[SDT_VAR]
+var = economy.town_noise_population[0]
+type = SLE_UINT16
+from = SLV_96
+def = 800
+min = 200
+max = 65535
+cat = SC_EXPERT
+
+[SDT_VAR]
+var = economy.town_noise_population[1]
+type = SLE_UINT16
+from = SLV_96
+def = 2000
+min = 400
+max = 65535
+cat = SC_EXPERT
+
+[SDT_VAR]
+var = economy.town_noise_population[2]
+type = SLE_UINT16
+from = SLV_96
+def = 4000
+min = 800
+max = 65535
+cat = SC_EXPERT
+
+[SDT_BOOL]
+var = economy.infrastructure_maintenance
+from = SLV_166
+def = false
+str = STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE
+strhelp = STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT
+post_cb = [](auto) { InvalidateWindowClassesData(WC_COMPANY_INFRASTRUCTURE); }
+cat = SC_BASIC
+
+##
+[SDT_VAR]
+var = pf.wait_for_pbs_path
+type = SLE_UINT8
+from = SLV_100
+def = 30
+min = 2
+max = 255
+cat = SC_EXPERT
+
+[SDT_BOOL]
+var = pf.reserve_paths
+from = SLV_100
+def = false
+cat = SC_EXPERT
+
+[SDT_VAR]
+var = pf.path_backoff_interval
+type = SLE_UINT8
+from = SLV_100
+def = 20
+min = 1
+max = 255
+cat = SC_EXPERT
+
+##
+; Used to be pf.opf.pf_maxlength & pf.opf.pf_maxdepth
+[SDT_NULL]
+length = 3
+to = SLV_REMOVE_OPF
+
+##
+[SDT_VAR]
+var = pf.npf.npf_max_search_nodes
+type = SLE_UINT
+def = 10000
+min = 500
+max = 100000
+cat = SC_EXPERT
+
+[SDT_VAR]
+var = pf.npf.npf_rail_firstred_penalty
+type = SLE_UINT
+def = 10 * NPF_TILE_LENGTH
+min = 0
+max = 100000
+cat = SC_EXPERT
+
+[SDT_VAR]
+var = pf.npf.npf_rail_firstred_exit_penalty
+type = SLE_UINT
+def = 100 * NPF_TILE_LENGTH
+min = 0
+max = 100000
+cat = SC_EXPERT
+
+[SDT_VAR]
+var = pf.npf.npf_rail_lastred_penalty
+type = SLE_UINT
+def = 10 * NPF_TILE_LENGTH
+min = 0
+max = 100000
+cat = SC_EXPERT
+
+[SDT_VAR]
+var = pf.npf.npf_rail_station_penalty
+type = SLE_UINT
+def = 1 * NPF_TILE_LENGTH
+min = 0
+max = 100000
+cat = SC_EXPERT
+
+[SDT_VAR]
+var = pf.npf.npf_rail_slope_penalty
+type = SLE_UINT
+def = 1 * NPF_TILE_LENGTH
+min = 0
+max = 100000
+cat = SC_EXPERT
+
+[SDT_VAR]
+var = pf.npf.npf_rail_curve_penalty
+type = SLE_UINT
+def = 1 * NPF_TILE_LENGTH
+min = 0
+max = 100000
+cat = SC_EXPERT
+
+[SDT_VAR]
+var = pf.npf.npf_rail_depot_reverse_penalty
+type = SLE_UINT
+def = 50 * NPF_TILE_LENGTH
+min = 0
+max = 100000
+cat = SC_EXPERT
+
+[SDT_VAR]
+var = pf.npf.npf_rail_pbs_cross_penalty
+type = SLE_UINT
+from = SLV_100
+def = 3 * NPF_TILE_LENGTH
+min = 0
+max = 100000
+cat = SC_EXPERT
+
+[SDT_VAR]
+var = pf.npf.npf_rail_pbs_signal_back_penalty
+type = SLE_UINT
+from = SLV_100
+def = 15 * NPF_TILE_LENGTH
+min = 0
+max = 100000
+cat = SC_EXPERT
+
+[SDT_VAR]
+var = pf.npf.npf_buoy_penalty
+type = SLE_UINT
+def = 2 * NPF_TILE_LENGTH
+min = 0
+max = 100000
+cat = SC_EXPERT
+
+[SDT_VAR]
+var = pf.npf.npf_water_curve_penalty
+type = SLE_UINT
+def = 1 * NPF_TILE_LENGTH
+min = 0
+max = 100000
+cat = SC_EXPERT
+
+[SDT_VAR]
+var = pf.npf.npf_road_curve_penalty
+type = SLE_UINT
+def = 1 * NPF_TILE_LENGTH
+min = 0
+max = 100000
+cat = SC_EXPERT
+
+[SDT_VAR]
+var = pf.npf.npf_crossing_penalty
+type = SLE_UINT
+def = 3 * NPF_TILE_LENGTH
+min = 0
+max = 100000
+cat = SC_EXPERT
+
+[SDT_VAR]
+var = pf.npf.npf_road_drive_through_penalty
+type = SLE_UINT
+from = SLV_47
+def = 8 * NPF_TILE_LENGTH
+min = 0
+max = 100000
+cat = SC_EXPERT
+
+[SDT_VAR]
+var = pf.npf.npf_road_dt_occupied_penalty
+type = SLE_UINT
+from = SLV_130
+def = 8 * NPF_TILE_LENGTH
+min = 0
+max = 100000
+cat = SC_EXPERT
+
+[SDT_VAR]
+var = pf.npf.npf_road_bay_occupied_penalty
+type = SLE_UINT
+from = SLV_130
+def = 15 * NPF_TILE_LENGTH
+min = 0
+max = 100000
+cat = SC_EXPERT
+
+[SDT_VAR]
+var = pf.npf.maximum_go_to_depot_penalty
+type = SLE_UINT
+from = SLV_131
+def = 20 * NPF_TILE_LENGTH
+min = 0
+max = 1000000
+cat = SC_EXPERT
+
+##
+[SDT_BOOL]
+var = pf.yapf.disable_node_optimization
+from = SLV_28
+def = false
+cat = SC_EXPERT
+
+[SDT_VAR]
+var = pf.yapf.max_search_nodes
+type = SLE_UINT
+from = SLV_28
+def = 10000
+min = 500
+max = 1000000
+cat = SC_EXPERT
+
+[SDT_BOOL]
+var = pf.yapf.rail_firstred_twoway_eol
+from = SLV_28
+def = false
+cat = SC_EXPERT
+
+[SDT_VAR]
+var = pf.yapf.rail_firstred_penalty
+type = SLE_UINT
+from = SLV_28
+def = 10 * YAPF_TILE_LENGTH
+min = 0
+max = 1000000
+cat = SC_EXPERT
+
+[SDT_VAR]
+var = pf.yapf.rail_firstred_exit_penalty
+type = SLE_UINT
+from = SLV_28
+def = 100 * YAPF_TILE_LENGTH
+min = 0
+max = 1000000
+cat = SC_EXPERT
+
+[SDT_VAR]
+var = pf.yapf.rail_lastred_penalty
+type = SLE_UINT
+from = SLV_28
+def = 10 * YAPF_TILE_LENGTH
+min = 0
+max = 1000000
+cat = SC_EXPERT
+
+[SDT_VAR]
+var = pf.yapf.rail_lastred_exit_penalty
+type = SLE_UINT
+from = SLV_28
+def = 100 * YAPF_TILE_LENGTH
+min = 0
+max = 1000000
+cat = SC_EXPERT
+
+[SDT_VAR]
+var = pf.yapf.rail_station_penalty
+type = SLE_UINT
+from = SLV_28
+def = 10 * YAPF_TILE_LENGTH
+min = 0
+max = 1000000
+cat = SC_EXPERT
+
+[SDT_VAR]
+var = pf.yapf.rail_slope_penalty
+type = SLE_UINT
+from = SLV_28
+def = 2 * YAPF_TILE_LENGTH
+min = 0
+max = 1000000
+cat = SC_EXPERT
+
+[SDT_VAR]
+var = pf.yapf.rail_curve45_penalty
+type = SLE_UINT
+from = SLV_28
+def = 1 * YAPF_TILE_LENGTH
+min = 0
+max = 1000000
+cat = SC_EXPERT
+
+[SDT_VAR]
+var = pf.yapf.rail_curve90_penalty
+type = SLE_UINT
+from = SLV_28
+def = 6 * YAPF_TILE_LENGTH
+min = 0
+max = 1000000
+cat = SC_EXPERT
+
+[SDT_VAR]
+var = pf.yapf.rail_depot_reverse_penalty
+type = SLE_UINT
+from = SLV_28
+def = 50 * YAPF_TILE_LENGTH
+min = 0
+max = 1000000
+cat = SC_EXPERT
+
+[SDT_VAR]
+var = pf.yapf.rail_crossing_penalty
+type = SLE_UINT
+from = SLV_28
+def = 3 * YAPF_TILE_LENGTH
+min = 0
+max = 1000000
+cat = SC_EXPERT
+
+[SDT_VAR]
+var = pf.yapf.rail_look_ahead_max_signals
+type = SLE_UINT
+from = SLV_28
+def = 10
+min = 1
+max = 100
+cat = SC_EXPERT
+
+[SDT_VAR]
+var = pf.yapf.rail_look_ahead_signal_p0
+type = SLE_INT
+from = SLV_28
+def = 500
+min = -1000000
+max = 1000000
+cat = SC_EXPERT
+
+[SDT_VAR]
+var = pf.yapf.rail_look_ahead_signal_p1
+type = SLE_INT
+from = SLV_28
+def = -100
+min = -1000000
+max = 1000000
+cat = SC_EXPERT
+
+[SDT_VAR]
+var = pf.yapf.rail_look_ahead_signal_p2
+type = SLE_INT
+from = SLV_28
+def = 5
+min = -1000000
+max = 1000000
+cat = SC_EXPERT
+
+[SDT_VAR]
+var = pf.yapf.rail_pbs_cross_penalty
+type = SLE_UINT
+from = SLV_100
+def = 3 * YAPF_TILE_LENGTH
+min = 0
+max = 1000000
+cat = SC_EXPERT
+
+[SDT_VAR]
+var = pf.yapf.rail_pbs_station_penalty
+type = SLE_UINT
+from = SLV_100
+def = 8 * YAPF_TILE_LENGTH
+min = 0
+max = 1000000
+cat = SC_EXPERT
+
+[SDT_VAR]
+var = pf.yapf.rail_pbs_signal_back_penalty
+type = SLE_UINT
+from = SLV_100
+def = 15 * YAPF_TILE_LENGTH
+min = 0
+max = 1000000
+cat = SC_EXPERT
+
+[SDT_VAR]
+var = pf.yapf.rail_doubleslip_penalty
+type = SLE_UINT
+from = SLV_100
+def = 1 * YAPF_TILE_LENGTH
+min = 0
+max = 1000000
+cat = SC_EXPERT
+
+[SDT_VAR]
+var = pf.yapf.rail_longer_platform_penalty
+type = SLE_UINT
+from = SLV_33
+def = 8 * YAPF_TILE_LENGTH
+min = 0
+max = 20000
+cat = SC_EXPERT
+
+[SDT_VAR]
+var = pf.yapf.rail_longer_platform_per_tile_penalty
+type = SLE_UINT
+from = SLV_33
+def = 0 * YAPF_TILE_LENGTH
+min = 0
+max = 20000
+cat = SC_EXPERT
+
+[SDT_VAR]
+var = pf.yapf.rail_shorter_platform_penalty
+type = SLE_UINT
+from = SLV_33
+def = 40 * YAPF_TILE_LENGTH
+min = 0
+max = 20000
+cat = SC_EXPERT
+
+[SDT_VAR]
+var = pf.yapf.rail_shorter_platform_per_tile_penalty
+type = SLE_UINT
+from = SLV_33
+def = 0 * YAPF_TILE_LENGTH
+min = 0
+max = 20000
+cat = SC_EXPERT
+
+[SDT_VAR]
+var = pf.yapf.road_slope_penalty
+type = SLE_UINT
+from = SLV_33
+def = 2 * YAPF_TILE_LENGTH
+min = 0
+max = 1000000
+cat = SC_EXPERT
+
+[SDT_VAR]
+var = pf.yapf.road_curve_penalty
+type = SLE_UINT
+from = SLV_33
+def = 1 * YAPF_TILE_LENGTH
+min = 0
+max = 1000000
+cat = SC_EXPERT
+
+[SDT_VAR]
+var = pf.yapf.road_crossing_penalty
+type = SLE_UINT
+from = SLV_33
+def = 3 * YAPF_TILE_LENGTH
+min = 0
+max = 1000000
+cat = SC_EXPERT
+
+[SDT_VAR]
+var = pf.yapf.road_stop_penalty
+type = SLE_UINT
+from = SLV_47
+def = 8 * YAPF_TILE_LENGTH
+min = 0
+max = 1000000
+cat = SC_EXPERT
+
+[SDT_VAR]
+var = pf.yapf.road_stop_occupied_penalty
+type = SLE_UINT
+from = SLV_130
+def = 8 * YAPF_TILE_LENGTH
+min = 0
+max = 1000000
+cat = SC_EXPERT
+
+[SDT_VAR]
+var = pf.yapf.road_stop_bay_occupied_penalty
+type = SLE_UINT
+from = SLV_130
+def = 15 * YAPF_TILE_LENGTH
+min = 0
+max = 1000000
+cat = SC_EXPERT
+
+[SDT_VAR]
+var = pf.yapf.maximum_go_to_depot_penalty
+type = SLE_UINT
+from = SLV_131
+def = 20 * YAPF_TILE_LENGTH
+min = 0
+max = 1000000
+cat = SC_EXPERT
+
+[SDT_VAR]
+var = pf.yapf.ship_curve45_penalty
+type = SLE_UINT
+from = SLV_SHIP_CURVE_PENALTY
+def = 1 * YAPF_TILE_LENGTH
+min = 0
+max = 1000000
+cat = SC_EXPERT
+
+[SDT_VAR]
+var = pf.yapf.ship_curve90_penalty
+type = SLE_UINT
+from = SLV_SHIP_CURVE_PENALTY
+def = 6 * YAPF_TILE_LENGTH
+min = 0
+max = 1000000
+cat = SC_EXPERT
+
+##
+[SDT_VAR]
+var = game_creation.land_generator
+type = SLE_UINT8
+from = SLV_30
+guiflags = SGF_MULTISTRING | SGF_NEWGAME_ONLY
+def = 1
+min = 0
+max = 1
+str = STR_CONFIG_SETTING_LAND_GENERATOR
+strhelp = STR_CONFIG_SETTING_LAND_GENERATOR_HELPTEXT
+strval = STR_CONFIG_SETTING_LAND_GENERATOR_ORIGINAL
+
+[SDT_VAR]
+var = game_creation.oil_refinery_limit
+type = SLE_UINT8
+from = SLV_30
+def = 32
+min = 12
+max = 128
+str = STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE
+strval = STR_CONFIG_SETTING_TILE_LENGTH
+strhelp = STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT
+
+[SDT_VAR]
+var = game_creation.tgen_smoothness
+type = SLE_UINT8
+from = SLV_30
+guiflags = SGF_MULTISTRING | SGF_NEWGAME_ONLY
+def = 1
+min = TGEN_SMOOTHNESS_BEGIN
+max = TGEN_SMOOTHNESS_END - 1
+str = STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN
+strhelp = STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT
+strval = STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH
+cat = SC_BASIC
+
+[SDT_VAR]
+var = game_creation.variety
+type = SLE_UINT8
+from = SLV_197
+guiflags = SGF_MULTISTRING | SGF_NEWGAME_ONLY
+def = 0
+min = 0
+max = 5
+str = STR_CONFIG_SETTING_VARIETY
+strhelp = STR_CONFIG_SETTING_VARIETY_HELPTEXT
+strval = STR_VARIETY_NONE
+
+[SDT_VAR]
+var = game_creation.generation_seed
+type = SLE_UINT32
+from = SLV_30
+def = GENERATE_NEW_SEED
+min = 0
+max = UINT32_MAX
+cat = SC_EXPERT
+
+[SDT_VAR]
+var = game_creation.tree_placer
+type = SLE_UINT8
+from = SLV_30
+guiflags = SGF_MULTISTRING | SGF_NEWGAME_ONLY | SGF_SCENEDIT_TOO
+def = 2
+min = 0
+max = 2
+str = STR_CONFIG_SETTING_TREE_PLACER
+strhelp = STR_CONFIG_SETTING_TREE_PLACER_HELPTEXT
+strval = STR_CONFIG_SETTING_TREE_PLACER_NONE
+cat = SC_BASIC
+
+[SDT_VAR]
+var = game_creation.heightmap_rotation
+type = SLE_UINT8
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+guiflags = SGF_MULTISTRING
+def = 0
+min = 0
+max = 1
+str = STR_CONFIG_SETTING_HEIGHTMAP_ROTATION
+strval = STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_COUNTER_CLOCKWISE
+cat = SC_BASIC
+
+[SDT_VAR]
+var = game_creation.se_flat_world_height
+type = SLE_UINT8
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+def = 1
+min = 0
+max = 15
+str = STR_CONFIG_SETTING_SE_FLAT_WORLD_HEIGHT
+strval = STR_JUST_COMMA
+cat = SC_BASIC
+
+##
+[SDT_VAR]
+var = game_creation.map_x
+type = SLE_UINT8
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+def = 8
+min = MIN_MAP_SIZE_BITS
+max = MAX_MAP_SIZE_BITS
+cat = SC_BASIC
+
+[SDT_VAR]
+var = game_creation.map_y
+type = SLE_UINT8
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+def = 8
+min = MIN_MAP_SIZE_BITS
+max = MAX_MAP_SIZE_BITS
+cat = SC_BASIC
+
+[SDT_BOOL]
+var = construction.freeform_edges
+from = SLV_111
+def = true
+pre_cb = CheckFreeformEdges
+post_cb = UpdateFreeformEdges
+cat = SC_EXPERT
+
+[SDT_VAR]
+var = game_creation.water_borders
+type = SLE_UINT8
+from = SLV_111
+def = 15
+min = 0
+max = 16
+
+[SDT_VAR]
+var = game_creation.custom_town_number
+type = SLE_UINT16
+from = SLV_115
+def = 1
+min = 1
+max = 5000
+cat = SC_BASIC
+
+[SDT_VAR]
+var = construction.extra_tree_placement
+type = SLE_UINT8
+from = SLV_132
+guiflags = SGF_MULTISTRING
+def = 2
+min = 0
+max = 3
+str = STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT
+strhelp = STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT
+strval = STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NO_SPREAD
+cat = SC_BASIC
+
+[SDT_VAR]
+var = game_creation.custom_terrain_type
+type = SLE_UINT8
+from = SLV_MAPGEN_SETTINGS_REVAMP
+guiflags = SGF_NEWGAME_ONLY
+def = MAP_HEIGHT_LIMIT_AUTO_MINIMUM
+min = MIN_CUSTOM_TERRAIN_TYPE
+max = MAX_MAP_HEIGHT_LIMIT
+interval = 1
+
+[SDT_VAR]
+var = game_creation.custom_sea_level
+type = SLE_UINT8
+from = SLV_149
+def = CUSTOM_SEA_LEVEL_MIN_PERCENTAGE
+min = CUSTOM_SEA_LEVEL_MIN_PERCENTAGE
+max = CUSTOM_SEA_LEVEL_MAX_PERCENTAGE
+cat = SC_BASIC
+
+[SDT_VAR]
+var = game_creation.min_river_length
+type = SLE_UINT8
+from = SLV_163
+def = 16
+min = 2
+max = 255
+cat = SC_EXPERT
+
+[SDT_VAR]
+var = game_creation.river_route_random
+type = SLE_UINT8
+from = SLV_163
+def = 5
+min = 1
+max = 255
+cat = SC_EXPERT
+
+[SDT_VAR]
+var = game_creation.amount_of_rivers
+type = SLE_UINT8
+from = SLV_163
+guiflags = SGF_MULTISTRING | SGF_NEWGAME_ONLY
+def = 2
+min = 0
+max = 3
+str = STR_CONFIG_SETTING_RIVER_AMOUNT
+strhelp = STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT
+strval = STR_RIVERS_NONE
+
+; locale
+
+[SDT_OMANY]
+var = locale.currency
+type = SLE_UINT8
+from = SLV_97
+flags = SLF_NO_NETWORK_SYNC
+def = 0
+max = CURRENCY_END - 1
+full = _locale_currencies
+post_cb = [](auto) { MarkWholeScreenDirty(); }
+cat = SC_BASIC
+
+[SDTG_OMANY]
+name = ""units""
+var = _old_units
+type = SLE_UINT8
+from = SLV_97
+to = SLV_184
+flags = SLF_NOT_IN_CONFIG
+def = 1
+max = 2
+full = _locale_units
+post_cb = [](auto) { MarkWholeScreenDirty(); }
+cat = SC_BASIC
+
+[SDT_OMANY]
+var = locale.units_velocity
+type = SLE_UINT8
+from = SLV_184
+flags = SLF_NO_NETWORK_SYNC
+guiflags = SGF_MULTISTRING
+def = 1
+max = 3
+full = _locale_units
+post_cb = [](auto) { MarkWholeScreenDirty(); }
+cat = SC_BASIC
+str = STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY
+strhelp = STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT
+strval = STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL
+
+[SDT_OMANY]
+var = locale.units_power
+type = SLE_UINT8
+from = SLV_184
+flags = SLF_NO_NETWORK_SYNC
+guiflags = SGF_MULTISTRING
+def = 1
+max = 2
+full = _locale_units
+post_cb = [](auto) { MarkWholeScreenDirty(); }
+cat = SC_BASIC
+str = STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER
+strhelp = STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_HELPTEXT
+strval = STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_IMPERIAL
+
+[SDT_OMANY]
+var = locale.units_weight
+type = SLE_UINT8
+from = SLV_184
+flags = SLF_NO_NETWORK_SYNC
+guiflags = SGF_MULTISTRING
+def = 1
+max = 2
+full = _locale_units
+post_cb = [](auto) { MarkWholeScreenDirty(); }
+cat = SC_BASIC
+str = STR_CONFIG_SETTING_LOCALISATION_UNITS_WEIGHT
+strhelp = STR_CONFIG_SETTING_LOCALISATION_UNITS_WEIGHT_HELPTEXT
+strval = STR_CONFIG_SETTING_LOCALISATION_UNITS_WEIGHT_IMPERIAL
+
+[SDT_OMANY]
+var = locale.units_volume
+type = SLE_UINT8
+from = SLV_184
+flags = SLF_NO_NETWORK_SYNC
+guiflags = SGF_MULTISTRING
+def = 1
+max = 2
+full = _locale_units
+post_cb = [](auto) { MarkWholeScreenDirty(); }
+cat = SC_BASIC
+str = STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME
+strhelp = STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME_HELPTEXT
+strval = STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME_IMPERIAL
+
+[SDT_OMANY]
+var = locale.units_force
+type = SLE_UINT8
+from = SLV_184
+flags = SLF_NO_NETWORK_SYNC
+guiflags = SGF_MULTISTRING
+def = 2
+max = 2
+full = _locale_units
+post_cb = [](auto) { MarkWholeScreenDirty(); }
+cat = SC_BASIC
+str = STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE
+strhelp = STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE_HELPTEXT
+strval = STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE_IMPERIAL
+
+[SDT_OMANY]
+var = locale.units_height
+type = SLE_UINT8
+from = SLV_184
+flags = SLF_NO_NETWORK_SYNC
+guiflags = SGF_MULTISTRING
+def = 1
+max = 2
+full = _locale_units
+post_cb = [](auto) { MarkWholeScreenDirty(); }
+cat = SC_BASIC
+str = STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT
+strhelp = STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_HELPTEXT
+strval = STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_IMPERIAL
+
+[SDT_SSTR]
+var = locale.digit_group_separator
+type = SLE_STRQ
+from = SLV_118
+flags = SLF_NO_NETWORK_SYNC
+def = nullptr
+post_cb = [](auto) { MarkWholeScreenDirty(); }
+cat = SC_BASIC
+
+[SDT_SSTR]
+var = locale.digit_group_separator_currency
+type = SLE_STRQ
+from = SLV_118
+flags = SLF_NO_NETWORK_SYNC
+def = nullptr
+post_cb = [](auto) { MarkWholeScreenDirty(); }
+cat = SC_BASIC
+
+[SDT_SSTR]
+var = locale.digit_decimal_separator
+type = SLE_STRQ
+from = SLV_126
+flags = SLF_NO_NETWORK_SYNC
+def = nullptr
+post_cb = [](auto) { MarkWholeScreenDirty(); }
+cat = SC_BASIC
+
+
+;***************************************************************************
+; Unsaved setting variables.
+
+[SDTC_OMANY]
+var = gui.autosave
+type = SLE_UINT8
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+guiflags = SGF_MULTISTRING
+def = 1
+max = 4
+full = _autosave_interval
+str = STR_CONFIG_SETTING_AUTOSAVE
+strhelp = STR_CONFIG_SETTING_AUTOSAVE_HELPTEXT
+strval = STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_OFF
+cat = SC_BASIC
+
+[SDTC_BOOL]
+var = gui.threaded_saves
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+def = true
+cat = SC_EXPERT
+
+[SDTC_OMANY]
+var = gui.date_format_in_default_names
+type = SLE_UINT8
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+guiflags = SGF_MULTISTRING
+def = 2
+max = 2
+full = _savegame_date
+str = STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES
+strhelp = STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_HELPTEXT
+strval = STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_LONG
+
+[SDTC_BOOL]
+var = gui.show_finances
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+def = true
+str = STR_CONFIG_SETTING_SHOWFINANCES
+strhelp = STR_CONFIG_SETTING_SHOWFINANCES_HELPTEXT
+cat = SC_BASIC
+
+[SDTC_VAR]
+var = gui.auto_scrolling
+type = SLE_UINT8
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+guiflags = SGF_MULTISTRING
+def = 0
+min = 0
+max = 3
+str = STR_CONFIG_SETTING_AUTOSCROLL
+strhelp = STR_CONFIG_SETTING_AUTOSCROLL_HELPTEXT
+strval = STR_CONFIG_SETTING_AUTOSCROLL_DISABLED
+cat = SC_BASIC
+
+[SDTC_VAR]
+var = gui.scroll_mode
+type = SLE_UINT8
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+guiflags = SGF_MULTISTRING
+def = 0
+min = 0
+max = 3
+str = STR_CONFIG_SETTING_SCROLLMODE
+strhelp = STR_CONFIG_SETTING_SCROLLMODE_HELPTEXT
+strval = STR_CONFIG_SETTING_SCROLLMODE_DEFAULT
+cat = SC_BASIC
+
+[SDTC_BOOL]
+var = gui.smooth_scroll
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+def = false
+str = STR_CONFIG_SETTING_SMOOTH_SCROLLING
+strhelp = STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT
+
+[SDTC_BOOL]
+var = gui.right_mouse_wnd_close
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+def = false
+str = STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE
+strhelp = STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_HELPTEXT
+cat = SC_BASIC
+
+[SDTC_BOOL]
+var = gui.measure_tooltip
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+def = true
+str = STR_CONFIG_SETTING_MEASURE_TOOLTIP
+strhelp = STR_CONFIG_SETTING_MEASURE_TOOLTIP_HELPTEXT
+cat = SC_BASIC
+
+[SDTC_VAR]
+var = gui.errmsg_duration
+type = SLE_UINT8
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+def = 5
+min = 0
+max = 20
+str = STR_CONFIG_SETTING_ERRMSG_DURATION
+strhelp = STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT
+strval = STR_CONFIG_SETTING_ERRMSG_DURATION_VALUE
+
+[SDTC_VAR]
+var = gui.hover_delay_ms
+type = SLE_UINT16
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+guiflags = SGF_0ISDISABLED
+def = 250
+min = 50
+max = 6000
+interval = 50
+str = STR_CONFIG_SETTING_HOVER_DELAY
+strhelp = STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT
+strval = STR_CONFIG_SETTING_HOVER_DELAY_VALUE
+
+[SDTC_OMANY]
+var = gui.osk_activation
+type = SLE_UINT8
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+str = STR_CONFIG_SETTING_OSK_ACTIVATION
+strhelp = STR_CONFIG_SETTING_OSK_ACTIVATION_HELPTEXT
+strval = STR_CONFIG_SETTING_OSK_ACTIVATION_DISABLED
+guiflags = SGF_MULTISTRING
+full = _osk_activation
+def = 1
+min = 0
+max = 3
+cat = SC_BASIC
+
+[SDTC_VAR]
+var = gui.toolbar_pos
+type = SLE_UINT8
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+guiflags = SGF_MULTISTRING
+def = 1
+min = 0
+max = 2
+str = STR_CONFIG_SETTING_TOOLBAR_POS
+strhelp = STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT
+strval = STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT
+post_cb = v_PositionMainToolbar
+cat = SC_BASIC
+
+[SDTC_VAR]
+var = gui.statusbar_pos
+type = SLE_UINT8
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+guiflags = SGF_MULTISTRING
+def = 1
+min = 0
+max = 2
+str = STR_CONFIG_SETTING_STATUSBAR_POS
+strhelp = STR_CONFIG_SETTING_STATUSBAR_POS_HELPTEXT
+strval = STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT
+post_cb = v_PositionStatusbar
+cat = SC_BASIC
+
+[SDTC_VAR]
+var = gui.window_snap_radius
+type = SLE_UINT8
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+guiflags = SGF_0ISDISABLED
+def = 10
+min = 1
+max = 32
+str = STR_CONFIG_SETTING_SNAP_RADIUS
+strhelp = STR_CONFIG_SETTING_SNAP_RADIUS_HELPTEXT
+strval = STR_CONFIG_SETTING_SNAP_RADIUS_VALUE
+cat = SC_EXPERT
+
+[SDTC_VAR]
+var = gui.window_soft_limit
+type = SLE_UINT8
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+guiflags = SGF_0ISDISABLED
+def = 20
+min = 5
+max = 255
+interval = 1
+str = STR_CONFIG_SETTING_SOFT_LIMIT
+strhelp = STR_CONFIG_SETTING_SOFT_LIMIT_HELPTEXT
+strval = STR_CONFIG_SETTING_SOFT_LIMIT_VALUE
+cat = SC_EXPERT
+
+[SDTC_VAR]
+var = gui.zoom_min
+type = SLE_UINT8
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+guiflags = SGF_MULTISTRING
+def = ZOOM_LVL_MIN
+min = ZOOM_LVL_MIN
+max = ZOOM_LVL_OUT_4X
+str = STR_CONFIG_SETTING_ZOOM_MIN
+strhelp = STR_CONFIG_SETTING_ZOOM_MIN_HELPTEXT
+strval = STR_CONFIG_SETTING_ZOOM_LVL_MIN
+post_cb = ZoomMinMaxChanged
+startup = true
+
+[SDTC_VAR]
+var = gui.zoom_max
+type = SLE_UINT8
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+guiflags = SGF_MULTISTRING
+def = ZOOM_LVL_MAX
+min = ZOOM_LVL_OUT_8X
+max = ZOOM_LVL_MAX
+str = STR_CONFIG_SETTING_ZOOM_MAX
+strhelp = STR_CONFIG_SETTING_ZOOM_MAX_HELPTEXT
+strval = STR_CONFIG_SETTING_ZOOM_LVL_OUT_2X
+post_cb = ZoomMinMaxChanged
+startup = true
+
+[SDTC_VAR]
+var = gui.sprite_zoom_min
+type = SLE_UINT8
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+guiflags = SGF_MULTISTRING
+def = ZOOM_LVL_MIN
+min = ZOOM_LVL_MIN
+max = ZOOM_LVL_OUT_4X
+str = STR_CONFIG_SETTING_SPRITE_ZOOM_MIN
+strhelp = STR_CONFIG_SETTING_SPRITE_ZOOM_MIN_HELPTEXT
+strval = STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_MIN
+post_cb = SpriteZoomMinChanged
+
+[SDTC_BOOL]
+var = gui.population_in_label
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+def = true
+str = STR_CONFIG_SETTING_POPULATION_IN_LABEL
+strhelp = STR_CONFIG_SETTING_POPULATION_IN_LABEL_HELPTEXT
+post_cb = [](auto) { UpdateAllTownVirtCoords(); }
+
+[SDTC_BOOL]
+var = gui.link_terraform_toolbar
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+def = false
+str = STR_CONFIG_SETTING_LINK_TERRAFORM_TOOLBAR
+strhelp = STR_CONFIG_SETTING_LINK_TERRAFORM_TOOLBAR_HELPTEXT
+
+[SDTC_VAR]
+var = gui.smallmap_land_colour
+type = SLE_UINT8
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+guiflags = SGF_MULTISTRING
+def = 0
+min = 0
+max = 2
+str = STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR
+strhelp = STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_HELPTEXT
+strval = STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_GREEN
+post_cb = RedrawSmallmap
+
+[SDTC_VAR]
+var = gui.liveries
+type = SLE_UINT8
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+guiflags = SGF_MULTISTRING
+def = 2
+min = 0
+max = 2
+str = STR_CONFIG_SETTING_LIVERIES
+strhelp = STR_CONFIG_SETTING_LIVERIES_HELPTEXT
+strval = STR_CONFIG_SETTING_LIVERIES_NONE
+post_cb = InvalidateCompanyLiveryWindow
+
+[SDTC_VAR]
+var = gui.starting_colour
+type = SLE_UINT8
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+guiflags = SGF_MULTISTRING
+def = COLOUR_END
+min = 0
+max = COLOUR_END
+str = STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR
+strhelp = STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT
+strval = STR_COLOUR_DARK_BLUE
+
+[SDTC_BOOL]
+var = gui.auto_remove_signals
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+def = false
+str = STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS
+strhelp = STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT
+cat = SC_ADVANCED
+
+[SDTC_BOOL]
+var = gui.prefer_teamchat
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+def = false
+str = STR_CONFIG_SETTING_PREFER_TEAMCHAT
+strhelp = STR_CONFIG_SETTING_PREFER_TEAMCHAT_HELPTEXT
+cat = SC_BASIC
+
+[SDTC_VAR]
+var = gui.scrollwheel_scrolling
+type = SLE_UINT8
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+guiflags = SGF_MULTISTRING
+def = 0
+min = 0
+max = 2
+str = STR_CONFIG_SETTING_SCROLLWHEEL_SCROLLING
+strhelp = STR_CONFIG_SETTING_SCROLLWHEEL_SCROLLING_HELPTEXT
+strval = STR_CONFIG_SETTING_SCROLLWHEEL_ZOOM
+cat = SC_BASIC
+
+[SDTC_VAR]
+var = gui.scrollwheel_multiplier
+type = SLE_UINT8
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+def = 5
+min = 1
+max = 15
+interval = 1
+str = STR_CONFIG_SETTING_SCROLLWHEEL_MULTIPLIER
+strhelp = STR_CONFIG_SETTING_SCROLLWHEEL_MULTIPLIER_HELPTEXT
+strval = STR_JUST_COMMA
+cat = SC_BASIC
+
+[SDTC_BOOL]
+var = gui.pause_on_newgame
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+def = false
+str = STR_CONFIG_SETTING_PAUSE_ON_NEW_GAME
+strhelp = STR_CONFIG_SETTING_PAUSE_ON_NEW_GAME_HELPTEXT
+cat = SC_BASIC
+
+[SDTC_VAR]
+var = gui.advanced_vehicle_list
+type = SLE_UINT8
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+guiflags = SGF_MULTISTRING
+def = 1
+min = 0
+max = 2
+str = STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS
+strhelp = STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT
+strval = STR_CONFIG_SETTING_COMPANIES_OFF
+
+[SDTC_BOOL]
+var = gui.timetable_in_ticks
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+def = false
+str = STR_CONFIG_SETTING_TIMETABLE_IN_TICKS
+strhelp = STR_CONFIG_SETTING_TIMETABLE_IN_TICKS_HELPTEXT
+post_cb = [](auto) { InvalidateWindowClassesData(WC_VEHICLE_TIMETABLE, VIWD_MODIFY_ORDERS); }
+cat = SC_EXPERT
+
+[SDTC_BOOL]
+var = gui.timetable_arrival_departure
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+def = true
+str = STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE
+strhelp = STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT
+post_cb = [](auto) { InvalidateWindowClassesData(WC_VEHICLE_TIMETABLE, VIWD_MODIFY_ORDERS); }
+
+[SDTC_BOOL]
+var = gui.quick_goto
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+def = true
+str = STR_CONFIG_SETTING_QUICKGOTO
+strhelp = STR_CONFIG_SETTING_QUICKGOTO_HELPTEXT
+cat = SC_BASIC
+
+[SDTC_VAR]
+var = gui.loading_indicators
+type = SLE_UINT8
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+guiflags = SGF_MULTISTRING
+def = 1
+min = 0
+max = 2
+str = STR_CONFIG_SETTING_LOADING_INDICATORS
+strhelp = STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT
+strval = STR_CONFIG_SETTING_COMPANIES_OFF
+post_cb = [](auto) { MarkWholeScreenDirty(); }
+cat = SC_BASIC
+
+[SDTC_VAR]
+var = gui.default_rail_type
+type = SLE_UINT8
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+guiflags = SGF_MULTISTRING
+def = 0
+min = 0
+max = 2
+str = STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE
+strhelp = STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_HELPTEXT
+strval = STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_FIRST
+cat = SC_BASIC
+
+[SDTC_BOOL]
+var = gui.enable_signal_gui
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+def = true
+str = STR_CONFIG_SETTING_ENABLE_SIGNAL_GUI
+strhelp = STR_CONFIG_SETTING_ENABLE_SIGNAL_GUI_HELPTEXT
+post_cb = CloseSignalGUI
+cat = SC_EXPERT
+
+[SDTC_VAR]
+var = gui.coloured_news_year
+type = SLE_INT32
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+def = 2000
+min = MIN_YEAR
+max = MAX_YEAR
+interval = 1
+str = STR_CONFIG_SETTING_COLOURED_NEWS_YEAR
+strhelp = STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT
+strval = STR_JUST_INT
+cat = SC_EXPERT
+
+[SDTC_VAR]
+var = gui.drag_signals_density
+type = SLE_UINT8
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+def = 4
+min = 1
+max = 20
+str = STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY
+strhelp = STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_HELPTEXT
+strval = STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_VALUE
+post_cb = [](auto) { InvalidateWindowData(WC_BUILD_SIGNAL, 0); }
+cat = SC_BASIC
+
+[SDTC_BOOL]
+var = gui.drag_signals_fixed_distance
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+def = false
+str = STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE
+strhelp = STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE_HELPTEXT
+cat = SC_EXPERT
+
+[SDTC_VAR]
+var = gui.semaphore_build_before
+type = SLE_INT32
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+def = 1950
+min = MIN_YEAR
+max = MAX_YEAR
+interval = 1
+str = STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE
+strhelp = STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT
+strval = STR_JUST_INT
+post_cb = ResetSignalVariant
+
+[SDTC_BOOL]
+var = gui.vehicle_income_warn
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+def = true
+str = STR_CONFIG_SETTING_WARN_INCOME_LESS
+strhelp = STR_CONFIG_SETTING_WARN_INCOME_LESS_HELPTEXT
+cat = SC_BASIC
+
+[SDTC_VAR]
+var = gui.order_review_system
+type = SLE_UINT8
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+guiflags = SGF_MULTISTRING
+def = 2
+min = 0
+max = 2
+str = STR_CONFIG_SETTING_ORDER_REVIEW
+strhelp = STR_CONFIG_SETTING_ORDER_REVIEW_HELPTEXT
+strval = STR_CONFIG_SETTING_ORDER_REVIEW_OFF
+cat = SC_BASIC
+
+[SDTC_BOOL]
+var = gui.lost_vehicle_warn
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+def = true
+str = STR_CONFIG_SETTING_WARN_LOST_VEHICLE
+strhelp = STR_CONFIG_SETTING_WARN_LOST_VEHICLE_HELPTEXT
+
+[SDTC_BOOL]
+var = gui.new_nonstop
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+def = true
+str = STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT
+strhelp = STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT_HELPTEXT
+cat = SC_BASIC
+
+[SDTC_VAR]
+var = gui.stop_location
+type = SLE_UINT8
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+guiflags = SGF_MULTISTRING
+def = 2
+min = 0
+max = 2
+interval = 1
+str = STR_CONFIG_SETTING_STOP_LOCATION
+strhelp = STR_CONFIG_SETTING_STOP_LOCATION_HELPTEXT
+strval = STR_CONFIG_SETTING_STOP_LOCATION_NEAR_END
+cat = SC_BASIC
+
+[SDTC_BOOL]
+var = gui.keep_all_autosave
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+def = false
+
+[SDTC_BOOL]
+var = gui.autosave_on_exit
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+def = false
+cat = SC_BASIC
+
+[SDTC_BOOL]
+var = gui.autosave_on_network_disconnect
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+def = true
+cat = SC_EXPERT
+
+[SDTC_VAR]
+var = gui.max_num_autosaves
+type = SLE_UINT8
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+def = 16
+min = 0
+max = 255
+
+[SDTC_BOOL]
+var = gui.auto_euro
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+def = true
+
+[SDTC_VAR]
+var = gui.news_message_timeout
+type = SLE_UINT8
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+def = 2
+min = 1
+max = 255
+
+[SDTC_BOOL]
+var = gui.show_track_reservation
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+def = true
+str = STR_CONFIG_SETTING_SHOW_TRACK_RESERVATION
+strhelp = STR_CONFIG_SETTING_SHOW_TRACK_RESERVATION_HELPTEXT
+post_cb = [](auto) { MarkWholeScreenDirty(); }
+cat = SC_BASIC
+
+[SDTC_VAR]
+var = gui.default_signal_type
+type = SLE_UINT8
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+guiflags = SGF_MULTISTRING
+def = 1
+min = 0
+max = 2
+interval = 1
+str = STR_CONFIG_SETTING_DEFAULT_SIGNAL_TYPE
+strhelp = STR_CONFIG_SETTING_DEFAULT_SIGNAL_TYPE_HELPTEXT
+strval = STR_CONFIG_SETTING_DEFAULT_SIGNAL_NORMAL
+cat = SC_BASIC
+
+[SDTC_VAR]
+var = gui.cycle_signal_types
+type = SLE_UINT8
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+guiflags = SGF_MULTISTRING
+def = 2
+min = 0
+max = 2
+interval = 1
+str = STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES
+strhelp = STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT
+strval = STR_CONFIG_SETTING_CYCLE_SIGNAL_NORMAL
+
+[SDTC_VAR]
+var = gui.station_numtracks
+type = SLE_UINT8
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+def = 1
+min = 1
+max = 7
+
+[SDTC_VAR]
+var = gui.station_platlength
+type = SLE_UINT8
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+def = 5
+min = 1
+max = 7
+cat = SC_BASIC
+
+[SDTC_BOOL]
+var = gui.station_dragdrop
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+def = true
+cat = SC_BASIC
+
+[SDTC_BOOL]
+var = gui.station_show_coverage
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+def = false
+cat = SC_BASIC
+
+[SDTC_BOOL]
+var = gui.persistent_buildingtools
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+def = true
+str = STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS
+strhelp = STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS_HELPTEXT
+cat = SC_BASIC
+
+[SDTC_BOOL]
+var = gui.expenses_layout
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+def = true
+str = STR_CONFIG_SETTING_EXPENSES_LAYOUT
+strhelp = STR_CONFIG_SETTING_EXPENSES_LAYOUT_HELPTEXT
+post_cb = [](auto) { MarkWholeScreenDirty(); }
+
+[SDTC_VAR]
+var = gui.station_gui_group_order
+type = SLE_UINT8
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+def = 0
+min = 0
+max = 5
+interval = 1
+
+[SDTC_VAR]
+var = gui.station_gui_sort_by
+type = SLE_UINT8
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+def = 0
+min = 0
+max = 3
+interval = 1
+
+[SDTC_VAR]
+var = gui.station_gui_sort_order
+type = SLE_UINT8
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+def = 0
+min = 0
+max = 1
+interval = 1
+
+[SDTC_VAR]
+var = gui.missing_strings_threshold
+type = SLE_UINT8
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+def = 25
+min = 1
+max = UINT8_MAX
+cat = SC_EXPERT
+
+[SDTC_VAR]
+var = gui.graph_line_thickness
+type = SLE_UINT8
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+def = 3
+min = 1
+max = 5
+str = STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS
+strhelp = STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT
+strval = STR_JUST_COMMA
+post_cb = [](auto) { MarkWholeScreenDirty(); }
+
+[SDTC_BOOL]
+var = gui.show_newgrf_name
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+def = false
+str = STR_CONFIG_SETTING_SHOW_NEWGRF_NAME
+strhelp = STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT
+post_cb = [](auto) { MarkWholeScreenDirty(); }
+cat = SC_ADVANCED
+
+; For the dedicated build we'll enable dates in logs by default.
+[SDTC_BOOL]
+ifdef = DEDICATED
+var = gui.show_date_in_logs
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+def = true
+
+[SDTC_BOOL]
+ifndef = DEDICATED
+var = gui.show_date_in_logs
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+def = false
+
+[SDTC_VAR]
+var = gui.settings_restriction_mode
+type = SLE_UINT8
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+def = 0
+min = 0
+max = 2
+
+[SDTC_VAR]
+var = gui.developer
+type = SLE_UINT8
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+def = 1
+min = 0
+max = 2
+cat = SC_EXPERT
+
+[SDTC_BOOL]
+var = gui.newgrf_developer_tools
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+def = false
+post_cb = InvalidateNewGRFChangeWindows
+cat = SC_EXPERT
+
+[SDTC_BOOL]
+var = gui.ai_developer_tools
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+def = false
+post_cb = [](auto) { InvalidateWindowClassesData(WC_AI_SETTINGS); }
+cat = SC_EXPERT
+
+[SDTC_BOOL]
+var = gui.scenario_developer
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+def = false
+post_cb = InvalidateNewGRFChangeWindows
+
+[SDTC_BOOL]
+var = gui.newgrf_show_old_versions
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+def = false
+cat = SC_EXPERT
+
+[SDTC_VAR]
+var = gui.newgrf_default_palette
+type = SLE_UINT8
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+guiflags = SGF_MULTISTRING
+def = 1
+min = 0
+max = 1
+post_cb = UpdateNewGRFConfigPalette
+cat = SC_EXPERT
+
+[SDTC_VAR]
+var = gui.console_backlog_timeout
+type = SLE_UINT16
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+def = 100
+min = 10
+max = 65500
+
+[SDTC_VAR]
+var = gui.console_backlog_length
+type = SLE_UINT16
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+def = 100
+min = 10
+max = 65500
+
+[SDTC_VAR]
+var = gui.refresh_rate
+type = SLE_UINT16
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+def = 60
+min = 10
+max = 1000
+cat = SC_EXPERT
+startup = true
+
+[SDTC_VAR]
+var = gui.fast_forward_speed_limit
+type = SLE_UINT16
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+guiflags = SGF_0ISDISABLED | SGF_NO_NETWORK
+def = 2500
+min = 0
+max = 50000
+interval = 10
+str = STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT
+strhelp = STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT
+strval = STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_VAL
+cat = SC_BASIC
+
+[SDTC_BOOL]
+var = sound.news_ticker
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+def = true
+str = STR_CONFIG_SETTING_SOUND_TICKER
+strhelp = STR_CONFIG_SETTING_SOUND_TICKER_HELPTEXT
+
+[SDTC_BOOL]
+var = sound.news_full
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+def = true
+str = STR_CONFIG_SETTING_SOUND_NEWS
+strhelp = STR_CONFIG_SETTING_SOUND_NEWS_HELPTEXT
+
+[SDTC_BOOL]
+var = sound.new_year
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+def = true
+str = STR_CONFIG_SETTING_SOUND_NEW_YEAR
+strhelp = STR_CONFIG_SETTING_SOUND_NEW_YEAR_HELPTEXT
+
+[SDTC_BOOL]
+var = sound.confirm
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+def = true
+str = STR_CONFIG_SETTING_SOUND_CONFIRM
+strhelp = STR_CONFIG_SETTING_SOUND_CONFIRM_HELPTEXT
+
+[SDTC_BOOL]
+var = sound.click_beep
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+def = true
+str = STR_CONFIG_SETTING_SOUND_CLICK
+strhelp = STR_CONFIG_SETTING_SOUND_CLICK_HELPTEXT
+
+[SDTC_BOOL]
+var = sound.disaster
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+def = true
+str = STR_CONFIG_SETTING_SOUND_DISASTER
+strhelp = STR_CONFIG_SETTING_SOUND_DISASTER_HELPTEXT
+
+[SDTC_BOOL]
+var = sound.vehicle
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+def = true
+str = STR_CONFIG_SETTING_SOUND_VEHICLE
+strhelp = STR_CONFIG_SETTING_SOUND_VEHICLE_HELPTEXT
+
+[SDTC_BOOL]
+var = sound.ambient
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+def = true
+str = STR_CONFIG_SETTING_SOUND_AMBIENT
+strhelp = STR_CONFIG_SETTING_SOUND_AMBIENT_HELPTEXT
+
+[SDTC_VAR]
+var = music.playlist
+type = SLE_UINT8
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+def = 0
+min = 0
+max = 5
+interval = 1
+cat = SC_BASIC
+
+[SDTC_VAR]
+var = music.music_vol
+type = SLE_UINT8
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+def = 50
+min = 0
+max = 127
+interval = 1
+cat = SC_BASIC
+
+[SDTC_VAR]
+var = music.effect_vol
+type = SLE_UINT8
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+def = 100
+min = 0
+max = 127
+interval = 1
+cat = SC_BASIC
+
+[SDTC_LIST]
+var = music.custom_1
+type = SLE_UINT8
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+def = nullptr
+cat = SC_BASIC
+
+[SDTC_LIST]
+var = music.custom_2
+type = SLE_UINT8
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+def = nullptr
+cat = SC_BASIC
+
+[SDTC_BOOL]
+var = music.playing
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+def = true
+cat = SC_BASIC
+
+[SDTC_BOOL]
+var = music.shuffle
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+def = false
+cat = SC_BASIC
+
+[SDTC_OMANY]
+var = news_display.arrival_player
+type = SLE_UINT8
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+guiflags = SGF_MULTISTRING
+def = 2
+max = 2
+full = _news_display
+str = STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OWN
+strhelp = STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OWN_HELPTEXT
+strval = STR_CONFIG_SETTING_NEWS_MESSAGES_OFF
+
+[SDTC_OMANY]
+var = news_display.arrival_other
+type = SLE_UINT8
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+guiflags = SGF_MULTISTRING
+def = 1
+max = 2
+full = _news_display
+str = STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OTHER
+strhelp = STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OTHER_HELPTEXT
+strval = STR_CONFIG_SETTING_NEWS_MESSAGES_OFF
+
+[SDTC_OMANY]
+var = news_display.accident
+type = SLE_UINT8
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+guiflags = SGF_MULTISTRING
+def = 2
+max = 2
+full = _news_display
+str = STR_CONFIG_SETTING_NEWS_ACCIDENTS_DISASTERS
+strhelp = STR_CONFIG_SETTING_NEWS_ACCIDENTS_DISASTERS_HELPTEXT
+strval = STR_CONFIG_SETTING_NEWS_MESSAGES_OFF
+
+[SDTC_OMANY]
+var = news_display.company_info
+type = SLE_UINT8
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+guiflags = SGF_MULTISTRING
+def = 2
+max = 2
+full = _news_display
+str = STR_CONFIG_SETTING_NEWS_COMPANY_INFORMATION
+strhelp = STR_CONFIG_SETTING_NEWS_COMPANY_INFORMATION_HELPTEXT
+strval = STR_CONFIG_SETTING_NEWS_MESSAGES_OFF
+
+[SDTC_OMANY]
+var = news_display.open
+type = SLE_UINT8
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+guiflags = SGF_MULTISTRING
+def = 1
+max = 2
+full = _news_display
+str = STR_CONFIG_SETTING_NEWS_INDUSTRY_OPEN
+strhelp = STR_CONFIG_SETTING_NEWS_INDUSTRY_OPEN_HELPTEXT
+strval = STR_CONFIG_SETTING_NEWS_MESSAGES_OFF
+
+[SDTC_OMANY]
+var = news_display.close
+type = SLE_UINT8
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+guiflags = SGF_MULTISTRING
+def = 1
+max = 2
+full = _news_display
+str = STR_CONFIG_SETTING_NEWS_INDUSTRY_CLOSE
+strhelp = STR_CONFIG_SETTING_NEWS_INDUSTRY_CLOSE_HELPTEXT
+strval = STR_CONFIG_SETTING_NEWS_MESSAGES_OFF
+
+[SDTC_OMANY]
+var = news_display.economy
+type = SLE_UINT8
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+guiflags = SGF_MULTISTRING
+def = 2
+max = 2
+full = _news_display
+str = STR_CONFIG_SETTING_NEWS_ECONOMY_CHANGES
+strhelp = STR_CONFIG_SETTING_NEWS_ECONOMY_CHANGES_HELPTEXT
+strval = STR_CONFIG_SETTING_NEWS_MESSAGES_OFF
+
+[SDTC_OMANY]
+var = news_display.production_player
+type = SLE_UINT8
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+guiflags = SGF_MULTISTRING
+def = 1
+max = 2
+full = _news_display
+str = STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_COMPANY
+strhelp = STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_COMPANY_HELPTEXT
+strval = STR_CONFIG_SETTING_NEWS_MESSAGES_OFF
+
+[SDTC_OMANY]
+var = news_display.production_other
+type = SLE_UINT8
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+guiflags = SGF_MULTISTRING
+def = 0
+max = 2
+full = _news_display
+str = STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_OTHER
+strhelp = STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_OTHER_HELPTEXT
+strval = STR_CONFIG_SETTING_NEWS_MESSAGES_OFF
+
+[SDTC_OMANY]
+var = news_display.production_nobody
+type = SLE_UINT8
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+guiflags = SGF_MULTISTRING
+def = 0
+max = 2
+full = _news_display
+str = STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_UNSERVED
+strhelp = STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_UNSERVED_HELPTEXT
+strval = STR_CONFIG_SETTING_NEWS_MESSAGES_OFF
+
+[SDTC_OMANY]
+var = news_display.advice
+type = SLE_UINT8
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+guiflags = SGF_MULTISTRING
+def = 2
+max = 2
+full = _news_display
+str = STR_CONFIG_SETTING_NEWS_ADVICE
+strhelp = STR_CONFIG_SETTING_NEWS_ADVICE_HELPTEXT
+strval = STR_CONFIG_SETTING_NEWS_MESSAGES_OFF
+
+[SDTC_OMANY]
+var = news_display.new_vehicles
+type = SLE_UINT8
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+guiflags = SGF_MULTISTRING
+def = 2
+max = 2
+full = _news_display
+str = STR_CONFIG_SETTING_NEWS_NEW_VEHICLES
+strhelp = STR_CONFIG_SETTING_NEWS_NEW_VEHICLES_HELPTEXT
+strval = STR_CONFIG_SETTING_NEWS_MESSAGES_OFF
+
+[SDTC_OMANY]
+var = news_display.acceptance
+type = SLE_UINT8
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+guiflags = SGF_MULTISTRING
+def = 2
+max = 2
+full = _news_display
+str = STR_CONFIG_SETTING_NEWS_CHANGES_ACCEPTANCE
+strhelp = STR_CONFIG_SETTING_NEWS_CHANGES_ACCEPTANCE_HELPTEXT
+strval = STR_CONFIG_SETTING_NEWS_MESSAGES_OFF
+
+[SDTC_OMANY]
+var = news_display.subsidies
+type = SLE_UINT8
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+guiflags = SGF_MULTISTRING
+def = 1
+max = 2
+full = _news_display
+str = STR_CONFIG_SETTING_NEWS_SUBSIDIES
+strhelp = STR_CONFIG_SETTING_NEWS_SUBSIDIES_HELPTEXT
+strval = STR_CONFIG_SETTING_NEWS_MESSAGES_OFF
+
+[SDTC_OMANY]
+var = news_display.general
+type = SLE_UINT8
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+guiflags = SGF_MULTISTRING
+def = 2
+max = 2
+full = _news_display
+str = STR_CONFIG_SETTING_NEWS_GENERAL_INFORMATION
+strhelp = STR_CONFIG_SETTING_NEWS_GENERAL_INFORMATION_HELPTEXT
+strval = STR_CONFIG_SETTING_NEWS_MESSAGES_OFF
+
+[SDTC_VAR]
+var = gui.network_chat_box_width_pct
+type = SLE_UINT16
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+def = 40
+min = 10
+max = 100
+cat = SC_EXPERT
+
+[SDTC_VAR]
+var = gui.network_chat_box_height
+type = SLE_UINT8
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+def = 25
+min = 5
+max = 255
+cat = SC_EXPERT
+
+[SDTC_VAR]
+var = gui.network_chat_timeout
+type = SLE_UINT16
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+def = 20
+min = 1
+max = 65535
+cat = SC_EXPERT
+
+[SDTC_VAR]
+var = network.sync_freq
+type = SLE_UINT16
+flags = SLF_NOT_IN_SAVE | SLF_NOT_IN_CONFIG | SLF_NO_NETWORK_SYNC
+guiflags = SGF_NETWORK_ONLY
+def = 100
+min = 0
+max = 100
+cat = SC_EXPERT
+
+[SDTC_VAR]
+var = network.frame_freq
+type = SLE_UINT8
+flags = SLF_NOT_IN_SAVE | SLF_NOT_IN_CONFIG | SLF_NO_NETWORK_SYNC
+guiflags = SGF_NETWORK_ONLY
+def = 0
+min = 0
+max = 100
+cat = SC_EXPERT
+
+[SDTC_VAR]
+var = network.commands_per_frame
+type = SLE_UINT16
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+guiflags = SGF_NETWORK_ONLY
+def = 2
+min = 1
+max = 65535
+cat = SC_EXPERT
+
+[SDTC_VAR]
+var = network.max_commands_in_queue
+type = SLE_UINT16
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+guiflags = SGF_NETWORK_ONLY
+def = 16
+min = 1
+max = 65535
+cat = SC_EXPERT
+
+[SDTC_VAR]
+var = network.bytes_per_frame
+type = SLE_UINT16
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+guiflags = SGF_NETWORK_ONLY
+def = 8
+min = 1
+max = 65535
+cat = SC_EXPERT
+
+[SDTC_VAR]
+var = network.bytes_per_frame_burst
+type = SLE_UINT16
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+guiflags = SGF_NETWORK_ONLY
+def = 256
+min = 1
+max = 65535
+cat = SC_EXPERT
+
+[SDTC_VAR]
+var = network.max_init_time
+type = SLE_UINT16
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+guiflags = SGF_NETWORK_ONLY
+def = 100
+min = 0
+max = 32000
+cat = SC_EXPERT
+
+[SDTC_VAR]
+var = network.max_join_time
+type = SLE_UINT16
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+guiflags = SGF_NETWORK_ONLY
+def = 500
+min = 0
+max = 32000
+
+[SDTC_VAR]
+var = network.max_download_time
+type = SLE_UINT16
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+guiflags = SGF_NETWORK_ONLY
+def = 1000
+min = 0
+max = 32000
+
+[SDTC_VAR]
+var = network.max_password_time
+type = SLE_UINT16
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+guiflags = SGF_NETWORK_ONLY
+def = 2000
+min = 0
+max = 32000
+
+[SDTC_VAR]
+var = network.max_lag_time
+type = SLE_UINT16
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+guiflags = SGF_NETWORK_ONLY
+def = 500
+min = 0
+max = 32000
+
+[SDTC_BOOL]
+var = network.pause_on_join
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+guiflags = SGF_NETWORK_ONLY
+def = true
+
+[SDTC_VAR]
+var = network.server_port
+type = SLE_UINT16
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+guiflags = SGF_NETWORK_ONLY
+def = NETWORK_DEFAULT_PORT
+min = 0
+max = 65535
+cat = SC_EXPERT
+
+[SDTC_VAR]
+var = network.server_admin_port
+type = SLE_UINT16
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+guiflags = SGF_NETWORK_ONLY
+def = NETWORK_ADMIN_PORT
+min = 0
+max = 65535
+cat = SC_EXPERT
+
+[SDTC_BOOL]
+var = network.server_admin_chat
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+guiflags = SGF_NETWORK_ONLY
+def = true
+cat = SC_EXPERT
+
+[SDTC_BOOL]
+var = network.server_advertise
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+guiflags = SGF_NETWORK_ONLY
+def = false
+
+[SDTC_SSTR]
+var = network.client_name
+type = SLE_STR
+length = NETWORK_CLIENT_NAME_LENGTH
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+def = nullptr
+pre_cb = NetworkValidateClientName
+post_cb = NetworkUpdateClientName
+cat = SC_BASIC
+
+[SDTC_SSTR]
+var = network.server_password
+type = SLE_STR
+length = NETWORK_PASSWORD_LENGTH
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+guiflags = SGF_NETWORK_ONLY
+def = nullptr
+pre_cb = ReplaceAsteriskWithEmptyPassword
+post_cb = [](auto) { NetworkServerUpdateGameInfo(); }
+cat = SC_BASIC
+
+[SDTC_SSTR]
+var = network.rcon_password
+type = SLE_STR
+length = NETWORK_PASSWORD_LENGTH
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+guiflags = SGF_NETWORK_ONLY
+def = nullptr
+pre_cb = ReplaceAsteriskWithEmptyPassword
+cat = SC_BASIC
+
+[SDTC_SSTR]
+var = network.admin_password
+type = SLE_STR
+length = NETWORK_PASSWORD_LENGTH
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+guiflags = SGF_NETWORK_ONLY
+def = nullptr
+cat = SC_BASIC
+
+[SDTC_SSTR]
+var = network.default_company_pass
+type = SLE_STR
+length = NETWORK_PASSWORD_LENGTH
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+def = nullptr
+
+[SDTC_SSTR]
+var = network.server_name
+type = SLE_STR
+length = NETWORK_NAME_LENGTH
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+guiflags = SGF_NETWORK_ONLY
+def = nullptr
+pre_cb = NetworkValidateServerName
+post_cb = [](auto) { UpdateClientConfigValues(); }
+cat = SC_BASIC
+
+[SDTC_SSTR]
+var = network.connect_to_ip
+type = SLE_STR
+length = 0
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+def = nullptr
+
+[SDTC_SSTR]
+var = network.network_id
+type = SLE_STR
+length = NETWORK_SERVER_ID_LENGTH
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+guiflags = SGF_NETWORK_ONLY
+def = nullptr
+
+[SDTC_BOOL]
+var = network.autoclean_companies
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+guiflags = SGF_NETWORK_ONLY
+def = false
+
+[SDTC_VAR]
+var = network.autoclean_unprotected
+type = SLE_UINT8
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+guiflags = SGF_0ISDISABLED | SGF_NETWORK_ONLY
+def = 12
+min = 0
+max = 240
+
+[SDTC_VAR]
+var = network.autoclean_protected
+type = SLE_UINT8
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+guiflags = SGF_0ISDISABLED | SGF_NETWORK_ONLY
+def = 36
+min = 0
+max = 240
+
+[SDTC_VAR]
+var = network.autoclean_novehicles
+type = SLE_UINT8
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+guiflags = SGF_0ISDISABLED | SGF_NETWORK_ONLY
+def = 0
+min = 0
+max = 240
+
+[SDTC_VAR]
+var = network.max_companies
+type = SLE_UINT8
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+guiflags = SGF_NETWORK_ONLY
+def = 15
+min = 1
+max = MAX_COMPANIES
+post_cb = [](auto) { UpdateClientConfigValues(); }
+cat = SC_BASIC
+
+[SDTC_VAR]
+var = network.max_clients
+type = SLE_UINT8
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+guiflags = SGF_NETWORK_ONLY
+def = 25
+min = 2
+max = MAX_CLIENTS
+post_cb = [](auto) { UpdateClientConfigValues(); }
+cat = SC_BASIC
+
+[SDTC_VAR]
+var = network.max_spectators
+type = SLE_UINT8
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+guiflags = SGF_NETWORK_ONLY
+def = 15
+min = 0
+max = MAX_CLIENTS
+post_cb = [](auto) { UpdateClientConfigValues(); }
+cat = SC_BASIC
+
+[SDTC_VAR]
+var = network.restart_game_year
+type = SLE_INT32
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+guiflags = SGF_0ISDISABLED | SGF_NETWORK_ONLY
+def = 0
+min = MIN_YEAR
+max = MAX_YEAR
+interval = 1
+
+[SDTC_VAR]
+var = network.min_active_clients
+type = SLE_UINT8
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+guiflags = SGF_NETWORK_ONLY
+def = 0
+min = 0
+max = MAX_CLIENTS
+
+[SDTC_BOOL]
+var = network.reload_cfg
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+guiflags = SGF_NETWORK_ONLY
+def = false
+cat = SC_EXPERT
+
+[SDTC_SSTR]
+var = network.last_joined
+type = SLE_STR
+length = 0
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+def = """"
+cat = SC_EXPERT
+
+[SDTC_BOOL]
+var = network.no_http_content_downloads
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+def = false
+cat = SC_EXPERT
+
+; Since the network code (CmdChangeSetting and friends) use the index in this array to decide
+; which setting the server is talking about all conditional compilation of this array must be at the
+; end. This isn't really the best solution, the settings the server can tell the client about should
+; either use a separate array or some other form of identifier.
+
+;
+; We might need to emulate a right mouse button on mac
+[SDTC_VAR]
+ifdef = __APPLE__
+var = gui.right_mouse_btn_emulation
+type = SLE_UINT8
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+guiflags = SGF_MULTISTRING
+def = 0
+min = 0
+max = 2
+str = STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU
+strhelp = STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_HELPTEXT
+strval = STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_COMMAND
+cat = SC_BASIC
diff --git a/src/table/settings/win32_settings.ini b/src/table/settings/win32_settings.ini
new file mode 100644
index 000000000..6b7d5276d
--- /dev/null
+++ b/src/table/settings/win32_settings.ini
@@ -0,0 +1,44 @@
+; This file is part of OpenTTD.
+; OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
+; OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+; See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
+;
+
+[pre-amble]
+/* win32_v.cpp only settings */
+#if defined(_WIN32) && !defined(DEDICATED)
+extern bool _window_maximize;
+
+static const SettingTable _win32_settings{
+[post-amble]
+};
+#endif /* _WIN32 */
+[templates]
+SDTG_BOOL = SDTG_BOOL($name, $flags, $guiflags, $var, $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $cat, $extra, $startup),
+SDTG_VAR = SDTG_VAR($name, $type, $flags, $guiflags, $var, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $cat, $extra, $startup),
+
+[validation]
+SDTG_VAR = static_assert($max <= MAX_$type, "Maximum value for $var exceeds storage size");
+
+[defaults]
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+guiflags = SGF_NONE
+interval = 0
+str = STR_NULL
+strhelp = STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT
+strval = STR_NULL
+pre_cb = nullptr
+post_cb = nullptr
+load = nullptr
+from = SL_MIN_VERSION
+to = SL_MAX_VERSION
+cat = SC_ADVANCED
+extra = 0
+startup = true
+
+
+[SDTG_BOOL]
+name = ""window_maximize""
+var = _window_maximize
+def = false
+cat = SC_BASIC
diff --git a/src/table/settings/window_settings.ini b/src/table/settings/window_settings.ini
new file mode 100644
index 000000000..560a197ab
--- /dev/null
+++ b/src/table/settings/window_settings.ini
@@ -0,0 +1,53 @@
+; This file is part of OpenTTD.
+; OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
+; OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+; See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
+;
+
+[pre-amble]
+
+static const SettingTable _window_settings{
+[post-amble]
+};
+[templates]
+SDT_BOOL = SDT_BOOL(WindowDesc, $var, $flags, $guiflags, $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $cat, $extra, $startup),
+SDT_VAR = SDT_VAR(WindowDesc, $var, $type, $flags, $guiflags, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $cat, $extra, $startup),
+
+[validation]
+SDT_VAR = static_assert($max <= MAX_$type, "Maximum value for WindowDesc.$var exceeds storage size");
+
+[defaults]
+flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
+guiflags = SGF_NONE
+interval = 0
+str = STR_NULL
+strhelp = STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT
+strval = STR_NULL
+pre_cb = nullptr
+post_cb = nullptr
+load = nullptr
+from = SL_MIN_VERSION
+to = SL_MAX_VERSION
+cat = SC_ADVANCED
+extra = 0
+startup = false
+
+
+
+[SDT_BOOL]
+var = pref_sticky
+def = false
+
+[SDT_VAR]
+var = pref_width
+type = SLE_INT16
+def = 0
+min = 0
+max = 32000
+
+[SDT_VAR]
+var = pref_height
+type = SLE_INT16
+def = 0
+min = 0
+max = 32000