OpenTTD Source  20241108-master-g80f628063a
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. More...
 
static bool TryBuildTownHouse (Town *t, TileIndex tile)
 Tries to build a house at this tile. More...
 
static TownCreateRandomTown (uint attempts, uint32_t townnameparts, TownSize size, bool city, TownLayout layout)
 Create a random town somewhere in the world. More...
 
static void TownDrawHouseLift (const TileInfo *ti)
 
static DiagDirection RandomDiagDir ()
 Return a random direction. More...
 
static void DrawTile_Town (TileInfo *ti)
 Draw a house and its tile. More...
 
static int GetSlopePixelZ_Town (TileIndex tile, uint, uint, bool)
 
static Foundation GetFoundation_Town (TileIndex tile, Slope tileh)
 Get the foundation for a house. More...
 
static void AnimateTile_Town (TileIndex tile)
 Animate a tile for a town. More...
 
static bool IsCloseToTown (TileIndex tile, uint dist)
 Determines if a town is close to a tile. More...
 
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. More...
 
uint32_t GetWorldPopulation ()
 Get the total population, the sum of all towns in the world. More...
 
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. More...
 
static void AdvanceSingleHouseConstruction (TileIndex tile)
 Helper function for house construction stage progression. More...
 
static void AdvanceHouseConstruction (TileIndex tile)
 Increase the construction stage of a house. More...
 
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. More...
 
static void TownGenerateCargoOriginal (Town *t, TownProductionEffect tpe, uint8_t rate, StationFinder &stations)
 Generate cargo for a house using the original algorithm. More...
 
static void TownGenerateCargoBinominal (Town *t, TownProductionEffect tpe, uint8_t rate, StationFinder &stations)
 Generate cargo for a house using the binominal algorithm. More...
 
static void TileLoop_Town (TileIndex tile)
 Tile callback function. More...
 
static CommandCost ClearTile_Town (TileIndex tile, DoCommandFlag flags)
 Callback function to clear a house tile. More...
 
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. More...
 
static void AddAcceptedCargo_Town (TileIndex tile, CargoArray &acceptance, CargoTypes &always_accepted)
 
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. More...
 
static void TownTickHandler (Town *t)
 Handle the town tick for a single town, by growing the town if desired. More...
 
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. More...
 
RoadType GetTownRoadType ()
 Get the road type that towns should build at this current moment. More...
 
static TimerGameCalendar::Date GetTownRoadTypeFirstIntroductionDate ()
 Get the calendar date of the earliest town-buildable road type. More...
 
bool CheckTownRoadTypes ()
 Check if towns are able to build road. More...
 
static bool IsNeighborRoadTile (TileIndex tile, const DiagDirection dir, uint dist_multi)
 Check for parallel road inside a given distance. More...
 
static bool IsRoadAllowedHere (Town *t, TileIndex tile, DiagDirection dir)
 Check if a Road is allowed on a given tile. More...
 
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. More...
 
static bool GrowTownWithExtraHouse (Town *t, TileIndex tile)
 Grows the town with an extra house. More...
 
static bool GrowTownWithRoad (const Town *t, TileIndex tile, RoadBits rcmd)
 Grows the town with a road piece. More...
 
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. More...
 
static bool RedundantBridgeExistsNearby (TileIndex tile, void *user_data)
 CircularTileSearch proc which checks for a nearby parallel bridge to avoid building redundant bridges. More...
 
static bool GrowTownWithBridge (const Town *t, const TileIndex tile, const DiagDirection bridge_dir)
 Grows the town with a bridge. More...
 
static bool GrowTownWithTunnel (const Town *t, const TileIndex tile, const DiagDirection tunnel_dir)
 Grows the town with a tunnel. More...
 
static bool RoadTypesAllowHouseHere (TileIndex t)
 Checks whether at least one surrounding road allows to build a house here. More...
 
static bool TownCanGrowRoad (TileIndex tile)
 Test if town can grow road onto a specific tile. More...
 
static bool TownAllowedToBuildRoads ()
 Check if the town is allowed to build roads. More...
 
