<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>http://www.fsdeveloper.com/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Sean+Isom</id>
	<title>FSDeveloper Wiki - User contributions [en-gb]</title>
	<link rel="self" type="application/atom+xml" href="http://www.fsdeveloper.com/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Sean+Isom"/>
	<link rel="alternate" type="text/html" href="http://www.fsdeveloper.com/wiki/index.php/Special:Contributions/Sean_Isom"/>
	<updated>2026-05-11T09:56:53Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.41.1</generator>
	<entry>
		<id>http://www.fsdeveloper.com/wiki/index.php?title=Talk:Main_Page&amp;diff=2353</id>
		<title>Talk:Main Page</title>
		<link rel="alternate" type="text/html" href="http://www.fsdeveloper.com/wiki/index.php?title=Talk:Main_Page&amp;diff=2353"/>
		<updated>2007-04-06T19:48:28Z</updated>

		<summary type="html">&lt;p&gt;Sean Isom: Cleaned out SPAM.  Sean&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Sean Isom</name></author>
	</entry>
	<entry>
		<id>http://www.fsdeveloper.com/wiki/index.php?title=MDL9&amp;diff=2352</id>
		<title>MDL9</title>
		<link rel="alternate" type="text/html" href="http://www.fsdeveloper.com/wiki/index.php?title=MDL9&amp;diff=2352"/>
		<updated>2007-04-06T18:47:43Z</updated>

		<summary type="html">&lt;p&gt;Sean Isom: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Fs2004 scenery MDL format]]&lt;/div&gt;</summary>
		<author><name>Sean Isom</name></author>
	</entry>
	<entry>
		<id>http://www.fsdeveloper.com/wiki/index.php?title=MDLX&amp;diff=2351</id>
		<title>MDLX</title>
		<link rel="alternate" type="text/html" href="http://www.fsdeveloper.com/wiki/index.php?title=MDLX&amp;diff=2351"/>
		<updated>2007-04-06T18:45:33Z</updated>

		<summary type="html">&lt;p&gt;Sean Isom: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[FsX MDL format]]&lt;/div&gt;</summary>
		<author><name>Sean Isom</name></author>
	</entry>
	<entry>
		<id>http://www.fsdeveloper.com/wiki/index.php?title=MDL&amp;diff=2350</id>
		<title>MDL</title>
		<link rel="alternate" type="text/html" href="http://www.fsdeveloper.com/wiki/index.php?title=MDL&amp;diff=2350"/>
		<updated>2007-04-06T18:34:30Z</updated>

		<summary type="html">&lt;p&gt;Sean Isom: created page  Sean&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MDL is the file format used by Microsoft Flight Simulator to store visual model data. It uses the .mdl file extension.&lt;br /&gt;
&lt;br /&gt;
The MDL format can be broken down into 2 main types; the DLL-based type and the RIFF-based type.&lt;br /&gt;
&lt;br /&gt;
The DLL-based format was used in legacy versions of MSFS, before Flight Simulator 2002. It was actually written as a windows DLL library, and simply used the .mdl extension. It is believed to have been coded in Assembly language. More information may be found at [[Legacy MDL Format]].&lt;br /&gt;
&lt;br /&gt;
The RIFF-based format MDL was introduced in FS2002, and has been updated in every subsequent version of FS. It can be broken into 3 main versions: MDL8, MDL9, and MDLX. The [[MDL8]] file was introduced with FS2002 and was used in both aircraft and scenery models. It used a simple architecture, containing mostly BGL opcodes wrapped around a simple RIFF shell. In FS9 we were introduced to the [[MDL9]] format. FS9 is especially interesting because the scenery models used the new MDL9 format, but the aircraft models still used the MDL8 format. The MDL9 format introduced some new fourCC tags, and was better organized, but still relied heavily upon BGL codes to actually draw the model. The [[MDLX]] format was introduced with FSX. It is a complete departure away from the old BGL drawing codes and relies solely on data structures defined within 57 different fourCC tags.&lt;br /&gt;
&lt;br /&gt;
[[category:File Formats]]&lt;br /&gt;
[[category:Aircraft design]]&lt;br /&gt;
[[category:Scenery design]]&lt;/div&gt;</summary>
		<author><name>Sean Isom</name></author>
	</entry>
	<entry>
		<id>http://www.fsdeveloper.com/wiki/index.php?title=Category:SimConnect&amp;diff=2349</id>
		<title>Category:SimConnect</title>
		<link rel="alternate" type="text/html" href="http://www.fsdeveloper.com/wiki/index.php?title=Category:SimConnect&amp;diff=2349"/>
		<updated>2007-04-06T17:56:13Z</updated>

		<summary type="html">&lt;p&gt;Sean Isom: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SimConnect is a new API for writing Flight Simulator Add-ons, introduced in Microsoft Flight Simulator X.&lt;/div&gt;</summary>
		<author><name>Sean Isom</name></author>
	</entry>
	<entry>
		<id>http://www.fsdeveloper.com/wiki/index.php?title=MDL_file_format_(FS9_scenery)&amp;diff=2348</id>
		<title>MDL file format (FS9 scenery)</title>
		<link rel="alternate" type="text/html" href="http://www.fsdeveloper.com/wiki/index.php?title=MDL_file_format_(FS9_scenery)&amp;diff=2348"/>
		<updated>2007-04-06T17:46:47Z</updated>

		<summary type="html">&lt;p&gt;Sean Isom: Few minor changes, Sean&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article describes the format of the Fs2004 scenery MDL (RIFF) objects (Also known as the MDL9 format). This is certainly not a complete description of the format yet, there are still many parts that would have to be investigated further. When new information becomes available this article will be updated again.&lt;br /&gt;
