OpenTTD Source: src/industry_cmd.cpp File Reference

OpenTTD Source 13.1

Typedefs | Functions | Variables
industry_cmd.cpp File Reference
`#include "stdafx.h"`
`#include "clear_map.h"`
`#include "industry.h"`
`#include "station_base.h"`
`#include "landscape.h"`
`#include "viewport_func.h"`
`#include "command_func.h"`
`#include "town.h"`
`#include "news_func.h"`
`#include "cheat_type.h"`
`#include "company_base.h"`
`#include "genworld.h"`
`#include "tree_map.h"`
`#include "newgrf_cargo.h"`
`#include "newgrf_debug.h"`
`#include "newgrf_industrytiles.h"`
`#include "autoslope.h"`
`#include "water.h"`
`#include "strings_func.h"`
`#include "window_func.h"`
`#include "date_func.h"`
`#include "vehicle_func.h"`
`#include "sound_func.h"`
`#include "animated_tile_func.h"`
`#include "effectvehicle_func.h"`
`#include "effectvehicle_base.h"`
`#include "ai/ai.hpp"`
`#include "core/pool_func.hpp"`
`#include "subsidy_func.h"`
`#include "core/backup_type.hpp"`
`#include "object_base.h"`
`#include "game/game.hpp"`
`#include "error.h"`
`#include "string_func.h"`
`#include "industry_cmd.h"`
`#include "landscape_cmd.h"`
`#include "terraform_cmd.h"`
`#include "table/strings.h"`
`#include "table/industry_land.h"`
`#include "table/build_industry.h"`
`#include "safeguards.h"`

Go to the source code of this file.

## Typedefs
typedef void | IndustryDrawTileProc(const TileInfo *ti)
typedef CommandCost | CheckNewIndustryProc(TileIndex tile)
| Industrytype check function signature. More...

