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; Pathfinding settings as stored in the main configuration file ("openttd.cfg")
8; and in the savegame PATS chunk.
9
10[pre-amble]
11static void InvalidateShipPathCache(int32 new_value);
12
13static const SettingVariant _pathfinding_settings_table[] = {
14[post-amble]
15};
16[templates]
17SDT_BOOL   =   SDT_BOOL(GameSettings, $var,        $flags, $def,                              $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to,        $cat, $extra, $startup),
18SDT_VAR    =    SDT_VAR(GameSettings, $var, $type, $flags, $def,       $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to,        $cat, $extra, $startup),
19
20[validation]
21SDT_VAR = static_assert($max <= MAX_$type, "Maximum value for GameSettings.$var exceeds storage size");
22
23[defaults]
24flags    = SF_NONE
25interval = 0
26str      = STR_NULL
27strhelp  = STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT
28strval   = STR_NULL
29pre_cb   = nullptr
30post_cb  = nullptr
31load     = nullptr
32from     = SL_MIN_VERSION
33to       = SL_MAX_VERSION
34cat      = SC_ADVANCED
35extra    = 0
36startup  = false
37
38
39[SDT_BOOL]
40var      = pf.forbid_90_deg
41def      = false
42str      = STR_CONFIG_SETTING_FORBID_90_DEG
43strhelp  = STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT
44post_cb  = InvalidateShipPathCache
45cat      = SC_EXPERT
46
47[SDT_BOOL]
48var      = pf.roadveh_queue
49def      = true
50cat      = SC_EXPERT
51
52[SDT_BOOL]
53var      = pf.new_pathfinding_all
54to       = SLV_87
55def      = false
56cat      = SC_EXPERT
57
58[SDT_BOOL]
59var      = pf.yapf.ship_use_yapf
60from     = SLV_28
61to       = SLV_87
62def      = false
63cat      = SC_EXPERT
64
65[SDT_BOOL]
66var      = pf.yapf.road_use_yapf
67from     = SLV_28
68to       = SLV_87
69def      = true
70cat      = SC_EXPERT
71
72[SDT_BOOL]
73var      = pf.yapf.rail_use_yapf
74from     = SLV_28
75to       = SLV_87
76def      = true
77cat      = SC_EXPERT
78
79[SDT_VAR]
80var      = pf.pathfinder_for_trains
81type     = SLE_UINT8
82from     = SLV_87
83flags    = SF_GUI_DROPDOWN
84def      = 2
85min      = 1
86max      = 2
87interval = 1
88str      = STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS
89strhelp  = STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS_HELPTEXT
90strval   = STR_CONFIG_SETTING_PATHFINDER_NPF
91cat      = SC_EXPERT
92
93[SDT_VAR]
94var      = pf.pathfinder_for_roadvehs
95type     = SLE_UINT8
96from     = SLV_87
97flags    = SF_GUI_DROPDOWN
98def      = 2
99min      = 1
100max      = 2
101interval = 1
102str      = STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES
103strhelp  = STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES_HELPTEXT
104strval   = STR_CONFIG_SETTING_PATHFINDER_NPF
105cat      = SC_EXPERT
106
107[SDT_VAR]
108var      = pf.pathfinder_for_ships
109type     = SLE_UINT8
110from     = SLV_87
111flags    = SF_GUI_DROPDOWN
112def      = 2
113min      = 1
114max      = 2
115interval = 1
116str      = STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS
117strhelp  = STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS_HELPTEXT
118strval   = STR_CONFIG_SETTING_PATHFINDER_NPF
119post_cb  = InvalidateShipPathCache
120cat      = SC_EXPERT
121
122[SDT_BOOL]
123var      = pf.reverse_at_signals
124from     = SLV_159
125def      = false
126str      = STR_CONFIG_SETTING_REVERSE_AT_SIGNALS
127strhelp  = STR_CONFIG_SETTING_REVERSE_AT_SIGNALS_HELPTEXT
128
129[SDT_VAR]
130var      = pf.wait_oneway_signal
131type     = SLE_UINT8
132def      = 15
133min      = 2
134max      = 255
135cat      = SC_EXPERT
136
137[SDT_VAR]
138var      = pf.wait_twoway_signal
139type     = SLE_UINT8
140def      = 41
141min      = 2
142max      = 255
143cat      = SC_EXPERT
144
145[SDT_VAR]
146var      = pf.wait_for_pbs_path
147type     = SLE_UINT8
148from     = SLV_100
149def      = 30
150min      = 2
151max      = 255
152cat      = SC_EXPERT
153
154[SDT_BOOL]
155var      = pf.reserve_paths
156from     = SLV_100
157def      = false
158cat      = SC_EXPERT
159
160[SDT_VAR]
161var      = pf.path_backoff_interval
162type     = SLE_UINT8
163from     = SLV_100
164def      = 20
165min      = 1
166max      = 255
167cat      = SC_EXPERT
168
169[SDT_VAR]
170var      = pf.npf.npf_max_search_nodes
171type     = SLE_UINT
172def      = 10000
173min      = 500
174max      = 100000
175cat      = SC_EXPERT
176
177[SDT_VAR]
178var      = pf.npf.npf_rail_firstred_penalty
179type     = SLE_UINT
180def      = 10 * NPF_TILE_LENGTH
181min      = 0
182max      = 100000
183cat      = SC_EXPERT
184
185[SDT_VAR]
186var      = pf.npf.npf_rail_firstred_exit_penalty
187type     = SLE_UINT
188def      = 100 * NPF_TILE_LENGTH
189min      = 0
190max      = 100000
191cat      = SC_EXPERT
192
193[SDT_VAR]
194var      = pf.npf.npf_rail_lastred_penalty
195type     = SLE_UINT
196def      = 10 * NPF_TILE_LENGTH
197min      = 0
198max      = 100000
199cat      = SC_EXPERT
200
201[SDT_VAR]
202var      = pf.npf.npf_rail_station_penalty
203type     = SLE_UINT
204def      = 1 * NPF_TILE_LENGTH
205min      = 0
206max      = 100000
207cat      = SC_EXPERT
208
209[SDT_VAR]
210var      = pf.npf.npf_rail_slope_penalty
211type     = SLE_UINT
212def      = 1 * NPF_TILE_LENGTH
213min      = 0
214max      = 100000
215cat      = SC_EXPERT
216
217[SDT_VAR]
218var      = pf.npf.npf_rail_curve_penalty
219type     = SLE_UINT
220def      = 1 * NPF_TILE_LENGTH
221min      = 0
222max      = 100000
223cat      = SC_EXPERT
224
225[SDT_VAR]
226var      = pf.npf.npf_rail_depot_reverse_penalty
227type     = SLE_UINT
228def      = 50 * NPF_TILE_LENGTH
229min      = 0
230max      = 100000
231cat      = SC_EXPERT
232
233[SDT_VAR]
234var      = pf.npf.npf_rail_pbs_cross_penalty
235type     = SLE_UINT
236from     = SLV_100
237def      = 3 * NPF_TILE_LENGTH
238min      = 0
239max      = 100000
240cat      = SC_EXPERT
241
242[SDT_VAR]
243var      = pf.npf.npf_rail_pbs_signal_back_penalty
244type     = SLE_UINT
245from     = SLV_100
246def      = 15 * NPF_TILE_LENGTH
247min      = 0
248max      = 100000
249cat      = SC_EXPERT
250
251[SDT_VAR]
252var      = pf.npf.npf_buoy_penalty
253type     = SLE_UINT
254def      = 2 * NPF_TILE_LENGTH
255min      = 0
256max      = 100000
257cat      = SC_EXPERT
258
259[SDT_VAR]
260var      = pf.npf.npf_water_curve_penalty
261type     = SLE_UINT
262def      = 1 * NPF_TILE_LENGTH
263min      = 0
264max      = 100000
265cat      = SC_EXPERT
266
267[SDT_VAR]
268var      = pf.npf.npf_road_curve_penalty
269type     = SLE_UINT
270def      = 1 * NPF_TILE_LENGTH
271min      = 0
272max      = 100000
273cat      = SC_EXPERT
274
275[SDT_VAR]
276var      = pf.npf.npf_crossing_penalty
277type     = SLE_UINT
278def      = 3 * NPF_TILE_LENGTH
279min      = 0
280max      = 100000
281cat      = SC_EXPERT
282
283[SDT_VAR]
284var      = pf.npf.npf_road_drive_through_penalty
285type     = SLE_UINT
286from     = SLV_47
287def      = 8 * NPF_TILE_LENGTH
288min      = 0
289max      = 100000
290cat      = SC_EXPERT
291
292[SDT_VAR]
293var      = pf.npf.npf_road_dt_occupied_penalty
294type     = SLE_UINT
295from     = SLV_130
296def      = 8 * NPF_TILE_LENGTH
297min      = 0
298max      = 100000
299cat      = SC_EXPERT
300
301[SDT_VAR]
302var      = pf.npf.npf_road_bay_occupied_penalty
303type     = SLE_UINT
304from     = SLV_130
305def      = 15 * NPF_TILE_LENGTH
306min      = 0
307max      = 100000
308cat      = SC_EXPERT
309
310[SDT_VAR]
311var      = pf.npf.maximum_go_to_depot_penalty
312type     = SLE_UINT
313from     = SLV_131
314def      = 20 * NPF_TILE_LENGTH
315min      = 0
316max      = 1000000
317cat      = SC_EXPERT
318
319[SDT_BOOL]
320var      = pf.yapf.disable_node_optimization
321from     = SLV_28
322def      = false
323cat      = SC_EXPERT
324
325[SDT_VAR]
326var      = pf.yapf.max_search_nodes
327type     = SLE_UINT
328from     = SLV_28
329def      = 10000
330min      = 500
331max      = 1000000
332cat      = SC_EXPERT
333
334[SDT_BOOL]
335var      = pf.yapf.rail_firstred_twoway_eol
336from     = SLV_28
337def      = false
338cat      = SC_EXPERT
339
340[SDT_VAR]
341var      = pf.yapf.rail_firstred_penalty
342type     = SLE_UINT
343from     = SLV_28
344def      = 10 * YAPF_TILE_LENGTH
345min      = 0
346max      = 1000000
347cat      = SC_EXPERT
348
349[SDT_VAR]
350var      = pf.yapf.rail_firstred_exit_penalty
351type     = SLE_UINT
352from     = SLV_28
353def      = 100 * YAPF_TILE_LENGTH
354min      = 0
355max      = 1000000
356cat      = SC_EXPERT
357
358[SDT_VAR]
359var      = pf.yapf.rail_lastred_penalty
360type     = SLE_UINT
361from     = SLV_28
362def      = 10 * YAPF_TILE_LENGTH
363min      = 0
364max      = 1000000
365cat      = SC_EXPERT
366
367[SDT_VAR]
368var      = pf.yapf.rail_lastred_exit_penalty
369type     = SLE_UINT
370from     = SLV_28
371def      = 100 * YAPF_TILE_LENGTH
372min      = 0
373max      = 1000000
374cat      = SC_EXPERT
375
376[SDT_VAR]
377var      = pf.yapf.rail_station_penalty
378type     = SLE_UINT
379from     = SLV_28
380def      = 10 * YAPF_TILE_LENGTH
381min      = 0
382max      = 1000000
383cat      = SC_EXPERT
384
385[SDT_VAR]
386var      = pf.yapf.rail_slope_penalty
387type     = SLE_UINT
388from     = SLV_28
389def      = 2 * YAPF_TILE_LENGTH
390min      = 0
391max      = 1000000
392cat      = SC_EXPERT
393
394[SDT_VAR]
395var      = pf.yapf.rail_curve45_penalty
396type     = SLE_UINT
397from     = SLV_28
398def      = 1 * YAPF_TILE_LENGTH
399min      = 0
400max      = 1000000
401cat      = SC_EXPERT
402
403[SDT_VAR]
404var      = pf.yapf.rail_curve90_penalty
405type     = SLE_UINT
406from     = SLV_28
407def      = 6 * YAPF_TILE_LENGTH
408min      = 0
409max      = 1000000
410cat      = SC_EXPERT
411
412[SDT_VAR]
413var      = pf.yapf.rail_depot_reverse_penalty
414type     = SLE_UINT
415from     = SLV_28
416def      = 50 * YAPF_TILE_LENGTH
417min      = 0
418max      = 1000000
419cat      = SC_EXPERT
420
421[SDT_VAR]
422var      = pf.yapf.rail_crossing_penalty
423type     = SLE_UINT
424from     = SLV_28
425def      = 3 * YAPF_TILE_LENGTH
426min      = 0
427max      = 1000000
428cat      = SC_EXPERT
429
430[SDT_VAR]
431var      = pf.yapf.rail_look_ahead_max_signals
432type     = SLE_UINT
433from     = SLV_28
434def      = 10
435min      = 1
436max      = 100
437cat      = SC_EXPERT
438
439[SDT_VAR]
440var      = pf.yapf.rail_look_ahead_signal_p0
441type     = SLE_INT
442from     = SLV_28
443def      = 500
444min      = -1000000
445max      = 1000000
446cat      = SC_EXPERT
447
448[SDT_VAR]
449var      = pf.yapf.rail_look_ahead_signal_p1
450type     = SLE_INT
451from     = SLV_28
452def      = -100
453min      = -1000000
454max      = 1000000
455cat      = SC_EXPERT
456
457[SDT_VAR]
458var      = pf.yapf.rail_look_ahead_signal_p2
459type     = SLE_INT
460from     = SLV_28
461def      = 5
462min      = -1000000
463max      = 1000000
464cat      = SC_EXPERT
465
466[SDT_VAR]
467var      = pf.yapf.rail_pbs_cross_penalty
468type     = SLE_UINT
469from     = SLV_100
470def      = 3 * YAPF_TILE_LENGTH
471min      = 0
472max      = 1000000
473cat      = SC_EXPERT
474
475[SDT_VAR]
476var      = pf.yapf.rail_pbs_station_penalty
477type     = SLE_UINT
478from     = SLV_100
479def      = 8 * YAPF_TILE_LENGTH
480min      = 0
481max      = 1000000
482cat      = SC_EXPERT
483
484[SDT_VAR]
485var      = pf.yapf.rail_pbs_signal_back_penalty
486type     = SLE_UINT
487from     = SLV_100
488def      = 15 * YAPF_TILE_LENGTH
489min      = 0
490max      = 1000000
491cat      = SC_EXPERT
492
493[SDT_VAR]
494var      = pf.yapf.rail_doubleslip_penalty
495type     = SLE_UINT
496from     = SLV_100
497def      = 1 * YAPF_TILE_LENGTH
498min      = 0
499max      = 1000000
500cat      = SC_EXPERT
501
502[SDT_VAR]
503var      = pf.yapf.rail_longer_platform_penalty
504type     = SLE_UINT
505from     = SLV_33
506def      = 8 * YAPF_TILE_LENGTH
507min      = 0
508max      = 20000
509cat      = SC_EXPERT
510
511[SDT_VAR]
512var      = pf.yapf.rail_longer_platform_per_tile_penalty
513type     = SLE_UINT
514from     = SLV_33
515def      = 0 * YAPF_TILE_LENGTH
516min      = 0
517max      = 20000
518cat      = SC_EXPERT
519
520[SDT_VAR]
521var      = pf.yapf.rail_shorter_platform_penalty
522type     = SLE_UINT
523from     = SLV_33
524def      = 40 * YAPF_TILE_LENGTH
525min      = 0
526max      = 20000
527cat      = SC_EXPERT
528
529[SDT_VAR]
530var      = pf.yapf.rail_shorter_platform_per_tile_penalty
531type     = SLE_UINT
532from     = SLV_33
533def      = 0 * YAPF_TILE_LENGTH
534min      = 0
535max      = 20000
536cat      = SC_EXPERT
537
538[SDT_VAR]
539var      = pf.yapf.road_slope_penalty
540type     = SLE_UINT
541from     = SLV_33
542def      = 2 * YAPF_TILE_LENGTH
543min      = 0
544max      = 1000000
545cat      = SC_EXPERT
546
547[SDT_VAR]
548var      = pf.yapf.road_curve_penalty
549type     = SLE_UINT
550from     = SLV_33
551def      = 1 * YAPF_TILE_LENGTH
552min      = 0
553max      = 1000000
554cat      = SC_EXPERT
555
556[SDT_VAR]
557var      = pf.yapf.road_crossing_penalty
558type     = SLE_UINT
559from     = SLV_33
560def      = 3 * YAPF_TILE_LENGTH
561min      = 0
562max      = 1000000
563cat      = SC_EXPERT
564
565[SDT_VAR]
566var      = pf.yapf.road_stop_penalty
567type     = SLE_UINT
568from     = SLV_47
569def      = 8 * YAPF_TILE_LENGTH
570min      = 0
571max      = 1000000
572cat      = SC_EXPERT
573
574[SDT_VAR]
575var      = pf.yapf.road_stop_occupied_penalty
576type     = SLE_UINT
577from     = SLV_130
578def      = 8 * YAPF_TILE_LENGTH
579min      = 0
580max      = 1000000
581cat      = SC_EXPERT
582
583[SDT_VAR]
584var      = pf.yapf.road_stop_bay_occupied_penalty
585type     = SLE_UINT
586from     = SLV_130
587def      = 15 * YAPF_TILE_LENGTH
588min      = 0
589max      = 1000000
590cat      = SC_EXPERT
591
592[SDT_VAR]
593var      = pf.yapf.maximum_go_to_depot_penalty
594type     = SLE_UINT
595from     = SLV_131
596def      = 20 * YAPF_TILE_LENGTH
597min      = 0
598max      = 1000000
599cat      = SC_EXPERT
600
601[SDT_VAR]
602var      = pf.yapf.ship_curve45_penalty
603type     = SLE_UINT
604from     = SLV_SHIP_CURVE_PENALTY
605def      = 1 * YAPF_TILE_LENGTH
606min      = 0
607max      = 1000000
608cat      = SC_EXPERT
609
610[SDT_VAR]
611var      = pf.yapf.ship_curve90_penalty
612type     = SLE_UINT
613from     = SLV_SHIP_CURVE_PENALTY
614def      = 6 * YAPF_TILE_LENGTH
615min      = 0
616max      = 1000000
617cat      = SC_EXPERT
618