&lt;br /&gt;
The information in this article can be of use for designers who want to do advanced source code tweaking or who want to read the MDL object into a tool they are creating directly. For the normal scenery designer this information is probably less relevant.&lt;br /&gt;
&lt;br /&gt;
The knowledge contained in this article has been gained by analyzing the hexadecimal MDL file format and by evaluating the ASM source file created by GMax (with the Fs2004 gamepack).&lt;br /&gt;
&lt;br /&gt;
== RIFF sections ==&lt;br /&gt;
&lt;br /&gt;
This section lists the different sections that can be found in the RIFF format. For each of them the basic header information will be provided and also a description of their content.&lt;br /&gt;
&lt;br /&gt;
=== RIFF ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;db      &#039;R&#039;,&#039;I&#039;,&#039;F&#039;,&#039;F&#039;&lt;br /&gt;
dd	size of RIFF data&lt;br /&gt;
db	&#039;MDL9&#039;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the main header of the MDL file. The &#039;MDL9&#039; indicates that this MDL file is a Fs9 (Fs2004) MDL file. Aircraft MDL files for example use &#039;MDL8&#039; here. This is because the Fs2002 and Fs2004 aircraft MDL format are the same (this type of aircraft RIFF MDL object will not be discussed further in this article).&lt;br /&gt;
&lt;br /&gt;
=== MDLH ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;db      &#039;M&#039;,&#039;D&#039;,&#039;L&#039;,&#039;H&#039;&lt;br /&gt;
dd	size to end of MDLH block&lt;br /&gt;
dd	size to end of MDLH block&lt;br /&gt;
dd	0&lt;br /&gt;
dd	0&lt;br /&gt;
dd	radius of object, like v2 before&lt;br /&gt;
dd	0&lt;br /&gt;
dd	0&lt;br /&gt;
dd	152, seems fixed value, also found in default scenery&lt;br /&gt;
db	&#039;FS80&#039;&lt;br /&gt;
dd	2304, seems fixed value, also found in default scenery&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the MDL object header and it contains basic information about the object. Most of the parameters are still unknown.&lt;br /&gt;
&lt;br /&gt;
=== ISFT ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;db      &#039;I&#039;,&#039;S&#039;,&#039;F&#039;,&#039;T&#039;&lt;br /&gt;
dd	size to end of ISFT block&lt;br /&gt;
db	string with MakeMDL version information&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This section can store string information. MakeMDL for example stores the information about the version used to create the MDL object in this string.&lt;br /&gt;
&lt;br /&gt;
=== BBOX ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;db      &#039;B&#039;,&#039;B&#039;,&#039;O&#039;,&#039;X&#039;&lt;br /&gt;
dd	size to end of BBOX block&lt;br /&gt;
real4	x_min,z_min,y_min bounding box&lt;br /&gt;
real4	x_max, z_max, y_max bounding box&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This section stores the bounding box of the object. This is thus the closest fitting box around the total object. The bounding box does not have to be centered around the 0,0,0 point. Setting the bounding box wrong can result in display problems in FS, for example the disappear of the object while it should still be visible.&lt;br /&gt;
&lt;br /&gt;
=== CRAS ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;db      &#039;C&#039;,&#039;R&#039;,&#039;A&#039;,&#039;S&#039;&lt;br /&gt;
dd	size to end of BBOX block&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This section contains the crash information of the object. Inside this section the BGL_CRASH_OCTTREE commands can be used to describe the crash information.&lt;br /&gt;
&lt;br /&gt;
=== EXTE ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;db      &#039;E&#039;,&#039;X&#039;,&#039;T&#039;,&#039;E&#039;&lt;br /&gt;
dd	size to end of EXTE block&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This section defines the external model of the object. All sections from the TEXT section downwards can be nested in the EXTE section.&lt;br /&gt;
&lt;br /&gt;
=== SHAD ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;db      &#039;S&#039;,&#039;H&#039;,&#039;A&#039;,&#039;D&#039;&lt;br /&gt;
dd	size to end of SHAD block&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This section defines the shadow model of the object. All sections from the TEXT section downwards can be used nested in the SHAD section.&lt;br /&gt;
&lt;br /&gt;
=== TEXT ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;db      &#039;T&#039;,&#039;E&#039;,&#039;X&#039;,&#039;T&#039;&lt;br /&gt;
dd	size to end of TEXT block&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This section contains a list of all textures used in the object. The only commands valid in this section seems to be the TEXTURE_LIST commands as described in the BGL_FP SDK of Fs2002. This section ends with a BGL_RETURN command.&lt;br /&gt;
&lt;br /&gt;
=== MATE ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;db      &#039;M&#039;,&#039;A&#039;,&#039;T&#039;,&#039;E&#039;&lt;br /&gt;
dd	size to end of MATE block&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This section contains a list of all materials used in the object. The only commands valid in this section seems to be the MATERIAL_LIST commands as described in the BGL_FP SDK of Fs2002. This section ends with a BGL_RETURN command.&lt;br /&gt;
&lt;br /&gt;
=== VERT ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;db      &#039;V&#039;,&#039;E&#039;,&#039;R&#039;,&#039;T&#039;&lt;br /&gt;
dd	size to end of VERT block&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This section contains a list of all vertices used in the object. The only commands valid in this section seems to be the VERTEX_LIST commands as described in the BGL_FP SDK of Fs2002. This section ends with a BGL_RETURN command.&lt;br /&gt;
&lt;br /&gt;
=== BGL ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;db      &#039;B&#039;,&#039;G&#039;,&#039;L&#039;,&#039; &#039;&lt;br /&gt;
dd	size to end of BGL  block&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This section contains the actual drawing code of the object. The DRAW_TRI commands, as described in the BGL_FP SDK of Fs2002, are used to define the triangles that should be drawn.&lt;br /&gt;
&lt;br /&gt;
Almost all other commands listed in previous scenery SDKs can still be used in this section. For example the IFIN1 command to define conditions.&lt;br /&gt;
&lt;br /&gt;
This section ends with a BGL_END and a BGL_RETURN command.&lt;br /&gt;
&lt;br /&gt;
=== TRAN ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;db      &#039;T&#039;,&#039;R&#039;,&#039;A&#039;,&#039;N&#039;&lt;br /&gt;
dd	size to end of TRAN block&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This section is called the static animation block by GMax. Each matrix is given by 16 real4 elements. There is no index number attached to the matrix, each set of 16 real4 commands is probably seen as one matrix automatically (where an index number is set automatically).&lt;br /&gt;
&lt;br /&gt;
=== ANIP ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;db      &#039;A&#039;,&#039;N&#039;,&#039;I&#039;,&#039;P&#039;&lt;br /&gt;
dd	size to end of ANIP block&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This section is called the animation parameter block by GMax. This section contains animation tables. These are used in the ANIC section to form the actual animation matrices.&lt;br /&gt;
&lt;br /&gt;
MakeMDL writes the following tables into this section (you can use different tables of course).&lt;br /&gt;
&lt;br /&gt;
First there are two tables that are used to transform the TICK18 variable into a frame number. MakeMDL uses two tables here because that is more efficient. The first table splits the value that runs between -32767 and 32767 into segments of 16 times the animation length. The second table then splits this new variable into the actual frame count. You can see those two tables as a sawtooth to transform the TICK18 variable into a frame counter repeating the number of frames of your animation all the time. The third table is then used to convert the frame number into a float.&lt;br /&gt;
&lt;br /&gt;
Following these basic tables are the tables that define the actual animation. This table has the following header format:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;dw	1 (translation) or 3 rotation&lt;br /&gt;
real4 previous panim value, usually -1.0&lt;br /&gt;
real4 cached matrix , usually 16 dup (0.0)&lt;br /&gt;
dw	number of entries&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For a translation each entry consists of:&lt;br /&gt;
&amp;lt;pre&amp;gt;real4 frame&lt;br /&gt;
real4	x&lt;br /&gt;
real4	y&lt;br /&gt;
real4	z&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For a rotation each entry consists of:&lt;br /&gt;
&amp;lt;pre&amp;gt;real4 frame&lt;br /&gt;
real4	x&lt;br /&gt;
real4	y&lt;br /&gt;
real4	z&lt;br /&gt;
real4 w&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When an object has both a translation and a rotation table, the basic part of the first three table (to interpolate the frame number) is not repeated for the rotation, only the table for the movement itself is given.&lt;br /&gt;
&lt;br /&gt;
=== ANIC ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;db      &#039;A&#039;,&#039;N&#039;,&#039;I&#039;,&#039;C&#039;&lt;br /&gt;
dd	size to end of ANIC block&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This section is called the animation command block by GMax. In this section the actual animation matrix is interpolated using the tables defined in the ANIP section and the current frame number. This is done using the BGL_TRANSFORM_INDIRECT command.&lt;br /&gt;
&lt;br /&gt;
=== SCEN ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;db      &#039;S&#039;,&#039;C&#039;,&#039;E&#039;,&#039;N&#039;&lt;br /&gt;
dd	size to end of SCEN block&lt;br /&gt;
dw	number of definitions&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This section is called scene graph riff block by GMax. This table defines the relation between different animation matrices. The scene number defined in this table is called in the BGL section when the matrix is applied to the object.&lt;br /&gt;
&lt;br /&gt;
Each definition is given by a BGL_SCENEGRAPH_ENTRY command, this command has the following five parameters:&lt;br /&gt;
  - scene number&lt;br /&gt;
  - next child node scene number (for example used to indicate that a translation and rotation matrix belong together)&lt;br /&gt;
  - next peer node scene number&lt;br /&gt;
  - size of ANIC part of this transformation/animation&lt;br /&gt;
  - size between start of ANIC part and this entry&lt;br /&gt;
