OpenTTD Source 20241224-master-gf74b0cf984
town_cmd.cpp File Reference

Handling of town tiles. More...

#include "stdafx.h"
#include "road.h"
#include "road_internal.h"
#include "road_cmd.h"
#include "landscape.h"
#include "viewport_func.h"
#include "viewport_kdtree.h"
#include "command_func.h"
#include "company_func.h"
#include "industry.h"
#include "station_base.h"
#include "waypoint_base.h"
#include "station_kdtree.h"
#include "company_base.h"
#include "news_func.h"
#include "error.h"
#include "object.h"
#include "genworld.h"
#include "newgrf_debug.h"
#include "newgrf_house.h"
#include "newgrf_text.h"
#include "autoslope.h"
#include "tunnelbridge_map.h"
#include "strings_func.h"
#include "window_func.h"
#include "string_func.h"
#include "newgrf_cargo.h"
#include "cheat_type.h"
#include "animated_tile_func.h"
#include "subsidy_func.h"
#include "core/pool_func.hpp"
#include "town.h"
#include "town_kdtree.h"
#include "townname_func.h"
#include "core/random_func.hpp"
#include "core/backup_type.hpp"
#include "depot_base.h"
#include "object_map.h"
#include "object_base.h"
#include "ai/ai.hpp"
#include "game/game.hpp"
#include "town_cmd.h"
#include "landscape_cmd.h"
#include "terraform_cmd.h"
#include "tunnelbridge_cmd.h"
#include "timer/timer.h"
#include "timer/timer_game_calendar.h"
#include "timer/timer_game_economy.h"
#include "timer/timer_game_tick.h"
#include "table/strings.h"
#include "table/town_land.h"
#include "safeguards.h"

Go to the source code of this file.

Data Structures

struct  SpotData
 Used as the user_data for FindFurthestFromWater. More...
 
struct  StatueBuildSearchData
 Structure for storing data while searching the best place to build a statue. More...
 

Typedefs

typedef void TownDrawTileProc(const TileInfo *ti)
 
typedef CommandCost TownActionProc(Town *t, DoCommandFlag flags)
 

Enumerations

enum  TownGrowthResult { GROWTH_SUCCEED = -1 , GROWTH_SEARCH_STOPPED = 0 }
 

Functions

void RebuildTownKdtree ()
 
static bool TestTownOwnsBridge (TileIndex tile, const Town *t)
 Check if a town 'owns' a bridge.
 
static bool TryBuildTownHouse (Town *t, TileIndex tile)
 Tries to build a house at this tile.
 
static TownCreateRandomTown (uint attempts, uint32_t townnameparts, TownSize size, bool city, TownLayout layout)
 Create a random town somewhere in the world.
 
static void TownDrawHouseLift (const TileInfo *ti)
 
static DiagDirection RandomDiagDir ()
 Return a random direction.
 
static void DrawTile_Town (TileInfo *ti)
 Draw a house and its tile.
 
static int GetSlopePixelZ_Town (TileIndex tile, uint, uint, bool)
 
static Foundation GetFoundation_Town (TileIndex tile, Slope tileh)
 Get the foundation for a house.
 
static void AnimateTile_Town (TileIndex tile)
 Animate a tile for a town.
 
static bool IsCloseToTown (TileIndex tile, uint dist)
 Determines if a town is close to a tile.
 
void UpdateAllTownVirtCoords ()
 Update the virtual coords needed to draw the town sign for all towns.
 
void ClearAllTownCachedNames ()
 Clear the cached_name of all towns.
 
static void ChangePopulation (Town *t, int mod)
 Change the town's population as recorded in the town cache, town label, and town directory.
 
uint32_t GetWorldPopulation ()
 Get the total population, the sum of all towns in the world.
 
static void RemoveNearbyStations (Town *t, TileIndex tile, BuildingFlags flags)
 Remove stations from nearby station list if a town is no longer in the catchment area of each.
 
static void AdvanceSingleHouseConstruction (TileIndex tile)
 Helper function for house construction stage progression.
 
static void AdvanceHouseConstruction (TileIndex tile)
 Increase the construction stage of a house.
 
static void TownGenerateCargo (Town *t, CargoID ct, uint amount, StationFinder &stations, bool affected_by_recession)
 Generate cargo for a house, scaled by the current economy scale.
 
static void TownGenerateCargoOriginal (Town *t, TownProductionEffect tpe, uint8_t rate, StationFinder &stations)
 Generate cargo for a house using the original algorithm.
 
static void TownGenerateCargoBinominal (Town *t, TownProductionEffect tpe, uint8_t rate, StationFinder &stations)
 Generate cargo for a house using the binominal algorithm.
 
static void TileLoop_Town (TileIndex tile)
 Tile callback function.
 
static CommandCost ClearTile_Town (TileIndex tile, DoCommandFlag flags)
 Callback function to clear a house tile.
 
static void AddProducedCargo_Town (TileIndex tile, CargoArray &produced)
 
static void AddAcceptedCargoSetMask (CargoID cargo, uint amount, CargoArray &acceptance, CargoTypes &always_accepted)
 Fill cargo acceptance array and always_accepted mask, if cargo ID is valid.
 
void AddAcceptedCargoOfHouse (TileIndex tile, HouseID house, const HouseSpec *hs, Town *t, CargoArray &acceptance, CargoTypes &always_accepted)
 Determine accepted cargo for a house.
 
static void AddAcceptedCargo_Town (TileIndex tile, CargoArray &acceptance, CargoTypes &always_accepted)
 
CargoArray GetAcceptedCargoOfHouse (const HouseSpec *hs)
 Get accepted cargo of a house prototype.
 
static void GetTileDesc_Town (TileIndex tile, TileDesc *td)
 
static TrackStatus GetTileTrackStatus_Town (TileIndex, TransportType, uint, DiagDirection)
 
static void ChangeTileOwner_Town (TileIndex, Owner, Owner)
 
static bool GrowTown (Town *t)
 Grow the town.
 
static void TownTickHandler (Town *t)
 Handle the town tick for a single town, by growing the town if desired.
 
void OnTick_Town ()
 Iterate through all towns and call their tick handler.
 
static RoadBits GetTownRoadBits (TileIndex tile)
 Return the RoadBits of a tile, ignoring depot and bay road stops.
 
RoadType GetTownRoadType ()
 Get the road type that towns should build at this current moment.
 
static TimerGameCalendar::Date GetTownRoadTypeFirstIntroductionDate ()
 Get the calendar date of the earliest town-buildable road type.
 
bool CheckTownRoadTypes ()
 Check if towns are able to build road.
 
static bool IsNeighborRoadTile (TileIndex tile, const DiagDirection dir, uint dist_multi)
 Check for parallel road inside a given distance.
 
static bool IsRoadAllowedHere (Town *t, TileIndex tile, DiagDirection dir)
 Check if a Road is allowed on a given tile.
 
static bool TerraformTownTile (TileIndex tile, Slope edges, bool dir)
 
static void LevelTownLand (TileIndex tile)
 
static RoadBits GetTownRoadGridElement (Town *t, TileIndex tile, DiagDirection dir)
 Generate the RoadBits of a grid tile.
 
static bool GrowTownWithExtraHouse (Town *t, TileIndex tile)
 Grows the town with an extra house.
 
static bool GrowTownWithRoad (const Town *t, TileIndex tile, RoadBits rcmd)
 Grows the town with a road piece.
 
static bool CanRoadContinueIntoNextTile (const Town *t, const TileIndex tile, const DiagDirection road_dir)
 Checks if a town road can be continued into the next tile.
 
static bool RedundantBridgeExistsNearby (TileIndex tile, void *user_data)
 CircularTileSearch proc which checks for a nearby parallel bridge to avoid building redundant bridges.
 
static bool GrowTownWithBridge (const Town *t, const TileIndex tile, const DiagDirection bridge_dir)
 Grows the town with a bridge.
 
static bool GrowTownWithTunnel (const Town *t, const TileIndex tile, const DiagDirection tunnel_dir)
 Grows the town with a tunnel.
 
static bool RoadTypesAllowHouseHere (TileIndex t)
 Checks whether at least one surrounding road allows to build a house here.
 
static bool TownCanGrowRoad (TileIndex tile)
 Test if town can grow road onto a specific tile.
 
static bool TownAllowedToBuildRoads ()
 Check if the town is allowed to build roads.
 
static void GrowTownInTile (TileIndex *tile_ptr, RoadBits cur_rb, DiagDirection target_dir, Town *t1)
 Grows the given town.
 
static bool CanFollowRoad (TileIndex tile, DiagDirection dir)
 Checks whether a road can be followed or is a dead end, that can not be extended to the next tile.
 
static bool GrowTownAtRoad (Town *t, TileIndex tile)
 Try to grow a town at a given road tile.
 
static RoadBits GenRandomRoadBits ()
 Generate a random road block.
 
void UpdateTownRadius (Town *t)
 Update the cached town zone radii of a town, based on the number of houses.
 
void UpdateTownMaxPass (Town *t)
 Update the maximum amount of montly passengers and mail for a town, based on its population.
 
static void UpdateTownGrowthRate (Town *t)
 Updates town growth rate.
 
static void UpdateTownGrowth (Town *t)
 Updates town growth state (whether it is growing or not).
 
static void DoCreateTown (Town *t, TileIndex tile, uint32_t townnameparts, TownSize size, bool city, TownLayout layout, bool manual)
 Actually create a town.
 
static CommandCost TownCanBePlacedHere (TileIndex tile)
 Check if it's possible to place a town on a given tile.
 
static bool IsUniqueTownName (const std::string &name)
 Verifies this custom name is unique.
 
std::tuple< CommandCost, Money, TownID > CmdFoundTown (DoCommandFlag flags, TileIndex tile, TownSize size, bool city, TownLayout layout, bool random_location, uint32_t townnameparts, const std::string &text)
 Create a new town.
 
static TileIndex AlignTileToGrid (TileIndex tile, TownLayout layout)
 Towns must all be placed on the same grid or when they eventually interpenetrate their road networks will not mesh nicely; this function adjusts a tile so that it aligns properly.
 
static bool IsTileAlignedToGrid (TileIndex tile, TownLayout layout)
 Towns must all be placed on the same grid or when they eventually interpenetrate their road networks will not mesh nicely; this function tells you if a tile is properly aligned.
 
static bool FindFurthestFromWater (TileIndex tile, void *user_data)
 CircularTileSearch callback; finds the tile furthest from any water.
 
static bool FindNearestEmptyLand (TileIndex tile, void *)
 CircularTileSearch callback to find the nearest land tile.
 
static TileIndex FindNearestGoodCoastalTownSpot (TileIndex tile, TownLayout layout)
 Given a spot on the map (presumed to be a water tile), find a good coastal spot to build a city.
 
