OpenTTD Source  20241108-master-g80f628063a
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;
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 */
Types related to cargoes...
DECLARE_ENUM_AS_BIT_SET(GenderEthnicity) enum CompanyManagerFaceVariable
Bitgroups of the CompanyManagerFace variable.
Types related to the industry.
static const int INDUSTRY_NUM_OUTPUTS
Number of cargo types an industry can produce.
Definition: industry_type.h:39
static const int INDUSTRY_NUM_INPUTS
Number of cargo types an industry can accept.
Definition: industry_type.h:38
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
static const IndustryGfx INVALID_INDUSTRYTILE
one above amount is considered invalid
Definition: industry_type.h:34
static const IndustryGfx NUM_INDUSTRYTILES
total number of industry tiles, new and old
Definition: industry_type.h:33
IndustryLifeType
Available types of industry lifetimes.
Definition: industrytype.h:22
@ INDUSTRYLIFE_EXTRACTIVE
Like mines.
Definition: industrytype.h:24
@ INDUSTRYLIFE_BLACK_HOLE
Like power plants and banks.
Definition: industrytype.h:23
@ INDUSTRYLIFE_PROCESSING
Like factories.
Definition: industrytype.h:26
@ INDUSTRYLIFE_ORGANIC
Like forests.
Definition: industrytype.h:25
const IndustryTileSpec * GetIndustryTileSpec(IndustryGfx gfx)
Array of industry tiles data.
IndustryConstructionType
How was the industry created.
Definition: industrytype.h:47
@ ICT_UNKNOWN
in previous game version or without newindustries activated
Definition: industrytype.h:48
@ ICT_MAP_GENERATION
during random map creation
Definition: industrytype.h:50
@ ICT_NORMAL_GAMEPLAY
either by user or random creation process
Definition: industrytype.h:49
@ ICT_SCENARIO_EDITOR
while editing a scenario
Definition: industrytype.h:51
CheckProc
Available procedures to check whether an industry may build at a given location.
Definition: industrytype.h:33
@ CHECK_REFINERY
Industry should be positioned near edge of the map.
Definition: industrytype.h:36
@ CHECK_END
End marker of the industry check procedures.
Definition: industrytype.h:43
@ CHECK_PLANTATION
Industry should NOT be in the desert.
Definition: industrytype.h:38
@ CHECK_OIL_RIG
Industries at sea should be positioned near edge of the map.
Definition: industrytype.h:42
@ CHECK_LUMBERMILL
Industry should be in the rain forest.
Definition: industrytype.h:40
@ CHECK_WATER
Industry should be in the desert.
Definition: industrytype.h:39
@ CHECK_BUBBLEGEN
Industry should be in low land.
Definition: industrytype.h:41
@ CHECK_FOREST
Industry should be build above snow-line in arctic climate.
Definition: industrytype.h:35
@ CHECK_FARM
Industry should be below snow-line in arctic.
Definition: industrytype.h:37
@ CHECK_NOTHING
Always succeeds.
Definition: industrytype.h:34
IndustryGfx GetTranslatedIndustryTileID(IndustryGfx gfx)
Do industry gfx ID translation for NewGRFs.
Definition: industrytype.h:187
std::vector< IndustryTileLayoutTile > IndustryTileLayout
A complete tile layout for an industry is a list of tiles.
Definition: industrytype.h:96
std::array< IndustryType, NUM_INDUSTRYTYPES > _sorted_industry_types
Industry types sorted by name.
IndustryBehaviour
Various industry behaviours mostly to represent original TTD specialities.
Definition: industrytype.h:55
@ INDUSTRYBEH_PROD_MULTI_HNDLING
Automatic production multiplier handling.
Definition: industrytype.h:72
@ INDUSTRYBEH_CAN_SUBSIDENCE
can cause a subsidence (coal mine, shaft that collapses)
Definition: industrytype.h:70
@ INDUSTRYBEH_AIRPLANE_ATTACKS
can be exploded by a military airplane (oil refinery)
Definition: industrytype.h:68
@ INDUSTRYBEH_CHOPPER_ATTACKS
can be exploded by a military helicopter (factory)
Definition: industrytype.h:69
@ INDUSTRYBEH_DONT_INCR_PROD
do not increase production (oil wells) in the temperate climate
Definition: industrytype.h:64
@ INDUSTRYBEH_PLANT_ON_BUILT
Fields are planted around when built (all farms)
Definition: industrytype.h:63
@ INDUSTRYBEH_CARGOTYPES_UNLIMITED
Allow produced/accepted cargoes callbacks to supply more than 2 and 3 types.
Definition: industrytype.h:76
@ INDUSTRYBEH_NO_PAX_PROD_CLAMP
Do not clamp production of passengers. (smooth economy only)
Definition: industrytype.h:77
@ INDUSTRYBEH_PRODCALLBACK_RANDOM
Production callback needs random bits in var 10.
Definition: industrytype.h:73
@ INDUSTRYBEH_AFTER_1960
can only be built after 1960 (oil rigs)
Definition: industrytype.h:66
@ INDUSTRYBEH_CUT_TREES
cuts trees and produce first output cargo from them (lumber mill)
Definition: industrytype.h:58
@ INDUSTRYBEH_BUILT_ONWATER
is built on water (oil rig)
Definition: industrytype.h:59
@ INDUSTRYBEH_PLANT_FIELDS
periodically plants fields around itself (temp and arctic farms)
Definition: industrytype.h:57
@ INDUSTRYBEH_CANCLOSE_LASTINSTANCE
Allow closing down the last instance of this type.
Definition: industrytype.h:75
@ INDUSTRYBEH_ONLY_NEARTOWN
is always built near towns (toy shop)
Definition: industrytype.h:62
@ INDUSTRYBEH_TOWN1200_MORE
can only be built in towns larger than 1200 inhabitants (temperate bank)
Definition: industrytype.h:60
@ INDUSTRYBEH_ONLY_INTOWN
can only be built in towns (arctic/tropic banks, water tower)
Definition: industrytype.h:61
@ INDUSTRYBEH_BEFORE_1950
can only be built before 1950 (oil wells)
Definition: industrytype.h:65
@ INDUSTRYBEH_AI_AIRSHIP_ROUTES
ai will attempt to establish air/ship routes to this industry (oil rig)
Definition: industrytype.h:67
@ INDUSTRYBEH_NOBUILT_MAPCREATION
Do not force one instance of this type to appear on map generation.
Definition: industrytype.h:74
void ResetIndustries()
This function initialize the spec arrays of both industry and industry tiles.
IndustryTileSpecialFlags
Flags for miscellaneous industry tile specialities.
Definition: industrytype.h:82
@ INDTILE_SPECIAL_ACCEPTS_ALL_CARGO
Tile always accepts all cargoes the associated industry accepts.
Definition: industrytype.h:85
@ INDTILE_SPECIAL_NEXTFRAME_RANDOMBITS
Callback 0x26 needs random bits.
Definition: industrytype.h:84
const IndustrySpec * GetIndustrySpec(IndustryType thistype)
Array of industries data.
void SortIndustryTypes()
Initialize the list of sorted industry types.
Types related to the landscape.
Types related to maps.
Definitions related to NewGRF animation.
This file simplyfies and embeds a common mechanism of loading/saving and mapping of grf entities.
Definitions of a slope.
Slope
Enumeration for the slope-type.
Definition: slope_type.h:48
uint32_t StringID
Numeric value that represents a string, independent of the selected language.
Definition: strings_type.h:16
Information about animation.
Data related to the handling of grf files.
uint16_t override
id of the entity been replaced by
Defines the data structure for constructing industry.
Definition: industrytype.h:101
bool IsProcessingIndustry() const
Is an industry with the spec a processing industry?
std::vector< uint8_t > random_sounds
Random sounds;.
Definition: industrytype.h:135
uint16_t callback_mask
Bitmask of industry callbacks that have to be called.
Definition: industrytype.h:132
Money GetRemovalCost() const
Get the cost for removing this industry Take note that the cost will always be zero for non-grf indus...
uint8_t appear_creation[NUM_LANDSCAPE]
Probability of appearance during map creation.
Definition: industrytype.h:130
std::array< CargoID, INDUSTRY_NUM_INPUTS > accepts_cargo
16 accepted cargoes.
Definition: industrytype.h:116
bool UsesOriginalEconomy() const
Determines whether this industrytype uses standard/newgrf production changes.
uint8_t minimal_cargo
minimum amount of cargo transported to the stations.
Definition: industrytype.h:115
uint32_t removal_cost_multiplier
Base removal cost multiplier.
Definition: industrytype.h:104
uint32_t prospecting_chance
Chance prospecting succeeds.
Definition: industrytype.h:105
StringID production_up_text
Message appearing when the industry's production is increasing.
Definition: industrytype.h:126
StringID name
Displayed name of the industry.
Definition: industrytype.h:123
uint8_t climate_availability
Bitmask, giving landscape enums as bit position.
Definition: industrytype.h:120
uint8_t cost_multiplier
Base construction cost multiplier.
Definition: industrytype.h:103
IndustryBehaviour behaviour
How this industry will behave, and how others entities can use it.
Definition: industrytype.h:121
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
bool IsRawIndustry() const
Is an industry with the spec a raw industry?
IndustryType conflicting[3]
Industries this industry cannot be close to.
Definition: industrytype.h:106
uint8_t appear_ingame[NUM_LANDSCAPE]
Probability of appearance in game.
Definition: industrytype.h:129
GRFFileProps grf_prop
properties related to the grf file
Definition: industrytype.h:134
StringID production_down_text
Message appearing when the industry's production is decreasing.
Definition: industrytype.h:127
StringID station_name
Default name for nearby station.
Definition: industrytype.h:128
IndustryLifeType life_type
This is also known as Industry production flag, in newgrf specs.
Definition: industrytype.h:119
StringID closure_text
Message appearing when the industry closes.
Definition: industrytype.h:125
StringID new_industry_text
Message appearing when the industry is built.
Definition: industrytype.h:124
std::vector< IndustryTileLayout > layouts
List of possible tile layouts for the industry.
Definition: industrytype.h:102
bool enabled
entity still available (by default true).newgrf can disable it, though
Definition: industrytype.h:133
Money GetConstructionCost() const
Get the cost for constructing this industry.
uint8_t map_colour
colour used for the small map
Definition: industrytype.h:122
uint8_t check_proc
Index to a procedure to check for conflicting circumstances.
Definition: industrytype.h:107
Definition of one tile in an industry tile layout.
Definition: industrytype.h:90
Defines the data structure of each individual tile of an industry.
Definition: industrytype.h:148
uint8_t anim_next
Next frame in an animation.
Definition: industrytype.h:154
IndustryTileSpecialFlags special_flags
Bitmask of extra flags used by the tile.
Definition: industrytype.h:163
std::array< CargoID, INDUSTRY_NUM_INPUTS > accepts_cargo
Cargo accepted by this tile.
Definition: industrytype.h:149
GRFFileProps grf_prop
properties related to the grf file
Definition: industrytype.h:165
Slope slopes_refused
slope pattern on which this tile cannot be built
Definition: industrytype.h:152
AnimationInfo animation
Information about the animation (is it looping, how many loops etc)
Definition: industrytype.h:162
std::array< int8_t, INDUSTRY_NUM_INPUTS > acceptance
Level of acceptance per cargo type (signed, may be negative!)
Definition: industrytype.h:151
uint8_t callback_mask
Bitmask of industry tile callbacks that have to be called.
Definition: industrytype.h:161
bool enabled
entity still available (by default true).newgrf can disable it, though
Definition: industrytype.h:164
bool anim_state
When true, the tile has to be drawn using the animation state instead of the construction state.
Definition: industrytype.h:159
uint8_t anim_production
Animation frame to start when goods are produced.
Definition: industrytype.h:153
A pair-construct of a TileIndexDiff.
Definition: map_type.h:31