2011-03-06 10:54:20 +01:00
; 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/>.
;
2021-05-29 11:08:58 +02:00
; Settings that used to be saved in the savegame under the OPTS chunk and
; under "gameopts" in the configuration file, but no longer are. Most of these
; are now moved to other places.
;
; For backwards compatability, this file dictates how both were saved. When
; a configuration files contains these entries, they are read once, and removed
; from the configuration file afterwards. Those that are still supported will
; be saved in their new place.
2011-03-03 22:04:17 +01:00
[pre-amble]
2021-09-19 22:44:28 +02:00
static constexpr std::initializer_list<const char*> _town_names{"english", "french", "german", "american", "latin", "silly", "swedish", "dutch", "finnish", "polish", "slovak", "norwegian", "hungarian", "austrian", "romanian", "czech", "swiss", "danish", "turkish", "italian", "catalan"};
static constexpr std::initializer_list<const char*> _climates{"temperate", "arctic", "tropic", "toyland"};
2011-03-03 22:04:17 +01:00
2021-07-09 21:16:03 +02:00
static const SettingVariant _old_gameopt_settings_table[] = {
2014-01-02 18:55:57 +01:00
/* In version 4 a new difficulty setting has been added to the difficulty settings,
* town attitude towards demolishing. Needs special handling because some dimwit thought
* it funny to have the GameDifficulty struct be an array while it is a struct of
* same-sized members
* XXX - To save file-space and since values are never bigger than about 10? only
* save the first 16 bits in the savegame. Question is why the values are still int32
* and why not byte for example?
2021-06-12 14:49:51 +02:00
* 'SLE_FILE_I16 | SLE_VAR_U16' in "diff_custom" is needed to get around SlCopy() hack
2014-01-02 18:55:57 +01:00
* for savegames version 0 - though it is an array, it has to go through the byteswap process */
2011-03-03 22:04:17 +01:00
[post-amble]
};
[templates]
2021-06-03 20:55:03 +02:00
SDTG_LIST = SDTG_LIST($name, $type, $flags, $var, $def, $length, $from, $to, $cat, $extra, $startup),
2024-01-27 22:11:20 +01:00
SDTG_VAR = SDTG_VAR($name, $type, $flags, $var, $def, $min, $max, $interval, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $from, $to, $cat, $extra, $startup),
2021-05-29 09:12:11 +02:00
SDT_NULL = SDT_NULL( $length, $from, $to),
2024-01-27 22:11:20 +01:00
SDTC_OMANY = SDTC_OMANY( $var, $type, $flags, $def, $max, $full, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $from, $to, $cat, $extra, $startup),
SDTG_OMANY = SDTG_OMANY($name, $type, $flags, $var, $def, $max, $full, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_cb, $from, $to, $cat, $extra, $startup),
SDT_OMANY = SDT_OMANY(GameSettings, $var, $type, $flags, $def, $max, $full, $str, $strhelp, $strval, $pre_cb, $post_cb, $str_cb, $help_cb, $val_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, $str_cb, $help_cb, $val_cb, $from, $to, $cat, $extra, $startup),
2011-03-03 22:04:17 +01:00
2021-03-01 13:12:17 +01:00
[validation]
SDTG_VAR = static_assert($max <= MAX_$type, "Maximum value for $var exceeds storage size");
SDTG_OMANY = static_assert($max <= MAX_$type, "Maximum value for $var exceeds storage size");
SDTC_OMANY = static_assert($max <= MAX_$type, "Maximum value for $var exceeds storage size");
2021-05-29 09:12:11 +02:00
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");
2021-03-01 13:12:17 +01:00
2011-03-05 11:12:03 +01:00
[defaults]
2021-06-03 20:55:03 +02:00
flags = SF_NONE
2011-03-05 11:12:03 +01:00
interval = 0
str = STR_NULL
2012-05-12 12:09:00 +02:00
strhelp = STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT
2011-03-06 16:51:44 +01:00
strval = STR_NULL
2021-05-24 11:47:37 +02:00
pre_cb = nullptr
post_cb = nullptr
2024-01-27 22:11:20 +01:00
str_cb = nullptr
help_cb = nullptr
val_cb = nullptr
2019-04-11 13:24:02 +02:00
load = nullptr
2019-01-26 02:48:40 +01:00
from = SL_MIN_VERSION
2011-03-05 11:20:49 +01:00
to = SL_MAX_VERSION
2012-11-08 11:04:00 +01:00
cat = SC_ADVANCED
2020-12-14 00:14:37 +01:00
extra = 0
2021-02-16 00:09:52 +01:00
startup = false
2011-03-05 11:12:03 +01:00
2011-03-03 22:04:17 +01:00
2021-05-22 19:00:43 +02:00
[SDTG_LIST]
2011-03-03 22:04:17 +01:00
name = ""diff_custom""
sdt_cmd = SDT_INTLIST
sle_cmd = SL_ARR
type = SLE_FILE_I16 | SLE_VAR_U16
2021-06-03 20:55:03 +02:00
flags = SF_NOT_IN_CONFIG
2011-03-03 22:04:17 +01:00
var = _old_diff_custom
length = 17
2021-05-22 19:00:43 +02:00
def = nullptr
2019-01-26 02:48:40 +01:00
to = SLV_4
2011-03-03 22:04:17 +01:00
2021-05-22 19:00:43 +02:00
[SDTG_LIST]
2011-03-03 22:04:17 +01:00
name = ""diff_custom""
sdt_cmd = SDT_INTLIST
sle_cmd = SL_ARR
type = SLE_UINT16
2021-06-03 20:55:03 +02:00
flags = SF_NOT_IN_CONFIG
2011-03-03 22:04:17 +01:00
var = _old_diff_custom
length = 18
2021-05-22 19:00:43 +02:00
def = nullptr
2019-04-11 13:24:02 +02:00
full = nullptr
2019-01-26 02:48:40 +01:00
from = SLV_4
2011-03-03 22:04:17 +01:00
2012-12-05 20:36:41 +01:00
[SDTG_VAR]
name = ""diff_level""
var = _old_diff_level
2011-03-03 22:04:17 +01:00
type = SLE_UINT8
2021-06-03 20:55:03 +02:00
flags = SF_NOT_IN_CONFIG
2012-12-05 20:34:45 +01:00
def = SP_CUSTOM
min = SP_EASY
max = SP_CUSTOM
2012-11-08 11:04:00 +01:00
cat = SC_BASIC
2011-03-03 22:04:17 +01:00
[SDT_OMANY]
var = locale.currency
type = SLE_UINT8
2021-06-03 20:55:03 +02:00
flags = SF_NO_NETWORK_SYNC
2011-03-03 22:04:17 +01:00
def = 0
2013-03-09 17:16:17 +01:00
max = CURRENCY_END - 1
2011-03-03 22:04:17 +01:00
full = _locale_currencies
2012-11-08 11:04:00 +01:00
cat = SC_BASIC
2011-03-03 22:04:17 +01:00
2013-06-29 11:47:18 +02:00
[SDTG_OMANY]
name = ""units""
var = _old_units
2011-03-03 22:04:17 +01:00
type = SLE_UINT8
2021-06-03 20:55:03 +02:00
flags = SF_NOT_IN_CONFIG
2011-03-03 22:04:17 +01:00
def = 1
max = 2
full = _locale_units
2012-11-08 11:04:00 +01:00
cat = SC_BASIC
2011-03-03 22:04:17 +01:00
# There are only 21 predefined town_name values (0-20), but you can have more with newgrf action F so allow
# these bigger values (21-255). Invalid values will fallback to english on use and (undefined string) in GUI.
[SDT_OMANY]
var = game_creation.town_name
type = SLE_UINT8
def = 0
max = 255
full = _town_names
2012-11-08 11:04:00 +01:00
cat = SC_BASIC
2011-03-03 22:04:17 +01:00
[SDT_OMANY]
var = game_creation.landscape
type = SLE_UINT8
def = 0
max = 3
full = _climates
load = ConvertLandscape
2012-11-08 11:04:00 +01:00
cat = SC_BASIC
2011-03-03 22:04:17 +01:00
2011-11-25 18:33:58 +01:00
[SDT_VAR]
var = game_creation.snow_line_height
type = SLE_UINT8
def = DEF_SNOWLINE_HEIGHT * TILE_HEIGHT
min = MIN_SNOWLINE_HEIGHT * TILE_HEIGHT
2021-03-01 13:35:39 +01:00
# "max" used to be MAX_SNOWLINE_HEIGHT * TILE_HEIGHT, but this would overflow the storage.
max = UINT8_MAX
2019-01-26 02:48:40 +01:00
to = SLV_22
2011-11-25 18:33:58 +01:00
2011-03-03 22:04:17 +01:00
[SDT_OMANY]
var = vehicle.road_side
type = SLE_UINT8
def = 1
max = 1
full = _roadsides
2012-11-08 11:04:00 +01:00
cat = SC_BASIC