; This file is part of OpenTTD.
; OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
; OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
; See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
;

; Pathfinding settings as stored in the main configuration file ("openttd.cfg")
; and in the savegame PATS chunk.

[pre-amble]
static void InvalidateShipPathCache(int32 new_value);

static const SettingVariant _pathfinding_settings_table[] = {
[post-amble]
};
[templates]
SDT_BOOL   =   SDT_BOOL(GameSettings, $var,        $flags, $def,                              $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to,        $cat, $extra, $startup),
SDT_VAR    =    SDT_VAR(GameSettings, $var, $type, $flags, $def,       $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to,        $cat, $extra, $startup),

[validation]
SDT_VAR = static_assert($max <= MAX_$type, "Maximum value for 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
load     = nullptr
from     = SL_MIN_VERSION
to       = SL_MAX_VERSION
cat      = SC_ADVANCED
extra    = 0
startup  = false


[SDT_BOOL]
var      = pf.forbid_90_deg
def      = false
str      = STR_CONFIG_SETTING_FORBID_90_DEG
strhelp  = STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT
post_cb  = InvalidateShipPathCache
cat      = SC_EXPERT

[SDT_BOOL]
var      = pf.roadveh_queue
def      = true
cat      = SC_EXPERT

[SDT_BOOL]
var      = pf.new_pathfinding_all
to       = SLV_87
def      = false
cat      = SC_EXPERT

[SDT_BOOL]
var      = pf.yapf.ship_use_yapf
from     = SLV_28
to       = SLV_87
def      = false
cat      = SC_EXPERT

[SDT_BOOL]
var      = pf.yapf.road_use_yapf
from     = SLV_28
to       = SLV_87
def      = true
cat      = SC_EXPERT

[SDT_BOOL]
var      = pf.yapf.rail_use_yapf
from     = SLV_28
to       = SLV_87
def      = true
cat      = SC_EXPERT

[SDT_VAR]
var      = pf.pathfinder_for_trains
type     = SLE_UINT8
from     = SLV_87
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

[SDT_VAR]
var      = pf.yapf.rail_look_ahead_signal_p0
type     = SLE_INT
from     = SLV_28
def      = 500
min      = -1000000
max      = 1000000
cat      = SC_EXPERT

[SDT_VAR]
var      = pf.yapf.rail_look_ahead_signal_p1
type     = SLE_INT
from     = SLV_28
def      = -100
min      = -1000000
max      = 1000000
cat      = SC_EXPERT

[SDT_VAR]
var      = pf.yapf.rail_look_ahead_signal_p2
type     = SLE_INT
from     = SLV_28
def      = 5
min      = -1000000
max      = 1000000
cat      = SC_EXPERT

[SDT_VAR]
var      = pf.yapf.rail_pbs_cross_penalty
type     = SLE_UINT
from     = SLV_100
def      = 3 * YAPF_TILE_LENGTH
min      = 0
max      = 1000000
cat      = SC_EXPERT

[SDT_VAR]
var      = pf.yapf.rail_pbs_station_penalty
type     = SLE_UINT
from     = SLV_100
def      = 8 * YAPF_TILE_LENGTH
min      = 0
max      = 1000000
cat      = SC_EXPERT

[SDT_VAR]
var      = pf.yapf.rail_pbs_signal_back_penalty
type     = SLE_UINT
from     = SLV_100
def      = 15 * YAPF_TILE_LENGTH
min      = 0
max      = 1000000
cat      = SC_EXPERT

[SDT_VAR]
var      = pf.yapf.rail_doubleslip_penalty
type     = SLE_UINT
from     = SLV_100
def      = 1 * YAPF_TILE_LENGTH
min      = 0
max      = 1000000
cat      = SC_EXPERT

[SDT_VAR]
var      = pf.yapf.rail_longer_platform_penalty
type     = SLE_UINT
from     = SLV_33
def      = 8 * YAPF_TILE_LENGTH
min      = 0
max      = 20000
cat      = SC_EXPERT

[SDT_VAR]
var      = pf.yapf.rail_longer_platform_per_tile_penalty
type     = SLE_UINT
from     = SLV_33
def      = 0 * YAPF_TILE_LENGTH
min      = 0
max      = 20000
cat      = SC_EXPERT

[SDT_VAR]
var      = pf.yapf.rail_shorter_platform_penalty
type     = SLE_UINT
from     = SLV_33
def      = 40 * YAPF_TILE_LENGTH
min      = 0
max      = 20000
cat      = SC_EXPERT

[SDT_VAR]
var      = pf.yapf.rail_shorter_platform_per_tile_penalty
type     = SLE_UINT
from     = SLV_33
def      = 0 * YAPF_TILE_LENGTH
min      = 0
max      = 20000
cat      = SC_EXPERT

[SDT_VAR]
var      = pf.yapf.road_slope_penalty
type     = SLE_UINT
from     = SLV_33
def      = 2 * YAPF_TILE_LENGTH
min      = 0
max      = 1000000
cat      = SC_EXPERT

[SDT_VAR]
var      = pf.yapf.road_curve_penalty
type     = SLE_UINT
from     = SLV_33
def      = 1 * YAPF_TILE_LENGTH
min      = 0
max      = 1000000
cat      = SC_EXPERT

[SDT_VAR]
var      = pf.yapf.road_crossing_penalty
type     = SLE_UINT
from     = SLV_33
def      = 3 * YAPF_TILE_LENGTH
min      = 0
max      = 1000000
cat      = SC_EXPERT

[SDT_VAR]
var      = pf.yapf.road_stop_penalty
type     = SLE_UINT
from     = SLV_47
def      = 8 * YAPF_TILE_LENGTH
min      = 0
max      = 1000000
cat      = SC_EXPERT

[SDT_VAR]
var      = pf.yapf.road_stop_occupied_penalty
type     = SLE_UINT
from     = SLV_130
def      = 8 * YAPF_TILE_LENGTH
min      = 0
max      = 1000000
cat      = SC_EXPERT

[SDT_VAR]
var      = pf.yapf.road_stop_bay_occupied_penalty
type     = SLE_UINT
from     = SLV_130
def      = 15 * YAPF_TILE_LENGTH
min      = 0
max      = 1000000
cat      = SC_EXPERT

[SDT_VAR]
var      = pf.yapf.maximum_go_to_depot_penalty
type     = SLE_UINT
from     = SLV_131
def      = 20 * YAPF_TILE_LENGTH
min      = 0
max      = 1000000
cat      = SC_EXPERT

[SDT_VAR]
var      = pf.yapf.ship_curve45_penalty
type     = SLE_UINT
from     = SLV_SHIP_CURVE_PENALTY
def      = 1 * YAPF_TILE_LENGTH
min      = 0
max      = 1000000
cat      = SC_EXPERT

[SDT_VAR]
var      = pf.yapf.ship_curve90_penalty
type     = SLE_UINT
from     = SLV_SHIP_CURVE_PENALTY
def      = 6 * YAPF_TILE_LENGTH
min      = 0
max      = 1000000
cat      = SC_EXPERT
