OpenTTD Source 20250312-master-gcdcc6b491d
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, DoCommandFlags 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, CargoType 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 TownGenerateCargoBinomial (Town *t, TownProductionEffect tpe, uint8_t rate, StationFinder &stations)
 Generate cargo for a house using the binomial algorithm.
 
static void TileLoop_Town (TileIndex tile)
 Tile callback function.
 
static CommandCost ClearTile_Town (TileIndex tile, DoCommandFlags flags)
 Callback function to clear a house tile.
 
static void AddProducedCargo_Town (TileIndex tile, CargoArray &produced)
 
static void AddAcceptedCargoSetMask (CargoType cargo, uint amount, CargoArray &acceptance, CargoTypes &always_accepted)
 Fill cargo acceptance array and always_accepted mask, if cargo type 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 IsNeighbourRoadTile (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 monthly 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, TownIDCmdFoundTown (DoCommandFlags 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, bool is_protected)
 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, bool is_protected)
 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, bool house_completed, bool is_protected)
 Build a house at this tile.
 
CommandCost CmdPlaceHouse (DoCommandFlags flags, TileIndex tile, HouseID house, bool is_protected)
 Place an individual 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 (DoCommandFlags 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 (DoCommandFlags flags, TownID town_id, TownAcceptanceEffect tae, uint32_t goal)
 Change the cargo goal of a town.
 
CommandCost CmdTownSetText (DoCommandFlags flags, TownID town_id, const EncodedString &text)
 Set a custom text in the Town window.
 
CommandCost CmdTownGrowthRate (DoCommandFlags flags, TownID town_id, uint16_t growth_rate)
 Change the growth rate of the town.
 
CommandCost CmdTownRating (DoCommandFlags flags, TownID town_id, CompanyID company_id, int16_t rating)
 Change the rating of a company in a town.
 
CommandCost CmdExpandTown (DoCommandFlags flags, TownID town_id, uint32_t grow_amount)
 Expand a town (scenario editor only).
 
CommandCost CmdDeleteTown (DoCommandFlags flags, TownID town_id)
 Delete a town (scenario editor or worldgen only).
 
uint8_t GetTownActionCost (TownAction action)
 Get cost factors for a TownAction.
 
static CommandCost TownActionAdvertiseSmall (Town *t, DoCommandFlags flags)
 Perform the "small advertising campaign" town action.
 
static CommandCost TownActionAdvertiseMedium (Town *t, DoCommandFlags flags)
 Perform the "medium advertising campaign" town action.
 
static CommandCost TownActionAdvertiseLarge (Town *t, DoCommandFlags flags)
 Perform the "large advertising campaign" town action.
 
static CommandCost TownActionRoadRebuild (Town *t, DoCommandFlags 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, DoCommandFlags 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, DoCommandFlags flags)
 Perform the "fund new buildings" town action.
 
static CommandCost TownActionBuyRights (Town *t, DoCommandFlags flags)
 Perform the "buy exclusive transport rights" town action.
 
static CommandCost TownActionBribe (Town *t, DoCommandFlags flags)
 Perform the "bribe" town action.
 
TownActions GetMaskOfTownActions (CompanyID cid, const Town *t)
 Get a list of available town authority actions.
 
CommandCost CmdDoTownAction (DoCommandFlags flags, TownID town_id, TownAction 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, DoCommandFlags 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, DoCommandFlags flags)
 Changes town rating of the current company.
 
CommandCost CheckforTownRating (DoCommandFlags flags, Town *t, TownRatingCheckType type)
 Does the town authority allow the (destructive) action of the current company?
 
static CommandCost TerraformTile_Town (TileIndex tile, DoCommandFlags 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}
 
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=CompanyID::Invalid();} 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, DoCommandFlags flags)

Definition at line 3614 of file town_cmd.cpp.

◆ TownDrawTileProc

typedef void TownDrawTileProc(const TileInfo *ti)

Definition at line 249 of file town_cmd.cpp.

Enumeration Type Documentation

◆ TownGrowthResult

enum TownGrowthResult

Definition at line 235 of file town_cmd.cpp.

Function Documentation

◆ AddAcceptedCargo_Town()

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

Definition at line 847 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 805 of file town_cmd.cpp.

References _settings_game, AcceptCargo, HouseSpec::accepts_cargo, AddAcceptedCargoSetMask(), CALLBACK_FAILED, HouseSpec::callback_mask, HouseSpec::cargo_acceptance, CargoAcceptance, CBID_HOUSE_ACCEPT_CARGO, CBID_HOUSE_CARGO_ACCEPTANCE, GameSettings::game_creation, GB(), GetCargoTranslation(), HouseSpec::grf_prop, GRFFilePropsBase::grffile, HasBit(), INVALID_TILE, GameCreationSettings::landscape, lengthof, and BaseBitSet< Timpl, Tvalue_type, Tstorage, Tmask >::Test().

