# tile_map.h File Reference

Map writing/reading functions for tiles. More...

`#include "slope_type.h"`
`#include "map_func.h"`
`#include "core/bitmath_func.hpp"`
`#include "settings_type.h"`

Go to the source code of this file.

## Functions
static uint | TileHeight (TileIndex tile)
| Returns the height of a tile.
static void | SetTileHeight (TileIndex tile, uint height)
| Sets the height of a tile.
static uint | TilePixelHeight (TileIndex tile)
| Returns the height of a tile in pixels.
static TileType | GetTileType (TileIndex tile)
| Get the tiletype of a given tile.
static void | SetTileType (TileIndex tile, TileType type)
| Set the type of a tile.
static bool | IsTileType (TileIndex tile, TileType type)
| Checks if a tile is a give tiletype.
static bool | IsValidTile (TileIndex tile)
| Checks if a tile is valid.
static Owner | GetTileOwner (TileIndex tile)
| Returns the owner of a tile.
static void | SetTileOwner (TileIndex tile, Owner owner)
| Sets the owner of a tile.
static bool | IsTileOwner (TileIndex tile, Owner owner)
| Checks if a tile belongs to the given owner.
static void | SetTropicZone (TileIndex tile, TropicZone type)
| Set the tropic zone.
static TropicZone | GetTropicZone (TileIndex tile)
| Get the tropic zone.
Slope | GetTileSlope (TileIndex tile, uint *h)
| Return the slope of a given tile.
uint | GetTileZ (TileIndex tile)
| Get bottom height of the tile.
uint | GetTileMaxZ (TileIndex tile)
| Get top height of the tile.

## Detailed Description

Map writing/reading functions for tiles.

Definition in file tile_map.h.

## Function Documentation

uint GetTileMaxZ | ( | TileIndex | t | ) |

Get top height of the tile.

Parameters:

  | t | Tile to compute height of

Returns:
  Maximum height of the tile

Definition at line 82 of file tile_map.cpp.

References MapMaxX(), MapMaxY(), max(), TILE_HEIGHT, TileDiffXY(), TileHeight(), TileX(), and TileY().

Referenced by AutoslopeCheckForEntranceEdge(), BuildTownHouse(), CheckBuildHouseSameZ(), CmdBuildBridge(), DrawCatenary(), DrawCatenaryRailway(), DrawRoadBits(), DrawTramCatenary(), and AITile::GetMaxHeight().

static Owner GetTileOwner | ( | TileIndex | tile | ) | `[inline, static]`

Returns the owner of a tile.

This function returns the owner of a tile. This cannot used for tiles which type is one of MP_HOUSE, MP_VOID and MP_INDUSTRY as no company owned any of these buildings.

Parameters:

  | tile | The tile to check

Returns:
  The owner of the tile

Precondition:
  IsValidTile(tile)

  The type of the tile must not be MP_HOUSE and MP_INDUSTRY

Definition at line 139 of file tile_map.h.

References _m, IsTileType(), IsValidTile(), Tile::m1, MP_HOUSE, and MP_INDUSTRY.

Referenced by AIDepotList::AIDepotList(), CFollowTrackT< Ttr_type_, VehicleType, T90deg_turns_allowed_, Tmask_reserved_tracks >::CanEnterNewTile(), CheckTileOwnership(), CmdBuildBridge(), CmdBuildRailWaypoint(), CmdBuildRoad(), CmdInsertOrder(), CmdRemoveSingleRail(), CmdRemoveSingleSignal(), DisasterTick_Big_Ufo(), DisasterTick_Zeppeliner(), DrawTile_Road(), ExploreSegment(), FixOwnerOfRailTrack(), AITile::GetOwner(), GetSmallMapOwnerPixels(), GetTrainForReservation(), IsTileOwner(), IsValidTileForWaypoint(), MakeBuoy(), MoveWaypointsToBaseStations(), RemoveBuoy(), RemoveFromRailBaseStation(), RemoveRailStation(), and RemoveRoad().

Slope GetTileSlope | ( | TileIndex | tile,
|  | uint * | h |
| ) |  |  |

Return the slope of a given tile.

Parameters:

  | tile | Tile to compute slope of
  | h | If not `NULL`, pointer to storage of z height

Returns:
  Slope of the tile, except for the HALFTILE part

