OpenTTD Source 20241224-master-gee860a5c8e
industrytype.h File Reference

Industry type specs. More...

#include "map_type.h"
#include "slope_type.h"
#include "industry_type.h"
#include "landscape_type.h"
#include "cargo_type.h"
#include "newgrf_animation_type.h"
#include "newgrf_commons.h"

Go to the source code of this file.

Data Structures

struct  IndustryTileLayoutTile
 Definition of one tile in an industry tile layout. More...
 
struct  IndustrySpec
 Defines the data structure for constructing industry. More...
 
struct  IndustryTileSpec
 Defines the data structure of each individual tile of an industry. More...
 

Typedefs

using IndustryTileLayout = std::vector< IndustryTileLayoutTile >
 A complete tile layout for an industry is a list of tiles.
 

Enumerations

enum  IndustryLifeType { INDUSTRYLIFE_BLACK_HOLE = 0 , INDUSTRYLIFE_EXTRACTIVE = 1 << 0 , INDUSTRYLIFE_ORGANIC = 1 << 1 , INDUSTRYLIFE_PROCESSING = 1 << 2 }
 Available types of industry lifetimes. More...
 
enum  CheckProc {
  CHECK_NOTHING , CHECK_FOREST , CHECK_REFINERY , CHECK_FARM ,
  CHECK_PLANTATION , CHECK_WATER , CHECK_LUMBERMILL , CHECK_BUBBLEGEN ,
  CHECK_OIL_RIG , CHECK_END
}
 Available procedures to check whether an industry may build at a given location. More...
 
enum  IndustryConstructionType { ICT_UNKNOWN , ICT_NORMAL_GAMEPLAY , ICT_MAP_GENERATION , ICT_SCENARIO_EDITOR }
 How was the industry created. More...
 
enum  IndustryBehaviour {
  INDUSTRYBEH_NONE = 0 , INDUSTRYBEH_PLANT_FIELDS = 1 << 0 , INDUSTRYBEH_CUT_TREES = 1 << 1 , INDUSTRYBEH_BUILT_ONWATER = 1 << 2 ,
  INDUSTRYBEH_TOWN1200_MORE = 1 << 3 , INDUSTRYBEH_ONLY_INTOWN = 1 << 4 , INDUSTRYBEH_ONLY_NEARTOWN = 1 << 5 , INDUSTRYBEH_PLANT_ON_BUILT = 1 << 6 ,
  INDUSTRYBEH_DONT_INCR_PROD = 1 << 7 , INDUSTRYBEH_BEFORE_1950 = 1 << 8 , INDUSTRYBEH_AFTER_1960 = 1 << 9 , INDUSTRYBEH_AI_AIRSHIP_ROUTES = 1 << 10 ,
  INDUSTRYBEH_AIRPLANE_ATTACKS = 1 << 11 , INDUSTRYBEH_CHOPPER_ATTACKS = 1 << 12 , INDUSTRYBEH_CAN_SUBSIDENCE = 1 << 13 , INDUSTRYBEH_PROD_MULTI_HNDLING = 1 << 14 ,
  INDUSTRYBEH_PRODCALLBACK_RANDOM = 1 << 15 , INDUSTRYBEH_NOBUILT_MAPCREATION = 1 << 16 , INDUSTRYBEH_CANCLOSE_LASTINSTANCE = 1 << 17 , INDUSTRYBEH_CARGOTYPES_UNLIMITED = 1 << 18 ,
  INDUSTRYBEH_NO_PAX_PROD_CLAMP = 1 << 19
}
 Various industry behaviours mostly to represent original TTD specialities. More...
 
enum  IndustryTileSpecialFlags { INDTILE_SPECIAL_NONE = 0 , INDTILE_SPECIAL_NEXTFRAME_RANDOMBITS = 1 << 0 , INDTILE_SPECIAL_ACCEPTS_ALL_CARGO = 1 << 1 }
 Flags for miscellaneous industry tile specialities. More...
 