&lt;br /&gt;
=== ATTA ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;db      &#039;A&#039;,&#039;T&#039;,&#039;T&#039;,&#039;A&#039;&lt;br /&gt;
dd	size to end of ATTA block&lt;br /&gt;
dd	number of attachpoints&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This section lists the different attachpoints that are available in the object. Each attachpoint is defined with the BGL_ATTACHPOINT_ENTRY command. This command has two parameters, the first is the number of the translation table that should be used to position this attachpoint. The second parameter is the label after which the name of the attachpoint is defined. This name is ended with a zero (0).&lt;br /&gt;
&lt;br /&gt;
=== ATTO ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;db      &#039;A&#039;,&#039;T&#039;,&#039;T&#039;,&#039;O&#039;&lt;br /&gt;
dd	size to end of ATTO block&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This section lists the objects that are attached to attachpoints. The exact structure is not yet known.&lt;br /&gt;
&lt;br /&gt;
For an effect file each entry seems to have the following format:&lt;br /&gt;
&amp;lt;pre&amp;gt;db 0, 16, 4, 0, 4, 0, 115, 0, 105, 0, 0, 0, 0, 0, 0, 0&lt;br /&gt;
db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0&lt;br /&gt;
db name of the effect file (max length 80 characters, without .fx)&lt;br /&gt;
db 0&lt;br /&gt;
db name of attachpoint, as defined in ATTA block&lt;br /&gt;
db 0, 1, 16, 4, 0&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Adding parameters to an effect changes the first line of the code. ie when I added DAY=1; The first line from the above would be:&lt;br /&gt;
&amp;lt;pre&amp;gt;db 0, 16, 4, 0, 4, 0, 121, 0, 111, 0, 0, 0, 0, 0, 0, 0&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For a library object each entry seems to have the following format:&lt;br /&gt;
&amp;lt;pre&amp;gt;db 0, 16, 4, 0, 2, 0, 60, 0, 44, 0, 0, 0, 0, 0, 0, 0&lt;br /&gt;
db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0&lt;br /&gt;
db guid of the object&lt;br /&gt;
db 0, 0, 128, 63&lt;br /&gt;
db name of attachpoint, as defined in ATTA block&lt;br /&gt;
db 0, 1, 16, 4, 0&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PLAT ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;db      &#039;P&#039;,&#039;L&#039;,&#039;A&#039;,&#039;T&#039;&lt;br /&gt;
dd	size to end of PLAT block&lt;br /&gt;
dd	number of platform definitions&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This section defines platforms (hardened platforms) of the object. Each platform plane is defined using a BGL_PLATFORM_ENTRY command. An example of such a command is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;BGL_PLATFORM_ENTRY 1, platform_vertex_start_test_0, 3, 0&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first parameter seem to be used to link entries that belong to the same plane (they have the same number there), the second parameter is the position after which the points are defined. The last two parameters are always the same, I have no idea what they are. I tried if the 3 referred to the amount of vertices that would follow, but when I made it as a rectangle the platform failed to work.&lt;br /&gt;
After the given position a triangle is defined with the BGL_PLATFORM_VERTEX_ENTRY command, this command has a x, z and y position (as floats) as parameters.&lt;br /&gt;
&lt;br /&gt;
I have tried to use different surfacetypes, as available in the GMax script, but the output source seems the same for all of them. This is probably a feature not yet implemented in Fs2004.&lt;br /&gt;
&lt;br /&gt;
When using the Gmax script a lot of other code also appears in the MDL file. These have no relation to the hard surface (sort of bug in MakeMDL). The only thing that makes it hard is the PLAT section itself. No other code is used to call this section.&lt;br /&gt;
&lt;br /&gt;
[[category:Scenery design]]&lt;br /&gt;
[[category:File Formats]]&lt;/div&gt;</summary>
		<author><name>Sean Isom</name></author>
	</entry>
	<entry>
		<id>http://www.fsdeveloper.com/wiki/index.php?title=Category:File_Formats&amp;diff=2346</id>
		<title>Category:File Formats</title>
		<link rel="alternate" type="text/html" href="http://www.fsdeveloper.com/wiki/index.php?title=Category:File_Formats&amp;diff=2346"/>
		<updated>2007-04-06T17:38:37Z</updated>

		<summary type="html">&lt;p&gt;Sean Isom: Minor edit ~~~~&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;These are some of the many file formats used by Microsoft Flight Simulator.&lt;/div&gt;</summary>
		<author><name>Sean Isom</name></author>
	</entry>
	<entry>
		<id>http://www.fsdeveloper.com/wiki/index.php?title=MDL_file_format_(FSX)&amp;diff=2345</id>
		<title>MDL file format (FSX)</title>
		<link rel="alternate" type="text/html" href="http://www.fsdeveloper.com/wiki/index.php?title=MDL_file_format_(FSX)&amp;diff=2345"/>
		<updated>2007-04-06T17:34:44Z</updated>

		<summary type="html">&lt;p&gt;Sean Isom: Added page to the Category:File Formats ~~~~&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This document describes the structure of FsX MDL files. This document is mainly useful for people who want to read or decode these MDL files in a tool.&lt;br /&gt;
