<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://newgrf-specs.tt-wiki.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Michi+cc</id>
	<title>GRFSpecs - User contributions [en-gb]</title>
	<link rel="self" type="application/atom+xml" href="https://newgrf-specs.tt-wiki.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Michi+cc"/>
	<link rel="alternate" type="text/html" href="https://newgrf-specs.tt-wiki.net/wiki/Special:Contributions/Michi_cc"/>
	<updated>2026-04-21T00:08:30Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://newgrf-specs.tt-wiki.net/index.php?title=Action0/Vehicles/Trains&amp;diff=5107</id>
		<title>Action0/Vehicles/Trains</title>
		<link rel="alternate" type="text/html" href="https://newgrf-specs.tt-wiki.net/index.php?title=Action0/Vehicles/Trains&amp;diff=5107"/>
		<updated>2025-09-14T15:17:45Z</updated>

		<summary type="html">&lt;p&gt;Michi cc: Prop 34&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right; padding-left:12px; background:none;&amp;quot;&amp;gt;{{NFONavVehicles}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
Defining properties of train vehicles.&lt;br /&gt;
&lt;br /&gt;
= Properties =&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Number!![[GRFActionsDetailed|Size]]!!Version!!Description!!Available for articulated parts&lt;br /&gt;
|-&lt;br /&gt;
|05||B||{{ottdp|0.6|2.0}}||Track type (see below)||should be same as front&lt;br /&gt;
|-&lt;br /&gt;
|08||B||{{ottdp|0.6|2.0}}||AI special flag: set to 1 if engine is &#039;optimized&#039; for passenger service (AI won&#039;t use it for other cargo), 0 otherwise||no&lt;br /&gt;
|-&lt;br /&gt;
|09||W||{{ottdp|0.6|2.0}}||Speed in mph*1.6 (see below)||no&lt;br /&gt;
|-&lt;br /&gt;
|0B||W||{{ottdp|0.6|2.0}}||Power (0 for wagons)||should be zero&lt;br /&gt;
|-&lt;br /&gt;
|0D||B||{{ottdp|0.6|2.0}}||Running cost factor (0 for wagons)||should be zero&lt;br /&gt;
|-&lt;br /&gt;
|0E||D||{{ottdp|0.6|2.0}}||Running cost base, see below||should be zero&lt;br /&gt;
|-&lt;br /&gt;
|12||B||{{ottdp|0.6|2.0}}||Sprite ID (FD for new graphics)||yes&lt;br /&gt;
|-&lt;br /&gt;
|13||B||{{ottdp|0.6|2.0}}||Dual-headed flag; 1 if dual-headed engine, 0 otherwise||should be zero also for front&lt;br /&gt;
|-&lt;br /&gt;
|14||B||{{ottdp|0.6|2.0}}||Cargo capacity||yes&lt;br /&gt;
|-&lt;br /&gt;
|15||B||{{ottdp|0.6|2.0}}||Cargo type, see [[CargoTypes]]&amp;lt;br/&amp;gt;&lt;br /&gt;
{{grfTill|7}} For GRF version 7 and below: Type B &#039;cargo slot&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
{{grfFrom|8}} For GRF version 8 and above: Type A &#039;(translated) cargo bit&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
{{ottd|15.0}} Since 15.0, a default cargo translation table corresponding to the climate is used if one is not provided.&lt;br /&gt;
||yes&lt;br /&gt;
|-&lt;br /&gt;
|16||B||{{ottdp|0.6|2.0}}||Weight in tons||should be zero&lt;br /&gt;
|-&lt;br /&gt;
|17||B||{{ottdp|0.6|2.0}}||Cost factor||should be zero&lt;br /&gt;
|-&lt;br /&gt;
|18||B||{{ottdp|&amp;amp;lt;0.7|2.0}}&amp;lt;ref&amp;gt;This property is not used by OpenTTDs NoAI API.&amp;lt;/ref&amp;gt;||Engine rank for the AI (AI selects the highest-rank engine of those it can buy)||no&lt;br /&gt;
|-&lt;br /&gt;
|19||B||{{ottdp|0.6|2.0}} {{grfFrom|1}}||Engine traction type (see below)||no&lt;br /&gt;
|-&lt;br /&gt;
|1A||B/B*&amp;lt;ref&amp;gt;{{ottdp|0.7|no|ottdrev=r13831}} Since OpenTTD r13831 this is an extended byte.&amp;lt;/ref&amp;gt;||{{ottdp|0.6|2.0}} {{grfFrom|1}}||Not a property, but an action: sort the purchase list.||no&lt;br /&gt;
|-&lt;br /&gt;
|1B||W||{{ottdp|0.6|2.5}} {{grfFrom|6}}||Power added by each wagon connected to this engine, see below||should be zero&lt;br /&gt;
|-&lt;br /&gt;
|1C||B||{{ottdp|0.6|2.5}} {{grfFrom|6}}||Refit cost, using 50% of the [[BaseCosts|purchase price cost base]]||yes&lt;br /&gt;
|-&lt;br /&gt;
|1D||D||{{ottdp|0.6|2.5}} {{grfFrom|6}}||Bit mask of cargo types available for refitting, see column 2 (bit value) in [[CargoTypes]]. &amp;lt;b&amp;gt;Obsoleted by properties 2C/2D&amp;lt;/b&amp;gt;||yes&lt;br /&gt;
|-&lt;br /&gt;
|1E||B||{{ottdp|0.6|2.5}} {{grfFrom|6}}||Callback flags bit mask, see below||yes&lt;br /&gt;
|-&lt;br /&gt;
|1F||B||{{ottdp|0.6|2.5|ttdprev=alpha 19}}||Coefficient of tractive effort||should be zero&lt;br /&gt;
|-&lt;br /&gt;
|20||B||{{ottdp|1.1|2.5|ttdprev=alpha 27}}||Coefficient of air drag||should be zero&lt;br /&gt;
|-&lt;br /&gt;
|21||B||{{ottdp|0.6|2.0}} {{grfFrom|2}}||Make vehicle shorter by this amount, see below||yes&lt;br /&gt;
|-&lt;br /&gt;
|22||B||{{ottdp|0.6|2.5}} {{grfFrom|6}}||Set visual effect type (steam/smoke/sparks) as well as position, see below||yes&lt;br /&gt;
|-&lt;br /&gt;
|23||B||{{ottdp|0.6|2.5}} {{grfFrom|6}}||Set how much weight is added by making wagons powered (i.e. weight of engine), see below||should be zero&lt;br /&gt;
|-&lt;br /&gt;
|24||B||{{ottdp|0.6|2.5|ttdprev=alpha 44}}||High byte of vehicle weight, weight will be prop.24*256+prop.16||should be zero&lt;br /&gt;
|-&lt;br /&gt;
|25||B||{{ottdp|0.6|2.5|ttdprev=alpha 44}}||User-defined bit mask to set when checking veh. var. 42||yes&lt;br /&gt;
|-&lt;br /&gt;
|26||B||{{ottdp|0.6|2.5|ttdprev=alpha 44}}||Retire vehicle early, this many years before the end of phase 2 (see [[Action0General]])||no&lt;br /&gt;
|-&lt;br /&gt;
|27||B||{{ottdp|0.6|2.5|ttdprev=alpha 58}}||Miscellaneous flags||partly&lt;br /&gt;
|-&lt;br /&gt;
|28||W||{{ottdp|0.6|2.5|ttdprev=alpha 58}}||Refittable cargo classes||yes&lt;br /&gt;
|-&lt;br /&gt;
|29||W||{{ottdp|0.6|2.5|ttdprev=alpha 58}}||Non-refittable cargo classes||yes&lt;br /&gt;
|-&lt;br /&gt;
|2A||D||{{ottdp|0.6|2.5|ottdrev=r7191|ttdprev=r1210}}||Long format introduction date||no&lt;br /&gt;
|-&lt;br /&gt;
|2B||W||{{ottdp|1.2|no|ottdrev=r22713}}||Custom cargo ageing period||yes&lt;br /&gt;
|-&lt;br /&gt;
|2C||B n*B||{{ottdp|1.2|no|ottdrev=r23291}}||List of always refittable cargo types||yes&lt;br /&gt;
|-&lt;br /&gt;
|2D||B n*B||{{ottdp|1.2|no|ottdrev=r23291}}||List of never refittable cargo types||yes&lt;br /&gt;
|-&lt;br /&gt;
|2E||W||{{ottdp|12|no|ottdrev=g2183fd4dab}}||Maximum curve speed modifier||yes&lt;br /&gt;
|-&lt;br /&gt;
|2F||W||{{ottdp|13|no}}||Vehicle variant group||no&lt;br /&gt;
|-&lt;br /&gt;
|30||D||{{ottdp|13|no}}||Extra flags||??&lt;br /&gt;
|-&lt;br /&gt;
|31||B||{{ottdp|14|no|ottdrev=g2d73076056}}||Additional callback flags bit mask, see below||yes&lt;br /&gt;
|-&lt;br /&gt;
|32||W||{{ottdp|15|no|ottdrev=gd2496b6ec4}}||Cargo classes required for refittability||yes&lt;br /&gt;
|-&lt;br /&gt;
|33||W n*W||{{ottdp|15}}||List of badges||??&lt;br /&gt;
|-&lt;br /&gt;
|34||B n*B||{{ottdp|15|no|ottdrev=g52e97c981c}}||List of track types||should be same as front&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Description =&lt;br /&gt;
&lt;br /&gt;
== Track type (05) ==&lt;br /&gt;
Set track type of vehicle: 0 = rail, 1 = monorail, 2 = maglev. For setting the appropriate traction type, see [[Action0Trains#Engine traction type 19|prop19]].&lt;br /&gt;
&lt;br /&gt;
{{ottdp|1.0|no}} In OpenTTD, if a [[Action0Railtypes|rail type]] translation table is loaded, this property is an index into the table instead.&lt;br /&gt;
&lt;br /&gt;
{{ottdp|15|no|ottdrev=g52e97c981c}} Overwritten by prop 34.&lt;br /&gt;
&lt;br /&gt;
== Speed (09) ==&lt;br /&gt;
&lt;br /&gt;
Train speed is in units of mph*1.6, i.e. approximately km/h.&lt;br /&gt;
&lt;br /&gt;
For wagons, this value is only used if the &amp;quot;wagonspeedlimit&amp;quot; switch is on, and it limits the speed of the train to that of the lowest wagon speed. &amp;amp;nbsp;This limit is ignored for wagons with a livery override for the current train, so that train sets always get their max speed from the engine&#039;s max speed.&lt;br /&gt;
&lt;br /&gt;
For wagons, a value of 0 means &amp;quot;default&amp;quot; (which depends on cargo type and date of introduction), and FFFF means no limit.&lt;br /&gt;
&lt;br /&gt;
== Power (0B) ==&lt;br /&gt;
&lt;br /&gt;
The power of the engine, in HP.&lt;br /&gt;
&lt;br /&gt;
A value of 0 means that the vehicle will be a wagon, otherwise it will be an engine.&lt;br /&gt;
&lt;br /&gt;
== Running cost base (0E) and factor (0D) ==&lt;br /&gt;
&lt;br /&gt;
TTD calculates all costs by multiplying a 32-bit [[BaseCosts|base amount]] with an 8-bit factor. &amp;amp;nbsp;The base amount is changed according to inflation, whereas the factor remains constant.&lt;br /&gt;
&lt;br /&gt;
For the running costs of train vehicles, the following base amounts are available depending on the vehicle type (the value here is a pointer into TTD&#039;s memory where the actual amount is stored):&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Type!!Value!!in little-endian notation&lt;br /&gt;
|-&lt;br /&gt;
|Steam engines||4C30||30 4C 00 00&lt;br /&gt;
|-&lt;br /&gt;
|Diesel engines||4C36||36 4C 00 00&lt;br /&gt;
|-&lt;br /&gt;
|Electric engines||4C3C||3C 4C 00 00&lt;br /&gt;
|-&lt;br /&gt;
|Wagons||0||00 00 00 00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Theoretically, you could use pointers to other base amounts available in TTD, but these are the numbers TTD uses for train vehicles.&lt;br /&gt;
&lt;br /&gt;
The following are some real values for maintenance costs depending on the setting of the above two factors. &amp;amp;nbsp;This value is correct for medium difficulty, but increases and decreases for hard and easy difficulties respectively. &amp;amp;nbsp;These are the costs of a new game starting in 1921, because they obviously increase with inflation over time (unless noinflation is turned on).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Running cost base 4C30 (steam)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Running cost factor!!Maintenance cost&lt;br /&gt;
|-&lt;br /&gt;
|01||$ 42&lt;br /&gt;
|-&lt;br /&gt;
|10||$ 700&lt;br /&gt;
|-&lt;br /&gt;
|20||$ 1.400&lt;br /&gt;
|-&lt;br /&gt;
|80||$ 5.600&lt;br /&gt;
|-&lt;br /&gt;
|A0||$ 7.000&lt;br /&gt;
|-&lt;br /&gt;
|FF||$ 11.112&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Running cost base 4C36 (diesel)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Running cost factor!!Maintenance cost&lt;br /&gt;
|-&lt;br /&gt;
|01||$ 40&lt;br /&gt;
|-&lt;br /&gt;
|10||$ 650&lt;br /&gt;
|-&lt;br /&gt;
|20||$ 1.300&lt;br /&gt;
|-&lt;br /&gt;
|80||$ 5.200&lt;br /&gt;
|-&lt;br /&gt;
|A0||$ 6.500&lt;br /&gt;
|-&lt;br /&gt;
|FF||$ 10.318&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Running cost base 4C3C (electric)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Running cost factor!!Maintenance cost&lt;br /&gt;
|-&lt;br /&gt;
|01||$ 36&lt;br /&gt;
|-&lt;br /&gt;
|10||$ 600&lt;br /&gt;
|-&lt;br /&gt;
|20||$ 1.200&lt;br /&gt;
|-&lt;br /&gt;
|80||$ 4.800&lt;br /&gt;
|-&lt;br /&gt;
|A0||$ 6.000&lt;br /&gt;
|-&lt;br /&gt;
|FF||$ 9.524&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Cost factor (17) ==&lt;br /&gt;
&lt;br /&gt;
The cost factor is a bit-coded value which determines how expensive an engine is. There is no distinction between steam, diesel or electric engines, they all use the same cost factor. The table below gives you some values to use for finding the right price for your engines.&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Cost factor!!Price&lt;br /&gt;
|-&lt;br /&gt;
|01||$ 3.124&lt;br /&gt;
|-&lt;br /&gt;
|10||$ 50.000&lt;br /&gt;
|-&lt;br /&gt;
|20||$ 100.000&lt;br /&gt;
|-&lt;br /&gt;
|80||$ 400.000&lt;br /&gt;
|-&lt;br /&gt;
|A0||$ 500.000&lt;br /&gt;
|-&lt;br /&gt;
|FF||$ 796.874&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Engine traction type (19) ==&lt;br /&gt;
&lt;br /&gt;
This sets the traction type of a train engine, i.e. whether it is powered by steam, diesel, electric, monorail or maglev technology. &amp;amp;nbsp;It also sets the corresponding sound effect of the engine, and if property 22 is not set, the visual effect as well.&lt;br /&gt;
&lt;br /&gt;
The following ranges are available (and it does not matter which value you pick):&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Values!!Traction type&lt;br /&gt;
|-&lt;br /&gt;
|00..07||Steam&lt;br /&gt;
|-&lt;br /&gt;
|08..27||Diesel&lt;br /&gt;
|-&lt;br /&gt;
|28..31||Electric&lt;br /&gt;
|-&lt;br /&gt;
|32..37||Monorail&lt;br /&gt;
|-&lt;br /&gt;
|38..41||Maglev&lt;br /&gt;
|}&lt;br /&gt;
Default value is 00, i.e. steam. For setting the appropriate track type, see [[Action0Trains#Track type 05|prop05]].&lt;br /&gt;
&lt;br /&gt;
{{ottdp|1.1|no}} In OpenTTD, if a [[Action0Railtypes|rail type]] translation table is loaded, setting this property does NOT alter the track type.&lt;br /&gt;
&lt;br /&gt;
== Sort vehicle list (1A) ==&lt;br /&gt;
&lt;br /&gt;
This is not a property as such, but an action. &amp;amp;nbsp;It forces TTDPatch to shuffle the vehicle this &amp;quot;property&amp;quot; is being set for in front of the vehicle with the given value of the property. &amp;amp;nbsp;The order of this list is only used in the train purchase window.&lt;br /&gt;
&lt;br /&gt;
For example, setting prop. 1A for vehicle 09 to a value of 07 would lead to the following internal list: ... 05 06 09 07 08 0A 0B ...&lt;br /&gt;
&lt;br /&gt;
This property can not simply be overwritten, because the list is already shuffled when trying to do so.&lt;br /&gt;
&lt;br /&gt;
{{ottdp|no|2.0}} It is possible to reset the list to its original order with a special action 0 that has num-info set to 0, and only sets property 1A for trains:&lt;br /&gt;
&amp;lt;pre&amp;gt;00 00 01 00 00 1A&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resetting the list should however only be done by sets that contain replacements for all train vehicles.&lt;br /&gt;
&lt;br /&gt;
{{ottdp|0.7|no|ottdrev=r13831}} This property is an extended byte in OpenTTD since r13831!&lt;br /&gt;
&lt;br /&gt;
== Powered train wagons (1B and 23, see also 22) ==&lt;br /&gt;
&lt;br /&gt;
Normally, train wagons are unpowered in TTD, and if you set property 0B to a non-zero value, they become engines instead. &amp;amp;nbsp;Therefore, to model real-life trains where wagons have power, a different mechanism is needed.&lt;br /&gt;
To make train wagons powered, you set property 1B of the &#039;&#039;&#039;engine&#039;&#039;&#039; instead of the wagon. This determines how much power each wagon adds to the train when attached to this engine. This only applies to wagons with a [[Action3|graphics override]] for this engine as well. &amp;amp;nbsp;This means that for example passenger wagons (with an override) will add power, but coal wagons (with no override) will not.&lt;br /&gt;
&lt;br /&gt;
In addition to adding power, these wagons are also heavier by the amount set in property 23.&lt;br /&gt;
&lt;br /&gt;
== Refit cost (1C) ==&lt;br /&gt;
&lt;br /&gt;
Refit cost, using 50% of the [[BaseCosts|purchase price cost base]]. This property can be overridden by callback 15E.&lt;br /&gt;
&lt;br /&gt;
{{ottdp|1.2|no|ottdrev=r23087}} If the refit cost factor is set to zero and bit 4 of the miscellaneous flags (27) is set, auto-refitting is allowed.&lt;br /&gt;
&lt;br /&gt;
== Callbacks (1E, 31) ==&lt;br /&gt;
For trains, the following [[callbacks]] have to be enabled by setting the corresponding bit in properties 1E and 31 (certain other, not as frequently used callbacks are available without setting a bit here):&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Bit!!Value!!Variable 0C value!!Callback&lt;br /&gt;
|-&lt;br /&gt;
|0||1||10||Powered wagons and visual effect&lt;br /&gt;
|-&lt;br /&gt;
|1||2||11||Wagon length&lt;br /&gt;
|-&lt;br /&gt;
|2||4||12||Load amount&lt;br /&gt;
|-&lt;br /&gt;
|3||8||15||Set refitted capacity&lt;br /&gt;
|-&lt;br /&gt;
|4||10||16||Build articulated engines&lt;br /&gt;
|-&lt;br /&gt;
|5||20||19||show a suffix after the cargo type name&lt;br /&gt;
|-&lt;br /&gt;
|6||40||2D||Select color mapping for vehicle&lt;br /&gt;
|-&lt;br /&gt;
|7||80||33||Sound effect callbacks&lt;br /&gt;
|-&lt;br /&gt;
|8||100||161||{{ottd|14|ottdrev=gf5394ed2ef}}Engine name&lt;br /&gt;
|-&lt;br /&gt;
|9||200||163||{{ottdp|15|no|ottdrev=gd2496b6ec4}}Custom refit&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Bit is the bit you have to set, you do this by adding all the values for all the bits. Variable 0C value is what variable 0C will be set to, for checking it in the VarAction2 for callbacks.&lt;br /&gt;
&lt;br /&gt;
These callbacks do not need a bit to activate them, they are always active and will be used if defined in the action 3/action 2 chain.&lt;br /&gt;
{| |-&lt;br /&gt;
!Variable 0C value!!Callback&lt;br /&gt;
|-&lt;br /&gt;
|1D||Can wagon be attached&lt;br /&gt;
|-&lt;br /&gt;
|23||Additional text in purchase screen&lt;br /&gt;
|-&lt;br /&gt;
|31||Start/stop check&lt;br /&gt;
|-&lt;br /&gt;
|32||32-day callback&lt;br /&gt;
|-&lt;br /&gt;
|36||Change Vehicle Properties&lt;br /&gt;
|-&lt;br /&gt;
|15E||Refit cost&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Coefficient of tractive effort (1F) ==&lt;br /&gt;
&lt;br /&gt;
This cofficient sets what fraction of the vehicle weight is equal to the maximum tractive effort. &amp;amp;nbsp;This includes the effect of having some unpowered axles, as well as the coefficient of friction that is available.&lt;br /&gt;
&lt;br /&gt;
Theoretically, this value should be calculated by taking the ratio of adhesive weight W&amp;lt;sub&amp;gt;adh&amp;lt;/sub&amp;gt; (i.e. the vehicle weight that rests on powered axles) times the coefficient of friction µ between the wheels and the rails to the total vehicle weight W, times 255, and convert to hex:&lt;br /&gt;
&lt;br /&gt;
prop. 1F = HEX ((W&amp;lt;sub&amp;gt;adh&amp;lt;/sub&amp;gt; * µ / W) * 255)&lt;br /&gt;
&lt;br /&gt;
With prop. 1F having a value of FF, the tractive effort is equal to the vehicle weight, for 80, it is half, and so on. If not set, a default of 4C is used, for a fraction of 0.30, corresponding to Wadh=W and a coefficient of friction of 0.30, which is the value used by the patch before TTDPatch 2.0.1 alpha 19.&lt;br /&gt;
&lt;br /&gt;
Sometimes you know the real-life tractive effort instead of adhesive weight and coefficient of friction. To help calculating prop. 1F in that case, here&#039;s a small example using the NS 1600 (Electric) with a mass of 84 tons and real-life tractive effort (TE&amp;lt;sub&amp;gt;real&amp;lt;/sub&amp;gt;) of 259 kN. To quickly find the value for property 1F you fill in the following formula:&lt;br /&gt;
&lt;br /&gt;
prop. 1F = HEX ((TE&amp;lt;sub&amp;gt;real&amp;lt;/sub&amp;gt; / (Mass * g) * 255)&lt;br /&gt;
&lt;br /&gt;
That may look confusing but you already know all variables:&lt;br /&gt;
&lt;br /&gt;
prop. 1F = HEX ((259 / (84 * 9.8) * 255)&lt;br /&gt;
&lt;br /&gt;
prop. 1F = HEX (0.3146 *255) = HEX(80.229)&lt;br /&gt;
&lt;br /&gt;
HEX calculations only work with figures in the natural domain: each figure has to be a positive and round figure. Therefore the value you convert to HEX isn&#039;t 80.229 but 80:&lt;br /&gt;
&lt;br /&gt;
HEX 80 = 50&lt;br /&gt;
&lt;br /&gt;
Property 1F for the NS 1600 (Electric) would then be: 1F 50.&lt;br /&gt;
&lt;br /&gt;
== Coefficient of air drag (20) ==&lt;br /&gt;
&lt;br /&gt;
This property sets the air drag coefficient c2 used for the realistic acceleration model, from 01 (no airdrag) to FF (most air drag) in arbitrary units. 00 means to use the default value that depends on the top speed (to simulate the fact that high-speed engines are more streamlined).&lt;br /&gt;
&lt;br /&gt;
The default values are the following:&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!top speed (mph/1.6)!!	&amp;lt;16!!	16!!	24!!	32!!	48!!	64!!	96!!	128!!	192!!	256!!	...&lt;br /&gt;
|-&lt;br /&gt;
|c2||	192||	128||	96||	64||	48||	32||	24||	16||	12||	8&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For higher speeds, the series is continued in the same manner.&lt;br /&gt;
&lt;br /&gt;
Air drag in Newtons will then be c2*v*v with v in m/s, although it is probably futile to attempt to make c2 a realistic number due to the lack of TTD&#039;s consistent scaling. If a train doesn&#039;t reach its historical top speed, you might try setting the value of prop. 20 one or two steps lower than the default above, otherwise it&#039;s probably a good idea to leave it at the default.&lt;br /&gt;
&lt;br /&gt;
== Shorter train vehicles (21) ==&lt;br /&gt;
&lt;br /&gt;
This property reduces the length of train vehicles, in units of 1/8th (12.5%). The value 00 means the vehicle has the full length, 01 means shorter by 1/8th (12.5%), up to 05=shorter by 5/8ths (62.5%). Larger numbers will not work properly&lt;br /&gt;
&amp;lt;ref&amp;gt;{{ottdp|1.0|no|ottdrev=r15793}} This restriction has been removed in OpenTTD r15793. Every vehicle can have a length between 1/8 and 8/8 independent of its position in the chain.&amp;lt;/ref&amp;gt;,&lt;br /&gt;
except at the end of the train&lt;br /&gt;
&amp;lt;ref&amp;gt;{{ottdp|&amp;amp;lt;1.0|}} This means that it is only safe to use values larger than 05 in the length callback making sure that they are only returned for the very last vehicle in the train. Otherwise the train will occasionally fall apart, with the wagons after the shortest one stopping to move.&amp;lt;/ref&amp;gt;. The vehicle length is set whenever it leaves a depot. This property does not work for the first vehicle in a train (i.e. the engine).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Visual effects and wagon power (22) ==&lt;br /&gt;
&lt;br /&gt;
By default, the visual effect of train engines is determined by the traction type (property 19). With this option you can change the type of effect as well as the position of it relative to the vehicle. (Note: for TTDPatch and OpenTTD up to r21229 only the positioning of steam actually works. For {{ottdp|1.1|no|ottdrev=r21230}} positioning diesel smoke and electric sparks works as well) The position of the effect provides a range from 0 to F that is added to the type of the effect.&lt;br /&gt;
&lt;br /&gt;
Position 0 corresponds to a point half a vehicle length ahead of the vehicle, 4 is the front of the vehicle, 8 the middle, C the end and F is a half length behind the vehicle. Intermediate values are in-between.&lt;br /&gt;
&lt;br /&gt;
Additionally, this property can be used to disable powered wagons of this type, although that is usually done with [[Callbacks#Visual_effect_and_wagon_power_.2810.29| callback 10]] instead (which has the same meaning as prop. 22, but is more flexible).&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Range	!!Effect type&lt;br /&gt;
|-&lt;br /&gt;
|00..0F||Use the default effect type, but reposition it. For engines this is defined via property 19, wagons have no default effect.&lt;br /&gt;
|-&lt;br /&gt;
|10..1F||Steam puffs&lt;br /&gt;
|-&lt;br /&gt;
|20..2F||Diesel fumes&lt;br /&gt;
|-&lt;br /&gt;
|30..3F||Electric sparks&lt;br /&gt;
|-&lt;br /&gt;
|40||Disable visual effect&lt;br /&gt;
|-&lt;br /&gt;
|41..7F||{{ottdp|1.5|no|ottdrev=r26747}} Create effects with [[Callbacks#Advanced_effect_creation_.28160.29|Callback 160]] using one of these spawning models:&lt;br /&gt;
* 41 Steam: Gradually less effects when approaching max speed&lt;br /&gt;
* 42 Diesel: Effect proportional to acceleration, no effect when idling at top speed&lt;br /&gt;
* 43 Electric: Random effect, gradually less likely when approaching max spped&lt;br /&gt;
* 44-7F Reserved&lt;br /&gt;
|-&lt;br /&gt;
|80+00..80+7F||Same as 00..7F above, but disable wagon power&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For example, 28 would make the wagon powered and emit diesel fumes, but 80+28 = A8 would only emit the diesel fumes without adding power.&lt;br /&gt;
&lt;br /&gt;
== Miscellaneous flags (27) ==&lt;br /&gt;
&lt;br /&gt;
This is a bit mask, with the following bits:&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Bit!!	Value!!	Version !!Meaning&lt;br /&gt;
|-&lt;br /&gt;
|0||	1||{{ottdp|0.6|2.5}}||	Vehicle tilts in curves, and thus gets speed bonus &amp;lt;ref&amp;gt;The tilting speed bonus only applies if all vehicles in the train have this bit set. In TTDPatch it requires the &amp;quot;curves&amp;quot; switch to be on. For realistic curves, it gives the train two free curving pieces with no speed decrease, and for other settings, it increases the curves setting by one (0-&amp;gt;1, 1-&amp;gt;2, 2-&amp;gt;2). In OpenTTD, the curve speed limit increases by 20% if &#039;realistic&#039; acceleration is enabled, else there is no effect.&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|1||	2||{{ottdp|0.6|2.5}}||	Uses two company colors&lt;br /&gt;
|-&lt;br /&gt;
|2||	4||{{ottdp|0.6|2.5}}||	Vehicle is a multiple unit (DMU/EMU), for colour selection&lt;br /&gt;
|-&lt;br /&gt;
|3||	8||Varies|| {{ottdp|1.1|no|ottdrev=r21966}}Vehicle can be flipped around in the depot. &amp;lt;br&amp;gt;{{ottdp|13|no|no}}This flag is no longer required, vehicles can always be flipped. &lt;br /&gt;
&amp;lt;ref&amp;gt;From {{ottd|13|no}} onwards, OpenTTD will again allow all vehicles to flip, and will automatically adjust offsets accordingly. From {{ottd|13|no}}, if this flag is set, OpenTTD will not automatically apply the correct offsets for vehicles &amp;lt; 8/8 long, and will defer to offsets set by the grf. Do not set this flag unless you need it for a specific reason.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
For {{ottd|1.1|r21966}} up to {{ottdp|12|no|no}} when you enable flipping of a vehicle in a depot you must make sure that the graphics are correctly aligned when flipped as well. Especially in the case of shortened vehicles.  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Prior to {{ottd|1.1|r21966}} all non-multiheaded/non-articulated vehicles would be able to flip around in the depot. As such {{ottd|1.1|r21966}} disables a &amp;quot;feature&amp;quot; in OpenTTD, but often it makes no sense to flip vehicles around (symetric vehicles) or the graphics are wrong (most shortened vehicles), and thus only enabling this when the NewGRF developer says it is possible is better.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
For all relevant OpenTTD versions, the flipping bit has no effect for multiheaded or articulated vehicles as they cannot be flipped in depot. &lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|4||   10||{{ottdp|1.2|no|ottdrev=r23087}}|| Auto-refitting is enabled for refits where callback 15E allows it or prop 1C specifies zero cost&lt;br /&gt;
|-&lt;br /&gt;
|5||   20||{{ottdp|1.2|no|ottdrev=r23861}}|| Use cargo multiplier for default cargo (and load amount). See page about [[VehicleRefitting#Misc._vehicle_flag_5_.27use_of_capacity_multiplier_for_default_cargo.27_set|vehicle refitting]].&lt;br /&gt;
|-&lt;br /&gt;
|6||   40||{{ottdp|1.3|no|ottdrev=r24124}}|| Disable breakdown smoke effect.&lt;br /&gt;
|-&lt;br /&gt;
|7||   80||{{ottdp|1.7|no|ottdrev=r27668}}|| [[Action2/Vehicles#Composing_vehicles_from_multiple_sprites|Compose vehicle from multiple sprites.]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Cargo classes (28, 29, 32) ==&lt;br /&gt;
&lt;br /&gt;
To make vehicle sets more compatible with future new cargo definitions, these three properties allow vehicles to define what type of cargo they should be refittable to. A wagon will be refittable to all cargo types that match any of the classes set in prop. 28 &#039;&#039;and&#039;&#039; have all of the classes set in prop. 32, except for the ones that match any of the classes set in prop. 29. In addition, afterwards those cargo types listed in prop. 1D will be toggled. In terms of logic, it is&lt;br /&gt;
&lt;br /&gt;
Refit list = (cargos from prop. 28 filtered by prop. 32 AND NOT cargos from prop. 29) XOR cargos from prop. 1D&lt;br /&gt;
&lt;br /&gt;
This means, if a cargo type is in the list because it matches props 28/31 but not prop 29, having the respective bit set in prop. 1D will disable it again. Conversely, if the cargo type is not in the list, the bit in prop. 1D will add it. This way, if props. 28/29 are unset, prop. 1D will retain the original meaning, but it is still able to selectively add or remove certain cargo types even if props. 28/29 are used.&lt;br /&gt;
&lt;br /&gt;
As a consequence, you have both full control over the cargo types that you know of (using prop. 1D), and those you don&#039;t know of yet (using props. 28/29). Leave the bits for cargos that you don&#039;t know of unset in prop. 1D, and set/clear the bits for known cargos to add/remove them from the list as appropriate.&lt;br /&gt;
&lt;br /&gt;
{{ottd|1.2|r23291}} It is recommended to use properties 2C and 2D instead of property 1D, as property 1D behaves badly if the cargo classes of a cargo are ever changed.&lt;br /&gt;
&lt;br /&gt;
The class list is a bit mask. See the action0 cargos page for bits and classes defined so far.&lt;br /&gt;
&lt;br /&gt;
Take a look at [[Action0Cargos#Cargo classes 16|Action0 for cargos]] for the classes defined so far.&lt;br /&gt;
&lt;br /&gt;
Note that cargo types may belong to several classes. This is the reason for making three properties, an additive, a filter, and a subtractive one, because this way a vehicle can be specified to be refittable to, for example, all express cargo that does not require refrigeration (i.e., from the default cargos, no food).&lt;br /&gt;
For the cargo types added in this way, the vehicle will probably have no specific graphics (in [[Action3|action 3]]) to show the cargo load. &amp;amp;nbsp;In this case, the default will be used, which should therefore be sufficiently generic-looking if possible. However, using [[VariationalAction2/Vehicles#Vehicle cargo info 47|vehicle variable 47]] you can at least select the graphics most appropriate for the cargo type&#039;s class.&lt;br /&gt;
About the interaction with other properties take a look at the summary page about [[VehicleRefitting|vehicle refitting]].&lt;br /&gt;
&lt;br /&gt;
Disclaimer: there is no guarantee that classes won&#039;t vary over time or between sets. The classes of a cargo may change between different versions of a specific industry/cargo newgrf, or different classes may be set for the same cargo label by different industry/cargo newgrfs. Feel free to use classes in your set for conveniently refitting to cargos, but if you - the vehicle author - care about specific cargos being transported in specific vehicles, use label based refits (changing labels without a very good reason is considered to be bad practice).&lt;br /&gt;
&lt;br /&gt;
== Long format introduction date (2A) ==&lt;br /&gt;
&lt;br /&gt;
Set the vehicle introduction date, in days since the year 0. This takes account of leap years; dividable by 4, but not 100 unless 400. A start date of 1920-01-01 is obtained with a value of 701265 (51 B3 0A 00). This property must be set after property 00 to take effect.&lt;br /&gt;
&lt;br /&gt;
{{ottdp|no|}} In TTDPatch, dates after 2044 will be limited to 2044.&lt;br /&gt;
&lt;br /&gt;
== Custom cargo ageing period (2B) ==&lt;br /&gt;
&lt;br /&gt;
This property allows to modify the period in ticks after which cargo carried by the vehicle is aged. By default, cargo is aged every 185 ticks. A value of 0 disables ageing of cargo. This property can be modified via [[Callbacks#Change_vehicle_properties_.2836.29|callback 36]].&lt;br /&gt;
&lt;br /&gt;
Changing this value from the default does not automatically make the vehicle earn more or less.  Predicting the effect is complicated, as it depends on many things, including: vehicle speed, route length, route delays, transfer credits, the payment curve set by the cargo, and whether the cargo is already aged from a previous transfer when the vehicle loads it.&lt;br /&gt;
&lt;br /&gt;
Authors are advised that tests show this property can lead to disappointment. Avoid, or use with caution.&lt;br /&gt;
&lt;br /&gt;
== List of always refittable cargo types (2C, 2D) ==&lt;br /&gt;
&lt;br /&gt;
These two properties allows to unconditionally include or exclude cargo types for refittability independent of any of the other refit properties or the cargo classes. If you specify a cargo type that is not available, the cargo type will be silently ignored.&lt;br /&gt;
&lt;br /&gt;
The format for both properties is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;2C/2D &amp;amp;lt;nvar&amp;amp;gt; (&amp;amp;lt;Index into cargo type table&amp;amp;gt;){n}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That is you give the number of cargos in a single byte followed by a list of that length of indexes into the cargo translation table ([[CargoTypes|Type A]]).&lt;br /&gt;
&lt;br /&gt;
== Maximum curve speed modifier (2E) ==&lt;br /&gt;
&lt;br /&gt;
This property allows to give vehicles a maximum curve speed modifier. The given value is treated as a signed word with 8 fractional bits. This property can be modified via [[Callbacks#Change_vehicle_properties_.2836.29|callback 36]].&lt;br /&gt;
&lt;br /&gt;
The modifier is applied after the normal curve speed calculation is done using the formula max_curve_speed * (1 + prop 2E). This means that the default property value of 0 is equivalent to no change. While values less than -1.0 are technically possible, the resulting vehicle curve speed is clamped at 2 mph-ish to make sure vehicles don&#039;t become permanently stuck.&lt;br /&gt;
&lt;br /&gt;
If different vehicles in a train have different curve speed modifiers, the lowest value wins.&lt;br /&gt;
&lt;br /&gt;
== Vehicle variant group (2F) ==&lt;br /&gt;
&lt;br /&gt;
This property supports grouping vehicles in the purchase menu (also the autoreplace menu). The property value is the ID of another vehicle in the same GRF which will act as the parent for vehicles in the group.&lt;br /&gt;
&lt;br /&gt;
Groups can also be nested (this is experimental as of December 2022 and may change with testing).&lt;br /&gt;
&lt;br /&gt;
See also [[Action0Trains#Extra flags (30)|vehicle extra flags]] which can influence the behaviour of vehicles in variant groups.&lt;br /&gt;
&lt;br /&gt;
See also https://github.com/OpenTTD/OpenTTD/pull/10220&lt;br /&gt;
&lt;br /&gt;
== Extra flags (30) ==&lt;br /&gt;
&lt;br /&gt;
This is a bit mask, with the following bits:&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Bit!!	Value!!	Version !!Meaning&lt;br /&gt;
|-&lt;br /&gt;
|0||	1||{{ottdp|13|no}}||	Disable &amp;quot;New Vehicle&amp;quot; news message for this engine&lt;br /&gt;
|-&lt;br /&gt;
|1||	2||{{ottdp|13|no}}||	Disable &amp;quot;Exclusive Preview&amp;quot; for this engine&lt;br /&gt;
|-&lt;br /&gt;
|2||	4||{{ottdp|13|no}}||	Variants - Include this variant when primary engine has &amp;quot;Exclusive Preview&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|3||	8||{{ottdp|13|no}}||		Variants - (Attempt to) Synchronize reliability the primary engine&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Extra callback flags (31) ==&lt;br /&gt;
&lt;br /&gt;
See [[#Callbacks_.281E.2C_31.29]]&lt;br /&gt;
&lt;br /&gt;
== Track type list (34) ==&lt;br /&gt;
&lt;br /&gt;
List of track types for the vehicle. Data values are indices into the [[Action0Railtypes|rail type]] translation table.&lt;br /&gt;
&lt;br /&gt;
The vehicle will be available/run on all listed track types.&lt;br /&gt;
&lt;br /&gt;
Overwritten by prop 05.&lt;br /&gt;
&lt;br /&gt;
= Example =&lt;br /&gt;
&lt;br /&gt;
Below is an example of what a real Action 0 pseudo-sprite could look like for a train engine.&lt;br /&gt;
&lt;br /&gt;
(A basic version)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;10 * 14 &amp;amp;nbsp;00 00 03 01 02 09 C0 00 0B D8 0E 12 FD&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!&#039;&#039;&#039;Bytes&#039;&#039;&#039;!!&#039;&#039;&#039;Meaning&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|10||&amp;amp;lt;Sprite-number&amp;amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|14||&amp;amp;lt;Length&amp;amp;gt;: of the action in bytes; start counting at 0 (&amp;amp;lt;action&amp;amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
|00||&amp;amp;lt;action&amp;amp;gt;: sets this pseudo-sprite to function as action 0&lt;br /&gt;
|-&lt;br /&gt;
|00||&amp;amp;lt;Feature&amp;amp;gt;: In this case Train&lt;br /&gt;
|-&lt;br /&gt;
|03||&amp;amp;lt;Num-props&amp;amp;gt;: 3 Properties to change&lt;br /&gt;
|-&lt;br /&gt;
|01||&amp;amp;lt;Num-info&amp;amp;gt;: 1 vehicle ID to make changes to&lt;br /&gt;
|-&lt;br /&gt;
|02||&amp;amp;lt;ids...&amp;amp;gt;: vehcile ID (02 - Ploddyphut Choo-Choo)&lt;br /&gt;
|-&lt;br /&gt;
|||&#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|09||&amp;amp;lt;Speed&amp;amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|C0 00||&amp;amp;lt;Value&amp;amp;gt;: Value for Speed (192 Km/h)&lt;br /&gt;
|-&lt;br /&gt;
|0B||&amp;amp;lt;Power&amp;amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|D8 0E||&amp;amp;lt;value&amp;amp;gt;: value for Power (3800 HP)&lt;br /&gt;
|-&lt;br /&gt;
|12||&amp;amp;lt;Sprite ID&amp;amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|FD||&amp;amp;lt;value&amp;amp;gt;: FD for new graphics&lt;br /&gt;
|}&lt;br /&gt;
Since nfo version 7, so-called [[GRFActionsDetailed#Byte order|&amp;quot;escape sequences&amp;quot;]] have been introduced in an attempt to offer a more human-readable form.&lt;br /&gt;
&lt;br /&gt;
Below is the same example as above, with escape sequences being used:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;-1 * 0 00 00 \b3 01 \b*2 // \b&amp;amp;lt;number of props to change&amp;amp;gt; \b*&amp;amp;lt;vehicle ID&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp;09 \w192 // value for speed (192 Km/h)&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp;0B \w3800 // value for power (3800 hp)&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp;12 FD // use new graphics&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Michi cc</name></author>
	</entry>
	<entry>
		<id>https://newgrf-specs.tt-wiki.net/index.php?title=Standardized_Railtype_Scheme&amp;diff=5069</id>
		<title>Standardized Railtype Scheme</title>
		<link rel="alternate" type="text/html" href="https://newgrf-specs.tt-wiki.net/index.php?title=Standardized_Railtype_Scheme&amp;diff=5069"/>
		<updated>2025-06-12T16:12:43Z</updated>

		<summary type="html">&lt;p&gt;Michi cc: /* Summary and notes for train sets */ Not yet a reality&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This railtype label scheme aims to provide a way to allow players to easily mix and match different train and track sets. It does this by grouping the rail types into what matters from a technical perspective. The scheme provides a standardized way of defining railtype labels, based on track gauge and type, speed class, allowable axle weight and electrification type. To limit combinatorial explosions of rail types, the track properties are abstracted away from strict real-life representations.&lt;br /&gt;
&lt;br /&gt;
It is the explicit intent of this scheme to decouple track sets from vehicle sets to facilitate easy mixing. This way the player can select a track set of choice to go with a train set of choice. It allows the player to play with or without axle load classes, or with or without speed limit classes, simply by loading a track set that does or does not provide these features. In some cases it will also be possible to combine niche track sets, for instance a standard gauge track set with a narrow gauge and a metro track set. Additionally, due to the decoupling, depending on the specific train and track sets used, not all defined vehicles and/or track types might be available in a specific set combination. This is fully intended behaviour.&lt;br /&gt;
&lt;br /&gt;
== When to use the scheme and when &#039;&#039;not&#039;&#039; to use the scheme ==&lt;br /&gt;
&lt;br /&gt;
When to use:&lt;br /&gt;
* If you only want to develop a track or a train set.&lt;br /&gt;
* If you want players to be able to mix-and-match sets.&lt;br /&gt;
* If you are okay with abstractions from real life.&lt;br /&gt;
&lt;br /&gt;
When &#039;&#039;not&#039;&#039; to use:&lt;br /&gt;
* If you consider it a crime against humanity when one of your vehicles or track types is not available in a specific game.&lt;br /&gt;
* If you want your tracks or vehicles to exactly mirror real-life counterparts down to the last mm of gauge width.&lt;br /&gt;
* If your train set is specifically designed to work with your track set only.&lt;br /&gt;
* If you feel the compulsory need to fill all 64 railtype slots.&lt;br /&gt;
&lt;br /&gt;
== The Label Scheme ==&lt;br /&gt;
A railtype label consists of four characters. In this scheme, each position has a different purpose:&lt;br /&gt;
# Track gauge and type class (e.g. standard gauge rail, narrow gauge rail, monorail)&lt;br /&gt;
# Speed limit class&lt;br /&gt;
# Axle load class (maximum allowed axle weight for this track)&lt;br /&gt;
# Energy source type class&lt;br /&gt;
&lt;br /&gt;
In the next sections, each of the four positions will be explained.&lt;br /&gt;
&lt;br /&gt;
=== Track gauge and type class [X***] ===&lt;br /&gt;
The first position in the railtype label defines track gauge and/or track type class. The following classes are currently defined:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! !!Track type/gauge&lt;br /&gt;
|- &lt;br /&gt;
|S ||Standard gauge rail&lt;br /&gt;
|-&lt;br /&gt;
|B ||Broad gauge rail &lt;br /&gt;
|-&lt;br /&gt;
|N ||Narrow gauge rail&lt;br /&gt;
|-&lt;br /&gt;
|n ||Secondary narrow gauge rail (e.g. when providing both metre and cape gauge, always use N in case of just one type of narrow gauge)&lt;br /&gt;
|-&lt;br /&gt;
|D ||Dual gauge rail, standard/broad gauge&lt;br /&gt;
|-&lt;br /&gt;
|d ||Dual gauge rail, standard/narrow gauge&lt;br /&gt;
|-&lt;br /&gt;
|M ||Monorail&lt;br /&gt;
|-&lt;br /&gt;
|L ||Magnetic Levitation&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
All track gauges or types are abstractions of real-life types and do not correspond to specific examples used in real-life. For example &#039;&#039;&#039;N&#039;&#039;&#039; is any gauge that is smaller than standard gauge, but not corresponding to any specific gauge that exists in real life, just like &#039;&#039;&#039;n&#039;&#039;&#039; is smaller than &#039;&#039;&#039;N&#039;&#039;&#039;, but does not corresponds to a specific real-life gauge.&lt;br /&gt;
&lt;br /&gt;
A train set may define vehicles for gauge &#039;&#039;&#039;n&#039;&#039;&#039; while not defining vehicles for gauge &#039;&#039;&#039;N&#039;&#039;&#039;, but this is likely only useful for sets that are specifically designed to be used along-side other sets, and the used railtype fallbacks should be carefully considered.&lt;br /&gt;
&lt;br /&gt;
=== Speed limit/appearance class [*X**] ===&lt;br /&gt;
The second position in the railtype label defines the speed limit/appearance class. This can be used to provide tracks with different speed limits or appearance variations. The speed limit/appearance class is &#039;&#039;not&#039;&#039; used for trains and a train set should always use the class letter &#039;&#039;&#039;A&#039;&#039;&#039; in this position.&lt;br /&gt;
&lt;br /&gt;
There is no fixed numeric mapping for this class, but speed limits should start at &#039;&#039;&#039;A&#039;&#039;&#039; for the lowest speed limit and progress with &#039;&#039;&#039;B/C/...&#039;&#039;&#039; for higher limits. If you do not want to employ speed limits in your track set, always use the class &#039;&#039;&#039;A&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Additionally this class can also be used to distinguish different track appearances like normal or full width ballast, grass or concrete ground, etc. Train sets must not define vehicles for appearance classes. If you think you have special vehicles that should only run on the appearance class, it is &#039;&#039;not&#039;&#039; appearance but a separate track gauge/type.&lt;br /&gt;
&lt;br /&gt;
=== Axle load class [**X*] ===&lt;br /&gt;
The third position defines the axle weight limit. Heavy trains cannot run on tracks with a low axle weight limit; these trains need more expensive tracks with a higher weight limit. There are five axle load classes &#039;&#039;&#039;A&#039;&#039;&#039; through &#039;&#039;&#039;E&#039;&#039;&#039;. &#039;&#039;&#039;A&#039;&#039;&#039; is for the lowest axle load limit, &#039;&#039;&#039;E&#039;&#039;&#039; for the highest. The exact axle load attached to each class is relative to the track gauge/type and trains in the set. &lt;br /&gt;
&lt;br /&gt;
A train set should set the appropriate axle weight for each train via the railtype label, as to make the set work with track sets that do provide tracks with different weight limits, even if you don&#039;t care about it for your trainset. Ideally, all five standard axle load classes should be used, but a train set may use only some weight classes, as the vehicle rooster might not make it feasible to use all five. The group with the lowest axle weights will get class &#039;&#039;&#039;A&#039;&#039;&#039;, the second lowest class &#039;&#039;&#039;B&#039;&#039;&#039;, etc. up to the group with the highest axle weights which will get class &#039;&#039;&#039;E&#039;&#039;&#039;. If you do not use all classes, try to spread the classes out (don&#039;t use &#039;&#039;&#039;A&#039;&#039;&#039; and &#039;&#039;&#039;B&#039;&#039;&#039; for two classes, but e.g. &#039;&#039;&#039;B&#039;&#039;&#039; and &#039;&#039;&#039;D&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
A track set does not have to provide a dedicated track type for each axle weight limit. A track set that does not provide a dedicated track for each axle load class, must make sure to map all undefined axle load classes to a real railtype using property [[Action0/Railtypes#Alternate_rail_type_labels_.281D.29|1D (NFO)]] or [[NML:Railtypes#Railtype_properties|alternative_railtype_list (NML)]]. This way a train set can rely on all labels for all axle load classes being available. Example: if you only want to provide 2 axle load classes for standard gauge unelectrified with no speed limits, you can map SA&#039;&#039;&#039;A&#039;&#039;&#039;N + SA&#039;&#039;&#039;B&#039;&#039;&#039;N to SA&#039;&#039;&#039;C&#039;&#039;&#039;N and SA&#039;&#039;&#039;D&#039;&#039;&#039;N to SA&#039;&#039;&#039;E&#039;&#039;&#039;N if the cost difference between the two railtypes is high, or SA&#039;&#039;&#039;A&#039;&#039;&#039;N to SA&#039;&#039;&#039;B&#039;&#039;&#039;N and SA&#039;&#039;&#039;C&#039;&#039;&#039;N + SA&#039;&#039;&#039;D&#039;&#039;&#039;N to SA&#039;&#039;&#039;E&#039;&#039;&#039;N if the cost difference is low.&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t want to provide any axle load classes in your track set, it doesn&#039;t really matter what axle load class you choose for the track, as you&#039;ll be mapping all other classes to this track anyways. But the lowest or highest class are the obvious choice. Example: if your track set only provides narrow gauge unelectrified track with no speed limits and no axle load limits, you may use NA&#039;&#039;&#039;A&#039;&#039;&#039;N for the track label, and provide NA&#039;&#039;&#039;B&#039;&#039;&#039;N, NA&#039;&#039;&#039;C&#039;&#039;&#039;N, NA&#039;&#039;&#039;D&#039;&#039;&#039;N, NA&#039;&#039;&#039;E&#039;&#039;&#039;N in property [[Action0/Railtypes#Alternate_rail_type_labels_.281D.29|1D (NFO)]] or [[NML:Railtypes#Railtype_properties|alternative_railtype_list (NML)]].&lt;br /&gt;
&lt;br /&gt;
If you need more than five axle load class, you may use lowercase letters for very low axle loads and continue the uppercase letters for very high axle loads. Be advised that your train set may not assume the existence of any other class than &#039;&#039;&#039;A&#039;&#039;&#039; through &#039;&#039;&#039;E&#039;&#039;&#039;, so think about providing appropriate fallbacks in your railtype table. If you make a track set with an extended range, be aware that not all train sets will define trains for these tracks. In general: only do this in case of a train set with a matching track set.&lt;br /&gt;
&lt;br /&gt;
For the lowercase letters, &#039;&#039;&#039;b&#039;&#039;&#039; is lower than &#039;&#039;&#039;a&#039;&#039;&#039;, so for increasing axle load limits: b &amp;lt; a &amp;lt; A &amp;lt; B &amp;lt; C etc.&lt;br /&gt;
&lt;br /&gt;
Note that the axle load classes never map to a specific weight in tonnes. For that reason it does not make sense to add a numeric value for the axle load to the name of a track type or in the extended purchase info of a train. Instead use the relative expressions &#039;very low&#039;, &#039;low&#039;, &#039;medium&#039;, &#039;high&#039; and &#039;very high&#039; or use the class letters directly.&lt;br /&gt;
&lt;br /&gt;
=== Energy source type class [***X] ===&lt;br /&gt;
The last position defines the energy source type class. This is split in generic energy source types like overhead wires and third rail and specialized types like alternating and direct current.&lt;br /&gt;
&lt;br /&gt;
A track set that only uses specialized types, should map the generic types to the most suitable specialized type in the set.&lt;br /&gt;
&lt;br /&gt;
A vehicle set that uses specialized types should define a generic type as fallback, via the railtype table. If such a fallback is omitted, please note that certain vehicles may be unavailable depending on track set loaded.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! !!Generic energy type classes&lt;br /&gt;
|-&lt;br /&gt;
|N ||no electrification&lt;br /&gt;
|-&lt;br /&gt;
|E ||overhead wires/catenary electrification&lt;br /&gt;
|-&lt;br /&gt;
|3 ||3rd rail electrification&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! !!Specialized energy type classes !!Vehicle set fallback&lt;br /&gt;
|-&lt;br /&gt;
|Z ||3rd rail and catenary electrification || 3 or E&lt;br /&gt;
|-&lt;br /&gt;
|4 ||4th rail electrification || 3&lt;br /&gt;
|-&lt;br /&gt;
|Y ||4th rail and catenary electrification || 4 or E&lt;br /&gt;
|-&lt;br /&gt;
|T ||[http://en.wikipedia.org/wiki/Three-phase_AC_railway_electrification three phase AC electrification] || E&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; | &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|D ||DC catenary electrification || E&lt;br /&gt;
|-&lt;br /&gt;
|d ||low voltage DC catenary electrification (only when D also used in set) || First A then E&lt;br /&gt;
|-&lt;br /&gt;
|A ||AC catenary electrification || E&lt;br /&gt;
|-&lt;br /&gt;
|a ||low voltage AC catenary electrification (only when A also used in set) || First A then E&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
All energy source types are abstractions of real-life types and do not correspond to specific examples used in real-life. For example &#039;&#039;&#039;D&#039;&#039;&#039; and &#039;&#039;&#039;d&#039;&#039;&#039; are treated as two different DC voltage levels, but do not correspond to any specific real-life voltage level used.&lt;br /&gt;
&lt;br /&gt;
A train set may define vehicles for energy source &#039;&#039;&#039;d&#039;&#039;&#039; while not defining vehicles for energy source &#039;&#039;&#039;D&#039;&#039;&#039; (as an example, applies to other energy sources, too), but this is likely only useful for sets that are specifically designed to be used along-side other sets, and the used railtype fallbacks should be carefully considered.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you want multi-voltage/current vehicles in your set (i.e. a train that can run on both AC and DC current), you have to define a dedicated railtype for those vehicles. Without the railtype, it&#039;s not possible to define vehicles with this property. If you only have vehicles that can run on either one type of voltage/current or on all types of voltage/current (e.g. a 2-system if you only have &#039;&#039;&#039;A&#039;&#039;&#039; and &#039;&#039;&#039;D&#039;&#039;&#039; tracks, or a 4-system in case of all &#039;&#039;&#039;A&#039;&#039;&#039;, &#039;&#039;&#039;a&#039;&#039;&#039;, &#039;&#039;&#039;D&#039;&#039;&#039; and &#039;&#039;&#039;d&#039;&#039;&#039;), then use the generic class &#039;&#039;&#039;E&#039;&#039;&#039; for vehicles that should be able to run on all different voltage/currents. Also the track set needs to have one at least one railtype with class &#039;&#039;&#039;E&#039;&#039;&#039; defined.&lt;br /&gt;
&lt;br /&gt;
Note that if you want more than one type of multi-voltage/current, you&#039;ll quickly get a combinatory explosion of railtype labels, so plan carefully or do not attempt it. For every different multi-voltage/current vehicle type a dedicated railtype is needed. If you want all possible combinations, then you need to define an additional 8 classes. It is not recommended to make your train/track set this complicated.&lt;br /&gt;
&lt;br /&gt;
Example approach for a 4-system set, with trains that can run on either one or all systems:&lt;br /&gt;
* &#039;&#039;&#039;E&#039;&#039;&#039;: generic catenary-powered electric engines. &amp;quot;universal&amp;quot; [4-system] if any of &#039;&#039;&#039;D&#039;&#039;&#039;/&#039;&#039;&#039;d&#039;&#039;&#039;/&#039;&#039;&#039;A&#039;&#039;&#039;/&#039;&#039;&#039;a&#039;&#039;&#039; are defined.&lt;br /&gt;
* &#039;&#039;&#039;A&#039;&#039;&#039;: generic AC catenary electric engines. 25kV only if &#039;&#039;&#039;a&#039;&#039;&#039; also defined. Vehicle sets should use &#039;&#039;&#039;E&#039;&#039;&#039; as fallback, if defining an engine for &#039;&#039;&#039;A&#039;&#039;&#039;;&lt;br /&gt;
* &#039;&#039;&#039;a&#039;&#039;&#039;: 15kV AC catenary electric engines. Only defined if &#039;&#039;&#039;A&#039;&#039;&#039; also defined. Vehicle sets should use &#039;&#039;&#039;A&#039;&#039;&#039; and &#039;&#039;&#039;E&#039;&#039;&#039; as fallback, if defining an engine for &#039;&#039;&#039;a&#039;&#039;&#039;;&lt;br /&gt;
* &#039;&#039;&#039;D&#039;&#039;&#039;: generic DC catenary electric engines. 3kV if &#039;&#039;&#039;d&#039;&#039;&#039; also defined. Vehicle sets should use &#039;&#039;&#039;E&#039;&#039;&#039; as fallback, if defining an engine for &#039;&#039;&#039;D&#039;&#039;&#039;;&lt;br /&gt;
* &#039;&#039;&#039;d&#039;&#039;&#039;: 1.5kV DC catenary electric engines. Only defined if &#039;&#039;&#039;D&#039;&#039;&#039; also defined. Vehicle sets should use &#039;&#039;&#039;D&#039;&#039;&#039; and &#039;&#039;&#039;E&#039;&#039;&#039; as fallback, if defining an engine for &#039;&#039;&#039;d&#039;&#039;&#039;.&lt;br /&gt;
For a 2-system set, you can simply drop &#039;&#039;&#039;a&#039;&#039;&#039; and &#039;&#039;&#039;d&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Standard labels: RAIL, ELRL, MONO, MGLV ===&lt;br /&gt;
It&#039;s not possible to undefine the standard railtypes RAIL, ELRL, MONO and MGLV. The game will always add those if there are vehicles defined for these track types. As a result, for a track set it&#039;s best not to ignore those standard labels, but rather work with them and define them in the set. If your track set does not have monorail or maglev tracks, there of course is no need to define those. But if your track set defines anything that resembles unelectrified or electrified rail, you should use the RAIL and ELRL labels. Matching labels from the above scheme will then be defined in property [[Action0/Railtypes#Alternate_rail_type_labels_.281D.29|1D (NFO)]] or [[NML:Railtypes#Railtype_properties|alternative_railtype_list (NML)]].&lt;br /&gt;
&lt;br /&gt;
As vehicles from NewGRFs that do not use explicit railtypes will end up on these standard railtypes, you should use RAIL instead of whatever type could be regarded as the most commonly used unelectrified type, ELRL instead of the most commonly used electrified type and so on. The label according to this scheme is then set as an alternate.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Summary and notes for track sets ==&lt;br /&gt;
This section summarizes and comments the above for track sets.&lt;br /&gt;
&lt;br /&gt;
; [X***] Track gauge and type class&lt;br /&gt;
* Define at least one track type for every track gauge/type class you want in your set.&lt;br /&gt;
* If you only provide tracks for one gauge/type, consider leaving some free railtypes so a player can load an additional set for some other type.&lt;br /&gt;
; [*X**] Speed limit class&lt;br /&gt;
* Make sure class A is always available, either directly or via an alternate label.&lt;br /&gt;
* Use only class A if you don&#039;t want speed limits;&lt;br /&gt;
* With speed limits, A is the lowest speed limit. Continue with B, C, etc. for increasing speed limits;&lt;br /&gt;
* The speed class can also be used to implement additional eye-candy track types, use letters higher in the alphabet for this.&lt;br /&gt;
; [**X*] Axle load class&lt;br /&gt;
* Always define all classes A through E for every track type class / electrification combination, either:&lt;br /&gt;
** Directly via a real railtype definition;&lt;br /&gt;
** Indirectly via the alternate rail type label list, property [[Action0/Railtypes#Alternate_rail_type_labels_.281D.29|1D (NFO)]] or [[NML:Railtypes#Railtype_properties|alternative_railtype_list (NML)]].&lt;br /&gt;
* Extend the predefined classes only if you also provide a train set that makes use of these.&lt;br /&gt;
; [***X] Energy source type class&lt;br /&gt;
* If your set only uses specialized classes, always map the generic classes to the closest matching specialized type via property 1D.&lt;br /&gt;
* Don&#039;t use specialized sub-types (e.g. d, a) unless you also use the main specialized class (e.g. D, A).&lt;br /&gt;
; Standard labels [RAIL, ELRL, MONO, MGLV]&lt;br /&gt;
* Always re-define the standard labels when possible, instead of what would be the equivalent of the standard label in this scheme.&lt;br /&gt;
* Map the equivalent label(s) from this scheme to the standard labels using property [[Action0/Railtypes#Alternate_rail_type_labels_.281D.29|1D (NFO)]] or [[NML:Railtypes#Railtype_properties|alternative_railtype_list (NML)]].&lt;br /&gt;
; Powered/compatible rail types&lt;br /&gt;
* For the speed limit/appearance class, every type should be powered and compatible with each other.&lt;br /&gt;
* Axle load classes implemented as real railtypes should be powered and compatible in ascending order, i.e. a lower axle load is compatible with a higher axle load, but not vice versa.&lt;br /&gt;
* Different energy sources should be compatible with each other but not powered on each other, expect for multi-system energy source classes.&lt;br /&gt;
* Different track gauge and type classes should be neither powered nor compatible with each other.&lt;br /&gt;
&lt;br /&gt;
Or, put differently, for each gauge/type, select one or more energy source types. For each type/energy combination provide all axle load classes for the speed class &amp;quot;A&amp;quot;, either as a real type or as an alternate of another type. Provide more types with a different speed letter if you want to provide several different speeds or other eye-candy tracks.&lt;br /&gt;
&lt;br /&gt;
== Summary and notes for train sets ==&lt;br /&gt;
This section summarizes and comments the above for train sets.&lt;br /&gt;
&lt;br /&gt;
; [X***] Track gauge and type class&lt;br /&gt;
* Use the track type class that matches the vehicle;&lt;br /&gt;
* Define a fallback type via the railtype table in case you want the vehicle to be available on a different track if no matching track set is loaded.&lt;br /&gt;
** Specialized subtypes like &amp;quot;n&amp;quot; might not always be available. If you want those vehicles to be still available then, fall back the the generic class (e.g. &amp;quot;N&amp;quot;).&lt;br /&gt;
** Think about your set design and how for example standard gauge and narrow gauge vehicles differ to decide if a fallback from narrow gauge to standard gauge has gameplay meaning.&lt;br /&gt;
; [*X**] Speed limit class &lt;br /&gt;
* Always use class A for every vehicle.&lt;br /&gt;
; [**X*] Axle load class&lt;br /&gt;
* Use all classes A through E according to the maximum axle weight of the vehicle.&lt;br /&gt;
* Extend the predefined classes only if you also provide a track set that makes use of these;&lt;br /&gt;
** When extending the predefined classes A through E, define a fallback type via the railtype table in case you want the vehicle to be available if no matching track set is loaded.&lt;br /&gt;
; [***X] Energy source type class&lt;br /&gt;
* Use the energy source type class that matches the vehicle;&lt;br /&gt;
* When using specialized classes, define a fallback type via the railtype table in case you want the vehicle to be available if no matching track set is loaded.&lt;br /&gt;
; Standard labels [RAIL, ELRL, MONO, MGLV]&lt;br /&gt;
* Define a fallback type to the standard labels via the railtype table in case you want the vehicle to be available on the standard tracks if no matching track set is loaded. This is a decision you need to make depending on the design of your train set.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Be as specific as you want when selecting the railtype, it is the job of the track set to select a playable, reduced subset out of all possible type combinations. This can mean that some vehicles may not appear with some set combinations, but if a player does not want to have e.g. narrow gauge tracks, they might not want  narrow gauge vehicles either.&lt;br /&gt;
&lt;br /&gt;
== In case you&#039;re not convinced by this scheme ==&lt;br /&gt;
Adopting this scheme gives the player freedom to use any track set in combination with any train set that follow the scheme. &lt;br /&gt;
&lt;br /&gt;
This means that you can make your train set compatible with track sets that provide axle load classes, and track sets that provide speed limits, and at the same time with track sets that provide none of this. This way, the player can decide to play with or without axle load classes, or with or without speed limits, simply by loading a track set that does or does not provide these features.&lt;br /&gt;
&lt;br /&gt;
And for your track set, it means that you can make it as simple or as complicated as you want (within the 64 track type limit), while not having to worry about compatibility with train sets.&lt;br /&gt;
&lt;br /&gt;
Still not convinced? Feel free to use railtype labels of your own, but know that you will likely come to regret that at some point in the future.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Forum topic==&lt;br /&gt;
If you want to discuss the standardized railtype scheme or have any questions about it, you can visit [http://www.tt-forums.net/viewtopic.php?t=59379 the forum topic].&lt;br /&gt;
&lt;br /&gt;
==Extensions and best practice==&lt;br /&gt;
See [https://newgrf-specs.tt-wiki.net/wiki/Standardized_Railtype_Scheme_extensions Standardized Railtype Scheme extensions]&lt;/div&gt;</summary>
		<author><name>Michi cc</name></author>
	</entry>
	<entry>
		<id>https://newgrf-specs.tt-wiki.net/index.php?title=Standardized_Railtype_Scheme&amp;diff=5068</id>
		<title>Standardized Railtype Scheme</title>
		<link rel="alternate" type="text/html" href="https://newgrf-specs.tt-wiki.net/index.php?title=Standardized_Railtype_Scheme&amp;diff=5068"/>
		<updated>2025-06-12T15:42:16Z</updated>

		<summary type="html">&lt;p&gt;Michi cc: /* Summary for train sets */ More commentary&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This railtype label scheme aims to provide a way to allow players to easily mix and match different train and track sets. It does this by grouping the rail types into what matters from a technical perspective. The scheme provides a standardized way of defining railtype labels, based on track gauge and type, speed class, allowable axle weight and electrification type. To limit combinatorial explosions of rail types, the track properties are abstracted away from strict real-life representations.&lt;br /&gt;
&lt;br /&gt;
It is the explicit intent of this scheme to decouple track sets from vehicle sets to facilitate easy mixing. This way the player can select a track set of choice to go with a train set of choice. It allows the player to play with or without axle load classes, or with or without speed limit classes, simply by loading a track set that does or does not provide these features. In some cases it will also be possible to combine niche track sets, for instance a standard gauge track set with a narrow gauge and a metro track set. Additionally, due to the decoupling, depending on the specific train and track sets used, not all defined vehicles and/or track types might be available in a specific set combination. This is fully intended behaviour.&lt;br /&gt;
&lt;br /&gt;
== When to use the scheme and when &#039;&#039;not&#039;&#039; to use the scheme ==&lt;br /&gt;
&lt;br /&gt;
When to use:&lt;br /&gt;
* If you only want to develop a track or a train set.&lt;br /&gt;
* If you want players to be able to mix-and-match sets.&lt;br /&gt;
* If you are okay with abstractions from real life.&lt;br /&gt;
&lt;br /&gt;
When &#039;&#039;not&#039;&#039; to use:&lt;br /&gt;
* If you consider it a crime against humanity when one of your vehicles or track types is not available in a specific game.&lt;br /&gt;
* If you want your tracks or vehicles to exactly mirror real-life counterparts down to the last mm of gauge width.&lt;br /&gt;
* If your train set is specifically designed to work with your track set only.&lt;br /&gt;
* If you feel the compulsory need to fill all 64 railtype slots.&lt;br /&gt;
&lt;br /&gt;
== The Label Scheme ==&lt;br /&gt;
A railtype label consists of four characters. In this scheme, each position has a different purpose:&lt;br /&gt;
# Track gauge and type class (e.g. standard gauge rail, narrow gauge rail, monorail)&lt;br /&gt;
# Speed limit class&lt;br /&gt;
# Axle load class (maximum allowed axle weight for this track)&lt;br /&gt;
# Energy source type class&lt;br /&gt;
&lt;br /&gt;
In the next sections, each of the four positions will be explained.&lt;br /&gt;
&lt;br /&gt;
=== Track gauge and type class [X***] ===&lt;br /&gt;
The first position in the railtype label defines track gauge and/or track type class. The following classes are currently defined:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! !!Track type/gauge&lt;br /&gt;
|- &lt;br /&gt;
|S ||Standard gauge rail&lt;br /&gt;
|-&lt;br /&gt;
|B ||Broad gauge rail &lt;br /&gt;
|-&lt;br /&gt;
|N ||Narrow gauge rail&lt;br /&gt;
|-&lt;br /&gt;
|n ||Secondary narrow gauge rail (e.g. when providing both metre and cape gauge, always use N in case of just one type of narrow gauge)&lt;br /&gt;
|-&lt;br /&gt;
|D ||Dual gauge rail, standard/broad gauge&lt;br /&gt;
|-&lt;br /&gt;
|d ||Dual gauge rail, standard/narrow gauge&lt;br /&gt;
|-&lt;br /&gt;
|M ||Monorail&lt;br /&gt;
|-&lt;br /&gt;
|L ||Magnetic Levitation&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
All track gauges or types are abstractions of real-life types and do not correspond to specific examples used in real-life. For example &#039;&#039;&#039;N&#039;&#039;&#039; is any gauge that is smaller than standard gauge, but not corresponding to any specific gauge that exists in real life, just like &#039;&#039;&#039;n&#039;&#039;&#039; is smaller than &#039;&#039;&#039;N&#039;&#039;&#039;, but does not corresponds to a specific real-life gauge.&lt;br /&gt;
&lt;br /&gt;
A train set may define vehicles for gauge &#039;&#039;&#039;n&#039;&#039;&#039; while not defining vehicles for gauge &#039;&#039;&#039;N&#039;&#039;&#039;, but this is likely only useful for sets that are specifically designed to be used along-side other sets, and the used railtype fallbacks should be carefully considered.&lt;br /&gt;
&lt;br /&gt;
=== Speed limit/appearance class [*X**] ===&lt;br /&gt;
The second position in the railtype label defines the speed limit/appearance class. This can be used to provide tracks with different speed limits or appearance variations. The speed limit/appearance class is &#039;&#039;not&#039;&#039; used for trains and a train set should always use the class letter &#039;&#039;&#039;A&#039;&#039;&#039; in this position.&lt;br /&gt;
&lt;br /&gt;
There is no fixed numeric mapping for this class, but speed limits should start at &#039;&#039;&#039;A&#039;&#039;&#039; for the lowest speed limit and progress with &#039;&#039;&#039;B/C/...&#039;&#039;&#039; for higher limits. If you do not want to employ speed limits in your track set, always use the class &#039;&#039;&#039;A&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Additionally this class can also be used to distinguish different track appearances like normal or full width ballast, grass or concrete ground, etc. Train sets must not define vehicles for appearance classes. If you think you have special vehicles that should only run on the appearance class, it is &#039;&#039;not&#039;&#039; appearance but a separate track gauge/type.&lt;br /&gt;
&lt;br /&gt;
=== Axle load class [**X*] ===&lt;br /&gt;
The third position defines the axle weight limit. Heavy trains cannot run on tracks with a low axle weight limit; these trains need more expensive tracks with a higher weight limit. There are five axle load classes &#039;&#039;&#039;A&#039;&#039;&#039; through &#039;&#039;&#039;E&#039;&#039;&#039;. &#039;&#039;&#039;A&#039;&#039;&#039; is for the lowest axle load limit, &#039;&#039;&#039;E&#039;&#039;&#039; for the highest. The exact axle load attached to each class is relative to the track gauge/type and trains in the set. &lt;br /&gt;
&lt;br /&gt;
A train set should set the appropriate axle weight for each train via the railtype label, as to make the set work with track sets that do provide tracks with different weight limits, even if you don&#039;t care about it for your trainset. Ideally, all five standard axle load classes should be used, but a train set may use only some weight classes, as the vehicle rooster might not make it feasible to use all five. The group with the lowest axle weights will get class &#039;&#039;&#039;A&#039;&#039;&#039;, the second lowest class &#039;&#039;&#039;B&#039;&#039;&#039;, etc. up to the group with the highest axle weights which will get class &#039;&#039;&#039;E&#039;&#039;&#039;. If you do not use all classes, try to spread the classes out (don&#039;t use &#039;&#039;&#039;A&#039;&#039;&#039; and &#039;&#039;&#039;B&#039;&#039;&#039; for two classes, but e.g. &#039;&#039;&#039;B&#039;&#039;&#039; and &#039;&#039;&#039;D&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
A track set does not have to provide a dedicated track type for each axle weight limit. A track set that does not provide a dedicated track for each axle load class, must make sure to map all undefined axle load classes to a real railtype using property [[Action0/Railtypes#Alternate_rail_type_labels_.281D.29|1D (NFO)]] or [[NML:Railtypes#Railtype_properties|alternative_railtype_list (NML)]]. This way a train set can rely on all labels for all axle load classes being available. Example: if you only want to provide 2 axle load classes for standard gauge unelectrified with no speed limits, you can map SA&#039;&#039;&#039;A&#039;&#039;&#039;N + SA&#039;&#039;&#039;B&#039;&#039;&#039;N to SA&#039;&#039;&#039;C&#039;&#039;&#039;N and SA&#039;&#039;&#039;D&#039;&#039;&#039;N to SA&#039;&#039;&#039;E&#039;&#039;&#039;N if the cost difference between the two railtypes is high, or SA&#039;&#039;&#039;A&#039;&#039;&#039;N to SA&#039;&#039;&#039;B&#039;&#039;&#039;N and SA&#039;&#039;&#039;C&#039;&#039;&#039;N + SA&#039;&#039;&#039;D&#039;&#039;&#039;N to SA&#039;&#039;&#039;E&#039;&#039;&#039;N if the cost difference is low.&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t want to provide any axle load classes in your track set, it doesn&#039;t really matter what axle load class you choose for the track, as you&#039;ll be mapping all other classes to this track anyways. But the lowest or highest class are the obvious choice. Example: if your track set only provides narrow gauge unelectrified track with no speed limits and no axle load limits, you may use NA&#039;&#039;&#039;A&#039;&#039;&#039;N for the track label, and provide NA&#039;&#039;&#039;B&#039;&#039;&#039;N, NA&#039;&#039;&#039;C&#039;&#039;&#039;N, NA&#039;&#039;&#039;D&#039;&#039;&#039;N, NA&#039;&#039;&#039;E&#039;&#039;&#039;N in property [[Action0/Railtypes#Alternate_rail_type_labels_.281D.29|1D (NFO)]] or [[NML:Railtypes#Railtype_properties|alternative_railtype_list (NML)]].&lt;br /&gt;
&lt;br /&gt;
If you need more than five axle load class, you may use lowercase letters for very low axle loads and continue the uppercase letters for very high axle loads. Be advised that your train set may not assume the existence of any other class than &#039;&#039;&#039;A&#039;&#039;&#039; through &#039;&#039;&#039;E&#039;&#039;&#039;, so think about providing appropriate fallbacks in your railtype table. If you make a track set with an extended range, be aware that not all train sets will define trains for these tracks. In general: only do this in case of a train set with a matching track set.&lt;br /&gt;
&lt;br /&gt;
For the lowercase letters, &#039;&#039;&#039;b&#039;&#039;&#039; is lower than &#039;&#039;&#039;a&#039;&#039;&#039;, so for increasing axle load limits: b &amp;lt; a &amp;lt; A &amp;lt; B &amp;lt; C etc.&lt;br /&gt;
&lt;br /&gt;
Note that the axle load classes never map to a specific weight in tonnes. For that reason it does not make sense to add a numeric value for the axle load to the name of a track type or in the extended purchase info of a train. Instead use the relative expressions &#039;very low&#039;, &#039;low&#039;, &#039;medium&#039;, &#039;high&#039; and &#039;very high&#039; or use the class letters directly.&lt;br /&gt;
&lt;br /&gt;
=== Energy source type class [***X] ===&lt;br /&gt;
The last position defines the energy source type class. This is split in generic energy source types like overhead wires and third rail and specialized types like alternating and direct current.&lt;br /&gt;
&lt;br /&gt;
A track set that only uses specialized types, should map the generic types to the most suitable specialized type in the set.&lt;br /&gt;
&lt;br /&gt;
A vehicle set that uses specialized types should define a generic type as fallback, via the railtype table. If such a fallback is omitted, please note that certain vehicles may be unavailable depending on track set loaded.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! !!Generic energy type classes&lt;br /&gt;
|-&lt;br /&gt;
|N ||no electrification&lt;br /&gt;
|-&lt;br /&gt;
|E ||overhead wires/catenary electrification&lt;br /&gt;
|-&lt;br /&gt;
|3 ||3rd rail electrification&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! !!Specialized energy type classes !!Vehicle set fallback&lt;br /&gt;
|-&lt;br /&gt;
|Z ||3rd rail and catenary electrification || 3 or E&lt;br /&gt;
|-&lt;br /&gt;
|4 ||4th rail electrification || 3&lt;br /&gt;
|-&lt;br /&gt;
|Y ||4th rail and catenary electrification || 4 or E&lt;br /&gt;
|-&lt;br /&gt;
|T ||[http://en.wikipedia.org/wiki/Three-phase_AC_railway_electrification three phase AC electrification] || E&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; | &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|D ||DC catenary electrification || E&lt;br /&gt;
|-&lt;br /&gt;
|d ||low voltage DC catenary electrification (only when D also used in set) || First A then E&lt;br /&gt;
|-&lt;br /&gt;
|A ||AC catenary electrification || E&lt;br /&gt;
|-&lt;br /&gt;
|a ||low voltage AC catenary electrification (only when A also used in set) || First A then E&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
All energy source types are abstractions of real-life types and do not correspond to specific examples used in real-life. For example &#039;&#039;&#039;D&#039;&#039;&#039; and &#039;&#039;&#039;d&#039;&#039;&#039; are treated as two different DC voltage levels, but do not correspond to any specific real-life voltage level used.&lt;br /&gt;
&lt;br /&gt;
A train set may define vehicles for energy source &#039;&#039;&#039;d&#039;&#039;&#039; while not defining vehicles for energy source &#039;&#039;&#039;D&#039;&#039;&#039; (as an example, applies to other energy sources, too), but this is likely only useful for sets that are specifically designed to be used along-side other sets, and the used railtype fallbacks should be carefully considered.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you want multi-voltage/current vehicles in your set (i.e. a train that can run on both AC and DC current), you have to define a dedicated railtype for those vehicles. Without the railtype, it&#039;s not possible to define vehicles with this property. If you only have vehicles that can run on either one type of voltage/current or on all types of voltage/current (e.g. a 2-system if you only have &#039;&#039;&#039;A&#039;&#039;&#039; and &#039;&#039;&#039;D&#039;&#039;&#039; tracks, or a 4-system in case of all &#039;&#039;&#039;A&#039;&#039;&#039;, &#039;&#039;&#039;a&#039;&#039;&#039;, &#039;&#039;&#039;D&#039;&#039;&#039; and &#039;&#039;&#039;d&#039;&#039;&#039;), then use the generic class &#039;&#039;&#039;E&#039;&#039;&#039; for vehicles that should be able to run on all different voltage/currents. Also the track set needs to have one at least one railtype with class &#039;&#039;&#039;E&#039;&#039;&#039; defined.&lt;br /&gt;
&lt;br /&gt;
Note that if you want more than one type of multi-voltage/current, you&#039;ll quickly get a combinatory explosion of railtype labels, so plan carefully or do not attempt it. For every different multi-voltage/current vehicle type a dedicated railtype is needed. If you want all possible combinations, then you need to define an additional 8 classes. It is not recommended to make your train/track set this complicated.&lt;br /&gt;
&lt;br /&gt;
Example approach for a 4-system set, with trains that can run on either one or all systems:&lt;br /&gt;
* &#039;&#039;&#039;E&#039;&#039;&#039;: generic catenary-powered electric engines. &amp;quot;universal&amp;quot; [4-system] if any of &#039;&#039;&#039;D&#039;&#039;&#039;/&#039;&#039;&#039;d&#039;&#039;&#039;/&#039;&#039;&#039;A&#039;&#039;&#039;/&#039;&#039;&#039;a&#039;&#039;&#039; are defined.&lt;br /&gt;
* &#039;&#039;&#039;A&#039;&#039;&#039;: generic AC catenary electric engines. 25kV only if &#039;&#039;&#039;a&#039;&#039;&#039; also defined. Vehicle sets should use &#039;&#039;&#039;E&#039;&#039;&#039; as fallback, if defining an engine for &#039;&#039;&#039;A&#039;&#039;&#039;;&lt;br /&gt;
* &#039;&#039;&#039;a&#039;&#039;&#039;: 15kV AC catenary electric engines. Only defined if &#039;&#039;&#039;A&#039;&#039;&#039; also defined. Vehicle sets should use &#039;&#039;&#039;A&#039;&#039;&#039; and &#039;&#039;&#039;E&#039;&#039;&#039; as fallback, if defining an engine for &#039;&#039;&#039;a&#039;&#039;&#039;;&lt;br /&gt;
* &#039;&#039;&#039;D&#039;&#039;&#039;: generic DC catenary electric engines. 3kV if &#039;&#039;&#039;d&#039;&#039;&#039; also defined. Vehicle sets should use &#039;&#039;&#039;E&#039;&#039;&#039; as fallback, if defining an engine for &#039;&#039;&#039;D&#039;&#039;&#039;;&lt;br /&gt;
* &#039;&#039;&#039;d&#039;&#039;&#039;: 1.5kV DC catenary electric engines. Only defined if &#039;&#039;&#039;D&#039;&#039;&#039; also defined. Vehicle sets should use &#039;&#039;&#039;D&#039;&#039;&#039; and &#039;&#039;&#039;E&#039;&#039;&#039; as fallback, if defining an engine for &#039;&#039;&#039;d&#039;&#039;&#039;.&lt;br /&gt;
For a 2-system set, you can simply drop &#039;&#039;&#039;a&#039;&#039;&#039; and &#039;&#039;&#039;d&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Standard labels: RAIL, ELRL, MONO, MGLV ===&lt;br /&gt;
It&#039;s not possible to undefine the standard railtypes RAIL, ELRL, MONO and MGLV. The game will always add those if there are vehicles defined for these track types. As a result, for a track set it&#039;s best not to ignore those standard labels, but rather work with them and define them in the set. If your track set does not have monorail or maglev tracks, there of course is no need to define those. But if your track set defines anything that resembles unelectrified or electrified rail, you should use the RAIL and ELRL labels. Matching labels from the above scheme will then be defined in property [[Action0/Railtypes#Alternate_rail_type_labels_.281D.29|1D (NFO)]] or [[NML:Railtypes#Railtype_properties|alternative_railtype_list (NML)]].&lt;br /&gt;
&lt;br /&gt;
As vehicles from NewGRFs that do not use explicit railtypes will end up on these standard railtypes, you should use RAIL instead of whatever type could be regarded as the most commonly used unelectrified type, ELRL instead of the most commonly used electrified type and so on. The label according to this scheme is then set as an alternate.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Summary and notes for track sets ==&lt;br /&gt;
This section summarizes and comments the above for track sets.&lt;br /&gt;
&lt;br /&gt;
; [X***] Track gauge and type class&lt;br /&gt;
* Define at least one track type for every track gauge/type class you want in your set.&lt;br /&gt;
* If you only provide tracks for one gauge/type, consider leaving some free railtypes so a player can load an additional set for some other type.&lt;br /&gt;
; [*X**] Speed limit class&lt;br /&gt;
* Make sure class A is always available, either directly or via an alternate label.&lt;br /&gt;
* Use only class A if you don&#039;t want speed limits;&lt;br /&gt;
* With speed limits, A is the lowest speed limit. Continue with B, C, etc. for increasing speed limits;&lt;br /&gt;
* The speed class can also be used to implement additional eye-candy track types, use letters higher in the alphabet for this.&lt;br /&gt;
; [**X*] Axle load class&lt;br /&gt;
* Always define all classes A through E for every track type class / electrification combination, either:&lt;br /&gt;
** Directly via a real railtype definition;&lt;br /&gt;
** Indirectly via the alternate rail type label list, property [[Action0/Railtypes#Alternate_rail_type_labels_.281D.29|1D (NFO)]] or [[NML:Railtypes#Railtype_properties|alternative_railtype_list (NML)]].&lt;br /&gt;
* Extend the predefined classes only if you also provide a train set that makes use of these.&lt;br /&gt;
; [***X] Energy source type class&lt;br /&gt;
* If your set only uses specialized classes, always map the generic classes to the closest matching specialized type via property 1D.&lt;br /&gt;
* Don&#039;t use specialized sub-types (e.g. d, a) unless you also use the main specialized class (e.g. D, A).&lt;br /&gt;
; Standard labels [RAIL, ELRL, MONO, MGLV]&lt;br /&gt;
* Always re-define the standard labels when possible, instead of what would be the equivalent of the standard label in this scheme.&lt;br /&gt;
* Map the equivalent label(s) from this scheme to the standard labels using property [[Action0/Railtypes#Alternate_rail_type_labels_.281D.29|1D (NFO)]] or [[NML:Railtypes#Railtype_properties|alternative_railtype_list (NML)]].&lt;br /&gt;
; Powered/compatible rail types&lt;br /&gt;
* For the speed limit/appearance class, every type should be powered and compatible with each other.&lt;br /&gt;
* Axle load classes implemented as real railtypes should be powered and compatible in ascending order, i.e. a lower axle load is compatible with a higher axle load, but not vice versa.&lt;br /&gt;
* Different energy sources should be compatible with each other but not powered on each other, expect for multi-system energy source classes.&lt;br /&gt;
* Different track gauge and type classes should be neither powered nor compatible with each other.&lt;br /&gt;
&lt;br /&gt;
Or, put differently, for each gauge/type, select one or more energy source types. For each type/energy combination provide all axle load classes for the speed class &amp;quot;A&amp;quot;, either as a real type or as an alternate of another type. Provide more types with a different speed letter if you want to provide several different speeds or other eye-candy tracks.&lt;br /&gt;
&lt;br /&gt;
== Summary and notes for train sets ==&lt;br /&gt;
This section summarizes and comments the above for train sets.&lt;br /&gt;
&lt;br /&gt;
; [X***] Track gauge and type class&lt;br /&gt;
* Use the track type class that matches the vehicle;&lt;br /&gt;
* Define a fallback type via the railtype table in case you want the vehicle to be available on a different track if no matching track set is loaded.&lt;br /&gt;
** Specialized subtypes like &amp;quot;n&amp;quot; might not always be available. If you want those vehicles to be still available then, fall back the the generic class (e.g. &amp;quot;N&amp;quot;).&lt;br /&gt;
** Think about your set design and how for example standard gauge and narrow gauge vehicles differ to decide if a fallback from narrow gauge to standard gauge has gameplay meaning.&lt;br /&gt;
; [*X**] Speed limit class &lt;br /&gt;
* Always use class A for every vehicle.&lt;br /&gt;
; [**X*] Axle load class&lt;br /&gt;
* Use all classes A through E according to the maximum axle weight of the vehicle.&lt;br /&gt;
* Extend the predefined classes only if you also provide a track set that makes use of these;&lt;br /&gt;
** When extending the predefined classes A through E, define a fallback type via the railtype table in case you want the vehicle to be available if no matching track set is loaded.&lt;br /&gt;
; [***X] Energy source type class&lt;br /&gt;
* Use the energy source type class that matches the vehicle;&lt;br /&gt;
* When using specialized classes, define a fallback type via the railtype table in case you want the vehicle to be available if no matching track set is loaded.&lt;br /&gt;
* The multi-system energy source classes (like e.g. Z or Y) are rarely appropriate for vehicles, as it would mean a vehicle needs both energy sources to be powered.&lt;br /&gt;
; Standard labels [RAIL, ELRL, MONO, MGLV]&lt;br /&gt;
* Define a fallback type to the standard labels via the railtype table in case you want the vehicle to be available on the standard tracks if no matching track set is loaded. This is a decision you need to make depending on the design of your train set.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Be as specific as you want when selecting the railtype, it is the job of the track set to select a playable, reduced subset out of all possible type combinations. This can mean that some vehicles may not appear with some set combinations, but if a player does not want to have e.g. narrow gauge tracks, they might not want  narrow gauge vehicles either.&lt;br /&gt;
&lt;br /&gt;
== In case you&#039;re not convinced by this scheme ==&lt;br /&gt;
Adopting this scheme gives the player freedom to use any track set in combination with any train set that follow the scheme. &lt;br /&gt;
&lt;br /&gt;
This means that you can make your train set compatible with track sets that provide axle load classes, and track sets that provide speed limits, and at the same time with track sets that provide none of this. This way, the player can decide to play with or without axle load classes, or with or without speed limits, simply by loading a track set that does or does not provide these features.&lt;br /&gt;
&lt;br /&gt;
And for your track set, it means that you can make it as simple or as complicated as you want (within the 64 track type limit), while not having to worry about compatibility with train sets.&lt;br /&gt;
&lt;br /&gt;
Still not convinced? Feel free to use railtype labels of your own, but know that you will likely come to regret that at some point in the future.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Forum topic==&lt;br /&gt;
If you want to discuss the standardized railtype scheme or have any questions about it, you can visit [http://www.tt-forums.net/viewtopic.php?t=59379 the forum topic].&lt;br /&gt;
&lt;br /&gt;
==Extensions and best practice==&lt;br /&gt;
See [https://newgrf-specs.tt-wiki.net/wiki/Standardized_Railtype_Scheme_extensions Standardized Railtype Scheme extensions]&lt;/div&gt;</summary>
		<author><name>Michi cc</name></author>
	</entry>
	<entry>
		<id>https://newgrf-specs.tt-wiki.net/index.php?title=Standardized_Railtype_Scheme&amp;diff=5067</id>
		<title>Standardized Railtype Scheme</title>
		<link rel="alternate" type="text/html" href="https://newgrf-specs.tt-wiki.net/index.php?title=Standardized_Railtype_Scheme&amp;diff=5067"/>
		<updated>2025-06-12T15:29:44Z</updated>

		<summary type="html">&lt;p&gt;Michi cc: /* Summary for track sets */ Notes on compatible/powered.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This railtype label scheme aims to provide a way to allow players to easily mix and match different train and track sets. It does this by grouping the rail types into what matters from a technical perspective. The scheme provides a standardized way of defining railtype labels, based on track gauge and type, speed class, allowable axle weight and electrification type. To limit combinatorial explosions of rail types, the track properties are abstracted away from strict real-life representations.&lt;br /&gt;
&lt;br /&gt;
It is the explicit intent of this scheme to decouple track sets from vehicle sets to facilitate easy mixing. This way the player can select a track set of choice to go with a train set of choice. It allows the player to play with or without axle load classes, or with or without speed limit classes, simply by loading a track set that does or does not provide these features. In some cases it will also be possible to combine niche track sets, for instance a standard gauge track set with a narrow gauge and a metro track set. Additionally, due to the decoupling, depending on the specific train and track sets used, not all defined vehicles and/or track types might be available in a specific set combination. This is fully intended behaviour.&lt;br /&gt;
&lt;br /&gt;
== When to use the scheme and when &#039;&#039;not&#039;&#039; to use the scheme ==&lt;br /&gt;
&lt;br /&gt;
When to use:&lt;br /&gt;
* If you only want to develop a track or a train set.&lt;br /&gt;
* If you want players to be able to mix-and-match sets.&lt;br /&gt;
* If you are okay with abstractions from real life.&lt;br /&gt;
&lt;br /&gt;
When &#039;&#039;not&#039;&#039; to use:&lt;br /&gt;
* If you consider it a crime against humanity when one of your vehicles or track types is not available in a specific game.&lt;br /&gt;
* If you want your tracks or vehicles to exactly mirror real-life counterparts down to the last mm of gauge width.&lt;br /&gt;
* If your train set is specifically designed to work with your track set only.&lt;br /&gt;
* If you feel the compulsory need to fill all 64 railtype slots.&lt;br /&gt;
&lt;br /&gt;
== The Label Scheme ==&lt;br /&gt;
A railtype label consists of four characters. In this scheme, each position has a different purpose:&lt;br /&gt;
# Track gauge and type class (e.g. standard gauge rail, narrow gauge rail, monorail)&lt;br /&gt;
# Speed limit class&lt;br /&gt;
# Axle load class (maximum allowed axle weight for this track)&lt;br /&gt;
# Energy source type class&lt;br /&gt;
&lt;br /&gt;
In the next sections, each of the four positions will be explained.&lt;br /&gt;
&lt;br /&gt;
=== Track gauge and type class [X***] ===&lt;br /&gt;
The first position in the railtype label defines track gauge and/or track type class. The following classes are currently defined:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! !!Track type/gauge&lt;br /&gt;
|- &lt;br /&gt;
|S ||Standard gauge rail&lt;br /&gt;
|-&lt;br /&gt;
|B ||Broad gauge rail &lt;br /&gt;
|-&lt;br /&gt;
|N ||Narrow gauge rail&lt;br /&gt;
|-&lt;br /&gt;
|n ||Secondary narrow gauge rail (e.g. when providing both metre and cape gauge, always use N in case of just one type of narrow gauge)&lt;br /&gt;
|-&lt;br /&gt;
|D ||Dual gauge rail, standard/broad gauge&lt;br /&gt;
|-&lt;br /&gt;
|d ||Dual gauge rail, standard/narrow gauge&lt;br /&gt;
|-&lt;br /&gt;
|M ||Monorail&lt;br /&gt;
|-&lt;br /&gt;
|L ||Magnetic Levitation&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
All track gauges or types are abstractions of real-life types and do not correspond to specific examples used in real-life. For example &#039;&#039;&#039;N&#039;&#039;&#039; is any gauge that is smaller than standard gauge, but not corresponding to any specific gauge that exists in real life, just like &#039;&#039;&#039;n&#039;&#039;&#039; is smaller than &#039;&#039;&#039;N&#039;&#039;&#039;, but does not corresponds to a specific real-life gauge.&lt;br /&gt;
&lt;br /&gt;
A train set may define vehicles for gauge &#039;&#039;&#039;n&#039;&#039;&#039; while not defining vehicles for gauge &#039;&#039;&#039;N&#039;&#039;&#039;, but this is likely only useful for sets that are specifically designed to be used along-side other sets, and the used railtype fallbacks should be carefully considered.&lt;br /&gt;
&lt;br /&gt;
=== Speed limit/appearance class [*X**] ===&lt;br /&gt;
The second position in the railtype label defines the speed limit/appearance class. This can be used to provide tracks with different speed limits or appearance variations. The speed limit/appearance class is &#039;&#039;not&#039;&#039; used for trains and a train set should always use the class letter &#039;&#039;&#039;A&#039;&#039;&#039; in this position.&lt;br /&gt;
&lt;br /&gt;
There is no fixed numeric mapping for this class, but speed limits should start at &#039;&#039;&#039;A&#039;&#039;&#039; for the lowest speed limit and progress with &#039;&#039;&#039;B/C/...&#039;&#039;&#039; for higher limits. If you do not want to employ speed limits in your track set, always use the class &#039;&#039;&#039;A&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Additionally this class can also be used to distinguish different track appearances like normal or full width ballast, grass or concrete ground, etc. Train sets must not define vehicles for appearance classes. If you think you have special vehicles that should only run on the appearance class, it is &#039;&#039;not&#039;&#039; appearance but a separate track gauge/type.&lt;br /&gt;
&lt;br /&gt;
=== Axle load class [**X*] ===&lt;br /&gt;
The third position defines the axle weight limit. Heavy trains cannot run on tracks with a low axle weight limit; these trains need more expensive tracks with a higher weight limit. There are five axle load classes &#039;&#039;&#039;A&#039;&#039;&#039; through &#039;&#039;&#039;E&#039;&#039;&#039;. &#039;&#039;&#039;A&#039;&#039;&#039; is for the lowest axle load limit, &#039;&#039;&#039;E&#039;&#039;&#039; for the highest. The exact axle load attached to each class is relative to the track gauge/type and trains in the set. &lt;br /&gt;
&lt;br /&gt;
A train set should set the appropriate axle weight for each train via the railtype label, as to make the set work with track sets that do provide tracks with different weight limits, even if you don&#039;t care about it for your trainset. Ideally, all five standard axle load classes should be used, but a train set may use only some weight classes, as the vehicle rooster might not make it feasible to use all five. The group with the lowest axle weights will get class &#039;&#039;&#039;A&#039;&#039;&#039;, the second lowest class &#039;&#039;&#039;B&#039;&#039;&#039;, etc. up to the group with the highest axle weights which will get class &#039;&#039;&#039;E&#039;&#039;&#039;. If you do not use all classes, try to spread the classes out (don&#039;t use &#039;&#039;&#039;A&#039;&#039;&#039; and &#039;&#039;&#039;B&#039;&#039;&#039; for two classes, but e.g. &#039;&#039;&#039;B&#039;&#039;&#039; and &#039;&#039;&#039;D&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
A track set does not have to provide a dedicated track type for each axle weight limit. A track set that does not provide a dedicated track for each axle load class, must make sure to map all undefined axle load classes to a real railtype using property [[Action0/Railtypes#Alternate_rail_type_labels_.281D.29|1D (NFO)]] or [[NML:Railtypes#Railtype_properties|alternative_railtype_list (NML)]]. This way a train set can rely on all labels for all axle load classes being available. Example: if you only want to provide 2 axle load classes for standard gauge unelectrified with no speed limits, you can map SA&#039;&#039;&#039;A&#039;&#039;&#039;N + SA&#039;&#039;&#039;B&#039;&#039;&#039;N to SA&#039;&#039;&#039;C&#039;&#039;&#039;N and SA&#039;&#039;&#039;D&#039;&#039;&#039;N to SA&#039;&#039;&#039;E&#039;&#039;&#039;N if the cost difference between the two railtypes is high, or SA&#039;&#039;&#039;A&#039;&#039;&#039;N to SA&#039;&#039;&#039;B&#039;&#039;&#039;N and SA&#039;&#039;&#039;C&#039;&#039;&#039;N + SA&#039;&#039;&#039;D&#039;&#039;&#039;N to SA&#039;&#039;&#039;E&#039;&#039;&#039;N if the cost difference is low.&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t want to provide any axle load classes in your track set, it doesn&#039;t really matter what axle load class you choose for the track, as you&#039;ll be mapping all other classes to this track anyways. But the lowest or highest class are the obvious choice. Example: if your track set only provides narrow gauge unelectrified track with no speed limits and no axle load limits, you may use NA&#039;&#039;&#039;A&#039;&#039;&#039;N for the track label, and provide NA&#039;&#039;&#039;B&#039;&#039;&#039;N, NA&#039;&#039;&#039;C&#039;&#039;&#039;N, NA&#039;&#039;&#039;D&#039;&#039;&#039;N, NA&#039;&#039;&#039;E&#039;&#039;&#039;N in property [[Action0/Railtypes#Alternate_rail_type_labels_.281D.29|1D (NFO)]] or [[NML:Railtypes#Railtype_properties|alternative_railtype_list (NML)]].&lt;br /&gt;
&lt;br /&gt;
If you need more than five axle load class, you may use lowercase letters for very low axle loads and continue the uppercase letters for very high axle loads. Be advised that your train set may not assume the existence of any other class than &#039;&#039;&#039;A&#039;&#039;&#039; through &#039;&#039;&#039;E&#039;&#039;&#039;, so think about providing appropriate fallbacks in your railtype table. If you make a track set with an extended range, be aware that not all train sets will define trains for these tracks. In general: only do this in case of a train set with a matching track set.&lt;br /&gt;
&lt;br /&gt;
For the lowercase letters, &#039;&#039;&#039;b&#039;&#039;&#039; is lower than &#039;&#039;&#039;a&#039;&#039;&#039;, so for increasing axle load limits: b &amp;lt; a &amp;lt; A &amp;lt; B &amp;lt; C etc.&lt;br /&gt;
&lt;br /&gt;
Note that the axle load classes never map to a specific weight in tonnes. For that reason it does not make sense to add a numeric value for the axle load to the name of a track type or in the extended purchase info of a train. Instead use the relative expressions &#039;very low&#039;, &#039;low&#039;, &#039;medium&#039;, &#039;high&#039; and &#039;very high&#039; or use the class letters directly.&lt;br /&gt;
&lt;br /&gt;
=== Energy source type class [***X] ===&lt;br /&gt;
The last position defines the energy source type class. This is split in generic energy source types like overhead wires and third rail and specialized types like alternating and direct current.&lt;br /&gt;
&lt;br /&gt;
A track set that only uses specialized types, should map the generic types to the most suitable specialized type in the set.&lt;br /&gt;
&lt;br /&gt;
A vehicle set that uses specialized types should define a generic type as fallback, via the railtype table. If such a fallback is omitted, please note that certain vehicles may be unavailable depending on track set loaded.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! !!Generic energy type classes&lt;br /&gt;
|-&lt;br /&gt;
|N ||no electrification&lt;br /&gt;
|-&lt;br /&gt;
|E ||overhead wires/catenary electrification&lt;br /&gt;
|-&lt;br /&gt;
|3 ||3rd rail electrification&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! !!Specialized energy type classes !!Vehicle set fallback&lt;br /&gt;
|-&lt;br /&gt;
|Z ||3rd rail and catenary electrification || 3 or E&lt;br /&gt;
|-&lt;br /&gt;
|4 ||4th rail electrification || 3&lt;br /&gt;
|-&lt;br /&gt;
|Y ||4th rail and catenary electrification || 4 or E&lt;br /&gt;
|-&lt;br /&gt;
|T ||[http://en.wikipedia.org/wiki/Three-phase_AC_railway_electrification three phase AC electrification] || E&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; | &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|D ||DC catenary electrification || E&lt;br /&gt;
|-&lt;br /&gt;
|d ||low voltage DC catenary electrification (only when D also used in set) || First A then E&lt;br /&gt;
|-&lt;br /&gt;
|A ||AC catenary electrification || E&lt;br /&gt;
|-&lt;br /&gt;
|a ||low voltage AC catenary electrification (only when A also used in set) || First A then E&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
All energy source types are abstractions of real-life types and do not correspond to specific examples used in real-life. For example &#039;&#039;&#039;D&#039;&#039;&#039; and &#039;&#039;&#039;d&#039;&#039;&#039; are treated as two different DC voltage levels, but do not correspond to any specific real-life voltage level used.&lt;br /&gt;
&lt;br /&gt;
A train set may define vehicles for energy source &#039;&#039;&#039;d&#039;&#039;&#039; while not defining vehicles for energy source &#039;&#039;&#039;D&#039;&#039;&#039; (as an example, applies to other energy sources, too), but this is likely only useful for sets that are specifically designed to be used along-side other sets, and the used railtype fallbacks should be carefully considered.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you want multi-voltage/current vehicles in your set (i.e. a train that can run on both AC and DC current), you have to define a dedicated railtype for those vehicles. Without the railtype, it&#039;s not possible to define vehicles with this property. If you only have vehicles that can run on either one type of voltage/current or on all types of voltage/current (e.g. a 2-system if you only have &#039;&#039;&#039;A&#039;&#039;&#039; and &#039;&#039;&#039;D&#039;&#039;&#039; tracks, or a 4-system in case of all &#039;&#039;&#039;A&#039;&#039;&#039;, &#039;&#039;&#039;a&#039;&#039;&#039;, &#039;&#039;&#039;D&#039;&#039;&#039; and &#039;&#039;&#039;d&#039;&#039;&#039;), then use the generic class &#039;&#039;&#039;E&#039;&#039;&#039; for vehicles that should be able to run on all different voltage/currents. Also the track set needs to have one at least one railtype with class &#039;&#039;&#039;E&#039;&#039;&#039; defined.&lt;br /&gt;
&lt;br /&gt;
Note that if you want more than one type of multi-voltage/current, you&#039;ll quickly get a combinatory explosion of railtype labels, so plan carefully or do not attempt it. For every different multi-voltage/current vehicle type a dedicated railtype is needed. If you want all possible combinations, then you need to define an additional 8 classes. It is not recommended to make your train/track set this complicated.&lt;br /&gt;
&lt;br /&gt;
Example approach for a 4-system set, with trains that can run on either one or all systems:&lt;br /&gt;
* &#039;&#039;&#039;E&#039;&#039;&#039;: generic catenary-powered electric engines. &amp;quot;universal&amp;quot; [4-system] if any of &#039;&#039;&#039;D&#039;&#039;&#039;/&#039;&#039;&#039;d&#039;&#039;&#039;/&#039;&#039;&#039;A&#039;&#039;&#039;/&#039;&#039;&#039;a&#039;&#039;&#039; are defined.&lt;br /&gt;
* &#039;&#039;&#039;A&#039;&#039;&#039;: generic AC catenary electric engines. 25kV only if &#039;&#039;&#039;a&#039;&#039;&#039; also defined. Vehicle sets should use &#039;&#039;&#039;E&#039;&#039;&#039; as fallback, if defining an engine for &#039;&#039;&#039;A&#039;&#039;&#039;;&lt;br /&gt;
* &#039;&#039;&#039;a&#039;&#039;&#039;: 15kV AC catenary electric engines. Only defined if &#039;&#039;&#039;A&#039;&#039;&#039; also defined. Vehicle sets should use &#039;&#039;&#039;A&#039;&#039;&#039; and &#039;&#039;&#039;E&#039;&#039;&#039; as fallback, if defining an engine for &#039;&#039;&#039;a&#039;&#039;&#039;;&lt;br /&gt;
* &#039;&#039;&#039;D&#039;&#039;&#039;: generic DC catenary electric engines. 3kV if &#039;&#039;&#039;d&#039;&#039;&#039; also defined. Vehicle sets should use &#039;&#039;&#039;E&#039;&#039;&#039; as fallback, if defining an engine for &#039;&#039;&#039;D&#039;&#039;&#039;;&lt;br /&gt;
* &#039;&#039;&#039;d&#039;&#039;&#039;: 1.5kV DC catenary electric engines. Only defined if &#039;&#039;&#039;D&#039;&#039;&#039; also defined. Vehicle sets should use &#039;&#039;&#039;D&#039;&#039;&#039; and &#039;&#039;&#039;E&#039;&#039;&#039; as fallback, if defining an engine for &#039;&#039;&#039;d&#039;&#039;&#039;.&lt;br /&gt;
For a 2-system set, you can simply drop &#039;&#039;&#039;a&#039;&#039;&#039; and &#039;&#039;&#039;d&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Standard labels: RAIL, ELRL, MONO, MGLV ===&lt;br /&gt;
It&#039;s not possible to undefine the standard railtypes RAIL, ELRL, MONO and MGLV. The game will always add those if there are vehicles defined for these track types. As a result, for a track set it&#039;s best not to ignore those standard labels, but rather work with them and define them in the set. If your track set does not have monorail or maglev tracks, there of course is no need to define those. But if your track set defines anything that resembles unelectrified or electrified rail, you should use the RAIL and ELRL labels. Matching labels from the above scheme will then be defined in property [[Action0/Railtypes#Alternate_rail_type_labels_.281D.29|1D (NFO)]] or [[NML:Railtypes#Railtype_properties|alternative_railtype_list (NML)]].&lt;br /&gt;
&lt;br /&gt;
As vehicles from NewGRFs that do not use explicit railtypes will end up on these standard railtypes, you should use RAIL instead of whatever type could be regarded as the most commonly used unelectrified type, ELRL instead of the most commonly used electrified type and so on. The label according to this scheme is then set as an alternate.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Summary and notes for track sets ==&lt;br /&gt;
This section summarizes and comments the above for track sets.&lt;br /&gt;
&lt;br /&gt;
; [X***] Track gauge and type class&lt;br /&gt;
* Define at least one track type for every track gauge/type class you want in your set.&lt;br /&gt;
* If you only provide tracks for one gauge/type, consider leaving some free railtypes so a player can load an additional set for some other type.&lt;br /&gt;
; [*X**] Speed limit class&lt;br /&gt;
* Make sure class A is always available, either directly or via an alternate label.&lt;br /&gt;
* Use only class A if you don&#039;t want speed limits;&lt;br /&gt;
* With speed limits, A is the lowest speed limit. Continue with B, C, etc. for increasing speed limits;&lt;br /&gt;
* The speed class can also be used to implement additional eye-candy track types, use letters higher in the alphabet for this.&lt;br /&gt;
; [**X*] Axle load class&lt;br /&gt;
* Always define all classes A through E for every track type class / electrification combination, either:&lt;br /&gt;
** Directly via a real railtype definition;&lt;br /&gt;
** Indirectly via the alternate rail type label list, property [[Action0/Railtypes#Alternate_rail_type_labels_.281D.29|1D (NFO)]] or [[NML:Railtypes#Railtype_properties|alternative_railtype_list (NML)]].&lt;br /&gt;
* Extend the predefined classes only if you also provide a train set that makes use of these.&lt;br /&gt;
; [***X] Energy source type class&lt;br /&gt;
* If your set only uses specialized classes, always map the generic classes to the closest matching specialized type via property 1D.&lt;br /&gt;
* Don&#039;t use specialized sub-types (e.g. d, a) unless you also use the main specialized class (e.g. D, A).&lt;br /&gt;
; Standard labels [RAIL, ELRL, MONO, MGLV]&lt;br /&gt;
* Always re-define the standard labels when possible, instead of what would be the equivalent of the standard label in this scheme.&lt;br /&gt;
* Map the equivalent label(s) from this scheme to the standard labels using property [[Action0/Railtypes#Alternate_rail_type_labels_.281D.29|1D (NFO)]] or [[NML:Railtypes#Railtype_properties|alternative_railtype_list (NML)]].&lt;br /&gt;
; Powered/compatible rail types&lt;br /&gt;
* For the speed limit/appearance class, every type should be powered and compatible with each other.&lt;br /&gt;
* Axle load classes implemented as real railtypes should be powered and compatible in ascending order, i.e. a lower axle load is compatible with a higher axle load, but not vice versa.&lt;br /&gt;
* Different energy sources should be compatible with each other but not powered on each other, expect for multi-system energy source classes.&lt;br /&gt;
* Different track gauge and type classes should be neither powered nor compatible with each other.&lt;br /&gt;
&lt;br /&gt;
Or, put differently, for each gauge/type, select one or more energy source types. For each type/energy combination provide all axle load classes for the speed class &amp;quot;A&amp;quot;, either as a real type or as an alternate of another type. Provide more types with a different speed letter if you want to provide several different speeds or other eye-candy tracks.&lt;br /&gt;
&lt;br /&gt;
== Summary for train sets ==&lt;br /&gt;
This section summarizes the above for train sets.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
; [X***] Track gauge and type class&lt;br /&gt;
* Use the track type class that matches the vehicle;&lt;br /&gt;
* Define a fallback type via the railtype table in case you want the vehicle to be available on a different track if no matching track set is loaded.&lt;br /&gt;
** Specialized subtypes like &amp;quot;n&amp;quot; might not always be available. If you want those vehicles to be still available then, fall back the the generic class (e.g. &amp;quot;N&amp;quot;).&lt;br /&gt;
; [*X**] Speed limit class &lt;br /&gt;
* Always use class A for every vehicle.&lt;br /&gt;
; [**X*] Axle load class&lt;br /&gt;
* Use all classes A through E according to the maximum axle weight of the vehicle.&lt;br /&gt;
* Extend the predefined classes only if you also provide a track set that makes use of these;&lt;br /&gt;
** When extending the predefined classes A through E, define a fallback type via the railtype table in case you want the vehicle to be available if no matching track set is loaded.&lt;br /&gt;
; [***X] Energy source type class&lt;br /&gt;
* Use the energy source type class that matches the vehicle;&lt;br /&gt;
* When using specialized classes, define a fallback type via the railtype table in case you want the vehicle to be available if no matching track set is loaded.&lt;br /&gt;
; Standard labels [RAIL, ELRL, MONO, MGLV]&lt;br /&gt;
* Define a fallback type to the standard labels via the railtype table in case you want the vehicle to be available on the standard tracks if no matching track set is loaded.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Be as specific as you want when selecting the railtype, it is the job of the track set to select a playable, reduced subset out of all possible type combinations.&lt;br /&gt;
&lt;br /&gt;
== In case you&#039;re not convinced by this scheme ==&lt;br /&gt;
Adopting this scheme gives the player freedom to use any track set in combination with any train set that follow the scheme. &lt;br /&gt;
&lt;br /&gt;
This means that you can make your train set compatible with track sets that provide axle load classes, and track sets that provide speed limits, and at the same time with track sets that provide none of this. This way, the player can decide to play with or without axle load classes, or with or without speed limits, simply by loading a track set that does or does not provide these features.&lt;br /&gt;
&lt;br /&gt;
And for your track set, it means that you can make it as simple or as complicated as you want (within the 64 track type limit), while not having to worry about compatibility with train sets.&lt;br /&gt;
&lt;br /&gt;
Still not convinced? Feel free to use railtype labels of your own, but know that you will likely come to regret that at some point in the future.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Forum topic==&lt;br /&gt;
If you want to discuss the standardized railtype scheme or have any questions about it, you can visit [http://www.tt-forums.net/viewtopic.php?t=59379 the forum topic].&lt;br /&gt;
&lt;br /&gt;
==Extensions and best practice==&lt;br /&gt;
See [https://newgrf-specs.tt-wiki.net/wiki/Standardized_Railtype_Scheme_extensions Standardized Railtype Scheme extensions]&lt;/div&gt;</summary>
		<author><name>Michi cc</name></author>
	</entry>
	<entry>
		<id>https://newgrf-specs.tt-wiki.net/index.php?title=Standardized_Railtype_Scheme&amp;diff=5066</id>
		<title>Standardized Railtype Scheme</title>
		<link rel="alternate" type="text/html" href="https://newgrf-specs.tt-wiki.net/index.php?title=Standardized_Railtype_Scheme&amp;diff=5066"/>
		<updated>2025-06-12T15:15:19Z</updated>

		<summary type="html">&lt;p&gt;Michi cc: /* Energy source type class [***X] */ Extra comment about mixing D/s.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This railtype label scheme aims to provide a way to allow players to easily mix and match different train and track sets. It does this by grouping the rail types into what matters from a technical perspective. The scheme provides a standardized way of defining railtype labels, based on track gauge and type, speed class, allowable axle weight and electrification type. To limit combinatorial explosions of rail types, the track properties are abstracted away from strict real-life representations.&lt;br /&gt;
&lt;br /&gt;
It is the explicit intent of this scheme to decouple track sets from vehicle sets to facilitate easy mixing. This way the player can select a track set of choice to go with a train set of choice. It allows the player to play with or without axle load classes, or with or without speed limit classes, simply by loading a track set that does or does not provide these features. In some cases it will also be possible to combine niche track sets, for instance a standard gauge track set with a narrow gauge and a metro track set. Additionally, due to the decoupling, depending on the specific train and track sets used, not all defined vehicles and/or track types might be available in a specific set combination. This is fully intended behaviour.&lt;br /&gt;
&lt;br /&gt;
== When to use the scheme and when &#039;&#039;not&#039;&#039; to use the scheme ==&lt;br /&gt;
&lt;br /&gt;
When to use:&lt;br /&gt;
* If you only want to develop a track or a train set.&lt;br /&gt;
* If you want players to be able to mix-and-match sets.&lt;br /&gt;
* If you are okay with abstractions from real life.&lt;br /&gt;
&lt;br /&gt;
When &#039;&#039;not&#039;&#039; to use:&lt;br /&gt;
* If you consider it a crime against humanity when one of your vehicles or track types is not available in a specific game.&lt;br /&gt;
* If you want your tracks or vehicles to exactly mirror real-life counterparts down to the last mm of gauge width.&lt;br /&gt;
* If your train set is specifically designed to work with your track set only.&lt;br /&gt;
* If you feel the compulsory need to fill all 64 railtype slots.&lt;br /&gt;
&lt;br /&gt;
== The Label Scheme ==&lt;br /&gt;
A railtype label consists of four characters. In this scheme, each position has a different purpose:&lt;br /&gt;
# Track gauge and type class (e.g. standard gauge rail, narrow gauge rail, monorail)&lt;br /&gt;
# Speed limit class&lt;br /&gt;
# Axle load class (maximum allowed axle weight for this track)&lt;br /&gt;
# Energy source type class&lt;br /&gt;
&lt;br /&gt;
In the next sections, each of the four positions will be explained.&lt;br /&gt;
&lt;br /&gt;
=== Track gauge and type class [X***] ===&lt;br /&gt;
The first position in the railtype label defines track gauge and/or track type class. The following classes are currently defined:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! !!Track type/gauge&lt;br /&gt;
|- &lt;br /&gt;
|S ||Standard gauge rail&lt;br /&gt;
|-&lt;br /&gt;
|B ||Broad gauge rail &lt;br /&gt;
|-&lt;br /&gt;
|N ||Narrow gauge rail&lt;br /&gt;
|-&lt;br /&gt;
|n ||Secondary narrow gauge rail (e.g. when providing both metre and cape gauge, always use N in case of just one type of narrow gauge)&lt;br /&gt;
|-&lt;br /&gt;
|D ||Dual gauge rail, standard/broad gauge&lt;br /&gt;
|-&lt;br /&gt;
|d ||Dual gauge rail, standard/narrow gauge&lt;br /&gt;
|-&lt;br /&gt;
|M ||Monorail&lt;br /&gt;
|-&lt;br /&gt;
|L ||Magnetic Levitation&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
All track gauges or types are abstractions of real-life types and do not correspond to specific examples used in real-life. For example &#039;&#039;&#039;N&#039;&#039;&#039; is any gauge that is smaller than standard gauge, but not corresponding to any specific gauge that exists in real life, just like &#039;&#039;&#039;n&#039;&#039;&#039; is smaller than &#039;&#039;&#039;N&#039;&#039;&#039;, but does not corresponds to a specific real-life gauge.&lt;br /&gt;
&lt;br /&gt;
A train set may define vehicles for gauge &#039;&#039;&#039;n&#039;&#039;&#039; while not defining vehicles for gauge &#039;&#039;&#039;N&#039;&#039;&#039;, but this is likely only useful for sets that are specifically designed to be used along-side other sets, and the used railtype fallbacks should be carefully considered.&lt;br /&gt;
&lt;br /&gt;
=== Speed limit/appearance class [*X**] ===&lt;br /&gt;
The second position in the railtype label defines the speed limit/appearance class. This can be used to provide tracks with different speed limits or appearance variations. The speed limit/appearance class is &#039;&#039;not&#039;&#039; used for trains and a train set should always use the class letter &#039;&#039;&#039;A&#039;&#039;&#039; in this position.&lt;br /&gt;
&lt;br /&gt;
There is no fixed numeric mapping for this class, but speed limits should start at &#039;&#039;&#039;A&#039;&#039;&#039; for the lowest speed limit and progress with &#039;&#039;&#039;B/C/...&#039;&#039;&#039; for higher limits. If you do not want to employ speed limits in your track set, always use the class &#039;&#039;&#039;A&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Additionally this class can also be used to distinguish different track appearances like normal or full width ballast, grass or concrete ground, etc. Train sets must not define vehicles for appearance classes. If you think you have special vehicles that should only run on the appearance class, it is &#039;&#039;not&#039;&#039; appearance but a separate track gauge/type.&lt;br /&gt;
&lt;br /&gt;
=== Axle load class [**X*] ===&lt;br /&gt;
The third position defines the axle weight limit. Heavy trains cannot run on tracks with a low axle weight limit; these trains need more expensive tracks with a higher weight limit. There are five axle load classes &#039;&#039;&#039;A&#039;&#039;&#039; through &#039;&#039;&#039;E&#039;&#039;&#039;. &#039;&#039;&#039;A&#039;&#039;&#039; is for the lowest axle load limit, &#039;&#039;&#039;E&#039;&#039;&#039; for the highest. The exact axle load attached to each class is relative to the track gauge/type and trains in the set. &lt;br /&gt;
&lt;br /&gt;
A train set should set the appropriate axle weight for each train via the railtype label, as to make the set work with track sets that do provide tracks with different weight limits, even if you don&#039;t care about it for your trainset. Ideally, all five standard axle load classes should be used, but a train set may use only some weight classes, as the vehicle rooster might not make it feasible to use all five. The group with the lowest axle weights will get class &#039;&#039;&#039;A&#039;&#039;&#039;, the second lowest class &#039;&#039;&#039;B&#039;&#039;&#039;, etc. up to the group with the highest axle weights which will get class &#039;&#039;&#039;E&#039;&#039;&#039;. If you do not use all classes, try to spread the classes out (don&#039;t use &#039;&#039;&#039;A&#039;&#039;&#039; and &#039;&#039;&#039;B&#039;&#039;&#039; for two classes, but e.g. &#039;&#039;&#039;B&#039;&#039;&#039; and &#039;&#039;&#039;D&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
A track set does not have to provide a dedicated track type for each axle weight limit. A track set that does not provide a dedicated track for each axle load class, must make sure to map all undefined axle load classes to a real railtype using property [[Action0/Railtypes#Alternate_rail_type_labels_.281D.29|1D (NFO)]] or [[NML:Railtypes#Railtype_properties|alternative_railtype_list (NML)]]. This way a train set can rely on all labels for all axle load classes being available. Example: if you only want to provide 2 axle load classes for standard gauge unelectrified with no speed limits, you can map SA&#039;&#039;&#039;A&#039;&#039;&#039;N + SA&#039;&#039;&#039;B&#039;&#039;&#039;N to SA&#039;&#039;&#039;C&#039;&#039;&#039;N and SA&#039;&#039;&#039;D&#039;&#039;&#039;N to SA&#039;&#039;&#039;E&#039;&#039;&#039;N if the cost difference between the two railtypes is high, or SA&#039;&#039;&#039;A&#039;&#039;&#039;N to SA&#039;&#039;&#039;B&#039;&#039;&#039;N and SA&#039;&#039;&#039;C&#039;&#039;&#039;N + SA&#039;&#039;&#039;D&#039;&#039;&#039;N to SA&#039;&#039;&#039;E&#039;&#039;&#039;N if the cost difference is low.&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t want to provide any axle load classes in your track set, it doesn&#039;t really matter what axle load class you choose for the track, as you&#039;ll be mapping all other classes to this track anyways. But the lowest or highest class are the obvious choice. Example: if your track set only provides narrow gauge unelectrified track with no speed limits and no axle load limits, you may use NA&#039;&#039;&#039;A&#039;&#039;&#039;N for the track label, and provide NA&#039;&#039;&#039;B&#039;&#039;&#039;N, NA&#039;&#039;&#039;C&#039;&#039;&#039;N, NA&#039;&#039;&#039;D&#039;&#039;&#039;N, NA&#039;&#039;&#039;E&#039;&#039;&#039;N in property [[Action0/Railtypes#Alternate_rail_type_labels_.281D.29|1D (NFO)]] or [[NML:Railtypes#Railtype_properties|alternative_railtype_list (NML)]].&lt;br /&gt;
&lt;br /&gt;
If you need more than five axle load class, you may use lowercase letters for very low axle loads and continue the uppercase letters for very high axle loads. Be advised that your train set may not assume the existence of any other class than &#039;&#039;&#039;A&#039;&#039;&#039; through &#039;&#039;&#039;E&#039;&#039;&#039;, so think about providing appropriate fallbacks in your railtype table. If you make a track set with an extended range, be aware that not all train sets will define trains for these tracks. In general: only do this in case of a train set with a matching track set.&lt;br /&gt;
&lt;br /&gt;
For the lowercase letters, &#039;&#039;&#039;b&#039;&#039;&#039; is lower than &#039;&#039;&#039;a&#039;&#039;&#039;, so for increasing axle load limits: b &amp;lt; a &amp;lt; A &amp;lt; B &amp;lt; C etc.&lt;br /&gt;
&lt;br /&gt;
Note that the axle load classes never map to a specific weight in tonnes. For that reason it does not make sense to add a numeric value for the axle load to the name of a track type or in the extended purchase info of a train. Instead use the relative expressions &#039;very low&#039;, &#039;low&#039;, &#039;medium&#039;, &#039;high&#039; and &#039;very high&#039; or use the class letters directly.&lt;br /&gt;
&lt;br /&gt;
=== Energy source type class [***X] ===&lt;br /&gt;
The last position defines the energy source type class. This is split in generic energy source types like overhead wires and third rail and specialized types like alternating and direct current.&lt;br /&gt;
&lt;br /&gt;
A track set that only uses specialized types, should map the generic types to the most suitable specialized type in the set.&lt;br /&gt;
&lt;br /&gt;
A vehicle set that uses specialized types should define a generic type as fallback, via the railtype table. If such a fallback is omitted, please note that certain vehicles may be unavailable depending on track set loaded.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! !!Generic energy type classes&lt;br /&gt;
|-&lt;br /&gt;
|N ||no electrification&lt;br /&gt;
|-&lt;br /&gt;
|E ||overhead wires/catenary electrification&lt;br /&gt;
|-&lt;br /&gt;
|3 ||3rd rail electrification&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! !!Specialized energy type classes !!Vehicle set fallback&lt;br /&gt;
|-&lt;br /&gt;
|Z ||3rd rail and catenary electrification || 3 or E&lt;br /&gt;
|-&lt;br /&gt;
|4 ||4th rail electrification || 3&lt;br /&gt;
|-&lt;br /&gt;
|Y ||4th rail and catenary electrification || 4 or E&lt;br /&gt;
|-&lt;br /&gt;
|T ||[http://en.wikipedia.org/wiki/Three-phase_AC_railway_electrification three phase AC electrification] || E&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; | &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|D ||DC catenary electrification || E&lt;br /&gt;
|-&lt;br /&gt;
|d ||low voltage DC catenary electrification (only when D also used in set) || First A then E&lt;br /&gt;
|-&lt;br /&gt;
|A ||AC catenary electrification || E&lt;br /&gt;
|-&lt;br /&gt;
|a ||low voltage AC catenary electrification (only when A also used in set) || First A then E&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
All energy source types are abstractions of real-life types and do not correspond to specific examples used in real-life. For example &#039;&#039;&#039;D&#039;&#039;&#039; and &#039;&#039;&#039;d&#039;&#039;&#039; are treated as two different DC voltage levels, but do not correspond to any specific real-life voltage level used.&lt;br /&gt;
&lt;br /&gt;
A train set may define vehicles for energy source &#039;&#039;&#039;d&#039;&#039;&#039; while not defining vehicles for energy source &#039;&#039;&#039;D&#039;&#039;&#039; (as an example, applies to other energy sources, too), but this is likely only useful for sets that are specifically designed to be used along-side other sets, and the used railtype fallbacks should be carefully considered.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you want multi-voltage/current vehicles in your set (i.e. a train that can run on both AC and DC current), you have to define a dedicated railtype for those vehicles. Without the railtype, it&#039;s not possible to define vehicles with this property. If you only have vehicles that can run on either one type of voltage/current or on all types of voltage/current (e.g. a 2-system if you only have &#039;&#039;&#039;A&#039;&#039;&#039; and &#039;&#039;&#039;D&#039;&#039;&#039; tracks, or a 4-system in case of all &#039;&#039;&#039;A&#039;&#039;&#039;, &#039;&#039;&#039;a&#039;&#039;&#039;, &#039;&#039;&#039;D&#039;&#039;&#039; and &#039;&#039;&#039;d&#039;&#039;&#039;), then use the generic class &#039;&#039;&#039;E&#039;&#039;&#039; for vehicles that should be able to run on all different voltage/currents. Also the track set needs to have one at least one railtype with class &#039;&#039;&#039;E&#039;&#039;&#039; defined.&lt;br /&gt;
&lt;br /&gt;
Note that if you want more than one type of multi-voltage/current, you&#039;ll quickly get a combinatory explosion of railtype labels, so plan carefully or do not attempt it. For every different multi-voltage/current vehicle type a dedicated railtype is needed. If you want all possible combinations, then you need to define an additional 8 classes. It is not recommended to make your train/track set this complicated.&lt;br /&gt;
&lt;br /&gt;
Example approach for a 4-system set, with trains that can run on either one or all systems:&lt;br /&gt;
* &#039;&#039;&#039;E&#039;&#039;&#039;: generic catenary-powered electric engines. &amp;quot;universal&amp;quot; [4-system] if any of &#039;&#039;&#039;D&#039;&#039;&#039;/&#039;&#039;&#039;d&#039;&#039;&#039;/&#039;&#039;&#039;A&#039;&#039;&#039;/&#039;&#039;&#039;a&#039;&#039;&#039; are defined.&lt;br /&gt;
* &#039;&#039;&#039;A&#039;&#039;&#039;: generic AC catenary electric engines. 25kV only if &#039;&#039;&#039;a&#039;&#039;&#039; also defined. Vehicle sets should use &#039;&#039;&#039;E&#039;&#039;&#039; as fallback, if defining an engine for &#039;&#039;&#039;A&#039;&#039;&#039;;&lt;br /&gt;
* &#039;&#039;&#039;a&#039;&#039;&#039;: 15kV AC catenary electric engines. Only defined if &#039;&#039;&#039;A&#039;&#039;&#039; also defined. Vehicle sets should use &#039;&#039;&#039;A&#039;&#039;&#039; and &#039;&#039;&#039;E&#039;&#039;&#039; as fallback, if defining an engine for &#039;&#039;&#039;a&#039;&#039;&#039;;&lt;br /&gt;
* &#039;&#039;&#039;D&#039;&#039;&#039;: generic DC catenary electric engines. 3kV if &#039;&#039;&#039;d&#039;&#039;&#039; also defined. Vehicle sets should use &#039;&#039;&#039;E&#039;&#039;&#039; as fallback, if defining an engine for &#039;&#039;&#039;D&#039;&#039;&#039;;&lt;br /&gt;
* &#039;&#039;&#039;d&#039;&#039;&#039;: 1.5kV DC catenary electric engines. Only defined if &#039;&#039;&#039;D&#039;&#039;&#039; also defined. Vehicle sets should use &#039;&#039;&#039;D&#039;&#039;&#039; and &#039;&#039;&#039;E&#039;&#039;&#039; as fallback, if defining an engine for &#039;&#039;&#039;d&#039;&#039;&#039;.&lt;br /&gt;
For a 2-system set, you can simply drop &#039;&#039;&#039;a&#039;&#039;&#039; and &#039;&#039;&#039;d&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Standard labels: RAIL, ELRL, MONO, MGLV ===&lt;br /&gt;
It&#039;s not possible to undefine the standard railtypes RAIL, ELRL, MONO and MGLV. The game will always add those if there are vehicles defined for these track types. As a result, for a track set it&#039;s best not to ignore those standard labels, but rather work with them and define them in the set. If your track set does not have monorail or maglev tracks, there of course is no need to define those. But if your track set defines anything that resembles unelectrified or electrified rail, you should use the RAIL and ELRL labels. Matching labels from the above scheme will then be defined in property [[Action0/Railtypes#Alternate_rail_type_labels_.281D.29|1D (NFO)]] or [[NML:Railtypes#Railtype_properties|alternative_railtype_list (NML)]].&lt;br /&gt;
&lt;br /&gt;
As vehicles from NewGRFs that do not use explicit railtypes will end up on these standard railtypes, you should use RAIL instead of whatever type could be regarded as the most commonly used unelectrified type, ELRL instead of the most commonly used electrified type and so on. The label according to this scheme is then set as an alternate.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Summary for track sets ==&lt;br /&gt;
This section summarizes the above for track sets.&lt;br /&gt;
&lt;br /&gt;
; [X***] Track gauge and type class&lt;br /&gt;
* Define at least one track type for every track gauge/type class you want in your set.&lt;br /&gt;
* If you only provide tracks for one gauge/type, consider leaving some free railtypes so a player can load an additional set for some other type.&lt;br /&gt;
; [*X**] Speed limit class&lt;br /&gt;
* Make sure class A is always available, either directly or via an alternate label.&lt;br /&gt;
* Use only class A if you don&#039;t want speed limits;&lt;br /&gt;
* With speed limits, A is the lowest speed limit. Continue with B, C, etc. for increasing speed limits;&lt;br /&gt;
* The speed class can also be used to implement additional eye-candy track types, use letters higher in the alphabet for this.&lt;br /&gt;
; [**X*] Axle load class&lt;br /&gt;
* Always define all classes A through E for every track type class / electrification combination, either:&lt;br /&gt;
** Directly via a real railtype definition;&lt;br /&gt;
** Indirectly via the alternate rail type label list, property [[Action0/Railtypes#Alternate_rail_type_labels_.281D.29|1D (NFO)]] or [[NML:Railtypes#Railtype_properties|alternative_railtype_list (NML)]].&lt;br /&gt;
* Extend the predefined classes only if you also provide a train set that makes use of these.&lt;br /&gt;
; [***X] Energy source type class&lt;br /&gt;
* If your set only uses specialized classes, always map the generic classes to the closest matching specialized type via property 1D.&lt;br /&gt;
; Standard labels [RAIL, ELRL, MONO, MGLV]&lt;br /&gt;
* Always define the standard labels when possible, instead of what would be the equivalent of the standard label in this scheme.&lt;br /&gt;
* Map the equivalent labels from this scheme to the standard labels using property [[Action0/Railtypes#Alternate_rail_type_labels_.281D.29|1D (NFO)]] or [[NML:Railtypes#Railtype_properties|alternative_railtype_list (NML)]].&lt;br /&gt;
&lt;br /&gt;
Or, put differently, for each gauge/type, select one or more energy source types. For each type/energy combination provide all axle load classes for the speed class &amp;quot;A&amp;quot;, either as a real type or as an alternate of another type. Provide more types with a different speed letter if you want to provide several different speeds or other eye-candy tracks.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Summary for train sets ==&lt;br /&gt;
This section summarizes the above for train sets.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
; [X***] Track gauge and type class&lt;br /&gt;
* Use the track type class that matches the vehicle;&lt;br /&gt;
* Define a fallback type via the railtype table in case you want the vehicle to be available on a different track if no matching track set is loaded.&lt;br /&gt;
** Specialized subtypes like &amp;quot;n&amp;quot; might not always be available. If you want those vehicles to be still available then, fall back the the generic class (e.g. &amp;quot;N&amp;quot;).&lt;br /&gt;
; [*X**] Speed limit class &lt;br /&gt;
* Always use class A for every vehicle.&lt;br /&gt;
; [**X*] Axle load class&lt;br /&gt;
* Use all classes A through E according to the maximum axle weight of the vehicle.&lt;br /&gt;
* Extend the predefined classes only if you also provide a track set that makes use of these;&lt;br /&gt;
** When extending the predefined classes A through E, define a fallback type via the railtype table in case you want the vehicle to be available if no matching track set is loaded.&lt;br /&gt;
; [***X] Energy source type class&lt;br /&gt;
* Use the energy source type class that matches the vehicle;&lt;br /&gt;
* When using specialized classes, define a fallback type via the railtype table in case you want the vehicle to be available if no matching track set is loaded.&lt;br /&gt;
; Standard labels [RAIL, ELRL, MONO, MGLV]&lt;br /&gt;
* Define a fallback type to the standard labels via the railtype table in case you want the vehicle to be available on the standard tracks if no matching track set is loaded.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Be as specific as you want when selecting the railtype, it is the job of the track set to select a playable, reduced subset out of all possible type combinations.&lt;br /&gt;
&lt;br /&gt;
== In case you&#039;re not convinced by this scheme ==&lt;br /&gt;
Adopting this scheme gives the player freedom to use any track set in combination with any train set that follow the scheme. &lt;br /&gt;
&lt;br /&gt;
This means that you can make your train set compatible with track sets that provide axle load classes, and track sets that provide speed limits, and at the same time with track sets that provide none of this. This way, the player can decide to play with or without axle load classes, or with or without speed limits, simply by loading a track set that does or does not provide these features.&lt;br /&gt;
&lt;br /&gt;
And for your track set, it means that you can make it as simple or as complicated as you want (within the 64 track type limit), while not having to worry about compatibility with train sets.&lt;br /&gt;
&lt;br /&gt;
Still not convinced? Feel free to use railtype labels of your own, but know that you will likely come to regret that at some point in the future.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Forum topic==&lt;br /&gt;
If you want to discuss the standardized railtype scheme or have any questions about it, you can visit [http://www.tt-forums.net/viewtopic.php?t=59379 the forum topic].&lt;br /&gt;
&lt;br /&gt;
==Extensions and best practice==&lt;br /&gt;
See [https://newgrf-specs.tt-wiki.net/wiki/Standardized_Railtype_Scheme_extensions Standardized Railtype Scheme extensions]&lt;/div&gt;</summary>
		<author><name>Michi cc</name></author>
	</entry>
	<entry>
		<id>https://newgrf-specs.tt-wiki.net/index.php?title=Standardized_Railtype_Scheme&amp;diff=5065</id>
		<title>Standardized Railtype Scheme</title>
		<link rel="alternate" type="text/html" href="https://newgrf-specs.tt-wiki.net/index.php?title=Standardized_Railtype_Scheme&amp;diff=5065"/>
		<updated>2025-06-12T15:09:25Z</updated>

		<summary type="html">&lt;p&gt;Michi cc: /* Speed limit/appearance class [*X**] */ Moved example classes to Standardized Railtype Scheme extensions page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This railtype label scheme aims to provide a way to allow players to easily mix and match different train and track sets. It does this by grouping the rail types into what matters from a technical perspective. The scheme provides a standardized way of defining railtype labels, based on track gauge and type, speed class, allowable axle weight and electrification type. To limit combinatorial explosions of rail types, the track properties are abstracted away from strict real-life representations.&lt;br /&gt;
&lt;br /&gt;
It is the explicit intent of this scheme to decouple track sets from vehicle sets to facilitate easy mixing. This way the player can select a track set of choice to go with a train set of choice. It allows the player to play with or without axle load classes, or with or without speed limit classes, simply by loading a track set that does or does not provide these features. In some cases it will also be possible to combine niche track sets, for instance a standard gauge track set with a narrow gauge and a metro track set. Additionally, due to the decoupling, depending on the specific train and track sets used, not all defined vehicles and/or track types might be available in a specific set combination. This is fully intended behaviour.&lt;br /&gt;
&lt;br /&gt;
== When to use the scheme and when &#039;&#039;not&#039;&#039; to use the scheme ==&lt;br /&gt;
&lt;br /&gt;
When to use:&lt;br /&gt;
* If you only want to develop a track or a train set.&lt;br /&gt;
* If you want players to be able to mix-and-match sets.&lt;br /&gt;
* If you are okay with abstractions from real life.&lt;br /&gt;
&lt;br /&gt;
When &#039;&#039;not&#039;&#039; to use:&lt;br /&gt;
* If you consider it a crime against humanity when one of your vehicles or track types is not available in a specific game.&lt;br /&gt;
* If you want your tracks or vehicles to exactly mirror real-life counterparts down to the last mm of gauge width.&lt;br /&gt;
* If your train set is specifically designed to work with your track set only.&lt;br /&gt;
* If you feel the compulsory need to fill all 64 railtype slots.&lt;br /&gt;
&lt;br /&gt;
== The Label Scheme ==&lt;br /&gt;
A railtype label consists of four characters. In this scheme, each position has a different purpose:&lt;br /&gt;
# Track gauge and type class (e.g. standard gauge rail, narrow gauge rail, monorail)&lt;br /&gt;
# Speed limit class&lt;br /&gt;
# Axle load class (maximum allowed axle weight for this track)&lt;br /&gt;
# Energy source type class&lt;br /&gt;
&lt;br /&gt;
In the next sections, each of the four positions will be explained.&lt;br /&gt;
&lt;br /&gt;
=== Track gauge and type class [X***] ===&lt;br /&gt;
The first position in the railtype label defines track gauge and/or track type class. The following classes are currently defined:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! !!Track type/gauge&lt;br /&gt;
|- &lt;br /&gt;
|S ||Standard gauge rail&lt;br /&gt;
|-&lt;br /&gt;
|B ||Broad gauge rail &lt;br /&gt;
|-&lt;br /&gt;
|N ||Narrow gauge rail&lt;br /&gt;
|-&lt;br /&gt;
|n ||Secondary narrow gauge rail (e.g. when providing both metre and cape gauge, always use N in case of just one type of narrow gauge)&lt;br /&gt;
|-&lt;br /&gt;
|D ||Dual gauge rail, standard/broad gauge&lt;br /&gt;
|-&lt;br /&gt;
|d ||Dual gauge rail, standard/narrow gauge&lt;br /&gt;
|-&lt;br /&gt;
|M ||Monorail&lt;br /&gt;
|-&lt;br /&gt;
|L ||Magnetic Levitation&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
All track gauges or types are abstractions of real-life types and do not correspond to specific examples used in real-life. For example &#039;&#039;&#039;N&#039;&#039;&#039; is any gauge that is smaller than standard gauge, but not corresponding to any specific gauge that exists in real life, just like &#039;&#039;&#039;n&#039;&#039;&#039; is smaller than &#039;&#039;&#039;N&#039;&#039;&#039;, but does not corresponds to a specific real-life gauge.&lt;br /&gt;
&lt;br /&gt;
A train set may define vehicles for gauge &#039;&#039;&#039;n&#039;&#039;&#039; while not defining vehicles for gauge &#039;&#039;&#039;N&#039;&#039;&#039;, but this is likely only useful for sets that are specifically designed to be used along-side other sets, and the used railtype fallbacks should be carefully considered.&lt;br /&gt;
&lt;br /&gt;
=== Speed limit/appearance class [*X**] ===&lt;br /&gt;
The second position in the railtype label defines the speed limit/appearance class. This can be used to provide tracks with different speed limits or appearance variations. The speed limit/appearance class is &#039;&#039;not&#039;&#039; used for trains and a train set should always use the class letter &#039;&#039;&#039;A&#039;&#039;&#039; in this position.&lt;br /&gt;
&lt;br /&gt;
There is no fixed numeric mapping for this class, but speed limits should start at &#039;&#039;&#039;A&#039;&#039;&#039; for the lowest speed limit and progress with &#039;&#039;&#039;B/C/...&#039;&#039;&#039; for higher limits. If you do not want to employ speed limits in your track set, always use the class &#039;&#039;&#039;A&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Additionally this class can also be used to distinguish different track appearances like normal or full width ballast, grass or concrete ground, etc. Train sets must not define vehicles for appearance classes. If you think you have special vehicles that should only run on the appearance class, it is &#039;&#039;not&#039;&#039; appearance but a separate track gauge/type.&lt;br /&gt;
&lt;br /&gt;
=== Axle load class [**X*] ===&lt;br /&gt;
The third position defines the axle weight limit. Heavy trains cannot run on tracks with a low axle weight limit; these trains need more expensive tracks with a higher weight limit. There are five axle load classes &#039;&#039;&#039;A&#039;&#039;&#039; through &#039;&#039;&#039;E&#039;&#039;&#039;. &#039;&#039;&#039;A&#039;&#039;&#039; is for the lowest axle load limit, &#039;&#039;&#039;E&#039;&#039;&#039; for the highest. The exact axle load attached to each class is relative to the track gauge/type and trains in the set. &lt;br /&gt;
&lt;br /&gt;
A train set should set the appropriate axle weight for each train via the railtype label, as to make the set work with track sets that do provide tracks with different weight limits, even if you don&#039;t care about it for your trainset. Ideally, all five standard axle load classes should be used, but a train set may use only some weight classes, as the vehicle rooster might not make it feasible to use all five. The group with the lowest axle weights will get class &#039;&#039;&#039;A&#039;&#039;&#039;, the second lowest class &#039;&#039;&#039;B&#039;&#039;&#039;, etc. up to the group with the highest axle weights which will get class &#039;&#039;&#039;E&#039;&#039;&#039;. If you do not use all classes, try to spread the classes out (don&#039;t use &#039;&#039;&#039;A&#039;&#039;&#039; and &#039;&#039;&#039;B&#039;&#039;&#039; for two classes, but e.g. &#039;&#039;&#039;B&#039;&#039;&#039; and &#039;&#039;&#039;D&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
A track set does not have to provide a dedicated track type for each axle weight limit. A track set that does not provide a dedicated track for each axle load class, must make sure to map all undefined axle load classes to a real railtype using property [[Action0/Railtypes#Alternate_rail_type_labels_.281D.29|1D (NFO)]] or [[NML:Railtypes#Railtype_properties|alternative_railtype_list (NML)]]. This way a train set can rely on all labels for all axle load classes being available. Example: if you only want to provide 2 axle load classes for standard gauge unelectrified with no speed limits, you can map SA&#039;&#039;&#039;A&#039;&#039;&#039;N + SA&#039;&#039;&#039;B&#039;&#039;&#039;N to SA&#039;&#039;&#039;C&#039;&#039;&#039;N and SA&#039;&#039;&#039;D&#039;&#039;&#039;N to SA&#039;&#039;&#039;E&#039;&#039;&#039;N if the cost difference between the two railtypes is high, or SA&#039;&#039;&#039;A&#039;&#039;&#039;N to SA&#039;&#039;&#039;B&#039;&#039;&#039;N and SA&#039;&#039;&#039;C&#039;&#039;&#039;N + SA&#039;&#039;&#039;D&#039;&#039;&#039;N to SA&#039;&#039;&#039;E&#039;&#039;&#039;N if the cost difference is low.&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t want to provide any axle load classes in your track set, it doesn&#039;t really matter what axle load class you choose for the track, as you&#039;ll be mapping all other classes to this track anyways. But the lowest or highest class are the obvious choice. Example: if your track set only provides narrow gauge unelectrified track with no speed limits and no axle load limits, you may use NA&#039;&#039;&#039;A&#039;&#039;&#039;N for the track label, and provide NA&#039;&#039;&#039;B&#039;&#039;&#039;N, NA&#039;&#039;&#039;C&#039;&#039;&#039;N, NA&#039;&#039;&#039;D&#039;&#039;&#039;N, NA&#039;&#039;&#039;E&#039;&#039;&#039;N in property [[Action0/Railtypes#Alternate_rail_type_labels_.281D.29|1D (NFO)]] or [[NML:Railtypes#Railtype_properties|alternative_railtype_list (NML)]].&lt;br /&gt;
&lt;br /&gt;
If you need more than five axle load class, you may use lowercase letters for very low axle loads and continue the uppercase letters for very high axle loads. Be advised that your train set may not assume the existence of any other class than &#039;&#039;&#039;A&#039;&#039;&#039; through &#039;&#039;&#039;E&#039;&#039;&#039;, so think about providing appropriate fallbacks in your railtype table. If you make a track set with an extended range, be aware that not all train sets will define trains for these tracks. In general: only do this in case of a train set with a matching track set.&lt;br /&gt;
&lt;br /&gt;
For the lowercase letters, &#039;&#039;&#039;b&#039;&#039;&#039; is lower than &#039;&#039;&#039;a&#039;&#039;&#039;, so for increasing axle load limits: b &amp;lt; a &amp;lt; A &amp;lt; B &amp;lt; C etc.&lt;br /&gt;
&lt;br /&gt;
Note that the axle load classes never map to a specific weight in tonnes. For that reason it does not make sense to add a numeric value for the axle load to the name of a track type or in the extended purchase info of a train. Instead use the relative expressions &#039;very low&#039;, &#039;low&#039;, &#039;medium&#039;, &#039;high&#039; and &#039;very high&#039; or use the class letters directly.&lt;br /&gt;
&lt;br /&gt;
=== Energy source type class [***X] ===&lt;br /&gt;
The last position defines the energy source type class. This is split in generic energy source types like overhead wires and third rail and specialized types like alternating and direct current.&lt;br /&gt;
&lt;br /&gt;
A track set that only uses specialized types, should map the generic types to the most suitable specialized type in the set.&lt;br /&gt;
&lt;br /&gt;
A vehicle set that uses specialized types should define a generic type as fallback, via the railtype table. If such a fallback is omitted, please note that certain vehicles may be unavailable depending on track set loaded.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! !!Generic energy type classes&lt;br /&gt;
|-&lt;br /&gt;
|N ||no electrification&lt;br /&gt;
|-&lt;br /&gt;
|E ||overhead wires/catenary electrification&lt;br /&gt;
|-&lt;br /&gt;
|3 ||3rd rail electrification&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! !!Specialized energy type classes !!Vehicle set fallback&lt;br /&gt;
|-&lt;br /&gt;
|Z ||3rd rail and catenary electrification || 3 or E&lt;br /&gt;
|-&lt;br /&gt;
|4 ||4th rail electrification || 3&lt;br /&gt;
|-&lt;br /&gt;
|Y ||4th rail and catenary electrification || 4 or E&lt;br /&gt;
|-&lt;br /&gt;
|T ||[http://en.wikipedia.org/wiki/Three-phase_AC_railway_electrification three phase AC electrification] || E&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; | &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|D ||DC catenary electrification || E&lt;br /&gt;
|-&lt;br /&gt;
|d ||low voltage DC catenary electrification (only when D also used in set) || First A then E&lt;br /&gt;
|-&lt;br /&gt;
|A ||AC catenary electrification || E&lt;br /&gt;
|-&lt;br /&gt;
|a ||low voltage AC catenary electrification (only when A also used in set) || First A then E&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you want multi-voltage/current vehicles in your set (i.e. a train that can run on both AC and DC current), you have to define a dedicated railtype for those vehicles. Without the railtype, it&#039;s not possible to define vehicles with this property. If you only have vehicles that can run on either one type of voltage/current or on all types of voltage/current (e.g. a 2-system if you only have &#039;&#039;&#039;A&#039;&#039;&#039; and &#039;&#039;&#039;D&#039;&#039;&#039; tracks, or a 4-system in case of all &#039;&#039;&#039;A&#039;&#039;&#039;, &#039;&#039;&#039;a&#039;&#039;&#039;, &#039;&#039;&#039;D&#039;&#039;&#039; and &#039;&#039;&#039;d&#039;&#039;&#039;), then use the generic class &#039;&#039;&#039;E&#039;&#039;&#039; for vehicles that should be able to run on all different voltage/currents. Also the track set needs to have one at least one railtype with class &#039;&#039;&#039;E&#039;&#039;&#039; defined.&lt;br /&gt;
&lt;br /&gt;
Note that if you want more than one type of multi-voltage/current, you&#039;ll quickly get a combinatory explosion of railtype labels, so plan carefully or do not attempt it. For every different multi-voltage/current vehicle type a dedicated railtype is needed. If you want all possible combinations, then you need to define an additional 8 classes. It is not recommended to make your train/track set this complicated.&lt;br /&gt;
&lt;br /&gt;
Example approach for a 4-system set, with trains that can run on either one or all systems:&lt;br /&gt;
* &#039;&#039;&#039;E&#039;&#039;&#039;: generic catenary-powered electric engines. &amp;quot;universal&amp;quot; [4-system] if any of &#039;&#039;&#039;D&#039;&#039;&#039;/&#039;&#039;&#039;d&#039;&#039;&#039;/&#039;&#039;&#039;A&#039;&#039;&#039;/&#039;&#039;&#039;a&#039;&#039;&#039; are defined.&lt;br /&gt;
* &#039;&#039;&#039;A&#039;&#039;&#039;: generic AC catenary electric engines. 25kV only if &#039;&#039;&#039;a&#039;&#039;&#039; also defined. Vehicle sets should use &#039;&#039;&#039;E&#039;&#039;&#039; as fallback, if defining an engine for &#039;&#039;&#039;A&#039;&#039;&#039;;&lt;br /&gt;
* &#039;&#039;&#039;a&#039;&#039;&#039;: 15kV AC catenary electric engines. Only defined if &#039;&#039;&#039;A&#039;&#039;&#039; also defined. Vehicle sets should use &#039;&#039;&#039;A&#039;&#039;&#039; and &#039;&#039;&#039;E&#039;&#039;&#039; as fallback, if defining an engine for &#039;&#039;&#039;a&#039;&#039;&#039;;&lt;br /&gt;
* &#039;&#039;&#039;D&#039;&#039;&#039;: generic DC catenary electric engines. 3kV if &#039;&#039;&#039;d&#039;&#039;&#039; also defined. Vehicle sets should use &#039;&#039;&#039;E&#039;&#039;&#039; as fallback, if defining an engine for &#039;&#039;&#039;D&#039;&#039;&#039;;&lt;br /&gt;
* &#039;&#039;&#039;d&#039;&#039;&#039;: 1.5kV DC catenary electric engines. Only defined if &#039;&#039;&#039;D&#039;&#039;&#039; also defined. Vehicle sets should use &#039;&#039;&#039;D&#039;&#039;&#039; and &#039;&#039;&#039;E&#039;&#039;&#039; as fallback, if defining an engine for &#039;&#039;&#039;d&#039;&#039;&#039;.&lt;br /&gt;
For a 2-system set, you can simply drop &#039;&#039;&#039;a&#039;&#039;&#039; and &#039;&#039;&#039;d&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Standard labels: RAIL, ELRL, MONO, MGLV ===&lt;br /&gt;
It&#039;s not possible to undefine the standard railtypes RAIL, ELRL, MONO and MGLV. The game will always add those if there are vehicles defined for these track types. As a result, for a track set it&#039;s best not to ignore those standard labels, but rather work with them and define them in the set. If your track set does not have monorail or maglev tracks, there of course is no need to define those. But if your track set defines anything that resembles unelectrified or electrified rail, you should use the RAIL and ELRL labels. Matching labels from the above scheme will then be defined in property [[Action0/Railtypes#Alternate_rail_type_labels_.281D.29|1D (NFO)]] or [[NML:Railtypes#Railtype_properties|alternative_railtype_list (NML)]].&lt;br /&gt;
&lt;br /&gt;
As vehicles from NewGRFs that do not use explicit railtypes will end up on these standard railtypes, you should use RAIL instead of whatever type could be regarded as the most commonly used unelectrified type, ELRL instead of the most commonly used electrified type and so on. The label according to this scheme is then set as an alternate.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Summary for track sets ==&lt;br /&gt;
This section summarizes the above for track sets.&lt;br /&gt;
&lt;br /&gt;
; [X***] Track gauge and type class&lt;br /&gt;
* Define at least one track type for every track gauge/type class you want in your set.&lt;br /&gt;
* If you only provide tracks for one gauge/type, consider leaving some free railtypes so a player can load an additional set for some other type.&lt;br /&gt;
; [*X**] Speed limit class&lt;br /&gt;
* Make sure class A is always available, either directly or via an alternate label.&lt;br /&gt;
* Use only class A if you don&#039;t want speed limits;&lt;br /&gt;
* With speed limits, A is the lowest speed limit. Continue with B, C, etc. for increasing speed limits;&lt;br /&gt;
* The speed class can also be used to implement additional eye-candy track types, use letters higher in the alphabet for this.&lt;br /&gt;
; [**X*] Axle load class&lt;br /&gt;
* Always define all classes A through E for every track type class / electrification combination, either:&lt;br /&gt;
** Directly via a real railtype definition;&lt;br /&gt;
** Indirectly via the alternate rail type label list, property [[Action0/Railtypes#Alternate_rail_type_labels_.281D.29|1D (NFO)]] or [[NML:Railtypes#Railtype_properties|alternative_railtype_list (NML)]].&lt;br /&gt;
* Extend the predefined classes only if you also provide a train set that makes use of these.&lt;br /&gt;
; [***X] Energy source type class&lt;br /&gt;
* If your set only uses specialized classes, always map the generic classes to the closest matching specialized type via property 1D.&lt;br /&gt;
; Standard labels [RAIL, ELRL, MONO, MGLV]&lt;br /&gt;
* Always define the standard labels when possible, instead of what would be the equivalent of the standard label in this scheme.&lt;br /&gt;
* Map the equivalent labels from this scheme to the standard labels using property [[Action0/Railtypes#Alternate_rail_type_labels_.281D.29|1D (NFO)]] or [[NML:Railtypes#Railtype_properties|alternative_railtype_list (NML)]].&lt;br /&gt;
&lt;br /&gt;
Or, put differently, for each gauge/type, select one or more energy source types. For each type/energy combination provide all axle load classes for the speed class &amp;quot;A&amp;quot;, either as a real type or as an alternate of another type. Provide more types with a different speed letter if you want to provide several different speeds or other eye-candy tracks.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Summary for train sets ==&lt;br /&gt;
This section summarizes the above for train sets.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
; [X***] Track gauge and type class&lt;br /&gt;
* Use the track type class that matches the vehicle;&lt;br /&gt;
* Define a fallback type via the railtype table in case you want the vehicle to be available on a different track if no matching track set is loaded.&lt;br /&gt;
** Specialized subtypes like &amp;quot;n&amp;quot; might not always be available. If you want those vehicles to be still available then, fall back the the generic class (e.g. &amp;quot;N&amp;quot;).&lt;br /&gt;
; [*X**] Speed limit class &lt;br /&gt;
* Always use class A for every vehicle.&lt;br /&gt;
; [**X*] Axle load class&lt;br /&gt;
* Use all classes A through E according to the maximum axle weight of the vehicle.&lt;br /&gt;
* Extend the predefined classes only if you also provide a track set that makes use of these;&lt;br /&gt;
** When extending the predefined classes A through E, define a fallback type via the railtype table in case you want the vehicle to be available if no matching track set is loaded.&lt;br /&gt;
; [***X] Energy source type class&lt;br /&gt;
* Use the energy source type class that matches the vehicle;&lt;br /&gt;
* When using specialized classes, define a fallback type via the railtype table in case you want the vehicle to be available if no matching track set is loaded.&lt;br /&gt;
; Standard labels [RAIL, ELRL, MONO, MGLV]&lt;br /&gt;
* Define a fallback type to the standard labels via the railtype table in case you want the vehicle to be available on the standard tracks if no matching track set is loaded.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Be as specific as you want when selecting the railtype, it is the job of the track set to select a playable, reduced subset out of all possible type combinations.&lt;br /&gt;
&lt;br /&gt;
== In case you&#039;re not convinced by this scheme ==&lt;br /&gt;
Adopting this scheme gives the player freedom to use any track set in combination with any train set that follow the scheme. &lt;br /&gt;
&lt;br /&gt;
This means that you can make your train set compatible with track sets that provide axle load classes, and track sets that provide speed limits, and at the same time with track sets that provide none of this. This way, the player can decide to play with or without axle load classes, or with or without speed limits, simply by loading a track set that does or does not provide these features.&lt;br /&gt;
&lt;br /&gt;
And for your track set, it means that you can make it as simple or as complicated as you want (within the 64 track type limit), while not having to worry about compatibility with train sets.&lt;br /&gt;
&lt;br /&gt;
Still not convinced? Feel free to use railtype labels of your own, but know that you will likely come to regret that at some point in the future.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Forum topic==&lt;br /&gt;
If you want to discuss the standardized railtype scheme or have any questions about it, you can visit [http://www.tt-forums.net/viewtopic.php?t=59379 the forum topic].&lt;br /&gt;
&lt;br /&gt;
==Extensions and best practice==&lt;br /&gt;
See [https://newgrf-specs.tt-wiki.net/wiki/Standardized_Railtype_Scheme_extensions Standardized Railtype Scheme extensions]&lt;/div&gt;</summary>
		<author><name>Michi cc</name></author>
	</entry>
	<entry>
		<id>https://newgrf-specs.tt-wiki.net/index.php?title=Standardized_Railtype_Scheme_extensions&amp;diff=5064</id>
		<title>Standardized Railtype Scheme extensions</title>
		<link rel="alternate" type="text/html" href="https://newgrf-specs.tt-wiki.net/index.php?title=Standardized_Railtype_Scheme_extensions&amp;diff=5064"/>
		<updated>2025-06-12T15:08:47Z</updated>

		<summary type="html">&lt;p&gt;Michi cc: /* Speed limit class [*X**] */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Multi-voltage Trains==&lt;br /&gt;
One might be interested in implementing a train which speed and/or power depends on the voltage in the overhead line electrification. In order for this to work properly the newgrf needs to test the track with [https://newgrf-specs.tt-wiki.net/wiki/VariationalAction2/Vehicles#Track-type_test_against_another_track-type_.2863.29 var 63] or [https://newgrf-specs.tt-wiki.net/wiki/NML:Vehicles#Variables_that_require_an_argument NML tile_powers_railtype].&lt;br /&gt;
&lt;br /&gt;
Below is an example from RUKTS code, where a train with a diesel generator has higher speed on high voltage ac tracks. We need to test for only SAAA if it is avaliable, as otherwise we would have the train gain the benefits on all electrified tracks. If it however isn&#039;t avaliable we still want to know if the track is electrified which is why we have the second part.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;railtype_available(&amp;quot;SAAA&amp;quot;) ? tile_powers_railtype(&amp;quot;SAAA&amp;quot;) : (tile_powers_railtype(&amp;quot;SAAE&amp;quot;) || tile_powers_railtype(&amp;quot;ELRL&amp;quot;))&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Rack rail==&lt;br /&gt;
There are two different types of rack rail engines, pure rack and rack and adhesion. Pure rack engines may only move on tracks fitted with racks (xRxx) whilst rack and adhesion engines may also move on regular tracks but at a lower tractive effort.&lt;br /&gt;
&lt;br /&gt;
Rack rail is currently implemented in the speed class as a &amp;quot;special type&amp;quot;, this is unfurtunate as the speed class would otherwise be trackset private.&lt;br /&gt;
&lt;br /&gt;
===Alternative 1===&lt;br /&gt;
&lt;br /&gt;
====Pure rack engines====&lt;br /&gt;
These engines should use *R** as label. A trackset could then prevent these trains from traversing *A** tracks.&lt;br /&gt;
&lt;br /&gt;
====Rack and adhesion engines====&lt;br /&gt;
These engines should use *A** as label and test for *R** using [https://newgrf-specs.tt-wiki.net/wiki/VariationalAction2/Vehicles#Track-type_test_against_another_track-type_.2863.29 var 63] or [https://newgrf-specs.tt-wiki.net/wiki/NML:Vehicles#Variables_that_require_an_argument NML tile_powers_railtype]. This assumes the trackset will allow *A** on *R**.&lt;br /&gt;
&lt;br /&gt;
====Issues====&lt;br /&gt;
*Currently French Set Rails (the most popular rack-rail set) implements compatibility both ways which makes pure rack systems impossible.&lt;br /&gt;
*French Narrow Gauge Trains Set uses NRAN for rack and adhesion engines so tracksets can not support it as intended and pure rack systems at the same time.&lt;br /&gt;
&lt;br /&gt;
===Alternative 2===&lt;br /&gt;
&lt;br /&gt;
====Pure rack engines====&lt;br /&gt;
These engines should use *r** (not in scheme) as label. A trackset would then prevent these trains from traversing *A** tracks but allow them on *R**.&lt;br /&gt;
&lt;br /&gt;
====Rack and adhesion engines====&lt;br /&gt;
These engines should use *R** as label and test for *r** using [https://newgrf-specs.tt-wiki.net/wiki/VariationalAction2/Vehicles#Track-type_test_against_another_track-type_.2863.29 var 63] or [https://newgrf-specs.tt-wiki.net/wiki/NML:Vehicles#Variables_that_require_an_argument NML tile_powers_railtype]. Tracksets will allow *R** on *A** and *r**.&lt;br /&gt;
&lt;br /&gt;
====Issues====&lt;br /&gt;
*Requires more track types than alternative 1.&lt;br /&gt;
&lt;br /&gt;
==&amp;quot;Innsbruck 2022 Convention&amp;quot; for partial compliance==&lt;br /&gt;
&lt;br /&gt;
This is really esoteric, but eh. It was the product of long discussion / debate / argument / reasoning between grf authors.&lt;br /&gt;
&lt;br /&gt;
1. The Standardized Railtype Scheme &#039;&#039;&#039;is a useful tool&#039;&#039;&#039; for providing reliable compatibility between train grfs and railtype grfs.&lt;br /&gt;
&lt;br /&gt;
2. The &#039;&#039;&#039;axle load class&#039;&#039;&#039; in the scheme presents a number of issues for compliance.&lt;br /&gt;
&lt;br /&gt;
2.1. Over 10 years since the scheme was standardised, not many train grfs implement multiple axle load classes &#039;&#039;&#039;as required by the scheme&#039;&#039;&#039;.  Known examples that &#039;&#039;&#039;do&#039;&#039;&#039; comply include Dutch Train Set, French Narrow Gauge Trains, and Finnish Trains.&lt;br /&gt;
&lt;br /&gt;
2.2. Elements of the axle load rules have proven hard to interpret.  For example:&lt;br /&gt;
&lt;br /&gt;
* is it compliant to use &#039;&#039;fewer&#039;&#039; than 5 classes in a train grf?  There is a lack of consensus on this.&lt;br /&gt;
* axle load is only one of many factors that govern whether a vehicle is compatible with a route, for example loading gauge, minimum curve, signalling types etc&lt;br /&gt;
&lt;br /&gt;
2.3. Meanwhile &#039;&#039;multiple existing train grfs use class &#039;&#039;A&#039;&#039; for the axle load for all trains&#039;&#039; (except where relying on default railtypes such as RAIL and ELRL).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;3. The Innsbruck 2022 Convention uses class &#039;&#039;A&#039;&#039; for axle load for &#039;&#039;&#039;all&#039;&#039;&#039; trains in a train grf (except where relying on default railtypes such as RAIL and ELRL).&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This is &#039;&#039;&#039;not&#039;&#039;&#039; fully compliant with the Standardized Railtype Scheme and does not claim to be.&lt;br /&gt;
&lt;br /&gt;
However train grfs using the Innsbruck 2022 Convention are &#039;&#039;broadly compatible&#039;&#039; with railtype grfs using the Standardized Railtype Scheme.  &lt;br /&gt;
&lt;br /&gt;
Obligatory XKCD link about &#039;standards&#039;: https://xkcd.com/927/&lt;br /&gt;
&lt;br /&gt;
===Known issues===&lt;br /&gt;
&lt;br /&gt;
Known problems are that trains using only class &#039;A&#039; may limit the ability of railtype grf authors to achieve their design goals for separating railtypes by axle load.  &lt;br /&gt;
But on reflection, it can be seen that a train grf might not be able to provide a broad enough range of vehicles to cover at least 5 axle load classes.&lt;br /&gt;
&lt;br /&gt;
3.1. The Innsbruck 2022 Convention is &#039;&#039;&#039;not&#039;&#039;&#039; appropriate for train grf authors who wish to provide more than one axle load class.&lt;br /&gt;
&lt;br /&gt;
3.2. The Innsbruck 2022 Convention treats the meaning of class &#039;&#039;A&#039;&#039; as &#039;&#039;undefined&#039;&#039;, &#039;&#039;ignored&#039;&#039; or &#039;&#039;compatible with most restricted railtype&#039;&#039; for axle load.  &lt;br /&gt;
&lt;br /&gt;
Axle load class &#039;&#039;A&#039;&#039; &#039;&#039;&#039;cannot&#039;&#039;&#039; be safely interpreted as &#039;&#039;universal&#039;&#039; because from the perspective of a railtype grf &#039;&#039;A&#039;&#039; is &#039;&#039;most restricted railtype&#039;&#039;, where &#039;&#039;universal&#039;&#039; is better represented as &#039;&#039;least restricted railtype&#039;&#039;. Depending how many axle load classes are in use by the railtype grf, this could be class &#039;&#039;B&#039;&#039;, &#039;&#039;C&#039;&#039;, &#039;&#039;D&#039;&#039;, &#039;&#039;E&#039;&#039; etc.  To illustrate this issue, take the following scenario&lt;br /&gt;
&lt;br /&gt;
* railtype grf defines axle loads &#039;&#039;A&#039;&#039; to &#039;&#039;E&#039;&#039;. In this case the railtype grf author intends that &#039;&#039;A&#039;&#039; is compatible with the smallest range of vehicles, &#039;&#039;E&#039;&#039; is compatible with the largest range of vehicles, and &#039;&#039;B&#039;&#039;, &#039;&#039;C&#039;&#039; and &#039;&#039;D&#039;&#039; are compatible with some intermediate ranges of vehicles&lt;br /&gt;
* but the vehicle grf author has defined all vehicles to be axle load &#039;&#039;A&#039;&#039; in an attempt to express this vehicle is &#039;&#039;universal&#039;&#039;.  The result in the game is that an identical range of vehicles will be compatible with railtypes &#039;&#039;A&#039;&#039; to &#039;&#039;E&#039;&#039;.  &lt;br /&gt;
&lt;br /&gt;
This is clearly &#039;&#039;&#039;not&#039;&#039;&#039; the intended outcome of the railtype author. But nor is it clear within the spec that the vehicle author has particularly done anything wrong. &lt;br /&gt;
&lt;br /&gt;
It &#039;&#039;would&#039;&#039; be possible to use railtype availability testing to adjust the vehicle property 05 (track_type) to fit the highest defined axle load (&#039;&#039;E&#039;&#039; in this example case), but this is not insignificant work, and it&#039;s unlikely to be widely adopted by vehicle grf authors.  Nor would this solution achieve &#039;&#039;universal&#039;&#039; as all vehicles in vehicle grf then would be incompatible with types &#039;&#039;A&#039;&#039; through &#039;&#039;D&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
3.3. When the Innsbruck 2022 Convention is used, this &#039;&#039;&#039;does not prevent&#039;&#039;&#039; a train grf being extended in some future release to achieve full compliance with Standardized Railtype Scheme. &#039;&#039;That choice remains with train grf authors&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
3.4. If 2012 could be revisited, providing an optional &#039;&#039;_&#039;&#039; axle load class in the Standardized Railtype Scheme for &#039;&#039;undefined&#039;&#039; would have been preferable, but as of 2022, &#039;&#039;A&#039;&#039; is already widely used for this purpose, and time travel is not known to be possible.&lt;br /&gt;
&lt;br /&gt;
==Multi-voltage extensions==&lt;br /&gt;
These are extensions to the energy source type class currently supported by SETS and xUSSR Rails which allow trainsets to code trains which are limited to a certain selection of voltages. As stated in the energy source type class section this might not be of use for all sets, as such it is optional but still recommended for trainsets for ideal functionality with tracksets which support the extended labels.&lt;br /&gt;
{|&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; | Specialized energy type classes !!Vehicle set fallback&lt;br /&gt;
|-&lt;br /&gt;
|* ||Equivilent to A, a, D and d || E&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; | &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|&#039; ||Equivilent to A, a and D || E&lt;br /&gt;
|-&lt;br /&gt;
|^ ||Equivilent to A, a and d || E&lt;br /&gt;
|-&lt;br /&gt;
|_ ||Equivilent to A, D and d || E&lt;br /&gt;
|-&lt;br /&gt;
|, ||Equivilent to a, D and d || E&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; | &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|$ ||Equivilent to A and a  || First A then E or just E&lt;br /&gt;
|-&lt;br /&gt;
|= ||Equivilent to D and d  || First D then E or just E&lt;br /&gt;
|-&lt;br /&gt;
|) ||Equivilent to A and D  || E&lt;br /&gt;
|-&lt;br /&gt;
|( ||Equivilent to A and d  || E&lt;br /&gt;
|-&lt;br /&gt;
|] ||Equivilent to a and D  || E&lt;br /&gt;
|-&lt;br /&gt;
|[ ||Equivilent to a and d  || E&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Maglev extensions==&lt;br /&gt;
These are extensions to the rail system and energy source type classes currently supported by RIMS, FRIMS and the Maglev Track Set which allow trainsets to code trains which use different, incompatible maglev variations. As stated in the energy source type class section this might not be of use for all sets, as such it is optional but still recommended for all maglevs in trainsets for ideal functionality with tracksets which support the extended labels.&lt;br /&gt;
&lt;br /&gt;
===Rail System/Gauge [X***]===&lt;br /&gt;
{| &lt;br /&gt;
! !!Track type/gauge&lt;br /&gt;
|-&lt;br /&gt;
|L ||Maglevs that have a u-shaped track (SCMaglev)&lt;br /&gt;
|-&lt;br /&gt;
|T ||Maglevs that have a monorail track (Transrapid/China)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Energy source type class [***X] ===&lt;br /&gt;
{|&lt;br /&gt;
! !!Electrification !!Vehicle set fallback&lt;br /&gt;
|-&lt;br /&gt;
|S ||Maglevs that use a synchronous linear motor ||N/A&lt;br /&gt;
|-&lt;br /&gt;
|I ||Maglevs that use a linear induction motor || N/A&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==JP+ extensions==&lt;br /&gt;
These are extensions to the gauge and energy source type classes currently supported by JP+ tracks and used by JP+ train sets.&lt;br /&gt;
===Rail System/Gauge [X***]===&lt;br /&gt;
{| &lt;br /&gt;
! !!Track type/gauge !!Vehicle set fallback&lt;br /&gt;
|-&lt;br /&gt;
|s ||Scotch gauge || S&lt;br /&gt;
|-&lt;br /&gt;
|_ ||Universal || N/A&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Energy source type class [***X] ===&lt;br /&gt;
{|&lt;br /&gt;
! !!Electrification !!Vehicle set fallback&lt;br /&gt;
|-&lt;br /&gt;
|I ||Linear induction motor || D&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Possible additions==&lt;br /&gt;
&lt;br /&gt;
There are a number of proposed labels for standardization of non-standardized labels...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CURRENTLY NOT IMPLEMENTED AND MOSTLY NOT OF VALUE&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Rail System/Gauge [X***]===&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
! !!Track type/gauge&lt;br /&gt;
|-&lt;br /&gt;
|_ ||Universal &amp;quot;cheat&amp;quot; rail; ALWAYS add &amp;quot;_H_c&amp;quot; and &amp;quot;_S_t&amp;quot; to EVERY [[NML:Railtypes#Railtype_properties|compatible_railtype_list (NML)]], and ALWAYS add &amp;quot;_S_t&amp;quot; to EVERY [[NML:Railtypes#Railtype_properties|powered_railtype_list (NML)]] if you intend to support this&lt;br /&gt;
|-&lt;br /&gt;
|0 ||(A number zero, not a letter &amp;quot;Oh&amp;quot;) No track, eyecandy-use only&lt;br /&gt;
|-&lt;br /&gt;
|U ||[https://perma.cc/93VE-8JQZ &amp;quot;Ukrainian monorail&amp;quot; or Şaropoí̈zd (Шаропоїзд)], a u-shaped concrete &amp;quot;monorail trench&amp;quot; from 1920&#039;s Soviet Union; see [https://www.tt-forums.net/viewtopic.php?f=26&amp;amp;t=47432 the Yarmanchuk Express] for graphics&lt;br /&gt;
|-&lt;br /&gt;
|1 ||Early Monorail; See [https://perma.cc/6BVS-2P2X here] and [https://perma.cc/VCG2-ATUA here]&lt;br /&gt;
|-&lt;br /&gt;
|G ||Gyrail; [https://en.wikipedia.org/wiki/Gyro_monorail Gyro monorail/Gyroscopic monorail/Gyro-stabilized monorail] for description and IRL example, and [https://wikimon.net/Trailmon here] ([https://web.archive.org/web/20240227205547/https://wikimon.net/Trailmon archived]) for good fictional examples&lt;br /&gt;
|-&lt;br /&gt;
|A ||Alweg-based Monorail&lt;br /&gt;
|-&lt;br /&gt;
|m ||Minimum gauge rail; [https://en.wikipedia.org/wiki/Minimum-gauge_railway 15 in (381 mm), 400 mm (15+3⁄4 in), or 16 in (406 mm)]&lt;br /&gt;
|-&lt;br /&gt;
|2 ||Minimum gauge rail; [https://en.wikipedia.org/wiki/Minimum-gauge_railway 18 in (457 mm), 19 in (483 mm), 500 mm (19+3⁄4 in) or 20 in (508 mm)]&lt;br /&gt;
|-&lt;br /&gt;
|n ||600mm &amp;quot;Decauville&amp;quot; or &amp;quot;Feldsbahn&amp;quot;, formerly labelled &amp;quot;NG60&amp;quot; before standardization; the most common narrow gauge track type in OpenTTD other than metre gauge, 600mm gauge is thus ideal for taking up the &amp;quot;n&amp;quot; gauge, though this is an ultimately optional distinction&lt;br /&gt;
|-&lt;br /&gt;
|7 ||750mm, Bosnian gauge (760 mm), and 762mm; all start with 7 and are close in size&lt;br /&gt;
|-&lt;br /&gt;
|3 ||Swedish 3 foot (891 mm), 900mm, 3 foot (914 mm) and Italian Metre (950mm) gauges&lt;br /&gt;
|-&lt;br /&gt;
|R ||Metre gauge; potentially compatible with base tramtype &amp;quot;RABN&amp;quot;, most early tramways were metre gauge&lt;br /&gt;
|-&lt;br /&gt;
|4 ||4 foot gauge (1219 mm), and possibly 4&#039;6&amp;quot; in. (1372 mm) if standardization is needed for 1372mm&lt;br /&gt;
|-&lt;br /&gt;
|s ||Scotch gauge (1372 mm)&lt;br /&gt;
|-&lt;br /&gt;
|S ||Standard gauge; already implemented in original standardized railtype scheme, but could include near-standard (1422+ mm) as well as existing true standard (1435 mm) and is also potentially compatible with the SAbN tramtype&lt;br /&gt;
|-&lt;br /&gt;
|X ||Omni-gauge rail (for at-grade multi-gauge crossings and stations); ultrabroad/secondary broad/primary broad/standard/primary narrow/secondary narrow gauge. Use this if you don&#039;t mind gameplay abstractions but don&#039;t want physically impossible combinations (e.g. rail, monorail and maglev cannot have any level crossings with each other). Specifically, this accommodates B (ultrabroad), g (2140 mm), V (1600mm), S (1435 mm), R (1000 mm), and n (600 mm).&lt;br /&gt;
|-&lt;br /&gt;
|x ||Multi-gauge rail (for at-grade multi-gauge crossings and stations); secondary broad/primary broad/standard/primary narrow/secondary narrow. Specifically, this accommodates g (2140 mm), V (1600mm), S (1435 mm), R (1000 mm), and n (600 mm). Use if you want to provide a cheaper alternative to X that doesn&#039;t support fictional &amp;quot;supertrain&amp;quot; gauges. &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;+&amp;lt;/nowiki&amp;gt; ||Quad-gauge (Four-gauge) rail (for at-grade multi-gauge crossings and stations); secondary broad/primary broad/standard/primary narrow. Specifically, this accommodates g (2140 mm), V (1600mm), S (1435 mm), and R (1000 mm). Use with minus (&amp;lt;nowiki&amp;gt;-&amp;lt;/nowiki&amp;gt;) if you want to give a bit of a puzzle to players over how to design a network limited by a &amp;quot;one or the other&amp;quot; pair of railtypes.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;-&amp;lt;/nowiki&amp;gt; ||Four-gauge rail (for at-grade multi-gauge crossings and stations); primary broad/standard/primary narrow/secondary narrow. Specifically, this accommodates V (1600mm), S (1435 mm), R (1000 mm), and n (600 mm). Use with plus (&amp;lt;nowiki&amp;gt;+&amp;lt;/nowiki&amp;gt;) if you want to give a bit of a puzzle to players over how to design a network limited by a &amp;quot;one or the other&amp;quot; pair of railtypes.&lt;br /&gt;
|-&lt;br /&gt;
|b ||Broad gauge rail - As broad gauge is a rare tracktype, it may still be feasible to cement B and b as broad gauges of two differing sizes, but the rarity among gauges in the real world would need to match; Italian (1445 mm), Dresden (1450 mm) and Leipzig (1458 mm) gauges are all based on streetcar/tram systems and may be better grouped here&lt;br /&gt;
|-&lt;br /&gt;
|t ||Greater Toronto Area streetcars (1495 mm)&lt;br /&gt;
|-&lt;br /&gt;
|5 ||1520mm and 5 foot (1524 mm) gauges&lt;br /&gt;
|-&lt;br /&gt;
|V ||Pennsylvanian (1581 mm and 1588 mm) and Australian &amp;quot;Victorian&amp;quot; (1600 mm) gauges&lt;br /&gt;
|-&lt;br /&gt;
|6 ||6 foot (1829 mm) broad gauge&lt;br /&gt;
|-&lt;br /&gt;
|g ||Brunel&#039;s Great Western Railway gauge (2140 mm)&lt;br /&gt;
|-&lt;br /&gt;
|B ||Biggest Broad gauge rail - As broad gauge is a rare tracktype, and the variation in common real life track types too wide, it may be desirable to cement B and b as broad gauges of two differing sizes; With no real life examples that match the usage frequency of &amp;quot;B&amp;quot;, the gauge might best draw inspiration from the infamous [https://en.wikipedia.org/wiki/Breitspurbahn Breitspurbahn] (3000 mm) and [https://perma.cc/KQ2Z-5RCR the never-built vehicles designed for it], or from the [https://en.wikipedia.org/wiki/Brighton_and_Rottingdean_Seashore_Electric_Railway Brighton &amp;amp; Rottingdean Seashore Electric Railway] (18 ft/5,486 mm)&lt;br /&gt;
|-&lt;br /&gt;
|F ||Flightrail; A [https://web.archive.org/web/20231213122530/http://www.flightrail.com/ system capable of high speeds and steep hill grades] that uses a pneumatic pipe for propulsion (see &amp;quot;P&amp;quot; under energy sources), and &#039;&#039;wheels pointed inwards at a 45-degree angle&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
It might be preferred to instead use/keep &amp;quot;B&amp;quot; for &amp;quot;all (current) broad gauges&amp;quot; (mostly Victorian gauge) instead using lowercase &amp;quot;b&amp;quot; for Brunel/GWR broad gauge. This wouldn&#039;t be to different from narrow gauge since the lesser used ones are lowercase and fallback to the uppercase ones.&lt;br /&gt;
&lt;br /&gt;
=== Speed limit/appearance class [*X**] ===&lt;br /&gt;
&lt;br /&gt;
The speed limit class may also be used for some advanced features of the label scheme, like specialized track types and eyecandy purposes. Be careful not to break the compatibility with other sets when using the speed limit class for these purposes.&lt;br /&gt;
&lt;br /&gt;
An example of a special use is rack rail. In the French set it is used to give rack rail engines a higher speed and TE than normal rail engines when used on rack rail. When defining trains with a special speed limit class, always allow a fallback to speed limit class A via the railtype table.&lt;br /&gt;
&lt;br /&gt;
An example of eyecandy use are urban tracks. These are a variation of regular tracks, but with concrete ground tiles to better match the urban environment. Train sets must not define vehicles for eyecandy classes. If you think you have special vehicles that should only run on the eyecandy class, it is &#039;&#039;not&#039;&#039; eyecandy but a separate track gauge/type.&lt;br /&gt;
&lt;br /&gt;
The appearance class can be tested for by trains using [https://newgrf-specs.tt-wiki.net/wiki/VariationalAction2/Vehicles#Track-type_test_against_another_track-type_.2863.29 var 63] (which the French Set uses to change vehicle properties on rack rail), but this is generally not standardized, limits interoperability and is only useful for co-developed train and track sets.&lt;br /&gt;
&lt;br /&gt;
The following special and eyecandy classes have been defined so far:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! !!Description !!Type !!Used by&lt;br /&gt;
|- &lt;br /&gt;
|A-H ||speed limits ||colspan=&amp;quot;2&amp;quot;| reserved&lt;br /&gt;
|- &lt;br /&gt;
|K-R ||rack rail with speed limits, that allows rack-equipped vehicle to not slow down going uphill ||special ||French Set Rails&lt;br /&gt;
|- &lt;br /&gt;
|k-r ||rack rail with speed limits, that powers a rack-only vehicle ||special ||&lt;br /&gt;
|- &lt;br /&gt;
|S ||subterranean ||eyecandy ||Metro Track Set&lt;br /&gt;
|- &lt;br /&gt;
|s ||subterranean (low-clearance) ||eyecandy, should not be supported by double-deck passenger carriages or double-stack container wagons ||&lt;br /&gt;
|- &lt;br /&gt;
|U ||urban ||eyecandy ||Metro Track Set&lt;br /&gt;
|}&lt;br /&gt;
Rack rail needs a bit greater of a explanation, ideally it would be coded in a way where both pure rack and rack-and-adhesion systems are supported.&lt;br /&gt;
This can be achieved by making regular tracks powered on rackrail without the opposite being true. This means vehicles defined for NRAN can&#039;t go on NAAN (like a pure rack system) but NAAN vehicles can go on NRAN (like a rack-and-adhesion system). Currently French Set Rails (the most popular rack set) implements compatibility both ways which makes pure rack systems impossible.&lt;br /&gt;
&lt;br /&gt;
Should another rack rail set be implemented, it might be prudent to make K-R equivalent to A-H for rack-and-adhesion, and k-r equivalent to A-H for rack rail only.&lt;br /&gt;
&lt;br /&gt;
=== Axle load class [**X*] ===&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&lt;br /&gt;
! !!Indefinite !!Generic !! First usage&lt;br /&gt;
|-&lt;br /&gt;
|c ||Horse-drawn Wagonway ||1 metric tonne (1000kg) per axle || style=&amp;quot;text-align:right;&amp;quot;|1594&lt;br /&gt;
|-&lt;br /&gt;
|b ||Iron Plateway ||1 metric tonne (1000kg) per axle || style=&amp;quot;text-align:right;&amp;quot;|1799&lt;br /&gt;
|-&lt;br /&gt;
|a ||Prototype Rails ||5 metric tonnes (5000kg) per axle; Because reserved by examples || style=&amp;quot;text-align:right;&amp;quot;|1820&lt;br /&gt;
|-&lt;br /&gt;
|A ||Very Low (2012 OG Default)||10 metric tonnes (10000kg) per axle || style=&amp;quot;text-align:right;&amp;quot;|1828&lt;br /&gt;
|-&lt;br /&gt;
|B ||Low (2024 &amp;quot;New&amp;quot; Default) ||20 metric tonnes (20000kg) per axle || style=&amp;quot;text-align:right;&amp;quot;|1968&lt;br /&gt;
|-&lt;br /&gt;
|C ||Medium ||30 metric tonnes (30000kg) per axle || style=&amp;quot;text-align:right;&amp;quot;|~1978&lt;br /&gt;
|-&lt;br /&gt;
|D ||High ||40 metric tonnes (40000kg) per axle || style=&amp;quot;text-align:right;&amp;quot;|1988&lt;br /&gt;
|-&lt;br /&gt;
|4 (Formerly d) ||High, extra-lean freight bogies ||50 metric tonnes (50000kg) per axle || style=&amp;quot;text-align:right;&amp;quot;|2008&lt;br /&gt;
|-&lt;br /&gt;
|E ||Very High ||50 metric tonnes (50000kg) per axle (update in 2030 or so?)|| style=&amp;quot;text-align:right;&amp;quot;|~2028&lt;br /&gt;
|-&lt;br /&gt;
|F ||Future-proofing ||No limit per axle (update in 2050 or so?) || style=&amp;quot;text-align:right;&amp;quot;|~2048&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If the above scheme is used, &amp;quot;d&amp;quot; should NEVER be used as the axle weight of a railtype. Instead, if your train set supports axle weights, use SAdN/SAdE/etc. as a vehicle&#039;s axle weight if they are a freight car available between 2008 and 2028 but are more than 40 metric tonnes (40000kg) per axle, and add the railtype to the [[NML:Railtypes#Railtype_properties|alternative_railtype_list (NML)]] of SADN or equivalent.&lt;br /&gt;
&lt;br /&gt;
====Axle Loads by Real World Implementation====&lt;br /&gt;
The table below is compatible with those above but functions differently than the ones above. It assumes that, in lieu of a train set that has ever implemented &amp;quot;d&amp;quot; as an axle weight, that instead &amp;quot;4&amp;quot; be used and a &amp;quot;3&amp;quot; placed between C and D for similar reasons. All the same classes are listed, however axle weight guidelines have been run by a research LLM which suggested different ranges of weight and different dates of availability. 4 is identical to d in practice. If &amp;quot;d&amp;quot; is not defined as a lighter axle weight than &amp;quot;c&amp;quot;, then **4* should be used alongside it in an alternative_tracktype_list for any **D** track type with axle weight &amp;quot;D&amp;quot;. If &amp;quot;d&amp;quot; is defined as a lighter axle weight than &amp;quot;c&amp;quot;, only tracktypes with axle weight &amp;quot;4&amp;quot; (**4*) should be listed in the alternative_tracktype list for any **D* tracktype.&lt;br /&gt;
&lt;br /&gt;
Use **4* on all applicable rolling stock going forward, and rely on track sets to define &amp;quot;d&amp;quot; for vehicle sets.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&lt;br /&gt;
! !!Indefinite !!Generic !! First usage&lt;br /&gt;
|-&lt;br /&gt;
|c ||Horse-drawn Wagonway ||1 metric tonne (1000kg) per axle || style=&amp;quot;text-align:right;&amp;quot;|1594&lt;br /&gt;
|-&lt;br /&gt;
|b ||Iron Plateway ||5 metric tonnes (5000kg) per axle || style=&amp;quot;text-align:right;&amp;quot;|1799&lt;br /&gt;
|-&lt;br /&gt;
|a ||Prototype Rails ||10 metric tonnes (10000kg) per axle; Because reserved by examples || style=&amp;quot;text-align:right;&amp;quot;|~1820 (Focused on carrying capacity over speed)&lt;br /&gt;
|-&lt;br /&gt;
|A ||Very Low (2012 OG Default)||15 metric tonnes (15000kg) per axle || style=&amp;quot;text-align:right;&amp;quot;|~1870&lt;br /&gt;
|-&lt;br /&gt;
|B ||Low (2024 &amp;quot;New&amp;quot; Default) ||20 metric tonnes (20000kg) per axle || style=&amp;quot;text-align:right;&amp;quot;|~1890&lt;br /&gt;
|-&lt;br /&gt;
|C ||Medium ||26 metric tonnes (26000kg) per axle || style=&amp;quot;text-align:right;&amp;quot;|~1910&lt;br /&gt;
|-&lt;br /&gt;
|3 ||Medium, lightweight &amp;quot;FLEXX Eco&amp;quot; and &amp;quot;FLEXX Eco Commuter&amp;quot; bogies ||26 metric tonnes (26000kg) per axle || style=&amp;quot;text-align:right;&amp;quot;|2001 (FLEXX Eco)&lt;br /&gt;
|-&lt;br /&gt;
|D ||High ||31 metric tonnes (31000kg) per axle || style=&amp;quot;text-align:right;&amp;quot;|~1930&lt;br /&gt;
|-&lt;br /&gt;
|4 (Formerly d) ||High, extra-lean &amp;quot;DYNAFREIGHT&amp;quot; and &amp;quot;FLEXX Eco Regional&amp;quot; bogies ||30 metric tonnes (30000kg) per axle || style=&amp;quot;text-align:right;&amp;quot;|2016 (FLEXX Eco, Regional var.)&lt;br /&gt;
|-&lt;br /&gt;
|E ||Very High ||40 metric tonnes (40000kg) per axle (update in 2030 or so?)|| style=&amp;quot;text-align:right;&amp;quot;|1988&lt;br /&gt;
|-&lt;br /&gt;
|F ||Fortescue/Future-proofed ||No limit per axle (update in 2050 or so?) || style=&amp;quot;text-align:right;&amp;quot;|2008&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Energy source type class [***X] ===&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
! !!Electrification !!Fallback !!Notes&lt;br /&gt;
|-&lt;br /&gt;
|1 ||Unspecified monorail electrification |||MONO (the whole label) ||&lt;br /&gt;
|-&lt;br /&gt;
|t ||&amp;quot;Universal custom tunnel&amp;quot; (for diagonal sub-surface &amp;quot;rail tunnels&amp;quot; that use decorative track types to complete the illusion) ||c, then p, then 7, then U (mandatory) ||&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;-&amp;lt;/nowiki&amp;gt; ||Universal energy type (&#039;&#039;not&#039;&#039; meant to replace &amp;quot;***N&amp;quot;; use for vehicles such as driving cabs which cannot move under their own power regardless, if desired) ||N/A (Be sure to put &amp;quot;***E&amp;quot; in the [[NML:Railtypes#Railtype_properties|alternative_railtype_list (NML)]] of a &amp;quot;***-&amp;quot; label) ||(&#039;&#039;Do not give a fallback or use for railtypes, this is for unpowered &amp;quot;locomotives&amp;quot; only!&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
|5 ||750v DC Outer 3rd Rail (&amp;quot;MTRO&amp;quot; or &amp;quot;SA_3&amp;quot;) and 630v DC Inner 3rd/4th Rail; a total of 5 rails (2 for wheels, 3 for electricity), plausible in the London Underground network ||3 or 4 ||&lt;br /&gt;
|-&lt;br /&gt;
|U ||750v DC Outer 3rd Rail (&amp;quot;MTRO&amp;quot; or &amp;quot;SA_3&amp;quot;), 630v DC Inner 3rd/4th Rail and universal catenary (SAEE); a total of 5 rails (2 for wheels, 3 for electricity) if only one gauge, plausible in the London Underground network and an &amp;quot;ultimate&amp;quot; dual rail electrification without being a cheat (make it expensive or toggle-able?) as SAEU or as XAEU (universal dual rail electrified tracks) ||E ||&lt;br /&gt;
|-&lt;br /&gt;
|7 ||750v DC Outer 3rd Rail (&amp;quot;MTRO&amp;quot; or &amp;quot;SA_3&amp;quot;), 630v DC Inner 3rd/4th Rail, Three-phase AC (SA_T) 3rd/4th rail &amp;amp; catenary, and universal catenary (SA_E); a total of 7 rails (2 for wheels, 5 for electricity) if only one gauge, a truly universal dual rail electrification without being impossible (make it VERY expensive or toggle-able so it isn&#039;t cheat-y?) as SAE7, XAE7 or even as XRE7 (combination of ALL two-rail track gauges with universally-compatible electrification including an outer 3rd rail and a paired set of inner 3rd/4th rails, and a rack rail in the exact center; improbable, but not physically impossible) ||U ||&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;+&amp;lt;/nowiki&amp;gt; ||750v DC catenary ||U, then E ||&lt;br /&gt;
|-&lt;br /&gt;
|6 ||600v DC catenary ||U, then E||&lt;br /&gt;
|-&lt;br /&gt;
|z ||Atypical catenary voltage ||U, then E&lt;br /&gt;
|-&lt;br /&gt;
|P ||Pneumatic tube with physical piston slit, or closed pneumatic tube with magnetic piston (i.e. that used by [https://web.archive.org/web/20231213122530/http://www.flightrail.com/ Flightrail]) ||N/A ||&lt;br /&gt;
|-&lt;br /&gt;
|p ||Pneumatic and universal electrical power ||P or 7 (Be sure to put &amp;quot;***_&amp;quot; and ***P&amp;quot; in the [[NML:Railtypes#Railtype_properties|alternative_railtype_list (NML)]] of a &amp;quot;***p&amp;quot; label) || XREp is a combination of ALL two-rail track gauges with improbably high axle load with universally-compatible electrification including an outer 3rd rail and a paired set of inner 3rd/4th rails, and a rack rail in the exact center; improbable, but not physically impossible)&lt;br /&gt;
|-&lt;br /&gt;
|c ||Cheat electrification type; use solely for the &amp;quot;_R_c&amp;quot; and &amp;quot;_R_t&amp;quot; railtype labels specifically (runs everything if coded properly), the latter (&amp;quot;_R_t&amp;quot;) is for tunnels, while the former (&amp;quot;_R_c&amp;quot;) is for &amp;quot;cheat rail upgrade&amp;quot; newgrfs ||p, then 7, then U, then E, then N, then &amp;quot;SA_-&amp;quot; (the whole label) ||&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Michi cc</name></author>
	</entry>
	<entry>
		<id>https://newgrf-specs.tt-wiki.net/index.php?title=Standardized_Railtype_Scheme&amp;diff=5063</id>
		<title>Standardized Railtype Scheme</title>
		<link rel="alternate" type="text/html" href="https://newgrf-specs.tt-wiki.net/index.php?title=Standardized_Railtype_Scheme&amp;diff=5063"/>
		<updated>2025-06-12T14:57:10Z</updated>

		<summary type="html">&lt;p&gt;Michi cc: /* Track gauge and type class [X***] */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This railtype label scheme aims to provide a way to allow players to easily mix and match different train and track sets. It does this by grouping the rail types into what matters from a technical perspective. The scheme provides a standardized way of defining railtype labels, based on track gauge and type, speed class, allowable axle weight and electrification type. To limit combinatorial explosions of rail types, the track properties are abstracted away from strict real-life representations.&lt;br /&gt;
&lt;br /&gt;
It is the explicit intent of this scheme to decouple track sets from vehicle sets to facilitate easy mixing. This way the player can select a track set of choice to go with a train set of choice. It allows the player to play with or without axle load classes, or with or without speed limit classes, simply by loading a track set that does or does not provide these features. In some cases it will also be possible to combine niche track sets, for instance a standard gauge track set with a narrow gauge and a metro track set. Additionally, due to the decoupling, depending on the specific train and track sets used, not all defined vehicles and/or track types might be available in a specific set combination. This is fully intended behaviour.&lt;br /&gt;
&lt;br /&gt;
== When to use the scheme and when &#039;&#039;not&#039;&#039; to use the scheme ==&lt;br /&gt;
&lt;br /&gt;
When to use:&lt;br /&gt;
* If you only want to develop a track or a train set.&lt;br /&gt;
* If you want players to be able to mix-and-match sets.&lt;br /&gt;
* If you are okay with abstractions from real life.&lt;br /&gt;
&lt;br /&gt;
When &#039;&#039;not&#039;&#039; to use:&lt;br /&gt;
* If you consider it a crime against humanity when one of your vehicles or track types is not available in a specific game.&lt;br /&gt;
* If you want your tracks or vehicles to exactly mirror real-life counterparts down to the last mm of gauge width.&lt;br /&gt;
* If your train set is specifically designed to work with your track set only.&lt;br /&gt;
* If you feel the compulsory need to fill all 64 railtype slots.&lt;br /&gt;
&lt;br /&gt;
== The Label Scheme ==&lt;br /&gt;
A railtype label consists of four characters. In this scheme, each position has a different purpose:&lt;br /&gt;
# Track gauge and type class (e.g. standard gauge rail, narrow gauge rail, monorail)&lt;br /&gt;
# Speed limit class&lt;br /&gt;
# Axle load class (maximum allowed axle weight for this track)&lt;br /&gt;
# Energy source type class&lt;br /&gt;
&lt;br /&gt;
In the next sections, each of the four positions will be explained.&lt;br /&gt;
&lt;br /&gt;
=== Track gauge and type class [X***] ===&lt;br /&gt;
The first position in the railtype label defines track gauge and/or track type class. The following classes are currently defined:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! !!Track type/gauge&lt;br /&gt;
|- &lt;br /&gt;
|S ||Standard gauge rail&lt;br /&gt;
|-&lt;br /&gt;
|B ||Broad gauge rail &lt;br /&gt;
|-&lt;br /&gt;
|N ||Narrow gauge rail&lt;br /&gt;
|-&lt;br /&gt;
|n ||Secondary narrow gauge rail (e.g. when providing both metre and cape gauge, always use N in case of just one type of narrow gauge)&lt;br /&gt;
|-&lt;br /&gt;
|D ||Dual gauge rail, standard/broad gauge&lt;br /&gt;
|-&lt;br /&gt;
|d ||Dual gauge rail, standard/narrow gauge&lt;br /&gt;
|-&lt;br /&gt;
|M ||Monorail&lt;br /&gt;
|-&lt;br /&gt;
|L ||Magnetic Levitation&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
All track gauges or types are abstractions of real-life types and do not correspond to specific examples used in real-life. For example &#039;&#039;&#039;N&#039;&#039;&#039; is any gauge that is smaller than standard gauge, but not corresponding to any specific gauge that exists in real life, just like &#039;&#039;&#039;n&#039;&#039;&#039; is smaller than &#039;&#039;&#039;N&#039;&#039;&#039;, but does not corresponds to a specific real-life gauge.&lt;br /&gt;
&lt;br /&gt;
A train set may define vehicles for gauge &#039;&#039;&#039;n&#039;&#039;&#039; while not defining vehicles for gauge &#039;&#039;&#039;N&#039;&#039;&#039;, but this is likely only useful for sets that are specifically designed to be used along-side other sets, and the used railtype fallbacks should be carefully considered.&lt;br /&gt;
&lt;br /&gt;
=== Speed limit/appearance class [*X**] ===&lt;br /&gt;
The second position in the railtype label defines the speed limit/appearance class. This can be used to provide tracks with different speed limits or appearance variations. The speed limit/appearance class is &#039;&#039;not&#039;&#039; used for trains and a train set should always use the class letter &#039;&#039;&#039;A&#039;&#039;&#039; in this position.&lt;br /&gt;
&lt;br /&gt;
There is no fixed numeric mapping for this class, but speed limits should start at &#039;&#039;&#039;A&#039;&#039;&#039; for the lowest speed limit and progress with &#039;&#039;&#039;B/C/...&#039;&#039;&#039; for higher limits. If you do not want to employ speed limits in your track set, always use the class &#039;&#039;&#039;A&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Additionally this class can also be used to distinguish different track appearances like normal or full width ballast, grass or concrete ground, etc. Train sets must not define vehicles for appearance classes. If you think you have special vehicles that should only run on the appearance class, it is &#039;&#039;not&#039;&#039; appearance but a separate track gauge/type.&lt;br /&gt;
&lt;br /&gt;
The appearance class can be tested for by trains using [https://newgrf-specs.tt-wiki.net/wiki/VariationalAction2/Vehicles#Track-type_test_against_another_track-type_.2863.29 var 63] (which the French Set uses to change vehicle properties on rack rail), but this is generally not standardized, limits interoperability and is only useful for co-developed train and track sets.&lt;br /&gt;
&lt;br /&gt;
The following speed limit/appearance classes have been defined so far:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! !!Description !!Type !!Used by&lt;br /&gt;
|- &lt;br /&gt;
|A-H ||speed limits ||colspan=&amp;quot;2&amp;quot;| reserved&lt;br /&gt;
|- &lt;br /&gt;
|R ||rack rail, that allows rack-equipped vehicle to not slow down going uphill ||special ||French Set Rails&lt;br /&gt;
|- &lt;br /&gt;
|S ||subterranean ||appearance ||Metro Track Set&lt;br /&gt;
|- &lt;br /&gt;
|U ||urban ||appearance ||Metro Track Set&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Axle load class [**X*] ===&lt;br /&gt;
The third position defines the axle weight limit. Heavy trains cannot run on tracks with a low axle weight limit; these trains need more expensive tracks with a higher weight limit. There are five axle load classes &#039;&#039;&#039;A&#039;&#039;&#039; through &#039;&#039;&#039;E&#039;&#039;&#039;. &#039;&#039;&#039;A&#039;&#039;&#039; is for the lowest axle load limit, &#039;&#039;&#039;E&#039;&#039;&#039; for the highest. The exact axle load attached to each class is relative to the track gauge/type and trains in the set. &lt;br /&gt;
&lt;br /&gt;
A train set should set the appropriate axle weight for each train via the railtype label, as to make the set work with track sets that do provide tracks with different weight limits, even if you don&#039;t care about it for your trainset. Ideally, all five standard axle load classes should be used, but a train set may use only some weight classes, as the vehicle rooster might not make it feasible to use all five. The group with the lowest axle weights will get class &#039;&#039;&#039;A&#039;&#039;&#039;, the second lowest class &#039;&#039;&#039;B&#039;&#039;&#039;, etc. up to the group with the highest axle weights which will get class &#039;&#039;&#039;E&#039;&#039;&#039;. If you do not use all classes, try to spread the classes out (don&#039;t use &#039;&#039;&#039;A&#039;&#039;&#039; and &#039;&#039;&#039;B&#039;&#039;&#039; for two classes, but e.g. &#039;&#039;&#039;B&#039;&#039;&#039; and &#039;&#039;&#039;D&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
A track set does not have to provide a dedicated track type for each axle weight limit. A track set that does not provide a dedicated track for each axle load class, must make sure to map all undefined axle load classes to a real railtype using property [[Action0/Railtypes#Alternate_rail_type_labels_.281D.29|1D (NFO)]] or [[NML:Railtypes#Railtype_properties|alternative_railtype_list (NML)]]. This way a train set can rely on all labels for all axle load classes being available. Example: if you only want to provide 2 axle load classes for standard gauge unelectrified with no speed limits, you can map SA&#039;&#039;&#039;A&#039;&#039;&#039;N + SA&#039;&#039;&#039;B&#039;&#039;&#039;N to SA&#039;&#039;&#039;C&#039;&#039;&#039;N and SA&#039;&#039;&#039;D&#039;&#039;&#039;N to SA&#039;&#039;&#039;E&#039;&#039;&#039;N if the cost difference between the two railtypes is high, or SA&#039;&#039;&#039;A&#039;&#039;&#039;N to SA&#039;&#039;&#039;B&#039;&#039;&#039;N and SA&#039;&#039;&#039;C&#039;&#039;&#039;N + SA&#039;&#039;&#039;D&#039;&#039;&#039;N to SA&#039;&#039;&#039;E&#039;&#039;&#039;N if the cost difference is low.&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t want to provide any axle load classes in your track set, it doesn&#039;t really matter what axle load class you choose for the track, as you&#039;ll be mapping all other classes to this track anyways. But the lowest or highest class are the obvious choice. Example: if your track set only provides narrow gauge unelectrified track with no speed limits and no axle load limits, you may use NA&#039;&#039;&#039;A&#039;&#039;&#039;N for the track label, and provide NA&#039;&#039;&#039;B&#039;&#039;&#039;N, NA&#039;&#039;&#039;C&#039;&#039;&#039;N, NA&#039;&#039;&#039;D&#039;&#039;&#039;N, NA&#039;&#039;&#039;E&#039;&#039;&#039;N in property [[Action0/Railtypes#Alternate_rail_type_labels_.281D.29|1D (NFO)]] or [[NML:Railtypes#Railtype_properties|alternative_railtype_list (NML)]].&lt;br /&gt;
&lt;br /&gt;
If you need more than five axle load class, you may use lowercase letters for very low axle loads and continue the uppercase letters for very high axle loads. Be advised that your train set may not assume the existence of any other class than &#039;&#039;&#039;A&#039;&#039;&#039; through &#039;&#039;&#039;E&#039;&#039;&#039;, so think about providing appropriate fallbacks in your railtype table. If you make a track set with an extended range, be aware that not all train sets will define trains for these tracks. In general: only do this in case of a train set with a matching track set.&lt;br /&gt;
&lt;br /&gt;
For the lowercase letters, &#039;&#039;&#039;b&#039;&#039;&#039; is lower than &#039;&#039;&#039;a&#039;&#039;&#039;, so for increasing axle load limits: b &amp;lt; a &amp;lt; A &amp;lt; B &amp;lt; C etc.&lt;br /&gt;
&lt;br /&gt;
Note that the axle load classes never map to a specific weight in tonnes. For that reason it does not make sense to add a numeric value for the axle load to the name of a track type or in the extended purchase info of a train. Instead use the relative expressions &#039;very low&#039;, &#039;low&#039;, &#039;medium&#039;, &#039;high&#039; and &#039;very high&#039; or use the class letters directly.&lt;br /&gt;
&lt;br /&gt;
=== Energy source type class [***X] ===&lt;br /&gt;
The last position defines the energy source type class. This is split in generic energy source types like overhead wires and third rail and specialized types like alternating and direct current.&lt;br /&gt;
&lt;br /&gt;
A track set that only uses specialized types, should map the generic types to the most suitable specialized type in the set.&lt;br /&gt;
&lt;br /&gt;
A vehicle set that uses specialized types should define a generic type as fallback, via the railtype table. If such a fallback is omitted, please note that certain vehicles may be unavailable depending on track set loaded.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! !!Generic energy type classes&lt;br /&gt;
|-&lt;br /&gt;
|N ||no electrification&lt;br /&gt;
|-&lt;br /&gt;
|E ||overhead wires/catenary electrification&lt;br /&gt;
|-&lt;br /&gt;
|3 ||3rd rail electrification&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! !!Specialized energy type classes !!Vehicle set fallback&lt;br /&gt;
|-&lt;br /&gt;
|Z ||3rd rail and catenary electrification || 3 or E&lt;br /&gt;
|-&lt;br /&gt;
|4 ||4th rail electrification || 3&lt;br /&gt;
|-&lt;br /&gt;
|Y ||4th rail and catenary electrification || 4 or E&lt;br /&gt;
|-&lt;br /&gt;
|T ||[http://en.wikipedia.org/wiki/Three-phase_AC_railway_electrification three phase AC electrification] || E&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; | &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|D ||DC catenary electrification || E&lt;br /&gt;
|-&lt;br /&gt;
|d ||low voltage DC catenary electrification (only when D also used in set) || First A then E&lt;br /&gt;
|-&lt;br /&gt;
|A ||AC catenary electrification || E&lt;br /&gt;
|-&lt;br /&gt;
|a ||low voltage AC catenary electrification (only when A also used in set) || First A then E&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you want multi-voltage/current vehicles in your set (i.e. a train that can run on both AC and DC current), you have to define a dedicated railtype for those vehicles. Without the railtype, it&#039;s not possible to define vehicles with this property. If you only have vehicles that can run on either one type of voltage/current or on all types of voltage/current (e.g. a 2-system if you only have &#039;&#039;&#039;A&#039;&#039;&#039; and &#039;&#039;&#039;D&#039;&#039;&#039; tracks, or a 4-system in case of all &#039;&#039;&#039;A&#039;&#039;&#039;, &#039;&#039;&#039;a&#039;&#039;&#039;, &#039;&#039;&#039;D&#039;&#039;&#039; and &#039;&#039;&#039;d&#039;&#039;&#039;), then use the generic class &#039;&#039;&#039;E&#039;&#039;&#039; for vehicles that should be able to run on all different voltage/currents. Also the track set needs to have one at least one railtype with class &#039;&#039;&#039;E&#039;&#039;&#039; defined.&lt;br /&gt;
&lt;br /&gt;
Note that if you want more than one type of multi-voltage/current, you&#039;ll quickly get a combinatory explosion of railtype labels, so plan carefully or do not attempt it. For every different multi-voltage/current vehicle type a dedicated railtype is needed. If you want all possible combinations, then you need to define an additional 8 classes. It is not recommended to make your train/track set this complicated.&lt;br /&gt;
&lt;br /&gt;
Example approach for a 4-system set, with trains that can run on either one or all systems:&lt;br /&gt;
* &#039;&#039;&#039;E&#039;&#039;&#039;: generic catenary-powered electric engines. &amp;quot;universal&amp;quot; [4-system] if any of &#039;&#039;&#039;D&#039;&#039;&#039;/&#039;&#039;&#039;d&#039;&#039;&#039;/&#039;&#039;&#039;A&#039;&#039;&#039;/&#039;&#039;&#039;a&#039;&#039;&#039; are defined.&lt;br /&gt;
* &#039;&#039;&#039;A&#039;&#039;&#039;: generic AC catenary electric engines. 25kV only if &#039;&#039;&#039;a&#039;&#039;&#039; also defined. Vehicle sets should use &#039;&#039;&#039;E&#039;&#039;&#039; as fallback, if defining an engine for &#039;&#039;&#039;A&#039;&#039;&#039;;&lt;br /&gt;
* &#039;&#039;&#039;a&#039;&#039;&#039;: 15kV AC catenary electric engines. Only defined if &#039;&#039;&#039;A&#039;&#039;&#039; also defined. Vehicle sets should use &#039;&#039;&#039;A&#039;&#039;&#039; and &#039;&#039;&#039;E&#039;&#039;&#039; as fallback, if defining an engine for &#039;&#039;&#039;a&#039;&#039;&#039;;&lt;br /&gt;
* &#039;&#039;&#039;D&#039;&#039;&#039;: generic DC catenary electric engines. 3kV if &#039;&#039;&#039;d&#039;&#039;&#039; also defined. Vehicle sets should use &#039;&#039;&#039;E&#039;&#039;&#039; as fallback, if defining an engine for &#039;&#039;&#039;D&#039;&#039;&#039;;&lt;br /&gt;
* &#039;&#039;&#039;d&#039;&#039;&#039;: 1.5kV DC catenary electric engines. Only defined if &#039;&#039;&#039;D&#039;&#039;&#039; also defined. Vehicle sets should use &#039;&#039;&#039;D&#039;&#039;&#039; and &#039;&#039;&#039;E&#039;&#039;&#039; as fallback, if defining an engine for &#039;&#039;&#039;d&#039;&#039;&#039;.&lt;br /&gt;
For a 2-system set, you can simply drop &#039;&#039;&#039;a&#039;&#039;&#039; and &#039;&#039;&#039;d&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Standard labels: RAIL, ELRL, MONO, MGLV ===&lt;br /&gt;
It&#039;s not possible to undefine the standard railtypes RAIL, ELRL, MONO and MGLV. The game will always add those if there are vehicles defined for these track types. As a result, for a track set it&#039;s best not to ignore those standard labels, but rather work with them and define them in the set. If your track set does not have monorail or maglev tracks, there of course is no need to define those. But if your track set defines anything that resembles unelectrified or electrified rail, you should use the RAIL and ELRL labels. Matching labels from the above scheme will then be defined in property [[Action0/Railtypes#Alternate_rail_type_labels_.281D.29|1D (NFO)]] or [[NML:Railtypes#Railtype_properties|alternative_railtype_list (NML)]].&lt;br /&gt;
&lt;br /&gt;
As vehicles from NewGRFs that do not use explicit railtypes will end up on these standard railtypes, you should use RAIL instead of whatever type could be regarded as the most commonly used unelectrified type, ELRL instead of the most commonly used electrified type and so on. The label according to this scheme is then set as an alternate.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Summary for track sets ==&lt;br /&gt;
This section summarizes the above for track sets.&lt;br /&gt;
&lt;br /&gt;
; [X***] Track gauge and type class&lt;br /&gt;
* Define at least one track type for every track gauge/type class you want in your set.&lt;br /&gt;
* If you only provide tracks for one gauge/type, consider leaving some free railtypes so a player can load an additional set for some other type.&lt;br /&gt;
; [*X**] Speed limit class&lt;br /&gt;
* Make sure class A is always available, either directly or via an alternate label.&lt;br /&gt;
* Use only class A if you don&#039;t want speed limits;&lt;br /&gt;
* With speed limits, A is the lowest speed limit. Continue with B, C, etc. for increasing speed limits;&lt;br /&gt;
* The speed class can also be used to implement additional eye-candy track types, use letters higher in the alphabet for this.&lt;br /&gt;
; [**X*] Axle load class&lt;br /&gt;
* Always define all classes A through E for every track type class / electrification combination, either:&lt;br /&gt;
** Directly via a real railtype definition;&lt;br /&gt;
** Indirectly via the alternate rail type label list, property [[Action0/Railtypes#Alternate_rail_type_labels_.281D.29|1D (NFO)]] or [[NML:Railtypes#Railtype_properties|alternative_railtype_list (NML)]].&lt;br /&gt;
* Extend the predefined classes only if you also provide a train set that makes use of these.&lt;br /&gt;
; [***X] Energy source type class&lt;br /&gt;
* If your set only uses specialized classes, always map the generic classes to the closest matching specialized type via property 1D.&lt;br /&gt;
; Standard labels [RAIL, ELRL, MONO, MGLV]&lt;br /&gt;
* Always define the standard labels when possible, instead of what would be the equivalent of the standard label in this scheme.&lt;br /&gt;
* Map the equivalent labels from this scheme to the standard labels using property [[Action0/Railtypes#Alternate_rail_type_labels_.281D.29|1D (NFO)]] or [[NML:Railtypes#Railtype_properties|alternative_railtype_list (NML)]].&lt;br /&gt;
&lt;br /&gt;
Or, put differently, for each gauge/type, select one or more energy source types. For each type/energy combination provide all axle load classes for the speed class &amp;quot;A&amp;quot;, either as a real type or as an alternate of another type. Provide more types with a different speed letter if you want to provide several different speeds or other eye-candy tracks.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Summary for train sets ==&lt;br /&gt;
This section summarizes the above for train sets.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
; [X***] Track gauge and type class&lt;br /&gt;
* Use the track type class that matches the vehicle;&lt;br /&gt;
* Define a fallback type via the railtype table in case you want the vehicle to be available on a different track if no matching track set is loaded.&lt;br /&gt;
** Specialized subtypes like &amp;quot;n&amp;quot; might not always be available. If you want those vehicles to be still available then, fall back the the generic class (e.g. &amp;quot;N&amp;quot;).&lt;br /&gt;
; [*X**] Speed limit class &lt;br /&gt;
* Always use class A for every vehicle.&lt;br /&gt;
; [**X*] Axle load class&lt;br /&gt;
* Use all classes A through E according to the maximum axle weight of the vehicle.&lt;br /&gt;
* Extend the predefined classes only if you also provide a track set that makes use of these;&lt;br /&gt;
** When extending the predefined classes A through E, define a fallback type via the railtype table in case you want the vehicle to be available if no matching track set is loaded.&lt;br /&gt;
; [***X] Energy source type class&lt;br /&gt;
* Use the energy source type class that matches the vehicle;&lt;br /&gt;
* When using specialized classes, define a fallback type via the railtype table in case you want the vehicle to be available if no matching track set is loaded.&lt;br /&gt;
; Standard labels [RAIL, ELRL, MONO, MGLV]&lt;br /&gt;
* Define a fallback type to the standard labels via the railtype table in case you want the vehicle to be available on the standard tracks if no matching track set is loaded.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Be as specific as you want when selecting the railtype, it is the job of the track set to select a playable, reduced subset out of all possible type combinations.&lt;br /&gt;
&lt;br /&gt;
== In case you&#039;re not convinced by this scheme ==&lt;br /&gt;
Adopting this scheme gives the player freedom to use any track set in combination with any train set that follow the scheme. &lt;br /&gt;
&lt;br /&gt;
This means that you can make your train set compatible with track sets that provide axle load classes, and track sets that provide speed limits, and at the same time with track sets that provide none of this. This way, the player can decide to play with or without axle load classes, or with or without speed limits, simply by loading a track set that does or does not provide these features.&lt;br /&gt;
&lt;br /&gt;
And for your track set, it means that you can make it as simple or as complicated as you want (within the 64 track type limit), while not having to worry about compatibility with train sets.&lt;br /&gt;
&lt;br /&gt;
Still not convinced? Feel free to use railtype labels of your own, but know that you will likely come to regret that at some point in the future.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Forum topic==&lt;br /&gt;
If you want to discuss the standardized railtype scheme or have any questions about it, you can visit [http://www.tt-forums.net/viewtopic.php?t=59379 the forum topic].&lt;br /&gt;
&lt;br /&gt;
==Extensions and best practice==&lt;br /&gt;
See [https://newgrf-specs.tt-wiki.net/wiki/Standardized_Railtype_Scheme_extensions Standardized Railtype Scheme extensions]&lt;/div&gt;</summary>
		<author><name>Michi cc</name></author>
	</entry>
	<entry>
		<id>https://newgrf-specs.tt-wiki.net/index.php?title=Standardized_Railtype_Scheme&amp;diff=5062</id>
		<title>Standardized Railtype Scheme</title>
		<link rel="alternate" type="text/html" href="https://newgrf-specs.tt-wiki.net/index.php?title=Standardized_Railtype_Scheme&amp;diff=5062"/>
		<updated>2025-06-12T14:45:38Z</updated>

		<summary type="html">&lt;p&gt;Michi cc: /* When to use the scheme and when not to use the scheme */ Added&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This railtype label scheme aims to provide a way to allow players to easily mix and match different train and track sets. It does this by grouping the rail types into what matters from a technical perspective. The scheme provides a standardized way of defining railtype labels, based on track gauge and type, speed class, allowable axle weight and electrification type. To limit combinatorial explosions of rail types, the track properties are abstracted away from strict real-life representations.&lt;br /&gt;
&lt;br /&gt;
It is the explicit intent of this scheme to decouple track sets from vehicle sets to facilitate easy mixing. This way the player can select a track set of choice to go with a train set of choice. It allows the player to play with or without axle load classes, or with or without speed limit classes, simply by loading a track set that does or does not provide these features. In some cases it will also be possible to combine niche track sets, for instance a standard gauge track set with a narrow gauge and a metro track set. Additionally, due to the decoupling, depending on the specific train and track sets used, not all defined vehicles and/or track types might be available in a specific set combination. This is fully intended behaviour.&lt;br /&gt;
&lt;br /&gt;
== When to use the scheme and when &#039;&#039;not&#039;&#039; to use the scheme ==&lt;br /&gt;
&lt;br /&gt;
When to use:&lt;br /&gt;
* If you only want to develop a track or a train set.&lt;br /&gt;
* If you want players to be able to mix-and-match sets.&lt;br /&gt;
* If you are okay with abstractions from real life.&lt;br /&gt;
&lt;br /&gt;
When &#039;&#039;not&#039;&#039; to use:&lt;br /&gt;
* If you consider it a crime against humanity when one of your vehicles or track types is not available in a specific game.&lt;br /&gt;
* If you want your tracks or vehicles to exactly mirror real-life counterparts down to the last mm of gauge width.&lt;br /&gt;
* If your train set is specifically designed to work with your track set only.&lt;br /&gt;
* If you feel the compulsory need to fill all 64 railtype slots.&lt;br /&gt;
&lt;br /&gt;
== The Label Scheme ==&lt;br /&gt;
A railtype label consists of four characters. In this scheme, each position has a different purpose:&lt;br /&gt;
# Track gauge and type class (e.g. standard gauge rail, narrow gauge rail, monorail)&lt;br /&gt;
# Speed limit class&lt;br /&gt;
# Axle load class (maximum allowed axle weight for this track)&lt;br /&gt;
# Energy source type class&lt;br /&gt;
&lt;br /&gt;
In the next sections, each of the four positions will be explained.&lt;br /&gt;
&lt;br /&gt;
=== Track gauge and type class [X***] ===&lt;br /&gt;
The first position in the railtype label defines track gauge and/or track type class. The following classes are currently defined:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! !!Track type/gauge&lt;br /&gt;
|- &lt;br /&gt;
|S ||Standard gauge rail&lt;br /&gt;
|-&lt;br /&gt;
|B ||Broad gauge rail &lt;br /&gt;
|-&lt;br /&gt;
|N ||Narrow gauge rail&lt;br /&gt;
|-&lt;br /&gt;
|n ||Secondary narrow gauge rail (e.g. when providing both metre and cape gauge, always use N in case of just one type of narrow gauge)&lt;br /&gt;
|-&lt;br /&gt;
|D ||Dual gauge rail, standard/broad gauge&lt;br /&gt;
|-&lt;br /&gt;
|d ||Dual gauge rail, standard/narrow gauge&lt;br /&gt;
|-&lt;br /&gt;
|M ||Monorail&lt;br /&gt;
|-&lt;br /&gt;
|L ||Magnetic Levitation&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Speed limit/appearance class [*X**] ===&lt;br /&gt;
The second position in the railtype label defines the speed limit/appearance class. This can be used to provide tracks with different speed limits or appearance variations. The speed limit/appearance class is &#039;&#039;not&#039;&#039; used for trains and a train set should always use the class letter &#039;&#039;&#039;A&#039;&#039;&#039; in this position.&lt;br /&gt;
&lt;br /&gt;
There is no fixed numeric mapping for this class, but speed limits should start at &#039;&#039;&#039;A&#039;&#039;&#039; for the lowest speed limit and progress with &#039;&#039;&#039;B/C/...&#039;&#039;&#039; for higher limits. If you do not want to employ speed limits in your track set, always use the class &#039;&#039;&#039;A&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Additionally this class can also be used to distinguish different track appearances like normal or full width ballast, grass or concrete ground, etc. Train sets must not define vehicles for appearance classes. If you think you have special vehicles that should only run on the appearance class, it is &#039;&#039;not&#039;&#039; appearance but a separate track gauge/type.&lt;br /&gt;
&lt;br /&gt;
The appearance class can be tested for by trains using [https://newgrf-specs.tt-wiki.net/wiki/VariationalAction2/Vehicles#Track-type_test_against_another_track-type_.2863.29 var 63] (which the French Set uses to change vehicle properties on rack rail), but this is generally not standardized, limits interoperability and is only useful for co-developed train and track sets.&lt;br /&gt;
&lt;br /&gt;
The following speed limit/appearance classes have been defined so far:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! !!Description !!Type !!Used by&lt;br /&gt;
|- &lt;br /&gt;
|A-H ||speed limits ||colspan=&amp;quot;2&amp;quot;| reserved&lt;br /&gt;
|- &lt;br /&gt;
|R ||rack rail, that allows rack-equipped vehicle to not slow down going uphill ||special ||French Set Rails&lt;br /&gt;
|- &lt;br /&gt;
|S ||subterranean ||appearance ||Metro Track Set&lt;br /&gt;
|- &lt;br /&gt;
|U ||urban ||appearance ||Metro Track Set&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Axle load class [**X*] ===&lt;br /&gt;
The third position defines the axle weight limit. Heavy trains cannot run on tracks with a low axle weight limit; these trains need more expensive tracks with a higher weight limit. There are five axle load classes &#039;&#039;&#039;A&#039;&#039;&#039; through &#039;&#039;&#039;E&#039;&#039;&#039;. &#039;&#039;&#039;A&#039;&#039;&#039; is for the lowest axle load limit, &#039;&#039;&#039;E&#039;&#039;&#039; for the highest. The exact axle load attached to each class is relative to the track gauge/type and trains in the set. &lt;br /&gt;
&lt;br /&gt;
A train set should set the appropriate axle weight for each train via the railtype label, as to make the set work with track sets that do provide tracks with different weight limits, even if you don&#039;t care about it for your trainset. Ideally, all five standard axle load classes should be used, but a train set may use only some weight classes, as the vehicle rooster might not make it feasible to use all five. The group with the lowest axle weights will get class &#039;&#039;&#039;A&#039;&#039;&#039;, the second lowest class &#039;&#039;&#039;B&#039;&#039;&#039;, etc. up to the group with the highest axle weights which will get class &#039;&#039;&#039;E&#039;&#039;&#039;. If you do not use all classes, try to spread the classes out (don&#039;t use &#039;&#039;&#039;A&#039;&#039;&#039; and &#039;&#039;&#039;B&#039;&#039;&#039; for two classes, but e.g. &#039;&#039;&#039;B&#039;&#039;&#039; and &#039;&#039;&#039;D&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
A track set does not have to provide a dedicated track type for each axle weight limit. A track set that does not provide a dedicated track for each axle load class, must make sure to map all undefined axle load classes to a real railtype using property [[Action0/Railtypes#Alternate_rail_type_labels_.281D.29|1D (NFO)]] or [[NML:Railtypes#Railtype_properties|alternative_railtype_list (NML)]]. This way a train set can rely on all labels for all axle load classes being available. Example: if you only want to provide 2 axle load classes for standard gauge unelectrified with no speed limits, you can map SA&#039;&#039;&#039;A&#039;&#039;&#039;N + SA&#039;&#039;&#039;B&#039;&#039;&#039;N to SA&#039;&#039;&#039;C&#039;&#039;&#039;N and SA&#039;&#039;&#039;D&#039;&#039;&#039;N to SA&#039;&#039;&#039;E&#039;&#039;&#039;N if the cost difference between the two railtypes is high, or SA&#039;&#039;&#039;A&#039;&#039;&#039;N to SA&#039;&#039;&#039;B&#039;&#039;&#039;N and SA&#039;&#039;&#039;C&#039;&#039;&#039;N + SA&#039;&#039;&#039;D&#039;&#039;&#039;N to SA&#039;&#039;&#039;E&#039;&#039;&#039;N if the cost difference is low.&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t want to provide any axle load classes in your track set, it doesn&#039;t really matter what axle load class you choose for the track, as you&#039;ll be mapping all other classes to this track anyways. But the lowest or highest class are the obvious choice. Example: if your track set only provides narrow gauge unelectrified track with no speed limits and no axle load limits, you may use NA&#039;&#039;&#039;A&#039;&#039;&#039;N for the track label, and provide NA&#039;&#039;&#039;B&#039;&#039;&#039;N, NA&#039;&#039;&#039;C&#039;&#039;&#039;N, NA&#039;&#039;&#039;D&#039;&#039;&#039;N, NA&#039;&#039;&#039;E&#039;&#039;&#039;N in property [[Action0/Railtypes#Alternate_rail_type_labels_.281D.29|1D (NFO)]] or [[NML:Railtypes#Railtype_properties|alternative_railtype_list (NML)]].&lt;br /&gt;
&lt;br /&gt;
If you need more than five axle load class, you may use lowercase letters for very low axle loads and continue the uppercase letters for very high axle loads. Be advised that your train set may not assume the existence of any other class than &#039;&#039;&#039;A&#039;&#039;&#039; through &#039;&#039;&#039;E&#039;&#039;&#039;, so think about providing appropriate fallbacks in your railtype table. If you make a track set with an extended range, be aware that not all train sets will define trains for these tracks. In general: only do this in case of a train set with a matching track set.&lt;br /&gt;
&lt;br /&gt;
For the lowercase letters, &#039;&#039;&#039;b&#039;&#039;&#039; is lower than &#039;&#039;&#039;a&#039;&#039;&#039;, so for increasing axle load limits: b &amp;lt; a &amp;lt; A &amp;lt; B &amp;lt; C etc.&lt;br /&gt;
&lt;br /&gt;
Note that the axle load classes never map to a specific weight in tonnes. For that reason it does not make sense to add a numeric value for the axle load to the name of a track type or in the extended purchase info of a train. Instead use the relative expressions &#039;very low&#039;, &#039;low&#039;, &#039;medium&#039;, &#039;high&#039; and &#039;very high&#039; or use the class letters directly.&lt;br /&gt;
&lt;br /&gt;
=== Energy source type class [***X] ===&lt;br /&gt;
The last position defines the energy source type class. This is split in generic energy source types like overhead wires and third rail and specialized types like alternating and direct current.&lt;br /&gt;
&lt;br /&gt;
A track set that only uses specialized types, should map the generic types to the most suitable specialized type in the set.&lt;br /&gt;
&lt;br /&gt;
A vehicle set that uses specialized types should define a generic type as fallback, via the railtype table. If such a fallback is omitted, please note that certain vehicles may be unavailable depending on track set loaded.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! !!Generic energy type classes&lt;br /&gt;
|-&lt;br /&gt;
|N ||no electrification&lt;br /&gt;
|-&lt;br /&gt;
|E ||overhead wires/catenary electrification&lt;br /&gt;
|-&lt;br /&gt;
|3 ||3rd rail electrification&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! !!Specialized energy type classes !!Vehicle set fallback&lt;br /&gt;
|-&lt;br /&gt;
|Z ||3rd rail and catenary electrification || 3 or E&lt;br /&gt;
|-&lt;br /&gt;
|4 ||4th rail electrification || 3&lt;br /&gt;
|-&lt;br /&gt;
|Y ||4th rail and catenary electrification || 4 or E&lt;br /&gt;
|-&lt;br /&gt;
|T ||[http://en.wikipedia.org/wiki/Three-phase_AC_railway_electrification three phase AC electrification] || E&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; | &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|D ||DC catenary electrification || E&lt;br /&gt;
|-&lt;br /&gt;
|d ||low voltage DC catenary electrification (only when D also used in set) || First A then E&lt;br /&gt;
|-&lt;br /&gt;
|A ||AC catenary electrification || E&lt;br /&gt;
|-&lt;br /&gt;
|a ||low voltage AC catenary electrification (only when A also used in set) || First A then E&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you want multi-voltage/current vehicles in your set (i.e. a train that can run on both AC and DC current), you have to define a dedicated railtype for those vehicles. Without the railtype, it&#039;s not possible to define vehicles with this property. If you only have vehicles that can run on either one type of voltage/current or on all types of voltage/current (e.g. a 2-system if you only have &#039;&#039;&#039;A&#039;&#039;&#039; and &#039;&#039;&#039;D&#039;&#039;&#039; tracks, or a 4-system in case of all &#039;&#039;&#039;A&#039;&#039;&#039;, &#039;&#039;&#039;a&#039;&#039;&#039;, &#039;&#039;&#039;D&#039;&#039;&#039; and &#039;&#039;&#039;d&#039;&#039;&#039;), then use the generic class &#039;&#039;&#039;E&#039;&#039;&#039; for vehicles that should be able to run on all different voltage/currents. Also the track set needs to have one at least one railtype with class &#039;&#039;&#039;E&#039;&#039;&#039; defined.&lt;br /&gt;
&lt;br /&gt;
Note that if you want more than one type of multi-voltage/current, you&#039;ll quickly get a combinatory explosion of railtype labels, so plan carefully or do not attempt it. For every different multi-voltage/current vehicle type a dedicated railtype is needed. If you want all possible combinations, then you need to define an additional 8 classes. It is not recommended to make your train/track set this complicated.&lt;br /&gt;
&lt;br /&gt;
Example approach for a 4-system set, with trains that can run on either one or all systems:&lt;br /&gt;
* &#039;&#039;&#039;E&#039;&#039;&#039;: generic catenary-powered electric engines. &amp;quot;universal&amp;quot; [4-system] if any of &#039;&#039;&#039;D&#039;&#039;&#039;/&#039;&#039;&#039;d&#039;&#039;&#039;/&#039;&#039;&#039;A&#039;&#039;&#039;/&#039;&#039;&#039;a&#039;&#039;&#039; are defined.&lt;br /&gt;
* &#039;&#039;&#039;A&#039;&#039;&#039;: generic AC catenary electric engines. 25kV only if &#039;&#039;&#039;a&#039;&#039;&#039; also defined. Vehicle sets should use &#039;&#039;&#039;E&#039;&#039;&#039; as fallback, if defining an engine for &#039;&#039;&#039;A&#039;&#039;&#039;;&lt;br /&gt;
* &#039;&#039;&#039;a&#039;&#039;&#039;: 15kV AC catenary electric engines. Only defined if &#039;&#039;&#039;A&#039;&#039;&#039; also defined. Vehicle sets should use &#039;&#039;&#039;A&#039;&#039;&#039; and &#039;&#039;&#039;E&#039;&#039;&#039; as fallback, if defining an engine for &#039;&#039;&#039;a&#039;&#039;&#039;;&lt;br /&gt;
* &#039;&#039;&#039;D&#039;&#039;&#039;: generic DC catenary electric engines. 3kV if &#039;&#039;&#039;d&#039;&#039;&#039; also defined. Vehicle sets should use &#039;&#039;&#039;E&#039;&#039;&#039; as fallback, if defining an engine for &#039;&#039;&#039;D&#039;&#039;&#039;;&lt;br /&gt;
* &#039;&#039;&#039;d&#039;&#039;&#039;: 1.5kV DC catenary electric engines. Only defined if &#039;&#039;&#039;D&#039;&#039;&#039; also defined. Vehicle sets should use &#039;&#039;&#039;D&#039;&#039;&#039; and &#039;&#039;&#039;E&#039;&#039;&#039; as fallback, if defining an engine for &#039;&#039;&#039;d&#039;&#039;&#039;.&lt;br /&gt;
For a 2-system set, you can simply drop &#039;&#039;&#039;a&#039;&#039;&#039; and &#039;&#039;&#039;d&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Standard labels: RAIL, ELRL, MONO, MGLV ===&lt;br /&gt;
It&#039;s not possible to undefine the standard railtypes RAIL, ELRL, MONO and MGLV. The game will always add those if there are vehicles defined for these track types. As a result, for a track set it&#039;s best not to ignore those standard labels, but rather work with them and define them in the set. If your track set does not have monorail or maglev tracks, there of course is no need to define those. But if your track set defines anything that resembles unelectrified or electrified rail, you should use the RAIL and ELRL labels. Matching labels from the above scheme will then be defined in property [[Action0/Railtypes#Alternate_rail_type_labels_.281D.29|1D (NFO)]] or [[NML:Railtypes#Railtype_properties|alternative_railtype_list (NML)]].&lt;br /&gt;
&lt;br /&gt;
As vehicles from NewGRFs that do not use explicit railtypes will end up on these standard railtypes, you should use RAIL instead of whatever type could be regarded as the most commonly used unelectrified type, ELRL instead of the most commonly used electrified type and so on. The label according to this scheme is then set as an alternate.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Summary for track sets ==&lt;br /&gt;
This section summarizes the above for track sets.&lt;br /&gt;
&lt;br /&gt;
; [X***] Track gauge and type class&lt;br /&gt;
* Define at least one track type for every track gauge/type class you want in your set.&lt;br /&gt;
* If you only provide tracks for one gauge/type, consider leaving some free railtypes so a player can load an additional set for some other type.&lt;br /&gt;
; [*X**] Speed limit class&lt;br /&gt;
* Make sure class A is always available, either directly or via an alternate label.&lt;br /&gt;
* Use only class A if you don&#039;t want speed limits;&lt;br /&gt;
* With speed limits, A is the lowest speed limit. Continue with B, C, etc. for increasing speed limits;&lt;br /&gt;
* The speed class can also be used to implement additional eye-candy track types, use letters higher in the alphabet for this.&lt;br /&gt;
; [**X*] Axle load class&lt;br /&gt;
* Always define all classes A through E for every track type class / electrification combination, either:&lt;br /&gt;
** Directly via a real railtype definition;&lt;br /&gt;
** Indirectly via the alternate rail type label list, property [[Action0/Railtypes#Alternate_rail_type_labels_.281D.29|1D (NFO)]] or [[NML:Railtypes#Railtype_properties|alternative_railtype_list (NML)]].&lt;br /&gt;
* Extend the predefined classes only if you also provide a train set that makes use of these.&lt;br /&gt;
; [***X] Energy source type class&lt;br /&gt;
* If your set only uses specialized classes, always map the generic classes to the closest matching specialized type via property 1D.&lt;br /&gt;
; Standard labels [RAIL, ELRL, MONO, MGLV]&lt;br /&gt;
* Always define the standard labels when possible, instead of what would be the equivalent of the standard label in this scheme.&lt;br /&gt;
* Map the equivalent labels from this scheme to the standard labels using property [[Action0/Railtypes#Alternate_rail_type_labels_.281D.29|1D (NFO)]] or [[NML:Railtypes#Railtype_properties|alternative_railtype_list (NML)]].&lt;br /&gt;
&lt;br /&gt;
Or, put differently, for each gauge/type, select one or more energy source types. For each type/energy combination provide all axle load classes for the speed class &amp;quot;A&amp;quot;, either as a real type or as an alternate of another type. Provide more types with a different speed letter if you want to provide several different speeds or other eye-candy tracks.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Summary for train sets ==&lt;br /&gt;
This section summarizes the above for train sets.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
; [X***] Track gauge and type class&lt;br /&gt;
* Use the track type class that matches the vehicle;&lt;br /&gt;
* Define a fallback type via the railtype table in case you want the vehicle to be available on a different track if no matching track set is loaded.&lt;br /&gt;
** Specialized subtypes like &amp;quot;n&amp;quot; might not always be available. If you want those vehicles to be still available then, fall back the the generic class (e.g. &amp;quot;N&amp;quot;).&lt;br /&gt;
; [*X**] Speed limit class &lt;br /&gt;
* Always use class A for every vehicle.&lt;br /&gt;
; [**X*] Axle load class&lt;br /&gt;
* Use all classes A through E according to the maximum axle weight of the vehicle.&lt;br /&gt;
* Extend the predefined classes only if you also provide a track set that makes use of these;&lt;br /&gt;
** When extending the predefined classes A through E, define a fallback type via the railtype table in case you want the vehicle to be available if no matching track set is loaded.&lt;br /&gt;
; [***X] Energy source type class&lt;br /&gt;
* Use the energy source type class that matches the vehicle;&lt;br /&gt;
* When using specialized classes, define a fallback type via the railtype table in case you want the vehicle to be available if no matching track set is loaded.&lt;br /&gt;
; Standard labels [RAIL, ELRL, MONO, MGLV]&lt;br /&gt;
* Define a fallback type to the standard labels via the railtype table in case you want the vehicle to be available on the standard tracks if no matching track set is loaded.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Be as specific as you want when selecting the railtype, it is the job of the track set to select a playable, reduced subset out of all possible type combinations.&lt;br /&gt;
&lt;br /&gt;
== In case you&#039;re not convinced by this scheme ==&lt;br /&gt;
Adopting this scheme gives the player freedom to use any track set in combination with any train set that follow the scheme. &lt;br /&gt;
&lt;br /&gt;
This means that you can make your train set compatible with track sets that provide axle load classes, and track sets that provide speed limits, and at the same time with track sets that provide none of this. This way, the player can decide to play with or without axle load classes, or with or without speed limits, simply by loading a track set that does or does not provide these features.&lt;br /&gt;
&lt;br /&gt;
And for your track set, it means that you can make it as simple or as complicated as you want (within the 64 track type limit), while not having to worry about compatibility with train sets.&lt;br /&gt;
&lt;br /&gt;
Still not convinced? Feel free to use railtype labels of your own, but know that you will likely come to regret that at some point in the future.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Forum topic==&lt;br /&gt;
If you want to discuss the standardized railtype scheme or have any questions about it, you can visit [http://www.tt-forums.net/viewtopic.php?t=59379 the forum topic].&lt;br /&gt;
&lt;br /&gt;
==Extensions and best practice==&lt;br /&gt;
See [https://newgrf-specs.tt-wiki.net/wiki/Standardized_Railtype_Scheme_extensions Standardized Railtype Scheme extensions]&lt;/div&gt;</summary>
		<author><name>Michi cc</name></author>
	</entry>
	<entry>
		<id>https://newgrf-specs.tt-wiki.net/index.php?title=Standardized_Railtype_Scheme&amp;diff=5061</id>
		<title>Standardized Railtype Scheme</title>
		<link rel="alternate" type="text/html" href="https://newgrf-specs.tt-wiki.net/index.php?title=Standardized_Railtype_Scheme&amp;diff=5061"/>
		<updated>2025-06-12T14:02:26Z</updated>

		<summary type="html">&lt;p&gt;Michi cc: /* Speed limit class [*X**] */ Speed limit class is also for appearance&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This railtype label scheme aims to bring order to the uncontrolled growth of railtype labels. It groups the rail types into what matters from a technical perspective. The scheme provides a standardized way of defining railtype labels, based on track gauge and type, speed class, allowable axle weight and electrification type.&lt;br /&gt;
&lt;br /&gt;
It is the explicit intent of this scheme to decouple track sets from vehicle sets to facilitate easy mixing. This way the player can select a track set of choice to go with a train set of choice. It allows the player to play with or without axle load classes, or with or without speed limit classes, simply by loading a track set that does or does not provide these features. In some cases it will also be possible to combine niche track sets, for instance a standard gauge track set with a narrow gauge and a metro track set.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== The Label Scheme ==&lt;br /&gt;
A railtype label consists of four characters. In this scheme, each position has a different purpose:&lt;br /&gt;
# Track gauge and type class (e.g. standard gauge rail, narrow gauge rail, monorail)&lt;br /&gt;
# Speed limit class&lt;br /&gt;
# Axle load class (maximum allowed axle weight for this track)&lt;br /&gt;
# Energy source type class&lt;br /&gt;
&lt;br /&gt;
In the next sections, each of the four positions will be explained.&lt;br /&gt;
&lt;br /&gt;
=== Track gauge and type class [X***] ===&lt;br /&gt;
The first position in the railtype label defines track gauge and/or track type class. The following classes are currently defined:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! !!Track type/gauge&lt;br /&gt;
|- &lt;br /&gt;
|S ||Standard gauge rail&lt;br /&gt;
|-&lt;br /&gt;
|B ||Broad gauge rail &lt;br /&gt;
|-&lt;br /&gt;
|N ||Narrow gauge rail&lt;br /&gt;
|-&lt;br /&gt;
|n ||Secondary narrow gauge rail (e.g. when providing both metre and cape gauge, always use N in case of just one type of narrow gauge)&lt;br /&gt;
|-&lt;br /&gt;
|D ||Dual gauge rail, standard/broad gauge&lt;br /&gt;
|-&lt;br /&gt;
|d ||Dual gauge rail, standard/narrow gauge&lt;br /&gt;
|-&lt;br /&gt;
|M ||Monorail&lt;br /&gt;
|-&lt;br /&gt;
|L ||Magnetic Levitation&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Speed limit/appearance class [*X**] ===&lt;br /&gt;
The second position in the railtype label defines the speed limit/appearance class. This can be used to provide tracks with different speed limits or appearance variations. The speed limit/appearance class is &#039;&#039;not&#039;&#039; used for trains and a train set should always use the class letter &#039;&#039;&#039;A&#039;&#039;&#039; in this position.&lt;br /&gt;
&lt;br /&gt;
There is no fixed numeric mapping for this class, but speed limits should start at &#039;&#039;&#039;A&#039;&#039;&#039; for the lowest speed limit and progress with &#039;&#039;&#039;B/C/...&#039;&#039;&#039; for higher limits. If you do not want to employ speed limits in your track set, always use the class &#039;&#039;&#039;A&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Additionally this class can also be used to distinguish different track appearances like normal or full width ballast, grass or concrete ground, etc. Train sets must not define vehicles for appearance classes. If you think you have special vehicles that should only run on the appearance class, it is &#039;&#039;not&#039;&#039; appearance but a separate track gauge/type.&lt;br /&gt;
&lt;br /&gt;
The appearance class can be tested for by trains using [https://newgrf-specs.tt-wiki.net/wiki/VariationalAction2/Vehicles#Track-type_test_against_another_track-type_.2863.29 var 63] (which the French Set uses to change vehicle properties on rack rail), but this is generally not standardized, limits interoperability and is only useful for co-developed train and track sets.&lt;br /&gt;
&lt;br /&gt;
The following speed limit/appearance classes have been defined so far:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! !!Description !!Type !!Used by&lt;br /&gt;
|- &lt;br /&gt;
|A-H ||speed limits ||colspan=&amp;quot;2&amp;quot;| reserved&lt;br /&gt;
|- &lt;br /&gt;
|R ||rack rail, that allows rack-equipped vehicle to not slow down going uphill ||special ||French Set Rails&lt;br /&gt;
|- &lt;br /&gt;
|S ||subterranean ||appearance ||Metro Track Set&lt;br /&gt;
|- &lt;br /&gt;
|U ||urban ||appearance ||Metro Track Set&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Axle load class [**X*] ===&lt;br /&gt;
The third position defines the axle weight limit. Heavy trains cannot run on tracks with a low axle weight limit; these trains need more expensive tracks with a higher weight limit. There are five axle load classes &#039;&#039;&#039;A&#039;&#039;&#039; through &#039;&#039;&#039;E&#039;&#039;&#039;. &#039;&#039;&#039;A&#039;&#039;&#039; is for the lowest axle load limit, &#039;&#039;&#039;E&#039;&#039;&#039; for the highest. The exact axle load attached to each class is relative to the track gauge/type and trains in the set. &lt;br /&gt;
&lt;br /&gt;
A train set should set the appropriate axle weight for each train via the railtype label, as to make the set work with track sets that do provide tracks with different weight limits, even if you don&#039;t care about it for your trainset. Ideally, all five standard axle load classes should be used, but a train set may use only some weight classes, as the vehicle rooster might not make it feasible to use all five. The group with the lowest axle weights will get class &#039;&#039;&#039;A&#039;&#039;&#039;, the second lowest class &#039;&#039;&#039;B&#039;&#039;&#039;, etc. up to the group with the highest axle weights which will get class &#039;&#039;&#039;E&#039;&#039;&#039;. If you do not use all classes, try to spread the classes out (don&#039;t use &#039;&#039;&#039;A&#039;&#039;&#039; and &#039;&#039;&#039;B&#039;&#039;&#039; for two classes, but e.g. &#039;&#039;&#039;B&#039;&#039;&#039; and &#039;&#039;&#039;D&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
A track set does not have to provide a dedicated track type for each axle weight limit. A track set that does not provide a dedicated track for each axle load class, must make sure to map all undefined axle load classes to a real railtype using property [[Action0/Railtypes#Alternate_rail_type_labels_.281D.29|1D (NFO)]] or [[NML:Railtypes#Railtype_properties|alternative_railtype_list (NML)]]. This way a train set can rely on all labels for all axle load classes being available. Example: if you only want to provide 2 axle load classes for standard gauge unelectrified with no speed limits, you can map SA&#039;&#039;&#039;A&#039;&#039;&#039;N + SA&#039;&#039;&#039;B&#039;&#039;&#039;N to SA&#039;&#039;&#039;C&#039;&#039;&#039;N and SA&#039;&#039;&#039;D&#039;&#039;&#039;N to SA&#039;&#039;&#039;E&#039;&#039;&#039;N if the cost difference between the two railtypes is high, or SA&#039;&#039;&#039;A&#039;&#039;&#039;N to SA&#039;&#039;&#039;B&#039;&#039;&#039;N and SA&#039;&#039;&#039;C&#039;&#039;&#039;N + SA&#039;&#039;&#039;D&#039;&#039;&#039;N to SA&#039;&#039;&#039;E&#039;&#039;&#039;N if the cost difference is low.&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t want to provide any axle load classes in your track set, it doesn&#039;t really matter what axle load class you choose for the track, as you&#039;ll be mapping all other classes to this track anyways. But the lowest or highest class are the obvious choice. Example: if your track set only provides narrow gauge unelectrified track with no speed limits and no axle load limits, you may use NA&#039;&#039;&#039;A&#039;&#039;&#039;N for the track label, and provide NA&#039;&#039;&#039;B&#039;&#039;&#039;N, NA&#039;&#039;&#039;C&#039;&#039;&#039;N, NA&#039;&#039;&#039;D&#039;&#039;&#039;N, NA&#039;&#039;&#039;E&#039;&#039;&#039;N in property [[Action0/Railtypes#Alternate_rail_type_labels_.281D.29|1D (NFO)]] or [[NML:Railtypes#Railtype_properties|alternative_railtype_list (NML)]].&lt;br /&gt;
&lt;br /&gt;
If you need more than five axle load class, you may use lowercase letters for very low axle loads and continue the uppercase letters for very high axle loads. Be advised that your train set may not assume the existence of any other class than &#039;&#039;&#039;A&#039;&#039;&#039; through &#039;&#039;&#039;E&#039;&#039;&#039;, so think about providing appropriate fallbacks in your railtype table. If you make a track set with an extended range, be aware that not all train sets will define trains for these tracks. In general: only do this in case of a train set with a matching track set.&lt;br /&gt;
&lt;br /&gt;
For the lowercase letters, &#039;&#039;&#039;b&#039;&#039;&#039; is lower than &#039;&#039;&#039;a&#039;&#039;&#039;, so for increasing axle load limits: b &amp;lt; a &amp;lt; A &amp;lt; B &amp;lt; C etc.&lt;br /&gt;
&lt;br /&gt;
Note that the axle load classes never map to a specific weight in tonnes. For that reason it does not make sense to add a numeric value for the axle load to the name of a track type or in the extended purchase info of a train. Instead use the relative expressions &#039;very low&#039;, &#039;low&#039;, &#039;medium&#039;, &#039;high&#039; and &#039;very high&#039; or use the class letters directly.&lt;br /&gt;
&lt;br /&gt;
=== Energy source type class [***X] ===&lt;br /&gt;
The last position defines the energy source type class. This is split in generic energy source types like overhead wires and third rail and specialized types like alternating and direct current.&lt;br /&gt;
&lt;br /&gt;
A track set that only uses specialized types, should map the generic types to the most suitable specialized type in the set.&lt;br /&gt;
&lt;br /&gt;
A vehicle set that uses specialized types should define a generic type as fallback, via the railtype table. If such a fallback is omitted, please note that certain vehicles may be unavailable depending on track set loaded.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! !!Generic energy type classes&lt;br /&gt;
|-&lt;br /&gt;
|N ||no electrification&lt;br /&gt;
|-&lt;br /&gt;
|E ||overhead wires/catenary electrification&lt;br /&gt;
|-&lt;br /&gt;
|3 ||3rd rail electrification&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! !!Specialized energy type classes !!Vehicle set fallback&lt;br /&gt;
|-&lt;br /&gt;
|Z ||3rd rail and catenary electrification || 3 or E&lt;br /&gt;
|-&lt;br /&gt;
|4 ||4th rail electrification || 3&lt;br /&gt;
|-&lt;br /&gt;
|Y ||4th rail and catenary electrification || 4 or E&lt;br /&gt;
|-&lt;br /&gt;
|T ||[http://en.wikipedia.org/wiki/Three-phase_AC_railway_electrification three phase AC electrification] || E&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; | &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|D ||DC catenary electrification || E&lt;br /&gt;
|-&lt;br /&gt;
|d ||low voltage DC catenary electrification (only when D also used in set) || First A then E&lt;br /&gt;
|-&lt;br /&gt;
|A ||AC catenary electrification || E&lt;br /&gt;
|-&lt;br /&gt;
|a ||low voltage AC catenary electrification (only when A also used in set) || First A then E&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you want multi-voltage/current vehicles in your set (i.e. a train that can run on both AC and DC current), you have to define a dedicated railtype for those vehicles. Without the railtype, it&#039;s not possible to define vehicles with this property. If you only have vehicles that can run on either one type of voltage/current or on all types of voltage/current (e.g. a 2-system if you only have &#039;&#039;&#039;A&#039;&#039;&#039; and &#039;&#039;&#039;D&#039;&#039;&#039; tracks, or a 4-system in case of all &#039;&#039;&#039;A&#039;&#039;&#039;, &#039;&#039;&#039;a&#039;&#039;&#039;, &#039;&#039;&#039;D&#039;&#039;&#039; and &#039;&#039;&#039;d&#039;&#039;&#039;), then use the generic class &#039;&#039;&#039;E&#039;&#039;&#039; for vehicles that should be able to run on all different voltage/currents. Also the track set needs to have one at least one railtype with class &#039;&#039;&#039;E&#039;&#039;&#039; defined.&lt;br /&gt;
&lt;br /&gt;
Note that if you want more than one type of multi-voltage/current, you&#039;ll quickly get a combinatory explosion of railtype labels, so plan carefully or do not attempt it. For every different multi-voltage/current vehicle type a dedicated railtype is needed. If you want all possible combinations, then you need to define an additional 8 classes. It is not recommended to make your train/track set this complicated.&lt;br /&gt;
&lt;br /&gt;
Example approach for a 4-system set, with trains that can run on either one or all systems:&lt;br /&gt;
* &#039;&#039;&#039;E&#039;&#039;&#039;: generic catenary-powered electric engines. &amp;quot;universal&amp;quot; [4-system] if any of &#039;&#039;&#039;D&#039;&#039;&#039;/&#039;&#039;&#039;d&#039;&#039;&#039;/&#039;&#039;&#039;A&#039;&#039;&#039;/&#039;&#039;&#039;a&#039;&#039;&#039; are defined.&lt;br /&gt;
* &#039;&#039;&#039;A&#039;&#039;&#039;: generic AC catenary electric engines. 25kV only if &#039;&#039;&#039;a&#039;&#039;&#039; also defined. Vehicle sets should use &#039;&#039;&#039;E&#039;&#039;&#039; as fallback, if defining an engine for &#039;&#039;&#039;A&#039;&#039;&#039;;&lt;br /&gt;
* &#039;&#039;&#039;a&#039;&#039;&#039;: 15kV AC catenary electric engines. Only defined if &#039;&#039;&#039;A&#039;&#039;&#039; also defined. Vehicle sets should use &#039;&#039;&#039;A&#039;&#039;&#039; and &#039;&#039;&#039;E&#039;&#039;&#039; as fallback, if defining an engine for &#039;&#039;&#039;a&#039;&#039;&#039;;&lt;br /&gt;
* &#039;&#039;&#039;D&#039;&#039;&#039;: generic DC catenary electric engines. 3kV if &#039;&#039;&#039;d&#039;&#039;&#039; also defined. Vehicle sets should use &#039;&#039;&#039;E&#039;&#039;&#039; as fallback, if defining an engine for &#039;&#039;&#039;D&#039;&#039;&#039;;&lt;br /&gt;
* &#039;&#039;&#039;d&#039;&#039;&#039;: 1.5kV DC catenary electric engines. Only defined if &#039;&#039;&#039;D&#039;&#039;&#039; also defined. Vehicle sets should use &#039;&#039;&#039;D&#039;&#039;&#039; and &#039;&#039;&#039;E&#039;&#039;&#039; as fallback, if defining an engine for &#039;&#039;&#039;d&#039;&#039;&#039;.&lt;br /&gt;
For a 2-system set, you can simply drop &#039;&#039;&#039;a&#039;&#039;&#039; and &#039;&#039;&#039;d&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Standard labels: RAIL, ELRL, MONO, MGLV ===&lt;br /&gt;
It&#039;s not possible to undefine the standard railtypes RAIL, ELRL, MONO and MGLV. The game will always add those if there are vehicles defined for these track types. As a result, for a track set it&#039;s best not to ignore those standard labels, but rather work with them and define them in the set. If your track set does not have monorail or maglev tracks, there of course is no need to define those. But if your track set defines anything that resembles unelectrified or electrified rail, you should use the RAIL and ELRL labels. Matching labels from the above scheme will then be defined in property [[Action0/Railtypes#Alternate_rail_type_labels_.281D.29|1D (NFO)]] or [[NML:Railtypes#Railtype_properties|alternative_railtype_list (NML)]].&lt;br /&gt;
&lt;br /&gt;
As vehicles from NewGRFs that do not use explicit railtypes will end up on these standard railtypes, you should use RAIL instead of whatever type could be regarded as the most commonly used unelectrified type, ELRL instead of the most commonly used electrified type and so on. The label according to this scheme is then set as an alternate.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Summary for track sets ==&lt;br /&gt;
This section summarizes the above for track sets.&lt;br /&gt;
&lt;br /&gt;
; [X***] Track gauge and type class&lt;br /&gt;
* Define at least one track type for every track gauge/type class you want in your set.&lt;br /&gt;
* If you only provide tracks for one gauge/type, consider leaving some free railtypes so a player can load an additional set for some other type.&lt;br /&gt;
; [*X**] Speed limit class&lt;br /&gt;
* Make sure class A is always available, either directly or via an alternate label.&lt;br /&gt;
* Use only class A if you don&#039;t want speed limits;&lt;br /&gt;
* With speed limits, A is the lowest speed limit. Continue with B, C, etc. for increasing speed limits;&lt;br /&gt;
* The speed class can also be used to implement additional eye-candy track types, use letters higher in the alphabet for this.&lt;br /&gt;
; [**X*] Axle load class&lt;br /&gt;
* Always define all classes A through E for every track type class / electrification combination, either:&lt;br /&gt;
** Directly via a real railtype definition;&lt;br /&gt;
** Indirectly via the alternate rail type label list, property [[Action0/Railtypes#Alternate_rail_type_labels_.281D.29|1D (NFO)]] or [[NML:Railtypes#Railtype_properties|alternative_railtype_list (NML)]].&lt;br /&gt;
* Extend the predefined classes only if you also provide a train set that makes use of these.&lt;br /&gt;
; [***X] Energy source type class&lt;br /&gt;
* If your set only uses specialized classes, always map the generic classes to the closest matching specialized type via property 1D.&lt;br /&gt;
; Standard labels [RAIL, ELRL, MONO, MGLV]&lt;br /&gt;
* Always define the standard labels when possible, instead of what would be the equivalent of the standard label in this scheme.&lt;br /&gt;
* Map the equivalent labels from this scheme to the standard labels using property [[Action0/Railtypes#Alternate_rail_type_labels_.281D.29|1D (NFO)]] or [[NML:Railtypes#Railtype_properties|alternative_railtype_list (NML)]].&lt;br /&gt;
&lt;br /&gt;
Or, put differently, for each gauge/type, select one or more energy source types. For each type/energy combination provide all axle load classes for the speed class &amp;quot;A&amp;quot;, either as a real type or as an alternate of another type. Provide more types with a different speed letter if you want to provide several different speeds or other eye-candy tracks.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Summary for train sets ==&lt;br /&gt;
This section summarizes the above for train sets.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
; [X***] Track gauge and type class&lt;br /&gt;
* Use the track type class that matches the vehicle;&lt;br /&gt;
* Define a fallback type via the railtype table in case you want the vehicle to be available on a different track if no matching track set is loaded.&lt;br /&gt;
** Specialized subtypes like &amp;quot;n&amp;quot; might not always be available. If you want those vehicles to be still available then, fall back the the generic class (e.g. &amp;quot;N&amp;quot;).&lt;br /&gt;
; [*X**] Speed limit class &lt;br /&gt;
* Always use class A for every vehicle.&lt;br /&gt;
; [**X*] Axle load class&lt;br /&gt;
* Use all classes A through E according to the maximum axle weight of the vehicle.&lt;br /&gt;
* Extend the predefined classes only if you also provide a track set that makes use of these;&lt;br /&gt;
** When extending the predefined classes A through E, define a fallback type via the railtype table in case you want the vehicle to be available if no matching track set is loaded.&lt;br /&gt;
; [***X] Energy source type class&lt;br /&gt;
* Use the energy source type class that matches the vehicle;&lt;br /&gt;
* When using specialized classes, define a fallback type via the railtype table in case you want the vehicle to be available if no matching track set is loaded.&lt;br /&gt;
; Standard labels [RAIL, ELRL, MONO, MGLV]&lt;br /&gt;
* Define a fallback type to the standard labels via the railtype table in case you want the vehicle to be available on the standard tracks if no matching track set is loaded.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Be as specific as you want when selecting the railtype, it is the job of the track set to select a playable, reduced subset out of all possible type combinations.&lt;br /&gt;
&lt;br /&gt;
== In case you&#039;re not convinced by this scheme ==&lt;br /&gt;
Adopting this scheme gives the player freedom to use any track set in combination with any train set that follow the scheme. &lt;br /&gt;
&lt;br /&gt;
This means that you can make your train set compatible with track sets that provide axle load classes, and track sets that provide speed limits, and at the same time with track sets that provide none of this. This way, the player can decide to play with or without axle load classes, or with or without speed limits, simply by loading a track set that does or does not provide these features.&lt;br /&gt;
&lt;br /&gt;
And for your track set, it means that you can make it as simple or as complicated as you want (within the 64 track type limit), while not having to worry about compatibility with train sets.&lt;br /&gt;
&lt;br /&gt;
Still not convinced? Feel free to use railtype labels of your own, but know that you will likely come to regret that at some point in the future.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Forum topic==&lt;br /&gt;
If you want to discuss the standardized railtype scheme or have any questions about it, you can visit [http://www.tt-forums.net/viewtopic.php?t=59379 the forum topic].&lt;br /&gt;
&lt;br /&gt;
==Extensions and best practice==&lt;br /&gt;
See [https://newgrf-specs.tt-wiki.net/wiki/Standardized_Railtype_Scheme_extensions Standardized Railtype Scheme extensions]&lt;/div&gt;</summary>
		<author><name>Michi cc</name></author>
	</entry>
	<entry>
		<id>https://newgrf-specs.tt-wiki.net/index.php?title=Standardized_Railtype_Scheme&amp;diff=5060</id>
		<title>Standardized Railtype Scheme</title>
		<link rel="alternate" type="text/html" href="https://newgrf-specs.tt-wiki.net/index.php?title=Standardized_Railtype_Scheme&amp;diff=5060"/>
		<updated>2025-06-12T13:44:44Z</updated>

		<summary type="html">&lt;p&gt;Michi cc: /* Axle load class [**X*] */ Improve guidance and remove useless table.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This railtype label scheme aims to bring order to the uncontrolled growth of railtype labels. It groups the rail types into what matters from a technical perspective. The scheme provides a standardized way of defining railtype labels, based on track gauge and type, speed class, allowable axle weight and electrification type.&lt;br /&gt;
&lt;br /&gt;
It is the explicit intent of this scheme to decouple track sets from vehicle sets to facilitate easy mixing. This way the player can select a track set of choice to go with a train set of choice. It allows the player to play with or without axle load classes, or with or without speed limit classes, simply by loading a track set that does or does not provide these features. In some cases it will also be possible to combine niche track sets, for instance a standard gauge track set with a narrow gauge and a metro track set.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== The Label Scheme ==&lt;br /&gt;
A railtype label consists of four characters. In this scheme, each position has a different purpose:&lt;br /&gt;
# Track gauge and type class (e.g. standard gauge rail, narrow gauge rail, monorail)&lt;br /&gt;
# Speed limit class&lt;br /&gt;
# Axle load class (maximum allowed axle weight for this track)&lt;br /&gt;
# Energy source type class&lt;br /&gt;
&lt;br /&gt;
In the next sections, each of the four positions will be explained.&lt;br /&gt;
&lt;br /&gt;
=== Track gauge and type class [X***] ===&lt;br /&gt;
The first position in the railtype label defines track gauge and/or track type class. The following classes are currently defined:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! !!Track type/gauge&lt;br /&gt;
|- &lt;br /&gt;
|S ||Standard gauge rail&lt;br /&gt;
|-&lt;br /&gt;
|B ||Broad gauge rail &lt;br /&gt;
|-&lt;br /&gt;
|N ||Narrow gauge rail&lt;br /&gt;
|-&lt;br /&gt;
|n ||Secondary narrow gauge rail (e.g. when providing both metre and cape gauge, always use N in case of just one type of narrow gauge)&lt;br /&gt;
|-&lt;br /&gt;
|D ||Dual gauge rail, standard/broad gauge&lt;br /&gt;
|-&lt;br /&gt;
|d ||Dual gauge rail, standard/narrow gauge&lt;br /&gt;
|-&lt;br /&gt;
|M ||Monorail&lt;br /&gt;
|-&lt;br /&gt;
|L ||Magnetic Levitation&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Speed limit class [*X**] ===&lt;br /&gt;
The second position in the railtype label defines the speed limit class. These classes do not map to a fixed numeric value, but are used to define an internal speed limit order for the track set. This means that if your track set has two different speed limits for track types that are otherwise identical, you&#039;ll use letters A and B here. In case of three different speed limits, use A, B and C. In case your track set does not employ speed limits, always use A. Train sets do not care about the speed limit, and will always set the lowest speed class, i.e. A.&lt;br /&gt;
&lt;br /&gt;
This gives for instance the following options:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:left;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:left;&amp;quot;&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
! !!Speed limit class&lt;br /&gt;
|- &lt;br /&gt;
|A ||no speed limits&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:left;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;OR&amp;amp;nbsp;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:left;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:left;&amp;quot;&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
! !!Speed limit class&lt;br /&gt;
|- &lt;br /&gt;
|A ||low speed&lt;br /&gt;
|-&lt;br /&gt;
|B ||high speed&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:left;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;OR&amp;amp;nbsp;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:left;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:left;&amp;quot;&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
! !!Speed limit class&lt;br /&gt;
|- &lt;br /&gt;
|A ||low speed&lt;br /&gt;
|-&lt;br /&gt;
|B ||medium speed&lt;br /&gt;
|-&lt;br /&gt;
|C ||high speed&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:left;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;etc.&amp;amp;nbsp;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:left;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The speed limit class may also be used for some advanced features of the label scheme, like specialized track types and eyecandy purposes. Be careful not to break the compatibility with other sets when using the speed limit class for these purposes.&lt;br /&gt;
&lt;br /&gt;
An example of a special use is rack rail. In the French set it is used to give rack rail engines a higher speed and TE than normal rail engines when used on rack rail. When defining trains with a special speed limit class, always allow a fallback to speed limit class A via the railtype table.&lt;br /&gt;
&lt;br /&gt;
An example of eyecandy use are urban tracks. These are a variation of regular tracks, but with concrete ground tiles to better match the urban environment. Train sets must not define vehicles for eyecandy classes. If you think you have special vehicles that should only run on the eyecandy class, it is &#039;&#039;not&#039;&#039; eyecandy but a separate track gauge/type.&lt;br /&gt;
&lt;br /&gt;
The following special and eyecandy classes have been defined so far:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! !!Description !!Type !!Used by&lt;br /&gt;
|- &lt;br /&gt;
|A-H ||speed limits ||colspan=&amp;quot;2&amp;quot;| reserved&lt;br /&gt;
|- &lt;br /&gt;
|R ||rack rail, that allows rack-equipped vehicle to not slow down going uphill ||special ||French Set Rails&lt;br /&gt;
|- &lt;br /&gt;
|S ||subterranean ||eyecandy ||Metro Track Set&lt;br /&gt;
|- &lt;br /&gt;
|U ||urban ||eyecandy ||Metro Track Set&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Axle load class [**X*] ===&lt;br /&gt;
The third position defines the axle weight limit. Heavy trains cannot run on tracks with a low axle weight limit; these trains need more expensive tracks with a higher weight limit. There are five axle load classes &#039;&#039;&#039;A&#039;&#039;&#039; through &#039;&#039;&#039;E&#039;&#039;&#039;. &#039;&#039;&#039;A&#039;&#039;&#039; is for the lowest axle load limit, &#039;&#039;&#039;E&#039;&#039;&#039; for the highest. The exact axle load attached to each class is relative to the track gauge/type and trains in the set. &lt;br /&gt;
&lt;br /&gt;
A train set should set the appropriate axle weight for each train via the railtype label, as to make the set work with track sets that do provide tracks with different weight limits, even if you don&#039;t care about it for your trainset. Ideally, all five standard axle load classes should be used, but a train set may use only some weight classes, as the vehicle rooster might not make it feasible to use all five. The group with the lowest axle weights will get class &#039;&#039;&#039;A&#039;&#039;&#039;, the second lowest class &#039;&#039;&#039;B&#039;&#039;&#039;, etc. up to the group with the highest axle weights which will get class &#039;&#039;&#039;E&#039;&#039;&#039;. If you do not use all classes, try to spread the classes out (don&#039;t use &#039;&#039;&#039;A&#039;&#039;&#039; and &#039;&#039;&#039;B&#039;&#039;&#039; for two classes, but e.g. &#039;&#039;&#039;B&#039;&#039;&#039; and &#039;&#039;&#039;D&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
A track set does not have to provide a dedicated track type for each axle weight limit. A track set that does not provide a dedicated track for each axle load class, must make sure to map all undefined axle load classes to a real railtype using property [[Action0/Railtypes#Alternate_rail_type_labels_.281D.29|1D (NFO)]] or [[NML:Railtypes#Railtype_properties|alternative_railtype_list (NML)]]. This way a train set can rely on all labels for all axle load classes being available. Example: if you only want to provide 2 axle load classes for standard gauge unelectrified with no speed limits, you can map SA&#039;&#039;&#039;A&#039;&#039;&#039;N + SA&#039;&#039;&#039;B&#039;&#039;&#039;N to SA&#039;&#039;&#039;C&#039;&#039;&#039;N and SA&#039;&#039;&#039;D&#039;&#039;&#039;N to SA&#039;&#039;&#039;E&#039;&#039;&#039;N if the cost difference between the two railtypes is high, or SA&#039;&#039;&#039;A&#039;&#039;&#039;N to SA&#039;&#039;&#039;B&#039;&#039;&#039;N and SA&#039;&#039;&#039;C&#039;&#039;&#039;N + SA&#039;&#039;&#039;D&#039;&#039;&#039;N to SA&#039;&#039;&#039;E&#039;&#039;&#039;N if the cost difference is low.&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t want to provide any axle load classes in your track set, it doesn&#039;t really matter what axle load class you choose for the track, as you&#039;ll be mapping all other classes to this track anyways. But the lowest or highest class are the obvious choice. Example: if your track set only provides narrow gauge unelectrified track with no speed limits and no axle load limits, you may use NA&#039;&#039;&#039;A&#039;&#039;&#039;N for the track label, and provide NA&#039;&#039;&#039;B&#039;&#039;&#039;N, NA&#039;&#039;&#039;C&#039;&#039;&#039;N, NA&#039;&#039;&#039;D&#039;&#039;&#039;N, NA&#039;&#039;&#039;E&#039;&#039;&#039;N in property [[Action0/Railtypes#Alternate_rail_type_labels_.281D.29|1D (NFO)]] or [[NML:Railtypes#Railtype_properties|alternative_railtype_list (NML)]].&lt;br /&gt;
&lt;br /&gt;
If you need more than five axle load class, you may use lowercase letters for very low axle loads and continue the uppercase letters for very high axle loads. Be advised that your train set may not assume the existence of any other class than &#039;&#039;&#039;A&#039;&#039;&#039; through &#039;&#039;&#039;E&#039;&#039;&#039;, so think about providing appropriate fallbacks in your railtype table. If you make a track set with an extended range, be aware that not all train sets will define trains for these tracks. In general: only do this in case of a train set with a matching track set.&lt;br /&gt;
&lt;br /&gt;
For the lowercase letters, &#039;&#039;&#039;b&#039;&#039;&#039; is lower than &#039;&#039;&#039;a&#039;&#039;&#039;, so for increasing axle load limits: b &amp;lt; a &amp;lt; A &amp;lt; B &amp;lt; C etc.&lt;br /&gt;
&lt;br /&gt;
Note that the axle load classes never map to a specific weight in tonnes. For that reason it does not make sense to add a numeric value for the axle load to the name of a track type or in the extended purchase info of a train. Instead use the relative expressions &#039;very low&#039;, &#039;low&#039;, &#039;medium&#039;, &#039;high&#039; and &#039;very high&#039; or use the class letters directly.&lt;br /&gt;
&lt;br /&gt;
=== Energy source type class [***X] ===&lt;br /&gt;
The last position defines the energy source type class. This is split in generic energy source types like overhead wires and third rail and specialized types like alternating and direct current.&lt;br /&gt;
&lt;br /&gt;
A track set that only uses specialized types, should map the generic types to the most suitable specialized type in the set.&lt;br /&gt;
&lt;br /&gt;
A vehicle set that uses specialized types should define a generic type as fallback, via the railtype table. If such a fallback is omitted, please note that certain vehicles may be unavailable depending on track set loaded.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! !!Generic energy type classes&lt;br /&gt;
|-&lt;br /&gt;
|N ||no electrification&lt;br /&gt;
|-&lt;br /&gt;
|E ||overhead wires/catenary electrification&lt;br /&gt;
|-&lt;br /&gt;
|3 ||3rd rail electrification&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! !!Specialized energy type classes !!Vehicle set fallback&lt;br /&gt;
|-&lt;br /&gt;
|Z ||3rd rail and catenary electrification || 3 or E&lt;br /&gt;
|-&lt;br /&gt;
|4 ||4th rail electrification || 3&lt;br /&gt;
|-&lt;br /&gt;
|Y ||4th rail and catenary electrification || 4 or E&lt;br /&gt;
|-&lt;br /&gt;
|T ||[http://en.wikipedia.org/wiki/Three-phase_AC_railway_electrification three phase AC electrification] || E&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; | &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|D ||DC catenary electrification || E&lt;br /&gt;
|-&lt;br /&gt;
|d ||low voltage DC catenary electrification (only when D also used in set) || First A then E&lt;br /&gt;
|-&lt;br /&gt;
|A ||AC catenary electrification || E&lt;br /&gt;
|-&lt;br /&gt;
|a ||low voltage AC catenary electrification (only when A also used in set) || First A then E&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you want multi-voltage/current vehicles in your set (i.e. a train that can run on both AC and DC current), you have to define a dedicated railtype for those vehicles. Without the railtype, it&#039;s not possible to define vehicles with this property. If you only have vehicles that can run on either one type of voltage/current or on all types of voltage/current (e.g. a 2-system if you only have &#039;&#039;&#039;A&#039;&#039;&#039; and &#039;&#039;&#039;D&#039;&#039;&#039; tracks, or a 4-system in case of all &#039;&#039;&#039;A&#039;&#039;&#039;, &#039;&#039;&#039;a&#039;&#039;&#039;, &#039;&#039;&#039;D&#039;&#039;&#039; and &#039;&#039;&#039;d&#039;&#039;&#039;), then use the generic class &#039;&#039;&#039;E&#039;&#039;&#039; for vehicles that should be able to run on all different voltage/currents. Also the track set needs to have one at least one railtype with class &#039;&#039;&#039;E&#039;&#039;&#039; defined.&lt;br /&gt;
&lt;br /&gt;
Note that if you want more than one type of multi-voltage/current, you&#039;ll quickly get a combinatory explosion of railtype labels, so plan carefully or do not attempt it. For every different multi-voltage/current vehicle type a dedicated railtype is needed. If you want all possible combinations, then you need to define an additional 8 classes. It is not recommended to make your train/track set this complicated.&lt;br /&gt;
&lt;br /&gt;
Example approach for a 4-system set, with trains that can run on either one or all systems:&lt;br /&gt;
* &#039;&#039;&#039;E&#039;&#039;&#039;: generic catenary-powered electric engines. &amp;quot;universal&amp;quot; [4-system] if any of &#039;&#039;&#039;D&#039;&#039;&#039;/&#039;&#039;&#039;d&#039;&#039;&#039;/&#039;&#039;&#039;A&#039;&#039;&#039;/&#039;&#039;&#039;a&#039;&#039;&#039; are defined.&lt;br /&gt;
* &#039;&#039;&#039;A&#039;&#039;&#039;: generic AC catenary electric engines. 25kV only if &#039;&#039;&#039;a&#039;&#039;&#039; also defined. Vehicle sets should use &#039;&#039;&#039;E&#039;&#039;&#039; as fallback, if defining an engine for &#039;&#039;&#039;A&#039;&#039;&#039;;&lt;br /&gt;
* &#039;&#039;&#039;a&#039;&#039;&#039;: 15kV AC catenary electric engines. Only defined if &#039;&#039;&#039;A&#039;&#039;&#039; also defined. Vehicle sets should use &#039;&#039;&#039;A&#039;&#039;&#039; and &#039;&#039;&#039;E&#039;&#039;&#039; as fallback, if defining an engine for &#039;&#039;&#039;a&#039;&#039;&#039;;&lt;br /&gt;
* &#039;&#039;&#039;D&#039;&#039;&#039;: generic DC catenary electric engines. 3kV if &#039;&#039;&#039;d&#039;&#039;&#039; also defined. Vehicle sets should use &#039;&#039;&#039;E&#039;&#039;&#039; as fallback, if defining an engine for &#039;&#039;&#039;D&#039;&#039;&#039;;&lt;br /&gt;
* &#039;&#039;&#039;d&#039;&#039;&#039;: 1.5kV DC catenary electric engines. Only defined if &#039;&#039;&#039;D&#039;&#039;&#039; also defined. Vehicle sets should use &#039;&#039;&#039;D&#039;&#039;&#039; and &#039;&#039;&#039;E&#039;&#039;&#039; as fallback, if defining an engine for &#039;&#039;&#039;d&#039;&#039;&#039;.&lt;br /&gt;
For a 2-system set, you can simply drop &#039;&#039;&#039;a&#039;&#039;&#039; and &#039;&#039;&#039;d&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Standard labels: RAIL, ELRL, MONO, MGLV ===&lt;br /&gt;
It&#039;s not possible to undefine the standard railtypes RAIL, ELRL, MONO and MGLV. The game will always add those if there are vehicles defined for these track types. As a result, for a track set it&#039;s best not to ignore those standard labels, but rather work with them and define them in the set. If your track set does not have monorail or maglev tracks, there of course is no need to define those. But if your track set defines anything that resembles unelectrified or electrified rail, you should use the RAIL and ELRL labels. Matching labels from the above scheme will then be defined in property [[Action0/Railtypes#Alternate_rail_type_labels_.281D.29|1D (NFO)]] or [[NML:Railtypes#Railtype_properties|alternative_railtype_list (NML)]].&lt;br /&gt;
&lt;br /&gt;
As vehicles from NewGRFs that do not use explicit railtypes will end up on these standard railtypes, you should use RAIL instead of whatever type could be regarded as the most commonly used unelectrified type, ELRL instead of the most commonly used electrified type and so on. The label according to this scheme is then set as an alternate.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Summary for track sets ==&lt;br /&gt;
This section summarizes the above for track sets.&lt;br /&gt;
&lt;br /&gt;
; [X***] Track gauge and type class&lt;br /&gt;
* Define at least one track type for every track gauge/type class you want in your set.&lt;br /&gt;
* If you only provide tracks for one gauge/type, consider leaving some free railtypes so a player can load an additional set for some other type.&lt;br /&gt;
; [*X**] Speed limit class&lt;br /&gt;
* Make sure class A is always available, either directly or via an alternate label.&lt;br /&gt;
* Use only class A if you don&#039;t want speed limits;&lt;br /&gt;
* With speed limits, A is the lowest speed limit. Continue with B, C, etc. for increasing speed limits;&lt;br /&gt;
* The speed class can also be used to implement additional eye-candy track types, use letters higher in the alphabet for this.&lt;br /&gt;
; [**X*] Axle load class&lt;br /&gt;
* Always define all classes A through E for every track type class / electrification combination, either:&lt;br /&gt;
** Directly via a real railtype definition;&lt;br /&gt;
** Indirectly via the alternate rail type label list, property [[Action0/Railtypes#Alternate_rail_type_labels_.281D.29|1D (NFO)]] or [[NML:Railtypes#Railtype_properties|alternative_railtype_list (NML)]].&lt;br /&gt;
* Extend the predefined classes only if you also provide a train set that makes use of these.&lt;br /&gt;
; [***X] Energy source type class&lt;br /&gt;
* If your set only uses specialized classes, always map the generic classes to the closest matching specialized type via property 1D.&lt;br /&gt;
; Standard labels [RAIL, ELRL, MONO, MGLV]&lt;br /&gt;
* Always define the standard labels when possible, instead of what would be the equivalent of the standard label in this scheme.&lt;br /&gt;
* Map the equivalent labels from this scheme to the standard labels using property [[Action0/Railtypes#Alternate_rail_type_labels_.281D.29|1D (NFO)]] or [[NML:Railtypes#Railtype_properties|alternative_railtype_list (NML)]].&lt;br /&gt;
&lt;br /&gt;
Or, put differently, for each gauge/type, select one or more energy source types. For each type/energy combination provide all axle load classes for the speed class &amp;quot;A&amp;quot;, either as a real type or as an alternate of another type. Provide more types with a different speed letter if you want to provide several different speeds or other eye-candy tracks.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Summary for train sets ==&lt;br /&gt;
This section summarizes the above for train sets.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
; [X***] Track gauge and type class&lt;br /&gt;
* Use the track type class that matches the vehicle;&lt;br /&gt;
* Define a fallback type via the railtype table in case you want the vehicle to be available on a different track if no matching track set is loaded.&lt;br /&gt;
** Specialized subtypes like &amp;quot;n&amp;quot; might not always be available. If you want those vehicles to be still available then, fall back the the generic class (e.g. &amp;quot;N&amp;quot;).&lt;br /&gt;
; [*X**] Speed limit class &lt;br /&gt;
* Always use class A for every vehicle.&lt;br /&gt;
; [**X*] Axle load class&lt;br /&gt;
* Use all classes A through E according to the maximum axle weight of the vehicle.&lt;br /&gt;
* Extend the predefined classes only if you also provide a track set that makes use of these;&lt;br /&gt;
** When extending the predefined classes A through E, define a fallback type via the railtype table in case you want the vehicle to be available if no matching track set is loaded.&lt;br /&gt;
; [***X] Energy source type class&lt;br /&gt;
* Use the energy source type class that matches the vehicle;&lt;br /&gt;
* When using specialized classes, define a fallback type via the railtype table in case you want the vehicle to be available if no matching track set is loaded.&lt;br /&gt;
; Standard labels [RAIL, ELRL, MONO, MGLV]&lt;br /&gt;
* Define a fallback type to the standard labels via the railtype table in case you want the vehicle to be available on the standard tracks if no matching track set is loaded.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Be as specific as you want when selecting the railtype, it is the job of the track set to select a playable, reduced subset out of all possible type combinations.&lt;br /&gt;
&lt;br /&gt;
== In case you&#039;re not convinced by this scheme ==&lt;br /&gt;
Adopting this scheme gives the player freedom to use any track set in combination with any train set that follow the scheme. &lt;br /&gt;
&lt;br /&gt;
This means that you can make your train set compatible with track sets that provide axle load classes, and track sets that provide speed limits, and at the same time with track sets that provide none of this. This way, the player can decide to play with or without axle load classes, or with or without speed limits, simply by loading a track set that does or does not provide these features.&lt;br /&gt;
&lt;br /&gt;
And for your track set, it means that you can make it as simple or as complicated as you want (within the 64 track type limit), while not having to worry about compatibility with train sets.&lt;br /&gt;
&lt;br /&gt;
Still not convinced? Feel free to use railtype labels of your own, but know that you will likely come to regret that at some point in the future.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Forum topic==&lt;br /&gt;
If you want to discuss the standardized railtype scheme or have any questions about it, you can visit [http://www.tt-forums.net/viewtopic.php?t=59379 the forum topic].&lt;br /&gt;
&lt;br /&gt;
==Extensions and best practice==&lt;br /&gt;
See [https://newgrf-specs.tt-wiki.net/wiki/Standardized_Railtype_Scheme_extensions Standardized Railtype Scheme extensions]&lt;/div&gt;</summary>
		<author><name>Michi cc</name></author>
	</entry>
	<entry>
		<id>https://newgrf-specs.tt-wiki.net/index.php?title=Version_numbers&amp;diff=4916</id>
		<title>Version numbers</title>
		<link rel="alternate" type="text/html" href="https://newgrf-specs.tt-wiki.net/index.php?title=Version_numbers&amp;diff=4916"/>
		<updated>2025-01-11T14:52:19Z</updated>

		<summary type="html">&lt;p&gt;Michi cc: /* NFO version */ Fix NFO doc linkl.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;There are various version numbers involved in these NewGRF specs. This page clarifies the terms for version numbers.&lt;br /&gt;
&lt;br /&gt;
== Version of a specific NewGRF ==&lt;br /&gt;
{{ottdp|1.1|no}}&lt;br /&gt;
&lt;br /&gt;
The version number of a specific NewGRF distinguishes releases of the same NewGRF and defines which release is &amp;quot;newer&amp;quot; or &amp;quot;older&amp;quot;.&lt;br /&gt;
This has no effect on the NewGRF specs or general behaviour of the NewGRF.&lt;br /&gt;
A NewGRF defines its version using [[Action14#GRF_version_.28.22INFO.22_-.3E_.22VRSN.22.29|Action 14]],&lt;br /&gt;
it can also define a [[Action14#Minimal_compatible_GRF_version_.28.22INFO.22_-.3E_.22MINV.22.29|minimum version]] to which it is savegame compatible.&lt;br /&gt;
&lt;br /&gt;
Before the introduction of Action14 - and version numbers in it - NewGRFs used to change the GRFID in case of savegame-incompatibility.&lt;br /&gt;
However, this was not done consistently by NewGRF authors, esp. since it caused problems in other places (e.g. NewGRFs testing for other NewGRFs).&lt;br /&gt;
&lt;br /&gt;
== GRF version ==&lt;br /&gt;
&lt;br /&gt;
The GRF version defines the version of the NewGRF specs to which a NewGRF adheres.&lt;br /&gt;
Changing the GRF version of a GRF is likely to affect the operativity of a NewGRF as it might change the behaviour of various NewGRF features.&lt;br /&gt;
&lt;br /&gt;
Throughout the specs the dependencies and changes between GRF versions are indicated using the {{grf|}} icon.&lt;br /&gt;
&lt;br /&gt;
A NewGRF defines the version of the specs it adheres to within its [[Action8]].&lt;br /&gt;
&lt;br /&gt;
=== GRF version 0 and 1 ===&lt;br /&gt;
{{ottdp|no|no}}&lt;br /&gt;
&lt;br /&gt;
These GRF versions are from the alpha and beta days of NewGRFs in general.&lt;br /&gt;
Especially version 1 introduced [[Action8]] which allows a NewGRF to specify the GRF version it adheres to.&lt;br /&gt;
GRF version 2 concurs with TTDPatch 2.0, the first stable version of TTDPatch supporting NewGRFs. It comes along with a hard compatibility cut in NewGRFs:&lt;br /&gt;
TTDPatch 2.0 is the first version to support GRF version 2, while it removes support for version 0 and 1 at the same time (which implies making Action 8 mandatory).&lt;br /&gt;
&lt;br /&gt;
During the development of the GRF specs various features were designed, implemented and redesigned again. As such GRF version 2 is the first stable version of the specs.&lt;br /&gt;
&lt;br /&gt;
=== GRF version 2 to 6 ===&lt;br /&gt;
{{ottdp|0.6|2.0}}&lt;br /&gt;
&lt;br /&gt;
These GRF versions were introduced at somewhat arbitrary spots of TTDPatch development to allow NewGRFs to specify requirements for newer GRF features.&lt;br /&gt;
Later this approach of versioning the specs was dropped. Instead NewGRFs can now read and test the TTDPatch / OpenTTD version in [[Action9]] and disable themself using [[ActionB]] with an appropiate error message.&lt;br /&gt;
&lt;br /&gt;
=== GRF version 7 ===&lt;br /&gt;
{{ottdp|0.6|2.5}}&lt;br /&gt;
&lt;br /&gt;
GRF version 7 makes various semantic changes to various NewGRF features. The same code can be valid for both version 6 and 7, but will have a different meaning.&lt;br /&gt;
Most notable changes are:&lt;br /&gt;
* Language codes in [[Action4]] were completely redesigned.&lt;br /&gt;
* Various callbacks, properties and variables use cargobits instead of cargoslots.&lt;br /&gt;
The changes are described in detail on the pages for the features they affect.&lt;br /&gt;
&lt;br /&gt;
=== GRF version 8 ===&lt;br /&gt;
{{ottdp|1.2|no}}&lt;br /&gt;
&lt;br /&gt;
GRF version 8 again makes various semantic changes to various NewGRF features.&lt;br /&gt;
Most notable changes are:&lt;br /&gt;
* Various compatibility layers within the specs were removed to simplify writing NewGRFs resp. to remove arbitrary restrictions.&lt;br /&gt;
: E.g. the special meaning of 0xFF?? callback results was removed. Also all callbacks are 15bit callbacks now.&lt;br /&gt;
* All remnants of cargoslots were removed. (Except for the cargo definition itself of course.)&lt;br /&gt;
* Various parts of the specs were clarified, various callbacks which allowed various results with the same meaning before now only allow definite values for every possible result, while the other values stay reserved.&lt;br /&gt;
: E.g. callbacks results which were previously only tested for zero or non-zero must now return a specific value 0 or 1.&lt;br /&gt;
* All &amp;quot;height&amp;quot; variables were revised to better distinguish height in heightlevels or in pixels. This is a preparation for the introduction of more than 16 heightlevels.&lt;br /&gt;
&lt;br /&gt;
== GRF container version ==&lt;br /&gt;
&lt;br /&gt;
The GRF container format is the binary format of the GRF file. While the GRF version controls the meaning of the content of a NewGRF, the&lt;br /&gt;
GRF container version specifies the storage format for it. As such this version affects the software which reads/writes NewGRFs like grfcodec, nml, and of course also&lt;br /&gt;
OpenTTD and TTDPatch.&lt;br /&gt;
&lt;br /&gt;
The GRF container format is specified in the [https://raw.githubusercontent.com/OpenTTD/grfcodec/refs/heads/master/docs/grf.txt grfcodec documentation].&lt;br /&gt;
&lt;br /&gt;
=== GRF container version 1 ===&lt;br /&gt;
{{ottdp|0.6|2.0}}&lt;br /&gt;
&lt;br /&gt;
This is the traditional file format from TTD.&lt;br /&gt;
&lt;br /&gt;
=== GRF container version 2 ===&lt;br /&gt;
{{ottdp|1.2|no}}&lt;br /&gt;
&lt;br /&gt;
This is a new file format introduced in GRFCodec 6.0. Implementations which only know GRF container version 1 will consider GRFs with this version empty / invalid.&lt;br /&gt;
&lt;br /&gt;
New features in this version are:&lt;br /&gt;
* Pseudosprites (and binary include sprites) can be bigger than 64KB.&lt;br /&gt;
* Realsprites can be higher than 255 pixels.&lt;br /&gt;
* Realsprites can contain various versions of the same sprite in different zoom levels and colour depths (8bpp/32bpp).&lt;br /&gt;
&lt;br /&gt;
There are no implications between GRF container version, GRF version and NFO version. Though of course some things are only possible with GRF container version 2.&lt;br /&gt;
&lt;br /&gt;
== NFO version ==&lt;br /&gt;
&lt;br /&gt;
This is the file format of NFO files, the input/output of GRFCodec and NFORenum.&lt;br /&gt;
There are no implications between GRF container version, GRF version and NFO version. Though of course some things may only be represented using newer NFO versions.&lt;br /&gt;
&lt;br /&gt;
The differences between the formats are &#039;&#039;documented&#039;&#039; in the [https://github.com/OpenTTD/grfcodec/blob/master/src/readinfo.cpp GRFCodec source code],&lt;br /&gt;
which can still read all formats (though not write).&lt;br /&gt;
&lt;br /&gt;
=== NFO version 1 to 7 ===&lt;br /&gt;
&lt;br /&gt;
Along these versions numerous advanced syntax forms were added to GRFCodec. However, every version can be converted into every other of these versions without losing&lt;br /&gt;
information when encoding/decoding NewGRFs (except source code comments, which are lost when encoding GRFs). Though older NFO versions might not be that comfortable&lt;br /&gt;
for representing certain GRF features (e.g. binary include sprites).&lt;br /&gt;
&lt;br /&gt;
=== NFO versions 8 to 31 ===&lt;br /&gt;
Historically the numeric values of GRF versions and NFO versions were often the same (esp. for the long lasting versions 6 and 7), causing quite some confusion among NewGRF authors, which then used the version numbers&lt;br /&gt;
incorrectly. When GRF version 8 coincided again (time-wise) with the requirement for a new NFO version, it was decided to skip NFO versions 8 to 31 to make the numeric values&lt;br /&gt;
vastly different and thus making confusion less likely.&lt;br /&gt;
&lt;br /&gt;
The value &amp;quot;32&amp;quot; for the new version was picked for unspecified reasons. Rumours say the value 32 stands for:&lt;br /&gt;
* Support for 32bpp graphics.&lt;br /&gt;
* Support for GRF container version 2.0. (Versions are usually encoded hexadecimal, and 20h = 32)&lt;br /&gt;
&lt;br /&gt;
=== NFO version 32 ===&lt;br /&gt;
&lt;br /&gt;
NFO version 32 adds support for GRF container version 2 specific features like 32bpp graphics or zoom-level specific graphics.&lt;br /&gt;
However, NFO version 32 and earlier versions can also be encoded into GRF container version 1 resp. 2.&lt;br /&gt;
Encoding into GRF container version 1 or decoding into NFO version &amp;lt; 32 might drop additional sprites though, which cannot be represented in those formats.&lt;br /&gt;
&lt;br /&gt;
== TTDPatch version ==&lt;br /&gt;
&lt;br /&gt;
Certain NewGRF features are only supported starting from certain TTDPatch versions on. These version requirements are mentioned throughout the specs using the {{ttdp|}} icon.&lt;br /&gt;
NewGRFs can check the TTDPatch version using [[Action9]] for variables [[GlobalVariables|0B and 1D]] and disable themself using [[ActionB]].&lt;br /&gt;
&lt;br /&gt;
TTDPatch is versioned in alpha, beta and stable versions.&lt;br /&gt;
However, before 2.6 alphas the alpha versions were named with different version numbers than the beta/stable versions they would lead to; instead they used the previous stable version incremented by 0.0.1.&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
! Series !! Alpha versions !! Beta versions !! Stable !! Maintenance releases of stables&lt;br /&gt;
|-&lt;br /&gt;
| 1.9 &amp;lt;ref&amp;gt;These versions had no NewGRF support at all and are only listed to explain the following lines.&amp;lt;/ref&amp;gt; || 1.8.1 alpha XX || 1.9 beta X || 1.9 || &lt;br /&gt;
|-&lt;br /&gt;
| 2.0 || 1.9.1 alpha XX || 2.0 beta X || 2.0 || 2.0r1 &lt;br /&gt;
|-&lt;br /&gt;
| 2.5 || 2.0.1 alpha XX || 2.5 beta X || 2.5 &amp;lt;ref&amp;gt;Not released yet.&amp;lt;/ref&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 2.6 || 2.6 nightly rXXXX || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== OpenTTD version ==&lt;br /&gt;
&lt;br /&gt;
Certain NewGRF features are only supported starting from certain OpenTTD versions on. These version requirements are mentioned throughout the specs using the {{ottd|}} icon.&lt;br /&gt;
NewGRFs can check the OpenTTD version using [[Action9]] for variables [[GlobalVariables#OpenTTD_Version_.2821_.2F_A1.29|21 and 1D]] and disable themself using [[ActionB]].&lt;br /&gt;
&lt;br /&gt;
OpenTTD is versioned in alpha, beta and stable versions. The major and minor version number stays the same for alphas, betas and stables leading to each other,&lt;br /&gt;
except when the major version number is increased.&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
! Series !! Alpha versions !! Beta versions !! Stable !! Maintenance releases of stables&lt;br /&gt;
|-&lt;br /&gt;
| 0.6 || 0.6 nightly rXXXX || 0.6.0-beta X || 0.6.0 || 0.6.x&lt;br /&gt;
|-&lt;br /&gt;
| 0.7 || 0.7 nightly rXXXX || 0.7.0-beta X || 0.7.0 || 0.7.x&lt;br /&gt;
|-&lt;br /&gt;
| 1.0 || 0.8 nightly rXXXX, 1.0 nightly rXXXX &amp;lt;ref&amp;gt;The nightlies changed the version after the decision that 1.0 would follow 0.7 instead of 0.8.&amp;lt;/ref&amp;gt; || 1.0.0-beta X || 1.0.0 || 1.0.x&lt;br /&gt;
|-&lt;br /&gt;
| 1.1 || 1.1 nightly rXXXX || 1.1.0-beta X || 1.1.0 || 1.1.x&lt;br /&gt;
|-&lt;br /&gt;
| 1.9 || 1.9 nightly YYYYMMDD &amp;lt;ref&amp;gt;Since 1.9 nightlies no longer use a revision number, but a date.&amp;lt;/ref&amp;gt; || 1.9.0-beta X || 1.9.0 || 1.9.x&lt;br /&gt;
|-&lt;br /&gt;
| 12 &amp;lt;ref&amp;gt;Version 1.11 was followed by version 12.&amp;lt;/ref&amp;gt; || 12 nightly YYYYMMDD || 12.0-beta X || 12.0 || 12.x&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Michi cc</name></author>
	</entry>
	<entry>
		<id>https://newgrf-specs.tt-wiki.net/index.php?title=Version_numbers&amp;diff=4915</id>
		<title>Version numbers</title>
		<link rel="alternate" type="text/html" href="https://newgrf-specs.tt-wiki.net/index.php?title=Version_numbers&amp;diff=4915"/>
		<updated>2025-01-11T14:51:10Z</updated>

		<summary type="html">&lt;p&gt;Michi cc: /* GRF container version */ Fix GRF container doc link.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;There are various version numbers involved in these NewGRF specs. This page clarifies the terms for version numbers.&lt;br /&gt;
&lt;br /&gt;
== Version of a specific NewGRF ==&lt;br /&gt;
{{ottdp|1.1|no}}&lt;br /&gt;
&lt;br /&gt;
The version number of a specific NewGRF distinguishes releases of the same NewGRF and defines which release is &amp;quot;newer&amp;quot; or &amp;quot;older&amp;quot;.&lt;br /&gt;
This has no effect on the NewGRF specs or general behaviour of the NewGRF.&lt;br /&gt;
A NewGRF defines its version using [[Action14#GRF_version_.28.22INFO.22_-.3E_.22VRSN.22.29|Action 14]],&lt;br /&gt;
it can also define a [[Action14#Minimal_compatible_GRF_version_.28.22INFO.22_-.3E_.22MINV.22.29|minimum version]] to which it is savegame compatible.&lt;br /&gt;
&lt;br /&gt;
Before the introduction of Action14 - and version numbers in it - NewGRFs used to change the GRFID in case of savegame-incompatibility.&lt;br /&gt;
However, this was not done consistently by NewGRF authors, esp. since it caused problems in other places (e.g. NewGRFs testing for other NewGRFs).&lt;br /&gt;
&lt;br /&gt;
== GRF version ==&lt;br /&gt;
&lt;br /&gt;
The GRF version defines the version of the NewGRF specs to which a NewGRF adheres.&lt;br /&gt;
Changing the GRF version of a GRF is likely to affect the operativity of a NewGRF as it might change the behaviour of various NewGRF features.&lt;br /&gt;
&lt;br /&gt;
Throughout the specs the dependencies and changes between GRF versions are indicated using the {{grf|}} icon.&lt;br /&gt;
&lt;br /&gt;
A NewGRF defines the version of the specs it adheres to within its [[Action8]].&lt;br /&gt;
&lt;br /&gt;
=== GRF version 0 and 1 ===&lt;br /&gt;
{{ottdp|no|no}}&lt;br /&gt;
&lt;br /&gt;
These GRF versions are from the alpha and beta days of NewGRFs in general.&lt;br /&gt;
Especially version 1 introduced [[Action8]] which allows a NewGRF to specify the GRF version it adheres to.&lt;br /&gt;
GRF version 2 concurs with TTDPatch 2.0, the first stable version of TTDPatch supporting NewGRFs. It comes along with a hard compatibility cut in NewGRFs:&lt;br /&gt;
TTDPatch 2.0 is the first version to support GRF version 2, while it removes support for version 0 and 1 at the same time (which implies making Action 8 mandatory).&lt;br /&gt;
&lt;br /&gt;
During the development of the GRF specs various features were designed, implemented and redesigned again. As such GRF version 2 is the first stable version of the specs.&lt;br /&gt;
&lt;br /&gt;
=== GRF version 2 to 6 ===&lt;br /&gt;
{{ottdp|0.6|2.0}}&lt;br /&gt;
&lt;br /&gt;
These GRF versions were introduced at somewhat arbitrary spots of TTDPatch development to allow NewGRFs to specify requirements for newer GRF features.&lt;br /&gt;
Later this approach of versioning the specs was dropped. Instead NewGRFs can now read and test the TTDPatch / OpenTTD version in [[Action9]] and disable themself using [[ActionB]] with an appropiate error message.&lt;br /&gt;
&lt;br /&gt;
=== GRF version 7 ===&lt;br /&gt;
{{ottdp|0.6|2.5}}&lt;br /&gt;
&lt;br /&gt;
GRF version 7 makes various semantic changes to various NewGRF features. The same code can be valid for both version 6 and 7, but will have a different meaning.&lt;br /&gt;
Most notable changes are:&lt;br /&gt;
* Language codes in [[Action4]] were completely redesigned.&lt;br /&gt;
* Various callbacks, properties and variables use cargobits instead of cargoslots.&lt;br /&gt;
The changes are described in detail on the pages for the features they affect.&lt;br /&gt;
&lt;br /&gt;
=== GRF version 8 ===&lt;br /&gt;
{{ottdp|1.2|no}}&lt;br /&gt;
&lt;br /&gt;
GRF version 8 again makes various semantic changes to various NewGRF features.&lt;br /&gt;
Most notable changes are:&lt;br /&gt;
* Various compatibility layers within the specs were removed to simplify writing NewGRFs resp. to remove arbitrary restrictions.&lt;br /&gt;
: E.g. the special meaning of 0xFF?? callback results was removed. Also all callbacks are 15bit callbacks now.&lt;br /&gt;
* All remnants of cargoslots were removed. (Except for the cargo definition itself of course.)&lt;br /&gt;
* Various parts of the specs were clarified, various callbacks which allowed various results with the same meaning before now only allow definite values for every possible result, while the other values stay reserved.&lt;br /&gt;
: E.g. callbacks results which were previously only tested for zero or non-zero must now return a specific value 0 or 1.&lt;br /&gt;
* All &amp;quot;height&amp;quot; variables were revised to better distinguish height in heightlevels or in pixels. This is a preparation for the introduction of more than 16 heightlevels.&lt;br /&gt;
&lt;br /&gt;
== GRF container version ==&lt;br /&gt;
&lt;br /&gt;
The GRF container format is the binary format of the GRF file. While the GRF version controls the meaning of the content of a NewGRF, the&lt;br /&gt;
GRF container version specifies the storage format for it. As such this version affects the software which reads/writes NewGRFs like grfcodec, nml, and of course also&lt;br /&gt;
OpenTTD and TTDPatch.&lt;br /&gt;
&lt;br /&gt;
The GRF container format is specified in the [https://raw.githubusercontent.com/OpenTTD/grfcodec/refs/heads/master/docs/grf.txt grfcodec documentation].&lt;br /&gt;
&lt;br /&gt;
=== GRF container version 1 ===&lt;br /&gt;
{{ottdp|0.6|2.0}}&lt;br /&gt;
&lt;br /&gt;
This is the traditional file format from TTD.&lt;br /&gt;
&lt;br /&gt;
=== GRF container version 2 ===&lt;br /&gt;
{{ottdp|1.2|no}}&lt;br /&gt;
&lt;br /&gt;
This is a new file format introduced in GRFCodec 6.0. Implementations which only know GRF container version 1 will consider GRFs with this version empty / invalid.&lt;br /&gt;
&lt;br /&gt;
New features in this version are:&lt;br /&gt;
* Pseudosprites (and binary include sprites) can be bigger than 64KB.&lt;br /&gt;
* Realsprites can be higher than 255 pixels.&lt;br /&gt;
* Realsprites can contain various versions of the same sprite in different zoom levels and colour depths (8bpp/32bpp).&lt;br /&gt;
&lt;br /&gt;
There are no implications between GRF container version, GRF version and NFO version. Though of course some things are only possible with GRF container version 2.&lt;br /&gt;
&lt;br /&gt;
== NFO version ==&lt;br /&gt;
&lt;br /&gt;
This is the file format of NFO files, the input/output of GRFCodec and NFORenum.&lt;br /&gt;
There are no implications between GRF container version, GRF version and NFO version. Though of course some things may only be represented using newer NFO versions.&lt;br /&gt;
&lt;br /&gt;
The differences between the formats are &#039;&#039;documented&#039;&#039; in the [http://dev.openttdcoop.org/projects/grfcodec/repository/entry/src/readinfo.cpp GRFCodec source code],&lt;br /&gt;
which can still read all formats (though not write).&lt;br /&gt;
&lt;br /&gt;
=== NFO version 1 to 7 ===&lt;br /&gt;
&lt;br /&gt;
Along these versions numerous advanced syntax forms were added to GRFCodec. However, every version can be converted into every other of these versions without losing&lt;br /&gt;
information when encoding/decoding NewGRFs (except source code comments, which are lost when encoding GRFs). Though older NFO versions might not be that comfortable&lt;br /&gt;
for representing certain GRF features (e.g. binary include sprites).&lt;br /&gt;
&lt;br /&gt;
=== NFO versions 8 to 31 ===&lt;br /&gt;
Historically the numeric values of GRF versions and NFO versions were often the same (esp. for the long lasting versions 6 and 7), causing quite some confusion among NewGRF authors, which then used the version numbers&lt;br /&gt;
incorrectly. When GRF version 8 coincided again (time-wise) with the requirement for a new NFO version, it was decided to skip NFO versions 8 to 31 to make the numeric values&lt;br /&gt;
vastly different and thus making confusion less likely.&lt;br /&gt;
&lt;br /&gt;
The value &amp;quot;32&amp;quot; for the new version was picked for unspecified reasons. Rumours say the value 32 stands for:&lt;br /&gt;
* Support for 32bpp graphics.&lt;br /&gt;
* Support for GRF container version 2.0. (Versions are usually encoded hexadecimal, and 20h = 32)&lt;br /&gt;
&lt;br /&gt;
=== NFO version 32 ===&lt;br /&gt;
&lt;br /&gt;
NFO version 32 adds support for GRF container version 2 specific features like 32bpp graphics or zoom-level specific graphics.&lt;br /&gt;
However, NFO version 32 and earlier versions can also be encoded into GRF container version 1 resp. 2.&lt;br /&gt;
Encoding into GRF container version 1 or decoding into NFO version &amp;lt; 32 might drop additional sprites though, which cannot be represented in those formats.&lt;br /&gt;
&lt;br /&gt;
== TTDPatch version ==&lt;br /&gt;
&lt;br /&gt;
Certain NewGRF features are only supported starting from certain TTDPatch versions on. These version requirements are mentioned throughout the specs using the {{ttdp|}} icon.&lt;br /&gt;
NewGRFs can check the TTDPatch version using [[Action9]] for variables [[GlobalVariables|0B and 1D]] and disable themself using [[ActionB]].&lt;br /&gt;
&lt;br /&gt;
TTDPatch is versioned in alpha, beta and stable versions.&lt;br /&gt;
However, before 2.6 alphas the alpha versions were named with different version numbers than the beta/stable versions they would lead to; instead they used the previous stable version incremented by 0.0.1.&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
! Series !! Alpha versions !! Beta versions !! Stable !! Maintenance releases of stables&lt;br /&gt;
|-&lt;br /&gt;
| 1.9 &amp;lt;ref&amp;gt;These versions had no NewGRF support at all and are only listed to explain the following lines.&amp;lt;/ref&amp;gt; || 1.8.1 alpha XX || 1.9 beta X || 1.9 || &lt;br /&gt;
|-&lt;br /&gt;
| 2.0 || 1.9.1 alpha XX || 2.0 beta X || 2.0 || 2.0r1 &lt;br /&gt;
|-&lt;br /&gt;
| 2.5 || 2.0.1 alpha XX || 2.5 beta X || 2.5 &amp;lt;ref&amp;gt;Not released yet.&amp;lt;/ref&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 2.6 || 2.6 nightly rXXXX || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== OpenTTD version ==&lt;br /&gt;
&lt;br /&gt;
Certain NewGRF features are only supported starting from certain OpenTTD versions on. These version requirements are mentioned throughout the specs using the {{ottd|}} icon.&lt;br /&gt;
NewGRFs can check the OpenTTD version using [[Action9]] for variables [[GlobalVariables#OpenTTD_Version_.2821_.2F_A1.29|21 and 1D]] and disable themself using [[ActionB]].&lt;br /&gt;
&lt;br /&gt;
OpenTTD is versioned in alpha, beta and stable versions. The major and minor version number stays the same for alphas, betas and stables leading to each other,&lt;br /&gt;
except when the major version number is increased.&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
! Series !! Alpha versions !! Beta versions !! Stable !! Maintenance releases of stables&lt;br /&gt;
|-&lt;br /&gt;
| 0.6 || 0.6 nightly rXXXX || 0.6.0-beta X || 0.6.0 || 0.6.x&lt;br /&gt;
|-&lt;br /&gt;
| 0.7 || 0.7 nightly rXXXX || 0.7.0-beta X || 0.7.0 || 0.7.x&lt;br /&gt;
|-&lt;br /&gt;
| 1.0 || 0.8 nightly rXXXX, 1.0 nightly rXXXX &amp;lt;ref&amp;gt;The nightlies changed the version after the decision that 1.0 would follow 0.7 instead of 0.8.&amp;lt;/ref&amp;gt; || 1.0.0-beta X || 1.0.0 || 1.0.x&lt;br /&gt;
|-&lt;br /&gt;
| 1.1 || 1.1 nightly rXXXX || 1.1.0-beta X || 1.1.0 || 1.1.x&lt;br /&gt;
|-&lt;br /&gt;
| 1.9 || 1.9 nightly YYYYMMDD &amp;lt;ref&amp;gt;Since 1.9 nightlies no longer use a revision number, but a date.&amp;lt;/ref&amp;gt; || 1.9.0-beta X || 1.9.0 || 1.9.x&lt;br /&gt;
|-&lt;br /&gt;
| 12 &amp;lt;ref&amp;gt;Version 1.11 was followed by version 12.&amp;lt;/ref&amp;gt; || 12 nightly YYYYMMDD || 12.0-beta X || 12.0 || 12.x&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Michi cc</name></author>
	</entry>
	<entry>
		<id>https://newgrf-specs.tt-wiki.net/index.php?title=Callback:_Custom_refit&amp;diff=4890</id>
		<title>Callback: Custom refit</title>
		<link rel="alternate" type="text/html" href="https://newgrf-specs.tt-wiki.net/index.php?title=Callback:_Custom_refit&amp;diff=4890"/>
		<updated>2024-11-18T21:55:52Z</updated>

		<summary type="html">&lt;p&gt;Michi cc: Var 18 undefined value&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Custom refit (163) ==&lt;br /&gt;
&lt;br /&gt;
The custom refit callback allows overriding the refittablity of each cargo as defined by the standard vehicle properties. It will be called for each defined cargo type once after the game has loaded all NewGRF files. It needs to be enabled by a callback flag.&lt;br /&gt;
&lt;br /&gt;
The callback is run in purchase list scope, i.e. for cargotype FF. No variables of an actual vehicle are available. Information about the cargo type the callback is called for is available in variables 10 and 18:&lt;br /&gt;
&lt;br /&gt;
* variable 10:&lt;br /&gt;
{| |-&lt;br /&gt;
!bit numbers!!Meaning&lt;br /&gt;
|-&lt;br /&gt;
|0..15||[[Action0Cargos#CargoClasses_.2816.29 | Cargo classes]] of the cargo type&lt;br /&gt;
|-&lt;br /&gt;
|other bits||reserved for future use&lt;br /&gt;
|}&lt;br /&gt;
* variable 18:&lt;br /&gt;
{| |-&lt;br /&gt;
!bit numbers!!Meaning&lt;br /&gt;
|-&lt;br /&gt;
|0..7||Index of the cargo type in the cargo translation table, or FF if the cargo is not present in the translation table&lt;br /&gt;
|-&lt;br /&gt;
|other bits||reserved for future use&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The callback has to return one of the following values:&lt;br /&gt;
{| |-&lt;br /&gt;
!Value!!Meaning&lt;br /&gt;
|-&lt;br /&gt;
|0|| Don&#039;t change refittability (i.e. use whatever the evaluation of the various refittability vehicle props has determined).&lt;br /&gt;
|-&lt;br /&gt;
|1|| Allow cargo type as a refit.&lt;br /&gt;
|-&lt;br /&gt;
|2|| Disallow cargo type as a refit.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
A failed callback is treated like a 0 return value.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; As this callback is not re-evaluated after game initialization, using any dynamic variables like e.g. game date will lead to undefined and faulty behaviour.&lt;br /&gt;
&lt;br /&gt;
This callback is available starting with {{ottdp|15|no|ottdrev=gd2496b6ec4}} OpenTTD 15.&lt;br /&gt;
&lt;br /&gt;
[[Category:Callbacks]]&lt;/div&gt;</summary>
		<author><name>Michi cc</name></author>
	</entry>
	<entry>
		<id>https://newgrf-specs.tt-wiki.net/index.php?title=Action0/Vehicles/Planes&amp;diff=4889</id>
		<title>Action0/Vehicles/Planes</title>
		<link rel="alternate" type="text/html" href="https://newgrf-specs.tt-wiki.net/index.php?title=Action0/Vehicles/Planes&amp;diff=4889"/>
		<updated>2024-11-18T21:49:23Z</updated>

		<summary type="html">&lt;p&gt;Michi cc: PR #13090&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right; padding-left:12px; background:none;&amp;quot;&amp;gt;{{NFONavVehicles}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Defining properties of planes.&lt;br /&gt;
&lt;br /&gt;
== Properties ==&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Number!![[GRFActionsDetailed|Size]]!!Version!!Description&lt;br /&gt;
|-&lt;br /&gt;
|08||B||{{ottdp|0.6|2.0}}||Sprite (FF for new graphics)&lt;br /&gt;
|-&lt;br /&gt;
|09||B||{{ottdp|0.6|2.0}}||Is helicopter? 2=no, 0=yes&lt;br /&gt;
|-&lt;br /&gt;
|0A||B||{{ottdp|0.6|2.0}}||Is large? 0=no, 1=yes (i.e. can&#039;t safely land on small airports)&lt;br /&gt;
|-&lt;br /&gt;
|0B||B||{{ottdp|0.6|2.0}}||Cost factor&lt;br /&gt;
|-&lt;br /&gt;
|0C||B||{{ottdp|0.6|2.0}}||Speed in units of 8 mph, that is: property = (speed in mph) / 8&lt;br /&gt;
|-&lt;br /&gt;
|0D||B||{{ottdp|0.6|2.0}}||Acceleration in units of 3/8 mph/tick, that is: property = (acceleration in mph/tick) * 8/3 &amp;lt;ref&amp;gt;{{ottd|&amp;amp;lt;1.3.1}} In OpenTTD before r25115 the units for acceleration were messed up. The unit used was about 1 mph/tick, so aircraft accelerated more than twice as fast. Also values bigger than 19 failed.&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|0E||B||{{ottdp|0.6|2.0}}||Running cost factor&lt;br /&gt;
|-&lt;br /&gt;
|0F||W||{{ottdp|0.6|2.0}}||Primary cargo capacity (passenger or refitted cargo)&lt;br /&gt;
|-&lt;br /&gt;
|11||B||{{ottdp|0.6|2.0}}||Secondary cargo capacity (mail)&lt;br /&gt;
|-&lt;br /&gt;
|12||B||{{ottdp|0.6|2.0}}||Sound effect&lt;br /&gt;
|-&lt;br /&gt;
|13||D||{{ottdp|0.6|2.5}} {{grfFrom|6}}||Bit mask of cargo types available for refitting, see column 2 (Bit Value) in [[CargoTypes]]. &amp;lt;b&amp;gt;Obsoleted by properties 1D/1E&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|14||B||{{ottdp|0.6|2.5}} {{grfFrom|6}}||Callback flags bit mask, see below&lt;br /&gt;
|-&lt;br /&gt;
|15||B||{{ottdp|0.6|2.5|ttdprev=alpha 30}}||Refit cost, using 1/32 of the default refit cost base&lt;br /&gt;
|-&lt;br /&gt;
|16||B||{{ottdp|0.6|2.5|ttdprev=alpha 44}}||Retire vehicle early, this many years before the end of phase 2 (see [[Action0General]])&lt;br /&gt;
|-&lt;br /&gt;
|17||B||{{ottdp|0.6|2.5|ttdprev=alpha 58}}||Miscellaneous vehicle flags&lt;br /&gt;
|-&lt;br /&gt;
|18||W||{{ottdp|0.6|2.5|ttdprev=alpha 58}}||Refittable cargo classes, see [[Action0Trains#Cargo_classes (28, 29, 32)|train prop. 28]]&lt;br /&gt;
|-&lt;br /&gt;
|19||W||{{ottdp|0.6|2.5|ttdprev=alpha 58}}||Non-refittable cargo classes, see [[Action0Trains#Cargo_classes (28, 29, 32)|train prop. 29]]&lt;br /&gt;
|-&lt;br /&gt;
|1A||D||{{ottdp|0.6|2.5|ttdprev=r1210|ottdrev=r7191}}||Long format introduction date&lt;br /&gt;
|-&lt;br /&gt;
|1B||B*||{{ottdp|0.7|no|ottdrev=r13831}}||Sort the purchase list&lt;br /&gt;
|-&lt;br /&gt;
|1C||W||{{ottdp|1.2|no|ottdrev=r22713}}||Custom cargo ageing period&lt;br /&gt;
|-&lt;br /&gt;
|1D||B n*B||{{ottdp|1.2|no|ottdrev=r23291}}||List of always refittable cargo types, see [[Action0/Vehicles/Trains#List_of_always_refittable_cargo_types_.282C.2C_2D.29|train property 2C]]&lt;br /&gt;
|-&lt;br /&gt;
|1E||B n*B||{{ottdp|1.2|no|ottdrev=r23291}}||List of never refittable cargo types, see [[Action0/Vehicles/Trains#List_of_always_refittable_cargo_types_.282C.2C_2D.29|train property 2D]]&lt;br /&gt;
|-&lt;br /&gt;
|1F||W||{{ottdp|1.2|no|ottdrev=r23504}}||Aircraft range in tiles. Distance is euclidean, a value of 0 means range is unlimited&lt;br /&gt;
|-&lt;br /&gt;
|20||W||{{ottdp|13|no}}||Vehicle variant group, see [[Action0/Vehicles/Trains#Vehicle_variant_group_.282F.29|train property 2F]]&lt;br /&gt;
|-&lt;br /&gt;
|21||D||{{ottdp|13|no}}||Extra flags, see [[Action0/Vehicles/Trains#Extra_flags_.2830.29|train property 30]]&lt;br /&gt;
|-&lt;br /&gt;
|22||B||{{ottdp|14|no|ottdrev=g2d73076056}}||Additional callback flags bit mask, see below&lt;br /&gt;
|-&lt;br /&gt;
|23||W||{{ottdp|15|no|ottdrev=gd2496b6ec4}}||Cargo classes required for refittability, see [[Action0Trains#Cargo_classes (28, 29, 32)|train prop. 32]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Descriptions ==&lt;br /&gt;
&lt;br /&gt;
=== Primary (0F) and secondary (11) cargo capacity ===&lt;br /&gt;
Aircraft can transport up to two cargo types.&lt;br /&gt;
The first (primary) cargo type can be changed when refitting the aircraft.&lt;br /&gt;
&lt;br /&gt;
The secondary cargo type is always mail, and is only present when the primary cargo type is part of the [[Action0/Cargos#CargoClasses_.2816.29|passenger cargo class]].&lt;br /&gt;
&lt;br /&gt;
See also the page about [[VehicleRefitting|vehicle refitting]].&lt;br /&gt;
&lt;br /&gt;
=== Sound effect (12) ===&lt;br /&gt;
&lt;br /&gt;
The following sound effects are used by planes (note, the setting is ignored for helicopters):&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Number!!Sound&lt;br /&gt;
|-&lt;br /&gt;
|06||Propeller sound 1&lt;br /&gt;
|-&lt;br /&gt;
|07||Jet sound 1&lt;br /&gt;
|-&lt;br /&gt;
|3B||Supersonic&lt;br /&gt;
|-&lt;br /&gt;
|3D||Jet sound 2&lt;br /&gt;
|-&lt;br /&gt;
|45||Propeller sound 2&lt;br /&gt;
|-&lt;br /&gt;
|46||Jet sound 3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{ottdp|1.6|no|ottdrev=r27507}} Since OpenTTD r27507 also custom sound effects from Action11 are allowed here.&lt;br /&gt;
&lt;br /&gt;
{{ottdp|1.11|no|ottdrev=6198a47}} Since OpenTTD g6198a47 this prop can be used to to set custom Action11 sound effects for helicopers. Default sound effects are ignored as before.&lt;br /&gt;
&lt;br /&gt;
=== Callbacks (14, 22) ===&lt;br /&gt;
For planes, the following [[callbacks]] have to be enabled by setting the corresponding bit in property 14 (certain other, not as frequently used callbacks are available without setting a bit here)::&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Bit!!Value!!Variable 0C value!!Callback&lt;br /&gt;
|-&lt;br /&gt;
|2||4||12||Load amount&lt;br /&gt;
|-&lt;br /&gt;
|3||8||15||Set refitted capacity&lt;br /&gt;
|-&lt;br /&gt;
|5||20||19||show a suffix after the cargo type name&lt;br /&gt;
|-&lt;br /&gt;
|6||40||2D||Select color mapping for vehicle&lt;br /&gt;
|-&lt;br /&gt;
|7||80||33||Sound effect callbacks&lt;br /&gt;
|-&lt;br /&gt;
|8||100||161||{{ottd|14|ottdrev=gf5394ed2ef}}Engine name&lt;br /&gt;
|-&lt;br /&gt;
|9||200||163||{{ottdp|15|no|ottdrev=gd2496b6ec4}}Custom refit&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Bit is the bit you have to set, you do this by adding all the values for all the bits. Variable 0C value is what variable 0C will be set to, for checking it in the VarAction2 for callbacks.&lt;br /&gt;
&lt;br /&gt;
=== Refit cost (15) ===&lt;br /&gt;
&lt;br /&gt;
Refit cost, using 1/32 of the default refit cost base. This property can be overridden by callback 15E.&lt;br /&gt;
&lt;br /&gt;
{{ottdp|1.2|no|ottdrev=r23087}} If the refit cost factor is set to zero and bit 4 of the miscellaneous flags (17) is set, auto-refitting is allowed.&lt;br /&gt;
&lt;br /&gt;
=== Miscellaneous flags (17) ===&lt;br /&gt;
&lt;br /&gt;
This is a bit mask, with the following bits:&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Bit!!Value!!Meaning&lt;br /&gt;
|-&lt;br /&gt;
|0||1||reserved, do not use&lt;br /&gt;
|-&lt;br /&gt;
|1||2||Uses two company colors&lt;br /&gt;
|-&lt;br /&gt;
|2||4||reserved, do not use&lt;br /&gt;
|-&lt;br /&gt;
|3||8||reserved, do not use&lt;br /&gt;
|-&lt;br /&gt;
|4||10||{{ottdp|1.2|no|ottdrev=r23087}} Auto-refitting is enabled for refits where callback 15E allows it or prop 15 specifies zero cost.&lt;br /&gt;
|-&lt;br /&gt;
|5||20||{{ottdp|1.2|no|ottdrev=r23861}} Use cargo multiplier for default cargo. See page about [[VehicleRefitting#Misc._vehicle_flag_5_.27use_of_capacity_multiplier_for_default_cargo.27_set|vehicle refitting]].&lt;br /&gt;
|-&lt;br /&gt;
|6||40||{{ottdp|1.3|no|ottdrev=r24124}} Disable breakdown smoke effect.&lt;br /&gt;
|-&lt;br /&gt;
|7||   80||{{ottdp|1.7|no|ottdrev=r27668}} [[Action2/Vehicles#Composing_vehicles_from_multiple_sprites|Compose vehicle from multiple sprites.]]&lt;br /&gt;
Note: This also applies to the rotor sprite, if custom rotor sprites are used.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Long format introduction date (1A) ===&lt;br /&gt;
&lt;br /&gt;
Set the vehicle introduction date, in days since the year 0. This takes account of leap years; dividable by 4, but not 100 unless 400. A start date of 1920-01-01 is obtained with a value of 701265 (51 B3 0A 00). This property must be set after property 00 to take effect.&lt;br /&gt;
&lt;br /&gt;
{{ottdp|no|}} In TTDPatch, dates after 2044 will be limited to 2044.&lt;br /&gt;
&lt;br /&gt;
=== Sort vehicle list (1B) ===&lt;br /&gt;
See sort vehicle list for [[Action0Trains#Sort vehicle list 1A|trains]] for details.&lt;br /&gt;
&lt;br /&gt;
=== Custom cargo ageing period (1C) ===&lt;br /&gt;
See custom cargo ageing period for [[Action0Trains#Custom_cargo_ageing_period_.282B.29|trains]] for details.&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
To be written&lt;/div&gt;</summary>
		<author><name>Michi cc</name></author>
	</entry>
	<entry>
		<id>https://newgrf-specs.tt-wiki.net/index.php?title=Action0/Vehicles/Ships&amp;diff=4888</id>
		<title>Action0/Vehicles/Ships</title>
		<link rel="alternate" type="text/html" href="https://newgrf-specs.tt-wiki.net/index.php?title=Action0/Vehicles/Ships&amp;diff=4888"/>
		<updated>2024-11-18T21:48:56Z</updated>

		<summary type="html">&lt;p&gt;Michi cc: PR #13090&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right; padding-left:12px; background:none;&amp;quot;&amp;gt;{{NFONavVehicles}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Defining properties of ships.&lt;br /&gt;
== Properties ==&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Number!![[GRFActionsDetailed|Size]]!!Version!!Description&lt;br /&gt;
|-&lt;br /&gt;
|08||B||{{ottdp|0.6|2.0}}||Sprite (FF for new graphics)&lt;br /&gt;
|-&lt;br /&gt;
|09||B||{{ottdp|0.6|2.0}}||Refittable (0 no, 1 yes)&lt;br /&gt;
|-&lt;br /&gt;
|0A||B||{{ottdp|0.6|2.0}}||Cost factor&lt;br /&gt;
|-&lt;br /&gt;
|0B||B||{{ottdp|0.6|2.0}}||Speed in mph*3.2, use property 23 for speeds &amp;gt; 255&lt;br /&gt;
|-&lt;br /&gt;
|0C||B||{{ottdp|0.6|2.0}}||Cargo type, see [[CargoTypes]]&amp;lt;br/&amp;gt;&lt;br /&gt;
{{grfTill|7}} For GRF version 7 and below: Type B &#039;cargo slot&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
{{grfFrom|8}} For GRF version 8 and above: Type A &#039;(translated) cargo bit&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
{{ottd|15.0}} Since 15.0, a default cargo translation table corresponding to the climate is used if one is not provided.&lt;br /&gt;
|-&lt;br /&gt;
|0D||W||{{ottdp|0.6|2.0}}||Capacity&lt;br /&gt;
|-&lt;br /&gt;
|0F||B||{{ottdp|0.6|2.0}}||Running cost factor&lt;br /&gt;
|-&lt;br /&gt;
|10||B||{{ottdp|0.6|2.0}}||Sound effect type (4=cargo ship, 5=passenger ship)&amp;lt;br/&amp;gt;{{ottdp|1.6|no|ottdrev=r27507}} Since OpenTTD r27507 also custom sound effects from Action11 are allowed here.&lt;br /&gt;
|-&lt;br /&gt;
|11||D||{{ottdp|0.6|2.0}} {{grfFrom|1}}||Bit mask of cargo types available for refitting, see column 2 (bit values) in [[CargoTypes]]. &amp;lt;b&amp;gt;Obsoleted by properties 1E/1F&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|12||B||{{ottdp|0.6|2.5}} {{grfFrom|6}}||Callback flags bit mask, see below&lt;br /&gt;
|-&lt;br /&gt;
|13||B||{{ottdp|0.6|2.5|ttdprev=alpha 30}}||Refit cost, using 1/32 of the default refit cost base&lt;br /&gt;
|-&lt;br /&gt;
|14||B||{{ottdp|1.2|2.5|ttdprev=alpha 44|ottdrev=r22639}}||Ocean speed fraction, sets fraction of top speed available in the ocean; e.g. 00=100%, 80=50%, FF=0.4%&lt;br /&gt;
|-&lt;br /&gt;
|15||B||{{ottdp|1.2|2.5|ttdprev=alpha 44|ottdrev=r22639}}||Canal speed fraction, same as above but for canals and rivers&lt;br /&gt;
|-&lt;br /&gt;
|16||B||{{ottdp|0.6|2.5|ttdprev=alpha 44}}||Retire vehicle early, this many years before the end of phase 2 (see [[Action0General]])&lt;br /&gt;
|-&lt;br /&gt;
|17||B||{{ottdp|0.6|2.5|ttdprev=alpha 55}}||Miscellaneous vehicle flags&lt;br /&gt;
|-&lt;br /&gt;
|18||W||{{ottdp|0.6|2.5|ttdprev=alpha 55}}||Refittable cargo classes, see [[Action0Trains#Cargo_classes (28, 29, 32)|train prop. 28]]&lt;br /&gt;
|-&lt;br /&gt;
|19||W||{{ottdp|0.6|2.5|ttdprev=alpha 55}}||Non-refittable cargo classes, see [[Action0Trains#Cargo_classes (28, 29, 32)|train prop. 29]]&lt;br /&gt;
|-&lt;br /&gt;
|1A||D||{{ottdp|0.6|2.6|ttdprev=r1210|ottdrev=r7191}}||Long format introduction date&lt;br /&gt;
|-&lt;br /&gt;
|1B||B*||{{ottdp|0.7|no|ottdrev=r13831}}||Sort the purchase list&lt;br /&gt;
|-&lt;br /&gt;
|1C||B||{{ottdp|1.1|no|ottdrev=r21240}}||Visual effect&lt;br /&gt;
|-&lt;br /&gt;
|1D||W||{{ottdp|1.2|no|ottdrev=r22713}}||Custom cargo ageing period&lt;br /&gt;
|-&lt;br /&gt;
|1E||B n*B||{{ottdp|1.2|no|ottdrev=r23291}}||List of always refittable cargo types, see [[Action0/Vehicles/Trains#List_of_always_refittable_cargo_types_.282C.2C_2D.29|train property 2C]]&lt;br /&gt;
|-&lt;br /&gt;
|1F||B n*B||{{ottdp|1.2|no|ottdrev=r23291}}||List of never refittable cargo types, see [[Action0/Vehicles/Trains#List_of_always_refittable_cargo_types_.282C.2C_2D.29|train property 2D]]&lt;br /&gt;
|-&lt;br /&gt;
|20||W||{{ottdp|13|no}}||Vehicle variant group, see [[Action0/Vehicles/Trains#Vehicle_variant_group_.282F.29|train property 2F]]&lt;br /&gt;
|-&lt;br /&gt;
|21||D||{{ottdp|13|no}}||Extra flags, see [[Action0/Vehicles/Trains#Extra_flags_.2830.29|train property 30]]&lt;br /&gt;
|-&lt;br /&gt;
|22||B||{{ottdp|14|no|ottdrev=g2d73076056}}||Additional callback flags bit mask, see below&lt;br /&gt;
|-&lt;br /&gt;
|23||W||{{ottdp|14|no|ottdrev=g5a55c4a934}}||Speed in mph*3.2&lt;br /&gt;
|-&lt;br /&gt;
|24||B||{{ottdp|14|no|ottdrev=g5a55c4a934}}||Acceleration in mph*3.2/h (0.5 km-ish/h). Minimum 1, defaults to 1 when omitted&lt;br /&gt;
|-&lt;br /&gt;
|25||W||{{ottdp|15|no|ottdrev=gd2496b6ec4}}||Cargo classes required for refittability, see [[Action0Trains#Cargo_classes (28, 29, 32)|train prop. 32]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Descriptions ==&lt;br /&gt;
&lt;br /&gt;
=== Callbacks (12, 22) ===&lt;br /&gt;
For ships, the following [[callbacks]] have to be enabled by setting the corresponding bit in properties 12 and 22 (certain other, not as frequently used callbacks are available without setting a bit here):&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Bit!!Value!!Variable 0C value!!Callback&lt;br /&gt;
|-&lt;br /&gt;
|2||4||12||Load amount&lt;br /&gt;
|-&lt;br /&gt;
|3||8||15||Set refitted capacity&lt;br /&gt;
|-&lt;br /&gt;
|5||20||19||show a suffix after the cargo type name&lt;br /&gt;
|-&lt;br /&gt;
|6||40||2D||Select color mapping for vehicle&lt;br /&gt;
|-&lt;br /&gt;
|7||80||33||Sound effect callbacks&lt;br /&gt;
|-&lt;br /&gt;
|8||100||161||{{ottd|14|ottdrev=gf5394ed2ef}}Engine name&lt;br /&gt;
|-&lt;br /&gt;
|9||200||163||{{ottdp|15|no|ottdrev=gd2496b6ec4}}Custom refit&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Bit is the bit you have to set, you do this by adding all the values for all the bits. Variable 0C value is what variable 0C will be set to, for checking it in the VarAction2 for callbacks.&lt;br /&gt;
&lt;br /&gt;
=== Refit cost (13) ===&lt;br /&gt;
&lt;br /&gt;
Refit cost, using 1/32 of the default refit cost base. This property can be overridden by callback 15E.&lt;br /&gt;
&lt;br /&gt;
{{ottdp|1.2|no|ottdrev=r23087}} If the refit cost factor is set to zero and bit 4 of the miscellaneous flags (17) is set, auto-refitting is allowed.&lt;br /&gt;
&lt;br /&gt;
=== Miscellaneous flags (17) ===&lt;br /&gt;
&lt;br /&gt;
This is a bit mask, with the following bits:&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Bit!!Value!!Meaning&lt;br /&gt;
|-&lt;br /&gt;
|0||1||reserved, do not use&lt;br /&gt;
|-&lt;br /&gt;
|1||2||Uses two company colors&lt;br /&gt;
|-&lt;br /&gt;
|2||4||reserved, do not use&lt;br /&gt;
|-&lt;br /&gt;
|3||8||reserved, do not use&lt;br /&gt;
|-&lt;br /&gt;
|4||10||{{ottdp|1.2|no|ottdrev=r23087}} Auto-refitting is enabled for refits where callback 15E allows it or prop 13 specifies zero cost.&lt;br /&gt;
|-&lt;br /&gt;
|5||   20||{{ottdp|1.2|no|ottdrev=r23861}} Use cargo multiplier for default cargo. See page about [[VehicleRefitting#Misc._vehicle_flag_5_.27use_of_capacity_multiplier_for_default_cargo.27_set|vehicle refitting]].&lt;br /&gt;
|-&lt;br /&gt;
|6||   40||{{ottdp|1.3|no|ottdrev=r24124}} Disable breakdown smoke effect.&lt;br /&gt;
|-&lt;br /&gt;
|7||   80||{{ottdp|1.7|no|ottdrev=r27668}} [[Action2/Vehicles#Composing_vehicles_from_multiple_sprites|Compose vehicle from multiple sprites.]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Long format introduction date (1A) ===&lt;br /&gt;
&lt;br /&gt;
Set the vehicle introduction date, in days since the year 0. This takes account of leap years; dividable by 4, but not 100 unless 400. A start date of 1920-01-01 is obtained with a value of 701265 (51 B3 0A 00). This property must be set after property 00 to take effect.&lt;br /&gt;
&lt;br /&gt;
{{ottdp|no|}} In TTDPatch, dates after 2044 will be limited to 2044.&lt;br /&gt;
&lt;br /&gt;
=== Sort vehicle list (1B) ===&lt;br /&gt;
See sort vehicle list for [[Action0Trains#Sort_vehicle_list_.281A.29|trains]] for details.&lt;br /&gt;
&lt;br /&gt;
=== Visual effect (1C) ===&lt;br /&gt;
See the equivalent [[Action0Trains#Visual_effects_and_wagon_power_.2822.29|train property]] for information about the meaning of all bits. There is no default effect for ships, therefore values of 00..0F will show no visual effect. Bit 7 (disable wagon power) currently has no meaning and should be left at 0.&lt;br /&gt;
&lt;br /&gt;
=== Custom cargo ageing period (1D) ===&lt;br /&gt;
See custom cargo ageing period for [[Action0Trains#Custom_cargo_ageing_period_.282B.29|trains]] for details.&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
To be written&lt;/div&gt;</summary>
		<author><name>Michi cc</name></author>
	</entry>
	<entry>
		<id>https://newgrf-specs.tt-wiki.net/index.php?title=Action0/Vehicles/RoadVehicles&amp;diff=4887</id>
		<title>Action0/Vehicles/RoadVehicles</title>
		<link rel="alternate" type="text/html" href="https://newgrf-specs.tt-wiki.net/index.php?title=Action0/Vehicles/RoadVehicles&amp;diff=4887"/>
		<updated>2024-11-18T21:48:02Z</updated>

		<summary type="html">&lt;p&gt;Michi cc: PR #13090&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right; padding-left:12px; background:none;&amp;quot;&amp;gt;{{NFONavVehicles}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Defining properties of road vehicles.&lt;br /&gt;
&lt;br /&gt;
== Properties ==&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Number!![[GRFActionsDetailed|Size]]!!Version!!Description!!Available for articulated parts&lt;br /&gt;
|-&lt;br /&gt;
|05||B||{{ottdp|1.10|no}}||Roadtype / tramtype (see below)||should be same as front&lt;br /&gt;
|-&lt;br /&gt;
|08||B||{{ottdp|0.6|2.0}}||Speed in mph*3.2||no&lt;br /&gt;
|-&lt;br /&gt;
|09||B||{{ottdp|0.6|2.0}}||Running cost factor||should be zero&lt;br /&gt;
|-&lt;br /&gt;
|0A||D||{{ottdp|0.6|2.0}}||Running cost base, see below||should be zero&lt;br /&gt;
|-&lt;br /&gt;
|0E||B||{{ottdp|0.6|2.0}}||Sprite ID (FF for new graphics)||yes&lt;br /&gt;
|-&lt;br /&gt;
|0F||B||{{ottdp|0.6|2.0}}||Capacity||yes&lt;br /&gt;
|-&lt;br /&gt;
|10||B||{{ottdp|0.6|2.0}}||Cargo type, see [[CargoTypes]]&amp;lt;br/&amp;gt;&lt;br /&gt;
{{grfTill|7}} For GRF version 7 and below: Type B &#039;cargo slot&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
{{grfFrom|8}} For GRF version 8 and above: Type A &#039;(translated) cargo bit&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
{{ottd|15.0}} Since 15.0, a default cargo translation table corresponding to the climate is used if one is not provided.&lt;br /&gt;
||yes&lt;br /&gt;
|-&lt;br /&gt;
|11||B||{{ottdp|0.6|2.0}}||Cost factor||should be zero&lt;br /&gt;
|-&lt;br /&gt;
|12||B||{{ottdp|0.6|2.0}}||Sound effect: 17/19/1A for regular, 3C/3E for toyland&amp;lt;br/&amp;gt;{{ottdp|1.6|no|ottdrev=r27507}} Since OpenTTD r27507 also custom sound effects from Action11 are allowed here.||no&lt;br /&gt;
|-&lt;br /&gt;
|13||B||{{ottdp|1.1|2.0}} {{grfFrom|2}}||Power in 10 hp, see below||should be zero&lt;br /&gt;
|-&lt;br /&gt;
|14||B||{{ottdp|1.1|2.0}} {{grfFrom|2}}||Weight in 1/4 tons, see below||should be zero&lt;br /&gt;
|-&lt;br /&gt;
|15||B||{{ottdp|0.7|2.0}} {{grfFrom|2}}||Speed in mph*0.8, see below||no&lt;br /&gt;
|-&lt;br /&gt;
|16||D||{{ottdp|0.6|2.0}} {{grfFrom|2}}||Bit mask of cargo types available for refitting (not refittable if 0 or unset), see column 2 (bit values) in [[CargoTypes]]. &amp;lt;b&amp;gt;Obsoleted by properties 24/25&amp;lt;/b&amp;gt;||yes&lt;br /&gt;
|-&lt;br /&gt;
|17||B||{{ottdp|0.6|2.5}} {{grfFrom|6}}||Callback flags bit mask, see below||yes&lt;br /&gt;
|-&lt;br /&gt;
|18||B||{{ottdp|1.1|2.5|ttdprev=alpha 30}}||Coefficient of tractive effort||should be zero&lt;br /&gt;
|-&lt;br /&gt;
|19||B||{{ottdp|1.1|2.5|ttdprev=alpha 30}}||Coefficient of air drag||should be zero&lt;br /&gt;
|-&lt;br /&gt;
|1A||B||{{ottdp|0.6|2.5|ttdprev=alpha 30}}||Refit cost, using 25% of the [[BaseCosts|purchase price cost base]]||yes&lt;br /&gt;
|-&lt;br /&gt;
|1B||B||{{ottdp|0.6|2.5|ttdprev=alpha 44}}||Retire vehicle early, this many years before the end of phase 2 (see [[Action0General]])||no&lt;br /&gt;
|-&lt;br /&gt;
|1C||B||{{ottdp|0.6|2.5|ttdprev=alpha 58}}||Miscellaneous vehicle flags||partly (&amp;quot;tram&amp;quot; should be same as front)&lt;br /&gt;
|-&lt;br /&gt;
|1D||W||{{ottdp|0.6|2.5|ttdprev=alpha 58}}||Refittable cargo classes, see [[Action0Trains#Cargo_classes (28, 29, 32)|train prop. 28]]||yes&lt;br /&gt;
|-&lt;br /&gt;
|1E||W||{{ottdp|0.6|2.5|ttdprev=alpha 58}}||Non-refittable cargo classes, see [[Action0Trains#Cargo_classes (28, 29, 32)|train prop. 29]]||yes&lt;br /&gt;
|-&lt;br /&gt;
|1F||D||{{ottdp|0.6|2.5|ttdprev=r1210|ottdrev=r7191}}||Long format introduction date||no&lt;br /&gt;
|-&lt;br /&gt;
|20||B*||{{ottdp|0.7|no|ottdrev=r13831}}||Sort the purchase list||no&lt;br /&gt;
|-&lt;br /&gt;
|21||B||{{ottdp|1.1|no|ottdrev=r21240}}||Visual effect||yes&lt;br /&gt;
|-&lt;br /&gt;
|22||W||{{ottdp|1.2|no|ottdrev=r22713}}||Custom cargo ageing period||yes&lt;br /&gt;
|-&lt;br /&gt;
|23||B||{{ottdp|1.2|no|ottdrev=r23164}}||Make vehicle shorter, see [[Action0/Vehicles/Trains#Shorter_train_vehicles_.2821.29|train property 21]]||yes&lt;br /&gt;
|-&lt;br /&gt;
|24||B n*B||{{ottdp|1.2|no|ottdrev=r23291}}||List of always refittable cargo types, see [[Action0/Vehicles/Trains#List_of_always_refittable_cargo_types_.282C.2C_2D.29|train property 2C]]||yes&lt;br /&gt;
|-&lt;br /&gt;
|25||B n*B||{{ottdp|1.2|no|ottdrev=r23291}}||List of never refittable cargo types, see [[Action0/Vehicles/Trains#List_of_always_refittable_cargo_types_.282C.2C_2D.29|train property 2D]]||yes&lt;br /&gt;
|-&lt;br /&gt;
|26||W||{{ottdp|13|no}}||Vehicle variant group, see [[Action0/Vehicles/Trains#Vehicle_variant_group_.282F.29|train property 2F]]&lt;br /&gt;
|-&lt;br /&gt;
|27||D||{{ottdp|13|no}}||Extra flags, see [[Action0/Vehicles/Trains#Extra_flags_.2830.29|train property 30]]&lt;br /&gt;
|-&lt;br /&gt;
|28||B||{{ottdp|14|no|ottdrev=g2d73076056}}||Additional callback flags bit mask, see below||yes&lt;br /&gt;
|-&lt;br /&gt;
|29||W||{{ottdp|15|no|ottdrev=gd2496b6ec4}}||Cargo classes required for refittability, see [[Action0Trains#Cargo_classes (28, 29, 32)|train prop. 32]]||yes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
&lt;br /&gt;
=== Roadtype or tramtype (05) ===&lt;br /&gt;
{{ottdp|1.10|no}} Roadtype or tramtype for the vehicle.  This is an index into the [[Action0/Global_Settings#Roadtype_translation_table_.2816.29|roadtype]] or [[Action0/Global_Settings#Tramtype_translation_table_.2817.29|tramtype]] translation table.&lt;br /&gt;
&lt;br /&gt;
This property:&lt;br /&gt;
* will use property 1C bit 0 (flag &#039;vehicle is tram&#039;) to determine whether to use a roadtype or tramtype table&lt;br /&gt;
* requires an appropriate roadtype or tramtype table to be loaded&lt;br /&gt;
&lt;br /&gt;
=== Running cost base (0A) and factor (09) ===&lt;br /&gt;
&lt;br /&gt;
TTD calculates all costs by multiplying a 48-bit base amount with an 8-bit factor. &amp;amp;nbsp;The base amount is changed according to inflation, whereas the factor remains constant.&lt;br /&gt;
&lt;br /&gt;
For the running costs of road vehicles, the following base amounts are available:&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Type!!Value!!in little-endian notation&lt;br /&gt;
|-&lt;br /&gt;
|Road vehicle running cost base||4C48||48 4C 00 00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Theoretically, you could use pointers to other [[BaseCosts|base amounts]] available in TTD, but these are the numbers TTD uses for road vehicles.&lt;br /&gt;
&lt;br /&gt;
=== Cost factor (11) ===&lt;br /&gt;
&lt;br /&gt;
The cost factor is a bit-coded value which determines how expensive a vehicle is. The table below gives you some values to use for finding the right price for your vehicles.&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Cost factor!!Price&lt;br /&gt;
|-&lt;br /&gt;
|00||$ 0&lt;br /&gt;
|-&lt;br /&gt;
|01||$ 108&lt;br /&gt;
|-&lt;br /&gt;
|10||$ 1,750&lt;br /&gt;
|-&lt;br /&gt;
|20||$ 3,500&lt;br /&gt;
|-&lt;br /&gt;
|80||$ 14,000&lt;br /&gt;
|-&lt;br /&gt;
|FF||$ 27,890&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Realistic acceleration properties (13, 14, 15) ===&lt;br /&gt;
&lt;br /&gt;
Using property 15 to set the speed, it is possible to achieve speeds larger than 80 mph (127 km/h), to which property 08 is limited. When setting property 15, always set property 08 as well, so that the vehicle works reasonably well whether realistic acceleration is turned on or off. If property 15 is not set, the value from property 08 is used instead.&lt;br /&gt;
&lt;br /&gt;
{{ttdp|}} TTDPatch uses these properties only if road vehicles are set to realistic acceleration in the NewCurveAndMountainHandling switch. They are ignored otherwise.&lt;br /&gt;
&lt;br /&gt;
{{ottd|}} OpenTTD uses these properties always, if they are defined and gives the speed defined here precedence over the one defined in property 08.&lt;br /&gt;
&lt;br /&gt;
=== Callbacks (17, 28) ===&lt;br /&gt;
&lt;br /&gt;
For road vehicles, the following [[callbacks]] have to be enabled by setting the corresponding bit in properties 17 and 28 (certain other, not as frequently used callbacks are available without setting a bit here):&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Bit!!Value!!Variable 0C value!!Callback&lt;br /&gt;
|-&lt;br /&gt;
|1||2||11||Wagon length&lt;br /&gt;
|-&lt;br /&gt;
|2||4||12||Load amount&lt;br /&gt;
|-&lt;br /&gt;
|3||8||15||Set refitted capacity&lt;br /&gt;
|-&lt;br /&gt;
|4||10||16||Build articulated vehicle&lt;br /&gt;
|-&lt;br /&gt;
|5||20||19||show a suffix after the cargo type name&lt;br /&gt;
|-&lt;br /&gt;
|6||40||2D||Select color mapping for vehicle&lt;br /&gt;
|-&lt;br /&gt;
|7||80||33||Sound effect callbacks&lt;br /&gt;
|-&lt;br /&gt;
|8||100||161||{{ottd|14|ottdrev=gf5394ed2ef}}Engine name&lt;br /&gt;
|-&lt;br /&gt;
|9||200||163||{{ottdp|15|no|ottdrev=gd2496b6ec4}}Custom refit&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Bit is the bit you have to set, you do this by adding all the values for all the bits. Variable 0C value is what variable 0C will be set to, for checking it in the VarAction2 for callbacks.&lt;br /&gt;
&lt;br /&gt;
=== Coefficient of tractive effort (18) ===&lt;br /&gt;
&lt;br /&gt;
This cofficient sets what fraction of the vehicle weight is equal to the maximum tractive effort. &amp;amp;nbsp;This includes the effect of having some unpowered axles, as well as the coefficient of friction that is available.&lt;br /&gt;
&lt;br /&gt;
For a value of FF, the tractive effort is equal to the vehicle weight, for 80, it is half, and so on. &amp;amp;nbsp;If not set, a default of 4C is used, for a fraction of 0.30, corresponding to W&amp;lt;sub&amp;gt;adh&amp;lt;/sub&amp;gt;=W and a coefficient of friction of 0.30, which is the value used by the patch before TTDPatch 2.0.1 alpha 19.&lt;br /&gt;
&lt;br /&gt;
=== Coefficient of air drag (19) ===&lt;br /&gt;
&lt;br /&gt;
This property sets the air drag coefficient c2 used for the realistic acceleration model, from 01 (no airdrag) to FF (most air drag) in arbitrary units. &amp;amp;nbsp;00 means to use the default value that depends on the top speed (to simulate the fact that high-speed engines are more streamlined).&lt;br /&gt;
&lt;br /&gt;
The default values are the following:&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!top speed (mph/1.6)!!&amp;amp;lt;16!!16!!24!!32!!48!!64!!96!!128!!192!!256!!...&lt;br /&gt;
|-&lt;br /&gt;
|c2||192||128||96||64||48||32||24||16||12||8&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
For higher speeds, the series is continued in the same manner.&lt;br /&gt;
&lt;br /&gt;
Air drag in Newtons will then be c2*v*v with v in m/s, although it is probably futile to attempt to make c2 a realistic number due to the lack of TTd&#039;s consistent scaling. &amp;amp;nbsp;If a vehicle doesn&#039;t reach its historical top speed, you might try setting prop. 19 one or two higher than the default above, otherwise it&#039;s probably a good idea to leave it at the default.&lt;br /&gt;
&lt;br /&gt;
=== Refit cost (1A) ===&lt;br /&gt;
&lt;br /&gt;
Refit cost, using 25% of the [[BaseCosts|purchase price cost base]]. This property can be overridden by callback 15E.&lt;br /&gt;
&lt;br /&gt;
{{ottdp|1.2|no|ottdrev=r23087}} If the refit cost factor is set to zero and bit 4 of the miscellaneous flags (1C) is set, auto-refitting is allowed.&lt;br /&gt;
&lt;br /&gt;
=== Miscellaneous flags (1C) ===&lt;br /&gt;
&lt;br /&gt;
This is a bit mask, with the following bits:&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Bit!!Value!!Meaning&lt;br /&gt;
|-&lt;br /&gt;
|0||1||Vehicle is a tram/light rail vehicle and requires tram tracks to operate&lt;br /&gt;
|-&lt;br /&gt;
|1||2||Uses two company colors&lt;br /&gt;
|-&lt;br /&gt;
|2||4||reserved, do not use&lt;br /&gt;
|-&lt;br /&gt;
|3||8||reserved, do not use&lt;br /&gt;
|-&lt;br /&gt;
|4||10||{{ottdp|1.2|no|ottdrev=r23087}} Auto-refitting is enabled for refits where callback 15E allows it or prop 1A specifies zero cost.&lt;br /&gt;
|-&lt;br /&gt;
|5||   20||{{ottdp|1.2|no|ottdrev=r23861}} Use cargo multiplier for default cargo. See page about [[VehicleRefitting#Misc._vehicle_flag_5_.27use_of_capacity_multiplier_for_default_cargo.27_set|vehicle refitting]].&lt;br /&gt;
|-&lt;br /&gt;
|6||   40||{{ottdp|1.3|no|ottdrev=r24124}} Disable breakdown smoke effect.&lt;br /&gt;
|-&lt;br /&gt;
|7||   80||{{ottdp|1.7|no|ottdrev=r27668}} [[Action2/Vehicles#Composing_vehicles_from_multiple_sprites|Compose vehicle from multiple sprites.]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Long format introduction date (1F) ===&lt;br /&gt;
&lt;br /&gt;
Set the vehicle introduction date, in days since the year 0. This takes account of leap years; dividable by 4, but not 100 unless 400. A start date of 1920-01-01 is obtained with a value of 701265 (51 B3 0A 00). This property must be set after property 00 to take effect.&lt;br /&gt;
&lt;br /&gt;
{{ottdp|no|}} In TTDPatch, dates after 2044 will be limited to 2044.&lt;br /&gt;
&lt;br /&gt;
=== Sort vehicle list (20) ===&lt;br /&gt;
See sort vehicle list for [[Action0Trains#Sort vehicle list 1A|trains]] for details.&lt;br /&gt;
&lt;br /&gt;
=== Visual effect (21) ===&lt;br /&gt;
See the equivalent [[Action0Trains#Visual effects and wagon power 22|train property]] for information about the meaning of all bits. There is no default effect for road vehicles, therefore values of 00..0F will show no visual effect. Bit 7 (disable wagon power) currently has no meaning and should be left at 0.&lt;br /&gt;
&lt;br /&gt;
=== Custom cargo ageing period (22) ===&lt;br /&gt;
See custom cargo ageing period for [[Action0Trains#Custom_cargo_ageing_period_.282B.29|trains]] for details.&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
To be written&lt;/div&gt;</summary>
		<author><name>Michi cc</name></author>
	</entry>
	<entry>
		<id>https://newgrf-specs.tt-wiki.net/index.php?title=Action0/Vehicles/Trains&amp;diff=4886</id>
		<title>Action0/Vehicles/Trains</title>
		<link rel="alternate" type="text/html" href="https://newgrf-specs.tt-wiki.net/index.php?title=Action0/Vehicles/Trains&amp;diff=4886"/>
		<updated>2024-11-18T21:45:38Z</updated>

		<summary type="html">&lt;p&gt;Michi cc: /* Cargo classes (28, 29, 32) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right; padding-left:12px; background:none;&amp;quot;&amp;gt;{{NFONavVehicles}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
Defining properties of train vehicles.&lt;br /&gt;
&lt;br /&gt;
= Properties =&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Number!![[GRFActionsDetailed|Size]]!!Version!!Description!!Available for articulated parts&lt;br /&gt;
|-&lt;br /&gt;
|05||B||{{ottdp|0.6|2.0}}||Track type (see below)||should be same as front&lt;br /&gt;
|-&lt;br /&gt;
|08||B||{{ottdp|0.6|2.0}}||AI special flag: set to 1 if engine is &#039;optimized&#039; for passenger service (AI won&#039;t use it for other cargo), 0 otherwise||no&lt;br /&gt;
|-&lt;br /&gt;
|09||W||{{ottdp|0.6|2.0}}||Speed in mph*1.6 (see below)||no&lt;br /&gt;
|-&lt;br /&gt;
|0B||W||{{ottdp|0.6|2.0}}||Power (0 for wagons)||should be zero&lt;br /&gt;
|-&lt;br /&gt;
|0D||B||{{ottdp|0.6|2.0}}||Running cost factor (0 for wagons)||should be zero&lt;br /&gt;
|-&lt;br /&gt;
|0E||D||{{ottdp|0.6|2.0}}||Running cost base, see below||should be zero&lt;br /&gt;
|-&lt;br /&gt;
|12||B||{{ottdp|0.6|2.0}}||Sprite ID (FD for new graphics)||yes&lt;br /&gt;
|-&lt;br /&gt;
|13||B||{{ottdp|0.6|2.0}}||Dual-headed flag; 1 if dual-headed engine, 0 otherwise||should be zero also for front&lt;br /&gt;
|-&lt;br /&gt;
|14||B||{{ottdp|0.6|2.0}}||Cargo capacity||yes&lt;br /&gt;
|-&lt;br /&gt;
|15||B||{{ottdp|0.6|2.0}}||Cargo type, see [[CargoTypes]]&amp;lt;br/&amp;gt;&lt;br /&gt;
{{grfTill|7}} For GRF version 7 and below: Type B &#039;cargo slot&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
{{grfFrom|8}} For GRF version 8 and above: Type A &#039;(translated) cargo bit&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
{{ottd|15.0}} Since 15.0, a default cargo translation table corresponding to the climate is used if one is not provided.&lt;br /&gt;
||yes&lt;br /&gt;
|-&lt;br /&gt;
|16||B||{{ottdp|0.6|2.0}}||Weight in tons||should be zero&lt;br /&gt;
|-&lt;br /&gt;
|17||B||{{ottdp|0.6|2.0}}||Cost factor||should be zero&lt;br /&gt;
|-&lt;br /&gt;
|18||B||{{ottdp|&amp;amp;lt;0.7|2.0}}&amp;lt;ref&amp;gt;This property is not used by OpenTTDs NoAI API.&amp;lt;/ref&amp;gt;||Engine rank for the AI (AI selects the highest-rank engine of those it can buy)||no&lt;br /&gt;
|-&lt;br /&gt;
|19||B||{{ottdp|0.6|2.0}} {{grfFrom|1}}||Engine traction type (see below)||no&lt;br /&gt;
|-&lt;br /&gt;
|1A||B/B*&amp;lt;ref&amp;gt;{{ottdp|0.7|no|ottdrev=r13831}} Since OpenTTD r13831 this is an extended byte.&amp;lt;/ref&amp;gt;||{{ottdp|0.6|2.0}} {{grfFrom|1}}||Not a property, but an action: sort the purchase list.||no&lt;br /&gt;
|-&lt;br /&gt;
|1B||W||{{ottdp|0.6|2.5}} {{grfFrom|6}}||Power added by each wagon connected to this engine, see below||should be zero&lt;br /&gt;
|-&lt;br /&gt;
|1C||B||{{ottdp|0.6|2.5}} {{grfFrom|6}}||Refit cost, using 50% of the [[BaseCosts|purchase price cost base]]||yes&lt;br /&gt;
|-&lt;br /&gt;
|1D||D||{{ottdp|0.6|2.5}} {{grfFrom|6}}||Bit mask of cargo types available for refitting, see column 2 (bit value) in [[CargoTypes]]. &amp;lt;b&amp;gt;Obsoleted by properties 2C/2D&amp;lt;/b&amp;gt;||yes&lt;br /&gt;
|-&lt;br /&gt;
|1E||B||{{ottdp|0.6|2.5}} {{grfFrom|6}}||Callback flags bit mask, see below||yes&lt;br /&gt;
|-&lt;br /&gt;
|1F||B||{{ottdp|0.6|2.5|ttdprev=alpha 19}}||Coefficient of tractive effort||should be zero&lt;br /&gt;
|-&lt;br /&gt;
|20||B||{{ottdp|1.1|2.5|ttdprev=alpha 27}}||Coefficient of air drag||should be zero&lt;br /&gt;
|-&lt;br /&gt;
|21||B||{{ottdp|0.6|2.0}} {{grfFrom|2}}||Make vehicle shorter by this amount, see below||yes&lt;br /&gt;
|-&lt;br /&gt;
|22||B||{{ottdp|0.6|2.5}} {{grfFrom|6}}||Set visual effect type (steam/smoke/sparks) as well as position, see below||yes&lt;br /&gt;
|-&lt;br /&gt;
|23||B||{{ottdp|0.6|2.5}} {{grfFrom|6}}||Set how much weight is added by making wagons powered (i.e. weight of engine), see below||should be zero&lt;br /&gt;
|-&lt;br /&gt;
|24||B||{{ottdp|0.6|2.5|ttdprev=alpha 44}}||High byte of vehicle weight, weight will be prop.24*256+prop.16||should be zero&lt;br /&gt;
|-&lt;br /&gt;
|25||B||{{ottdp|0.6|2.5|ttdprev=alpha 44}}||User-defined bit mask to set when checking veh. var. 42||yes&lt;br /&gt;
|-&lt;br /&gt;
|26||B||{{ottdp|0.6|2.5|ttdprev=alpha 44}}||Retire vehicle early, this many years before the end of phase 2 (see [[Action0General]])||no&lt;br /&gt;
|-&lt;br /&gt;
|27||B||{{ottdp|0.6|2.5|ttdprev=alpha 58}}||Miscellaneous flags||partly&lt;br /&gt;
|-&lt;br /&gt;
|28||W||{{ottdp|0.6|2.5|ttdprev=alpha 58}}||Refittable cargo classes||yes&lt;br /&gt;
|-&lt;br /&gt;
|29||W||{{ottdp|0.6|2.5|ttdprev=alpha 58}}||Non-refittable cargo classes||yes&lt;br /&gt;
|-&lt;br /&gt;
|2A||D||{{ottdp|0.6|2.5|ottdrev=r7191|ttdprev=r1210}}||Long format introduction date||no&lt;br /&gt;
|-&lt;br /&gt;
|2B||W||{{ottdp|1.2|no|ottdrev=r22713}}||Custom cargo ageing period||yes&lt;br /&gt;
|-&lt;br /&gt;
|2C||B n*B||{{ottdp|1.2|no|ottdrev=r23291}}||List of always refittable cargo types||yes&lt;br /&gt;
|-&lt;br /&gt;
|2D||B n*B||{{ottdp|1.2|no|ottdrev=r23291}}||List of never refittable cargo types||yes&lt;br /&gt;
|-&lt;br /&gt;
|2E||W||{{ottdp|12|no|ottdrev=g2183fd4dab}}||Maximum curve speed modifier||yes&lt;br /&gt;
|-&lt;br /&gt;
|2F||W||{{ottdp|13|no}}||Vehicle variant group||no&lt;br /&gt;
|-&lt;br /&gt;
|30||D||{{ottdp|13|no}}||Extra flags||??&lt;br /&gt;
|-&lt;br /&gt;
|31||B||{{ottdp|14|no|ottdrev=g2d73076056}}||Additional callback flags bit mask, see below||yes&lt;br /&gt;
|-&lt;br /&gt;
|32||W||{{ottdp|15|no|ottdrev=gd2496b6ec4}}||Cargo classes required for refittability||yes&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Description =&lt;br /&gt;
&lt;br /&gt;
== Track type (05) ==&lt;br /&gt;
Set track type of vehicle: 0 = rail, 1 = monorail, 2 = maglev. For setting the appropriate traction type, see [[Action0Trains#Engine traction type 19|prop19]].&lt;br /&gt;
&lt;br /&gt;
{{ottdp|1.0|no}} In OpenTTD, if a [[Action0Railtypes|rail type]] translation table is loaded, this property is an index into the table instead.&lt;br /&gt;
&lt;br /&gt;
== Speed (09) ==&lt;br /&gt;
&lt;br /&gt;
Train speed is in units of mph*1.6, i.e. approximately km/h.&lt;br /&gt;
&lt;br /&gt;
For wagons, this value is only used if the &amp;quot;wagonspeedlimit&amp;quot; switch is on, and it limits the speed of the train to that of the lowest wagon speed. &amp;amp;nbsp;This limit is ignored for wagons with a livery override for the current train, so that train sets always get their max speed from the engine&#039;s max speed.&lt;br /&gt;
&lt;br /&gt;
For wagons, a value of 0 means &amp;quot;default&amp;quot; (which depends on cargo type and date of introduction), and FFFF means no limit.&lt;br /&gt;
&lt;br /&gt;
== Power (0B) ==&lt;br /&gt;
&lt;br /&gt;
The power of the engine, in HP.&lt;br /&gt;
&lt;br /&gt;
A value of 0 means that the vehicle will be a wagon, otherwise it will be an engine.&lt;br /&gt;
&lt;br /&gt;
== Running cost base (0E) and factor (0D) ==&lt;br /&gt;
&lt;br /&gt;
TTD calculates all costs by multiplying a 32-bit [[BaseCosts|base amount]] with an 8-bit factor. &amp;amp;nbsp;The base amount is changed according to inflation, whereas the factor remains constant.&lt;br /&gt;
&lt;br /&gt;
For the running costs of train vehicles, the following base amounts are available depending on the vehicle type (the value here is a pointer into TTD&#039;s memory where the actual amount is stored):&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Type!!Value!!in little-endian notation&lt;br /&gt;
|-&lt;br /&gt;
|Steam engines||4C30||30 4C 00 00&lt;br /&gt;
|-&lt;br /&gt;
|Diesel engines||4C36||36 4C 00 00&lt;br /&gt;
|-&lt;br /&gt;
|Electric engines||4C3C||3C 4C 00 00&lt;br /&gt;
|-&lt;br /&gt;
|Wagons||0||00 00 00 00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Theoretically, you could use pointers to other base amounts available in TTD, but these are the numbers TTD uses for train vehicles.&lt;br /&gt;
&lt;br /&gt;
The following are some real values for maintenance costs depending on the setting of the above two factors. &amp;amp;nbsp;This value is correct for medium difficulty, but increases and decreases for hard and easy difficulties respectively. &amp;amp;nbsp;These are the costs of a new game starting in 1921, because they obviously increase with inflation over time (unless noinflation is turned on).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Running cost base 4C30 (steam)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Running cost factor!!Maintenance cost&lt;br /&gt;
|-&lt;br /&gt;
|01||$ 42&lt;br /&gt;
|-&lt;br /&gt;
|10||$ 700&lt;br /&gt;
|-&lt;br /&gt;
|20||$ 1.400&lt;br /&gt;
|-&lt;br /&gt;
|80||$ 5.600&lt;br /&gt;
|-&lt;br /&gt;
|A0||$ 7.000&lt;br /&gt;
|-&lt;br /&gt;
|FF||$ 11.112&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Running cost base 4C36 (diesel)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Running cost factor!!Maintenance cost&lt;br /&gt;
|-&lt;br /&gt;
|01||$ 40&lt;br /&gt;
|-&lt;br /&gt;
|10||$ 650&lt;br /&gt;
|-&lt;br /&gt;
|20||$ 1.300&lt;br /&gt;
|-&lt;br /&gt;
|80||$ 5.200&lt;br /&gt;
|-&lt;br /&gt;
|A0||$ 6.500&lt;br /&gt;
|-&lt;br /&gt;
|FF||$ 10.318&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Running cost base 4C3C (electric)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Running cost factor!!Maintenance cost&lt;br /&gt;
|-&lt;br /&gt;
|01||$ 36&lt;br /&gt;
|-&lt;br /&gt;
|10||$ 600&lt;br /&gt;
|-&lt;br /&gt;
|20||$ 1.200&lt;br /&gt;
|-&lt;br /&gt;
|80||$ 4.800&lt;br /&gt;
|-&lt;br /&gt;
|A0||$ 6.000&lt;br /&gt;
|-&lt;br /&gt;
|FF||$ 9.524&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Cost factor (17) ==&lt;br /&gt;
&lt;br /&gt;
The cost factor is a bit-coded value which determines how expensive an engine is. There is no distinction between steam, diesel or electric engines, they all use the same cost factor. The table below gives you some values to use for finding the right price for your engines.&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Cost factor!!Price&lt;br /&gt;
|-&lt;br /&gt;
|01||$ 3.124&lt;br /&gt;
|-&lt;br /&gt;
|10||$ 50.000&lt;br /&gt;
|-&lt;br /&gt;
|20||$ 100.000&lt;br /&gt;
|-&lt;br /&gt;
|80||$ 400.000&lt;br /&gt;
|-&lt;br /&gt;
|A0||$ 500.000&lt;br /&gt;
|-&lt;br /&gt;
|FF||$ 796.874&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Engine traction type (19) ==&lt;br /&gt;
&lt;br /&gt;
This sets the traction type of a train engine, i.e. whether it is powered by steam, diesel, electric, monorail or maglev technology. &amp;amp;nbsp;It also sets the corresponding sound effect of the engine, and if property 22 is not set, the visual effect as well.&lt;br /&gt;
&lt;br /&gt;
The following ranges are available (and it does not matter which value you pick):&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Values!!Traction type&lt;br /&gt;
|-&lt;br /&gt;
|00..07||Steam&lt;br /&gt;
|-&lt;br /&gt;
|08..27||Diesel&lt;br /&gt;
|-&lt;br /&gt;
|28..31||Electric&lt;br /&gt;
|-&lt;br /&gt;
|32..37||Monorail&lt;br /&gt;
|-&lt;br /&gt;
|38..41||Maglev&lt;br /&gt;
|}&lt;br /&gt;
Default value is 00, i.e. steam. For setting the appropriate track type, see [[Action0Trains#Track type 05|prop05]].&lt;br /&gt;
&lt;br /&gt;
{{ottdp|1.1|no}} In OpenTTD, if a [[Action0Railtypes|rail type]] translation table is loaded, setting this property does NOT alter the track type.&lt;br /&gt;
&lt;br /&gt;
== Sort vehicle list (1A) ==&lt;br /&gt;
&lt;br /&gt;
This is not a property as such, but an action. &amp;amp;nbsp;It forces TTDPatch to shuffle the vehicle this &amp;quot;property&amp;quot; is being set for in front of the vehicle with the given value of the property. &amp;amp;nbsp;The order of this list is only used in the train purchase window.&lt;br /&gt;
&lt;br /&gt;
For example, setting prop. 1A for vehicle 09 to a value of 07 would lead to the following internal list: ... 05 06 09 07 08 0A 0B ...&lt;br /&gt;
&lt;br /&gt;
This property can not simply be overwritten, because the list is already shuffled when trying to do so.&lt;br /&gt;
&lt;br /&gt;
{{ottdp|no|2.0}} It is possible to reset the list to its original order with a special action 0 that has num-info set to 0, and only sets property 1A for trains:&lt;br /&gt;
&amp;lt;pre&amp;gt;00 00 01 00 00 1A&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resetting the list should however only be done by sets that contain replacements for all train vehicles.&lt;br /&gt;
&lt;br /&gt;
{{ottdp|0.7|no|ottdrev=r13831}} This property is an extended byte in OpenTTD since r13831!&lt;br /&gt;
&lt;br /&gt;
== Powered train wagons (1B and 23, see also 22) ==&lt;br /&gt;
&lt;br /&gt;
Normally, train wagons are unpowered in TTD, and if you set property 0B to a non-zero value, they become engines instead. &amp;amp;nbsp;Therefore, to model real-life trains where wagons have power, a different mechanism is needed.&lt;br /&gt;
To make train wagons powered, you set property 1B of the &#039;&#039;&#039;engine&#039;&#039;&#039; instead of the wagon. This determines how much power each wagon adds to the train when attached to this engine. This only applies to wagons with a [[Action3|graphics override]] for this engine as well. &amp;amp;nbsp;This means that for example passenger wagons (with an override) will add power, but coal wagons (with no override) will not.&lt;br /&gt;
&lt;br /&gt;
In addition to adding power, these wagons are also heavier by the amount set in property 23.&lt;br /&gt;
&lt;br /&gt;
== Refit cost (1C) ==&lt;br /&gt;
&lt;br /&gt;
Refit cost, using 50% of the [[BaseCosts|purchase price cost base]]. This property can be overridden by callback 15E.&lt;br /&gt;
&lt;br /&gt;
{{ottdp|1.2|no|ottdrev=r23087}} If the refit cost factor is set to zero and bit 4 of the miscellaneous flags (27) is set, auto-refitting is allowed.&lt;br /&gt;
&lt;br /&gt;
== Callbacks (1E, 31) ==&lt;br /&gt;
For trains, the following [[callbacks]] have to be enabled by setting the corresponding bit in properties 1E and 31 (certain other, not as frequently used callbacks are available without setting a bit here):&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Bit!!Value!!Variable 0C value!!Callback&lt;br /&gt;
|-&lt;br /&gt;
|0||1||10||Powered wagons and visual effect&lt;br /&gt;
|-&lt;br /&gt;
|1||2||11||Wagon length&lt;br /&gt;
|-&lt;br /&gt;
|2||4||12||Load amount&lt;br /&gt;
|-&lt;br /&gt;
|3||8||15||Set refitted capacity&lt;br /&gt;
|-&lt;br /&gt;
|4||10||16||Build articulated engines&lt;br /&gt;
|-&lt;br /&gt;
|5||20||19||show a suffix after the cargo type name&lt;br /&gt;
|-&lt;br /&gt;
|6||40||2D||Select color mapping for vehicle&lt;br /&gt;
|-&lt;br /&gt;
|7||80||33||Sound effect callbacks&lt;br /&gt;
|-&lt;br /&gt;
|8||100||161||{{ottd|14|ottdrev=gf5394ed2ef}}Engine name&lt;br /&gt;
|-&lt;br /&gt;
|9||200||163||{{ottdp|15|no|ottdrev=gd2496b6ec4}}Custom refit&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Bit is the bit you have to set, you do this by adding all the values for all the bits. Variable 0C value is what variable 0C will be set to, for checking it in the VarAction2 for callbacks.&lt;br /&gt;
&lt;br /&gt;
These callbacks do not need a bit to activate them, they are always active and will be used if defined in the action 3/action 2 chain.&lt;br /&gt;
{| |-&lt;br /&gt;
!Variable 0C value!!Callback&lt;br /&gt;
|-&lt;br /&gt;
|1D||Can wagon be attached&lt;br /&gt;
|-&lt;br /&gt;
|23||Additional text in purchase screen&lt;br /&gt;
|-&lt;br /&gt;
|31||Start/stop check&lt;br /&gt;
|-&lt;br /&gt;
|32||32-day callback&lt;br /&gt;
|-&lt;br /&gt;
|36||Change Vehicle Properties&lt;br /&gt;
|-&lt;br /&gt;
|15E||Refit cost&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Coefficient of tractive effort (1F) ==&lt;br /&gt;
&lt;br /&gt;
This cofficient sets what fraction of the vehicle weight is equal to the maximum tractive effort. &amp;amp;nbsp;This includes the effect of having some unpowered axles, as well as the coefficient of friction that is available.&lt;br /&gt;
&lt;br /&gt;
Theoretically, this value should be calculated by taking the ratio of adhesive weight W&amp;lt;sub&amp;gt;adh&amp;lt;/sub&amp;gt; (i.e. the vehicle weight that rests on powered axles) times the coefficient of friction µ between the wheels and the rails to the total vehicle weight W, times 255, and convert to hex:&lt;br /&gt;
&lt;br /&gt;
prop. 1F = HEX ((W&amp;lt;sub&amp;gt;adh&amp;lt;/sub&amp;gt; * µ / W) * 255)&lt;br /&gt;
&lt;br /&gt;
With prop. 1F having a value of FF, the tractive effort is equal to the vehicle weight, for 80, it is half, and so on. If not set, a default of 4C is used, for a fraction of 0.30, corresponding to Wadh=W and a coefficient of friction of 0.30, which is the value used by the patch before TTDPatch 2.0.1 alpha 19.&lt;br /&gt;
&lt;br /&gt;
Sometimes you know the real-life tractive effort instead of adhesive weight and coefficient of friction. To help calculating prop. 1F in that case, here&#039;s a small example using the NS 1600 (Electric) with a mass of 84 tons and real-life tractive effort (TE&amp;lt;sub&amp;gt;real&amp;lt;/sub&amp;gt;) of 259 kN. To quickly find the value for property 1F you fill in the following formula:&lt;br /&gt;
&lt;br /&gt;
prop. 1F = HEX ((TE&amp;lt;sub&amp;gt;real&amp;lt;/sub&amp;gt; / (Mass * g) * 255)&lt;br /&gt;
&lt;br /&gt;
That may look confusing but you already know all variables:&lt;br /&gt;
&lt;br /&gt;
prop. 1F = HEX ((259 / (84 * 9.8) * 255)&lt;br /&gt;
&lt;br /&gt;
prop. 1F = HEX (0.3146 *255) = HEX(80.229)&lt;br /&gt;
&lt;br /&gt;
HEX calculations only work with figures in the natural domain: each figure has to be a positive and round figure. Therefore the value you convert to HEX isn&#039;t 80.229 but 80:&lt;br /&gt;
&lt;br /&gt;
HEX 80 = 50&lt;br /&gt;
&lt;br /&gt;
Property 1F for the NS 1600 (Electric) would then be: 1F 50.&lt;br /&gt;
&lt;br /&gt;
== Coefficient of air drag (20) ==&lt;br /&gt;
&lt;br /&gt;
This property sets the air drag coefficient c2 used for the realistic acceleration model, from 01 (no airdrag) to FF (most air drag) in arbitrary units. 00 means to use the default value that depends on the top speed (to simulate the fact that high-speed engines are more streamlined).&lt;br /&gt;
&lt;br /&gt;
The default values are the following:&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!top speed (mph/1.6)!!	&amp;lt;16!!	16!!	24!!	32!!	48!!	64!!	96!!	128!!	192!!	256!!	...&lt;br /&gt;
|-&lt;br /&gt;
|c2||	192||	128||	96||	64||	48||	32||	24||	16||	12||	8&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For higher speeds, the series is continued in the same manner.&lt;br /&gt;
&lt;br /&gt;
Air drag in Newtons will then be c2*v*v with v in m/s, although it is probably futile to attempt to make c2 a realistic number due to the lack of TTD&#039;s consistent scaling. If a train doesn&#039;t reach its historical top speed, you might try setting the value of prop. 20 one or two steps lower than the default above, otherwise it&#039;s probably a good idea to leave it at the default.&lt;br /&gt;
&lt;br /&gt;
== Shorter train vehicles (21) ==&lt;br /&gt;
&lt;br /&gt;
This property reduces the length of train vehicles, in units of 1/8th (12.5%). The value 00 means the vehicle has the full length, 01 means shorter by 1/8th (12.5%), up to 05=shorter by 5/8ths (62.5%). Larger numbers will not work properly&lt;br /&gt;
&amp;lt;ref&amp;gt;{{ottdp|1.0|no|ottdrev=r15793}} This restriction has been removed in OpenTTD r15793. Every vehicle can have a length between 1/8 and 8/8 independent of its position in the chain.&amp;lt;/ref&amp;gt;,&lt;br /&gt;
except at the end of the train&lt;br /&gt;
&amp;lt;ref&amp;gt;{{ottdp|&amp;amp;lt;1.0|}} This means that it is only safe to use values larger than 05 in the length callback making sure that they are only returned for the very last vehicle in the train. Otherwise the train will occasionally fall apart, with the wagons after the shortest one stopping to move.&amp;lt;/ref&amp;gt;. The vehicle length is set whenever it leaves a depot. This property does not work for the first vehicle in a train (i.e. the engine).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Visual effects and wagon power (22) ==&lt;br /&gt;
&lt;br /&gt;
By default, the visual effect of train engines is determined by the traction type (property 19). With this option you can change the type of effect as well as the position of it relative to the vehicle. (Note: for TTDPatch and OpenTTD up to r21229 only the positioning of steam actually works. For {{ottdp|1.1|no|ottdrev=r21230}} positioning diesel smoke and electric sparks works as well) The position of the effect provides a range from 0 to F that is added to the type of the effect.&lt;br /&gt;
&lt;br /&gt;
Position 0 corresponds to a point half a vehicle length ahead of the vehicle, 4 is the front of the vehicle, 8 the middle, C the end and F is a half length behind the vehicle. Intermediate values are in-between.&lt;br /&gt;
&lt;br /&gt;
Additionally, this property can be used to disable powered wagons of this type, although that is usually done with [[Callbacks#Visual_effect_and_wagon_power_.2810.29| callback 10]] instead (which has the same meaning as prop. 22, but is more flexible).&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Range	!!Effect type&lt;br /&gt;
|-&lt;br /&gt;
|00..0F||Use the default effect type, but reposition it. For engines this is defined via property 19, wagons have no default effect.&lt;br /&gt;
|-&lt;br /&gt;
|10..1F||Steam puffs&lt;br /&gt;
|-&lt;br /&gt;
|20..2F||Diesel fumes&lt;br /&gt;
|-&lt;br /&gt;
|30..3F||Electric sparks&lt;br /&gt;
|-&lt;br /&gt;
|40||Disable visual effect&lt;br /&gt;
|-&lt;br /&gt;
|41..7F||{{ottdp|1.5|no|ottdrev=r26747}} Create effects with [[Callbacks#Advanced_effect_creation_.28160.29|Callback 160]] using one of these spawning models:&lt;br /&gt;
* 41 Steam: Gradually less effects when approaching max speed&lt;br /&gt;
* 42 Diesel: Effect proportional to acceleration, no effect when idling at top speed&lt;br /&gt;
* 43 Electric: Random effect, gradually less likely when approaching max spped&lt;br /&gt;
* 44-7F Reserved&lt;br /&gt;
|-&lt;br /&gt;
|80+00..80+7F||Same as 00..7F above, but disable wagon power&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For example, 28 would make the wagon powered and emit diesel fumes, but 80+28 = A8 would only emit the diesel fumes without adding power.&lt;br /&gt;
&lt;br /&gt;
== Miscellaneous flags (27) ==&lt;br /&gt;
&lt;br /&gt;
This is a bit mask, with the following bits:&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Bit!!	Value!!	Version !!Meaning&lt;br /&gt;
|-&lt;br /&gt;
|0||	1||{{ottdp|0.6|2.5}}||	Vehicle tilts in curves, and thus gets speed bonus &amp;lt;ref&amp;gt;The tilting speed bonus only applies if all vehicles in the train have this bit set. In TTDPatch it requires the &amp;quot;curves&amp;quot; switch to be on. For realistic curves, it gives the train two free curving pieces with no speed decrease, and for other settings, it increases the curves setting by one (0-&amp;gt;1, 1-&amp;gt;2, 2-&amp;gt;2). In OpenTTD, the curve speed limit increases by 20% if &#039;realistic&#039; acceleration is enabled, else there is no effect.&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|1||	2||{{ottdp|0.6|2.5}}||	Uses two company colors&lt;br /&gt;
|-&lt;br /&gt;
|2||	4||{{ottdp|0.6|2.5}}||	Vehicle is a multiple unit (DMU/EMU), for colour selection&lt;br /&gt;
|-&lt;br /&gt;
|3||	8||Varies|| {{ottdp|1.1|no|ottdrev=r21966}}Vehicle can be flipped around in the depot. &amp;lt;br&amp;gt;{{ottdp|13|no|no}}This flag is no longer required, vehicles can always be flipped. &lt;br /&gt;
&amp;lt;ref&amp;gt;From {{ottd|13|no}} onwards, OpenTTD will again allow all vehicles to flip, and will automatically adjust offsets accordingly. From {{ottd|13|no}}, if this flag is set, OpenTTD will not automatically apply the correct offsets for vehicles &amp;lt; 8/8 long, and will defer to offsets set by the grf. Do not set this flag unless you need it for a specific reason.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
For {{ottd|1.1|r21966}} up to {{ottdp|12|no|no}} when you enable flipping of a vehicle in a depot you must make sure that the graphics are correctly aligned when flipped as well. Especially in the case of shortened vehicles.  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Prior to {{ottd|1.1|r21966}} all non-multiheaded/non-articulated vehicles would be able to flip around in the depot. As such {{ottd|1.1|r21966}} disables a &amp;quot;feature&amp;quot; in OpenTTD, but often it makes no sense to flip vehicles around (symetric vehicles) or the graphics are wrong (most shortened vehicles), and thus only enabling this when the NewGRF developer says it is possible is better.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
For all relevant OpenTTD versions, the flipping bit has no effect for multiheaded or articulated vehicles as they cannot be flipped in depot. &lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|4||   10||{{ottdp|1.2|no|ottdrev=r23087}}|| Auto-refitting is enabled for refits where callback 15E allows it or prop 1C specifies zero cost&lt;br /&gt;
|-&lt;br /&gt;
|5||   20||{{ottdp|1.2|no|ottdrev=r23861}}|| Use cargo multiplier for default cargo (and load amount). See page about [[VehicleRefitting#Misc._vehicle_flag_5_.27use_of_capacity_multiplier_for_default_cargo.27_set|vehicle refitting]].&lt;br /&gt;
|-&lt;br /&gt;
|6||   40||{{ottdp|1.3|no|ottdrev=r24124}}|| Disable breakdown smoke effect.&lt;br /&gt;
|-&lt;br /&gt;
|7||   80||{{ottdp|1.7|no|ottdrev=r27668}}|| [[Action2/Vehicles#Composing_vehicles_from_multiple_sprites|Compose vehicle from multiple sprites.]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Cargo classes (28, 29, 32) ==&lt;br /&gt;
&lt;br /&gt;
To make vehicle sets more compatible with future new cargo definitions, these three properties allow vehicles to define what type of cargo they should be refittable to. A wagon will be refittable to all cargo types that match any of the classes set in prop. 28 &#039;&#039;and&#039;&#039; have all of the classes set in prop. 32, except for the ones that match any of the classes set in prop. 29. In addition, afterwards those cargo types listed in prop. 1D will be toggled. In terms of logic, it is&lt;br /&gt;
&lt;br /&gt;
Refit list = (cargos from prop. 28 filtered by prop. 32 AND NOT cargos from prop. 29) XOR cargos from prop. 1D&lt;br /&gt;
&lt;br /&gt;
This means, if a cargo type is in the list because it matches props 28/31 but not prop 29, having the respective bit set in prop. 1D will disable it again. Conversely, if the cargo type is not in the list, the bit in prop. 1D will add it. This way, if props. 28/29 are unset, prop. 1D will retain the original meaning, but it is still able to selectively add or remove certain cargo types even if props. 28/29 are used.&lt;br /&gt;
&lt;br /&gt;
As a consequence, you have both full control over the cargo types that you know of (using prop. 1D), and those you don&#039;t know of yet (using props. 28/29). Leave the bits for cargos that you don&#039;t know of unset in prop. 1D, and set/clear the bits for known cargos to add/remove them from the list as appropriate.&lt;br /&gt;
&lt;br /&gt;
{{ottd|1.2|r23291}} It is recommended to use properties 2C and 2D instead of property 1D, as property 1D behaves badly if the cargo classes of a cargo are ever changed.&lt;br /&gt;
&lt;br /&gt;
The class list is a bit mask. See the action0 cargos page for bits and classes defined so far.&lt;br /&gt;
&lt;br /&gt;
Take a look at [[Action0Cargos#Cargo classes 16|Action0 for cargos]] for the classes defined so far.&lt;br /&gt;
&lt;br /&gt;
Note that cargo types may belong to several classes. This is the reason for making three properties, an additive, a filter, and a subtractive one, because this way a vehicle can be specified to be refittable to, for example, all express cargo that does not require refrigeration (i.e., from the default cargos, no food).&lt;br /&gt;
For the cargo types added in this way, the vehicle will probably have no specific graphics (in [[Action3|action 3]]) to show the cargo load. &amp;amp;nbsp;In this case, the default will be used, which should therefore be sufficiently generic-looking if possible. However, using [[VariationalAction2/Vehicles#Vehicle cargo info 47|vehicle variable 47]] you can at least select the graphics most appropriate for the cargo type&#039;s class.&lt;br /&gt;
About the interaction with other properties take a look at the summary page about [[VehicleRefitting|vehicle refitting]].&lt;br /&gt;
&lt;br /&gt;
Disclaimer: there is no guarantee that classes won&#039;t vary over time or between sets. The classes of a cargo may change between different versions of a specific industry/cargo newgrf, or different classes may be set for the same cargo label by different industry/cargo newgrfs. Feel free to use classes in your set for conveniently refitting to cargos, but if you - the vehicle author - care about specific cargos being transported in specific vehicles, use label based refits (changing labels without a very good reason is considered to be bad practice).&lt;br /&gt;
&lt;br /&gt;
== Long format introduction date (2A) ==&lt;br /&gt;
&lt;br /&gt;
Set the vehicle introduction date, in days since the year 0. This takes account of leap years; dividable by 4, but not 100 unless 400. A start date of 1920-01-01 is obtained with a value of 701265 (51 B3 0A 00). This property must be set after property 00 to take effect.&lt;br /&gt;
&lt;br /&gt;
{{ottdp|no|}} In TTDPatch, dates after 2044 will be limited to 2044.&lt;br /&gt;
&lt;br /&gt;
== Custom cargo ageing period (2B) ==&lt;br /&gt;
&lt;br /&gt;
This property allows to modify the period in ticks after which cargo carried by the vehicle is aged. By default, cargo is aged every 185 ticks. A value of 0 disables ageing of cargo. This property can be modified via [[Callbacks#Change_vehicle_properties_.2836.29|callback 36]].&lt;br /&gt;
&lt;br /&gt;
Changing this value from the default does not automatically make the vehicle earn more or less.  Predicting the effect is complicated, as it depends on many things, including: vehicle speed, route length, route delays, transfer credits, the payment curve set by the cargo, and whether the cargo is already aged from a previous transfer when the vehicle loads it.&lt;br /&gt;
&lt;br /&gt;
Authors are advised that tests show this property can lead to disappointment. Avoid, or use with caution.&lt;br /&gt;
&lt;br /&gt;
== List of always refittable cargo types (2C, 2D) ==&lt;br /&gt;
&lt;br /&gt;
These two properties allows to unconditionally include or exclude cargo types for refittability independent of any of the other refit properties or the cargo classes. If you specify a cargo type that is not available, the cargo type will be silently ignored.&lt;br /&gt;
&lt;br /&gt;
The format for both properties is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;2C/2D &amp;amp;lt;nvar&amp;amp;gt; (&amp;amp;lt;Index into cargo type table&amp;amp;gt;){n}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That is you give the number of cargos in a single byte followed by a list of that length of indexes into the cargo translation table ([[CargoTypes|Type A]]).&lt;br /&gt;
&lt;br /&gt;
== Maximum curve speed modifier (2E) ==&lt;br /&gt;
&lt;br /&gt;
This property allows to give vehicles a maximum curve speed modifier. The given value is treated as a signed word with 8 fractional bits. This property can be modified via [[Callbacks#Change_vehicle_properties_.2836.29|callback 36]].&lt;br /&gt;
&lt;br /&gt;
The modifier is applied after the normal curve speed calculation is done using the formula max_curve_speed * (1 + prop 2E). This means that the default property value of 0 is equivalent to no change. While values less than -1.0 are technically possible, the resulting vehicle curve speed is clamped at 2 mph-ish to make sure vehicles don&#039;t become permanently stuck.&lt;br /&gt;
&lt;br /&gt;
If different vehicles in a train have different curve speed modifiers, the lowest value wins.&lt;br /&gt;
&lt;br /&gt;
== Vehicle variant group (2F) ==&lt;br /&gt;
&lt;br /&gt;
This property supports grouping vehicles in the purchase menu (also the autoreplace menu). The property value is the ID of another vehicle in the same GRF which will act as the parent for vehicles in the group.&lt;br /&gt;
&lt;br /&gt;
Groups can also be nested (this is experimental as of December 2022 and may change with testing).&lt;br /&gt;
&lt;br /&gt;
See also [[Action0Trains#Extra flags (30)|vehicle extra flags]] which can influence the behaviour of vehicles in variant groups.&lt;br /&gt;
&lt;br /&gt;
See also https://github.com/OpenTTD/OpenTTD/pull/10220&lt;br /&gt;
&lt;br /&gt;
== Extra flags (30) ==&lt;br /&gt;
&lt;br /&gt;
This is a bit mask, with the following bits:&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Bit!!	Value!!	Version !!Meaning&lt;br /&gt;
|-&lt;br /&gt;
|0||	1||{{ottdp|13|no}}||	Disable &amp;quot;New Vehicle&amp;quot; news message for this engine&lt;br /&gt;
|-&lt;br /&gt;
|1||	2||{{ottdp|13|no}}||	Disable &amp;quot;Exclusive Preview&amp;quot; for this engine&lt;br /&gt;
|-&lt;br /&gt;
|2||	4||{{ottdp|13|no}}||	Variants - Include this variant when primary engine has &amp;quot;Exclusive Preview&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|3||	8||{{ottdp|13|no}}||		Variants - (Attempt to) Synchronize reliability the primary engine&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Extra callback flags (31) ==&lt;br /&gt;
&lt;br /&gt;
See [[#Callbacks_.281E.2C_31.29]]&lt;br /&gt;
&lt;br /&gt;
= Example =&lt;br /&gt;
&lt;br /&gt;
Below is an example of what a real Action 0 pseudo-sprite could look like for a train engine.&lt;br /&gt;
&lt;br /&gt;
(A basic version)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;10 * 14 &amp;amp;nbsp;00 00 03 01 02 09 C0 00 0B D8 0E 12 FD&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!&#039;&#039;&#039;Bytes&#039;&#039;&#039;!!&#039;&#039;&#039;Meaning&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|10||&amp;amp;lt;Sprite-number&amp;amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|14||&amp;amp;lt;Length&amp;amp;gt;: of the action in bytes; start counting at 0 (&amp;amp;lt;action&amp;amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
|00||&amp;amp;lt;action&amp;amp;gt;: sets this pseudo-sprite to function as action 0&lt;br /&gt;
|-&lt;br /&gt;
|00||&amp;amp;lt;Feature&amp;amp;gt;: In this case Train&lt;br /&gt;
|-&lt;br /&gt;
|03||&amp;amp;lt;Num-props&amp;amp;gt;: 3 Properties to change&lt;br /&gt;
|-&lt;br /&gt;
|01||&amp;amp;lt;Num-info&amp;amp;gt;: 1 vehicle ID to make changes to&lt;br /&gt;
|-&lt;br /&gt;
|02||&amp;amp;lt;ids...&amp;amp;gt;: vehcile ID (02 - Ploddyphut Choo-Choo)&lt;br /&gt;
|-&lt;br /&gt;
|||&#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|09||&amp;amp;lt;Speed&amp;amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|C0 00||&amp;amp;lt;Value&amp;amp;gt;: Value for Speed (192 Km/h)&lt;br /&gt;
|-&lt;br /&gt;
|0B||&amp;amp;lt;Power&amp;amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|D8 0E||&amp;amp;lt;value&amp;amp;gt;: value for Power (3800 HP)&lt;br /&gt;
|-&lt;br /&gt;
|12||&amp;amp;lt;Sprite ID&amp;amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|FD||&amp;amp;lt;value&amp;amp;gt;: FD for new graphics&lt;br /&gt;
|}&lt;br /&gt;
Since nfo version 7, so-called [[GRFActionsDetailed#Byte order|&amp;quot;escape sequences&amp;quot;]] have been introduced in an attempt to offer a more human-readable form.&lt;br /&gt;
&lt;br /&gt;
Below is the same example as above, with escape sequences being used:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;-1 * 0 00 00 \b3 01 \b*2 // \b&amp;amp;lt;number of props to change&amp;amp;gt; \b*&amp;amp;lt;vehicle ID&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp;09 \w192 // value for speed (192 Km/h)&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp;0B \w3800 // value for power (3800 hp)&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp;12 FD // use new graphics&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Michi cc</name></author>
	</entry>
	<entry>
		<id>https://newgrf-specs.tt-wiki.net/index.php?title=Action0/Vehicles/Trains&amp;diff=4885</id>
		<title>Action0/Vehicles/Trains</title>
		<link rel="alternate" type="text/html" href="https://newgrf-specs.tt-wiki.net/index.php?title=Action0/Vehicles/Trains&amp;diff=4885"/>
		<updated>2024-11-18T21:44:43Z</updated>

		<summary type="html">&lt;p&gt;Michi cc: PR #13090&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right; padding-left:12px; background:none;&amp;quot;&amp;gt;{{NFONavVehicles}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
Defining properties of train vehicles.&lt;br /&gt;
&lt;br /&gt;
= Properties =&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Number!![[GRFActionsDetailed|Size]]!!Version!!Description!!Available for articulated parts&lt;br /&gt;
|-&lt;br /&gt;
|05||B||{{ottdp|0.6|2.0}}||Track type (see below)||should be same as front&lt;br /&gt;
|-&lt;br /&gt;
|08||B||{{ottdp|0.6|2.0}}||AI special flag: set to 1 if engine is &#039;optimized&#039; for passenger service (AI won&#039;t use it for other cargo), 0 otherwise||no&lt;br /&gt;
|-&lt;br /&gt;
|09||W||{{ottdp|0.6|2.0}}||Speed in mph*1.6 (see below)||no&lt;br /&gt;
|-&lt;br /&gt;
|0B||W||{{ottdp|0.6|2.0}}||Power (0 for wagons)||should be zero&lt;br /&gt;
|-&lt;br /&gt;
|0D||B||{{ottdp|0.6|2.0}}||Running cost factor (0 for wagons)||should be zero&lt;br /&gt;
|-&lt;br /&gt;
|0E||D||{{ottdp|0.6|2.0}}||Running cost base, see below||should be zero&lt;br /&gt;
|-&lt;br /&gt;
|12||B||{{ottdp|0.6|2.0}}||Sprite ID (FD for new graphics)||yes&lt;br /&gt;
|-&lt;br /&gt;
|13||B||{{ottdp|0.6|2.0}}||Dual-headed flag; 1 if dual-headed engine, 0 otherwise||should be zero also for front&lt;br /&gt;
|-&lt;br /&gt;
|14||B||{{ottdp|0.6|2.0}}||Cargo capacity||yes&lt;br /&gt;
|-&lt;br /&gt;
|15||B||{{ottdp|0.6|2.0}}||Cargo type, see [[CargoTypes]]&amp;lt;br/&amp;gt;&lt;br /&gt;
{{grfTill|7}} For GRF version 7 and below: Type B &#039;cargo slot&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
{{grfFrom|8}} For GRF version 8 and above: Type A &#039;(translated) cargo bit&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
{{ottd|15.0}} Since 15.0, a default cargo translation table corresponding to the climate is used if one is not provided.&lt;br /&gt;
||yes&lt;br /&gt;
|-&lt;br /&gt;
|16||B||{{ottdp|0.6|2.0}}||Weight in tons||should be zero&lt;br /&gt;
|-&lt;br /&gt;
|17||B||{{ottdp|0.6|2.0}}||Cost factor||should be zero&lt;br /&gt;
|-&lt;br /&gt;
|18||B||{{ottdp|&amp;amp;lt;0.7|2.0}}&amp;lt;ref&amp;gt;This property is not used by OpenTTDs NoAI API.&amp;lt;/ref&amp;gt;||Engine rank for the AI (AI selects the highest-rank engine of those it can buy)||no&lt;br /&gt;
|-&lt;br /&gt;
|19||B||{{ottdp|0.6|2.0}} {{grfFrom|1}}||Engine traction type (see below)||no&lt;br /&gt;
|-&lt;br /&gt;
|1A||B/B*&amp;lt;ref&amp;gt;{{ottdp|0.7|no|ottdrev=r13831}} Since OpenTTD r13831 this is an extended byte.&amp;lt;/ref&amp;gt;||{{ottdp|0.6|2.0}} {{grfFrom|1}}||Not a property, but an action: sort the purchase list.||no&lt;br /&gt;
|-&lt;br /&gt;
|1B||W||{{ottdp|0.6|2.5}} {{grfFrom|6}}||Power added by each wagon connected to this engine, see below||should be zero&lt;br /&gt;
|-&lt;br /&gt;
|1C||B||{{ottdp|0.6|2.5}} {{grfFrom|6}}||Refit cost, using 50% of the [[BaseCosts|purchase price cost base]]||yes&lt;br /&gt;
|-&lt;br /&gt;
|1D||D||{{ottdp|0.6|2.5}} {{grfFrom|6}}||Bit mask of cargo types available for refitting, see column 2 (bit value) in [[CargoTypes]]. &amp;lt;b&amp;gt;Obsoleted by properties 2C/2D&amp;lt;/b&amp;gt;||yes&lt;br /&gt;
|-&lt;br /&gt;
|1E||B||{{ottdp|0.6|2.5}} {{grfFrom|6}}||Callback flags bit mask, see below||yes&lt;br /&gt;
|-&lt;br /&gt;
|1F||B||{{ottdp|0.6|2.5|ttdprev=alpha 19}}||Coefficient of tractive effort||should be zero&lt;br /&gt;
|-&lt;br /&gt;
|20||B||{{ottdp|1.1|2.5|ttdprev=alpha 27}}||Coefficient of air drag||should be zero&lt;br /&gt;
|-&lt;br /&gt;
|21||B||{{ottdp|0.6|2.0}} {{grfFrom|2}}||Make vehicle shorter by this amount, see below||yes&lt;br /&gt;
|-&lt;br /&gt;
|22||B||{{ottdp|0.6|2.5}} {{grfFrom|6}}||Set visual effect type (steam/smoke/sparks) as well as position, see below||yes&lt;br /&gt;
|-&lt;br /&gt;
|23||B||{{ottdp|0.6|2.5}} {{grfFrom|6}}||Set how much weight is added by making wagons powered (i.e. weight of engine), see below||should be zero&lt;br /&gt;
|-&lt;br /&gt;
|24||B||{{ottdp|0.6|2.5|ttdprev=alpha 44}}||High byte of vehicle weight, weight will be prop.24*256+prop.16||should be zero&lt;br /&gt;
|-&lt;br /&gt;
|25||B||{{ottdp|0.6|2.5|ttdprev=alpha 44}}||User-defined bit mask to set when checking veh. var. 42||yes&lt;br /&gt;
|-&lt;br /&gt;
|26||B||{{ottdp|0.6|2.5|ttdprev=alpha 44}}||Retire vehicle early, this many years before the end of phase 2 (see [[Action0General]])||no&lt;br /&gt;
|-&lt;br /&gt;
|27||B||{{ottdp|0.6|2.5|ttdprev=alpha 58}}||Miscellaneous flags||partly&lt;br /&gt;
|-&lt;br /&gt;
|28||W||{{ottdp|0.6|2.5|ttdprev=alpha 58}}||Refittable cargo classes||yes&lt;br /&gt;
|-&lt;br /&gt;
|29||W||{{ottdp|0.6|2.5|ttdprev=alpha 58}}||Non-refittable cargo classes||yes&lt;br /&gt;
|-&lt;br /&gt;
|2A||D||{{ottdp|0.6|2.5|ottdrev=r7191|ttdprev=r1210}}||Long format introduction date||no&lt;br /&gt;
|-&lt;br /&gt;
|2B||W||{{ottdp|1.2|no|ottdrev=r22713}}||Custom cargo ageing period||yes&lt;br /&gt;
|-&lt;br /&gt;
|2C||B n*B||{{ottdp|1.2|no|ottdrev=r23291}}||List of always refittable cargo types||yes&lt;br /&gt;
|-&lt;br /&gt;
|2D||B n*B||{{ottdp|1.2|no|ottdrev=r23291}}||List of never refittable cargo types||yes&lt;br /&gt;
|-&lt;br /&gt;
|2E||W||{{ottdp|12|no|ottdrev=g2183fd4dab}}||Maximum curve speed modifier||yes&lt;br /&gt;
|-&lt;br /&gt;
|2F||W||{{ottdp|13|no}}||Vehicle variant group||no&lt;br /&gt;
|-&lt;br /&gt;
|30||D||{{ottdp|13|no}}||Extra flags||??&lt;br /&gt;
|-&lt;br /&gt;
|31||B||{{ottdp|14|no|ottdrev=g2d73076056}}||Additional callback flags bit mask, see below||yes&lt;br /&gt;
|-&lt;br /&gt;
|32||W||{{ottdp|15|no|ottdrev=gd2496b6ec4}}||Cargo classes required for refittability||yes&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Description =&lt;br /&gt;
&lt;br /&gt;
== Track type (05) ==&lt;br /&gt;
Set track type of vehicle: 0 = rail, 1 = monorail, 2 = maglev. For setting the appropriate traction type, see [[Action0Trains#Engine traction type 19|prop19]].&lt;br /&gt;
&lt;br /&gt;
{{ottdp|1.0|no}} In OpenTTD, if a [[Action0Railtypes|rail type]] translation table is loaded, this property is an index into the table instead.&lt;br /&gt;
&lt;br /&gt;
== Speed (09) ==&lt;br /&gt;
&lt;br /&gt;
Train speed is in units of mph*1.6, i.e. approximately km/h.&lt;br /&gt;
&lt;br /&gt;
For wagons, this value is only used if the &amp;quot;wagonspeedlimit&amp;quot; switch is on, and it limits the speed of the train to that of the lowest wagon speed. &amp;amp;nbsp;This limit is ignored for wagons with a livery override for the current train, so that train sets always get their max speed from the engine&#039;s max speed.&lt;br /&gt;
&lt;br /&gt;
For wagons, a value of 0 means &amp;quot;default&amp;quot; (which depends on cargo type and date of introduction), and FFFF means no limit.&lt;br /&gt;
&lt;br /&gt;
== Power (0B) ==&lt;br /&gt;
&lt;br /&gt;
The power of the engine, in HP.&lt;br /&gt;
&lt;br /&gt;
A value of 0 means that the vehicle will be a wagon, otherwise it will be an engine.&lt;br /&gt;
&lt;br /&gt;
== Running cost base (0E) and factor (0D) ==&lt;br /&gt;
&lt;br /&gt;
TTD calculates all costs by multiplying a 32-bit [[BaseCosts|base amount]] with an 8-bit factor. &amp;amp;nbsp;The base amount is changed according to inflation, whereas the factor remains constant.&lt;br /&gt;
&lt;br /&gt;
For the running costs of train vehicles, the following base amounts are available depending on the vehicle type (the value here is a pointer into TTD&#039;s memory where the actual amount is stored):&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Type!!Value!!in little-endian notation&lt;br /&gt;
|-&lt;br /&gt;
|Steam engines||4C30||30 4C 00 00&lt;br /&gt;
|-&lt;br /&gt;
|Diesel engines||4C36||36 4C 00 00&lt;br /&gt;
|-&lt;br /&gt;
|Electric engines||4C3C||3C 4C 00 00&lt;br /&gt;
|-&lt;br /&gt;
|Wagons||0||00 00 00 00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Theoretically, you could use pointers to other base amounts available in TTD, but these are the numbers TTD uses for train vehicles.&lt;br /&gt;
&lt;br /&gt;
The following are some real values for maintenance costs depending on the setting of the above two factors. &amp;amp;nbsp;This value is correct for medium difficulty, but increases and decreases for hard and easy difficulties respectively. &amp;amp;nbsp;These are the costs of a new game starting in 1921, because they obviously increase with inflation over time (unless noinflation is turned on).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Running cost base 4C30 (steam)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Running cost factor!!Maintenance cost&lt;br /&gt;
|-&lt;br /&gt;
|01||$ 42&lt;br /&gt;
|-&lt;br /&gt;
|10||$ 700&lt;br /&gt;
|-&lt;br /&gt;
|20||$ 1.400&lt;br /&gt;
|-&lt;br /&gt;
|80||$ 5.600&lt;br /&gt;
|-&lt;br /&gt;
|A0||$ 7.000&lt;br /&gt;
|-&lt;br /&gt;
|FF||$ 11.112&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Running cost base 4C36 (diesel)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Running cost factor!!Maintenance cost&lt;br /&gt;
|-&lt;br /&gt;
|01||$ 40&lt;br /&gt;
|-&lt;br /&gt;
|10||$ 650&lt;br /&gt;
|-&lt;br /&gt;
|20||$ 1.300&lt;br /&gt;
|-&lt;br /&gt;
|80||$ 5.200&lt;br /&gt;
|-&lt;br /&gt;
|A0||$ 6.500&lt;br /&gt;
|-&lt;br /&gt;
|FF||$ 10.318&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Running cost base 4C3C (electric)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Running cost factor!!Maintenance cost&lt;br /&gt;
|-&lt;br /&gt;
|01||$ 36&lt;br /&gt;
|-&lt;br /&gt;
|10||$ 600&lt;br /&gt;
|-&lt;br /&gt;
|20||$ 1.200&lt;br /&gt;
|-&lt;br /&gt;
|80||$ 4.800&lt;br /&gt;
|-&lt;br /&gt;
|A0||$ 6.000&lt;br /&gt;
|-&lt;br /&gt;
|FF||$ 9.524&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Cost factor (17) ==&lt;br /&gt;
&lt;br /&gt;
The cost factor is a bit-coded value which determines how expensive an engine is. There is no distinction between steam, diesel or electric engines, they all use the same cost factor. The table below gives you some values to use for finding the right price for your engines.&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Cost factor!!Price&lt;br /&gt;
|-&lt;br /&gt;
|01||$ 3.124&lt;br /&gt;
|-&lt;br /&gt;
|10||$ 50.000&lt;br /&gt;
|-&lt;br /&gt;
|20||$ 100.000&lt;br /&gt;
|-&lt;br /&gt;
|80||$ 400.000&lt;br /&gt;
|-&lt;br /&gt;
|A0||$ 500.000&lt;br /&gt;
|-&lt;br /&gt;
|FF||$ 796.874&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Engine traction type (19) ==&lt;br /&gt;
&lt;br /&gt;
This sets the traction type of a train engine, i.e. whether it is powered by steam, diesel, electric, monorail or maglev technology. &amp;amp;nbsp;It also sets the corresponding sound effect of the engine, and if property 22 is not set, the visual effect as well.&lt;br /&gt;
&lt;br /&gt;
The following ranges are available (and it does not matter which value you pick):&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Values!!Traction type&lt;br /&gt;
|-&lt;br /&gt;
|00..07||Steam&lt;br /&gt;
|-&lt;br /&gt;
|08..27||Diesel&lt;br /&gt;
|-&lt;br /&gt;
|28..31||Electric&lt;br /&gt;
|-&lt;br /&gt;
|32..37||Monorail&lt;br /&gt;
|-&lt;br /&gt;
|38..41||Maglev&lt;br /&gt;
|}&lt;br /&gt;
Default value is 00, i.e. steam. For setting the appropriate track type, see [[Action0Trains#Track type 05|prop05]].&lt;br /&gt;
&lt;br /&gt;
{{ottdp|1.1|no}} In OpenTTD, if a [[Action0Railtypes|rail type]] translation table is loaded, setting this property does NOT alter the track type.&lt;br /&gt;
&lt;br /&gt;
== Sort vehicle list (1A) ==&lt;br /&gt;
&lt;br /&gt;
This is not a property as such, but an action. &amp;amp;nbsp;It forces TTDPatch to shuffle the vehicle this &amp;quot;property&amp;quot; is being set for in front of the vehicle with the given value of the property. &amp;amp;nbsp;The order of this list is only used in the train purchase window.&lt;br /&gt;
&lt;br /&gt;
For example, setting prop. 1A for vehicle 09 to a value of 07 would lead to the following internal list: ... 05 06 09 07 08 0A 0B ...&lt;br /&gt;
&lt;br /&gt;
This property can not simply be overwritten, because the list is already shuffled when trying to do so.&lt;br /&gt;
&lt;br /&gt;
{{ottdp|no|2.0}} It is possible to reset the list to its original order with a special action 0 that has num-info set to 0, and only sets property 1A for trains:&lt;br /&gt;
&amp;lt;pre&amp;gt;00 00 01 00 00 1A&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resetting the list should however only be done by sets that contain replacements for all train vehicles.&lt;br /&gt;
&lt;br /&gt;
{{ottdp|0.7|no|ottdrev=r13831}} This property is an extended byte in OpenTTD since r13831!&lt;br /&gt;
&lt;br /&gt;
== Powered train wagons (1B and 23, see also 22) ==&lt;br /&gt;
&lt;br /&gt;
Normally, train wagons are unpowered in TTD, and if you set property 0B to a non-zero value, they become engines instead. &amp;amp;nbsp;Therefore, to model real-life trains where wagons have power, a different mechanism is needed.&lt;br /&gt;
To make train wagons powered, you set property 1B of the &#039;&#039;&#039;engine&#039;&#039;&#039; instead of the wagon. This determines how much power each wagon adds to the train when attached to this engine. This only applies to wagons with a [[Action3|graphics override]] for this engine as well. &amp;amp;nbsp;This means that for example passenger wagons (with an override) will add power, but coal wagons (with no override) will not.&lt;br /&gt;
&lt;br /&gt;
In addition to adding power, these wagons are also heavier by the amount set in property 23.&lt;br /&gt;
&lt;br /&gt;
== Refit cost (1C) ==&lt;br /&gt;
&lt;br /&gt;
Refit cost, using 50% of the [[BaseCosts|purchase price cost base]]. This property can be overridden by callback 15E.&lt;br /&gt;
&lt;br /&gt;
{{ottdp|1.2|no|ottdrev=r23087}} If the refit cost factor is set to zero and bit 4 of the miscellaneous flags (27) is set, auto-refitting is allowed.&lt;br /&gt;
&lt;br /&gt;
== Callbacks (1E, 31) ==&lt;br /&gt;
For trains, the following [[callbacks]] have to be enabled by setting the corresponding bit in properties 1E and 31 (certain other, not as frequently used callbacks are available without setting a bit here):&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Bit!!Value!!Variable 0C value!!Callback&lt;br /&gt;
|-&lt;br /&gt;
|0||1||10||Powered wagons and visual effect&lt;br /&gt;
|-&lt;br /&gt;
|1||2||11||Wagon length&lt;br /&gt;
|-&lt;br /&gt;
|2||4||12||Load amount&lt;br /&gt;
|-&lt;br /&gt;
|3||8||15||Set refitted capacity&lt;br /&gt;
|-&lt;br /&gt;
|4||10||16||Build articulated engines&lt;br /&gt;
|-&lt;br /&gt;
|5||20||19||show a suffix after the cargo type name&lt;br /&gt;
|-&lt;br /&gt;
|6||40||2D||Select color mapping for vehicle&lt;br /&gt;
|-&lt;br /&gt;
|7||80||33||Sound effect callbacks&lt;br /&gt;
|-&lt;br /&gt;
|8||100||161||{{ottd|14|ottdrev=gf5394ed2ef}}Engine name&lt;br /&gt;
|-&lt;br /&gt;
|9||200||163||{{ottdp|15|no|ottdrev=gd2496b6ec4}}Custom refit&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Bit is the bit you have to set, you do this by adding all the values for all the bits. Variable 0C value is what variable 0C will be set to, for checking it in the VarAction2 for callbacks.&lt;br /&gt;
&lt;br /&gt;
These callbacks do not need a bit to activate them, they are always active and will be used if defined in the action 3/action 2 chain.&lt;br /&gt;
{| |-&lt;br /&gt;
!Variable 0C value!!Callback&lt;br /&gt;
|-&lt;br /&gt;
|1D||Can wagon be attached&lt;br /&gt;
|-&lt;br /&gt;
|23||Additional text in purchase screen&lt;br /&gt;
|-&lt;br /&gt;
|31||Start/stop check&lt;br /&gt;
|-&lt;br /&gt;
|32||32-day callback&lt;br /&gt;
|-&lt;br /&gt;
|36||Change Vehicle Properties&lt;br /&gt;
|-&lt;br /&gt;
|15E||Refit cost&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Coefficient of tractive effort (1F) ==&lt;br /&gt;
&lt;br /&gt;
This cofficient sets what fraction of the vehicle weight is equal to the maximum tractive effort. &amp;amp;nbsp;This includes the effect of having some unpowered axles, as well as the coefficient of friction that is available.&lt;br /&gt;
&lt;br /&gt;
Theoretically, this value should be calculated by taking the ratio of adhesive weight W&amp;lt;sub&amp;gt;adh&amp;lt;/sub&amp;gt; (i.e. the vehicle weight that rests on powered axles) times the coefficient of friction µ between the wheels and the rails to the total vehicle weight W, times 255, and convert to hex:&lt;br /&gt;
&lt;br /&gt;
prop. 1F = HEX ((W&amp;lt;sub&amp;gt;adh&amp;lt;/sub&amp;gt; * µ / W) * 255)&lt;br /&gt;
&lt;br /&gt;
With prop. 1F having a value of FF, the tractive effort is equal to the vehicle weight, for 80, it is half, and so on. If not set, a default of 4C is used, for a fraction of 0.30, corresponding to Wadh=W and a coefficient of friction of 0.30, which is the value used by the patch before TTDPatch 2.0.1 alpha 19.&lt;br /&gt;
&lt;br /&gt;
Sometimes you know the real-life tractive effort instead of adhesive weight and coefficient of friction. To help calculating prop. 1F in that case, here&#039;s a small example using the NS 1600 (Electric) with a mass of 84 tons and real-life tractive effort (TE&amp;lt;sub&amp;gt;real&amp;lt;/sub&amp;gt;) of 259 kN. To quickly find the value for property 1F you fill in the following formula:&lt;br /&gt;
&lt;br /&gt;
prop. 1F = HEX ((TE&amp;lt;sub&amp;gt;real&amp;lt;/sub&amp;gt; / (Mass * g) * 255)&lt;br /&gt;
&lt;br /&gt;
That may look confusing but you already know all variables:&lt;br /&gt;
&lt;br /&gt;
prop. 1F = HEX ((259 / (84 * 9.8) * 255)&lt;br /&gt;
&lt;br /&gt;
prop. 1F = HEX (0.3146 *255) = HEX(80.229)&lt;br /&gt;
&lt;br /&gt;
HEX calculations only work with figures in the natural domain: each figure has to be a positive and round figure. Therefore the value you convert to HEX isn&#039;t 80.229 but 80:&lt;br /&gt;
&lt;br /&gt;
HEX 80 = 50&lt;br /&gt;
&lt;br /&gt;
Property 1F for the NS 1600 (Electric) would then be: 1F 50.&lt;br /&gt;
&lt;br /&gt;
== Coefficient of air drag (20) ==&lt;br /&gt;
&lt;br /&gt;
This property sets the air drag coefficient c2 used for the realistic acceleration model, from 01 (no airdrag) to FF (most air drag) in arbitrary units. 00 means to use the default value that depends on the top speed (to simulate the fact that high-speed engines are more streamlined).&lt;br /&gt;
&lt;br /&gt;
The default values are the following:&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!top speed (mph/1.6)!!	&amp;lt;16!!	16!!	24!!	32!!	48!!	64!!	96!!	128!!	192!!	256!!	...&lt;br /&gt;
|-&lt;br /&gt;
|c2||	192||	128||	96||	64||	48||	32||	24||	16||	12||	8&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For higher speeds, the series is continued in the same manner.&lt;br /&gt;
&lt;br /&gt;
Air drag in Newtons will then be c2*v*v with v in m/s, although it is probably futile to attempt to make c2 a realistic number due to the lack of TTD&#039;s consistent scaling. If a train doesn&#039;t reach its historical top speed, you might try setting the value of prop. 20 one or two steps lower than the default above, otherwise it&#039;s probably a good idea to leave it at the default.&lt;br /&gt;
&lt;br /&gt;
== Shorter train vehicles (21) ==&lt;br /&gt;
&lt;br /&gt;
This property reduces the length of train vehicles, in units of 1/8th (12.5%). The value 00 means the vehicle has the full length, 01 means shorter by 1/8th (12.5%), up to 05=shorter by 5/8ths (62.5%). Larger numbers will not work properly&lt;br /&gt;
&amp;lt;ref&amp;gt;{{ottdp|1.0|no|ottdrev=r15793}} This restriction has been removed in OpenTTD r15793. Every vehicle can have a length between 1/8 and 8/8 independent of its position in the chain.&amp;lt;/ref&amp;gt;,&lt;br /&gt;
except at the end of the train&lt;br /&gt;
&amp;lt;ref&amp;gt;{{ottdp|&amp;amp;lt;1.0|}} This means that it is only safe to use values larger than 05 in the length callback making sure that they are only returned for the very last vehicle in the train. Otherwise the train will occasionally fall apart, with the wagons after the shortest one stopping to move.&amp;lt;/ref&amp;gt;. The vehicle length is set whenever it leaves a depot. This property does not work for the first vehicle in a train (i.e. the engine).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Visual effects and wagon power (22) ==&lt;br /&gt;
&lt;br /&gt;
By default, the visual effect of train engines is determined by the traction type (property 19). With this option you can change the type of effect as well as the position of it relative to the vehicle. (Note: for TTDPatch and OpenTTD up to r21229 only the positioning of steam actually works. For {{ottdp|1.1|no|ottdrev=r21230}} positioning diesel smoke and electric sparks works as well) The position of the effect provides a range from 0 to F that is added to the type of the effect.&lt;br /&gt;
&lt;br /&gt;
Position 0 corresponds to a point half a vehicle length ahead of the vehicle, 4 is the front of the vehicle, 8 the middle, C the end and F is a half length behind the vehicle. Intermediate values are in-between.&lt;br /&gt;
&lt;br /&gt;
Additionally, this property can be used to disable powered wagons of this type, although that is usually done with [[Callbacks#Visual_effect_and_wagon_power_.2810.29| callback 10]] instead (which has the same meaning as prop. 22, but is more flexible).&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Range	!!Effect type&lt;br /&gt;
|-&lt;br /&gt;
|00..0F||Use the default effect type, but reposition it. For engines this is defined via property 19, wagons have no default effect.&lt;br /&gt;
|-&lt;br /&gt;
|10..1F||Steam puffs&lt;br /&gt;
|-&lt;br /&gt;
|20..2F||Diesel fumes&lt;br /&gt;
|-&lt;br /&gt;
|30..3F||Electric sparks&lt;br /&gt;
|-&lt;br /&gt;
|40||Disable visual effect&lt;br /&gt;
|-&lt;br /&gt;
|41..7F||{{ottdp|1.5|no|ottdrev=r26747}} Create effects with [[Callbacks#Advanced_effect_creation_.28160.29|Callback 160]] using one of these spawning models:&lt;br /&gt;
* 41 Steam: Gradually less effects when approaching max speed&lt;br /&gt;
* 42 Diesel: Effect proportional to acceleration, no effect when idling at top speed&lt;br /&gt;
* 43 Electric: Random effect, gradually less likely when approaching max spped&lt;br /&gt;
* 44-7F Reserved&lt;br /&gt;
|-&lt;br /&gt;
|80+00..80+7F||Same as 00..7F above, but disable wagon power&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For example, 28 would make the wagon powered and emit diesel fumes, but 80+28 = A8 would only emit the diesel fumes without adding power.&lt;br /&gt;
&lt;br /&gt;
== Miscellaneous flags (27) ==&lt;br /&gt;
&lt;br /&gt;
This is a bit mask, with the following bits:&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Bit!!	Value!!	Version !!Meaning&lt;br /&gt;
|-&lt;br /&gt;
|0||	1||{{ottdp|0.6|2.5}}||	Vehicle tilts in curves, and thus gets speed bonus &amp;lt;ref&amp;gt;The tilting speed bonus only applies if all vehicles in the train have this bit set. In TTDPatch it requires the &amp;quot;curves&amp;quot; switch to be on. For realistic curves, it gives the train two free curving pieces with no speed decrease, and for other settings, it increases the curves setting by one (0-&amp;gt;1, 1-&amp;gt;2, 2-&amp;gt;2). In OpenTTD, the curve speed limit increases by 20% if &#039;realistic&#039; acceleration is enabled, else there is no effect.&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|1||	2||{{ottdp|0.6|2.5}}||	Uses two company colors&lt;br /&gt;
|-&lt;br /&gt;
|2||	4||{{ottdp|0.6|2.5}}||	Vehicle is a multiple unit (DMU/EMU), for colour selection&lt;br /&gt;
|-&lt;br /&gt;
|3||	8||Varies|| {{ottdp|1.1|no|ottdrev=r21966}}Vehicle can be flipped around in the depot. &amp;lt;br&amp;gt;{{ottdp|13|no|no}}This flag is no longer required, vehicles can always be flipped. &lt;br /&gt;
&amp;lt;ref&amp;gt;From {{ottd|13|no}} onwards, OpenTTD will again allow all vehicles to flip, and will automatically adjust offsets accordingly. From {{ottd|13|no}}, if this flag is set, OpenTTD will not automatically apply the correct offsets for vehicles &amp;lt; 8/8 long, and will defer to offsets set by the grf. Do not set this flag unless you need it for a specific reason.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
For {{ottd|1.1|r21966}} up to {{ottdp|12|no|no}} when you enable flipping of a vehicle in a depot you must make sure that the graphics are correctly aligned when flipped as well. Especially in the case of shortened vehicles.  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Prior to {{ottd|1.1|r21966}} all non-multiheaded/non-articulated vehicles would be able to flip around in the depot. As such {{ottd|1.1|r21966}} disables a &amp;quot;feature&amp;quot; in OpenTTD, but often it makes no sense to flip vehicles around (symetric vehicles) or the graphics are wrong (most shortened vehicles), and thus only enabling this when the NewGRF developer says it is possible is better.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
For all relevant OpenTTD versions, the flipping bit has no effect for multiheaded or articulated vehicles as they cannot be flipped in depot. &lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|4||   10||{{ottdp|1.2|no|ottdrev=r23087}}|| Auto-refitting is enabled for refits where callback 15E allows it or prop 1C specifies zero cost&lt;br /&gt;
|-&lt;br /&gt;
|5||   20||{{ottdp|1.2|no|ottdrev=r23861}}|| Use cargo multiplier for default cargo (and load amount). See page about [[VehicleRefitting#Misc._vehicle_flag_5_.27use_of_capacity_multiplier_for_default_cargo.27_set|vehicle refitting]].&lt;br /&gt;
|-&lt;br /&gt;
|6||   40||{{ottdp|1.3|no|ottdrev=r24124}}|| Disable breakdown smoke effect.&lt;br /&gt;
|-&lt;br /&gt;
|7||   80||{{ottdp|1.7|no|ottdrev=r27668}}|| [[Action2/Vehicles#Composing_vehicles_from_multiple_sprites|Compose vehicle from multiple sprites.]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Cargo classes (28, 29, 31) ==&lt;br /&gt;
&lt;br /&gt;
To make vehicle sets more compatible with future new cargo definitions, these three properties allow vehicles to define what type of cargo they should be refittable to. A wagon will be refittable to all cargo types that match any of the classes set in prop. 28 &#039;&#039;and&#039;&#039; have all of the classes set in prop. 31, except for the ones that match any of the classes set in prop. 29. In addition, afterwards those cargo types listed in prop. 1D will be toggled. In terms of logic, it is&lt;br /&gt;
&lt;br /&gt;
Refit list = (cargos from prop. 28 filtered by prop. 31 AND NOT cargos from prop. 29) XOR cargos from prop. 1D&lt;br /&gt;
&lt;br /&gt;
This means, if a cargo type is in the list because it matches props 28/31 but not prop 29, having the respective bit set in prop. 1D will disable it again. Conversely, if the cargo type is not in the list, the bit in prop. 1D will add it. This way, if props. 28/29 are unset, prop. 1D will retain the original meaning, but it is still able to selectively add or remove certain cargo types even if props. 28/29 are used.&lt;br /&gt;
&lt;br /&gt;
As a consequence, you have both full control over the cargo types that you know of (using prop. 1D), and those you don&#039;t know of yet (using props. 28/29). Leave the bits for cargos that you don&#039;t know of unset in prop. 1D, and set/clear the bits for known cargos to add/remove them from the list as appropriate.&lt;br /&gt;
&lt;br /&gt;
{{ottd|1.2|r23291}} It is recommended to use properties 2C and 2D instead of property 1D, as property 1D behaves badly if the cargo classes of a cargo are ever changed.&lt;br /&gt;
&lt;br /&gt;
The class list is a bit mask. See the action0 cargos page for bits and classes defined so far.&lt;br /&gt;
&lt;br /&gt;
Take a look at [[Action0Cargos#Cargo classes 16|Action0 for cargos]] for the classes defined so far.&lt;br /&gt;
&lt;br /&gt;
Note that cargo types may belong to several classes. This is the reason for making three properties, an additive, a filter, and a subtractive one, because this way a vehicle can be specified to be refittable to, for example, all express cargo that does not require refrigeration (i.e., from the default cargos, no food).&lt;br /&gt;
For the cargo types added in this way, the vehicle will probably have no specific graphics (in [[Action3|action 3]]) to show the cargo load. &amp;amp;nbsp;In this case, the default will be used, which should therefore be sufficiently generic-looking if possible. However, using [[VariationalAction2/Vehicles#Vehicle cargo info 47|vehicle variable 47]] you can at least select the graphics most appropriate for the cargo type&#039;s class.&lt;br /&gt;
About the interaction with other properties take a look at the summary page about [[VehicleRefitting|vehicle refitting]].&lt;br /&gt;
&lt;br /&gt;
Disclaimer: there is no guarantee that classes won&#039;t vary over time or between sets. The classes of a cargo may change between different versions of a specific industry/cargo newgrf, or different classes may be set for the same cargo label by different industry/cargo newgrfs. Feel free to use classes in your set for conveniently refitting to cargos, but if you - the vehicle author - care about specific cargos being transported in specific vehicles, use label based refits (changing labels without a very good reason is considered to be bad practice).&lt;br /&gt;
&lt;br /&gt;
== Long format introduction date (2A) ==&lt;br /&gt;
&lt;br /&gt;
Set the vehicle introduction date, in days since the year 0. This takes account of leap years; dividable by 4, but not 100 unless 400. A start date of 1920-01-01 is obtained with a value of 701265 (51 B3 0A 00). This property must be set after property 00 to take effect.&lt;br /&gt;
&lt;br /&gt;
{{ottdp|no|}} In TTDPatch, dates after 2044 will be limited to 2044.&lt;br /&gt;
&lt;br /&gt;
== Custom cargo ageing period (2B) ==&lt;br /&gt;
&lt;br /&gt;
This property allows to modify the period in ticks after which cargo carried by the vehicle is aged. By default, cargo is aged every 185 ticks. A value of 0 disables ageing of cargo. This property can be modified via [[Callbacks#Change_vehicle_properties_.2836.29|callback 36]].&lt;br /&gt;
&lt;br /&gt;
Changing this value from the default does not automatically make the vehicle earn more or less.  Predicting the effect is complicated, as it depends on many things, including: vehicle speed, route length, route delays, transfer credits, the payment curve set by the cargo, and whether the cargo is already aged from a previous transfer when the vehicle loads it.&lt;br /&gt;
&lt;br /&gt;
Authors are advised that tests show this property can lead to disappointment. Avoid, or use with caution.&lt;br /&gt;
&lt;br /&gt;
== List of always refittable cargo types (2C, 2D) ==&lt;br /&gt;
&lt;br /&gt;
These two properties allows to unconditionally include or exclude cargo types for refittability independent of any of the other refit properties or the cargo classes. If you specify a cargo type that is not available, the cargo type will be silently ignored.&lt;br /&gt;
&lt;br /&gt;
The format for both properties is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;2C/2D &amp;amp;lt;nvar&amp;amp;gt; (&amp;amp;lt;Index into cargo type table&amp;amp;gt;){n}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That is you give the number of cargos in a single byte followed by a list of that length of indexes into the cargo translation table ([[CargoTypes|Type A]]).&lt;br /&gt;
&lt;br /&gt;
== Maximum curve speed modifier (2E) ==&lt;br /&gt;
&lt;br /&gt;
This property allows to give vehicles a maximum curve speed modifier. The given value is treated as a signed word with 8 fractional bits. This property can be modified via [[Callbacks#Change_vehicle_properties_.2836.29|callback 36]].&lt;br /&gt;
&lt;br /&gt;
The modifier is applied after the normal curve speed calculation is done using the formula max_curve_speed * (1 + prop 2E). This means that the default property value of 0 is equivalent to no change. While values less than -1.0 are technically possible, the resulting vehicle curve speed is clamped at 2 mph-ish to make sure vehicles don&#039;t become permanently stuck.&lt;br /&gt;
&lt;br /&gt;
If different vehicles in a train have different curve speed modifiers, the lowest value wins.&lt;br /&gt;
&lt;br /&gt;
== Vehicle variant group (2F) ==&lt;br /&gt;
&lt;br /&gt;
This property supports grouping vehicles in the purchase menu (also the autoreplace menu). The property value is the ID of another vehicle in the same GRF which will act as the parent for vehicles in the group.&lt;br /&gt;
&lt;br /&gt;
Groups can also be nested (this is experimental as of December 2022 and may change with testing).&lt;br /&gt;
&lt;br /&gt;
See also [[Action0Trains#Extra flags (30)|vehicle extra flags]] which can influence the behaviour of vehicles in variant groups.&lt;br /&gt;
&lt;br /&gt;
See also https://github.com/OpenTTD/OpenTTD/pull/10220&lt;br /&gt;
&lt;br /&gt;
== Extra flags (30) ==&lt;br /&gt;
&lt;br /&gt;
This is a bit mask, with the following bits:&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Bit!!	Value!!	Version !!Meaning&lt;br /&gt;
|-&lt;br /&gt;
|0||	1||{{ottdp|13|no}}||	Disable &amp;quot;New Vehicle&amp;quot; news message for this engine&lt;br /&gt;
|-&lt;br /&gt;
|1||	2||{{ottdp|13|no}}||	Disable &amp;quot;Exclusive Preview&amp;quot; for this engine&lt;br /&gt;
|-&lt;br /&gt;
|2||	4||{{ottdp|13|no}}||	Variants - Include this variant when primary engine has &amp;quot;Exclusive Preview&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|3||	8||{{ottdp|13|no}}||		Variants - (Attempt to) Synchronize reliability the primary engine&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Extra callback flags (31) ==&lt;br /&gt;
&lt;br /&gt;
See [[#Callbacks_.281E.2C_31.29]]&lt;br /&gt;
&lt;br /&gt;
= Example =&lt;br /&gt;
&lt;br /&gt;
Below is an example of what a real Action 0 pseudo-sprite could look like for a train engine.&lt;br /&gt;
&lt;br /&gt;
(A basic version)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;10 * 14 &amp;amp;nbsp;00 00 03 01 02 09 C0 00 0B D8 0E 12 FD&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!&#039;&#039;&#039;Bytes&#039;&#039;&#039;!!&#039;&#039;&#039;Meaning&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|10||&amp;amp;lt;Sprite-number&amp;amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|14||&amp;amp;lt;Length&amp;amp;gt;: of the action in bytes; start counting at 0 (&amp;amp;lt;action&amp;amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
|00||&amp;amp;lt;action&amp;amp;gt;: sets this pseudo-sprite to function as action 0&lt;br /&gt;
|-&lt;br /&gt;
|00||&amp;amp;lt;Feature&amp;amp;gt;: In this case Train&lt;br /&gt;
|-&lt;br /&gt;
|03||&amp;amp;lt;Num-props&amp;amp;gt;: 3 Properties to change&lt;br /&gt;
|-&lt;br /&gt;
|01||&amp;amp;lt;Num-info&amp;amp;gt;: 1 vehicle ID to make changes to&lt;br /&gt;
|-&lt;br /&gt;
|02||&amp;amp;lt;ids...&amp;amp;gt;: vehcile ID (02 - Ploddyphut Choo-Choo)&lt;br /&gt;
|-&lt;br /&gt;
|||&#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|09||&amp;amp;lt;Speed&amp;amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|C0 00||&amp;amp;lt;Value&amp;amp;gt;: Value for Speed (192 Km/h)&lt;br /&gt;
|-&lt;br /&gt;
|0B||&amp;amp;lt;Power&amp;amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|D8 0E||&amp;amp;lt;value&amp;amp;gt;: value for Power (3800 HP)&lt;br /&gt;
|-&lt;br /&gt;
|12||&amp;amp;lt;Sprite ID&amp;amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|FD||&amp;amp;lt;value&amp;amp;gt;: FD for new graphics&lt;br /&gt;
|}&lt;br /&gt;
Since nfo version 7, so-called [[GRFActionsDetailed#Byte order|&amp;quot;escape sequences&amp;quot;]] have been introduced in an attempt to offer a more human-readable form.&lt;br /&gt;
&lt;br /&gt;
Below is the same example as above, with escape sequences being used:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;-1 * 0 00 00 \b3 01 \b*2 // \b&amp;amp;lt;number of props to change&amp;amp;gt; \b*&amp;amp;lt;vehicle ID&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp;09 \w192 // value for speed (192 Km/h)&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp;0B \w3800 // value for power (3800 hp)&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp;12 FD // use new graphics&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Michi cc</name></author>
	</entry>
	<entry>
		<id>https://newgrf-specs.tt-wiki.net/index.php?title=Callbacks&amp;diff=4884</id>
		<title>Callbacks</title>
		<link rel="alternate" type="text/html" href="https://newgrf-specs.tt-wiki.net/index.php?title=Callbacks&amp;diff=4884"/>
		<updated>2024-11-18T21:34:14Z</updated>

		<summary type="html">&lt;p&gt;Michi cc: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
A callback is a special action 2 that the patch &amp;quot;calls&amp;quot; in order to modify various features, an example being the visual effect of train vehicles. &amp;amp;nbsp;See the [[ttwiki:CallbacksTut|callback tutorial]] on how to use them.&lt;br /&gt;
&lt;br /&gt;
In the final action 2 of a chain of VarAction2s, the second byte of the matching entry has to have bit 7 set to identify it as a callback result.&lt;br /&gt;
&lt;br /&gt;
For example, 04 00 is not a callback result (but it may be the ID of another chained action 2), whereas 04 80 is a callback result with a value of 4. In total a callback has 15 bit result values, where the upper 7 bits are stored in the second byte. For example, 54 C2 is a callback result with a value of 4254=16980, where again the second byte has bit 7 set, changing the 42 into C2.&lt;br /&gt;
&lt;br /&gt;
{{grfTill|7}} For GRF version 7 and below not all 15 bit values are available as return values, only values between 00 and 7EFF.&lt;br /&gt;
For compatibility with earlier patch versions, FF in the high byte is taken to mean the same thing as 80, so 04 FF also has a callback result of 4. Note that if your grf file needs to be compatible with versions before TTDPatch 2.0.1 alpha 40, you must set the high byte to FF, and so can use only 8 bit results.&lt;br /&gt;
&lt;br /&gt;
{{grfFrom|8}} For GRF version 8 and above this compatibility layer has been removed. Callbacks can return all 15 bit values between 00 and 7FFF.&lt;br /&gt;
&lt;br /&gt;
To check for a specific callback, use an [[VariationalAction2]] or [[VarAction2Advanced]] to check for variable 0C.&lt;br /&gt;
* Variable 0C contains the callback number.&lt;br /&gt;
* Variable 0C is a word, thus the VarAction2 must use type 85.&lt;br /&gt;
* Results can be specified directly using 8xxx values (see above), or with 8xxx value in subsequent (Basic/Variational/Random)Action2 which are referenced as usual with their set-id.&lt;br /&gt;
* The default case of the VarAction2 must point to the regular graphics chain, so that unknown/future callbacks results in a &amp;quot;callback failure&amp;quot; result.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
 &amp;lt;Sprite-number&amp;gt; * &amp;lt;Length&amp;gt; 02 &amp;lt;feature&amp;gt; &amp;lt;set-id&amp;gt; 85 0C 00 \wxFFFF&lt;br /&gt;
                               &amp;lt;nvar&amp;gt; (&amp;lt;set-id/result&amp;gt; \wx &amp;lt;callback&amp;gt; \wx &amp;lt;callback&amp;gt;){n}&lt;br /&gt;
                                       &amp;lt;set-id of graphics chain&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The format for VarAction2 is explained in detail on the [[VariationalAction2]] page.&lt;br /&gt;
&lt;br /&gt;
== List of callbacks ==&lt;br /&gt;
&lt;br /&gt;
The following callbacks are defined by the patch. &amp;amp;nbsp;The number of the callback is what will be stored in variable 0C so that you can return the right results if you have several callbacks. &amp;amp;nbsp;All callbacks are explained in more detail below.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PLEASE NOTE:&#039;&#039;&#039; Since TTDPatch 2.5 beta 5, the size of variable 0C has changed, and now there are word-sized callback numbers as well. To maintain backwards compatibility, only callbacks 10..3F can be checked using a byte-sized check. Callbacks 140 and above, on the other hand, must be checked using a word or dword sized check, to make sure they are identified uniquely.&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Number!!Feature(s)!!Meaning&lt;br /&gt;
|-&lt;br /&gt;
|10||Vehicles||[[Callback: Visual effect and wagon power|Visual effect and wagon power]]&lt;br /&gt;
|-&lt;br /&gt;
|11||Vehicles||[[Callback: Wagon length|Wagon length]]&lt;br /&gt;
|-&lt;br /&gt;
|12||Vehicles||[[Callback: Load amount|Load amount]]&lt;br /&gt;
|-&lt;br /&gt;
|13||Stations||[[Callback: Station availability|Station availability]]&lt;br /&gt;
|-&lt;br /&gt;
|14||Stations||[[Callback: Station sprite layout|Select sprite layout]]&lt;br /&gt;
|-&lt;br /&gt;
|15||Vehicles||[[Callback: Refitted capacity callback|Refitted capacity callback]]&lt;br /&gt;
|-&lt;br /&gt;
|16||Trains||[[Callback: Articulated engine|Build articulated engines]]&lt;br /&gt;
|-&lt;br /&gt;
|17||Houses||[[Callback: House construction check|House construction check]]&lt;br /&gt;
|-&lt;br /&gt;
|18||Several &amp;lt;ref name=&amp;quot;generic&amp;quot;&amp;gt;Generic callbacks are called for the feature, not any specific vehicle ID. Read the [[Action3#n-id|Action 3]] entry on how to define these.&amp;lt;/ref&amp;gt;||[[Callback: AI construction/purchase selection|AI construction/purchase selection]]&lt;br /&gt;
|-&lt;br /&gt;
|19||Vehicles||[[Callback: Cargo Subtype Display|Cargo sub-type display]]&lt;br /&gt;
|-&lt;br /&gt;
|1A||Houses||Next animation frame&lt;br /&gt;
|-&lt;br /&gt;
|1B||Houses||Animation control&lt;br /&gt;
|-&lt;br /&gt;
|1C||Houses||Construction stage changes&lt;br /&gt;
|-&lt;br /&gt;
|1D||Trains||Can wagon be attached&lt;br /&gt;
|-&lt;br /&gt;
|1E||Houses||Decide colour of building&lt;br /&gt;
|-&lt;br /&gt;
|1F||Houses||Cargo acceptance&lt;br /&gt;
|-&lt;br /&gt;
|20||Houses||Length of animation frame&lt;br /&gt;
|-&lt;br /&gt;
|21||Houses||Trigger building destruction&lt;br /&gt;
|-&lt;br /&gt;
|22||Industries||Availability&lt;br /&gt;
|-&lt;br /&gt;
|23||Vehicles||Additional text in purchase screen&lt;br /&gt;
|-&lt;br /&gt;
|24||Stations||Custom station layout&lt;br /&gt;
|-&lt;br /&gt;
|25||Industry tiles||Animation control&lt;br /&gt;
|-&lt;br /&gt;
|26||Industry tiles||Next animation frame&lt;br /&gt;
|-&lt;br /&gt;
|27||Industry tiles||Length of animation frame&lt;br /&gt;
|-&lt;br /&gt;
|28||Industries||Industry location permissibility&lt;br /&gt;
|-&lt;br /&gt;
|29||Industries||Random production change&lt;br /&gt;
|-&lt;br /&gt;
|2A||Houses||Get accepted cargo types&lt;br /&gt;
|-&lt;br /&gt;
|2B||Industry tiles||Decide cargo acceptance&lt;br /&gt;
|-&lt;br /&gt;
|2C||Industry tiles||Get accepted cargo types&lt;br /&gt;
|-&lt;br /&gt;
|2D||Vehicles||Select colour mapping for vehicle&lt;br /&gt;
|-&lt;br /&gt;
|2E||Houses||Custom cargo production&lt;br /&gt;
|-&lt;br /&gt;
|2F||Industry tiles||Custom shape check&lt;br /&gt;
|-&lt;br /&gt;
|30||Industry tiles||Decide drawing default foundations&lt;br /&gt;
|-&lt;br /&gt;
|31||Vehicles||Start/stop check&lt;br /&gt;
|-&lt;br /&gt;
|32||Vehicles||32-day callback&lt;br /&gt;
|-&lt;br /&gt;
|33||Several||Sound effect callback&lt;br /&gt;
|-&lt;br /&gt;
|34||Vehicles &amp;lt;ref name=&amp;quot;generic&amp;quot;/&amp;gt;||Autoreplace vehicle selection&lt;br /&gt;
|-&lt;br /&gt;
|35||Industries||Monthly random production change&lt;br /&gt;
|-&lt;br /&gt;
|36||Vehicles||Change vehicle Properties&lt;br /&gt;
|-&lt;br /&gt;
|37||Industries||Cargo sub-type display&lt;br /&gt;
|-&lt;br /&gt;
|38||Industries||Show additional text in fund window&lt;br /&gt;
|-&lt;br /&gt;
|39||Cargoes||Custom profit calculation&lt;br /&gt;
|-&lt;br /&gt;
|3A||Industries||Show additional text in industry window&lt;br /&gt;
|-&lt;br /&gt;
|3B||Industries||Control special effects&lt;br /&gt;
|-&lt;br /&gt;
|3C||Industry tiles||Disable autosloping&lt;br /&gt;
|-&lt;br /&gt;
|3D||Industries||Opt out of accepting cargo&lt;br /&gt;
|-&lt;br /&gt;
|40..13F|| ||--Reserved--&lt;br /&gt;
|-&lt;br /&gt;
|140||Stations||Animation control&lt;br /&gt;
|-&lt;br /&gt;
|141||Stations||Next animation frame&lt;br /&gt;
|-&lt;br /&gt;
|142||Stations||Length of animation frame&lt;br /&gt;
|-&lt;br /&gt;
|143||Houses||Protect building conditionally&lt;br /&gt;
|-&lt;br /&gt;
|144||Sounds &amp;lt;ref name=&amp;quot;generic&amp;quot;/&amp;gt;||{{ottdp|1.2|2.6|ottdrev=r23144|ttdprev=r821}} Ambient sound effects&lt;br /&gt;
|-&lt;br /&gt;
|145||Cargoes||Custom station rating calculation&lt;br /&gt;
|-&lt;br /&gt;
|146||New Signals &amp;lt;ref name=&amp;quot;generic&amp;quot;/&amp;gt;||New signals sprite drawing&lt;br /&gt;
|-&lt;br /&gt;
|147||Canals||Add sprite offset&lt;br /&gt;
|-&lt;br /&gt;
|148||Houses||Watched cargo accepted&lt;br /&gt;
|-&lt;br /&gt;
|149||Stations||Land slope check&lt;br /&gt;
|-&lt;br /&gt;
|14A||Industries||Decide industry color&lt;br /&gt;
|-&lt;br /&gt;
|14B||Industries||Decide input cargo types&lt;br /&gt;
|-&lt;br /&gt;
|14C||Industries||Decide output cargo types&lt;br /&gt;
|-&lt;br /&gt;
|14D||Houses||Customized building name&lt;br /&gt;
|-&lt;br /&gt;
|14E||Houses||Decide drawing default foundations&lt;br /&gt;
|-&lt;br /&gt;
|14F||Houses||Disable autosloping&lt;br /&gt;
|-&lt;br /&gt;
|150||Airport tiles||{{ottdp|1.1|no|ottdrev=r19197}} Decide drawing default foundations&lt;br /&gt;
|-&lt;br /&gt;
|152||Airport tiles||{{ottdp|1.1|no|ottdrev=r19197}} Animation control&lt;br /&gt;
|-&lt;br /&gt;
|153||Airport tiles||{{ottdp|1.1|no|ottdrev=r19197}} Next Animation frame&lt;br /&gt;
|-&lt;br /&gt;
|154||Airport tiles||{{ottdp|1.1|no|ottdrev=r19197}} Length of animation frame&lt;br /&gt;
|-&lt;br /&gt;
|155||Airports||{{ottdp|1.1|no|ottdrev=r20373}} Extra information about airport layout in the build gui&lt;br /&gt;
|-&lt;br /&gt;
|156||Airports||{{ottdp|1.1|no|ottdrev=r20373}} Airport layout name&lt;br /&gt;
|-&lt;br /&gt;
|157||Objects||Land slope check&lt;br /&gt;
|-&lt;br /&gt;
|158||Objects||Next animation frame&lt;br /&gt;
|-&lt;br /&gt;
|159||Objects||Animation control&lt;br /&gt;
|-&lt;br /&gt;
|15A||Objects||Length of animation frame&lt;br /&gt;
|-&lt;br /&gt;
|15B||Objects||Decide colour of building&lt;br /&gt;
|-&lt;br /&gt;
|15C||Objects||Show additional text in building window&lt;br /&gt;
|-&lt;br /&gt;
|15D||Objects||Disable autosloping&lt;br /&gt;
|-&lt;br /&gt;
|15E||Vehicles||{{ottdp|1.2|no|ottdrev=r23124}} Refit cost factor&lt;br /&gt;
|-&lt;br /&gt;
|15F||Industries||{{ottdp|1.3|no|ottdrev=r24186}} Set initial production level on construction&lt;br /&gt;
|-&lt;br /&gt;
|160||Vehicles||{{ottdp|1.5|no|ottdrev=r26747}} Advanced effect creation&lt;br /&gt;
|-&lt;br /&gt;
|161||Vehicles||{{ottdp|14|no|ottdrev=g05ed9f56fd}} Engine name&lt;br /&gt;
|-&lt;br /&gt;
|162||Vehicles||{{ottdp|14|no|ottdrev=gddd609ce9b}} Probability of reversing rail vehicle on build&lt;br /&gt;
|-&lt;br /&gt;
|163||Vehicles||{{ottdp|15|no|ottdrev=gd2496b6ec4}} Custom refit&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{:Callback: Visual effect and wagon power}}&lt;br /&gt;
{{:Callback: Wagon length}}&lt;br /&gt;
{{:Callback: Load amount}}&lt;br /&gt;
{{:Callback: Station availability}}&lt;br /&gt;
{{:Callback: Station sprite layout}}&lt;br /&gt;
{{:Callback: Refitted capacity callback}}&lt;br /&gt;
{{:Callback: Articulated engine}}&lt;br /&gt;
{{:Callback: House construction check}}&lt;br /&gt;
{{:Callback: AI construction/purchase selection}}&lt;br /&gt;
{{:Callback: Cargo Subtype Display}}&lt;br /&gt;
{{:Callback: Next animation frame}}&lt;br /&gt;
{{:Callback: Animation control}}&lt;br /&gt;
{{:Callback: Construction stage changes}}&lt;br /&gt;
{{:Callback: Can wagon be attached}}&lt;br /&gt;
{{:Callback: Building colour}}&lt;br /&gt;
{{:Callback: Cargo acceptance}}&lt;br /&gt;
{{:Callback: Length of animation frame}}&lt;br /&gt;
{{:Callback: Trigger building destruction}}&lt;br /&gt;
{{:Callback: Industry availability}}&lt;br /&gt;
{{:Callback: Additional text in purchase screen}}&lt;br /&gt;
{{:Callback: Custom station layout}}&lt;br /&gt;
{{:Callback: Industry location permissibility}}&lt;br /&gt;
{{:Callback: Random production change}}&lt;br /&gt;
{{:Callback: Get accepted cargo types}}&lt;br /&gt;
{{:Callback: Decide cargo acceptance}}&lt;br /&gt;
{{:Callback: Select colour mapping for vehicle}}&lt;br /&gt;
{{:Callback: Custom cargo production}}&lt;br /&gt;
{{:Callback: Custom shape check}}&lt;br /&gt;
{{:Callback: Decide drawing default foundations}}&lt;br /&gt;
{{:Callback: Vehicle Start/stop check}}&lt;br /&gt;
{{:Callback: 32-day callback}}&lt;br /&gt;
{{:Callback: Sound effect}}&lt;br /&gt;
{{:Callback: Autoreplace vehicle selection}}&lt;br /&gt;
{{:Callback: Monthly random production change}}&lt;br /&gt;
{{:Callback: Change vehicle properties}}&lt;br /&gt;
{{:Callback: Cargo sub-type display for industries}}&lt;br /&gt;
{{:Callback: Show additional text in fund/building window}}&lt;br /&gt;
{{:Callback: Custom profit calculation for cargoes}}&lt;br /&gt;
{{:Callback: Show additional text in industry window}}&lt;br /&gt;
{{:Callback: Control special industry effects}}&lt;br /&gt;
{{:Callback: Disable autosloping}}&lt;br /&gt;
{{:Callback: Opt out of accepting cargo}}&lt;br /&gt;
{{:Callback: Protect building conditionally}}&lt;br /&gt;
{{:Callback: Ambient sound effects}}&lt;br /&gt;
{{:Callback: Custom station rating calculation}}&lt;br /&gt;
{{:Callback: New signals sprite drawing callback}}&lt;br /&gt;
{{:Callback: Add sprite offset callback}}&lt;br /&gt;
{{:Callback: Watched cargo accepted}}&lt;br /&gt;
{{:Callback: Station slope check}}&lt;br /&gt;
{{:Callback: Decide industry colour}}&lt;br /&gt;
{{:Callback: Decide input and output cargo types}}&lt;br /&gt;
{{:Callback: Customized building name}}&lt;br /&gt;
{{:Callback: Extra information about layout in the build gui}}&lt;br /&gt;
{{:Callback: Layout name}}&lt;br /&gt;
{{:Callback: Object slope check}}&lt;br /&gt;
{{:Callback: Decide object colour}}&lt;br /&gt;
{{:Callback: Refit cost factor}}&lt;br /&gt;
{{:Callback: Set initial production level on construction}}&lt;br /&gt;
{{:Callback: Advanced effect creation}}&lt;br /&gt;
{{:Callback: Engine name}}&lt;br /&gt;
{{:Callback: Build probability}}&lt;br /&gt;
{{:Callback: Custom refit}}&lt;/div&gt;</summary>
		<author><name>Michi cc</name></author>
	</entry>
	<entry>
		<id>https://newgrf-specs.tt-wiki.net/index.php?title=Callback:_Custom_refit&amp;diff=4883</id>
		<title>Callback: Custom refit</title>
		<link rel="alternate" type="text/html" href="https://newgrf-specs.tt-wiki.net/index.php?title=Callback:_Custom_refit&amp;diff=4883"/>
		<updated>2024-11-18T21:33:32Z</updated>

		<summary type="html">&lt;p&gt;Michi cc: PR#13090&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Custom refit (163) ==&lt;br /&gt;
&lt;br /&gt;
The custom refit callback allows overriding the refittablity of each cargo as defined by the standard vehicle properties. It will be called for each defined cargo type once after the game has loaded all NewGRF files. It needs to be enabled by a callback flag.&lt;br /&gt;
&lt;br /&gt;
The callback is run in purchase list scope, i.e. for cargotype FF. No variables of an actual vehicle are available. Information about the cargo type the callback is called for is available in variables 10 and 18:&lt;br /&gt;
&lt;br /&gt;
* variable 10:&lt;br /&gt;
{| |-&lt;br /&gt;
!bit numbers!!Meaning&lt;br /&gt;
|-&lt;br /&gt;
|0..15||[[Action0Cargos#CargoClasses_.2816.29 | Cargo classes]] of the cargo type&lt;br /&gt;
|-&lt;br /&gt;
|other bits||reserved for future use&lt;br /&gt;
|}&lt;br /&gt;
* variable 18:&lt;br /&gt;
{| |-&lt;br /&gt;
!bit numbers!!Meaning&lt;br /&gt;
|-&lt;br /&gt;
|0..7||Index of the cargo type in the cargo translation table&lt;br /&gt;
|-&lt;br /&gt;
|other bits||reserved for future use&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The callback has to return one of the following values:&lt;br /&gt;
{| |-&lt;br /&gt;
!Value!!Meaning&lt;br /&gt;
|-&lt;br /&gt;
|0|| Don&#039;t change refittability (i.e. use whatever the evaluation of the various refittability vehicle props has determined).&lt;br /&gt;
|-&lt;br /&gt;
|1|| Allow cargo type as a refit.&lt;br /&gt;
|-&lt;br /&gt;
|2|| Disallow cargo type as a refit.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
A failed callback is treated like a 0 return value.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; As this callback is not re-evaluated after game initialization, using any dynamic variables like e.g. game date will lead to undefined and faulty behaviour.&lt;br /&gt;
&lt;br /&gt;
This callback is available starting with {{ottdp|15|no|ottdrev=gd2496b6ec4}} OpenTTD 15.&lt;br /&gt;
&lt;br /&gt;
[[Category:Callbacks]]&lt;/div&gt;</summary>
		<author><name>Michi cc</name></author>
	</entry>
	<entry>
		<id>https://newgrf-specs.tt-wiki.net/index.php?title=VariationalAction2&amp;diff=4536</id>
		<title>VariationalAction2</title>
		<link rel="alternate" type="text/html" href="https://newgrf-specs.tt-wiki.net/index.php?title=VariationalAction2&amp;diff=4536"/>
		<updated>2023-09-10T17:57:37Z</updated>

		<summary type="html">&lt;p&gt;Michi cc: /* Type */ Related objects for airport (tiles)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
To support changes in graphics based on other factors than just the load states, you use a VarAction2. This provides a sophisticated way of deciding what graphics to use.&lt;br /&gt;
&lt;br /&gt;
A VarAction2 can be used like any other action 2, but it provides an additional step in-between: instead of defining the action 1 sets right away, it instead specifies a list of additional action 2 entry, one of which is used depending on the kind of variation that is defined. These action 2 entries that are referred can in turn be variational or random (to provide chains of decisions), or they can be the final element, that is a regular action 2 which contains definitions of action 1 sets, or a callback result.&lt;br /&gt;
&lt;br /&gt;
== Format ==&lt;br /&gt;
&lt;br /&gt;
The data looks as follows:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;Sprite-number&amp;gt; * &amp;lt;Length&amp;gt; 02 &amp;lt;feature&amp;gt; &amp;lt;set-id&amp;gt; &amp;lt;type&amp;gt; &amp;lt;variable&amp;gt; &amp;lt;varadjust&amp;gt; &amp;lt;nvar&amp;gt; (&amp;lt;set-id&amp;gt; &amp;lt;low-range&amp;gt; &amp;lt;high-range&amp;gt;){n} &amp;lt;default&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!&#039;&#039;&#039;Element&#039;&#039;&#039;!![[GRFActionsDetailed|&#039;&#039;&#039;Size&#039;&#039;&#039;]]!!&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;Sprite-number&amp;gt;||dec||A sequential sprite number&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;length&amp;gt;||dec||The total number of bytes used in this action.&lt;br /&gt;
|-&lt;br /&gt;
|02||B||Defines action 02&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;feature&amp;gt;||B||For what type of vehicle/station should this definition be used?&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;set-id&amp;gt;||B||The ID of this action 2 (used like a cargo ID)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;type&amp;gt;||B||Type of VarAction2, see below&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;variable&amp;gt;||B||Which variable we base the decision on&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;varadjust&amp;gt;||V||How to manipulate the value before deciding.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nvar&amp;gt;||B||Number of different ranges of the value (not counting the default)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;set-id&amp;gt;||W||Action 2 set-id to use for the following range.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;low-range&amp;gt;||B/W/D||Minimum (inclusive) of the range for which to use the above set-id&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;high-range&amp;gt;||B/W/D||Maximum (inclusive) of the range&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;default&amp;gt;||W||Action 2 set-id to use if no range matches&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The size of &amp;lt;varadjust&amp;gt; depends on &amp;lt;type&amp;gt; as well as the adjustments to be performed and must always provide an AND mask. For &amp;lt;type&amp;gt; 81, a &amp;quot;do nothing&amp;quot; &amp;lt;varadjust&amp;gt; would be 00 FF.&lt;br /&gt;
&lt;br /&gt;
You repeat the sequence of &amp;lt;set-id&amp;gt; &amp;lt;low-range&amp;gt; &amp;lt;high-range&amp;gt; as often as &amp;lt;nvar&amp;gt; specifies.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;low-range&amp;gt; and &amp;lt;high-range&amp;gt; have a size of B, W, or D, depending on &amp;lt;type&amp;gt;. See that entry for more information.&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
&lt;br /&gt;
=== Sprite-number ===&lt;br /&gt;
&lt;br /&gt;
This is just the number you are at.&lt;br /&gt;
&lt;br /&gt;
=== Length ===&lt;br /&gt;
&lt;br /&gt;
Count the number of bytes in this action.&lt;br /&gt;
&lt;br /&gt;
=== Feature ===&lt;br /&gt;
&lt;br /&gt;
This sets the type of [[Features|feature]] that you wish to change. Set it to:&lt;br /&gt;
&lt;br /&gt;
{|- |&lt;br /&gt;
!Value!![[Features|Feature]]&lt;br /&gt;
|-&lt;br /&gt;
|00||[[VariationalAction2/Vehicles | Trains]]&lt;br /&gt;
|-&lt;br /&gt;
|01||[[VariationalAction2/Vehicles | Road Vehicles]]&lt;br /&gt;
|-&lt;br /&gt;
|02||[[VariationalAction2/Vehicles | Ships]]&lt;br /&gt;
|-&lt;br /&gt;
|03||[[VariationalAction2/Vehicles | Aircraft]]&lt;br /&gt;
|-&lt;br /&gt;
|04||[[VariationalAction2/Stations | Stations]]&lt;br /&gt;
|-&lt;br /&gt;
|05||[[VariationalAction2/Canals | Canals/Rivers]]&lt;br /&gt;
|-&lt;br /&gt;
|06||[[VariationalAction2/Bridges | Bridges]]&lt;br /&gt;
|-&lt;br /&gt;
|07||[[VariationalAction2/Houses | Houses]]&lt;br /&gt;
|-&lt;br /&gt;
|09||[[VariationalAction2/Industry Tiles | Industry Tiles]]&lt;br /&gt;
|-&lt;br /&gt;
|0A||[[VariationalAction2/Industries | Industries]]&lt;br /&gt;
|-&lt;br /&gt;
|0B||Cargos (no feature specific variables)&lt;br /&gt;
|-&lt;br /&gt;
|0C||Sound Effects (no feature specific variables)&lt;br /&gt;
|-&lt;br /&gt;
|0D||[[VariationalAction2/Airports | Airports]]&lt;br /&gt;
|-&lt;br /&gt;
|0E||[[VariationalAction2/Signals | Signals]]&lt;br /&gt;
|-&lt;br /&gt;
|0F||[[VariationalAction2/Objects | Objects]]&lt;br /&gt;
|-&lt;br /&gt;
|10||[[VariationalAction2/Railtypes | Railtypes]]&lt;br /&gt;
|-&lt;br /&gt;
|11||[[VariationalAction2/Airport Tiles | Airport Tiles]]&lt;br /&gt;
|-&lt;br /&gt;
|12||[[VariationalAction2/Roadtypes | Roadtypes]]&lt;br /&gt;
|-&lt;br /&gt;
|13||[[VariationalAction2/Tramtypes | Tramtypes]]&lt;br /&gt;
|-&lt;br /&gt;
|14||[[VariationalAction2/Road Stops | Road Stops]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Set-ID ===&lt;br /&gt;
&lt;br /&gt;
This defines the number of this action 2. &amp;amp;nbsp;The ID can then be used as target in an action 3 or another variational/random action 2.&lt;br /&gt;
&lt;br /&gt;
=== Type ===&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
! !! B&amp;lt;br/&amp;gt;Access lowest byte !! {{ottdp|0.6|2.5}} W&amp;lt;br/&amp;gt;Access lowest word !! {{ottdp|0.6|2.5}} D&amp;lt;br/&amp;gt;Access lowest doubleword&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;left&amp;quot;| Access general variable or&amp;lt;br/&amp;gt;variable of the primary object&lt;br /&gt;
|align=&amp;quot;center&amp;quot;| 81 &lt;br /&gt;
|align=&amp;quot;center&amp;quot;| 85 &lt;br /&gt;
|align=&amp;quot;center&amp;quot;| 89&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;left&amp;quot;| Access variable of &amp;quot;related&amp;quot; object&lt;br /&gt;
|align=&amp;quot;center&amp;quot;| 82 &lt;br /&gt;
|align=&amp;quot;center&amp;quot;| 86 &lt;br /&gt;
|align=&amp;quot;center&amp;quot;| 8A&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The access type specifies both the size of the variable access, and selects between general variables and the object&#039;s innate variables, or variables of a specific &amp;quot;related&amp;quot; object.&lt;br /&gt;
&lt;br /&gt;
{|- |&lt;br /&gt;
!colspan=&amp;quot;2&amp;quot;|[[Features|Feature]]!!Related object&lt;br /&gt;
|-&lt;br /&gt;
|00-03||[[VariationalAction2/Vehicles | Vehicles]]||First [[VariationalAction2/Vehicles | vehicle]] of consist&lt;br /&gt;
|-&lt;br /&gt;
|04||[[VariationalAction2/Stations | Stations]]||[[VariationalAction2/Towns | Town]] to which station belongs&lt;br /&gt;
|-&lt;br /&gt;
|05||[[VariationalAction2/Canals | Canals/Rivers]]||N/A&lt;br /&gt;
|-&lt;br /&gt;
|06||[[VariationalAction2/Bridges | Bridges]]||[[VariationalAction2/Towns | Town]] of bridge&lt;br /&gt;
|-&lt;br /&gt;
|07||[[VariationalAction2/Houses | Houses]]||[[VariationalAction2/Towns | Town]] of house&lt;br /&gt;
|-&lt;br /&gt;
|09||[[VariationalAction2/Industry Tiles | Industry Tiles]]||[[VariationalAction2/Industries | Industry]] containing tile&lt;br /&gt;
|-&lt;br /&gt;
|0A||[[VariationalAction2/Industries | Industries]]||[[VariationalAction2/Towns | Town]] of industry&lt;br /&gt;
|-&lt;br /&gt;
|0B||Cargos||N/A&lt;br /&gt;
|-&lt;br /&gt;
|0C||Sound Effects||N/A&lt;br /&gt;
|-&lt;br /&gt;
|0D||[[VariationalAction2/Airports | Airports]]||[[VariationalAction2/Towns | Town]] to which airport belongs&lt;br /&gt;
|-&lt;br /&gt;
|0E||[[VariationalAction2/Signals | Signals]]||N/A&lt;br /&gt;
|-&lt;br /&gt;
|0F||[[VariationalAction2/Objects | Objects]]||[[VariationalAction2/Towns | Town]] of object&lt;br /&gt;
|-&lt;br /&gt;
|10||[[VariationalAction2/Railtypes | Railtypes]]||N/A&lt;br /&gt;
|-&lt;br /&gt;
|11||[[VariationalAction2/Airport Tiles | Airport Tiles]]||[[VariationalAction2/Airports | Airport]] containing tile&lt;br /&gt;
|-&lt;br /&gt;
|12||[[VariationalAction2/Roadtypes | Roadtypes]]||N/A&lt;br /&gt;
|-&lt;br /&gt;
|13||[[VariationalAction2/Tramtypes | Tramtypes]]||N/A&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Every variable specifies a size for it. Not every variable is a doubleword.&lt;br /&gt;
If the accessed variable is smaller than the size given here, the extra bits may contain junk, and should be &amp;lt;and-masked&amp;gt; out.&lt;br /&gt;
&lt;br /&gt;
=== Variable ===&lt;br /&gt;
&lt;br /&gt;
Variational Action 2 allows accessing these variables:&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!&#039;&#039;&#039;Number&#039;&#039;&#039;!![[GRFActionsDetailed|&#039;&#039;&#039;Size&#039;&#039;&#039;]]!!Version!!&#039;&#039;&#039;Meaning&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|00-3F|| || ||See [[GlobalVariables| global variables page]].&lt;br /&gt;
|-&lt;br /&gt;
|40+x||D|| ||specially calculated feature-specific variable, see following feature-specific pages&lt;br /&gt;
|-&lt;br /&gt;
|5F||D||{{ottdp|0.7|2.6|ttdprev=r1928}}||Feature-specific random data: triggers in low byte, bits in other three bytes. Bits of the variable not associated with random or trigger bits are reserved.&lt;br /&gt;
|-&lt;br /&gt;
|60+x||D|| ||similar to 40+x variables, but the variable number must be followed by a byte, which will be given to the variable handler as parameter.&lt;br /&gt;
|-&lt;br /&gt;
|7B||-||{{ottdp|1.1|2.6|ottdrev=r21604|ttdprev=r2359}}||A special 60+x variable to be used in Advanced Variational Action 2. It allows to evaluate any other 60+x variable using a non-constant parameter from a register. The parameter of variable 7B specifies another 60+x variable which is evaluated. The parameter for that variable is read from the accumulator (&#039;val1&#039;), i.e. the result from the preceding operations of the same Advanced Variational Action 2. Hence variable 7B may not be the first variable used in the calculation. Variable 7B itself and 7E (procedure call) are not allowed to be used as parameter for variable 7B.&lt;br /&gt;
&lt;br /&gt;
{{ottdp|1.2|no|ottdrev=r23138}} Since OpenTTD r23138 you can use this to pass 32 bit parameters to 60+x variables. Currently this is only useful for a few variables, e.g. vehicle variable 60. For most variables the higher bits of the parameter are considered reserved. So, make sure to mask the higher bits in the preceding calculations.&lt;br /&gt;
|-&lt;br /&gt;
|7C||D||{{ottdp|0.6|2.6|ttdprev=r1315}}||A special 60+x variable used to access values stored in the registers of [[Storages#Persistent storage|persistent storage]].&lt;br /&gt;
|-&lt;br /&gt;
|7D||D||{{ottdp|0.6|2.6|ttdprev=r1246}}||A special 60+x variable used to access values stored in the registers of [[Storages#Temporary storage|temporary storage]]. Available in the purchase list.&lt;br /&gt;
|-&lt;br /&gt;
|7E||D||{{ottdp|0.6|2.5}}||A special 60+x variable indicating a [[VarAction2Advanced#Using procedures|procedure call]]. Available in the purchase list.&lt;br /&gt;
|-&lt;br /&gt;
|7F||D||{{ottdp|0.6|2.5}}||A special 60+x variable that reads GRF parameter whose number is given by the 60+x parameter. Available in the purchase list.&lt;br /&gt;
|-&lt;br /&gt;
|80+x|| || ||Feature-specific variable, see following feature-specific pages. While most of these variables actually refer to raw memory locations of original TTD structures, you cannot rely on that. Some variables were added later, some were moved or replaced. Only the variables listed in the specs are somewhat set to not be changed in the future.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
For all features, the 80+x variables are offsets into the corresponding structure in TTD&#039;s game data. &amp;amp;nbsp;The 40+x and 60+x variables are special variables that are computed on-the-fly, and aren&#039;t actually stored anywhere in memory, unless stated otherwise. Therefore they should be used as little as necessary so as not to slow down the game too much with the calculation of these variables (which can be called thousands of times per second, whenever any vehicle moves).&lt;br /&gt;
&lt;br /&gt;
When displaying a vehicle (etc.) in the purchase list, the game will show those variations based on external variables (dates etc.) correctly, but variations based on vehicle variables (variables 40+x, 60+x and 80+x) will always show the first (not the default) cargo-ID unless otherwise specified for the given variable. If you do a calculation, the first cargo-ID will be selected if any of the needed variables is inaccessible.&lt;br /&gt;
&lt;br /&gt;
The lists of 80+x variables on the following pages are not exhaustive; only the useful variables are listed there. For a full list check the definition of corresponding structures in TTD. Marcin Grzegorczyk has a pretty good list of the structure definitions on his [http://marcin.ttdpatch.net/sv1codec/TTD-locations.html savegame internals page].&lt;br /&gt;
&lt;br /&gt;
=== varadjust ===&lt;br /&gt;
&lt;br /&gt;
Adjust variable to a more useful range. It has the following format:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;  &amp;lt;shift-num&amp;gt; &amp;lt;and-mask&amp;gt; &amp;lt;nowiki&amp;gt;[&amp;lt;add-val&amp;gt; &amp;lt;divide-val&amp;gt;/&amp;lt;modulo-val&amp;gt;]&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!&#039;&#039;&#039;Element&#039;&#039;&#039;!![[GRFActionsDetailed|&#039;&#039;&#039;Size&#039;&#039;&#039;]]!!&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|shift-num||B||value to right-shift the variable, and some special bits. See below.&lt;br /&gt;
|-&lt;br /&gt;
|and-mask||B/W/D||value with which to AND the variable after shifting. Return this value if neither bit 6 nor bit 7 of shift-num are set.&lt;br /&gt;
|-&lt;br /&gt;
|add-val||B/W/D||value to add to the variable after ANDing. Only present if bits 6 or 7 are set in shift-num.&lt;br /&gt;
|-&lt;br /&gt;
|divide-val||B/W/D||return the sum divided by this value. Only present if bit 6 is set in shift-num.&lt;br /&gt;
|-&lt;br /&gt;
|modulo-val||B/W/D||return the sum modulo (remainder of division by) this value. Only present if bit 7 is set in shift-num.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;shift-num&amp;gt; is a partial bit-mask; its bits have the following meanings:&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Bit(s)!!Value!!Version!!Meaning&lt;br /&gt;
|-&lt;br /&gt;
|0..4||0..1F||{{ottdp|0.6|2.0}}||number of bits to right shift &amp;lt;variable&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|5||20||{{ottdp|0.6|2.5}}||This is an [[VarAction2Advanced|advanced VarAction2]]&lt;br /&gt;
|-&lt;br /&gt;
|6||40||{{ottdp|0.6|2.5}}||This is a shift-and-add-divide adjustment.&lt;br /&gt;
|-&lt;br /&gt;
|7||80||{{ottdp|0.6|2.5}}||This is a shift-and-add-modulo adjustment.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Bits 6 and 7 may not both be set. If neither are set, this varadjust is a shift-and adjustment.&lt;br /&gt;
&lt;br /&gt;
Note that for the add and divide operations, both the variable and the divisor are taken to be signed numbers. This means that if the high bit is set, the number is taken to be negative, so you may need to mask out the most significant bit to do an unsigned division.&lt;br /&gt;
&lt;br /&gt;
=== nvar ===&lt;br /&gt;
&lt;br /&gt;
Here you set how many different ranges to check for. If the value of the variable, after the above manipulations, is not within one of these ranges, the default will be used. &amp;amp;nbsp;When displayed in the purchase window, the game will always show the first range if the variable is of the 40+x or 80+x type (because the variable is undefined since the vehicle doesn&#039;t exist yet).&lt;br /&gt;
&lt;br /&gt;
{{ottdp|0.6|2.5|ttdprev=2.0.1 alpha 57}} Since TTDPatch 2.0.1 alpha 57, nvar=0 is a special case. Instead of using ranges, nvar=0 means that the result of an [[VarAction2Advanced|advanced]] calculation (or, if no calculation is performed, the adjusted variable value itself) is returned as callback result, with bit 15 set. &amp;amp;nbsp;This is useful for those callbacks where many different return values are possible and it is easier to calculate them than list them in ranges. &amp;amp;nbsp;The default value must still be specified, and will be used in case the variable(s) used are not available.&lt;br /&gt;
&lt;br /&gt;
=== sets and ranges ===&lt;br /&gt;
&lt;br /&gt;
For each of the ranges to check, you give the set-id as a &#039;&#039;&#039;WORD&#039;&#039;&#039; value (i.e. with a 00 following, e.g. set-id 5 becomes 05 00, or - in case of a callback result - by setting the high bit, e.g. 05 80), followed by the low and high limits of this range. &amp;amp;nbsp;The first range that matches will be used.&lt;br /&gt;
&lt;br /&gt;
The various \b, \w, and \d escape sequences can be useful for &amp;lt;min-range&amp;gt; and &amp;lt;max-range&amp;gt;. See [[GRFActionsDetailed#Byte order|the discussion of escape sequences]] for further information.&lt;br /&gt;
&lt;br /&gt;
=== default ===&lt;br /&gt;
&lt;br /&gt;
The set-id to use if none of the ranges matches.&lt;br /&gt;
&lt;br /&gt;
=Example=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 -1 * 15       02 05 03 81        // Action2, Feature 05 (canals), action2ID 03, 1-byte variable&lt;br /&gt;
                   81 00 04       // variable 81 (terrain type), shift 00, mask 0x04 (=bit for &amp;quot;on or above snowline&amp;quot;)&lt;br /&gt;
                   01             // check one range&lt;br /&gt;
                   02 00    04 04 // snowy tile: link to action2ID 02&lt;br /&gt;
                   01 00          // default:    link to action2ID 01&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Michi cc</name></author>
	</entry>
	<entry>
		<id>https://newgrf-specs.tt-wiki.net/index.php?title=Callbacks&amp;diff=4382</id>
		<title>Callbacks</title>
		<link rel="alternate" type="text/html" href="https://newgrf-specs.tt-wiki.net/index.php?title=Callbacks&amp;diff=4382"/>
		<updated>2023-01-30T22:22:15Z</updated>

		<summary type="html">&lt;p&gt;Michi cc: Engine name CB&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
A callback is a special action 2 that the patch &amp;quot;calls&amp;quot; in order to modify various features, an example being the visual effect of train vehicles. &amp;amp;nbsp;See the [[ttwiki:CallbacksTut|callback tutorial]] on how to use them.&lt;br /&gt;
&lt;br /&gt;
In the final action 2 of a chain of VarAction2s, the second byte of the matching entry has to have bit 7 set to identify it as a callback result.&lt;br /&gt;
&lt;br /&gt;
For example, 04 00 is not a callback result (but it may be the ID of another chained action 2), whereas 04 80 is a callback result with a value of 4. In total a callback has 15 bit result values, where the upper 7 bits are stored in the second byte. For example, 54 C2 is a callback result with a value of 4254=16980, where again the second byte has bit 7 set, changing the 42 into C2.&lt;br /&gt;
&lt;br /&gt;
{{grfTill|7}} For GRF version 7 and below not all 15 bit values are available as return values, only values between 00 and 7EFF.&lt;br /&gt;
For compatibility with earlier patch versions, FF in the high byte is taken to mean the same thing as 80, so 04 FF also has a callback result of 4. Note that if your grf file needs to be compatible with versions before TTDPatch 2.0.1 alpha 40, you must set the high byte to FF, and so can use only 8 bit results.&lt;br /&gt;
&lt;br /&gt;
{{grfFrom|8}} For GRF version 8 and above this compatibility layer has been removed. Callbacks can return all 15 bit values between 00 and 7FFF.&lt;br /&gt;
&lt;br /&gt;
To check for a specific callback, use an [[VariationalAction2]] or [[VarAction2Advanced]] to check for variable 0C.&lt;br /&gt;
* Variable 0C contains the callback number.&lt;br /&gt;
* Variable 0C is a word, thus the VarAction2 must use type 85.&lt;br /&gt;
* Results can be specified directly using 8xxx values (see above), or with 8xxx value in subsequent (Basic/Variational/Random)Action2 which are referenced as usual with their set-id.&lt;br /&gt;
* The default case of the VarAction2 must point to the regular graphics chain, so that unknown/future callbacks results in a &amp;quot;callback failure&amp;quot; result.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
 &amp;lt;Sprite-number&amp;gt; * &amp;lt;Length&amp;gt; 02 &amp;lt;feature&amp;gt; &amp;lt;set-id&amp;gt; 85 0C 00 \wxFFFF&lt;br /&gt;
                               &amp;lt;nvar&amp;gt; (&amp;lt;set-id/result&amp;gt; \wx &amp;lt;callback&amp;gt; \wx &amp;lt;callback&amp;gt;){n}&lt;br /&gt;
                                       &amp;lt;set-id of graphics chain&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The format for VarAction2 is explained in detail on the [[VariationalAction2]] page.&lt;br /&gt;
&lt;br /&gt;
== List of callbacks ==&lt;br /&gt;
&lt;br /&gt;
The following callbacks are defined by the patch. &amp;amp;nbsp;The number of the callback is what will be stored in variable 0C so that you can return the right results if you have several callbacks. &amp;amp;nbsp;All callbacks are explained in more detail below.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PLEASE NOTE:&#039;&#039;&#039; Since TTDPatch 2.5 beta 5, the size of variable 0C has changed, and now there are word-sized callback numbers as well. To maintain backwards compatibility, only callbacks 10..3F can be checked using a byte-sized check. Callbacks 140 and above, on the other hand, must be checked using a word or dword sized check, to make sure they are identified uniquely.&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Number!!Feature(s)!!Meaning&lt;br /&gt;
|-&lt;br /&gt;
|10||Vehicles||[[Callback: Visual effect and wagon power|Visual effect and wagon power]]&lt;br /&gt;
|-&lt;br /&gt;
|11||Vehicles||[[Callback: Wagon length|Wagon length]]&lt;br /&gt;
|-&lt;br /&gt;
|12||Vehicles||[[Callback: Load amount|Load amount]]&lt;br /&gt;
|-&lt;br /&gt;
|13||Stations||[[Callback: Station availability|Station availability]]&lt;br /&gt;
|-&lt;br /&gt;
|14||Stations||[[Callback: Station sprite layout|Select sprite layout]]&lt;br /&gt;
|-&lt;br /&gt;
|15||Vehicles||[[Callback: Refitted capacity callback|Refitted capacity callback]]&lt;br /&gt;
|-&lt;br /&gt;
|16||Trains||[[Callback: Articulated engine|Build articulated engines]]&lt;br /&gt;
|-&lt;br /&gt;
|17||Houses||[[Callback: House construction check|House construction check]]&lt;br /&gt;
|-&lt;br /&gt;
|18||Several &amp;lt;ref name=&amp;quot;generic&amp;quot;&amp;gt;Generic callbacks are called for the feature, not any specific vehicle ID. Read the [[Action3#n-id|Action 3]] entry on how to define these.&amp;lt;/ref&amp;gt;||[[Callback: AI construction/purchase selection|AI construction/purchase selection]]&lt;br /&gt;
|-&lt;br /&gt;
|19||Vehicles||[[Callback: Cargo Subtype Display|Cargo sub-type display]]&lt;br /&gt;
|-&lt;br /&gt;
|1A||Houses||Next animation frame&lt;br /&gt;
|-&lt;br /&gt;
|1B||Houses||Animation control&lt;br /&gt;
|-&lt;br /&gt;
|1C||Houses||Construction stage changes&lt;br /&gt;
|-&lt;br /&gt;
|1D||Trains||Can wagon be attached&lt;br /&gt;
|-&lt;br /&gt;
|1E||Houses||Decide colour of building&lt;br /&gt;
|-&lt;br /&gt;
|1F||Houses||Cargo acceptance&lt;br /&gt;
|-&lt;br /&gt;
|20||Houses||Length of animation frame&lt;br /&gt;
|-&lt;br /&gt;
|21||Houses||Trigger building destruction&lt;br /&gt;
|-&lt;br /&gt;
|22||Industries||Availability&lt;br /&gt;
|-&lt;br /&gt;
|23||Vehicles||Additional text in purchase screen&lt;br /&gt;
|-&lt;br /&gt;
|24||Stations||Custom station layout&lt;br /&gt;
|-&lt;br /&gt;
|25||Industry tiles||Animation control&lt;br /&gt;
|-&lt;br /&gt;
|26||Industry tiles||Next animation frame&lt;br /&gt;
|-&lt;br /&gt;
|27||Industry tiles||Length of animation frame&lt;br /&gt;
|-&lt;br /&gt;
|28||Industries||Industry location permissibility&lt;br /&gt;
|-&lt;br /&gt;
|29||Industries||Random production change&lt;br /&gt;
|-&lt;br /&gt;
|2A||Houses||Get accepted cargo types&lt;br /&gt;
|-&lt;br /&gt;
|2B||Industry tiles||Decide cargo acceptance&lt;br /&gt;
|-&lt;br /&gt;
|2C||Industry tiles||Get accepted cargo types&lt;br /&gt;
|-&lt;br /&gt;
|2D||Vehicles||Select colour mapping for vehicle&lt;br /&gt;
|-&lt;br /&gt;
|2E||Houses||Custom cargo production&lt;br /&gt;
|-&lt;br /&gt;
|2F||Industry tiles||Custom shape check&lt;br /&gt;
|-&lt;br /&gt;
|30||Industry tiles||Decide drawing default foundations&lt;br /&gt;
|-&lt;br /&gt;
|31||Vehicles||Start/stop check&lt;br /&gt;
|-&lt;br /&gt;
|32||Vehicles||32-day callback&lt;br /&gt;
|-&lt;br /&gt;
|33||Several||Sound effect callback&lt;br /&gt;
|-&lt;br /&gt;
|34||Vehicles &amp;lt;ref name=&amp;quot;generic&amp;quot;/&amp;gt;||Autoreplace vehicle selection&lt;br /&gt;
|-&lt;br /&gt;
|35||Industries||Monthly random production change&lt;br /&gt;
|-&lt;br /&gt;
|36||Vehicles||Change vehicle Properties&lt;br /&gt;
|-&lt;br /&gt;
|37||Industries||Cargo sub-type display&lt;br /&gt;
|-&lt;br /&gt;
|38||Industries||Show additional text in fund window&lt;br /&gt;
|-&lt;br /&gt;
|39||Cargoes||Custom profit calculation&lt;br /&gt;
|-&lt;br /&gt;
|3A||Industries||Show additional text in industry window&lt;br /&gt;
|-&lt;br /&gt;
|3B||Industries||Control special effects&lt;br /&gt;
|-&lt;br /&gt;
|3C||Industry tiles||Disable autosloping&lt;br /&gt;
|-&lt;br /&gt;
|3D||Industries||Opt out of accepting cargo&lt;br /&gt;
|-&lt;br /&gt;
|40..13F|| ||--Reserved--&lt;br /&gt;
|-&lt;br /&gt;
|140||Stations||Animation control&lt;br /&gt;
|-&lt;br /&gt;
|141||Stations||Next animation frame&lt;br /&gt;
|-&lt;br /&gt;
|142||Stations||Length of animation frame&lt;br /&gt;
|-&lt;br /&gt;
|143||Houses||Protect building conditionally&lt;br /&gt;
|-&lt;br /&gt;
|144||Sounds &amp;lt;ref name=&amp;quot;generic&amp;quot;/&amp;gt;||{{ottdp|1.2|2.6|ottdrev=r23144|ttdprev=r821}} Ambient sound effects&lt;br /&gt;
|-&lt;br /&gt;
|145||Cargoes||Custom station rating calculation&lt;br /&gt;
|-&lt;br /&gt;
|146||New Signals &amp;lt;ref name=&amp;quot;generic&amp;quot;/&amp;gt;||New signals sprite drawing&lt;br /&gt;
|-&lt;br /&gt;
|147||Canals||Add sprite offset&lt;br /&gt;
|-&lt;br /&gt;
|148||Houses||Watched cargo accepted&lt;br /&gt;
|-&lt;br /&gt;
|149||Stations||Land slope check&lt;br /&gt;
|-&lt;br /&gt;
|14A||Industries||Decide industry color&lt;br /&gt;
|-&lt;br /&gt;
|14B||Industries||Decide input cargo types&lt;br /&gt;
|-&lt;br /&gt;
|14C||Industries||Decide output cargo types&lt;br /&gt;
|-&lt;br /&gt;
|14D||Houses||Customized building name&lt;br /&gt;
|-&lt;br /&gt;
|14E||Houses||Decide drawing default foundations&lt;br /&gt;
|-&lt;br /&gt;
|14F||Houses||Disable autosloping&lt;br /&gt;
|-&lt;br /&gt;
|150||Airport tiles||{{ottdp|1.1|no|ottdrev=r19197}} Decide drawing default foundations&lt;br /&gt;
|-&lt;br /&gt;
|152||Airport tiles||{{ottdp|1.1|no|ottdrev=r19197}} Animation control&lt;br /&gt;
|-&lt;br /&gt;
|153||Airport tiles||{{ottdp|1.1|no|ottdrev=r19197}} Next Animation frame&lt;br /&gt;
|-&lt;br /&gt;
|154||Airport tiles||{{ottdp|1.1|no|ottdrev=r19197}} Length of animation frame&lt;br /&gt;
|-&lt;br /&gt;
|155||Airports||{{ottdp|1.1|no|ottdrev=r20373}} Extra information about airport layout in the build gui&lt;br /&gt;
|-&lt;br /&gt;
|156||Airports||{{ottdp|1.1|no|ottdrev=r20373}} Airport layout name&lt;br /&gt;
|-&lt;br /&gt;
|157||Objects||Land slope check&lt;br /&gt;
|-&lt;br /&gt;
|158||Objects||Next animation frame&lt;br /&gt;
|-&lt;br /&gt;
|159||Objects||Animation control&lt;br /&gt;
|-&lt;br /&gt;
|15A||Objects||Length of animation frame&lt;br /&gt;
|-&lt;br /&gt;
|15B||Objects||Decide colour of building&lt;br /&gt;
|-&lt;br /&gt;
|15C||Objects||Show additional text in building window&lt;br /&gt;
|-&lt;br /&gt;
|15D||Objects||Disable autosloping&lt;br /&gt;
|-&lt;br /&gt;
|15E||Vehicles||{{ottdp|1.2|no|ottdrev=r23124}} Refit cost factor&lt;br /&gt;
|-&lt;br /&gt;
|15F||Industries||{{ottdp|1.3|no|ottdrev=r24186}} Set initial production level on construction&lt;br /&gt;
|-&lt;br /&gt;
|160||Vehicles||{{ottdp|1.5|no|ottdrev=r26747}} Advanced effect creation&lt;br /&gt;
|-&lt;br /&gt;
|161||Vehicles||{{ottdp|14|no|ottdrev=g05ed9f56fd}} Engine name&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{:Callback: Visual effect and wagon power}}&lt;br /&gt;
{{:Callback: Wagon length}}&lt;br /&gt;
{{:Callback: Load amount}}&lt;br /&gt;
{{:Callback: Station availability}}&lt;br /&gt;
{{:Callback: Station sprite layout}}&lt;br /&gt;
{{:Callback: Refitted capacity callback}}&lt;br /&gt;
{{:Callback: Articulated engine}}&lt;br /&gt;
{{:Callback: House construction check}}&lt;br /&gt;
{{:Callback: AI construction/purchase selection}}&lt;br /&gt;
{{:Callback: Cargo Subtype Display}}&lt;br /&gt;
{{:Callback: Next animation frame}}&lt;br /&gt;
{{:Callback: Animation control}}&lt;br /&gt;
{{:Callback: Construction stage changes}}&lt;br /&gt;
{{:Callback: Can wagon be attached}}&lt;br /&gt;
{{:Callback: Building colour}}&lt;br /&gt;
{{:Callback: Cargo acceptance}}&lt;br /&gt;
{{:Callback: Length of animation frame}}&lt;br /&gt;
{{:Callback: Trigger building destruction}}&lt;br /&gt;
{{:Callback: Industry availability}}&lt;br /&gt;
{{:Callback: Additional text in purchase screen}}&lt;br /&gt;
{{:Callback: Custom station layout}}&lt;br /&gt;
{{:Callback: Industry location permissibility}}&lt;br /&gt;
{{:Callback: Random production change}}&lt;br /&gt;
{{:Callback: Get accepted cargo types}}&lt;br /&gt;
{{:Callback: Decide cargo acceptance}}&lt;br /&gt;
{{:Callback: Select colour mapping for vehicle}}&lt;br /&gt;
{{:Callback: Custom cargo production}}&lt;br /&gt;
{{:Callback: Custom shape check}}&lt;br /&gt;
{{:Callback: Decide drawing default foundations}}&lt;br /&gt;
{{:Callback: Vehicle Start/stop check}}&lt;br /&gt;
{{:Callback: 32-day callback}}&lt;br /&gt;
{{:Callback: Sound effect}}&lt;br /&gt;
{{:Callback: Autoreplace vehicle selection}}&lt;br /&gt;
{{:Callback: Monthly random production change}}&lt;br /&gt;
{{:Callback: Change vehicle properties}}&lt;br /&gt;
{{:Callback: Cargo sub-type display for industries}}&lt;br /&gt;
{{:Callback: Show additional text in fund/building window}}&lt;br /&gt;
{{:Callback: Custom profit calculation for cargoes}}&lt;br /&gt;
{{:Callback: Show additional text in industry window}}&lt;br /&gt;
{{:Callback: Control special industry effects}}&lt;br /&gt;
{{:Callback: Disable autosloping}}&lt;br /&gt;
{{:Callback: Opt out of accepting cargo}}&lt;br /&gt;
{{:Callback: Protect building conditionally}}&lt;br /&gt;
{{:Callback: Ambient sound effects}}&lt;br /&gt;
{{:Callback: Custom station rating calculation}}&lt;br /&gt;
{{:Callback: New signals sprite drawing callback}}&lt;br /&gt;
{{:Callback: Add sprite offset callback}}&lt;br /&gt;
{{:Callback: Watched cargo accepted}}&lt;br /&gt;
{{:Callback: Station slope check}}&lt;br /&gt;
{{:Callback: Decide industry colour}}&lt;br /&gt;
{{:Callback: Decide input and output cargo types}}&lt;br /&gt;
{{:Callback: Customized building name}}&lt;br /&gt;
{{:Callback: Extra information about layout in the build gui}}&lt;br /&gt;
{{:Callback: Layout name}}&lt;br /&gt;
{{:Callback: Object slope check}}&lt;br /&gt;
{{:Callback: Decide object colour}}&lt;br /&gt;
{{:Callback: Refit cost factor}}&lt;br /&gt;
{{:Callback: Set initial production level on construction}}&lt;br /&gt;
{{:Callback: Advanced effect creation}}&lt;br /&gt;
{{:Callback: Engine name}}&lt;/div&gt;</summary>
		<author><name>Michi cc</name></author>
	</entry>
	<entry>
		<id>https://newgrf-specs.tt-wiki.net/index.php?title=Callback:_Engine_name&amp;diff=4381</id>
		<title>Callback: Engine name</title>
		<link rel="alternate" type="text/html" href="https://newgrf-specs.tt-wiki.net/index.php?title=Callback:_Engine_name&amp;diff=4381"/>
		<updated>2023-01-30T22:20:50Z</updated>

		<summary type="html">&lt;p&gt;Michi cc: Engine name callback&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Engine name (161) ==&lt;br /&gt;
&lt;br /&gt;
This callback allows you to dynamically determine the name shown for an engine type. The return value should be the number of a D0xx text to be displayed. The contents of registers 100h..105h are copied onto the text reference stack and can be used with string codes 80/81 to show texts from the D8xx range as well, extending the available unique strings.&lt;br /&gt;
&lt;br /&gt;
{{grfFrom|8}} For GRF version 8 and above you can return 400 to display the engine name from the property (instead of failing the callback).&lt;br /&gt;
&lt;br /&gt;
The callback is run in purchase list scope, i.e. for cargotype FF. No variables of an actual vehicle are available.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
During this callback, variable 10 (extra callback info 1) contains information about the context where the name is shown.&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
! Bits 0 - 7 of [[GlobalVariables#Extra_callback_info_.2810_.2F_-.29_and_.2818_.2F_-.29|variable 10]]&amp;lt;ref&amp;gt;Values correspond to the values used for [[Action2/Vehicles#Drawing_different_sprites_on_map_in_various_GUIs|sprite drawing]].&amp;lt;/ref&amp;gt;!! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| 00 || No specific context is avaible.&lt;br /&gt;
|-&lt;br /&gt;
| 01..10 || reserved&lt;br /&gt;
|-&lt;br /&gt;
| 11 || Name is shown in the vehicle details GUI. (This includes the refit GUI.)&lt;br /&gt;
|-&lt;br /&gt;
| 12..1F || reserved for other future GUIs.&lt;br /&gt;
|-&lt;br /&gt;
| 20 || Vehicle is drawn in the purchase list. (This includes the autoreplace GUI.)&amp;lt;br&amp;gt;Bits &#039;&#039;&#039;8 - 15&#039;&#039;&#039; contain the indentation level in the list, e.g. when using vehicle variants.&lt;br /&gt;
|-&lt;br /&gt;
| 21 || Vehicle is drawn in the exclusive preview GUI or in the advertisement news.&lt;br /&gt;
|-&lt;br /&gt;
| 22..2F || reserved for other future GUIs with non-purchased vehicles.&lt;br /&gt;
|-&lt;br /&gt;
| 30..FF || reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This callback is available from {{ottdp|14|no|ottdrev=g05ed9f56fd}} OpenTTD 14 and above.&lt;br /&gt;
[[Category:Callbacks]]&lt;/div&gt;</summary>
		<author><name>Michi cc</name></author>
	</entry>
	<entry>
		<id>https://newgrf-specs.tt-wiki.net/index.php?title=Action0/Vehicles/Planes&amp;diff=4380</id>
		<title>Action0/Vehicles/Planes</title>
		<link rel="alternate" type="text/html" href="https://newgrf-specs.tt-wiki.net/index.php?title=Action0/Vehicles/Planes&amp;diff=4380"/>
		<updated>2023-01-30T22:06:45Z</updated>

		<summary type="html">&lt;p&gt;Michi cc: /* Properties */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right; padding-left:12px; background:none;&amp;quot;&amp;gt;{{NFONavVehicles}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Defining properties of planes.&lt;br /&gt;
&lt;br /&gt;
== Properties ==&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Number!![[GRFActionsDetailed|Size]]!!Version!!Description&lt;br /&gt;
|-&lt;br /&gt;
|08||B||{{ottdp|0.6|2.0}}||Sprite (FF for new graphics)&lt;br /&gt;
|-&lt;br /&gt;
|09||B||{{ottdp|0.6|2.0}}||Is helicopter? 2=no, 0=yes&lt;br /&gt;
|-&lt;br /&gt;
|0A||B||{{ottdp|0.6|2.0}}||Is large? 0=no, 1=yes (i.e. can&#039;t safely land on small airports)&lt;br /&gt;
|-&lt;br /&gt;
|0B||B||{{ottdp|0.6|2.0}}||Cost factor&lt;br /&gt;
|-&lt;br /&gt;
|0C||B||{{ottdp|0.6|2.0}}||Speed in units of 8 mph, that is: property = (speed in mph) / 8&lt;br /&gt;
|-&lt;br /&gt;
|0D||B||{{ottdp|0.6|2.0}}||Acceleration in units of 3/8 mph/tick, that is: property = (acceleration in mph/tick) * 8/3 &amp;lt;ref&amp;gt;{{ottd|&amp;amp;lt;1.3.1}} In OpenTTD before r25115 the units for acceleration were messed up. The unit used was about 1 mph/tick, so aircraft accelerated more than twice as fast. Also values bigger than 19 failed.&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|0E||B||{{ottdp|0.6|2.0}}||Running cost factor&lt;br /&gt;
|-&lt;br /&gt;
|0F||W||{{ottdp|0.6|2.0}}||Primary cargo capacity (passenger or refitted cargo)&lt;br /&gt;
|-&lt;br /&gt;
|11||B||{{ottdp|0.6|2.0}}||Secondary cargo capacity (mail)&lt;br /&gt;
|-&lt;br /&gt;
|12||B||{{ottdp|0.6|2.0}}||Sound effect&lt;br /&gt;
|-&lt;br /&gt;
|13||D||{{ottdp|0.6|2.5}} {{grfFrom|6}}||Bit mask of cargo types available for refitting, see column 2 (Bit Value) in [[CargoTypes]]&lt;br /&gt;
|-&lt;br /&gt;
|14||B||{{ottdp|0.6|2.5}} {{grfFrom|6}}||Callback flags bit mask, see below&lt;br /&gt;
|-&lt;br /&gt;
|15||B||{{ottdp|0.6|2.5|ttdprev=alpha 30}}||Refit cost, using 1/32 of the default refit cost base&lt;br /&gt;
|-&lt;br /&gt;
|16||B||{{ottdp|0.6|2.5|ttdprev=alpha 44}}||Retire vehicle early, this many years before the end of phase 2 (see [[Action0General]])&lt;br /&gt;
|-&lt;br /&gt;
|17||B||{{ottdp|0.6|2.5|ttdprev=alpha 58}}||Miscellaneous vehicle flags&lt;br /&gt;
|-&lt;br /&gt;
|18||W||{{ottdp|0.6|2.5|ttdprev=alpha 58}}||Refittable cargo classes, see [[Action0Trains#Cargo classes 28 29|train prop. 28]]&lt;br /&gt;
|-&lt;br /&gt;
|19||W||{{ottdp|0.6|2.5|ttdprev=alpha 58}}||Non-refittable cargo classes, see [[Action0Trains#Cargo classes 28 29|train prop. 29]]&lt;br /&gt;
|-&lt;br /&gt;
|1A||D||{{ottdp|0.6|2.5|ttdprev=r1210|ottdrev=r7191}}||Long format introduction date&lt;br /&gt;
|-&lt;br /&gt;
|1B||B*||{{ottdp|0.7|no|ottdrev=r13831}}||Sort the purchase list&lt;br /&gt;
|-&lt;br /&gt;
|1C||W||{{ottdp|1.2|no|ottdrev=r22713}}||Custom cargo ageing period&lt;br /&gt;
|-&lt;br /&gt;
|1D||B n*B||{{ottdp|1.2|no|ottdrev=r23291}}||List of always refittable cargo types, see [[Action0/Vehicles/Trains#List_of_always_refittable_cargo_types_.282C.2C_2D.29|train property 2C]]&lt;br /&gt;
|-&lt;br /&gt;
|1E||B n*B||{{ottdp|1.2|no|ottdrev=r23291}}||List of never refittable cargo types, see [[Action0/Vehicles/Trains#List_of_always_refittable_cargo_types_.282C.2C_2D.29|train property 2D]]&lt;br /&gt;
|-&lt;br /&gt;
|1F||W||{{ottdp|1.2|no|ottdrev=r23504}}||Aircraft range in tiles. Distance is euclidean, a value of 0 means range is unlimited&lt;br /&gt;
|-&lt;br /&gt;
|20||W||{{ottdp|13|no}}||Vehicle variant group, see [[Action0/Vehicles/Trains#Vehicle_variant_group_.282F.29|train property 2F]]&lt;br /&gt;
|-&lt;br /&gt;
|21||D||{{ottdp|13|no}}||Extra flags, see [[Action0/Vehicles/Trains#Extra_flags_.2830.29|train property 30]]&lt;br /&gt;
|-&lt;br /&gt;
|22||B||{{ottdp|14|no|ottdrev=g2d73076056}}||Additional callback flags bit mask, see below&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Descriptions ==&lt;br /&gt;
&lt;br /&gt;
=== Primary (0F) and secondary (11) cargo capacity ===&lt;br /&gt;
Aircraft can transport up to two cargo types.&lt;br /&gt;
The first (primary) cargo type can be changed when refitting the aircraft.&lt;br /&gt;
&lt;br /&gt;
The secondary cargo type is always mail, and is only present when the primary cargo type is part of the [[Action0/Cargos#CargoClasses_.2816.29|passenger cargo class]].&lt;br /&gt;
&lt;br /&gt;
See also the page about [[VehicleRefitting|vehicle refitting]].&lt;br /&gt;
&lt;br /&gt;
=== Sound effect (12) ===&lt;br /&gt;
&lt;br /&gt;
The following sound effects are used by planes (note, the setting is ignored for helicopters):&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Number!!Sound&lt;br /&gt;
|-&lt;br /&gt;
|06||Propeller sound 1&lt;br /&gt;
|-&lt;br /&gt;
|07||Jet sound 1&lt;br /&gt;
|-&lt;br /&gt;
|3B||Supersonic&lt;br /&gt;
|-&lt;br /&gt;
|3D||Jet sound 2&lt;br /&gt;
|-&lt;br /&gt;
|45||Propeller sound 2&lt;br /&gt;
|-&lt;br /&gt;
|46||Jet sound 3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{ottdp|1.6|no|ottdrev=r27507}} Since OpenTTD r27507 also custom sound effects from Action11 are allowed here.&lt;br /&gt;
&lt;br /&gt;
{{ottdp|1.11|no|ottdrev=6198a47}} Since OpenTTD g6198a47 this prop can be used to to set custom Action11 sound effects for helicopers. Default sound effects are ignored as before.&lt;br /&gt;
&lt;br /&gt;
=== Callbacks (14, 22) ===&lt;br /&gt;
For planes, the following [[callbacks]] have to be enabled by setting the corresponding bit in property 14 (certain other, not as frequently used callbacks are available without setting a bit here)::&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Bit!!Value!!Variable 0C value!!Callback&lt;br /&gt;
|-&lt;br /&gt;
|2||4||12||Load amount&lt;br /&gt;
|-&lt;br /&gt;
|3||8||15||Set refitted capacity&lt;br /&gt;
|-&lt;br /&gt;
|5||20||19||show a suffix after the cargo type name&lt;br /&gt;
|-&lt;br /&gt;
|6||40||2D||Select color mapping for vehicle&lt;br /&gt;
|-&lt;br /&gt;
|7||80||33||Sound effect callbacks&lt;br /&gt;
|-&lt;br /&gt;
|8||100||161||{{ottd|14|ottdrev=gf5394ed2ef}}Engine name&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Bit is the bit you have to set, you do this by adding all the values for all the bits. Variable 0C value is what variable 0C will be set to, for checking it in the VarAction2 for callbacks.&lt;br /&gt;
&lt;br /&gt;
=== Refit cost (15) ===&lt;br /&gt;
&lt;br /&gt;
Refit cost, using 1/32 of the default refit cost base. This property can be overridden by callback 15E.&lt;br /&gt;
&lt;br /&gt;
{{ottdp|1.2|no|ottdrev=r23087}} If the refit cost factor is set to zero and bit 4 of the miscellaneous flags (17) is set, auto-refitting is allowed.&lt;br /&gt;
&lt;br /&gt;
=== Miscellaneous flags (17) ===&lt;br /&gt;
&lt;br /&gt;
This is a bit mask, with the following bits:&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Bit!!Value!!Meaning&lt;br /&gt;
|-&lt;br /&gt;
|0||1||reserved, do not use&lt;br /&gt;
|-&lt;br /&gt;
|1||2||Uses two company colors&lt;br /&gt;
|-&lt;br /&gt;
|2||4||reserved, do not use&lt;br /&gt;
|-&lt;br /&gt;
|3||8||reserved, do not use&lt;br /&gt;
|-&lt;br /&gt;
|4||10||{{ottdp|1.2|no|ottdrev=r23087}} Auto-refitting is enabled for refits where callback 15E allows it or prop 15 specifies zero cost.&lt;br /&gt;
|-&lt;br /&gt;
|5||20||{{ottdp|1.2|no|ottdrev=r23861}} Use cargo multiplier for default cargo. See page about [[VehicleRefitting#Misc._vehicle_flag_5_.27use_of_capacity_multiplier_for_default_cargo.27_set|vehicle refitting]].&lt;br /&gt;
|-&lt;br /&gt;
|6||40||{{ottdp|1.3|no|ottdrev=r24124}} Disable breakdown smoke effect.&lt;br /&gt;
|-&lt;br /&gt;
|7||   80||{{ottdp|1.7|no|ottdrev=r27668}} [[Action2/Vehicles#Composing_vehicles_from_multiple_sprites|Compose vehicle from multiple sprites.]]&lt;br /&gt;
Note: This also applies to the rotor sprite, if custom rotor sprites are used.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Long format introduction date (1A) ===&lt;br /&gt;
&lt;br /&gt;
Set the vehicle introduction date, in days since the year 0. This takes account of leap years; dividable by 4, but not 100 unless 400. A start date of 1920-01-01 is obtained with a value of 701265 (51 B3 0A 00). This property must be set after property 00 to take effect.&lt;br /&gt;
&lt;br /&gt;
{{ottdp|no|}} In TTDPatch, dates after 2044 will be limited to 2044.&lt;br /&gt;
&lt;br /&gt;
=== Sort vehicle list (1B) ===&lt;br /&gt;
See sort vehicle list for [[Action0Trains#Sort vehicle list 1A|trains]] for details.&lt;br /&gt;
&lt;br /&gt;
=== Custom cargo ageing period (1C) ===&lt;br /&gt;
See custom cargo ageing period for [[Action0Trains#Custom_cargo_ageing_period_.282B.29|trains]] for details.&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
To be written&lt;/div&gt;</summary>
		<author><name>Michi cc</name></author>
	</entry>
	<entry>
		<id>https://newgrf-specs.tt-wiki.net/index.php?title=Action0/Vehicles/Ships&amp;diff=4379</id>
		<title>Action0/Vehicles/Ships</title>
		<link rel="alternate" type="text/html" href="https://newgrf-specs.tt-wiki.net/index.php?title=Action0/Vehicles/Ships&amp;diff=4379"/>
		<updated>2023-01-30T22:06:33Z</updated>

		<summary type="html">&lt;p&gt;Michi cc: /* Properties */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right; padding-left:12px; background:none;&amp;quot;&amp;gt;{{NFONavVehicles}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Defining properties of ships.&lt;br /&gt;
== Properties ==&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Number!![[GRFActionsDetailed|Size]]!!Version!!Description&lt;br /&gt;
|-&lt;br /&gt;
|08||B||{{ottdp|0.6|2.0}}||Sprite (FF for new graphics)&lt;br /&gt;
|-&lt;br /&gt;
|09||B||{{ottdp|0.6|2.0}}||Refittable (0 no, 1 yes)&lt;br /&gt;
|-&lt;br /&gt;
|0A||B||{{ottdp|0.6|2.0}}||Cost factor&lt;br /&gt;
|-&lt;br /&gt;
|0B||B||{{ottdp|0.6|2.0}}||Speed in mph*3.2&lt;br /&gt;
|-&lt;br /&gt;
|0C||B||{{ottdp|0.6|2.0}}||Cargo type, see [[CargoTypes]]&amp;lt;br/&amp;gt;&lt;br /&gt;
{{grfTill|7}} For GRF version 7 and below: Type B &#039;cargo slot&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
{{grfFrom|8}} For GRF version 8 and above: Type A &#039;(translated) cargo bit&#039;&lt;br /&gt;
|-&lt;br /&gt;
|0D||W||{{ottdp|0.6|2.0}}||Capacity&lt;br /&gt;
|-&lt;br /&gt;
|0F||B||{{ottdp|0.6|2.0}}||Running cost factor&lt;br /&gt;
|-&lt;br /&gt;
|10||B||{{ottdp|0.6|2.0}}||Sound effect type (4=cargo ship, 5=passenger ship)&amp;lt;br/&amp;gt;{{ottdp|1.6|no|ottdrev=r27507}} Since OpenTTD r27507 also custom sound effects from Action11 are allowed here.&lt;br /&gt;
|-&lt;br /&gt;
|11||D||{{ottdp|0.6|2.0}} {{grfFrom|1}}||Bit mask of cargo types available for refitting, see column 2 (bit values) in [[CargoTypes]]&lt;br /&gt;
|-&lt;br /&gt;
|12||B||{{ottdp|0.6|2.5}} {{grfFrom|6}}||Callback flags bit mask, see below&lt;br /&gt;
|-&lt;br /&gt;
|13||B||{{ottdp|0.6|2.5|ttdprev=alpha 30}}||Refit cost, using 1/32 of the default refit cost base&lt;br /&gt;
|-&lt;br /&gt;
|14||B||{{ottdp|1.2|2.5|ttdprev=alpha 44|ottdrev=r22639}}||Ocean speed fraction, sets fraction of top speed available in the ocean; e.g. 00=100%, 80=50%, FF=0.4%&lt;br /&gt;
|-&lt;br /&gt;
|15||B||{{ottdp|1.2|2.5|ttdprev=alpha 44|ottdrev=r22639}}||Canal speed fraction, same as above but for canals and rivers&lt;br /&gt;
|-&lt;br /&gt;
|16||B||{{ottdp|0.6|2.5|ttdprev=alpha 44}}||Retire vehicle early, this many years before the end of phase 2 (see [[Action0General]])&lt;br /&gt;
|-&lt;br /&gt;
|17||B||{{ottdp|0.6|2.5|ttdprev=alpha 55}}||Miscellaneous vehicle flags&lt;br /&gt;
|-&lt;br /&gt;
|18||W||{{ottdp|0.6|2.5|ttdprev=alpha 55}}||Refittable cargo classes, see [[Action0Trains#Cargo_classes_.2828.2C_29.29|train prop. 28]]&lt;br /&gt;
|-&lt;br /&gt;
|19||W||{{ottdp|0.6|2.5|ttdprev=alpha 55}}||Non-refittable cargo classes, see [[Action0Trains#Cargo_classes_.2828.2C_29.29|train prop. 29]]&lt;br /&gt;
|-&lt;br /&gt;
|1A||D||{{ottdp|0.6|2.6|ttdprev=r1210|ottdrev=r7191}}||Long format introduction date&lt;br /&gt;
|-&lt;br /&gt;
|1B||B*||{{ottdp|0.7|no|ottdrev=r13831}}||Sort the purchase list&lt;br /&gt;
|-&lt;br /&gt;
|1C||B||{{ottdp|1.1|no|ottdrev=r21240}}||Visual effect&lt;br /&gt;
|-&lt;br /&gt;
|1D||W||{{ottdp|1.2|no|ottdrev=r22713}}||Custom cargo ageing period&lt;br /&gt;
|-&lt;br /&gt;
|1E||B n*B||{{ottdp|1.2|no|ottdrev=r23291}}||List of always refittable cargo types, see [[Action0/Vehicles/Trains#List_of_always_refittable_cargo_types_.282C.2C_2D.29|train property 2C]]&lt;br /&gt;
|-&lt;br /&gt;
|1F||B n*B||{{ottdp|1.2|no|ottdrev=r23291}}||List of never refittable cargo types, see [[Action0/Vehicles/Trains#List_of_always_refittable_cargo_types_.282C.2C_2D.29|train property 2D]]&lt;br /&gt;
|-&lt;br /&gt;
|20||W||{{ottdp|13|no}}||Vehicle variant group, see [[Action0/Vehicles/Trains#Vehicle_variant_group_.282F.29|train property 2F]]&lt;br /&gt;
|-&lt;br /&gt;
|21||D||{{ottdp|13|no}}||Extra flags, see [[Action0/Vehicles/Trains#Extra_flags_.2830.29|train property 30]]&lt;br /&gt;
|-&lt;br /&gt;
|22||B||{{ottdp|14|no|ottdrev=g2d73076056}}||Additional callback flags bit mask, see below&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Descriptions ==&lt;br /&gt;
&lt;br /&gt;
=== Callbacks (12, 22) ===&lt;br /&gt;
For ships, the following [[callbacks]] have to be enabled by setting the corresponding bit in properties 12 and 22 (certain other, not as frequently used callbacks are available without setting a bit here):&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Bit!!Value!!Variable 0C value!!Callback&lt;br /&gt;
|-&lt;br /&gt;
|2||4||12||Load amount&lt;br /&gt;
|-&lt;br /&gt;
|3||8||15||Set refitted capacity&lt;br /&gt;
|-&lt;br /&gt;
|5||20||19||show a suffix after the cargo type name&lt;br /&gt;
|-&lt;br /&gt;
|6||40||2D||Select color mapping for vehicle&lt;br /&gt;
|-&lt;br /&gt;
|7||80||33||Sound effect callbacks&lt;br /&gt;
|-&lt;br /&gt;
|8||100||161||{{ottd|14|ottdrev=gf5394ed2ef}}Engine name&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Bit is the bit you have to set, you do this by adding all the values for all the bits. Variable 0C value is what variable 0C will be set to, for checking it in the VarAction2 for callbacks.&lt;br /&gt;
&lt;br /&gt;
=== Refit cost (13) ===&lt;br /&gt;
&lt;br /&gt;
Refit cost, using 1/32 of the default refit cost base. This property can be overridden by callback 15E.&lt;br /&gt;
&lt;br /&gt;
{{ottdp|1.2|no|ottdrev=r23087}} If the refit cost factor is set to zero and bit 4 of the miscellaneous flags (17) is set, auto-refitting is allowed.&lt;br /&gt;
&lt;br /&gt;
=== Miscellaneous flags (17) ===&lt;br /&gt;
&lt;br /&gt;
This is a bit mask, with the following bits:&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Bit!!Value!!Meaning&lt;br /&gt;
|-&lt;br /&gt;
|0||1||reserved, do not use&lt;br /&gt;
|-&lt;br /&gt;
|1||2||Uses two company colors&lt;br /&gt;
|-&lt;br /&gt;
|2||4||reserved, do not use&lt;br /&gt;
|-&lt;br /&gt;
|3||8||reserved, do not use&lt;br /&gt;
|-&lt;br /&gt;
|4||10||{{ottdp|1.2|no|ottdrev=r23087}} Auto-refitting is enabled for refits where callback 15E allows it or prop 13 specifies zero cost.&lt;br /&gt;
|-&lt;br /&gt;
|5||   20||{{ottdp|1.2|no|ottdrev=r23861}} Use cargo multiplier for default cargo. See page about [[VehicleRefitting#Misc._vehicle_flag_5_.27use_of_capacity_multiplier_for_default_cargo.27_set|vehicle refitting]].&lt;br /&gt;
|-&lt;br /&gt;
|6||   40||{{ottdp|1.3|no|ottdrev=r24124}} Disable breakdown smoke effect.&lt;br /&gt;
|-&lt;br /&gt;
|7||   80||{{ottdp|1.7|no|ottdrev=r27668}} [[Action2/Vehicles#Composing_vehicles_from_multiple_sprites|Compose vehicle from multiple sprites.]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Long format introduction date (1A) ===&lt;br /&gt;
&lt;br /&gt;
Set the vehicle introduction date, in days since the year 0. This takes account of leap years; dividable by 4, but not 100 unless 400. A start date of 1920-01-01 is obtained with a value of 701265 (51 B3 0A 00). This property must be set after property 00 to take effect.&lt;br /&gt;
&lt;br /&gt;
{{ottdp|no|}} In TTDPatch, dates after 2044 will be limited to 2044.&lt;br /&gt;
&lt;br /&gt;
=== Sort vehicle list (1B) ===&lt;br /&gt;
See sort vehicle list for [[Action0Trains#Sort_vehicle_list_.281A.29|trains]] for details.&lt;br /&gt;
&lt;br /&gt;
=== Visual effect (1C) ===&lt;br /&gt;
See the equivalent [[Action0Trains#Visual_effects_and_wagon_power_.2822.29|train property]] for information about the meaning of all bits. There is no default effect for ships, therefore values of 00..0F will show no visual effect. Bit 7 (disable wagon power) currently has no meaning and should be left at 0.&lt;br /&gt;
&lt;br /&gt;
=== Custom cargo ageing period (1D) ===&lt;br /&gt;
See custom cargo ageing period for [[Action0Trains#Custom_cargo_ageing_period_.282B.29|trains]] for details.&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
To be written&lt;/div&gt;</summary>
		<author><name>Michi cc</name></author>
	</entry>
	<entry>
		<id>https://newgrf-specs.tt-wiki.net/index.php?title=Action0/Vehicles/RoadVehicles&amp;diff=4378</id>
		<title>Action0/Vehicles/RoadVehicles</title>
		<link rel="alternate" type="text/html" href="https://newgrf-specs.tt-wiki.net/index.php?title=Action0/Vehicles/RoadVehicles&amp;diff=4378"/>
		<updated>2023-01-30T22:06:19Z</updated>

		<summary type="html">&lt;p&gt;Michi cc: /* Properties */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right; padding-left:12px; background:none;&amp;quot;&amp;gt;{{NFONavVehicles}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Defining properties of road vehicles.&lt;br /&gt;
&lt;br /&gt;
== Properties ==&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Number!![[GRFActionsDetailed|Size]]!!Version!!Description!!Available for articulated parts&lt;br /&gt;
|-&lt;br /&gt;
|05||B||{{ottdp|1.10|no}}||Roadtype / tramtype (see below)||should be same as front&lt;br /&gt;
|-&lt;br /&gt;
|08||B||{{ottdp|0.6|2.0}}||Speed in mph*3.2||no&lt;br /&gt;
|-&lt;br /&gt;
|09||B||{{ottdp|0.6|2.0}}||Running cost factor||should be zero&lt;br /&gt;
|-&lt;br /&gt;
|0A||D||{{ottdp|0.6|2.0}}||Running cost base, see below||should be zero&lt;br /&gt;
|-&lt;br /&gt;
|0E||B||{{ottdp|0.6|2.0}}||Sprite ID (FF for new graphics)||yes&lt;br /&gt;
|-&lt;br /&gt;
|0F||B||{{ottdp|0.6|2.0}}||Capacity||yes&lt;br /&gt;
|-&lt;br /&gt;
|10||B||{{ottdp|0.6|2.0}}||Cargo type, see [[CargoTypes]]&amp;lt;br/&amp;gt;&lt;br /&gt;
{{grfTill|7}} For GRF version 7 and below: Type B &#039;cargo slot&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
{{grfFrom|8}} For GRF version 8 and above: Type A &#039;(translated) cargo bit&#039;&lt;br /&gt;
||yes&lt;br /&gt;
|-&lt;br /&gt;
|11||B||{{ottdp|0.6|2.0}}||Cost factor||should be zero&lt;br /&gt;
|-&lt;br /&gt;
|12||B||{{ottdp|0.6|2.0}}||Sound effect: 17/19/1A for regular, 3C/3E for toyland&amp;lt;br/&amp;gt;{{ottdp|1.6|no|ottdrev=r27507}} Since OpenTTD r27507 also custom sound effects from Action11 are allowed here.||no&lt;br /&gt;
|-&lt;br /&gt;
|13||B||{{ottdp|1.1|2.0}} {{grfFrom|2}}||Power in 10 hp, see below||should be zero&lt;br /&gt;
|-&lt;br /&gt;
|14||B||{{ottdp|1.1|2.0}} {{grfFrom|2}}||Weight in 1/4 tons, see below||should be zero&lt;br /&gt;
|-&lt;br /&gt;
|15||B||{{ottdp|0.7|2.0}} {{grfFrom|2}}||Speed in mph*0.8, see below||no&lt;br /&gt;
|-&lt;br /&gt;
|16||D||{{ottdp|0.6|2.0}} {{grfFrom|2}}||Bit mask of cargo types available for refitting (not refittable if 0 or unset), see column 2 (bit values) in [[CargoTypes]]||yes&lt;br /&gt;
|-&lt;br /&gt;
|17||B||{{ottdp|0.6|2.5}} {{grfFrom|6}}||Callback flags bit mask, see below||yes&lt;br /&gt;
|-&lt;br /&gt;
|18||B||{{ottdp|1.1|2.5|ttdprev=alpha 30}}||Coefficient of tractive effort||should be zero&lt;br /&gt;
|-&lt;br /&gt;
|19||B||{{ottdp|1.1|2.5|ttdprev=alpha 30}}||Coefficient of air drag||should be zero&lt;br /&gt;
|-&lt;br /&gt;
|1A||B||{{ottdp|0.6|2.5|ttdprev=alpha 30}}||Refit cost, using 25% of the [[BaseCosts|purchase price cost base]]||yes&lt;br /&gt;
|-&lt;br /&gt;
|1B||B||{{ottdp|0.6|2.5|ttdprev=alpha 44}}||Retire vehicle early, this many years before the end of phase 2 (see [[Action0General]])||no&lt;br /&gt;
|-&lt;br /&gt;
|1C||B||{{ottdp|0.6|2.5|ttdprev=alpha 58}}||Miscellaneous vehicle flags||partly (&amp;quot;tram&amp;quot; should be same as front)&lt;br /&gt;
|-&lt;br /&gt;
|1D||W||{{ottdp|0.6|2.5|ttdprev=alpha 58}}||Refittable cargo classes, see [[Action0Trains#Cargo classes 28 29|train prop. 28]]||yes&lt;br /&gt;
|-&lt;br /&gt;
|1E||W||{{ottdp|0.6|2.5|ttdprev=alpha 58}}||Non-refittable cargo classes, see [[Action0Trains#Cargo classes 28 29|train prop. 29]]||yes&lt;br /&gt;
|-&lt;br /&gt;
|1F||D||{{ottdp|0.6|2.5|ttdprev=r1210|ottdrev=r7191}}||Long format introduction date||no&lt;br /&gt;
|-&lt;br /&gt;
|20||B*||{{ottdp|0.7|no|ottdrev=r13831}}||Sort the purchase list||no&lt;br /&gt;
|-&lt;br /&gt;
|21||B||{{ottdp|1.1|no|ottdrev=r21240}}||Visual effect||yes&lt;br /&gt;
|-&lt;br /&gt;
|22||W||{{ottdp|1.2|no|ottdrev=r22713}}||Custom cargo ageing period||yes&lt;br /&gt;
|-&lt;br /&gt;
|23||B||{{ottdp|1.2|no|ottdrev=r23164}}||Make vehicle shorter, see [[Action0/Vehicles/Trains#Shorter_train_vehicles_.2821.29|train property 21]]||yes&lt;br /&gt;
|-&lt;br /&gt;
|24||B n*B||{{ottdp|1.2|no|ottdrev=r23291}}||List of always refittable cargo types, see [[Action0/Vehicles/Trains#List_of_always_refittable_cargo_types_.282C.2C_2D.29|train property 2C]]||yes&lt;br /&gt;
|-&lt;br /&gt;
|25||B n*B||{{ottdp|1.2|no|ottdrev=r23291}}||List of never refittable cargo types, see [[Action0/Vehicles/Trains#List_of_always_refittable_cargo_types_.282C.2C_2D.29|train property 2D]]||yes&lt;br /&gt;
|-&lt;br /&gt;
|26||W||{{ottdp|13|no}}||Vehicle variant group, see [[Action0/Vehicles/Trains#Vehicle_variant_group_.282F.29|train property 2F]]&lt;br /&gt;
|-&lt;br /&gt;
|27||D||{{ottdp|13|no}}||Extra flags, see [[Action0/Vehicles/Trains#Extra_flags_.2830.29|train property 30]]&lt;br /&gt;
|-&lt;br /&gt;
|28||B||{{ottdp|14|no|ottdrev=g2d73076056}}||Additional callback flags bit mask, see below||yes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
&lt;br /&gt;
=== Roadtype or tramtype (05) ===&lt;br /&gt;
{{ottdp|1.10|no}} Roadtype or tramtype for the vehicle.  This is an index into the [[Action0/Global_Settings#Roadtype_translation_table_.2816.29|roadtype]] or [[Action0/Global_Settings#Tramtype_translation_table_.2817.29|tramtype]] translation table.&lt;br /&gt;
&lt;br /&gt;
This property:&lt;br /&gt;
* will use property 1C bit 0 (flag &#039;vehicle is tram&#039;) to determine whether to use a roadtype or tramtype table&lt;br /&gt;
* requires an appropriate roadtype or tramtype table to be loaded&lt;br /&gt;
&lt;br /&gt;
=== Running cost base (0A) and factor (09) ===&lt;br /&gt;
&lt;br /&gt;
TTD calculates all costs by multiplying a 48-bit base amount with an 8-bit factor. &amp;amp;nbsp;The base amount is changed according to inflation, whereas the factor remains constant.&lt;br /&gt;
&lt;br /&gt;
For the running costs of road vehicles, the following base amounts are available:&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Type!!Value!!in little-endian notation&lt;br /&gt;
|-&lt;br /&gt;
|Road vehicle running cost base||4C48||48 4C 00 00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Theoretically, you could use pointers to other [[BaseCosts|base amounts]] available in TTD, but these are the numbers TTD uses for road vehicles.&lt;br /&gt;
&lt;br /&gt;
=== Cost factor (11) ===&lt;br /&gt;
&lt;br /&gt;
The cost factor is a bit-coded value which determines how expensive a vehicle is. The table below gives you some values to use for finding the right price for your vehicles.&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Cost factor!!Price&lt;br /&gt;
|-&lt;br /&gt;
|00||$ 0&lt;br /&gt;
|-&lt;br /&gt;
|01||$ 108&lt;br /&gt;
|-&lt;br /&gt;
|10||$ 1,750&lt;br /&gt;
|-&lt;br /&gt;
|20||$ 3,500&lt;br /&gt;
|-&lt;br /&gt;
|80||$ 14,000&lt;br /&gt;
|-&lt;br /&gt;
|FF||$ 27,890&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Realistic acceleration properties (13, 14, 15) ===&lt;br /&gt;
&lt;br /&gt;
Using property 15 to set the speed, it is possible to achieve speeds larger than 80 mph (127 km/h), to which property 08 is limited. When setting property 15, always set property 08 as well, so that the vehicle works reasonably well whether realistic acceleration is turned on or off. If property 15 is not set, the value from property 08 is used instead.&lt;br /&gt;
&lt;br /&gt;
{{ttdp|}} TTDPatch uses these properties only if road vehicles are set to realistic acceleration in the NewCurveAndMountainHandling switch. They are ignored otherwise.&lt;br /&gt;
&lt;br /&gt;
{{ottd|}} OpenTTD uses these properties always, if they are defined and gives the speed defined here precedence over the one defined in property 08.&lt;br /&gt;
&lt;br /&gt;
=== Callbacks (17, 28) ===&lt;br /&gt;
&lt;br /&gt;
For road vehicles, the following [[callbacks]] have to be enabled by setting the corresponding bit in properties 17 and 28 (certain other, not as frequently used callbacks are available without setting a bit here):&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Bit!!Value!!Variable 0C value!!Callback&lt;br /&gt;
|-&lt;br /&gt;
|1||2||11||Wagon length&lt;br /&gt;
|-&lt;br /&gt;
|2||4||12||Load amount&lt;br /&gt;
|-&lt;br /&gt;
|3||8||15||Set refitted capacity&lt;br /&gt;
|-&lt;br /&gt;
|4||10||16||Build articulated vehicle&lt;br /&gt;
|-&lt;br /&gt;
|5||20||19||show a suffix after the cargo type name&lt;br /&gt;
|-&lt;br /&gt;
|6||40||2D||Select color mapping for vehicle&lt;br /&gt;
|-&lt;br /&gt;
|7||80||33||Sound effect callbacks&lt;br /&gt;
|-&lt;br /&gt;
|8||100||161||{{ottd|14|ottdrev=gf5394ed2ef}}Engine name&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Bit is the bit you have to set, you do this by adding all the values for all the bits. Variable 0C value is what variable 0C will be set to, for checking it in the VarAction2 for callbacks.&lt;br /&gt;
&lt;br /&gt;
=== Coefficient of tractive effort (18) ===&lt;br /&gt;
&lt;br /&gt;
This cofficient sets what fraction of the vehicle weight is equal to the maximum tractive effort. &amp;amp;nbsp;This includes the effect of having some unpowered axles, as well as the coefficient of friction that is available.&lt;br /&gt;
&lt;br /&gt;
For a value of FF, the tractive effort is equal to the vehicle weight, for 80, it is half, and so on. &amp;amp;nbsp;If not set, a default of 4C is used, for a fraction of 0.30, corresponding to W&amp;lt;sub&amp;gt;adh&amp;lt;/sub&amp;gt;=W and a coefficient of friction of 0.30, which is the value used by the patch before TTDPatch 2.0.1 alpha 19.&lt;br /&gt;
&lt;br /&gt;
=== Coefficient of air drag (19) ===&lt;br /&gt;
&lt;br /&gt;
This property sets the air drag coefficient c2 used for the realistic acceleration model, from 01 (no airdrag) to FF (most air drag) in arbitrary units. &amp;amp;nbsp;00 means to use the default value that depends on the top speed (to simulate the fact that high-speed engines are more streamlined).&lt;br /&gt;
&lt;br /&gt;
The default values are the following:&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!top speed (mph/1.6)!!&amp;amp;lt;16!!16!!24!!32!!48!!64!!96!!128!!192!!256!!...&lt;br /&gt;
|-&lt;br /&gt;
|c2||192||128||96||64||48||32||24||16||12||8&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
For higher speeds, the series is continued in the same manner.&lt;br /&gt;
&lt;br /&gt;
Air drag in Newtons will then be c2*v*v with v in m/s, although it is probably futile to attempt to make c2 a realistic number due to the lack of TTd&#039;s consistent scaling. &amp;amp;nbsp;If a vehicle doesn&#039;t reach its historical top speed, you might try setting prop. 19 one or two higher than the default above, otherwise it&#039;s probably a good idea to leave it at the default.&lt;br /&gt;
&lt;br /&gt;
=== Refit cost (1A) ===&lt;br /&gt;
&lt;br /&gt;
Refit cost, using 25% of the [[BaseCosts|purchase price cost base]]. This property can be overridden by callback 15E.&lt;br /&gt;
&lt;br /&gt;
{{ottdp|1.2|no|ottdrev=r23087}} If the refit cost factor is set to zero and bit 4 of the miscellaneous flags (1C) is set, auto-refitting is allowed.&lt;br /&gt;
&lt;br /&gt;
=== Miscellaneous flags (1C) ===&lt;br /&gt;
&lt;br /&gt;
This is a bit mask, with the following bits:&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Bit!!Value!!Meaning&lt;br /&gt;
|-&lt;br /&gt;
|0||1||Vehicle is a tram/light rail vehicle and requires tram tracks to operate&lt;br /&gt;
|-&lt;br /&gt;
|1||2||Uses two company colors&lt;br /&gt;
|-&lt;br /&gt;
|2||4||reserved, do not use&lt;br /&gt;
|-&lt;br /&gt;
|3||8||reserved, do not use&lt;br /&gt;
|-&lt;br /&gt;
|4||10||{{ottdp|1.2|no|ottdrev=r23087}} Auto-refitting is enabled for refits where callback 15E allows it or prop 1A specifies zero cost.&lt;br /&gt;
|-&lt;br /&gt;
|5||   20||{{ottdp|1.2|no|ottdrev=r23861}} Use cargo multiplier for default cargo. See page about [[VehicleRefitting#Misc._vehicle_flag_5_.27use_of_capacity_multiplier_for_default_cargo.27_set|vehicle refitting]].&lt;br /&gt;
|-&lt;br /&gt;
|6||   40||{{ottdp|1.3|no|ottdrev=r24124}} Disable breakdown smoke effect.&lt;br /&gt;
|-&lt;br /&gt;
|7||   80||{{ottdp|1.7|no|ottdrev=r27668}} [[Action2/Vehicles#Composing_vehicles_from_multiple_sprites|Compose vehicle from multiple sprites.]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Long format introduction date (1F) ===&lt;br /&gt;
&lt;br /&gt;
Set the vehicle introduction date, in days since the year 0. This takes account of leap years; dividable by 4, but not 100 unless 400. A start date of 1920-01-01 is obtained with a value of 701265 (51 B3 0A 00). This property must be set after property 00 to take effect.&lt;br /&gt;
&lt;br /&gt;
{{ottdp|no|}} In TTDPatch, dates after 2044 will be limited to 2044.&lt;br /&gt;
&lt;br /&gt;
=== Sort vehicle list (20) ===&lt;br /&gt;
See sort vehicle list for [[Action0Trains#Sort vehicle list 1A|trains]] for details.&lt;br /&gt;
&lt;br /&gt;
=== Visual effect (21) ===&lt;br /&gt;
See the equivalent [[Action0Trains#Visual effects and wagon power 22|train property]] for information about the meaning of all bits. There is no default effect for road vehicles, therefore values of 00..0F will show no visual effect. Bit 7 (disable wagon power) currently has no meaning and should be left at 0.&lt;br /&gt;
&lt;br /&gt;
=== Custom cargo ageing period (22) ===&lt;br /&gt;
See custom cargo ageing period for [[Action0Trains#Custom_cargo_ageing_period_.282B.29|trains]] for details.&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
To be written&lt;/div&gt;</summary>
		<author><name>Michi cc</name></author>
	</entry>
	<entry>
		<id>https://newgrf-specs.tt-wiki.net/index.php?title=Action0/Vehicles/Trains&amp;diff=4377</id>
		<title>Action0/Vehicles/Trains</title>
		<link rel="alternate" type="text/html" href="https://newgrf-specs.tt-wiki.net/index.php?title=Action0/Vehicles/Trains&amp;diff=4377"/>
		<updated>2023-01-30T22:06:08Z</updated>

		<summary type="html">&lt;p&gt;Michi cc: Engine name CB&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right; padding-left:12px; background:none;&amp;quot;&amp;gt;{{NFONavVehicles}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
Defining properties of train vehicles.&lt;br /&gt;
&lt;br /&gt;
= Properties =&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Number!![[GRFActionsDetailed|Size]]!!Version!!Description!!Available for articulated parts&lt;br /&gt;
|-&lt;br /&gt;
|05||B||{{ottdp|0.6|2.0}}||Track type (see below)||should be same as front&lt;br /&gt;
|-&lt;br /&gt;
|08||B||{{ottdp|0.6|2.0}}||AI special flag: set to 1 if engine is &#039;optimized&#039; for passenger service (AI won&#039;t use it for other cargo), 0 otherwise||no&lt;br /&gt;
|-&lt;br /&gt;
|09||W||{{ottdp|0.6|2.0}}||Speed in mph*1.6 (see below)||no&lt;br /&gt;
|-&lt;br /&gt;
|0B||W||{{ottdp|0.6|2.0}}||Power (0 for wagons)||should be zero&lt;br /&gt;
|-&lt;br /&gt;
|0D||B||{{ottdp|0.6|2.0}}||Running cost factor (0 for wagons)||should be zero&lt;br /&gt;
|-&lt;br /&gt;
|0E||D||{{ottdp|0.6|2.0}}||Running cost base, see below||should be zero&lt;br /&gt;
|-&lt;br /&gt;
|12||B||{{ottdp|0.6|2.0}}||Sprite ID (FD for new graphics)||yes&lt;br /&gt;
|-&lt;br /&gt;
|13||B||{{ottdp|0.6|2.0}}||Dual-headed flag; 1 if dual-headed engine, 0 otherwise||should be zero also for front&lt;br /&gt;
|-&lt;br /&gt;
|14||B||{{ottdp|0.6|2.0}}||Cargo capacity||yes&lt;br /&gt;
|-&lt;br /&gt;
|15||B||{{ottdp|0.6|2.0}}||Cargo type, see [[CargoTypes]]&amp;lt;br/&amp;gt;&lt;br /&gt;
{{grfTill|7}} For GRF version 7 and below: Type B &#039;cargo slot&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
{{grfFrom|8}} For GRF version 8 and above: Type A &#039;(translated) cargo bit&#039;&lt;br /&gt;
||yes&lt;br /&gt;
|-&lt;br /&gt;
|16||B||{{ottdp|0.6|2.0}}||Weight in tons||should be zero&lt;br /&gt;
|-&lt;br /&gt;
|17||B||{{ottdp|0.6|2.0}}||Cost factor||should be zero&lt;br /&gt;
|-&lt;br /&gt;
|18||B||{{ottdp|&amp;amp;lt;0.7|2.0}}&amp;lt;ref&amp;gt;This property is not used by OpenTTDs NoAI API.&amp;lt;/ref&amp;gt;||Engine rank for the AI (AI selects the highest-rank engine of those it can buy)||no&lt;br /&gt;
|-&lt;br /&gt;
|19||B||{{ottdp|0.6|2.0}} {{grfFrom|1}}||Engine traction type (see below)||no&lt;br /&gt;
|-&lt;br /&gt;
|1A||B/B*&amp;lt;ref&amp;gt;{{ottdp|0.7|no|ottdrev=r13831}} Since OpenTTD r13831 this is an extended byte.&amp;lt;/ref&amp;gt;||{{ottdp|0.6|2.0}} {{grfFrom|1}}||Not a property, but an action: sort the purchase list.||no&lt;br /&gt;
|-&lt;br /&gt;
|1B||W||{{ottdp|0.6|2.5}} {{grfFrom|6}}||Power added by each wagon connected to this engine, see below||should be zero&lt;br /&gt;
|-&lt;br /&gt;
|1C||B||{{ottdp|0.6|2.5}} {{grfFrom|6}}||Refit cost, using 50% of the [[BaseCosts|purchase price cost base]]||yes&lt;br /&gt;
|-&lt;br /&gt;
|1D||D||{{ottdp|0.6|2.5}} {{grfFrom|6}}||Bit mask of cargo types available for refitting, see column 2 (bit value) in [[CargoTypes]]||yes&lt;br /&gt;
|-&lt;br /&gt;
|1E||B||{{ottdp|0.6|2.5}} {{grfFrom|6}}||Callback flags bit mask, see below||yes&lt;br /&gt;
|-&lt;br /&gt;
|1F||B||{{ottdp|0.6|2.5|ttdprev=alpha 19}}||Coefficient of tractive effort||should be zero&lt;br /&gt;
|-&lt;br /&gt;
|20||B||{{ottdp|1.1|2.5|ttdprev=alpha 27}}||Coefficient of air drag||should be zero&lt;br /&gt;
|-&lt;br /&gt;
|21||B||{{ottdp|0.6|2.0}} {{grfFrom|2}}||Make vehicle shorter by this amount, see below||yes&lt;br /&gt;
|-&lt;br /&gt;
|22||B||{{ottdp|0.6|2.5}} {{grfFrom|6}}||Set visual effect type (steam/smoke/sparks) as well as position, see below||yes&lt;br /&gt;
|-&lt;br /&gt;
|23||B||{{ottdp|0.6|2.5}} {{grfFrom|6}}||Set how much weight is added by making wagons powered (i.e. weight of engine), see below||should be zero&lt;br /&gt;
|-&lt;br /&gt;
|24||B||{{ottdp|0.6|2.5|ttdprev=alpha 44}}||High byte of vehicle weight, weight will be prop.24*256+prop.16||should be zero&lt;br /&gt;
|-&lt;br /&gt;
|25||B||{{ottdp|0.6|2.5|ttdprev=alpha 44}}||User-defined bit mask to set when checking veh. var. 42||yes&lt;br /&gt;
|-&lt;br /&gt;
|26||B||{{ottdp|0.6|2.5|ttdprev=alpha 44}}||Retire vehicle early, this many years before the end of phase 2 (see [[Action0General]])||no&lt;br /&gt;
|-&lt;br /&gt;
|27||B||{{ottdp|0.6|2.5|ttdprev=alpha 58}}||Miscellaneous flags||partly&lt;br /&gt;
|-&lt;br /&gt;
|28||W||{{ottdp|0.6|2.5|ttdprev=alpha 58}}||Refittable cargo classes||yes&lt;br /&gt;
|-&lt;br /&gt;
|29||W||{{ottdp|0.6|2.5|ttdprev=alpha 58}}||Non-refittable cargo classes||yes&lt;br /&gt;
|-&lt;br /&gt;
|2A||D||{{ottdp|0.6|2.5|ottdrev=r7191|ttdprev=r1210}}||Long format introduction date||no&lt;br /&gt;
|-&lt;br /&gt;
|2B||W||{{ottdp|1.2|no|ottdrev=r22713}}||Custom cargo ageing period||yes&lt;br /&gt;
|-&lt;br /&gt;
|2C||B n*B||{{ottdp|1.2|no|ottdrev=r23291}}||List of always refittable cargo types||yes&lt;br /&gt;
|-&lt;br /&gt;
|2D||B n*B||{{ottdp|1.2|no|ottdrev=r23291}}||List of never refittable cargo types||yes&lt;br /&gt;
|-&lt;br /&gt;
|2E||W||{{ottdp|12|no|ottdrev=g2183fd4dab}}||Maximum curve speed modifier||yes&lt;br /&gt;
|-&lt;br /&gt;
|2F||W||{{ottdp|13|no}}||Vehicle variant group||no&lt;br /&gt;
|-&lt;br /&gt;
|30||D||{{ottdp|13|no}}||Extra flags||??&lt;br /&gt;
|-&lt;br /&gt;
|31||B||{{ottdp|14|no|ottdrev=g2d73076056}}||Additional callback flags bit mask, see below||yes&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Description =&lt;br /&gt;
&lt;br /&gt;
== Track type (05) ==&lt;br /&gt;
Set track type of vehicle: 0 = rail, 1 = monorail, 2 = maglev. For setting the appropriate traction type, see [[Action0Trains#Engine traction type 19|prop19]].&lt;br /&gt;
&lt;br /&gt;
{{ottdp|1.0|no}} In OpenTTD, if a [[Action0Railtypes|rail type]] translation table is loaded, this property is an index into the table instead.&lt;br /&gt;
&lt;br /&gt;
== Speed (09) ==&lt;br /&gt;
&lt;br /&gt;
Train speed is in units of mph*1.6, i.e. approximately km/h.&lt;br /&gt;
&lt;br /&gt;
For wagons, this value is only used if the &amp;quot;wagonspeedlimit&amp;quot; switch is on, and it limits the speed of the train to that of the lowest wagon speed. &amp;amp;nbsp;This limit is ignored for wagons with a livery override for the current train, so that train sets always get their max speed from the engine&#039;s max speed.&lt;br /&gt;
&lt;br /&gt;
For wagons, a value of 0 means &amp;quot;default&amp;quot; (which depends on cargo type and date of introduction), and FFFF means no limit.&lt;br /&gt;
&lt;br /&gt;
== Power (0B) ==&lt;br /&gt;
&lt;br /&gt;
The power of the engine, in HP.&lt;br /&gt;
&lt;br /&gt;
A value of 0 means that the vehicle will be a wagon, otherwise it will be an engine.&lt;br /&gt;
&lt;br /&gt;
== Running cost base (0E) and factor (0D) ==&lt;br /&gt;
&lt;br /&gt;
TTD calculates all costs by multiplying a 32-bit [[BaseCosts|base amount]] with an 8-bit factor. &amp;amp;nbsp;The base amount is changed according to inflation, whereas the factor remains constant.&lt;br /&gt;
&lt;br /&gt;
For the running costs of train vehicles, the following base amounts are available depending on the vehicle type (the value here is a pointer into TTD&#039;s memory where the actual amount is stored):&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Type!!Value!!in little-endian notation&lt;br /&gt;
|-&lt;br /&gt;
|Steam engines||4C30||30 4C 00 00&lt;br /&gt;
|-&lt;br /&gt;
|Diesel engines||4C36||36 4C 00 00&lt;br /&gt;
|-&lt;br /&gt;
|Electric engines||4C3C||3C 4C 00 00&lt;br /&gt;
|-&lt;br /&gt;
|Wagons||0||00 00 00 00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Theoretically, you could use pointers to other base amounts available in TTD, but these are the numbers TTD uses for train vehicles.&lt;br /&gt;
&lt;br /&gt;
The following are some real values for maintenance costs depending on the setting of the above two factors. &amp;amp;nbsp;This value is correct for medium difficulty, but increases and decreases for hard and easy difficulties respectively. &amp;amp;nbsp;These are the costs of a new game starting in 1921, because they obviously increase with inflation over time (unless noinflation is turned on).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Running cost base 4C30 (steam)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Running cost factor!!Maintenance cost&lt;br /&gt;
|-&lt;br /&gt;
|01||$ 42&lt;br /&gt;
|-&lt;br /&gt;
|10||$ 700&lt;br /&gt;
|-&lt;br /&gt;
|20||$ 1.400&lt;br /&gt;
|-&lt;br /&gt;
|80||$ 5.600&lt;br /&gt;
|-&lt;br /&gt;
|A0||$ 7.000&lt;br /&gt;
|-&lt;br /&gt;
|FF||$ 11.112&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Running cost base 4C36 (diesel)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Running cost factor!!Maintenance cost&lt;br /&gt;
|-&lt;br /&gt;
|01||$ 40&lt;br /&gt;
|-&lt;br /&gt;
|10||$ 650&lt;br /&gt;
|-&lt;br /&gt;
|20||$ 1.300&lt;br /&gt;
|-&lt;br /&gt;
|80||$ 5.200&lt;br /&gt;
|-&lt;br /&gt;
|A0||$ 6.500&lt;br /&gt;
|-&lt;br /&gt;
|FF||$ 10.318&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Running cost base 4C3C (electric)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Running cost factor!!Maintenance cost&lt;br /&gt;
|-&lt;br /&gt;
|01||$ 36&lt;br /&gt;
|-&lt;br /&gt;
|10||$ 600&lt;br /&gt;
|-&lt;br /&gt;
|20||$ 1.200&lt;br /&gt;
|-&lt;br /&gt;
|80||$ 4.800&lt;br /&gt;
|-&lt;br /&gt;
|A0||$ 6.000&lt;br /&gt;
|-&lt;br /&gt;
|FF||$ 9.524&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Cost factor (17) ==&lt;br /&gt;
&lt;br /&gt;
The cost factor is a bit-coded value which determines how expensive an engine is. There is no distinction between steam, diesel or electric engines, they all use the same cost factor. The table below gives you some values to use for finding the right price for your engines.&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Cost factor!!Price&lt;br /&gt;
|-&lt;br /&gt;
|01||$ 3.124&lt;br /&gt;
|-&lt;br /&gt;
|10||$ 50.000&lt;br /&gt;
|-&lt;br /&gt;
|20||$ 100.000&lt;br /&gt;
|-&lt;br /&gt;
|80||$ 400.000&lt;br /&gt;
|-&lt;br /&gt;
|A0||$ 500.000&lt;br /&gt;
|-&lt;br /&gt;
|FF||$ 796.874&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Engine traction type (19) ==&lt;br /&gt;
&lt;br /&gt;
This sets the traction type of a train engine, i.e. whether it is powered by steam, diesel, electric, monorail or maglev technology. &amp;amp;nbsp;It also sets the corresponding sound effect of the engine, and if property 22 is not set, the visual effect as well.&lt;br /&gt;
&lt;br /&gt;
The following ranges are available (and it does not matter which value you pick):&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Values!!Traction type&lt;br /&gt;
|-&lt;br /&gt;
|00..07||Steam&lt;br /&gt;
|-&lt;br /&gt;
|08..27||Diesel&lt;br /&gt;
|-&lt;br /&gt;
|28..31||Electric&lt;br /&gt;
|-&lt;br /&gt;
|32..37||Monorail&lt;br /&gt;
|-&lt;br /&gt;
|38..41||Maglev&lt;br /&gt;
|}&lt;br /&gt;
Default value is 00, i.e. steam. For setting the appropriate track type, see [[Action0Trains#Track type 05|prop05]].&lt;br /&gt;
&lt;br /&gt;
{{ottdp|1.1|no}} In OpenTTD, if a [[Action0Railtypes|rail type]] translation table is loaded, setting this property does NOT alter the track type.&lt;br /&gt;
&lt;br /&gt;
== Sort vehicle list (1A) ==&lt;br /&gt;
&lt;br /&gt;
This is not a property as such, but an action. &amp;amp;nbsp;It forces TTDPatch to shuffle the vehicle this &amp;quot;property&amp;quot; is being set for in front of the vehicle with the given value of the property. &amp;amp;nbsp;The order of this list is only used in the train purchase window.&lt;br /&gt;
&lt;br /&gt;
For example, setting prop. 1A for vehicle 09 to a value of 07 would lead to the following internal list: ... 05 06 09 07 08 0A 0B ...&lt;br /&gt;
&lt;br /&gt;
This property can not simply be overwritten, because the list is already shuffled when trying to do so.&lt;br /&gt;
&lt;br /&gt;
{{ottdp|no|2.0}} It is possible to reset the list to its original order with a special action 0 that has num-info set to 0, and only sets property 1A for trains:&lt;br /&gt;
&amp;lt;pre&amp;gt;00 00 01 00 00 1A&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resetting the list should however only be done by sets that contain replacements for all train vehicles.&lt;br /&gt;
&lt;br /&gt;
{{ottdp|0.7|no|ottdrev=r13831}} This property is an extended byte in OpenTTD since r13831!&lt;br /&gt;
&lt;br /&gt;
== Powered train wagons (1B and 23, see also 22) ==&lt;br /&gt;
&lt;br /&gt;
Normally, train wagons are unpowered in TTD, and if you set property 0B to a non-zero value, they become engines instead. &amp;amp;nbsp;Therefore, to model real-life trains where wagons have power, a different mechanism is needed.&lt;br /&gt;
To make train wagons powered, you set property 1B of the &#039;&#039;&#039;engine&#039;&#039;&#039; instead of the wagon. This determines how much power each wagon adds to the train when attached to this engine. This only applies to wagons with a [[Action3|graphics override]] for this engine as well. &amp;amp;nbsp;This means that for example passenger wagons (with an override) will add power, but coal wagons (with no override) will not.&lt;br /&gt;
&lt;br /&gt;
In addition to adding power, these wagons are also heavier by the amount set in property 23.&lt;br /&gt;
&lt;br /&gt;
== Refit cost (1C) ==&lt;br /&gt;
&lt;br /&gt;
Refit cost, using 50% of the [[BaseCosts|purchase price cost base]]. This property can be overridden by callback 15E.&lt;br /&gt;
&lt;br /&gt;
{{ottdp|1.2|no|ottdrev=r23087}} If the refit cost factor is set to zero and bit 4 of the miscellaneous flags (27) is set, auto-refitting is allowed.&lt;br /&gt;
&lt;br /&gt;
== Callbacks (1E, 31) ==&lt;br /&gt;
For trains, the following [[callbacks]] have to be enabled by setting the corresponding bit in properties 1E and 31 (certain other, not as frequently used callbacks are available without setting a bit here):&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Bit!!Value!!Variable 0C value!!Callback&lt;br /&gt;
|-&lt;br /&gt;
|0||1||10||Powered wagons and visual effect&lt;br /&gt;
|-&lt;br /&gt;
|1||2||11||Wagon length&lt;br /&gt;
|-&lt;br /&gt;
|2||4||12||Load amount&lt;br /&gt;
|-&lt;br /&gt;
|3||8||15||Set refitted capacity&lt;br /&gt;
|-&lt;br /&gt;
|4||10||16||Build articulated engines&lt;br /&gt;
|-&lt;br /&gt;
|5||20||19||show a suffix after the cargo type name&lt;br /&gt;
|-&lt;br /&gt;
|6||40||2D||Select color mapping for vehicle&lt;br /&gt;
|-&lt;br /&gt;
|7||80||33||Sound effect callbacks&lt;br /&gt;
|-&lt;br /&gt;
|8||100||161||{{ottd|14|ottdrev=gf5394ed2ef}}Engine name&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Bit is the bit you have to set, you do this by adding all the values for all the bits. Variable 0C value is what variable 0C will be set to, for checking it in the VarAction2 for callbacks.&lt;br /&gt;
&lt;br /&gt;
These callbacks do not need a bit to activate them, they are always active and will be used if defined in the action 3/action 2 chain.&lt;br /&gt;
{| |-&lt;br /&gt;
!Variable 0C value!!Callback&lt;br /&gt;
|-&lt;br /&gt;
|1D||Can wagon be attached&lt;br /&gt;
|-&lt;br /&gt;
|23||Additional text in purchase screen&lt;br /&gt;
|-&lt;br /&gt;
|31||Start/stop check&lt;br /&gt;
|-&lt;br /&gt;
|32||32-day callback&lt;br /&gt;
|-&lt;br /&gt;
|36||Change Vehicle Properties&lt;br /&gt;
|-&lt;br /&gt;
|15E||Refit cost&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Coefficient of tractive effort (1F) ==&lt;br /&gt;
&lt;br /&gt;
This cofficient sets what fraction of the vehicle weight is equal to the maximum tractive effort. &amp;amp;nbsp;This includes the effect of having some unpowered axles, as well as the coefficient of friction that is available.&lt;br /&gt;
&lt;br /&gt;
Theoretically, this value should be calculated by taking the ratio of adhesive weight W&amp;lt;sub&amp;gt;adh&amp;lt;/sub&amp;gt; (i.e. the vehicle weight that rests on powered axles) times the coefficient of friction µ between the wheels and the rails to the total vehicle weight W, times 255, and convert to hex:&lt;br /&gt;
&lt;br /&gt;
prop. 1F = HEX ((W&amp;lt;sub&amp;gt;adh&amp;lt;/sub&amp;gt; * µ / W) * 255)&lt;br /&gt;
&lt;br /&gt;
With prop. 1F having a value of FF, the tractive effort is equal to the vehicle weight, for 80, it is half, and so on. If not set, a default of 4C is used, for a fraction of 0.30, corresponding to Wadh=W and a coefficient of friction of 0.30, which is the value used by the patch before TTDPatch 2.0.1 alpha 19.&lt;br /&gt;
&lt;br /&gt;
Sometimes you know the real-life tractive effort instead of adhesive weight and coefficient of friction. To help calculating prop. 1F in that case, here&#039;s a small example using the NS 1600 (Electric) with a mass of 84 tons and real-life tractive effort (TE&amp;lt;sub&amp;gt;real&amp;lt;/sub&amp;gt;) of 259 kN. To quickly find the value for property 1F you fill in the following formula:&lt;br /&gt;
&lt;br /&gt;
prop. 1F = HEX ((TE&amp;lt;sub&amp;gt;real&amp;lt;/sub&amp;gt; / (Mass * g) * 255)&lt;br /&gt;
&lt;br /&gt;
That may look confusing but you already know all variables:&lt;br /&gt;
&lt;br /&gt;
prop. 1F = HEX ((259 / (84 * 9.8) * 255)&lt;br /&gt;
&lt;br /&gt;
prop. 1F = HEX (0.3146 *255) = HEX(80.229)&lt;br /&gt;
&lt;br /&gt;
HEX calculations only work with figures in the natural domain: each figure has to be a positive and round figure. Therefore the value you convert to HEX isn&#039;t 80.229 but 80:&lt;br /&gt;
&lt;br /&gt;
HEX 80 = 50&lt;br /&gt;
&lt;br /&gt;
Property 1F for the NS 1600 (Electric) would then be: 1F 50.&lt;br /&gt;
&lt;br /&gt;
== Coefficient of air drag (20) ==&lt;br /&gt;
&lt;br /&gt;
This property sets the air drag coefficient c2 used for the realistic acceleration model, from 01 (no airdrag) to FF (most air drag) in arbitrary units. 00 means to use the default value that depends on the top speed (to simulate the fact that high-speed engines are more streamlined).&lt;br /&gt;
&lt;br /&gt;
The default values are the following:&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!top speed (mph/1.6)!!	&amp;lt;16!!	16!!	24!!	32!!	48!!	64!!	96!!	128!!	192!!	256!!	...&lt;br /&gt;
|-&lt;br /&gt;
|c2||	192||	128||	96||	64||	48||	32||	24||	16||	12||	8&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For higher speeds, the series is continued in the same manner.&lt;br /&gt;
&lt;br /&gt;
Air drag in Newtons will then be c2*v*v with v in m/s, although it is probably futile to attempt to make c2 a realistic number due to the lack of TTD&#039;s consistent scaling. If a train doesn&#039;t reach its historical top speed, you might try setting the value of prop. 20 one or two steps lower than the default above, otherwise it&#039;s probably a good idea to leave it at the default.&lt;br /&gt;
&lt;br /&gt;
== Shorter train vehicles (21) ==&lt;br /&gt;
&lt;br /&gt;
This property reduces the length of train vehicles, in units of 1/8th (12.5%). The value 00 means the vehicle has the full length, 01 means shorter by 1/8th (12.5%), up to 05=shorter by 5/8ths (62.5%). Larger numbers will not work properly&lt;br /&gt;
&amp;lt;ref&amp;gt;{{ottdp|1.0|no|ottdrev=r15793}} This restriction has been removed in OpenTTD r15793. Every vehicle can have a length between 1/8 and 8/8 independent of its position in the chain.&amp;lt;/ref&amp;gt;,&lt;br /&gt;
except at the end of the train&lt;br /&gt;
&amp;lt;ref&amp;gt;{{ottdp|&amp;amp;lt;1.0|}} This means that it is only safe to use values larger than 05 in the length callback making sure that they are only returned for the very last vehicle in the train. Otherwise the train will occasionally fall apart, with the wagons after the shortest one stopping to move.&amp;lt;/ref&amp;gt;. The vehicle length is set whenever it leaves a depot. This property does not work for the first vehicle in a train (i.e. the engine).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Visual effects and wagon power (22) ==&lt;br /&gt;
&lt;br /&gt;
By default, the visual effect of train engines is determined by the traction type (property 19). With this option you can change the type of effect as well as the position of it relative to the vehicle. (Note: for TTDPatch and OpenTTD up to r21229 only the positioning of steam actually works. For {{ottdp|1.1|no|ottdrev=r21230}} positioning diesel smoke and electric sparks works as well) The position of the effect provides a range from 0 to F that is added to the type of the effect.&lt;br /&gt;
&lt;br /&gt;
Position 0 corresponds to a point half a vehicle length ahead of the vehicle, 4 is the front of the vehicle, 8 the middle, C the end and F is a half length behind the vehicle. Intermediate values are in-between.&lt;br /&gt;
&lt;br /&gt;
Additionally, this property can be used to disable powered wagons of this type, although that is usually done with [[Callbacks#Visual_effect_and_wagon_power_.2810.29| callback 10]] instead (which has the same meaning as prop. 22, but is more flexible).&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Range	!!Effect type&lt;br /&gt;
|-&lt;br /&gt;
|00..0F||Use the default effect type, but reposition it. For engines this is defined via property 19, wagons have no default effect.&lt;br /&gt;
|-&lt;br /&gt;
|10..1F||Steam puffs&lt;br /&gt;
|-&lt;br /&gt;
|20..2F||Diesel fumes&lt;br /&gt;
|-&lt;br /&gt;
|30..3F||Electric sparks&lt;br /&gt;
|-&lt;br /&gt;
|40||Disable visual effect&lt;br /&gt;
|-&lt;br /&gt;
|41..7F||{{ottdp|1.5|no|ottdrev=r26747}} Create effects with [[Callbacks#Advanced_effect_creation_.28160.29|Callback 160]] using one of these spawning models:&lt;br /&gt;
* 41 Steam: Gradually less effects when approaching max speed&lt;br /&gt;
* 42 Diesel: Effect proportional to acceleration, no effect when idling at top speed&lt;br /&gt;
* 43 Electric: Random effect, gradually less likely when approaching max spped&lt;br /&gt;
* 44-7F Reserved&lt;br /&gt;
|-&lt;br /&gt;
|80+00..80+7F||Same as 00..7F above, but disable wagon power&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For example, 28 would make the wagon powered and emit diesel fumes, but 80+28 = A8 would only emit the diesel fumes without adding power.&lt;br /&gt;
&lt;br /&gt;
== Miscellaneous flags (27) ==&lt;br /&gt;
&lt;br /&gt;
This is a bit mask, with the following bits:&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Bit!!	Value!!	Version !!Meaning&lt;br /&gt;
|-&lt;br /&gt;
|0||	1||{{ottdp|0.6|2.5}}||	Vehicle tilts in curves, and thus gets speed bonus &amp;lt;ref&amp;gt;The tilting speed bonus only applies if all vehicles in the train have this bit set. In TTDPatch it requires the &amp;quot;curves&amp;quot; switch to be on. For realistic curves, it gives the train two free curving pieces with no speed decrease, and for other settings, it increases the curves setting by one (0-&amp;gt;1, 1-&amp;gt;2, 2-&amp;gt;2). In OpenTTD, the curve speed limit increases by 20% if &#039;realistic&#039; acceleration is enabled, else there is no effect.&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|1||	2||{{ottdp|0.6|2.5}}||	Uses two company colors&lt;br /&gt;
|-&lt;br /&gt;
|2||	4||{{ottdp|0.6|2.5}}||	Vehicle is a multiple unit (DMU/EMU), for colour selection&lt;br /&gt;
|-&lt;br /&gt;
|3||	8||Varies|| {{ottdp|1.1|no|ottdrev=r21966}}Vehicle can be flipped around in the depot. &amp;lt;br&amp;gt;{{ottdp|13|no|no}}This flag is no longer required, vehicles can always be flipped. &lt;br /&gt;
&amp;lt;ref&amp;gt;From {{ottd|13|no}} onwards, OpenTTD will again allow all vehicles to flip, and will automatically adjust offsets accordingly. From {{ottd|13|no}}, if this flag is set, OpenTTD will not automatically apply the correct offsets for vehicles &amp;lt; 8/8 long, and will defer to offsets set by the grf. Do not set this flag unless you need it for a specific reason.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
For {{ottd|1.1|r21966}} up to {{ottdp|12|no|no}} when you enable flipping of a vehicle in a depot you must make sure that the graphics are correctly aligned when flipped as well. Especially in the case of shortened vehicles.  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Prior to {{ottd|1.1|r21966}} all non-multiheaded/non-articulated vehicles would be able to flip around in the depot. As such {{ottd|1.1|r21966}} disables a &amp;quot;feature&amp;quot; in OpenTTD, but often it makes no sense to flip vehicles around (symetric vehicles) or the graphics are wrong (most shortened vehicles), and thus only enabling this when the NewGRF developer says it is possible is better.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
For all relevant OpenTTD versions, the flipping bit has no effect for multiheaded or articulated vehicles as they cannot be flipped in depot. &lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|4||   10||{{ottdp|1.2|no|ottdrev=r23087}}|| Auto-refitting is enabled for refits where callback 15E allows it or prop 1C specifies zero cost&lt;br /&gt;
|-&lt;br /&gt;
|5||   20||{{ottdp|1.2|no|ottdrev=r23861}}|| Use cargo multiplier for default cargo (and load amount). See page about [[VehicleRefitting#Misc._vehicle_flag_5_.27use_of_capacity_multiplier_for_default_cargo.27_set|vehicle refitting]].&lt;br /&gt;
|-&lt;br /&gt;
|6||   40||{{ottdp|1.3|no|ottdrev=r24124}}|| Disable breakdown smoke effect.&lt;br /&gt;
|-&lt;br /&gt;
|7||   80||{{ottdp|1.7|no|ottdrev=r27668}}|| [[Action2/Vehicles#Composing_vehicles_from_multiple_sprites|Compose vehicle from multiple sprites.]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Cargo classes (28, 29) ==&lt;br /&gt;
&lt;br /&gt;
To make vehicle sets more compatible with future new cargo definitions, these two properties allow vehicles to define what type of cargo they should be refittable to. A wagon will be refittable to all cargo types that match any of the classes set in prop. 28 except for the ones that match any of the classes set in prop. 29. In addition, afterwards those cargo types listed in prop. 1D will be toggled. In terms of logic, it is&lt;br /&gt;
&lt;br /&gt;
Refit list = (cargos from prop. 28 AND NOT cargos from prop. 29) XOR cargos from prop. 1D&lt;br /&gt;
&lt;br /&gt;
This means, if a cargo type is in the list because it matches prop. 28 but not prop 29, having the respective bit set in prop. 1D will disable it again. Conversely, if the cargo type is not in the list, the bit in prop. 1D will add it. This way, if props. 28/29 are unset, prop. 1D will retain the original meaning, but it is still able to selectively add or remove certain cargo types even if props. 28/29 are used.&lt;br /&gt;
&lt;br /&gt;
As a consequence, you have both full control over the cargo types that you know of (using prop. 1D), and those you don&#039;t know of yet (using props. 28/29). Leave the bits for cargos that you don&#039;t know of unset in prop. 1D, and set/clear the bits for known cargos to add/remove them from the list as appropriate.&lt;br /&gt;
&lt;br /&gt;
{{ottd|1.2|r23291}} It is recommended to use properties 2C and 2D instead of property 1D, as property 1D behaves badly if the cargo classes of a cargo are ever changed.&lt;br /&gt;
&lt;br /&gt;
The class list is a bit mask. See the action0 cargos page for bits and classes defined so far.&lt;br /&gt;
&lt;br /&gt;
Take a look at [[Action0Cargos#Cargo classes 16|Action0 for cargos]] for the classes defined so far.&lt;br /&gt;
&lt;br /&gt;
Note that cargo types may belong to several classes. This is the reason for making two properties, an additive and a subtractive one, because this way a vehicle can be specified to be refittable to, for example, all express cargo that does not require refrigeration (i.e., from the default cargos, no food).&lt;br /&gt;
For the cargo types added in this way, the vehicle will probably have no specific graphics (in [[Action3|action 3]]) to show the cargo load. &amp;amp;nbsp;In this case, the default will be used, which should therefore be sufficiently generic-looking if possible. However, using [[VariationalAction2/Vehicles#Vehicle cargo info 47|vehicle variable 47]] you can at least select the graphics most appropriate for the cargo type&#039;s class.&lt;br /&gt;
About the interaction with other properties take a look at the summary page about [[VehicleRefitting|vehicle refitting]].&lt;br /&gt;
&lt;br /&gt;
Disclaimer: there is no guarantee that classes won&#039;t vary over time or between sets. The classes of a cargo may change between different versions of a specific industry/cargo newgrf, or different classes may be set for the same cargo label by different industry/cargo newgrfs. Feel free to use classes in your set for conveniently refitting to cargos, but if you - the vehicle author - care about specific cargos being transported in specific vehicles, use label based refits (changing labels without a very good reason is considered to be bad practice).&lt;br /&gt;
&lt;br /&gt;
== Long format introduction date (2A) ==&lt;br /&gt;
&lt;br /&gt;
Set the vehicle introduction date, in days since the year 0. This takes account of leap years; dividable by 4, but not 100 unless 400. A start date of 1920-01-01 is obtained with a value of 701265 (51 B3 0A 00). This property must be set after property 00 to take effect.&lt;br /&gt;
&lt;br /&gt;
{{ottdp|no|}} In TTDPatch, dates after 2044 will be limited to 2044.&lt;br /&gt;
&lt;br /&gt;
== Custom cargo ageing period (2B) ==&lt;br /&gt;
&lt;br /&gt;
This property allows to modify the period in ticks after which cargo carried by the vehicle is aged. By default, cargo is aged every 185 ticks. A value of 0 disables ageing of cargo. This property can be modified via [[Callbacks#Change_vehicle_properties_.2836.29|callback 36]].&lt;br /&gt;
&lt;br /&gt;
Changing this value from the default does not automatically make the vehicle earn more or less.  Predicting the effect is complicated, as it depends on many things, including: vehicle speed, route length, route delays, transfer credits, the payment curve set by the cargo, and whether the cargo is already aged from a previous transfer when the vehicle loads it.&lt;br /&gt;
&lt;br /&gt;
Authors are advised that tests show this property can lead to disappointment. Avoid, or use with caution.&lt;br /&gt;
&lt;br /&gt;
== List of always refittable cargo types (2C, 2D) ==&lt;br /&gt;
&lt;br /&gt;
These two properties allows to unconditionally include or exclude cargo types for refittability independent of any of the other refit properties or the cargo classes. If you specify a cargo type that is not available, the cargo type will be silently ignored.&lt;br /&gt;
&lt;br /&gt;
The format for both properties is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;2C/2D &amp;amp;lt;nvar&amp;amp;gt; (&amp;amp;lt;Index into cargo type table&amp;amp;gt;){n}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That is you give the number of cargos in a single byte followed by a list of that length of indexes into the cargo translation table ([[CargoTypes|Type A]]).&lt;br /&gt;
&lt;br /&gt;
== Maximum curve speed modifier (2E) ==&lt;br /&gt;
&lt;br /&gt;
This property allows to give vehicles a maximum curve speed modifier. The given value is treated as a signed word with 8 fractional bits. This property can be modified via [[Callbacks#Change_vehicle_properties_.2836.29|callback 36]].&lt;br /&gt;
&lt;br /&gt;
The modifier is applied after the normal curve speed calculation is done using the formula max_curve_speed * (1 + prop 2E). This means that the default property value of 0 is equivalent to no change. While values less than -1.0 are technically possible, the resulting vehicle curve speed is clamped at 2 mph-ish to make sure vehicles don&#039;t become permanently stuck.&lt;br /&gt;
&lt;br /&gt;
If different vehicles in a train have different curve speed modifiers, the lowest value wins.&lt;br /&gt;
&lt;br /&gt;
== Vehicle variant group (2F) ==&lt;br /&gt;
&lt;br /&gt;
This property supports grouping vehicles in the purchase menu (also the autoreplace menu). The property value is the ID of another vehicle in the same GRF which will act as the parent for vehicles in the group.&lt;br /&gt;
&lt;br /&gt;
Groups can also be nested (this is experimental as of December 2022 and may change with testing).&lt;br /&gt;
&lt;br /&gt;
See also [[Action0Trains#Extra flags (30)|vehicle extra flags]] which can influence the behaviour of vehicles in variant groups.&lt;br /&gt;
&lt;br /&gt;
See also https://github.com/OpenTTD/OpenTTD/pull/10220&lt;br /&gt;
&lt;br /&gt;
== Extra flags (30) ==&lt;br /&gt;
&lt;br /&gt;
This is a bit mask, with the following bits:&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Bit!!	Value!!	Version !!Meaning&lt;br /&gt;
|-&lt;br /&gt;
|0||	1||{{ottdp|13|no}}||	Disable &amp;quot;New Vehicle&amp;quot; news message for this engine&lt;br /&gt;
|-&lt;br /&gt;
|1||	2||{{ottdp|13|no}}||	Disable &amp;quot;Exclusive Preview&amp;quot; for this engine&lt;br /&gt;
|-&lt;br /&gt;
|2||	4||{{ottdp|13|no}}||	Variants - Include this variant when primary engine has &amp;quot;Exclusive Preview&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|3||	8||{{ottdp|13|no}}||		Variants - (Attempt to) Synchronize reliability the primary engine&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Example =&lt;br /&gt;
&lt;br /&gt;
Below is an example of what a real Action 0 pseudo-sprite could look like for a train engine.&lt;br /&gt;
&lt;br /&gt;
(A basic version)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;10 * 14 &amp;amp;nbsp;00 00 03 01 02 09 C0 00 0B D8 0E 12 FD&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!&#039;&#039;&#039;Bytes&#039;&#039;&#039;!!&#039;&#039;&#039;Meaning&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|10||&amp;amp;lt;Sprite-number&amp;amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|14||&amp;amp;lt;Length&amp;amp;gt;: of the action in bytes; start counting at 0 (&amp;amp;lt;action&amp;amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
|00||&amp;amp;lt;action&amp;amp;gt;: sets this pseudo-sprite to function as action 0&lt;br /&gt;
|-&lt;br /&gt;
|00||&amp;amp;lt;Feature&amp;amp;gt;: In this case Train&lt;br /&gt;
|-&lt;br /&gt;
|03||&amp;amp;lt;Num-props&amp;amp;gt;: 3 Properties to change&lt;br /&gt;
|-&lt;br /&gt;
|01||&amp;amp;lt;Num-info&amp;amp;gt;: 1 vehicle ID to make changes to&lt;br /&gt;
|-&lt;br /&gt;
|02||&amp;amp;lt;ids...&amp;amp;gt;: vehcile ID (02 - Ploddyphut Choo-Choo)&lt;br /&gt;
|-&lt;br /&gt;
|||&#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|09||&amp;amp;lt;Speed&amp;amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|C0 00||&amp;amp;lt;Value&amp;amp;gt;: Value for Speed (192 Km/h)&lt;br /&gt;
|-&lt;br /&gt;
|0B||&amp;amp;lt;Power&amp;amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|D8 0E||&amp;amp;lt;value&amp;amp;gt;: value for Power (3800 HP)&lt;br /&gt;
|-&lt;br /&gt;
|12||&amp;amp;lt;Sprite ID&amp;amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|FD||&amp;amp;lt;value&amp;amp;gt;: FD for new graphics&lt;br /&gt;
|}&lt;br /&gt;
Since nfo version 7, so-called [[GRFActionsDetailed#Byte order|&amp;quot;escape sequences&amp;quot;]] have been introduced in an attempt to offer a more human-readable form.&lt;br /&gt;
&lt;br /&gt;
Below is the same example as above, with escape sequences being used:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;-1 * 0 00 00 \b3 01 \b*2 // \b&amp;amp;lt;number of props to change&amp;amp;gt; \b*&amp;amp;lt;vehicle ID&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp;09 \w192 // value for speed (192 Km/h)&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp;0B \w3800 // value for power (3800 hp)&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp;12 FD // use new graphics&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Michi cc</name></author>
	</entry>
	<entry>
		<id>https://newgrf-specs.tt-wiki.net/index.php?title=Action0/Vehicles/RoadVehicles&amp;diff=4376</id>
		<title>Action0/Vehicles/RoadVehicles</title>
		<link rel="alternate" type="text/html" href="https://newgrf-specs.tt-wiki.net/index.php?title=Action0/Vehicles/RoadVehicles&amp;diff=4376"/>
		<updated>2023-01-30T22:04:23Z</updated>

		<summary type="html">&lt;p&gt;Michi cc: Engine name CB.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right; padding-left:12px; background:none;&amp;quot;&amp;gt;{{NFONavVehicles}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Defining properties of road vehicles.&lt;br /&gt;
&lt;br /&gt;
== Properties ==&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Number!![[GRFActionsDetailed|Size]]!!Version!!Description!!Available for articulated parts&lt;br /&gt;
|-&lt;br /&gt;
|05||B||{{ottdp|1.10|no}}||Roadtype / tramtype (see below)||should be same as front&lt;br /&gt;
|-&lt;br /&gt;
|08||B||{{ottdp|0.6|2.0}}||Speed in mph*3.2||no&lt;br /&gt;
|-&lt;br /&gt;
|09||B||{{ottdp|0.6|2.0}}||Running cost factor||should be zero&lt;br /&gt;
|-&lt;br /&gt;
|0A||D||{{ottdp|0.6|2.0}}||Running cost base, see below||should be zero&lt;br /&gt;
|-&lt;br /&gt;
|0E||B||{{ottdp|0.6|2.0}}||Sprite ID (FF for new graphics)||yes&lt;br /&gt;
|-&lt;br /&gt;
|0F||B||{{ottdp|0.6|2.0}}||Capacity||yes&lt;br /&gt;
|-&lt;br /&gt;
|10||B||{{ottdp|0.6|2.0}}||Cargo type, see [[CargoTypes]]&amp;lt;br/&amp;gt;&lt;br /&gt;
{{grfTill|7}} For GRF version 7 and below: Type B &#039;cargo slot&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
{{grfFrom|8}} For GRF version 8 and above: Type A &#039;(translated) cargo bit&#039;&lt;br /&gt;
||yes&lt;br /&gt;
|-&lt;br /&gt;
|11||B||{{ottdp|0.6|2.0}}||Cost factor||should be zero&lt;br /&gt;
|-&lt;br /&gt;
|12||B||{{ottdp|0.6|2.0}}||Sound effect: 17/19/1A for regular, 3C/3E for toyland&amp;lt;br/&amp;gt;{{ottdp|1.6|no|ottdrev=r27507}} Since OpenTTD r27507 also custom sound effects from Action11 are allowed here.||no&lt;br /&gt;
|-&lt;br /&gt;
|13||B||{{ottdp|1.1|2.0}} {{grfFrom|2}}||Power in 10 hp, see below||should be zero&lt;br /&gt;
|-&lt;br /&gt;
|14||B||{{ottdp|1.1|2.0}} {{grfFrom|2}}||Weight in 1/4 tons, see below||should be zero&lt;br /&gt;
|-&lt;br /&gt;
|15||B||{{ottdp|0.7|2.0}} {{grfFrom|2}}||Speed in mph*0.8, see below||no&lt;br /&gt;
|-&lt;br /&gt;
|16||D||{{ottdp|0.6|2.0}} {{grfFrom|2}}||Bit mask of cargo types available for refitting (not refittable if 0 or unset), see column 2 (bit values) in [[CargoTypes]]||yes&lt;br /&gt;
|-&lt;br /&gt;
|17||B||{{ottdp|0.6|2.5}} {{grfFrom|6}}||Callback flags bit mask, see below||yes&lt;br /&gt;
|-&lt;br /&gt;
|18||B||{{ottdp|1.1|2.5|ttdprev=alpha 30}}||Coefficient of tractive effort||should be zero&lt;br /&gt;
|-&lt;br /&gt;
|19||B||{{ottdp|1.1|2.5|ttdprev=alpha 30}}||Coefficient of air drag||should be zero&lt;br /&gt;
|-&lt;br /&gt;
|1A||B||{{ottdp|0.6|2.5|ttdprev=alpha 30}}||Refit cost, using 25% of the [[BaseCosts|purchase price cost base]]||yes&lt;br /&gt;
|-&lt;br /&gt;
|1B||B||{{ottdp|0.6|2.5|ttdprev=alpha 44}}||Retire vehicle early, this many years before the end of phase 2 (see [[Action0General]])||no&lt;br /&gt;
|-&lt;br /&gt;
|1C||B||{{ottdp|0.6|2.5|ttdprev=alpha 58}}||Miscellaneous vehicle flags||partly (&amp;quot;tram&amp;quot; should be same as front)&lt;br /&gt;
|-&lt;br /&gt;
|1D||W||{{ottdp|0.6|2.5|ttdprev=alpha 58}}||Refittable cargo classes, see [[Action0Trains#Cargo classes 28 29|train prop. 28]]||yes&lt;br /&gt;
|-&lt;br /&gt;
|1E||W||{{ottdp|0.6|2.5|ttdprev=alpha 58}}||Non-refittable cargo classes, see [[Action0Trains#Cargo classes 28 29|train prop. 29]]||yes&lt;br /&gt;
|-&lt;br /&gt;
|1F||D||{{ottdp|0.6|2.5|ttdprev=r1210|ottdrev=r7191}}||Long format introduction date||no&lt;br /&gt;
|-&lt;br /&gt;
|20||B*||{{ottdp|0.7|no|ottdrev=r13831}}||Sort the purchase list||no&lt;br /&gt;
|-&lt;br /&gt;
|21||B||{{ottdp|1.1|no|ottdrev=r21240}}||Visual effect||yes&lt;br /&gt;
|-&lt;br /&gt;
|22||W||{{ottdp|1.2|no|ottdrev=r22713}}||Custom cargo ageing period||yes&lt;br /&gt;
|-&lt;br /&gt;
|23||B||{{ottdp|1.2|no|ottdrev=r23164}}||Make vehicle shorter, see [[Action0/Vehicles/Trains#Shorter_train_vehicles_.2821.29|train property 21]]||yes&lt;br /&gt;
|-&lt;br /&gt;
|24||B n*B||{{ottdp|1.2|no|ottdrev=r23291}}||List of always refittable cargo types, see [[Action0/Vehicles/Trains#List_of_always_refittable_cargo_types_.282C.2C_2D.29|train property 2C]]||yes&lt;br /&gt;
|-&lt;br /&gt;
|25||B n*B||{{ottdp|1.2|no|ottdrev=r23291}}||List of never refittable cargo types, see [[Action0/Vehicles/Trains#List_of_always_refittable_cargo_types_.282C.2C_2D.29|train property 2D]]||yes&lt;br /&gt;
|-&lt;br /&gt;
|26||W||{{ottdp|13|no}}||Vehicle variant group, see [[Action0/Vehicles/Trains#Vehicle_variant_group_.282F.29|train property 2F]]&lt;br /&gt;
|-&lt;br /&gt;
|27||D||{{ottdp|13|no}}||Extra flags, see [[Action0/Vehicles/Trains#Extra_flags_.2830.29|train property 30]]&lt;br /&gt;
|-&lt;br /&gt;
|28||B||{{ottd|14|ottdrev=gf5394ed2ef}}||Additional callback flags bit mask, see below||yes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
&lt;br /&gt;
=== Roadtype or tramtype (05) ===&lt;br /&gt;
{{ottdp|1.10|no}} Roadtype or tramtype for the vehicle.  This is an index into the [[Action0/Global_Settings#Roadtype_translation_table_.2816.29|roadtype]] or [[Action0/Global_Settings#Tramtype_translation_table_.2817.29|tramtype]] translation table.&lt;br /&gt;
&lt;br /&gt;
This property:&lt;br /&gt;
* will use property 1C bit 0 (flag &#039;vehicle is tram&#039;) to determine whether to use a roadtype or tramtype table&lt;br /&gt;
* requires an appropriate roadtype or tramtype table to be loaded&lt;br /&gt;
&lt;br /&gt;
=== Running cost base (0A) and factor (09) ===&lt;br /&gt;
&lt;br /&gt;
TTD calculates all costs by multiplying a 48-bit base amount with an 8-bit factor. &amp;amp;nbsp;The base amount is changed according to inflation, whereas the factor remains constant.&lt;br /&gt;
&lt;br /&gt;
For the running costs of road vehicles, the following base amounts are available:&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Type!!Value!!in little-endian notation&lt;br /&gt;
|-&lt;br /&gt;
|Road vehicle running cost base||4C48||48 4C 00 00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Theoretically, you could use pointers to other [[BaseCosts|base amounts]] available in TTD, but these are the numbers TTD uses for road vehicles.&lt;br /&gt;
&lt;br /&gt;
=== Cost factor (11) ===&lt;br /&gt;
&lt;br /&gt;
The cost factor is a bit-coded value which determines how expensive a vehicle is. The table below gives you some values to use for finding the right price for your vehicles.&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Cost factor!!Price&lt;br /&gt;
|-&lt;br /&gt;
|00||$ 0&lt;br /&gt;
|-&lt;br /&gt;
|01||$ 108&lt;br /&gt;
|-&lt;br /&gt;
|10||$ 1,750&lt;br /&gt;
|-&lt;br /&gt;
|20||$ 3,500&lt;br /&gt;
|-&lt;br /&gt;
|80||$ 14,000&lt;br /&gt;
|-&lt;br /&gt;
|FF||$ 27,890&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Realistic acceleration properties (13, 14, 15) ===&lt;br /&gt;
&lt;br /&gt;
Using property 15 to set the speed, it is possible to achieve speeds larger than 80 mph (127 km/h), to which property 08 is limited. When setting property 15, always set property 08 as well, so that the vehicle works reasonably well whether realistic acceleration is turned on or off. If property 15 is not set, the value from property 08 is used instead.&lt;br /&gt;
&lt;br /&gt;
{{ttdp|}} TTDPatch uses these properties only if road vehicles are set to realistic acceleration in the NewCurveAndMountainHandling switch. They are ignored otherwise.&lt;br /&gt;
&lt;br /&gt;
{{ottd|}} OpenTTD uses these properties always, if they are defined and gives the speed defined here precedence over the one defined in property 08.&lt;br /&gt;
&lt;br /&gt;
=== Callbacks (17, 28) ===&lt;br /&gt;
&lt;br /&gt;
For road vehicles, the following [[callbacks]] have to be enabled by setting the corresponding bit in properties 17 and 28 (certain other, not as frequently used callbacks are available without setting a bit here):&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Bit!!Value!!Variable 0C value!!Callback&lt;br /&gt;
|-&lt;br /&gt;
|1||2||11||Wagon length&lt;br /&gt;
|-&lt;br /&gt;
|2||4||12||Load amount&lt;br /&gt;
|-&lt;br /&gt;
|3||8||15||Set refitted capacity&lt;br /&gt;
|-&lt;br /&gt;
|4||10||16||Build articulated vehicle&lt;br /&gt;
|-&lt;br /&gt;
|5||20||19||show a suffix after the cargo type name&lt;br /&gt;
|-&lt;br /&gt;
|6||40||2D||Select color mapping for vehicle&lt;br /&gt;
|-&lt;br /&gt;
|7||80||33||Sound effect callbacks&lt;br /&gt;
|-&lt;br /&gt;
|8||100||161||{{ottd|14|ottdrev=gf5394ed2ef}}Engine name&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Bit is the bit you have to set, you do this by adding all the values for all the bits. Variable 0C value is what variable 0C will be set to, for checking it in the VarAction2 for callbacks.&lt;br /&gt;
&lt;br /&gt;
=== Coefficient of tractive effort (18) ===&lt;br /&gt;
&lt;br /&gt;
This cofficient sets what fraction of the vehicle weight is equal to the maximum tractive effort. &amp;amp;nbsp;This includes the effect of having some unpowered axles, as well as the coefficient of friction that is available.&lt;br /&gt;
&lt;br /&gt;
For a value of FF, the tractive effort is equal to the vehicle weight, for 80, it is half, and so on. &amp;amp;nbsp;If not set, a default of 4C is used, for a fraction of 0.30, corresponding to W&amp;lt;sub&amp;gt;adh&amp;lt;/sub&amp;gt;=W and a coefficient of friction of 0.30, which is the value used by the patch before TTDPatch 2.0.1 alpha 19.&lt;br /&gt;
&lt;br /&gt;
=== Coefficient of air drag (19) ===&lt;br /&gt;
&lt;br /&gt;
This property sets the air drag coefficient c2 used for the realistic acceleration model, from 01 (no airdrag) to FF (most air drag) in arbitrary units. &amp;amp;nbsp;00 means to use the default value that depends on the top speed (to simulate the fact that high-speed engines are more streamlined).&lt;br /&gt;
&lt;br /&gt;
The default values are the following:&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!top speed (mph/1.6)!!&amp;amp;lt;16!!16!!24!!32!!48!!64!!96!!128!!192!!256!!...&lt;br /&gt;
|-&lt;br /&gt;
|c2||192||128||96||64||48||32||24||16||12||8&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
For higher speeds, the series is continued in the same manner.&lt;br /&gt;
&lt;br /&gt;
Air drag in Newtons will then be c2*v*v with v in m/s, although it is probably futile to attempt to make c2 a realistic number due to the lack of TTd&#039;s consistent scaling. &amp;amp;nbsp;If a vehicle doesn&#039;t reach its historical top speed, you might try setting prop. 19 one or two higher than the default above, otherwise it&#039;s probably a good idea to leave it at the default.&lt;br /&gt;
&lt;br /&gt;
=== Refit cost (1A) ===&lt;br /&gt;
&lt;br /&gt;
Refit cost, using 25% of the [[BaseCosts|purchase price cost base]]. This property can be overridden by callback 15E.&lt;br /&gt;
&lt;br /&gt;
{{ottdp|1.2|no|ottdrev=r23087}} If the refit cost factor is set to zero and bit 4 of the miscellaneous flags (1C) is set, auto-refitting is allowed.&lt;br /&gt;
&lt;br /&gt;
=== Miscellaneous flags (1C) ===&lt;br /&gt;
&lt;br /&gt;
This is a bit mask, with the following bits:&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Bit!!Value!!Meaning&lt;br /&gt;
|-&lt;br /&gt;
|0||1||Vehicle is a tram/light rail vehicle and requires tram tracks to operate&lt;br /&gt;
|-&lt;br /&gt;
|1||2||Uses two company colors&lt;br /&gt;
|-&lt;br /&gt;
|2||4||reserved, do not use&lt;br /&gt;
|-&lt;br /&gt;
|3||8||reserved, do not use&lt;br /&gt;
|-&lt;br /&gt;
|4||10||{{ottdp|1.2|no|ottdrev=r23087}} Auto-refitting is enabled for refits where callback 15E allows it or prop 1A specifies zero cost.&lt;br /&gt;
|-&lt;br /&gt;
|5||   20||{{ottdp|1.2|no|ottdrev=r23861}} Use cargo multiplier for default cargo. See page about [[VehicleRefitting#Misc._vehicle_flag_5_.27use_of_capacity_multiplier_for_default_cargo.27_set|vehicle refitting]].&lt;br /&gt;
|-&lt;br /&gt;
|6||   40||{{ottdp|1.3|no|ottdrev=r24124}} Disable breakdown smoke effect.&lt;br /&gt;
|-&lt;br /&gt;
|7||   80||{{ottdp|1.7|no|ottdrev=r27668}} [[Action2/Vehicles#Composing_vehicles_from_multiple_sprites|Compose vehicle from multiple sprites.]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Long format introduction date (1F) ===&lt;br /&gt;
&lt;br /&gt;
Set the vehicle introduction date, in days since the year 0. This takes account of leap years; dividable by 4, but not 100 unless 400. A start date of 1920-01-01 is obtained with a value of 701265 (51 B3 0A 00). This property must be set after property 00 to take effect.&lt;br /&gt;
&lt;br /&gt;
{{ottdp|no|}} In TTDPatch, dates after 2044 will be limited to 2044.&lt;br /&gt;
&lt;br /&gt;
=== Sort vehicle list (20) ===&lt;br /&gt;
See sort vehicle list for [[Action0Trains#Sort vehicle list 1A|trains]] for details.&lt;br /&gt;
&lt;br /&gt;
=== Visual effect (21) ===&lt;br /&gt;
See the equivalent [[Action0Trains#Visual effects and wagon power 22|train property]] for information about the meaning of all bits. There is no default effect for road vehicles, therefore values of 00..0F will show no visual effect. Bit 7 (disable wagon power) currently has no meaning and should be left at 0.&lt;br /&gt;
&lt;br /&gt;
=== Custom cargo ageing period (22) ===&lt;br /&gt;
See custom cargo ageing period for [[Action0Trains#Custom_cargo_ageing_period_.282B.29|trains]] for details.&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
To be written&lt;/div&gt;</summary>
		<author><name>Michi cc</name></author>
	</entry>
	<entry>
		<id>https://newgrf-specs.tt-wiki.net/index.php?title=Action0/Vehicles/Ships&amp;diff=4375</id>
		<title>Action0/Vehicles/Ships</title>
		<link rel="alternate" type="text/html" href="https://newgrf-specs.tt-wiki.net/index.php?title=Action0/Vehicles/Ships&amp;diff=4375"/>
		<updated>2023-01-30T22:03:35Z</updated>

		<summary type="html">&lt;p&gt;Michi cc: Engine name CB&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right; padding-left:12px; background:none;&amp;quot;&amp;gt;{{NFONavVehicles}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Defining properties of ships.&lt;br /&gt;
== Properties ==&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Number!![[GRFActionsDetailed|Size]]!!Version!!Description&lt;br /&gt;
|-&lt;br /&gt;
|08||B||{{ottdp|0.6|2.0}}||Sprite (FF for new graphics)&lt;br /&gt;
|-&lt;br /&gt;
|09||B||{{ottdp|0.6|2.0}}||Refittable (0 no, 1 yes)&lt;br /&gt;
|-&lt;br /&gt;
|0A||B||{{ottdp|0.6|2.0}}||Cost factor&lt;br /&gt;
|-&lt;br /&gt;
|0B||B||{{ottdp|0.6|2.0}}||Speed in mph*3.2&lt;br /&gt;
|-&lt;br /&gt;
|0C||B||{{ottdp|0.6|2.0}}||Cargo type, see [[CargoTypes]]&amp;lt;br/&amp;gt;&lt;br /&gt;
{{grfTill|7}} For GRF version 7 and below: Type B &#039;cargo slot&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
{{grfFrom|8}} For GRF version 8 and above: Type A &#039;(translated) cargo bit&#039;&lt;br /&gt;
|-&lt;br /&gt;
|0D||W||{{ottdp|0.6|2.0}}||Capacity&lt;br /&gt;
|-&lt;br /&gt;
|0F||B||{{ottdp|0.6|2.0}}||Running cost factor&lt;br /&gt;
|-&lt;br /&gt;
|10||B||{{ottdp|0.6|2.0}}||Sound effect type (4=cargo ship, 5=passenger ship)&amp;lt;br/&amp;gt;{{ottdp|1.6|no|ottdrev=r27507}} Since OpenTTD r27507 also custom sound effects from Action11 are allowed here.&lt;br /&gt;
|-&lt;br /&gt;
|11||D||{{ottdp|0.6|2.0}} {{grfFrom|1}}||Bit mask of cargo types available for refitting, see column 2 (bit values) in [[CargoTypes]]&lt;br /&gt;
|-&lt;br /&gt;
|12||B||{{ottdp|0.6|2.5}} {{grfFrom|6}}||Callback flags bit mask, see below&lt;br /&gt;
|-&lt;br /&gt;
|13||B||{{ottdp|0.6|2.5|ttdprev=alpha 30}}||Refit cost, using 1/32 of the default refit cost base&lt;br /&gt;
|-&lt;br /&gt;
|14||B||{{ottdp|1.2|2.5|ttdprev=alpha 44|ottdrev=r22639}}||Ocean speed fraction, sets fraction of top speed available in the ocean; e.g. 00=100%, 80=50%, FF=0.4%&lt;br /&gt;
|-&lt;br /&gt;
|15||B||{{ottdp|1.2|2.5|ttdprev=alpha 44|ottdrev=r22639}}||Canal speed fraction, same as above but for canals and rivers&lt;br /&gt;
|-&lt;br /&gt;
|16||B||{{ottdp|0.6|2.5|ttdprev=alpha 44}}||Retire vehicle early, this many years before the end of phase 2 (see [[Action0General]])&lt;br /&gt;
|-&lt;br /&gt;
|17||B||{{ottdp|0.6|2.5|ttdprev=alpha 55}}||Miscellaneous vehicle flags&lt;br /&gt;
|-&lt;br /&gt;
|18||W||{{ottdp|0.6|2.5|ttdprev=alpha 55}}||Refittable cargo classes, see [[Action0Trains#Cargo_classes_.2828.2C_29.29|train prop. 28]]&lt;br /&gt;
|-&lt;br /&gt;
|19||W||{{ottdp|0.6|2.5|ttdprev=alpha 55}}||Non-refittable cargo classes, see [[Action0Trains#Cargo_classes_.2828.2C_29.29|train prop. 29]]&lt;br /&gt;
|-&lt;br /&gt;
|1A||D||{{ottdp|0.6|2.6|ttdprev=r1210|ottdrev=r7191}}||Long format introduction date&lt;br /&gt;
|-&lt;br /&gt;
|1B||B*||{{ottdp|0.7|no|ottdrev=r13831}}||Sort the purchase list&lt;br /&gt;
|-&lt;br /&gt;
|1C||B||{{ottdp|1.1|no|ottdrev=r21240}}||Visual effect&lt;br /&gt;
|-&lt;br /&gt;
|1D||W||{{ottdp|1.2|no|ottdrev=r22713}}||Custom cargo ageing period&lt;br /&gt;
|-&lt;br /&gt;
|1E||B n*B||{{ottdp|1.2|no|ottdrev=r23291}}||List of always refittable cargo types, see [[Action0/Vehicles/Trains#List_of_always_refittable_cargo_types_.282C.2C_2D.29|train property 2C]]&lt;br /&gt;
|-&lt;br /&gt;
|1F||B n*B||{{ottdp|1.2|no|ottdrev=r23291}}||List of never refittable cargo types, see [[Action0/Vehicles/Trains#List_of_always_refittable_cargo_types_.282C.2C_2D.29|train property 2D]]&lt;br /&gt;
|-&lt;br /&gt;
|20||W||{{ottdp|13|no}}||Vehicle variant group, see [[Action0/Vehicles/Trains#Vehicle_variant_group_.282F.29|train property 2F]]&lt;br /&gt;
|-&lt;br /&gt;
|21||D||{{ottdp|13|no}}||Extra flags, see [[Action0/Vehicles/Trains#Extra_flags_.2830.29|train property 30]]&lt;br /&gt;
|-&lt;br /&gt;
|22||B||{{ottd|14|ottdrev=gf5394ed2ef}}||Additional callback flags bit mask, see below&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Descriptions ==&lt;br /&gt;
&lt;br /&gt;
=== Callbacks (12, 22) ===&lt;br /&gt;
For ships, the following [[callbacks]] have to be enabled by setting the corresponding bit in properties 12 and 22 (certain other, not as frequently used callbacks are available without setting a bit here):&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Bit!!Value!!Variable 0C value!!Callback&lt;br /&gt;
|-&lt;br /&gt;
|2||4||12||Load amount&lt;br /&gt;
|-&lt;br /&gt;
|3||8||15||Set refitted capacity&lt;br /&gt;
|-&lt;br /&gt;
|5||20||19||show a suffix after the cargo type name&lt;br /&gt;
|-&lt;br /&gt;
|6||40||2D||Select color mapping for vehicle&lt;br /&gt;
|-&lt;br /&gt;
|7||80||33||Sound effect callbacks&lt;br /&gt;
|-&lt;br /&gt;
|8||100||161||{{ottd|14|ottdrev=gf5394ed2ef}}Engine name&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Bit is the bit you have to set, you do this by adding all the values for all the bits. Variable 0C value is what variable 0C will be set to, for checking it in the VarAction2 for callbacks.&lt;br /&gt;
&lt;br /&gt;
=== Refit cost (13) ===&lt;br /&gt;
&lt;br /&gt;
Refit cost, using 1/32 of the default refit cost base. This property can be overridden by callback 15E.&lt;br /&gt;
&lt;br /&gt;
{{ottdp|1.2|no|ottdrev=r23087}} If the refit cost factor is set to zero and bit 4 of the miscellaneous flags (17) is set, auto-refitting is allowed.&lt;br /&gt;
&lt;br /&gt;
=== Miscellaneous flags (17) ===&lt;br /&gt;
&lt;br /&gt;
This is a bit mask, with the following bits:&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Bit!!Value!!Meaning&lt;br /&gt;
|-&lt;br /&gt;
|0||1||reserved, do not use&lt;br /&gt;
|-&lt;br /&gt;
|1||2||Uses two company colors&lt;br /&gt;
|-&lt;br /&gt;
|2||4||reserved, do not use&lt;br /&gt;
|-&lt;br /&gt;
|3||8||reserved, do not use&lt;br /&gt;
|-&lt;br /&gt;
|4||10||{{ottdp|1.2|no|ottdrev=r23087}} Auto-refitting is enabled for refits where callback 15E allows it or prop 13 specifies zero cost.&lt;br /&gt;
|-&lt;br /&gt;
|5||   20||{{ottdp|1.2|no|ottdrev=r23861}} Use cargo multiplier for default cargo. See page about [[VehicleRefitting#Misc._vehicle_flag_5_.27use_of_capacity_multiplier_for_default_cargo.27_set|vehicle refitting]].&lt;br /&gt;
|-&lt;br /&gt;
|6||   40||{{ottdp|1.3|no|ottdrev=r24124}} Disable breakdown smoke effect.&lt;br /&gt;
|-&lt;br /&gt;
|7||   80||{{ottdp|1.7|no|ottdrev=r27668}} [[Action2/Vehicles#Composing_vehicles_from_multiple_sprites|Compose vehicle from multiple sprites.]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Long format introduction date (1A) ===&lt;br /&gt;
&lt;br /&gt;
Set the vehicle introduction date, in days since the year 0. This takes account of leap years; dividable by 4, but not 100 unless 400. A start date of 1920-01-01 is obtained with a value of 701265 (51 B3 0A 00). This property must be set after property 00 to take effect.&lt;br /&gt;
&lt;br /&gt;
{{ottdp|no|}} In TTDPatch, dates after 2044 will be limited to 2044.&lt;br /&gt;
&lt;br /&gt;
=== Sort vehicle list (1B) ===&lt;br /&gt;
See sort vehicle list for [[Action0Trains#Sort_vehicle_list_.281A.29|trains]] for details.&lt;br /&gt;
&lt;br /&gt;
=== Visual effect (1C) ===&lt;br /&gt;
See the equivalent [[Action0Trains#Visual_effects_and_wagon_power_.2822.29|train property]] for information about the meaning of all bits. There is no default effect for ships, therefore values of 00..0F will show no visual effect. Bit 7 (disable wagon power) currently has no meaning and should be left at 0.&lt;br /&gt;
&lt;br /&gt;
=== Custom cargo ageing period (1D) ===&lt;br /&gt;
See custom cargo ageing period for [[Action0Trains#Custom_cargo_ageing_period_.282B.29|trains]] for details.&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
To be written&lt;/div&gt;</summary>
		<author><name>Michi cc</name></author>
	</entry>
	<entry>
		<id>https://newgrf-specs.tt-wiki.net/index.php?title=Action0/Vehicles/Planes&amp;diff=4374</id>
		<title>Action0/Vehicles/Planes</title>
		<link rel="alternate" type="text/html" href="https://newgrf-specs.tt-wiki.net/index.php?title=Action0/Vehicles/Planes&amp;diff=4374"/>
		<updated>2023-01-30T22:02:30Z</updated>

		<summary type="html">&lt;p&gt;Michi cc: /* Properties */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right; padding-left:12px; background:none;&amp;quot;&amp;gt;{{NFONavVehicles}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Defining properties of planes.&lt;br /&gt;
&lt;br /&gt;
== Properties ==&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Number!![[GRFActionsDetailed|Size]]!!Version!!Description&lt;br /&gt;
|-&lt;br /&gt;
|08||B||{{ottdp|0.6|2.0}}||Sprite (FF for new graphics)&lt;br /&gt;
|-&lt;br /&gt;
|09||B||{{ottdp|0.6|2.0}}||Is helicopter? 2=no, 0=yes&lt;br /&gt;
|-&lt;br /&gt;
|0A||B||{{ottdp|0.6|2.0}}||Is large? 0=no, 1=yes (i.e. can&#039;t safely land on small airports)&lt;br /&gt;
|-&lt;br /&gt;
|0B||B||{{ottdp|0.6|2.0}}||Cost factor&lt;br /&gt;
|-&lt;br /&gt;
|0C||B||{{ottdp|0.6|2.0}}||Speed in units of 8 mph, that is: property = (speed in mph) / 8&lt;br /&gt;
|-&lt;br /&gt;
|0D||B||{{ottdp|0.6|2.0}}||Acceleration in units of 3/8 mph/tick, that is: property = (acceleration in mph/tick) * 8/3 &amp;lt;ref&amp;gt;{{ottd|&amp;amp;lt;1.3.1}} In OpenTTD before r25115 the units for acceleration were messed up. The unit used was about 1 mph/tick, so aircraft accelerated more than twice as fast. Also values bigger than 19 failed.&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|0E||B||{{ottdp|0.6|2.0}}||Running cost factor&lt;br /&gt;
|-&lt;br /&gt;
|0F||W||{{ottdp|0.6|2.0}}||Primary cargo capacity (passenger or refitted cargo)&lt;br /&gt;
|-&lt;br /&gt;
|11||B||{{ottdp|0.6|2.0}}||Secondary cargo capacity (mail)&lt;br /&gt;
|-&lt;br /&gt;
|12||B||{{ottdp|0.6|2.0}}||Sound effect&lt;br /&gt;
|-&lt;br /&gt;
|13||D||{{ottdp|0.6|2.5}} {{grfFrom|6}}||Bit mask of cargo types available for refitting, see column 2 (Bit Value) in [[CargoTypes]]&lt;br /&gt;
|-&lt;br /&gt;
|14||B||{{ottdp|0.6|2.5}} {{grfFrom|6}}||Callback flags bit mask, see below&lt;br /&gt;
|-&lt;br /&gt;
|15||B||{{ottdp|0.6|2.5|ttdprev=alpha 30}}||Refit cost, using 1/32 of the default refit cost base&lt;br /&gt;
|-&lt;br /&gt;
|16||B||{{ottdp|0.6|2.5|ttdprev=alpha 44}}||Retire vehicle early, this many years before the end of phase 2 (see [[Action0General]])&lt;br /&gt;
|-&lt;br /&gt;
|17||B||{{ottdp|0.6|2.5|ttdprev=alpha 58}}||Miscellaneous vehicle flags&lt;br /&gt;
|-&lt;br /&gt;
|18||W||{{ottdp|0.6|2.5|ttdprev=alpha 58}}||Refittable cargo classes, see [[Action0Trains#Cargo classes 28 29|train prop. 28]]&lt;br /&gt;
|-&lt;br /&gt;
|19||W||{{ottdp|0.6|2.5|ttdprev=alpha 58}}||Non-refittable cargo classes, see [[Action0Trains#Cargo classes 28 29|train prop. 29]]&lt;br /&gt;
|-&lt;br /&gt;
|1A||D||{{ottdp|0.6|2.5|ttdprev=r1210|ottdrev=r7191}}||Long format introduction date&lt;br /&gt;
|-&lt;br /&gt;
|1B||B*||{{ottdp|0.7|no|ottdrev=r13831}}||Sort the purchase list&lt;br /&gt;
|-&lt;br /&gt;
|1C||W||{{ottdp|1.2|no|ottdrev=r22713}}||Custom cargo ageing period&lt;br /&gt;
|-&lt;br /&gt;
|1D||B n*B||{{ottdp|1.2|no|ottdrev=r23291}}||List of always refittable cargo types, see [[Action0/Vehicles/Trains#List_of_always_refittable_cargo_types_.282C.2C_2D.29|train property 2C]]&lt;br /&gt;
|-&lt;br /&gt;
|1E||B n*B||{{ottdp|1.2|no|ottdrev=r23291}}||List of never refittable cargo types, see [[Action0/Vehicles/Trains#List_of_always_refittable_cargo_types_.282C.2C_2D.29|train property 2D]]&lt;br /&gt;
|-&lt;br /&gt;
|1F||W||{{ottdp|1.2|no|ottdrev=r23504}}||Aircraft range in tiles. Distance is euclidean, a value of 0 means range is unlimited&lt;br /&gt;
|-&lt;br /&gt;
|20||W||{{ottdp|13|no}}||Vehicle variant group, see [[Action0/Vehicles/Trains#Vehicle_variant_group_.282F.29|train property 2F]]&lt;br /&gt;
|-&lt;br /&gt;
|21||D||{{ottdp|13|no}}||Extra flags, see [[Action0/Vehicles/Trains#Extra_flags_.2830.29|train property 30]]&lt;br /&gt;
|-&lt;br /&gt;
|22||B||{{ottd|14|ottdrev=gf5394ed2ef}}||Additional callback flags bit mask, see below&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Descriptions ==&lt;br /&gt;
&lt;br /&gt;
=== Primary (0F) and secondary (11) cargo capacity ===&lt;br /&gt;
Aircraft can transport up to two cargo types.&lt;br /&gt;
The first (primary) cargo type can be changed when refitting the aircraft.&lt;br /&gt;
&lt;br /&gt;
The secondary cargo type is always mail, and is only present when the primary cargo type is part of the [[Action0/Cargos#CargoClasses_.2816.29|passenger cargo class]].&lt;br /&gt;
&lt;br /&gt;
See also the page about [[VehicleRefitting|vehicle refitting]].&lt;br /&gt;
&lt;br /&gt;
=== Sound effect (12) ===&lt;br /&gt;
&lt;br /&gt;
The following sound effects are used by planes (note, the setting is ignored for helicopters):&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Number!!Sound&lt;br /&gt;
|-&lt;br /&gt;
|06||Propeller sound 1&lt;br /&gt;
|-&lt;br /&gt;
|07||Jet sound 1&lt;br /&gt;
|-&lt;br /&gt;
|3B||Supersonic&lt;br /&gt;
|-&lt;br /&gt;
|3D||Jet sound 2&lt;br /&gt;
|-&lt;br /&gt;
|45||Propeller sound 2&lt;br /&gt;
|-&lt;br /&gt;
|46||Jet sound 3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{ottdp|1.6|no|ottdrev=r27507}} Since OpenTTD r27507 also custom sound effects from Action11 are allowed here.&lt;br /&gt;
&lt;br /&gt;
{{ottdp|1.11|no|ottdrev=6198a47}} Since OpenTTD g6198a47 this prop can be used to to set custom Action11 sound effects for helicopers. Default sound effects are ignored as before.&lt;br /&gt;
&lt;br /&gt;
=== Callbacks (14, 22) ===&lt;br /&gt;
For planes, the following [[callbacks]] have to be enabled by setting the corresponding bit in property 14 (certain other, not as frequently used callbacks are available without setting a bit here)::&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Bit!!Value!!Variable 0C value!!Callback&lt;br /&gt;
|-&lt;br /&gt;
|2||4||12||Load amount&lt;br /&gt;
|-&lt;br /&gt;
|3||8||15||Set refitted capacity&lt;br /&gt;
|-&lt;br /&gt;
|5||20||19||show a suffix after the cargo type name&lt;br /&gt;
|-&lt;br /&gt;
|6||40||2D||Select color mapping for vehicle&lt;br /&gt;
|-&lt;br /&gt;
|7||80||33||Sound effect callbacks&lt;br /&gt;
|-&lt;br /&gt;
|8||100||161||{{ottd|14|ottdrev=gf5394ed2ef}}Engine name&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Bit is the bit you have to set, you do this by adding all the values for all the bits. Variable 0C value is what variable 0C will be set to, for checking it in the VarAction2 for callbacks.&lt;br /&gt;
&lt;br /&gt;
=== Refit cost (15) ===&lt;br /&gt;
&lt;br /&gt;
Refit cost, using 1/32 of the default refit cost base. This property can be overridden by callback 15E.&lt;br /&gt;
&lt;br /&gt;
{{ottdp|1.2|no|ottdrev=r23087}} If the refit cost factor is set to zero and bit 4 of the miscellaneous flags (17) is set, auto-refitting is allowed.&lt;br /&gt;
&lt;br /&gt;
=== Miscellaneous flags (17) ===&lt;br /&gt;
&lt;br /&gt;
This is a bit mask, with the following bits:&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Bit!!Value!!Meaning&lt;br /&gt;
|-&lt;br /&gt;
|0||1||reserved, do not use&lt;br /&gt;
|-&lt;br /&gt;
|1||2||Uses two company colors&lt;br /&gt;
|-&lt;br /&gt;
|2||4||reserved, do not use&lt;br /&gt;
|-&lt;br /&gt;
|3||8||reserved, do not use&lt;br /&gt;
|-&lt;br /&gt;
|4||10||{{ottdp|1.2|no|ottdrev=r23087}} Auto-refitting is enabled for refits where callback 15E allows it or prop 15 specifies zero cost.&lt;br /&gt;
|-&lt;br /&gt;
|5||20||{{ottdp|1.2|no|ottdrev=r23861}} Use cargo multiplier for default cargo. See page about [[VehicleRefitting#Misc._vehicle_flag_5_.27use_of_capacity_multiplier_for_default_cargo.27_set|vehicle refitting]].&lt;br /&gt;
|-&lt;br /&gt;
|6||40||{{ottdp|1.3|no|ottdrev=r24124}} Disable breakdown smoke effect.&lt;br /&gt;
|-&lt;br /&gt;
|7||   80||{{ottdp|1.7|no|ottdrev=r27668}} [[Action2/Vehicles#Composing_vehicles_from_multiple_sprites|Compose vehicle from multiple sprites.]]&lt;br /&gt;
Note: This also applies to the rotor sprite, if custom rotor sprites are used.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Long format introduction date (1A) ===&lt;br /&gt;
&lt;br /&gt;
Set the vehicle introduction date, in days since the year 0. This takes account of leap years; dividable by 4, but not 100 unless 400. A start date of 1920-01-01 is obtained with a value of 701265 (51 B3 0A 00). This property must be set after property 00 to take effect.&lt;br /&gt;
&lt;br /&gt;
{{ottdp|no|}} In TTDPatch, dates after 2044 will be limited to 2044.&lt;br /&gt;
&lt;br /&gt;
=== Sort vehicle list (1B) ===&lt;br /&gt;
See sort vehicle list for [[Action0Trains#Sort vehicle list 1A|trains]] for details.&lt;br /&gt;
&lt;br /&gt;
=== Custom cargo ageing period (1C) ===&lt;br /&gt;
See custom cargo ageing period for [[Action0Trains#Custom_cargo_ageing_period_.282B.29|trains]] for details.&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
To be written&lt;/div&gt;</summary>
		<author><name>Michi cc</name></author>
	</entry>
	<entry>
		<id>https://newgrf-specs.tt-wiki.net/index.php?title=Action0/Vehicles/Planes&amp;diff=4373</id>
		<title>Action0/Vehicles/Planes</title>
		<link rel="alternate" type="text/html" href="https://newgrf-specs.tt-wiki.net/index.php?title=Action0/Vehicles/Planes&amp;diff=4373"/>
		<updated>2023-01-30T22:01:58Z</updated>

		<summary type="html">&lt;p&gt;Michi cc: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right; padding-left:12px; background:none;&amp;quot;&amp;gt;{{NFONavVehicles}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Defining properties of planes.&lt;br /&gt;
&lt;br /&gt;
== Properties ==&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Number!![[GRFActionsDetailed|Size]]!!Version!!Description&lt;br /&gt;
|-&lt;br /&gt;
|08||B||{{ottdp|0.6|2.0}}||Sprite (FF for new graphics)&lt;br /&gt;
|-&lt;br /&gt;
|09||B||{{ottdp|0.6|2.0}}||Is helicopter? 2=no, 0=yes&lt;br /&gt;
|-&lt;br /&gt;
|0A||B||{{ottdp|0.6|2.0}}||Is large? 0=no, 1=yes (i.e. can&#039;t safely land on small airports)&lt;br /&gt;
|-&lt;br /&gt;
|0B||B||{{ottdp|0.6|2.0}}||Cost factor&lt;br /&gt;
|-&lt;br /&gt;
|0C||B||{{ottdp|0.6|2.0}}||Speed in units of 8 mph, that is: property = (speed in mph) / 8&lt;br /&gt;
|-&lt;br /&gt;
|0D||B||{{ottdp|0.6|2.0}}||Acceleration in units of 3/8 mph/tick, that is: property = (acceleration in mph/tick) * 8/3 &amp;lt;ref&amp;gt;{{ottd|&amp;amp;lt;1.3.1}} In OpenTTD before r25115 the units for acceleration were messed up. The unit used was about 1 mph/tick, so aircraft accelerated more than twice as fast. Also values bigger than 19 failed.&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|0E||B||{{ottdp|0.6|2.0}}||Running cost factor&lt;br /&gt;
|-&lt;br /&gt;
|0F||W||{{ottdp|0.6|2.0}}||Primary cargo capacity (passenger or refitted cargo)&lt;br /&gt;
|-&lt;br /&gt;
|11||B||{{ottdp|0.6|2.0}}||Secondary cargo capacity (mail)&lt;br /&gt;
|-&lt;br /&gt;
|12||B||{{ottdp|0.6|2.0}}||Sound effect&lt;br /&gt;
|-&lt;br /&gt;
|13||D||{{ottdp|0.6|2.5}} {{grfFrom|6}}||Bit mask of cargo types available for refitting, see column 2 (Bit Value) in [[CargoTypes]]&lt;br /&gt;
|-&lt;br /&gt;
|14||B||{{ottdp|0.6|2.5}} {{grfFrom|6}}||Callback flags bit mask, see below&lt;br /&gt;
|-&lt;br /&gt;
|15||B||{{ottdp|0.6|2.5|ttdprev=alpha 30}}||Refit cost, using 1/32 of the default refit cost base&lt;br /&gt;
|-&lt;br /&gt;
|16||B||{{ottdp|0.6|2.5|ttdprev=alpha 44}}||Retire vehicle early, this many years before the end of phase 2 (see [[Action0General]])&lt;br /&gt;
|-&lt;br /&gt;
|17||B||{{ottdp|0.6|2.5|ttdprev=alpha 58}}||Miscellaneous vehicle flags&lt;br /&gt;
|-&lt;br /&gt;
|18||W||{{ottdp|0.6|2.5|ttdprev=alpha 58}}||Refittable cargo classes, see [[Action0Trains#Cargo classes 28 29|train prop. 28]]&lt;br /&gt;
|-&lt;br /&gt;
|19||W||{{ottdp|0.6|2.5|ttdprev=alpha 58}}||Non-refittable cargo classes, see [[Action0Trains#Cargo classes 28 29|train prop. 29]]&lt;br /&gt;
|-&lt;br /&gt;
|1A||D||{{ottdp|0.6|2.5|ttdprev=r1210|ottdrev=r7191}}||Long format introduction date&lt;br /&gt;
|-&lt;br /&gt;
|1B||B*||{{ottdp|0.7|no|ottdrev=r13831}}||Sort the purchase list&lt;br /&gt;
|-&lt;br /&gt;
|1C||W||{{ottdp|1.2|no|ottdrev=r22713}}||Custom cargo ageing period&lt;br /&gt;
|-&lt;br /&gt;
|1D||B n*B||{{ottdp|1.2|no|ottdrev=r23291}}||List of always refittable cargo types, see [[Action0/Vehicles/Trains#List_of_always_refittable_cargo_types_.282C.2C_2D.29|train property 2C]]&lt;br /&gt;
|-&lt;br /&gt;
|1E||B n*B||{{ottdp|1.2|no|ottdrev=r23291}}||List of never refittable cargo types, see [[Action0/Vehicles/Trains#List_of_always_refittable_cargo_types_.282C.2C_2D.29|train property 2D]]&lt;br /&gt;
|-&lt;br /&gt;
|1F||W||{{ottdp|1.2|no|ottdrev=r23504}}||Aircraft range in tiles. Distance is euclidean, a value of 0 means range is unlimited&lt;br /&gt;
|-&lt;br /&gt;
|20||W||{{ottdp|13|no}}||Vehicle variant group, see [[Action0/Vehicles/Trains#Vehicle_variant_group_.282F.29|train property 2F]]&lt;br /&gt;
|-&lt;br /&gt;
|21||D||{{ottdp|13|no}}||Extra flags, see [[Action0/Vehicles/Trains#Extra_flags_.2830.29|train property 30]]&lt;br /&gt;
|-&lt;br /&gt;
|22||B||{{ottd|14|ottdrev=gf5394ed2ef}}||Additional callback flags bit mask, see below||yes&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Descriptions ==&lt;br /&gt;
&lt;br /&gt;
=== Primary (0F) and secondary (11) cargo capacity ===&lt;br /&gt;
Aircraft can transport up to two cargo types.&lt;br /&gt;
The first (primary) cargo type can be changed when refitting the aircraft.&lt;br /&gt;
&lt;br /&gt;
The secondary cargo type is always mail, and is only present when the primary cargo type is part of the [[Action0/Cargos#CargoClasses_.2816.29|passenger cargo class]].&lt;br /&gt;
&lt;br /&gt;
See also the page about [[VehicleRefitting|vehicle refitting]].&lt;br /&gt;
&lt;br /&gt;
=== Sound effect (12) ===&lt;br /&gt;
&lt;br /&gt;
The following sound effects are used by planes (note, the setting is ignored for helicopters):&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Number!!Sound&lt;br /&gt;
|-&lt;br /&gt;
|06||Propeller sound 1&lt;br /&gt;
|-&lt;br /&gt;
|07||Jet sound 1&lt;br /&gt;
|-&lt;br /&gt;
|3B||Supersonic&lt;br /&gt;
|-&lt;br /&gt;
|3D||Jet sound 2&lt;br /&gt;
|-&lt;br /&gt;
|45||Propeller sound 2&lt;br /&gt;
|-&lt;br /&gt;
|46||Jet sound 3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{ottdp|1.6|no|ottdrev=r27507}} Since OpenTTD r27507 also custom sound effects from Action11 are allowed here.&lt;br /&gt;
&lt;br /&gt;
{{ottdp|1.11|no|ottdrev=6198a47}} Since OpenTTD g6198a47 this prop can be used to to set custom Action11 sound effects for helicopers. Default sound effects are ignored as before.&lt;br /&gt;
&lt;br /&gt;
=== Callbacks (14, 22) ===&lt;br /&gt;
For planes, the following [[callbacks]] have to be enabled by setting the corresponding bit in property 14 (certain other, not as frequently used callbacks are available without setting a bit here)::&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Bit!!Value!!Variable 0C value!!Callback&lt;br /&gt;
|-&lt;br /&gt;
|2||4||12||Load amount&lt;br /&gt;
|-&lt;br /&gt;
|3||8||15||Set refitted capacity&lt;br /&gt;
|-&lt;br /&gt;
|5||20||19||show a suffix after the cargo type name&lt;br /&gt;
|-&lt;br /&gt;
|6||40||2D||Select color mapping for vehicle&lt;br /&gt;
|-&lt;br /&gt;
|7||80||33||Sound effect callbacks&lt;br /&gt;
|-&lt;br /&gt;
|8||100||161||{{ottd|14|ottdrev=gf5394ed2ef}}Engine name&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Bit is the bit you have to set, you do this by adding all the values for all the bits. Variable 0C value is what variable 0C will be set to, for checking it in the VarAction2 for callbacks.&lt;br /&gt;
&lt;br /&gt;
=== Refit cost (15) ===&lt;br /&gt;
&lt;br /&gt;
Refit cost, using 1/32 of the default refit cost base. This property can be overridden by callback 15E.&lt;br /&gt;
&lt;br /&gt;
{{ottdp|1.2|no|ottdrev=r23087}} If the refit cost factor is set to zero and bit 4 of the miscellaneous flags (17) is set, auto-refitting is allowed.&lt;br /&gt;
&lt;br /&gt;
=== Miscellaneous flags (17) ===&lt;br /&gt;
&lt;br /&gt;
This is a bit mask, with the following bits:&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Bit!!Value!!Meaning&lt;br /&gt;
|-&lt;br /&gt;
|0||1||reserved, do not use&lt;br /&gt;
|-&lt;br /&gt;
|1||2||Uses two company colors&lt;br /&gt;
|-&lt;br /&gt;
|2||4||reserved, do not use&lt;br /&gt;
|-&lt;br /&gt;
|3||8||reserved, do not use&lt;br /&gt;
|-&lt;br /&gt;
|4||10||{{ottdp|1.2|no|ottdrev=r23087}} Auto-refitting is enabled for refits where callback 15E allows it or prop 15 specifies zero cost.&lt;br /&gt;
|-&lt;br /&gt;
|5||20||{{ottdp|1.2|no|ottdrev=r23861}} Use cargo multiplier for default cargo. See page about [[VehicleRefitting#Misc._vehicle_flag_5_.27use_of_capacity_multiplier_for_default_cargo.27_set|vehicle refitting]].&lt;br /&gt;
|-&lt;br /&gt;
|6||40||{{ottdp|1.3|no|ottdrev=r24124}} Disable breakdown smoke effect.&lt;br /&gt;
|-&lt;br /&gt;
|7||   80||{{ottdp|1.7|no|ottdrev=r27668}} [[Action2/Vehicles#Composing_vehicles_from_multiple_sprites|Compose vehicle from multiple sprites.]]&lt;br /&gt;
Note: This also applies to the rotor sprite, if custom rotor sprites are used.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Long format introduction date (1A) ===&lt;br /&gt;
&lt;br /&gt;
Set the vehicle introduction date, in days since the year 0. This takes account of leap years; dividable by 4, but not 100 unless 400. A start date of 1920-01-01 is obtained with a value of 701265 (51 B3 0A 00). This property must be set after property 00 to take effect.&lt;br /&gt;
&lt;br /&gt;
{{ottdp|no|}} In TTDPatch, dates after 2044 will be limited to 2044.&lt;br /&gt;
&lt;br /&gt;
=== Sort vehicle list (1B) ===&lt;br /&gt;
See sort vehicle list for [[Action0Trains#Sort vehicle list 1A|trains]] for details.&lt;br /&gt;
&lt;br /&gt;
=== Custom cargo ageing period (1C) ===&lt;br /&gt;
See custom cargo ageing period for [[Action0Trains#Custom_cargo_ageing_period_.282B.29|trains]] for details.&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
To be written&lt;/div&gt;</summary>
		<author><name>Michi cc</name></author>
	</entry>
	<entry>
		<id>https://newgrf-specs.tt-wiki.net/index.php?title=TextIDs&amp;diff=4372</id>
		<title>TextIDs</title>
		<link rel="alternate" type="text/html" href="https://newgrf-specs.tt-wiki.net/index.php?title=TextIDs&amp;diff=4372"/>
		<updated>2023-01-30T21:58:33Z</updated>

		<summary type="html">&lt;p&gt;Michi cc: Extended DCxx text area.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ottdp|no|2.0}} This is a list of the text IDs in TTD (for action 4), originally compiled by A. Skrobov.&lt;br /&gt;
&lt;br /&gt;
You can use these Text IDs&lt;br /&gt;
* to change/translate TTD strings using action4 feature 48. (This is not supported by OpenTTD, nor will it ever.)&lt;br /&gt;
* to reference them in various action 0 properties, e.g. for house/industry/cargo names. (This is partly supported by OpenTTD.)&lt;br /&gt;
&lt;br /&gt;
Note: OpenTTD&#039;s string system is very different to the system of TTD and TTDPatch. It supports/requires plural forms, genders, cases and different number formattings, so complex strings which are combined from multiple parts are not interchangeable. Various strings also have changed their parameter order over time or got additional arguments.&lt;br /&gt;
&lt;br /&gt;
As such action 4 is not allowed to change any original strings in OpenTTD; translations are not done via NewGRF, but only via the [http://translator.openttd.org/ WebTranslator].&lt;br /&gt;
&lt;br /&gt;
In action 0 only a subset of the original strings can be accessed. These are more or less the string which have no additional parameters, e.g. plain cargo/house/industry names.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=0000 General strings=&lt;br /&gt;
[[TextIDs/General_strings | General strings 0000-07FF]]&lt;br /&gt;
&lt;br /&gt;
=0800 Basic land strings=&lt;br /&gt;
[[TextIDs/Basic_land_strings | Basic land strings 0800 - 0FFF]]&lt;br /&gt;
&lt;br /&gt;
=1000 Railroad strings=&lt;br /&gt;
[[TextIDs/Railroad strings | Railroad strings 1000 - 17FF]]&lt;br /&gt;
&lt;br /&gt;
=1800 Road strings=&lt;br /&gt;
[[TextIDs/Road strings | Road strings 1800 - 1FFF]]&lt;br /&gt;
&lt;br /&gt;
=2000 Town strings=&lt;br /&gt;
[[TextIDs/Town strings | Town strings 2000 - 27FF]]&lt;br /&gt;
&lt;br /&gt;
=2800 Tree strings=&lt;br /&gt;
[[TextIDs/Tree strings | Tree strings 2800 - 2FFF]]&lt;br /&gt;
&lt;br /&gt;
=3000 Station strings=&lt;br /&gt;
[[TextIDs/Station strings | Station strings 3000 - 37FF]]&lt;br /&gt;
&lt;br /&gt;
=3800 Water strings=&lt;br /&gt;
[[TextIDs/Water strings | Water strings 3800 - 3FFF]]&lt;br /&gt;
&lt;br /&gt;
=4000 Load/save strings=&lt;br /&gt;
[[TextIDs/Load, save strings | Load, save strings 4000 - 47FF]]&lt;br /&gt;
&lt;br /&gt;
=4800 Industry strings=&lt;br /&gt;
[[TextIDs/Industry strings | Industry strings 4800 - 4FFF]]&lt;br /&gt;
&lt;br /&gt;
=5000 Tunnel and bridge strings=&lt;br /&gt;
[[TextIDs/Tunnel and bridge strings | Tunnel and bridge strings 5000-57FF]]&lt;br /&gt;
&lt;br /&gt;
=5800 Object strings=&lt;br /&gt;
[[TextIDs/Object strings | Object strings 5800 - 5FFF]]&lt;br /&gt;
&lt;br /&gt;
=6000 Debugger strings=&lt;br /&gt;
[[TextIDs/Debugger strings | Debugger strings 6000 - 67FF]]&lt;br /&gt;
&lt;br /&gt;
=6800 Difficulty strings=&lt;br /&gt;
[[TextIDs/Difficulty strings | Difficulty strings 6800 - 6FFF]]&lt;br /&gt;
&lt;br /&gt;
=7000 Company strings=&lt;br /&gt;
[[TextIDs/Company strings | Company strings 7000 - 77FF]]&lt;br /&gt;
&lt;br /&gt;
=7800 Custom strings=&lt;br /&gt;
These cannot be set directly; an entry is generated every time the player enters a custom name for example for signs, stations or vehicles.&lt;br /&gt;
&lt;br /&gt;
=8000 Vehicle type names=&lt;br /&gt;
[[TextIDs/Vehicle type names | Vehicle type names 8000 - 87FF]]&lt;br /&gt;
&lt;br /&gt;
Note, IDs 8000..80FF will be changed by using a regular action 4 to name new vehicles, but not by using &amp;quot;custom vehicle names&amp;quot; from vehicle.dat which use custom strings instead.&lt;br /&gt;
&lt;br /&gt;
=8800 Train strings=&lt;br /&gt;
[[TextIDs/Train strings | Train strings 8800 - 8FFF]]&lt;br /&gt;
&lt;br /&gt;
=9000 Road vehicle strings=&lt;br /&gt;
[[TextIDs/Road vehicle strings | Road vehicle strings 9000 - 97FF]]&lt;br /&gt;
&lt;br /&gt;
=9800 Ship strings=&lt;br /&gt;
[[TextIDs/Ship strings | Ship strings 9800 - 9FFF]]&lt;br /&gt;
&lt;br /&gt;
=A000 Aircraft strings=&lt;br /&gt;
[[TextIDs/Aircraft strings | Aircraft strings A000 - A7FF]]&lt;br /&gt;
&lt;br /&gt;
=A800 Pseudo-vehicle strings=&lt;br /&gt;
(None defined)&lt;br /&gt;
&lt;br /&gt;
=B000 Disaster strings=&lt;br /&gt;
[[TextIDs/Disaster strings | Disaster strings B800 - BFFF]]&lt;br /&gt;
&lt;br /&gt;
=B800 unused=&lt;br /&gt;
&lt;br /&gt;
=C000 New station names=&lt;br /&gt;
This is used for TTDPatch newgrf station and class names. See action 4 for more details.&lt;br /&gt;
&lt;br /&gt;
=C800 New house names=&lt;br /&gt;
This is used for TTDPatch newgrf town building names. See action 4 for more details.&lt;br /&gt;
&lt;br /&gt;
=D000 Miscellaneous GRF texts=&lt;br /&gt;
This is used for TTDPatch newgrf miscellaneous texts, mostly for callbacks. See action 4 for more details.&lt;br /&gt;
&lt;br /&gt;
The table has up to 1024 entries. To use entry X in an include text (codes 80/81), use ID D400+X. Note that if you want to include ID D000/D400, the 00 byte will be considered the end of string in action 4, this will therefore break if additional texts are supposed to follow in the action 4.&lt;br /&gt;
&lt;br /&gt;
=D800 Persistent GRF texts=&lt;br /&gt;
This is used for TTDPatch newgrf persistent texts (the ID mappings are preserved through saving and loading even if the GRF file is unavailable). See action 4 for more details.&lt;br /&gt;
&lt;br /&gt;
D800 class IDs (DCxx IDs) must not be used except in action 0 and where the spec explicitly says that they work.&lt;br /&gt;
&lt;br /&gt;
{{ottd|14|ottdrev=gf5394ed2ef}} This textid area extends up to ID FFFF.&lt;br /&gt;
&lt;br /&gt;
=E000 Hard-coded game texts=&lt;br /&gt;
[[TextIDs/Hard-coded game texts | Hard-coded game texts E000 - E7FF]]&lt;br /&gt;
&lt;br /&gt;
This text class exists only in TTDPatch 2.0.1 alpha 59 and later. It contains language-dependent texts that didn&#039;t have textIDs originally. This class allows translating TTD entirely by using action 4s, since now every language-dependent text can be accessed.&lt;br /&gt;
&lt;br /&gt;
{{ottd|14|ottdrev=gf5394ed2ef}} Continuation of D800 texts.&lt;br /&gt;
&lt;br /&gt;
=E800 News texts=&lt;br /&gt;
This is used internally by TTDPatch for its additional news messages.&lt;br /&gt;
&lt;br /&gt;
{{ottd|14|ottdrev=gf5394ed2ef}} Continuation of D800 texts.&lt;br /&gt;
&lt;br /&gt;
=F000 unused=&lt;br /&gt;
(Unused, but TTD&#039;s critical error messages internally have a number in this region, even though they aren&#039;t text IDs as such.)&lt;br /&gt;
&lt;br /&gt;
{{ottd|14|ottdrev=gf5394ed2ef}} Continuation of D800 texts.&lt;br /&gt;
&lt;br /&gt;
=F800 Internal TTDPatch texts=&lt;br /&gt;
[[TextIDs/Internal TTDPatch strings | Internal TTDPatch texts F800 - FFFF]]&lt;br /&gt;
&lt;br /&gt;
This is used internally by TTDPatch for its additional regular strings, i.e. those from ttdpttxt.txt. Since TTDPatch 2.0.1 alpha 59 you may use the following text IDs to change the respective patch strings (before alpha 59, the text IDs changed regularly). For default values, please see ttdpttxt.txt produced by mkpttxt.exe.&lt;br /&gt;
&lt;br /&gt;
{{ottd|14|ottdrev=gf5394ed2ef}} Continuation of D800 texts.&lt;/div&gt;</summary>
		<author><name>Michi cc</name></author>
	</entry>
	<entry>
		<id>https://newgrf-specs.tt-wiki.net/index.php?title=TTDPatchFlags&amp;diff=4371</id>
		<title>TTDPatchFlags</title>
		<link rel="alternate" type="text/html" href="https://newgrf-specs.tt-wiki.net/index.php?title=TTDPatchFlags&amp;diff=4371"/>
		<updated>2023-01-30T21:56:31Z</updated>

		<summary type="html">&lt;p&gt;Michi cc: DCxx test area&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In the table below you find all the TTDPatch flags that belong to &amp;lt;param-num&amp;gt; = 85 in Action 7 and Action 9.&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!&#039;&#039;&#039;Bit&#039;&#039;&#039;!!&#039;&#039;&#039;Switch (bit set = switch on)&#039;&#039;&#039;!!&#039;&#039;&#039;Correspondence in OpenTTD&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|0C||keepsmallairport||station.never_expire_airports&lt;br /&gt;
|-&lt;br /&gt;
|0D||newairports||1&lt;br /&gt;
|-&lt;br /&gt;
|0E||largestations||1&lt;br /&gt;
|-&lt;br /&gt;
|0F||longbridges||construction.longbridges&lt;br /&gt;
|-&lt;br /&gt;
|10||loadtime||0&lt;br /&gt;
|-&lt;br /&gt;
|12||presignals||1&lt;br /&gt;
|-&lt;br /&gt;
|13||extpresignals||1&lt;br /&gt;
|-&lt;br /&gt;
|16||enginespersist||vehicles.never_expire_vehicles&lt;br /&gt;
|-&lt;br /&gt;
|1B||multihead||1&lt;br /&gt;
|-&lt;br /&gt;
|1D||lowmemory||1&lt;br /&gt;
|-&lt;br /&gt;
|1E||generalfixes||1&lt;br /&gt;
|-&lt;br /&gt;
|27||moreairports||economy.station_noise_level&lt;br /&gt;
|-&lt;br /&gt;
|28||mammothtrains||1&lt;br /&gt;
|-&lt;br /&gt;
|29||trainrefit||1&lt;br /&gt;
|-&lt;br /&gt;
|2B||subsidiaries||0&lt;br /&gt;
|-&lt;br /&gt;
|2C||gradualloading||order.gradual_loading&lt;br /&gt;
|-&lt;br /&gt;
|32||(Set to bit 0 of unifiedmaglev mode)||1 (n/a)&lt;br /&gt;
|-&lt;br /&gt;
|33||(Set to bit 1 of unifiedmaglev mode)||1 (n/a)&lt;br /&gt;
|-&lt;br /&gt;
|34||bridgespeedlimits||1&lt;br /&gt;
|-&lt;br /&gt;
|36||eternalgame||1&lt;br /&gt;
|-&lt;br /&gt;
|37||newtrains||1&lt;br /&gt;
|-&lt;br /&gt;
|38||newrvs||1&lt;br /&gt;
|-&lt;br /&gt;
|39||newships||1&lt;br /&gt;
|-&lt;br /&gt;
|3A||newplanes||1&lt;br /&gt;
|-&lt;br /&gt;
|3B||signalsontrafficside||construction.signal_side&lt;br /&gt;
|-&lt;br /&gt;
|3C||electrifiedrailway||vehicle.disable_elrails&lt;br /&gt;
|-&lt;br /&gt;
|41 &amp;lt;ref&amp;gt;loadallgraphics is obsolete (and its bit unused) since revision 401. The next official versions were the 5/Jun/2006 nightly (402) and TTDPatch 2.5 beta 6 (472)&amp;lt;/ref&amp;gt;||loadallgraphics||1&lt;br /&gt;
|-&lt;br /&gt;
|43||semaphores||1&lt;br /&gt;
|-&lt;br /&gt;
|4A||newobjects (since r2364)||1&lt;br /&gt;
|-&lt;br /&gt;
|4B||enhancegui||0&lt;br /&gt;
|-&lt;br /&gt;
|4C||newagerating||0&lt;br /&gt;
|-&lt;br /&gt;
|4D||buildonslopes||construction.build_on_slopes&lt;br /&gt;
|-&lt;br /&gt;
|4E||fullloadany||1&lt;br /&gt;
|-&lt;br /&gt;
|4F||planespeed||1&lt;br /&gt;
|-&lt;br /&gt;
|50 &amp;lt;ref&amp;gt;moreindustriesperclimate is obsolete (and its bit unused) since TTDPatch 2.5 beta 2.&amp;lt;/ref&amp;gt;||moreindustriesperclimate||0&lt;br /&gt;
|-&lt;br /&gt;
|51||moretoylandfeatures||0&lt;br /&gt;
|-&lt;br /&gt;
|52||newstations||1&lt;br /&gt;
|-&lt;br /&gt;
|53||tracktypecostdiff||1&lt;br /&gt;
|-&lt;br /&gt;
|54||manualconvert||1&lt;br /&gt;
|-&lt;br /&gt;
|55||buildoncoasts||construction.build_on_slopes&lt;br /&gt;
|-&lt;br /&gt;
|56||canals||1&lt;br /&gt;
|-&lt;br /&gt;
|57||newstartyear||1&lt;br /&gt;
|-&lt;br /&gt;
|58||freighttrains||vehicle.freight_trains &amp;gt; 1&lt;br /&gt;
|-&lt;br /&gt;
|59||newhouses||1&lt;br /&gt;
|-&lt;br /&gt;
|5A||newbridges||1&lt;br /&gt;
|-&lt;br /&gt;
|5B||newtownnames||1&lt;br /&gt;
|-&lt;br /&gt;
|5C||moreanimation||1&lt;br /&gt;
|-&lt;br /&gt;
|5D||wagonspeedlimits||vehicle.wagon_speed_limits&lt;br /&gt;
|-&lt;br /&gt;
|5E||newshistory||1&lt;br /&gt;
|-&lt;br /&gt;
|5F||custombridgeheads||0&lt;br /&gt;
|-&lt;br /&gt;
|60||newcargodistribution||0&lt;br /&gt;
|-&lt;br /&gt;
|61||windowsnap||1&lt;br /&gt;
|-&lt;br /&gt;
|62||townbuildnoroads||not (economy.allow_town_roads or _generating_world)&lt;br /&gt;
|-&lt;br /&gt;
|63||pathbasedsignalling||1&lt;br /&gt;
|-&lt;br /&gt;
|64||aichoosechances||0&lt;br /&gt;
|-&lt;br /&gt;
|65||resolutionwidth||1&lt;br /&gt;
|-&lt;br /&gt;
|66||resolutionheight||1&lt;br /&gt;
|-&lt;br /&gt;
|67||newindustries||1&lt;br /&gt;
|-&lt;br /&gt;
|68||fifoloading||order.improved_load&lt;br /&gt;
|-&lt;br /&gt;
|69||townroadbranchprob||0&lt;br /&gt;
|-&lt;br /&gt;
|6A||tempsnowline||0&lt;br /&gt;
|-&lt;br /&gt;
|6B||newcargos||1&lt;br /&gt;
|-&lt;br /&gt;
|6C||enhancemultiplayer||1&lt;br /&gt;
|-&lt;br /&gt;
|6D||onewayroads||1&lt;br /&gt;
|-&lt;br /&gt;
|6E||irregularstations||1&lt;br /&gt;
|-&lt;br /&gt;
|6F||morestatistics||1&lt;br /&gt;
|-&lt;br /&gt;
|70||newsounds||1&lt;br /&gt;
|-&lt;br /&gt;
|71||autoreplace||1&lt;br /&gt;
|-&lt;br /&gt;
|72||autoslope||1&lt;br /&gt;
|-&lt;br /&gt;
|73||followvehicle||0&lt;br /&gt;
|-&lt;br /&gt;
|74||trams||1&lt;br /&gt;
|-&lt;br /&gt;
|75||enhancetunnels||0&lt;br /&gt;
|-&lt;br /&gt;
|76||shortrvs||1&lt;br /&gt;
|-&lt;br /&gt;
|77||articulatedrvs||1&lt;br /&gt;
|-&lt;br /&gt;
|78||dynamicengines||{{ottd|0.7|r12924}} vehicle.dynamic_engines&lt;br /&gt;
|-&lt;br /&gt;
|7E||variablerunningcosts (since r1421)||1&lt;br /&gt;
|-&lt;br /&gt;
|7F||set if any switches are on||1&lt;br /&gt;
|-&lt;br /&gt;
|80||-||{{ottd|1.9|g4b0b4e064}} 1 (larger persistent storage)&lt;br /&gt;
|-&lt;br /&gt;
|81||-||{{ottd|1.11|g1478fa93b}} economy.inflation&lt;br /&gt;
|-&lt;br /&gt;
|82||-||{{ottd|14|ottdrev=gf5394ed2ef}} 1 (Extended DCxx text area)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Michi cc</name></author>
	</entry>
	<entry>
		<id>https://newgrf-specs.tt-wiki.net/index.php?title=Action4&amp;diff=4370</id>
		<title>Action4</title>
		<link rel="alternate" type="text/html" href="https://newgrf-specs.tt-wiki.net/index.php?title=Action4&amp;diff=4370"/>
		<updated>2023-01-30T21:54:19Z</updated>

		<summary type="html">&lt;p&gt;Michi cc: /* offset */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
Define strings, e.g vehicle, house or industry names&lt;br /&gt;
&lt;br /&gt;
When making new vehicle graphics, you also need to name the new vehicles, or they&#039;ll show up with their original name from TTD.&lt;br /&gt;
However, custom vehicle names assigned by the player in-game (or for TTDPatch also via TTD&#039;s vehicle.dat) will always take precendence.&lt;br /&gt;
&lt;br /&gt;
In TTDPatch you can also use this action to change most of TTD&#039;s text strings.&lt;br /&gt;
&lt;br /&gt;
== Syntax ==&lt;br /&gt;
&lt;br /&gt;
The data looks as follows:&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;Sprite-number&amp;amp;gt; * &amp;amp;lt;Length&amp;amp;gt; &#039;&#039;&#039;04&#039;&#039;&#039; &amp;amp;lt;feature&amp;amp;gt; &amp;amp;lt;language-id&amp;amp;gt; &amp;amp;lt;num-ent&amp;amp;gt; &amp;amp;lt;offset&amp;amp;gt; &amp;amp;lt;text&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Element!![[GRFActionsDetailed|Size]]!!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;amp;lt;Sprite-number&amp;amp;gt;||dec||A sequential sprite number&lt;br /&gt;
|-&lt;br /&gt;
|&amp;amp;lt;length&amp;amp;gt;||dec||The total number of bytes used in this action.&lt;br /&gt;
|-&lt;br /&gt;
|04||B||Defines action 04&lt;br /&gt;
|-&lt;br /&gt;
|&amp;amp;lt;feature&amp;amp;gt;||B||For what type of vehicle/station should this definition be used?&lt;br /&gt;
|-&lt;br /&gt;
|&amp;amp;lt;language-id&amp;amp;gt;||B||Which of TTD&#039;s languages this name is for&lt;br /&gt;
|-&lt;br /&gt;
|&amp;amp;lt;num-ent&amp;amp;gt;||B||Number of consecutive strings to change&lt;br /&gt;
|-&lt;br /&gt;
|&amp;amp;lt;offset&amp;amp;gt;||B/W||First ID to change&lt;br /&gt;
|-&lt;br /&gt;
|&amp;amp;lt;text&amp;amp;gt;||S||New text strings&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Whether &amp;amp;lt;offset&amp;amp;gt; is a &#039;&#039;&#039;BYTE&#039;&#039;&#039; (extended byte in openttd for vehicles) or a &#039;&#039;&#039;WORD&#039;&#039;&#039; is decided by bit 7 of &amp;amp;lt;language-id&amp;amp;gt;, see below.&lt;br /&gt;
&lt;br /&gt;
== Descriptions ==&lt;br /&gt;
&lt;br /&gt;
=== Sprite-number ===&lt;br /&gt;
&lt;br /&gt;
This is just the number you are at.&lt;br /&gt;
&lt;br /&gt;
=== Length ===&lt;br /&gt;
&lt;br /&gt;
Count the number of bytes in this action.&lt;br /&gt;
&lt;br /&gt;
=== Feature ===&lt;br /&gt;
&lt;br /&gt;
This sets the type of [[Features|feature]] that you wish to change. Set it to:&lt;br /&gt;
&lt;br /&gt;
{|- |&lt;br /&gt;
!Value!![[Features|Feature]]&lt;br /&gt;
|-&lt;br /&gt;
|00||Trains&lt;br /&gt;
|-&lt;br /&gt;
|01||Road Vehicles&lt;br /&gt;
|-&lt;br /&gt;
|02||Ships&lt;br /&gt;
|-&lt;br /&gt;
|03||Aircraft&lt;br /&gt;
|-&lt;br /&gt;
|04||Stations&lt;br /&gt;
|-&lt;br /&gt;
|07||Houses&lt;br /&gt;
|-&lt;br /&gt;
|0A||Industries&lt;br /&gt;
|-&lt;br /&gt;
|0B||Cargos&lt;br /&gt;
|-&lt;br /&gt;
|0D||Airports&lt;br /&gt;
|-&lt;br /&gt;
|0F||Objects&lt;br /&gt;
|-&lt;br /&gt;
|10||Railtypes&lt;br /&gt;
|-&lt;br /&gt;
|12||Roadtypes&lt;br /&gt;
|-&lt;br /&gt;
|13||Tramtypes&lt;br /&gt;
|-&lt;br /&gt;
|48||Original strings; see [[TextIDs]] for a list of TTD&#039;s text IDs.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== language IDs ===&lt;br /&gt;
The meaning of this byte depends on the GRF version of the .grf file as set in [[Action8#version|action 8]].&lt;br /&gt;
&lt;br /&gt;
{{grfTill|6}} Up to version 6, this is a bit mask of the following bits:&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Bit!!Value!!Meaning&lt;br /&gt;
|-&lt;br /&gt;
|0||01||American or &amp;quot;other&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|1||02||English&lt;br /&gt;
|-&lt;br /&gt;
|2||04||German&lt;br /&gt;
|-&lt;br /&gt;
|3||08||French&lt;br /&gt;
|-&lt;br /&gt;
|4||10||Spanish&lt;br /&gt;
|-&lt;br /&gt;
|7||80||Flag for 16 bit string IDs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Add the bits of all languages for which the following strings apply. Bit 7 controls, whether the following string ID consists of 16 or 8 bit. Unknown languages will use the American strings as fallback. Otherwise the string would remain undefined for these languages. To actually define strings for any new language, you must use grf version 7.&lt;br /&gt;
&lt;br /&gt;
{{grfFrom|7}} For version 7 and higher, it is a simple language ID from the list below. (This has changed with TTDPatch 2.5 beta 4). Bit 7 has the same meaning as in the earlier versions above.&lt;br /&gt;
&lt;br /&gt;
In either scheme, you can use the value 7F or FF, respectively, to define strings shown for languages that you do not provide translation for. First set all strings to a default value using this, and later override the language specific ones if they exist. &lt;br /&gt;
&lt;br /&gt;
Set bit7 (add 0x80 to the languageID as in the table below) in order to use 16 bit string IDs.&lt;br /&gt;
&lt;br /&gt;
For a list of plural forms see [[StringCodes]]. As the assignment of plural forms to languages is in fact not as fixed as one might expect, the used plural form is defined by each GRF separately for its strings using [[Action0/Global Settings]] property 15.&lt;br /&gt;
&lt;br /&gt;
{{:language_IDs}}&lt;br /&gt;
&lt;br /&gt;
When translating for a new language, please simply edit the [[language_IDs|language list]] and add the new definition here.&lt;br /&gt;
&lt;br /&gt;
=== num-ent ===&lt;br /&gt;
&lt;br /&gt;
How many consecutive entries to change.&lt;br /&gt;
&lt;br /&gt;
=== offset ===&lt;br /&gt;
&lt;br /&gt;
The ID of the first string to change.&lt;br /&gt;
&lt;br /&gt;
When language-id bit 7 is clear, this is a byte value; For OpenTTD since r13482, where it is an extended byte value for vehicles.&lt;br /&gt;
&lt;br /&gt;
When language-id bit 7 is set, this is a word value in little endian notation, e.g. 8134 becomes 34 81.&lt;br /&gt;
&lt;br /&gt;
The 8 bit version is only allowed for vehicles to set their name, in which case the text ID is just the vehicle ID.&lt;br /&gt;
To replace original texts, or to define texts for usage in callbacks or properties of vehicles, stations, houses or industries you have to use the 16 bit version. However, town names are changed with [[ActionF|Action F]].&lt;br /&gt;
&lt;br /&gt;
For the usable 16 bit text IDs see the table below, resp. for feature 48 see [[TextIDs]].&lt;br /&gt;
&lt;br /&gt;
Though these ranges are shared across all features, you should still set the proper feature you are using them for.&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!ID!!Content&lt;br /&gt;
|-&lt;br /&gt;
|C4xx||Set name of station class associated with station ID xx; this is the text above the preview (where otherwise TTD shows &amp;quot;Orientation&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
|C5xx||New station names, this changes the text &amp;quot;number of platforms&amp;quot; into the given text when the station with this ID from the current set is selected (i.e. xx=station-id from action 3 and 0)&lt;br /&gt;
|-&lt;br /&gt;
|C9xx||Name of the house type of this ID. If both property 12 and this is set, the latest definition is used always. You should prefer setting [[Action0/Houses#Building name ID (12)|property 12]] instead of this, so executables translated with TTD Translator will show the name in the current language. However, if you can&#039;t find any suitable old TTD texts, this can be used to specify your custom name. Don&#039;t forget to set the same text for all parts of a multi-tile building.&lt;br /&gt;
|-&lt;br /&gt;
|D0xx||Miscellaneous graphics texts, unique to each .grf file. Used for several callbacks. Some callbacks support IDs up to D3FF.&lt;br /&gt;
|-&lt;br /&gt;
|D4xx||&#039;&#039;&#039;Never use in Action4&#039;&#039;&#039;, only for displaying textids in range D000-D3FF (grf specific), see [[TextIDs]]&lt;br /&gt;
|-&lt;br /&gt;
|D8xx&lt;br /&gt;
|{{ottd|1.7|rev=r27769}} Useable like DCxx in Action 0 and for inclusion via string codes 0x80 and 0x81.&lt;br /&gt;
{{ttdp|}}&#039;&#039;&#039;Never use in Action4&#039;&#039;&#039;, only usable in Action0 features, see [[TextIDs]]&lt;br /&gt;
|-&lt;br /&gt;
|DCxx||Set miscellaneous persistent GRF texts. Useable in Action 0 and for inclusion via string codes 0x80 and 0x81.&lt;br /&gt;
{{ottd|14|ottdrev=gf5394ed2ef}} This area extends up to textid FFFF.&lt;br /&gt;
&lt;br /&gt;
{{ttdp|}} Unlike the D0xx GRF texts, these IDs can be used to set properties. The text ID must be set before any [[Action0/Houses|action 0]] references it.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{ttdp|}} The DCxx IDs are allocated internally when defined, and are persistent in the savegame data. Each .grf file gets its own separate map of these internal IDs and thus may set all 256 of them. &amp;amp;nbsp;However, only 1024 IDs are available in total, to be shared by all .grf files ever activated in the savegame. This means these IDs should be used as sparingly as possible. But use them when they are useful!&lt;br /&gt;
&lt;br /&gt;
=== text ===&lt;br /&gt;
&lt;br /&gt;
This is a list of zero-terminated strings, there must be as many strings as num-ent specifies.&lt;br /&gt;
&lt;br /&gt;
Grfcodec version 0.9.6 or later accepts literal strings in the .nfo. These are encoded exactly as written, in whatever encoding your text editor uses; if you need a 00, put it immediately after the literal string.&lt;br /&gt;
For the supported encodings, format, and restrictions on what characters you may use, please see [[GRFActionsDetailed#Strings|GRFActionsDetailed]] and StringCodes.&lt;br /&gt;
&lt;br /&gt;
A large number of original TTD strings require a colour code in front of the actual string. You can also use these colour codes in most of your custom strings. Use them wisely! In case a string requires a colour code, the string will have the code displayed in front of the default text as listed in [[TextIDs]].Typically, a colour coded string starts with the escape character (backslash), followed by hex byte and then the actual text string itself. I.e. string 0001 (&amp;quot;\94Off edge of map&amp;quot;) has colour code 0x94 in front of the text string, which will colour it white. You can also put the plain hex byte outside the quoted string without having to escape it. &#039;&#039;94 &amp;quot;Off edge of map&amp;quot;&#039;&#039; would be the same as &#039;&#039;&amp;quot;\94Off edge of map&amp;quot;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The following colour codes are available for use:&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!&#039;&#039;&#039;Code&#039;&#039;&#039;!!&#039;&#039;&#039;Colour&#039;&#039;&#039;!!&#039;&#039;&#039;Pallete Colour&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|88||Blue|| &amp;lt;div style=&amp;quot;background:#3890E8;width:2em;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|89||Silver|| &amp;lt;div style=&amp;quot;background:#C8C8C8;width:2em;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|8A||Golden|| &amp;lt;div style=&amp;quot;background:#FCC000;width:2em;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|8B||Red|| &amp;lt;div style=&amp;quot;background:#FC0000;width:2em;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|8C||Purple|| &amp;lt;div style=&amp;quot;background:#A888E0;width:2em;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|8D||Light Brown|| &amp;lt;div style=&amp;quot;background:#B0B084;width:2em;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|8E||Orange|| &amp;lt;div style=&amp;quot;background:#FCB030;width:2em;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|8F||Green|| &amp;lt;div style=&amp;quot;background:#90E05C;width:2em;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|90||Yellow|| &amp;lt;div style=&amp;quot;background:#FCF880;width:2em;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|91||Dark Green|| &amp;lt;div style=&amp;quot;background:#B4CC7C;width:2em;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|92||Cream|| &amp;lt;div style=&amp;quot;background:#D49480;width:2em;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|93||Brown|| &amp;lt;div style=&amp;quot;background:#A46040;width:2em;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|94||White|| &amp;lt;div style=&amp;quot;background:#FCFCFC;width:2em;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|95||Light Blue|| &amp;lt;div style=&amp;quot;background:#80C4FC;width:2em;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|96||Grey|| &amp;lt;div style=&amp;quot;background:#626562;width:2em;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|97||Dark Blue|| &amp;lt;div style=&amp;quot;background:#8484A4;width:2em;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|98||Black|| &amp;lt;div style=&amp;quot;background:#101010;width:2em;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Example==&lt;/div&gt;</summary>
		<author><name>Michi cc</name></author>
	</entry>
	<entry>
		<id>https://newgrf-specs.tt-wiki.net/index.php?title=Action4&amp;diff=4369</id>
		<title>Action4</title>
		<link rel="alternate" type="text/html" href="https://newgrf-specs.tt-wiki.net/index.php?title=Action4&amp;diff=4369"/>
		<updated>2023-01-30T21:53:44Z</updated>

		<summary type="html">&lt;p&gt;Michi cc: /* offset */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
Define strings, e.g vehicle, house or industry names&lt;br /&gt;
&lt;br /&gt;
When making new vehicle graphics, you also need to name the new vehicles, or they&#039;ll show up with their original name from TTD.&lt;br /&gt;
However, custom vehicle names assigned by the player in-game (or for TTDPatch also via TTD&#039;s vehicle.dat) will always take precendence.&lt;br /&gt;
&lt;br /&gt;
In TTDPatch you can also use this action to change most of TTD&#039;s text strings.&lt;br /&gt;
&lt;br /&gt;
== Syntax ==&lt;br /&gt;
&lt;br /&gt;
The data looks as follows:&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;Sprite-number&amp;amp;gt; * &amp;amp;lt;Length&amp;amp;gt; &#039;&#039;&#039;04&#039;&#039;&#039; &amp;amp;lt;feature&amp;amp;gt; &amp;amp;lt;language-id&amp;amp;gt; &amp;amp;lt;num-ent&amp;amp;gt; &amp;amp;lt;offset&amp;amp;gt; &amp;amp;lt;text&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Element!![[GRFActionsDetailed|Size]]!!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;amp;lt;Sprite-number&amp;amp;gt;||dec||A sequential sprite number&lt;br /&gt;
|-&lt;br /&gt;
|&amp;amp;lt;length&amp;amp;gt;||dec||The total number of bytes used in this action.&lt;br /&gt;
|-&lt;br /&gt;
|04||B||Defines action 04&lt;br /&gt;
|-&lt;br /&gt;
|&amp;amp;lt;feature&amp;amp;gt;||B||For what type of vehicle/station should this definition be used?&lt;br /&gt;
|-&lt;br /&gt;
|&amp;amp;lt;language-id&amp;amp;gt;||B||Which of TTD&#039;s languages this name is for&lt;br /&gt;
|-&lt;br /&gt;
|&amp;amp;lt;num-ent&amp;amp;gt;||B||Number of consecutive strings to change&lt;br /&gt;
|-&lt;br /&gt;
|&amp;amp;lt;offset&amp;amp;gt;||B/W||First ID to change&lt;br /&gt;
|-&lt;br /&gt;
|&amp;amp;lt;text&amp;amp;gt;||S||New text strings&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Whether &amp;amp;lt;offset&amp;amp;gt; is a &#039;&#039;&#039;BYTE&#039;&#039;&#039; (extended byte in openttd for vehicles) or a &#039;&#039;&#039;WORD&#039;&#039;&#039; is decided by bit 7 of &amp;amp;lt;language-id&amp;amp;gt;, see below.&lt;br /&gt;
&lt;br /&gt;
== Descriptions ==&lt;br /&gt;
&lt;br /&gt;
=== Sprite-number ===&lt;br /&gt;
&lt;br /&gt;
This is just the number you are at.&lt;br /&gt;
&lt;br /&gt;
=== Length ===&lt;br /&gt;
&lt;br /&gt;
Count the number of bytes in this action.&lt;br /&gt;
&lt;br /&gt;
=== Feature ===&lt;br /&gt;
&lt;br /&gt;
This sets the type of [[Features|feature]] that you wish to change. Set it to:&lt;br /&gt;
&lt;br /&gt;
{|- |&lt;br /&gt;
!Value!![[Features|Feature]]&lt;br /&gt;
|-&lt;br /&gt;
|00||Trains&lt;br /&gt;
|-&lt;br /&gt;
|01||Road Vehicles&lt;br /&gt;
|-&lt;br /&gt;
|02||Ships&lt;br /&gt;
|-&lt;br /&gt;
|03||Aircraft&lt;br /&gt;
|-&lt;br /&gt;
|04||Stations&lt;br /&gt;
|-&lt;br /&gt;
|07||Houses&lt;br /&gt;
|-&lt;br /&gt;
|0A||Industries&lt;br /&gt;
|-&lt;br /&gt;
|0B||Cargos&lt;br /&gt;
|-&lt;br /&gt;
|0D||Airports&lt;br /&gt;
|-&lt;br /&gt;
|0F||Objects&lt;br /&gt;
|-&lt;br /&gt;
|10||Railtypes&lt;br /&gt;
|-&lt;br /&gt;
|12||Roadtypes&lt;br /&gt;
|-&lt;br /&gt;
|13||Tramtypes&lt;br /&gt;
|-&lt;br /&gt;
|48||Original strings; see [[TextIDs]] for a list of TTD&#039;s text IDs.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== language IDs ===&lt;br /&gt;
The meaning of this byte depends on the GRF version of the .grf file as set in [[Action8#version|action 8]].&lt;br /&gt;
&lt;br /&gt;
{{grfTill|6}} Up to version 6, this is a bit mask of the following bits:&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Bit!!Value!!Meaning&lt;br /&gt;
|-&lt;br /&gt;
|0||01||American or &amp;quot;other&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|1||02||English&lt;br /&gt;
|-&lt;br /&gt;
|2||04||German&lt;br /&gt;
|-&lt;br /&gt;
|3||08||French&lt;br /&gt;
|-&lt;br /&gt;
|4||10||Spanish&lt;br /&gt;
|-&lt;br /&gt;
|7||80||Flag for 16 bit string IDs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Add the bits of all languages for which the following strings apply. Bit 7 controls, whether the following string ID consists of 16 or 8 bit. Unknown languages will use the American strings as fallback. Otherwise the string would remain undefined for these languages. To actually define strings for any new language, you must use grf version 7.&lt;br /&gt;
&lt;br /&gt;
{{grfFrom|7}} For version 7 and higher, it is a simple language ID from the list below. (This has changed with TTDPatch 2.5 beta 4). Bit 7 has the same meaning as in the earlier versions above.&lt;br /&gt;
&lt;br /&gt;
In either scheme, you can use the value 7F or FF, respectively, to define strings shown for languages that you do not provide translation for. First set all strings to a default value using this, and later override the language specific ones if they exist. &lt;br /&gt;
&lt;br /&gt;
Set bit7 (add 0x80 to the languageID as in the table below) in order to use 16 bit string IDs.&lt;br /&gt;
&lt;br /&gt;
For a list of plural forms see [[StringCodes]]. As the assignment of plural forms to languages is in fact not as fixed as one might expect, the used plural form is defined by each GRF separately for its strings using [[Action0/Global Settings]] property 15.&lt;br /&gt;
&lt;br /&gt;
{{:language_IDs}}&lt;br /&gt;
&lt;br /&gt;
When translating for a new language, please simply edit the [[language_IDs|language list]] and add the new definition here.&lt;br /&gt;
&lt;br /&gt;
=== num-ent ===&lt;br /&gt;
&lt;br /&gt;
How many consecutive entries to change.&lt;br /&gt;
&lt;br /&gt;
=== offset ===&lt;br /&gt;
&lt;br /&gt;
The ID of the first string to change.&lt;br /&gt;
&lt;br /&gt;
When language-id bit 7 is clear, this is a byte value; For OpenTTD since r13482, where it is an extended byte value for vehicles.&lt;br /&gt;
&lt;br /&gt;
When language-id bit 7 is set, this is a word value in little endian notation, e.g. 8134 becomes 34 81.&lt;br /&gt;
&lt;br /&gt;
The 8 bit version is only allowed for vehicles to set their name, in which case the text ID is just the vehicle ID.&lt;br /&gt;
To replace original texts, or to define texts for usage in callbacks or properties of vehicles, stations, houses or industries you have to use the 16 bit version. However, town names are changed with [[ActionF|Action F]].&lt;br /&gt;
&lt;br /&gt;
For the usable 16 bit text IDs see the table below, resp. for feature 48 see [[TextIDs]].&lt;br /&gt;
&lt;br /&gt;
Though these ranges are shared across all features, you should still set the proper feature you are using them for.&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!ID!!Content&lt;br /&gt;
|-&lt;br /&gt;
|C4xx||Set name of station class associated with station ID xx; this is the text above the preview (where otherwise TTD shows &amp;quot;Orientation&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
|C5xx||New station names, this changes the text &amp;quot;number of platforms&amp;quot; into the given text when the station with this ID from the current set is selected (i.e. xx=station-id from action 3 and 0)&lt;br /&gt;
|-&lt;br /&gt;
|C9xx||Name of the house type of this ID. If both property 12 and this is set, the latest definition is used always. You should prefer setting [[Action0/Houses#Building name ID (12)|property 12]] instead of this, so executables translated with TTD Translator will show the name in the current language. However, if you can&#039;t find any suitable old TTD texts, this can be used to specify your custom name. Don&#039;t forget to set the same text for all parts of a multi-tile building.&lt;br /&gt;
|-&lt;br /&gt;
|D0xx||Miscellaneous graphics texts, unique to each .grf file. Used for several callbacks. Some callbacks support IDs up to D3FF.&lt;br /&gt;
|-&lt;br /&gt;
|D4xx||&#039;&#039;&#039;Never use in Action4&#039;&#039;&#039;, only for displaying textids in range D000-D3FF (grf specific), see [[TextIDs]]&lt;br /&gt;
|-&lt;br /&gt;
|D8xx&lt;br /&gt;
|{{ottd|1.7|rev=r27769}} Useable like DCxx in Action 0 and for inclusion via string codes 0x80 and 0x81.&lt;br /&gt;
{{ttdp|}}&#039;&#039;&#039;Never use in Action4&#039;&#039;&#039;, only usable in Action0 features, see [[TextIDs]]&lt;br /&gt;
|-&lt;br /&gt;
|DCxx||Set miscellaneous persistent GRF texts. Useable in Action 0 and for inclusion via string codes 0x80 and 0x81.&lt;br /&gt;
{{ottd|14|ottdrev=gf5394ed2ef}} This area extends up to textid FFFF.&lt;br /&gt;
{{ttdp|}} Unlike the D0xx GRF texts, these IDs can be used to set properties. The text ID must be set before any [[Action0/Houses|action 0]] references it.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{ttdp|}} The DCxx IDs are allocated internally when defined, and are persistent in the savegame data. Each .grf file gets its own separate map of these internal IDs and thus may set all 256 of them. &amp;amp;nbsp;However, only 1024 IDs are available in total, to be shared by all .grf files ever activated in the savegame. This means these IDs should be used as sparingly as possible. But use them when they are useful!&lt;br /&gt;
&lt;br /&gt;
=== text ===&lt;br /&gt;
&lt;br /&gt;
This is a list of zero-terminated strings, there must be as many strings as num-ent specifies.&lt;br /&gt;
&lt;br /&gt;
Grfcodec version 0.9.6 or later accepts literal strings in the .nfo. These are encoded exactly as written, in whatever encoding your text editor uses; if you need a 00, put it immediately after the literal string.&lt;br /&gt;
For the supported encodings, format, and restrictions on what characters you may use, please see [[GRFActionsDetailed#Strings|GRFActionsDetailed]] and StringCodes.&lt;br /&gt;
&lt;br /&gt;
A large number of original TTD strings require a colour code in front of the actual string. You can also use these colour codes in most of your custom strings. Use them wisely! In case a string requires a colour code, the string will have the code displayed in front of the default text as listed in [[TextIDs]].Typically, a colour coded string starts with the escape character (backslash), followed by hex byte and then the actual text string itself. I.e. string 0001 (&amp;quot;\94Off edge of map&amp;quot;) has colour code 0x94 in front of the text string, which will colour it white. You can also put the plain hex byte outside the quoted string without having to escape it. &#039;&#039;94 &amp;quot;Off edge of map&amp;quot;&#039;&#039; would be the same as &#039;&#039;&amp;quot;\94Off edge of map&amp;quot;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The following colour codes are available for use:&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!&#039;&#039;&#039;Code&#039;&#039;&#039;!!&#039;&#039;&#039;Colour&#039;&#039;&#039;!!&#039;&#039;&#039;Pallete Colour&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|88||Blue|| &amp;lt;div style=&amp;quot;background:#3890E8;width:2em;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|89||Silver|| &amp;lt;div style=&amp;quot;background:#C8C8C8;width:2em;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|8A||Golden|| &amp;lt;div style=&amp;quot;background:#FCC000;width:2em;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|8B||Red|| &amp;lt;div style=&amp;quot;background:#FC0000;width:2em;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|8C||Purple|| &amp;lt;div style=&amp;quot;background:#A888E0;width:2em;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|8D||Light Brown|| &amp;lt;div style=&amp;quot;background:#B0B084;width:2em;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|8E||Orange|| &amp;lt;div style=&amp;quot;background:#FCB030;width:2em;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|8F||Green|| &amp;lt;div style=&amp;quot;background:#90E05C;width:2em;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|90||Yellow|| &amp;lt;div style=&amp;quot;background:#FCF880;width:2em;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|91||Dark Green|| &amp;lt;div style=&amp;quot;background:#B4CC7C;width:2em;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|92||Cream|| &amp;lt;div style=&amp;quot;background:#D49480;width:2em;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|93||Brown|| &amp;lt;div style=&amp;quot;background:#A46040;width:2em;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|94||White|| &amp;lt;div style=&amp;quot;background:#FCFCFC;width:2em;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|95||Light Blue|| &amp;lt;div style=&amp;quot;background:#80C4FC;width:2em;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|96||Grey|| &amp;lt;div style=&amp;quot;background:#626562;width:2em;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|97||Dark Blue|| &amp;lt;div style=&amp;quot;background:#8484A4;width:2em;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|98||Black|| &amp;lt;div style=&amp;quot;background:#101010;width:2em;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Example==&lt;/div&gt;</summary>
		<author><name>Michi cc</name></author>
	</entry>
	<entry>
		<id>https://newgrf-specs.tt-wiki.net/index.php?title=Action3/Tramtypes&amp;diff=4366</id>
		<title>Action3/Tramtypes</title>
		<link rel="alternate" type="text/html" href="https://newgrf-specs.tt-wiki.net/index.php?title=Action3/Tramtypes&amp;diff=4366"/>
		<updated>2022-12-26T23:02:42Z</updated>

		<summary type="html">&lt;p&gt;Michi cc: /* cargo-type */ type 03 tunnel&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Action 3 assigns graphics sets (referenced to by (chains of) [[Action2|action 2(s]]) to feature IDs.&lt;br /&gt;
&lt;br /&gt;
{{ottdp|1.10}} Tramtypes are available only in OpenTTD &amp;amp;gt; 1.10&lt;br /&gt;
&lt;br /&gt;
== Format ==&lt;br /&gt;
&lt;br /&gt;
The format of the data is feature-dependent. For tramtypes it looks like&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &amp;amp;lt;Sprite-number&amp;amp;gt; * &amp;amp;lt;Length&amp;amp;gt; 03 13 &amp;amp;lt;n-id&amp;amp;gt; &amp;amp;lt;ids...&amp;amp;gt; &amp;amp;lt;num-cid&amp;amp;gt; &amp;amp;lt;cargo-type&amp;amp;gt; &amp;amp;lt;set-ID&amp;amp;gt;... &amp;amp;lt;default set-ID&amp;amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039;Element&#039;&#039;&#039;&lt;br /&gt;
![[GRFActionsDetailed|&#039;&#039;&#039;Size&#039;&#039;&#039;]]&lt;br /&gt;
!&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;amp;lt;Sprite-number&amp;amp;gt;&lt;br /&gt;
|dec&lt;br /&gt;
|A sequential sprite number&lt;br /&gt;
|-&lt;br /&gt;
|&amp;amp;lt;length&amp;amp;gt;&lt;br /&gt;
|dec&lt;br /&gt;
|The total number of bytes used in this action&lt;br /&gt;
|-&lt;br /&gt;
|03&lt;br /&gt;
|B&lt;br /&gt;
|Defines action 03&lt;br /&gt;
|-&lt;br /&gt;
|13&lt;br /&gt;
|B&lt;br /&gt;
|The feature byte for tramtypes&lt;br /&gt;
|-&lt;br /&gt;
|&amp;amp;lt;n-id&amp;amp;gt;&lt;br /&gt;
|B&lt;br /&gt;
|Number of IDs this action 3 associates graphics with&lt;br /&gt;
|-&lt;br /&gt;
|&amp;amp;lt;ids...&amp;amp;gt;&lt;br /&gt;
|B/B*&lt;br /&gt;
|IDs of the current feature this action 3 associates graphics with. There must be as many IDs as &amp;amp;lt;n-id&amp;amp;gt; specifies&lt;br /&gt;
|-&lt;br /&gt;
|&amp;amp;lt;num-cid&amp;amp;gt;&lt;br /&gt;
|B&lt;br /&gt;
|Number of different &amp;quot;cargo&amp;quot; types to support&lt;br /&gt;
|-&lt;br /&gt;
|&amp;amp;lt;cargo-type&amp;amp;gt;&lt;br /&gt;
|B&lt;br /&gt;
|&amp;quot;Cargo&amp;quot; type for which to use the following set-ID&lt;br /&gt;
|-&lt;br /&gt;
|&amp;amp;lt;set-ID&amp;amp;gt;&lt;br /&gt;
|W&lt;br /&gt;
|Set-ID (from action 2 or from a varaction2 chain) to use for this cargo type&lt;br /&gt;
|-&lt;br /&gt;
|&amp;amp;lt;default set-ID&amp;amp;gt;&lt;br /&gt;
|W&lt;br /&gt;
|Default set-ID to use if none of the above matches&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
&lt;br /&gt;
=== Sprite-number ===&lt;br /&gt;
&lt;br /&gt;
This is just the number you are at.&lt;br /&gt;
&lt;br /&gt;
=== Length ===&lt;br /&gt;
&lt;br /&gt;
Count the number of bytes in this action.&lt;br /&gt;
&lt;br /&gt;
=== n-id ===&lt;br /&gt;
&lt;br /&gt;
How many items of the current feature this action 3 defines new graphics for. If this is more than one, all items listed will get the same graphics. If this value has bit 7 set (i.e. 80 added), it is a wagon override. See [[Action3LiveryOverride|Action 3 - Livery Override]] for more info on this feature.&lt;br /&gt;
&lt;br /&gt;
You can make a definition with n-id equal to zero (and thus no ids that follow). &amp;amp;nbsp;This creates a generic feature-specific definition not associated with any particular item. &amp;amp;nbsp;At the moment, this is used for generic callbacks, but might be extended to other functions eventually.&lt;br /&gt;
&lt;br /&gt;
=== ids ===&lt;br /&gt;
&lt;br /&gt;
Feature IDs to use this action 3 for. All IDs are counted from the first of their class, i.e. the first road vehicle has 00, as does the first plane, the first ship, and the first train vehicle.&lt;br /&gt;
&lt;br /&gt;
=== num-cid ===&lt;br /&gt;
&lt;br /&gt;
Number of &amp;quot;cargo&amp;quot; type definitions that follow.&lt;br /&gt;
&lt;br /&gt;
=== cargo-type ===&lt;br /&gt;
&lt;br /&gt;
Tramtypes re-uses in its Action3 the &#039;cargo&#039;-type definition in order to assign the type of graphics defined by the associated set-ID:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&#039;Cargo&#039; Type&lt;br /&gt;
!Sprite Type&lt;br /&gt;
!#Sprites&lt;br /&gt;
!Useage&lt;br /&gt;
|-&lt;br /&gt;
|00&lt;br /&gt;
|Icons and cursors&lt;br /&gt;
|12&lt;br /&gt;
|4 rail directions, autorail, depot, tunnel and convert rail. First all icons, then all cursors.&lt;br /&gt;
|-&lt;br /&gt;
|01&lt;br /&gt;
|Track overlays&amp;lt;ref name=leftout&amp;gt;Either all or none of these sprites should be provided.&amp;lt;/ref&amp;gt;&lt;br /&gt;
|19&lt;br /&gt;
|11 trackbit combinations, 4 slopes, and 4 dead ends. These sprites are &#039;&#039;&#039;required&#039;&#039;&#039; for tramtypes.&lt;br /&gt;
|-&lt;br /&gt;
|02&lt;br /&gt;
|Underlay&amp;lt;ref name=leftout /&amp;gt;&lt;br /&gt;
|19&lt;br /&gt;
|11 trackbit combinations, 4 slopes, and 4 dead ends. These sprites are required.&lt;br /&gt;
|-&lt;br /&gt;
|03&lt;br /&gt;
|Tunnel&amp;lt;ref name=leftout /&amp;gt;&lt;br /&gt;
|4&lt;br /&gt;
|{{ottd|13|}} 1 sprite for each direction. Sprite is overlay for tram in existing tunnel graphics, but only if no road type has an overlay, too. The original ground sprite is drawn, then the overlay, then possibly a RV and the original tunnel head is drawn over the top. This keeps compatibility with different landscape types. Sprite order: SW, NW, NE, SE.&lt;br /&gt;
|-&lt;br /&gt;
|04&lt;br /&gt;
|Catenary front&lt;br /&gt;
|29&lt;br /&gt;
|11 trackbit combinations, 4 slopes, 4 dead ends, 4 tunnels, 2 bridge middle, 4 bridge ramps&lt;br /&gt;
|-&lt;br /&gt;
|05&lt;br /&gt;
|Catenary back&lt;br /&gt;
|29&lt;br /&gt;
|11 trackbit combinations, 4 slopes, 4 dead ends, 4 tunnels (unused), 2 bridge middle, 4 bridge ramps&lt;br /&gt;
|-&lt;br /&gt;
|06&lt;br /&gt;
|Bridge surfaces&amp;lt;ref name=leftout /&amp;gt;&lt;br /&gt;
|6&lt;br /&gt;
|2 bridge middle, 4 bridge ramps&lt;br /&gt;
|-&lt;br /&gt;
|08&lt;br /&gt;
|Depots&lt;br /&gt;
|6&lt;br /&gt;
|Follows the original layout for depot sprites. If not present, the default depot sprites (depending on catenary flag) plus track overlay are drawn. If present, the depot sprites are expected to include track overlay graphics.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
|-&lt;br /&gt;
|0A&lt;br /&gt;
|Tunnel portal overlay&amp;lt;ref name=tunneloverlay&amp;gt;Above &#039;all or none&#039; sprites must be supplied, if these sprites are to be used.&amp;lt;/ref&amp;gt;&lt;br /&gt;
|4&lt;br /&gt;
|{{ottd|1.2|r23952}} 1 sprite for each direction, order is SW, NW, NE, SE.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== GUI sprites (00) ====&lt;br /&gt;
&lt;br /&gt;
[[File:Nrt_gui.png]]&lt;br /&gt;
&lt;br /&gt;
==== Track overlay (01) ====&lt;br /&gt;
&lt;br /&gt;
[[File:Nrt_overlay.png]]&lt;br /&gt;
&lt;br /&gt;
==== Track underlay (02) ====&lt;br /&gt;
&lt;br /&gt;
[[File:Nrt_underlay.png]]&lt;br /&gt;
&lt;br /&gt;
==== Catenary front (04)====&lt;br /&gt;
&lt;br /&gt;
[[File:Nrt_catenary_front.png]]&lt;br /&gt;
&lt;br /&gt;
==== Catenary back (05) ====&lt;br /&gt;
&lt;br /&gt;
[[File:Nrt_catenary_back.png]]&lt;br /&gt;
&lt;br /&gt;
==== Depot sprites (08) ====&lt;br /&gt;
&lt;br /&gt;
[[File:Nrt_depot.png]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&lt;br /&gt;
|-&lt;br /&gt;
!Sprite Number&lt;br /&gt;
!Usage&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
| &amp;amp;nbsp; &amp;amp;nbsp;NE wall for SE-entry depot.&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
| &amp;amp;nbsp; &amp;amp;nbsp;Depot building for SE-entry depot.&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
| &amp;amp;nbsp; &amp;amp;nbsp;NW wall for SW-entry depot.&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
| &amp;amp;nbsp; &amp;amp;nbsp;Depot building for SW-entry depot.&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
| &amp;amp;nbsp; &amp;amp;nbsp;Depot building for NE-entry depot.&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
| &amp;amp;nbsp; &amp;amp;nbsp;Depot building for NW-entry depot.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Bridge surfaces (06) ====&lt;br /&gt;
&lt;br /&gt;
[[File:Nrt_bridge.png]]&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
==== Tunnel portal overlay (0A) ====&lt;br /&gt;
&lt;br /&gt;
If this &#039;cargo&#039; type is defined, tunnels for this railtype will be drawn differently.&lt;br /&gt;
&lt;br /&gt;
First, a grass underlay base sprite is drawn, then the sprite returned from type 03. Next, train sprites if applicable and then a grass overlay and finally the sprite from this type (0A). The grass sprites are defined in the base set and do not contain any parts of the tracks or portal, so these have to be fully provided by the railtype sprites.&lt;br /&gt;
&lt;br /&gt;
Illustration: [[File:RailtypeTunnelExample.png]]&lt;br /&gt;
&lt;br /&gt;
Variable 10 can be used to distinguish between several requested tunnel variations:&lt;br /&gt;
{| |-&lt;br /&gt;
! Lowest byte of [[GlobalVariables#Extra_callback_info_.2810_.2F_-.29_and_.2818_.2F_-.29|variable 10]] !! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| 00 || This is a plain portal without any extra features (like tracks above).&lt;br /&gt;
|-&lt;br /&gt;
| all other values || reserved for future extensions (e.g. basetunnels).&lt;br /&gt;
|}&lt;br /&gt;
The other bytes of variable 10 are reserved, and must be masked.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== default set-ID ===&lt;br /&gt;
&lt;br /&gt;
The default set-ID would be used for tramtype callbacks. However, since there are currently no callbacks for tramtypes it should always result in a [[Action2/Only_Callback_Failure|callback-failure]].&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;/div&gt;</summary>
		<author><name>Michi cc</name></author>
	</entry>
	<entry>
		<id>https://newgrf-specs.tt-wiki.net/index.php?title=Action3/Roadtypes&amp;diff=4365</id>
		<title>Action3/Roadtypes</title>
		<link rel="alternate" type="text/html" href="https://newgrf-specs.tt-wiki.net/index.php?title=Action3/Roadtypes&amp;diff=4365"/>
		<updated>2022-12-26T23:00:27Z</updated>

		<summary type="html">&lt;p&gt;Michi cc: /* cargo-type */ 03 tunnel&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Action 3 assigns graphics sets (referenced to by (chains of) [[Action2|action 2(s]]) to feature IDs.&lt;br /&gt;
&lt;br /&gt;
{{ottdp|1.10}} Roadtypes are available only in OpenTTD &amp;amp;gt; 1.10&lt;br /&gt;
&lt;br /&gt;
== Format ==&lt;br /&gt;
&lt;br /&gt;
The format of the data is feature-dependent. For roadtypes it looks like&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &amp;amp;lt;Sprite-number&amp;amp;gt; * &amp;amp;lt;Length&amp;amp;gt; 03 12 &amp;amp;lt;n-id&amp;amp;gt; &amp;amp;lt;ids...&amp;amp;gt; &amp;amp;lt;num-cid&amp;amp;gt; &amp;amp;lt;cargo-type&amp;amp;gt; &amp;amp;lt;set-ID&amp;amp;gt;... &amp;amp;lt;default set-ID&amp;amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039;Element&#039;&#039;&#039;&lt;br /&gt;
![[GRFActionsDetailed|&#039;&#039;&#039;Size&#039;&#039;&#039;]]&lt;br /&gt;
!&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;amp;lt;Sprite-number&amp;amp;gt;&lt;br /&gt;
|dec&lt;br /&gt;
|A sequential sprite number&lt;br /&gt;
|-&lt;br /&gt;
|&amp;amp;lt;length&amp;amp;gt;&lt;br /&gt;
|dec&lt;br /&gt;
|The total number of bytes used in this action&lt;br /&gt;
|-&lt;br /&gt;
|03&lt;br /&gt;
|B&lt;br /&gt;
|Defines action 03&lt;br /&gt;
|-&lt;br /&gt;
|12&lt;br /&gt;
|B&lt;br /&gt;
|The feature byte for roadtypes&lt;br /&gt;
|-&lt;br /&gt;
|&amp;amp;lt;n-id&amp;amp;gt;&lt;br /&gt;
|B&lt;br /&gt;
|Number of IDs this action 3 associates graphics with&lt;br /&gt;
|-&lt;br /&gt;
|&amp;amp;lt;ids...&amp;amp;gt;&lt;br /&gt;
|B/B*&lt;br /&gt;
|IDs of the current feature this action 3 associates graphics with. There must be as many IDs as &amp;amp;lt;n-id&amp;amp;gt; specifies&lt;br /&gt;
|-&lt;br /&gt;
|&amp;amp;lt;num-cid&amp;amp;gt;&lt;br /&gt;
|B&lt;br /&gt;
|Number of different &amp;quot;cargo&amp;quot; types to support&lt;br /&gt;
|-&lt;br /&gt;
|&amp;amp;lt;cargo-type&amp;amp;gt;&lt;br /&gt;
|B&lt;br /&gt;
|&amp;quot;Cargo&amp;quot; type for which to use the following set-ID&lt;br /&gt;
|-&lt;br /&gt;
|&amp;amp;lt;set-ID&amp;amp;gt;&lt;br /&gt;
|W&lt;br /&gt;
|Set-ID (from action 2 or from a varaction2 chain) to use for this cargo type&lt;br /&gt;
|-&lt;br /&gt;
|&amp;amp;lt;default set-ID&amp;amp;gt;&lt;br /&gt;
|W&lt;br /&gt;
|Default set-ID to use if none of the above matches&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
&lt;br /&gt;
=== Sprite-number ===&lt;br /&gt;
&lt;br /&gt;
This is just the number you are at.&lt;br /&gt;
&lt;br /&gt;
=== Length ===&lt;br /&gt;
&lt;br /&gt;
Count the number of bytes in this action.&lt;br /&gt;
&lt;br /&gt;
=== n-id ===&lt;br /&gt;
&lt;br /&gt;
How many items of the current feature this action 3 defines new graphics for. If this is more than one, all items listed will get the same graphics. If this value has bit 7 set (i.e. 80 added), it is a wagon override. See [[Action3LiveryOverride|Action 3 - Livery Override]] for more info on this feature.&lt;br /&gt;
&lt;br /&gt;
You can make a definition with n-id equal to zero (and thus no ids that follow). &amp;amp;nbsp;This creates a generic feature-specific definition not associated with any particular item. &amp;amp;nbsp;At the moment, this is used for generic callbacks, but might be extended to other functions eventually.&lt;br /&gt;
&lt;br /&gt;
=== ids ===&lt;br /&gt;
&lt;br /&gt;
Feature IDs to use this action 3 for. All IDs are counted from the first of their class, i.e. the first road vehicle has 00, as does the first plane, the first ship, and the first train vehicle.&lt;br /&gt;
&lt;br /&gt;
=== num-cid ===&lt;br /&gt;
&lt;br /&gt;
Number of &amp;quot;cargo&amp;quot; type definitions that follow.&lt;br /&gt;
&lt;br /&gt;
=== cargo-type ===&lt;br /&gt;
&lt;br /&gt;
Roadtypes re-uses in its Action3 the &#039;cargo&#039;-type definition in order to assign the type of graphics defined by the associated set-ID:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&#039;Cargo&#039; Type&lt;br /&gt;
!Sprite Type&lt;br /&gt;
!#Sprites&lt;br /&gt;
!Useage&lt;br /&gt;
|-&lt;br /&gt;
|00&lt;br /&gt;
|Icons and cursors&lt;br /&gt;
|12&lt;br /&gt;
|4 road directions, autoroad, depot, tunnel and convert road. First all icons, then all cursors.&lt;br /&gt;
|-&lt;br /&gt;
|01&lt;br /&gt;
|Track overlays&amp;lt;ref name=leftout&amp;gt;Either all or none of these sprites should be provided.&amp;lt;/ref&amp;gt;&lt;br /&gt;
|19&lt;br /&gt;
|11 roadbit combinations, 4 slopes, and 4 dead ends. These sprites are optional for roadtypes.&lt;br /&gt;
|-&lt;br /&gt;
|02&lt;br /&gt;
|Underlay&amp;lt;ref name=leftout /&amp;gt;&lt;br /&gt;
|19&lt;br /&gt;
|11 roadbit combinations, 4 slopes, and 4 dead ends. These sprites are required.&lt;br /&gt;
|-&lt;br /&gt;
|03&lt;br /&gt;
|Tunnel&amp;lt;ref name=leftout /&amp;gt;&lt;br /&gt;
|4&lt;br /&gt;
|{{ottd|13|}} 1 sprite for each direction. Sprite is overlay for road in existing tunnel graphics. The original ground sprite is drawn, then the overlay, then possibly a RV and the original tunnel head is drawn over the top. This keeps compatibility with different landscape types. Sprite order: SW, NW, NE, SE.&lt;br /&gt;
|-&lt;br /&gt;
|04&lt;br /&gt;
|Catenary front&lt;br /&gt;
|29&lt;br /&gt;
|11 roadbit combinations, 4 slopes, 4 dead ends, 4 tunnels, 2 bridge middle, 4 bridge ramps&lt;br /&gt;
|-&lt;br /&gt;
|05&lt;br /&gt;
|Catenary back&lt;br /&gt;
|29&lt;br /&gt;
|11 roadbit combinations, 4 slopes, 4 dead ends, 4 tunnels (unused), 2 bridge middle, 4 bridge ramps&lt;br /&gt;
|-&lt;br /&gt;
|06&lt;br /&gt;
|Bridge surfaces&amp;lt;ref name=leftout /&amp;gt;&lt;br /&gt;
|6&lt;br /&gt;
|2 bridge middle, 4 bridge ramps&lt;br /&gt;
|-&lt;br /&gt;
|08&lt;br /&gt;
|Depots&lt;br /&gt;
|6&lt;br /&gt;
|Follows the original layout for depot sprites. If not present, the default depot sprites (depending on catenary flag) plus track overlay are drawn. If present, the depot sprites are expected to include track overlay graphics.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
|-&lt;br /&gt;
|0A&lt;br /&gt;
|Tunnel portal overlay&amp;lt;ref name=tunneloverlay&amp;gt;Above &#039;all or none&#039; sprites must be supplied, if these sprites are to be used.&amp;lt;/ref&amp;gt;&lt;br /&gt;
|4&lt;br /&gt;
|{{ottd|1.2|r23952}} 1 sprite for each direction, order is SW, NW, NE, SE.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|0A&lt;br /&gt;
|Road stops&lt;br /&gt;
|4&lt;br /&gt;
|Overlays for drive-in road stops&lt;br /&gt;
|-&lt;br /&gt;
|0B&lt;br /&gt;
|One-way road arrows&lt;br /&gt;
|18&lt;br /&gt;
|{{ottd|13|}} Overlays for one-way roads: repeat (arrow facing SW, arrow NE, impassable NE-SW, arrow NW, arrow SE, impassable NW-SE) for flat, N corner raised, S corner raised.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== GUI sprites (00) ====&lt;br /&gt;
&lt;br /&gt;
[[File:Nrt_gui.png]]&lt;br /&gt;
&lt;br /&gt;
==== Road underlay (02) ====&lt;br /&gt;
&lt;br /&gt;
[[File:Nrt_underlay.png]]&lt;br /&gt;
&lt;br /&gt;
==== Catenary front (04)====&lt;br /&gt;
&lt;br /&gt;
[[File:Nrt_catenary_front.png]]&lt;br /&gt;
&lt;br /&gt;
==== Catenary back (05) ====&lt;br /&gt;
&lt;br /&gt;
[[File:Nrt_catenary_back.png]]&lt;br /&gt;
&lt;br /&gt;
==== Depot sprites (08) ====&lt;br /&gt;
&lt;br /&gt;
[[File:Nrt_depot.png]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&lt;br /&gt;
|-&lt;br /&gt;
!Sprite Number&lt;br /&gt;
!Usage&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
| &amp;amp;nbsp; &amp;amp;nbsp;NE wall for SE-entry depot.&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
| &amp;amp;nbsp; &amp;amp;nbsp;Depot building for SE-entry depot.&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
| &amp;amp;nbsp; &amp;amp;nbsp;NW wall for SW-entry depot.&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
| &amp;amp;nbsp; &amp;amp;nbsp;Depot building for SW-entry depot.&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
| &amp;amp;nbsp; &amp;amp;nbsp;Depot building for NE-entry depot.&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
| &amp;amp;nbsp; &amp;amp;nbsp;Depot building for NW-entry depot.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Bridge surfaces (06) ====&lt;br /&gt;
&lt;br /&gt;
[[File:Nrt_bridge.png]]&lt;br /&gt;
&lt;br /&gt;
==== Road stops (0A) ====&lt;br /&gt;
&lt;br /&gt;
[[File:Nrt_drivein.png]]&lt;br /&gt;
&lt;br /&gt;
==== One-way road arrows (0B) ====&lt;br /&gt;
&lt;br /&gt;
Since {{ottd|13|}}.&lt;br /&gt;
[[File:Nrt_oneway.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
==== Tunnel portal overlay (0A) ====&lt;br /&gt;
&lt;br /&gt;
If this &#039;cargo&#039; type is defined, tunnels for this railtype will be drawn differently.&lt;br /&gt;
&lt;br /&gt;
First, a grass underlay base sprite is drawn, then the sprite returned from type 03. Next, train sprites if applicable and then a grass overlay and finally the sprite from this type (0A). The grass sprites are defined in the base set and do not contain any parts of the tracks or portal, so these have to be fully provided by the railtype sprites.&lt;br /&gt;
&lt;br /&gt;
Illustration: [[File:RailtypeTunnelExample.png]]&lt;br /&gt;
&lt;br /&gt;
Variable 10 can be used to distinguish between several requested tunnel variations:&lt;br /&gt;
{| |-&lt;br /&gt;
! Lowest byte of [[GlobalVariables#Extra_callback_info_.2810_.2F_-.29_and_.2818_.2F_-.29|variable 10]] !! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| 00 || This is a plain portal without any extra features (like tracks above).&lt;br /&gt;
|-&lt;br /&gt;
| all other values || reserved for future extensions (e.g. basetunnels).&lt;br /&gt;
|}&lt;br /&gt;
The other bytes of variable 10 are reserved, and must be masked.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== default set-ID ===&lt;br /&gt;
&lt;br /&gt;
The default set-ID would be used for roadtype callbacks. However, since there are currently no callbacks for roadtypes it should always result in a [[Action2/Only_Callback_Failure|callback-failure]].&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;/div&gt;</summary>
		<author><name>Michi cc</name></author>
	</entry>
	<entry>
		<id>https://newgrf-specs.tt-wiki.net/index.php?title=ReadingPatchVariables&amp;diff=4174</id>
		<title>ReadingPatchVariables</title>
		<link rel="alternate" type="text/html" href="https://newgrf-specs.tt-wiki.net/index.php?title=ReadingPatchVariables&amp;diff=4174"/>
		<updated>2022-03-13T13:20:59Z</updated>

		<summary type="html">&lt;p&gt;Michi cc: /* variable */ 0x17: Map seed&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Since TTDPatch 2.0.1 alpha 48, it has been possible to use action D to read various special Patch variables. These are usually switch values, but there are also a few other useful values.&lt;br /&gt;
&lt;br /&gt;
== Syntax ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;Sprite-number&amp;gt; * &amp;lt;Length&amp;gt; 0D &amp;lt;target&amp;gt; &amp;lt;operation&amp;gt; &amp;lt;variable&amp;gt; FE FF FF 00 00&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
!Element!![[GRFActionsDetailed|Size]]!!Description&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|0D||B||Defines action 0D&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;target&amp;gt;||B||Target parameter&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;operation&amp;gt;||B||As for ActionD, but only assignment is valid.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;variable&amp;gt;||B||Patch variable number to read. See below.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|FE||B||Defines a special variable access&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|FF FF 00 00||D||Indicates that a patch variable is being read&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== variable ==&lt;br /&gt;
&lt;br /&gt;
The following patch variables are defined:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
!variable!!Switch!!Version!!Value&lt;br /&gt;
|-&lt;br /&gt;
|00||miscmods/-Yo||{{ottdp|no|2.5}}||Bit switch&lt;br /&gt;
|-&lt;br /&gt;
|01||experimentalfeatures/-XF||{{ottdp|no|2.5}}||Bit switch&lt;br /&gt;
|-&lt;br /&gt;
|02||morevehicles/-x||{{ottdp|no|2.5}}||Vehicle array multiplier&lt;br /&gt;
|-&lt;br /&gt;
|03||mountains and curves/-mc||{{ottdp|no|2.5}}||Two bytes with four sets of two bits&lt;br /&gt;
|-&lt;br /&gt;
|04||planecrashcontrol/-Xc||{{ottdp|no|2.5}}||Bit switch&lt;br /&gt;
|-&lt;br /&gt;
|05||autorenew/-Xa||{{ottdp|no|2.5}}||Signed value&lt;br /&gt;
|-&lt;br /&gt;
|06||multihead/-M||{{ottdp|no|2.5}}||Speed increase, in percent&lt;br /&gt;
|-&lt;br /&gt;
|07||disasters/-XD||{{ottdp|no|2.5}}||Bit switch&lt;br /&gt;
|-&lt;br /&gt;
|08||unifiedmaglev/-XM||{{ottdp|no|2.5}}||Unified maglev mode&lt;br /&gt;
|-&lt;br /&gt;
|09||bridgespeedlimits/-XX||{{ottdp|no|2.5}}||Speed fraction, in percent&lt;br /&gt;
|-&lt;br /&gt;
|0A||---||{{ottdp|no|2.5}}||TTD Language, see the &amp;quot;new scheme&amp;quot; for [[Action4#language id|action 4]]&lt;br /&gt;
|-&lt;br /&gt;
|0B||startyear/-XY||{{ottdp|0.6|2.5}}||Year-1920&lt;br /&gt;
|-&lt;br /&gt;
|0C||morebuildoptions/-YB||{{ottdp|no|2.5}}||Bit switch&lt;br /&gt;
|-&lt;br /&gt;
|0D||moresteam/-YM||{{ottdp|no|2.5}}||value=LF (two hex digits), L=length, F=frequency&lt;br /&gt;
|-&lt;br /&gt;
|0E||freighttrains/-Yf||{{ottdp|0.6|2.5}}||weight factor&lt;br /&gt;
|-&lt;br /&gt;
|0F||wagonspeedlimits/-YL||{{ottdp|0.6|2.5}}||Speed increase for empty wagons&lt;br /&gt;
|-&lt;br /&gt;
|10||planespeed/-YP||{{ottdp|0.6|2.5}}||speed factor&lt;br /&gt;
|-&lt;br /&gt;
|11||dual company colors||{{ottdp|0.6|2.5|ttdprev=r1404}}||2CC colormap base sprite&lt;br /&gt;
|-&lt;br /&gt;
|12||miscmods2/-Zm||{{ottdp|no|2.6|ttdprev=r1738}}||Bit switch&lt;br /&gt;
|-&lt;br /&gt;
|13||map size information||{{ottdp|0.6|2.6|ottdrev=r11961|ttdprev=r1817}}||Format = -MABXYSS&lt;br /&gt;
{| |-&lt;br /&gt;
| M  || the type of map&lt;br /&gt;
* bit 0 set: squared map. Clear : rectangular map&lt;br /&gt;
* bit 1 set: Y is the bigger edge(bit 0 is clear).Clear : X is the bigger edge.&lt;br /&gt;
|-&lt;br /&gt;
|A  || minimum edge(log2) of the map&lt;br /&gt;
|-&lt;br /&gt;
|B  || maximum edge(log2) of the map&lt;br /&gt;
|-&lt;br /&gt;
|XY || edges(log2) of each side of the map.&lt;br /&gt;
|-&lt;br /&gt;
|SS || combination of both X and Y, thus giving the size(log2) of the map&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
All map sizes will be substracted by 6, as to keep the size 64 the smallest one, thus zero based&lt;br /&gt;
|-&lt;br /&gt;
|14||maximum height level||{{ottdp|1.2|no|ottdrev=r23158}}||Maximal possible height level of a tile. {{ottdp|1.5|no|ottdrev=r27010}}Any value between 1 and 255. In earlier versions fixed at 15.&lt;br /&gt;
|-&lt;br /&gt;
|15||extra foundations||{{ottdp|1.4|no|ottdrev=r25230}}||Extra foundation sprites as set via [[Action5|Action 5 type 06]]. This sprite block does only contain the extra foundations from Action 5, it does not contain the default foundations of Action A sprites 990 to 1003.&lt;br /&gt;
|-&lt;br /&gt;
|16||coast sprites||{{ottdp|1.4|no|ottdrev=r25230}}||All coast sprites in the order of the 16 sprites version of [[Action5#In_NewGRFs|Action 5 type 0D]]. Note that, it does not matter in which way the sprites were originally defined (whether via Action 5 with 10 or 16 sprites, or via Action A), the sprite block returned by this variable has always all sprites in the same order.&lt;br /&gt;
|-&lt;br /&gt;
|17||map seed||{{ottdp|13.0|no|ottdrev=g08a5478a9}}||Map generation seed.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If experimentalfeatures, miscmods, or miscmods2 are off, the corresponding value will be zero. For all other switches, the value is unspecified if the switch is off, so [[TTDPatchFlags|action 7 variable 85]] should be checked first.&lt;/div&gt;</summary>
		<author><name>Michi cc</name></author>
	</entry>
	<entry>
		<id>https://newgrf-specs.tt-wiki.net/index.php?title=Action0/Vehicles/Trains&amp;diff=4141</id>
		<title>Action0/Vehicles/Trains</title>
		<link rel="alternate" type="text/html" href="https://newgrf-specs.tt-wiki.net/index.php?title=Action0/Vehicles/Trains&amp;diff=4141"/>
		<updated>2021-08-15T09:39:25Z</updated>

		<summary type="html">&lt;p&gt;Michi cc: Prop 2E&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right; padding-left:12px; background:none;&amp;quot;&amp;gt;{{NFONavVehicles}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
Defining properties of train vehicles.&lt;br /&gt;
&lt;br /&gt;
= Properties =&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Number!![[GRFActionsDetailed|Size]]!!Version!!Description!!Available for articulated parts&lt;br /&gt;
|-&lt;br /&gt;
|05||B||{{ottdp|0.6|2.0}}||Track type (see below)||should be same as front&lt;br /&gt;
|-&lt;br /&gt;
|08||B||{{ottdp|0.6|2.0}}||AI special flag: set to 1 if engine is &#039;optimized&#039; for passenger service (AI won&#039;t use it for other cargo), 0 otherwise||no&lt;br /&gt;
|-&lt;br /&gt;
|09||W||{{ottdp|0.6|2.0}}||Speed in mph*1.6 (see below)||no&lt;br /&gt;
|-&lt;br /&gt;
|0B||W||{{ottdp|0.6|2.0}}||Power (0 for wagons)||should be zero&lt;br /&gt;
|-&lt;br /&gt;
|0D||B||{{ottdp|0.6|2.0}}||Running cost factor (0 for wagons)||should be zero&lt;br /&gt;
|-&lt;br /&gt;
|0E||D||{{ottdp|0.6|2.0}}||Running cost base, see below||should be zero&lt;br /&gt;
|-&lt;br /&gt;
|12||B||{{ottdp|0.6|2.0}}||Sprite ID (FD for new graphics)||yes&lt;br /&gt;
|-&lt;br /&gt;
|13||B||{{ottdp|0.6|2.0}}||Dual-headed flag; 1 if dual-headed engine, 0 otherwise||should be zero also for front&lt;br /&gt;
|-&lt;br /&gt;
|14||B||{{ottdp|0.6|2.0}}||Cargo capacity||yes&lt;br /&gt;
|-&lt;br /&gt;
|15||B||{{ottdp|0.6|2.0}}||Cargo type, see [[CargoTypes]]&amp;lt;br/&amp;gt;&lt;br /&gt;
{{grfTill|7}} For GRF version 7 and below: Type B &#039;cargo slot&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
{{grfFrom|8}} For GRF version 8 and above: Type A &#039;(translated) cargo bit&#039;&lt;br /&gt;
||yes&lt;br /&gt;
|-&lt;br /&gt;
|16||B||{{ottdp|0.6|2.0}}||Weight in tons||should be zero&lt;br /&gt;
|-&lt;br /&gt;
|17||B||{{ottdp|0.6|2.0}}||Cost factor||should be zero&lt;br /&gt;
|-&lt;br /&gt;
|18||B||{{ottdp|&amp;amp;lt;0.7|2.0}}&amp;lt;ref&amp;gt;This property is not used by OpenTTDs NoAI API.&amp;lt;/ref&amp;gt;||Engine rank for the AI (AI selects the highest-rank engine of those it can buy)||no&lt;br /&gt;
|-&lt;br /&gt;
|19||B||{{ottdp|0.6|2.0}} {{grfFrom|1}}||Engine traction type (see below)||no&lt;br /&gt;
|-&lt;br /&gt;
|1A||B/B*&amp;lt;ref&amp;gt;{{ottdp|0.7|no|ottdrev=r13831}} Since OpenTTD r13831 this is an extended byte.&amp;lt;/ref&amp;gt;||{{ottdp|0.6|2.0}} {{grfFrom|1}}||Not a property, but an action: sort the purchase list.||no&lt;br /&gt;
|-&lt;br /&gt;
|1B||W||{{ottdp|0.6|2.5}} {{grfFrom|6}}||Power added by each wagon connected to this engine, see below||should be zero&lt;br /&gt;
|-&lt;br /&gt;
|1C||B||{{ottdp|0.6|2.5}} {{grfFrom|6}}||Refit cost, using 50% of the [[BaseCosts|purchase price cost base]]||yes&lt;br /&gt;
|-&lt;br /&gt;
|1D||D||{{ottdp|0.6|2.5}} {{grfFrom|6}}||Bit mask of cargo types available for refitting, see column 2 (bit value) in [[CargoTypes]]||yes&lt;br /&gt;
|-&lt;br /&gt;
|1E||B||{{ottdp|0.6|2.5}} {{grfFrom|6}}||Callback flags bit mask, see below||yes&lt;br /&gt;
|-&lt;br /&gt;
|1F||B||{{ottdp|0.6|2.5|ttdprev=alpha 19}}||Coefficient of tractive effort||should be zero&lt;br /&gt;
|-&lt;br /&gt;
|20||B||{{ottdp|1.1|2.5|ttdprev=alpha 27}}||Coefficient of air drag||should be zero&lt;br /&gt;
|-&lt;br /&gt;
|21||B||{{ottdp|0.6|2.0}} {{grfFrom|2}}||Make vehicle shorter by this amount, see below||yes&lt;br /&gt;
|-&lt;br /&gt;
|22||B||{{ottdp|0.6|2.5}} {{grfFrom|6}}||Set visual effect type (steam/smoke/sparks) as well as position, see below||yes&lt;br /&gt;
|-&lt;br /&gt;
|23||B||{{ottdp|0.6|2.5}} {{grfFrom|6}}||Set how much weight is added by making wagons powered (i.e. weight of engine), see below||should be zero&lt;br /&gt;
|-&lt;br /&gt;
|24||B||{{ottdp|0.6|2.5|ttdprev=alpha 44}}||High byte of vehicle weight, weight will be prop.24*256+prop.16||should be zero&lt;br /&gt;
|-&lt;br /&gt;
|25||B||{{ottdp|0.6|2.5|ttdprev=alpha 44}}||User-defined bit mask to set when checking veh. var. 42||yes&lt;br /&gt;
|-&lt;br /&gt;
|26||B||{{ottdp|0.6|2.5|ttdprev=alpha 44}}||Retire vehicle early, this many years before the end of phase 2 (see [[Action0General]])||no&lt;br /&gt;
|-&lt;br /&gt;
|27||B||{{ottdp|0.6|2.5|ttdprev=alpha 58}}||Miscellaneous flags||partly&lt;br /&gt;
|-&lt;br /&gt;
|28||W||{{ottdp|0.6|2.5|ttdprev=alpha 58}}||Refittable cargo classes||yes&lt;br /&gt;
|-&lt;br /&gt;
|29||W||{{ottdp|0.6|2.5|ttdprev=alpha 58}}||Non-refittable cargo classes||yes&lt;br /&gt;
|-&lt;br /&gt;
|2A||D||{{ottdp|0.6|2.5|ottdrev=r7191|ttdprev=r1210}}||Long format introduction date||no&lt;br /&gt;
|-&lt;br /&gt;
|2B||W||{{ottdp|1.2|no|ottdrev=r22713}}||Custom cargo ageing period||yes&lt;br /&gt;
|-&lt;br /&gt;
|2C||B n*B||{{ottdp|1.2|no|ottdrev=r23291}}||List of always refittable cargo types||yes&lt;br /&gt;
|-&lt;br /&gt;
|2D||B n*B||{{ottdp|1.2|no|ottdrev=r23291}}||List of never refittable cargo types||yes&lt;br /&gt;
|-&lt;br /&gt;
|2E||W||{{ottdp|12|no|ottdrev=g2183fd4dab}}||Maximum curve speed modifier||yes&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Description =&lt;br /&gt;
&lt;br /&gt;
== Track type (05) ==&lt;br /&gt;
Set track type of vehicle: 0 = rail, 1 = monorail, 2 = maglev. For setting the appropriate traction type, see [[Action0Trains#Engine traction type 19|prop19]].&lt;br /&gt;
&lt;br /&gt;
{{ottdp|1.0|no}} In OpenTTD, if a [[Action0Railtypes|rail type]] translation table is loaded, this property is an index into the table instead.&lt;br /&gt;
&lt;br /&gt;
== Speed (09) ==&lt;br /&gt;
&lt;br /&gt;
Train speed is in units of mph*1.6, i.e. approximately km/h.&lt;br /&gt;
&lt;br /&gt;
For wagons, this value is only used if the &amp;quot;wagonspeedlimit&amp;quot; switch is on, and it limits the speed of the train to that of the lowest wagon speed. &amp;amp;nbsp;This limit is ignored for wagons with a livery override for the current train, so that train sets always get their max speed from the engine&#039;s max speed.&lt;br /&gt;
&lt;br /&gt;
For wagons, a value of 0 means &amp;quot;default&amp;quot; (which depends on cargo type and date of introduction), and FFFF means no limit.&lt;br /&gt;
&lt;br /&gt;
== Power (0B) ==&lt;br /&gt;
&lt;br /&gt;
The power of the engine, in HP.&lt;br /&gt;
&lt;br /&gt;
A value of 0 means that the vehicle will be a wagon, otherwise it will be an engine.&lt;br /&gt;
&lt;br /&gt;
== Running cost base (0E) and factor (0D) ==&lt;br /&gt;
&lt;br /&gt;
TTD calculates all costs by multiplying a 32-bit [[BaseCosts|base amount]] with an 8-bit factor. &amp;amp;nbsp;The base amount is changed according to inflation, whereas the factor remains constant.&lt;br /&gt;
&lt;br /&gt;
For the running costs of train vehicles, the following base amounts are available depending on the vehicle type (the value here is a pointer into TTD&#039;s memory where the actual amount is stored):&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Type!!Value!!in little-endian notation&lt;br /&gt;
|-&lt;br /&gt;
|Steam engines||4C30||30 4C 00 00&lt;br /&gt;
|-&lt;br /&gt;
|Diesel engines||4C36||36 4C 00 00&lt;br /&gt;
|-&lt;br /&gt;
|Electric engines||4C3C||3C 4C 00 00&lt;br /&gt;
|-&lt;br /&gt;
|Wagons||0||00 00 00 00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Theoretically, you could use pointers to other base amounts available in TTD, but these are the numbers TTD uses for train vehicles.&lt;br /&gt;
&lt;br /&gt;
The following are some real values for maintenance costs depending on the setting of the above two factors. &amp;amp;nbsp;This value is correct for medium difficulty, but increases and decreases for hard and easy difficulties respectively. &amp;amp;nbsp;These are the costs of a new game starting in 1921, because they obviously increase with inflation over time (unless noinflation is turned on).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Running cost base 4C30 (steam)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Running cost factor!!Maintenance cost&lt;br /&gt;
|-&lt;br /&gt;
|01||$ 42&lt;br /&gt;
|-&lt;br /&gt;
|10||$ 700&lt;br /&gt;
|-&lt;br /&gt;
|20||$ 1.400&lt;br /&gt;
|-&lt;br /&gt;
|80||$ 5.600&lt;br /&gt;
|-&lt;br /&gt;
|A0||$ 7.000&lt;br /&gt;
|-&lt;br /&gt;
|FF||$ 11.112&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Running cost base 4C36 (diesel)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Running cost factor!!Maintenance cost&lt;br /&gt;
|-&lt;br /&gt;
|01||$ 40&lt;br /&gt;
|-&lt;br /&gt;
|10||$ 650&lt;br /&gt;
|-&lt;br /&gt;
|20||$ 1.300&lt;br /&gt;
|-&lt;br /&gt;
|80||$ 5.200&lt;br /&gt;
|-&lt;br /&gt;
|A0||$ 6.500&lt;br /&gt;
|-&lt;br /&gt;
|FF||$ 10.318&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Running cost base 4C3C (electric)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Running cost factor!!Maintenance cost&lt;br /&gt;
|-&lt;br /&gt;
|01||$ 36&lt;br /&gt;
|-&lt;br /&gt;
|10||$ 600&lt;br /&gt;
|-&lt;br /&gt;
|20||$ 1.200&lt;br /&gt;
|-&lt;br /&gt;
|80||$ 4.800&lt;br /&gt;
|-&lt;br /&gt;
|A0||$ 6.000&lt;br /&gt;
|-&lt;br /&gt;
|FF||$ 9.524&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Cost factor (17) ==&lt;br /&gt;
&lt;br /&gt;
The cost factor is a bit-coded value which determines how expensive an engine is. There is no distinction between steam, diesel or electric engines, they all use the same cost factor. The table below gives you some values to use for finding the right price for your engines.&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Cost factor!!Price&lt;br /&gt;
|-&lt;br /&gt;
|01||$ 3.124&lt;br /&gt;
|-&lt;br /&gt;
|10||$ 50.000&lt;br /&gt;
|-&lt;br /&gt;
|20||$ 100.000&lt;br /&gt;
|-&lt;br /&gt;
|80||$ 400.000&lt;br /&gt;
|-&lt;br /&gt;
|A0||$ 500.000&lt;br /&gt;
|-&lt;br /&gt;
|FF||$ 796.874&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Engine traction type (19) ==&lt;br /&gt;
&lt;br /&gt;
This sets the traction type of a train engine, i.e. whether it is powered by steam, diesel, electric, monorail or maglev technology. &amp;amp;nbsp;It also sets the corresponding sound effect of the engine, and if property 22 is not set, the visual effect as well.&lt;br /&gt;
&lt;br /&gt;
The following ranges are available (and it does not matter which value you pick):&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Values!!Traction type&lt;br /&gt;
|-&lt;br /&gt;
|00..07||Steam&lt;br /&gt;
|-&lt;br /&gt;
|08..27||Diesel&lt;br /&gt;
|-&lt;br /&gt;
|28..31||Electric&lt;br /&gt;
|-&lt;br /&gt;
|32..37||Monorail&lt;br /&gt;
|-&lt;br /&gt;
|38..41||Maglev&lt;br /&gt;
|}&lt;br /&gt;
Default value is 00, i.e. steam. For setting the appropriate track type, see [[Action0Trains#Track type 05|prop05]].&lt;br /&gt;
&lt;br /&gt;
{{ottdp|1.1|no}} In OpenTTD, if a [[Action0Railtypes|rail type]] translation table is loaded, setting this property does NOT alter the track type.&lt;br /&gt;
&lt;br /&gt;
== Sort vehicle list (1A) ==&lt;br /&gt;
&lt;br /&gt;
This is not a property as such, but an action. &amp;amp;nbsp;It forces TTDPatch to shuffle the vehicle this &amp;quot;property&amp;quot; is being set for in front of the vehicle with the given value of the property. &amp;amp;nbsp;The order of this list is only used in the train purchase window.&lt;br /&gt;
&lt;br /&gt;
For example, setting prop. 1A for vehicle 09 to a value of 07 would lead to the following internal list: ... 05 06 09 07 08 0A 0B ...&lt;br /&gt;
&lt;br /&gt;
This property can not simply be overwritten, because the list is already shuffled when trying to do so.&lt;br /&gt;
&lt;br /&gt;
{{ottdp|no|2.0}} It is possible to reset the list to its original order with a special action 0 that has num-info set to 0, and only sets property 1A for trains:&lt;br /&gt;
&amp;lt;pre&amp;gt;00 00 01 00 00 1A&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resetting the list should however only be done by sets that contain replacements for all train vehicles.&lt;br /&gt;
&lt;br /&gt;
{{ottdp|0.7|no|ottdrev=r13831}} This property is an extended byte in OpenTTD since r13831!&lt;br /&gt;
&lt;br /&gt;
== Powered train wagons (1B and 23, see also 22) ==&lt;br /&gt;
&lt;br /&gt;
Normally, train wagons are unpowered in TTD, and if you set property 0B to a non-zero value, they become engines instead. &amp;amp;nbsp;Therefore, to model real-life trains where wagons have power, a different mechanism is needed.&lt;br /&gt;
To make train wagons powered, you set property 1B of the &#039;&#039;&#039;engine&#039;&#039;&#039; instead of the wagon. This determines how much power each wagon adds to the train when attached to this engine. This only applies to wagons with a [[Action3|graphics override]] for this engine as well. &amp;amp;nbsp;This means that for example passenger wagons (with an override) will add power, but coal wagons (with no override) will not.&lt;br /&gt;
&lt;br /&gt;
In addition to adding power, these wagons are also heavier by the amount set in property 23.&lt;br /&gt;
&lt;br /&gt;
== Refit cost (1C) ==&lt;br /&gt;
&lt;br /&gt;
Refit cost, using 50% of the [[BaseCosts|purchase price cost base]]. This property can be overridden by callback 15E.&lt;br /&gt;
&lt;br /&gt;
{{ottdp|1.2|no|ottdrev=r23087}} If the refit cost factor is set to zero and bit 4 of the miscellaneous flags (27) is set, auto-refitting is allowed.&lt;br /&gt;
&lt;br /&gt;
== Callbacks (1E) ==&lt;br /&gt;
For trains, the following [[callbacks]] have to be enabled by setting the corresponding bit in property 1E (certain other, not as frequently used callbacks are available without setting a bit here):&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Bit!!Value!!Variable 0C value!!Callback&lt;br /&gt;
|-&lt;br /&gt;
|0||1||10||Powered wagons and visual effect&lt;br /&gt;
|-&lt;br /&gt;
|1||2||11||Wagon length&lt;br /&gt;
|-&lt;br /&gt;
|2||4||12||Load amount&lt;br /&gt;
|-&lt;br /&gt;
|3||8||15||Set refitted capacity&lt;br /&gt;
|-&lt;br /&gt;
|4||10||16||Build articulated engines&lt;br /&gt;
|-&lt;br /&gt;
|5||20||19||show a suffix after the cargo type name&lt;br /&gt;
|-&lt;br /&gt;
|6||40||2D||Select color mapping for vehicle&lt;br /&gt;
|-&lt;br /&gt;
|7||80||33||Sound effect callbacks&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Bit is the bit you have to set, you do this by adding all the values for all the bits. Variable 0C value is what variable 0C will be set to, for checking it in the VarAction2 for callbacks.&lt;br /&gt;
&lt;br /&gt;
These callbacks do not need a bit to activate them, they are always active and will be used if defined in the action 3/action 2 chain.&lt;br /&gt;
{| |-&lt;br /&gt;
!Variable 0C value!!Callback&lt;br /&gt;
|-&lt;br /&gt;
|1D||Can wagon be attached&lt;br /&gt;
|-&lt;br /&gt;
|23||Additional text in purchase screen&lt;br /&gt;
|-&lt;br /&gt;
|31||Start/stop check&lt;br /&gt;
|-&lt;br /&gt;
|32||32-day callback&lt;br /&gt;
|-&lt;br /&gt;
|36||Change Vehicle Properties&lt;br /&gt;
|-&lt;br /&gt;
|15E||Refit cost&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Coefficient of tractive effort (1F) ==&lt;br /&gt;
&lt;br /&gt;
This cofficient sets what fraction of the vehicle weight is equal to the maximum tractive effort. &amp;amp;nbsp;This includes the effect of having some unpowered axles, as well as the coefficient of friction that is available.&lt;br /&gt;
&lt;br /&gt;
Theoretically, this value should be calculated by taking the ratio of adhesive weight W&amp;lt;sub&amp;gt;adh&amp;lt;/sub&amp;gt; (i.e. the vehicle weight that rests on powered axles) times the coefficient of friction µ between the wheels and the rails to the total vehicle weight W, times 255, and convert to hex:&lt;br /&gt;
&lt;br /&gt;
prop. 1F = HEX ((W&amp;lt;sub&amp;gt;adh&amp;lt;/sub&amp;gt; * µ / W) * 255)&lt;br /&gt;
&lt;br /&gt;
With prop. 1F having a value of FF, the tractive effort is equal to the vehicle weight, for 80, it is half, and so on. If not set, a default of 4C is used, for a fraction of 0.30, corresponding to Wadh=W and a coefficient of friction of 0.30, which is the value used by the patch before TTDPatch 2.0.1 alpha 19.&lt;br /&gt;
&lt;br /&gt;
Sometimes you know the real-life tractive effort instead of adhesive weight and coefficient of friction. To help calculating prop. 1F in that case, here&#039;s a small example using the NS 1600 (Electric) with a mass of 84 tons and real-life tractive effort (TE&amp;lt;sub&amp;gt;real&amp;lt;/sub&amp;gt;) of 259 kN. To quickly find the value for property 1F you fill in the following formula:&lt;br /&gt;
&lt;br /&gt;
prop. 1F = HEX ((TE&amp;lt;sub&amp;gt;real&amp;lt;/sub&amp;gt; / (Mass * g) * 255)&lt;br /&gt;
&lt;br /&gt;
That may look confusing but you already know all variables:&lt;br /&gt;
&lt;br /&gt;
prop. 1F = HEX ((259 / (84 * 9.8) * 255)&lt;br /&gt;
&lt;br /&gt;
prop. 1F = HEX (0.3146 *255) = HEX(80.229)&lt;br /&gt;
&lt;br /&gt;
HEX calculations only work with figures in the natural domain: each figure has to be a positive and round figure. Therefore the value you convert to HEX isn&#039;t 80.229 but 80:&lt;br /&gt;
&lt;br /&gt;
HEX 80 = 50&lt;br /&gt;
&lt;br /&gt;
Property 1F for the NS 1600 (Electric) would then be: 1F 50.&lt;br /&gt;
&lt;br /&gt;
== Coefficient of air drag (20) ==&lt;br /&gt;
&lt;br /&gt;
This property sets the air drag coefficient c2 used for the realistic acceleration model, from 01 (no airdrag) to FF (most air drag) in arbitrary units. 00 means to use the default value that depends on the top speed (to simulate the fact that high-speed engines are more streamlined).&lt;br /&gt;
&lt;br /&gt;
The default values are the following:&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!top speed (mph/1.6)!!	&amp;lt;16!!	16!!	24!!	32!!	48!!	64!!	96!!	128!!	192!!	256!!	...&lt;br /&gt;
|-&lt;br /&gt;
|c2||	192||	128||	96||	64||	48||	32||	24||	16||	12||	8&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For higher speeds, the series is continued in the same manner.&lt;br /&gt;
&lt;br /&gt;
Air drag in Newtons will then be c2*v*v with v in m/s, although it is probably futile to attempt to make c2 a realistic number due to the lack of TTD&#039;s consistent scaling. If a train doesn&#039;t reach its historical top speed, you might try setting the value of prop. 20 one or two steps lower than the default above, otherwise it&#039;s probably a good idea to leave it at the default.&lt;br /&gt;
&lt;br /&gt;
== Shorter train vehicles (21) ==&lt;br /&gt;
&lt;br /&gt;
This property reduces the length of train vehicles, in units of 1/8th (12.5%). The value 00 means the vehicle has the full length, 01 means shorter by 1/8th (12.5%), up to 05=shorter by 5/8ths (62.5%). Larger numbers will not work properly&lt;br /&gt;
&amp;lt;ref&amp;gt;{{ottdp|1.0|no|ottdrev=r15793}} This restriction has been removed in OpenTTD r15793. Every vehicle can have a length between 1/8 and 8/8 independent of its position in the chain.&amp;lt;/ref&amp;gt;,&lt;br /&gt;
except at the end of the train&lt;br /&gt;
&amp;lt;ref&amp;gt;{{ottdp|&amp;amp;lt;1.0|}} This means that it is only safe to use values larger than 05 in the length callback making sure that they are only returned for the very last vehicle in the train. Otherwise the train will occasionally fall apart, with the wagons after the shortest one stopping to move.&amp;lt;/ref&amp;gt;. The vehicle length is set whenever it leaves a depot. This property does not work for the first vehicle in a train (i.e. the engine).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Visual effects and wagon power (22) ==&lt;br /&gt;
&lt;br /&gt;
By default, the visual effect of train engines is determined by the traction type (property 19). With this option you can change the type of effect as well as the position of it relative to the vehicle. (Note: for TTDPatch and OpenTTD up to r21229 only the positioning of steam actually works. For {{ottdp|1.1|no|ottdrev=r21230}} positioning diesel smoke and electric sparks works as well) The position of the effect provides a range from 0 to F that is added to the type of the effect.&lt;br /&gt;
&lt;br /&gt;
Position 0 corresponds to a point half a vehicle length ahead of the vehicle, 4 is the front of the vehicle, 8 the middle, C the end and F is a half length behind the vehicle. Intermediate values are in-between.&lt;br /&gt;
&lt;br /&gt;
Additionally, this property can be used to disable powered wagons of this type, although that is usually done with [[Callbacks#Visual_effect_and_wagon_power_.2810.29| callback 10]] instead (which has the same meaning as prop. 22, but is more flexible).&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Range	!!Effect type&lt;br /&gt;
|-&lt;br /&gt;
|00..0F||Use the default effect type, but reposition it. For engines this is defined via property 19, wagons have no default effect.&lt;br /&gt;
|-&lt;br /&gt;
|10..1F||Steam puffs&lt;br /&gt;
|-&lt;br /&gt;
|20..2F||Diesel fumes&lt;br /&gt;
|-&lt;br /&gt;
|30..3F||Electric sparks&lt;br /&gt;
|-&lt;br /&gt;
|40||Disable visual effect&lt;br /&gt;
|-&lt;br /&gt;
|41..7F||{{ottdp|1.5|no|ottdrev=r26747}} Create effects with [[Callbacks#Advanced_effect_creation_.28160.29|Callback 160]] using one of these spawning models:&lt;br /&gt;
* 41 Steam: Gradually less effects when approaching max speed&lt;br /&gt;
* 42 Diesel: Effect proportional to acceleration, no effect when idling at top speed&lt;br /&gt;
* 43 Electric: Random effect, gradually less likely when approaching max spped&lt;br /&gt;
* 44-7F Reserved&lt;br /&gt;
|-&lt;br /&gt;
|80+00..80+7F||Same as 00..7F above, but disable wagon power&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For example, 28 would make the wagon powered and emit diesel fumes, but 80+28 = A8 would only emit the diesel fumes without adding power.&lt;br /&gt;
&lt;br /&gt;
== Miscellaneous flags (27) ==&lt;br /&gt;
&lt;br /&gt;
This is a bit mask, with the following bits:&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Bit!!	Value!!	Version !!Meaning&lt;br /&gt;
|-&lt;br /&gt;
|0||	1||{{ottdp|0.6|2.5}}||	Vehicle tilts in curves, and thus gets speed bonus &amp;lt;ref&amp;gt;The tilting speed bonus only applies if all vehicles in the train have this bit set. In TTDPatch it requires the &amp;quot;curves&amp;quot; switch to be on. For realistic curves, it gives the train two free curving pieces with no speed decrease, and for other settings, it increases the curves setting by one (0-&amp;gt;1, 1-&amp;gt;2, 2-&amp;gt;2). In OpenTTD, the curve speed limit increases by 20% if &#039;realistic&#039; acceleration is enabled, else there is no effect.&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|1||	2||{{ottdp|0.6|2.5}}||	Uses two company colors&lt;br /&gt;
|-&lt;br /&gt;
|2||	4||{{ottdp|0.6|2.5}}||	Vehicle is a multiple unit (DMU/EMU), for colour selection&lt;br /&gt;
|-&lt;br /&gt;
|3||	8||{{ottdp|1.1|no|ottdrev=r21966}}|| Vehicle can be flipped around in the depot &amp;lt;ref&amp;gt;When you enable flipping of a vehicle in a depot you must make sure that the graphics are correctly aligned when flipped as well. Especially in the case of shortened vehicles. For multiheaded or articulated vehicles the flipping bit has no effect; these vehicles are never to be flipped around in the depot.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Prior to {{ottd|1.1|r21966}} all non-multiheaded/non-articulated vehicles would be able to flip around in the depot. As such this disables a &amp;quot;feature&amp;quot; in OpenTTD, but often it makes no sense to flip vehicles around (symetric vehicles) or the graphics are wrong (most shortened vehicles), and thus only enabling this when the NewGRF developer says it is possible is better.&lt;br /&gt;
&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|4||   10||{{ottdp|1.2|no|ottdrev=r23087}}|| Auto-refitting is enabled for refits where callback 15E allows it or prop 1C specifies zero cost&lt;br /&gt;
|-&lt;br /&gt;
|5||   20||{{ottdp|1.2|no|ottdrev=r23861}}|| Use cargo multiplier for default cargo (and load amount). See page about [[VehicleRefitting#Misc._vehicle_flag_5_.27use_of_capacity_multiplier_for_default_cargo.27_set|vehicle refitting]].&lt;br /&gt;
|-&lt;br /&gt;
|6||   40||{{ottdp|1.3|no|ottdrev=r24124}}|| Disable breakdown smoke effect.&lt;br /&gt;
|-&lt;br /&gt;
|7||   80||{{ottdp|1.7|no|ottdrev=r27668}}|| [[Action2/Vehicles#Composing_vehicles_from_multiple_sprites|Compose vehicle from multiple sprites.]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Cargo classes (28, 29) ==&lt;br /&gt;
&lt;br /&gt;
To make vehicle sets more compatible with future new cargo definitions, these two properties allow vehicles to define what type of cargo they should be refittable to. A wagon will be refittable to all cargo types that match any of the classes set in prop. 28 except for the ones that match any of the classes set in prop. 29. In addition, afterwards those cargo types listed in prop. 1D will be toggled. In terms of logic, it is&lt;br /&gt;
&lt;br /&gt;
Refit list = (cargos from prop. 28 AND NOT cargos from prop. 29) XOR cargos from prop. 1D&lt;br /&gt;
&lt;br /&gt;
This means, if a cargo type is in the list because it matches prop. 28 but not prop 29, having the respective bit set in prop. 1D will disable it again. Conversely, if the cargo type is not in the list, the bit in prop. 1D will add it. This way, if props. 28/29 are unset, prop. 1D will retain the original meaning, but it is still able to selectively add or remove certain cargo types even if props. 28/29 are used.&lt;br /&gt;
&lt;br /&gt;
As a consequence, you have both full control over the cargo types that you know of (using prop. 1D), and those you don&#039;t know of yet (using props. 28/29). Leave the bits for cargos that you don&#039;t know of unset in prop. 1D, and set/clear the bits for known cargos to add/remove them from the list as appropriate.&lt;br /&gt;
&lt;br /&gt;
{{ottd|1.2|r23291}} It is recommended to use properties 2C and 2D instead of property 1D, as property 1D behaves badly if the cargo classes of a cargo are ever changed.&lt;br /&gt;
&lt;br /&gt;
The class list is a bit mask. See the action0 cargos page for bits and classes defined so far.&lt;br /&gt;
&lt;br /&gt;
Take a look at [[Action0Cargos#Cargo classes 16|Action0 for cargos]] for the classes defined so far.&lt;br /&gt;
&lt;br /&gt;
Note that cargo types may belong to several classes. This is the reason for making two properties, an additive and a subtractive one, because this way a vehicle can be specified to be refittable to, for example, all express cargo that does not require refrigeration (i.e., from the default cargos, no food).&lt;br /&gt;
For the cargo types added in this way, the vehicle will probably have no specific graphics (in [[Action3|action 3]]) to show the cargo load. &amp;amp;nbsp;In this case, the default will be used, which should therefore be sufficiently generic-looking if possible. However, using [[VariationalAction2/Vehicles#Vehicle cargo info 47|vehicle variable 47]] you can at least select the graphics most appropriate for the cargo type&#039;s class.&lt;br /&gt;
About the interaction with other properties take a look at the summary page about [[VehicleRefitting|vehicle refitting]].&lt;br /&gt;
&lt;br /&gt;
Disclaimer: there is no guarantee that classes won&#039;t vary over time or between sets. The classes of a cargo may change between different versions of a specific industry/cargo newgrf, or different classes may be set for the same cargo label by different industry/cargo newgrfs. Feel free to use classes in your set for conveniently refitting to cargos, but if you - the vehicle author - care about specific cargos being transported in specific vehicles, use label based refits (changing labels without a very good reason is considered to be bad practice).&lt;br /&gt;
&lt;br /&gt;
== Long format introduction date (2A) ==&lt;br /&gt;
&lt;br /&gt;
Set the vehicle introduction date, in days since the year 0. This takes account of leap years; dividable by 4, but not 100 unless 400. A start date of 1920-01-01 is obtained with a value of 701265 (51 B3 0A 00). This property must be set after property 00 to take effect.&lt;br /&gt;
&lt;br /&gt;
{{ottdp|no|}} In TTDPatch, dates after 2044 will be limited to 2044.&lt;br /&gt;
&lt;br /&gt;
== Custom cargo ageing period (2B) ==&lt;br /&gt;
&lt;br /&gt;
This property allows to modify the period in ticks after which cargo carried by the vehicle is aged. By default, cargo is aged every 185 ticks. A value of 0 disables ageing of cargo. This property can be modified via [[Callbacks#Change_vehicle_properties_.2836.29|callback 36]].&lt;br /&gt;
&lt;br /&gt;
Changing this value from the default does not automatically make the vehicle earn more or less.  Predicting the effect is complicated, as it depends on many things, including: vehicle speed, route length, route delays, transfer credits, the payment curve set by the cargo, and whether the cargo is already aged from a previous transfer when the vehicle loads it.  &lt;br /&gt;
&lt;br /&gt;
== List of always refittable cargo types (2C, 2D) ==&lt;br /&gt;
&lt;br /&gt;
These two properties allows to unconditionally include or exclude cargo types for refittability independent of any of the other refit properties or the cargo classes. If you specify a cargo type that is not available, the cargo type will be silently ignored.&lt;br /&gt;
&lt;br /&gt;
The format for both properties is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;2C/2D &amp;amp;lt;nvar&amp;amp;gt; (&amp;amp;lt;Index into cargo type table&amp;amp;gt;){n}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That is you give the number of cargos in a single byte followed by a list of that length of indexes into the cargo translation table ([[CargoTypes|Type A]]).&lt;br /&gt;
&lt;br /&gt;
== Maximum curve speed modifier (2E) ==&lt;br /&gt;
&lt;br /&gt;
This property allows to give vehicles a maximum curve speed modifier. The given value is treated as a signed word with 8 fractional bits. This property can be modified via [[Callbacks#Change_vehicle_properties_.2836.29|callback 36]].&lt;br /&gt;
&lt;br /&gt;
The modifier is applied after the normal curve speed calculation is done using the formula max_curve_speed * (1 + prop 2E). This means that the default property value of 0 is equivalent to no change. While values less than -1.0 are technically possible, the resulting vehicle curve speed is clamped at 2 mph-ish to make sure vehicles don&#039;t become permanently stuck.&lt;br /&gt;
&lt;br /&gt;
If different vehicles in a train have different curve speed modifiers, the lowest value wins.&lt;br /&gt;
&lt;br /&gt;
= Example =&lt;br /&gt;
&lt;br /&gt;
Below is an example of what a real Action 0 pseudo-sprite could look like for a train engine.&lt;br /&gt;
&lt;br /&gt;
(A basic version)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;10 * 14 &amp;amp;nbsp;00 00 03 01 02 09 C0 00 0B D8 0E 12 FD&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!&#039;&#039;&#039;Bytes&#039;&#039;&#039;!!&#039;&#039;&#039;Meaning&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|10||&amp;amp;lt;Sprite-number&amp;amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|14||&amp;amp;lt;Length&amp;amp;gt;: of the action in bytes; start counting at 0 (&amp;amp;lt;action&amp;amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
|00||&amp;amp;lt;action&amp;amp;gt;: sets this pseudo-sprite to function as action 0&lt;br /&gt;
|-&lt;br /&gt;
|00||&amp;amp;lt;Feature&amp;amp;gt;: In this case Train&lt;br /&gt;
|-&lt;br /&gt;
|03||&amp;amp;lt;Num-props&amp;amp;gt;: 3 Properties to change&lt;br /&gt;
|-&lt;br /&gt;
|01||&amp;amp;lt;Num-info&amp;amp;gt;: 1 vehicle ID to make changes to&lt;br /&gt;
|-&lt;br /&gt;
|02||&amp;amp;lt;ids...&amp;amp;gt;: vehcile ID (02 - Ploddyphut Choo-Choo)&lt;br /&gt;
|-&lt;br /&gt;
|||&#039;&#039;&#039;Properties&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|09||&amp;amp;lt;Speed&amp;amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|C0 00||&amp;amp;lt;Value&amp;amp;gt;: Value for Speed (192 Km/h)&lt;br /&gt;
|-&lt;br /&gt;
|0B||&amp;amp;lt;Power&amp;amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|D8 0E||&amp;amp;lt;value&amp;amp;gt;: value for Power (3800 HP)&lt;br /&gt;
|-&lt;br /&gt;
|12||&amp;amp;lt;Sprite ID&amp;amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|FD||&amp;amp;lt;value&amp;amp;gt;: FD for new graphics&lt;br /&gt;
|}&lt;br /&gt;
Since nfo version 7, so-called [[GRFActionsDetailed#Byte order|&amp;quot;escape sequences&amp;quot;]] have been introduced in an attempt to offer a more human-readable form.&lt;br /&gt;
&lt;br /&gt;
Below is the same example as above, with escape sequences being used:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;-1 * 0 00 00 \b3 01 \b*2 // \b&amp;amp;lt;number of props to change&amp;amp;gt; \b*&amp;amp;lt;vehicle ID&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp;09 \w192 // value for speed (192 Km/h)&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp;0B \w3800 // value for power (3800 hp)&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp;12 FD // use new graphics&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Michi cc</name></author>
	</entry>
	<entry>
		<id>https://newgrf-specs.tt-wiki.net/index.php?title=TTDPatchFlags&amp;diff=4071</id>
		<title>TTDPatchFlags</title>
		<link rel="alternate" type="text/html" href="https://newgrf-specs.tt-wiki.net/index.php?title=TTDPatchFlags&amp;diff=4071"/>
		<updated>2020-12-27T11:08:07Z</updated>

		<summary type="html">&lt;p&gt;Michi cc: OTTD: economy.inflation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In the table below you find all the TTDPatch flags that belong to &amp;lt;param-num&amp;gt; = 85 in Action 7 and Action 9.&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!&#039;&#039;&#039;Bit&#039;&#039;&#039;!!&#039;&#039;&#039;Switch (bit set = switch on)&#039;&#039;&#039;!!&#039;&#039;&#039;Correspondence in OpenTTD&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|0C||keepsmallairport||station.never_expire_airports&lt;br /&gt;
|-&lt;br /&gt;
|0D||newairports||1&lt;br /&gt;
|-&lt;br /&gt;
|0E||largestations||1&lt;br /&gt;
|-&lt;br /&gt;
|0F||longbridges||construction.longbridges&lt;br /&gt;
|-&lt;br /&gt;
|10||loadtime||0&lt;br /&gt;
|-&lt;br /&gt;
|12||presignals||1&lt;br /&gt;
|-&lt;br /&gt;
|13||extpresignals||1&lt;br /&gt;
|-&lt;br /&gt;
|16||enginespersist||vehicles.never_expire_vehicles&lt;br /&gt;
|-&lt;br /&gt;
|1B||multihead||1&lt;br /&gt;
|-&lt;br /&gt;
|1D||lowmemory||1&lt;br /&gt;
|-&lt;br /&gt;
|1E||generalfixes||1&lt;br /&gt;
|-&lt;br /&gt;
|27||moreairports||economy.station_noise_level&lt;br /&gt;
|-&lt;br /&gt;
|28||mammothtrains||1&lt;br /&gt;
|-&lt;br /&gt;
|29||trainrefit||1&lt;br /&gt;
|-&lt;br /&gt;
|2B||subsidiaries||0&lt;br /&gt;
|-&lt;br /&gt;
|2C||gradualloading||order.gradual_loading&lt;br /&gt;
|-&lt;br /&gt;
|32||(Set to bit 0 of unifiedmaglev mode)||1 (n/a)&lt;br /&gt;
|-&lt;br /&gt;
|33||(Set to bit 1 of unifiedmaglev mode)||1 (n/a)&lt;br /&gt;
|-&lt;br /&gt;
|34||bridgespeedlimits||1&lt;br /&gt;
|-&lt;br /&gt;
|36||eternalgame||1&lt;br /&gt;
|-&lt;br /&gt;
|37||newtrains||1&lt;br /&gt;
|-&lt;br /&gt;
|38||newrvs||1&lt;br /&gt;
|-&lt;br /&gt;
|39||newships||1&lt;br /&gt;
|-&lt;br /&gt;
|3A||newplanes||1&lt;br /&gt;
|-&lt;br /&gt;
|3B||signalsontrafficside||construction.signal_side&lt;br /&gt;
|-&lt;br /&gt;
|3C||electrifiedrailway||vehicle.disable_elrails&lt;br /&gt;
|-&lt;br /&gt;
|41 &amp;lt;ref&amp;gt;loadallgraphics is obsolete (and its bit unused) since revision 401. The next official versions were the 5/Jun/2006 nightly (402) and TTDPatch 2.5 beta 6 (472)&amp;lt;/ref&amp;gt;||loadallgraphics||1&lt;br /&gt;
|-&lt;br /&gt;
|43||semaphores||1&lt;br /&gt;
|-&lt;br /&gt;
|4A||newobjects (since r2364)||1&lt;br /&gt;
|-&lt;br /&gt;
|4B||enhancegui||0&lt;br /&gt;
|-&lt;br /&gt;
|4C||newagerating||0&lt;br /&gt;
|-&lt;br /&gt;
|4D||buildonslopes||construction.build_on_slopes&lt;br /&gt;
|-&lt;br /&gt;
|4E||fullloadany||1&lt;br /&gt;
|-&lt;br /&gt;
|4F||planespeed||1&lt;br /&gt;
|-&lt;br /&gt;
|50 &amp;lt;ref&amp;gt;moreindustriesperclimate is obsolete (and its bit unused) since TTDPatch 2.5 beta 2.&amp;lt;/ref&amp;gt;||moreindustriesperclimate||0&lt;br /&gt;
|-&lt;br /&gt;
|51||moretoylandfeatures||0&lt;br /&gt;
|-&lt;br /&gt;
|52||newstations||1&lt;br /&gt;
|-&lt;br /&gt;
|53||tracktypecostdiff||1&lt;br /&gt;
|-&lt;br /&gt;
|54||manualconvert||1&lt;br /&gt;
|-&lt;br /&gt;
|55||buildoncoasts||construction.build_on_slopes&lt;br /&gt;
|-&lt;br /&gt;
|56||canals||1&lt;br /&gt;
|-&lt;br /&gt;
|57||newstartyear||1&lt;br /&gt;
|-&lt;br /&gt;
|58||freighttrains||vehicle.freight_trains &amp;gt; 1&lt;br /&gt;
|-&lt;br /&gt;
|59||newhouses||1&lt;br /&gt;
|-&lt;br /&gt;
|5A||newbridges||1&lt;br /&gt;
|-&lt;br /&gt;
|5B||newtownnames||1&lt;br /&gt;
|-&lt;br /&gt;
|5C||moreanimation||1&lt;br /&gt;
|-&lt;br /&gt;
|5D||wagonspeedlimits||vehicle.wagon_speed_limits&lt;br /&gt;
|-&lt;br /&gt;
|5E||newshistory||1&lt;br /&gt;
|-&lt;br /&gt;
|5F||custombridgeheads||0&lt;br /&gt;
|-&lt;br /&gt;
|60||newcargodistribution||0&lt;br /&gt;
|-&lt;br /&gt;
|61||windowsnap||1&lt;br /&gt;
|-&lt;br /&gt;
|62||townbuildnoroads||not (economy.allow_town_roads or _generating_world)&lt;br /&gt;
|-&lt;br /&gt;
|63||pathbasedsignalling||1&lt;br /&gt;
|-&lt;br /&gt;
|64||aichoosechances||0&lt;br /&gt;
|-&lt;br /&gt;
|65||resolutionwidth||1&lt;br /&gt;
|-&lt;br /&gt;
|66||resolutionheight||1&lt;br /&gt;
|-&lt;br /&gt;
|67||newindustries||1&lt;br /&gt;
|-&lt;br /&gt;
|68||fifoloading||order.improved_load&lt;br /&gt;
|-&lt;br /&gt;
|69||townroadbranchprob||0&lt;br /&gt;
|-&lt;br /&gt;
|6A||tempsnowline||0&lt;br /&gt;
|-&lt;br /&gt;
|6B||newcargos||1&lt;br /&gt;
|-&lt;br /&gt;
|6C||enhancemultiplayer||1&lt;br /&gt;
|-&lt;br /&gt;
|6D||onewayroads||1&lt;br /&gt;
|-&lt;br /&gt;
|6E||irregularstations||1&lt;br /&gt;
|-&lt;br /&gt;
|6F||morestatistics||1&lt;br /&gt;
|-&lt;br /&gt;
|70||newsounds||1&lt;br /&gt;
|-&lt;br /&gt;
|71||autoreplace||1&lt;br /&gt;
|-&lt;br /&gt;
|72||autoslope||1&lt;br /&gt;
|-&lt;br /&gt;
|73||followvehicle||0&lt;br /&gt;
|-&lt;br /&gt;
|74||trams||1&lt;br /&gt;
|-&lt;br /&gt;
|75||enhancetunnels||0&lt;br /&gt;
|-&lt;br /&gt;
|76||shortrvs||1&lt;br /&gt;
|-&lt;br /&gt;
|77||articulatedrvs||1&lt;br /&gt;
|-&lt;br /&gt;
|78||dynamicengines||{{ottd|0.7|r12924}} vehicle.dynamic_engines&lt;br /&gt;
|-&lt;br /&gt;
|7E||variablerunningcosts (since r1421)||1&lt;br /&gt;
|-&lt;br /&gt;
|7F||set if any switches are on||1&lt;br /&gt;
|-&lt;br /&gt;
|80||-||{{ottd|1.9|g4b0b4e064}} 1 (larger persistent storage)&lt;br /&gt;
|-&lt;br /&gt;
|81||-||{{ottd|1.11|g1478fa93b}} economy.inflation&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Michi cc</name></author>
	</entry>
	<entry>
		<id>https://newgrf-specs.tt-wiki.net/index.php?title=Action0/Vehicles/Planes&amp;diff=4070</id>
		<title>Action0/Vehicles/Planes</title>
		<link rel="alternate" type="text/html" href="https://newgrf-specs.tt-wiki.net/index.php?title=Action0/Vehicles/Planes&amp;diff=4070"/>
		<updated>2020-12-06T19:35:58Z</updated>

		<summary type="html">&lt;p&gt;Michi cc: /* Sound effect (12) */ PR #8347&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right; padding-left:12px; background:none;&amp;quot;&amp;gt;{{NFONavVehicles}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Defining properties of planes.&lt;br /&gt;
&lt;br /&gt;
== Properties ==&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Number!![[GRFActionsDetailed|Size]]!!Version!!Description&lt;br /&gt;
|-&lt;br /&gt;
|08||B||{{ottdp|0.6|2.0}}||Sprite (FF for new graphics)&lt;br /&gt;
|-&lt;br /&gt;
|09||B||{{ottdp|0.6|2.0}}||Is helicopter? 2=no, 0=yes&lt;br /&gt;
|-&lt;br /&gt;
|0A||B||{{ottdp|0.6|2.0}}||Is large? 0=no, 1=yes (i.e. can&#039;t safely land on small airports)&lt;br /&gt;
|-&lt;br /&gt;
|0B||B||{{ottdp|0.6|2.0}}||Cost factor&lt;br /&gt;
|-&lt;br /&gt;
|0C||B||{{ottdp|0.6|2.0}}||Speed in units of 8 mph, that is: property = (speed in mph) / 8&lt;br /&gt;
|-&lt;br /&gt;
|0D||B||{{ottdp|0.6|2.0}}||Acceleration in units of 3/8 mph/tick, that is: property = (acceleration in mph/tick) * 8/3 &amp;lt;ref&amp;gt;{{ottd|&amp;amp;lt;1.3.1}} In OpenTTD before r25115 the units for acceleration were messed up. The unit used was about 1 mph/tick, so aircraft accelerated more than twice as fast. Also values bigger than 19 failed.&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|0E||B||{{ottdp|0.6|2.0}}||Running cost factor&lt;br /&gt;
|-&lt;br /&gt;
|0F||W||{{ottdp|0.6|2.0}}||Primary cargo capacity (passenger or refitted cargo)&lt;br /&gt;
|-&lt;br /&gt;
|11||B||{{ottdp|0.6|2.0}}||Secondary cargo capacity (mail)&lt;br /&gt;
|-&lt;br /&gt;
|12||B||{{ottdp|0.6|2.0}}||Sound effect&lt;br /&gt;
|-&lt;br /&gt;
|13||D||{{ottdp|0.6|2.5}} {{grfFrom|6}}||Bit mask of cargo types available for refitting, see column 2 (Bit Value) in [[CargoTypes]]&lt;br /&gt;
|-&lt;br /&gt;
|14||B||{{ottdp|0.6|2.5}} {{grfFrom|6}}||Callback flags bit mask, see below&lt;br /&gt;
|-&lt;br /&gt;
|15||B||{{ottdp|0.6|2.5|ttdprev=alpha 30}}||Refit cost, using 1/32 of the default refit cost base&lt;br /&gt;
|-&lt;br /&gt;
|16||B||{{ottdp|0.6|2.5|ttdprev=alpha 44}}||Retire vehicle early, this many years before the end of phase 2 (see [[Action0General]])&lt;br /&gt;
|-&lt;br /&gt;
|17||B||{{ottdp|0.6|2.5|ttdprev=alpha 58}}||Miscellaneous vehicle flags&lt;br /&gt;
|-&lt;br /&gt;
|18||W||{{ottdp|0.6|2.5|ttdprev=alpha 58}}||Refittable cargo classes, see [[Action0Trains#Cargo classes 28 29|train prop. 28]]&lt;br /&gt;
|-&lt;br /&gt;
|19||W||{{ottdp|0.6|2.5|ttdprev=alpha 58}}||Non-refittable cargo classes, see [[Action0Trains#Cargo classes 28 29|train prop. 29]]&lt;br /&gt;
|-&lt;br /&gt;
|1A||D||{{ottdp|0.6|2.5|ttdprev=r1210|ottdrev=r7191}}||Long format introduction date&lt;br /&gt;
|-&lt;br /&gt;
|1B||B*||{{ottdp|0.7|no|ottdrev=r13831}}||Sort the purchase list&lt;br /&gt;
|-&lt;br /&gt;
|1C||W||{{ottdp|1.2|no|ottdrev=r22713}}||Custom cargo ageing period&lt;br /&gt;
|-&lt;br /&gt;
|1D||B n*B||{{ottdp|1.2|no|ottdrev=r23291}}||List of always refittable cargo types, see [[Action0/Vehicles/Trains#List_of_always_refittable_cargo_types_.282C.2C_2D.29|train property 2C]]&lt;br /&gt;
|-&lt;br /&gt;
|1E||B n*B||{{ottdp|1.2|no|ottdrev=r23291}}||List of never refittable cargo types, see [[Action0/Vehicles/Trains#List_of_always_refittable_cargo_types_.282C.2C_2D.29|train property 2D]]&lt;br /&gt;
|-&lt;br /&gt;
|1F||W||{{ottdp|1.2|no|ottdrev=r23504}}||Aircraft range in tiles. Distance is euclidean, a value of 0 means range is unlimited&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Descriptions ==&lt;br /&gt;
&lt;br /&gt;
=== Primary (0F) and secondary (11) cargo capacity ===&lt;br /&gt;
Aircraft can transport up to two cargo types.&lt;br /&gt;
The first (primary) cargo type can be changed when refitting the aircraft.&lt;br /&gt;
&lt;br /&gt;
The secondary cargo type is always mail, and is only present when the primary cargo type is part of the [[Action0/Cargos#CargoClasses_.2816.29|passenger cargo class]].&lt;br /&gt;
&lt;br /&gt;
See also the page about [[VehicleRefitting|vehicle refitting]].&lt;br /&gt;
&lt;br /&gt;
=== Sound effect (12) ===&lt;br /&gt;
&lt;br /&gt;
The following sound effects are used by planes (note, the setting is ignored for helicopters):&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Number!!Sound&lt;br /&gt;
|-&lt;br /&gt;
|06||Propeller sound 1&lt;br /&gt;
|-&lt;br /&gt;
|07||Jet sound 1&lt;br /&gt;
|-&lt;br /&gt;
|3B||Supersonic&lt;br /&gt;
|-&lt;br /&gt;
|3D||Jet sound 2&lt;br /&gt;
|-&lt;br /&gt;
|45||Propeller sound 2&lt;br /&gt;
|-&lt;br /&gt;
|46||Jet sound 3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{ottdp|1.6|no|ottdrev=r27507}} Since OpenTTD r27507 also custom sound effects from Action11 are allowed here.&lt;br /&gt;
&lt;br /&gt;
{{ottdp|1.11|no|ottdrev=6198a47}} Since OpenTTD g6198a47 this prop can be used to to set custom Action11 sound effects for helicopers. Default sound effects are ignored as before.&lt;br /&gt;
&lt;br /&gt;
=== Callbacks (14) ===&lt;br /&gt;
For planes, the following [[callbacks]] have to be enabled by setting the corresponding bit in property 14 (certain other, not as frequently used callbacks are available without setting a bit here)::&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Bit!!Value!!Variable 0C value!!Callback&lt;br /&gt;
|-&lt;br /&gt;
|2||4||12||Load amount&lt;br /&gt;
|-&lt;br /&gt;
|3||8||15||Set refitted capacity&lt;br /&gt;
|-&lt;br /&gt;
|5||20||19||show a suffix after the cargo type name&lt;br /&gt;
|-&lt;br /&gt;
|6||40||2D||Select color mapping for vehicle&lt;br /&gt;
|-&lt;br /&gt;
|7||80||33||Sound effect callbacks&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Bit is the bit you have to set, you do this by adding all the values for all the bits. Variable 0C value is what variable 0C will be set to, for checking it in the VarAction2 for callbacks.&lt;br /&gt;
&lt;br /&gt;
=== Refit cost (15) ===&lt;br /&gt;
&lt;br /&gt;
Refit cost, using 1/32 of the default refit cost base. This property can be overridden by callback 15E.&lt;br /&gt;
&lt;br /&gt;
{{ottdp|1.2|no|ottdrev=r23087}} If the refit cost factor is set to zero and bit 4 of the miscellaneous flags (17) is set, auto-refitting is allowed.&lt;br /&gt;
&lt;br /&gt;
=== Miscellaneous flags (17) ===&lt;br /&gt;
&lt;br /&gt;
This is a bit mask, with the following bits:&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Bit!!Value!!Meaning&lt;br /&gt;
|-&lt;br /&gt;
|0||1||reserved, do not use&lt;br /&gt;
|-&lt;br /&gt;
|1||2||Uses two company colors&lt;br /&gt;
|-&lt;br /&gt;
|2||4||reserved, do not use&lt;br /&gt;
|-&lt;br /&gt;
|3||8||reserved, do not use&lt;br /&gt;
|-&lt;br /&gt;
|4||10||{{ottdp|1.2|no|ottdrev=r23087}} Auto-refitting is enabled for refits where callback 15E allows it or prop 15 specifies zero cost.&lt;br /&gt;
|-&lt;br /&gt;
|5||20||{{ottdp|1.2|no|ottdrev=r23861}} Use cargo multiplier for default cargo. See page about [[VehicleRefitting#Misc._vehicle_flag_5_.27use_of_capacity_multiplier_for_default_cargo.27_set|vehicle refitting]].&lt;br /&gt;
|-&lt;br /&gt;
|6||40||{{ottdp|1.3|no|ottdrev=r24124}} Disable breakdown smoke effect.&lt;br /&gt;
|-&lt;br /&gt;
|7||   80||{{ottdp|1.7|no|ottdrev=r27668}} [[Action2/Vehicles#Composing_vehicles_from_multiple_sprites|Compose vehicle from multiple sprites.]]&lt;br /&gt;
Note: This also applies to the rotor sprite, if custom rotor sprites are used.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Long format introduction date (1A) ===&lt;br /&gt;
&lt;br /&gt;
Set the vehicle introduction date, in days since the year 0. This takes account of leap years; dividable by 4, but not 100 unless 400. A start date of 1920-01-01 is obtained with a value of 701265 (51 B3 0A 00). This property must be set after property 00 to take effect.&lt;br /&gt;
&lt;br /&gt;
{{ottdp|no|}} In TTDPatch, dates after 2044 will be limited to 2044.&lt;br /&gt;
&lt;br /&gt;
=== Sort vehicle list (1B) ===&lt;br /&gt;
See sort vehicle list for [[Action0Trains#Sort vehicle list 1A|trains]] for details.&lt;br /&gt;
&lt;br /&gt;
=== Custom cargo ageing period (1C) ===&lt;br /&gt;
See custom cargo ageing period for [[Action0Trains#Custom_cargo_ageing_period_.282B.29|trains]] for details.&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
To be written&lt;/div&gt;</summary>
		<author><name>Michi cc</name></author>
	</entry>
	<entry>
		<id>https://newgrf-specs.tt-wiki.net/index.php?title=Action0/Industries&amp;diff=4045</id>
		<title>Action0/Industries</title>
		<link rel="alternate" type="text/html" href="https://newgrf-specs.tt-wiki.net/index.php?title=Action0/Industries&amp;diff=4045"/>
		<updated>2020-06-28T15:13:39Z</updated>

		<summary type="html">&lt;p&gt;Michi cc: /* Special industry flags to define special behavior (1A) */ INDUSTRYBEH_WATER_NO_CLAMP_PROD&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
Industries work similarly to town buildings. The limit for the number of industry types is:&lt;br /&gt;
* {{ttdp|2.5}} TTDPatch: 37&lt;br /&gt;
* {{ottd|&amp;amp;lt;1.6}} OpenTTD &amp;lt; 1.6: 64&lt;br /&gt;
* {{ottd|1.6}} OpenTTD ⩾ 1.6: 128 per NewGRF, 240 in total&lt;br /&gt;
The non-overridden original types count towards the (total) limit. Industries don&#039;t have a climate mask; you should simply not define an industry if it would be for the wrong climate.&lt;br /&gt;
&lt;br /&gt;
Defining industries follows the same schema as houses do: to start using an ID, you first need to define it by setting property 8 for it. If you try to reference an ID (either via action0 or via action3) that isn&#039;t defined, your request is ignored, but not reported as an error, either. This means that if you want to conditionally define an ID, all you need to do is skipping the action0 that sets property8, and everything else gets skipped automatically.&lt;br /&gt;
&lt;br /&gt;
== Properties ==&lt;br /&gt;
{| |-&lt;br /&gt;
!Property !![[GRFActionsDetailed|Size]] !!Version !! Description&lt;br /&gt;
|-&lt;br /&gt;
|08||B||{{ottdp|0.6|2.5|ttdprev=alpha 45}}||Substitute industry type&lt;br /&gt;
|-&lt;br /&gt;
|09||B||{{ottdp|0.6|2.5|ttdprev=alpha 45}}||Industry type override&lt;br /&gt;
|-&lt;br /&gt;
|0A||V||{{ottdp|0.6|2.5|ttdprev=alpha 45}}||Set industry layout(s)&lt;br /&gt;
|-&lt;br /&gt;
|0B||B||{{ottdp|0.6|2.5|ttdprev=alpha 45}}||Industry production flags&lt;br /&gt;
|-&lt;br /&gt;
|0C||W||{{ottdp|0.6|2.5|ttdprev=alpha 45}}||Industry closure message&lt;br /&gt;
|-&lt;br /&gt;
|0D||W||{{ottdp|0.6|2.5|ttdprev=alpha 45}}||Production increase message&lt;br /&gt;
|-&lt;br /&gt;
|0E||W||{{ottdp|0.6|2.5|ttdprev=alpha 45}}||Production decrease message&lt;br /&gt;
|-&lt;br /&gt;
|0F||B||{{ottdp|0.6|2.5|ttdprev=alpha 45}}||Fund cost multiplier&lt;br /&gt;
|-&lt;br /&gt;
|10||W||{{ottdp|0.6|2.5|ttdprev=alpha 45}}||Production cargo types&lt;br /&gt;
|-&lt;br /&gt;
|11||D||{{ottdp|0.6|2.5|ttdprev=alpha 45}}||Acceptance cargo types&lt;br /&gt;
|-&lt;br /&gt;
|12,13||B||{{ottdp|0.6|2.5|ttdprev=alpha 45}}||Production multipliers&lt;br /&gt;
|-&lt;br /&gt;
|14||B||{{ottdp|0.6|2.5|ttdprev=alpha 45}}||Minimal amount of cargo distributed&lt;br /&gt;
|-&lt;br /&gt;
|15||V||{{ottdp|0.6|2.5|ttdprev=alpha 45}}||Random sound effects&lt;br /&gt;
|-&lt;br /&gt;
|16||3*B||{{ottdp|0.6|2.5|ttdprev=alpha 45}}||Conflicting industry types&lt;br /&gt;
|-&lt;br /&gt;
|17||B||{{ottdp|0.6|2.5|ttdprev=alpha 45}}||Probability in random game&lt;br /&gt;
|-&lt;br /&gt;
|18||B||{{ottdp|0.6|2.5|ttdprev=alpha 45}}||Probability during gameplay&lt;br /&gt;
|-&lt;br /&gt;
|19||B||{{ottdp|0.6|2.5|ttdprev=alpha 45}}||Map color&lt;br /&gt;
|-&lt;br /&gt;
|1A||D||{{ottdp|0.6|2.5|ttdprev=alpha 45}}||Special industry flags to define special behavior&lt;br /&gt;
|-&lt;br /&gt;
|1B||W||{{ottdp|0.6|2.5|ttdprev=alpha 45}}||New industry text ID&lt;br /&gt;
|-&lt;br /&gt;
|1C,1D,1E||D||{{ottdp|0.6|2.5|ttdprev=alpha 45}}||Input cargo multipliers for the three input cargo types&lt;br /&gt;
|-&lt;br /&gt;
|1F||W||{{ottdp|0.6|2.5|ttdprev=alpha 49}}||Industry name&lt;br /&gt;
|-&lt;br /&gt;
|20||D||{{ottdp|0.6|2.5|ttdprev=alpha 49}}||Prospecting success chance&lt;br /&gt;
|-&lt;br /&gt;
|21,22||B||{{ottdp|0.6|2.5|ttdprev=alpha 49}}||Callback flags&lt;br /&gt;
|-&lt;br /&gt;
|23||D||{{ottdp|0.6|2.5|ttdprev=alpha 73}}||Destruction cost multiplier&lt;br /&gt;
|-&lt;br /&gt;
|24||W||{{ottdp|0.6|2.6|ttdprev=r1782}}||Default text for nearby station&lt;br /&gt;
|-&lt;br /&gt;
|25||V||{{ottdp|1.9|no|ottdrev=e66cec8f}}||Production cargo type list&lt;br /&gt;
|-&lt;br /&gt;
|26||V||{{ottdp|1.9|no|ottdrev=e66cec8f}}||Acceptance cargo type list&lt;br /&gt;
|-&lt;br /&gt;
|27||V||{{ottdp|1.9|no|ottdrev=e66cec8f}}||Production multiplier list&lt;br /&gt;
|-&lt;br /&gt;
|28||V||{{ottdp|1.9|no|ottdrev=e66cec8f}}||Input cargo multiplier list&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
&lt;br /&gt;
=== Substitute industry type (08) ===&lt;br /&gt;
&lt;br /&gt;
Substitute industry type. The first assignment of this property copies all properties of the old type to this new type. Unlike for houses, the substitute type won&#039;t replace this new type if the definition becomes unavailable. List of [[IndustryDefaultProps#Climate_independent_properties |valid industry types]]&lt;br /&gt;
&lt;br /&gt;
There&#039;s a special use of this property beginning from alpha 70: if you set it to FFh, you can disable an original industry. In this case, the ID used must be the number of industry you want to disable. Disable requests are ignored for industries not present on the current climate and industries already overridden.&lt;br /&gt;
&lt;br /&gt;
{{ottdp|1.1|ottdrev=r20108}} AIs can use the substitute type to make decisions about station graphics and vehicle choice via [[Callbacks#AI_construction.2Fpurchase_selection_.2818.29| callback 18]].&lt;br /&gt;
&lt;br /&gt;
=== Industry type override (09) ===&lt;br /&gt;
&lt;br /&gt;
Industry type override. The overridden industry type won&#039;t be built in new random games. If the GRF file becomes active after the game was started, industries of the overridden new type won&#039;t be replaced by the new type. List of [[IndustryDefaultProps#Climate_independent_properties |valid industry types]]&lt;br /&gt;
&lt;br /&gt;
By overriding an old type, you&#039;re saying &amp;quot;my type is a substitute for that old type&amp;quot;. When GRFs ask information about the old type you&#039;ve overridden (via industry variable 67, for example), they will get information about your type instead. If you want to replace an old industry type with something completely different, use the &amp;quot;disable&amp;quot; function of property 08 (see above), then define the new industry type &#039;&#039;without&#039;&#039; using property 09. A rule of thumb: if your industry accepts or produces different cargoes than the original one, it should not override the original one.&lt;br /&gt;
&lt;br /&gt;
For example, if you want to replace the old coal mine with something that changes its coal production more dynamically, use property 09 to override industry 00. This way, other industries that want to be far from coal mines will stay far from your industry type too. If, however, you want to replace the coal mine with a potash mine, do not use property 09. This will ensure that other industries don&#039;t consider your type as a coal mine.&lt;br /&gt;
&lt;br /&gt;
Please note, however, that only one new industry can override an old type. If two new types want to override the same old type, the first one wins, and the second is added normally, ignoring its property 09.&lt;br /&gt;
&lt;br /&gt;
=== Set industry layout(s) (0A) ===&lt;br /&gt;
&lt;br /&gt;
Format of industry layout tables:&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Size!!Variable!!Meaning&lt;br /&gt;
|-&lt;br /&gt;
|B||numlayouts||The total number of layouts following&lt;br /&gt;
|-&lt;br /&gt;
|D||size||The size of the whole definition, excluding numlayouts and size&lt;br /&gt;
|-&lt;br /&gt;
|V||layouts||numlayout layouts, see format below&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Format of an industry layout:&lt;br /&gt;
&lt;br /&gt;
As a special case, if the first byte of a new industry layout is FEh, then only two bytes follow: the industry number and the layout number. The specified layout of the specified old industry type will be added to the layout list of the current industry. The following applies only if the first byte wasn&#039;t FEh&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Size!!Variable!!Meaning&lt;br /&gt;
|-&lt;br /&gt;
|B||xoffs&lt;br /&gt;
|-&lt;br /&gt;
|B||yoffs||Offsets counted from the northernmost tile of the industry, specifying the position of the current tile. Both are taken as signed integers, but cannot go negative except the special case mentioned below.&lt;br /&gt;
|-&lt;br /&gt;
|B||oldtile||An old tile type to be put on the given tile&lt;br /&gt;
|-&lt;br /&gt;
|||--or--||&lt;br /&gt;
|-&lt;br /&gt;
|0xFE,W||newtile||The ID of an already defined industry tile, padded with 0 to create a word value. This tile type will be placed on the given tile.&lt;br /&gt;
|-&lt;br /&gt;
|||--or--||&lt;br /&gt;
|-&lt;br /&gt;
|0xFF|| ||The given tile is checked for clearance, but nothing will be placed on it. Useful to ensure some free space around your industry. This is the only case where xoffs and yoffs can be negative.&lt;br /&gt;
&lt;br /&gt;
{{grfTill|7}} For GRF versions &amp;lt;= 7, if xoffs is negative, yoffs must be one lower than the wanted value.&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The layout consists of a list of the above tile definitions, terminated by two bytes: 0,80h&lt;br /&gt;
&lt;br /&gt;
=== Industry production type (0B) ===&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Value!!Meaning!!{{ottdp|0.6|no}} Effect on nearby stations!!Effect if [[Callbacks#Random_production_change_.2829.29|CB 29]] is disabled&lt;br /&gt;
|-&lt;br /&gt;
|00||consuming industry (e.g. power plant)||none||No production changes; no closure&lt;br /&gt;
|-&lt;br /&gt;
|01||extractive industry (e.g. coal mine)||suffix &#039;Mines&#039; if some non-liquid, non-passenger, non-mail cargo is produced||Standard primary-industry production change&lt;br /&gt;
|-&lt;br /&gt;
|02||organic industry (e.g. forest)||suffix &#039;Forest&#039; or &#039;Woods&#039; if wood is produced||Standard primary-industry production change&lt;br /&gt;
|-&lt;br /&gt;
|04||processing industry (e.g. steel mill)||none||Standard processing-industry closing-behaviour&lt;br /&gt;
|}&lt;br /&gt;
Other values are reserved; do not set any other values.&lt;br /&gt;
&lt;br /&gt;
=== Industry messages (0C..0E), new industry text ID (1B) ===&lt;br /&gt;
&lt;br /&gt;
The text associated with these textID will be shown if the industry announces closedown, if the industry increases production, if the industry decreases production or when the industry is generated during the game.&lt;br /&gt;
&lt;br /&gt;
For the generation message, by default, all industries have &amp;quot;New xxx is being constructed near yyy&amp;quot;, except forests, that have &amp;quot;New Forest is being planted near yyy&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Production cargo types (10) ===&lt;br /&gt;
&lt;br /&gt;
Two climate-dependent cargo numbers representing the cargo types the industry can produce. Unused slots can be filled with FFh. List of valid types: [[CargoTypes]]&lt;br /&gt;
&lt;br /&gt;
{{ottdp|1.9|no|ottdrev=e66cec8f}} This property only supports two output cargos. Use property 25 instead to output more cargo types.&lt;br /&gt;
&lt;br /&gt;
=== Acceptance cargo types (11) ===&lt;br /&gt;
&lt;br /&gt;
Three climate-dependent cargo numbers representing the cargo types the industry can accept, plus a fourth filler byte which is always ignored. Unused slots can be filled with FFh. List of valid types: [[CargoTypes]]&lt;br /&gt;
&lt;br /&gt;
These cargo types will only be really accepted if the according acceptance of the industry tiles adds up to 8/8 or more.&lt;br /&gt;
&lt;br /&gt;
From GRF version 7 and above, the meaning of the above two properties will change: instead of climate-dependent cargo slot numbers, you have to give climate-independent cargo IDs. If your GRF has a cargo translation table, then this ID is the index in that table; otherwise, it&#039;s the cargo bit. Cargoes not currently present will be changed to FFh. Please note that TTD stops processing these lists at the first FFh value, so specifying absent cargoes isn&#039;t always safe.&lt;br /&gt;
&lt;br /&gt;
{{ottdp|1.9|no|ottdrev=e66cec8f}} This property only supports three input cargos. Use property 26 instead to output more cargo types.&lt;br /&gt;
&lt;br /&gt;
=== Production multipliers (12, 13) ===&lt;br /&gt;
&lt;br /&gt;
If nonzero, the industry periodically (every 256 ticks, that is 8 or 9 times in a month) produces the given amount from the according cargo type. The properties specify the amount produced at default production level, they are scaled equally on [[Callbacks#Random production change 29|production changes]].&lt;br /&gt;
&lt;br /&gt;
{{ottdp|1.9|no|ottdrev=e66cec8f}} This properties only supports two output cargos. Use property 27 instead to output more cargo types.&lt;br /&gt;
&lt;br /&gt;
=== Minimal amount of cargo distributed (14) ===&lt;br /&gt;
&lt;br /&gt;
The produced cargo will be distributed to stations only after it exceeds this amount.&lt;br /&gt;
&lt;br /&gt;
=== Random sound effects (15) ===&lt;br /&gt;
&lt;br /&gt;
The data starts with a byte defining the number of available effects, then one byte per effect. TTD periodically picks one of the available effects randomly, and plays it.&lt;br /&gt;
&lt;br /&gt;
=== Conflicting industry types (16) ===&lt;br /&gt;
&lt;br /&gt;
3 bytes define 3 types that won&#039;t appear in the vicinity of this industry. If a byte has bit 7 set, the bottom 6 bits are the ID of a new type already defined in the current GRF file. If bit 7 is clear, the bottom 6 bits specify an old industry type. FFh can be used to fill unused entries. You shouldn&#039;t modify property 9 after the type has been referenced by a property 16. List of [[IndustryDefaultProps#Climate_independent_properties |valid industry types]]&lt;br /&gt;
&lt;br /&gt;
=== Probability in random game (17), Probability during gameplay (18) ===&lt;br /&gt;
&lt;br /&gt;
Old types have probabilities between 0 and 10. If the random game probability value is nonzero, at least one instance of this type is guaranteed to appear on the map.&lt;br /&gt;
&lt;br /&gt;
These probabilities are &amp;quot;relative probabilities&amp;quot;. That is, if you set the probability of industry A to twice the probability of industry B, industry A will appear about twice as often as B. Increasing the probabilities of all industries on the other hand changes nothing. The appearance probabilities have no influence on how many industries are placed in total.&lt;br /&gt;
&lt;br /&gt;
=== Map colour (19) ===&lt;br /&gt;
&lt;br /&gt;
The value must be a color index from the DOS pallette. The following values are used by default industries:&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Number!!Colour!!Example&lt;br /&gt;
|-&lt;br /&gt;
|01||Black||Coal mine&lt;br /&gt;
|-&lt;br /&gt;
|0A||Gray||Steel mill&lt;br /&gt;
|-&lt;br /&gt;
|0F||White||Bank&lt;br /&gt;
|-&lt;br /&gt;
|25||Dark beige||Water supply&lt;br /&gt;
|-&lt;br /&gt;
|27||Light beige||Rubber plantation&lt;br /&gt;
|-&lt;br /&gt;
|30||Pink||Farm&lt;br /&gt;
|-&lt;br /&gt;
|37||Brown||Food processing plant&lt;br /&gt;
|-&lt;br /&gt;
|56||Green||Forest&lt;br /&gt;
|-&lt;br /&gt;
|98||Blue||Oil wells/oil rig&lt;br /&gt;
|-&lt;br /&gt;
|AE||Purple||Factory&lt;br /&gt;
|-&lt;br /&gt;
|B8||Red||Power station&lt;br /&gt;
|-&lt;br /&gt;
|BF||Yellow||Oil refinery&lt;br /&gt;
|-&lt;br /&gt;
|C2||Orange||Saw mill&lt;br /&gt;
|-&lt;br /&gt;
|D0||Light green||Water tower&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Special industry flags to define special behavior (1A) ===&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Bit!!Value!!Version!!Meaning&lt;br /&gt;
|-&lt;br /&gt;
|0||1||{{ottdp|0.6|2.5}}||The industry periodically plants fields around itself (temperate and arctic farms)&lt;br /&gt;
|-&lt;br /&gt;
|1||2||{{ottdp|0.6|2.5}}||The industry cuts trees around itself and produces its first output cargo from them (lumber mill)&lt;br /&gt;
|-&lt;br /&gt;
|2||4||{{ottdp|0.6|2.5}}||The industry is built on water (oil rig)&lt;br /&gt;
|-&lt;br /&gt;
|3||8||{{ottdp|0.6|2.5}}||The industry can only be built in towns (i.e. it has to replace houses) with population larger than 1200 (temperate bank)&lt;br /&gt;
|-&lt;br /&gt;
|4||10||{{ottdp|0.6|2.5}}||The industry can only be built in towns (i.e. it has to replace houses) (arctic and tropic banks, water tower)&lt;br /&gt;
|-&lt;br /&gt;
|5||20||{{ottdp|0.6|2.5}}||The industry is always built near towns (i.e. near town sign; additionally the industry is allowed to replace houses) (toy shop)&lt;br /&gt;
|-&lt;br /&gt;
|6||40||{{ottdp|0.6|2.5}}||Fields are planted around the industry when it&#039;s built (all farms)&lt;br /&gt;
|-&lt;br /&gt;
|7||80||{{ottdp|0.6|2.5}}||The industry cannot increase its production on the temperate climate (oil wells)&lt;br /&gt;
|-&lt;br /&gt;
|8||100||{{ottdp|0.6|2.5}}||The industry is built only before 1950 (oil wells)&lt;br /&gt;
|-&lt;br /&gt;
|9||200||{{ottdp|0.6|2.5}}||The industry is built only after 1960 (oil rig)&lt;br /&gt;
|-&lt;br /&gt;
|10||400||{{ottdp|0.6|2.5}}||AI players will attempt to establish air and ship routes going to this industry (oil rig)&lt;br /&gt;
|-&lt;br /&gt;
|11||800||{{ottdp|0.6|2.5}}||The industry can be exploded by a military airplane (oil refinery)&lt;br /&gt;
|-&lt;br /&gt;
|12||1000||{{ottdp|0.6|2.5}}||The industry can be exploded by a military helicopter (factory)&lt;br /&gt;
|-&lt;br /&gt;
|13||2000||{{ottdp|0.6|2.5}}||The industry can cause a subsidence (coal mine)&lt;br /&gt;
|-&lt;br /&gt;
|14||4000||{{ottdp|0.6|2.5}}||Automatic production multiplier handing (No industry has this bit set by default.)&amp;lt;ref&amp;gt;If bit 14 is set, variables 40..42 will be divided by industry.prodmultiplier (variable 93), and the resulting instructions will be multiplied by the same amount before applying them. If you set this bit, please use small amounts in your instructions, since industry.prodmultiplier is 16 for default production, and can get as high as 128.&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|15||8000||{{ottdp|0.6|2.5}}||The production callback needs random bits in var. 10 (No industry has this bit set by default.)&lt;br /&gt;
|-&lt;br /&gt;
|16||10000||{{ottdp|1.0|2.6|ttdprev=r1925}}||Do not force one instance of this type to appear during initial map generation (No industry has this bit set by default.)&lt;br /&gt;
|-&lt;br /&gt;
|17||20000||{{ottdp|0.6|2.6|ttdprev=r1925}}||Allow closing down the last instance of this type (No industry has this bit set by default.)&lt;br /&gt;
|-&lt;br /&gt;
|18||40000||{{ottdp|1.9|no|ottdrev=e66cec8f}}||New format for callback 37, 14B, 14C to support more input/output cargos. See the callbacks for details.&lt;br /&gt;
|-&lt;br /&gt;
|19||80000||{{ottdp|1.11|no|ottdrev=6d3c2edc}}||By default, the amount of the second produced cargo is clamped for water industries (e.g. pax for oil rigs). This flag disables the clamping.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
By default, TTDPatch tries to ensure that cargo chains don&#039;t get broken. To achieve this, TTDPatch always generates at least one instance from every available industry type during random map generation, and prevents the last instance from closing down even when the production change callback says it should. If your industry type isn&#039;t essential for gameplay, or you want to handle this situation yourself, you can set bits 16 and/or 17 to turn off the default TTDPatch behavior.&lt;br /&gt;
&lt;br /&gt;
If you supply a lot of industry types but also want to support OpenTTD&#039;s small map sizes you should set bit 16 for the less important industry types which can be ommitted (there will likely not be enough space for an industry of every type).&lt;br /&gt;
&lt;br /&gt;
=== Input cargo multipliers for the three input cargo types (1C..1E) ===&lt;br /&gt;
&lt;br /&gt;
If the first (low) word of the property is M1 and the second (high) word is M2, and X units of the corresponding cargo is delivered to the industry, the output amounts are calculated this way:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;output_type1 = X*M1/256&lt;br /&gt;
&lt;br /&gt;
output_type2 = X*M2/256&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The default value for old industry types is 0100h,0000h , so every unit of input cargo produces one unit of output cargo of the first type. Exceptions are temperate banks and oil rigs, that have the default value of 0000h,0000h ,so input cargo doesn&#039;t affect output.&lt;br /&gt;
&lt;br /&gt;
{{ottdp|1.9|no|ottdrev=e66cec8f}} This property only supports three input and two output cargos. Use property 28 instead, if you have more cargo types.&lt;br /&gt;
&lt;br /&gt;
=== Industry name (1F) ===&lt;br /&gt;
&lt;br /&gt;
This is the text ID that will be attached to the town name when TTD texts refer to the industry.&lt;br /&gt;
&lt;br /&gt;
=== Prospecting success chance (20) ===&lt;br /&gt;
&lt;br /&gt;
This value is currently used only for extractive and organic industries (see property 0B for details). The higher this value is, the higher the chance that your industry can be built on a random place after prospecting. 0 means constant failure, while FFFFFFFFh means constant success.&lt;br /&gt;
&lt;br /&gt;
=== Callback flags (21,22) ===&lt;br /&gt;
&lt;br /&gt;
Property 21 can have the following bits set:&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Bit!!Value!!Var. 0C!!Version!!Callback&lt;br /&gt;
|-&lt;br /&gt;
|0||1||22||{{ottdp| |2.5}}||Determine whether the industry can be built&lt;br /&gt;
|-&lt;br /&gt;
|1||2||00||{{ottdp| |2.5}}||Call the [[Action2Industries|production callback]] when cargo arrives at the industry &amp;lt;ref name=&amp;quot;smootheconomy&amp;quot;&amp;gt;{{ottdp|0.6|no}} If none of the production change callbacks is activated, OpenTTD will use &amp;quot;smooth economy&amp;quot; if enabled. If any of the callbacks is enabled, &amp;quot;smooth economy&amp;quot; will be disabled for the industry.&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|2||4||00||{{ottdp| |2.5}}||Call the [[Action2Industries|production callback]] every 256 ticks &amp;lt;ref name=&amp;quot;smootheconomy&amp;quot;/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|3||8||28||{{ottdp| |2.5}}||Determine whether the industry can be built on given spot&lt;br /&gt;
|-&lt;br /&gt;
|4||10||29||{{ottdp| |2.5}}||Control random production changes&lt;br /&gt;
|-&lt;br /&gt;
|5||20||35||{{ottdp| |2.5}}||Monthly random production change&lt;br /&gt;
|-&lt;br /&gt;
|6||40||37||{{ottdp| |2.5}}||Cargo sub-type display&lt;br /&gt;
|-&lt;br /&gt;
|7||80||38||{{ottdp| |2.5|ttdprev=2.0.1 alpha 72}}||Additional text in industry fund window&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Property 22 can have the following bits set:&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Bit!!Value!!Var. 0C!!Version!!Callback&lt;br /&gt;
|-&lt;br /&gt;
|0||1||3A||{{ottdp| |2.5|ttdprev=2.0.1 alpha 72}}||Show additional text in industry window&lt;br /&gt;
|-&lt;br /&gt;
|1||2||3B||{{ottdp| |2.5|ttdprev=2.0.1 alpha 73}}||Control special industry effects&lt;br /&gt;
|-&lt;br /&gt;
|2||4||3D||{{ottdp| |2.5|ttdprev=2.5 beta 4 }}||Opt out of accepting cargo&lt;br /&gt;
|-&lt;br /&gt;
|3||8||14A||{{ottdp| |2.6|ttdprev=r1712}}||Decide industry color&lt;br /&gt;
|-&lt;br /&gt;
|4||10||14B||{{ottdp| |2.6|ttdprev=r1718}}||Decide input cargo types&lt;br /&gt;
|-&lt;br /&gt;
|5||20||14C||{{ottdp| |2.6|ttdprev=r1718}}||Decide output cargo types&lt;br /&gt;
|-&lt;br /&gt;
|6||40||15F||{{ottdp|1.3|no|ottdrev=r24186}}||Set initial production level on construction.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Destruction cost multiplier (23) ===&lt;br /&gt;
&lt;br /&gt;
This value specifies the cost of removing the industry when the ctrl-dynamite function of morebuildoptions.removeindustry is enabled. This value is multiplied by the house removal cost multiplier to get the final cost. The default value is 1000 in TTDPatch, and 0 (zero) in OpenTTD.&lt;br /&gt;
&lt;br /&gt;
=== Default name for nearby station (24) ===&lt;br /&gt;
&lt;br /&gt;
If non-zero, this text ID specifies an additional name option for stations built near this industry, which will be used before any of the standard TTD names. The text should contain a \80, which will be the name of the nearby town.&lt;br /&gt;
&lt;br /&gt;
If the newly built station cannot use the specified text (because that name has been used for another station in the same town) the default TTD naming system will be used, but without the names &amp;quot;\80 Oilfield&amp;quot; or &amp;quot;\80 Mines&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Setting this to zero disables &amp;quot;\80 Oilfield&amp;quot; and &amp;quot;\80 Mines&amp;quot; without adding any additional station name options.&lt;br /&gt;
&lt;br /&gt;
=== Production cargo type list (25) ===&lt;br /&gt;
{{ottdp|1.9|no|ottdrev=e66cec8f}} &lt;br /&gt;
&lt;br /&gt;
Format:&lt;br /&gt;
 &amp;lt;numoutput&amp;gt; (&amp;lt;cargotype&amp;gt;)*&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Size!!Variable!!Meaning&lt;br /&gt;
|-&lt;br /&gt;
|B||numoutput||Number of &amp;lt;cargotype&amp;gt; to follow,&lt;br /&gt;
|-&lt;br /&gt;
|B||cargotype||Cargotype (from CTT) to produce.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This property defines up to 16 cargotypes, which are produced by the industry.&lt;br /&gt;
Use this property instead of property 10.&lt;br /&gt;
&lt;br /&gt;
=== Acceptance cargo type list (26) ===&lt;br /&gt;
{{ottdp|1.9|no|ottdrev=e66cec8f}} &lt;br /&gt;
&lt;br /&gt;
Format:&lt;br /&gt;
 &amp;lt;numinput&amp;gt; (&amp;lt;cargotype&amp;gt;)*&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Size!!Variable!!Meaning&lt;br /&gt;
|-&lt;br /&gt;
|B||numinput||Number of &amp;lt;cargotype&amp;gt; to follow,&lt;br /&gt;
|-&lt;br /&gt;
|B||cargotype||Cargotype (from CTT) to accept.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This property defines up to 16 cargotypes, which are accepted by the industry.&lt;br /&gt;
Use this property instead of property 11.&lt;br /&gt;
&lt;br /&gt;
=== Production multiplier list (27) ===&lt;br /&gt;
{{ottdp|1.9|no|ottdrev=e66cec8f}} &lt;br /&gt;
&lt;br /&gt;
Format:&lt;br /&gt;
 &amp;lt;numoutput&amp;gt; (&amp;lt;amount&amp;gt;)*&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Size!!Variable!!Meaning&lt;br /&gt;
|-&lt;br /&gt;
|B||numinput||Number of &amp;lt;amount&amp;gt; to follow,&lt;br /&gt;
|-&lt;br /&gt;
|B||amount||Amount of cargo to produce.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If nonzero, the industry periodically (every 256 ticks, that is 8 or 9 times in a month) produces the given amount from the according cargo type.&lt;br /&gt;
The amounts correlate to the cargotypes set by property 25. If fewer/more amounts are set, the extra items are not produced/ignored.&lt;br /&gt;
&lt;br /&gt;
The properties specify the amount produced at default production level, they are scaled equally on [[Callbacks#Random production change 29|production changes]].&lt;br /&gt;
&lt;br /&gt;
Use this property instead of property 12 and 13.&lt;br /&gt;
&lt;br /&gt;
=== Input cargo multiplier list (28) ===&lt;br /&gt;
{{ottdp|1.9|no|ottdrev=e66cec8f}} &lt;br /&gt;
&lt;br /&gt;
Format:&lt;br /&gt;
 &amp;lt;numinput&amp;gt; &amp;lt;numoutput&amp;gt; (&amp;lt;multiplier&amp;gt;)*&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Size!!Variable!!Meaning&lt;br /&gt;
|-&lt;br /&gt;
|B||numinput||Number of input cargos to use.&lt;br /&gt;
|-&lt;br /&gt;
|B||numoutput||Number of output cargos to use.&lt;br /&gt;
|-&lt;br /&gt;
|W||multiplier||Cargo multipliers in 1/256 units. &amp;lt;numinput&amp;gt;*&amp;lt;numoutput&amp;gt; items.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This property defines a matrix which described how input cargos from property 26 are processed into output cargos from property 25.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
 03 04    // 3 input cargos, 4 output cargos&lt;br /&gt;
    \wx0100 \wx0000 \wx0000 \wx0100    // input cargo 0 is converted to output cargos 0 and 3&lt;br /&gt;
    \wx0000 \wx0100 \wx0000 \wx0100    // input cargo 1 is converted to output cargos 1 and 3&lt;br /&gt;
    \wx0000 \wx0000 \wx0100 \wx0100    // input cargo 2 is converted to output cargos 2 and 3&lt;br /&gt;
&lt;br /&gt;
The matrix correlates to the cargotypes set by property 25 and 26. If fewer/more cargotypes are used, the extra items are not produced/ignored.&lt;br /&gt;
&lt;br /&gt;
Use this property instead of property 1C..1E.&lt;/div&gt;</summary>
		<author><name>Michi cc</name></author>
	</entry>
	<entry>
		<id>https://newgrf-specs.tt-wiki.net/index.php?title=Features&amp;diff=3891</id>
		<title>Features</title>
		<link rel="alternate" type="text/html" href="https://newgrf-specs.tt-wiki.net/index.php?title=Features&amp;diff=3891"/>
		<updated>2019-05-09T18:37:04Z</updated>

		<summary type="html">&lt;p&gt;Michi cc: /* List of features and feature-specific Actions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==List of features and feature-specific Actions==&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!colspan=&amp;quot;2&amp;quot;|Feature || [[Action0]] || [[Action1]] || [[Action2]] || [[VariationalAction2 | VarAction2]] || [[RandomAction2]] || [[Callbacks]] || [[Action3]] || [[Action4]]&lt;br /&gt;
|-&lt;br /&gt;
|00 || Trains || [[Action0/Vehicles/Trains | yes]] || [[Action1 | yes]] || [[Action2/Vehicles | yes]] || [[VariationalAction2/Vehicles | yes]] || [[RandomAction2#Vehicles | yes]] || [[Callbacks | yes]] || [[Action3 | yes]] || [[Action4 | yes]]&lt;br /&gt;
|-&lt;br /&gt;
|01 || Road Vehicles || [[Action0/Vehicles/RoadVehicles | yes]] || [[Action1 | yes]] || [[Action2/Vehicles | yes]] || [[VariationalAction2/Vehicles | yes]] || [[RandomAction2#Vehicles | yes]] || [[Callbacks | yes]] || [[Action3 | yes]] || [[Action4 | yes]]&lt;br /&gt;
|-&lt;br /&gt;
|02 || Ships || [[Action0/Vehicles/Ships | yes]] || [[Action1 | yes]] || [[Action2/Vehicles | yes]] || [[VariationalAction2/Vehicles | yes]] || [[RandomAction2#Vehicles | yes]] || [[Callbacks | yes]] || [[Action3 | yes]] || [[Action4 | yes]]&lt;br /&gt;
|-&lt;br /&gt;
|03 || Aircraft || [[Action0/Vehicles/Planes | yes]] || [[Action1 | yes]] || [[Action2/Vehicles | yes]] || [[VariationalAction2/Vehicles | yes]] || [[RandomAction2#Vehicles | yes]] || [[Callbacks | yes]] || [[Action3 | yes]] || [[Action4 | yes]]&lt;br /&gt;
|-&lt;br /&gt;
|04 || Stations || [[Action0/Stations | yes]] || [[Action1 | yes]] || [[Action2/Stations | yes]] || [[VariationalAction2/Stations | yes]] || [[RandomAction2#Stations | yes]] || [[Callbacks | yes]] || [[Action3 | yes]] || [[Action4 | yes]]&lt;br /&gt;
|-&lt;br /&gt;
|05 || Canals || [[Action0/Canals | yes]] || [[Action1 | yes]] || [[Action2/Single Set | yes]] || [[VariationalAction2/Canals | yes]] || [[RandomAction2#Canals | yes]] || [[Callbacks | yes]] || [[Action3 | yes]] || &#039;&#039;no&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|06 || Bridges || [[Action0/Bridges | yes]] || &#039;&#039;no&#039;&#039; || &#039;&#039;no&#039;&#039; || [[VariationalAction2/Bridges | no-ish]] || &#039;&#039;no&#039;&#039; || &#039;&#039;no&#039;&#039; || &#039;&#039;no&#039;&#039; || [[Action0/Bridges#Purchase_text_.2810.29 | yes-ish]]&lt;br /&gt;
|-&lt;br /&gt;
|07 || Houses || [[Action0/Houses | yes]] || [[Action1 | yes]] || [[Action2/Sprite Layout | yes]] || [[VariationalAction2/Houses | yes]] || [[RandomAction2#Town_building_triggers | yes]] || [[Callbacks | yes]] || [[Action3 | yes]] || [[Action4 | yes]]&lt;br /&gt;
|-&lt;br /&gt;
|08 || Global Settings || [[Action0/Global Settings | yes]] || &#039;&#039;no&#039;&#039; || &#039;&#039;no&#039;&#039; || &#039;&#039;no&#039;&#039; || &#039;&#039;no&#039;&#039; || &#039;&#039;no&#039;&#039; || &#039;&#039;no&#039;&#039; || &#039;&#039;no&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|09 || Industry Tiles || [[Action0/Industry Tiles | yes]] || [[Action1 | yes]] || [[Action2/Sprite Layout | yes]] || [[VariationalAction2/Industry Tiles | yes]] || [[RandomAction2#Industry_tile_triggers | yes]] || [[Callbacks | yes]] || [[Action3 | yes]] || &#039;&#039;no&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|0A || Industries || [[Action0/Industries | yes]] || [[Action1 | yes]] || [[Action2/Industries | yes]] || [[VariationalAction2/Industries | yes]] || [[RandomAction2#Industry_tile_triggers | yes]] || [[Callbacks | yes]] || [[Action3 | yes]] || [[Action4 | yes]]&lt;br /&gt;
|-&lt;br /&gt;
|0B || Cargos || [[Action0/Cargos | yes]] || [[Action1 | yes]] || [[Action2/Single Set | yes]] || [[VariationalAction2 | yes-ish]] &amp;lt;ref name=&amp;quot;novars&amp;quot;&amp;gt;No feature specific variables though&amp;lt;/ref&amp;gt; || &#039;&#039;no&#039;&#039; || [[Callbacks | yes]] || [[Action3 | yes]] || [[Action4 | yes]]&lt;br /&gt;
|-&lt;br /&gt;
|0C || Sound Effects || [[Action0/Sound Effects | yes]] || &#039;&#039;no&#039;&#039; || [[Action2/Only Callback Failure | yes-ish]] &amp;lt;ref name=&amp;quot;failonly&amp;quot;&amp;gt;Callback failure only&amp;lt;/ref&amp;gt; || [[VariationalAction2 | yes-ish]] &amp;lt;ref name=&amp;quot;novars&amp;quot;/&amp;gt; || &#039;&#039;no&#039;&#039; || [[Callbacks | yes]] || [[Action3 | yes]] || &#039;&#039;no&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|0D || Airports || [[Action0/Airports | yes]] || [[Action1 | yes]] || [[Action2/Single Set | yes]] || [[VariationalAction2/Airports | yes]] || [[RandomAction2#Stations | yes]] || [[Callbacks | yes]] || [[Action3 | yes]] || [[Action4 | yes]]&lt;br /&gt;
|-&lt;br /&gt;
|0E || Signals || &#039;&#039;no&#039;&#039; || [[Action5#0E_New_Signals | Action5]] || [[Action2/Only Callback Failure | yes-ish]] &amp;lt;ref name=&amp;quot;failonly&amp;quot;/&amp;gt; || [[VariationalAction2/Signals | yes]] || &#039;&#039;no&#039;&#039; || [[Callbacks | yes]] || [[Action3 | yes]] || &#039;&#039;no&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|0F || Objects || [[Action0/Objects | yes]] || [[Action1 | yes]] || [[Action2/Sprite Layout | yes]] || [[VariationalAction2/Objects | yes]] || [[RandomAction2#Objects | yes]] || [[Callbacks | yes]] || [[Action3 | yes]] || [[Action4 | yes]]&lt;br /&gt;
|-&lt;br /&gt;
|10 || Railtypes || [[Action0/Railtypes | yes]] || [[Action1 | yes]] || [[Action2/Single Set | yes]] || [[VariationalAction2/Railtypes | yes]] || [[RandomAction2#Rail_types | yes]] || &#039;&#039;no&#039;&#039; || [[Action3 | yes]] || [[Action4 | yes]]&lt;br /&gt;
|-&lt;br /&gt;
|11 || Airport Tiles || [[Action0/Airport Tiles | yes]] || [[Action1 | yes]] || [[Action2/Sprite Layout | yes]] || [[VariationalAction2/Airport Tiles | yes]] || [[RandomAction2#Stations | yes]] || [[Callbacks | yes]] || [[Action3 | yes]] || &#039;&#039;no&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|12 || Roadtypes || [[Action0/Roadtypes | yes]] || [[Action1 | yes]] || [[Action2/Single Set | yes]] || [[VariationalAction2/Roadtypes | yes]] || [[RandomAction2#Road_types | yes]] || &#039;&#039;no&#039;&#039; || [[Action3 | yes]] || [[Action4 | yes]]&lt;br /&gt;
|-&lt;br /&gt;
|13 || Tramtypes || [[Action0/Roadtypes | yes]] || [[Action1 | yes]] || [[Action2/Single Set | yes]] || [[VariationalAction2/Roadtypes | yes]] || [[RandomAction2#Road_types | yes]] || &#039;&#039;no&#039;&#039; || [[Action3 | yes]] || [[Action4 | yes]]&lt;br /&gt;
|-&lt;br /&gt;
|N/A &amp;lt;!-- Towns have no feature. NML and OTTD assign a pseudo feature number, but this does not mean there is an actual feature number --&amp;gt;&lt;br /&gt;
| Towns || &#039;&#039;no&#039;&#039; || &#039;&#039;no&#039;&#039; || &#039;&#039;no&#039;&#039; || [[VariationalAction2/Towns | yes]] || &#039;&#039;no&#039;&#039; || &#039;&#039;no&#039;&#039; || &#039;&#039;no&#039;&#039; || [[ActionF]]&lt;br /&gt;
|-&lt;br /&gt;
|48 || Original Strings &amp;lt;ref&amp;gt;This is a pseudo-feature only used in Action4 to assign original strings. The value 0x48 originates from the way old TTDPatch versions checked for switches enabling/disabling features. NewTrains (feature 0x00) are activated by [[TTDPatchFlags | switch 0x37]]. Adding 0x48 to that results in 0x7F - a switch which is always set when TTDPatch is active. Thus feature 0x48 was not disabled by any switch. (today TTDPatch does not depend on the switches being in order of the features)&amp;lt;/ref&amp;gt; || &#039;&#039;no&#039;&#039; || &#039;&#039;no&#039;&#039; || &#039;&#039;no&#039;&#039; || &#039;&#039;no&#039;&#039; || &#039;&#039;no&#039;&#039; || &#039;&#039;no&#039;&#039; || &#039;&#039;no&#039;&#039; || [[Action4 | yes]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Michi cc</name></author>
	</entry>
	<entry>
		<id>https://newgrf-specs.tt-wiki.net/index.php?title=Action0/Railtypes&amp;diff=3846</id>
		<title>Action0/Railtypes</title>
		<link rel="alternate" type="text/html" href="https://newgrf-specs.tt-wiki.net/index.php?title=Action0/Railtypes&amp;diff=3846"/>
		<updated>2019-03-10T10:36:13Z</updated>

		<summary type="html">&lt;p&gt;Michi cc: /* Rail type flags (10) */ More details for 90 deg&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;&#039;&#039;Action 0 properties for rail types&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Action 0 - Properties for rail types =&lt;br /&gt;
&lt;br /&gt;
Defining properties of rail types.&lt;br /&gt;
&lt;br /&gt;
{{ottdp|1.0|no|ottdrev=r18969}} 16 railtypes can be defined.&lt;br /&gt;
&lt;br /&gt;
{{ottdp|1.9|no|ottdrev=bf8d7df7}} 64 railtypes can be defined.&lt;br /&gt;
&lt;br /&gt;
== Properties ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039;Number&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Size&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|08&lt;br /&gt;
|{{ottdp|1.0}}&lt;br /&gt;
|4*B&lt;br /&gt;
|Rail type label&lt;br /&gt;
|-&lt;br /&gt;
|09&lt;br /&gt;
|{{ottdp|1.0}}&lt;br /&gt;
|W&lt;br /&gt;
|StringID: Build rail toolbar caption&amp;lt;ref&amp;gt;{{grfTill|7}} For GRF version 7 or earlier, setting property 09 sets property 1B as well.&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|0A&lt;br /&gt;
|{{ottdp|1.0}}&lt;br /&gt;
|W&lt;br /&gt;
|StringID: Rail construction dropdown text&lt;br /&gt;
|-&lt;br /&gt;
|0B&lt;br /&gt;
|{{ottdp|1.0}}&lt;br /&gt;
|W&lt;br /&gt;
|StringID: Build vehicle window caption&lt;br /&gt;
|-&lt;br /&gt;
|0C&lt;br /&gt;
|{{ottdp|1.0}}&lt;br /&gt;
|W&lt;br /&gt;
|StringID: Autoreplace text&lt;br /&gt;
|-&lt;br /&gt;
|0D&lt;br /&gt;
|{{ottdp|1.0}}&lt;br /&gt;
|W&lt;br /&gt;
|StringID: New engine text&lt;br /&gt;
|-&lt;br /&gt;
|0E&lt;br /&gt;
|{{ottdp|1.0}}&lt;br /&gt;
|B n*D &lt;br /&gt;
|Compatible rail type list&amp;lt;ref name=&amp;quot;alt_label&amp;quot;&amp;gt;Rail type labels in this list are &#039;&#039;not&#039;&#039; resolved using the alternate label list.&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|0F&lt;br /&gt;
|{{ottdp|1.0}}&lt;br /&gt;
|B n*D &lt;br /&gt;
|Powered rail type list&amp;lt;ref name=&amp;quot;alt_label&amp;quot; /&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|10&lt;br /&gt;
|{{ottdp|1.0}}&lt;br /&gt;
|B&lt;br /&gt;
|Rail type flags&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|{{ottdp|1.0}}&lt;br /&gt;
|B&lt;br /&gt;
|Curve speed advantage multiplier&lt;br /&gt;
|-&lt;br /&gt;
|12&lt;br /&gt;
|{{ottdp|1.0}}&lt;br /&gt;
|B&lt;br /&gt;
|Station (and depot) graphics&lt;br /&gt;
|-&lt;br /&gt;
|13&lt;br /&gt;
|{{ottdp|1.0}}&lt;br /&gt;
|W &amp;lt;ref&amp;gt;In r18969 to 19306 this property was byte-sized.&amp;lt;/ref&amp;gt;&lt;br /&gt;
|Construction costs&lt;br /&gt;
|-&lt;br /&gt;
|14&lt;br /&gt;
|{{ottdp|1.0}}&lt;br /&gt;
|W&lt;br /&gt;
|Speed limit&lt;br /&gt;
|-&lt;br /&gt;
|15&lt;br /&gt;
|{{ottdp|1.0}}&lt;br /&gt;
|B&lt;br /&gt;
|Acceleration model&lt;br /&gt;
|-&lt;br /&gt;
|16&lt;br /&gt;
|{{ottdp|1.0|no|ottdrev=r19307}}&lt;br /&gt;
|B&lt;br /&gt;
|Minimap colour&lt;br /&gt;
|-&lt;br /&gt;
|17&lt;br /&gt;
|{{ottdp|1.1|no|ottdrev=r21842}}&lt;br /&gt;
|D&lt;br /&gt;
|Introduction date&lt;br /&gt;
|-&lt;br /&gt;
|18&lt;br /&gt;
|{{ottdp|1.1|no|ottdrev=r21842}}&lt;br /&gt;
|B n*D &lt;br /&gt;
|Introduction required rail type list&amp;lt;ref name=&amp;quot;alt_label&amp;quot; /&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|19&lt;br /&gt;
|{{ottdp|1.1|no|ottdrev=r21841}}&lt;br /&gt;
|B n*D &lt;br /&gt;
|Introduced rail type list&amp;lt;ref name=&amp;quot;alt_label&amp;quot; /&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|1A&lt;br /&gt;
|{{ottdp|1.1|no|ottdrev=r21866}}&lt;br /&gt;
|B&lt;br /&gt;
|Sort order&lt;br /&gt;
|-&lt;br /&gt;
|1B&lt;br /&gt;
|{{ottdp|1.2|no|ottdrev=r23129}}&lt;br /&gt;
|W&lt;br /&gt;
|StringID: Rail type name&amp;lt;ref&amp;gt;{{grfTill|7}} For GRF version 7 or earlier, set property 1B &#039;&#039;after&#039;&#039; setting property 09, as property 09 sets the rail type name as well for backwards compatibility.&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|1C&lt;br /&gt;
|{{ottdp|1.2|no|ottdrev=r23415}}&lt;br /&gt;
|W&lt;br /&gt;
|Infrastructure maintenance cost factor&lt;br /&gt;
|-&lt;br /&gt;
|1D&lt;br /&gt;
|{{ottdp|1.2|no|ottdrev=r23758}}&lt;br /&gt;
|B n*D&lt;br /&gt;
|Alternate rail type labels that shall be &amp;quot;redirected&amp;quot; to this rail type&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In NFO, rail type IDs will be GRF local, with an ID to label mapping. Therefore to modify an existing rail type, specify its label in property 08. To create a new rail type, again just specify its label in property 08. This way there is no need for complex GRM mechanisms to allocate IDs. If a label &#039;clashes&#039; with another GRF, then one GRF will end up modifying the properties instead of creating a new rail type.&lt;br /&gt;
&lt;br /&gt;
When a new rail type is created, it is populated with the information from the first rail type, except that the compatible and powered list contain only the rail type being created. However, no default values should be assumed, as the first rail type may have been modified.&lt;br /&gt;
&lt;br /&gt;
== Vehicle and Railtype availability ==&lt;br /&gt;
&lt;br /&gt;
Vehicle and railtype availability and compatibility is influenced by multiple properties.&lt;br /&gt;
Generally, the vehicle defines which railtype it is, and the railtypes define the compatibility between each other.&lt;br /&gt;
* A vehicle exists, if its railtype (train prop 05) is defined. Otherwise the vehicle is disabled.&lt;br /&gt;
* When a vehicle is introduced, it always introduces its railtype (train prop 05).&lt;br /&gt;
* A railtype is introduced, if at least one of the following conditions is met:&lt;br /&gt;
** A vehicle is introduced, that references the railtype (train prop 05).&lt;br /&gt;
** Another railtype is introduced, that references the railtype via the introduced railtype list (railtype prop 19).&lt;br /&gt;
** The introduction date (railtype prop 17) is passed and all required railtypes (railtype prop 18) are available.&lt;br /&gt;
&lt;br /&gt;
Via railtype property 1D multiple railtypes can be defined, which shall be considered equivalent to a railtype.&lt;br /&gt;
This affects the interpretation of train property 05. If train property 05 references an undefined railtype, then&lt;br /&gt;
railtype property 1D is checked for all defined railtypes, whether the vehicle can be reassigned to some other railtype.&lt;br /&gt;
Otherwise the vehicle is disabled.&lt;br /&gt;
&lt;br /&gt;
== Rail type label (08) ==&lt;br /&gt;
&lt;br /&gt;
These are globally unique four-letter identifiers for specific rail types (analoguous to [[Action0Cargos#Cargo label 17|cargo labels]]), used to make various rail types accessible from train vehicle grfs. Reserved labels for default rail types are:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039;Label&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Rail Type&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|RAIL &lt;br /&gt;
| Normal Rail&lt;br /&gt;
|-&lt;br /&gt;
|ELRL &lt;br /&gt;
| Electrified Rail&lt;br /&gt;
|-&lt;br /&gt;
|MONO &lt;br /&gt;
| Mono Rail&lt;br /&gt;
|-&lt;br /&gt;
|MGLV &lt;br /&gt;
| Maglev Rail&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{ottdp|1.0|no|ottdrev=r18969}} 16 railtypes can be defined.&lt;br /&gt;
&lt;br /&gt;
{{ottdp|1.9|no|ottdrev=bf8d7df7}} 64 railtypes can be defined.&lt;br /&gt;
&lt;br /&gt;
Rail type sets may use up to 64 railtypes and have to specify their own [[RailtypeLabels|labels]].&lt;br /&gt;
&lt;br /&gt;
See also [[Action0/Global Settings#Rail type translation table 12|Rail Type Translation Table]] for further info.&lt;br /&gt;
&lt;br /&gt;
== Build rail toolbar caption (09) ==&lt;br /&gt;
&lt;br /&gt;
String ID of the name of the rail type as shown in the toolbar caption.&lt;br /&gt;
&lt;br /&gt;
{{grfTill|7}} {{ottd|1.2|ottdrev=r23129}} For backwards compatibility, setting this property sets the rail type name (property 1B) to this string as well for GRF versions 7 or below.&lt;br /&gt;
&lt;br /&gt;
OpenTTD before r20342 and 1.0.3 require the string to start with the white control code. Later versions of OpenTTD will automatically default to white.&lt;br /&gt;
&lt;br /&gt;
== Rail construction dropdown text (0A) ==&lt;br /&gt;
&lt;br /&gt;
String ID for text in the dropdown of all rail types.&lt;br /&gt;
&lt;br /&gt;
This string must never start with a colour control code.&lt;br /&gt;
&lt;br /&gt;
== Build vehicle window caption (0B) ==&lt;br /&gt;
&lt;br /&gt;
String ID for build vehicle window caption.&lt;br /&gt;
&lt;br /&gt;
OpenTTD before r20342 and 1.0.3 require the string to start with the white control code. Later versions of OpenTTD will automatically default to white.&lt;br /&gt;
&lt;br /&gt;
== Autoreplace text (0C) ==&lt;br /&gt;
&lt;br /&gt;
String ID for rail type shown in autoreplace window.&lt;br /&gt;
&lt;br /&gt;
== New engines (0D) ==&lt;br /&gt;
&lt;br /&gt;
StringID to use for showing texts of the type &amp;quot;We have invented a new &amp;amp;lt;rail type&amp;amp;gt; engine&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Compatible rail type list (0E) ==&lt;br /&gt;
&lt;br /&gt;
List of rail types on which trains of this rail type can run, even though they might not be powered. E.g. wagons/engines of &amp;quot;eletrified rail&amp;quot;-type are also compatible to &amp;quot;normal rail&amp;quot; and &amp;quot;third rail&amp;quot; type, but they are not powered (there need to be an other powered engine in the consist to move the train).&lt;br /&gt;
&lt;br /&gt;
The format is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;0E &amp;amp;lt;nvar&amp;amp;gt; (&amp;amp;lt;rail type label&amp;amp;gt;){n}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That is you give the number of compatible rail types in a single byte followed by a list of that length of rail type labels. A rail type is automatically compatible (and powered) with itself, so you don&#039;t need to list the current rail type.&lt;br /&gt;
&lt;br /&gt;
Note that these properties apply to trains of this rail type, not the track. If you want trains of other rail types to be able to run on your rail types, you must set the compatible rail types property for each rail type. Setting these properties behaves always incremental, so you only need to the set additional bits for each other rail type, you cannot remove compatibility/poweredness once it is set (by some other grf).&lt;br /&gt;
&lt;br /&gt;
== Powered rail type list (0F) ==&lt;br /&gt;
&lt;br /&gt;
List of rail types on which trains of this rail type are powered. E.g. engines of &amp;quot;normal rail&amp;quot;-type are powered on &amp;quot;electrified rail&amp;quot;- and &amp;quot;third-rail&amp;quot;-type as well.&lt;br /&gt;
&lt;br /&gt;
Same format as for property 0E above.&lt;br /&gt;
&lt;br /&gt;
== Rail type flags (10) ==&lt;br /&gt;
&lt;br /&gt;
Flags to define properties related to the rail type:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039;Bit&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Value&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Version&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Meaning&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
||{{ottdp|1.0}}&lt;br /&gt;
|Draw catenary for this rail type&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
||{{ottdp|1.1|no|ottdrev=r20049}}&lt;br /&gt;
|Disallow level crossings for this rail type&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|4&lt;br /&gt;
||{{ottdp|1.9|no|ottdrev=e3b440c9c5}}&lt;br /&gt;
|Hide this rail type from construction menu&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|8&lt;br /&gt;
||{{ottdp|1.10|no|ottdrev=g42046af933}}&lt;br /&gt;
|Enable use of precombined overlay sprites&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|16&lt;br /&gt;
||{{ottdp|1.10|no|ottdrev=gcc5f175615}}&lt;br /&gt;
|Always allow 90 degree turns&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|32&lt;br /&gt;
||{{ottdp|1.10|no|ottdrev=gcc5f175615}}&lt;br /&gt;
|Always prohibit 90 degree turns (takes precedence over bit 4)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Curve Speed advantage multiplier (11) ==&lt;br /&gt;
&lt;br /&gt;
This property sets the multiplier to the curve speed advantage which all trains running on this track type get. The base curve speed advantage is given by the multiplication of the value of this property with the base speed advantage - which depends on the curve length in wagons:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039;Curve Length&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Base Speed Adv.&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|0 (90° turn) &lt;br /&gt;
|30&lt;br /&gt;
|-&lt;br /&gt;
|1 (2x45° turn) &lt;br /&gt;
|44&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
| 55&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
| 66&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
| 75&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
| 84&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
| 91&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
| 98&lt;br /&gt;
|-&lt;br /&gt;
|8&lt;br /&gt;
| 103&lt;br /&gt;
|-&lt;br /&gt;
|9&lt;br /&gt;
| 108&lt;br /&gt;
|-&lt;br /&gt;
|10&lt;br /&gt;
| 111&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
| 114&lt;br /&gt;
|-&lt;br /&gt;
|12+&lt;br /&gt;
| 115&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Curve length&amp;quot; is the average number of wagons of the train between turns. However, very sharp turns (values 0 and 1) are not averaged out in longer trains.&lt;br /&gt;
&lt;br /&gt;
The maximum speed for a train in a curve is defined by &amp;quot;base speed advantage&amp;quot; * (2 + &amp;quot;property 11&amp;quot;). Tilting trains get an additional bonus of 20% to this value.&lt;br /&gt;
&lt;br /&gt;
For the default rail types this property is 0 for normal rail and electrified rail, 1 for monorail, and 2 for maglev.&lt;br /&gt;
&lt;br /&gt;
== Station (and depot) graphics (12) ==&lt;br /&gt;
&lt;br /&gt;
This property defines the default graphics for the stations. If no depot sprites are defined, this also defines at the same time the depot sprites to be used. There are three kind of default stations (and depots), usually associated with rail, monorail and maglev tracks. Valid values are:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039;Value&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Meaning&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Normal Rail&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Monorail&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|Maglev&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Speed limit (14) ==&lt;br /&gt;
&lt;br /&gt;
Speed limit in mph*1.6 (approx. km/h). Set to &amp;quot;0&amp;quot; for no limit at all.&lt;br /&gt;
&lt;br /&gt;
== Acceleration model (15) ==&lt;br /&gt;
&lt;br /&gt;
This property defines the acceleration model used. Valid values range from 0 to 2:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039;Value&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Meaning&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Normal Rail&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Monorail&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|Maglev&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
There is currently no difference between normal rail and monorail.&lt;br /&gt;
&lt;br /&gt;
== Map colour (16) ==&lt;br /&gt;
&lt;br /&gt;
This property defines the colour this track type is drawn in the minimap view. The byte value specifies the colour entry in the [[PalettesAndCoordinates|DOS palette]].&lt;br /&gt;
&lt;br /&gt;
== Introduction date (17) ==&lt;br /&gt;
&lt;br /&gt;
This property defines the long date formatted introduction date of this rail type. With this property set the rail type will be introduced at (or after) this date when all of the introduction required rail types are available to the company of the player, or whenever a vehicle using this rail type gets introduced whichever is first.&lt;br /&gt;
&lt;br /&gt;
== Introduction required rail type list (18) ==&lt;br /&gt;
&lt;br /&gt;
List of rail types on that need to be available to the company of the player for this rail type to be introduced at (or after) the introduction date. This limit does not apply when the rail type is introduced by the introduction of a vehicle.&lt;br /&gt;
&lt;br /&gt;
Same format as for property 0E above.&lt;br /&gt;
&lt;br /&gt;
This can, for example, be used to introduce a third rail with catenary track type when both third rail and catenary rail types are available.&lt;br /&gt;
&lt;br /&gt;
== Introduced rail type list (19) ==&lt;br /&gt;
&lt;br /&gt;
List of rail types that get introduced when this rail type is introduced. For example, to make sure that when a fast rail type is introduced the slow variant exists.&lt;br /&gt;
&lt;br /&gt;
Same format as for property 0E above.&lt;br /&gt;
&lt;br /&gt;
== Sort order (1A) ==&lt;br /&gt;
&lt;br /&gt;
Property for influencing the sort order of the drop down lists with rail types. Default values are as follows:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039;Value&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Meaning&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|07&lt;br /&gt;
|Normal Rail&lt;br /&gt;
|-&lt;br /&gt;
|17&lt;br /&gt;
|Electrified Rail&lt;br /&gt;
|-&lt;br /&gt;
|27&lt;br /&gt;
|Monorail&lt;br /&gt;
|-&lt;br /&gt;
|37&lt;br /&gt;
|Maglev&lt;br /&gt;
|-&lt;br /&gt;
|n7&lt;br /&gt;
|Railtype #n&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Thus the rail type that (internally) gets index 8 will get a default value of 87. These defaults are to keep the ordering when this property is not supported as they were.&lt;br /&gt;
&lt;br /&gt;
== Rail type name (1B) ==&lt;br /&gt;
&lt;br /&gt;
String ID of the name of the rail type.&lt;br /&gt;
&lt;br /&gt;
{{grfTill|7}} For GRF versions 7 or earlier, set property 1B &#039;&#039;after&#039;&#039; setting property 09, as property 09 sets the rail type name as well for backwards compatibility.&lt;br /&gt;
&lt;br /&gt;
== Alternate rail type labels (1D) ==&lt;br /&gt;
&lt;br /&gt;
A list of alternate labels that get &amp;quot;redirected&amp;quot; to this rail type when used e.g. as track type of train or when testing if a label is defined. The redirection only happens if the alternate label isn&#039;t defined as a real rail type. Same format as for property 0E above.&lt;br /&gt;
&lt;br /&gt;
Alternate labels are not considered when evaluating properties 0E, 0F, 18, and 19.&lt;br /&gt;
&lt;br /&gt;
= Example =&lt;br /&gt;
&lt;br /&gt;
To be written&lt;/div&gt;</summary>
		<author><name>Michi cc</name></author>
	</entry>
	<entry>
		<id>https://newgrf-specs.tt-wiki.net/index.php?title=Storages&amp;diff=3799</id>
		<title>Storages</title>
		<link rel="alternate" type="text/html" href="https://newgrf-specs.tt-wiki.net/index.php?title=Storages&amp;diff=3799"/>
		<updated>2018-09-02T19:50:35Z</updated>

		<summary type="html">&lt;p&gt;Michi cc: Larger persistent storage for OTTD.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
Storages are arrays of registers that can be accessed when using [[VariationalAction2]]. Registers (temporary and persistent alike) always have a size of 4 bytes. If you&#039;re writing them using smaller sizes (anything but type 89/8A), the given value will be sign-extended to 4 bytes. Therefore, be careful when you read a register using a bigger size than it was written with. This also applies to registers read by TTDPatch; if not indicated specifically, TTDPatch reads all 4 bytes of the register.&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
===Temporary storage===&lt;br /&gt;
{{ottdp|0.6|2.6}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Size:&#039;&#039;&#039; 00 - FF (256) (from TTDPatch r1246 to r1301) or 00 - 10F (272) (since TTDPatch r1301 and OpenTTD r9707)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Data storage:&#039;&#039;&#039; [[VarAction2Advanced#operator|Operator \2sto (0E)]] allows to store values inside the registers of this storage.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Data access:&#039;&#039;&#039; The first 256 registers 00 to FF can be read using [[VariationalAction2#Variable|variable 7D]]. The rest of the values (100 to 10F) are write only: they are used to pass extra data to some 4x and 6x variables, as well as for returning extra data from callbacks.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Temporary storage contains values local to the current [[VariationalAction2]] chain. When a new chain starts, the values inside the temporary storage are undefined. Therefore, they should not be used unless they have been properly initialized. During the execution of a chain, only that chain can modify the values in the temporary storage.&lt;br /&gt;
&lt;br /&gt;
===Persistent storage===&lt;br /&gt;
{{ottdp|0.6|2.6}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Size:&#039;&#039;&#039; 00 - 0F (16) or 00 - FF (256) (since {{ottd|1.9|6391d49}})&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Data storage:&#039;&#039;&#039; [[VarAction2Advanced#operator|Operator \2psto (10)]] allows to store values inside the registers of this storage.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Data access:&#039;&#039;&#039; The registers can be read using [[VariationalAction2#Variable|variable 7C]]. Note that it is possible to access the persistent storage of related objects (see [[VariationalAction2#Type]]).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Features that support it:&#039;&#039;&#039; Industries (0A)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Persistent storage is associated to a single item. When the item is created, all of the values of the persistent storage are set to zero. Persistent storage values cannot be accessed or modified by items that are being created. Persistent storage should not be read if the current feature doesn&#039;t support it.&lt;br /&gt;
&lt;br /&gt;
===Persistent storage accessed by GRFID===&lt;br /&gt;
{{ottdp|1.2|ottdrev=r22569}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Size:&#039;&#039;&#039; 00 - 0F (16) or 00 - FF (256) (since {{ottd|1.9|6391d49}}) for each GRFID&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Data storage:&#039;&#039;&#039; [[VarAction2Advanced#operator|Operator \2psto (10)]] allows to store values inside the registers of this storage. The GRFID to access must be stored in temporary register 0x100 before using Operator 10. 0xFFFFFFFF can be used to access the GRFID of the item using the current [[VariationalAction2]] chain.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Data access:&#039;&#039;&#039; The registers can be read using [[VariationalAction2#Variable|variable 7C]]. Note that it is possible to access the persistent storage of related objects (see [[VariationalAction2#Type]]). The GRFID to access must be stored in temporary register 0x100 before checking variable 7C. 0xFFFFFFFF can be used to access the GRFID of the item using the current [[VariationalAction2]] chain.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Features that support it:&#039;&#039;&#039; Towns (since OpenTTD r22569)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Features supporting persistent storage accessed by GRFID are not restricted to a single persistent storage; there is a persistent storage associated to every GRFID. An item only has write access to the persistent storage associated to its own GRFID, but it can read the registers of any GRFID. Persistent storage values cannot be accessed or modified by items that are being created. Persistent storage should not be read if the current feature doesn&#039;t support it.&lt;/div&gt;</summary>
		<author><name>Michi cc</name></author>
	</entry>
	<entry>
		<id>https://newgrf-specs.tt-wiki.net/index.php?title=TTDPatchFlags&amp;diff=3798</id>
		<title>TTDPatchFlags</title>
		<link rel="alternate" type="text/html" href="https://newgrf-specs.tt-wiki.net/index.php?title=TTDPatchFlags&amp;diff=3798"/>
		<updated>2018-09-02T19:43:54Z</updated>

		<summary type="html">&lt;p&gt;Michi cc: Larger persistent storage for OTTD.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In the table below you find all the TTDPatch flags that belong to &amp;lt;param-num&amp;gt; = 85 in Action 7 and Action 9.&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!&#039;&#039;&#039;Bit&#039;&#039;&#039;!!&#039;&#039;&#039;Switch (bit set = switch on)&#039;&#039;&#039;!!&#039;&#039;&#039;Correspondence in OpenTTD&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|0C||keepsmallairport||station.never_expire_airports&lt;br /&gt;
|-&lt;br /&gt;
|0D||newairports||1&lt;br /&gt;
|-&lt;br /&gt;
|0E||largestations||1&lt;br /&gt;
|-&lt;br /&gt;
|0F||longbridges||construction.longbridges&lt;br /&gt;
|-&lt;br /&gt;
|10||loadtime||0&lt;br /&gt;
|-&lt;br /&gt;
|12||presignals||1&lt;br /&gt;
|-&lt;br /&gt;
|13||extpresignals||1&lt;br /&gt;
|-&lt;br /&gt;
|16||enginespersist||vehicles.never_expire_vehicles&lt;br /&gt;
|-&lt;br /&gt;
|1B||multihead||1&lt;br /&gt;
|-&lt;br /&gt;
|1D||lowmemory||1&lt;br /&gt;
|-&lt;br /&gt;
|1E||generalfixes||1&lt;br /&gt;
|-&lt;br /&gt;
|27||moreairports||economy.station_noise_level&lt;br /&gt;
|-&lt;br /&gt;
|28||mammothtrains||1&lt;br /&gt;
|-&lt;br /&gt;
|29||trainrefit||1&lt;br /&gt;
|-&lt;br /&gt;
|2B||subsidiaries||0&lt;br /&gt;
|-&lt;br /&gt;
|2C||gradualloading||order.gradual_loading&lt;br /&gt;
|-&lt;br /&gt;
|32||(Set to bit 0 of unifiedmaglev mode)||1 (n/a)&lt;br /&gt;
|-&lt;br /&gt;
|33||(Set to bit 1 of unifiedmaglev mode)||1 (n/a)&lt;br /&gt;
|-&lt;br /&gt;
|34||bridgespeedlimits||1&lt;br /&gt;
|-&lt;br /&gt;
|36||eternalgame||1&lt;br /&gt;
|-&lt;br /&gt;
|37||newtrains||1&lt;br /&gt;
|-&lt;br /&gt;
|38||newrvs||1&lt;br /&gt;
|-&lt;br /&gt;
|39||newships||1&lt;br /&gt;
|-&lt;br /&gt;
|3A||newplanes||1&lt;br /&gt;
|-&lt;br /&gt;
|3B||signalsontrafficside||construction.signal_side&lt;br /&gt;
|-&lt;br /&gt;
|3C||electrifiedrailway||vehicle.disable_elrails&lt;br /&gt;
|-&lt;br /&gt;
|41 &amp;lt;ref&amp;gt;loadallgraphics is obsolete (and its bit unused) since revision 401. The next official versions were the 5/Jun/2006 nightly (402) and TTDPatch 2.5 beta 6 (472)&amp;lt;/ref&amp;gt;||loadallgraphics||1&lt;br /&gt;
|-&lt;br /&gt;
|43||semaphores||1&lt;br /&gt;
|-&lt;br /&gt;
|4A||newobjects (since r2364)||1&lt;br /&gt;
|-&lt;br /&gt;
|4B||enhancegui||0&lt;br /&gt;
|-&lt;br /&gt;
|4C||newagerating||0&lt;br /&gt;
|-&lt;br /&gt;
|4D||buildonslopes||construction.build_on_slopes&lt;br /&gt;
|-&lt;br /&gt;
|4E||fullloadany||1&lt;br /&gt;
|-&lt;br /&gt;
|4F||planespeed||1&lt;br /&gt;
|-&lt;br /&gt;
|50 &amp;lt;ref&amp;gt;moreindustriesperclimate is obsolete (and its bit unused) since TTDPatch 2.5 beta 2.&amp;lt;/ref&amp;gt;||moreindustriesperclimate||0&lt;br /&gt;
|-&lt;br /&gt;
|51||moretoylandfeatures||0&lt;br /&gt;
|-&lt;br /&gt;
|52||newstations||1&lt;br /&gt;
|-&lt;br /&gt;
|53||tracktypecostdiff||1&lt;br /&gt;
|-&lt;br /&gt;
|54||manualconvert||1&lt;br /&gt;
|-&lt;br /&gt;
|55||buildoncoasts||construction.build_on_slopes&lt;br /&gt;
|-&lt;br /&gt;
|56||canals||1&lt;br /&gt;
|-&lt;br /&gt;
|57||newstartyear||1&lt;br /&gt;
|-&lt;br /&gt;
|58||freighttrains||vehicle.freight_trains &amp;gt; 1&lt;br /&gt;
|-&lt;br /&gt;
|59||newhouses||1&lt;br /&gt;
|-&lt;br /&gt;
|5A||newbridges||1&lt;br /&gt;
|-&lt;br /&gt;
|5B||newtownnames||1&lt;br /&gt;
|-&lt;br /&gt;
|5C||moreanimation||1&lt;br /&gt;
|-&lt;br /&gt;
|5D||wagonspeedlimits||vehicle.wagon_speed_limits&lt;br /&gt;
|-&lt;br /&gt;
|5E||newshistory||1&lt;br /&gt;
|-&lt;br /&gt;
|5F||custombridgeheads||0&lt;br /&gt;
|-&lt;br /&gt;
|60||newcargodistribution||0&lt;br /&gt;
|-&lt;br /&gt;
|61||windowsnap||1&lt;br /&gt;
|-&lt;br /&gt;
|62||townbuildnoroads||not (economy.allow_town_roads or _generating_world)&lt;br /&gt;
|-&lt;br /&gt;
|63||pathbasedsignalling||1&lt;br /&gt;
|-&lt;br /&gt;
|64||aichoosechances||0&lt;br /&gt;
|-&lt;br /&gt;
|65||resolutionwidth||1&lt;br /&gt;
|-&lt;br /&gt;
|66||resolutionheight||1&lt;br /&gt;
|-&lt;br /&gt;
|67||newindustries||1&lt;br /&gt;
|-&lt;br /&gt;
|68||fifoloading||order.improved_load&lt;br /&gt;
|-&lt;br /&gt;
|69||townroadbranchprob||0&lt;br /&gt;
|-&lt;br /&gt;
|6A||tempsnowline||0&lt;br /&gt;
|-&lt;br /&gt;
|6B||newcargos||1&lt;br /&gt;
|-&lt;br /&gt;
|6C||enhancemultiplayer||1&lt;br /&gt;
|-&lt;br /&gt;
|6D||onewayroads||1&lt;br /&gt;
|-&lt;br /&gt;
|6E||irregularstations||1&lt;br /&gt;
|-&lt;br /&gt;
|6F||morestatistics||1&lt;br /&gt;
|-&lt;br /&gt;
|70||newsounds||1&lt;br /&gt;
|-&lt;br /&gt;
|71||autoreplace||1&lt;br /&gt;
|-&lt;br /&gt;
|72||autoslope||1&lt;br /&gt;
|-&lt;br /&gt;
|73||followvehicle||0&lt;br /&gt;
|-&lt;br /&gt;
|74||trams||1&lt;br /&gt;
|-&lt;br /&gt;
|75||enhancetunnels||0&lt;br /&gt;
|-&lt;br /&gt;
|76||shortrvs||1&lt;br /&gt;
|-&lt;br /&gt;
|77||articulatedrvs||1&lt;br /&gt;
|-&lt;br /&gt;
|78||dynamicengines||vehicle.dynamic_engines, since r12924&lt;br /&gt;
|-&lt;br /&gt;
|7E||variablerunningcosts (since r1421)||1&lt;br /&gt;
|-&lt;br /&gt;
|7F||set if any switches are on||1&lt;br /&gt;
|-&lt;br /&gt;
|80||-||1 (larger persistent storage, since 6391d49)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Michi cc</name></author>
	</entry>
	<entry>
		<id>https://newgrf-specs.tt-wiki.net/index.php?title=Standardized_Railtype_Scheme&amp;diff=3335</id>
		<title>Standardized Railtype Scheme</title>
		<link rel="alternate" type="text/html" href="https://newgrf-specs.tt-wiki.net/index.php?title=Standardized_Railtype_Scheme&amp;diff=3335"/>
		<updated>2012-12-20T16:01:35Z</updated>

		<summary type="html">&lt;p&gt;Michi cc: /* Speed limit class [*X**] */ Clarify use of eyecandy track classes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This railtype label scheme aims to bring order to the uncontrolled growth of railtype labels. It groups the rail types into what matters from a technical perspective. The scheme provides a standardized way of defining railtype labels, based on track gauge and type, speed class, allowable axle weight and electrification type.&lt;br /&gt;
&lt;br /&gt;
It is the explicit intent of this scheme to decouple track sets from vehicle sets to facilitate easy mixing. This way the player can select a track set of choice to go with a train set of choice. It allows the player to play with or without axle load classes, or with or without speed limit classes, simply by loading a track set that does or does not provide these features. In some cases it will also be possible to combine niche track sets, for instance a standard gauge track set with a narrow gauge and a metro track set.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== The Label Scheme ==&lt;br /&gt;
A railtype label consists of four characters. In this scheme, each position has a different purpose:&lt;br /&gt;
# Track gauge and type class (e.g. standard gauge rail, narrow gauge rail, monorail)&lt;br /&gt;
# Speed limit class&lt;br /&gt;
# Axle load class (maximum allowed axle weight for this track)&lt;br /&gt;
# Energy source type class&lt;br /&gt;
&lt;br /&gt;
In the next sections, each of the four positions will be explained.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Track gauge and type class [X***] ===&lt;br /&gt;
The first position in the railtype label defines track gauge and/or track type class. The following classes are currently defined:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! !!Track type/gauge&lt;br /&gt;
|- &lt;br /&gt;
|S ||Standard gauge rail&lt;br /&gt;
|-&lt;br /&gt;
|B ||Broad gauge rail&lt;br /&gt;
|-&lt;br /&gt;
|N ||Narrow gauge rail&lt;br /&gt;
|-&lt;br /&gt;
|n ||Secondary narrow gauge rail (e.g. when providing both metre and cape gauge, always use N in case of just one type of narrow gauge)&lt;br /&gt;
|-&lt;br /&gt;
|D ||Dual gauge rail, standard+broad gauge&lt;br /&gt;
|-&lt;br /&gt;
|d ||Dual gauge rail, standard+narrow gauge&lt;br /&gt;
|-&lt;br /&gt;
|M ||Monorail&lt;br /&gt;
|-&lt;br /&gt;
|L ||Magnetic Levitation&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Speed limit class [*X**] ===&lt;br /&gt;
The second position in the railtype label defines the speed limit class. These classes do not map to a fixed numeric value, but are used to define an internal speed limit order for the track set. This means that if your track set has two different speed limits for track types that are otherwise identical, you&#039;ll use letters A and B here. In case of three different speed limits, use A, B and C. In case your track set does not employ speed limits, always use A. Train sets do not care about the speed limit, and will always set the lowest speed class, i.e. A.&lt;br /&gt;
&lt;br /&gt;
This gives for instance the following options:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:left;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:left;&amp;quot;&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
! !!Speed limit class&lt;br /&gt;
|- &lt;br /&gt;
|A ||no speed limits&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:left;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;OR&amp;amp;nbsp;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:left;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:left;&amp;quot;&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
! !!Speed limit class&lt;br /&gt;
|- &lt;br /&gt;
|A ||low speed&lt;br /&gt;
|-&lt;br /&gt;
|B ||high speed&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:left;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;OR&amp;amp;nbsp;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:left;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:left;&amp;quot;&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
! !!Speed limit class&lt;br /&gt;
|- &lt;br /&gt;
|A ||low speed&lt;br /&gt;
|-&lt;br /&gt;
|B ||medium speed&lt;br /&gt;
|-&lt;br /&gt;
|C ||high speed&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:left;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;etc.&amp;amp;nbsp;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:left;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The speed limit class may also be used for some advanced features of the label scheme, like specialized track types and eyecandy purposes. Be careful not to break the compatibility with other sets when using the speed limit class for these purposes.&lt;br /&gt;
&lt;br /&gt;
An example of a special use is rack rail. In the French set it is used to give rack rail engines a higher speed and TE than normal rail engines when used on rack rail. When defining trains with a special speed limit class, always allow a fallback to speed limit class A via the railtype table.&lt;br /&gt;
&lt;br /&gt;
An example of eyecandy use are urban tracks. These are a variation of regular tracks, but with concrete ground tiles to better match the urban environment. Train sets must not define vehicles for eyecandy classes. If you think you have special vehicles that should only run on the eyecandy class, it is &#039;&#039;not&#039;&#039; eyecandy but a separate track gauge/type.&lt;br /&gt;
&lt;br /&gt;
The following special and eyecandy classes have been defined so far:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! !!Description !!Type !!Used by&lt;br /&gt;
|- &lt;br /&gt;
|A-H ||speed limits ||colspan=&amp;quot;2&amp;quot;|reserved&lt;br /&gt;
|- &lt;br /&gt;
|R ||rack rail ||special ||French Set Rails &lt;br /&gt;
|- &lt;br /&gt;
|S ||subterranean ||eyecandy ||Metro Track Set&lt;br /&gt;
|- &lt;br /&gt;
|U ||urban ||eyecandy ||Metro Track Set&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Axle load class [**X*] ===&lt;br /&gt;
The third position defines the axle weight limit. Heavy trains cannot run on tracks with a low axle weight limit; these trains need more expensive tracks with a heigher weight limit. There are five axle load classes &#039;&#039;&#039;A&#039;&#039;&#039; through &#039;&#039;&#039;E&#039;&#039;&#039;. &#039;&#039;&#039;A&#039;&#039;&#039; is for the lowest axle load limit, &#039;&#039;&#039;E&#039;&#039;&#039; for the highest. The exact axle load attached to each class is relative to the track gauge/type and trains in the set. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A train set should set the appropriate axle weight for each train via the railtype label, as to make the set work with track sets that do provide tracks with different weight limits, even if you don&#039;t care about it for your trainset. Split all vehicles of a certain track gauge/type into five groups of similar axle weight. The group with the lowest axle weights will get class &#039;&#039;&#039;A&#039;&#039;&#039;, the second lowest class &#039;&#039;&#039;B&#039;&#039;&#039;, etc. up to the group with the highest axle weights which will get class &#039;&#039;&#039;E&#039;&#039;&#039;. Do the same for the other track gauge/types if your train set has those.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A track set does not have to provide a dedicated track type for each axle weight limit. A track set that does not provide a dedicated track for each axle load class, must make sure to map all undefined axle load classes to a real railtype using property [[Action0/Railtypes#Alternate_rail_type_labels_.281D.29|1D (NFO)]] or [[NML:Railtypes#Railtype_properties|alternative_railtype_list (NML)]]. This way a train set can rely on all labels for all axle load classes being available. Example: if you only want to provide 2 axle load classes for standard gauge unelectrified with no speed limits, you can map SA&#039;&#039;&#039;A&#039;&#039;&#039;N + SA&#039;&#039;&#039;B&#039;&#039;&#039;N to SA&#039;&#039;&#039;C&#039;&#039;&#039;N and SA&#039;&#039;&#039;D&#039;&#039;&#039;N to SA&#039;&#039;&#039;E&#039;&#039;&#039;N if the cost difference between the two railtypes is high, or SA&#039;&#039;&#039;A&#039;&#039;&#039;N to SA&#039;&#039;&#039;B&#039;&#039;&#039;N and SA&#039;&#039;&#039;C&#039;&#039;&#039;N + SA&#039;&#039;&#039;D&#039;&#039;&#039;N to SA&#039;&#039;&#039;E&#039;&#039;&#039;N if the cost difference is low.&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t want to provide any axle load classes in your track set, it doesn&#039;t really matter what axle load class you choose for the track, as you&#039;ll be mapping all other classes to this track anyways. But the lowest or highest class are the obvious choice. Example: if your track set only provides narrow gauge unelectrified track with no speed limits and no axle load limits, you may use NA&#039;&#039;&#039;A&#039;&#039;&#039;N for the track label, and provide NA&#039;&#039;&#039;B&#039;&#039;&#039;N, NA&#039;&#039;&#039;C&#039;&#039;&#039;N, NA&#039;&#039;&#039;D&#039;&#039;&#039;N, NA&#039;&#039;&#039;E&#039;&#039;&#039;N in property [[Action0/Railtypes#Alternate_rail_type_labels_.281D.29|1D (NFO)]] or [[NML:Railtypes#Railtype_properties|alternative_railtype_list (NML)]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you need more than five axle load class, you may use lowercase letters for very low axle loads and continue the uppercase letters for very high axle loads. Be advised that your train set may not assume the existance of any other class than &#039;&#039;&#039;A&#039;&#039;&#039; through &#039;&#039;&#039;E&#039;&#039;&#039;, so when the range make sure to program your railtype table such that trains with such a class will fall back to class &#039;&#039;&#039;A&#039;&#039;&#039; or &#039;&#039;&#039;E&#039;&#039;&#039;. If you make a track set with an extended range, be aware that not all train sets will define trains for these tracks. In general: only do this in case of a train set with a matching track set.&lt;br /&gt;
&lt;br /&gt;
For the lowercase letters, &#039;&#039;&#039;b&#039;&#039;&#039; is lower than &#039;&#039;&#039;a&#039;&#039;&#039;, so for increasing axle load limits: b &amp;lt; a &amp;lt; A &amp;lt; B &amp;lt; C etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note that the axle load classes never map to a specific weight in tonnes. For that reason it does not make sense to add a numeric value for the axle load to the name of a track type or in the extended purchase info of a train. Instead use the relative expressions &#039;very low&#039;, &#039;low&#039;, &#039;medium&#039;, &#039;high&#039; and &#039;very high&#039; or use the class letters directly.&lt;br /&gt;
&lt;br /&gt;
=== Energy source type class [***X] ===&lt;br /&gt;
The last position defines the energy source type class. This is split in generic energy source types like overhead wires and third rail and specialized types like alternating and direct current.&lt;br /&gt;
&lt;br /&gt;
A track set that only uses specialized types, should map the generic types to the most suitable specialized type in the set.&lt;br /&gt;
&lt;br /&gt;
A vehicle set that uses specialized types should define a generic type as fallback, via the railtype table. If such a fallback is omitted, please note that certain vehicles may be unavailable depending on track set loaded.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! !!Generic energy type classes&lt;br /&gt;
|-&lt;br /&gt;
|N ||no electrification&lt;br /&gt;
|-&lt;br /&gt;
|E ||overhead wires/catenary electrification&lt;br /&gt;
|-&lt;br /&gt;
|3 ||3rd rail electrification&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! !!Specialized energy type classes !!Vehicle set fallback&lt;br /&gt;
|-&lt;br /&gt;
|Z ||3rd rail and catenary electrification || 3 or E&lt;br /&gt;
|-&lt;br /&gt;
|4 ||4th rail electrification || 3&lt;br /&gt;
|-&lt;br /&gt;
|T ||[http://en.wikipedia.org/wiki/Three-phase_AC_railway_electrification three phase AC electrification] || E&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; | &amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
|D ||DC catenary electrification || E&lt;br /&gt;
|-&lt;br /&gt;
|d ||low voltage DC catenary electrification (only when D also used in set) || E&lt;br /&gt;
|-&lt;br /&gt;
|A ||AC catenary electrification || E&lt;br /&gt;
|-&lt;br /&gt;
|a ||low voltage AC catenary electrification (only when A also used in set) || E&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If you want multi-voltage/current vehicles in your set (i.e. a train that can run on both AC and DC current), you have to define a dedicated railtype for those vehicles. Without the railtype, it&#039;s not possible to define vehicles with this property. If you only have vehicles that can run on either one type of voltage/current or on all types of voltage/current (e.g. a 2-system if you only have &#039;&#039;&#039;A&#039;&#039;&#039; and &#039;&#039;&#039;D&#039;&#039;&#039; tracks, or a 4-system in case of all &#039;&#039;&#039;A&#039;&#039;&#039;, &#039;&#039;&#039;a&#039;&#039;&#039;, &#039;&#039;&#039;D&#039;&#039;&#039; and &#039;&#039;&#039;d&#039;&#039;&#039;), then use the generic class &#039;&#039;&#039;E&#039;&#039;&#039; for vehicles that should be able to run on all different voltage/currents. Also the track set needs to have one at least one railtype with class &#039;&#039;&#039;E&#039;&#039;&#039; defined.&lt;br /&gt;
&lt;br /&gt;
Note that if you want more than one type of multi-voltage/current, you&#039;ll quickly get a combinatory explosion of railtype labels, so plan carefully or do not attempt it. For every different multi-voltage/current vehicle type a dedicated railtype is needed. If you want all possible combinations, then you need to define an additional 8 classes. It is not recommended to make your train/track set this complicated.&lt;br /&gt;
&lt;br /&gt;
Example approach for a 4-system set, with trains that can run on either one or all systems:&lt;br /&gt;
* &#039;&#039;&#039;E&#039;&#039;&#039;: generic catenary-powered electric engines. &amp;quot;universal&amp;quot; [4-system] if any of &#039;&#039;&#039;D&#039;&#039;&#039;/&#039;&#039;&#039;d&#039;&#039;&#039;/&#039;&#039;&#039;A&#039;&#039;&#039;/&#039;&#039;&#039;a&#039;&#039;&#039; are defined.&lt;br /&gt;
* &#039;&#039;&#039;A&#039;&#039;&#039;: generic AC catenary electric engines. 25kV only if &#039;&#039;&#039;a&#039;&#039;&#039; also defined. Vehicle sets should use &#039;&#039;&#039;E&#039;&#039;&#039; as fallback, if defining an engine for &#039;&#039;&#039;A&#039;&#039;&#039;;&lt;br /&gt;
* &#039;&#039;&#039;a&#039;&#039;&#039;: 15kV AC catenary electric engines. Only defined if &#039;&#039;&#039;A&#039;&#039;&#039; also defined. Vehicle sets should use &#039;&#039;&#039;A&#039;&#039;&#039; and &#039;&#039;&#039;E&#039;&#039;&#039; as fallback, if defining an engine for &#039;&#039;&#039;a&#039;&#039;&#039;;&lt;br /&gt;
* &#039;&#039;&#039;D&#039;&#039;&#039;: generic DC catenary electric engines. 3kV if &#039;&#039;&#039;d&#039;&#039;&#039; also defined. Vehicle sets should use &#039;&#039;&#039;E&#039;&#039;&#039; as fallback, if defining an engine for &#039;&#039;&#039;D&#039;&#039;&#039;;&lt;br /&gt;
* &#039;&#039;&#039;d&#039;&#039;&#039;: 1.5kV DC catenary electric engines. Only defined if &#039;&#039;&#039;D&#039;&#039;&#039; also defined. Vehicle sets should use &#039;&#039;&#039;D&#039;&#039;&#039; and &#039;&#039;&#039;E&#039;&#039;&#039; as fallback, if defining an engine for &#039;&#039;&#039;d&#039;&#039;&#039;.&lt;br /&gt;
For a 2-system set, you can simply drop &#039;&#039;&#039;a&#039;&#039;&#039; and &#039;&#039;&#039;d&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Standard labels: RAIL, ELRL, MONO, MGLV ===&lt;br /&gt;
It&#039;s not possible to undefine the standard railtypes RAIL, ELRL, MONO and MGLV. The game will always add those if there are vehicles defined for these track types. As a result, for a track set it&#039;s best not to ignore those standard labels, but rather work with them and define them in the set. If your track set does not have monorail or maglev tracks, there of course is no need to define those. But if your track set defines anything that resembles unelectrified or electrified rail, you should use the RAIL and ELRL labels. Matching labels from the above scheme will then be defined in property [[Action0/Railtypes#Alternate_rail_type_labels_.281D.29|1D (NFO)]] or [[NML:Railtypes#Railtype_properties|alternative_railtype_list (NML)]].&lt;br /&gt;
&lt;br /&gt;
As vehicles from NewGRFs that do not use explicit railtypes will end up on these standard railtypes, you should use RAIL instead of whatever type could be regarded as the most commonly used unelectrified type, ELRL instead of the most commonly used electrified type and so on. The label according to this scheme is then set as an alternate.&lt;br /&gt;
&lt;br /&gt;
== Summary for track sets ==&lt;br /&gt;
This section summarizes the above for track sets.&lt;br /&gt;
&lt;br /&gt;
; [X***] Track gauge and type class&lt;br /&gt;
* Define at least one track type for every track gauge/type class you want in your set.&lt;br /&gt;
* If you only provide tracks for one gauge/type, consider leaving some free railtypes so a player can load an additional set for some other type.&lt;br /&gt;
; [*X**] Speed limit class&lt;br /&gt;
* Make sure class A is always available, either directly or via an alternate label.&lt;br /&gt;
* Use only class A if you don&#039;t want speed limits;&lt;br /&gt;
* With speed limits, A is the lowest speed limit. Continue with B, C, etc. for increasing speed limits;&lt;br /&gt;
* The speed class can also be used to implement additional eye-candy track types, use letters higher in the alphabet for this.&lt;br /&gt;
; [**X*] Axle load class&lt;br /&gt;
* Always define all classes A through E for every track type class / electrification combination, either:&lt;br /&gt;
** Directly via a real railtype definition;&lt;br /&gt;
** Indirectly via the alternate rail type label list, property [[Action0/Railtypes#Alternate_rail_type_labels_.281D.29|1D (NFO)]] or [[NML:Railtypes#Railtype_properties|alternative_railtype_list (NML)]].&lt;br /&gt;
* Extend the predefined classes only if you also provide a train set that makes use of these.&lt;br /&gt;
; [***X] Energy source type class&lt;br /&gt;
* If your set only uses specialized classes, always map the generic classes to the closest matching specialized type via property 1D.&lt;br /&gt;
; Standard labels [RAIL, ELRL, MONO, MGLV]&lt;br /&gt;
* Always define the standard labels when possible, instead of what would be the equivalent of the standard label in this scheme.&lt;br /&gt;
* Map the equivalent labels from this scheme to the standard labels using property [[Action0/Railtypes#Alternate_rail_type_labels_.281D.29|1D (NFO)]] or [[NML:Railtypes#Railtype_properties|alternative_railtype_list (NML)]].&lt;br /&gt;
&lt;br /&gt;
Or, put differently, for each gauge/type, select one or more energy source types. For each type/energy combination provide all axle load classes for the speed class &amp;quot;A&amp;quot;, either as a real type or as an alternate of another type. Provide more types with a different speed letter if you want to provide several different speeds or other eye-candy tracks.&lt;br /&gt;
&lt;br /&gt;
== Summary for train sets ==&lt;br /&gt;
This section summarizes the above for train sets.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
; [X***] Track gauge and type class&lt;br /&gt;
* Use the track type class that matches the vehicle;&lt;br /&gt;
* Define a fallback type via the railtype table in case you want the vehicle to be available on a different track if no matching track set is loaded.&lt;br /&gt;
** Specialized subtypes like &amp;quot;n&amp;quot; might not always be available. If you want those vehicles to be still available then, fall back the the generic class (e.g. &amp;quot;N&amp;quot;).&lt;br /&gt;
; [*X**] Speed limit class &lt;br /&gt;
* Always use class A for every vehicle.&lt;br /&gt;
; [**X*] Axle load class&lt;br /&gt;
* Use all classes A through E according to the maximum axle weight of the vehicle.&lt;br /&gt;
* Extend the predefined classes only if you also provide a track set that makes use of these;&lt;br /&gt;
** When extending the predefined classes A through E, define a fallback type via the railtype table in case you want the vehicle to be available if no matching track set is loaded.&lt;br /&gt;
; [***X] Energy source type class&lt;br /&gt;
* Use the energy source type class that matches the vehicle;&lt;br /&gt;
* When using specialized classes, define a fallback type via the railtype table in case you want the vehicle to be available if no matching track set is loaded.&lt;br /&gt;
; Standard labels [RAIL, ELRL, MONO, MGLV]&lt;br /&gt;
* Define a fallback type to the standard labels via the railtype table in case you want the vehicle to be available on the standard tracks if no matching track set is loaded.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Be as specific as you want when selecting the railtype, it is the job of the track set to select a playable, reduced subset out of all possible type combinations.&lt;br /&gt;
&lt;br /&gt;
== In case you&#039;re not convinced by this scheme ==&lt;br /&gt;
Adopting this scheme gives the player freedom to use any track set in combination with any train set that follow the scheme. &lt;br /&gt;
&lt;br /&gt;
This means that you can make your train set compatible with track sets that provide axle load classes, and track sets that provide speed limits, and at the same time with track sets that provide none of this. This way, the player can decide to play with or without axle load classes, or with or without speed limits, simply by loading a track set that does or does not provide these features.&lt;br /&gt;
&lt;br /&gt;
And for your track set, it means that you can make it as simple or as complicated as you want (within the 16 track type limit), while not having to worry about compatibility with train sets.&lt;br /&gt;
&lt;br /&gt;
Still not convinced? Feel free to use railtype labels of your own, but know that you will likely come to regret that at some point in the future.&lt;br /&gt;
&lt;br /&gt;
==Forum topic==&lt;br /&gt;
If you want to discuss the standardized railtype scheme or have any questions about it, you can visit [http://www.tt-forums.net/viewtopic.php?t=59379 the forum topic].&lt;/div&gt;</summary>
		<author><name>Michi cc</name></author>
	</entry>
	<entry>
		<id>https://newgrf-specs.tt-wiki.net/index.php?title=GlobalVariables&amp;diff=3222</id>
		<title>GlobalVariables</title>
		<link rel="alternate" type="text/html" href="https://newgrf-specs.tt-wiki.net/index.php?title=GlobalVariables&amp;diff=3222"/>
		<updated>2012-07-08T18:49:58Z</updated>

		<summary type="html">&lt;p&gt;Michi cc: /* Misc. GRF Features (1E / 9E) */ Ambient sound effects are support by OTTD for some time now.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
{|&lt;br /&gt;
!colspan=3|&#039;&#039;&#039;Variable&#039;&#039;&#039;&lt;br /&gt;
!rowspan=2|[[GRFActionsDetailed|&#039;&#039;&#039;Size&#039;&#039;&#039;]]&lt;br /&gt;
!rowspan=2|&#039;&#039;&#039;Versions&#039;&#039;&#039;&lt;br /&gt;
!rowspan=2|&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|[[VariationalAction2 | VA2]]||A[[Action6|6]]/[[Action7|7]]/[[Action9|9]]/[[ActionD|D]]&amp;lt;br&amp;gt;(read)||[[ActionD|ActD]]&amp;lt;br&amp;gt;(write)&lt;br /&gt;
|-&lt;br /&gt;
|00||80||  ||W||{{ottdp|0.6|2.0}}||current date (counted as days from 1920)&amp;lt;ref name=&amp;quot;startdate&amp;quot;&amp;gt;{{ottdp|0.7}} In multiplayer games OpenTTD doesn&#039;t report the current date and year to actions 6,7,9 and D, but the date and year the game was loaded. The reason lies in the fact that it was seen that use of this variable leads to desyncs in network games.&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|01||81||  ||B||{{ottdp|0.6|2.0}}|| Current year (count from 1920, max. 2175 even with eternalgame)&amp;lt;ref name=&amp;quot;startdate&amp;quot;/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|02||82||  ||B/D||{{ottdp|0.6|2.0}}|| current month (0-11) in bits 0-7; the higher bytes contain unusable junk.&amp;lt;ref name=&amp;quot;startdate&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;{{ottdp|0.7|ottdrev=r13594}} Since OpenTTD r13594 &#039;day of month&#039; (0-30) is stored in bits 8-12, bit 15 is set in leapyears and &#039;day of year&#039;(0-364 resp. 365) is stored in bits 16-24. All other bits are reserved and should be masked.&lt;br /&gt;
|-&lt;br /&gt;
|03||83||  ||B||{{ottdp|0.6|2.0}}|| Current climate: 00 = temp, 01 = arctic, 02 = trop, 03 = toyland&lt;br /&gt;
|-&lt;br /&gt;
|  ||84||  ||D||{{ottdp|0.6|2.0}}|| [[GrfLoadingStages|GRF loading stage]], see [[#GRF_Loading_stage_.28-_.2F_84.29|below]]&lt;br /&gt;
|-&lt;br /&gt;
|  ||85||  ||B||{{ottdp|0.6|2.0}}|| [[TTDPatchFlags|TTDPatch flags]]: only for bit tests&lt;br /&gt;
|-&lt;br /&gt;
|06||86||  ||B||{{ottdp|0.6|2.0}}|| Road traffic side: bit 4 clear=left, set=right; other bits are reserved and must be masked.&lt;br /&gt;
|-&lt;br /&gt;
|  ||(87)||(87)||B||{{ottdp|no|no}}|| No longer used since TTDPatch 2.0. (was width of &amp;quot;€&amp;quot; character)&lt;br /&gt;
|-&lt;br /&gt;
|  ||88||  ||4*B||{{ottdp|0.6|2.0}}|| Checks specified GRFID (see [[Action7#condition-type|condition-types]])&amp;lt;ref&amp;gt;The value of variable 88 can only be tested with the GRFID tests.&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|09||89||  ||W||{{ottdp|0.6|2.0}}|| date fraction, incremented by 0x375 every engine tick&lt;br /&gt;
|-&lt;br /&gt;
|0A||8A||  ||W||{{ottdp|0.6|2.0}}|| animation counter, incremented every tick&lt;br /&gt;
|-&lt;br /&gt;
|0B||8B||  ||D||{{ottdp|no|2.0}}|| [[Version_numbers#TTDPatch_version|TTDPatch version]], see [[#TTDPatch_Version_.280B_.2F_8B.29|below]] &amp;lt;ref&amp;gt;OpenTTD reports some arbitrary TTDPatch 2.6 version number to make old GRFs work, which do not know about OpenTTD. Do not rely on this for new NewGRFs.&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;versionchecks&amp;quot;&amp;gt;It is generally not useful to check version variables using Action 7. If you want to skip certain actions which are incompatible to some versions, you want to skip them during all loading stages. So, use Action 9.&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|0C||  ||  ||W||{{ottdp|0.6|2.5}}|| current [[Callbacks|callback]] ID (feature-specific), set to 00 when not in a callback&lt;br /&gt;
|-&lt;br /&gt;
|0D||8D||  ||B||{{ottdp|0.6|2.5}}|| TTD version, 0=DOS, 1=Windows&lt;br /&gt;
|-&lt;br /&gt;
|0E||8E||8E||B||{{ottdp|0.6|2.5}}|| Y-Offset for train sprites&lt;br /&gt;
|-&lt;br /&gt;
|0F||8F||8F||3*B||{{ottdp|0.6|2.5}}|| Rail track type cost factors&lt;br /&gt;
|-&lt;br /&gt;
|10||  ||  ||D||{{ottdp|0.6|2.5}}|| Extra callback info 1, see [[#Extra_callback_info_.2810_.2F_-.29_and_.2818_.2F_-.29|below]].&lt;br /&gt;
|-&lt;br /&gt;
|11||  ||  ||B||{{ottdp|no|2.5}}|| current rail tool type (for station callbacks)&lt;br /&gt;
|-&lt;br /&gt;
|12||92||  ||B||{{ottdp|0.6|2.5}}|| Game mode, 0 in title screen, 1 in game and 2 in editor&lt;br /&gt;
|-&lt;br /&gt;
|13||93||93||W||{{ottdp|no|2.5|ttdprev=2.0.1 alpha 39}}|| Tile refresh offset to left &amp;lt;ref name=&amp;quot;tilefresh&amp;quot;&amp;gt;See [[ActionD#Tile+refresh+offsets|Action D]] for more details on tile refresh offsets and their use.&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|14||94||94||W||{{ottdp|no|2.5|ttdprev=2.0.1 alpha 39}}|| Tile refresh offset to right &amp;lt;ref name=&amp;quot;tilefresh&amp;quot;/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|15||95||95||W||{{ottdp|no|2.5|ttdprev=2.0.1 alpha 39}}|| Tile refresh offset upwards &amp;lt;ref name=&amp;quot;tilefresh&amp;quot;/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|16||96||96||W||{{ottdp|no|2.5|ttdprev=2.0.1 alpha 39}}|| Tile refresh offset downwards &amp;lt;ref name=&amp;quot;tilefresh&amp;quot;/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|  ||97||97||B||{{ottdp|no|2.5}}|| Fixed snow line height &amp;lt;ref&amp;gt;This variable is a deprecated way to set the snow line height via NewGRFs using [[ActionD]]. It is superseded by the [[Action0/Global Settings#Snow_line_height_table_.2810.29 | Action 0 snow line height table]]. To read the current snow line with [[VariationalAction2 | VarAct2]] in a running game, use variable 20 instead.&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;heightlevel&amp;quot;&amp;gt;{{grfTill|7}} For GRF version 7 and below these variable are multiples of 8; {{grfFrom|8}} for GRF version 8 and above they directly state the heightlevel as multiple of 1.&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|18||  ||  ||D||{{ottdp|0.6|2.5}}|| Extra callback info 2, see [[#Extra_callback_info_.2810_.2F_-.29_and_.2818_.2F_-.29|below]].&lt;br /&gt;
|-&lt;br /&gt;
|  ||99||99||D||{{ottdp|no|2.5}}|| Global ID offset&lt;br /&gt;
|-&lt;br /&gt;
|1A||9A||  ||D||{{ottdp|0.6|2.5}}|| Has always all bits set; you can use this to make unconditional jumps&lt;br /&gt;
|-&lt;br /&gt;
|1B||  ||  ||B||{{ottdp|no|2.5}}|| display options; bit 0=town names, 1=station names, 2=signs, 3=animation, 4=transparency, 5=full detail&lt;br /&gt;
|-&lt;br /&gt;
|1C||  ||  ||D||{{ottdp|0.6|2.5}}|| result from most recent VarAction2&lt;br /&gt;
|-&lt;br /&gt;
|1D||9D||  ||D||{{ottdp|0.6|2.5}}|| TTD Platform, 0=TTDPatch, 1=OpenTTD &amp;lt;ref name=&amp;quot;versionchecks&amp;quot;/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|1E||9E||9E||D||{{ottdp|0.6|2.5}}|| Misc. GRF Features&lt;br /&gt;
|-&lt;br /&gt;
|  ||  ||9F||D||{{ottdp|no|2.5}}|| writable only: Locale-dependent settings&lt;br /&gt;
|-&lt;br /&gt;
|20||  ||  ||B||{{ottdp|0.6|2.5}}|| Current snow line height, FFh if snow isn&#039;t present at all &amp;lt;ref name=&amp;quot;heightlevel&amp;quot;/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|21||A1||  ||D||{{ottdp|0.6|no}}|| [[Version_numbers#OpenTTD_version|OpenTTD version]], see [[#OpenTTD_Version_.2821_.2F_A1.29|below]]. &amp;lt;ref name=&amp;quot;versionchecks&amp;quot;/&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|22||A2||  ||D||{{ottdp|0.7|2.6|ottdrev=r12499|ttdprev=r1857}}|| Difficulty level: 00= easy, 01=medium, 02=hard, 03=custom&lt;br /&gt;
|-&lt;br /&gt;
|23||A3||  ||D||{{ottdp|0.7|2.6|ottdrev=r13376|ttdpref=r2048}}|| Current date long format&lt;br /&gt;
|-&lt;br /&gt;
|24||A4||  ||D|||{{ottdp|0.7|2.6|ottdrev=r13376|ttdprev=r2048}}|| Current year zero based&lt;br /&gt;
|-&lt;br /&gt;
|25||  ||  ||D||{{ottdp|0.7|ottdrev=r15739}}|| GRFID of the grf that contains the corresponding Action3. Useful when accessing the &amp;quot;related&amp;quot; object. Currently only supported for vehicles.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
All other variable numbers are reserved and must not be used.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Special variables ==&lt;br /&gt;
&lt;br /&gt;
=== GRF Loading stage (- / 84) ===&lt;br /&gt;
&lt;br /&gt;
Variable 84 is a BYTE variable up to TTDPatch 2.5r1220. Its lower byte (bits 0..7) are 0 for the post-load and GRF initialization stages and 01 for all other stages. The remaining bits are a bitmask, and including the lower byte have the following meaning:&lt;br /&gt;
{|&lt;br /&gt;
!Bit!!Version!!Meaning&lt;br /&gt;
|-&lt;br /&gt;
|0||{{ottdp|0.6|2.0}}||Set after the &amp;quot;Initialization&amp;quot; stage completes&lt;br /&gt;
|-&lt;br /&gt;
|1..7||{{ottdp|0.6|2.0}}||Always clear&lt;br /&gt;
|-&lt;br /&gt;
|8||{{ottdp|0.6|2.5|ttdprev=r1220}}||Set during the &amp;quot;Reserve&amp;quot; stage only&lt;br /&gt;
|-&lt;br /&gt;
|9||{{ottdp|0.6|2.5|ttdprev=r1220}}||Set during the &amp;quot;Activate&amp;quot; stage only&lt;br /&gt;
|-&lt;br /&gt;
|10||{{ottdp|0.6|2.5|ttdprev=r1220}}||Set during the &amp;quot;Test&amp;quot; stage only&lt;br /&gt;
|-&lt;br /&gt;
|11..15|| || Reserved. Do not test for them.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TTDPatch Version (0B / 8B) ===&lt;br /&gt;
Variable 8B has the following format: MMmrbbbb (though encoded in little endian as bb bb mr MM)&lt;br /&gt;
{|&lt;br /&gt;
!Element!!Meaning!!Value&lt;br /&gt;
|-&lt;br /&gt;
|MM||major||First number of the [[Version_numbers#TTDPatch_version|TTDPatch version]]&lt;br /&gt;
|-&lt;br /&gt;
|m||minor||Second number of the TTDPatch version&lt;br /&gt;
|-&lt;br /&gt;
|r||revision||Third number of the TTDPatch version&amp;lt;ref name=&amp;quot;rev&amp;quot;&amp;gt;For TTDPatch 2.0, r=7 and for TTDPatch 2.0.1 series, r=10 due to an oversight which used r=1..4 for TTDPatch 2.0 beta 1..4.&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|bbbb||build||Alpha/beta version number times ten (up to an including TTDPatch 2.5 beta 5), SVN revision (from TTDPatch 2.5 beta 5 r418 on)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Examples&lt;br /&gt;
{|&lt;br /&gt;
!Version!!Variable 8B!!Elements&lt;br /&gt;
|-&lt;br /&gt;
|1.9.1 alpha 50||019101F4|| MM=01, m=9, r=1, bbbb=50*10=01F4&lt;br /&gt;
|-&lt;br /&gt;
|2.0 beta 4||02040028||MM=02, m=0, r=4&amp;lt;ref name=&amp;quot;rev&amp;quot;/&amp;gt;, bbbb=4*10=0028&lt;br /&gt;
|-&lt;br /&gt;
|2.0 final||02070046||MM=02, m=0, r=7&amp;lt;ref name=&amp;quot;rev&amp;quot;/&amp;gt;, bbbb=70=0046&lt;br /&gt;
|-&lt;br /&gt;
|2.0 rev 1||02070050||MM=02, m=0, r=7&amp;lt;ref name=&amp;quot;rev&amp;quot;/&amp;gt;, bbbb=80=0050&lt;br /&gt;
|-&lt;br /&gt;
|2.0.1 alpha 3||020A001E||MM=02, m=0, r=10&amp;lt;ref name=&amp;quot;rev&amp;quot;/&amp;gt;, bbbb=3*10=001E&lt;br /&gt;
|-&lt;br /&gt;
|2.5 beta 2||02500014||MM=02, m=5, r=0, bbbb=2*10=0014&lt;br /&gt;
|-&lt;br /&gt;
|2.5 rev631||02500631||MM=02, m=5, r=0, bbbb=631=0631&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To detect versions from TTDPatch 2.5 rev419 and up correctly, check that var. 8B is 02500419 or higher, or replace 0419 with the actual required revision (using the revision number as hex digits). Because SVN revisions are shared with other patch branches, it is important to check the actual patch version as well as the SVN revision.&lt;br /&gt;
&lt;br /&gt;
=== Y-Offset for train sprites (0E / 8E) ===&lt;br /&gt;
&lt;br /&gt;
Since train sprites must normally have the same offsets on the map and in the depot view, they will appear either too low on the map or too high in the depot view. This variable moves all vehicles in the depot view down by this many pixels.&lt;br /&gt;
&lt;br /&gt;
{{ottdp|1.0|no|ottdrev=r16867}} Since OpenTTD r16867 this variable works per grf file, that is: It only affects trains defined in the same grf.&lt;br /&gt;
&lt;br /&gt;
=== Rail track type cost factors (0F / 8F) ===&lt;br /&gt;
&lt;br /&gt;
This variable is a collection of three bytes that are used as multipliers for track costs when the &amp;quot;trackcostdiff&amp;quot; switch is on. The value of 08 is the baseline value that is used by standard TTD.&lt;br /&gt;
&lt;br /&gt;
The defaults are the following:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
!Values!!Track types!!Electrified railways setting&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|08, 10, 18||Regular, Monorail, Maglev||off&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|08, 0D, 10||Regular, Electric, Monorail/Maglev||on&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Extra callback info (10 / -) and (18 / -) ===&lt;br /&gt;
These variables have callback specific meanings. They are described along the individual [[callbacks]].&lt;br /&gt;
&lt;br /&gt;
Additionally they are used outside of callbacks for these special purposes:&lt;br /&gt;
{| |-&lt;br /&gt;
! [[Features|Feature]] !! Usage&lt;br /&gt;
|-&lt;br /&gt;
| Vehicles || Used to distinguish drawing of vehicles in the GUI or on the map. See [[Action2/Vehicles#Introduction|Action2]].&lt;br /&gt;
|-&lt;br /&gt;
| Stations || Used to compose station tiles with sprites from different Action-1-2-3 chains, or to draw custom foundations. See [[Action0/Stations#General_Flags_.2813.29|General station flags]] and [[AdvancedSpriteLayout]].&lt;br /&gt;
|-&lt;br /&gt;
| Railtypes || Used to distinguish between the type of tunnel portal or signal requested. See [[Action3/Railtypes#Tunnel_portal_overlay_.280A.29|Railtype tunnel portal overlay]] or [[Action3/Railtypes#Signal_sprites_.280B.29|Railtype signal sprites]] for details, respectively.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Tile refresh offsets (13,14,15,16 / 93,94,95,96) ===&lt;br /&gt;
&lt;br /&gt;
These four offsets define the size and position of the rectangle refreshed when TTD decides to refresh a tile. The basis of the calculations is the pixel coordinate of the north corner of the tile.&lt;br /&gt;
&lt;br /&gt;
After calculating it, TTD subtracts offset_left from it to get the x coordinate of the left edge, adds offset_right to get the x coordinate of the right edge, subtracts offset_up to get the y coordinate of the top edge and adds offset_down to get the y coordinate of the bottom edge. This results in refreshing (offset_left+offset_right)*(offset_up+offset_down) pixels. The default values of these variables are 31, 36, 122 and 32, respectively.&lt;br /&gt;
&lt;br /&gt;
Reading these values is not too useful, but you can modify them using action D as well, so your sprites that would exceed the original limits can still be redrawn and animated properly. Please note that TTD uses these values for every tile, so specifying too high values may slow the game down. Please also note that these variables are specified as dwords for technical reasons, but only the bottom word will be used.&lt;br /&gt;
&lt;br /&gt;
Since these values are global to the entire game, you shouldn&#039;t just overwrite them with an action D. Instead, you should first check if they&#039;re big enough for you by using action 7, and skip your action D if they are. This way, the variables will be set to the maximal value needed, not just the value needed for the last grf in the list.&lt;br /&gt;
&lt;br /&gt;
=== Snow line height (- / 97) ===&lt;br /&gt;
&lt;br /&gt;
This is only active if the tempsnowline switch is on. It defaults to FF (no snow) and 38 (GRF version &amp;lt; 8) resp. 07 (GRF version &amp;gt;= 8) in the temperate and arctic climates, respectively.&lt;br /&gt;
&lt;br /&gt;
{{grfTill|7}} For GRF version 7 and below it must be set to a multiple of 8, which is one level of height difference.&lt;br /&gt;
&lt;br /&gt;
{{grfFrom|8}} For GRF version 8 and above the heightlevel is set directly as multiple of 1.&lt;br /&gt;
&lt;br /&gt;
=== Global ID offset (- / 99) ===&lt;br /&gt;
&lt;br /&gt;
Setting this variable will add the given value to all the relevant IDs in subsequent action 0, action 3 (&#039;&#039;except&#039;&#039; livery overrides), action 4 (&#039;&#039;except&#039;&#039; generic texts) and action A entries. This is a more convenient way of applying the result of a GRF resource request. Setting this variable applies only to the current .grf file only.&lt;br /&gt;
&lt;br /&gt;
In detail, it affects the following elements:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
!Action!!Element modified&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|0||&amp;lt;tt&amp;gt;&amp;lt;Id&amp;gt;&amp;lt;/tt&amp;gt; (i.e., not property numbers)&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|3||&amp;lt;tt&amp;gt;&amp;lt;Ids...&amp;gt;&amp;lt;/tt&amp;gt; (i.e., not cargo types or cargo IDs, also not for livery overrides)&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|4||&amp;lt;tt&amp;gt;&amp;lt;Offset&amp;gt;&amp;lt;/tt&amp;gt; (not for generic texts, though)&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|A||&amp;lt;tt&amp;gt;&amp;lt;First-sprite&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Display options (1B / -) ===&lt;br /&gt;
The definition of variable 1B is slightly feature-dependent. For features that can be drawn transparently (stations, bridges, houses, industry tiles and objects) bit 4 is set if the current feature will be drawn normally, and clear if the current feature will be drawn transparently. For these purposes, airports are stations. For all other features, bit 4 is undefined.&lt;br /&gt;
&lt;br /&gt;
=== Misc. GRF Features (1E / 9E) ===&lt;br /&gt;
&lt;br /&gt;
This variable is a global bit mask of various patch features a grf file can enable. Please only set the bits using operation 08 (bitwise OR), or, if absolutely necessary, remove certain bits with operation 07 (bitwise AND). This ensures that you don&#039;t mess up the settings of other grf files.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
!Bit!!Value!!Version!!Feature&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|0||1||{{ottdp|no|2.5}}||Allow trees and fields in the desert&lt;br /&gt;
|-&lt;br /&gt;
|1||2||{{ottdp|0.6|2.5}}||Show pavement and lights in desert towns&lt;br /&gt;
|-&lt;br /&gt;
|2||4||{{ottdp|no|2.5}}||Fields have a height, using a 3D bounding box&lt;br /&gt;
|-&lt;br /&gt;
|3||8||{{ottdp|0.6|2.5}}||Display train vehicles with full width of 32 pixels in depot window (instead of 29 pixels)&amp;lt;ref&amp;gt;Since {{ottdp|1.0|no|ottdrev=r16867}} this flag works per grf file, that is: It only affects trains defined in the same GRF.&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|4||10||{{ottdp|1.2|2.6|ottdrev=r23114|ttdprev=r821}}||Enable ambient sound effect callback 144&lt;br /&gt;
|-&lt;br /&gt;
|5||20||{{ottdp|no|2.5/2.6|ttdprev=r1439, will be in yet unreleased 2.5 beta 10}}||Enable catenaries over the third track type (only with electrifiedrailway on)&lt;br /&gt;
|-&lt;br /&gt;
|31||80000000||{{ottdp|no|2.5}}||Only to be set by ttdpbase(w).grf for identification&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Remarks:&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example code for setting bit 3:&lt;br /&gt;
&lt;br /&gt;
   24 * 9     0D 9E 08 9E FF 08 00 00 00&lt;br /&gt;
&lt;br /&gt;
(Here, the first 08 indicates the bitwise OR operation, and 08 00 00 00 is the value to OR var.9E with.)&lt;br /&gt;
&lt;br /&gt;
=== Locale-dependent settings (1F / 9F) ===&lt;br /&gt;
&lt;br /&gt;
This variable is a doubleword in the format rrccmmll, where the meaning of the bytes is:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
!Byte!!Meaning&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|rr||Reserved for future use, just put zero here for now&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|cc||Default currency to be used when the game is first started. It can be larger than 5 to select one of the currencies added via morecurrencies. If this value is larger than 5 while morecurrencies is disabled, US dollars will be used instead.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|mm||Default measurement system to be used when the game is first started. 00h means the imperial system (miles), 01h means the metric system (kilometers), other values are forbidden.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|ll||Language ID. By setting this byte, you can override the default language ID and allow other GRFs to supply correctly localized texts. (The other GRF can check for this value in action 4s)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Reading this variable isn&#039;t reliable, so you must only write to it. Please also note that the cc and mm parts are considered only while loading the title screen for the first time, changing them later is ignored.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: This variable is reset after the initialization stage. Only changes during the activation stage are considered. This way, GRFs disabled in newgrf.cfg won&#039;t change the language and/or default settings. If you want to modify the cc or mm part, make sure the corresponding action D isn&#039;t skipped by an earlier action 7 or 9. In particular, if your GRF isn&#039;t available for the tropic climate, make sure you set variable 9F before the climate check, since the default title screen is tropic, and your climate check will fail on it.&lt;br /&gt;
&lt;br /&gt;
=== OpenTTD Version (21 / A1) ===&lt;br /&gt;
Variable A1 has the following format: Mmrbbbbb (though encoded in little endian as bb bb rb Mm). This variable has only a usefull meaning when variable 9D is 1 (OpenTTD). This variable can be used since OpenTTD r11330.&lt;br /&gt;
{|&lt;br /&gt;
!Element!!Meaning!!Value&lt;br /&gt;
|-&lt;br /&gt;
|M||major||First number of the [[Version_numbers#OpenTTD_version|OpenTTD version]]&lt;br /&gt;
|-&lt;br /&gt;
|m||minor||Second number of the OpenTTD version&lt;br /&gt;
|-&lt;br /&gt;
|r||revision||Third number of the OpenTTD version&lt;br /&gt;
|-&lt;br /&gt;
|bbbbb||build||Subversion revision of a build leading towards a release. When a final release is done 80000h is set.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The presence of 80000h (bit 19 set) means that a release always has a higher version number than any builds leading to that release.&lt;br /&gt;
&lt;br /&gt;
Examples&lt;br /&gt;
{|&lt;br /&gt;
!Version!!Variable A1!!Elements&lt;br /&gt;
|-&lt;br /&gt;
|0.6.0 r11330||06002C42||M=0, m=6, r=0, bbbbb=11330=2C42&lt;br /&gt;
|-&lt;br /&gt;
|0.6.0 (release)||06080000||M=0, m=6, r=0, bbbbb=0=80000 (due to release)&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Michi cc</name></author>
	</entry>
	<entry>
		<id>https://newgrf-specs.tt-wiki.net/index.php?title=VariationalAction2/Vehicles&amp;diff=3212</id>
		<title>VariationalAction2/Vehicles</title>
		<link rel="alternate" type="text/html" href="https://newgrf-specs.tt-wiki.net/index.php?title=VariationalAction2/Vehicles&amp;diff=3212"/>
		<updated>2012-07-02T19:33:31Z</updated>

		<summary type="html">&lt;p&gt;Michi cc: /* Query variable of n-th vehicle in chain (61) */ CB 2D doesn&amp;#039;t modify properties either.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right; padding-left:12px; background:none;&amp;quot;&amp;gt;{{NFONavVehicles}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
== Variables ==&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
!Variable!![[GRFActionsDetailed|Size]]!!Version!!Description!!Available in purchase list&lt;br /&gt;
|+&lt;br /&gt;
|10||D||{{ottdp|1.2|no|ottdrev=r23080}}||Pick sprites for different GUI windows - See [[Action2/Vehicles]].||{{ottdp|1.2|no|ottdrev=r23080}}&lt;br /&gt;
|+&lt;br /&gt;
|40||D||{{ottdp|0.6|2.5}}||Position in consist and length of consist||no&lt;br /&gt;
|+&lt;br /&gt;
|41||D||{{ottdp|0.6|2.5}}||Position in and length of chain of consecutive vehicles with same ID||no&lt;br /&gt;
|+&lt;br /&gt;
|42||D||{{ottdp|0.6|2.5}}||Cargo types transported by consist||no&lt;br /&gt;
|+&lt;br /&gt;
|43||D||{{ottdp|0.6|2.5}}||Player info||{{ottdp|0.6|2.5|ottdrev=r4611|ttdprev=beta 2}}&lt;br /&gt;
|+&lt;br /&gt;
|44||D||{{ottdp|0.6|2.5|ttdprev=2.0.1 alpha 48}}||Aircraft info||no&lt;br /&gt;
|+&lt;br /&gt;
|45||D||{{ottdp|0.6|2.5|ttdprev=2.0.1 alpha 58}}||Curvature info||no&lt;br /&gt;
|+&lt;br /&gt;
|46||D||{{ottdp|0.6|2.5|ttdprev=2.0.1 alpha 59}}||Motion counter||no&lt;br /&gt;
|+&lt;br /&gt;
|47||D||{{ottdp|0.6|2.5}}||Vehicle cargo info||{{ottdp|0.7|no|ottdrev=r15542}} &amp;lt;ref name=&amp;quot;var47&amp;quot;&amp;gt;Variable 47 refers to the default cargo of the vehicle, when in purchase list. This differs from the cargo used in Action 3, which is 0xFF in purchase list. The &amp;quot;refit cycle&amp;quot; (F2) is currently always zero in the purchase list.&amp;lt;/ref&amp;gt;&lt;br /&gt;
|+&lt;br /&gt;
|48||D||{{ottdp|0.6|2.5}}||Vehicle type information||{{ottdp|0.6|2.5|ottdrev=r5338|ttdprev=beta 2}}&lt;br /&gt;
|+&lt;br /&gt;
|49||D||{{ottdp|0.7|2.6|ottdrev=r13376|ttdprev=r2216}}||Year of construction (long format, 0 based)||{{ottdp|0.7|no|ottdrev=r13376}} &amp;lt;ref name=&amp;quot;date&amp;quot;&amp;gt;This is the current date&amp;lt;/ref&amp;gt;&lt;br /&gt;
|+&lt;br /&gt;
|4A||D||{{ottdp|1.1|no|ottdrev=r20165}}||Info about current rail type for trains||no&lt;br /&gt;
|+&lt;br /&gt;
|4B||D||{{ottdp|1.2|no|ottdrev=r23068}}||Long date of last servicing||{{ottdp|1.2|no|ottdrev=r23068}} &amp;lt;ref name=&amp;quot;date&amp;quot; /&amp;gt;&lt;br /&gt;
|+&lt;br /&gt;
|4C||D||{{ottdp|1.3|no|ottdrev=r24246}}||Current max speed including e.g track or timetable speed limits. Only valid for front vehicle. Note, units differ for each vehicle type&amp;lt;ref name=&amp;quot;speed&amp;quot;&amp;gt;See [[Action0Trains#Speed 09|train property 09]], [[Action0RoadVehicles|road vehicle property 08]] (not 15, even when using realistic acceleration), [[Action0Ships|ship property 0B]] and [[Action0Planes|aircraft property 0C]].&amp;lt;/ref&amp;gt;||no&lt;br /&gt;
|+&lt;br /&gt;
|60||D||{{ottdp|0.6|2.5|ttdprev=2.0.1 alpha 57}}||Count Veh.ID occurence||no&lt;br /&gt;
|+&lt;br /&gt;
|61||-&amp;lt;ref&amp;gt;The size of the result matches the size of the queried variable.&amp;lt;/ref&amp;gt;||{{ottdp|1.2|no|ottdrev=r22997}}||Query variable of n-th vehicle in chain||no&lt;br /&gt;
|+&lt;br /&gt;
|62||D||{{ottdp|1.2|no|ottdrev=r22998}}||Curvature/position difference for n-th vehicle in chain||no&lt;br /&gt;
|+&lt;br /&gt;
|97||B||{{ottdp|0.6|2.0}}||Tick counter, increased every engine tick||no&lt;br /&gt;
|+&lt;br /&gt;
|B2||W||||Vehicle status: bit0 = vehicle invisible (in tunnel/depot), bit1 = stopped, bit7 = crashed||no&lt;br /&gt;
|+&lt;br /&gt;
|B4||W||{{ottdp|0.6|2.0}}||Current speed. Note, units differ for each vehicle type&amp;lt;ref name=&amp;quot;speed&amp;quot; /&amp;gt;||no&lt;br /&gt;
|+&lt;br /&gt;
|B9||B||{{ottdp|0.6|2.0}}||Cargo type (type B from the list at [[CargoTypes]]; climate dependent)||no&lt;br /&gt;
|+&lt;br /&gt;
|C0||W||{{ottdp|0.6|2.0}}||Engine age in days&amp;lt;br/&amp;gt;{{ottdp|1.2|2.5|ottdrev=r22816|ttdprev=alpha 61}} Valid for wagons and articulated parts as well.||no&lt;br /&gt;
|+&lt;br /&gt;
|C4||B||{{ottdp|0.6|2.0}}||Year built (counted from 1920), note this is modified when Cht: Year is used||{{ottdp|0.6|no|ottdrev=r4611}} &amp;lt;ref name=&amp;quot;date&amp;quot; /&amp;gt;&lt;br /&gt;
|+&lt;br /&gt;
|C6||W||{{ottdp|0.6|2.0}}||Vehicle type ID &amp;lt;ref&amp;gt;{{ottdp|0.7|no}} In OpenTTD 0.7 and newer this is the GRF-local ID of the vehicle. Earlier versions of OpenTTD and TTDPatch report the [[VehicleIDs|TTD ID]]. For trains this is the same; for other vehicle types they differ.&amp;lt;/ref&amp;gt; (useful for [[Callbacks#Can wagon be attached (1D)|Callback 1D]])||no&lt;br /&gt;
|+&lt;br /&gt;
|C8||B||{{ottdp|0.6|2.0}}||Sprite type; FD for trains forward, FE or FF when reversed||no&lt;br /&gt;
|+&lt;br /&gt;
|C9||B||{{ottdp|0.6|2.0}}||Day counter; increased daily||no&lt;br /&gt;
|+&lt;br /&gt;
|DA||W||{{ottdp|0.6|2.0}}||Next wagon index, FFFF if last wagon (use shift-num=08 and check for FF)||no&lt;br /&gt;
|+&lt;br /&gt;
|F2||B||{{ottdp|0.6|2.5}}||Refit cycle, how many times refitted to the same cargo type||{{ottdp|0.7|no|ottdrev=r15542}} &amp;lt;ref name=&amp;quot;var47&amp;quot; /&amp;gt;&lt;br /&gt;
|+&lt;br /&gt;
|FE||W||{{ottdp|0.6|2.5}}||Modflags||no&lt;br /&gt;
|+&lt;br /&gt;
|FF||B||{{ottdp|0.6|2.5}}||Modflags||no&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For other 80+x variables confer the [http://marcin.ttdpatch.net/sv1codec/TTD-locations.html#_VehicleArray TTD vehicle structure].&lt;br /&gt;
&lt;br /&gt;
Variables 40, 41, 42 and 43 are cached. This means that while they are in principle computationally expensive, they can be used without impacting performance. Variables 45 and 60 are also computationally expensive but cannot be cached, and should therefore be used sparingly. If possible 80+x variables are to be preferred.&lt;br /&gt;
&lt;br /&gt;
Cached variables are updated when the game is loaded, when the consist enters or is rearranged in a depot, and when the train reverses.&lt;br /&gt;
&lt;br /&gt;
In the purchase list only a few variables are available. Especially the front vehicle (related object) cannot be accessed, nor other articulated parts.&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
=== Position and length (40, 41) ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Format:&#039;&#039;&#039; 00nnbbff&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Variable!!Value&lt;br /&gt;
|-&lt;br /&gt;
|ff||position of vehicle within the consist counted from the engine (front), e.g. the engine would have ff=0, the 1st wagon or mail compartment of planes would have ff=1, the 2nd wagon or the rotor of helicopters would have ff=2, the 3rd wagon would have ff=3 etc&lt;br /&gt;
|-&lt;br /&gt;
|bb||same as ff, but counted from the end, i.e. the last wagon has bb=0, the next-to-last wagon has bb=1 etc.&lt;br /&gt;
|-&lt;br /&gt;
|nn||total number of vehicles in the consist minus one (i.e. a train with engine and three wagons has nn=3), including shadow and rotor for aircraft.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
For variable 40, these numbers refer to the whole consist, but for variable 41, they only refer to the chain of consecutive vehicles with the same ID as the current wagon (including itself, but possibly excluding the engine):&lt;br /&gt;
&lt;br /&gt;
[[File:vehicle_var40_41.png]]&lt;br /&gt;
&lt;br /&gt;
Note however, that accessing the &amp;quot;related&amp;quot; object (i.e. the locomotive) doesn´t make much sense for vars 40/41, except for var40 when in a [[Callbacks#Can wagon be attached 1D|callback 1D]] chain.&lt;br /&gt;
&lt;br /&gt;
=== Consist cargo (42) ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Format:&#039;&#039;&#039; uuiicctt&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Variable!!Value&lt;br /&gt;
|-&lt;br /&gt;
|tt||a bit mask of all [[Action0Cargos#Cargo classes 16|cargo classes]] transported by the consist&lt;br /&gt;
|-&lt;br /&gt;
|cc||the most common [[CargoTypes|cargo type]] (from the column for type A)&lt;br /&gt;
|-&lt;br /&gt;
|ii||the most common refit cycle (var. F2) of cargo type cc&lt;br /&gt;
|-&lt;br /&gt;
|uu||the result of ORing the bits of prop. 25 from all vehicles in the train&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If used with VarAction2 type 81 (vehicle) it returns only cargo from this vehicle on, with type 82 (engine) that of the whole consist.&lt;br /&gt;
See also variable 47 for more details on the cargo carried by a vehicle.&lt;br /&gt;
&lt;br /&gt;
{{grfTill|7}} For GRF versions 7 and before &amp;quot;cc&amp;quot; is the untranslated bit number from [[Action0/Cargos#Bit_number_for_bitmasks_.2808.29|cargo property 8]].&lt;br /&gt;
&lt;br /&gt;
{{grfFrom|8}} With GRF version 8 the meaning of &amp;quot;cc&amp;quot; changes. If the grf file has installed a [[Action0/Global_Settings#Cargo_translation_table_.2809.29|cargo translation table]], the value in &amp;quot;cc&amp;quot; is the index of the cargo in that table; or FF if the cargo is not present in the table.&lt;br /&gt;
&lt;br /&gt;
=== Player info (43) ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Format:&#039;&#039;&#039; Ccttmmnn&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Variable!!Value&lt;br /&gt;
|-&lt;br /&gt;
|nn||the number of the current player from 0 to 7 (up to E (14) in OpenTTD since r14735)&lt;br /&gt;
|-&lt;br /&gt;
|mm||the multiplayer player number with the host player (or the single player) being 0 and the client player being 1&lt;br /&gt;
|-&lt;br /&gt;
|tt||the player type, see below for possible values&lt;br /&gt;
|-&lt;br /&gt;
|c||the primary player colour&lt;br /&gt;
|-&lt;br /&gt;
|C||{{ottdp|0.6|2.5|ttdprev=r1405}} the secondary player colour, equal to c if none (since r1405)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!tt value!!Meaning&lt;br /&gt;
|-&lt;br /&gt;
|0||Player is human player (permanent company)&lt;br /&gt;
|-&lt;br /&gt;
|1||Player is AI player (not managed)&lt;br /&gt;
|-&lt;br /&gt;
|2||{{ottdp|no|2.5}} Player is a human managing an AI company&lt;br /&gt;
|-&lt;br /&gt;
|3||{{ottdp|no|2.5}} Player is human player&#039;s original company, now temporarily AI controlled&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{ottdp|0.6|2.5|ttdprev=r1497}} Since r1497, when the vehicle sprite is being displayed in an exclusive offer window or new vehicle news message, or in other circumstances when no player is associated with the vehicle, nn will be FF.&lt;br /&gt;
&lt;br /&gt;
=== Aircraft info (44) ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Format:&#039;&#039;&#039; xxxxhhtt&lt;br /&gt;
&lt;br /&gt;
hh is the height of the aircraft above ground, or more properly above the height of its shadow. Buildings, including the heliport, don&#039;t count as &amp;quot;ground&amp;quot;, i.e. to get the height above a heliport, you have to subtract the heliport height from hh.&lt;br /&gt;
&lt;br /&gt;
tt is the type of the current airport: 0=small, 1=large, 2=heliport, 3=oil rig. The current airport is the target airport for aircraft that have finished the ascent and are in flight.&lt;br /&gt;
&lt;br /&gt;
=== Curvature info (45) ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Format:&#039;&#039;&#039; xxxTxBxF&lt;br /&gt;
&lt;br /&gt;
This returns the amount of curvature between the adjacent wagon pairs. It is useful for train vehicles that normally tilt in curves. The curvature is the difference in direction between the surrounding vehicles:&lt;br /&gt;
&lt;br /&gt;
F = for the front pair (previous wagon to current wagon, 0 if vehicle is first)&lt;br /&gt;
&lt;br /&gt;
B = for the back pair (current wagon to next wagon, 0 if wagon is last)&lt;br /&gt;
&lt;br /&gt;
T = for the triplet (previous wagon to next wagon; is zero in an S-bend)&lt;br /&gt;
&lt;br /&gt;
Possible values:&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Decimal!!Hex!!Meaning&lt;br /&gt;
|-&lt;br /&gt;
| -4||C||180° curve left (T only)&lt;br /&gt;
|-&lt;br /&gt;
| -3||D||135° curve left (T only)&lt;br /&gt;
|-&lt;br /&gt;
| -2||E||90° curve left&lt;br /&gt;
|-&lt;br /&gt;
| -1||F||45° curve left&lt;br /&gt;
|-&lt;br /&gt;
|0||0||no curve&lt;br /&gt;
|-&lt;br /&gt;
|1||1||45° curve right&lt;br /&gt;
|-&lt;br /&gt;
|2||2||90° curve right&lt;br /&gt;
|-&lt;br /&gt;
|3||3||135° curve right (T only)&lt;br /&gt;
|-&lt;br /&gt;
|4||4||180° curve right (T only)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Motion counter (46) ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Format:&#039;&#039;&#039; 32-bit value&lt;br /&gt;
&lt;br /&gt;
This variable counts the amount of motion that a vehicle has done. &amp;amp;nbsp;It is only valid for the first vehicle in a consist (i.e. use VarAction2 type 82!). &amp;amp;nbsp;Its value is in units of 1/4096 of a tile. &amp;amp;nbsp;A vehicle actually moves visibly every time the motion counter increases by 256, and since a tile consists of 16 such subunits, 16*256=4096 motion units mean motion across one tile.&lt;br /&gt;
&lt;br /&gt;
The most useful way to access it is probably with &amp;amp;lt;shiftnum&amp;amp;gt;=08 and an appropriate &amp;amp;lt;andmask&amp;amp;gt;. &amp;amp;nbsp;For example, to achieve an animation with one frame per vehicle motion and 16 frames in total for motion across an entire tile, you would use &amp;amp;lt;shiftnum&amp;amp;gt;=08 and &amp;amp;lt;andmask&amp;amp;gt;=0F. &amp;amp;nbsp;For an animation with one frame every two vehicle motions and 4 frames total, use &amp;amp;lt;shiftnum&amp;amp;gt;=09 and &amp;amp;lt;andmask&amp;amp;gt;=03.&lt;br /&gt;
&lt;br /&gt;
If the vehicle is going very fast (&amp;amp;gt;160 mph for trains), it may move by several 1/16ths of a tile at once, and thus some frames may be skipped, but the animation will still remain in sync with the motion.&lt;br /&gt;
&lt;br /&gt;
Note that vehicle graphics are only updated every time the vehicle actually moves, so checking the lower byte is probably pointless, and only needed internally to achieve sufficient precision.&lt;br /&gt;
&lt;br /&gt;
=== Vehicle cargo info (47) ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Format:&#039;&#039;&#039; ccccwwtt&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Variable!!Value&lt;br /&gt;
|-&lt;br /&gt;
|tt||the [[CargoTypes|cargo type]] transported by the vehicle (from the column for type A); translated if a translation table has been installed&lt;br /&gt;
|-&lt;br /&gt;
|ww||cargo unit weight in 1/16 tons, same as [[Action0Cargos#Weight of one unit of the cargo 0F|cargo prop. 0F]]&lt;br /&gt;
|-&lt;br /&gt;
|cccc||the [[Action0Cargos#Cargo classes 16|cargo class]] value of the cargo transported by the vehicle&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note that if the grf has installed a [[Action0/Global_Settings#Cargo_translation_table_.2809.29|cargo translation table]], the value in &amp;quot;tt&amp;quot; is the slot number in that table, irrespective of which actual slot or bit the cargo is using in the game. If a table has been installed, but the current cargo is not listed there, &amp;quot;tt&amp;quot; will be set to FF.&lt;br /&gt;
&lt;br /&gt;
Unlike variable 42, this variable returns the info of the current vehicle only, not the consist.&lt;br /&gt;
&lt;br /&gt;
=== Vehicle type information (48) ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Format:&#039;&#039;&#039; xxxxxxff&lt;br /&gt;
&lt;br /&gt;
The bits of ff are:&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Bit!!Value!!Meaning&lt;br /&gt;
|-&lt;br /&gt;
|0||1||Vehicle type is available on the market&lt;br /&gt;
|-&lt;br /&gt;
|1||2||Vehicle type is in the testing phase&lt;br /&gt;
|-&lt;br /&gt;
|2||4||Exclusive testing offer for a human player active&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
All other bits in ff are undefined and must be masked out.&lt;br /&gt;
&lt;br /&gt;
=== Information about current rail type for trains (4A) ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Format:&#039;&#039;&#039; xxxxFFrr&lt;br /&gt;
&lt;br /&gt;
The lower byte (rr) contains the (translated) rail type the train vehicle is currently driving on. If the rail type has no entry in the rail type translation table of the GRF, this value will be 0xFF. If no translation table is present, the raw value will be returned.&lt;br /&gt;
&lt;br /&gt;
The next byte (FF) contains the following flags:&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Bit!!Value!!Meaning&lt;br /&gt;
|-&lt;br /&gt;
|0||1||The vehicle is/would be powered on the current rail type (this is independent from powered/non-powered wagon or anything)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
All other bits are undefined.&lt;br /&gt;
&lt;br /&gt;
All other bytes and the result for non-rail vehicles are undefined.&lt;br /&gt;
&lt;br /&gt;
=== Count Veh.ID occurence (60) ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Format:&#039;&#039;&#039; xxxxxxnn&lt;br /&gt;
&lt;br /&gt;
The 60+x parameter is the vehicle ID to look for, and the returned nn is the number of vehicles in the consist that have this ID. If used with VarAction2 type 81, only the current vehicle and onwards will be check, with VarAction2 type 82, all vehicles in the consist will be counted.&lt;br /&gt;
&lt;br /&gt;
=== Query variable of n-th vehicle in chain (61) ===&lt;br /&gt;
&lt;br /&gt;
This is a special variable to get the contents of another variable of a different vehicle in the vehicle chain. It is only supported for trains and road vehicles. It is not supported during a callback that is used to modify vehicle properties to avoid circular dependencies, which currently limits this variable to callbacks 1D, 2D, 31 and 32 plus outside callback scope.&lt;br /&gt;
&lt;br /&gt;
Temporary register 10F is interpreted as a signed integer and specifies the offset in the chain from the current vehicle. Positive values are interpreted as towards the end, negative values as towards the front. If the offset is outside the vehicle chain, the result value will be 0.&lt;br /&gt;
&lt;br /&gt;
The 60+x parameter specifies the variable to access and temporary register 10E is passed as the new 60+x parameter. Passing 61 as the variable is not allowed. Currently only vehicle specific variables listed on this page plus global variable 25 are accessible through var 61. Esp. variable 5F is currently not supported.&lt;br /&gt;
&lt;br /&gt;
The resulting value will have the size of whatever variable is queried.&lt;br /&gt;
&lt;br /&gt;
=== Curvature/position difference for n-th vehicle in chain (62) ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Format:&#039;&#039;&#039; zzyyxxFD&lt;br /&gt;
&lt;br /&gt;
This variable is only supported for trains and road vehicles.&lt;br /&gt;
&lt;br /&gt;
The 60+x parameter is interpreted as a signed integer and specifies the offset in the chain from the current vehicle. Positive values are interpreted as towards the end, negative values as towards the front. If the offset is outside the vehicle chain, the result value will be 0.&lt;br /&gt;
&lt;br /&gt;
The lowest nibble (D) contains the direction difference between the selected vehicle and this vehicle, the possible values are identical to those of [[#Curvature_info_.2845.29|variable 45]].&lt;br /&gt;
&lt;br /&gt;
The next nibble (F) has the following meaning:&lt;br /&gt;
{| |-&lt;br /&gt;
!Bit!!Value!!Meaning&lt;br /&gt;
|-&lt;br /&gt;
|3||8||The vehicle is currently hidden&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The upper three bytes contain the signed difference of the X/Y/Z position between the selected vehicle and this vehicle.&lt;br /&gt;
&lt;br /&gt;
=== Modflags (FE and FF) ===&lt;br /&gt;
&lt;br /&gt;
The bits in FE mostly relate to gradualloading. &amp;amp;nbsp;A few useful bits for grf authors are;&lt;br /&gt;
&lt;br /&gt;
{| |-&lt;br /&gt;
!Bit!!Version!!Value of the bit&lt;br /&gt;
|-&lt;br /&gt;
|5||{{ottdp|0.6|2.5}}||Vehicle is powered (engine or powered wagon, mainly useful for the latter)&lt;br /&gt;
|-&lt;br /&gt;
|6||{{ottdp|0.6|2.5}}||Vehicle would be powered (engine or powered wagon) if there were suitable track. (E.g. electric train in mixed train on normal track)&lt;br /&gt;
|-&lt;br /&gt;
|8 &amp;lt;ref&amp;gt;This bit is only accurate for the first vehicle in the consist.&amp;lt;/ref&amp;gt;||{{ottdp|0.6|2.5}}||This bit is flipped every time the train reverses direction&lt;br /&gt;
|-&lt;br /&gt;
|10||{{ottdp|0.6|2.5|ttdprev=r1334}}||Vehicle was built during the exclusive preview&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
variable FF is actually the high byte of variable FE, so FE bit 8 is the same as FF bit 0.&lt;br /&gt;
&lt;br /&gt;
Other bits are reserved; most are actually used for TTDPatch internal states.&lt;br /&gt;
&lt;br /&gt;
==Examples==&lt;/div&gt;</summary>
		<author><name>Michi cc</name></author>
	</entry>
</feed>