; 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 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 bool CheckDynamicEngines(int32_t &new_value);
static void StationCatchmentChanged(int32_t new_value);
static void MaxVehiclesChanged(int32_t new_value);
static const SettingVariant _game_settings_table[] = {
[post-amble]
};
[templates]
SDTG_BOOL = SDTG_BOOL($name, $flags, $var, $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $cat, $extra, $startup),
SDTG_VAR = SDTG_VAR($name, $type, $flags, $var, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $cat, $extra, $startup),
SDTC_BOOL = SDTC_BOOL( $var, $flags, $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $cat, $extra, $startup),
SDT_BOOL = SDT_BOOL(GameSettings, $var, $flags, $def, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $cat, $extra, $startup),
SDT_OMANY = SDT_OMANY(GameSettings, $var, $type, $flags, $def, $max, $full, $str, $strhelp, $strval, $pre_cb, $post_cb, $from, $to, $load, $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]
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
load = nullptr
from = SL_MIN_VERSION
to = SL_MAX_VERSION
cat = SC_ADVANCED
extra = 0
startup = false
[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.gradual_loading
from = SLV_40
flags = SF_NO_NETWORK
def = true
cat = SC_EXPERT
[SDT_BOOL]
var = station.never_expire_airports
flags = SF_NO_NETWORK
def = false
str = STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS
strhelp = STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT
[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_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_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
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_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.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.max_trains
type = SLE_UINT16
def = 500
min = 0
max = 5000
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 = 5000
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 = 5000
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 = 5000
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
flags = SF_NO_NETWORK
def = true
str = STR_CONFIG_SETTING_WAGONSPEEDLIMITS
strhelp = STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT
post_cb = UpdateConsists
[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
flags = SF_NO_NETWORK
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
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_VAR]
var = vehicle.extend_vehicle_life
type = SLE_UINT8
def = 0
min = 0
max = 100
cat = SC_EXPERT
## 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