diff --git a/src/saveload/settings_sl.cpp b/src/saveload/settings_sl.cpp index a484b6df27..ee7c1f6404 100644 --- a/src/saveload/settings_sl.cpp +++ b/src/saveload/settings_sl.cpp @@ -21,8 +21,6 @@ #include "../safeguards.h" -const SettingTable &GetSettingsTableInternal(); - namespace upstream_sl { /** @@ -34,7 +32,7 @@ namespace upstream_sl { static std::vector GetSettingsDesc(bool is_loading) { std::vector saveloads; - for (auto &sd : GetSettingsTableInternal()) { + for (auto &sd : IterateSettingTables(GetSaveLoadSettingsTables())) { if (sd->flags & SF_NOT_IN_SAVE) continue; if (is_loading && !SlXvIsFeaturePresent(XSLFI_TABLE_PATS) && (sd->flags & SF_PATCH)) continue; if (!sd->save.ext_feature_test.IsFeaturePresent(_sl_version, sd->save.version_from, sd->save.version_to)) continue; @@ -170,7 +168,7 @@ static void LoadSettings(void *object, const SaveLoadCompatTable &slct) if (!IsSavegameVersionBefore(SLV_RIFF_TO_ARRAY) && SlIterateArray() != -1) SlErrorCorrupt("Too many settings entries"); /* Ensure all IntSettings are valid (min/max could have changed between versions etc). */ - for (auto &sd : GetSettingsTableInternal()) { + for (auto &sd : IterateSettingTables(GetSaveLoadSettingsTables())) { if (sd->flags & SF_NOT_IN_SAVE) continue; if ((sd->flags & SF_NO_NETWORK_SYNC) && _networking && !_network_server) continue; if (!sd->save.ext_feature_test.IsFeaturePresent(_sl_xv_feature_static_versions, MAX_LOAD_SAVEGAME_VERSION, sd->save.version_from, sd->save.version_to)) continue; diff --git a/src/settings.cpp b/src/settings.cpp index 4c6570445a..5a540d359d 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -124,14 +124,35 @@ static bool _fallback_gui_zoom_max = false; * As such, they are not part of this list. */ static const SettingTable _generic_setting_tables[] = { - _settings, + _difficulty_settings, + _economy_settings, + _game_settings, _gui_settings, + _linkgraph_settings, + _locale_settings, _multimedia_settings, _network_settings, _news_display_settings, + _pathfinding_settings, + _script_settings, + _world_settings, _scenario_settings, }; +/** + * List of all the save/load (PATS/PATX) setting tables. + */ +static const std::initializer_list _saveload_setting_tables{ + _difficulty_settings, + _economy_settings, + _game_settings, + _linkgraph_settings, + _locale_settings, + _pathfinding_settings, + _script_settings, + _world_settings, +}; + void IterateSettingsTables(std::function handler) { handler(_misc_settings, nullptr); @@ -207,17 +228,6 @@ enum IniFileVersion : uint32 { const uint16 INIFILE_VERSION = (IniFileVersion)(IFV_MAX_VERSION - 1); ///< Current ini-file version of OpenTTD. -/** - * Get the setting at the given index into the settings table. - * @param index The index to look for. - * @return The setting at the given index, or nullptr when the index is invalid. - */ -const SettingDesc *GetSettingDescription(uint index) -{ - if (index >= _settings.size()) return nullptr; - return _settings.begin()[index].get(); -} - /** * Find the index value of a ONEofMANY type in a string separated by | * @param str the current value of the setting for which a value needs found @@ -2805,14 +2815,6 @@ CommandCost CmdChangeSetting(TileIndex tile, DoCommandFlag flags, uint32 p1, uin return CommandCost(); } -const char *GetSettingNameByIndex(uint32 idx) -{ - const SettingDesc *sd = GetSettingDescription(idx); - if (sd == nullptr) return nullptr; - - return sd->name; -} - /** * Change one of the per-company settings. * @param tile unused @@ -2961,24 +2963,16 @@ void StringSettingDesc::ChangeValue(const void *object, std::string &newval, Sav if (_save_config) SaveToConfig(ini_save_flags); } -uint GetSettingIndexByFullName(const char *name) +uint GetSettingIndexByFullName(const SettingTable &table, const char *name) { uint index = 0; - for (auto &sd : _settings) { + for (auto &sd : table) { if (sd->name != nullptr && strcmp(sd->name, name) == 0) return index; index++; } return UINT32_MAX; } -const SettingDesc *GetSettingFromFullName(const char *name) -{ - for (auto &sd : _settings) { - if (sd->name != nullptr && strcmp(sd->name, name) == 0) return sd.get(); - } - return nullptr; -} - /* Those 2 functions need to be here, else we have to make some stuff non-static * and besides, it is also better to keep stuff like this at the same place */ void IConsoleSetSetting(const char *name, const char *value, bool force_newgame) @@ -3129,13 +3123,13 @@ std::vector _settings_compat_items; * @param object can be either nullptr in which case we load global variables or * a pointer to a struct which is getting saved */ -static void LoadSettings(const SettingTable &settings, std::initializer_list compat, std::vector &items, void *object) +static void LoadSettings(std::initializer_list settings, std::initializer_list compat, std::vector &items, void *object) { if (items.empty()) { /* Populate setting references */ btree::btree_multimap names; - for (auto &osd : settings) { + for (auto &osd : IterateSettingTables(settings)) { if (osd->flags & SF_NOT_IN_SAVE) continue; if (osd->name == nullptr) continue; names.insert({osd->name, osd.get()}); @@ -3212,11 +3206,11 @@ static void LoadSettings(const SettingTable &settings, std::initializer_list MakeSettingsPatxList(const SettingTable &settings) +static std::vector MakeSettingsPatxList(std::initializer_list settings) { std::vector sorted_patx_settings; - for (auto &sd : settings) { + for (auto &sd : IterateSettingTables(settings)) { if (sd->patx_name == nullptr) continue; sorted_patx_settings.push_back(sd.get()); } @@ -3260,13 +3254,15 @@ static const SaveLoad _settings_ext_save_desc[] = { /** * Load handler for settings which go in the PATX chunk - * @param osd SettingDesc struct containing all information * @param object can be either nullptr in which case we load global variables or * a pointer to a struct which is getting saved */ -static void LoadSettingsPatx(const SettingTable &settings, void *object) +static void LoadSettingsPatx(void *object) { - std::vector sorted_patx_settings = MakeSettingsPatxList(settings); + static std::vector sorted_patx_settings; + if (sorted_patx_settings.empty()) { + sorted_patx_settings = MakeSettingsPatxList(_saveload_setting_tables); + } SettingsExtLoad current_setting; @@ -3474,7 +3470,7 @@ static void Load_OPTS() * a networking environment. This ensures for example that the local * autosave-frequency stays when joining a network-server */ PrepareOldDiffCustom(); - LoadSettings(_old_gameopt_settings, _gameopt_compat, _gameopt_compat_items, &_settings_game); + LoadSettings({ _old_gameopt_settings }, _gameopt_compat, _gameopt_compat_items, &_settings_game); HandleOldDiffCustom(true); } @@ -3483,22 +3479,22 @@ static void Load_PATS() /* Copy over default setting since some might not get loaded in * a networking environment. This ensures for example that the local * currency setting stays when joining a network-server */ - LoadSettings(_settings, _settings_compat, _settings_compat_items, &_settings_game); + LoadSettings(_saveload_setting_tables, _settings_compat, _settings_compat_items, &_settings_game); } static void Check_PATS() { - LoadSettings(_settings, _settings_compat, _settings_compat_items, &_load_check_data.settings); + LoadSettings(_saveload_setting_tables, _settings_compat, _settings_compat_items, &_load_check_data.settings); } static void Load_PATX() { - LoadSettingsPatx(_settings, &_settings_game); + LoadSettingsPatx(&_settings_game); } static void Check_PATX() { - LoadSettingsPatx(_settings, &_load_check_data.settings); + LoadSettingsPatx(&_load_check_data.settings); } struct PATSChunkInfo @@ -3545,7 +3541,12 @@ void SetupTimeSettings() _settings_time = (_game_mode == GM_MENU || _settings_client.gui.override_time_settings) ? _settings_client.gui : _settings_game.game_time; } -const SettingTable &GetSettingsTableInternal() +std::initializer_list GetSaveLoadSettingsTables() { - return _settings; + return _saveload_setting_tables; +} + +const SettingTable &GetLinkGraphSettingTable() +{ + return _linkgraph_settings; } diff --git a/src/settings_func.h b/src/settings_func.h index c2298cc61a..9eb3220f53 100644 --- a/src/settings_func.h +++ b/src/settings_func.h @@ -47,7 +47,6 @@ void SyncCompanySettings(); void SetupTimeSettings(); -const char *GetSettingNameByIndex(uint32 idx); const char *GetCompanySettingNameByIndex(uint32 idx); #endif /* SETTINGS_FUNC_H */ diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp index 865659b37f..297373e242 100644 --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -55,9 +55,6 @@ #include "safeguards.h" -uint GetSettingIndexByFullName(const char *name); -const SettingDesc *GetSettingDescription(uint index); - extern void FlushDeparturesWindowTextCaches(); static const StringID _autosave_dropdown[] = { @@ -2444,10 +2441,11 @@ static SettingsContainer &GetSettingsTree() cdist->Add(new SettingEntry("linkgraph.distribution_default")); SettingsPage *cdist_override = cdist->Add(new SettingsPage(STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST_PER_CARGO_OVERRIDE)); { - uint base_index = GetSettingIndexByFullName("linkgraph.distribution_per_cargo[0]"); + const SettingTable &linkgraph_table = GetLinkGraphSettingTable(); + uint base_index = GetSettingIndexByFullName(linkgraph_table, "linkgraph.distribution_per_cargo[0]"); assert(base_index != UINT32_MAX); for (CargoID c = 0; c < NUM_CARGO; c++) { - cdist_override->Add(new CargoDestPerCargoSettingEntry(c, GetSettingDescription(base_index + c)->AsIntSetting())); + cdist_override->Add(new CargoDestPerCargoSettingEntry(c, GetSettingDescription(linkgraph_table, base_index + c)->AsIntSetting())); } } cdist->Add(new SettingEntry("linkgraph.accuracy")); diff --git a/src/settings_internal.h b/src/settings_internal.h index dae2676582..7975f437a2 100644 --- a/src/settings_internal.h +++ b/src/settings_internal.h @@ -13,6 +13,7 @@ #include "sl/saveload_types.h" #include +#include #include enum SaveToConfigFlags : uint32; @@ -351,6 +352,71 @@ bool SetSettingValue(const IntSettingDesc *sd, int32 value, bool force_newgame = bool SetSettingValue(const StringSettingDesc *sd, const std::string value, bool force_newgame = false); void IterateSettingsTables(std::function handler); +std::initializer_list GetSaveLoadSettingsTables(); +const SettingTable &GetLinkGraphSettingTable(); +uint GetSettingIndexByFullName(const SettingTable &table, const char *name); + +/** + * Get the setting at the given index into a settings table. + * @param table The settings table. + * @param index The index to look for. + * @return The setting at the given index, or nullptr when the index is invalid. + */ +inline const SettingDesc *GetSettingDescription(const SettingTable &table, uint index) +{ + if (index >= table.size()) return nullptr; + return table.begin()[index].get(); +} + +struct SettingTablesIterator { + typedef const std::unique_ptr value_type; + typedef const std::unique_ptr *pointer; + typedef const std::unique_ptr &reference; + typedef size_t difference_type; + typedef std::forward_iterator_tag iterator_category; + + explicit SettingTablesIterator(std::initializer_list &src, std::initializer_list::iterator outer) + : src(src), outer(outer) + { + this->ResetInner(); + this->ValidateIndex(); + }; + + explicit SettingTablesIterator(std::initializer_list &src, std::initializer_list::iterator outer, SettingTable::iterator inner) + : src(src), outer(outer), inner(inner) {} + + bool operator==(const SettingTablesIterator &other) const { return this->outer == other.outer && this->inner == other.inner; } + bool operator!=(const SettingTablesIterator &other) const { return !(*this == other); } + const std::unique_ptr &operator*() const { return *this->inner; } + SettingTablesIterator &operator++() { ++this->inner; this->ValidateIndex(); return *this; } + +private: + std::initializer_list &src; + std::initializer_list::iterator outer; + SettingTable::iterator inner; + + void ResetInner() + { + this->inner = (this->outer != this->src.end()) ? this->outer->begin() : SettingTable::iterator(); + } + + void ValidateIndex() + { + while (this->outer != this->src.end() && this->inner == this->outer->end()) { + ++this->outer; + this->ResetInner(); + } + } +}; + +/* Wrapper to iterate the settings within a set of settings tables: std::initializer_list */ +struct IterateSettingTables { + std::initializer_list tables; + + IterateSettingTables(std::initializer_list tables) : tables(tables) {} + SettingTablesIterator begin() { return SettingTablesIterator(this->tables, this->tables.begin()); } + SettingTablesIterator end() { return SettingTablesIterator(this->tables, this->tables.end(), SettingTable::iterator()); } +}; enum class SettingsCompatType : uint8 { Null, diff --git a/src/sl/linkgraph_sl.cpp b/src/sl/linkgraph_sl.cpp index 702e5ee791..082bf890d8 100644 --- a/src/sl/linkgraph_sl.cpp +++ b/src/sl/linkgraph_sl.cpp @@ -20,8 +20,6 @@ typedef LinkGraph::BaseNode Node; typedef LinkGraph::BaseEdge Edge; -const SettingDesc *GetSettingDescription(uint index); - static uint16 _num_nodes; /** @@ -58,28 +56,21 @@ void GetLinkGraphJobDayLengthScaleAfterLoad(LinkGraphJob *lgj) SaveLoadTable GetLinkGraphJobDesc() { static std::vector saveloads; - static const char *prefix = "linkgraph."; /* Build the SaveLoad array on first call and don't touch it later on */ if (saveloads.size() == 0) { size_t offset_gamesettings = cpp_offsetof(GameSettings, linkgraph); size_t offset_component = cpp_offsetof(LinkGraphJob, settings); - size_t prefixlen = strlen(prefix); - - int setting = 0; - const SettingDesc *desc = GetSettingDescription(setting); - while (desc != nullptr) { - if (desc->name != nullptr && strncmp(desc->name, prefix, prefixlen) == 0) { - SaveLoad sl = desc->save; - if (GetVarMemType(sl.conv) != SLE_VAR_NULL) { - char *&address = reinterpret_cast(sl.address); - address -= offset_gamesettings; - address += offset_component; - } - saveloads.push_back(sl); + const SettingTable &linkgraph_table = GetLinkGraphSettingTable(); + for (const auto &desc : linkgraph_table) { + SaveLoad sl = desc->save; + if (GetVarMemType(sl.conv) != SLE_VAR_NULL) { + char *&address = reinterpret_cast(sl.address); + address -= offset_gamesettings; + address += offset_component; } - desc = GetSettingDescription(++setting); + saveloads.push_back(sl); } const SaveLoad job_desc[] = { diff --git a/src/table/settings.h.preamble b/src/table/settings.h.preamble index 733575e696..0b2ca5a684 100644 --- a/src/table/settings.h.preamble +++ b/src/table/settings.h.preamble @@ -13,6 +13,9 @@ static size_t ConvertLandscape(const char *value); /* Callback function used in _settings[] as well as _gui_settings[] */ static void UpdateTimeSettings(int32 new_value); +/* Callback function used for various settings */ +static bool CheckTTDPatchSettingFlag(uint flag); + /**************************** * OTTD specific INI stuff diff --git a/src/table/settings/CMakeLists.txt b/src/table/settings/CMakeLists.txt index 854dccea55..3478f0268b 100644 --- a/src/table/settings/CMakeLists.txt +++ b/src/table/settings/CMakeLists.txt @@ -4,7 +4,12 @@ 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}/difficulty_settings.ini + ${CMAKE_CURRENT_SOURCE_DIR}/economy_settings.ini + ${CMAKE_CURRENT_SOURCE_DIR}/game_settings.ini ${CMAKE_CURRENT_SOURCE_DIR}/gui_settings.ini + ${CMAKE_CURRENT_SOURCE_DIR}/linkgraph_settings.ini + ${CMAKE_CURRENT_SOURCE_DIR}/locale_settings.ini ${CMAKE_CURRENT_SOURCE_DIR}/misc_settings.ini ${CMAKE_CURRENT_SOURCE_DIR}/multimedia_settings.ini ${CMAKE_CURRENT_SOURCE_DIR}/network_settings.ini @@ -12,10 +17,12 @@ set(TABLE_INI_SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/network_secrets_settings.ini ${CMAKE_CURRENT_SOURCE_DIR}/news_display_settings.ini ${CMAKE_CURRENT_SOURCE_DIR}/old_gameopt_settings.ini + ${CMAKE_CURRENT_SOURCE_DIR}/pathfinding_settings.ini ${CMAKE_CURRENT_SOURCE_DIR}/scenario_settings.ini - ${CMAKE_CURRENT_SOURCE_DIR}/settings.ini + ${CMAKE_CURRENT_SOURCE_DIR}/script_settings.ini ${CMAKE_CURRENT_SOURCE_DIR}/win32_settings.ini ${CMAKE_CURRENT_SOURCE_DIR}/window_settings.ini + ${CMAKE_CURRENT_SOURCE_DIR}/world_settings.ini ) if (HOST_BINARY_DIR) diff --git a/src/table/settings/company_settings.ini b/src/table/settings/company_settings.ini index fcc1f6bf7b..30ed0101c7 100644 --- a/src/table/settings/company_settings.ini +++ b/src/table/settings/company_settings.ini @@ -8,9 +8,9 @@ ; company changes them, it changes for all players. [pre-amble] -static void UpdateAllServiceInterval(int32 new_value); -static bool CanUpdateServiceInterval(VehicleType type, int32 &new_value); -static void UpdateServiceInterval(VehicleType type, int32 new_value); +static void UpdateAllServiceInterval(int32_t new_value); +static bool CanUpdateServiceInterval(VehicleType type, int32_t &new_value); +static void UpdateServiceInterval(VehicleType type, int32_t new_value); static const SettingTable _company_settings{ [post-amble] diff --git a/src/table/settings/currency_settings.ini b/src/table/settings/currency_settings.ini index a50e007f8a..71900eef22 100644 --- a/src/table/settings/currency_settings.ini +++ b/src/table/settings/currency_settings.ini @@ -34,7 +34,6 @@ startup = false extver = SlXvFeatureTest() - [SDT_VAR] var = rate type = SLE_UINT16 diff --git a/src/table/settings/difficulty_settings.ini b/src/table/settings/difficulty_settings.ini new file mode 100644 index 0000000000..f0e49785ed --- /dev/null +++ b/src/table/settings/difficulty_settings.ini @@ -0,0 +1,369 @@ +; 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 . +; + +; Difficulty settings as stored in the main configuration file ("openttd.cfg") +; and in the savegame PATS chunk. + +[pre-amble] +static const uint GAME_DIFFICULTY_NUM = 18; +static const std::array _old_diff_settings{"max_no_competitors", "competitor_start_time", "number_towns", "industry_density", "max_loan", "initial_interest", "vehicle_costs", "competitor_speed", "competitor_intelligence", "vehicle_breakdowns", "subsidy_multiplier", "construction_cost", "terrain_type", "quantity_sea_lakes", "economy", "line_reverse_mode", "disasters", "town_council_tolerance"}; +static uint16 _old_diff_custom[GAME_DIFFICULTY_NUM]; +uint8 _old_diff_level; ///< Old difficulty level from old savegames + +static void DifficultyNoiseChange(int32_t new_value); +static void MaxNoAIsChange(int32_t new_value); +static bool TownCouncilToleranceAdjust(int32 &new_value); +static void DifficultyMoneyCheatMultiplayerChange(int32 new_value); +static void DifficultyRenameTownsMultiplayerChange(int32 new_value); +static void DifficultyOverrideTownSettingsMultiplayerChange(int32 new_value); + +static const SettingDescEnumEntry _town_council_approval[] = { +{ 0, STR_CITY_APPROVAL_LENIENT }, +{ 1, STR_CITY_APPROVAL_TOLERANT }, +{ 2, STR_CITY_APPROVAL_HOSTILE }, +{ 3, STR_CITY_APPROVAL_PERMISSIVE }, +{ 0, STR_NULL } +}; + +static const SettingDescEnumEntry _vehicle_breakdown_modes[] = { +{ 0, STR_DISASTER_NONE }, +{ 64, STR_VERY_REDUCED }, +{ 1, STR_DISASTER_REDUCED }, +{ 2, STR_DISASTER_NORMAL }, +{ 0, STR_NULL } +}; + +static const SettingTable _difficulty_settings{ +[post-amble] +}; +[templates] +SDTG_VAR = SDTG_VAR($name, $type, $flags, $var, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $extver, $cat, $guiproc, $startup, $patxname), +SDT_BOOL = SDT_BOOL(GameSettings, $var, $flags, $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $extver, $cat, $guiproc, $startup, $patxname), +SDT_VAR = SDT_VAR(GameSettings, $var, $type, $flags, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $extver, $cat, $guiproc, $startup, $patxname), +SDT_ENUM = SDT_ENUM(GameSettings, $var, $type, $flags, $def, $str, $strhelp, $pre_cb, $post_cb, $from, $to, $extver, $cat, $guiproc, $startup, $patxname, $enumlist), + +[validation] +SDTG_VAR = static_assert($max <= MAX_$type, "Maximum value for $var exceeds storage size"); +SDT_VAR = static_assert($max <= MAX_$type, "Maximum value for GameSettings.$var exceeds storage size"); + +[defaults] +flags = SF_NONE +interval = 0 +str = STR_NULL +strhelp = STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT +strval = STR_NULL +pre_cb = nullptr +post_cb = nullptr +guiproc = nullptr +load = nullptr +from = SL_MIN_VERSION +to = SL_MAX_VERSION +cat = SC_ADVANCED +startup = false +extver = SlXvFeatureTest() +patxname = nullptr +enumlist = + + +; Saved settings variables. +; The next 18 entries are important for savegame compatibility. Do NOT remove those. See HandleOldDiffCustom() for more details. +[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_VAR] +var = difficulty.competitors_interval +type = SLE_UINT16 +def = 10 +min = MIN_COMPETITORS_INTERVAL +max = MAX_COMPETITORS_INTERVAL +interval = 1 +patxname = ""difficulty.competitors_interval"" + +[SDT_VAR] +var = difficulty.competitor_start_time +type = SLE_UINT8 +from = SLV_97 +to = SLV_110 +def = 2 +min = 0 +max = 3 + +[SDT_VAR] +var = difficulty.number_towns +type = SLE_UINT8 +from = SLV_97 +flags = SF_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 +flags = SF_GUI_DROPDOWN +def = ID_NORMAL +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 +flags = SF_NEWGAME_ONLY | SF_SCENEDIT_TOO | SF_GUI_CURRENCY | SF_GUI_0_IS_SPECIAL +def = 300000 +min = LOAN_INTERVAL +max = 2000000000 +pre_cb = [](auto &new_value) { new_value = (new_value + LOAN_INTERVAL / 2) / LOAN_INTERVAL * LOAN_INTERVAL; return true; } +interval = LOAN_INTERVAL +str = STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN +strhelp = STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT +strval = STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE +cat = SC_BASIC + +[SDT_VAR] +var = difficulty.initial_interest +type = SLE_UINT8 +from = SLV_97 +flags = SF_NEWGAME_ONLY | SF_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 +flags = SF_NEWGAME_ONLY | SF_SCENEDIT_TOO | SF_GUI_DROPDOWN +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.vehicle_costs_in_depot +type = SLE_UINT8 +flags = SF_PATCH +def = 1 +min = 1 +max = 8 +str = STR_CONFIG_SETTING_RUNNING_COSTS_IN_DEPOT +strhelp = STR_CONFIG_SETTING_RUNNING_COSTS_IN_DEPOT_HELPTEXT +strval = STR_CONFIG_SETTING_RUNNING_COSTS_IN_DEPOT_VALUE +patxname = ""difficulty.vehicle_costs_in_depot"" + +[SDT_VAR] +var = difficulty.vehicle_costs_when_stopped +type = SLE_UINT8 +flags = SF_PATCH +def = 1 +min = 1 +max = 8 +str = STR_CONFIG_SETTING_RUNNING_COSTS_WHEN_STOPPED +strhelp = STR_CONFIG_SETTING_RUNNING_COSTS_WHEN_STOPPED_HELPTEXT +strval = STR_CONFIG_SETTING_RUNNING_COSTS_WHEN_STOPPED_VALUE +strval = STR_CONFIG_SETTING_RUNNING_COSTS_IN_DEPOT_VALUE +patxname = ""difficulty.vehicle_costs_when_stopped"" + +[SDT_VAR] +var = difficulty.competitor_speed +type = SLE_UINT8 +from = SLV_97 +flags = SF_GUI_DROPDOWN +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_VAR] +var = difficulty.competitor_intelligence +type = SLE_UINT8 +from = SLV_97 +to = SLV_110 +def = 0 +min = 0 +max = 2 + +[SDT_ENUM] +var = difficulty.vehicle_breakdowns +type = SLE_UINT8 +from = SLV_97 +def = 1 +enumlist = _vehicle_breakdown_modes +str = STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS +strhelp = STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS_HELPTEXT +cat = SC_BASIC + +[SDT_VAR] +var = difficulty.subsidy_multiplier +type = SLE_UINT8 +from = SLV_97 +flags = SF_GUI_DROPDOWN +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.subsidy_duration +type = SLE_UINT16 +from = SLV_CUSTOM_SUBSIDY_DURATION +flags = SF_GUI_0_IS_SPECIAL +def = 1 +min = 0 +max = 5000 +interval = 1 +str = STR_CONFIG_SETTING_SUBSIDY_DURATION +strhelp = STR_CONFIG_SETTING_SUBSIDY_DURATION_HELPTEXT +strval = STR_CONFIG_SETTING_SUBSIDY_DURATION_VALUE + +[SDT_VAR] +var = difficulty.construction_cost +type = SLE_UINT8 +from = SLV_97 +flags = SF_NEWGAME_ONLY | SF_SCENEDIT_TOO | SF_GUI_DROPDOWN +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 +flags = SF_GUI_DROPDOWN | SF_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 +flags = SF_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_ENUM] +var = difficulty.town_council_tolerance +type = SLE_UINT8 +from = SLV_97 +flags = SF_ENUM_PRE_CB_VALIDATE +def = 0 +enumlist = _town_council_approval +str = STR_CONFIG_SETTING_CITY_APPROVAL +strhelp = STR_CONFIG_SETTING_CITY_APPROVAL_HELPTEXT +pre_cb = TownCouncilToleranceAdjust +post_cb = DifficultyNoiseChange + +[SDT_BOOL] +var = difficulty.money_cheat_in_multiplayer +flags = SF_PATCH +def = false +str = STR_CONFIG_SETTING_MONEY_CHEAT_MULTIPLAYER +strhelp = STR_CONFIG_SETTING_MONEY_CHEAT_MULTIPLAYER_HELPTEXT +post_cb = DifficultyMoneyCheatMultiplayerChange +cat = SC_EXPERT +patxname = ""cheat.difficulty.money_cheat_in_multiplayer"" + +[SDT_BOOL] +var = difficulty.rename_towns_in_multiplayer +flags = SF_PATCH +def = false +str = STR_CONFIG_SETTING_RENAME_TOWNS_MULTIPLAYER +strhelp = STR_CONFIG_SETTING_RENAME_TOWNS_MULTIPLAYER_HELPTEXT +post_cb = DifficultyRenameTownsMultiplayerChange +cat = SC_EXPERT +patxname = ""cheat.difficulty.rename_towns_in_multiplayer"" + +[SDT_BOOL] +var = difficulty.override_town_settings_in_multiplayer +flags = SF_PATCH +def = false +str = STR_CONFIG_SETTING_OVERRIDE_TOWN_SETTINGS_MULTIPLAYER +strhelp = STR_CONFIG_SETTING_OVERRIDE_TOWN_SETTINGS_MULTIPLAYER_HELPTEXT +post_cb = DifficultyOverrideTownSettingsMultiplayerChange +cat = SC_EXPERT +patxname = ""cheat.difficulty.override_town_settings_in_multiplayer"" + +[SDTG_VAR] +name = ""diff_level"" +var = _old_diff_level +type = SLE_UINT8 +flags = SF_NOT_IN_CONFIG +from = SLV_97 +to = SLV_178 +def = 3 +min = 0 +max = 3 +cat = SC_BASIC + diff --git a/src/table/settings/economy_settings.ini b/src/table/settings/economy_settings.ini new file mode 100644 index 0000000000..5ae94c716c --- /dev/null +++ b/src/table/settings/economy_settings.ini @@ -0,0 +1,789 @@ +; 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 . +; + +; Economy settings as stored in the main configuration file ("openttd.cfg") +; and in the savegame PATS chunk. + +[pre-amble] +static void TownFoundingChanged(int32_t new_value); +static void InvalidateCompanyWindow(int32 new_value); +static bool DayLengthPreChange(int32 &new_value); +static void DayLengthChanged(int32 new_value); +static bool CheckSharingRail(int32 &new_value); +static void SharingRailChanged(int32 new_value); +static bool CheckSharingRoad(int32 &new_value); +static bool CheckSharingWater(int32 &new_value); +static bool CheckSharingAir(int32 &new_value); +static void TownZoneModeChanged(int32 new_value); +static void TownZoneCustomValueChanged(int32 new_value); + +static bool OrderTownGrowthRate(SettingOnGuiCtrlData &data); + +static const SettingTable _economy_settings{ +[post-amble] +}; +[templates] +SDT_BOOL = SDT_BOOL(GameSettings, $var, $flags, $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $extver, $cat, $guiproc, $startup, $patxname), +SDT_VAR = SDT_VAR(GameSettings, $var, $type, $flags, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $extver, $cat, $guiproc, $startup, $patxname), + +[validation] +SDT_VAR = static_assert($max <= MAX_$type, "Maximum value for GameSettings.$var exceeds storage size"); + +[defaults] +flags = SF_NONE +interval = 0 +str = STR_NULL +strhelp = STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT +strval = STR_NULL +pre_cb = nullptr +post_cb = nullptr +guiproc = nullptr +load = nullptr +from = SL_MIN_VERSION +to = SL_MAX_VERSION +cat = SC_ADVANCED +startup = false +extver = SlXvFeatureTest() +patxname = nullptr +enumlist = + + +[SDT_VAR] +var = economy.town_layout +type = SLE_UINT8 +from = SLV_59 +flags = SF_GUI_DROPDOWN +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 +def = true +str = STR_CONFIG_SETTING_ALLOW_TOWN_ROADS +strhelp = STR_CONFIG_SETTING_ALLOW_TOWN_ROADS_HELPTEXT +pre_cb = [](int32 &new_value) -> bool { return CheckTTDPatchSettingFlag(0x62); } + +[SDT_VAR] +var = economy.found_town +type = SLE_UINT8 +from = SLV_128 +flags = SF_GUI_DROPDOWN +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 +def = true +str = STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS +strhelp = STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS_HELPTEXT + +[SDT_VAR] +var = economy.town_build_tunnels +type = SLE_UINT8 +flags = SF_GUI_DROPDOWN | SF_PATCH +def = TTM_ALLOWED +min = TTM_BEGIN +max = TTM_END - 1 +interval = 1 +str = STR_CONFIG_SETTING_TOWN_TUNNELS +strhelp = STR_CONFIG_SETTING_TOWN_TUNNELS_HELPTEXT +strval = STR_CONFIG_SETTING_TOWN_TUNNELS_FORBIDDEN +cat = SC_BASIC +patxname = ""economy.town_build_tunnels"" + +[SDT_VAR] +var = economy.town_max_road_slope +type = SLE_UINT8 +flags = SF_GUI_0_IS_SPECIAL | SF_PATCH +def = 4 +min = 0 +max = 8 +interval = 1 +str = STR_CONFIG_SETTING_TOWN_MAX_ROAD_SLOPE +strhelp = STR_CONFIG_SETTING_TOWN_MAX_ROAD_SLOPE_HELPTEXT +strval = STR_CONFIG_SETTING_TOWN_MAX_ROAD_SLOPE_VALUE +cat = SC_BASIC +patxname = ""economy.town_max_road_slope"" + +[SDT_BOOL] +var = economy.allow_town_bridges +flags = SF_PATCH +def = true +str = STR_CONFIG_SETTING_ALLOW_TOWN_BRIDGES +strhelp = STR_CONFIG_SETTING_ALLOW_TOWN_BRIDGES_HELPTEXT +cat = SC_BASIC +patxname = ""economy.allow_town_bridges"" + +[SDT_VAR] +var = economy.town_cargogen_mode +type = SLE_UINT8 +from = SLV_TOWN_CARGOGEN +flags = SF_GUI_DROPDOWN +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 + +[SDT_VAR] +var = economy.old_town_cargo_factor +type = SLE_INT8 +flags = SF_PATCH +def = 0 +min = -16 +max = +8 +interval = 1 +str = STR_CONFIG_SETTING_TOWN_CARGO_FACTOR +strval = STR_JUST_INT +extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_TOWN_CARGO_ADJ, 1, 1) +patxname = ""town_cargo_adj.economy.town_cargo_factor"" + +[SDT_VAR] +var = economy.town_cargo_scale_factor +type = SLE_INT16 +flags = SF_DECIMAL1 | SF_DEC1SCALE | SF_PATCH +def = 0 +min = -160 +max = +80 +interval = 1 +str = STR_CONFIG_SETTING_TOWN_CARGO_FACTOR +strval = STR_DECIMAL1_WITH_SCALE +strhelp = STR_CONFIG_SETTING_TOWN_CARGO_FACTOR_HELPTEXT +patxname = ""town_cargo_adj.economy.town_cargo_scale_factor"" + +[SDT_VAR] +var = economy.industry_cargo_scale_factor +type = SLE_INT16 +flags = SF_DECIMAL1 | SF_DEC1SCALE | SF_PATCH +def = 0 +min = -50 +max = +50 +interval = 1 +str = STR_CONFIG_SETTING_INDUSTRY_CARGO_FACTOR +strval = STR_DECIMAL1_WITH_SCALE +strhelp = STR_CONFIG_SETTING_INDUSTRY_CARGO_FACTOR_HELPTEXT +patxname = ""industry_cargo_adj.economy.industry_cargo_scale_factor"" + +[SDT_VAR] +var = economy.max_town_heightlevel +type = SLE_UINT8 +flags = SF_PATCH +def = MAX_MAP_HEIGHT_LIMIT +min = 2 +max = MAX_MAP_HEIGHT_LIMIT +interval = 1 +str = STR_CONFIG_SETTING_TOWN_ABOVE_HEIGHT +strhelp = STR_CONFIG_SETTING_TOWN_ABOVE_HEIGHT_HELPTEXT +strval = STR_JUST_INT +cat = SC_BASIC +patxname = ""max_town_heightlevel.economy.max_town_heightlevel"" + +[SDT_VAR] +var = economy.min_town_land_area +type = SLE_UINT16 +flags = SF_GUI_0_IS_SPECIAL | SF_PATCH +def = 0 +min = 0 +max = 400 +interval = 5 +str = STR_CONFIG_SETTING_MIN_TOWN_LAND_AREA +strhelp = STR_CONFIG_SETTING_MIN_TOWN_LAND_AREA_HELPTEXT +strval = STR_CONFIG_SETTING_MIN_LAND_AREA_VALUE +cat = SC_BASIC +patxname = ""max_town_heightlevel.economy.min_town_land_area"" + +[SDT_VAR] +var = economy.min_city_land_area +type = SLE_UINT16 +flags = SF_GUI_0_IS_SPECIAL | SF_PATCH +def = 75 +min = 0 +max = 400 +interval = 5 +str = STR_CONFIG_SETTING_MIN_CITY_LAND_AREA +strhelp = STR_CONFIG_SETTING_MIN_CITY_LAND_AREA_HELPTEXT +strval = STR_CONFIG_SETTING_MIN_LAND_AREA_VALUE +cat = SC_BASIC +patxname = ""max_town_heightlevel.economy.min_city_land_area"" + +[SDT_BOOL] +var = economy.station_noise_level +from = SLV_96 +flags = SF_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 = economy.inflation +def = false +str = STR_CONFIG_SETTING_INFLATION +strhelp = STR_CONFIG_SETTING_INFLATION_HELPTEXT +cat = SC_BASIC +pre_cb = [](int32 &new_value) -> bool { return CheckTTDPatchSettingFlag(0x81); } + +[SDT_BOOL] +var = economy.inflation_fixed_dates +flags = SF_PATCH +def = true +str = STR_CONFIG_SETTING_INFLATION_FIXED_DATES +strhelp = STR_CONFIG_SETTING_INFLATION_FIXED_DATES_HELPTEXT +patxname = ""inflation_fixed_dates.economy.inflation_fixed_dates"" + +[SDT_VAR] +var = economy.day_length_factor +type = SLE_UINT8 +flags = SF_PATCH +def = 1 +min = 1 +max = 125 +str = STR_CONFIG_SETTING_DAY_LENGTH_FACTOR +strhelp = STR_CONFIG_SETTING_DAY_LENGTH_FACTOR_HELPTEXT +strval = STR_JUST_COMMA +pre_cb = DayLengthPreChange +post_cb = DayLengthChanged +cat = SC_BASIC +extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_VARIABLE_DAY_LENGTH) +patxname = ""variable_day_length.economy.day_length_factor"" + +[SDT_BOOL] +var = economy.multiple_industry_per_town +def = false +str = STR_CONFIG_SETTING_MULTIPINDTOWN +strhelp = STR_CONFIG_SETTING_MULTIPINDTOWN_HELPTEXT + +[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 = economy.type +type = SLE_UINT8 +flags = SF_GUI_DROPDOWN +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 = InvalidateCompanyWindow + +[SDT_VAR] +var = economy.min_years_for_shares +type = SLE_UINT8 +from = SLV_TRADING_AGE +flags = SF_GUI_0_IS_SPECIAL +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_CONFIG_SETTING_MIN_YEARS_FOR_SHARES_VALUE +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_INT8 +from = SLV_54 +flags = SF_GUI_DROPDOWN +def = 2 +min = -2 +max = 4 +str = STR_CONFIG_SETTING_TOWN_GROWTH +strhelp = STR_CONFIG_SETTING_TOWN_GROWTH_HELPTEXT +strval = STR_CONFIG_SETTING_TOWN_GROWTH_EXTREME_SLOW +guiproc = OrderTownGrowthRate + +[SDT_BOOL] +var = economy.town_zone_calc_mode +flags = SF_PATCH +def = false +str = STR_CONFIG_SETTING_TOWN_ZONE_CALC_MODE +strhelp = STR_CONFIG_SETTING_TOWN_ZONE_CALC_MODE_HELPTEXT +cat = SC_EXPERT +post_cb = TownZoneModeChanged +patxname = ""town_zone.economy.town_zone_calc_mode"" + +[SDT_VAR] +var = economy.town_zone_0_mult +type = SLE_UINT16 +flags = SF_PATCH +def = 15 +min = 0 +max = 255 +interval = 1 +str = STR_CONFIG_SETTING_TOWN_ZONE_0_MULT +strhelp = STR_CONFIG_SETTING_TOWN_ZONE_0_MULT_HELPTEXT +strval = STR_JUST_COMMA +cat = SC_EXPERT +post_cb = TownZoneCustomValueChanged +patxname = ""town_zone.economy.town_zone_0_mult"" + +[SDT_VAR] +var = economy.town_zone_1_mult +type = SLE_UINT16 +flags = SF_PATCH +def = 9 +min = 0 +max = 255 +interval = 1 +str = STR_CONFIG_SETTING_TOWN_ZONE_1_MULT +strhelp = STR_CONFIG_SETTING_TOWN_ZONE_1_MULT_HELPTEXT +strval = STR_JUST_COMMA +cat = SC_EXPERT +post_cb = TownZoneCustomValueChanged +patxname = ""town_zone.economy.town_zone_1_mult"" + +[SDT_VAR] +var = economy.town_zone_2_mult +type = SLE_UINT16 +flags = SF_PATCH +def = 0 +min = 0 +max = 255 +interval = 1 +str = STR_CONFIG_SETTING_TOWN_ZONE_2_MULT +strhelp = STR_CONFIG_SETTING_TOWN_ZONE_2_MULT_HELPTEXT +strval = STR_JUST_COMMA +cat = SC_EXPERT +post_cb = TownZoneCustomValueChanged +patxname = ""town_zone.economy.town_zone_2_mult"" + +[SDT_VAR] +var = economy.town_zone_3_mult +type = SLE_UINT16 +flags = SF_PATCH +def = 5 +min = 0 +max = 255 +interval = 1 +str = STR_CONFIG_SETTING_TOWN_ZONE_3_MULT +strhelp = STR_CONFIG_SETTING_TOWN_ZONE_3_MULT_HELPTEXT +strval = STR_JUST_COMMA +cat = SC_EXPERT +post_cb = TownZoneCustomValueChanged +patxname = ""town_zone.economy.town_zone_3_mult"" + +[SDT_VAR] +var = economy.town_zone_4_mult +type = SLE_UINT16 +flags = SF_PATCH +def = 3 +min = 0 +max = 255 +interval = 1 +str = STR_CONFIG_SETTING_TOWN_ZONE_4_MULT +strhelp = STR_CONFIG_SETTING_TOWN_ZONE_4_MULT_HELPTEXT +strval = STR_JUST_COMMA +cat = SC_EXPERT +post_cb = TownZoneCustomValueChanged +patxname = ""town_zone.economy.town_zone_4_mult"" + +[SDT_VAR] +var = economy.city_zone_0_mult +type = SLE_UINT16 +flags = SF_PATCH +def = 15 +min = 0 +max = 255 +interval = 1 +str = STR_CONFIG_SETTING_CITY_ZONE_0_MULT +strhelp = STR_CONFIG_SETTING_CITY_ZONE_0_MULT_HELPTEXT +strval = STR_JUST_COMMA +cat = SC_EXPERT +post_cb = TownZoneCustomValueChanged +patxname = ""town_zone.economy.city_zone_0_mult"" + +[SDT_VAR] +var = economy.city_zone_1_mult +type = SLE_UINT16 +flags = SF_PATCH +def = 9 +min = 0 +max = 255 +interval = 1 +str = STR_CONFIG_SETTING_CITY_ZONE_1_MULT +strhelp = STR_CONFIG_SETTING_CITY_ZONE_1_MULT_HELPTEXT +strval = STR_JUST_COMMA +cat = SC_EXPERT +post_cb = TownZoneCustomValueChanged +patxname = ""town_zone.economy.city_zone_1_mult"" + +[SDT_VAR] +var = economy.city_zone_2_mult +type = SLE_UINT16 +flags = SF_PATCH +def = 0 +min = 0 +max = 255 +interval = 1 +str = STR_CONFIG_SETTING_CITY_ZONE_2_MULT +strhelp = STR_CONFIG_SETTING_CITY_ZONE_2_MULT_HELPTEXT +strval = STR_JUST_COMMA +cat = SC_EXPERT +post_cb = TownZoneCustomValueChanged +patxname = ""town_zone.economy.city_zone_2_mult"" + +[SDT_VAR] +var = economy.city_zone_3_mult +type = SLE_UINT16 +flags = SF_PATCH +def = 5 +min = 0 +max = 255 +interval = 1 +str = STR_CONFIG_SETTING_CITY_ZONE_3_MULT +strhelp = STR_CONFIG_SETTING_CITY_ZONE_3_MULT_HELPTEXT +strval = STR_JUST_COMMA +cat = SC_EXPERT +post_cb = TownZoneCustomValueChanged +patxname = ""town_zone.economy.city_zone_3_mult"" + +[SDT_VAR] +var = economy.city_zone_4_mult +type = SLE_UINT16 +flags = SF_PATCH +def = 3 +min = 0 +max = 255 +interval = 1 +str = STR_CONFIG_SETTING_CITY_ZONE_4_MULT +strhelp = STR_CONFIG_SETTING_CITY_ZONE_4_MULT_HELPTEXT +strval = STR_JUST_COMMA +cat = SC_EXPERT +post_cb = TownZoneCustomValueChanged +patxname = ""town_zone.economy.city_zone_4_mult"" + +[SDT_VAR] +var = economy.town_growth_cargo_transported +type = SLE_UINT8 +flags = SF_PATCH +def = 0 +min = 0 +max = 100 +interval = 10 +str = STR_CONFIG_SETTING_TOWN_GROWTH_CARGO_TRANSPORTED +strhelp = STR_CONFIG_SETTING_TOWN_GROWTH_CARGO_TRANSPORTED_HELPTEXT +strval = STR_CONFIG_SETTING_PERCENTAGE +cat = SC_EXPERT +patxname = ""town_growth.economy.town_growth_cargo_transported"" + +[SDT_VAR] +var = economy.larger_towns +type = SLE_UINT8 +from = SLV_54 +flags = SF_GUI_0_IS_SPECIAL +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 + +[SDT_VAR] +var = economy.town_min_distance +type = SLE_UINT16 +flags = SF_PATCH +def = 20 +min = 15 +max = 500 +interval = 5 +str = STR_CONFIG_SETTING_TOWN_MIN_DISTANCE +strhelp = STR_CONFIG_SETTING_TOWN_MIN_DISTANCE_HELPTEXT +strval = STR_JUST_INT +patxname = ""town_min_distance.economy.town_min_distance"" + +[SDT_BOOL] +var = economy.infrastructure_sharing[0] +flags = SF_PATCH +def = false +str = STR_CONFIG_SETTING_SHARING_RAIL +pre_cb = CheckSharingRail +post_cb = SharingRailChanged +extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_INFRA_SHARING) +patxname = ""infra_sharing.economy.infrastructure_sharing.rail"" + +[SDT_BOOL] +var = economy.infrastructure_sharing[1] +flags = SF_PATCH +def = false +str = STR_CONFIG_SETTING_SHARING_ROAD +pre_cb = CheckSharingRoad +extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_INFRA_SHARING) +patxname = ""infra_sharing.economy.infrastructure_sharing.road"" + +[SDT_BOOL] +var = economy.infrastructure_sharing[2] +flags = SF_PATCH +def = false +str = STR_CONFIG_SETTING_SHARING_WATER +pre_cb = CheckSharingWater +extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_INFRA_SHARING) +patxname = ""infra_sharing.economy.infrastructure_sharing.water"" + +[SDT_BOOL] +var = economy.infrastructure_sharing[3] +flags = SF_PATCH +def = false +str = STR_CONFIG_SETTING_SHARING_AIR +pre_cb = CheckSharingAir +extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_INFRA_SHARING) +patxname = ""infra_sharing.economy.infrastructure_sharing.air"" + +[SDT_VAR] +var = economy.sharing_fee[0] +type = SLE_UINT +flags = SF_GUI_CURRENCY | SF_PATCH +def = 100 +min = 0 +max = 1000000 +interval = 10 +str = STR_CONFIG_SETTING_SHARING_FEE_RAIL +strhelp = STR_CONFIG_SETTING_SHARING_FEE_HELPTEXT +strval = STR_JUST_CURRENCY_LONG +extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_INFRA_SHARING) +patxname = ""infra_sharing.economy.sharing_fee.rail"" + +[SDT_VAR] +var = economy.sharing_fee[1] +type = SLE_UINT +flags = SF_GUI_CURRENCY | SF_PATCH +def = 100 +min = 0 +max = 1000000 +interval = 10 +str = STR_CONFIG_SETTING_SHARING_FEE_ROAD +strhelp = STR_CONFIG_SETTING_SHARING_FEE_HELPTEXT +strval = STR_JUST_CURRENCY_LONG +extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_INFRA_SHARING) +patxname = ""infra_sharing.economy.sharing_fee.road"" + +[SDT_VAR] +var = economy.sharing_fee[2] +type = SLE_UINT +flags = SF_GUI_CURRENCY | SF_PATCH +def = 100 +min = 0 +max = 1000000 +interval = 10 +str = STR_CONFIG_SETTING_SHARING_FEE_WATER +strhelp = STR_CONFIG_SETTING_SHARING_FEE_HELPTEXT +strval = STR_JUST_CURRENCY_LONG +extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_INFRA_SHARING) +patxname = ""infra_sharing.economy.sharing_fee.water"" + +[SDT_VAR] +var = economy.sharing_fee[3] +type = SLE_UINT +flags = SF_GUI_CURRENCY | SF_PATCH +def = 100 +min = 0 +max = 1000000 +interval = 10 +str = STR_CONFIG_SETTING_SHARING_FEE_AIR +strhelp = STR_CONFIG_SETTING_SHARING_FEE_HELPTEXT +strval = STR_JUST_CURRENCY_LONG +extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_INFRA_SHARING) +patxname = ""infra_sharing.economy.sharing_fee.air"" + +[SDT_BOOL] +var = economy.sharing_payment_in_debt +flags = SF_PATCH +def = false +str = STR_CONFIG_SETTING_SHARING_PAYMENT_IN_DEBT +extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_INFRA_SHARING) +patxname = ""infra_sharing.economy.sharing_payment_in_debt"" + +[SDT_VAR] +var = economy.dist_local_authority +type = SLE_UINT8 +def = 20 +min = 5 +max = 60 +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 = economy.random_road_reconstruction +type = SLE_UINT16 +flags = SF_PATCH +def = 0 +min = 0 +max = 1000 +str = STR_CONFIG_SETTING_RANDOM_ROAD_RECONSTRUCTION +strhelp = STR_CONFIG_SETTING_RANDOM_ROAD_RECONSTRUCTION_HELPTEXT +strval = STR_JUST_COMMA +cat = SC_BASIC +patxname = ""economy.random_road_reconstruction"" + +[SDT_BOOL] +var = economy.disable_inflation_newgrf_flag +flags = SF_PATCH +def = false +cat = SC_EXPERT +patxname = ""economy.disable_inflation_newgrf_flag"" + +[SDT_VAR] +var = economy.payment_algorithm +type = SLE_UINT8 +flags = SF_GUI_DROPDOWN | SF_PATCH +def = CPA_MODERN +min = CPA_BEGIN +max = CPA_END - 1 +interval = 1 +str = STR_CONFIG_SETTING_CARGO_PAYMENT_ALGORITHM +strhelp = STR_CONFIG_SETTING_CARGO_PAYMENT_ALGORITHM_HELPTEXT +strval = STR_CONFIG_SETTING_CARGO_PAYMENT_ALGORITHM_TRADITIONAL +cat = SC_BASIC +patxname = ""economy.payment_algorithm"" + +[SDT_VAR] +var = economy.tick_rate +type = SLE_UINT8 +flags = SF_GUI_DROPDOWN | SF_PATCH +def = TRM_TRADITIONAL +min = TRM_BEGIN +max = TRM_END - 1 +interval = 1 +str = STR_CONFIG_SETTING_TICK_RATE +strhelp = STR_CONFIG_SETTING_TICK_RATE_HELPTEXT +strval = STR_CONFIG_SETTING_TICK_RATE_TRADITIONAL +cat = SC_EXPERT +post_cb = [](auto) { SetupTickRate(); } +patxname = ""economy.tick_rate"" diff --git a/src/table/settings/game_settings.ini b/src/table/settings/game_settings.ini new file mode 100644 index 0000000000..138126c3f0 --- /dev/null +++ b/src/table/settings/game_settings.ini @@ -0,0 +1,748 @@ +; 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 . +; + +; Game settings as stored in the main configuration file ("openttd.cfg") +; and in the savegame PATS chunk. +; Game settings are everything related to vehicles, stations, orders, etc. + +[pre-amble] +static constexpr std::initializer_list _roadsides{"left", "right"}; + +static void StationSpreadChanged(int32_t new_value); +static void UpdateConsists(int32_t new_value); +static void TrainAccelerationModelChanged(int32_t new_value); +static bool CheckTrainBrakingModelChange(int32 &new_value); +static void TrainBrakingModelChanged(int32 new_value); +static void RoadVehAccelerationModelChanged(int32_t new_value); +static void TrainSlopeSteepnessChanged(int32_t new_value); +static void RoadVehSlopeSteepnessChanged(int32_t new_value); +static bool CheckRoadSide(int32_t &new_value); +static void RoadSideChanged(int32 new_value); +static bool CheckDynamicEngines(int32_t &new_value); +static void StationCatchmentChanged(int32_t new_value); +static void MaxVehiclesChanged(int32_t new_value); +static void ImprovedBreakdownsSettingChanged(int32 new_value); +static void TrainSpeedAdaptationChanged(int32 new_value); + +static const SettingDescEnumEntry _train_braking_model[] = { +{ TBM_ORIGINAL, STR_CONFIG_SETTING_ORIGINAL }, +{ TBM_REALISTIC, STR_CONFIG_SETTING_TRAIN_BRAKING_REALISTIC }, +{ 0, STR_NULL } +}; + +static const SettingDescEnumEntry _realistic_braking_aspect_limited[] = { +{ TRBALM_OFF, STR_CONFIG_SETTING_OFF }, +{ TRBALM_ON, STR_CONFIG_SETTING_TRAIN_BRAKING_ASPECT_LIMITED_ON }, +{ 0, STR_NULL } +}; + +static const SettingDescEnumEntry _station_delivery_mode[] = { +{ SD_NEAREST_FIRST, STR_CONFIG_SETTING_ORIGINAL}, +{ SD_BALANCED, STR_CONFIG_SETTING_DELIVERY_BALANCED}, +{ 0, STR_NULL } +}; + +static const SettingTable _game_settings{ +[post-amble] +}; +[templates] +SDTG_BOOL = SDTG_BOOL($name, $flags, $var, $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $extver, $cat, $guiproc, $startup, $patxname), +SDTG_VAR = SDTG_VAR($name, $type, $flags, $var, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $extver, $cat, $guiproc, $startup, $patxname), +SDTC_BOOL = SDTC_BOOL( $var, $flags, $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $extver, $cat, $guiproc, $startup, $patxname), +SDT_BOOL = SDT_BOOL(GameSettings, $var, $flags, $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $extver, $cat, $guiproc, $startup, $patxname), +SDT_OMANY = SDT_OMANY(GameSettings, $var, $type, $flags, $def, $max, $full, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $extver, $load, $cat, $guiproc, $startup, $patxname), +SDT_VAR = SDT_VAR(GameSettings, $var, $type, $flags, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $extver, $cat, $guiproc, $startup, $patxname), +SDT_ENUM = SDT_ENUM(GameSettings, $var, $type, $flags, $def, $str, $strhelp, $pre_cb, $post_cb, $from, $to, $extver, $cat, $guiproc, $startup, $patxname, $enumlist), + +[validation] +SDTG_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 = SF_NONE +interval = 0 +str = STR_NULL +strhelp = STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT +strval = STR_NULL +pre_cb = nullptr +post_cb = nullptr +guiproc = nullptr +load = nullptr +from = SL_MIN_VERSION +to = SL_MAX_VERSION +cat = SC_ADVANCED +startup = false +extver = SlXvFeatureTest() +patxname = nullptr +enumlist = + + +[SDT_BOOL] +var = order.old_timetable_separation +flags = SF_PATCH +def = true +cat = SC_EXPERT +extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_AUTO_TIMETABLE, 1, 3) +patxname = ""auto_timetables.order.timetable_separation"" + +[SDT_VAR] +var = order.old_timetable_separation_rate +flags = SF_PATCH +type = SLE_UINT8 +def = 100 +min = 0 +max = 100 +interval = 10 +str = STR_CONFIG_SETTING_TIMETABLE_SEPARATION_RATE +strhelp = STR_CONFIG_SETTING_TIMETABLE_SEPARATION_RATE_HELPTEXT +strval = STR_CONFIG_SETTING_PERCENTAGE +cat = SC_EXPERT +extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_AUTO_TIMETABLE, 1, 2) +patxname = ""auto_timetables.order.timetable_separation_rate"" + +[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 = order.improved_load +flags = SF_NO_NETWORK +def = true +cat = SC_EXPERT + +[SDT_BOOL] +var = order.selectgoods +def = true +cat = SC_EXPERT + +[SDT_BOOL] +var = order.serviceathelipad +def = true +str = STR_CONFIG_SETTING_SERVICEATHELIPAD +strhelp = STR_CONFIG_SETTING_SERVICEATHELIPAD_HELPTEXT +cat = SC_EXPERT + +[SDT_BOOL] +var = order.nonstop_only +flags = SF_PATCH +def = false +str = STR_CONFIG_SETTING_NONSTOP_ORDER_ONLY +strhelp = STR_CONFIG_SETTING_NONSTOP_ORDER_ONLY_HELPTEXT +cat = SC_EXPERT +patxname = ""nonstop_only.order.nonstop_only"" + +[SDT_BOOL] +var = order.gradual_loading +from = SLV_40 +flags = SF_NO_NETWORK +def = true +cat = SC_EXPERT + +[SDT_VAR] +var = order.old_occupancy_smoothness +type = SLE_UINT8 +flags = SF_PATCH +def = 75 +min = 0 +max = 100 +interval = 10 +str = STR_CONFIG_OCCUPANCY_SMOOTHNESS +strhelp = STR_CONFIG_OCCUPANCY_SMOOTHNESS_HELPTEXT +strval = STR_CONFIG_SETTING_PERCENTAGE +cat = SC_EXPERT +extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_ORDER_OCCUPANCY, 1, 1) +patxname = ""order_occupancy.order.occupancy_smoothness"" + +[SDT_BOOL] +var = station.never_expire_airports +def = false +str = STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS +strhelp = STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT +pre_cb = [](int32 &new_value) -> bool { return CheckTTDPatchSettingFlag(0x0C); } + +[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 = station.modified_catchment +def = true +str = STR_CONFIG_SETTING_CATCHMENT +strhelp = STR_CONFIG_SETTING_CATCHMENT_HELPTEXT +post_cb = StationCatchmentChanged +cat = SC_EXPERT + +[SDT_VAR] +var = station.catchment_increase +type = SLE_UINT8 +flags = SF_PATCH +def = 0 +min = 0 +max = 5 +str = STR_CONFIG_SETTING_CATCHMENT_INCREASE +strhelp = STR_CONFIG_SETTING_CATCHMENT_INCREASE_HELPTEXT +strval = STR_JUST_COMMA +post_cb = StationCatchmentChanged +extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_STATION_CATCHMENT_INC) +patxname = ""station_catchment_inc.station.catchment_increase"" + +[SDT_BOOL] +var = station.cargo_class_rating_wait_time +flags = SF_PATCH +def = false +str = STR_CONFIG_SETTING_STATION_RATING_CARGO_CLASS_WAIT_TIME +strhelp = STR_CONFIG_SETTING_STATION_RATING_CARGO_CLASS_WAIT_TIME_HELPTEXT +patxname = ""station_rating.station.cargo_class_rating_wait_time"" + +[SDT_BOOL] +var = station.station_size_rating_cargo_amount +flags = SF_PATCH +def = false +str = STR_CONFIG_SETTING_STATION_RATING_SIZE_CARGO_AMOUNT +strhelp = STR_CONFIG_SETTING_STATION_RATING_SIZE_CARGO_AMOUNT_HELPTEXT +patxname = ""station_rating.station.station_size_rating_cargo_amount"" + +[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_ENUM] +var = station.station_delivery_mode +type = SLE_UINT8 +flags = SF_PATCH +def = SD_NEAREST_FIRST +enumlist = _station_delivery_mode +str = STR_CONFIG_SETTING_CARGO_DELIVERY_MODE +strhelp = STR_CONFIG_SETTING_CARGO_DELIVERY_MODE_HELPTEXT +patxname = ""station.station_delivery_mode"" + +[SDT_BOOL] +var = station.adjacent_stations +from = SLV_62 +def = true +cat = SC_EXPERT + +[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) { CloseWindowById(WC_SELECT_STATION, 0); } + +[SDT_OMANY] +var = vehicle.road_side +type = SLE_UINT8 +from = SLV_97 +flags = SF_GUI_DROPDOWN | SF_NO_NETWORK +def = 1 +max = 1 +full = _roadsides +str = STR_CONFIG_SETTING_ROAD_SIDE +strhelp = STR_CONFIG_SETTING_ROAD_SIDE_HELPTEXT +strval = STR_CONFIG_SETTING_ROAD_SIDE_LEFT +pre_cb = CheckRoadSide +post_cb = RoadSideChanged +cat = SC_BASIC + +[SDT_VAR] +var = vehicle.train_acceleration_model +type = SLE_UINT8 +flags = SF_GUI_DROPDOWN +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_ENUM] +var = vehicle.train_braking_model +type = SLE_UINT8 +flags = SF_PATCH +def = TBM_ORIGINAL +enumlist = _train_braking_model +str = STR_CONFIG_SETTING_TRAIN_BRAKING_MODEL +strhelp = STR_CONFIG_SETTING_TRAIN_BRAKING_MODEL_HELPTEXT +pre_cb = CheckTrainBrakingModelChange +post_cb = TrainBrakingModelChanged +cat = SC_EXPERT +patxname = ""realistic_braking.vehicle.train_braking_model"" + +[SDT_ENUM] +var = vehicle.realistic_braking_aspect_limited +type = SLE_UINT8 +flags = SF_PATCH +def = TRBALM_OFF +enumlist = _realistic_braking_aspect_limited +str = STR_CONFIG_SETTING_REALISTIC_BRAKING_ASPECT_LIMITED +strhelp = STR_CONFIG_SETTING_REALISTIC_BRAKING_ASPECT_LIMITED_HELPTEXT +cat = SC_EXPERT +patxname = ""realistic_braking.vehicle.realistic_braking_aspect_limited"" + +[SDT_BOOL] +var = vehicle.limit_train_acceleration +flags = SF_PATCH +def = false +str = STR_CONFIG_SETTING_LIMIT_TRAIN_ACCELERATION +strhelp = STR_CONFIG_SETTING_LIMIT_TRAIN_ACCELERATION_HELPTEXT +cat = SC_EXPERT +patxname = ""realistic_braking.vehicle.limit_train_acceleration"" + +[SDT_VAR] +var = vehicle.roadveh_acceleration_model +type = SLE_UINT8 +from = SLV_139 +flags = SF_GUI_DROPDOWN +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_VAR] +var = vehicle.through_load_speed_limit +type = SLE_UINT16 +flags = SF_GUI_VELOCITY | SF_PATCH +def = 15 +min = 5 +max = 500 +interval = 5 +str = STR_CONFIG_SETTING_THROUGH_LOAD_SPEED_LIMIT +strhelp = STR_CONFIG_SETTING_THROUGH_LOAD_SPEED_LIMIT_HELPTEXT +strval = STR_JUST_VELOCITY +cat = SC_EXPERT +patxname = ""vehicle.through_load_speed_limit"" + +[SDT_VAR] +var = vehicle.rail_depot_speed_limit +type = SLE_UINT16 +flags = SF_GUI_VELOCITY | SF_PATCH +def = 61 +min = 5 +max = 100 +interval = 5 +str = STR_CONFIG_SETTING_RAIL_DEPOT_SPEED_LIMIT +strhelp = STR_CONFIG_SETTING_RAIL_DEPOT_SPEED_LIMIT_HELPTEXT +strval = STR_JUST_VELOCITY +cat = SC_EXPERT +patxname = ""vehicle.rail_depot_speed_limit"" + +[SDT_BOOL] +var = vehicle.non_leading_engines_keep_name +flags = SF_PATCH +def = false +str = STR_CONFIG_SETTING_NON_LEADING_ENGINES_KEEP_NAME +strhelp = STR_CONFIG_SETTING_NON_LEADING_ENGINES_KEEP_NAME_HELPTEXT +cat = SC_ADVANCED +patxname = ""vehicle.non_leading_engines_keep_name"" + +[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 + +[SDT_VAR] +var = vehicle.smoke_amount +type = SLE_UINT8 +from = SLV_145 +flags = SF_GUI_DROPDOWN +def = 1 +min = 0 +max = 2 +str = STR_CONFIG_SETTING_SMOKE_AMOUNT +strhelp = STR_CONFIG_SETTING_SMOKE_AMOUNT_HELPTEXT +strval = STR_CONFIG_SETTING_NONE + +[SDT_BOOL] +var = vehicle.never_expire_vehicles +flags = SF_NO_NETWORK +def = false +str = STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES +strhelp = STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT + +[SDT_VAR] +var = vehicle.no_expire_vehicles_after +type = SLE_INT32 +flags = SF_NO_NETWORK | SF_GUI_0_IS_SPECIAL | SF_PATCH +def = 0 +min = MIN_YEAR +max = MAX_YEAR +interval = 1 +str = STR_CONFIG_SETTING_NO_EXPIRE_VEHICLES_AFTER +strhelp = STR_CONFIG_SETTING_NO_EXPIRE_VEHICLES_AFTER_HELPTEXT +strval = STR_CONFIG_SETTING_NO_EXPIRE_VEHICLES_AFTER_VALUE +cat = SC_EXPERT +patxname = ""vehicle.no_expire_vehicles_after"" + +[SDT_VAR] +var = vehicle.no_introduce_vehicles_after +type = SLE_INT32 +flags = SF_NO_NETWORK | SF_GUI_0_IS_SPECIAL | SF_PATCH +def = 0 +min = MIN_YEAR +max = MAX_YEAR +interval = 1 +str = STR_CONFIG_SETTING_NO_INTRODUCE_VEHICLES_AFTER +strhelp = STR_CONFIG_SETTING_NO_INTRODUCE_VEHICLES_AFTER_HELPTEXT +strval = STR_CONFIG_SETTING_NO_INTRODUCE_VEHICLES_AFTER_VALUE +cat = SC_EXPERT +patxname = ""vehicle.no_introduce_vehicles_after"" + +[SDT_VAR] +var = vehicle.max_trains +type = SLE_UINT16 +def = 500 +min = 0 +max = 10000 +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 = 10000 +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 = 10000 +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 = 10000 +str = STR_CONFIG_SETTING_MAX_SHIPS +strhelp = STR_CONFIG_SETTING_MAX_SHIPS_HELPTEXT +strval = STR_JUST_COMMA +post_cb = MaxVehiclesChanged +cat = SC_BASIC + +[SDT_BOOL] +var = vehicle.wagon_speed_limits +def = true +str = STR_CONFIG_SETTING_WAGONSPEEDLIMITS +strhelp = STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT +pre_cb = [](int32 &new_value) -> bool { return CheckTTDPatchSettingFlag(0x5D); } +post_cb = UpdateConsists + +[SDT_BOOL] +var = vehicle.slow_road_vehicles_in_curves +flags = SF_PATCH +def = true +str = STR_CONFIG_SETTING_SLOW_ROAD_VEHICLES_IN_CURVES +strhelp = STR_CONFIG_SETTING_SLOW_ROAD_VEHICLES_IN_CURVES_HELPTEXT +cat = SC_BASIC +patxname = ""slow_road_vehicles_in_curves.vehicle.slow_road_vehicles_in_curves"" + +[SDT_BOOL] +var = vehicle.train_speed_adaptation +flags = SF_PATCH +def = false +str = STR_CONFIG_SETTING_TRAIN_SPEED_ADAPTATION +strhelp = STR_CONFIG_SETTING_TRAIN_SPEED_ADAPTATION_HELPTEXT +cat = SC_EXPERT +post_cb = TrainSpeedAdaptationChanged +patxname = ""train_speed_adaptation.vehicle.train_speed_adaptation"" + +[SDT_BOOL] +var = vehicle.disable_elrails +from = SLV_38 +flags = SF_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 +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 +pre_cb = [](int32 &new_value) -> bool { return CheckTTDPatchSettingFlag(0x58); } +post_cb = UpdateConsists + +[SDT_VAR] +var = vehicle.plane_speed +type = SLE_UINT8 +from = SLV_90 +flags = SF_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 +flags = SF_NO_NETWORK +def = true +pre_cb = CheckDynamicEngines +cat = SC_EXPERT + +[SDT_VAR] +var = vehicle.plane_crashes +type = SLE_UINT8 +from = SLV_138 +flags = SF_GUI_DROPDOWN +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 + +[SDT_BOOL] +var = vehicle.improved_breakdowns +flags = SF_PATCH +def = false +str = STR_CONFIG_SETTING_IMPROVED_BREAKDOWNS +post_cb = ImprovedBreakdownsSettingChanged +patxname = ""improved_breakdowns.vehicle.improved_breakdowns"" + +[SDT_BOOL] +var = vehicle.ship_collision_avoidance +flags = SF_PATCH +def = true +str = STR_CONFIG_SETTING_SHIP_COLLISION_AVOIDANCE +strhelp = STR_CONFIG_SETTING_SHIP_COLLISION_AVOIDANCE_HELPTEXT +patxname = ""ship_collision_avoidance.vehicle.ship_collision_avoidance"" +cat = SC_BASIC + +[SDT_BOOL] +var = vehicle.no_train_crash_other_company +flags = SF_PATCH +def = false +str = STR_CONFIG_SETTING_NO_TRAIN_CRASH_OTHER_COMPANY +strhelp = STR_CONFIG_SETTING_NO_TRAIN_CRASH_OTHER_COMPANY_HELPTEXT +extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_INFRA_SHARING) +patxname = ""infra_sharing.vehicle.no_train_crash_other_company"" + +[SDT_BOOL] +var = vehicle.roadveh_articulated_overtaking +flags = SF_PATCH +def = true +str = STR_CONFIG_SETTING_ROADVEH_ARTICULATED_OVERTAKING +strhelp = STR_CONFIG_SETTING_ROADVEH_ARTICULATED_OVERTAKING_HELPTEXT +patxname = ""roadveh_articulated_overtaking.vehicle.roadveh_articulated_overtaking"" +cat = SC_BASIC + +[SDT_BOOL] +var = vehicle.roadveh_cant_quantum_tunnel +flags = SF_PATCH +def = false +str = STR_CONFIG_SETTING_ROADVEH_CANT_QUANTUM_TUNNEL +strhelp = STR_CONFIG_SETTING_ROADVEH_CANT_QUANTUM_TUNNEL_HELPTEXT +patxname = ""roadveh_cant_quantum_tunnel.vehicle.roadveh_cant_quantum_tunnel"" +cat = SC_BASIC + +[SDT_BOOL] +var = vehicle.drive_through_train_depot +flags = SF_PATCH +def = false +str = STR_CONFIG_SETTING_DRIVE_THROUGH_TRAIN_DEPOT +strhelp = STR_CONFIG_SETTING_DRIVE_THROUGH_TRAIN_DEPOT_HELPTEXT +patxname = ""drive_through_train_depot.vehicle.drive_through_train_depot"" + +[SDT_VAR] +var = vehicle.extend_vehicle_life +type = SLE_UINT8 +def = 0 +min = 0 +max = 100 +cat = SC_EXPERT + +[SDT_BOOL] +var = vehicle.adjacent_crossings +flags = SF_PATCH +def = true +str = STR_CONFIG_SETTING_ADJACENT_CROSSINGS +strhelp = STR_CONFIG_SETTING_ADJACENT_CROSSINGS_HELPTEXT +cat = SC_BASIC +patxname = ""adjacent_crossings.vehicle.adjacent_crossings"" + +[SDT_BOOL] +var = vehicle.safer_crossings +flags = SF_PATCH +def = false +str = STR_CONFIG_SETTING_SAFER_CROSSINGS +strhelp = STR_CONFIG_SETTING_SAFER_CROSSINGS_HELPTEXT +cat = SC_BASIC +patxname = ""safer_crossings.vehicle.safer_crossings"" + +[SDT_BOOL] +var = vehicle.pay_for_repair +def = true +flags = SF_PATCH +str = STR_CONFIG_SETTING_PAY_FOR_REPAIR_VEHICLE +strhelp = STR_CONFIG_SETTING_PAY_FOR_REPAIR_VEHICLE_HELPTEXT +cat = SC_EXPERT +extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_VEHICLE_REPAIR_COST) +patxname = ""vehicle_repair_cost.vehicle.pay_for_repair"" + +[SDT_VAR] +var = vehicle.repair_cost +type = SLE_UINT8 +flags = SF_PATCH +def = 100 +min = 1 +max = 255 +interval = 1 +str = STR_CONFIG_SETTING_REPAIR_COST +strhelp = STR_CONFIG_SETTING_REPAIR_COST_HELPTEXT +strval = STR_JUST_INT +cat = SC_EXPERT +extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_VEHICLE_REPAIR_COST) +patxname = ""vehicle_repair_cost.vehicle.repair_cost"" + +## Old vehicle settings. + +[SDTG_BOOL] +name = ""vehicle.servint_ispercent"" +flags = SF_NO_NETWORK +var = _old_vds.servint_ispercent +def = false +to = SLV_120 + +[SDTG_VAR] +name = ""vehicle.servint_trains"" +type = SLE_UINT16 +flags = SF_GUI_0_IS_SPECIAL +var = _old_vds.servint_trains +def = 150 +min = 5 +max = 800 +to = SLV_120 + +[SDTG_VAR] +name = ""vehicle.servint_roadveh"" +type = SLE_UINT16 +flags = SF_GUI_0_IS_SPECIAL +var = _old_vds.servint_roadveh +def = 150 +min = 5 +max = 800 +to = SLV_120 + +[SDTG_VAR] +name = ""vehicle.servint_ships"" +type = SLE_UINT16 +flags = SF_GUI_0_IS_SPECIAL +var = _old_vds.servint_ships +def = 360 +min = 5 +max = 800 +to = SLV_120 + +[SDTG_VAR] +name = ""vehicle.servint_aircraft"" +type = SLE_UINT16 +flags = SF_GUI_0_IS_SPECIAL +var = _old_vds.servint_aircraft +def = 150 +min = 5 +max = 800 +to = SLV_120 + +## These were once in the "gui" section, but they really are related to orders. + +[SDTC_BOOL] +var = gui.sg_full_load_any +from = SLV_22 +to = SLV_93 +def = true + +[SDTC_BOOL] +var = gui.sg_new_nonstop +from = SLV_22 +to = SLV_93 +def = false diff --git a/src/table/settings/gui_settings.ini b/src/table/settings/gui_settings.ini index 7fbb71b965..41e793d499 100644 --- a/src/table/settings/gui_settings.ini +++ b/src/table/settings/gui_settings.ini @@ -1116,7 +1116,7 @@ strhelp = STR_CONFIG_SETTING_WARN_NO_DEPOT_ORDER_HELPTEXT [SDTC_BOOL] var = gui.lost_vehicle_warn -flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_PATCH +flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC def = true str = STR_CONFIG_SETTING_WARN_LOST_VEHICLE strhelp = STR_CONFIG_SETTING_WARN_LOST_VEHICLE_HELPTEXT diff --git a/src/table/settings/linkgraph_settings.ini b/src/table/settings/linkgraph_settings.ini new file mode 100644 index 0000000000..215c73843c --- /dev/null +++ b/src/table/settings/linkgraph_settings.ini @@ -0,0 +1,331 @@ +; 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 . +; + +; Linkgraph settings as stored in the main configuration file ("openttd.cfg") +; and in the savegame PATS chunk and in the linkgraph chunks for each job running. + +[pre-amble] + +static int64 LinkGraphDistModeXrefChillPP(int64 val); +static bool LinkGraphDistributionSettingGUI(SettingOnGuiCtrlData &data); + +static const SettingDescEnumEntry _linkgraph_mode_symmetric[] = { +{ DT_MANUAL, STR_CONFIG_SETTING_DISTRIBUTION_MANUAL }, +{ DT_SYMMETRIC, STR_CONFIG_SETTING_DISTRIBUTION_SYMMETRIC }, +{ DT_ASYMMETRIC, STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC }, +{ DT_ASYMMETRIC_EQ, STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC_EQ }, +{ DT_ASYMMETRIC_NEAR, STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC_NEAREST }, +{ 0, STR_NULL } +}; + +static const SettingDescEnumEntry _linkgraph_mode_asymmetric[] = { +{ DT_MANUAL, STR_CONFIG_SETTING_DISTRIBUTION_MANUAL }, +{ DT_ASYMMETRIC, STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC }, +{ DT_ASYMMETRIC_EQ, STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC_EQ }, +{ DT_ASYMMETRIC_NEAR, STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC_NEAREST }, +{ 0, STR_NULL } +}; + +static const SettingDescEnumEntry _linkgraph_mode_per_cargo[] = { +{ DT_PER_CARGO_DEFAULT, STR_CONFIG_SETTING_DISTRIBUTION_PER_CARGO_DEFAULT }, +{ DT_MANUAL, STR_CONFIG_SETTING_DISTRIBUTION_MANUAL }, +{ DT_SYMMETRIC, STR_CONFIG_SETTING_DISTRIBUTION_SYMMETRIC }, +{ DT_ASYMMETRIC, STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC }, +{ DT_ASYMMETRIC_EQ, STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC_EQ }, +{ DT_ASYMMETRIC_NEAR, STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC_NEAREST }, +{ 0, STR_NULL } +}; + +static const SettingTable _linkgraph_settings{ +[post-amble] +}; +[templates] +SDT_VAR = SDT_VAR(GameSettings, $var, $type, $flags, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $extver, $cat, $guiproc, $startup, $patxname), +SDT_ENUM = SDT_ENUM(GameSettings, $var, $type, $flags, $def, $str, $strhelp, $pre_cb, $post_cb, $from, $to, $extver, $cat, $guiproc, $startup, $patxname, $enumlist), +SDT_NAMED_NULL = SDT_NAMED_NULL($name, $length, $from, $to, $extver, $patxname), +SDT_LINKGRAPH_PER_CARGO = SDT_ENUM(GameSettings, linkgraph.distribution_per_cargo[$linkgraph_cargo], SLE_UINT8, $flags | SF_NOT_IN_CONFIG | SF_NO_NEWGAME | SF_PATCH, DT_PER_CARGO_DEFAULT, STR_CONFIG_SETTING_DISTRIBUTION_PER_CARGO, STR_CONFIG_SETTING_DISTRIBUTION_PER_CARGO_HELPTEXT, $pre_cb, $post_cb, $from, $to, SlXvFeatureTest(XSLFTO_AND, XSLFI_LINKGRAPH_MODES), SC_EXPERT, LinkGraphDistributionSettingGUI, false, nullptr, _linkgraph_mode_per_cargo), + +[validation] +SDT_VAR = static_assert($max <= MAX_$type, "Maximum value for GameSettings.$var exceeds storage size"); + +[defaults] +flags = SF_NONE +interval = 0 +str = STR_NULL +strhelp = STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT +strval = STR_NULL +pre_cb = nullptr +post_cb = nullptr +guiproc = nullptr +load = nullptr +from = SL_MIN_VERSION +to = SL_MAX_VERSION +cat = SC_ADVANCED +startup = false +extver = SlXvFeatureTest() +patxname = nullptr +enumlist = + + +[SDT_VAR] +var = linkgraph.recalc_interval +type = SLE_UINT16 +from = SLV_183 +def = 8 +min = 4 +max = 90 +interval = 1 +str = STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL +strval = STR_CONFIG_SETTING_SECONDS_VALUE +strhelp = STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT + +[SDT_VAR] +var = linkgraph.recalc_time +type = SLE_UINT16 +from = SLV_183 +def = 32 +min = 1 +max = 9000 +interval = 1 +str = STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME +strval = STR_CONFIG_SETTING_SECONDS_VALUE +strhelp = STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT + +[SDT_NAMED_NULL] +name = ""linkgraph.recalc_not_scaled_by_daylength"" +length = 1 +extver = SlXvFeatureTest([](uint16 version, bool version_in_range, const std::array &feature_versions) -> bool { return version_in_range && SlXvIsFeaturePresent(feature_versions, XSLFI_LINKGRAPH_DAY_SCALE, 1, 1) && !SlXvIsFeaturePresent(feature_versions, XSLFI_JOKERPP); }) +patxname = ""linkgraph_day_scale.linkgraph.recalc_not_scaled_by_daylength"" + +[SDT_ENUM] +var = linkgraph.distribution_pax +type = SLE_UINT8 +from = SLV_183 +def = DT_MANUAL +enumlist = _linkgraph_mode_symmetric +str = STR_CONFIG_SETTING_DISTRIBUTION_PAX +strhelp = STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT +guiproc = LinkGraphDistributionSettingGUI + +[SDT_ENUM] +var = linkgraph.distribution_mail +type = SLE_UINT8 +from = SLV_183 +def = DT_MANUAL +enumlist = _linkgraph_mode_symmetric +str = STR_CONFIG_SETTING_DISTRIBUTION_MAIL +strhelp = STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT +guiproc = LinkGraphDistributionSettingGUI + +[SDT_ENUM] +var = linkgraph.distribution_armoured +type = SLE_UINT8 +from = SLV_183 +def = DT_MANUAL +enumlist = _linkgraph_mode_symmetric +str = STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED +strhelp = STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT +guiproc = LinkGraphDistributionSettingGUI + +[SDT_ENUM] +var = linkgraph.distribution_default +type = SLE_UINT8 +from = SLV_183 +def = DT_MANUAL +enumlist = _linkgraph_mode_asymmetric +str = STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT +strhelp = STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT +guiproc = LinkGraphDistributionSettingGUI + +[SDT_LINKGRAPH_PER_CARGO] +linkgraph_cargo = 0 +[SDT_LINKGRAPH_PER_CARGO] +linkgraph_cargo = 1 +[SDT_LINKGRAPH_PER_CARGO] +linkgraph_cargo = 2 +[SDT_LINKGRAPH_PER_CARGO] +linkgraph_cargo = 3 +[SDT_LINKGRAPH_PER_CARGO] +linkgraph_cargo = 4 +[SDT_LINKGRAPH_PER_CARGO] +linkgraph_cargo = 5 +[SDT_LINKGRAPH_PER_CARGO] +linkgraph_cargo = 6 +[SDT_LINKGRAPH_PER_CARGO] +linkgraph_cargo = 7 +[SDT_LINKGRAPH_PER_CARGO] +linkgraph_cargo = 8 +[SDT_LINKGRAPH_PER_CARGO] +linkgraph_cargo = 9 +[SDT_LINKGRAPH_PER_CARGO] +linkgraph_cargo = 10 +[SDT_LINKGRAPH_PER_CARGO] +linkgraph_cargo = 11 +[SDT_LINKGRAPH_PER_CARGO] +linkgraph_cargo = 12 +[SDT_LINKGRAPH_PER_CARGO] +linkgraph_cargo = 13 +[SDT_LINKGRAPH_PER_CARGO] +linkgraph_cargo = 14 +[SDT_LINKGRAPH_PER_CARGO] +linkgraph_cargo = 15 +[SDT_LINKGRAPH_PER_CARGO] +linkgraph_cargo = 16 +[SDT_LINKGRAPH_PER_CARGO] +linkgraph_cargo = 17 +[SDT_LINKGRAPH_PER_CARGO] +linkgraph_cargo = 18 +[SDT_LINKGRAPH_PER_CARGO] +linkgraph_cargo = 19 +[SDT_LINKGRAPH_PER_CARGO] +linkgraph_cargo = 20 +[SDT_LINKGRAPH_PER_CARGO] +linkgraph_cargo = 21 +[SDT_LINKGRAPH_PER_CARGO] +linkgraph_cargo = 22 +[SDT_LINKGRAPH_PER_CARGO] +linkgraph_cargo = 23 +[SDT_LINKGRAPH_PER_CARGO] +linkgraph_cargo = 24 +[SDT_LINKGRAPH_PER_CARGO] +linkgraph_cargo = 25 +[SDT_LINKGRAPH_PER_CARGO] +linkgraph_cargo = 26 +[SDT_LINKGRAPH_PER_CARGO] +linkgraph_cargo = 27 +[SDT_LINKGRAPH_PER_CARGO] +linkgraph_cargo = 28 +[SDT_LINKGRAPH_PER_CARGO] +linkgraph_cargo = 29 +[SDT_LINKGRAPH_PER_CARGO] +linkgraph_cargo = 30 +[SDT_LINKGRAPH_PER_CARGO] +linkgraph_cargo = 31 +[SDT_LINKGRAPH_PER_CARGO] +linkgraph_cargo = 32 +[SDT_LINKGRAPH_PER_CARGO] +linkgraph_cargo = 33 +[SDT_LINKGRAPH_PER_CARGO] +linkgraph_cargo = 34 +[SDT_LINKGRAPH_PER_CARGO] +linkgraph_cargo = 35 +[SDT_LINKGRAPH_PER_CARGO] +linkgraph_cargo = 36 +[SDT_LINKGRAPH_PER_CARGO] +linkgraph_cargo = 37 +[SDT_LINKGRAPH_PER_CARGO] +linkgraph_cargo = 38 +[SDT_LINKGRAPH_PER_CARGO] +linkgraph_cargo = 39 +[SDT_LINKGRAPH_PER_CARGO] +linkgraph_cargo = 40 +[SDT_LINKGRAPH_PER_CARGO] +linkgraph_cargo = 41 +[SDT_LINKGRAPH_PER_CARGO] +linkgraph_cargo = 42 +[SDT_LINKGRAPH_PER_CARGO] +linkgraph_cargo = 43 +[SDT_LINKGRAPH_PER_CARGO] +linkgraph_cargo = 44 +[SDT_LINKGRAPH_PER_CARGO] +linkgraph_cargo = 45 +[SDT_LINKGRAPH_PER_CARGO] +linkgraph_cargo = 46 +[SDT_LINKGRAPH_PER_CARGO] +linkgraph_cargo = 47 +[SDT_LINKGRAPH_PER_CARGO] +linkgraph_cargo = 48 +[SDT_LINKGRAPH_PER_CARGO] +linkgraph_cargo = 49 +[SDT_LINKGRAPH_PER_CARGO] +linkgraph_cargo = 50 +[SDT_LINKGRAPH_PER_CARGO] +linkgraph_cargo = 51 +[SDT_LINKGRAPH_PER_CARGO] +linkgraph_cargo = 52 +[SDT_LINKGRAPH_PER_CARGO] +linkgraph_cargo = 53 +[SDT_LINKGRAPH_PER_CARGO] +linkgraph_cargo = 54 +[SDT_LINKGRAPH_PER_CARGO] +linkgraph_cargo = 55 +[SDT_LINKGRAPH_PER_CARGO] +linkgraph_cargo = 56 +[SDT_LINKGRAPH_PER_CARGO] +linkgraph_cargo = 57 +[SDT_LINKGRAPH_PER_CARGO] +linkgraph_cargo = 58 +[SDT_LINKGRAPH_PER_CARGO] +linkgraph_cargo = 59 +[SDT_LINKGRAPH_PER_CARGO] +linkgraph_cargo = 60 +[SDT_LINKGRAPH_PER_CARGO] +linkgraph_cargo = 61 +[SDT_LINKGRAPH_PER_CARGO] +linkgraph_cargo = 62 +[SDT_LINKGRAPH_PER_CARGO] +linkgraph_cargo = 63 + +[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 + +[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 + +[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 + +[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 + +[SDT_VAR] +var = linkgraph.aircraft_link_scale +type = SLE_UINT16 +flags = SF_PATCH +def = 100 +min = 100 +max = 1000 +interval = 50 +str = STR_CONFIG_SETTING_AIRCRAFT_PATH_COST +strval = STR_CONFIG_SETTING_PERCENTAGE +strhelp = STR_CONFIG_SETTING_AIRCRAFT_PATH_COST_HELPTEXT +extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_LINKGRAPH_AIRCRAFT) diff --git a/src/table/settings/locale_settings.ini b/src/table/settings/locale_settings.ini new file mode 100644 index 0000000000..3c3c020908 --- /dev/null +++ b/src/table/settings/locale_settings.ini @@ -0,0 +1,209 @@ +; 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 . +; + +; Locale settings as stored in the main configuration file ("openttd.cfg") and +; in the savegame PATS chunk. These settings are not sync'd over the network. + +[pre-amble] +uint8_t _old_units; ///< Old units from old savegames + +static constexpr std::initializer_list _locale_currencies{"GBP", "USD", "EUR", "JPY", "ATS", "BEF", "CHF", "CZK", "DEM", "DKK", "ESP", "FIM", "FRF", "GRD", "HUF", "ISK", "ITL", "NLG", "NOK", "PLN", "RON", "RUR", "SIT", "SEK", "TRY", "SKK", "BRL", "EEK", "LTL", "KRW", "ZAR", "custom", "GEL", "IRR", "RUB", "MXN", "NTD", "CNY", "HKD", "INR", "IDR", "MYR"}; +static constexpr std::initializer_list _locale_units{"imperial", "metric", "si", "gameunits"}; + +static_assert(_locale_currencies.size() == CURRENCY_END); + +static void VelocityUnitsChanged(int32 new_value); + +static const SettingTable _locale_settings{ +[post-amble] +}; +[templates] +SDTC_BOOL = SDTC_BOOL( $var, $flags, $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $extver, $cat, $guiproc, $startup, $patxname), +SDTG_OMANY = SDTG_OMANY($name, $type, $flags, $var, $def, $max, $full, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $extver, $cat, $guiproc, $startup, $patxname), +SDT_OMANY = SDT_OMANY(GameSettings, $var, $type, $flags, $def, $max, $full, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $extver, $load, $cat, $guiproc, $startup, $patxname), +SDT_SSTR = SDT_SSTR(GameSettings, $var, $type, $flags, $def, $pre_cb, $post_cb, $from, $to, $extver, $cat, $guiproc, $startup, $patxname), + +[validation] +SDTG_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"); + +[defaults] +flags = SF_NONE +interval = 0 +str = STR_NULL +strhelp = STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT +strval = STR_NULL +pre_cb = nullptr +post_cb = nullptr +guiproc = nullptr +load = nullptr +from = SL_MIN_VERSION +to = SL_MAX_VERSION +cat = SC_ADVANCED +startup = false +extver = SlXvFeatureTest() +patxname = nullptr +enumlist = + + +[SDT_OMANY] +var = locale.currency +type = SLE_UINT8 +from = SLV_97 +flags = SF_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 = SF_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 = SF_NO_NETWORK_SYNC | SF_GUI_DROPDOWN +def = 1 +max = 4 +full = _locale_units +post_cb = VelocityUnitsChanged +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_velocity_nautical +type = SLE_UINT8 +from = SLV_VELOCITY_NAUTICAL +flags = SF_NO_NETWORK_SYNC | SF_GUI_DROPDOWN +def = 1 +max = 4 +full = _locale_units +post_cb = VelocityUnitsChanged +cat = SC_BASIC +str = STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_NAUTICAL +strhelp = STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT +strval = STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL +extver = SlXvFeatureTest(XSLFTO_OR, XSLFI_VELOCITY_NAUTICAL) +patxname = ""locale.units_velocity_nautical"" + +[SDT_OMANY] +var = locale.units_power +type = SLE_UINT8 +from = SLV_184 +flags = SF_NO_NETWORK_SYNC | SF_GUI_DROPDOWN +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 = SF_NO_NETWORK_SYNC | SF_GUI_DROPDOWN +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 = SF_NO_NETWORK_SYNC | SF_GUI_DROPDOWN +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 = SF_NO_NETWORK_SYNC | SF_GUI_DROPDOWN +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 = SF_NO_NETWORK_SYNC | SF_GUI_DROPDOWN +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 = SF_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 = SF_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 = SF_NO_NETWORK_SYNC +def = nullptr +post_cb = [](auto) { MarkWholeScreenDirty(); } +cat = SC_BASIC + +[SDTC_BOOL] +var = client_locale.sync_locale_network_server +flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_PATCH +def = false +str = STR_CONFIG_SETTING_SYNC_LOCALE_SETTINGS_NETWORK_SERVER +strhelp = STR_CONFIG_SETTING_SYNC_LOCALE_SETTINGS_NETWORK_SERVER_HELPTEXT +cat = SC_BASIC diff --git a/src/table/settings/misc_settings.ini b/src/table/settings/misc_settings.ini index b32a1c9427..c4da718ccf 100644 --- a/src/table/settings/misc_settings.ini +++ b/src/table/settings/misc_settings.ini @@ -10,9 +10,9 @@ [pre-amble] extern std::string _config_language_file; -static std::initializer_list _support8bppmodes{"no", "system" , "hardware"}; -static std::initializer_list _display_opt_modes{"SHOW_TOWN_NAMES", "SHOW_STATION_NAMES", "SHOW_SIGNS", "FULL_ANIMATION", "", "FULL_DETAIL", "WAYPOINTS", "SHOW_COMPETITOR_SIGNS"}; -static std::initializer_list _extra_display_opt_modes{"SHOW_MONEY_TEXT_EFFECTS", "SHOW_HIDDEN_SIGNS"}; +static constexpr std::initializer_list _support8bppmodes{"no", "system", "hardware"}; +static constexpr std::initializer_list _display_opt_modes{"SHOW_TOWN_NAMES", "SHOW_STATION_NAMES", "SHOW_SIGNS", "FULL_ANIMATION", "", "FULL_DETAIL", "WAYPOINTS", "SHOW_COMPETITOR_SIGNS"}; +static constexpr std::initializer_list _extra_display_opt_modes{"SHOW_MONEY_TEXT_EFFECTS", "SHOW_HIDDEN_SIGNS"}; #ifdef WITH_COCOA extern bool _allow_hidpi_window; @@ -64,6 +64,7 @@ full = _display_opt_modes [SDTG_MMANY] name = ""extra_display_opt"" type = SLE_UINT8 +flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_PATCH var = _extra_display_opt def = (1 << XDO_SHOW_MONEY_TEXT_EFFECTS) full = _extra_display_opt_modes @@ -304,6 +305,7 @@ cat = SC_BASIC [SDTG_VAR] name = ""extra_transparency_options"" type = SLE_UINT +flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_PATCH var = _transparency_opt_extra def = 0 min = 0 @@ -313,6 +315,7 @@ cat = SC_BASIC [SDTG_VAR] name = ""transparency_locks"" type = SLE_UINT +flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_PATCH var = _transparency_lock_base def = 0 min = 0 @@ -378,6 +381,7 @@ def = true [SDTG_VAR] name = ""zoning_overlay_inner"" type = SLE_UINT8 +flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_PATCH var = _zoning.inner def = 0 min = 0 @@ -387,6 +391,7 @@ cat = SC_BASIC [SDTG_VAR] name = ""zoning_overlay_outer"" type = SLE_UINT8 +flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_PATCH var = _zoning.outer def = 0 min = 0 @@ -396,6 +401,7 @@ cat = SC_BASIC [SDTG_VAR] name = ""cargo_payment_x_mode"" type = SLE_UINT8 +flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_PATCH var = _cargo_payment_x_mode def = 0 min = 0 diff --git a/src/table/settings/network_settings.ini b/src/table/settings/network_settings.ini index 75bb53d43f..69fa657195 100644 --- a/src/table/settings/network_settings.ini +++ b/src/table/settings/network_settings.ini @@ -9,7 +9,7 @@ [pre-amble] static void UpdateClientConfigValues(); -static std::initializer_list _server_game_type{"local", "public", "invite-only"}; +static constexpr std::initializer_list _server_game_type{"local", "public", "invite-only"}; static const SettingTable _network_settings = { [post-amble] diff --git a/src/table/settings/old_gameopt_settings.ini b/src/table/settings/old_gameopt_settings.ini index 660fe4a851..a4710beaa2 100644 --- a/src/table/settings/old_gameopt_settings.ini +++ b/src/table/settings/old_gameopt_settings.ini @@ -14,21 +14,10 @@ ; be saved in their new place. [pre-amble] -static const uint GAME_DIFFICULTY_NUM = 18; -static const std::array _old_diff_settings{"max_no_competitors", "competitor_start_time", "number_towns", "industry_density", "max_loan", "initial_interest", "vehicle_costs", "competitor_speed", "competitor_intelligence", "vehicle_breakdowns", "subsidy_multiplier", "construction_cost", "terrain_type", "quantity_sea_lakes", "economy", "line_reverse_mode", "disasters", "town_council_tolerance"}; -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 constexpr std::initializer_list _locale_currencies{"GBP", "USD", "EUR", "JPY", "ATS", "BEF", "CHF", "CZK", "DEM", "DKK", "ESP", "FIM", "FRF", "GRD", "HUF", "ISK", "ITL", "NLG", "NOK", "PLN", "RON", "RUR", "SIT", "SEK", "TRY", "SKK", "BRL", "EEK", "LTL", "KRW", "ZAR", "custom", "GEL", "IRR", "RUB", "MXN", "NTD", "CNY", "HKD", "INR", "IDR", "MYR"}; -static_assert(_locale_currencies.size() == CURRENCY_END); -static constexpr std::initializer_list _locale_units{"imperial", "metric", "si", "gameunits"}; static constexpr std::initializer_list _town_names{"english", "french", "german", "american", "latin", "silly", "swedish", "dutch", "finnish", "polish", "slovak", "norwegian", "hungarian", "austrian", "romanian", "czech", "swiss", "danish", "turkish", "italian", "catalan"}; static constexpr std::initializer_list _climates{"temperate", "arctic", "tropic", "toyland"}; -static constexpr std::initializer_list _roadsides{"left", "right"}; -static constexpr std::initializer_list _settings_profiles{"easy", "medium", "hard"}; static const SettingTable _old_gameopt_settings{ /* In version 4 a new difficulty setting has been added to the difficulty settings, @@ -38,7 +27,7 @@ static const SettingTable _old_gameopt_settings{ * 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 + * 'SLE_FILE_I16 | SLE_VAR_U16' in "diff_custom" is needed to get around SlCopy() hack * for savegames version 0 - though it is an array, it has to go through the byteswap process */ [post-amble] }; diff --git a/src/table/settings/pathfinding_settings.ini b/src/table/settings/pathfinding_settings.ini new file mode 100644 index 0000000000..820c414536 --- /dev/null +++ b/src/table/settings/pathfinding_settings.ini @@ -0,0 +1,647 @@ +; 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 . +; + +; Pathfinding settings as stored in the main configuration file ("openttd.cfg") +; and in the savegame PATS chunk. + +[pre-amble] +static void InvalidateShipPathCache(int32_t new_value); +static void CheckYapfRailSignalPenalties(int32 new_value); + +static const SettingTable _pathfinding_settings{ +[post-amble] +}; +[templates] +SDT_BOOL = SDT_BOOL(GameSettings, $var, $flags, $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $extver, $cat, $guiproc, $startup, $patxname), +SDT_VAR = SDT_VAR(GameSettings, $var, $type, $flags, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $extver, $cat, $guiproc, $startup, $patxname), + +[validation] +SDT_VAR = static_assert($max <= MAX_$type, "Maximum value for GameSettings.$var exceeds storage size"); + +[defaults] +flags = SF_NONE +interval = 0 +str = STR_NULL +strhelp = STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT +strval = STR_NULL +pre_cb = nullptr +post_cb = nullptr +guiproc = nullptr +load = nullptr +from = SL_MIN_VERSION +to = SL_MAX_VERSION +cat = SC_ADVANCED +startup = false +extver = SlXvFeatureTest() +patxname = nullptr +enumlist = + + +[SDT_BOOL] +var = pf.forbid_90_deg +def = true +str = STR_CONFIG_SETTING_FORBID_90_DEG +strhelp = STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT +cat = SC_EXPERT + +[SDT_BOOL] +var = pf.back_of_one_way_pbs_waiting_point +flags = SF_PATCH +def = true +str = STR_CONFIG_SETTING_BACK_ONE_WAY_PBS_SAFE_WAITING +str = STR_CONFIG_SETTING_BACK_ONE_WAY_PBS_SAFE_WAITING_HELPTEXT +cat = SC_EXPERT +patxname = ""pf.back_of_one_way_pbs_waiting_point"" + +[SDT_BOOL] +var = pf.roadveh_queue +def = true +cat = SC_EXPERT + +[SDT_VAR] +var = pf.reroute_rv_on_layout_change +type = SLE_UINT8 +flags = SF_GUI_DROPDOWN | SF_PATCH +def = 1 +min = 0 +max = 2 +interval = 1 +str = STR_CONFIG_SETTING_REROUTE_RV_ON_LAYOUT_CHANGE +strhelp = STR_CONFIG_SETTING_REROUTE_RV_ON_LAYOUT_CHANGE_HELPTEXT +strval = STR_CONFIG_SETTING_REROUTE_RV_ON_LAYOUT_CHANGE_NO +cat = SC_ADVANCED +patxname = ""pf.reroute_rv_on_layout_change"" + +[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 +flags = SF_GUI_DROPDOWN +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 +flags = SF_GUI_DROPDOWN +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 +flags = SF_GUI_DROPDOWN +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 = 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 = 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 + +[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 = true +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 +post_cb = CheckYapfRailSignalPenalties + +[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 +post_cb = CheckYapfRailSignalPenalties + +[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 +post_cb = CheckYapfRailSignalPenalties + +[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 +post_cb = CheckYapfRailSignalPenalties + +[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 diff --git a/src/table/settings/script_settings.ini b/src/table/settings/script_settings.ini new file mode 100644 index 0000000000..89ad17461c --- /dev/null +++ b/src/table/settings/script_settings.ini @@ -0,0 +1,120 @@ +; 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 . +; + +; Script settings as stored in the main configuration file ("openttd.cfg") +; and in the savegame PATS chunk. + +[pre-amble] +static constexpr std::initializer_list _settings_profiles{"easy", "medium", "hard"}; + +static void ScriptMaxOpsChange(int32 new_value); +static bool CheckScriptMaxMemoryChange(int32 &new_value); +static void ScriptMaxMemoryChange(int32 new_value); + +const SettingTable _script_settings = { +[post-amble] +}; +[templates] +SDT_BOOL = SDT_BOOL(GameSettings, $var, $flags, $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $extver, $cat, $guiproc, $startup, $patxname), +SDT_OMANY = SDT_OMANY(GameSettings, $var, $type, $flags, $def, $max, $full, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $extver, $load, $cat, $guiproc, $startup, $patxname), +SDT_VAR = SDT_VAR(GameSettings, $var, $type, $flags, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $extver, $cat, $guiproc, $startup, $patxname), + +[validation] +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 = SF_NONE +interval = 0 +str = STR_NULL +strhelp = STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT +strval = STR_NULL +pre_cb = nullptr +post_cb = nullptr +guiproc = nullptr +load = nullptr +from = SL_MIN_VERSION +to = SL_MAX_VERSION +cat = SC_ADVANCED +startup = false +extver = SlXvFeatureTest() +patxname = nullptr +enumlist = + + +[SDT_OMANY] +var = script.settings_profile +type = SLE_UINT8 +from = SLV_178 +flags = SF_GUI_DROPDOWN +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_VAR] +var = script.script_max_opcode_till_suspend +type = SLE_UINT32 +from = SLV_107 +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 +post_cb = ScriptMaxOpsChange +cat = SC_EXPERT + +[SDT_VAR] +var = script.script_max_memory_megabytes +type = SLE_UINT32 +from = SLV_SCRIPT_MEMLIMIT +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 +pre_cb = CheckScriptMaxMemoryChange +post_cb = ScriptMaxMemoryChange +cat = SC_EXPERT + +[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 diff --git a/src/table/settings/settings.ini b/src/table/settings/settings.ini deleted file mode 100644 index cb7be608a8..0000000000 --- a/src/table/settings/settings.ini +++ /dev/null @@ -1,3996 +0,0 @@ -; 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 . -; - -; Settings as stored in the main configuration file ("openttd.cfg") and in the -; savegame PATS chunk (if not flagged not to). - -[pre-amble] -/* Begin - Callback Functions for the various settings */ -static void StationSpreadChanged(int32 new_value); -static void UpdateConsists(int32 new_value); -static void TrainAccelerationModelChanged(int32 new_value); -static bool CheckTrainBrakingModelChange(int32 &new_value); -static void TrainBrakingModelChanged(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 bool TownCouncilToleranceAdjust(int32 &new_value); -static void DifficultyNoiseChange(int32 new_value); -static void DifficultyMoneyCheatMultiplayerChange(int32 new_value); -static void DifficultyRenameTownsMultiplayerChange(int32 new_value); -static void DifficultyOverrideTownSettingsMultiplayerChange(int32 new_value); -static void MaxNoAIsChange(int32 new_value); -static bool CheckRoadSide(int32 &new_value); -static void RoadSideChanged(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 ScriptMaxOpsChange(int32 new_value); -static bool CheckScriptMaxMemoryChange(int32 &new_value); -static void ScriptMaxMemoryChange(int32 new_value); -static void InvalidateCompanyWindow(int32 new_value); -static void MaxVehiclesChanged(int32 new_value); -static void InvalidateShipPathCache(int32 new_value); -static void ImprovedBreakdownsSettingChanged(int32 new_value); -static bool DayLengthPreChange(int32 &new_value); -static void DayLengthChanged(int32 new_value); -static void CheckYapfRailSignalPenalties(int32 new_value); -static void ClimateThresholdModeChanged(int32 new_value); -static void VelocityUnitsChanged(int32 new_value); -static void PublicRoadsSettingChange(int32 new_value); -static void TrainSpeedAdaptationChanged(int32 new_value); -static bool CheckSharingRail(int32 &new_value); -static void SharingRailChanged(int32 new_value); -static bool CheckSharingRoad(int32 &new_value); -static bool CheckSharingWater(int32 &new_value); -static bool CheckSharingAir(int32 &new_value); -static void TownZoneModeChanged(int32 new_value); -static void TownZoneCustomValueChanged(int32 new_value); -static bool CheckTTDPatchSettingFlag(uint flag); - -/* End - Callback Functions for the various settings */ - -/* Begin - xref conversion callbacks */ - -static int64 LinkGraphDistModeXrefChillPP(int64 val); - -/* End - xref conversion callbacks */ - -/* Begin - GUI callbacks */ - -static bool LinkGraphDistributionSettingGUI(SettingOnGuiCtrlData &data); -static bool OrderTownGrowthRate(SettingOnGuiCtrlData &data); -static bool AllowRoadStopsUnderBridgesSettingGUI(SettingOnGuiCtrlData &data); -static bool TreePlacerSettingGUI(SettingOnGuiCtrlData &data); - -/* End - GUI callbacks */ - -static const SettingDescEnumEntry _linkgraph_mode_symmetric[] = { -{ DT_MANUAL, STR_CONFIG_SETTING_DISTRIBUTION_MANUAL }, -{ DT_SYMMETRIC, STR_CONFIG_SETTING_DISTRIBUTION_SYMMETRIC }, -{ DT_ASYMMETRIC, STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC }, -{ DT_ASYMMETRIC_EQ, STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC_EQ }, -{ DT_ASYMMETRIC_NEAR, STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC_NEAREST }, -{ 0, STR_NULL } -}; -static const SettingDescEnumEntry _linkgraph_mode_asymmetric[] = { -{ DT_MANUAL, STR_CONFIG_SETTING_DISTRIBUTION_MANUAL }, -{ DT_ASYMMETRIC, STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC }, -{ DT_ASYMMETRIC_EQ, STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC_EQ }, -{ DT_ASYMMETRIC_NEAR, STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC_NEAREST }, -{ 0, STR_NULL } -}; -static const SettingDescEnumEntry _linkgraph_mode_per_cargo[] = { -{ DT_PER_CARGO_DEFAULT, STR_CONFIG_SETTING_DISTRIBUTION_PER_CARGO_DEFAULT }, -{ DT_MANUAL, STR_CONFIG_SETTING_DISTRIBUTION_MANUAL }, -{ DT_SYMMETRIC, STR_CONFIG_SETTING_DISTRIBUTION_SYMMETRIC }, -{ DT_ASYMMETRIC, STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC }, -{ DT_ASYMMETRIC_EQ, STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC_EQ }, -{ DT_ASYMMETRIC_NEAR, STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC_NEAREST }, -{ 0, STR_NULL } -}; -static const SettingDescEnumEntry _town_council_approval[] = { -{ 0, STR_CITY_APPROVAL_LENIENT }, -{ 1, STR_CITY_APPROVAL_TOLERANT }, -{ 2, STR_CITY_APPROVAL_HOSTILE }, -{ 3, STR_CITY_APPROVAL_PERMISSIVE }, -{ 0, STR_NULL } -}; - -static const SettingDescEnumEntry _train_braking_model[] = { -{ TBM_ORIGINAL, STR_CONFIG_SETTING_ORIGINAL }, -{ TBM_REALISTIC, STR_CONFIG_SETTING_TRAIN_BRAKING_REALISTIC }, -{ 0, STR_NULL } -}; - -static const SettingDescEnumEntry _realistic_braking_aspect_limited[] = { -{ TRBALM_OFF, STR_CONFIG_SETTING_OFF }, -{ TRBALM_ON, STR_CONFIG_SETTING_TRAIN_BRAKING_ASPECT_LIMITED_ON }, -{ 0, STR_NULL } -}; - -static const SettingDescEnumEntry _station_delivery_mode[] = { -{ SD_NEAREST_FIRST, STR_CONFIG_SETTING_ORIGINAL}, -{ SD_BALANCED, STR_CONFIG_SETTING_DELIVERY_BALANCED}, -{ 0, STR_NULL } -}; - -static const SettingDescEnumEntry _vehicle_breakdown_modes[] = { -{ 0, STR_DISASTER_NONE }, -{ 64, STR_VERY_REDUCED }, -{ 1, STR_DISASTER_REDUCED }, -{ 2, STR_DISASTER_NORMAL }, -{ 0, STR_NULL } -}; - -/* 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, $var, $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $extver, $cat, $guiproc, $startup, $patxname), -SDTG_VAR = SDTG_VAR($name, $type, $flags, $var, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $extver, $cat, $guiproc, $startup, $patxname), -SDTG_ENUM = SDTG_ENUM($name, $type, $flags, $var, $def, $str, $strhelp, $pre_cb, $post_cb, $from, $to, $extver, $cat, $guiproc, $startup, $patxname, $enumlist), -SDTG_OMANY = SDTG_OMANY($name, $type, $flags, $var, $def, $max, $full, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $extver, $cat, $guiproc, $startup, $patxname), -SDTC_BOOL = SDTC_BOOL( $var, $flags, $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $extver, $cat, $guiproc, $startup, $patxname), -SDTC_LIST = SDTC_LIST( $var, $type, $flags, $def, $from, $to, $extver, $cat, $guiproc, $startup, $patxname), -SDTC_OMANY = SDTC_OMANY( $var, $type, $flags, $def, $max, $full, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $extver, $cat, $guiproc, $startup, $patxname), -SDTC_SSTR = SDTC_SSTR( $var, $type, $flags, $def, $length, $pre_cb, $post_cb, $from, $to, $extver, $cat, $guiproc, $startup, $patxname), -SDTC_VAR = SDTC_VAR( $var, $type, $flags, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $extver, $cat, $guiproc, $startup, $patxname), -SDTC_ENUM = SDTC_ENUM( $var, $type, $flags, $def, $str, $strhelp, $pre_cb, $post_cb, $from, $to, $extver, $cat, $guiproc, $startup, $patxname, $enumlist), -SDT_BOOL = SDT_BOOL(GameSettings, $var, $flags, $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $extver, $cat, $guiproc, $startup, $patxname), -SDT_OMANY = SDT_OMANY(GameSettings, $var, $type, $flags, $def, $max, $full, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $extver, $load, $cat, $guiproc, $startup, $patxname), -SDT_SSTR = SDT_SSTR(GameSettings, $var, $type, $flags, $def, $pre_cb, $post_cb, $from, $to, $extver, $cat, $guiproc, $startup, $patxname), -SDT_VAR = SDT_VAR(GameSettings, $var, $type, $flags, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $extver, $cat, $guiproc, $startup, $patxname), -SDT_ENUM = SDT_ENUM(GameSettings, $var, $type, $flags, $def, $str, $strhelp, $pre_cb, $post_cb, $from, $to, $extver, $cat, $guiproc, $startup, $patxname, $enumlist), -SDT_NAMED_NULL = SDT_NAMED_NULL($name, $length, $from, $to, $extver, $patxname), - -SDT_LINKGRAPH_PER_CARGO = SDT_ENUM(GameSettings, linkgraph.distribution_per_cargo[$linkgraph_cargo], SLE_UINT8, $flags | SF_NOT_IN_CONFIG | SF_NO_NEWGAME | SF_PATCH, DT_PER_CARGO_DEFAULT, STR_CONFIG_SETTING_DISTRIBUTION_PER_CARGO, STR_CONFIG_SETTING_DISTRIBUTION_PER_CARGO_HELPTEXT, $pre_cb, $post_cb, $from, $to, SlXvFeatureTest(XSLFTO_AND, XSLFI_LINKGRAPH_MODES), SC_EXPERT, LinkGraphDistributionSettingGUI, false, nullptr, _linkgraph_mode_per_cargo), - -[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 = SF_NONE -interval = 0 -str = STR_NULL -strhelp = STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT -strval = STR_NULL -pre_cb = nullptr -post_cb = nullptr -guiproc = nullptr -load = nullptr -from = SL_MIN_VERSION -to = SL_MAX_VERSION -cat = SC_ADVANCED -startup = false -extver = SlXvFeatureTest() -patxname = nullptr -enumlist = - - - -; Saved settings variables. -; The next 18 entries are important for savegame compatibility. Do NOT remove those. See HandleOldDiffCustom() for more details. -[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_VAR] -var = difficulty.competitors_interval -type = SLE_UINT16 -def = 10 -min = MIN_COMPETITORS_INTERVAL -max = MAX_COMPETITORS_INTERVAL -interval = 1 -patxname = ""difficulty.competitors_interval"" - -[SDT_VAR] -var = difficulty.competitor_start_time -type = SLE_UINT8 -from = SLV_97 -to = SLV_110 -def = 2 -min = 0 -max = 3 - -[SDT_VAR] -var = difficulty.number_towns -type = SLE_UINT8 -from = SLV_97 -flags = SF_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 -flags = SF_GUI_DROPDOWN -def = ID_HIGH -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 -flags = SF_NEWGAME_ONLY | SF_SCENEDIT_TOO | SF_GUI_CURRENCY | SF_GUI_0_IS_SPECIAL -def = 300000 -min = LOAN_INTERVAL -max = 2000000000 -pre_cb = [](auto &new_value) { new_value = (new_value + LOAN_INTERVAL / 2) / LOAN_INTERVAL * LOAN_INTERVAL; return true; } -interval = LOAN_INTERVAL -str = STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN -strhelp = STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT -strval = STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE -cat = SC_BASIC - -[SDT_VAR] -var = difficulty.initial_interest -type = SLE_UINT8 -from = SLV_97 -flags = SF_NEWGAME_ONLY | SF_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 -flags = SF_NEWGAME_ONLY | SF_SCENEDIT_TOO | SF_GUI_DROPDOWN -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.vehicle_costs_in_depot -type = SLE_UINT8 -flags = SF_PATCH -def = 1 -min = 1 -max = 8 -str = STR_CONFIG_SETTING_RUNNING_COSTS_IN_DEPOT -strhelp = STR_CONFIG_SETTING_RUNNING_COSTS_IN_DEPOT_HELPTEXT -strval = STR_CONFIG_SETTING_RUNNING_COSTS_IN_DEPOT_VALUE -patxname = ""difficulty.vehicle_costs_in_depot"" - -[SDT_VAR] -var = difficulty.vehicle_costs_when_stopped -type = SLE_UINT8 -flags = SF_PATCH -def = 1 -min = 1 -max = 8 -str = STR_CONFIG_SETTING_RUNNING_COSTS_WHEN_STOPPED -strhelp = STR_CONFIG_SETTING_RUNNING_COSTS_WHEN_STOPPED_HELPTEXT -strval = STR_CONFIG_SETTING_RUNNING_COSTS_WHEN_STOPPED_VALUE -strval = STR_CONFIG_SETTING_RUNNING_COSTS_IN_DEPOT_VALUE -patxname = ""difficulty.vehicle_costs_when_stopped"" - -[SDT_VAR] -var = difficulty.competitor_speed -type = SLE_UINT8 -from = SLV_97 -flags = SF_GUI_DROPDOWN -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_VAR] -var = difficulty.competitor_intelligence -type = SLE_UINT8 -from = SLV_97 -to = SLV_110 -def = 0 -min = 0 -max = 2 - -[SDT_ENUM] -var = difficulty.vehicle_breakdowns -type = SLE_UINT8 -from = SLV_97 -def = 1 -enumlist = _vehicle_breakdown_modes -str = STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS -strhelp = STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS_HELPTEXT -cat = SC_BASIC - -[SDT_VAR] -var = difficulty.subsidy_multiplier -type = SLE_UINT8 -from = SLV_97 -flags = SF_GUI_DROPDOWN -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.subsidy_duration -type = SLE_UINT16 -from = SLV_CUSTOM_SUBSIDY_DURATION -flags = SF_GUI_0_IS_SPECIAL -def = 1 -min = 0 -max = 5000 -interval = 1 -str = STR_CONFIG_SETTING_SUBSIDY_DURATION -strhelp = STR_CONFIG_SETTING_SUBSIDY_DURATION_HELPTEXT -strval = STR_CONFIG_SETTING_SUBSIDY_DURATION_VALUE - -[SDT_VAR] -var = difficulty.construction_cost -type = SLE_UINT8 -from = SLV_97 -flags = SF_NEWGAME_ONLY | SF_SCENEDIT_TOO | SF_GUI_DROPDOWN -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 -flags = SF_GUI_DROPDOWN | SF_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 -flags = SF_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_ENUM] -var = difficulty.town_council_tolerance -type = SLE_UINT8 -from = SLV_97 -flags = SF_ENUM_PRE_CB_VALIDATE -def = 0 -enumlist = _town_council_approval -str = STR_CONFIG_SETTING_CITY_APPROVAL -strhelp = STR_CONFIG_SETTING_CITY_APPROVAL_HELPTEXT -pre_cb = TownCouncilToleranceAdjust -post_cb = DifficultyNoiseChange - -[SDT_BOOL] -var = difficulty.money_cheat_in_multiplayer -flags = SF_PATCH -def = false -str = STR_CONFIG_SETTING_MONEY_CHEAT_MULTIPLAYER -strhelp = STR_CONFIG_SETTING_MONEY_CHEAT_MULTIPLAYER_HELPTEXT -post_cb = DifficultyMoneyCheatMultiplayerChange -cat = SC_EXPERT -patxname = ""cheat.difficulty.money_cheat_in_multiplayer"" - -[SDT_BOOL] -var = difficulty.rename_towns_in_multiplayer -flags = SF_PATCH -def = false -str = STR_CONFIG_SETTING_RENAME_TOWNS_MULTIPLAYER -strhelp = STR_CONFIG_SETTING_RENAME_TOWNS_MULTIPLAYER_HELPTEXT -post_cb = DifficultyRenameTownsMultiplayerChange -cat = SC_EXPERT -patxname = ""cheat.difficulty.rename_towns_in_multiplayer"" - -[SDT_BOOL] -var = difficulty.override_town_settings_in_multiplayer -flags = SF_PATCH -def = false -str = STR_CONFIG_SETTING_OVERRIDE_TOWN_SETTINGS_MULTIPLAYER -strhelp = STR_CONFIG_SETTING_OVERRIDE_TOWN_SETTINGS_MULTIPLAYER_HELPTEXT -post_cb = DifficultyOverrideTownSettingsMultiplayerChange -cat = SC_EXPERT -patxname = ""cheat.difficulty.override_town_settings_in_multiplayer"" - -[SDTG_VAR] -name = ""diff_level"" -var = _old_diff_level -type = SLE_UINT8 -flags = SF_NOT_IN_CONFIG -from = SLV_97 -to = SLV_178 -def = 3 -min = 0 -max = 3 -cat = SC_BASIC - -[SDT_BOOL] -var = order.old_timetable_separation -flags = SF_PATCH -def = true -cat = SC_EXPERT -extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_AUTO_TIMETABLE, 1, 3) -patxname = ""auto_timetables.order.timetable_separation"" - -[SDT_VAR] -var = order.old_timetable_separation_rate -flags = SF_PATCH -type = SLE_UINT8 -def = 100 -min = 0 -max = 100 -interval = 10 -str = STR_CONFIG_SETTING_TIMETABLE_SEPARATION_RATE -strhelp = STR_CONFIG_SETTING_TIMETABLE_SEPARATION_RATE_HELPTEXT -strval = STR_CONFIG_SETTING_PERCENTAGE -cat = SC_EXPERT -extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_AUTO_TIMETABLE, 1, 2) -patxname = ""auto_timetables.order.timetable_separation_rate"" - -; 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 -flags = SF_NO_NETWORK -def = 0 -max = 255 -full = _town_names -cat = SC_BASIC - -[SDT_OMANY] -var = game_creation.landscape -type = SLE_UINT8 -from = SLV_97 -flags = SF_GUI_DROPDOWN | SF_NEWGAME_ONLY -def = 0 -max = 3 -full = _climates -load = ConvertLandscape -str = STR_CONFIG_SETTING_LANDSCAPE -strhelp = STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT -strval = STR_CLIMATE_TEMPERATE_LANDSCAPE -cat = SC_BASIC - -[SDT_OMANY] -var = vehicle.road_side -type = SLE_UINT8 -from = SLV_97 -flags = SF_GUI_DROPDOWN | SF_NO_NETWORK -def = 1 -max = 1 -full = _roadsides -str = STR_CONFIG_SETTING_ROAD_SIDE -strhelp = STR_CONFIG_SETTING_ROAD_SIDE_HELPTEXT -strval = STR_CONFIG_SETTING_ROAD_SIDE_LEFT -pre_cb = CheckRoadSide -post_cb = RoadSideChanged -cat = SC_BASIC - -; Construction - -[SDT_VAR] -var = construction.map_height_limit -type = SLE_UINT8 -from = SLV_194 -flags = SF_NEWGAME_ONLY | SF_SCENEDIT_TOO | SF_GUI_0_IS_SPECIAL -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 -extver = SlXvFeatureTest(XSLFTO_OR, XSLFI_HEIGHT_8_BIT, 1, 1) - -[SDT_VAR] -var = game_creation.heightmap_height -type = SLE_UINT8 -from = SLV_MAPGEN_SETTINGS_REVAMP -flags = SF_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 -flags = SF_NO_NETWORK -def = true -cat = SC_EXPERT - -[SDT_VAR] -var = construction.command_pause_level -type = SLE_UINT8 -from = SLV_154 -flags = SF_GUI_DROPDOWN -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_BOOL] -var = construction.enable_build_river -flags = SF_PATCH -def = false -cat = SC_BASIC -str = STR_CONFIG_SETTING_ENABLE_BUILD_RIVER -strhelp = STR_CONFIG_SETTING_ENABLE_BUILD_RIVER_HELPTEXT -patxname = ""enable_build_river.construction.enable_build_river"" - -[SDT_BOOL] -var = construction.enable_remove_water -flags = SF_PATCH -def = true -cat = SC_BASIC -str = STR_CONFIG_SETTING_ENABLE_REMOVE_WATER -strhelp = STR_CONFIG_SETTING_ENABLE_REMOVE_WATER_HELPTEXT -patxname = ""enable_build_river.construction.enable_remove_water"" - -[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_VAR] -var = construction.purchase_land_per_64k_frames -type = SLE_UINT32 -flags = SF_PATCH -def = 16 << 16 -min = 0 -max = 1 << 30 -interval = 1 -cat = SC_EXPERT -patxname = ""buy_land_rate_limit.construction.purchase_land_per_64k_frames"" - -[SDT_VAR] -var = construction.purchase_land_frame_burst -type = SLE_UINT16 -flags = SF_PATCH -def = 1024 -min = 0 -max = 1 << 15 -interval = 1 -cat = SC_EXPERT -patxname = ""buy_land_rate_limit.construction.purchase_land_frame_burst"" - -[SDT_VAR] -var = construction.build_object_per_64k_frames -type = SLE_UINT32 -def = 32 << 16 -min = 0 -max = 1 << 30 -interval = 1 -cat = SC_EXPERT -patxname = ""build_object_rate_limit.construction.build_object_per_64k_frames"" - -[SDT_VAR] -var = construction.build_object_frame_burst -type = SLE_UINT16 -def = 2048 -min = 0 -max = 1 << 15 -interval = 1 -cat = SC_EXPERT -patxname = ""build_object_rate_limit.construction.build_object_frame_burst"" - -[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 -def = 64 -min = 1 -max = 4096 -interval = 1 -str = STR_CONFIG_SETTING_MAX_BRIDGE_LENGTH -strhelp = STR_CONFIG_SETTING_MAX_BRIDGE_LENGTH_HELPTEXT -strval = STR_CONFIG_SETTING_TILE_LENGTH -pre_cb = [](int32 &new_value) -> bool { return CheckTTDPatchSettingFlag(0x0F); } - -[SDT_VAR] -var = construction.max_bridge_height -type = SLE_UINT8 -from = SLV_194 -flags = SF_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 -flags = SF_NO_NETWORK -def = 64 -min = 1 -max = 4096 -interval = 1 -str = STR_CONFIG_SETTING_MAX_TUNNEL_LENGTH -strhelp = STR_CONFIG_SETTING_MAX_TUNNEL_LENGTH_HELPTEXT -strval = STR_CONFIG_SETTING_TILE_LENGTH - -[SDT_BOOL] -var = construction.chunnel -flags = SF_PATCH -def = false -str = STR_CONFIG_SETTING_CHUNNEL -strhelp = STR_CONFIG_SETTING_CHUNNEL_HELPTEXT -cat = SC_BASIC -patxname = ""chunnel.construction.chunnel"" - -[SDT_VAR] -var = construction.old_simulated_wormhole_signals -type = SLE_UINT8 -flags = SF_PATCH -def = 2 -min = 1 -max = 16 -str = STR_CONFIG_SETTING_SIMULATE_SIGNALS -strval = STR_CONFIG_SETTING_SIMULATE_SIGNALS_VALUE -cat = SC_BASIC -extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SIG_TUNNEL_BRIDGE, 1, 7) -patxname = ""signal_tunnel_bridge.construction.simulated_wormhole_signals"" - -[SDT_VAR] -var = construction.train_signal_side -type = SLE_UINT8 -flags = SF_GUI_DROPDOWN -def = 1 -min = 0 -max = 2 -str = STR_CONFIG_SETTING_SIGNALSIDE -strhelp = STR_CONFIG_SETTING_SIGNALSIDE_HELPTEXT -strval = STR_CONFIG_SETTING_SIGNALSIDE_LEFT -pre_cb = [](int32 &new_value) -> bool { return CheckTTDPatchSettingFlag(0x3B); } -post_cb = [](auto) { MarkWholeScreenDirty(); } -cat = SC_BASIC - -[SDT_BOOL] -var = station.never_expire_airports -def = false -str = STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS -strhelp = STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT -pre_cb = [](int32 &new_value) -> bool { return CheckTTDPatchSettingFlag(0x0C); } - -[SDT_VAR] -var = economy.town_layout -type = SLE_UINT8 -from = SLV_59 -flags = SF_GUI_DROPDOWN -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 -def = true -str = STR_CONFIG_SETTING_ALLOW_TOWN_ROADS -strhelp = STR_CONFIG_SETTING_ALLOW_TOWN_ROADS_HELPTEXT -pre_cb = [](int32 &new_value) -> bool { return CheckTTDPatchSettingFlag(0x62); } - -[SDT_VAR] -var = economy.found_town -type = SLE_UINT8 -from = SLV_128 -flags = SF_GUI_DROPDOWN -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 -def = true -str = STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS -strhelp = STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS_HELPTEXT - -[SDT_VAR] -var = economy.town_build_tunnels -type = SLE_UINT8 -flags = SF_GUI_DROPDOWN | SF_PATCH -def = TTM_ALLOWED -min = TTM_BEGIN -max = TTM_END - 1 -interval = 1 -str = STR_CONFIG_SETTING_TOWN_TUNNELS -strhelp = STR_CONFIG_SETTING_TOWN_TUNNELS_HELPTEXT -strval = STR_CONFIG_SETTING_TOWN_TUNNELS_FORBIDDEN -cat = SC_BASIC -patxname = ""economy.town_build_tunnels"" - -[SDT_VAR] -var = economy.town_max_road_slope -type = SLE_UINT8 -flags = SF_GUI_0_IS_SPECIAL | SF_PATCH -def = 4 -min = 0 -max = 8 -interval = 1 -str = STR_CONFIG_SETTING_TOWN_MAX_ROAD_SLOPE -strhelp = STR_CONFIG_SETTING_TOWN_MAX_ROAD_SLOPE_HELPTEXT -strval = STR_CONFIG_SETTING_TOWN_MAX_ROAD_SLOPE_VALUE -cat = SC_BASIC -patxname = ""economy.town_max_road_slope"" - -[SDT_BOOL] -var = economy.allow_town_bridges -flags = SF_PATCH -def = true -str = STR_CONFIG_SETTING_ALLOW_TOWN_BRIDGES -strhelp = STR_CONFIG_SETTING_ALLOW_TOWN_BRIDGES_HELPTEXT -cat = SC_BASIC -patxname = ""economy.allow_town_bridges"" - -[SDT_VAR] -var = economy.town_cargogen_mode -type = SLE_UINT8 -from = SLV_TOWN_CARGOGEN -flags = SF_GUI_DROPDOWN -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 - -[SDT_VAR] -var = economy.max_town_heightlevel -type = SLE_UINT8 -flags = SF_PATCH -def = MAX_MAP_HEIGHT_LIMIT -min = 2 -max = MAX_MAP_HEIGHT_LIMIT -interval = 1 -str = STR_CONFIG_SETTING_TOWN_ABOVE_HEIGHT -strhelp = STR_CONFIG_SETTING_TOWN_ABOVE_HEIGHT_HELPTEXT -strval = STR_JUST_INT -cat = SC_BASIC -patxname = ""max_town_heightlevel.economy.max_town_heightlevel"" - -[SDT_VAR] -base = GameSettings -var = economy.min_town_land_area -type = SLE_UINT16 -flags = SF_GUI_0_IS_SPECIAL | SF_PATCH -def = 0 -min = 0 -max = 400 -interval = 5 -str = STR_CONFIG_SETTING_MIN_TOWN_LAND_AREA -strhelp = STR_CONFIG_SETTING_MIN_TOWN_LAND_AREA_HELPTEXT -strval = STR_CONFIG_SETTING_MIN_LAND_AREA_VALUE -cat = SC_BASIC -patxname = ""max_town_heightlevel.economy.min_town_land_area"" - -[SDT_VAR] -base = GameSettings -var = economy.min_city_land_area -type = SLE_UINT16 -flags = SF_GUI_0_IS_SPECIAL | SF_PATCH -def = 75 -min = 0 -max = 400 -interval = 5 -str = STR_CONFIG_SETTING_MIN_CITY_LAND_AREA -strhelp = STR_CONFIG_SETTING_MIN_CITY_LAND_AREA_HELPTEXT -strval = STR_CONFIG_SETTING_MIN_LAND_AREA_VALUE -cat = SC_BASIC -patxname = ""max_town_heightlevel.economy.min_city_land_area"" - -; link graph - -[SDT_VAR] -var = linkgraph.recalc_interval -type = SLE_UINT16 -from = SLV_183 -def = 8 -min = 4 -max = 90 -interval = 1 -str = STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL -strval = STR_CONFIG_SETTING_SECONDS_VALUE -strhelp = STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT - -[SDT_VAR] -var = linkgraph.recalc_time -type = SLE_UINT16 -from = SLV_183 -def = 32 -min = 1 -max = 9000 -interval = 1 -str = STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME -strval = STR_CONFIG_SETTING_SECONDS_VALUE -strhelp = STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT - -[SDT_NAMED_NULL] -name = ""linkgraph.recalc_not_scaled_by_daylength"" -length = 1 -extver = SlXvFeatureTest([](uint16 version, bool version_in_range, const std::array &feature_versions) -> bool { return version_in_range && SlXvIsFeaturePresent(feature_versions, XSLFI_LINKGRAPH_DAY_SCALE, 1, 1) && !SlXvIsFeaturePresent(feature_versions, XSLFI_JOKERPP); }) -patxname = ""linkgraph_day_scale.linkgraph.recalc_not_scaled_by_daylength"" - -[SDT_ENUM] -var = linkgraph.distribution_pax -type = SLE_UINT8 -from = SLV_183 -def = DT_MANUAL -enumlist = _linkgraph_mode_symmetric -str = STR_CONFIG_SETTING_DISTRIBUTION_PAX -strhelp = STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT -guiproc = LinkGraphDistributionSettingGUI - -[SDT_ENUM] -var = linkgraph.distribution_mail -type = SLE_UINT8 -from = SLV_183 -def = DT_MANUAL -enumlist = _linkgraph_mode_symmetric -str = STR_CONFIG_SETTING_DISTRIBUTION_MAIL -strhelp = STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT -guiproc = LinkGraphDistributionSettingGUI - -[SDT_ENUM] -var = linkgraph.distribution_armoured -type = SLE_UINT8 -from = SLV_183 -def = DT_MANUAL -enumlist = _linkgraph_mode_symmetric -str = STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED -strhelp = STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT -guiproc = LinkGraphDistributionSettingGUI - -[SDT_ENUM] -var = linkgraph.distribution_default -type = SLE_UINT8 -from = SLV_183 -def = DT_MANUAL -enumlist = _linkgraph_mode_asymmetric -str = STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT -strhelp = STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT -guiproc = LinkGraphDistributionSettingGUI - -[SDT_LINKGRAPH_PER_CARGO] -linkgraph_cargo = 0 -[SDT_LINKGRAPH_PER_CARGO] -linkgraph_cargo = 1 -[SDT_LINKGRAPH_PER_CARGO] -linkgraph_cargo = 2 -[SDT_LINKGRAPH_PER_CARGO] -linkgraph_cargo = 3 -[SDT_LINKGRAPH_PER_CARGO] -linkgraph_cargo = 4 -[SDT_LINKGRAPH_PER_CARGO] -linkgraph_cargo = 5 -[SDT_LINKGRAPH_PER_CARGO] -linkgraph_cargo = 6 -[SDT_LINKGRAPH_PER_CARGO] -linkgraph_cargo = 7 -[SDT_LINKGRAPH_PER_CARGO] -linkgraph_cargo = 8 -[SDT_LINKGRAPH_PER_CARGO] -linkgraph_cargo = 9 -[SDT_LINKGRAPH_PER_CARGO] -linkgraph_cargo = 10 -[SDT_LINKGRAPH_PER_CARGO] -linkgraph_cargo = 11 -[SDT_LINKGRAPH_PER_CARGO] -linkgraph_cargo = 12 -[SDT_LINKGRAPH_PER_CARGO] -linkgraph_cargo = 13 -[SDT_LINKGRAPH_PER_CARGO] -linkgraph_cargo = 14 -[SDT_LINKGRAPH_PER_CARGO] -linkgraph_cargo = 15 -[SDT_LINKGRAPH_PER_CARGO] -linkgraph_cargo = 16 -[SDT_LINKGRAPH_PER_CARGO] -linkgraph_cargo = 17 -[SDT_LINKGRAPH_PER_CARGO] -linkgraph_cargo = 18 -[SDT_LINKGRAPH_PER_CARGO] -linkgraph_cargo = 19 -[SDT_LINKGRAPH_PER_CARGO] -linkgraph_cargo = 20 -[SDT_LINKGRAPH_PER_CARGO] -linkgraph_cargo = 21 -[SDT_LINKGRAPH_PER_CARGO] -linkgraph_cargo = 22 -[SDT_LINKGRAPH_PER_CARGO] -linkgraph_cargo = 23 -[SDT_LINKGRAPH_PER_CARGO] -linkgraph_cargo = 24 -[SDT_LINKGRAPH_PER_CARGO] -linkgraph_cargo = 25 -[SDT_LINKGRAPH_PER_CARGO] -linkgraph_cargo = 26 -[SDT_LINKGRAPH_PER_CARGO] -linkgraph_cargo = 27 -[SDT_LINKGRAPH_PER_CARGO] -linkgraph_cargo = 28 -[SDT_LINKGRAPH_PER_CARGO] -linkgraph_cargo = 29 -[SDT_LINKGRAPH_PER_CARGO] -linkgraph_cargo = 30 -[SDT_LINKGRAPH_PER_CARGO] -linkgraph_cargo = 31 -[SDT_LINKGRAPH_PER_CARGO] -linkgraph_cargo = 32 -[SDT_LINKGRAPH_PER_CARGO] -linkgraph_cargo = 33 -[SDT_LINKGRAPH_PER_CARGO] -linkgraph_cargo = 34 -[SDT_LINKGRAPH_PER_CARGO] -linkgraph_cargo = 35 -[SDT_LINKGRAPH_PER_CARGO] -linkgraph_cargo = 36 -[SDT_LINKGRAPH_PER_CARGO] -linkgraph_cargo = 37 -[SDT_LINKGRAPH_PER_CARGO] -linkgraph_cargo = 38 -[SDT_LINKGRAPH_PER_CARGO] -linkgraph_cargo = 39 -[SDT_LINKGRAPH_PER_CARGO] -linkgraph_cargo = 40 -[SDT_LINKGRAPH_PER_CARGO] -linkgraph_cargo = 41 -[SDT_LINKGRAPH_PER_CARGO] -linkgraph_cargo = 42 -[SDT_LINKGRAPH_PER_CARGO] -linkgraph_cargo = 43 -[SDT_LINKGRAPH_PER_CARGO] -linkgraph_cargo = 44 -[SDT_LINKGRAPH_PER_CARGO] -linkgraph_cargo = 45 -[SDT_LINKGRAPH_PER_CARGO] -linkgraph_cargo = 46 -[SDT_LINKGRAPH_PER_CARGO] -linkgraph_cargo = 47 -[SDT_LINKGRAPH_PER_CARGO] -linkgraph_cargo = 48 -[SDT_LINKGRAPH_PER_CARGO] -linkgraph_cargo = 49 -[SDT_LINKGRAPH_PER_CARGO] -linkgraph_cargo = 50 -[SDT_LINKGRAPH_PER_CARGO] -linkgraph_cargo = 51 -[SDT_LINKGRAPH_PER_CARGO] -linkgraph_cargo = 52 -[SDT_LINKGRAPH_PER_CARGO] -linkgraph_cargo = 53 -[SDT_LINKGRAPH_PER_CARGO] -linkgraph_cargo = 54 -[SDT_LINKGRAPH_PER_CARGO] -linkgraph_cargo = 55 -[SDT_LINKGRAPH_PER_CARGO] -linkgraph_cargo = 56 -[SDT_LINKGRAPH_PER_CARGO] -linkgraph_cargo = 57 -[SDT_LINKGRAPH_PER_CARGO] -linkgraph_cargo = 58 -[SDT_LINKGRAPH_PER_CARGO] -linkgraph_cargo = 59 -[SDT_LINKGRAPH_PER_CARGO] -linkgraph_cargo = 60 -[SDT_LINKGRAPH_PER_CARGO] -linkgraph_cargo = 61 -[SDT_LINKGRAPH_PER_CARGO] -linkgraph_cargo = 62 -[SDT_LINKGRAPH_PER_CARGO] -linkgraph_cargo = 63 - -[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 - -[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 - -[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 - -[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 - -[SDT_VAR] -var = linkgraph.aircraft_link_scale -type = SLE_UINT16 -flags = SF_PATCH -def = 100 -min = 100 -max = 1000 -interval = 50 -str = STR_CONFIG_SETTING_AIRCRAFT_PATH_COST -strval = STR_CONFIG_SETTING_PERCENTAGE -strhelp = STR_CONFIG_SETTING_AIRCRAFT_PATH_COST_HELPTEXT -extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_LINKGRAPH_AIRCRAFT) - -[SDT_VAR] -var = economy.old_town_cargo_factor -type = SLE_INT8 -flags = SF_PATCH -def = 0 -min = -16 -max = +8 -interval = 1 -str = STR_CONFIG_SETTING_TOWN_CARGO_FACTOR -strval = STR_JUST_INT -extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_TOWN_CARGO_ADJ, 1, 1) -patxname = ""town_cargo_adj.economy.town_cargo_factor"" - -[SDT_VAR] -var = economy.town_cargo_scale_factor -type = SLE_INT16 -flags = SF_DECIMAL1 | SF_DEC1SCALE | SF_PATCH -def = 0 -min = -160 -max = +80 -interval = 1 -str = STR_CONFIG_SETTING_TOWN_CARGO_FACTOR -strval = STR_DECIMAL1_WITH_SCALE -strhelp = STR_CONFIG_SETTING_TOWN_CARGO_FACTOR_HELPTEXT -patxname = ""town_cargo_adj.economy.town_cargo_scale_factor"" - -[SDT_VAR] -var = economy.industry_cargo_scale_factor -type = SLE_INT16 -flags = SF_DECIMAL1 | SF_DEC1SCALE | SF_PATCH -def = 0 -min = -50 -max = +50 -interval = 1 -str = STR_CONFIG_SETTING_INDUSTRY_CARGO_FACTOR -strval = STR_DECIMAL1_WITH_SCALE -strhelp = STR_CONFIG_SETTING_INDUSTRY_CARGO_FACTOR_HELPTEXT -patxname = ""industry_cargo_adj.economy.industry_cargo_scale_factor"" - -; Vehicles - -[SDT_VAR] -var = vehicle.train_acceleration_model -type = SLE_UINT8 -flags = SF_GUI_DROPDOWN -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_ENUM] -var = vehicle.train_braking_model -type = SLE_UINT8 -flags = SF_PATCH -def = TBM_ORIGINAL -enumlist = _train_braking_model -str = STR_CONFIG_SETTING_TRAIN_BRAKING_MODEL -strhelp = STR_CONFIG_SETTING_TRAIN_BRAKING_MODEL_HELPTEXT -pre_cb = CheckTrainBrakingModelChange -post_cb = TrainBrakingModelChanged -cat = SC_EXPERT -patxname = ""realistic_braking.vehicle.train_braking_model"" - -[SDT_ENUM] -var = vehicle.realistic_braking_aspect_limited -type = SLE_UINT8 -flags = SF_PATCH -def = TRBALM_OFF -enumlist = _realistic_braking_aspect_limited -str = STR_CONFIG_SETTING_REALISTIC_BRAKING_ASPECT_LIMITED -strhelp = STR_CONFIG_SETTING_REALISTIC_BRAKING_ASPECT_LIMITED_HELPTEXT -cat = SC_EXPERT -patxname = ""realistic_braking.vehicle.realistic_braking_aspect_limited"" - -[SDT_BOOL] -var = vehicle.limit_train_acceleration -flags = SF_PATCH -def = false -str = STR_CONFIG_SETTING_LIMIT_TRAIN_ACCELERATION -strhelp = STR_CONFIG_SETTING_LIMIT_TRAIN_ACCELERATION_HELPTEXT -cat = SC_EXPERT -patxname = ""realistic_braking.vehicle.limit_train_acceleration"" - -[SDT_VAR] -var = vehicle.roadveh_acceleration_model -type = SLE_UINT8 -from = SLV_139 -flags = SF_GUI_DROPDOWN -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_VAR] -var = vehicle.through_load_speed_limit -type = SLE_UINT16 -flags = SF_GUI_VELOCITY | SF_PATCH -def = 15 -min = 5 -max = 500 -interval = 5 -str = STR_CONFIG_SETTING_THROUGH_LOAD_SPEED_LIMIT -strhelp = STR_CONFIG_SETTING_THROUGH_LOAD_SPEED_LIMIT_HELPTEXT -strval = STR_JUST_VELOCITY -cat = SC_EXPERT -patxname = ""vehicle.through_load_speed_limit"" - -[SDT_VAR] -var = vehicle.rail_depot_speed_limit -type = SLE_UINT16 -flags = SF_GUI_VELOCITY | SF_PATCH -def = 61 -min = 5 -max = 100 -interval = 5 -str = STR_CONFIG_SETTING_RAIL_DEPOT_SPEED_LIMIT -strhelp = STR_CONFIG_SETTING_RAIL_DEPOT_SPEED_LIMIT_HELPTEXT -strval = STR_JUST_VELOCITY -cat = SC_EXPERT -patxname = ""vehicle.rail_depot_speed_limit"" - -[SDT_BOOL] -var = vehicle.non_leading_engines_keep_name -flags = SF_PATCH -def = false -str = STR_CONFIG_SETTING_NON_LEADING_ENGINES_KEEP_NAME -strhelp = STR_CONFIG_SETTING_NON_LEADING_ENGINES_KEEP_NAME_HELPTEXT -cat = SC_ADVANCED -patxname = ""vehicle.non_leading_engines_keep_name"" - -[SDT_BOOL] -var = pf.forbid_90_deg -def = true -str = STR_CONFIG_SETTING_FORBID_90_DEG -strhelp = STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT -cat = SC_EXPERT - -[SDT_BOOL] -var = pf.back_of_one_way_pbs_waiting_point -flags = SF_PATCH -def = true -str = STR_CONFIG_SETTING_BACK_ONE_WAY_PBS_SAFE_WAITING -str = STR_CONFIG_SETTING_BACK_ONE_WAY_PBS_SAFE_WAITING_HELPTEXT -cat = SC_EXPERT -patxname = ""pf.back_of_one_way_pbs_waiting_point"" - -[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 - -[SDT_VAR] -var = vehicle.smoke_amount -type = SLE_UINT8 -from = SLV_145 -flags = SF_GUI_DROPDOWN -def = 1 -min = 0 -max = 2 -str = STR_CONFIG_SETTING_SMOKE_AMOUNT -strhelp = STR_CONFIG_SETTING_SMOKE_AMOUNT_HELPTEXT -strval = STR_CONFIG_SETTING_NONE - -; path finder - -[SDT_BOOL] -var = pf.roadveh_queue -def = true -cat = SC_EXPERT - -[SDT_VAR] -var = pf.reroute_rv_on_layout_change -type = SLE_UINT8 -flags = SF_GUI_DROPDOWN | SF_PATCH -def = 1 -min = 0 -max = 2 -interval = 1 -str = STR_CONFIG_SETTING_REROUTE_RV_ON_LAYOUT_CHANGE -strhelp = STR_CONFIG_SETTING_REROUTE_RV_ON_LAYOUT_CHANGE_HELPTEXT -strval = STR_CONFIG_SETTING_REROUTE_RV_ON_LAYOUT_CHANGE_NO -cat = SC_ADVANCED -patxname = ""pf.reroute_rv_on_layout_change"" - -[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 -flags = SF_GUI_DROPDOWN -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 -flags = SF_GUI_DROPDOWN -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 -flags = SF_GUI_DROPDOWN -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 -flags = SF_NO_NETWORK -def = false -str = STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES -strhelp = STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT - -[SDT_VAR] -var = vehicle.no_expire_vehicles_after -type = SLE_INT32 -flags = SF_NO_NETWORK | SF_GUI_0_IS_SPECIAL | SF_PATCH -def = 0 -min = MIN_YEAR -max = MAX_YEAR -interval = 1 -str = STR_CONFIG_SETTING_NO_EXPIRE_VEHICLES_AFTER -strhelp = STR_CONFIG_SETTING_NO_EXPIRE_VEHICLES_AFTER_HELPTEXT -strval = STR_CONFIG_SETTING_NO_EXPIRE_VEHICLES_AFTER_VALUE -cat = SC_EXPERT -patxname = ""vehicle.no_expire_vehicles_after"" - -[SDT_VAR] -var = vehicle.no_introduce_vehicles_after -type = SLE_INT32 -flags = SF_NO_NETWORK | SF_GUI_0_IS_SPECIAL | SF_PATCH -def = 0 -min = MIN_YEAR -max = MAX_YEAR -interval = 1 -str = STR_CONFIG_SETTING_NO_INTRODUCE_VEHICLES_AFTER -strhelp = STR_CONFIG_SETTING_NO_INTRODUCE_VEHICLES_AFTER_HELPTEXT -strval = STR_CONFIG_SETTING_NO_INTRODUCE_VEHICLES_AFTER_VALUE -cat = SC_EXPERT -patxname = ""vehicle.no_introduce_vehicles_after"" - -[SDT_VAR] -var = vehicle.max_trains -type = SLE_UINT16 -def = 500 -min = 0 -max = 10000 -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 = 10000 -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 = 10000 -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 = 10000 -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 = ""vehicle.servint_ispercent"" -flags = SF_NO_NETWORK -var = _old_vds.servint_ispercent -def = false -to = SLV_120 - -[SDTG_VAR] -name = ""vehicle.servint_trains"" -type = SLE_UINT16 -flags = SF_GUI_0_IS_SPECIAL -var = _old_vds.servint_trains -def = 150 -min = 5 -max = 800 -to = SLV_120 - -[SDTG_VAR] -name = ""vehicle.servint_roadveh"" -type = SLE_UINT16 -flags = SF_GUI_0_IS_SPECIAL -var = _old_vds.servint_roadveh -def = 150 -min = 5 -max = 800 -to = SLV_120 - -[SDTG_VAR] -name = ""vehicle.servint_ships"" -type = SLE_UINT16 -flags = SF_GUI_0_IS_SPECIAL -var = _old_vds.servint_ships -def = 360 -min = 5 -max = 800 -to = SLV_120 - -[SDTG_VAR] -name = ""vehicle.servint_aircraft"" -type = SLE_UINT16 -flags = SF_GUI_0_IS_SPECIAL -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 -def = true -str = STR_CONFIG_SETTING_WAGONSPEEDLIMITS -strhelp = STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT -pre_cb = [](int32 &new_value) -> bool { return CheckTTDPatchSettingFlag(0x5D); } -post_cb = UpdateConsists - -[SDT_BOOL] -var = vehicle.slow_road_vehicles_in_curves -flags = SF_PATCH -def = true -str = STR_CONFIG_SETTING_SLOW_ROAD_VEHICLES_IN_CURVES -strhelp = STR_CONFIG_SETTING_SLOW_ROAD_VEHICLES_IN_CURVES_HELPTEXT -cat = SC_BASIC -patxname = ""slow_road_vehicles_in_curves.vehicle.slow_road_vehicles_in_curves"" - -[SDT_BOOL] -var = vehicle.train_speed_adaptation -flags = SF_PATCH -def = false -str = STR_CONFIG_SETTING_TRAIN_SPEED_ADAPTATION -strhelp = STR_CONFIG_SETTING_TRAIN_SPEED_ADAPTATION_HELPTEXT -cat = SC_EXPERT -post_cb = TrainSpeedAdaptationChanged -patxname = ""train_speed_adaptation.vehicle.train_speed_adaptation"" - -[SDT_BOOL] -var = vehicle.disable_elrails -from = SLV_38 -flags = SF_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 -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 -pre_cb = [](int32 &new_value) -> bool { return CheckTTDPatchSettingFlag(0x58); } -post_cb = UpdateConsists - -[SDT_VAR] -var = vehicle.plane_speed -type = SLE_UINT8 -from = SLV_90 -flags = SF_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 -flags = SF_NO_NETWORK -def = true -pre_cb = CheckDynamicEngines -cat = SC_EXPERT - -[SDT_VAR] -var = vehicle.plane_crashes -type = SLE_UINT8 -from = SLV_138 -flags = SF_GUI_DROPDOWN -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 - -[SDT_BOOL] -var = vehicle.improved_breakdowns -flags = SF_PATCH -def = false -str = STR_CONFIG_SETTING_IMPROVED_BREAKDOWNS -post_cb = ImprovedBreakdownsSettingChanged -patxname = ""improved_breakdowns.vehicle.improved_breakdowns"" - -[SDT_BOOL] -var = vehicle.ship_collision_avoidance -flags = SF_PATCH -def = true -str = STR_CONFIG_SETTING_SHIP_COLLISION_AVOIDANCE -strhelp = STR_CONFIG_SETTING_SHIP_COLLISION_AVOIDANCE_HELPTEXT -patxname = ""ship_collision_avoidance.vehicle.ship_collision_avoidance"" -cat = SC_BASIC - -[SDT_BOOL] -var = vehicle.no_train_crash_other_company -flags = SF_PATCH -def = false -str = STR_CONFIG_SETTING_NO_TRAIN_CRASH_OTHER_COMPANY -strhelp = STR_CONFIG_SETTING_NO_TRAIN_CRASH_OTHER_COMPANY_HELPTEXT -extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_INFRA_SHARING) -patxname = ""infra_sharing.vehicle.no_train_crash_other_company"" - -[SDT_BOOL] -var = vehicle.roadveh_articulated_overtaking -flags = SF_PATCH -def = true -str = STR_CONFIG_SETTING_ROADVEH_ARTICULATED_OVERTAKING -strhelp = STR_CONFIG_SETTING_ROADVEH_ARTICULATED_OVERTAKING_HELPTEXT -patxname = ""roadveh_articulated_overtaking.vehicle.roadveh_articulated_overtaking"" -cat = SC_BASIC - -[SDT_BOOL] -var = vehicle.roadveh_cant_quantum_tunnel -flags = SF_PATCH -def = false -str = STR_CONFIG_SETTING_ROADVEH_CANT_QUANTUM_TUNNEL -strhelp = STR_CONFIG_SETTING_ROADVEH_CANT_QUANTUM_TUNNEL_HELPTEXT -patxname = ""roadveh_cant_quantum_tunnel.vehicle.roadveh_cant_quantum_tunnel"" -cat = SC_BASIC - -[SDT_BOOL] -var = vehicle.drive_through_train_depot -flags = SF_PATCH -def = false -str = STR_CONFIG_SETTING_DRIVE_THROUGH_TRAIN_DEPOT -strhelp = STR_CONFIG_SETTING_DRIVE_THROUGH_TRAIN_DEPOT_HELPTEXT -patxname = ""drive_through_train_depot.vehicle.drive_through_train_depot"" - -[SDTC_BOOL] -var = gui.sg_full_load_any -from = SLV_22 -to = SLV_93 -def = true - -[SDT_BOOL] -var = order.improved_load -flags = SF_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 - -[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 = order.nonstop_only -flags = SF_PATCH -def = false -str = STR_CONFIG_SETTING_NONSTOP_ORDER_ONLY -strhelp = STR_CONFIG_SETTING_NONSTOP_ORDER_ONLY_HELPTEXT -cat = SC_EXPERT -patxname = ""nonstop_only.order.nonstop_only"" - -[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_VAR] -var = station.catchment_increase -type = SLE_UINT8 -flags = SF_PATCH -def = 0 -min = 0 -max = 5 -str = STR_CONFIG_SETTING_CATCHMENT_INCREASE -strhelp = STR_CONFIG_SETTING_CATCHMENT_INCREASE_HELPTEXT -strval = STR_JUST_COMMA -post_cb = StationCatchmentChanged -extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_STATION_CATCHMENT_INC) -patxname = ""station_catchment_inc.station.catchment_increase"" - -[SDT_BOOL] -var = station.cargo_class_rating_wait_time -flags = SF_PATCH -def = false -str = STR_CONFIG_SETTING_STATION_RATING_CARGO_CLASS_WAIT_TIME -strhelp = STR_CONFIG_SETTING_STATION_RATING_CARGO_CLASS_WAIT_TIME_HELPTEXT -patxname = ""station_rating.station.cargo_class_rating_wait_time"" - -[SDT_BOOL] -var = station.station_size_rating_cargo_amount -flags = SF_PATCH -def = false -str = STR_CONFIG_SETTING_STATION_RATING_SIZE_CARGO_AMOUNT -strhelp = STR_CONFIG_SETTING_STATION_RATING_SIZE_CARGO_AMOUNT_HELPTEXT -patxname = ""station_rating.station.station_size_rating_cargo_amount"" - -[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_ENUM] -var = station.station_delivery_mode -type = SLE_UINT8 -flags = SF_PATCH -def = SD_NEAREST_FIRST -enumlist = _station_delivery_mode -str = STR_CONFIG_SETTING_CARGO_DELIVERY_MODE -strhelp = STR_CONFIG_SETTING_CARGO_DELIVERY_MODE_HELPTEXT -patxname = ""station.station_delivery_mode"" - -[SDT_BOOL] -var = order.gradual_loading -from = SLV_40 -flags = SF_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 = construction.road_custom_bridge_heads -flags = SF_PATCH -def = true -cat = SC_BASIC -str = STR_CONFIG_SETTING_ENABLE_ROAD_CUSTOM_BRIDGE_HEADS -strhelp = STR_CONFIG_SETTING_ENABLE_ROAD_CUSTOM_BRIDGE_HEADS_HELPTEXT -patxname = ""custom_bridge_heads.construction.road_custom_bridge_heads"" - -[SDT_BOOL] -var = construction.rail_custom_bridge_heads -flags = SF_PATCH -def = true -cat = SC_BASIC -str = STR_CONFIG_SETTING_ENABLE_RAIL_CUSTOM_BRIDGE_HEADS -strhelp = STR_CONFIG_SETTING_ENABLE_RAIL_CUSTOM_BRIDGE_HEADS_HELPTEXT -patxname = ""custom_bridge_heads.construction.rail_custom_bridge_heads"" - -[SDT_BOOL] -var = construction.allow_grf_objects_under_bridges -flags = SF_PATCH -def = false -cat = SC_ADVANCED -str = STR_CONFIG_SETTING_ALLOW_GRF_OBJECTS_UNDER_BRIDGES -strhelp = STR_CONFIG_SETTING_ALLOW_GRF_OBJECTS_UNDER_BRIDGES_HELPTEXT -patxname = ""allow_grf_objects_under_bridges.construction.allow_grf_objects_under_bridges"" - -[SDT_BOOL] -var = construction.allow_stations_under_bridges -flags = SF_PATCH -def = false -cat = SC_ADVANCED -str = STR_CONFIG_SETTING_ALLOW_GRF_STATIONS_UNDER_BRIDGES -strhelp = STR_CONFIG_SETTING_ALLOW_GRF_STATIONS_UNDER_BRIDGES_HELPTEXT -patxname = ""allow_stations_under_bridges.construction.allow_stations_under_bridges"" - -[SDT_BOOL] -var = construction.allow_road_stops_under_bridges -flags = SF_PATCH -def = true -cat = SC_ADVANCED -str = STR_CONFIG_SETTING_ALLOW_ROAD_STATIONS_UNDER_BRIDGES -strhelp = STR_CONFIG_SETTING_ALLOW_ROAD_STATIONS_UNDER_BRIDGES_HELPTEXT -patxname = ""allow_stations_under_bridges.construction.allow_road_stops_under_bridges"" -guiproc = AllowRoadStopsUnderBridgesSettingGUI - -[SDT_BOOL] -var = construction.allow_docks_under_bridges -flags = SF_PATCH -def = false -cat = SC_ADVANCED -str = STR_CONFIG_SETTING_ALLOW_DOCKS_UNDER_BRIDGES -strhelp = STR_CONFIG_SETTING_ALLOW_DOCKS_UNDER_BRIDGES_HELPTEXT -patxname = ""allow_stations_under_bridges.construction.allow_docks_under_bridges"" - -[SDT_VAR] -var = construction.purchase_land_permitted -type = SLE_UINT8 -flags = SF_GUI_DROPDOWN | SF_PATCH -def = 1 -min = 0 -max = 2 -interval = 1 -str = STR_CONFIG_SETTING_PURCHASE_LAND_PERMITTED -strhelp = STR_CONFIG_SETTING_PURCHASE_LAND_PERMITTED_HELPTEXT -strval = STR_PURCHASE_LAND_PERMITTED_NO -patxname = ""purchase_land_permitted.construction.purchase_land_permitted"" - -[SDT_BOOL] -var = construction.build_object_area_permitted -flags = SF_PATCH -def = true -str = STR_CONFIG_SETTING_BUILD_OBJECT_PERMITTED -strhelp = STR_CONFIG_SETTING_BUILD_OBJECT_PERMITTED_HELPTEXT -patxname = ""build_object_area_permitted.construction.build_object_area_permitted"" - -[SDT_VAR] -var = construction.no_expire_objects_after -type = SLE_INT32 -flags = SF_GUI_0_IS_SPECIAL | SF_PATCH -def = 0 -min = MIN_YEAR -max = MAX_YEAR -interval = 1 -str = STR_CONFIG_SETTING_NO_EXPIRE_OBJECTS_AFTER -strhelp = STR_CONFIG_SETTING_NO_EXPIRE_OBJECTS_AFTER_HELPTEXT -strval = STR_CONFIG_SETTING_NO_EXPIRE_OBJECTS_AFTER_VALUE -cat = SC_ADVANCED -patxname = ""construction.no_expire_objects_after"" -post_cb = [](auto) { InvalidateWindowClassesData(WC_BUILD_OBJECT, 0); } - -[SDT_BOOL] -var = construction.ignore_object_intro_dates -flags = SF_PATCH -def = false -str = STR_CONFIG_SETTING_IGNORE_OBJECT_INTRO_DATES -strhelp = STR_CONFIG_SETTING_IGNORE_OBJECT_INTRO_DATES_HELPTEXT -patxname = ""construction.ignore_object_intro_dates"" -post_cb = [](auto) { InvalidateWindowClassesData(WC_BUILD_OBJECT, 0); } - -[SDT_BOOL] -var = construction.convert_town_road_no_houses -flags = SF_PATCH -def = false -str = STR_CONFIG_SETTING_ALLOW_CONVERT_TOWN_ROAD_NO_HOUSES -strhelp = STR_CONFIG_SETTING_ALLOW_CONVERT_TOWN_ROAD_NO_HOUSES_HELPTEXT -cat = SC_EXPERT -patxname = ""construction.convert_town_road_no_houses"" - -[SDT_BOOL] -var = station.adjacent_stations -from = SLV_62 -def = true -cat = SC_EXPERT - -[SDT_BOOL] -var = economy.station_noise_level -from = SLV_96 -flags = SF_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) { CloseWindowById(WC_SELECT_STATION, 0); } - -[SDT_BOOL] -var = economy.inflation -def = false -str = STR_CONFIG_SETTING_INFLATION -strhelp = STR_CONFIG_SETTING_INFLATION_HELPTEXT -cat = SC_BASIC -pre_cb = [](int32 &new_value) -> bool { return CheckTTDPatchSettingFlag(0x81); } - -[SDT_BOOL] -var = economy.inflation_fixed_dates -flags = SF_PATCH -def = true -str = STR_CONFIG_SETTING_INFLATION_FIXED_DATES -strhelp = STR_CONFIG_SETTING_INFLATION_FIXED_DATES_HELPTEXT -patxname = ""inflation_fixed_dates.economy.inflation_fixed_dates"" - -[SDT_VAR] -var = economy.day_length_factor -type = SLE_UINT8 -flags = SF_PATCH -def = 1 -min = 1 -max = 125 -str = STR_CONFIG_SETTING_DAY_LENGTH_FACTOR -strhelp = STR_CONFIG_SETTING_DAY_LENGTH_FACTOR_HELPTEXT -strval = STR_JUST_COMMA -pre_cb = DayLengthPreChange -post_cb = DayLengthChanged -cat = SC_BASIC -extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_VARIABLE_DAY_LENGTH) -patxname = ""variable_day_length.economy.day_length_factor"" - -[SDT_VAR] -var = construction.raw_industry_construction -type = SLE_UINT8 -flags = SF_GUI_DROPDOWN -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_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 -flags = SF_NO_NETWORK -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.rainforest_line_height -type = SLE_UINT8 -flags = SF_NEWGAME_ONLY | SF_SCENEDIT_TOO | SF_PATCH -def = DEF_RAINFOREST_HEIGHT -min = MIN_RAINFOREST_HEIGHT -max = MAX_RAINFOREST_HEIGHT -interval = 1 -str = STR_CONFIG_SETTING_RAINFORESTLINE_HEIGHT -strhelp = STR_CONFIG_SETTING_RAINFORESTLINE_HEIGHT_HELPTEXT -strval = STR_JUST_COMMA -cat = SC_BASIC -patxname = ""rainforest_line_height.game_creation.rainforest_line_height"" - -[SDT_VAR] -var = game_creation.climate_threshold_mode -type = SLE_UINT8 -flags = SF_GUI_DROPDOWN | SF_NEWGAME_ONLY | SF_PATCH -def = 0 -min = 0 -max = 1 -str = STR_CONFIG_SETTING_CLIMATE_THRESHOLD_MODE -strhelp = STR_CONFIG_SETTING_CLIMATE_THRESHOLD_MODE_HELPTEXT -strval = STR_CONFIG_SETTING_CLIMATE_THRESHOLD_COVERAGE -post_cb = ClimateThresholdModeChanged -patxname = ""climate.game_creation.climate_threshold_mode"" - -[SDT_VAR] -var = game_creation.snow_coverage -type = SLE_UINT8 -from = SLV_MAPGEN_SETTINGS_REVAMP -flags = SF_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 -flags = SF_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_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_VAR] -var = game_creation.ending_year -type = SLE_INT32 -from = SLV_ENDING_YEAR -flags = SF_GUI_0_IS_SPECIAL -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 -flags = SF_GUI_DROPDOWN -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 = InvalidateCompanyWindow - -[SDT_VAR] -var = economy.min_years_for_shares -type = SLE_UINT8 -from = SLV_TRADING_AGE -flags = SF_GUI_0_IS_SPECIAL -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_CONFIG_SETTING_MIN_YEARS_FOR_SHARES_VALUE -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_INT8 -from = SLV_54 -flags = SF_GUI_DROPDOWN -def = 2 -min = -2 -max = 4 -str = STR_CONFIG_SETTING_TOWN_GROWTH -strhelp = STR_CONFIG_SETTING_TOWN_GROWTH_HELPTEXT -strval = STR_CONFIG_SETTING_TOWN_GROWTH_EXTREME_SLOW -guiproc = OrderTownGrowthRate - -[SDT_BOOL] -var = economy.town_zone_calc_mode -flags = SF_PATCH -def = false -str = STR_CONFIG_SETTING_TOWN_ZONE_CALC_MODE -strhelp = STR_CONFIG_SETTING_TOWN_ZONE_CALC_MODE_HELPTEXT -cat = SC_EXPERT -post_cb = TownZoneModeChanged -patxname = ""town_zone.economy.town_zone_calc_mode"" - -[SDT_VAR] -var = economy.town_zone_0_mult -type = SLE_UINT16 -flags = SF_PATCH -def = 15 -min = 0 -max = 255 -interval = 1 -str = STR_CONFIG_SETTING_TOWN_ZONE_0_MULT -strhelp = STR_CONFIG_SETTING_TOWN_ZONE_0_MULT_HELPTEXT -strval = STR_JUST_COMMA -cat = SC_EXPERT -post_cb = TownZoneCustomValueChanged -patxname = ""town_zone.economy.town_zone_0_mult"" - -[SDT_VAR] -var = economy.town_zone_1_mult -type = SLE_UINT16 -flags = SF_PATCH -def = 9 -min = 0 -max = 255 -interval = 1 -str = STR_CONFIG_SETTING_TOWN_ZONE_1_MULT -strhelp = STR_CONFIG_SETTING_TOWN_ZONE_1_MULT_HELPTEXT -strval = STR_JUST_COMMA -cat = SC_EXPERT -post_cb = TownZoneCustomValueChanged -patxname = ""town_zone.economy.town_zone_1_mult"" - -[SDT_VAR] -var = economy.town_zone_2_mult -type = SLE_UINT16 -flags = SF_PATCH -def = 0 -min = 0 -max = 255 -interval = 1 -str = STR_CONFIG_SETTING_TOWN_ZONE_2_MULT -strhelp = STR_CONFIG_SETTING_TOWN_ZONE_2_MULT_HELPTEXT -strval = STR_JUST_COMMA -cat = SC_EXPERT -post_cb = TownZoneCustomValueChanged -patxname = ""town_zone.economy.town_zone_2_mult"" - -[SDT_VAR] -var = economy.town_zone_3_mult -type = SLE_UINT16 -flags = SF_PATCH -def = 5 -min = 0 -max = 255 -interval = 1 -str = STR_CONFIG_SETTING_TOWN_ZONE_3_MULT -strhelp = STR_CONFIG_SETTING_TOWN_ZONE_3_MULT_HELPTEXT -strval = STR_JUST_COMMA -cat = SC_EXPERT -post_cb = TownZoneCustomValueChanged -patxname = ""town_zone.economy.town_zone_3_mult"" - -[SDT_VAR] -var = economy.town_zone_4_mult -type = SLE_UINT16 -flags = SF_PATCH -def = 3 -min = 0 -max = 255 -interval = 1 -str = STR_CONFIG_SETTING_TOWN_ZONE_4_MULT -strhelp = STR_CONFIG_SETTING_TOWN_ZONE_4_MULT_HELPTEXT -strval = STR_JUST_COMMA -cat = SC_EXPERT -post_cb = TownZoneCustomValueChanged -patxname = ""town_zone.economy.town_zone_4_mult"" - -[SDT_VAR] -var = economy.city_zone_0_mult -type = SLE_UINT16 -flags = SF_PATCH -def = 15 -min = 0 -max = 255 -interval = 1 -str = STR_CONFIG_SETTING_CITY_ZONE_0_MULT -strhelp = STR_CONFIG_SETTING_CITY_ZONE_0_MULT_HELPTEXT -strval = STR_JUST_COMMA -cat = SC_EXPERT -post_cb = TownZoneCustomValueChanged -patxname = ""town_zone.economy.city_zone_0_mult"" - -[SDT_VAR] -var = economy.city_zone_1_mult -type = SLE_UINT16 -flags = SF_PATCH -def = 9 -min = 0 -max = 255 -interval = 1 -str = STR_CONFIG_SETTING_CITY_ZONE_1_MULT -strhelp = STR_CONFIG_SETTING_CITY_ZONE_1_MULT_HELPTEXT -strval = STR_JUST_COMMA -cat = SC_EXPERT -post_cb = TownZoneCustomValueChanged -patxname = ""town_zone.economy.city_zone_1_mult"" - -[SDT_VAR] -var = economy.city_zone_2_mult -type = SLE_UINT16 -flags = SF_PATCH -def = 0 -min = 0 -max = 255 -interval = 1 -str = STR_CONFIG_SETTING_CITY_ZONE_2_MULT -strhelp = STR_CONFIG_SETTING_CITY_ZONE_2_MULT_HELPTEXT -strval = STR_JUST_COMMA -cat = SC_EXPERT -post_cb = TownZoneCustomValueChanged -patxname = ""town_zone.economy.city_zone_2_mult"" - -[SDT_VAR] -var = economy.city_zone_3_mult -type = SLE_UINT16 -flags = SF_PATCH -def = 5 -min = 0 -max = 255 -interval = 1 -str = STR_CONFIG_SETTING_CITY_ZONE_3_MULT -strhelp = STR_CONFIG_SETTING_CITY_ZONE_3_MULT_HELPTEXT -strval = STR_JUST_COMMA -cat = SC_EXPERT -post_cb = TownZoneCustomValueChanged -patxname = ""town_zone.economy.city_zone_3_mult"" - -[SDT_VAR] -var = economy.city_zone_4_mult -type = SLE_UINT16 -flags = SF_PATCH -def = 3 -min = 0 -max = 255 -interval = 1 -str = STR_CONFIG_SETTING_CITY_ZONE_4_MULT -strhelp = STR_CONFIG_SETTING_CITY_ZONE_4_MULT_HELPTEXT -strval = STR_JUST_COMMA -cat = SC_EXPERT -post_cb = TownZoneCustomValueChanged -patxname = ""town_zone.economy.city_zone_4_mult"" - -[SDT_VAR] -var = economy.town_growth_cargo_transported -type = SLE_UINT8 -flags = SF_PATCH -def = 0 -min = 0 -max = 100 -interval = 10 -str = STR_CONFIG_SETTING_TOWN_GROWTH_CARGO_TRANSPORTED -strhelp = STR_CONFIG_SETTING_TOWN_GROWTH_CARGO_TRANSPORTED_HELPTEXT -strval = STR_CONFIG_SETTING_PERCENTAGE -cat = SC_EXPERT -patxname = ""town_growth.economy.town_growth_cargo_transported"" - -[SDT_VAR] -var = economy.larger_towns -type = SLE_UINT8 -from = SLV_54 -flags = SF_GUI_0_IS_SPECIAL -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 - -[SDT_VAR] -var = economy.town_min_distance -type = SLE_UINT16 -flags = SF_PATCH -def = 20 -min = 15 -max = 500 -interval = 5 -str = STR_CONFIG_SETTING_TOWN_MIN_DISTANCE -strhelp = STR_CONFIG_SETTING_TOWN_MIN_DISTANCE_HELPTEXT -strval = STR_JUST_INT -patxname = ""town_min_distance.economy.town_min_distance"" - -[SDT_VAR] -var = construction.maximum_signal_evaluations -type = SLE_UINT16 -flags = SF_PATCH -def = 256 -min = 64 -max = 4096 -interval = 1 -str = STR_CONFIG_SETTING_MAX_SIGNAL_EVALUATIONS -strhelp = STR_CONFIG_SETTING_MAX_SIGNAL_EVALUATIONS_HELPTEXT -strval = STR_JUST_COMMA -cat = SC_EXPERT -extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_PROG_SIGS) -patxname = ""programmable_signals.construction.maximum_signal_evaluations"" - -[SDT_BOOL] -var = economy.infrastructure_sharing[0] -flags = SF_PATCH -def = false -str = STR_CONFIG_SETTING_SHARING_RAIL -pre_cb = CheckSharingRail -post_cb = SharingRailChanged -extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_INFRA_SHARING) -patxname = ""infra_sharing.economy.infrastructure_sharing.rail"" - -[SDT_BOOL] -var = economy.infrastructure_sharing[1] -flags = SF_PATCH -def = false -str = STR_CONFIG_SETTING_SHARING_ROAD -pre_cb = CheckSharingRoad -extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_INFRA_SHARING) -patxname = ""infra_sharing.economy.infrastructure_sharing.road"" - -[SDT_BOOL] -var = economy.infrastructure_sharing[2] -flags = SF_PATCH -def = false -str = STR_CONFIG_SETTING_SHARING_WATER -pre_cb = CheckSharingWater -extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_INFRA_SHARING) -patxname = ""infra_sharing.economy.infrastructure_sharing.water"" - -[SDT_BOOL] -var = economy.infrastructure_sharing[3] -flags = SF_PATCH -def = false -str = STR_CONFIG_SETTING_SHARING_AIR -pre_cb = CheckSharingAir -extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_INFRA_SHARING) -patxname = ""infra_sharing.economy.infrastructure_sharing.air"" - -[SDT_VAR] -var = economy.sharing_fee[0] -type = SLE_UINT -flags = SF_GUI_CURRENCY | SF_PATCH -def = 100 -min = 0 -max = 1000000 -interval = 10 -str = STR_CONFIG_SETTING_SHARING_FEE_RAIL -strhelp = STR_CONFIG_SETTING_SHARING_FEE_HELPTEXT -strval = STR_JUST_CURRENCY_LONG -extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_INFRA_SHARING) -patxname = ""infra_sharing.economy.sharing_fee.rail"" - -[SDT_VAR] -var = economy.sharing_fee[1] -type = SLE_UINT -flags = SF_GUI_CURRENCY | SF_PATCH -def = 100 -min = 0 -max = 1000000 -interval = 10 -str = STR_CONFIG_SETTING_SHARING_FEE_ROAD -strhelp = STR_CONFIG_SETTING_SHARING_FEE_HELPTEXT -strval = STR_JUST_CURRENCY_LONG -extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_INFRA_SHARING) -patxname = ""infra_sharing.economy.sharing_fee.road"" - -[SDT_VAR] -var = economy.sharing_fee[2] -type = SLE_UINT -flags = SF_GUI_CURRENCY | SF_PATCH -def = 100 -min = 0 -max = 1000000 -interval = 10 -str = STR_CONFIG_SETTING_SHARING_FEE_WATER -strhelp = STR_CONFIG_SETTING_SHARING_FEE_HELPTEXT -strval = STR_JUST_CURRENCY_LONG -extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_INFRA_SHARING) -patxname = ""infra_sharing.economy.sharing_fee.water"" - -[SDT_VAR] -var = economy.sharing_fee[3] -type = SLE_UINT -flags = SF_GUI_CURRENCY | SF_PATCH -def = 100 -min = 0 -max = 1000000 -interval = 10 -str = STR_CONFIG_SETTING_SHARING_FEE_AIR -strhelp = STR_CONFIG_SETTING_SHARING_FEE_HELPTEXT -strval = STR_JUST_CURRENCY_LONG -extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_INFRA_SHARING) -patxname = ""infra_sharing.economy.sharing_fee.air"" - -[SDT_BOOL] -var = economy.sharing_payment_in_debt -flags = SF_PATCH -def = false -str = STR_CONFIG_SETTING_SHARING_PAYMENT_IN_DEBT -extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_INFRA_SHARING) -patxname = ""infra_sharing.economy.sharing_payment_in_debt"" - -[SDT_OMANY] -var = script.settings_profile -type = SLE_UINT8 -from = SLV_178 -flags = SF_GUI_DROPDOWN -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 -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 -post_cb = ScriptMaxOpsChange -cat = SC_EXPERT - -[SDT_VAR] -var = script.script_max_memory_megabytes -type = SLE_UINT32 -from = SLV_SCRIPT_MEMLIMIT -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 -pre_cb = CheckScriptMaxMemoryChange -post_cb = ScriptMaxMemoryChange -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 = economy.random_road_reconstruction -type = SLE_UINT16 -flags = SF_PATCH -def = 0 -min = 0 -max = 1000 -str = STR_CONFIG_SETTING_RANDOM_ROAD_RECONSTRUCTION -strhelp = STR_CONFIG_SETTING_RANDOM_ROAD_RECONSTRUCTION_HELPTEXT -strval = STR_JUST_COMMA -cat = SC_BASIC -patxname = ""economy.random_road_reconstruction"" - -[SDT_BOOL] -var = economy.disable_inflation_newgrf_flag -flags = SF_PATCH -def = false -cat = SC_EXPERT -patxname = ""economy.disable_inflation_newgrf_flag"" - -[SDT_VAR] -var = economy.payment_algorithm -type = SLE_UINT8 -flags = SF_GUI_DROPDOWN | SF_PATCH -def = CPA_MODERN -min = CPA_BEGIN -max = CPA_END - 1 -interval = 1 -str = STR_CONFIG_SETTING_CARGO_PAYMENT_ALGORITHM -strhelp = STR_CONFIG_SETTING_CARGO_PAYMENT_ALGORITHM_HELPTEXT -strval = STR_CONFIG_SETTING_CARGO_PAYMENT_ALGORITHM_TRADITIONAL -cat = SC_BASIC -patxname = ""economy.payment_algorithm"" - -[SDT_VAR] -var = economy.tick_rate -type = SLE_UINT8 -flags = SF_GUI_DROPDOWN | SF_PATCH -def = TRM_TRADITIONAL -min = TRM_BEGIN -max = TRM_END - 1 -interval = 1 -str = STR_CONFIG_SETTING_TICK_RATE -strhelp = STR_CONFIG_SETTING_TICK_RATE_HELPTEXT -strval = STR_CONFIG_SETTING_TICK_RATE_TRADITIONAL -cat = SC_EXPERT -post_cb = [](auto) { SetupTickRate(); } -patxname = ""economy.tick_rate"" - -## -[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 - -[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 = true -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 -post_cb = CheckYapfRailSignalPenalties - -[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 -post_cb = CheckYapfRailSignalPenalties - -[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 -post_cb = CheckYapfRailSignalPenalties - -[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 -post_cb = CheckYapfRailSignalPenalties - -[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 = order.old_occupancy_smoothness -type = SLE_UINT8 -flags = SF_PATCH -def = 75 -min = 0 -max = 100 -interval = 10 -str = STR_CONFIG_OCCUPANCY_SMOOTHNESS -strhelp = STR_CONFIG_OCCUPANCY_SMOOTHNESS_HELPTEXT -strval = STR_CONFIG_SETTING_PERCENTAGE -cat = SC_EXPERT -extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_ORDER_OCCUPANCY, 1, 1) -patxname = ""order_occupancy.order.occupancy_smoothness"" - -## -[SDT_VAR] -var = game_creation.land_generator -type = SLE_UINT8 -from = SLV_30 -flags = SF_GUI_DROPDOWN | SF_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 -flags = SF_GUI_DROPDOWN | SF_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 -flags = SF_GUI_DROPDOWN | SF_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.generation_unique_id -flags = SF_PATCH -type = SLE_UINT32 -def = 0 -min = 0 -max = UINT32_MAX -patxname = ""savegame_unique_id.game_creation.generation_unique_id"" - -[SDT_VAR] -var = game_creation.tree_placer -type = SLE_UINT8 -from = SLV_30 -flags = SF_GUI_DROPDOWN -def = 3 -min = 0 -max = 3 -str = STR_CONFIG_SETTING_TREE_PLACER -strhelp = STR_CONFIG_SETTING_TREE_PLACER_HELPTEXT -strval = STR_CONFIG_SETTING_TREE_PLACER_NONE -cat = SC_BASIC -guiproc = TreePlacerSettingGUI - -[SDT_VAR] -var = game_creation.heightmap_rotation -type = SLE_UINT8 -flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_GUI_DROPDOWN -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 = SF_NOT_IN_SAVE | SF_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 = SF_NOT_IN_SAVE | SF_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 = SF_NOT_IN_SAVE | SF_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_BOOL] -var = construction.flood_from_edges -flags = SF_PATCH -def = true -str = STR_CONFIG_SETTING_FLOOD_FROM_EDGES -strhelp = STR_CONFIG_SETTING_FLOOD_FROM_EDGES_HELPTEXT -cat = SC_ADVANCED -patxname = ""construction.flood_from_edges"" - -[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 = game_creation.custom_industry_number -type = SLE_UINT16 -def = 1 -min = 1 -max = 64000 -cat = SC_BASIC -patxname = ""game_creation.custom_industry_number"" - -[SDT_VAR] -var = construction.extra_tree_placement -type = SLE_UINT8 -from = SLV_132 -flags = SF_GUI_DROPDOWN -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_BOOL] -var = construction.trees_around_snow_line_enabled -flags = SF_PATCH -def = true -str = STR_CONFIG_SETTING_TREES_AROUND_SNOWLINE -strhelp = STR_CONFIG_SETTING_TREES_AROUND_SNOWLINE_HELPTEXT -cat = SC_BASIC -patxname = ""everest_treeline.construction.trees_around_snow_line_enabled"" - -[SDT_VAR] -var = construction.trees_around_snow_line_range -type = SLE_UINT8 -flags = SF_PATCH -def = 8 -min = 1 -max = 64 -str = STR_CONFIG_SETTING_TREES_AROUND_SNOWLINE_RANGE -strhelp = STR_CONFIG_SETTING_TREES_AROUND_SNOWLINE_RANGE_HELPTEXT -strval = STR_JUST_COMMA -cat = SC_BASIC -patxname = ""everest_treeline.construction.trees_around_snow_line_range"" - -[SDT_VAR] -var = construction.trees_around_snow_line_dynamic_range -type = SLE_UINT8 -flags = SF_PATCH -def = 75 -min = 0 -max = 100 -interval = 5 -str = STR_CONFIG_SETTING_TREES_AROUND_SNOWLINE_DYNAMIC_RANGE -strhelp = STR_CONFIG_SETTING_TREES_AROUND_SNOWLINE_DYNAMIC_RANGE_HELPTEXT -strval = STR_CONFIG_SETTING_PERCENTAGE -cat = SC_EXPERT -patxname = ""everest_treeline.construction.trees_around_snow_line_dynamic_range"" -post_cb = [](auto) { UpdateCachedSnowLineBounds(); } - -[SDT_VAR] -var = construction.tree_growth_rate -type = SLE_UINT8 -flags = SF_GUI_DROPDOWN | SF_PATCH -def = 0 -min = 0 -max = 4 -str = STR_CONFIG_SETTING_TREE_GROWTH -strhelp = STR_CONFIG_SETTING_TREE_GROWTH_HELPTEXT -strval = STR_CONFIG_SETTING_TREE_GROWTH_NORMAL -cat = SC_BASIC -patxname = ""reduced_tree_growth.construction.tree_growth_rate"" - -[SDT_VAR] -var = game_creation.custom_terrain_type -type = SLE_UINT8 -from = SLV_MAPGEN_SETTINGS_REVAMP -flags = SF_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 -flags = SF_NEWGAME_ONLY | SF_SCENEDIT_TOO -from = SLV_163 -def = 16 -min = 2 -max = 255 -cat = SC_EXPERT -str = STR_CONFIG_SETTING_RIVER_MIN_LENGTH -strhelp = STR_CONFIG_SETTING_RIVER_MIN_LENGTH_HELPTEXT -strval = STR_JUST_COMMA - -[SDT_VAR] -var = game_creation.river_route_random -type = SLE_UINT8 -flags = SF_NEWGAME_ONLY | SF_SCENEDIT_TOO -from = SLV_163 -def = 5 -min = 1 -max = 255 -cat = SC_EXPERT -str = STR_CONFIG_SETTING_RIVER_ROUTE_RANDOM -strhelp = STR_CONFIG_SETTING_RIVER_ROUTE_RANDOM_HELPTEXT -strval = STR_JUST_COMMA - -[SDT_BOOL] -var = game_creation.rivers_top_of_hill -flags = SF_NEWGAME_ONLY | SF_SCENEDIT_TOO | SF_PATCH -def = true -cat = SC_EXPERT -str = STR_CONFIG_SETTING_RIVERS_TOP_OF_HILL -strhelp = STR_CONFIG_SETTING_RIVERS_TOP_OF_HILL_HELPTEXT -patxname = ""rivers.game_creation.rivers_top_of_hill"" - -[SDT_VAR] -var = game_creation.river_tropics_width -type = SLE_UINT8 -flags = SF_NEWGAME_ONLY | SF_SCENEDIT_TOO | SF_PATCH -def = 5 -min = 2 -max = 51 -interval = 1 -str = STR_CONFIG_SETTING_RIVER_TROPICS_WIDTH -strhelp = STR_CONFIG_SETTING_RIVER_TROPICS_WIDTH_HELPTEXT -strval = STR_JUST_COMMA -cat = SC_BASIC -patxname = ""rivers.game_creation.river_tropics_width"" - -[SDT_VAR] -var = game_creation.lake_tropics_width -type = SLE_UINT8 -flags = SF_NEWGAME_ONLY | SF_SCENEDIT_TOO | SF_PATCH -def = 5 -min = 2 -max = 51 -interval = 1 -str = STR_CONFIG_SETTING_LAKE_TROPICS_WIDTH -strhelp = STR_CONFIG_SETTING_LAKE_TROPICS_WIDTH_HELPTEXT -strval = STR_JUST_COMMA -cat = SC_BASIC -patxname = ""rivers.game_creation.lake_tropics_width"" - -[SDT_VAR] -var = game_creation.coast_tropics_width -type = SLE_UINT8 -flags = SF_GUI_DROPDOWN | SF_NEWGAME_ONLY | SF_PATCH -def = 0 -min = 0 -max = 3 -interval = 1 -str = STR_CONFIG_SETTING_COAST_TROPICS_WIDTH -strhelp = STR_CONFIG_SETTING_COAST_TROPICS_WIDTH_HELPTEXT -strval = STR_CONFIG_SETTING_COAST_TROPICS_WIDTH_DEFAULT -cat = SC_BASIC -patxname = ""rivers.game_creation.coast_tropics_width"" - -[SDT_VAR] -var = game_creation.lake_size -type = SLE_UINT8 -flags = SF_NEWGAME_ONLY | SF_SCENEDIT_TOO | SF_GUI_0_IS_SPECIAL | SF_PATCH -def = 8 -min = 0 -max = 100 -cat = SC_EXPERT -str = STR_CONFIG_SETTING_LAKE_SIZE -strhelp = STR_CONFIG_SETTING_LAKE_SIZE_HELPTEXT -strval = STR_CONFIG_SETTING_LAKE_SIZE_VALUE -patxname = ""rivers.game_creation.lake_size"" - -[SDT_BOOL] -var = game_creation.lakes_allowed_in_deserts -flags = SF_NEWGAME_ONLY | SF_SCENEDIT_TOO | SF_PATCH -def = false -cat = SC_EXPERT -str = STR_CONFIG_SETTING_LAKES_ALLOWED_IN_DESERTS -strhelp = STR_CONFIG_SETTING_LAKES_ALLOWED_IN_DESERTS_HELPTEXT -patxname = ""rivers.game_creation.lakes_allowed_in_deserts"" - -[SDT_VAR] -var = game_creation.amount_of_rivers -type = SLE_UINT8 -from = SLV_163 -flags = SF_GUI_DROPDOWN | SF_NEWGAME_ONLY -def = 2 -min = 0 -max = 5 -str = STR_CONFIG_SETTING_RIVER_AMOUNT -strhelp = STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT -strval = STR_RIVERS_NONE - -[SDT_VAR] -var = game_creation.amount_of_rocks -type = SLE_UINT8 -flags = SF_NEWGAME_ONLY | SF_SCENEDIT_TOO | SF_PATCH -def = 5 -min = 1 -max = 255 -interval = 1 -str = STR_CONFIG_SETTING_ROCKS_AMOUNT -strhelp = STR_CONFIG_SETTING_ROCKS_AMOUNT_HELPTEXT -strval = STR_JUST_COMMA -patxname = ""rocks.game_creation.amount_of_rocks"" - -[SDT_VAR] -var = game_creation.height_affects_rocks -type = SLE_UINT8 -flags = SF_NEWGAME_ONLY | SF_SCENEDIT_TOO | SF_PATCH -def = 0 -min = 0 -max = 25 -interval = 1 -str = STR_CONFIG_SETTING_HEIGHT_ROCKS -strhelp = STR_CONFIG_SETTING_HEIGHT_ROCKS_HELPTEXT -strval = STR_JUST_COMMA -patxname = ""rocks.game_creation.height_affects_rocks"" - -[SDT_VAR] -var = game_creation.build_public_roads -type = SLE_UINT8 -flags = SF_GUI_DROPDOWN | SF_NEWGAME_ONLY | SF_SCENEDIT_TOO | SF_PATCH -def = 0 -min = 0 -max = 2 -str = STR_CONFIG_SETTING_BUILD_PUBLIC_ROADS -strhelp = STR_CONFIG_SETTING_BUILD_PUBLIC_ROADS_HELPTEXT -strval = STR_CONFIG_SETTING_BUILD_PUBLIC_ROADS_NONE -post_cb = PublicRoadsSettingChange -patxname = ""public_roads.game_creation.build_public_roads"" - -; locale - -[SDT_OMANY] -var = locale.currency -type = SLE_UINT8 -from = SLV_97 -flags = SF_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 = SF_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 = SF_NO_NETWORK_SYNC | SF_GUI_DROPDOWN -def = 1 -max = 4 -full = _locale_units -post_cb = VelocityUnitsChanged -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_velocity_nautical -type = SLE_UINT8 -from = SLV_VELOCITY_NAUTICAL -flags = SF_NO_NETWORK_SYNC | SF_GUI_DROPDOWN -def = 1 -max = 4 -full = _locale_units -post_cb = VelocityUnitsChanged -cat = SC_BASIC -str = STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_NAUTICAL -strhelp = STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT -strval = STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL -extver = SlXvFeatureTest(XSLFTO_OR, XSLFI_VELOCITY_NAUTICAL) -patxname = ""locale.units_velocity_nautical"" - -[SDT_OMANY] -var = locale.units_power -type = SLE_UINT8 -from = SLV_184 -flags = SF_NO_NETWORK_SYNC | SF_GUI_DROPDOWN -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 = SF_NO_NETWORK_SYNC | SF_GUI_DROPDOWN -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 = SF_NO_NETWORK_SYNC | SF_GUI_DROPDOWN -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 = SF_NO_NETWORK_SYNC | SF_GUI_DROPDOWN -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 = SF_NO_NETWORK_SYNC | SF_GUI_DROPDOWN -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 = SF_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 = SF_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 = SF_NO_NETWORK_SYNC -def = nullptr -post_cb = [](auto) { MarkWholeScreenDirty(); } -cat = SC_BASIC - -[SDTC_BOOL] -var = client_locale.sync_locale_network_server -flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC -def = false -str = STR_CONFIG_SETTING_SYNC_LOCALE_SETTINGS_NETWORK_SERVER -strhelp = STR_CONFIG_SETTING_SYNC_LOCALE_SETTINGS_NETWORK_SERVER_HELPTEXT -cat = SC_BASIC - -[SDT_BOOL] -var = vehicle.adjacent_crossings -flags = SF_PATCH -def = true -str = STR_CONFIG_SETTING_ADJACENT_CROSSINGS -strhelp = STR_CONFIG_SETTING_ADJACENT_CROSSINGS_HELPTEXT -cat = SC_BASIC -patxname = ""adjacent_crossings.vehicle.adjacent_crossings"" - -[SDT_BOOL] -var = vehicle.safer_crossings -flags = SF_PATCH -def = false -str = STR_CONFIG_SETTING_SAFER_CROSSINGS -strhelp = STR_CONFIG_SETTING_SAFER_CROSSINGS_HELPTEXT -cat = SC_BASIC -patxname = ""safer_crossings.vehicle.safer_crossings"" - -[SDT_BOOL] -var = game_time.time_in_minutes -flags = SF_PATCH -def = false -str = STR_CONFIG_SETTING_TIME_IN_MINUTES -strhelp = STR_CONFIG_SETTING_TIME_IN_MINUTES_HELPTEXT -post_cb = UpdateTimeSettings -patxname = ""game_time.time_in_minutes"" - -[SDT_VAR] -var = game_time.ticks_per_minute -type = SLE_UINT16 -flags = SF_PATCH -strval = STR_JUST_INT -def = 74 -min = 1 -max = 8192 -interval = 10 -str = STR_CONFIG_SETTING_TICKS_PER_MINUTE -strhelp = STR_CONFIG_SETTING_TICKS_PER_MINUTE_HELPTEXT -post_cb = UpdateTimeSettings -patxname = ""game_time.ticks_per_minute"" - -[SDT_VAR] -var = game_time.clock_offset -type = SLE_UINT16 -flags = SF_PATCH -strval = STR_JUST_INT -def = 0 -min = 0 -max = 1439 -interval = 60 -str = STR_CONFIG_SETTING_CLOCK_OFFSET -strhelp = STR_CONFIG_SETTING_CLOCK_OFFSET_HELPTEXT -post_cb = UpdateTimeSettings -patxname = ""game_time.clock_offset"" - -[SDT_BOOL] -var = vehicle.pay_for_repair -def = true -flags = SF_PATCH -str = STR_CONFIG_SETTING_PAY_FOR_REPAIR_VEHICLE -strhelp = STR_CONFIG_SETTING_PAY_FOR_REPAIR_VEHICLE_HELPTEXT -cat = SC_EXPERT -extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_VEHICLE_REPAIR_COST) -patxname = ""vehicle_repair_cost.vehicle.pay_for_repair"" - -[SDT_VAR] -var = vehicle.repair_cost -type = SLE_UINT8 -flags = SF_PATCH -def = 100 -min = 1 -max = 255 -interval = 1 -str = STR_CONFIG_SETTING_REPAIR_COST -strhelp = STR_CONFIG_SETTING_REPAIR_COST_HELPTEXT -strval = STR_JUST_INT -cat = SC_EXPERT -extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_VEHICLE_REPAIR_COST) -patxname = ""vehicle_repair_cost.vehicle.repair_cost"" - -[SDT_VAR] -var = debug.chicken_bits -type = SLE_UINT32 -flags = SF_NOT_IN_CONFIG | SF_NO_NEWGAME | SF_PATCH -def = 0 -min = 0 -max = 0xFFFFFFFF -cat = SC_EXPERT -patxname = ""debug.chicken_bits"" - -[SDT_VAR] -var = debug.newgrf_optimiser_flags -type = SLE_UINT32 -flags = SF_NOT_IN_CONFIG | SF_NO_NEWGAME | SF_NO_NETWORK | SF_PATCH -def = 0 -min = 0 -max = 0xFFFFFFFF -cat = SC_EXPERT -patxname = ""debug.newgrf_optimiser_flags"" diff --git a/src/table/settings/world_settings.ini b/src/table/settings/world_settings.ini new file mode 100644 index 0000000000..e55900dd3e --- /dev/null +++ b/src/table/settings/world_settings.ini @@ -0,0 +1,1043 @@ +; 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 . +; + +; World settings as stored in the main configuration file ("openttd.cfg") +; and in the savegame PATS chunk. +; World settings are everything related to how the world came to be, so +; basically construction and game_creation settings. + +[pre-amble] +static bool CheckMaxHeightLevel(int32_t &new_value); +static bool CheckFreeformEdges(int32_t &new_value); +static void UpdateFreeformEdges(int32_t new_value); +static void ClimateThresholdModeChanged(int32 new_value); +static void PublicRoadsSettingChange(int32 new_value); + +static bool AllowRoadStopsUnderBridgesSettingGUI(SettingOnGuiCtrlData &data); +static bool TreePlacerSettingGUI(SettingOnGuiCtrlData &data); + +const SettingTable _world_settings = { +[post-amble] +}; +[templates] +SDT_BOOL = SDT_BOOL(GameSettings, $var, $flags, $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $extver, $cat, $guiproc, $startup, $patxname), +SDT_OMANY = SDT_OMANY(GameSettings, $var, $type, $flags, $def, $max, $full, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $extver, $load, $cat, $guiproc, $startup, $patxname), +SDT_VAR = SDT_VAR(GameSettings, $var, $type, $flags, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $extver, $cat, $guiproc, $startup, $patxname), + +[validation] +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 = SF_NONE +interval = 0 +str = STR_NULL +strhelp = STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT +strval = STR_NULL +pre_cb = nullptr +post_cb = nullptr +guiproc = nullptr +load = nullptr +from = SL_MIN_VERSION +to = SL_MAX_VERSION +cat = SC_ADVANCED +startup = false +extver = SlXvFeatureTest() +patxname = nullptr +enumlist = + + +; 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 +flags = SF_NO_NETWORK +def = 0 +max = 255 +full = _town_names +cat = SC_BASIC + +[SDT_OMANY] +var = game_creation.landscape +type = SLE_UINT8 +from = SLV_97 +flags = SF_GUI_DROPDOWN | SF_NEWGAME_ONLY +def = 0 +max = 3 +full = _climates +load = ConvertLandscape +str = STR_CONFIG_SETTING_LANDSCAPE +strhelp = STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT +strval = STR_CLIMATE_TEMPERATE_LANDSCAPE +cat = SC_BASIC + +[SDT_VAR] +var = game_creation.heightmap_height +type = SLE_UINT8 +from = SLV_MAPGEN_SETTINGS_REVAMP +flags = SF_NEWGAME_ONLY +def = MAP_HEIGHT_LIMIT_AUTO_MINIMUM +min = MIN_HEIGHTMAP_HEIGHT +max = MAX_MAP_HEIGHT_LIMIT +interval = 1 + +[SDT_VAR] +var = game_creation.snow_line_height +type = SLE_UINT8 +flags = SF_NO_NETWORK +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 +flags = SF_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.rainforest_line_height +type = SLE_UINT8 +flags = SF_NEWGAME_ONLY | SF_SCENEDIT_TOO | SF_PATCH +def = DEF_RAINFOREST_HEIGHT +min = MIN_RAINFOREST_HEIGHT +max = MAX_RAINFOREST_HEIGHT +interval = 1 +str = STR_CONFIG_SETTING_RAINFORESTLINE_HEIGHT +strhelp = STR_CONFIG_SETTING_RAINFORESTLINE_HEIGHT_HELPTEXT +strval = STR_JUST_COMMA +cat = SC_BASIC +patxname = ""rainforest_line_height.game_creation.rainforest_line_height"" + +[SDT_VAR] +var = game_creation.climate_threshold_mode +type = SLE_UINT8 +flags = SF_GUI_DROPDOWN | SF_NEWGAME_ONLY | SF_PATCH +def = 0 +min = 0 +max = 1 +str = STR_CONFIG_SETTING_CLIMATE_THRESHOLD_MODE +strhelp = STR_CONFIG_SETTING_CLIMATE_THRESHOLD_MODE_HELPTEXT +strval = STR_CONFIG_SETTING_CLIMATE_THRESHOLD_COVERAGE +post_cb = ClimateThresholdModeChanged +patxname = ""climate.game_creation.climate_threshold_mode"" + +[SDT_VAR] +var = game_creation.desert_coverage +type = SLE_UINT8 +from = SLV_MAPGEN_SETTINGS_REVAMP +flags = SF_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_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_VAR] +var = game_creation.ending_year +type = SLE_INT32 +from = SLV_ENDING_YEAR +flags = SF_GUI_0_IS_SPECIAL +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 = game_creation.land_generator +type = SLE_UINT8 +from = SLV_30 +flags = SF_GUI_DROPDOWN | SF_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 +flags = SF_GUI_DROPDOWN | SF_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 +flags = SF_GUI_DROPDOWN | SF_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.generation_unique_id +flags = SF_PATCH +type = SLE_UINT32 +def = 0 +min = 0 +max = UINT32_MAX +patxname = ""savegame_unique_id.game_creation.generation_unique_id"" + +[SDT_VAR] +var = game_creation.tree_placer +type = SLE_UINT8 +from = SLV_30 +flags = SF_GUI_DROPDOWN +def = 3 +min = 0 +max = 3 +str = STR_CONFIG_SETTING_TREE_PLACER +strhelp = STR_CONFIG_SETTING_TREE_PLACER_HELPTEXT +strval = STR_CONFIG_SETTING_TREE_PLACER_NONE +cat = SC_BASIC +guiproc = TreePlacerSettingGUI + +[SDT_VAR] +var = game_creation.heightmap_rotation +type = SLE_UINT8 +flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_GUI_DROPDOWN +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 = SF_NOT_IN_SAVE | SF_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 = SF_NOT_IN_SAVE | SF_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 = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC +def = 8 +min = MIN_MAP_SIZE_BITS +max = MAX_MAP_SIZE_BITS +cat = SC_BASIC + +[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 = game_creation.custom_industry_number +type = SLE_UINT16 +def = 1 +min = 1 +max = 64000 +cat = SC_BASIC +patxname = ""game_creation.custom_industry_number"" + +[SDT_VAR] +var = game_creation.custom_terrain_type +type = SLE_UINT8 +from = SLV_MAPGEN_SETTINGS_REVAMP +flags = SF_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 +flags = SF_NEWGAME_ONLY | SF_SCENEDIT_TOO +from = SLV_163 +def = 16 +min = 2 +max = 255 +cat = SC_EXPERT +str = STR_CONFIG_SETTING_RIVER_MIN_LENGTH +strhelp = STR_CONFIG_SETTING_RIVER_MIN_LENGTH_HELPTEXT +strval = STR_JUST_COMMA + +[SDT_VAR] +var = game_creation.river_route_random +type = SLE_UINT8 +flags = SF_NEWGAME_ONLY | SF_SCENEDIT_TOO +from = SLV_163 +def = 5 +min = 1 +max = 255 +cat = SC_EXPERT +str = STR_CONFIG_SETTING_RIVER_ROUTE_RANDOM +strhelp = STR_CONFIG_SETTING_RIVER_ROUTE_RANDOM_HELPTEXT +strval = STR_JUST_COMMA + +[SDT_BOOL] +var = game_creation.rivers_top_of_hill +flags = SF_NEWGAME_ONLY | SF_SCENEDIT_TOO | SF_PATCH +def = true +cat = SC_EXPERT +str = STR_CONFIG_SETTING_RIVERS_TOP_OF_HILL +strhelp = STR_CONFIG_SETTING_RIVERS_TOP_OF_HILL_HELPTEXT +patxname = ""rivers.game_creation.rivers_top_of_hill"" + +[SDT_VAR] +var = game_creation.river_tropics_width +type = SLE_UINT8 +flags = SF_NEWGAME_ONLY | SF_SCENEDIT_TOO | SF_PATCH +def = 5 +min = 2 +max = 51 +interval = 1 +str = STR_CONFIG_SETTING_RIVER_TROPICS_WIDTH +strhelp = STR_CONFIG_SETTING_RIVER_TROPICS_WIDTH_HELPTEXT +strval = STR_JUST_COMMA +cat = SC_BASIC +patxname = ""rivers.game_creation.river_tropics_width"" + +[SDT_VAR] +var = game_creation.lake_tropics_width +type = SLE_UINT8 +flags = SF_NEWGAME_ONLY | SF_SCENEDIT_TOO | SF_PATCH +def = 5 +min = 2 +max = 51 +interval = 1 +str = STR_CONFIG_SETTING_LAKE_TROPICS_WIDTH +strhelp = STR_CONFIG_SETTING_LAKE_TROPICS_WIDTH_HELPTEXT +strval = STR_JUST_COMMA +cat = SC_BASIC +patxname = ""rivers.game_creation.lake_tropics_width"" + +[SDT_VAR] +var = game_creation.coast_tropics_width +type = SLE_UINT8 +flags = SF_GUI_DROPDOWN | SF_NEWGAME_ONLY | SF_PATCH +def = 0 +min = 0 +max = 3 +interval = 1 +str = STR_CONFIG_SETTING_COAST_TROPICS_WIDTH +strhelp = STR_CONFIG_SETTING_COAST_TROPICS_WIDTH_HELPTEXT +strval = STR_CONFIG_SETTING_COAST_TROPICS_WIDTH_DEFAULT +cat = SC_BASIC +patxname = ""rivers.game_creation.coast_tropics_width"" + +[SDT_VAR] +var = game_creation.lake_size +type = SLE_UINT8 +flags = SF_NEWGAME_ONLY | SF_SCENEDIT_TOO | SF_GUI_0_IS_SPECIAL | SF_PATCH +def = 8 +min = 0 +max = 100 +cat = SC_EXPERT +str = STR_CONFIG_SETTING_LAKE_SIZE +strhelp = STR_CONFIG_SETTING_LAKE_SIZE_HELPTEXT +strval = STR_CONFIG_SETTING_LAKE_SIZE_VALUE +patxname = ""rivers.game_creation.lake_size"" + +[SDT_BOOL] +var = game_creation.lakes_allowed_in_deserts +flags = SF_NEWGAME_ONLY | SF_SCENEDIT_TOO | SF_PATCH +def = false +cat = SC_EXPERT +str = STR_CONFIG_SETTING_LAKES_ALLOWED_IN_DESERTS +strhelp = STR_CONFIG_SETTING_LAKES_ALLOWED_IN_DESERTS_HELPTEXT +patxname = ""rivers.game_creation.lakes_allowed_in_deserts"" + +[SDT_VAR] +var = game_creation.amount_of_rivers +type = SLE_UINT8 +from = SLV_163 +flags = SF_GUI_DROPDOWN | SF_NEWGAME_ONLY +def = 2 +min = 0 +max = 5 +str = STR_CONFIG_SETTING_RIVER_AMOUNT +strhelp = STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT +strval = STR_RIVERS_NONE + +[SDT_VAR] +var = game_creation.amount_of_rocks +type = SLE_UINT8 +flags = SF_NEWGAME_ONLY | SF_SCENEDIT_TOO | SF_PATCH +def = 5 +min = 1 +max = 255 +interval = 1 +str = STR_CONFIG_SETTING_ROCKS_AMOUNT +strhelp = STR_CONFIG_SETTING_ROCKS_AMOUNT_HELPTEXT +strval = STR_JUST_COMMA +patxname = ""rocks.game_creation.amount_of_rocks"" + +[SDT_VAR] +var = game_creation.height_affects_rocks +type = SLE_UINT8 +flags = SF_NEWGAME_ONLY | SF_SCENEDIT_TOO | SF_PATCH +def = 0 +min = 0 +max = 25 +interval = 1 +str = STR_CONFIG_SETTING_HEIGHT_ROCKS +strhelp = STR_CONFIG_SETTING_HEIGHT_ROCKS_HELPTEXT +strval = STR_JUST_COMMA +patxname = ""rocks.game_creation.height_affects_rocks"" + +[SDT_VAR] +var = game_creation.build_public_roads +type = SLE_UINT8 +flags = SF_GUI_DROPDOWN | SF_NEWGAME_ONLY | SF_SCENEDIT_TOO | SF_PATCH +def = 0 +min = 0 +max = 2 +str = STR_CONFIG_SETTING_BUILD_PUBLIC_ROADS +strhelp = STR_CONFIG_SETTING_BUILD_PUBLIC_ROADS_HELPTEXT +strval = STR_CONFIG_SETTING_BUILD_PUBLIC_ROADS_NONE +post_cb = PublicRoadsSettingChange +patxname = ""public_roads.game_creation.build_public_roads"" + +[SDT_VAR] +var = construction.map_height_limit +type = SLE_UINT8 +from = SLV_194 +flags = SF_NEWGAME_ONLY | SF_SCENEDIT_TOO | SF_GUI_0_IS_SPECIAL +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 +extver = SlXvFeatureTest(XSLFTO_OR, XSLFI_HEIGHT_8_BIT, 1, 1) + +[SDT_BOOL] +var = construction.build_on_slopes +flags = SF_NO_NETWORK +def = true +cat = SC_EXPERT + +[SDT_VAR] +var = construction.command_pause_level +type = SLE_UINT8 +from = SLV_154 +flags = SF_GUI_DROPDOWN +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_BOOL] +var = construction.enable_build_river +flags = SF_PATCH +def = false +cat = SC_BASIC +str = STR_CONFIG_SETTING_ENABLE_BUILD_RIVER +strhelp = STR_CONFIG_SETTING_ENABLE_BUILD_RIVER_HELPTEXT +patxname = ""enable_build_river.construction.enable_build_river"" + +[SDT_BOOL] +var = construction.enable_remove_water +flags = SF_PATCH +def = true +cat = SC_BASIC +str = STR_CONFIG_SETTING_ENABLE_REMOVE_WATER +strhelp = STR_CONFIG_SETTING_ENABLE_REMOVE_WATER_HELPTEXT +patxname = ""enable_build_river.construction.enable_remove_water"" + +[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_VAR] +var = construction.purchase_land_per_64k_frames +type = SLE_UINT32 +flags = SF_PATCH +def = 16 << 16 +min = 0 +max = 1 << 30 +interval = 1 +cat = SC_EXPERT +patxname = ""buy_land_rate_limit.construction.purchase_land_per_64k_frames"" + +[SDT_VAR] +var = construction.purchase_land_frame_burst +type = SLE_UINT16 +flags = SF_PATCH +def = 1024 +min = 0 +max = 1 << 15 +interval = 1 +cat = SC_EXPERT +patxname = ""buy_land_rate_limit.construction.purchase_land_frame_burst"" + +[SDT_VAR] +var = construction.build_object_per_64k_frames +type = SLE_UINT32 +def = 32 << 16 +min = 0 +max = 1 << 30 +interval = 1 +cat = SC_EXPERT +patxname = ""build_object_rate_limit.construction.build_object_per_64k_frames"" + +[SDT_VAR] +var = construction.build_object_frame_burst +type = SLE_UINT16 +def = 2048 +min = 0 +max = 1 << 15 +interval = 1 +cat = SC_EXPERT +patxname = ""build_object_rate_limit.construction.build_object_frame_burst"" + +[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 +def = 64 +min = 1 +max = 4096 +interval = 1 +str = STR_CONFIG_SETTING_MAX_BRIDGE_LENGTH +strhelp = STR_CONFIG_SETTING_MAX_BRIDGE_LENGTH_HELPTEXT +strval = STR_CONFIG_SETTING_TILE_LENGTH +pre_cb = [](int32 &new_value) -> bool { return CheckTTDPatchSettingFlag(0x0F); } + +[SDT_VAR] +var = construction.max_bridge_height +type = SLE_UINT8 +from = SLV_194 +flags = SF_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 +flags = SF_NO_NETWORK +def = 64 +min = 1 +max = 4096 +interval = 1 +str = STR_CONFIG_SETTING_MAX_TUNNEL_LENGTH +strhelp = STR_CONFIG_SETTING_MAX_TUNNEL_LENGTH_HELPTEXT +strval = STR_CONFIG_SETTING_TILE_LENGTH + +[SDT_BOOL] +var = construction.chunnel +flags = SF_PATCH +def = false +str = STR_CONFIG_SETTING_CHUNNEL +strhelp = STR_CONFIG_SETTING_CHUNNEL_HELPTEXT +cat = SC_BASIC +patxname = ""chunnel.construction.chunnel"" + +[SDT_VAR] +var = construction.old_simulated_wormhole_signals +type = SLE_UINT8 +flags = SF_PATCH +def = 2 +min = 1 +max = 16 +str = STR_CONFIG_SETTING_SIMULATE_SIGNALS +strval = STR_CONFIG_SETTING_SIMULATE_SIGNALS_VALUE +cat = SC_BASIC +extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SIG_TUNNEL_BRIDGE, 1, 7) +patxname = ""signal_tunnel_bridge.construction.simulated_wormhole_signals"" + +[SDT_VAR] +var = construction.train_signal_side +type = SLE_UINT8 +flags = SF_GUI_DROPDOWN +def = 1 +min = 0 +max = 2 +str = STR_CONFIG_SETTING_SIGNALSIDE +strhelp = STR_CONFIG_SETTING_SIGNALSIDE_HELPTEXT +strval = STR_CONFIG_SETTING_SIGNALSIDE_LEFT +pre_cb = [](int32 &new_value) -> bool { return CheckTTDPatchSettingFlag(0x3B); } +post_cb = [](auto) { MarkWholeScreenDirty(); } +cat = SC_BASIC + +[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 = construction.road_custom_bridge_heads +flags = SF_PATCH +def = true +cat = SC_BASIC +str = STR_CONFIG_SETTING_ENABLE_ROAD_CUSTOM_BRIDGE_HEADS +strhelp = STR_CONFIG_SETTING_ENABLE_ROAD_CUSTOM_BRIDGE_HEADS_HELPTEXT +patxname = ""custom_bridge_heads.construction.road_custom_bridge_heads"" + +[SDT_BOOL] +var = construction.rail_custom_bridge_heads +flags = SF_PATCH +def = true +cat = SC_BASIC +str = STR_CONFIG_SETTING_ENABLE_RAIL_CUSTOM_BRIDGE_HEADS +strhelp = STR_CONFIG_SETTING_ENABLE_RAIL_CUSTOM_BRIDGE_HEADS_HELPTEXT +patxname = ""custom_bridge_heads.construction.rail_custom_bridge_heads"" + +[SDT_BOOL] +var = construction.allow_grf_objects_under_bridges +flags = SF_PATCH +def = false +cat = SC_ADVANCED +str = STR_CONFIG_SETTING_ALLOW_GRF_OBJECTS_UNDER_BRIDGES +strhelp = STR_CONFIG_SETTING_ALLOW_GRF_OBJECTS_UNDER_BRIDGES_HELPTEXT +patxname = ""allow_grf_objects_under_bridges.construction.allow_grf_objects_under_bridges"" + +[SDT_BOOL] +var = construction.allow_stations_under_bridges +flags = SF_PATCH +def = false +cat = SC_ADVANCED +str = STR_CONFIG_SETTING_ALLOW_GRF_STATIONS_UNDER_BRIDGES +strhelp = STR_CONFIG_SETTING_ALLOW_GRF_STATIONS_UNDER_BRIDGES_HELPTEXT +patxname = ""allow_stations_under_bridges.construction.allow_stations_under_bridges"" + +[SDT_BOOL] +var = construction.allow_road_stops_under_bridges +flags = SF_PATCH +def = true +cat = SC_ADVANCED +str = STR_CONFIG_SETTING_ALLOW_ROAD_STATIONS_UNDER_BRIDGES +strhelp = STR_CONFIG_SETTING_ALLOW_ROAD_STATIONS_UNDER_BRIDGES_HELPTEXT +patxname = ""allow_stations_under_bridges.construction.allow_road_stops_under_bridges"" +guiproc = AllowRoadStopsUnderBridgesSettingGUI + +[SDT_BOOL] +var = construction.allow_docks_under_bridges +flags = SF_PATCH +def = false +cat = SC_ADVANCED +str = STR_CONFIG_SETTING_ALLOW_DOCKS_UNDER_BRIDGES +strhelp = STR_CONFIG_SETTING_ALLOW_DOCKS_UNDER_BRIDGES_HELPTEXT +patxname = ""allow_stations_under_bridges.construction.allow_docks_under_bridges"" + +[SDT_VAR] +var = construction.purchase_land_permitted +type = SLE_UINT8 +flags = SF_GUI_DROPDOWN | SF_PATCH +def = 1 +min = 0 +max = 2 +interval = 1 +str = STR_CONFIG_SETTING_PURCHASE_LAND_PERMITTED +strhelp = STR_CONFIG_SETTING_PURCHASE_LAND_PERMITTED_HELPTEXT +strval = STR_PURCHASE_LAND_PERMITTED_NO +patxname = ""purchase_land_permitted.construction.purchase_land_permitted"" + +[SDT_BOOL] +var = construction.build_object_area_permitted +flags = SF_PATCH +def = true +str = STR_CONFIG_SETTING_BUILD_OBJECT_PERMITTED +strhelp = STR_CONFIG_SETTING_BUILD_OBJECT_PERMITTED_HELPTEXT +patxname = ""build_object_area_permitted.construction.build_object_area_permitted"" + +[SDT_VAR] +var = construction.no_expire_objects_after +type = SLE_INT32 +flags = SF_GUI_0_IS_SPECIAL | SF_PATCH +def = 0 +min = MIN_YEAR +max = MAX_YEAR +interval = 1 +str = STR_CONFIG_SETTING_NO_EXPIRE_OBJECTS_AFTER +strhelp = STR_CONFIG_SETTING_NO_EXPIRE_OBJECTS_AFTER_HELPTEXT +strval = STR_CONFIG_SETTING_NO_EXPIRE_OBJECTS_AFTER_VALUE +cat = SC_ADVANCED +patxname = ""construction.no_expire_objects_after"" +post_cb = [](auto) { InvalidateWindowClassesData(WC_BUILD_OBJECT, 0); } + +[SDT_BOOL] +var = construction.ignore_object_intro_dates +flags = SF_PATCH +def = false +str = STR_CONFIG_SETTING_IGNORE_OBJECT_INTRO_DATES +strhelp = STR_CONFIG_SETTING_IGNORE_OBJECT_INTRO_DATES_HELPTEXT +patxname = ""construction.ignore_object_intro_dates"" +post_cb = [](auto) { InvalidateWindowClassesData(WC_BUILD_OBJECT, 0); } + +[SDT_BOOL] +var = construction.convert_town_road_no_houses +flags = SF_PATCH +def = false +str = STR_CONFIG_SETTING_ALLOW_CONVERT_TOWN_ROAD_NO_HOUSES +strhelp = STR_CONFIG_SETTING_ALLOW_CONVERT_TOWN_ROAD_NO_HOUSES_HELPTEXT +cat = SC_EXPERT +patxname = ""construction.convert_town_road_no_houses"" + +[SDT_VAR] +var = construction.raw_industry_construction +type = SLE_UINT8 +flags = SF_GUI_DROPDOWN +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_VAR] +var = construction.maximum_signal_evaluations +type = SLE_UINT16 +flags = SF_PATCH +def = 256 +min = 64 +max = 4096 +interval = 1 +str = STR_CONFIG_SETTING_MAX_SIGNAL_EVALUATIONS +strhelp = STR_CONFIG_SETTING_MAX_SIGNAL_EVALUATIONS_HELPTEXT +strval = STR_JUST_COMMA +cat = SC_EXPERT +extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_PROG_SIGS) +patxname = ""programmable_signals.construction.maximum_signal_evaluations"" + +[SDT_BOOL] +var = construction.freeform_edges +from = SLV_111 +def = true +pre_cb = CheckFreeformEdges +post_cb = UpdateFreeformEdges +cat = SC_EXPERT + +[SDT_BOOL] +var = construction.flood_from_edges +flags = SF_PATCH +def = true +str = STR_CONFIG_SETTING_FLOOD_FROM_EDGES +strhelp = STR_CONFIG_SETTING_FLOOD_FROM_EDGES_HELPTEXT +cat = SC_ADVANCED +patxname = ""construction.flood_from_edges"" + +[SDT_VAR] +var = construction.extra_tree_placement +type = SLE_UINT8 +from = SLV_132 +flags = SF_GUI_DROPDOWN +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_BOOL] +var = construction.trees_around_snow_line_enabled +flags = SF_PATCH +def = true +str = STR_CONFIG_SETTING_TREES_AROUND_SNOWLINE +strhelp = STR_CONFIG_SETTING_TREES_AROUND_SNOWLINE_HELPTEXT +cat = SC_BASIC +patxname = ""everest_treeline.construction.trees_around_snow_line_enabled"" + +[SDT_VAR] +var = construction.trees_around_snow_line_range +type = SLE_UINT8 +flags = SF_PATCH +def = 8 +min = 1 +max = 64 +str = STR_CONFIG_SETTING_TREES_AROUND_SNOWLINE_RANGE +strhelp = STR_CONFIG_SETTING_TREES_AROUND_SNOWLINE_RANGE_HELPTEXT +strval = STR_JUST_COMMA +cat = SC_BASIC +patxname = ""everest_treeline.construction.trees_around_snow_line_range"" + +[SDT_VAR] +var = construction.trees_around_snow_line_dynamic_range +type = SLE_UINT8 +flags = SF_PATCH +def = 75 +min = 0 +max = 100 +interval = 5 +str = STR_CONFIG_SETTING_TREES_AROUND_SNOWLINE_DYNAMIC_RANGE +strhelp = STR_CONFIG_SETTING_TREES_AROUND_SNOWLINE_DYNAMIC_RANGE_HELPTEXT +strval = STR_CONFIG_SETTING_PERCENTAGE +cat = SC_EXPERT +patxname = ""everest_treeline.construction.trees_around_snow_line_dynamic_range"" +post_cb = [](auto) { UpdateCachedSnowLineBounds(); } + +[SDT_VAR] +var = construction.tree_growth_rate +type = SLE_UINT8 +flags = SF_GUI_DROPDOWN | SF_PATCH +def = 0 +min = 0 +max = 4 +str = STR_CONFIG_SETTING_TREE_GROWTH +strhelp = STR_CONFIG_SETTING_TREE_GROWTH_HELPTEXT +strval = STR_CONFIG_SETTING_TREE_GROWTH_NORMAL +cat = SC_BASIC +patxname = ""reduced_tree_growth.construction.tree_growth_rate"" + +[SDT_BOOL] +var = game_time.time_in_minutes +flags = SF_PATCH +def = false +str = STR_CONFIG_SETTING_TIME_IN_MINUTES +strhelp = STR_CONFIG_SETTING_TIME_IN_MINUTES_HELPTEXT +post_cb = UpdateTimeSettings +patxname = ""game_time.time_in_minutes"" + +[SDT_VAR] +var = game_time.ticks_per_minute +type = SLE_UINT16 +flags = SF_PATCH +strval = STR_JUST_INT +def = 74 +min = 1 +max = 8192 +interval = 10 +str = STR_CONFIG_SETTING_TICKS_PER_MINUTE +strhelp = STR_CONFIG_SETTING_TICKS_PER_MINUTE_HELPTEXT +post_cb = UpdateTimeSettings +patxname = ""game_time.ticks_per_minute"" + +[SDT_VAR] +var = game_time.clock_offset +type = SLE_UINT16 +flags = SF_PATCH +strval = STR_JUST_INT +def = 0 +min = 0 +max = 1439 +interval = 60 +str = STR_CONFIG_SETTING_CLOCK_OFFSET +strhelp = STR_CONFIG_SETTING_CLOCK_OFFSET_HELPTEXT +post_cb = UpdateTimeSettings +patxname = ""game_time.clock_offset"" + +[SDT_VAR] +var = debug.chicken_bits +type = SLE_UINT32 +flags = SF_NOT_IN_CONFIG | SF_NO_NEWGAME | SF_PATCH +def = 0 +min = 0 +max = 0xFFFFFFFF +cat = SC_EXPERT +patxname = ""debug.chicken_bits"" + +[SDT_VAR] +var = debug.newgrf_optimiser_flags +type = SLE_UINT32 +flags = SF_NOT_IN_CONFIG | SF_NO_NEWGAME | SF_NO_NETWORK | SF_PATCH +def = 0 +min = 0 +max = 0xFFFFFFFF +cat = SC_EXPERT +patxname = ""debug.newgrf_optimiser_flags""