diff --git a/README.md b/README.md index e9dd9e31ff..2eaec3abcf 100644 --- a/README.md +++ b/README.md @@ -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. diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index 2a33225270..4528776d01 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -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); diff --git a/src/saveload/extended_ver_sl.cpp b/src/saveload/extended_ver_sl.cpp index d23116ffc3..478b01d523 100644 --- a/src/saveload/extended_ver_sl.cpp +++ b/src/saveload/extended_ver_sl.cpp @@ -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 _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 */ diff --git a/src/saveload/map_sl.cpp b/src/saveload/map_sl.cpp index e9f4ebecc3..94432a58f5 100644 --- a/src/saveload/map_sl.cpp +++ b/src/saveload/map_sl.cpp @@ -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 }, diff --git a/src/saveload/saveload.cpp b/src/saveload/saveload.cpp index 2a2287a599..05ed63299c 100644 --- a/src/saveload/saveload.cpp +++ b/src/saveload/saveload.cpp @@ -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); diff --git a/src/saveload/saveload.h b/src/saveload/saveload.h index 2f4d983fb7..b747dfb332 100644 --- a/src/saveload/saveload.h +++ b/src/saveload/saveload.h @@ -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, }; diff --git a/src/saveload/town_sl.cpp b/src/saveload/town_sl.cpp index b34dfe2096..64107bbf86 100644 --- a/src/saveload/town_sl.cpp +++ b/src/saveload/town_sl.cpp @@ -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), diff --git a/src/saveload/vehicle_sl.cpp b/src/saveload/vehicle_sl.cpp index fd7f45c274..c872c19fb6 100644 --- a/src/saveload/vehicle_sl.cpp +++ b/src/saveload/vehicle_sl.cpp @@ -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)), diff --git a/src/table/settings.ini b/src/table/settings.ini index ed6b6c6cb2..806c91e218 100644 --- a/src/table/settings.ini +++ b/src/table/settings.ini @@ -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