static void GrowTownInTile (TileIndex *tile_ptr, RoadBits cur_rb, DiagDirection target_dir, Town *t1)
 Grows the given town. More...
 
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. More...
 
static bool GrowTownAtRoad (Town *t, TileIndex tile)
 Try to grow a town at a given road tile. More...
 
static RoadBits GenRandomRoadBits ()
 Generate a random road block. More...
 
void UpdateTownRadius (Town *t)
 Update the cached town zone radii of a town, based on the number of houses. More...
 
void UpdateTownMaxPass (Town *t)
 Update the maximum amount of montly passengers and mail for a town, based on its population. More...
 
static void UpdateTownGrowthRate (Town *t)
 Updates town growth rate. More...
 
static void UpdateTownGrowth (Town *t)
 Updates town growth state (whether it is growing or not). More...
 
static void DoCreateTown (Town *t, TileIndex tile, uint32_t townnameparts, TownSize size, bool city, TownLayout layout, bool manual)
 Actually create a town. More...
 
static CommandCost TownCanBePlacedHere (TileIndex tile)
 Check if it's possible to place a town on a given tile. More...
 
static bool IsUniqueTownName (const std::string &name)
 Verifies this custom name is unique. More...
 
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. More...
 
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. More...
 
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. More...
 
static bool FindFurthestFromWater (TileIndex tile, void *user_data)
 CircularTileSearch callback; finds the tile furthest from any water. More...
 
static bool FindNearestEmptyLand (TileIndex tile, void *)
 CircularTileSearch callback to find the nearest land tile. More...
 
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. More...
 
bool GenerateTowns (TownLayout layout)
 Generate a number of towns with a given layout. More...
 
HouseZonesBits GetTownRadiusGroup (const Town *t, TileIndex tile)
 Returns the bit corresponding to the town zone of the specified tile. More...
 
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. More...
 
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. More...
 
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. More...
 
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. More...
 
static bool CheckFree2x2Area (TileIndex tile, int z, bool noslope)
 Checks if a house of size 2x2 can be built at this tile. More...
 
static bool TownLayoutAllowsHouseHere (Town *t, TileIndex tile)
 Checks if the current town layout allows building here. More...
 
static bool TownLayoutAllows2x2HouseHere (Town *t, TileIndex tile)
 Checks if the current town layout allows a 2x2 building here. More...
 
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. More...
 
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. More...
 
static void BuildTownHouse (Town *t, TileIndex tile, const HouseSpec *hs, HouseID house, uint8_t random_bits)
 Build a house at this tile. More...
 
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. More...
 
TileIndexDiff GetHouseNorthPart (HouseID &house)
 Determines if a given HouseID is part of a multitile house. More...
 
void ClearTownHouse (Town *t, TileIndex tile)
 Clear a town house. More...
 
CommandCost CmdRenameTown (DoCommandFlag flags, TownID town_id, const std::string &text)
 Rename a town (server-only). More...
 
const CargoSpecFindFirstCargoWithTownAcceptanceEffect (TownAcceptanceEffect effect)
 Determines the first cargo with a certain town effect. More...
 
CommandCost CmdTownCargoGoal (DoCommandFlag flags, TownID town_id, TownAcceptanceEffect tae, uint32_t goal)
 Change the cargo goal of a town. More...
 
CommandCost CmdTownSetText (DoCommandFlag flags, TownID town_id, const std::string &text)
 Set a custom text in the Town window. More...
 
CommandCost CmdTownGrowthRate (DoCommandFlag flags, TownID town_id, uint16_t growth_rate)
 Change the growth rate of the town. More...
 
CommandCost CmdTownRating (DoCommandFlag flags, TownID town_id, CompanyID company_id, int16_t rating)
 Change the rating of a company in a town. More...
 
CommandCost CmdExpandTown (DoCommandFlag flags, TownID town_id, uint32_t grow_amount)
 Expand a town (scenario editor only). More...
 
CommandCost CmdDeleteTown (DoCommandFlag flags, TownID town_id)
 Delete a town (scenario editor or worldgen only). More...
 