&lt;br /&gt;
Compared to the Fs2004 MDL format there are quite a few changes. One of the biggest is that aircraft and scenery MDL files now have the same format. At the moment the knowledge in this document mainly comes from evaluating simple scenery objects, so it is certainly not yet complete. If you have anything to add, please do so.&lt;br /&gt;
&lt;br /&gt;
== MDL sections ==&lt;br /&gt;
&lt;br /&gt;
The MDL file uses the RIFF format, this means that the file consists of different sections. Each section starts with a four character label, followed by the size of the content in bytes (this size is thus without the length of the header itself). The tabel below shows how the different section can be nested.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;2&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Name&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Parent section&#039;&#039;&#039;&lt;br /&gt;
|- &lt;br /&gt;
| RIFF&lt;br /&gt;
| General RIFF section (covers entire file)&lt;br /&gt;
| None&lt;br /&gt;
|- &lt;br /&gt;
| MDLH&lt;br /&gt;
| MDL header&lt;br /&gt;
| RIFF&lt;br /&gt;
|- &lt;br /&gt;
| MDLG&lt;br /&gt;
| Object GUID&lt;br /&gt;
| RIFF&lt;br /&gt;
|- &lt;br /&gt;
| MDLN&lt;br /&gt;
| Object friendly name&lt;br /&gt;
| RIFF&lt;br /&gt;
|- &lt;br /&gt;
| PARA&lt;br /&gt;
| Parameters Block&lt;br /&gt;
| RIFF&lt;br /&gt;
|- &lt;br /&gt;
| CRAS&lt;br /&gt;
| Object crashbox&lt;br /&gt;
| RIFF&lt;br /&gt;
|- &lt;br /&gt;
| BBOX&lt;br /&gt;
| Object boundingbox&lt;br /&gt;
| RIFF&lt;br /&gt;
|- &lt;br /&gt;
| RADI&lt;br /&gt;
| Object radius&lt;br /&gt;
| RIFF&lt;br /&gt;
|- &lt;br /&gt;
| MDLD&lt;br /&gt;
| Exterior Node Root&lt;br /&gt;
| RIFF&lt;br /&gt;
|- &lt;br /&gt;
| TEXT&lt;br /&gt;
| Texture list&lt;br /&gt;
| MDLD&lt;br /&gt;
|- &lt;br /&gt;
| MATE&lt;br /&gt;
| Material list&lt;br /&gt;
| MDLD&lt;br /&gt;
|- &lt;br /&gt;
| INDE&lt;br /&gt;
| Triangle index list&lt;br /&gt;
| MDLD&lt;br /&gt;
|- &lt;br /&gt;
| VERB&lt;br /&gt;
| Vertex buffer list&lt;br /&gt;
| MDLD&lt;br /&gt;
|- &lt;br /&gt;
| VERT&lt;br /&gt;
| Vertex list&lt;br /&gt;
| VERB&lt;br /&gt;
|- &lt;br /&gt;
| TANS&lt;br /&gt;
| Tangent Space list (?)&lt;br /&gt;
| VERB&lt;br /&gt;
|- &lt;br /&gt;
| TRAN&lt;br /&gt;
| Static transformation matrices&lt;br /&gt;
| MDLD&lt;br /&gt;
|- &lt;br /&gt;
| AMAP&lt;br /&gt;
| Animation Map&lt;br /&gt;
| MDLD&lt;br /&gt;
|- &lt;br /&gt;
| SCEN&lt;br /&gt;
| Scenegraph Node Root&lt;br /&gt;
| MDLD&lt;br /&gt;
|- &lt;br /&gt;
| SGAL&lt;br /&gt;
| Scenegraph Animation Linkage&lt;br /&gt;
| MDLD&lt;br /&gt;
|- &lt;br /&gt;
| SGVL&lt;br /&gt;
| Scenegraph Visibility Linkage&lt;br /&gt;
| MDLD&lt;br /&gt;
|- &lt;br /&gt;
| SGJC&lt;br /&gt;
| Scenegraph Joint Constraints&lt;br /&gt;
| MDLD&lt;br /&gt;
|- &lt;br /&gt;
| SGBR&lt;br /&gt;
| Scenegraph Bone Reference&lt;br /&gt;
| MDLD&lt;br /&gt;
|- &lt;br /&gt;
| LODT&lt;br /&gt;
| LOD table&lt;br /&gt;
| MDLD&lt;br /&gt;
|- &lt;br /&gt;
| LODE&lt;br /&gt;
| LOD Entry&lt;br /&gt;
| LODT&lt;br /&gt;
|- &lt;br /&gt;
| PART&lt;br /&gt;
| Part list&lt;br /&gt;
| LODE&lt;br /&gt;
|- &lt;br /&gt;
| ANIB&lt;br /&gt;
| Animation Block&lt;br /&gt;
| MDLD&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The main RIFF section itself has one additional parameter, this is a four character string that indicates the type of RIFF MDL file. For an FsX MDL file the value should always be MDLX.&lt;br /&gt;
&lt;br /&gt;
The following subsection show more details about the content of these different sections.&lt;br /&gt;
&lt;br /&gt;
=== MDLH ===&lt;br /&gt;
&lt;br /&gt;
This the FS MDL object header. It seems to contain of an integer that always has the value of 123456 and a float of value 10. The purpose of these parameter is unknown.&lt;br /&gt;
&lt;br /&gt;
=== MDLG ===&lt;br /&gt;
&lt;br /&gt;
This section stores the object GUID. The GUID is stored in the following parts:&lt;br /&gt;
&lt;br /&gt;
 unsigned long data1&lt;br /&gt;
 unsigned short data2&lt;br /&gt;
 unsigned short data3&lt;br /&gt;
 unsigned char data4[8]&lt;br /&gt;
