OpenTTD
Data Structures | Macros | Typedefs | Enumerations | Functions | Variables
town.h File Reference

Base of the town class. More...

#include "viewport_type.h"
#include "town_map.h"
#include "subsidy_type.h"
#include "newgrf_storage.h"
#include "cargotype.h"
#include "tilematrix_type.hpp"
#include <list>

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

Macros

#define FOR_ALL_TOWNS_FROM(var, start)   FOR_ALL_ITEMS_FROM(Town, town_index, var, start)
 
#define FOR_ALL_TOWNS(var)   FOR_ALL_TOWNS_FROM(var, 0)
 

Typedefs

typedef TileMatrix< uint32, 4 > AcceptanceMatrix
 
typedef Pool< Town, TownID, 64, 64000 > TownPool
 

Enumerations

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  TownFlags { TOWN_IS_GROWING = 0, TOWN_HAS_CHURCH = 1, TOWN_HAS_STADIUM = 2 }
 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 GetWorldPopulation ()
 Determines the world population Basically, count population of all towns, one by one. More...
 
void UpdateAllTownVirtCoords ()
 Update the virtual coords needed to draw the town sign for all towns. More...
 
void ShowTownViewWindow (TownID town)
 
void ExpandTown (Town *t)
 
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)
 
void UpdateTownMaxPass (Town *t)
 
void UpdateTownRadius (Town *t)
 
void UpdateTownCargoes (Town *t)
 Update cargo acceptance for the complete town. More...
 
void UpdateTownCargoTotal (Town *t)
 Update the total cargo acceptance of the whole town. More...
 
void UpdateTownCargoBitmap ()
 Updates the bitmap of all cargoes accepted by 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...
 
uint GetMaskOfTownActions (int *nump, CompanyID cid, const Town *t)
 Get a list of available actions to do at a town. More...
 
bool GenerateTowns (TownLayout layout)
 This function will generate a certain amount of towns, with a certain layout It can be called from the scenario editor (i.e. More...
 
const CargoSpecFindFirstCargoWithTownEffect (TownEffect 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...
 

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 uint 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 TOWN_GROW_RATE_CUSTOM = 0x8000
 If this mask is applied to Town::growth_rate, the grow_counter will not be calculated by the system (but assumed to be set by scripts)
 
static const uint16 TOWN_GROW_RATE_CUSTOM_NONE = 0xFFFF
 Special value for Town::growth_rate to disable town growth.
 
TownPool _town_pool
 
const byte _town_action_costs [TACT_COUNT]
 Factor in the cost of each town action. More...
 
TownID _new_town_id
 
uint32 _town_cargoes_accepted
 Bitmap of all cargoes accepted by houses.
 

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

Definition at line 164 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 151 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 NULL if there is no such town.
Note
This function only uses distance, the ClosestTownFromTile function also takes town ownership into account.

Definition at line 3214 of file town_cmd.cpp.

Referenced by 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 3318 of file town_cmd.cpp.

References _cheats, _current_company, _town_rating_test, 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, max(), Town::ratings, SetBit(), SetWindowDirty(), Cheat::value, and WC_TOWN_AUTHORITY.

◆ CheckforTownRating()

CommandCost CheckforTownRating ( DoCommandFlag  flags,
Town t,
TownRatingCheckType  type 
)

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

References _current_company, _settings_game, ClosestTownFromTile(), DC_NO_TEST_TOWN_RATING, EconomySettings::dist_local_authority, GameSettings::economy, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_company_pool >::IsValidID(), and Town::ratings.

Referenced by CmdBuildRailStation().

◆ 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 NULL if there is no such town.
Note
If you only care about distance, you can use the CalcClosestTownFromTile function.

Definition at line 3239 of file town_cmd.cpp.

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

Referenced by BuildStationPart(), CheckIfAuthorityAllowsNewStation(), FindTownForIndustry(), GenerateCompanyName(), StationResolverObject::GetTown(), ObjectResolverObject::GetTown(), IndustryTileScopeResolver::GetVariable(), ObjectScopeResolver::GetVariable(), and LandInfoWindow::OnInit().

◆ FindFirstCargoWithTownEffect()

const CargoSpec* FindFirstCargoWithTownEffect ( TownEffect  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 2510 of file town_cmd.cpp.

Referenced by CmdTownCargoGoal().

◆ GenerateTowns()

bool GenerateTowns ( TownLayout  layout)

This function will generate a certain amount of towns, with a certain layout It can be called from the scenario editor (i.e.

: generate Random Towns) as well as from world creation.

Parameters
layoutwhich towns will be set to, when created
Returns
true if towns have been successfully created

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

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

◆ GetMaskOfTownActions()

uint GetMaskOfTownActions ( int *  nump,
CompanyID  cid,
const Town t 
)

Get a list of available actions to do at a town.

Parameters
numpif not NULL add put the number of available actions in it
cidthe company that is querying the town
tthe town that is queried
Returns
bitmasked value of enabled actions

Definition at line 2989 of file town_cmd.cpp.

References _settings_game, EconomySettings::bribe, COMPANY_SPECTATOR, GameSettings::economy, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_company_pool >::Get(), 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 1998 of file town_cmd.cpp.

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

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

◆ GetWorldPopulation()

uint32 GetWorldPopulation ( )

Determines the world population Basically, count population of all towns, one by one.

Returns
uint32 the calculated population of the world

Definition at line 415 of file town_cmd.cpp.

Referenced by Town::MaxTownNoise(), and TownDirectoryWindow::SetStringParameters().

◆ 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 229 of file town.h.

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

References SmallVector< SmallPair< T, U >, S >::Clear().

◆ UpdateAllTownVirtCoords()

void UpdateAllTownVirtCoords ( )

Update the virtual coords needed to draw the town sign for all towns.

Definition at line 387 of file town_cmd.cpp.

Referenced by Town::MaxTownNoise(), and UpdateAllVirtCoords().

◆ UpdateTownCargoBitmap()

void UpdateTownCargoBitmap ( )

Updates the bitmap of all cargoes accepted by houses.

Definition at line 768 of file town_cmd.cpp.

References _town_cargoes_accepted.

◆ UpdateTownCargoes()

void UpdateTownCargoes ( Town t)

Update cargo acceptance for the complete town.

Parameters
tThe town to update.

Definition at line 749 of file town_cmd.cpp.

References Town::cargo_accepted, Town::cargo_produced, TileMatrix< T, N >::GetArea(), INVALID_TILE, OrthogonalTileArea::tile, TILE_AREA_LOOP, TileX(), TileY(), UpdateTownCargoes(), and UpdateTownCargoTotal().

◆ UpdateTownCargoTotal()

void UpdateTownCargoTotal ( Town t)

Update the total cargo acceptance of the whole town.

Parameters
tThe town to update.

Definition at line 701 of file town_cmd.cpp.

References Town::cargo_accepted, Town::cargo_accepted_total, TileMatrix< T, N >::GetArea(), TILE_AREA_LOOP, TileX(), and TileY().

Referenced by UpdateTownCargoes().

Variable Documentation

◆ _town_action_costs

const byte _town_action_costs[TACT_COUNT]

Factor in the cost of each town action.

See also
TownActions

Definition at line 2750 of file town_cmd.cpp.