OpenTTD Source  20240917-master-g9ab0a47812
industrytype.h
Go to the documentation of this file.
1 /*
2  * This file is part of OpenTTD.
3  * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
4  * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
5  * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
6  */
7 
10 #ifndef INDUSTRYTYPE_H
11 #define INDUSTRYTYPE_H
12 
13 #include "map_type.h"
14 #include "slope_type.h"
15 #include "industry_type.h"
16 #include "landscape_type.h"
17 #include "cargo_type.h"
18 #include "newgrf_animation_type.h"
19 #include "newgrf_commons.h"
20 
27 };
28 
33 enum CheckProc {
44 };
45 
52 };
53 
56  INDUSTRYBEH_NONE = 0,
71  /* The following flags are only used for newindustries and do no represent any normal behaviour */
78 };
80 
81 
83  INDTILE_SPECIAL_NONE = 0,
86 };
88 
89 
91  TileIndexDiffC ti;
92  IndustryGfx gfx;
93 };
94 
96 using IndustryTileLayout = std::vector<IndustryTileLayoutTile>;
97 
101 struct IndustrySpec {
102  std::vector<IndustryTileLayout> layouts;
103  uint8_t cost_multiplier;
106  IndustryType conflicting[3];
107  uint8_t check_proc;
108  std::array<CargoID, INDUSTRY_NUM_OUTPUTS> produced_cargo;
109  std::variant<CargoLabel, MixedCargoType> produced_cargo_label[INDUSTRY_NUM_OUTPUTS];
110  uint8_t production_rate[INDUSTRY_NUM_OUTPUTS];
115  uint8_t minimal_cargo;
116  std::array<CargoID, INDUSTRY_NUM_INPUTS> accepts_cargo;
117  std::variant<CargoLabel, MixedCargoType> accepts_cargo_label[INDUSTRY_NUM_INPUTS];
122  uint8_t map_colour;
129  uint8_t appear_ingame[NUM_LANDSCAPE];
130  uint8_t appear_creation[NUM_LANDSCAPE];
131  /* Newgrf data */
132  uint16_t callback_mask;
133  bool enabled;
135  std::vector<uint8_t> random_sounds;
136 
137  bool IsRawIndustry() const;
138  bool IsProcessingIndustry() const;
139  Money GetConstructionCost() const;
140  Money GetRemovalCost() const;
141  bool UsesOriginalEconomy() const;
142 };
143 
149  std::array<CargoID, INDUSTRY_NUM_INPUTS> accepts_cargo;
150  std::array<std::variant<CargoLabel, MixedCargoType>, INDUSTRY_NUM_INPUTS> accepts_cargo_label;
151  std::array<int8_t, INDUSTRY_NUM_INPUTS> acceptance;
153  uint8_t anim_production;
154  uint8_t anim_next;
155 
160  /* Newgrf data */
161  uint8_t callback_mask;
164  bool enabled;
166 };
167 
168 /* industry_cmd.cpp*/
169 const IndustrySpec *GetIndustrySpec(IndustryType thistype);
170 const IndustryTileSpec *GetIndustryTileSpec(IndustryGfx gfx);
171 void ResetIndustries();
172 
173 /* writable arrays of specs */
174 extern IndustrySpec _industry_specs[NUM_INDUSTRYTYPES];
175 extern IndustryTileSpec _industry_tile_specs[NUM_INDUSTRYTILES];
176 
177 /* industry_gui.cpp */
178 void SortIndustryTypes();
179 /* Industry types sorted alphabetically by name. */
180 extern std::array<IndustryType, NUM_INDUSTRYTYPES> _sorted_industry_types;
181 
187 inline IndustryGfx GetTranslatedIndustryTileID(IndustryGfx gfx)
188 {
189  /* the 0xFF should be GFX_WATERTILE_SPECIALCHECK but for reasons of include mess,
190  * we'll simplify the writing.
191  * Basically, the first test is required since the GFX_WATERTILE_SPECIALCHECK value
192  * will never be assigned as a tile index and is only required in order to do some
193  * tests while building the industry (as in WATER REQUIRED */
194  if (gfx != 0xFF) {
195  assert(gfx < INVALID_INDUSTRYTILE);
196  const IndustryTileSpec *it = &_industry_tile_specs[gfx];
197  return it->grf_prop.override == INVALID_INDUSTRYTILE ? gfx : it->grf_prop.override;
198  } else {
199  return gfx;
200  }
201 }
202 
203 static const uint8_t IT_INVALID = 255;
204 
205 #endif /* INDUSTRYTYPE_H */
INDUSTRYBEH_ONLY_INTOWN
@ INDUSTRYBEH_ONLY_INTOWN
can only be built in towns (arctic/tropic banks, water tower)
Definition: industrytype.h:61
CHECK_WATER
@ CHECK_WATER
Industry should be in the desert.
Definition: industrytype.h:39
NUM_INDUSTRYTYPES
static const IndustryType NUM_INDUSTRYTYPES
total number of industry types, new and old; limited to 240 because we need some special ids like INV...
Definition: industry_type.h:26
INDUSTRY_NUM_OUTPUTS
static const int INDUSTRY_NUM_OUTPUTS
Number of cargo types an industry can produce.
Definition: industry_type.h:39
INDUSTRYBEH_CARGOTYPES_UNLIMITED
@ INDUSTRYBEH_CARGOTYPES_UNLIMITED
Allow produced/accepted cargoes callbacks to supply more than 2 and 3 types.
Definition: industrytype.h:76
IndustrySpec::UsesOriginalEconomy
bool UsesOriginalEconomy() const
Determines whether this industrytype uses standard/newgrf production changes.
Definition: industry_cmd.cpp:3167
landscape_type.h
INDUSTRYBEH_AFTER_1960
@ INDUSTRYBEH_AFTER_1960
can only be built after 1960 (oil rigs)
Definition: industrytype.h:66
newgrf_commons.h
INDUSTRYBEH_NO_PAX_PROD_CLAMP
@ INDUSTRYBEH_NO_PAX_PROD_CLAMP
Do not clamp production of passengers. (smooth economy only)
Definition: industrytype.h:77
IndustryConstructionType
IndustryConstructionType
How was the industry created.
Definition: industrytype.h:47
CHECK_FOREST
@ CHECK_FOREST
Industry should be build above snow-line in arctic climate.
Definition: industrytype.h:35
IndustrySpec::GetRemovalCost
Money GetRemovalCost() const
Get the cost for removing this industry Take note that the cost will always be zero for non-grf indus...
Definition: industry_cmd.cpp:3158
INDUSTRY_NUM_INPUTS
static const int INDUSTRY_NUM_INPUTS
Number of cargo types an industry can accept.
Definition: industry_type.h:38
IndustrySpec::GetConstructionCost
Money GetConstructionCost() const
Get the cost for constructing this industry.
Definition: industry_cmd.cpp:3145
StringID
uint32_t StringID
Numeric value that represents a string, independent of the selected language.
Definition: strings_type.h:16
IndustryTileSpec::anim_production
uint8_t anim_production
Animation frame to start when goods are produced.
Definition: industrytype.h:153
IndustryTileSpec::anim_state
bool anim_state
When true, the tile has to be drawn using the animation state instead of the construction state.
Definition: industrytype.h:159
INDUSTRYBEH_CAN_SUBSIDENCE
@ INDUSTRYBEH_CAN_SUBSIDENCE
can cause a subsidence (coal mine, shaft that collapses)
Definition: industrytype.h:70
AnimationInfo
Information about animation.
Definition: newgrf_animation_type.h:18
INDUSTRYBEH_DONT_INCR_PROD
@ INDUSTRYBEH_DONT_INCR_PROD
do not increase production (oil wells) in the temperate climate
Definition: industrytype.h:64
IndustryTileSpec::anim_next
uint8_t anim_next
Next frame in an animation.
Definition: industrytype.h:154
IndustryTileSpec::acceptance
std::array< int8_t, INDUSTRY_NUM_INPUTS > acceptance
Level of acceptance per cargo type (signed, may be negative!)
Definition: industrytype.h:151
IndustryTileSpec::callback_mask
uint8_t callback_mask
Bitmask of industry tile callbacks that have to be called.
Definition: industrytype.h:161
CHECK_BUBBLEGEN
@ CHECK_BUBBLEGEN
Industry should be in low land.
Definition: industrytype.h:41
IndustrySpec::appear_creation
uint8_t appear_creation[NUM_LANDSCAPE]
Probability of appearance during map creation.
Definition: industrytype.h:130
INDTILE_SPECIAL_NEXTFRAME_RANDOMBITS
@ INDTILE_SPECIAL_NEXTFRAME_RANDOMBITS
Callback 0x26 needs random bits.
Definition: industrytype.h:84
IndustrySpec::station_name
StringID station_name
Default name for nearby station.
Definition: industrytype.h:128
IndustryTileSpec::accepts_cargo
std::array< CargoID, INDUSTRY_NUM_INPUTS > accepts_cargo
Cargo accepted by this tile.
Definition: industrytype.h:149
IndustrySpec::cost_multiplier
uint8_t cost_multiplier
Base construction cost multiplier.
Definition: industrytype.h:103
IndustrySpec::minimal_cargo
uint8_t minimal_cargo
minimum amount of cargo transported to the stations.
Definition: industrytype.h:115
INDUSTRYBEH_NOBUILT_MAPCREATION
@ INDUSTRYBEH_NOBUILT_MAPCREATION
Do not force one instance of this type to appear on map generation.
Definition: industrytype.h:74
IndustrySpec::map_colour
uint8_t map_colour
colour used for the small map
Definition: industrytype.h:122
IndustryTileLayout
std::vector< IndustryTileLayoutTile > IndustryTileLayout
A complete tile layout for an industry is a list of tiles.
Definition: industrytype.h:96
INDUSTRYBEH_PLANT_ON_BUILT
@ INDUSTRYBEH_PLANT_ON_BUILT
Fields are planted around when built (all farms)
Definition: industrytype.h:63
IndustrySpec::closure_text
StringID closure_text
Message appearing when the industry closes.
Definition: industrytype.h:125
INDUSTRYBEH_AIRPLANE_ATTACKS
@ INDUSTRYBEH_AIRPLANE_ATTACKS
can be exploded by a military airplane (oil refinery)
Definition: industrytype.h:68
IndustryTileSpec::special_flags
IndustryTileSpecialFlags special_flags
Bitmask of extra flags used by the tile.
Definition: industrytype.h:163
GRFFileProps::override
uint16_t override
id of the entity been replaced by
Definition: newgrf_commons.h:322
INDUSTRYBEH_AI_AIRSHIP_ROUTES
@ INDUSTRYBEH_AI_AIRSHIP_ROUTES
ai will attempt to establish air/ship routes to this industry (oil rig)
Definition: industrytype.h:67
CHECK_END
@ CHECK_END
End marker of the industry check procedures.
Definition: industrytype.h:43
IndustrySpec::IsRawIndustry
bool IsRawIndustry() const
Is an industry with the spec a raw industry?
Definition: industry_cmd.cpp:3125
IndustrySpec::conflicting
IndustryType conflicting[3]
Industries this industry cannot be close to.
Definition: industrytype.h:106
INDUSTRYBEH_PLANT_FIELDS
@ INDUSTRYBEH_PLANT_FIELDS
periodically plants fields around itself (temp and arctic farms)
Definition: industrytype.h:57
IndustrySpec::appear_ingame
uint8_t appear_ingame[NUM_LANDSCAPE]
Probability of appearance in game.
Definition: industrytype.h:129
IndustrySpec::layouts
std::vector< IndustryTileLayout > layouts
List of possible tile layouts for the industry.
Definition: industrytype.h:102
cargo_type.h
map_type.h
INVALID_INDUSTRYTILE
static const IndustryGfx INVALID_INDUSTRYTILE
one above amount is considered invalid
Definition: industry_type.h:34
GRFFileProps
Data related to the handling of grf files.
Definition: newgrf_commons.h:317
INDUSTRYBEH_BUILT_ONWATER
@ INDUSTRYBEH_BUILT_ONWATER
is built on water (oil rig)
Definition: industrytype.h:59
IndustrySpec::production_up_text
StringID production_up_text
Message appearing when the industry's production is increasing.
Definition: industrytype.h:126
IndustryTileSpec::slopes_refused
Slope slopes_refused
slope pattern on which this tile cannot be built
Definition: industrytype.h:152
ICT_UNKNOWN
@ ICT_UNKNOWN
in previous game version or without newindustries activated
Definition: industrytype.h:48
INDUSTRYBEH_PRODCALLBACK_RANDOM
@ INDUSTRYBEH_PRODCALLBACK_RANDOM
Production callback needs random bits in var 10.
Definition: industrytype.h:73
IndustryTileSpec::enabled
bool enabled
entity still available (by default true).newgrf can disable it, though
Definition: industrytype.h:164
INDUSTRYBEH_BEFORE_1950
@ INDUSTRYBEH_BEFORE_1950
can only be built before 1950 (oil wells)
Definition: industrytype.h:65
IndustrySpec::prospecting_chance
uint32_t prospecting_chance
Chance prospecting succeeds.
Definition: industrytype.h:105
NUM_INDUSTRYTILES
static const IndustryGfx NUM_INDUSTRYTILES
total number of industry tiles, new and old
Definition: industry_type.h:33
INDUSTRYLIFE_BLACK_HOLE
@ INDUSTRYLIFE_BLACK_HOLE
Like power plants and banks.
Definition: industrytype.h:23
industry_type.h
CHECK_FARM
@ CHECK_FARM
Industry should be below snow-line in arctic.
Definition: industrytype.h:37
IndustrySpec
Defines the data structure for constructing industry.
Definition: industrytype.h:101
IndustryTileSpec::grf_prop
GRFFileProps grf_prop
properties related to the grf file
Definition: industrytype.h:165
ICT_MAP_GENERATION
@ ICT_MAP_GENERATION
during random map creation
Definition: industrytype.h:50
IndustrySpec::callback_mask
uint16_t callback_mask
Bitmask of industry callbacks that have to be called.
Definition: industrytype.h:132
TileIndexDiffC
A pair-construct of a TileIndexDiff.
Definition: map_type.h:31
INDUSTRYLIFE_PROCESSING
@ INDUSTRYLIFE_PROCESSING
Like factories.
Definition: industrytype.h:26
IndustrySpec::enabled
bool enabled
entity still available (by default true).newgrf can disable it, though
Definition: industrytype.h:133
IndustrySpec::IsProcessingIndustry
bool IsProcessingIndustry() const
Is an industry with the spec a processing industry?
Definition: industry_cmd.cpp:3134
IndustrySpec::random_sounds
std::vector< uint8_t > random_sounds
Random sounds;.
Definition: industrytype.h:135
CHECK_OIL_RIG
@ CHECK_OIL_RIG
Industries at sea should be positioned near edge of the map.
Definition: industrytype.h:42
IndustrySpec::removal_cost_multiplier
uint32_t removal_cost_multiplier
Base removal cost multiplier.
Definition: industrytype.h:104
IndustrySpec::check_proc
uint8_t check_proc
Index to a procedure to check for conflicting circumstances.
Definition: industrytype.h:107
CHECK_LUMBERMILL
@ CHECK_LUMBERMILL
Industry should be in the rain forest.
Definition: industrytype.h:40
INDUSTRYBEH_ONLY_NEARTOWN
@ INDUSTRYBEH_ONLY_NEARTOWN
is always built near towns (toy shop)
Definition: industrytype.h:62
Slope
Slope
Enumeration for the slope-type.
Definition: slope_type.h:48
IndustryTileSpec::animation
AnimationInfo animation
Information about the animation (is it looping, how many loops etc)
Definition: industrytype.h:162
INDUSTRYBEH_PROD_MULTI_HNDLING
@ INDUSTRYBEH_PROD_MULTI_HNDLING
Automatic production multiplier handling.
Definition: industrytype.h:72
ICT_SCENARIO_EDITOR
@ ICT_SCENARIO_EDITOR
while editing a scenario
Definition: industrytype.h:51
ResetIndustries
void ResetIndustries()
This function initialize the spec arrays of both industry and industry tiles.
Definition: industry_cmd.cpp:80
INDUSTRYLIFE_ORGANIC
@ INDUSTRYLIFE_ORGANIC
Like forests.
Definition: industrytype.h:25
IndustrySpec::production_down_text
StringID production_down_text
Message appearing when the industry's production is decreasing.
Definition: industrytype.h:127
IndustrySpec::grf_prop
GRFFileProps grf_prop
properties related to the grf file
Definition: industrytype.h:134
IndustryTileLayoutTile
Definition of one tile in an industry tile layout.
Definition: industrytype.h:90
CHECK_NOTHING
@ CHECK_NOTHING
Always succeeds.
Definition: industrytype.h:34
IndustrySpec::life_type
IndustryLifeType life_type
This is also known as Industry production flag, in newgrf specs.
Definition: industrytype.h:119
DECLARE_ENUM_AS_BIT_SET
DECLARE_ENUM_AS_BIT_SET(GenderEthnicity) enum CompanyManagerFaceVariable
Bitgroups of the CompanyManagerFace variable.
Definition: company_manager_face.h:29
GetIndustrySpec
const IndustrySpec * GetIndustrySpec(IndustryType thistype)
Array of industries data.
Definition: industry_cmd.cpp:123
IndustrySpec::behaviour
IndustryBehaviour behaviour
How this industry will behave, and how others entities can use it.
Definition: industrytype.h:121
INDUSTRYBEH_CANCLOSE_LASTINSTANCE
@ INDUSTRYBEH_CANCLOSE_LASTINSTANCE
Allow closing down the last instance of this type.
Definition: industrytype.h:75
OverflowSafeInt< int64_t >
INDUSTRYBEH_CHOPPER_ATTACKS
@ INDUSTRYBEH_CHOPPER_ATTACKS
can be exploded by a military helicopter (factory)
Definition: industrytype.h:69
INDUSTRYBEH_TOWN1200_MORE
@ INDUSTRYBEH_TOWN1200_MORE
can only be built in towns larger than 1200 inhabitants (temperate bank)
Definition: industrytype.h:60
IndustryTileSpecialFlags
IndustryTileSpecialFlags
Flags for miscellaneous industry tile specialities.
Definition: industrytype.h:82
IndustrySpec::accepts_cargo
std::array< CargoID, INDUSTRY_NUM_INPUTS > accepts_cargo
16 accepted cargoes.
Definition: industrytype.h:116
SortIndustryTypes
void SortIndustryTypes()
Initialize the list of sorted industry types.
Definition: industry_gui.cpp:237
IndustrySpec::name
StringID name
Displayed name of the industry.
Definition: industrytype.h:123
IndustryBehaviour
IndustryBehaviour
Various industry behaviours mostly to represent original TTD specialities.
Definition: industrytype.h:55
IndustrySpec::new_industry_text
StringID new_industry_text
Message appearing when the industry is built.
Definition: industrytype.h:124
GetIndustryTileSpec
const IndustryTileSpec * GetIndustryTileSpec(IndustryGfx gfx)
Array of industry tiles data.
Definition: industry_cmd.cpp:137
_sorted_industry_types
std::array< IndustryType, NUM_INDUSTRYTYPES > _sorted_industry_types
Industry types sorted by name.
Definition: industry_gui.cpp:223
INDUSTRYBEH_CUT_TREES
@ INDUSTRYBEH_CUT_TREES
cuts trees and produce first output cargo from them (lumber mill)
Definition: industrytype.h:58
slope_type.h
IndustryTileSpec
Defines the data structure of each individual tile of an industry.
Definition: industrytype.h:148
newgrf_animation_type.h
CHECK_PLANTATION
@ CHECK_PLANTATION
Industry should NOT be in the desert.
Definition: industrytype.h:38
CheckProc
CheckProc
Available procedures to check whether an industry may build at a given location.
Definition: industrytype.h:33
IndustrySpec::input_cargo_multiplier
uint16_t input_cargo_multiplier[INDUSTRY_NUM_INPUTS][INDUSTRY_NUM_OUTPUTS]
Input cargo multipliers (multiply amount of incoming cargo for the produced cargoes)
Definition: industrytype.h:118
IndustrySpec::climate_availability
uint8_t climate_availability
Bitmask, giving landscape enums as bit position.
Definition: industrytype.h:120
CHECK_REFINERY
@ CHECK_REFINERY
Industry should be positioned near edge of the map.
Definition: industrytype.h:36
GetTranslatedIndustryTileID
IndustryGfx GetTranslatedIndustryTileID(IndustryGfx gfx)
Do industry gfx ID translation for NewGRFs.
Definition: industrytype.h:187
IndustryLifeType
IndustryLifeType
Available types of industry lifetimes.
Definition: industrytype.h:22
INDTILE_SPECIAL_ACCEPTS_ALL_CARGO
@ INDTILE_SPECIAL_ACCEPTS_ALL_CARGO
Tile always accepts all cargoes the associated industry accepts.
Definition: industrytype.h:85
ICT_NORMAL_GAMEPLAY
@ ICT_NORMAL_GAMEPLAY
either by user or random creation process
Definition: industrytype.h:49
INDUSTRYLIFE_EXTRACTIVE
@ INDUSTRYLIFE_EXTRACTIVE
Like mines.
Definition: industrytype.h:24