<?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=The+Dude</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=The+Dude"/>
	<link rel="alternate" type="text/html" href="https://newgrf-specs.tt-wiki.net/wiki/Special:Contributions/The_Dude"/>
	<updated>2026-05-14T08:05:56Z</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=3607</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=3607"/>
		<updated>2014-12-07T16:04:53Z</updated>

		<summary type="html">&lt;p&gt;The Dude: Add nicely organized table for always active callbacks&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;
&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;
&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 [[VarAction2Vehicles#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;
== 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;
= 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>The Dude</name></author>
	</entry>
	<entry>
		<id>https://newgrf-specs.tt-wiki.net/index.php?title=NML:Language_files&amp;diff=3606</id>
		<title>NML:Language files</title>
		<link rel="alternate" type="text/html" href="https://newgrf-specs.tt-wiki.net/index.php?title=NML:Language_files&amp;diff=3606"/>
		<updated>2014-12-07T15:46:34Z</updated>

		<summary type="html">&lt;p&gt;The Dude: Removed the hex code, as it was misleading to some people. Added coloured image for colours from openttd pallete&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{NMLNavNoSubpages}}&lt;br /&gt;
== Introduction ==&lt;br /&gt;
Language files are usually found in the &amp;lt;code style=&amp;quot;color:darkgreen&amp;quot;&amp;gt;lang&amp;lt;/code&amp;gt; sub-folder of the project, but the place NML looks for the language files can be changed via command line parameter to any directory desired:&lt;br /&gt;
&lt;br /&gt;
 nmlc -l path/to/lang-dir path/to/nml-source-file.nml&lt;br /&gt;
 nmlc --lang-dir=path/to/lang-dir path/to/nml-source-file.nml&lt;br /&gt;
&lt;br /&gt;
Language files MUST have the extension &amp;lt;code style=&amp;quot;color:darkgreen&amp;quot;&amp;gt;.lng&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt; The language files themselves follow a certain structure:&lt;br /&gt;
&lt;br /&gt;
 ##grflangid &amp;amp;lt;number&amp;amp;gt;&lt;br /&gt;
 &amp;amp;lt;string-name&amp;amp;gt;                                                   :&amp;amp;lt;text&amp;amp;gt;&lt;br /&gt;
 &amp;amp;lt;string-name&amp;amp;gt;                                                   :&amp;amp;lt;text&amp;amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
where the first line must give the language code for the language this file describes (see below). The following lines each describe a string. The translated string follows immediately the colon. An NML project has exactly one fallback language, by default this is english.lng. You can change this with the command line parameter --default-lang. Example for a valid language file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=example&amp;gt;&lt;br /&gt;
 ##grflangid 0x01&lt;br /&gt;
 STR_GRF_NAME                                                    :{TITLE} 0.1.0 - {VERSION}&lt;br /&gt;
 STR_GRF_DESCRIPTION                                             :{TITLE} contains pimped ground tiles.&lt;br /&gt;
 STR_NAME_MYVEHICLE                                              :General Robotics Anti-Grav UFO Mark X&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== String codes ==&lt;br /&gt;
&lt;br /&gt;
Strings may contain a number of special string codes which control how the string is being printed or which values to insert into the string. Custom replacements can be stored in the plain text file &amp;lt;code&amp;gt;custom_tags.txt&amp;lt;/code&amp;gt; (for example a newgrf version which is written by your build script). In the case above the &amp;lt;code&amp;gt;custom_tags.txt&amp;lt;/code&amp;gt; could, for example read&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=example&amp;gt;&lt;br /&gt;
 VERSION  :alpha-r88&lt;br /&gt;
 TITLE    :Example NewGRF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Additionally to custom-defined tags, NML comes with a number of default tags:&lt;br /&gt;
{|&lt;br /&gt;
!width=&amp;quot;150pt&amp;quot;|Tag&lt;br /&gt;
!width=&amp;quot;600pt&amp;quot;|Meaning&lt;br /&gt;
!Example&lt;br /&gt;
|-&lt;br /&gt;
|              ||empty tag, written as {} is used to create a newline ||&lt;br /&gt;
|-&lt;br /&gt;
|NBSP          || non-breaking space ||&lt;br /&gt;
|-&lt;br /&gt;
|{             || Display a left curly bracket. You write this as {{}. If you&#039;d include it without surrounding it by { and } it&#039;d be seen as the start of a tag and the rest of the string would be read as name of the tag. ||&lt;br /&gt;
|-&lt;br /&gt;
|COPYRIGHT     || copyright symbol            || © &lt;br /&gt;
|-&lt;br /&gt;
|TRAIN         || display train symbol ||&lt;br /&gt;
|-&lt;br /&gt;
|LORRY         || display lorry symbol ||&lt;br /&gt;
|-&lt;br /&gt;
|BUS           || display bus symbol ||&lt;br /&gt;
|-&lt;br /&gt;
|PLANE         || display plane symbol ||&lt;br /&gt;
|-&lt;br /&gt;
|SHIP          || display ship symbol ||&lt;br /&gt;
|-&lt;br /&gt;
|TINYFONT      || switch to small font ||&lt;br /&gt;
|-&lt;br /&gt;
|BIGFONT       || switch to big font ||&lt;br /&gt;
|-&lt;br /&gt;
|BLUE          || switch to blue text || &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;
|SILVER        || switch to silver text || &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;
|GOLD          || switch to golden text || &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;
|RED           || switch to red text || &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;
|PURPLE        || switch to purple text || &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;
|LTBROWN       || switch to light brown text || &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;
|ORANGE        || switch to orange text || &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;
|GREEN         || switch to green text || &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;
|YELLOW        || switch to yellow text || &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;
|DKGREEN       || switch to dark green text || &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;
|CREAM         || switch to cream-coloured text || &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;
|BROWN         || switch to brown text || &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;
|WHITE         || switch to white text || &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;
|LTBLUE        || switch to light blue text || &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;
|GRAY          || switch to gray text || &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;
|DKBLUE        || switch to dark blue text || &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;
|BLACK         || switch to black text || &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;
== String parameters ==&lt;br /&gt;
The above tags can be used in almost all strings. There are also a number of tags that need an argument they&#039;ll read from the textstack. The textstack is only available for certain callbacks an properties.&lt;br /&gt;
{|&lt;br /&gt;
!width=&amp;quot;150pt&amp;quot;|Tag&lt;br /&gt;
!width=&amp;quot;600pt&amp;quot;|Meaning&lt;br /&gt;
!Size (number of bytes read from stack)&lt;br /&gt;
!Example&lt;br /&gt;
|-&lt;br /&gt;
|COMMA         || signed number with decimal separator between 1000&#039;s.   || 4&lt;br /&gt;
|-&lt;br /&gt;
|SIGNED_WORD   || signed number with decimal separator between 1000&#039;s.   || 2&lt;br /&gt;
|-&lt;br /&gt;
|UNSIGNED_WORD || unsigned number with decimal separator between 1000&#039;s. || 2&lt;br /&gt;
|-&lt;br /&gt;
|CURRENCY      || money in proper currency units                         || 4 || 24,492 €&lt;br /&gt;
|-&lt;br /&gt;
|VELOCITY      || velocity in proper units                               || 2 || 35 km/h&lt;br /&gt;
|-&lt;br /&gt;
|VOLUME        || volume in proper units                                 || 2 || 29,000 litres&lt;br /&gt;
|-&lt;br /&gt;
|VOLUME_SHORT  || volume in proper units in short form                   || 2 || 29,000l&lt;br /&gt;
|-&lt;br /&gt;
|POWER         || power in proper units                                  || 2 || 2,030 kW&lt;br /&gt;
|-&lt;br /&gt;
|WEIGHT        || weight in proper units                                 || 2 || 5 tonnes&lt;br /&gt;
|-&lt;br /&gt;
|WEIGHT_SHORT  || weight in proper units in short form                   || 2 || 5t&lt;br /&gt;
|-&lt;br /&gt;
|CARGO_LONG    || {{ottdp|1.4|no|ottdrev=r26244}} cargo amount in proper units                           || 4 (2 + 2)&amp;lt;ref name=&amp;quot;cargoamount&amp;quot;&amp;gt;First (lower) 2 bytes for cargo type, second (higher) 2 bytes for cargo amount.&amp;lt;/ref&amp;gt; || 10 bags of mail&lt;br /&gt;
|-&lt;br /&gt;
|CARGO_SHORT   || {{ottdp|1.4|no|ottdrev=r26244}} cargo amount in proper units in short form             || 4 (2 + 2)&amp;lt;ref name=&amp;quot;cargoamount&amp;quot;/&amp;gt; || 10 bags&lt;br /&gt;
|-&lt;br /&gt;
|CARGO_TINY    || {{ottdp|1.4|no|ottdrev=r26244}} cargo amount in proper units in tiny form (only unit conversion) || 4 (2 + 2)&amp;lt;ref name=&amp;quot;cargoamount&amp;quot;/&amp;gt; || 10&lt;br /&gt;
|-&lt;br /&gt;
|HEX           || hexadecimal presentation                               || 4 || F0 3D D4 33&lt;br /&gt;
|-&lt;br /&gt;
|STRING        || include other string                                   || 2&lt;br /&gt;
|-&lt;br /&gt;
|DATE1920_LONG || days since 1920 as long date                           || 2 || 12 August 1935&lt;br /&gt;
|-&lt;br /&gt;
|DATE1920_SHORT|| days since 1920 as short date                          || 2 || 12 Aug 1935&lt;br /&gt;
|-&lt;br /&gt;
|DATE_LONG     || days since 0 as long date                              || 4 || 12 August 1610&lt;br /&gt;
|-&lt;br /&gt;
|DATE_SHORT    || days since 0 as short date                             || 4 || 12 Aug 3049&lt;br /&gt;
|-&lt;br /&gt;
|POP_WORD      || Remove 2 bytes from the top of the stack               || 2&lt;br /&gt;
|-&lt;br /&gt;
|STATION       || Station name of station with given ID                  || 2&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In case you don&#039;t want to use the first 2 (or 4) bytes from the stack but rather another variable, you can prefix the tag name with the number, like {1:COMMA} to use the second (indexing starts at 0) argument from the stack. You can also use this in translations that require a different order, for example (in english.lng):&lt;br /&gt;
&lt;br /&gt;
 STR_SOME_STRING    :{COMMA} items cost {CURRENCY}&lt;br /&gt;
&lt;br /&gt;
And the same string in dutch.lng:&lt;br /&gt;
&lt;br /&gt;
 STR_SOME_STRING    :{1:CURRENCY} is de prijs van {0:COMMA} items.&lt;br /&gt;
&lt;br /&gt;
The string parameters itself are assigned in units of dwords (4 bytes), starting with temporary storage 256, up to 259 or 261. Thus if you use parameters which are not of dword size (e.g. strings or word-sized numbers), you have to construct the text stack via bit arithmetic:&lt;br /&gt;
&amp;lt;pre class=example&amp;gt;&lt;br /&gt;
switch(FEAT_INDUSTRIES, SELF, extra_text_switch, [&lt;br /&gt;
			STORE_TEMP(&lt;br /&gt;
				(    (LOAD_PERM(var_supply_efficiency_factor) == 1) * string(STR_EXTRA_PRIMARY_EFFICIENT1)    ) +&lt;br /&gt;
				(    (LOAD_PERM(var_supply_efficiency_factor) == 2) * string(STR_EXTRA_PRIMARY_EFFICIENT2)    ) +&lt;br /&gt;
				(    (LOAD_PERM(var_supply_efficiency_factor) == 3) * string(STR_EXTRA_PRIMARY_EFFICIENT3)    ) +&lt;br /&gt;
				(    (LOAD_PERM(var_supply_efficiency_factor) == 4) * string(STR_EXTRA_PRIMARY_EFFICIENT4)    ) |&lt;br /&gt;
				LOAD_PERM(var_supply_requirement) &amp;lt;&amp;lt; 16,&lt;br /&gt;
				256&lt;br /&gt;
			),&lt;br /&gt;
	return string(STR_EXTRA_PRIMARY);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
for a language file which reads&lt;br /&gt;
&amp;lt;pre class=example&amp;gt;&lt;br /&gt;
STR_EXTRA_PRIMARY_EFFICIENT1 :{YELLOW}very efficient{BLACK}ly&lt;br /&gt;
STR_EXTRA_PRIMARY_EFFICIENT2 :{YELLOW}efficient{BLACK}ly&lt;br /&gt;
STR_EXTRA_PRIMARY_EFFICIENT3 :in a {YELLOW}normal{BLACK} way&lt;br /&gt;
STR_EXTRA_PRIMARY_EFFICIENT4 :{YELLOW}wasteful{BLACK}ly&lt;br /&gt;
STR_EXTRA_PRIMARY            :{BLACK}This industry needs {YELLOW}supplies{BLACK}.{}They use them {STRING}{}{}Monthly demand: {YELLOW}{UNSIGNED_WORD} crate{P &amp;quot;&amp;quot; s} of engineering supplies{BLACK}.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Defining cases ==&lt;br /&gt;
Similar to OpenTTD&#039;s language files, NML can also make use of cases, genders and plural forms. In order to utilize them, they have to be defined in the language file&#039;s header and have to match the definition as used in OpenTTD&#039;s language files:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
##case pragma&lt;br /&gt;
&lt;br /&gt;
STR_NAME                                     :Utas&lt;br /&gt;
STR_NAME.pragma                              :utast&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
e.g. for Hungarian you&#039;d have&lt;br /&gt;
&amp;lt;pre class=example&amp;gt;&lt;br /&gt;
##case t ba&lt;br /&gt;
&lt;br /&gt;
STR_CARGO_PLURAL_PASSENGERS                  :Utas&lt;br /&gt;
STR_CARGO_PLURAL_PASSENGERS.t                :utast&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In case the name of a case changes in the OpenTTD language file, your language file will have to follow that change. To keep compatible with older OpenTTD versions you can use the ##map_case pragma, like this:&lt;br /&gt;
&amp;lt;pre class=example&amp;gt;##map_case t t_old&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Defining genders ==&lt;br /&gt;
Genders just like cases are defined in the header of the language file and have to match the definition as found within OpenTTD&#039;s language files. The gender of a word or expression is declared within the string&#039;s text itself by a tag of the form &amp;lt;code&amp;gt;{G=gendername}&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
##gender pragma&lt;br /&gt;
&lt;br /&gt;
STR_NAME                                      :{G=gendername}String which requires gender &#039;gendername&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
where the string with the defined gender then will trigger the correct usage in a string which includes it and which has to take provisions to show the proper gender:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
STR_OTHER                                     :Some text {G gender1 gender2 ...} {STRING}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
for example in German&lt;br /&gt;
&amp;lt;pre class=example&amp;gt;&lt;br /&gt;
##gender m w n p&lt;br /&gt;
&lt;br /&gt;
STR_CARGO_NAME_BAUXITE                        :{G=n}Bauxit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
which then will be used with the correct gender by a string which includes it:&lt;br /&gt;
&amp;lt;pre class=example&amp;gt;&lt;br /&gt;
STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO                        :{WHITE}{STATION} akzeptiert kein{G &amp;quot;en&amp;quot; &amp;quot;e&amp;quot; &amp;quot;&amp;quot; &amp;quot;e&amp;quot;} {STRING} mehr.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In case the name of a gender changes in the OpenTTD language file, your language file will have to follow that change. To keep compatible with older OpenTTD versions you can use the ##map_gender pragma, like this:&lt;br /&gt;
&amp;lt;pre class=example&amp;gt;##gender m f&lt;br /&gt;
##map_gender m male&lt;br /&gt;
##map_gender f female&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LanguageIDs ==&lt;br /&gt;
&lt;br /&gt;
{{:language_IDs}}&lt;br /&gt;
&lt;br /&gt;
In case a language is not in this list, edit the shared [[language_IDs|master language list]] in the NewGRF Specs. This master list is always leading. NFO language ID 7F has no meaning in NML (set --default-lang instead) and setting bit 8 will break your language file.&lt;/div&gt;</summary>
		<author><name>The Dude</name></author>
	</entry>
	<entry>
		<id>https://newgrf-specs.tt-wiki.net/index.php?title=Action4&amp;diff=3605</id>
		<title>Action4</title>
		<link rel="alternate" type="text/html" href="https://newgrf-specs.tt-wiki.net/index.php?title=Action4&amp;diff=3605"/>
		<updated>2014-12-07T15:42:15Z</updated>

		<summary type="html">&lt;p&gt;The Dude: Added the colour itself as image&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;
|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 newobjects and several callbacks. Some callbacks as well as newobjects 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||&#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. 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;
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>The Dude</name></author>
	</entry>
	<entry>
		<id>https://newgrf-specs.tt-wiki.net/index.php?title=Action4&amp;diff=3604</id>
		<title>Action4</title>
		<link rel="alternate" type="text/html" href="https://newgrf-specs.tt-wiki.net/index.php?title=Action4&amp;diff=3604"/>
		<updated>2014-12-07T14:57:27Z</updated>

		<summary type="html">&lt;p&gt;The Dude: Added missing colour (8F) and the colour names correspond to the ones from nml wiki&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;
|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 newobjects and several callbacks. Some callbacks as well as newobjects 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||&#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. 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;
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;&lt;br /&gt;
|-&lt;br /&gt;
|88||Blue&lt;br /&gt;
|-&lt;br /&gt;
|89||Silver&lt;br /&gt;
|-&lt;br /&gt;
|8A||Golden&lt;br /&gt;
|-&lt;br /&gt;
|8B||Red&lt;br /&gt;
|-&lt;br /&gt;
|8C||Purple&lt;br /&gt;
|-&lt;br /&gt;
|8D||Light Brown&lt;br /&gt;
|-&lt;br /&gt;
|8E||Orange&lt;br /&gt;
|-&lt;br /&gt;
|8F||Green&lt;br /&gt;
|-&lt;br /&gt;
|90||Yellow&lt;br /&gt;
|-&lt;br /&gt;
|91||Dark Green&lt;br /&gt;
|-&lt;br /&gt;
|92||Cream&lt;br /&gt;
|-&lt;br /&gt;
|93||Brown&lt;br /&gt;
|-&lt;br /&gt;
|94||White&lt;br /&gt;
|-&lt;br /&gt;
|95||Light Blue&lt;br /&gt;
|-&lt;br /&gt;
|96||Grey&lt;br /&gt;
|-&lt;br /&gt;
|97||Dark Blue&lt;br /&gt;
|-&lt;br /&gt;
|98||Black&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Example==&lt;/div&gt;</summary>
		<author><name>The Dude</name></author>
	</entry>
	<entry>
		<id>https://newgrf-specs.tt-wiki.net/index.php?title=NML:Main&amp;diff=3603</id>
		<title>NML:Main</title>
		<link rel="alternate" type="text/html" href="https://newgrf-specs.tt-wiki.net/index.php?title=NML:Main&amp;diff=3603"/>
		<updated>2014-12-05T20:57:32Z</updated>

		<summary type="html">&lt;p&gt;The Dude: &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;{{NMLNavMain}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;[[NML:Preface |Preface]]&lt;br /&gt;
;[[NML:changes 0.3|Changes between NML 0.2 and head / 0.3]]&lt;br /&gt;
;[[NML:changes 0.4|Changes between NML 0.3 and head / 0.4]]&lt;br /&gt;
;[[NML:Getting started|Getting started]]&lt;br /&gt;
;[[NML:Graphic files|Graphics files]]&lt;br /&gt;
&lt;br /&gt;
;[[NML:Block syntax|Language structure and block syntax]]&lt;br /&gt;
*[[NML:GRF|GRF]] and its parameters&lt;br /&gt;
*[[NML:Item|Item]] (Properties, graphics, livery overrides)&lt;br /&gt;
&lt;br /&gt;
*;Defining sprites:&lt;br /&gt;
**[[NML:Realsprites|Realsprites]]&lt;br /&gt;
**[[NML:Template|Template]]&lt;br /&gt;
**[[NML:Base Graphics|Base Graphics]]&lt;br /&gt;
**[[NML:Spriteset|Spriteset]]&lt;br /&gt;
**;Replacing sprites:&lt;br /&gt;
***[[NML:Replace TTD sprites|Replace TTD sprites]]&lt;br /&gt;
***[[NML:Replace new sprites|Replace new sprites]]&lt;br /&gt;
***[[NML:Add font glyphs|Add font glyphs]]&lt;br /&gt;
***[[NML:Alternative sprites|Alternative sprites]] (32bpp, zoom levels)&lt;br /&gt;
**;Aranging and grouping sprites:&lt;br /&gt;
***[[NML:Spritegroup|Spritegroup]] (Vehicles)&lt;br /&gt;
***[[NML:Spritelayout|Spritelayout]] (Houses, industries, stations, airports, objects)&lt;br /&gt;
***[[NML:Recolour sprites|Recolour sprites]]&lt;br /&gt;
&lt;br /&gt;
*;Flow control&lt;br /&gt;
**[[NML:Tilelayout|Tilelayout]]&lt;br /&gt;
**[[NML:Switch|Switch]]&lt;br /&gt;
**[[NML:Produce|Produce]]&lt;br /&gt;
**[[NML:Random switch|Random switch]]&lt;br /&gt;
&lt;br /&gt;
*;Global scope&lt;br /&gt;
**[[NML:Cargotable|Cargotable]]&lt;br /&gt;
**[[NML:Railtypetable|Railtypetable]]&lt;br /&gt;
**[[NML:Snow line|Snow line]]&lt;br /&gt;
**[[NML:Setting base costs|Setting base costs]]&lt;br /&gt;
**[[NML:Parameter assignment|Parameter assignment]]&lt;br /&gt;
**[[NML:If|If/else]]&lt;br /&gt;
**[[NML:While|While]]&lt;br /&gt;
&lt;br /&gt;
*;Interaction with other grfs&lt;br /&gt;
**[[NML:Error|Error]]&lt;br /&gt;
**[[NML:Disable items|Disable items]]&lt;br /&gt;
**[[NML:Deactivate other NewGRFs|Deactivate other NewGRFs]]&lt;br /&gt;
**[[NML:Testing for other NewGRFs|Testing for other NewGRFs]]&lt;br /&gt;
**[[NML:Overriding vehicles in other NewGRFs|Overriding vehicles in other NewGRFs]]&lt;br /&gt;
&lt;br /&gt;
*;Misc&lt;br /&gt;
**[[NML:Town names|Town names]]&lt;br /&gt;
**[[NML:Town names parts|Town names parts]]&lt;br /&gt;
&lt;br /&gt;
;[[NML:Units|Units]]&lt;br /&gt;
;[[NML:Expressions|Expressions]]&lt;br /&gt;
*[[NML:Elementary values|Elementary values]]&lt;br /&gt;
*[[NML:Builtin functions|Builtin functions]]&lt;br /&gt;
;[[NML:Language files|Language files]]&lt;br /&gt;
;[[NML:Properties and variables and callbacks|Lists of properties, variables and callbacks]]&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
!Type&lt;br /&gt;
!Properties&lt;br /&gt;
!Variables&lt;br /&gt;
!Callbacks&lt;br /&gt;
!Feature&lt;br /&gt;
|-&lt;br /&gt;
|[[NML:General|General]] ||  || [[NML:General#General variables|variables]] || || FEAT_GLOBALVARS&lt;br /&gt;
|-&lt;br /&gt;
|[[NML:Vehicles|Vehicles]] || [[NML:Vehicles#Properties common to all vehicle types|common properties]] || [[NML:Vehicles#Vehicle variables|variables]] || [[NML:Vehicles#Vehicle callbacks|callbacks]] ||&lt;br /&gt;
|-&lt;br /&gt;
| || [[NML:Vehicles#Train properties|train properties]] || || || FEAT_TRAINS&lt;br /&gt;
|-&lt;br /&gt;
| || [[NML:Vehicles#Road vehicle properties|road vehicle properties]] || || || FEAT_ROADVEHS&lt;br /&gt;
|-&lt;br /&gt;
| || [[NML:Vehicles#Ship properties|ship properties]] || || || FEAT_SHIPS&lt;br /&gt;
|-&lt;br /&gt;
| || [[NML:Vehicles#Aircraft properties|aircraft properties]] || || || FEAT_AIRCRAFT&lt;br /&gt;
|-&lt;br /&gt;
|[[NML:Stations|Stations]] || [[NML:Stations#Station properties|properties]] || [[NML:Stations#Station variables|variables]] || [[NML:Stations#Station callbacks|callbacks]] || FEAT_STATIONS&lt;br /&gt;
|-&lt;br /&gt;
|[[NML:Canals|Canals]] || [[NML:Canals#Canal properties|properties]] || [[NML:Canals#Canal variables|variables]] || [[NML:Canals#Canal callbacks|callbacks]] || FEAT_CANALS&lt;br /&gt;
|-&lt;br /&gt;
|[[NML:Bridges|Bridges]] || [[NML:Bridges#Bridge properties|properties]] || [[NML:Bridges#Bridge variables|variables]] || [[NML:Bridges#Bridge callbacks|callbacks]] || FEAT_BRIDGES&lt;br /&gt;
|-&lt;br /&gt;
|[[NML:Towns|Towns]] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|[[NML:Houses|Houses]] || [[NML:Houses#House properties|properties]] || [[NML:Houses#House variables|variables]] || [[NML:Houses#House callbacks|callbacks]] || FEAT_HOUSES&lt;br /&gt;
|-&lt;br /&gt;
|[[NML:Industries|Industries]]||  || [[NML:Industries#Common variables|common variables]] || ||&lt;br /&gt;
|-&lt;br /&gt;
| || [[NML:Industries#Industry properties|industry properties]] || [[NML:Industries#Industry variables|industry variables]] || [[NML:Industries#Industry callbacks|industry callbacks]] || FEAT_INDUSTRIES&lt;br /&gt;
|-&lt;br /&gt;
| || [[NML:IndustryTiles#Industry tile properties|tile properties]] || [[NML:IndustryTiles#Industry tile variables|tile variables]] || [[NML:IndustryTiles#Industry tile callbacks|tile callbacks]] || FEAT_INDUSTRYTILES&lt;br /&gt;
|-&lt;br /&gt;
|[[NML:Cargos|Cargos]] || [[NML:Cargos#Cargo properties|properties]] || [[NML:Cargos#Cargo variables|variables]] || [[NML:Cargos#Cargo callbacks|callbacks]] || FEAT_CARGOS&lt;br /&gt;
|-&lt;br /&gt;
|[[NML:Airports|Airports]] || [[NML:Airports#Airport properties|properties]] || [[NML:Airports#Airport variables|variables]] || [[NML:Airports#Airport callbacks|callbacks]] || FEAT_AIRPORTS&lt;br /&gt;
|-&lt;br /&gt;
| || [[NML:Airports#Airport tile properties|tile properties]] || [[NML:Airports#Airport tile variables|tile variables]] || [[NML:Airports#Airport tile callbacks|tile callbacks]] || FEAT_AIRPORTTILES&lt;br /&gt;
|-&lt;br /&gt;
|[[NML:Objects|Objects]] || [[NML:Objects#Object properties|properties]] || [[NML:Objects#Object variables|variables]] || [[NML:Objects#Object callbacks|callbacks]] || FEAT_OBJECTS&lt;br /&gt;
|-&lt;br /&gt;
|[[NML:Railtypes|Railtypes]] || [[NML:Railtypes#Railtype properties|properties]] || [[NML:Railtypes#Railtype variables|variables]] || [[NML:Railtypes#Railtype callbacks|callbacks]] || FEAT_RAILTYPES&lt;br /&gt;
|- &lt;br /&gt;
|Signals|| || || || FEAT_SIGNALS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;[[NML:Warnings|Compiler Warnings]]&lt;br /&gt;
;[[NML:Additional references|Additional references]]&lt;br /&gt;
*[[NML:Animation speed|Animation speed]]&lt;br /&gt;
*[[NML:Default industries|Default industries]]&lt;br /&gt;
*[[NML:Default industry tiles|Default industry tiles]]&lt;br /&gt;
*[[NML:Base cost table|Base cost table]]&lt;br /&gt;
*[[NML:List of sound effects|List of sound effects]]&lt;br /&gt;
*[[NML:List of default vehicle IDs|List of default vehicle IDs]]&lt;br /&gt;
*[[NML:List of default house properties|List of default house properties]]&lt;br /&gt;
*[[NML:List of town zones|List of town zones]]&lt;br /&gt;
*[[NML:List of tile classes|List of tile classes]]&lt;br /&gt;
*[[NML:List of default colour translation palettes|List of default colour translation palettes]]&lt;br /&gt;
*[[NML:List of direction constants|List of direction constants]]&lt;br /&gt;
*[[NML:List of tile slopes|List of tile slopes]]&lt;br /&gt;
*[[NML:List of tiles|List of tiles]]&lt;br /&gt;
*[[NML:Default TTD strings|Default TTD strings]]&lt;br /&gt;
*[[NML:Deprecated syntax|Deprecated syntax]]&lt;br /&gt;
;[[NML:NewGRF compatibility|NewGRF compatibility]]&lt;br /&gt;
;[[NML:Old style callbacks|Old-style callbacks]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[NML:Manual of style|Manual of style]]&lt;/div&gt;</summary>
		<author><name>The Dude</name></author>
	</entry>
	<entry>
		<id>https://newgrf-specs.tt-wiki.net/index.php?title=NML:Language_files&amp;diff=3602</id>
		<title>NML:Language files</title>
		<link rel="alternate" type="text/html" href="https://newgrf-specs.tt-wiki.net/index.php?title=NML:Language_files&amp;diff=3602"/>
		<updated>2014-12-05T19:39:45Z</updated>

		<summary type="html">&lt;p&gt;The Dude: /* String codes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{NMLNavNoSubpages}}&lt;br /&gt;
== Introduction ==&lt;br /&gt;
Language files are usually found in the &amp;lt;code style=&amp;quot;color:darkgreen&amp;quot;&amp;gt;lang&amp;lt;/code&amp;gt; sub-folder of the project, but the place NML looks for the language files can be changed via command line parameter to any directory desired:&lt;br /&gt;
&lt;br /&gt;
 nmlc -l path/to/lang-dir path/to/nml-source-file.nml&lt;br /&gt;
 nmlc --lang-dir=path/to/lang-dir path/to/nml-source-file.nml&lt;br /&gt;
&lt;br /&gt;
Language files MUST have the extension &amp;lt;code style=&amp;quot;color:darkgreen&amp;quot;&amp;gt;.lng&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt; The language files themselves follow a certain structure:&lt;br /&gt;
&lt;br /&gt;
 ##grflangid &amp;amp;lt;number&amp;amp;gt;&lt;br /&gt;
 &amp;amp;lt;string-name&amp;amp;gt;                                                   :&amp;amp;lt;text&amp;amp;gt;&lt;br /&gt;
 &amp;amp;lt;string-name&amp;amp;gt;                                                   :&amp;amp;lt;text&amp;amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
where the first line must give the language code for the language this file describes (see below). The following lines each describe a string. The translated string follows immediately the colon. An NML project has exactly one fallback language, by default this is english.lng. You can change this with the command line parameter --default-lang. Example for a valid language file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=example&amp;gt;&lt;br /&gt;
 ##grflangid 0x01&lt;br /&gt;
 STR_GRF_NAME                                                    :{TITLE} 0.1.0 - {VERSION}&lt;br /&gt;
 STR_GRF_DESCRIPTION                                             :{TITLE} contains pimped ground tiles.&lt;br /&gt;
 STR_NAME_MYVEHICLE                                              :General Robotics Anti-Grav UFO Mark X&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== String codes ==&lt;br /&gt;
&lt;br /&gt;
Strings may contain a number of special string codes which control how the string is being printed or which values to insert into the string. Custom replacements can be stored in the plain text file &amp;lt;code&amp;gt;custom_tags.txt&amp;lt;/code&amp;gt; (for example a newgrf version which is written by your build script). In the case above the &amp;lt;code&amp;gt;custom_tags.txt&amp;lt;/code&amp;gt; could, for example read&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=example&amp;gt;&lt;br /&gt;
 VERSION  :alpha-r88&lt;br /&gt;
 TITLE    :Example NewGRF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Additionally to custom-defined tags, NML comes with a number of default tags:&lt;br /&gt;
{|&lt;br /&gt;
!width=&amp;quot;150pt&amp;quot;|Tag&lt;br /&gt;
!width=&amp;quot;600pt&amp;quot;|Meaning&lt;br /&gt;
!Example&lt;br /&gt;
!Hex&lt;br /&gt;
|-&lt;br /&gt;
|              ||empty tag, written as {} is used to create a newline || ||&lt;br /&gt;
|-&lt;br /&gt;
|NBSP          || non-breaking space || ||&lt;br /&gt;
|-&lt;br /&gt;
|{             || Display a left curly bracket. You write this as {{}. If you&#039;d include it without surrounding it by { and } it&#039;d be seen as the start of a tag and the rest of the string would be read as name of the tag. || ||&lt;br /&gt;
|-&lt;br /&gt;
|COPYRIGHT     || copyright symbol            || © ||&lt;br /&gt;
|-&lt;br /&gt;
|TRAIN         || display train symbol || ||&lt;br /&gt;
|-&lt;br /&gt;
|LORRY         || display lorry symbol || ||&lt;br /&gt;
|-&lt;br /&gt;
|BUS           || display bus symbol || ||&lt;br /&gt;
|-&lt;br /&gt;
|PLANE         || display plane symbol || ||&lt;br /&gt;
|-&lt;br /&gt;
|SHIP          || display ship symbol || ||&lt;br /&gt;
|-&lt;br /&gt;
|TINYFONT      || switch to small font || ||&lt;br /&gt;
|-&lt;br /&gt;
|BIGFONT       || switch to big font || ||&lt;br /&gt;
|-&lt;br /&gt;
|BLUE          || switch to blue text || || 88&lt;br /&gt;
|-&lt;br /&gt;
|SILVER        || switch to silver text || || 89&lt;br /&gt;
|-&lt;br /&gt;
|GOLD          || switch to golden text || || 8A&lt;br /&gt;
|-&lt;br /&gt;
|RED           || switch to red text || || 8B&lt;br /&gt;
|-&lt;br /&gt;
|PURPLE        || switch to purple text || || 8C&lt;br /&gt;
|-&lt;br /&gt;
|LTBROWN       || switch to light brown text || || 8D&lt;br /&gt;
|-&lt;br /&gt;
|ORANGE        || switch to orange text || || 8E&lt;br /&gt;
|-&lt;br /&gt;
|GREEN         || switch to green text || || 8F&lt;br /&gt;
|-&lt;br /&gt;
|YELLOW        || switch to yellow text || || 90&lt;br /&gt;
|-&lt;br /&gt;
|DKGREEN       || switch to dark green text || || 91&lt;br /&gt;
|-&lt;br /&gt;
|CREAM         || switch to cream-coloured text || || 92&lt;br /&gt;
|-&lt;br /&gt;
|BROWN         || switch to brown text || || 93&lt;br /&gt;
|-&lt;br /&gt;
|WHITE         || switch to white text || || 94&lt;br /&gt;
|-&lt;br /&gt;
|LTBLUE        || switch to light blue text || || 95&lt;br /&gt;
|-&lt;br /&gt;
|GRAY          || switch to gray text || || 96&lt;br /&gt;
|-&lt;br /&gt;
|DKBLUE        || switch to dark blue text || || 97&lt;br /&gt;
|-&lt;br /&gt;
|BLACK         || switch to black text || || 98&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== String parameters ==&lt;br /&gt;
The above tags can be used in almost all strings. There are also a number of tags that need an argument they&#039;ll read from the textstack. The textstack is only available for certain callbacks an properties.&lt;br /&gt;
{|&lt;br /&gt;
!width=&amp;quot;150pt&amp;quot;|Tag&lt;br /&gt;
!width=&amp;quot;600pt&amp;quot;|Meaning&lt;br /&gt;
!Size (number of bytes read from stack)&lt;br /&gt;
!Example&lt;br /&gt;
|-&lt;br /&gt;
|COMMA         || signed number with decimal separator between 1000&#039;s.   || 4&lt;br /&gt;
|-&lt;br /&gt;
|SIGNED_WORD   || signed number with decimal separator between 1000&#039;s.   || 2&lt;br /&gt;
|-&lt;br /&gt;
|UNSIGNED_WORD || unsigned number with decimal separator between 1000&#039;s. || 2&lt;br /&gt;
|-&lt;br /&gt;
|CURRENCY      || money in proper currency units                         || 4 || 24,492 €&lt;br /&gt;
|-&lt;br /&gt;
|VELOCITY      || velocity in proper units                               || 2 || 35 km/h&lt;br /&gt;
|-&lt;br /&gt;
|VOLUME        || volume in proper units                                 || 2 || 29,000 litres&lt;br /&gt;
|-&lt;br /&gt;
|VOLUME_SHORT  || volume in proper units in short form                   || 2 || 29,000l&lt;br /&gt;
|-&lt;br /&gt;
|POWER         || power in proper units                                  || 2 || 2,030 kW&lt;br /&gt;
|-&lt;br /&gt;
|WEIGHT        || weight in proper units                                 || 2 || 5 tonnes&lt;br /&gt;
|-&lt;br /&gt;
|WEIGHT_SHORT  || weight in proper units in short form                   || 2 || 5t&lt;br /&gt;
|-&lt;br /&gt;
|CARGO_LONG    || {{ottdp|1.4|no|ottdrev=r26244}} cargo amount in proper units                           || 4 (2 + 2)&amp;lt;ref name=&amp;quot;cargoamount&amp;quot;&amp;gt;First (lower) 2 bytes for cargo type, second (higher) 2 bytes for cargo amount.&amp;lt;/ref&amp;gt; || 10 bags of mail&lt;br /&gt;
|-&lt;br /&gt;
|CARGO_SHORT   || {{ottdp|1.4|no|ottdrev=r26244}} cargo amount in proper units in short form             || 4 (2 + 2)&amp;lt;ref name=&amp;quot;cargoamount&amp;quot;/&amp;gt; || 10 bags&lt;br /&gt;
|-&lt;br /&gt;
|CARGO_TINY    || {{ottdp|1.4|no|ottdrev=r26244}} cargo amount in proper units in tiny form (only unit conversion) || 4 (2 + 2)&amp;lt;ref name=&amp;quot;cargoamount&amp;quot;/&amp;gt; || 10&lt;br /&gt;
|-&lt;br /&gt;
|HEX           || hexadecimal presentation                               || 4 || F0 3D D4 33&lt;br /&gt;
|-&lt;br /&gt;
|STRING        || include other string                                   || 2&lt;br /&gt;
|-&lt;br /&gt;
|DATE1920_LONG || days since 1920 as long date                           || 2 || 12 August 1935&lt;br /&gt;
|-&lt;br /&gt;
|DATE1920_SHORT|| days since 1920 as short date                          || 2 || 12 Aug 1935&lt;br /&gt;
|-&lt;br /&gt;
|DATE_LONG     || days since 0 as long date                              || 4 || 12 August 1610&lt;br /&gt;
|-&lt;br /&gt;
|DATE_SHORT    || days since 0 as short date                             || 4 || 12 Aug 3049&lt;br /&gt;
|-&lt;br /&gt;
|POP_WORD      || Remove 2 bytes from the top of the stack               || 2&lt;br /&gt;
|-&lt;br /&gt;
|STATION       || Station name of station with given ID                  || 2&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In case you don&#039;t want to use the first 2 (or 4) bytes from the stack but rather another variable, you can prefix the tag name with the number, like {1:COMMA} to use the second (indexing starts at 0) argument from the stack. You can also use this in translations that require a different order, for example (in english.lng):&lt;br /&gt;
&lt;br /&gt;
 STR_SOME_STRING    :{COMMA} items cost {CURRENCY}&lt;br /&gt;
&lt;br /&gt;
And the same string in dutch.lng:&lt;br /&gt;
&lt;br /&gt;
 STR_SOME_STRING    :{1:CURRENCY} is de prijs van {0:COMMA} items.&lt;br /&gt;
&lt;br /&gt;
The string parameters itself are assigned in units of dwords (4 bytes), starting with temporary storage 256, up to 259 or 261. Thus if you use parameters which are not of dword size (e.g. strings or word-sized numbers), you have to construct the text stack via bit arithmetic:&lt;br /&gt;
&amp;lt;pre class=example&amp;gt;&lt;br /&gt;
switch(FEAT_INDUSTRIES, SELF, extra_text_switch, [&lt;br /&gt;
			STORE_TEMP(&lt;br /&gt;
				(    (LOAD_PERM(var_supply_efficiency_factor) == 1) * string(STR_EXTRA_PRIMARY_EFFICIENT1)    ) +&lt;br /&gt;
				(    (LOAD_PERM(var_supply_efficiency_factor) == 2) * string(STR_EXTRA_PRIMARY_EFFICIENT2)    ) +&lt;br /&gt;
				(    (LOAD_PERM(var_supply_efficiency_factor) == 3) * string(STR_EXTRA_PRIMARY_EFFICIENT3)    ) +&lt;br /&gt;
				(    (LOAD_PERM(var_supply_efficiency_factor) == 4) * string(STR_EXTRA_PRIMARY_EFFICIENT4)    ) |&lt;br /&gt;
				LOAD_PERM(var_supply_requirement) &amp;lt;&amp;lt; 16,&lt;br /&gt;
				256&lt;br /&gt;
			),&lt;br /&gt;
	return string(STR_EXTRA_PRIMARY);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
for a language file which reads&lt;br /&gt;
&amp;lt;pre class=example&amp;gt;&lt;br /&gt;
STR_EXTRA_PRIMARY_EFFICIENT1 :{YELLOW}very efficient{BLACK}ly&lt;br /&gt;
STR_EXTRA_PRIMARY_EFFICIENT2 :{YELLOW}efficient{BLACK}ly&lt;br /&gt;
STR_EXTRA_PRIMARY_EFFICIENT3 :in a {YELLOW}normal{BLACK} way&lt;br /&gt;
STR_EXTRA_PRIMARY_EFFICIENT4 :{YELLOW}wasteful{BLACK}ly&lt;br /&gt;
STR_EXTRA_PRIMARY            :{BLACK}This industry needs {YELLOW}supplies{BLACK}.{}They use them {STRING}{}{}Monthly demand: {YELLOW}{UNSIGNED_WORD} crate{P &amp;quot;&amp;quot; s} of engineering supplies{BLACK}.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Defining cases ==&lt;br /&gt;
Similar to OpenTTD&#039;s language files, NML can also make use of cases, genders and plural forms. In order to utilize them, they have to be defined in the language file&#039;s header and have to match the definition as used in OpenTTD&#039;s language files:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
##case pragma&lt;br /&gt;
&lt;br /&gt;
STR_NAME                                     :Utas&lt;br /&gt;
STR_NAME.pragma                              :utast&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
e.g. for Hungarian you&#039;d have&lt;br /&gt;
&amp;lt;pre class=example&amp;gt;&lt;br /&gt;
##case t ba&lt;br /&gt;
&lt;br /&gt;
STR_CARGO_PLURAL_PASSENGERS                  :Utas&lt;br /&gt;
STR_CARGO_PLURAL_PASSENGERS.t                :utast&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In case the name of a case changes in the OpenTTD language file, your language file will have to follow that change. To keep compatible with older OpenTTD versions you can use the ##map_case pragma, like this:&lt;br /&gt;
&amp;lt;pre class=example&amp;gt;##map_case t t_old&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Defining genders ==&lt;br /&gt;
Genders just like cases are defined in the header of the language file and have to match the definition as found within OpenTTD&#039;s language files. The gender of a word or expression is declared within the string&#039;s text itself by a tag of the form &amp;lt;code&amp;gt;{G=gendername}&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
##gender pragma&lt;br /&gt;
&lt;br /&gt;
STR_NAME                                      :{G=gendername}String which requires gender &#039;gendername&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
where the string with the defined gender then will trigger the correct usage in a string which includes it and which has to take provisions to show the proper gender:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
STR_OTHER                                     :Some text {G gender1 gender2 ...} {STRING}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
for example in German&lt;br /&gt;
&amp;lt;pre class=example&amp;gt;&lt;br /&gt;
##gender m w n p&lt;br /&gt;
&lt;br /&gt;
STR_CARGO_NAME_BAUXITE                        :{G=n}Bauxit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
which then will be used with the correct gender by a string which includes it:&lt;br /&gt;
&amp;lt;pre class=example&amp;gt;&lt;br /&gt;
STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO                        :{WHITE}{STATION} akzeptiert kein{G &amp;quot;en&amp;quot; &amp;quot;e&amp;quot; &amp;quot;&amp;quot; &amp;quot;e&amp;quot;} {STRING} mehr.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In case the name of a gender changes in the OpenTTD language file, your language file will have to follow that change. To keep compatible with older OpenTTD versions you can use the ##map_gender pragma, like this:&lt;br /&gt;
&amp;lt;pre class=example&amp;gt;##gender m f&lt;br /&gt;
##map_gender m male&lt;br /&gt;
##map_gender f female&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LanguageIDs ==&lt;br /&gt;
&lt;br /&gt;
{{:language_IDs}}&lt;br /&gt;
&lt;br /&gt;
In case a language is not in this list, edit the shared [[language_IDs|master language list]] in the NewGRF Specs. This master list is always leading. NFO language ID 7F has no meaning in NML (set --default-lang instead) and setting bit 8 will break your language file.&lt;/div&gt;</summary>
		<author><name>The Dude</name></author>
	</entry>
	<entry>
		<id>https://newgrf-specs.tt-wiki.net/index.php?title=NML:List_of_sound_effects&amp;diff=3601</id>
		<title>NML:List of sound effects</title>
		<link rel="alternate" type="text/html" href="https://newgrf-specs.tt-wiki.net/index.php?title=NML:List_of_sound_effects&amp;diff=3601"/>
		<updated>2014-11-22T12:18:00Z</updated>

		<summary type="html">&lt;p&gt;The Dude: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{NMLNavAdditionalreferences}}&lt;br /&gt;
{|&lt;br /&gt;
|+ Table of OpenTTD default sound effects&lt;br /&gt;
!ID (dec)&lt;br /&gt;
!ID (hex)&lt;br /&gt;
!Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 0 ||  SOUND_SPLAT&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 1 ||  SOUND_FACTORY_WHISTLE&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 2 ||  SOUND_TRAIN&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 3 ||  SOUND_TRAIN_THROUGH_TUNNEL&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 4 ||  SOUND_SHIP_HORN&lt;br /&gt;
|-&lt;br /&gt;
| 5 || 5 ||  SOUND_FERRY_HORN&lt;br /&gt;
|-&lt;br /&gt;
| 6 || 6 ||  SOUND_PLANE_TAKE_OFF&lt;br /&gt;
|-&lt;br /&gt;
| 7 || 7 ||  SOUND_JET&lt;br /&gt;
|-&lt;br /&gt;
| 8 || 8 ||  SOUND_TRAIN_HORN&lt;br /&gt;
|-&lt;br /&gt;
| 9 || 9 ||  SOUND_MINING_MACHINERY&lt;br /&gt;
|-&lt;br /&gt;
| 10 || A ||  SOUND_ELECTRIC_SPARK&lt;br /&gt;
|-&lt;br /&gt;
| 11 || B ||  SOUND_STEAM&lt;br /&gt;
|-&lt;br /&gt;
| 12 || C ||  SOUND_LEVEL_CROSSING&lt;br /&gt;
|-&lt;br /&gt;
| 13 || D ||  SOUND_VEHICLE_BREAKDOWN&lt;br /&gt;
|-&lt;br /&gt;
| 14 || E ||  SOUND_TRAIN_BREAKDOWN&lt;br /&gt;
|-&lt;br /&gt;
| 15 || F ||  SOUND_CRASH&lt;br /&gt;
|-&lt;br /&gt;
| 16 || 10 ||  SOUND_EXPLOSION&lt;br /&gt;
|-&lt;br /&gt;
| 17 || 11 ||  SOUND_BIG_CRASH&lt;br /&gt;
|-&lt;br /&gt;
| 18 || 12 ||  SOUND_CASHTILL&lt;br /&gt;
|-&lt;br /&gt;
| 19 || 13 ||  SOUND_BEEP&lt;br /&gt;
|-&lt;br /&gt;
| 20 || 14 ||  SOUND_MORSE&lt;br /&gt;
|-&lt;br /&gt;
| 21 || 15 ||  SOUND_SKID_PLANE&lt;br /&gt;
|-&lt;br /&gt;
| 22 || 16 ||  SOUND_HELICOPTER&lt;br /&gt;
|-&lt;br /&gt;
| 23 || 17 ||  SOUND_BUS_START_PULL_AWAY&lt;br /&gt;
|-&lt;br /&gt;
| 24 || 18 ||  SOUND_BUS_START_PULL_AWAY_WITH_HORN&lt;br /&gt;
|-&lt;br /&gt;
| 25 || 19 ||  SOUND_TRUCK_START&lt;br /&gt;
|-&lt;br /&gt;
| 26 || 1A ||  SOUND_TRUCK_START_2&lt;br /&gt;
|-&lt;br /&gt;
| 27 || 1B ||  SOUND_APPLAUSE&lt;br /&gt;
|-&lt;br /&gt;
| 28 || 1C ||  SOUND_OOOOH&lt;br /&gt;
|-&lt;br /&gt;
| 29 || 1D ||  SOUND_SPLAT&lt;br /&gt;
|-&lt;br /&gt;
| 30 || 1E ||  SOUND_SPLAT_2&lt;br /&gt;
|-&lt;br /&gt;
| 31 || 1F ||  SOUND_JACKHAMMER&lt;br /&gt;
|-&lt;br /&gt;
| 32 || 20 ||  SOUND_CAR_HORN&lt;br /&gt;
|-&lt;br /&gt;
| 33 || 21 ||  SOUND_CAR_HORN_2&lt;br /&gt;
|-&lt;br /&gt;
| 34 || 22 ||  SOUND_SHEEP&lt;br /&gt;
|-&lt;br /&gt;
| 35 || 23 ||  SOUND_COW&lt;br /&gt;
|-&lt;br /&gt;
| 36 || 24 ||  SOUND_HORSE&lt;br /&gt;
|-&lt;br /&gt;
| 37 || 25 ||  SOUND_BLACKSMITH_ANVIL&lt;br /&gt;
|-&lt;br /&gt;
| 38 || 26 ||  SOUND_SAWMILL&lt;br /&gt;
|-&lt;br /&gt;
| 39 || 27 ||  SOUND_GOOD_YEAR&lt;br /&gt;
|-&lt;br /&gt;
| 40 || 28 ||  SOUND_BAD_YEAR&lt;br /&gt;
|-&lt;br /&gt;
| 41 || 29 ||  SOUND_RIP&lt;br /&gt;
|-&lt;br /&gt;
| 42 || 2A ||  SOUND_EXTRACT_AND_POP&lt;br /&gt;
|-&lt;br /&gt;
| 43 || 2B ||  SOUND_COMEDY_HIT&lt;br /&gt;
|-&lt;br /&gt;
| 44 || 2C ||  SOUND_MACHINERY&lt;br /&gt;
|-&lt;br /&gt;
| 45 || 2D ||  SOUND_RIP_2&lt;br /&gt;
|-&lt;br /&gt;
| 46 || 2E ||  SOUND_EXTRACT_AND_POP&lt;br /&gt;
|-&lt;br /&gt;
| 47 || 2F ||  SOUND_POP&lt;br /&gt;
|-&lt;br /&gt;
| 48 || 30 ||  SOUND_CARTOON_SOUND&lt;br /&gt;
|-&lt;br /&gt;
| 49 || 31 ||  SOUND_EXTRACT&lt;br /&gt;
|-&lt;br /&gt;
| 50 || 32 ||  SOUND_POP_2&lt;br /&gt;
|-&lt;br /&gt;
| 51 || 33 ||  SOUND_PLASTIC_MINE&lt;br /&gt;
|-&lt;br /&gt;
| 52 || 34 ||  SOUND_WIND&lt;br /&gt;
|-&lt;br /&gt;
| 53 || 35 ||  SOUND_COMEDY_BREAKDOWN&lt;br /&gt;
|-&lt;br /&gt;
| 54 || 36 ||  SOUND_CARTOON_CRASH&lt;br /&gt;
|-&lt;br /&gt;
| 55 || 37 ||  SOUND_BALLOON_SQUEAK&lt;br /&gt;
|-&lt;br /&gt;
| 56 || 38 ||  SOUND_CHAINSAW&lt;br /&gt;
|-&lt;br /&gt;
| 57 || 39 ||  SOUND_HEAVY_WIND&lt;br /&gt;
|-&lt;br /&gt;
| 58 || 3A ||  SOUND_COMEDY_BREAKDOWN_2&lt;br /&gt;
|-&lt;br /&gt;
| 59 || 3B ||  SOUND_JET_OVERHEAD&lt;br /&gt;
|-&lt;br /&gt;
| 60 || 3C ||  SOUND_COMEDY_CAR&lt;br /&gt;
|-&lt;br /&gt;
| 61 || 3D ||  SOUND_ANOTHER_JET_OVERHEAD&lt;br /&gt;
|-&lt;br /&gt;
| 62 || 3E ||  SOUND_COMEDY_CAR_2&lt;br /&gt;
|-&lt;br /&gt;
| 63 || 3F ||  SOUND_COMEDY_CAR_3&lt;br /&gt;
|-&lt;br /&gt;
| 64 || 40 ||  SOUND_COMEDY_CAR_START_AND_PULL_AWAY&lt;br /&gt;
|-&lt;br /&gt;
| 65 || 41 ||  SOUND_MAGLEV&lt;br /&gt;
|-&lt;br /&gt;
| 66 || 42 ||  SOUND_LOON_BIRD&lt;br /&gt;
|-&lt;br /&gt;
| 67 || 43 ||  SOUND_LION&lt;br /&gt;
|-&lt;br /&gt;
| 68 || 44 ||  SOUND_MONKEYS&lt;br /&gt;
|-&lt;br /&gt;
| 69 || 45 ||  SOUND_PLANE_CRASHING&lt;br /&gt;
|-&lt;br /&gt;
| 70 || 46 ||  SOUND_PLANE_ENGINE_SPUTTERING&lt;br /&gt;
|-&lt;br /&gt;
| 71 || 47 ||  SOUND_MAGLEV_2&lt;br /&gt;
|-&lt;br /&gt;
| 72 || 48 ||  SOUND_DISTANT_BIRD&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>The Dude</name></author>
	</entry>
</feed>