static CommandCost TownActionAdvertiseSmall (Town *t, DoCommandFlag flags)
 Perform the "small advertising campaign" town action. More...
 
static CommandCost TownActionAdvertiseMedium (Town *t, DoCommandFlag flags)
 Perform the "medium advertising campaign" town action. More...
 
static CommandCost TownActionAdvertiseLarge (Town *t, DoCommandFlag flags)
 Perform the "large advertising campaign" town action. More...
 
static CommandCost TownActionRoadRebuild (Town *t, DoCommandFlag flags)
 Perform the "local road reconstruction" town action. More...
 
static bool CheckClearTile (TileIndex tile)
 Check whether the land can be cleared. More...
 
static bool SearchTileForStatue (TileIndex tile, void *user_data)
 Search callback function for TownActionBuildStatue. More...
 
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. More...
 
static CommandCost TownActionFundBuildings (Town *t, DoCommandFlag flags)
 Perform the "fund new buildings" town action. More...
 
static CommandCost TownActionBuyRights (Town *t, DoCommandFlag flags)
 Perform the "buy exclusive transport rights" town action. More...
 
static CommandCost TownActionBribe (Town *t, DoCommandFlag flags)
 Perform the "bribe" town action. More...
 
TownActions GetMaskOfTownActions (CompanyID cid, const Town *t)
 Get a list of available town authority actions. More...
 
CommandCost CmdDoTownAction (DoCommandFlag flags, TownID town_id, uint8_t action)
 Do a town action. More...
 
template<typename Func >
static void ForAllStationsNearTown (Town *t, Func func)
 
static void UpdateTownRating (Town *t)
 Monthly callback to update town and station ratings. More...
 
static void UpdateTownGrowCounter (Town *t, uint16_t prev_growth_rate)
 Updates town grow counter after growth rate change. More...
 
static int CountActiveStations (Town *t)
 Calculates amount of active stations in the range of town (HZB_TOWN_EDGE). More...
 
static uint GetNormalGrowthRate (Town *t)
 Calculates town growth rate in normal conditions (custom growth rate not set). More...
 
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. More...
 
TownCalcClosestTownFromTile (TileIndex tile, uint threshold)
 Return the town closest to the given tile within threshold. More...
 
TownClosestTownFromTile (TileIndex tile, uint threshold)
 Return the town closest (in distance or ownership) to a given tile, within a given threshold. More...
 
void SetTownRatingTestMode (bool mode)
 Switch the town rating to test-mode, to allow commands to be tested without affecting current ratings. More...
 
static int GetRating (const Town *t)
 Get the rating of a town for the _current_company. More...
 
void ChangeTownRating (Town *t, int add, int max, DoCommandFlag flags)
 Changes town rating of the current company. More...
 
CommandCost CheckforTownRating (DoCommandFlag flags, Town *t, TownRatingCheckType type)
 Does the town authority allow the (destructive) action of the current company? More...
 
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 & Kdtree_TownXYFunc
 
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. More...
 
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(TileIndex t=0;t< Map::Size();t++) { if(!IsTileType(t, MP_HOUSE)) continue;IncrementHouseAge(t);} })
 
const TileTypeProcs _tile_type_town_procs
 Tile callback functions for a town. More...
 

Detailed Description

Handling of town tiles.

Definition in file town_cmd.cpp.

Function Documentation

◆ 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().

◆ 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 HouseSpec::building_flags, HouseSpec::Get(), and GetHouseType().

◆ 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 GetHouseConstructionTick(), IncHouseConstructionTick(), IsTileType(), and MP_HOUSE.

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

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

◆ 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 GetHouseType(), and NEW_HOUSE_OFFSET.

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

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

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

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

Referenced by AirportGetNearestTown(), BuildObject(), ClosestTownFromTile(), CmdBuildBridge(), CmdBuildRoad(), and CmdBuildTunnel().

◆ 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 2516 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 1722 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.

◆ 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 1237 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 ClearTownHouse().

◆ ChangeTownRating()

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

Changes town rating of the current company.

Parameters
tTown to affect
addValue to add
maxMinimum (add < 0) resp. maximum (add > 0) rating that should be achievable with this change.
flagsCommand flags, especially DC_NO_MODIFY_TOWN_RATING is tested

