1; This file is part of OpenTTD. 2; 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. 3; 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. 4; See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>. 5; 6 7; World settings as stored in the main configuration file ("openttd.cfg") 8; and in the savegame PATS chunk. 9; World settings are everything related to how the world came to be, so 10; basically construction and game_creation settings. 11 12[pre-amble] 13static bool CheckMaxHeightLevel(int32 &new_value); 14static bool CheckFreeformEdges(int32 &new_value); 15static void UpdateFreeformEdges(int32 new_value); 16 17static const SettingVariant _world_settings_table[] = { 18[post-amble] 19}; 20[templates] 21SDT_BOOL = SDT_BOOL(GameSettings, $var, $flags, $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $cat, $extra, $startup), 22SDT_OMANY = SDT_OMANY(GameSettings, $var, $type, $flags, $def, $max, $full, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $load, $cat, $extra, $startup), 23SDT_VAR = SDT_VAR(GameSettings, $var, $type, $flags, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $cat, $extra, $startup), 24 25[validation] 26SDT_OMANY = static_assert($max <= MAX_$type, "Maximum value for GameSettings.$var exceeds storage size"); 27SDT_VAR = static_assert($max <= MAX_$type, "Maximum value for GameSettings.$var exceeds storage size"); 28 29[defaults] 30flags = SF_NONE 31interval = 0 32str = STR_NULL 33strhelp = STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT 34strval = STR_NULL 35pre_cb = nullptr 36post_cb = nullptr 37load = nullptr 38from = SL_MIN_VERSION 39to = SL_MAX_VERSION 40cat = SC_ADVANCED 41extra = 0 42startup = false 43 44 45; There are only 21 predefined town_name values (0-20), but you can have more with newgrf action F so allow 46; these bigger values (21-255). Invalid values will fallback to english on use and (undefined string) in GUI. 47[SDT_OMANY] 48var = game_creation.town_name 49type = SLE_UINT8 50from = SLV_97 51flags = SF_NO_NETWORK 52def = 0 53max = 255 54full = _town_names 55cat = SC_BASIC 56 57[SDT_OMANY] 58var = game_creation.landscape 59type = SLE_UINT8 60from = SLV_97 61flags = SF_GUI_DROPDOWN | SF_NEWGAME_ONLY 62def = 0 63max = 3 64full = _climates 65load = ConvertLandscape 66str = STR_CONFIG_SETTING_LANDSCAPE 67strhelp = STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT 68strval = STR_CHEAT_SWITCH_CLIMATE_TEMPERATE_LANDSCAPE 69cat = SC_BASIC 70 71[SDT_VAR] 72var = game_creation.heightmap_height 73type = SLE_UINT8 74from = SLV_MAPGEN_SETTINGS_REVAMP 75flags = SF_NEWGAME_ONLY 76def = MAP_HEIGHT_LIMIT_AUTO_MINIMUM 77min = MIN_HEIGHTMAP_HEIGHT 78max = MAX_MAP_HEIGHT_LIMIT 79interval = 1 80 81[SDT_VAR] 82var = game_creation.snow_line_height 83type = SLE_UINT8 84flags = SF_SCENEDIT_ONLY 85def = DEF_SNOWLINE_HEIGHT 86min = MIN_SNOWLINE_HEIGHT 87max = MAX_SNOWLINE_HEIGHT 88interval = 1 89str = STR_CONFIG_SETTING_SNOWLINE_HEIGHT 90strhelp = STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT 91strval = STR_JUST_COMMA 92cat = SC_BASIC 93 94[SDT_VAR] 95var = game_creation.snow_coverage 96type = SLE_UINT8 97from = SLV_MAPGEN_SETTINGS_REVAMP 98flags = SF_NEWGAME_ONLY 99def = DEF_SNOW_COVERAGE 100min = 0 101max = 100 102interval = 10 103str = STR_CONFIG_SETTING_SNOW_COVERAGE 104strhelp = STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT 105strval = STR_CONFIG_SETTING_SNOW_COVERAGE_VALUE 106cat = SC_BASIC 107 108[SDT_VAR] 109var = game_creation.desert_coverage 110type = SLE_UINT8 111from = SLV_MAPGEN_SETTINGS_REVAMP 112flags = SF_NEWGAME_ONLY 113def = DEF_DESERT_COVERAGE 114min = 0 115max = 100 116interval = 10 117str = STR_CONFIG_SETTING_DESERT_COVERAGE 118strhelp = STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT 119strval = STR_CONFIG_SETTING_DESERT_COVERAGE_VALUE 120cat = SC_BASIC 121 122[SDT_VAR] 123var = game_creation.starting_year 124type = SLE_INT32 125def = DEF_START_YEAR 126min = MIN_YEAR 127max = MAX_YEAR 128interval = 1 129str = STR_CONFIG_SETTING_STARTING_YEAR 130strval = STR_JUST_INT 131cat = SC_BASIC 132 133[SDT_VAR] 134var = game_creation.ending_year 135type = SLE_INT32 136from = SLV_ENDING_YEAR 137flags = SF_GUI_0_IS_SPECIAL 138def = DEF_END_YEAR 139min = MIN_YEAR 140max = MAX_YEAR - 1 141interval = 1 142str = STR_CONFIG_SETTING_ENDING_YEAR 143strhelp = STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT 144strval = STR_CONFIG_SETTING_ENDING_YEAR_VALUE 145cat = SC_ADVANCED 146 147[SDT_VAR] 148var = game_creation.land_generator 149type = SLE_UINT8 150from = SLV_30 151flags = SF_GUI_DROPDOWN | SF_NEWGAME_ONLY 152def = 1 153min = 0 154max = 1 155str = STR_CONFIG_SETTING_LAND_GENERATOR 156strhelp = STR_CONFIG_SETTING_LAND_GENERATOR_HELPTEXT 157strval = STR_CONFIG_SETTING_LAND_GENERATOR_ORIGINAL 158 159[SDT_VAR] 160var = game_creation.oil_refinery_limit 161type = SLE_UINT8 162from = SLV_30 163def = 32 164min = 12 165max = 128 166str = STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE 167strval = STR_CONFIG_SETTING_TILE_LENGTH 168strhelp = STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT 169 170[SDT_VAR] 171var = game_creation.tgen_smoothness 172type = SLE_UINT8 173from = SLV_30 174flags = SF_GUI_DROPDOWN | SF_NEWGAME_ONLY 175def = 1 176min = TGEN_SMOOTHNESS_BEGIN 177max = TGEN_SMOOTHNESS_END - 1 178str = STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN 179strhelp = STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT 180strval = STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH 181cat = SC_BASIC 182 183[SDT_VAR] 184var = game_creation.variety 185type = SLE_UINT8 186from = SLV_197 187flags = SF_GUI_DROPDOWN | SF_NEWGAME_ONLY 188def = 0 189min = 0 190max = 5 191str = STR_CONFIG_SETTING_VARIETY 192strhelp = STR_CONFIG_SETTING_VARIETY_HELPTEXT 193strval = STR_VARIETY_NONE 194 195[SDT_VAR] 196var = game_creation.generation_seed 197type = SLE_UINT32 198from = SLV_30 199def = GENERATE_NEW_SEED 200min = 0 201max = UINT32_MAX 202cat = SC_EXPERT 203 204[SDT_VAR] 205var = game_creation.tree_placer 206type = SLE_UINT8 207from = SLV_30 208flags = SF_GUI_DROPDOWN | SF_NEWGAME_ONLY | SF_SCENEDIT_TOO 209def = 2 210min = 0 211max = 2 212str = STR_CONFIG_SETTING_TREE_PLACER 213strhelp = STR_CONFIG_SETTING_TREE_PLACER_HELPTEXT 214strval = STR_CONFIG_SETTING_TREE_PLACER_NONE 215cat = SC_BASIC 216 217[SDT_VAR] 218var = game_creation.heightmap_rotation 219type = SLE_UINT8 220flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_GUI_DROPDOWN 221def = 0 222min = 0 223max = 1 224str = STR_CONFIG_SETTING_HEIGHTMAP_ROTATION 225strval = STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_COUNTER_CLOCKWISE 226cat = SC_BASIC 227 228[SDT_VAR] 229var = game_creation.se_flat_world_height 230type = SLE_UINT8 231flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC 232def = 1 233min = 0 234max = 15 235str = STR_CONFIG_SETTING_SE_FLAT_WORLD_HEIGHT 236strval = STR_JUST_COMMA 237cat = SC_BASIC 238 239[SDT_VAR] 240var = game_creation.map_x 241type = SLE_UINT8 242flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC 243def = 8 244min = MIN_MAP_SIZE_BITS 245max = MAX_MAP_SIZE_BITS 246cat = SC_BASIC 247 248[SDT_VAR] 249var = game_creation.map_y 250type = SLE_UINT8 251flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC 252def = 8 253min = MIN_MAP_SIZE_BITS 254max = MAX_MAP_SIZE_BITS 255cat = SC_BASIC 256 257[SDT_VAR] 258var = game_creation.water_borders 259type = SLE_UINT8 260from = SLV_111 261def = 15 262min = 0 263max = 16 264 265[SDT_VAR] 266var = game_creation.custom_town_number 267type = SLE_UINT16 268from = SLV_115 269def = 1 270min = 1 271max = 5000 272cat = SC_BASIC 273 274[SDT_VAR] 275var = game_creation.custom_terrain_type 276type = SLE_UINT8 277from = SLV_MAPGEN_SETTINGS_REVAMP 278flags = SF_NEWGAME_ONLY 279def = MAP_HEIGHT_LIMIT_AUTO_MINIMUM 280min = MIN_CUSTOM_TERRAIN_TYPE 281max = MAX_MAP_HEIGHT_LIMIT 282interval = 1 283 284[SDT_VAR] 285var = game_creation.custom_sea_level 286type = SLE_UINT8 287from = SLV_149 288def = CUSTOM_SEA_LEVEL_MIN_PERCENTAGE 289min = CUSTOM_SEA_LEVEL_MIN_PERCENTAGE 290max = CUSTOM_SEA_LEVEL_MAX_PERCENTAGE 291cat = SC_BASIC 292 293[SDT_VAR] 294var = game_creation.min_river_length 295type = SLE_UINT8 296from = SLV_163 297def = 16 298min = 2 299max = 255 300cat = SC_EXPERT 301 302[SDT_VAR] 303var = game_creation.river_route_random 304type = SLE_UINT8 305from = SLV_163 306def = 5 307min = 1 308max = 255 309cat = SC_EXPERT 310 311[SDT_VAR] 312var = game_creation.amount_of_rivers 313type = SLE_UINT8 314from = SLV_163 315flags = SF_GUI_DROPDOWN | SF_NEWGAME_ONLY 316def = 2 317min = 0 318max = 3 319str = STR_CONFIG_SETTING_RIVER_AMOUNT 320strhelp = STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT 321strval = STR_RIVERS_NONE 322 323[SDT_VAR] 324var = construction.map_height_limit 325type = SLE_UINT8 326from = SLV_194 327flags = SF_NEWGAME_ONLY | SF_SCENEDIT_TOO | SF_GUI_0_IS_SPECIAL 328def = 0 329min = MIN_MAP_HEIGHT_LIMIT 330max = MAX_MAP_HEIGHT_LIMIT 331interval = 1 332str = STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT 333strhelp = STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_HELPTEXT 334strval = STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_VALUE 335pre_cb = CheckMaxHeightLevel 336post_cb = [](auto) { InvalidateWindowClassesData(WC_SMALLMAP, 2); } 337cat = SC_ADVANCED 338 339[SDT_BOOL] 340var = construction.build_on_slopes 341flags = SF_NO_NETWORK 342def = true 343cat = SC_EXPERT 344 345[SDT_VAR] 346var = construction.command_pause_level 347type = SLE_UINT8 348from = SLV_154 349flags = SF_GUI_DROPDOWN | SF_NO_NETWORK 350def = 1 351min = 0 352max = 3 353interval = 1 354str = STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL 355strhelp = STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_HELPTEXT 356strval = STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_NO_ACTIONS 357 358[SDT_VAR] 359var = construction.terraform_per_64k_frames 360type = SLE_UINT32 361from = SLV_156 362def = 64 << 16 363min = 0 364max = 1 << 30 365interval = 1 366cat = SC_EXPERT 367 368[SDT_VAR] 369var = construction.terraform_frame_burst 370type = SLE_UINT16 371from = SLV_156 372def = 4096 373min = 0 374max = 1 << 15 375interval = 1 376cat = SC_EXPERT 377 378[SDT_VAR] 379var = construction.clear_per_64k_frames 380type = SLE_UINT32 381from = SLV_156 382def = 64 << 16 383min = 0 384max = 1 << 30 385interval = 1 386cat = SC_EXPERT 387 388[SDT_VAR] 389var = construction.clear_frame_burst 390type = SLE_UINT16 391from = SLV_156 392def = 4096 393min = 0 394max = 1 << 15 395interval = 1 396cat = SC_EXPERT 397 398[SDT_VAR] 399var = construction.tree_per_64k_frames 400type = SLE_UINT32 401from = SLV_175 402def = 64 << 16 403min = 0 404max = 1 << 30 405interval = 1 406cat = SC_EXPERT 407 408[SDT_VAR] 409var = construction.tree_frame_burst 410type = SLE_UINT16 411from = SLV_175 412def = 4096 413min = 0 414max = 1 << 15 415interval = 1 416cat = SC_EXPERT 417 418[SDT_BOOL] 419var = construction.autoslope 420from = SLV_75 421def = true 422str = STR_CONFIG_SETTING_AUTOSLOPE 423strhelp = STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT 424cat = SC_EXPERT 425 426[SDT_BOOL] 427var = construction.extra_dynamite 428def = true 429str = STR_CONFIG_SETTING_EXTRADYNAMITE 430strhelp = STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT 431 432[SDT_VAR] 433var = construction.max_bridge_length 434type = SLE_UINT16 435from = SLV_159 436flags = SF_NO_NETWORK 437def = 64 438min = 1 439max = MAX_MAP_SIZE 440interval = 1 441str = STR_CONFIG_SETTING_MAX_BRIDGE_LENGTH 442strhelp = STR_CONFIG_SETTING_MAX_BRIDGE_LENGTH_HELPTEXT 443strval = STR_CONFIG_SETTING_TILE_LENGTH 444 445[SDT_VAR] 446var = construction.max_bridge_height 447type = SLE_UINT8 448from = SLV_194 449flags = SF_NO_NETWORK 450def = 12 451min = 1 452max = MAX_TILE_HEIGHT 453interval = 1 454str = STR_CONFIG_SETTING_MAX_BRIDGE_HEIGHT 455strhelp = STR_CONFIG_SETTING_MAX_BRIDGE_HEIGHT_HELPTEXT 456strval = STR_JUST_COMMA 457cat = SC_EXPERT 458 459[SDT_VAR] 460var = construction.max_tunnel_length 461type = SLE_UINT16 462from = SLV_159 463flags = SF_NO_NETWORK 464def = 64 465min = 1 466max = MAX_MAP_SIZE 467interval = 1 468str = STR_CONFIG_SETTING_MAX_TUNNEL_LENGTH 469strhelp = STR_CONFIG_SETTING_MAX_TUNNEL_LENGTH_HELPTEXT 470strval = STR_CONFIG_SETTING_TILE_LENGTH 471 472[SDT_VAR] 473var = construction.train_signal_side 474type = SLE_UINT8 475flags = SF_GUI_DROPDOWN | SF_NO_NETWORK 476def = 1 477min = 0 478max = 2 479str = STR_CONFIG_SETTING_SIGNALSIDE 480strhelp = STR_CONFIG_SETTING_SIGNALSIDE_HELPTEXT 481strval = STR_CONFIG_SETTING_SIGNALSIDE_LEFT 482post_cb = [](auto) { MarkWholeScreenDirty(); } 483cat = SC_BASIC 484 485[SDT_BOOL] 486var = construction.road_stop_on_town_road 487from = SLV_47 488def = true 489str = STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD 490strhelp = STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD_HELPTEXT 491cat = SC_BASIC 492 493[SDT_BOOL] 494var = construction.road_stop_on_competitor_road 495from = SLV_114 496def = true 497str = STR_CONFIG_SETTING_STOP_ON_COMPETITOR_ROAD 498strhelp = STR_CONFIG_SETTING_STOP_ON_COMPETITOR_ROAD_HELPTEXT 499cat = SC_BASIC 500 501[SDT_VAR] 502var = construction.raw_industry_construction 503type = SLE_UINT8 504flags = SF_GUI_DROPDOWN 505def = 0 506min = 0 507max = 2 508str = STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD 509strhelp = STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_HELPTEXT 510strval = STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_NONE 511post_cb = [](auto) { InvalidateWindowData(WC_BUILD_INDUSTRY, 0); } 512cat = SC_BASIC 513 514[SDT_VAR] 515var = construction.industry_platform 516type = SLE_UINT8 517from = SLV_148 518def = 1 519min = 0 520max = 4 521str = STR_CONFIG_SETTING_INDUSTRY_PLATFORM 522strhelp = STR_CONFIG_SETTING_INDUSTRY_PLATFORM_HELPTEXT 523strval = STR_CONFIG_SETTING_TILE_LENGTH 524cat = SC_EXPERT 525 526[SDT_BOOL] 527var = construction.freeform_edges 528from = SLV_111 529def = true 530pre_cb = CheckFreeformEdges 531post_cb = UpdateFreeformEdges 532cat = SC_EXPERT 533 534[SDT_VAR] 535var = construction.extra_tree_placement 536type = SLE_UINT8 537from = SLV_132 538flags = SF_GUI_DROPDOWN 539def = 2 540min = 0 541max = 3 542str = STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT 543strhelp = STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT 544strval = STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NO_SPREAD 545cat = SC_BASIC 546