Referenced by GetAcceptedCargoOfHouse().

◆ AddAcceptedCargoSetMask()

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

Fill cargo acceptance array and always_accepted mask, if cargo type 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 789 of file town_cmd.cpp.

References IsValidCargoType(), and SetBit().

Referenced by AddAcceptedCargoOfHouse().

◆ AddProducedCargo_Town()

static void AddProducedCargo_Town ( TileIndex  tile,
CargoArray produced 
)
static

Definition at line 751 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(), BaseBitSet< Timpl, Tvalue_type, Tstorage, Tmask >::Any(), 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 2256 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 351 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,
bool  house_completed,
bool  is_protected 
)
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.
house_completedShould the house be placed already complete, instead of under construction?
is_protectedWhether the house is protected from the town upgrading it.

Definition at line 2736 of file town_cmd.cpp.

References _generating_world, BuildingIsHistorical, Town::cache, Chance16(), ChangePopulation(), HouseSpec::extra_flags, GB(), MakeTownHouse(), TownCache::num_houses, HouseSpec::population, Random, BaseBitSet< Timpl, Tvalue_type, Tstorage, Tmask >::Test(), TOWN_HOUSE_COMPLETED, UpdateTownGrowthRate(), and UpdateTownRadius().

Referenced by CmdPlaceHouse(), and 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 3904 of file town_cmd.cpp.

References DistanceManhattan(), Kdtree< T, TxyFunc, CoordT, DistT >::FindNearest(), Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem<&_town_pool >::Get(), Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::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 2552 of file town_cmd.cpp.

References Auto, GetTileSlope(), IsBridgeAbove(), IsSteepSlope(), NoWater, 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 1759 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 1274 of file town_cmd.cpp.

References _settings_game, EconomySettings::allow_town_level_crossings, Auto, DiagDirToAxis(), DiagDirToRoadBits(), DRD_NONE, GameSettings::economy, GetBayRoadStopDir(), GetDriveThroughStopAxis(), GetRoadDepotDirection(), GetTownRoadType(), GetTunnelBridgeDirection(), GetTunnelBridgeTransportType(), Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem< Tpool >::index, IsBayRoadStopTile(), IsDriveThroughStopTile(), IsRoadDepot(), IsTileType(), IsValidTile(), MP_RAILWAY, MP_ROAD, MP_STATION, MP_TUNNELBRIDGE, NoWater, 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, Tpool_type, Tcache >::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 906 of file town_cmd.cpp.

◆ ChangeTownRating()

