OpenTTD GameScript API  20240328-master-gca53e134be
Public Types | Static Public Member Functions
GSTown Class Reference

Class that handles all town related functions. More...

Inheritance diagram for GSTown:

Public Types

enum  TownAction {
  TOWN_ACTION_ADVERTISE_SMALL,
  TOWN_ACTION_ADVERTISE_MEDIUM,
  TOWN_ACTION_ADVERTISE_LARGE,
  TOWN_ACTION_ROAD_REBUILD,
  TOWN_ACTION_BUILD_STATUE,
  TOWN_ACTION_FUND_BUILDINGS,
  TOWN_ACTION_BUY_RIGHTS,
  TOWN_ACTION_BRIBE
}
 Actions that one can perform on a town. More...
 
enum  TownRating {
  TOWN_RATING_NONE,
  TOWN_RATING_APPALLING,
  TOWN_RATING_VERY_POOR,
  TOWN_RATING_POOR,
  TOWN_RATING_MEDIOCRE,
  TOWN_RATING_GOOD,
  TOWN_RATING_VERY_GOOD,
  TOWN_RATING_EXCELLENT,
  TOWN_RATING_OUTSTANDING,
  TOWN_RATING_INVALID
}
 Different ratings one could have in a town. More...
 
enum  RoadLayout {
  ROAD_LAYOUT_ORIGINAL,
  ROAD_LAYOUT_BETTER_ROADS,
  ROAD_LAYOUT_2x2,
  ROAD_LAYOUT_3x3,
  ROAD_LAYOUT_RANDOM,
  ROAD_LAYOUT_INVALID
}
 Possible layouts for the roads in a town. More...
 
enum  TownSize {
  TOWN_SIZE_SMALL,
  TOWN_SIZE_MEDIUM,
  TOWN_SIZE_LARGE,
  TOWN_SIZE_INVALID
}
 Possible town construction sizes. More...
 
enum  TownGrowth {
  TOWN_GROWTH_NONE,
  TOWN_GROWTH_NORMAL
}
 Special values for SetGrowthRate. More...
 

Static Public Member Functions

static SQInteger GetTownCount ()
 Gets the number of towns. More...
 
static bool IsValidTown (TownID town_id)
 Checks whether the given town index is valid. More...
 
static std::optional< std::string > GetName (TownID town_id)
 Get the name of the town. More...
 
static bool SetName (TownID town_id, Text *name)
 Rename a town. More...
 
static bool SetText (TownID town_id, Text *text)
 Set the custom text of a town, shown in the GUI. More...
 
static SQInteger GetPopulation (TownID town_id)
 Gets the number of inhabitants in the town. More...
 
static SQInteger GetHouseCount (TownID town_id)
 Gets the number of houses in the town. More...
 
static TileIndex GetLocation (TownID town_id)
 Gets the location of the town. More...
 
static SQInteger GetLastMonthProduction (TownID town_id, CargoID cargo_id)
 Get the total last month's production of the given cargo at a town. More...
 
static SQInteger GetLastMonthSupplied (TownID town_id, CargoID cargo_id)
 Get the total amount of cargo supplied from a town last month. More...
 
static SQInteger GetLastMonthTransportedPercentage (TownID town_id, CargoID cargo_id)
 Get the percentage of transported production of the given cargo at a town. More...
 
static SQInteger GetLastMonthReceived (TownID town_id, GSCargo::TownEffect towneffect_id)
 Get the total amount of cargo effects received by a town last month. More...
 
static bool SetCargoGoal (TownID town_id, GSCargo::TownEffect towneffect_id, SQInteger goal)
 Set the goal of a cargo for this town. More...
 
static SQInteger GetCargoGoal (TownID town_id, GSCargo::TownEffect towneffect_id)
 Get the amount of cargo that needs to be delivered (per TownEffect) for a town to grow. More...
 
static bool SetGrowthRate (TownID town_id, SQInteger days_between_town_growth)
 Set the amount of days between town growth. More...
 
