OpenTTD Source 20251005-master-ga617d009cc
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
28class Engine;
29
36
45
47enum class VehicleAccelerationModel : uint8_t {
48 Normal,
49 Monorail,
50 Maglev,
51};
52
72
75 uint8_t image_index = 0;
76 RailVehicleTypes railveh_type = RAILVEH_WAGON;
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
113 uint ApplyWaterClassSpeedFrac(uint raw_speed, bool is_ocean) const
114 {
115 /* speed_frac == 0 means no reduction while 0xFF means reduction to 1/256. */
116 return raw_speed * (256 - (is_ocean ? this->ocean_speed_frac : this->canal_speed_frac)) / 256;
117 }
118};
119
125enum AircraftSubTypeBits : uint8_t {
126 AIR_HELI = 0,
128 AIR_FAST = 2
129};
130
133 uint8_t image_index = 0;
134 uint8_t cost_factor = 0;
135 uint8_t running_cost = 0;
136 uint8_t subtype = 0;
137 SoundID sfx{};
138 uint16_t max_speed = 0;
139 uint8_t acceleration = 0;
140 uint8_t mail_capacity = 0;
141 uint16_t passenger_capacity = 0;
142 uint16_t max_range = 0;
143};
144
147 uint8_t image_index = 0;
148 uint8_t cost_factor = 0;
149 uint8_t running_cost = 0;
150 Price running_cost_class{};
151 SoundID sfx{};
152 uint16_t max_speed = 0;
153 uint8_t capacity = 0;
154 uint8_t weight = 0;
155 uint8_t power = 0;
156 uint8_t tractive_effort = 0x4C;
157 uint8_t air_drag = 0;
159 uint8_t shorten_factor = 0;
161};
162
167enum class ExtraEngineFlag : uint8_t {
168 NoNews = 0,
169 NoPreview = 1,
170 JoinPreview = 2,
171 SyncReliability = 3,
172};
174
178enum class EngineMiscFlag : uint8_t {
179 RailTilts = 0,
180 RoadIsTram = 0,
181
182 Uses2CC = 1,
183
184 RailIsMU = 2,
185 RailFlips = 3,
186
187 AutoRefit = 4,
189 NoBreakdownSmoke = 6,
190 SpriteStack = 7,
191};
193
202 uint8_t decay_speed = 0;
203 uint8_t load_amount = 0;
205 CargoType cargo_type{};
206 std::variant<CargoLabel, MixedCargoType> cargo_label{};
207 CargoTypes refit_mask{};
208 uint8_t refit_cost = 0;
211 int8_t retire_early = 0;
212 ExtraEngineFlags extra_flags{};
214 uint16_t cargo_age_period = 0;
216};
217
221enum class EngineFlag : uint8_t {
222 Available = 0,
223 ExclusivePreview = 1,
224};
226
230enum class EngineNameContext : uint8_t {
231 Generic = 0x00,
232 VehicleDetails = 0x11,
233 PurchaseList = 0x20,
234 PreviewNews = 0x21,
236};
237
239inline uint64_t PackEngineNameDParam(EngineID engine_id, EngineNameContext context, uint32_t extra_data = 0)
240{
241 return engine_id.base() | (static_cast<uint64_t>(context) << 32) | (static_cast<uint64_t>(extra_data) << 40);
242}
243
244static const uint MAX_LENGTH_ENGINE_NAME_CHARS = 32;
245
246#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.
@ 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.
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'.
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.
VehicleAccelerationModel
Acceleration model of a vehicle.
Definition engine_type.h:47
@ Maglev
Maglev acceleration model.
@ Normal
Default acceleration model.
@ Monorail
Monorail acceleration model.
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.
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: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
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.
Templated helper to make a type-safe 'typedef' representing a single POD value.
Definition of the game-calendar-timer.