Definition at line 3949 of file town_cmd.cpp.

References _cheats, _current_company, _town_rating_test, _town_test_ratings, DC_NO_MODIFY_TOWN_RATING, GetRating(), Town::have_ratings, 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(), Cheats::magic_bulldozer, Town::ratings, SetBit(), SetWindowDirty(), Cheat::value, and WC_TOWN_AUTHORITY.

◆ 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 2541 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 3368 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 2560 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 3828 of file town_cmd.cpp.

References _settings_game, GameSettings::difficulty, and DifficultySettings::town_council_tolerance.

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

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

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

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

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

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

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

References 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(), and CommandCost::Succeeded().

Referenced by MakeTownHouse().

◆ ClearTile_Town()

static CommandCost ClearTile_Town ( TileIndex  tile,
DoCommandFlag  flags 
)
static

Callback function to clear a house tile.

Parameters
tileThe tile to clear.
flagsType of operation.
Returns
The cost of this operation or an error.

Definition at line 717 of file town_cmd.cpp.

References DC_AUTO, and return_cmd_error.

◆ ClearTownHouse()

void ClearTownHouse ( Town t,
TileIndex  tile 
)

Clear a town house.

Parameters
tThe town which owns the house.
tileThe tile to clear.

Definition at line 2949 of file town_cmd.cpp.

References HouseSpec::building_flags, Town::cache, ChangePopulation(), HouseSpec::Get(), GetHouseNorthPart(), GetHouseType(), IsHouseCompleted(), IsTileType(), MP_HOUSE, TownCache::num_houses, and HouseSpec::population.

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

References CalcClosestTownFromTile(), GetTileType(), GetTownIndex(), HasTownOwnedRoad(), IsRoadDepot(), and MP_ROAD.

Referenced by FindTownForIndustry(), GenerateCompanyName(), AirportResolverObject::GetTown(), ObjectResolverObject::GetTown(), StationResolverObject::GetTown(), AirportTileScopeResolver::GetVariable(), IndustryTileScopeResolver::GetVariable(), ObjectScopeResolver::GetVariable(), LandInfoWindow::OnInit(), and SetDParamsForOwnedBy().

◆ CmdDeleteTown()

CommandCost CmdDeleteTown ( DoCommandFlag  flags,
TownID  town_id 
)

Delete a town (scenario editor or worldgen only).

Parameters
flagsType of operation.
town_idTown ID to delete.
Returns
Empty cost or an error.

Definition at line 3193 of file town_cmd.cpp.

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

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

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

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

References _settings_game, CMD_ERROR, GameSettings::game_creation, GameCreationSettings::town_name, and TSZ_END.

◆ 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 2992 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, return_cmd_error, 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 3042 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 3093 of file town_cmd.cpp.

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

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

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

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

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

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

◆ DoCreateTown()

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

Actually create a town.

Parameters
tThe town.
tileWhere to put it.
townnamepartsThe town name.
sizeThe preset size of the town.
cityShould we create a city?
layoutThe road layout of the town.
manualWas the town placed manually?

Definition at line 1990 of file town_cmd.cpp.

References _generating_town, Town::cache, Town::flags, Town::grow_counter, Town::growth_rate, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, InitializeBuildingCounts(), TownCache::num_houses, TownCache::population, Town::time_until_rebuild, Ticks::TOWN_GROWTH_TICKS, UpdateTownRadius(), and Town::xy.

◆ DrawTile_Town()

static void DrawTile_Town ( TileInfo ti)
static

Draw a house and its tile.

This is a tile callback routine.

Parameters
tiTileInfo of the tile to draw

Definition at line 267 of file town_cmd.cpp.

References HouseSpec::Get(), GetHouseType(), NEW_HOUSE_OFFSET, and TileInfo::tile.

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

References CargoSpec::Iterate().

Referenced by CmdTownCargoGoal().

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

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

◆ GenerateTowns()

bool GenerateTowns ( TownLayout  layout)

Generate a number of towns with a given layout.

