From c99eaf72b79abbf5a8a148f51a5555a7c7d38132 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Sun, 3 Oct 2021 15:06:58 +0100 Subject: [PATCH] Fix #9591: Update station docking tiles upon placing a water object on a docking tile (#9594) See: https://github.com/OpenTTD/OpenTTD/issues/9591 See: https://github.com/OpenTTD/OpenTTD/pull/9594 Non-extended savegame bump to be applied later (cherry picked from commit e404d16929991d1eddd9d37b859d3813be7e18ed) # Conflicts: # src/object_cmd.cpp # src/saveload/afterload.cpp # src/saveload/saveload.h --- src/object_cmd.cpp | 3 +++ src/saveload/afterload.cpp | 2 +- src/saveload/extended_ver_sl.cpp | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/object_cmd.cpp b/src/object_cmd.cpp index 299c92407b..f8fd241632 100644 --- a/src/object_cmd.cpp +++ b/src/object_cmd.cpp @@ -32,6 +32,7 @@ #include "date_func.h" #include "newgrf_debug.h" #include "vehicle_func.h" +#include "station_func.h" #include "table/strings.h" #include "table/object_land.h" @@ -122,7 +123,9 @@ void BuildObject(ObjectType type, TileIndex tile, CompanyID owner, Town *town, u Company::Get(owner)->infrastructure.water++; DirtyCompanyInfrastructureWindows(owner); } + bool remove = IsDockingTile(t); MakeObject(t, owner, o->index, wc, Random()); + if (remove) RemoveDockingTile(t); MarkTileDirtyByTile(t, VMDF_NOT_MAP_MODE); } diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index 706b16ff7e..f03f999a21 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -3743,7 +3743,7 @@ bool AfterLoadGame() } } - if (IsSavegameVersionUntil(SLV_ENDING_YEAR) || !SlXvIsFeaturePresent(XSLFI_MULTIPLE_DOCKS, 2) || !SlXvIsFeaturePresent(XSLFI_DOCKING_CACHE_VER, 1)) { + if (IsSavegameVersionUntil(SLV_ENDING_YEAR) || !SlXvIsFeaturePresent(XSLFI_MULTIPLE_DOCKS, 2) || !SlXvIsFeaturePresent(XSLFI_DOCKING_CACHE_VER, 2)) { /* Update station docking tiles. Was only needed for pre-SLV_MULTITLE_DOCKS * savegames, but a bug in docking tiles touched all savegames between * SLV_MULTITILE_DOCKS and SLV_ENDING_YEAR. */ diff --git a/src/saveload/extended_ver_sl.cpp b/src/saveload/extended_ver_sl.cpp index ae53343536..863d80c960 100644 --- a/src/saveload/extended_ver_sl.cpp +++ b/src/saveload/extended_ver_sl.cpp @@ -131,7 +131,7 @@ const SlxiSubChunkInfo _sl_xv_sub_chunk_infos[] = { { XSLFI_FLOW_STAT_FLAGS, XSCF_NULL, 1, 1, "flow_stat_flags", nullptr, nullptr, nullptr }, { XSLFI_SPEED_RESTRICTION, XSCF_NULL, 1, 1, "speed_restriction", nullptr, nullptr, "VESR" }, { XSLFI_STATION_GOODS_EXTRA, XSCF_NULL, 1, 1, "station_goods_extra", nullptr, nullptr, nullptr }, - { XSLFI_DOCKING_CACHE_VER, XSCF_IGNORABLE_ALL, 1, 1, "docking_cache_ver", nullptr, nullptr, nullptr }, + { XSLFI_DOCKING_CACHE_VER, XSCF_IGNORABLE_ALL, 2, 2, "docking_cache_ver", nullptr, nullptr, nullptr }, { XSLFI_EXTRA_CHEATS, XSCF_NULL, 1, 1, "extra_cheats", nullptr, nullptr, "CHTX" }, { XSLFI_TOWN_MULTI_BUILDING, XSCF_NULL, 1, 1, "town_multi_building", nullptr, nullptr, nullptr }, { XSLFI_SHIP_LOST_COUNTER, XSCF_NULL, 1, 1, "ship_lost_counter", nullptr, nullptr, nullptr },