Definition at line 21 of file tile_map.cpp.

References _settings_game, GameSettings::construction, ConstructionSettings::freeform_edges, MapMaxX(), MapMaxY(), MapSize(), min(), SLOPE_E, SLOPE_FLAT, SLOPE_N, SLOPE_S, SLOPE_W, TILE_HEIGHT, TileDiffXY(), TileHeight(), TileX(), and TileY().

Referenced by BuildTownHouse(), CanBuildHouseHere(), CanPlantTreesOnTile(), CheckFlatLandBelow(), CmdBuildBridge(), CmdBuildBuoy(), CmdBuildCanal(), CmdBuildDock(), CmdBuildLock(), CmdBuildRoad(), CmdBuildRoadDepot(), CmdBuildShipDepot(), CmdBuildSingleRail(), CmdBuildTrainDepot(), CmdBuildTunnel(), CmdPlantTree(), CmdRemoveSingleRail(), DoBuildShiplift(), DoFloodTile(), DrawCatenaryRailway(), FindFurthestFromWater(), FloodHalftile(), GetBridgeHeight(), AITile::GetCornerHeight(), GetFloodingBehaviour(), GetFoundationSlope(), GetNearbyTileInformation(), AITunnel::GetOtherTunnelEnd(), AITile::GetSlope(), GetTownRoadGridElement(), GrowTown(), GrowTownWithBridge(), IsRoadAllowedHere(), IsValidTileForWaypoint(), IsWateredTile(), RemoveRoad(), SetWaterClassDependingOnSurroundings(), and TownCanBePlacedHere().

static TileType GetTileType | ( | TileIndex | tile | ) | `[inline, static]`

Get the tiletype of a given tile.

Parameters:

  | tile | The tile to get the TileType

Returns:
  The tiletype of the tile

Precondition:
  tile < MapSize()

Definition at line 74 of file tile_map.h.

References _m, GB(), and MapSize().

Referenced by AIVehicleList_Depot::AIVehicleList_Depot(), CanEnterTileOwnerCheck(), CanPlantTreesOnTile(), ChangeTileOwner(), CleanUpRoadBits(), CmdBuildBridge(), CmdBuildRoad(), CmdBuildSingleRail(), CmdConvertRail(), CmdLandscapeClear(), CmdPlantTree(), CmdRemoveSingleRail(), CmdTerraformLand(), DoDryUp(), DoFloodTile(), DrawCatenary(), ExploreSegment(), GenerateRockyArea(), GetAnyRoadBits(), GetFloodingBehaviour(), GetFoundationSlope(), GetNearbyTileInformation(), GetOrderTypeByTile(), GetRailTrackBitsUniversal(), GetReservedTrackbits(), GetSmallMapOwnerPixels(), GetTileRailType(), GetTileTrackStatus(), GrowTownWithExtraHouse(), AITile::IsBuildable(), IsTileType(), IsWateredTile(), NeighbourHasReachableRoad(), NPFMarkTile(), PlantTreesOnTile(), RemoveRoad(), SetWaterClassDependingOnSurroundings(), TryReserveRailTrack(), UnreserveRailTrack(), UpdateSignalsInBuffer(), and VehicleEnterTile().

uint GetTileZ | ( | TileIndex | tile | ) |

Get bottom height of the tile.

Parameters:

  | tile | Tile to compute height of

Returns:
  Minimum height of the tile

Definition at line 66 of file tile_map.cpp.

References MapMaxX(), MapMaxY(), min(), TILE_HEIGHT, TileDiffXY(), TileHeight(), TileX(), and TileY().

Referenced by DrawCatenaryOnTunnel(), AITile::GetMinHeight(), GetOtherTunnelEnd(), GetTerrainType(), IsTunnelInWayDir(), MarkTileDirtyByTile(), PlaceTreeAtSameHeight(), PlaceTreesRandomly(), and TileLoopClearAlps().

static TropicZone GetTropicZone | ( | TileIndex | tile | ) | `[inline, static]`

Get the tropic zone.

Parameters:

  | tile | the tile to get the zone of

Precondition:
  tile < MapSize()

Returns:
  the zone type

Definition at line 198 of file tile_map.h.

References _m, GB(), and MapSize().

Referenced by GetRandomTreeType(), GetTerrainType(), PlaceTreesRandomly(), and UpdateTownGrowRate().

