From 6c81f8f35b24e4b4414e5d180ff678eb531bcded Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Sat, 1 Aug 2015 21:07:14 +0100 Subject: [PATCH] Add departure boards and timetable tick status to SLXI info. Implementing converting timetable start date to/from ticks/days in afterload code. --- src/saveload/afterload.cpp | 17 +++++++++++++++++ src/saveload/extended_ver_sl.cpp | 3 +++ src/saveload/extended_ver_sl.h | 2 ++ 3 files changed, 22 insertions(+) diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index 9690481154..8da5546892 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -2968,6 +2968,23 @@ bool AfterLoadGame() #endif } + if (SlXvIsFeaturePresent(XSLFI_TIMETABLES_START_TICKS) && WALLCLOCK_NETWORK_COMPATIBLE) { + // savegame timetable start is in ticks, but we want it in days, fix it up + Vehicle *v; + FOR_ALL_VEHICLES(v) { + if (v->timetable_start != 0) { + v->timetable_start /= DAY_TICKS; + } + } + } else if (SlXvIsFeatureMissing(XSLFI_TIMETABLES_START_TICKS) && (!WALLCLOCK_NETWORK_COMPATIBLE)) { + // savegame timetable start is in days, but we want it in ticks, fix it up + Vehicle *v; + FOR_ALL_VEHICLES(v) { + if (v->timetable_start != 0) { + v->timetable_start *= DAY_TICKS; + } + } + } /* Station acceptance is some kind of cache */ if (IsSavegameVersionBefore(127)) { diff --git a/src/saveload/extended_ver_sl.cpp b/src/saveload/extended_ver_sl.cpp index 7127faf7b6..2a4c5574e7 100644 --- a/src/saveload/extended_ver_sl.cpp +++ b/src/saveload/extended_ver_sl.cpp @@ -32,6 +32,7 @@ #include "../debug.h" #include "saveload.h" #include "extended_ver_sl.h" +#include "../timetable.h" #include @@ -45,6 +46,8 @@ 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[] = { + { XSLFI_DEPARTURE_BOARDS, XSCF_IGNORABLE_UNKNOWN, 1, 1, "departure_boards", NULL, NULL, NULL }, + { XSLFI_TIMETABLES_START_TICKS, XSCF_NULL, WALLCLOCK_NETWORK_COMPATIBLE ? 0 : 1, 1, "timetable_start_ticks", 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..7bcbc5a591 100644 --- a/src/saveload/extended_ver_sl.h +++ b/src/saveload/extended_ver_sl.h @@ -21,6 +21,8 @@ */ enum SlXvFeatureIndex { XSLFI_NULL = 0, ///< Unused value, to indicate that no extended feature test is in use + XSLFI_DEPARTURE_BOARDS, ///< Departure boards patch, in ticks mode + XSLFI_TIMETABLES_START_TICKS, ///< Timetable start time is in ticks, instead of days (from departure boards patch) XSLFI_SIZE, ///< Total count of features, including null feature };