From e91d0e49dc2d1cbfdb6f8376f01c90b3c400c227 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Sun, 2 Aug 2015 23:16:33 +0100 Subject: [PATCH] Improved breakdowns: Update save/load code --- src/saveload/afterload.cpp | 10 +++++++--- src/saveload/extended_ver_sl.cpp | 1 + src/saveload/extended_ver_sl.h | 1 + src/saveload/saveload.h | 1 - src/saveload/vehicle_sl.cpp | 4 ++-- src/table/settings.ini | 3 +-- 6 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index ac8fa33455..57396b0a98 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -2819,8 +2819,7 @@ bool AfterLoadGame() } /* Set some breakdown-related variables to the correct values. */ - if (IsSavegameVersionBefore(SL_IB)) { - + if (SlXvIsFeatureMissing(XLSFI_IMPROVED_BREAKDOWNS)) { Vehicle *v; FOR_ALL_VEHICLES(v) { switch(v->type) { @@ -2835,17 +2834,22 @@ bool AfterLoadGame() v->reliability = min(v->First()->reliability, e->reliability); } } + /* FALL THROUGH */ case VEH_ROAD: v->breakdown_chance = 128; break; + case VEH_SHIP: v->breakdown_chance = 64; break; + case VEH_AIRCRAFT: v->breakdown_chance = Clamp(64 + (AircraftVehInfo(v->engine_type)->max_speed >> 3), 0, 255); v->breakdown_severity = 40; break; - default: break; + + default: + break; } } } diff --git a/src/saveload/extended_ver_sl.cpp b/src/saveload/extended_ver_sl.cpp index 7127faf7b6..159a254f7e 100644 --- a/src/saveload/extended_ver_sl.cpp +++ b/src/saveload/extended_ver_sl.cpp @@ -45,6 +45,7 @@ std::vector _sl_xv_discardable_chunk_ids; ///< list of chunks static const uint32 _sl_xv_slxi_chunk_version = 0; ///< current version os SLXI chunk const SlxiSubChunkInfo _sl_xv_sub_chunk_infos[] = { + { XLSFI_IMPROVED_BREAKDOWNS, XSCF_NULL, 1, 1, "improved_breakdowns", NULL, NULL, NULL }, { XSLFI_NULL, XSCF_NULL, 0, 0, NULL, NULL, NULL, NULL },// This is the end marker }; diff --git a/src/saveload/extended_ver_sl.h b/src/saveload/extended_ver_sl.h index a7e9496944..3290a01b40 100644 --- a/src/saveload/extended_ver_sl.h +++ b/src/saveload/extended_ver_sl.h @@ -21,6 +21,7 @@ */ enum SlXvFeatureIndex { XSLFI_NULL = 0, ///< Unused value, to indicate that no extended feature test is in use + XLSFI_IMPROVED_BREAKDOWNS, ///< Improved breakdowns patch XSLFI_SIZE, ///< Total count of features, including null feature }; diff --git a/src/saveload/saveload.h b/src/saveload/saveload.h index 1c90859081..711d9ac7ac 100644 --- a/src/saveload/saveload.h +++ b/src/saveload/saveload.h @@ -92,7 +92,6 @@ enum SLRefType { /** Highest possible savegame version. */ #define SL_MAX_VERSION UINT16_MAX -#define SL_IB 250 /** Flags of a chunk. */ enum ChunkType { diff --git a/src/saveload/vehicle_sl.cpp b/src/saveload/vehicle_sl.cpp index 6aab04102c..cc0dd2b8ab 100644 --- a/src/saveload/vehicle_sl.cpp +++ b/src/saveload/vehicle_sl.cpp @@ -671,8 +671,8 @@ const SaveLoad *GetVehicleDescription(VehicleType vt) SLE_VAR(Vehicle, breakdown_delay, SLE_UINT8), SLE_VAR(Vehicle, breakdowns_since_last_service, SLE_UINT8), SLE_VAR(Vehicle, breakdown_chance, SLE_UINT8), - SLE_CONDVAR(Vehicle, breakdown_type, SLE_UINT8, SL_IB, SL_MAX_VERSION), - SLE_CONDVAR(Vehicle, breakdown_severity, SLE_UINT8, SL_IB, SL_MAX_VERSION), + SLE_CONDVAR_X(Vehicle, breakdown_type, SLE_UINT8, 0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XLSFI_IMPROVED_BREAKDOWNS)), + SLE_CONDVAR_X(Vehicle, breakdown_severity, SLE_UINT8, 0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XLSFI_IMPROVED_BREAKDOWNS)), SLE_CONDVAR(Vehicle, build_year, SLE_FILE_U8 | SLE_VAR_I32, 0, 30), SLE_CONDVAR(Vehicle, build_year, SLE_INT32, 31, SL_MAX_VERSION), diff --git a/src/table/settings.ini b/src/table/settings.ini index b3a064f9b7..51de26297b 100644 --- a/src/table/settings.ini +++ b/src/table/settings.ini @@ -1141,11 +1141,10 @@ cat = SC_BASIC [SDT_BOOL] base = GameSettings var = vehicle.improved_breakdowns -from = SL_IB guiflags = SGF_NO_NETWORK def = false str = STR_CONFIG_SETTING_IMPROVED_BREAKDOWNS - +patxname = ""improved_breakdowns.vehicle.improved_breakdowns"" ; station.join_stations [SDT_NULL]