<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://moddingwiki.shikadi.net/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Skaterzero807</id>
	<title>ModdingWiki - User contributions [en-gb]</title>
	<link rel="self" type="application/atom+xml" href="https://moddingwiki.shikadi.net/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Skaterzero807"/>
	<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/wiki/Special:Contributions/Skaterzero807"/>
	<updated>2026-06-29T10:21:46Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.11</generator>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=SkyRoads_level_format&amp;diff=7085</id>
		<title>SkyRoads level format</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=SkyRoads_level_format&amp;diff=7085"/>
		<updated>2017-04-27T00:23:02Z</updated>

		<summary type="html">&lt;p&gt;Skaterzero807: /* Palette */ updated palette numbers to match the table above&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{NeedMoreInfo}}&lt;br /&gt;
{{Map Infobox&lt;br /&gt;
 | Type = 3D tile-based&lt;br /&gt;
 | Layers = 1&lt;br /&gt;
 | Tile size = N/A&lt;br /&gt;
 | Viewport = N/A&lt;br /&gt;
 | Games = &lt;br /&gt;
   {{Game|SkyRoads}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;SkyRoads level format&#039;&#039;&#039; is used to store [[SkyRoads]] tracks.  Only &amp;lt;tt&amp;gt;roads.lzs&amp;lt;/tt&amp;gt; is in this format.&lt;br /&gt;
&lt;br /&gt;
== File format ==&lt;br /&gt;
&lt;br /&gt;
=== Header ===&lt;br /&gt;
&lt;br /&gt;
The file starts with a header as follows:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Data type!!Description&lt;br /&gt;
|-&lt;br /&gt;
| UINT16LE offset || Offset of this level (in bytes since start of file)&lt;br /&gt;
|-&lt;br /&gt;
| UINT16LE length || Decompressed size of this level in bytes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This structure is repeated until the offset of the first level is reached.  The length field indicates how much space is required to store the level data once it has been decompressed.&lt;br /&gt;
&lt;br /&gt;
The levels are stored in this order:&lt;br /&gt;
* Demo level, shown after credits in intro&lt;br /&gt;
* Road 1, Red Heat&lt;br /&gt;
* Road 2, Red Heat&lt;br /&gt;
* Road 3, Red Heat&lt;br /&gt;
* Etc.&lt;br /&gt;
&lt;br /&gt;
=== Data ===&lt;br /&gt;
&lt;br /&gt;
Each road is in this layout:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Data type!!Description&lt;br /&gt;
|-&lt;br /&gt;
| UINT16LE gravity || &amp;lt;4 = invalid, 4 = 100, 5 = 200, 6 = 300, etc.&lt;br /&gt;
|-&lt;br /&gt;
| UINT16LE fuel || Amount of fuel. Equal to number of squares the ship can travel forward before running out.&lt;br /&gt;
|-&lt;br /&gt;
| UINT16LE oxygen || Oxygen amount. Roughly equal to the number of seconds before oxygen will run out.&lt;br /&gt;
|-&lt;br /&gt;
| BYTE palette[72*3] || 72-entry [[VGA Palette]] to use in this level (note RGB values are 6-bit but stored as 8-bit)&lt;br /&gt;
|-&lt;br /&gt;
| BYTE road[] || Road data compressed with [[SkyRoads compression]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Map format ==&lt;br /&gt;
&lt;br /&gt;
After decompression, &amp;lt;tt&amp;gt;road&amp;lt;/tt&amp;gt; is an array of [[UINT16LE]] values.  There are seven values per line, and the lines are repeated until the end of the file.&lt;br /&gt;
&lt;br /&gt;
Each value represents a different part of the road surface at that point, and the value is split as follows:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable centred fixed-width&amp;quot;&lt;br /&gt;
!   Bit   !!   15   !!  14   !!  13   !!  12   !!  11   !!  10   !!   9   !!   8   !!    7   !!   6   !!   5   !!   4   !!   3   !!   2   !!   1   !!   0&lt;br /&gt;
|-&lt;br /&gt;
| Purpose ||colspan=5| &#039;&#039;Unused&#039;&#039; || Full-height top block || Half-height top block || Tunnel ||colspan=4| Top Block colour ||colspan=4| Bottom Block colour&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* A bottom block colour of 0 means there is no thin bottom block at that location&lt;br /&gt;
* A top block colour of 0 means it will use the default top block color&lt;br /&gt;
* Bits for full or half blocks can be set simultaneously with pipe bit to make flat-topped pipes&lt;br /&gt;
&lt;br /&gt;
== Palette ==&lt;br /&gt;
&lt;br /&gt;
The palette entries are assigned as follows:&lt;br /&gt;
[[File:Topblockcolors.png|300px|thumb|right|Top block colors: top = white, front = green, right = red, left = cyan, inside = purple]]&lt;br /&gt;
[[File:Pipecolors.png|300px|thumb|right|Pipe colors: front = dark blue, inside = blue, top = cyan, top/side = green, side = yellow, edge = orange]]&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Palette Entry!!Description&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Always black (#000000)&lt;br /&gt;
|-&lt;br /&gt;
| 2 - 16 || Bottom block top faces (15 colors)&lt;br /&gt;
|-&lt;br /&gt;
| 17 -  31 || Bottom block front faces (15 colors)&lt;br /&gt;
|-&lt;br /&gt;
| 32 - 46 || Bottom block right faces (15 colors)&lt;br /&gt;
|-&lt;br /&gt;
| 47 -  61 || Bottom block left faces (15 colors)&lt;br /&gt;
|-&lt;br /&gt;
| 62 || Top block top face (when not using manual color control in bits 4-7)&lt;br /&gt;
|-&lt;br /&gt;
| 63 || Top block front face&lt;br /&gt;
|-&lt;br /&gt;
| 64 || Top block right face&lt;br /&gt;
|-&lt;br /&gt;
| 65 || Top block left face&lt;br /&gt;
|-&lt;br /&gt;
| 66 || Top block inside (when top block also has pipe bit = 1)&lt;br /&gt;
|-&lt;br /&gt;
| 67 || Round pipe front face&lt;br /&gt;
|-&lt;br /&gt;
| 68 || Round pipe inside&lt;br /&gt;
|-&lt;br /&gt;
| 69 || Round pipe top face&lt;br /&gt;
|-&lt;br /&gt;
| 70 || Round pipe top/side face&lt;br /&gt;
|-&lt;br /&gt;
| 71 || Round pipe side face&lt;br /&gt;
|-&lt;br /&gt;
| 72 || Round pipe edge face&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Certain colors in the palette correspond to special behavior tiles (e.g. slippery, burning, or boost). The special tile colors are listed in the table below:&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Special Tile Name!!Palette Entries!!Description&lt;br /&gt;
|-&lt;br /&gt;
| Sticky || &#039;&#039;&#039;3&#039;&#039;&#039;, 18, 33, 48 || Color of the tiles which cause the ship to slow down (default: dark green)&lt;br /&gt;
|-&lt;br /&gt;
| Slippery || &#039;&#039;&#039;9&#039;&#039;&#039;, 24, 39, 54 || Color of the tiles which have no friction (default: dark gray)&lt;br /&gt;
|-&lt;br /&gt;
| Supplies || &#039;&#039;&#039;10&#039;&#039;&#039;, 25, 40, 55 || Color of the tiles which refill oxygen and fuel (default: blue)&lt;br /&gt;
|-&lt;br /&gt;
| Boost || &#039;&#039;&#039;11&#039;&#039;&#039;, 26, 41, 56 || Color of the tiles which cause the ship to speed up (default: light green)&lt;br /&gt;
|-&lt;br /&gt;
| Burning || &#039;&#039;&#039;13&#039;&#039;&#039;, 28, 43, 58 || Color of the tiles which cause the ship to explode (default: light red)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Credits ==&lt;br /&gt;
&lt;br /&gt;
This level format was reverse engineered by [[User:Wolfy|Wolfy]], with [[User:KeenRush|KeenRush]] working out the map code bitfields and how the palette is used.  If you find this information helpful in a project you&#039;re working on, please give credit where credit is due.  (A link back to this wiki would be nice too!)&lt;/div&gt;</summary>
		<author><name>Skaterzero807</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=SkyRoads_level_format&amp;diff=7084</id>
		<title>SkyRoads level format</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=SkyRoads_level_format&amp;diff=7084"/>
		<updated>2017-04-27T00:19:32Z</updated>

		<summary type="html">&lt;p&gt;Skaterzero807: /* Palette */ added table documenting which colors in the palette are for special-behavior tiles&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{NeedMoreInfo}}&lt;br /&gt;
{{Map Infobox&lt;br /&gt;
 | Type = 3D tile-based&lt;br /&gt;
 | Layers = 1&lt;br /&gt;
 | Tile size = N/A&lt;br /&gt;
 | Viewport = N/A&lt;br /&gt;
 | Games = &lt;br /&gt;
   {{Game|SkyRoads}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;SkyRoads level format&#039;&#039;&#039; is used to store [[SkyRoads]] tracks.  Only &amp;lt;tt&amp;gt;roads.lzs&amp;lt;/tt&amp;gt; is in this format.&lt;br /&gt;
&lt;br /&gt;
== File format ==&lt;br /&gt;
&lt;br /&gt;
=== Header ===&lt;br /&gt;
&lt;br /&gt;
The file starts with a header as follows:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Data type!!Description&lt;br /&gt;
|-&lt;br /&gt;
| UINT16LE offset || Offset of this level (in bytes since start of file)&lt;br /&gt;
|-&lt;br /&gt;
| UINT16LE length || Decompressed size of this level in bytes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This structure is repeated until the offset of the first level is reached.  The length field indicates how much space is required to store the level data once it has been decompressed.&lt;br /&gt;
&lt;br /&gt;
The levels are stored in this order:&lt;br /&gt;
* Demo level, shown after credits in intro&lt;br /&gt;
* Road 1, Red Heat&lt;br /&gt;
* Road 2, Red Heat&lt;br /&gt;
* Road 3, Red Heat&lt;br /&gt;
* Etc.&lt;br /&gt;
&lt;br /&gt;
=== Data ===&lt;br /&gt;
&lt;br /&gt;
Each road is in this layout:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Data type!!Description&lt;br /&gt;
|-&lt;br /&gt;
| UINT16LE gravity || &amp;lt;4 = invalid, 4 = 100, 5 = 200, 6 = 300, etc.&lt;br /&gt;
|-&lt;br /&gt;
| UINT16LE fuel || Amount of fuel. Equal to number of squares the ship can travel forward before running out.&lt;br /&gt;
|-&lt;br /&gt;
| UINT16LE oxygen || Oxygen amount. Roughly equal to the number of seconds before oxygen will run out.&lt;br /&gt;
|-&lt;br /&gt;
| BYTE palette[72*3] || 72-entry [[VGA Palette]] to use in this level (note RGB values are 6-bit but stored as 8-bit)&lt;br /&gt;
|-&lt;br /&gt;
| BYTE road[] || Road data compressed with [[SkyRoads compression]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Map format ==&lt;br /&gt;
&lt;br /&gt;
After decompression, &amp;lt;tt&amp;gt;road&amp;lt;/tt&amp;gt; is an array of [[UINT16LE]] values.  There are seven values per line, and the lines are repeated until the end of the file.&lt;br /&gt;
&lt;br /&gt;
Each value represents a different part of the road surface at that point, and the value is split as follows:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable centred fixed-width&amp;quot;&lt;br /&gt;
!   Bit   !!   15   !!  14   !!  13   !!  12   !!  11   !!  10   !!   9   !!   8   !!    7   !!   6   !!   5   !!   4   !!   3   !!   2   !!   1   !!   0&lt;br /&gt;
|-&lt;br /&gt;
| Purpose ||colspan=5| &#039;&#039;Unused&#039;&#039; || Full-height top block || Half-height top block || Tunnel ||colspan=4| Top Block colour ||colspan=4| Bottom Block colour&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* A bottom block colour of 0 means there is no thin bottom block at that location&lt;br /&gt;
* A top block colour of 0 means it will use the default top block color&lt;br /&gt;
* Bits for full or half blocks can be set simultaneously with pipe bit to make flat-topped pipes&lt;br /&gt;
&lt;br /&gt;
== Palette ==&lt;br /&gt;
&lt;br /&gt;
The palette entries are assigned as follows:&lt;br /&gt;
[[File:Topblockcolors.png|300px|thumb|right|Top block colors: top = white, front = green, right = red, left = cyan, inside = purple]]&lt;br /&gt;
[[File:Pipecolors.png|300px|thumb|right|Pipe colors: front = dark blue, inside = blue, top = cyan, top/side = green, side = yellow, edge = orange]]&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Palette Entry!!Description&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Always black (#000000)&lt;br /&gt;
|-&lt;br /&gt;
| 2 - 16 || Bottom block top faces (15 colors)&lt;br /&gt;
|-&lt;br /&gt;
| 17 -  31 || Bottom block front faces (15 colors)&lt;br /&gt;
|-&lt;br /&gt;
| 32 - 46 || Bottom block right faces (15 colors)&lt;br /&gt;
|-&lt;br /&gt;
| 47 -  61 || Bottom block left faces (15 colors)&lt;br /&gt;
|-&lt;br /&gt;
| 62 || Top block top face (when not using manual color control in bits 4-7)&lt;br /&gt;
|-&lt;br /&gt;
| 63 || Top block front face&lt;br /&gt;
|-&lt;br /&gt;
| 64 || Top block right face&lt;br /&gt;
|-&lt;br /&gt;
| 65 || Top block left face&lt;br /&gt;
|-&lt;br /&gt;
| 66 || Top block inside (when top block also has pipe bit = 1)&lt;br /&gt;
|-&lt;br /&gt;
| 67 || Round pipe front face&lt;br /&gt;
|-&lt;br /&gt;
| 68 || Round pipe inside&lt;br /&gt;
|-&lt;br /&gt;
| 69 || Round pipe top face&lt;br /&gt;
|-&lt;br /&gt;
| 70 || Round pipe top/side face&lt;br /&gt;
|-&lt;br /&gt;
| 71 || Round pipe side face&lt;br /&gt;
|-&lt;br /&gt;
| 72 || Round pipe edge face&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Certain colors in the palette correspond to special behavior tiles (e.g. slippery, burning, or boost). The special tile colors are listed in the table below:&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Special Tile Name!!Palette Entries!!Description&lt;br /&gt;
|-&lt;br /&gt;
| Sticky || &#039;&#039;&#039;2&#039;&#039;&#039;, 17, 32, 47 || Color of the tiles which cause the ship to slow down (default: dark green)&lt;br /&gt;
|-&lt;br /&gt;
| Slippery || &#039;&#039;&#039;8&#039;&#039;&#039;, 23, 38, 53 || Color of the tiles which have no friction (default: dark gray)&lt;br /&gt;
|-&lt;br /&gt;
| Supplies || &#039;&#039;&#039;9&#039;&#039;&#039;, 24, 39, 54 || Color of the tiles which refill oxygen and fuel (default: blue)&lt;br /&gt;
|-&lt;br /&gt;
| Boost || &#039;&#039;&#039;10&#039;&#039;&#039;, 25, 40, 55 || Color of the tiles which cause the ship to speed up (default: light green)&lt;br /&gt;
|-&lt;br /&gt;
| Burning || &#039;&#039;&#039;12&#039;&#039;&#039;, 27, 42, 57 || Color of the tiles which cause the ship to explode (default: light red)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Credits ==&lt;br /&gt;
&lt;br /&gt;
This level format was reverse engineered by [[User:Wolfy|Wolfy]], with [[User:KeenRush|KeenRush]] working out the map code bitfields and how the palette is used.  If you find this information helpful in a project you&#039;re working on, please give credit where credit is due.  (A link back to this wiki would be nice too!)&lt;/div&gt;</summary>
		<author><name>Skaterzero807</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=File:SkyRoads_level_format.png&amp;diff=5158</id>
		<title>File:SkyRoads level format.png</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=File:SkyRoads_level_format.png&amp;diff=5158"/>
		<updated>2014-03-15T01:57:51Z</updated>

		<summary type="html">&lt;p&gt;Skaterzero807: Skaterzero807 uploaded a new version of &amp;amp;quot;File:SkyRoads level format.png&amp;amp;quot;: Updated screenshot to latest version of level editor&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Screenshot of 3D-rendered level data extracted from roads.lzs&lt;/div&gt;</summary>
		<author><name>Skaterzero807</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=SkyRoads_level_format&amp;diff=5156</id>
		<title>SkyRoads level format</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=SkyRoads_level_format&amp;diff=5156"/>
		<updated>2014-03-04T03:15:39Z</updated>

		<summary type="html">&lt;p&gt;Skaterzero807: added info on oxygen and fuel amount and clarified offset and length fields&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{NeedMoreInfo}}&lt;br /&gt;
{{Map Infobox&lt;br /&gt;
 | Type = 3D tile-based&lt;br /&gt;
 | Layers = 1&lt;br /&gt;
 | Tile size = N/A&lt;br /&gt;
 | Viewport = N/A&lt;br /&gt;
 | Game1 = SkyRoads&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;SkyRoads level format&#039;&#039;&#039; is used to store [[SkyRoads]] tracks.  Only &amp;lt;tt&amp;gt;roads.lzs&amp;lt;/tt&amp;gt; is in this format.&lt;br /&gt;
&lt;br /&gt;
== File format ==&lt;br /&gt;
&lt;br /&gt;
=== Header ===&lt;br /&gt;
&lt;br /&gt;
The file starts with a header as follows:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Data type!!Description&lt;br /&gt;
|-&lt;br /&gt;
| UINT16LE offset || Offset of this level (in bytes since start of file)&lt;br /&gt;
|-&lt;br /&gt;
| UINT16LE length || Decompressed size of this level in bytes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This structure is repeated until the offset of the first level is reached.  The length field indicates how much space is required to store the level data once it has been decompressed.&lt;br /&gt;
&lt;br /&gt;
The levels are stored in this order:&lt;br /&gt;
* Demo level, shown after credits in intro&lt;br /&gt;
* Road 1, Red Heat&lt;br /&gt;
* Road 2, Red Heat&lt;br /&gt;
* Road 3, Red Heat&lt;br /&gt;
* Etc.&lt;br /&gt;
&lt;br /&gt;
=== Data ===&lt;br /&gt;
&lt;br /&gt;
Each road is in this layout:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Data type!!Description&lt;br /&gt;
|-&lt;br /&gt;
| UINT16LE gravity || &amp;lt;4 = invalid, 4 = 100, 5 = 200, 6 = 300, etc.&lt;br /&gt;
|-&lt;br /&gt;
| UINT16LE fuel || Amount of fuel. Equal to number of squares the ship can travel forward before running out.&lt;br /&gt;
|-&lt;br /&gt;
| UINT16LE oxygen || Oxygen amount. Roughly equal to the number of seconds before oxygen will run out.&lt;br /&gt;
|-&lt;br /&gt;
| BYTE palette[72*3] || 72-entry [[VGA Palette]] to use in this level (note RGB values are 6-bit but stored as 8-bit)&lt;br /&gt;
|-&lt;br /&gt;
| BYTE road[] || Road data compressed with [[SkyRoads compression]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Map format ==&lt;br /&gt;
&lt;br /&gt;
After decompression, &amp;lt;tt&amp;gt;road&amp;lt;/tt&amp;gt; is an array of [[UINT16LE]] values.  There are seven values per line, and the lines are repeated until the end of the file.&lt;br /&gt;
&lt;br /&gt;
Each value represents a different part of the road surface at that point, and the value is split as follows:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable centred fixed-width&amp;quot;&lt;br /&gt;
!   Bit   !!   15   !!  14   !!  13   !!  12   !!  11   !!  10   !!   9   !!   8   !!    7   !!   6   !!   5   !!   4   !!   3   !!   2   !!   1   !!   0&lt;br /&gt;
|-&lt;br /&gt;
| Purpose ||colspan=5| &#039;&#039;Unused&#039;&#039; || Full-height top block || Half-height top block || Tunnel ||colspan=4| Top Block colour ||colspan=4| Bottom Block colour&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* A bottom block colour of 0 means there is no thin bottom block at that location&lt;br /&gt;
* A top block colour of 0 means it will use the default top block color&lt;br /&gt;
* Bits for full or half blocks can be set simultaneously with pipe bit to make flat-topped pipes&lt;br /&gt;
&lt;br /&gt;
== Palette ==&lt;br /&gt;
&lt;br /&gt;
The palette entries are assigned as follows:&lt;br /&gt;
[[File:Topblockcolors.png|300px|thumb|right|Top block colors: top = white, front = green, right = red, left = cyan, inside = purple]]&lt;br /&gt;
[[File:Pipecolors.png|300px|thumb|right|Pipe colors: front = dark blue, inside = blue, top = cyan, top/side = green, side = yellow, edge = orange]]&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Palette Entry!!Description&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Always black (#000000)&lt;br /&gt;
|-&lt;br /&gt;
| 2 - 16 || Bottom block top faces (15 colors)&lt;br /&gt;
|-&lt;br /&gt;
| 17 -  31 || Bottom block front faces (15 colors)&lt;br /&gt;
|-&lt;br /&gt;
| 32 - 46 || Bottom block right faces (15 colors)&lt;br /&gt;
|-&lt;br /&gt;
| 47 -  61 || Bottom block left faces (15 colors)&lt;br /&gt;
|-&lt;br /&gt;
| 62 || Top block top face (when not using manual color control in bits 4-7)&lt;br /&gt;
|-&lt;br /&gt;
| 63 || Top block front face&lt;br /&gt;
|-&lt;br /&gt;
| 64 || Top block right face&lt;br /&gt;
|-&lt;br /&gt;
| 65 || Top block left face&lt;br /&gt;
|-&lt;br /&gt;
| 66 || Top block inside (when top block also has pipe bit = 1)&lt;br /&gt;
|-&lt;br /&gt;
| 67 || Round pipe front face&lt;br /&gt;
|-&lt;br /&gt;
| 68 || Round pipe inside&lt;br /&gt;
|-&lt;br /&gt;
| 69 || Round pipe top face&lt;br /&gt;
|-&lt;br /&gt;
| 70 || Round pipe top/side face&lt;br /&gt;
|-&lt;br /&gt;
| 71 || Round pipe side face&lt;br /&gt;
|-&lt;br /&gt;
| 72 || Round pipe edge face&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Credits ==&lt;br /&gt;
&lt;br /&gt;
This level format was reverse engineered by [[User:Wolfy|Wolfy]], with [[User:KeenRush|KeenRush]] working out the map code bitfields and how the palette is used.  If you find this information helpful in a project you&#039;re working on, please give credit where credit is due.  (A link back to this wiki would be nice too!)&lt;/div&gt;</summary>
		<author><name>Skaterzero807</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=File:SkyRoads_level_format.png&amp;diff=5152</id>
		<title>File:SkyRoads level format.png</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=File:SkyRoads_level_format.png&amp;diff=5152"/>
		<updated>2014-03-02T09:16:52Z</updated>

		<summary type="html">&lt;p&gt;Skaterzero807: Skaterzero807 uploaded a new version of &amp;amp;quot;File:SkyRoads level format.png&amp;amp;quot;: Updated screenshot from level editor.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Screenshot of 3D-rendered level data extracted from roads.lzs&lt;/div&gt;</summary>
		<author><name>Skaterzero807</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=File:SkyRoads_level_format.png&amp;diff=5142</id>
		<title>File:SkyRoads level format.png</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=File:SkyRoads_level_format.png&amp;diff=5142"/>
		<updated>2014-03-01T07:52:05Z</updated>

		<summary type="html">&lt;p&gt;Skaterzero807: Screenshot of 3D-rendered level data extracted from roads.lzs&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Screenshot of 3D-rendered level data extracted from roads.lzs&lt;/div&gt;</summary>
		<author><name>Skaterzero807</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=SkyRoads_level_format&amp;diff=5141</id>
		<title>SkyRoads level format</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=SkyRoads_level_format&amp;diff=5141"/>
		<updated>2014-02-28T23:01:24Z</updated>

		<summary type="html">&lt;p&gt;Skaterzero807: added image describing top-block colors&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{NeedMoreInfo}}&lt;br /&gt;
{{Map Infobox&lt;br /&gt;
 | Type = 3D tile-based&lt;br /&gt;
 | Layers = 1&lt;br /&gt;
 | Tile size = N/A&lt;br /&gt;
 | Viewport = N/A&lt;br /&gt;
 | Game1 = SkyRoads&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;SkyRoads level format&#039;&#039;&#039; is used to store [[SkyRoads]] tracks.  Only &amp;lt;tt&amp;gt;roads.lzs&amp;lt;/tt&amp;gt; is in this format.&lt;br /&gt;
&lt;br /&gt;
== File format ==&lt;br /&gt;
&lt;br /&gt;
=== Header ===&lt;br /&gt;
&lt;br /&gt;
The file starts with a header as follows:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Data type!!Description&lt;br /&gt;
|-&lt;br /&gt;
| UINT16LE offset || Offset of this level&lt;br /&gt;
|-&lt;br /&gt;
| UINT16LE length || Decompressed size of this level&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This structure is repeated until the offset of the first level is reached.  The length field indicates how much space is required to store the level data once it has been decompressed.&lt;br /&gt;
&lt;br /&gt;
The levels are stored in this order:&lt;br /&gt;
* Demo level, shown after credits in intro&lt;br /&gt;
* Road 1, Red Heat&lt;br /&gt;
* Road 2, Red Heat&lt;br /&gt;
* Road 3, Red Heat&lt;br /&gt;
* Etc.&lt;br /&gt;
&lt;br /&gt;
=== Data ===&lt;br /&gt;
&lt;br /&gt;
Each road is in this layout:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Data type!!Description&lt;br /&gt;
|-&lt;br /&gt;
| UINT16LE gravity || &amp;lt;4 = invalid, 4 = 100, 5 = 200, 6 = 300, etc.&lt;br /&gt;
|-&lt;br /&gt;
| UINT16LE fuel || Amount of fuel&lt;br /&gt;
|-&lt;br /&gt;
| UINT16LE oxygen || Speed at which oxygen depletes&lt;br /&gt;
|-&lt;br /&gt;
| BYTE palette[72*3] || 72-entry [[VGA Palette]] to use in this level (note RGB values are 6-bit but stored as 8-bit)&lt;br /&gt;
|-&lt;br /&gt;
| BYTE road[] || Road data compressed with [[SkyRoads compression]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Map format ==&lt;br /&gt;
&lt;br /&gt;
After decompression, &amp;lt;tt&amp;gt;road&amp;lt;/tt&amp;gt; is an array of [[UINT16LE]] values.  There are seven values per line, and the lines are repeated until the end of the file.&lt;br /&gt;
&lt;br /&gt;
Each value represents a different part of the road surface at that point, and the value is split as follows:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable centred fixed-width&amp;quot;&lt;br /&gt;
!   Bit   !!   15   !!  14   !!  13   !!  12   !!  11   !!  10   !!   9   !!   8   !!    7   !!   6   !!   5   !!   4   !!   3   !!   2   !!   1   !!   0&lt;br /&gt;
|-&lt;br /&gt;
| Purpose ||colspan=5| &#039;&#039;Unused&#039;&#039; || Full-height top block || Half-height top block || Tunnel ||colspan=4| Top Block colour ||colspan=4| Bottom Block colour&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* A bottom block colour of 0 means there is no thin bottom block at that location&lt;br /&gt;
* A top block colour of 0 means it will use the default top block color&lt;br /&gt;
* Bits for full or half blocks can be set simultaneously with pipe bit to make flat-topped pipes&lt;br /&gt;
&lt;br /&gt;
== Palette ==&lt;br /&gt;
&lt;br /&gt;
The palette entries are assigned as follows:&lt;br /&gt;
[[File:Topblockcolors.png|300px|thumb|right|Top block colors: top = white, front = green, right = red, left = cyan, inside = purple]]&lt;br /&gt;
[[File:Pipecolors.png|300px|thumb|right|Pipe colors: front = dark blue, inside = blue, top = cyan, top/side = green, side = yellow, edge = orange]]&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Palette Entry!!Description&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Always black (#000000)&lt;br /&gt;
|-&lt;br /&gt;
| 2 - 16 || Bottom block top faces (15 colors)&lt;br /&gt;
|-&lt;br /&gt;
| 17 -  31 || Bottom block front faces (15 colors)&lt;br /&gt;
|-&lt;br /&gt;
| 32 - 46 || Bottom block right faces (15 colors)&lt;br /&gt;
|-&lt;br /&gt;
| 47 -  61 || Bottom block left faces (15 colors)&lt;br /&gt;
|-&lt;br /&gt;
| 62 || Top block top face (when not using manual color control in bits 4-7)&lt;br /&gt;
|-&lt;br /&gt;
| 63 || Top block front face&lt;br /&gt;
|-&lt;br /&gt;
| 64 || Top block right face&lt;br /&gt;
|-&lt;br /&gt;
| 65 || Top block left face&lt;br /&gt;
|-&lt;br /&gt;
| 66 || Top block inside (when top block also has pipe bit = 1)&lt;br /&gt;
|-&lt;br /&gt;
| 67 || Round pipe front face&lt;br /&gt;
|-&lt;br /&gt;
| 68 || Round pipe inside&lt;br /&gt;
|-&lt;br /&gt;
| 69 || Round pipe top face&lt;br /&gt;
|-&lt;br /&gt;
| 70 || Round pipe top/side face&lt;br /&gt;
|-&lt;br /&gt;
| 71 || Round pipe side face&lt;br /&gt;
|-&lt;br /&gt;
| 72 || Round pipe edge face&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Credits ==&lt;br /&gt;
&lt;br /&gt;
This level format was reverse engineered by [[User:Wolfy|Wolfy]], with [[User:KeenRush|KeenRush]] working out the map code bitfields and how the palette is used.  If you find this information helpful in a project you&#039;re working on, please give credit where credit is due.  (A link back to this wiki would be nice too!)&lt;/div&gt;</summary>
		<author><name>Skaterzero807</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=File:Topblockcolors.png&amp;diff=5140</id>
		<title>File:Topblockcolors.png</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=File:Topblockcolors.png&amp;diff=5140"/>
		<updated>2014-02-28T22:58:01Z</updated>

		<summary type="html">&lt;p&gt;Skaterzero807: Modified colors of top blocks to demonstrate the palette mapping&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Modified colors of top blocks to demonstrate the palette mapping&lt;/div&gt;</summary>
		<author><name>Skaterzero807</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=SkyRoads_level_format&amp;diff=5139</id>
		<title>SkyRoads level format</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=SkyRoads_level_format&amp;diff=5139"/>
		<updated>2014-02-28T22:44:16Z</updated>

		<summary type="html">&lt;p&gt;Skaterzero807: converted bullets to table, checked the color todo and removed it, added image to describe the pipe colors&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{NeedMoreInfo}}&lt;br /&gt;
{{Map Infobox&lt;br /&gt;
 | Type = 3D tile-based&lt;br /&gt;
 | Layers = 1&lt;br /&gt;
 | Tile size = N/A&lt;br /&gt;
 | Viewport = N/A&lt;br /&gt;
 | Game1 = SkyRoads&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;SkyRoads level format&#039;&#039;&#039; is used to store [[SkyRoads]] tracks.  Only &amp;lt;tt&amp;gt;roads.lzs&amp;lt;/tt&amp;gt; is in this format.&lt;br /&gt;
&lt;br /&gt;
== File format ==&lt;br /&gt;
&lt;br /&gt;
=== Header ===&lt;br /&gt;
&lt;br /&gt;
The file starts with a header as follows:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Data type!!Description&lt;br /&gt;
|-&lt;br /&gt;
| UINT16LE offset || Offset of this level&lt;br /&gt;
|-&lt;br /&gt;
| UINT16LE length || Decompressed size of this level&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This structure is repeated until the offset of the first level is reached.  The length field indicates how much space is required to store the level data once it has been decompressed.&lt;br /&gt;
&lt;br /&gt;
The levels are stored in this order:&lt;br /&gt;
* Demo level, shown after credits in intro&lt;br /&gt;
* Road 1, Red Heat&lt;br /&gt;
* Road 2, Red Heat&lt;br /&gt;
* Road 3, Red Heat&lt;br /&gt;
* Etc.&lt;br /&gt;
&lt;br /&gt;
=== Data ===&lt;br /&gt;
&lt;br /&gt;
Each road is in this layout:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Data type!!Description&lt;br /&gt;
|-&lt;br /&gt;
| UINT16LE gravity || &amp;lt;4 = invalid, 4 = 100, 5 = 200, 6 = 300, etc.&lt;br /&gt;
|-&lt;br /&gt;
| UINT16LE fuel || Amount of fuel&lt;br /&gt;
|-&lt;br /&gt;
| UINT16LE oxygen || Speed at which oxygen depletes&lt;br /&gt;
|-&lt;br /&gt;
| BYTE palette[72*3] || 72-entry [[VGA Palette]] to use in this level (note RGB values are 6-bit but stored as 8-bit)&lt;br /&gt;
|-&lt;br /&gt;
| BYTE road[] || Road data compressed with [[SkyRoads compression]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Map format ==&lt;br /&gt;
&lt;br /&gt;
After decompression, &amp;lt;tt&amp;gt;road&amp;lt;/tt&amp;gt; is an array of [[UINT16LE]] values.  There are seven values per line, and the lines are repeated until the end of the file.&lt;br /&gt;
&lt;br /&gt;
Each value represents a different part of the road surface at that point, and the value is split as follows:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable centred fixed-width&amp;quot;&lt;br /&gt;
!   Bit   !!   15   !!  14   !!  13   !!  12   !!  11   !!  10   !!   9   !!   8   !!    7   !!   6   !!   5   !!   4   !!   3   !!   2   !!   1   !!   0&lt;br /&gt;
|-&lt;br /&gt;
| Purpose ||colspan=5| &#039;&#039;Unused&#039;&#039; || Full-height top block || Half-height top block || Tunnel ||colspan=4| Top Block colour ||colspan=4| Bottom Block colour&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* A bottom block colour of 0 means there is no thin bottom block at that location&lt;br /&gt;
* A top block colour of 0 means it will use the default top block color&lt;br /&gt;
* Bits for full or half blocks can be set simultaneously with pipe bit to make flat-topped pipes&lt;br /&gt;
&lt;br /&gt;
== Palette ==&lt;br /&gt;
&lt;br /&gt;
The palette entries are assigned as follows:&lt;br /&gt;
[[File:Pipecolors.png|300px|thumb|right|Pipe colors: front = dark blue, inside = blue, top = cyan, top/side = green, side = yellow, edge = orange]]&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Palette Entry!!Description&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Always black (#000000)&lt;br /&gt;
|-&lt;br /&gt;
| 2 - 16 || Bottom block top faces (15 colors)&lt;br /&gt;
|-&lt;br /&gt;
| 17 -  31 || Bottom block front faces (15 colors)&lt;br /&gt;
|-&lt;br /&gt;
| 32 - 46 || Bottom block right faces (15 colors)&lt;br /&gt;
|-&lt;br /&gt;
| 47 -  61 || Bottom block left faces (15 colors)&lt;br /&gt;
|-&lt;br /&gt;
| 62 || Top block top face (when not using manual color control in bits 4-7)&lt;br /&gt;
|-&lt;br /&gt;
| 63 || Top block front face&lt;br /&gt;
|-&lt;br /&gt;
| 64 || Top block right face&lt;br /&gt;
|-&lt;br /&gt;
| 65 || Top block left face&lt;br /&gt;
|-&lt;br /&gt;
| 66 || Top block inside (when top block also has pipe bit = 1)&lt;br /&gt;
|-&lt;br /&gt;
| 67 || Round pipe front face&lt;br /&gt;
|-&lt;br /&gt;
| 68 || Round pipe inside&lt;br /&gt;
|-&lt;br /&gt;
| 69 || Round pipe top face&lt;br /&gt;
|-&lt;br /&gt;
| 70 || Round pipe top/side face&lt;br /&gt;
|-&lt;br /&gt;
| 71 || Round pipe side face&lt;br /&gt;
|-&lt;br /&gt;
| 72 || Round pipe edge face&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Credits ==&lt;br /&gt;
&lt;br /&gt;
This level format was reverse engineered by [[User:Wolfy|Wolfy]], with [[User:KeenRush|KeenRush]] working out the map code bitfields and how the palette is used.  If you find this information helpful in a project you&#039;re working on, please give credit where credit is due.  (A link back to this wiki would be nice too!)&lt;/div&gt;</summary>
		<author><name>Skaterzero807</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=File:Pipecolors.png&amp;diff=5138</id>
		<title>File:Pipecolors.png</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=File:Pipecolors.png&amp;diff=5138"/>
		<updated>2014-02-28T22:21:47Z</updated>

		<summary type="html">&lt;p&gt;Skaterzero807: Modified pipe colors to demonstrate which color controls which face of the pipe.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Modified pipe colors to demonstrate which color controls which face of the pipe.&lt;/div&gt;</summary>
		<author><name>Skaterzero807</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=SkyRoads_level_format&amp;diff=5135</id>
		<title>SkyRoads level format</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=SkyRoads_level_format&amp;diff=5135"/>
		<updated>2014-02-28T07:02:49Z</updated>

		<summary type="html">&lt;p&gt;Skaterzero807: added clarification on VGA scheme used in colormap and wording of top-block inside color&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{NeedMoreInfo}}&lt;br /&gt;
{{Map Infobox&lt;br /&gt;
 | Type = 3D tile-based&lt;br /&gt;
 | Layers = 1&lt;br /&gt;
 | Tile size = N/A&lt;br /&gt;
 | Viewport = N/A&lt;br /&gt;
 | Game1 = SkyRoads&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;SkyRoads level format&#039;&#039;&#039; is used to store [[SkyRoads]] tracks.  Only &amp;lt;tt&amp;gt;roads.lzs&amp;lt;/tt&amp;gt; is in this format.&lt;br /&gt;
&lt;br /&gt;
== File format ==&lt;br /&gt;
&lt;br /&gt;
=== Header ===&lt;br /&gt;
&lt;br /&gt;
The file starts with a header as follows:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Data type!!Description&lt;br /&gt;
|-&lt;br /&gt;
| UINT16LE offset || Offset of this level&lt;br /&gt;
|-&lt;br /&gt;
| UINT16LE length || Decompressed size of this level&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This structure is repeated until the offset of the first level is reached.  The length field indicates how much space is required to store the level data once it has been decompressed.&lt;br /&gt;
&lt;br /&gt;
The levels are stored in this order:&lt;br /&gt;
* Demo level, shown after credits in intro&lt;br /&gt;
* Road 1, Red Heat&lt;br /&gt;
* Road 2, Red Heat&lt;br /&gt;
* Road 3, Red Heat&lt;br /&gt;
* Etc.&lt;br /&gt;
&lt;br /&gt;
=== Data ===&lt;br /&gt;
&lt;br /&gt;
Each road is in this layout:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Data type!!Description&lt;br /&gt;
|-&lt;br /&gt;
| UINT16LE gravity || &amp;lt;4 = invalid, 4 = 100, 5 = 200, 6 = 300, etc.&lt;br /&gt;
|-&lt;br /&gt;
| UINT16LE fuel || Amount of fuel&lt;br /&gt;
|-&lt;br /&gt;
| UINT16LE oxygen || Speed at which oxygen depletes&lt;br /&gt;
|-&lt;br /&gt;
| BYTE palette[72*3] || 72-entry [[VGA Palette]] to use in this level (note RGB values are 6-bit but stored as 8-bit)&lt;br /&gt;
|-&lt;br /&gt;
| BYTE road[] || Road data compressed with [[SkyRoads compression]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Map format ==&lt;br /&gt;
&lt;br /&gt;
After decompression, &amp;lt;tt&amp;gt;road&amp;lt;/tt&amp;gt; is an array of [[UINT16LE]] values.  There are seven values per line, and the lines are repeated until the end of the file.&lt;br /&gt;
&lt;br /&gt;
Each value represents a different part of the road surface at that point, and the value is split as follows:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable centred fixed-width&amp;quot;&lt;br /&gt;
!   Bit   !!   15   !!  14   !!  13   !!  12   !!  11   !!  10   !!   9   !!   8   !!    7   !!   6   !!   5   !!   4   !!   3   !!   2   !!   1   !!   0&lt;br /&gt;
|-&lt;br /&gt;
| Purpose ||colspan=5| &#039;&#039;Unused&#039;&#039; || Full-height top block || Half-height top block || Tunnel ||colspan=4| Top Block colour ||colspan=4| Bottom Block colour&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* A bottom block colour of 0 means there is no thin bottom block at that location&lt;br /&gt;
* A top block colour of 0 means it will use the default top block color&lt;br /&gt;
* Bits for full or half blocks can be set simultaneously with pipe bit to make flat-topped pipes&lt;br /&gt;
&lt;br /&gt;
== Palette ==&lt;br /&gt;
&lt;br /&gt;
The palette entries are assigned as follows:&lt;br /&gt;
&lt;br /&gt;
* The first entry is always black (#000000)&lt;br /&gt;
* The next 15 entries are the bottom block colors (top faces)&lt;br /&gt;
* The next 15 entries are the bottom block colors (front faces)&lt;br /&gt;
* The next 15 entries are the bottom block colors (right faces)&lt;br /&gt;
* The next 15 entries are the bottom block colors (left faces)&lt;br /&gt;
* The next 5 entries are the colors of the top blocks&#039; top, front, right, left, inside (pipe bit set) colors {{TODO|Check left vs inside colors, usually the same so unsure which is which}}&lt;br /&gt;
* The next 6 entries are for pipes which occur without the full-height or half-height bits set. The colors are in the following order:&lt;br /&gt;
** Front face of pipe&lt;br /&gt;
** Inside of pipe&lt;br /&gt;
** Very top of pipe&lt;br /&gt;
** Pipe top/side&lt;br /&gt;
** Pipe side&lt;br /&gt;
** Pipe side/edge&lt;br /&gt;
&lt;br /&gt;
== Credits ==&lt;br /&gt;
&lt;br /&gt;
This level format was reverse engineered by [[User:Wolfy|Wolfy]], with [[User:KeenRush|KeenRush]] working out the map code bitfields and how the palette is used.  If you find this information helpful in a project you&#039;re working on, please give credit where credit is due.  (A link back to this wiki would be nice too!)&lt;/div&gt;</summary>
		<author><name>Skaterzero807</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=SkyRoads_compression&amp;diff=5134</id>
		<title>SkyRoads compression</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=SkyRoads_compression&amp;diff=5134"/>
		<updated>2014-02-28T06:53:14Z</updated>

		<summary type="html">&lt;p&gt;Skaterzero807: Added MATLAB code since pseudocode was somewhat vague. Also added compression routine for those interested in modifying the entire roads file&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[SkyRoads]] compresses some of its data files with this algorithm, based on LZSS.&lt;br /&gt;
&lt;br /&gt;
== Header ==&lt;br /&gt;
&lt;br /&gt;
The compressed data starts with a short header.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Data type !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || width1 || Number of bits in the LZSS &amp;quot;count&amp;quot; fields&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || width2 || Number of bits in the short LZSS &amp;quot;dist&amp;quot; fields&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || width3 || Number of extra bits in the long LZSS &amp;quot;dist&amp;quot; fields&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The compressed data follows.  It is in big-endian order, meaning the first bit read comes from a byte&#039;s MSB (most significant bit), while each byte&#039;s LSB is the last bit read before moving on to the next byte.&lt;br /&gt;
&lt;br /&gt;
== Algorithm ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Read the three header bytes&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&lt;br /&gt;
    Read one bit&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;&lt;br /&gt;
        If it&#039;s 0:&lt;br /&gt;
        &amp;lt;ol style=&amp;quot;list-style-type: lower-alpha;&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;li&amp;gt;Read &amp;lt;tt&amp;gt;width2&amp;lt;/tt&amp;gt; bits, add 2 to the value, and use it as the LZSS &amp;lt;tt&amp;gt;dist&amp;lt;/tt&amp;gt; value&amp;lt;/li&amp;gt;&lt;br /&gt;
          &amp;lt;li&amp;gt;Read &amp;lt;tt&amp;gt;width1&amp;lt;/tt&amp;gt; bits, add 2 to the value, and use it as the LZSS &amp;lt;tt&amp;gt;count&amp;lt;/tt&amp;gt; value&amp;lt;/li&amp;gt;&lt;br /&gt;
          &amp;lt;li&amp;gt;Look back &amp;lt;tt&amp;gt;dist&amp;lt;/tt&amp;gt; bytes in the output data, and copy &amp;lt;tt&amp;gt;count&amp;lt;/tt&amp;gt; bytes to the end of the output data&amp;lt;/li&amp;gt;&lt;br /&gt;
        &amp;lt;/ol&amp;gt;&lt;br /&gt;
      &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;&lt;br /&gt;
        Otherwise: (it&#039;s a 1)&lt;br /&gt;
        &amp;lt;ol style=&amp;quot;list-style-type: lower-roman;&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;li&amp;gt;Read another single bit&amp;lt;/li&amp;gt;&lt;br /&gt;
          &amp;lt;li&amp;gt;&lt;br /&gt;
            If this bit is 0:&lt;br /&gt;
            &amp;lt;ol style=&amp;quot;list-style-type: lower-alpha;&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;li&amp;gt;Read &amp;lt;tt&amp;gt;width3&amp;lt;/tt&amp;gt; bits, add (1 &amp;lt;&amp;lt; width2) + 2 to the value, and use it as the LZSS &amp;lt;tt&amp;gt;dist&amp;lt;/tt&amp;gt; value&amp;lt;/li&amp;gt;&lt;br /&gt;
              &amp;lt;li&amp;gt;Read &amp;lt;tt&amp;gt;width1&amp;lt;/tt&amp;gt; bits, add 2 to the value, and use it as the LZSS &amp;lt;tt&amp;gt;count&amp;lt;/tt&amp;gt; value&amp;lt;/li&amp;gt;&lt;br /&gt;
              &amp;lt;li&amp;gt;Look back &amp;lt;tt&amp;gt;dist&amp;lt;/tt&amp;gt; bytes in the output data, and copy &amp;lt;tt&amp;gt;count&amp;lt;/tt&amp;gt; bytes to the end of the output data&amp;lt;/li&amp;gt;&lt;br /&gt;
            &amp;lt;/ol&amp;gt;&lt;br /&gt;
          &amp;lt;/li&amp;gt;&lt;br /&gt;
          &amp;lt;li&amp;gt;&lt;br /&gt;
            Otherwise: (it&#039;s a 1 again)&lt;br /&gt;
            &amp;lt;ul&amp;gt;&lt;br /&gt;
              &amp;lt;li&amp;gt;Read 8 bits, and write them as a byte on the end of the output data&amp;lt;/li&amp;gt;&lt;br /&gt;
            &amp;lt;/ul&amp;gt;&lt;br /&gt;
          &amp;lt;/li&amp;gt;&lt;br /&gt;
        &amp;lt;/ol&amp;gt;&lt;br /&gt;
      &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;If there is more input data, go back to step 2&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pseudocode ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
width1 = getbyte()&lt;br /&gt;
width2 = getbyte()&lt;br /&gt;
width3 = getbyte()&lt;br /&gt;
index = 0&lt;br /&gt;
while (index &amp;lt; length) {&lt;br /&gt;
  if (getbits(1) == 0) {&lt;br /&gt;
    dist = 2 + getbits(width2)&lt;br /&gt;
    count = 2 + getbits(width1)&lt;br /&gt;
    copy count bytes from index - dist to index, add count to index&lt;br /&gt;
  }&lt;br /&gt;
  else if(getbits(1) == 0) {&lt;br /&gt;
    dist = 2 + (1 &amp;lt;&amp;lt; width2) getbits(width3)&lt;br /&gt;
    count = 2 + getbits(width1)&lt;br /&gt;
    copy count bytes from index - dist to index, add count to index&lt;br /&gt;
  }&lt;br /&gt;
  else copy 8 bits from input to index, add 1 to index&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MATLAB Source Code ==&lt;br /&gt;
&lt;br /&gt;
=== Compression ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;matlab&amp;quot;&amp;gt;&lt;br /&gt;
%LZSS compressor&lt;br /&gt;
%compresses array of bytes using modified LZSS scheme&lt;br /&gt;
&lt;br /&gt;
function cbytes = compressLZSS(bytes)&lt;br /&gt;
&lt;br /&gt;
%define compression parameters&lt;br /&gt;
crossover = 2;&lt;br /&gt;
width1 = 5;&lt;br /&gt;
width2 = 8;&lt;br /&gt;
width3 = 10;&lt;br /&gt;
&lt;br /&gt;
%calculate ranges of dist and count values&lt;br /&gt;
maxsmdist = bitshift(1, width2) + crossover - 1;&lt;br /&gt;
maxdist = bitshift(1, width3) + maxsmdist;&lt;br /&gt;
minlen = crossover;&lt;br /&gt;
maxlen = bitshift(1, width1) + crossover - 1;&lt;br /&gt;
&lt;br /&gt;
%open temp file for writing&lt;br /&gt;
fid = fopen(&#039;temp.lzs&#039;, &#039;w+&#039;);&lt;br /&gt;
&lt;br /&gt;
%write compression parameters&lt;br /&gt;
fwrite(fid, width1, &#039;ubit8&#039;);&lt;br /&gt;
fwrite(fid, width2, &#039;ubit8&#039;);&lt;br /&gt;
fwrite(fid, width3, &#039;ubit8&#039;);&lt;br /&gt;
&lt;br /&gt;
%loop through input bytes&lt;br /&gt;
i = 1;&lt;br /&gt;
while i &amp;lt;= length(bytes)&lt;br /&gt;
    match = 0;&lt;br /&gt;
    if i &amp;gt; crossover&lt;br /&gt;
        %generate look-ahead buffer&lt;br /&gt;
        lookahead = bytes(i:min(i+maxlen-1, end));&lt;br /&gt;
        &lt;br /&gt;
        %generate scan buffer&lt;br /&gt;
        scan = bytes(max(i-maxdist+1, 1):i-1);&lt;br /&gt;
        &lt;br /&gt;
        %loop through all possible lengths, match longest first&lt;br /&gt;
        for len = min(maxlen, min(length(scan), length(lookahead))):-1:minlen&lt;br /&gt;
            %loop through scan buffer looking for a match&lt;br /&gt;
            complook = lookahead(1:min(len, end));&lt;br /&gt;
            for dist = len:min(maxdist, length(scan))&lt;br /&gt;
                %compare bytes &amp;quot;dist&amp;quot; back, length &amp;quot;len&amp;quot; to lookahead&lt;br /&gt;
                compscan = scan(end-dist+1:end-dist+len);&lt;br /&gt;
                &lt;br /&gt;
                if complook == compscan&lt;br /&gt;
                    %check if the distance can be coded with the small bit&lt;br /&gt;
                    if dist &amp;lt;= maxsmdist&lt;br /&gt;
                        %write signal 0 bit, followed by width2 bits of dist and width1 bits of len&lt;br /&gt;
                        fwrite(fid, 0, &#039;ubit1&#039;);&lt;br /&gt;
                        fwrite(fid, bitsbe(dist-crossover, width2), &#039;ubit1&#039;);&lt;br /&gt;
                        fwrite(fid, bitsbe(len-crossover, width1), &#039;ubit1&#039;);&lt;br /&gt;
%                         fprintf(&#039;Copy from small -%d, %d bytes\n&#039;, dist, len);&lt;br /&gt;
                    else&lt;br /&gt;
                        %write signal 10 bits, followed by width3 bits of dist and width1 bits of len&lt;br /&gt;
                        fwrite(fid, [1 0], &#039;ubit1&#039;);&lt;br /&gt;
                        fwrite(fid, bitsbe(dist-bitshift(1, width2)-crossover, width3), &#039;ubit1&#039;);&lt;br /&gt;
                        fwrite(fid, bitsbe(len-crossover, width1), &#039;ubit1&#039;);&lt;br /&gt;
%                         fprintf(&#039;Copy from large -%d, %d bytes\n&#039;, dist, len);&lt;br /&gt;
                    end&lt;br /&gt;
                    match = 1;&lt;br /&gt;
                    break&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
            if match&lt;br /&gt;
                break&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    %write the byte to the output if no match was made&lt;br /&gt;
    if ~match&lt;br /&gt;
        %write signal 11 bits, followed by byte of data&lt;br /&gt;
        fwrite(fid, [1 1], &#039;ubit1&#039;);&lt;br /&gt;
        fwrite(fid, bitsbe(bytes(i), 8), &#039;ubit1&#039;);&lt;br /&gt;
%         fprintf(&#039;Write byte %d: %d\n&#039;, i, bytes(i));&lt;br /&gt;
        i = i+1;&lt;br /&gt;
    else&lt;br /&gt;
        %don&#039;t write the next len # of bytes by incrementing loop variable&lt;br /&gt;
        i = i+len;&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
%read back the file contents and store in cbytes&lt;br /&gt;
% frewind(fid);&lt;br /&gt;
% bits = fread(fid, inf, &#039;ubit1&#039;);&lt;br /&gt;
% fprintf(&#039;%d&#039;, (bits(1:end).&#039;))&lt;br /&gt;
% fprintf(&#039;\n&#039;)&lt;br /&gt;
frewind(fid);&lt;br /&gt;
cbytes = fread(fid, inf, &#039;ubit8&#039;);&lt;br /&gt;
&lt;br /&gt;
%flip the bits in the compressed section&lt;br /&gt;
cbytes(4:end) = bin2dec(fliplr(dec2bin(cbytes(4:end))));&lt;br /&gt;
&lt;br /&gt;
%close temp file and delete&lt;br /&gt;
fclose(fid);&lt;br /&gt;
delete(&#039;temp.lzs&#039;);&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
%convert unsigned decimal value to BE bits&lt;br /&gt;
function bits = bitsbe(byte, n)&lt;br /&gt;
&lt;br /&gt;
bits = bitget(byte, n:-1:1);&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Decompression ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;matlab&amp;quot;&amp;gt;&lt;br /&gt;
%decompress LZSS bytes knowing resulting bytes should be length N&lt;br /&gt;
function dbytes = decompressLZSS(bytes, N)&lt;br /&gt;
&lt;br /&gt;
%flip the bit order within the compressed section&lt;br /&gt;
bytes = [bytes(1:3); bin2dec(fliplr(dec2bin(bytes(4:end))))];&lt;br /&gt;
&lt;br /&gt;
%save bits to temp file&lt;br /&gt;
ftemp = fopen(&#039;temp.lzs&#039;, &#039;w+&#039;);&lt;br /&gt;
fwrite(ftemp, bytes, &#039;ubit8&#039;);&lt;br /&gt;
frewind(ftemp)&lt;br /&gt;
fout = fopen(&#039;out.lzs&#039;, &#039;w+&#039;);&lt;br /&gt;
&lt;br /&gt;
% bits = fread(ftemp, inf, &#039;ubit1&#039;);&lt;br /&gt;
% fprintf(&#039;%d&#039;, (bits(1:end).&#039;))&lt;br /&gt;
% fprintf(&#039;\n&#039;)&lt;br /&gt;
% frewind(ftemp);&lt;br /&gt;
&lt;br /&gt;
%read compression header bytes&lt;br /&gt;
width1 = fread(ftemp, 1, &#039;uint8&#039;);&lt;br /&gt;
width2 = fread(ftemp, 1, &#039;uint8&#039;);&lt;br /&gt;
width3 = fread(ftemp, 1, &#039;uint8&#039;);&lt;br /&gt;
&lt;br /&gt;
%step through compressed bits and decompress&lt;br /&gt;
%stop once N bits have been written to output&lt;br /&gt;
while ftell(fout) &amp;lt; N&lt;br /&gt;
    b = fread(ftemp, 1, &#039;ubit1&#039;);&lt;br /&gt;
    if ~b&lt;br /&gt;
        %read width2 bits, add 2 -&amp;gt; dist&lt;br /&gt;
        dist = uintbe(fread(ftemp, width2, &#039;ubit1&#039;))+2;&lt;br /&gt;
        %read width1 bits, add 2 -&amp;gt; count&lt;br /&gt;
        count = uintbe(fread(ftemp, width1, &#039;ubit1&#039;))+2;&lt;br /&gt;
        %rewind dist bytes in output&lt;br /&gt;
        fseek(fout, -dist, &#039;eof&#039;);&lt;br /&gt;
        %copy count bytes from output to end&lt;br /&gt;
        copy = fread(fout, count, &#039;ubit8&#039;);&lt;br /&gt;
        fseek(fout, 0, &#039;eof&#039;);&lt;br /&gt;
        fwrite(fout, copy, &#039;ubit8&#039;);&lt;br /&gt;
%         fprintf(&#039;Copy from small -%d, %d bytes\n&#039;, dist, count);&lt;br /&gt;
    else&lt;br /&gt;
        b = fread(ftemp, 1, &#039;ubit1&#039;);&lt;br /&gt;
        if ~b&lt;br /&gt;
            %read width3 bits, add 2+1&amp;lt;&amp;lt;width2 -&amp;gt; dist&lt;br /&gt;
            dist = uintbe(fread(ftemp, width3, &#039;ubit1&#039;))+bitshift(1, width2)+2;&lt;br /&gt;
            %read width1 bits, add 2 -&amp;gt; count&lt;br /&gt;
            count = uintbe(fread(ftemp, width1, &#039;ubit1&#039;))+2;&lt;br /&gt;
            %rewind dist bytes in output&lt;br /&gt;
            fseek(fout, -dist, &#039;eof&#039;);&lt;br /&gt;
            %copy count bytes from output to end&lt;br /&gt;
            copy = fread(fout, count, &#039;ubit8&#039;);&lt;br /&gt;
            fseek(fout, 0, &#039;eof&#039;);&lt;br /&gt;
            fwrite(fout, copy, &#039;ubit8&#039;);&lt;br /&gt;
%             fprintf(&#039;Copy from large -%d, %d bytes\n&#039;, dist, count);&lt;br /&gt;
        else&lt;br /&gt;
            %read a byte and copy to end of output&lt;br /&gt;
            copy = uintbe(fread(ftemp, 8, &#039;ubit1&#039;));&lt;br /&gt;
            fseek(fout, 0, &#039;eof&#039;);&lt;br /&gt;
            fwrite(fout, copy, &#039;ubit8&#039;);&lt;br /&gt;
%             fprintf(&#039;Read byte %d: %d\n&#039;, ftell(fout)-1, copy);&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
%rewind output and read it to get all bytes&lt;br /&gt;
frewind(fout);&lt;br /&gt;
dbytes = fread(fout, inf, &#039;uint8&#039;);&lt;br /&gt;
&lt;br /&gt;
%close files and delete temps&lt;br /&gt;
fclose(ftemp);&lt;br /&gt;
fclose(fout);&lt;br /&gt;
delete(&#039;temp.lzs&#039;);&lt;br /&gt;
delete(&#039;out.lzs&#039;);&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
%convert BE bits to unsigned int&lt;br /&gt;
function i = uintbe(bits)&lt;br /&gt;
&lt;br /&gt;
i = (2.^(length(bits)-1:-1:0))*bits(:);&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Credits ==&lt;br /&gt;
&lt;br /&gt;
This compression algorithm was reverse engineered by [http://forum.xentax.com/memberlist.php?mode=viewprofile&amp;amp;u=44836 Tahg] on the [http://forum.xentax.com/viewtopic.php?p=90513 Xentax forum]. The MATLAB code was submitted by [[User:Skaterzero807|skaterzero807]]. If you find this information helpful in a project you&#039;re working on, please give credit where credit is due.  (A link back to this wiki would be nice too!)&lt;br /&gt;
&lt;br /&gt;
[[Category:Compressed Files]]&lt;br /&gt;
[[Category:SkyRoads]]&lt;/div&gt;</summary>
		<author><name>Skaterzero807</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=SkyRoads_level_format&amp;diff=5133</id>
		<title>SkyRoads level format</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=SkyRoads_level_format&amp;diff=5133"/>
		<updated>2014-02-28T06:41:08Z</updated>

		<summary type="html">&lt;p&gt;Skaterzero807: added info on palette and road bits after doing some testing on decompressed level data, also added info about the ordering of levels in the file&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{NeedMoreInfo}}&lt;br /&gt;
{{Map Infobox&lt;br /&gt;
 | Type = 3D tile-based&lt;br /&gt;
 | Layers = 1&lt;br /&gt;
 | Tile size = N/A&lt;br /&gt;
 | Viewport = N/A&lt;br /&gt;
 | Game1 = SkyRoads&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;SkyRoads level format&#039;&#039;&#039; is used to store [[SkyRoads]] tracks.  Only &amp;lt;tt&amp;gt;roads.lzs&amp;lt;/tt&amp;gt; is in this format.&lt;br /&gt;
&lt;br /&gt;
== File format ==&lt;br /&gt;
&lt;br /&gt;
=== Header ===&lt;br /&gt;
&lt;br /&gt;
The file starts with a header as follows:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Data type!!Description&lt;br /&gt;
|-&lt;br /&gt;
| UINT16LE offset || Offset of this level&lt;br /&gt;
|-&lt;br /&gt;
| UINT16LE length || Decompressed size of this level&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This structure is repeated until the offset of the first level is reached.  The length field indicates how much space is required to store the level data once it has been decompressed.&lt;br /&gt;
&lt;br /&gt;
The levels are stored in this order:&lt;br /&gt;
* Demo level, shown after credits in intro&lt;br /&gt;
* Road 1, Red Heat&lt;br /&gt;
* Road 2, Red Heat&lt;br /&gt;
* Road 3, Red Heat&lt;br /&gt;
* Etc.&lt;br /&gt;
&lt;br /&gt;
=== Data ===&lt;br /&gt;
&lt;br /&gt;
Each road is in this layout:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Data type!!Description&lt;br /&gt;
|-&lt;br /&gt;
| UINT16LE gravity || &amp;lt;4 = invalid, 4 = 100, 5 = 200, 6 = 300, etc.&lt;br /&gt;
|-&lt;br /&gt;
| UINT16LE fuel || Amount of fuel&lt;br /&gt;
|-&lt;br /&gt;
| UINT16LE oxygen || Speed at which oxygen depletes&lt;br /&gt;
|-&lt;br /&gt;
| BYTE palette[72*3] || 72-entry [[VGA Palette]] to use in this level&lt;br /&gt;
|-&lt;br /&gt;
| BYTE road[] || Road data compressed with [[SkyRoads compression]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Map format ==&lt;br /&gt;
&lt;br /&gt;
After decompression, &amp;lt;tt&amp;gt;road&amp;lt;/tt&amp;gt; is an array of [[UINT16LE]] values.  There are seven values per line, and the lines are repeated until the end of the file.&lt;br /&gt;
&lt;br /&gt;
Each value represents a different part of the road surface at that point, and the value is split as follows:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable centred fixed-width&amp;quot;&lt;br /&gt;
!   Bit   !!   15   !!  14   !!  13   !!  12   !!  11   !!  10   !!   9   !!   8   !!    7   !!   6   !!   5   !!   4   !!   3   !!   2   !!   1   !!   0&lt;br /&gt;
|-&lt;br /&gt;
| Purpose ||colspan=5| &#039;&#039;Unused&#039;&#039; || Full-height top block || Half-height top block || Tunnel ||colspan=4| Top Block colour ||colspan=4| Bottom Block colour&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* A bottom block colour of 0 means there is no thin bottom block at that location&lt;br /&gt;
* A top block colour of 0 means it will use the default top block color&lt;br /&gt;
* Bits for full or half blocks can be set simultaneously with pipe bit to make flat-topped pipes&lt;br /&gt;
&lt;br /&gt;
== Palette ==&lt;br /&gt;
&lt;br /&gt;
The palette entries are assigned as follows:&lt;br /&gt;
&lt;br /&gt;
* The first entry is always black (#000000)&lt;br /&gt;
* The next 15 entries are the bottom block colors (top faces)&lt;br /&gt;
* The next 15 entries are the bottom block colors (front faces)&lt;br /&gt;
* The next 15 entries are the bottom block colors (right faces)&lt;br /&gt;
* The next 15 entries are the bottom block colors (left faces)&lt;br /&gt;
* The next 5 entries are the colors of the top blocks&#039; top, front, right, left, inside colors (in that order) {{TODO|Check left vs inside colors, usually the same so unsure which is which}}&lt;br /&gt;
* The next 6 entries are for pipes which occur without the full-height or half-height bits set. The colors are in the following order:&lt;br /&gt;
** Front face of pipe&lt;br /&gt;
** Inside of pipe&lt;br /&gt;
** Very top of pipe&lt;br /&gt;
** Pipe top/side&lt;br /&gt;
** Pipe side&lt;br /&gt;
** Pipe side/edge&lt;br /&gt;
&lt;br /&gt;
== Credits ==&lt;br /&gt;
&lt;br /&gt;
This level format was reverse engineered by [[User:Wolfy|Wolfy]], with [[User:KeenRush|KeenRush]] working out the map code bitfields and how the palette is used.  If you find this information helpful in a project you&#039;re working on, please give credit where credit is due.  (A link back to this wiki would be nice too!)&lt;/div&gt;</summary>
		<author><name>Skaterzero807</name></author>
	</entry>
</feed>