OpenTTD Source 20241224-master-gf74b0cf984
|
Handling of town tiles. More...
#include "stdafx.h"
#include "road.h"
#include "road_internal.h"
#include "road_cmd.h"
#include "landscape.h"
#include "viewport_func.h"
#include "viewport_kdtree.h"
#include "command_func.h"
#include "company_func.h"
#include "industry.h"
#include "station_base.h"
#include "waypoint_base.h"
#include "station_kdtree.h"
#include "company_base.h"
#include "news_func.h"
#include "error.h"
#include "object.h"
#include "genworld.h"
#include "newgrf_debug.h"
#include "newgrf_house.h"
#include "newgrf_text.h"
#include "autoslope.h"
#include "tunnelbridge_map.h"
#include "strings_func.h"
#include "window_func.h"
#include "string_func.h"
#include "newgrf_cargo.h"
#include "cheat_type.h"
#include "animated_tile_func.h"
#include "subsidy_func.h"
#include "core/pool_func.hpp"
#include "town.h"
#include "town_kdtree.h"
#include "townname_func.h"
#include "core/random_func.hpp"
#include "core/backup_type.hpp"
#include "depot_base.h"
#include "object_map.h"
#include "object_base.h"
#include "ai/ai.hpp"
#include "game/game.hpp"
#include "town_cmd.h"
#include "landscape_cmd.h"
#include "terraform_cmd.h"
#include "tunnelbridge_cmd.h"
#include "timer/timer.h"
#include "timer/timer_game_calendar.h"
#include "timer/timer_game_economy.h"
#include "timer/timer_game_tick.h"
#include "table/strings.h"
#include "table/town_land.h"
#include "safeguards.h"
Go to the source code of this file.
Data Structures | |
struct | SpotData |
Used as the user_data for FindFurthestFromWater. More... | |
struct | StatueBuildSearchData |
Structure for storing data while searching the best place to build a statue. More... | |
Typedefs | |
typedef void | TownDrawTileProc(const TileInfo *ti) |
typedef CommandCost | TownActionProc(Town *t, DoCommandFlag flags) |
Enumerations | |
enum | TownGrowthResult { GROWTH_SUCCEED = -1 , GROWTH_SEARCH_STOPPED = 0 } |
Functions | |
void | RebuildTownKdtree () |
static bool | TestTownOwnsBridge (TileIndex tile, const Town *t) |
Check if a town 'owns' a bridge. | |
static bool | TryBuildTownHouse (Town *t, TileIndex tile) |
Tries to build a house at this tile. | |
static Town * | CreateRandomTown (uint attempts, uint32_t townnameparts, TownSize size, bool city, TownLayout layout) |
Create a random town somewhere in the world. | |
static void | TownDrawHouseLift (const TileInfo *ti) |
static DiagDirection | RandomDiagDir () |
Return a random direction. | |
static void | DrawTile_Town (TileInfo *ti) |
Draw a house and its tile. | |
static int | GetSlopePixelZ_Town (TileIndex tile, uint, uint, bool) |
static Foundation | GetFoundation_Town (TileIndex tile, Slope tileh) |
Get the foundation for a house. | |
static void | AnimateTile_Town (TileIndex tile) |
Animate a tile for a town. | |
static bool | IsCloseToTown (TileIndex tile, uint dist) |
Determines if a town is close to a tile. | |
void | UpdateAllTownVirtCoords () |
Update the virtual coords needed to draw the town sign for all towns. | |
void | ClearAllTownCachedNames () |
Clear the cached_name of all towns. | |
static void | ChangePopulation (Town *t, int mod) |
Change the town's population as recorded in the town cache, town label, and town directory. | |
uint32_t | GetWorldPopulation () |
Get the total population, the sum of all towns in the world. | |
static void | RemoveNearbyStations (Town *t, TileIndex tile, BuildingFlags flags) |
Remove stations from nearby station list if a town is no longer in the catchment area of each. | |
static void | AdvanceSingleHouseConstruction (TileIndex tile) |
Helper function for house construction stage progression. | |
static void | AdvanceHouseConstruction (TileIndex tile) |
Increase the construction stage of a house. | |
static void | TownGenerateCargo (Town *t, CargoID ct, uint amount, StationFinder &stations, bool affected_by_recession) |
Generate cargo for a house, scaled by the current economy scale. | |
static void | TownGenerateCargoOriginal (Town *t, TownProductionEffect tpe, uint8_t rate, StationFinder &stations) |
Generate cargo for a house using the original algorithm. | |
static void | TownGenerateCargoBinominal (Town *t, TownProductionEffect tpe, uint8_t rate, StationFinder &stations) |
Generate cargo for a house using the binominal algorithm. | |
static void | TileLoop_Town (TileIndex tile) |
Tile callback function. | |
static CommandCost | ClearTile_Town (TileIndex tile, DoCommandFlag flags) |
Callback function to clear a house tile. | |
static void | AddProducedCargo_Town (TileIndex tile, CargoArray &produced) |
static void | AddAcceptedCargoSetMask (CargoID cargo, uint amount, CargoArray &acceptance, CargoTypes &always_accepted) |
Fill cargo acceptance array and always_accepted mask, if cargo ID is valid. | |
void | AddAcceptedCargoOfHouse (TileIndex tile, HouseID house, const HouseSpec *hs, Town *t, CargoArray &acceptance, CargoTypes &always_accepted) |
Determine accepted cargo for a house. | |
static void | AddAcceptedCargo_Town (TileIndex tile, CargoArray &acceptance, CargoTypes &always_accepted) |
CargoArray | GetAcceptedCargoOfHouse (const HouseSpec *hs) |
Get accepted cargo of a house prototype. | |
static void | GetTileDesc_Town (TileIndex tile, TileDesc *td) |
static TrackStatus | GetTileTrackStatus_Town (TileIndex, TransportType, uint, DiagDirection) |
static void | ChangeTileOwner_Town (TileIndex, Owner, Owner) |
static bool | GrowTown (Town *t) |
Grow the town. | |
static void | TownTickHandler (Town *t) |
Handle the town tick for a single town, by growing the town if desired. | |
void | OnTick_Town () |
Iterate through all towns and call their tick handler. | |
static RoadBits | GetTownRoadBits (TileIndex tile) |
Return the RoadBits of a tile, ignoring depot and bay road stops. | |
RoadType | GetTownRoadType () |
Get the road type that towns should build at this current moment. | |
static TimerGameCalendar::Date | GetTownRoadTypeFirstIntroductionDate () |
Get the calendar date of the earliest town-buildable road type. | |
bool | CheckTownRoadTypes () |
Check if towns are able to build road. | |
static bool | IsNeighborRoadTile (TileIndex tile, const DiagDirection dir, uint dist_multi) |
Check for parallel road inside a given distance. | |
static bool | IsRoadAllowedHere (Town *t, TileIndex tile, DiagDirection dir) |
Check if a Road is allowed on a given tile. | |
static bool | TerraformTownTile (TileIndex tile, Slope edges, bool dir) |
static void | LevelTownLand (TileIndex tile) |
static RoadBits | GetTownRoadGridElement (Town *t, TileIndex tile, DiagDirection dir) |
Generate the RoadBits of a grid tile. | |
static bool | GrowTownWithExtraHouse (Town *t, TileIndex tile) |
Grows the town with an extra house. | |
static bool | GrowTownWithRoad (const Town *t, TileIndex tile, RoadBits rcmd) |
Grows the town with a road piece. | |
static bool | CanRoadContinueIntoNextTile (const Town *t, const TileIndex tile, const DiagDirection road_dir) |
Checks if a town road can be continued into the next tile. | |
static bool | RedundantBridgeExistsNearby (TileIndex tile, void *user_data) |
CircularTileSearch proc which checks for a nearby parallel bridge to avoid building redundant bridges. | |
static bool | GrowTownWithBridge (const Town *t, const TileIndex tile, const DiagDirection bridge_dir) |
Grows the town with a bridge. | |
static bool | GrowTownWithTunnel (const Town *t, const TileIndex tile, const DiagDirection tunnel_dir) |
Grows the town with a tunnel. | |
static bool | RoadTypesAllowHouseHere (TileIndex t) |
Checks whether at least one surrounding road allows to build a house here. | |
static bool | TownCanGrowRoad (TileIndex tile) |
Test if town can grow road onto a specific tile. | |
static bool | TownAllowedToBuildRoads () |
Check if the town is allowed to build roads. | |
static void | GrowTownInTile (TileIndex *tile_ptr, RoadBits cur_rb, DiagDirection target_dir, Town *t1) |
Grows the given town. | |
static bool | CanFollowRoad (TileIndex tile, DiagDirection dir) |
Checks whether a road can be followed or is a dead end, that can not be extended to the next tile. | |
static bool | GrowTownAtRoad (Town *t, TileIndex tile) |
Try to grow a town at a given road tile. | |
static RoadBits | GenRandomRoadBits () |
Generate a random road block. | |
void | UpdateTownRadius (Town *t) |
Update the cached town zone radii of a town, based on the number of houses. | |
void | UpdateTownMaxPass (Town *t) |
Update the maximum amount of montly passengers and mail for a town, based on its population. | |
static void | UpdateTownGrowthRate (Town *t) |
Updates town growth rate. | |
static void | UpdateTownGrowth (Town *t) |
Updates town growth state (whether it is growing or not). | |
static void | DoCreateTown (Town *t, TileIndex tile, uint32_t townnameparts, TownSize size, bool city, TownLayout layout, bool manual) |
Actually create a town. | |
static CommandCost | TownCanBePlacedHere (TileIndex tile) |
Check if it's possible to place a town on a given tile. | |
static bool | IsUniqueTownName (const std::string &name) |
Verifies this custom name is unique. | |
std::tuple< CommandCost, Money, TownID > | CmdFoundTown (DoCommandFlag flags, TileIndex tile, TownSize size, bool city, TownLayout layout, bool random_location, uint32_t townnameparts, const std::string &text) |
Create a new town. | |
static TileIndex | AlignTileToGrid (TileIndex tile, TownLayout layout) |
Towns must all be placed on the same grid or when they eventually interpenetrate their road networks will not mesh nicely; this function adjusts a tile so that it aligns properly. | |
static bool | IsTileAlignedToGrid (TileIndex tile, TownLayout layout) |
Towns must all be placed on the same grid or when they eventually interpenetrate their road networks will not mesh nicely; this function tells you if a tile is properly aligned. | |
static bool | FindFurthestFromWater (TileIndex tile, void *user_data) |
CircularTileSearch callback; finds the tile furthest from any water. | |
static bool | FindNearestEmptyLand (TileIndex tile, void *) |
CircularTileSearch callback to find the nearest land tile. | |
static TileIndex | FindNearestGoodCoastalTownSpot (TileIndex tile, TownLayout layout) |
Given a spot on the map (presumed to be a water tile), find a good coastal spot to build a city. | |
bool | GenerateTowns (TownLayout layout) |
Generate a number of towns with a given layout. | |
HouseZonesBits | GetTownRadiusGroup (const Town *t, TileIndex tile) |
Returns the bit corresponding to the town zone of the specified tile. | |
static void | ClearMakeHouseTile (TileIndex tile, Town *t, uint8_t counter, uint8_t stage, HouseID type, uint8_t random_bits) |
Clears tile and builds a house or house part. | |
static void | MakeTownHouse (TileIndex tile, Town *t, uint8_t counter, uint8_t stage, HouseID type, uint8_t random_bits) |
Write house information into the map. | |
static bool | CanBuildHouseHere (TileIndex tile, bool noslope) |
Check if a house can be built here, based on slope, whether there's a bridge above, and if we can clear the land. | |
static bool | CheckBuildHouseSameZ (TileIndex tile, int z, bool noslope) |
Check if a tile where we want to build a multi-tile house has an appropriate max Z. | |
static bool | CheckFree2x2Area (TileIndex tile, int z, bool noslope) |
Checks if a house of size 2x2 can be built at this tile. | |
static bool | TownLayoutAllowsHouseHere (Town *t, TileIndex tile) |
Checks if the current town layout allows building here. | |
static bool | TownLayoutAllows2x2HouseHere (Town *t, TileIndex tile) |
Checks if the current town layout allows a 2x2 building here. | |
static bool | CheckTownBuild2House (TileIndex *tile, Town *t, int maxz, bool noslope, DiagDirection second) |
Checks if a 1x2 or 2x1 building is allowed here, accounting for road layout and tile heights. | |
static bool | CheckTownBuild2x2House (TileIndex *tile, Town *t, int maxz, bool noslope) |
Checks if a 1x2 or 2x1 building is allowed here, accounting for road layout and tile heights. | |
static void | BuildTownHouse (Town *t, TileIndex tile, const HouseSpec *hs, HouseID house, uint8_t random_bits) |
Build a house at this tile. | |
CommandCost | CmdPlaceHouse (DoCommandFlag flags, TileIndex tile, HouseID house) |
static void | DoClearTownHouseHelper (TileIndex tile, Town *t, HouseID house) |
Update data structures when a house is removed. | |
TileIndexDiff | GetHouseNorthPart (HouseID &house) |
Determines if a given HouseID is part of a multitile house. | |
void | ClearTownHouse (Town *t, TileIndex tile) |
Clear a town house. | |
CommandCost | CmdRenameTown (DoCommandFlag flags, TownID town_id, const std::string &text) |
Rename a town (server-only). | |
const CargoSpec * | FindFirstCargoWithTownAcceptanceEffect (TownAcceptanceEffect effect) |
Determines the first cargo with a certain town effect. | |
CommandCost | CmdTownCargoGoal (DoCommandFlag flags, TownID town_id, TownAcceptanceEffect tae, uint32_t goal) |
Change the cargo goal of a town. | |
CommandCost | CmdTownSetText (DoCommandFlag flags, TownID town_id, const std::string &text) |
Set a custom text in the Town window. | |
CommandCost | CmdTownGrowthRate (DoCommandFlag flags, TownID town_id, uint16_t growth_rate) |
Change the growth rate of the town. | |
CommandCost | CmdTownRating (DoCommandFlag flags, TownID town_id, CompanyID company_id, int16_t rating) |
Change the rating of a company in a town. | |
CommandCost | CmdExpandTown (DoCommandFlag flags, TownID town_id, uint32_t grow_amount) |
Expand a town (scenario editor only). | |
CommandCost | CmdDeleteTown (DoCommandFlag flags, TownID town_id) |
Delete a town (scenario editor or worldgen only). | |
static CommandCost | TownActionAdvertiseSmall (Town *t, DoCommandFlag flags) |
Perform the "small advertising campaign" town action. | |
static CommandCost | TownActionAdvertiseMedium (Town *t, DoCommandFlag flags) |
Perform the "medium advertising campaign" town action. | |
static CommandCost | TownActionAdvertiseLarge (Town *t, DoCommandFlag flags) |
Perform the "large advertising campaign" town action. | |
static CommandCost | TownActionRoadRebuild (Town *t, DoCommandFlag flags) |
Perform the "local road reconstruction" town action. | |
static bool | CheckClearTile (TileIndex tile) |
Check whether the land can be cleared. | |
static bool | SearchTileForStatue (TileIndex tile, void *user_data) |
Search callback function for TownActionBuildStatue. | |
static CommandCost | TownActionBuildStatue (Town *t, DoCommandFlag flags) |
Perform a 9x9 tiles circular search from the center of the town in order to find a free tile to place a statue. | |
static CommandCost | TownActionFundBuildings (Town *t, DoCommandFlag flags) |
Perform the "fund new buildings" town action. | |
static CommandCost | TownActionBuyRights (Town *t, DoCommandFlag flags) |
Perform the "buy exclusive transport rights" town action. | |
static CommandCost | TownActionBribe (Town *t, DoCommandFlag flags) |
Perform the "bribe" town action. | |
TownActions | GetMaskOfTownActions (CompanyID cid, const Town *t) |
Get a list of available town authority actions. | |
CommandCost | CmdDoTownAction (DoCommandFlag flags, TownID town_id, uint8_t action) |
Do a town action. | |
template<typename Func > | |
static void | ForAllStationsNearTown (Town *t, Func func) |
static void | UpdateTownRating (Town *t) |
Monthly callback to update town and station ratings. | |
static void | UpdateTownGrowCounter (Town *t, uint16_t prev_growth_rate) |
Updates town grow counter after growth rate change. | |
static int | CountActiveStations (Town *t) |
Calculates amount of active stations in the range of town (HZB_TOWN_EDGE). | |
static uint | GetNormalGrowthRate (Town *t) |
Calculates town growth rate in normal conditions (custom growth rate not set). | |
CommandCost | CheckIfAuthorityAllowsNewStation (TileIndex tile, DoCommandFlag flags) |
Checks whether the local authority allows construction of a new station (rail, road, airport, dock) on the given tile. | |
Town * | CalcClosestTownFromTile (TileIndex tile, uint threshold) |
Return the town closest to the given tile within threshold. | |
Town * | ClosestTownFromTile (TileIndex tile, uint threshold) |
Return the town closest (in distance or ownership) to a given tile, within a given threshold. | |
void | SetTownRatingTestMode (bool mode) |
Switch the town rating to test-mode, to allow commands to be tested without affecting current ratings. | |
static int | GetRating (const Town *t) |
Get the rating of a town for the _current_company. | |
void | ChangeTownRating (Town *t, int add, int max, DoCommandFlag flags) |
Changes town rating of the current company. | |
CommandCost | CheckforTownRating (DoCommandFlag flags, Town *t, TownRatingCheckType type) |
Does the town authority allow the (destructive) action of the current company? | |
static CommandCost | TerraformTile_Town (TileIndex tile, DoCommandFlag flags, int z_new, Slope tileh_new) |
std::span< const 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. | |
static TownActionProc *const | _town_action_proc [] |
static bool | _town_rating_test = false |
If true , town rating is in test-mode. | |
static std::map< const Town *, int > | _town_test_ratings |
Map of towns to modified ratings, while in town rating test-mode. | |
static IntervalTimer< TimerGameEconomy > | _economy_towns_monthly ({TimerGameEconomy::MONTH, TimerGameEconomy::Priority::TOWN}, [](auto) { for(Town *t :Town::Iterate()) { if(t->road_build_months !=0) t->road_build_months--;if(t->fund_buildings_months !=0) t->fund_buildings_months--;if(t->exclusive_counter !=0) { if(--t->exclusive_counter==0) t->exclusivity=INVALID_COMPANY;} for(const Company *c :Company::Iterate()) { if(t->unwanted[c->index] > 0) t->unwanted[c->index]--;} for(auto &supplied :t->supplied) supplied.NewMonth();for(auto &received :t->received) received.NewMonth();UpdateTownGrowth(t);UpdateTownRating(t);SetWindowDirty(WC_TOWN_VIEW, t->index);} }) |
static IntervalTimer< TimerGameEconomy > | _economy_towns_yearly ({TimerGameEconomy::YEAR, TimerGameEconomy::Priority::TOWN}, [](auto) { for(const auto t :Map::Iterate()) { if(!IsTileType(t, MP_HOUSE)) continue;IncrementHouseAge(t);} }) |
const TileTypeProcs | _tile_type_town_procs |
Tile callback functions for a town. | |
Handling of town tiles.
Definition in file town_cmd.cpp.
typedef CommandCost TownActionProc(Town *t, DoCommandFlag flags) |
Definition at line 3587 of file town_cmd.cpp.
typedef void TownDrawTileProc(const TileInfo *ti) |
Definition at line 248 of file town_cmd.cpp.
enum TownGrowthResult |
Definition at line 234 of file town_cmd.cpp.
|
static |
Definition at line 842 of file town_cmd.cpp.
void AddAcceptedCargoOfHouse | ( | TileIndex | tile, |
HouseID | house, | ||
const HouseSpec * | hs, | ||
Town * | t, | ||
CargoArray & | acceptance, | ||
CargoTypes & | always_accepted | ||
) |
Determine accepted cargo for a house.
tile | Tile of house, or INVALID_TILE if not yet built. | |
house | HouseID of house. | |
hs | HouseSpec of house. | |
t | Town that house belongs to, or nullptr if not yet built. | |
[out] | acceptance | CargoArray to be filled with acceptance information. |
[out] | always_accepted | Bitmask of always accepted cargo types |
Definition at line 800 of file town_cmd.cpp.
References _settings_game, HouseSpec::accepts_cargo, AddAcceptedCargoSetMask(), CALLBACK_FAILED, HouseSpec::callback_mask, HouseSpec::cargo_acceptance, CBID_HOUSE_ACCEPT_CARGO, CBID_HOUSE_CARGO_ACCEPTANCE, CBM_HOUSE_ACCEPT_CARGO, CBM_HOUSE_CARGO_ACCEPTANCE, GameSettings::game_creation, GB(), GetCargoTranslation(), HouseSpec::grf_prop, GRFFilePropsBase< Tcnt >::grffile, HasBit(), INVALID_TILE, GameCreationSettings::landscape, and lengthof.
Referenced by GetAcceptedCargoOfHouse().
|
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().
Referenced by AddAcceptedCargoOfHouse().
|
static |
Definition at line 746 of file town_cmd.cpp.
|
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 AdvanceSingleHouseConstruction(), HouseSpec::building_flags, HouseSpec::Get(), GetHouseType(), and TileAddXY().
Referenced by TileLoop_Town().
|
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 ChangePopulation(), HouseSpec::Get(), GetHouseConstructionTick(), GetHouseType(), IncHouseConstructionTick(), IsHouseCompleted(), IsTileType(), MarkTileDirtyByTile(), MP_HOUSE, and ResetHouseAge().
Referenced by AdvanceHouseConstruction().
|
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 2249 of file town_cmd.cpp.
References TileX(), TileXY(), TileY(), TL_2X2_GRID, and TL_3X3_GRID.
Referenced by CreateRandomTown().
|
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 TimerGameTick::counter, DeleteAnimatedTile(), HouseSpec::Get(), GetHouseType(), GetLiftDestination(), GetLiftPosition(), HaltLift(), LiftHasDestination(), MarkTileDirtyByTile(), NEW_HOUSE_OFFSET, RandomRange(), SetLiftDestination(), and SetLiftPosition().
|
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 2725 of file town_cmd.cpp.
References _generating_world, Town::cache, Chance16(), ChangePopulation(), GB(), MakeTownHouse(), TownCache::num_houses, HouseSpec::population, TOWN_HOUSE_COMPLETED, UpdateTownGrowthRate(), and UpdateTownRadius().
Referenced by TryBuildTownHouse().
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 3878 of file town_cmd.cpp.
References DistanceManhattan(), Kdtree< T, TxyFunc, CoordT, DistT >::FindNearest(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_town_pool >::Get(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_town_pool >::GetNumItems(), TileX(), TileY(), and Town::xy.
Referenced by AfterLoadGame(), AirportGetNearestTown(), BuildObject(), ClosestTownFromTile(), CmdBuildBridge(), CmdBuildRoad(), CmdBuildTunnel(), Town::PostDestructor(), RemoveRoad(), and UpdateNearestTownForRoadTiles().
|
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 2543 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 1749 of file town_cmd.cpp.
References DiagDirToRoadBits(), GetTileType(), GetTownRoadBits(), GetTunnelBridgeTransportType(), HasTileWaterGround(), IsDriveThroughStopTile(), IsValidTile(), MP_HOUSE, MP_INDUSTRY, MP_OBJECT, MP_ROAD, MP_STATION, MP_TUNNELBRIDGE, ReverseDiagDir(), ROAD_NONE, TileOffsByDiagDir(), TownAllowedToBuildRoads(), and TRANSPORT_ROAD.
Referenced by GrowTownAtRoad().
|
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 1264 of file town_cmd.cpp.
References _settings_game, EconomySettings::allow_town_level_crossings, DC_AUTO, DC_NO_WATER, DiagDirToAxis(), DiagDirToRoadBits(), DRD_NONE, GameSettings::economy, GetBayRoadStopDir(), GetDriveThroughStopAxis(), GetRoadDepotDirection(), GetTownRoadType(), GetTunnelBridgeDirection(), GetTunnelBridgeTransportType(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, IsBayRoadStopTile(), IsDriveThroughStopTile(), IsRoadDepot(), IsTileType(), IsValidTile(), MP_RAILWAY, MP_ROAD, MP_STATION, MP_TUNNELBRIDGE, ReverseDiagDir(), TileOffsByDiagDir(), and TRANSPORT_ROAD.
Referenced by GrowTownWithBridge(), and GrowTownWithTunnel().
|
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 AdvanceSingleHouseConstruction(), BuildTownHouse(), and ClearTownHouse().
Definition at line 900 of file town_cmd.cpp.
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 3975 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.
Referenced by CheckAllowRemoveRoad(), ClearTile_Town(), CmdBuildBridge(), CmdPlantTree(), DoClearBridge(), DoClearTunnel(), and TownActionBribe().
|
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 2568 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 3394 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 4012 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, SetDParam(), DifficultySettings::town_council_tolerance, TOWN_RATING_CHECK_TYPE_COUNT, and Cheat::value.
Referenced by CheckAllowRemoveRoad(), CmdConvertRoad(), DoClearBridge(), and DoClearTunnel().
|
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 2587 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 3854 of file town_cmd.cpp.
References _current_company, _settings_game, ClosestTownFromTile(), DC_NO_TEST_TOWN_RATING, GameSettings::difficulty, EconomySettings::dist_local_authority, GameSettings::economy, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_company_pool >::IsValidID(), Town::ratings, SetDParam(), and DifficultySettings::town_council_tolerance.
Referenced by CmdBuildAirport(), CmdBuildDock(), CmdBuildRailStation(), and CmdBuildRoadStop().
|
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 2676 of file town_cmd.cpp.
References CheckBuildHouseSameZ(), ReverseDiagDir(), TileOffsByDiagDir(), and TownLayoutAllowsHouseHere().
Referenced by TryBuildTownHouse().
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 2701 of file town_cmd.cpp.
References CheckFree2x2Area(), DIAGDIR_END, DIAGDIR_SE, ReverseDiagDir(), TileOffsByDiagDir(), and TownLayoutAllows2x2HouseHere().
Referenced by TryBuildTownHouse().
bool CheckTownRoadTypes | ( | ) |
Check if towns are able to build road.
Definition at line 1009 of file town_cmd.cpp.
References TimerGameCalendar::date, GetTownRoadTypeFirstIntroductionDate(), SetDParam(), ShowErrorMessage(), and WL_CRITICAL.
Referenced by _GenerateWorld().
void ClearAllTownCachedNames | ( | ) |
Clear the cached_name of all towns.
Definition at line 435 of file town_cmd.cpp.
References Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_town_pool >::Iterate().
|
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 2498 of file town_cmd.cpp.
References AddAnimatedTile(), DC_AUTO, DC_EXEC, DC_NO_WATER, HouseSpec::Get(), IncreaseBuildingCount(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, MakeHouseTile(), MarkTileDirtyByTile(), and CommandCost::Succeeded().
Referenced by MakeTownHouse().
|
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 _cheats, _current_company, _settings_game, CommandCost::AddCost(), ChangeTownRating(), ClearTownHouse(), CMD_ERROR, DC_AUTO, DC_EXEC, DC_NO_TEST_TOWN_RATING, GameSettings::difficulty, EXPENSES_CONSTRUCTION, HouseSpec::Get(), GetHouseType(), HouseSpec::GetRemovalCost(), 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, HouseSpec::remove_rating_decrease, SetDParam(), DifficultySettings::town_council_tolerance, and Cheat::value.
Clear a town house.
t | The town which owns the house. |
tile | The tile to clear. |
Definition at line 2975 of file town_cmd.cpp.
References HouseSpec::building_flags, Town::cache, ChangePopulation(), ClrBit(), DoClearTownHouseHelper(), Town::flags, HouseSpec::Get(), GetHouseNorthPart(), GetHouseType(), IsHouseCompleted(), IsTileType(), MP_HOUSE, TownCache::num_houses, HouseSpec::population, RemoveNearbyStations(), TileDiffXY(), TOWN_HAS_CHURCH, TOWN_HAS_STADIUM, and UpdateTownRadius().
Referenced by ClearTile_Town(), and TileLoop_Town().
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 3896 of file town_cmd.cpp.
References _generating_world, CalcClosestTownFromTile(), DistanceManhattan(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_town_pool >::Get(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_town_pool >::GetNumItems(), GetTileType(), GetTownIndex(), HasTownOwnedRoad(), IsRoadDepot(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_town_pool >::IsValidID(), MP_HOUSE, MP_ROAD, and Town::xy.
Referenced by AfterLoadGame(), BuildStationPart(), CheckAllowRemoveRoad(), CheckIfAuthorityAllowsNewStation(), CheckIfCallBackAllowsCreation(), CmdBuildAirport(), CmdBuildBridge(), CmdConvertRoad(), CmdPlantTree(), DisasterTick_Big_Ufo(), DoClearBridge(), DoClearTunnel(), FindTownForIndustry(), CHKPChunkHandler::FixPointers(), GenerateCompanyName(), AirportResolverObject::GetTown(), IndustriesResolverObject::GetTown(), ObjectResolverObject::GetTown(), StationResolverObject::GetTown(), AirportTileScopeResolver::GetVariable(), IndustryTileScopeResolver::GetVariable(), ObjectScopeResolver::GetVariable(), RailTypeScopeResolver::GetVariable(), RoadStopScopeResolver::GetVariable(), RoadTypeScopeResolver::GetVariable(), HighlightTownLocalAuthorityTiles(), MakeDefaultName(), LandInfoWindow::OnInit(), RemoveGenericRoadStop(), and SetDParamsForOwnedBy().
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 3219 of file town_cmd.cpp.
References _generating_world, AT_OILRIG, Town::cache, CMD_ERROR, DC_EXEC, FACIL_AIRPORT, CommandCost::Failed(), Industry::GetByTile(), Object::GetByTile(), 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<&_town_pool >::GetNumItems(), GetTileType(), GetTownIndex(), HasTownOwnedRoad(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, IsTileType(), Map::Iterate(), SpecializedStation< Waypoint, true >::Iterate(), SpecializedStation< Station, false >::Iterate(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_depot_pool >::Iterate(), TrackedViewportSign::kdtree_valid, MP_HOUSE, MP_INDUSTRY, MP_OBJECT, MP_ROAD, MP_TUNNELBRIDGE, OBJECT_STATUE, Kdtree< T, TxyFunc, CoordT, DistT >::Remove(), TownCache::sign, TestTownOwnsBridge(), Industry::town, Object::town, and Object::type.
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 3662 of file town_cmd.cpp.
References _current_company, _town_action_costs, CMD_ERROR, DC_EXEC, EXPENSES_OTHER, CommandCost::Failed(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_town_pool >::GetIfValid(), GetMaskOfTownActions(), HasBit(), lengthof, SetWindowDirty(), and WC_TOWN_AUTHORITY.
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 3182 of file town_cmd.cpp.
References _current_company, Town::cache, CMD_ERROR, DC_EXEC, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_town_pool >::GetIfValid(), GrowTown(), TownCache::num_houses, OWNER_DEITY, RandomRange(), UpdateTownMaxPass(), and UpdateTownRadius().
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 2142 of file town_cmd.cpp.
References _current_company, _generating_world, _settings_game, AI::BroadcastNewEvent(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_town_pool >::CanAllocateItem(), CMD_ERROR, CreateRandomTown(), DC_EXEC, DoCreateTown(), GameSettings::economy, EXPENSES_OTHER, CommandCost::Failed(), EconomySettings::found_town, GameSettings::game_creation, GetAvailableMoneyForCommand(), CommandCost::GetCost(), GetString(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, IsUniqueTownName(), lengthof, MAX_LENGTH_TOWN_NAME_CHARS, CommandCost::MultiplyCost(), Town::name, Game::NewEvent(), NT_INDUSTRY_OPEN, NUM_TLS, OWNER_DEITY, Backup< T >::Restore(), SetDParam(), SetDParamStr(), TF_CUSTOM_LAYOUT, TF_FORBIDDEN, EconomySettings::town_layout, GameCreationSettings::town_name, TownCanBePlacedHere(), TSZ_END, TSZ_LARGE, TSZ_RANDOM, UpdateNearestTownForRoadTiles(), Town::UpdateVirtCoord(), Utf8StringLength(), and VerifyTownName().
CommandCost CmdPlaceHouse | ( | DoCommandFlag | flags, |
TileIndex | tile, | ||
HouseID | house | ||
) |
Definition at line 2880 of file town_cmd.cpp.
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 3018 of file town_cmd.cpp.
References Town::cached_name, CMD_ERROR, DC_EXEC, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_town_pool >::GetIfValid(), InvalidateWindowData(), IsUniqueTownName(), MAX_LENGTH_TOWN_NAME_CHARS, Town::name, UpdateAllStationVirtCoords(), Town::UpdateVirtCoord(), Utf8StringLength(), and WC_TOWN_DIRECTORY.
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 3068 of file town_cmd.cpp.
References _current_company, CMD_ERROR, DC_EXEC, FindFirstCargoWithTownAcceptanceEffect(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_town_pool >::GetIfValid(), Town::goal, InvalidateWindowData(), OWNER_DEITY, TAE_END, UpdateTownGrowth(), and WC_TOWN_VIEW.
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 3119 of file town_cmd.cpp.
References _current_company, ClrBit(), CMD_ERROR, DC_EXEC, Town::flags, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_town_pool >::GetIfValid(), Town::grow_counter, Town::growth_rate, InvalidateWindowData(), OWNER_DEITY, SetBit(), TOWN_CUSTOM_GROWTH, UpdateTownGrowth(), and WC_TOWN_VIEW.
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 3157 of file town_cmd.cpp.
References _current_company, Clamp(), CMD_ERROR, DC_EXEC, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_town_pool >::GetIfValid(), InvalidateWindowData(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_company_pool >::IsValidID(), OWNER_DEITY, Town::ratings, and WC_TOWN_AUTHORITY.
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 3097 of file town_cmd.cpp.
References _current_company, CMD_ERROR, DC_EXEC, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_town_pool >::GetIfValid(), InvalidateWindowData(), OWNER_DEITY, Town::text, and WC_TOWN_VIEW.
|
static |
Calculates amount of active stations in the range of town (HZB_TOWN_EDGE).
t | The town to calculate stations for |
Definition at line 3753 of file town_cmd.cpp.
Referenced by GetNormalGrowthRate(), and UpdateTownGrowth().
|
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 2361 of file town_cmd.cpp.
References _current_company, _generating_world, AlignTileToGrid(), Town::cache, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_town_pool >::CanAllocateItem(), DC_EXEC, DoCreateTown(), FindNearestGoodCoastalTownSpot(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, INVALID_TILE, IsTileType(), MP_WATER, OWNER_TOWN, TownCache::population, RandomTile, Backup< T >::Restore(), CommandCost::Succeeded(), and TownCanBePlacedHere().
Referenced by CmdFoundTown(), and GenerateTowns().
Update data structures when a house is removed.
Definition at line 2934 of file town_cmd.cpp.
References DecreaseBuildingCount(), DeleteNewGRFInspectWindow(), IsTileType(), and MP_HOUSE.
Referenced by ClearTownHouse().
|
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 2017 of file town_cmd.cpp.
References _generating_town, _settings_game, Town::cache, GameSettings::economy, Town::exclusive_counter, Town::exclusivity, FindFirstCargoWithTownAcceptanceEffect(), Town::flags, Town::fund_buildings_months, GameSettings::game_creation, Town::goal, TownNameParams::grfid, Town::grow_counter, Town::growth_rate, GrowTown(), Town::have_ratings, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, EconomySettings::initial_city_size, InitializeBuildingCounts(), Town::InitializeLayout(), Kdtree< T, TxyFunc, CoordT, DistT >::Insert(), INVALID_COMPANY, InvalidateWindowData(), GameCreationSettings::landscape, Town::larger_town, MAX_COMPANIES, TownCache::num_houses, TownCache::population, RATING_INITIAL, Town::ratings, Town::show_zone, Town::statues, TAE_FOOD, TAE_WATER, Town::time_until_rebuild, TOWN_GROWTH_DESERT, Ticks::TOWN_GROWTH_TICKS, TOWN_GROWTH_WINTER, GameCreationSettings::town_name, TSZ_RANDOM, TownNameParams::type, UpdateAirportsNoise(), UpdateTownGrowthRate(), UpdateTownMaxPass(), UpdateTownRadius(), Town::UpdateVirtCoord(), WC_TOWN_DIRECTORY, and Town::xy.
Referenced by CmdFoundTown(), and CreateRandomTown().
|
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 _town_draw_tile_data, AddSortableSpriteToDraw(), DrawFoundation(), DrawGroundSprite(), FOUNDATION_LEVELED, HouseSpec::Get(), GetHouseBuildingStage(), GetHouseType(), HouseSpec::grf_prop, IsInvisibilitySet(), IsTransparencySet(), NEW_HOUSE_OFFSET, PalSpriteID::pal, SLOPE_FLAT, PalSpriteID::sprite, TileInfo::tile, TileInfo::tileh, TileHash2Bit(), TO_HOUSES, TileInfo::x, TileInfo::y, and TileInfo::z.
const CargoSpec * FindFirstCargoWithTownAcceptanceEffect | ( | TownAcceptanceEffect | effect | ) |
Determines the first cargo with a certain town effect.
effect | Town effect of interest |
Definition at line 3052 of file town_cmd.cpp.
References CargoSpec::Iterate().
Referenced by AfterLoadGame(), CmdTownCargoGoal(), DoCreateTown(), and TownViewWindow::DrawWidget().
|
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 2301 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 2321 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 2338 of file town_cmd.cpp.
References CircularTileSearch(), FindFurthestFromWater(), FindNearestEmptyLand(), INVALID_TILE, and SpotData::tile.
Referenced by CreateRandomTown().
|
static |
Definition at line 3682 of file town_cmd.cpp.
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 2413 of file town_cmd.cpp.
References _random, _settings_game, CreateRandomTown(), GameCreationSettings::custom_town_number, CUSTOM_TOWN_NUMBER_DIFFICULTY, GameSettings::difficulty, GameSettings::economy, GameSettings::game_creation, GenerateTownName(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_town_pool >::GetNumItems(), GWP_TOWN, IncreaseGeneratingWorldProgress(), INVALID_STRING_ID, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_town_pool >::Iterate(), EconomySettings::larger_towns, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::MAX_SIZE, DifficultySettings::number_towns, Map::ScaleBySize(), SetGeneratingWorldProgress(), ShowErrorMessage(), TSZ_RANDOM, and WL_CRITICAL.
Referenced by _GenerateWorld(), and FoundTownWindow::OnClick().
|
static |
Generate a random road block.
The probability of a straight road is somewhat higher than a curved.
Definition at line 1873 of file town_cmd.cpp.
Referenced by GrowTown().
CargoArray GetAcceptedCargoOfHouse | ( | const HouseSpec * | hs | ) |
Get accepted cargo of a house prototype.
hs | Spec of the house. |
Definition at line 853 of file town_cmd.cpp.
References AddAcceptedCargoOfHouse(), HouseSpec::Index(), and INVALID_TILE.
Referenced by BuildHouseWindow::GetHouseInformation().
|
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 CALLBACK_FAILED, HouseSpec::callback_mask, CBID_HOUSE_DRAW_FOUNDATIONS, CBM_HOUSE_DRAW_FOUNDATIONS, ConvertBooleanCallback(), FlatteningFoundation(), FOUNDATION_NONE, HouseSpec::Get(), GetHouseType(), HouseSpec::grf_prop, GRFFilePropsBase< Tcnt >::grffile, HasBit(), NEW_HOUSE_OFFSET, and GRFFilePropsBase< Tcnt >::spritegroup.
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 2950 of file town_cmd.cpp.
References HouseSpec::Get(), and TileDiffXY().
Referenced by ClearTownHouse(), GetDistanceFromNearbyHouse(), RebuildTownCaches(), SearchNearbyHouseClass(), SearchNearbyHouseGRFID(), SearchNearbyHouseID(), UpdateHousesAndTowns(), and WatchedCargoCallback().
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 3605 of file town_cmd.cpp.
References _current_company, _settings_game, _town_action_costs, EconomySettings::bribe, COMPANY_SPECTATOR, GameSettings::economy, Town::exclusive_counter, EconomySettings::exclusive_rights, Town::exclusivity, EconomySettings::fund_buildings, EconomySettings::fund_roads, GetAvailableMoney(), HasBit(), lengthof, Town::ratings, Town::statues, TACT_BRIBE, TACT_BUILD_STATUE, TACT_BUY_RIGHTS, TACT_FUND_BUILDINGS, TACT_NONE, TACT_ROAD_REBUILD, and Town::unwanted.
Referenced by CmdDoTownAction(), and 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 3770 of file town_cmd.cpp.
References _settings_game, Town::cache, CountActiveStations(), GameSettings::economy, Town::fund_buildings_months, Town::larger_town, TownCache::num_houses, and EconomySettings::town_growth_rate.
Referenced by UpdateTownGrowthRate().
|
static |
Get the rating of a town for the _current_company.
t | Town to get the rating from. |
Definition at line 3957 of file town_cmd.cpp.
References _current_company, _town_rating_test, _town_test_ratings, and Town::ratings.
Referenced by ChangeTownRating(), and CheckforTownRating().
|
static |
Definition at line 316 of file town_cmd.cpp.
Definition at line 861 of file town_cmd.cpp.
|
static |
Definition at line 894 of file town_cmd.cpp.
std::span< const DrawBuildingsTileStruct > GetTownDrawTileData | ( | ) |
Definition at line 4125 of file town_cmd.cpp.
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 2474 of file town_cmd.cpp.
References DistanceSquare(), Town::fund_buildings_months, and Town::xy.
Referenced by AirportTileScopeResolver::GetVariable(), HouseScopeResolver::GetVariable(), IndustriesScopeResolver::GetVariable(), IndustryTileScopeResolver::GetVariable(), ObjectScopeResolver::GetVariable(), RailTypeScopeResolver::GetVariable(), RoadStopScopeResolver::GetVariable(), RoadTypeScopeResolver::GetVariable(), and TryBuildTownHouse().
Return the RoadBits of a tile, ignoring depot and bay road stops.
tile | The tile to check. |
Definition at line 942 of file town_cmd.cpp.
References GetAnyRoadBits(), IsBayRoadStopTile(), IsRoadDepotTile(), and ROAD_NONE.
Referenced by CanFollowRoad(), GrowTown(), GrowTownAtRoad(), GrowTownWithBridge(), GrowTownWithTunnel(), IsNeighborRoadTile(), and IsRoadAllowedHere().
|
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 1144 of file town_cmd.cpp.
References DiagDirToRoadBits(), GetTileSlope(), Town::layout, ReverseDiagDir(), ROAD_ALL, ROAD_NE, ROAD_NONE, ROAD_NW, ROAD_SE, ROAD_SW, ROAD_X, ROAD_Y, SLOPE_E, SLOPE_N, SLOPE_NE, SLOPE_NW, SLOPE_S, SLOPE_SE, SLOPE_STEEP_E, SLOPE_STEEP_N, SLOPE_STEEP_S, SLOPE_STEEP_W, SLOPE_SW, SLOPE_W, TileIndexToTileIndexDiffC(), TL_2X2_GRID, TL_3X3_GRID, TileIndexDiffC::x, Town::xy, and TileIndexDiffC::y.
Referenced by GrowTownInTile().
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 953 of file town_cmd.cpp.
References TimerGameCalendar::date, RoadTypeInfo::flags, GetRoadTypeInfo(), HasBit(), RoadTypeInfo::introduction_date, IsInsideMM(), RoadTypeInfo::label, TimerGameConst< struct Calendar >::MAX_DATE, RoadTypeInfo::max_speed, ROADTYPE_BEGIN, ROADTYPE_END, ROADTYPE_ROAD, and ROTF_TOWN_BUILD.
Referenced by CanRoadContinueIntoNextTile(), GrowTown(), GrowTownWithBridge(), GrowTownWithRoad(), GrowTownWithTunnel(), IsRoadAllowedHere(), and TownCanGrowRoad().
|
static |
Get the calendar date of the earliest town-buildable road type.
Definition at line 988 of file town_cmd.cpp.
References RoadTypeInfo::flags, GetRoadTypeInfo(), HasBit(), RoadTypeInfo::introduction_date, RoadTypeInfo::label, ROADTYPE_BEGIN, ROADTYPE_END, and ROTF_TOWN_BUILD.
Referenced by CheckTownRoadTypes().
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().
Referenced by TownDirectoryWindow::SetStringParameters().
|
static |
Grow the town.
t | The town to grow |
Definition at line 1887 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 CmdExpandTown(), DoCreateTown(), and 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 1791 of file town_cmd.cpp.
References Town::cache, CanFollowRoad(), DIAGDIR_END, DiagDirToRoadBits(), GetTownRoadBits(), GetTunnelBridgeDirection(), GrowTownInTile(), HasTileRoadType(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, IsRoadDepot(), IsRoadOwner(), IsTileType(), IsValidDiagDirection(), Town::layout, MP_ROAD, MP_TUNNELBRIDGE, TownCache::num_houses, OWNER_NONE, OWNER_TOWN, RandomDiagDir(), ReverseDiagDir(), ROAD_NONE, SetRoadOwner(), SetTownIndex(), Map::Size(), TileAddByDiagDir(), TL_2X2_GRID, TL_3X3_GRID, 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 1541 of file town_cmd.cpp.
References _settings_game, EconomySettings::allow_town_level_crossings, ConstructionSettings::build_on_slopes, Chance16(), ChangeDiagDir(), CleanUpRoadBits(), GameSettings::construction, DIAGDIR_END, DIAGDIRDIFF_90LEFT, DIAGDIRDIFF_90RIGHT, DiagDirToRoadBits(), DIR_E, DIR_N, DIR_S, DIR_W, GameSettings::economy, GetOtherTunnelBridgeEnd(), GetTownRoadGridElement(), GetTunnelBridgeTransportType(), GrowTownWithBridge(), GrowTownWithExtraHouse(), GrowTownWithRoad(), GrowTownWithTunnel(), HasTileWaterGround(), IsRoadAllowedHere(), IsTileType(), IsValidTile(), Town::layout, MP_HOUSE, MP_RAILWAY, MP_TUNNELBRIDGE, RandomDiagDir(), ReverseDiagDir(), ROAD_E, ROAD_N, ROAD_NONE, ROAD_S, ROAD_W, ROAD_X, RoadTypesAllowHouseHere(), Map::Size(), TileAddByDiagDir(), TileAddByDir(), TL_2X2_GRID, TL_3X3_GRID, TL_BETTER_ROADS, TL_ORIGINAL, TownAllowedToBuildRoads(), TownCanGrowRoad(), TRANSPORT_ROAD, and TryBuildTownHouse().
Referenced by GrowTownAtRoad().
|
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 1331 of file town_cmd.cpp.
References Town::cache, CanRoadContinueIntoNextTile(), CircularTileSearch(), CommandFlagsToDCFlags(), DC_EXEC, DIAGDIR_END, DiagDirToRoadBits(), DRD_NONE, GetDisallowedRoadDirections(), GetTileSlope(), GetTownRoadBits(), GetTownRoadType(), InclinedSlope(), IsNormalRoadTile(), IsPlainRailTile(), IsSea(), IsValidTile(), IsWaterTile(), MAX_BRIDGES, TownCache::population, RandomRange(), RedundantBridgeExistsNearby(), ReverseDiagDir(), SLOPE_FLAT, TileAddByDiagDir(), TileOffsByDiagDir(), and TRANSPORT_ROAD.
Referenced by GrowTownInTile().
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 1203 of file town_cmd.cpp.
References DIAGDIR_BEGIN, DIAGDIR_END, DistanceFromEdge(), GetTileType(), MP_HOUSE, MP_VOID, TileAddByDiagDir(), and TryBuildTownHouse().
Referenced by GrowTownInTile().
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 1245 of file town_cmd.cpp.
References DC_AUTO, DC_EXEC, DC_NO_WATER, DRD_NONE, GetTownRoadType(), and Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index.
Referenced by GrowTownInTile().
|
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 1412 of file town_cmd.cpp.
References Town::cache, CanRoadContinueIntoNextTile(), CommandFlagsToDCFlags(), DC_EXEC, DIAGDIR_END, DiagDirToRoadBits(), GetTileSlope(), GetTileZ(), GetTownRoadBits(), GetTownRoadType(), InclinedSlope(), IsSlopeWithOneCornerRaised(), IsSteepSlope(), IsValidTile(), TownCache::population, ReverseDiagDir(), TileAddByDiagDir(), TileOffsByDiagDir(), and TRANSPORT_ROAD.
Referenced by GrowTownInTile().
|
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.
References Kdtree< T, TxyFunc, CoordT, DistT >::Count(), DistanceManhattan(), Kdtree< T, TxyFunc, CoordT, DistT >::FindNearest(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_town_pool >::Get(), TileX(), TileY(), and Town::xy.
Referenced by TownCanBePlacedHere().
|
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 1033 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 1067 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.
Referenced by GrowTownInTile().
|
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 2267 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 2121 of file town_cmd.cpp.
References Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_town_pool >::Iterate(), and Town::name.
Referenced by CmdFoundTown(), and CmdRenameTown().
|
static |
Definition at line 1121 of file town_cmd.cpp.
|
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 2521 of file town_cmd.cpp.
References HouseSpec::building_flags, ClearMakeHouseTile(), ForAllStationsAroundTiles(), HouseSpec::Get(), Town::stations_near, and TileDiffXY().
Referenced by BuildTownHouse().
void OnTick_Town | ( | ) |
Iterate through all towns and call their tick handler.
Definition at line 928 of file town_cmd.cpp.
References Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_town_pool >::Iterate(), and TownTickHandler().
|
inlinestatic |
Return a random direction.
Definition at line 258 of file town_cmd.cpp.
References DIAGDIR_END, and RandomRange().
Referenced by GrowTownAtRoad(), and GrowTownInTile().
void RebuildTownKdtree | ( | ) |
Definition at line 73 of file town_cmd.cpp.
|
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 1306 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 Station::CatchmentCoversTown(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, Town::stations_near, and TileDiffXY().
Referenced by ClearTownHouse().
|
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 1478 of file town_cmd.cpp.
References GetRoadTypeInfo(), HasBit(), INVALID_ROADTYPE, IsAnyRoadStopTile(), IsTileType(), IsValidTile(), MP_ROAD, ROTF_NO_HOUSES, and ToTileIndexDiff().
Referenced by CanBuildHouseHere(), and GrowTownInTile().
|
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 3416 of file town_cmd.cpp.
References StatueBuildSearchData::best_position, CheckClearTile(), GetTileSlope(), INVALID_TILE, IsBridgeAbove(), IsSteepSlope(), IsTileType(), MP_CLEAR, MP_HOUSE, MP_TREES, and StatueBuildSearchData::tile_count.
Referenced by TownActionBuildStatue().
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 3937 of file town_cmd.cpp.
References _town_rating_test, and _town_test_ratings.
Referenced by CommandHelperBase::InternalDoAfter(), CommandHelperBase::InternalDoBefore(), CommandHelperBase::InternalExecutePrepTest(), and CommandHelperBase::InternalExecuteValidateTestAndPrepExec().
|
static |
Definition at line 4079 of file town_cmd.cpp.
Definition at line 1111 of file town_cmd.cpp.
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 CmdDeleteTown(), and 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 _current_company, _settings_game, AddAnimatedTile(), AdvanceHouseConstruction(), HouseSpec::building_flags, CALLBACK_FAILED, CALLBACK_HOUSEPRODCARGO_END, HouseSpec::callback_mask, CBID_HOUSE_PRODUCE_CARGO, CBM_HOUSE_PRODUCE_CARGO, Chance16(), Clamp(), ClearTownHouse(), TimerGameTick::counter, GameSettings::economy, Town::flags, GB(), HouseSpec::Get(), GetCargoTranslation(), GetHouseAge(), GetHouseType(), HouseSpec::grf_prop, GRFFilePropsBase< Tcnt >::grffile, HasBit(), IsHouseCompleted(), IsValidCargoID(), LiftHasDestination(), HouseSpec::mail_generation, HouseSpec::minimum_life, NEW_HOUSE_OFFSET, OWNER_TOWN, HouseSpec::population, Backup< T >::Restore(), TCGM_BITCOUNT, TCGM_ORIGINAL, TileAddXY(), TileIndexToTileIndexDiffC(), Town::time_until_rebuild, EconomySettings::town_cargogen_mode, TOWN_IS_GROWING, TownGenerateCargo(), TownGenerateCargoBinominal(), TownGenerateCargoOriginal(), TPE_MAIL, TPE_PASSENGERS, TryBuildTownHouse(), TileIndexDiffC::x, Town::xy, and TileIndexDiffC::y.
|
static |
Perform the "large advertising campaign" town action.
t | The town to advertise in. |
flags | Type of operation. |
Definition at line 3352 of file town_cmd.cpp.
References _current_company, DC_EXEC, and Town::xy.
|
static |
Perform the "medium advertising campaign" town action.
t | The town to advertise in. |
flags | Type of operation. |
Definition at line 3338 of file town_cmd.cpp.
References _current_company, DC_EXEC, and Town::xy.
|
static |
Perform the "small advertising campaign" town action.
t | The town to advertise in. |
flags | Type of operation. |
Definition at line 3324 of file town_cmd.cpp.
References _current_company, DC_EXEC, and Town::xy.
|
static |
Perform the "bribe" town action.
t | The town to bribe. |
flags | Type of operation. |
Definition at line 3550 of file town_cmd.cpp.
References _current_company, Chance16(), ChangeTownRating(), DC_EXEC, Town::exclusive_counter, Town::exclusivity, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, INVALID_COMPANY, INVALID_STRING_ID, IsLocalCompany(), SpecializedStation< Station, false >::Iterate(), Town::ratings, SetWindowDirty(), ShowErrorMessage(), Town::unwanted, WC_TOWN_AUTHORITY, 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 3459 of file town_cmd.cpp.
References _current_company, StatueBuildSearchData::best_position, BuildObject(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_object_pool >::CanAllocateItem(), CircularTileSearch(), DC_EXEC, INVALID_TILE, MarkTileDirtyByTile(), OBJECT_STATUE, OWNER_NONE, Backup< T >::Restore(), SearchTileForStatue(), SetBit(), Town::statues, and Town::xy.
|
static |
Perform the "buy exclusive transport rights" town action.
t | The town to buy exclusivity in. |
flags | Type of operation. |
Definition at line 3517 of file town_cmd.cpp.
References _current_company, _settings_game, AddNewsItem(), AI::BroadcastNewEvent(), CMD_ERROR, DC_EXEC, GameSettings::economy, Town::exclusive_counter, EconomySettings::exclusive_rights, Town::exclusivity, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_company_pool >::Get(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, INVALID_COMPANY, Game::NewEvent(), NF_COMPANY, NR_NONE, NR_TOWN, NT_GENERAL, SetDParam(), SetDParamStr(), SetWindowClassesDirty(), TimerGameEconomy::UsingWallclockUnits(), WC_STATION_VIEW, and Town::xy.
|
static |
Perform the "fund new buildings" town action.
t | The town to fund buildings in. |
flags | Type of operation. |
Definition at line 3484 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 3366 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, Game::NewEvent(), 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 1519 of file town_cmd.cpp.
References _generating_world, _settings_game, EconomySettings::allow_town_roads, and GameSettings::economy.
Referenced by CanFollowRoad(), GrowTown(), GrowTownInTile(), TownLayoutAllows2x2HouseHere(), and TownLayoutAllowsHouseHere().
|
static |
Check if it's possible to place a town on a given tile.
tile | The tile to check. |
Definition at line 2096 of file town_cmd.cpp.
References DistanceFromEdge(), EXPENSES_OTHER, IsCloseToTown(), IsTileFlat(), IsTileType(), MP_CLEAR, and MP_TREES.
Referenced by CmdFoundTown(), and CreateRandomTown().
|
static |
Test if town can grow road onto a specific tile.
tile | Tile to build upon. |
Definition at line 1506 of file town_cmd.cpp.
References GetRoadTypeInfo(), GetTownRoadType(), HasBit(), IsTileType(), MP_ROAD, and ROTF_TOWN_BUILD.
Referenced by GrowTownInTile().
|
static |
Definition at line 243 of file town_cmd.cpp.
|
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(), StationFinder::GetStations(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, TransportedCargoStat< Tstorage >::new_act, TransportedCargoStat< Tstorage >::new_max, ScaleByCargoScale(), Town::supplied, and Town.
Referenced by TileLoop_Town(), TownGenerateCargoBinominal(), and TownGenerateCargoOriginal().
|
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 CountBits(), CargoSpec::town_production_cargoes, and TownGenerateCargo().
Referenced by TileLoop_Town().
|
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 GB(), CargoSpec::town_production_cargoes, and TownGenerateCargo().
Referenced by TileLoop_Town().
Checks if the current town layout allows a 2x2 building here.
t | The town. |
tile | The tile to check. |
Definition at line 2639 of file town_cmd.cpp.
References Town::layout, TileIndexToTileIndexDiffC(), TL_2X2_GRID, TL_3X3_GRID, TownAllowedToBuildRoads(), TileIndexDiffC::x, Town::xy, and TileIndexDiffC::y.
Referenced by CheckTownBuild2x2House().
Checks if the current town layout allows building here.
t | The town. |
tile | The tile to check. |
Definition at line 2608 of file town_cmd.cpp.
References Town::layout, TileIndexToTileIndexDiffC(), TL_2X2_GRID, TL_3X3_GRID, TownAllowedToBuildRoads(), TileIndexDiffC::x, Town::xy, and TileIndexDiffC::y.
Referenced by CheckTownBuild2House(), and TryBuildTownHouse().
|
static |
Handle the town tick for a single town, by growing the town if desired.
t | The town to try growing. |
Definition at line 911 of file town_cmd.cpp.
References Town::flags, Town::grow_counter, Town::growth_rate, GrowTown(), HasBit(), Ticks::TOWN_GROWTH_TICKS, and TOWN_IS_GROWING.
Referenced by OnTick_Town().
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 2757 of file town_cmd.cpp.
References _generating_world, _settings_game, HouseSpec::building_availability, TownCache::building_counts, HouseSpec::building_flags, BUILDING_IS_HISTORICAL, BuildTownHouse(), Town::cache, CALLBACK_FAILED, HouseSpec::callback_mask, CanBuildHouseHere(), CBID_HOUSE_ALLOW_CONSTRUCTION, CBM_HOUSE_ALLOW_CONSTRUCTION, CheckTownBuild2House(), CheckTownBuild2x2House(), HouseSpec::class_id, Convert8bitBooleanCallback(), DIAGDIR_SE, DIAGDIR_SW, HouseSpec::enabled, HouseSpec::extra_flags, Town::flags, GameSettings::game_creation, HouseSpec::Get(), GetTileMaxZ(), GetTileSlope(), GetTownRadiusGroup(), HouseSpec::grf_prop, GRFFilePropsBase< Tcnt >::grffile, HasBit(), HighestSnowLine(), HouseSpec::Index(), GameCreationSettings::landscape, HouseSpec::max_year, GRFFileProps::override, HouseSpec::probability, RandomRange(), SetBit(), SLOPE_FLAT, HouseSpec::Specs(), TOWN_HAS_CHURCH, TOWN_HAS_STADIUM, TownLayoutAllowsHouseHere(), and TimerGameCalendar::year.
Referenced by GrowTownInTile(), GrowTownWithExtraHouse(), and TileLoop_Town().
void UpdateAllTownVirtCoords | ( | ) |
Update the virtual coords needed to draw the town sign for all towns.
Definition at line 427 of file town_cmd.cpp.
References Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_town_pool >::Iterate().
Referenced by UpdateAllVirtCoords().
|
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 3738 of file town_cmd.cpp.
References Town::grow_counter, Town::growth_rate, RoundDivSU(), and TOWN_GROWTH_RATE_NONE.
Referenced by UpdateTownGrowthRate().
|
static |
Updates town growth state (whether it is growing or not).
t | The town to update growth for |
Definition at line 3810 of file town_cmd.cpp.
References _settings_game, Town::cache, Chance16(), ClrBit(), CountActiveStations(), GameSettings::economy, Town::flags, Town::fund_buildings_months, GetSnowLine(), GetTropicZone(), Town::goal, Town::growth_rate, HasBit(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, TransportedCargoStat< Tstorage >::old_act, TownCache::population, Town::received, SetBit(), SetWindowDirty(), TAE_END, TileHeight(), TOWN_CUSTOM_GROWTH, TOWN_GROWTH_DESERT, EconomySettings::town_growth_rate, TOWN_GROWTH_RATE_NONE, TOWN_GROWTH_WINTER, TOWN_IS_GROWING, TROPICZONE_DESERT, UpdateTownGrowthRate(), WC_TOWN_VIEW, and Town::xy.
Referenced by CmdTownCargoGoal(), CmdTownGrowthRate(), and TownActionFundBuildings().
|
static |
Updates town growth rate.
t | The town to update growth rate for |
Definition at line 3797 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 BuildTownHouse(), DoCreateTown(), and 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 1993 of file town_cmd.cpp.
References Town::cache, TransportedCargoStat< Tstorage >::old_max, TownCache::population, ScaleByCargoScale(), Town::supplied, CargoSpec::town_production_cargoes, TPE_MAIL, and TPE_PASSENGERS.
Referenced by AfterLoadGame(), CmdExpandTown(), and DoCreateTown().
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 1946 of file town_cmd.cpp.
References Town::cache, TownCache::num_houses, and TownCache::squared_town_zone_radius.
Referenced by BuildTownHouse(), ClearTownHouse(), CmdExpandTown(), DoCreateTown(), and RebuildTownCaches().
|
static |
Monthly callback to update town and station ratings.
t | The town to update. |
Definition at line 3700 of file town_cmd.cpp.
References Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_company_pool >::IsValidID(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_company_pool >::Iterate(), BaseStation::owner, RATING_GROWTH_MAXIMUM, RATING_GROWTH_UP_STEP, and Town::ratings.
|
static |
Set if a town is being generated.
Definition at line 83 of file town_cmd.cpp.
Referenced by ChangePopulation(), and DoCreateTown().
|
static |
Definition at line 231 of file town_cmd.cpp.
|
static |
Definition at line 2405 of file town_cmd.cpp.
|
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 3314 of file town_cmd.cpp.
Referenced by CmdDoTownAction(), TownAuthorityWindow::DrawWidget(), GetMaskOfTownActions(), and TownAuthorityWindow::UpdateWidgetSize().
|
static |
Definition at line 3588 of file town_cmd.cpp.
|
static |
Definition at line 249 of file town_cmd.cpp.
TownKdtree _town_kdtree {} |
Definition at line 71 of file town_cmd.cpp.
|
static |
If true
, town rating is in test-mode.
Definition at line 3929 of file town_cmd.cpp.
Referenced by ChangeTownRating(), GetRating(), and SetTownRatingTestMode().
|
static |
Map of towns to modified ratings, while in town rating test-mode.
Definition at line 3930 of file town_cmd.cpp.
Referenced by ChangeTownRating(), GetRating(), and SetTownRatingTestMode().