Functions

const IndustrySpecGetIndustrySpec (IndustryType thistype)
 Array of industries data.
 
const IndustryTileSpecGetIndustryTileSpec (IndustryGfx gfx)
 Array of industry tiles data.
 
void ResetIndustries ()
 This function initialize the spec arrays of both industry and industry tiles.
 
void SortIndustryTypes ()
 Initialize the list of sorted industry types.
 
IndustryGfx GetTranslatedIndustryTileID (IndustryGfx gfx)
 Do industry gfx ID translation for NewGRFs.
 

Variables

IndustrySpec _industry_specs [NUM_INDUSTRYTYPES]
 
IndustryTileSpec _industry_tile_specs [NUM_INDUSTRYTILES]
 
std::array< IndustryType, NUM_INDUSTRYTYPES_sorted_industry_types
 Industry types sorted by name.
 
static const uint8_t IT_INVALID = 255
 

Detailed Description

Industry type specs.

Definition in file industrytype.h.

Typedef Documentation

◆ IndustryTileLayout

A complete tile layout for an industry is a list of tiles.

Definition at line 96 of file industrytype.h.

Enumeration Type Documentation

◆ CheckProc

enum CheckProc

Available procedures to check whether an industry may build at a given location.

See also
CheckNewIndustryProc, _check_new_industry_procs[]
Enumerator
CHECK_NOTHING 

Always succeeds.

CHECK_FOREST 

Industry should be build above snow-line in arctic climate.

CHECK_REFINERY 

Industry should be positioned near edge of the map.

CHECK_FARM 

Industry should be below snow-line in arctic.

CHECK_PLANTATION 

Industry should NOT be in the desert.

CHECK_WATER 

Industry should be in the desert.

CHECK_LUMBERMILL 

Industry should be in the rain forest.

CHECK_BUBBLEGEN 

Industry should be in low land.

CHECK_OIL_RIG 

Industries at sea should be positioned near edge of the map.

CHECK_END 

End marker of the industry check procedures.

Definition at line 33 of file industrytype.h.

◆ IndustryBehaviour

Various industry behaviours mostly to represent original TTD specialities.

Enumerator
INDUSTRYBEH_PLANT_FIELDS 

periodically plants fields around itself (temp and arctic farms)

INDUSTRYBEH_CUT_TREES 

cuts trees and produce first output cargo from them (lumber mill)

INDUSTRYBEH_BUILT_ONWATER 

is built on water (oil rig)

INDUSTRYBEH_TOWN1200_MORE 

can only be built in towns larger than 1200 inhabitants (temperate bank)

INDUSTRYBEH_ONLY_INTOWN 

can only be built in towns (arctic/tropic banks, water tower)

INDUSTRYBEH_ONLY_NEARTOWN 

is always built near towns (toy shop)

INDUSTRYBEH_PLANT_ON_BUILT 

Fields are planted around when built (all farms)

INDUSTRYBEH_DONT_INCR_PROD 

do not increase production (oil wells) in the temperate climate

INDUSTRYBEH_BEFORE_1950 

can only be built before 1950 (oil wells)

INDUSTRYBEH_AFTER_1960 

can only be built after 1960 (oil rigs)

INDUSTRYBEH_AI_AIRSHIP_ROUTES 

ai will attempt to establish air/ship routes to this industry (oil rig)

INDUSTRYBEH_AIRPLANE_ATTACKS 

can be exploded by a military airplane (oil refinery)

INDUSTRYBEH_CHOPPER_ATTACKS 

can be exploded by a military helicopter (factory)

INDUSTRYBEH_CAN_SUBSIDENCE 

can cause a subsidence (coal mine, shaft that collapses)

INDUSTRYBEH_PROD_MULTI_HNDLING 

Automatic production multiplier handling.

INDUSTRYBEH_PRODCALLBACK_RANDOM 

Production callback needs random bits in var 10.

