diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index 1c054364be..6694f18d36 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -3057,10 +3057,10 @@ bool AfterLoadGame() } } - if (SlXvIsFeaturePresent(XSLFI_SPRINGPP)) { + if (SlXvIsFeaturePresent(XSLFI_SPRINGPP, 1, 1)) { /* * Cost scaling changes: - * SpringPP divides all prices by the difficulty factor, effectively making things about 8 times cheaper. + * SpringPP v2.0.102 divides all prices by the difficulty factor, effectively making things about 8 times cheaper. * Adjust the inflation factor to compensate for this, as otherwise the game is unplayable on load if inflation has been running for a while. * To avoid making things too cheap, clamp the price inflation factor to no lower than the payment inflation factor. */ @@ -3078,8 +3078,8 @@ bool AfterLoadGame() if (SlXvIsFeaturePresent(XSLFI_SPRINGPP)) { /* - * Reject huge airports and helicopters aproaching oil rigs using the wrong aircraft movement data - * Annoyingly SpringPP has a bug where it uses the same ID for AT_INTERCONTINENTAL2 and AT_OILRIG + * Reject huge airports + * Annoyingly SpringPP v2.0.102 has a bug where it uses the same ID for AT_INTERCONTINENTAL2 and AT_OILRIG, */ Station *st; FOR_ALL_STATIONS(st) { @@ -3102,6 +3102,12 @@ bool AfterLoadGame() return false; } } + } + if (SlXvIsFeaturePresent(XSLFI_SPRINGPP, 1, 1)) { + /* + * Reject helicopters aproaching oil rigs using the wrong aircraft movement data + * Annoyingly SpringPP v2.0.102 has a bug where it uses the same ID for AT_INTERCONTINENTAL2 and AT_OILRIG + */ Aircraft *v; FOR_ALL_AIRCRAFT(v) { Station *st = GetTargetAirportIfValid(v); diff --git a/src/saveload/extended_ver_sl.cpp b/src/saveload/extended_ver_sl.cpp index dea6cb9a49..8e2cb39ff0 100644 --- a/src/saveload/extended_ver_sl.cpp +++ b/src/saveload/extended_ver_sl.cpp @@ -144,6 +144,20 @@ void SlXvCheckSpecialSavegameVersions() DEBUG(sl, 1, "Loading a SpringPP 2013 v2.0.102 savegame version %d as version 187", _sl_version); _sl_version = 187; + _sl_xv_feature_versions[XSLFI_SPRINGPP] = 1; + } else if (_sl_version == 221) { /* SL_SPRING_2013_v2_1_108 */ + DEBUG(sl, 1, "Loading a SpringPP 2013 v2.1.108 savegame version %d as version 188", _sl_version); + + _sl_version = 188; + _sl_xv_feature_versions[XSLFI_SPRINGPP] = 2; + } else if (_sl_version == 222) { /* SL_SPRING_2013_v2_1_147 */ + DEBUG(sl, 1, "Loading a SpringPP 2013 v2.1.147 savegame version %d as version 194", _sl_version); + + _sl_version = 194; + _sl_xv_feature_versions[XSLFI_SPRINGPP] = 3; + } + + if (_sl_xv_feature_versions[XSLFI_SPRINGPP]) { _sl_xv_feature_versions[XSLFI_RIFF_HEADER_60_BIT] = 1; _sl_xv_feature_versions[XSLFI_HEIGHT_8_BIT] = 1; _sl_xv_feature_versions[XSLFI_MIGHT_USE_PAX_SIGNALS] = 1; @@ -154,8 +168,6 @@ void SlXvCheckSpecialSavegameVersions() _sl_xv_feature_versions[XSLFI_INFRA_SHARING] = 1; _sl_xv_feature_versions[XSLFI_AUTO_TIMETABLE] = 1; - _sl_xv_feature_versions[XSLFI_SPRINGPP] = 1; - _sl_xv_discardable_chunk_ids.push_back('SNOW'); } } diff --git a/src/saveload/station_sl.cpp b/src/saveload/station_sl.cpp index 7ddd3ce0e9..15ad396dac 100644 --- a/src/saveload/station_sl.cpp +++ b/src/saveload/station_sl.cpp @@ -190,7 +190,8 @@ static const SaveLoad _old_station_desc[] = { SLE_VAR(Station, time_since_load, SLE_UINT8), SLE_VAR(Station, time_since_unload, SLE_UINT8), - SLE_VAR(Station, delete_ctr, SLE_UINT8), + SLE_CONDVAR_X(Station, delete_ctr, SLE_UINT8, 0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP, 0, 2)), + SLE_CONDVAR_X(Station, delete_ctr, SLE_FILE_U16 | SLE_VAR_U8, 0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP, 3)), SLE_VAR(Station, owner, SLE_UINT8), SLE_VAR(Station, facilities, SLE_UINT8), SLE_VAR(Station, airport.type, SLE_UINT8), @@ -270,6 +271,7 @@ const SaveLoad *GetGoodsDesc() SLE_CONDVAR(GoodsEntry, status, SLE_UINT8, 68, SL_MAX_VERSION), SLE_CONDNULL(2, 51, 67), SLE_VAR(GoodsEntry, time_since_pickup, SLE_UINT8), + SLE_CONDNULL_X(6, 0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP, 3)), SLE_VAR(GoodsEntry, rating, SLE_UINT8), SLEG_CONDVAR( _cargo_source, SLE_FILE_U8 | SLE_VAR_U16, 0, 6), SLEG_CONDVAR( _cargo_source, SLE_UINT16, 7, 67), @@ -393,7 +395,8 @@ static const SaveLoad _base_station_desc[] = { SLE_REF(BaseStation, town, REF_TOWN), SLE_VAR(BaseStation, string_id, SLE_STRINGID), SLE_STR(BaseStation, name, SLE_STR | SLF_ALLOW_CONTROL, 0), - SLE_VAR(BaseStation, delete_ctr, SLE_UINT8), + SLE_CONDVAR_X(Station, delete_ctr, SLE_UINT8, 0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP, 0, 2)), + SLE_CONDVAR_X(Station, delete_ctr, SLE_FILE_U16 | SLE_VAR_U8, 0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP, 3)), SLE_VAR(BaseStation, owner, SLE_UINT8), SLE_VAR(BaseStation, facilities, SLE_UINT8), SLE_VAR(BaseStation, build_date, SLE_INT32), diff --git a/src/saveload/vehicle_sl.cpp b/src/saveload/vehicle_sl.cpp index 0038bccf5f..7ca0ec76ad 100644 --- a/src/saveload/vehicle_sl.cpp +++ b/src/saveload/vehicle_sl.cpp @@ -645,7 +645,8 @@ const SaveLoad *GetVehicleDescription(VehicleType vt) SLE_VAR(Vehicle, day_counter, SLE_UINT8), SLE_VAR(Vehicle, tick_counter, SLE_UINT8), - SLE_CONDVAR(Vehicle, running_ticks, SLE_UINT8, 88, SL_MAX_VERSION), + SLE_CONDVAR_X(Vehicle, running_ticks, SLE_UINT8, 88, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP, 0, 2)), + SLE_CONDVAR_X(Vehicle, running_ticks, SLE_FILE_U16 | SLE_VAR_U8, 88, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP, 2)), SLE_VAR(Vehicle, cur_implicit_order_index, SLE_UINT8), SLE_CONDVAR(Vehicle, cur_real_order_index, SLE_UINT8, 158, SL_MAX_VERSION), @@ -732,6 +733,7 @@ const SaveLoad *GetVehicleDescription(VehicleType vt) SLE_CONDNULL(10, 2, 143), // old reserved space SLE_CONDNULL_X((8 + 8 + 2 + 2 + 4 + 4 + 1 + 1) * 30, 0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)), + SLE_CONDNULL_X((8 + 8 + 2 + 2 + 4 + 4 + 1 + 1) * 70, 0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP, 3)), SLE_CONDNULL_X(1, 0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)), SLE_CONDNULL_X(1, 0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)), SLE_CONDNULL_X(2, 0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)), diff --git a/src/table/company_settings.ini b/src/table/company_settings.ini index 5c839c2af7..463455c2c0 100644 --- a/src/table/company_settings.ini +++ b/src/table/company_settings.ini @@ -74,6 +74,11 @@ base = CompanySettings var = renew_keep_length def = false +;; allow_autoreplace_to_self +[SDT_NULL] +length = 1 +extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP, 2) + [SDT_BOOL] base = CompanySettings var = vehicle.servint_ispercent diff --git a/src/table/settings.ini b/src/table/settings.ini index f63fc001df..124e8b68ba 100644 --- a/src/table/settings.ini +++ b/src/table/settings.ini @@ -564,6 +564,10 @@ str = STR_CONFIG_SETTING_MAX_BRIDGE_LENGTH strhelp = STR_CONFIG_SETTING_MAX_BRIDGE_LENGTH_HELPTEXT strval = STR_CONFIG_SETTING_TILE_LENGTH +[SDT_XREF] +extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP, 2) +xref = ""construction.simulated_wormhole_signals"" + [SDT_VAR] base = GameSettings var = construction.max_bridge_height @@ -1446,6 +1450,11 @@ def = false str = STR_CONFIG_SETTING_MULTIPINDTOWN strhelp = STR_CONFIG_SETTING_MULTIPINDTOWN_HELPTEXT +;; economy.allow_automatic_industries +[SDT_NULL] +length = 1 +extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP, 3) + [SDT_NULL] length = 1 to = 140 @@ -1587,6 +1596,7 @@ extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP) length = 16 extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP) +; note that this has changed format in SpringPP 2.1.147 [SDT_XREF] xref = ""vehicle.pay_for_repair"" extver = SlXvFeatureTest(XSLFTO_AND, XSLFI_SPRINGPP)