OpenTTD Source  20241120-master-g6d3adc6169
town.h File Reference

Base of the town class. More...

#include "viewport_type.h"
#include "timer/timer_game_tick.h"
#include "town_map.h"
#include "subsidy_type.h"
#include "newgrf_storage.h"
#include "cargotype.h"

Go to the source code of this file.

Data Structures

struct  BuildingCounts< T >
 
struct  TownCache
 Data structure with cached data of towns. More...
 
struct  Town
 Town data structure. More...
 

Typedefs

typedef Pool< Town, TownID, 64, 64000 > TownPool
 

Enumerations

enum  TownCouncilAttitudes { TOWN_COUNCIL_LENIENT = 0 , TOWN_COUNCIL_TOLERANT = 1 , TOWN_COUNCIL_HOSTILE = 2 , TOWN_COUNCIL_PERMISSIVE = 3 }
 Settings for town council attitudes.
 
enum  TownRatingCheckType { ROAD_REMOVE = 0 , TUNNELBRIDGE_REMOVE = 1 , TOWN_RATING_CHECK_TYPE_COUNT }
 Action types that a company must ask permission for to a town authority. More...
 
enum  TownDirectoryInvalidateWindowData { TDIWD_FORCE_REBUILD , TDIWD_POPULATION_CHANGE , TDIWD_FORCE_RESORT }
 Special values for town list window for the data parameter of InvalidateWindowData.
 
enum  TownFlags { TOWN_IS_GROWING = 0 , TOWN_HAS_CHURCH = 1 , TOWN_HAS_STADIUM = 2 , TOWN_CUSTOM_GROWTH = 3 }
 This enum is used in conjunction with town->flags. More...
 
enum  TownActions {
  TACT_NONE = 0x00 , TACT_ADVERTISE_SMALL = 0x01 , TACT_ADVERTISE_MEDIUM = 0x02 , TACT_ADVERTISE_LARGE = 0x04 ,
  TACT_ROAD_REBUILD = 0x08 , TACT_BUILD_STATUE = 0x10 , TACT_FUND_BUILDINGS = 0x20 , TACT_BUY_RIGHTS = 0x40 ,
  TACT_BRIBE = 0x80 , TACT_COUNT = 8 , TACT_ADVERTISE = TACT_ADVERTISE_SMALL | TACT_ADVERTISE_MEDIUM | TACT_ADVERTISE_LARGE , TACT_CONSTRUCTION = TACT_ROAD_REBUILD | TACT_BUILD_STATUE | TACT_FUND_BUILDINGS ,
  TACT_FUNDS = TACT_BUY_RIGHTS | TACT_BRIBE , TACT_ALL = TACT_ADVERTISE | TACT_CONSTRUCTION | TACT_FUNDS
}
 Town actions of a company. More...
 

Functions

uint32_t GetWorldPopulation ()
 Get the total population, the sum of all towns in the world. 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.
 
void ShowTownViewWindow (TownID town)
 
void ExpandTown (Town *t)
 
void RebuildTownKdtree ()
 
CommandCost CheckforTownRating (DoCommandFlag flags, Town *t, TownRatingCheckType type)
 Does the town authority allow the (destructive) action of the current company? More...
 
TileIndexDiff GetHouseNorthPart (HouseID &house)
 Determines if a given HouseID is part of a multitile house. More...
 
TownCalcClosestTownFromTile (TileIndex tile, uint threshold=UINT_MAX)
 Return the town closest to the given tile within threshold. More...
 
void ResetHouses ()
 
void ClearTownHouse (Town *t, TileIndex tile)
 Clear a town house. More...
 
void UpdateTownMaxPass (Town *t)
 Update the maximum amount of montly passengers and mail for a town, based on its population. More...
 
void UpdateTownRadius (Town *t)
 Update the cached town zone radii of a town, based on the number of houses. 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...
 
TownClosestTownFromTile (TileIndex tile, uint threshold)
 Return the town closest (in distance or ownership) to a given tile, within a given threshold. More...
 
void ChangeTownRating (Town *t, int add, int max, DoCommandFlag flags)
 Changes town rating of the current company. More...
 
HouseZonesBits GetTownRadiusGroup (const Town *t, TileIndex tile)
 Returns the bit corresponding to the town zone of the specified tile. More...
 