static SQInteger GetGrowthRate (TownID town_id)
 Get the amount of days between town growth. More...
 
static SQInteger GetDistanceManhattanToTile (TownID town_id, TileIndex tile)
 Get the manhattan distance from the tile to the GSTown::GetLocation() of the town. More...
 
static SQInteger GetDistanceSquareToTile (TownID town_id, TileIndex tile)
 Get the square distance from the tile to the GSTown::GetLocation() of the town. More...
 
static bool IsWithinTownInfluence (TownID town_id, TileIndex tile)
 Find out if this tile is within the rating influence of a town. More...
 
static bool HasStatue (TownID town_id)
 Find out if this town has a statue for the current company. More...
 
static bool IsCity (TownID town_id)
 Find out if the town is a city. More...
 
static SQInteger GetRoadReworkDuration (TownID town_id)
 Find out how long the town is undergoing road reconstructions. More...
 
static SQInteger GetFundBuildingsDuration (TownID town_id)
 Find out how long new buildings are still being funded in a town. More...
 
static GSCompany::CompanyID GetExclusiveRightsCompany (TownID town_id)
 Find out which company currently has the exclusive rights of this town. More...
 
static SQInteger GetExclusiveRightsDuration (TownID town_id)
 Find out how long the town is under influence of the exclusive rights. More...
 
static bool IsActionAvailable (TownID town_id, TownAction town_action)
 Find out if an action can currently be performed on the town. More...
 
static bool PerformTownAction (TownID town_id, TownAction town_action)
 Perform a town action on this town. More...
 
static bool ExpandTown (TownID town_id, SQInteger houses)
 Expand the town. More...
 
static bool FoundTown (TileIndex tile, TownSize size, bool city, RoadLayout layout, Text *name)
 Found a new town. More...
 
static TownRating GetRating (TownID town_id, GSCompany::CompanyID company_id)
 Get the rating of a company within a town. More...
 
static SQInteger GetDetailedRating (TownID town_id, GSCompany::CompanyID company_id)
 Get the accurate rating of a company within a town. More...
 
static bool ChangeRating (TownID town_id, GSCompany::CompanyID company_id, SQInteger delta)
 Change the rating of a company within a town. More...
 
static SQInteger GetAllowedNoise (TownID town_id)
 Get the maximum level of noise that still can be added by airports before the town start to refuse building a new airport. More...
 
static RoadLayout GetRoadLayout (TownID town_id)
 Get the road layout for a town. More...
 

Detailed Description

Class that handles all town related functions.

Member Enumeration Documentation

◆ RoadLayout

Possible layouts for the roads in a town.

Enumerator
ROAD_LAYOUT_ORIGINAL 

Original algorithm (min. 1 distance between roads).

ROAD_LAYOUT_BETTER_ROADS 

Extended original algorithm (min. 2 distance between roads).

ROAD_LAYOUT_2x2 

Geometric 2x2 grid algorithm.

ROAD_LAYOUT_3x3 

Geometric 3x3 grid algorithm.

ROAD_LAYOUT_RANDOM 

Random road layout.

ROAD_LAYOUT_INVALID 

The layout for invalid towns.

◆ TownAction

Actions that one can perform on a town.

Enumerator
TOWN_ACTION_ADVERTISE_SMALL 

The cargo ratings temporary gains 25% of rating (in absolute percentage, so 10% becomes 35%, with a max of 99%) for all stations within 10 tiles.

TOWN_ACTION_ADVERTISE_MEDIUM 

The cargo ratings temporary gains 44% of rating (in absolute percentage, so 10% becomes 54%, with a max of 99%) for all stations within 15 tiles.

TOWN_ACTION_ADVERTISE_LARGE 

The cargo ratings temporary gains 63% of rating (in absolute percentage, so 10% becomes 73%, with a max of 99%) for all stations within 20 tiles.

