summaryrefslogtreecommitdiff
path: root/src/saveload/afterload.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/saveload/afterload.cpp')
-rw-r--r--src/saveload/afterload.cpp52
1 files changed, 52 insertions, 0 deletions
diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp
index 33cff5aa3..7f6a7f700 100644
--- a/src/saveload/afterload.cpp
+++ b/src/saveload/afterload.cpp
@@ -2595,6 +2595,58 @@ bool AfterLoadGame()
}
}
+ if (IsSavegameVersionBefore(161)) {
+ /* Before savegame version 161, persistent storages were not stored in a pool. */
+
+ if (!IsSavegameVersionBefore(76)) {
+ Industry *ind;
+ FOR_ALL_INDUSTRIES(ind) {
+ assert(ind->psa != NULL);
+
+ /* Check if the old storage was empty. */
+ bool is_empty = true;
+ for (uint i = 0; i < sizeof(ind->psa->storage); i++) {
+ if (ind->psa->GetValue(i) != 0) {
+ is_empty = false;
+ break;
+ }
+ }
+
+ if (!is_empty) {
+ ind->psa->grfid = _industry_mngr.GetGRFID(ind->type);
+ } else {
+ delete ind->psa;
+ ind->psa = NULL;
+ }
+ }
+ }
+
+ if (!IsSavegameVersionBefore(145)) {
+ Station *st;
+ FOR_ALL_STATIONS(st) {
+ if (!st->facilities & FACIL_AIRPORT) continue;
+ assert(st->airport.psa != NULL);
+
+ /* Check if the old storage was empty. */
+ bool is_empty = true;
+ for (uint i = 0; i < sizeof(st->airport.psa->storage); i++) {
+ if (st->airport.psa->GetValue(i) != 0) {
+ is_empty = false;
+ break;
+ }
+ }
+
+ if (!is_empty) {
+ st->airport.psa->grfid = _airport_mngr.GetGRFID(st->airport.type);
+ } else {
+ delete st->airport.psa;
+ st->airport.psa = NULL;
+
+ }
+ }
+ }
+ }
+
/* Road stops is 'only' updating some caches */
AfterLoadRoadStops();
AfterLoadLabelMaps();