void SetTownRatingTestMode (bool mode)
 Switch the town rating to test-mode, to allow commands to be tested without affecting current ratings. More...
 
TownActions GetMaskOfTownActions (CompanyID cid, const Town *t)
 Get a list of available town authority actions. More...
 
bool GenerateTowns (TownLayout layout)
 Generate a number of towns with a given layout. More...
 
const CargoSpecFindFirstCargoWithTownAcceptanceEffect (TownAcceptanceEffect effect)
 Determines the first cargo with a certain town effect. More...
 
template<class T >
void MakeDefaultName (T *obj)
 Set the default name for a depot/waypoint. More...
 
uint16_t TownTicksToGameTicks (uint16_t ticks)
 
RoadType GetTownRoadType ()
 Get the road type that towns should build at this current moment. More...
 
bool CheckTownRoadTypes ()
 Check if towns are able to build road. More...
 
std::span< const DrawBuildingsTileStructGetTownDrawTileData ()
 

Variables

static const uint CUSTOM_TOWN_NUMBER_DIFFICULTY = 4
 value for custom town number in difficulty settings
 
static const uint CUSTOM_TOWN_MAX_NUMBER = 5000
 this is the maximum number of towns a user can specify in customisation
 
static const TownID INVALID_TOWN = 0xFFFF
 
static const uint TOWN_GROWTH_WINTER = 0xFFFFFFFE
 The town only needs this cargo in the winter (any amount)
 
static const uint TOWN_GROWTH_DESERT = 0xFFFFFFFF
 The town needs the cargo for growth when on desert (any amount)
 
static const uint16_t TOWN_GROWTH_RATE_NONE = 0xFFFF
 Special value for Town::growth_rate to disable town growth.
 
static const uint16_t MAX_TOWN_GROWTH_TICKS = 930
 Max amount of original town ticks that still fit into uint16_t, about equal to UINT16_MAX / TOWN_GROWTH_TICKS but slightly less to simplify calculations.
 
TownPool _town_pool
 
const uint8_t _town_action_costs [TACT_COUNT]
 Factor in the cost of each town action. More...
 

Detailed Description

Base of the town class.

Definition in file town.h.

Enumeration Type Documentation

◆ TownActions

Town actions of a company.

Enumerator
TACT_NONE 

Empty action set.

TACT_ADVERTISE_SMALL 

Small advertising campaign.

TACT_ADVERTISE_MEDIUM 

Medium advertising campaign.

TACT_ADVERTISE_LARGE 

Large advertising campaign.

TACT_ROAD_REBUILD 

Rebuild the roads.

TACT_BUILD_STATUE 

Build a statue.

TACT_FUND_BUILDINGS 

Fund new buildings.

TACT_BUY_RIGHTS 

Buy exclusive transport rights.

TACT_BRIBE 

Try to bribe the council.

TACT_COUNT 

Number of available town actions.

TACT_ADVERTISE 

All possible advertising actions.

TACT_CONSTRUCTION 

All possible construction actions.

TACT_FUNDS 

All possible funding actions.

TACT_ALL 

All possible actions.

Definition at line 212 of file town.h.

◆ TownFlags

enum TownFlags

This enum is used in conjunction with town->flags.

IT simply states what bit is used for. It is pretty unrealistic (IMHO) to only have one church/stadium per town, NO MATTER the population of it. And there are 5 more bits available on flags...

Enumerator
TOWN_IS_GROWING 

Conditions for town growth are met. Grow according to Town::growth_rate.

TOWN_HAS_CHURCH 

There can be only one church by town.

TOWN_HAS_STADIUM 

There can be only one stadium by town.

TOWN_CUSTOM_GROWTH 

Growth rate is controlled by GS.

Definition at line 195 of file town.h.

◆ TownRatingCheckType

Action types that a company must ask permission for to a town authority.

See also
CheckforTownRating
Enumerator
ROAD_REMOVE 

Removal of a road owned by the town.

TUNNELBRIDGE_REMOVE 

Removal of a tunnel or bridge owned by the towb.

TOWN_RATING_CHECK_TYPE_COUNT 

Number of town checking action types.

Definition at line 175 of file town.h.

Function Documentation

◆ CalcClosestTownFromTile()

Town* CalcClosestTownFromTile ( TileIndex  tile,
uint  threshold 
)