## Functions
void | ShowIndustryViewWindow (int industry)
void | BuildOilRig (TileIndex tile)
void | ResetIndustries ()
| This function initialize the spec arrays of both industry and industry tiles. More...
IndustryType | GetIndustryType (TileIndex tile)
| Retrieve the type for this industry. More...
const IndustrySpec * | GetIndustrySpec (IndustryType thistype)
| Accessor for array _industry_specs. More...
const IndustryTileSpec * | GetIndustryTileSpec (IndustryGfx gfx)
| Accessor for array _industry_tile_specs. More...
static void | IndustryDrawSugarMine (const TileInfo *ti)
static void | IndustryDrawToffeeQuarry (const TileInfo *ti)
static void | IndustryDrawBubbleGenerator (const TileInfo *ti)
static void | IndustryDrawToyFactory (const TileInfo *ti)
static void | IndustryDrawCoalPlantSparks (const TileInfo *ti)
static void | DrawTile_Industry (TileInfo *ti)
static int | GetSlopePixelZ_Industry (TileIndex tile, uint x, uint y)
static Foundation | GetFoundation_Industry (TileIndex tile, Slope tileh)
static void | AddAcceptedCargo_Industry (TileIndex tile, CargoArray &acceptance, CargoTypes *always_accepted)
static void | GetTileDesc_Industry (TileIndex tile, TileDesc *td)
static CommandCost | ClearTile_Industry (TileIndex tile, DoCommandFlag flags)
static bool | TransportIndustryGoods (TileIndex tile)
| Move produced cargo from industry to nearby stations. More...
static void | AnimateTile_Industry (TileIndex tile)
static void | CreateChimneySmoke (TileIndex tile)
static void | MakeIndustryTileBigger (TileIndex tile)
static void | TileLoopIndustry_BubbleGenerator (TileIndex tile)
static void | TileLoop_Industry (TileIndex tile)
static bool | ClickTile_Industry (TileIndex tile)
static TrackStatus | GetTileTrackStatus_Industry (TileIndex tile, TransportType mode, uint sub_mode, DiagDirection side)
static void | ChangeTileOwner_Industry (TileIndex tile, Owner old_owner, Owner new_owner)
bool | IsTileForestIndustry (TileIndex tile)
| Check whether the tile is a forest. More...
static bool | IsSuitableForFarmField (TileIndex tile, bool allow_fields)
| Check whether the tile can be replaced by a farm field. More...
static void | SetupFarmFieldFence (TileIndex tile, int size, byte type, DiagDirection side)
| Build farm field fence. More...
static void | PlantFarmField (TileIndex tile, IndustryID industry)
void | PlantRandomFarmField (const Industry *i)
static bool | SearchLumberMillTrees (TileIndex tile, void *user_data)
| Search callback function for ChopLumberMillTrees. More...
static void | ChopLumberMillTrees (Industry *i)
| Perform a circular search around the Lumber Mill in order to find trees to cut. More...
static void | ProduceIndustryGoods (Industry *i)
void | OnTick_Industry ()
static CommandCost | CheckNewIndustry_NULL (TileIndex tile)
| Check the conditions of CHECK_NOTHING (Always succeeds). More...
static CommandCost | CheckNewIndustry_Forest (TileIndex tile)
| Check the conditions of CHECK_FOREST (Industry should be build above snow-line in arctic climate). More...
static bool | CheckScaledDistanceFromEdge (TileIndex tile, uint maxdist)
| Check if a tile is within a distance from map edges, scaled by map dimensions independently. More...
static CommandCost | CheckNewIndustry_OilRefinery (TileIndex tile)
| Check the conditions of CHECK_REFINERY (Industry should be positioned near edge of the map). More...
static CommandCost | CheckNewIndustry_OilRig (TileIndex tile)
| Check the conditions of CHECK_OIL_RIG (Industries at sea should be positioned near edge of the map). More...
static CommandCost | CheckNewIndustry_Farm (TileIndex tile)
| Check the conditions of CHECK_FARM (Industry should be below snow-line in arctic). More...
static CommandCost | CheckNewIndustry_Plantation (TileIndex tile)
| Check the conditions of CHECK_PLANTATION (Industry should NOT be in the desert). More...
static CommandCost | CheckNewIndustry_Water (TileIndex tile)
| Check the conditions of CHECK_WATER (Industry should be in the desert). More...
static CommandCost | CheckNewIndustry_Lumbermill (TileIndex tile)
| Check the conditions of CHECK_LUMBERMILL (Industry should be in the rain forest). More...
static CommandCost | CheckNewIndustry_BubbleGen (TileIndex tile)
| Check the conditions of CHECK_BUBBLEGEN (Industry should be in low land). More...
static CommandCost | FindTownForIndustry (TileIndex tile, int type, Town **t)
| Find a town for the industry, while checking for multiple industries in the same town. More...
bool | IsSlopeRefused (Slope current, Slope refused)
static CommandCost | CheckIfIndustryTilesAreFree (TileIndex tile, const IndustryTileLayout &layout, IndustryType type)
| Are the tiles of the industry free? More...
static CommandCost | CheckIfIndustryTileSlopes (TileIndex tile, const IndustryTileLayout &layout, size_t layout_index, int type, uint16 initial_random_bits, Owner founder, IndustryAvailabilityCallType creation_type, bool *custom_shape_check=nullptr)
| Check slope requirements for industry tiles. More...
static CommandCost | CheckIfIndustryIsAllowed (TileIndex tile, int type, const Town *t)
| Is the industry allowed to be built at this place for the town? More...
static bool | CheckCanTerraformSurroundingTiles (TileIndex tile, uint height, int internal)
static bool | CheckIfCanLevelIndustryPlatform (TileIndex tile, DoCommandFlag flags, const IndustryTileLayout &layout, int type)
| This function tries to flatten out the land below an industry, without damaging the surroundings too much.
static CommandCost | CheckIfFarEnoughFromConflictingIndustry (TileIndex tile, int type)
| Check that the new industry is far enough from conflicting industries. More...
static void | AdvertiseIndustryOpening (const Industry *ind)
| Advertise about a new industry opening. More...
static void | PopulateStationsNearby (Industry *ind)
| Populate an industry's list of nearby stations, and if it accepts any cargo, also add the industry to each station's nearby industry list. More...
static void | DoCreateNewIndustry (Industry *i, TileIndex tile, IndustryType type, const IndustryTileLayout &layout, size_t layout_index, Town *t, Owner founder, uint16 initial_random_bits)
| Put an industry on the map. More...
static CommandCost | CreateNewIndustryHelper (TileIndex tile, IndustryType type, DoCommandFlag flags, const IndustrySpec *indspec, size_t layout_index, uint32 random_var8f, uint16 random_initial_bits, Owner founder, IndustryAvailabilityCallType creation_type, Industry **ip)
| Helper function for Build/Fund an industry. More...
CommandCost | CmdBuildIndustry (DoCommandFlag flags, TileIndex tile, IndustryType it, uint32 first_layout, bool fund, uint32 seed)
| Build/Fund an industry. More...
CommandCost | CmdIndustryCtrl (DoCommandFlag flags, IndustryID ind_id, IndustryAction action, IndustryControlFlags ctlflags, Owner company_id, const std::string &text)
| Change industry properties. More...
static Industry * | CreateNewIndustry (TileIndex tile, IndustryType type, IndustryAvailabilityCallType creation_type)
| Create a new industry of random layout. More...
static uint32 | GetScaledIndustryGenerationProbability (IndustryType it, bool *force_at_least_one)
| Compute the appearance probability for an industry during map creation. More...
static uint16 | GetIndustryGamePlayProbability (IndustryType it, byte *min_number)
| Compute the probability for constructing a new industry during game play. More...
static uint | GetNumberOfIndustries ()
| Get wanted number of industries on the map. More...
static Industry * | PlaceIndustry (IndustryType type, IndustryAvailabilityCallType creation_type, bool try_hard)
| Try to place the industry in the game. More...
static void | PlaceInitialIndustry (IndustryType type, bool try_hard)
| Try to build a industry on the map. More...
static uint | GetCurrentTotalNumberOfIndustries ()
| Get total number of industries existing in the game. More...
void | GenerateIndustries ()
| This function will create random industries during game creation. More...
static void | UpdateIndustryStatistics (Industry *i)
| Monthly update of industry statistics. More...
void | ClearAllIndustryCachedNames ()
static bool | CheckIndustryCloseDownProtection (IndustryType type)
| Protects an industry from closure if the appropriate flags and conditions are met INDUSTRYBEH_CANCLOSE_LASTINSTANCE must be set (which, by default, it is not) and the count of industries of this type must one (or lower) in order to be protected against closure. More...
static void | CanCargoServiceIndustry (CargoID cargo, Industry *ind, bool *c_accepts, bool *c_produces)
| Can given cargo type be accepted or produced by the industry? More...
static int | WhoCanServiceIndustry (Industry *ind)
| Compute who can service the industry. More...
static void | ReportNewsProductionChangeIndustry (Industry *ind, CargoID type, int percent)
| Report news that industry production has changed significantly. More...
static void | ChangeIndustryProduction (Industry *i, bool monthly)
| Change industry production or do closure. More...
void | IndustryDailyLoop ()
| Daily handler for the industry changes Taking the original map size of 256*256, the number of random changes was always of just one unit. More...
void | IndustryMonthlyLoop ()
void | InitializeIndustries ()
void | CheckIndustries ()
| Verify whether the generated industries are complete, and warn the user if not.
static CommandCost | TerraformTile_Industry (TileIndex tile, DoCommandFlag flags, int z_new, Slope tileh_new)

## Variables
IndustryPool | _industry_pool ("Industry")
static byte | _industry_sound_ctr
static TileIndex | _industry_sound_tile
IndustrySpec | _industry_specs [NUM_INDUSTRYTYPES]
IndustryTileSpec | _industry_tile_specs [NUM_INDUSTRYTILES]
IndustryBuildData | _industry_builder
| In-game manager of industries.
static IndustryDrawTileProc *const | _industry_draw_tile_procs [5]
static const byte | _plantfarmfield_type [] = {1, 1, 1, 1, 1, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6}
bool | _ignore_restrictions
static CheckNewIndustryProc *const | _check_new_industry_procs [CHECK_END]
| Check functions for different types of industry. More...
static const uint | PERCENT_TRANSPORTED_60 = 153
static const uint | PERCENT_TRANSPORTED_80 = 204
const TileTypeProcs | _tile_type_industry_procs

