Add support for loading ChillPP v8 savegames

pull/128/head
Jonathan G Rennison 4 years ago
parent 223d542bf1
commit 4936b3ba51

@ -214,7 +214,8 @@ See [jgrpp-changelog.md](jgrpp-changelog.md) for changelog.
* Savegames from other patched versions are not loadable in this patchpack except for savegames from:
* The *tracerestrict* branch ([routing restrictions patch](http://www.tt-forums.net/viewtopic.php?f=33&t=73397))
* The [Spring 2013 Patch Pack](http://www.tt-forums.net/viewtopic.php?f=33&t=66892) v2.0 - v2.4 (subject to caveats, see below)
* [Joker's Patch Pack](https://www.tt-forums.net/viewtopic.php?f=33&t=74365) v1.19 - v1.27 (subject to caveats, see below)
* [Joker's Patch Pack](https://www.tt-forums.net/viewtopic.php?f=33&t=74365) v1.19 - v1.27 (subject to caveats, see below)
* [Chill's Patch Pack](https://www.tt-forums.net/viewtopic.php?f=33&t=47622) v8 and v14.7 (subject to caveats, see below)
* Miscellaneous
* Various improvements to the crash logger.
@ -284,6 +285,13 @@ See [jgrpp-changelog.md](jgrpp-changelog.md) for changelog.
* Various vehicle separation settings and partially-automatic modes are not supported.
* Rail ageing/grass on tracks, trip histories, waiting cargo histories, station cargo punishment and other features not in this patch pack are dropped/ignored.
#### Caveats for loading savegames from [Chill's Patch Pack](https://www.tt-forums.net/viewtopic.php?f=33&t=47622):
* This is not guaranteed to be bug free
* Speed signals are cleared, leaving ordinary signals
* Various vehicle, economy, town and other settings are not supported
* Link graph data and settings are cleared
* Train stuck counters, traffic lights and other features not in this patch pack are dropped/ignored.
#### A note on branches
Many features have two branches, the *feature* branches are just the raw features, without any modified savegame code.

@ -3118,7 +3118,7 @@ bool AfterLoadGame()
}
/* This triggers only when old snow_lines were copied into the snow_line_height. */
if (IsSavegameVersionBefore(SLV_164) && _settings_game.game_creation.snow_line_height >= MIN_SNOWLINE_HEIGHT * TILE_HEIGHT) {
if (IsSavegameVersionBefore(SLV_164) && _settings_game.game_creation.snow_line_height >= MIN_SNOWLINE_HEIGHT * TILE_HEIGHT && SlXvIsFeatureMissing(XSLFI_CHILLPP)) {
_settings_game.game_creation.snow_line_height /= TILE_HEIGHT;
}
@ -3449,7 +3449,7 @@ bool AfterLoadGame()
_jokerpp_auto_separation.clear();
_jokerpp_non_auto_separation.clear();
}
if (SlXvIsFeaturePresent(XSLFI_CHILLPP)) {
if (SlXvIsFeaturePresent(XSLFI_CHILLPP, SL_CHILLPP_232)) {
for (TileIndex t = 0; t < map_size; t++) {
if (IsTileType(t, MP_RAILWAY) && HasSignals(t)) {
if (GetSignalType(t, TRACK_LOWER) == 7) SetSignalType(t, TRACK_LOWER, SIGTYPE_NORMAL);

@ -50,6 +50,7 @@ uint16 _sl_xv_feature_versions[XSLFI_SIZE]; ///< array of all kn
bool _sl_is_ext_version; ///< is this an extended savegame version, with more info in the SLXI chunk?
bool _sl_is_faked_ext; ///< is this a faked extended savegame version, with no SLXI chunk? See: SlXvCheckSpecialSavegameVersions.
bool _sl_maybe_springpp; ///< is this possibly a SpringPP savegame?
bool _sl_maybe_chillpp; ///< is this possibly a ChillPP v8 savegame?
std::vector<uint32> _sl_xv_discardable_chunk_ids; ///< list of chunks IDs which we can discard if no chunk loader exists
static const uint32 _sl_xv_slxi_chunk_version = 0; ///< current version of SLXI chunk
@ -176,6 +177,7 @@ void SlXvResetState()
_sl_is_ext_version = false;
_sl_is_faked_ext = false;
_sl_maybe_springpp = false;
_sl_maybe_chillpp = false;
_sl_xv_discardable_chunk_ids.clear();
memset(_sl_xv_feature_versions, 0, sizeof(_sl_xv_feature_versions));
}
@ -256,6 +258,10 @@ bool SlXvCheckSpecialSavegameVersions()
_sl_is_faked_ext = true;
return true;
}
if (_sl_version == SL_CHILLPP_201) { /* 232 - 233 */
_sl_maybe_chillpp = true;
return true;
}
if (_sl_version >= SL_CHILLPP_232 && _sl_version <= SL_CHILLPP_233) { /* 232 - 233 */
DEBUG(sl, 1, "Loading a ChillPP v14.7 savegame version %d as version 160", _sl_version);
_sl_xv_feature_versions[XSLFI_CHILLPP] = _sl_version;
@ -349,6 +355,24 @@ void SlXvSpringPPSpecialSavegameVersions()
}
}
void SlXvChillPPSpecialSavegameVersions()
{
extern SaveLoadVersion _sl_version;
if (_sl_version == SL_CHILLPP_201) { /* 201 */
DEBUG(sl, 1, "Loading a ChillPP v8 savegame version %d as version 143", _sl_version);
_sl_xv_feature_versions[XSLFI_CHILLPP] = _sl_version;
_sl_xv_feature_versions[XSLFI_ZPOS_32_BIT] = 1;
_sl_xv_feature_versions[XSLFI_TOWN_CARGO_ADJ] = 1;
_sl_xv_feature_versions[XSLFI_AUTO_TIMETABLE] = 1;
_sl_xv_feature_versions[XSLFI_SIG_TUNNEL_BRIDGE] = 1;
_sl_xv_feature_versions[XSLFI_RAIL_AGEING] = 1;
_sl_xv_discardable_chunk_ids.push_back('LGRP');
_sl_version = SLV_143;
_sl_is_faked_ext = true;
}
}
/**
* Return true if this chunk has been marked as discardable
*/

@ -23,6 +23,8 @@
static uint32 _map_dim_x;
static uint32 _map_dim_y;
extern bool _sl_maybe_chillpp;
static const SaveLoadGlobVarList _map_dimensions[] = {
SLEG_CONDVAR(_map_dim_x, SLE_UINT32, SLV_6, SL_MAX_VERSION),
SLEG_CONDVAR(_map_dim_y, SLE_UINT32, SLV_6, SL_MAX_VERSION),
@ -65,8 +67,24 @@ static void Load_MAPT()
}
}
static void Check_MAPH_common()
{
if (_sl_maybe_chillpp && (SlGetFieldLength() == 0 || SlGetFieldLength() == _map_dim_x * _map_dim_y * 2)) {
_sl_maybe_chillpp = false;
extern void SlXvChillPPSpecialSavegameVersions();
SlXvChillPPSpecialSavegameVersions();
}
}
static void Check_MAPH()
{
Check_MAPH_common();
SlSkipBytes(SlGetFieldLength());
}
static void Load_MAPH()
{
Check_MAPH_common();
if (SlXvIsFeaturePresent(XSLFI_CHILLPP)) {
if (SlGetFieldLength() != 0) {
_sl_xv_feature_versions[XSLFI_HEIGHT_8_BIT] = 2;
@ -282,7 +300,7 @@ static void Save_WMAP()
extern const ChunkHandler _map_chunk_handlers[] = {
{ 'MAPS', Save_MAPS, Load_MAPS, nullptr, Check_MAPS, CH_RIFF },
{ 'MAPT', nullptr, Load_MAPT, nullptr, nullptr, CH_RIFF },
{ 'MAPH', nullptr, Load_MAPH, nullptr, nullptr, CH_RIFF },
{ 'MAPH', nullptr, Load_MAPH, nullptr, Check_MAPH, CH_RIFF },
{ 'MAPO', nullptr, Load_MAP1, nullptr, nullptr, CH_RIFF },
{ 'MAP2', nullptr, Load_MAP2, nullptr, nullptr, CH_RIFF },
{ 'M3LO', nullptr, Load_MAP3, nullptr, nullptr, CH_RIFF },

@ -82,6 +82,7 @@ bool _do_autosave; ///< are we doing an autosave at the moment?
extern bool _sl_is_ext_version;
extern bool _sl_maybe_springpp;
extern bool _sl_maybe_chillpp;
/** What are we currently doing? */
enum SaveLoadAction {
@ -3190,7 +3191,8 @@ static SaveOrLoadResult DoLoad(LoadFilter *reader, bool load_check)
special_version = SlXvCheckSpecialSavegameVersions();
}
DEBUG(sl, 1, "Loading savegame version %d%s%s", _sl_version, _sl_is_ext_version ? " (extended)" : "", _sl_maybe_springpp ? " which might be SpringPP" : "");
DEBUG(sl, 1, "Loading savegame version %d%s%s%s", _sl_version, _sl_is_ext_version ? " (extended)" : "",
_sl_maybe_springpp ? " which might be SpringPP" : "", _sl_maybe_chillpp ? " which might be ChillPP" : "");
/* Is the version higher than the current? */
if (_sl_version > SAVEGAME_VERSION && !special_version) SlError(STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME);

@ -328,6 +328,7 @@ enum SaveLoadVersion : uint16 {
SL_JOKER_1_25 = 284,
SL_JOKER_1_26 = 285,
SL_JOKER_1_27 = 286,
SL_CHILLPP_201 = 201,
SL_CHILLPP_232 = 232,
SL_CHILLPP_233 = 233,
};

@ -160,32 +160,32 @@ static const SaveLoad _town_desc[] = {
SLE_CONDVAR(Town, supplied[CT_PASSENGERS].new_act, SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_9),
SLE_CONDVAR(Town, supplied[CT_MAIL].new_act, SLE_FILE_U16 | SLE_VAR_U32, SL_MIN_VERSION, SLV_9),
SLE_CONDNULL_X(4, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP)),
SLE_CONDNULL_X(4, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP, SL_CHILLPP_232)),
SLE_CONDVAR(Town, supplied[CT_PASSENGERS].old_max, SLE_UINT32, SLV_9, SLV_165),
SLE_CONDNULL_X(4, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP)),
SLE_CONDNULL_X(4, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP, SL_CHILLPP_232)),
SLE_CONDVAR(Town, supplied[CT_MAIL].old_max, SLE_UINT32, SLV_9, SLV_165),
SLE_CONDNULL_X(8, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP)),
SLE_CONDNULL_X(8, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP, SL_CHILLPP_232)),
SLE_CONDVAR(Town, supplied[CT_PASSENGERS].new_max, SLE_UINT32, SLV_9, SLV_165),
SLE_CONDNULL_X(4, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP)),
SLE_CONDNULL_X(4, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP, SL_CHILLPP_232)),
SLE_CONDVAR(Town, supplied[CT_MAIL].new_max, SLE_UINT32, SLV_9, SLV_165),
SLE_CONDNULL_X(8, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP)),
SLE_CONDNULL_X(8, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP, SL_CHILLPP_232)),
SLE_CONDVAR(Town, supplied[CT_PASSENGERS].old_act, SLE_UINT32, SLV_9, SLV_165),
SLE_CONDNULL_X(4, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP)),
SLE_CONDNULL_X(4, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP, SL_CHILLPP_232)),
SLE_CONDVAR(Town, supplied[CT_MAIL].old_act, SLE_UINT32, SLV_9, SLV_165),
SLE_CONDNULL_X(4, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP)),
SLE_CONDNULL_X(4, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP, SL_CHILLPP_232)),
SLE_CONDVAR(Town, supplied[CT_PASSENGERS].new_act, SLE_UINT32, SLV_9, SLV_165),
SLE_CONDNULL_X(4, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP)),
SLE_CONDNULL_X(4, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP, SL_CHILLPP_232)),
SLE_CONDVAR(Town, supplied[CT_MAIL].new_act, SLE_UINT32, SLV_9, SLV_165),
SLE_CONDNULL(2, SL_MIN_VERSION, SLV_164), ///< pct_pass_transported / pct_mail_transported, now computed on the fly
SLE_CONDNULL_X(3, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP)),
SLE_CONDNULL_X(3, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP, SL_CHILLPP_232)),
SLE_CONDVAR(Town, received[TE_FOOD].old_act, SLE_UINT16, SL_MIN_VERSION, SLV_165),
SLE_CONDVAR(Town, received[TE_WATER].old_act, SLE_UINT16, SL_MIN_VERSION, SLV_165),
SLE_CONDNULL_X(2, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP)),
SLE_CONDNULL_X(2, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP, SL_CHILLPP_232)),
SLE_CONDVAR(Town, received[TE_FOOD].new_act, SLE_UINT16, SL_MIN_VERSION, SLV_165),
SLE_CONDVAR(Town, received[TE_WATER].new_act, SLE_UINT16, SL_MIN_VERSION, SLV_165),
SLE_CONDNULL_X(2, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP)),
SLE_CONDNULL_X(2, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP, SL_CHILLPP_232)),
SLE_CONDARR(Town, goal, SLE_UINT32, NUM_TE, SLV_165, SL_MAX_VERSION),
@ -208,7 +208,7 @@ static const SaveLoad _town_desc[] = {
SLE_VAR(Town, road_build_months, SLE_UINT8),
SLE_CONDVAR(Town, exclusivity, SLE_UINT8, SLV_2, SL_MAX_VERSION),
SLE_CONDNULL_X(1, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP)),
SLE_CONDNULL_X(1, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP, SL_CHILLPP_232)),
SLE_CONDVAR(Town, exclusive_counter, SLE_UINT8, SLV_2, SL_MAX_VERSION),
SLE_CONDVAR(Town, larger_town, SLE_BOOL, SLV_56, SL_MAX_VERSION),

