diff --git a/src/saveload/extended_ver_sl.cpp b/src/saveload/extended_ver_sl.cpp index 1b6e1c6940..232a96681d 100644 --- a/src/saveload/extended_ver_sl.cpp +++ b/src/saveload/extended_ver_sl.cpp @@ -80,6 +80,7 @@ const SlxiSubChunkInfo _sl_xv_sub_chunk_infos[] = { { XSLFI_MORE_TOWN_GROWTH_RATES, XSCF_NULL, 1, 1, "more_town_growth_rates", NULL, NULL, NULL }, { XSLFI_MULTIPLE_DOCKS, XSCF_NULL, 1, 1, "multiple_docks", NULL, NULL, "DOCK" }, { XSLFI_TIMETABLE_EXTRA, XSCF_NULL, 1, 1, "timetable_extra", NULL, NULL, "ORDX" }, + { XSLFI_TRAIN_FLAGS_EXTRA, XSCF_NULL, 1, 1, "train_flags_extra", 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 e190b2b805..1afc8d1b86 100644 --- a/src/saveload/extended_ver_sl.h +++ b/src/saveload/extended_ver_sl.h @@ -54,6 +54,7 @@ enum SlXvFeatureIndex { XSLFI_MORE_TOWN_GROWTH_RATES, ///< More town growth rates XSLFI_MULTIPLE_DOCKS, ///< Multiple docks XSLFI_TIMETABLE_EXTRA, ///< Vehicle timetable extra fields + XSLFI_TRAIN_FLAGS_EXTRA, ///< Train flags field extra size XSLFI_RIFF_HEADER_60_BIT, ///< Size field in RIFF chunk header is 60 bit XSLFI_HEIGHT_8_BIT, ///< Map tile height is 8 bit instead of 4 bit, but savegame version may be before this became true in trunk diff --git a/src/saveload/vehicle_sl.cpp b/src/saveload/vehicle_sl.cpp index ebd2d77abb..a136d06187 100644 --- a/src/saveload/vehicle_sl.cpp +++ b/src/saveload/vehicle_sl.cpp @@ -744,8 +744,9 @@ const SaveLoad *GetVehicleDescription(VehicleType vt) SLE_VAR(Train, railtype, SLE_UINT8), SLE_VAR(Train, track, SLE_UINT8), - SLE_CONDVAR(Train, flags, SLE_FILE_U8 | SLE_VAR_U16, 2, 99), - SLE_CONDVAR(Train, flags, SLE_UINT16, 100, SL_MAX_VERSION), + SLE_CONDVAR(Train, flags, SLE_FILE_U8 | SLE_VAR_U32, 2, 99), + SLE_CONDVAR_X(Train, flags, SLE_FILE_U16 | SLE_VAR_U32, 100, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_TRAIN_FLAGS_EXTRA, 0, 0)), + SLE_CONDVAR_X(Train, flags, SLE_UINT32, 0, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_TRAIN_FLAGS_EXTRA, 1)), SLE_CONDNULL(2, 2, 59), SLE_CONDVAR(Train, wait_counter, SLE_UINT16, 136, SL_MAX_VERSION), diff --git a/src/train.h b/src/train.h index bd9522bfde..18e8671013 100644 --- a/src/train.h +++ b/src/train.h @@ -104,9 +104,10 @@ struct Train FINAL : public GroundVehicle { /* Link between the two ends of a multiheaded engine */ Train *other_multiheaded_part; + uint32 flags; + uint16 crash_anim_pos; ///< Crash animation counter. - uint16 flags; TrackBitsByte track; TrainForceProceedingByte force_proceed; RailTypeByte railtype;