&lt;br /&gt;
In hexadecimal form the GUID is then written as:&lt;br /&gt;
&lt;br /&gt;
 {data1-data2-data3-data4[0:1]-data4[2:7]}&lt;br /&gt;
&lt;br /&gt;
=== MDLN ===&lt;br /&gt;
&lt;br /&gt;
This section contains a string with the friendly name of the object.&lt;br /&gt;
&lt;br /&gt;
=== PARA ===&lt;br /&gt;
&lt;br /&gt;
This is the ParamsBlock section, containing parameter block data.&lt;br /&gt;
&lt;br /&gt;
=== CRAS ===&lt;br /&gt;
&lt;br /&gt;
This section stores the crashtree of the object. It has first two unknown integer values, then there are 3 float values giving the front lower left corner of the object, then 3 float values giving the length, height, and width, then another unknown integer, and then the branches of the tree, which are all integer values (instead of bytes which had been used in FS2004).&lt;br /&gt;
If the value of a cell is -1 the cell is solid, if it is -2 the cell is free, every other value is the offset of the octet of the next lower node in the branch.&lt;br /&gt;
&lt;br /&gt;
=== BBOX ===&lt;br /&gt;
&lt;br /&gt;
This section stores the bounding box of the object in the following format:&lt;br /&gt;
&lt;br /&gt;
 float xmin&lt;br /&gt;
 float ymin&lt;br /&gt;
 float zmin&lt;br /&gt;
 float xmax&lt;br /&gt;
 float ymax&lt;br /&gt;
 float zmax&lt;br /&gt;
