summaryrefslogtreecommitdiff
path: root/src/saveload
diff options
context:
space:
mode:
Diffstat (limited to 'src/saveload')
-rw-r--r--src/saveload/afterload.cpp4
-rw-r--r--src/saveload/oldloader_sl.cpp2
-rw-r--r--src/saveload/saveload.cpp2
-rw-r--r--src/saveload/saveload_internal.h1
-rw-r--r--src/saveload/station_sl.cpp20
5 files changed, 26 insertions, 3 deletions
diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp
index 281b3bc33..05c759846 100644
--- a/src/saveload/afterload.cpp
+++ b/src/saveload/afterload.cpp
@@ -1360,7 +1360,7 @@ bool AfterLoadGame()
RoadVehicle *rv;
FOR_ALL_ROADVEHICLES(rv) {
if (rv->state == 250 || rv->state == 251) {
- SetBit(rv->state, RVS_IS_STOPPING);
+ SetBit(rv->state, 2);
}
}
}
@@ -1959,6 +1959,8 @@ bool AfterLoadGame()
}
}
+ /* Road stops is 'only' updating some caches */
+ AfterLoadRoadStops();
AfterLoadLabelMaps();
GamelogPrintDebug(1);
diff --git a/src/saveload/oldloader_sl.cpp b/src/saveload/oldloader_sl.cpp
index 7acac2937..d97038f8e 100644
--- a/src/saveload/oldloader_sl.cpp
+++ b/src/saveload/oldloader_sl.cpp
@@ -190,7 +190,7 @@ void FixOldVehicles()
if (v->type == VEH_ROAD) {
RoadVehicle *rv = RoadVehicle::From(v);
if (rv->state != RVSB_IN_DEPOT && rv->state != RVSB_WORMHOLE) {
- ClrBit(rv->state, RVS_IS_STOPPING);
+ ClrBit(rv->state, 2);
}
}
diff --git a/src/saveload/saveload.cpp b/src/saveload/saveload.cpp
index 90be4172e..d07e7a336 100644
--- a/src/saveload/saveload.cpp
+++ b/src/saveload/saveload.cpp
@@ -47,7 +47,7 @@
#include "saveload_internal.h"
-extern const uint16 SAVEGAME_VERSION = 129;
+extern const uint16 SAVEGAME_VERSION = 130;
SavegameType _savegame_type; ///< type of savegame we are loading
diff --git a/src/saveload/saveload_internal.h b/src/saveload/saveload_internal.h
index 03912c673..04e01de33 100644
--- a/src/saveload/saveload_internal.h
+++ b/src/saveload/saveload_internal.h
@@ -29,6 +29,7 @@ const SaveLoad *GetBaseStationDescription();
void AfterLoadVehicles(bool part_of_load);
void AfterLoadStations();
+void AfterLoadRoadStops();
void AfterLoadLabelMaps();
void UpdateHousesAndTowns();
diff --git a/src/saveload/station_sl.cpp b/src/saveload/station_sl.cpp
index 6c52e7cf6..a25eb556d 100644
--- a/src/saveload/station_sl.cpp
+++ b/src/saveload/station_sl.cpp
@@ -15,6 +15,7 @@
#include "../roadstop_base.h"
#include "../vehicle_base.h"
#include "../newgrf_station.h"
+#include "../station_map.h"
#include "saveload.h"
#include "table/strings.h"
@@ -108,6 +109,25 @@ void AfterLoadStations()
}
}
+/**
+ * (Re)building of road stop caches after loading a savegame.
+ */
+void AfterLoadRoadStops()
+{
+ /* First construct the drive through entries */
+ RoadStop *rs;
+ FOR_ALL_ROADSTOPS(rs) {
+ if (IsDriveThroughStopTile(rs->xy)) rs->MakeDriveThrough();
+ }
+ /* And then rebuild the data in those entries */
+ FOR_ALL_ROADSTOPS(rs) {
+ if (!HasBit(rs->status, RoadStop::RSSFB_BASE_ENTRY)) continue;
+
+ rs->GetEntry(DIAGDIR_NE)->Rebuild(rs);
+ rs->GetEntry(DIAGDIR_NW)->Rebuild(rs);
+ }
+}
+
static const SaveLoad _roadstop_desc[] = {
SLE_VAR(RoadStop, xy, SLE_UINT32),
SLE_CONDNULL(1, 0, 44),