<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://www.tt-wiki.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ammler</id>
	<title>TTWiki - User contributions [en-gb]</title>
	<link rel="self" type="application/atom+xml" href="https://www.tt-wiki.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ammler"/>
	<link rel="alternate" type="text/html" href="https://www.tt-wiki.net/wiki/Special:Contributions/Ammler"/>
	<updated>2026-05-02T02:22:47Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://www.tt-wiki.net/index.php?title=NMLTutorial/Starting_an_NML_file&amp;diff=7594</id>
		<title>NMLTutorial/Starting an NML file</title>
		<link rel="alternate" type="text/html" href="https://www.tt-wiki.net/index.php?title=NMLTutorial/Starting_an_NML_file&amp;diff=7594"/>
		<updated>2011-08-22T18:38:36Z</updated>

		<summary type="html">&lt;p&gt;Ammler: /* Line 5: version: ; */  first commit is r0&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{NMLTutorial}}&lt;br /&gt;
&lt;br /&gt;
It&#039;s time to create your first NML file! All this reading must have made you hungry by now, so let&#039;s continue right quick.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Where to put the NML file ==&lt;br /&gt;
&lt;br /&gt;
From the [[NMLTutorial/Language files|Language files]] section you may remember this folder structure:&lt;br /&gt;
&lt;br /&gt;
 mygrf&lt;br /&gt;
  |- lang&lt;br /&gt;
  |   |- english.lng&lt;br /&gt;
  |   |- other_language.lng&lt;br /&gt;
  |- custom_tags.txt&lt;br /&gt;
  |- mygrf.nml&lt;br /&gt;