static bool IsTileOwner | ( | TileIndex | tile,
|  | Owner | owner |
| ) |  |  | `[inline, static]`

Checks if a tile belongs to the given owner.

Parameters:

  | tile | The tile to check
  | owner | The owner to check agains

Returns:
  True if a tile belongs the the given owner

Definition at line 175 of file tile_map.h.

References GetTileOwner().

Referenced by CanEnterTileOwnerCheck(), CmdBuildAircraft(), CmdBuildBridge(), CmdBuildCanal(), CmdBuildRailVehicle(), CmdBuildRoadVeh(), CmdBuildShip(), CmdDepotMassAutoReplace(), CmdPurchaseLandArea(), and RoadFindPathToDest().

static bool IsTileType | ( | TileIndex | tile,
|  | TileType | type |
| ) |  |  | `[inline, static]`

Checks if a tile is a give tiletype.

This function checks if a tile got the given tiletype.

Parameters:

  | tile | The tile to check
  | type | The type to check agains

Returns:
  true If the type matches agains the type of the tile

Definition at line 111 of file tile_map.h.

References GetTileType().

Referenced by AddClearCounter(), AddClearDensity(), AddNearbyStation(), AddTreeCount(), AddTreeCounter(), AddTreeGrowth(), AdjustTileh(), AIDepotList::AIDepotList(), AITileList_IndustryAccepting::AITileList_IndustryAccepting(), AITileList_IndustryProducing::AITileList_IndustryProducing(), AITileList_StationType::AITileList_StationType(), CanBuildHouseHere(), CFollowTrackT< Ttr_type_, VehicleType, T90deg_turns_allowed_, Tmask_reserved_tracks >::CanEnterNewTile(), CanEnterTile(), CanEnterTileOwnerCheck(), CheckFlatLandBelow(), CheckNextTrainTile(), CheckRailSlope(), CheckSubsidised(), ClearPathReservation(), CmdBuildCanal(), CmdBuildDock(), CmdBuildLongRoad(), CmdBuildRailWaypoint(), CmdBuildRoad(), CmdBuildSingleRail(), CmdPlantTree(), CmdRemoveRoadStop(), CmdReverseTrainDirection(), CmdTerraformLand(), CmdTurnRoadVeh(), CMSAForest(), CMSAMine(), CMSATree(), CMSAWater(), DecHouseProcessingTime(), DeleteLastWagon(), DisasterTick_Aircraft(), DoClearTownHouseHelper(), DoFloodTile(), DrawCatenaryRailway(), ExtendTrainReservation(), FindFurthestFromWater(), FindIndustryToDeliver(), FindNearestEmptyLand(), FindNearIndustryName(), FindStationsAroundTiles(), FindStationsNearby(), FloodVehicles(), FollowReservation(), CFollowTrackT< Ttr_type_, VehicleType, T90deg_turns_allowed_, Tmask_reserved_tracks >::FollowTileExit(), FreeTrainTrackReservation(), GetAxisForNewWaypoint(), GetCleanHouseType(), GetCleanIndustryGfx(), GetClearCounter(), GetClearDensity(), GetClosestWaterDistance(), GetCompanyHQSection(), GetCompanyHQSize(), AIIndustry::GetDockLocation(), GetDockOffset(), GetFenceSE(), GetFenceSW(), AIAirport::GetHangarOfAirport(), AIIndustry::GetHeliportLocation(), GetHouseAge(), GetHouseAnimationFrame(), GetHouseBuildingStage(), GetHouseConstructionTick(), GetHouseProcessingTime(), GetHouseRandomBits(), GetHouseTriggers(), GetIndustryAnimationLoop(), GetIndustryAnimationState(), GetIndustryConstructionCounter(), GetIndustryConstructionStage(), GetIndustryGfx(), GetIndustryIDAtOffset(), GetIndustryIndex(), GetIndustryRandomBits(), GetIndustryTriggers(), GetIndustryType(), GetNearbyIndustryTileInformation(), GetNearbyTileInformation(), AIAirport::GetNumHangars(), GetOtherTunnelBridgeEnd(), AITile::GetOwner(), GetRailTileType(), GetRawClearGround(), AIRail::GetSignalType(), GetStationAnimationFrame(), GetStationAround(), GetStationGfx(), AIStation::GetStationID(), GetStationIndex(), GetStationTileRandomBits(), GetStationType(), GetTileOwner(), GetTownIndex(), GetTrainForReservation(), GetTreeCount(), GetTreeCounter(), GetTreeDensity(), GetTreeGround(), GetTreeGrowth(), GetTreeType(), GetTunnelBridgeDirection(), GetTunnelBridgeTransportType(), GetUnmovableType(), GrowTown(), GrowTownAtRoad(), GrowTownInTile(), HasOnewaySignalBlockingTrackdir(), HasPbsSignalOnTrackdir(), HasStationTileRail(), AITile::HasTreeOnTile(), HasTunnelBridgeReservation(), HasTunnelBridgeSnowOrDesert(), HouseGetVariable(), IncHouseConstructionTick(), IncrementHouseAge(), IndustryGetVariable(), AIOrder::InsertOrder(), IsAirportTile(), AIAirport::IsAirportTile(), IsBridge(), IsBridgeTile(), IsBuoyTile(), AIMarine::IsBuoyTile(), AIMarine::IsCanalTile(), AITile::IsCoastTile(), IsCompanyHQ(), AITile::IsDesertTile(), IsDockTile(), AIMarine::IsDockTile(), RoadStop::IsDriveThroughRoadStopContinuation(), AITile::IsFarmTile(), IsHangar(), IsHangarTile(), AIAirport::IsHangarTile(), IsHouseCompleted(), IsIndustryCompleted(), IsIndustryTileOnWater(), AIMarine::IsLockTile(), IsOwnedLand(), IsOwnedLandTile(), IsPlainRailTile(), IsPossibleCrossing(), IsRailDepotTile(), IsRailStationTile(), AIRail::IsRailTile(), IsRailWaypointTile(), AIRoad::IsRoadDepotTile(), IsRoadStop(), IsRoadStopTile(), AIRoad::IsRoadTile(), AITile::IsRockTile(), AITile::IsRoughTile(), IsSafeWaitingPosition(), IsSnowTile(), AITile::IsSnowTile(), AITile::IsStationTile(), IsStatue(), IsStatueTile(), IsTransmitterTile(), IsTunnel(), IsTunnelTile(), IsValidTile(), IsValidTileForWaypoint(), IsWaitingPositionFree(), AIMarine::IsWaterDepotTile(), IsWateredTile(), AITile::IsWaterTile(), LoadUnloadVehicle(), MakeHouseTile(), MakeSingleHouseBigger(), MarkTileDirtyIfCanalOrRiver(), MayHaveBridgeAbove(), MoveWaypointsToBaseStations(), ProcessOrders(), RemoveRoad(), AIRoad::RemoveRoadDepot(), AIRoad::RemoveRoadStation(), ResetHouseAge(), ResetIndustryConstructionStage(), RoadFindPathToDest(), StationRect::ScanForStationTiles(), SearchLumberMillTrees(), SearchNearbyHouseClass(), SearchNearbyHouseGRFID(), SearchNearbyHouseID(), SetClearCounter(), SetClearDensity(), SetClearGroundDensity(), SetCompanyHQSection(), SetCompanyHQSize(), SetDefaultRailGui(), SetFenceSE(), SetFenceSW(), SetHouseAnimationFrame(), SetHouseCompleted(), SetHouseProcessingTime(), SetHouseRandomBits(), SetHouseTriggers(), SetHouseType(), SetIndustryAnimationLoop(), SetIndustryAnimationState(), SetIndustryCompleted(), SetIndustryConstructionCounter(), SetIndustryConstructionStage(), SetIndustryGfx(), SetIndustryRandomBits(), SetIndustryTriggers(), SetStationAnimationFrame(), SetStationGfx(), SetStationTileRandomBits(), SetTileOwner(), SetTownIndex(), SetTreeCounter(), SetTreeGroundDensity(), SetTreeGrowth(), SetTunnelBridgeReservation(), SetTunnelBridgeSnowOrDesert(), TileLoop_Water(), TownCanBePlacedHere(), TrainCanLeaveTile(), UpdateHousesAndTowns(), and UpdateNearestTownForRoadTiles().