void ChangeTownRating ( Town t,
int  add,
int  max,
DoCommandFlags  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 2577 of file town_cmd.cpp.

References CanBuildHouseHere(), and GetTileMaxZ().

Referenced by CheckFree2x2Area(), CheckTownBuild2House(), and CmdPlaceHouse().

◆ 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 3423 of file town_cmd.cpp.

References _current_company, 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 2596 of file town_cmd.cpp.

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

Referenced by CheckTownBuild2x2House().

◆ CheckIfAuthorityAllowsNewStation()

CommandCost CheckIfAuthorityAllowsNewStation ( TileIndex  tile,
DoCommandFlags  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. DoCommandFlag::NoTestTownRating is tested.
Returns
Succeeded or failed command.

Definition at line 3881 of file town_cmd.cpp.

References _current_company, _settings_game, ClosestTownFromTile(), CommandCostWithParam(), GameSettings::difficulty, EconomySettings::dist_local_authority, GameSettings::economy, Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem< Tpool >::index, Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem<&_company_pool >::IsValidID(), NoTestTownRating, Town::ratings, BaseBitSet< Timpl, Tvalue_type, Tstorage, Tmask >::Test(), 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 2685 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 2710 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 1015 of file town_cmd.cpp.

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

Referenced by _GenerateWorld().

◆ ClearAllTownCachedNames()

void ClearAllTownCachedNames ( )

Clear the cached_name of all towns.

Definition at line 435 of file town_cmd.cpp.

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

◆ ClearMakeHouseTile()

static void ClearMakeHouseTile ( TileIndex  tile,
Town t,
uint8_t  counter,
uint8_t  stage,
HouseID  type,
uint8_t  random_bits,
bool  is_protected 
)
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.
is_protectedWhether the house is protected from the town upgrading it.
Precondition
The house can be built here.

Definition at line 2506 of file town_cmd.cpp.

References AddAnimatedTile(), Auto, Execute, HouseSpec::Get(), IncreaseBuildingCount(), Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem< Tpool >::index, MakeHouseTile(), MarkTileDirtyByTile(), NoWater, 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 3922 of file town_cmd.cpp.

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

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

◆ CmdDeleteTown()

◆ CmdDoTownAction()

CommandCost CmdDoTownAction ( DoCommandFlags  flags,
TownID  town_id,
TownAction  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 3689 of file town_cmd.cpp.

References _current_company, CMD_ERROR, Execute, EXPENSES_OTHER, CommandCost::Failed(), Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem<&_town_pool >::GetIfValid(), GetMaskOfTownActions(), GetTownActionCost(), SetWindowDirty(), BaseBitSet< Timpl, Tvalue_type, Tstorage, Tmask >::Test(), to_underlying(), and WC_TOWN_AUTHORITY.

◆ CmdExpandTown()

CommandCost CmdExpandTown ( DoCommandFlags  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 3203 of file town_cmd.cpp.

References _current_company, Town::cache, CMD_ERROR, Execute, Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem<&_town_pool >::GetIfValid(), GrowTown(), TownCache::num_houses, OWNER_DEITY, RandomRange(), BaseBitSet< Timpl, Tvalue_type, Tstorage, Tmask >::Test(), UpdateTownMaxPass(), and UpdateTownRadius().

◆ CmdFoundTown()

std::tuple< CommandCost, Money, TownID > CmdFoundTown ( DoCommandFlags  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 2155 of file town_cmd.cpp.

References _current_company, _generating_world, _settings_game, AI::BroadcastNewEvent(), Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem<&_town_pool >::CanAllocateItem(), CMD_ERROR, CreateRandomTown(), DoCreateTown(), GameSettings::economy, Execute, EXPENSES_OTHER, CommandCost::Failed(), EconomySettings::found_town, GameSettings::game_creation, GetAvailableMoneyForCommand(), CommandCost::GetCost(), GetEncodedString(), GetString(), Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem< Tpool >::index, IndustryOpen, IsUniqueTownName(), lengthof, MAX_LENGTH_TOWN_NAME_CHARS, CommandCost::MultiplyCost(), Town::name, Game::NewEvent(), NUM_TLS, OWNER_DEITY, Backup< T >::Restore(), BaseBitSet< Timpl, Tvalue_type, Tstorage, Tmask >::Test(), 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 ( DoCommandFlags  flags,
TileIndex  tile,
HouseID  house,
bool  is_protected 
)

◆ CmdRenameTown()

CommandCost CmdRenameTown ( DoCommandFlags  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 3039 of file town_cmd.cpp.

References Town::cached_name, CMD_ERROR, Execute, Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem<&_town_pool >::GetIfValid(), InvalidateWindowData(), IsUniqueTownName(), MAX_LENGTH_TOWN_NAME_CHARS, Town::name, BaseBitSet< Timpl, Tvalue_type, Tstorage, Tmask >::Test(), UpdateAllStationVirtCoords(), Town::UpdateVirtCoord(), Utf8StringLength(), and WC_TOWN_DIRECTORY.

◆ CmdTownCargoGoal()

CommandCost CmdTownCargoGoal ( DoCommandFlags  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 3089 of file town_cmd.cpp.

References _current_company, CMD_ERROR, Execute, FindFirstCargoWithTownAcceptanceEffect(), Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem<&_town_pool >::GetIfValid(), Town::goal, InvalidateWindowData(), OWNER_DEITY, TAE_END, BaseBitSet< Timpl, Tvalue_type, Tstorage, Tmask >::Test(), UpdateTownGrowth(), and WC_TOWN_VIEW.

◆ CmdTownGrowthRate()

CommandCost CmdTownGrowthRate ( DoCommandFlags  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 3140 of file town_cmd.cpp.

References _current_company, ClrBit(), CMD_ERROR, Execute, Town::flags, Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem<&_town_pool >::GetIfValid(), Town::grow_counter, Town::growth_rate, InvalidateWindowData(), OWNER_DEITY, SetBit(), BaseBitSet< Timpl, Tvalue_type, Tstorage, Tmask >::Test(), TOWN_CUSTOM_GROWTH, UpdateTownGrowth(), and WC_TOWN_VIEW.

◆ CmdTownRating()

CommandCost CmdTownRating ( DoCommandFlags  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 3178 of file town_cmd.cpp.

References _current_company, Clamp(), CMD_ERROR, Execute, Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem<&_town_pool >::GetIfValid(), InvalidateWindowData(), Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem<&_company_pool >::IsValidID(), OWNER_DEITY, Town::ratings, BaseBitSet< Timpl, Tvalue_type, Tstorage, Tmask >::Test(), and WC_TOWN_AUTHORITY.

◆ CmdTownSetText()

CommandCost CmdTownSetText ( DoCommandFlags  flags,
TownID  town_id,
const EncodedString 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 3118 of file town_cmd.cpp.

References _current_company, CMD_ERROR, Execute, Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem<&_town_pool >::GetIfValid(), InvalidateWindowData(), OWNER_DEITY, BaseBitSet< Timpl, Tvalue_type, Tstorage, Tmask >::Test(), 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 3780 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 2368 of file town_cmd.cpp.

References _current_company, _generating_world, AlignTileToGrid(), Town::cache, Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem<&_town_pool >::CanAllocateItem(), DoCreateTown(), Execute, FindNearestGoodCoastalTownSpot(), Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::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 2955 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 3073 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 2308 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 2328 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 2345 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 3709 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 1883 of file town_cmd.cpp.

References GB(), Random, 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 858 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

◆ 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 2971 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 3797 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 3983 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 317 of file town_cmd.cpp.

◆ GetTileDesc_Town()

static void GetTileDesc_Town ( TileIndex  tile,
TileDesc td 
)
static

Definition at line 866 of file town_cmd.cpp.

◆ GetTileTrackStatus_Town()

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

Definition at line 900 of file town_cmd.cpp.

◆ GetTownActionCost()

uint8_t GetTownActionCost ( TownAction  action)

Get cost factors for a TownAction.

Parameters
actionTownAction to get cost factor for.
Returns
Cost factor.

Factor in the cost of each town action.

See also
TownActions

Definition at line 3336 of file town_cmd.cpp.

References to_underlying().

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

◆ GetTownDrawTileData()

std::span< const DrawBuildingsTileStruct > GetTownDrawTileData ( )

Definition at line 4150 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 2481 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 948 of file town_cmd.cpp.

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

Referenced by CanFollowRoad(), GrowTown(), GrowTownAtRoad(), GrowTownWithBridge(), GrowTownWithTunnel(), IsNeighbourRoadTile(), 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 1154 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 994 of file town_cmd.cpp.

References RoadTypeInfo::flags, GetRoadTypeInfo(), RoadTypeInfo::introduction_date, RoadTypeInfo::label, ROADTYPE_BEGIN, ROADTYPE_END, BaseBitSet< Timpl, Tvalue_type, Tstorage, Tmask >::Test(), and TownBuild.

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, Tpool_type, Tcache >::PoolItem<&_town_pool >::Iterate().

Referenced by TownDirectoryWindow::GetWidgetString().

◆ 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 1551 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 1341 of file town_cmd.cpp.

References Town::cache, CanRoadContinueIntoNextTile(), CircularTileSearch(), CommandFlagsToDCFlags(), DIAGDIR_END, DiagDirToRoadBits(), DRD_NONE, Execute, 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 neighbour 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 1213 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 1255 of file town_cmd.cpp.

References Auto, DRD_NONE, Execute, GetTownRoadType(), Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem< Tpool >::index, and NoWater.

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 1422 of file town_cmd.cpp.

References Town::cache, CanRoadContinueIntoNextTile(), CommandFlagsToDCFlags(), DIAGDIR_END, DiagDirToRoadBits(), Execute, 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 402 of file town_cmd.cpp.

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

Referenced by TownCanBePlacedHere().

◆ IsNeighbourRoadTile()

static bool IsNeighbourRoadTile ( 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 1043 of file town_cmd.cpp.

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

Referenced by IsRoadAllowedHere().

◆ IsRoadAllowedHere()

◆ 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 2274 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 2134 of file town_cmd.cpp.

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

Referenced by CmdFoundTown(), and CmdRenameTown().

◆ LevelTownLand()

static void LevelTownLand ( TileIndex  tile)
static

Definition at line 1131 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,
bool  is_protected 
)
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.
is_protectedWhether the house is protected from the town upgrading it.
Precondition
The house can be built here.

Definition at line 2530 of file town_cmd.cpp.

References BaseBitSet< Timpl, Tvalue_type, Tstorage, Tmask >::Any(), 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 934 of file town_cmd.cpp.

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

◆ RandomDiagDir()

static DiagDirection RandomDiagDir ( )
inlinestatic

Return a random direction.

Returns
a random direction

Definition at line 259 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 1316 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 BaseBitSet< Timpl, Tvalue_type, Tstorage, Tmask >::Any(), Station::CatchmentCoversTown(), Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::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 1488 of file town_cmd.cpp.

References GetRoadTypeInfo(), INVALID_ROADTYPE, IsAnyRoadStopTile(), IsTileType(), IsValidTile(), MP_ROAD, NoHouses, 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 3445 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 3963 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,
DoCommandFlags  flags,
int  z_new,
Slope  tileh_new 
)
static

Definition at line 4104 of file town_cmd.cpp.

◆ TerraformTownTile()

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

Definition at line 1121 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, Tpool_type, Tcache >::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,
DoCommandFlags  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 3385 of file town_cmd.cpp.

References _current_company, Execute, BaseBitSet< Timpl, Tvalue_type, Tstorage, Tmask >::Test(), and Town::xy.

◆ TownActionAdvertiseMedium()

static CommandCost TownActionAdvertiseMedium ( Town t,
DoCommandFlags  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 3371 of file town_cmd.cpp.

References _current_company, Execute, BaseBitSet< Timpl, Tvalue_type, Tstorage, Tmask >::Test(), and Town::xy.

◆ TownActionAdvertiseSmall()

static CommandCost TownActionAdvertiseSmall ( Town t,
DoCommandFlags  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 3357 of file town_cmd.cpp.

References _current_company, Execute, BaseBitSet< Timpl, Tvalue_type, Tstorage, Tmask >::Test(), and Town::xy.

◆ TownActionBribe()

◆ TownActionBuildStatue()

static CommandCost TownActionBuildStatue ( Town t,
DoCommandFlags  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 3488 of file town_cmd.cpp.

References _current_company, StatueBuildSearchData::best_position, BuildObject(), Pool< Titem, Tindex, Tgrowth_step, Tpool_type, Tcache >::PoolItem<&_object_pool >::CanAllocateItem(), CircularTileSearch(), Execute, INVALID_TILE, MarkTileDirtyByTile(), OBJECT_STATUE, OWNER_NONE, Backup< T >::Restore(), SearchTileForStatue(), BaseBitSet< Timpl, Tvalue_type, Tstorage, Tmask >::Set(), Town::statues, BaseBitSet< Timpl, Tvalue_type, Tstorage, Tmask >::Test(), and Town::xy.

◆ TownActionBuyRights()

◆ TownActionFundBuildings()

static CommandCost TownActionFundBuildings ( Town t,
DoCommandFlags  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 1529 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 2109 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 1516 of file town_cmd.cpp.

References RoadTypeInfo::flags, GetRoadTypeInfo(), GetTownRoadType(), IsTileType(), MP_ROAD, BaseBitSet< Timpl, Tvalue_type, Tstorage, Tmask >::Test(), and TownBuild.

Referenced by GrowTownInTile().

◆ TownDrawHouseLift()

static void TownDrawHouseLift ( const TileInfo ti)
static

Definition at line 244 of file town_cmd.cpp.

◆ TownGenerateCargo()

static void TownGenerateCargo ( Town t,
CargoType  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, Tpool_type, Tcache >::PoolItem< Tpool >::index, ScaleByCargoScale(), Town::supplied, and Town.

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

◆ TownGenerateCargoBinomial()

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

Generate cargo for a house using the binomial 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(), Random, 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(), Random, 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 2648 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 2617 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 917 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, Tpool_type, Tcache >::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 3765 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 monthly passengers and mail for a town, based on its population.

Parameters
tThe town to update.

Definition at line 2003 of file town_cmd.cpp.

References Town::cache, 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 1956 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()

static void UpdateTownRating ( Town t)
static

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 232 of file town_cmd.cpp.

◆ _num_initial_towns

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

Definition at line 2412 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 void TileLoop_Town(TileIndex tile)
Tile callback function.
Definition town_cmd.cpp:605
static CommandCost ClearTile_Town(TileIndex tile, DoCommandFlags flags)
Callback function to clear a house tile.
Definition town_cmd.cpp:717
static Foundation GetFoundation_Town(TileIndex tile, Slope tileh)
Get the foundation for a house.
Definition town_cmd.cpp:327
static void AnimateTile_Town(TileIndex tile)
Animate a tile for a town.
Definition town_cmd.cpp:351
static void DrawTile_Town(TileInfo *ti)
Draw a house and its tile.
Definition town_cmd.cpp:268

Tile callback functions for a town.

Definition at line 51 of file landscape.cpp.

◆ _town_action_proc

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

Definition at line 3615 of file town_cmd.cpp.

◆ _town_draw_tile_procs

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

Definition at line 250 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 3955 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 3956 of file town_cmd.cpp.

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