&lt;br /&gt;
=== RADI ===&lt;br /&gt;
&lt;br /&gt;
This section stores the radius of the object as a float.&lt;br /&gt;
&lt;br /&gt;
=== MDLD ===&lt;br /&gt;
&lt;br /&gt;
This section contains the actual data defining the object.&lt;br /&gt;
&lt;br /&gt;
==== TEXT ====&lt;br /&gt;
&lt;br /&gt;
This section contains the list of all textures of the object. Each texture is given as a 64 character string. Unlike the Fs2004 format no additional parameters are stored in the texture list, only the texture name.&lt;br /&gt;
&lt;br /&gt;
==== MATE ====&lt;br /&gt;
&lt;br /&gt;
This section contains a list of all materials of the object. Each material is defined by a 120 byte long record. The definition of this record is given below:&lt;br /&gt;
&lt;br /&gt;
 short  material_type&lt;br /&gt;
 short  (?)&lt;br /&gt;
 float  (?)&lt;br /&gt;
 int    texture_index;&lt;br /&gt;
 float  (?)&lt;br /&gt;
 float  (?)&lt;br /&gt;
 float  (?)&lt;br /&gt;
 float  (?)&lt;br /&gt;
 float  (?)&lt;br /&gt;
 float  (?)&lt;br /&gt;
 float  base_color_R&lt;br /&gt;
 float  base_color_G&lt;br /&gt;
 float  base_color_B&lt;br /&gt;
 float  base_color_A&lt;br /&gt;
 float  specular_color_R&lt;br /&gt;
 float  specular_color_G&lt;br /&gt;
 float  specular_color_B&lt;br /&gt;
 float  specular_color_A&lt;br /&gt;
 float  specular_power&lt;br /&gt;
 float  (?)&lt;br /&gt;
 float  (?)&lt;br /&gt;
 float  (?)&lt;br /&gt;
 float  (?)&lt;br /&gt;
 float  specular_bloom_floor&lt;br /&gt;
 float  ambient_light_scale&lt;br /&gt;
 float  (?)&lt;br /&gt;
 int    source_blend&lt;br /&gt;
 int    destination_blend&lt;br /&gt;
 int    alpha_test_function&lt;br /&gt;
 float  alpha_test_threshold&lt;br /&gt;
 float  z_write_alpha&lt;br /&gt;
