OpenTTD Source 20250612-master-gb012d9e3dc
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 "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
28struct Engine;
29
36
45
48 uint8_t image_index = 0;
49 RailVehicleTypes railveh_type{};
50 uint8_t cost_factor = 0;
53 uint8_t ai_passenger_only = 0;
54 uint16_t max_speed = 0;
55 uint16_t power = 0;
56 uint16_t weight = 0;
57 uint8_t running_cost = 0;
58 Price running_cost_class{};
60 uint8_t capacity = 0;
61 uint16_t pow_wag_power = 0;
62 uint8_t pow_wag_weight = 0;
63 uint8_t visual_effect = 0;
64 uint8_t shorten_factor = 0;
65 uint8_t tractive_effort = 0;
66 uint8_t air_drag = 0;
67 uint8_t user_def_data = 0;
68 int16_t curve_speed_mod = 0;
69};
70
73 uint8_t image_index = 0;
74 uint8_t cost_factor = 0;
75 uint8_t running_cost = 0;
76 uint8_t acceleration = 0;
77 uint16_t max_speed = 0;
78 uint16_t capacity = 0;
79 SoundID sfx{};
80 bool old_refittable = 0;
81 uint8_t visual_effect = 0;
82 uint8_t ocean_speed_frac = 0;
83 uint8_t canal_speed_frac = 0;
84
86 uint ApplyWaterClassSpeedFrac(uint raw_speed, bool is_ocean) const
87 {
88 /* speed_frac == 0 means no reduction while 0xFF means reduction to 1/256. */
89 return raw_speed * (256 - (is_ocean ? this->ocean_speed_frac : this->canal_speed_frac)) / 256;
90 }
91};
92
98enum AircraftSubTypeBits : uint8_t {
99 AIR_HELI = 0,
101 AIR_FAST = 2
102};
103
106 uint8_t image_index = 0;
107 uint8_t cost_factor = 0;
108 uint8_t running_cost = 0;
109 uint8_t subtype = 0;
110 SoundID sfx{};
111 uint16_t max_speed = 0;
112 uint8_t acceleration = 0;
113 uint8_t mail_capacity = 0;
114 uint16_t passenger_capacity = 0;
115 uint16_t max_range = 0;
116};
117
120 uint8_t image_index = 0;
121 uint8_t cost_factor = 0;
122 uint8_t running_cost = 0;
123 Price running_cost_class{};
124 SoundID sfx{};
125 uint16_t max_speed = 0;
126 uint8_t capacity = 0;
127 uint8_t weight = 0;
128 uint8_t power = 0;
129 uint8_t tractive_effort = 0;
130 uint8_t air_drag = 0;
131 uint8_t visual_effect = 0;
132 uint8_t shorten_factor = 0;
134};
135
140enum class ExtraEngineFlag : uint8_t {
141 NoNews = 0,
142 NoPreview = 1,
143 JoinPreview = 2,
144 SyncReliability = 3,
145};
147
151enum class EngineMiscFlag : uint8_t {
152 RailTilts = 0,
153 RoadIsTram = 0,
154
155 Uses2CC = 1,
156
157 RailIsMU = 2,
158 RailFlips = 3,
159
160 AutoRefit = 4,
162 NoBreakdownSmoke = 6,
163 SpriteStack = 7,
164};
166
175 uint8_t decay_speed = 0;
176 uint8_t load_amount = 0;
178 CargoType cargo_type{};
179 std::variant<CargoLabel, MixedCargoType> cargo_label{};
180 CargoTypes refit_mask{};
181 uint8_t refit_cost = 0;
184 int8_t retire_early = 0;
185 ExtraEngineFlags extra_flags{};
187 uint16_t cargo_age_period = 0;
189};
190
194enum class EngineFlag : uint8_t {
195 Available = 0,
196 ExclusivePreview = 1,
197};
199
203enum class EngineNameContext : uint8_t {
204 Generic = 0x00,
205 VehicleDetails = 0x11,
206 PurchaseList = 0x20,
207 PreviewNews = 0x21,
209};
210
212inline uint64_t PackEngineNameDParam(EngineID engine_id, EngineNameContext context, uint32_t extra_data = 0)
213{
214 return engine_id.base() | (static_cast<uint64_t>(context) << 32) | (static_cast<uint64_t>(extra_data) << 40);
215}
216
217static const uint MAX_LENGTH_ENGINE_NAME_CHARS = 32;
218
219#endif /* ENGINE_TYPE_H */
Types related to cargoes...
uint8_t CargoType
Cargo slots to indicate a cargo type within a game.
Definition cargo_type.h:23
Types related to the economy.
Price
Enumeration of all base prices for use with Prices.
AircraftSubTypeBits
AircraftVehicleInfo subtypes, bitmask type.
Definition engine_type.h:98
@ AIR_CTOL
Conventional Take Off and Landing, i.e. planes.
ExtraEngineFlag
Extra engine flags for NewGRF features.
@ 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.
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.
static const uint MAX_LENGTH_ENGINE_NAME_CHARS
The maximum length of an engine name in characters including '\0'.
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.
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
@ EC_DIESEL
Diesel rail engine.
Definition engine_type.h:40
@ EC_STEAM
Steam rail engine.
Definition engine_type.h:39
@ EC_MAGLEV
Maglev engine.
Definition engine_type.h:43
@ EC_ELECTRIC
Electric rail engine.
Definition engine_type.h:41
@ EC_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.
RailVehicleTypes
Available types of rail vehicles.
Definition engine_type.h:31
@ RAILVEH_SINGLEHEAD
indicates a "standalone" locomotive
Definition engine_type.h:32
@ RAILVEH_WAGON
simple wagon, not motorized
Definition engine_type.h:34
@ RAILVEH_MULTIHEAD
indicates a combination of two locomotives
Definition engine_type.h:33
Types related to the landscape.
Types related to NewGRF badges.
Callbacks that NewGRFs could implement.
Definition of Pool, structure used to access PoolItems, and PoolItem, base structure for Vehicle,...
The different types of rail.
RailType
Enumeration for all possible railtypes.
Definition rail_type.h:25
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.
Information about a rail vehicle.
Definition engine_type.h:47
uint16_t power
Power of engine (hp); For multiheaded engines the sum of both engine powers.
Definition engine_type.h:55
uint8_t user_def_data
Property 0x25: "User-defined bit mask" Used only for (very few) NewGRF vehicles.
Definition engine_type.h:67
uint8_t running_cost
Running cost of engine; For multiheaded engines the sum of both running costs.
Definition engine_type.h:57
uint8_t cost_factor
Purchase cost factor; For multiheaded engines the sum of both engine prices.
Definition engine_type.h:50
uint8_t shorten_factor
length on main map for this type is 8 - shorten_factor
Definition engine_type.h:64
RailType intended_railtype
Intended railtype, regardless of elrail being enabled or disabled.
Definition engine_type.h:52
uint16_t pow_wag_power
Extra power applied to consist if wagon should be powered.
Definition engine_type.h:61
uint16_t max_speed
Maximum speed (1 unit = 1/1.6 mph = 1 km-ish/h)
Definition engine_type.h:54
int16_t curve_speed_mod
Modifier to maximum speed in curves (fixed-point binary with 8 fractional bits)
Definition engine_type.h:68
uint16_t weight
Weight of vehicle (tons); For multiheaded engines the weight of each single engine.
Definition engine_type.h:56
uint8_t capacity
Cargo capacity of vehicle; For multiheaded engines the capacity of each single engine.
Definition engine_type.h:60
uint8_t visual_effect
Bitstuffed NewGRF visual effect data.
Definition engine_type.h:63
uint8_t air_drag
Coefficient of air drag.
Definition engine_type.h:66
EngineClass engclass
Class of engine for this vehicle.
Definition engine_type.h:59
uint8_t ai_passenger_only
Bit value to tell AI that this engine is for passenger use only.
Definition engine_type.h:53
RailType railtype
Railtype, mangled if elrail is disabled.
Definition engine_type.h:51
uint8_t tractive_effort
Tractive effort coefficient.
Definition engine_type.h:65
uint8_t pow_wag_weight
Extra weight applied to consist if wagon should be powered.
Definition engine_type.h:62
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:72
bool old_refittable
Is ship refittable; only used during initialisation. Later use EngineInfo::refit_mask.
Definition engine_type.h:80
uint8_t ocean_speed_frac
Fraction of maximum speed for ocean tiles.
Definition engine_type.h:82
uint ApplyWaterClassSpeedFrac(uint raw_speed, bool is_ocean) const
Apply ocean/canal speed fraction to a velocity.
Definition engine_type.h:86
uint8_t visual_effect
Bitstuffed NewGRF visual effect data.
Definition engine_type.h:81
uint16_t max_speed
Maximum speed (1 unit = 1/3.2 mph = 0.5 km-ish/h)
Definition engine_type.h:77
uint8_t acceleration
Acceleration (1 unit = 1/3.2 mph per tick = 0.5 km-ish/h per tick)
Definition engine_type.h:76
uint8_t canal_speed_frac
Fraction of maximum speed for canal/river tiles.
Definition engine_type.h:83
Templated helper to make a type-safe 'typedef' representing a single POD value.
Definition of the game-calendar-timer.