diff --git a/src/saveload/town_sl.cpp b/src/saveload/town_sl.cpp --- a/src/saveload/town_sl.cpp +++ b/src/saveload/town_sl.cpp @@ -99,6 +99,7 @@ void UpdateHousesAndTowns() UpdateTownRadius(town); UpdateTownCargos(town); } + UpdateTownCargoBitmap(); } /** Save and load of towns. */ diff --git a/src/town.h b/src/town.h --- a/src/town.h +++ b/src/town.h @@ -185,6 +185,7 @@ void UpdateTownMaxPass(Town *t); void UpdateTownRadius(Town *t); void UpdateTownCargos(Town *t); void UpdateTownCargoTotal(Town *t); +void UpdateTownCargoBitmap(); CommandCost CheckIfAuthorityAllowsNewStation(TileIndex tile, DoCommandFlag flags); Town *ClosestTownFromTile(TileIndex tile, uint threshold); void ChangeTownRating(Town *t, int add, int max, DoCommandFlag flags); @@ -284,4 +285,6 @@ void MakeDefaultName(T *obj) obj->town_cn = (uint16)next; // set index... } +extern uint32 _town_cargos_accepted; + #endif /* TOWN_H */ diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp --- a/src/town_cmd.cpp +++ b/src/town_cmd.cpp @@ -52,6 +52,7 @@ #include "table/town_land.h" TownID _new_town_id; +uint32 _town_cargos_accepted; ///< Bitmap of all cargos accepted by houses. /* Initialize the town-pool */ TownPool _town_pool("Town"); @@ -742,6 +743,17 @@ void UpdateTownCargos(Town *t) UpdateTownCargoTotal(t); } +/** Updates the bitmap of all cargos accepted by houses. */ +void UpdateTownCargoBitmap() +{ + Town *town; + _town_cargos_accepted = 0; + + FOR_ALL_TOWNS(town) { + _town_cargos_accepted |= town->cargo_accepted_total; + } +} + static bool GrowTown(Town *t); static void TownTickHandler(Town *t) @@ -3143,6 +3155,8 @@ void TownsMonthlyLoop() UpdateTownUnwanted(t); UpdateTownCargos(t); } + + UpdateTownCargoBitmap(); } void TownsYearlyLoop()