TOWN_ACTION_ROAD_REBUILD 

Rebuild the roads of this town for 6 months.

TOWN_ACTION_BUILD_STATUE 

Build a statue in this town.

TOWN_ACTION_FUND_BUILDINGS 

Fund the creation of extra buildings for 3 months.

TOWN_ACTION_BUY_RIGHTS 

Buy exclusive rights for this town for 12 months.

TOWN_ACTION_BRIBE 

Bribe the town in order to get a higher rating.

◆ TownGrowth

Special values for SetGrowthRate.

Enumerator
TOWN_GROWTH_NONE 

Town does not grow at all.

TOWN_GROWTH_NORMAL 

Use default town growth algorithm instead of custom growth rate.

◆ TownRating

Different ratings one could have in a town.

Enumerator
TOWN_RATING_NONE 

The company got no rating in the town.

TOWN_RATING_APPALLING 

The company got an appalling rating in the town .

TOWN_RATING_VERY_POOR 

The company got an very poor rating in the town.

TOWN_RATING_POOR 

The company got an poor rating in the town.

TOWN_RATING_MEDIOCRE 

The company got an mediocre rating in the town.

TOWN_RATING_GOOD 

The company got an good rating in the town.

TOWN_RATING_VERY_GOOD 

The company got an very good rating in the town.

TOWN_RATING_EXCELLENT 

The company got an excellent rating in the town.

TOWN_RATING_OUTSTANDING 

The company got an outstanding rating in the town.

TOWN_RATING_INVALID 

The town rating for invalid towns/companies.

◆ TownSize

Possible town construction sizes.

Enumerator
TOWN_SIZE_SMALL 

Small town.

TOWN_SIZE_MEDIUM 

Medium town.

TOWN_SIZE_LARGE 

Large town.

TOWN_SIZE_INVALID 

Invalid town size.

Member Function Documentation

◆ ChangeRating()

static bool GSTown::ChangeRating ( TownID  town_id,
GSCompany::CompanyID  company_id,
SQInteger  delta 
)
static

Change the rating of a company within a town.

Parameters
town_idThe town to change the rating in.
company_idThe company to change the rating for.
deltaHow much to change rating by (range -1000 to +1000).
Returns
True if the rating was changed.
Precondition
IsValidTown(town_id).
GSCompany.ResolveCompanyID(company) != GSCompany::COMPANY_INVALID.
GSCompanyMode::IsDeity().

◆ ExpandTown()

static bool GSTown::ExpandTown ( TownID  town_id,
SQInteger  houses 
)
static

Expand the town.

Parameters
town_idThe town to expand.
housesThe amount of houses to grow the town with. The value will be clamped to 0 .. MAX(uint32_t).
Precondition
IsValidTown(town_id).
houses > 0.
GSCompanyMode::IsDeity().
Returns
True if the action succeeded.

◆ FoundTown()

static bool GSTown::FoundTown ( TileIndex  tile,
TownSize  size,
bool  city,
RoadLayout  layout,
Text *  name 
)
static

Found a new town.

Parameters
tileThe location of the new town.
sizeThe town size of the new town.
cityTrue if the new town should be a city.
layoutThe town layout of the new town.
nameThe name of the new town. Pass null, or an empty string, to use a random town name.
Precondition
GSCompanyMode::IsDeity() || GSSettings.GetValue("economy.found_town") != 0.
GSCompanyMode::IsDeity() || size != TOWN_SIZE_LARGE.
size != TOWN_SIZE_INVALID.
layout != ROAD_LAYOUT_INVALID.
Returns
True if the action succeeded.
Note
Companies are restricted by the advanced setting that controls if funding towns is allowed or not. If custom road layout is forbidden and there is a company mode in scope (GSCompanyMode::IsValid()), the layout parameter will be ignored.

◆ GetAllowedNoise()

static SQInteger GSTown::GetAllowedNoise ( TownID  town_id)
static

