# HG changeset patch # User dP # Date 2020-09-05 22:57:42 # Node ID d35de6ba4d036f714056dad3089c74f60300b00c # Parent d9d2daaf985653328e0630f721b9b886cb4d32ca Fix 380fd8c: Only check houses for cargo when generating subsidies with towns diff --git a/src/subsidy.cpp b/src/subsidy.cpp --- a/src/subsidy.cpp +++ b/src/subsidy.cpp @@ -23,6 +23,7 @@ #include "game/game.hpp" #include "command_func.h" #include "string_func.h" +#include "tile_cmd.h" #include "table/strings.h" @@ -328,7 +329,14 @@ bool FindSubsidyTownCargoRoute() const Town *src_town = Town::GetRandom(); if (src_town->cache.population < SUBSIDY_CARGO_MIN_POPULATION) return false; - CargoArray town_cargo_produced = GetProductionAroundTiles(src_town->xy, 1, 1, SUBSIDY_TOWN_CARGO_RADIUS); + /* Calculate the produced cargo of houses around town center. */ + CargoArray town_cargo_produced; + TileArea ta = TileArea(src_town->xy, 1, 1).Expand(SUBSIDY_TOWN_CARGO_RADIUS); + TILE_AREA_LOOP(tile, ta) { + if (IsTileType(tile, MP_HOUSE)) { + AddProducedCargo(tile, town_cargo_produced); + } + } /* Passenger subsidies are not handled here. */ town_cargo_produced[CT_PASSENGERS] = 0; @@ -431,7 +439,15 @@ bool FindSubsidyCargoDestination(CargoID case ST_TOWN: { /* Select a random town. */ const Town *dst_town = Town::GetRandom(); - CargoArray town_cargo_accepted = GetAcceptanceAroundTiles(dst_town->xy, 1, 1, SUBSIDY_TOWN_CARGO_RADIUS); + + /* Calculate cargo acceptance of houses around town center. */ + CargoArray town_cargo_accepted; + TileArea ta = TileArea(dst_town->xy, 1, 1).Expand(SUBSIDY_TOWN_CARGO_RADIUS); + TILE_AREA_LOOP(tile, ta) { + if (IsTileType(tile, MP_HOUSE)) { + AddAcceptedCargo(tile, town_cargo_accepted, nullptr); + } + } /* Check if the town can accept this cargo. */ if (town_cargo_accepted[cid] < 8) return false;