&lt;br /&gt;
The material_type is 1 for materials without a texture and 3 for a materials that have a texture.&lt;br /&gt;
&lt;br /&gt;
The source_blend and destination_blend parameters seem to use the following enumeration:&lt;br /&gt;
  1 zero&lt;br /&gt;
  2 once&lt;br /&gt;
  3 srcColor&lt;br /&gt;
  4 invSrcColor&lt;br /&gt;
  5 srcAlpha&lt;br /&gt;
  6 invSrcAlpha&lt;br /&gt;
  7 destAlpha&lt;br /&gt;
  8 invDestAlpha&lt;br /&gt;
  9 destColor&lt;br /&gt;
 10 invDestColor&lt;br /&gt;
&lt;br /&gt;
The alpha_test_function parameter seems to use the following enumeration:&lt;br /&gt;
 1 never&lt;br /&gt;
 2 less&lt;br /&gt;
 3 equal&lt;br /&gt;
 4 lessEqual&lt;br /&gt;
 5 greater&lt;br /&gt;
 6 notEqual&lt;br /&gt;
 7 greaterEqual&lt;br /&gt;
 8 always&lt;br /&gt;
&lt;br /&gt;
The z_write_alpha parameter has a value of 1 (float) when it is enabled (TRUE).&lt;br /&gt;
&lt;br /&gt;
==== INDE ====&lt;br /&gt;
&lt;br /&gt;
This section contains of a lot of triangles, each given by three short values. These values are the indices of the vertices to use. In the PART list an offset is specified for these indices, so the first vertex of a part seems to be zero always.&lt;br /&gt;
&lt;br /&gt;
==== VERB ====&lt;br /&gt;
&lt;br /&gt;
This section gives the vertex buffer of the object.&lt;br /&gt;
&lt;br /&gt;
===== VERT =====&lt;br /&gt;
&lt;br /&gt;
This section contains a list of all vertices of the object. Each vertex is given by a 32 byte record. The definition of this record is given below:&lt;br /&gt;
&lt;br /&gt;
 float position_x&lt;br /&gt;
 float position_y&lt;br /&gt;
 float position_z&lt;br /&gt;
 float normal_x&lt;br /&gt;
 float normal_y&lt;br /&gt;
 float normal_z&lt;br /&gt;
 float texture_mapping_x&lt;br /&gt;
 float texture_mapping_y&lt;br /&gt;
