<?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=Eros</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=Eros"/>
	<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/wiki/Special:Contributions/Eros"/>
	<updated>2026-05-15T03:14:35Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.11</generator>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Talk:Catacomb_Map_Format&amp;diff=4259</id>
		<title>Talk:Catacomb Map Format</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Talk:Catacomb_Map_Format&amp;diff=4259"/>
		<updated>2012-05-07T17:15:13Z</updated>

		<summary type="html">&lt;p&gt;Eros: Oops...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;What is missing for this page? I can provide nearly anything. A screenshot? A spritesheet of the tileset? Whatever you need. - [[User:Eros|Eros]] 12:35, 6 May 2012 (GMT)&lt;br /&gt;
: Looks like just a sample level image is all that&#039;s remaining.  Are you able to get one showing the full 64x64 level in its initial state, with enemies etc. in their start places?  If not a game screenshot will do for the time being, preferably cropped to remove the status bar etc. and showing just the level itself. -- [[User:Malvineous|Malvineous]] 02:47, 7 May 2012 (GMT)&lt;br /&gt;
:: Malvineous, do you mean something like this? http://www.vgmaps.com/Atlas/PC/index.htm#Catacomb [[User:Frenkel|Frenkel]] 16:49, 7 May 2012 (GMT)&lt;br /&gt;
::: I uploaded a picture of level 1 that you created Frenkel, It&#039;s a little too big, Malvineous, perhaps you can make it a thumbnail? - [[User:Eros|Eros]] 17:15, 7 May 2012 (GMT)&lt;/div&gt;</summary>
		<author><name>Eros</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=File:Catacomb_Map_Format.png&amp;diff=4258</id>
		<title>File:Catacomb Map Format.png</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=File:Catacomb_Map_Format.png&amp;diff=4258"/>
		<updated>2012-05-07T17:04:00Z</updated>

		<summary type="html">&lt;p&gt;Eros: Catacomb level 1.


Provided by Frenkel&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Catacomb]] level 1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Provided by [[User:Frenkel|Frenkel]]&lt;/div&gt;</summary>
		<author><name>Eros</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Talk:Catacomb_Map_Format&amp;diff=4255</id>
		<title>Talk:Catacomb Map Format</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Talk:Catacomb_Map_Format&amp;diff=4255"/>
		<updated>2012-05-06T12:35:12Z</updated>

		<summary type="html">&lt;p&gt;Eros: What do you need?&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;What is missing for this page? I can provide nearly anything. A screenshot? A spritesheet of the tileset? Whatever you need. - [[User:Eros|Eros]] 12:35, 6 May 2012 (GMT)&lt;/div&gt;</summary>
		<author><name>Eros</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=User_talk:Malvineous&amp;diff=4250</id>
		<title>User talk:Malvineous</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=User_talk:Malvineous&amp;diff=4250"/>
		<updated>2012-05-06T03:54:42Z</updated>

		<summary type="html">&lt;p&gt;Eros: /* Catacomb */ oops&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Wolfenstein 3D -&amp;gt; Wolfenstein 3-D ==&lt;br /&gt;
I&#039;ve corrected the infamous 3D tyop in the names of several Wolf3D-related pages; can you please delete the following ones?&lt;br /&gt;
&lt;br /&gt;
[[:Category:Wolfenstein 3D]] -&amp;gt; Superseded by [[:Category:Wolfenstein 3-D]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[:Image:Wolfenstein_3D.png]] -&amp;gt; Superseded by [[:Image:Wolfenstein_3-D.png]]&lt;br /&gt;
&lt;br /&gt;
Thanks :) --De Zeurkous (zeurkous@zeurcomp.nichten.info), Thu Nov 22 08:18:42 UTC 2007&lt;br /&gt;
&lt;br /&gt;
:Haha, you&#039;ve certainly been busy.  Don&#039;t forget that this wiki isn&#039;t meant to be an encyclopaedia of the games, its main purpose is documenting the file formats and editing tools that can be used with the games, as opposed to how the games behave without any mods, or what they might be called if you forget to change the title screen :-) -- [[User:Malvineous|Malvineous]] 11:14, 22 November 2007 (GMT)&lt;br /&gt;
&lt;br /&gt;
::Nah, I haven&#039;t forgotten. As we&#039;re reinventing the wheel for a semi-virgin wiki, the naming and something static like the cheats seemed like a good place to start :) --De Zeurkous (zeurkous@nichten.info), Thu Nov 22 12:20:04 UTC 2007&lt;br /&gt;
&lt;br /&gt;
== Jill of the Jungle palette ==&lt;br /&gt;
&lt;br /&gt;
Hi, I&#039;m currently working on a level viewer for [[Jill of the Jungle]] (maybe an editor later on). Some of the information I found here has been very useful, but there&#039;s one thing I&#039;m a bit stuck on. On the [[SHA Format]] page it says:&lt;br /&gt;
:&#039;&#039;Each array item contains 4 unsigned bytes, representing CGA, EGA and VGA, respectivley, and then a null value. [...] Each byte maps to the index of a colour in the palette. If there are no colours required, the tile set uses the default colours.&#039;&#039;&lt;br /&gt;
However, it doesn&#039;t say anywhere where the palette can be found. Is it stored in the EXE file? I hope you can help me on this :)&lt;br /&gt;
&lt;br /&gt;
Regards, [[User:Spinal|Spinal]] 13:00, 2 March 2008 (GMT)&lt;br /&gt;
&lt;br /&gt;
:Unfortunately I didn&#039;t write the JotJ SHA page, and I haven&#039;t yet had the time to figure this out.  For Xargon I&#039;ve taken the quick and dirty route and used a screenshot from within DOSBox as the source of the palette, until I can figure out where the palette is located.  If you find this out, don&#039;t forget to update the page! :-) -- [[User:Malvineous|Malvineous]] 22:02, 2 March 2008 (GMT)&lt;br /&gt;
&lt;br /&gt;
::Hey Spinal, sorry, I wrote the [[SHA Format]] page, so that was probably my bad. I wasn&#039;t able to find the palette either. I assume it&#039;s in the .EXE, however I spent a fair bit of time manually mapping it using a Wombat tool (http://www.szevvy.com/node/3). I was also writing a level viewer (initally in XHTML which turned out to be too slow, so then I moved to Flash 9). I tried to email you my findings, but the email bounced. I&#039;m not sure if they were 100% accurat, which is why I never added them to the documentation.&lt;br /&gt;
&lt;br /&gt;
::Hey Malvineous, it seems the Jill - [[DMA Format]] page has been removed. Do you have a log of what happened to it? I&#039;m sure it existed at some point.&lt;br /&gt;
&lt;br /&gt;
::- [[User:dheim|Daniel]] 20:00, 5 March 2008&lt;br /&gt;
&lt;br /&gt;
:::I don&#039;t ever remember seeing a DMA page - certainly there&#039;s nothing in the wiki logs about it being deleted or renamed.  Maybe you started working on it but never got around to saving it?  Or is it one of the Xargon pages that shares the same format as Jill?  (by the way, you can type &amp;lt;nowiki&amp;gt;~~~~&amp;lt;/nowiki&amp;gt; to automatically put in the signature in these messages.) -- [[User:Malvineous|Malvineous]] 11:28, 5 March 2008 (GMT)&lt;br /&gt;
&lt;br /&gt;
::::Sorry, it must have been the stuff in the [[SHA Format]] page that I was thinking of. I may have added the link to the [[DMA Format]] page, and never expanded on it. - [[User:Dheim|Daniel]] 02:46, 6 March 2008 (GMT)&lt;br /&gt;
&lt;br /&gt;
:::::Hi guys. Sorry for the mistake, I mixed up the authors of the SHA and level formats. I&#039;ve written a level viewer in PHP the last week, by using static images instead of getting them from the actual files. This causes some problems for episode 2, which uses a different palette, but besides that it works great :) When everything is done I&#039;ll upload the maps to my server and the tile/object lists to this wiki.&lt;br /&gt;
:::::@Daniel: strange that it bounced, I confirmed my address so it should be working fine... You can mail it to spinal -at- zanderz -dot- net. Also, I saw on your Wombat page that you &amp;quot;have a vague idea of how to do&amp;quot; [[Hocus Pocus]]. Could you share your findings on this wiki? I&#039;d love to make maps, or even a level viewer/editor for that game :) -- [[User:Spinal|Spinal]] 00:32, 8 March 2008 (GMT)&lt;br /&gt;
:Okay, with help of [[User:Dheim|Daniel]] who send me the palette I found it! I&#039;ll put my findings on [[Jill of the Jungle palette]]. -- [[User:Spinal|Spinal]] 15:36, 13 March 2008 (GMT)&lt;br /&gt;
&lt;br /&gt;
== Halloween Harry/Alien Carnage ==&lt;br /&gt;
&lt;br /&gt;
Hi Malvineous. Thanks for your edits on the GMF article! I notice you mentioned there exist versions of the game which don&#039;t require exploding a BNK to get at the game data. What does the directory structure look like for the version you have? I&#039;m working on a map viewer (which will become a map editor at some point) and would like it to be able to work on whatever versions are out there. Thanks for any info. -[[User:Duckthing|Duckthing]] 04:41, 11 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
: Hi Duckthing - no worries, Halloween Harry has long been an interest of mine, but my map editor sadly needs a lot more work before I can begin reverse engineering more file formats so I&#039;m glad you&#039;ve made a start!  AFAIK technically Halloween Harry has no compression, but for whatever reason (probably listed in the Apogee FAQ) they decided to swap episodes 1 and 3, compress the BNK file and then re-release it under the name Alien Carnage.  You can download all available versions (including registered versions since the game was released as freeware in 2007) from [http://www.classicdosgames.com/game/Alien_Carnage.html RGB Classic Games].  BTW not sure if you noticed but I also posted a couple of things on the GMF article&#039;s talk/discussion page. -- [[User:Malvineous|Malvineous]] 06:08, 11 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
:: Thank you! Working with the uncompressed version will keep things less complicated. I did notice the GMF discussion you added, but haven&#039;t had a chance to really go through it yet. -- [[User:Duckthing|Duckthing]] 06:41, 11 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
::: No worries.  If you&#039;re running Linux or MacOSX you should be able to compile [[Camoto|libgamearchive]] which will let you copy files in and out of the BNK files.  This is a library so it&#039;s also possible to use it in your own program for accessing and editing the map files while they&#039;re still inside the BNK, for instance.  (BTW the &#039;minor&#039; tickbox should only be used when the edit does not affect the information on the page - e.g. fixing a typo or a broken URL.  If you are changing the actual content on a page it is never a minor edit!) -- [[User:Malvineous|Malvineous]] 07:51, 11 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Dangerous Dave ==&lt;br /&gt;
&lt;br /&gt;
Working on this, does anyone have any info on the formats? The EGA graphics are 84KB and external, but CGA and VGA graphics unrelated to them are in the 174KB executable, apparently uncompressed, I don&#039;t know how this is possible. I&#039;ve found the levels and partially reverse engineered the format (The first 1000 bytes, a 100x10 array of tiles.) but each level is followed by ~280 bytes of variable and unknown data I assume is sprites. I have a list of internal files in the executable, looks like most of it is non-game code. Any help would be appreciated. -[[User:Levellass|Endian? What are you on about?]] 06:03, 12 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
: Hmm, interesting.  All I can suggest for the levels is - as you&#039;re probably already familiar with - changing the values in a hex editor then loading the game to see what happens.  I would suspect that all the graphics would be in a similar format, so if there are any headers or structures used in the EGA graphics files perhaps they&#039;re duplicated for CGA/VGA?  Also John Romero seems pretty accessible, perhaps you could ask him directly?  Failing that, randomly writing data into the .exe until the images change could be used as a last resort! -- [[User:Malvineous|Malvineous]] 12:09, 12 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
: Ha, that was easier than I expected - uncompressed VGA data is easy to find with a good hex editor ;-)  [http://www.shikadi.net/pics/ddave-vga-hexdump.png This looks like it] -- [[User:Malvineous|Malvineous]] 12:17, 12 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
: Ok that was only the menu graphics.  At offset 0xC629 there&#039;s some sort of offset table which looks very similar to the contents of EGADAVE.DAV but there are extra bytes dotted all over the place - perhaps it&#039;s RLE encoded?  Actually just before that there&#039;s the number 0x6CAA.  If you go a bit less than 0x6CAA bytes after this you end up with another table, which to me suggests that 0x6CAA is the decompressed size of that first table. -- [[User:Malvineous|Malvineous]] 13:01, 12 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
:If I remember it correctly, the VGA sprites and tiles are RLE compressed and it&#039;s not too hard to decompress them. The positions of the enemies in the levels on the other hand are still a mystery to me. [[User:Calvero|Calvero]] 20:43, 12 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
: Looking at the levels, which directly follow the VGA palette, they seem to contain 256 bytes of header data, then the 100x10 tiles, then eight bytes of lead-out data.  Then the next level&#039;s 256 bytes of header, 100x10 tiles, then eight bytes of lead-out.  Although I say &amp;quot;level&amp;quot;, the first &amp;quot;level&amp;quot; seems to contain both level 1 and 2, and this seems to be the way it works in the game - in some levels you can see through to others.  I&#039;m not sure what the 256 bytes of header data are for, but some levels have FF FF 00 00 repeated which seems to indicate two uint16 fields which are blanked out for those levels. -- [[User:Malvineous|Malvineous]] 13:15, 13 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
::First up, levels; where does level 1 start? It&#039;s possible I&#039;m reading the start of a level as the previous level&#039;s end, I looked for the start of tile data, which I assumed, like Keen 1, would be the level start.&lt;br /&gt;
&lt;br /&gt;
::Next, palette; I&#039;m assuming, as you said, it is located just before the level data?&lt;br /&gt;
&lt;br /&gt;
::There is VGA and CGA graphics in the executable, plus headers, but the bulk of graphics for CGA and VGA I haven&#039;t been able to locate. If the data is RLE compressed I should think it would use either Keen 1-3 fullscreen or Jazz Jackrabbit tile RLE, both of which I know well. I&#039;ll look into both of these options, cheers! -[[User:Levellass|Endian? What are you on about?]] 12:03, 20 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
:::I&#039;ve found the VGA and CGA data for the menu graphics.  It looks like the CGA data is stored in a series of 1-bit-per-pixel (monochrome) images.  Or it could be EGA data with the planes split out (e.g. red plane for all images, then green plane for all images, etc.)  I think I found three planes which means it&#039;s probably EGA, as CGA would have a max of two planes.  I&#039;ve also found the font graphics, this looks like 4bpp/16 colour EGA data.  Haven&#039;t seen level graphics yet.  I&#039;ve successfully modded the levels with a hex editor (putting the jetpack everywhere) so now I&#039;ve finally looked at all the levels!  The creatures are definitely not stored in the 100x10 tile data.  Putting random bytes in there revealed that the values are indices into the image files, because if you put the value in for fire it will animate, and the following three or so values show up as still frames from the fire animation.&lt;br /&gt;
&lt;br /&gt;
:::The VGA palette starts at 0x26B0A (I updated the main DDave page with this) + 768 bytes leads straight onto the start of level 1 at 0x26E0A.  So at 0x26E0A there are 256 bytes of data, then 100x10 tiles, then 24 bytes of footer data.  Some of this data (perhaps footer data) might be the level start coordinates, because Dave doesn&#039;t always start the level at the same place (e.g. the warp level when you climb the tree on level 5 and jump off the edge of the screen.) -- [[User:Malvineous|Malvineous]] 12:24, 20 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
:::I think I&#039;ve found all the files so far, I&#039;ve updated [[Dangerous Dave]] with the offsets of the files, including what appears to be CGA and VGA tiles.  I&#039;m not sure what sort of format they&#039;re in though, it looks like they might be compressed (and so the offsets in that list might be off by ~4, as I may have cut off the decompressed-size field.)  I&#039;ve also updated the map format page, I think it&#039;s pretty much fully reverse engineered now. -- [[User:Malvineous|Malvineous]] 05:13, 21 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Noahs Ark 3D and IMFs ==&lt;br /&gt;
&lt;br /&gt;
Been poking around Noah&#039;s Ark 3D, an adaption of the Wolfenstein game and found a few interesting things which I&#039;m hoping to confirm.&lt;br /&gt;
&lt;br /&gt;
First, the game uses MID files, not IMF files for music, second, the MIDI files have an extra word at the start of the file giving the file length. Third, the code uses the first word of the midi file as the length of data to read from the file and put into memory to play. After poking around a bit in Wolfenstein and Keen I believe this is the same with IMF files, that is, ALL IMF files are type 0 as it were and the type 1s are read just like type 0s by the games (The first word is read as the amount of IMF data to copy into memory to play, this is then read as type 0.) I&#039;m not quite sure what this does for the two types since type 1 is would essentially be a type 0 with a header and footer that are part of the AUDIO.xxx format, much like PC\adlib sounds can have the huffman lengths at the start. Are there any games that use &#039;individual&#039; type 1 IMFs (Even if included as part of a group file. All I&#039;ve seen are games like cosmo, where non-AUDIO IMFs are type 0.)&lt;br /&gt;
&lt;br /&gt;
Should there be a Noah&#039;s Ark 3D page and should we add the midi note to the AUDIO format page? It seems that the format can hold any type of music file the game can read, not just IMFs.  -- Levellass&lt;br /&gt;
&lt;br /&gt;
: Yes it is known that the type-1 header might really be part of the AUDIO.xxx format but alas there were many type-1 files floating around the place (incorrectly extracted, you could argue) before this was realised, so the format variant is here to stay.  It does have some advantages though (like tagging files with the song title) but I&#039;m not sure whether anyone has figured out definitively whether the header (and footer, in the case of the Wolf3D files) belongs to the IMF or the AUDIO file.  I guess you&#039;d have to browse the game source code and see how the game uses the data to know for sure.&lt;br /&gt;
&lt;br /&gt;
: As far as the MIDI goes, I believe the AUDIO.xxx file is just a container file like any other, capable of supporting any data at all.  It&#039;s up to the game to decide how to use it.  If anything this makes me think it would fit better if the AUDIO.xxx article was merely documenting the structure, with links to actual audio formats like PC SFX, Adlib SFX, IMF and MIDI and notes about which games make use of which formats.&lt;br /&gt;
&lt;br /&gt;
: Oh and yes, by all means create a page for the new game. -- [[User:Malvineous|Malvineous]] 08:41, 3 February 2011 (GMT)&lt;br /&gt;
&lt;br /&gt;
== Sound Files category ==&lt;br /&gt;
&lt;br /&gt;
I don’t know why there’s a Sound Files category and also an Audio Files category... it seems redundant. I left those categories the way they are though.&lt;br /&gt;
&lt;br /&gt;
Also, the [[File format data types]] page needs some signed ints, but I didn’t know what naming convention you wanted to use. I described something as an [[INT16LE]] on [[BMC Format]]. [[User:Yellowantphil|Yellowantphil]] 20:12, 11 September 2011 (GMT)&lt;br /&gt;
&lt;br /&gt;
: Not sure about the Sound vs Audio - I use the term &#039;audio&#039; to mean both sound and music, but you&#039;re right, if there are separate sound and music categories we don&#039;t really need an audio one as well.  Feel free to update.  [[INT16LE]] is perfectly fine too!  I added a note to the data types page. -- [[User:Malvineous|Malvineous]] 22:30, 11 September 2011 (GMT)&lt;br /&gt;
&lt;br /&gt;
== GamePage template ==&lt;br /&gt;
&lt;br /&gt;
Should the GamePage template add the page to its own category? It seems a little odd that [[Wacky Wheels]] is not in the Wacky Wheels category. [[User:Yellowantphil|Yellowantphil]] 04:51, 16 September 2011 (GMT)&lt;br /&gt;
: I decided against this because there is a link to the game&#039;s page in the category intro at the top of the page.  It seemed unnecessary having another link in amongst all the other pages.  This was also because the game page was really only meant to be a summary, there wasn&#039;t supposed to be a huge amount of detail on it, only links to other pages with the detail (which then would appear in the category list.)  I would imagine that, eventually, [[Wacky Wheels]] would be tweaked to move a lot of the content onto subpages. -- [[User:Malvineous|Malvineous]] 12:58, 16 September 2011 (GMT)&lt;br /&gt;
&lt;br /&gt;
== Scope of the wiki ==&lt;br /&gt;
&lt;br /&gt;
I don’t know how extensive you want the information to be on ModdingWiki... I added a few lists of audio and graphics files a while ago, and there will probably be other information that I’ll find out that’s potentially helpful for level editing but not directly related to it. I can move some information to my website if it starts to become out of scope for your wiki. I also sometimes end up documenting everything imaginable... there’s some minutiae on my website and possibly on your wiki that I ought to go through and delete. [[User:Yellowantphil|Yellowantphil]] 05:28, 10 October 2011 (GMT)&lt;br /&gt;
&lt;br /&gt;
:Hmm, that&#039;s a difficult one - I&#039;m always in favour of documenting more rather than less.  Generally speaking if it&#039;s related to a game and it would help either a programmer writing a utility or a someone trying to change a game manually then it should be documented.  About the only thing that comes to mind that&#039;s over documenting is when some small calculation is expressed in a couple of different programming languages, but I&#039;ve left that in so people can just copy it rather than trying to figure it out from the text.  But the [[Wacky Wheels]] page is probably the gold standard for what all wiki pages should look like :-)  Do you have anything in particular you&#039;re unsure of whether it would fit here? -- [[User:Malvineous|Malvineous]] 10:07, 10 October 2011 (GMT)&lt;br /&gt;
&lt;br /&gt;
::I was mainly thinking of the list of VOC files on [[Wacky Wheels Music and Sound Effects]] and the list of &amp;lt;tt&amp;gt;*.sp&amp;lt;/tt&amp;gt; files on [[Wacky Wheels Graphics Formats]]. I have an expanded list of the &amp;lt;tt&amp;gt;*.sp&amp;lt;/tt&amp;gt; files on my computer but it isn’t finished yet. I guess there isn’t all that much more Wacky Wheels information to be added to this wiki though. There is still some modding information on my website that ought to be moved over here, so that would take up another page or two. I’ve been lazy about doing Wacky Wheels stuff lately, but I might find some time for it this weekend.&lt;br /&gt;
&lt;br /&gt;
::By the way, I guess that guy from Cascadia Games emailed you. It’s pretty interesting that WW might become an iPhone app. He told me that he was going to be using his own game engine, which sounds a lot easier than trying to get a hold of the WW source code and porting it. —[[User:Yellowantphil|Yellowantphil]] 16:46, 15 October 2011 (GMT)&lt;br /&gt;
&lt;br /&gt;
::: I was going to say the list of VOCs might be overkill, but then the list of .sp files might be useful.  To be honest, it&#039;s the sort of thing that you could probably omit if you were feeling lazy, but likewise I don&#039;t mind at all if you choose to include it, so since it&#039;s already there I&#039;m happy to keep it.&lt;br /&gt;
&lt;br /&gt;
::: Yes I did get an e-mail from Cascadia, I was going to pass along your details but it sounds like you&#039;re already aware of it!  Using their own engine might make it a bit smoother than the original, as the jerkiness of turning is my only criticism of the game. -- [[User:Malvineous|Malvineous]] 00:14, 16 October 2011 (GMT)&lt;br /&gt;
&lt;br /&gt;
== Wacky Wheels ==&lt;br /&gt;
&lt;br /&gt;
Basically all of the WW modding information from my website is here now. I moved one page when I realized it should probably be capitalized to match the rest of the pages on this site... you can delete the redirect at [[Wacky Wheels high score files]] if you want to.&lt;br /&gt;
&lt;br /&gt;
Now, I need to remove most of the modding information from my website and refer people here. Then we’ll have reached the glorious future where all WW modding information is in one place. I’m going to keep those two text files of notes on my website though—the information in them is disorganized and I think not 100% accurate, but they might have some information that isn’t here yet.&lt;br /&gt;
&lt;br /&gt;
By the way, how’s Camoto going? I’m planning to use it to make a new WW level, but I won’t have time for it for a few more months. —[[User:Yellowantphil|Yellowantphil]]&lt;br /&gt;
&lt;br /&gt;
: Sounds good!  Thanks for all the effort you&#039;ve put in by moving it across.  I think Wacky Wheels is now the most completely documented game on the wiki!  Also can&#039;t hurt leaving your own info up - sometimes it&#039;s nice to go back to the original source if something is unclear.  Camoto&#039;s going well, but unfortunately I haven&#039;t had much time to work on it over the last few weeks.  You probably won&#039;t be able to make much of a level until I add in the ability to select a tile from the tileset, but that&#039;s in progress and hopefully will be ready by the time you are!  Keep me posted when you do start your level(s?) -- [[User:Malvineous|Malvineous]] 12:22, 2 February 2012 (GMT)&lt;br /&gt;
&lt;br /&gt;
::Well, as I was reading some of the information on my website, I noticed that it isn’t written very well. I wrote those pages back when I had very little experience programming. Anyway, I’m planning to redesign my website soon, and this will save me from having to rewrite a few of those pages.&lt;br /&gt;
&lt;br /&gt;
::The tile editor in Camoto as it is now is still certainly useful—I can add new tile types to a level using a binary editor and then move them around in Camoto. I think that it shouldn’t be too hard to make a new WW level using the Gimp and Camoto plus some binary editing. I recall having some problems with the route editor for the computer players, but I didn’t look into it at the time—I’ll let you know when I’m working with Camoto again, and I’ll try to come up with some useful bug reports or fixes if I run into problems. —[[User:Yellowantphil|Yellowantphil]] 14:06, 2 February 2012 (GMT)&lt;br /&gt;
&lt;br /&gt;
== Catacomb ==&lt;br /&gt;
&lt;br /&gt;
Hey [[User:Malvineous|Malvineous]], do you know anyone who has properly read the [[Inverse_Frequency_Sound_format|Inverse Sound Frequency]] file format and got the sound playing? I&#039;m struggling with some fine details in my game. Sounds play near what they should sound like, but the sound quality is all crackly and some sounds play totally incorrect. I followed a basic [http://web.archive.org/web/20000818033701/http://www.dd.chalmers.se/~f98anga/projects/keen/sounds2raw.c code sample] by Anders Gavare. Does your tool support this? Interested in helping me figure this out? My current code is available at [https://code.google.com/p/cataclone/source/browse/trunk/src/catacomb/catacomb_sound.c catacomb_sound.c] - [[User:Eros|Eros]] 11:57, 5 May 2012 (GMT)&lt;br /&gt;
: Should this be moved to my talk page? - [[User:Eros|Eros]] 11:59, 5 May 2012 (GMT)&lt;br /&gt;
:: Probably best to keep it on my talk page if you want me to respond in a timely manner :-)  I based my old utility off Anders&#039; one too, but it&#039;s been a long time since I looked at the code.  My latest utility doesn&#039;t support sound effects yet.  I know Levellass has written a few utilities to play and edit those sound files, so I think your best bet would probably be to post over at the [http://www.keenmodding.org Keen:Modding] forum.  Do note that PC Speaker effects do sound crackly at the best of times, though!  Also make sure you&#039;ve got the right audio format (8-bit vs 16-bit, signed vs unsigned) - I remember some inconsistencies there causing some very distorted results for me.  I love the name &#039;Cataclone&#039; - does your code compile under Linux? -- [[User:Malvineous|Malvineous]] 13:21, 5 May 2012 (GMT)&lt;br /&gt;
::: I currently compile the code using Code::Blocks with GCC 4.6 -std=gnu99. It *should* compile under Linux. But I haven&#039;t tested that out yet. [[Catacomb]] sounds also have flags attached to each one, It&#039;s not exactly the same specification as what it says @ the [[Inverse_Frequency_Sound_format|Inverse Sound Frequency]] format page. Perhaps the flags would make a difference to the sounds? I have the sound setup @ [https://code.google.com/p/cataclone/source/browse/trunk/src/sound_manager.c sound_manager.c] in the sound_manager_init() method. I use AUDIO_S16 (signed 16-bit) @ 22050 Hz with 2 channels. I have not added support for the priority of the sounds yet, I plan on doing that after I get them playing properly.&lt;br /&gt;
::: I found some information on the [[ROTT]] sound format here: [http://src.gnu-darwin.org/ports/games/rottdc/work/rottdc-1.0-2/rott/_rt_soun.h _rt_soun.h]. This format should be similar to Catacomb as ROTT was developed by [[Apogee]] using the [[Doom]] engine. Here are the flags for the sounds that they define:&lt;br /&gt;
 #define SD_OVERWRITE     0x01&lt;br /&gt;
 #define SD_WRITE         0x02&lt;br /&gt;
 #define SD_LOOP          0x04&lt;br /&gt;
 #define SD_PITCHSHIFTOFF 0x08&lt;br /&gt;
 #define SD_PLAYONCE      0x10&lt;br /&gt;
::: There are also many other sound files for ROTT: [http://src.gnu-darwin.org/ports/games/rottdc/work/rottdc-1.0-2/rott/rt_sound.c], [http://src.gnu-darwin.org/ports/games/rottdc/work/rottdc-1.0-2/rott/rt_sound.h], [http://src.gnu-darwin.org/ports/games/rottdc/work/rottdc-1.0-2/rott/snd_reg.h], [http://src.gnu-darwin.org/ports/games/rottdc/work/rottdc-1.0-2/rott/snd_shar.h], [http://src.gnu-darwin.org/ports/games/rottdc/work/rottdc-1.0-2/rott/sndcards.h]&lt;br /&gt;
:::: I tried it last night and I was able to get it to compile (after a few changes, like using &#039;/&#039; instead of &#039;\&#039; in a couple of #includes) but all I got was a black window and a beep sound, then nothing.  How far advanced is the project?  Should I expect more than that?  I would expect small variations in the file formats between games, but I would be surprised if the core sound data has changed over time. -- [[User:Malvineous|Malvineous]] 02:38, 6 May 2012 (GMT)&lt;br /&gt;
::::: On Windows, you can run around the levels, collide with walls, collect items, etc... I still need to implement monsters, AI and power shots. However, that beep means that the sounds playing. (see line 71 in main.c: catacomb_sounds_play(&amp;quot;foundsound&amp;quot;);). I just committed the catacomb_data.h file. Update it accordingly, you should now see much more than a black screen.&lt;br /&gt;
:::::: Oh wow, that works really well now!  I see what you mean by the sounds.  You might have to output the PCM data to a .wav/.raw file and look at it in a sound editor to see what&#039;s going on.  It sounds like there might be wrapping or something going on.  Also some sounds (like being blocked by a door) play multiple times over the top of themselves.  I guess this is what you meant by priority not being implemented (although maybe you wouldn&#039;t need to handle priority if you can play multiple sounds at the same time, unlike the real PC Speaker.)  One suggestion - if you do decide to support Linux, abstract the calls that open files so that they search for filenames instead - that way you don&#039;t have to rename all the Catacomb files to be uppercase, since Linux has a case-sensitive filesystem and most filenames are usually all lowercase. -- [[User:Malvineous|Malvineous]] 03:42, 6 May 2012 (GMT)&lt;br /&gt;
::::::: I have exported the raw data to a file, then imported the raw data into Audacity using various settings. All of them sound like they do in the game, crackly and sometimes distorted. I really think its some sort of post FX used by the flags. As for files, I&#039;ll code some sort of SafeFileOpen, SafeFileClose functions like the id codebase that open files regardless of case when i get around to implementing the Linux version. - [[User:Eros|Eros]] 03:54, 6 May 2012 (GMT)&lt;/div&gt;</summary>
		<author><name>Eros</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=User_talk:Malvineous&amp;diff=4248</id>
		<title>User talk:Malvineous</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=User_talk:Malvineous&amp;diff=4248"/>
		<updated>2012-05-06T03:53:41Z</updated>

		<summary type="html">&lt;p&gt;Eros: /* Catacomb */ sweet&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Wolfenstein 3D -&amp;gt; Wolfenstein 3-D ==&lt;br /&gt;
I&#039;ve corrected the infamous 3D tyop in the names of several Wolf3D-related pages; can you please delete the following ones?&lt;br /&gt;
&lt;br /&gt;
[[:Category:Wolfenstein 3D]] -&amp;gt; Superseded by [[:Category:Wolfenstein 3-D]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[:Image:Wolfenstein_3D.png]] -&amp;gt; Superseded by [[:Image:Wolfenstein_3-D.png]]&lt;br /&gt;
&lt;br /&gt;
Thanks :) --De Zeurkous (zeurkous@zeurcomp.nichten.info), Thu Nov 22 08:18:42 UTC 2007&lt;br /&gt;
&lt;br /&gt;
:Haha, you&#039;ve certainly been busy.  Don&#039;t forget that this wiki isn&#039;t meant to be an encyclopaedia of the games, its main purpose is documenting the file formats and editing tools that can be used with the games, as opposed to how the games behave without any mods, or what they might be called if you forget to change the title screen :-) -- [[User:Malvineous|Malvineous]] 11:14, 22 November 2007 (GMT)&lt;br /&gt;
&lt;br /&gt;
::Nah, I haven&#039;t forgotten. As we&#039;re reinventing the wheel for a semi-virgin wiki, the naming and something static like the cheats seemed like a good place to start :) --De Zeurkous (zeurkous@nichten.info), Thu Nov 22 12:20:04 UTC 2007&lt;br /&gt;
&lt;br /&gt;
== Jill of the Jungle palette ==&lt;br /&gt;
&lt;br /&gt;
Hi, I&#039;m currently working on a level viewer for [[Jill of the Jungle]] (maybe an editor later on). Some of the information I found here has been very useful, but there&#039;s one thing I&#039;m a bit stuck on. On the [[SHA Format]] page it says:&lt;br /&gt;
:&#039;&#039;Each array item contains 4 unsigned bytes, representing CGA, EGA and VGA, respectivley, and then a null value. [...] Each byte maps to the index of a colour in the palette. If there are no colours required, the tile set uses the default colours.&#039;&#039;&lt;br /&gt;
However, it doesn&#039;t say anywhere where the palette can be found. Is it stored in the EXE file? I hope you can help me on this :)&lt;br /&gt;
&lt;br /&gt;
Regards, [[User:Spinal|Spinal]] 13:00, 2 March 2008 (GMT)&lt;br /&gt;
&lt;br /&gt;
:Unfortunately I didn&#039;t write the JotJ SHA page, and I haven&#039;t yet had the time to figure this out.  For Xargon I&#039;ve taken the quick and dirty route and used a screenshot from within DOSBox as the source of the palette, until I can figure out where the palette is located.  If you find this out, don&#039;t forget to update the page! :-) -- [[User:Malvineous|Malvineous]] 22:02, 2 March 2008 (GMT)&lt;br /&gt;
&lt;br /&gt;
::Hey Spinal, sorry, I wrote the [[SHA Format]] page, so that was probably my bad. I wasn&#039;t able to find the palette either. I assume it&#039;s in the .EXE, however I spent a fair bit of time manually mapping it using a Wombat tool (http://www.szevvy.com/node/3). I was also writing a level viewer (initally in XHTML which turned out to be too slow, so then I moved to Flash 9). I tried to email you my findings, but the email bounced. I&#039;m not sure if they were 100% accurat, which is why I never added them to the documentation.&lt;br /&gt;
&lt;br /&gt;
::Hey Malvineous, it seems the Jill - [[DMA Format]] page has been removed. Do you have a log of what happened to it? I&#039;m sure it existed at some point.&lt;br /&gt;
&lt;br /&gt;
::- [[User:dheim|Daniel]] 20:00, 5 March 2008&lt;br /&gt;
&lt;br /&gt;
:::I don&#039;t ever remember seeing a DMA page - certainly there&#039;s nothing in the wiki logs about it being deleted or renamed.  Maybe you started working on it but never got around to saving it?  Or is it one of the Xargon pages that shares the same format as Jill?  (by the way, you can type &amp;lt;nowiki&amp;gt;~~~~&amp;lt;/nowiki&amp;gt; to automatically put in the signature in these messages.) -- [[User:Malvineous|Malvineous]] 11:28, 5 March 2008 (GMT)&lt;br /&gt;
&lt;br /&gt;
::::Sorry, it must have been the stuff in the [[SHA Format]] page that I was thinking of. I may have added the link to the [[DMA Format]] page, and never expanded on it. - [[User:Dheim|Daniel]] 02:46, 6 March 2008 (GMT)&lt;br /&gt;
&lt;br /&gt;
:::::Hi guys. Sorry for the mistake, I mixed up the authors of the SHA and level formats. I&#039;ve written a level viewer in PHP the last week, by using static images instead of getting them from the actual files. This causes some problems for episode 2, which uses a different palette, but besides that it works great :) When everything is done I&#039;ll upload the maps to my server and the tile/object lists to this wiki.&lt;br /&gt;
:::::@Daniel: strange that it bounced, I confirmed my address so it should be working fine... You can mail it to spinal -at- zanderz -dot- net. Also, I saw on your Wombat page that you &amp;quot;have a vague idea of how to do&amp;quot; [[Hocus Pocus]]. Could you share your findings on this wiki? I&#039;d love to make maps, or even a level viewer/editor for that game :) -- [[User:Spinal|Spinal]] 00:32, 8 March 2008 (GMT)&lt;br /&gt;
:Okay, with help of [[User:Dheim|Daniel]] who send me the palette I found it! I&#039;ll put my findings on [[Jill of the Jungle palette]]. -- [[User:Spinal|Spinal]] 15:36, 13 March 2008 (GMT)&lt;br /&gt;
&lt;br /&gt;
== Halloween Harry/Alien Carnage ==&lt;br /&gt;
&lt;br /&gt;
Hi Malvineous. Thanks for your edits on the GMF article! I notice you mentioned there exist versions of the game which don&#039;t require exploding a BNK to get at the game data. What does the directory structure look like for the version you have? I&#039;m working on a map viewer (which will become a map editor at some point) and would like it to be able to work on whatever versions are out there. Thanks for any info. -[[User:Duckthing|Duckthing]] 04:41, 11 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
: Hi Duckthing - no worries, Halloween Harry has long been an interest of mine, but my map editor sadly needs a lot more work before I can begin reverse engineering more file formats so I&#039;m glad you&#039;ve made a start!  AFAIK technically Halloween Harry has no compression, but for whatever reason (probably listed in the Apogee FAQ) they decided to swap episodes 1 and 3, compress the BNK file and then re-release it under the name Alien Carnage.  You can download all available versions (including registered versions since the game was released as freeware in 2007) from [http://www.classicdosgames.com/game/Alien_Carnage.html RGB Classic Games].  BTW not sure if you noticed but I also posted a couple of things on the GMF article&#039;s talk/discussion page. -- [[User:Malvineous|Malvineous]] 06:08, 11 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
:: Thank you! Working with the uncompressed version will keep things less complicated. I did notice the GMF discussion you added, but haven&#039;t had a chance to really go through it yet. -- [[User:Duckthing|Duckthing]] 06:41, 11 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
::: No worries.  If you&#039;re running Linux or MacOSX you should be able to compile [[Camoto|libgamearchive]] which will let you copy files in and out of the BNK files.  This is a library so it&#039;s also possible to use it in your own program for accessing and editing the map files while they&#039;re still inside the BNK, for instance.  (BTW the &#039;minor&#039; tickbox should only be used when the edit does not affect the information on the page - e.g. fixing a typo or a broken URL.  If you are changing the actual content on a page it is never a minor edit!) -- [[User:Malvineous|Malvineous]] 07:51, 11 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Dangerous Dave ==&lt;br /&gt;
&lt;br /&gt;
Working on this, does anyone have any info on the formats? The EGA graphics are 84KB and external, but CGA and VGA graphics unrelated to them are in the 174KB executable, apparently uncompressed, I don&#039;t know how this is possible. I&#039;ve found the levels and partially reverse engineered the format (The first 1000 bytes, a 100x10 array of tiles.) but each level is followed by ~280 bytes of variable and unknown data I assume is sprites. I have a list of internal files in the executable, looks like most of it is non-game code. Any help would be appreciated. -[[User:Levellass|Endian? What are you on about?]] 06:03, 12 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
: Hmm, interesting.  All I can suggest for the levels is - as you&#039;re probably already familiar with - changing the values in a hex editor then loading the game to see what happens.  I would suspect that all the graphics would be in a similar format, so if there are any headers or structures used in the EGA graphics files perhaps they&#039;re duplicated for CGA/VGA?  Also John Romero seems pretty accessible, perhaps you could ask him directly?  Failing that, randomly writing data into the .exe until the images change could be used as a last resort! -- [[User:Malvineous|Malvineous]] 12:09, 12 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
: Ha, that was easier than I expected - uncompressed VGA data is easy to find with a good hex editor ;-)  [http://www.shikadi.net/pics/ddave-vga-hexdump.png This looks like it] -- [[User:Malvineous|Malvineous]] 12:17, 12 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
: Ok that was only the menu graphics.  At offset 0xC629 there&#039;s some sort of offset table which looks very similar to the contents of EGADAVE.DAV but there are extra bytes dotted all over the place - perhaps it&#039;s RLE encoded?  Actually just before that there&#039;s the number 0x6CAA.  If you go a bit less than 0x6CAA bytes after this you end up with another table, which to me suggests that 0x6CAA is the decompressed size of that first table. -- [[User:Malvineous|Malvineous]] 13:01, 12 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
:If I remember it correctly, the VGA sprites and tiles are RLE compressed and it&#039;s not too hard to decompress them. The positions of the enemies in the levels on the other hand are still a mystery to me. [[User:Calvero|Calvero]] 20:43, 12 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
: Looking at the levels, which directly follow the VGA palette, they seem to contain 256 bytes of header data, then the 100x10 tiles, then eight bytes of lead-out data.  Then the next level&#039;s 256 bytes of header, 100x10 tiles, then eight bytes of lead-out.  Although I say &amp;quot;level&amp;quot;, the first &amp;quot;level&amp;quot; seems to contain both level 1 and 2, and this seems to be the way it works in the game - in some levels you can see through to others.  I&#039;m not sure what the 256 bytes of header data are for, but some levels have FF FF 00 00 repeated which seems to indicate two uint16 fields which are blanked out for those levels. -- [[User:Malvineous|Malvineous]] 13:15, 13 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
::First up, levels; where does level 1 start? It&#039;s possible I&#039;m reading the start of a level as the previous level&#039;s end, I looked for the start of tile data, which I assumed, like Keen 1, would be the level start.&lt;br /&gt;
&lt;br /&gt;
::Next, palette; I&#039;m assuming, as you said, it is located just before the level data?&lt;br /&gt;
&lt;br /&gt;
::There is VGA and CGA graphics in the executable, plus headers, but the bulk of graphics for CGA and VGA I haven&#039;t been able to locate. If the data is RLE compressed I should think it would use either Keen 1-3 fullscreen or Jazz Jackrabbit tile RLE, both of which I know well. I&#039;ll look into both of these options, cheers! -[[User:Levellass|Endian? What are you on about?]] 12:03, 20 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
:::I&#039;ve found the VGA and CGA data for the menu graphics.  It looks like the CGA data is stored in a series of 1-bit-per-pixel (monochrome) images.  Or it could be EGA data with the planes split out (e.g. red plane for all images, then green plane for all images, etc.)  I think I found three planes which means it&#039;s probably EGA, as CGA would have a max of two planes.  I&#039;ve also found the font graphics, this looks like 4bpp/16 colour EGA data.  Haven&#039;t seen level graphics yet.  I&#039;ve successfully modded the levels with a hex editor (putting the jetpack everywhere) so now I&#039;ve finally looked at all the levels!  The creatures are definitely not stored in the 100x10 tile data.  Putting random bytes in there revealed that the values are indices into the image files, because if you put the value in for fire it will animate, and the following three or so values show up as still frames from the fire animation.&lt;br /&gt;
&lt;br /&gt;
:::The VGA palette starts at 0x26B0A (I updated the main DDave page with this) + 768 bytes leads straight onto the start of level 1 at 0x26E0A.  So at 0x26E0A there are 256 bytes of data, then 100x10 tiles, then 24 bytes of footer data.  Some of this data (perhaps footer data) might be the level start coordinates, because Dave doesn&#039;t always start the level at the same place (e.g. the warp level when you climb the tree on level 5 and jump off the edge of the screen.) -- [[User:Malvineous|Malvineous]] 12:24, 20 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
:::I think I&#039;ve found all the files so far, I&#039;ve updated [[Dangerous Dave]] with the offsets of the files, including what appears to be CGA and VGA tiles.  I&#039;m not sure what sort of format they&#039;re in though, it looks like they might be compressed (and so the offsets in that list might be off by ~4, as I may have cut off the decompressed-size field.)  I&#039;ve also updated the map format page, I think it&#039;s pretty much fully reverse engineered now. -- [[User:Malvineous|Malvineous]] 05:13, 21 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Noahs Ark 3D and IMFs ==&lt;br /&gt;
&lt;br /&gt;
Been poking around Noah&#039;s Ark 3D, an adaption of the Wolfenstein game and found a few interesting things which I&#039;m hoping to confirm.&lt;br /&gt;
&lt;br /&gt;
First, the game uses MID files, not IMF files for music, second, the MIDI files have an extra word at the start of the file giving the file length. Third, the code uses the first word of the midi file as the length of data to read from the file and put into memory to play. After poking around a bit in Wolfenstein and Keen I believe this is the same with IMF files, that is, ALL IMF files are type 0 as it were and the type 1s are read just like type 0s by the games (The first word is read as the amount of IMF data to copy into memory to play, this is then read as type 0.) I&#039;m not quite sure what this does for the two types since type 1 is would essentially be a type 0 with a header and footer that are part of the AUDIO.xxx format, much like PC\adlib sounds can have the huffman lengths at the start. Are there any games that use &#039;individual&#039; type 1 IMFs (Even if included as part of a group file. All I&#039;ve seen are games like cosmo, where non-AUDIO IMFs are type 0.)&lt;br /&gt;
&lt;br /&gt;
Should there be a Noah&#039;s Ark 3D page and should we add the midi note to the AUDIO format page? It seems that the format can hold any type of music file the game can read, not just IMFs.  -- Levellass&lt;br /&gt;
&lt;br /&gt;
: Yes it is known that the type-1 header might really be part of the AUDIO.xxx format but alas there were many type-1 files floating around the place (incorrectly extracted, you could argue) before this was realised, so the format variant is here to stay.  It does have some advantages though (like tagging files with the song title) but I&#039;m not sure whether anyone has figured out definitively whether the header (and footer, in the case of the Wolf3D files) belongs to the IMF or the AUDIO file.  I guess you&#039;d have to browse the game source code and see how the game uses the data to know for sure.&lt;br /&gt;
&lt;br /&gt;
: As far as the MIDI goes, I believe the AUDIO.xxx file is just a container file like any other, capable of supporting any data at all.  It&#039;s up to the game to decide how to use it.  If anything this makes me think it would fit better if the AUDIO.xxx article was merely documenting the structure, with links to actual audio formats like PC SFX, Adlib SFX, IMF and MIDI and notes about which games make use of which formats.&lt;br /&gt;
&lt;br /&gt;
: Oh and yes, by all means create a page for the new game. -- [[User:Malvineous|Malvineous]] 08:41, 3 February 2011 (GMT)&lt;br /&gt;
&lt;br /&gt;
== Sound Files category ==&lt;br /&gt;
&lt;br /&gt;
I don’t know why there’s a Sound Files category and also an Audio Files category... it seems redundant. I left those categories the way they are though.&lt;br /&gt;
&lt;br /&gt;
Also, the [[File format data types]] page needs some signed ints, but I didn’t know what naming convention you wanted to use. I described something as an [[INT16LE]] on [[BMC Format]]. [[User:Yellowantphil|Yellowantphil]] 20:12, 11 September 2011 (GMT)&lt;br /&gt;
&lt;br /&gt;
: Not sure about the Sound vs Audio - I use the term &#039;audio&#039; to mean both sound and music, but you&#039;re right, if there are separate sound and music categories we don&#039;t really need an audio one as well.  Feel free to update.  [[INT16LE]] is perfectly fine too!  I added a note to the data types page. -- [[User:Malvineous|Malvineous]] 22:30, 11 September 2011 (GMT)&lt;br /&gt;
&lt;br /&gt;
== GamePage template ==&lt;br /&gt;
&lt;br /&gt;
Should the GamePage template add the page to its own category? It seems a little odd that [[Wacky Wheels]] is not in the Wacky Wheels category. [[User:Yellowantphil|Yellowantphil]] 04:51, 16 September 2011 (GMT)&lt;br /&gt;
: I decided against this because there is a link to the game&#039;s page in the category intro at the top of the page.  It seemed unnecessary having another link in amongst all the other pages.  This was also because the game page was really only meant to be a summary, there wasn&#039;t supposed to be a huge amount of detail on it, only links to other pages with the detail (which then would appear in the category list.)  I would imagine that, eventually, [[Wacky Wheels]] would be tweaked to move a lot of the content onto subpages. -- [[User:Malvineous|Malvineous]] 12:58, 16 September 2011 (GMT)&lt;br /&gt;
&lt;br /&gt;
== Scope of the wiki ==&lt;br /&gt;
&lt;br /&gt;
I don’t know how extensive you want the information to be on ModdingWiki... I added a few lists of audio and graphics files a while ago, and there will probably be other information that I’ll find out that’s potentially helpful for level editing but not directly related to it. I can move some information to my website if it starts to become out of scope for your wiki. I also sometimes end up documenting everything imaginable... there’s some minutiae on my website and possibly on your wiki that I ought to go through and delete. [[User:Yellowantphil|Yellowantphil]] 05:28, 10 October 2011 (GMT)&lt;br /&gt;
&lt;br /&gt;
:Hmm, that&#039;s a difficult one - I&#039;m always in favour of documenting more rather than less.  Generally speaking if it&#039;s related to a game and it would help either a programmer writing a utility or a someone trying to change a game manually then it should be documented.  About the only thing that comes to mind that&#039;s over documenting is when some small calculation is expressed in a couple of different programming languages, but I&#039;ve left that in so people can just copy it rather than trying to figure it out from the text.  But the [[Wacky Wheels]] page is probably the gold standard for what all wiki pages should look like :-)  Do you have anything in particular you&#039;re unsure of whether it would fit here? -- [[User:Malvineous|Malvineous]] 10:07, 10 October 2011 (GMT)&lt;br /&gt;
&lt;br /&gt;
::I was mainly thinking of the list of VOC files on [[Wacky Wheels Music and Sound Effects]] and the list of &amp;lt;tt&amp;gt;*.sp&amp;lt;/tt&amp;gt; files on [[Wacky Wheels Graphics Formats]]. I have an expanded list of the &amp;lt;tt&amp;gt;*.sp&amp;lt;/tt&amp;gt; files on my computer but it isn’t finished yet. I guess there isn’t all that much more Wacky Wheels information to be added to this wiki though. There is still some modding information on my website that ought to be moved over here, so that would take up another page or two. I’ve been lazy about doing Wacky Wheels stuff lately, but I might find some time for it this weekend.&lt;br /&gt;
&lt;br /&gt;
::By the way, I guess that guy from Cascadia Games emailed you. It’s pretty interesting that WW might become an iPhone app. He told me that he was going to be using his own game engine, which sounds a lot easier than trying to get a hold of the WW source code and porting it. —[[User:Yellowantphil|Yellowantphil]] 16:46, 15 October 2011 (GMT)&lt;br /&gt;
&lt;br /&gt;
::: I was going to say the list of VOCs might be overkill, but then the list of .sp files might be useful.  To be honest, it&#039;s the sort of thing that you could probably omit if you were feeling lazy, but likewise I don&#039;t mind at all if you choose to include it, so since it&#039;s already there I&#039;m happy to keep it.&lt;br /&gt;
&lt;br /&gt;
::: Yes I did get an e-mail from Cascadia, I was going to pass along your details but it sounds like you&#039;re already aware of it!  Using their own engine might make it a bit smoother than the original, as the jerkiness of turning is my only criticism of the game. -- [[User:Malvineous|Malvineous]] 00:14, 16 October 2011 (GMT)&lt;br /&gt;
&lt;br /&gt;
== Wacky Wheels ==&lt;br /&gt;
&lt;br /&gt;
Basically all of the WW modding information from my website is here now. I moved one page when I realized it should probably be capitalized to match the rest of the pages on this site... you can delete the redirect at [[Wacky Wheels high score files]] if you want to.&lt;br /&gt;
&lt;br /&gt;
Now, I need to remove most of the modding information from my website and refer people here. Then we’ll have reached the glorious future where all WW modding information is in one place. I’m going to keep those two text files of notes on my website though—the information in them is disorganized and I think not 100% accurate, but they might have some information that isn’t here yet.&lt;br /&gt;
&lt;br /&gt;
By the way, how’s Camoto going? I’m planning to use it to make a new WW level, but I won’t have time for it for a few more months. —[[User:Yellowantphil|Yellowantphil]]&lt;br /&gt;
&lt;br /&gt;
: Sounds good!  Thanks for all the effort you&#039;ve put in by moving it across.  I think Wacky Wheels is now the most completely documented game on the wiki!  Also can&#039;t hurt leaving your own info up - sometimes it&#039;s nice to go back to the original source if something is unclear.  Camoto&#039;s going well, but unfortunately I haven&#039;t had much time to work on it over the last few weeks.  You probably won&#039;t be able to make much of a level until I add in the ability to select a tile from the tileset, but that&#039;s in progress and hopefully will be ready by the time you are!  Keep me posted when you do start your level(s?) -- [[User:Malvineous|Malvineous]] 12:22, 2 February 2012 (GMT)&lt;br /&gt;
&lt;br /&gt;
::Well, as I was reading some of the information on my website, I noticed that it isn’t written very well. I wrote those pages back when I had very little experience programming. Anyway, I’m planning to redesign my website soon, and this will save me from having to rewrite a few of those pages.&lt;br /&gt;
&lt;br /&gt;
::The tile editor in Camoto as it is now is still certainly useful—I can add new tile types to a level using a binary editor and then move them around in Camoto. I think that it shouldn’t be too hard to make a new WW level using the Gimp and Camoto plus some binary editing. I recall having some problems with the route editor for the computer players, but I didn’t look into it at the time—I’ll let you know when I’m working with Camoto again, and I’ll try to come up with some useful bug reports or fixes if I run into problems. —[[User:Yellowantphil|Yellowantphil]] 14:06, 2 February 2012 (GMT)&lt;br /&gt;
&lt;br /&gt;
== Catacomb ==&lt;br /&gt;
&lt;br /&gt;
Hey [[User:Malvineous|Malvineous]], do you know anyone who has properly read the [[Inverse_Frequency_Sound_format|Inverse Sound Frequency]] file format and got the sound playing? I&#039;m struggling with some fine details in my game. Sounds play near what they should sound like, but the sound quality is all crackly and some sounds play totally incorrect. I followed a basic [http://web.archive.org/web/20000818033701/http://www.dd.chalmers.se/~f98anga/projects/keen/sounds2raw.c code sample] by Anders Gavare. Does your tool support this? Interested in helping me figure this out? My current code is available at [https://code.google.com/p/cataclone/source/browse/trunk/src/catacomb/catacomb_sound.c catacomb_sound.c] - [[User:Eros|Eros]] 11:57, 5 May 2012 (GMT)&lt;br /&gt;
: Should this be moved to my talk page? - [[User:Eros|Eros]] 11:59, 5 May 2012 (GMT)&lt;br /&gt;
:: Probably best to keep it on my talk page if you want me to respond in a timely manner :-)  I based my old utility off Anders&#039; one too, but it&#039;s been a long time since I looked at the code.  My latest utility doesn&#039;t support sound effects yet.  I know Levellass has written a few utilities to play and edit those sound files, so I think your best bet would probably be to post over at the [http://www.keenmodding.org Keen:Modding] forum.  Do note that PC Speaker effects do sound crackly at the best of times, though!  Also make sure you&#039;ve got the right audio format (8-bit vs 16-bit, signed vs unsigned) - I remember some inconsistencies there causing some very distorted results for me.  I love the name &#039;Cataclone&#039; - does your code compile under Linux? -- [[User:Malvineous|Malvineous]] 13:21, 5 May 2012 (GMT)&lt;br /&gt;
::: I currently compile the code using Code::Blocks with GCC 4.6 -std=gnu99. It *should* compile under Linux. But I haven&#039;t tested that out yet. [[Catacomb]] sounds also have flags attached to each one, It&#039;s not exactly the same specification as what it says @ the [[Inverse_Frequency_Sound_format|Inverse Sound Frequency]] format page. Perhaps the flags would make a difference to the sounds? I have the sound setup @ [https://code.google.com/p/cataclone/source/browse/trunk/src/sound_manager.c sound_manager.c] in the sound_manager_init() method. I use AUDIO_S16 (signed 16-bit) @ 22050 Hz with 2 channels. I have not added support for the priority of the sounds yet, I plan on doing that after I get them playing properly.&lt;br /&gt;
::: I found some information on the [[ROTT]] sound format here: [http://src.gnu-darwin.org/ports/games/rottdc/work/rottdc-1.0-2/rott/_rt_soun.h _rt_soun.h]. This format should be similar to Catacomb as ROTT was developed by [[Apogee]] using the [[Doom]] engine. Here are the flags for the sounds that they define:&lt;br /&gt;
 #define SD_OVERWRITE     0x01&lt;br /&gt;
 #define SD_WRITE         0x02&lt;br /&gt;
 #define SD_LOOP          0x04&lt;br /&gt;
 #define SD_PITCHSHIFTOFF 0x08&lt;br /&gt;
 #define SD_PLAYONCE      0x10&lt;br /&gt;
::: There are also many other sound files for ROTT: [http://src.gnu-darwin.org/ports/games/rottdc/work/rottdc-1.0-2/rott/rt_sound.c], [http://src.gnu-darwin.org/ports/games/rottdc/work/rottdc-1.0-2/rott/rt_sound.h], [http://src.gnu-darwin.org/ports/games/rottdc/work/rottdc-1.0-2/rott/snd_reg.h], [http://src.gnu-darwin.org/ports/games/rottdc/work/rottdc-1.0-2/rott/snd_shar.h], [http://src.gnu-darwin.org/ports/games/rottdc/work/rottdc-1.0-2/rott/sndcards.h]&lt;br /&gt;
:::: I tried it last night and I was able to get it to compile (after a few changes, like using &#039;/&#039; instead of &#039;\&#039; in a couple of #includes) but all I got was a black window and a beep sound, then nothing.  How far advanced is the project?  Should I expect more than that?  I would expect small variations in the file formats between games, but I would be surprised if the core sound data has changed over time. -- [[User:Malvineous|Malvineous]] 02:38, 6 May 2012 (GMT)&lt;br /&gt;
::::: On Windows, you can run around the levels, collide with walls, collect items, etc... I still need to implement monsters, AI and power shots. However, that beep means that the sounds playing. (see line 71 in main.c: catacomb_sounds_play(&amp;quot;foundsound&amp;quot;);). I just committed the catacomb_data.h file. Update it accordingly, you should now see much more than a black screen.&lt;br /&gt;
:::::: Oh wow, that works really well now!  I see what you mean by the sounds.  You might have to output the PCM data to a .wav/.raw file and look at it in a sound editor to see what&#039;s going on.  It sounds like there might be wrapping or something going on.  Also some sounds (like being blocked by a door) play multiple times over the top of themselves.  I guess this is what you meant by priority not being implemented (although maybe you wouldn&#039;t need to handle priority if you can play multiple sounds at the same time, unlike the real PC Speaker.)  One suggestion - if you do decide to support Linux, abstract the calls that open files so that they search for filenames instead - that way you don&#039;t have to rename all the Catacomb files to be uppercase, since Linux has a case-sensitive filesystem and most filenames are usually all lowercase. -- [[User:Malvineous|Malvineous]] 03:42, 6 May 2012 (GMT)&lt;br /&gt;
::::::: I have exported the raw data to a file, then imported the raw data into Audacity using various settings. All of them sound like they do in the game, crackly and sometimes distorted. I really think its some sort of post FX used by the flags. As for files, I&#039;ll code some sort of SafeFileOpen, SafeFileClose functions like the id codebase that open files regardless of case when i get around to implementing the Linux version. - 03:53, 6 May 2012 (GMT)&lt;/div&gt;</summary>
		<author><name>Eros</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=User_talk:Malvineous&amp;diff=4245</id>
		<title>User talk:Malvineous</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=User_talk:Malvineous&amp;diff=4245"/>
		<updated>2012-05-06T02:45:27Z</updated>

		<summary type="html">&lt;p&gt;Eros: /* Catacomb */ Added missing data.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Wolfenstein 3D -&amp;gt; Wolfenstein 3-D ==&lt;br /&gt;
I&#039;ve corrected the infamous 3D tyop in the names of several Wolf3D-related pages; can you please delete the following ones?&lt;br /&gt;
&lt;br /&gt;
[[:Category:Wolfenstein 3D]] -&amp;gt; Superseded by [[:Category:Wolfenstein 3-D]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[:Image:Wolfenstein_3D.png]] -&amp;gt; Superseded by [[:Image:Wolfenstein_3-D.png]]&lt;br /&gt;
&lt;br /&gt;
Thanks :) --De Zeurkous (zeurkous@zeurcomp.nichten.info), Thu Nov 22 08:18:42 UTC 2007&lt;br /&gt;
&lt;br /&gt;
:Haha, you&#039;ve certainly been busy.  Don&#039;t forget that this wiki isn&#039;t meant to be an encyclopaedia of the games, its main purpose is documenting the file formats and editing tools that can be used with the games, as opposed to how the games behave without any mods, or what they might be called if you forget to change the title screen :-) -- [[User:Malvineous|Malvineous]] 11:14, 22 November 2007 (GMT)&lt;br /&gt;
&lt;br /&gt;
::Nah, I haven&#039;t forgotten. As we&#039;re reinventing the wheel for a semi-virgin wiki, the naming and something static like the cheats seemed like a good place to start :) --De Zeurkous (zeurkous@nichten.info), Thu Nov 22 12:20:04 UTC 2007&lt;br /&gt;
&lt;br /&gt;
== Jill of the Jungle palette ==&lt;br /&gt;
&lt;br /&gt;
Hi, I&#039;m currently working on a level viewer for [[Jill of the Jungle]] (maybe an editor later on). Some of the information I found here has been very useful, but there&#039;s one thing I&#039;m a bit stuck on. On the [[SHA Format]] page it says:&lt;br /&gt;
:&#039;&#039;Each array item contains 4 unsigned bytes, representing CGA, EGA and VGA, respectivley, and then a null value. [...] Each byte maps to the index of a colour in the palette. If there are no colours required, the tile set uses the default colours.&#039;&#039;&lt;br /&gt;
However, it doesn&#039;t say anywhere where the palette can be found. Is it stored in the EXE file? I hope you can help me on this :)&lt;br /&gt;
&lt;br /&gt;
Regards, [[User:Spinal|Spinal]] 13:00, 2 March 2008 (GMT)&lt;br /&gt;
&lt;br /&gt;
:Unfortunately I didn&#039;t write the JotJ SHA page, and I haven&#039;t yet had the time to figure this out.  For Xargon I&#039;ve taken the quick and dirty route and used a screenshot from within DOSBox as the source of the palette, until I can figure out where the palette is located.  If you find this out, don&#039;t forget to update the page! :-) -- [[User:Malvineous|Malvineous]] 22:02, 2 March 2008 (GMT)&lt;br /&gt;
&lt;br /&gt;
::Hey Spinal, sorry, I wrote the [[SHA Format]] page, so that was probably my bad. I wasn&#039;t able to find the palette either. I assume it&#039;s in the .EXE, however I spent a fair bit of time manually mapping it using a Wombat tool (http://www.szevvy.com/node/3). I was also writing a level viewer (initally in XHTML which turned out to be too slow, so then I moved to Flash 9). I tried to email you my findings, but the email bounced. I&#039;m not sure if they were 100% accurat, which is why I never added them to the documentation.&lt;br /&gt;
&lt;br /&gt;
::Hey Malvineous, it seems the Jill - [[DMA Format]] page has been removed. Do you have a log of what happened to it? I&#039;m sure it existed at some point.&lt;br /&gt;
&lt;br /&gt;
::- [[User:dheim|Daniel]] 20:00, 5 March 2008&lt;br /&gt;
&lt;br /&gt;
:::I don&#039;t ever remember seeing a DMA page - certainly there&#039;s nothing in the wiki logs about it being deleted or renamed.  Maybe you started working on it but never got around to saving it?  Or is it one of the Xargon pages that shares the same format as Jill?  (by the way, you can type &amp;lt;nowiki&amp;gt;~~~~&amp;lt;/nowiki&amp;gt; to automatically put in the signature in these messages.) -- [[User:Malvineous|Malvineous]] 11:28, 5 March 2008 (GMT)&lt;br /&gt;
&lt;br /&gt;
::::Sorry, it must have been the stuff in the [[SHA Format]] page that I was thinking of. I may have added the link to the [[DMA Format]] page, and never expanded on it. - [[User:Dheim|Daniel]] 02:46, 6 March 2008 (GMT)&lt;br /&gt;
&lt;br /&gt;
:::::Hi guys. Sorry for the mistake, I mixed up the authors of the SHA and level formats. I&#039;ve written a level viewer in PHP the last week, by using static images instead of getting them from the actual files. This causes some problems for episode 2, which uses a different palette, but besides that it works great :) When everything is done I&#039;ll upload the maps to my server and the tile/object lists to this wiki.&lt;br /&gt;
:::::@Daniel: strange that it bounced, I confirmed my address so it should be working fine... You can mail it to spinal -at- zanderz -dot- net. Also, I saw on your Wombat page that you &amp;quot;have a vague idea of how to do&amp;quot; [[Hocus Pocus]]. Could you share your findings on this wiki? I&#039;d love to make maps, or even a level viewer/editor for that game :) -- [[User:Spinal|Spinal]] 00:32, 8 March 2008 (GMT)&lt;br /&gt;
:Okay, with help of [[User:Dheim|Daniel]] who send me the palette I found it! I&#039;ll put my findings on [[Jill of the Jungle palette]]. -- [[User:Spinal|Spinal]] 15:36, 13 March 2008 (GMT)&lt;br /&gt;
&lt;br /&gt;
== Halloween Harry/Alien Carnage ==&lt;br /&gt;
&lt;br /&gt;
Hi Malvineous. Thanks for your edits on the GMF article! I notice you mentioned there exist versions of the game which don&#039;t require exploding a BNK to get at the game data. What does the directory structure look like for the version you have? I&#039;m working on a map viewer (which will become a map editor at some point) and would like it to be able to work on whatever versions are out there. Thanks for any info. -[[User:Duckthing|Duckthing]] 04:41, 11 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
: Hi Duckthing - no worries, Halloween Harry has long been an interest of mine, but my map editor sadly needs a lot more work before I can begin reverse engineering more file formats so I&#039;m glad you&#039;ve made a start!  AFAIK technically Halloween Harry has no compression, but for whatever reason (probably listed in the Apogee FAQ) they decided to swap episodes 1 and 3, compress the BNK file and then re-release it under the name Alien Carnage.  You can download all available versions (including registered versions since the game was released as freeware in 2007) from [http://www.classicdosgames.com/game/Alien_Carnage.html RGB Classic Games].  BTW not sure if you noticed but I also posted a couple of things on the GMF article&#039;s talk/discussion page. -- [[User:Malvineous|Malvineous]] 06:08, 11 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
:: Thank you! Working with the uncompressed version will keep things less complicated. I did notice the GMF discussion you added, but haven&#039;t had a chance to really go through it yet. -- [[User:Duckthing|Duckthing]] 06:41, 11 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
::: No worries.  If you&#039;re running Linux or MacOSX you should be able to compile [[Camoto|libgamearchive]] which will let you copy files in and out of the BNK files.  This is a library so it&#039;s also possible to use it in your own program for accessing and editing the map files while they&#039;re still inside the BNK, for instance.  (BTW the &#039;minor&#039; tickbox should only be used when the edit does not affect the information on the page - e.g. fixing a typo or a broken URL.  If you are changing the actual content on a page it is never a minor edit!) -- [[User:Malvineous|Malvineous]] 07:51, 11 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Dangerous Dave ==&lt;br /&gt;
&lt;br /&gt;
Working on this, does anyone have any info on the formats? The EGA graphics are 84KB and external, but CGA and VGA graphics unrelated to them are in the 174KB executable, apparently uncompressed, I don&#039;t know how this is possible. I&#039;ve found the levels and partially reverse engineered the format (The first 1000 bytes, a 100x10 array of tiles.) but each level is followed by ~280 bytes of variable and unknown data I assume is sprites. I have a list of internal files in the executable, looks like most of it is non-game code. Any help would be appreciated. -[[User:Levellass|Endian? What are you on about?]] 06:03, 12 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
: Hmm, interesting.  All I can suggest for the levels is - as you&#039;re probably already familiar with - changing the values in a hex editor then loading the game to see what happens.  I would suspect that all the graphics would be in a similar format, so if there are any headers or structures used in the EGA graphics files perhaps they&#039;re duplicated for CGA/VGA?  Also John Romero seems pretty accessible, perhaps you could ask him directly?  Failing that, randomly writing data into the .exe until the images change could be used as a last resort! -- [[User:Malvineous|Malvineous]] 12:09, 12 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
: Ha, that was easier than I expected - uncompressed VGA data is easy to find with a good hex editor ;-)  [http://www.shikadi.net/pics/ddave-vga-hexdump.png This looks like it] -- [[User:Malvineous|Malvineous]] 12:17, 12 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
: Ok that was only the menu graphics.  At offset 0xC629 there&#039;s some sort of offset table which looks very similar to the contents of EGADAVE.DAV but there are extra bytes dotted all over the place - perhaps it&#039;s RLE encoded?  Actually just before that there&#039;s the number 0x6CAA.  If you go a bit less than 0x6CAA bytes after this you end up with another table, which to me suggests that 0x6CAA is the decompressed size of that first table. -- [[User:Malvineous|Malvineous]] 13:01, 12 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
:If I remember it correctly, the VGA sprites and tiles are RLE compressed and it&#039;s not too hard to decompress them. The positions of the enemies in the levels on the other hand are still a mystery to me. [[User:Calvero|Calvero]] 20:43, 12 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
: Looking at the levels, which directly follow the VGA palette, they seem to contain 256 bytes of header data, then the 100x10 tiles, then eight bytes of lead-out data.  Then the next level&#039;s 256 bytes of header, 100x10 tiles, then eight bytes of lead-out.  Although I say &amp;quot;level&amp;quot;, the first &amp;quot;level&amp;quot; seems to contain both level 1 and 2, and this seems to be the way it works in the game - in some levels you can see through to others.  I&#039;m not sure what the 256 bytes of header data are for, but some levels have FF FF 00 00 repeated which seems to indicate two uint16 fields which are blanked out for those levels. -- [[User:Malvineous|Malvineous]] 13:15, 13 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
::First up, levels; where does level 1 start? It&#039;s possible I&#039;m reading the start of a level as the previous level&#039;s end, I looked for the start of tile data, which I assumed, like Keen 1, would be the level start.&lt;br /&gt;
&lt;br /&gt;
::Next, palette; I&#039;m assuming, as you said, it is located just before the level data?&lt;br /&gt;
&lt;br /&gt;
::There is VGA and CGA graphics in the executable, plus headers, but the bulk of graphics for CGA and VGA I haven&#039;t been able to locate. If the data is RLE compressed I should think it would use either Keen 1-3 fullscreen or Jazz Jackrabbit tile RLE, both of which I know well. I&#039;ll look into both of these options, cheers! -[[User:Levellass|Endian? What are you on about?]] 12:03, 20 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
:::I&#039;ve found the VGA and CGA data for the menu graphics.  It looks like the CGA data is stored in a series of 1-bit-per-pixel (monochrome) images.  Or it could be EGA data with the planes split out (e.g. red plane for all images, then green plane for all images, etc.)  I think I found three planes which means it&#039;s probably EGA, as CGA would have a max of two planes.  I&#039;ve also found the font graphics, this looks like 4bpp/16 colour EGA data.  Haven&#039;t seen level graphics yet.  I&#039;ve successfully modded the levels with a hex editor (putting the jetpack everywhere) so now I&#039;ve finally looked at all the levels!  The creatures are definitely not stored in the 100x10 tile data.  Putting random bytes in there revealed that the values are indices into the image files, because if you put the value in for fire it will animate, and the following three or so values show up as still frames from the fire animation.&lt;br /&gt;
&lt;br /&gt;
:::The VGA palette starts at 0x26B0A (I updated the main DDave page with this) + 768 bytes leads straight onto the start of level 1 at 0x26E0A.  So at 0x26E0A there are 256 bytes of data, then 100x10 tiles, then 24 bytes of footer data.  Some of this data (perhaps footer data) might be the level start coordinates, because Dave doesn&#039;t always start the level at the same place (e.g. the warp level when you climb the tree on level 5 and jump off the edge of the screen.) -- [[User:Malvineous|Malvineous]] 12:24, 20 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
:::I think I&#039;ve found all the files so far, I&#039;ve updated [[Dangerous Dave]] with the offsets of the files, including what appears to be CGA and VGA tiles.  I&#039;m not sure what sort of format they&#039;re in though, it looks like they might be compressed (and so the offsets in that list might be off by ~4, as I may have cut off the decompressed-size field.)  I&#039;ve also updated the map format page, I think it&#039;s pretty much fully reverse engineered now. -- [[User:Malvineous|Malvineous]] 05:13, 21 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Noahs Ark 3D and IMFs ==&lt;br /&gt;
&lt;br /&gt;
Been poking around Noah&#039;s Ark 3D, an adaption of the Wolfenstein game and found a few interesting things which I&#039;m hoping to confirm.&lt;br /&gt;
&lt;br /&gt;
First, the game uses MID files, not IMF files for music, second, the MIDI files have an extra word at the start of the file giving the file length. Third, the code uses the first word of the midi file as the length of data to read from the file and put into memory to play. After poking around a bit in Wolfenstein and Keen I believe this is the same with IMF files, that is, ALL IMF files are type 0 as it were and the type 1s are read just like type 0s by the games (The first word is read as the amount of IMF data to copy into memory to play, this is then read as type 0.) I&#039;m not quite sure what this does for the two types since type 1 is would essentially be a type 0 with a header and footer that are part of the AUDIO.xxx format, much like PC\adlib sounds can have the huffman lengths at the start. Are there any games that use &#039;individual&#039; type 1 IMFs (Even if included as part of a group file. All I&#039;ve seen are games like cosmo, where non-AUDIO IMFs are type 0.)&lt;br /&gt;
&lt;br /&gt;
Should there be a Noah&#039;s Ark 3D page and should we add the midi note to the AUDIO format page? It seems that the format can hold any type of music file the game can read, not just IMFs.  -- Levellass&lt;br /&gt;
&lt;br /&gt;
: Yes it is known that the type-1 header might really be part of the AUDIO.xxx format but alas there were many type-1 files floating around the place (incorrectly extracted, you could argue) before this was realised, so the format variant is here to stay.  It does have some advantages though (like tagging files with the song title) but I&#039;m not sure whether anyone has figured out definitively whether the header (and footer, in the case of the Wolf3D files) belongs to the IMF or the AUDIO file.  I guess you&#039;d have to browse the game source code and see how the game uses the data to know for sure.&lt;br /&gt;
&lt;br /&gt;
: As far as the MIDI goes, I believe the AUDIO.xxx file is just a container file like any other, capable of supporting any data at all.  It&#039;s up to the game to decide how to use it.  If anything this makes me think it would fit better if the AUDIO.xxx article was merely documenting the structure, with links to actual audio formats like PC SFX, Adlib SFX, IMF and MIDI and notes about which games make use of which formats.&lt;br /&gt;
&lt;br /&gt;
: Oh and yes, by all means create a page for the new game. -- [[User:Malvineous|Malvineous]] 08:41, 3 February 2011 (GMT)&lt;br /&gt;
&lt;br /&gt;
== Sound Files category ==&lt;br /&gt;
&lt;br /&gt;
I don’t know why there’s a Sound Files category and also an Audio Files category... it seems redundant. I left those categories the way they are though.&lt;br /&gt;
&lt;br /&gt;
Also, the [[File format data types]] page needs some signed ints, but I didn’t know what naming convention you wanted to use. I described something as an [[INT16LE]] on [[BMC Format]]. [[User:Yellowantphil|Yellowantphil]] 20:12, 11 September 2011 (GMT)&lt;br /&gt;
&lt;br /&gt;
: Not sure about the Sound vs Audio - I use the term &#039;audio&#039; to mean both sound and music, but you&#039;re right, if there are separate sound and music categories we don&#039;t really need an audio one as well.  Feel free to update.  [[INT16LE]] is perfectly fine too!  I added a note to the data types page. -- [[User:Malvineous|Malvineous]] 22:30, 11 September 2011 (GMT)&lt;br /&gt;
&lt;br /&gt;
== GamePage template ==&lt;br /&gt;
&lt;br /&gt;
Should the GamePage template add the page to its own category? It seems a little odd that [[Wacky Wheels]] is not in the Wacky Wheels category. [[User:Yellowantphil|Yellowantphil]] 04:51, 16 September 2011 (GMT)&lt;br /&gt;
: I decided against this because there is a link to the game&#039;s page in the category intro at the top of the page.  It seemed unnecessary having another link in amongst all the other pages.  This was also because the game page was really only meant to be a summary, there wasn&#039;t supposed to be a huge amount of detail on it, only links to other pages with the detail (which then would appear in the category list.)  I would imagine that, eventually, [[Wacky Wheels]] would be tweaked to move a lot of the content onto subpages. -- [[User:Malvineous|Malvineous]] 12:58, 16 September 2011 (GMT)&lt;br /&gt;
&lt;br /&gt;
== Scope of the wiki ==&lt;br /&gt;
&lt;br /&gt;
I don’t know how extensive you want the information to be on ModdingWiki... I added a few lists of audio and graphics files a while ago, and there will probably be other information that I’ll find out that’s potentially helpful for level editing but not directly related to it. I can move some information to my website if it starts to become out of scope for your wiki. I also sometimes end up documenting everything imaginable... there’s some minutiae on my website and possibly on your wiki that I ought to go through and delete. [[User:Yellowantphil|Yellowantphil]] 05:28, 10 October 2011 (GMT)&lt;br /&gt;
&lt;br /&gt;
:Hmm, that&#039;s a difficult one - I&#039;m always in favour of documenting more rather than less.  Generally speaking if it&#039;s related to a game and it would help either a programmer writing a utility or a someone trying to change a game manually then it should be documented.  About the only thing that comes to mind that&#039;s over documenting is when some small calculation is expressed in a couple of different programming languages, but I&#039;ve left that in so people can just copy it rather than trying to figure it out from the text.  But the [[Wacky Wheels]] page is probably the gold standard for what all wiki pages should look like :-)  Do you have anything in particular you&#039;re unsure of whether it would fit here? -- [[User:Malvineous|Malvineous]] 10:07, 10 October 2011 (GMT)&lt;br /&gt;
&lt;br /&gt;
::I was mainly thinking of the list of VOC files on [[Wacky Wheels Music and Sound Effects]] and the list of &amp;lt;tt&amp;gt;*.sp&amp;lt;/tt&amp;gt; files on [[Wacky Wheels Graphics Formats]]. I have an expanded list of the &amp;lt;tt&amp;gt;*.sp&amp;lt;/tt&amp;gt; files on my computer but it isn’t finished yet. I guess there isn’t all that much more Wacky Wheels information to be added to this wiki though. There is still some modding information on my website that ought to be moved over here, so that would take up another page or two. I’ve been lazy about doing Wacky Wheels stuff lately, but I might find some time for it this weekend.&lt;br /&gt;
&lt;br /&gt;
::By the way, I guess that guy from Cascadia Games emailed you. It’s pretty interesting that WW might become an iPhone app. He told me that he was going to be using his own game engine, which sounds a lot easier than trying to get a hold of the WW source code and porting it. —[[User:Yellowantphil|Yellowantphil]] 16:46, 15 October 2011 (GMT)&lt;br /&gt;
&lt;br /&gt;
::: I was going to say the list of VOCs might be overkill, but then the list of .sp files might be useful.  To be honest, it&#039;s the sort of thing that you could probably omit if you were feeling lazy, but likewise I don&#039;t mind at all if you choose to include it, so since it&#039;s already there I&#039;m happy to keep it.&lt;br /&gt;
&lt;br /&gt;
::: Yes I did get an e-mail from Cascadia, I was going to pass along your details but it sounds like you&#039;re already aware of it!  Using their own engine might make it a bit smoother than the original, as the jerkiness of turning is my only criticism of the game. -- [[User:Malvineous|Malvineous]] 00:14, 16 October 2011 (GMT)&lt;br /&gt;
&lt;br /&gt;
== Wacky Wheels ==&lt;br /&gt;
&lt;br /&gt;
Basically all of the WW modding information from my website is here now. I moved one page when I realized it should probably be capitalized to match the rest of the pages on this site... you can delete the redirect at [[Wacky Wheels high score files]] if you want to.&lt;br /&gt;
&lt;br /&gt;
Now, I need to remove most of the modding information from my website and refer people here. Then we’ll have reached the glorious future where all WW modding information is in one place. I’m going to keep those two text files of notes on my website though—the information in them is disorganized and I think not 100% accurate, but they might have some information that isn’t here yet.&lt;br /&gt;
&lt;br /&gt;
By the way, how’s Camoto going? I’m planning to use it to make a new WW level, but I won’t have time for it for a few more months. —[[User:Yellowantphil|Yellowantphil]]&lt;br /&gt;
&lt;br /&gt;
: Sounds good!  Thanks for all the effort you&#039;ve put in by moving it across.  I think Wacky Wheels is now the most completely documented game on the wiki!  Also can&#039;t hurt leaving your own info up - sometimes it&#039;s nice to go back to the original source if something is unclear.  Camoto&#039;s going well, but unfortunately I haven&#039;t had much time to work on it over the last few weeks.  You probably won&#039;t be able to make much of a level until I add in the ability to select a tile from the tileset, but that&#039;s in progress and hopefully will be ready by the time you are!  Keep me posted when you do start your level(s?) -- [[User:Malvineous|Malvineous]] 12:22, 2 February 2012 (GMT)&lt;br /&gt;
&lt;br /&gt;
::Well, as I was reading some of the information on my website, I noticed that it isn’t written very well. I wrote those pages back when I had very little experience programming. Anyway, I’m planning to redesign my website soon, and this will save me from having to rewrite a few of those pages.&lt;br /&gt;
&lt;br /&gt;
::The tile editor in Camoto as it is now is still certainly useful—I can add new tile types to a level using a binary editor and then move them around in Camoto. I think that it shouldn’t be too hard to make a new WW level using the Gimp and Camoto plus some binary editing. I recall having some problems with the route editor for the computer players, but I didn’t look into it at the time—I’ll let you know when I’m working with Camoto again, and I’ll try to come up with some useful bug reports or fixes if I run into problems. —[[User:Yellowantphil|Yellowantphil]] 14:06, 2 February 2012 (GMT)&lt;br /&gt;
&lt;br /&gt;
== Catacomb ==&lt;br /&gt;
&lt;br /&gt;
Hey [[User:Malvineous|Malvineous]], do you know anyone who has properly read the [[Inverse_Frequency_Sound_format|Inverse Sound Frequency]] file format and got the sound playing? I&#039;m struggling with some fine details in my game. Sounds play near what they should sound like, but the sound quality is all crackly and some sounds play totally incorrect. I followed a basic [http://web.archive.org/web/20000818033701/http://www.dd.chalmers.se/~f98anga/projects/keen/sounds2raw.c code sample] by Anders Gavare. Does your tool support this? Interested in helping me figure this out? My current code is available at [https://code.google.com/p/cataclone/source/browse/trunk/src/catacomb/catacomb_sound.c catacomb_sound.c] - [[User:Eros|Eros]] 11:57, 5 May 2012 (GMT)&lt;br /&gt;
: Should this be moved to my talk page? - [[User:Eros|Eros]] 11:59, 5 May 2012 (GMT)&lt;br /&gt;
:: Probably best to keep it on my talk page if you want me to respond in a timely manner :-)  I based my old utility off Anders&#039; one too, but it&#039;s been a long time since I looked at the code.  My latest utility doesn&#039;t support sound effects yet.  I know Levellass has written a few utilities to play and edit those sound files, so I think your best bet would probably be to post over at the [http://www.keenmodding.org Keen:Modding] forum.  Do note that PC Speaker effects do sound crackly at the best of times, though!  Also make sure you&#039;ve got the right audio format (8-bit vs 16-bit, signed vs unsigned) - I remember some inconsistencies there causing some very distorted results for me.  I love the name &#039;Cataclone&#039; - does your code compile under Linux? -- [[User:Malvineous|Malvineous]] 13:21, 5 May 2012 (GMT)&lt;br /&gt;
::: I currently compile the code using Code::Blocks with GCC 4.6 -std=gnu99. It *should* compile under Linux. But I haven&#039;t tested that out yet. [[Catacomb]] sounds also have flags attached to each one, It&#039;s not exactly the same specification as what it says @ the [[Inverse_Frequency_Sound_format|Inverse Sound Frequency]] format page. Perhaps the flags would make a difference to the sounds? I have the sound setup @ [https://code.google.com/p/cataclone/source/browse/trunk/src/sound_manager.c sound_manager.c] in the sound_manager_init() method. I use AUDIO_S16 (signed 16-bit) @ 22050 Hz with 2 channels. I have not added support for the priority of the sounds yet, I plan on doing that after I get them playing properly.&lt;br /&gt;
::: I found some information on the [[ROTT]] sound format here: [http://src.gnu-darwin.org/ports/games/rottdc/work/rottdc-1.0-2/rott/_rt_soun.h _rt_soun.h]. This format should be similar to Catacomb as ROTT was developed by [[Apogee]] using the [[Doom]] engine. Here are the flags for the sounds that they define:&lt;br /&gt;
 #define SD_OVERWRITE     0x01&lt;br /&gt;
 #define SD_WRITE         0x02&lt;br /&gt;
 #define SD_LOOP          0x04&lt;br /&gt;
 #define SD_PITCHSHIFTOFF 0x08&lt;br /&gt;
 #define SD_PLAYONCE      0x10&lt;br /&gt;
::: There are also many other sound files for ROTT: [http://src.gnu-darwin.org/ports/games/rottdc/work/rottdc-1.0-2/rott/rt_sound.c], [http://src.gnu-darwin.org/ports/games/rottdc/work/rottdc-1.0-2/rott/rt_sound.h], [http://src.gnu-darwin.org/ports/games/rottdc/work/rottdc-1.0-2/rott/snd_reg.h], [http://src.gnu-darwin.org/ports/games/rottdc/work/rottdc-1.0-2/rott/snd_shar.h], [http://src.gnu-darwin.org/ports/games/rottdc/work/rottdc-1.0-2/rott/sndcards.h]&lt;br /&gt;
:::: I tried it last night and I was able to get it to compile (after a few changes, like using &#039;/&#039; instead of &#039;\&#039; in a couple of #includes) but all I got was a black window and a beep sound, then nothing.  How far advanced is the project?  Should I expect more than that?  I would expect small variations in the file formats between games, but I would be surprised if the core sound data has changed over time. -- [[User:Malvineous|Malvineous]] 02:38, 6 May 2012 (GMT)&lt;br /&gt;
::::: On Windows, you can run around the levels, collide with walls, collect items, etc... I still need to implement monsters, AI and power shots. However, that beep means that the sounds playing. (see line 71 in main.c: catacomb_sounds_play(&amp;quot;foundsound&amp;quot;);). I just committed the catacomb_data.h file. Update it accordingly, you should now see much more than a black screen.&lt;/div&gt;</summary>
		<author><name>Eros</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=User_talk:Malvineous&amp;diff=4243</id>
		<title>User talk:Malvineous</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=User_talk:Malvineous&amp;diff=4243"/>
		<updated>2012-05-06T01:41:42Z</updated>

		<summary type="html">&lt;p&gt;Eros: /* Catacomb */ More sound info&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Wolfenstein 3D -&amp;gt; Wolfenstein 3-D ==&lt;br /&gt;
I&#039;ve corrected the infamous 3D tyop in the names of several Wolf3D-related pages; can you please delete the following ones?&lt;br /&gt;
&lt;br /&gt;
[[:Category:Wolfenstein 3D]] -&amp;gt; Superseded by [[:Category:Wolfenstein 3-D]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[:Image:Wolfenstein_3D.png]] -&amp;gt; Superseded by [[:Image:Wolfenstein_3-D.png]]&lt;br /&gt;
&lt;br /&gt;
Thanks :) --De Zeurkous (zeurkous@zeurcomp.nichten.info), Thu Nov 22 08:18:42 UTC 2007&lt;br /&gt;
&lt;br /&gt;
:Haha, you&#039;ve certainly been busy.  Don&#039;t forget that this wiki isn&#039;t meant to be an encyclopaedia of the games, its main purpose is documenting the file formats and editing tools that can be used with the games, as opposed to how the games behave without any mods, or what they might be called if you forget to change the title screen :-) -- [[User:Malvineous|Malvineous]] 11:14, 22 November 2007 (GMT)&lt;br /&gt;
&lt;br /&gt;
::Nah, I haven&#039;t forgotten. As we&#039;re reinventing the wheel for a semi-virgin wiki, the naming and something static like the cheats seemed like a good place to start :) --De Zeurkous (zeurkous@nichten.info), Thu Nov 22 12:20:04 UTC 2007&lt;br /&gt;
&lt;br /&gt;
== Jill of the Jungle palette ==&lt;br /&gt;
&lt;br /&gt;
Hi, I&#039;m currently working on a level viewer for [[Jill of the Jungle]] (maybe an editor later on). Some of the information I found here has been very useful, but there&#039;s one thing I&#039;m a bit stuck on. On the [[SHA Format]] page it says:&lt;br /&gt;
:&#039;&#039;Each array item contains 4 unsigned bytes, representing CGA, EGA and VGA, respectivley, and then a null value. [...] Each byte maps to the index of a colour in the palette. If there are no colours required, the tile set uses the default colours.&#039;&#039;&lt;br /&gt;
However, it doesn&#039;t say anywhere where the palette can be found. Is it stored in the EXE file? I hope you can help me on this :)&lt;br /&gt;
&lt;br /&gt;
Regards, [[User:Spinal|Spinal]] 13:00, 2 March 2008 (GMT)&lt;br /&gt;
&lt;br /&gt;
:Unfortunately I didn&#039;t write the JotJ SHA page, and I haven&#039;t yet had the time to figure this out.  For Xargon I&#039;ve taken the quick and dirty route and used a screenshot from within DOSBox as the source of the palette, until I can figure out where the palette is located.  If you find this out, don&#039;t forget to update the page! :-) -- [[User:Malvineous|Malvineous]] 22:02, 2 March 2008 (GMT)&lt;br /&gt;
&lt;br /&gt;
::Hey Spinal, sorry, I wrote the [[SHA Format]] page, so that was probably my bad. I wasn&#039;t able to find the palette either. I assume it&#039;s in the .EXE, however I spent a fair bit of time manually mapping it using a Wombat tool (http://www.szevvy.com/node/3). I was also writing a level viewer (initally in XHTML which turned out to be too slow, so then I moved to Flash 9). I tried to email you my findings, but the email bounced. I&#039;m not sure if they were 100% accurat, which is why I never added them to the documentation.&lt;br /&gt;
&lt;br /&gt;
::Hey Malvineous, it seems the Jill - [[DMA Format]] page has been removed. Do you have a log of what happened to it? I&#039;m sure it existed at some point.&lt;br /&gt;
&lt;br /&gt;
::- [[User:dheim|Daniel]] 20:00, 5 March 2008&lt;br /&gt;
&lt;br /&gt;
:::I don&#039;t ever remember seeing a DMA page - certainly there&#039;s nothing in the wiki logs about it being deleted or renamed.  Maybe you started working on it but never got around to saving it?  Or is it one of the Xargon pages that shares the same format as Jill?  (by the way, you can type &amp;lt;nowiki&amp;gt;~~~~&amp;lt;/nowiki&amp;gt; to automatically put in the signature in these messages.) -- [[User:Malvineous|Malvineous]] 11:28, 5 March 2008 (GMT)&lt;br /&gt;
&lt;br /&gt;
::::Sorry, it must have been the stuff in the [[SHA Format]] page that I was thinking of. I may have added the link to the [[DMA Format]] page, and never expanded on it. - [[User:Dheim|Daniel]] 02:46, 6 March 2008 (GMT)&lt;br /&gt;
&lt;br /&gt;
:::::Hi guys. Sorry for the mistake, I mixed up the authors of the SHA and level formats. I&#039;ve written a level viewer in PHP the last week, by using static images instead of getting them from the actual files. This causes some problems for episode 2, which uses a different palette, but besides that it works great :) When everything is done I&#039;ll upload the maps to my server and the tile/object lists to this wiki.&lt;br /&gt;
:::::@Daniel: strange that it bounced, I confirmed my address so it should be working fine... You can mail it to spinal -at- zanderz -dot- net. Also, I saw on your Wombat page that you &amp;quot;have a vague idea of how to do&amp;quot; [[Hocus Pocus]]. Could you share your findings on this wiki? I&#039;d love to make maps, or even a level viewer/editor for that game :) -- [[User:Spinal|Spinal]] 00:32, 8 March 2008 (GMT)&lt;br /&gt;
:Okay, with help of [[User:Dheim|Daniel]] who send me the palette I found it! I&#039;ll put my findings on [[Jill of the Jungle palette]]. -- [[User:Spinal|Spinal]] 15:36, 13 March 2008 (GMT)&lt;br /&gt;
&lt;br /&gt;
== Halloween Harry/Alien Carnage ==&lt;br /&gt;
&lt;br /&gt;
Hi Malvineous. Thanks for your edits on the GMF article! I notice you mentioned there exist versions of the game which don&#039;t require exploding a BNK to get at the game data. What does the directory structure look like for the version you have? I&#039;m working on a map viewer (which will become a map editor at some point) and would like it to be able to work on whatever versions are out there. Thanks for any info. -[[User:Duckthing|Duckthing]] 04:41, 11 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
: Hi Duckthing - no worries, Halloween Harry has long been an interest of mine, but my map editor sadly needs a lot more work before I can begin reverse engineering more file formats so I&#039;m glad you&#039;ve made a start!  AFAIK technically Halloween Harry has no compression, but for whatever reason (probably listed in the Apogee FAQ) they decided to swap episodes 1 and 3, compress the BNK file and then re-release it under the name Alien Carnage.  You can download all available versions (including registered versions since the game was released as freeware in 2007) from [http://www.classicdosgames.com/game/Alien_Carnage.html RGB Classic Games].  BTW not sure if you noticed but I also posted a couple of things on the GMF article&#039;s talk/discussion page. -- [[User:Malvineous|Malvineous]] 06:08, 11 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
:: Thank you! Working with the uncompressed version will keep things less complicated. I did notice the GMF discussion you added, but haven&#039;t had a chance to really go through it yet. -- [[User:Duckthing|Duckthing]] 06:41, 11 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
::: No worries.  If you&#039;re running Linux or MacOSX you should be able to compile [[Camoto|libgamearchive]] which will let you copy files in and out of the BNK files.  This is a library so it&#039;s also possible to use it in your own program for accessing and editing the map files while they&#039;re still inside the BNK, for instance.  (BTW the &#039;minor&#039; tickbox should only be used when the edit does not affect the information on the page - e.g. fixing a typo or a broken URL.  If you are changing the actual content on a page it is never a minor edit!) -- [[User:Malvineous|Malvineous]] 07:51, 11 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Dangerous Dave ==&lt;br /&gt;
&lt;br /&gt;
Working on this, does anyone have any info on the formats? The EGA graphics are 84KB and external, but CGA and VGA graphics unrelated to them are in the 174KB executable, apparently uncompressed, I don&#039;t know how this is possible. I&#039;ve found the levels and partially reverse engineered the format (The first 1000 bytes, a 100x10 array of tiles.) but each level is followed by ~280 bytes of variable and unknown data I assume is sprites. I have a list of internal files in the executable, looks like most of it is non-game code. Any help would be appreciated. -[[User:Levellass|Endian? What are you on about?]] 06:03, 12 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
: Hmm, interesting.  All I can suggest for the levels is - as you&#039;re probably already familiar with - changing the values in a hex editor then loading the game to see what happens.  I would suspect that all the graphics would be in a similar format, so if there are any headers or structures used in the EGA graphics files perhaps they&#039;re duplicated for CGA/VGA?  Also John Romero seems pretty accessible, perhaps you could ask him directly?  Failing that, randomly writing data into the .exe until the images change could be used as a last resort! -- [[User:Malvineous|Malvineous]] 12:09, 12 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
: Ha, that was easier than I expected - uncompressed VGA data is easy to find with a good hex editor ;-)  [http://www.shikadi.net/pics/ddave-vga-hexdump.png This looks like it] -- [[User:Malvineous|Malvineous]] 12:17, 12 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
: Ok that was only the menu graphics.  At offset 0xC629 there&#039;s some sort of offset table which looks very similar to the contents of EGADAVE.DAV but there are extra bytes dotted all over the place - perhaps it&#039;s RLE encoded?  Actually just before that there&#039;s the number 0x6CAA.  If you go a bit less than 0x6CAA bytes after this you end up with another table, which to me suggests that 0x6CAA is the decompressed size of that first table. -- [[User:Malvineous|Malvineous]] 13:01, 12 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
:If I remember it correctly, the VGA sprites and tiles are RLE compressed and it&#039;s not too hard to decompress them. The positions of the enemies in the levels on the other hand are still a mystery to me. [[User:Calvero|Calvero]] 20:43, 12 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
: Looking at the levels, which directly follow the VGA palette, they seem to contain 256 bytes of header data, then the 100x10 tiles, then eight bytes of lead-out data.  Then the next level&#039;s 256 bytes of header, 100x10 tiles, then eight bytes of lead-out.  Although I say &amp;quot;level&amp;quot;, the first &amp;quot;level&amp;quot; seems to contain both level 1 and 2, and this seems to be the way it works in the game - in some levels you can see through to others.  I&#039;m not sure what the 256 bytes of header data are for, but some levels have FF FF 00 00 repeated which seems to indicate two uint16 fields which are blanked out for those levels. -- [[User:Malvineous|Malvineous]] 13:15, 13 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
::First up, levels; where does level 1 start? It&#039;s possible I&#039;m reading the start of a level as the previous level&#039;s end, I looked for the start of tile data, which I assumed, like Keen 1, would be the level start.&lt;br /&gt;
&lt;br /&gt;
::Next, palette; I&#039;m assuming, as you said, it is located just before the level data?&lt;br /&gt;
&lt;br /&gt;
::There is VGA and CGA graphics in the executable, plus headers, but the bulk of graphics for CGA and VGA I haven&#039;t been able to locate. If the data is RLE compressed I should think it would use either Keen 1-3 fullscreen or Jazz Jackrabbit tile RLE, both of which I know well. I&#039;ll look into both of these options, cheers! -[[User:Levellass|Endian? What are you on about?]] 12:03, 20 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
:::I&#039;ve found the VGA and CGA data for the menu graphics.  It looks like the CGA data is stored in a series of 1-bit-per-pixel (monochrome) images.  Or it could be EGA data with the planes split out (e.g. red plane for all images, then green plane for all images, etc.)  I think I found three planes which means it&#039;s probably EGA, as CGA would have a max of two planes.  I&#039;ve also found the font graphics, this looks like 4bpp/16 colour EGA data.  Haven&#039;t seen level graphics yet.  I&#039;ve successfully modded the levels with a hex editor (putting the jetpack everywhere) so now I&#039;ve finally looked at all the levels!  The creatures are definitely not stored in the 100x10 tile data.  Putting random bytes in there revealed that the values are indices into the image files, because if you put the value in for fire it will animate, and the following three or so values show up as still frames from the fire animation.&lt;br /&gt;
&lt;br /&gt;
:::The VGA palette starts at 0x26B0A (I updated the main DDave page with this) + 768 bytes leads straight onto the start of level 1 at 0x26E0A.  So at 0x26E0A there are 256 bytes of data, then 100x10 tiles, then 24 bytes of footer data.  Some of this data (perhaps footer data) might be the level start coordinates, because Dave doesn&#039;t always start the level at the same place (e.g. the warp level when you climb the tree on level 5 and jump off the edge of the screen.) -- [[User:Malvineous|Malvineous]] 12:24, 20 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
:::I think I&#039;ve found all the files so far, I&#039;ve updated [[Dangerous Dave]] with the offsets of the files, including what appears to be CGA and VGA tiles.  I&#039;m not sure what sort of format they&#039;re in though, it looks like they might be compressed (and so the offsets in that list might be off by ~4, as I may have cut off the decompressed-size field.)  I&#039;ve also updated the map format page, I think it&#039;s pretty much fully reverse engineered now. -- [[User:Malvineous|Malvineous]] 05:13, 21 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Noahs Ark 3D and IMFs ==&lt;br /&gt;
&lt;br /&gt;
Been poking around Noah&#039;s Ark 3D, an adaption of the Wolfenstein game and found a few interesting things which I&#039;m hoping to confirm.&lt;br /&gt;
&lt;br /&gt;
First, the game uses MID files, not IMF files for music, second, the MIDI files have an extra word at the start of the file giving the file length. Third, the code uses the first word of the midi file as the length of data to read from the file and put into memory to play. After poking around a bit in Wolfenstein and Keen I believe this is the same with IMF files, that is, ALL IMF files are type 0 as it were and the type 1s are read just like type 0s by the games (The first word is read as the amount of IMF data to copy into memory to play, this is then read as type 0.) I&#039;m not quite sure what this does for the two types since type 1 is would essentially be a type 0 with a header and footer that are part of the AUDIO.xxx format, much like PC\adlib sounds can have the huffman lengths at the start. Are there any games that use &#039;individual&#039; type 1 IMFs (Even if included as part of a group file. All I&#039;ve seen are games like cosmo, where non-AUDIO IMFs are type 0.)&lt;br /&gt;
&lt;br /&gt;
Should there be a Noah&#039;s Ark 3D page and should we add the midi note to the AUDIO format page? It seems that the format can hold any type of music file the game can read, not just IMFs.  -- Levellass&lt;br /&gt;
&lt;br /&gt;
: Yes it is known that the type-1 header might really be part of the AUDIO.xxx format but alas there were many type-1 files floating around the place (incorrectly extracted, you could argue) before this was realised, so the format variant is here to stay.  It does have some advantages though (like tagging files with the song title) but I&#039;m not sure whether anyone has figured out definitively whether the header (and footer, in the case of the Wolf3D files) belongs to the IMF or the AUDIO file.  I guess you&#039;d have to browse the game source code and see how the game uses the data to know for sure.&lt;br /&gt;
&lt;br /&gt;
: As far as the MIDI goes, I believe the AUDIO.xxx file is just a container file like any other, capable of supporting any data at all.  It&#039;s up to the game to decide how to use it.  If anything this makes me think it would fit better if the AUDIO.xxx article was merely documenting the structure, with links to actual audio formats like PC SFX, Adlib SFX, IMF and MIDI and notes about which games make use of which formats.&lt;br /&gt;
&lt;br /&gt;
: Oh and yes, by all means create a page for the new game. -- [[User:Malvineous|Malvineous]] 08:41, 3 February 2011 (GMT)&lt;br /&gt;
&lt;br /&gt;
== Sound Files category ==&lt;br /&gt;
&lt;br /&gt;
I don’t know why there’s a Sound Files category and also an Audio Files category... it seems redundant. I left those categories the way they are though.&lt;br /&gt;
&lt;br /&gt;
Also, the [[File format data types]] page needs some signed ints, but I didn’t know what naming convention you wanted to use. I described something as an [[INT16LE]] on [[BMC Format]]. [[User:Yellowantphil|Yellowantphil]] 20:12, 11 September 2011 (GMT)&lt;br /&gt;
&lt;br /&gt;
: Not sure about the Sound vs Audio - I use the term &#039;audio&#039; to mean both sound and music, but you&#039;re right, if there are separate sound and music categories we don&#039;t really need an audio one as well.  Feel free to update.  [[INT16LE]] is perfectly fine too!  I added a note to the data types page. -- [[User:Malvineous|Malvineous]] 22:30, 11 September 2011 (GMT)&lt;br /&gt;
&lt;br /&gt;
== GamePage template ==&lt;br /&gt;
&lt;br /&gt;
Should the GamePage template add the page to its own category? It seems a little odd that [[Wacky Wheels]] is not in the Wacky Wheels category. [[User:Yellowantphil|Yellowantphil]] 04:51, 16 September 2011 (GMT)&lt;br /&gt;
: I decided against this because there is a link to the game&#039;s page in the category intro at the top of the page.  It seemed unnecessary having another link in amongst all the other pages.  This was also because the game page was really only meant to be a summary, there wasn&#039;t supposed to be a huge amount of detail on it, only links to other pages with the detail (which then would appear in the category list.)  I would imagine that, eventually, [[Wacky Wheels]] would be tweaked to move a lot of the content onto subpages. -- [[User:Malvineous|Malvineous]] 12:58, 16 September 2011 (GMT)&lt;br /&gt;
&lt;br /&gt;
== Scope of the wiki ==&lt;br /&gt;
&lt;br /&gt;
I don’t know how extensive you want the information to be on ModdingWiki... I added a few lists of audio and graphics files a while ago, and there will probably be other information that I’ll find out that’s potentially helpful for level editing but not directly related to it. I can move some information to my website if it starts to become out of scope for your wiki. I also sometimes end up documenting everything imaginable... there’s some minutiae on my website and possibly on your wiki that I ought to go through and delete. [[User:Yellowantphil|Yellowantphil]] 05:28, 10 October 2011 (GMT)&lt;br /&gt;
&lt;br /&gt;
:Hmm, that&#039;s a difficult one - I&#039;m always in favour of documenting more rather than less.  Generally speaking if it&#039;s related to a game and it would help either a programmer writing a utility or a someone trying to change a game manually then it should be documented.  About the only thing that comes to mind that&#039;s over documenting is when some small calculation is expressed in a couple of different programming languages, but I&#039;ve left that in so people can just copy it rather than trying to figure it out from the text.  But the [[Wacky Wheels]] page is probably the gold standard for what all wiki pages should look like :-)  Do you have anything in particular you&#039;re unsure of whether it would fit here? -- [[User:Malvineous|Malvineous]] 10:07, 10 October 2011 (GMT)&lt;br /&gt;
&lt;br /&gt;
::I was mainly thinking of the list of VOC files on [[Wacky Wheels Music and Sound Effects]] and the list of &amp;lt;tt&amp;gt;*.sp&amp;lt;/tt&amp;gt; files on [[Wacky Wheels Graphics Formats]]. I have an expanded list of the &amp;lt;tt&amp;gt;*.sp&amp;lt;/tt&amp;gt; files on my computer but it isn’t finished yet. I guess there isn’t all that much more Wacky Wheels information to be added to this wiki though. There is still some modding information on my website that ought to be moved over here, so that would take up another page or two. I’ve been lazy about doing Wacky Wheels stuff lately, but I might find some time for it this weekend.&lt;br /&gt;
&lt;br /&gt;
::By the way, I guess that guy from Cascadia Games emailed you. It’s pretty interesting that WW might become an iPhone app. He told me that he was going to be using his own game engine, which sounds a lot easier than trying to get a hold of the WW source code and porting it. —[[User:Yellowantphil|Yellowantphil]] 16:46, 15 October 2011 (GMT)&lt;br /&gt;
&lt;br /&gt;
::: I was going to say the list of VOCs might be overkill, but then the list of .sp files might be useful.  To be honest, it&#039;s the sort of thing that you could probably omit if you were feeling lazy, but likewise I don&#039;t mind at all if you choose to include it, so since it&#039;s already there I&#039;m happy to keep it.&lt;br /&gt;
&lt;br /&gt;
::: Yes I did get an e-mail from Cascadia, I was going to pass along your details but it sounds like you&#039;re already aware of it!  Using their own engine might make it a bit smoother than the original, as the jerkiness of turning is my only criticism of the game. -- [[User:Malvineous|Malvineous]] 00:14, 16 October 2011 (GMT)&lt;br /&gt;
&lt;br /&gt;
== Wacky Wheels ==&lt;br /&gt;
&lt;br /&gt;
Basically all of the WW modding information from my website is here now. I moved one page when I realized it should probably be capitalized to match the rest of the pages on this site... you can delete the redirect at [[Wacky Wheels high score files]] if you want to.&lt;br /&gt;
&lt;br /&gt;
Now, I need to remove most of the modding information from my website and refer people here. Then we’ll have reached the glorious future where all WW modding information is in one place. I’m going to keep those two text files of notes on my website though—the information in them is disorganized and I think not 100% accurate, but they might have some information that isn’t here yet.&lt;br /&gt;
&lt;br /&gt;
By the way, how’s Camoto going? I’m planning to use it to make a new WW level, but I won’t have time for it for a few more months. —[[User:Yellowantphil|Yellowantphil]]&lt;br /&gt;
&lt;br /&gt;
: Sounds good!  Thanks for all the effort you&#039;ve put in by moving it across.  I think Wacky Wheels is now the most completely documented game on the wiki!  Also can&#039;t hurt leaving your own info up - sometimes it&#039;s nice to go back to the original source if something is unclear.  Camoto&#039;s going well, but unfortunately I haven&#039;t had much time to work on it over the last few weeks.  You probably won&#039;t be able to make much of a level until I add in the ability to select a tile from the tileset, but that&#039;s in progress and hopefully will be ready by the time you are!  Keep me posted when you do start your level(s?) -- [[User:Malvineous|Malvineous]] 12:22, 2 February 2012 (GMT)&lt;br /&gt;
&lt;br /&gt;
::Well, as I was reading some of the information on my website, I noticed that it isn’t written very well. I wrote those pages back when I had very little experience programming. Anyway, I’m planning to redesign my website soon, and this will save me from having to rewrite a few of those pages.&lt;br /&gt;
&lt;br /&gt;
::The tile editor in Camoto as it is now is still certainly useful—I can add new tile types to a level using a binary editor and then move them around in Camoto. I think that it shouldn’t be too hard to make a new WW level using the Gimp and Camoto plus some binary editing. I recall having some problems with the route editor for the computer players, but I didn’t look into it at the time—I’ll let you know when I’m working with Camoto again, and I’ll try to come up with some useful bug reports or fixes if I run into problems. —[[User:Yellowantphil|Yellowantphil]] 14:06, 2 February 2012 (GMT)&lt;br /&gt;
&lt;br /&gt;
== Catacomb ==&lt;br /&gt;
&lt;br /&gt;
Hey [[User:Malvineous|Malvineous]], do you know anyone who has properly read the [[Inverse_Frequency_Sound_format|Inverse Sound Frequency]] file format and got the sound playing? I&#039;m struggling with some fine details in my game. Sounds play near what they should sound like, but the sound quality is all crackly and some sounds play totally incorrect. I followed a basic [http://web.archive.org/web/20000818033701/http://www.dd.chalmers.se/~f98anga/projects/keen/sounds2raw.c code sample] by Anders Gavare. Does your tool support this? Interested in helping me figure this out? My current code is available at [https://code.google.com/p/cataclone/source/browse/trunk/src/catacomb/catacomb_sound.c catacomb_sound.c] - [[User:Eros|Eros]] 11:57, 5 May 2012 (GMT)&lt;br /&gt;
: Should this be moved to my talk page? - [[User:Eros|Eros]] 11:59, 5 May 2012 (GMT)&lt;br /&gt;
:: Probably best to keep it on my talk page if you want me to respond in a timely manner :-)  I based my old utility off Anders&#039; one too, but it&#039;s been a long time since I looked at the code.  My latest utility doesn&#039;t support sound effects yet.  I know Levellass has written a few utilities to play and edit those sound files, so I think your best bet would probably be to post over at the [http://www.keenmodding.org Keen:Modding] forum.  Do note that PC Speaker effects do sound crackly at the best of times, though!  Also make sure you&#039;ve got the right audio format (8-bit vs 16-bit, signed vs unsigned) - I remember some inconsistencies there causing some very distorted results for me.  I love the name &#039;Cataclone&#039; - does your code compile under Linux? -- [[User:Malvineous|Malvineous]] 13:21, 5 May 2012 (GMT)&lt;br /&gt;
::: I currently compile the code using Code::Blocks with GCC 4.6 -std=gnu99. It *should* compile under Linux. But I haven&#039;t tested that out yet. [[Catacomb]] sounds also have flags attached to each one, It&#039;s not exactly the same specification as what it says @ the [[Inverse_Frequency_Sound_format|Inverse Sound Frequency]] format page. Perhaps the flags would make a difference to the sounds? I have the sound setup @ [https://code.google.com/p/cataclone/source/browse/trunk/src/sound_manager.c sound_manager.c] in the sound_manager_init() method. I use AUDIO_S16 (signed 16-bit) @ 22050 Hz with 2 channels. I have not added support for the priority of the sounds yet, I plan on doing that after I get them playing properly.&lt;br /&gt;
::: I found some information on the [[ROTT]] sound format here: [http://src.gnu-darwin.org/ports/games/rottdc/work/rottdc-1.0-2/rott/_rt_soun.h _rt_soun.h]. This format should be similar to Catacomb as ROTT was developed by [[Apogee]] using the [[Doom]] engine. Here are the flags for the sounds that they define:&lt;br /&gt;
 #define SD_OVERWRITE     0x01&lt;br /&gt;
 #define SD_WRITE         0x02&lt;br /&gt;
 #define SD_LOOP          0x04&lt;br /&gt;
 #define SD_PITCHSHIFTOFF 0x08&lt;br /&gt;
 #define SD_PLAYONCE      0x10&lt;br /&gt;
::: There are also many other sound files for ROTT: [http://src.gnu-darwin.org/ports/games/rottdc/work/rottdc-1.0-2/rott/rt_sound.c], [http://src.gnu-darwin.org/ports/games/rottdc/work/rottdc-1.0-2/rott/rt_sound.h], [http://src.gnu-darwin.org/ports/games/rottdc/work/rottdc-1.0-2/rott/snd_reg.h], [http://src.gnu-darwin.org/ports/games/rottdc/work/rottdc-1.0-2/rott/snd_shar.h], [http://src.gnu-darwin.org/ports/games/rottdc/work/rottdc-1.0-2/rott/sndcards.h]&lt;/div&gt;</summary>
		<author><name>Eros</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=ROTT&amp;diff=4242</id>
		<title>ROTT</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=ROTT&amp;diff=4242"/>
		<updated>2012-05-06T01:34:40Z</updated>

		<summary type="html">&lt;p&gt;Eros: Added ROTT redirect to Rise_of_the_Triad&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Rise_of_the_Triad]]&lt;/div&gt;</summary>
		<author><name>Eros</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=User_talk:Malvineous&amp;diff=4241</id>
		<title>User talk:Malvineous</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=User_talk:Malvineous&amp;diff=4241"/>
		<updated>2012-05-06T01:30:46Z</updated>

		<summary type="html">&lt;p&gt;Eros: /* Catacomb */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Wolfenstein 3D -&amp;gt; Wolfenstein 3-D ==&lt;br /&gt;
I&#039;ve corrected the infamous 3D tyop in the names of several Wolf3D-related pages; can you please delete the following ones?&lt;br /&gt;
&lt;br /&gt;
[[:Category:Wolfenstein 3D]] -&amp;gt; Superseded by [[:Category:Wolfenstein 3-D]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[:Image:Wolfenstein_3D.png]] -&amp;gt; Superseded by [[:Image:Wolfenstein_3-D.png]]&lt;br /&gt;
&lt;br /&gt;
Thanks :) --De Zeurkous (zeurkous@zeurcomp.nichten.info), Thu Nov 22 08:18:42 UTC 2007&lt;br /&gt;
&lt;br /&gt;
:Haha, you&#039;ve certainly been busy.  Don&#039;t forget that this wiki isn&#039;t meant to be an encyclopaedia of the games, its main purpose is documenting the file formats and editing tools that can be used with the games, as opposed to how the games behave without any mods, or what they might be called if you forget to change the title screen :-) -- [[User:Malvineous|Malvineous]] 11:14, 22 November 2007 (GMT)&lt;br /&gt;
&lt;br /&gt;
::Nah, I haven&#039;t forgotten. As we&#039;re reinventing the wheel for a semi-virgin wiki, the naming and something static like the cheats seemed like a good place to start :) --De Zeurkous (zeurkous@nichten.info), Thu Nov 22 12:20:04 UTC 2007&lt;br /&gt;
&lt;br /&gt;
== Jill of the Jungle palette ==&lt;br /&gt;
&lt;br /&gt;
Hi, I&#039;m currently working on a level viewer for [[Jill of the Jungle]] (maybe an editor later on). Some of the information I found here has been very useful, but there&#039;s one thing I&#039;m a bit stuck on. On the [[SHA Format]] page it says:&lt;br /&gt;
:&#039;&#039;Each array item contains 4 unsigned bytes, representing CGA, EGA and VGA, respectivley, and then a null value. [...] Each byte maps to the index of a colour in the palette. If there are no colours required, the tile set uses the default colours.&#039;&#039;&lt;br /&gt;
However, it doesn&#039;t say anywhere where the palette can be found. Is it stored in the EXE file? I hope you can help me on this :)&lt;br /&gt;
&lt;br /&gt;
Regards, [[User:Spinal|Spinal]] 13:00, 2 March 2008 (GMT)&lt;br /&gt;
&lt;br /&gt;
:Unfortunately I didn&#039;t write the JotJ SHA page, and I haven&#039;t yet had the time to figure this out.  For Xargon I&#039;ve taken the quick and dirty route and used a screenshot from within DOSBox as the source of the palette, until I can figure out where the palette is located.  If you find this out, don&#039;t forget to update the page! :-) -- [[User:Malvineous|Malvineous]] 22:02, 2 March 2008 (GMT)&lt;br /&gt;
&lt;br /&gt;
::Hey Spinal, sorry, I wrote the [[SHA Format]] page, so that was probably my bad. I wasn&#039;t able to find the palette either. I assume it&#039;s in the .EXE, however I spent a fair bit of time manually mapping it using a Wombat tool (http://www.szevvy.com/node/3). I was also writing a level viewer (initally in XHTML which turned out to be too slow, so then I moved to Flash 9). I tried to email you my findings, but the email bounced. I&#039;m not sure if they were 100% accurat, which is why I never added them to the documentation.&lt;br /&gt;
&lt;br /&gt;
::Hey Malvineous, it seems the Jill - [[DMA Format]] page has been removed. Do you have a log of what happened to it? I&#039;m sure it existed at some point.&lt;br /&gt;
&lt;br /&gt;
::- [[User:dheim|Daniel]] 20:00, 5 March 2008&lt;br /&gt;
&lt;br /&gt;
:::I don&#039;t ever remember seeing a DMA page - certainly there&#039;s nothing in the wiki logs about it being deleted or renamed.  Maybe you started working on it but never got around to saving it?  Or is it one of the Xargon pages that shares the same format as Jill?  (by the way, you can type &amp;lt;nowiki&amp;gt;~~~~&amp;lt;/nowiki&amp;gt; to automatically put in the signature in these messages.) -- [[User:Malvineous|Malvineous]] 11:28, 5 March 2008 (GMT)&lt;br /&gt;
&lt;br /&gt;
::::Sorry, it must have been the stuff in the [[SHA Format]] page that I was thinking of. I may have added the link to the [[DMA Format]] page, and never expanded on it. - [[User:Dheim|Daniel]] 02:46, 6 March 2008 (GMT)&lt;br /&gt;
&lt;br /&gt;
:::::Hi guys. Sorry for the mistake, I mixed up the authors of the SHA and level formats. I&#039;ve written a level viewer in PHP the last week, by using static images instead of getting them from the actual files. This causes some problems for episode 2, which uses a different palette, but besides that it works great :) When everything is done I&#039;ll upload the maps to my server and the tile/object lists to this wiki.&lt;br /&gt;
:::::@Daniel: strange that it bounced, I confirmed my address so it should be working fine... You can mail it to spinal -at- zanderz -dot- net. Also, I saw on your Wombat page that you &amp;quot;have a vague idea of how to do&amp;quot; [[Hocus Pocus]]. Could you share your findings on this wiki? I&#039;d love to make maps, or even a level viewer/editor for that game :) -- [[User:Spinal|Spinal]] 00:32, 8 March 2008 (GMT)&lt;br /&gt;
:Okay, with help of [[User:Dheim|Daniel]] who send me the palette I found it! I&#039;ll put my findings on [[Jill of the Jungle palette]]. -- [[User:Spinal|Spinal]] 15:36, 13 March 2008 (GMT)&lt;br /&gt;
&lt;br /&gt;
== Halloween Harry/Alien Carnage ==&lt;br /&gt;
&lt;br /&gt;
Hi Malvineous. Thanks for your edits on the GMF article! I notice you mentioned there exist versions of the game which don&#039;t require exploding a BNK to get at the game data. What does the directory structure look like for the version you have? I&#039;m working on a map viewer (which will become a map editor at some point) and would like it to be able to work on whatever versions are out there. Thanks for any info. -[[User:Duckthing|Duckthing]] 04:41, 11 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
: Hi Duckthing - no worries, Halloween Harry has long been an interest of mine, but my map editor sadly needs a lot more work before I can begin reverse engineering more file formats so I&#039;m glad you&#039;ve made a start!  AFAIK technically Halloween Harry has no compression, but for whatever reason (probably listed in the Apogee FAQ) they decided to swap episodes 1 and 3, compress the BNK file and then re-release it under the name Alien Carnage.  You can download all available versions (including registered versions since the game was released as freeware in 2007) from [http://www.classicdosgames.com/game/Alien_Carnage.html RGB Classic Games].  BTW not sure if you noticed but I also posted a couple of things on the GMF article&#039;s talk/discussion page. -- [[User:Malvineous|Malvineous]] 06:08, 11 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
:: Thank you! Working with the uncompressed version will keep things less complicated. I did notice the GMF discussion you added, but haven&#039;t had a chance to really go through it yet. -- [[User:Duckthing|Duckthing]] 06:41, 11 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
::: No worries.  If you&#039;re running Linux or MacOSX you should be able to compile [[Camoto|libgamearchive]] which will let you copy files in and out of the BNK files.  This is a library so it&#039;s also possible to use it in your own program for accessing and editing the map files while they&#039;re still inside the BNK, for instance.  (BTW the &#039;minor&#039; tickbox should only be used when the edit does not affect the information on the page - e.g. fixing a typo or a broken URL.  If you are changing the actual content on a page it is never a minor edit!) -- [[User:Malvineous|Malvineous]] 07:51, 11 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Dangerous Dave ==&lt;br /&gt;
&lt;br /&gt;
Working on this, does anyone have any info on the formats? The EGA graphics are 84KB and external, but CGA and VGA graphics unrelated to them are in the 174KB executable, apparently uncompressed, I don&#039;t know how this is possible. I&#039;ve found the levels and partially reverse engineered the format (The first 1000 bytes, a 100x10 array of tiles.) but each level is followed by ~280 bytes of variable and unknown data I assume is sprites. I have a list of internal files in the executable, looks like most of it is non-game code. Any help would be appreciated. -[[User:Levellass|Endian? What are you on about?]] 06:03, 12 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
: Hmm, interesting.  All I can suggest for the levels is - as you&#039;re probably already familiar with - changing the values in a hex editor then loading the game to see what happens.  I would suspect that all the graphics would be in a similar format, so if there are any headers or structures used in the EGA graphics files perhaps they&#039;re duplicated for CGA/VGA?  Also John Romero seems pretty accessible, perhaps you could ask him directly?  Failing that, randomly writing data into the .exe until the images change could be used as a last resort! -- [[User:Malvineous|Malvineous]] 12:09, 12 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
: Ha, that was easier than I expected - uncompressed VGA data is easy to find with a good hex editor ;-)  [http://www.shikadi.net/pics/ddave-vga-hexdump.png This looks like it] -- [[User:Malvineous|Malvineous]] 12:17, 12 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
: Ok that was only the menu graphics.  At offset 0xC629 there&#039;s some sort of offset table which looks very similar to the contents of EGADAVE.DAV but there are extra bytes dotted all over the place - perhaps it&#039;s RLE encoded?  Actually just before that there&#039;s the number 0x6CAA.  If you go a bit less than 0x6CAA bytes after this you end up with another table, which to me suggests that 0x6CAA is the decompressed size of that first table. -- [[User:Malvineous|Malvineous]] 13:01, 12 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
:If I remember it correctly, the VGA sprites and tiles are RLE compressed and it&#039;s not too hard to decompress them. The positions of the enemies in the levels on the other hand are still a mystery to me. [[User:Calvero|Calvero]] 20:43, 12 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
: Looking at the levels, which directly follow the VGA palette, they seem to contain 256 bytes of header data, then the 100x10 tiles, then eight bytes of lead-out data.  Then the next level&#039;s 256 bytes of header, 100x10 tiles, then eight bytes of lead-out.  Although I say &amp;quot;level&amp;quot;, the first &amp;quot;level&amp;quot; seems to contain both level 1 and 2, and this seems to be the way it works in the game - in some levels you can see through to others.  I&#039;m not sure what the 256 bytes of header data are for, but some levels have FF FF 00 00 repeated which seems to indicate two uint16 fields which are blanked out for those levels. -- [[User:Malvineous|Malvineous]] 13:15, 13 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
::First up, levels; where does level 1 start? It&#039;s possible I&#039;m reading the start of a level as the previous level&#039;s end, I looked for the start of tile data, which I assumed, like Keen 1, would be the level start.&lt;br /&gt;
&lt;br /&gt;
::Next, palette; I&#039;m assuming, as you said, it is located just before the level data?&lt;br /&gt;
&lt;br /&gt;
::There is VGA and CGA graphics in the executable, plus headers, but the bulk of graphics for CGA and VGA I haven&#039;t been able to locate. If the data is RLE compressed I should think it would use either Keen 1-3 fullscreen or Jazz Jackrabbit tile RLE, both of which I know well. I&#039;ll look into both of these options, cheers! -[[User:Levellass|Endian? What are you on about?]] 12:03, 20 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
:::I&#039;ve found the VGA and CGA data for the menu graphics.  It looks like the CGA data is stored in a series of 1-bit-per-pixel (monochrome) images.  Or it could be EGA data with the planes split out (e.g. red plane for all images, then green plane for all images, etc.)  I think I found three planes which means it&#039;s probably EGA, as CGA would have a max of two planes.  I&#039;ve also found the font graphics, this looks like 4bpp/16 colour EGA data.  Haven&#039;t seen level graphics yet.  I&#039;ve successfully modded the levels with a hex editor (putting the jetpack everywhere) so now I&#039;ve finally looked at all the levels!  The creatures are definitely not stored in the 100x10 tile data.  Putting random bytes in there revealed that the values are indices into the image files, because if you put the value in for fire it will animate, and the following three or so values show up as still frames from the fire animation.&lt;br /&gt;
&lt;br /&gt;
:::The VGA palette starts at 0x26B0A (I updated the main DDave page with this) + 768 bytes leads straight onto the start of level 1 at 0x26E0A.  So at 0x26E0A there are 256 bytes of data, then 100x10 tiles, then 24 bytes of footer data.  Some of this data (perhaps footer data) might be the level start coordinates, because Dave doesn&#039;t always start the level at the same place (e.g. the warp level when you climb the tree on level 5 and jump off the edge of the screen.) -- [[User:Malvineous|Malvineous]] 12:24, 20 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
:::I think I&#039;ve found all the files so far, I&#039;ve updated [[Dangerous Dave]] with the offsets of the files, including what appears to be CGA and VGA tiles.  I&#039;m not sure what sort of format they&#039;re in though, it looks like they might be compressed (and so the offsets in that list might be off by ~4, as I may have cut off the decompressed-size field.)  I&#039;ve also updated the map format page, I think it&#039;s pretty much fully reverse engineered now. -- [[User:Malvineous|Malvineous]] 05:13, 21 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Noahs Ark 3D and IMFs ==&lt;br /&gt;
&lt;br /&gt;
Been poking around Noah&#039;s Ark 3D, an adaption of the Wolfenstein game and found a few interesting things which I&#039;m hoping to confirm.&lt;br /&gt;
&lt;br /&gt;
First, the game uses MID files, not IMF files for music, second, the MIDI files have an extra word at the start of the file giving the file length. Third, the code uses the first word of the midi file as the length of data to read from the file and put into memory to play. After poking around a bit in Wolfenstein and Keen I believe this is the same with IMF files, that is, ALL IMF files are type 0 as it were and the type 1s are read just like type 0s by the games (The first word is read as the amount of IMF data to copy into memory to play, this is then read as type 0.) I&#039;m not quite sure what this does for the two types since type 1 is would essentially be a type 0 with a header and footer that are part of the AUDIO.xxx format, much like PC\adlib sounds can have the huffman lengths at the start. Are there any games that use &#039;individual&#039; type 1 IMFs (Even if included as part of a group file. All I&#039;ve seen are games like cosmo, where non-AUDIO IMFs are type 0.)&lt;br /&gt;
&lt;br /&gt;
Should there be a Noah&#039;s Ark 3D page and should we add the midi note to the AUDIO format page? It seems that the format can hold any type of music file the game can read, not just IMFs.  -- Levellass&lt;br /&gt;
&lt;br /&gt;
: Yes it is known that the type-1 header might really be part of the AUDIO.xxx format but alas there were many type-1 files floating around the place (incorrectly extracted, you could argue) before this was realised, so the format variant is here to stay.  It does have some advantages though (like tagging files with the song title) but I&#039;m not sure whether anyone has figured out definitively whether the header (and footer, in the case of the Wolf3D files) belongs to the IMF or the AUDIO file.  I guess you&#039;d have to browse the game source code and see how the game uses the data to know for sure.&lt;br /&gt;
&lt;br /&gt;
: As far as the MIDI goes, I believe the AUDIO.xxx file is just a container file like any other, capable of supporting any data at all.  It&#039;s up to the game to decide how to use it.  If anything this makes me think it would fit better if the AUDIO.xxx article was merely documenting the structure, with links to actual audio formats like PC SFX, Adlib SFX, IMF and MIDI and notes about which games make use of which formats.&lt;br /&gt;
&lt;br /&gt;
: Oh and yes, by all means create a page for the new game. -- [[User:Malvineous|Malvineous]] 08:41, 3 February 2011 (GMT)&lt;br /&gt;
&lt;br /&gt;
== Sound Files category ==&lt;br /&gt;
&lt;br /&gt;
I don’t know why there’s a Sound Files category and also an Audio Files category... it seems redundant. I left those categories the way they are though.&lt;br /&gt;
&lt;br /&gt;
Also, the [[File format data types]] page needs some signed ints, but I didn’t know what naming convention you wanted to use. I described something as an [[INT16LE]] on [[BMC Format]]. [[User:Yellowantphil|Yellowantphil]] 20:12, 11 September 2011 (GMT)&lt;br /&gt;
&lt;br /&gt;
: Not sure about the Sound vs Audio - I use the term &#039;audio&#039; to mean both sound and music, but you&#039;re right, if there are separate sound and music categories we don&#039;t really need an audio one as well.  Feel free to update.  [[INT16LE]] is perfectly fine too!  I added a note to the data types page. -- [[User:Malvineous|Malvineous]] 22:30, 11 September 2011 (GMT)&lt;br /&gt;
&lt;br /&gt;
== GamePage template ==&lt;br /&gt;
&lt;br /&gt;
Should the GamePage template add the page to its own category? It seems a little odd that [[Wacky Wheels]] is not in the Wacky Wheels category. [[User:Yellowantphil|Yellowantphil]] 04:51, 16 September 2011 (GMT)&lt;br /&gt;
: I decided against this because there is a link to the game&#039;s page in the category intro at the top of the page.  It seemed unnecessary having another link in amongst all the other pages.  This was also because the game page was really only meant to be a summary, there wasn&#039;t supposed to be a huge amount of detail on it, only links to other pages with the detail (which then would appear in the category list.)  I would imagine that, eventually, [[Wacky Wheels]] would be tweaked to move a lot of the content onto subpages. -- [[User:Malvineous|Malvineous]] 12:58, 16 September 2011 (GMT)&lt;br /&gt;
&lt;br /&gt;
== Scope of the wiki ==&lt;br /&gt;
&lt;br /&gt;
I don’t know how extensive you want the information to be on ModdingWiki... I added a few lists of audio and graphics files a while ago, and there will probably be other information that I’ll find out that’s potentially helpful for level editing but not directly related to it. I can move some information to my website if it starts to become out of scope for your wiki. I also sometimes end up documenting everything imaginable... there’s some minutiae on my website and possibly on your wiki that I ought to go through and delete. [[User:Yellowantphil|Yellowantphil]] 05:28, 10 October 2011 (GMT)&lt;br /&gt;
&lt;br /&gt;
:Hmm, that&#039;s a difficult one - I&#039;m always in favour of documenting more rather than less.  Generally speaking if it&#039;s related to a game and it would help either a programmer writing a utility or a someone trying to change a game manually then it should be documented.  About the only thing that comes to mind that&#039;s over documenting is when some small calculation is expressed in a couple of different programming languages, but I&#039;ve left that in so people can just copy it rather than trying to figure it out from the text.  But the [[Wacky Wheels]] page is probably the gold standard for what all wiki pages should look like :-)  Do you have anything in particular you&#039;re unsure of whether it would fit here? -- [[User:Malvineous|Malvineous]] 10:07, 10 October 2011 (GMT)&lt;br /&gt;
&lt;br /&gt;
::I was mainly thinking of the list of VOC files on [[Wacky Wheels Music and Sound Effects]] and the list of &amp;lt;tt&amp;gt;*.sp&amp;lt;/tt&amp;gt; files on [[Wacky Wheels Graphics Formats]]. I have an expanded list of the &amp;lt;tt&amp;gt;*.sp&amp;lt;/tt&amp;gt; files on my computer but it isn’t finished yet. I guess there isn’t all that much more Wacky Wheels information to be added to this wiki though. There is still some modding information on my website that ought to be moved over here, so that would take up another page or two. I’ve been lazy about doing Wacky Wheels stuff lately, but I might find some time for it this weekend.&lt;br /&gt;
&lt;br /&gt;
::By the way, I guess that guy from Cascadia Games emailed you. It’s pretty interesting that WW might become an iPhone app. He told me that he was going to be using his own game engine, which sounds a lot easier than trying to get a hold of the WW source code and porting it. —[[User:Yellowantphil|Yellowantphil]] 16:46, 15 October 2011 (GMT)&lt;br /&gt;
&lt;br /&gt;
::: I was going to say the list of VOCs might be overkill, but then the list of .sp files might be useful.  To be honest, it&#039;s the sort of thing that you could probably omit if you were feeling lazy, but likewise I don&#039;t mind at all if you choose to include it, so since it&#039;s already there I&#039;m happy to keep it.&lt;br /&gt;
&lt;br /&gt;
::: Yes I did get an e-mail from Cascadia, I was going to pass along your details but it sounds like you&#039;re already aware of it!  Using their own engine might make it a bit smoother than the original, as the jerkiness of turning is my only criticism of the game. -- [[User:Malvineous|Malvineous]] 00:14, 16 October 2011 (GMT)&lt;br /&gt;
&lt;br /&gt;
== Wacky Wheels ==&lt;br /&gt;
&lt;br /&gt;
Basically all of the WW modding information from my website is here now. I moved one page when I realized it should probably be capitalized to match the rest of the pages on this site... you can delete the redirect at [[Wacky Wheels high score files]] if you want to.&lt;br /&gt;
&lt;br /&gt;
Now, I need to remove most of the modding information from my website and refer people here. Then we’ll have reached the glorious future where all WW modding information is in one place. I’m going to keep those two text files of notes on my website though—the information in them is disorganized and I think not 100% accurate, but they might have some information that isn’t here yet.&lt;br /&gt;
&lt;br /&gt;
By the way, how’s Camoto going? I’m planning to use it to make a new WW level, but I won’t have time for it for a few more months. —[[User:Yellowantphil|Yellowantphil]]&lt;br /&gt;
&lt;br /&gt;
: Sounds good!  Thanks for all the effort you&#039;ve put in by moving it across.  I think Wacky Wheels is now the most completely documented game on the wiki!  Also can&#039;t hurt leaving your own info up - sometimes it&#039;s nice to go back to the original source if something is unclear.  Camoto&#039;s going well, but unfortunately I haven&#039;t had much time to work on it over the last few weeks.  You probably won&#039;t be able to make much of a level until I add in the ability to select a tile from the tileset, but that&#039;s in progress and hopefully will be ready by the time you are!  Keep me posted when you do start your level(s?) -- [[User:Malvineous|Malvineous]] 12:22, 2 February 2012 (GMT)&lt;br /&gt;
&lt;br /&gt;
::Well, as I was reading some of the information on my website, I noticed that it isn’t written very well. I wrote those pages back when I had very little experience programming. Anyway, I’m planning to redesign my website soon, and this will save me from having to rewrite a few of those pages.&lt;br /&gt;
&lt;br /&gt;
::The tile editor in Camoto as it is now is still certainly useful—I can add new tile types to a level using a binary editor and then move them around in Camoto. I think that it shouldn’t be too hard to make a new WW level using the Gimp and Camoto plus some binary editing. I recall having some problems with the route editor for the computer players, but I didn’t look into it at the time—I’ll let you know when I’m working with Camoto again, and I’ll try to come up with some useful bug reports or fixes if I run into problems. —[[User:Yellowantphil|Yellowantphil]] 14:06, 2 February 2012 (GMT)&lt;br /&gt;
&lt;br /&gt;
== Catacomb ==&lt;br /&gt;
&lt;br /&gt;
Hey [[User:Malvineous|Malvineous]], do you know anyone who has properly read the [[Inverse_Frequency_Sound_format|Inverse Sound Frequency]] file format and got the sound playing? I&#039;m struggling with some fine details in my game. Sounds play near what they should sound like, but the sound quality is all crackly and some sounds play totally incorrect. I followed a basic [http://web.archive.org/web/20000818033701/http://www.dd.chalmers.se/~f98anga/projects/keen/sounds2raw.c code sample] by Anders Gavare. Does your tool support this? Interested in helping me figure this out? My current code is available at [https://code.google.com/p/cataclone/source/browse/trunk/src/catacomb/catacomb_sound.c catacomb_sound.c] - [[User:Eros|Eros]] 11:57, 5 May 2012 (GMT)&lt;br /&gt;
: Should this be moved to my talk page? - [[User:Eros|Eros]] 11:59, 5 May 2012 (GMT)&lt;br /&gt;
:: Probably best to keep it on my talk page if you want me to respond in a timely manner :-)  I based my old utility off Anders&#039; one too, but it&#039;s been a long time since I looked at the code.  My latest utility doesn&#039;t support sound effects yet.  I know Levellass has written a few utilities to play and edit those sound files, so I think your best bet would probably be to post over at the [http://www.keenmodding.org Keen:Modding] forum.  Do note that PC Speaker effects do sound crackly at the best of times, though!  Also make sure you&#039;ve got the right audio format (8-bit vs 16-bit, signed vs unsigned) - I remember some inconsistencies there causing some very distorted results for me.  I love the name &#039;Cataclone&#039; - does your code compile under Linux? -- [[User:Malvineous|Malvineous]] 13:21, 5 May 2012 (GMT)&lt;br /&gt;
::: I currently compile the code using Code::Blocks with GCC 4.6 -std=gnu99. It *should* compile under Linux. But I haven&#039;t tested that out yet. [[Catacomb]] sounds also have flags attached to each one, It&#039;s not exactly the same specification as what it says @ the [[Inverse_Frequency_Sound_format|Inverse Sound Frequency]] format page. Perhaps the flags would make a difference to the sounds? I have the sound setup @ [https://code.google.com/p/cataclone/source/browse/trunk/src/sound_manager.c sound_manager.c] in the sound_manager_init() method. I use AUDIO_S16 (signed 16-bit) @ 22050 Hz with 2 channels. I have not added support for the priority of the sounds yet, I plan on doing that after I get them playing properly.&lt;/div&gt;</summary>
		<author><name>Eros</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=User_talk:Malvineous&amp;diff=4239</id>
		<title>User talk:Malvineous</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=User_talk:Malvineous&amp;diff=4239"/>
		<updated>2012-05-05T11:59:35Z</updated>

		<summary type="html">&lt;p&gt;Eros: /* Catacomb */ my talk page?&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Wolfenstein 3D -&amp;gt; Wolfenstein 3-D ==&lt;br /&gt;
I&#039;ve corrected the infamous 3D tyop in the names of several Wolf3D-related pages; can you please delete the following ones?&lt;br /&gt;
&lt;br /&gt;
[[:Category:Wolfenstein 3D]] -&amp;gt; Superseded by [[:Category:Wolfenstein 3-D]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[:Image:Wolfenstein_3D.png]] -&amp;gt; Superseded by [[:Image:Wolfenstein_3-D.png]]&lt;br /&gt;
&lt;br /&gt;
Thanks :) --De Zeurkous (zeurkous@zeurcomp.nichten.info), Thu Nov 22 08:18:42 UTC 2007&lt;br /&gt;
&lt;br /&gt;
:Haha, you&#039;ve certainly been busy.  Don&#039;t forget that this wiki isn&#039;t meant to be an encyclopaedia of the games, its main purpose is documenting the file formats and editing tools that can be used with the games, as opposed to how the games behave without any mods, or what they might be called if you forget to change the title screen :-) -- [[User:Malvineous|Malvineous]] 11:14, 22 November 2007 (GMT)&lt;br /&gt;
&lt;br /&gt;
::Nah, I haven&#039;t forgotten. As we&#039;re reinventing the wheel for a semi-virgin wiki, the naming and something static like the cheats seemed like a good place to start :) --De Zeurkous (zeurkous@nichten.info), Thu Nov 22 12:20:04 UTC 2007&lt;br /&gt;
&lt;br /&gt;
== Jill of the Jungle palette ==&lt;br /&gt;
&lt;br /&gt;
Hi, I&#039;m currently working on a level viewer for [[Jill of the Jungle]] (maybe an editor later on). Some of the information I found here has been very useful, but there&#039;s one thing I&#039;m a bit stuck on. On the [[SHA Format]] page it says:&lt;br /&gt;
:&#039;&#039;Each array item contains 4 unsigned bytes, representing CGA, EGA and VGA, respectivley, and then a null value. [...] Each byte maps to the index of a colour in the palette. If there are no colours required, the tile set uses the default colours.&#039;&#039;&lt;br /&gt;
However, it doesn&#039;t say anywhere where the palette can be found. Is it stored in the EXE file? I hope you can help me on this :)&lt;br /&gt;
&lt;br /&gt;
Regards, [[User:Spinal|Spinal]] 13:00, 2 March 2008 (GMT)&lt;br /&gt;
&lt;br /&gt;
:Unfortunately I didn&#039;t write the JotJ SHA page, and I haven&#039;t yet had the time to figure this out.  For Xargon I&#039;ve taken the quick and dirty route and used a screenshot from within DOSBox as the source of the palette, until I can figure out where the palette is located.  If you find this out, don&#039;t forget to update the page! :-) -- [[User:Malvineous|Malvineous]] 22:02, 2 March 2008 (GMT)&lt;br /&gt;
&lt;br /&gt;
::Hey Spinal, sorry, I wrote the [[SHA Format]] page, so that was probably my bad. I wasn&#039;t able to find the palette either. I assume it&#039;s in the .EXE, however I spent a fair bit of time manually mapping it using a Wombat tool (http://www.szevvy.com/node/3). I was also writing a level viewer (initally in XHTML which turned out to be too slow, so then I moved to Flash 9). I tried to email you my findings, but the email bounced. I&#039;m not sure if they were 100% accurat, which is why I never added them to the documentation.&lt;br /&gt;
&lt;br /&gt;
::Hey Malvineous, it seems the Jill - [[DMA Format]] page has been removed. Do you have a log of what happened to it? I&#039;m sure it existed at some point.&lt;br /&gt;
&lt;br /&gt;
::- [[User:dheim|Daniel]] 20:00, 5 March 2008&lt;br /&gt;
&lt;br /&gt;
:::I don&#039;t ever remember seeing a DMA page - certainly there&#039;s nothing in the wiki logs about it being deleted or renamed.  Maybe you started working on it but never got around to saving it?  Or is it one of the Xargon pages that shares the same format as Jill?  (by the way, you can type &amp;lt;nowiki&amp;gt;~~~~&amp;lt;/nowiki&amp;gt; to automatically put in the signature in these messages.) -- [[User:Malvineous|Malvineous]] 11:28, 5 March 2008 (GMT)&lt;br /&gt;
&lt;br /&gt;
::::Sorry, it must have been the stuff in the [[SHA Format]] page that I was thinking of. I may have added the link to the [[DMA Format]] page, and never expanded on it. - [[User:Dheim|Daniel]] 02:46, 6 March 2008 (GMT)&lt;br /&gt;
&lt;br /&gt;
:::::Hi guys. Sorry for the mistake, I mixed up the authors of the SHA and level formats. I&#039;ve written a level viewer in PHP the last week, by using static images instead of getting them from the actual files. This causes some problems for episode 2, which uses a different palette, but besides that it works great :) When everything is done I&#039;ll upload the maps to my server and the tile/object lists to this wiki.&lt;br /&gt;
:::::@Daniel: strange that it bounced, I confirmed my address so it should be working fine... You can mail it to spinal -at- zanderz -dot- net. Also, I saw on your Wombat page that you &amp;quot;have a vague idea of how to do&amp;quot; [[Hocus Pocus]]. Could you share your findings on this wiki? I&#039;d love to make maps, or even a level viewer/editor for that game :) -- [[User:Spinal|Spinal]] 00:32, 8 March 2008 (GMT)&lt;br /&gt;
:Okay, with help of [[User:Dheim|Daniel]] who send me the palette I found it! I&#039;ll put my findings on [[Jill of the Jungle palette]]. -- [[User:Spinal|Spinal]] 15:36, 13 March 2008 (GMT)&lt;br /&gt;
&lt;br /&gt;
== Halloween Harry/Alien Carnage ==&lt;br /&gt;
&lt;br /&gt;
Hi Malvineous. Thanks for your edits on the GMF article! I notice you mentioned there exist versions of the game which don&#039;t require exploding a BNK to get at the game data. What does the directory structure look like for the version you have? I&#039;m working on a map viewer (which will become a map editor at some point) and would like it to be able to work on whatever versions are out there. Thanks for any info. -[[User:Duckthing|Duckthing]] 04:41, 11 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
: Hi Duckthing - no worries, Halloween Harry has long been an interest of mine, but my map editor sadly needs a lot more work before I can begin reverse engineering more file formats so I&#039;m glad you&#039;ve made a start!  AFAIK technically Halloween Harry has no compression, but for whatever reason (probably listed in the Apogee FAQ) they decided to swap episodes 1 and 3, compress the BNK file and then re-release it under the name Alien Carnage.  You can download all available versions (including registered versions since the game was released as freeware in 2007) from [http://www.classicdosgames.com/game/Alien_Carnage.html RGB Classic Games].  BTW not sure if you noticed but I also posted a couple of things on the GMF article&#039;s talk/discussion page. -- [[User:Malvineous|Malvineous]] 06:08, 11 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
:: Thank you! Working with the uncompressed version will keep things less complicated. I did notice the GMF discussion you added, but haven&#039;t had a chance to really go through it yet. -- [[User:Duckthing|Duckthing]] 06:41, 11 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
::: No worries.  If you&#039;re running Linux or MacOSX you should be able to compile [[Camoto|libgamearchive]] which will let you copy files in and out of the BNK files.  This is a library so it&#039;s also possible to use it in your own program for accessing and editing the map files while they&#039;re still inside the BNK, for instance.  (BTW the &#039;minor&#039; tickbox should only be used when the edit does not affect the information on the page - e.g. fixing a typo or a broken URL.  If you are changing the actual content on a page it is never a minor edit!) -- [[User:Malvineous|Malvineous]] 07:51, 11 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Dangerous Dave ==&lt;br /&gt;
&lt;br /&gt;
Working on this, does anyone have any info on the formats? The EGA graphics are 84KB and external, but CGA and VGA graphics unrelated to them are in the 174KB executable, apparently uncompressed, I don&#039;t know how this is possible. I&#039;ve found the levels and partially reverse engineered the format (The first 1000 bytes, a 100x10 array of tiles.) but each level is followed by ~280 bytes of variable and unknown data I assume is sprites. I have a list of internal files in the executable, looks like most of it is non-game code. Any help would be appreciated. -[[User:Levellass|Endian? What are you on about?]] 06:03, 12 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
: Hmm, interesting.  All I can suggest for the levels is - as you&#039;re probably already familiar with - changing the values in a hex editor then loading the game to see what happens.  I would suspect that all the graphics would be in a similar format, so if there are any headers or structures used in the EGA graphics files perhaps they&#039;re duplicated for CGA/VGA?  Also John Romero seems pretty accessible, perhaps you could ask him directly?  Failing that, randomly writing data into the .exe until the images change could be used as a last resort! -- [[User:Malvineous|Malvineous]] 12:09, 12 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
: Ha, that was easier than I expected - uncompressed VGA data is easy to find with a good hex editor ;-)  [http://www.shikadi.net/pics/ddave-vga-hexdump.png This looks like it] -- [[User:Malvineous|Malvineous]] 12:17, 12 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
: Ok that was only the menu graphics.  At offset 0xC629 there&#039;s some sort of offset table which looks very similar to the contents of EGADAVE.DAV but there are extra bytes dotted all over the place - perhaps it&#039;s RLE encoded?  Actually just before that there&#039;s the number 0x6CAA.  If you go a bit less than 0x6CAA bytes after this you end up with another table, which to me suggests that 0x6CAA is the decompressed size of that first table. -- [[User:Malvineous|Malvineous]] 13:01, 12 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
:If I remember it correctly, the VGA sprites and tiles are RLE compressed and it&#039;s not too hard to decompress them. The positions of the enemies in the levels on the other hand are still a mystery to me. [[User:Calvero|Calvero]] 20:43, 12 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
: Looking at the levels, which directly follow the VGA palette, they seem to contain 256 bytes of header data, then the 100x10 tiles, then eight bytes of lead-out data.  Then the next level&#039;s 256 bytes of header, 100x10 tiles, then eight bytes of lead-out.  Although I say &amp;quot;level&amp;quot;, the first &amp;quot;level&amp;quot; seems to contain both level 1 and 2, and this seems to be the way it works in the game - in some levels you can see through to others.  I&#039;m not sure what the 256 bytes of header data are for, but some levels have FF FF 00 00 repeated which seems to indicate two uint16 fields which are blanked out for those levels. -- [[User:Malvineous|Malvineous]] 13:15, 13 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
::First up, levels; where does level 1 start? It&#039;s possible I&#039;m reading the start of a level as the previous level&#039;s end, I looked for the start of tile data, which I assumed, like Keen 1, would be the level start.&lt;br /&gt;
&lt;br /&gt;
::Next, palette; I&#039;m assuming, as you said, it is located just before the level data?&lt;br /&gt;
&lt;br /&gt;
::There is VGA and CGA graphics in the executable, plus headers, but the bulk of graphics for CGA and VGA I haven&#039;t been able to locate. If the data is RLE compressed I should think it would use either Keen 1-3 fullscreen or Jazz Jackrabbit tile RLE, both of which I know well. I&#039;ll look into both of these options, cheers! -[[User:Levellass|Endian? What are you on about?]] 12:03, 20 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
:::I&#039;ve found the VGA and CGA data for the menu graphics.  It looks like the CGA data is stored in a series of 1-bit-per-pixel (monochrome) images.  Or it could be EGA data with the planes split out (e.g. red plane for all images, then green plane for all images, etc.)  I think I found three planes which means it&#039;s probably EGA, as CGA would have a max of two planes.  I&#039;ve also found the font graphics, this looks like 4bpp/16 colour EGA data.  Haven&#039;t seen level graphics yet.  I&#039;ve successfully modded the levels with a hex editor (putting the jetpack everywhere) so now I&#039;ve finally looked at all the levels!  The creatures are definitely not stored in the 100x10 tile data.  Putting random bytes in there revealed that the values are indices into the image files, because if you put the value in for fire it will animate, and the following three or so values show up as still frames from the fire animation.&lt;br /&gt;
&lt;br /&gt;
:::The VGA palette starts at 0x26B0A (I updated the main DDave page with this) + 768 bytes leads straight onto the start of level 1 at 0x26E0A.  So at 0x26E0A there are 256 bytes of data, then 100x10 tiles, then 24 bytes of footer data.  Some of this data (perhaps footer data) might be the level start coordinates, because Dave doesn&#039;t always start the level at the same place (e.g. the warp level when you climb the tree on level 5 and jump off the edge of the screen.) -- [[User:Malvineous|Malvineous]] 12:24, 20 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
:::I think I&#039;ve found all the files so far, I&#039;ve updated [[Dangerous Dave]] with the offsets of the files, including what appears to be CGA and VGA tiles.  I&#039;m not sure what sort of format they&#039;re in though, it looks like they might be compressed (and so the offsets in that list might be off by ~4, as I may have cut off the decompressed-size field.)  I&#039;ve also updated the map format page, I think it&#039;s pretty much fully reverse engineered now. -- [[User:Malvineous|Malvineous]] 05:13, 21 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Noahs Ark 3D and IMFs ==&lt;br /&gt;
&lt;br /&gt;
Been poking around Noah&#039;s Ark 3D, an adaption of the Wolfenstein game and found a few interesting things which I&#039;m hoping to confirm.&lt;br /&gt;
&lt;br /&gt;
First, the game uses MID files, not IMF files for music, second, the MIDI files have an extra word at the start of the file giving the file length. Third, the code uses the first word of the midi file as the length of data to read from the file and put into memory to play. After poking around a bit in Wolfenstein and Keen I believe this is the same with IMF files, that is, ALL IMF files are type 0 as it were and the type 1s are read just like type 0s by the games (The first word is read as the amount of IMF data to copy into memory to play, this is then read as type 0.) I&#039;m not quite sure what this does for the two types since type 1 is would essentially be a type 0 with a header and footer that are part of the AUDIO.xxx format, much like PC\adlib sounds can have the huffman lengths at the start. Are there any games that use &#039;individual&#039; type 1 IMFs (Even if included as part of a group file. All I&#039;ve seen are games like cosmo, where non-AUDIO IMFs are type 0.)&lt;br /&gt;
&lt;br /&gt;
Should there be a Noah&#039;s Ark 3D page and should we add the midi note to the AUDIO format page? It seems that the format can hold any type of music file the game can read, not just IMFs.  -- Levellass&lt;br /&gt;
&lt;br /&gt;
: Yes it is known that the type-1 header might really be part of the AUDIO.xxx format but alas there were many type-1 files floating around the place (incorrectly extracted, you could argue) before this was realised, so the format variant is here to stay.  It does have some advantages though (like tagging files with the song title) but I&#039;m not sure whether anyone has figured out definitively whether the header (and footer, in the case of the Wolf3D files) belongs to the IMF or the AUDIO file.  I guess you&#039;d have to browse the game source code and see how the game uses the data to know for sure.&lt;br /&gt;
&lt;br /&gt;
: As far as the MIDI goes, I believe the AUDIO.xxx file is just a container file like any other, capable of supporting any data at all.  It&#039;s up to the game to decide how to use it.  If anything this makes me think it would fit better if the AUDIO.xxx article was merely documenting the structure, with links to actual audio formats like PC SFX, Adlib SFX, IMF and MIDI and notes about which games make use of which formats.&lt;br /&gt;
&lt;br /&gt;
: Oh and yes, by all means create a page for the new game. -- [[User:Malvineous|Malvineous]] 08:41, 3 February 2011 (GMT)&lt;br /&gt;
&lt;br /&gt;
== Sound Files category ==&lt;br /&gt;
&lt;br /&gt;
I don’t know why there’s a Sound Files category and also an Audio Files category... it seems redundant. I left those categories the way they are though.&lt;br /&gt;
&lt;br /&gt;
Also, the [[File format data types]] page needs some signed ints, but I didn’t know what naming convention you wanted to use. I described something as an [[INT16LE]] on [[BMC Format]]. [[User:Yellowantphil|Yellowantphil]] 20:12, 11 September 2011 (GMT)&lt;br /&gt;
&lt;br /&gt;
: Not sure about the Sound vs Audio - I use the term &#039;audio&#039; to mean both sound and music, but you&#039;re right, if there are separate sound and music categories we don&#039;t really need an audio one as well.  Feel free to update.  [[INT16LE]] is perfectly fine too!  I added a note to the data types page. -- [[User:Malvineous|Malvineous]] 22:30, 11 September 2011 (GMT)&lt;br /&gt;
&lt;br /&gt;
== GamePage template ==&lt;br /&gt;
&lt;br /&gt;
Should the GamePage template add the page to its own category? It seems a little odd that [[Wacky Wheels]] is not in the Wacky Wheels category. [[User:Yellowantphil|Yellowantphil]] 04:51, 16 September 2011 (GMT)&lt;br /&gt;
: I decided against this because there is a link to the game&#039;s page in the category intro at the top of the page.  It seemed unnecessary having another link in amongst all the other pages.  This was also because the game page was really only meant to be a summary, there wasn&#039;t supposed to be a huge amount of detail on it, only links to other pages with the detail (which then would appear in the category list.)  I would imagine that, eventually, [[Wacky Wheels]] would be tweaked to move a lot of the content onto subpages. -- [[User:Malvineous|Malvineous]] 12:58, 16 September 2011 (GMT)&lt;br /&gt;
&lt;br /&gt;
== Scope of the wiki ==&lt;br /&gt;
&lt;br /&gt;
I don’t know how extensive you want the information to be on ModdingWiki... I added a few lists of audio and graphics files a while ago, and there will probably be other information that I’ll find out that’s potentially helpful for level editing but not directly related to it. I can move some information to my website if it starts to become out of scope for your wiki. I also sometimes end up documenting everything imaginable... there’s some minutiae on my website and possibly on your wiki that I ought to go through and delete. [[User:Yellowantphil|Yellowantphil]] 05:28, 10 October 2011 (GMT)&lt;br /&gt;
&lt;br /&gt;
:Hmm, that&#039;s a difficult one - I&#039;m always in favour of documenting more rather than less.  Generally speaking if it&#039;s related to a game and it would help either a programmer writing a utility or a someone trying to change a game manually then it should be documented.  About the only thing that comes to mind that&#039;s over documenting is when some small calculation is expressed in a couple of different programming languages, but I&#039;ve left that in so people can just copy it rather than trying to figure it out from the text.  But the [[Wacky Wheels]] page is probably the gold standard for what all wiki pages should look like :-)  Do you have anything in particular you&#039;re unsure of whether it would fit here? -- [[User:Malvineous|Malvineous]] 10:07, 10 October 2011 (GMT)&lt;br /&gt;
&lt;br /&gt;
::I was mainly thinking of the list of VOC files on [[Wacky Wheels Music and Sound Effects]] and the list of &amp;lt;tt&amp;gt;*.sp&amp;lt;/tt&amp;gt; files on [[Wacky Wheels Graphics Formats]]. I have an expanded list of the &amp;lt;tt&amp;gt;*.sp&amp;lt;/tt&amp;gt; files on my computer but it isn’t finished yet. I guess there isn’t all that much more Wacky Wheels information to be added to this wiki though. There is still some modding information on my website that ought to be moved over here, so that would take up another page or two. I’ve been lazy about doing Wacky Wheels stuff lately, but I might find some time for it this weekend.&lt;br /&gt;
&lt;br /&gt;
::By the way, I guess that guy from Cascadia Games emailed you. It’s pretty interesting that WW might become an iPhone app. He told me that he was going to be using his own game engine, which sounds a lot easier than trying to get a hold of the WW source code and porting it. —[[User:Yellowantphil|Yellowantphil]] 16:46, 15 October 2011 (GMT)&lt;br /&gt;
&lt;br /&gt;
::: I was going to say the list of VOCs might be overkill, but then the list of .sp files might be useful.  To be honest, it&#039;s the sort of thing that you could probably omit if you were feeling lazy, but likewise I don&#039;t mind at all if you choose to include it, so since it&#039;s already there I&#039;m happy to keep it.&lt;br /&gt;
&lt;br /&gt;
::: Yes I did get an e-mail from Cascadia, I was going to pass along your details but it sounds like you&#039;re already aware of it!  Using their own engine might make it a bit smoother than the original, as the jerkiness of turning is my only criticism of the game. -- [[User:Malvineous|Malvineous]] 00:14, 16 October 2011 (GMT)&lt;br /&gt;
&lt;br /&gt;
== Wacky Wheels ==&lt;br /&gt;
&lt;br /&gt;
Basically all of the WW modding information from my website is here now. I moved one page when I realized it should probably be capitalized to match the rest of the pages on this site... you can delete the redirect at [[Wacky Wheels high score files]] if you want to.&lt;br /&gt;
&lt;br /&gt;
Now, I need to remove most of the modding information from my website and refer people here. Then we’ll have reached the glorious future where all WW modding information is in one place. I’m going to keep those two text files of notes on my website though—the information in them is disorganized and I think not 100% accurate, but they might have some information that isn’t here yet.&lt;br /&gt;
&lt;br /&gt;
By the way, how’s Camoto going? I’m planning to use it to make a new WW level, but I won’t have time for it for a few more months. —[[User:Yellowantphil|Yellowantphil]]&lt;br /&gt;
&lt;br /&gt;
: Sounds good!  Thanks for all the effort you&#039;ve put in by moving it across.  I think Wacky Wheels is now the most completely documented game on the wiki!  Also can&#039;t hurt leaving your own info up - sometimes it&#039;s nice to go back to the original source if something is unclear.  Camoto&#039;s going well, but unfortunately I haven&#039;t had much time to work on it over the last few weeks.  You probably won&#039;t be able to make much of a level until I add in the ability to select a tile from the tileset, but that&#039;s in progress and hopefully will be ready by the time you are!  Keep me posted when you do start your level(s?) -- [[User:Malvineous|Malvineous]] 12:22, 2 February 2012 (GMT)&lt;br /&gt;
&lt;br /&gt;
::Well, as I was reading some of the information on my website, I noticed that it isn’t written very well. I wrote those pages back when I had very little experience programming. Anyway, I’m planning to redesign my website soon, and this will save me from having to rewrite a few of those pages.&lt;br /&gt;
&lt;br /&gt;
::The tile editor in Camoto as it is now is still certainly useful—I can add new tile types to a level using a binary editor and then move them around in Camoto. I think that it shouldn’t be too hard to make a new WW level using the Gimp and Camoto plus some binary editing. I recall having some problems with the route editor for the computer players, but I didn’t look into it at the time—I’ll let you know when I’m working with Camoto again, and I’ll try to come up with some useful bug reports or fixes if I run into problems. —[[User:Yellowantphil|Yellowantphil]] 14:06, 2 February 2012 (GMT)&lt;br /&gt;
&lt;br /&gt;
== Catacomb ==&lt;br /&gt;
&lt;br /&gt;
Hey [[User:Malvineous|Malvineous]], do you know anyone who has properly read the [[Inverse_Frequency_Sound_format|Inverse Sound Frequency]] file format and got the sound playing? I&#039;m struggling with some fine details in my game. Sounds play near what they should sound like, but the sound quality is all crackly and some sounds play totally incorrect. I followed a basic [http://web.archive.org/web/20000818033701/http://www.dd.chalmers.se/~f98anga/projects/keen/sounds2raw.c code sample] by Anders Gavare. Does your tool support this? Interested in helping me figure this out? My current code is available at [https://code.google.com/p/cataclone/source/browse/trunk/src/catacomb/catacomb_sound.c catacomb_sound.c] - [[User:Eros|Eros]] 11:57, 5 May 2012 (GMT)&lt;br /&gt;
: Should this be moved to my talk page? - [[User:Eros|Eros]] 11:59, 5 May 2012 (GMT)&lt;/div&gt;</summary>
		<author><name>Eros</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=User_talk:Malvineous&amp;diff=4238</id>
		<title>User talk:Malvineous</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=User_talk:Malvineous&amp;diff=4238"/>
		<updated>2012-05-05T11:57:21Z</updated>

		<summary type="html">&lt;p&gt;Eros: Inverse Sound Frequency help?&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Wolfenstein 3D -&amp;gt; Wolfenstein 3-D ==&lt;br /&gt;
I&#039;ve corrected the infamous 3D tyop in the names of several Wolf3D-related pages; can you please delete the following ones?&lt;br /&gt;
&lt;br /&gt;
[[:Category:Wolfenstein 3D]] -&amp;gt; Superseded by [[:Category:Wolfenstein 3-D]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[:Image:Wolfenstein_3D.png]] -&amp;gt; Superseded by [[:Image:Wolfenstein_3-D.png]]&lt;br /&gt;
&lt;br /&gt;
Thanks :) --De Zeurkous (zeurkous@zeurcomp.nichten.info), Thu Nov 22 08:18:42 UTC 2007&lt;br /&gt;
&lt;br /&gt;
:Haha, you&#039;ve certainly been busy.  Don&#039;t forget that this wiki isn&#039;t meant to be an encyclopaedia of the games, its main purpose is documenting the file formats and editing tools that can be used with the games, as opposed to how the games behave without any mods, or what they might be called if you forget to change the title screen :-) -- [[User:Malvineous|Malvineous]] 11:14, 22 November 2007 (GMT)&lt;br /&gt;
&lt;br /&gt;
::Nah, I haven&#039;t forgotten. As we&#039;re reinventing the wheel for a semi-virgin wiki, the naming and something static like the cheats seemed like a good place to start :) --De Zeurkous (zeurkous@nichten.info), Thu Nov 22 12:20:04 UTC 2007&lt;br /&gt;
&lt;br /&gt;
== Jill of the Jungle palette ==&lt;br /&gt;
&lt;br /&gt;
Hi, I&#039;m currently working on a level viewer for [[Jill of the Jungle]] (maybe an editor later on). Some of the information I found here has been very useful, but there&#039;s one thing I&#039;m a bit stuck on. On the [[SHA Format]] page it says:&lt;br /&gt;
:&#039;&#039;Each array item contains 4 unsigned bytes, representing CGA, EGA and VGA, respectivley, and then a null value. [...] Each byte maps to the index of a colour in the palette. If there are no colours required, the tile set uses the default colours.&#039;&#039;&lt;br /&gt;
However, it doesn&#039;t say anywhere where the palette can be found. Is it stored in the EXE file? I hope you can help me on this :)&lt;br /&gt;
&lt;br /&gt;
Regards, [[User:Spinal|Spinal]] 13:00, 2 March 2008 (GMT)&lt;br /&gt;
&lt;br /&gt;
:Unfortunately I didn&#039;t write the JotJ SHA page, and I haven&#039;t yet had the time to figure this out.  For Xargon I&#039;ve taken the quick and dirty route and used a screenshot from within DOSBox as the source of the palette, until I can figure out where the palette is located.  If you find this out, don&#039;t forget to update the page! :-) -- [[User:Malvineous|Malvineous]] 22:02, 2 March 2008 (GMT)&lt;br /&gt;
&lt;br /&gt;
::Hey Spinal, sorry, I wrote the [[SHA Format]] page, so that was probably my bad. I wasn&#039;t able to find the palette either. I assume it&#039;s in the .EXE, however I spent a fair bit of time manually mapping it using a Wombat tool (http://www.szevvy.com/node/3). I was also writing a level viewer (initally in XHTML which turned out to be too slow, so then I moved to Flash 9). I tried to email you my findings, but the email bounced. I&#039;m not sure if they were 100% accurat, which is why I never added them to the documentation.&lt;br /&gt;
&lt;br /&gt;
::Hey Malvineous, it seems the Jill - [[DMA Format]] page has been removed. Do you have a log of what happened to it? I&#039;m sure it existed at some point.&lt;br /&gt;
&lt;br /&gt;
::- [[User:dheim|Daniel]] 20:00, 5 March 2008&lt;br /&gt;
&lt;br /&gt;
:::I don&#039;t ever remember seeing a DMA page - certainly there&#039;s nothing in the wiki logs about it being deleted or renamed.  Maybe you started working on it but never got around to saving it?  Or is it one of the Xargon pages that shares the same format as Jill?  (by the way, you can type &amp;lt;nowiki&amp;gt;~~~~&amp;lt;/nowiki&amp;gt; to automatically put in the signature in these messages.) -- [[User:Malvineous|Malvineous]] 11:28, 5 March 2008 (GMT)&lt;br /&gt;
&lt;br /&gt;
::::Sorry, it must have been the stuff in the [[SHA Format]] page that I was thinking of. I may have added the link to the [[DMA Format]] page, and never expanded on it. - [[User:Dheim|Daniel]] 02:46, 6 March 2008 (GMT)&lt;br /&gt;
&lt;br /&gt;
:::::Hi guys. Sorry for the mistake, I mixed up the authors of the SHA and level formats. I&#039;ve written a level viewer in PHP the last week, by using static images instead of getting them from the actual files. This causes some problems for episode 2, which uses a different palette, but besides that it works great :) When everything is done I&#039;ll upload the maps to my server and the tile/object lists to this wiki.&lt;br /&gt;
:::::@Daniel: strange that it bounced, I confirmed my address so it should be working fine... You can mail it to spinal -at- zanderz -dot- net. Also, I saw on your Wombat page that you &amp;quot;have a vague idea of how to do&amp;quot; [[Hocus Pocus]]. Could you share your findings on this wiki? I&#039;d love to make maps, or even a level viewer/editor for that game :) -- [[User:Spinal|Spinal]] 00:32, 8 March 2008 (GMT)&lt;br /&gt;
:Okay, with help of [[User:Dheim|Daniel]] who send me the palette I found it! I&#039;ll put my findings on [[Jill of the Jungle palette]]. -- [[User:Spinal|Spinal]] 15:36, 13 March 2008 (GMT)&lt;br /&gt;
&lt;br /&gt;
== Halloween Harry/Alien Carnage ==&lt;br /&gt;
&lt;br /&gt;
Hi Malvineous. Thanks for your edits on the GMF article! I notice you mentioned there exist versions of the game which don&#039;t require exploding a BNK to get at the game data. What does the directory structure look like for the version you have? I&#039;m working on a map viewer (which will become a map editor at some point) and would like it to be able to work on whatever versions are out there. Thanks for any info. -[[User:Duckthing|Duckthing]] 04:41, 11 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
: Hi Duckthing - no worries, Halloween Harry has long been an interest of mine, but my map editor sadly needs a lot more work before I can begin reverse engineering more file formats so I&#039;m glad you&#039;ve made a start!  AFAIK technically Halloween Harry has no compression, but for whatever reason (probably listed in the Apogee FAQ) they decided to swap episodes 1 and 3, compress the BNK file and then re-release it under the name Alien Carnage.  You can download all available versions (including registered versions since the game was released as freeware in 2007) from [http://www.classicdosgames.com/game/Alien_Carnage.html RGB Classic Games].  BTW not sure if you noticed but I also posted a couple of things on the GMF article&#039;s talk/discussion page. -- [[User:Malvineous|Malvineous]] 06:08, 11 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
:: Thank you! Working with the uncompressed version will keep things less complicated. I did notice the GMF discussion you added, but haven&#039;t had a chance to really go through it yet. -- [[User:Duckthing|Duckthing]] 06:41, 11 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
::: No worries.  If you&#039;re running Linux or MacOSX you should be able to compile [[Camoto|libgamearchive]] which will let you copy files in and out of the BNK files.  This is a library so it&#039;s also possible to use it in your own program for accessing and editing the map files while they&#039;re still inside the BNK, for instance.  (BTW the &#039;minor&#039; tickbox should only be used when the edit does not affect the information on the page - e.g. fixing a typo or a broken URL.  If you are changing the actual content on a page it is never a minor edit!) -- [[User:Malvineous|Malvineous]] 07:51, 11 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Dangerous Dave ==&lt;br /&gt;
&lt;br /&gt;
Working on this, does anyone have any info on the formats? The EGA graphics are 84KB and external, but CGA and VGA graphics unrelated to them are in the 174KB executable, apparently uncompressed, I don&#039;t know how this is possible. I&#039;ve found the levels and partially reverse engineered the format (The first 1000 bytes, a 100x10 array of tiles.) but each level is followed by ~280 bytes of variable and unknown data I assume is sprites. I have a list of internal files in the executable, looks like most of it is non-game code. Any help would be appreciated. -[[User:Levellass|Endian? What are you on about?]] 06:03, 12 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
: Hmm, interesting.  All I can suggest for the levels is - as you&#039;re probably already familiar with - changing the values in a hex editor then loading the game to see what happens.  I would suspect that all the graphics would be in a similar format, so if there are any headers or structures used in the EGA graphics files perhaps they&#039;re duplicated for CGA/VGA?  Also John Romero seems pretty accessible, perhaps you could ask him directly?  Failing that, randomly writing data into the .exe until the images change could be used as a last resort! -- [[User:Malvineous|Malvineous]] 12:09, 12 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
: Ha, that was easier than I expected - uncompressed VGA data is easy to find with a good hex editor ;-)  [http://www.shikadi.net/pics/ddave-vga-hexdump.png This looks like it] -- [[User:Malvineous|Malvineous]] 12:17, 12 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
: Ok that was only the menu graphics.  At offset 0xC629 there&#039;s some sort of offset table which looks very similar to the contents of EGADAVE.DAV but there are extra bytes dotted all over the place - perhaps it&#039;s RLE encoded?  Actually just before that there&#039;s the number 0x6CAA.  If you go a bit less than 0x6CAA bytes after this you end up with another table, which to me suggests that 0x6CAA is the decompressed size of that first table. -- [[User:Malvineous|Malvineous]] 13:01, 12 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
:If I remember it correctly, the VGA sprites and tiles are RLE compressed and it&#039;s not too hard to decompress them. The positions of the enemies in the levels on the other hand are still a mystery to me. [[User:Calvero|Calvero]] 20:43, 12 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
: Looking at the levels, which directly follow the VGA palette, they seem to contain 256 bytes of header data, then the 100x10 tiles, then eight bytes of lead-out data.  Then the next level&#039;s 256 bytes of header, 100x10 tiles, then eight bytes of lead-out.  Although I say &amp;quot;level&amp;quot;, the first &amp;quot;level&amp;quot; seems to contain both level 1 and 2, and this seems to be the way it works in the game - in some levels you can see through to others.  I&#039;m not sure what the 256 bytes of header data are for, but some levels have FF FF 00 00 repeated which seems to indicate two uint16 fields which are blanked out for those levels. -- [[User:Malvineous|Malvineous]] 13:15, 13 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
::First up, levels; where does level 1 start? It&#039;s possible I&#039;m reading the start of a level as the previous level&#039;s end, I looked for the start of tile data, which I assumed, like Keen 1, would be the level start.&lt;br /&gt;
&lt;br /&gt;
::Next, palette; I&#039;m assuming, as you said, it is located just before the level data?&lt;br /&gt;
&lt;br /&gt;
::There is VGA and CGA graphics in the executable, plus headers, but the bulk of graphics for CGA and VGA I haven&#039;t been able to locate. If the data is RLE compressed I should think it would use either Keen 1-3 fullscreen or Jazz Jackrabbit tile RLE, both of which I know well. I&#039;ll look into both of these options, cheers! -[[User:Levellass|Endian? What are you on about?]] 12:03, 20 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
:::I&#039;ve found the VGA and CGA data for the menu graphics.  It looks like the CGA data is stored in a series of 1-bit-per-pixel (monochrome) images.  Or it could be EGA data with the planes split out (e.g. red plane for all images, then green plane for all images, etc.)  I think I found three planes which means it&#039;s probably EGA, as CGA would have a max of two planes.  I&#039;ve also found the font graphics, this looks like 4bpp/16 colour EGA data.  Haven&#039;t seen level graphics yet.  I&#039;ve successfully modded the levels with a hex editor (putting the jetpack everywhere) so now I&#039;ve finally looked at all the levels!  The creatures are definitely not stored in the 100x10 tile data.  Putting random bytes in there revealed that the values are indices into the image files, because if you put the value in for fire it will animate, and the following three or so values show up as still frames from the fire animation.&lt;br /&gt;
&lt;br /&gt;
:::The VGA palette starts at 0x26B0A (I updated the main DDave page with this) + 768 bytes leads straight onto the start of level 1 at 0x26E0A.  So at 0x26E0A there are 256 bytes of data, then 100x10 tiles, then 24 bytes of footer data.  Some of this data (perhaps footer data) might be the level start coordinates, because Dave doesn&#039;t always start the level at the same place (e.g. the warp level when you climb the tree on level 5 and jump off the edge of the screen.) -- [[User:Malvineous|Malvineous]] 12:24, 20 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
:::I think I&#039;ve found all the files so far, I&#039;ve updated [[Dangerous Dave]] with the offsets of the files, including what appears to be CGA and VGA tiles.  I&#039;m not sure what sort of format they&#039;re in though, it looks like they might be compressed (and so the offsets in that list might be off by ~4, as I may have cut off the decompressed-size field.)  I&#039;ve also updated the map format page, I think it&#039;s pretty much fully reverse engineered now. -- [[User:Malvineous|Malvineous]] 05:13, 21 December 2010 (GMT)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Noahs Ark 3D and IMFs ==&lt;br /&gt;
&lt;br /&gt;
Been poking around Noah&#039;s Ark 3D, an adaption of the Wolfenstein game and found a few interesting things which I&#039;m hoping to confirm.&lt;br /&gt;
&lt;br /&gt;
First, the game uses MID files, not IMF files for music, second, the MIDI files have an extra word at the start of the file giving the file length. Third, the code uses the first word of the midi file as the length of data to read from the file and put into memory to play. After poking around a bit in Wolfenstein and Keen I believe this is the same with IMF files, that is, ALL IMF files are type 0 as it were and the type 1s are read just like type 0s by the games (The first word is read as the amount of IMF data to copy into memory to play, this is then read as type 0.) I&#039;m not quite sure what this does for the two types since type 1 is would essentially be a type 0 with a header and footer that are part of the AUDIO.xxx format, much like PC\adlib sounds can have the huffman lengths at the start. Are there any games that use &#039;individual&#039; type 1 IMFs (Even if included as part of a group file. All I&#039;ve seen are games like cosmo, where non-AUDIO IMFs are type 0.)&lt;br /&gt;
&lt;br /&gt;
Should there be a Noah&#039;s Ark 3D page and should we add the midi note to the AUDIO format page? It seems that the format can hold any type of music file the game can read, not just IMFs.  -- Levellass&lt;br /&gt;
&lt;br /&gt;
: Yes it is known that the type-1 header might really be part of the AUDIO.xxx format but alas there were many type-1 files floating around the place (incorrectly extracted, you could argue) before this was realised, so the format variant is here to stay.  It does have some advantages though (like tagging files with the song title) but I&#039;m not sure whether anyone has figured out definitively whether the header (and footer, in the case of the Wolf3D files) belongs to the IMF or the AUDIO file.  I guess you&#039;d have to browse the game source code and see how the game uses the data to know for sure.&lt;br /&gt;
&lt;br /&gt;
: As far as the MIDI goes, I believe the AUDIO.xxx file is just a container file like any other, capable of supporting any data at all.  It&#039;s up to the game to decide how to use it.  If anything this makes me think it would fit better if the AUDIO.xxx article was merely documenting the structure, with links to actual audio formats like PC SFX, Adlib SFX, IMF and MIDI and notes about which games make use of which formats.&lt;br /&gt;
&lt;br /&gt;
: Oh and yes, by all means create a page for the new game. -- [[User:Malvineous|Malvineous]] 08:41, 3 February 2011 (GMT)&lt;br /&gt;
&lt;br /&gt;
== Sound Files category ==&lt;br /&gt;
&lt;br /&gt;
I don’t know why there’s a Sound Files category and also an Audio Files category... it seems redundant. I left those categories the way they are though.&lt;br /&gt;
&lt;br /&gt;
Also, the [[File format data types]] page needs some signed ints, but I didn’t know what naming convention you wanted to use. I described something as an [[INT16LE]] on [[BMC Format]]. [[User:Yellowantphil|Yellowantphil]] 20:12, 11 September 2011 (GMT)&lt;br /&gt;
&lt;br /&gt;
: Not sure about the Sound vs Audio - I use the term &#039;audio&#039; to mean both sound and music, but you&#039;re right, if there are separate sound and music categories we don&#039;t really need an audio one as well.  Feel free to update.  [[INT16LE]] is perfectly fine too!  I added a note to the data types page. -- [[User:Malvineous|Malvineous]] 22:30, 11 September 2011 (GMT)&lt;br /&gt;
&lt;br /&gt;
== GamePage template ==&lt;br /&gt;
&lt;br /&gt;
Should the GamePage template add the page to its own category? It seems a little odd that [[Wacky Wheels]] is not in the Wacky Wheels category. [[User:Yellowantphil|Yellowantphil]] 04:51, 16 September 2011 (GMT)&lt;br /&gt;
: I decided against this because there is a link to the game&#039;s page in the category intro at the top of the page.  It seemed unnecessary having another link in amongst all the other pages.  This was also because the game page was really only meant to be a summary, there wasn&#039;t supposed to be a huge amount of detail on it, only links to other pages with the detail (which then would appear in the category list.)  I would imagine that, eventually, [[Wacky Wheels]] would be tweaked to move a lot of the content onto subpages. -- [[User:Malvineous|Malvineous]] 12:58, 16 September 2011 (GMT)&lt;br /&gt;
&lt;br /&gt;
== Scope of the wiki ==&lt;br /&gt;
&lt;br /&gt;
I don’t know how extensive you want the information to be on ModdingWiki... I added a few lists of audio and graphics files a while ago, and there will probably be other information that I’ll find out that’s potentially helpful for level editing but not directly related to it. I can move some information to my website if it starts to become out of scope for your wiki. I also sometimes end up documenting everything imaginable... there’s some minutiae on my website and possibly on your wiki that I ought to go through and delete. [[User:Yellowantphil|Yellowantphil]] 05:28, 10 October 2011 (GMT)&lt;br /&gt;
&lt;br /&gt;
:Hmm, that&#039;s a difficult one - I&#039;m always in favour of documenting more rather than less.  Generally speaking if it&#039;s related to a game and it would help either a programmer writing a utility or a someone trying to change a game manually then it should be documented.  About the only thing that comes to mind that&#039;s over documenting is when some small calculation is expressed in a couple of different programming languages, but I&#039;ve left that in so people can just copy it rather than trying to figure it out from the text.  But the [[Wacky Wheels]] page is probably the gold standard for what all wiki pages should look like :-)  Do you have anything in particular you&#039;re unsure of whether it would fit here? -- [[User:Malvineous|Malvineous]] 10:07, 10 October 2011 (GMT)&lt;br /&gt;
&lt;br /&gt;
::I was mainly thinking of the list of VOC files on [[Wacky Wheels Music and Sound Effects]] and the list of &amp;lt;tt&amp;gt;*.sp&amp;lt;/tt&amp;gt; files on [[Wacky Wheels Graphics Formats]]. I have an expanded list of the &amp;lt;tt&amp;gt;*.sp&amp;lt;/tt&amp;gt; files on my computer but it isn’t finished yet. I guess there isn’t all that much more Wacky Wheels information to be added to this wiki though. There is still some modding information on my website that ought to be moved over here, so that would take up another page or two. I’ve been lazy about doing Wacky Wheels stuff lately, but I might find some time for it this weekend.&lt;br /&gt;
&lt;br /&gt;
::By the way, I guess that guy from Cascadia Games emailed you. It’s pretty interesting that WW might become an iPhone app. He told me that he was going to be using his own game engine, which sounds a lot easier than trying to get a hold of the WW source code and porting it. —[[User:Yellowantphil|Yellowantphil]] 16:46, 15 October 2011 (GMT)&lt;br /&gt;
&lt;br /&gt;
::: I was going to say the list of VOCs might be overkill, but then the list of .sp files might be useful.  To be honest, it&#039;s the sort of thing that you could probably omit if you were feeling lazy, but likewise I don&#039;t mind at all if you choose to include it, so since it&#039;s already there I&#039;m happy to keep it.&lt;br /&gt;
&lt;br /&gt;
::: Yes I did get an e-mail from Cascadia, I was going to pass along your details but it sounds like you&#039;re already aware of it!  Using their own engine might make it a bit smoother than the original, as the jerkiness of turning is my only criticism of the game. -- [[User:Malvineous|Malvineous]] 00:14, 16 October 2011 (GMT)&lt;br /&gt;
&lt;br /&gt;
== Wacky Wheels ==&lt;br /&gt;
&lt;br /&gt;
Basically all of the WW modding information from my website is here now. I moved one page when I realized it should probably be capitalized to match the rest of the pages on this site... you can delete the redirect at [[Wacky Wheels high score files]] if you want to.&lt;br /&gt;
&lt;br /&gt;
Now, I need to remove most of the modding information from my website and refer people here. Then we’ll have reached the glorious future where all WW modding information is in one place. I’m going to keep those two text files of notes on my website though—the information in them is disorganized and I think not 100% accurate, but they might have some information that isn’t here yet.&lt;br /&gt;
&lt;br /&gt;
By the way, how’s Camoto going? I’m planning to use it to make a new WW level, but I won’t have time for it for a few more months. —[[User:Yellowantphil|Yellowantphil]]&lt;br /&gt;
&lt;br /&gt;
: Sounds good!  Thanks for all the effort you&#039;ve put in by moving it across.  I think Wacky Wheels is now the most completely documented game on the wiki!  Also can&#039;t hurt leaving your own info up - sometimes it&#039;s nice to go back to the original source if something is unclear.  Camoto&#039;s going well, but unfortunately I haven&#039;t had much time to work on it over the last few weeks.  You probably won&#039;t be able to make much of a level until I add in the ability to select a tile from the tileset, but that&#039;s in progress and hopefully will be ready by the time you are!  Keep me posted when you do start your level(s?) -- [[User:Malvineous|Malvineous]] 12:22, 2 February 2012 (GMT)&lt;br /&gt;
&lt;br /&gt;
::Well, as I was reading some of the information on my website, I noticed that it isn’t written very well. I wrote those pages back when I had very little experience programming. Anyway, I’m planning to redesign my website soon, and this will save me from having to rewrite a few of those pages.&lt;br /&gt;
&lt;br /&gt;
::The tile editor in Camoto as it is now is still certainly useful—I can add new tile types to a level using a binary editor and then move them around in Camoto. I think that it shouldn’t be too hard to make a new WW level using the Gimp and Camoto plus some binary editing. I recall having some problems with the route editor for the computer players, but I didn’t look into it at the time—I’ll let you know when I’m working with Camoto again, and I’ll try to come up with some useful bug reports or fixes if I run into problems. —[[User:Yellowantphil|Yellowantphil]] 14:06, 2 February 2012 (GMT)&lt;br /&gt;
&lt;br /&gt;
== Catacomb ==&lt;br /&gt;
&lt;br /&gt;
Hey [[User:Malvineous|Malvineous]], do you know anyone who has properly read the [[Inverse_Frequency_Sound_format|Inverse Sound Frequency]] file format and got the sound playing? I&#039;m struggling with some fine details in my game. Sounds play near what they should sound like, but the sound quality is all crackly and some sounds play totally incorrect. I followed a basic [http://web.archive.org/web/20000818033701/http://www.dd.chalmers.se/~f98anga/projects/keen/sounds2raw.c code sample] by Anders Gavare. Does your tool support this? Interested in helping me figure this out? My current code is available at [https://code.google.com/p/cataclone/source/browse/trunk/src/catacomb/catacomb_sound.c catacomb_sound.c] - [[User:Eros|Eros]] 11:57, 5 May 2012 (GMT)&lt;/div&gt;</summary>
		<author><name>Eros</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=User_talk:Eros&amp;diff=4237</id>
		<title>User talk:Eros</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=User_talk:Eros&amp;diff=4237"/>
		<updated>2012-05-05T11:05:14Z</updated>

		<summary type="html">&lt;p&gt;Eros: Ok&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hi Eros - just a quick request - can you leave the section headings as normal case?  You keep converting them into title case, which makes them different to all the other pages in the wiki :-) -- [[User:Malvineous|Malvineous]] 11:03, 5 May 2012 (GMT)&lt;br /&gt;
: Yeah, realized that too after looking at some Wikipedia pages. I&#039;ll stop now. -- [[User:Eros|Eros]] 11:05, 5 May 2012 (GMT)&lt;/div&gt;</summary>
		<author><name>Eros</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Inverse_Frequency_Sound_format&amp;diff=4198</id>
		<title>Inverse Frequency Sound format</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Inverse_Frequency_Sound_format&amp;diff=4198"/>
		<updated>2012-05-05T09:21:39Z</updated>

		<summary type="html">&lt;p&gt;Eros: Yes, from the start of the file.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The inverse frequency sound format is the format used by Apogee/id Software in many of their games for the PC sounds. It is named because the bulk of the data is stored as &#039;inverse frequency&#039; values (the higher the value, the lower the tone it produces.) Most commonly this is stored in a &amp;lt;tt&amp;gt;SOUNDS.xxx&amp;lt;/tt&amp;gt; file, though it may also be stored internally in the game executable.&lt;br /&gt;
&lt;br /&gt;
Later games, such as [[Wolfenstein 3-D]] use a modified form of this for their (less important) PC speaker and adlib sounds.&lt;br /&gt;
&lt;br /&gt;
== File format ==&lt;br /&gt;
&lt;br /&gt;
The file is divided into three sections, 16 bytes of header, a list of sound names and the actual sound data. The start of the sound data should thus be &amp;lt;code&amp;gt;(count + 1) * 16&amp;lt;/code&amp;gt; bytes from the file start.&lt;br /&gt;
&lt;br /&gt;
=== Header ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Data type !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[char]][4] || signature || &amp;quot;SND&amp;quot; + terminating null.  Indicates the start of a sound file, whereas &amp;quot;SPK&amp;quot; + $00 indicates the start of the older &#039;speaker&#039; format, which has very few differences.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || size || Size of file&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || unknown || Usually 0x003C, but doesn&#039;t appear to do anything.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || count || Number of sounds. For SPK files this is blank as the number of sounds is always 63.&lt;br /&gt;
|-&lt;br /&gt;
| [[BYTE]][6] || pad || Nulls to pad structure up to 16 bytes.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Sound definitions ===&lt;br /&gt;
&lt;br /&gt;
This structure is repeated once per sound.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Data type !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || offset || Offset of the sound from the beginning of the file.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || priority || Whether or not sound will be interrupted by another sound if said sound starts playing while the first is. Sounds can only be interrupted by sounds that have an equal or higher value of this. 255 is max, 0 is inadvisable.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || flags || If a sound is a &#039;placeholder&#039; to be ignored, this is 1, if it is a proper sound it is 8.&lt;br /&gt;
|-&lt;br /&gt;
| [[char]][12] || name || Null-padded sound name&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Sound data ===&lt;br /&gt;
&lt;br /&gt;
Sound data is divided into words (UINT16LE), with the word value being inversely proportional to the sound frequency. Each word is around 1/64th of a second of tone and most files contain a few seconds of sound. The value $FFFF signals the end of a sound and most values are between the range $0100-$5000. $0000 is silence.&lt;br /&gt;
&lt;br /&gt;
Later games use a similar format for PC and Adlib sounds, the sound data is in bytes with values of 0-255, the loss of fine-tuning being attributable to the lesser role of PC sounds and the Adlib format. The [[AudioT Format]] also has a totally different way of reading the sounds, and contains music.&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
This format has been reverse engineered many times, most often in the [[Commander Keen 1-3]] fan community. Probably first by [http://web.archive.org/web/20000815235203/http://www.dd.chalmers.se/~f98anga/projects/keen/ Anders Gavare].&lt;br /&gt;
&lt;br /&gt;
[[Category:All file formats]]&lt;br /&gt;
[[Category:Audio Files]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Catacomb]]&lt;br /&gt;
[[Category:Commander Keen 1-3]]&lt;br /&gt;
[[Category:Cosmo&#039;s Cosmic Adventures]]&lt;br /&gt;
[[Category:Dangerous Dave]]&lt;br /&gt;
[[Category:Dangerous Dave in Copyright Infringement]]&lt;br /&gt;
[[Category:Dangerous Dave 2]]&lt;br /&gt;
[[Category:Duke Nukem]]&lt;br /&gt;
[[Category:Duke Nukem II]]&lt;br /&gt;
[[Category:Hovertank 3-D]]&lt;br /&gt;
[[Category:Math Rescue]]&lt;br /&gt;
[[Category:Major Stryker]]&lt;br /&gt;
[[Category:Monster Bash]]&lt;br /&gt;
[[Category:Paragon]] &amp;lt;!-- aka Street Ball --&amp;gt;&lt;br /&gt;
[[Category:Pickle Wars]]&lt;br /&gt;
[[Category:Realms of Chaos]] &amp;lt;!-- beta version only --&amp;gt;&lt;br /&gt;
[[Category:Rescue Rover]]&lt;br /&gt;
[[Category:Shadow Knights]]&lt;br /&gt;
[[Category:Slordax]]&lt;br /&gt;
[[Category:Word Rescue]]&lt;br /&gt;
[[Category:Xenopods]]&lt;/div&gt;</summary>
		<author><name>Eros</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=BNK_Format_(Halloween_Harry)&amp;diff=4196</id>
		<title>BNK Format (Halloween Harry)</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=BNK_Format_(Halloween_Harry)&amp;diff=4196"/>
		<updated>2012-05-05T09:10:57Z</updated>

		<summary type="html">&lt;p&gt;Eros: Added links to data types.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Stub}}&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;BNK (Bank) group format&#039;&#039;&#039; is the format used by [[Halloween Harry]] to store a number of related game files. The format is trivial, being a collection of concurrent file chunks. Each BNK file has an associated FAT (Fila Allocation Table) file that provides quick access to the filenames, offset in the BNK file and size of the files stored in the BNK file. The FAT file however is usually not necessary to read data from the BNK file, all required information can be obtained by simply scanning said BNK file.&lt;br /&gt;
&lt;br /&gt;
Files in the BNK file may or may not be compressed. This depends on what version of the BNK format is being used.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== File format ==&lt;br /&gt;
&lt;br /&gt;
=== Signature ===&lt;br /&gt;
&lt;br /&gt;
Each &#039;&#039;file entry&#039;&#039; begins with a signature, so the very first file entry&#039;s signature can be used to verify the main file in in .BNK format.  This means at offset zero, there should be a character of code 0x04, followed by the four characters &amp;quot;-ID-&amp;quot; (see &#039;&#039;file entry&#039;&#039; below for more details.)&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Data type!!Description&lt;br /&gt;
|-&lt;br /&gt;
|[[BYTE]] cSignature[5]||&amp;quot;\x04-ID-&amp;quot; (not NULL-terminated)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note that there are two versions of the .BNK format - the original [[Halloween Harry]] version (with no compression) and the later [[Alien Carnage]] version (with compression.)  The version can be detected by using the following method:&lt;br /&gt;
&lt;br /&gt;
# Read in the first file header (see &#039;&#039;file entry&#039;&#039; below), in Halloween Harry format (i.e. pretend the &#039;&#039;iDecompressedSize&#039;&#039; field was not present.)&lt;br /&gt;
# Use that information to jump to the second file within the main .BNK file.&lt;br /&gt;
# Check for the &amp;quot;-ID-&amp;quot; signature at the start of the second file entry.  If it&#039;s there (at the expected offset), then it&#039;s a non-compressed Halloween Harry .BNK file.&lt;br /&gt;
# If the &amp;quot;-ID-&amp;quot; signature is missing, try again four bytes further in (making up for the &#039;&#039;iDecompressedSize&#039;&#039; field that we ignored in the first step.)&lt;br /&gt;
# If the &amp;quot;-ID-&amp;quot; signature is now present, it&#039;s a compressed Alien Carnage .BNK file.&lt;br /&gt;
# If the &amp;quot;-ID-&amp;quot; signature still can&#039;t be found, it&#039;s not a valid .BNK file :-)&lt;br /&gt;
# It is also possible to determine the type by looking at the *.FAT file length. A length divisible by 21 is HH format, one divisible by 25 is AC format.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== FAT format ===&lt;br /&gt;
&lt;br /&gt;
An external file (with the same name as the BNK file but with a .FAT extension) stores a summary of the files in the BNK file.  It also stores file offsets for quick access.  This file is not necessary to read the BNK archive (since the filenames are stored in both places) however it can provide a faster alternative for listing files compared to scanning through the entire BNK file.  Of course if a BNK file is to be modified, then the FAT file will also need to be updated.&lt;br /&gt;
&lt;br /&gt;
A FAT entry consists of a filename, offset and size.&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]] iNameLength||Length of the filename&lt;br /&gt;
|-&lt;br /&gt;
|[[char]] cFilename[12]||Filename, 12 chars long, but the name itself is only iNameLength characters long.  Not NULL-terminated.&lt;br /&gt;
|-&lt;br /&gt;
|[[UINT32LE]] iFileOffset||Offset of the file from the start of the BNK&lt;br /&gt;
|-&lt;br /&gt;
|[[UINT32LE]] iFileSize||Size of the file in bytes&lt;br /&gt;
|-&lt;br /&gt;
|[[UINT32LE]] iDecompressedSize||&#039;&#039;Alien Carnage only:&#039;&#039; Size of the file in bytes, once it has been decompressed (this field is not present in Halloween Harry) - &#039;&#039;TODO: Confirm this is where it is stored in AC&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The very first file entry is at offset zero, and the above structure is repeated back-to-back until there are no more files.  The offset given for each file is to the start of the file data itself, just after the header (in other words, the offset points to &amp;lt;tt&amp;gt;cData&amp;lt;/tt&amp;gt; in the structure below.)&lt;br /&gt;
&lt;br /&gt;
=== File entry ===&lt;br /&gt;
&lt;br /&gt;
Each file entry in the BNK is similar to the entry in the external FAT file, with the addition of a signature and the omission of the offset, and of course the actual file data as well.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Data type!!Description&lt;br /&gt;
|-&lt;br /&gt;
|[[BYTE]] cSignature[5]||&amp;quot;\x04-ID-&amp;quot; (not NULL-terminated)&lt;br /&gt;
|-&lt;br /&gt;
|[[UINT8]] iNameLength||Length of the filename&lt;br /&gt;
|-&lt;br /&gt;
|[[char]] cFilename[12]||Filename, 12 chars long, but the name itself is only iNameLength characters long.  Not NULL-terminated.&lt;br /&gt;
|-&lt;br /&gt;
|[[UINT32LE]] iFileSize||Size of the file in bytes&lt;br /&gt;
|-&lt;br /&gt;
|[[UINT32LE]] iDecompressedSize||&#039;&#039;Alien Carnage only:&#039;&#039; Size of the file in bytes, once it has been decompressed (this field is not present in Halloween Harry)&lt;br /&gt;
|-&lt;br /&gt;
|[[BYTE]] cData[iFileSize]||File data&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The very first file entry is at offset zero, and the above structure is repeated back-to-back until there is no more data in the .BNK file.&lt;br /&gt;
&lt;br /&gt;
=== Compression format ===&lt;br /&gt;
&lt;br /&gt;
TODO (this is available from programs like ACEXTRACT)&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
{{BeginFileFormatTools|Type=group}}&lt;br /&gt;
{{FileFormatTool&lt;br /&gt;
| Name = [[Camoto]]&lt;br /&gt;
| canExtract = Yes&lt;br /&gt;
| canDecompress = No&lt;br /&gt;
| canCreate = Yes&lt;br /&gt;
| canModify = Yes&lt;br /&gt;
| canCompress = No&lt;br /&gt;
| editHidden = N/A&lt;br /&gt;
| editMetadata = N/A&lt;br /&gt;
}}&lt;br /&gt;
{{FileFormatTool&lt;br /&gt;
| Name = [[Wombat]]&lt;br /&gt;
| canExtract = Yes&lt;br /&gt;
| canDecompress = Yes&lt;br /&gt;
| canCreate = No&lt;br /&gt;
| canModify = No&lt;br /&gt;
| canCompress = No&lt;br /&gt;
| editHidden = N/A&lt;br /&gt;
| editMetadata = N/A&lt;br /&gt;
}}&lt;br /&gt;
{{EndFileFormatTools}}&lt;br /&gt;
&lt;br /&gt;
== Credits ==&lt;br /&gt;
&lt;br /&gt;
This file format was reverse engineered by [[User:Malvineous|Malvineous]].  If you find this information helpful in a project you&#039;re working on, please give credit where credit is due.  (A link back to this wiki would be nice too!)&lt;br /&gt;
&lt;br /&gt;
[[Category:Halloween Harry]]&lt;br /&gt;
[[Category:File Formats]]&lt;br /&gt;
[[Category:Group Files]]&lt;br /&gt;
[[Category:Group Files with embedded FAT]]&lt;br /&gt;
[[Category:Group Files with external FAT]]&lt;/div&gt;</summary>
		<author><name>Eros</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Raw_CGA_Data&amp;diff=4181</id>
		<title>Raw CGA Data</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Raw_CGA_Data&amp;diff=4181"/>
		<updated>2012-05-05T08:53:08Z</updated>

		<summary type="html">&lt;p&gt;Eros: /* Interlaced CGA data */ Added table. May need revising.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page describes a number of generic arrangements for storing CGA graphics data. The graphics in many CGA games are stored based on one of these formats.&lt;br /&gt;
&lt;br /&gt;
== Linear CGA data ==&lt;br /&gt;
&lt;br /&gt;
For CGA tiles, one byte stores the color information for four pixels. Since the tile has 64 pixels (8&amp;amp;times;8), each tile takes up 16 bytes.&lt;br /&gt;
&lt;br /&gt;
There are four possible combinations of 2 bits (2^2). The actual colors for each pixel depend on the active CGA palette, of which there are three basic ones.  See [[wp:Color Graphics Adapter]] for details. Every game can use the four color palette differently. [[Catacomb]] uses color palette 1 with high intensity.&lt;br /&gt;
&lt;br /&gt;
This data represents one tile from Catacomb:&lt;br /&gt;
 FF FF FF FF FD 7F F6 9F F6 9F FD 7F FF FF FF FF&lt;br /&gt;
&lt;br /&gt;
Expanded into bits for an 8&amp;amp;times;8 tile:&lt;br /&gt;
 11 11 11 11 11 11 11 11 &lt;br /&gt;
 11 11 11 11 11 11 11 11&lt;br /&gt;
 11 11 11 01 01 11 11 11 &lt;br /&gt;
 11 11 01 10 10 01 11 11&lt;br /&gt;
 11 11 01 10 10 01 11 11 &lt;br /&gt;
 11 11 11 01 01 11 11 11&lt;br /&gt;
 11 11 11 11 11 11 11 11 &lt;br /&gt;
 11 11 11 11 11 11 11 11&lt;br /&gt;
&lt;br /&gt;
With color palette 1i, each pair of bits represents a different color:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Bits!!Color&lt;br /&gt;
|-&lt;br /&gt;
|00&lt;br /&gt;
|style=&amp;quot;color: white; background-color: #000000&amp;quot; | black&lt;br /&gt;
|-&lt;br /&gt;
|01&lt;br /&gt;
|style=&amp;quot;color: black; background-color: #55FFFF&amp;quot; | light cyan&lt;br /&gt;
|-&lt;br /&gt;
|10&lt;br /&gt;
|style=&amp;quot;color: black; background-color: #FF55FF&amp;quot; | light magenta&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|style=&amp;quot;color: black; background-color: #FFFFFF&amp;quot; | white&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Resulting Image (actual size):&lt;br /&gt;
 [[File:catacomb_cgatile.png]]&lt;br /&gt;
Resulting Image (8&amp;amp;times; the size):&lt;br /&gt;
 [[File:catacomb_cgatile_hd.png]]&lt;br /&gt;
&lt;br /&gt;
== Interlaced CGA Data ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot; style=&amp;quot;float: right; margin: 1em;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;caption align=&amp;quot;bottom&amp;quot;&amp;gt;Offsets into file data&amp;lt;/caption&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th rowspan=&amp;quot;2&amp;quot;&amp;gt;Line (Y)&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th rowspan=&amp;quot;2&amp;quot;&amp;gt;Plane&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th colspan=&amp;quot;4&amp;quot;&amp;gt;Column (X)&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;0-3&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;4-7&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;8-11&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;12-15&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;00&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;01&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;02&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;03&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #FFFFFF; color: black;&amp;quot;&amp;gt;10&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #FFFFFF; color: black;&amp;quot;&amp;gt;11&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #FFFFFF; color: black;&amp;quot;&amp;gt;12&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #FFFFFF; color: black;&amp;quot;&amp;gt;13&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;2&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;04&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;05&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;06&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;07&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;3&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #FFFFFF; color: black;&amp;quot;&amp;gt;14&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #FFFFFF; color: black;&amp;quot;&amp;gt;15&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #FFFFFF; color: black;&amp;quot;&amp;gt;16&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #FFFFFF; color: black;&amp;quot;&amp;gt;17&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;4&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;08&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;09&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;0A&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;0B&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;5&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #FFFFFF; color: black;&amp;quot;&amp;gt;18&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #FFFFFF; color: black;&amp;quot;&amp;gt;19&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #FFFFFF; color: black;&amp;quot;&amp;gt;1A&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #FFFFFF; color: black;&amp;quot;&amp;gt;1B&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;6&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;0C&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;0D&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;0E&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;0F&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;7&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #FFFFFF; color: black;&amp;quot;&amp;gt;1C&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #FFFFFF; color: black;&amp;quot;&amp;gt;1D&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #FFFFFF; color: black;&amp;quot;&amp;gt;1E&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #FFFFFF; color: black;&amp;quot;&amp;gt;1F&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This arrangement stores the image data in two halves - even lines and odd lines.&lt;br /&gt;
&lt;br /&gt;
It is essentially two black-and-white (1bpp) images one after the other, each half the height of the total picture.  The first image is drawn on lines 0, 2, 4, etc. and the second image is drawn on lines 1, 3, 5, etc. to produce the final picture.  Each row of data is in the same arrangement as [[#Linear CGA data]] above.&lt;br /&gt;
&lt;br /&gt;
A 16&amp;amp;times;8 image in this arrangement is described in the table on the right.  The byte at index &amp;lt;tt&amp;gt;00&amp;lt;/tt&amp;gt; contains the first eight-pixels in the image, and the byte at offset &amp;lt;tt&amp;gt;15&amp;lt;/tt&amp;gt; contains the second four pixels on the fourth line.&lt;br /&gt;
&lt;br /&gt;
=== Full-Screen Images ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot; style=&amp;quot;float: left; margin: 2 auto;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;caption align=&amp;quot;bottom&amp;quot;&amp;gt;Full Screen [[PIC Format|PIC]] Image Format&amp;lt;/caption&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;File Offset&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Size&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Description&amp;lt;/th&amp;gt;&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;0x0000&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;0x1F40&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Pixel data (even lines)&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #DEDEDE;&amp;quot;&amp;gt;&amp;lt;td&amp;gt;0x1F40&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;0x00C0&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Padding Block&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;0x2000&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;0x1F40&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Pixel data (odd lines)&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr style=&amp;quot;background-color: #DEDEDE;&amp;quot;&amp;gt;&amp;lt;td&amp;gt;0x3F40&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;0x00C0&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Padding Block&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Many full screen CGA images store their data in interlaced format, so that they can be loaded directly into video memory without any additional processing.  In some of these cases however, the data is loaded in one operation for the entire image rather than two operations (one per plane.)&lt;br /&gt;
&lt;br /&gt;
This is significant because in 320&amp;amp;times;200 mode, each plane occupies 8000 bytes of memory, leading to 16000 bytes for the entire image.  However because the planes are aligned in CGA memory, the second plane actually starts at offset 8192 into memory, not at offset 8000.&lt;br /&gt;
&lt;br /&gt;
This means that file formats which load an image in a single operation will have 192 bytes of padding between the planes (and possibly 192 bytes after the last plane), which should be ignored when processing the image.&lt;br /&gt;
&lt;br /&gt;
A quick way to tell is to look at the image size.  If it is 16000 bytes, it contains two planes with no padding, and if it is 16192 or 16384 bytes then it contains padding between planes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CGA palettes ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot; style=&amp;quot;float: right; margin: 1em;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;caption align=&amp;quot;bottom&amp;quot;&amp;gt;RGB values of CGA palettes&amp;lt;/caption&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th rowspan=&amp;quot;2&amp;quot;&amp;gt;Colour index&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th colspan=&amp;quot;6&amp;quot;&amp;gt;Palette&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;0&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;0i&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;1&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;1i&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;2&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;2i&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td colspan=&amp;quot;6&amp;quot; style=&amp;quot;background-color: #000000; color: white; text-align: center;&amp;quot;&amp;gt;Application-specific (default #000000)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #00AA00; color: white;&amp;quot;&amp;gt;#00AA00&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #55FF55; color: black;&amp;quot;&amp;gt;#55FF55&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #00AAAA; color: white;&amp;quot;&amp;gt;#00AAAA&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #55FFFF; color: black;&amp;quot;&amp;gt;#55FFFF&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #00AAAA; color: white;&amp;quot;&amp;gt;#00AAAA&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #55FFFF; color: black;&amp;quot;&amp;gt;#55FFFF&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;2&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #AA0000; color: white;&amp;quot;&amp;gt;#AA0000&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #FF5555; color: black;&amp;quot;&amp;gt;#FF5555&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #AA00AA; color: white;&amp;quot;&amp;gt;#AA00AA&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #FF55FF; color: black;&amp;quot;&amp;gt;#FF55FF&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #AA0000; color: white;&amp;quot;&amp;gt;#AA0000&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #FF5555; color: black;&amp;quot;&amp;gt;#FF5555&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;3&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #AA5500; color: white;&amp;quot;&amp;gt;#AA5500&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #FFFF55; color: black;&amp;quot;&amp;gt;#FFFF55&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #AAAAAA; color: white;&amp;quot;&amp;gt;#AAAAAA&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #FFFFFF; color: black;&amp;quot;&amp;gt;#FFFFFF&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #AAAAAA; color: white;&amp;quot;&amp;gt;#AAAAAA&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #FFFFFF; color: black;&amp;quot;&amp;gt;#FFFFFF&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The actual RGB values that correspond to each colour value depend on the palette in use by the game.  This table lists the RGB values for all the CGA palettes.&lt;br /&gt;
&lt;br /&gt;
[[Category:Articles]]&lt;br /&gt;
[[Category:File Formats]]&lt;/div&gt;</summary>
		<author><name>Eros</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Talk:Raw_CGA_Data&amp;diff=4167</id>
		<title>Talk:Raw CGA Data</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Talk:Raw_CGA_Data&amp;diff=4167"/>
		<updated>2012-05-05T08:31:58Z</updated>

		<summary type="html">&lt;p&gt;Eros: More info?&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;: Should we add the information for full screen images from the [[PIC Format]] page? The Location | Size | Description chart would be nice (formatted into a table of course). [[User:Eros|Eros]] 08:31, 5 May 2012 (GMT)&lt;/div&gt;</summary>
		<author><name>Eros</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Raw_CGA_Data&amp;diff=4164</id>
		<title>Raw CGA Data</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Raw_CGA_Data&amp;diff=4164"/>
		<updated>2012-05-05T08:14:17Z</updated>

		<summary type="html">&lt;p&gt;Eros: /* Linear CGA data */ Added preview for high quality version.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page describes a number of generic arrangements for storing CGA graphics data. The graphics in many CGA games are stored based on one of these formats.&lt;br /&gt;
&lt;br /&gt;
== Linear CGA data ==&lt;br /&gt;
&lt;br /&gt;
For CGA tiles, one byte stores the color information for four pixels. Since the tile has 64 pixels (8&amp;amp;times;8), each tile takes up 16 bytes.&lt;br /&gt;
&lt;br /&gt;
There are four possible combinations of 2 bits (2^2). The actual colors for each pixel depend on the active CGA palette, of which there are three basic ones.  See [[wp:Color Graphics Adapter]] for details. Every game can use the four color palette differently. [[Catacomb]] uses color palette 1 with high intensity.&lt;br /&gt;
&lt;br /&gt;
This data represents one tile from Catacomb:&lt;br /&gt;
 FF FF FF FF FD 7F F6 9F F6 9F FD 7F FF FF FF FF&lt;br /&gt;
&lt;br /&gt;
Expanded into bits for an 8&amp;amp;times;8 tile:&lt;br /&gt;
 11 11 11 11 11 11 11 11 &lt;br /&gt;
 11 11 11 11 11 11 11 11&lt;br /&gt;
 11 11 11 01 01 11 11 11 &lt;br /&gt;
 11 11 01 10 10 01 11 11&lt;br /&gt;
 11 11 01 10 10 01 11 11 &lt;br /&gt;
 11 11 11 01 01 11 11 11&lt;br /&gt;
 11 11 11 11 11 11 11 11 &lt;br /&gt;
 11 11 11 11 11 11 11 11&lt;br /&gt;
&lt;br /&gt;
With color palette 1i, each pair of bits represents a different color:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Bits!!Color&lt;br /&gt;
|-&lt;br /&gt;
|00&lt;br /&gt;
|style=&amp;quot;color: white; background-color: #000000&amp;quot; | black&lt;br /&gt;
|-&lt;br /&gt;
|01&lt;br /&gt;
|style=&amp;quot;color: black; background-color: #55FFFF&amp;quot; | light cyan&lt;br /&gt;
|-&lt;br /&gt;
|10&lt;br /&gt;
|style=&amp;quot;color: black; background-color: #FF55FF&amp;quot; | light magenta&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|style=&amp;quot;color: black; background-color: #FFFFFF&amp;quot; | white&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Resulting Image (actual size):&lt;br /&gt;
 [[File:catacomb_cgatile.png]]&lt;br /&gt;
Resulting Image (8&amp;amp;times; the size):&lt;br /&gt;
 [[File:catacomb_cgatile_hd.png]]&lt;br /&gt;
&lt;br /&gt;
== Planar CGA data ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot; style=&amp;quot;float: right; margin: 1em;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;caption align=&amp;quot;bottom&amp;quot;&amp;gt;Offsets into file data&amp;lt;/caption&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th rowspan=&amp;quot;2&amp;quot;&amp;gt;Pixels&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th colspan=&amp;quot;4&amp;quot;&amp;gt;Plane&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;0&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;1&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(0,0) to (7,0)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;00&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #FFFFFF; color: black;&amp;quot;&amp;gt;10&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(8,0) to (15,0)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;01&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #FFFFFF; color: black;&amp;quot;&amp;gt;11&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(0,1) to (7,1)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;02&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #FFFFFF; color: black;&amp;quot;&amp;gt;12&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(8,1) to (15,1)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;03&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #FFFFFF; color: black;&amp;quot;&amp;gt;13&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(0,2) to (7,2)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;04&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #FFFFFF; color: black;&amp;quot;&amp;gt;14&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(8,2) to (15,2)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;05&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #FFFFFF; color: black;&amp;quot;&amp;gt;15&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(0,3) to (7,3)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;06&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #FFFFFF; color: black;&amp;quot;&amp;gt;16&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(8,3) to (15,3)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;07&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #FFFFFF; color: black;&amp;quot;&amp;gt;17&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(0,4) to (7,4)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;08&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #FFFFFF; color: black;&amp;quot;&amp;gt;18&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(8,4) to (15,4)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;09&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #FFFFFF; color: black;&amp;quot;&amp;gt;19&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(0,5) to (7,5)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;0A&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #FFFFFF; color: black;&amp;quot;&amp;gt;1A&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(8,5) to (15,5)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;0B&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #FFFFFF; color: black;&amp;quot;&amp;gt;1B&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(0,6) to (7,6)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;0C&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #FFFFFF; color: black;&amp;quot;&amp;gt;1C&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(8,6) to (15,6)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;0D&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #FFFFFF; color: black;&amp;quot;&amp;gt;1D&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(0,7) to (7,7)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;0E&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #FFFFFF; color: black;&amp;quot;&amp;gt;1E&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(8,7) to (15,7)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;0F&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #FFFFFF; color: black;&amp;quot;&amp;gt;1F&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This arrangement stores complete planes one after the other, where each plane contains data for the entire image.&lt;br /&gt;
&lt;br /&gt;
It is essentially two black-and-white (1bpp) images one after the other.  Combining the bits for each pixel produce a value between 0 and 3 inclusive, which are then used as an index into the palette.&lt;br /&gt;
&lt;br /&gt;
A 16&amp;amp;times;8 image in this arrangement is described in the table on the right.  The bytes at indices &amp;lt;tt&amp;gt;00&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;10&amp;lt;/tt&amp;gt; together provide values for the first eight pixels in the image.&lt;br /&gt;
&lt;br /&gt;
Some tilesets are comprised of multiple images in this arrangement, concatenated together.  This allows each sub-image (tile) to be self-contained with data for all planes required, but only for that specific tile.  This avoids decoding more data than is necessary for display.&lt;br /&gt;
&lt;br /&gt;
=== Full-screen images ===&lt;br /&gt;
&lt;br /&gt;
Many full screen CGA images store their data in planar format, so that they can be loaded directly into video memory without any additional processing.  In some of these cases however, the data is loaded in one operation for the entire image rather than two operations (one per plane.)&lt;br /&gt;
&lt;br /&gt;
This is significant because in 320&amp;amp;times;200 mode, each plane occupies 8000 bytes of memory, leading to 16000 bytes for the entire image.  However because the planes are aligned in CGA memory, the second plane actually starts at offset 8192 into memory, not at offset 8000.&lt;br /&gt;
&lt;br /&gt;
This means that file formats which load an image in a single operation will have 192 bytes of padding between the planes (and possibly 192 bytes after the last plane), which should be ignored when processing the image.&lt;br /&gt;
&lt;br /&gt;
A quick way to tell is to look at the image size.  If it is 16000 bytes, it contains two planes with no padding, and if it is 16192 or 16384 bytes then it contains padding between planes.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CGA palettes ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot; style=&amp;quot;float: right; margin: 1em;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;caption align=&amp;quot;bottom&amp;quot;&amp;gt;RGB values of CGA palettes&amp;lt;/caption&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th rowspan=&amp;quot;2&amp;quot;&amp;gt;Colour index&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th colspan=&amp;quot;6&amp;quot;&amp;gt;Palette&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;0&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;0i&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;1&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;1i&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;2&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;2i&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td colspan=&amp;quot;6&amp;quot; style=&amp;quot;background-color: #000000; color: white; text-align: center;&amp;quot;&amp;gt;Application-specific (default #000000)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #00AA00; color: white;&amp;quot;&amp;gt;#00AA00&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #55FF55; color: black;&amp;quot;&amp;gt;#55FF55&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #00AAAA; color: white;&amp;quot;&amp;gt;#00AAAA&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #55FFFF; color: black;&amp;quot;&amp;gt;#55FFFF&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #00AAAA; color: white;&amp;quot;&amp;gt;#00AAAA&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #55FFFF; color: black;&amp;quot;&amp;gt;#55FFFF&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;2&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #AA0000; color: white;&amp;quot;&amp;gt;#AA0000&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #FF5555; color: black;&amp;quot;&amp;gt;#FF5555&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #AA00AA; color: white;&amp;quot;&amp;gt;#AA00AA&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #FF55FF; color: black;&amp;quot;&amp;gt;#FF55FF&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #AA0000; color: white;&amp;quot;&amp;gt;#AA0000&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #FF5555; color: black;&amp;quot;&amp;gt;#FF5555&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;3&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #AA5500; color: white;&amp;quot;&amp;gt;#AA5500&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #FFFF55; color: black;&amp;quot;&amp;gt;#FFFF55&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #AAAAAA; color: white;&amp;quot;&amp;gt;#AAAAAA&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #FFFFFF; color: black;&amp;quot;&amp;gt;#FFFFFF&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #AAAAAA; color: white;&amp;quot;&amp;gt;#AAAAAA&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #FFFFFF; color: black;&amp;quot;&amp;gt;#FFFFFF&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The actual RGB values that correspond to each colour value depend on the palette in use by the game.  This table lists the RGB values for all the CGA palettes.&lt;br /&gt;
&lt;br /&gt;
[[Category:Articles]]&lt;br /&gt;
[[Category:File Formats]]&lt;/div&gt;</summary>
		<author><name>Eros</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=File:Catacomb_cgatile_hd.png&amp;diff=4163</id>
		<title>File:Catacomb cgatile hd.png</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=File:Catacomb_cgatile_hd.png&amp;diff=4163"/>
		<updated>2012-05-05T08:13:40Z</updated>

		<summary type="html">&lt;p&gt;Eros: Used for example on how to read CGA data.

One of the first tiles in the Catacomb CGA tile-set.

Higher quality for clarity.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Used for example on how to read CGA data.&lt;br /&gt;
&lt;br /&gt;
One of the first tiles in the [[Catacomb]] CGA tile-set.&lt;br /&gt;
&lt;br /&gt;
Higher quality for clarity.&lt;/div&gt;</summary>
		<author><name>Eros</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Raw_CGA_Data&amp;diff=4162</id>
		<title>Raw CGA Data</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Raw_CGA_Data&amp;diff=4162"/>
		<updated>2012-05-05T08:02:16Z</updated>

		<summary type="html">&lt;p&gt;Eros: /* Linear CGA data */ Changed to 1i for consistency.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page describes a number of generic arrangements for storing CGA graphics data. The graphics in many CGA games are stored based on one of these formats.&lt;br /&gt;
&lt;br /&gt;
== Linear CGA data ==&lt;br /&gt;
&lt;br /&gt;
For CGA tiles, one byte stores the color information for four pixels. Since the tile has 64 pixels (8&amp;amp;times;8), each tile takes up 16 bytes.&lt;br /&gt;
&lt;br /&gt;
There are four possible combinations of 2 bits (2^2). The actual colors for each pixel depend on the active CGA palette, of which there are three basic ones.  See [[wp:Color Graphics Adapter]] for details. Every game can use the four color palette differently. [[Catacomb]] uses color palette 1 with high intensity.&lt;br /&gt;
&lt;br /&gt;
This data represents one tile from Catacomb:&lt;br /&gt;
 FF FF FF FF FD 7F F6 9F F6 9F FD 7F FF FF FF FF&lt;br /&gt;
&lt;br /&gt;
Expanded into bits for an 8&amp;amp;times;8 tile:&lt;br /&gt;
 11 11 11 11 11 11 11 11 &lt;br /&gt;
 11 11 11 11 11 11 11 11&lt;br /&gt;
 11 11 11 01 01 11 11 11 &lt;br /&gt;
 11 11 01 10 10 01 11 11&lt;br /&gt;
 11 11 01 10 10 01 11 11 &lt;br /&gt;
 11 11 11 01 01 11 11 11&lt;br /&gt;
 11 11 11 11 11 11 11 11 &lt;br /&gt;
 11 11 11 11 11 11 11 11&lt;br /&gt;
&lt;br /&gt;
With color palette 1i, each pair of bits represents a different color:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Bits!!Color&lt;br /&gt;
|-&lt;br /&gt;
|00&lt;br /&gt;
|style=&amp;quot;color: white; background-color: #000000&amp;quot; | black&lt;br /&gt;
|-&lt;br /&gt;
|01&lt;br /&gt;
|style=&amp;quot;color: black; background-color: #55FFFF&amp;quot; | light cyan&lt;br /&gt;
|-&lt;br /&gt;
|10&lt;br /&gt;
|style=&amp;quot;color: black; background-color: #FF55FF&amp;quot; | light magenta&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|style=&amp;quot;color: black; background-color: #FFFFFF&amp;quot; | white&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Resulting Image:  [[File:catacomb_cgatile.png]]&lt;br /&gt;
&lt;br /&gt;
== Planar CGA data ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot; style=&amp;quot;float: right; margin: 1em;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;caption align=&amp;quot;bottom&amp;quot;&amp;gt;Offsets into file data&amp;lt;/caption&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th rowspan=&amp;quot;2&amp;quot;&amp;gt;Pixels&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th colspan=&amp;quot;4&amp;quot;&amp;gt;Plane&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;0&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;1&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(0,0) to (7,0)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;00&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #FFFFFF; color: black;&amp;quot;&amp;gt;10&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(8,0) to (15,0)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;01&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #FFFFFF; color: black;&amp;quot;&amp;gt;11&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(0,1) to (7,1)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;02&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #FFFFFF; color: black;&amp;quot;&amp;gt;12&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(8,1) to (15,1)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;03&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #FFFFFF; color: black;&amp;quot;&amp;gt;13&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(0,2) to (7,2)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;04&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #FFFFFF; color: black;&amp;quot;&amp;gt;14&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(8,2) to (15,2)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;05&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #FFFFFF; color: black;&amp;quot;&amp;gt;15&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(0,3) to (7,3)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;06&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #FFFFFF; color: black;&amp;quot;&amp;gt;16&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(8,3) to (15,3)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;07&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #FFFFFF; color: black;&amp;quot;&amp;gt;17&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(0,4) to (7,4)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;08&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #FFFFFF; color: black;&amp;quot;&amp;gt;18&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(8,4) to (15,4)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;09&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #FFFFFF; color: black;&amp;quot;&amp;gt;19&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(0,5) to (7,5)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;0A&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #FFFFFF; color: black;&amp;quot;&amp;gt;1A&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(8,5) to (15,5)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;0B&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #FFFFFF; color: black;&amp;quot;&amp;gt;1B&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(0,6) to (7,6)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;0C&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #FFFFFF; color: black;&amp;quot;&amp;gt;1C&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(8,6) to (15,6)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;0D&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #FFFFFF; color: black;&amp;quot;&amp;gt;1D&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(0,7) to (7,7)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;0E&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #FFFFFF; color: black;&amp;quot;&amp;gt;1E&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(8,7) to (15,7)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #000000; color: white;&amp;quot;&amp;gt;0F&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #FFFFFF; color: black;&amp;quot;&amp;gt;1F&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This arrangement stores complete planes one after the other, where each plane contains data for the entire image.&lt;br /&gt;
&lt;br /&gt;
It is essentially two black-and-white (1bpp) images one after the other.  Combining the bits for each pixel produce a value between 0 and 3 inclusive, which are then used as an index into the palette.&lt;br /&gt;
&lt;br /&gt;
A 16&amp;amp;times;8 image in this arrangement is described in the table on the right.  The bytes at indices &amp;lt;tt&amp;gt;00&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;10&amp;lt;/tt&amp;gt; together provide values for the first eight pixels in the image.&lt;br /&gt;
&lt;br /&gt;
Some tilesets are comprised of multiple images in this arrangement, concatenated together.  This allows each sub-image (tile) to be self-contained with data for all planes required, but only for that specific tile.  This avoids decoding more data than is necessary for display.&lt;br /&gt;
&lt;br /&gt;
=== Full-screen images ===&lt;br /&gt;
&lt;br /&gt;
Many full screen CGA images store their data in planar format, so that they can be loaded directly into video memory without any additional processing.  In some of these cases however, the data is loaded in one operation for the entire image rather than two operations (one per plane.)&lt;br /&gt;
&lt;br /&gt;
This is significant because in 320&amp;amp;times;200 mode, each plane occupies 8000 bytes of memory, leading to 16000 bytes for the entire image.  However because the planes are aligned in CGA memory, the second plane actually starts at offset 8192 into memory, not at offset 8000.&lt;br /&gt;
&lt;br /&gt;
This means that file formats which load an image in a single operation will have 192 bytes of padding between the planes (and possibly 192 bytes after the last plane), which should be ignored when processing the image.&lt;br /&gt;
&lt;br /&gt;
A quick way to tell is to look at the image size.  If it is 16000 bytes, it contains two planes with no padding, and if it is 16192 or 16384 bytes then it contains padding between planes.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== CGA palettes ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;wikitable&amp;quot; style=&amp;quot;float: right; margin: 1em;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;caption align=&amp;quot;bottom&amp;quot;&amp;gt;RGB values of CGA palettes&amp;lt;/caption&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th rowspan=&amp;quot;2&amp;quot;&amp;gt;Colour index&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th colspan=&amp;quot;6&amp;quot;&amp;gt;Palette&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;0&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;0i&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;1&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;1i&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;2&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;2i&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td colspan=&amp;quot;6&amp;quot; style=&amp;quot;background-color: #000000; color: white; text-align: center;&amp;quot;&amp;gt;Application-specific (default #000000)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #00AA00; color: white;&amp;quot;&amp;gt;#00AA00&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #55FF55; color: black;&amp;quot;&amp;gt;#55FF55&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #00AAAA; color: white;&amp;quot;&amp;gt;#00AAAA&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #55FFFF; color: black;&amp;quot;&amp;gt;#55FFFF&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #00AAAA; color: white;&amp;quot;&amp;gt;#00AAAA&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #55FFFF; color: black;&amp;quot;&amp;gt;#55FFFF&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;2&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #AA0000; color: white;&amp;quot;&amp;gt;#AA0000&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #FF5555; color: black;&amp;quot;&amp;gt;#FF5555&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #AA00AA; color: white;&amp;quot;&amp;gt;#AA00AA&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #FF55FF; color: black;&amp;quot;&amp;gt;#FF55FF&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #AA0000; color: white;&amp;quot;&amp;gt;#AA0000&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #FF5555; color: black;&amp;quot;&amp;gt;#FF5555&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;3&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #AA5500; color: white;&amp;quot;&amp;gt;#AA5500&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #FFFF55; color: black;&amp;quot;&amp;gt;#FFFF55&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #AAAAAA; color: white;&amp;quot;&amp;gt;#AAAAAA&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #FFFFFF; color: black;&amp;quot;&amp;gt;#FFFFFF&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #AAAAAA; color: white;&amp;quot;&amp;gt;#AAAAAA&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;background-color: #FFFFFF; color: black;&amp;quot;&amp;gt;#FFFFFF&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The actual RGB values that correspond to each colour value depend on the palette in use by the game.  This table lists the RGB values for all the CGA palettes.&lt;br /&gt;
&lt;br /&gt;
[[Category:Articles]]&lt;br /&gt;
[[Category:File Formats]]&lt;/div&gt;</summary>
		<author><name>Eros</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=File:Catacomb_cgatile.png&amp;diff=4144</id>
		<title>File:Catacomb cgatile.png</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=File:Catacomb_cgatile.png&amp;diff=4144"/>
		<updated>2012-05-02T13:11:59Z</updated>

		<summary type="html">&lt;p&gt;Eros: Added more information&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Used for example on how to read CGA data.&lt;br /&gt;
&lt;br /&gt;
One of the first tiles in the [[Catacomb]] CGA tile-set.&lt;/div&gt;</summary>
		<author><name>Eros</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Raw_CGA_Data&amp;diff=4143</id>
		<title>Raw CGA Data</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Raw_CGA_Data&amp;diff=4143"/>
		<updated>2012-05-02T13:09:10Z</updated>

		<summary type="html">&lt;p&gt;Eros: Added placeholder section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page describes a number of generic arrangements for storing CGA graphics data. The graphics in many CGA games are stored based on one of these formats.&lt;br /&gt;
&lt;br /&gt;
== 2bpp Linear CGA Tile Data ==&lt;br /&gt;
&lt;br /&gt;
For CGA tiles, one byte stores the color information for four pixels. Since the tile has 64 pixels (8&amp;amp;times;8), each tile takes up 16 bytes.&lt;br /&gt;
&lt;br /&gt;
There are four possible combinations of 2 bits (2^2). The actual colors for each pixel depend on the active CGA palette, of which there are three basic ones.  See [[wp:Color Graphics Adapter]] for details. Every game can use the four color palette differently. [[Catacomb]] uses color palette 1 with high intensity.&lt;br /&gt;
&lt;br /&gt;
This data represents one tile from Catacomb:&lt;br /&gt;
 FF FF FF FF FD 7F F6 9F F6 9F FD 7F FF FF FF FF&lt;br /&gt;
&lt;br /&gt;
Expanded into bits for an 8&amp;amp;times;8 tile:&lt;br /&gt;
 11 11 11 11 11 11 11 11 &lt;br /&gt;
 11 11 11 11 11 11 11 11&lt;br /&gt;
 11 11 11 01 01 11 11 11 &lt;br /&gt;
 11 11 01 10 10 01 11 11&lt;br /&gt;
 11 11 01 10 10 01 11 11 &lt;br /&gt;
 11 11 11 01 01 11 11 11&lt;br /&gt;
 11 11 11 11 11 11 11 11 &lt;br /&gt;
 11 11 11 11 11 11 11 11&lt;br /&gt;
&lt;br /&gt;
With color palette 1, each pair of bits represents a different color:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Bits!!Color&lt;br /&gt;
|-&lt;br /&gt;
|00&lt;br /&gt;
|style=&amp;quot;color: white; background-color: #000000&amp;quot; | black&lt;br /&gt;
|-&lt;br /&gt;
|01&lt;br /&gt;
|style=&amp;quot;color: black; background-color: #55FFFF&amp;quot; | light cyan&lt;br /&gt;
|-&lt;br /&gt;
|10&lt;br /&gt;
|style=&amp;quot;color: black; background-color: #FF55FF&amp;quot; | light magenta&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|style=&amp;quot;color: black; background-color: #FFFFFF&amp;quot; | white&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Resulting Image:  [[File:catacomb_cgatile.png]]&lt;br /&gt;
&lt;br /&gt;
== 2bpp Non-Linear CGA PIC Data ==&lt;br /&gt;
&lt;br /&gt;
{{TODO|Add information from [[PIC Format]] here?}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Articles]]&lt;br /&gt;
[[Category:Graphics Files]]&lt;br /&gt;
[[Category:Catacomb 3D]]&lt;br /&gt;
[[Category:File Formats]]&lt;/div&gt;</summary>
		<author><name>Eros</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Raw_CGA_Data&amp;diff=4142</id>
		<title>Raw CGA Data</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Raw_CGA_Data&amp;diff=4142"/>
		<updated>2012-05-02T12:44:49Z</updated>

		<summary type="html">&lt;p&gt;Eros: Added table with colors.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page describes a number of generic arrangements for storing CGA graphics data. The graphics in many CGA games are stored based on one of these formats.&lt;br /&gt;
&lt;br /&gt;
== 2bpp Linear CGA Tile Data ==&lt;br /&gt;
&lt;br /&gt;
For CGA tiles, one byte stores the color information for four pixels. Since the tile has 64 pixels (8&amp;amp;times;8), each tile takes up 16 bytes.&lt;br /&gt;
&lt;br /&gt;
There are four possible combinations of 2 bits (2^2). The actual colors for each pixel depend on the active CGA palette, of which there are three basic ones.  See [[wp:Color Graphics Adapter]] for details. Every game can use the four color palette differently. [[Catacomb]] uses color palette 1 with high intensity.&lt;br /&gt;
&lt;br /&gt;
This data represents one tile from Catacomb:&lt;br /&gt;
 FF FF FF FF FD 7F F6 9F F6 9F FD 7F FF FF FF FF&lt;br /&gt;
&lt;br /&gt;
Expanded into bits for an 8&amp;amp;times;8 tile:&lt;br /&gt;
 11 11 11 11 11 11 11 11 &lt;br /&gt;
 11 11 11 11 11 11 11 11&lt;br /&gt;
 11 11 11 01 01 11 11 11 &lt;br /&gt;
 11 11 01 10 10 01 11 11&lt;br /&gt;
 11 11 01 10 10 01 11 11 &lt;br /&gt;
 11 11 11 01 01 11 11 11&lt;br /&gt;
 11 11 11 11 11 11 11 11 &lt;br /&gt;
 11 11 11 11 11 11 11 11&lt;br /&gt;
&lt;br /&gt;
With color palette 1, each pair of bits represents a different color:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Bits!!Color&lt;br /&gt;
|-&lt;br /&gt;
|00&lt;br /&gt;
|style=&amp;quot;color: white; background-color: #000000&amp;quot; | black&lt;br /&gt;
|-&lt;br /&gt;
|01&lt;br /&gt;
|style=&amp;quot;color: black; background-color: #55FFFF&amp;quot; | light cyan&lt;br /&gt;
|-&lt;br /&gt;
|10&lt;br /&gt;
|style=&amp;quot;color: black; background-color: #FF55FF&amp;quot; | light magenta&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|style=&amp;quot;color: black; background-color: #FFFFFF&amp;quot; | white&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Resulting Image:  [[File:catacomb_cgatile.png]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Articles]]&lt;br /&gt;
[[Category:Graphics Files]]&lt;br /&gt;
[[Category:Catacomb 3D]]&lt;br /&gt;
[[Category:File Formats]]&lt;/div&gt;</summary>
		<author><name>Eros</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Catacomb_Tileset_Format&amp;diff=4141</id>
		<title>Catacomb Tileset Format</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Catacomb_Tileset_Format&amp;diff=4141"/>
		<updated>2012-05-02T12:37:36Z</updated>

		<summary type="html">&lt;p&gt;Eros: Linking 2bpp linear.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Tileset Infobox&lt;br /&gt;
 | Hardware1 = CGA&lt;br /&gt;
 | Hardware2 = EGA&lt;br /&gt;
 | MaxTiles = Unlimited&lt;br /&gt;
 | Palette = Default CGA/EGA&lt;br /&gt;
 | Names = N&lt;br /&gt;
 | TileMinSize = 8&amp;amp;times;8&lt;br /&gt;
 | TileMaxSize = 8&amp;amp;times;8&lt;br /&gt;
 | NumPlanes = 4&lt;br /&gt;
 | PlaneArrangement = CGA: [[2bpp linear]], EGA: [[Raw EGA data#Graphic-planar EGA data|Graphic-planar]]&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;
 | Game1 = Catacomb&lt;br /&gt;
 | Game2 = Catacomb II&lt;br /&gt;
}}&lt;br /&gt;
The &#039;&#039;&#039;Catacomb Tileset Format&#039;&#039;&#039; is used in both [[Catacomb]] and [[Catacomb II]] to store 8&amp;amp;times;8 pixel tiles used for drawing the game levels.  The format can be used to store both CGA and EGA data, with each type stored in separate files named &amp;lt;tt&amp;gt;CGACHARS.xxx&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;EGACHARS.xxx&amp;lt;/tt&amp;gt;.  This format is similar to the font data in the [[XGAPics Format|xGAPICS]] files, which obsoleted the xGACHARS format in later games. &lt;br /&gt;
&lt;br /&gt;
[[Catacomb II]] uses the tiles from &amp;lt;tt&amp;gt;xGAPICS.CA2&amp;lt;/tt&amp;gt; to draw text onto the screen, not the ones from &amp;lt;tt&amp;gt;xGACHARS.CA2&amp;lt;/tt&amp;gt;. {{TODO|What does this mean?  The xGACHARS file should be used for drawing text in a level.}}&lt;br /&gt;
&lt;br /&gt;
== File format ==&lt;br /&gt;
&lt;br /&gt;
The file contains raw graphics data and has no header, so you&#039;ll need to calculate the number of tiles yourself.&lt;br /&gt;
&lt;br /&gt;
For the CGA, one byte stores the color information for four pixels. Since the tile has 64 pixels (8&amp;amp;times;8), each tile takes up 16 bytes.&lt;br /&gt;
&lt;br /&gt;
For the EGA, one byte can only store two pixels (regardless of the plane&#039;s order), so you need 32 bytes per tile. This gives you the following two formulae to calculate the tile count:&lt;br /&gt;
&lt;br /&gt;
 num_ega_tiles = filesize / 32&lt;br /&gt;
 num_cga_tiles = filesize / 16&lt;br /&gt;
&lt;br /&gt;
For the CGA version, reading the CHARS is exactly the same ([[2bpp linear]]) as reading the font tiles from the CGAPICS file.&lt;br /&gt;
&lt;br /&gt;
The EGA version is a bit different.  In EGAPICS, you have one huge data block for each EGA plane ([[Raw_EGA_data|planar EGA data]]), where each block/plane contains data for all images.  In the EGACHARS file, each tile has its own four planes, self contained within the 32 bytes for each tile ([[Raw_EGA_data#Graphic-planar_EGA_data|graphic-planar EGA data]]).  This means you can read one single tile without having to scan through the whole file to get to the start of each plane.&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
This file format was reverse engineered by [[User:K1n9_Duk3|K1n9_Duk3]].  If you find this information helpful in a project you&#039;re working on, please give credit where credit is due.  (A link back to this wiki would be nice too!)&lt;/div&gt;</summary>
		<author><name>Eros</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=King%27s_Bounty_Graphics_Format&amp;diff=4140</id>
		<title>King&#039;s Bounty Graphics Format</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=King%27s_Bounty_Graphics_Format&amp;diff=4140"/>
		<updated>2012-05-02T12:34:48Z</updated>

		<summary type="html">&lt;p&gt;Eros: Linking 2bpp linear.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[King&#039;s Bounty]] stores all its graphics in external files in this format, packed into group files.&lt;br /&gt;
&lt;br /&gt;
The CGA &amp;amp; EGA graphic files (4 and 16 colors) have the &amp;quot;.4&amp;quot; and &amp;quot;.16&amp;quot; extensions (&amp;lt;tt&amp;gt;title.4, title.16&amp;lt;/tt&amp;gt;) and are kept in the &amp;lt;tt&amp;gt;416.CC&amp;lt;/tt&amp;gt; file.&lt;br /&gt;
&lt;br /&gt;
The VGA graphic files (256 colors) have the &amp;quot;.256&amp;quot; extension (&amp;lt;tt&amp;gt;title.256&amp;lt;/tt&amp;gt;) and are kept in the &amp;lt;tt&amp;gt;256.CC&amp;lt;/tt&amp;gt; file, except for &amp;lt;tt&amp;gt;endpic.256&amp;lt;/tt&amp;gt;, which is kept in &amp;lt;tt&amp;gt;416.CC&amp;lt;/tt&amp;gt; for some reason.&lt;br /&gt;
&lt;br /&gt;
== Compression ==&lt;br /&gt;
&lt;br /&gt;
All files are compressed as described in the [[CC Format]].&lt;br /&gt;
&lt;br /&gt;
== File structure ==&lt;br /&gt;
&lt;br /&gt;
The file starts with the number of chunks (graphics) in the file, followed by a number of values giving the offset of each chunk and a mask/color key offset.&lt;br /&gt;
&lt;br /&gt;
If a graphic doesn&#039;t have a mask (background tile, title screen), the offset for the mask is 0x0000. &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;
|[[UINT16LE]]||count||Number of images in the file&lt;br /&gt;
|-&lt;br /&gt;
|struct Entry||entries[]||Array of image and mask offsets&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Graphic Entry ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Data type!!Name!!Description&lt;br /&gt;
|-&lt;br /&gt;
|[[UINT16LE]]||offset||Offset from start of file to image data&lt;br /&gt;
|-&lt;br /&gt;
|[[UINT16LE]]||mask_offset||Offset from start of file to mask data (0 if no mask)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
For VGA images, &#039;&#039;&#039;mask_offset&#039;&#039;&#039; points somewhere inside the image data, specifying which pixel should be treated as the color key.&lt;br /&gt;
&lt;br /&gt;
== Image formats ==&lt;br /&gt;
&lt;br /&gt;
=== Images ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Data type!!Name!!Description&lt;br /&gt;
|-&lt;br /&gt;
|[[UINT16LE]]||width||Image width, also pitch&lt;br /&gt;
|-&lt;br /&gt;
|[[UINT16LE]]||height||Image height&lt;br /&gt;
|-&lt;br /&gt;
|[[BYTE]]||data[]||Image data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== CGA ====&lt;br /&gt;
&lt;br /&gt;
CGA data is [[2bpp linear]].&lt;br /&gt;
&lt;br /&gt;
The actual colours for each pixel depend on the active CGA palette, the game allows up to 8 choices. See [[wp:Color Graphics Adapter]] for details.&lt;br /&gt;
&lt;br /&gt;
==== EGA ====&lt;br /&gt;
&lt;br /&gt;
Unlike many other DOS games, EGA data is linear too, 4bpp this time.&lt;br /&gt;
&lt;br /&gt;
==== VGA ====&lt;br /&gt;
&lt;br /&gt;
The VGA data is standard 8bpp single-plane data. The palette can be found in &amp;lt;tt&amp;gt;MCGA.DRV&amp;lt;/tt&amp;gt; file, at offset &amp;lt;tt&amp;gt;0x032D&amp;lt;/tt&amp;gt;. It&#039;s in [[VGA Palette|classic VGA format]] (6-bit RGB).&lt;br /&gt;
&lt;br /&gt;
=== Masks ===&lt;br /&gt;
&lt;br /&gt;
Masks are always linear 1bpp &#039;&#039;&#039;without&#039;&#039;&#039; the width and height data (the values of the actual image are used). Masks do not exist for VGA graphics, color keys are used instead (see above).&lt;br /&gt;
&lt;br /&gt;
== Credits ==&lt;br /&gt;
Devised by the openkb project with best regards to the modding community.&lt;br /&gt;
&lt;br /&gt;
[[Category: King&#039;s Bounty]]&lt;br /&gt;
[[Category: File Formats]]&lt;br /&gt;
[[Category: Graphics Files]]&lt;/div&gt;</summary>
		<author><name>Eros</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Catacomb_Tileset_Format&amp;diff=4139</id>
		<title>Catacomb Tileset Format</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Catacomb_Tileset_Format&amp;diff=4139"/>
		<updated>2012-05-02T12:33:21Z</updated>

		<summary type="html">&lt;p&gt;Eros: Linking 2bpp linear.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Tileset Infobox&lt;br /&gt;
 | Hardware1 = CGA&lt;br /&gt;
 | Hardware2 = EGA&lt;br /&gt;
 | MaxTiles = Unlimited&lt;br /&gt;
 | Palette = Default CGA/EGA&lt;br /&gt;
 | Names = N&lt;br /&gt;
 | TileMinSize = 8&amp;amp;times;8&lt;br /&gt;
 | TileMaxSize = 8&amp;amp;times;8&lt;br /&gt;
 | NumPlanes = 4&lt;br /&gt;
 | PlaneArrangement = CGA: [[2bpp linear]], EGA: [[Raw EGA data#Graphic-planar EGA data|Graphic-planar]]&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;
 | Game1 = Catacomb&lt;br /&gt;
 | Game2 = Catacomb II&lt;br /&gt;
}}&lt;br /&gt;
The &#039;&#039;&#039;Catacomb Tileset Format&#039;&#039;&#039; is used in both [[Catacomb]] and [[Catacomb II]] to store 8&amp;amp;times;8 pixel tiles used for drawing the game levels.  The format can be used to store both CGA and EGA data, with each type stored in separate files named &amp;lt;tt&amp;gt;CGACHARS.xxx&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;EGACHARS.xxx&amp;lt;/tt&amp;gt;.  This format is similar to the font data in the [[XGAPics Format|xGAPICS]] files, which obsoleted the xGACHARS format in later games. &lt;br /&gt;
&lt;br /&gt;
[[Catacomb II]] uses the tiles from &amp;lt;tt&amp;gt;xGAPICS.CA2&amp;lt;/tt&amp;gt; to draw text onto the screen, not the ones from &amp;lt;tt&amp;gt;xGACHARS.CA2&amp;lt;/tt&amp;gt;. {{TODO|What does this mean?  The xGACHARS file should be used for drawing text in a level.}}&lt;br /&gt;
&lt;br /&gt;
== File format ==&lt;br /&gt;
&lt;br /&gt;
The file contains raw graphics data and has no header, so you&#039;ll need to calculate the number of tiles yourself.&lt;br /&gt;
&lt;br /&gt;
For the CGA, one byte stores the color information for four pixels. Since the tile has 64 pixels (8&amp;amp;times;8), each tile takes up 16 bytes.&lt;br /&gt;
&lt;br /&gt;
For the EGA, one byte can only store two pixels (regardless of the plane&#039;s order), so you need 32 bytes per tile. This gives you the following two formulae to calculate the tile count:&lt;br /&gt;
&lt;br /&gt;
 num_ega_tiles = filesize / 32&lt;br /&gt;
 num_cga_tiles = filesize / 16&lt;br /&gt;
&lt;br /&gt;
For the CGA version, reading the CHARS is exactly the same as reading the font tiles from the CGAPICS file.&lt;br /&gt;
&lt;br /&gt;
The EGA version is a bit different.  In EGAPICS, you have one huge data block for each EGA plane ([[Raw_EGA_data|planar EGA data]]), where each block/plane contains data for all images.  In the EGACHARS file, each tile has its own four planes, self contained within the 32 bytes for each tile ([[Raw_EGA_data#Graphic-planar_EGA_data|graphic-planar EGA data]]).  This means you can read one single tile without having to scan through the whole file to get to the start of each plane.&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
This file format was reverse engineered by [[User:K1n9_Duk3|K1n9_Duk3]].  If you find this information helpful in a project you&#039;re working on, please give credit where credit is due.  (A link back to this wiki would be nice too!)&lt;/div&gt;</summary>
		<author><name>Eros</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Dangerous_Dave_Tileset_Format&amp;diff=4138</id>
		<title>Dangerous Dave Tileset Format</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Dangerous_Dave_Tileset_Format&amp;diff=4138"/>
		<updated>2012-05-02T12:32:23Z</updated>

		<summary type="html">&lt;p&gt;Eros: Linking 2bpp linear.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Apart from the interface graphics (menu, font, etc.) [[Dangerous Dave]] stores its graphics in three files in this format.  The EGA graphics are stored externally in &amp;lt;tt&amp;gt;EGADAVE.DAV&amp;lt;/tt&amp;gt;, while the CGA and VGA graphics are stored internally in &amp;lt;tt&amp;gt;DAVE.EXE&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
These graphics in this format are the tiles and sprites, and most images used in-level. As Dangerous Dave is an early game, it does not always employ compression and uses a primitive method of storing the [[Raw EGA data]] in the file.&lt;br /&gt;
&lt;br /&gt;
== Compression ==&lt;br /&gt;
&lt;br /&gt;
Both the CGA and VGA data (stored in the .exe) is compressed with a form of RLE.  (This is not counting the LZEXE compression applied to the final .exe as a whole.)  The compression applies to the entire file, headers and all.  The EGA data (stored in &amp;lt;tt&amp;gt;EGADAVE.DAV&amp;lt;/tt&amp;gt;) is not compressed.&lt;br /&gt;
&lt;br /&gt;
The data is compressed using [[Keen 1-3 RLE compression]].&lt;br /&gt;
&lt;br /&gt;
== File structure ==&lt;br /&gt;
&lt;br /&gt;
The file starts with the number of chunks (graphics) in the file, followed by a number of values giving the offset of each chunk.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Data type!!Description&lt;br /&gt;
|-&lt;br /&gt;
|[[UINT32LE]] count||Number of images in the file&lt;br /&gt;
|-&lt;br /&gt;
|[[UINT32LE]] offsets[count]||Offset of image data&lt;br /&gt;
|-&lt;br /&gt;
|[[BYTE]] data[]||Image data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
There are two types of chunks, those that are 128 bytes in size are taken to be 16x16 tiles (by default the first 53 chunks are these) and consist entirely of raw graphics data. Other chunks start with two UINT16LE values giving the width and height of the graphic in pixels followed by the image data.&lt;br /&gt;
&lt;br /&gt;
== Image formats ==&lt;br /&gt;
&lt;br /&gt;
=== CGA ===&lt;br /&gt;
[[Image:ddave-tileset-cga.png|frame|right|Partial CGA tileset]]&lt;br /&gt;
CGA data is [[2bpp linear]] (like VGA but 2bpp instead of 8bpp.)  In other words, it&#039;s not split up into planes like the EGA data is.  The pixels are broken up in big-endian order within the byte, so this value:&lt;br /&gt;
&lt;br /&gt;
 11001001  (0xC9)&lt;br /&gt;
&lt;br /&gt;
Would translate as four pixels of the following values:&lt;br /&gt;
&lt;br /&gt;
 11 00 10 01  (3, 0, 2, 1)&lt;br /&gt;
&lt;br /&gt;
The actual colours for each pixel depend on the active CGA palette, of which there are three basic ones.  See [[wp:Color Graphics Adapter]] for details.&lt;br /&gt;
&lt;br /&gt;
=== EGA ===&lt;br /&gt;
[[Image:ddave-tileset-ega.png|frame|right|Partial EGA tileset]]&lt;br /&gt;
All EGA data is stored in the [[Raw EGA data#Row-planar_EGA_data|row planar]] arrangement, meaning each graphic is split into rows which are then split into EGA planes.&lt;br /&gt;
&lt;br /&gt;
All graphics have four planes, stored in the order I, R, G, B. Tiles are first, followed by player sprites, enemy sprites, in-level images and in-level font.&lt;br /&gt;
&lt;br /&gt;
This is a very basic implementation of EGA data.  The only masked sprite is the player sprite (the only sprite that needs to appear over colored tiles and other sprites - enemy sprites are drawn using XOR to avoid the mask, at the expense of causing colour changes should they ever overlap map tiles.)  Masking is accomplished by storing the mask as a second, black and white image - that is, black and white EGA.  The mask graphic is the same size, in pixels and bytes, as the sprite image it masks - a very wasteful way of doing things.&lt;br /&gt;
&lt;br /&gt;
Dave is also interesting in that it contains graphics whose width does not divide evenly by eight pixels. As EGA data these are stored as if they divided by the next highest multiple of 8 pixels (a 26x8 image is stored like a 32x8 image, with the &#039;extra&#039; space being blank.)  This is standard for storing images padded to a certain byte width (e.g. .BMP images) however it is not often done in games due to the &#039;wasted&#039; space.&lt;br /&gt;
&lt;br /&gt;
=== VGA ===&lt;br /&gt;
[[Image:ddave-tileset-vga.png|frame|right|Partial VGA tileset]]&lt;br /&gt;
The VGA data is standard 8bpp single-plane data.  The palette is stored in the main EXE file (see [[Dangerous Dave]] for its location.)&lt;br /&gt;
&lt;br /&gt;
== Credits ==&lt;br /&gt;
&lt;br /&gt;
This file format and the EGA + VGA graphics were reverse engineered by [[User:Levellass|Levellass]], and the RLE algorithm and CGA graphics were reverse engineered by [[User:Malvineous|Malvineous]].  If you find this information helpful in a project you&#039;re working on, please give credit where credit is due.  (A link back to this wiki would be nice too!)&lt;br /&gt;
&lt;br /&gt;
[[Category: Graphics Files]]&lt;br /&gt;
[[Category: File Formats]]&lt;br /&gt;
[[Category: Dangerous Dave]]&lt;/div&gt;</summary>
		<author><name>Eros</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Linear_CGA&amp;diff=4137</id>
		<title>Linear CGA</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Linear_CGA&amp;diff=4137"/>
		<updated>2012-05-02T12:30:44Z</updated>

		<summary type="html">&lt;p&gt;Eros: Set up redirect for 2bpp linear.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Raw_CGA_Data#2bpp Linear CGA Tile Data]]&lt;/div&gt;</summary>
		<author><name>Eros</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Raw_CGA_Data&amp;diff=4136</id>
		<title>Raw CGA Data</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Raw_CGA_Data&amp;diff=4136"/>
		<updated>2012-05-02T12:30:02Z</updated>

		<summary type="html">&lt;p&gt;Eros: Renamed section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page describes a number of generic arrangements for storing CGA graphics data. The graphics in many CGA games are stored based on one of these formats.&lt;br /&gt;
&lt;br /&gt;
== 2bpp Linear CGA Tile Data ==&lt;br /&gt;
&lt;br /&gt;
For CGA tiles, one byte stores the color information for four pixels. Since the tile has 64 pixels (8&amp;amp;times;8), each tile takes up 16 bytes.&lt;br /&gt;
&lt;br /&gt;
There are four possible combinations of 2 bits (2^2). Therefore there are four possible colors in the [https://en.wikipedia.org/wiki/Color_Graphics_Adapter#Standard_graphics_modes CGA palette]. Every game can use the four color palette differently. [[Catacomb]] uses color palette 1 with high intensity.&lt;br /&gt;
&lt;br /&gt;
This data represents one tile from Catacomb:&lt;br /&gt;
 FF FF FF FF FD 7F F6 9F F6 9F FD 7F FF FF FF FF&lt;br /&gt;
&lt;br /&gt;
Expanded into bits for an 8&amp;amp;times;8 tile:&lt;br /&gt;
 11 11 11 11 11 11 11 11 &lt;br /&gt;
 11 11 11 11 11 11 11 11&lt;br /&gt;
 11 11 11 01 01 11 11 11 &lt;br /&gt;
 11 11 01 10 10 01 11 11&lt;br /&gt;
 11 11 01 10 10 01 11 11 &lt;br /&gt;
 11 11 11 01 01 11 11 11&lt;br /&gt;
 11 11 11 11 11 11 11 11 &lt;br /&gt;
 11 11 11 11 11 11 11 11&lt;br /&gt;
&lt;br /&gt;
With color palette 1, each pair of bits represents a different color:&lt;br /&gt;
 00 = black&lt;br /&gt;
 01 = cyan&lt;br /&gt;
 10 = magenta&lt;br /&gt;
 11 = white&lt;br /&gt;
&lt;br /&gt;
Resulting Image:  [[File:catacomb_cgatile.png]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Articles]]&lt;br /&gt;
[[Category:Graphics Files]]&lt;br /&gt;
[[Category:Catacomb 3D]]&lt;br /&gt;
[[Category:File Formats]]&lt;/div&gt;</summary>
		<author><name>Eros</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Raw_CGA_data&amp;diff=4135</id>
		<title>Raw CGA data</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Raw_CGA_data&amp;diff=4135"/>
		<updated>2012-05-02T12:28:46Z</updated>

		<summary type="html">&lt;p&gt;Eros: moved Raw CGA data to Raw CGA Data: Capitalization&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Raw CGA Data]]&lt;/div&gt;</summary>
		<author><name>Eros</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Raw_CGA_Data&amp;diff=4134</id>
		<title>Raw CGA Data</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Raw_CGA_Data&amp;diff=4134"/>
		<updated>2012-05-02T12:28:46Z</updated>

		<summary type="html">&lt;p&gt;Eros: moved Raw CGA data to Raw CGA Data: Capitalization&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page describes a number of generic arrangements for storing CGA graphics data. The graphics in many CGA games are stored based on one of these formats.&lt;br /&gt;
&lt;br /&gt;
== 2bpp CGA tile data ==&lt;br /&gt;
&lt;br /&gt;
For CGA tiles, one byte stores the color information for four pixels. Since the tile has 64 pixels (8&amp;amp;times;8), each tile takes up 16 bytes.&lt;br /&gt;
&lt;br /&gt;
There are four possible combinations of 2 bits (2^2). Therefore there are four possible colors in the [https://en.wikipedia.org/wiki/Color_Graphics_Adapter#Standard_graphics_modes CGA palette]. Every game can use the four color palette differently. [[Catacomb]] uses color palette 1 with high intensity.&lt;br /&gt;
&lt;br /&gt;
This data represents one tile from Catacomb:&lt;br /&gt;
 FF FF FF FF FD 7F F6 9F F6 9F FD 7F FF FF FF FF&lt;br /&gt;
&lt;br /&gt;
Expanded into bits for an 8&amp;amp;times;8 tile:&lt;br /&gt;
 11 11 11 11 11 11 11 11 &lt;br /&gt;
 11 11 11 11 11 11 11 11&lt;br /&gt;
 11 11 11 01 01 11 11 11 &lt;br /&gt;
 11 11 01 10 10 01 11 11&lt;br /&gt;
 11 11 01 10 10 01 11 11 &lt;br /&gt;
 11 11 11 01 01 11 11 11&lt;br /&gt;
 11 11 11 11 11 11 11 11 &lt;br /&gt;
 11 11 11 11 11 11 11 11&lt;br /&gt;
&lt;br /&gt;
With color palette 1, each pair of bits represents a different color:&lt;br /&gt;
 00 = black&lt;br /&gt;
 01 = cyan&lt;br /&gt;
 10 = magenta&lt;br /&gt;
 11 = white&lt;br /&gt;
&lt;br /&gt;
Resulting Image:  [[File:catacomb_cgatile.png]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Articles]]&lt;br /&gt;
[[Category:Graphics Files]]&lt;br /&gt;
[[Category:Catacomb 3D]]&lt;br /&gt;
[[Category:File Formats]]&lt;/div&gt;</summary>
		<author><name>Eros</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=File:Catacomb_cgatile.png&amp;diff=4133</id>
		<title>File:Catacomb cgatile.png</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=File:Catacomb_cgatile.png&amp;diff=4133"/>
		<updated>2012-05-02T12:24:59Z</updated>

		<summary type="html">&lt;p&gt;Eros: Used for example.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Used for example.&lt;/div&gt;</summary>
		<author><name>Eros</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Raw_CGA_Data&amp;diff=4132</id>
		<title>Raw CGA Data</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Raw_CGA_Data&amp;diff=4132"/>
		<updated>2012-05-02T12:24:28Z</updated>

		<summary type="html">&lt;p&gt;Eros: First version of CGA 2bpp tile data.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page describes a number of generic arrangements for storing CGA graphics data. The graphics in many CGA games are stored based on one of these formats.&lt;br /&gt;
&lt;br /&gt;
== 2bpp CGA tile data ==&lt;br /&gt;
&lt;br /&gt;
For CGA tiles, one byte stores the color information for four pixels. Since the tile has 64 pixels (8&amp;amp;times;8), each tile takes up 16 bytes.&lt;br /&gt;
&lt;br /&gt;
There are four possible combinations of 2 bits (2^2). Therefore there are four possible colors in the [https://en.wikipedia.org/wiki/Color_Graphics_Adapter#Standard_graphics_modes CGA palette]. Every game can use the four color palette differently. [[Catacomb]] uses color palette 1 with high intensity.&lt;br /&gt;
&lt;br /&gt;
This data represents one tile from Catacomb:&lt;br /&gt;
 FF FF FF FF FD 7F F6 9F F6 9F FD 7F FF FF FF FF&lt;br /&gt;
&lt;br /&gt;
Expanded into bits for an 8&amp;amp;times;8 tile:&lt;br /&gt;
 11 11 11 11 11 11 11 11 &lt;br /&gt;
 11 11 11 11 11 11 11 11&lt;br /&gt;
 11 11 11 01 01 11 11 11 &lt;br /&gt;
 11 11 01 10 10 01 11 11&lt;br /&gt;
 11 11 01 10 10 01 11 11 &lt;br /&gt;
 11 11 11 01 01 11 11 11&lt;br /&gt;
 11 11 11 11 11 11 11 11 &lt;br /&gt;
 11 11 11 11 11 11 11 11&lt;br /&gt;
&lt;br /&gt;
With color palette 1, each pair of bits represents a different color:&lt;br /&gt;
 00 = black&lt;br /&gt;
 01 = cyan&lt;br /&gt;
 10 = magenta&lt;br /&gt;
 11 = white&lt;br /&gt;
&lt;br /&gt;
Resulting Image:  [[File:catacomb_cgatile.png]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Articles]]&lt;br /&gt;
[[Category:Graphics Files]]&lt;br /&gt;
[[Category:Catacomb 3D]]&lt;br /&gt;
[[Category:File Formats]]&lt;/div&gt;</summary>
		<author><name>Eros</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Dangerous_Dave_Level_format&amp;diff=4127</id>
		<title>Dangerous Dave Level format</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Dangerous_Dave_Level_format&amp;diff=4127"/>
		<updated>2012-05-01T13:39:17Z</updated>

		<summary type="html">&lt;p&gt;Eros: Linking UNLZEXE&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{NeedMoreInfo}}&lt;br /&gt;
{{Map Infobox&lt;br /&gt;
 | Type = 2D tile-based&lt;br /&gt;
 | Layers = 1&lt;br /&gt;
 | Tile size = 16&amp;amp;times;16&lt;br /&gt;
 | Viewport = 320&amp;amp;times;160&lt;br /&gt;
 | Game1 = Dangerous Dave&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Dangerous Dave]] stores its levels consecutively in the executable starting at offset $26E0A (after [[UNLZEXE]]&#039;ing.)  Each level is 1280 bytes long.&lt;br /&gt;
&lt;br /&gt;
== Level structure ==&lt;br /&gt;
&lt;br /&gt;
Each level 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;
|[[BYTE]] path[256]||Path data&lt;br /&gt;
|-&lt;br /&gt;
|[[BYTE]] tiles[100*10]||Tile data, left to right, top to bottom&lt;br /&gt;
|-&lt;br /&gt;
|[[BYTE]] padding[24]||Unused&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The 1000 bytes of tile data are followed by 24 bytes of unused data to bring the chunk up to a nice round 1024 bytes.&lt;br /&gt;
&lt;br /&gt;
=== Path data ===&lt;br /&gt;
&lt;br /&gt;
This block of data is used to specify a path for creatures to follow.  It is an array of up to 128 X,Y coordinate pairs, with each pair being a signed 8-bit integer (so two bytes * 128 pairs == 256 bytes max.)  Each value dictates the number of pixels the creature should move in both the X and Y direction.  The end of the path is signified by storing 0xEA in both coordinates, and upon reaching this point the path repeats from the beginning.  An example path might be&lt;br /&gt;
&lt;br /&gt;
 05 03 FB FD EA EA&lt;br /&gt;
&lt;br /&gt;
Which means:&lt;br /&gt;
&lt;br /&gt;
 05 03   # Move five pixels to the right and three pixels down&lt;br /&gt;
 FB FD   # Move five pixels left and three pixels up, i.e. return to the original position&lt;br /&gt;
 EA EA   # End of path&lt;br /&gt;
&lt;br /&gt;
This would cause the creature to oscillate between two points.  (Since the values are signed, 0xFF == -1, 0xFE == -2, etc.)&lt;br /&gt;
&lt;br /&gt;
Since the paths consist of relative movement instructions, a path that does not return the creature to its starting point at termination will cause the creature to gradually migrate off the edge of the level, as the misalignment accumulates after each loop iteration.  However this could be used for creative effect, as the creature will then reappear at the opposite edge of the level.&lt;br /&gt;
&lt;br /&gt;
It appears that only one path can be defined in each level, and all creatures follow it the same (although as the path consists of relative movement instructions, the creatures can trace out the same path at different locations in the level.)&lt;br /&gt;
&lt;br /&gt;
=== Tile data ===&lt;br /&gt;
[[Image:ddave-level01-vga.png|thumb|480px|Level 1 with VGA tiles.  Often two levels are stored in the one file.]]&lt;br /&gt;
&lt;br /&gt;
The level consists of 1000 bytes of tile data, one byte per tile arranged in a 100x10 array.&lt;br /&gt;
&lt;br /&gt;
The byte values are indices into the [[Dangerous Dave Graphics Format|tileset]], so a byte of value 0x02 means tile number 2 should be drawn in that location (with tile number 0 being the first image in the tileset.)  Tile number 0 is actually a black square, so a byte value of 0x00 is used for empty space the player can walk in.&lt;br /&gt;
&lt;br /&gt;
=== Constants ===&lt;br /&gt;
&lt;br /&gt;
Both the player starting point and the creatures which appear in each level are hard coded as follows, with (0,0) being the top-left corner of the level and (99,9) being the lower right tile:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Level !! Level chunk !! Start !! Creatures&lt;br /&gt;
|-&lt;br /&gt;
|  1      ||  1 || (2,8) || None&lt;br /&gt;
|-&lt;br /&gt;
|  2      ||  2 || (1,8) || None&lt;br /&gt;
|-&lt;br /&gt;
|  3      ||  3 || (2,5) || Spiders at (44,4) and (59,4) - each spider is ~2x2 tiles in size&lt;br /&gt;
|-&lt;br /&gt;
|  4      ||  4 || (1,5) || TODO&lt;br /&gt;
|-&lt;br /&gt;
|  5      ||  5 || (2,8) || 3x Suns at TODO&lt;br /&gt;
|-&lt;br /&gt;
|  6      ||  6 || (2,8) || TODO (Bones)&lt;br /&gt;
|-&lt;br /&gt;
|  7      ||  7 || (1,2) || TODO (UFOs)&lt;br /&gt;
|-&lt;br /&gt;
|  8      ||  8 || (2,8) || TODO&lt;br /&gt;
|-&lt;br /&gt;
|  9      ||  9 || (6,1) || TODO&lt;br /&gt;
|-&lt;br /&gt;
| 10      || 10 || (2,8) || TODO&lt;br /&gt;
|-&lt;br /&gt;
|  5 warp ||  2 || (51,0) || None&lt;br /&gt;
|-&lt;br /&gt;
|  8 warp ||  6 || (71,0) || None / shares with level 6&lt;br /&gt;
|-&lt;br /&gt;
|  9 warp ||  7 || (80,0) || TODO&lt;br /&gt;
|-&lt;br /&gt;
| 10 warp ||  1 || (20,0) || None&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The level chunk is the &amp;quot;file&amp;quot; the level appears in (because some levels share the same files.)&lt;br /&gt;
&lt;br /&gt;
== Credits ==&lt;br /&gt;
&lt;br /&gt;
The initial investigation and tile data documentation was done by [[User:Levellass|Levellass]], with [[User:Malvineous|Malvineous]] discovering how the path data works.  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:Dangerous Dave]]&lt;/div&gt;</summary>
		<author><name>Eros</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=GameMaps_Format&amp;diff=4126</id>
		<title>GameMaps Format</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=GameMaps_Format&amp;diff=4126"/>
		<updated>2012-05-01T13:37:57Z</updated>

		<summary type="html">&lt;p&gt;Eros: Linking UNLZEXE&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The GameMaps format is how the levels in a number of [[Id Software]] games is stored. The filenames and compression varies somewhat across different games but all files stored in this format were produced by the program [[TED5]] or a close analogue.&lt;br /&gt;
&lt;br /&gt;
There are three main varieties of the GameMaps format, uncompressed, [[Carmack compression|carmackized]], and  [[Huffman Compression|huffman compressed]]. Each variation has its own file naming scheme  and pattern of external\internal files.&lt;br /&gt;
&lt;br /&gt;
There are two main components to the format, the game maps proper, which contain the game level data and the map headers, which contain both the locations of the start of level data in the game maps file and the tile info for the game.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Structure of uncompressed data ==&lt;br /&gt;
&lt;br /&gt;
The uncompressed format is used by several games including [[Bio Menace]] and [[Wolfenstein 3D]]. In this format map data is stored in &amp;lt;tt&amp;gt;MAPTEMP.xxx&amp;lt;/tt&amp;gt; and map headers in &amp;lt;tt&amp;gt;MAPTHEAD.xxx&amp;lt;/tt&amp;gt; this is the format saved by [[TED5]] when maps are being edited and can be directly accessed and edited by this utility, allowing changes to be made to the game.&lt;br /&gt;
&lt;br /&gt;
Note that filenames differ and that Wolfenstein 3D uses &amp;lt;tt&amp;gt;GAMEMAPS.WLx&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;MAPHEAD.xxx&amp;lt;/tt&amp;gt; files to store data. The main indicator of this format being used is that in the unaltered game the map header file is external.&lt;br /&gt;
&lt;br /&gt;
Only the latest Id Software games lacked compression, when file size was no longer an issue.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Map headers ===&lt;br /&gt;
&lt;br /&gt;
 0    2    Magic word       Magic word for [[RLEW compression]]&lt;br /&gt;
 2    400  Level ptr        100 4-byte pointers to start of level 0-99 data in game maps file&lt;br /&gt;
 402  ???  Tileinfo         Tileinfo data&lt;br /&gt;
&lt;br /&gt;
The map header file is of varying length and contains three main types of data. The first is the magic word or flag used for RLEW compression, it is always $ABCD. The second is 100 level pointers which give the location of the start of level data in the game maps file, relative to the start of that file. A value of 0 indicates no level. The third is the tileinfo data, tile properties for each tile used in level creation. (These are masked and unmasked and either 8x8, 16x16 or 32x32)&lt;br /&gt;
&lt;br /&gt;
Many programs treat the tileinfo as a separate file from the maphead and it is possible to modify a game in this manner. Indeed, some games, such as Wolfenstein 3D do not have any tileinfo data at all in the map header file (Giving a total file length of 402 bytes.) However TED5 works with any tileinfo data in the maphead.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Game maps ===&lt;br /&gt;
&lt;br /&gt;
The game maps file consists of the string &#039;TED5v1.0.&#039; and a number of RLEW compressed chunks of varying length. Each level in GameMaps will have from two to four chunks (usually four), depending on game, with all levels in a given game having the same number of chunks. These are the level header and 1-3 planes (Foreground, background and sprite or info.) The chunks are in no particular order and it is possible to read through the entire file decompressing chunks as they&#039;re found.&lt;br /&gt;
&lt;br /&gt;
Chunks are ordered by the map header file, which will point to the level header chunks which in turn contain pointers to the other chunks used by that level. It is possible the string at the start of the file is to avoid the possibility of a level header at the start of the file which would be read as not existing.&lt;br /&gt;
&lt;br /&gt;
All data in game maps file is in the form of words (Or in the case of pointers, dwords.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Level headers ===&lt;br /&gt;
&lt;br /&gt;
The header for each level that is pointed to by MAPHEAD is 42 bytes long and RLEW compressed, though this is difficult to see since the data is so short and nonrepetitive. For the offsets to level planes a value of 0 indicates the plane does not exist.&lt;br /&gt;
&lt;br /&gt;
Plane 1 is background using unmasked tiles, plane 2 is foreground and uses masked tiles. Plane 3 is sprite or info. Levels must contain c background plane and usually an infoplane.&lt;br /&gt;
&lt;br /&gt;
 0   4    Offset in GAMEMAPS to beginning of compressed plane 0 data&lt;br /&gt;
 4   4    Offset in GAMEMAPS to beginning of compressed plane 1 data&lt;br /&gt;
 8   4    Offset in GAMEMAPS to beginning of compressed plane 2 data&lt;br /&gt;
 12  2    Length of compressed plane 0 data (in bytes)&lt;br /&gt;
 14  2    Length of compressed plane 1 data (in bytes)&lt;br /&gt;
 16  2    Length of compressed plane 2 data (in bytes)&lt;br /&gt;
 18  2    Width of level (in tiles)&lt;br /&gt;
 20  2    Height of level (in tiles)&lt;br /&gt;
 22  16   Internal name for level (used only by editor, not displayed in-game. null-terminated)&lt;br /&gt;
&lt;br /&gt;
== Carmack compression ==&lt;br /&gt;
&lt;br /&gt;
[[Carmack compression]] is the method used to compress later Id Software games, when file size was an issue. It is the most efficient and complex compression method and was created specifically to work with the word structure of the game maps file. The compression is detailed on its [[Carmack compression|own page.]]&lt;br /&gt;
&lt;br /&gt;
Carmackized game maps files are external &amp;lt;tt&amp;gt;GAMEMAPS.xxx&amp;lt;/tt&amp;gt; files and the map header is stored internally in the executable. The map header must be extracted and the game maps decompressed before TED5 can access them. TED5 itself can produce carmackized files and external &amp;lt;tt&amp;gt;MAPHEAD.xxx&amp;lt;/tt&amp;gt; files. Carmackization does not replace the RLEW compression used in uncompressed data, but compresses this data, that is, the data is doubly compressed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Huffman compression ==&lt;br /&gt;
&lt;br /&gt;
Huffman compression was used by earlier versions of TED5 (possibly not TED5 at all.) before carmackization was created. It uses the same method to compress its data as is used by Id Software games to compress their graphics and sounds. Again this compression method works with RLEW compressed data and has its [[Huffman Compression|own page.]]&lt;br /&gt;
&lt;br /&gt;
Huffman compression is easily detected since it works on the bit level and thus disrupts the word structure of the game data. This is easily seen in a hex editor. Compressed data will not contain the string $00 $00 or indeed even $00 very often (In contrast even carmackized data contains both strings hundreds of times.)&lt;br /&gt;
&lt;br /&gt;
There will be two internal files for this format, the map header and the huffman dictionary (which is always the first dictionary in the executable.) The map header format is also slightly different, being 502 bytes long, the extra 100 bytes being the length of the compressed level headers in the game maps data (These can be ignored when decompressing since huffman data can be read until the decompressed level header&#039;s fixed size is reached.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Location of internal files ==&lt;br /&gt;
&lt;br /&gt;
Game maps are always external, but in the case of compression the map header file is stored internally in the executable. Executables are themselves compressed wither with LZEXE or PKLite. Once decompressed it is a trivial task to find the map header file as it will start with the word $ABCD For level editing purposes only the first 402 (or 502) bytes of the file needs to be extracted, though it is possible to read the maphead file to calculate its length.&lt;br /&gt;
&lt;br /&gt;
The following addresses are in the locations in the [[UNLZEXE|decompressed]] executables for the start of the Map header files. Values are different for different versions.&lt;br /&gt;
&lt;br /&gt;
TODO: Add all known versions of all games.&lt;br /&gt;
&lt;br /&gt;
External files&lt;br /&gt;
 Biomenace&lt;br /&gt;
 Blake Stone 2: Planet Strike&lt;br /&gt;
 Corridor 7 Demo&lt;br /&gt;
 Noahs Ark 3D&lt;br /&gt;
 Operation Body Count&lt;br /&gt;
 Spear of Destiny&lt;br /&gt;
 Wolfenstein 3D&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Internal files:&lt;br /&gt;
  Catacomb 3-D (1.00): $1C570 from start of file CAT3D.EXE (after file is UNLZEXE)&lt;br /&gt;
  Catacomb 4 Abyss (1.13): $1C510 from start of file CATABYSS.EXE (after file is UNLZEXE)&lt;br /&gt;
  Catacomb 5 Armageddon (1.01a): $1D900 from start of file CATARMA.EXE (after file is UNLZEXE)&lt;br /&gt;
  Catacomb 6 Apocalypse (1.00b): $1DD50 from start of file CATAPOC.EXE (after file is UNLZEXE)&lt;br /&gt;
  Corridor 7 CD (): $30D50 from start of file CORR7CD.EXE (file is not compressed)&lt;br /&gt;
  Corridor 7 Floppy (): $24BF0 from start of file C7.EXE (file is not compressed)&lt;br /&gt;
  Keen 4 (Special Demo): (file is PKLite compressed)&lt;br /&gt;
  Keen 4 (1.4): $24830&lt;br /&gt;
  Keen 5 (1.4): $25990&lt;br /&gt;
  Keen 6 (1.4): $25080&lt;br /&gt;
 (Keen D (1.13): $1FA50)&lt;br /&gt;
&lt;br /&gt;
== Utilities ==&lt;br /&gt;
&lt;br /&gt;
[[TED5]] This program can edit the &amp;lt;tt&amp;gt;GAMEMAPS&amp;lt;/tt&amp;gt; format of any games that use it. It is the original editor used to crate these files.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
This format was reverse engineered by Andrew Durdin (adurdin).&lt;br /&gt;
&lt;br /&gt;
The format is used by other games as well, including [[Bio Menace]], [[Blake Stone]], [[Catacomb 3D]], [[Catacomb Abyss]], [[Corridor 7]], [[Dangerous Dave 3]], [[Dave Goes Nutz]], [[Noah&#039;s Ark 3D]], [[Operation Body Count]], [[Spear of Destiny]], and [[Wolfenstein 3D]].&lt;br /&gt;
&lt;br /&gt;
[[Category:File Formats]]&lt;br /&gt;
[[Category:Map Files]]&lt;/div&gt;</summary>
		<author><name>Eros</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Dangerous_Dave&amp;diff=4125</id>
		<title>Dangerous Dave</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Dangerous_Dave&amp;diff=4125"/>
		<updated>2012-05-01T13:33:51Z</updated>

		<summary type="html">&lt;p&gt;Eros: Linking UNLZEXE&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{NeedMoreInfo}}&lt;br /&gt;
{{Game Infobox&lt;br /&gt;
 | Levels = Edit&lt;br /&gt;
 | Tiles = Edit&lt;br /&gt;
 | Sprites = Edit&lt;br /&gt;
 | Fullscreen = None&lt;br /&gt;
 | Sound = No&lt;br /&gt;
 | Music = None&lt;br /&gt;
 | Text = No&lt;br /&gt;
 | Story = None&lt;br /&gt;
 | Interface = No&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Dangerous Dave is the first installment in the popular Dangerous Dave series, preceding [[Dangerous Dave 2]] (And [[Dangerous Dave in Copyright Infringement|DDiCI]].) &lt;br /&gt;
&lt;br /&gt;
In this installment Dave navigates the lair of his nemesis, looking for the ten special trophies he needs to steal, and get out alive. The game features ten levels plus bonus areas and separate CGA, EGA and VGA graphics.&lt;br /&gt;
&lt;br /&gt;
== File formats ==&lt;br /&gt;
&lt;br /&gt;
This section lists the major file formats used in the game.&lt;br /&gt;
&lt;br /&gt;
* [[B800 Text]] - 4000-byte internal files are text screens shown at exit.&lt;br /&gt;
* [[Commander Keen EGA Header]] Some EGA graphics are stored internally and use this.&lt;br /&gt;
* [[Dangerous Dave Level format]] - Levels are stored in the executable.&lt;br /&gt;
* [[Dangerous Dave Graphics Format]] - Format of the CGA/EGA/VGA graphics.&lt;br /&gt;
** [[VGA Palette]] - standard 6-bit VGA palette of 768 bytes starting at offset 0x26B0A&lt;br /&gt;
* [[Dave Score format]] - Scores are stored in &amp;lt;tt&amp;gt;SCORES.DAV&amp;lt;/tt&amp;gt;&lt;br /&gt;
* [[Inverse Frequency Sound format]] - the sound file is stored internally and uses Apogees &#039;inverse frequency&#039; sound format.  It begins at offset 0x1C4E0 in &amp;lt;tt&amp;gt;DAVE.EXE&amp;lt;/tt&amp;gt;&lt;br /&gt;
* [[Raw EGA data]] &amp;lt;tt&amp;gt;EGADAVE.DAV&amp;lt;/tt&amp;gt; is EGA data, stored in an unusual fashion, but some data stored in the executable is closer to standard EGA format.&lt;br /&gt;
* Text is contained in the executable, which can be uncompressed with [[UNLZEXE]].&lt;br /&gt;
&lt;br /&gt;
== dave.exe ==&lt;br /&gt;
&lt;br /&gt;
When decompressed with unlzexe, &amp;lt;tt&amp;gt;dave.exe&amp;lt;/tt&amp;gt; contains the following data:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0b4ff || Unknown data&lt;br /&gt;
|-&lt;br /&gt;
| 0x0c620 || [[Dangerous Dave Graphics Format|CGA tiles]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x120f0 || [[Dangerous Dave Graphics Format|VGA tiles]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1c4e0 || [[Inverse Frequency Sound format|PC speaker sound effects]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1d780 || CGA font + menu graphics&lt;br /&gt;
|-&lt;br /&gt;
| 0x1ea40 || EGA font + menu graphics&lt;br /&gt;
|-&lt;br /&gt;
| 0x20ec0 || VGA font + menu graphics&lt;br /&gt;
|-&lt;br /&gt;
| 0x26b0a || [[VGA Palette]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x26e0a || [[Dangerous Dave Level format|Levels]] (10 @ 1280 bytes each)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Graphics ==&lt;br /&gt;
&lt;br /&gt;
Dave can use CGA, EGA and VGA graphics, with the default being the best card available.  All of the CGA and VGA graphics are stored internally, while the EGA graphics are stored in an external file, and have no relation to the CGA/VGA graphics (i.e. the game will work fine in CGA or VGA mode even if &amp;lt;tt&amp;gt;EGADAVE.DAV&amp;lt;/tt&amp;gt; is missing.)  The font and menu graphics (for CGA/VGA and EGA) are all stored in the main .exe file (as it is still possible to press F2 to change in and out of EGA mode with a missing/corrupted &amp;lt;tt&amp;gt;EGADAVE.DAV&amp;lt;/tt&amp;gt; file.)&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
{{BeginFileFormatTools|Type=game}}&lt;br /&gt;
{{FileFormatTool&lt;br /&gt;
| Name = [[Camoto]]&lt;br /&gt;
| Platform = Linux console/GUI&lt;br /&gt;
| grp = N/A&lt;br /&gt;
| map = Edit&lt;br /&gt;
| gfx = Edit&lt;br /&gt;
| mus = N/A&lt;br /&gt;
| sfx = No&lt;br /&gt;
| txt = No&lt;br /&gt;
| sav = N/A&lt;br /&gt;
| exe = No&lt;br /&gt;
}}&lt;br /&gt;
{{EndFileFormatTools}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Softdisk]]&lt;/div&gt;</summary>
		<author><name>Eros</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Crystal_Caves_Map_Format&amp;diff=4124</id>
		<title>Crystal Caves Map Format</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Crystal_Caves_Map_Format&amp;diff=4124"/>
		<updated>2012-05-01T13:32:41Z</updated>

		<summary type="html">&lt;p&gt;Eros: Linking UNLZEXE&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{NeedMoreInfo}}&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;Crystal Caves Map Format&#039;&#039; describes a particular section of data within the main [[Crystal Caves]] executable file, where the game levels are stored.  Each level is 40 tiles wide and a varying number of tiles high.&lt;br /&gt;
&lt;br /&gt;
== Location ==&lt;br /&gt;
&lt;br /&gt;
The levels are stored inside the executable. To view them, the executable must be decompressed (UNP&#039;d; [[UNLZEXE]] works fine for this.) After decompression, the levels for episodes 1 and 2 are stored at offset 0x8C30 (seg000:7332) or 0x8CE0 (depending on the decompression utility) and take up just under 17kB of space. The levels for episode 3 are stored at offset 0x8F24 in the UNLZEXE&#039;d executable.&lt;br /&gt;
&lt;br /&gt;
There are 19 levels, including the main map and two story levels (used at the start and end of the game.)  Each level is stored in order, beginning with the introduction/story, finale/story, main map, then level 1, 2, 3, etc.&lt;br /&gt;
&lt;br /&gt;
The number of rows for each map is hard-coded into the executable as machine instructions, not as an array of heights for each level.  In addition, some maps can use data from other maps (in most cases the first or the last row) or use two data-rows to produce a single row on the map.  Practically, this makes it very hard to increase a level&#039;s height and causes a lot of restrictions to modifying the maps.  The levels (not counting Intro and Finale) are all sized 40 x 24 tiles and it is believed that each level uses 24 rows of data, with the following exceptions:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Level !! Rows of data&lt;br /&gt;
|-&lt;br /&gt;
| Intro || 5&lt;br /&gt;
|-&lt;br /&gt;
| Finale || 6&lt;br /&gt;
|-&lt;br /&gt;
| Main map || 25&lt;br /&gt;
|-&lt;br /&gt;
| Level 7 || 23&lt;br /&gt;
|-&lt;br /&gt;
| Level 8 || 23&lt;br /&gt;
|-&lt;br /&gt;
| Level 14 || 23&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Format ==&lt;br /&gt;
&lt;br /&gt;
Each map is made up of a variable number of Pascal-style strings, one for each row.  This string format contains no terminating 0x00, but rather stores the string length in the first byte.  Thus each row of each level begins with the byte 0x28 (decimal 40, the map width.)  Each subsequent byte in the string represents a single 16x16 tile.&lt;br /&gt;
&lt;br /&gt;
=== Map codes ===&lt;br /&gt;
&lt;br /&gt;
There is currently no known formula to convert map codes into tileset indices.  Maps use byte 0x20 for &#039;no tile&#039; (drawn with some background image), which maps to different images depending on the area within the level, so there must be some other data controlling which background tiles to use in which areas.&lt;br /&gt;
&lt;br /&gt;
==== BlitzMax Code ====&lt;br /&gt;
&lt;br /&gt;
This is the code of a very simple map viewer for Crystal Caves. You need to convert the tile graphics from &amp;lt;tt&amp;gt;CC1.GFX&amp;lt;/tt&amp;gt; to PNG with [[Wombat]] and UNLZEXE the executable to use this code.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&#039;Crystal Caves Map Viewer&lt;br /&gt;
&#039;by K1n9_Duk3&lt;br /&gt;
&lt;br /&gt;
SuperStrict&lt;br /&gt;
&lt;br /&gt;
Local TileImg:TImage = LoadAnimImage(&amp;quot;cc1.gfx.png&amp;quot;, 16, 16, 0, 1150)&lt;br /&gt;
Local in:TStream = ReadFile(&amp;quot;CC1-UNLZ.EXE&amp;quot;)&lt;br /&gt;
Local Maps:Byte[800, 40]&lt;br /&gt;
&lt;br /&gt;
Local MaxY:Int&lt;br /&gt;
&lt;br /&gt;
If in&lt;br /&gt;
	SeekStream(in, $8ce0)	&#039;CC1 &amp;amp; CC2&lt;br /&gt;
&#039;	SeekStream(in, $8f24)	&#039;CC3&lt;br /&gt;
	Local y:Int&lt;br /&gt;
	Repeat&lt;br /&gt;
		If ReadByte(in) &amp;lt;&amp;gt; 40 Then Exit&lt;br /&gt;
		&lt;br /&gt;
		Local s$ = &amp;quot;&amp;quot;&lt;br /&gt;
		For Local x:Int = 0 Until 40&lt;br /&gt;
			Local b:Byte = ReadByte(in)&lt;br /&gt;
			Maps[y, x] = b&lt;br /&gt;
		Next&lt;br /&gt;
		y :+ 1&lt;br /&gt;
		&lt;br /&gt;
		MaxY = y&lt;br /&gt;
	Forever&lt;br /&gt;
	CloseFile(in)&lt;br /&gt;
Else&lt;br /&gt;
	End&lt;br /&gt;
EndIf&lt;br /&gt;
&lt;br /&gt;
AppTitle = &amp;quot;Crystal Caves Map Viewer&amp;quot;&lt;br /&gt;
Graphics 640, 480&lt;br /&gt;
	&lt;br /&gt;
SetClsColor(128, 128, 128)&lt;br /&gt;
&lt;br /&gt;
Local CamY:Int&lt;br /&gt;
Local Textmode:Byte&lt;br /&gt;
	&lt;br /&gt;
Repeat&lt;br /&gt;
	Cls&lt;br /&gt;
	For Local y:Int = 0 Until 30&lt;br /&gt;
		For Local x:Int = 0 Until 40&lt;br /&gt;
			Local MapTile:Byte = Maps[y+CamY, x]&lt;br /&gt;
			Local TileIndex:Int = -1&lt;br /&gt;
			&lt;br /&gt;
			Select MapTile&lt;br /&gt;
&lt;br /&gt;
			&#039;Crystals (indices for CC1):&lt;br /&gt;
			Case $52	TileIndex =  600&lt;br /&gt;
			Case $2B	TileIndex =  601&lt;br /&gt;
			Case $62	TileIndex =  602&lt;br /&gt;
			Case $63	TileIndex =  603&lt;br /&gt;
				&lt;br /&gt;
			&#039;Walls (indices for magenta walls):&lt;br /&gt;
			Case $72	TileIndex = 1100&lt;br /&gt;
			Case $74	TileIndex = 1101&lt;br /&gt;
			Case $79	TileIndex = 1102&lt;br /&gt;
			Case $66	TileIndex = 1104&lt;br /&gt;
			Case $67	TileIndex = 1105&lt;br /&gt;
			Case $68	TileIndex = 1106&lt;br /&gt;
			Case $34	TileIndex = 1108&lt;br /&gt;
			Case $35	TileIndex = 1109&lt;br /&gt;
			Case $36	TileIndex = 1110&lt;br /&gt;
			&lt;br /&gt;
			&#039;Metal beams (indices for blue beams):&lt;br /&gt;
			Case $44	TileIndex =  953&lt;br /&gt;
			Case $64	TileIndex =  954&lt;br /&gt;
			Case $98	TileIndex =  953	&#039;with hidden crystal&lt;br /&gt;
			Case $99	TileIndex =  954	&#039;with hidden crystal&lt;br /&gt;
			Case $9A	TileIndex =  955	&#039;with hidden crystal&lt;br /&gt;
			&lt;br /&gt;
			&#039;Small platform (blue index):&lt;br /&gt;
			Case $5F	TileIndex =  950&lt;br /&gt;
			&lt;br /&gt;
			&#039;Other Stuff:&lt;br /&gt;
			Case $21	TileIndex =  650&lt;br /&gt;
			Case $22	TileIndex =  630&lt;br /&gt;
			Case $23	TileIndex =  124&lt;br /&gt;
			Case $24	TileIndex =  860&lt;br /&gt;
			Case $25	TileIndex =  539&lt;br /&gt;
			Case $26	TileIndex =  662&lt;br /&gt;
			Case $28	TileIndex =  184&lt;br /&gt;
			Case $29	TileIndex =  185&lt;br /&gt;
			Case $2A	TileIndex =  105&lt;br /&gt;
			Case $2C	TileIndex =  537&lt;br /&gt;
			Case $2D	TileIndex =  536&lt;br /&gt;
			Case $2E	TileIndex =  538&lt;br /&gt;
			Case $2F	TileIndex =  480&lt;br /&gt;
			Case $30	TileIndex =   43&lt;br /&gt;
			Case $38	TileIndex =   34&lt;br /&gt;
			Case $39	TileIndex =   96&lt;br /&gt;
			Case $3A	TileIndex =  629&lt;br /&gt;
			Case $3D	TileIndex =  689&lt;br /&gt;
			Case $3F	TileIndex =   50&lt;br /&gt;
			Case $41	TileIndex =  882&lt;br /&gt;
			Case $42	TileIndex =    6&lt;br /&gt;
			Case $45	TileIndex =  680&lt;br /&gt;
			Case $46	TileIndex =  470&lt;br /&gt;
			Case $47	TileIndex =  298&lt;br /&gt;
			Case $48	TileIndex =  590&lt;br /&gt;
			Case $49	TileIndex =  233&lt;br /&gt;
			Case $4A	TileIndex =  453&lt;br /&gt;
			Case $4B	TileIndex = 1050&lt;br /&gt;
			Case $4C	TileIndex = 1051&lt;br /&gt;
			Case $4D	TileIndex =  300&lt;br /&gt;
			Case $53	TileIndex =  154&lt;br /&gt;
			Case $56, $D7, $D6	TileIndex =  594&lt;br /&gt;
			Case $57	TileIndex =  150&lt;br /&gt;
			Case $58	TileIndex =  562&lt;br /&gt;
			Case $59	TileIndex =  250&lt;br /&gt;
			Case $5D	TileIndex =  299&lt;br /&gt;
			Case $5E	TileIndex =  201&lt;br /&gt;
			Case $61, $71, $82	TileIndex =  560&lt;br /&gt;
			Case $69	TileIndex =  674&lt;br /&gt;
			Case $6A	TileIndex =  605&lt;br /&gt;
			Case $6B	TileIndex = 1052&lt;br /&gt;
			Case $6C	TileIndex = 1053&lt;br /&gt;
			Case $6F	TileIndex =  100&lt;br /&gt;
			Case $70	TileIndex =  604&lt;br /&gt;
			Case $73, $77, $84	TileIndex =  559				&lt;br /&gt;
			Case $76	TileIndex =  580&lt;br /&gt;
			Case $78	TileIndex =   12&lt;br /&gt;
			Case $7C	TileIndex =  184&lt;br /&gt;
			Case $7E	TileIndex =  212&lt;br /&gt;
			Case $85&lt;br /&gt;
				TileIndex =    427&lt;br /&gt;
				If Maps[y+CamY+1, x] &amp;lt;&amp;gt; $85 Then TileIndex = 431&lt;br /&gt;
			Case $86&lt;br /&gt;
				TileIndex =    422&lt;br /&gt;
				If Maps[y+CamY+1, x] &amp;lt;&amp;gt; $86 Then TileIndex = 423&lt;br /&gt;
			Case $87&lt;br /&gt;
				TileIndex =    0&lt;br /&gt;
				If Maps[y+CamY+1, x] &amp;lt;&amp;gt; $87 Then TileIndex = 4&lt;br /&gt;
			Case $88&lt;br /&gt;
				TileIndex =    1&lt;br /&gt;
				If Maps[y+CamY+1, x] &amp;lt;&amp;gt; $88 Then TileIndex = 5&lt;br /&gt;
			Case $89	TileIndex =  558&lt;br /&gt;
			Case $8A	TileIndex =  554&lt;br /&gt;
			Case $8B	TileIndex =    3&lt;br /&gt;
			Case $8C	TileIndex =  587&lt;br /&gt;
			Case $90	TileIndex =  386&lt;br /&gt;
			Case $91	TileIndex =  499&lt;br /&gt;
			Case $92	TileIndex =  476&lt;br /&gt;
			Case $93	TileIndex =  477&lt;br /&gt;
			Case $94	TileIndex =  378&lt;br /&gt;
			Case $95	TileIndex =  379&lt;br /&gt;
			Case $A0	TileIndex =  416&lt;br /&gt;
			Case $A1	TileIndex =  420&lt;br /&gt;
			Case $A2	TileIndex =  418&lt;br /&gt;
			Case $A3	TileIndex =  424&lt;br /&gt;
			Case $A4	TileIndex =  426&lt;br /&gt;
			Case $A5	TileIndex =  425&lt;br /&gt;
			Case $A6	TileIndex =  414&lt;br /&gt;
			Case $A7	TileIndex =  649&lt;br /&gt;
			Case $A8	TileIndex =  643&lt;br /&gt;
			Case $A9	TileIndex =  646&lt;br /&gt;
			Case $AA	TileIndex =  648&lt;br /&gt;
			Case $AB	TileIndex =  644&lt;br /&gt;
			Case $AC	TileIndex =  645&lt;br /&gt;
			Case $B0	TileIndex =    2&lt;br /&gt;
			Case $B1	TileIndex =  598&lt;br /&gt;
			Case $B2	TileIndex =  586&lt;br /&gt;
			Case $B3	TileIndex =  856&lt;br /&gt;
			Case $BA	TileIndex =  583&lt;br /&gt;
			Case $BB	TileIndex =  588&lt;br /&gt;
			Case $BC	TileIndex =  589&lt;br /&gt;
			Case $BD	TileIndex =  579&lt;br /&gt;
			Case $BE	TileIndex =  578&lt;br /&gt;
			Case $BF	TileIndex =  540&lt;br /&gt;
			Case $C0	TileIndex =  544&lt;br /&gt;
			Case $C1	TileIndex =  546&lt;br /&gt;
			Case $C2	TileIndex =  547&lt;br /&gt;
			Case $C3	TileIndex = 1057&lt;br /&gt;
			Case $C4	TileIndex = 1061&lt;br /&gt;
			Case $C6	TileIndex =  442&lt;br /&gt;
			Case $CA	TileIndex =  584&lt;br /&gt;
			Case $CB	TileIndex =  582&lt;br /&gt;
			Case $C7	TileIndex =  443&lt;br /&gt;
			Case $CD	TileIndex =  590&lt;br /&gt;
			Case $CE	TileIndex = 1056&lt;br /&gt;
			Case $CF	TileIndex =  543&lt;br /&gt;
			Case $D0	TileIndex =  557&lt;br /&gt;
			Case $D1	TileIndex =  542&lt;br /&gt;
			Case $D5	TileIndex =  639&lt;br /&gt;
			Case $D8	TileIndex =  581&lt;br /&gt;
			Case $D9	TileIndex =  545&lt;br /&gt;
			Case $DA	TileIndex =  541&lt;br /&gt;
			Case $E7	TileIndex =  548&lt;br /&gt;
			Case $E8	TileIndex =  394&lt;br /&gt;
			Case $E9	TileIndex =  395&lt;br /&gt;
			Case $EA	TileIndex =  396&lt;br /&gt;
			Case $EB	TileIndex =  397&lt;br /&gt;
			Case $EC	TileIndex =  398&lt;br /&gt;
			Case $ED	TileIndex =  399&lt;br /&gt;
			Case $F0	TileIndex =  852&lt;br /&gt;
			Case $F3	TileIndex = 1044&lt;br /&gt;
			Case $F4	TileIndex =    8&lt;br /&gt;
			Case $F5	TileIndex =   10&lt;br /&gt;
			Case $F6	TileIndex =  182&lt;br /&gt;
			Case $F7	TileIndex =  183&lt;br /&gt;
			Case $F9	TileIndex =  553&lt;br /&gt;
			Case $FA	TileIndex =  561&lt;br /&gt;
			Case $FB	TileIndex =  585&lt;br /&gt;
			Case $FC	TileIndex =  498&lt;br /&gt;
			Case $FD	TileIndex =  499&lt;br /&gt;
			Case $FE	TileIndex =  476&lt;br /&gt;
			EndSelect&lt;br /&gt;
			&lt;br /&gt;
			&#039;Don&#039;t draw after a $5B value:&lt;br /&gt;
			If Maps[y+CamY, x-1] = $5B Then TileIndex = -1&lt;br /&gt;
			&lt;br /&gt;
			If TileImg And Not Textmode And MapTile = $C5&lt;br /&gt;
				DrawImage(TileImg, x*16, y*16, 536)&lt;br /&gt;
				DrawImage(TileImg, x*16, y*16, 539)&lt;br /&gt;
			ElseIf TileImg And Not Textmode And  TileIndex &amp;gt;= 0&lt;br /&gt;
				DrawImage(TileImg, x*16, y*16, TileIndex)&lt;br /&gt;
			ElseIf MapTile &amp;lt;&amp;gt; $20&lt;br /&gt;
				DrawText(Hex(MapTile)[6..], x*16, y*16+3)&lt;br /&gt;
			EndIf&lt;br /&gt;
		Next&lt;br /&gt;
	Next&lt;br /&gt;
	Flip&lt;br /&gt;
	&lt;br /&gt;
	If KeyDown(KEY_DOWN)&lt;br /&gt;
		CamY :+ 1&lt;br /&gt;
		If CamY &amp;gt; MaxY-30 Then CamY = MaxY-30&lt;br /&gt;
	EndIf&lt;br /&gt;
		&lt;br /&gt;
	If KeyDown(KEY_UP)&lt;br /&gt;
		CamY :- 1&lt;br /&gt;
		If CamY &amp;lt; 0 Then CamY = 0&lt;br /&gt;
	EndIf&lt;br /&gt;
		&lt;br /&gt;
	If KeyHit(KEY_TAB)&lt;br /&gt;
		Textmode = Not Textmode&lt;br /&gt;
	EndIf&lt;br /&gt;
Until KeyHit(KEY_ESCAPE) Or AppTerminate()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Credits ==&lt;br /&gt;
&lt;br /&gt;
The location of the map data was discovered by [[User:Lemm|Lemm]].  If you find this information helpful in a project you&#039;re working on, please give credit where credit is due.  (A link back to this wiki would be nice too!)&lt;br /&gt;
&lt;br /&gt;
[[Category:Crystal Caves]]&lt;br /&gt;
[[Category:Map Files]]&lt;/div&gt;</summary>
		<author><name>Eros</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=LZEXE&amp;diff=4123</id>
		<title>LZEXE</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=LZEXE&amp;diff=4123"/>
		<updated>2012-05-01T13:31:52Z</updated>

		<summary type="html">&lt;p&gt;Eros: Linking UNLZEXE.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;LZEXE&#039;&#039;&#039; is a utility that compresses an executable file into a smaller, self-extracting form.  It was used in most early id and [[Apogee]] games, and many others.  LZEXE compressed executables can be unpacked by a few different utilities, the most widely used being [[UNLZEXE]].&lt;br /&gt;
&lt;br /&gt;
An LZEXE compressed executable can be recognized by the presence of the tag &amp;quot;LZ&amp;quot; at offset 0x1C in the .EXE file, followed by a version number that is either &amp;quot;09&amp;quot; or &amp;quot;91&amp;quot;.  Such executables must be decompressed before any useful inspection or hacking of the .EXE can take place.&lt;br /&gt;
&lt;br /&gt;
Note that some programs change the LZ91 signature to disguise the fact that LZEXE has been used.  If there are four sensible-looking characters at the same offset there&#039;s a good chance the file has been compressed with LZEXE and had its signature changed.  Luckily most decompression utilities don&#039;t look at this so they can decompress the file anyway.&lt;br /&gt;
&lt;br /&gt;
[[Category:Utilities]]&lt;/div&gt;</summary>
		<author><name>Eros</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Rescue_Rover&amp;diff=4122</id>
		<title>Rescue Rover</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Rescue_Rover&amp;diff=4122"/>
		<updated>2012-05-01T13:29:54Z</updated>

		<summary type="html">&lt;p&gt;Eros: Linking UNLZEXE&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Stub}}&lt;br /&gt;
{{GamePage|Rescue Rover}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Rescue Rover is a puzzle game by the [[ID Software]] group for [[Softdisk]] publishing, released in 1991. It is the first in a 2-part game series featuring Roger and his faithful dog Rover.  It&#039;s a whimsical arcade/puzzle game that pits you against evil Robots while you try to rescue Rover from their clutches. The second part, released the same year was [[Rescue Rover 2]], based on similar formats to the [[Commander Keen Dreams]] game.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== File formats ==&lt;br /&gt;
&lt;br /&gt;
This section lists the major file formats used in the game.&lt;br /&gt;
&lt;br /&gt;
* [[Commander Keen 1-3 Level format]] - &amp;lt;tt&amp;gt;LEVELxx.ROV&amp;lt;/tt&amp;gt; are game levels.&lt;br /&gt;
* [[Commander Keen EGA Header]] the EGA header is used to read graphics files.&lt;br /&gt;
* [[EGA Font format]] &amp;lt;tt&amp;gt;EGAFONT0.ROV&amp;lt;/tt&amp;gt; stores monochrome font used in the game&lt;br /&gt;
* [[Inverse Frequency Sound format]] - &amp;lt;tt&amp;gt;SOUNDS.ROV&amp;lt;/tt&amp;gt; sotes the game sounds.&lt;br /&gt;
* [[Rescue Rover Saved game format]] &amp;lt;tt&amp;gt;SAVEx.ROV&amp;lt;/tt&amp;gt; store the game&#039;s save files. They are 38 bytes long.&lt;br /&gt;
* [[SHL data]] - The start menu is in this format&lt;br /&gt;
* [[PIC Format#PIC format version 2|PIC format version 2]] - all files that have &amp;quot;PIC&amp;quot; in their name (e.g. &amp;lt;tt&amp;gt;TITLEPIC.ROV&amp;lt;/tt&amp;gt;) are in this format, compressed with [[RLEW compression#RLEB compression|RLEB compression]]&lt;br /&gt;
* [[Raw EGA data#Planar EGA data|Full-screen planar EGA]] Most graphics are in this format, compressed or rearranged in various ways. Sprites, tiles (two files) and fonts are all stored in separate files.&lt;br /&gt;
* [[Keen 1-3 RLE compression]] This is used to compress the ending and previews screens and is a modified form of RLE.&lt;br /&gt;
* Text is contained in the executable, the executable is compressed with [[LZW compression]], and can be uncompressed with [[UNLZEXE]].&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
The game was produced before [[Commander Keen 1-3]] but uses almost identical, though less efficient formats for nearly all its files.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Related Links ==&lt;br /&gt;
* [[Commander Keen 1-3]]&lt;br /&gt;
* [[Rescue Rover 2]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Softdisk]]&lt;br /&gt;
[[Category:id Software]]&lt;br /&gt;
[[Category:Puzzle]]&lt;/div&gt;</summary>
		<author><name>Eros</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=UNLZEXE&amp;diff=4121</id>
		<title>UNLZEXE</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=UNLZEXE&amp;diff=4121"/>
		<updated>2012-05-01T13:28:48Z</updated>

		<summary type="html">&lt;p&gt;Eros: Changed LZW link to LZW_compression&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Tool Infobox&lt;br /&gt;
 | Platform = DOS, Windows, Linux&lt;br /&gt;
 | Release = 1990-05-17 (v0.5)&lt;br /&gt;
 | Homepage = [http://sourceforge.net/projects/clonekeenplus/ sourceforge.net]&lt;br /&gt;
 | Download = [http://sourceforge.net/projects/clonekeenplus/files/Tools/unlzexe/ sourceforge.net]&lt;br /&gt;
 | Edit1 = Extraction&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
UNLZEXE is a program that decompresses [[LZW_compression|LZW compressed]] executables. It is notably used to decompress [[Commander_Keen_1-3]] or [[Catacomb]] executables before they can be patched. There is a 16-bit and 32/64-bit version available.&lt;br /&gt;
&lt;br /&gt;
{{TODO|Linking to the original project page (if it still exists) instead of the SourceForge one}}&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
=== DOS Version ===&lt;br /&gt;
If using the old, 16-bit version, you can simply drag-and-drop the compressed executable onto UNLZEXE. Successful decompression is heralded by the creation of a .OLZ file (Which contains the old, compressed file.) This works on most windows systems up to Windows Vista. Otherwise it must be run in DOSBox using the following commands:&lt;br /&gt;
&lt;br /&gt;
 Z:\&amp;gt;mount c &amp;quot;C:\the directory\the game is in&amp;quot;&lt;br /&gt;
 Z:\&amp;gt;c:&lt;br /&gt;
 C:\&amp;gt;unlzexe keen1.exe&lt;br /&gt;
&lt;br /&gt;
=== x86 / x64 Linux or Windows Versions ===&lt;br /&gt;
&lt;br /&gt;
In those versions you don&#039;t need DOSBox or mount anything. Just the following:&lt;br /&gt;
&lt;br /&gt;
 unlzexe file.exe&lt;br /&gt;
&lt;br /&gt;
It will generate file.exenew which is the extracted version.&lt;br /&gt;
You can also use the drag and drop method here on any windows version!&lt;br /&gt;
&lt;br /&gt;
NOTE: 64-bit Windows versions should be able to use the Win32 version.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* [http://keenmodding.org/viewtopic.php?t=1310 32/64 bit thread on keen:modding]&lt;br /&gt;
* [http://sourceforge.net/projects/clonekeenplus/files/Tools/unlzexe/win32/unlzexe081.zip/download Download 32/64-bit Windows Version]&lt;br /&gt;
* [http://sourceforge.net/projects/clonekeenplus/files/Tools/unlzexe/linux64/unlzexe081.zip/download Download 64-bit Linux Version]&lt;br /&gt;
* [http://sourceforge.net/projects/clonekeenplus/files/Tools/unlzexe/linux32/unlzexe081.zip/download Download 32-bit Linux Version]&lt;br /&gt;
* [http://files.commanderkeen.org/users/ceilick/UNLZEXE.EXE Download 16-bit version]&lt;br /&gt;
{{TODO|Link to the source code}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Extraction_tools]]&lt;br /&gt;
[[Category:Modding Tools]]&lt;/div&gt;</summary>
		<author><name>Eros</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Dangerous_Dave_in_Copyright_Infringement&amp;diff=4120</id>
		<title>Dangerous Dave in Copyright Infringement</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Dangerous_Dave_in_Copyright_Infringement&amp;diff=4120"/>
		<updated>2012-05-01T13:27:36Z</updated>

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

		<summary type="html">&lt;p&gt;Eros: Linking UNLZEXE&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;LZW compression is a common form of compression used in some early games to compress data and by most early games to compress their executables. It is notable in being one of the first compression methods to not compress on the byte level (Along with [[Huffman Compression]]) and for its efficiency.&lt;br /&gt;
&lt;br /&gt;
The basic concept for LZW is universal, though the implementations differ. In essence it compresses data by replacing strings of data with a &#039;codeword&#039; that represents them. The flexibility of this approach is that what each code word stands for is &#039;built up&#039; as the data is compressed/decompressed.&lt;br /&gt;
&lt;br /&gt;
At the start the compressing/decompressing program is given a &#039;dictionary&#039; of about 256 codewords, each 9 bits long and representing the strings $00-$FF (Plus possibly some reserved values.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        0000 - 00 (character)&lt;br /&gt;
        0001 - 01 (character)&lt;br /&gt;
            ...&lt;br /&gt;
        00FE - FE (character)&lt;br /&gt;
        00FF - FF (character)&lt;br /&gt;
        0100 - Reserved for errors...&lt;br /&gt;
        0101 - Reserved for end of compressed data...&lt;br /&gt;
        0102 - (not set)&lt;br /&gt;
        0103 - (not set)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Code words are 9 bits long until the dictionary is $1FF entries long, then they become 10 bit until $3FF, then 11 bits and so on. In some implementations the size of the dictionary is limited. [[Commander Keen 1-3]] for example limits itself to 4096 entries (Up to 12 bit codes) to save memory.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Deconding ==&lt;br /&gt;
&lt;br /&gt;
The decoding algorithm:&lt;br /&gt;
&lt;br /&gt;
    1   At the start the dictionary contains all possible roots;&lt;br /&gt;
    2   cW := the first code word in the codestream (it denotes a root);&lt;br /&gt;
    3   output the string.cW to the charstream;&lt;br /&gt;
    4   pW := cW;&lt;br /&gt;
    5   cW := next code word in the codestream;&lt;br /&gt;
    6   Is the string.cW present in the dictionary?&lt;br /&gt;
            a   if it is,&lt;br /&gt;
                    i   output the string.cW to the charstream;&lt;br /&gt;
                    ii  P := string.pW;&lt;br /&gt;
                    iii C := the first character of the string.cW;&lt;br /&gt;
                    iv  add the string P+C to the dictionary;&lt;br /&gt;
            b   if not,&lt;br /&gt;
                    i   P := string.pW;&lt;br /&gt;
                    ii  C := the first character of the string.pW;&lt;br /&gt;
                    iii output the string P+C to the charstream&lt;br /&gt;
                    iv  add the string P+C to the dictionary (now it corresponds to the cW);&lt;br /&gt;
    7   Are there more code words in the codestream?&lt;br /&gt;
            a   if yes, go back to step 4;&lt;br /&gt;
            b   if not, END.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Executables ==&lt;br /&gt;
&lt;br /&gt;
Many executables are LZW compressed in an interesting way. They consist of a decompressor and the compressed executable. When run, the decompressor extracts the executable, then runs it. [[UNLZEXE]] can be used to extract the decompressed executables from this which will run perfectly with other game files. It can be obtained here: http://www.dosclassics.com/download/198&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== An example ==&lt;br /&gt;
&lt;br /&gt;
[[Commander Keen 1-3]] uses its own implementation of the Lempel-Ziv-Welch ([[LZW compression]]) to compress the &amp;lt;tt&amp;gt;EGALATCH&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;EGASPRIT&amp;lt;/tt&amp;gt; files in episode 1 (It can also be used in episodes 2 and 3, but isn&#039;t.)&lt;br /&gt;
&lt;br /&gt;
The important points here is the limited size of the dictionary and the fact that entries $100 and $101 are reserved (The first to indicate an error in compression, the second to indicate end of compressed data.) The following data is taken from the EGALATCH file from Keen 1. We will decompress it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    0000  80 D3 01 00  0C 00 00 40 - A0 70 31 E9  F8 F8 78 38&lt;br /&gt;
    0010  08 08 00 07  FC 39 FF 04 - 5E 41 E1 30  B3 C4 5A 2F&lt;br /&gt;
&lt;br /&gt;
In this implementation the first 6 bytes are ignored (They are the decompressed data size and an executable variable.) The first code word encountered is 000000000 (First 9 bits) and thus outputs the string $00 (First dictionary entry.) This has set us up to step 4 and now things work slightly differently.&lt;br /&gt;
&lt;br /&gt;
The second code word is 100000010 (Next 9 bits) which is entry $102. Since this entry is NOT found in the dictionary yet, we will create this entry then output it. Entry $102 is created by taking the previous codeword&#039;s string adding to it the first byte of that string. In this case the previous codewrode&#039;s (0) string is $00. $00 + $00 is $00 $00 Entry $102 thus represents the string $00 $00&lt;br /&gt;
&lt;br /&gt;
The next code word is 100000011 which is entry $103, which again doesn&#039;t exist. Entry $103 is created just like with $102, except now since the previous codeword is $00 $00, entry $103 is $00 $00 $00&lt;br /&gt;
&lt;br /&gt;
The next code word is again $103, this IS found in the dictionary and is outputted ($00 $00 $00) however we now create dictionary entry $104 just like $103. (It is $00 $00 $00 $00)&lt;br /&gt;
&lt;br /&gt;
The next code word is $3B. It is outputted and entry $105 created ($00 $00 $00 $00 $3B)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In this manner more and more dictionary entries are created, representing longer and longer strings. Because of this, many games have built-in limits for how big the dictionary can get. (For example Keen 1 limits itself to 12 bit codes, that is, the dictionary is not increased in size after 4096 entries.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Source code ==&lt;br /&gt;
&lt;br /&gt;
Some example code is available in various languages showing how to decompress (and in some cases compress) files using the Keen&#039;s LZW algorithm.&lt;br /&gt;
&lt;br /&gt;
=== QuickBasic ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;qbasic&amp;quot;&amp;gt;&lt;br /&gt;
DECLARE FUNCTION READBITS% (FILE AS INTEGER, NUMBITS AS INTEGER)&lt;br /&gt;
DECLARE SUB LZWDECOMPRESS (INNAME AS STRING, OUTNAME AS STRING)&lt;br /&gt;
DECLARE SUB LZWOUTPUT (FILE AS INTEGER, DIC AS INTEGER, CHAR AS INTEGER)&lt;br /&gt;
&#039;&lt;br /&gt;
&#039; KEEN1 Compatible LZW Decompressor (Lempel-Ziv-Welch)&lt;br /&gt;
&#039; - by Napalm with thanks to Adurdin&#039;s work on ModKeen&lt;br /&gt;
&#039;&lt;br /&gt;
&#039; This source is Public Domain&lt;br /&gt;
&#039;&lt;br /&gt;
&#039;&lt;br /&gt;
&lt;br /&gt;
&#039; Allocate dictionary&lt;br /&gt;
DIM LZDIC(0 TO 4095) AS INTEGER&lt;br /&gt;
DIM LZCHR(0 TO 4095) AS INTEGER&lt;br /&gt;
&lt;br /&gt;
&#039; Test Function&lt;br /&gt;
LZWDECOMPRESS &amp;quot;EGALATCH.CK1&amp;quot;, &amp;quot;EGALATCH.DAT&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
SUB LZWDECOMPRESS (INNAME AS STRING, OUTNAME AS STRING)&lt;br /&gt;
        SHARED LZDIC() AS INTEGER, LZCHR() AS INTEGER&lt;br /&gt;
        DIM INFILE AS INTEGER, OUTFILE AS INTEGER, I AS INTEGER&lt;br /&gt;
        DIM BITLEN AS INTEGER, CURPOS AS INTEGER&lt;br /&gt;
        DIM CW AS INTEGER, PW AS INTEGER, C AS INTEGER, P AS INTEGER&lt;br /&gt;
        DIM CHECK AS INTEGER&lt;br /&gt;
&lt;br /&gt;
        &#039; Open files for input and output&lt;br /&gt;
        INFILE = FREEFILE&lt;br /&gt;
        OPEN INNAME FOR BINARY ACCESS READ AS INFILE&lt;br /&gt;
        OUTFILE = FREEFILE&lt;br /&gt;
        OPEN OUTNAME FOR BINARY ACCESS WRITE AS OUTFILE&lt;br /&gt;
        SEEK INFILE, 7&lt;br /&gt;
&lt;br /&gt;
       &lt;br /&gt;
        &#039; Fill dictionary with starting values&lt;br /&gt;
        FOR I = 0 TO 4095&lt;br /&gt;
                LZDIC(I) = -1&lt;br /&gt;
                IF I &amp;lt; 256 THEN&lt;br /&gt;
                        LZCHR(I) = I&lt;br /&gt;
                ELSE&lt;br /&gt;
                        LZCHR(I) = -1&lt;br /&gt;
                END IF&lt;br /&gt;
        NEXT I&lt;br /&gt;
&lt;br /&gt;
        &#039; Decompress input stream to output stream&lt;br /&gt;
        BITLEN = 9&lt;br /&gt;
        CURPOS = 258&lt;br /&gt;
        CW = READBITS(INFILE, BITLEN)&lt;br /&gt;
        LZWOUTPUT OUTFILE, LZDIC(CW), LZCHR(CW)&lt;br /&gt;
       &lt;br /&gt;
        WHILE CW &amp;lt;&amp;gt; &amp;amp;H100 AND CW &amp;lt;&amp;gt; &amp;amp;H101&lt;br /&gt;
                PW = CW&lt;br /&gt;
                CW = READBITS(INFILE, BITLEN)&lt;br /&gt;
                IF CW &amp;lt;&amp;gt; &amp;amp;H100 AND CW &amp;lt;&amp;gt; &amp;amp;H101 THEN&lt;br /&gt;
                        P = PW&lt;br /&gt;
                        CHECK = (LZCHR(CW) &amp;lt;&amp;gt; -1)&lt;br /&gt;
                       &lt;br /&gt;
                        IF CHECK THEN&lt;br /&gt;
                                TMP = CW&lt;br /&gt;
                        ELSE&lt;br /&gt;
                                TMP = PW&lt;br /&gt;
                        END IF&lt;br /&gt;
                        WHILE LZDIC(TMP) &amp;lt;&amp;gt; -1&lt;br /&gt;
                                TMP = LZDIC(TMP)&lt;br /&gt;
                        WEND&lt;br /&gt;
                        C = LZCHR(TMP)&lt;br /&gt;
                       &lt;br /&gt;
                        IF CHECK THEN&lt;br /&gt;
                                LZWOUTPUT OUTFILE, LZDIC(CW), LZCHR(CW)&lt;br /&gt;
                        ELSE&lt;br /&gt;
                                LZWOUTPUT OUTFILE, P, C&lt;br /&gt;
                        END IF&lt;br /&gt;
                       &lt;br /&gt;
                        IF CURPOS &amp;lt; 4096 THEN&lt;br /&gt;
                                LZDIC(CURPOS) = P&lt;br /&gt;
                                LZCHR(CURPOS) = C&lt;br /&gt;
                                CURPOS = CURPOS + 1&lt;br /&gt;
                                IF CURPOS = (2 ^ BITLEN - 1) AND BITLEN &amp;lt; 12 THEN&lt;br /&gt;
                                        BITLEN = BITLEN + 1&lt;br /&gt;
                                END IF&lt;br /&gt;
                        END IF&lt;br /&gt;
&lt;br /&gt;
                END IF&lt;br /&gt;
        WEND&lt;br /&gt;
       &lt;br /&gt;
        &#039; Close files&lt;br /&gt;
        CLOSE OUTFILE&lt;br /&gt;
        CLOSE INFILE&lt;br /&gt;
END SUB&lt;br /&gt;
&lt;br /&gt;
SUB LZWOUTPUT (FILE AS INTEGER, DIC AS INTEGER, CHAR AS INTEGER)&lt;br /&gt;
        SHARED LZDIC() AS INTEGER, LZCHR() AS INTEGER&lt;br /&gt;
        DIM LZSTK(0 TO 127) AS STRING * 1&lt;br /&gt;
        DIM X AS INTEGER, SP AS INTEGER&lt;br /&gt;
        DIM LDIC AS INTEGER, LCHAR AS INTEGER&lt;br /&gt;
&lt;br /&gt;
        LCHAR = CHAR&lt;br /&gt;
        LDIC = DIC&lt;br /&gt;
        SP = 0&lt;br /&gt;
        X = 1&lt;br /&gt;
&lt;br /&gt;
        DO&lt;br /&gt;
                IF SP &amp;gt;= 128 THEN&lt;br /&gt;
                        PRINT &amp;quot;LZW: Stack Overflow!&amp;quot;&lt;br /&gt;
                        END&lt;br /&gt;
                END IF&lt;br /&gt;
                LZSTK(SP) = CHR$(LCHAR)&lt;br /&gt;
                SP = SP + 1&lt;br /&gt;
                IF LDIC &amp;lt;&amp;gt; -1 THEN&lt;br /&gt;
                        LCHAR = LZCHR(LDIC)&lt;br /&gt;
                        LDIC = LZDIC(LDIC)&lt;br /&gt;
                ELSE&lt;br /&gt;
                        X = 0&lt;br /&gt;
                END IF&lt;br /&gt;
        LOOP WHILE X&lt;br /&gt;
       &lt;br /&gt;
        WHILE SP &amp;lt;&amp;gt; 0&lt;br /&gt;
                SP = SP - 1&lt;br /&gt;
                PUT FILE, , LZSTK(SP)&lt;br /&gt;
        WEND&lt;br /&gt;
END SUB&lt;br /&gt;
&lt;br /&gt;
FUNCTION READBITS% (FILE AS INTEGER, NUMBITS AS INTEGER)&lt;br /&gt;
        STATIC BITDAT AS STRING * 1, BITPOS AS INTEGER&lt;br /&gt;
        DIM BITVAL AS INTEGER, BIT AS INTEGER&lt;br /&gt;
&lt;br /&gt;
        BITVAL = 0&lt;br /&gt;
        FOR BIT = (NUMBITS - 1) TO 0 STEP -1&lt;br /&gt;
                IF BITPOS = 0 THEN&lt;br /&gt;
                        GET FILE, , BITDAT&lt;br /&gt;
                        BITPOS = 7&lt;br /&gt;
                ELSE&lt;br /&gt;
                        BITPOS = BITPOS - 1&lt;br /&gt;
                END IF&lt;br /&gt;
                IF ASC(BITDAT) AND 2 ^ BITPOS THEN&lt;br /&gt;
                        BITVAL = BITVAL OR 2 ^ BIT&lt;br /&gt;
                END IF&lt;br /&gt;
        NEXT BIT&lt;br /&gt;
&lt;br /&gt;
        READBITS% = BITVAL&lt;br /&gt;
END FUNCTION&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== FreeBasic ===&lt;br /&gt;
&lt;br /&gt;
This code does not suffer from the 64K memory limit imposed by QuickBasic and so is less efficient, but runs faster. It can be compiled with FreeBasic compiler using the -lan=qb switch. Aside from memory concerns, all code here is compatible with QuickBasic.&lt;br /&gt;
&lt;br /&gt;
The code before the subroutine is used to make a string containing the bit expansion of all values from 0 to 255. The subroutine takes a filename, reads the entire file into memory then expands each bit of data to a byte using the aforesaid string as Basic cannot deal with bits directly. cw$ is codeword, pw$ is the previous codeword, lun is the lowest dictionary entry that is empty, p is the location in the compressed data stream and bl is the length of codes in bits (Starting at nine bits increasing to 12)&lt;br /&gt;
&lt;br /&gt;
The dictionary is set before decompression. The first 258 are the starting dictionary, the remainder are cleared. (It is vital to reset the dictionary for each file) An error occurs if entry 256 is found in the data, &#039;distrupt&#039; is printed when the newest dictionary entry is not the lowest possible entry (This shouldn&#039;t happen but is possible.) Decompression ends at encountering entry 257, or when there is no more data to read.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;qbasic&amp;quot;&amp;gt;&lt;br /&gt;
DECLARE SUB LZWDEC (lfn AS STRING)&lt;br /&gt;
&lt;br /&gt;
x$ = &amp;quot;&amp;quot;&lt;br /&gt;
FOR l = 0 TO 255&lt;br /&gt;
 IF (l AND 128) &amp;gt; 0 THEN x$ = x$ + &amp;quot;1&amp;quot; ELSE x$ = x$ + &amp;quot;0&amp;quot;&lt;br /&gt;
 IF (l AND 64) &amp;gt; 0 THEN x$ = x$ + &amp;quot;1&amp;quot; ELSE x$ = x$ + &amp;quot;0&amp;quot;&lt;br /&gt;
 IF (l AND 32) &amp;gt; 0 THEN x$ = x$ + &amp;quot;1&amp;quot; ELSE x$ = x$ + &amp;quot;0&amp;quot;&lt;br /&gt;
 IF (l AND 16) &amp;gt; 0 THEN x$ = x$ + &amp;quot;1&amp;quot; ELSE x$ = x$ + &amp;quot;0&amp;quot;&lt;br /&gt;
 IF (l AND 8) &amp;gt; 0 THEN x$ = x$ + &amp;quot;1&amp;quot; ELSE x$ = x$ + &amp;quot;0&amp;quot;&lt;br /&gt;
 IF (l AND 4) &amp;gt; 0 THEN x$ = x$ + &amp;quot;1&amp;quot; ELSE x$ = x$ + &amp;quot;0&amp;quot;&lt;br /&gt;
 IF (l AND 2) &amp;gt; 0 THEN x$ = x$ + &amp;quot;1&amp;quot; ELSE x$ = x$ + &amp;quot;0&amp;quot;&lt;br /&gt;
 IF (l AND 1) &amp;gt; 0 THEN x$ = x$ + &amp;quot;1&amp;quot; ELSE x$ = x$ + &amp;quot;0&amp;quot;&lt;br /&gt;
NEXT l&lt;br /&gt;
LZEDEC &amp;quot;EGALATCH.CK1&amp;quot;&lt;br /&gt;
END&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;_________________________________________________&lt;br /&gt;
SUB LZWDEC (lfn AS STRING) &#039; Decompress LZW data&lt;br /&gt;
&#039;_________________________________________________&lt;br /&gt;
DIM lzw(0 TO 4095) AS STRING&lt;br /&gt;
PRINT lfn; &amp;quot; is LZW compressed, decompressing...&amp;quot;;&lt;br /&gt;
OPEN folder + lfn FOR BINARY AS #9&lt;br /&gt;
y$ = SPACE$(LOF(9))&lt;br /&gt;
GET #9, 1, y$&lt;br /&gt;
CLOSE #9&lt;br /&gt;
z$ = &amp;quot;&amp;quot;&lt;br /&gt;
FOR l = 7 TO LEN(y$)&lt;br /&gt;
 z$ = z$ + MID$(x$, (ASC(MID$(y$, l, 1)) * 8) + 1, 8)&lt;br /&gt;
NEXT l&lt;br /&gt;
&lt;br /&gt;
bl = 9&lt;br /&gt;
lun = 258&lt;br /&gt;
p = 1&lt;br /&gt;
cw$ = &amp;quot;&amp;quot;&lt;br /&gt;
y$ = &amp;quot;&amp;quot;&lt;br /&gt;
FOR l = 0 TO 4095&lt;br /&gt;
 IF l &amp;lt; 256 THEN lzw(l) = CHR$(l) ELSE lzw(l) = &amp;quot;&amp;quot;&lt;br /&gt;
NEXT l&lt;br /&gt;
DO&lt;br /&gt;
 IF lun = 511 THEN bl = 10&lt;br /&gt;
 IF lun = 1023 THEN bl = 11&lt;br /&gt;
 IF lun = 2047 THEN bl = 12&lt;br /&gt;
 pw$ = cw$&lt;br /&gt;
 u$ = MID$(z$, p, bl)&lt;br /&gt;
 p = p + bl&lt;br /&gt;
 y = 0&lt;br /&gt;
 FOR l = 1 TO bl&lt;br /&gt;
  IF MID$(u$, bl - l + 1, 1) = &amp;quot;1&amp;quot; THEN y = y + (2 ^ (l - 1))&lt;br /&gt;
 NEXT l&lt;br /&gt;
 IF y = 256 THEN&lt;br /&gt;
  PRINT &amp;quot;LZW error in Keen data!&amp;quot;&lt;br /&gt;
  OPEN &amp;quot;ERROR.DAT&amp;quot; FOR OUTPUT AS #9&lt;br /&gt;
  PRINT #9, y$;&lt;br /&gt;
  CLOSE&lt;br /&gt;
  END&lt;br /&gt;
 END IF&lt;br /&gt;
 IF y = 257 THEN EXIT DO&lt;br /&gt;
 IF cw$ = &amp;quot;&amp;quot; THEN&lt;br /&gt;
  cw$ = lzw(y)&lt;br /&gt;
  y$ = y$ + cw$&lt;br /&gt;
 ELSE&lt;br /&gt;
  IF lun &amp;lt; 4096 THEN&lt;br /&gt;
   IF lzw(y) = &amp;quot;&amp;quot; THEN&lt;br /&gt;
    cw$ = pw$ + LEFT$(pw$, 1)&lt;br /&gt;
    lzw(y) = cw$&lt;br /&gt;
    y$ = y$ + cw$&lt;br /&gt;
    IF y &amp;lt;&amp;gt; lun THEN PRINT &amp;quot;Disrupt!&amp;quot;&lt;br /&gt;
    lun = y + 1&lt;br /&gt;
   ELSE&lt;br /&gt;
    cw$ = lzw(y)&lt;br /&gt;
    y$ = y$ + cw$&lt;br /&gt;
    lzw(lun) = pw$ + LEFT$(cw$, 1)&lt;br /&gt;
    lun = lun + 1&lt;br /&gt;
   END IF&lt;br /&gt;
  ELSE&lt;br /&gt;
   IF lzw(y) = &amp;quot;&amp;quot; THEN&lt;br /&gt;
    y$ = y$ + cw$&lt;br /&gt;
   ELSE&lt;br /&gt;
    cw$ = lzw(y)&lt;br /&gt;
    y$ = y$ + cw$&lt;br /&gt;
   END IF&lt;br /&gt;
  END IF&lt;br /&gt;
 END IF&lt;br /&gt;
LOOP WHILE p &amp;lt; LEN(z$)&lt;br /&gt;
IF y = 257 THEN PRINT &amp;quot;done&amp;quot; ELSE PRINT &amp;quot;out of data.&amp;quot;&lt;br /&gt;
OPEN folder + LEFT$(lfn, 4) + extq FOR OUTPUT AS #9&lt;br /&gt;
PRINT #9, y$;&lt;br /&gt;
CLOSE #9&lt;br /&gt;
END SUB&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Category:Commander Keen 1-3]]&lt;br /&gt;
[[Category:File Formats]]&lt;br /&gt;
[[Category:Compressed Files]]&lt;/div&gt;</summary>
		<author><name>Eros</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Dangerous_Dave_2&amp;diff=4118</id>
		<title>Dangerous Dave 2</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Dangerous_Dave_2&amp;diff=4118"/>
		<updated>2012-05-01T13:25:20Z</updated>

		<summary type="html">&lt;p&gt;Eros: Linking UNLZEXE&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Stub}}&lt;br /&gt;
&lt;br /&gt;
{{GamePage}}&lt;br /&gt;
&lt;br /&gt;
Dangerous Dave 2, also known as Dangerous Dave in the Haunted Mansion (DDitHM)is the second installment of the popular Dangerous Dave series (Third if [[Dangerous Dave in Copyright Infringement|DDiCI]] is counted.) Following [[Dangerous Dave]] and preceding [[Dangerous Dave 3]]: Dave&#039;s Risky Rescue.&lt;br /&gt;
&lt;br /&gt;
In this installment Dave must rescue his younger brother Delbert from the Haunted Mansion. The game was severely cut down to fit onto a floppy disk and meet the release date, and so lacks appreciable story elements. The game was made utilizing a modified version of the [[Commander Keen 1-3]] engine and thus uses many formats similar to Keen, though usually with more advanced compression.&lt;br /&gt;
&lt;br /&gt;
== File formats ==&lt;br /&gt;
&lt;br /&gt;
This section lists the major file formats used in the game.&lt;br /&gt;
&lt;br /&gt;
* [[B800 Text]] - 4000-byte internal files are text screens shown at exit.&lt;br /&gt;
* [[Commander Keen 1-3 Level format]] - &amp;lt;tt&amp;gt;LEVELxx.DD2&amp;lt;/tt&amp;gt; are game levels.&lt;br /&gt;
* [[Commander Keen EGA Header]] the EGA header is stored internally and is used to read graphics files.&lt;br /&gt;
* [[Dave 2 Tileinfo format]] - information about the properties of tiles are stored internally in the executable.&lt;br /&gt;
* [[Dave 2 Tileset format]] - &amp;lt;tt&amp;gt;TILES.DD2&amp;lt;/tt&amp;gt; contains the game tiles.&lt;br /&gt;
* [[EGA Font format]] monochrome font used in the game is stored in the executable.&lt;br /&gt;
* [[Inverse Frequency Sound format]] - the sound file is stored internally and uses Apogees &#039;inverse frequency&#039; sound format.&lt;br /&gt;
* [[Raw EGA data#Planar|Full-screen planar EGA]] Most graphics are in this format, compressed or rearranged in various ways. For example, the 320x200 screen graphics are this compressed with [[Huffman Compression]].&lt;br /&gt;
&lt;br /&gt;
* [[RLEW compression]] This is used to compress the [[Dave 2 Intro format|INTRO.DD2]] file&lt;br /&gt;
* [[Dave 2 Huffman compression]] Used to compress most of the graphics files, a modification of the standard [[Huffman Compression]].&lt;br /&gt;
* Text is contained in the executable, the executable is compressed with LZ compression, and can be uncompressed with [[UNLZEXE]].&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
Dangerous Dave 2 stores the header and &amp;lt;tt&amp;gt;LATCH&amp;lt;/tt&amp;gt; internally in the executable at 74896 and 101096 respectively (in the UNLZEXE&#039;d executable.) Tiles are stored in a separate file &amp;lt;tt&amp;gt;EGATILES.DD2&amp;lt;/tt&amp;gt;. Since each tile may or may not be loaded in a level depending on whether it&#039;s needed, the tile file is composed of 858 128-byte entries, each containing 4-EGA planes for the tile.&lt;br /&gt;
&lt;br /&gt;
[[Shadow Knights]], published just weeks later uses the Dave engine also and is even more similar than Keen.&lt;br /&gt;
&lt;br /&gt;
Dave 2 is intermediate in development between [[Commander Keen 1-3]] and [[Commander Keen Dreams]] which followed it. Though basic, it makes use of several changes in format that are used in later Keen games.&lt;br /&gt;
&lt;br /&gt;
[[Category:Apogee]]&lt;br /&gt;
[[Category:Sidescroller]]&lt;/div&gt;</summary>
		<author><name>Eros</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Shadow_Knights&amp;diff=4117</id>
		<title>Shadow Knights</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Shadow_Knights&amp;diff=4117"/>
		<updated>2012-05-01T13:25:13Z</updated>

		<summary type="html">&lt;p&gt;Eros: Linking UNLZEXE&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Stub}}&lt;br /&gt;
&lt;br /&gt;
{{GamePage}}&lt;br /&gt;
&lt;br /&gt;
Shadow Knights is an early [[ID Software]] game made using the [[Dangerous Dave 2]] engine, itself modified from the [[Commander Keen 1-3]]  engine. Due to having to be cut down to fit on a floppy disk and to meet its release date, it lacks a number of features, such as appreciable story elements and animating tiles, much like Dave 2.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== File formats ==&lt;br /&gt;
&lt;br /&gt;
This section lists the major file formats used in the game.&lt;br /&gt;
&lt;br /&gt;
* [[B800 Text]] - 4000-byte internal files are text screens shown at exit.&lt;br /&gt;
* [[Commander Keen 1-3 Level format]] - &amp;lt;tt&amp;gt;LEVELxx.NIN&amp;lt;/tt&amp;gt; are game levels.&lt;br /&gt;
* [[Commander Keen EGA Header]] &amp;lt;tt&amp;gt;EGAHEAD.NIN&amp;lt;/tt&amp;gt; is used to read graphics files.&lt;br /&gt;
* [[Dave 2 Tileinfo format]] - information about the properties of tiles are stored internally in the executable&lt;br /&gt;
* [[Dave 2 Tileset format]] - &amp;lt;tt&amp;gt;EGATILES.NIN&amp;lt;/tt&amp;gt; contains the game tiles.&lt;br /&gt;
* [[EGA Font format]] monochrome font used in the game is stored in the executable.&lt;br /&gt;
* [[Inverse Frequency Sound format]] - the sound file is stored internally and uses Apogees &#039;inverse frequency&#039; sound format.&lt;br /&gt;
* [[PIC Format#PIC format version 1|PIC format version 1]] - the 640x200 end screen graphic is in this format, compressed with [[RLEW compression#RLEB compression|RLEB compression]].&lt;br /&gt;
* [[Raw EGA data#Planar|Full-screen planar EGA]] Most graphics are in this format, compressed or rearranged in various ways. For example, the sprites and the font file are this compressed with ?[[RLEW compression]]?.&lt;br /&gt;
&lt;br /&gt;
* ?[[RLEW compression]]? This is used to compress most graphics.&lt;br /&gt;
* Text is contained in the executable, the executable is compressed with LZ compression, and can be uncompressed with [[UNLZEXE]].&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
Shadow Knights is intermediate in development between [[Commander Keen 1-3]] and [[Commander Keen Dreams]] which followed it. Though basic, it makes use of several changes in format that are used in later Keen games.&lt;br /&gt;
&lt;br /&gt;
[[Category:Apogee]]&lt;br /&gt;
[[Category:Sidescroller]]&lt;/div&gt;</summary>
		<author><name>Eros</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Jill_of_the_Jungle&amp;diff=4116</id>
		<title>Jill of the Jungle</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Jill_of_the_Jungle&amp;diff=4116"/>
		<updated>2012-05-01T13:24:35Z</updated>

		<summary type="html">&lt;p&gt;Eros: Linking UNLZEXE&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Game Infobox&lt;br /&gt;
 | Levels = Edit&lt;br /&gt;
 | Tiles = No&lt;br /&gt;
 | Sprites = No&lt;br /&gt;
 | Fullscreen = None&lt;br /&gt;
 | Sound = No&lt;br /&gt;
 | Music = Edit&lt;br /&gt;
 | Text = No&lt;br /&gt;
 | Story = Edit&lt;br /&gt;
 | Interface = No&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Jill of the Jungle]] is the first version of the engine which would go on to power [[Xargon]].  It supports CGA, EGA and VGA graphics by way of &amp;quot;colour maps&amp;quot;, which dictate the CGA and EGA colours to be used to display each of the possible 256-colours of a given image.  This way only a single 256-colour image is supplied, rather than a different image for each display.&lt;br /&gt;
&lt;br /&gt;
Jill is also unique in that it is one of a very small number of games that include a level editor, albeit an undocumented one.  See the [[Using the official Jill of the Jungle level editor|tutorial]] for more details.&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
{{BeginFileFormatTools|Type=game}}&lt;br /&gt;
{{FileFormatTool&lt;br /&gt;
| Name = [[Using the official Jill of the Jungle level editor|Built-in editor]]&lt;br /&gt;
| Platform = DOS&lt;br /&gt;
| grp = N/A&lt;br /&gt;
| map = Edit&lt;br /&gt;
| gfx = No&lt;br /&gt;
| mus = No&lt;br /&gt;
| sfx = No&lt;br /&gt;
| txt = No&lt;br /&gt;
| sav = No&lt;br /&gt;
| exe = No&lt;br /&gt;
}}&lt;br /&gt;
{{FileFormatTool&lt;br /&gt;
| Name = [[Camoto]]&lt;br /&gt;
| Platform = Linux console/GUI&lt;br /&gt;
| grp = N/A&lt;br /&gt;
| map = Edit&lt;br /&gt;
| gfx = Read&lt;br /&gt;
| mus = Edit&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 = [http://ftp.funet.fi/pub/msdos/games/editors/jilledit.zip JillEdit] [http://www.stuntsillusion.com/download/jilledit.zip (mirror)]&lt;br /&gt;
| Platform = DOS&lt;br /&gt;
| grp = N/A&lt;br /&gt;
| map = Edit&lt;br /&gt;
| gfx = No&lt;br /&gt;
| mus = No&lt;br /&gt;
| sfx = No&lt;br /&gt;
| txt = No&lt;br /&gt;
| sav = No&lt;br /&gt;
| exe = No&lt;br /&gt;
}}&lt;br /&gt;
{{EndFileFormatTools}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
== File formats ==&lt;br /&gt;
&lt;br /&gt;
This section lists the major file formats used in the game.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! File name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;*.cfg&amp;lt;/tt&amp;gt;&lt;br /&gt;
| style=&amp;quot;background: #CCFFCC;&amp;quot; | Configuration file in [[CFG Format (Jill of the Jungle)]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;*.ddt&amp;lt;/tt&amp;gt;&lt;br /&gt;
| style=&amp;quot;background: #CCFFCC;&amp;quot; | Music in [[CMF Format]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;jill.dma&amp;lt;/tt&amp;gt;&lt;br /&gt;
| style=&amp;quot;background: #CCFFCC;&amp;quot; | Tile information in [[DMA Format]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;*.jn[123]&amp;lt;/tt&amp;gt;&lt;br /&gt;
| style=&amp;quot;background: #CCFFCC;&amp;quot; | Game levels in [[Jill of the Jungle Map Format]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;*.mac&amp;lt;/tt&amp;gt;&lt;br /&gt;
| style=&amp;quot;background: #CCFFCC;&amp;quot; | Input macros for demos in [[MAC Format (Jill of the Jungle)]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;jill[123].sha&amp;lt;/tt&amp;gt;&lt;br /&gt;
| style=&amp;quot;background: #CCFFCC;&amp;quot; | Shapes (images) in [[SHA Format]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;jill[123].vcl&amp;lt;/tt&amp;gt;&lt;br /&gt;
| style=&amp;quot;background: #CCFFCC;&amp;quot; | Sound and text assets in [[VCL Format]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;jn[123]save.[0-9]&amp;lt;/tt&amp;gt;&lt;br /&gt;
| style=&amp;quot;background: #CCFFCC;&amp;quot; | Saved games - just dumps of the entire level in its current state (same format as [[Jill of the Jungle Map Format|actual levels]])&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Palette  ==&lt;br /&gt;
[[Image:Jill of the Jungle palette.png|thumb|right|128px|Jill of the Jungle palette]]&lt;br /&gt;
The VGA palette can be found inside the .EXE file. The palette is the same in all episodes and versions.&lt;br /&gt;
&lt;br /&gt;
==== Episode 1: Jill of the Jungle ====&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Version!!CRC32!!Date!!Size!!Palette Offset&lt;br /&gt;
|-&lt;br /&gt;
|1.0||7899CC28||1992-06-01||216 804 bytes||0x1ED84&lt;br /&gt;
|-&lt;br /&gt;
|1.2||9540714E||1992-07-12||204 784 bytes||0x1F884&lt;br /&gt;
|-&lt;br /&gt;
|1.2(a)||51ADAE83||1992-07-30||206 963 bytes||0x1FD54&lt;br /&gt;
|-&lt;br /&gt;
|1.2(b)||171E9EC0||1992-08-21||206 712 bytes||0x1FC34&lt;br /&gt;
|-&lt;br /&gt;
|1.2(c)||C52CA6D9||1993-02-17||206 636 bytes||0x1FC04&lt;br /&gt;
|-&lt;br /&gt;
|1.2(d)||0E7C596F||1993-12-27||219 216 bytes||0x24A64&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Episode 2: Jill Goes Underground ====&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Version!!CRC32!!Date!!Size!!Palette Offset&lt;br /&gt;
|-&lt;br /&gt;
|1.0||6064EA0A||1992-06-17||65 166* bytes||0x1F0B4&amp;lt;sup&amp;gt;†&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|1.2(a)||?||1992-07-30||?||?&lt;br /&gt;
|-&lt;br /&gt;
|1.2(b)||17477A49||1992-08-21||204 158 bytes||0x1F6E4&lt;br /&gt;
|-&lt;br /&gt;
|1.2(c)||75176ED7||1993-02-17||204 096 bytes||0x1F6B4&lt;br /&gt;
|-&lt;br /&gt;
|1.2(d)||0FDB489E||1993-12-27||218 338 bytes||0x26A64&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Episode 3: Jill Saves the Prince ====&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Version!!CRC32!!Date!!Size!!Palette Offset&lt;br /&gt;
|-&lt;br /&gt;
|1.0||3B4D8C3B||1992-07-07||201 616 bytes||0x1F1F4&lt;br /&gt;
|-&lt;br /&gt;
|1.2(a)||B4EA288C||1992-07-30||204 425 bytes||0x1F804&lt;br /&gt;
|-&lt;br /&gt;
|1.2(b)||D5345AFB||1992-08-21||204 174 bytes||0x1F6E4&lt;br /&gt;
|-&lt;br /&gt;
|1.2(c)||3FFF0F6C||1993-02-17||204 112 bytes||0x1F6B4&lt;br /&gt;
|-&lt;br /&gt;
|1.2(d)||E27D4300||1993-12-27||218 370 bytes||0x26A64&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;amp;#42;This version has been packed using [[LZEXE|LZEXE91]].&amp;lt;br /&amp;gt;&lt;br /&gt;
†Data taken from version after uncompressing using [[UNLZEXE]].&lt;br /&gt;
&lt;br /&gt;
The palette is in [[VGA Palette|classic VGA format]] (6-bit RGB.)  Note that the [[SHA Format]] can override this palette.&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
* Since the level files are used for a lot of different things, you can e.g. swap &amp;lt;tt&amp;gt;INTRO.JN1&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;1.JN1&amp;lt;/tt&amp;gt; and then when you load the first level you&#039;ll be playing the intro screen.&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
* [http://jillofthejungle.110mb.com/home.html Unofficial Jill of the Jungle page] ([http://members.tripod.com/classic_roach/id14.html Older version], and [http://jill-of-the-jungle.tripod.com/jillsite/index.html alternate version])&lt;br /&gt;
* [http://ftp.funet.fi/pub/msdos/games/editors/jilledit.zip JillEdit] [http://www.stuntsillusion.com/download/jilledit.zip (mirror)] - a level editor for Jill of the Jungle created by Rory L. Fisher.&lt;br /&gt;
* [http://www.vgmaps.com/Atlas/PC/index.htm#JillOfTheJungle vgmaps.com] - all Jill maps as image files&lt;br /&gt;
&lt;br /&gt;
[[Category:Epic Megagames]]&lt;br /&gt;
[[Category:Sidescroller]]&lt;/div&gt;</summary>
		<author><name>Eros</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Commander_Keen_1-3&amp;diff=4115</id>
		<title>Commander Keen 1-3</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Commander_Keen_1-3&amp;diff=4115"/>
		<updated>2012-05-01T13:23:10Z</updated>

		<summary type="html">&lt;p&gt;Eros: /* File formats */ Linking UNZLEXE&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Stub}}&lt;br /&gt;
{{GamePage|Commander Keen 1}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Commander Keen episodes 1-3 was a revolutionary series that launched [[ID Software]]. The games made use of a number of formats and novel features that were to be adapted to other games ID produced. Keen is notable for being the first sidescrollling EGA game on the PC, and for cementing ID&#039;s love for EGA graphics (Most previous games had CGA, EGA and VGA graphics options, all later games were EGA, or had a separate CGA version.)&lt;br /&gt;
&lt;br /&gt;
In them, the hero, Commander Keen, must collect stolen parts of his spaceship hidden on Mars (1), stop a Vorticon ship blowing up earth (2) and finally storm Vorticon VI itself in search of the cause of all this trouble, the mysterious Grand Intellect.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== File formats ==&lt;br /&gt;
&lt;br /&gt;
This section lists the major file formats used in the game.&lt;br /&gt;
&lt;br /&gt;
* [[B800 Text]] - 4000-byte internal files are text screens shown at exit.&lt;br /&gt;
* [[Commander Keen 1-3 Level format]] - &amp;lt;tt&amp;gt;LEVELxx.CKy&amp;lt;/tt&amp;gt; are game levels.&lt;br /&gt;
* [[Commander Keen EGA Header]] the EGA header is used to read graphics files&lt;br /&gt;
* [[Keen 1-3 Tileinfo format]] - information about the properties of tiles are stored internally in the executable&lt;br /&gt;
* [[Commander Keen 1-3 Score format]] &amp;lt;tt&amp;gt;SCORES.CKy&amp;lt;/tt&amp;gt; stores the game&#039;s highscores&lt;br /&gt;
* [[Keen 1-3 Saved game format]] &amp;lt;tt&amp;gt;SAVEx.CKy&amp;lt;/tt&amp;gt; store the game&#039;s save files. Keen is one of the few early ID games to allow this.&lt;br /&gt;
* [[Inverse Frequency Sound format]] - the sound file is stored internally and uses Apogees &#039;inverse frequency&#039; sound format&lt;br /&gt;
* [[Raw EGA data#Planar EGA data|Full-screen planar EGA]] Most graphics are in this format, compressed or rearranged in various ways. For example, the 320x200 screen graphics are this compressed with [[Keen 1-3 RLE compression]], the &amp;lt;tt&amp;gt;EGALATCH&amp;lt;/tt&amp;gt; AND &amp;lt;tt&amp;gt;EGASPRIT&amp;lt;/tt&amp;gt; files use this too. Note that the screen&#039;s plane size is 8000 bytes, 192 bytes are just &#039;padding&#039;&lt;br /&gt;
&lt;br /&gt;
* [[Keen 1-3 RLE compression]] This is used to compress the ending and previews screens and is a modified form of RLE.&lt;br /&gt;
* [[Keen 1-3 LZW compression]] Used in episode 1 to compress the graphics files&lt;br /&gt;
* Text is contained in the executable, the executable is compressed with [[LZW compression]], and can be uncompressed with [[UNLZEXE]].&lt;br /&gt;
* The 1.34 executable is compressed with [[PKLite compression]]; the &amp;lt;tt&amp;gt;ARCHIVE.EXE&amp;lt;/tt&amp;gt; file that packages the game is a self extracting PKLite archive.&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
The so called &#039;Keen engine series&#039; begins with this game. The two games based on this engine are [[Dangerous Dave 2]] and [[Shadow Knights]]&lt;br /&gt;
&lt;br /&gt;
Most of the file formats here were reverse engineered by the Keen modding community.&lt;br /&gt;
&lt;br /&gt;
Commander Keen is mentioned in [[Epic Megagames]] [[Jill of the Jungle]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Related Links ==&lt;br /&gt;
* [[Commander Keen Dreams]]&lt;br /&gt;
* [[Commander Keen 4-6]]&lt;br /&gt;
* The [[KeenWiki:Main Page|Commander Keen Wiki]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Apogee]]&lt;br /&gt;
[[Category:id Software]]&lt;br /&gt;
[[Category:Sidescroller]]&lt;/div&gt;</summary>
		<author><name>Eros</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=UNLZEXE&amp;diff=4114</id>
		<title>UNLZEXE</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=UNLZEXE&amp;diff=4114"/>
		<updated>2012-05-01T13:21:48Z</updated>

		<summary type="html">&lt;p&gt;Eros: Cloned from keenwiki. Added infobox. Changed a few things.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Tool Infobox&lt;br /&gt;
 | Platform = DOS, Windows, Linux&lt;br /&gt;
 | Release = 1990-05-17 (v0.5)&lt;br /&gt;
 | Homepage = [http://sourceforge.net/projects/clonekeenplus/ sourceforge.net]&lt;br /&gt;
 | Download = [http://sourceforge.net/projects/clonekeenplus/files/Tools/unlzexe/ sourceforge.net]&lt;br /&gt;
 | Edit1 = Extraction&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
UNLZEXE is a program that decompresses [http://bellard.org/lzexe.html LZW] compressed executables. It is notably used to decompress [[Commander_Keen_1-3]] or [[Catacomb]] executables before they can be patched. There is a 16-bit and 32/64-bit version available.&lt;br /&gt;
&lt;br /&gt;
{{TODO|Linking to the original project page (if it still exists) instead of the SourceForge one}}&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
=== DOS Version ===&lt;br /&gt;
If using the old, 16-bit version, you can simply drag-and-drop the compressed executable onto UNLZEXE. Successful decompression is heralded by the creation of a .OLZ file (Which contains the old, compressed file.) This works on most windows systems up to Windows Vista. Otherwise it must be run in DOSBox using the following commands:&lt;br /&gt;
&lt;br /&gt;
 Z:\&amp;gt;mount c &amp;quot;C:\the directory\the game is in&amp;quot;&lt;br /&gt;
 Z:\&amp;gt;c:&lt;br /&gt;
 C:\&amp;gt;unlzexe keen1.exe&lt;br /&gt;
&lt;br /&gt;
=== x86 / x64 Linux or Windows Versions ===&lt;br /&gt;
&lt;br /&gt;
In those versions you don&#039;t need DOSBox or mount anything. Just the following:&lt;br /&gt;
&lt;br /&gt;
 unlzexe file.exe&lt;br /&gt;
&lt;br /&gt;
It will generate file.exenew which is the extracted version.&lt;br /&gt;
You can also use the drag and drop method here on any windows version!&lt;br /&gt;
&lt;br /&gt;
NOTE: 64-bit Windows versions should be able to use the Win32 version.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* [http://keenmodding.org/viewtopic.php?t=1310 32/64 bit thread on keen:modding]&lt;br /&gt;
* [http://sourceforge.net/projects/clonekeenplus/files/Tools/unlzexe/win32/unlzexe081.zip/download Download 32/64-bit Windows Version]&lt;br /&gt;
* [http://sourceforge.net/projects/clonekeenplus/files/Tools/unlzexe/linux64/unlzexe081.zip/download Download 64-bit Linux Version]&lt;br /&gt;
* [http://sourceforge.net/projects/clonekeenplus/files/Tools/unlzexe/linux32/unlzexe081.zip/download Download 32-bit Linux Version]&lt;br /&gt;
* [http://files.commanderkeen.org/users/ceilick/UNLZEXE.EXE Download 16-bit version]&lt;br /&gt;
{{TODO|Link to the source code}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Extraction_tools]]&lt;br /&gt;
[[Category:Modding Tools]]&lt;/div&gt;</summary>
		<author><name>Eros</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Catacomb_II&amp;diff=4113</id>
		<title>Catacomb II</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Catacomb_II&amp;diff=4113"/>
		<updated>2012-05-01T12:54:54Z</updated>

		<summary type="html">&lt;p&gt;Eros: Reordered sections. Information about the game should be on top.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Stub}}&lt;br /&gt;
{{Game Infobox&lt;br /&gt;
 | Levels = No&lt;br /&gt;
 | Tiles = Edit&lt;br /&gt;
 | Sprites = No&lt;br /&gt;
 | Fullscreen = No&lt;br /&gt;
 | Sound = No&lt;br /&gt;
 | Music = None&lt;br /&gt;
 | Text = No&lt;br /&gt;
 | Story = None&lt;br /&gt;
 | Interface = No&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Catacomb II&#039;&#039;&#039; is a top-down Gauntlet-style shooter, following on from [[Catacomb]].  It was later renamed to &#039;&#039;The Catacomb&#039;&#039;.&lt;br /&gt;
== File formats ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!File name!!Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;LEVEL#.CA2&amp;lt;/tt&amp;gt;&lt;br /&gt;
| style=&amp;quot;background: #CCFFCC;&amp;quot; | Game levels in [[Catacomb Map Format]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;SCORES.CA2&amp;lt;/tt&amp;gt;&lt;br /&gt;
| style=&amp;quot;background: #CCFFCC;&amp;quot; | High scores in [[Catacomb Highscore Format]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;GAME#.CA2&amp;lt;/tt&amp;gt;&lt;br /&gt;
| style=&amp;quot;background: #FFFFCC;&amp;quot; | Saved games in [[Catacomb Savegame Format]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;SOUNDS.CA2&amp;lt;/tt&amp;gt;&lt;br /&gt;
| style=&amp;quot;background: #CCFFCC;&amp;quot; | PC speaker sounds in [[Inverse Frequency Sound format]]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;EGACHARS.CA2&amp;lt;/tt&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;tt&amp;gt;CGACHARS.CA2&amp;lt;/tt&amp;gt;&lt;br /&gt;
| style=&amp;quot;background: #CCFFCC;&amp;quot; | Tile graphics for levels in [[xGAChars Format]]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;EGAPICS.CA2&amp;lt;/tt&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;tt&amp;gt;CGAPICS.CA2&amp;lt;/tt&amp;gt;&lt;br /&gt;
| style=&amp;quot;background: #CCFFCC;&amp;quot; | Other graphics in [[xGAPics Format]]&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 = [[Camoto]]&lt;br /&gt;
| Platform = Linux console/GUI&lt;br /&gt;
| grp = N/A&lt;br /&gt;
| map = No&lt;br /&gt;
| gfx = Tileset&lt;br /&gt;
| mus = N/A&lt;br /&gt;
| sfx = No&lt;br /&gt;
| txt = No&lt;br /&gt;
| sav = No&lt;br /&gt;
| exe = No&lt;br /&gt;
}}&lt;br /&gt;
{{EndFileFormatTools}}&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* More detail at [[Catacomb]], which shares the same engine.&lt;br /&gt;
&lt;br /&gt;
[[Category:Softdisk]]&lt;/div&gt;</summary>
		<author><name>Eros</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Catacomb&amp;diff=4112</id>
		<title>Catacomb</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Catacomb&amp;diff=4112"/>
		<updated>2012-05-01T12:52:44Z</updated>

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

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

		<summary type="html">&lt;p&gt;Eros: Examples?&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;It looks like this is a duplicate of [[Cosmo Tileset Format]].  Perhaps we should just link to that page instead? -- [[User:Malvineous|Malvineous]] 07:29, 19 January 2011 (GMT)&lt;br /&gt;
&lt;br /&gt;
:I didn&#039;t know about that. But it seems like the Cosmo page only covers the EGA format, not CGA. So there&#039;s a little bit of a reason to keep this page. Even though there&#039;s not that much of a difference as long as you know how to read/interpret the raw CGA data. --[[User:K1n9 Duk3|K1n9 Duk3]] 13:17, 19 January 2011 (GMT)&lt;br /&gt;
&lt;br /&gt;
:: That&#039;s true, I&#039;m not aware of any other CGA versions.  Maybe (eventually) we could move some of the EGA stuff off this page, onto [[Cosmo Tileset Format]] then rename that page to something like &amp;quot;Raw EGA tileset&amp;quot;.  Then we could rename *this* page to something like &amp;quot;Raw CGA tileset&amp;quot; and just have CGA info.  Well anyway my point was to make sure you don&#039;t spend too much time on the EGA side of things if it&#039;s already a known format, but you&#039;ve got some good explanations and things here we&#039;ll want to keep. -- [[User:Malvineous|Malvineous]] 11:23, 21 January 2011 (GMT)&lt;br /&gt;
&lt;br /&gt;
:::I just had a look at the Cosmo format. All the Cosmo tile graphics (both masked and unmasked) are [[Raw EGA data#Row-planar_EGA_data|Row-planar EGA data]], while the EGAChars are [[Raw EGA data#Graphic-planar_EGA_data|Graphic-planar EGA data]]. So I think we should leave this a stand-alone site. --[[User:K1n9 Duk3|K1n9 Duk3]] 15:29, 21 January 2011 (GMT)&lt;br /&gt;
&lt;br /&gt;
:::: Because the overall file structure is the same though (8x8 tiles) I&#039;d like to combine that fact into a single &amp;quot;tileset&amp;quot; page, and then maybe link to [[Raw EGA data]] when the time comes to describing the format of each tile.  Then your descriptions here could go onto the EGA data page instead of the tileset page (which would probably be more helpful, because there are other image/tileset formats which use different structures but have the same underlying EGA data format.) -- [[User:Malvineous|Malvineous]] 00:24, 22 January 2011 (GMT)&lt;br /&gt;
&lt;br /&gt;
::::: Now that I&#039;ve had enough time to think about it (and worked on the Cosmo and Duke 1 files), it might be okay to merge it. My idea was to add almost everything you need to know to read the format to this page. But that would just end up in the creation of countless redundant pages. --[[User:K1n9 Duk3|K1n9 Duk3]] 23:30, 23 January 2011 (GMT)&lt;br /&gt;
&lt;br /&gt;
:::::: Yes the focus of the wiki is less on implementation detail (to a point) and more on accurate descriptions of the data.  The problem with having too much implementation detail is that it limits you to certain languages, and then algorithms which may not necessarily be the most efficient.  Just having clear detail about the format leaves you free to think about the best way to solve the problem in your own situation.  But of course it is a balance, as having some code examples can make the topic much easier to understand.  If you want to add everything you need to know to read the format from scratch it&#039;s probably best writing an example program and linking to the heavily commented source code instead, so common/redundant info can be removed from the article without being lost entirely.  I&#039;ll probably merge the pages once I start implementing the formats in the projects I am working on (so that I know what I&#039;m doing is correct!) -- [[User:Malvineous|Malvineous]] 10:31, 24 January 2011 (GMT)&lt;br /&gt;
&lt;br /&gt;
Where did the examples go that [[User:K1n9 Duk3|K1n9 Duk3]] provided? Those examples were essential (atleast for me) in coding something to parse the format. I have some examples for the CGA tile format if we repost the old examples. -- [[User:Eros|Eros]] 12:31, 1 May 2012 (GMT)&lt;/div&gt;</summary>
		<author><name>Eros</name></author>
	</entry>
</feed>