OpenTTD Source: src/engine_type.h Source File

OpenTTD Source 15.0-beta1

engine_type.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 ENGINE_TYPE_H
11#define ENGINE_TYPE_H
12
13#include "economy_type.h"
14#include "rail_type.h"
15#include "road_type.h"
16#include "cargo_type.h"
17#include "timer/timer_game_calendar.h"
18#include "sound_type.h"
19#include "strings_type.h"
20
21 typedef uint16_t EngineID;
22
23struct Engine;
24
26 enum RailVehicleTypes : uint8_t {
27 RAILVEH_SINGLEHEAD,
28 RAILVEH_MULTIHEAD,
29 RAILVEH_WAGON,
30};
31
33 enum EngineClass : uint8_t {
34 EC_STEAM,
35 EC_DIESEL,
36 EC_ELECTRIC,
37 EC_MONORAIL,
38 EC_MAGLEV,
39};
40
42 struct RailVehicleInfo {
43 uint8_t image_index;
44 RailVehicleTypes railveh_type;
45 uint8_t cost_factor;
46 RailType railtype;
47 RailType intended_railtype;
48 uint8_t ai_passenger_only;
49 uint16_t max_speed;
50 uint16_t power;
51 uint16_t weight;
52 uint8_t running_cost;
53 Price running_cost_class;
54 EngineClass engclass;
55 uint8_t capacity;
56 uint16_t pow_wag_power;
57 uint8_t pow_wag_weight;
58 uint8_t visual_effect;
59 uint8_t shorten_factor;
60 uint8_t tractive_effort;
61 uint8_t air_drag;
62 uint8_t user_def_data;
63 int16_t curve_speed_mod;
64};
65
67 struct ShipVehicleInfo {
68 uint8_t image_index;
69 uint8_t cost_factor;
70 uint8_t running_cost;
71 uint8_t acceleration;
72 uint16_t max_speed;
73 uint16_t capacity;
74 SoundID sfx;
75 bool old_refittable;
76 uint8_t visual_effect;
77 uint8_t ocean_speed_frac;
78 uint8_t canal_speed_frac;
79
81 uint ApplyWaterClassSpeedFrac(uint raw_speed, bool is_ocean) const
82 {
83 /* speed_frac == 0 means no reduction while 0xFF means reduction to 1/256. */
84 return raw_speed * (256 - (is_ocean ? this->ocean_speed_frac : this->canal_speed_frac)) / 256;
85 }
86};
87
93 enum AircraftSubTypeBits {
94 AIR_HELI = 0,
95 AIR_CTOL = 1,
96 AIR_FAST = 2
97};
98
100 struct AircraftVehicleInfo {
101 uint8_t image_index;
102 uint8_t cost_factor;
103 uint8_t running_cost;
104 uint8_t subtype;
105 SoundID sfx;
106 uint16_t max_speed;
107 uint8_t acceleration;
108 uint8_t mail_capacity;
109 uint16_t passenger_capacity;
110 uint16_t max_range;
111};
112
114 struct RoadVehicleInfo {
115 uint8_t image_index;
116 uint8_t cost_factor;
117 uint8_t running_cost;
118 Price running_cost_class;
119 SoundID sfx;
120 uint16_t max_speed;
121 uint8_t capacity;
122 uint8_t weight;
123 uint8_t power;
124 uint8_t tractive_effort;
125 uint8_t air_drag;
126 uint8_t visual_effect;
127 uint8_t shorten_factor;
128 RoadType roadtype;
129};
130
135 enum class ExtraEngineFlags : uint16_t {
136 None = 0,
137 NoNews = (1U << 0),
138 NoPreview = (1U << 1),
139 JoinPreview = (1U << 2),
140 SyncReliability = (1U << 3),
141};
142 DECLARE_ENUM_AS_BIT_SET(ExtraEngineFlags);
143
148 struct EngineInfo {
149 TimerGameCalendar::Date base_intro;
150 TimerGameCalendar::Year lifelength;
151 TimerGameCalendar::Year base_life;
152 uint8_t decay_speed;
153 uint8_t load_amount;
154 uint8_t climates;
155 CargoID cargo_type;
156 std::variant<CargoLabel, MixedCargoType> cargo_label;
157 CargoTypes refit_mask;
158 uint8_t refit_cost;
159 uint8_t misc_flags;
160 uint16_t callback_mask;
161 int8_t retire_early;
162 ExtraEngineFlags extra_flags;
163 StringID string_id;
164 uint16_t cargo_age_period;
165 EngineID variant_id;
166};
167
171 enum EngineMiscFlags {
172 EF_RAIL_TILTS = 0,
173 EF_ROAD_TRAM = 0,
174 EF_USES_2CC = 1,
175 EF_RAIL_IS_MU = 2,
176 EF_RAIL_FLIPS = 3,
177 EF_AUTO_REFIT = 4,
178 EF_NO_DEFAULT_CARGO_MULTIPLIER = 5,
179 EF_NO_BREAKDOWN_SMOKE = 6,
180 EF_SPRITE_STACK = 7,
181};
182
186 enum EngineFlags {
187 ENGINE_AVAILABLE = 1,
188 ENGINE_EXCLUSIVE_PREVIEW = 2,
189};
190
194 enum EngineNameContext : uint8_t {
195 Generic = 0x00,
196 VehicleDetails = 0x11,
197 PurchaseList = 0x20,
198 PreviewNews = 0x21,
199 AutoreplaceVehicleInUse = 0x22,
200};
201
203 inline uint64_t PackEngineNameDParam(EngineID engine_id, EngineNameContext context, uint32_t extra_data = 0)
204{
205 return engine_id | (static_cast<uint64_t>(context) << 32) | (static_cast<uint64_t>(extra_data) << 40);
206}
207
208 static const uint MAX_LENGTH_ENGINE_NAME_CHARS = 32;
209
210 static const EngineID INVALID_ENGINE = 0xFFFF;
211
212#endif /* ENGINE_TYPE_H */
AnimatedTileState::None
@ None
Tile is not animated.
cargo_type.h
Types related to cargoes...
CargoID
uint8_t CargoID
Cargo slots to indicate a cargo type within a game.
Definition cargo_type.h:22
economy_type.h
Types related to the economy.
Price
Price
Enumeration of all base prices for use with Prices.
Definition economy_type.h:89
ExtraEngineFlags
ExtraEngineFlags
Extra engine flags for NewGRF features.
Definition engine_type.h:135
ExtraEngineFlags::SyncReliability
@ SyncReliability
Engine reliability will be synced with variant parent.
ExtraEngineFlags::NoNews
@ NoNews
No 'new vehicle' news will be generated.
ExtraEngineFlags::JoinPreview
@ JoinPreview
Engine will join exclusive preview with variant parent.
ExtraEngineFlags::NoPreview
@ NoPreview
No exclusive preview will be offered.
MAX_LENGTH_ENGINE_NAME_CHARS
static const uint MAX_LENGTH_ENGINE_NAME_CHARS
The maximum length of an engine name in characters including '\0'.
Definition engine_type.h:208
INVALID_ENGINE
static const EngineID INVALID_ENGINE
Constant denoting an invalid engine.
Definition engine_type.h:210
EngineID
uint16_t EngineID
Unique identification number of an engine.
Definition engine_type.h:21
AircraftSubTypeBits
AircraftSubTypeBits
AircraftVehicleInfo subtypes, bitmask type.
Definition engine_type.h:93
AIR_CTOL
@ AIR_CTOL
Conventional Take Off and Landing, i.e. planes.
Definition engine_type.h:95
PackEngineNameDParam
uint64_t PackEngineNameDParam(EngineID engine_id, EngineNameContext context, uint32_t extra_data=0)
Combine an engine ID and a name context to an engine name dparam.
Definition engine_type.h:203
EngineClass
EngineClass
Type of rail engine.
Definition engine_type.h:33
EC_DIESEL
@ EC_DIESEL
Diesel rail engine.
Definition engine_type.h:35
EC_STEAM
@ EC_STEAM
Steam rail engine.
Definition engine_type.h:34
EC_MAGLEV
@ EC_MAGLEV
Maglev engine.
Definition engine_type.h:38
EC_ELECTRIC
@ EC_ELECTRIC
Electric rail engine.
Definition engine_type.h:36
EC_MONORAIL
@ EC_MONORAIL
Mono rail engine.
Definition engine_type.h:37
EngineFlags
EngineFlags
Engine.flags is a bitmask, with the following values.
Definition engine_type.h:186
ENGINE_EXCLUSIVE_PREVIEW
@ ENGINE_EXCLUSIVE_PREVIEW
This vehicle is in the exclusive preview stage, either being used or being offered to a company.
Definition engine_type.h:188
ENGINE_AVAILABLE
@ ENGINE_AVAILABLE
This vehicle is available to everyone.
Definition engine_type.h:187
EngineMiscFlags
EngineMiscFlags
EngineInfo.misc_flags is a bitmask, with the following values.
Definition engine_type.h:171
EF_USES_2CC
@ EF_USES_2CC
Vehicle uses two company colours.
Definition engine_type.h:174
EF_RAIL_TILTS
@ EF_RAIL_TILTS
Rail vehicle tilts in curves.
Definition engine_type.h:172
EF_NO_DEFAULT_CARGO_MULTIPLIER
@ EF_NO_DEFAULT_CARGO_MULTIPLIER
Use the new capacity algorithm. The default cargotype of the vehicle does not affect capacity multipl...
Definition engine_type.h:178
EF_ROAD_TRAM
@ EF_ROAD_TRAM
Road vehicle is a tram/light rail vehicle.
Definition engine_type.h:173
EF_RAIL_IS_MU
@ EF_RAIL_IS_MU
Rail vehicle is a multiple-unit (DMU/EMU)
Definition engine_type.h:175
EF_NO_BREAKDOWN_SMOKE
@ EF_NO_BREAKDOWN_SMOKE
Do not show black smoke during a breakdown.
Definition engine_type.h:179
EF_AUTO_REFIT
@ EF_AUTO_REFIT
Automatic refitting is allowed.
Definition engine_type.h:177
EF_RAIL_FLIPS
@ EF_RAIL_FLIPS
Rail vehicle has old depot-flip handling.
Definition engine_type.h:176
EF_SPRITE_STACK
@ EF_SPRITE_STACK
Draw vehicle by stacking multiple sprites.
Definition engine_type.h:180
EngineNameContext
EngineNameContext
Contexts an engine name can be shown in.
Definition engine_type.h:194
AutoreplaceVehicleInUse
@ AutoreplaceVehicleInUse
Name is show in the autoreplace window 'Vehicles in use' panel.
Definition engine_type.h:199
Generic
@ Generic
No specific context available.
Definition engine_type.h:195
PreviewNews
@ PreviewNews
Name is shown in exclusive preview or newspaper.
Definition engine_type.h:198
VehicleDetails
@ VehicleDetails
Name is shown in the vehicle details GUI.
Definition engine_type.h:196
PurchaseList
@ PurchaseList
Name is shown in the purchase list (including autoreplace window 'Available vehicles' panel).
Definition engine_type.h:197
RailVehicleTypes
RailVehicleTypes
Available types of rail vehicles.
Definition engine_type.h:26
RAILVEH_SINGLEHEAD
@ RAILVEH_SINGLEHEAD
indicates a "standalone" locomotive
Definition engine_type.h:27
RAILVEH_WAGON
@ RAILVEH_WAGON
simple wagon, not motorized
Definition engine_type.h:29
RAILVEH_MULTIHEAD
@ RAILVEH_MULTIHEAD
indicates a combination of two locomotives
Definition engine_type.h:28
DECLARE_ENUM_AS_BIT_SET
#define DECLARE_ENUM_AS_BIT_SET(enum_type)
Operators to allow to work with enum as with type safe bit set in C++.
Definition enum_type.hpp:35
rail_type.h
The different types of rail.
RailType
RailType
Enumeration for all possible railtypes.
Definition rail_type.h:27
road_type.h
Enums and other types related to roads.
RoadType
RoadType
The different roadtypes we support.
Definition road_type.h:25
sound_type.h
Types related to sounds.
strings_type.h
Types related to strings.
StringID
uint32_t StringID
Numeric value that represents a string, independent of the selected language.
Definition strings_type.h:16
AircraftVehicleInfo
Information about a aircraft vehicle.
Definition engine_type.h:100
AircraftVehicleInfo::max_speed
uint16_t max_speed
Maximum speed (1 unit = 8 mph = 12.8 km-ish/h)
Definition engine_type.h:106
AircraftVehicleInfo::mail_capacity
uint8_t mail_capacity
Mail capacity (bags).
Definition engine_type.h:108
AircraftVehicleInfo::subtype
uint8_t subtype
Type of aircraft.
Definition engine_type.h:104
AircraftVehicleInfo::passenger_capacity
uint16_t passenger_capacity
Passenger capacity (persons).
Definition engine_type.h:109
AircraftVehicleInfo::max_range
uint16_t max_range
Maximum range of this aircraft.
Definition engine_type.h:110
EngineInfo
Information about a vehicle.
Definition engine_type.h:148
EngineInfo::cargo_age_period
uint16_t cargo_age_period
Number of ticks before carried cargo is aged.
Definition engine_type.h:164
EngineInfo::base_life
TimerGameCalendar::Year base_life
Basic duration of engine availability (without random parts). 0xFF means infinite life.
Definition engine_type.h:151
EngineInfo::variant_id
EngineID variant_id
Engine variant ID. If set, will be treated specially in purchase lists.
Definition engine_type.h:165
EngineInfo::misc_flags
uint8_t misc_flags
Miscellaneous flags.
Definition engine_type.h:159
EngineInfo::string_id
StringID string_id
Default name of engine.
Definition engine_type.h:163
EngineInfo::climates
uint8_t climates
Climates supported by the engine.
Definition engine_type.h:154
EngineInfo::base_intro
TimerGameCalendar::Date base_intro
Basic date of engine introduction (without random parts).
Definition engine_type.h:149
EngineInfo::callback_mask
uint16_t callback_mask
Bitmask of vehicle callbacks that have to be called.
Definition engine_type.h:160
EngineInfo::retire_early
int8_t retire_early
Number of years early to retire vehicle.
Definition engine_type.h:161
EngineInfo::lifelength
TimerGameCalendar::Year lifelength
Lifetime of a single vehicle.
Definition engine_type.h:150
Engine
Definition engine_base.h:37
RailVehicleInfo
Information about a rail vehicle.
Definition engine_type.h:42
RailVehicleInfo::power
uint16_t power
Power of engine (hp); For multiheaded engines the sum of both engine powers.
Definition engine_type.h:50
RailVehicleInfo::user_def_data
uint8_t user_def_data
Property 0x25: "User-defined bit mask" Used only for (very few) NewGRF vehicles.
Definition engine_type.h:62
RailVehicleInfo::running_cost
uint8_t running_cost
Running cost of engine; For multiheaded engines the sum of both running costs.
Definition engine_type.h:52
RailVehicleInfo::cost_factor
uint8_t cost_factor
Purchase cost factor; For multiheaded engines the sum of both engine prices.
Definition engine_type.h:45
RailVehicleInfo::shorten_factor
uint8_t shorten_factor
length on main map for this type is 8 - shorten_factor
Definition engine_type.h:59
RailVehicleInfo::intended_railtype
RailType intended_railtype
Intended railtype, regardless of elrail being enabled or disabled.
Definition engine_type.h:47
RailVehicleInfo::pow_wag_power
uint16_t pow_wag_power
Extra power applied to consist if wagon should be powered.
Definition engine_type.h:56
RailVehicleInfo::max_speed
uint16_t max_speed
Maximum speed (1 unit = 1/1.6 mph = 1 km-ish/h)
Definition engine_type.h:49
RailVehicleInfo::curve_speed_mod
int16_t curve_speed_mod
Modifier to maximum speed in curves (fixed-point binary with 8 fractional bits)
Definition engine_type.h:63
RailVehicleInfo::weight
uint16_t weight
Weight of vehicle (tons); For multiheaded engines the weight of each single engine.
Definition engine_type.h:51
RailVehicleInfo::capacity
uint8_t capacity
Cargo capacity of vehicle; For multiheaded engines the capacity of each single engine.
Definition engine_type.h:55
RailVehicleInfo::visual_effect
uint8_t visual_effect
Bitstuffed NewGRF visual effect data.
Definition engine_type.h:58
RailVehicleInfo::air_drag
uint8_t air_drag
Coefficient of air drag.
Definition engine_type.h:61
RailVehicleInfo::engclass
EngineClass engclass
Class of engine for this vehicle.
Definition engine_type.h:54
RailVehicleInfo::ai_passenger_only
uint8_t ai_passenger_only
Bit value to tell AI that this engine is for passenger use only.
Definition engine_type.h:48
RailVehicleInfo::railtype
RailType railtype
Railtype, mangled if elrail is disabled.
Definition engine_type.h:46
RailVehicleInfo::tractive_effort
uint8_t tractive_effort
Tractive effort coefficient.
Definition engine_type.h:60
RailVehicleInfo::pow_wag_weight
uint8_t pow_wag_weight
Extra weight applied to consist if wagon should be powered.
Definition engine_type.h:57
RoadVehicleInfo
Information about a road vehicle.
Definition engine_type.h:114
RoadVehicleInfo::tractive_effort
uint8_t tractive_effort
Coefficient of tractive effort.
Definition engine_type.h:124
RoadVehicleInfo::max_speed
uint16_t max_speed
Maximum speed (1 unit = 1/3.2 mph = 0.5 km-ish/h)
Definition engine_type.h:120
RoadVehicleInfo::air_drag
uint8_t air_drag
Coefficient of air drag.
Definition engine_type.h:125
RoadVehicleInfo::power
uint8_t power
Power in 10hp units.
Definition engine_type.h:123
RoadVehicleInfo::roadtype
RoadType roadtype
Road type.
Definition engine_type.h:128
RoadVehicleInfo::weight
uint8_t weight
Weight in 1/4t units.
Definition engine_type.h:122
RoadVehicleInfo::shorten_factor
uint8_t shorten_factor
length on main map for this type is 8 - shorten_factor
Definition engine_type.h:127
RoadVehicleInfo::visual_effect
uint8_t visual_effect
Bitstuffed NewGRF visual effect data.
Definition engine_type.h:126
ShipVehicleInfo
Information about a ship vehicle.
Definition engine_type.h:67
ShipVehicleInfo::old_refittable
bool old_refittable
Is ship refittable; only used during initialisation. Later use EngineInfo::refit_mask.
Definition engine_type.h:75
ShipVehicleInfo::ocean_speed_frac
uint8_t ocean_speed_frac
Fraction of maximum speed for ocean tiles.
Definition engine_type.h:77
ShipVehicleInfo::ApplyWaterClassSpeedFrac
uint ApplyWaterClassSpeedFrac(uint raw_speed, bool is_ocean) const
Apply ocean/canal speed fraction to a velocity.
Definition engine_type.h:81
ShipVehicleInfo::visual_effect
uint8_t visual_effect
Bitstuffed NewGRF visual effect data.
Definition engine_type.h:76
ShipVehicleInfo::max_speed
uint16_t max_speed
Maximum speed (1 unit = 1/3.2 mph = 0.5 km-ish/h)
Definition engine_type.h:72
ShipVehicleInfo::acceleration
uint8_t acceleration
Acceleration (1 unit = 1/3.2 mph per tick = 0.5 km-ish/h per tick)
Definition engine_type.h:71
ShipVehicleInfo::canal_speed_frac
uint8_t canal_speed_frac
Fraction of maximum speed for canal/river tiles.
Definition engine_type.h:78
StrongType::Typedef
Templated helper to make a type-safe 'typedef' representing a single POD value.
Definition strong_typedef_type.hpp:150
timer_game_calendar.h
Definition of the game-calendar-timer.