static bool IsValidTile | ( | TileIndex | tile | ) | `[inline, static]`

Checks if a tile is valid.

Parameters:

  | tile | The tile to check

Returns:
  True if the tile is on the map and not one of MP_VOID.

Definition at line 122 of file tile_map.h.

References IsTileType(), MapSize(), and MP_VOID.

Referenced by AIRoad::_BuildRoadInternal(), AIRoad::_BuildRoadStationInternal(), AITileList::AddRectangle(), AITileList::AddTile(), AITileList_IndustryAccepting::AITileList_IndustryAccepting(), AITileList_IndustryProducing::AITileList_IndustryProducing(), AIRoad::AreRoadTilesConnected(), AIMarine::AreWaterTilesConnected(), AIAirport::BuildAirport(), AIBridge::BuildBridge(), AIMarine::BuildBuoy(), AIMarine::BuildCanal(), AICompany::BuildCompanyHQ(), AIMarine::BuildDock(), AIMarine::BuildLock(), AIRail::BuildNewGRFRailStation(), AIRail::BuildRail(), AIRail::BuildRailDepot(), AIRail::BuildRailStation(), AIRail::BuildRailTrack(), AIRail::BuildRailWaypoint(), AIRoad::BuildRoadDepot(), AISign::BuildSign(), AITunnel::BuildTunnel(), AIMarine::BuildWaterDepot(), AIRoad::CanBuildConnectedRoadPartsHere(), CleanUpRoadBits(), CmdBuildTunnel(), AIRail::ConvertRailType(), AITile::DemolishTile(), Disaster_CoalMine_Init(), DisasterTick_Big_Ufo(), DisasterTick_Submarine(), DisasterTick_Zeppeliner(), DoCommand(), DoCommandPInternal(), DrawTileSelectionRect(), AITile::GetCargoAcceptance(), AITile::GetCargoProduction(), AITile::GetClosestTown(), AITile::GetCornerHeight(), AIAirport::GetHangarOfAirport(), AITile::GetMaxHeight(), AITile::GetMinHeight(), AIAirport::GetNearestTown(), AIRoad::GetNeighbourRoadCount(), AIAirport::GetNoiseLevelIncrease(), AIAirport::GetNumHangars(), GetOrderTypeByTile(), AIBridge::GetOtherBridgeEnd(), AITunnel::GetOtherTunnelEnd(), AITile::GetOwner(), AITile::GetSlope(), AIStation::GetStationID(), GetTileOwner(), GrowTownInTile(), AITile::HasTransportType(), AITile::HasTreeOnTile(), AIAirport::IsAirportTile(), AIBridge::IsBridgeTile(), AITile::IsBuildable(), AIMarine::IsBuoyTile(), AIMarine::IsCanalTile(), AITile::IsCoastTile(), AITile::IsDesertTile(), AIMarine::IsDockTile(), AIRoad::IsDriveThroughRoadStationTile(), AITile::IsFarmTile(), AIAirport::IsHangarTile(), AIRail::IsLevelCrossingTile(), AIMarine::IsLockTile(), IsNeighborRoadTile(), AIRail::IsRailDepotTile(), AIRail::IsRailStationTile(), AIRail::IsRailTile(), AIRail::IsRailWaypointTile(), AIRoad::IsRoadDepotTile(), AIRoad::IsRoadStationTile(), AIRoad::IsRoadTile(), AITile::IsRockTile(), AITile::IsRoughTile(), AITile::IsSnowTile(), AITile::IsStationTile(), IsTunnelInWayDir(), AITunnel::IsTunnelTile(), AIMap::IsValidTile(), AIMarine::IsWaterDepotTile(), AITile::IsWaterTile(), NPFHash(), AITile::PlantTree(), AITile::PlantTreeRectangle(), AIAirport::RemoveAirport(), AIMarine::RemoveBuoy(), AIMarine::RemoveCanal(), AIMarine::RemoveDock(), AIMarine::RemoveLock(), AIRail::RemoveRail(), AIRail::RemoveRailStationTileRectangle(), AIRail::RemoveRailTrack(), AIRail::RemoveRailWaypointTileRectangle(), AITileList::RemoveRectangle(), AIRoad::RemoveRoad(), AIRoad::RemoveRoadDepot(), AIRoad::RemoveRoadFull(), AIRoad::RemoveRoadStation(), AITileList::RemoveTile(), AIMarine::RemoveWaterDepot(), and SetTileOwner().