## Detailed Description

Handling of industry tiles.

Definition in file industry_cmd.cpp.

## Typedef Documentation

## ◆ CheckNewIndustryProc

typedef CommandCost CheckNewIndustryProc(TileIndex tile)

Industrytype check function signature.

Parameters

  tile | Tile to check.

Returns
  Succeeded or failed command.

Definition at line 1370 of file industry_cmd.cpp.

## Function Documentation

## ◆ AdvertiseIndustryOpening()

static void AdvertiseIndustryOpening | ( | const Industry * | ind | ) |
| static

Advertise about a new industry opening.

Parameters

  ind | Industry being opened.

Definition at line 1699 of file industry_cmd.cpp.

References GetIndustrySpec(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, IndustrySpec::name, IndustrySpec::new_industry_text, SetDParam(), Industry::town, and Industry::type.

Referenced by IndustryBuildData::TryBuildNewIndustry().

## ◆ CanCargoServiceIndustry()

static void CanCargoServiceIndustry | ( | CargoID | cargo,
|  | Industry * | ind,
|  | bool * | c_accepts,
|  | bool * | c_produces
| ) |  |
| static

Can given cargo type be accepted or produced by the industry?

Parameters

  cargo | Cargo type
  ind | Industry
  *c_accepts | Pointer to boolean for acceptance of cargo
  *c_produces | Pointer to boolean for production of cargo

Returns
  : `*c_accepts` is set when industry accepts the cargo type, `*c_produces` is set when the industry produces the cargo type

Definition at line 2588 of file industry_cmd.cpp.

References Industry::accepts_cargo, CT_INVALID, IndustryTemporarilyRefusesCargo(), lengthof, and Industry::produced_cargo.

## ◆ ChangeIndustryProduction()

static void ChangeIndustryProduction | ( | Industry * | i,
|  | bool | monthly
| ) |  |
| static

Change industry production or do closure.

Parameters

  i | Industry for which changes are performed
  monthly | true if it's the monthly call, false if it's the random call

< reinitialize production_rate to match prod_level

Definition at line 2703 of file industry_cmd.cpp.

References IndustrySpec::callback_mask, CBID_INDUSTRY_MONTHLYPROD_CHANGE, CBID_INDUSTRY_PRODUCTION_CHANGE, CBM_IND_MONTHLYPROD_CHANGE, CBM_IND_PRODUCTION_CHANGE, GetIndustryCallback(), GetIndustrySpec(), HasBit(), Industry::type, and IndustrySpec::UsesOriginalEconomy().

## ◆ CheckIfFarEnoughFromConflictingIndustry()

static CommandCost CheckIfFarEnoughFromConflictingIndustry | ( | TileIndex | tile,
|  | int | type
| ) |  |
| static

Check that the new industry is far enough from conflicting industries.

Parameters

  tile | Tile to construct the industry.
  type | Type of the new industry.

Returns
  Succeeded or failed command.

Definition at line 1656 of file industry_cmd.cpp.

References IndustrySpec::conflicting, DistanceMax(), OrthogonalTileArea::Expand(), Industry::GetByTile(), GetIndustrySpec(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_industry_pool >::GetNumItems(), GetTileType(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_industry_pool >::Iterate(), Industry::location, MP_INDUSTRY, return_cmd_error, OrthogonalTileArea::tile, and Industry::type.

Referenced by CreateNewIndustryHelper().

## ◆ CheckIfIndustryIsAllowed()

static CommandCost CheckIfIndustryIsAllowed | ( | TileIndex | tile,
|  | int | type,
|  | const Town * | t
| ) |  |
| static

Is the industry allowed to be built at this place for the town?

Parameters

  tile | Tile to construct the industry.
  type | Type of the industry.
  t | Town authority that the industry belongs to.

Returns
  Succeeded or failed command.

Definition at line 1539 of file industry_cmd.cpp.

References Town::cache, DistanceMax(), GetIndustrySpec(), INDUSTRYBEH_ONLY_NEARTOWN, INDUSTRYBEH_TOWN1200_MORE, TownCache::population, return_cmd_error, and Town::xy.

Referenced by CreateNewIndustryHelper().

## ◆ CheckIfIndustryTilesAreFree()

static CommandCost CheckIfIndustryTilesAreFree | ( | TileIndex | tile,
|  | const IndustryTileLayout & | layout,
|  | IndustryType | type
| ) |  |
| static

Are the tiles of the industry free?

Parameters

  tile | Position to check.
  layout | Industry tiles table.
  type | Type of the industry.

Returns
  Failed or succeeded command.

Definition at line 1435 of file industry_cmd.cpp.

References _current_company, IndustrySpec::behaviour, EnsureNoVehicleOnGround(), CommandCost::Failed(), GetIndustrySpec(), GetIndustryTileSpec(), GetTranslatedIndustryTileID(), GFX_WATERTILE_SPECIALCHECK, HasBit(), HasTileWaterClass(), INDUSTRYBEH_BUILT_ONWATER, INDUSTRYBEH_ONLY_INTOWN, INDUSTRYBEH_ONLY_NEARTOWN, INDUSTRYBEH_TOWN1200_MORE, IsBridgeAbove(), IsTileFlat(), IsTileOnWater(), IsTileType(), IsValidTile(), IsWaterTile(), MP_HOUSE, OWNER_TOWN, return_cmd_error, IndustryTileSpec::slopes_refused, and TileAddWrap().

## ◆ CheckIfIndustryTileSlopes()

static CommandCost CheckIfIndustryTileSlopes | ( | TileIndex | tile,
|  | const IndustryTileLayout & | layout,
|  | size_t | layout_index,
|  | int | type,
|  | uint16 | initial_random_bits,
|  | Owner | founder,
|  | IndustryAvailabilityCallType | creation_type,
|  | bool * | custom_shape_check = `nullptr`
| ) |  |
| static

Check slope requirements for industry tiles.

Parameters

  | tile | Position to check.
  | layout | Industry tiles table.
  | layout_index | The index of the layout to build/fund
  | type | Type of the industry.
  | initial_random_bits | The random bits the industry is going to have after construction.
  | founder | Industry founder
  | creation_type | The circumstances the industry is created under.
  [out] | custom_shape_check | Perform custom check for the site.

Returns
  Failed or succeeded command.

Definition at line 1497 of file industry_cmd.cpp.

References IndustryTileSpec::callback_mask, CBM_INDT_SHAPE_CHECK, CommandCost::Failed(), GetIndustryTileSpec(), GetTileSlope(), GetTranslatedIndustryTileID(), GFX_WATERTILE_SPECIALCHECK, HasBit(), IsValidTile(), PerformIndustryTileSlopeCheck(), and TileAddWrap().

## ◆ CheckIndustryCloseDownProtection()

static bool CheckIndustryCloseDownProtection | ( | IndustryType | type | ) |
| static

Protects an industry from closure if the appropriate flags and conditions are met INDUSTRYBEH_CANCLOSE_LASTINSTANCE must be set (which, by default, it is not) and the count of industries of this type must one (or lower) in order to be protected against closure.

Parameters

  type | IndustryType been queried

Returns
  true if protection is on, false otherwise (except for oil wells)

Definition at line 2570 of file industry_cmd.cpp.

References _settings_game, IndustrySpec::behaviour, GameSettings::game_creation, GetIndustrySpec(), INDUSTRYBEH_DONT_INCR_PROD, and GameCreationSettings::landscape.

## ◆ CheckNewIndustry_BubbleGen()

static CommandCost CheckNewIndustry_BubbleGen | ( | TileIndex | tile | ) |
| static

Check the conditions of CHECK_BUBBLEGEN (Industry should be in low land).

Parameters

  tile | Tile to perform the checking.

Returns
  Succeeded or failed command.

Definition at line 1357 of file industry_cmd.cpp.

References GetTileZ(), and return_cmd_error.

## ◆ CheckNewIndustry_Farm()

static CommandCost CheckNewIndustry_Farm | ( | TileIndex | tile | ) |
| static

Check the conditions of CHECK_FARM (Industry should be below snow-line in arctic).

Parameters

  tile | Tile to perform the checking.

Returns
  Succeeded or failed command.

Definition at line 1303 of file industry_cmd.cpp.

References _settings_game, GameSettings::game_creation, and GameCreationSettings::landscape.

## ◆ CheckNewIndustry_Forest()

static CommandCost CheckNewIndustry_Forest | ( | TileIndex | tile | ) |
| static

Check the conditions of CHECK_FOREST (Industry should be build above snow-line in arctic climate).

Parameters

  tile | Tile to perform the checking.

Returns
  Succeeded or failed command.

Definition at line 1234 of file industry_cmd.cpp.

References _settings_game, GameSettings::game_creation, and GameCreationSettings::landscape.

## ◆ CheckNewIndustry_Lumbermill()

static CommandCost CheckNewIndustry_Lumbermill | ( | TileIndex | tile | ) |
| static

Check the conditions of CHECK_LUMBERMILL (Industry should be in the rain forest).

Parameters

  tile | Tile to perform the checking.

Returns
  Succeeded or failed command.

Definition at line 1344 of file industry_cmd.cpp.

References GetTropicZone(), return_cmd_error, and TROPICZONE_RAINFOREST.

## ◆ CheckNewIndustry_NULL()

static CommandCost CheckNewIndustry_NULL | ( | TileIndex | tile | ) |
| static

Check the conditions of CHECK_NOTHING (Always succeeds).

Parameters

  tile | Tile to perform the checking.

Returns
  Succeeded or failed command.

Definition at line 1224 of file industry_cmd.cpp.

## ◆ CheckNewIndustry_OilRefinery()

static CommandCost CheckNewIndustry_OilRefinery | ( | TileIndex | tile | ) |
| static

Check the conditions of CHECK_REFINERY (Industry should be positioned near edge of the map).

Parameters

  tile | Tile to perform the checking.

Returns
  Succeeded or failed command.

Definition at line 1272 of file industry_cmd.cpp.

## ◆ CheckNewIndustry_OilRig()

static CommandCost CheckNewIndustry_OilRig | ( | TileIndex | tile | ) |
| static

Check the conditions of CHECK_OIL_RIG (Industries at sea should be positioned near edge of the map).

Parameters

  tile | Tile to perform the checking.

Returns
  Succeeded or failed command.

Definition at line 1288 of file industry_cmd.cpp.

## ◆ CheckNewIndustry_Plantation()

static CommandCost CheckNewIndustry_Plantation | ( | TileIndex | tile | ) |
| static

Check the conditions of CHECK_PLANTATION (Industry should NOT be in the desert).

Parameters

  tile | Tile to perform the checking.

Returns
  Succeeded or failed command.

Definition at line 1318 of file industry_cmd.cpp.

References GetTropicZone(), return_cmd_error, and TROPICZONE_DESERT.

## ◆ CheckNewIndustry_Water()

static CommandCost CheckNewIndustry_Water | ( | TileIndex | tile | ) |
| static

Check the conditions of CHECK_WATER (Industry should be in the desert).

Parameters

  tile | Tile to perform the checking.

Returns
  Succeeded or failed command.

Definition at line 1331 of file industry_cmd.cpp.

References GetTropicZone(), return_cmd_error, and TROPICZONE_DESERT.

## ◆ CheckScaledDistanceFromEdge()

static bool CheckScaledDistanceFromEdge | ( | TileIndex | tile,
|  | uint | maxdist
| ) |  |
| static

Check if a tile is within a distance from map edges, scaled by map dimensions independently.

Each dimension is checked independently, and dimensions smaller than 256 are not scaled.

Parameters

  tile | Which tile to check distance of.
  maxdist | Normal distance on a 256x256 map.

Returns
  True if the tile is near the map edge.

Definition at line 1251 of file industry_cmd.cpp.

References DIAGDIR_NE, DIAGDIR_NW, DIAGDIR_SE, DIAGDIR_SW, DistanceFromEdgeDir(), MapSizeX(), and MapSizeY().

## ◆ ChopLumberMillTrees()

static void ChopLumberMillTrees | ( | Industry * | i | ) |
| static

Perform a circular search around the Lumber Mill in order to find trees to cut.

Parameters

  i | industry

Definition at line 1117 of file industry_cmd.cpp.

References CircularTileSearch(), IsIndustryCompleted(), Industry::location, Industry::produced_cargo_waiting, SearchLumberMillTrees(), OrthogonalTileArea::tile, and Industry::TileBelongsToIndustry().

## ◆ CmdBuildIndustry()

CommandCost CmdBuildIndustry | ( | DoCommandFlag | flags,
|  | TileIndex | tile,
|  | IndustryType | it,
|  | uint32 | first_layout,
|  | bool | fund,
|  | uint32 | seed
| ) |  |
| strong

Build/Fund an industry.

Parameters

  flags | of operations to conduct
  tile | tile where industry is built
  it | industry type see build_industry.h and see industry.h
  first_layout | first layout to try
  fund | false = prospect, true = fund (only valid if current company is DEITY)
  seed | seed to use for desyncfree randomisations

Returns
  the cost of this operation or an error

Definition at line 2013 of file industry_cmd.cpp.

References CMD_ERROR, IndustrySpec::enabled, GetIndustrySpec(), IndustrySpec::layouts, and NUM_INDUSTRYTYPES.

## ◆ CmdIndustryCtrl()

CommandCost CmdIndustryCtrl | ( | DoCommandFlag | flags,
|  | IndustryID | ind_id,
|  | IndustryAction | action,
|  | IndustryControlFlags | ctlflags,
|  | Owner | company_id,
|  | const std::string & | text
| ) |  |

Change industry properties.

Parameters

  flags | Type of operation.
  ind_id | IndustryID
  action | IndustryAction to perform
  ctlflags | IndustryControlFlags (only used with set control flags)
  company_id | CompanyID to set or INVALID_OWNER (available to everyone) or OWNER_NONE (neutral stations only) or OWNER_DEITY (no one) (only used with set exclusive supplier / consumer)
  text | - Additional industry text (only used with set text action)

Returns
  Empty cost or an error.

Definition at line 2110 of file industry_cmd.cpp.

References _current_company, CMD_ERROR, Industry::ctlflags, DC_EXEC, Industry::exclusive_consumer, Industry::exclusive_supplier, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_industry_pool >::GetIfValid(), INDCTL_MASK, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, INVALID_OWNER, InvalidateWindowData(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_company_pool >::IsValidID(), OWNER_DEITY, OWNER_NONE, SetControlFlags, SetExclusiveConsumer, SetExclusiveSupplier, SetText, Industry::text, and WC_INDUSTRY_VIEW.

## ◆ CreateNewIndustry()

static Industry* CreateNewIndustry | ( | TileIndex | tile,
|  | IndustryType | type,
|  | IndustryAvailabilityCallType | creation_type
| ) |  |
| static

Create a new industry of random layout.

Parameters

  tile | The location to build the industry.
  type | The industry type to build.
  creation_type | The circumstances the industry is created under.

Returns
  the created industry or nullptr if it failed.

Definition at line 2161 of file industry_cmd.cpp.

References GetIndustrySpec().

Referenced by PlaceIndustry().

## ◆ CreateNewIndustryHelper()

static CommandCost CreateNewIndustryHelper | ( | TileIndex | tile,
|  | IndustryType | type,
|  | DoCommandFlag | flags,
|  | const IndustrySpec * | indspec,
|  | size_t | layout_index,
|  | uint32 | random_var8f,
|  | uint16 | random_initial_bits,
|  | Owner | founder,
|  | IndustryAvailabilityCallType | creation_type,
|  | Industry ** | ip
| ) |  |
| static

Helper function for Build/Fund an industry.

Parameters

  | tile | tile where industry is built
  | type | of industry to build
  | flags | of operations to conduct
  | indspec | pointer to industry specifications
  | layout_index | the index of the itsepc to build/fund
  | random_var8f | random seed (possibly) used by industries
  | random_initial_bits | The random bits the industry is going to have after construction.
  | founder | Founder of the industry
  | creation_type | The circumstances the industry is created under.
  [out] | ip | Pointer to store newly created industry.

Returns
  Succeeded or failed command.

Postcondition
  `*ip` contains the newly created industry if all checks are successful and the flags request actual creation, else it contains `nullptr` afterwards.

Definition at line 1949 of file industry_cmd.cpp.

References CheckIfFarEnoughFromConflictingIndustry(), CheckIfIndustryIsAllowed(), CommandCost::Failed(), FindTownForIndustry(), and IndustrySpec::layouts.

## ◆ DoCreateNewIndustry()

static void DoCreateNewIndustry | ( | Industry * | i,
|  | TileIndex | tile,
|  | IndustryType | type,
|  | const IndustryTileLayout & | layout,
|  | size_t | layout_index,
|  | Town * | t,
|  | Owner | founder,
|  | uint16 | initial_random_bits
| ) |  |
| static

Put an industry on the map.

Parameters

  i | Just allocated poolitem, mostly empty.
  tile | North tile of the industry.
  type | Type of the industry.
  layout | Industrylayout to build.
  layout_index | Number of the industry layout.
  t | Nearest town.
  founder | Founder of the industry; OWNER_NONE in case of random construction.
  initial_random_bits | Random bits for the industry.

Definition at line 1748 of file industry_cmd.cpp.

References Industry::accepts_cargo, IndustrySpec::accepts_cargo, GetIndustrySpec(), Industry::IncIndustryTypeCount(), Industry::incoming_cargo_waiting, Industry::last_cargo_accepted_at, Industry::last_month_pct_transported, Industry::last_month_transported, lengthof, Industry::location, MemCpyT(), MemSetT(), Industry::owner, OWNER_NONE, Industry::produced_cargo, Industry::produced_cargo_waiting, Industry::production_rate, RandomRange(), Industry::this_month_production, Industry::this_month_transported, Industry::town, Industry::type, and IndustrySpec::UsesOriginalEconomy().

## ◆ FindTownForIndustry()

static CommandCost FindTownForIndustry | ( | TileIndex | tile,
|  | int | type,
|  | Town ** | t
| ) |  |
| static

Find a town for the industry, while checking for multiple industries in the same town.

Parameters

  | tile | Position of the industry to build.
  | type | Industry type.
  [out] | t | Pointer to return town for the new industry, `nullptr` is written if no good town can be found.

Returns
  Succeeded or failed command.

Precondition
  `*t` != nullptr

Postcondition
  `*t` points to a town on success, and `nullptr` on failure.

Definition at line 1395 of file industry_cmd.cpp.

References _settings_game, ClosestTownFromTile(), GameSettings::economy, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_industry_pool >::Iterate(), EconomySettings::multiple_industry_per_town, return_cmd_error, Industry::town, and Industry::type.

Referenced by CreateNewIndustryHelper().

## ◆ GenerateIndustries()

void GenerateIndustries | ( |  | ) |

This function will create random industries during game creation.

It will scale the amount of industries by mapsize and difficulty level.

Definition at line 2334 of file industry_cmd.cpp.

## ◆ GetCurrentTotalNumberOfIndustries()

static uint GetCurrentTotalNumberOfIndustries | ( |  | ) |
| static

Get total number of industries existing in the game.

Returns
  Number of industries currently in the game.

Definition at line 2288 of file industry_cmd.cpp.

References Industry::GetIndustryTypeCount(), and NUM_INDUSTRYTYPES.

Referenced by IndustryBuildData::MonthlyLoop(), and IndustryBuildData::Reset().

## ◆ GetIndustryGamePlayProbability()

static uint16 GetIndustryGamePlayProbability | ( | IndustryType | it,
|  | byte * | min_number
| ) |  |
| static

Compute the probability for constructing a new industry during game play.

Parameters

  | it | Industry type to compute.
  [out] | min_number | Minimal number of industries that should exist at the map.

Returns
  Relative probability for the industry to appear.

Definition at line 2206 of file industry_cmd.cpp.

References _cur_year, _settings_game, IndustrySpec::appear_ingame, IndustrySpec::behaviour, GameSettings::difficulty, IndustrySpec::enabled, GameSettings::game_creation, GetIndustryProbabilityCallback(), GetIndustrySpec(), IACT_RANDOMCREATION, ID_FUND_ONLY, DifficultySettings::industry_density, INDUSTRYBEH_AFTER_1960, INDUSTRYBEH_BEFORE_1950, INDUSTRYBEH_CANCLOSE_LASTINSTANCE, GameCreationSettings::landscape, and IndustrySpec::layouts.

Referenced by IndustryTypeBuildData::GetIndustryTypeData().

## ◆ GetIndustrySpec()

const IndustrySpec* GetIndustrySpec | ( | IndustryType | thistype | ) |

Accessor for array _industry_specs.

Array of industries data.

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

Parameters

  thistype | of 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(), BuildIndustriesLegend(), ChangeIndustryProduction(), CheckIfCallBackAllowsCreation(), CheckIfFarEnoughFromConflictingIndustry(), CheckIfIndustryIsAllowed(), CheckIfIndustryTilesAreFree(), CheckIndustries(), CheckIndustryCloseDownProtection(), CmdBuildIndustry(), CMSAMine(), IndustryCargoesWindow::ComputeCargoDisplay(), IndustryCargoesWindow::ComputeIndustryDisplay(), CargoesRow::ConnectIndustryAccepted(), CargoesRow::ConnectIndustryProduced(), IndustryCargoesWindow::CountMatchingAcceptingIndustries(), IndustryCargoesWindow::CountMatchingProducingIndustries(), CreateNewIndustry(), Disaster_Helicopter_Init(), DoCreateNewIndustry(), IndustryViewWindow::DrawInfo(), FindNearIndustryName(), GetAiPurchaseCallbackResult(), IndustriesResolverObject::GetDebugID(), GetGrffile(), NIHIndustry::GetGRFID(), GetIndustryGamePlayProbability(), GetIndustryProbabilityCallback(), IndustryDirectoryWindow::GetIndustryString(), GetScaledIndustryGenerationProbability(), NIHIndustry::GetSpec(), IndustriesScopeResolver::GetVariable(), IndustriesResolverObject::IndustriesResolverObject(), IndustryProductionCallback(), IndustryTemporarilyRefusesCargo(), IndustryTypeNameSorter(), NIHIndustry::IsInspectable(), IsTileForestIndustry(), IndustryCargoesWindow::OnInit(), BuildIndustryWindow::OnInvalidateData(), BuildIndustryWindow::OnPlaceObject(), Industry::RecomputeProductionMultipliers(), IndustryCargoesWindow::SetStringParameters(), ShowIndustryCargoesWindow(), TransportIndustryGoods(), TriggerIndustryProduction(), and BuildIndustryWindow::UpdateWidgetSize().

## ◆ GetIndustryTileSpec()

const IndustryTileSpec* GetIndustryTileSpec | ( | IndustryGfx | gfx | ) |

Accessor for array _industry_tile_specs.

Array of industry tiles data.

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

Parameters

  gfx | of 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(), DoTriggerIndustryTile(), IndustryTileResolverObject::GetDebugID(), NIHIndustryTile::GetGRFID(), GetIndTileGrffile(), GetIndustryIDAtOffset(), NIHIndustryTile::GetSpec(), IndustryTileResolverObject::IndustryTileResolverObject(), and NIHIndustryTile::IsInspectable().

## ◆ GetIndustryType()

IndustryType GetIndustryType | ( | TileIndex | tile | ) |

Retrieve the type for this industry.

Although it is accessed by a tile, it will return the general type of industry, and not the sprite index as would do GetIndustryGfx.

Parameters

  tile | that is queried

Precondition
  IsTileType(tile, MP_INDUSTRY)

Returns
  general type for this industry, as defined in industry.h

Definition at line 106 of file industry_cmd.cpp.

References Industry::GetByTile(), IsTileType(), MP_INDUSTRY, and Industry::type.

Referenced by FindNearIndustryName().

## ◆ GetNumberOfIndustries()

static uint GetNumberOfIndustries | ( |  | ) |
| static

Get wanted number of industries on the map.

Returns
  Wanted number of industries at the map.

Definition at line 2230 of file industry_cmd.cpp.

References ID_END, and lengthof.

## ◆ GetScaledIndustryGenerationProbability()

static uint32 GetScaledIndustryGenerationProbability | ( | IndustryType | it,
|  | bool * | force_at_least_one
| ) |  |
| static

Compute the appearance probability for an industry during map creation.

Parameters

  | it | Industry type to compute.
  [out] | force_at_least_one | Returns whether at least one instance should be forced on map creation.

Returns
  Relative probability for the industry to appear.

Definition at line 2180 of file industry_cmd.cpp.

References _settings_game, IndustrySpec::appear_creation, IndustrySpec::enabled, GameSettings::game_creation, GetIndustrySpec(), GameCreationSettings::landscape, and IndustrySpec::layouts.

Referenced by CheckIndustries().

## ◆ IndustryDailyLoop()

void IndustryDailyLoop | ( |  | ) |

Daily handler for the industry changes Taking the original map size of 256*256, the number of random changes was always of just one unit.

But it cannot be the same on smaller or bigger maps. That number has to be scaled up or down. For small maps, it implies that less than one change per month is required, while on bigger maps, it would be way more. The daily loop handles those changes.

Definition at line 2914 of file industry_cmd.cpp.

## ◆ IsSuitableForFarmField()

static bool IsSuitableForFarmField | ( | TileIndex | tile,
|  | bool | allow_fields
| ) |  |
| static

Check whether the tile can be replaced by a farm field.

Parameters

  tile | the tile to investigate.
  allow_fields | if true, the method will return true even if the tile is a farm tile, otherwise the tile may not be a farm tile

Returns
  true if the tile can become a farm field

Definition at line 992 of file industry_cmd.cpp.

References CLEAR_DESERT, CLEAR_FIELDS, CLEAR_SNOW, GetTileType(), GetTreeGround(), IsClearGround(), MP_CLEAR, MP_TREES, and TREE_GROUND_SHORE.

## ◆ IsTileForestIndustry()

bool IsTileForestIndustry | ( | TileIndex | tile | ) |

Check whether the tile is a forest.

Parameters

  tile | the tile to investigate.

Returns
  true if and only if the tile is a forest

Definition at line 964 of file industry_cmd.cpp.

References CT_INVALID, CargoSpec::Get(), Industry::GetByTile(), GetIndustrySpec(), INDUSTRYLIFE_ORGANIC, IsTileType(), CargoSpec::label, lengthof, IndustrySpec::life_type, MP_INDUSTRY, Industry::produced_cargo, and Industry::type.

## ◆ PlaceIndustry()

static Industry* PlaceIndustry | ( | IndustryType | type,
|  | IndustryAvailabilityCallType | creation_type,
|  | bool | try_hard
| ) |  |
| static

Try to place the industry in the game.

Since there is no feedback why placement fails, there is no other option than to try a few times before concluding it does not work.

Parameters

  type | Industry type of the desired industry.
  try_hard | Try very hard to find a place. (Used to place at least one industry per type.)

Returns
  Pointer to created industry, or `nullptr` if creation failed.

Definition at line 2259 of file industry_cmd.cpp.

References CreateNewIndustry(), and RandomTile.

Referenced by IndustryBuildData::TryBuildNewIndustry().

## ◆ PlaceInitialIndustry()

static void PlaceInitialIndustry | ( | IndustryType | type,
|  | bool | try_hard
| ) |  |
| static

Try to build a industry on the map.

Parameters

  type | IndustryType of the desired industry
  try_hard | Try very hard to find a place. (Used to place at least one industry per type)

Definition at line 2274 of file industry_cmd.cpp.

References _current_company, and OWNER_NONE.

## ◆ PopulateStationsNearby()

static void PopulateStationsNearby | ( | Industry * | ind | ) |
| static

Populate an industry's list of nearby stations, and if it accepts any cargo, also add the industry to each station's nearby industry list.

Parameters

  ind | Industry

Definition at line 1719 of file industry_cmd.cpp.

References _settings_game, ForAllStationsAroundTiles(), Station::industries_near, Industry::location, Industry::neutral_station, StationSettings::serve_neutral_industries, GameSettings::station, and Industry::stations_near.

## ◆ ReportNewsProductionChangeIndustry()

static void ReportNewsProductionChangeIndustry | ( | Industry * | ind,
|  | CargoID | type,
|  | int | percent
| ) |  |
| static

Report news that industry production has changed significantly.

Parameters

  ind | Industry with changed production
  type | Cargo type that has changed
  percent | Percentage of change (>0 means increase, <0 means decrease)

Definition at line 2675 of file industry_cmd.cpp.

References NT_INDUSTRY_COMPANY, NT_INDUSTRY_NOBODY, NT_INDUSTRY_OTHER, and WhoCanServiceIndustry().

## ◆ 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 75 of file industry_cmd.cpp.

References lengthof, and NUM_INDUSTRYTYPES.

## ◆ SearchLumberMillTrees()

static bool SearchLumberMillTrees | ( | TileIndex | tile,
|  | void * | user_data
| ) |  |
| static

Search callback function for ChopLumberMillTrees.

Parameters

  tile | to test
  user_data | that is passed by the caller. In this case, nothing

Returns
  the result of the test

< 3 and up means all fully grown trees

Definition at line 1094 of file industry_cmd.cpp.

References _current_company, GetTreeGrowth(), IsTileType(), MP_TREES, and OWNER_NONE.

Referenced by ChopLumberMillTrees().

## ◆ SetupFarmFieldFence()

static void SetupFarmFieldFence | ( | TileIndex | tile,
|  | int | size,
|  | byte | type,
|  | DiagDirection | side
| ) |  |
| static

Build farm field fence.

Parameters

  tile | the tile to position the fence on
  size | the size of the field being planted in tiles
  type | type of fence to set
  side | the side of the tile to attempt placement

Definition at line 1008 of file industry_cmd.cpp.

References AXIS_Y, Chance16(), CLEAR_FIELDS, DiagDirToAxis(), IsClearGround(), IsTileType(), MP_CLEAR, SetFence(), TILE_MASK, and TileDiffXY().

## ◆ TransportIndustryGoods()

static bool TransportIndustryGoods | ( | TileIndex | tile | ) |
| static

Move produced cargo from industry to nearby stations.

Parameters

  tile | Industry tile

Returns
  true if any cargo was moved.

Definition at line 531 of file industry_cmd.cpp.

References CT_INVALID, EconomyIsInRecession(), Industry::GetByTile(), GetIndustrySpec(), lengthof, IndustrySpec::minimal_cargo, Industry::produced_cargo, Industry::produced_cargo_waiting, Industry::this_month_production, and Industry::type.

## ◆ UpdateIndustryStatistics()

static void UpdateIndustryStatistics | ( | Industry * | i | ) |
| static

Monthly update of industry statistics.

Parameters

  i | Industry to update.

Definition at line 2385 of file industry_cmd.cpp.

References _cur_year, CT_INVALID, Industry::last_month_pct_transported, Industry::last_month_production, Industry::last_month_transported, Industry::last_prod_year, lengthof, Industry::produced_cargo, Industry::this_month_production, and Industry::this_month_transported.

## ◆ WhoCanServiceIndustry()

static int WhoCanServiceIndustry | ( | Industry * | ind | ) |
| static

Compute who can service the industry.

Here, 'can service' means that they have trains and stations close enough to the industry with the right cargo type and the right orders (ie has the technical means).

Parameters

  ind | Industry being investigated.

Returns
  : 0 if nobody can service the industry, 2 if the local company can service the industry, and 1 otherwise (only competitors can service the industry)

Definition at line 2622 of file industry_cmd.cpp.

References Industry::stations_near.

Referenced by ReportNewsProductionChangeIndustry().

## Variable Documentation

## ◆ _check_new_industry_procs

CheckNewIndustryProc* const _check_new_industry_procs[CHECK_END]
| static

Initial value:
= {
CheckNewIndustry_NULL,
CheckNewIndustry_Forest,
CheckNewIndustry_OilRefinery,
CheckNewIndustry_Farm,
CheckNewIndustry_Plantation,
CheckNewIndustry_Water,
CheckNewIndustry_Lumbermill,
CheckNewIndustry_BubbleGen,
CheckNewIndustry_OilRig,
}

Check functions for different types of industry.

Definition at line 1373 of file industry_cmd.cpp.

## ◆ _industry_draw_tile_procs

IndustryDrawTileProc* const _industry_draw_tile_procs[5]
| static

Initial value:
= {
IndustryDrawSugarMine,
IndustryDrawToffeeQuarry,
IndustryDrawBubbleGenerator,
IndustryDrawToyFactory,
IndustryDrawCoalPlantSparks,
}

Definition at line 314 of file industry_cmd.cpp.

## ◆ _tile_type_industry_procs

const TileTypeProcs _tile_type_industry_procs

Initial value:
= {
DrawTile_Industry,
GetSlopePixelZ_Industry,
ClearTile_Industry,
AddAcceptedCargo_Industry,
GetTileDesc_Industry,
GetTileTrackStatus_Industry,
ClickTile_Industry,
AnimateTile_Industry,
TileLoop_Industry,
ChangeTileOwner_Industry,
nullptr,
nullptr,
GetFoundation_Industry,
TerraformTile_Industry,
}

Definition at line 55 of file landscape.cpp.

CheckNewIndustry_Farm
static CommandCost CheckNewIndustry_Farm(TileIndex tile)
Check the conditions of CHECK_FARM (Industry should be below snow-line in arctic).
Definition: industry_cmd.cpp:1303
CheckNewIndustry_OilRefinery
static CommandCost CheckNewIndustry_OilRefinery(TileIndex tile)
Check the conditions of CHECK_REFINERY (Industry should be positioned near edge of the map).
Definition: industry_cmd.cpp:1272
CheckNewIndustry_BubbleGen
static CommandCost CheckNewIndustry_BubbleGen(TileIndex tile)
Check the conditions of CHECK_BUBBLEGEN (Industry should be in low land).
Definition: industry_cmd.cpp:1357
CheckNewIndustry_Lumbermill
static CommandCost CheckNewIndustry_Lumbermill(TileIndex tile)
Check the conditions of CHECK_LUMBERMILL (Industry should be in the rain forest).
Definition: industry_cmd.cpp:1344
CheckNewIndustry_Plantation
static CommandCost CheckNewIndustry_Plantation(TileIndex tile)
Check the conditions of CHECK_PLANTATION (Industry should NOT be in the desert).
Definition: industry_cmd.cpp:1318
CheckNewIndustry_OilRig
static CommandCost CheckNewIndustry_OilRig(TileIndex tile)
Check the conditions of CHECK_OIL_RIG (Industries at sea should be positioned near edge of the map).
Definition: industry_cmd.cpp:1288
CheckNewIndustry_Forest
static CommandCost CheckNewIndustry_Forest(TileIndex tile)
Check the conditions of CHECK_FOREST (Industry should be build above snow-line in arctic climate).
Definition: industry_cmd.cpp:1234
CheckNewIndustry_NULL
static CommandCost CheckNewIndustry_NULL(TileIndex tile)
Check the conditions of CHECK_NOTHING (Always succeeds).
Definition: industry_cmd.cpp:1224
CheckNewIndustry_Water
static CommandCost CheckNewIndustry_Water(TileIndex tile)
Check the conditions of CHECK_WATER (Industry should be in the desert).
Definition: industry_cmd.cpp:1331