Get the maximum level of noise that still can be added by airports before the town start to refuse building a new airport.

Parameters
town_idThe town to get the allowed noise from.
Returns
The noise that still can be added.

◆ GetCargoGoal()

static SQInteger GSTown::GetCargoGoal ( TownID  town_id,
GSCargo::TownEffect  towneffect_id 
)
static

Get the amount of cargo that needs to be delivered (per TownEffect) for a town to grow.

All goals need to be reached before a town will grow.

Parameters
town_idThe index of the town.
towneffect_idThe index of the towneffect.
Precondition
IsValidTown(town_id).
GSCargo::IsValidTownEffect(towneffect_id).
Returns
The goal of the cargo.
Note
Goals can change over time. For example with a changing snowline, or with a growing town.

◆ GetDetailedRating()

static SQInteger GSTown::GetDetailedRating ( TownID  town_id,
GSCompany::CompanyID  company_id 
)
static

Get the accurate rating of a company within a town.

Parameters
town_idThe town to get the rating for.
company_idThe company to get the rating for.
Precondition
IsValidTown(town_id).
GSCompany.ResolveCompanyID(company) != GSCompany::COMPANY_INVALID.
Returns
The rating as a number between -1000 (worst) and 1000 (best).

◆ GetDistanceManhattanToTile()

static SQInteger GSTown::GetDistanceManhattanToTile ( TownID  town_id,
TileIndex  tile 
)
static

Get the manhattan distance from the tile to the GSTown::GetLocation() of the town.

Parameters
town_idThe town to get the distance to.
tileThe tile to get the distance to.
Precondition
IsValidTown(town_id).
Returns
The distance between town and tile.

◆ GetDistanceSquareToTile()

static SQInteger GSTown::GetDistanceSquareToTile ( TownID  town_id,
TileIndex  tile 
)
static

Get the square distance from the tile to the GSTown::GetLocation() of the town.

Parameters
town_idThe town to get the distance to.
tileThe tile to get the distance to.
Precondition
IsValidTown(town_id).
Returns
The distance between town and tile.

◆ GetExclusiveRightsCompany()

static GSCompany::CompanyID GSTown::GetExclusiveRightsCompany ( TownID  town_id)
static

Find out which company currently has the exclusive rights of this town.

Parameters
town_idThe town to check.
Precondition
IsValidTown(town_id).
GSCompanyMode::IsValid().
Returns
The company that has the exclusive rights. The value GSCompany::COMPANY_INVALID means that there are currently no exclusive rights given out to anyone.

◆ GetExclusiveRightsDuration()

static SQInteger GSTown::GetExclusiveRightsDuration ( TownID  town_id)
static

Find out how long the town is under influence of the exclusive rights.

Parameters
town_idThe town to check.
Precondition
IsValidTown(town_id).
Returns
The number of months the exclusive rights hold. The value 0 means that there are currently no exclusive rights given out to anyone.

◆ GetFundBuildingsDuration()

static SQInteger GSTown::GetFundBuildingsDuration ( TownID  town_id)
static

Find out how long new buildings are still being funded in a town.

Parameters
town_idThe town to check.
Precondition
IsValidTown(town_id).
Returns
The number of months building construction is still funded. The value 0 means that there is currently no funding.

◆ GetGrowthRate()

static SQInteger GSTown::GetGrowthRate ( TownID  town_id)
static

Get the amount of days between town growth.

Parameters
town_idThe index of the town.
Precondition
IsValidTown(town_id).
Returns
Amount of days between town growth, or TOWN_GROWTH_NONE.
Note
This function does not indicate when it will grow next. It only tells you the time between growths.

◆ GetHouseCount()

static SQInteger GSTown::GetHouseCount ( TownID  town_id)
static

Gets the number of houses in the town.

Parameters
town_idThe town to get the number of houses of.
Precondition
IsValidTown(town_id).
Returns
The number of houses.

◆ GetLastMonthProduction()

