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