This function is used by the Random Towns button in Scenario Editor as well as in world generation.

Parameters
layoutThe road layout to build.
Returns
true if towns have been successfully created.

Definition at line 2386 of file town_cmd.cpp.

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

Referenced by GrowTown().

◆ 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 HouseSpec::callback_mask, CBM_HOUSE_DRAW_FOUNDATIONS, HouseSpec::Get(), GetHouseType(), HouseSpec::grf_prop, 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 2924 of file town_cmd.cpp.

References HouseSpec::Get().

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

◆ GetMaskOfTownActions()

TownActions GetMaskOfTownActions ( CompanyID  cid,
const Town t 
)

Get a list of available town authority actions.

Parameters
cidThe company that is querying the town.
tThe town that is queried.
Returns
The bitmasked value of enabled actions.

Definition at line 3579 of file town_cmd.cpp.

References _settings_game, _town_action_costs, EconomySettings::bribe, COMPANY_SPECTATOR, GameSettings::economy, GetAvailableMoney(), lengthof, Town::ratings, TACT_BRIBE, TACT_NONE, and Town::unwanted.

Referenced by TownAuthorityWindow::OnPaint().

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

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

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

Referenced by ChangeTownRating(), and CheckforTownRating().

◆ 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 2447 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(), 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 915 of file town_cmd.cpp.

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

Referenced by CanFollowRoad(), GrowTown(), 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 1117 of file town_cmd.cpp.

References Town::layout, ROAD_NONE, TileIndexToTileIndexDiffC(), and Town::xy.

◆ GetTownRoadType()

RoadType GetTownRoadType ( )

Get the road type that towns should build at this current moment.

They may have built a different type in the past.

Definition at line 926 of file town_cmd.cpp.

References ROADTYPE_ROAD.

Referenced by CanRoadContinueIntoNextTile(), GrowTown(), GrowTownWithBridge(), GrowTownWithRoad(), GrowTownWithTunnel(), and IsRoadAllowedHere().

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

References ROADTYPE_BEGIN, and ROADTYPE_END.

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().

◆ GrowTown()

◆ GrowTownAtRoad()

static bool GrowTownAtRoad ( Town t,
TileIndex  tile 
)
static

Try to grow a town at a given road tile.

Parameters
tThe town to grow.
tileThe road tile to try growing from.
Returns
true if we successfully expanded the town.

Definition at line 1764 of file town_cmd.cpp.

References DIAGDIR_END, Town::layout, Map::Size(), and TL_BETTER_ROADS.

Referenced by GrowTown().

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

References ROAD_NONE, and Map::Size().

◆ 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 1304 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.

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

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

◆ 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 1218 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.

◆ 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 1385 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.

◆ 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.

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 1006 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 2240 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 2094 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 CmdRenameTown().

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

References HouseSpec::building_flags, ClearMakeHouseTile(), and HouseSpec::Get().

◆ 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().

◆ 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 1279 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 Town::stations_near.

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

References IsAnyRoadStopTile(), IsTileType(), IsValidTile(), MP_ROAD, and ToTileIndexDiff().

Referenced by CanBuildHouseHere().

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

References _town_rating_test, and _town_test_ratings.

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

◆ 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 Town::~Town().

◆ TileLoop_Town()

static void TileLoop_Town ( TileIndex  tile)
static

Tile callback function.

Tile callback function. Periodic tick handler for the tiles of a town.

Parameters
tilebeen asked to do its stuff

Definition at line 605 of file town_cmd.cpp.

References GetHouseType(), and NEW_HOUSE_OFFSET.

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

References DC_EXEC.

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

References DC_EXEC.

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

References DC_EXEC.

◆ TownActionBribe()

static CommandCost TownActionBribe ( Town t,
DoCommandFlag  flags 
)
static

Perform the "bribe" town action.

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

Definition at line 3524 of file town_cmd.cpp.

References _current_company, Chance16(), DC_EXEC, INVALID_STRING_ID, IsLocalCompany(), SpecializedStation< Station, false >::Iterate(), GoodsEntry::rating, Town::ratings, ShowErrorMessage(), Town::unwanted, and WL_INFO.