&lt;br /&gt;
This is exactly where the NML file should go: one folder above the language files, and in the same folder as custom_tags.txt. You can name the file any way you want, but try to avoid spaces. Create it either from the file explorer or from your text editor.&lt;br /&gt;
&lt;br /&gt;
== The grf block ==&lt;br /&gt;
Nearly all NML files will start with a grf block. The grf block takes no parameters and is one of the simplest blocks there is. Your NML file also has no more than one grf block. NML files without a grf block are only useful for &#039;&#039;base graphic&#039;&#039; files such as the grf files from OpenGFX. So chances are that you need a grf block.&lt;br /&gt;
&lt;br /&gt;
The general syntax of the grf block is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
grf {&lt;br /&gt;
	grfid: &amp;lt;literal-string&amp;gt;;&lt;br /&gt;
	name: &amp;lt;string&amp;gt;;&lt;br /&gt;
	desc: &amp;lt;string&amp;gt;;&lt;br /&gt;
	version: &amp;lt;expression&amp;gt;;&lt;br /&gt;
	min_compatible_version: &amp;lt;expression&amp;gt;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We&#039;ll be looking at every line of this grf block and give you an example how to fill it in.&lt;br /&gt;
&lt;br /&gt;
=== Line 1: grf { ===&lt;br /&gt;
This indicates the start of the grf block and the &#039;&#039;opening curly bracket&#039;&#039; defines the start of it&#039;s contents. Just type it in your editor:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color:darkblue&amp;quot;&amp;gt;&lt;br /&gt;
grf {&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Line 2: grfid: &amp;lt;literal-string&amp;gt;; ===&lt;br /&gt;
This defines the GRFID of your NewGRF. A GRFID is a four-byte string that should be unique. If two NewGRFs have the same GRFID, only one can be used at a time and in OpenTTD chances are only one shows up in the NewGRF list. It&#039;s a convention to use the first two bytes for the creator&#039;s initials. The last two bytes should be numbers, typically the first number identifying which of the author&#039;s sets this is, and the second number being a version number.&lt;br /&gt;
&lt;br /&gt;
The GRFID must be written as a quoted string, but now comes the complicated part: one character is one byte, but one byte is two hexadecimal characters. The first two bytes are best written as a normal quoted string. The last two are best written as escaped bytes, as this allows for 256 sets/versions rather than just 10.&lt;br /&gt;
&lt;br /&gt;
So if your name is Simon Foster and you&#039;re starting the first version of your first set, your GRFID can be &amp;lt;code&amp;gt;&amp;quot;SF\01\01&amp;quot;&amp;lt;/code&amp;gt;. This way, your GRFID is exactly four bytes: two normal characters S and F, and two escaped bytes 01. The backslash indicates that the next two characters together make one byte. When using escaped bytes, remember that they are in hex and as such can only consist the numbers 0-9 and letters A-F. See [http://en.wikipedia.org/wiki/Hexadecimal Wikipedia] for more details on the hexadecimal numeral system.&lt;br /&gt;
&lt;br /&gt;
Now your second line of the nml file will be (but then with your own GRFID):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color:darkblue&amp;quot;&amp;gt;&lt;br /&gt;
	grfid: &amp;quot;SF\01\01&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Line 3: name: &amp;lt;string&amp;gt;; ===&lt;br /&gt;
This is the name of your NewGRF, as displayed ingame. NML expects a reference to a string in your language file here. Luckily, we [[NMLTutorial/Language files|already]] put a name for our NewGRF in there. Open the language file and check what name you attached to the string. In our example that would be &amp;lt;code&amp;gt;STR_GRF_NAME&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
To tell NML to use a string from the language file, you have to use the function &amp;lt;code&amp;gt;string(&amp;lt;string-name&amp;gt;)&amp;lt;/code&amp;gt;, replacing &amp;lt;code&amp;gt;&amp;lt;string-name&amp;gt;&amp;lt;/code&amp;gt; with the actual name of the string. This gives us &amp;lt;code&amp;gt;string(STR_GRF_NAME)&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Put this in the third line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color:darkblue&amp;quot;&amp;gt;&lt;br /&gt;
	name: string(STR_GRF_NAME);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Line 4: desc: &amp;lt;string&amp;gt;; ===&lt;br /&gt;
The description is similar to the name of the NewGRF. Again look up the name of the string in the language file and use the &amp;lt;code&amp;gt;string()&amp;lt;/code&amp;gt; function to put it in the grf block. Line four:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color:darkblue&amp;quot;&amp;gt;&lt;br /&gt;
	desc: string(STR_GRF_DESCRIPTION);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Line 5: version: &amp;lt;expression&amp;gt;; ===&lt;br /&gt;
Another version? Yes. If your NewGRF is aimed at (but not limited to) OpenTTD you should use this to indicate the actual version and leave the GRFID constant. If your NewGRF is aimed at (but not limited to) TTDPatch you still should provide this version number, but &#039;&#039;bump the GRFID&#039;&#039; whenever a new release is not compatible with the previous release. More on this at the end of this page.&lt;br /&gt;
&lt;br /&gt;
The first release of your NewGRF will start with version 0 and every subsequent release you will increase this value. In case you use a version control system, set this to the revision number.&lt;br /&gt;
&lt;br /&gt;
This gives line five:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color:darkblue&amp;quot;&amp;gt;&lt;br /&gt;
	version: 0;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Line 6: min_compatible_version: &amp;lt;expression&amp;gt;; ===&lt;br /&gt;
For the first release, the minimal compatible version is also 0. Leave it at 0 for as long as subsequent releases are compatible with all previous releases. Whenever you need to break compatibility, you set this to the version number (from above) in which you have broken the compatibility.&lt;br /&gt;
&lt;br /&gt;
Line six:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color:darkblue&amp;quot;&amp;gt;&lt;br /&gt;
	min_compatible_version: 0;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Line 7: } ===&lt;br /&gt;
The &#039;&#039;closing curly bracket&#039;&#039; defines the end of the grf block; it closes it if you will.&lt;br /&gt;
&lt;br /&gt;
Just type a curly bracket on line seven:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color:darkblue&amp;quot;&amp;gt;&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Summarizing ==&lt;br /&gt;
Already? You haven&#039;t told us about the semicolons at the end of each line in the grf block!&lt;br /&gt;
&lt;br /&gt;
I haven&#039;t? Well, let&#039;s do that now then...&lt;br /&gt;
&lt;br /&gt;
=== Semicolons ===&lt;br /&gt;
Like in a lot of other programming languages, a semicolon defines the end of an instruction. You must use these at the end of every instruction inside and outside a block, but not on lines that open or close a block (with a curly bracket).&lt;br /&gt;
&lt;br /&gt;
The usage of semicolons in NML is identical (with the exception of templates) to that in Java or C-family (or PHP) languages. It allows to have multiple instructions on one line, which is useful in some cases.&lt;br /&gt;
&lt;br /&gt;
=== Summarizing ===&lt;br /&gt;
This completes our grf block. All lines together, the example looks like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color:darkblue&amp;quot;&amp;gt;&lt;br /&gt;
grf {&lt;br /&gt;
	grfid: &amp;quot;SF\01\01&amp;quot;;&lt;br /&gt;
	name: string(STR_GRF_NAME);&lt;br /&gt;
	desc: string(STR_GRF_DESCRIPTION);&lt;br /&gt;
	version: 1;&lt;br /&gt;
	min_compatible_version: 1;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you like, you can encode this into a grf to see if it works. The grf will not do anything, but it should show up in the game if you add it.&lt;br /&gt;
&lt;br /&gt;
You still remember how to use &#039;&#039;nmlc&#039; on the command line, right? If not, check the [[NMLTutorial/Installation|Installation page]] with the details for your operating system, or maybe the following pointer is enough to get you going:&lt;br /&gt;
&lt;br /&gt;
 nmlc -u --grf mygrf.grf mygrf.nml&lt;br /&gt;
&lt;br /&gt;
{{NMLTutorialNavbar|NML Syntax|Road vehicle}} &amp;lt;!-- this is here a second time because not everybody may need to read the following section --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Breaking compatibility ==&lt;br /&gt;
Sometimes it happens that you have to break compatibility between different releases of your NewGRF. The NML Documentation has a separate chapter on [http://newgrf-specs.tt-wiki.net/wiki/NML:NewGRF_compatibility NewGRF compatibility] and what actions break compatibility and how to avoid breaking it in the first place.&lt;br /&gt;
&lt;br /&gt;
However, if you must break compatibility, here&#039;s how to handle the version information in your NML file.&lt;br /&gt;
&lt;br /&gt;
=== OpenTTD targeted NewGRFs ===&lt;br /&gt;
* Keep the GRFID you have;&lt;br /&gt;
* Don&#039;t forget to update &amp;lt;code&amp;gt;grf { version }&amp;lt;/code&amp;gt;;&lt;br /&gt;
* Set &amp;lt;code&amp;gt;grf { min_compatible_version }&amp;lt;/code&amp;gt; to the value of &amp;lt;code&amp;gt;grf { version }&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This way, OpenTTD will hide the old release from the NewGRF window while keeping it available for older savegames to use (provided the user doesn&#039;t delete the old release). Old releases can still be downloaded from BaNaNaS for old savegames.&lt;br /&gt;
&lt;br /&gt;
=== TTDPatch targeted NewGRFs ===&lt;br /&gt;
TTDPatch doesn&#039;t have a concept for &amp;lt;code&amp;gt;grf { min_compatible_version }&amp;lt;/code&amp;gt; (or &amp;lt;code&amp;gt;grf { version }&amp;lt;/code&amp;gt; for that matter). The only way to indicate broken compatibility in TTDPatch is to bump the GRFID. This means that you increase the last byte of the GRFID by one. So if your initial GRFID is &amp;lt;code&amp;gt;&amp;quot;SF\01\01&amp;quot;&amp;lt;/code&amp;gt;, change it to &amp;lt;code&amp;gt;&amp;quot;SF\01\02&amp;quot;&amp;lt;/code&amp;gt; for the next release.&lt;br /&gt;
&lt;br /&gt;
As a consequence, both NewGRFs can be used separate from each other and in OpenTTD both will show up in the NewGRF window. &lt;br /&gt;
&lt;br /&gt;
In order to avoid loading both the old version and the new version in the same game, you have to add a [[NMLTutorial/Version check|version check]] to the NewGRF in order to disable itself (or the older version).&lt;br /&gt;
&lt;br /&gt;
{{NMLTutorialNavbar|NML Syntax|Road vehicle}}&lt;/div&gt;</summary>
		<author><name>Ammler</name></author>
	</entry>
	<entry>
		<id>https://www.tt-wiki.net/index.php?title=NMLTutorial/Starting_an_NML_file&amp;diff=7593</id>
		<title>NMLTutorial/Starting an NML file</title>
		<link rel="alternate" type="text/html" href="https://www.tt-wiki.net/index.php?title=NMLTutorial/Starting_an_NML_file&amp;diff=7593"/>
		<updated>2011-08-22T18:36:47Z</updated>

		<summary type="html">&lt;p&gt;Ammler: /* Line 6: min_compatible_version: ; */ 0, not 1 (example)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{NMLTutorial}}&lt;br /&gt;
&lt;br /&gt;
It&#039;s time to create your first NML file! All this reading must have made you hungry by now, so let&#039;s continue right quick.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Where to put the NML file ==&lt;br /&gt;
&lt;br /&gt;
From the [[NMLTutorial/Language files|Language files]] section you may remember this folder structure:&lt;br /&gt;
&lt;br /&gt;
 mygrf&lt;br /&gt;
  |- lang&lt;br /&gt;
  |   |- english.lng&lt;br /&gt;
  |   |- other_language.lng&lt;br /&gt;
  |- custom_tags.txt&lt;br /&gt;
  |- mygrf.nml&lt;br /&gt;
&lt;br /&gt;
This is exactly where the NML file should go: one folder above the language files, and in the same folder as custom_tags.txt. You can name the file any way you want, but try to avoid spaces. Create it either from the file explorer or from your text editor.&lt;br /&gt;
&lt;br /&gt;
== The grf block ==&lt;br /&gt;
Nearly all NML files will start with a grf block. The grf block takes no parameters and is one of the simplest blocks there is. Your NML file also has no more than one grf block. NML files without a grf block are only useful for &#039;&#039;base graphic&#039;&#039; files such as the grf files from OpenGFX. So chances are that you need a grf block.&lt;br /&gt;
&lt;br /&gt;
The general syntax of the grf block is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
grf {&lt;br /&gt;
	grfid: &amp;lt;literal-string&amp;gt;;&lt;br /&gt;
	name: &amp;lt;string&amp;gt;;&lt;br /&gt;
	desc: &amp;lt;string&amp;gt;;&lt;br /&gt;
	version: &amp;lt;expression&amp;gt;;&lt;br /&gt;
	min_compatible_version: &amp;lt;expression&amp;gt;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We&#039;ll be looking at every line of this grf block and give you an example how to fill it in.&lt;br /&gt;
&lt;br /&gt;
=== Line 1: grf { ===&lt;br /&gt;
This indicates the start of the grf block and the &#039;&#039;opening curly bracket&#039;&#039; defines the start of it&#039;s contents. Just type it in your editor:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color:darkblue&amp;quot;&amp;gt;&lt;br /&gt;
grf {&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Line 2: grfid: &amp;lt;literal-string&amp;gt;; ===&lt;br /&gt;
This defines the GRFID of your NewGRF. A GRFID is a four-byte string that should be unique. If two NewGRFs have the same GRFID, only one can be used at a time and in OpenTTD chances are only one shows up in the NewGRF list. It&#039;s a convention to use the first two bytes for the creator&#039;s initials. The last two bytes should be numbers, typically the first number identifying which of the author&#039;s sets this is, and the second number being a version number.&lt;br /&gt;
&lt;br /&gt;
The GRFID must be written as a quoted string, but now comes the complicated part: one character is one byte, but one byte is two hexadecimal characters. The first two bytes are best written as a normal quoted string. The last two are best written as escaped bytes, as this allows for 256 sets/versions rather than just 10.&lt;br /&gt;
&lt;br /&gt;
So if your name is Simon Foster and you&#039;re starting the first version of your first set, your GRFID can be &amp;lt;code&amp;gt;&amp;quot;SF\01\01&amp;quot;&amp;lt;/code&amp;gt;. This way, your GRFID is exactly four bytes: two normal characters S and F, and two escaped bytes 01. The backslash indicates that the next two characters together make one byte. When using escaped bytes, remember that they are in hex and as such can only consist the numbers 0-9 and letters A-F. See [http://en.wikipedia.org/wiki/Hexadecimal Wikipedia] for more details on the hexadecimal numeral system.&lt;br /&gt;
&lt;br /&gt;
Now your second line of the nml file will be (but then with your own GRFID):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color:darkblue&amp;quot;&amp;gt;&lt;br /&gt;
	grfid: &amp;quot;SF\01\01&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Line 3: name: &amp;lt;string&amp;gt;; ===&lt;br /&gt;
This is the name of your NewGRF, as displayed ingame. NML expects a reference to a string in your language file here. Luckily, we [[NMLTutorial/Language files|already]] put a name for our NewGRF in there. Open the language file and check what name you attached to the string. In our example that would be &amp;lt;code&amp;gt;STR_GRF_NAME&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
To tell NML to use a string from the language file, you have to use the function &amp;lt;code&amp;gt;string(&amp;lt;string-name&amp;gt;)&amp;lt;/code&amp;gt;, replacing &amp;lt;code&amp;gt;&amp;lt;string-name&amp;gt;&amp;lt;/code&amp;gt; with the actual name of the string. This gives us &amp;lt;code&amp;gt;string(STR_GRF_NAME)&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Put this in the third line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color:darkblue&amp;quot;&amp;gt;&lt;br /&gt;
	name: string(STR_GRF_NAME);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Line 4: desc: &amp;lt;string&amp;gt;; ===&lt;br /&gt;
The description is similar to the name of the NewGRF. Again look up the name of the string in the language file and use the &amp;lt;code&amp;gt;string()&amp;lt;/code&amp;gt; function to put it in the grf block. Line four:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color:darkblue&amp;quot;&amp;gt;&lt;br /&gt;
	desc: string(STR_GRF_DESCRIPTION);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Line 5: version: &amp;lt;expression&amp;gt;; ===&lt;br /&gt;
Another version? Yes. If your NewGRF is aimed at (but not limited to) OpenTTD you should use this to indicate the actual version and leave the GRFID constant. If your NewGRF is aimed at (but not limited to) TTDPatch you still should provide this version number, but &#039;&#039;bump the GRFID&#039;&#039; whenever a new release is not compatible with the previous release. More on this at the end of this page.&lt;br /&gt;
&lt;br /&gt;
The first release of your NewGRF will start with version 1 and every subsequent release you will increase this value. In case you use a version control system, set this to the revision number.&lt;br /&gt;
&lt;br /&gt;
This gives line five:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color:darkblue&amp;quot;&amp;gt;&lt;br /&gt;
	version: 1;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Line 6: min_compatible_version: &amp;lt;expression&amp;gt;; ===&lt;br /&gt;
For the first release, the minimal compatible version is also 0. Leave it at 0 for as long as subsequent releases are compatible with all previous releases. Whenever you need to break compatibility, you set this to the version number (from above) in which you have broken the compatibility.&lt;br /&gt;
&lt;br /&gt;
Line six:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color:darkblue&amp;quot;&amp;gt;&lt;br /&gt;
	min_compatible_version: 0;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Line 7: } ===&lt;br /&gt;
The &#039;&#039;closing curly bracket&#039;&#039; defines the end of the grf block; it closes it if you will.&lt;br /&gt;
&lt;br /&gt;
Just type a curly bracket on line seven:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color:darkblue&amp;quot;&amp;gt;&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Summarizing ==&lt;br /&gt;
Already? You haven&#039;t told us about the semicolons at the end of each line in the grf block!&lt;br /&gt;
&lt;br /&gt;
I haven&#039;t? Well, let&#039;s do that now then...&lt;br /&gt;
&lt;br /&gt;
=== Semicolons ===&lt;br /&gt;
Like in a lot of other programming languages, a semicolon defines the end of an instruction. You must use these at the end of every instruction inside and outside a block, but not on lines that open or close a block (with a curly bracket).&lt;br /&gt;
&lt;br /&gt;
The usage of semicolons in NML is identical (with the exception of templates) to that in Java or C-family (or PHP) languages. It allows to have multiple instructions on one line, which is useful in some cases.&lt;br /&gt;
&lt;br /&gt;
=== Summarizing ===&lt;br /&gt;
This completes our grf block. All lines together, the example looks like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color:darkblue&amp;quot;&amp;gt;&lt;br /&gt;
grf {&lt;br /&gt;
	grfid: &amp;quot;SF\01\01&amp;quot;;&lt;br /&gt;
	name: string(STR_GRF_NAME);&lt;br /&gt;
	desc: string(STR_GRF_DESCRIPTION);&lt;br /&gt;
	version: 1;&lt;br /&gt;
	min_compatible_version: 1;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you like, you can encode this into a grf to see if it works. The grf will not do anything, but it should show up in the game if you add it.&lt;br /&gt;
&lt;br /&gt;
You still remember how to use &#039;&#039;nmlc&#039; on the command line, right? If not, check the [[NMLTutorial/Installation|Installation page]] with the details for your operating system, or maybe the following pointer is enough to get you going:&lt;br /&gt;
&lt;br /&gt;
 nmlc -u --grf mygrf.grf mygrf.nml&lt;br /&gt;
&lt;br /&gt;
{{NMLTutorialNavbar|NML Syntax|Road vehicle}} &amp;lt;!-- this is here a second time because not everybody may need to read the following section --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Breaking compatibility ==&lt;br /&gt;
Sometimes it happens that you have to break compatibility between different releases of your NewGRF. The NML Documentation has a separate chapter on [http://newgrf-specs.tt-wiki.net/wiki/NML:NewGRF_compatibility NewGRF compatibility] and what actions break compatibility and how to avoid breaking it in the first place.&lt;br /&gt;
&lt;br /&gt;
However, if you must break compatibility, here&#039;s how to handle the version information in your NML file.&lt;br /&gt;
&lt;br /&gt;
=== OpenTTD targeted NewGRFs ===&lt;br /&gt;
* Keep the GRFID you have;&lt;br /&gt;
* Don&#039;t forget to update &amp;lt;code&amp;gt;grf { version }&amp;lt;/code&amp;gt;;&lt;br /&gt;
* Set &amp;lt;code&amp;gt;grf { min_compatible_version }&amp;lt;/code&amp;gt; to the value of &amp;lt;code&amp;gt;grf { version }&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This way, OpenTTD will hide the old release from the NewGRF window while keeping it available for older savegames to use (provided the user doesn&#039;t delete the old release). Old releases can still be downloaded from BaNaNaS for old savegames.&lt;br /&gt;
&lt;br /&gt;
=== TTDPatch targeted NewGRFs ===&lt;br /&gt;
TTDPatch doesn&#039;t have a concept for &amp;lt;code&amp;gt;grf { min_compatible_version }&amp;lt;/code&amp;gt; (or &amp;lt;code&amp;gt;grf { version }&amp;lt;/code&amp;gt; for that matter). The only way to indicate broken compatibility in TTDPatch is to bump the GRFID. This means that you increase the last byte of the GRFID by one. So if your initial GRFID is &amp;lt;code&amp;gt;&amp;quot;SF\01\01&amp;quot;&amp;lt;/code&amp;gt;, change it to &amp;lt;code&amp;gt;&amp;quot;SF\01\02&amp;quot;&amp;lt;/code&amp;gt; for the next release.&lt;br /&gt;
&lt;br /&gt;
As a consequence, both NewGRFs can be used separate from each other and in OpenTTD both will show up in the NewGRF window. &lt;br /&gt;
&lt;br /&gt;
In order to avoid loading both the old version and the new version in the same game, you have to add a [[NMLTutorial/Version check|version check]] to the NewGRF in order to disable itself (or the older version).&lt;br /&gt;
&lt;br /&gt;
{{NMLTutorialNavbar|NML Syntax|Road vehicle}}&lt;/div&gt;</summary>
		<author><name>Ammler</name></author>
	</entry>
	<entry>
		<id>https://www.tt-wiki.net/index.php?title=NMLTutorial/Installation&amp;diff=7591</id>
		<title>NMLTutorial/Installation</title>
		<link rel="alternate" type="text/html" href="https://www.tt-wiki.net/index.php?title=NMLTutorial/Installation&amp;diff=7591"/>
		<updated>2011-08-22T18:27:08Z</updated>

		<summary type="html">&lt;p&gt;Ammler: /* Linux */ typos&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{NMLTutorial}}&lt;br /&gt;
&lt;br /&gt;
NML is written in Python and therefore can be made to run on every operating system that can run Python. This includes the popular operating sytems Linux, MacOS and Windows. Below you&#039;ll find a description on how to install NML and how to use the commandline NML program on your operating system (MacOS description currently missing, as I don&#039;t have that, but please add it).&lt;br /&gt;
&lt;br /&gt;
{{Note|The NML Documentation reflects the latest state of the NML program. Make sure to update your NML regularly, especially if you find something not working that should work according to the documentation.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Linux ==&lt;br /&gt;
NML requires Pyton, the Python Image Library and Ply. These three things are best installed from your package manager. If you&#039;re looking to compiling NML yourself, you also need the Python Setuptools. Note that NML currently only runs on Python 2.5 through 2.7, but not 3.x. Look for the following in your package manager:&lt;br /&gt;
* python (you might already have this)&lt;br /&gt;
* python-imaging (pil)&lt;br /&gt;
* python-ply&lt;br /&gt;
* python-setuptools&lt;br /&gt;
&lt;br /&gt;
=== Installing NML as precompiled binary (recommended) ===&lt;br /&gt;
The latest version of NML is available as RPM package from the #openttdcoop DevZone. You can find it here: http://bundles.openttdcoop.org/nml/nightlies/LATEST/rpms/. This package is known to work on openSUSE and Red Hat (including Fedora and CentOS) distributions.&lt;br /&gt;
&lt;br /&gt;
You can use the terminal to install this package through your package manager (make sure to run it as superuser). For example on Fedora:&lt;br /&gt;
&lt;br /&gt;
 sudo bash&lt;br /&gt;
 yum install &amp;lt;nowiki&amp;gt;http://bundles.openttdcoop.org/nml/nightlies/LATEST/rpms/nml-rXXXX-suseYYYY.noarch.rpm&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Make sure to replace XXXX and YYYY in the url with the actual version numbers you found via the link above. Enter &amp;quot;y&amp;quot; when asked and when done don&#039;t forget to &amp;lt;code&amp;gt;exit&amp;lt;/code&amp;gt; sudo again, preventing yourself from doing stupid things from this point.&lt;br /&gt;
&lt;br /&gt;
=== Compiling NML yourself ===&lt;br /&gt;
The other option to get NML is to compile it yourself. First you need to get the source from http://bundles.openttdcoop.org/nml/nightlies/LATEST/ or via Mercurial checkout from http://hg.openttdcoop.org/nml (&amp;lt;code&amp;gt;hg clone &amp;lt;nowiki&amp;gt;http://hg.openttdcoop.org/nml&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Also this time you need the terminal as superuser. Then change directory to the (extracted) NML source and run &amp;lt;code&amp;gt;python setup.py install&amp;lt;/code&amp;gt;. For example:&lt;br /&gt;
&lt;br /&gt;
 sudo bash&lt;br /&gt;
 cd ~/Downloads/nml-rXXXX&lt;br /&gt;
 python setup.py install&lt;br /&gt;
 exit&lt;br /&gt;
&lt;br /&gt;
=== Using NML ===&lt;br /&gt;
As said before, NML is a commandline program and therefore doesn&#039;t have a GUI; much like GRFCodec in fact. That means you need to run it from a terminal window. The NML program itself is called &amp;lt;code&amp;gt;nmlc&amp;lt;/code&amp;gt; and the general usage is &amp;lt;code&amp;gt;nmlc [options] &amp;lt;filename&amp;gt;&amp;lt;/code&amp;gt;. First change directory to the directory which has your nml file. Then run the nmlc program to compile your grf. For example:&lt;br /&gt;
&lt;br /&gt;
 cd ~/grfs/mygrf&lt;br /&gt;
 nmlc -u --grf mygrf.grf mygrf.nml&lt;br /&gt;
&lt;br /&gt;
This will encode the nml file ~/grfs/mygrf/mygrf.nml into the grf file ~/grfs/mygrf/mygrf.grf. The -u option is not mandatory, but crops extraneous blue from sprites, reducing the filesize of the grf file.&lt;br /&gt;
&lt;br /&gt;
All commandline options available to NML are available via &amp;lt;code&amp;gt;nmlc -h&amp;lt;/code&amp;gt; and are also listed at the end of this page. Now that you have NML and know how to use it, you can continue this tutorial to learn how to create an actual grf file using NML.&lt;br /&gt;
&lt;br /&gt;
== Windows ==&lt;br /&gt;
NML is available as prebuilt (32 bit) Windows executable from the #openttdcoop DevZone, so there is no need to compile it yourself.&lt;br /&gt;
&lt;br /&gt;
=== Installing NML ===&lt;br /&gt;
Go to http://bundles.openttdcoop.org/nml/nightlies/LATEST/ and download nml-rXXXX-windows-win32.zip, replacing XXXX with the actual version number of the package. The zip file contains a number of files that all need to stay together, so extract the zip file entirely into a single folder, for example D:\grfs\nml.&lt;br /&gt;
&lt;br /&gt;
If you leave it at this, you can already start to use NML, but only from that folder, which makes compiling grfs a bit more difficult as you have to write full paths when encoding a grf file. If you want to run nml from any directory, you need to add the directory containing the nmlc.exe executable to your PATH environment variable. As this can break Windows if you don&#039;t do this properly, we&#039;ll not be explaining this here and we&#039;ll be explaining the long route here. You&#039;re of course free to change your PATH yourself; if you do, you&#039;re probably also smart enough to know how to change the commands as explained in the section below.&lt;br /&gt;
&lt;br /&gt;
=== Using NML ===&lt;br /&gt;
As said before, NML is a commandline program and therefore doesn&#039;t have a GUI; much like GRFCodec in fact. That means you need to run it from a command prompt window. You can start the command prompt from Start &amp;gt; Programs &amp;gt; Accessories &amp;gt; Command Prompt. Or by entering &amp;lt;code&amp;gt;cmd&amp;lt;/code&amp;gt; into the Run dialog or the Start menu search bar.&lt;br /&gt;
&lt;br /&gt;
Next, you need to change directory to the folder where you have nmlc.exe in. Then you can run NML from there. For the example below we&#039;ll be assuming the following:&lt;br /&gt;
* nmlc.exe and related files are in D:\grfs\nml&lt;br /&gt;
* The nml file you want to encode is D:\grfs\mygrf\mygrf.nml&lt;br /&gt;
* The grf file to be created needs to go into D:\grfs\mygrf\mygrf.grf&lt;br /&gt;
&lt;br /&gt;
From the command prompt you can now run the follow commands, one at a time, confirm with Enter after each line:&lt;br /&gt;
&lt;br /&gt;
 D:&lt;br /&gt;
 cd D:\grfs\nml&lt;br /&gt;
 nmlc -u --grf D:\grfs\mygrf\mygrf.grf D:\grfs\mygrf\mygrf.nml&lt;br /&gt;
&lt;br /&gt;
This will encode the nml file D:\grfs\mygrf\mygrf.nml into the grf file D:\grfs\mygrf\mygrf.grf. The -u option is not mandatory, but crops extraneous blue from sprites, reducing the filesize of the grf file. Note that if you have any spaces in a folder of file name, you need to enclose the complete path in double quotes, e.g.: &amp;lt;code&amp;gt;nmlc -u --grf &amp;quot;D:\grfs\my grf\mygrf.grf&amp;quot; &amp;quot;D:\grfs\mgrf\mygrf.nml&amp;quot;&amp;lt;/code&amp;gt;. It is therefore recommended not to have any spaces.&lt;br /&gt;
&lt;br /&gt;
All commandline options available to NML are available via the &amp;lt;code&amp;gt;nmlc -h&amp;lt;/code&amp;gt; command and are also listed at the end of this page. Now that you have NML and know how to use it, you can continue this tutorial to learn how to create an actual grf file using NML.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== NML Commandline Options ==&lt;br /&gt;
&#039;&#039;From the NML readme&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 Usage: nmlc [options] &amp;lt;filename&amp;gt;&lt;br /&gt;
 Where &amp;lt;filename&amp;gt; is the nml file to parse&lt;br /&gt;
 &lt;br /&gt;
 Options:&lt;br /&gt;
  --version             show program&#039;s version number and exit&lt;br /&gt;
  -h, --help            show this help message and exit&lt;br /&gt;
  -d, --debug           write the AST to stdout&lt;br /&gt;
  -s, --stack           Dump stack when an error occurs&lt;br /&gt;
  --grf=&amp;lt;file&amp;gt;          write the resulting grf to &amp;lt;file&amp;gt;&lt;br /&gt;
  --nfo=&amp;lt;file&amp;gt;          write nfo output to &amp;lt;file&amp;gt;&lt;br /&gt;
  -c                    crop extraneous transparent blue from real sprites&lt;br /&gt;
  -u                    save uncompressed data in the grf file&lt;br /&gt;
  --nml=&amp;lt;file&amp;gt;          write optimized nml to &amp;lt;file&amp;gt;&lt;br /&gt;
  -o &amp;lt;file&amp;gt;, --output=&amp;lt;file&amp;gt;&lt;br /&gt;
                        write output(nfo/grf) to &amp;lt;file&amp;gt;&lt;br /&gt;
  -t &amp;lt;file&amp;gt;, --custom-tags=&amp;lt;file&amp;gt;&lt;br /&gt;
                        Load custom tags from &amp;lt;file&amp;gt; [default:&lt;br /&gt;
                        custom_tags.txt]&lt;br /&gt;
  -l &amp;lt;dir&amp;gt;, --lang-dir=&amp;lt;dir&amp;gt;&lt;br /&gt;
                        Load language files from directory &amp;lt;dir&amp;gt; [default:&lt;br /&gt;
                        lang]&lt;br /&gt;
  -a &amp;lt;dir&amp;gt;, --sprites-dir=&amp;lt;dir&amp;gt;&lt;br /&gt;
                        Store 32bpp sprites in directory &amp;lt;dir&amp;gt; [default:&lt;br /&gt;
                        sprites]&lt;br /&gt;
  --default-lang=&amp;lt;file&amp;gt;&lt;br /&gt;
                        The default language is stored in &amp;lt;file&amp;gt; [default:&lt;br /&gt;
                        english.lng]&lt;br /&gt;
  --start-sprite=&amp;lt;num&amp;gt;  Set the first sprite number to write (do not use&lt;br /&gt;
                        except when you output nfo that you want to include in&lt;br /&gt;
                        other files)&lt;br /&gt;
  -p &amp;lt;palette&amp;gt;, --palette=&amp;lt;palette&amp;gt;&lt;br /&gt;
                        Force nml to use the palette &amp;lt;pal&amp;gt; [default: ANY].&lt;br /&gt;
                        Valid values are &#039;DOS&#039;, &#039;WIN&#039;, &#039;ANY&#039;&lt;br /&gt;
&lt;br /&gt;
{{NMLTutorialNavbar||Graphic files}}&lt;/div&gt;</summary>
		<author><name>Ammler</name></author>
	</entry>
	<entry>
		<id>https://www.tt-wiki.net/index.php?title=ECS_Compatibility_list&amp;diff=1185</id>
		<title>ECS Compatibility list</title>
		<link rel="alternate" type="text/html" href="https://www.tt-wiki.net/index.php?title=ECS_Compatibility_list&amp;diff=1185"/>
		<updated>2009-09-26T21:20:20Z</updated>

		<summary type="html">&lt;p&gt;Ammler: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;ECS Compatibility list&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=ECS Compatibility list=&lt;br /&gt;
&lt;br /&gt;
The ECS is known to be supported by the following sets&lt;br /&gt;
&lt;br /&gt;
==Vehicles==&lt;br /&gt;
&lt;br /&gt;
===Train sets===&lt;br /&gt;
* [http://users.tt-forums.net/2cc|2cc Train Set]&lt;br /&gt;
*[http://www.tt-forums.net/viewtopic.php?f=26&amp;amp;amp;t;=36419&amp;amp;amp;start;=0|Canadian Trains Set v0.3c]&lt;br /&gt;
* [http://www.tt-forums.net/viewtopic.php?t=12078|Serbian rail set]&lt;br /&gt;
* [http://www.pikkarail.com/ttdp/ukrs/download.htm|UK Renewal Set]&lt;br /&gt;
* [http://www.ttdpatch.net/newgrf.html#25|DBSetXL 0.82] with [http://www.tt-forums.net/viewtopic.php?p=681507#p681507|DBXL ECS extension]&lt;br /&gt;
* [http://www.as-st.com/ttd/newusa/|US Train Set v0.87.3] with ECS adapter for the US Set&lt;br /&gt;
* [http://grfcrawler.tt-forums.net/details.php?do=details&amp;amp;amp;id;=221|Old Wagons, New Cargos] (refits all default waggons, also monorail and maglev)&lt;br /&gt;
&lt;br /&gt;
===Road vehicles===&lt;br /&gt;
* Long vehicles v4 ([http://george.zernebok.net/newgrf/downloads.html|Site], [[LongVehicles|Wiki]])&lt;br /&gt;
* [http://www.tt-forums.net/viewtopic.php?f=26&amp;amp;amp;t;=34744|Refit default rvs to new cargoes]&lt;br /&gt;
* [http://www.tt-forums.net/viewtopic.php?f=26&amp;amp;amp;t;=33415|Generic road vehicle and tram set (GRVTS)]&lt;br /&gt;
&lt;br /&gt;
===Plane sets===&lt;br /&gt;
* PlaneSet&lt;br /&gt;
* Aviators Aircraft (av8)&lt;br /&gt;
* Russian Planeset&lt;br /&gt;
&lt;br /&gt;
===Ship sets===&lt;br /&gt;
&lt;br /&gt;
==House sets==&lt;br /&gt;
* Total town replacement set v3 ([http://users.skynet.be/florisjan/ttd/ttrs.html|Site], [[ECSTTRS3|TTRS v3 ECS support data]])&lt;br /&gt;
*[http://www.tt-forums.net/viewtopic.php?f=26&amp;amp;amp;t;=35458|North American Cities Set v0.1c]&lt;br /&gt;
&lt;br /&gt;
==Station sets==&lt;/div&gt;</summary>
		<author><name>Ammler</name></author>
	</entry>
	<entry>
		<id>https://www.tt-wiki.net/index.php?title=ECS_Compatibility_list&amp;diff=1187</id>
		<title>ECS Compatibility list</title>
		<link rel="alternate" type="text/html" href="https://www.tt-wiki.net/index.php?title=ECS_Compatibility_list&amp;diff=1187"/>
		<updated>2008-06-02T18:17:06Z</updated>

		<summary type="html">&lt;p&gt;Ammler: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;ECS Compatibility list&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=ECS Compatibility list=&lt;br /&gt;
&lt;br /&gt;
The ECS is known to be supported by the following sets&lt;br /&gt;
&lt;br /&gt;
==Vehicles==&lt;br /&gt;
&lt;br /&gt;
===Train sets===&lt;br /&gt;
*[http://www.tt-forums.net/viewtopic.php?f=26&amp;amp;amp;t;=36419&amp;amp;amp;start;=0|Canadian Trains Set v0.3c]&lt;br /&gt;
* [http://www.tt-forums.net/viewtopic.php?t=12078|Serbian rail set]&lt;br /&gt;
* [http://www.pikkarail.com/ttdp/ukrs/download.htm|UK Renewal Set]&lt;br /&gt;
* [http://www.ttdpatch.net/newgrf.html#25|DBSetXL 0.82] with [http://www.tt-forums.net/viewtopic.php?p=681507#p681507|DBXL ECS extension]&lt;br /&gt;
* [http://www.as-st.com/ttd/newusa/|US Train Set v0.87.3] with ECS adapter for the US Set&lt;br /&gt;
* [http://grfcrawler.tt-forums.net/details.php?do=details&amp;amp;amp;id;=221|Old Wagons, New Cargos] (refits all default waggons, also monorail and maglev)&lt;br /&gt;
&lt;br /&gt;
===Road vehicles===&lt;br /&gt;
* Long vehicles v4 ([http://george.zernebok.net/newgrf/downloads.html|Site], [[LongVehicles|Wiki]])&lt;br /&gt;
* [http://www.tt-forums.net/viewtopic.php?f=26&amp;amp;amp;t;=34744|Refit default rvs to new cargoes]&lt;br /&gt;
&lt;br /&gt;
===Plane sets===&lt;br /&gt;
* PlaneSet&lt;br /&gt;
* Aviators Aircraft (av8)&lt;br /&gt;
* Russian Planeset&lt;br /&gt;
&lt;br /&gt;
===Ship sets===&lt;br /&gt;
&lt;br /&gt;
==House sets==&lt;br /&gt;
* Total town replacement set v3 ([http://users.skynet.be/florisjan/ttd/ttrs.html|Site], [[ECSTTRS3|TTRS v3 ECS support data]])&lt;br /&gt;
*[http://www.tt-forums.net/viewtopic.php?f=26&amp;amp;amp;t;=35458|North American Cities Set v0.1c]&lt;br /&gt;
&lt;br /&gt;
==Station sets==&lt;/div&gt;</summary>
		<author><name>Ammler</name></author>
	</entry>
	<entry>
		<id>https://www.tt-wiki.net/index.php?title=RealMaglevs&amp;diff=2793</id>
		<title>RealMaglevs</title>
		<link rel="alternate" type="text/html" href="https://www.tt-wiki.net/index.php?title=RealMaglevs&amp;diff=2793"/>
		<updated>2007-08-26T00:11:00Z</updated>

		<summary type="html">&lt;p&gt;Ammler: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;If you want to know what Maglevs are.&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Real Maglevs=&lt;br /&gt;
&lt;br /&gt;
If you want to know what Maglevs are.&lt;br /&gt;
&lt;br /&gt;
So, you&#039;ve been building maglev routes and buying maglev trains all the time in TTD. &amp;amp;nbsp;Did you know that there are actual maglevs running, that you can even test ride? &amp;amp;nbsp;One of them is the German &amp;amp;quot;Transrapid&amp;amp;quot; system, which uses static magnetic levitation (maglev) to travel without any moving parts. &amp;amp;nbsp;There is more information about it at the [http://www.transrapid.de/cgi-tdb/en/basics.prg|Transrapid home page], &amp;amp;nbsp;and even though it resembles TTD&#039;s monorail more than its maglev, it is in fact a maglev.&lt;br /&gt;
&lt;br /&gt;
Since version 2.0 of TTDPatch, you can actually &#039;&#039;play&#039;&#039; with the Transrapid too, by loading the &amp;amp;quot;DB Set&amp;amp;quot;, available as a new graphics set.&lt;br /&gt;
&lt;br /&gt;
Another maglev train that is still under development is the Japanese MLX, which you can find at the [http://www.rtri.or.jp/rd/maglev/html/english/maglev_frame_E.html|home page]. This one relies on dynamic magnetic levitation, which means that it will only levitate once it is fast enough. &amp;amp;nbsp;It appears that this is what TTD&#039;s maglev is modelled after, because it also has the guide rails at the side of the tracks, and TTD&#039;s Chimera seems to be very similar to the MLU002N test vehicle.&lt;/div&gt;</summary>
		<author><name>Ammler</name></author>
	</entry>
</feed>