OpenTTD Source
20241121-master-g67a0fccfad
|
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 Town * | CreateRandomTown (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 CargoSpec * | FindFirstCargoWithTownAcceptanceEffect (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... | |
Town * | CalcClosestTownFromTile (TileIndex tile, uint threshold) |
Return the town closest to the given tile within threshold. More... | |
Town * | ClosestTownFromTile (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 DrawBuildingsTileStruct > | GetTownDrawTileData () |
Variables | |
TownPool | _town_pool ("Town") |
TownKdtree | _town_kdtree {} |
static bool | _generating_town = false |
Set if a town is being generated. | |
static int | _grow_town_result |
static TownDrawTileProc *const | _town_draw_tile_procs [1] |
static const uint8_t | _num_initial_towns [4] = {5, 11, 23, 46} |
const uint8_t | _town_action_costs [TACT_COUNT] |
Factor in the cost of each town action. 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... | |
Handling of town tiles.
Definition in file town_cmd.cpp.
|
static |
Fill cargo acceptance array and always_accepted mask, if cargo ID is valid.
cargo | Cargo type to add. | |
amount | Amount of cargo to add. | |
[out] | acceptance | Output array containing amount of cargo accepted. |
[out] | always_accepted | Output mask of accepted cargo types. |
Definition at line 784 of file town_cmd.cpp.
References IsValidCargoID(), and SetBit().
|
static |
Increase the construction stage of a house.
tile | The tile of the house under construction. |
Definition at line 521 of file town_cmd.cpp.
References HouseSpec::building_flags, HouseSpec::Get(), and GetHouseType().
|
static |
Helper function for house construction stage progression.
tile | TileIndex 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.
|
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.
tile | The tile to start at. |
layout | The town layout in effect. |
Definition at line 2222 of file town_cmd.cpp.
References TileX(), TileXY(), TileY(), TL_2X2_GRID, and TL_3X3_GRID.
|
static |
Animate a tile for a town.
Only certain houses can be animated. The newhouses animation supersedes regular ones.
tile | TileIndex of the house to animate. |
Definition at line 350 of file town_cmd.cpp.
References GetHouseType(), and NEW_HOUSE_OFFSET.
|
static |
Build a house at this tile.
t | The town the house will belong to. |
tile | The tile to try building on. |
hs | The HouseSpec of the house. |
house | The HouseID of the house. |
random_bits | The 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.
Return the town closest to the given tile within threshold.
tile | Starting point of the search. |
threshold | Biggest allowed distance to the town. |
nullptr
if there is no such town.Definition at line 3852 of file town_cmd.cpp.
Referenced by AirportGetNearestTown(), BuildObject(), ClosestTownFromTile(), CmdBuildBridge(), CmdBuildRoad(), and CmdBuildTunnel().
|
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.
tile | The tile to check. |
noslope | Are foundations prohibited for this house? |
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().
|
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.
tile | Start tile for road. |
dir | Direction for road to follow or build. |
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.
|
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.
t | The current town |
tile | The tile where the road would be built |
road_dir | The direction of the road |
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().
|
static |
Change the town's population as recorded in the town cache, town label, and town directory.
t | The town which has changed. |
mod | The 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().
void ChangeTownRating | ( | Town * | t, |
int | add, | ||
int | max, | ||
DoCommandFlag | flags | ||
) |
Changes town rating of the current company.
t | Town to affect |
add | Value to add |
max | Minimum (add < 0) resp. maximum (add > 0) rating that should be achievable with this change. |
flags | Command 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.
|
inlinestatic |
Check if a tile where we want to build a multi-tile house has an appropriate max Z.
tile | The tile to check. |
z | The max Z level to allow. |
noslope | Are foundations disallowed for this house? |
Definition at line 2541 of file town_cmd.cpp.
References CanBuildHouseHere(), and GetTileMaxZ().
Referenced by CheckFree2x2Area(), and CheckTownBuild2House().
|
static |
Check whether the land can be cleared.
tile | Tile to check. |
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().
CommandCost CheckforTownRating | ( | DoCommandFlag | flags, |
Town * | t, | ||
TownRatingCheckType | type | ||
) |
Does the town authority allow the (destructive) action of the current company?
flags | Checking flags of the command. |
t | Town that must allow the company action. |
type | Type of action that is wanted. |
Definition at line 3986 of file town_cmd.cpp.
References _cheats, _current_company, _settings_game, DC_NO_TEST_TOWN_RATING, GameSettings::difficulty, GetRating(), 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, RATING_ROAD_NEEDED_HOSTILE, RATING_ROAD_NEEDED_LENIENT, RATING_ROAD_NEEDED_NEUTRAL, RATING_ROAD_NEEDED_PERMISSIVE, RATING_TUNNEL_BRIDGE_NEEDED_HOSTILE, RATING_TUNNEL_BRIDGE_NEEDED_LENIENT, RATING_TUNNEL_BRIDGE_NEEDED_NEUTRAL, RATING_TUNNEL_BRIDGE_NEEDED_PERMISSIVE, return_cmd_error, SetDParam(), DifficultySettings::town_council_tolerance, TOWN_RATING_CHECK_TYPE_COUNT, and Cheat::value.
|
static |
Checks if a house of size 2x2 can be built at this tile.
tile | The tile of the house's northernmost tile. |
z | The maximum tile z, so all tiles are the same height. |
noslope | Are foundations disallowed for this house? |
Definition at line 2560 of file town_cmd.cpp.
References CheckBuildHouseSameZ(), DIAGDIR_END, DIAGDIR_SE, and TileOffsByDiagDir().
Referenced by CheckTownBuild2x2House().
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.
tile | The tile where the station shall be constructed. |
flags | Command flags. DC_NO_TEST_TOWN_RATING is tested. |
Definition at line 3828 of file town_cmd.cpp.
References _settings_game, GameSettings::difficulty, and DifficultySettings::town_council_tolerance.
|
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.
tile | The tile where the building should be built. |
t | The town. |
maxz | The maximum Z level, since all tiles must have the same height. |
noslope | Are foundations disallowed for this house? |
second | The diagdir from the first tile to the second tile. |
Definition at line 2649 of file town_cmd.cpp.
References CheckBuildHouseSameZ(), ReverseDiagDir(), TileOffsByDiagDir(), and TownLayoutAllowsHouseHere().
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.
tile | The tile where the building should be built. |
t | The town. |
maxz | The maximum Z level, since all tiles must have the same height. |
noslope | Are foundations disallowed for this house? |
Definition at line 2674 of file town_cmd.cpp.
References CheckFree2x2Area(), DIAGDIR_END, DIAGDIR_SE, ReverseDiagDir(), TileOffsByDiagDir(), and TownLayoutAllows2x2HouseHere().
bool CheckTownRoadTypes | ( | ) |
Check if towns are able to build road.
Definition at line 982 of file town_cmd.cpp.
References TimerGameCalendar::date, GetTownRoadTypeFirstIntroductionDate(), SetDParam(), ShowErrorMessage(), and WL_CRITICAL.
|
inlinestatic |
Clears tile and builds a house or house part.
tile | The tile to build upon. |
t | The town which will own the house. |
counter | The construction stage counter for the house. |
stage | The current construction stage of the house. |
type | The type of house. |
random_bits | Random bits for newgrf houses to use. |
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().
|
static |
Callback function to clear a house tile.
tile | The tile to clear. |
flags | Type of operation. |
Definition at line 717 of file town_cmd.cpp.
References DC_AUTO, and return_cmd_error.
Clear a town house.
t | The town which owns the house. |
tile | The 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.
Return the town closest (in distance or ownership) to a given tile, within a given threshold.
tile | Starting point of the search. |
threshold | Biggest allowed distance to the town. |
nullptr
if there is no such town.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().
CommandCost CmdDeleteTown | ( | DoCommandFlag | flags, |
TownID | town_id | ||
) |
Delete a town (scenario editor or worldgen only).
flags | Type of operation. |
town_id | Town ID to delete. |
Definition at line 3193 of file town_cmd.cpp.
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
flags | type of operation |
town_id | town to do the action at |
action | action to perform, |
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.
CommandCost CmdExpandTown | ( | DoCommandFlag | flags, |
TownID | town_id, | ||
uint32_t | grow_amount | ||
) |
Expand a town (scenario editor only).
flags | Type of operation. |
TownID | Town ID to expand. |
grow_amount | Amount to grow, or 0 to grow a random size up to the current amount of houses. |
Definition at line 3156 of file town_cmd.cpp.
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.
flags | The type of operation. |
tile | The coordinates where town is built. |
size | The size of the town ( |
city | Should we build a city? |
layout | The town road layout ( |
random_location | Should we use a random location? (randomize tile ) |
townnameparts | Town name parts. |
text | Custom name for the town. If empty, the town name parts will be used. |
Definition at line 2115 of file town_cmd.cpp.
References _settings_game, CMD_ERROR, GameSettings::game_creation, GameCreationSettings::town_name, and TSZ_END.
CommandCost CmdRenameTown | ( | DoCommandFlag | flags, |
TownID | town_id, | ||
const std::string & | text | ||
) |
Rename a town (server-only).
flags | type of operation |
town_id | town ID to rename |
text | the new name or an empty string when resetting to the default |
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.
CommandCost CmdTownCargoGoal | ( | DoCommandFlag | flags, |
TownID | town_id, | ||
TownAcceptanceEffect | tae, | ||
uint32_t | goal | ||
) |
Change the cargo goal of a town.
flags | Type of operation. |
town_id | Town ID to cargo game of. |
tae | TownEffect to change the game of. |
goal | The new goal value. |
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.
CommandCost CmdTownGrowthRate | ( | DoCommandFlag | flags, |
TownID | town_id, | ||
uint16_t | growth_rate | ||
) |
Change the growth rate of the town.
flags | Type of operation. |
town_id | Town ID to cargo game of. |
growth_rate | Amount of days between growth, or TOWN_GROWTH_RATE_NONE, or 0 to reset custom growth rate. |
Definition at line 3093 of file town_cmd.cpp.
CommandCost CmdTownRating | ( | DoCommandFlag | flags, |
TownID | town_id, | ||
CompanyID | company_id, | ||
int16_t | rating | ||
) |
Change the rating of a company in a town.
flags | Type of operation. |
town_id | Town ID to change, bit 16..23 = |
company_id | Company ID to change. |
rating | New rating of company (signed int16_t). |
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.
CommandCost CmdTownSetText | ( | DoCommandFlag | flags, |
TownID | town_id, | ||
const std::string & | text | ||
) |
Set a custom text in the Town window.
flags | Type of operation. |
town_id | Town ID to change the text of. |
text | The new text (empty to remove the text). |
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.
|
static |
Calculates amount of active stations in the range of town (HZB_TOWN_EDGE).
t | The town to calculate stations for |
Definition at line 3727 of file town_cmd.cpp.
|
static |
Create a random town somewhere in the world.
attempts | How many times should we try? |
townnameparts | The name of the town. |
size | The size preset of the town. |
city | Should we build a city? |
layout | The road layout to build. |
Definition at line 2334 of file town_cmd.cpp.
Update data structures when a house is removed.
Definition at line 2907 of file town_cmd.cpp.
References DecreaseBuildingCount(), IsTileType(), and MP_HOUSE.
|
static |
Actually create a town.
t | The town. |
tile | Where to put it. |
townnameparts | The town name. |
size | The preset size of the town. |
city | Should we create a city? |
layout | The road layout of the town. |
manual | Was 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.
|
static |
Draw a house and its tile.
This is a tile callback routine.
ti | TileInfo of the tile to draw |
Definition at line 267 of file town_cmd.cpp.
References HouseSpec::Get(), GetHouseType(), NEW_HOUSE_OFFSET, and TileInfo::tile.
const CargoSpec* FindFirstCargoWithTownAcceptanceEffect | ( | TownAcceptanceEffect | effect | ) |
Determines the first cargo with a certain town effect.
effect | Town effect of interest |
Definition at line 3026 of file town_cmd.cpp.
References CargoSpec::Iterate().
Referenced by CmdTownCargoGoal().
|
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.
tile | Start looking from this tile |
user_data | Storage area for data that must last across calls; must be a pointer to struct SpotData |
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().
|
static |
CircularTileSearch callback to find the nearest land tile.
tile | Start looking from this tile |
Definition at line 2294 of file town_cmd.cpp.
References IsTileType(), and MP_CLEAR.
Referenced by FindNearestGoodCoastalTownSpot().
|
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.
tile | Start looking from this spot. |
layout | the road layout to search for |
Definition at line 2311 of file town_cmd.cpp.
References CircularTileSearch(), FindFurthestFromWater(), FindNearestEmptyLand(), INVALID_TILE, and SpotData::tile.
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.
layout | The road layout to build. |
Definition at line 2386 of file town_cmd.cpp.
|
static |
Generate a random road block.
The probability of a straight road is somewhat higher than a curved.
Definition at line 1846 of file town_cmd.cpp.
Referenced by GrowTown().
|
static |
Get the foundation for a house.
This is a tile callback routine.
tile | The tile to find a foundation for. |
tileh | The 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.
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.
house | Is changed to the HouseID of the north tile of the same house |
Definition at line 2924 of file town_cmd.cpp.
References HouseSpec::Get().
Referenced by ClearTownHouse(), GetDistanceFromNearbyHouse(), SearchNearbyHouseClass(), SearchNearbyHouseGRFID(), and SearchNearbyHouseID().
TownActions GetMaskOfTownActions | ( | CompanyID | cid, |
const Town * | t | ||
) |
Get a list of available town authority actions.
cid | The company that is querying the town. |
t | The town that is queried. |
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().
|
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).
t | The town to calculate growth rate for |
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().
|
static |
Get the rating of a town for the _current_company.
t | Town to get the rating from. |
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().
Returns the bit corresponding to the town zone of the specified tile.
t | Town on which town zone is to be found. |
tile | TileIndex where town zone needs to be found. |
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().
Return the RoadBits of a tile, ignoring depot and bay road stops.
tile | The tile to check. |
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().
|
static |
Generate the RoadBits of a grid tile.
t | The current town. |
tile | The tile in reference to the town. |
dir | The direction to which we are growing. |
Definition at line 1117 of file town_cmd.cpp.
References Town::layout, ROAD_NONE, TileIndexToTileIndexDiffC(), and Town::xy.
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().
|
static |
Get the calendar date of the earliest town-buildable road type.
Definition at line 961 of file town_cmd.cpp.
References ROADTYPE_BEGIN, and ROADTYPE_END.
Referenced by CheckTownRoadTypes().
uint32_t GetWorldPopulation | ( | ) |
Get the total population, the sum of all towns in 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().
|
static |
Grow the town.
t | The town to grow |
Definition at line 1860 of file town_cmd.cpp.
References _current_company, DC_AUTO, DC_EXEC, DC_NO_WATER, DRD_NONE, GenRandomRoadBits(), GetTownRoadBits(), GetTownRoadType(), GrowTownAtRoad(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, IsTileFlat(), IsTileType(), MP_HOUSE, OWNER_TOWN, Backup< T >::Restore(), ROAD_NONE, TileAdd(), ToTileIndexDiff(), TownAllowedToBuildRoads(), and Town::xy.
Referenced by TownTickHandler().
Try to grow a town at a given road tile.
t | The town to grow. |
tile | The road tile to try growing from. |
Definition at line 1764 of file town_cmd.cpp.
References DIAGDIR_END, Town::layout, Map::Size(), and TL_BETTER_ROADS.
Referenced by GrowTown().
|
static |
Grows the given town.
There are at the moment 3 possible way's for the town expansion:
tile_ptr | The current tile |
cur_rb | The current tiles RoadBits |
target_dir | The target road dir |
t1 | The current town |
Definition at line 1514 of file town_cmd.cpp.
References ROAD_NONE, and Map::Size().
|
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.
t | The current town |
tile | The current tile |
bridge_dir | The valid direction in which to grow a bridge |
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.
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.
t | The current town. |
tile | The target tile for the extra house. |
Definition at line 1176 of file town_cmd.cpp.
References DIAGDIR_BEGIN, DIAGDIR_END, DistanceFromEdge(), GetTileType(), MP_HOUSE, MP_VOID, TileAddByDiagDir(), and TryBuildTownHouse().
Grows the town with a road piece.
t | The current town. |
tile | The current tile. |
rcmd | The RoadBits we want to build on the tile. |
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.
|
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.
t | The current town |
tile | The current tile |
tunnel_dir | The valid direction in which to grow a tunnel |
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.
|
static |
Determines if a town is close to a tile.
tile | TileIndex of the tile to query. |
dist | The maximum distance to be accepted. |
Definition at line 401 of file town_cmd.cpp.
Referenced by TownCanBePlacedHere().
|
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?
tile | The current tile. |
dir | The target direction. |
dist_multi | The distance multiplier. |
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().
|
static |
Check if a Road is allowed on a given tile.
t | The current town. |
tile | The target tile. |
dir | The direction in which we want to extend the town. |
Definition at line 1040 of file town_cmd.cpp.
References _generating_world, _settings_game, ConstructionSettings::build_on_slopes, Chance16(), CMD_ERROR, ComplementSlope(), GameSettings::construction, DC_AUTO, DC_EXEC, DC_NO_WATER, DIAGDIR_NW, DIAGDIR_SE, DiagDirToAxis(), DistanceFromEdge(), DRD_NONE, CommandCost::Failed(), GetBridgeAxis(), GetFoundationSlope(), GetTileSlope(), GetTownRoadBits(), GetTownRoadType(), IsBridgeAbove(), IsNeighborRoadTile(), Town::layout, ROAD_NONE, ROAD_X, ROAD_Y, SLOPE_ELEVATED, SLOPE_FLAT, SLOPE_NE, SLOPE_NW, and TL_ORIGINAL.
|
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.
tile | The tile to start at. |
layout | The town layout in effect. |
Definition at line 2240 of file town_cmd.cpp.
References TileX(), TileY(), TL_2X2_GRID, and TL_3X3_GRID.
Referenced by FindFurthestFromWater().
|
static |
Verifies this custom name is unique.
Only custom names are checked.
name | The name to check. |
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().
|
static |
Write house information into the map.
For multi-tile houses, all tiles are marked.
town | The town related to this house |
t | The tile to build on. If a multi-tile house, this is the northern-most tile. |
counter | The counter of the construction stage. |
stage | The current construction stage. |
The | type of house. |
random_bits | Random bits for newgrf houses to use. |
Definition at line 2494 of file town_cmd.cpp.
References HouseSpec::building_flags, ClearMakeHouseTile(), and HouseSpec::Get().
|
inlinestatic |
Return a random direction.
Definition at line 258 of file town_cmd.cpp.
References DIAGDIR_END, and RandomRange().
|
static |
CircularTileSearch proc which checks for a nearby parallel bridge to avoid building redundant bridges.
tile | The tile to search. |
user_data | Reference to the valid direction of the proposed bridge. |
Definition at line 1279 of file town_cmd.cpp.
References GetTileSlope(), GetTunnelBridgeTransportType(), InclinedSlope(), IsBridgeTile(), IsValidTile(), ReverseDiagDir(), and TRANSPORT_ROAD.
Referenced by GrowTownWithBridge().
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).
t | Town to work on. |
tile | Location of house area (north tile). |
flags | BuildingFlags containing the size of house area. |
Definition at line 476 of file town_cmd.cpp.
References Town::stations_near.
|
inlinestatic |
Checks whether at least one surrounding road allows to build a house here.
t | The tile where the house will be built. |
Definition at line 1451 of file town_cmd.cpp.
References IsAnyRoadStopTile(), IsTileType(), IsValidTile(), MP_ROAD, and ToTileIndexDiff().
Referenced by CanBuildHouseHere().
|
static |
Search callback function for TownActionBuildStatue.
tile | Tile on which to perform the search. |
user_data | Reference to the statue search data. |
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().
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.
mode | Test 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().
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.
tile | The bridge tile to test |
t | The town we are interested in |
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().
|
static |
Tile callback function.
Tile callback function. Periodic tick handler for the tiles of a town.
tile | been asked to do its stuff |
Definition at line 605 of file town_cmd.cpp.
References GetHouseType(), and NEW_HOUSE_OFFSET.
|
static |
Perform the "large advertising campaign" town action.
t | The town to advertise in. |
flags | Type of operation. |
Definition at line 3326 of file town_cmd.cpp.
References DC_EXEC.
|
static |
Perform the "medium advertising campaign" town action.
t | The town to advertise in. |
flags | Type of operation. |
Definition at line 3312 of file town_cmd.cpp.
References DC_EXEC.
|
static |
Perform the "small advertising campaign" town action.
t | The town to advertise in. |
flags | Type of operation. |
Definition at line 3298 of file town_cmd.cpp.
References DC_EXEC.
|
static |
Perform the "bribe" town action.
t | The town to bribe. |
flags | Type of operation. |
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.
|
static |
Perform a 9x9 tiles circular search from the center of the town in order to find a free tile to place a statue.
t | town to search in |
flags | Used to check if the statue must be built or not. |
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.
|
static |
Perform the "buy exclusive transport rights" town action.
t | The town to buy exclusivity in. |
flags | Type of operation. |
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.
|
static |
Perform the "fund new buildings" town action.
t | The town to fund buildings in. |
flags | Type of operation. |
Definition at line 3458 of file town_cmd.cpp.
References _settings_game, CMD_ERROR, DC_EXEC, GameSettings::economy, EconomySettings::fund_buildings, Town::fund_buildings_months, Town::grow_counter, Town::growth_rate, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, SetWindowDirty(), Ticks::TOWN_GROWTH_TICKS, UpdateTownGrowth(), and WC_TOWN_VIEW.
|
static |
Perform the "local road reconstruction" town action.
t | The town to grief in. |
flags | Type of operation. |
Definition at line 3340 of file town_cmd.cpp.
References _current_company, _settings_game, AddNewsItem(), AI::BroadcastNewEvent(), CMD_ERROR, DC_EXEC, GameSettings::economy, EconomySettings::fund_roads, GetString(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, NF_NORMAL, NR_NONE, NR_TOWN, NT_GENERAL, Town::road_build_months, SetDParam(), SetDParamStr(), and TimerGameEconomy::UsingWallclockUnits().
|
inlinestatic |
Check 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().
|
static |
Check if it's possible to place a town on a given tile.
tile | The tile to check. |
Definition at line 2069 of file town_cmd.cpp.
References DistanceFromEdge(), EXPENSES_OTHER, IsCloseToTown(), IsTileFlat(), IsTileType(), MP_CLEAR, MP_TREES, and return_cmd_error.
|
static |
Test if town can grow road onto a specific tile.
tile | Tile to build upon. |
Definition at line 1479 of file town_cmd.cpp.
References IsTileType(), and MP_ROAD.
|
static |
Generate cargo for a house, scaled by the current economy scale.
t | The current town. |
ct | Type of cargo to generate, usually CT_PASSENGERS or CT_MAIL. |
amount | The number of cargo units. |
stations | Available stations for this house. |
affected_by_recession | Is 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.
|
static |
Generate cargo for a house using the binominal algorithm.
t | The current town. |
tpe | The town production effect. |
rate | The town's product rate for this production. |
stations | Available stations for this house. |
Definition at line 582 of file town_cmd.cpp.
References CargoSpec::town_production_cargoes.
|
static |
Generate cargo for a house using the original algorithm.
t | The current town. |
tpe | The town production effect. |
rate | The town's product rate for this production. |
stations | Available stations for this house. |
Definition at line 562 of file town_cmd.cpp.
References CargoSpec::town_production_cargoes.
Checks if the current town layout allows a 2x2 building here.
t | The town. |
tile | The tile to check. |
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().
Checks if the current town layout allows building here.
t | The town. |
tile | The tile to check. |
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().
|
static |
Handle the town tick for a single town, by growing the town if desired.
t | The 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.
Tries to build a house at this tile.
t | The town the house will belong to. |
tile | The tile to try building on. |
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().
|
static |
Updates town grow counter after growth rate change.
Preserves relative house builting progress whenever it can.
t | The town to calculate grow counter for |
prev_growth_rate | Town 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().
|
static |
Updates town growth state (whether it is growing or not).
t | The town to update growth for |
Definition at line 3784 of file town_cmd.cpp.
References _settings_game, ClrBit(), GameSettings::economy, Town::flags, Town::fund_buildings_months, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, SetWindowDirty(), EconomySettings::town_growth_rate, TOWN_IS_GROWING, UpdateTownGrowthRate(), and WC_TOWN_VIEW.
Referenced by CmdTownCargoGoal(), and TownActionFundBuildings().
|
static |
Updates town growth rate.
t | The town to update growth rate for |
Definition at line 3771 of file town_cmd.cpp.
References Town::flags, GetNormalGrowthRate(), Town::growth_rate, HasBit(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, SetWindowDirty(), TOWN_CUSTOM_GROWTH, UpdateTownGrowCounter(), and WC_TOWN_VIEW.
Referenced by UpdateTownGrowth().
void UpdateTownMaxPass | ( | Town * | t | ) |
Update the maximum amount of montly passengers and mail for a town, based on its population.
t | The 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.
void UpdateTownRadius | ( | Town * | t | ) |
Update the cached town zone radii of a town, based on the number of houses.
t | The 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().
|
static |
Monthly callback to update town and station ratings.
t | The 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.
|
extern |
Tile callback functions for a town.
Definition at line 51 of file landscape.cpp.
const uint8_t _town_action_costs[TACT_COUNT] |
Factor in the cost of each town action.
Definition at line 3288 of file town_cmd.cpp.
Referenced by GetMaskOfTownActions().
|
static |
Definition at line 3562 of file town_cmd.cpp.
|
static |
Definition at line 249 of file town_cmd.cpp.