◆ 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 3433 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(), return_cmd_error, SearchTileForStatue(), SetBit(), Town::statues, and Town::xy.

◆ TownActionBuyRights()

static CommandCost TownActionBuyRights ( Town t,
DoCommandFlag  flags 
)
static

Perform the "buy exclusive transport rights" town action.

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

Definition at line 3491 of file town_cmd.cpp.

References _current_company, _settings_game, CMD_ERROR, DC_EXEC, GameSettings::economy, Town::exclusive_counter, EconomySettings::exclusive_rights, Town::exclusivity, and INVALID_COMPANY.

◆ TownActionFundBuildings()

static CommandCost TownActionFundBuildings ( Town t,
DoCommandFlag  flags 
)
static

◆ TownActionRoadRebuild()

static CommandCost TownActionRoadRebuild ( Town t,
DoCommandFlag  flags 
)
static

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

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

Referenced by CanFollowRoad(), GrowTown(), 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 2069 of file town_cmd.cpp.

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

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

References IsTileType(), and MP_ROAD.

◆ 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(), TransportedCargoStat< Tstorage >::new_act, TransportedCargoStat< Tstorage >::new_max, ScaleByCargoScale(), and Town::supplied.

◆ 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 CargoSpec::town_production_cargoes.

◆ 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 CargoSpec::town_production_cargoes.

◆ 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 2612 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 2581 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 884 of file town_cmd.cpp.

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

◆ TryBuildTownHouse()

static bool TryBuildTownHouse ( Town t,
TileIndex  tile 
)
static

Tries to build a house at this tile.

Parameters
tThe town the house will belong to.
tileThe tile to try building on.
Returns
false iff no house can be built on this tile.

Definition at line 2730 of file town_cmd.cpp.

References _settings_game, CanBuildHouseHere(), GameSettings::game_creation, GetTileMaxZ(), GetTileSlope(), GetTownRadiusGroup(), GameCreationSettings::landscape, and TownLayoutAllowsHouseHere().

Referenced by GrowTownWithExtraHouse().

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

Referenced by UpdateTownGrowthRate().

◆ UpdateTownGrowth()

static void UpdateTownGrowth ( Town t)
static

◆ 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 1966 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.

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

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

Referenced by DoCreateTown().

◆ UpdateTownRating()

static void UpdateTownRating ( Town t)
static

Monthly callback to update town and station ratings.

Parameters
tThe town to update.

Definition at line 3674 of file town_cmd.cpp.

References Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_company_pool >::Iterate(), RATING_GROWTH_MAXIMUM, RATING_GROWTH_UP_STEP, and Town::ratings.

Variable Documentation

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

Referenced by GetMaskOfTownActions().

◆ _town_action_proc

TownActionProc* const _town_action_proc[]
static
Initial value:
= {
}
static CommandCost TownActionBribe(Town *t, DoCommandFlag flags)
Perform the "bribe" town action.
Definition: town_cmd.cpp:3524
static CommandCost TownActionAdvertiseLarge(Town *t, DoCommandFlag flags)
Perform the "large advertising campaign" town action.
Definition: town_cmd.cpp:3326
static CommandCost TownActionAdvertiseSmall(Town *t, DoCommandFlag flags)
Perform the "small advertising campaign" town action.
Definition: town_cmd.cpp:3298
static CommandCost TownActionAdvertiseMedium(Town *t, DoCommandFlag flags)
Perform the "medium advertising campaign" town action.
Definition: town_cmd.cpp:3312
static CommandCost TownActionRoadRebuild(Town *t, DoCommandFlag flags)
Perform the "local road reconstruction" town action.
Definition: town_cmd.cpp:3340
static CommandCost TownActionFundBuildings(Town *t, DoCommandFlag flags)
Perform the "fund new buildings" town action.
Definition: town_cmd.cpp:3458
static CommandCost TownActionBuyRights(Town *t, DoCommandFlag flags)
Perform the "buy exclusive transport rights" town action.
Definition: town_cmd.cpp:3491
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: town_cmd.cpp:3433

Definition at line 3562 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.