INDUSTRYBEH_NOBUILT_MAPCREATION 

Do not force one instance of this type to appear on map generation.

INDUSTRYBEH_CANCLOSE_LASTINSTANCE 

Allow closing down the last instance of this type.

INDUSTRYBEH_CARGOTYPES_UNLIMITED 

Allow produced/accepted cargoes callbacks to supply more than 2 and 3 types.

INDUSTRYBEH_NO_PAX_PROD_CLAMP 

Do not clamp production of passengers. (smooth economy only)

Definition at line 55 of file industrytype.h.

◆ IndustryConstructionType

How was the industry created.

Enumerator
ICT_UNKNOWN 

in previous game version or without newindustries activated

ICT_NORMAL_GAMEPLAY 

either by user or random creation process

ICT_MAP_GENERATION 

during random map creation

ICT_SCENARIO_EDITOR 

while editing a scenario

Definition at line 47 of file industrytype.h.

◆ IndustryLifeType

Available types of industry lifetimes.

Enumerator
INDUSTRYLIFE_BLACK_HOLE 

Like power plants and banks.

INDUSTRYLIFE_EXTRACTIVE 

Like mines.

INDUSTRYLIFE_ORGANIC 

Like forests.

INDUSTRYLIFE_PROCESSING 

Like factories.

Definition at line 22 of file industrytype.h.

◆ IndustryTileSpecialFlags

Flags for miscellaneous industry tile specialities.

Enumerator
INDTILE_SPECIAL_NEXTFRAME_RANDOMBITS 

Callback 0x26 needs random bits.

INDTILE_SPECIAL_ACCEPTS_ALL_CARGO 

Tile always accepts all cargoes the associated industry accepts.

Definition at line 82 of file industrytype.h.

Function Documentation

◆ GetIndustrySpec()

const IndustrySpec * GetIndustrySpec ( IndustryType  thistype)

Array of industries data.

Array of industries data.

This will ensure at once : proper access and not allowing modifications of it.

Parameters
thistypeof industry (which is the index in _industry_specs)
Precondition
thistype < NUM_INDUSTRYTYPES
Returns
a pointer to the corresponding industry spec

Definition at line 123 of file industry_cmd.cpp.

References NUM_INDUSTRYTYPES.

Referenced by IndustryOverrideManager::AddEntityID(), AdvertiseIndustryOpening(), AfterLoadGame(), BuildIndustriesLegend(), CcBuildIndustry(), ChangeIndustryProduction(), CheckIfCallBackAllowsCreation(), CheckIfFarEnoughFromConflictingIndustry(), CheckIfIndustryIsAllowed(), CheckIfIndustryTilesAreFree(), CheckIndustries(), CheckIndustryCloseDownProtection(), CmdBuildIndustry(), CmdIndustrySetProduction(), CMSAMine(), IndustryCargoesWindow::ComputeCargoDisplay(), IndustryCargoesWindow::ComputeIndustryDisplay(), CargoesRow::ConnectIndustryAccepted(), CargoesRow::ConnectIndustryProduced(), IndustryCargoesWindow::CountMatchingAcceptingIndustries(), IndustryCargoesWindow::CountMatchingProducingIndustries(), CreateNewIndustry(), CreateNewIndustryHelper(), Disaster_CoalMine_Init(), Disaster_Helicopter_Init(), DisasterTick_Aircraft(), DoCreateNewIndustry(), CargoesField::Draw(), IndustryViewWindow::DrawInfo(), BuildIndustryWindow::DrawWidget(), FindNearIndustryName(), FormatString(), GenerateStationName(), GetAiPurchaseCallbackResult(), GetCountAndDistanceOfClosestInstance(), IndustriesResolverObject::GetDebugID(), GetGrffile(), NIHIndustry::GetGRFID(), GetIndustryGamePlayProbability(), GetIndustryProbabilityCallback(), IndustryDirectoryWindow::GetIndustryString(), GetScaledIndustryGenerationProbability(), NIHIndustry::GetSpec(), SmallMapWindow::GetTileColours(), IndustriesScopeResolver::GetVariable(), IndustriesResolverObject::IndustriesResolverObject(), IndustryProductionCallback(), IndustryTemporarilyRefusesCargo(), IndustryTypeNameSorter(), NIHIndustry::IsInspectable(), IsTileForestIndustry(), BuildIndustryWindow::OnClick(), IndustryCargoesWindow::OnClick(), IndustryCargoesWindow::OnInit(), IndustryViewWindow::OnInvalidateData(), BuildIndustryWindow::OnPlaceObject(), Industry::RecomputeProductionMultipliers(), BuildIndustryWindow::SetStringParameters(), IndustryCargoesWindow::SetStringParameters(), ShowIndustryCargoesWindow(), IndustriesScopeResolver::StorePSA(), TransportIndustryGoods(), TriggerIndustryProduction(), and BuildIndustryWindow::UpdateWidgetSize().

