From 5dd285b0d9c78e0b8a6bffa6dc90eaf462e231fc Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Thu, 16 Mar 2023 20:52:44 +0000 Subject: [PATCH] Don't save TNNC chunk if there are no town zone callback handlers --- src/newgrf_generic.cpp | 9 +++++++++ src/saveload/town_sl.cpp | 4 +++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/newgrf_generic.cpp b/src/newgrf_generic.cpp index 54ec4067ba..23d5d4ba8f 100644 --- a/src/newgrf_generic.cpp +++ b/src/newgrf_generic.cpp @@ -285,6 +285,15 @@ uint16 GetTownZonesCallback(Town *t) return CALLBACK_FAILED; } +bool IsGetTownZonesCallbackHandlerPresent() +{ + for (GenericCallbackList::const_iterator it = _gcl[GSF_FAKE_TOWNS].begin(); it != _gcl[GSF_FAKE_TOWNS].end(); ++it) { + if (HasBit(it->file->observed_feature_tests, GFTOF_TOWN_ZONE_CALLBACK)) return true; + } + + return false; +} + void DumpGenericCallbackSpriteGroups(GrfSpecFeature feature, DumpSpriteGroupPrinter print) { SpriteGroupDumper dumper(print); diff --git a/src/saveload/town_sl.cpp b/src/saveload/town_sl.cpp index a2ffaf1347..31a73cd646 100644 --- a/src/saveload/town_sl.cpp +++ b/src/saveload/town_sl.cpp @@ -22,6 +22,8 @@ static bool _town_zone_radii_no_update = false; +extern bool IsGetTownZonesCallbackHandlerPresent(); + HouseID SLGetCleanHouseType(TileIndex t, bool old_map_position) { if (old_map_position && SlXvIsFeatureMissing(XSLFI_MORE_HOUSES)) { @@ -375,7 +377,7 @@ void SlResetTNNC() void Save_TNNC() { - if (!IsNetworkServerSave()) { + if (!IsNetworkServerSave() || !IsGetTownZonesCallbackHandlerPresent()) { SlSetLength(0); return; }