<?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=Frenkel</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=Frenkel"/>
	<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/wiki/Special:Contributions/Frenkel"/>
	<updated>2026-05-15T03:14:36Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.11</generator>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=TED5&amp;diff=10897</id>
		<title>TED5</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=TED5&amp;diff=10897"/>
		<updated>2023-03-16T19:56:41Z</updated>

		<summary type="html">&lt;p&gt;Frenkel: /* Download */ The same version of TED5 that&amp;#039;s in the SNES version of Super 3-D Noah&amp;#039;s Ark is also found in the ROTT &amp;#039;93 prototype&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Tool Infobox&lt;br /&gt;
 | Image = TED5-Keen4.png&lt;br /&gt;
 | Platform = DOS&lt;br /&gt;
 | Download = [http://legacy.3drealms.com/downloads.html#rott 3drealms.com]&lt;br /&gt;
 | Edit1 = Map&lt;br /&gt;
 | Games = &lt;br /&gt;
   {{Game|Bio Menace}}&lt;br /&gt;
   {{Game|Catacomb 3-D}}&lt;br /&gt;
   {{Game|Commander Keen 4-6}}&lt;br /&gt;
   {{Game|Commander Keen Dreams}}&lt;br /&gt;
   {{Game|Dangerous Dave 3}}&lt;br /&gt;
   {{Game|Dangerous Dave 4}}&lt;br /&gt;
   {{Game|Rise of the Triad}}&lt;br /&gt;
   {{Game|Wolfenstein 3-D}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Tile Editor v5.0 (TED5) is a level editor written by [[:Category:id Software|id Software]] that has been used to create the levels for many of their games. It edits the [[GameMaps Format]] seen in many older id Software games and is also apparently able to edit the [[Commander Keen 1-3 Level format]], though how is not known.&lt;br /&gt;
&lt;br /&gt;
== Files used by TED5 ==&lt;br /&gt;
&lt;br /&gt;
TED5 is compatible with any ID game that has a &amp;lt;tt&amp;gt;GAMEMAPS.xxx&amp;lt;/tt&amp;gt; file. However the actual &amp;lt;tt&amp;gt;GAMEMAPS.xxx&amp;lt;/tt&amp;gt; file is the final product, many other supporting files are required for TED5 to function.&lt;br /&gt;
&lt;br /&gt;
If the game is &#039;compressed&#039;, it will not have most of these files. [[Commander Keen 4-6]] is one such game. In contrast &#039;uncompressed&#039; games such as [[Bio Menace]] will have the full complement of files. Sadly, most games are compressed, as this is most efficient.&lt;br /&gt;
&lt;br /&gt;
=== EGAGRAPH.xxx, EGAHEAD.xxx and EGADCT.xxx ===&lt;br /&gt;
&lt;br /&gt;
These are explained fully under [[EGAGraph Format]]; they are respectively the game graphics, the graphics header and the [[Huffman Compression]] dictionary for decompressing graphics. Compressed games will just have the &amp;lt;tt&amp;gt;EGAGRAPH&amp;lt;/tt&amp;gt;; with the HEAD and DCT files stored internally in the executable. Uncompressed games will have an external &amp;lt;tt&amp;gt;EGAHEAD&amp;lt;/tt&amp;gt; and no need for an &amp;lt;tt&amp;gt;EGADCT&amp;lt;/tt&amp;gt; file.&lt;br /&gt;
&lt;br /&gt;
Like all Huffman dictionaries, the &amp;lt;tt&amp;gt;EGADCT&amp;lt;/tt&amp;gt; file can be located in the executable by looking for the string &amp;lt;tt&amp;gt;$FD $01 $00 $00 $00 $00&amp;lt;/tt&amp;gt; which is found at the file&#039;s end. (The file will be 1024 bytes long.) The &amp;lt;tt&amp;gt;EGAHEAD&amp;lt;/tt&amp;gt; file can be located by looking for a 4 (Or 3) byte string which is the &amp;lt;tt&amp;gt;EGAGRAPH&amp;lt;/tt&amp;gt; file size, this is always the last entry. (If you then proceed to move backwards until you reach a zero value entry, you will have the start of the file.)&lt;br /&gt;
&lt;br /&gt;
You will receive an error if these files are absent. If the DCT is missing then TED5 will assume graphics are uncompressed.&lt;br /&gt;
&amp;lt;!-- TODO: A list of the locations of the head and dct for supported games --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Gamemaps ===&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;GAMEMAPS&amp;lt;/tt&amp;gt; file is not used, but is produced by TED5. It contains the compressed game maps and is produced from the &amp;lt;tt&amp;gt;MAPTEMP&amp;lt;/tt&amp;gt; file when the user selects &#039;Carmackize maps&#039; in TED5. Carmackization is complex and takes a long time to do. Because of this it is recommended that modders use Instant Carma! (See below)&lt;br /&gt;
&lt;br /&gt;
=== GFXINFOE.xxx ===&lt;br /&gt;
&lt;br /&gt;
This is a 46 byte file that contains data allowing TED5 to extract the graphics used in levels.It consists of a number of numbers and locations of various tile types.&lt;br /&gt;
&lt;br /&gt;
Levels can be made of 8x8, 16x16 or 32x32 tiles (Always 16 color EGA.) Levels have a foreground plane, and may also have a background and info (Sprite) plane.The structure of the &amp;lt;tt&amp;gt;GFXINFOE&amp;lt;/tt&amp;gt; file is as follows:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset!!Type!!Description&lt;br /&gt;
|-&lt;br /&gt;
|0||[[UINT16LE]]||Number of 8x8 background tiles&lt;br /&gt;
|-&lt;br /&gt;
|2||[[UINT16LE]]||Number of 8x8 foreground tiles&lt;br /&gt;
|-&lt;br /&gt;
|4||[[UINT16LE]]||Number of 16x16 background tiles&lt;br /&gt;
|-&lt;br /&gt;
|6||[[UINT16LE]]||Number of 16x16 foreground tiles&lt;br /&gt;
|-&lt;br /&gt;
|8||[[UINT16LE]]||Number of 32x32 background tiles&lt;br /&gt;
|-&lt;br /&gt;
|10||[[UINT16LE]]||Number of 32x32 foreground tiles&lt;br /&gt;
|-&lt;br /&gt;
|12||[[UINT16LE]]||8x8 back tile start&lt;br /&gt;
|-&lt;br /&gt;
|14||[[UINT16LE]]||8x8 fore tile start&lt;br /&gt;
|-&lt;br /&gt;
|16||[[UINT16LE]]||16x16 back start&lt;br /&gt;
|-&lt;br /&gt;
|18||[[UINT16LE]]||16x16 fore start&lt;br /&gt;
|-&lt;br /&gt;
|20||[[UINT16LE]]||32x32 back start&lt;br /&gt;
|-&lt;br /&gt;
|22||[[UINT16LE]]||32x32 fore start &lt;br /&gt;
|-&lt;br /&gt;
|24||[[UINT16LE]]||Number of pictures&lt;br /&gt;
|-&lt;br /&gt;
|26||[[UINT16LE]]||Number of masked pictures&lt;br /&gt;
|-&lt;br /&gt;
|28||[[UINT16LE]]||Number of sprites&lt;br /&gt;
|-&lt;br /&gt;
|30||[[UINT16LE]]||Picture start&lt;br /&gt;
|-&lt;br /&gt;
|32||[[UINT16LE]]||Mask picture start&lt;br /&gt;
|-&lt;br /&gt;
|34||[[UINT16LE]]||Sprite start&lt;br /&gt;
|-&lt;br /&gt;
|36||[[UINT16LE]]||&amp;quot;offpicstr&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|38||[[UINT16LE]]||&amp;quot;offpicmstr&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|40||[[UINT16LE]]||&amp;quot;offstrstr&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|42||[[UINT16LE]]||Number of extra EGA resources&lt;br /&gt;
|-&lt;br /&gt;
|44||[[UINT16LE]]||Extra EGA resource start&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The location (Start) given for tiles is the entry in the &amp;lt;tt&amp;gt;EGAHEAD.xxx&amp;lt;/tt&amp;gt; file, most &amp;lt;tt&amp;gt;EGAHEAD.xxx&amp;lt;/tt&amp;gt; files consist of 3 byte entries so the actual location, in bytes, in the file is three times this, though older games (Such as [[Commander Keen Dreams]]) have 4 byte entries. (It is not known if or how TED5 tells the difference between these.) Each tile has its own entry in the header.&lt;br /&gt;
&lt;br /&gt;
The icons used by TED5 (For sprites, etc) are calculated as follows; icons follow directly after background tiles, then foreground tiles. There will thus be some &#039;extra&#039; slots between the back and fore tiles. These are used as the number of icons.&lt;br /&gt;
&lt;br /&gt;
This file is found with uncompressed games, but has to be created for compressed games. It is not currently known if it can be extracted somehow from the executable or if it is hard coded for each game.&lt;br /&gt;
&lt;br /&gt;
=== Maptemp and Mapthead ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;MAPTEMP&amp;lt;/tt&amp;gt; file contains the uncarmackized level maps. Carmackization is a form of compression related to [[Keen 1-3 LZW compression]] in that it employs a sliding window. &amp;lt;tt&amp;gt;MAPTEMP&amp;lt;/tt&amp;gt; is however [[RLE Compression]] compressed to avoid excess size. This is easy for TED5 to edit though. This file is changed each time levels are saved in TED5 and is not used by the game. To make usable levels you must select the item &#039;Carmackize maps&#039; in the file menu, which will produce the &amp;lt;tt&amp;gt;GAMEMAPS&amp;lt;/tt&amp;gt; file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;MAPTHEAD&amp;lt;/tt&amp;gt; is the header for the &amp;lt;tt&amp;gt;MAPTEMP&amp;lt;/tt&amp;gt; file. When maps are carmackized it is used to create the &amp;lt;tt&amp;gt;MAPHEAD&amp;lt;/tt&amp;gt; file. &amp;lt;tt&amp;gt;MAPTHEAD&amp;lt;/tt&amp;gt; contains several variables used by TED5 and some older games. Notably it has information for IDs tileinfo program to work with. Its structure is as follows:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset!!Type!!Description&lt;br /&gt;
|-&lt;br /&gt;
|0||[[UINT16LE]]||Bit field for level planes (+1 unmasked, +2 masked, +4 infoplane)&lt;br /&gt;
|-&lt;br /&gt;
|2||[[UINT16LE]]||Type of tile (8x8 = 1, 16x16 = 2, 32x32 = 3)&lt;br /&gt;
|-&lt;br /&gt;
|4||[[UINT16LE]]|||Number of unmasked tileinfo (TILEINFO) planes in file. Most games 2, speed and offset. Max 10&lt;br /&gt;
|-&lt;br /&gt;
|6||[[UINT16LE]]||Number of unmasked tiles&lt;br /&gt;
|-&lt;br /&gt;
|8||[[UINT32LE]][10]||Pointers to tileinfo planes in &amp;lt;tt&amp;gt;MAPTHEAD&amp;lt;/tt&amp;gt; file&lt;br /&gt;
|-&lt;br /&gt;
|48||[[UINT16LE]][10]||Size of TILFINFO planes data.&lt;br /&gt;
|-&lt;br /&gt;
|68||[[char]][10][8]||TILEINFO plane names&lt;br /&gt;
|-&lt;br /&gt;
|148||[[UINT16LE]]||Number of masked tileinfo (TILEINFOM) planes in file. Usually 7. Max 10&lt;br /&gt;
|-&lt;br /&gt;
|150||[[UINT16LE]]||Number of masked tiles&lt;br /&gt;
|-&lt;br /&gt;
|152||[[UINT16LE]][10]||Pointers to TILEINFOM planes in file&lt;br /&gt;
|-&lt;br /&gt;
|192||[[UINT16LE]][10]||Size of TILFINFOM planes data.&lt;br /&gt;
|-&lt;br /&gt;
|212||[[char]][10][8]||TILFINFOM plane names&lt;br /&gt;
|-&lt;br /&gt;
|292||[[UINT16LE]]||RLEW flag, default $ABCD&lt;br /&gt;
|-&lt;br /&gt;
|294||[[UINT32LE]][100]||Pointers to level headers in &amp;lt;tt&amp;gt;MAPTEMP&amp;lt;/tt&amp;gt;. 100 pointers, null values are -1 ($FFFFFFFF)&lt;br /&gt;
|-&lt;br /&gt;
|694||[[UINT32LE]][100]||Level header sizes &amp;lt;tt&amp;gt;MAPTEMP&amp;lt;/tt&amp;gt;. Older games Huffman Compressed headers and used this. Older games have $26 here, the (uncompressed) header size and don&#039;t use it&lt;br /&gt;
|-&lt;br /&gt;
|1094||[[UINT16LE]]||Number of ICON rows TED5 sets aside from masked tiles to display icons. For most games this is 5&lt;br /&gt;
|-&lt;br /&gt;
|1096||[[char]][x]||Optional TILEINFOM and TILEINFO data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Tedinfo ===&lt;br /&gt;
&lt;br /&gt;
This file is used by TED5 to store various details of the level format. Important here is the number of planes in each level, and the number of icons. Icons (used for sprites) are taken from the foreground tiles. The known values are:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset!!Type!!Description&lt;br /&gt;
|-&lt;br /&gt;
|0||[[UINT16LE]]||Level TED opens in (last edited)&lt;br /&gt;
|-&lt;br /&gt;
|2||[[UINT16LE]]||Screen view, close (1) or distant (2)&lt;br /&gt;
|-&lt;br /&gt;
|colspan=3|...&lt;br /&gt;
|-&lt;br /&gt;
|8||[[UINT16LE]]||Number of tile planes in levels (usually 2, fore and back)&lt;br /&gt;
|-&lt;br /&gt;
|colspan=3|...&lt;br /&gt;
|-&lt;br /&gt;
|35||[[BYTE]]||Planes editable/visible in TED; +1 view icon, +2 view fore, +4 view back, +16 edit icon, +32 edit fore, +64 edit back&lt;br /&gt;
|-&lt;br /&gt;
|36||[[UINT16LE]]||h loc in level&lt;br /&gt;
|-&lt;br /&gt;
|38||[[UINT16LE]]||v loc in level&lt;br /&gt;
|-&lt;br /&gt;
|colspan=3|...&lt;br /&gt;
|-&lt;br /&gt;
|119||[[char]][64]||Import map path&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Backup files ==&lt;br /&gt;
&lt;br /&gt;
TED5 backs up all its files when levels are saved or carmackized or TED5 is exited. The old files are saved as &amp;lt;tt&amp;gt;*.BAK&amp;lt;/tt&amp;gt; files and a simple renaming will suffice to undo the latest change. Only one backup is made so it is wise to save these files occasionally.&lt;br /&gt;
&lt;br /&gt;
== Setting up TED5 ==&lt;br /&gt;
&lt;br /&gt;
For uncompressed games, such as [[Bio Menace]], all that is required is to copy the file &amp;lt;tt&amp;gt;TED5.EXE&amp;lt;/tt&amp;gt; into the games directory. For compressed games the situation is slightly more complex.&lt;br /&gt;
&lt;br /&gt;
Some games, such as [[Commander Keen 4-6]] have a Ted setup utility to either extract or create the necessary files. If this is the case then a two step process is required. The first involves copying TED5 and the setup utility and running the setup to obtain the required files. The second step involves using a patching utility (Such as [[CKPatch]]) to patch the modified files back into the executable.&lt;br /&gt;
&lt;br /&gt;
Finally, some games, such as [[Catacomb 3-D]], have no utilities at present. While it is not impossible to modify the levels in these games, it takes a bit more work, since the required files must be extracted manually and the executables illegally modified. It has already been mentioned how the graphics files can be located in an executable, but other files will need to be hard coded until somebody automates the procedure.&lt;br /&gt;
&lt;br /&gt;
== Modifying levels ==&lt;br /&gt;
&lt;br /&gt;
If TED5 is setup correctly then it should run (Dosbox may be required for this.) and go to the first level in the game, usually a world map. There are a number of commands and actions that can be used, which will not be covered here. After the desired changes have been made the user must select &#039;Carmackize maps&#039; from the file menu to produce a modified &amp;lt;tt&amp;gt;GAMEMAPS&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;MAPHEAD&amp;lt;/tt&amp;gt; file. For compressed games such as Keen this file will then need to be patched into the executable.&lt;br /&gt;
&lt;br /&gt;
A level can be completely replaced with one from another GAMEMAPS file by using the &#039;Import levels&#039; command under the file menu. (You will need to specify a patch to a valid GAMEMAPS file.) This allows a person to copy levels between backups, etc.&lt;br /&gt;
&lt;br /&gt;
The program Instant Carma! skips Carmack compression by doing the very minimal amount of work. It takes a fraction of the time of TED5 and can be used while TED5 is running and is thus very useful. Sadly it is only available for Commander Keen 4-6.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- TODO: Perhaps write in full how to use TED5? Or just a link to the plumbing the depths of keen article? --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Other utilities ==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;CKPatch:&amp;lt;/b&amp;gt; A set of utilities that allow Keen 4-6 executables to be modified temporarily and legally by patching a copy of the executable into memory and modifying that. This is vital for using new levels in Keen 4-6 There are several versions available, with the latest having the most features. http://www.bipship.com/CKPatch &lt;br /&gt;
* &amp;lt;b&amp;gt;Fixmhead:&amp;lt;/b&amp;gt; This converts the &amp;lt;tt&amp;gt;MAPTHEAD&amp;lt;/tt&amp;gt; file to &amp;lt;tt&amp;gt;MAPHEAD&amp;lt;/tt&amp;gt;. It is not really required for anything, but is included with a lot of TED5 packs.&lt;br /&gt;
* &amp;lt;b&amp;gt;Galaxymk:&amp;lt;/b&amp;gt; This pack contains everything needed to set Commander Keen 4-6 games up for editing with TED5, including the setups and patchers. http://keenmodding.org/search.php?search_author=The_Fosti&amp;amp;sid=92cde18022face91063ec52109b6c2ec&lt;br /&gt;
* &amp;lt;b&amp;gt;Instant Carma!:&amp;lt;/b&amp;gt; by CK Guy externalizes the carmackization of Keen 4-6 maps, saving time and improving efficiency. http://www.keenmodding.org/viewtopic.php?t=997&lt;br /&gt;
* &amp;lt;b&amp;gt;Tedsetup:&amp;lt;/b&amp;gt; A program that sets up certain games to be editable by TED5, automatically extracting or creating required files, Often comes with TED5&lt;br /&gt;
&lt;br /&gt;
== Supported Games ==&lt;br /&gt;
&lt;br /&gt;
See the infobox above for a list of games that have been successfully edited with TED5, although many of those games have dedicated editors that are more user friendly.&lt;br /&gt;
&lt;br /&gt;
== Download ==&lt;br /&gt;
&lt;br /&gt;
TED5 has been released as open source freeware. TED5 and its source code can be downloaded from [https://legacy.3drealms.com/downloads.html#rott 3D Realms]. It can be used to edit the levels of Bio Menace and to create new levels for Rise of the Triad. It is also possible to edit the levels of Commander Keen 4-6, but this is a bit harder to [http://www.keenmodding.org/viewtopic.php?t=899 set up].&lt;br /&gt;
&lt;br /&gt;
Older versions can be found in [http://web.archive.org/web/20060522213934/http://www.rome.ro/downloads/ddici/ddici.zip Dangerous Dave in Copyright Infringement], in the [https://wl6.fandom.com/wiki/Rise_of_the_Triad_Betas Rise of the Triad September 1993 prototype] and in the source code of the SNES version of [https://github.com/MatthewCallis/NOAH3D/tree/master/NOAH3D/MAPS Super 3-D Noah&#039;s Ark].&lt;br /&gt;
&lt;br /&gt;
[[Category:id Software]]&lt;/div&gt;</summary>
		<author><name>Frenkel</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Microsoft_BASIC_MML&amp;diff=10702</id>
		<title>Microsoft BASIC MML</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Microsoft_BASIC_MML&amp;diff=10702"/>
		<updated>2022-09-03T20:14:43Z</updated>

		<summary type="html">&lt;p&gt;Frenkel: added Paganitzu&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Music Infobox&lt;br /&gt;
 | Type        = Custom&lt;br /&gt;
 | Instruments = PC speaker&lt;br /&gt;
 | NumChannels = 1&lt;br /&gt;
 | NumTracks   = 1&lt;br /&gt;
 | NumPatterns = 1&lt;br /&gt;
 | NumOrders   = 0&lt;br /&gt;
 | Tags        = None&lt;br /&gt;
 | Games = &lt;br /&gt;
   {{Game|Castle Adventure}}&lt;br /&gt;
   {{Game|Paganitzu}}&lt;br /&gt;
   {{Game|The Oregon Trail}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Microsoft BASIC MML&#039;&#039;&#039; is a Music Macro Language developed by Microsoft for their version of the BASIC computer language. The format supports a fair number of traditional sheet music notation. Many games developed in Microsoft BASIC will use this format for music and sound effects. However, despite being initially developed for BASIC, libraries were written which could play the MML in other languages as well, so there are also DOS games written in languages other than BASIC which use this format.&lt;br /&gt;
&lt;br /&gt;
For example, the following MML will play Yankee Doodle:&lt;br /&gt;
&lt;br /&gt;
 o4 l8 g g a b g b a d g g a b l4 g l8 f# d g g a b&amp;gt; c&amp;lt; b a g f# d e f# l4 g g l8 e. l16 f# l8 e d e f# l4 gl8 d. l16 e l8 d c l4&amp;lt; b&amp;gt; d l8 e. l16 f# l8 e d e f# g e d g f# a l4 g g&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
* [http://www.vgmpf.com/Wiki/index.php?title=Microsoft_BASIC_MML Video Game Music Preservation Foundation] - Detailed descriptions on the entire MML as well as the BASIC commands which use it.&lt;/div&gt;</summary>
		<author><name>Frenkel</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=TED5&amp;diff=10685</id>
		<title>TED5</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=TED5&amp;diff=10685"/>
		<updated>2022-08-11T16:38:18Z</updated>

		<summary type="html">&lt;p&gt;Frenkel: /* Download */ added older versions&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Tool Infobox&lt;br /&gt;
 | Image = TED5-Keen4.png&lt;br /&gt;
 | Platform = DOS&lt;br /&gt;
 | Download = [http://legacy.3drealms.com/downloads.html#rott 3drealms.com]&lt;br /&gt;
 | Edit1 = Map&lt;br /&gt;
 | Games = &lt;br /&gt;
   {{Game|Bio Menace}}&lt;br /&gt;
   {{Game|Catacomb 3-D}}&lt;br /&gt;
   {{Game|Commander Keen 4-6}}&lt;br /&gt;
   {{Game|Commander Keen Dreams}}&lt;br /&gt;
   {{Game|Dangerous Dave 3}}&lt;br /&gt;
   {{Game|Dangerous Dave 4}}&lt;br /&gt;
   {{Game|Rise of the Triad}}&lt;br /&gt;
   {{Game|Wolfenstein 3-D}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Tile Editor v5.0 (TED5) is a level editor written by [[:Category:id Software|id Software]] that has been used to create the levels for many of their games. It edits the [[GameMaps Format]] seen in many older id Software games and is also apparently able to edit the [[Commander Keen 1-3 Level format]], though how is not known.&lt;br /&gt;
&lt;br /&gt;
== Files used by TED5 ==&lt;br /&gt;
&lt;br /&gt;
TED5 is compatible with any ID game that has a &amp;lt;tt&amp;gt;GAMEMAPS.xxx&amp;lt;/tt&amp;gt; file. However the actual &amp;lt;tt&amp;gt;GAMEMAPS.xxx&amp;lt;/tt&amp;gt; file is the final product, many other supporting files are required for TED5 to function.&lt;br /&gt;
&lt;br /&gt;
If the game is &#039;compressed&#039;, it will not have most of these files. [[Commander Keen 4-6]] is one such game. In contrast &#039;uncompressed&#039; games such as [[Bio Menace]] will have the full complement of files. Sadly, most games are compressed, as this is most efficient.&lt;br /&gt;
&lt;br /&gt;
=== EGAGRAPH.xxx, EGAHEAD.xxx and EGADCT.xxx ===&lt;br /&gt;
&lt;br /&gt;
These are explained fully under [[EGAGraph Format]]; they are respectively the game graphics, the graphics header and the [[Huffman Compression]] dictionary for decompressing graphics. Compressed games will just have the &amp;lt;tt&amp;gt;EGAGRAPH&amp;lt;/tt&amp;gt;; with the HEAD and DCT files stored internally in the executable. Uncompressed games will have an external &amp;lt;tt&amp;gt;EGAHEAD&amp;lt;/tt&amp;gt; and no need for an &amp;lt;tt&amp;gt;EGADCT&amp;lt;/tt&amp;gt; file.&lt;br /&gt;
&lt;br /&gt;
Like all Huffman dictionaries, the &amp;lt;tt&amp;gt;EGADCT&amp;lt;/tt&amp;gt; file can be located in the executable by looking for the string &amp;lt;tt&amp;gt;$FD $01 $00 $00 $00 $00&amp;lt;/tt&amp;gt; which is found at the file&#039;s end. (The file will be 1024 bytes long.) The &amp;lt;tt&amp;gt;EGAHEAD&amp;lt;/tt&amp;gt; file can be located by looking for a 4 (Or 3) byte string which is the &amp;lt;tt&amp;gt;EGAGRAPH&amp;lt;/tt&amp;gt; file size, this is always the last entry. (If you then proceed to move backwards until you reach a zero value entry, you will have the start of the file.)&lt;br /&gt;
&lt;br /&gt;
You will receive an error if these files are absent. If the DCT is missing then TED5 will assume graphics are uncompressed.&lt;br /&gt;
&amp;lt;!-- TODO: A list of the locations of the head and dct for supported games --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Gamemaps ===&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;GAMEMAPS&amp;lt;/tt&amp;gt; file is not used, but is produced by TED5. It contains the compressed game maps and is produced from the &amp;lt;tt&amp;gt;MAPTEMP&amp;lt;/tt&amp;gt; file when the user selects &#039;Carmackize maps&#039; in TED5. Carmackization is complex and takes a long time to do. Because of this it is recommended that modders use Instant Carma! (See below)&lt;br /&gt;
&lt;br /&gt;
=== GFXINFOE.xxx ===&lt;br /&gt;
&lt;br /&gt;
This is a 46 byte file that contains data allowing TED5 to extract the graphics used in levels.It consists of a number of numbers and locations of various tile types.&lt;br /&gt;
&lt;br /&gt;
Levels can be made of 8x8, 16x16 or 32x32 tiles (Always 16 color EGA.) Levels have a foreground plane, and may also have a background and info (Sprite) plane.The structure of the &amp;lt;tt&amp;gt;GFXINFOE&amp;lt;/tt&amp;gt; file is as follows:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset!!Type!!Description&lt;br /&gt;
|-&lt;br /&gt;
|0||[[UINT16LE]]||Number of 8x8 background tiles&lt;br /&gt;
|-&lt;br /&gt;
|2||[[UINT16LE]]||Number of 8x8 foreground tiles&lt;br /&gt;
|-&lt;br /&gt;
|4||[[UINT16LE]]||Number of 16x16 background tiles&lt;br /&gt;
|-&lt;br /&gt;
|6||[[UINT16LE]]||Number of 16x16 foreground tiles&lt;br /&gt;
|-&lt;br /&gt;
|8||[[UINT16LE]]||Number of 32x32 background tiles&lt;br /&gt;
|-&lt;br /&gt;
|10||[[UINT16LE]]||Number of 32x32 foreground tiles&lt;br /&gt;
|-&lt;br /&gt;
|12||[[UINT16LE]]||8x8 back tile start&lt;br /&gt;
|-&lt;br /&gt;
|14||[[UINT16LE]]||8x8 fore tile start&lt;br /&gt;
|-&lt;br /&gt;
|16||[[UINT16LE]]||16x16 back start&lt;br /&gt;
|-&lt;br /&gt;
|18||[[UINT16LE]]||16x16 fore start&lt;br /&gt;
|-&lt;br /&gt;
|20||[[UINT16LE]]||32x32 back start&lt;br /&gt;
|-&lt;br /&gt;
|22||[[UINT16LE]]||32x32 fore start &lt;br /&gt;
|-&lt;br /&gt;
|24||[[UINT16LE]]||Number of pictures&lt;br /&gt;
|-&lt;br /&gt;
|26||[[UINT16LE]]||Number of masked pictures&lt;br /&gt;
|-&lt;br /&gt;
|28||[[UINT16LE]]||Number of sprites&lt;br /&gt;
|-&lt;br /&gt;
|30||[[UINT16LE]]||Picture start&lt;br /&gt;
|-&lt;br /&gt;
|32||[[UINT16LE]]||Mask picture start&lt;br /&gt;
|-&lt;br /&gt;
|34||[[UINT16LE]]||Sprite start&lt;br /&gt;
|-&lt;br /&gt;
|36||[[UINT16LE]]||&amp;quot;offpicstr&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|38||[[UINT16LE]]||&amp;quot;offpicmstr&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|40||[[UINT16LE]]||&amp;quot;offstrstr&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|42||[[UINT16LE]]||Number of extra EGA resources&lt;br /&gt;
|-&lt;br /&gt;
|44||[[UINT16LE]]||Extra EGA resource start&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The location (Start) given for tiles is the entry in the &amp;lt;tt&amp;gt;EGAHEAD.xxx&amp;lt;/tt&amp;gt; file, most &amp;lt;tt&amp;gt;EGAHEAD.xxx&amp;lt;/tt&amp;gt; files consist of 3 byte entries so the actual location, in bytes, in the file is three times this, though older games (Such as [[Commander Keen Dreams]]) have 4 byte entries. (It is not known if or how TED5 tells the difference between these.) Each tile has its own entry in the header.&lt;br /&gt;
&lt;br /&gt;
The icons used by TED5 (For sprites, etc) are calculated as follows; icons follow directly after background tiles, then foreground tiles. There will thus be some &#039;extra&#039; slots between the back and fore tiles. These are used as the number of icons.&lt;br /&gt;
&lt;br /&gt;
This file is found with uncompressed games, but has to be created for compressed games. It is not currently known if it can be extracted somehow from the executable or if it is hard coded for each game.&lt;br /&gt;
&lt;br /&gt;
=== Maptemp and Mapthead ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;MAPTEMP&amp;lt;/tt&amp;gt; file contains the uncarmackized level maps. Carmackization is a form of compression related to [[Keen 1-3 LZW compression]] in that it employs a sliding window. &amp;lt;tt&amp;gt;MAPTEMP&amp;lt;/tt&amp;gt; is however [[RLE Compression]] compressed to avoid excess size. This is easy for TED5 to edit though. This file is changed each time levels are saved in TED5 and is not used by the game. To make usable levels you must select the item &#039;Carmackize maps&#039; in the file menu, which will produce the &amp;lt;tt&amp;gt;GAMEMAPS&amp;lt;/tt&amp;gt; file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;MAPTHEAD&amp;lt;/tt&amp;gt; is the header for the &amp;lt;tt&amp;gt;MAPTEMP&amp;lt;/tt&amp;gt; file. When maps are carmackized it is used to create the &amp;lt;tt&amp;gt;MAPHEAD&amp;lt;/tt&amp;gt; file. &amp;lt;tt&amp;gt;MAPTHEAD&amp;lt;/tt&amp;gt; contains several variables used by TED5 and some older games. Notably it has information for IDs tileinfo program to work with. Its structure is as follows:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset!!Type!!Description&lt;br /&gt;
|-&lt;br /&gt;
|0||[[UINT16LE]]||Bit field for level planes (+1 unmasked, +2 masked, +4 infoplane)&lt;br /&gt;
|-&lt;br /&gt;
|2||[[UINT16LE]]||Type of tile (8x8 = 1, 16x16 = 2, 32x32 = 3)&lt;br /&gt;
|-&lt;br /&gt;
|4||[[UINT16LE]]|||Number of unmasked tileinfo (TILEINFO) planes in file. Most games 2, speed and offset. Max 10&lt;br /&gt;
|-&lt;br /&gt;
|6||[[UINT16LE]]||Number of unmasked tiles&lt;br /&gt;
|-&lt;br /&gt;
|8||[[UINT32LE]][10]||Pointers to tileinfo planes in &amp;lt;tt&amp;gt;MAPTHEAD&amp;lt;/tt&amp;gt; file&lt;br /&gt;
|-&lt;br /&gt;
|48||[[UINT16LE]][10]||Size of TILFINFO planes data.&lt;br /&gt;
|-&lt;br /&gt;
|68||[[char]][10][8]||TILEINFO plane names&lt;br /&gt;
|-&lt;br /&gt;
|148||[[UINT16LE]]||Number of masked tileinfo (TILEINFOM) planes in file. Usually 7. Max 10&lt;br /&gt;
|-&lt;br /&gt;
|150||[[UINT16LE]]||Number of masked tiles&lt;br /&gt;
|-&lt;br /&gt;
|152||[[UINT16LE]][10]||Pointers to TILEINFOM planes in file&lt;br /&gt;
|-&lt;br /&gt;
|192||[[UINT16LE]][10]||Size of TILFINFOM planes data.&lt;br /&gt;
|-&lt;br /&gt;
|212||[[char]][10][8]||TILFINFOM plane names&lt;br /&gt;
|-&lt;br /&gt;
|292||[[UINT16LE]]||RLEW flag, default $ABCD&lt;br /&gt;
|-&lt;br /&gt;
|294||[[UINT32LE]][100]||Pointers to level headers in &amp;lt;tt&amp;gt;MAPTEMP&amp;lt;/tt&amp;gt;. 100 pointers, null values are -1 ($FFFFFFFF)&lt;br /&gt;
|-&lt;br /&gt;
|694||[[UINT32LE]][100]||Level header sizes &amp;lt;tt&amp;gt;MAPTEMP&amp;lt;/tt&amp;gt;. Older games Huffman Compressed headers and used this. Older games have $26 here, the (uncompressed) header size and don&#039;t use it&lt;br /&gt;
|-&lt;br /&gt;
|1094||[[UINT16LE]]||Number of ICON rows TED5 sets aside from masked tiles to display icons. For most games this is 5&lt;br /&gt;
|-&lt;br /&gt;
|1096||[[char]][x]||Optional TILEINFOM and TILEINFO data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Tedinfo ===&lt;br /&gt;
&lt;br /&gt;
This file is used by TED5 to store various details of the level format. Important here is the number of planes in each level, and the number of icons. Icons (used for sprites) are taken from the foreground tiles. The known values are:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Offset!!Type!!Description&lt;br /&gt;
|-&lt;br /&gt;
|0||[[UINT16LE]]||Level TED opens in (last edited)&lt;br /&gt;
|-&lt;br /&gt;
|2||[[UINT16LE]]||Screen view, close (1) or distant (2)&lt;br /&gt;
|-&lt;br /&gt;
|colspan=3|...&lt;br /&gt;
|-&lt;br /&gt;
|8||[[UINT16LE]]||Number of tile planes in levels (usually 2, fore and back)&lt;br /&gt;
|-&lt;br /&gt;
|colspan=3|...&lt;br /&gt;
|-&lt;br /&gt;
|35||[[BYTE]]||Planes editable/visible in TED; +1 view icon, +2 view fore, +4 view back, +16 edit icon, +32 edit fore, +64 edit back&lt;br /&gt;
|-&lt;br /&gt;
|36||[[UINT16LE]]||h loc in level&lt;br /&gt;
|-&lt;br /&gt;
|38||[[UINT16LE]]||v loc in level&lt;br /&gt;
|-&lt;br /&gt;
|colspan=3|...&lt;br /&gt;
|-&lt;br /&gt;
|119||[[char]][64]||Import map path&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Backup files ==&lt;br /&gt;
&lt;br /&gt;
TED5 backs up all its files when levels are saved or carmackized or TED5 is exited. The old files are saved as &amp;lt;tt&amp;gt;*.BAK&amp;lt;/tt&amp;gt; files and a simple renaming will suffice to undo the latest change. Only one backup is made so it is wise to save these files occasionally.&lt;br /&gt;
&lt;br /&gt;
== Setting up TED5 ==&lt;br /&gt;
&lt;br /&gt;
For uncompressed games, such as [[Bio Menace]], all that is required is to copy the file &amp;lt;tt&amp;gt;TED5.EXE&amp;lt;/tt&amp;gt; into the games directory. For compressed games the situation is slightly more complex.&lt;br /&gt;
&lt;br /&gt;
Some games, such as [[Commander Keen 4-6]] have a Ted setup utility to either extract or create the necessary files. If this is the case then a two step process is required. The first involves copying TED5 and the setup utility and running the setup to obtain the required files. The second step involves using a patching utility (Such as [[CKPatch]]) to patch the modified files back into the executable.&lt;br /&gt;
&lt;br /&gt;
Finally, some games, such as [[Catacomb 3-D]], have no utilities at present. While it is not impossible to modify the levels in these games, it takes a bit more work, since the required files must be extracted manually and the executables illegally modified. It has already been mentioned how the graphics files can be located in an executable, but other files will need to be hard coded until somebody automates the procedure.&lt;br /&gt;
&lt;br /&gt;
== Modifying levels ==&lt;br /&gt;
&lt;br /&gt;
If TED5 is setup correctly then it should run (Dosbox may be required for this.) and go to the first level in the game, usually a world map. There are a number of commands and actions that can be used, which will not be covered here. After the desired changes have been made the user must select &#039;Carmackize maps&#039; from the file menu to produce a modified &amp;lt;tt&amp;gt;GAMEMAPS&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;MAPHEAD&amp;lt;/tt&amp;gt; file. For compressed games such as Keen this file will then need to be patched into the executable.&lt;br /&gt;
&lt;br /&gt;
A level can be completely replaced with one from another GAMEMAPS file by using the &#039;Import levels&#039; command under the file menu. (You will need to specify a patch to a valid GAMEMAPS file.) This allows a person to copy levels between backups, etc.&lt;br /&gt;
&lt;br /&gt;
The program Instant Carma! skips Carmack compression by doing the very minimal amount of work. It takes a fraction of the time of TED5 and can be used while TED5 is running and is thus very useful. Sadly it is only available for Commander Keen 4-6.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- TODO: Perhaps write in full how to use TED5? Or just a link to the plumbing the depths of keen article? --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Other utilities ==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;CKPatch:&amp;lt;/b&amp;gt; A set of utilities that allow Keen 4-6 executables to be modified temporarily and legally by patching a copy of the executable into memory and modifying that. This is vital for using new levels in Keen 4-6 There are several versions available, with the latest having the most features. http://www.bipship.com/CKPatch &lt;br /&gt;
* &amp;lt;b&amp;gt;Fixmhead:&amp;lt;/b&amp;gt; This converts the &amp;lt;tt&amp;gt;MAPTHEAD&amp;lt;/tt&amp;gt; file to &amp;lt;tt&amp;gt;MAPHEAD&amp;lt;/tt&amp;gt;. It is not really required for anything, but is included with a lot of TED5 packs.&lt;br /&gt;
* &amp;lt;b&amp;gt;Galaxymk:&amp;lt;/b&amp;gt; This pack contains everything needed to set Commander Keen 4-6 games up for editing with TED5, including the setups and patchers. http://keenmodding.org/search.php?search_author=The_Fosti&amp;amp;sid=92cde18022face91063ec52109b6c2ec&lt;br /&gt;
* &amp;lt;b&amp;gt;Instant Carma!:&amp;lt;/b&amp;gt; by CK Guy externalizes the carmackization of Keen 4-6 maps, saving time and improving efficiency. http://www.keenmodding.org/viewtopic.php?t=997&lt;br /&gt;
* &amp;lt;b&amp;gt;Tedsetup:&amp;lt;/b&amp;gt; A program that sets up certain games to be editable by TED5, automatically extracting or creating required files, Often comes with TED5&lt;br /&gt;
&lt;br /&gt;
== Supported Games ==&lt;br /&gt;
&lt;br /&gt;
See the infobox above for a list of games that have been successfully edited with TED5, although many of those games have dedicated editors that are more user friendly.&lt;br /&gt;
&lt;br /&gt;
== Download ==&lt;br /&gt;
&lt;br /&gt;
TED5 has been released as open source freeware. TED5 and its source code can be downloaded from [https://legacy.3drealms.com/downloads.html#rott 3D Realms]. It can be used to edit the levels of Bio Menace and to create new levels for Rise of the Triad. It is also possible to edit the levels of Commander Keen 4-6, but this is a bit harder to [http://www.keenmodding.org/viewtopic.php?t=899 set up].&lt;br /&gt;
&lt;br /&gt;
Older versions can be found in [http://web.archive.org/web/20060522213934/http://www.rome.ro/downloads/ddici/ddici.zip Dangerous Dave in Copyright Infringement] and in the source code of the SNES version of [https://github.com/MatthewCallis/NOAH3D/tree/master/NOAH3D/MAPS Super 3-D Noah&#039;s Ark].&lt;br /&gt;
&lt;br /&gt;
[[Category:id Software]]&lt;/div&gt;</summary>
		<author><name>Frenkel</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Keen_Dreams_level_Format&amp;diff=10243</id>
		<title>Keen Dreams level Format</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Keen_Dreams_level_Format&amp;diff=10243"/>
		<updated>2022-02-05T16:31:05Z</updated>

		<summary type="html">&lt;p&gt;Frenkel: /* Ted5 */ fix font&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The map data for the [[Commander Keen Dreams]] series of games, (Including [[Dangerous Dave 3]] and [[Dangerous Dave 4]]) is stored in the &amp;lt;tt&amp;gt;KDREAMS.MAP&amp;lt;/tt&amp;gt;(Shareware) or &amp;lt;tt&amp;gt;GAMEMAPS.MAP&amp;lt;/tt&amp;gt;(Registered version) files. This stores all the maps of the levels used in the game. The file is read and decompressed using data stored in the &amp;lt;tt&amp;gt;MAPHEAD.KDR&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;MAPDICT.KDR&amp;lt;/tt&amp;gt; files.&lt;br /&gt;
&lt;br /&gt;
In the main the map format is identical to the Keen 4-6 [[GameMaps Format]] except that the map data for each level is compressed using [[Huffman Compression]] rather than carmackization. This works identically to the compression for other Keen Dreams files, such as the audio and graphics. The &amp;lt;tt&amp;gt;MAPDICT.KDR&amp;lt;/tt&amp;gt; file is located at the following addresses:&lt;br /&gt;
&lt;br /&gt;
  Keen Dreams: $2B847&lt;br /&gt;
  Dave 3:      $2C7BD&lt;br /&gt;
  Dave 4:      $2A015&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Ted5 ==&lt;br /&gt;
&lt;br /&gt;
Keen Dreams levels can be edited by the [[TED5]] utility, providing they are decompressed to the correct files, much like the usual [[GameMaps Format]] files, the difference being that TED5 cannot re-compress the altered files to a usable form, meaning the maps must be recompressed every time changes are completed.&lt;br /&gt;
&lt;br /&gt;
There is also the issue of filenames; due to a programming quirk only v1.13 of Keen Dreams is moddable, and this uses filenames that are at odds with TED5, as well as the modding utilities not producing correctly named files. (Modkeen outputs &amp;lt;tt&amp;gt;EGAHEAD.Dreams&amp;lt;/tt&amp;gt; instead of &amp;lt;tt&amp;gt;EGAHEAD.KDR&amp;lt;/tt&amp;gt; for example.)&lt;br /&gt;
&lt;br /&gt;
The simplest way to solve this is as follows:&lt;br /&gt;
&lt;br /&gt;
* The creation of &amp;lt;tt&amp;gt;EGAHEAD.CK7&amp;lt;/tt&amp;gt; for TED5 (Default Dreams EGAHEAD uses 4-byte, not 3-byte pointers)&lt;br /&gt;
* The &amp;lt;tt&amp;gt;MAPDICT.KDR&amp;lt;/tt&amp;gt; file extracted and replaced with one that does not cause compression. This avoids having to compress levels each time changes are made&lt;br /&gt;
* The extraction of &amp;lt;tt&amp;gt;MAPTHEAD.CK7&amp;lt;/tt&amp;gt; for TED5&lt;br /&gt;
* &amp;lt;tt&amp;gt;KDREAMS.MAP&amp;lt;/tt&amp;gt; decompressed to &amp;lt;tt&amp;gt;MAPTEMP.CK7&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When changes are to be saved TED5 can be edited and the following steps taken:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;MAPTEMP.CK7&amp;lt;/tt&amp;gt; &#039;compressed&#039; to &amp;lt;tt&amp;gt;KDREAMS.MAP&amp;lt;/tt&amp;gt; with a &#039;nonfunctional&#039; &amp;lt;tt&amp;gt;MAPDICT.KDR&amp;lt;/tt&amp;gt; file this involves nothing more than adding a dword to the start of each plane of each level&#039;s data giving the size of the plane&lt;br /&gt;
* Converting &amp;lt;tt&amp;gt;MAPTHEAD.CK7&amp;lt;/tt&amp;gt; to &amp;lt;tt&amp;gt;MAPHEAD.KDR&amp;lt;/tt&amp;gt; (For patching and running altered levels)&lt;br /&gt;
&lt;br /&gt;
== Utilities ==&lt;br /&gt;
&lt;br /&gt;
There exists a utility to make Keen Dreams and Dangerous Dave levels compatible with TED5. It comes with all the required files and can be found on http://keenmodding.org/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
This format was reverse engineered by Lemm and Levellass (Mostly Lemm).&lt;/div&gt;</summary>
		<author><name>Frenkel</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Talk:Inverse_Frequency_Sound_format&amp;diff=10239</id>
		<title>Talk:Inverse Frequency Sound format</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Talk:Inverse_Frequency_Sound_format&amp;diff=10239"/>
		<updated>2022-01-29T21:29:30Z</updated>

		<summary type="html">&lt;p&gt;Frenkel: the official source code might answer questions&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;How does this sound format handle sounds who&#039;s period is zero (frequency is infinite)? This causes a divide-by-zero error when actually computed.&lt;br /&gt;
[[User:Videogamer555|Videogamer555]] ([[User talk:Videogamer555|talk]]) 13:27, 29 January 2022 (GMT)&lt;br /&gt;
&lt;br /&gt;
:Does the official source code answer your question? https://github.com/CatacombGames/Catacomb/blob/master/SOUNDLIB.ASM#L288 https://github.com/CatacombGames/TheCatacomb/blob/master/PCRLIB_A.ASM#L514 https://github.com/FlatRockSoft/Hovertank3D/blob/master/IDASM.ASM#L654 [[User:Frenkel|Frenkel]] ([[User talk:Frenkel|talk]]) 21:29, 29 January 2022 (GMT)&lt;br /&gt;
&lt;br /&gt;
== There appears to be a discrepency here. ==&lt;br /&gt;
&lt;br /&gt;
In the Sound Definitions section, in the table it says &amp;quot;UINT8 	rate 	Defines the update rate of the timer generating the sound interrupt. Usually set to 8. &amp;quot;&lt;br /&gt;
&lt;br /&gt;
However in the paragraph right after that table, it says &amp;quot;The PC Speaker is updated at a rate of usually 140 Hz&amp;quot;. So which is it? Is it 8Hz or 140Hz update rate? Or does the 8 mean something else? Does it scale the update rate, where 140Hz is represented by that field containing the number 8, so each increment of 1 in that field changes the PC speaker&#039;s update rate by 17.5Hz, with 0 meaning never update the PC speaker?&lt;br /&gt;
&lt;br /&gt;
[[User:Videogamer555|Videogamer555]] ([[User talk:Videogamer555|talk]]) 14:07, 29 January 2022 (GMT)&lt;/div&gt;</summary>
		<author><name>Frenkel</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Bio_Menace&amp;diff=10225</id>
		<title>Bio Menace</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Bio_Menace&amp;diff=10225"/>
		<updated>2022-01-16T15:33:28Z</updated>

		<summary type="html">&lt;p&gt;Frenkel: /* Music */ Biomenace -&amp;gt; Bio Menace, Keen -&amp;gt; Bio Menace&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Game Infobox&lt;br /&gt;
 | Levels = Edit&lt;br /&gt;
 | Tiles = Edit&lt;br /&gt;
 | Sprites = Edit&lt;br /&gt;
 | Fullscreen = Edit&lt;br /&gt;
 | Sound = Edit&lt;br /&gt;
 | Music = Edit&lt;br /&gt;
 | Text = Edit&lt;br /&gt;
 | Story = Edit&lt;br /&gt;
 | Interface = Edit&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Bio Menace&#039;&#039;&#039; (working title: &#039;&#039;&#039;Bio Hazard&#039;&#039;&#039;) is a series of three games known simply as Bio Menace 1, 2 and 3. They use a slightly altered version of the [[Commander Keen 4-6]] engine, so the file formats used are almost identical.&lt;br /&gt;
&lt;br /&gt;
The game follows the adventures of Snake Logan, a top secret operative at the CIA, who takes on missions others would see as suicidal, as he battles hordes of strange mutant monsters that have suddenly appeared and are taking over cities. The goals of the game vary, from rescuing trapped prisoners to destroying an evil computer. Notably, in the second game, if you do not get the portable nuclear device in one of the levels, the game becomes unwinnable and you are treated to the story of Snake&#039;s eventual death.&lt;br /&gt;
&lt;br /&gt;
{{BeginFileFormatTools|Type=game}}&lt;br /&gt;
{{FileFormatTool&lt;br /&gt;
| Name = [[keenwiki:Abiathar|Abiathar]]&lt;br /&gt;
| Platform = Windows&lt;br /&gt;
| grp = N/A&lt;br /&gt;
| map = Edit&lt;br /&gt;
| gfx = No&lt;br /&gt;
| mus = No&lt;br /&gt;
| sfx = No&lt;br /&gt;
| txt = No&lt;br /&gt;
| sav = No&lt;br /&gt;
| exe = No&lt;br /&gt;
| notes = Offers templates for Bio Menace projects&lt;br /&gt;
}}&lt;br /&gt;
{{FileFormatTool&lt;br /&gt;
| Name = [[TED5]]&lt;br /&gt;
| Platform = DOS GUI&lt;br /&gt;
| grp = N/A&lt;br /&gt;
| map = Edit&lt;br /&gt;
| gfx = No&lt;br /&gt;
| mus = No&lt;br /&gt;
| sfx = No&lt;br /&gt;
| txt = No&lt;br /&gt;
| sav = No&lt;br /&gt;
| exe = No&lt;br /&gt;
| notes = Must be [http://people.inf.elte.hu/szgrahi/bmenace_mod.zip configured to work with Bio Menace]&lt;br /&gt;
}}&lt;br /&gt;
{{FileFormatTool&lt;br /&gt;
| Name = [[Wombat]]&lt;br /&gt;
| Platform = Windows&lt;br /&gt;
| grp = N/A&lt;br /&gt;
| map = Read&lt;br /&gt;
| gfx = Read&lt;br /&gt;
| mus = Read&lt;br /&gt;
| sfx = Read&lt;br /&gt;
| txt = No&lt;br /&gt;
| sav = No&lt;br /&gt;
| exe = No&lt;br /&gt;
| notes =&lt;br /&gt;
}}&lt;br /&gt;
{{EndFileFormatTools}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
== File formats ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! File name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;audiohed.bm*&amp;lt;br/&amp;gt;audiot.bm*&amp;lt;/tt&amp;gt;&lt;br /&gt;
| style=&amp;quot;background: #CCFFCC;&amp;quot; | Sound effects and music in [[AudioT Format]] (and within that, music in [[IMF Format]])&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;bmenace[123].exe&amp;lt;/tt&amp;gt;&lt;br /&gt;
| style=&amp;quot;background: #FFFFCC;&amp;quot; | Exit text screens in [[B800 Text]] format&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;egadict.bm*&amp;lt;br/&amp;gt;egahead.bm*&amp;lt;br/&amp;gt;egagraph.bm*&amp;lt;/tt&amp;gt;&lt;br /&gt;
| style=&amp;quot;background: #CCFFCC;&amp;quot; | Graphics, text and miscellaneous data in [[EGAGraph Format]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;gamemaps.bm*&amp;lt;br/&amp;gt;maphead.bm*&amp;lt;br/&amp;gt;maptemp.bm*&amp;lt;br/&amp;gt;mapthead.bm*&amp;lt;/tt&amp;gt;&lt;br /&gt;
| style=&amp;quot;background: #CCFFCC;&amp;quot; | Levels in [[GameMaps Format]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* Sprite behaviours are governed by data structures in the .exe, arranged in [[Keen 4-6 Action Format]]&lt;br /&gt;
&lt;br /&gt;
== Music ==&lt;br /&gt;
&lt;br /&gt;
=== AudioT Format Details ===&lt;br /&gt;
Bio Menace uses the uncompressed version of the [[AudioT Format]] to store music and sound. The main audio file for each game, the AUDIOT.xxx file, is called AUDIOT.BMx, where x is the number of the game (1, 2 or 3). For example, the file for Bio Menace 2 is AUDIO.BM2. The secondary files needed for this format, the AUDIOHED.BMx are external.&lt;br /&gt;
&lt;br /&gt;
=== Levels Songs Assignment ===&lt;br /&gt;
There is a place inside the executables too, where each level in the game is assigned a song from the AUDIOT.BMx file. From that addresses, the following bytes indicate the song for each level. Every 2 bytes is a value corresponding to a level. The first 2 bytes correspond to level 0; the next 2 bytes correspond to level 1; and so on. Each 2-byte value is an integer corresponding to the song number used in that level, starting from $00 $00, and going up to $00 $01, and so on. This numbers refer to the order the songs are in the AUDIO.BMx file; $00 $00 is the first one, $00 $01 is the second one, and so on.&lt;br /&gt;
&lt;br /&gt;
It is notable that Bio Menace has many more songs in it than the Keen 4-6 games upon which it was based.&lt;br /&gt;
&lt;br /&gt;
== Obtaining the game ==&lt;br /&gt;
&lt;br /&gt;
The full version of this game [http://www.3drealms.com/news/2005/12/bio_menace_released_as_freewar.html has been released as freeware].&lt;br /&gt;
&lt;br /&gt;
* Three different versions are available from [http://www.classicdosgames.com/apogee.html Classic DOS Games]&lt;br /&gt;
&lt;br /&gt;
[[Category:Apogee]]&lt;br /&gt;
[[Category:Sidescroller]]&lt;br /&gt;
[[Category:Freeware]]&lt;/div&gt;</summary>
		<author><name>Frenkel</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Talk:Huffman_Compression&amp;diff=10054</id>
		<title>Talk:Huffman Compression</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Talk:Huffman_Compression&amp;diff=10054"/>
		<updated>2021-09-17T10:42:23Z</updated>

		<summary type="html">&lt;p&gt;Frenkel: Huffman is easy&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Constructing an optimal tree ==&lt;br /&gt;
&lt;br /&gt;
Wikipedia documents a different way to construct an optimal tree:&lt;br /&gt;
Sort the list of elements by frequency. Remove the two elements with the lowest frequency from the list. Create a new tree for these two elements, add the frequencies together and put the tree back in the sorted list of elements. Repeat until you have 1 element in the list.&lt;br /&gt;
Following this algorithm, I&#039;ve constructed the following tree for the &amp;quot;She sells seashells by the sea shore.&amp;quot; example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      __[Root]_____&lt;br /&gt;
     /             \&lt;br /&gt;
  ___|__         ___|___&lt;br /&gt;
 /      \     __/_      \&lt;br /&gt;
/ \    / \   /    \      s&lt;br /&gt;
e _   / \ h  l  /   \&lt;br /&gt;
     / \ a     / \ / \&lt;br /&gt;
    / \ S      y . r t&lt;br /&gt;
    b o&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&#039;s&#039; takes 2 bits to store, &#039;e&#039;, &#039;_&#039;, &#039;h&#039; an &#039;l&#039; take 3 bits, &#039;a&#039; 4 bits, &#039;S&#039;, &#039;y&#039;, &#039;.&#039;, &#039;r&#039; and &#039;t&#039; 5 bits, and &#039;b&#039; and &#039;o&#039; take 6 bits. &amp;quot;She sells seashells by the sea shore.&amp;quot; takes 122 bits to store. Using the tree on this page it takes 124 bits. So my tree is more &amp;quot;optimal&amp;quot; or is there something wrong with my calculations? [[User:Frenkel|Frenkel]] ([[User talk:Frenkel|talk]]) 11:13, 10 September 2021 (GMT)&lt;br /&gt;
: That honestly seems more like a question for a place like StackOverflow or Xentax. Not sure we got many lzw/huffman experts here. I personally never managed to wrap my head around it. -[[User:Nyerguds|Nyerguds]] ([[User talk:Nyerguds|talk]]) 11:23, 15 September 2021 (GMT)&lt;br /&gt;
:: Huffman is actually pretty easy, once you&#039;ve written your own decompressor and compressor. :) [[User:Frenkel|Frenkel]] ([[User talk:Frenkel|talk]]) 10:42, 17 September 2021 (GMT)&lt;/div&gt;</summary>
		<author><name>Frenkel</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Talk:Huffman_Compression&amp;diff=10046</id>
		<title>Talk:Huffman Compression</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Talk:Huffman_Compression&amp;diff=10046"/>
		<updated>2021-09-10T11:13:38Z</updated>

		<summary type="html">&lt;p&gt;Frenkel: /* Constructing an optimal tree */ new section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Constructing an optimal tree ==&lt;br /&gt;
&lt;br /&gt;
Wikipedia documents a different way to construct an optimal tree:&lt;br /&gt;
Sort the list of elements by frequency. Remove the two elements with the lowest frequency from the list. Create a new tree for these two elements, add the frequencies together and put the tree back in the sorted list of elements. Repeat until you have 1 element in the list.&lt;br /&gt;
Following this algorithm, I&#039;ve constructed the following tree for the &amp;quot;She sells seashells by the sea shore.&amp;quot; example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      __[Root]_____&lt;br /&gt;
     /             \&lt;br /&gt;
  ___|__         ___|___&lt;br /&gt;
 /      \     __/_      \&lt;br /&gt;
/ \    / \   /    \      s&lt;br /&gt;
e _   / \ h  l  /   \&lt;br /&gt;
     / \ a     / \ / \&lt;br /&gt;
    / \ S      y . r t&lt;br /&gt;
    b o&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&#039;s&#039; takes 2 bits to store, &#039;e&#039;, &#039;_&#039;, &#039;h&#039; an &#039;l&#039; take 3 bits, &#039;a&#039; 4 bits, &#039;S&#039;, &#039;y&#039;, &#039;.&#039;, &#039;r&#039; and &#039;t&#039; 5 bits, and &#039;b&#039; and &#039;o&#039; take 6 bits. &amp;quot;She sells seashells by the sea shore.&amp;quot; takes 122 bits to store. Using the tree on this page it takes 124 bits. So my tree is more &amp;quot;optimal&amp;quot; or is there something wrong with my calculations? [[User:Frenkel|Frenkel]] ([[User talk:Frenkel|talk]]) 11:13, 10 September 2021 (GMT)&lt;/div&gt;</summary>
		<author><name>Frenkel</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=EGAGraph_Format&amp;diff=9993</id>
		<title>EGAGraph Format</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=EGAGraph_Format&amp;diff=9993"/>
		<updated>2021-08-27T18:55:13Z</updated>

		<summary type="html">&lt;p&gt;Frenkel: /* Sprite table */ shifts added: 8 words -&amp;gt; 9 words&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Tileset Infobox&lt;br /&gt;
 | ImageNativeWidth = Y&lt;br /&gt;
 | Hardware1 = VGA&lt;br /&gt;
 | Palette = External&lt;br /&gt;
 | Names = N&lt;br /&gt;
 | HasTransparency = Y&lt;br /&gt;
 | Metadata = None&lt;br /&gt;
 | Subtilesets = N&lt;br /&gt;
 | Compressed = Y&lt;br /&gt;
 | Hidden = N&lt;br /&gt;
 | Games =&lt;br /&gt;
   {{Game|Catacomb 3-D}}&lt;br /&gt;
   {{Game|Catacomb Abyss}}&lt;br /&gt;
   {{Game|Commander Keen 4-6}}&lt;br /&gt;
   {{Game|Commander Keen Dreams}}&lt;br /&gt;
   {{Game|Dangerous Dave 3}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;EGAGraph&#039;&#039;&#039;, short for &#039;EGA graphics library&#039; is the format used to store graphics, demos, fonts, game texts and more in many early [[:Category:Id Software|id Software]] games.&lt;br /&gt;
&lt;br /&gt;
The basic format is that of a number of [[Huffman Compression]] compressed sub-files (Chunks) stored in a similar manner to the [[AudioT Format]]. Like this format it has three main files, &amp;lt;tt&amp;gt;EGAGRAPH&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;EGAHEAD&amp;lt;/tt&amp;gt;and &amp;lt;tt&amp;gt;EGADICT&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
It is notable that while the &amp;lt;tt&amp;gt;EGAHEAD&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;EGADICT&amp;lt;/tt&amp;gt; are stored in the game executable, they need to be extracted for [[TED5]] to edit levels.&lt;br /&gt;
&lt;br /&gt;
This article may contain errors as some formats have not been worked out completely.&lt;br /&gt;
&lt;br /&gt;
== EGA Head (EGAHEAD.xxx) ==&lt;br /&gt;
&lt;br /&gt;
There are two versions of this format. The first version, used in [[Commander Keen Dreams]], [[Dangerous Dave 3]] and [[Dangerous Dave 4]], is an array of 4-byte little-endian values. The second version, used in all later EGA games, is an array of 3-byte unsigned little-endian values.&lt;br /&gt;
&lt;br /&gt;
This header file may be present as an external file (eg. [[Bio Menace]]), or it may be included in the EXE file (eg. [[Catacomb 3-D]]). The last entry in the header is always the size of the EGAGRAPH.xxx file, and the first entry in the header is always 00 00 00. To find the end, you can search for filesize(EGAGRAPH.xxx) as a 3-byte (little-endian) value in the EXE. Then to find the start, go back 3 bytes at a time until you get to 00 000 00. Or use the fact that entries always get smaller as you go back, unless the entry is $FFFFFF. &lt;br /&gt;
&lt;br /&gt;
In [[Catacomb 3-D]] v1.00 &amp;lt;tt&amp;gt;EGAHEAD.C3D&amp;lt;/tt&amp;gt; is at $1BFD0 from the start of the decompressed ([[unlzexe]]) EXE file, and is 1437 bytes long, or 479 3-byte entries (for 478 chunks). It is then followed by 3 zero bytes (padding to multiple of 16?) 00 00 00, then the &amp;lt;tt&amp;gt;MAPHEAD.C3D&amp;lt;/tt&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
In [[Catacomb Abyss]] v1.13 &amp;lt;tt&amp;gt;EGAHEAD.ABS&amp;lt;/tt&amp;gt; is at $1BDB0 from the start of the decompressed ([[unlzexe]]) EXE file, and 1881 bytes long and has 626 chunks.&lt;br /&gt;
&lt;br /&gt;
In [[Catacomb Apocalypse]] v1.00b &amp;lt;tt&amp;gt;EGAHEAD.APC&amp;lt;/tt&amp;gt; is at $1E270 from the start of the decompressed ([[unlzexe]]) EXE file, and 2049 bytes long and has 682 chunks.&lt;br /&gt;
&lt;br /&gt;
This header file stores the offsets (relative to the start of the &amp;lt;tt&amp;gt;EGAGRAPH&amp;lt;/tt&amp;gt; file) for each sub file.  The format is trivial, in that the header file is simply an array of 3 or 4 byte variables.  (Each variable is a &amp;quot;slot&amp;quot;, as the game refers to files by index.) Most games use the more compact 3-byte variables, since the &amp;lt;tt&amp;gt;EGAGRAPH&amp;lt;/tt&amp;gt; file is never larger than $FFFFFF. However games based on older engines, notably [[Commander Keen Dreams]], [[Dangerous Dave 3]] and [[Dangerous Dave 4]], use 4-byte vales as these are easier to deal with.&lt;br /&gt;
&lt;br /&gt;
It is important to note that not every &#039;slot&#039; will be in use. Tiles especially if blank (All black) will be considered &#039;empty&#039; and not worth adding to the file. (A blank 16x16 tile takes up 12 bytes of space if compressed, and there can be hundreds.) There are two ways of dealing with this; by default the games set all empty slot headers to -1, but many programs compress the graphics anyway and use a normal header value for them.&lt;br /&gt;
&lt;br /&gt;
The last offset in the file will be an offset to the end of the main &amp;lt;tt&amp;gt;EGAGRAPH&amp;lt;/tt&amp;gt; file.  (So this should be ignored when reading the file to prevent a zero-byte file appearing last.) The total size of the &amp;lt;tt&amp;gt;EGAHEAD&amp;lt;/tt&amp;gt; divided by 3 (Or 4) will also give the number of &#039;slots&#039; the game uses. This varies, but is usually about 10,000.&lt;br /&gt;
&lt;br /&gt;
Unlike [[AudioT Format]] files, &amp;lt;tt&amp;gt;EGAGRAPH&amp;lt;/tt&amp;gt; is always compressed. However the header and dictionary may be external (E.g [[Bio Menace]])&lt;br /&gt;
&lt;br /&gt;
== Dictionary (EGADICT.xxx) ==&lt;br /&gt;
&lt;br /&gt;
The same [[Huffman Compression]] scheme used elsewhere in the [[Commander Keen]] series is used.  When reading compressed chunks out of the &amp;lt;tt&amp;gt;EGAGRAPH&amp;lt;/tt&amp;gt; file, the first four bytes located at the &amp;lt;tt&amp;gt;EGAHEAD&amp;lt;/tt&amp;gt; offset are a UINT32LE specifying the file&#039;s decompressed size (which is required for the decompression algorithm.)  The compressed data then follows, EXCEPT for 16x16 masked and unmasked tiles. Since these all have a similar decompressed size (128 bytes for unmasked, 256 bytes for masked) it is a waste of space to include these (Since tiles make up the bulk of graphics slots.) The decompressed size is hard coded, as are the start and finish of the unmasked and masked tile slots.&lt;br /&gt;
&lt;br /&gt;
Note that the &amp;lt;tt&amp;gt;EGADICT&amp;lt;/tt&amp;gt; file is not often obvious, usually being embedded in the main exe file. It is possible to locate it by looking for the string &amp;lt;tt&amp;gt;$FD $01 $00 $00 $00 $00&amp;lt;/tt&amp;gt;, which appears at the end of nearly all Huffman dictionaries. They are the last 6 bytes out of 1024 (256*2*2), so add 6 and subtract 1024 to get the start (pointer to the head node).&lt;br /&gt;
&lt;br /&gt;
Executables usually contain two or more dictionaries, but the &amp;lt;tt&amp;gt;EGADICT&amp;lt;/tt&amp;gt; is usually &#039;&#039;&#039;the second one&#039;&#039;&#039;, except in the case of early games like Keen Dreams, where it is the first of THREE. (A simple check of whether it decompresses the data sensibly works.)&lt;br /&gt;
&lt;br /&gt;
In [[Catacomb 3-D]] &amp;lt;tt&amp;gt;EGADICT.C3D&amp;lt;/tt&amp;gt; is at offset $24464 from the start of the decompressed CAT3D.EXE, which is the second Huffman dictionary and comes immediately after the first Huffman Dictionary.&lt;br /&gt;
&lt;br /&gt;
In [[Catacomb Abyss]] v1.13 &amp;lt;tt&amp;gt;EGADICT.ABS&amp;lt;/tt&amp;gt; is at offset $2734C from the start of the decompressed CATABYSS.EXE, which is the second Huffman dictionary.&lt;br /&gt;
&lt;br /&gt;
In [[Catacomb Apocalypse]] v1.00b &amp;lt;tt&amp;gt;EGADICT.APC&amp;lt;/tt&amp;gt; is at offset $26B24 from the start of the decompressed CATAPOC.EXE, which is the second Huffman dictionary.&lt;br /&gt;
&lt;br /&gt;
== Main file (EGAGRAPH.xxx) ==&lt;br /&gt;
&lt;br /&gt;
This file is simply an array of data files.  Each file starts at the offset specified in the &amp;lt;tt&amp;gt;EGAHEAD&amp;lt;/tt&amp;gt; file, and as there are no filenames each file is referred to by its index/slot number.  Slots containing dummy values in the header are treated as if they don&#039;t exist in the &amp;lt;tt&amp;gt;EGAGRAPH&amp;lt;/tt&amp;gt; file. Each file within the &amp;lt;tt&amp;gt;EGAGRAPH&amp;lt;/tt&amp;gt; file is individually compressed.  A file can be read by opening the &amp;lt;tt&amp;gt;EGAGRAPH&amp;lt;/tt&amp;gt; file, seeking to the offset specified in the &amp;lt;tt&amp;gt;EGAHEAD&amp;lt;/tt&amp;gt; file, reading a UINT32LE for the decompressed file size, and then decompressing the data from that point onwards using standard Huffman decompression techniques.&lt;br /&gt;
&lt;br /&gt;
Note that in early games such as Keen Dreams, the &amp;lt;tt&amp;gt;EGAGRAPH&amp;lt;/tt&amp;gt; file may have another name. (Such as &amp;lt;tt&amp;gt;KDREAM.EGA&amp;lt;/tt&amp;gt; in that case.) in which case it is always the largest non-executable file.&lt;br /&gt;
&lt;br /&gt;
=== Chunks ===&lt;br /&gt;
&lt;br /&gt;
Each sub file or chunk is a separate graphic, ordered in the &amp;lt;tt&amp;gt;EGAGRAPH&amp;lt;/tt&amp;gt; file in a specific way, much again like the [[AudioT Format]].  Chunks are labeled starting at 0. The game executable is hard coded for the start and finish of various chunk types. For example, Keen 4 has chunks 124-520 as sprites and will treat any chunk between these two numbers as a sprite. (Note that the game refers to chunk number, not sprite number.) The usual order of chunks is:&lt;br /&gt;
&lt;br /&gt;
 Picture table&lt;br /&gt;
 Masked picture table&lt;br /&gt;
 Sprite table&lt;br /&gt;
 Fonts&lt;br /&gt;
 Pictures (Unmasked bitmaps)&lt;br /&gt;
 Masked pictures&lt;br /&gt;
 8x8 unmasked tiles (Single chunk)&lt;br /&gt;
 8x8 masked tiles (Single chunk)&lt;br /&gt;
 16x16 unmasked tiles&lt;br /&gt;
 16x16 masked tiles&lt;br /&gt;
 32x32 unmasked tiles (Optional)&lt;br /&gt;
 32x32 masked tiles (Optional)&lt;br /&gt;
 Misc graphics (Optional)&lt;br /&gt;
 Game texts&lt;br /&gt;
 Demo files (Optional)&lt;br /&gt;
 Misc data (Optional)&lt;br /&gt;
&lt;br /&gt;
== Chunk formats ==&lt;br /&gt;
&lt;br /&gt;
When compressed each chunk consists of a dword giving the decompressed size followed by the compressed data.&lt;br /&gt;
&lt;br /&gt;
=== Picture table ===&lt;br /&gt;
&lt;br /&gt;
Always present and always the first chunk, the picture table is 4 * numpics bytes long, consisting of two words for each picture (Width\8, Height) used when displaying picture chunks.&lt;br /&gt;
&lt;br /&gt;
Divide the decompressed size by 4 to get numpics.&lt;br /&gt;
&lt;br /&gt;
=== Masked picture table ===&lt;br /&gt;
&lt;br /&gt;
Always present and always the second chunk, the picture table is 4 * numpics bytes long, consisting of two words for each picture (Width\8, Height) used when displaying masked picture chunks. This table is often quite small.&lt;br /&gt;
&lt;br /&gt;
=== Sprite table ===&lt;br /&gt;
&lt;br /&gt;
Always present and always the third chunk, the sprite table is 18 * numspr bytes long, consisting of nine words for each sprite image (width\8, height, x offset, y offset, clipping rectangle left, top, right and bottom, and shifts; all in that order.) used when displaying sprite chunks. This is what Modkeen exports as its notoriously hard to use xSPRITES.txt file.&lt;br /&gt;
&lt;br /&gt;
=== Fonts ===&lt;br /&gt;
&lt;br /&gt;
Always present and always starting at the fourth chunk. (Chunk 3!) Each chunk is a single monochrome font, containing all the entries from 0-255 for that font. Each &#039;letter&#039; is stored separately and consecutively. A game will have at least one, and usually 3 fonts. The format is version two of [[EGA Font format]]&lt;br /&gt;
&lt;br /&gt;
Fonts are used in the game for game texts. They can be stretched or colored and are always transparent, meaning they look strange when not over a single-color background.&lt;br /&gt;
&lt;br /&gt;
=== Pictures (Bitmaps) ===&lt;br /&gt;
&lt;br /&gt;
These follow game fonts. You need to know how many fonts there are before it to know how what chunk number the first picture is (3+NumFonts).&lt;br /&gt;
&lt;br /&gt;
Bitmaps are stored as standard [[Raw EGA data]], the size of each plane being the decompressed chunk size \ 4. In order to be displayed properly these need information from chunk 0, the picture table. Note that unlike fonts, data does not wrap, so a 4x4 sprite will consist of four planes of four bytes in size, the same as an 8x4 sprite.&lt;br /&gt;
&lt;br /&gt;
Pictures are used for things such as title screens or pictures in game texts. Most of the main menu will consist of pictures. They are also used for the wall textures and sprites in EGA FPS games like [[Catacomb 3-D]], in which case the wall textures usually come near the end of the picture list.&lt;br /&gt;
&lt;br /&gt;
The number of picture chunks is given in chunk 0, the picture table.&lt;br /&gt;
&lt;br /&gt;
=== Masked pictures (Masked bitmaps) ===&lt;br /&gt;
&lt;br /&gt;
These follow Pictures. You need to know how many fonts there are, to know how what chunk number the first Masked picture is (3+NumFonts+numpics).&lt;br /&gt;
&lt;br /&gt;
These are identical to the picture chunks in every respect, except being masked, they consist of five EGA planes, not four. Most games have only one or two of them. They need information from chunk 1, the masked picture table, to be displayed correctly.&lt;br /&gt;
&lt;br /&gt;
The number of Masked pictures is given in Chunk 1.&lt;br /&gt;
&lt;br /&gt;
=== Sprites ===&lt;br /&gt;
&lt;br /&gt;
The first Sprite chunk is at 3+numfonts+numpics+numMaskedPics.&lt;br /&gt;
&lt;br /&gt;
Sprites are exactly identical to masked pictures in format except the game cannot stretch or warp them. Most games use these for enemy, player or item graphics during gameplay. They need information from chunk 2, the sprite table, both to display correctly and to interact correctly, something more complex than masked pictures.&lt;br /&gt;
&lt;br /&gt;
There are usually several hundred sprite chunks, although that&#039;s not always the case, as [[Catacomb 3-D]] only has 3 sprite chunks (used for the PaddleWar game), and [[Catacomb Abyss]] has only one (used for the in-game radar). The number of sprite chunks is given in chunk 2.&lt;br /&gt;
&lt;br /&gt;
=== 8x8 tiles ===&lt;br /&gt;
&lt;br /&gt;
8x8 tiles are used by most games in status windows or foe the borders of message windows in-game. (And occasionally by TED5 to display levels.) There are thus not many of them. ALL the masked or unmasked tiles are one single chunk stored as four and five plane [[Raw EGA data]] respectively. The number of 8x8 unmasked and masked tiles is hard-coded into the executable, but can be worked out by dividing the decompressed chunk size by 32 and 40 (The size of one tile&#039;s data) respectively.&lt;br /&gt;
&lt;br /&gt;
=== 16x16 and 32x32 tiles ===&lt;br /&gt;
&lt;br /&gt;
32x32 tiles are optional and rarely used. 16x16 tiles are only occasionally absent and for most games make up the bulk of graphics. There are usually several thousand entries. Both come in masked and unmasked kinds, just like 8x8 tiles.&lt;br /&gt;
&lt;br /&gt;
These chunks have notable differences. Each tile is an individual chunk and stored as four or five plane [[Raw EGA data]] with a plane size of 128 (16x16) or 512 (32x32). These chunks do NOT have a dword specifying their decompressed size as this is hard-coded into the executable as a space saving measure. (As is the start and finish of unmasked and masked tile chunks.) This can cause problems for editing programs.&lt;br /&gt;
&lt;br /&gt;
Tiles make up the bulk of 2D game levels but are seldom seen elsewhere.&lt;br /&gt;
&lt;br /&gt;
=== Misc graphics ===&lt;br /&gt;
&lt;br /&gt;
Sometimes following tile graphics are miscellaneous graphics, that cannot be handled by the other chunk types. For example, Keen 4-6 has two misc graphics files used for the &#039;COMMANDER KEEN terminator text&#039; intro. These graphics usually have unique formats that fit their function and few have been investigated.&lt;br /&gt;
&lt;br /&gt;
==== Keen 4-6 Intro Bitmaps ====&lt;br /&gt;
&lt;br /&gt;
This is the text that displays after the &#039;Ready, press any key&#039; screen at Keen startup. It is composed of a monochrome bitmap that is scrolled across the screen and distorted for special effects. When displayed it is transparent, with a special palette so it is not black-and-white. It consists of a header followed by RLE compressed monochrome data.&lt;br /&gt;
&lt;br /&gt;
 HEADER:&lt;br /&gt;
 0   2    Img height  Height of the image in pixels&lt;br /&gt;
 2   2    Img width   Width of the image in pixels&lt;br /&gt;
 4   2x   Line point  Pointers to line 1,2,3..etc of data. There will be [Img height] of&lt;br /&gt;
                      these, each 2 bytes long. The first pointer will  have the value&lt;br /&gt;
                      (2 * [Img height] + 4)&lt;br /&gt;
 +2  ?    RLE data    RLE-WM compressed data&lt;br /&gt;
&lt;br /&gt;
 DATA:&lt;br /&gt;
 0   2    Black run   Number of black pixels to write&lt;br /&gt;
 2   2    Not-blk run Number of not-black pixels to write&lt;br /&gt;
 4   2    Black run....&lt;br /&gt;
 ...&lt;br /&gt;
 ..&lt;br /&gt;
 .&lt;br /&gt;
 ?  2     End         $FFFF; end of row.&lt;br /&gt;
&lt;br /&gt;
=== Game texts ===&lt;br /&gt;
&lt;br /&gt;
Also known as ANSII chunks, these are used by the game for things like help screens, and have their own format. In the main they are simply text documents, interspersed with various commands to make things happen. Each file is divided up into a number of &#039;pages&#039; which are moved between by pressing the up/down arrows. Pages can also have action sequences (Repeated each time the page is moved to, you cannot leave a page until the sequence finishes.)&lt;br /&gt;
&lt;br /&gt;
 ^P		First command in every file. Defines a page start&lt;br /&gt;
 ^E		Ends the file&lt;br /&gt;
 ^Cx		Change font color to $x until next page or ^C command&lt;br /&gt;
 ^Gx,y,z	Display (unmasked) picture chunk z at location x,y (in pixels)&lt;br /&gt;
 ^Tx,y,z,t	Display picture chunk z at x,y for z clicks of time&lt;br /&gt;
 ^Bx,y,z,t,b	Fill a width-by-height-pixel rectangle at pixel location x,y (for z clicks of time?) with color $x&lt;br /&gt;
 ^Lx,y		Start text alignment at pixel location x,y.&lt;br /&gt;
&lt;br /&gt;
=== Demo files ===&lt;br /&gt;
&lt;br /&gt;
These files, which can be recorded in several games using the &#039;demo cheat&#039; consist of a series of commands that are played back when a demo is run ingame. (The game is also &#039;derandomized&#039; during recording so all demo playbacks will be predictable.)&lt;br /&gt;
&lt;br /&gt;
The format is quite simple; consisting of two words and a number of byte pairs. The first two bytes store the number of the level to load for the demo, the next two store the length of data to load\play (After this limit is reached the demo will end, whether or not there is any more data to read.) The remaining byte pairs each encode a time and a keypress. The following values are known:&lt;br /&gt;
&lt;br /&gt;
 01	Left&lt;br /&gt;
 04	Up&lt;br /&gt;
 05	Nothing&lt;br /&gt;
 06	Down&lt;br /&gt;
 09	Right&lt;br /&gt;
 15	Ctrl&lt;br /&gt;
 25	Alt&lt;br /&gt;
&lt;br /&gt;
=== Misc files ===&lt;br /&gt;
&lt;br /&gt;
The last few chunks are demo files and occasionally miscellaneous data. Demo file formats are currently unknown but can be recorded using the demo cheat. They contain the level number and difficulty followed by a series of key commands.&lt;br /&gt;
&lt;br /&gt;
== Utilities ==&lt;br /&gt;
&lt;br /&gt;
* [[KeenWiki:ModKeen|ModKeen]] (DOS) and [[KeenWiki:LModKeen|LModKeen]] (Linux/Windows) can be used to modify graphics and text stored in EGAGRAPH.CKx for the Commander Keen [[KeenWiki:Goodbye Galaxy|Goodbye Galaxy]] trilogy.&lt;br /&gt;
* WDC (Windows) can be used to view or modify the graphics in most EGAGRAPH games, including [[Catacomb 3-D]], [[Catacomb Abyss]] and [[Commander Keen 4-6]].&lt;/div&gt;</summary>
		<author><name>Frenkel</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=ProGraphx_Toolbox_tileset_format&amp;diff=9886</id>
		<title>ProGraphx Toolbox tileset format</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=ProGraphx_Toolbox_tileset_format&amp;diff=9886"/>
		<updated>2021-07-03T20:08:51Z</updated>

		<summary type="html">&lt;p&gt;Frenkel: added Operation: Airlift&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Tileset Infobox&lt;br /&gt;
 | ImageNativeWidth = Y&lt;br /&gt;
 | Hardware1 = EGA&lt;br /&gt;
 | MaxTiles = 255 per subtileset, unlimited subtilesets&lt;br /&gt;
 | Palette = Default EGA&lt;br /&gt;
 | Names = N&lt;br /&gt;
 | TileMinSize = 0&amp;amp;times;0&lt;br /&gt;
 | TileMaxSize = 2040&amp;amp;times;255&lt;br /&gt;
 | NumPlanes = 5&lt;br /&gt;
 | PlaneArrangement = [[Byte-planar EGA]]&lt;br /&gt;
 | HasTransparency = Y&lt;br /&gt;
 | HasHitmap = N&lt;br /&gt;
 | Metadata = None&lt;br /&gt;
 | Subtilesets = Y&lt;br /&gt;
 | Compressed = N&lt;br /&gt;
 | Hidden = N&lt;br /&gt;
 | Games = &lt;br /&gt;
   {{Game|Operation: Airlift}}&lt;br /&gt;
   {{Game|Dark Ages}}&lt;br /&gt;
   {{Game|Duke Nukem}}&lt;br /&gt;
   {{Game|Crystal Caves}}&lt;br /&gt;
   {{Game|FBI Fred}}&lt;br /&gt;
   {{Game|Secret Agent}}&lt;br /&gt;
}}&lt;br /&gt;
This file format is used by the ProGraphx Toolbox to store images used for map tiles in a game.&lt;br /&gt;
__TOC__&lt;br /&gt;
The ProGraphx Toolbox, written by Peder Jungck, is used by the following games:&lt;br /&gt;
&lt;br /&gt;
* [[Operation: Airlift]] - &amp;lt;tt&amp;gt;AIRLIFT.EXE&amp;lt;/tt&amp;gt; contains the string &#039;&#039;Version 1.0 EGA/VGAProGraphx EGA/VGA Toolbox&#039;&#039;&lt;br /&gt;
* [[Dark Ages]] - &amp;lt;tt&amp;gt;DA3.EXE&amp;lt;/tt&amp;gt; contains the string &#039;&#039;Version 1.0 EGA/VGAProGraphx EGA/VGA Toolbox&#039;&#039; (DA1.EXE and DA2.EXE contain gibberish)&lt;br /&gt;
* [[Duke Nukem]] - &amp;lt;tt&amp;gt;DN1.EXE&amp;lt;/tt&amp;gt; contains the string &#039;&#039;Version 1.0 EGA/VGAProGraphx EGA/VGA Toolbox&#039;&#039;&lt;br /&gt;
* [[Crystal Caves]] - &amp;lt;tt&amp;gt;CC1.EXE&amp;lt;/tt&amp;gt; contains the string &#039;&#039;Version 1.5 320x200 PAN EGA/VGAProGraphx EGA/VGA Toolbox&#039;&#039;&lt;br /&gt;
* [[FBI Fred]] - &amp;lt;tt&amp;gt;FBIFRED.EXE&amp;lt;/tt&amp;gt; contains the string &#039;&#039;Version 1.5 EGA/VGAProGraphx EGA/VGA Toolbox  (c) 1990&#039;&#039;&lt;br /&gt;
* [[Secret Agent]] - &amp;lt;tt&amp;gt;SAM1.EXE&amp;lt;/tt&amp;gt; contains the string &#039;&#039;ProGraphx EGA/VGA Toolbox Version 2.0 320x200 EGA/VGA Copyright 1991 by Peder Jungck&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== File format ==&lt;br /&gt;
&lt;br /&gt;
The file consists of a number of tilesets one after the other.  Each tileset is made up of a collection of small images (usually 8&amp;amp;times;8 or 16&amp;amp;times;16, but the format supports up to 2040&amp;amp;times;255.)&lt;br /&gt;
&lt;br /&gt;
In &#039;&#039;&#039;Secret Agent&#039;&#039;&#039; the files are encrypted with [[Secret Agent encryption]].   In the other games there is no encryption.&lt;br /&gt;
&lt;br /&gt;
=== Signature ===&lt;br /&gt;
&lt;br /&gt;
There is no signature, however careful processing of the header can be used to check whether the last tileset ends at exactly the end of the file (allowing for padding in some versions of the format.)  If not, it is unlikely to be in this format.  Be careful that files with zero values don&#039;t cause an endless loop when calculating offsets.&lt;br /&gt;
&lt;br /&gt;
=== Header ===&lt;br /&gt;
&lt;br /&gt;
Each tileset begins with the following header.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Data type!!Description&lt;br /&gt;
|-&lt;br /&gt;
|[[BYTE]] count||Number of sprites in this chunk (50 in most cases)&lt;br /&gt;
|-&lt;br /&gt;
|[[BYTE]] width||Sprite width, in bytes (not in pixels)&lt;br /&gt;
|-&lt;br /&gt;
|[[BYTE]] height||Sprite height, in pixels&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The image data for the tileset follows the header.  After the image data either the next header begins, or the file ends.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Operation: Airlift:&#039;&#039;&#039; Each tileset is padded up to the nearest multiple of 128 bytes.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Dark Ages:&#039;&#039;&#039; Each tileset is padded up to 8064 bytes, except for the last tileset which contains 2 sprites and is padded up to 384 bytes.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Duke Nukem:&#039;&#039;&#039; Each tileset is padded up to 8064 bytes, except for &amp;lt;tt&amp;gt;NUMBERS.DN?&amp;lt;/tt&amp;gt; (7186 bytes) and the backdrop files (&amp;lt;tt&amp;gt;DROP*.DN?&amp;lt;/tt&amp;gt;) which have no padding.  The backdrop files also have all three header bytes set to zero.  For these files, the number of sprites is always 130, the width is always 2 (bytes) and the height is always 16.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Crystal Caves:&#039;&#039;&#039; The file ends after the last tile&#039;s image data, there is no padding.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;FBI Fred:&#039;&#039;&#039; Each tileset is padded up to 8064 bytes, except for the last tileset which contains 23 sprites and is padded up to 3712 bytes.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Secret Agent:&#039;&#039;&#039; Each tileset is padded up to 8064 bytes for 16&amp;amp;times;16 sprite files (&amp;lt;tt&amp;gt;SAM?01.GFX&amp;lt;/tt&amp;gt;), and 2048 bytes for 8&amp;amp;times;8 sprite files (&amp;lt;tt&amp;gt;SAM?02.GFX&amp;lt;/tt&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
For those files with padding at the end, be careful not to interpret the padding as the presence of more tiles.&lt;br /&gt;
&lt;br /&gt;
=== Image data ===&lt;br /&gt;
&lt;br /&gt;
The image data is in [[Byte-planar EGA]] format with five planes, so reading &amp;lt;tt&amp;gt;width &amp;amp;times; height &amp;amp;times; 5&amp;lt;/tt&amp;gt; bytes will read in enough data for a single image (one tile.)  This value multiplied by the number of tiles (&amp;lt;tt&amp;gt;count&amp;lt;/tt&amp;gt;) will yield the number of bytes in the entire tileset, which can be used to skip directly to the next tileset in the file (if any.)&lt;br /&gt;
&lt;br /&gt;
The first byte in each tile&#039;s data is the transparency plane (1 == opaque, 0 == transparent), and the following four bytes/planes are blue, green, red and intensity.  The MSB in each byte (10000000) is the first/left-most pixel, and the eighth pixel is the LSB (00000001).  This means if the bits are processed in a loop, as the X direction increases to the right (0, 1, 2) the bit value decreases (0x80, 0x40, 0x20.)&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
* For at least &#039;&#039;&#039;Duke Nukem&#039;&#039;&#039;, the game seems to ignore the header of &#039;&#039;all&#039;&#039; files in this format.  You can set the entire header of any tileset file to zero values and the game will still load them properly.  This also means that you cannot use larger tilesets without modifying the executable.&lt;br /&gt;
&lt;br /&gt;
== Credits ==&lt;br /&gt;
&lt;br /&gt;
This file format has been reverse engineered by many people over the years.  [[User:K1n9_Duk3|K1n9_Duk3]] discovered that Duke Nukem uses this format.  [[User:Frenkel|Frenkel]] identified the similarities amongst all the games using the file format, and realised they all use the ProGraphx Toolbox.  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>Frenkel</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Talk:God_of_Thunder/Cheats&amp;diff=9001</id>
		<title>Talk:God of Thunder/Cheats</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Talk:God_of_Thunder/Cheats&amp;diff=9001"/>
		<updated>2020-04-11T19:25:10Z</updated>

		<summary type="html">&lt;p&gt;Frenkel: God of Thunder source code is available&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Now that the [https://github.com/SheridanR/god-of-thunder source code of God of Thunder is released], we can finally find out what the K button does. [[User:Frenkel|Frenkel]] ([[User talk:Frenkel|talk]]) 19:25, 11 April 2020 (UTC)&lt;/div&gt;</summary>
		<author><name>Frenkel</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Commander_Keen_1-3_Level_format&amp;diff=8997</id>
		<title>Commander Keen 1-3 Level format</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Commander_Keen_1-3_Level_format&amp;diff=8997"/>
		<updated>2020-03-27T20:29:44Z</updated>

		<summary type="html">&lt;p&gt;Frenkel: ID Software -&amp;gt; id Software&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Map Infobox&lt;br /&gt;
 | Type = 2D tile-based&lt;br /&gt;
 | Layers = 2&lt;br /&gt;
 | Viewport = 320&amp;amp;times;200&lt;br /&gt;
 | Games =&lt;br /&gt;
   {{Game|Commander Keen 1-3}}&lt;br /&gt;
   {{Game|Dangerous Dave in Copyright Infringement}}&lt;br /&gt;
   {{Game|Dangerous Dave 2}}&lt;br /&gt;
   {{Game|Shadow Knights}}&lt;br /&gt;
   {{Game|Slordax}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The [[Commander Keen 1-3]] level format was widely used in early [[:Category:id Software|id Software]] games, usually stored in the files &amp;lt;tt&amp;gt;LEVELxx.*&amp;lt;/tt&amp;gt; (Usually with 8 or 16 levels.) The level files are usually compressed with [[RLEW compression]], though earlier games omit this. The file is composed of three sections, the header, and the tile and sprite planes. &lt;br /&gt;
&lt;br /&gt;
== Compressed ==&lt;br /&gt;
&lt;br /&gt;
The compressed levels start with a dword giving the size of the decompressed level in bytes (always divisible by four) followed by the standard level data in RLEW compressed form. The rest of this page assumes decompressed data and uses offsets relative to the start of Level Data.&lt;br /&gt;
&lt;br /&gt;
{|class=wikitable&lt;br /&gt;
! Offset !! Length !! Name !! Note&lt;br /&gt;
|-&lt;br /&gt;
|0 || 4||Decompressed Size||always divisible by four&lt;br /&gt;
|-&lt;br /&gt;
|4 || ||Level Data        ||(see below)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Header ==&lt;br /&gt;
&lt;br /&gt;
The level header is 32 bytes long in total. Most of the header is (or was) used by TED v1.5 to load the level and its associated graphics and is not used by games &amp;lt;i&amp;gt;per se&amp;lt;/i&amp;gt;. These fields can be left blank and nobody will care, since the original TED is long gone.&lt;br /&gt;
&lt;br /&gt;
The plane size is interesting, since it has to be divisible by 16 because of how some game engines work. It is how many tiles are in each plane.&lt;br /&gt;
&lt;br /&gt;
{|class=wikitable&lt;br /&gt;
! Offset !! Length !! Name !! Note&lt;br /&gt;
|-&lt;br /&gt;
| 0|| 2||Level Width      ||&lt;br /&gt;
|-&lt;br /&gt;
| 2|| 2||Level Height     ||&lt;br /&gt;
|-&lt;br /&gt;
| 4|| 2||Number of Planes ||always 2&lt;br /&gt;
|-&lt;br /&gt;
| 6|| 4||Blank            ||appears to always be zero&lt;br /&gt;
|-&lt;br /&gt;
|10|| 4||TED Variables    ||ignored&lt;br /&gt;
|-&lt;br /&gt;
|14|| 2||Plane Size       ||2(h * w) rounded to the next highest multiple of 16&lt;br /&gt;
|-&lt;br /&gt;
|16||16||Unknown          ||ignored&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Sprite and tile planes ==&lt;br /&gt;
&lt;br /&gt;
Each plane is an array of words, padded to plane size bytes with nulls. Each word is a tile, running from left to right, top to bottom. THe first plane is tiles, the second is sprites.&lt;br /&gt;
&lt;br /&gt;
{|class=wikitable&lt;br /&gt;
! Offset !! Length !! Name&lt;br /&gt;
|-&lt;br /&gt;
|32             ||Plane Size||Tiles&lt;br /&gt;
|-&lt;br /&gt;
|32 + Plane Size||Plane Size||Sprites&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
&lt;br /&gt;
This format has been reverse engineered several times, always by the [[Commander Keen 1-3]] modding community.&lt;br /&gt;
&lt;br /&gt;
Dangerous Dave in Copyright Infringement appears to be the first game to use this format and has it uncompressed.&lt;/div&gt;</summary>
		<author><name>Frenkel</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Dangerous_Dave_in_Copyright_Infringement&amp;diff=8996</id>
		<title>Dangerous Dave in Copyright Infringement</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Dangerous_Dave_in_Copyright_Infringement&amp;diff=8996"/>
		<updated>2020-03-27T20:25:55Z</updated>

		<summary type="html">&lt;p&gt;Frenkel: ID Software -&amp;gt; id Software&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Stub}}&lt;br /&gt;
&lt;br /&gt;
{{Game Infobox&lt;br /&gt;
 | Levels = No&lt;br /&gt;
 | Tiles = No&lt;br /&gt;
 | Sprites = No&lt;br /&gt;
 | Fullscreen = No&lt;br /&gt;
 | Sound = No&lt;br /&gt;
 | Music = No&lt;br /&gt;
 | Text = No&lt;br /&gt;
 | Story = No&lt;br /&gt;
 | Interface = No&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Dangerous Dave in Copyright Infringement (DDiCI) is a small and incomplete game that led to the development of the [[Commander Keen 1-3]] series. The game displays the at-the-time revolutionary smooth scrolling EGA graphics and is named after the fact that it involved the protagonist&#039;s graphics from [[Dangerous Dave]] with the tiles from Mario.&lt;br /&gt;
&lt;br /&gt;
DDiCI was never completed or released as [[:Category:id Software|id Software]] developed Keen instead. However John Romero released the game, complete with TED 1.0 on his website several years later. The game is interesting to study from a historical viewpoint as it can clearly be seen how later games were based on it. The game features two playable (But not completable.) levels and the aforementioned level editor.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== File formats ==&lt;br /&gt;
&lt;br /&gt;
This section lists the major file formats used in the game.&lt;br /&gt;
&lt;br /&gt;
* [[Commander Keen 1-3 Level format]] - &amp;lt;tt&amp;gt;LEVELxx.DD2&amp;lt;/tt&amp;gt; are game levels, slightly modified in that they are not [[RLEW compression|RLEW compressed]].&lt;br /&gt;
* [[DDiCI Graphics format]] a combined file containing all the game&#039;s graphics.&lt;br /&gt;
* [[Dave Score format]] - Scores are stored in &amp;lt;tt&amp;gt;SCORES.DD2&amp;lt;/tt&amp;gt;, but not actually used.&lt;br /&gt;
* [[Keen 1-3 Tileinfo format]] - information about the properties of tiles are stored internally in the executable.&lt;br /&gt;
* [[Inverse Frequency Sound format]] - the sound file is stored internally and uses Apogees &#039;inverse frequency&#039; sound format&lt;br /&gt;
* [[Raw EGA data#Planar|Full-screen planar EGA]] All the graphics are in this format, stored in a single file.&lt;br /&gt;
&lt;br /&gt;
* Text is contained in the executable, the executable is compressed with LZ compression, and can be uncompressed with [[UNLZEXE]].&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
&lt;br /&gt;
Although the file extension, &amp;lt;tt&amp;gt;.DD2&amp;lt;/tt&amp;gt; suggests that this game would be the sequel to Dangerous Dave, the actual sequel [[Dangerous Dave 2]] was completed several years later, ironically based on the Keen 1-3 engine.&lt;br /&gt;
&lt;br /&gt;
[[Category:Apogee]]&lt;br /&gt;
[[Category:Sidescroller]]&lt;/div&gt;</summary>
		<author><name>Frenkel</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Wombat&amp;diff=8662</id>
		<title>Wombat</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Wombat&amp;diff=8662"/>
		<updated>2019-06-17T14:07:03Z</updated>

		<summary type="html">&lt;p&gt;Frenkel: updated to version 1.0.9&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Tool Infobox&lt;br /&gt;
 | Platform = Windows&lt;br /&gt;
 | Release = 24/04/2019 (1.0.9)&lt;br /&gt;
 | Homepage = [http://szevvy.com szevvy.com]&lt;br /&gt;
 | Download = [http://szevvy.com/download Windows x64]&lt;br /&gt;
 | Edit1 = Extraction&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Wombat Game Tools&#039;&#039;&#039; (also known as &#039;&#039;&#039;Wombat File Tools&#039;&#039;&#039;) is an extraction tool written by Szevvy.  It allows the files, images, sounds, etc. to be examined and exported from a number of classic games. &lt;br /&gt;
&lt;br /&gt;
[[User:Szevvy|Szevvy]]&#039;s website is [http://szevvy.com/ szevvy.com], it went offline for a while, but it&#039;s working again as of 15/10/2018.&lt;br /&gt;
&lt;br /&gt;
Wombat&#039;s latest version is 1.0.9 (24 April 2019)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
== Supported games ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
    &amp;lt;td width=&#039;30%&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;td&amp;gt;Archives&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;td&amp;gt;Graphics&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;td&amp;gt;Levels&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;td&amp;gt;Sounds&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;td&amp;gt;Music&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;td&amp;gt;Other&amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;7 Cities of Gold (&#039;93)&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFF0AA&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;/tr&amp;gt;&lt;br /&gt;
				&amp;lt;tr&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;Alien Carnage&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFF0AA&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFF0AA&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;/tr&amp;gt;&lt;br /&gt;
				&amp;lt;tr&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;Ancients I: Deathwatch&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFF0AA&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;/tr&amp;gt;&lt;br /&gt;
				&amp;lt;tr&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;Baron Baldric&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFF0AA&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;/tr&amp;gt;&lt;br /&gt;
				&amp;lt;tr&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;Battlechess 4000&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFF0AA&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;/tr&amp;gt;&lt;br /&gt;
				&amp;lt;tr&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;Biomenace&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;/tr&amp;gt;&lt;br /&gt;
				&amp;lt;tr&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;Cannon Fodder&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFF0AA&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;/tr&amp;gt;&lt;br /&gt;
				&amp;lt;tr&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;Captain Comic I&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFF0AA&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;/tr&amp;gt;&lt;br /&gt;
				&amp;lt;tr&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;Captain Comic II&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFF0AA&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;/tr&amp;gt;&lt;br /&gt;
				&amp;lt;tr&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;Clyde&#039;s Adventure&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFF0AA&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFF0AA&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFF0AA&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;/tr&amp;gt;&lt;br /&gt;
				&amp;lt;tr&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;Clyde&#039;s Revenge&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFF0AA&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;/tr&amp;gt;&lt;br /&gt;
				&amp;lt;tr&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;Commander Keen 1-3&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;/tr&amp;gt;&lt;br /&gt;
				&amp;lt;tr&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;Commander Keen 4-6&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFF0AA&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;/tr&amp;gt;&lt;br /&gt;
				&amp;lt;tr&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;Commander Keen Dreams&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFF0AA&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;/tr&amp;gt;&lt;br /&gt;
				&amp;lt;tr&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;Cosmo&#039;s Cosmic Adventure&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;/tr&amp;gt;&lt;br /&gt;
				&amp;lt;tr&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;Crystal Caves&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;/tr&amp;gt;&lt;br /&gt;
				&amp;lt;tr&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;Dangerous Dave&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFF0AA&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFF0AA&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;/tr&amp;gt;&lt;br /&gt;
				&amp;lt;tr&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;Dangerous Dave 2&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFF0AA&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFF0AA&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;/tr&amp;gt;&lt;br /&gt;
				&amp;lt;tr&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;Dark Ages&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;/tr&amp;gt;&lt;br /&gt;
				&amp;lt;tr&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;Desert Strike&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFF0AA&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;/tr&amp;gt;&lt;br /&gt;
				&amp;lt;tr&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;Dig It!&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFF0AA&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;/tr&amp;gt;&lt;br /&gt;
				&amp;lt;tr&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;Donald Duck&#039;s Playground&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFF0AA&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFF0AA&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;/tr&amp;gt;&lt;br /&gt;
				&amp;lt;tr&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;DOOM&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFF0AA&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;/tr&amp;gt;&lt;br /&gt;
				&amp;lt;tr&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;Duke Nukem&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;/tr&amp;gt;&lt;br /&gt;
				&amp;lt;tr&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;Duke Nukem 2&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFF0AA&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;/tr&amp;gt;&lt;br /&gt;
				&amp;lt;tr&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;Duke Nukem 3D&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;/tr&amp;gt;&lt;br /&gt;
				&amp;lt;tr&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;Dune 2&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFF0AA&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFF0AA&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;/tr&amp;gt;&lt;br /&gt;
				&amp;lt;tr&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;Electranoid&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFF0AA&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;/tr&amp;gt;&lt;br /&gt;
				&amp;lt;tr&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;Fuzzy&#039;s World of Miniature Space Golf&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFF0AA&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;/tr&amp;gt;&lt;br /&gt;
				&amp;lt;tr&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;Gateworld&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;/tr&amp;gt;&lt;br /&gt;
				&amp;lt;tr&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;God of Thunder&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;/tr&amp;gt;&lt;br /&gt;
				&amp;lt;tr&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;Gold Rush!&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFF0AA&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;/tr&amp;gt;&lt;br /&gt;
				&amp;lt;tr&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;Halloween Harry&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFF0AA&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFF0AA&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;/tr&amp;gt;&lt;br /&gt;
				&amp;lt;tr&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;Heroes of Might and Magic I&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;/tr&amp;gt;&lt;br /&gt;
				&amp;lt;tr&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;Heroes of Might and Magic II&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFF0AA&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;/tr&amp;gt;&lt;br /&gt;
				&amp;lt;tr&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;Hocus Pocus&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;/tr&amp;gt;&lt;br /&gt;
				&amp;lt;tr&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;Jazz Jackrabbit&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFF0AA&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;/tr&amp;gt;&lt;br /&gt;
				&amp;lt;tr&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;Jill of the Jungle&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;/tr&amp;gt;&lt;br /&gt;
				&amp;lt;tr&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;Jump &#039;n&#039; Bump&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;/tr&amp;gt;&lt;br /&gt;
				&amp;lt;tr&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;Jungle Strike&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFF0AA&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;/tr&amp;gt;&lt;br /&gt;
				&amp;lt;tr&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;King&#039;s Quest&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFF0AA&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;/tr&amp;gt;&lt;br /&gt;
				&amp;lt;tr&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;King&#039;s Quest II: Romancing the Throne&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFF0AA&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;/tr&amp;gt;&lt;br /&gt;
				&amp;lt;tr&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;King&#039;s Quest III: To Heir Is Human&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFF0AA&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;/tr&amp;gt;&lt;br /&gt;
				&amp;lt;tr&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;King&#039;s Quest IV: The Perils of Rosella&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFF0AA&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;/tr&amp;gt;&lt;br /&gt;
				&amp;lt;tr&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;Laser Light&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFF0AA&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;/tr&amp;gt;&lt;br /&gt;
				&amp;lt;tr&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;Leisure Suite Larry&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFF0AA&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;/tr&amp;gt;&lt;br /&gt;
				&amp;lt;tr&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;Major Stryker&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;/tr&amp;gt;&lt;br /&gt;
				&amp;lt;tr&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;Manhunter&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFF0AA&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;/tr&amp;gt;&lt;br /&gt;
				&amp;lt;tr&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;Manhunter 2: San Francisco&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFF0AA&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;/tr&amp;gt;&lt;br /&gt;
				&amp;lt;tr&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;Math Rescue&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFF0AA&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFF0AA&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;/tr&amp;gt;&lt;br /&gt;
				&amp;lt;tr&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;Mixed-Up Mother Goose&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFF0AA&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;/tr&amp;gt;&lt;br /&gt;
				&amp;lt;tr&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;Monster Bash&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFF0AA&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;/tr&amp;gt;&lt;br /&gt;
				&amp;lt;tr&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;Mystic Towers&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFF0AA&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;/tr&amp;gt;&lt;br /&gt;
				&amp;lt;tr&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;Nitemare 3D (Windows)&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;/tr&amp;gt;&lt;br /&gt;
				&amp;lt;tr&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;One Must Fall 2097&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFF0AA&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;/tr&amp;gt;&lt;br /&gt;
				&amp;lt;tr&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;Oregon Trail&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFF0AA&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;/tr&amp;gt;&lt;br /&gt;
				&amp;lt;tr&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;Police Quest: In Pursuit of the Death Angel&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFF0AA&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;/tr&amp;gt;&lt;br /&gt;
				&amp;lt;tr&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;Prehistorik&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFF0AA&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFF0AA&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;/tr&amp;gt;&lt;br /&gt;
				&amp;lt;tr&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;Secret Agent&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;/tr&amp;gt;&lt;br /&gt;
				&amp;lt;tr&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;Shadow Knights&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFF0AA&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFF0AA&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;/tr&amp;gt;&lt;br /&gt;
				&amp;lt;tr&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;Simcity 2000&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFF0AA&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;/tr&amp;gt;&lt;br /&gt;
				&amp;lt;tr&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;Sink or Swim&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;/tr&amp;gt;&lt;br /&gt;
				&amp;lt;tr&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;Smurfs&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFF0AA&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;/tr&amp;gt;&lt;br /&gt;
				&amp;lt;tr&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;Space Quest: The Sarien Encounter&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFF0AA&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;/tr&amp;gt;&lt;br /&gt;
				&amp;lt;tr&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;Space Quest II: Vohaul&#039;s Revenge&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFF0AA&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;/tr&amp;gt;&lt;br /&gt;
				&amp;lt;tr&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;Star Goose&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;/tr&amp;gt;&lt;br /&gt;
				&amp;lt;tr&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;Stargunner&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFF0AA&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;/tr&amp;gt;&lt;br /&gt;
				&amp;lt;tr&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;Syndicate&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFF0AA&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;/tr&amp;gt;&lt;br /&gt;
				&amp;lt;tr&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;The Black Cauldron&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFF0AA&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;/tr&amp;gt;&lt;br /&gt;
				&amp;lt;tr&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;The Lion King&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFF0AA&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;/tr&amp;gt;&lt;br /&gt;
				&amp;lt;tr&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;Traffic Dept 2192&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;/tr&amp;gt;&lt;br /&gt;
				&amp;lt;tr&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;Tyrian&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFF0AA&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;/tr&amp;gt;&lt;br /&gt;
				&amp;lt;tr&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;Wacky Wheels&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;/tr&amp;gt;&lt;br /&gt;
				&amp;lt;tr&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;Wolfenstein 3D&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFF0AA&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;/tr&amp;gt;&lt;br /&gt;
				&amp;lt;tr&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;Word Rescue&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFF0AA&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFF0AA&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;/tr&amp;gt;&lt;br /&gt;
				&amp;lt;tr&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;Xargon&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;/tr&amp;gt;&lt;br /&gt;
				&amp;lt;tr&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;Xatax&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFF0AA&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;/tr&amp;gt;&lt;br /&gt;
				&amp;lt;tr&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;Zombie Wars&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#B0E57C&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFF0AA&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td bgcolor=&#039;#FFAEAE&#039;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
					&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
				&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;/div&gt;</summary>
		<author><name>Frenkel</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Inverse_Frequency_Sound_format&amp;diff=7383</id>
		<title>Inverse Frequency Sound format</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Inverse_Frequency_Sound_format&amp;diff=7383"/>
		<updated>2017-11-22T20:07:01Z</updated>

		<summary type="html">&lt;p&gt;Frenkel: Added Space Pizza (and Catacomb II)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Sound Infobox&lt;br /&gt;
 | Type = PC Speaker&lt;br /&gt;
 | Count = 65,535&lt;br /&gt;
 | Rate = 18 - 144 Hz&lt;br /&gt;
 | NumChannels = 1&lt;br /&gt;
 | BitsPerSample = 16&lt;br /&gt;
 | Compressed = N&lt;br /&gt;
 | Tags = Names&lt;br /&gt;
 | Games =&lt;br /&gt;
   {{Game|Catacomb}}&lt;br /&gt;
   {{Game|Catacomb II}}&lt;br /&gt;
   {{Game|Commander Keen 1-3}}&lt;br /&gt;
   {{Game|Cosmo&#039;s Cosmic Adventures}}&lt;br /&gt;
   {{Game|Dangerous Dave}}&lt;br /&gt;
   {{Game|Dangerous Dave in Copyright Infringement}}&lt;br /&gt;
   {{Game|Dangerous Dave 2}}&lt;br /&gt;
   {{Game|Duke Nukem}}&lt;br /&gt;
   {{Game|Duke Nukem II}}&lt;br /&gt;
   {{Game|Hovertank 3-D}}&lt;br /&gt;
   {{Game|Math Rescue}}&lt;br /&gt;
   {{Game|Major Stryker}}&lt;br /&gt;
   {{Game|Monster Bash}}&lt;br /&gt;
   {{Game|Paragon}} &amp;lt;!-- aka Street Ball --&amp;gt;&lt;br /&gt;
   {{Game|Pickle Wars}}&lt;br /&gt;
   {{Game|Realms of Chaos}} &amp;lt;!-- beta version only --&amp;gt;&lt;br /&gt;
   {{Game|Rescue Rover}}&lt;br /&gt;
   {{Game|Shadow Knights}}&lt;br /&gt;
   {{Game|Slordax}}&lt;br /&gt;
   {{Game|Space Chase}}&lt;br /&gt;
   {{Game|Space Pizza}}&lt;br /&gt;
   {{Game|Word Rescue}}&lt;br /&gt;
   {{Game|Xenopods}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;Inverse Frequency Sound format&#039;&#039;&#039; is the format used by Apogee/id Software in many of their games for the PC sounds. It is named because the bulk of the data is stored as &#039;inverse frequency&#039; values (the higher the value, the lower the tone it produces.) Most commonly this is stored in a &amp;lt;tt&amp;gt;SOUNDS.xxx&amp;lt;/tt&amp;gt; file, though it may also be stored internally in the game executable.&lt;br /&gt;
&lt;br /&gt;
Later games, such as [[Wolfenstein 3-D]] use a modified form of this for their (less important) PC speaker and Adlib sounds.&lt;br /&gt;
&lt;br /&gt;
== File format ==&lt;br /&gt;
&lt;br /&gt;
The file is divided into three sections, 16 bytes of header, a list of sound names and the actual sound data. The start of the sound data should thus be &amp;lt;code&amp;gt;(count + 1) * 16&amp;lt;/code&amp;gt; bytes from the file start.&lt;br /&gt;
&lt;br /&gt;
=== 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;
| [[char]][4] || signature || &amp;quot;SND&amp;quot; + terminating null.  Indicates the start of a sound file, whereas &amp;quot;SPK&amp;quot; + $00 indicates the start of the older &#039;speaker&#039; format, which has very few differences. &amp;quot;SSE&amp;quot; + terminating null in [[Space Pizza]].&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || size || Size of file&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || unknown || Usually 0x003C, but doesn&#039;t appear to do anything.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || count || Number of sounds. For SPK files this is blank as the number of sounds is always 63.&lt;br /&gt;
|-&lt;br /&gt;
| [[BYTE]][6] || pad || Nulls to pad structure up to 16 bytes.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Sound definitions ===&lt;br /&gt;
&lt;br /&gt;
This structure is repeated once per sound.&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;
| [[UINT16LE]] || offset || Offset of the sound from the beginning of the file.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || priority || Whether or not sound will be interrupted by another sound if said sound starts playing while the first is. Sounds can only be interrupted by sounds that have an equal or higher value of this. 255 is max, 0 is inadvisable.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || rate || Defines the update rate of the timer generating the sound interrupt. Usually set to 8.&lt;br /&gt;
|-&lt;br /&gt;
| [[char]][12] || name || Null-padded sound name&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Sound data ===&lt;br /&gt;
&lt;br /&gt;
Sound data is divided into words (UINT16LE), with the word value being inversely proportional to the sound frequency. The sound frequency in Hz can be calculated as follows:&lt;br /&gt;
&lt;br /&gt;
 frequency = 1193181 / value&lt;br /&gt;
&lt;br /&gt;
These word values are written directly to PIT Channel 2. The PC Speaker is updated at a rate of usually 140 Hz, so each word value is around 1/140th of a second of tone. Most files contain a few seconds of sound. The value $FFFF signals the end of a sound and most values are between the range $0100-$5000. $0000 is silence and will cause the PC Speaker to be turned off.&lt;br /&gt;
&lt;br /&gt;
Depending on the implementation, the update rate might differ. [[Catacomb]] will set the speed for each sound according to the sound&#039;s rate value (rates 0 and 1 are about 18.18 Hz, rate = 8 is 140 Hz). [[Hovertank 3-D]] is hard-coded to use a fixed rate of 140 Hz and ignore each sound&#039;s rate value. [[Duke Nukem]] uses a fixed rate of 144 Hz.&lt;br /&gt;
&lt;br /&gt;
Later games use a similar format for PC sounds, where the sound data is in bytes with values of 0-255. Multiplying those byte values by 60 basically converts them to word values that can be written directly to PIT Channel 2. The loss of fine-tuning can probably be attributed to the lesser role of PC sounds in the [[AudioT Format]], which has a totally different way of reading the sounds, and also contains AdLib sound effects and music.&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
Most games load the entire file into memory and ignore all values in the header. The sound names are ignored, too. Since the games use hard-coded sound numbers (usually a 1-based index), seeking to &amp;lt;tt&amp;gt;16*soundnumber&amp;lt;/tt&amp;gt; will get the sound data offset, priority and rate.&lt;br /&gt;
&lt;br /&gt;
Due to a bug in the implementation, [[Duke Nukem]] uses the low byte of the sound&#039;s offset value as the priority for the sounds read from &amp;lt;tt&amp;gt;DUKE1-B.DN?&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Credits ==&lt;br /&gt;
&lt;br /&gt;
This format has been reverse engineered many times, most often in the [[Commander Keen 1-3]] fan community. Probably first by [http://web.archive.org/web/20000815235203/http://www.dd.chalmers.se/~f98anga/projects/keen/ Anders Gavare].  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>Frenkel</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Zool/Cheats&amp;diff=7366</id>
		<title>Zool/Cheats</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Zool/Cheats&amp;diff=7366"/>
		<updated>2017-11-14T20:18:00Z</updated>

		<summary type="html">&lt;p&gt;Frenkel: holding down Ctrl in the demo versions allows you to fly trough walls (after entering streetlamp)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;To enable cheats, press the &amp;lt;tt&amp;gt;Spacebar&amp;lt;/tt&amp;gt; on the main menu to access the options screen.  Then type the word &amp;lt;tt&amp;gt;stretlamp&amp;lt;/tt&amp;gt; (&amp;lt;tt&amp;gt;streetlamp&amp;lt;/tt&amp;gt; in the two demo versions) and press &amp;lt;tt&amp;gt;Enter&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
At the copy protection screen press &amp;lt;tt&amp;gt;Spacebar&amp;lt;/tt&amp;gt; to skip this screen.&lt;br /&gt;
&lt;br /&gt;
The the following keys will become available during gameplay:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Action&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;1&amp;lt;/tt&amp;gt; || Enable invincibility&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;2&amp;lt;/tt&amp;gt; || Set time to 1 (unavailable in the demo versions)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;4&amp;lt;/tt&amp;gt; || Lose a life&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;Keypad +&amp;lt;/tt&amp;gt; || Skip to next level&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;Keypad -&amp;lt;/tt&amp;gt; || Skip to previous level&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;Ctrl&amp;lt;/tt&amp;gt; || fly/no clip mode (only available in the demo versions)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Other keys ===&lt;br /&gt;
&lt;br /&gt;
These keys are available without enabling cheats.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Action&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;P&amp;lt;/tt&amp;gt; then &amp;lt;tt&amp;gt;Q&amp;lt;/tt&amp;gt; || Return to main menu&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;F10&amp;lt;/tt&amp;gt; || Exit to DOS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Cheat Codes]]&lt;br /&gt;
[[Category:Zool]]&lt;/div&gt;</summary>
		<author><name>Frenkel</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Zool&amp;diff=7365</id>
		<title>Zool</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Zool&amp;diff=7365"/>
		<updated>2017-11-13T21:24:34Z</updated>

		<summary type="html">&lt;p&gt;Frenkel: In the 2 demo versions the game data is uncompressed in individual files, so it&amp;#039;s easier to reverse engineer.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Game Infobox&lt;br /&gt;
 | Levels = No&lt;br /&gt;
 | Tiles = No&lt;br /&gt;
 | Sprites = No&lt;br /&gt;
 | Fullscreen = No&lt;br /&gt;
 | Sound = No&lt;br /&gt;
 | Music = No&lt;br /&gt;
 | Text = No&lt;br /&gt;
 | Story = No&lt;br /&gt;
 | Interface = No&lt;br /&gt;
}}&lt;br /&gt;
{{NoModdingInfo}}&lt;br /&gt;
&lt;br /&gt;
[[Zool]] is a Chupa-Chups sponsored platform game.&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
{{BeginFileFormatTools|Type=game}}&lt;br /&gt;
{{FileFormatTool&lt;br /&gt;
| Name = [[Camoto]]&lt;br /&gt;
| Platform = Linux/Windows&lt;br /&gt;
| grp = Edit&lt;br /&gt;
| map = No&lt;br /&gt;
| gfx = No&lt;br /&gt;
| mus = No&lt;br /&gt;
| sfx = No&lt;br /&gt;
| txt = No&lt;br /&gt;
| sav = No&lt;br /&gt;
| exe = No&lt;br /&gt;
}}&lt;br /&gt;
{{EndFileFormatTools}}&lt;br /&gt;
&lt;br /&gt;
{{BeginGameFileList}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = zool.dat&lt;br /&gt;
 | Format = [[DAT Format (Zool)]]&lt;br /&gt;
 | KnownFormat = Partial&lt;br /&gt;
 | Desc = Archive containing game data&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = settings&lt;br /&gt;
 | Format = [[Zool Configuration Format]]&lt;br /&gt;
 | KnownFormat = No&lt;br /&gt;
 | Desc = Key mapping, high scores, etc.&lt;br /&gt;
}}&lt;br /&gt;
{{EndGameFileList}}&lt;br /&gt;
&lt;br /&gt;
Notice that in the full version the game data is in &amp;lt;tt&amp;gt;zool.dat&amp;lt;/tt&amp;gt;, but in the two demo versions the game data is uncompressed in individual files.&lt;br /&gt;
&lt;br /&gt;
== Preliminary info. ==&lt;br /&gt;
&lt;br /&gt;
Currently this is about the Amiga CD32 files, it is put here as a reference for attempts on deciphering the PC version.&lt;br /&gt;
&lt;br /&gt;
On the CD32 version of the game, all files are crunched using the FUNGUS cruncher; use &#039;&#039;&#039;xfdmaster&#039;&#039;&#039; to uncrunch them.&lt;br /&gt;
&lt;br /&gt;
Use [http://eab.abime.net/showthread.php?t=52769 UAE XFD wrapper (beta)] to decrunch files from command line.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Formats&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Filename!!Description&lt;br /&gt;
|-&lt;br /&gt;
|*.CHM||Character map&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CHM&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Data type!!Description&lt;br /&gt;
|-&lt;br /&gt;
|[[UINT32BE]] iHeights||Offset to image heights &lt;br /&gt;
|-&lt;br /&gt;
|[[UINT32BE]] iWidths||Offset to image widths (0 = 16 px, 1 = 32 px)&lt;br /&gt;
|-&lt;br /&gt;
|[[UINT32BE]] iUnknowns||Offset to image unknowns (seems to be tile orientation) &lt;br /&gt;
|-&lt;br /&gt;
|[[UINT32BE]] iOffsets||Offset to image pixels (4-bit graphic planar, see [[Raw_EGA_data]])&lt;br /&gt;
|-&lt;br /&gt;
| Above infos || count = iWidths - iHeights&lt;br /&gt;
|-&lt;br /&gt;
| Characters data || ...&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Some of the files are mal-formed, or not even that format, though.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CHM palette&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Their palette comes from an uncompressed WinUAE memory dump taken at the right level, offset 1264, 64 colors in [[UINT16BE]] format, 12-bit RGB; each channel nibble is duplicated (OR-ed with itself with a 4 bits left-shifted version).&lt;br /&gt;
&lt;br /&gt;
Pseudo C# example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
        public static IEnumerable&amp;lt;byte[]&amp;gt; FromStream(Stream stream, long position, int colors)&lt;br /&gt;
        {&lt;br /&gt;
            var reader = new BinaryReader(stream);&lt;br /&gt;
            reader.BaseStream.Position = position;&lt;br /&gt;
            var bytes = new byte[colors][];&lt;br /&gt;
            for (int j = 0; j &amp;lt; colors; j++)&lt;br /&gt;
            {&lt;br /&gt;
                // 12-bit color : 0RGB&lt;br /&gt;
                ushort u = reader.ReadUInt16();&lt;br /&gt;
                ushort color = u.ToBigEndian();&lt;br /&gt;
                int r = (color &amp;amp; 0x0F00) &amp;gt;&amp;gt; 8;&lt;br /&gt;
                int g = (color &amp;amp; 0x00F0) &amp;gt;&amp;gt; 4;&lt;br /&gt;
                int b = (color &amp;amp; 0x000F) &amp;gt;&amp;gt; 0;&lt;br /&gt;
                &lt;br /&gt;
                // Each channel byte is formed by duplicating the nibble&lt;br /&gt;
                var r1 = (byte)(r | (r &amp;lt;&amp;lt; 4));&lt;br /&gt;
                var g1 = (byte)(g | (g &amp;lt;&amp;lt; 4));&lt;br /&gt;
                var b1 = (byte)(b | (b &amp;lt;&amp;lt; 4));&lt;br /&gt;
                &lt;br /&gt;
                bytes[j] = new[] { r1, g1, b1 };&lt;br /&gt;
            }&lt;br /&gt;
            return bytes;&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Credits ==&lt;br /&gt;
&lt;br /&gt;
Amiga stuff by [[User:Aybe|Aybe]].&lt;/div&gt;</summary>
		<author><name>Frenkel</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Raw_EGA_data&amp;diff=7364</id>
		<title>Raw EGA data</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Raw_EGA_data&amp;diff=7364"/>
		<updated>2017-11-13T21:14:44Z</updated>

		<summary type="html">&lt;p&gt;Frenkel: /* Examples of games that use each type */ added Linear examples: Street Fighter II and Zool&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Image Infobox&lt;br /&gt;
 | Hardware1 = EGA&lt;br /&gt;
 | Depth = 4-bit (EGA)&lt;br /&gt;
 | MinSize = 0&amp;amp;times;0&lt;br /&gt;
 | MaxSize = Unlimited&lt;br /&gt;
 | Palette = External&lt;br /&gt;
 | NumPlanes = 1 or 4&lt;br /&gt;
 | HasTransparency = N&lt;br /&gt;
 | HasHitmap = No&lt;br /&gt;
 | Games = &#039;&#039;See below&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
This page describes a number of generic arrangements for storing EGA graphics data.  The graphics in many EGA games are stored based on one of these formats.&lt;br /&gt;
&lt;br /&gt;
To avoid confusion, the term &#039;&#039;graphic&#039;&#039; refers to a single large image (such as a full-screen picture, or the entire contents of an image file) while the term &#039;&#039;tile&#039;&#039; refers to a much smaller image, which could either exist on its own or be one of many tiles that make up a large &#039;&#039;graphic&#039;&#039;.  In this use, all &#039;&#039;tiles&#039;&#039; in a single &#039;&#039;graphic&#039;&#039; need not be of the same dimensions.&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Unlike conventional image formats, EGA data is made up of a number of &#039;&#039;&#039;planes&#039;&#039;&#039;.  Each plane is like a black-and-white image that stores information about a single colour - for example if a bit is set in the blue plane as well as the red plane, that pixel will appear purple on-screen.  The reason the image data is stored like this is because it mirrors the way the data must be loaded into memory for display on the EGA.&lt;br /&gt;
&lt;br /&gt;
There are four standard colour planes (red, green, blue and intensity) with many games adding a fifth plane for transparency, and some even a sixth plane for &#039;hitmapping&#039; (to detect when two sprites touch.)  If an image is stored in planar format and it has four planes, it will be stored like four black-and-white images, one after the other (e.g. all the blue pixels first, then all the green pixels, and so on.)&lt;br /&gt;
&lt;br /&gt;
The actual order of the planes depends on the implementation.  It is almost always B-G-R-I, but may be the reverse, I-R-G-B, or indeed any combination at all.  You can usually expect to see a masking plane with sprite graphics (for transparent parts of the image), unless the game uses a separate black and white image as the mask (as is done in many older games.)&lt;br /&gt;
&lt;br /&gt;
There are several ways in which the data may be stored, depending on how graphics are divided into planes. The simplest, and most widely used, is to divide the file itself into four or more planes.  When this happens, usually all the graphics are loaded at once.  The next most common is for each individual graphic to be divided into four planes.  Usually this happens when each individual graphic may or may not be loaded in a level.  Finally each byte may be divided across the planes, providing one or two full-colour pixels per byte (this is the &amp;quot;conventional&amp;quot; linear format, where each byte is a colour number, or in the case of 4-bit EGA graphics, a single 8-bit byte contains colour numbers for two pixels.)  These arrangements are described in more detail below.&lt;br /&gt;
&lt;br /&gt;
== Graphic-planar EGA data ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot; style=&amp;quot;float: right; margin: 1em;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;caption align=&amp;quot;bottom&amp;quot;&amp;gt;Offsets into file data&amp;lt;/caption&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th rowspan=&amp;quot;2&amp;quot;&amp;gt;Pixels&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th colspan=&amp;quot;4&amp;quot;&amp;gt;Plane&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;0&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;1&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;2&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;3&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(0,0) to (7,0)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #0000AA; color: white;&amp;quot;&amp;gt;00&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #00AA00; color: white;&amp;quot;&amp;gt;10&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #AA0000; color: white;&amp;quot;&amp;gt;20&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #555555; color: white;&amp;quot;&amp;gt;30&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(8,0) to (15,0)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #0000AA; color: white;&amp;quot;&amp;gt;01&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #00AA00; color: white;&amp;quot;&amp;gt;11&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #AA0000; color: white;&amp;quot;&amp;gt;21&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #555555; color: white;&amp;quot;&amp;gt;31&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(0,1) to (7,1)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #0000AA; color: white;&amp;quot;&amp;gt;02&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #00AA00; color: white;&amp;quot;&amp;gt;12&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #AA0000; color: white;&amp;quot;&amp;gt;22&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #555555; color: white;&amp;quot;&amp;gt;32&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(8,1) to (15,1)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #0000AA; color: white;&amp;quot;&amp;gt;03&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #00AA00; color: white;&amp;quot;&amp;gt;13&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #AA0000; color: white;&amp;quot;&amp;gt;23&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #555555; color: white;&amp;quot;&amp;gt;33&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(0,2) to (7,2)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #0000AA; color: white;&amp;quot;&amp;gt;04&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #00AA00; color: white;&amp;quot;&amp;gt;14&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #AA0000; color: white;&amp;quot;&amp;gt;24&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #555555; color: white;&amp;quot;&amp;gt;34&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(8,2) to (15,2)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #0000AA; color: white;&amp;quot;&amp;gt;05&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #00AA00; color: white;&amp;quot;&amp;gt;15&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #AA0000; color: white;&amp;quot;&amp;gt;25&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #555555; color: white;&amp;quot;&amp;gt;35&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(0,3) to (7,3)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #0000AA; color: white;&amp;quot;&amp;gt;06&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #00AA00; color: white;&amp;quot;&amp;gt;16&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #AA0000; color: white;&amp;quot;&amp;gt;26&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #555555; color: white;&amp;quot;&amp;gt;36&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(8,3) to (15,3)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #0000AA; color: white;&amp;quot;&amp;gt;07&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #00AA00; color: white;&amp;quot;&amp;gt;17&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #AA0000; color: white;&amp;quot;&amp;gt;27&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #555555; color: white;&amp;quot;&amp;gt;37&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(0,4) to (7,4)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #0000AA; color: white;&amp;quot;&amp;gt;08&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #00AA00; color: white;&amp;quot;&amp;gt;18&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #AA0000; color: white;&amp;quot;&amp;gt;28&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #555555; color: white;&amp;quot;&amp;gt;38&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(8,4) to (15,4)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #0000AA; color: white;&amp;quot;&amp;gt;09&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #00AA00; color: white;&amp;quot;&amp;gt;19&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #AA0000; color: white;&amp;quot;&amp;gt;29&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #555555; color: white;&amp;quot;&amp;gt;39&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(0,5) to (7,5)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #0000AA; color: white;&amp;quot;&amp;gt;0A&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #00AA00; color: white;&amp;quot;&amp;gt;1A&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #AA0000; color: white;&amp;quot;&amp;gt;2A&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #555555; color: white;&amp;quot;&amp;gt;3A&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(8,5) to (15,5)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #0000AA; color: white;&amp;quot;&amp;gt;0B&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #00AA00; color: white;&amp;quot;&amp;gt;1B&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #AA0000; color: white;&amp;quot;&amp;gt;2B&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #555555; color: white;&amp;quot;&amp;gt;3B&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(0,6) to (7,6)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #0000AA; color: white;&amp;quot;&amp;gt;0C&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #00AA00; color: white;&amp;quot;&amp;gt;1C&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #AA0000; color: white;&amp;quot;&amp;gt;2C&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #555555; color: white;&amp;quot;&amp;gt;3C&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(8,6) to (15,6)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #0000AA; color: white;&amp;quot;&amp;gt;0D&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #00AA00; color: white;&amp;quot;&amp;gt;1D&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #AA0000; color: white;&amp;quot;&amp;gt;2D&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #555555; color: white;&amp;quot;&amp;gt;3D&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(0,7) to (7,7)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #0000AA; color: white;&amp;quot;&amp;gt;0E&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #00AA00; color: white;&amp;quot;&amp;gt;1E&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #AA0000; color: white;&amp;quot;&amp;gt;2E&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #555555; color: white;&amp;quot;&amp;gt;3E&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(8,7) to (15,7)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #0000AA; color: white;&amp;quot;&amp;gt;0F&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #00AA00; color: white;&amp;quot;&amp;gt;1F&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #AA0000; color: white;&amp;quot;&amp;gt;2F&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #555555; color: white;&amp;quot;&amp;gt;3F&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This arrangement stores complete planes one after the other, where each plane contains data for the entire image.&lt;br /&gt;
&lt;br /&gt;
A game that loads all its tiles at startup (such as Commander Keen 1) will tend to have all its tiles stored as a single planar graphic.  Tiles will consist of areas &amp;quot;cropped&amp;quot; out of the main graphic.  As such the program will usually need to know the size of the tile and its location in the planar data.  This may be stored in the file before EGA data or in a separate data file.&lt;br /&gt;
&lt;br /&gt;
This arrangement is also used for single graphic files loaded all at once, such as a 320&amp;amp;times;200 full-screen image.&lt;br /&gt;
&lt;br /&gt;
An 16&amp;amp;times;8 image in this arrangement is described in the table on the right.  The byte at index &amp;lt;tt&amp;gt;00&amp;lt;/tt&amp;gt; is for the first eight blue pixels on the first line, and the byte at index &amp;lt;tt&amp;gt;12&amp;lt;/tt&amp;gt; is for the first eight green pixels on the second line.&lt;br /&gt;
&lt;br /&gt;
Some tilesets are comprised of multiple images in this arrangement, concatenated together.  This allows each sub-image (tile) to be self-contained with data for all planes required, but only for that specific tile.  This avoids decoding more data than is necessary for display.&lt;br /&gt;
&lt;br /&gt;
In this case the game will usually store the size of each tile somewhere, from which the location and plane size can be calculated in the cases where each tile is of different dimensions.  Often tiles are the same size, which saves a lot of trouble since the location of any particular tile (as well as the number of tiles in the file), can be easily calculated.&lt;br /&gt;
&lt;br /&gt;
This arrangement is efficient enough that many games will have separate files in this format separate from all other graphics (e.g. [[Dangerous Dave 2]]).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
== Row-planar EGA data ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot; style=&amp;quot;float: right; margin: 1em;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;caption align=&amp;quot;bottom&amp;quot;&amp;gt;Offsets into file data&amp;lt;/caption&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th rowspan=&amp;quot;2&amp;quot;&amp;gt;Pixels&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th colspan=&amp;quot;4&amp;quot;&amp;gt;Plane&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;0&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;1&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;2&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;3&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(0,0) to (7,0)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #0000AA; color: white;&amp;quot;&amp;gt;00&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #00AA00; color: white;&amp;quot;&amp;gt;02&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #AA0000; color: white;&amp;quot;&amp;gt;04&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #555555; color: white;&amp;quot;&amp;gt;06&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(8,0) to (15,0)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #0000AA; color: white;&amp;quot;&amp;gt;01&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #00AA00; color: white;&amp;quot;&amp;gt;03&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #AA0000; color: white;&amp;quot;&amp;gt;05&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #555555; color: white;&amp;quot;&amp;gt;07&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(0,1) to (7,1)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #0000AA; color: white;&amp;quot;&amp;gt;08&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #00AA00; color: white;&amp;quot;&amp;gt;0A&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #AA0000; color: white;&amp;quot;&amp;gt;0C&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #555555; color: white;&amp;quot;&amp;gt;0E&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(8,1) to (15,1)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #0000AA; color: white;&amp;quot;&amp;gt;09&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #00AA00; color: white;&amp;quot;&amp;gt;0B&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #AA0000; color: white;&amp;quot;&amp;gt;0D&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #555555; color: white;&amp;quot;&amp;gt;0F&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(0,2) to (7,2)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #0000AA; color: white;&amp;quot;&amp;gt;10&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #00AA00; color: white;&amp;quot;&amp;gt;12&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #AA0000; color: white;&amp;quot;&amp;gt;14&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #555555; color: white;&amp;quot;&amp;gt;16&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(8,2) to (15,2)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #0000AA; color: white;&amp;quot;&amp;gt;11&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #00AA00; color: white;&amp;quot;&amp;gt;13&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #AA0000; color: white;&amp;quot;&amp;gt;15&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #555555; color: white;&amp;quot;&amp;gt;17&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(0,3) to (7,3)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #0000AA; color: white;&amp;quot;&amp;gt;18&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #00AA00; color: white;&amp;quot;&amp;gt;1A&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #AA0000; color: white;&amp;quot;&amp;gt;1C&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #555555; color: white;&amp;quot;&amp;gt;1E&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(8,3) to (15,3)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #0000AA; color: white;&amp;quot;&amp;gt;19&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #00AA00; color: white;&amp;quot;&amp;gt;1B&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #AA0000; color: white;&amp;quot;&amp;gt;1D&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #555555; color: white;&amp;quot;&amp;gt;1F&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(0,4) to (7,4)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #0000AA; color: white;&amp;quot;&amp;gt;20&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #00AA00; color: white;&amp;quot;&amp;gt;22&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #AA0000; color: white;&amp;quot;&amp;gt;24&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #555555; color: white;&amp;quot;&amp;gt;26&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(8,4) to (15,4)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #0000AA; color: white;&amp;quot;&amp;gt;21&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #00AA00; color: white;&amp;quot;&amp;gt;23&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #AA0000; color: white;&amp;quot;&amp;gt;25&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #555555; color: white;&amp;quot;&amp;gt;27&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(0,5) to (7,5)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #0000AA; color: white;&amp;quot;&amp;gt;28&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #00AA00; color: white;&amp;quot;&amp;gt;2A&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #AA0000; color: white;&amp;quot;&amp;gt;2C&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #555555; color: white;&amp;quot;&amp;gt;2E&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(8,5) to (15,5)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #0000AA; color: white;&amp;quot;&amp;gt;29&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #00AA00; color: white;&amp;quot;&amp;gt;2B&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #AA0000; color: white;&amp;quot;&amp;gt;2D&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #555555; color: white;&amp;quot;&amp;gt;2F&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(0,6) to (7,6)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #0000AA; color: white;&amp;quot;&amp;gt;30&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #00AA00; color: white;&amp;quot;&amp;gt;32&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #AA0000; color: white;&amp;quot;&amp;gt;34&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #555555; color: white;&amp;quot;&amp;gt;36&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(8,6) to (15,6)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #0000AA; color: white;&amp;quot;&amp;gt;31&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #00AA00; color: white;&amp;quot;&amp;gt;33&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #AA0000; color: white;&amp;quot;&amp;gt;35&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #555555; color: white;&amp;quot;&amp;gt;37&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(0,7) to (7,7)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #0000AA; color: white;&amp;quot;&amp;gt;38&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #00AA00; color: white;&amp;quot;&amp;gt;3A&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #AA0000; color: white;&amp;quot;&amp;gt;3C&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #555555; color: white;&amp;quot;&amp;gt;3E&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(8,7) to (15,7)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #0000AA; color: white;&amp;quot;&amp;gt;39&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #00AA00; color: white;&amp;quot;&amp;gt;3B&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #AA0000; color: white;&amp;quot;&amp;gt;3D&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #555555; color: white;&amp;quot;&amp;gt;3F&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This arrangement has more to do with how graphics are loaded rather than whether or not all graphics are loaded at once.  Like &#039;&#039;graphic-planar&#039;&#039; above, each image is separate, however instead of storing each plane in its entirety, the planes are split up by row.  This means once all the pixel data has been read in for a given row, the data following refers to the next plane on the same row.  Only once all the planes have been read in does the data advance to the next row.&lt;br /&gt;
&lt;br /&gt;
An example 16&amp;amp;times;8 image in this arrangement is shown on the right.  Here the width of a row is 16 pixels, or 2 bytes of EGA data.  Again, graphics in this format are often grouped together and the game will need to store the graphic&#039;s size and location.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Byte-planar EGA data ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot; style=&amp;quot;float: right; margin: 1em;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;caption align=&amp;quot;bottom&amp;quot;&amp;gt;Offsets into file data&amp;lt;/caption&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th rowspan=&amp;quot;2&amp;quot;&amp;gt;Pixels&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th colspan=&amp;quot;4&amp;quot;&amp;gt;Plane&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;0&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;1&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;2&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;3&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(0,0) to (7,0)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #0000AA; color: white;&amp;quot;&amp;gt;00&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #00AA00; color: white;&amp;quot;&amp;gt;01&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #AA0000; color: white;&amp;quot;&amp;gt;02&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #555555; color: white;&amp;quot;&amp;gt;03&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(8,0) to (15,0)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #0000AA; color: white;&amp;quot;&amp;gt;04&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #00AA00; color: white;&amp;quot;&amp;gt;05&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #AA0000; color: white;&amp;quot;&amp;gt;06&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #555555; color: white;&amp;quot;&amp;gt;07&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(0,1) to (7,1)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #0000AA; color: white;&amp;quot;&amp;gt;08&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #00AA00; color: white;&amp;quot;&amp;gt;09&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #AA0000; color: white;&amp;quot;&amp;gt;0A&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #555555; color: white;&amp;quot;&amp;gt;0B&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(8,1) to (15,1)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #0000AA; color: white;&amp;quot;&amp;gt;0C&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #00AA00; color: white;&amp;quot;&amp;gt;0D&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #AA0000; color: white;&amp;quot;&amp;gt;0E&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #555555; color: white;&amp;quot;&amp;gt;0F&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(0,2) to (7,2)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #0000AA; color: white;&amp;quot;&amp;gt;10&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #00AA00; color: white;&amp;quot;&amp;gt;11&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #AA0000; color: white;&amp;quot;&amp;gt;12&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #555555; color: white;&amp;quot;&amp;gt;13&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(8,2) to (15,2)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #0000AA; color: white;&amp;quot;&amp;gt;14&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #00AA00; color: white;&amp;quot;&amp;gt;15&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #AA0000; color: white;&amp;quot;&amp;gt;16&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #555555; color: white;&amp;quot;&amp;gt;17&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(0,3) to (7,3)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #0000AA; color: white;&amp;quot;&amp;gt;18&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #00AA00; color: white;&amp;quot;&amp;gt;19&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #AA0000; color: white;&amp;quot;&amp;gt;1A&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #555555; color: white;&amp;quot;&amp;gt;1B&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(8,3) to (15,3)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #0000AA; color: white;&amp;quot;&amp;gt;1C&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #00AA00; color: white;&amp;quot;&amp;gt;1D&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #AA0000; color: white;&amp;quot;&amp;gt;1E&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #555555; color: white;&amp;quot;&amp;gt;1F&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(0,4) to (7,4)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #0000AA; color: white;&amp;quot;&amp;gt;20&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #00AA00; color: white;&amp;quot;&amp;gt;21&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #AA0000; color: white;&amp;quot;&amp;gt;22&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #555555; color: white;&amp;quot;&amp;gt;23&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(8,4) to (15,4)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #0000AA; color: white;&amp;quot;&amp;gt;24&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #00AA00; color: white;&amp;quot;&amp;gt;25&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #AA0000; color: white;&amp;quot;&amp;gt;26&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #555555; color: white;&amp;quot;&amp;gt;27&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(0,5) to (7,5)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #0000AA; color: white;&amp;quot;&amp;gt;28&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #00AA00; color: white;&amp;quot;&amp;gt;29&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #AA0000; color: white;&amp;quot;&amp;gt;2A&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #555555; color: white;&amp;quot;&amp;gt;2B&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(8,5) to (15,5)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #0000AA; color: white;&amp;quot;&amp;gt;2C&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #00AA00; color: white;&amp;quot;&amp;gt;2D&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #AA0000; color: white;&amp;quot;&amp;gt;2E&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #555555; color: white;&amp;quot;&amp;gt;2F&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(0,6) to (7,6)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #0000AA; color: white;&amp;quot;&amp;gt;30&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #00AA00; color: white;&amp;quot;&amp;gt;31&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #AA0000; color: white;&amp;quot;&amp;gt;32&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #555555; color: white;&amp;quot;&amp;gt;33&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(8,6) to (15,6)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #0000AA; color: white;&amp;quot;&amp;gt;34&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #00AA00; color: white;&amp;quot;&amp;gt;35&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #AA0000; color: white;&amp;quot;&amp;gt;36&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #555555; color: white;&amp;quot;&amp;gt;37&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(0,7) to (7,7)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #0000AA; color: white;&amp;quot;&amp;gt;38&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #00AA00; color: white;&amp;quot;&amp;gt;39&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #AA0000; color: white;&amp;quot;&amp;gt;3A&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #555555; color: white;&amp;quot;&amp;gt;3B&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(8,7) to (15,7)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #0000AA; color: white;&amp;quot;&amp;gt;3C&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #00AA00; color: white;&amp;quot;&amp;gt;3D&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #AA0000; color: white;&amp;quot;&amp;gt;3E&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #555555; color: white;&amp;quot;&amp;gt;3F&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This arrangement has more to do with how graphics are loaded rather than whether or not all graphics are loaded at once.  Like &#039;&#039;graphic-planar&#039;&#039; above, each image is separate, however instead of storing each plane in its entirety, the planes are split up at the byte level.  This means each byte contains data for one plane of eight pixels, with the following byte containing data for the next plane of the same eight pixels.  After four bytes have been read, all four planes will have been read for a group of eight pixels.&lt;br /&gt;
&lt;br /&gt;
An example 16&amp;amp;times;8 image in this format is shown on the right.  Here the width of a row is 16 pixels, or 8 bytes of EGA data.  Again, graphics in this format are often grouped together and the game will need to store the graphic&#039;s size and location.  (Unless it is a list of tiles which are all of the same, known, dimensions.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Linear EGA data ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot; style=&amp;quot;float: right; margin: 1em;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;caption align=&amp;quot;bottom&amp;quot;&amp;gt;Offsets into file data&amp;lt;/caption&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th rowspan=&amp;quot;2&amp;quot;&amp;gt;Line (Y)&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th colspan=&amp;quot;8&amp;quot;&amp;gt;Column (X)&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;0-1&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;2-3&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;4-5&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;6-7&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;8-9&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;A-B&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;C-D&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;E-F&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;00&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;01&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;02&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;03&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;04&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;05&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;06&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;07&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;08&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;09&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;0A&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;0B&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;0C&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;0D&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;0E&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;0F&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;2&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;10&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;11&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;12&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;13&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;14&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;15&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;16&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;17&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;3&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;18&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;19&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;1A&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;1B&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;1C&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;1D&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;1E&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;1F&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;4&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;20&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;21&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;22&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;23&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;24&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;25&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;26&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;27&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;5&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;28&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;29&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;2A&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;2B&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;2C&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;2D&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;2E&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;2F&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;6&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;30&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;31&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;32&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;33&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;34&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;35&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;36&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;37&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;7&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;38&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;39&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;3A&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;3B&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;3C&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;3D&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;3E&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;3F&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This arrangement is the opposite of planar.  Instead of the data being split up into planes, it is combined into a collection of pixels.  Each nybble (half a byte - four bits) contains data for all four planes for a single pixel.  This is otherwise known as 4bpp (four bits-per-pixel) linear data.&lt;br /&gt;
&lt;br /&gt;
When reading a byte, the upper four bits contain data for one pixel, and the lower four bits contain data for a second pixel.&lt;br /&gt;
&lt;br /&gt;
Very few games store data in this format, on account of the extra processing required to load the data into EGA display memory.  It is listed here for completeness.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
== Converting planes into palette indices ==&lt;br /&gt;
&lt;br /&gt;
Once it is known how the planes are arranged, converting the data into colours is done by combining the bits in each plane together using binary arithmetic.  This will return a value between 0 and 15 inclusive, which is an index into the EGA palette.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellspacing=&amp;quot;2&amp;quot; cellpadding=&amp;quot;2&amp;quot; class=&amp;quot;wikitable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Plane&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Value (hex)&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Value (binary)&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th colspan=&amp;quot;16&amp;quot;&amp;gt;Value (pixels/flipped binary)&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Blue&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;AA AA&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;10101010 10101010&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;0&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #0000AA; color: white;&amp;quot;&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;0&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #0000AA; color: white;&amp;quot;&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;0&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #0000AA; color: white;&amp;quot;&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;0&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #0000AA; color: white;&amp;quot;&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;0&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #0000AA; color: white;&amp;quot;&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;0&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #0000AA; color: white;&amp;quot;&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;0&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #0000AA; color: white;&amp;quot;&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;0&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #0000AA; color: white;&amp;quot;&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Green&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;CC CC&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;11001100 11001100&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;0&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;0&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #00AA00; color: white;&amp;quot;&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #00AA00; color: white;&amp;quot;&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;0&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;0&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #00AA00; color: white;&amp;quot;&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #00AA00; color: white;&amp;quot;&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;0&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;0&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #00AA00; color: white;&amp;quot;&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #00AA00; color: white;&amp;quot;&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;0&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;0&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #00AA00; color: white;&amp;quot;&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #00AA00; color: white;&amp;quot;&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Red&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;F0 F0&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;11110000 11110000&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;0&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;0&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;0&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;0&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #AA0000; color: white;&amp;quot;&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #AA0000; color: white;&amp;quot;&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #AA0000; color: white;&amp;quot;&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #AA0000; color: white;&amp;quot;&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;0&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;0&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;0&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;0&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #AA0000; color: white;&amp;quot;&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #AA0000; color: white;&amp;quot;&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #AA0000; color: white;&amp;quot;&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #AA0000; color: white;&amp;quot;&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Intensity&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;FF 00&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;11111111 00000000&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;0&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;0&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;0&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;0&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;0&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;0&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;0&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;0&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #555555; color: white;&amp;quot;&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #555555; color: white;&amp;quot;&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #555555; color: white;&amp;quot;&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #555555; color: white;&amp;quot;&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #555555; color: white;&amp;quot;&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #555555; color: white;&amp;quot;&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #555555; color: white;&amp;quot;&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #555555; color: white;&amp;quot;&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Result&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;0&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #0000AA; color: white;&amp;quot;&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #00AA00; color: white;&amp;quot;&amp;gt;2&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #00AAAA; color: white;&amp;quot;&amp;gt;3&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #AA0000; color: white;&amp;quot;&amp;gt;4&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #AA00AA; color: white;&amp;quot;&amp;gt;5&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #AAAA00; color: white;&amp;quot;&amp;gt;6&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #AAAAAA; color: white;&amp;quot;&amp;gt;7&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #555555; color: white;&amp;quot;&amp;gt;8&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #5555FF; color: white;&amp;quot;&amp;gt;9&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #55FF55; color: black;&amp;quot;&amp;gt;A&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #55FFFF; color: black;&amp;quot;&amp;gt;B&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #FF5555; color: black;&amp;quot;&amp;gt;C&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #FF55FF; color: black;&amp;quot;&amp;gt;D&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #FFFF55; color: black;&amp;quot;&amp;gt;E&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #FFFFFF; color: black;&amp;quot;&amp;gt;F&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Examples of games that use each type ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Single image graphic-planar:&#039;&#039;&#039; [[Commander Keen 1-3]], [[Cosmo&#039;s Cosmic Adventures]], [[Dangerous Dave in the Haunted Mansion]], [[Shadow Knights]] (all use a fifth masking plane in some of their files.)&lt;br /&gt;
* &#039;&#039;&#039;Graphic-planar:&#039;&#039;&#039; [[Dangerous Dave]], [[Dangerous Dave in the Haunted Mansion]], [[Shadow Knights]] (the first uses offsets combined with X and Y dimensions to calculate plane size, the second two have their regularly-sized 16x16 tiles stored this way.)&lt;br /&gt;
* &#039;&#039;&#039;Row-planar:&#039;&#039;&#039; [[Cosmo&#039;s Cosmic Adventures]] tiles and sprites&lt;br /&gt;
* &#039;&#039;&#039;Byte-planar:&#039;&#039;&#039; [[ProGraphx Toolbox tileset format]]&lt;br /&gt;
* &#039;&#039;&#039;Linear:&#039;&#039;&#039; [[Street Fighter II]], [[Zool]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Articles]]&lt;/div&gt;</summary>
		<author><name>Frenkel</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Zool/Cheats&amp;diff=7363</id>
		<title>Zool/Cheats</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Zool/Cheats&amp;diff=7363"/>
		<updated>2017-11-12T20:48:11Z</updated>

		<summary type="html">&lt;p&gt;Frenkel: added cheats of the 2 demo versions&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;To enable cheats, press the &amp;lt;tt&amp;gt;Spacebar&amp;lt;/tt&amp;gt; on the main menu to access the options screen.  Then type the word &amp;lt;tt&amp;gt;stretlamp&amp;lt;/tt&amp;gt; (&amp;lt;tt&amp;gt;streetlamp&amp;lt;/tt&amp;gt; in the two demo versions) and press &amp;lt;tt&amp;gt;Enter&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
At the copy protection screen press &amp;lt;tt&amp;gt;Spacebar&amp;lt;/tt&amp;gt; to skip this screen.&lt;br /&gt;
&lt;br /&gt;
The the following keys will become available during gameplay:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Action&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;1&amp;lt;/tt&amp;gt; || Enable invincibility&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;2&amp;lt;/tt&amp;gt; || Set time to 1 (unavailable in the demo versions)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;4&amp;lt;/tt&amp;gt; || Lose a life&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;Keypad +&amp;lt;/tt&amp;gt; || Skip to next level&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;Keypad -&amp;lt;/tt&amp;gt; || Skip to previous level&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Other keys ===&lt;br /&gt;
&lt;br /&gt;
These keys are available without enabling cheats.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Action&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;P&amp;lt;/tt&amp;gt; then &amp;lt;tt&amp;gt;Q&amp;lt;/tt&amp;gt; || Return to main menu&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;F10&amp;lt;/tt&amp;gt; || Exit to DOS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Cheat Codes]]&lt;br /&gt;
[[Category:Zool]]&lt;/div&gt;</summary>
		<author><name>Frenkel</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Inverse_Frequency_Sound_format&amp;diff=7362</id>
		<title>Inverse Frequency Sound format</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Inverse_Frequency_Sound_format&amp;diff=7362"/>
		<updated>2017-11-11T23:47:39Z</updated>

		<summary type="html">&lt;p&gt;Frenkel: added Space Chase&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Sound Infobox&lt;br /&gt;
 | Type = PC Speaker&lt;br /&gt;
 | Count = 65,535&lt;br /&gt;
 | Rate = 18 - 144 Hz&lt;br /&gt;
 | NumChannels = 1&lt;br /&gt;
 | BitsPerSample = 16&lt;br /&gt;
 | Compressed = N&lt;br /&gt;
 | Tags = Names&lt;br /&gt;
 | Games =&lt;br /&gt;
   {{Game|Catacomb}}&lt;br /&gt;
   {{Game|Commander Keen 1-3}}&lt;br /&gt;
   {{Game|Cosmo&#039;s Cosmic Adventures}}&lt;br /&gt;
   {{Game|Dangerous Dave}}&lt;br /&gt;
   {{Game|Dangerous Dave in Copyright Infringement}}&lt;br /&gt;
   {{Game|Dangerous Dave 2}}&lt;br /&gt;
   {{Game|Duke Nukem}}&lt;br /&gt;
   {{Game|Duke Nukem II}}&lt;br /&gt;
   {{Game|Hovertank 3-D}}&lt;br /&gt;
   {{Game|Math Rescue}}&lt;br /&gt;
   {{Game|Major Stryker}}&lt;br /&gt;
   {{Game|Monster Bash}}&lt;br /&gt;
   {{Game|Paragon}} &amp;lt;!-- aka Street Ball --&amp;gt;&lt;br /&gt;
   {{Game|Pickle Wars}}&lt;br /&gt;
   {{Game|Realms of Chaos}} &amp;lt;!-- beta version only --&amp;gt;&lt;br /&gt;
   {{Game|Rescue Rover}}&lt;br /&gt;
   {{Game|Shadow Knights}}&lt;br /&gt;
   {{Game|Slordax}}&lt;br /&gt;
   {{Game|Space Chase}}&lt;br /&gt;
   {{Game|Word Rescue}}&lt;br /&gt;
   {{Game|Xenopods}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;Inverse Frequency Sound format&#039;&#039;&#039; is the format used by Apogee/id Software in many of their games for the PC sounds. It is named because the bulk of the data is stored as &#039;inverse frequency&#039; values (the higher the value, the lower the tone it produces.) Most commonly this is stored in a &amp;lt;tt&amp;gt;SOUNDS.xxx&amp;lt;/tt&amp;gt; file, though it may also be stored internally in the game executable.&lt;br /&gt;
&lt;br /&gt;
Later games, such as [[Wolfenstein 3-D]] use a modified form of this for their (less important) PC speaker and Adlib sounds.&lt;br /&gt;
&lt;br /&gt;
== File format ==&lt;br /&gt;
&lt;br /&gt;
The file is divided into three sections, 16 bytes of header, a list of sound names and the actual sound data. The start of the sound data should thus be &amp;lt;code&amp;gt;(count + 1) * 16&amp;lt;/code&amp;gt; bytes from the file start.&lt;br /&gt;
&lt;br /&gt;
=== 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;
| [[char]][4] || signature || &amp;quot;SND&amp;quot; + terminating null.  Indicates the start of a sound file, whereas &amp;quot;SPK&amp;quot; + $00 indicates the start of the older &#039;speaker&#039; format, which has very few differences.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || size || Size of file&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || unknown || Usually 0x003C, but doesn&#039;t appear to do anything.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || count || Number of sounds. For SPK files this is blank as the number of sounds is always 63.&lt;br /&gt;
|-&lt;br /&gt;
| [[BYTE]][6] || pad || Nulls to pad structure up to 16 bytes.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Sound definitions ===&lt;br /&gt;
&lt;br /&gt;
This structure is repeated once per sound.&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;
| [[UINT16LE]] || offset || Offset of the sound from the beginning of the file.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || priority || Whether or not sound will be interrupted by another sound if said sound starts playing while the first is. Sounds can only be interrupted by sounds that have an equal or higher value of this. 255 is max, 0 is inadvisable.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || rate || Defines the update rate of the timer generating the sound interrupt. Usually set to 8.&lt;br /&gt;
|-&lt;br /&gt;
| [[char]][12] || name || Null-padded sound name&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Sound data ===&lt;br /&gt;
&lt;br /&gt;
Sound data is divided into words (UINT16LE), with the word value being inversely proportional to the sound frequency. The sound frequency in Hz can be calculated as follows:&lt;br /&gt;
&lt;br /&gt;
 frequency = 1193181 / value&lt;br /&gt;
&lt;br /&gt;
These word values are written directly to PIT Channel 2. The PC Speaker is updated at a rate of usually 140 Hz, so each word value is around 1/140th of a second of tone. Most files contain a few seconds of sound. The value $FFFF signals the end of a sound and most values are between the range $0100-$5000. $0000 is silence and will cause the PC Speaker to be turned off.&lt;br /&gt;
&lt;br /&gt;
Depending on the implementation, the update rate might differ. [[Catacomb]] will set the speed for each sound according to the sound&#039;s rate value (rates 0 and 1 are about 18.18 Hz, rate = 8 is 140 Hz). [[Hovertank 3-D]] is hard-coded to use a fixed rate of 140 Hz and ignore each sound&#039;s rate value. [[Duke Nukem]] uses a fixed rate of 144 Hz.&lt;br /&gt;
&lt;br /&gt;
Later games use a similar format for PC sounds, where the sound data is in bytes with values of 0-255. Multiplying those byte values by 60 basically converts them to word values that can be written directly to PIT Channel 2. The loss of fine-tuning can probably be attributed to the lesser role of PC sounds in the [[AudioT Format]], which has a totally different way of reading the sounds, and also contains AdLib sound effects and music.&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
Most games load the entire file into memory and ignore all values in the header. The sound names are ignored, too. Since the games use hard-coded sound numbers (usually a 1-based index), seeking to &amp;lt;tt&amp;gt;16*soundnumber&amp;lt;/tt&amp;gt; will get the sound data offset, priority and rate.&lt;br /&gt;
&lt;br /&gt;
Due to a bug in the implementation, [[Duke Nukem]] uses the low byte of the sound&#039;s offset value as the priority for the sounds read from &amp;lt;tt&amp;gt;DUKE1-B.DN?&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Credits ==&lt;br /&gt;
&lt;br /&gt;
This format has been reverse engineered many times, most often in the [[Commander Keen 1-3]] fan community. Probably first by [http://web.archive.org/web/20000815235203/http://www.dd.chalmers.se/~f98anga/projects/keen/ Anders Gavare].  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>Frenkel</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=DAT_Format_(Zool)&amp;diff=7361</id>
		<title>DAT Format (Zool)</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=DAT_Format_(Zool)&amp;diff=7361"/>
		<updated>2017-11-11T23:26:21Z</updated>

		<summary type="html">&lt;p&gt;Frenkel: Lotus III also uses this file format&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Archive Infobox&lt;br /&gt;
 | MaxFiles = Unlimited&lt;br /&gt;
 | FAT = Beginning&lt;br /&gt;
 | Names = Yes, 8&lt;br /&gt;
 | Metadata = None&lt;br /&gt;
 | Subdirectories = N&lt;br /&gt;
 | Compressed = Y&lt;br /&gt;
 | Encrypted = N&lt;br /&gt;
 | Hidden = N&lt;br /&gt;
 | Games = &lt;br /&gt;
   {{Game|Lotus: The Ultimate Challenge}}&lt;br /&gt;
   {{Game|Zool}}&lt;br /&gt;
}}&lt;br /&gt;
The &#039;&#039;&#039;Zool DAT Format&#039;&#039;&#039; is used by [[Lotus: The Ultimate Challenge]] and [[Zool]] for storing game data.  Data is stored in chunks of 512 bytes.&lt;br /&gt;
&lt;br /&gt;
As the offset of the last chunk is stored in a UINT16LE field, its maximum value is 65,535.  Multiplied by the 512-byte chunk length, this yields a maximum DAT size of 33,553,920 bytes (512 bytes less than 32MB.)&lt;br /&gt;
&lt;br /&gt;
== File format ==&lt;br /&gt;
&lt;br /&gt;
=== Signature ===&lt;br /&gt;
&lt;br /&gt;
There is no signature, and the fields must be checked to correctly detect files.  Since the first two bytes multiplied by 512 must equal the size of the DAT file, this is one good check.&lt;br /&gt;
&lt;br /&gt;
=== Header ===&lt;br /&gt;
&lt;br /&gt;
The header is very simple.&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;
| [[UINT16LE]] || len || Length of DAT file, in units of 512 bytes.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This value is multiplied by 512 to give the size of the DAT file, which is also used as the offset of the end of the last file in the archive.&lt;br /&gt;
&lt;br /&gt;
=== File entry ===&lt;br /&gt;
&lt;br /&gt;
The header is followed by one or more file entries in the following structure.&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;
| [[char]][8] || filename || Filename, padded with spaces (char 0x20), not null-terminated.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || len || Offset of file, in units of 512 bytes.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The list of file entries takes up a minimum of 512 bytes, and if more files are needed, space is allocated in chunks of 512 bytes.&lt;br /&gt;
&lt;br /&gt;
The file&#039;s size must be calculated from the offset of the following file.&lt;br /&gt;
&lt;br /&gt;
This structure is repeated until the first byte in &amp;lt;tt&amp;gt;filename&amp;lt;/tt&amp;gt; is 0.  This immediately terminates the structure and the rest of the filename and the length are not present.  (However as the FAT is padded to chunks of 512 bytes, there will always be enough bytes available in the padding data to read the full field.)&lt;br /&gt;
&lt;br /&gt;
In the event that 51 files are present, the last valid file entry will end exactly on a 512 byte boundary.  This will cause the FAT to be extended by 512 bytes, simply to store the terminating null (with 511 bytes of padding.)  This does not require any special handling when reading the archive, but is mentioned to illustrate the importance of the terminating null byte.&lt;br /&gt;
&lt;br /&gt;
=== Extra data ===&lt;br /&gt;
&lt;br /&gt;
Since both the FAT and each file are padded to occupy a multiple of 512 bytes, there is unused data at the end of most files.  This is especially noticeable in the FAT itself, which seems to contain old high score data leftover from the game&#039;s development.&lt;br /&gt;
&lt;br /&gt;
The padding data found in later files does not seem to be compressed, suggesting that decompression happens outside the archive format.&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
{{BeginFileFormatTools|Type=group}}&lt;br /&gt;
{{FileFormatTool&lt;br /&gt;
| Name = [[Camoto]]&lt;br /&gt;
| Platform = Linux/Windows&lt;br /&gt;
| canExtract = Yes&lt;br /&gt;
| canDecompress = No&lt;br /&gt;
| canCreate = Yes&lt;br /&gt;
| canModify = Yes&lt;br /&gt;
| canCompress = No&lt;br /&gt;
| editHidden = N/A&lt;br /&gt;
| editMetadata = N/A&lt;br /&gt;
}}&lt;br /&gt;
{{EndFileFormatTools}}&lt;br /&gt;
&lt;br /&gt;
== Credits ==&lt;br /&gt;
&lt;br /&gt;
This file format was reverse engineered by [[User:Malvineous|Malvineous]].  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>Frenkel</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Zool/Cheats&amp;diff=7360</id>
		<title>Zool/Cheats</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Zool/Cheats&amp;diff=7360"/>
		<updated>2017-11-11T23:09:25Z</updated>

		<summary type="html">&lt;p&gt;Frenkel: cheat lets you skip copy protection screen and 2 sets the time to 1 and 4 lets you loose a life&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;To enable cheats, press the &amp;lt;tt&amp;gt;Spacebar&amp;lt;/tt&amp;gt; on the main menu to access the options screen.  Then type the word &amp;lt;tt&amp;gt;stretlamp&amp;lt;/tt&amp;gt; and press &amp;lt;tt&amp;gt;Enter&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
At the copy protection screen press &amp;lt;tt&amp;gt;Spacebar&amp;lt;/tt&amp;gt; to skip this screen.&lt;br /&gt;
&lt;br /&gt;
The the following keys will become available during gameplay:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Action&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;1&amp;lt;/tt&amp;gt; || Enable invincibility&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;2&amp;lt;/tt&amp;gt; || Set time to 1&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;4&amp;lt;/tt&amp;gt; || Lose a life&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;Keypad +&amp;lt;/tt&amp;gt; || Skip to next level&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;Keypad -&amp;lt;/tt&amp;gt; || Skip to previous level&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Other keys ===&lt;br /&gt;
&lt;br /&gt;
These keys are available without enabling cheats.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Action&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;P&amp;lt;/tt&amp;gt; then &amp;lt;tt&amp;gt;Q&amp;lt;/tt&amp;gt; || Return to main menu&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;F10&amp;lt;/tt&amp;gt; || Exit to DOS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Cheat Codes]]&lt;br /&gt;
[[Category:Zool]]&lt;/div&gt;</summary>
		<author><name>Frenkel</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Cosmo%27s_Cosmic_Adventure/Cheats&amp;diff=7171</id>
		<title>Cosmo&#039;s Cosmic Adventure/Cheats</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Cosmo%27s_Cosmic_Adventure/Cheats&amp;diff=7171"/>
		<updated>2017-08-02T19:52:08Z</updated>

		<summary type="html">&lt;p&gt;Frenkel: add F10+P to pause without showing &amp;#039;Game Paused&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Full-Inventory Cheat ==&lt;br /&gt;
&lt;br /&gt;
* Hold down &#039;&#039;&#039;C&#039;&#039;&#039;, &#039;&#039;&#039;0&#039;&#039;&#039; (zero), and &#039;&#039;&#039;F10&#039;&#039;&#039; to fill up your health, and bomb inventory.&lt;br /&gt;
&lt;br /&gt;
== Debug Cheats ==&lt;br /&gt;
&lt;br /&gt;
Hold down &#039;&#039;&#039;Tab&#039;&#039;&#039;, &#039;&#039;&#039;F12&#039;&#039;&#039;, and &#039;&#039;&#039;Delete&#039;&#039;&#039; to activate debug mode.  The following keys will then work:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;F10 + G&#039;&#039;&#039; will activate God Mode. This means that Cosmo cannot be harmed by enemies or hazards. He can, however, die by falling off the bottom of the screen.&lt;br /&gt;
* &#039;&#039;&#039;F10 + W&#039;&#039;&#039; will bring up a window where you can type in which level you would like to go to. &lt;br /&gt;
* &#039;&#039;&#039;F10 + M&#039;&#039;&#039; will bring up a status window showing how much memory (in kB) is free, how much total memory is being used, how large the level is, and how many actors (Cosmo, enemies, objects, and obstacles) are in the level.&lt;br /&gt;
* &#039;&#039;&#039;F10 + P&#039;&#039;&#039; will pause the game without showing &#039;Game Paused&#039;&lt;br /&gt;
* &#039;&#039;&#039;F10 + E + N + D&#039;&#039;&#039; will skip to the end-of-episode cutscenes.&lt;br /&gt;
* &#039;&#039;&#039;F11&#039;&#039;&#039; Pressing F11 twice on the main title screen will cause the game to go into demo recording mode. The recorded demo will be saved into the file &#039;&#039;&#039;PREVDEMO.MNI&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Category:Cheat Codes]]&lt;br /&gt;
[[Category:Cosmo&#039;s Cosmic Adventures]]&lt;/div&gt;</summary>
		<author><name>Frenkel</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Monster_Bash/Cheats&amp;diff=7032</id>
		<title>Monster Bash/Cheats</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Monster_Bash/Cheats&amp;diff=7032"/>
		<updated>2017-01-30T20:16:08Z</updated>

		<summary type="html">&lt;p&gt;Frenkel: There&amp;#039;s no jump cheat in the unmodified version of Monster Bash, right?&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Gameplay ==&lt;br /&gt;
&lt;br /&gt;
For these, the key must be held first then F10 pressed. If F10 is pressed first, the level hints window will open, preventing the cheat from working.&lt;br /&gt;
&lt;br /&gt;
; M + F10&lt;br /&gt;
: Show memory statistics&lt;br /&gt;
; P + F10&lt;br /&gt;
: Pause game without showing a popup window&lt;br /&gt;
; Z + F10&lt;br /&gt;
: Five extra lives&lt;br /&gt;
&lt;br /&gt;
The game also includes a warp cheat, however the activation key has been disabled. It can be re-enabled via hex editing&amp;lt;ref&amp;gt;http://sfprod.shikadi.net/old/games/monsterbash.htm&amp;lt;/ref&amp;gt; or by running a trainer&amp;lt;ref&amp;gt;http://forums.3drealms.com/vb/showthread.php?t=2584&amp;lt;/ref&amp;gt;. The trainer also adds a jump cheat.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Cheat Codes]]&lt;br /&gt;
[[Category:Monster Bash]]&lt;/div&gt;</summary>
		<author><name>Frenkel</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Talk:EPF_Format&amp;diff=6983</id>
		<title>Talk:EPF Format</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Talk:EPF_Format&amp;diff=6983"/>
		<updated>2016-09-28T19:25:54Z</updated>

		<summary type="html">&lt;p&gt;Frenkel: oops, forgot to sign my message&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This file format is also used by some Windows games:&lt;br /&gt;
* Aladdin&lt;br /&gt;
* Pressure Drop&lt;br /&gt;
* Under Pressure&lt;br /&gt;
* VR Sports Powerboat Racing&lt;br /&gt;
Should this be mentioned somewhere?&lt;br /&gt;
[[User:Frenkel|Frenkel]] ([[User talk:Frenkel|talk]]) 19:25, 28 September 2016 (UTC)&lt;/div&gt;</summary>
		<author><name>Frenkel</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Talk:EPF_Format&amp;diff=6973</id>
		<title>Talk:EPF Format</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Talk:EPF_Format&amp;diff=6973"/>
		<updated>2016-09-22T23:05:58Z</updated>

		<summary type="html">&lt;p&gt;Frenkel: What about Windows games?&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This file format is also used by some Windows games:&lt;br /&gt;
* Aladdin&lt;br /&gt;
* Pressure Drop&lt;br /&gt;
* Under Pressure&lt;br /&gt;
* VR Sports Powerboat Racing&lt;br /&gt;
Should this be mentioned somewhere?&lt;/div&gt;</summary>
		<author><name>Frenkel</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=EPF_Format&amp;diff=6972</id>
		<title>EPF Format</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=EPF_Format&amp;diff=6972"/>
		<updated>2016-09-22T22:59:07Z</updated>

		<summary type="html">&lt;p&gt;Frenkel: Kingpin: Arcade Sports Bowling added&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Archive Infobox&lt;br /&gt;
 | MaxFiles = 65,535&lt;br /&gt;
 | FAT = End&lt;br /&gt;
 | Names = Yes, 8.3&lt;br /&gt;
 | Metadata = None&lt;br /&gt;
 | Subdirectories = N&lt;br /&gt;
 | Compressed = Y&lt;br /&gt;
 | Encrypted = N&lt;br /&gt;
 | Hidden = Y&lt;br /&gt;
 | Games = &lt;br /&gt;
   {{Game|Alien Breed Tower Assault}}&lt;br /&gt;
   {{Game|Arcade Pool}}&lt;br /&gt;
   {{Game|Kingpin: Arcade Sports Bowling}}&lt;br /&gt;
   {{Game|Mr Blobby}}&lt;br /&gt;
   {{Game|Overdrive}}&lt;br /&gt;
   {{Game|Project X}}&lt;br /&gt;
   {{Game|Sensible Golf}}&lt;br /&gt;
   {{Game|Speed Demons}}&lt;br /&gt;
   {{Game|Spirou}}&lt;br /&gt;
   {{Game|The Adventures of Tintin: Prisoners of the Sun}}&lt;br /&gt;
   {{Game|The Jungle Book}}&lt;br /&gt;
   {{Game|The Lion King}}&lt;br /&gt;
   {{Game|The Smurfs}}&lt;br /&gt;
   {{Game|Tin Tin in Tibet}}&lt;br /&gt;
   {{Game|Universe}}&lt;br /&gt;
}}&lt;br /&gt;
The EPF file format is used in many games, like:&lt;br /&gt;
&lt;br /&gt;
Some (all?) of these games are made by East Point Software, so EPF (a shortened version of &amp;quot;EPFS&amp;quot; from the file header) probably stands for East Point File System or something similar.&lt;br /&gt;
&lt;br /&gt;
== File format ==&lt;br /&gt;
&lt;br /&gt;
=== Signature ===&lt;br /&gt;
&lt;br /&gt;
The first four bytes in the file are &amp;quot;EPFS&amp;quot;, followed by a [[UINT32LE]] offset (so that value must be smaller than the total file size.)&lt;br /&gt;
&lt;br /&gt;
=== Header ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Data type!!Description&lt;br /&gt;
|-&lt;br /&gt;
|[[BYTE]] signature[4]||&amp;quot;EPFS&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|[[UINT32LE]] fatOffset||Offset of the FAT&lt;br /&gt;
|-&lt;br /&gt;
|[[UINT8]] unknown||{{TODO|Unknown, always zero - flags?}}&lt;br /&gt;
|-&lt;br /&gt;
|[[UINT16LE]] numFiles||Number of files&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The data for the first file starts immediately after the header (i.e. file offset 11.)&lt;br /&gt;
&lt;br /&gt;
=== File entry ===&lt;br /&gt;
&lt;br /&gt;
At offset &amp;lt;tt&amp;gt;fatOffset&amp;lt;/tt&amp;gt; sits a list of file entries.  The following structure is repeated until the end of the file.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Data type!!Description&lt;br /&gt;
|-&lt;br /&gt;
|[[BYTE]] filename[13]||Filename (NULL-terminated)&lt;br /&gt;
|-&lt;br /&gt;
|[[UINT8]] compressionFlag||0 for &amp;quot;file is not compressed&amp;quot;, 1 for &amp;quot;file is compressed&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|[[UINT32LE]] compressedSize||size of the compressed file&lt;br /&gt;
|-&lt;br /&gt;
|[[UINT32LE]] decompressedSize||size of the file after decompression&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
In order to calculate the offset of each file, a running total is required.  It should start at offset 11 (just after the header), then the &amp;lt;tt&amp;gt;compressedSize&amp;lt;/tt&amp;gt; should be added to reveal the offset of the next file.&lt;br /&gt;
&lt;br /&gt;
=== Compression ===&lt;br /&gt;
&lt;br /&gt;
The compression scheme is [[LZW compression|LZW]], with a dynamic bit length from 9 to 14.&lt;br /&gt;
&lt;br /&gt;
The bits are stored in big-endian byte order, in contrast to e.g. Apogee/id LZW.  For example:&lt;br /&gt;
&lt;br /&gt;
  12          34         56         // bytes in compressed data file&lt;br /&gt;
  00010010    00110100   01010110   // converted to 8-bit binary&lt;br /&gt;
  000100100    011010001   010110   // bits read in big-endian order (Lion King)&lt;br /&gt;
 000010010  100011010    010101     // bits read in little-endian order (id/Apogee)&lt;br /&gt;
 ^...go here         ^bits from here...&lt;br /&gt;
&lt;br /&gt;
Although it uses a &amp;quot;normal&amp;quot; LZW algorithm, there are a few differences:&lt;br /&gt;
&lt;br /&gt;
* There are no reserved codewords at the beginning of the dictionary, so the first valid (9-bit) codeword is 0x100.&lt;br /&gt;
* When the dictionary is reset, the bit length is unchanged.&lt;br /&gt;
* The two largest possible codewords (at the current bit length) are reserved.  The largest codeword is used to signify the end of the data, and the second largest codeword is used to reset the dictionary.&lt;br /&gt;
* Once the third-largest codeword is encountered and processed (this is the largest valid/non-reserved codeword - 1021 for 10-bit codes) the bit length is incremented.&lt;br /&gt;
&lt;br /&gt;
The reserved codewords deserve a little extra explanation.  For a 10-bit codeword length, the largest possible value that can fit in ten bits is (1&amp;lt;&amp;lt;10)-1 == 1023, so a codeword of 1023 signifies the end of the data.  A codeword of 1022 (one less than the maximum) will reset the dictionary, but leave the codeword length unchanged (10-bits in this example), although in reality it would not make sense to encounter a dictionary-reset codeword until the dictionary has reached its maximum size, i.e. 14-bit codewords are in use.&lt;br /&gt;
&lt;br /&gt;
Keep in mind that these reserved codewords must be processed before the LZW decoder sees them, otherwise it will treat them as lookups into the dictionary, resulting in out of range accesses.  Also remember that once the bit length increases, the two reserved codewords will change, as the maximum codeword value has increased.  This frees up the &amp;quot;old&amp;quot; reserved codewords which are then used as normal codewords.&lt;br /&gt;
&lt;br /&gt;
At least one EPF file (OVER.EPF from the game &amp;quot;Overdrive&amp;quot;) contains corrupted files (4X43.MAP and 4X44.MAP), apparently due to a bug in the original compression algorithm when the files were created.  No tools are able to extract these files, and the levels are unplayable in the game (which crashes with an error.)&lt;br /&gt;
&lt;br /&gt;
=== Hidden data ===&lt;br /&gt;
&lt;br /&gt;
Nothing requires the FAT to sit directly after the last file, and because the offset is specified in the header, it is possible to store the FAT much further past the end of the last file.  This can be done to provide a block of data between the end of the last file and the start of the FAT which is effectively hidden, as it does not belong to any file in the archive.&lt;br /&gt;
&lt;br /&gt;
While none of the official files seem to do this, it is nonetheless an interesting possibility.  The Camoto tool makes this space available as a &amp;quot;comment&amp;quot; field.&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
{{BeginFileFormatTools|Type=group}}&lt;br /&gt;
{{FileFormatTool&lt;br /&gt;
| Name = [[Camoto]]&lt;br /&gt;
| Platform = Linux/Windows&lt;br /&gt;
| canExtract = Yes&lt;br /&gt;
| canDecompress = Yes&lt;br /&gt;
| canCreate = Yes&lt;br /&gt;
| canModify = Yes&lt;br /&gt;
| canCompress = No&lt;br /&gt;
| editHidden = Yes&lt;br /&gt;
| editMetadata = N/A&lt;br /&gt;
}}&lt;br /&gt;
{{EndFileFormatTools}}&lt;/div&gt;</summary>
		<author><name>Frenkel</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=ProGraphx_Toolbox_tileset_format&amp;diff=5539</id>
		<title>ProGraphx Toolbox tileset format</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=ProGraphx_Toolbox_tileset_format&amp;diff=5539"/>
		<updated>2014-09-13T14:08:43Z</updated>

		<summary type="html">&lt;p&gt;Frenkel: /* Header */ FBI Fred padding info added&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Tileset Infobox&lt;br /&gt;
 | Hardware1 = EGA&lt;br /&gt;
 | MaxTiles = 255 per subtileset, unlimited subtilesets&lt;br /&gt;
 | Palette = Default EGA&lt;br /&gt;
 | Names = N&lt;br /&gt;
 | TileMinSize = 0&amp;amp;times;0&lt;br /&gt;
 | TileMaxSize = 2040&amp;amp;times;255&lt;br /&gt;
 | NumPlanes = 5&lt;br /&gt;
 | PlaneArrangement = [[Byte-planar EGA]]&lt;br /&gt;
 | HasTransparency = Y&lt;br /&gt;
 | HasHitmap = N&lt;br /&gt;
 | Metadata = None&lt;br /&gt;
 | Subtilesets = Y&lt;br /&gt;
 | Compressed = N&lt;br /&gt;
 | Hidden = N&lt;br /&gt;
 | Game1 = Dark Ages&lt;br /&gt;
 | Game2 = Duke Nukem&lt;br /&gt;
 | Game3 = Crystal Caves&lt;br /&gt;
 | Game4 = FBI Fred&lt;br /&gt;
 | Game5 = Secret Agent&lt;br /&gt;
}}&lt;br /&gt;
This file format is used by the ProGraphx Toolbox to store images used for map tiles in a game.&lt;br /&gt;
__TOC__&lt;br /&gt;
The ProGraphx Toolbox, written by Peder Jungck, is used by the following games:&lt;br /&gt;
&lt;br /&gt;
* [[Dark Ages]] - &amp;lt;tt&amp;gt;DA3.EXE&amp;lt;/tt&amp;gt; contains the string &#039;&#039;Version 1.0 EGA/VGAProGraphx EGA/VGA Toolbox (DA1.EXE and DA2.exe contain gibberish)&#039;&#039;&lt;br /&gt;
* [[Duke Nukem]] - &amp;lt;tt&amp;gt;DN1.EXE&amp;lt;/tt&amp;gt; contains the string &#039;&#039;Version 1.0 EGA/VGAProGraphx EGA/VGA Toolbox&#039;&#039;&lt;br /&gt;
* [[Crystal Caves]] - &amp;lt;tt&amp;gt;CC1.EXE&amp;lt;/tt&amp;gt; contains the string &#039;&#039;Version 1.5 320x200 PAN EGA/VGAProGraphx EGA/VGA Toolbox&#039;&#039;&lt;br /&gt;
* [[FBI Fred]] - &amp;lt;tt&amp;gt;FBIFRED.EXE&amp;lt;/tt&amp;gt; contains the string &#039;&#039;Version 1.5 EGA/VGAProGraphx EGA/VGA Toolbox  (c) 1990&#039;&#039;&lt;br /&gt;
* [[Secret Agent]] - &amp;lt;tt&amp;gt;SAM1.EXE&amp;lt;/tt&amp;gt; contains the string &#039;&#039;ProGraphx EGA/VGA Toolbox Version 2.0 320x200 EGA/VGA Copyright 1991 by Peder Jungck&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== File format ==&lt;br /&gt;
&lt;br /&gt;
The file consists of a number of tilesets one after the other.  Each tileset is made up of a collection of small images (usually 8&amp;amp;times;8 or 16&amp;amp;times;16, but the format supports up to 2040&amp;amp;times;255.)&lt;br /&gt;
&lt;br /&gt;
In &#039;&#039;&#039;Secret Agent&#039;&#039;&#039; the files are encrypted with [[Secret Agent encryption]].   In the other games there is no encryption.&lt;br /&gt;
&lt;br /&gt;
=== Signature ===&lt;br /&gt;
&lt;br /&gt;
There is no signature, however careful processing of the header can be used to check whether the last tileset ends at exactly the end of the file (allowing for padding in some versions of the format.)  If not, it is unlikely to be in this format.  Be careful that files with zero values don&#039;t cause an endless loop when calculating offsets.&lt;br /&gt;
&lt;br /&gt;
=== Header ===&lt;br /&gt;
&lt;br /&gt;
Each tileset begins with the following header.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Data type!!Description&lt;br /&gt;
|-&lt;br /&gt;
|[[BYTE]] count||Number of sprites in this chunk (50 in most cases)&lt;br /&gt;
|-&lt;br /&gt;
|[[BYTE]] width||Sprite width, in bytes (not in pixels)&lt;br /&gt;
|-&lt;br /&gt;
|[[BYTE]] height||Sprite height, in pixels&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The image data for the tileset follows the header.  After the image data either the next header begins, or the file ends.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Dark Ages:&#039;&#039;&#039; Each tileset is padded up to 8064 bytes, except for the last tileset which contains 2 sprites and is padded up to 384 bytes.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Duke Nukem:&#039;&#039;&#039; Each tileset is padded up to 8064 bytes, except for &amp;lt;tt&amp;gt;NUMBERS.DN?&amp;lt;/tt&amp;gt; (7186 bytes) and the backdrop files (&amp;lt;tt&amp;gt;DROP*.DN?&amp;lt;/tt&amp;gt;) which have no padding.  The backdrop files also have all three header bytes set to zero.  For these files, the number of sprites is always 130, the width is always 2 (bytes) and the height is always 16.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Crystal Caves:&#039;&#039;&#039; The file ends after the last tile&#039;s image data, there is no padding.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;FBI Fred:&#039;&#039;&#039; Each tileset is padded up to 8064 bytes, except for the last tileset which contains 23 sprites and is padded up to 3712 bytes.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Secret Agent:&#039;&#039;&#039; Each tileset is padded up to 8064 bytes for 16&amp;amp;times;16 sprite files (&amp;lt;tt&amp;gt;SAM?01.GFX&amp;lt;/tt&amp;gt;), and 2048 bytes for 8&amp;amp;times;8 sprite files (&amp;lt;tt&amp;gt;SAM?02.GFX&amp;lt;/tt&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
For those files with padding at the end, be careful not to interpret the padding as the presence of more tiles.&lt;br /&gt;
&lt;br /&gt;
=== Image data ===&lt;br /&gt;
&lt;br /&gt;
The image data is in [[Byte-planar EGA]] format with five planes, so reading &amp;lt;tt&amp;gt;width &amp;amp;times; height &amp;amp;times; 5&amp;lt;/tt&amp;gt; bytes will read in enough data for a single image (one tile.)  This value multiplied by the number of tiles (&amp;lt;tt&amp;gt;count&amp;lt;/tt&amp;gt;) will yield the number of bytes in the entire tileset, which can be used to skip directly to the next tileset in the file (if any.)&lt;br /&gt;
&lt;br /&gt;
The first byte in each tile&#039;s data is the transparency plane (1 == opaque, 0 == transparent), and the following four bytes/planes are blue, green, red and intensity.  The MSB in each byte (10000000) is the first/left-most pixel, and the eighth pixel is the LSB (00000001).  This means if the bits are processed in a loop, as the X direction increases to the right (0, 1, 2) the bit value decreases (0x80, 0x40, 0x20.)&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
* For at least &#039;&#039;&#039;Duke Nukem&#039;&#039;&#039;, the game seems to ignore the header of &#039;&#039;all&#039;&#039; files in this format.  You can set the entire header of any tileset file to zero values and the game will still load them properly.  This also means that you cannot use larger tilesets without modifying the executable.&lt;br /&gt;
&lt;br /&gt;
== Credits ==&lt;br /&gt;
&lt;br /&gt;
This file format has been reverse engineered by many people over the years.  [[User:K1n9_Duk3|K1n9_Duk3]] discovered that Duke Nukem uses this format.  [[User:Frenkel|Frenkel]] identified the similarities amongst all the games using the file format, and realised they all use the ProGraphx Toolbox.  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>Frenkel</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=ProGraphx_Toolbox_tileset_format&amp;diff=5532</id>
		<title>ProGraphx Toolbox tileset format</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=ProGraphx_Toolbox_tileset_format&amp;diff=5532"/>
		<updated>2014-09-05T22:14:54Z</updated>

		<summary type="html">&lt;p&gt;Frenkel: FBI Fred added, padding info not yet added&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Tileset Infobox&lt;br /&gt;
 | Hardware1 = EGA&lt;br /&gt;
 | MaxTiles = 255 per subtileset, unlimited subtilesets&lt;br /&gt;
 | Palette = Default EGA&lt;br /&gt;
 | Names = N&lt;br /&gt;
 | TileMinSize = 0&amp;amp;times;0&lt;br /&gt;
 | TileMaxSize = 2040&amp;amp;times;255&lt;br /&gt;
 | NumPlanes = 5&lt;br /&gt;
 | PlaneArrangement = [[Byte-planar EGA]]&lt;br /&gt;
 | HasTransparency = Y&lt;br /&gt;
 | HasHitmap = N&lt;br /&gt;
 | Metadata = None&lt;br /&gt;
 | Subtilesets = Y&lt;br /&gt;
 | Compressed = N&lt;br /&gt;
 | Hidden = N&lt;br /&gt;
 | Game1 = Dark Ages&lt;br /&gt;
 | Game2 = Duke Nukem&lt;br /&gt;
 | Game3 = Crystal Caves&lt;br /&gt;
 | Game4 = FBI Fred&lt;br /&gt;
 | Game5 = Secret Agent&lt;br /&gt;
}}&lt;br /&gt;
This file format is used by the ProGraphx Toolbox to store images used for map tiles in a game.&lt;br /&gt;
__TOC__&lt;br /&gt;
The ProGraphx Toolbox, written by Peder Jungck, is used by the following games:&lt;br /&gt;
&lt;br /&gt;
* [[Dark Ages]] - &amp;lt;tt&amp;gt;DA3.EXE&amp;lt;/tt&amp;gt; contains the string &#039;&#039;Version 1.0 EGA/VGAProGraphx EGA/VGA Toolbox (DA1.EXE and DA2.exe contain gibberish)&#039;&#039;&lt;br /&gt;
* [[Duke Nukem]] - &amp;lt;tt&amp;gt;DN1.EXE&amp;lt;/tt&amp;gt; contains the string &#039;&#039;Version 1.0 EGA/VGAProGraphx EGA/VGA Toolbox&#039;&#039;&lt;br /&gt;
* [[Crystal Caves]] - &amp;lt;tt&amp;gt;CC1.EXE&amp;lt;/tt&amp;gt; contains the string &#039;&#039;Version 1.5 320x200 PAN EGA/VGAProGraphx EGA/VGA Toolbox&#039;&#039;&lt;br /&gt;
* [[FBI Fred]] - &amp;lt;tt&amp;gt;FBIFRED.EXE&amp;lt;/tt&amp;gt; contains the string &#039;&#039;Version 1.5 EGA/VGAProGraphx EGA/VGA Toolbox  (c) 1990&#039;&#039;&lt;br /&gt;
* [[Secret Agent]] - &amp;lt;tt&amp;gt;SAM1.EXE&amp;lt;/tt&amp;gt; contains the string &#039;&#039;ProGraphx EGA/VGA Toolbox Version 2.0 320x200 EGA/VGA Copyright 1991 by Peder Jungck&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== File format ==&lt;br /&gt;
&lt;br /&gt;
The file consists of a number of tilesets one after the other.  Each tileset is made up of a collection of small images (usually 8&amp;amp;times;8 or 16&amp;amp;times;16, but the format supports up to 2040&amp;amp;times;255.)&lt;br /&gt;
&lt;br /&gt;
In &#039;&#039;&#039;Secret Agent&#039;&#039;&#039; the files are encrypted with [[Secret Agent encryption]].   In the other games there is no encryption.&lt;br /&gt;
&lt;br /&gt;
=== Signature ===&lt;br /&gt;
&lt;br /&gt;
There is no signature, however careful processing of the header can be used to check whether the last tileset ends at exactly the end of the file (allowing for padding in some versions of the format.)  If not, it is unlikely to be in this format.  Be careful that files with zero values don&#039;t cause an endless loop when calculating offsets.&lt;br /&gt;
&lt;br /&gt;
=== Header ===&lt;br /&gt;
&lt;br /&gt;
Each tileset begins with the following header.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Data type!!Description&lt;br /&gt;
|-&lt;br /&gt;
|[[BYTE]] count||Number of sprites in this chunk (50 in most cases)&lt;br /&gt;
|-&lt;br /&gt;
|[[BYTE]] width||Sprite width, in bytes (not in pixels)&lt;br /&gt;
|-&lt;br /&gt;
|[[BYTE]] height||Sprite height, in pixels&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The image data for the tileset follows the header.  After the image data either the next header begins, or the file ends.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Dark Ages:&#039;&#039;&#039; Each tileset is padded up to 8064 bytes, except for the last tileset which contains 2 sprites and is padded up to 384 bytes.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Duke Nukem:&#039;&#039;&#039; Each tileset is padded up to 8064 bytes, except for &amp;lt;tt&amp;gt;NUMBERS.DN?&amp;lt;/tt&amp;gt; (7186 bytes) and the backdrop files (&amp;lt;tt&amp;gt;DROP*.DN?&amp;lt;/tt&amp;gt;) which have no padding.  The backdrop files also have all three header bytes set to zero.  For these files, the number of sprites is always 130, the width is always 2 (bytes) and the height is always 16.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Crystal Caves:&#039;&#039;&#039; The file ends after the last tile&#039;s image data, there is no padding.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Secret Agent:&#039;&#039;&#039; Each tileset is padded up to 8064 bytes for 16&amp;amp;times;16 sprite files (&amp;lt;tt&amp;gt;SAM?01.GFX&amp;lt;/tt&amp;gt;), and 2048 bytes for 8&amp;amp;times;8 sprite files (&amp;lt;tt&amp;gt;SAM?02.GFX&amp;lt;/tt&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
For those files with padding at the end, be careful not to interpret the padding as the presence of more tiles.&lt;br /&gt;
&lt;br /&gt;
=== Image data ===&lt;br /&gt;
&lt;br /&gt;
The image data is in [[Byte-planar EGA]] format with five planes, so reading &amp;lt;tt&amp;gt;width &amp;amp;times; height &amp;amp;times; 5&amp;lt;/tt&amp;gt; bytes will read in enough data for a single image (one tile.)  This value multiplied by the number of tiles (&amp;lt;tt&amp;gt;count&amp;lt;/tt&amp;gt;) will yield the number of bytes in the entire tileset, which can be used to skip directly to the next tileset in the file (if any.)&lt;br /&gt;
&lt;br /&gt;
The first byte in each tile&#039;s data is the transparency plane (1 == opaque, 0 == transparent), and the following four bytes/planes are blue, green, red and intensity.  The MSB in each byte (10000000) is the first/left-most pixel, and the eighth pixel is the LSB (00000001).  This means if the bits are processed in a loop, as the X direction increases to the right (0, 1, 2) the bit value decreases (0x80, 0x40, 0x20.)&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
* For at least &#039;&#039;&#039;Duke Nukem&#039;&#039;&#039;, the game seems to ignore the header of &#039;&#039;all&#039;&#039; files in this format.  You can set the entire header of any tileset file to zero values and the game will still load them properly.  This also means that you cannot use larger tilesets without modifying the executable.&lt;br /&gt;
&lt;br /&gt;
== Credits ==&lt;br /&gt;
&lt;br /&gt;
This file format has been reverse engineered by many people over the years.  [[User:K1n9_Duk3|K1n9_Duk3]] discovered that Duke Nukem uses this format.  [[User:Frenkel|Frenkel]] identified the similarities amongst all the games using the file format, and realised they all use the ProGraphx Toolbox.  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>Frenkel</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Category_talk:Sparse_archives&amp;diff=5245</id>
		<title>Category talk:Sparse archives</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Category_talk:Sparse_archives&amp;diff=5245"/>
		<updated>2014-06-29T20:04:47Z</updated>

		<summary type="html">&lt;p&gt;Frenkel: question about location of hidden data&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The description of this category starts with&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This category lists all archive formats that can have data hidden in between consecutive files, without affecting use of the archive.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Should [[Legend of Seven Paladins 3D Archive Format]] be in this category? It can&#039;t store hidden data between consecutive files, but it can store hidden data between the header and the actual archived files, I think. [[User:Frenkel|Frenkel]] ([[User talk:Frenkel|talk]]) 20:04, 29 June 2014 (GMT)&lt;/div&gt;</summary>
		<author><name>Frenkel</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Legend_of_Seven_Paladins_3D_Archive_Format&amp;diff=5244</id>
		<title>Legend of Seven Paladins 3D Archive Format</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Legend_of_Seven_Paladins_3D_Archive_Format&amp;diff=5244"/>
		<updated>2014-06-29T19:57:30Z</updated>

		<summary type="html">&lt;p&gt;Frenkel: Created page with &amp;quot;{{Archive Infobox  | MaxFiles = less than 4,294,967,296  | FAT = Beginning  | Names = N  | Metadata = None  | Subdirectories = N  | Compressed = N  | Encrypted = N  | Hidden =...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Archive Infobox&lt;br /&gt;
 | MaxFiles = less than 4,294,967,296&lt;br /&gt;
 | FAT = Beginning&lt;br /&gt;
 | Names = N&lt;br /&gt;
 | Metadata = None&lt;br /&gt;
 | Subdirectories = N&lt;br /&gt;
 | Compressed = N&lt;br /&gt;
 | Encrypted = N&lt;br /&gt;
 | Hidden = Y&lt;br /&gt;
 | Game1 = Legend of Seven Paladins 3D&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;Legend of Seven Paladins 3D Archive Format&#039;&#039;&#039; is one of the more efficient archives in that it only stores file offsets in the headers, and the file sizes must be calculated from these. It doesn&#039;t store filenames.&lt;br /&gt;
&lt;br /&gt;
== File format ==&lt;br /&gt;
&lt;br /&gt;
The file starts with a [[UINT32LE]] representing the offset of the first file in the archive. Then comes a [[UINT32LE]] representing the offset of the second file, etc. Until a [[UINT32LE]] comes along who&#039;s value is the same as the file size of the archive.&lt;br /&gt;
Between these offsets and the actual data of the first file, there is room for hidden data.&lt;br /&gt;
&lt;br /&gt;
The size of a file must be calculated from the offset of the next file minus its own offset.&lt;br /&gt;
&lt;br /&gt;
This archive doesn&#039;t store filenames, so it&#039;s impossible to determine the file formats of the archived files by looking at the filename extension. Luckily, all file formats of the files in the officially released archives can be determined by looking at the first byte of each file:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! First byte !! File format&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&amp;lt;br /&amp;gt; 0x1f&lt;br /&gt;
| 6-bit [[VGA Palette]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| [[Build-engine Map Format]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0a&lt;br /&gt;
| [[PCX Format]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x43&lt;br /&gt;
| [[VOC Format]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4d&lt;br /&gt;
| [[MID Format]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
{{BeginFileFormatTools|Type=group}}&lt;br /&gt;
{{FileFormatTool&lt;br /&gt;
| Name = [http://sfprod.shikadi.net/old/games/lotsp.htm#extractor Lotspe]&lt;br /&gt;
| Platform = DOS&lt;br /&gt;
| canExtract = Yes&lt;br /&gt;
| canDecompress = N/A&lt;br /&gt;
| canCreate = No&lt;br /&gt;
| canModify = No&lt;br /&gt;
| canCompress = N/A&lt;br /&gt;
| editHidden = No&lt;br /&gt;
| editMetadata = N/A&lt;br /&gt;
}}&lt;br /&gt;
{{EndFileFormatTools}}&lt;br /&gt;
&lt;br /&gt;
== Credits ==&lt;br /&gt;
&lt;br /&gt;
This file format was reverse engineered by [[User:Frenkel|Frenkel]].  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>Frenkel</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Legend_of_Seven_Paladins_3D&amp;diff=5243</id>
		<title>Legend of Seven Paladins 3D</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Legend_of_Seven_Paladins_3D&amp;diff=5243"/>
		<updated>2014-06-29T16:45:17Z</updated>

		<summary type="html">&lt;p&gt;Frenkel: Use new file format list template&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Stub}}&lt;br /&gt;
&lt;br /&gt;
{{Game Infobox&lt;br /&gt;
 | Levels = No&lt;br /&gt;
 | Tiles = No&lt;br /&gt;
 | Sprites = No&lt;br /&gt;
 | Fullscreen = No&lt;br /&gt;
 | Sound = No&lt;br /&gt;
 | Music = No&lt;br /&gt;
 | Text = No&lt;br /&gt;
 | Story = No&lt;br /&gt;
 | Interface = No&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Legend of Seven Paladins 3D]] is a first-person shooter and it&#039;s the first commercially released game that uses the [[:Category:Build engine|Build engine]].&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
{{BeginFileFormatTools|Type=game}}&lt;br /&gt;
{{FileFormatTool&lt;br /&gt;
| Name = [http://sfprod.shikadi.net/old/games/lotsp.htm#extractor Lotspe]&lt;br /&gt;
| Platform = DOS&lt;br /&gt;
| grp = Read&lt;br /&gt;
| map = No&lt;br /&gt;
| gfx = No&lt;br /&gt;
| mus = No&lt;br /&gt;
| sfx = No&lt;br /&gt;
| txt = No&lt;br /&gt;
| sav = No&lt;br /&gt;
| exe = No&lt;br /&gt;
}}&lt;br /&gt;
{{EndFileFormatTools}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{BeginGameFileList}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = 75m.exe&amp;lt;br /&amp;gt;75t.exe&amp;lt;br /&amp;gt;laart000.dat&amp;lt;br /&amp;gt;ltart000.dat&lt;br /&gt;
 | Format = [[EXE format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Executables&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = l0art000.dat&amp;lt;br /&amp;gt;l1art000.dat&lt;br /&gt;
 | Format = [[ART Format (Build)]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Level textures and sprites&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = lcart000.dat&amp;lt;br /&amp;gt;lfart000.dat&amp;lt;br /&amp;gt;lgart000.dat&lt;br /&gt;
 | Format = [[FLIC Format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Animations&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = lmart000.dat&amp;lt;br /&amp;gt;lvart000.dat&lt;br /&gt;
 | Format = [[Legend of Seven Paladins 3D Archive Format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Archive storing most of the game&#039;s data files&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = palette.dat&lt;br /&gt;
 | Format = [[Palette Format (Build)]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Palettes, palettes swaps, shade and translucency (blending) tables&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = setup.dat&lt;br /&gt;
 | Format = [[Legend of Seven Paladins 3D Settings Format]]&lt;br /&gt;
 | KnownFormat = No&lt;br /&gt;
 | Desc = Game settings&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = tables.dat&lt;br /&gt;
 | Format = [[Tables Format (Build)]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Tables for sin, atn, large font, small font, gamma correction&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.map&lt;br /&gt;
 | Format = [[Build-engine Map Format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Game levels&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.mid&lt;br /&gt;
 | Format = [[MID Format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Background music&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.pal&lt;br /&gt;
 | Format = [[VGA Palette]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = 6-bit VGA Palette&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.pcx&lt;br /&gt;
 | Format = [[PCX Format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Full-screen images&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.voc&lt;br /&gt;
 | Format = [[VOC Format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Sound effects&lt;br /&gt;
}}&lt;br /&gt;
{{EndGameFileList}}&lt;br /&gt;
&lt;br /&gt;
[[Category:3D]]&lt;br /&gt;
[[Category:First-Person Shooter]]&lt;br /&gt;
[[Category:Build engine]]&lt;/div&gt;</summary>
		<author><name>Frenkel</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=File:Legend_of_Seven_Paladins_3D.png&amp;diff=5230</id>
		<title>File:Legend of Seven Paladins 3D.png</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=File:Legend_of_Seven_Paladins_3D.png&amp;diff=5230"/>
		<updated>2014-06-15T15:45:37Z</updated>

		<summary type="html">&lt;p&gt;Frenkel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Legend of Seven Paladins 3D]] title screen&lt;br /&gt;
&lt;br /&gt;
[[Category:Game Title Screens]]&lt;/div&gt;</summary>
		<author><name>Frenkel</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Category:Legend_of_Seven_Paladins_3D&amp;diff=5228</id>
		<title>Category:Legend of Seven Paladins 3D</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Category:Legend_of_Seven_Paladins_3D&amp;diff=5228"/>
		<updated>2014-06-15T09:27:16Z</updated>

		<summary type="html">&lt;p&gt;Frenkel: Created page with &amp;quot;{{GameCategory}}&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{GameCategory}}&lt;/div&gt;</summary>
		<author><name>Frenkel</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=File:Legend_of_Seven_Paladins_3D.png&amp;diff=5227</id>
		<title>File:Legend of Seven Paladins 3D.png</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=File:Legend_of_Seven_Paladins_3D.png&amp;diff=5227"/>
		<updated>2014-06-15T09:25:27Z</updated>

		<summary type="html">&lt;p&gt;Frenkel: Legend of Seven Paladins 3D title screen&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Legend of Seven Paladins 3D]] title screen&lt;/div&gt;</summary>
		<author><name>Frenkel</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Legend_of_Seven_Paladins_3D&amp;diff=5226</id>
		<title>Legend of Seven Paladins 3D</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Legend_of_Seven_Paladins_3D&amp;diff=5226"/>
		<updated>2014-06-15T09:18:53Z</updated>

		<summary type="html">&lt;p&gt;Frenkel: Created new page for Legend of Seven Paladins 3D&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Stub}}&lt;br /&gt;
&lt;br /&gt;
{{Game Infobox&lt;br /&gt;
 | Levels = No&lt;br /&gt;
 | Tiles = No&lt;br /&gt;
 | Sprites = No&lt;br /&gt;
 | Fullscreen = No&lt;br /&gt;
 | Sound = No&lt;br /&gt;
 | Music = No&lt;br /&gt;
 | Text = No&lt;br /&gt;
 | Story = No&lt;br /&gt;
 | Interface = No&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Legend of Seven Paladins 3D]] is a first-person shooter and it&#039;s the first commercially released game that uses the [[:Category:Build engine|Build engine]].&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
{{BeginFileFormatTools|Type=game}}&lt;br /&gt;
{{FileFormatTool&lt;br /&gt;
| Name = [http://sfprod.shikadi.net/old/games/lotsp.htm#extractor Lotspe]&lt;br /&gt;
| Platform = DOS&lt;br /&gt;
| grp = Read&lt;br /&gt;
| map = No&lt;br /&gt;
| gfx = No&lt;br /&gt;
| mus = No&lt;br /&gt;
| sfx = No&lt;br /&gt;
| txt = No&lt;br /&gt;
| sav = No&lt;br /&gt;
| exe = No&lt;br /&gt;
}}&lt;br /&gt;
{{EndFileFormatTools}}&lt;br /&gt;
&lt;br /&gt;
== File formats ==&lt;br /&gt;
&lt;br /&gt;
This section lists the files and its formats used in the game.&lt;br /&gt;
&lt;br /&gt;
=== Standalone files ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! File name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;75m.exe&amp;lt;/tt&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;tt&amp;gt;75t.exe&amp;lt;/tt&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;tt&amp;gt;laart000.dat&amp;lt;/tt&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;tt&amp;gt;ltart000.dat&amp;lt;/tt&amp;gt;&lt;br /&gt;
| style=&amp;quot;background: #FFCCCC;&amp;quot; | [[EXE Format]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;l0art000.dat&amp;lt;/tt&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;tt&amp;gt;l1art000.dat&amp;lt;/tt&amp;gt;&lt;br /&gt;
| style=&amp;quot;background: #CCFFCC;&amp;quot; | Game graphics in [[ART Format (Build)|ART Format]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;lcart000.dat&amp;lt;/tt&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;tt&amp;gt;lfart000.dat&amp;lt;/tt&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;tt&amp;gt;lgart000.dat&amp;lt;/tt&amp;gt;&lt;br /&gt;
| style=&amp;quot;background: #CCFFCC;&amp;quot; | Animations in [[Duke Nukem II Animation Format]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;lmart000.dat&amp;lt;/tt&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;tt&amp;gt;lvart000.dat&amp;lt;/tt&amp;gt;&lt;br /&gt;
| style=&amp;quot;background: #FFFFCC;&amp;quot; | Group file storing most of the game data in [[Legend of Seven Paladins 3D Group Format]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;palette.dat&amp;lt;/tt&amp;gt;&lt;br /&gt;
| style=&amp;quot;background: #FFCCCC;&amp;quot; | Palettes, palettes swaps, shade and translucency (blending) tables.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;setup.dat&amp;lt;/tt&amp;gt;&lt;br /&gt;
| style=&amp;quot;background: #FFCCCC;&amp;quot; | Game settings.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;tables.dat&amp;lt;/tt&amp;gt;&lt;br /&gt;
| style=&amp;quot;background: #FFCCCC;&amp;quot; | Tables for sin, atn, large font, small font, gamma correction.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Files inside lmart000.dat ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! File name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;*.map&amp;lt;/tt&amp;gt;&lt;br /&gt;
| style=&amp;quot;background: #FFFFCC;&amp;quot; | Game levels in [[Map Format (Build)|Map Format]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Files inside lvart000.dat ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! File name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;*.mid&amp;lt;/tt&amp;gt;&lt;br /&gt;
| style=&amp;quot;background: #CCFFCC;&amp;quot; | Game music in [[MID Format]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;*.pal&amp;lt;/tt&amp;gt;&lt;br /&gt;
| style=&amp;quot;background: #CCFFCC;&amp;quot; | 6-bit [[VGA Palette]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;*.pcx&amp;lt;/tt&amp;gt;&lt;br /&gt;
| style=&amp;quot;background: #CCFFCC;&amp;quot; | Full-screen images in [[PCX Format]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;*.voc&amp;lt;/tt&amp;gt;&lt;br /&gt;
| style=&amp;quot;background: #CCFFCC;&amp;quot; | Game sounds in [[VOC Format]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:3D]]&lt;br /&gt;
[[Category:First-Person Shooter]]&lt;br /&gt;
[[Category:Build engine]]&lt;/div&gt;</summary>
		<author><name>Frenkel</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Catacomb_3-D&amp;diff=5218</id>
		<title>Catacomb 3-D</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Catacomb_3-D&amp;diff=5218"/>
		<updated>2014-06-06T21:06:34Z</updated>

		<summary type="html">&lt;p&gt;Frenkel: Source code released&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Stub}}&lt;br /&gt;
{{Game Infobox&lt;br /&gt;
 | Levels = No&lt;br /&gt;
 | Tiles = No&lt;br /&gt;
 | Sprites = No&lt;br /&gt;
 | Fullscreen = No&lt;br /&gt;
 | Sound = No&lt;br /&gt;
 | Music = No&lt;br /&gt;
 | Text = No&lt;br /&gt;
 | Story = No&lt;br /&gt;
 | Interface = No&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Catacomb 3D is one of [[ID Software]]&#039;s earliest attempts at a 3D game. It utilizes the [[Commander Keen 4-6]] engine, though with radically altered graphics.&lt;br /&gt;
&lt;br /&gt;
The game is severely cut down, with limited sound effects, one music track and few graphics. The game has no storyline as such, the player wanders through various interconnected levels acquiring scrolls that further the story and provide hints. The relation of this game to others in the Catacomb series is not known.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== File formats ==&lt;br /&gt;
&lt;br /&gt;
* [[AudioT Format]] - used for storing sound and music data&lt;br /&gt;
* [[EGAGraph Format]] - used for storing graphics, text and miscellaneous data&lt;br /&gt;
* [[GameMaps Format]] - used for storing level maps&lt;br /&gt;
* [[IMF Format]] - actual music is in IMF&lt;br /&gt;
* [[B800 Text]] - there are a couple of text screens in the main .EXE file (including the text displayed on the screen when you quit)&lt;br /&gt;
&lt;br /&gt;
In addition the .EXE is compressed with [[LZEXE]], graphics and sounds are compressed using [[Huffman Compression]], and levels using [[RLE compression]] and Carmackization.&lt;br /&gt;
&lt;br /&gt;
== Map Format ==&lt;br /&gt;
&lt;br /&gt;
The maps use the [[GameMaps Format]].  Plane 0 defines the structure of the map and also certain specials, while Plane 2 is used for items, monsters and other interactive objects.  Values over 255 are never used in either plane.  Catacomb Abyss, Armageddon and Apocalypse are sometimes similar, but use a slightly more complicated system for locked doors, exploding walls and the like, so they must be treated separately.  The map sizes can vary, but 40x28 is quite common.&lt;br /&gt;
&lt;br /&gt;
Plane 0 Walls:&lt;br /&gt;
* 0x00 01: Rough Grey Block Wall&lt;br /&gt;
* 0x00 02: Slimy Brick Wall&lt;br /&gt;
* 0x00 03: Plain Light Brick Wall&lt;br /&gt;
* 0x00 04: Slimy Brick Wall + Blood&lt;br /&gt;
* 0x00 05: Tar Wall&lt;br /&gt;
* 0x00 06: Gold Brick Wall&lt;br /&gt;
* 0x00 07: Hellish Wall&lt;br /&gt;
* 0x00 08: Rough Grey Block Wall (Explodable)&lt;br /&gt;
* 0x00 09: Slimy Brick Wall (Explodable)&lt;br /&gt;
* 0x00 0A: Plain Light Brick Wall (Explodable)&lt;br /&gt;
* 0x00 0B: Slimy Brick Wall + Blood (Explodable)&lt;br /&gt;
* 0x00 0C: Tar Wall (Explodable)&lt;br /&gt;
* 0x00 0D: Gold Brick Wall (Explodable)&lt;br /&gt;
* 0x00 0E: Hellish Wall (Explodable)&lt;br /&gt;
&lt;br /&gt;
Plane 0 Doors:&lt;br /&gt;
* 0x00 14: Red Door&lt;br /&gt;
* 0x00 18: Yellow Door&lt;br /&gt;
* 0x00 1C: Green Door&lt;br /&gt;
* 0x00 20: Blue Door&lt;br /&gt;
&lt;br /&gt;
Plane 0 Floors:&lt;br /&gt;
Different floors have two uses: to define which area text to use, and, when placed under a plane 2 portal tile, to tell the game what level the portal should go to, starting at &amp;quot;Floor A&amp;quot; for level 1.  &amp;quot;Floor I&amp;quot; under a portal, for instance, makes that portal take the player to level 9.  A &amp;quot;No Text&amp;quot; floor under a portal makes that portal go to the next level in sequence.  Floors can presumably go up to Z, but no stock map uses that many area messages nor are there that many levels in the stock game.&lt;br /&gt;
* 0x00 B4: Floor (No text)&lt;br /&gt;
* 0x00 B5: Floor A&lt;br /&gt;
* 0x00 B6: Floor B&lt;br /&gt;
* 0x00 B7: Floor C&lt;br /&gt;
* 0x00 B8: Floor D&lt;br /&gt;
* 0x00 B9: Floor E&lt;br /&gt;
* 0x00 BA: Floor F&lt;br /&gt;
* 0x00 BB: Floor G&lt;br /&gt;
* 0x00 BC: Floor H&lt;br /&gt;
* 0x00 BD: Floor I&lt;br /&gt;
* 0x00 BE: Floor J&lt;br /&gt;
* 0x00 BF: Floor K&lt;br /&gt;
* 0x00 C0: Floor L&lt;br /&gt;
* 0x00 C1: Floor M&lt;br /&gt;
* 0x00 C2: Floor N&lt;br /&gt;
* 0x00 C3: Floor O&lt;br /&gt;
* 0x00 C4: Floor P&lt;br /&gt;
* 0x00 C5: Floor Q&lt;br /&gt;
&lt;br /&gt;
Plane 2 Player start positions:&lt;br /&gt;
* 0x00 01: Player Start (North)&lt;br /&gt;
* 0x00 02: Player Start (East)&lt;br /&gt;
* 0x00 03: Player Start (South)&lt;br /&gt;
* 0x00 04: Player Start (West)&lt;br /&gt;
&lt;br /&gt;
Plane 2 Items:&lt;br /&gt;
* 0x00 05: Bolt&lt;br /&gt;
* 0x00 06: Nuke&lt;br /&gt;
* 0x00 07: Healing potion&lt;br /&gt;
* 0x00 08: Red Key&lt;br /&gt;
* 0x00 09: Yellow Key&lt;br /&gt;
* 0x00 0A: Green Key&lt;br /&gt;
* 0x00 0B: Blue Key&lt;br /&gt;
* 0x00 0C: Scroll #1&lt;br /&gt;
* 0x00 0D: Scroll #2&lt;br /&gt;
* 0x00 0E: Scroll #3&lt;br /&gt;
* 0x00 0F: Scroll #4&lt;br /&gt;
* 0x00 10: Scroll #5&lt;br /&gt;
* 0x00 11: Scroll #6&lt;br /&gt;
* 0x00 12: Scroll #7&lt;br /&gt;
* 0x00 13: Scroll #8&lt;br /&gt;
* 0x00 14: Grelminar (Ends game when &amp;quot;taken&amp;quot;)&lt;br /&gt;
* 0x00 15: Treasure Chest (Bonus points)&lt;br /&gt;
&lt;br /&gt;
Plane 2 monsters and other stuff:&lt;br /&gt;
These monster tiles appear on all skill levels.&lt;br /&gt;
* 0x00 16: Troll&lt;br /&gt;
* 0x00 17: Orc&lt;br /&gt;
* 0x00 18: Portal to another level (See notes in Plane 0 Floors section)&lt;br /&gt;
* 0x00 19: Bat&lt;br /&gt;
* 0x00 1A: Demon&lt;br /&gt;
* 0x00 1B: Mage&lt;br /&gt;
* 0x00 1C: Nemesis&lt;br /&gt;
* 0x00 1D: Bouncy Fireball (North-South)&lt;br /&gt;
* 0x00 1E: Bouncy Fireball (East-West)&lt;br /&gt;
&lt;br /&gt;
Plane 2 teleports:&lt;br /&gt;
Teleports swap player between one and the other of the same type within one level.  For instance, entering a Teleport A object sends the player to another Teleport A.  They need open space around them, or the player can get stuck!&lt;br /&gt;
* 0x00 1F: Teleport A&lt;br /&gt;
* 0x00 20: Teleport B&lt;br /&gt;
* 0x00 21: Teleport C&lt;br /&gt;
&lt;br /&gt;
Plane 2 monsters:&lt;br /&gt;
These appear only on certain skill levels.&lt;br /&gt;
* 0x00 24: Troll (Normal/Hard)&lt;br /&gt;
* 0x00 25: Orc (Normal/Hard)&lt;br /&gt;
* 0x00 26: Bat (Normal/Hard)&lt;br /&gt;
* 0x00 27: Demon (Normal/Hard)&lt;br /&gt;
* 0x00 28: Mage (Normal/Hard)&lt;br /&gt;
* 0x00 29: Troll (Hard mode only)&lt;br /&gt;
* 0x00 2A: Orc (Hard mode only)&lt;br /&gt;
* 0x00 2B: Bat (Hard mode only)&lt;br /&gt;
* 0x00 2C: Demon (Hard mode only)&lt;br /&gt;
* 0x00 2D: Mage (Hard mode only)&lt;br /&gt;
&lt;br /&gt;
== Source code ==&lt;br /&gt;
The source code of this game was released by Flat Rock Software on June 6, 2014. It can be downloaded from [http://github.com/FlatRockSoft/Catacomb3D GitHub]. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:id Software]]&lt;br /&gt;
[[Category:Softdisk]]&lt;/div&gt;</summary>
		<author><name>Frenkel</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Hovertank_3-D&amp;diff=5217</id>
		<title>Hovertank 3-D</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Hovertank_3-D&amp;diff=5217"/>
		<updated>2014-06-06T21:03:55Z</updated>

		<summary type="html">&lt;p&gt;Frenkel: Source code released&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{NeedMoreInfo}}&lt;br /&gt;
{{Game Infobox&lt;br /&gt;
 | Levels = No&lt;br /&gt;
 | Tiles = No&lt;br /&gt;
 | Sprites = No&lt;br /&gt;
 | Fullscreen = No&lt;br /&gt;
 | Sound = No&lt;br /&gt;
 | Music = No&lt;br /&gt;
 | Text = No&lt;br /&gt;
 | Story = No&lt;br /&gt;
 | Interface = No&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hovertank 3-D&#039;&#039;&#039; is one of the first FPS games and the direct ancestor of most FPS games.  It has EGA graphics with no textures, but with scaled sprites. Like the later [[Wolfenstein 3D]], this game includes different brightnesses of the same tile when viewed from the N/S or E/W.&lt;br /&gt;
&lt;br /&gt;
It was followed by [[Catacomb 3D]], which added textures.&lt;br /&gt;
&lt;br /&gt;
== File formats ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!File name!!Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;levelXX.hov&amp;lt;/tt&amp;gt;&lt;br /&gt;
| style=&amp;quot;background: #CCFFCC;&amp;quot; | Game levels in [[Commander Keen 1-3 Level format]].  They use [[RLEW compression]] with the tag $FEFE.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;sounds.hov&amp;lt;/tt&amp;gt;&lt;br /&gt;
| style=&amp;quot;background: #CCFFCC;&amp;quot; | PC speaker sounds in [[Inverse Frequency Sound format]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;dsound.hov&amp;lt;/tt&amp;gt;&lt;br /&gt;
| style=&amp;quot;background: #FFFFCC;&amp;quot; | Digitised sounds (see below)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Digitised sounds ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;dsound.hov&amp;lt;/tt&amp;gt; begins with the following structure repeated once for each sound in the file.&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;
| [[UINT32LE]] || offset || Offset of sound data from start of file&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT32LE]] || length || Length of sound data in bytes&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT32LE]] || samplerate? || Possibly the sample rate of the sound&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || flags || See [[Inverse Frequency Sound format]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The sound data immediately follows.  The offset of the first file can be used to discover the number of sounds in the file (either by reading the header up until this point, or dividing the first file&#039;s offset by 14.)&lt;br /&gt;
&lt;br /&gt;
== Source code ==&lt;br /&gt;
The source code of this game was released by Flat Rock Software on June 4, 2014. It can be downloaded from [http://github.com/FlatRockSoft/Hovertank3D GitHub].&lt;/div&gt;</summary>
		<author><name>Frenkel</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Catacomb_II&amp;diff=5216</id>
		<title>Catacomb II</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Catacomb_II&amp;diff=5216"/>
		<updated>2014-06-06T21:01:18Z</updated>

		<summary type="html">&lt;p&gt;Frenkel: Source code released&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Stub}}&lt;br /&gt;
{{Game Infobox&lt;br /&gt;
 | Levels = No&lt;br /&gt;
 | Tiles = Edit&lt;br /&gt;
 | Sprites = No&lt;br /&gt;
 | Fullscreen = No&lt;br /&gt;
 | Sound = No&lt;br /&gt;
 | Music = None&lt;br /&gt;
 | Text = No&lt;br /&gt;
 | Story = None&lt;br /&gt;
 | Interface = No&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Catacomb II&#039;&#039;&#039; is a top-down Gauntlet-style shooter, following on from [[Catacomb]].  It was later renamed to &#039;&#039;The Catacomb&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
{{BeginFileFormatTools|Type=game}}&lt;br /&gt;
{{FileFormatTool&lt;br /&gt;
| Name = [[Camoto]]&lt;br /&gt;
| Platform = Linux/Windows&lt;br /&gt;
| grp = N/A&lt;br /&gt;
| map = No&lt;br /&gt;
| gfx = Tileset&lt;br /&gt;
| mus = N/A&lt;br /&gt;
| sfx = No&lt;br /&gt;
| txt = No&lt;br /&gt;
| sav = No&lt;br /&gt;
| exe = No&lt;br /&gt;
}}&lt;br /&gt;
{{EndFileFormatTools}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
== File formats ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!File name!!Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;LEVEL#.CA2&amp;lt;/tt&amp;gt;&lt;br /&gt;
| style=&amp;quot;background: #CCFFCC;&amp;quot; | Game levels in [[Catacomb Map Format]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;SCORES.CA2&amp;lt;/tt&amp;gt;&lt;br /&gt;
| style=&amp;quot;background: #CCFFCC;&amp;quot; | High scores in [[Catacomb Highscore Format]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;GAME#.CA2&amp;lt;/tt&amp;gt;&lt;br /&gt;
| style=&amp;quot;background: #FFFFCC;&amp;quot; | Saved games in [[Catacomb Savegame Format]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;SOUNDS.CA2&amp;lt;/tt&amp;gt;&lt;br /&gt;
| style=&amp;quot;background: #CCFFCC;&amp;quot; | PC speaker sounds in [[Inverse Frequency Sound format]]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;EGACHARS.CA2&amp;lt;/tt&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;tt&amp;gt;CGACHARS.CA2&amp;lt;/tt&amp;gt;&lt;br /&gt;
| style=&amp;quot;background: #CCFFCC;&amp;quot; | Tile graphics for levels in [[xGAChars Format]]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;EGAPICS.CA2&amp;lt;/tt&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;tt&amp;gt;CGAPICS.CA2&amp;lt;/tt&amp;gt;&lt;br /&gt;
| style=&amp;quot;background: #CCFFCC;&amp;quot; | Other graphics in [[DDiCI_Graphics_format|xGAPics Format]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Source code ==&lt;br /&gt;
The source code of this game was released by Flat Rock Software on June 6, 2014. It can be downloaded from [http://github.com/FlatRockSoft/TheCatacomb GitHub]. &lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* More detail at [[Catacomb]], which shares the same engine.&lt;br /&gt;
&lt;br /&gt;
[[Category:Softdisk]]&lt;/div&gt;</summary>
		<author><name>Frenkel</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Catacomb&amp;diff=5215</id>
		<title>Catacomb</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Catacomb&amp;diff=5215"/>
		<updated>2014-06-06T20:59:50Z</updated>

		<summary type="html">&lt;p&gt;Frenkel: Source code released&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Game Infobox&lt;br /&gt;
 | Levels = No&lt;br /&gt;
 | Tiles = Edit&lt;br /&gt;
 | Sprites = No&lt;br /&gt;
 | Fullscreen = No&lt;br /&gt;
 | Sound = No&lt;br /&gt;
 | Music = None&lt;br /&gt;
 | Text = No&lt;br /&gt;
 | Story = None&lt;br /&gt;
 | Interface = No&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Catacomb&#039;&#039;&#039; and [[Catacomb II]] are top-down Gauntlet-style shooters. They are two of ID software&#039;s earliest games.&lt;br /&gt;
They are the direct ancestors of most First Person Shooters. They introduced strafing. &lt;br /&gt;
&lt;br /&gt;
Catacomb was distributed on the same Gamer&#039;s Edge disk as [[Dangerous Dave]].&lt;br /&gt;
&lt;br /&gt;
They are part of series of 6 games, in two trilogies:&lt;br /&gt;
* Catacomb I&lt;br /&gt;
* [[Catacomb II]]&lt;br /&gt;
* [[Catacomb 3-D]]&lt;br /&gt;
* [[Catacomb Abyss]]&lt;br /&gt;
* [[Catacomb Armageddon]]&lt;br /&gt;
* [[Catacomb Apocalypse]]&lt;br /&gt;
&lt;br /&gt;
It evolved like this: [[Catacomb]] + [[Hovertank]] -&amp;gt; [[Catacomb 3-D]] -&amp;gt; [[Catacomb Abyss]] -&amp;gt; [[Wolfenstein 3-D]] -&amp;gt; [[Doom]] -&amp;gt; [[Quake]]&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
{{BeginFileFormatTools|Type=game}}&lt;br /&gt;
{{FileFormatTool&lt;br /&gt;
| Name = [[Camoto]]&lt;br /&gt;
| Platform = Linux/Windows&lt;br /&gt;
| grp = N/A&lt;br /&gt;
| map = No&lt;br /&gt;
| gfx = Tileset&lt;br /&gt;
| mus = N/A&lt;br /&gt;
| sfx = No&lt;br /&gt;
| txt = No&lt;br /&gt;
| sav = No&lt;br /&gt;
| exe = No&lt;br /&gt;
}}&lt;br /&gt;
{{EndFileFormatTools}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
== File formats ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!File name!!Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;LEVEL#.CAT&amp;lt;/tt&amp;gt;&lt;br /&gt;
| style=&amp;quot;background: #CCFFCC;&amp;quot; | Game levels in [[Catacomb Map Format]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;TOPSCORS.CAT&amp;lt;/tt&amp;gt;&lt;br /&gt;
| style=&amp;quot;background: #CCFFCC;&amp;quot; | High scores in [[Catacomb Highscore Format]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;SOUNDS.CAT&amp;lt;/tt&amp;gt;&lt;br /&gt;
| style=&amp;quot;background: #CCFFCC;&amp;quot; | PC speaker sounds in [[Inverse Frequency Sound format]]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;CGACHARS.CAT&amp;lt;/tt&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;tt&amp;gt;EGACHARS.CAT&amp;lt;/tt&amp;gt;&lt;br /&gt;
| style=&amp;quot;background: #CCFFCC;&amp;quot; | Tile graphics for levels in [[Catacomb Tileset Format]], stored in the main .exe file&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;TITLE.PIC&amp;lt;/tt&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;tt&amp;gt;END.PIC&amp;lt;/tt&amp;gt;&lt;br /&gt;
| style=&amp;quot;background: #CCFFCC;&amp;quot; | Other graphics in [[PIC Format]], stored in the main .exe file&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
All graphics files are stored in the EXE. Their location in the &#039;&#039;decompressed&#039;&#039; executable is as follows:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Location   !! Size   !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00006100 || 0xB6C0 || EGACHARS.CAT&lt;br /&gt;
|-&lt;br /&gt;
| 0x000117D0 || 0x5B60 || CGACHARS.CAT&lt;br /&gt;
|-&lt;br /&gt;
| 0x00017997 || 0x4000 || TITLE.PIC&lt;br /&gt;
|-&lt;br /&gt;
| 0x0001B997 || 0x4000 || END.PIC&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note that these offsets only apply when using [[UNLZEXE]] (other programs will produce different offsets.)&lt;br /&gt;
&lt;br /&gt;
== Source code ==&lt;br /&gt;
The source code of this game was released by Flat Rock Software on June 5, 2014. It can be downloaded from [http://github.com/FlatRockSoft/Catacomb GitHub]. &lt;br /&gt;
&lt;br /&gt;
[[Category:Softdisk]]&lt;/div&gt;</summary>
		<author><name>Frenkel</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=EPF_Format&amp;diff=5048</id>
		<title>EPF Format</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=EPF_Format&amp;diff=5048"/>
		<updated>2013-11-22T16:38:46Z</updated>

		<summary type="html">&lt;p&gt;Frenkel: Added game Speed Demons&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Archive Infobox&lt;br /&gt;
 | MaxFiles = 65,535&lt;br /&gt;
 | FAT = End&lt;br /&gt;
 | Names = Yes, 8.3&lt;br /&gt;
 | Metadata = None&lt;br /&gt;
 | Subdirectories = N&lt;br /&gt;
 | Compressed = Y&lt;br /&gt;
 | Encrypted = N&lt;br /&gt;
 | Hidden = N&lt;br /&gt;
 | Game1 = Alien Breed Tower Assault&lt;br /&gt;
 | Game2 = Arcade Pool&lt;br /&gt;
 | Game3 = Mr Blobby&lt;br /&gt;
 | Game4 = Overdrive&lt;br /&gt;
 | Game5 = Project X&lt;br /&gt;
 | Game6 = Sensible Golf&lt;br /&gt;
 | Game7 = Speed Demons&lt;br /&gt;
 | Game8 = Spirou&lt;br /&gt;
 | Game9 = The Adventures of Tintin: Prisoners of the Sun&lt;br /&gt;
 | Game10 = The Jungle Book&lt;br /&gt;
 | Game11 = The Lion King&lt;br /&gt;
 | Game12 = The Smurfs&lt;br /&gt;
 | Game13 = Tin Tin in Tibet&lt;br /&gt;
 | Game14 = Universe&lt;br /&gt;
}}&lt;br /&gt;
The EPF file format is used in many games, like:&lt;br /&gt;
&lt;br /&gt;
Some (all?) of these games are made by East Point Software, so EPF (a shortened version of &amp;quot;EPFS&amp;quot; from the file header) probably stands for East Point File System or something similar.&lt;br /&gt;
&lt;br /&gt;
== File format ==&lt;br /&gt;
&lt;br /&gt;
=== Signature ===&lt;br /&gt;
&lt;br /&gt;
The first four bytes in the file are &amp;quot;EPFS&amp;quot;, followed by a UINT32LE offset (so that value must be smaller than the total file size.)&lt;br /&gt;
&lt;br /&gt;
=== Header ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Data type!!Description&lt;br /&gt;
|-&lt;br /&gt;
|BYTE signature[4]||&amp;quot;EPFS&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE fatOffset||Offset of the FAT&lt;br /&gt;
|-&lt;br /&gt;
|UINT8 unknown||{{TODO|Unknown, always zero - flags?}}&lt;br /&gt;
|-&lt;br /&gt;
|UINT16LE numFiles||Number of files&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The data for the first file starts immediately after the header (i.e. file offset 11.)&lt;br /&gt;
&lt;br /&gt;
=== File entry ===&lt;br /&gt;
&lt;br /&gt;
At offset &amp;lt;tt&amp;gt;fatOffset&amp;lt;/tt&amp;gt; sits a list of file entries.  The following structure is repeated until the end of the file.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Data type!!Description&lt;br /&gt;
|-&lt;br /&gt;
|BYTE filename[13]||Filename (NULL-terminated)&lt;br /&gt;
|-&lt;br /&gt;
|UINT8 compressionFlag||0 for &amp;quot;file is not compressed&amp;quot;, 1 for &amp;quot;file is compressed&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE compressedSize||size of the compressed file&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE decompressedSize||size of the file after decompression&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
In order to calculate the offset of each file, a running total is required.  It should start at offset 11 (just after the header), then the &amp;lt;tt&amp;gt;compressedSize&amp;lt;/tt&amp;gt; should be added to reveal the offset of the next file.&lt;br /&gt;
&lt;br /&gt;
=== Compression ===&lt;br /&gt;
&lt;br /&gt;
The compression scheme is [[LZW compression|LZW]], with a dynamic bit length from 9 to 14.&lt;br /&gt;
&lt;br /&gt;
The bits are stored in big-endian byte order, in contrast to e.g. Apogee/id LZW.  For example:&lt;br /&gt;
&lt;br /&gt;
  12          34         56         // bytes in compressed data file&lt;br /&gt;
  00010010    00110100   01010110   // converted to 8-bit binary&lt;br /&gt;
  000100100    011010001   010110   // bits read in big-endian order (Lion King)&lt;br /&gt;
 000010010  100011010    010101     // bits read in little-endian order (id/Apogee)&lt;br /&gt;
 ^...go here         ^bits from here...&lt;br /&gt;
&lt;br /&gt;
Although it uses a &amp;quot;normal&amp;quot; LZW algorithm, there are a few differences:&lt;br /&gt;
&lt;br /&gt;
* There are no reserved codewords at the beginning of the dictionary, so the first valid (9-bit) codeword is 0x100.&lt;br /&gt;
* When the dictionary is reset, the bit length is unchanged.&lt;br /&gt;
* The two largest possible codewords (at the current bit length) are reserved.  The largest codeword is used to signify the end of the data, and the second largest codeword is used to reset the dictionary.&lt;br /&gt;
* Once the third-largest codeword is encountered and processed (this is the largest valid/non-reserved codeword - 1021 for 10-bit codes) the bit length is incremented.&lt;br /&gt;
&lt;br /&gt;
The reserved codewords deserve a little extra explanation.  For a 10-bit codeword length, the largest possible value that can fit in ten bits is (1&amp;lt;&amp;lt;10)-1 == 1023, so a codeword of 1023 signifies the end of the data.  A codeword of 1022 (one less than the maximum) will reset the dictionary, but leave the codeword length unchanged (10-bits in this example), although in reality it would not make sense to encounter a dictionary-reset codeword until the dictionary has reached its maximum size, i.e. 14-bit codewords are in use.&lt;br /&gt;
&lt;br /&gt;
Keep in mind that these reserved codewords must be processed before the LZW decoder sees them, otherwise it will treat them as lookups into the dictionary, resulting in out of range accesses.  Also remember that once the bit length increases, the two reserved codewords will change, as the maximum codeword value has increased.  This frees up the &amp;quot;old&amp;quot; reserved codewords which are then used as normal codewords.&lt;br /&gt;
&lt;br /&gt;
At least one EPF file (OVER.EPF from the game &amp;quot;Overdrive&amp;quot;) contains corrupted files (4X43.MAP and 4X44.MAP), apparently due to a bug in the original compression algorithm when the files were created.  No tools are able to extract these files, and the levels are unplayable in the game (which crashes with an error.)&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
{{BeginFileFormatTools|Type=group}}&lt;br /&gt;
{{FileFormatTool&lt;br /&gt;
| Name = [[Camoto]]&lt;br /&gt;
| Platform = Linux/Windows&lt;br /&gt;
| canExtract = Yes&lt;br /&gt;
| canDecompress = Yes&lt;br /&gt;
| canCreate = Yes&lt;br /&gt;
| canModify = Yes&lt;br /&gt;
| canCompress = No&lt;br /&gt;
| editHidden = Yes&lt;br /&gt;
| editMetadata = N/A&lt;br /&gt;
}}&lt;br /&gt;
{{EndFileFormatTools}}&lt;/div&gt;</summary>
		<author><name>Frenkel</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=EPF_Format&amp;diff=5047</id>
		<title>EPF Format</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=EPF_Format&amp;diff=5047"/>
		<updated>2013-11-22T16:17:10Z</updated>

		<summary type="html">&lt;p&gt;Frenkel: Added game The Adventures of Tintin: Prisoners of the Sun&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Archive Infobox&lt;br /&gt;
 | MaxFiles = 65,535&lt;br /&gt;
 | FAT = End&lt;br /&gt;
 | Names = Yes, 8.3&lt;br /&gt;
 | Metadata = None&lt;br /&gt;
 | Subdirectories = N&lt;br /&gt;
 | Compressed = Y&lt;br /&gt;
 | Encrypted = N&lt;br /&gt;
 | Hidden = N&lt;br /&gt;
 | Game1 = Alien Breed Tower Assault&lt;br /&gt;
 | Game2 = Arcade Pool&lt;br /&gt;
 | Game3 = Mr Blobby&lt;br /&gt;
 | Game4 = Overdrive&lt;br /&gt;
 | Game5 = Project X&lt;br /&gt;
 | Game6 = Sensible Golf&lt;br /&gt;
 | Game7 = Spirou&lt;br /&gt;
 | Game8 = The Adventures of Tintin: Prisoners of the Sun&lt;br /&gt;
 | Game9 = The Jungle Book&lt;br /&gt;
 | Game10 = The Lion King&lt;br /&gt;
 | Game11 = The Smurfs&lt;br /&gt;
 | Game12 = Tin Tin in Tibet&lt;br /&gt;
 | Game13 = Universe&lt;br /&gt;
}}&lt;br /&gt;
The EPF file format is used in many games, like:&lt;br /&gt;
&lt;br /&gt;
Some (all?) of these games are made by East Point Software, so EPF (a shortened version of &amp;quot;EPFS&amp;quot; from the file header) probably stands for East Point File System or something similar.&lt;br /&gt;
&lt;br /&gt;
== File format ==&lt;br /&gt;
&lt;br /&gt;
=== Signature ===&lt;br /&gt;
&lt;br /&gt;
The first four bytes in the file are &amp;quot;EPFS&amp;quot;, followed by a UINT32LE offset (so that value must be smaller than the total file size.)&lt;br /&gt;
&lt;br /&gt;
=== Header ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Data type!!Description&lt;br /&gt;
|-&lt;br /&gt;
|BYTE signature[4]||&amp;quot;EPFS&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE fatOffset||Offset of the FAT&lt;br /&gt;
|-&lt;br /&gt;
|UINT8 unknown||{{TODO|Unknown, always zero - flags?}}&lt;br /&gt;
|-&lt;br /&gt;
|UINT16LE numFiles||Number of files&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The data for the first file starts immediately after the header (i.e. file offset 11.)&lt;br /&gt;
&lt;br /&gt;
=== File entry ===&lt;br /&gt;
&lt;br /&gt;
At offset &amp;lt;tt&amp;gt;fatOffset&amp;lt;/tt&amp;gt; sits a list of file entries.  The following structure is repeated until the end of the file.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Data type!!Description&lt;br /&gt;
|-&lt;br /&gt;
|BYTE filename[13]||Filename (NULL-terminated)&lt;br /&gt;
|-&lt;br /&gt;
|UINT8 compressionFlag||0 for &amp;quot;file is not compressed&amp;quot;, 1 for &amp;quot;file is compressed&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE compressedSize||size of the compressed file&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE decompressedSize||size of the file after decompression&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
In order to calculate the offset of each file, a running total is required.  It should start at offset 11 (just after the header), then the &amp;lt;tt&amp;gt;compressedSize&amp;lt;/tt&amp;gt; should be added to reveal the offset of the next file.&lt;br /&gt;
&lt;br /&gt;
=== Compression ===&lt;br /&gt;
&lt;br /&gt;
The compression scheme is [[LZW compression|LZW]], with a dynamic bit length from 9 to 14.&lt;br /&gt;
&lt;br /&gt;
The bits are stored in big-endian byte order, in contrast to e.g. Apogee/id LZW.  For example:&lt;br /&gt;
&lt;br /&gt;
  12          34         56         // bytes in compressed data file&lt;br /&gt;
  00010010    00110100   01010110   // converted to 8-bit binary&lt;br /&gt;
  000100100    011010001   010110   // bits read in big-endian order (Lion King)&lt;br /&gt;
 000010010  100011010    010101     // bits read in little-endian order (id/Apogee)&lt;br /&gt;
 ^...go here         ^bits from here...&lt;br /&gt;
&lt;br /&gt;
Although it uses a &amp;quot;normal&amp;quot; LZW algorithm, there are a few differences:&lt;br /&gt;
&lt;br /&gt;
* There are no reserved codewords at the beginning of the dictionary, so the first valid (9-bit) codeword is 0x100.&lt;br /&gt;
* When the dictionary is reset, the bit length is unchanged.&lt;br /&gt;
* The two largest possible codewords (at the current bit length) are reserved.  The largest codeword is used to signify the end of the data, and the second largest codeword is used to reset the dictionary.&lt;br /&gt;
* Once the third-largest codeword is encountered and processed (this is the largest valid/non-reserved codeword - 1021 for 10-bit codes) the bit length is incremented.&lt;br /&gt;
&lt;br /&gt;
The reserved codewords deserve a little extra explanation.  For a 10-bit codeword length, the largest possible value that can fit in ten bits is (1&amp;lt;&amp;lt;10)-1 == 1023, so a codeword of 1023 signifies the end of the data.  A codeword of 1022 (one less than the maximum) will reset the dictionary, but leave the codeword length unchanged (10-bits in this example), although in reality it would not make sense to encounter a dictionary-reset codeword until the dictionary has reached its maximum size, i.e. 14-bit codewords are in use.&lt;br /&gt;
&lt;br /&gt;
Keep in mind that these reserved codewords must be processed before the LZW decoder sees them, otherwise it will treat them as lookups into the dictionary, resulting in out of range accesses.  Also remember that once the bit length increases, the two reserved codewords will change, as the maximum codeword value has increased.  This frees up the &amp;quot;old&amp;quot; reserved codewords which are then used as normal codewords.&lt;br /&gt;
&lt;br /&gt;
At least one EPF file (OVER.EPF from the game &amp;quot;Overdrive&amp;quot;) contains corrupted files (4X43.MAP and 4X44.MAP), apparently due to a bug in the original compression algorithm when the files were created.  No tools are able to extract these files, and the levels are unplayable in the game (which crashes with an error.)&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
{{BeginFileFormatTools|Type=group}}&lt;br /&gt;
{{FileFormatTool&lt;br /&gt;
| Name = [[Camoto]]&lt;br /&gt;
| Platform = Linux/Windows&lt;br /&gt;
| canExtract = Yes&lt;br /&gt;
| canDecompress = Yes&lt;br /&gt;
| canCreate = Yes&lt;br /&gt;
| canModify = Yes&lt;br /&gt;
| canCompress = No&lt;br /&gt;
| editHidden = Yes&lt;br /&gt;
| editMetadata = N/A&lt;br /&gt;
}}&lt;br /&gt;
{{EndFileFormatTools}}&lt;/div&gt;</summary>
		<author><name>Frenkel</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=EPF_Format&amp;diff=5046</id>
		<title>EPF Format</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=EPF_Format&amp;diff=5046"/>
		<updated>2013-11-22T16:04:50Z</updated>

		<summary type="html">&lt;p&gt;Frenkel: Added game Mr Blobby&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Archive Infobox&lt;br /&gt;
 | MaxFiles = 65,535&lt;br /&gt;
 | FAT = End&lt;br /&gt;
 | Names = Yes, 8.3&lt;br /&gt;
 | Metadata = None&lt;br /&gt;
 | Subdirectories = N&lt;br /&gt;
 | Compressed = Y&lt;br /&gt;
 | Encrypted = N&lt;br /&gt;
 | Hidden = N&lt;br /&gt;
 | Game1 = Alien Breed Tower Assault&lt;br /&gt;
 | Game2 = Arcade Pool&lt;br /&gt;
 | Game3 = Mr Blobby&lt;br /&gt;
 | Game4 = Overdrive&lt;br /&gt;
 | Game5 = Project X&lt;br /&gt;
 | Game6 = Sensible Golf&lt;br /&gt;
 | Game7 = Spirou&lt;br /&gt;
 | Game8 = The Jungle Book&lt;br /&gt;
 | Game9 = The Lion King&lt;br /&gt;
 | Game10 = The Smurfs&lt;br /&gt;
 | Game11 = Tin Tin in Tibet&lt;br /&gt;
 | Game12 = Universe&lt;br /&gt;
}}&lt;br /&gt;
The EPF file format is used in many games, like:&lt;br /&gt;
&lt;br /&gt;
Some (all?) of these games are made by East Point Software, so EPF (a shortened version of &amp;quot;EPFS&amp;quot; from the file header) probably stands for East Point File System or something similar.&lt;br /&gt;
&lt;br /&gt;
== File format ==&lt;br /&gt;
&lt;br /&gt;
=== Signature ===&lt;br /&gt;
&lt;br /&gt;
The first four bytes in the file are &amp;quot;EPFS&amp;quot;, followed by a UINT32LE offset (so that value must be smaller than the total file size.)&lt;br /&gt;
&lt;br /&gt;
=== Header ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Data type!!Description&lt;br /&gt;
|-&lt;br /&gt;
|BYTE signature[4]||&amp;quot;EPFS&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE fatOffset||Offset of the FAT&lt;br /&gt;
|-&lt;br /&gt;
|UINT8 unknown||{{TODO|Unknown, always zero - flags?}}&lt;br /&gt;
|-&lt;br /&gt;
|UINT16LE numFiles||Number of files&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The data for the first file starts immediately after the header (i.e. file offset 11.)&lt;br /&gt;
&lt;br /&gt;
=== File entry ===&lt;br /&gt;
&lt;br /&gt;
At offset &amp;lt;tt&amp;gt;fatOffset&amp;lt;/tt&amp;gt; sits a list of file entries.  The following structure is repeated until the end of the file.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Data type!!Description&lt;br /&gt;
|-&lt;br /&gt;
|BYTE filename[13]||Filename (NULL-terminated)&lt;br /&gt;
|-&lt;br /&gt;
|UINT8 compressionFlag||0 for &amp;quot;file is not compressed&amp;quot;, 1 for &amp;quot;file is compressed&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE compressedSize||size of the compressed file&lt;br /&gt;
|-&lt;br /&gt;
|UINT32LE decompressedSize||size of the file after decompression&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
In order to calculate the offset of each file, a running total is required.  It should start at offset 11 (just after the header), then the &amp;lt;tt&amp;gt;compressedSize&amp;lt;/tt&amp;gt; should be added to reveal the offset of the next file.&lt;br /&gt;
&lt;br /&gt;
=== Compression ===&lt;br /&gt;
&lt;br /&gt;
The compression scheme is [[LZW compression|LZW]], with a dynamic bit length from 9 to 14.&lt;br /&gt;
&lt;br /&gt;
The bits are stored in big-endian byte order, in contrast to e.g. Apogee/id LZW.  For example:&lt;br /&gt;
&lt;br /&gt;
  12          34         56         // bytes in compressed data file&lt;br /&gt;
  00010010    00110100   01010110   // converted to 8-bit binary&lt;br /&gt;
  000100100    011010001   010110   // bits read in big-endian order (Lion King)&lt;br /&gt;
 000010010  100011010    010101     // bits read in little-endian order (id/Apogee)&lt;br /&gt;
 ^...go here         ^bits from here...&lt;br /&gt;
&lt;br /&gt;
Although it uses a &amp;quot;normal&amp;quot; LZW algorithm, there are a few differences:&lt;br /&gt;
&lt;br /&gt;
* There are no reserved codewords at the beginning of the dictionary, so the first valid (9-bit) codeword is 0x100.&lt;br /&gt;
* When the dictionary is reset, the bit length is unchanged.&lt;br /&gt;
* The two largest possible codewords (at the current bit length) are reserved.  The largest codeword is used to signify the end of the data, and the second largest codeword is used to reset the dictionary.&lt;br /&gt;
* Once the third-largest codeword is encountered and processed (this is the largest valid/non-reserved codeword - 1021 for 10-bit codes) the bit length is incremented.&lt;br /&gt;
&lt;br /&gt;
The reserved codewords deserve a little extra explanation.  For a 10-bit codeword length, the largest possible value that can fit in ten bits is (1&amp;lt;&amp;lt;10)-1 == 1023, so a codeword of 1023 signifies the end of the data.  A codeword of 1022 (one less than the maximum) will reset the dictionary, but leave the codeword length unchanged (10-bits in this example), although in reality it would not make sense to encounter a dictionary-reset codeword until the dictionary has reached its maximum size, i.e. 14-bit codewords are in use.&lt;br /&gt;
&lt;br /&gt;
Keep in mind that these reserved codewords must be processed before the LZW decoder sees them, otherwise it will treat them as lookups into the dictionary, resulting in out of range accesses.  Also remember that once the bit length increases, the two reserved codewords will change, as the maximum codeword value has increased.  This frees up the &amp;quot;old&amp;quot; reserved codewords which are then used as normal codewords.&lt;br /&gt;
&lt;br /&gt;
At least one EPF file (OVER.EPF from the game &amp;quot;Overdrive&amp;quot;) contains corrupted files (4X43.MAP and 4X44.MAP), apparently due to a bug in the original compression algorithm when the files were created.  No tools are able to extract these files, and the levels are unplayable in the game (which crashes with an error.)&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
{{BeginFileFormatTools|Type=group}}&lt;br /&gt;
{{FileFormatTool&lt;br /&gt;
| Name = [[Camoto]]&lt;br /&gt;
| Platform = Linux/Windows&lt;br /&gt;
| canExtract = Yes&lt;br /&gt;
| canDecompress = Yes&lt;br /&gt;
| canCreate = Yes&lt;br /&gt;
| canModify = Yes&lt;br /&gt;
| canCompress = No&lt;br /&gt;
| editHidden = Yes&lt;br /&gt;
| editMetadata = N/A&lt;br /&gt;
}}&lt;br /&gt;
{{EndFileFormatTools}}&lt;/div&gt;</summary>
		<author><name>Frenkel</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=B800_Text&amp;diff=5045</id>
		<title>B800 Text</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=B800_Text&amp;diff=5045"/>
		<updated>2013-11-18T14:41:35Z</updated>

		<summary type="html">&lt;p&gt;Frenkel: /* File format */ The original CGA can display high intensity background colours. Otherwise the 160x100 16 colour mode is not possible.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Image Infobox&lt;br /&gt;
 | Hardware1 = CGA&lt;br /&gt;
 | Hardware2 = EGA&lt;br /&gt;
 | Hardware3 = VGA&lt;br /&gt;
 | Depth = 4-bit&lt;br /&gt;
 | MinSize = 80&amp;amp;times;25 cells&lt;br /&gt;
 | MaxSize = 80&amp;amp;times;25 cells&lt;br /&gt;
 | NumPlanes = 2 &amp;lt;!-- text and attributes --&amp;gt;&lt;br /&gt;
 | HasTransparency = No&lt;br /&gt;
 | HasHitmap = No&lt;br /&gt;
&amp;lt;!-- I suggest not listing games here because nearly every game uses this format and the template can only handle 10 games.  But feel free to add games to the category list at the end of the article. --&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;B800 Text&#039;&#039;&#039; is a text-mode screen dump, and under x86 real mode (such as used by DOS) can be copied byte for byte into video memory starting at &amp;lt;tt&amp;gt;B800:0000&amp;lt;/tt&amp;gt;, causing the data to appear on the screen when the video card is in text mode.  It is most often used to display the final text screen after quitting a game, with the DOS prompt appearing on the last line once the game has terminated.&lt;br /&gt;
&lt;br /&gt;
== File format ==&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border-style: none; float: right; clear: right; margin-left: 1.5em; text-align:center; hspace=10px&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; | &amp;lt;nowiki&amp;gt;Full CGA 16-color palette&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color: white; background-color: #000000&amp;quot; | 0 — black&amp;lt;br /&amp;gt;&amp;lt;nowiki&amp;gt;#000000&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| style=&amp;quot;color: white; background-color: #555555&amp;quot; | 8 — (dark) gray&amp;lt;br /&amp;gt;&amp;lt;nowiki&amp;gt;#555555&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color: white; background-color: #0000AA&amp;quot; | 1 — blue&amp;lt;br /&amp;gt;&amp;lt;nowiki&amp;gt;#0000AA&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| style=&amp;quot;color: white; background-color: #5555FF&amp;quot; | 9 — bright blue&amp;lt;br /&amp;gt;&amp;lt;nowiki&amp;gt;#5555FF&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color: white; background-color: #00AA00&amp;quot; | 2 — green&amp;lt;br /&amp;gt;&amp;lt;nowiki&amp;gt;#00AA00&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| style=&amp;quot;color: black; background-color: #55FF55&amp;quot; | 10 — bright green&amp;lt;br /&amp;gt;&amp;lt;nowiki&amp;gt;#55FF55&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color: white; background-color: #00AAAA&amp;quot; | 3 — cyan&amp;lt;br /&amp;gt;&amp;lt;nowiki&amp;gt;#00AAAA&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| style=&amp;quot;color: black; background-color: #55FFFF&amp;quot; | 11 — bright cyan&amp;lt;br /&amp;gt;&amp;lt;nowiki&amp;gt;#55FFFF&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color: white; background-color: #AA0000&amp;quot; | 4 — red&amp;lt;br /&amp;gt;&amp;lt;nowiki&amp;gt;#AA0000&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| style=&amp;quot;color: black; background-color: #FF5555&amp;quot; | 12 — bright red&amp;lt;br /&amp;gt;&amp;lt;nowiki&amp;gt;#FF5555&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color: white; background-color: #AA00AA&amp;quot; | 5 — magenta&amp;lt;br /&amp;gt;&amp;lt;nowiki&amp;gt;#AA00AA&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| style=&amp;quot;color: black; background-color: #FF55FF&amp;quot; | 13 — bright magenta&amp;lt;br /&amp;gt;&amp;lt;nowiki&amp;gt;#FF55FF&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color: white; background-color: #AA5500&amp;quot; | 6 — brown&amp;lt;br /&amp;gt;&amp;lt;nowiki&amp;gt;#AA5500&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| style=&amp;quot;color: black; background-color: #FFFF55&amp;quot; | 14 — yellow&amp;lt;br /&amp;gt;&amp;lt;nowiki&amp;gt;#FFFF55&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;color: black; background-color: #AAAAAA&amp;quot; | 7 — white (light gray)&amp;lt;br /&amp;gt;&amp;lt;nowiki&amp;gt;#AAAAAA&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| style=&amp;quot;color: black; background-color: #FFFFFF&amp;quot; | 15 — bright white&amp;lt;br /&amp;gt;&amp;lt;nowiki&amp;gt;#FFFFFF&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Since the file format is just a direct dump of video memory, this would more accurately be termed the &amp;quot;CGA text mode format.&amp;quot;  The file is almost always 4000 bytes long, as this is the exact amount of space required to store a standard 80x25 text screen (80 columns * 25 rows * two bytes per cell == 4000 bytes.)&lt;br /&gt;
&lt;br /&gt;
The data is arranged in cells, with each cell being two bytes long (one byte for the ASCII character to display, followed by an attribute byte indicating the colour of the character.)  The data appears starting at the top-left of the screen (1,1) and works its way across to the right (80,1) and then wraps down to the next line (1,2).&lt;br /&gt;
&lt;br /&gt;
The attribute byte contains two nybbles of data.  The most significant four bits are the background colour, and the least significant bits are the foreground colour.  This means the background and foreground colours can each be assigned a colour value between zero (black) and 15 (white) - see the table on the right for the full list of colours.&lt;br /&gt;
&lt;br /&gt;
The background colour is slightly different however. By default, the intensity bit is used to cause the text to flash instead.  This means setting the background colour to 14 won&#039;t produce a bright-yellow background, but instead will produce a normal yellow background (colour #6) with blinking text.  The CGA standard includes a toggle bit that allows this flashing to be switched off, thus allowing the full 16 background colours to be used (without any flashing of course.)&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
As a demonstration, these bytes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
48 1E  65 2E  6C 3E  6C 4E  6F 5E        H.e.l.l.o.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Would appear like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color: black; padding: 4px; font-size: 14pt; width: 20em;&amp;quot;&amp;gt;&amp;lt;tt&amp;gt;&amp;lt;b&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;lt;span style=&amp;quot;background-color: #0000AA; color: #FFFF55&amp;quot;&amp;gt;H&amp;lt;span style=&amp;quot;background-color: #00AA00;&amp;quot;&amp;gt;e&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;background-color: #00AAAA;&amp;quot;&amp;gt;l&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;background-color: #AA0000;&amp;quot;&amp;gt;l&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;background-color: #AA00AA;&amp;quot;&amp;gt;o&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/b&amp;gt;&amp;lt;/tt&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
The following tools are known to work with this format:&lt;br /&gt;
&lt;br /&gt;
* [http://en.wikipedia.org/wiki/TheDraw TheDraw] - DOS-based text animation/screen editor, which does support B800 text and many other DOS formats.  TheDraw also runs under DOSBox.&lt;br /&gt;
* [http://www.theabsolute.net/sware/oldfav.html TextPaint] - DOS-based text screen editor, which unfortunately doesn&#039;t support B800 text but is still very powerful, and useful enough to warrant a mention.&lt;br /&gt;
* [http://dlc.softwareload.de/SHMANSi/5597 Shmansi] - Another DOS-based text screen editor, which can import and export B800 text.&lt;br /&gt;
* [http://www.doomworld.com/idgames/index.php?id=3692 ENDOOMER]- Yet another DOS-based text screen editor, which can import and export B800 text, and can be used with the mouse as well.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[Wikipedia:Color Graphics Adapter]] - lots of interesting information about the CGA hardware&lt;br /&gt;
* [[Wikipedia:ANSI art]] - An article about ANSI art&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- All the games that use this file format --&amp;gt;&lt;br /&gt;
[[Category:Blake Stone]]&lt;br /&gt;
[[Category:Boppin&#039;]]&lt;br /&gt;
[[Category:Commander Keen 1-3]]&lt;br /&gt;
[[Category:Commander Keen Dreams]]&lt;br /&gt;
[[Category:Commander Keen 4-6]]&lt;br /&gt;
[[Category:Cosmo&#039;s Cosmic Adventures]]&lt;br /&gt;
[[Category:Crystal Caves]]&lt;br /&gt;
[[Category:Descent]]&lt;br /&gt;
[[Category:Duke Nukem II]]&lt;br /&gt;
[[Category:Duke Nukem 3D]]&lt;br /&gt;
[[Category:Halloween Harry]]&lt;br /&gt;
[[Category:Hocus Pocus]]&lt;br /&gt;
[[Category:Jill of the Jungle]]&lt;br /&gt;
[[Category:Kiloblaster]]&lt;br /&gt;
[[Category:Major Stryker]]&lt;br /&gt;
[[Category:Monster Bash]]&lt;br /&gt;
[[Category:Raptor]]&lt;br /&gt;
[[Category:Rise of the Triad]]&lt;br /&gt;
[[Category:Secret Agent]]&lt;br /&gt;
[[Category:Terminal Velocity]]&lt;br /&gt;
[[Category:Vinyl Goddess From Mars]]&lt;br /&gt;
[[Category:Wacky Wheels]]&lt;br /&gt;
[[Category:Wolfenstein 3-D]]&lt;br /&gt;
[[Category:Xargon]]&lt;br /&gt;
[[Category:Zone 66]]&lt;/div&gt;</summary>
		<author><name>Frenkel</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=User_talk:Frenkel&amp;diff=4838</id>
		<title>User talk:Frenkel</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=User_talk:Frenkel&amp;diff=4838"/>
		<updated>2013-08-14T20:40:00Z</updated>

		<summary type="html">&lt;p&gt;Frenkel: /* ProGraphx map formats */ More questions than answers&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ProGraphx map formats ==&lt;br /&gt;
&lt;br /&gt;
Hi Frenkel.  I&#039;m just looking at [[Crystal Caves Map Format]], [[Secret Agent Level Format]] and [[Dark Ages Map Format]], and wondering whether it would be possible to write a single level reader/writer that could handle all three formats.  What do you think?  The major differences I can think of are that SA can have multiple layers and the background can be set in the level file itself, but is that all the differences?  I&#039;m just thinking that given the complexity of mapping codes to tile images, maybe that code could be shared between the map formats, with just a different list of tile mappings for each game.  Any thoughts? -- [[User:Malvineous|Malvineous]] ([[User talk:Malvineous|talk]]) 09:55, 11 August 2013 (GMT)&lt;br /&gt;
&lt;br /&gt;
:What about the [[Duke 1 Level Format]]? Does it also need a special tile mapping algorithm? I haven&#039;t checked that. But I do know that just like Dark Ages it has only one plane and that every special/enemy tile uses the tile before/after/above it as its background. &lt;br /&gt;
:Oh, and the Crystal Caves Map Format is just weird :).[[User:Frenkel|Frenkel]] ([[User talk:Frenkel|talk]]) 20:40, 14 August 2013 (GMT)&lt;/div&gt;</summary>
		<author><name>Frenkel</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=File:Secret_Agent_Level_Format.png&amp;diff=4837</id>
		<title>File:Secret Agent Level Format.png</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=File:Secret_Agent_Level_Format.png&amp;diff=4837"/>
		<updated>2013-08-14T20:05:46Z</updated>

		<summary type="html">&lt;p&gt;Frenkel: Secret Agent episode 1 level 3&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Secret Agent episode 1 level 3&lt;/div&gt;</summary>
		<author><name>Frenkel</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Dark_Ages_Map_Format&amp;diff=4816</id>
		<title>Dark Ages Map Format</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Dark_Ages_Map_Format&amp;diff=4816"/>
		<updated>2013-08-04T22:45:35Z</updated>

		<summary type="html">&lt;p&gt;Frenkel: /* Map codes */ Only map codes [100, 144) need a lookup table.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{NeedMoreInfo}}&lt;br /&gt;
{{Map Infobox&lt;br /&gt;
 | Type = 2D tile-based&lt;br /&gt;
 | Layers = 1&lt;br /&gt;
 | Tile size = 16&amp;amp;times;16&lt;br /&gt;
 | Viewport = 240&amp;amp;times;144&lt;br /&gt;
 | Game1 = Dark Ages&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
This format is used by [[Dark Ages]] to store game levels.  It is stored as &amp;lt;tt&amp;gt;file05.da[123]&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Signature ==&lt;br /&gt;
&lt;br /&gt;
There is no header or signature in the file.  Each level is 1152 bytes long, so the file must be a multiple of this size.  Since the game has 10 levels, all the files are 11,520 bytes long.&lt;br /&gt;
&lt;br /&gt;
== Format ==&lt;br /&gt;
&lt;br /&gt;
All levels in the episode are stored in the same file, one after the other.  Each level is 128 cells wide and 9 cells high.  Each cell occupies one byte in the map file, so each level takes up 1152 bytes (128 &amp;amp;times; 9).&lt;br /&gt;
&lt;br /&gt;
=== Map codes ===&lt;br /&gt;
&lt;br /&gt;
Map code 0 maps to the first image in the first tileset, 1 maps to the second image in the first tileset. Map code 50 maps to the first image in the second tileset, etc. This is true for all 256 map codes, except for map codes 100 through 143 inclusive. Those map codes must be mapped back to images manually, via a lookup table.  Lookup tables are available in those level editors/viewers that include source code.&lt;br /&gt;
&lt;br /&gt;
== Credits ==&lt;br /&gt;
&lt;br /&gt;
This file format was reverse engineered by [[User:Frenkel|Frenkel]].  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>Frenkel</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=File:Dark_Ages_Map_Format.png&amp;diff=4815</id>
		<title>File:Dark Ages Map Format.png</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=File:Dark_Ages_Map_Format.png&amp;diff=4815"/>
		<updated>2013-08-04T22:19:04Z</updated>

		<summary type="html">&lt;p&gt;Frenkel: Dark Ages episode 1, level 1.

Created with DOSBox and Daview. Notice that enemies and coins don&amp;#039;t have a background and the old man occupies only 1 cell instead of 2.

Category:Map images&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Dark Ages]] episode 1, level 1.&lt;br /&gt;
&lt;br /&gt;
Created with DOSBox and Daview. Notice that enemies and coins don&#039;t have a background and the old man occupies only 1 cell instead of 2.&lt;br /&gt;
&lt;br /&gt;
[[Category:Map images]]&lt;/div&gt;</summary>
		<author><name>Frenkel</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Crystal_Caves_Map_Format&amp;diff=4814</id>
		<title>Crystal Caves Map Format</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Crystal_Caves_Map_Format&amp;diff=4814"/>
		<updated>2013-08-04T22:04:54Z</updated>

		<summary type="html">&lt;p&gt;Frenkel: Viewport changed from 320x200 to 320x192&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{NeedMoreInfo}}&lt;br /&gt;
{{Map Infobox&lt;br /&gt;
 | Type = 2D tile-based&lt;br /&gt;
 | Layers = 1&lt;br /&gt;
 | Tile size = 16&amp;amp;times;16&lt;br /&gt;
 | Viewport = 320&amp;amp;times;192&lt;br /&gt;
 | Game1 = Crystal Caves&lt;br /&gt;
}}&lt;br /&gt;
The &#039;&#039;Crystal Caves Map Format&#039;&#039; describes a particular section of data within the main [[Crystal Caves]] executable file, where the game levels are stored.  Each level is 40 tiles wide and a varying number of tiles high.&lt;br /&gt;
&lt;br /&gt;
== Location ==&lt;br /&gt;
&lt;br /&gt;
The levels are stored inside the executable. To view them, the executable must be decompressed (UNP&#039;d; [[UNLZEXE]] works fine for this.) After decompression, the levels for episodes 1 and 2 are stored at offset 0x8C30 (seg000:7332) or 0x8CE0 (depending on the decompression utility) and take up just under 17kB of space. The levels for episode 3 are stored at offset 0x8F24 in the UNLZEXE&#039;d executable.&lt;br /&gt;
&lt;br /&gt;
There are 19 levels, including the main map and two story levels (used at the start and end of the game.)  Each level is stored in order, beginning with the introduction/story, finale/story, main map, then level 1, 2, 3, etc.&lt;br /&gt;
&lt;br /&gt;
The number of rows for each map is hard-coded into the executable as machine instructions, not as an array of heights for each level.  In addition, some maps can use data from other maps (in most cases the first or the last row) or use two data-rows to produce a single row on the map.  Practically, this makes it very hard to increase a level&#039;s height and causes a lot of restrictions to modifying the maps.  The levels (not counting Intro and Finale) are all sized 40 x 24 tiles and it is believed that each level uses 24 rows of data, with the following exceptions:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Level !! Rows of data&lt;br /&gt;
|-&lt;br /&gt;
| Intro || 5&lt;br /&gt;
|-&lt;br /&gt;
| Finale || 6&lt;br /&gt;
|-&lt;br /&gt;
| Main map || 25&lt;br /&gt;
|-&lt;br /&gt;
| Level 7 || 23&lt;br /&gt;
|-&lt;br /&gt;
| Level 8 || 23&lt;br /&gt;
|-&lt;br /&gt;
| Level 14 || 23&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Format ==&lt;br /&gt;
&lt;br /&gt;
Each map is made up of a variable number of Pascal-style strings, one for each row.  This string format contains no terminating 0x00, but rather stores the string length in the first byte.  Thus each row of each level begins with the byte 0x28 (decimal 40, the map width.)  Each subsequent byte in the string represents a single 16x16 tile.&lt;br /&gt;
&lt;br /&gt;
=== Map codes ===&lt;br /&gt;
&lt;br /&gt;
Unfortunately map codes cannot be converted into tileset indices automatically.  This is because the maps were almost certainly designed by hand in a hex editor, without the use of a specific level editing program.  Thus the codes were chosen to make some sense to a human, and the game uses some logic to convert the codes into tiles when levels are loaded.&lt;br /&gt;
&lt;br /&gt;
This makes it quite challenging to write a level editor, as despite the map format containing one byte for each tile in the map, many bytes affect the surrounding tiles.  For example the &amp;quot;[&amp;quot; character denotes a sign, and if it is followed by a &amp;quot;d&amp;quot; then the two cells will be occupied by a &amp;quot;danger&amp;quot; sign.  But if the character following &amp;quot;[&amp;quot; is a &amp;quot;g&amp;quot;, a 3&amp;amp;times;2 cell green box with a yellow border will be inserted instead, assuming the remaining area in the 3&amp;amp;times;2 space is filled with the letter &amp;quot;n&amp;quot; (which is widely used as a generic &amp;quot;show next tile&amp;quot; code.)&lt;br /&gt;
&lt;br /&gt;
The tiles to use for platforms in a level (including the colour of steel girders and other elements) are set outside the level file in an unknown location.  The level codes are relative references to this base value.  This means a level can be easily changed from having blue platforms to red ones, brown ones, or blue rocks instead, without changing any level codes in the file.&lt;br /&gt;
&lt;br /&gt;
Unfortunately it is not known where these values are actually set, so for the time being each level is stuck with whatever structural tileset it has in the original game.&lt;br /&gt;
&lt;br /&gt;
==== BlitzMax Code ====&lt;br /&gt;
&lt;br /&gt;
This is the code of a very simple map viewer for Crystal Caves. You need to convert the tile graphics from &amp;lt;tt&amp;gt;CC1.GFX&amp;lt;/tt&amp;gt; to PNG with [[Wombat]] and UNLZEXE the executable to use this code.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&#039;Crystal Caves Map Viewer&lt;br /&gt;
&#039;by K1n9_Duk3&lt;br /&gt;
&lt;br /&gt;
SuperStrict&lt;br /&gt;
&lt;br /&gt;
Local TileImg:TImage = LoadAnimImage(&amp;quot;cc1.gfx.png&amp;quot;, 16, 16, 0, 1150)&lt;br /&gt;
Local in:TStream = ReadFile(&amp;quot;CC1-UNLZ.EXE&amp;quot;)&lt;br /&gt;
Local Maps:Byte[800, 40]&lt;br /&gt;
&lt;br /&gt;
Local MaxY:Int&lt;br /&gt;
&lt;br /&gt;
If in&lt;br /&gt;
	SeekStream(in, $8ce0)	&#039;CC1 &amp;amp; CC2&lt;br /&gt;
&#039;	SeekStream(in, $8f24)	&#039;CC3&lt;br /&gt;
	Local y:Int&lt;br /&gt;
	Repeat&lt;br /&gt;
		If ReadByte(in) &amp;lt;&amp;gt; 40 Then Exit&lt;br /&gt;
		&lt;br /&gt;
		Local s$ = &amp;quot;&amp;quot;&lt;br /&gt;
		For Local x:Int = 0 Until 40&lt;br /&gt;
			Local b:Byte = ReadByte(in)&lt;br /&gt;
			Maps[y, x] = b&lt;br /&gt;
		Next&lt;br /&gt;
		y :+ 1&lt;br /&gt;
		&lt;br /&gt;
		MaxY = y&lt;br /&gt;
	Forever&lt;br /&gt;
	CloseFile(in)&lt;br /&gt;
Else&lt;br /&gt;
	End&lt;br /&gt;
EndIf&lt;br /&gt;
&lt;br /&gt;
AppTitle = &amp;quot;Crystal Caves Map Viewer&amp;quot;&lt;br /&gt;
Graphics 640, 480&lt;br /&gt;
	&lt;br /&gt;
SetClsColor(128, 128, 128)&lt;br /&gt;
&lt;br /&gt;
Local CamY:Int&lt;br /&gt;
Local Textmode:Byte&lt;br /&gt;
	&lt;br /&gt;
Repeat&lt;br /&gt;
	Cls&lt;br /&gt;
	For Local y:Int = 0 Until 30&lt;br /&gt;
		For Local x:Int = 0 Until 40&lt;br /&gt;
			Local MapTile:Byte = Maps[y+CamY, x]&lt;br /&gt;
			Local TileIndex:Int = -1&lt;br /&gt;
			&lt;br /&gt;
			Select MapTile&lt;br /&gt;
&lt;br /&gt;
			&#039;Crystals (indices for CC1):&lt;br /&gt;
			Case $52	TileIndex =  600&lt;br /&gt;
			Case $2B	TileIndex =  601&lt;br /&gt;
			Case $62	TileIndex =  602&lt;br /&gt;
			Case $63	TileIndex =  603&lt;br /&gt;
				&lt;br /&gt;
			&#039;Walls (indices for magenta walls):&lt;br /&gt;
			Case $72	TileIndex = 1100&lt;br /&gt;
			Case $74	TileIndex = 1101&lt;br /&gt;
			Case $79	TileIndex = 1102&lt;br /&gt;
			Case $66	TileIndex = 1104&lt;br /&gt;
			Case $67	TileIndex = 1105&lt;br /&gt;
			Case $68	TileIndex = 1106&lt;br /&gt;
			Case $34	TileIndex = 1108&lt;br /&gt;
			Case $35	TileIndex = 1109&lt;br /&gt;
			Case $36	TileIndex = 1110&lt;br /&gt;
			&lt;br /&gt;
			&#039;Metal beams (indices for blue beams):&lt;br /&gt;
			Case $44	TileIndex =  953&lt;br /&gt;
			Case $64	TileIndex =  954&lt;br /&gt;
			Case $98	TileIndex =  953	&#039;with hidden crystal&lt;br /&gt;
			Case $99	TileIndex =  954	&#039;with hidden crystal&lt;br /&gt;
			Case $9A	TileIndex =  955	&#039;with hidden crystal&lt;br /&gt;
			&lt;br /&gt;
			&#039;Small platform (blue index):&lt;br /&gt;
			Case $5F	TileIndex =  950&lt;br /&gt;
			&lt;br /&gt;
			&#039;Other Stuff:&lt;br /&gt;
			Case $21	TileIndex =  650&lt;br /&gt;
			Case $22	TileIndex =  630&lt;br /&gt;
			Case $23	TileIndex =  124&lt;br /&gt;
			Case $24	TileIndex =  860&lt;br /&gt;
			Case $25	TileIndex =  539&lt;br /&gt;
			Case $26	TileIndex =  662&lt;br /&gt;
			Case $28	TileIndex =  184&lt;br /&gt;
			Case $29	TileIndex =  185&lt;br /&gt;
			Case $2A	TileIndex =  105&lt;br /&gt;
			Case $2C	TileIndex =  537&lt;br /&gt;
			Case $2D	TileIndex =  536&lt;br /&gt;
			Case $2E	TileIndex =  538&lt;br /&gt;
			Case $2F	TileIndex =  480&lt;br /&gt;
			Case $30	TileIndex =   43&lt;br /&gt;
			Case $38	TileIndex =   34&lt;br /&gt;
			Case $39	TileIndex =   96&lt;br /&gt;
			Case $3A	TileIndex =  629&lt;br /&gt;
			Case $3D	TileIndex =  689&lt;br /&gt;
			Case $3F	TileIndex =   50&lt;br /&gt;
			Case $41	TileIndex =  882&lt;br /&gt;
			Case $42	TileIndex =    6&lt;br /&gt;
			Case $45	TileIndex =  680&lt;br /&gt;
			Case $46	TileIndex =  470&lt;br /&gt;
			Case $47	TileIndex =  298&lt;br /&gt;
			Case $48	TileIndex =  590&lt;br /&gt;
			Case $49	TileIndex =  233&lt;br /&gt;
			Case $4A	TileIndex =  453&lt;br /&gt;
			Case $4B	TileIndex = 1050&lt;br /&gt;
			Case $4C	TileIndex = 1051&lt;br /&gt;
			Case $4D	TileIndex =  300&lt;br /&gt;
			Case $53	TileIndex =  154&lt;br /&gt;
			Case $56, $D7, $D6	TileIndex =  594&lt;br /&gt;
			Case $57	TileIndex =  150&lt;br /&gt;
			Case $58	TileIndex =  562&lt;br /&gt;
			Case $59	TileIndex =  250&lt;br /&gt;
			Case $5D	TileIndex =  299&lt;br /&gt;
			Case $5E	TileIndex =  201&lt;br /&gt;
			Case $61, $71, $82	TileIndex =  560&lt;br /&gt;
			Case $69	TileIndex =  674&lt;br /&gt;
			Case $6A	TileIndex =  605&lt;br /&gt;
			Case $6B	TileIndex = 1052&lt;br /&gt;
			Case $6C	TileIndex = 1053&lt;br /&gt;
			Case $6F	TileIndex =  100&lt;br /&gt;
			Case $70	TileIndex =  604&lt;br /&gt;
			Case $73, $77, $84	TileIndex =  559				&lt;br /&gt;
			Case $76	TileIndex =  580&lt;br /&gt;
			Case $78	TileIndex =   12&lt;br /&gt;
			Case $7C	TileIndex =  184&lt;br /&gt;
			Case $7E	TileIndex =  212&lt;br /&gt;
			Case $85&lt;br /&gt;
				TileIndex =    427&lt;br /&gt;
				If Maps[y+CamY+1, x] &amp;lt;&amp;gt; $85 Then TileIndex = 431&lt;br /&gt;
			Case $86&lt;br /&gt;
				TileIndex =    422&lt;br /&gt;
				If Maps[y+CamY+1, x] &amp;lt;&amp;gt; $86 Then TileIndex = 423&lt;br /&gt;
			Case $87&lt;br /&gt;
				TileIndex =    0&lt;br /&gt;
				If Maps[y+CamY+1, x] &amp;lt;&amp;gt; $87 Then TileIndex = 4&lt;br /&gt;
			Case $88&lt;br /&gt;
				TileIndex =    1&lt;br /&gt;
				If Maps[y+CamY+1, x] &amp;lt;&amp;gt; $88 Then TileIndex = 5&lt;br /&gt;
			Case $89	TileIndex =  558&lt;br /&gt;
			Case $8A	TileIndex =  554&lt;br /&gt;
			Case $8B	TileIndex =    3&lt;br /&gt;
			Case $8C	TileIndex =  587&lt;br /&gt;
			Case $90	TileIndex =  386&lt;br /&gt;
			Case $91	TileIndex =  499&lt;br /&gt;
			Case $92	TileIndex =  476&lt;br /&gt;
			Case $93	TileIndex =  477&lt;br /&gt;
			Case $94	TileIndex =  378&lt;br /&gt;
			Case $95	TileIndex =  379&lt;br /&gt;
			Case $A0	TileIndex =  416&lt;br /&gt;
			Case $A1	TileIndex =  420&lt;br /&gt;
			Case $A2	TileIndex =  418&lt;br /&gt;
			Case $A3	TileIndex =  424&lt;br /&gt;
			Case $A4	TileIndex =  426&lt;br /&gt;
			Case $A5	TileIndex =  425&lt;br /&gt;
			Case $A6	TileIndex =  414&lt;br /&gt;
			Case $A7	TileIndex =  649&lt;br /&gt;
			Case $A8	TileIndex =  643&lt;br /&gt;
			Case $A9	TileIndex =  646&lt;br /&gt;
			Case $AA	TileIndex =  648&lt;br /&gt;
			Case $AB	TileIndex =  644&lt;br /&gt;
			Case $AC	TileIndex =  645&lt;br /&gt;
			Case $B0	TileIndex =    2&lt;br /&gt;
			Case $B1	TileIndex =  598&lt;br /&gt;
			Case $B2	TileIndex =  586&lt;br /&gt;
			Case $B3	TileIndex =  856&lt;br /&gt;
			Case $BA	TileIndex =  583&lt;br /&gt;
			Case $BB	TileIndex =  588&lt;br /&gt;
			Case $BC	TileIndex =  589&lt;br /&gt;
			Case $BD	TileIndex =  579&lt;br /&gt;
			Case $BE	TileIndex =  578&lt;br /&gt;
			Case $BF	TileIndex =  540&lt;br /&gt;
			Case $C0	TileIndex =  544&lt;br /&gt;
			Case $C1	TileIndex =  546&lt;br /&gt;
			Case $C2	TileIndex =  547&lt;br /&gt;
			Case $C3	TileIndex = 1057&lt;br /&gt;
			Case $C4	TileIndex = 1061&lt;br /&gt;
			Case $C6	TileIndex =  442&lt;br /&gt;
			Case $CA	TileIndex =  584&lt;br /&gt;
			Case $CB	TileIndex =  582&lt;br /&gt;
			Case $C7	TileIndex =  443&lt;br /&gt;
			Case $CD	TileIndex =  590&lt;br /&gt;
			Case $CE	TileIndex = 1056&lt;br /&gt;
			Case $CF	TileIndex =  543&lt;br /&gt;
			Case $D0	TileIndex =  557&lt;br /&gt;
			Case $D1	TileIndex =  542&lt;br /&gt;
			Case $D5	TileIndex =  639&lt;br /&gt;
			Case $D8	TileIndex =  581&lt;br /&gt;
			Case $D9	TileIndex =  545&lt;br /&gt;
			Case $DA	TileIndex =  541&lt;br /&gt;
			Case $E7	TileIndex =  548&lt;br /&gt;
			Case $E8	TileIndex =  394&lt;br /&gt;
			Case $E9	TileIndex =  395&lt;br /&gt;
			Case $EA	TileIndex =  396&lt;br /&gt;
			Case $EB	TileIndex =  397&lt;br /&gt;
			Case $EC	TileIndex =  398&lt;br /&gt;
			Case $ED	TileIndex =  399&lt;br /&gt;
			Case $F0	TileIndex =  852&lt;br /&gt;
			Case $F3	TileIndex = 1044&lt;br /&gt;
			Case $F4	TileIndex =    8&lt;br /&gt;
			Case $F5	TileIndex =   10&lt;br /&gt;
			Case $F6	TileIndex =  182&lt;br /&gt;
			Case $F7	TileIndex =  183&lt;br /&gt;
			Case $F9	TileIndex =  553&lt;br /&gt;
			Case $FA	TileIndex =  561&lt;br /&gt;
			Case $FB	TileIndex =  585&lt;br /&gt;
			Case $FC	TileIndex =  498&lt;br /&gt;
			Case $FD	TileIndex =  499&lt;br /&gt;
			Case $FE	TileIndex =  476&lt;br /&gt;
			EndSelect&lt;br /&gt;
			&lt;br /&gt;
			&#039;Don&#039;t draw after a $5B value:&lt;br /&gt;
			If Maps[y+CamY, x-1] = $5B Then TileIndex = -1&lt;br /&gt;
			&lt;br /&gt;
			If TileImg And Not Textmode And MapTile = $C5&lt;br /&gt;
				DrawImage(TileImg, x*16, y*16, 536)&lt;br /&gt;
				DrawImage(TileImg, x*16, y*16, 539)&lt;br /&gt;
			ElseIf TileImg And Not Textmode And  TileIndex &amp;gt;= 0&lt;br /&gt;
				DrawImage(TileImg, x*16, y*16, TileIndex)&lt;br /&gt;
			ElseIf MapTile &amp;lt;&amp;gt; $20&lt;br /&gt;
				DrawText(Hex(MapTile)[6..], x*16, y*16+3)&lt;br /&gt;
			EndIf&lt;br /&gt;
		Next&lt;br /&gt;
	Next&lt;br /&gt;
	Flip&lt;br /&gt;
	&lt;br /&gt;
	If KeyDown(KEY_DOWN)&lt;br /&gt;
		CamY :+ 1&lt;br /&gt;
		If CamY &amp;gt; MaxY-30 Then CamY = MaxY-30&lt;br /&gt;
	EndIf&lt;br /&gt;
		&lt;br /&gt;
	If KeyDown(KEY_UP)&lt;br /&gt;
		CamY :- 1&lt;br /&gt;
		If CamY &amp;lt; 0 Then CamY = 0&lt;br /&gt;
	EndIf&lt;br /&gt;
		&lt;br /&gt;
	If KeyHit(KEY_TAB)&lt;br /&gt;
		Textmode = Not Textmode&lt;br /&gt;
	EndIf&lt;br /&gt;
Until KeyHit(KEY_ESCAPE) Or AppTerminate()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Credits ==&lt;br /&gt;
&lt;br /&gt;
The location of the map data was discovered by [[User:Lemm|Lemm]].  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>Frenkel</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=ProGraphx_Toolbox_tileset_format&amp;diff=4813</id>
		<title>ProGraphx Toolbox tileset format</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=ProGraphx_Toolbox_tileset_format&amp;diff=4813"/>
		<updated>2013-08-04T20:42:34Z</updated>

		<summary type="html">&lt;p&gt;Frenkel: /* Header */ Duke Nukem: numbers.dn? contains 44 sprites and is therefore padded up to 7168 bytes.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Tileset Infobox&lt;br /&gt;
 | Hardware1 = EGA&lt;br /&gt;
 | MaxTiles = 255 per subtileset, unlimited subtilesets&lt;br /&gt;
 | Palette = Default EGA&lt;br /&gt;
 | Names = N&lt;br /&gt;
 | TileMinSize = 0&amp;amp;times;0&lt;br /&gt;
 | TileMaxSize = 2040&amp;amp;times;255&lt;br /&gt;
 | NumPlanes = 5&lt;br /&gt;
 | PlaneArrangement = [[Byte-planar EGA]]&lt;br /&gt;
 | HasTransparency = Y&lt;br /&gt;
 | HasHitmap = N&lt;br /&gt;
 | Metadata = None&lt;br /&gt;
 | Subtilesets = Y&lt;br /&gt;
 | Compressed = N&lt;br /&gt;
 | Hidden = N&lt;br /&gt;
 | Game1 = Dark Ages&lt;br /&gt;
 | Game2 = Duke Nukem&lt;br /&gt;
 | Game3 = Crystal Caves&lt;br /&gt;
 | Game4 = Secret Agent&lt;br /&gt;
}}&lt;br /&gt;
This file format is used by the ProGraphx Toolbox to store images used for map tiles in a game.&lt;br /&gt;
__TOC__&lt;br /&gt;
The ProGraphx Toolbox, written by Peder Jungck, is used by the following games:&lt;br /&gt;
&lt;br /&gt;
* [[Dark Ages]] - &amp;lt;tt&amp;gt;DA3.EXE&amp;lt;/tt&amp;gt; contains the string &#039;&#039;Version 1.0 EGA/VGAProGraphx EGA/VGA Toolbox (DA1.EXE and DA2.exe contain gibberish)&#039;&#039;&lt;br /&gt;
* [[Duke Nukem]] - &amp;lt;tt&amp;gt;DN1.EXE&amp;lt;/tt&amp;gt; contains the string &#039;&#039;Version 1.0 EGA/VGAProGraphx EGA/VGA Toolbox&#039;&#039;&lt;br /&gt;
* [[Crystal Caves]] - &amp;lt;tt&amp;gt;CC1.EXE&amp;lt;/tt&amp;gt; contains the string &#039;&#039;Version 1.5 320x200 PAN EGA/VGAProGraphx EGA/VGA Toolbox&#039;&#039;&lt;br /&gt;
* [[Secret Agent]] - &amp;lt;tt&amp;gt;SAM1.EXE&amp;lt;/tt&amp;gt; contains the string &#039;&#039;ProGraphx EGA/VGA Toolbox Version 2.0 320x200 EGA/VGA Copyright 1991 by Peder Jungck&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== File format ==&lt;br /&gt;
&lt;br /&gt;
The file consists of a number of tilesets one after the other.  Each tileset is made up of a collection of small images (usually 8&amp;amp;times;8 or 16&amp;amp;times;16, but the format supports up to 2040&amp;amp;times;255.)&lt;br /&gt;
&lt;br /&gt;
In &#039;&#039;&#039;Secret Agent&#039;&#039;&#039; the files are encrypted with [[Secret Agent encryption]].   In the other games there is no encryption.&lt;br /&gt;
&lt;br /&gt;
=== Signature ===&lt;br /&gt;
&lt;br /&gt;
There is no signature, however careful processing of the header can be used to check whether the last tileset ends at exactly the end of the file (allowing for padding in some versions of the format.)  If not, it is unlikely to be in this format.  Be careful that files with zero values don&#039;t cause an endless loop when calculating offsets.&lt;br /&gt;
&lt;br /&gt;
=== Header ===&lt;br /&gt;
&lt;br /&gt;
Each tileset begins with the following header.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Data type!!Description&lt;br /&gt;
|-&lt;br /&gt;
|[[BYTE]] count||Number of sprites in this chunk (50 in most cases)&lt;br /&gt;
|-&lt;br /&gt;
|[[BYTE]] width||Sprite width, in bytes (not in pixels)&lt;br /&gt;
|-&lt;br /&gt;
|[[BYTE]] height||Sprite height, in pixels&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The image data for the tileset follows the header.  After the image data either the next header begins, or the file ends.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Dark Ages:&#039;&#039;&#039; Each tileset is padded up to 8064 bytes, except for the last tileset which contains 2 sprites and is padded up to 384 bytes.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Duke Nukem:&#039;&#039;&#039; Each tileset is padded up to 8064 bytes, except for &amp;lt;tt&amp;gt;NUMBERS.DN?&amp;lt;/tt&amp;gt; (7186 bytes) and the backdrop files (&amp;lt;tt&amp;gt;DROP*.DN?&amp;lt;/tt&amp;gt;) which have no padding.  The backdrop files also have all three header bytes set to zero.  For these files, the number of sprites is always 130, the width is always 2 (bytes) and the height is always 16.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Crystal Caves:&#039;&#039;&#039; The file ends after the last tile&#039;s image data, there is no padding.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Secret Agent:&#039;&#039;&#039; Each tileset is padded up to 8064 bytes for 16&amp;amp;times;16 sprite files (&amp;lt;tt&amp;gt;SAM?01.GFX&amp;lt;/tt&amp;gt;), and 2048 bytes for 8&amp;amp;times;8 sprite files (&amp;lt;tt&amp;gt;SAM?02.GFX&amp;lt;/tt&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
For those files with padding at the end, be careful not to interpret the padding as the presence of more tiles.&lt;br /&gt;
&lt;br /&gt;
=== Image data ===&lt;br /&gt;
&lt;br /&gt;
The image data is in [[Byte-planar EGA]] format with five planes, so reading &amp;lt;tt&amp;gt;width &amp;amp;times; height &amp;amp;times; 5&amp;lt;/tt&amp;gt; bytes will read in enough data for a single image (one tile.)  This value multiplied by the number of tiles (&amp;lt;tt&amp;gt;count&amp;lt;/tt&amp;gt;) will yield the number of bytes in the entire tileset, which can be used to skip directly to the next tileset in the file (if any.)&lt;br /&gt;
&lt;br /&gt;
The first byte in each tile&#039;s data is the transparency plane (1 == opaque, 0 == transparent), and the following four bytes/planes are blue, green, red and intensity.  The MSB in each byte (10000000) is the first/left-most pixel, and the eighth pixel is the LSB (00000001).  This means if the bits are processed in a loop, as the X direction increases to the right (0, 1, 2) the bit value decreases (0x80, 0x40, 0x20.)&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
* For at least &#039;&#039;&#039;Duke Nukem&#039;&#039;&#039;, the game seems to ignore the header of &#039;&#039;all&#039;&#039; files in this format.  You can set the entire header of any tileset file to zero values and the game will still load them properly.  This also means that you cannot use larger tilesets without modifying the executable.&lt;br /&gt;
&lt;br /&gt;
== Credits ==&lt;br /&gt;
&lt;br /&gt;
This file format has been reverse engineered by many people over the years.  [[User:K1n9_Duk3|K1n9_Duk3]] discovered that Duke Nukem uses this format.  [[User:Frenkel|Frenkel]] identified the similarities amongst all the games using the file format, and realised they all use the ProGraphx Toolbox.  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>Frenkel</name></author>
	</entry>
</feed>