◆ GetIndustryTileSpec()

const IndustryTileSpec * GetIndustryTileSpec ( IndustryGfx  gfx)

Array of industry tiles data.

Array of industry tiles data.

This will ensure at once : proper access and not allowing modifications of it.

Parameters
gfxof industrytile (which is the index in _industry_tile_specs)
Precondition
gfx < INVALID_INDUSTRYTILE
Returns
a pointer to the corresponding industrytile spec

Definition at line 137 of file industry_cmd.cpp.

References INVALID_INDUSTRYTILE.

Referenced by CheckIfIndustryTilesAreFree(), CheckIfIndustryTileSlopes(), DoCreateNewIndustry(), DoTriggerIndustryTile(), IndustryTileResolverObject::GetDebugID(), NIHIndustryTile::GetGRFID(), GetIndTileGrffile(), GetIndustryIDAtOffset(), NIHIndustryTile::GetSpec(), IndustryTileResolverObject::IndustryTileResolverObject(), and NIHIndustryTile::IsInspectable().

◆ GetTranslatedIndustryTileID()

IndustryGfx GetTranslatedIndustryTileID ( IndustryGfx  gfx)
inline

Do industry gfx ID translation for NewGRFs.

Parameters
gfxthe type to get the override for.
Returns
the gfx to actually work with.

Definition at line 189 of file industrytype.h.

References IndustryTileSpec::grf_prop, INVALID_INDUSTRYTILE, and GRFFileProps::override.

Referenced by CheckIfIndustryTilesAreFree(), CheckIfIndustryTileSlopes(), DoCreateNewIndustry(), and GetIndustryGfx().

◆ ResetIndustries()

void ResetIndustries ( )

This function initialize the spec arrays of both industry and industry tiles.

It adjusts the enabling of the industry too, based on climate availability. This will allow for clearer testings

Definition at line 80 of file industry_cmd.cpp.

References _settings_game, GameSettings::game_creation, HasBit(), GameCreationSettings::landscape, and OverrideManagerBase::ResetOverride().

Referenced by ResetNewGRFData().

◆ SortIndustryTypes()

void SortIndustryTypes ( )

Initialize the list of sorted industry types.

Definition at line 238 of file industry_gui.cpp.

References _sorted_industry_types, IndustryTypeNameSorter(), and NUM_INDUSTRYTYPES.

Referenced by AfterLoadGRFs(), and ReadLanguagePack().

Variable Documentation

◆ _industry_specs

IndustrySpec _industry_specs[NUM_INDUSTRYTYPES]
extern

Definition at line 68 of file industry_cmd.cpp.

◆ _industry_tile_specs

IndustryTileSpec _industry_tile_specs[NUM_INDUSTRYTILES]
extern

Definition at line 69 of file industry_cmd.cpp.

◆ _sorted_industry_types

◆ IT_INVALID

const uint8_t IT_INVALID = 255
static

Definition at line 205 of file industrytype.h.