bool GenerateTowns (TownLayout layout)
 Generate a number of towns with a given layout.
 
HouseZonesBits GetTownRadiusGroup (const Town *t, TileIndex tile)
 Returns the bit corresponding to the town zone of the specified tile.
 
static void ClearMakeHouseTile (TileIndex tile, Town *t, uint8_t counter, uint8_t stage, HouseID type, uint8_t random_bits)
 Clears tile and builds a house or house part.
 
static void MakeTownHouse (TileIndex tile, Town *t, uint8_t counter, uint8_t stage, HouseID type, uint8_t random_bits)
 Write house information into the map.
 
static bool CanBuildHouseHere (TileIndex tile, bool noslope)
 Check if a house can be built here, based on slope, whether there's a bridge above, and if we can clear the land.
 
static bool CheckBuildHouseSameZ (TileIndex tile, int z, bool noslope)
 Check if a tile where we want to build a multi-tile house has an appropriate max Z.
 
static bool CheckFree2x2Area (TileIndex tile, int z, bool noslope)
 Checks if a house of size 2x2 can be built at this tile.
 
static bool TownLayoutAllowsHouseHere (Town *t, TileIndex tile)
 Checks if the current town layout allows building here.
 
static bool TownLayoutAllows2x2HouseHere (Town *t, TileIndex tile)
 Checks if the current town layout allows a 2x2 building here.
 
static bool CheckTownBuild2House (TileIndex *tile, Town *t, int maxz, bool noslope, DiagDirection second)
 Checks if a 1x2 or 2x1 building is allowed here, accounting for road layout and tile heights.
 
static bool CheckTownBuild2x2House (TileIndex *tile, Town *t, int maxz, bool noslope)
 Checks if a 1x2 or 2x1 building is allowed here, accounting for road layout and tile heights.
 
static void BuildTownHouse (Town *t, TileIndex tile, const HouseSpec *hs, HouseID house, uint8_t random_bits)
 Build a house at this tile.
 
CommandCost CmdPlaceHouse (DoCommandFlag flags, TileIndex tile, HouseID house)
 
static void DoClearTownHouseHelper (TileIndex tile, Town *t, HouseID house)
 Update data structures when a house is removed.
 
TileIndexDiff GetHouseNorthPart (HouseID &house)
 Determines if a given HouseID is part of a multitile house.
 
void ClearTownHouse (Town *t, TileIndex tile)
 Clear a town house.
 
CommandCost CmdRenameTown (DoCommandFlag flags, TownID town_id, const std::string &text)
 Rename a town (server-only).
 
const CargoSpecFindFirstCargoWithTownAcceptanceEffect (TownAcceptanceEffect effect)
 Determines the first cargo with a certain town effect.
 
CommandCost CmdTownCargoGoal (DoCommandFlag flags, TownID town_id, TownAcceptanceEffect tae, uint32_t goal)
 Change the cargo goal of a town.
 
CommandCost CmdTownSetText (DoCommandFlag flags, TownID town_id, const std::string &text)
 Set a custom text in the Town window.
 
CommandCost CmdTownGrowthRate (DoCommandFlag flags, TownID town_id, uint16_t growth_rate)
 Change the growth rate of the town.
 
CommandCost CmdTownRating (DoCommandFlag flags, TownID town_id, CompanyID company_id, int16_t rating)
 Change the rating of a company in a town.
 
CommandCost CmdExpandTown (DoCommandFlag flags, TownID town_id, uint32_t grow_amount)
 Expand a town (scenario editor only).
 
CommandCost CmdDeleteTown (DoCommandFlag flags, TownID town_id)
 Delete a town (scenario editor or worldgen only).
 
static CommandCost TownActionAdvertiseSmall (Town *t, DoCommandFlag flags)
 Perform the "small advertising campaign" town action.
 
static CommandCost TownActionAdvertiseMedium (Town *t, DoCommandFlag flags)
 Perform the "medium advertising campaign" town action.
 
static CommandCost TownActionAdvertiseLarge (Town *t, DoCommandFlag flags)
 Perform the "large advertising campaign" town action.
 
static CommandCost TownActionRoadRebuild (Town *t, DoCommandFlag flags)
 Perform the "local road reconstruction" town action.
 
static bool CheckClearTile (TileIndex tile)
 Check whether the land can be cleared.
 
static bool SearchTileForStatue (TileIndex tile, void *user_data)
 Search callback function for TownActionBuildStatue.
 
static CommandCost TownActionBuildStatue (Town *t, DoCommandFlag flags)
 Perform a 9x9 tiles circular search from the center of the town in order to find a free tile to place a statue.
 
static CommandCost TownActionFundBuildings (Town *t, DoCommandFlag flags)
 Perform the "fund new buildings" town action.
 
static CommandCost TownActionBuyRights (Town *t, DoCommandFlag flags)
 Perform the "buy exclusive transport rights" town action.
 
static CommandCost TownActionBribe (Town *t, DoCommandFlag flags)
 Perform the "bribe" town action.
 
TownActions GetMaskOfTownActions (CompanyID cid, const Town *t)
 Get a list of available town authority actions.
 
CommandCost CmdDoTownAction (DoCommandFlag flags, TownID town_id, uint8_t action)
 Do a town action.
 
template<typename Func >
static void ForAllStationsNearTown (Town *t, Func func)
 
static void UpdateTownRating (Town *t)
 Monthly callback to update town and station ratings.
 
static void UpdateTownGrowCounter (Town *t, uint16_t prev_growth_rate)
 Updates town grow counter after growth rate change.
 
static int CountActiveStations (Town *t)
 Calculates amount of active stations in the range of town (HZB_TOWN_EDGE).
 
static uint GetNormalGrowthRate (Town *t)
 Calculates town growth rate in normal conditions (custom growth rate not set).
 
CommandCost CheckIfAuthorityAllowsNewStation (TileIndex tile, DoCommandFlag flags)
 Checks whether the local authority allows construction of a new station (rail, road, airport, dock) on the given tile.
 
TownCalcClosestTownFromTile (TileIndex tile, uint threshold)
 Return the town closest to the given tile within threshold.
 
TownClosestTownFromTile (TileIndex tile, uint threshold)
 Return the town closest (in distance or ownership) to a given tile, within a given threshold.
 
void SetTownRatingTestMode (bool mode)
 Switch the town rating to test-mode, to allow commands to be tested without affecting current ratings.
 
static int GetRating (const Town *t)
 Get the rating of a town for the _current_company.
 
void ChangeTownRating (Town *t, int add, int max, DoCommandFlag flags)
 Changes town rating of the current company.
 
CommandCost CheckforTownRating (DoCommandFlag flags, Town *t, TownRatingCheckType type)
 Does the town authority allow the (destructive) action of the current company?
 
static CommandCost TerraformTile_Town (TileIndex tile, DoCommandFlag flags, int z_new, Slope tileh_new)
 
std::span< const DrawBuildingsTileStructGetTownDrawTileData ()
 

Variables

TownPool _town_pool ("Town")
 
TownKdtree _town_kdtree {}
 
static bool _generating_town = false
 Set if a town is being generated.
 
static int _grow_town_result
 
static TownDrawTileProc *const _town_draw_tile_procs [1]
 
static const uint8_t _num_initial_towns [4] = {5, 11, 23, 46}
 
const uint8_t _town_action_costs [TACT_COUNT]
 Factor in the cost of each town action.
 
static TownActionProc *const _town_action_proc []
 
static bool _town_rating_test = false
 If true, town rating is in test-mode.
 
static std::map< const Town *, int > _town_test_ratings
 Map of towns to modified ratings, while in town rating test-mode.
 
static IntervalTimer< TimerGameEconomy_economy_towns_monthly ({TimerGameEconomy::MONTH, TimerGameEconomy::Priority::TOWN}, [](auto) { for(Town *t :Town::Iterate()) { if(t->road_build_months !=0) t->road_build_months--;if(t->fund_buildings_months !=0) t->fund_buildings_months--;if(t->exclusive_counter !=0) { if(--t->exclusive_counter==0) t->exclusivity=INVALID_COMPANY;} for(const Company *c :Company::Iterate()) { if(t->unwanted[c->index] > 0) t->unwanted[c->index]--;} for(auto &supplied :t->supplied) supplied.NewMonth();for(auto &received :t->received) received.NewMonth();UpdateTownGrowth(t);UpdateTownRating(t);SetWindowDirty(WC_TOWN_VIEW, t->index);} })
 
static IntervalTimer< TimerGameEconomy_economy_towns_yearly ({TimerGameEconomy::YEAR, TimerGameEconomy::Priority::TOWN}, [](auto) { for(const auto t :Map::Iterate()) { if(!IsTileType(t, MP_HOUSE)) continue;IncrementHouseAge(t);} })
 
const TileTypeProcs _tile_type_town_procs
 Tile callback functions for a town.
 

Detailed Description

Handling of town tiles.

Definition in file town_cmd.cpp.

Typedef Documentation

◆ TownActionProc

typedef CommandCost TownActionProc(Town *t, DoCommandFlag flags)

Definition at line 3587 of file town_cmd.cpp.

◆ TownDrawTileProc

typedef void TownDrawTileProc(const TileInfo *ti)

Definition at line 248 of file town_cmd.cpp.

Enumeration Type Documentation

◆ TownGrowthResult

enum TownGrowthResult

Definition at line 234 of file town_cmd.cpp.

Function Documentation

◆ AddAcceptedCargo_Town()

static void AddAcceptedCargo_Town ( TileIndex  tile,
CargoArray acceptance,
CargoTypes &  always_accepted 
)
static

Definition at line 842 of file town_cmd.cpp.

◆ AddAcceptedCargoOfHouse()

void AddAcceptedCargoOfHouse ( TileIndex  tile,
HouseID  house,
const HouseSpec hs,
Town t,
CargoArray acceptance,
CargoTypes &  always_accepted 
)

Determine accepted cargo for a house.

Parameters
tileTile of house, or INVALID_TILE if not yet built.
houseHouseID of house.
hsHouseSpec of house.
tTown that house belongs to, or nullptr if not yet built.
[out]acceptanceCargoArray to be filled with acceptance information.
[out]always_acceptedBitmask of always accepted cargo types

Definition at line 800 of file town_cmd.cpp.

References _settings_game, HouseSpec::accepts_cargo, AddAcceptedCargoSetMask(), CALLBACK_FAILED, HouseSpec::callback_mask, HouseSpec::cargo_acceptance, CBID_HOUSE_ACCEPT_CARGO, CBID_HOUSE_CARGO_ACCEPTANCE, CBM_HOUSE_ACCEPT_CARGO, CBM_HOUSE_CARGO_ACCEPTANCE, GameSettings::game_creation, GB(), GetCargoTranslation(), HouseSpec::grf_prop, GRFFilePropsBase< Tcnt >::grffile, HasBit(), INVALID_TILE, GameCreationSettings::landscape, and lengthof.