static void SetTileHeight | ( | TileIndex | tile,
|  | uint | height |
| ) |  |  | `[inline, static]`

Sets the height of a tile.

This function sets the height of the northern corner of a tile.

Parameters:

  | tile | The tile to change the height
  | height | The new height value of the tile

Precondition:
  tile < MapSize()

  heigth <= MAX_TILE_HEIGHT

Definition at line 47 of file tile_map.h.

References _m, MapSize(), MAX_TILE_HEIGHT, and SB().

Referenced by CmdTerraformLand(), FixSlopes(), FlatEmptyWorld(), GrayscaleToMapHeights(), MakeVoid(), and TgenSetTileHeight().

static void SetTileOwner | ( | TileIndex | tile,
|  | Owner | owner |
| ) |  |  | `[inline, static]`

Sets the owner of a tile.

This function sets the owner status of a tile. Note that you cannot set a owner for tiles of type MP_HOUSE, MP_VOID and MP_INDUSTRY.

Parameters:

  | tile | The tile to change the owner status.
  | owner | The new owner.

Precondition:
  IsValidTile(tile)

  The type of the tile must not be MP_HOUSE and MP_INDUSTRY

Definition at line 159 of file tile_map.h.

References _m, IsTileType(), IsValidTile(), Tile::m1, MP_HOUSE, and MP_INDUSTRY.

