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