static SQInteger GSTown::GetLastMonthProduction ( TownID  town_id,
CargoID  cargo_id 
)
static

Get the total last month's production of the given cargo at a town.

Parameters
town_idThe index of the town.
cargo_idThe index of the cargo.
Precondition
IsValidTown(town_id).
GSCargo::IsValidCargo(cargo_id).
Returns
The last month's production of the given cargo for this town.

◆ GetLastMonthReceived()

static SQInteger GSTown::GetLastMonthReceived ( TownID  town_id,
GSCargo::TownEffect  towneffect_id 
)
static

Get the total amount of cargo effects received by a town last month.

Parameters
town_idThe index of the town.
towneffect_idThe index of the cargo.
Precondition
IsValidTown(town_id).
GSCargo::IsValidTownEffect(cargo_id).
Returns
The amount of cargo received by this town last month for this cargo effect.

◆ GetLastMonthSupplied()

static SQInteger GSTown::GetLastMonthSupplied ( TownID  town_id,
CargoID  cargo_id 
)
static

Get the total amount of cargo supplied from a town last month.

Parameters
town_idThe index of the town.
cargo_idThe index of the cargo.
Precondition
IsValidTown(town_id).
GSCargo::IsValidCargo(cargo_id).
Returns
The amount of cargo supplied for transport from this town last month.

◆ GetLastMonthTransportedPercentage()

static SQInteger GSTown::GetLastMonthTransportedPercentage ( TownID  town_id,
CargoID  cargo_id 
)
static

Get the percentage of transported production of the given cargo at a town.

Parameters
town_idThe index of the town.
cargo_idThe index of the cargo.
Precondition
IsValidTown(town_id).
GSCargo::IsValidCargo(cargo_id).
Returns
The percentage of given cargo transported from this town last month.

◆ GetLocation()

static TileIndex GSTown::GetLocation ( TownID  town_id)
static

Gets the location of the town.

Parameters
town_idThe town to get the location of.
Precondition
IsValidTown(town_id).
Returns
The location of the town.

◆ GetName()

static std::optional<std::string> GSTown::GetName ( TownID  town_id)
static

Get the name of the town.

Parameters
town_idThe town to get the name of.
Precondition
IsValidTown(town_id).
Returns
The name of the town.

◆ GetPopulation()

static SQInteger GSTown::GetPopulation ( TownID  town_id)
static

Gets the number of inhabitants in the town.

Parameters
town_idThe town to get the population of.
Precondition
IsValidTown(town_id).
Returns
The number of inhabitants.

◆ GetRating()

static TownRating GSTown::GetRating ( TownID  town_id,
GSCompany::CompanyID  company_id 
)
static

Get the rating of a company within a town.

Parameters
town_idThe town to get the rating for.
company_idThe company to get the rating for.
Precondition
IsValidTown(town_id).
GSCompany.ResolveCompanyID(company) != GSCompany::COMPANY_INVALID.
Returns
The rating as shown to humans.

◆ GetRoadLayout()

static RoadLayout GSTown::GetRoadLayout ( TownID  town_id)
static

Get the road layout for a town.

Parameters
town_idThe town to get the road layout from.
Returns
The RoadLayout for the town.

◆ GetRoadReworkDuration()

static SQInteger GSTown::GetRoadReworkDuration ( TownID  town_id)
static

Find out how long the town is undergoing road reconstructions.

Parameters
town_idThe town to check.
Precondition
IsValidTown(town_id).
Returns
The number of months the road reworks are still going to take. The value 0 means that there are currently no road reworks.

◆ GetTownCount()

static SQInteger GSTown::GetTownCount ( )
static

Gets the number of towns.

Returns
The number of towns.

◆ HasStatue()

static bool GSTown::HasStatue ( TownID  town_id)
static

Find out if this town has a statue for the current company.

Parameters
town_idThe town to check.
Precondition
IsValidTown(town_id).
GSCompanyMode::IsValid().
Returns
True if the town has a statue.