@ -654,7 +654,7 @@ const SaveLoad *GetVehicleDescription(VehicleType vt)
SLE_VAR(Vehicle, vehstatus, SLE_UINT8),
SLE_CONDVAR(Vehicle, last_station_visited, SLE_FILE_U8 | SLE_VAR_U16, SL_MIN_VERSION, SLV_5),
SLE_CONDVAR(Vehicle, last_station_visited, SLE_UINT16, SLV_5, SL_MAX_VERSION),
SLE_CONDVAR_X(Vehicle, last_loading_station, SLE_UINT16, SLV_182, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_OR, XSLFI_CHILLPP)),
SLE_CONDVAR_X(Vehicle, last_loading_station, SLE_UINT16, SLV_182, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_OR, XSLFI_CHILLPP, SL_CHILLPP_232)),
SLE_VAR(Vehicle, cargo_type, SLE_UINT8),
SLE_CONDVAR(Vehicle, cargo_subtype, SLE_UINT8, SLV_35, SL_MAX_VERSION),
@ -800,7 +800,7 @@ const SaveLoad *GetVehicleDescription(VehicleType vt)
SLE_CONDNULL(2, SLV_2, SLV_20),
SLE_CONDVAR(Train, gv_flags, SLE_UINT16, SLV_139, SL_MAX_VERSION),
SLE_CONDNULL_X(2 , SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP)),
SLE_CONDNULL_X(2 , SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP, SL_CHILLPP_232)),
SLE_CONDNULL(11, SLV_2, SLV_144), // old reserved space
SLE_CONDVAR_X(Train, reverse_distance, SLE_UINT16, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_REVERSE_AT_WAYPOINT)),
SLE_CONDVAR_X(Train, speed_restriction, SLE_UINT16, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SPEED_RESTRICTION)),

