<?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=Jaguar</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=Jaguar"/>
	<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/wiki/Special:Contributions/Jaguar"/>
	<updated>2026-06-09T22:15:19Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.11</generator>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Duke_Nukem_3D&amp;diff=8775</id>
		<title>Duke Nukem 3D</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Duke_Nukem_3D&amp;diff=8775"/>
		<updated>2019-07-25T04:35:09Z</updated>

		<summary type="html">&lt;p&gt;Jaguar: Added Palette formats link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Stub}}&lt;br /&gt;
&lt;br /&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 = No&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
{{BeginFileFormatTools|Type=game}}&lt;br /&gt;
{{FileFormatTool&lt;br /&gt;
| Name = [[Build]]&lt;br /&gt;
| Platform = DOS&lt;br /&gt;
| grp = No&lt;br /&gt;
| map = Edit&lt;br /&gt;
| gfx = View&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;
{{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;
{{FileFormatTool&lt;br /&gt;
| Name = EditART&lt;br /&gt;
| Platform = DOS&lt;br /&gt;
| grp = No&lt;br /&gt;
| map = No&lt;br /&gt;
| gfx = Yes&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;
{{FileFormatTool&lt;br /&gt;
| Name = [https://gist.github.com/jasonsperske/31324a0cdffd8edf9683 GRPParser.py]&lt;br /&gt;
| Platform = Python&lt;br /&gt;
| grp = Read&lt;br /&gt;
| map = Convert to .svg&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;
{{FileFormatTool&lt;br /&gt;
| Name = Kextract/Kgroup&lt;br /&gt;
| Platform = DOS&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;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* [http://dukenukem.wikia.com/wiki/Portal:Duke_Nukem_3D Duke Nukem 3D portal] on the Duke Nukem wiki&lt;br /&gt;
* [http://dukeworld.duke4.net/ Dukeworld] on [http://duke4.net Duke4.net]&lt;br /&gt;
&lt;br /&gt;
{{BeginGameFileList}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.anm&lt;br /&gt;
 | Format = [[ANM Format (Duke Nukem 3D)]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Intro and story cutscenes&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.art&lt;br /&gt;
 | Format = [[ART Format (Build)]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Level textures&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.bin&lt;br /&gt;
 | Format = [[B800 Text]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Exit text screens&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.con&lt;br /&gt;
 | Format = ASCII text in [[CON Format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Game parameters and scripting&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.dmo&lt;br /&gt;
 | Format = [[DMO Format (Build)]]&lt;br /&gt;
 | KnownFormat = No&lt;br /&gt;
 | Desc = Demo macros&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.grp&lt;br /&gt;
 | Format = [[GRP 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 = *.map&lt;br /&gt;
 | Format = [[MAP Format (Build)]]&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 = *.rts&lt;br /&gt;
 | Format = [[RTS Format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = &#039;&#039;RemoteRidicule&#039;&#039; multiplayer audio taunts&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = gmtimbre.tmb&lt;br /&gt;
 | Format = [[TMB Format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = FM patches for MIDI music&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;
{{GameFile&lt;br /&gt;
 | Name = palette.dat&amp;lt;br/&amp;gt;lookup.dat&lt;br /&gt;
 | Format = [[Duke Nukem 3D Palette Format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Palette data for sprites and textures&lt;br /&gt;
}}&lt;br /&gt;
{{EndGameFileList}}&lt;br /&gt;
&lt;br /&gt;
== Modding tips ==&lt;br /&gt;
* The game directory is searched for files before looking inside DUKE3D.GRP.  This means when you replace a file you don&#039;t need to copy it inside DUKE3D.GRP to test it.&lt;br /&gt;
* The game has a command-line option to load custom .GRP files.  This means you can package your mod into a single GRP file and distribute it easily.  Any game files not in your .GRP file will be loaded from the main DUKE3D.GRP.&lt;br /&gt;
&lt;br /&gt;
[[Category:3DRealms]]&lt;br /&gt;
[[Category:3D]]&lt;br /&gt;
[[Category:First-Person Shooter]]&lt;br /&gt;
[[Category:Build engine]]&lt;/div&gt;</summary>
		<author><name>Jaguar</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Duke_Nukem_3D_Palette_Format&amp;diff=8774</id>
		<title>Duke Nukem 3D Palette Format</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Duke_Nukem_3D_Palette_Format&amp;diff=8774"/>
		<updated>2019-07-25T02:55:32Z</updated>

		<summary type="html">&lt;p&gt;Jaguar: Created Palette page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Palette Infobox&lt;br /&gt;
 | Hardware = VGA&lt;br /&gt;
 | Depth = 18-bit&lt;br /&gt;
 | Count = 256&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Duke Nukem 3D stores its palette information in the files &#039;&#039;PALETTE.DAT&#039;&#039; and &#039;&#039;LOOKUP.DAT&#039;&#039;. The game only uses 256 colours, but uses various lookup tables to give the appearance of varying levels and colours of light.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;PALETTE.DAT&#039;&#039; contains the palette for the entire game along with shading and translucency lookups.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;LOOKUP.DAT&#039;&#039; contains the lookup tables for the various virtual palettes used within the game other than palette 0.&lt;br /&gt;
&lt;br /&gt;
==PALETTE.DAT format==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;PALETTE.DAT&#039;&#039; is made up of 3 sections; Palette data, shade tables and a translucency table.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Data type !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] [256][3] || palette || The game palette data stored as a standard [[VGA_Palette#The &amp;quot;Classic&amp;quot; format|6-bit VGA palette]].&lt;br /&gt;
|-&lt;br /&gt;
| [[INT16LE]] || numpalookups || The number of palette lookup tables in the file&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] [numpalookups][256] || palookup || Array of simple lookup tables for each palette entry&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] [256][256] || transluc || 2-dimensional array to find the blended result of two palette entries&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Shade Tables===&lt;br /&gt;
&lt;br /&gt;
The shade tables are simple lookup tables that translate a given palette entry to its equivalent at a given level of darkness.&lt;br /&gt;
&lt;br /&gt;
===Translucency Table===&lt;br /&gt;
&lt;br /&gt;
The translucency table is a 2-dimensional array that gives a result when two palette entries are alpha-blended together. &lt;br /&gt;
&lt;br /&gt;
==LOOKUP.DAT format==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;LOOKUP.DAT&#039;&#039; is made up of 2 sections; Palette swap tables and alternate palettes. Alternate palettes are used for full-screen animations such as the title screen and episode cut-scenes&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Data type !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || spritepals || The number of palette lookup tables in the file&lt;br /&gt;
|-&lt;br /&gt;
| PALETTE_SWAP [spritepals] || palette_swaps|| Array of simple lookup tables for each palette entry&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] [n][256][3] || alt_palettes || Animation palettes stored as a standard [[VGA_Palette#The &amp;quot;Classic&amp;quot; format|6-bit VGA palette]]. These palettes take up the remainder of the file&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Palette Swap format===&lt;br /&gt;
&lt;br /&gt;
Each PALETTE_SWAP is defined as the following 257-byte 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;
| [[UINT8]] || palette_swap_index || The index of this palette in the game&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] [256] || palette_swap_table|| Lookup table for this palette&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Jaguar</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=ART_Format_(Build)&amp;diff=8773</id>
		<title>ART Format (Build)</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=ART_Format_(Build)&amp;diff=8773"/>
		<updated>2019-07-24T06:13:50Z</updated>

		<summary type="html">&lt;p&gt;Jaguar: /* Tile Attributes */ Re-ordered attributes to match buildinf.txt, line 65-84&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Tileset Infobox&lt;br /&gt;
 | Hardware1 = VGA&lt;br /&gt;
 | MaxTiles = 2&amp;lt;sup&amp;gt;31&amp;lt;/sup&amp;gt; - 1&lt;br /&gt;
 | Palette = Shared VGA&lt;br /&gt;
 | Names = N&lt;br /&gt;
 | TileMinSize = 0&amp;amp;times;0&lt;br /&gt;
 | TileMaxSize = 32767&amp;amp;times;32767&lt;br /&gt;
 | NumPlanes = 1&lt;br /&gt;
 | PlaneArrangement = [[Linear VGA]]&lt;br /&gt;
 | HasTransparency = N&lt;br /&gt;
 | HasHitmap = N&lt;br /&gt;
 | Metadata = None&lt;br /&gt;
 | Subtilesets = N&lt;br /&gt;
 | Compressed = N&lt;br /&gt;
 | Hidden = N&lt;br /&gt;
 | Games = &lt;br /&gt;
   {{Game|Blood}}&lt;br /&gt;
   {{Game|Duke Nukem 3D}}&lt;br /&gt;
   {{Game|Shadow Warrior}}&lt;br /&gt;
   {{Game|Redneck Rampage}}&lt;br /&gt;
}}&lt;br /&gt;
The &#039;&#039;&#039;ART format&#039;&#039;&#039; is used by Ken Silverman&#039;s Build engine to store game textures and sprites. It contains a number of individual graphics called tiles.&lt;br /&gt;
&lt;br /&gt;
== File Names and Tile Numbers ==&lt;br /&gt;
According to Ken Silverman&#039;s documentation, ART files can be named anything, as long as they end in three digits and .ART, but for most games they are named TILES###.ART. The Build engine games will load these in order starting from 000 until they can&#039;t find any more. Every tile in the game has a numerical index, and each ART file for a particular game holds a range of these. For example, TILES000.ART may hold tiles 0 to 255, and TILES001.ART would hold tiles 256-511. The range of indexes held by a particular file are indicated in the header. The tiles are normally stored sequentially (TILES000.ART holding the first set, and each higher numbered file continuing where the previous left off) with a consistent number of tiles per file, but it is up to the particular game&#039;s developers.&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;
| [[INT32LE]]&lt;br /&gt;
| artversion&lt;br /&gt;
| version number, should be 1&lt;br /&gt;
|-&lt;br /&gt;
| [[INT32LE]]&lt;br /&gt;
| numtiles&lt;br /&gt;
| number of tiles, unused. The number of tiles can be determined by the localtilestart and localtileend fields.&lt;br /&gt;
|-&lt;br /&gt;
| [[INT32LE]]&lt;br /&gt;
| localtilestart&lt;br /&gt;
| number of first tile in this file&lt;br /&gt;
|-&lt;br /&gt;
| [[INT32LE]]&lt;br /&gt;
| localtileend&lt;br /&gt;
| number of last tile in this file.&lt;br /&gt;
|-&lt;br /&gt;
| [[INT16LE]][localtileend-localtilestart + 1]&lt;br /&gt;
| tilesizx&lt;br /&gt;
| array of the x-dimensions of all of the tiles in the file&lt;br /&gt;
|-&lt;br /&gt;
| [[INT16LE]][localtileend-localtilestart + 1]&lt;br /&gt;
| tilesizy&lt;br /&gt;
| array of the y-dimensions of all of the tiles in the file&lt;br /&gt;
|-&lt;br /&gt;
| [[INT32LE]][localtileend-localtilestart + 1]&lt;br /&gt;
| picanm&lt;br /&gt;
| array of attributes for all the tiles&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Tile Attributes ==&lt;br /&gt;
&lt;br /&gt;
Entries in the picanm array store several properties for each tile:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! bits 31-28&lt;br /&gt;
! bits 27-24 (4 bit unsigned integer)&lt;br /&gt;
! bits 23-16 (8 bit signed integer)&lt;br /&gt;
! bits 15-8 (8 bit signed integer)&lt;br /&gt;
! bits 7 and 6 (2 bit enumeration)&lt;br /&gt;
! bits 5-0 (6-bit unsigned integer)&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| unused?&lt;br /&gt;
| Animation speed&lt;br /&gt;
| Y-center offset&lt;br /&gt;
| X-center offset&lt;br /&gt;
| Animation type:&lt;br /&gt;
* 00 = no animation&lt;br /&gt;
* 01 = oscillating animation&lt;br /&gt;
* 10 = animate forward&lt;br /&gt;
* 11 = animate backward&lt;br /&gt;
| Number of frames&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Pixel Data ==&lt;br /&gt;
&lt;br /&gt;
The pixels are stored as bytes, corresponding to indexes in the palette stored in PALETTE.DAT. The pixels in each tile are stored columnwise, starting from the top-left. For a 4x4 tile, the offsets for each pixel would be arranged like this:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|  0 ||  4 ||  8 || 12&lt;br /&gt;
|-&lt;br /&gt;
|  1 ||  5 ||  9 || 13&lt;br /&gt;
|-&lt;br /&gt;
|  2 ||  6 || 10 || 14&lt;br /&gt;
|-&lt;br /&gt;
|  3 ||  7 || 11 || 15&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Source ==&lt;br /&gt;
&lt;br /&gt;
* This information comes from &amp;lt;tt&amp;gt;[https://github.com/jonof/jfbuild/blob/master/doc/buildinf.txt BUILDINF.TXT]&amp;lt;/tt&amp;gt; in the [http://advsys.net/ken/buildsrc/default.htm Build source] files, written by Ken Silverman.&lt;br /&gt;
&lt;br /&gt;
[[Category:Build engine]]&lt;/div&gt;</summary>
		<author><name>Jaguar</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Jill_of_the_Jungle_Map_Format&amp;diff=4644</id>
		<title>Jill of the Jungle Map Format</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Jill_of_the_Jungle_Map_Format&amp;diff=4644"/>
		<updated>2013-05-31T23:20:09Z</updated>

		<summary type="html">&lt;p&gt;Jaguar: /* Items &amp;amp; Bonus */ Corrected speling mistake&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Stub}}&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;Jill of the Jungle map format&#039;&#039;&#039; is the format used to describe the levels played during the game.  The maps contain two layers - a background layer and an &amp;quot;object&amp;quot; layer.  The background layer is a grid of 16x16 pixel tiles, 128 tiles wide and 64 tiles high.  The object layer is made up of an arbitrary list of objects, with X and Y offsets in pixels.&lt;br /&gt;
&lt;br /&gt;
== File format ==&lt;br /&gt;
&lt;br /&gt;
The main map file starts off with the background layer, then immediately following it is the foreground layer, the savegame data block and the string stack.&lt;br /&gt;
&lt;br /&gt;
=== Background layer ===&lt;br /&gt;
&lt;br /&gt;
The background layer is quite simple.  It is an array of 8,192 16-bit values (128 tiles wide by 64 tiles high == 8192 tiles total.)  Each 16-bit value is a code, such as 0xC0D3.  The formula &amp;lt;b&amp;gt;((x * MAP_HEIGHT) + y) * 2&amp;lt;/b&amp;gt; (where MAP_HEIGHT is 64) will provide the offset (in bytes) into the map file where that grid&#039;s 16-bit code is located.&lt;br /&gt;
&lt;br /&gt;
Once the code is found, its lower three nybbles are isolated (e.g. &amp;lt;b&amp;gt;code &amp;amp; 0xFFF&amp;lt;/b&amp;gt;) which provides an ID that is listed in the tile mapping table (see below.)  The tile mapping table then provides an index into the graphics file for the image that should be displayed at that grid location.&lt;br /&gt;
&lt;br /&gt;
For example, if the 16-bit code is 0xC0D3, then isolating the lower three nybbles will provide the number 0x00D3.  At the entry for ID 0x00D3 in the tile mapping table, the value might be iTileset as 0x12 and iTile as 0x34.  This means that in the graphics file, tileset number 0x12 should be accessed, and tile number 0x34 within that tileset should be drawn at the grid coordinate.&lt;br /&gt;
&lt;br /&gt;
It is also important to note that these values are stored little-endian, like the [[SHA Format|SHA format]]. This means that for example the value 0xC0D3 is stored as the two bytes D3-C0, not as C0-D3.&lt;br /&gt;
&lt;br /&gt;
==== Tile mapping table ====&lt;br /&gt;
&lt;br /&gt;
There is a separate file in the game directory that contains mappings between tile codes in the background layer and the game&#039;s graphics.  In [[Jill of the Jungle]] this is called &amp;lt;tt&amp;gt;JILL.DMA&amp;lt;/tt&amp;gt; and in [[Xargon]] it is &amp;lt;tt&amp;gt;TILES.XR&amp;lt;i&amp;gt;x&amp;lt;/i&amp;gt;&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This file is arranged as an array of entries, one after the other.  Each entry is in the following format:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Data type!!Description&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] iMapCode || ID used in map file&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] iTile || Index into the tileset for the image to use&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] iTileset || Index of tileset containing this tile&#039;s image (ignore upper two bits - see below)&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] iFlags || Flags for this tile (can stand on, can hurt player, etc.)&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] iLength || Length of tile name&lt;br /&gt;
|-&lt;br /&gt;
| [[char]] cName[iLength] || &amp;lt;tt&amp;gt;iLength&amp;lt;/tt&amp;gt; characters for the tile name.  This string is &amp;lt;b&amp;gt;not&amp;lt;/b&amp;gt; NULL-terminated.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note that only the lower six bits of &amp;lt;tt&amp;gt;iTileset&amp;lt;/tt&amp;gt; refer to the tile number.  The purpose of the upper unknown bits is unknown.  To get a valid tileset index use &amp;lt;code&amp;gt;iTileset &amp;amp; 0x3F&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;iFlags&amp;lt;/tt&amp;gt; is broken up as follows:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Bit!!Hex!!Name!!Description&lt;br /&gt;
|-&lt;br /&gt;
||-||0x0000||&amp;lt;i&amp;gt;&amp;lt;zero&amp;gt;&amp;lt;/i&amp;gt;||Default solid block&lt;br /&gt;
|-&lt;br /&gt;
|1||0x0001||F_PLAYERTHRU||Blocks you can walk, jump or fall through (background tiles, the path on the overhead map, etc.)&lt;br /&gt;
|-&lt;br /&gt;
|2||0x0002||F_STAIR, F_NOTSTAIR (Xargon)||Blocks that you can stand on (can also jump up through when combined with F_PLAYERTHRU)&lt;br /&gt;
|-&lt;br /&gt;
|3||0x0004||F_VINE, F_NOTVINE (Xargon)||Can climb this block - usually combined with F_PLAYERTHRU (giving 0x0005)&lt;br /&gt;
|-&lt;br /&gt;
|4||0x0008||F_MSGTOUCH||Activates game-specific code when touched&lt;br /&gt;
|-&lt;br /&gt;
|5||0x0010||F_MSGDRAW|| Regular blocks have just one shape, f_msgdraw triggers &amp;lt;tt&amp;gt;msg_block(msg_draw)&amp;lt;/tt&amp;gt; for animated blocks.&lt;br /&gt;
|-&lt;br /&gt;
|6||0x0020||F_MSGUPDATE|| game-specific code (through &amp;lt;tt&amp;gt;msg_block(msg_update)&amp;lt;/tt&amp;gt;) at every frame. For animated blocks.&lt;br /&gt;
|-&lt;br /&gt;
|7||0x0040||F_INSIDE||This block contains text inside it&lt;br /&gt;
|-&lt;br /&gt;
|8||0x0080||F_FRONT|| object property : Foreground object&lt;br /&gt;
|-&lt;br /&gt;
|9||0x0100||F_TRIGGER||Unknown&lt;br /&gt;
|-&lt;br /&gt;
|10||0x0200||F_BACK || object property: Background object (e.g. torches)&lt;br /&gt;
|-&lt;br /&gt;
|10||0x0200||F_TINYTHRU|| (likely PlayerThru when player is in &#039;mini&#039; mode, unused in Xargon)&lt;br /&gt;
|-&lt;br /&gt;
|11||0x0400||F_ALWAYS|| object property : &amp;quot;Always updates object&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|12||0x0800||F_KILLABLE|| object property : monster can be killed with regular weapon.&lt;br /&gt;
|-&lt;br /&gt;
|13||0x1000||F_FIREBALL|| object property : object is a fireball&lt;br /&gt;
|-&lt;br /&gt;
|14||0x2000||F_WATER|| A water tile. regular player will sink, the S.U.B. and aquatic monster can swim through it, but not out of it&lt;br /&gt;
|-&lt;br /&gt;
|14||0x4000||F_NOT_WATER|| (Xargon) Not a water tile.&lt;br /&gt;
|-&lt;br /&gt;
|15||0x4000||F_WEAPON|| object property : object is a regular weapon&lt;br /&gt;
|-&lt;br /&gt;
|16||0x8000||(unused)||(unused)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note that the same &amp;quot;flag set&amp;quot; is used for both blocks and objects. Some properties only apply to blocks, some only apply to objects, some to both (&amp;lt;tt&amp;gt;f_msgtouch&amp;lt;/tt&amp;gt;), and some flags have a different meaning for blocks and tile (e.g. 0x200 and 0x2000).&lt;br /&gt;
&lt;br /&gt;
=== Object layer ===&lt;br /&gt;
&lt;br /&gt;
The object layer is drawn in front of the background layer, and contains all the interactive elements of the map, such as points and enemies.&lt;br /&gt;
&lt;br /&gt;
The object data starts straight after the background layer data, so that&#039;s at offset 16,384 bytes into the map file (8,192 tiles * two bytes per tile.)  The first two bytes in the object layer are a 16-bit integer ([[UINT16LE]]) that stores the number of objects in the map, and this is followed by the data for each object, one after the other.&lt;br /&gt;
&lt;br /&gt;
Each object is 31 bytes long, and is stored in the following structure:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Data type!!Description&lt;br /&gt;
|-&lt;br /&gt;
|UINT8 iType||Object type (e.g. a &amp;quot;point item&amp;quot;, or an enemy.)&lt;br /&gt;
|-&lt;br /&gt;
|UINT16 iX||X-coordinate of object&lt;br /&gt;
|-&lt;br /&gt;
|UINT16 iY||Y-coordinate of object&lt;br /&gt;
|-&lt;br /&gt;
|UINT16 iXD|| object horizontal speed&lt;br /&gt;
|-&lt;br /&gt;
|UINT16 iYD|| object vertical speed&lt;br /&gt;
|-&lt;br /&gt;
|UINT16 iWidth||Width of object&lt;br /&gt;
|-&lt;br /&gt;
|UINT16 iHeight||Height of object&lt;br /&gt;
|-&lt;br /&gt;
|UINT16 iState||Object sub-type (e.g. what type of &amp;quot;point item&amp;quot;), or current &amp;quot;State&amp;quot; (running, jumping, etc)&lt;br /&gt;
|-&lt;br /&gt;
|UINT16 iSubState||&amp;lt;i&amp;gt;object-specific semantic&amp;lt;/i&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|UINT16 iStateCount||&amp;lt;i&amp;gt;object-specific semantic, typically a frame counter&amp;lt;/i&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|UINT16 iCounter||Various uses. Often used to link doors or switches to obstacles.&lt;br /&gt;
|-&lt;br /&gt;
|UINT16 iFlags|| internally used for rendering.&lt;br /&gt;
|-&lt;br /&gt;
|UINT32 lPointer||Used internally as a pointer.  If this value is 0, there is no entry for this object in the string stack (see below.)  Any non-zero value means there is an entry for this object in the string stack.&lt;br /&gt;
|-&lt;br /&gt;
|UINT16 iInfo1||&amp;lt;i&amp;gt;Unknown&amp;lt;/i&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|UINT16 iZapHold||&amp;lt;i&amp;gt;Unknown&amp;lt;/i&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
At the present time it is assumed (perhaps hoped) that objects can be mapped to images in the same way as the tiles in the background layer can be mapped to images, but as yet there is no known way of doing this.&lt;br /&gt;
&lt;br /&gt;
=== Savegame datas ===&lt;br /&gt;
&lt;br /&gt;
Saved games in Jill are &amp;quot;snapshots&amp;quot; of the current level state, that&#039;s why some spare room exists in the map format to allow special data to be saved. The unsigned short integer is the level number (as displayed in the status screen). The second unsigned short integer is JILL&#039;s health. The next unsigned short integer is the amount of items displayed in the inventory. Each of the following 16 unsigned short integers represent an item in the inventory (note that used items such as keys are not removed from this stack, but items are rearranged to override the key value, according to the amount of items displayed in the inventory). Right after, the unsigned long integer stores the score. Then, there are 28 empty bytes to fill the block.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!InvItemNumber!!Description&lt;br /&gt;
|-&lt;br /&gt;
|0|| Morph: Jill&lt;br /&gt;
|-&lt;br /&gt;
|1|| Key: Red Key&lt;br /&gt;
|-&lt;br /&gt;
|2|| Weapon: Knive&lt;br /&gt;
|-&lt;br /&gt;
|3|| Key: Crystal Rock&lt;br /&gt;
|-&lt;br /&gt;
|4|| Morph: Frog&lt;br /&gt;
|-&lt;br /&gt;
|5|| Morph: Fire bird&lt;br /&gt;
|-&lt;br /&gt;
|6|| Bag of coins (?)&lt;br /&gt;
|-&lt;br /&gt;
|7|| Morph: Fish&lt;br /&gt;
|-&lt;br /&gt;
|8|| Weapon: Blade&lt;br /&gt;
|-&lt;br /&gt;
|9|| Bonus: High Jump&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
In Jill of the Jungle, this section is 70 bytes long.  In Xargon it is 97 bytes long.&lt;br /&gt;
&lt;br /&gt;
=== String stack ===&lt;br /&gt;
&lt;br /&gt;
The Strings Stack is just a bunch of arbitrary strings (can be either text or file references). Each entry starts with an unsigned short integer defining the length of the incoming string. Note that the string is always followed by a null byte (so if &amp;quot;length of next entry&amp;quot; is 12, you only have the string size and should not forget to read an extra byte to reach the next entry). The string stack&#039;s entries are used for iType[20] (&amp;quot;write text&amp;quot;), 21 (&amp;quot;write text in big&amp;quot;) and 12 (&amp;quot;checkpoints&amp;quot;) and can contain music filenames, demo filenames, next level filenames or arbitrary text content.&lt;br /&gt;
&lt;br /&gt;
In Xargon ans Jill, the checkpoint type contains a string:&lt;br /&gt;
&lt;br /&gt;
* If the first character of this string is &#039;*&#039; then the rest of the string is taken to be the filename of the music file to play in that level.&lt;br /&gt;
* If the first character is &#039;#&#039; then the string is also a music file, but it is only played if there is no song currently playing, or the level number is between 1 and 32 inclusive.  This is probably used for the main menu/credits/etc. so as not to interrupt the theme song when displaying those &amp;quot;levels&amp;quot;, and it is used for the map level so the theme music keeps playing (rather than starting from the beginning again) when starting a game.&lt;br /&gt;
* The first character of the string can also be &#039;&amp;amp;&#039; which, in Xargon, forces the song to be &amp;lt;tt&amp;gt;song_33.xr1&amp;lt;/tt&amp;gt; and in Jill does not change the song. The rest of the string as a macro filename, to be read and played back as a demo.  This is used in the ending sequences.&lt;br /&gt;
&lt;br /&gt;
== Object iTypes ==&lt;br /&gt;
&lt;br /&gt;
Here&#039;s a list of objects used in Jill maps.&lt;br /&gt;
&lt;br /&gt;
iXD and iYD defines both speed and direction of items and ennemies. Positive values goes to right and down while values under zero move the object left and up.&lt;br /&gt;
lPointer referes to a segment of memory and is likely used to store entries from the string stack, that&#039;s why the gap between two consecutive pointers equals 65536 (this is the maximum size in byte of a string in the stack)&lt;br /&gt;
Playable objects must be the first entry in the list to avoid a weird &amp;quot;scroll to first entity&amp;quot; bug in Jill&lt;br /&gt;
&lt;br /&gt;
=== Functional ===&lt;br /&gt;
&lt;br /&gt;
*iType[0]	&#039;&#039;(PLAYER)&#039;&#039;	Playable: Jill (level)&lt;br /&gt;
:ObjectInfo1 (sometimes &#039;-1&#039;): usage unknown&lt;br /&gt;
*iType[23]	&#039;&#039;(TINY)&#039;&#039;	Playable: Jill (map overview in Jill3)		&lt;br /&gt;
*iType[54]	&#039;&#039;(JILLFISH)&#039;&#039;	Playable: Fish (never used in maps - if player dies, restart as Jill)&lt;br /&gt;
*iType[56]	&#039;&#039;(JILLBIRD)&#039;&#039;	Playable: Firebird (never used in maps - if player dies, restart as Jill)&lt;br /&gt;
*iType[57]	&#039;&#039;(JILLFROG)&#039;&#039;	Playable: Frog (never used in maps - if player dies, restart as Jill)&lt;br /&gt;
*iType[12]	&#039;&#039;(CHECKPT)&#039;&#039;	Trigger: Checkpoint&lt;br /&gt;
:iXD (&#039;&amp;gt; 0&#039;): X position of start in new map&lt;br /&gt;
:iYD (&#039;&amp;gt; 0&#039;): Y position of start in new map&lt;br /&gt;
:iState: If set to 1, the level is reset to it&#039;s initial state if player dies. If set to 0, the level&#039;s state is unchanged if player dies.&lt;br /&gt;
:iCounter (&#039;&amp;gt;= 0&#039;): checkpoint/level number&lt;br /&gt;
:iPointer: pointer&lt;br /&gt;
:&#039;&#039;&#039;NOTE:&#039;&#039;&#039; Always lock access to previous checkpoint when the player reaches a new checkpoint. This item reads an entry from the string stack: a single-character code and a filename. If the code is &amp;quot;*&amp;quot;, it means &amp;quot;load and play this song from the beginning&amp;quot;. If the code is &amp;quot;#&amp;quot;, it means &amp;quot;keep on playing this song&amp;quot;. If the code is &amp;quot;!&amp;quot;, then there&#039;s no filename and it means &amp;quot;load previous map&amp;quot;. If there&#039;s no code, then the filename is the next level to load.&lt;br /&gt;
*iType[15]	&#039;&#039;(PAD)&#039;&#039;	Trigger: Touch Trigger&lt;br /&gt;
:iCounter (&#039;&amp;gt;= 0&#039;): target tag&lt;br /&gt;
*iType[32]	&#039;&#039;(SWITCH)&#039;&#039;	Trigger: Switch&lt;br /&gt;
:iState (usually &#039;0&#039;): switch position, if target is off, set to &#039;1&#039;&lt;br /&gt;
:iXD (usually &#039;0&#039;): set to &#039;0&#039; when triggering two objects with different start states (one bridge &#039;off&#039; and a wall &#039;on&#039; for example)		&lt;br /&gt;
*iType[52]	&#039;&#039;(BUTTON)&#039;&#039;	Trigger: Press Button&lt;br /&gt;
:iXD (set to &#039;1&#039; to face right, &#039;-1&#039; to face left): direction&lt;br /&gt;
:iState (set to &#039;1&#039; if target is off)&lt;br /&gt;
:iSubState: usage unknown, rarely used&lt;br /&gt;
:iCounter (&#039;&amp;gt;= 0&#039;): target tag		&lt;br /&gt;
*iType[24]	&#039;&#039;(DOOR)&#039;&#039;	Misc: Locked Door&lt;br /&gt;
:iYD (usually &#039;0&#039;, set to &#039;1&#039; for crystal): required key type&lt;br /&gt;
:iCounter (&#039;&amp;gt;= 0&#039;): self tag&lt;br /&gt;
*iType[25]	&#039;&#039;(FALLDOOR)&#039;&#039;	Misc: Collapsing ceiling&lt;br /&gt;
:iCounter (&#039;&amp;gt;= 0&#039;): self tag&lt;br /&gt;
*iType[26]	&#039;&#039;(BRIDGER)&#039;&#039;	Misc: Toggle Wall&lt;br /&gt;
:iXD (set to 1 for horizontal/floor)&lt;br /&gt;
:iYD (set to 1 for vertical/wall)&lt;br /&gt;
:iCounter (&#039;&amp;gt;= 0&#039;): self tag&lt;br /&gt;
:&#039;&#039;&#039;NOTE:&#039;&#039;&#039; If set as wall, must be placed on top of the wall, if set as floor, must be placed on the far left of the floor. By default, these walls are &amp;quot;off&amp;quot;, use &amp;quot;ELEVMID&amp;quot; tiles for wall and &amp;quot;BRIDGE&amp;quot; for floor. Walls and bridges cannot go through two different types of tiles.&lt;br /&gt;
*iType[44]	&#039;&#039;(KNIGHT)&#039;&#039;	Misc: Knight&lt;br /&gt;
:iState (set to &#039;1&#039; for start on, &#039;0&#039; for start off): initial state&lt;br /&gt;
:iStateCount (set to &#039;6&#039; for &#039;none shall pass&#039;)&lt;br /&gt;
:iCounter (&#039;&amp;gt;= 0&#039;): self tag (toggle when triggered)&lt;br /&gt;
*iType[61]	&#039;&#039;(ELEV)&#039;&#039;	Misc: Lift&lt;br /&gt;
:iCounter (usually &#039;0&#039;): if set to &#039;-1&#039;, do not return to initial state&lt;br /&gt;
:&#039;&#039;&#039;NOTE:&#039;&#039;&#039; When going up, the elevator will travel until the player hits a solid tile. When going down, the elevator will erase &amp;quot;ELEVMID&amp;quot; tiles, replacing them with the tile directly above. &amp;quot;ELEVBOT&amp;quot; tiles look the same as &amp;quot;ELEVMID&amp;quot; tiles, but an elevator will not travel through it.&lt;br /&gt;
&lt;br /&gt;
=== Items &amp;amp; Bonus ===&lt;br /&gt;
&lt;br /&gt;
*iType[1]	&#039;&#039;(APPLE)&#039;&#039;	Bonus: Apple&lt;br /&gt;
*iType[28]	&#039;&#039;(TOKEN)&#039;&#039;	Bonus: Pickup Item &amp;amp; morphing icons&lt;br /&gt;
:iCounter (&#039;&amp;gt;= 0&#039;): item type (can be anything from 0 to 9 and matches the inventory item number)		&lt;br /&gt;
*iType[2]	&#039;&#039;(KNIFE)&#039;&#039;	Weapon: Knife&lt;br /&gt;
*iType[14]	&#039;&#039;(KEY)&#039;&#039;	Key: Old Red Key&lt;br /&gt;
*iType[33]	&#039;&#039;(GEM)&#039;&#039;	Key: Crystal&lt;br /&gt;
:iCounter (rarely set to &#039;1&#039;): usage unknown&lt;br /&gt;
&lt;br /&gt;
=== Monsters ===	&lt;br /&gt;
&lt;br /&gt;
*iType[4]	&#039;&#039;(BIGANT)&#039;&#039;	Green bug&lt;br /&gt;
:iXD (usually &#039;2&#039;): movement speed&lt;br /&gt;
*iType[7]	&#039;&#039;(DEMON)&#039;&#039;	Devil&lt;br /&gt;
*iType[8]	&#039;&#039;(BUNNY)&#039;&#039;	Bunny&lt;br /&gt;
*iType[9]	&#039;&#039;(INCHWORM)&#039;&#039;	Worm&lt;br /&gt;
:iXD (usually &#039;2&#039;): movement speed&lt;br /&gt;
*iType[11]	&#039;&#039;(BOBSLUG)&#039;&#039;	Giant Slug&lt;br /&gt;
:iXD (usually &#039;2&#039;): movement speed&lt;br /&gt;
*iType[17]	&#039;&#039;(FATSO)&#039;&#039;	Lizard Man&lt;br /&gt;
:iXD (usually &#039;2&#039;): movement speed		&lt;br /&gt;
*iType[22]	&#039;&#039;(FROG)&#039;&#039;	Frog&lt;br /&gt;
*iType[29]	&#039;&#039;(ANT)&#039;&#039;	Giant Ant&lt;br /&gt;
:iXD (usually &#039;3&#039;): movement speed&lt;br /&gt;
*iType[30]	&#039;&#039;(PHOENIX)&#039;&#039;	Phoenix&lt;br /&gt;
:iXD (usually &#039;3&#039;): movement speed&lt;br /&gt;
*iType[39]	&#039;&#039;(SNAKE)&#039;&#039;	Invincible Snake&lt;br /&gt;
:iXD (usually &#039;2&#039;): movement speed&lt;br /&gt;
*iType[43]	&#039;&#039;(BAT)&#039;&#039;	Giant Bat&lt;br /&gt;
*iType[45]	&#039;&#039;(BEENEST)&#039;&#039;	Hive&lt;br /&gt;
*iType[46]	&#039;&#039;(BEESWARM)&#039;&#039;	Bees&lt;br /&gt;
*iType[47]	&#039;&#039;(CRAB)&#039;&#039;	Crab&lt;br /&gt;
*iType[48]	&#039;&#039;(CROC)&#039;&#039;	Gator&lt;br /&gt;
:iXD (usually &#039;2&#039;): movement speed	&lt;br /&gt;
*iType[53]	&#039;&#039;(PAC)&#039;&#039;	Ghost&lt;br /&gt;
:iXD (usually &#039;2&#039;): initial direction&lt;br /&gt;
:iCounter (usually &#039;2&#039;): movement speed&lt;br /&gt;
:&#039;&#039;&#039;NOTE:&#039;&#039;&#039; Ghosts move along the same tile type&lt;br /&gt;
*iType[59]	&#039;&#039;(JELLYFISH)&#039;&#039;	Jellyfish&lt;br /&gt;
*iType[60]	&#039;&#039;(BADFISH)&#039;&#039;	Eels&lt;br /&gt;
&lt;br /&gt;
=== Traps ===&lt;br /&gt;
&lt;br /&gt;
*iType[35]	&#039;&#039;(BOULDER)&#039;&#039;	Rolling Stone&lt;br /&gt;
*iType[38]	&#039;&#039;(STALAG)&#039;&#039;	Falling Spike&lt;br /&gt;
:iCounter (&#039;&amp;gt;= 0&#039;): self tag (fall when triggered)&lt;br /&gt;
*iType[41]	&#039;&#039;(BOLL)&#039;&#039;	Boucing Ball&lt;br /&gt;
:iCounter (usually &#039;4&#039;): ball type (0-small, 3-red, 4-green)&lt;br /&gt;
*iType[65]	&#039;&#039;(VINECLIMB)&#039;&#039;	Sparks&lt;br /&gt;
:iYD (usually &#039;2&#039;): movement speed&lt;br /&gt;
:&#039;&#039;&#039;NOTE:&#039;&#039;&#039; Sparks move along the same tile type&lt;br /&gt;
&lt;br /&gt;
=== Misc ===&lt;br /&gt;
&lt;br /&gt;
*iType[13]	&#039;&#039;(PAUL)&#039;&#039;	Misc: Prince&lt;br /&gt;
:iState (&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;): object animation frame&lt;br /&gt;
*iType[19]	&#039;&#039;(CLOUD)&#039;&#039;	Misc: Cloud&lt;br /&gt;
:iCounter (&#039;&amp;gt;= 0&#039;): usage unknown&lt;br /&gt;
:iXD (&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;): movement speed&lt;br /&gt;
*iType[20]	&#039;&#039;(TEXT6)&#039;&#039;	Misc: Write text (small capital letters)&lt;br /&gt;
:iXD (&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;): CGA color index number&lt;br /&gt;
:iYD (usually &#039;-1&#039; for transparent): background color&lt;br /&gt;
:lPointer: pointer&lt;br /&gt;
:&#039;&#039;&#039;NOTE:&#039;&#039;&#039; This item reads an entry from the string stack&lt;br /&gt;
*iType[21]	&#039;&#039;(TEXT8)&#039;&#039;	Misc: Write text (big letters)&lt;br /&gt;
:iXD (&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;): CGA color index number&lt;br /&gt;
:iYD (usually &#039;-1&#039; for transparent): background color&lt;br /&gt;
:lPointer: pointer&lt;br /&gt;
:&#039;&#039;&#039;NOTE:&#039;&#039;&#039; This item reads an entry from the string stack&lt;br /&gt;
*iType[40]	&#039;&#039;(SEAROCK)&#039;&#039;	Misc: Underwater Rock&lt;br /&gt;
*iType[42]	&#039;&#039;(MEGA)&#039;&#039;	Misc: Huge letter&lt;br /&gt;
:iXD (&#039;&amp;gt;= 0&#039;): letter type (0-M, 1-E, 2-G, 3-A, 4-S)&lt;br /&gt;
:iCounter (&#039;&amp;gt;= 0&#039;): self tag (fall when triggered)&lt;br /&gt;
*iType[49]	&#039;&#039;(EPIC)&#039;&#039;	Misc: Epic Logo&lt;br /&gt;
*iType[51]	&#039;&#039;(SKULL)&#039;&#039;	Misc: Big Skull&lt;br /&gt;
:iCounter (&#039;&amp;gt;= 0&#039;): self tag (laugh with red gloomy eyes when triggered)&lt;br /&gt;
*iType[64]	&#039;&#039;(EYE)&#039;&#039;	Misc: Eye&lt;br /&gt;
*iType[66]	&#039;&#039;(FLAG)&#039;&#039;	Misc: Flag&lt;br /&gt;
*iType[67]	&#039;&#039;(MAPDEMO)&#039;&#039;	Misc: &amp;quot;Demo&amp;quot;/&amp;quot;Map&amp;quot; sign&lt;br /&gt;
:iXD (sign type, &#039;&amp;gt;= 0&#039;): set to &#039;1&#039; for &amp;quot;map&amp;quot;, &#039;0&#039; for &amp;quot;demo&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Untested ===&lt;br /&gt;
&lt;br /&gt;
*iType[3]	? (buggy/unusable)&lt;br /&gt;
*iType[5]	? (buggy/unusable)&lt;br /&gt;
*iType[10]	? (buggy/unusable)&lt;br /&gt;
*iType[16]	? (buggy/unusable)&lt;br /&gt;
*iType[27]	? (buggy/unusable)&lt;br /&gt;
*iType[34]	? (buggy/unusable)&lt;br /&gt;
*iType[50]	? (buggy/unusable)&lt;br /&gt;
*iType[55]	? (buggy/unusable)&lt;br /&gt;
*iType[6]	Buggy: harmless firebird&lt;br /&gt;
*iType[18]	Saves: Demon attack&lt;br /&gt;
:iSpeedX (&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;): Horizontal speed&lt;br /&gt;
:iSpeedY (&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;): Vertical speed&lt;br /&gt;
*iType[31]	Saves: flame attack&lt;br /&gt;
*iType[36]	Saves: Particle&lt;br /&gt;
:iState (&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;): color&lt;br /&gt;
:iSpeedX (&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;): velocity X&lt;br /&gt;
:iSpeedY (&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;): velocity Y&lt;br /&gt;
:iFlag (&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&#039;16384&#039;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;): Unknow&lt;br /&gt;
:iCounter (&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;): Unknow&lt;br /&gt;
*iType[37]	Saves: Pain effect&lt;br /&gt;
*iType[58]	Saves: Bubbles&lt;br /&gt;
:iFlag (&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&#039;16384&#039;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;): Unknow&lt;br /&gt;
*iType[62]	Saves: Player attack (fireball)&lt;br /&gt;
*iType[63]	Saves: Player attack (fish)&lt;br /&gt;
&lt;br /&gt;
== Credits ==&lt;br /&gt;
&lt;br /&gt;
This file format was reverse engineered by [[User:Malvineous|Malvineous]], [[User:Ilovemyq3map2|Ilovemyq3map2]] and [[User:SaxxonPike|SaxxonPike]].  If you find this information helpful in a project you&#039;re working on, please give credit where credit is due.  (A link back to this wiki would be nice too!)&lt;br /&gt;
&lt;br /&gt;
[[Category:Jill of the Jungle]]&lt;br /&gt;
[[Category:File Formats]]&lt;br /&gt;
[[Category:Map Files]]&lt;/div&gt;</summary>
		<author><name>Jaguar</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Jill_of_the_Jungle_Map_Format&amp;diff=4643</id>
		<title>Jill of the Jungle Map Format</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Jill_of_the_Jungle_Map_Format&amp;diff=4643"/>
		<updated>2013-05-31T23:12:30Z</updated>

		<summary type="html">&lt;p&gt;Jaguar: Added object names to Objects&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Stub}}&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;Jill of the Jungle map format&#039;&#039;&#039; is the format used to describe the levels played during the game.  The maps contain two layers - a background layer and an &amp;quot;object&amp;quot; layer.  The background layer is a grid of 16x16 pixel tiles, 128 tiles wide and 64 tiles high.  The object layer is made up of an arbitrary list of objects, with X and Y offsets in pixels.&lt;br /&gt;
&lt;br /&gt;
== File format ==&lt;br /&gt;
&lt;br /&gt;
The main map file starts off with the background layer, then immediately following it is the foreground layer, the savegame data block and the string stack.&lt;br /&gt;
&lt;br /&gt;
=== Background layer ===&lt;br /&gt;
&lt;br /&gt;
The background layer is quite simple.  It is an array of 8,192 16-bit values (128 tiles wide by 64 tiles high == 8192 tiles total.)  Each 16-bit value is a code, such as 0xC0D3.  The formula &amp;lt;b&amp;gt;((x * MAP_HEIGHT) + y) * 2&amp;lt;/b&amp;gt; (where MAP_HEIGHT is 64) will provide the offset (in bytes) into the map file where that grid&#039;s 16-bit code is located.&lt;br /&gt;
&lt;br /&gt;
Once the code is found, its lower three nybbles are isolated (e.g. &amp;lt;b&amp;gt;code &amp;amp; 0xFFF&amp;lt;/b&amp;gt;) which provides an ID that is listed in the tile mapping table (see below.)  The tile mapping table then provides an index into the graphics file for the image that should be displayed at that grid location.&lt;br /&gt;
&lt;br /&gt;
For example, if the 16-bit code is 0xC0D3, then isolating the lower three nybbles will provide the number 0x00D3.  At the entry for ID 0x00D3 in the tile mapping table, the value might be iTileset as 0x12 and iTile as 0x34.  This means that in the graphics file, tileset number 0x12 should be accessed, and tile number 0x34 within that tileset should be drawn at the grid coordinate.&lt;br /&gt;
&lt;br /&gt;
It is also important to note that these values are stored little-endian, like the [[SHA Format|SHA format]]. This means that for example the value 0xC0D3 is stored as the two bytes D3-C0, not as C0-D3.&lt;br /&gt;
&lt;br /&gt;
==== Tile mapping table ====&lt;br /&gt;
&lt;br /&gt;
There is a separate file in the game directory that contains mappings between tile codes in the background layer and the game&#039;s graphics.  In [[Jill of the Jungle]] this is called &amp;lt;tt&amp;gt;JILL.DMA&amp;lt;/tt&amp;gt; and in [[Xargon]] it is &amp;lt;tt&amp;gt;TILES.XR&amp;lt;i&amp;gt;x&amp;lt;/i&amp;gt;&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This file is arranged as an array of entries, one after the other.  Each entry is in the following format:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Data type!!Description&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] iMapCode || ID used in map file&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] iTile || Index into the tileset for the image to use&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] iTileset || Index of tileset containing this tile&#039;s image (ignore upper two bits - see below)&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] iFlags || Flags for this tile (can stand on, can hurt player, etc.)&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] iLength || Length of tile name&lt;br /&gt;
|-&lt;br /&gt;
| [[char]] cName[iLength] || &amp;lt;tt&amp;gt;iLength&amp;lt;/tt&amp;gt; characters for the tile name.  This string is &amp;lt;b&amp;gt;not&amp;lt;/b&amp;gt; NULL-terminated.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note that only the lower six bits of &amp;lt;tt&amp;gt;iTileset&amp;lt;/tt&amp;gt; refer to the tile number.  The purpose of the upper unknown bits is unknown.  To get a valid tileset index use &amp;lt;code&amp;gt;iTileset &amp;amp; 0x3F&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;iFlags&amp;lt;/tt&amp;gt; is broken up as follows:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Bit!!Hex!!Name!!Description&lt;br /&gt;
|-&lt;br /&gt;
||-||0x0000||&amp;lt;i&amp;gt;&amp;lt;zero&amp;gt;&amp;lt;/i&amp;gt;||Default solid block&lt;br /&gt;
|-&lt;br /&gt;
|1||0x0001||F_PLAYERTHRU||Blocks you can walk, jump or fall through (background tiles, the path on the overhead map, etc.)&lt;br /&gt;
|-&lt;br /&gt;
|2||0x0002||F_STAIR, F_NOTSTAIR (Xargon)||Blocks that you can stand on (can also jump up through when combined with F_PLAYERTHRU)&lt;br /&gt;
|-&lt;br /&gt;
|3||0x0004||F_VINE, F_NOTVINE (Xargon)||Can climb this block - usually combined with F_PLAYERTHRU (giving 0x0005)&lt;br /&gt;
|-&lt;br /&gt;
|4||0x0008||F_MSGTOUCH||Activates game-specific code when touched&lt;br /&gt;
|-&lt;br /&gt;
|5||0x0010||F_MSGDRAW|| Regular blocks have just one shape, f_msgdraw triggers &amp;lt;tt&amp;gt;msg_block(msg_draw)&amp;lt;/tt&amp;gt; for animated blocks.&lt;br /&gt;
|-&lt;br /&gt;
|6||0x0020||F_MSGUPDATE|| game-specific code (through &amp;lt;tt&amp;gt;msg_block(msg_update)&amp;lt;/tt&amp;gt;) at every frame. For animated blocks.&lt;br /&gt;
|-&lt;br /&gt;
|7||0x0040||F_INSIDE||This block contains text inside it&lt;br /&gt;
|-&lt;br /&gt;
|8||0x0080||F_FRONT|| object property : Foreground object&lt;br /&gt;
|-&lt;br /&gt;
|9||0x0100||F_TRIGGER||Unknown&lt;br /&gt;
|-&lt;br /&gt;
|10||0x0200||F_BACK || object property: Background object (e.g. torches)&lt;br /&gt;
|-&lt;br /&gt;
|10||0x0200||F_TINYTHRU|| (likely PlayerThru when player is in &#039;mini&#039; mode, unused in Xargon)&lt;br /&gt;
|-&lt;br /&gt;
|11||0x0400||F_ALWAYS|| object property : &amp;quot;Always updates object&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|12||0x0800||F_KILLABLE|| object property : monster can be killed with regular weapon.&lt;br /&gt;
|-&lt;br /&gt;
|13||0x1000||F_FIREBALL|| object property : object is a fireball&lt;br /&gt;
|-&lt;br /&gt;
|14||0x2000||F_WATER|| A water tile. regular player will sink, the S.U.B. and aquatic monster can swim through it, but not out of it&lt;br /&gt;
|-&lt;br /&gt;
|14||0x4000||F_NOT_WATER|| (Xargon) Not a water tile.&lt;br /&gt;
|-&lt;br /&gt;
|15||0x4000||F_WEAPON|| object property : object is a regular weapon&lt;br /&gt;
|-&lt;br /&gt;
|16||0x8000||(unused)||(unused)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note that the same &amp;quot;flag set&amp;quot; is used for both blocks and objects. Some properties only apply to blocks, some only apply to objects, some to both (&amp;lt;tt&amp;gt;f_msgtouch&amp;lt;/tt&amp;gt;), and some flags have a different meaning for blocks and tile (e.g. 0x200 and 0x2000).&lt;br /&gt;
&lt;br /&gt;
=== Object layer ===&lt;br /&gt;
&lt;br /&gt;
The object layer is drawn in front of the background layer, and contains all the interactive elements of the map, such as points and enemies.&lt;br /&gt;
&lt;br /&gt;
The object data starts straight after the background layer data, so that&#039;s at offset 16,384 bytes into the map file (8,192 tiles * two bytes per tile.)  The first two bytes in the object layer are a 16-bit integer ([[UINT16LE]]) that stores the number of objects in the map, and this is followed by the data for each object, one after the other.&lt;br /&gt;
&lt;br /&gt;
Each object is 31 bytes long, and is stored in the following structure:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Data type!!Description&lt;br /&gt;
|-&lt;br /&gt;
|UINT8 iType||Object type (e.g. a &amp;quot;point item&amp;quot;, or an enemy.)&lt;br /&gt;
|-&lt;br /&gt;
|UINT16 iX||X-coordinate of object&lt;br /&gt;
|-&lt;br /&gt;
|UINT16 iY||Y-coordinate of object&lt;br /&gt;
|-&lt;br /&gt;
|UINT16 iXD|| object horizontal speed&lt;br /&gt;
|-&lt;br /&gt;
|UINT16 iYD|| object vertical speed&lt;br /&gt;
|-&lt;br /&gt;
|UINT16 iWidth||Width of object&lt;br /&gt;
|-&lt;br /&gt;
|UINT16 iHeight||Height of object&lt;br /&gt;
|-&lt;br /&gt;
|UINT16 iState||Object sub-type (e.g. what type of &amp;quot;point item&amp;quot;), or current &amp;quot;State&amp;quot; (running, jumping, etc)&lt;br /&gt;
|-&lt;br /&gt;
|UINT16 iSubState||&amp;lt;i&amp;gt;object-specific semantic&amp;lt;/i&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|UINT16 iStateCount||&amp;lt;i&amp;gt;object-specific semantic, typically a frame counter&amp;lt;/i&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|UINT16 iCounter||Various uses. Often used to link doors or switches to obstacles.&lt;br /&gt;
|-&lt;br /&gt;
|UINT16 iFlags|| internally used for rendering.&lt;br /&gt;
|-&lt;br /&gt;
|UINT32 lPointer||Used internally as a pointer.  If this value is 0, there is no entry for this object in the string stack (see below.)  Any non-zero value means there is an entry for this object in the string stack.&lt;br /&gt;
|-&lt;br /&gt;
|UINT16 iInfo1||&amp;lt;i&amp;gt;Unknown&amp;lt;/i&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|UINT16 iZapHold||&amp;lt;i&amp;gt;Unknown&amp;lt;/i&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
At the present time it is assumed (perhaps hoped) that objects can be mapped to images in the same way as the tiles in the background layer can be mapped to images, but as yet there is no known way of doing this.&lt;br /&gt;
&lt;br /&gt;
=== Savegame datas ===&lt;br /&gt;
&lt;br /&gt;
Saved games in Jill are &amp;quot;snapshots&amp;quot; of the current level state, that&#039;s why some spare room exists in the map format to allow special data to be saved. The unsigned short integer is the level number (as displayed in the status screen). The second unsigned short integer is JILL&#039;s health. The next unsigned short integer is the amount of items displayed in the inventory. Each of the following 16 unsigned short integers represent an item in the inventory (note that used items such as keys are not removed from this stack, but items are rearranged to override the key value, according to the amount of items displayed in the inventory). Right after, the unsigned long integer stores the score. Then, there are 28 empty bytes to fill the block.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!InvItemNumber!!Description&lt;br /&gt;
|-&lt;br /&gt;
|0|| Morph: Jill&lt;br /&gt;
|-&lt;br /&gt;
|1|| Key: Red Key&lt;br /&gt;
|-&lt;br /&gt;
|2|| Weapon: Knive&lt;br /&gt;
|-&lt;br /&gt;
|3|| Key: Crystal Rock&lt;br /&gt;
|-&lt;br /&gt;
|4|| Morph: Frog&lt;br /&gt;
|-&lt;br /&gt;
|5|| Morph: Fire bird&lt;br /&gt;
|-&lt;br /&gt;
|6|| Bag of coins (?)&lt;br /&gt;
|-&lt;br /&gt;
|7|| Morph: Fish&lt;br /&gt;
|-&lt;br /&gt;
|8|| Weapon: Blade&lt;br /&gt;
|-&lt;br /&gt;
|9|| Bonus: High Jump&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
In Jill of the Jungle, this section is 70 bytes long.  In Xargon it is 97 bytes long.&lt;br /&gt;
&lt;br /&gt;
=== String stack ===&lt;br /&gt;
&lt;br /&gt;
The Strings Stack is just a bunch of arbitrary strings (can be either text or file references). Each entry starts with an unsigned short integer defining the length of the incoming string. Note that the string is always followed by a null byte (so if &amp;quot;length of next entry&amp;quot; is 12, you only have the string size and should not forget to read an extra byte to reach the next entry). The string stack&#039;s entries are used for iType[20] (&amp;quot;write text&amp;quot;), 21 (&amp;quot;write text in big&amp;quot;) and 12 (&amp;quot;checkpoints&amp;quot;) and can contain music filenames, demo filenames, next level filenames or arbitrary text content.&lt;br /&gt;
&lt;br /&gt;
In Xargon ans Jill, the checkpoint type contains a string:&lt;br /&gt;
&lt;br /&gt;
* If the first character of this string is &#039;*&#039; then the rest of the string is taken to be the filename of the music file to play in that level.&lt;br /&gt;
* If the first character is &#039;#&#039; then the string is also a music file, but it is only played if there is no song currently playing, or the level number is between 1 and 32 inclusive.  This is probably used for the main menu/credits/etc. so as not to interrupt the theme song when displaying those &amp;quot;levels&amp;quot;, and it is used for the map level so the theme music keeps playing (rather than starting from the beginning again) when starting a game.&lt;br /&gt;
* The first character of the string can also be &#039;&amp;amp;&#039; which, in Xargon, forces the song to be &amp;lt;tt&amp;gt;song_33.xr1&amp;lt;/tt&amp;gt; and in Jill does not change the song. The rest of the string as a macro filename, to be read and played back as a demo.  This is used in the ending sequences.&lt;br /&gt;
&lt;br /&gt;
== Object iTypes ==&lt;br /&gt;
&lt;br /&gt;
Here&#039;s a list of objects used in Jill maps.&lt;br /&gt;
&lt;br /&gt;
iXD and iYD defines both speed and direction of items and ennemies. Positive values goes to right and down while values under zero move the object left and up.&lt;br /&gt;
lPointer referes to a segment of memory and is likely used to store entries from the string stack, that&#039;s why the gap between two consecutive pointers equals 65536 (this is the maximum size in byte of a string in the stack)&lt;br /&gt;
Playable objects must be the first entry in the list to avoid a weird &amp;quot;scroll to first entity&amp;quot; bug in Jill&lt;br /&gt;
&lt;br /&gt;
=== Functional ===&lt;br /&gt;
&lt;br /&gt;
*iType[0]	&#039;&#039;(PLAYER)&#039;&#039;	Playable: Jill (level)&lt;br /&gt;
:ObjectInfo1 (sometimes &#039;-1&#039;): usage unknown&lt;br /&gt;
*iType[23]	&#039;&#039;(TINY)&#039;&#039;	Playable: Jill (map overview in Jill3)		&lt;br /&gt;
*iType[54]	&#039;&#039;(JILLFISH)&#039;&#039;	Playable: Fish (never used in maps - if player dies, restart as Jill)&lt;br /&gt;
*iType[56]	&#039;&#039;(JILLBIRD)&#039;&#039;	Playable: Firebird (never used in maps - if player dies, restart as Jill)&lt;br /&gt;
*iType[57]	&#039;&#039;(JILLFROG)&#039;&#039;	Playable: Frog (never used in maps - if player dies, restart as Jill)&lt;br /&gt;
*iType[12]	&#039;&#039;(CHECKPT)&#039;&#039;	Trigger: Checkpoint&lt;br /&gt;
:iXD (&#039;&amp;gt; 0&#039;): X position of start in new map&lt;br /&gt;
:iYD (&#039;&amp;gt; 0&#039;): Y position of start in new map&lt;br /&gt;
:iState: If set to 1, the level is reset to it&#039;s initial state if player dies. If set to 0, the level&#039;s state is unchanged if player dies.&lt;br /&gt;
:iCounter (&#039;&amp;gt;= 0&#039;): checkpoint/level number&lt;br /&gt;
:iPointer: pointer&lt;br /&gt;
:&#039;&#039;&#039;NOTE:&#039;&#039;&#039; Always lock access to previous checkpoint when the player reaches a new checkpoint. This item reads an entry from the string stack: a single-character code and a filename. If the code is &amp;quot;*&amp;quot;, it means &amp;quot;load and play this song from the beginning&amp;quot;. If the code is &amp;quot;#&amp;quot;, it means &amp;quot;keep on playing this song&amp;quot;. If the code is &amp;quot;!&amp;quot;, then there&#039;s no filename and it means &amp;quot;load previous map&amp;quot;. If there&#039;s no code, then the filename is the next level to load.&lt;br /&gt;
*iType[15]	&#039;&#039;(PAD)&#039;&#039;	Trigger: Touch Trigger&lt;br /&gt;
:iCounter (&#039;&amp;gt;= 0&#039;): target tag&lt;br /&gt;
*iType[32]	&#039;&#039;(SWITCH)&#039;&#039;	Trigger: Switch&lt;br /&gt;
:iState (usually &#039;0&#039;): switch position, if target is off, set to &#039;1&#039;&lt;br /&gt;
:iXD (usually &#039;0&#039;): set to &#039;0&#039; when triggering two objects with different start states (one bridge &#039;off&#039; and a wall &#039;on&#039; for example)		&lt;br /&gt;
*iType[52]	&#039;&#039;(BUTTON)&#039;&#039;	Trigger: Press Button&lt;br /&gt;
:iXD (set to &#039;1&#039; to face right, &#039;-1&#039; to face left): direction&lt;br /&gt;
:iState (set to &#039;1&#039; if target is off)&lt;br /&gt;
:iSubState: usage unknown, rarely used&lt;br /&gt;
:iCounter (&#039;&amp;gt;= 0&#039;): target tag		&lt;br /&gt;
*iType[24]	&#039;&#039;(DOOR)&#039;&#039;	Misc: Locked Door&lt;br /&gt;
:iYD (usually &#039;0&#039;, set to &#039;1&#039; for crystal): required key type&lt;br /&gt;
:iCounter (&#039;&amp;gt;= 0&#039;): self tag&lt;br /&gt;
*iType[25]	&#039;&#039;(FALLDOOR)&#039;&#039;	Misc: Collapsing ceiling&lt;br /&gt;
:iCounter (&#039;&amp;gt;= 0&#039;): self tag&lt;br /&gt;
*iType[26]	&#039;&#039;(BRIDGER)&#039;&#039;	Misc: Toggle Wall&lt;br /&gt;
:iXD (set to 1 for horizontal/floor)&lt;br /&gt;
:iYD (set to 1 for vertical/wall)&lt;br /&gt;
:iCounter (&#039;&amp;gt;= 0&#039;): self tag&lt;br /&gt;
:&#039;&#039;&#039;NOTE:&#039;&#039;&#039; If set as wall, must be placed on top of the wall, if set as floor, must be placed on the far left of the floor. By default, these walls are &amp;quot;off&amp;quot;, use &amp;quot;ELEVMID&amp;quot; tiles for wall and &amp;quot;BRIDGE&amp;quot; for floor. Walls and bridges cannot go through two different types of tiles.&lt;br /&gt;
*iType[44]	&#039;&#039;(KNIGHT)&#039;&#039;	Misc: Knight&lt;br /&gt;
:iState (set to &#039;1&#039; for start on, &#039;0&#039; for start off): initial state&lt;br /&gt;
:iStateCount (set to &#039;6&#039; for &#039;none shall pass&#039;)&lt;br /&gt;
:iCounter (&#039;&amp;gt;= 0&#039;): self tag (toggle when triggered)&lt;br /&gt;
*iType[61]	&#039;&#039;(ELEV)&#039;&#039;	Misc: Lift&lt;br /&gt;
:iCounter (usually &#039;0&#039;): if set to &#039;-1&#039;, do not return to initial state&lt;br /&gt;
:&#039;&#039;&#039;NOTE:&#039;&#039;&#039; When going up, the elevator will travel until the player hits a solid tile. When going down, the elevator will erase &amp;quot;ELEVMID&amp;quot; tiles, replacing them with the tile directly above. &amp;quot;ELEVBOT&amp;quot; tiles look the same as &amp;quot;ELEVMID&amp;quot; tiles, but an elevator will not travel through it.&lt;br /&gt;
&lt;br /&gt;
=== Items &amp;amp; Bonus ===&lt;br /&gt;
&lt;br /&gt;
*iType[1]	&#039;&#039;(APPLE)&#039;&#039;	Bonus: Apple&lt;br /&gt;
*iType[28]	&#039;&#039;(TOKEN)&#039;&#039;	Bonus: Pickup Item &amp;amp; morphing icons&lt;br /&gt;
:iCounter (&#039;&amp;gt;= 0&#039;): item type (can be anything from 0 to 9 and matches the inventory item number)		&lt;br /&gt;
*iType[2]	&#039;&#039;(KNIFE)&#039;&#039;	Weapon: Knive&lt;br /&gt;
*iType[14]	&#039;&#039;(KEY)&#039;&#039;	Key: Old Red Key&lt;br /&gt;
*iType[33]	&#039;&#039;(GEM)&#039;&#039;	Key: Crystal&lt;br /&gt;
:iCounter (rarely set to &#039;1&#039;): usage unknown&lt;br /&gt;
&lt;br /&gt;
=== Monsters ===	&lt;br /&gt;
&lt;br /&gt;
*iType[4]	&#039;&#039;(BIGANT)&#039;&#039;	Green bug&lt;br /&gt;
:iXD (usually &#039;2&#039;): movement speed&lt;br /&gt;
*iType[7]	&#039;&#039;(DEMON)&#039;&#039;	Devil&lt;br /&gt;
*iType[8]	&#039;&#039;(BUNNY)&#039;&#039;	Bunny&lt;br /&gt;
*iType[9]	&#039;&#039;(INCHWORM)&#039;&#039;	Worm&lt;br /&gt;
:iXD (usually &#039;2&#039;): movement speed&lt;br /&gt;
*iType[11]	&#039;&#039;(BOBSLUG)&#039;&#039;	Giant Slug&lt;br /&gt;
:iXD (usually &#039;2&#039;): movement speed&lt;br /&gt;
*iType[17]	&#039;&#039;(FATSO)&#039;&#039;	Lizard Man&lt;br /&gt;
:iXD (usually &#039;2&#039;): movement speed		&lt;br /&gt;
*iType[22]	&#039;&#039;(FROG)&#039;&#039;	Frog&lt;br /&gt;
*iType[29]	&#039;&#039;(ANT)&#039;&#039;	Giant Ant&lt;br /&gt;
:iXD (usually &#039;3&#039;): movement speed&lt;br /&gt;
*iType[30]	&#039;&#039;(PHOENIX)&#039;&#039;	Phoenix&lt;br /&gt;
:iXD (usually &#039;3&#039;): movement speed&lt;br /&gt;
*iType[39]	&#039;&#039;(SNAKE)&#039;&#039;	Invincible Snake&lt;br /&gt;
:iXD (usually &#039;2&#039;): movement speed&lt;br /&gt;
*iType[43]	&#039;&#039;(BAT)&#039;&#039;	Giant Bat&lt;br /&gt;
*iType[45]	&#039;&#039;(BEENEST)&#039;&#039;	Hive&lt;br /&gt;
*iType[46]	&#039;&#039;(BEESWARM)&#039;&#039;	Bees&lt;br /&gt;
*iType[47]	&#039;&#039;(CRAB)&#039;&#039;	Crab&lt;br /&gt;
*iType[48]	&#039;&#039;(CROC)&#039;&#039;	Gator&lt;br /&gt;
:iXD (usually &#039;2&#039;): movement speed	&lt;br /&gt;
*iType[53]	&#039;&#039;(PAC)&#039;&#039;	Ghost&lt;br /&gt;
:iXD (usually &#039;2&#039;): initial direction&lt;br /&gt;
:iCounter (usually &#039;2&#039;): movement speed&lt;br /&gt;
:&#039;&#039;&#039;NOTE:&#039;&#039;&#039; Ghosts move along the same tile type&lt;br /&gt;
*iType[59]	&#039;&#039;(JELLYFISH)&#039;&#039;	Jellyfish&lt;br /&gt;
*iType[60]	&#039;&#039;(BADFISH)&#039;&#039;	Eels&lt;br /&gt;
&lt;br /&gt;
=== Traps ===&lt;br /&gt;
&lt;br /&gt;
*iType[35]	&#039;&#039;(BOULDER)&#039;&#039;	Rolling Stone&lt;br /&gt;
*iType[38]	&#039;&#039;(STALAG)&#039;&#039;	Falling Spike&lt;br /&gt;
:iCounter (&#039;&amp;gt;= 0&#039;): self tag (fall when triggered)&lt;br /&gt;
*iType[41]	&#039;&#039;(BOLL)&#039;&#039;	Boucing Ball&lt;br /&gt;
:iCounter (usually &#039;4&#039;): ball type (0-small, 3-red, 4-green)&lt;br /&gt;
*iType[65]	&#039;&#039;(VINECLIMB)&#039;&#039;	Sparks&lt;br /&gt;
:iYD (usually &#039;2&#039;): movement speed&lt;br /&gt;
:&#039;&#039;&#039;NOTE:&#039;&#039;&#039; Sparks move along the same tile type&lt;br /&gt;
&lt;br /&gt;
=== Misc ===&lt;br /&gt;
&lt;br /&gt;
*iType[13]	&#039;&#039;(PAUL)&#039;&#039;	Misc: Prince&lt;br /&gt;
:iState (&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;): object animation frame&lt;br /&gt;
*iType[19]	&#039;&#039;(CLOUD)&#039;&#039;	Misc: Cloud&lt;br /&gt;
:iCounter (&#039;&amp;gt;= 0&#039;): usage unknown&lt;br /&gt;
:iXD (&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;): movement speed&lt;br /&gt;
*iType[20]	&#039;&#039;(TEXT6)&#039;&#039;	Misc: Write text (small capital letters)&lt;br /&gt;
:iXD (&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;): CGA color index number&lt;br /&gt;
:iYD (usually &#039;-1&#039; for transparent): background color&lt;br /&gt;
:lPointer: pointer&lt;br /&gt;
:&#039;&#039;&#039;NOTE:&#039;&#039;&#039; This item reads an entry from the string stack&lt;br /&gt;
*iType[21]	&#039;&#039;(TEXT8)&#039;&#039;	Misc: Write text (big letters)&lt;br /&gt;
:iXD (&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;): CGA color index number&lt;br /&gt;
:iYD (usually &#039;-1&#039; for transparent): background color&lt;br /&gt;
:lPointer: pointer&lt;br /&gt;
:&#039;&#039;&#039;NOTE:&#039;&#039;&#039; This item reads an entry from the string stack&lt;br /&gt;
*iType[40]	&#039;&#039;(SEAROCK)&#039;&#039;	Misc: Underwater Rock&lt;br /&gt;
*iType[42]	&#039;&#039;(MEGA)&#039;&#039;	Misc: Huge letter&lt;br /&gt;
:iXD (&#039;&amp;gt;= 0&#039;): letter type (0-M, 1-E, 2-G, 3-A, 4-S)&lt;br /&gt;
:iCounter (&#039;&amp;gt;= 0&#039;): self tag (fall when triggered)&lt;br /&gt;
*iType[49]	&#039;&#039;(EPIC)&#039;&#039;	Misc: Epic Logo&lt;br /&gt;
*iType[51]	&#039;&#039;(SKULL)&#039;&#039;	Misc: Big Skull&lt;br /&gt;
:iCounter (&#039;&amp;gt;= 0&#039;): self tag (laugh with red gloomy eyes when triggered)&lt;br /&gt;
*iType[64]	&#039;&#039;(EYE)&#039;&#039;	Misc: Eye&lt;br /&gt;
*iType[66]	&#039;&#039;(FLAG)&#039;&#039;	Misc: Flag&lt;br /&gt;
*iType[67]	&#039;&#039;(MAPDEMO)&#039;&#039;	Misc: &amp;quot;Demo&amp;quot;/&amp;quot;Map&amp;quot; sign&lt;br /&gt;
:iXD (sign type, &#039;&amp;gt;= 0&#039;): set to &#039;1&#039; for &amp;quot;map&amp;quot;, &#039;0&#039; for &amp;quot;demo&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Untested ===&lt;br /&gt;
&lt;br /&gt;
*iType[3]	? (buggy/unusable)&lt;br /&gt;
*iType[5]	? (buggy/unusable)&lt;br /&gt;
*iType[10]	? (buggy/unusable)&lt;br /&gt;
*iType[16]	? (buggy/unusable)&lt;br /&gt;
*iType[27]	? (buggy/unusable)&lt;br /&gt;
*iType[34]	? (buggy/unusable)&lt;br /&gt;
*iType[50]	? (buggy/unusable)&lt;br /&gt;
*iType[55]	? (buggy/unusable)&lt;br /&gt;
*iType[6]	Buggy: harmless firebird&lt;br /&gt;
*iType[18]	Saves: Demon attack&lt;br /&gt;
:iSpeedX (&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;): Horizontal speed&lt;br /&gt;
:iSpeedY (&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;): Vertical speed&lt;br /&gt;
*iType[31]	Saves: flame attack&lt;br /&gt;
*iType[36]	Saves: Particle&lt;br /&gt;
:iState (&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;): color&lt;br /&gt;
:iSpeedX (&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;): velocity X&lt;br /&gt;
:iSpeedY (&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;): velocity Y&lt;br /&gt;
:iFlag (&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&#039;16384&#039;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;): Unknow&lt;br /&gt;
:iCounter (&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;): Unknow&lt;br /&gt;
*iType[37]	Saves: Pain effect&lt;br /&gt;
*iType[58]	Saves: Bubbles&lt;br /&gt;
:iFlag (&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&#039;16384&#039;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;): Unknow&lt;br /&gt;
*iType[62]	Saves: Player attack (fireball)&lt;br /&gt;
*iType[63]	Saves: Player attack (fish)&lt;br /&gt;
&lt;br /&gt;
== Credits ==&lt;br /&gt;
&lt;br /&gt;
This file format was reverse engineered by [[User:Malvineous|Malvineous]], [[User:Ilovemyq3map2|Ilovemyq3map2]] and [[User:SaxxonPike|SaxxonPike]].  If you find this information helpful in a project you&#039;re working on, please give credit where credit is due.  (A link back to this wiki would be nice too!)&lt;br /&gt;
&lt;br /&gt;
[[Category:Jill of the Jungle]]&lt;br /&gt;
[[Category:File Formats]]&lt;br /&gt;
[[Category:Map Files]]&lt;/div&gt;</summary>
		<author><name>Jaguar</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Jill_of_the_Jungle_Map_Format&amp;diff=4642</id>
		<title>Jill of the Jungle Map Format</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Jill_of_the_Jungle_Map_Format&amp;diff=4642"/>
		<updated>2013-05-31T22:25:02Z</updated>

		<summary type="html">&lt;p&gt;Jaguar: /* Functional */ Added extra info for Checkpoint type and Elevator&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Stub}}&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;Jill of the Jungle map format&#039;&#039;&#039; is the format used to describe the levels played during the game.  The maps contain two layers - a background layer and an &amp;quot;object&amp;quot; layer.  The background layer is a grid of 16x16 pixel tiles, 128 tiles wide and 64 tiles high.  The object layer is made up of an arbitrary list of objects, with X and Y offsets in pixels.&lt;br /&gt;
&lt;br /&gt;
== File format ==&lt;br /&gt;
&lt;br /&gt;
The main map file starts off with the background layer, then immediately following it is the foreground layer, the savegame data block and the string stack.&lt;br /&gt;
&lt;br /&gt;
=== Background layer ===&lt;br /&gt;
&lt;br /&gt;
The background layer is quite simple.  It is an array of 8,192 16-bit values (128 tiles wide by 64 tiles high == 8192 tiles total.)  Each 16-bit value is a code, such as 0xC0D3.  The formula &amp;lt;b&amp;gt;((x * MAP_HEIGHT) + y) * 2&amp;lt;/b&amp;gt; (where MAP_HEIGHT is 64) will provide the offset (in bytes) into the map file where that grid&#039;s 16-bit code is located.&lt;br /&gt;
&lt;br /&gt;
Once the code is found, its lower three nybbles are isolated (e.g. &amp;lt;b&amp;gt;code &amp;amp; 0xFFF&amp;lt;/b&amp;gt;) which provides an ID that is listed in the tile mapping table (see below.)  The tile mapping table then provides an index into the graphics file for the image that should be displayed at that grid location.&lt;br /&gt;
&lt;br /&gt;
For example, if the 16-bit code is 0xC0D3, then isolating the lower three nybbles will provide the number 0x00D3.  At the entry for ID 0x00D3 in the tile mapping table, the value might be iTileset as 0x12 and iTile as 0x34.  This means that in the graphics file, tileset number 0x12 should be accessed, and tile number 0x34 within that tileset should be drawn at the grid coordinate.&lt;br /&gt;
&lt;br /&gt;
It is also important to note that these values are stored little-endian, like the [[SHA Format|SHA format]]. This means that for example the value 0xC0D3 is stored as the two bytes D3-C0, not as C0-D3.&lt;br /&gt;
&lt;br /&gt;
==== Tile mapping table ====&lt;br /&gt;
&lt;br /&gt;
There is a separate file in the game directory that contains mappings between tile codes in the background layer and the game&#039;s graphics.  In [[Jill of the Jungle]] this is called &amp;lt;tt&amp;gt;JILL.DMA&amp;lt;/tt&amp;gt; and in [[Xargon]] it is &amp;lt;tt&amp;gt;TILES.XR&amp;lt;i&amp;gt;x&amp;lt;/i&amp;gt;&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This file is arranged as an array of entries, one after the other.  Each entry is in the following format:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Data type!!Description&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] iMapCode || ID used in map file&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] iTile || Index into the tileset for the image to use&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] iTileset || Index of tileset containing this tile&#039;s image (ignore upper two bits - see below)&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] iFlags || Flags for this tile (can stand on, can hurt player, etc.)&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] iLength || Length of tile name&lt;br /&gt;
|-&lt;br /&gt;
| [[char]] cName[iLength] || &amp;lt;tt&amp;gt;iLength&amp;lt;/tt&amp;gt; characters for the tile name.  This string is &amp;lt;b&amp;gt;not&amp;lt;/b&amp;gt; NULL-terminated.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note that only the lower six bits of &amp;lt;tt&amp;gt;iTileset&amp;lt;/tt&amp;gt; refer to the tile number.  The purpose of the upper unknown bits is unknown.  To get a valid tileset index use &amp;lt;code&amp;gt;iTileset &amp;amp; 0x3F&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;iFlags&amp;lt;/tt&amp;gt; is broken up as follows:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Bit!!Hex!!Name!!Description&lt;br /&gt;
|-&lt;br /&gt;
||-||0x0000||&amp;lt;i&amp;gt;&amp;lt;zero&amp;gt;&amp;lt;/i&amp;gt;||Default solid block&lt;br /&gt;
|-&lt;br /&gt;
|1||0x0001||F_PLAYERTHRU||Blocks you can walk, jump or fall through (background tiles, the path on the overhead map, etc.)&lt;br /&gt;
|-&lt;br /&gt;
|2||0x0002||F_STAIR, F_NOTSTAIR (Xargon)||Blocks that you can stand on (can also jump up through when combined with F_PLAYERTHRU)&lt;br /&gt;
|-&lt;br /&gt;
|3||0x0004||F_VINE, F_NOTVINE (Xargon)||Can climb this block - usually combined with F_PLAYERTHRU (giving 0x0005)&lt;br /&gt;
|-&lt;br /&gt;
|4||0x0008||F_MSGTOUCH||Activates game-specific code when touched&lt;br /&gt;
|-&lt;br /&gt;
|5||0x0010||F_MSGDRAW|| Regular blocks have just one shape, f_msgdraw triggers &amp;lt;tt&amp;gt;msg_block(msg_draw)&amp;lt;/tt&amp;gt; for animated blocks.&lt;br /&gt;
|-&lt;br /&gt;
|6||0x0020||F_MSGUPDATE|| game-specific code (through &amp;lt;tt&amp;gt;msg_block(msg_update)&amp;lt;/tt&amp;gt;) at every frame. For animated blocks.&lt;br /&gt;
|-&lt;br /&gt;
|7||0x0040||F_INSIDE||This block contains text inside it&lt;br /&gt;
|-&lt;br /&gt;
|8||0x0080||F_FRONT|| object property : Foreground object&lt;br /&gt;
|-&lt;br /&gt;
|9||0x0100||F_TRIGGER||Unknown&lt;br /&gt;
|-&lt;br /&gt;
|10||0x0200||F_BACK || object property: Background object (e.g. torches)&lt;br /&gt;
|-&lt;br /&gt;
|10||0x0200||F_TINYTHRU|| (likely PlayerThru when player is in &#039;mini&#039; mode, unused in Xargon)&lt;br /&gt;
|-&lt;br /&gt;
|11||0x0400||F_ALWAYS|| object property : &amp;quot;Always updates object&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|12||0x0800||F_KILLABLE|| object property : monster can be killed with regular weapon.&lt;br /&gt;
|-&lt;br /&gt;
|13||0x1000||F_FIREBALL|| object property : object is a fireball&lt;br /&gt;
|-&lt;br /&gt;
|14||0x2000||F_WATER|| A water tile. regular player will sink, the S.U.B. and aquatic monster can swim through it, but not out of it&lt;br /&gt;
|-&lt;br /&gt;
|14||0x4000||F_NOT_WATER|| (Xargon) Not a water tile.&lt;br /&gt;
|-&lt;br /&gt;
|15||0x4000||F_WEAPON|| object property : object is a regular weapon&lt;br /&gt;
|-&lt;br /&gt;
|16||0x8000||(unused)||(unused)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note that the same &amp;quot;flag set&amp;quot; is used for both blocks and objects. Some properties only apply to blocks, some only apply to objects, some to both (&amp;lt;tt&amp;gt;f_msgtouch&amp;lt;/tt&amp;gt;), and some flags have a different meaning for blocks and tile (e.g. 0x200 and 0x2000).&lt;br /&gt;
&lt;br /&gt;
=== Object layer ===&lt;br /&gt;
&lt;br /&gt;
The object layer is drawn in front of the background layer, and contains all the interactive elements of the map, such as points and enemies.&lt;br /&gt;
&lt;br /&gt;
The object data starts straight after the background layer data, so that&#039;s at offset 16,384 bytes into the map file (8,192 tiles * two bytes per tile.)  The first two bytes in the object layer are a 16-bit integer ([[UINT16LE]]) that stores the number of objects in the map, and this is followed by the data for each object, one after the other.&lt;br /&gt;
&lt;br /&gt;
Each object is 31 bytes long, and is stored in the following structure:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Data type!!Description&lt;br /&gt;
|-&lt;br /&gt;
|UINT8 iType||Object type (e.g. a &amp;quot;point item&amp;quot;, or an enemy.)&lt;br /&gt;
|-&lt;br /&gt;
|UINT16 iX||X-coordinate of object&lt;br /&gt;
|-&lt;br /&gt;
|UINT16 iY||Y-coordinate of object&lt;br /&gt;
|-&lt;br /&gt;
|UINT16 iXD|| object horizontal speed&lt;br /&gt;
|-&lt;br /&gt;
|UINT16 iYD|| object vertical speed&lt;br /&gt;
|-&lt;br /&gt;
|UINT16 iWidth||Width of object&lt;br /&gt;
|-&lt;br /&gt;
|UINT16 iHeight||Height of object&lt;br /&gt;
|-&lt;br /&gt;
|UINT16 iState||Object sub-type (e.g. what type of &amp;quot;point item&amp;quot;), or current &amp;quot;State&amp;quot; (running, jumping, etc)&lt;br /&gt;
|-&lt;br /&gt;
|UINT16 iSubState||&amp;lt;i&amp;gt;object-specific semantic&amp;lt;/i&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|UINT16 iStateCount||&amp;lt;i&amp;gt;object-specific semantic, typically a frame counter&amp;lt;/i&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|UINT16 iCounter||Various uses. Often used to link doors or switches to obstacles.&lt;br /&gt;
|-&lt;br /&gt;
|UINT16 iFlags|| internally used for rendering.&lt;br /&gt;
|-&lt;br /&gt;
|UINT32 lPointer||Used internally as a pointer.  If this value is 0, there is no entry for this object in the string stack (see below.)  Any non-zero value means there is an entry for this object in the string stack.&lt;br /&gt;
|-&lt;br /&gt;
|UINT16 iInfo1||&amp;lt;i&amp;gt;Unknown&amp;lt;/i&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|UINT16 iZapHold||&amp;lt;i&amp;gt;Unknown&amp;lt;/i&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
At the present time it is assumed (perhaps hoped) that objects can be mapped to images in the same way as the tiles in the background layer can be mapped to images, but as yet there is no known way of doing this.&lt;br /&gt;
&lt;br /&gt;
=== Savegame datas ===&lt;br /&gt;
&lt;br /&gt;
Saved games in Jill are &amp;quot;snapshots&amp;quot; of the current level state, that&#039;s why some spare room exists in the map format to allow special data to be saved. The unsigned short integer is the level number (as displayed in the status screen). The second unsigned short integer is JILL&#039;s health. The next unsigned short integer is the amount of items displayed in the inventory. Each of the following 16 unsigned short integers represent an item in the inventory (note that used items such as keys are not removed from this stack, but items are rearranged to override the key value, according to the amount of items displayed in the inventory). Right after, the unsigned long integer stores the score. Then, there are 28 empty bytes to fill the block.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!InvItemNumber!!Description&lt;br /&gt;
|-&lt;br /&gt;
|0|| Morph: Jill&lt;br /&gt;
|-&lt;br /&gt;
|1|| Key: Red Key&lt;br /&gt;
|-&lt;br /&gt;
|2|| Weapon: Knive&lt;br /&gt;
|-&lt;br /&gt;
|3|| Key: Crystal Rock&lt;br /&gt;
|-&lt;br /&gt;
|4|| Morph: Frog&lt;br /&gt;
|-&lt;br /&gt;
|5|| Morph: Fire bird&lt;br /&gt;
|-&lt;br /&gt;
|6|| Bag of coins (?)&lt;br /&gt;
|-&lt;br /&gt;
|7|| Morph: Fish&lt;br /&gt;
|-&lt;br /&gt;
|8|| Weapon: Blade&lt;br /&gt;
|-&lt;br /&gt;
|9|| Bonus: High Jump&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
In Jill of the Jungle, this section is 70 bytes long.  In Xargon it is 97 bytes long.&lt;br /&gt;
&lt;br /&gt;
=== String stack ===&lt;br /&gt;
&lt;br /&gt;
The Strings Stack is just a bunch of arbitrary strings (can be either text or file references). Each entry starts with an unsigned short integer defining the length of the incoming string. Note that the string is always followed by a null byte (so if &amp;quot;length of next entry&amp;quot; is 12, you only have the string size and should not forget to read an extra byte to reach the next entry). The string stack&#039;s entries are used for iType[20] (&amp;quot;write text&amp;quot;), 21 (&amp;quot;write text in big&amp;quot;) and 12 (&amp;quot;checkpoints&amp;quot;) and can contain music filenames, demo filenames, next level filenames or arbitrary text content.&lt;br /&gt;
&lt;br /&gt;
In Xargon ans Jill, the checkpoint type contains a string:&lt;br /&gt;
&lt;br /&gt;
* If the first character of this string is &#039;*&#039; then the rest of the string is taken to be the filename of the music file to play in that level.&lt;br /&gt;
* If the first character is &#039;#&#039; then the string is also a music file, but it is only played if there is no song currently playing, or the level number is between 1 and 32 inclusive.  This is probably used for the main menu/credits/etc. so as not to interrupt the theme song when displaying those &amp;quot;levels&amp;quot;, and it is used for the map level so the theme music keeps playing (rather than starting from the beginning again) when starting a game.&lt;br /&gt;
* The first character of the string can also be &#039;&amp;amp;&#039; which, in Xargon, forces the song to be &amp;lt;tt&amp;gt;song_33.xr1&amp;lt;/tt&amp;gt; and in Jill does not change the song. The rest of the string as a macro filename, to be read and played back as a demo.  This is used in the ending sequences.&lt;br /&gt;
&lt;br /&gt;
== Object iTypes ==&lt;br /&gt;
&lt;br /&gt;
Here&#039;s a list of objects used in Jill maps.&lt;br /&gt;
&lt;br /&gt;
iXD and iYD defines both speed and direction of items and ennemies. Positive values goes to right and down while values under zero move the object left and up.&lt;br /&gt;
lPointer referes to a segment of memory and is likely used to store entries from the string stack, that&#039;s why the gap between two consecutive pointers equals 65536 (this is the maximum size in byte of a string in the stack)&lt;br /&gt;
Playable objects must be the first entry in the list to avoid a weird &amp;quot;scroll to first entity&amp;quot; bug in Jill&lt;br /&gt;
&lt;br /&gt;
=== Functional ===&lt;br /&gt;
&lt;br /&gt;
*iType[0]	Playable: Jill (level)&lt;br /&gt;
:ObjectInfo1 (sometimes &#039;-1&#039;): usage unknown&lt;br /&gt;
*iType[23]	Playable: Jill (map overview in Jill3)		&lt;br /&gt;
*iType[54]	Playable: Fish (never used in maps - if player dies, restart as Jill)&lt;br /&gt;
*iType[56]	Playable: Firebird (never used in maps - if player dies, restart as Jill)&lt;br /&gt;
*iType[57]	Playable: Frog (never used in maps - if player dies, restart as Jill)&lt;br /&gt;
*iType[12]	Trigger: Checkpoint&lt;br /&gt;
:iXD (&#039;&amp;gt; 0&#039;): X position of start in new map&lt;br /&gt;
:iYD (&#039;&amp;gt; 0&#039;): Y position of start in new map&lt;br /&gt;
:iState: If set to 1, the level is reset to it&#039;s initial state if player dies. If set to 0, the level&#039;s state is unchanged if player dies.&lt;br /&gt;
:iCounter (&#039;&amp;gt;= 0&#039;): checkpoint/level number&lt;br /&gt;
:iPointer: pointer&lt;br /&gt;
:&#039;&#039;&#039;NOTE:&#039;&#039;&#039; Always lock access to previous checkpoint when the player reaches a new checkpoint. This item reads an entry from the string stack: a single-character code and a filename. If the code is &amp;quot;*&amp;quot;, it means &amp;quot;load and play this song from the beginning&amp;quot;. If the code is &amp;quot;#&amp;quot;, it means &amp;quot;keep on playing this song&amp;quot;. If the code is &amp;quot;!&amp;quot;, then there&#039;s no filename and it means &amp;quot;load previous map&amp;quot;. If there&#039;s no code, then the filename is the next level to load.&lt;br /&gt;
*iType[15]	Trigger: Touch Trigger&lt;br /&gt;
:iCounter (&#039;&amp;gt;= 0&#039;): target tag&lt;br /&gt;
*iType[32]	Trigger: Switch&lt;br /&gt;
:iState (usually &#039;0&#039;): switch position, if target is off, set to &#039;1&#039;&lt;br /&gt;
:iXD (usually &#039;0&#039;): set to &#039;0&#039; when triggering two objects with different start states (one bridge &#039;off&#039; and a wall &#039;on&#039; for example)		&lt;br /&gt;
*iType[52]	Trigger: Press Button&lt;br /&gt;
:iXD (set to &#039;1&#039; to face right, &#039;-1&#039; to face left): direction&lt;br /&gt;
:iState (set to &#039;1&#039; if target is off)&lt;br /&gt;
:iSubState: usage unknown, rarely used&lt;br /&gt;
:iCounter (&#039;&amp;gt;= 0&#039;): target tag		&lt;br /&gt;
*iType[24]	Misc: Locked Door&lt;br /&gt;
:iYD (usually &#039;0&#039;, set to &#039;1&#039; for crystal): required key type&lt;br /&gt;
:iCounter (&#039;&amp;gt;= 0&#039;): self tag&lt;br /&gt;
*iType[25]	Misc: Collapsing ceiling&lt;br /&gt;
:iCounter (&#039;&amp;gt;= 0&#039;): self tag&lt;br /&gt;
*iType[26]	Misc: Toggle Wall&lt;br /&gt;
:iXD (set to 1 for horizontal/floor)&lt;br /&gt;
:iYD (set to 1 for vertical/wall)&lt;br /&gt;
:iCounter (&#039;&amp;gt;= 0&#039;): self tag&lt;br /&gt;
:&#039;&#039;&#039;NOTE:&#039;&#039;&#039; If set as wall, must be placed on top of the wall, if set as floor, must be placed on the far left of the floor. By default, these walls are &amp;quot;off&amp;quot;, use &amp;quot;ELEVMID&amp;quot; tiles for wall and &amp;quot;BRIDGE&amp;quot; for floor. Walls and bridges cannot go through two different types of tiles.&lt;br /&gt;
*iType[44]	Misc: Knight&lt;br /&gt;
:iState (set to &#039;1&#039; for start on, &#039;0&#039; for start off): initial state&lt;br /&gt;
:iStateCount (set to &#039;6&#039; for &#039;none shall pass&#039;)&lt;br /&gt;
:iCounter (&#039;&amp;gt;= 0&#039;): self tag (toggle when triggered)&lt;br /&gt;
*iType[61]	Misc: Lift&lt;br /&gt;
:iCounter (usually &#039;0&#039;): if set to &#039;-1&#039;, do not return to initial state&lt;br /&gt;
:&#039;&#039;&#039;NOTE:&#039;&#039;&#039; When going up, the elevator will travel until the player hits a solid tile. When going down, the elevator will erase &amp;quot;ELEVMID&amp;quot; tiles, replacing them with the tile directly above. &amp;quot;ELEVBOT&amp;quot; tiles look the same as &amp;quot;ELEVMID&amp;quot; tiles, but an elevator will not travel through it.&lt;br /&gt;
&lt;br /&gt;
=== Items &amp;amp; Bonus ===&lt;br /&gt;
&lt;br /&gt;
*iType[1]	Bonus: Apple&lt;br /&gt;
*iType[28]	Bonus: Pickup Item &amp;amp; morphing icons&lt;br /&gt;
:iCounter (&#039;&amp;gt;= 0&#039;): item type (can be anything from 0 to 9 and matches the inventory item number)		&lt;br /&gt;
*iType[2]	Weapon: Knive&lt;br /&gt;
*iType[14]	Key: Old Red Key&lt;br /&gt;
*iType[33]	Key: Crystal&lt;br /&gt;
:iCounter (rarely set to &#039;1&#039;): usage unknown&lt;br /&gt;
&lt;br /&gt;
=== Monsters ===	&lt;br /&gt;
&lt;br /&gt;
*iType[4]	Green bug&lt;br /&gt;
:iXD (usually &#039;2&#039;): movement speed&lt;br /&gt;
*iType[7]	Devil&lt;br /&gt;
*iType[8]	Bunny&lt;br /&gt;
*iType[9]	Worm&lt;br /&gt;
:iXD (usually &#039;2&#039;): movement speed&lt;br /&gt;
*iType[11]	Giant Slug&lt;br /&gt;
:iXD (usually &#039;2&#039;): movement speed&lt;br /&gt;
*iType[17]	Lizard Man&lt;br /&gt;
:iXD (usually &#039;2&#039;): movement speed		&lt;br /&gt;
*iType[22]	Frog&lt;br /&gt;
*iType[29]	Giant Ant&lt;br /&gt;
:iXD (usually &#039;3&#039;): movement speed&lt;br /&gt;
*iType[30]	Phoenix&lt;br /&gt;
:iXD (usually &#039;3&#039;): movement speed&lt;br /&gt;
*iType[39]	Invincible Snake&lt;br /&gt;
:iXD (usually &#039;2&#039;): movement speed&lt;br /&gt;
*iType[43]	Giant Bat&lt;br /&gt;
*iType[45]	Hive&lt;br /&gt;
*iType[46]	Bees&lt;br /&gt;
*iType[47]	Crab&lt;br /&gt;
*iType[48]	Gator&lt;br /&gt;
:iXD (usually &#039;2&#039;): movement speed	&lt;br /&gt;
*iType[53]	Ghost&lt;br /&gt;
:iXD (usually &#039;2&#039;): initial direction&lt;br /&gt;
:iCounter (usually &#039;2&#039;): movement speed&lt;br /&gt;
:&#039;&#039;&#039;NOTE:&#039;&#039;&#039; Ghosts move along the same tile type&lt;br /&gt;
*iType[59]	Jellyfish&lt;br /&gt;
*iType[60]	Eels&lt;br /&gt;
&lt;br /&gt;
=== Traps ===&lt;br /&gt;
&lt;br /&gt;
*iType[35]	Rolling Stone&lt;br /&gt;
*iType[38]	Falling Spike&lt;br /&gt;
:iCounter (&#039;&amp;gt;= 0&#039;): self tag (fall when triggered)&lt;br /&gt;
*iType[41]	Boucing Ball&lt;br /&gt;
:iCounter (usually &#039;4&#039;): ball type (0-small, 3-red, 4-green)&lt;br /&gt;
*iType[65]	Sparks&lt;br /&gt;
:iYD (usually &#039;2&#039;): movement speed&lt;br /&gt;
:&#039;&#039;&#039;NOTE:&#039;&#039;&#039; Sparks move along the same tile type&lt;br /&gt;
&lt;br /&gt;
=== Misc ===&lt;br /&gt;
&lt;br /&gt;
*iType[13]	Misc: Prince&lt;br /&gt;
:iState (&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;): object animation frame&lt;br /&gt;
*iType[19]	Misc: Cloud&lt;br /&gt;
:iCounter (&#039;&amp;gt;= 0&#039;): usage unknown&lt;br /&gt;
:iXD (&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;): movement speed&lt;br /&gt;
*iType[20]	Misc: Write text (small capital letters)&lt;br /&gt;
:iXD (&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;): CGA color index number&lt;br /&gt;
:iYD (usually &#039;-1&#039; for transparent): background color&lt;br /&gt;
:lPointer: pointer&lt;br /&gt;
:&#039;&#039;&#039;NOTE:&#039;&#039;&#039; This item reads an entry from the string stack&lt;br /&gt;
*iType[21]	Misc: Write text (big letters)&lt;br /&gt;
:iXD (&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;): CGA color index number&lt;br /&gt;
:iYD (usually &#039;-1&#039; for transparent): background color&lt;br /&gt;
:lPointer: pointer&lt;br /&gt;
:&#039;&#039;&#039;NOTE:&#039;&#039;&#039; This item reads an entry from the string stack&lt;br /&gt;
*iType[40]	Misc: Underwater Rock&lt;br /&gt;
*iType[42]	Misc: Huge letter&lt;br /&gt;
:iXD (&#039;&amp;gt;= 0&#039;): letter type (0-M, 1-E, 2-G, 3-A, 4-S)&lt;br /&gt;
:iCounter (&#039;&amp;gt;= 0&#039;): self tag (fall when triggered)&lt;br /&gt;
*iType[49]	Misc: Epic Logo&lt;br /&gt;
*iType[51]	Misc: Big Skull&lt;br /&gt;
:iCounter (&#039;&amp;gt;= 0&#039;): self tag (laugh with red gloomy eyes when triggered)&lt;br /&gt;
*iType[64]	Misc: Eye&lt;br /&gt;
*iType[66]	Misc: Flag&lt;br /&gt;
*iType[67]	Misc: &amp;quot;Demo&amp;quot;/&amp;quot;Map&amp;quot; sign&lt;br /&gt;
:iXD (sign type, &#039;&amp;gt;= 0&#039;): set to &#039;1&#039; for &amp;quot;map&amp;quot;, &#039;0&#039; for &amp;quot;demo&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Untested ===&lt;br /&gt;
&lt;br /&gt;
*iType[3]	? (buggy/unusable)&lt;br /&gt;
*iType[5]	? (buggy/unusable)&lt;br /&gt;
*iType[10]	? (buggy/unusable)&lt;br /&gt;
*iType[16]	? (buggy/unusable)&lt;br /&gt;
*iType[27]	? (buggy/unusable)&lt;br /&gt;
*iType[34]	? (buggy/unusable)&lt;br /&gt;
*iType[50]	? (buggy/unusable)&lt;br /&gt;
*iType[55]	? (buggy/unusable)&lt;br /&gt;
*iType[6]	Buggy: harmless firebird&lt;br /&gt;
*iType[18]	Saves: Demon attack&lt;br /&gt;
:iSpeedX (&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;): Horizontal speed&lt;br /&gt;
:iSpeedY (&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;): Vertical speed&lt;br /&gt;
*iType[31]	Saves: flame attack&lt;br /&gt;
*iType[36]	Saves: Particle&lt;br /&gt;
:iState (&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;): color&lt;br /&gt;
:iSpeedX (&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;): velocity X&lt;br /&gt;
:iSpeedY (&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;): velocity Y&lt;br /&gt;
:iFlag (&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&#039;16384&#039;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;): Unknow&lt;br /&gt;
:iCounter (&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;): Unknow&lt;br /&gt;
*iType[37]	Saves: Pain effect&lt;br /&gt;
*iType[58]	Saves: Bubbles&lt;br /&gt;
:iFlag (&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&#039;16384&#039;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;): Unknow&lt;br /&gt;
*iType[62]	Saves: Player attack (fireball)&lt;br /&gt;
*iType[63]	Saves: Player attack (fish)&lt;br /&gt;
&lt;br /&gt;
== Credits ==&lt;br /&gt;
&lt;br /&gt;
This file format was reverse engineered by [[User:Malvineous|Malvineous]], [[User:Ilovemyq3map2|Ilovemyq3map2]] and [[User:SaxxonPike|SaxxonPike]].  If you find this information helpful in a project you&#039;re working on, please give credit where credit is due.  (A link back to this wiki would be nice too!)&lt;br /&gt;
&lt;br /&gt;
[[Category:Jill of the Jungle]]&lt;br /&gt;
[[Category:File Formats]]&lt;br /&gt;
[[Category:Map Files]]&lt;/div&gt;</summary>
		<author><name>Jaguar</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Jill_of_the_Jungle_Map_Format&amp;diff=4641</id>
		<title>Jill of the Jungle Map Format</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Jill_of_the_Jungle_Map_Format&amp;diff=4641"/>
		<updated>2013-05-31T21:59:25Z</updated>

		<summary type="html">&lt;p&gt;Jaguar: /* String stack */ Updated to include matching data for Jill&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Stub}}&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;Jill of the Jungle map format&#039;&#039;&#039; is the format used to describe the levels played during the game.  The maps contain two layers - a background layer and an &amp;quot;object&amp;quot; layer.  The background layer is a grid of 16x16 pixel tiles, 128 tiles wide and 64 tiles high.  The object layer is made up of an arbitrary list of objects, with X and Y offsets in pixels.&lt;br /&gt;
&lt;br /&gt;
== File format ==&lt;br /&gt;
&lt;br /&gt;
The main map file starts off with the background layer, then immediately following it is the foreground layer, the savegame data block and the string stack.&lt;br /&gt;
&lt;br /&gt;
=== Background layer ===&lt;br /&gt;
&lt;br /&gt;
The background layer is quite simple.  It is an array of 8,192 16-bit values (128 tiles wide by 64 tiles high == 8192 tiles total.)  Each 16-bit value is a code, such as 0xC0D3.  The formula &amp;lt;b&amp;gt;((x * MAP_HEIGHT) + y) * 2&amp;lt;/b&amp;gt; (where MAP_HEIGHT is 64) will provide the offset (in bytes) into the map file where that grid&#039;s 16-bit code is located.&lt;br /&gt;
&lt;br /&gt;
Once the code is found, its lower three nybbles are isolated (e.g. &amp;lt;b&amp;gt;code &amp;amp; 0xFFF&amp;lt;/b&amp;gt;) which provides an ID that is listed in the tile mapping table (see below.)  The tile mapping table then provides an index into the graphics file for the image that should be displayed at that grid location.&lt;br /&gt;
&lt;br /&gt;
For example, if the 16-bit code is 0xC0D3, then isolating the lower three nybbles will provide the number 0x00D3.  At the entry for ID 0x00D3 in the tile mapping table, the value might be iTileset as 0x12 and iTile as 0x34.  This means that in the graphics file, tileset number 0x12 should be accessed, and tile number 0x34 within that tileset should be drawn at the grid coordinate.&lt;br /&gt;
&lt;br /&gt;
It is also important to note that these values are stored little-endian, like the [[SHA Format|SHA format]]. This means that for example the value 0xC0D3 is stored as the two bytes D3-C0, not as C0-D3.&lt;br /&gt;
&lt;br /&gt;
==== Tile mapping table ====&lt;br /&gt;
&lt;br /&gt;
There is a separate file in the game directory that contains mappings between tile codes in the background layer and the game&#039;s graphics.  In [[Jill of the Jungle]] this is called &amp;lt;tt&amp;gt;JILL.DMA&amp;lt;/tt&amp;gt; and in [[Xargon]] it is &amp;lt;tt&amp;gt;TILES.XR&amp;lt;i&amp;gt;x&amp;lt;/i&amp;gt;&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This file is arranged as an array of entries, one after the other.  Each entry is in the following format:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Data type!!Description&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] iMapCode || ID used in map file&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] iTile || Index into the tileset for the image to use&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] iTileset || Index of tileset containing this tile&#039;s image (ignore upper two bits - see below)&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] iFlags || Flags for this tile (can stand on, can hurt player, etc.)&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] iLength || Length of tile name&lt;br /&gt;
|-&lt;br /&gt;
| [[char]] cName[iLength] || &amp;lt;tt&amp;gt;iLength&amp;lt;/tt&amp;gt; characters for the tile name.  This string is &amp;lt;b&amp;gt;not&amp;lt;/b&amp;gt; NULL-terminated.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note that only the lower six bits of &amp;lt;tt&amp;gt;iTileset&amp;lt;/tt&amp;gt; refer to the tile number.  The purpose of the upper unknown bits is unknown.  To get a valid tileset index use &amp;lt;code&amp;gt;iTileset &amp;amp; 0x3F&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;iFlags&amp;lt;/tt&amp;gt; is broken up as follows:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Bit!!Hex!!Name!!Description&lt;br /&gt;
|-&lt;br /&gt;
||-||0x0000||&amp;lt;i&amp;gt;&amp;lt;zero&amp;gt;&amp;lt;/i&amp;gt;||Default solid block&lt;br /&gt;
|-&lt;br /&gt;
|1||0x0001||F_PLAYERTHRU||Blocks you can walk, jump or fall through (background tiles, the path on the overhead map, etc.)&lt;br /&gt;
|-&lt;br /&gt;
|2||0x0002||F_STAIR, F_NOTSTAIR (Xargon)||Blocks that you can stand on (can also jump up through when combined with F_PLAYERTHRU)&lt;br /&gt;
|-&lt;br /&gt;
|3||0x0004||F_VINE, F_NOTVINE (Xargon)||Can climb this block - usually combined with F_PLAYERTHRU (giving 0x0005)&lt;br /&gt;
|-&lt;br /&gt;
|4||0x0008||F_MSGTOUCH||Activates game-specific code when touched&lt;br /&gt;
|-&lt;br /&gt;
|5||0x0010||F_MSGDRAW|| Regular blocks have just one shape, f_msgdraw triggers &amp;lt;tt&amp;gt;msg_block(msg_draw)&amp;lt;/tt&amp;gt; for animated blocks.&lt;br /&gt;
|-&lt;br /&gt;
|6||0x0020||F_MSGUPDATE|| game-specific code (through &amp;lt;tt&amp;gt;msg_block(msg_update)&amp;lt;/tt&amp;gt;) at every frame. For animated blocks.&lt;br /&gt;
|-&lt;br /&gt;
|7||0x0040||F_INSIDE||This block contains text inside it&lt;br /&gt;
|-&lt;br /&gt;
|8||0x0080||F_FRONT|| object property : Foreground object&lt;br /&gt;
|-&lt;br /&gt;
|9||0x0100||F_TRIGGER||Unknown&lt;br /&gt;
|-&lt;br /&gt;
|10||0x0200||F_BACK || object property: Background object (e.g. torches)&lt;br /&gt;
|-&lt;br /&gt;
|10||0x0200||F_TINYTHRU|| (likely PlayerThru when player is in &#039;mini&#039; mode, unused in Xargon)&lt;br /&gt;
|-&lt;br /&gt;
|11||0x0400||F_ALWAYS|| object property : &amp;quot;Always updates object&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|12||0x0800||F_KILLABLE|| object property : monster can be killed with regular weapon.&lt;br /&gt;
|-&lt;br /&gt;
|13||0x1000||F_FIREBALL|| object property : object is a fireball&lt;br /&gt;
|-&lt;br /&gt;
|14||0x2000||F_WATER|| A water tile. regular player will sink, the S.U.B. and aquatic monster can swim through it, but not out of it&lt;br /&gt;
|-&lt;br /&gt;
|14||0x4000||F_NOT_WATER|| (Xargon) Not a water tile.&lt;br /&gt;
|-&lt;br /&gt;
|15||0x4000||F_WEAPON|| object property : object is a regular weapon&lt;br /&gt;
|-&lt;br /&gt;
|16||0x8000||(unused)||(unused)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note that the same &amp;quot;flag set&amp;quot; is used for both blocks and objects. Some properties only apply to blocks, some only apply to objects, some to both (&amp;lt;tt&amp;gt;f_msgtouch&amp;lt;/tt&amp;gt;), and some flags have a different meaning for blocks and tile (e.g. 0x200 and 0x2000).&lt;br /&gt;
&lt;br /&gt;
=== Object layer ===&lt;br /&gt;
&lt;br /&gt;
The object layer is drawn in front of the background layer, and contains all the interactive elements of the map, such as points and enemies.&lt;br /&gt;
&lt;br /&gt;
The object data starts straight after the background layer data, so that&#039;s at offset 16,384 bytes into the map file (8,192 tiles * two bytes per tile.)  The first two bytes in the object layer are a 16-bit integer ([[UINT16LE]]) that stores the number of objects in the map, and this is followed by the data for each object, one after the other.&lt;br /&gt;
&lt;br /&gt;
Each object is 31 bytes long, and is stored in the following structure:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Data type!!Description&lt;br /&gt;
|-&lt;br /&gt;
|UINT8 iType||Object type (e.g. a &amp;quot;point item&amp;quot;, or an enemy.)&lt;br /&gt;
|-&lt;br /&gt;
|UINT16 iX||X-coordinate of object&lt;br /&gt;
|-&lt;br /&gt;
|UINT16 iY||Y-coordinate of object&lt;br /&gt;
|-&lt;br /&gt;
|UINT16 iXD|| object horizontal speed&lt;br /&gt;
|-&lt;br /&gt;
|UINT16 iYD|| object vertical speed&lt;br /&gt;
|-&lt;br /&gt;
|UINT16 iWidth||Width of object&lt;br /&gt;
|-&lt;br /&gt;
|UINT16 iHeight||Height of object&lt;br /&gt;
|-&lt;br /&gt;
|UINT16 iState||Object sub-type (e.g. what type of &amp;quot;point item&amp;quot;), or current &amp;quot;State&amp;quot; (running, jumping, etc)&lt;br /&gt;
|-&lt;br /&gt;
|UINT16 iSubState||&amp;lt;i&amp;gt;object-specific semantic&amp;lt;/i&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|UINT16 iStateCount||&amp;lt;i&amp;gt;object-specific semantic, typically a frame counter&amp;lt;/i&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|UINT16 iCounter||Various uses. Often used to link doors or switches to obstacles.&lt;br /&gt;
|-&lt;br /&gt;
|UINT16 iFlags|| internally used for rendering.&lt;br /&gt;
|-&lt;br /&gt;
|UINT32 lPointer||Used internally as a pointer.  If this value is 0, there is no entry for this object in the string stack (see below.)  Any non-zero value means there is an entry for this object in the string stack.&lt;br /&gt;
|-&lt;br /&gt;
|UINT16 iInfo1||&amp;lt;i&amp;gt;Unknown&amp;lt;/i&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|UINT16 iZapHold||&amp;lt;i&amp;gt;Unknown&amp;lt;/i&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
At the present time it is assumed (perhaps hoped) that objects can be mapped to images in the same way as the tiles in the background layer can be mapped to images, but as yet there is no known way of doing this.&lt;br /&gt;
&lt;br /&gt;
=== Savegame datas ===&lt;br /&gt;
&lt;br /&gt;
Saved games in Jill are &amp;quot;snapshots&amp;quot; of the current level state, that&#039;s why some spare room exists in the map format to allow special data to be saved. The unsigned short integer is the level number (as displayed in the status screen). The second unsigned short integer is JILL&#039;s health. The next unsigned short integer is the amount of items displayed in the inventory. Each of the following 16 unsigned short integers represent an item in the inventory (note that used items such as keys are not removed from this stack, but items are rearranged to override the key value, according to the amount of items displayed in the inventory). Right after, the unsigned long integer stores the score. Then, there are 28 empty bytes to fill the block.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!InvItemNumber!!Description&lt;br /&gt;
|-&lt;br /&gt;
|0|| Morph: Jill&lt;br /&gt;
|-&lt;br /&gt;
|1|| Key: Red Key&lt;br /&gt;
|-&lt;br /&gt;
|2|| Weapon: Knive&lt;br /&gt;
|-&lt;br /&gt;
|3|| Key: Crystal Rock&lt;br /&gt;
|-&lt;br /&gt;
|4|| Morph: Frog&lt;br /&gt;
|-&lt;br /&gt;
|5|| Morph: Fire bird&lt;br /&gt;
|-&lt;br /&gt;
|6|| Bag of coins (?)&lt;br /&gt;
|-&lt;br /&gt;
|7|| Morph: Fish&lt;br /&gt;
|-&lt;br /&gt;
|8|| Weapon: Blade&lt;br /&gt;
|-&lt;br /&gt;
|9|| Bonus: High Jump&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
In Jill of the Jungle, this section is 70 bytes long.  In Xargon it is 97 bytes long.&lt;br /&gt;
&lt;br /&gt;
=== String stack ===&lt;br /&gt;
&lt;br /&gt;
The Strings Stack is just a bunch of arbitrary strings (can be either text or file references). Each entry starts with an unsigned short integer defining the length of the incoming string. Note that the string is always followed by a null byte (so if &amp;quot;length of next entry&amp;quot; is 12, you only have the string size and should not forget to read an extra byte to reach the next entry). The string stack&#039;s entries are used for iType[20] (&amp;quot;write text&amp;quot;), 21 (&amp;quot;write text in big&amp;quot;) and 12 (&amp;quot;checkpoints&amp;quot;) and can contain music filenames, demo filenames, next level filenames or arbitrary text content.&lt;br /&gt;
&lt;br /&gt;
In Xargon ans Jill, the checkpoint type contains a string:&lt;br /&gt;
&lt;br /&gt;
* If the first character of this string is &#039;*&#039; then the rest of the string is taken to be the filename of the music file to play in that level.&lt;br /&gt;
* If the first character is &#039;#&#039; then the string is also a music file, but it is only played if there is no song currently playing, or the level number is between 1 and 32 inclusive.  This is probably used for the main menu/credits/etc. so as not to interrupt the theme song when displaying those &amp;quot;levels&amp;quot;, and it is used for the map level so the theme music keeps playing (rather than starting from the beginning again) when starting a game.&lt;br /&gt;
* The first character of the string can also be &#039;&amp;amp;&#039; which, in Xargon, forces the song to be &amp;lt;tt&amp;gt;song_33.xr1&amp;lt;/tt&amp;gt; and in Jill does not change the song. The rest of the string as a macro filename, to be read and played back as a demo.  This is used in the ending sequences.&lt;br /&gt;
&lt;br /&gt;
== Object iTypes ==&lt;br /&gt;
&lt;br /&gt;
Here&#039;s a list of objects used in Jill maps.&lt;br /&gt;
&lt;br /&gt;
iXD and iYD defines both speed and direction of items and ennemies. Positive values goes to right and down while values under zero move the object left and up.&lt;br /&gt;
lPointer referes to a segment of memory and is likely used to store entries from the string stack, that&#039;s why the gap between two consecutive pointers equals 65536 (this is the maximum size in byte of a string in the stack)&lt;br /&gt;
Playable objects must be the first entry in the list to avoid a weird &amp;quot;scroll to first entity&amp;quot; bug in Jill&lt;br /&gt;
&lt;br /&gt;
=== Functional ===&lt;br /&gt;
&lt;br /&gt;
*iType[0]	Playable: Jill (level)&lt;br /&gt;
:ObjectInfo1 (sometimes &#039;-1&#039;): usage unknown&lt;br /&gt;
*iType[23]	Playable: Jill (map overview in Jill3)		&lt;br /&gt;
*iType[54]	Playable: Fish (never used in maps - if player dies, restart as Jill)&lt;br /&gt;
*iType[56]	Playable: Firebird (never used in maps - if player dies, restart as Jill)&lt;br /&gt;
*iType[57]	Playable: Frog (never used in maps - if player dies, restart as Jill)&lt;br /&gt;
*iType[12]	Trigger: Checkpoint&lt;br /&gt;
:iCounter (&#039;&amp;gt;= 0&#039;): checkpoint/level number&lt;br /&gt;
:iPointer: pointer&lt;br /&gt;
:&#039;&#039;&#039;NOTE:&#039;&#039;&#039; Always lock access to previous checkpoint when the player reaches a new checkpoint. This item reads an entry from the string stack: a single-character code and a filename. If the code is &amp;quot;*&amp;quot;, it means &amp;quot;load and play this song from the beginning&amp;quot;. If the code is &amp;quot;#&amp;quot;, it means &amp;quot;keep on playing this song&amp;quot;. If the code is &amp;quot;!&amp;quot;, then there&#039;s no filename and it means &amp;quot;load previous map&amp;quot;. If there&#039;s no code, then the filename is the next level to load.&lt;br /&gt;
*iType[15]	Trigger: Touch Trigger&lt;br /&gt;
:iCounter (&#039;&amp;gt;= 0&#039;): target tag&lt;br /&gt;
*iType[32]	Trigger: Switch&lt;br /&gt;
:iState (usually &#039;0&#039;): switch position, if target is off, set to &#039;1&#039;&lt;br /&gt;
:iXD (usually &#039;0&#039;): set to &#039;0&#039; when triggering two objects with different start states (one bridge &#039;off&#039; and a wall &#039;on&#039; for exemple)		&lt;br /&gt;
*iType[52]	Trigger: Press Button&lt;br /&gt;
:iXD (set to &#039;1&#039; to face right, &#039;-1&#039; to face left): direction&lt;br /&gt;
:iState (set to &#039;1&#039; if target is off)&lt;br /&gt;
:iSubState&#039;&#039;): usage unknown, rarely used&lt;br /&gt;
:iCounter (&#039;&amp;gt;= 0&#039;): target tag		&lt;br /&gt;
*iType[24]	Misc: Locked Door&lt;br /&gt;
:iYD (usually &#039;0&#039;, set to &#039;1&#039; for crystal): required key type&lt;br /&gt;
:iCounter (&#039;&amp;gt;= 0&#039;): self tag&lt;br /&gt;
*iType[25]	Misc: Collapsing ceiling&lt;br /&gt;
:iCounter (&#039;&amp;gt;= 0&#039;): self tag&lt;br /&gt;
*iType[26]	Misc: Toggle Wall&lt;br /&gt;
:iXD (set to 1 for horizontal/floor)&lt;br /&gt;
:iYD (set to 1 for vertical/wall)&lt;br /&gt;
:iCounter (&#039;&amp;gt;= 0&#039;): self tag&lt;br /&gt;
:&#039;&#039;&#039;NOTE:&#039;&#039;&#039; If set as wall, must be placed on top of the wall, if set as floor, must be placed on the far left of the floor. By default, these walls are &amp;quot;off&amp;quot;, use &amp;quot;ELEVMID&amp;quot; tiles for wall and &amp;quot;BRIDGE&amp;quot; for floor. Walls and bridges cannot go through two different types of tiles.&lt;br /&gt;
*iType[44]	Misc: Knight&lt;br /&gt;
:iState (set to &#039;1&#039; for start on, &#039;0&#039; for start off): initial state&lt;br /&gt;
:iStateCount (set to &#039;6&#039; for &#039;none shall pass&#039;)&lt;br /&gt;
:iCounter (&#039;&amp;gt;= 0&#039;): self tag (toggle when triggered)&lt;br /&gt;
*iType[61]	Misc: Lift&lt;br /&gt;
:iCounter (usually &#039;0&#039;): if set to &#039;-1&#039;, do not return to initial state&lt;br /&gt;
&lt;br /&gt;
=== Items &amp;amp; Bonus ===&lt;br /&gt;
&lt;br /&gt;
*iType[1]	Bonus: Apple&lt;br /&gt;
*iType[28]	Bonus: Pickup Item &amp;amp; morphing icons&lt;br /&gt;
:iCounter (&#039;&amp;gt;= 0&#039;): item type (can be anything from 0 to 9 and matches the inventory item number)		&lt;br /&gt;
*iType[2]	Weapon: Knive&lt;br /&gt;
*iType[14]	Key: Old Red Key&lt;br /&gt;
*iType[33]	Key: Crystal&lt;br /&gt;
:iCounter (rarely set to &#039;1&#039;): usage unknown&lt;br /&gt;
&lt;br /&gt;
=== Monsters ===	&lt;br /&gt;
&lt;br /&gt;
*iType[4]	Green bug&lt;br /&gt;
:iXD (usually &#039;2&#039;): movement speed&lt;br /&gt;
*iType[7]	Devil&lt;br /&gt;
*iType[8]	Bunny&lt;br /&gt;
*iType[9]	Worm&lt;br /&gt;
:iXD (usually &#039;2&#039;): movement speed&lt;br /&gt;
*iType[11]	Giant Slug&lt;br /&gt;
:iXD (usually &#039;2&#039;): movement speed&lt;br /&gt;
*iType[17]	Lizard Man&lt;br /&gt;
:iXD (usually &#039;2&#039;): movement speed		&lt;br /&gt;
*iType[22]	Frog&lt;br /&gt;
*iType[29]	Giant Ant&lt;br /&gt;
:iXD (usually &#039;3&#039;): movement speed&lt;br /&gt;
*iType[30]	Phoenix&lt;br /&gt;
:iXD (usually &#039;3&#039;): movement speed&lt;br /&gt;
*iType[39]	Invincible Snake&lt;br /&gt;
:iXD (usually &#039;2&#039;): movement speed&lt;br /&gt;
*iType[43]	Giant Bat&lt;br /&gt;
*iType[45]	Hive&lt;br /&gt;
*iType[46]	Bees&lt;br /&gt;
*iType[47]	Crab&lt;br /&gt;
*iType[48]	Gator&lt;br /&gt;
:iXD (usually &#039;2&#039;): movement speed	&lt;br /&gt;
*iType[53]	Ghost&lt;br /&gt;
:iXD (usually &#039;2&#039;): initial direction&lt;br /&gt;
:iCounter (usually &#039;2&#039;): movement speed&lt;br /&gt;
:&#039;&#039;&#039;NOTE:&#039;&#039;&#039; Ghosts move along the same tile type&lt;br /&gt;
*iType[59]	Jellyfish&lt;br /&gt;
*iType[60]	Eels&lt;br /&gt;
&lt;br /&gt;
=== Traps ===&lt;br /&gt;
&lt;br /&gt;
*iType[35]	Rolling Stone&lt;br /&gt;
*iType[38]	Falling Spike&lt;br /&gt;
:iCounter (&#039;&amp;gt;= 0&#039;): self tag (fall when triggered)&lt;br /&gt;
*iType[41]	Boucing Ball&lt;br /&gt;
:iCounter (usually &#039;4&#039;): ball type (0-small, 3-red, 4-green)&lt;br /&gt;
*iType[65]	Sparks&lt;br /&gt;
:iYD (usually &#039;2&#039;): movement speed&lt;br /&gt;
:&#039;&#039;&#039;NOTE:&#039;&#039;&#039; Sparks move along the same tile type&lt;br /&gt;
&lt;br /&gt;
=== Misc ===&lt;br /&gt;
&lt;br /&gt;
*iType[13]	Misc: Prince&lt;br /&gt;
:iState (&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;): object animation frame&lt;br /&gt;
*iType[19]	Misc: Cloud&lt;br /&gt;
:iCounter (&#039;&amp;gt;= 0&#039;): usage unknown&lt;br /&gt;
:iXD (&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;): movement speed&lt;br /&gt;
*iType[20]	Misc: Write text (small capital letters)&lt;br /&gt;
:iXD (&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;): CGA color index number&lt;br /&gt;
:iYD (usually &#039;-1&#039; for transparent): background color&lt;br /&gt;
:lPointer: pointer&lt;br /&gt;
:&#039;&#039;&#039;NOTE:&#039;&#039;&#039; This item reads an entry from the string stack&lt;br /&gt;
*iType[21]	Misc: Write text (big letters)&lt;br /&gt;
:iXD (&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;): CGA color index number&lt;br /&gt;
:iYD (usually &#039;-1&#039; for transparent): background color&lt;br /&gt;
:lPointer: pointer&lt;br /&gt;
:&#039;&#039;&#039;NOTE:&#039;&#039;&#039; This item reads an entry from the string stack&lt;br /&gt;
*iType[40]	Misc: Underwater Rock&lt;br /&gt;
*iType[42]	Misc: Huge letter&lt;br /&gt;
:iXD (&#039;&amp;gt;= 0&#039;): letter type (0-M, 1-E, 2-G, 3-A, 4-S)&lt;br /&gt;
:iCounter (&#039;&amp;gt;= 0&#039;): self tag (fall when triggered)&lt;br /&gt;
*iType[49]	Misc: Epic Logo&lt;br /&gt;
*iType[51]	Misc: Big Skull&lt;br /&gt;
:iCounter (&#039;&amp;gt;= 0&#039;): self tag (laugh with red gloomy eyes when triggered)&lt;br /&gt;
*iType[64]	Misc: Eye&lt;br /&gt;
*iType[66]	Misc: Flag&lt;br /&gt;
*iType[67]	Misc: &amp;quot;Demo&amp;quot;/&amp;quot;Map&amp;quot; sign&lt;br /&gt;
:iXD (sign type, &#039;&amp;gt;= 0&#039;): set to &#039;1&#039; for &amp;quot;map&amp;quot;, &#039;0&#039; for &amp;quot;demo&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Untested ===&lt;br /&gt;
&lt;br /&gt;
*iType[3]	? (buggy/unusable)&lt;br /&gt;
*iType[5]	? (buggy/unusable)&lt;br /&gt;
*iType[10]	? (buggy/unusable)&lt;br /&gt;
*iType[16]	? (buggy/unusable)&lt;br /&gt;
*iType[27]	? (buggy/unusable)&lt;br /&gt;
*iType[34]	? (buggy/unusable)&lt;br /&gt;
*iType[50]	? (buggy/unusable)&lt;br /&gt;
*iType[55]	? (buggy/unusable)&lt;br /&gt;
*iType[6]	Buggy: harmless firebird&lt;br /&gt;
*iType[18]	Saves: Demon attack&lt;br /&gt;
:iSpeedX (&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;): Horizontal speed&lt;br /&gt;
:iSpeedY (&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;): Vertical speed&lt;br /&gt;
*iType[31]	Saves: flame attack&lt;br /&gt;
*iType[36]	Saves: Particle&lt;br /&gt;
:iState (&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;): color&lt;br /&gt;
:iSpeedX (&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;): velocity X&lt;br /&gt;
:iSpeedY (&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;): velocity Y&lt;br /&gt;
:iFlag (&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&#039;16384&#039;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;): Unknow&lt;br /&gt;
:iCounter (&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;): Unknow&lt;br /&gt;
*iType[37]	Saves: Pain effect&lt;br /&gt;
*iType[58]	Saves: Bubbles&lt;br /&gt;
:iFlag (&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&#039;16384&#039;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;): Unknow&lt;br /&gt;
*iType[62]	Saves: Player attack (fireball)&lt;br /&gt;
*iType[63]	Saves: Player attack (fish)&lt;br /&gt;
&lt;br /&gt;
== Credits ==&lt;br /&gt;
&lt;br /&gt;
This file format was reverse engineered by [[User:Malvineous|Malvineous]], [[User:Ilovemyq3map2|Ilovemyq3map2]] and [[User:SaxxonPike|SaxxonPike]].  If you find this information helpful in a project you&#039;re working on, please give credit where credit is due.  (A link back to this wiki would be nice too!)&lt;br /&gt;
&lt;br /&gt;
[[Category:Jill of the Jungle]]&lt;br /&gt;
[[Category:File Formats]]&lt;br /&gt;
[[Category:Map Files]]&lt;/div&gt;</summary>
		<author><name>Jaguar</name></author>
	</entry>
</feed>