From 699c7e4c9da5f29efc66e06768f7879ef09f9e81 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sat, 20 Apr 2024 10:24:35 +0100 Subject: [PATCH] Fix 3de8853e29: Industries accept/produce no cargo for pre-SLV_78 saves. (#12508) Industry accepted/produced was trimmed too early for original and pre-SLV_78 saves, as cargo type was not stored per slot so all slots look invalid to the trim function. --- src/saveload/afterload.cpp | 8 ++++++++ src/saveload/industry_sl.cpp | 1 - src/saveload/oldloader_sl.cpp | 1 - 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index 88dee51b9c..43f9c79253 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -1722,6 +1722,14 @@ bool AfterLoadGame() } } + /* Industry cargo slots were fixed size before (and including) SLV_VEHICLE_ECONOMY_AGE (either 2/3 or 16/16), + * after this they are dynamic. Trim excess slots. */ + if (IsSavegameVersionBeforeOrAt(SLV_VEHICLE_ECONOMY_AGE)) { + for (Industry *i : Industry::Iterate()) { + TrimIndustryAcceptedProduced(i); + } + } + /* Before version 81, the density of grass was always stored as zero, and * grassy trees were always drawn fully grassy. Furthermore, trees on rough * land used to have zero density, now they have full density. Therefore, diff --git a/src/saveload/industry_sl.cpp b/src/saveload/industry_sl.cpp index 342f03d807..ad3f0dc7eb 100644 --- a/src/saveload/industry_sl.cpp +++ b/src/saveload/industry_sl.cpp @@ -266,7 +266,6 @@ struct INDYChunkHandler : ChunkHandler { LoadMoveAcceptsProduced(i, INDUSTRY_NUM_INPUTS, INDUSTRY_NUM_OUTPUTS); } Industry::IncIndustryTypeCount(i->type); - TrimIndustryAcceptedProduced(i); } } diff --git a/src/saveload/oldloader_sl.cpp b/src/saveload/oldloader_sl.cpp index 099a2c9c29..e5127b9ad3 100644 --- a/src/saveload/oldloader_sl.cpp +++ b/src/saveload/oldloader_sl.cpp @@ -875,7 +875,6 @@ static bool LoadOldIndustry(LoadgameState *ls, int num) } Industry::IncIndustryTypeCount(i->type); - TrimIndustryAcceptedProduced(i); } else { delete i; }