&lt;br /&gt;
===== TANS =====&lt;br /&gt;
&lt;br /&gt;
This section is contains tangent space list data. The first paramter of this list seems to be a zero. Then for each vertex two vectors are given that define a plane that is tangent to the vertex (these vectors are defined as three floats). This data only seems to be set for textured polygons, untextured polygons have null vectors defined here.&lt;br /&gt;
&lt;br /&gt;
==== TRAN ====&lt;br /&gt;
&lt;br /&gt;
This section stores the static transformation matrices. Each matrix is defined by 16 floats. For a definition of these matrices see the [http://msdn.microsoft.com/archive/default.asp?url=/archive/en-us/directx9_m_Summer_04/directx/direct3d/gettingstarted/transforms/matrices/matrices.asp DirectX SDK].&lt;br /&gt;
&lt;br /&gt;
==== AMAP ====&lt;br /&gt;
&lt;br /&gt;
This section contains animation map data.&lt;br /&gt;
&lt;br /&gt;
==== SCEN ====&lt;br /&gt;
&lt;br /&gt;
Unknown at the moment.&lt;br /&gt;
&lt;br /&gt;
==== SGAL ====&lt;br /&gt;
&lt;br /&gt;
This is the scenegraph animation linkage section.&lt;br /&gt;
&lt;br /&gt;
==== SGVL ====&lt;br /&gt;
&lt;br /&gt;
This is the scenegraph visibility linkage section.&lt;br /&gt;
&lt;br /&gt;
==== SGJC ====&lt;br /&gt;
&lt;br /&gt;
This scenegraph section contains IK joint constraint data.&lt;br /&gt;
&lt;br /&gt;
==== SGBR ====&lt;br /&gt;
&lt;br /&gt;
This is the scenegraph bone reference section.&lt;br /&gt;
&lt;br /&gt;
==== LODT ====&lt;br /&gt;
&lt;br /&gt;
This section defines the LOD table of the object. It is followed by a LODE section for each LOD level in the object.&lt;br /&gt;
&lt;br /&gt;
==== LODE ====&lt;br /&gt;
&lt;br /&gt;
This section defines a LOD level for the object. It contains a float that indicates the value of this LOD. The default value if only one LOD is used in the object is 100. This section is followed by a PART section for each part in this LOD level.&lt;br /&gt;
&lt;br /&gt;
==== PART ====&lt;br /&gt;
&lt;br /&gt;
This section defines an object part. The part definition contains the following parameters:&lt;br /&gt;
&lt;br /&gt;
 int  (?)&lt;br /&gt;
 int  (?)&lt;br /&gt;
 int  material_index&lt;br /&gt;
 int  vertex_buffer_index&lt;br /&gt;
 int  vertex_offset&lt;br /&gt;
 int  vertex_count  &lt;br /&gt;
 int  index_offset&lt;br /&gt;
 int  index_count&lt;br /&gt;
 int  mouse_rectangle_ref (?)&lt;br /&gt;
&lt;br /&gt;
vertex_buffer_index tells which VERT structure inside the VERB section is to be used.&lt;br /&gt;
&lt;br /&gt;
The index_offset and index_count are given in indices, so it should be divided by three to get a triangle offset and count.&lt;br /&gt;
&lt;br /&gt;
==== ANIB ====&lt;br /&gt;
&lt;br /&gt;
Animation block section. Data type is uint8.&lt;br /&gt;
&lt;br /&gt;
[[category:Scenery design]]&lt;br /&gt;
[[category:Aircraft design]]&lt;br /&gt;
[[category:File Formats]]&lt;/div&gt;</summary>
		<author><name>Sean Isom</name></author>
	</entry>
	<entry>
		<id>http://www.fsdeveloper.com/wiki/index.php?title=Category:File_Formats&amp;diff=2344</id>
		<title>Category:File Formats</title>
		<link rel="alternate" type="text/html" href="http://www.fsdeveloper.com/wiki/index.php?title=Category:File_Formats&amp;diff=2344"/>
		<updated>2007-04-06T17:24:26Z</updated>

		<summary type="html">&lt;p&gt;Sean Isom: Created Page ~~~~&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[FsX_MDL_format]]&lt;/div&gt;</summary>
		<author><name>Sean Isom</name></author>
	</entry>
	<entry>
		<id>http://www.fsdeveloper.com/wiki/index.php?title=User:Sean_Isom&amp;diff=2343</id>
		<title>User:Sean Isom</title>
		<link rel="alternate" type="text/html" href="http://www.fsdeveloper.com/wiki/index.php?title=User:Sean_Isom&amp;diff=2343"/>
		<updated>2007-04-06T17:15:53Z</updated>

		<summary type="html">&lt;p&gt;Sean Isom: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Welcome to Sean Isom&#039;s user page.&lt;br /&gt;
&lt;br /&gt;
I am also known as gfx4u or flametech21 on various forums. I am theisomizer on the fsdeveloper forums.&lt;br /&gt;
&lt;br /&gt;
Feel free to leave a message on my talk page, or drop me an email at seanisom@flametechnologies.net.&lt;br /&gt;
&lt;br /&gt;
More to come on this page soon.&lt;br /&gt;
&lt;br /&gt;
[[User:Sean Isom|Sean Isom]] 19:15, 6 April 2007 (CEST)&lt;/div&gt;</summary>
		<author><name>Sean Isom</name></author>
	</entry>
	<entry>
		<id>http://www.fsdeveloper.com/wiki/index.php?title=User:Sean_Isom&amp;diff=2342</id>
		<title>User:Sean Isom</title>
		<link rel="alternate" type="text/html" href="http://www.fsdeveloper.com/wiki/index.php?title=User:Sean_Isom&amp;diff=2342"/>
		<updated>2007-04-06T17:15:07Z</updated>

		<summary type="html">&lt;p&gt;Sean Isom: Created Page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Welcome to Sean Isom&#039;s user page.&lt;br /&gt;
&lt;br /&gt;
I am also known as gfx4u or flametech21 on various forums. I am theisomizer on the fsdeveloper forums.&lt;br /&gt;
&lt;br /&gt;
Feel free to leave a message on my talk page, or drop me an email at seanisom@flametechnologies.net.&lt;br /&gt;
&lt;br /&gt;
More to come on this page soon.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sean&lt;/div&gt;</summary>
		<author><name>Sean Isom</name></author>
	</entry>
	<entry>
		<id>http://www.fsdeveloper.com/wiki/index.php?title=User_talk:Sean_Isom&amp;diff=2341</id>
		<title>User talk:Sean Isom</title>
		<link rel="alternate" type="text/html" href="http://www.fsdeveloper.com/wiki/index.php?title=User_talk:Sean_Isom&amp;diff=2341"/>
		<updated>2007-04-06T17:09:06Z</updated>

		<summary type="html">&lt;p&gt;Sean Isom: Created Page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hello, and welcome to my talk page.&lt;br /&gt;
&lt;br /&gt;
More to come soon.&lt;br /&gt;
&lt;br /&gt;
Sean&lt;/div&gt;</summary>
		<author><name>Sean Isom</name></author>
	</entry>
</feed>