OpenTTD Source 20260621-master-g720d10536d
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 <https://www.gnu.org/licenses/old-licenses/gpl-2.0>.
6 */
7
9
10#ifndef ENGINE_TYPE_H
11#define ENGINE_TYPE_H
12
13#include "core/pool_type.hpp"
14#include "economy_type.h"
15#include "landscape_type.h"
16#include "newgrf_callbacks.h"
17#include "rail_type.h"
18#include "road_type.h"
19#include "cargo_type.h"
21#include "sound_type.h"
22#include "strings_type.h"
23#include "newgrf_badge_type.h"
24
27
28class Engine;
29
31enum class RailVehicleType : uint8_t {
35};
36
45
52
72
75 uint8_t image_index = 0;
77 uint8_t cost_factor = 0;
80 uint8_t ai_passenger_only = 0;
81 uint16_t max_speed = 0;
82 uint16_t power = 0;
83 uint16_t weight = 0;
84 uint8_t running_cost = 0;
85 Price running_cost_class{};
87 uint8_t capacity = 0;
88 uint16_t pow_wag_power = 0;
89 uint8_t pow_wag_weight = 0;
91 uint8_t shorten_factor = 0;
92 uint8_t tractive_effort = 0;
93 uint8_t air_drag = 0;
94 uint8_t user_def_data = 0;
95 int16_t curve_speed_mod = 0;
96};
97
100 uint8_t image_index = 0;
101 uint8_t cost_factor = 0;
102 uint8_t running_cost = 0;
103 uint8_t acceleration = 1;
104 uint16_t max_speed = 0;
105 uint16_t capacity = 0;
106 SoundID sfx{};
107 bool old_refittable = 0;
109 uint8_t ocean_speed_frac = 0;
110 uint8_t canal_speed_frac = 0;
111
118 uint ApplyWaterClassSpeedFrac(uint raw_speed, bool is_ocean) const
119 {
120 /* speed_frac == 0 means no reduction while 0xFF means reduction to 1/256. */
121 return raw_speed * (256 - (is_ocean ? this->ocean_speed_frac : this->canal_speed_frac)) / 256;
122 }
123};
124
130enum AircraftSubTypeBits : uint8_t {
131 AIR_HELI = 0,
133 AIR_FAST = 2
134};
135
138 uint8_t image_index = 0;
139 uint8_t cost_factor = 0;
140 uint8_t running_cost = 0;
141 uint8_t subtype = 0;
142 SoundID sfx{};
143 uint16_t max_speed = 0;
144 uint8_t acceleration = 0;
145 uint8_t mail_capacity = 0;
146 uint16_t passenger_capacity = 0;
147 uint16_t max_range = 0;
148};
149
152 uint8_t image_index = 0;
153 uint8_t cost_factor = 0;
154 uint8_t running_cost = 0;
155 Price running_cost_class{};
156 SoundID sfx{};
157 uint16_t max_speed = 0;
158 uint8_t capacity = 0;
159 uint8_t weight = 0;
160 uint8_t power = 0;
161 uint8_t tractive_effort = 0x4C;
162 uint8_t air_drag = 0;
164 uint8_t shorten_factor = 0;
166};
167
172enum class ExtraEngineFlag : uint8_t {
173 NoNews = 0,
177 HasCab = 4,
178};
179
182
200
203
212 uint8_t decay_speed = 0;
213 uint8_t load_amount = 0;
215 CargoType cargo_type{};
216 std::variant<CargoLabel, MixedCargoType> cargo_label{};
217 CargoTypes refit_mask{};
218 uint8_t refit_cost = 0;
221 int8_t retire_early = 0;
222 ExtraEngineFlags extra_flags{};
224 uint16_t cargo_age_period = 0;
226};
227
231enum class EngineFlag : uint8_t {
234};
235
238
242enum class EngineNameContext : uint8_t {
243 Generic = 0x00,
246 PreviewNews = 0x21,
248};
249
257inline uint64_t PackEngineNameDParam(EngineID engine_id, EngineNameContext context, uint32_t extra_data = 0)
258{
259 return engine_id.base() | (static_cast<uint64_t>(context) << 32) | (static_cast<uint64_t>(extra_data) << 40);
260}
261
262static const uint MAX_LENGTH_ENGINE_NAME_CHARS = 32;
263
264#endif /* ENGINE_TYPE_H */
Types related to cargoes...
EnumBitSet< CargoType, uint64_t > CargoTypes
Bitset of CargoType elements.
Definition cargo_type.h:113
CargoType
Cargo slots to indicate a cargo type within a game.
Definition cargo_type.h:22
Enum-as-bit-set wrapper.
StrongType::Typedef< int32_t, struct YearTag< struct Calendar >, StrongType::Compare, StrongType::Integer > Year
StrongType::Typedef< int32_t, DateTag< struct Calendar >, StrongType::Compare, StrongType::Integer > Date
Types related to the economy.
Price
Enumeration of all base prices for use with Prices.
AircraftSubTypeBits
AircraftVehicleInfo subtypes, bitmask type.
@ AIR_CTOL
Conventional Take Off and Landing, i.e. planes.
EnumBitSet< EngineMiscFlag, uint8_t > EngineMiscFlags
Bitset of EngineMiscFlag elements.
ExtraEngineFlag
Extra engine flags for NewGRF features.
@ HasCab
Train wagon has a cab and can lead a train when backing up, without any speed reduction.
@ 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.
EnumBitSet< EngineFlag, uint8_t > EngineFlags
Bitset of EngineFlag elements.
EngineMiscFlag
EngineInfo.misc_flags is a bitmask, with the following values.
@ NoDefaultCargoMultiplier
Use the new capacity algorithm. The default cargotype of the vehicle does not affect capacity multipl...
@ RailFlips
Rail vehicle has old depot-flip handling.
@ RoadIsTram
Road vehicle is a tram/light rail vehicle.
@ RailTilts
Rail vehicle tilts in curves.
@ NoBreakdownSmoke
Do not show black smoke during a breakdown.
@ Uses2CC
Vehicle uses two company colours.
@ SpriteStack
Draw vehicle by stacking multiple sprites.
@ RailIsMU
Rail vehicle is a multiple-unit (DMU/EMU).
@ AutoRefit
Automatic refitting is allowed.
VisualEffect
Meaning of the various bits of the visual effect.
Definition engine_type.h:54
@ VE_TYPE_DEFAULT
Use default from engine class.
Definition engine_type.h:61
@ VE_TYPE_COUNT
Number of bits used for the effect type.
Definition engine_type.h:60
@ VE_OFFSET_CENTRE
Value of offset corresponding to a position above the centre of the vehicle.
Definition engine_type.h:57
@ VE_TYPE_ELECTRIC
Electric sparks.
Definition engine_type.h:64
@ VE_TYPE_START
First bit used for the type of effect.
Definition engine_type.h:59
@ VE_OFFSET_COUNT
Number of bits used for the offset.
Definition engine_type.h:56
@ VE_ADVANCED_EFFECT
Flag for advanced effects.
Definition engine_type.h:67
@ VE_DISABLE_EFFECT
Flag to disable visual effect.
Definition engine_type.h:66
@ VE_TYPE_STEAM
Steam plumes.
Definition engine_type.h:62
@ VE_TYPE_DIESEL
Diesel fumes.
Definition engine_type.h:63
@ VE_DEFAULT
Default value to indicate that visual effect should be based on engine class.
Definition engine_type.h:70
@ VE_OFFSET_START
First bit that contains the offset (0 = front, 8 = centre, 15 = rear).
Definition engine_type.h:55
@ VE_DISABLE_WAGON_POWER
Flag to disable wagon power.
Definition engine_type.h:68
static const uint MAX_LENGTH_ENGINE_NAME_CHARS
The maximum length of an engine name in characters including '\0'.
PoolID< uint16_t, struct EngineIDTag, 64000, 0xFFFF > EngineID
Unique identification number of an engine.
Definition engine_type.h:26
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 StringParameter.
EngineFlag
Engine.flags is a bitmask, with the following values.
@ Available
This vehicle is available to everyone.
@ ExclusivePreview
This vehicle is in the exclusive preview stage, either being used or being offered to a company.
EngineClass
Type of rail engine.
Definition engine_type.h:38
@ Maglev
Maglev engine.
Definition engine_type.h:43
@ Steam
Steam rail engine.
Definition engine_type.h:39
@ Diesel
Diesel rail engine.
Definition engine_type.h:40
@ Electric
Electric rail engine.
Definition engine_type.h:41
@ Monorail
Mono rail engine.
Definition engine_type.h:42
EngineNameContext
Contexts an engine name can be shown in.
@ VehicleDetails
Name is shown in the vehicle details GUI.
@ PurchaseList
Name is shown in the purchase list (including autoreplace window 'Available vehicles' panel).
@ Generic
No specific context available.
@ AutoreplaceVehicleInUse
Name is show in the autoreplace window 'Vehicles in use' panel.
@ PreviewNews
Name is shown in exclusive preview or newspaper.
VehicleAccelerationModel
Acceleration model of a vehicle.
Definition engine_type.h:47
@ Normal
Default acceleration model.
Definition engine_type.h:48
RailVehicleType
Available types of rail vehicles.
Definition engine_type.h:31
@ Multihead
indicates a combination of two locomotives
Definition engine_type.h:33
@ Singlehead
indicates a "standalone" locomotive
Definition engine_type.h:32
@ Wagon
simple wagon, not motorized
Definition engine_type.h:34
EnumBitSet< ExtraEngineFlag, uint8_t > ExtraEngineFlags
Bitset of ExtraEngineFlag elements.
Types related to the landscape.
EnumBitSet< LandscapeType, uint8_t > LandscapeTypes
Bitset of LandscapeType elements.
Types related to NewGRF badges.
Callbacks that NewGRFs could implement.
EnumBitSet< VehicleCallbackMask, uint16_t > VehicleCallbackMasks
Bitset of VehicleCallbackMask elements.
Definition of Pool, structure used to access PoolItems, and PoolItem, base structure for Vehicle,...
The different types of rail.
EnumBitSet< RailType, uint64_t > RailTypes
Bitset of RailType elements.
Definition rail_type.h:36
@ RAILTYPE_RAIL
Standard non-electric rails.
Definition rail_type.h:27
Enums and other types related to roads.
RoadType
The different roadtypes we support.
Definition road_type.h:23
Types related to sounds.
Types related to strings.
uint32_t StringID
Numeric value that represents a string, independent of the selected language.
static const StringID INVALID_STRING_ID
Constant representing an invalid string (16bit in case it is used in savegames).
Information about a aircraft vehicle.
uint16_t max_speed
Maximum speed (1 unit = 8 mph = 12.8 km-ish/h).
uint8_t mail_capacity
Mail capacity (bags).
uint8_t subtype
Type of aircraft.
uint16_t passenger_capacity
Passenger capacity (persons).
uint16_t max_range
Maximum range of this aircraft.
Information about a vehicle.
uint16_t cargo_age_period
Number of ticks before carried cargo is aged.
TimerGameCalendar::Year base_life
Basic duration of engine availability (without random parts). 0xFF means infinite life.
LandscapeTypes climates
Climates supported by the engine.
EngineMiscFlags misc_flags
Miscellaneous flags.
EngineID variant_id
Engine variant ID. If set, will be treated specially in purchase lists.
StringID string_id
Default name of engine.
VehicleCallbackMasks callback_mask
Bitmask of vehicle callbacks that have to be called.
TimerGameCalendar::Date base_intro
Basic date of engine introduction (without random parts).
int8_t retire_early
Number of years early to retire vehicle.
TimerGameCalendar::Year lifelength
Lifetime of a single vehicle.
Templated helper to make a PoolID a single POD value.
Definition pool_type.hpp:50
Information about a rail vehicle.
Definition engine_type.h:74
uint16_t power
Power of engine (hp); For multiheaded engines the sum of both engine powers.
Definition engine_type.h:82
uint8_t user_def_data
Property 0x25: "User-defined bit mask" Used only for (very few) NewGRF vehicles.
Definition engine_type.h:94
uint8_t running_cost
Running cost of engine; For multiheaded engines the sum of both running costs.
Definition engine_type.h:84
uint8_t cost_factor
Purchase cost factor; For multiheaded engines the sum of both engine prices.
Definition engine_type.h:77
uint8_t shorten_factor
length on main map for this type is 8 - shorten_factor
Definition engine_type.h:91
RailTypes railtypes
Railtypes, mangled if elrail is disabled.
Definition engine_type.h:78
uint16_t pow_wag_power
Extra power applied to consist if wagon should be powered.
Definition engine_type.h:88
uint16_t max_speed
Maximum speed (1 unit = 1/1.6 mph = 1 km-ish/h).
Definition engine_type.h:81
int16_t curve_speed_mod
Modifier to maximum speed in curves (fixed-point binary with 8 fractional bits).
Definition engine_type.h:95
RailVehicleType railveh_type
Type of rail vehicle.
Definition engine_type.h:76
uint16_t weight
Weight of vehicle (tons); For multiheaded engines the weight of each single engine.
Definition engine_type.h:83
uint8_t capacity
Cargo capacity of vehicle; For multiheaded engines the capacity of each single engine.
Definition engine_type.h:87
uint8_t visual_effect
Bitstuffed NewGRF visual effect data.
Definition engine_type.h:90
uint8_t air_drag
Coefficient of air drag.
Definition engine_type.h:93
RailTypes intended_railtypes
Intended railtypes, regardless of elrail being enabled or disabled.
Definition engine_type.h:79
EngineClass engclass
Class of engine for this vehicle.
Definition engine_type.h:86
uint8_t ai_passenger_only
Bit value to tell AI that this engine is for passenger use only.
Definition engine_type.h:80
uint8_t tractive_effort
Tractive effort coefficient.
Definition engine_type.h:92
uint8_t pow_wag_weight
Extra weight applied to consist if wagon should be powered.
Definition engine_type.h:89
Information about a road vehicle.
uint8_t tractive_effort
Coefficient of tractive effort.
uint16_t max_speed
Maximum speed (1 unit = 1/3.2 mph = 0.5 km-ish/h).
uint8_t air_drag
Coefficient of air drag.
uint8_t power
Power in 10hp units.
RoadType roadtype
Road type.
uint8_t weight
Weight in 1/4t units.
uint8_t shorten_factor
length on main map for this type is 8 - shorten_factor
uint8_t visual_effect
Bitstuffed NewGRF visual effect data.
Information about a ship vehicle.
Definition engine_type.h:99
bool old_refittable
Is ship refittable; only used during initialisation. Later use EngineInfo::refit_mask.
uint8_t ocean_speed_frac
Fraction of maximum speed for ocean tiles.
uint ApplyWaterClassSpeedFrac(uint raw_speed, bool is_ocean) const
Apply ocean/canal speed fraction to a velocity.
uint8_t visual_effect
Bitstuffed NewGRF visual effect data.
uint16_t max_speed
Maximum speed (1 unit = 1/3.2 mph = 0.5 km-ish/h).
uint8_t acceleration
Acceleration (1 unit = 1/3.2 mph per tick = 0.5 km-ish/h per tick).
uint8_t canal_speed_frac
Fraction of maximum speed for canal/river tiles.
Definition of the game-calendar-timer.