Referenced by FixOwnerOfRailTrack(), MakeBridgeRamp(), MakeClear(), MakeField(), MakeRailTunnel(), MakeRoadTunnel(), MakeStation(), MakeTree(), MakeUnmovable(), MakeWater(), and RemoveRoad().

static void SetTileType | ( | TileIndex | tile,
|  | TileType | type |
| ) |  |  | `[inline, static]`

Set the type of a tile.

This functions sets the type of a tile. If the type MP_VOID is selected the tile must be at the south-west or south-east edges of the map and vice versa.

Parameters:

  | tile | The tile to save the new type
  | type | The type to save

Precondition:
  tile < MapSize()

  type MP_VOID <=> tile is on the south-east or south-west edge.

Definition at line 92 of file tile_map.h.

References _m, _settings_game, GameSettings::construction, ConstructionSettings::freeform_edges, MapMaxX(), MapMaxY(), MapSize(), MP_VOID, SB(), TileX(), and TileY().

Referenced by MakeBridgeRamp(), MakeClear(), MakeField(), MakeHouseTile(), MakeIndustry(), MakeRailTunnel(), MakeRoadTunnel(), MakeStation(), MakeTree(), MakeUnmovable(), MakeVoid(), and MakeWater().

static void SetTropicZone | ( | TileIndex | tile,
|  | TropicZone | type |
| ) |  |  | `[inline, static]`

Set the tropic zone.

Parameters:

  | tile | the tile to set the zone of
  | type | the new type

Precondition:
  tile < MapSize()

Definition at line 186 of file tile_map.h.

References _m, MapSize(), and SB().

Referenced by CmdPlantTree(), and GenerateDesertArea().

static uint TileHeight | ( | TileIndex | tile | ) | `[inline, static]`

Returns the height of a tile.

This function returns the height of the northern corner of a tile. This is saved in the global map-array. It does not take affect by any slope-data of the tile.

Parameters:

  | tile | The tile to get the height from

Returns:
  the height of the tile

Precondition:
  tile < MapSize()

Definition at line 31 of file tile_map.h.

References _m, GB(), and MapSize().

Referenced by CalcHeightdiff(), CheckIfCanLevelIndustryPlatform(), CmdBuildCanal(), CmdLevelLand(), CmdTerraformLand(), CommonRaiseLowerBigLand(), FixSlopes(), GetSmallMapContoursPixels(), GetSmallMapIndustriesPixels(), GetTileMaxZ(), GetTileSlope(), GetTileZ(), TerraformGetHeightOfTile(), and TilePixelHeight().

static uint TilePixelHeight | ( | TileIndex | tile | ) | `[inline, static]`

Returns the height of a tile in pixels.

This function returns the height of the northern corner of a tile in pixels.

Parameters:

  | tile | The tile to get the height

Returns:
  The height of the tile in pixel

Definition at line 62 of file tile_map.h.

References TILE_HEIGHT, and TileHeight().

Referenced by UpdateTownGrowRate().