Referenced by GetAcceptedCargoOfHouse().

◆ AddAcceptedCargoSetMask()

static void AddAcceptedCargoSetMask ( CargoID  cargo,
uint  amount,
CargoArray acceptance,
CargoTypes &  always_accepted 
)
static

Fill cargo acceptance array and always_accepted mask, if cargo ID is valid.

Parameters
cargoCargo type to add.
amountAmount of cargo to add.
[out]acceptanceOutput array containing amount of cargo accepted.
[out]always_acceptedOutput mask of accepted cargo types.

Definition at line 784 of file town_cmd.cpp.

References IsValidCargoID(), and SetBit().

Referenced by AddAcceptedCargoOfHouse().

◆ AddProducedCargo_Town()

static void AddProducedCargo_Town ( TileIndex  tile,
CargoArray produced 
)
static

Definition at line 746 of file town_cmd.cpp.

◆ AdvanceHouseConstruction()

static void AdvanceHouseConstruction ( TileIndex  tile)
static

Increase the construction stage of a house.

Parameters
tileThe tile of the house under construction.

Definition at line 521 of file town_cmd.cpp.

References AdvanceSingleHouseConstruction(), HouseSpec::building_flags, HouseSpec::Get(), GetHouseType(), and TileAddXY().

Referenced by TileLoop_Town().

◆ AdvanceSingleHouseConstruction()

static void AdvanceSingleHouseConstruction ( TileIndex  tile)
static

Helper function for house construction stage progression.

Parameters
tileTileIndex of the house (or parts of it) to construct.

Definition at line 498 of file town_cmd.cpp.

References ChangePopulation(), HouseSpec::Get(), GetHouseConstructionTick(), GetHouseType(), IncHouseConstructionTick(), IsHouseCompleted(), IsTileType(), MarkTileDirtyByTile(), MP_HOUSE, and ResetHouseAge().

Referenced by AdvanceHouseConstruction().

◆ AlignTileToGrid()

static TileIndex AlignTileToGrid ( TileIndex  tile,
TownLayout  layout 
)
static

Towns must all be placed on the same grid or when they eventually interpenetrate their road networks will not mesh nicely; this function adjusts a tile so that it aligns properly.

Parameters
tileThe tile to start at.
layoutThe town layout in effect.
Returns
The adjusted tile.

Definition at line 2249 of file town_cmd.cpp.

References TileX(), TileXY(), TileY(), TL_2X2_GRID, and TL_3X3_GRID.

Referenced by CreateRandomTown().

◆ AnimateTile_Town()

static void AnimateTile_Town ( TileIndex  tile)
static

Animate a tile for a town.

Only certain houses can be animated. The newhouses animation supersedes regular ones.

Parameters
tileTileIndex of the house to animate.

Definition at line 350 of file town_cmd.cpp.

References TimerGameTick::counter, DeleteAnimatedTile(), HouseSpec::Get(), GetHouseType(), GetLiftDestination(), GetLiftPosition(), HaltLift(), LiftHasDestination(), MarkTileDirtyByTile(), NEW_HOUSE_OFFSET, RandomRange(), SetLiftDestination(), and SetLiftPosition().

◆ BuildTownHouse()

static void BuildTownHouse ( Town t,
TileIndex  tile,
const HouseSpec hs,
HouseID  house,
uint8_t  random_bits 
)
static

Build a house at this tile.

Parameters
tThe town the house will belong to.
tileThe tile to try building on.
hsThe HouseSpec of the house.
houseThe HouseID of the house.
random_bitsThe random data to be associated with the house.

Definition at line 2725 of file town_cmd.cpp.

References _generating_world, Town::cache, Chance16(), ChangePopulation(), GB(), MakeTownHouse(), TownCache::num_houses, HouseSpec::population, TOWN_HOUSE_COMPLETED, UpdateTownGrowthRate(), and UpdateTownRadius().

Referenced by TryBuildTownHouse().

◆ CalcClosestTownFromTile()

Town * CalcClosestTownFromTile ( TileIndex  tile,
uint  threshold 
)

Return the town closest to the given tile within threshold.

Parameters
tileStarting point of the search.
thresholdBiggest allowed distance to the town.
Returns
Closest town to tile within threshold, or nullptr if there is no such town.
Note
This function only uses distance, the ClosestTownFromTile function also takes town ownership into account.

Definition at line 3878 of file town_cmd.cpp.

