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