@ -448,9 +448,14 @@ length = 1
from = SLV_97
to = SLV_164
;;game_creation.desert_amount + tree_line
;;game_creation.desert_amount
[SDT_NULL]
length = 3
length = 1
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP, SL_CHILLPP_232)
;;game_creation.tree_line
[SDT_NULL]
length = 2
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP)
[SDT_OMANY]
@ -1211,7 +1216,7 @@ extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_JOKERPP)
;; pf.back_of_one_way_pbs_waiting_point
[SDT_NULL]
length = 1
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP)
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP, SL_CHILLPP_232)
[SDT_VAR]
base = GameSettings
@ -1253,7 +1258,7 @@ to = SLV_159
;; order.gotodepot
[SDT_NULL]
length = 1
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP)
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP, SL_CHILLPP_232)
; path finder
@ -1513,17 +1518,18 @@ extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)
;; ticks_per_minute
[SDT_NULL]
length = 1
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP)
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP, SL_CHILLPP_232)
; order.timetabling
[SDT_NULL]
length = 1
from = SLV_67
to = SLV_159
extver = SlXvFeatureTest(XSLFTO_OR, XSLFI_CHILLPP, SL_CHILLPP_232)
;; order.timetabling, order.timetable_automated, order.timetable_separation
;; order.timetable_automated, order.timetable_separation
[SDT_NULL]
length = 3
length = 2
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP)
[SDT_VAR]
@ -1569,7 +1575,7 @@ extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)
[SDT_XREF]
xref = ""vehicle.improved_breakdowns""
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP)
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP, SL_CHILLPP_232)
[SDT_BOOL]
base = GameSettings
@ -1940,7 +1946,7 @@ extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP, 4)
;; construction.extra_industry_placement_logic
[SDT_NULL]
length = 1
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP)
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP, SL_CHILLPP_232)
[SDT_NULL]
length = 1
@ -2024,9 +2030,14 @@ strhelp = STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT
strval = STR_JUST_COMMA
cat = SC_BASIC
;;game_creation.desert_amount + tree_line
;;game_creation.desert_amount
[SDT_NULL]
length = 3
length = 1
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP, SL_CHILLPP_232)
;;game_creation.tree_line
[SDT_NULL]
length = 2
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP)
;;game_creation.desert_amount
@ -2037,6 +2048,7 @@ extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_JOKERPP)
[SDT_NULL]
length = 4
to = SLV_144
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP, 0, 0)
[SDT_VAR]
base = GameSettings
@ -2218,7 +2230,7 @@ strval = STR_JUST_COMMA
;; economy.town_growth_cargo, economy.town_pop_need_goods, economy.larger_town_growth_cargo, economy.larger_town_pop_need_goods
[SDT_NULL]
length = 10
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP)
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP, SL_CHILLPP_232)
[SDT_BOOL]
base = GameSettings
@ -2286,39 +2298,39 @@ extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)
[SDT_XREF]
xref = ""economy.infrastructure_sharing[0]""
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP)
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP, SL_CHILLPP_232)
[SDT_XREF]
xref = ""economy.infrastructure_sharing[1]""
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP)
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP, SL_CHILLPP_232)
[SDT_XREF]
xref = ""economy.infrastructure_sharing[2]""
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP)
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP, SL_CHILLPP_232)
[SDT_XREF]
xref = ""economy.infrastructure_sharing[3]""
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP)
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP, SL_CHILLPP_232)
[SDT_XREF]
xref = ""economy.sharing_fee[0]""
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP)
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP, SL_CHILLPP_232)
[SDT_XREF]
xref = ""economy.sharing_fee[1]""
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP)
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP, SL_CHILLPP_232)
[SDT_XREF]
xref = ""economy.sharing_fee[2]""
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP)
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP, SL_CHILLPP_232)
[SDT_XREF]
xref = ""economy.sharing_fee[3]""
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP)
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP, SL_CHILLPP_232)
[SDT_XREF]
xref = ""economy.sharing_payment_in_debt""
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP)
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP, SL_CHILLPP_232)
[SDT_VAR]
base = GameSettings
@ -2612,14 +2624,23 @@ cat = SC_BASIC
[SDT_XREF]
xref = ""economy.infrastructure_maintenance""
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP)
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP, SL_CHILLPP_232)
;; construction.traffic_lights...
[SDT_NULL]
length = 6
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP, SL_CHILLPP_232)
;; linkgraph...
[SDT_NULL]
length = 18
length = 11
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP)
;; linkgraph.no_overload_links
[SDT_NULL]
length = 1
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP, SL_CHILLPP_232)
[SDT_VAR]
base = GameSettings
var = economy.random_road_reconstruction
@ -2814,7 +2835,7 @@ extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)
# pf.npf.npf_road_trafficlight_penalty
[SDT_NULL]
length = 4
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP)
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP, SL_CHILLPP_232)
[SDT_VAR]
base = GameSettings
@ -3129,7 +3150,7 @@ extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)
# pf.yapf.road_trafficlight_penalty
[SDT_NULL]
length = 4
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP)
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP, SL_CHILLPP_232)
[SDT_VAR]
base = GameSettings
@ -3381,7 +3402,7 @@ cat = SC_BASIC
;; construction.tree_placement_drag_limit, construction.ingame_tree_line_height, construction.tree_growth_rate
[SDT_NULL]
length = 3
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP)
extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_CHILLPP, SL_CHILLPP_232)
[SDT_BOOL]
base = GameSettings

Loading…
Cancel
Save