References DistanceManhattan(), Kdtree< T, TxyFunc, CoordT, DistT >::FindNearest(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_town_pool >::Get(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_town_pool >::GetNumItems(), TileX(), TileY(), and Town::xy.

Referenced by AfterLoadGame(), AirportGetNearestTown(), BuildObject(), ClosestTownFromTile(), CmdBuildBridge(), CmdBuildRoad(), CmdBuildTunnel(), Town::PostDestructor(), RemoveRoad(), and UpdateNearestTownForRoadTiles().

◆ CanBuildHouseHere()

static bool CanBuildHouseHere ( TileIndex  tile,
bool  noslope 
)
inlinestatic

Check if a house can be built here, based on slope, whether there's a bridge above, and if we can clear the land.

Parameters
tileThe tile to check.
noslopeAre foundations prohibited for this house?
Returns
true iff house can be built here.

Definition at line 2543 of file town_cmd.cpp.

References DC_AUTO, DC_NO_WATER, GetTileSlope(), IsBridgeAbove(), IsSteepSlope(), RoadTypesAllowHouseHere(), and SLOPE_FLAT.

Referenced by CheckBuildHouseSameZ(), and TryBuildTownHouse().

◆ CanFollowRoad()

static bool CanFollowRoad ( TileIndex  tile,
DiagDirection  dir 
)
static

Checks whether a road can be followed or is a dead end, that can not be extended to the next tile.

This only checks trivial but often cases.

Parameters
tileStart tile for road.
dirDirection for road to follow or build.
Returns
true If road is or can be connected in the specified direction.

Definition at line 1749 of file town_cmd.cpp.

References DiagDirToRoadBits(), GetTileType(), GetTownRoadBits(), GetTunnelBridgeTransportType(), HasTileWaterGround(), IsDriveThroughStopTile(), IsValidTile(), MP_HOUSE, MP_INDUSTRY, MP_OBJECT, MP_ROAD, MP_STATION, MP_TUNNELBRIDGE, ReverseDiagDir(), ROAD_NONE, TileOffsByDiagDir(), TownAllowedToBuildRoads(), and TRANSPORT_ROAD.

Referenced by GrowTownAtRoad().

◆ CanRoadContinueIntoNextTile()

static bool CanRoadContinueIntoNextTile ( const Town t,
const TileIndex  tile,
const DiagDirection  road_dir 
)
static

Checks if a town road can be continued into the next tile.

Road vehicle stations, bridges, and tunnels are fine, as long as they are facing the right direction.

Parameters
tThe current town
tileThe tile where the road would be built
road_dirThe direction of the road
Returns
true if the road can be continued, else false

Definition at line 1264 of file town_cmd.cpp.

References _settings_game, EconomySettings::allow_town_level_crossings, DC_AUTO, DC_NO_WATER, DiagDirToAxis(), DiagDirToRoadBits(), DRD_NONE, GameSettings::economy, GetBayRoadStopDir(), GetDriveThroughStopAxis(), GetRoadDepotDirection(), GetTownRoadType(), GetTunnelBridgeDirection(), GetTunnelBridgeTransportType(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, IsBayRoadStopTile(), IsDriveThroughStopTile(), IsRoadDepot(), IsTileType(), IsValidTile(), MP_RAILWAY, MP_ROAD, MP_STATION, MP_TUNNELBRIDGE, ReverseDiagDir(), TileOffsByDiagDir(), and TRANSPORT_ROAD.

Referenced by GrowTownWithBridge(), and GrowTownWithTunnel().

◆ ChangePopulation()

static void ChangePopulation ( Town t,
int  mod 
)
static

Change the town's population as recorded in the town cache, town label, and town directory.

Parameters
tThe town which has changed.
modThe population change (can be positive or negative).

Definition at line 447 of file town_cmd.cpp.

References _generating_town, _settings_client, Town::cache, ClientSettings::gui, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, InvalidateWindowData(), TownCache::population, GUISettings::population_in_label, Town::UpdateVirtCoord(), WC_TOWN_DIRECTORY, and WC_TOWN_VIEW.

Referenced by AdvanceSingleHouseConstruction(), BuildTownHouse(), and ClearTownHouse().

◆ ChangeTileOwner_Town()

static void ChangeTileOwner_Town ( TileIndex  ,
Owner  ,
Owner   
)
static

Definition at line 900 of file town_cmd.cpp.

◆ ChangeTownRating()

void ChangeTownRating ( Town t,
int  add,
int  max,
DoCommandFlag  flags 
)

◆ CheckBuildHouseSameZ()

static bool CheckBuildHouseSameZ ( TileIndex  tile,
int  z,
bool  noslope 
)
inlinestatic

Check if a tile where we want to build a multi-tile house has an appropriate max Z.

Parameters
tileThe tile to check.
zThe max Z level to allow.
noslopeAre foundations disallowed for this house?
Returns
true iff house can be built here.
See also
CanBuildHouseHere()

Definition at line 2568 of file town_cmd.cpp.

References CanBuildHouseHere(), and GetTileMaxZ().

Referenced by CheckFree2x2Area(), and CheckTownBuild2House().

◆ CheckClearTile()

static bool CheckClearTile ( TileIndex  tile)
static

Check whether the land can be cleared.

Parameters
tileTile to check.
Returns
true if the tile can be cleared.

Definition at line 3394 of file town_cmd.cpp.

References _current_company, DC_NONE, OWNER_NONE, Backup< T >::Restore(), and CommandCost::Succeeded().

Referenced by SearchTileForStatue().

◆ CheckforTownRating()

◆ CheckFree2x2Area()

static bool CheckFree2x2Area ( TileIndex  tile,
int  z,
bool  noslope 
)
static

Checks if a house of size 2x2 can be built at this tile.

Parameters
tileThe tile of the house's northernmost tile.
zThe maximum tile z, so all tiles are the same height.
noslopeAre foundations disallowed for this house?
Returns
true iff house can be built here.
See also
CheckBuildHouseSameZ()

Definition at line 2587 of file town_cmd.cpp.

References CheckBuildHouseSameZ(), DIAGDIR_END, DIAGDIR_SE, and TileOffsByDiagDir().

Referenced by CheckTownBuild2x2House().

◆ CheckIfAuthorityAllowsNewStation()

CommandCost CheckIfAuthorityAllowsNewStation ( TileIndex  tile,
DoCommandFlag  flags 
)

Checks whether the local authority allows construction of a new station (rail, road, airport, dock) on the given tile.

Parameters
tileThe tile where the station shall be constructed.
flagsCommand flags. DC_NO_TEST_TOWN_RATING is tested.
Returns
Succeeded or failed command.

Definition at line 3854 of file town_cmd.cpp.

References _current_company, _settings_game, ClosestTownFromTile(), DC_NO_TEST_TOWN_RATING, GameSettings::difficulty, EconomySettings::dist_local_authority, GameSettings::economy, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_company_pool >::IsValidID(), Town::ratings, SetDParam(), and DifficultySettings::town_council_tolerance.

Referenced by CmdBuildAirport(), CmdBuildDock(), CmdBuildRailStation(), and CmdBuildRoadStop().

◆ CheckTownBuild2House()

static bool CheckTownBuild2House ( TileIndex tile,
Town t,
int  maxz,
bool  noslope,
DiagDirection  second 
)
static

Checks if a 1x2 or 2x1 building is allowed here, accounting for road layout and tile heights.

Also, tests both building positions that occupy this tile.

Parameters
tileThe tile where the building should be built.
tThe town.
maxzThe maximum Z level, since all tiles must have the same height.
noslopeAre foundations disallowed for this house?
secondThe diagdir from the first tile to the second tile.

Definition at line 2676 of file town_cmd.cpp.

References CheckBuildHouseSameZ(), ReverseDiagDir(), TileOffsByDiagDir(), and TownLayoutAllowsHouseHere().

Referenced by TryBuildTownHouse().

◆ CheckTownBuild2x2House()

static bool CheckTownBuild2x2House ( TileIndex tile,
Town t,
int  maxz,
bool  noslope 
)
static

Checks if a 1x2 or 2x1 building is allowed here, accounting for road layout and tile heights.

Also, tests all four building positions that occupy this tile.

Parameters
tileThe tile where the building should be built.
tThe town.
maxzThe maximum Z level, since all tiles must have the same height.
noslopeAre foundations disallowed for this house?

Definition at line 2701 of file town_cmd.cpp.

References CheckFree2x2Area(), DIAGDIR_END, DIAGDIR_SE, ReverseDiagDir(), TileOffsByDiagDir(), and TownLayoutAllows2x2HouseHere().

Referenced by TryBuildTownHouse().

◆ CheckTownRoadTypes()

bool CheckTownRoadTypes ( )

Check if towns are able to build road.

Returns
true iff the towns are currently able to build road.

Definition at line 1009 of file town_cmd.cpp.

References TimerGameCalendar::date, GetTownRoadTypeFirstIntroductionDate(), SetDParam(), ShowErrorMessage(), and WL_CRITICAL.

Referenced by _GenerateWorld().

◆ ClearAllTownCachedNames()

void ClearAllTownCachedNames ( )

◆ ClearMakeHouseTile()

static void ClearMakeHouseTile ( TileIndex  tile,
Town t,
uint8_t  counter,
uint8_t  stage,
HouseID  type,
uint8_t  random_bits 
)
inlinestatic

Clears tile and builds a house or house part.

Parameters
tileThe tile to build upon.
tThe town which will own the house.
counterThe construction stage counter for the house.
stageThe current construction stage of the house.
typeThe type of house.
random_bitsRandom bits for newgrf houses to use.
Precondition
The house can be built here.

Definition at line 2498 of file town_cmd.cpp.

References AddAnimatedTile(), DC_AUTO, DC_EXEC, DC_NO_WATER, HouseSpec::Get(), IncreaseBuildingCount(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, MakeHouseTile(), MarkTileDirtyByTile(), and CommandCost::Succeeded().

Referenced by MakeTownHouse().

◆ ClearTile_Town()

◆ ClearTownHouse()

◆ ClosestTownFromTile()

Town * ClosestTownFromTile ( TileIndex  tile,
uint  threshold 
)

Return the town closest (in distance or ownership) to a given tile, within a given threshold.

Parameters
tileStarting point of the search.
thresholdBiggest allowed distance to the town.
Returns
Closest town to tile within threshold, or nullptr if there is no such town.
Note
If you only care about distance, you can use the CalcClosestTownFromTile function.

Definition at line 3896 of file town_cmd.cpp.

References _generating_world, CalcClosestTownFromTile(), DistanceManhattan(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_town_pool >::Get(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_town_pool >::GetNumItems(), GetTileType(), GetTownIndex(), HasTownOwnedRoad(), IsRoadDepot(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_town_pool >::IsValidID(), MP_HOUSE, MP_ROAD, and Town::xy.

Referenced by AfterLoadGame(), BuildStationPart(), CheckAllowRemoveRoad(), CheckIfAuthorityAllowsNewStation(), CheckIfCallBackAllowsCreation(), CmdBuildAirport(), CmdBuildBridge(), CmdConvertRoad(), CmdPlantTree(), DisasterTick_Big_Ufo(), DoClearBridge(), DoClearTunnel(), FindTownForIndustry(), CHKPChunkHandler::FixPointers(), GenerateCompanyName(), AirportResolverObject::GetTown(), IndustriesResolverObject::GetTown(), ObjectResolverObject::GetTown(), StationResolverObject::GetTown(), AirportTileScopeResolver::GetVariable(), IndustryTileScopeResolver::GetVariable(), ObjectScopeResolver::GetVariable(), RailTypeScopeResolver::GetVariable(), RoadStopScopeResolver::GetVariable(), RoadTypeScopeResolver::GetVariable(), HighlightTownLocalAuthorityTiles(), MakeDefaultName(), LandInfoWindow::OnInit(), RemoveGenericRoadStop(), and SetDParamsForOwnedBy().

◆ CmdDeleteTown()

◆ CmdDoTownAction()

CommandCost CmdDoTownAction ( DoCommandFlag  flags,
TownID  town_id,
uint8_t  action 
)

Do a town action.

This performs an action such as advertising, building a statue, funding buildings, but also bribing the town-council

Parameters
flagstype of operation
town_idtown to do the action at
actionaction to perform,
See also
_town_action_proc for the list of available actions
Returns
the cost of this operation or an error

Definition at line 3662 of file town_cmd.cpp.

References _current_company, _town_action_costs, CMD_ERROR, DC_EXEC, EXPENSES_OTHER, CommandCost::Failed(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_town_pool >::GetIfValid(), GetMaskOfTownActions(), HasBit(), lengthof, SetWindowDirty(), and WC_TOWN_AUTHORITY.

◆ CmdExpandTown()

CommandCost CmdExpandTown ( DoCommandFlag  flags,
TownID  town_id,
uint32_t  grow_amount 
)

Expand a town (scenario editor only).

Parameters
flagsType of operation.
TownIDTown ID to expand.
grow_amountAmount to grow, or 0 to grow a random size up to the current amount of houses.
Returns
Empty cost or an error.

Definition at line 3182 of file town_cmd.cpp.

References _current_company, Town::cache, CMD_ERROR, DC_EXEC, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_town_pool >::GetIfValid(), GrowTown(), TownCache::num_houses, OWNER_DEITY, RandomRange(), UpdateTownMaxPass(), and UpdateTownRadius().

◆ CmdFoundTown()

std::tuple< CommandCost, Money, TownID > CmdFoundTown ( DoCommandFlag  flags,
TileIndex  tile,
TownSize  size,
bool  city,
TownLayout  layout,
bool  random_location,
uint32_t  townnameparts,
const std::string &  text 
)

Create a new town.

Parameters
flagsThe type of operation.
tileThe coordinates where town is built.
sizeThe size of the town (
See also
TownSize).
Parameters
cityShould we build a city?
layoutThe town road layout (
See also
TownLayout).
Parameters
random_locationShould we use a random location? (randomize tile )
townnamepartsTown name parts.
textCustom name for the town. If empty, the town name parts will be used.
Returns
The cost of this operation or an error.

Definition at line 2142 of file town_cmd.cpp.

References _current_company, _generating_world, _settings_game, AI::BroadcastNewEvent(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_town_pool >::CanAllocateItem(), CMD_ERROR, CreateRandomTown(), DC_EXEC, DoCreateTown(), GameSettings::economy, EXPENSES_OTHER, CommandCost::Failed(), EconomySettings::found_town, GameSettings::game_creation, GetAvailableMoneyForCommand(), CommandCost::GetCost(), GetString(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, IsUniqueTownName(), lengthof, MAX_LENGTH_TOWN_NAME_CHARS, CommandCost::MultiplyCost(), Town::name, Game::NewEvent(), NT_INDUSTRY_OPEN, NUM_TLS, OWNER_DEITY, Backup< T >::Restore(), SetDParam(), SetDParamStr(), TF_CUSTOM_LAYOUT, TF_FORBIDDEN, EconomySettings::town_layout, GameCreationSettings::town_name, TownCanBePlacedHere(), TSZ_END, TSZ_LARGE, TSZ_RANDOM, UpdateNearestTownForRoadTiles(), Town::UpdateVirtCoord(), Utf8StringLength(), and VerifyTownName().

◆ CmdPlaceHouse()

CommandCost CmdPlaceHouse ( DoCommandFlag  flags,
TileIndex  tile,
HouseID  house 
)

Definition at line 2880 of file town_cmd.cpp.

◆ CmdRenameTown()

CommandCost CmdRenameTown ( DoCommandFlag  flags,
TownID  town_id,
const std::string &  text 
)

Rename a town (server-only).

Parameters
flagstype of operation
town_idtown ID to rename
textthe new name or an empty string when resetting to the default
Returns
the cost of this operation or an error

Definition at line 3018 of file town_cmd.cpp.

References Town::cached_name, CMD_ERROR, DC_EXEC, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_town_pool >::GetIfValid(), InvalidateWindowData(), IsUniqueTownName(), MAX_LENGTH_TOWN_NAME_CHARS, Town::name, UpdateAllStationVirtCoords(), Town::UpdateVirtCoord(), Utf8StringLength(), and WC_TOWN_DIRECTORY.

◆ CmdTownCargoGoal()

CommandCost CmdTownCargoGoal ( DoCommandFlag  flags,
TownID  town_id,
TownAcceptanceEffect  tae,
uint32_t  goal 
)

Change the cargo goal of a town.

Parameters
flagsType of operation.
town_idTown ID to cargo game of.
taeTownEffect to change the game of.
goalThe new goal value.
Returns
Empty cost or an error.

Definition at line 3068 of file town_cmd.cpp.

References _current_company, CMD_ERROR, DC_EXEC, FindFirstCargoWithTownAcceptanceEffect(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_town_pool >::GetIfValid(), Town::goal, InvalidateWindowData(), OWNER_DEITY, TAE_END, UpdateTownGrowth(), and WC_TOWN_VIEW.

◆ CmdTownGrowthRate()

CommandCost CmdTownGrowthRate ( DoCommandFlag  flags,
TownID  town_id,
uint16_t  growth_rate 
)

Change the growth rate of the town.

Parameters
flagsType of operation.
town_idTown ID to cargo game of.
growth_rateAmount of days between growth, or TOWN_GROWTH_RATE_NONE, or 0 to reset custom growth rate.
Returns
Empty cost or an error.

Definition at line 3119 of file town_cmd.cpp.

References _current_company, ClrBit(), CMD_ERROR, DC_EXEC, Town::flags, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_town_pool >::GetIfValid(), Town::grow_counter, Town::growth_rate, InvalidateWindowData(), OWNER_DEITY, SetBit(), TOWN_CUSTOM_GROWTH, UpdateTownGrowth(), and WC_TOWN_VIEW.

◆ CmdTownRating()

CommandCost CmdTownRating ( DoCommandFlag  flags,
TownID  town_id,
CompanyID  company_id,
int16_t  rating 
)

Change the rating of a company in a town.

Parameters
flagsType of operation.
town_idTown ID to change, bit 16..23 =
company_idCompany ID to change.
ratingNew rating of company (signed int16_t).
Returns
Empty cost or an error.

Definition at line 3157 of file town_cmd.cpp.

References _current_company, Clamp(), CMD_ERROR, DC_EXEC, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_town_pool >::GetIfValid(), InvalidateWindowData(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_company_pool >::IsValidID(), OWNER_DEITY, Town::ratings, and WC_TOWN_AUTHORITY.

◆ CmdTownSetText()

CommandCost CmdTownSetText ( DoCommandFlag  flags,
TownID  town_id,
const std::string &  text 
)

Set a custom text in the Town window.

Parameters
flagsType of operation.
town_idTown ID to change the text of.
textThe new text (empty to remove the text).
Returns
Empty cost or an error.

Definition at line 3097 of file town_cmd.cpp.

References _current_company, CMD_ERROR, DC_EXEC, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_town_pool >::GetIfValid(), InvalidateWindowData(), OWNER_DEITY, Town::text, and WC_TOWN_VIEW.

◆ CountActiveStations()

static int CountActiveStations ( Town t)
static

Calculates amount of active stations in the range of town (HZB_TOWN_EDGE).

Parameters
tThe town to calculate stations for
Returns
Amount of active stations

Definition at line 3753 of file town_cmd.cpp.

Referenced by GetNormalGrowthRate(), and UpdateTownGrowth().

◆ CreateRandomTown()

static Town * CreateRandomTown ( uint  attempts,
uint32_t  townnameparts,
TownSize  size,
bool  city,
TownLayout  layout 
)
static

Create a random town somewhere in the world.

Parameters
attemptsHow many times should we try?
townnamepartsThe name of the town.
sizeThe size preset of the town.
cityShould we build a city?
layoutThe road layout to build.
Returns
The town object, or nullptr if we failed to create a town anywhere.

Definition at line 2361 of file town_cmd.cpp.

References _current_company, _generating_world, AlignTileToGrid(), Town::cache, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_town_pool >::CanAllocateItem(), DC_EXEC, DoCreateTown(), FindNearestGoodCoastalTownSpot(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, INVALID_TILE, IsTileType(), MP_WATER, OWNER_TOWN, TownCache::population, RandomTile, Backup< T >::Restore(), CommandCost::Succeeded(), and TownCanBePlacedHere().

Referenced by CmdFoundTown(), and GenerateTowns().

◆ DoClearTownHouseHelper()

static void DoClearTownHouseHelper ( TileIndex  tile,
Town t,
HouseID  house 
)
static

Update data structures when a house is removed.

Parameters
tileTile of the house
tTown owning the house
houseHouse type

Definition at line 2934 of file town_cmd.cpp.

References DecreaseBuildingCount(), DeleteNewGRFInspectWindow(), IsTileType(), and MP_HOUSE.

Referenced by ClearTownHouse().

◆ DoCreateTown()

static void DoCreateTown ( Town t,
TileIndex  tile,
uint32_t  townnameparts,
TownSize  size,
bool  city,
TownLayout  layout,
bool  manual 
)
static

◆ DrawTile_Town()

◆ FindFirstCargoWithTownAcceptanceEffect()

const CargoSpec * FindFirstCargoWithTownAcceptanceEffect ( TownAcceptanceEffect  effect)

Determines the first cargo with a certain town effect.

Parameters
effectTown effect of interest
Returns
first active cargo slot with that effect

Definition at line 3052 of file town_cmd.cpp.

References CargoSpec::Iterate().

Referenced by AfterLoadGame(), CmdTownCargoGoal(), DoCreateTown(), and TownViewWindow::DrawWidget().

◆ FindFurthestFromWater()

static bool FindFurthestFromWater ( TileIndex  tile,
void *  user_data 
)
static

CircularTileSearch callback; finds the tile furthest from any water.

slightly bit tricky, since it has to do a search of its own in order to find the distance to the water from each square in the radius.

Also, this never returns true, because it needs to take into account all locations being searched before it knows which is the furthest.

Parameters
tileStart looking from this tile
user_dataStorage area for data that must last across calls; must be a pointer to struct SpotData
Returns
always false

Definition at line 2301 of file town_cmd.cpp.

References GetClosestWaterDistance(), IsTileAlignedToGrid(), IsTileFlat(), IsTileType(), SpotData::layout, SpotData::max_dist, MP_CLEAR, and SpotData::tile.

Referenced by FindNearestGoodCoastalTownSpot().

◆ FindNearestEmptyLand()

static bool FindNearestEmptyLand ( TileIndex  tile,
void *   
)
static

CircularTileSearch callback to find the nearest land tile.

Parameters
tileStart looking from this tile

Definition at line 2321 of file town_cmd.cpp.

References IsTileType(), and MP_CLEAR.

Referenced by FindNearestGoodCoastalTownSpot().

◆ FindNearestGoodCoastalTownSpot()

static TileIndex FindNearestGoodCoastalTownSpot ( TileIndex  tile,
TownLayout  layout 
)
static

Given a spot on the map (presumed to be a water tile), find a good coastal spot to build a city.

We don't want to build too close to the edge if we can help it (since that inhibits city growth) hence the search within a search within a search. O(n*m^2), where n is how far to search for land, and m is how far inland to look for a flat spot.

Parameters
tileStart looking from this spot.
layoutthe road layout to search for
Returns
tile that was found

Definition at line 2338 of file town_cmd.cpp.

References CircularTileSearch(), FindFurthestFromWater(), FindNearestEmptyLand(), INVALID_TILE, and SpotData::tile.

Referenced by CreateRandomTown().

◆ ForAllStationsNearTown()

template<typename Func >
static void ForAllStationsNearTown ( Town t,
Func  func 
)
static

Definition at line 3682 of file town_cmd.cpp.

◆ GenerateTowns()

◆ GenRandomRoadBits()

static RoadBits GenRandomRoadBits ( )
static

Generate a random road block.

The probability of a straight road is somewhat higher than a curved.

Returns
A RoadBits value with 2 bits set

Definition at line 1873 of file town_cmd.cpp.

References GB(), and ROAD_NW.

Referenced by GrowTown().

◆ GetAcceptedCargoOfHouse()

CargoArray GetAcceptedCargoOfHouse ( const HouseSpec hs)

Get accepted cargo of a house prototype.

Parameters
hsSpec of the house.
Returns
CargoArray filled with cargo accepted by the house.

Definition at line 853 of file town_cmd.cpp.

References AddAcceptedCargoOfHouse(), HouseSpec::Index(), and INVALID_TILE.

Referenced by BuildHouseWindow::GetHouseInformation().

◆ GetFoundation_Town()

static Foundation GetFoundation_Town ( TileIndex  tile,
Slope  tileh 
)
static

Get the foundation for a house.

This is a tile callback routine.

Parameters
tileThe tile to find a foundation for.
tilehThe slope of the tile.

Definition at line 326 of file town_cmd.cpp.

References CALLBACK_FAILED, HouseSpec::callback_mask, CBID_HOUSE_DRAW_FOUNDATIONS, CBM_HOUSE_DRAW_FOUNDATIONS, ConvertBooleanCallback(), FlatteningFoundation(), FOUNDATION_NONE, HouseSpec::Get(), GetHouseType(), HouseSpec::grf_prop, GRFFilePropsBase< Tcnt >::grffile, HasBit(), NEW_HOUSE_OFFSET, and GRFFilePropsBase< Tcnt >::spritegroup.

◆ GetHouseNorthPart()

TileIndexDiff GetHouseNorthPart ( HouseID house)

Determines if a given HouseID is part of a multitile house.

The given ID is set to the ID of the north tile and the TileDiff to the north tile is returned.

Parameters
houseIs changed to the HouseID of the north tile of the same house
Returns
TileDiff from the tile of the given HouseID to the north tile

Definition at line 2950 of file town_cmd.cpp.

References HouseSpec::Get(), and TileDiffXY().

Referenced by ClearTownHouse(), GetDistanceFromNearbyHouse(), RebuildTownCaches(), SearchNearbyHouseClass(), SearchNearbyHouseGRFID(), SearchNearbyHouseID(), UpdateHousesAndTowns(), and WatchedCargoCallback().

◆ GetMaskOfTownActions()

TownActions GetMaskOfTownActions ( CompanyID  cid,
const Town t 
)

◆ GetNormalGrowthRate()

static uint GetNormalGrowthRate ( Town t)
static

Calculates town growth rate in normal conditions (custom growth rate not set).

If town growth speed is set to None(0) returns the same rate as if it was Normal(2).

Parameters
tThe town to calculate growth rate for
Returns
Calculated growth rate

Note: Unserviced+unfunded towns get an additional malus in UpdateTownGrowth(), so the "320" is actually not better than the "420".

Definition at line 3770 of file town_cmd.cpp.

References _settings_game, Town::cache, CountActiveStations(), GameSettings::economy, Town::fund_buildings_months, Town::larger_town, TownCache::num_houses, and EconomySettings::town_growth_rate.

Referenced by UpdateTownGrowthRate().

◆ GetRating()

static int GetRating ( const Town t)
static

Get the rating of a town for the _current_company.

Parameters
tTown to get the rating from.
Returns
Rating of the current company in the given town.

Definition at line 3957 of file town_cmd.cpp.

References _current_company, _town_rating_test, _town_test_ratings, and Town::ratings.

Referenced by ChangeTownRating(), and CheckforTownRating().

◆ GetSlopePixelZ_Town()

static int GetSlopePixelZ_Town ( TileIndex  tile,
uint  ,
uint  ,
bool   
)
static

Definition at line 316 of file town_cmd.cpp.

◆ GetTileDesc_Town()

static void GetTileDesc_Town ( TileIndex  tile,
TileDesc td 
)
static

Definition at line 861 of file town_cmd.cpp.

◆ GetTileTrackStatus_Town()

static TrackStatus GetTileTrackStatus_Town ( TileIndex  ,
TransportType  ,
uint  ,
DiagDirection   
)
static

Definition at line 894 of file town_cmd.cpp.

◆ GetTownDrawTileData()

std::span< const DrawBuildingsTileStruct > GetTownDrawTileData ( )

Definition at line 4125 of file town_cmd.cpp.

◆ GetTownRadiusGroup()

HouseZonesBits GetTownRadiusGroup ( const Town t,
TileIndex  tile 
)

Returns the bit corresponding to the town zone of the specified tile.

Parameters
tTown on which town zone is to be found.
tileTileIndex where town zone needs to be found.
Returns
the bit position of the given zone, as defined in HouseZones.

Definition at line 2474 of file town_cmd.cpp.

References DistanceSquare(), Town::fund_buildings_months, and Town::xy.

Referenced by AirportTileScopeResolver::GetVariable(), HouseScopeResolver::GetVariable(), IndustriesScopeResolver::GetVariable(), IndustryTileScopeResolver::GetVariable(), ObjectScopeResolver::GetVariable(), RailTypeScopeResolver::GetVariable(), RoadStopScopeResolver::GetVariable(), RoadTypeScopeResolver::GetVariable(), and TryBuildTownHouse().

◆ GetTownRoadBits()

static RoadBits GetTownRoadBits ( TileIndex  tile)
static

Return the RoadBits of a tile, ignoring depot and bay road stops.

Parameters
tileThe tile to check.
Returns
The roadbits of the given tile.

Definition at line 942 of file town_cmd.cpp.

References GetAnyRoadBits(), IsBayRoadStopTile(), IsRoadDepotTile(), and ROAD_NONE.

Referenced by CanFollowRoad(), GrowTown(), GrowTownAtRoad(), GrowTownWithBridge(), GrowTownWithTunnel(), IsNeighborRoadTile(), and IsRoadAllowedHere().

◆ GetTownRoadGridElement()

static RoadBits GetTownRoadGridElement ( Town t,
TileIndex  tile,
DiagDirection  dir 
)
static

Generate the RoadBits of a grid tile.

Parameters
tThe current town.
tileThe tile in reference to the town.
dirThe direction to which we are growing.
Returns
The RoadBit of the current tile regarding the selected town layout.

Definition at line 1144 of file town_cmd.cpp.

References DiagDirToRoadBits(), GetTileSlope(), Town::layout, ReverseDiagDir(), ROAD_ALL, ROAD_NE, ROAD_NONE, ROAD_NW, ROAD_SE, ROAD_SW, ROAD_X, ROAD_Y, SLOPE_E, SLOPE_N, SLOPE_NE, SLOPE_NW, SLOPE_S, SLOPE_SE, SLOPE_STEEP_E, SLOPE_STEEP_N, SLOPE_STEEP_S, SLOPE_STEEP_W, SLOPE_SW, SLOPE_W, TileIndexToTileIndexDiffC(), TL_2X2_GRID, TL_3X3_GRID, TileIndexDiffC::x, Town::xy, and TileIndexDiffC::y.

Referenced by GrowTownInTile().

◆ GetTownRoadType()

◆ GetTownRoadTypeFirstIntroductionDate()

static TimerGameCalendar::Date GetTownRoadTypeFirstIntroductionDate ( )
static

Get the calendar date of the earliest town-buildable road type.

Returns
introduction date of earliest road type, or INT32_MAX if none available.

Definition at line 988 of file town_cmd.cpp.

References RoadTypeInfo::flags, GetRoadTypeInfo(), HasBit(), RoadTypeInfo::introduction_date, RoadTypeInfo::label, ROADTYPE_BEGIN, ROADTYPE_END, and ROTF_TOWN_BUILD.

Referenced by CheckTownRoadTypes().

◆ GetWorldPopulation()

uint32_t GetWorldPopulation ( )

Get the total population, the sum of all towns in the world.

Returns
The calculated population of the world

Definition at line 462 of file town_cmd.cpp.

References Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_town_pool >::Iterate().

Referenced by TownDirectoryWindow::SetStringParameters().

◆ GrowTown()

◆ GrowTownAtRoad()

◆ GrowTownInTile()

static void GrowTownInTile ( TileIndex tile_ptr,
RoadBits  cur_rb,
DiagDirection  target_dir,
Town t1 
)
static

Grows the given town.

There are at the moment 3 possible way's for the town expansion:

  • Generate a random tile and check if there is a road allowed
  • TL_ORIGINAL
  • TL_BETTER_ROADS
  • Check if the town geometry allows a road and which one
  • TL_2X2_GRID
  • TL_3X3_GRID
  • Forbid roads, only build houses
Parameters
tile_ptrThe current tile
cur_rbThe current tiles RoadBits
target_dirThe target road dir
t1The current town

Definition at line 1541 of file town_cmd.cpp.

References _settings_game, EconomySettings::allow_town_level_crossings, ConstructionSettings::build_on_slopes, Chance16(), ChangeDiagDir(), CleanUpRoadBits(), GameSettings::construction, DIAGDIR_END, DIAGDIRDIFF_90LEFT, DIAGDIRDIFF_90RIGHT, DiagDirToRoadBits(), DIR_E, DIR_N, DIR_S, DIR_W, GameSettings::economy, GetOtherTunnelBridgeEnd(), GetTownRoadGridElement(), GetTunnelBridgeTransportType(), GrowTownWithBridge(), GrowTownWithExtraHouse(), GrowTownWithRoad(), GrowTownWithTunnel(), HasTileWaterGround(), IsRoadAllowedHere(), IsTileType(), IsValidTile(), Town::layout, MP_HOUSE, MP_RAILWAY, MP_TUNNELBRIDGE, RandomDiagDir(), ReverseDiagDir(), ROAD_E, ROAD_N, ROAD_NONE, ROAD_S, ROAD_W, ROAD_X, RoadTypesAllowHouseHere(), Map::Size(), TileAddByDiagDir(), TileAddByDir(), TL_2X2_GRID, TL_3X3_GRID, TL_BETTER_ROADS, TL_ORIGINAL, TownAllowedToBuildRoads(), TownCanGrowRoad(), TRANSPORT_ROAD, and TryBuildTownHouse().

Referenced by GrowTownAtRoad().

◆ GrowTownWithBridge()

static bool GrowTownWithBridge ( const Town t,
const TileIndex  tile,
const DiagDirection  bridge_dir 
)
static

Grows the town with a bridge.

At first we check if a bridge is reasonable. If so we check if we are able to build it.

Parameters
tThe current town
tileThe current tile
bridge_dirThe valid direction in which to grow a bridge
Returns
true if a bridge has been build else false

Definition at line 1331 of file town_cmd.cpp.

References Town::cache, CanRoadContinueIntoNextTile(), CircularTileSearch(), CommandFlagsToDCFlags(), DC_EXEC, DIAGDIR_END, DiagDirToRoadBits(), DRD_NONE, GetDisallowedRoadDirections(), GetTileSlope(), GetTownRoadBits(), GetTownRoadType(), InclinedSlope(), IsNormalRoadTile(), IsPlainRailTile(), IsSea(), IsValidTile(), IsWaterTile(), MAX_BRIDGES, TownCache::population, RandomRange(), RedundantBridgeExistsNearby(), ReverseDiagDir(), SLOPE_FLAT, TileAddByDiagDir(), TileOffsByDiagDir(), and TRANSPORT_ROAD.

Referenced by GrowTownInTile().

◆ GrowTownWithExtraHouse()

static bool GrowTownWithExtraHouse ( Town t,
TileIndex  tile 
)
static

Grows the town with an extra house.

Check if there are enough neighbor house tiles next to the current tile. If there are enough add another house.

Parameters
tThe current town.
tileThe target tile for the extra house.
Returns
true if an extra house has been added.

Definition at line 1203 of file town_cmd.cpp.

References DIAGDIR_BEGIN, DIAGDIR_END, DistanceFromEdge(), GetTileType(), MP_HOUSE, MP_VOID, TileAddByDiagDir(), and TryBuildTownHouse().

Referenced by GrowTownInTile().

◆ GrowTownWithRoad()

static bool GrowTownWithRoad ( const Town t,
TileIndex  tile,
RoadBits  rcmd 
)
static

Grows the town with a road piece.

Parameters
tThe current town.
tileThe current tile.
rcmdThe RoadBits we want to build on the tile.
Returns
true if the RoadBits have been added.

Definition at line 1245 of file town_cmd.cpp.

References DC_AUTO, DC_EXEC, DC_NO_WATER, DRD_NONE, GetTownRoadType(), and Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index.

Referenced by GrowTownInTile().

◆ GrowTownWithTunnel()

static bool GrowTownWithTunnel ( const Town t,
const TileIndex  tile,
const DiagDirection  tunnel_dir 
)
static

Grows the town with a tunnel.

First we check if a tunnel is reasonable. If so we check if we are able to build it.

Parameters
tThe current town
tileThe current tile
tunnel_dirThe valid direction in which to grow a tunnel
Returns
true if a tunnel has been built, else false

Definition at line 1412 of file town_cmd.cpp.

References Town::cache, CanRoadContinueIntoNextTile(), CommandFlagsToDCFlags(), DC_EXEC, DIAGDIR_END, DiagDirToRoadBits(), GetTileSlope(), GetTileZ(), GetTownRoadBits(), GetTownRoadType(), InclinedSlope(), IsSlopeWithOneCornerRaised(), IsSteepSlope(), IsValidTile(), TownCache::population, ReverseDiagDir(), TileAddByDiagDir(), TileOffsByDiagDir(), and TRANSPORT_ROAD.

Referenced by GrowTownInTile().

◆ IsCloseToTown()

static bool IsCloseToTown ( TileIndex  tile,
uint  dist 
)
static

Determines if a town is close to a tile.

Parameters
tileTileIndex of the tile to query.
distThe maximum distance to be accepted.
Returns
true if the tile is within the specified distance.

Definition at line 401 of file town_cmd.cpp.

References Kdtree< T, TxyFunc, CoordT, DistT >::Count(), DistanceManhattan(), Kdtree< T, TxyFunc, CoordT, DistT >::FindNearest(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_town_pool >::Get(), TileX(), TileY(), and Town::xy.

Referenced by TownCanBePlacedHere().

◆ IsNeighborRoadTile()

static bool IsNeighborRoadTile ( TileIndex  tile,
const DiagDirection  dir,
uint  dist_multi 
)
static

Check for parallel road inside a given distance.

Assuming a road from (tile - TileOffsByDiagDir(dir)) to tile, is there a parallel road left or right of it within distance dist_multi?

Parameters
tileThe current tile.
dirThe target direction.
dist_multiThe distance multiplier.
Returns
true if there is a parallel road.

Definition at line 1033 of file town_cmd.cpp.

References ChangeDiagDir(), DIAGDIRDIFF_90LEFT, DIAGDIRDIFF_90RIGHT, DiagDirToRoadBits(), GetTownRoadBits(), IsValidTile(), ReverseDiagDir(), TileAdd(), and TileOffsByDiagDir().

Referenced by IsRoadAllowedHere().

◆ IsRoadAllowedHere()

static bool IsRoadAllowedHere ( Town t,
TileIndex  tile,
DiagDirection  dir 
)
static

◆ IsTileAlignedToGrid()

static bool IsTileAlignedToGrid ( TileIndex  tile,
TownLayout  layout 
)
static

Towns must all be placed on the same grid or when they eventually interpenetrate their road networks will not mesh nicely; this function tells you if a tile is properly aligned.

Parameters
tileThe tile to start at.
layoutThe town layout in effect.
Returns
true if the tile is in the correct location.

Definition at line 2267 of file town_cmd.cpp.

References TileX(), TileY(), TL_2X2_GRID, and TL_3X3_GRID.

Referenced by FindFurthestFromWater().

◆ IsUniqueTownName()

static bool IsUniqueTownName ( const std::string &  name)
static

Verifies this custom name is unique.

Only custom names are checked.

Parameters
nameThe name to check.
Returns
true if the name is unique

Definition at line 2121 of file town_cmd.cpp.

References Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_town_pool >::Iterate(), and Town::name.

Referenced by CmdFoundTown(), and CmdRenameTown().

◆ LevelTownLand()

static void LevelTownLand ( TileIndex  tile)
static

Definition at line 1121 of file town_cmd.cpp.

◆ MakeTownHouse()

static void MakeTownHouse ( TileIndex  tile,
Town t,
uint8_t  counter,
uint8_t  stage,
HouseID  type,
uint8_t  random_bits 
)
static

Write house information into the map.

For multi-tile houses, all tiles are marked.

Parameters
townThe town related to this house
tThe tile to build on. If a multi-tile house, this is the northern-most tile.
counterThe counter of the construction stage.
stageThe current construction stage.
Thetype of house.
random_bitsRandom bits for newgrf houses to use.
Precondition
The house can be built here.

Definition at line 2521 of file town_cmd.cpp.

References HouseSpec::building_flags, ClearMakeHouseTile(), ForAllStationsAroundTiles(), HouseSpec::Get(), Town::stations_near, and TileDiffXY().

Referenced by BuildTownHouse().

◆ OnTick_Town()

void OnTick_Town ( )

Iterate through all towns and call their tick handler.

Definition at line 928 of file town_cmd.cpp.

References Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_town_pool >::Iterate(), and TownTickHandler().

◆ RandomDiagDir()

static DiagDirection RandomDiagDir ( )
inlinestatic

Return a random direction.

Returns
a random direction

Definition at line 258 of file town_cmd.cpp.

References DIAGDIR_END, and RandomRange().

Referenced by GrowTownAtRoad(), and GrowTownInTile().

◆ RebuildTownKdtree()

void RebuildTownKdtree ( )

Definition at line 73 of file town_cmd.cpp.

◆ RedundantBridgeExistsNearby()

static bool RedundantBridgeExistsNearby ( TileIndex  tile,
void *  user_data 
)
static

CircularTileSearch proc which checks for a nearby parallel bridge to avoid building redundant bridges.

Parameters
tileThe tile to search.
user_dataReference to the valid direction of the proposed bridge.
Returns
true if another bridge exists, else false.

Definition at line 1306 of file town_cmd.cpp.

References GetTileSlope(), GetTunnelBridgeTransportType(), InclinedSlope(), IsBridgeTile(), IsValidTile(), ReverseDiagDir(), and TRANSPORT_ROAD.

Referenced by GrowTownWithBridge().

◆ RemoveNearbyStations()

static void RemoveNearbyStations ( Town t,
TileIndex  tile,
BuildingFlags  flags 
)
static

Remove stations from nearby station list if a town is no longer in the catchment area of each.

To improve performance only checks stations that cover the provided house area (doesn't need to contain an actual house).

Parameters
tTown to work on.
tileLocation of house area (north tile).
flagsBuildingFlags containing the size of house area.

Definition at line 476 of file town_cmd.cpp.

References Station::CatchmentCoversTown(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, Town::stations_near, and TileDiffXY().

Referenced by ClearTownHouse().

◆ RoadTypesAllowHouseHere()

static bool RoadTypesAllowHouseHere ( TileIndex  t)
inlinestatic

Checks whether at least one surrounding road allows to build a house here.

Parameters
tThe tile where the house will be built.
Returns
true if at least one surrounding roadtype allows building houses here.

Definition at line 1478 of file town_cmd.cpp.

References GetRoadTypeInfo(), HasBit(), INVALID_ROADTYPE, IsAnyRoadStopTile(), IsTileType(), IsValidTile(), MP_ROAD, ROTF_NO_HOUSES, and ToTileIndexDiff().

Referenced by CanBuildHouseHere(), and GrowTownInTile().

◆ SearchTileForStatue()

static bool SearchTileForStatue ( TileIndex  tile,
void *  user_data 
)
static

Search callback function for TownActionBuildStatue.

Parameters
tileTile on which to perform the search.
user_dataReference to the statue search data.
Returns
Result of the test.

Definition at line 3416 of file town_cmd.cpp.

References StatueBuildSearchData::best_position, CheckClearTile(), GetTileSlope(), INVALID_TILE, IsBridgeAbove(), IsSteepSlope(), IsTileType(), MP_CLEAR, MP_HOUSE, MP_TREES, and StatueBuildSearchData::tile_count.

Referenced by TownActionBuildStatue().

◆ SetTownRatingTestMode()

void SetTownRatingTestMode ( bool  mode)

Switch the town rating to test-mode, to allow commands to be tested without affecting current ratings.

The function is safe to use in nested calls.

Parameters
modeTest mode switch (true means go to test-mode, false means leave test-mode).

Definition at line 3937 of file town_cmd.cpp.

References _town_rating_test, and _town_test_ratings.

Referenced by CommandHelperBase::InternalDoAfter(), CommandHelperBase::InternalDoBefore(), CommandHelperBase::InternalExecutePrepTest(), and CommandHelperBase::InternalExecuteValidateTestAndPrepExec().

◆ TerraformTile_Town()

static CommandCost TerraformTile_Town ( TileIndex  tile,
DoCommandFlag  flags,
int  z_new,
Slope  tileh_new 
)
static

Definition at line 4079 of file town_cmd.cpp.

◆ TerraformTownTile()

static bool TerraformTownTile ( TileIndex  tile,
Slope  edges,
bool  dir 
)
static

Definition at line 1111 of file town_cmd.cpp.

◆ TestTownOwnsBridge()

static bool TestTownOwnsBridge ( TileIndex  tile,
const Town t 
)
static

Check if a town 'owns' a bridge.

Bridges do not directly have an owner, so we check the tiles adjacent to the bridge ends. If either adjacent tile belongs to the town then it will be assumed that the town built the bridge.

Parameters
tileThe bridge tile to test
tThe town we are interested in
Returns
true If town 'owns' a bridge.

Definition at line 94 of file town_cmd.cpp.

References GetOtherTunnelBridgeEnd(), GetTownIndex(), GetTunnelBridgeDirection(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, IsTileOwner(), IsTileType(), MP_ROAD, OWNER_TOWN, ReverseDiagDir(), and TileOffsByDiagDir().

Referenced by CmdDeleteTown(), and Town::~Town().

◆ TileLoop_Town()

◆ TownActionAdvertiseLarge()

static CommandCost TownActionAdvertiseLarge ( Town t,
DoCommandFlag  flags 
)
static

Perform the "large advertising campaign" town action.

Parameters
tThe town to advertise in.
flagsType of operation.
Returns
An empty cost.

Definition at line 3352 of file town_cmd.cpp.

References _current_company, DC_EXEC, and Town::xy.

◆ TownActionAdvertiseMedium()

static CommandCost TownActionAdvertiseMedium ( Town t,
DoCommandFlag  flags 
)
static

Perform the "medium advertising campaign" town action.

Parameters
tThe town to advertise in.
flagsType of operation.
Returns
An empty cost.

Definition at line 3338 of file town_cmd.cpp.

References _current_company, DC_EXEC, and Town::xy.

◆ TownActionAdvertiseSmall()

static CommandCost TownActionAdvertiseSmall ( Town t,
DoCommandFlag  flags 
)
static

Perform the "small advertising campaign" town action.

Parameters
tThe town to advertise in.
flagsType of operation.
Returns
An empty cost.

Definition at line 3324 of file town_cmd.cpp.

References _current_company, DC_EXEC, and Town::xy.

◆ TownActionBribe()

◆ TownActionBuildStatue()

static CommandCost TownActionBuildStatue ( Town t,
DoCommandFlag  flags 
)
static

Perform a 9x9 tiles circular search from the center of the town in order to find a free tile to place a statue.

Parameters
ttown to search in
flagsUsed to check if the statue must be built or not.
Returns
Empty cost or an error.

Definition at line 3459 of file town_cmd.cpp.

References _current_company, StatueBuildSearchData::best_position, BuildObject(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_object_pool >::CanAllocateItem(), CircularTileSearch(), DC_EXEC, INVALID_TILE, MarkTileDirtyByTile(), OBJECT_STATUE, OWNER_NONE, Backup< T >::Restore(), SearchTileForStatue(), SetBit(), Town::statues, and Town::xy.

◆ TownActionBuyRights()

◆ TownActionFundBuildings()

static CommandCost TownActionFundBuildings ( Town t,
DoCommandFlag  flags 
)
static

◆ TownActionRoadRebuild()

◆ TownAllowedToBuildRoads()

static bool TownAllowedToBuildRoads ( )
inlinestatic

Check if the town is allowed to build roads.

Returns
true If the town is allowed to build roads.

Definition at line 1519 of file town_cmd.cpp.

References _generating_world, _settings_game, EconomySettings::allow_town_roads, and GameSettings::economy.

Referenced by CanFollowRoad(), GrowTown(), GrowTownInTile(), TownLayoutAllows2x2HouseHere(), and TownLayoutAllowsHouseHere().

◆ TownCanBePlacedHere()

static CommandCost TownCanBePlacedHere ( TileIndex  tile)
static

Check if it's possible to place a town on a given tile.

Parameters
tileThe tile to check.
Returns
A zero cost if allowed, otherwise an error.

Definition at line 2096 of file town_cmd.cpp.

References DistanceFromEdge(), EXPENSES_OTHER, IsCloseToTown(), IsTileFlat(), IsTileType(), MP_CLEAR, and MP_TREES.

Referenced by CmdFoundTown(), and CreateRandomTown().

◆ TownCanGrowRoad()

static bool TownCanGrowRoad ( TileIndex  tile)
static

Test if town can grow road onto a specific tile.

Parameters
tileTile to build upon.
Returns
true iff the tile's road type don't prevent extending the road.

Definition at line 1506 of file town_cmd.cpp.

References GetRoadTypeInfo(), GetTownRoadType(), HasBit(), IsTileType(), MP_ROAD, and ROTF_TOWN_BUILD.

Referenced by GrowTownInTile().

◆ TownDrawHouseLift()

static void TownDrawHouseLift ( const TileInfo ti)
static

Definition at line 243 of file town_cmd.cpp.

◆ TownGenerateCargo()

static void TownGenerateCargo ( Town t,
CargoID  ct,
uint  amount,
StationFinder stations,
bool  affected_by_recession 
)
static

Generate cargo for a house, scaled by the current economy scale.

Parameters
tThe current town.
ctType of cargo to generate, usually CT_PASSENGERS or CT_MAIL.
amountThe number of cargo units.
stationsAvailable stations for this house.
affected_by_recessionIs this cargo halved during recessions?

Definition at line 538 of file town_cmd.cpp.

References EconomyIsInRecession(), StationFinder::GetStations(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, TransportedCargoStat< Tstorage >::new_act, TransportedCargoStat< Tstorage >::new_max, ScaleByCargoScale(), Town::supplied, and Town.

Referenced by TileLoop_Town(), TownGenerateCargoBinominal(), and TownGenerateCargoOriginal().

◆ TownGenerateCargoBinominal()

static void TownGenerateCargoBinominal ( Town t,
TownProductionEffect  tpe,
uint8_t  rate,
StationFinder stations 
)
static

Generate cargo for a house using the binominal algorithm.

Parameters
tThe current town.
tpeThe town production effect.
rateThe town's product rate for this production.
stationsAvailable stations for this house.

Definition at line 582 of file town_cmd.cpp.

References CountBits(), CargoSpec::town_production_cargoes, and TownGenerateCargo().

Referenced by TileLoop_Town().

◆ TownGenerateCargoOriginal()

static void TownGenerateCargoOriginal ( Town t,
TownProductionEffect  tpe,
uint8_t  rate,
StationFinder stations 
)
static

Generate cargo for a house using the original algorithm.

Parameters
tThe current town.
tpeThe town production effect.
rateThe town's product rate for this production.
stationsAvailable stations for this house.

Definition at line 562 of file town_cmd.cpp.

References GB(), CargoSpec::town_production_cargoes, and TownGenerateCargo().

Referenced by TileLoop_Town().

◆ TownLayoutAllows2x2HouseHere()

static bool TownLayoutAllows2x2HouseHere ( Town t,
TileIndex  tile 
)
inlinestatic

Checks if the current town layout allows a 2x2 building here.

Parameters
tThe town.
tileThe tile to check.
Returns
true iff town layout allows a 2x2 building here.
Note
see layouts

Definition at line 2639 of file town_cmd.cpp.

References Town::layout, TileIndexToTileIndexDiffC(), TL_2X2_GRID, TL_3X3_GRID, TownAllowedToBuildRoads(), TileIndexDiffC::x, Town::xy, and TileIndexDiffC::y.

Referenced by CheckTownBuild2x2House().

◆ TownLayoutAllowsHouseHere()

static bool TownLayoutAllowsHouseHere ( Town t,
TileIndex  tile 
)
inlinestatic

Checks if the current town layout allows building here.

Parameters
tThe town.
tileThe tile to check.
Returns
true iff town layout allows building here.
Note
see layouts

Definition at line 2608 of file town_cmd.cpp.

References Town::layout, TileIndexToTileIndexDiffC(), TL_2X2_GRID, TL_3X3_GRID, TownAllowedToBuildRoads(), TileIndexDiffC::x, Town::xy, and TileIndexDiffC::y.

Referenced by CheckTownBuild2House(), and TryBuildTownHouse().

◆ TownTickHandler()

static void TownTickHandler ( Town t)
static

Handle the town tick for a single town, by growing the town if desired.

Parameters
tThe town to try growing.

Definition at line 911 of file town_cmd.cpp.

References Town::flags, Town::grow_counter, Town::growth_rate, GrowTown(), HasBit(), Ticks::TOWN_GROWTH_TICKS, and TOWN_IS_GROWING.

Referenced by OnTick_Town().

◆ TryBuildTownHouse()

◆ UpdateAllTownVirtCoords()

void UpdateAllTownVirtCoords ( )

Update the virtual coords needed to draw the town sign for all towns.

Definition at line 427 of file town_cmd.cpp.

References Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_town_pool >::Iterate().

Referenced by UpdateAllVirtCoords().

◆ UpdateTownGrowCounter()

static void UpdateTownGrowCounter ( Town t,
uint16_t  prev_growth_rate 
)
static

Updates town grow counter after growth rate change.

Preserves relative house builting progress whenever it can.

Parameters
tThe town to calculate grow counter for
prev_growth_rateTown growth rate before it changed (one that was used with grow counter to be updated)

Definition at line 3738 of file town_cmd.cpp.

References Town::grow_counter, Town::growth_rate, RoundDivSU(), and TOWN_GROWTH_RATE_NONE.

Referenced by UpdateTownGrowthRate().

◆ UpdateTownGrowth()

◆ UpdateTownGrowthRate()

static void UpdateTownGrowthRate ( Town t)
static

◆ UpdateTownMaxPass()

void UpdateTownMaxPass ( Town t)

Update the maximum amount of montly passengers and mail for a town, based on its population.

Parameters
tThe town to update.

Definition at line 1993 of file town_cmd.cpp.

References Town::cache, TransportedCargoStat< Tstorage >::old_max, TownCache::population, ScaleByCargoScale(), Town::supplied, CargoSpec::town_production_cargoes, TPE_MAIL, and TPE_PASSENGERS.

Referenced by AfterLoadGame(), CmdExpandTown(), and DoCreateTown().

◆ UpdateTownRadius()

void UpdateTownRadius ( Town t)

Update the cached town zone radii of a town, based on the number of houses.

Parameters
tThe town to update.

Definition at line 1946 of file town_cmd.cpp.

References Town::cache, TownCache::num_houses, and TownCache::squared_town_zone_radius.

Referenced by BuildTownHouse(), ClearTownHouse(), CmdExpandTown(), DoCreateTown(), and RebuildTownCaches().

◆ UpdateTownRating()

Variable Documentation

◆ _generating_town

bool _generating_town = false
static

Set if a town is being generated.

Definition at line 83 of file town_cmd.cpp.

Referenced by ChangePopulation(), and DoCreateTown().

◆ _grow_town_result

int _grow_town_result
static

Definition at line 231 of file town_cmd.cpp.

◆ _num_initial_towns

const uint8_t _num_initial_towns[4] = {5, 11, 23, 46}
static

Definition at line 2405 of file town_cmd.cpp.

◆ _tile_type_town_procs

const TileTypeProcs _tile_type_town_procs
extern
Initial value:
= {
GetSlopePixelZ_Town,
AddAcceptedCargo_Town,
GetTileDesc_Town,
GetTileTrackStatus_Town,
nullptr,
ChangeTileOwner_Town,
AddProducedCargo_Town,
nullptr,
TerraformTile_Town,
}
static CommandCost ClearTile_Town(TileIndex tile, DoCommandFlag flags)
Callback function to clear a house tile.
Definition town_cmd.cpp:717
static void TileLoop_Town(TileIndex tile)
Tile callback function.
Definition town_cmd.cpp:605
static Foundation GetFoundation_Town(TileIndex tile, Slope tileh)
Get the foundation for a house.
Definition town_cmd.cpp:326
static void AnimateTile_Town(TileIndex tile)
Animate a tile for a town.
Definition town_cmd.cpp:350
static void DrawTile_Town(TileInfo *ti)
Draw a house and its tile.
Definition town_cmd.cpp:267

Tile callback functions for a town.

Definition at line 51 of file landscape.cpp.

◆ _town_action_costs

const uint8_t _town_action_costs[TACT_COUNT]
Initial value:
= {
2, 4, 9, 35, 48, 53, 117, 175
}

Factor in the cost of each town action.

See also
TownActions

Definition at line 3314 of file town_cmd.cpp.

Referenced by CmdDoTownAction(), TownAuthorityWindow::DrawWidget(), GetMaskOfTownActions(), and TownAuthorityWindow::UpdateWidgetSize().

◆ _town_action_proc

TownActionProc* const _town_action_proc[]
static
Initial value:
= {
}
static CommandCost TownActionBribe(Town *t, DoCommandFlag flags)
Perform the "bribe" town action.
static CommandCost TownActionAdvertiseLarge(Town *t, DoCommandFlag flags)
Perform the "large advertising campaign" town action.
static CommandCost TownActionAdvertiseSmall(Town *t, DoCommandFlag flags)
Perform the "small advertising campaign" town action.
static CommandCost TownActionAdvertiseMedium(Town *t, DoCommandFlag flags)
Perform the "medium advertising campaign" town action.
static CommandCost TownActionRoadRebuild(Town *t, DoCommandFlag flags)
Perform the "local road reconstruction" town action.
static CommandCost TownActionFundBuildings(Town *t, DoCommandFlag flags)
Perform the "fund new buildings" town action.
static CommandCost TownActionBuyRights(Town *t, DoCommandFlag flags)
Perform the "buy exclusive transport rights" town action.
static CommandCost TownActionBuildStatue(Town *t, DoCommandFlag flags)
Perform a 9x9 tiles circular search from the center of the town in order to find a free tile to place...

Definition at line 3588 of file town_cmd.cpp.

◆ _town_draw_tile_procs

TownDrawTileProc* const _town_draw_tile_procs[1]
static
Initial value:
= {
TownDrawHouseLift
}

Definition at line 249 of file town_cmd.cpp.

◆ _town_kdtree

TownKdtree _town_kdtree {}

Definition at line 71 of file town_cmd.cpp.

◆ _town_rating_test

bool _town_rating_test = false
static

If true, town rating is in test-mode.

Definition at line 3929 of file town_cmd.cpp.

Referenced by ChangeTownRating(), GetRating(), and SetTownRatingTestMode().

◆ _town_test_ratings

std::map<const Town *, int> _town_test_ratings
static

Map of towns to modified ratings, while in town rating test-mode.

Definition at line 3930 of file town_cmd.cpp.

Referenced by ChangeTownRating(), GetRating(), and SetTownRatingTestMode().