Return the town closest to the given tile within threshold.

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

Definition at line 3852 of file town_cmd.cpp.

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

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

◆ ChangeTownRating()

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

Changes town rating of the current company.

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

Definition at line 3949 of file town_cmd.cpp.

References _cheats, _current_company, _town_rating_test, _town_test_ratings, DC_NO_MODIFY_TOWN_RATING, GetRating(), Town::have_ratings, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_company_pool >::IsValidID(), Cheats::magic_bulldozer, Town::ratings, SetBit(), SetWindowDirty(), Cheat::value, and WC_TOWN_AUTHORITY.

◆ CheckforTownRating()

◆ CheckIfAuthorityAllowsNewStation()

CommandCost CheckIfAuthorityAllowsNewStation ( TileIndex  tile,
DoCommandFlag  flags 
)

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

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

Definition at line 3828 of file town_cmd.cpp.

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

◆ CheckTownRoadTypes()

bool CheckTownRoadTypes ( )

Check if towns are able to build road.

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

Definition at line 982 of file town_cmd.cpp.

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

◆ ClearTownHouse()

void ClearTownHouse ( Town t,
TileIndex  tile 
)

Clear a town house.

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

Definition at line 2949 of file town_cmd.cpp.

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

◆ ClosestTownFromTile()

Town* ClosestTownFromTile ( TileIndex  tile,
uint  threshold 
)

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

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

Definition at line 3870 of file town_cmd.cpp.

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

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

◆ FindFirstCargoWithTownAcceptanceEffect()

const CargoSpec* FindFirstCargoWithTownAcceptanceEffect ( TownAcceptanceEffect  effect)

Determines the first cargo with a certain town effect.

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

Definition at line 3026 of file town_cmd.cpp.

References CargoSpec::Iterate().

Referenced by CmdTownCargoGoal().

◆ GenerateTowns()

bool GenerateTowns ( TownLayout  layout)

Generate a number of towns with a given layout.

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

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

Definition at line 2386 of file town_cmd.cpp.

◆ GetHouseNorthPart()

TileIndexDiff GetHouseNorthPart ( HouseID house)

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

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

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

Definition at line 2924 of file town_cmd.cpp.

References HouseSpec::Get().

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

◆ GetMaskOfTownActions()

TownActions GetMaskOfTownActions ( CompanyID  cid,
const Town t 
)

Get a list of available town authority actions.

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

Definition at line 3579 of file town_cmd.cpp.

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

Referenced by TownAuthorityWindow::OnPaint().

◆ GetTownRadiusGroup()

HouseZonesBits GetTownRadiusGroup ( const Town t,
TileIndex  tile 
)

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

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

Definition at line 2447 of file town_cmd.cpp.

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

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

◆ GetTownRoadType()

RoadType GetTownRoadType ( )

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

They may have built a different type in the past.

Definition at line 926 of file town_cmd.cpp.

References ROADTYPE_ROAD.

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

◆ GetWorldPopulation()

uint32_t GetWorldPopulation ( )

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

Returns
The calculated population of the world

Definition at line 462 of file town_cmd.cpp.

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

◆ MakeDefaultName()

template<class T >
void MakeDefaultName ( T *  obj)

Set the default name for a depot/waypoint.

Template Parameters
TThe type/class to make a default name for
Parameters
objThe object/instance we want to find the name for

Definition at line 253 of file town.h.

Referenced by CmdRenameDepot().

◆ SetTownRatingTestMode()

void SetTownRatingTestMode ( bool  mode)

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

The function is safe to use in nested calls.

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

Definition at line 3911 of file town_cmd.cpp.

References _town_rating_test, and _town_test_ratings.

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

◆ UpdateTownMaxPass()

void UpdateTownMaxPass ( Town t)

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

Parameters
tThe town to update.

Definition at line 1966 of file town_cmd.cpp.

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

◆ UpdateTownRadius()

void UpdateTownRadius ( Town t)

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

Parameters
tThe town to update.

Definition at line 1919 of file town_cmd.cpp.

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

Referenced by DoCreateTown().

Variable Documentation

◆ _town_action_costs

const uint8_t _town_action_costs[TACT_COUNT]
extern

Factor in the cost of each town action.

See also
TownActions

Definition at line 3288 of file town_cmd.cpp.

Referenced by GetMaskOfTownActions().