◆ IsActionAvailable()

static bool GSTown::IsActionAvailable ( TownID  town_id,
TownAction  town_action 
)
static

Find out if an action can currently be performed on the town.

Parameters
town_idThe town to perform the action on.
town_actionThe action to perform on the town.
Precondition
IsValidTown(town_id).
GSCompanyMode::IsValid().
Returns
True if and only if the action can performed.

◆ IsCity()

static bool GSTown::IsCity ( TownID  town_id)
static

Find out if the town is a city.

Parameters
town_idThe town to check.
Precondition
IsValidTown(town_id).
Returns
True if the town is a city.

◆ IsValidTown()

static bool GSTown::IsValidTown ( TownID  town_id)
static

Checks whether the given town index is valid.

Parameters
town_idThe index to check.
Returns
True if and only if the town is valid.

◆ IsWithinTownInfluence()

static bool GSTown::IsWithinTownInfluence ( TownID  town_id,
TileIndex  tile 
)
static

Find out if this tile is within the rating influence of a town.

If a station sign would be on this tile, the servicing quality of the station would influence the rating of the town.

Parameters
town_idThe town to check.
tileThe tile to check.
Precondition
IsValidTown(town_id).
Returns
True if the tile is within the rating influence of the town.

◆ PerformTownAction()

static bool GSTown::PerformTownAction ( TownID  town_id,
TownAction  town_action 
)
static

Perform a town action on this town.

Parameters
town_idThe town to perform the action on.
town_actionThe action to perform on the town.
Precondition
IsValidTown(town_id).
IsActionAvailable(town_id, town_action).
GSCompanyMode::IsValid().
Returns
True if the action succeeded.

◆ SetCargoGoal()

static bool GSTown::SetCargoGoal ( TownID  town_id,
GSCargo::TownEffect  towneffect_id,
SQInteger  goal 
)
static

Set the goal of a cargo for this town.

Parameters
town_idThe index of the town.
towneffect_idThe index of the towneffect.
goalThe new goal. The value will be clamped to 0 .. MAX(uint32_t).
Precondition
IsValidTown(town_id).
GSCargo::IsValidTownEffect(towneffect_id).
GSCompanyMode::IsDeity().
Returns
True if the action succeeded.

◆ SetGrowthRate()

static bool GSTown::SetGrowthRate ( TownID  town_id,
SQInteger  days_between_town_growth 
)
static

Set the amount of days between town growth.

Parameters
town_idThe index of the town.
days_between_town_growthThe amount of days between town growth, TOWN_GROWTH_NONE or TOWN_GROWTH_NORMAL.
Precondition
IsValidTown(town_id).
days_between_town_growth <= 880 || days_between_town_growth == TOWN_GROWTH_NONE || days_between_town_growth == TOWN_GROWTH_NORMAL.
Returns
True if the action succeeded.
Note
Even when setting a growth rate, towns only grow when the conditions for growth (SetCargoCoal) are met, and the game settings (economy.town_growth_rate) allow town growth at all.
When changing the growth rate, the relative progress is preserved and scaled to the new rate.

◆ SetName()

static bool GSTown::SetName ( TownID  town_id,
Text *  name 
)
static

Rename a town.

Parameters
town_idThe town to rename
nameThe new name of the town. If null, or an empty string, is passed, the town name will be reset to the default name.
Precondition
IsValidTown(town_id).
GSCompanyMode::IsDeity().
Returns
True if the action succeeded.

◆ SetText()

static bool GSTown::SetText ( TownID  town_id,
Text *  text 
)
static

Set the custom text of a town, shown in the GUI.

Parameters
town_idThe town to set the custom text of.
textThe text to set it to (can be either a raw string, or a GSText object). If null, or an empty string, is passed, the text will be removed.
Precondition
IsValidTown(town_id).
GSCompanyMode::IsDeity().
Returns
True if the action succeeded.