<?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=Carbon14</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=Carbon14"/>
	<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/wiki/Special:Contributions/Carbon14"/>
	<updated>2026-05-15T03:15:17Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.11</generator>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=KMD_Format_(Fury_of_the_Furries)&amp;diff=12035</id>
		<title>KMD Format (Fury of the Furries)</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=KMD_Format_(Fury_of_the_Furries)&amp;diff=12035"/>
		<updated>2024-10-18T15:31:14Z</updated>

		<summary type="html">&lt;p&gt;Carbon14: /* Pattern */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Stub}}&lt;br /&gt;
{{Music Infobox&lt;br /&gt;
 | Type = Tracked&lt;br /&gt;
 | Instruments = FM&lt;br /&gt;
 | NumChannels = 6 + 5&lt;br /&gt;
 | NumTracks = 1&lt;br /&gt;
 | NumPatterns = 128&lt;br /&gt;
 | NumOrders = 1&lt;br /&gt;
 | Tags = Instrument names&lt;br /&gt;
 | Games = &lt;br /&gt;
   {{Game|Fury of the Furries}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
This format is used in [[Fury of the Furries]] for music. It is a modified version of the [[MOD Format|MOD music format]] using FM instruments rather than samples. The instruments are simple described in terms of the register settings for an [[OPL chip]] synthesizer on an Adlib or Soundblaster card. &lt;br /&gt;
&lt;br /&gt;
It&#039;s name *might* be based on Kalisto MOD Format, but this is speculation.&lt;br /&gt;
&lt;br /&gt;
The file has 6 MOD channels, and a further 5 channels devoted to just percussion, these oddities mean that it is unlikely that there are any MOD file players or tools which can handle this format. &lt;br /&gt;
&lt;br /&gt;
Most MOD players expect PCM samples for the instrument sounds, but the [[S3M Format]] used by Scream Tracker 3 has the option to handle this kind of OPL-FM instrument.&lt;br /&gt;
&lt;br /&gt;
2 music files are provided for each stage of the game, The game menu allows you to choose between &#039;fun&#039; or &#039;classical&#039; and this determines which of the music files is used for each stage.&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;
| UINT8 || Instrument count || Number of instruments in the file.&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || Pattern count || Number of patterns in the file.&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || End of song || End of song instruction. Usually 127. In PYRAMIDE.KMD it is 120.&lt;br /&gt;
|-&lt;br /&gt;
| UINT8(128) || Pattern table || Order in which to play the patterns.&lt;br /&gt;
|-&lt;br /&gt;
| UINT8(7) || Unknown || meaning currently unknown.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Instrument ==&lt;br /&gt;
&lt;br /&gt;
The KMD format uses FM instruments, directly specifying register values for a [[OPL chip|Yamaha OPL-2]] compatible synthesizer, such as that found on an Adlib or SoundBlaster. As such, the file contains NO sample data, and where you might expect details of the samples, instead we have these instrument definitions.&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(16) || Instrument name || The name of the instrument, if less than 16 characters it is NULL-terminated&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || Op1 Trem/Vib/Sus/KSR/F || Operator 1 Tremolo / Vibrato / Sustain / Key Scale Rate / Frequency Multiplication Factor&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || Op2 Trem/Vib/Sus/KSR/F || Operator 2 Tremolo / Vibrato / Sustain / Key Scale Rate / Frequency Multiplication Factor&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || Op1 KSL/Level || Operator 1 Key Scale Level / Output Level&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || Op2 KSL/Level || Operator 2 Key Scale Level / Output Level&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || Op1 A/D || Operator 1 Attack Rate / Decay Rate&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || Op2 A/D || Operator 2 Attack Rate / Decay Rate&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || Op1 S/R || Operator 1 Sustain Level / Release Rate&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || Op2 S/R || Operator 2 Sustain Level / Release Rate&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || Op1 Wave || Operator 1 Waveform&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || Op2 Wave || Operator 2 Waveform&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || FB/Add || Feedback / Additive or FM select&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || Percussion || Indicates type of instrument&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Percussion value !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || This is a melodic instrument and will be played using 2 FM operators&lt;br /&gt;
|- &lt;br /&gt;
| 1 || Bass drum. Will be played using the bass drum channel on the OPL synthesizer&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Snare drum. Will be played using the snare drum channel&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Tom. Will be played using the tom drum channel&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Cymbal. This value is not seen in any files, but is assumed to be the top cymbal according to the synthesizer&#039;s feature set&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Hi-hat. Will be played using the hi-hat channel&lt;br /&gt;
|-&lt;br /&gt;
| FF || Instrument deleted. This instrument is not used in the song&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Pattern ==&lt;br /&gt;
&lt;br /&gt;
Each pattern consists of 64 steps. Normally the steps are played one after the other until the end of the pattern, and then the next pattern from the Pattern Table is started. The speed of the song dictates how much time elapses between each step being played. Normally trackers run at 50 ticks per second, so a speed of 5 would play 10 steps per second. However, since Fury of the Furries runs at 60fps, it is possible that there are 60 ticks per second in this format.&lt;br /&gt;
&lt;br /&gt;
Each step is 30 bytes long. It contains 6 4-byte values, one for each melodic channel, and a further 6 bytes to control the percussion. A dedicated percussion system is unusual in mod format, and this ties this format quite tightly to the capabilities of the Yamaha OPL2 synthesizer chip. A full pattern will be 64 * 30 = 1920 bytes in length.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Data type !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || Channel 1 Pitch || Note pitch in semitones.&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || Channel 1 Instrument || Instrument number (i.e. a value of 2 means the 2nd instrument defined in the file)&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || Channel 1 Effect Type || Type of player effect.&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || Channel 1 Effect Parameter || Parameter for effect&lt;br /&gt;
|-&lt;br /&gt;
| UINT8[4] || Channel 2 || Pitch, Instrument, Effect as for Channel 1&lt;br /&gt;
|-&lt;br /&gt;
| UINT8[4] || Channel 3 || ...&lt;br /&gt;
|-&lt;br /&gt;
| UINT8[4] || Channel 4 || ...&lt;br /&gt;
|-&lt;br /&gt;
| UINT8[4] || Channel 5 || ...&lt;br /&gt;
|-&lt;br /&gt;
| UINT8[4] || Channel 6 || ...&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || Percussion Note On || Bit flags to trigger the 5 percussion instruments   &amp;lt;pre&amp;gt;High bit -- -- -- BD SN TM CY HH Low bit&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| UINT8[5] || Unknown || Probably volume control for each of the 5 percussion instruments.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Credits ==&lt;br /&gt;
&lt;br /&gt;
This file format was reverse engineered by [[User:Carbon14|carbon14]]. 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>Carbon14</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=KMD_Format_(Fury_of_the_Furries)&amp;diff=12034</id>
		<title>KMD Format (Fury of the Furries)</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=KMD_Format_(Fury_of_the_Furries)&amp;diff=12034"/>
		<updated>2024-10-18T15:30:21Z</updated>

		<summary type="html">&lt;p&gt;Carbon14: Add known detail of pattern structure&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Stub}}&lt;br /&gt;
{{Music Infobox&lt;br /&gt;
 | Type = Tracked&lt;br /&gt;
 | Instruments = FM&lt;br /&gt;
 | NumChannels = 6 + 5&lt;br /&gt;
 | NumTracks = 1&lt;br /&gt;
 | NumPatterns = 128&lt;br /&gt;
 | NumOrders = 1&lt;br /&gt;
 | Tags = Instrument names&lt;br /&gt;
 | Games = &lt;br /&gt;
   {{Game|Fury of the Furries}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
This format is used in [[Fury of the Furries]] for music. It is a modified version of the [[MOD Format|MOD music format]] using FM instruments rather than samples. The instruments are simple described in terms of the register settings for an [[OPL chip]] synthesizer on an Adlib or Soundblaster card. &lt;br /&gt;
&lt;br /&gt;
It&#039;s name *might* be based on Kalisto MOD Format, but this is speculation.&lt;br /&gt;
&lt;br /&gt;
The file has 6 MOD channels, and a further 5 channels devoted to just percussion, these oddities mean that it is unlikely that there are any MOD file players or tools which can handle this format. &lt;br /&gt;
&lt;br /&gt;
Most MOD players expect PCM samples for the instrument sounds, but the [[S3M Format]] used by Scream Tracker 3 has the option to handle this kind of OPL-FM instrument.&lt;br /&gt;
&lt;br /&gt;
2 music files are provided for each stage of the game, The game menu allows you to choose between &#039;fun&#039; or &#039;classical&#039; and this determines which of the music files is used for each stage.&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;
| UINT8 || Instrument count || Number of instruments in the file.&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || Pattern count || Number of patterns in the file.&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || End of song || End of song instruction. Usually 127. In PYRAMIDE.KMD it is 120.&lt;br /&gt;
|-&lt;br /&gt;
| UINT8(128) || Pattern table || Order in which to play the patterns.&lt;br /&gt;
|-&lt;br /&gt;
| UINT8(7) || Unknown || meaning currently unknown.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Instrument ==&lt;br /&gt;
&lt;br /&gt;
The KMD format uses FM instruments, directly specifying register values for a [[OPL chip|Yamaha OPL-2]] compatible synthesizer, such as that found on an Adlib or SoundBlaster. As such, the file contains NO sample data, and where you might expect details of the samples, instead we have these instrument definitions.&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(16) || Instrument name || The name of the instrument, if less than 16 characters it is NULL-terminated&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || Op1 Trem/Vib/Sus/KSR/F || Operator 1 Tremolo / Vibrato / Sustain / Key Scale Rate / Frequency Multiplication Factor&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || Op2 Trem/Vib/Sus/KSR/F || Operator 2 Tremolo / Vibrato / Sustain / Key Scale Rate / Frequency Multiplication Factor&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || Op1 KSL/Level || Operator 1 Key Scale Level / Output Level&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || Op2 KSL/Level || Operator 2 Key Scale Level / Output Level&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || Op1 A/D || Operator 1 Attack Rate / Decay Rate&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || Op2 A/D || Operator 2 Attack Rate / Decay Rate&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || Op1 S/R || Operator 1 Sustain Level / Release Rate&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || Op2 S/R || Operator 2 Sustain Level / Release Rate&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || Op1 Wave || Operator 1 Waveform&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || Op2 Wave || Operator 2 Waveform&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || FB/Add || Feedback / Additive or FM select&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || Percussion || Indicates type of instrument&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Percussion value !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || This is a melodic instrument and will be played using 2 FM operators&lt;br /&gt;
|- &lt;br /&gt;
| 1 || Bass drum. Will be played using the bass drum channel on the OPL synthesizer&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Snare drum. Will be played using the snare drum channel&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Tom. Will be played using the tom drum channel&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Cymbal. This value is not seen in any files, but is assumed to be the top cymbal according to the synthesizer&#039;s feature set&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Hi-hat. Will be played using the hi-hat channel&lt;br /&gt;
|-&lt;br /&gt;
| FF || Instrument deleted. This instrument is not used in the song&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Pattern ==&lt;br /&gt;
&lt;br /&gt;
Each pattern consists of 64 steps. Normally the steps are played one after the other until the end of the pattern, and then the next pattern from the Pattern Table is started. The speed of the song dictates how much time elapses between each step being played. Normally trackers run at 50 ticks per second, so a speed of 5 would play 10 steps per second. However, since Fury of the Furries runs at 60fps, it is possible that there are 60 ticks per second in this format.&lt;br /&gt;
&lt;br /&gt;
Each step is 30 bytes long. It contains 6 4-byte values, one for each melodic channel, and a further 6 bytes to control the percussion. A dedicated percussion system is unusual in mod format, and this ties this format quite tightly to the capabilities of the Yamaha OPL2 synthesizer chip.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Data type !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || Channel 1 Pitch || Note pitch in semitones.&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || Channel 1 Instrument || Instrument number (i.e. a value of 2 means the 2nd instrument defined in the file)&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || Channel 1 Effect Type || Type of player effect.&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || Channel 1 Effect Parameter || Parameter for effect&lt;br /&gt;
|-&lt;br /&gt;
| UINT8[4] || Channel 2 || Pitch, Instrument, Effect as for Channel 1&lt;br /&gt;
|-&lt;br /&gt;
| UINT8[4] || Channel 3 || ...&lt;br /&gt;
|-&lt;br /&gt;
| UINT8[4] || Channel 4 || ...&lt;br /&gt;
|-&lt;br /&gt;
| UINT8[4] || Channel 5 || ...&lt;br /&gt;
|-&lt;br /&gt;
| UINT8[4] || Channel 6 || ...&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || Percussion Note On || Bit flags to trigger the 5 percussion instruments   &amp;lt;pre&amp;gt;High bit -- -- -- BD SN TM CY HH Low bit&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| UINT8[5] || Unknown || Probably volume control for each of the 5 percussion instruments.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Credits ==&lt;br /&gt;
&lt;br /&gt;
This file format was reverse engineered by [[User:Carbon14|carbon14]]. 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>Carbon14</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=MOD_Format&amp;diff=12033</id>
		<title>MOD Format</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=MOD_Format&amp;diff=12033"/>
		<updated>2024-10-18T15:06:51Z</updated>

		<summary type="html">&lt;p&gt;Carbon14: /* Patterns */ Filling out effects details&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Music Infobox&lt;br /&gt;
 | Type = Tracked&lt;br /&gt;
 | Instruments = FM or samples&lt;br /&gt;
 | NumChannels = 4 - 8&lt;br /&gt;
 | NumTracks = 1&lt;br /&gt;
 | NumPatterns = 128&lt;br /&gt;
 | NumOrders = 1&lt;br /&gt;
 | Tags = Instrument names&lt;br /&gt;
 | Games = &lt;br /&gt;
   {{Game|Fury of the Furries}}&lt;br /&gt;
   {{Game|Halloween Harry}}&lt;br /&gt;
   {{Game|Unreal Tournament}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
MOD is a name for a family of file formats typically used by a style of music player called a tracker. There have been many trackers and tracker style music libraries over the years, and as a result a number of variations of the format have developed.&lt;br /&gt;
&lt;br /&gt;
Typically MOD files include sampled sounds, but some formats rely on an FM synthesizer instead, or as well.&lt;br /&gt;
&lt;br /&gt;
Hopefully this page will outline the general principles of the MOD format. Follow the links for more specific details of actual MOD formats used by specific games.&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
The MOD format typically comprises 4 pieces of information.&lt;br /&gt;
&lt;br /&gt;
* A header which contains global information such as a song title and overall volume, as well an the number of entries in each of the other sections.&lt;br /&gt;
* An instrument table, containing one or more instruments, sounds that should be used to play the music. Most often these are audio samples, but some MOD formats allow for FM synth instruments.&lt;br /&gt;
* A pattern table, which indicates the order in which patterns should be played.&lt;br /&gt;
* The patterns themselves. Short sections of the song, represented as notes and effects.&lt;br /&gt;
&lt;br /&gt;
The patterns are played one at a time, using the order laid down in the pattern table.&lt;br /&gt;
&lt;br /&gt;
== Header section ==&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[20] || Title || Song title, if not 20 characters long it will be null terminated.&lt;br /&gt;
|-&lt;br /&gt;
| char[22] || Sample 1 name || Name of the first sample, if not 22 characters long it will be null terminated.&lt;br /&gt;
|-&lt;br /&gt;
| UINT16BE || Sample 1 length || Length in 2-byte words of the first sample.&lt;br /&gt;
|-&lt;br /&gt;
| INT8 || Sample 1 finetune || &lt;br /&gt;
|- &lt;br /&gt;
| UINT8 || Sample 1 volume ||&lt;br /&gt;
|-&lt;br /&gt;
| UINT16BE || Sample 1 repeat offset || Position in sample 1 to repeat from, when the note is held. In 2-byte words.&lt;br /&gt;
|-&lt;br /&gt;
| UINT16BE || Sample 1 repeat length || Length in 2-byte words of sample 1 repeat section.&lt;br /&gt;
|-&lt;br /&gt;
| char[22] || Sample 2 name || Name of the second sample...&lt;br /&gt;
|-&lt;br /&gt;
| || etc || Typically there will be 15 or 31 samples in the file, depending on the specific format.&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || Number of patterns || This is the number of patterns that need to be played, not necessarily the number of different patterns in the file. Some patterns may be played more than once.&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || Song end || What happens when the Number of patterns has been played.&lt;br /&gt;
|-&lt;br /&gt;
| UINT8[128] || Pattern table || The file contains at up to 128 different patterns, this table is the order in which patterns should be played.&lt;br /&gt;
|-&lt;br /&gt;
| FOURCC || File format tag || Code to indicate the specific tracker/MOD format.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Pattern Table ==&lt;br /&gt;
&lt;br /&gt;
The pattern table is fixed length, usually 128 bytes in length. Each byte indicates the number of a pattern to be played, and the total number of patterns to be played to complete the song is given in the Number of patterns byte. If a song contained a verse, chorus and bridge, (patterns 0, 1 and 2 respectively) then it might contain a pattern table &amp;lt;pre&amp;gt;00 00 01 00 01 02 00 01 01 01&amp;lt;/pre&amp;gt; to play verse, verse, chorus, verse, chorus, bridge, verse, chorus, chorus, chorus.&lt;br /&gt;
&lt;br /&gt;
The Song end byte indicates what happens when the number of patterns have been played. If this byte is greater than or equal to 127, the song will end. Otherwise it represents a position in the pattern table, where playing should continue, which allows the song to repeat, but it could have a non-repeating intro, played only the first time through.&lt;br /&gt;
&lt;br /&gt;
== Patterns ==&lt;br /&gt;
&lt;br /&gt;
The patterns are stored sequentially. The best way to identify the number of patterns in the file is to find the largest pattern number used in the pattern table and add 1. Sample data will usually follow directly after the last pattern.&lt;br /&gt;
&lt;br /&gt;
Each patterns contains 64 lines or steps. The MOD file will contain a number of different sound channels that play simultaneously, 4, 6 and 8-channel formats are common, and the specific format will indicate how many channels there should be. Each channel requires 4 bytes per step. So a 6 channel MOD file will require 4 * 6 * 64 bytes per pattern. Those 4 bytes in some order need to encode:&lt;br /&gt;
&lt;br /&gt;
* The instrument (a sample number from 1 - 15 (or 1 - 31).&lt;br /&gt;
* The pitch of the note.&lt;br /&gt;
* An optional effect&lt;br /&gt;
&lt;br /&gt;
The 4 bytes are broken into nibbles like so:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Byte 1 High !! Byte 1 Low !! Byte 2 !! Byte 3 High !! Byte 3 Low !! Byte 4&lt;br /&gt;
|-&lt;br /&gt;
| wwww || XXXX || xxxxxxxx || yyyy || ZZZZ || uuuuvvvv&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
wwwwyyyy is the sample number (which instrument)&lt;br /&gt;
&lt;br /&gt;
XXXXxxxxxxxx is an indication of the note pitch (for sampled data this is usually a period value)&lt;br /&gt;
&lt;br /&gt;
ZZZZuuuuvvvv is an optional effect&lt;br /&gt;
&lt;br /&gt;
Effects (in these effects, a tick is 1/50th of a second) :&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! ZZZZ !! name !! treat arguments as !!description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Arpeggio || uuuu vvvv || Play the original note, then the note plus xxxx semitones, then the note plus yyyy semitones: each for 1/3 of the step time&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Slide Up || uuuuvvvv || Increment the pitch (XXXXxxxxxxxx) by uuuuvvvv semitones every tick, so that the pitch increases during the step.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Slide Down || uuuuvvvv || Decremunt the pitch (XXXXxxxxxxxx) by uuuuvvvv semitones every tick, so that the pitch decreases during the step.&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Tone Portamento || uuuuvvvv || Start the note at the same frequency as the previous note. Each tick, move the period uuuuvvvv closer to the XXXXxxxxxxxx period, until either it reaches XXXXxxxxxxxx or you get to the next step.&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Vibrato || uuuu vvvv || Adjust the sample pitch up and down with an amplitude of +/- vvvv semitones at a rate of (uuuu * speed)/64 oscillations during the step.&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Tone Portamento + Volume Slide || uuuu vvvv || Adjust the volume of the channel while an existing effect 3 (Tone Portamento) is occurring. if uuuu is nonzero, the volume is increased, if vvvv is nonzero, the volume is decreased. The volume is changed by the value each tick until there is a new effect.&lt;br /&gt;
|-&lt;br /&gt;
| 6 || Vibrato + Volume Slide || uuuu vvvv || Adjust the volume of the channel while an existing effect 4 (Vibrato) is occurring. If uuuu is nonzero, the volume is increased, if vvvv is nonzero, the volume is decreased. The volume is changed by the value each tick until there is a new effect.&lt;br /&gt;
|-&lt;br /&gt;
| 7 || Tremolo || uuuu vvvv || Adjust the sample volume up and down with an amplitude of vvvv * (speed - 1) such than (uuuu * speed)/64 oscillations occur during the step.&lt;br /&gt;
|-&lt;br /&gt;
| 8 || Set Panning Position || uuuuvvvv || Set the channel panning position using uuuuvvvv. 0 is all the way to the left, 255 is all the way to the right.&lt;br /&gt;
|-&lt;br /&gt;
| 9 || Set Sample Offset || uuuuvvvv || Start the sample from some point in the middle rather than the beginning. multiply uuuuvvvv by 256 to get the start position in bytes from the beginning of the sample. If no sample is specified by wwwwyyyy, then the most recently played sample is retriggered.&lt;br /&gt;
|-&lt;br /&gt;
| A || Volume Slide || uuuu vvvv || Change the volume of samples on this channel. If uuuu is nonzero, the volume is increased, if vvvv is nonzero, the volume is decreased. The volume is changed by the value each tick until there is a new effect.&lt;br /&gt;
|-&lt;br /&gt;
| B || Position Jump || uuuuvvvv || Jump to the start of a new pattern. uuuuvvvv gives a position in the Pattern Table to jump to.  Note this is not a pattern number, but a position in the pattern table.&lt;br /&gt;
|-&lt;br /&gt;
| C || Set Volume || uuuuvvvv || Set the volume on this channel to uuuuvvvv. Legal volumes are in the range 0 to 64. This is true for all volume effects.&lt;br /&gt;
|-&lt;br /&gt;
| D || Pattern Break ||  uuuu vvvv || Jump straight to the start of the NEXT pattern in the pattern table. uuuu * 10 + vvvv is the step number in the pattern to start at. Note that there is a decimal 10 in that calculation, not 16.&lt;br /&gt;
|-&lt;br /&gt;
| E || Extended Effects || || See extended effects table below&lt;br /&gt;
|-&lt;br /&gt;
| F || Set Speed || uuuuvvvv || Set the speed of the playback. Often this effect will appear in one of the channels in the first step of the first pattern to be played, to set the song speed at the beginning. uuuuvvvv gives the number of ticks per step. During a song, this effect causes a speed change on the NEXT step. Valid speed values are from 1 to 31. A value larger than 31 should instead be interpreted as a value in beats per minute. 4 steps make up one beat in this scenario (therefore a single step equates to a sixteenth-note or a semiquaver). If no speed has been set in the first step, then the default speed is 6.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Extended effects &lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! ZZZZ !! uuuu !! name !! description&lt;br /&gt;
|-&lt;br /&gt;
| E || 0 || Set filter on/off || turn on a hardware filter if vvvv is non-zero, off otherwise.&lt;br /&gt;
|-&lt;br /&gt;
| E || 1 || Fineslide up || Functions like effect 1, but changes the pitch just once at the beginning of the step.&lt;br /&gt;
|-&lt;br /&gt;
| E || 2 || Fineslide down || Functions like effect 2, but changes the pitch just once at the beginning of the step.&lt;br /&gt;
|-&lt;br /&gt;
| E || 3 || Set glissando on/off || If vvvv is 1 turn on glissando, if 0 turn it off. While glissando is one, note slides occur at half a semitone at a time instead of 1 semitone.&lt;br /&gt;
|-&lt;br /&gt;
| E || 4 || Set vibrato waveform || Sets the waveform to be used for effect 4 vibrato. 0 is sine, 1 is a falling ramp, 2 is square, 3 is random, each retriggering when a new note is selected. 4 - 7 give the same waveforms, but without retriggering.&lt;br /&gt;
|-&lt;br /&gt;
| E || 5 || Set finetune value || When calculating the sample playback period for any given pitch, there is a finetune component. This effect overrides that finetune, to allow you to slightly detune a channel&lt;br /&gt;
|-&lt;br /&gt;
| E || 6 || Loop pattern || Specifies a looping section of a pattern. If vvvv is zero, this is the first step in the loop. If vvvv is nonzero it is the last step of the loop AND indicates how many times the loop should be played.&lt;br /&gt;
|-&lt;br /&gt;
| E || 7 || Set tremolo waveform || Sets the waveform to be used for effect 7 tremolo. The options are the same as for effect E4 above.&lt;br /&gt;
|-&lt;br /&gt;
| E || 8 || Rough panning || Sets the panning, not often implemented, less finesse than effect 8. 0 is all left, 15 is all right.&lt;br /&gt;
|-&lt;br /&gt;
| E || 9 || Retrigger sample || Retrigger the sample vvvv ticks into the step, and every vvvv ticks after that until the end of the step.&lt;br /&gt;
|-&lt;br /&gt;
| E || A || Fine volume slide up || Increase the volume of the channel by vvvv points just once.&lt;br /&gt;
|-&lt;br /&gt;
| E || B || Fine volume slide down || Decrease the volume of the channel by vvvv points just once.&lt;br /&gt;
|-&lt;br /&gt;
| E || C || Cut sample || Set the volume of the current sample to 0 AFTER vvvv ticks (Do not change the overall channel volume).&lt;br /&gt;
|-&lt;br /&gt;
| E || D || Delay sample || Delay the triggering of the sample until vvvv ticks in the step.&lt;br /&gt;
|-&lt;br /&gt;
| E || E || Delay pattern || Extend the length of the current step by vvvv steps. If the current speed was 6 ticks per step, then a value of 4 would cause this step to last 6 + 6 * 4 = 30 ticks. All notes and effects continue to play during this extension.&lt;br /&gt;
|-&lt;br /&gt;
| E || F || Invert loop || Play samples backward at a speed of vvvv. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Sample data ==&lt;br /&gt;
&lt;br /&gt;
After the patterns the file contains sample data. This is in 8-bit two&#039;s complement mono format. Each of the samples follows on from the previous, the file header will have indicated the length (in 16-bit words) of each of the samples.&lt;br /&gt;
&lt;br /&gt;
== Specific MOD formats ==&lt;br /&gt;
&lt;br /&gt;
Remember that this is just a general form for MOD files, each specific format will have it&#039;s own details, and may differ in important ways.&lt;br /&gt;
&lt;br /&gt;
[[4MD Format]]&lt;br /&gt;
&lt;br /&gt;
[[KMD Format (Fury of the Furries)]]&lt;br /&gt;
&lt;br /&gt;
[[S3M Format]]&lt;br /&gt;
&lt;br /&gt;
== External sources ==&lt;br /&gt;
&lt;br /&gt;
[https://github.com/lclevy/unmo3/blob/master/spec/mod.txt mod.txt] Link to a github copy of a file written many years ago by THUNDER (kurtt@sfu.ca) and revised and expanded by ByteRaver (erlandvo@hotmail.com)&lt;/div&gt;</summary>
		<author><name>Carbon14</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=MOD_Format&amp;diff=12032</id>
		<title>MOD Format</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=MOD_Format&amp;diff=12032"/>
		<updated>2024-10-17T07:27:51Z</updated>

		<summary type="html">&lt;p&gt;Carbon14: /* Patterns */ adjust line breaks&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Music Infobox&lt;br /&gt;
 | Type = Tracked&lt;br /&gt;
 | Instruments = FM or samples&lt;br /&gt;
 | NumChannels = 4 - 8&lt;br /&gt;
 | NumTracks = 1&lt;br /&gt;
 | NumPatterns = 128&lt;br /&gt;
 | NumOrders = 1&lt;br /&gt;
 | Tags = Instrument names&lt;br /&gt;
 | Games = &lt;br /&gt;
   {{Game|Fury of the Furries}}&lt;br /&gt;
   {{Game|Halloween Harry}}&lt;br /&gt;
   {{Game|Unreal Tournament}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
MOD is a name for a family of file formats typically used by a style of music player called a tracker. There have been many trackers and tracker style music libraries over the years, and as a result a number of variations of the format have developed.&lt;br /&gt;
&lt;br /&gt;
Typically MOD files include sampled sounds, but some formats rely on an FM synthesizer instead, or as well.&lt;br /&gt;
&lt;br /&gt;
Hopefully this page will outline the general principles of the MOD format. Follow the links for more specific details of actual MOD formats used by specific games.&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
The MOD format typically comprises 4 pieces of information.&lt;br /&gt;
&lt;br /&gt;
* A header which contains global information such as a song title and overall volume, as well an the number of entries in each of the other sections.&lt;br /&gt;
* An instrument table, containing one or more instruments, sounds that should be used to play the music. Most often these are audio samples, but some MOD formats allow for FM synth instruments.&lt;br /&gt;
* A pattern table, which indicates the order in which patterns should be played.&lt;br /&gt;
* The patterns themselves. Short sections of the song, represented as notes and effects.&lt;br /&gt;
&lt;br /&gt;
The patterns are played one at a time, using the order laid down in the pattern table.&lt;br /&gt;
&lt;br /&gt;
== Header section ==&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[20] || Title || Song title, if not 20 characters long it will be null terminated.&lt;br /&gt;
|-&lt;br /&gt;
| char[22] || Sample 1 name || Name of the first sample, if not 22 characters long it will be null terminated.&lt;br /&gt;
|-&lt;br /&gt;
| UINT16BE || Sample 1 length || Length in 2-byte words of the first sample.&lt;br /&gt;
|-&lt;br /&gt;
| INT8 || Sample 1 finetune || &lt;br /&gt;
|- &lt;br /&gt;
| UINT8 || Sample 1 volume ||&lt;br /&gt;
|-&lt;br /&gt;
| UINT16BE || Sample 1 repeat offset || Position in sample 1 to repeat from, when the note is held. In 2-byte words.&lt;br /&gt;
|-&lt;br /&gt;
| UINT16BE || Sample 1 repeat length || Length in 2-byte words of sample 1 repeat section.&lt;br /&gt;
|-&lt;br /&gt;
| char[22] || Sample 2 name || Name of the second sample...&lt;br /&gt;
|-&lt;br /&gt;
| || etc || Typically there will be 15 or 31 samples in the file, depending on the specific format.&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || Number of patterns || This is the number of patterns that need to be played, not necessarily the number of different patterns in the file. Some patterns may be played more than once.&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || Song end || What happens when the Number of patterns has been played.&lt;br /&gt;
|-&lt;br /&gt;
| UINT8[128] || Pattern table || The file contains at up to 128 different patterns, this table is the order in which patterns should be played.&lt;br /&gt;
|-&lt;br /&gt;
| FOURCC || File format tag || Code to indicate the specific tracker/MOD format.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Pattern Table ==&lt;br /&gt;
&lt;br /&gt;
The pattern table is fixed length, usually 128 bytes in length. Each byte indicates the number of a pattern to be played, and the total number of patterns to be played to complete the song is given in the Number of patterns byte. If a song contained a verse, chorus and bridge, (patterns 0, 1 and 2 respectively) then it might contain a pattern table &amp;lt;pre&amp;gt;00 00 01 00 01 02 00 01 01 01&amp;lt;/pre&amp;gt; to play verse, verse, chorus, verse, chorus, bridge, verse, chorus, chorus, chorus.&lt;br /&gt;
&lt;br /&gt;
The Song end byte indicates what happens when the number of patterns have been played. If this byte is greater than or equal to 127, the song will end. Otherwise it represents a position in the pattern table, where playing should continue, which allows the song to repeat, but it could have a non-repeating intro, played only the first time through.&lt;br /&gt;
&lt;br /&gt;
== Patterns ==&lt;br /&gt;
&lt;br /&gt;
The patterns are stored sequentially. The best way to identify the number of patterns in the file is to find the largest pattern number used in the pattern table and add 1. Sample data will usually follow directly after the last pattern.&lt;br /&gt;
&lt;br /&gt;
Each patterns contains 64 lines or steps. The MOD file will contain a number of different sound channels that play simultaneously, 4, 6 and 8-channel formats are common, and the specific format will indicate how many channels there should be. Each channel requires 4 bytes per step. So a 6 channel MOD file will require 4 * 6 * 64 bytes per pattern. Those 4 bytes in some order need to encode:&lt;br /&gt;
&lt;br /&gt;
* The instrument (a sample number from 1 - 15 (or 1 - 31).&lt;br /&gt;
* The pitch of the note.&lt;br /&gt;
* An optional effect&lt;br /&gt;
&lt;br /&gt;
The 4 bytes are broken into nibbles like so:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Byte 1 High !! Byte 1 Low !! Byte 2 !! Byte 3 High !! Byte 3 Low !! Byte 4&lt;br /&gt;
|-&lt;br /&gt;
| wwww || XXXX || xxxxxxxx || yyyy || ZZZZ || uuuuvvvv&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
wwwwyyyy is the sample number (which instrument)&lt;br /&gt;
&lt;br /&gt;
XXXXxxxxxxxx is an indication of the note pitch (for sampled data this is usually a period value)&lt;br /&gt;
&lt;br /&gt;
ZZZZuuuuvvvv is an optional effect&lt;br /&gt;
&lt;br /&gt;
Effects (in these effects, a tick is 1/50th of a second) :&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! ZZZZ !! name !! treat arguments as !!description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Arpeggio || uuuu vvvv || Play the original note, then the note plus xxxx semitones, then the note plus yyyy semitones: each for 1/3 of the step time&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Slide Up || uuuuvvvv || Increment the period (XXXXxxxxxxxx) by uuuuvvvv every tick, so that the pitch increases during the step.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Slide Down || uuuuvvvv || Decremunt the period (XXXXxxxxxxxx) by uuuuvvvv every tick, so that the pitch decreases during the step.&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Tone Portamento || uuuuvvvv || Start the note at the same frequency as the previous note. Each tick, move the period uuuuvvvv closer to the XXXXxxxxxxxx period, until either it reaches XXXXxxxxxxxx or you get to the next step.&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Vibrato || &lt;br /&gt;
|-&lt;br /&gt;
| 5 || Tone Portamento + Volume Slide&lt;br /&gt;
|-&lt;br /&gt;
| 6 || Vibrator + Volume Slide ||&lt;br /&gt;
|-&lt;br /&gt;
| 7 || Tremolo ||&lt;br /&gt;
|-&lt;br /&gt;
| 8 || Set Panning Position ||&lt;br /&gt;
|-&lt;br /&gt;
| 9 || Set Sample Offset ||&lt;br /&gt;
|-&lt;br /&gt;
| A || Volume Slide ||&lt;br /&gt;
|-&lt;br /&gt;
| B || Position Jump ||&lt;br /&gt;
|-&lt;br /&gt;
| C || Set Volume ||&lt;br /&gt;
|-&lt;br /&gt;
| D || Pattern Break ||&lt;br /&gt;
|-&lt;br /&gt;
| E || Extended Effects || || See extended effects table below&lt;br /&gt;
|-&lt;br /&gt;
| F || Set Speed ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Sample data ==&lt;br /&gt;
&lt;br /&gt;
After the patterns the file contains sample data. This is in 8-bit two&#039;s complement mono format. Each of the samples follows on from the previous, the file header will have indicated the length (in 16-bit words) of each of the samples.&lt;br /&gt;
&lt;br /&gt;
== Specific MOD formats ==&lt;br /&gt;
&lt;br /&gt;
Remember that this is just a general form for MOD files, each specific format will have it&#039;s own details, and may differ in important ways.&lt;br /&gt;
&lt;br /&gt;
[[4MD Format]]&lt;br /&gt;
&lt;br /&gt;
[[KMD Format (Fury of the Furries)]]&lt;br /&gt;
&lt;br /&gt;
[[S3M Format]]&lt;br /&gt;
&lt;br /&gt;
== External sources ==&lt;br /&gt;
&lt;br /&gt;
[https://github.com/lclevy/unmo3/blob/master/spec/mod.txt mod.txt] Link to a github copy of a file written many years ago by THUNDER (kurtt@sfu.ca) and revised and expanded by ByteRaver (erlandvo@hotmail.com)&lt;/div&gt;</summary>
		<author><name>Carbon14</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=KMD_Format_(Fury_of_the_Furries)&amp;diff=12028</id>
		<title>KMD Format (Fury of the Furries)</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=KMD_Format_(Fury_of_the_Furries)&amp;diff=12028"/>
		<updated>2024-10-16T15:12:18Z</updated>

		<summary type="html">&lt;p&gt;Carbon14: /* Instrument */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Stub}}&lt;br /&gt;
{{Music Infobox&lt;br /&gt;
 | Type = Tracked&lt;br /&gt;
 | Instruments = FM&lt;br /&gt;
 | NumChannels = 6 + 5&lt;br /&gt;
 | NumTracks = 1&lt;br /&gt;
 | NumPatterns = 128&lt;br /&gt;
 | NumOrders = 1&lt;br /&gt;
 | Tags = Instrument names&lt;br /&gt;
 | Games = &lt;br /&gt;
   {{Game|Fury of the Furries}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
This format is used in [[Fury of the Furries]] for music. It is a modified version of the [[MOD Format|MOD music format]] using FM instruments rather than samples. The instruments are simple described in terms of the register settings for an [[OPL chip]] synthesizer on an Adlib or Soundblaster card. &lt;br /&gt;
&lt;br /&gt;
It&#039;s name *might* be based on Kalisto MOD Format, but this is speculation.&lt;br /&gt;
&lt;br /&gt;
The file has 6 MOD channels, and a further 5 channels devoted to just percussion, these oddities mean that it is unlikely that there are any MOD file players or tools which can handle this format. &lt;br /&gt;
&lt;br /&gt;
Most MOD players expect PCM samples for the instrument sounds, but the [[S3M Format]] used by Scream Tracker 3 has the option to handle this kind of OPL-FM instrument.&lt;br /&gt;
&lt;br /&gt;
2 music files are provided for each stage of the game, The game menu allows you to choose between &#039;fun&#039; or &#039;classical&#039; and this determines which of the music files is used for each stage.&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;
| UINT8 || Instrument count || Number of instruments in the file.&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || Pattern count || Number of patterns in the file.&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || End of song || End of song instruction. Usually 127. In PYRAMIDE.KMD it is 120.&lt;br /&gt;
|-&lt;br /&gt;
| UINT8(128) || Pattern table || Order in which to play the patterns.&lt;br /&gt;
|-&lt;br /&gt;
| UINT8(7) || Unknown || meaning currently unknown.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Instrument ==&lt;br /&gt;
&lt;br /&gt;
The KMD format uses FM instruments, directly specifying register values for a [[OPL chip|Yamaha OPL-2]] compatible synthesizer, such as that found on an Adlib or SoundBlaster. As such, the file contains NO sample data, and where you might expect details of the samples, instead we have these instrument definitions.&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(16) || Instrument name || The name of the instrument, if less than 16 characters it is NULL-terminated&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || Op1 Trem/Vib/Sus/KSR/F || Operator 1 Tremolo / Vibrato / Sustain / Key Scale Rate / Frequency Multiplication Factor&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || Op2 Trem/Vib/Sus/KSR/F || Operator 2 Tremolo / Vibrato / Sustain / Key Scale Rate / Frequency Multiplication Factor&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || Op1 KSL/Level || Operator 1 Key Scale Level / Output Level&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || Op2 KSL/Level || Operator 2 Key Scale Level / Output Level&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || Op1 A/D || Operator 1 Attack Rate / Decay Rate&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || Op2 A/D || Operator 2 Attack Rate / Decay Rate&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || Op1 S/R || Operator 1 Sustain Level / Release Rate&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || Op2 S/R || Operator 2 Sustain Level / Release Rate&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || Op1 Wave || Operator 1 Waveform&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || Op2 Wave || Operator 2 Waveform&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || FB/Add || Feedback / Additive or FM select&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || Percussion || Indicates type of instrument&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Percussion value !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || This is a melodic instrument and will be played using 2 FM operators&lt;br /&gt;
|- &lt;br /&gt;
| 1 || Bass drum. Will be played using the bass drum channel on the OPL synthesizer&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Snare drum. Will be played using the snare drum channel&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Tom. Will be played using the tom drum channel&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Cymbal. This value is not seen in any files, but is assumed to be the top cymbal according to the synthesizer&#039;s feature set&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Hi-hat. Will be played using the hi-hat channel&lt;br /&gt;
|-&lt;br /&gt;
| FF || Instrument deleted. This instrument is not used in the song&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Credits ==&lt;br /&gt;
&lt;br /&gt;
This file format was reverse engineered by [[User:Carbon14|carbon14]]. 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>Carbon14</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=KMD_Format_(Fury_of_the_Furries)&amp;diff=12027</id>
		<title>KMD Format (Fury of the Furries)</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=KMD_Format_(Fury_of_the_Furries)&amp;diff=12027"/>
		<updated>2024-10-16T14:53:21Z</updated>

		<summary type="html">&lt;p&gt;Carbon14: /* Instrument */ Add details of percussion settings.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Stub}}&lt;br /&gt;
{{Music Infobox&lt;br /&gt;
 | Type = Tracked&lt;br /&gt;
 | Instruments = FM&lt;br /&gt;
 | NumChannels = 6 + 5&lt;br /&gt;
 | NumTracks = 1&lt;br /&gt;
 | NumPatterns = 128&lt;br /&gt;
 | NumOrders = 1&lt;br /&gt;
 | Tags = Instrument names&lt;br /&gt;
 | Games = &lt;br /&gt;
   {{Game|Fury of the Furries}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
This format is used in [[Fury of the Furries]] for music. It is a modified version of the [[MOD Format|MOD music format]] using FM instruments rather than samples. The instruments are simple described in terms of the register settings for an [[OPL chip]] synthesizer on an Adlib or Soundblaster card. &lt;br /&gt;
&lt;br /&gt;
It&#039;s name *might* be based on Kalisto MOD Format, but this is speculation.&lt;br /&gt;
&lt;br /&gt;
The file has 6 MOD channels, and a further 5 channels devoted to just percussion, these oddities mean that it is unlikely that there are any MOD file players or tools which can handle this format. &lt;br /&gt;
&lt;br /&gt;
Most MOD players expect PCM samples for the instrument sounds, but the [[S3M Format]] used by Scream Tracker 3 has the option to handle this kind of OPL-FM instrument.&lt;br /&gt;
&lt;br /&gt;
2 music files are provided for each stage of the game, The game menu allows you to choose between &#039;fun&#039; or &#039;classical&#039; and this determines which of the music files is used for each stage.&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;
| UINT8 || Instrument count || Number of instruments in the file.&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || Pattern count || Number of patterns in the file.&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || End of song || End of song instruction. Usually 127. In PYRAMIDE.KMD it is 120.&lt;br /&gt;
|-&lt;br /&gt;
| UINT8(128) || Pattern table || Order in which to play the patterns.&lt;br /&gt;
|-&lt;br /&gt;
| UINT8(7) || Unknown || meaning currently unknown.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Instrument ==&lt;br /&gt;
&lt;br /&gt;
The KMD format uses FM instruments, directly specifying register values for a [[OPL chip|Yamaha OPL-2]] compatible synthesizer, such as that found on an Adlib or SoundBlaster. As such, the file contains NO sample data, and where you might expect details of the samples, instead we have these instrument definitions.&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(16) || Instrument name || The name of the instrument, if less than 16 characters it is NULL-terminated&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || Op1 Trem/Vib/Sus/KSR/F || Operator 1 Tremolo / Vibrato / Sustain / Key Scale Rate / Frequency Multiplication Factor&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || Op2 Trem/Vib/Sus/KSR/F || Operator 2 Tremolo / Vibrato / Sustain / Key Scale Rate / Frequency Multiplication Factor&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || Op1 KSL/Level || Operator 1 Key Scale Level / Output Level&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || Op2 KSL/Level || Operator 2 Key Scale Level / Output Level&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || Op1 A/D || Operator 1 Attack Rate / Decay Rate&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || Op2 A/D || Operator 2 Attack Rate / Decay Rate&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || Op1 S/R || Operator 1 Sustain Level / Release Rate&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || Op2 S/R || Operator 2 Sustain Level / Release Rate&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || Op1 Wave || Operator 1 Waveform&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || Op2 Wave || Operator 2 Waveform&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || FB/Add || Feedback / Additive or FM select&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || Percussion || Indicates type of instrument&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Percussion value !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || This is a melodic instrument and will be played using 2 FM operators&lt;br /&gt;
|- &lt;br /&gt;
| 1 || Bass drum. Will be played using the bass drum channel on the OPL synthesizer&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Snare drum. Will be played using the snare drum channel&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Tom. This value is not seen in any files, but is assumed to be the tom drum because that fits with the synthesizer&#039;s feature set&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Cymbal. This value is not seen in any files, but is assumed to be the top cymbal according to the synthesizer&#039;s feature set&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Hi-hat. Will be played using the hi-hat channel&lt;br /&gt;
|-&lt;br /&gt;
| FF || Instrument deleted. This instrument is not used in the song&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Credits ==&lt;br /&gt;
&lt;br /&gt;
This file format was reverse engineered by [[User:Carbon14|carbon14]]. 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>Carbon14</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=MOD_Format&amp;diff=12026</id>
		<title>MOD Format</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=MOD_Format&amp;diff=12026"/>
		<updated>2024-10-16T14:37:57Z</updated>

		<summary type="html">&lt;p&gt;Carbon14: /* Patterns */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Music Infobox&lt;br /&gt;
 | Type = Tracked&lt;br /&gt;
 | Instruments = FM or samples&lt;br /&gt;
 | NumChannels = 4 - 8&lt;br /&gt;
 | NumTracks = 1&lt;br /&gt;
 | NumPatterns = 128&lt;br /&gt;
 | NumOrders = 1&lt;br /&gt;
 | Tags = Instrument names&lt;br /&gt;
 | Games = &lt;br /&gt;
   {{Game|Fury of the Furries}}&lt;br /&gt;
   {{Game|Halloween Harry}}&lt;br /&gt;
   {{Game|Unreal Tournament}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
MOD is a name for a family of file formats typically used by a style of music player called a tracker. There have been many trackers and tracker style music libraries over the years, and as a result a number of variations of the format have developed.&lt;br /&gt;
&lt;br /&gt;
Typically MOD files include sampled sounds, but some formats rely on an FM synthesizer instead, or as well.&lt;br /&gt;
&lt;br /&gt;
Hopefully this page will outline the general principles of the MOD format. Follow the links for more specific details of actual MOD formats used by specific games.&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
The MOD format typically comprises 4 pieces of information.&lt;br /&gt;
&lt;br /&gt;
* A header which contains global information such as a song title and overall volume, as well an the number of entries in each of the other sections.&lt;br /&gt;
* An instrument table, containing one or more instruments, sounds that should be used to play the music. Most often these are audio samples, but some MOD formats allow for FM synth instruments.&lt;br /&gt;
* A pattern table, which indicates the order in which patterns should be played.&lt;br /&gt;
* The patterns themselves. Short sections of the song, represented as notes and effects.&lt;br /&gt;
&lt;br /&gt;
The patterns are played one at a time, using the order laid down in the pattern table.&lt;br /&gt;
&lt;br /&gt;
== Header section ==&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[20] || Title || Song title, if not 20 characters long it will be null terminated.&lt;br /&gt;
|-&lt;br /&gt;
| char[22] || Sample 1 name || Name of the first sample, if not 22 characters long it will be null terminated.&lt;br /&gt;
|-&lt;br /&gt;
| UINT16BE || Sample 1 length || Length in 2-byte words of the first sample.&lt;br /&gt;
|-&lt;br /&gt;
| INT8 || Sample 1 finetune || &lt;br /&gt;
|- &lt;br /&gt;
| UINT8 || Sample 1 volume ||&lt;br /&gt;
|-&lt;br /&gt;
| UINT16BE || Sample 1 repeat offset || Position in sample 1 to repeat from, when the note is held. In 2-byte words.&lt;br /&gt;
|-&lt;br /&gt;
| UINT16BE || Sample 1 repeat length || Length in 2-byte words of sample 1 repeat section.&lt;br /&gt;
|-&lt;br /&gt;
| char[22] || Sample 2 name || Name of the second sample...&lt;br /&gt;
|-&lt;br /&gt;
| || etc || Typically there will be 15 or 31 samples in the file, depending on the specific format.&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || Number of patterns || This is the number of patterns that need to be played, not necessarily the number of different patterns in the file. Some patterns may be played more than once.&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || Song end || What happens when the Number of patterns has been played.&lt;br /&gt;
|-&lt;br /&gt;
| UINT8[128] || Pattern table || The file contains at up to 128 different patterns, this table is the order in which patterns should be played.&lt;br /&gt;
|-&lt;br /&gt;
| FOURCC || File format tag || Code to indicate the specific tracker/MOD format.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Pattern Table ==&lt;br /&gt;
&lt;br /&gt;
The pattern table is fixed length, usually 128 bytes in length. Each byte indicates the number of a pattern to be played, and the total number of patterns to be played to complete the song is given in the Number of patterns byte. If a song contained a verse, chorus and bridge, (patterns 0, 1 and 2 respectively) then it might contain a pattern table &amp;lt;pre&amp;gt;00 00 01 00 01 02 00 01 01 01&amp;lt;/pre&amp;gt; to play verse, verse, chorus, verse, chorus, bridge, verse, chorus, chorus, chorus.&lt;br /&gt;
&lt;br /&gt;
The Song end byte indicates what happens when the number of patterns have been played. If this byte is greater than or equal to 127, the song will end. Otherwise it represents a position in the pattern table, where playing should continue, which allows the song to repeat, but it could have a non-repeating intro, played only the first time through.&lt;br /&gt;
&lt;br /&gt;
== Patterns ==&lt;br /&gt;
&lt;br /&gt;
The patterns are stored sequentially. The best way to identify the number of patterns in the file is to find the largest pattern number used in the pattern table and add 1. Sample data will usually follow directly after the last pattern.&lt;br /&gt;
&lt;br /&gt;
Each patterns contains 64 lines or steps. The MOD file will contain a number of different sound channels that play simultaneously, 4, 6 and 8-channel formats are common, and the specific format will indicate how many channels there should be. Each channel requires 4 bytes per step. So a 6 channel MOD file will require 4 * 6 * 64 bytes per pattern. Those 4 bytes in some order need to encode:&lt;br /&gt;
&lt;br /&gt;
* The instrument (a sample number from 1 - 15 (or 1 - 31).&lt;br /&gt;
* The pitch of the note.&lt;br /&gt;
* An optional effect&lt;br /&gt;
&lt;br /&gt;
The 4 bytes are broken into nibbles like so:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Byte 1 High !! Byte 1 Low !! Byte 2 !! Byte 3 High !! Byte 3 Low !! Byte 4&lt;br /&gt;
|-&lt;br /&gt;
| wwww || XXXX || xxxxxxxx || yyyy || ZZZZ || uuuuvvvv&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
wwwwyyyy is the sample number (which instrument)&lt;br /&gt;
XXXXxxxxxxxx is an indication of the note pitch (for sampled data this is usually a period value)&lt;br /&gt;
ZZZZuuuuvvvv is an optional effect&lt;br /&gt;
&lt;br /&gt;
Effects (in these effects, a tick is 1/50th of a second) :&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! ZZZZ !! name !! treat arguments as !!description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Arpeggio || uuuu vvvv || Play the original note, then the note plus xxxx semitones, then the note plus yyyy semitones: each for 1/3 of the step time&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Slide Up || uuuuvvvv || Increment the period (XXXXxxxxxxxx) by uuuuvvvv every tick, so that the pitch increases during the step.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Slide Down || uuuuvvvv || Decremunt the period (XXXXxxxxxxxx) by uuuuvvvv every tick, so that the pitch decreases during the step.&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Tone Portamento || uuuuvvvv || Start the note at the same frequency as the previous note. Each tick, move the period uuuuvvvv closer to the XXXXxxxxxxxx period, until either it reaches XXXXxxxxxxxx or you get to the next step.&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Vibrato || &lt;br /&gt;
|-&lt;br /&gt;
| 5 || Tone Portamento + Volume Slide&lt;br /&gt;
|-&lt;br /&gt;
| 6 || Vibrator + Volume Slide ||&lt;br /&gt;
|-&lt;br /&gt;
| 7 || Tremolo ||&lt;br /&gt;
|-&lt;br /&gt;
| 8 || Set Panning Position ||&lt;br /&gt;
|-&lt;br /&gt;
| 9 || Set Sample Offset ||&lt;br /&gt;
|-&lt;br /&gt;
| A || Volume Slide ||&lt;br /&gt;
|-&lt;br /&gt;
| B || Position Jump ||&lt;br /&gt;
|-&lt;br /&gt;
| C || Set Volume ||&lt;br /&gt;
|-&lt;br /&gt;
| D || Pattern Break ||&lt;br /&gt;
|-&lt;br /&gt;
| E || Extended Effects || || See extended effects table below&lt;br /&gt;
|-&lt;br /&gt;
| F || Set Speed ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Sample data ==&lt;br /&gt;
&lt;br /&gt;
After the patterns the file contains sample data. This is in 8-bit two&#039;s complement mono format. Each of the samples follows on from the previous, the file header will have indicated the length (in 16-bit words) of each of the samples.&lt;br /&gt;
&lt;br /&gt;
== Specific MOD formats ==&lt;br /&gt;
&lt;br /&gt;
Remember that this is just a general form for MOD files, each specific format will have it&#039;s own details, and may differ in important ways.&lt;br /&gt;
&lt;br /&gt;
[[4MD Format]]&lt;br /&gt;
&lt;br /&gt;
[[KMD Format (Fury of the Furries)]]&lt;br /&gt;
&lt;br /&gt;
[[S3M Format]]&lt;br /&gt;
&lt;br /&gt;
== External sources ==&lt;br /&gt;
&lt;br /&gt;
[https://github.com/lclevy/unmo3/blob/master/spec/mod.txt mod.txt] Link to a github copy of a file written many years ago by THUNDER (kurtt@sfu.ca) and revised and expanded by ByteRaver (erlandvo@hotmail.com)&lt;/div&gt;</summary>
		<author><name>Carbon14</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=MOD_Format&amp;diff=12025</id>
		<title>MOD Format</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=MOD_Format&amp;diff=12025"/>
		<updated>2024-10-16T14:37:13Z</updated>

		<summary type="html">&lt;p&gt;Carbon14: Add effects table&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Music Infobox&lt;br /&gt;
 | Type = Tracked&lt;br /&gt;
 | Instruments = FM or samples&lt;br /&gt;
 | NumChannels = 4 - 8&lt;br /&gt;
 | NumTracks = 1&lt;br /&gt;
 | NumPatterns = 128&lt;br /&gt;
 | NumOrders = 1&lt;br /&gt;
 | Tags = Instrument names&lt;br /&gt;
 | Games = &lt;br /&gt;
   {{Game|Fury of the Furries}}&lt;br /&gt;
   {{Game|Halloween Harry}}&lt;br /&gt;
   {{Game|Unreal Tournament}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
MOD is a name for a family of file formats typically used by a style of music player called a tracker. There have been many trackers and tracker style music libraries over the years, and as a result a number of variations of the format have developed.&lt;br /&gt;
&lt;br /&gt;
Typically MOD files include sampled sounds, but some formats rely on an FM synthesizer instead, or as well.&lt;br /&gt;
&lt;br /&gt;
Hopefully this page will outline the general principles of the MOD format. Follow the links for more specific details of actual MOD formats used by specific games.&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
The MOD format typically comprises 4 pieces of information.&lt;br /&gt;
&lt;br /&gt;
* A header which contains global information such as a song title and overall volume, as well an the number of entries in each of the other sections.&lt;br /&gt;
* An instrument table, containing one or more instruments, sounds that should be used to play the music. Most often these are audio samples, but some MOD formats allow for FM synth instruments.&lt;br /&gt;
* A pattern table, which indicates the order in which patterns should be played.&lt;br /&gt;
* The patterns themselves. Short sections of the song, represented as notes and effects.&lt;br /&gt;
&lt;br /&gt;
The patterns are played one at a time, using the order laid down in the pattern table.&lt;br /&gt;
&lt;br /&gt;
== Header section ==&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[20] || Title || Song title, if not 20 characters long it will be null terminated.&lt;br /&gt;
|-&lt;br /&gt;
| char[22] || Sample 1 name || Name of the first sample, if not 22 characters long it will be null terminated.&lt;br /&gt;
|-&lt;br /&gt;
| UINT16BE || Sample 1 length || Length in 2-byte words of the first sample.&lt;br /&gt;
|-&lt;br /&gt;
| INT8 || Sample 1 finetune || &lt;br /&gt;
|- &lt;br /&gt;
| UINT8 || Sample 1 volume ||&lt;br /&gt;
|-&lt;br /&gt;
| UINT16BE || Sample 1 repeat offset || Position in sample 1 to repeat from, when the note is held. In 2-byte words.&lt;br /&gt;
|-&lt;br /&gt;
| UINT16BE || Sample 1 repeat length || Length in 2-byte words of sample 1 repeat section.&lt;br /&gt;
|-&lt;br /&gt;
| char[22] || Sample 2 name || Name of the second sample...&lt;br /&gt;
|-&lt;br /&gt;
| || etc || Typically there will be 15 or 31 samples in the file, depending on the specific format.&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || Number of patterns || This is the number of patterns that need to be played, not necessarily the number of different patterns in the file. Some patterns may be played more than once.&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || Song end || What happens when the Number of patterns has been played.&lt;br /&gt;
|-&lt;br /&gt;
| UINT8[128] || Pattern table || The file contains at up to 128 different patterns, this table is the order in which patterns should be played.&lt;br /&gt;
|-&lt;br /&gt;
| FOURCC || File format tag || Code to indicate the specific tracker/MOD format.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Pattern Table ==&lt;br /&gt;
&lt;br /&gt;
The pattern table is fixed length, usually 128 bytes in length. Each byte indicates the number of a pattern to be played, and the total number of patterns to be played to complete the song is given in the Number of patterns byte. If a song contained a verse, chorus and bridge, (patterns 0, 1 and 2 respectively) then it might contain a pattern table &amp;lt;pre&amp;gt;00 00 01 00 01 02 00 01 01 01&amp;lt;/pre&amp;gt; to play verse, verse, chorus, verse, chorus, bridge, verse, chorus, chorus, chorus.&lt;br /&gt;
&lt;br /&gt;
The Song end byte indicates what happens when the number of patterns have been played. If this byte is greater than or equal to 127, the song will end. Otherwise it represents a position in the pattern table, where playing should continue, which allows the song to repeat, but it could have a non-repeating intro, played only the first time through.&lt;br /&gt;
&lt;br /&gt;
== Patterns ==&lt;br /&gt;
&lt;br /&gt;
The patterns are stored sequentially. The best way to identify the number of patterns in the file is to find the largest pattern number used in the pattern table and add 1. Sample data will usually follow directly after the last pattern.&lt;br /&gt;
&lt;br /&gt;
Each patterns contains 64 lines or steps. The MOD file will contain a number of different sound channels that play simultaneously, 4, 6 and 8-channel formats are common, and the specific format will indicate how many channels there should be. Each channel requires 4 bytes per step. So a 6 channel MOD file will require 4 * 6 * 64 bytes per pattern. Those 4 bytes in some order need to encode:&lt;br /&gt;
&lt;br /&gt;
* The instrument (a sample number from 1 - 15 (or 1 - 31).&lt;br /&gt;
* The pitch of the note.&lt;br /&gt;
* An optional effect&lt;br /&gt;
&lt;br /&gt;
The 4 bytes are broken into nibbles like so:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Byte 1 High !! Byte 1 Low !! Byte 2 !! Byte 3 High !! Byte 3 Low !! Byte 4&lt;br /&gt;
|-&lt;br /&gt;
| wwww || XXXX || xxxxxxxx || yyyy || ZZZZ || uuuuvvvv&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
wwwwyyyy is the sample number (which instrument)&lt;br /&gt;
XXXXxxxxxxxx is an indication of the note pitch (for sampled data this is usually a period value)&lt;br /&gt;
ZZZZuuuuvvvv is an optional effect&lt;br /&gt;
&lt;br /&gt;
Effects (in these effects, a tick is 1/50th of a second) :&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! ZZZZ !! name !! treat argumeents as !!description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Arpeggio || uuuu vvvv || Play the original note, then the note plus xxxx semitones, then the note plus yyyy semitones: each for 1/3 of the step time&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Slide Up || uuuuvvvv || Increment the period (XXXXxxxxxxxx) by uuuuvvvv every tick, so that the pitch increases during the step.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Slide Down || uuuuvvvv || Decremunt the period (XXXXxxxxxxxx) by uuuuvvvv every tick, so that the pitch decreases during the step.&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Tone Portamento || uuuuvvvv || Start the note at the same frequency as the previous note. Each tick, move the period uuuuvvvv closer to the XXXXxxxxxxxx period, until either it reaches XXXXxxxxxxxx or you get to the next step.&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Vibrato || &lt;br /&gt;
|-&lt;br /&gt;
| 5 || Tone Portamento + Volume Slide&lt;br /&gt;
|-&lt;br /&gt;
| 6 || Vibrator + Volume Slide ||&lt;br /&gt;
|-&lt;br /&gt;
| 7 || Tremolo ||&lt;br /&gt;
|-&lt;br /&gt;
| 8 || Set Panning Position ||&lt;br /&gt;
|-&lt;br /&gt;
| 9 || Set Sample Offset ||&lt;br /&gt;
|-&lt;br /&gt;
| A || Volume Slide ||&lt;br /&gt;
|-&lt;br /&gt;
| B || Position Jump ||&lt;br /&gt;
|-&lt;br /&gt;
| C || Set Volume ||&lt;br /&gt;
|-&lt;br /&gt;
| D || Pattern Break ||&lt;br /&gt;
|-&lt;br /&gt;
| E || Extended Effects || See extended effects table below&lt;br /&gt;
|-&lt;br /&gt;
| F || Set Speed ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Sample data ==&lt;br /&gt;
&lt;br /&gt;
After the patterns the file contains sample data. This is in 8-bit two&#039;s complement mono format. Each of the samples follows on from the previous, the file header will have indicated the length (in 16-bit words) of each of the samples.&lt;br /&gt;
&lt;br /&gt;
== Specific MOD formats ==&lt;br /&gt;
&lt;br /&gt;
Remember that this is just a general form for MOD files, each specific format will have it&#039;s own details, and may differ in important ways.&lt;br /&gt;
&lt;br /&gt;
[[4MD Format]]&lt;br /&gt;
&lt;br /&gt;
[[KMD Format (Fury of the Furries)]]&lt;br /&gt;
&lt;br /&gt;
[[S3M Format]]&lt;br /&gt;
&lt;br /&gt;
== External sources ==&lt;br /&gt;
&lt;br /&gt;
[https://github.com/lclevy/unmo3/blob/master/spec/mod.txt mod.txt] Link to a github copy of a file written many years ago by THUNDER (kurtt@sfu.ca) and revised and expanded by ByteRaver (erlandvo@hotmail.com)&lt;/div&gt;</summary>
		<author><name>Carbon14</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Talk:MOD_Format&amp;diff=12020</id>
		<title>Talk:MOD Format</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Talk:MOD_Format&amp;diff=12020"/>
		<updated>2024-10-14T15:49:42Z</updated>

		<summary type="html">&lt;p&gt;Carbon14: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;There are so many different variations of MOD/Tracker files, that it seemed to me it would be a good idea to have a general overview page, with links to any specific formats that are used in games. This isn&#039;t the right wiki for a comprehensive encyclopaedia of trackers and their formats, but a few games do use specific tracked music format.[[User:Carbon14|Carbon14]] ([[User talk:Carbon14|talk]]) 15:14, 11 October 2024 (GMT)&lt;/div&gt;</summary>
		<author><name>Carbon14</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=KMD_Format_(Fury_of_the_Furries)&amp;diff=12019</id>
		<title>KMD Format (Fury of the Furries)</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=KMD_Format_(Fury_of_the_Furries)&amp;diff=12019"/>
		<updated>2024-10-14T15:46:02Z</updated>

		<summary type="html">&lt;p&gt;Carbon14: Add header and FM instrument detail&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Stub}}&lt;br /&gt;
{{Music Infobox&lt;br /&gt;
 | Type = Tracked&lt;br /&gt;
 | Instruments = FM&lt;br /&gt;
 | NumChannels = 6 + 5&lt;br /&gt;
 | NumTracks = 1&lt;br /&gt;
 | NumPatterns = 128&lt;br /&gt;
 | NumOrders = 1&lt;br /&gt;
 | Tags = Instrument names&lt;br /&gt;
 | Games = &lt;br /&gt;
   {{Game|Fury of the Furries}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
This format is used in [[Fury of the Furries]] for music. It is a modified version of the [[MOD Format|MOD music format]] using FM instruments rather than samples. The instruments are simple described in terms of the register settings for an [[OPL chip]] synthesizer on an Adlib or Soundblaster card. &lt;br /&gt;
&lt;br /&gt;
It&#039;s name *might* be based on Kalisto MOD Format, but this is speculation.&lt;br /&gt;
&lt;br /&gt;
The file has 6 MOD channels, and a further 5 channels devoted to just percussion, these oddities mean that it is unlikely that there are any MOD file players or tools which can handle this format. &lt;br /&gt;
&lt;br /&gt;
Most MOD players expect PCM samples for the instrument sounds, but the [[S3M Format]] used by Scream Tracker 3 has the option to handle this kind of OPL-FM instrument.&lt;br /&gt;
&lt;br /&gt;
2 music files are provided for each stage of the game, The game menu allows you to choose between &#039;fun&#039; or &#039;classical&#039; and this determines which of the music files is used for each stage.&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;
| UINT8 || Instrument count || Number of instruments in the file.&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || Pattern count || Number of patterns in the file.&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || End of song || End of song instruction. Usually 127. In PYRAMIDE.KMD it is 120.&lt;br /&gt;
|-&lt;br /&gt;
| UINT8(128) || Pattern table || Order in which to play the patterns.&lt;br /&gt;
|-&lt;br /&gt;
| UINT8(7) || Unknown || meaning currently unknown.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Instrument ==&lt;br /&gt;
&lt;br /&gt;
The KMD format uses FM instruments, directly specifying register values for a [[OPL chip|Yamaha OPL-2]] compatible synthesizer, such as that found on an Adlib or SoundBlaster. As such, the file contains NO sample data, and where you might expect details of the samples, instead we have these instrument definitions.&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(16) || Instrument name || The name of the instrument, if less than 16 characters it is NULL-terminated&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || Op1 Trem/Vib/Sus/KSR/F || Operator 1 Tremolo / Vibrato / Sustain / Key Scale Rate / Frequency Multiplication Factor&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || Op2 Trem/Vib/Sus/KSR/F || Operator 2 Tremolo / Vibrato / Sustain / Key Scale Rate / Frequency Multiplication Factor&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || Op1 KSL/Level || Operator 1 Key Scale Level / Output Level&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || Op2 KSL/Level || Operator 2 Key Scale Level / Output Level&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || Op1 A/D || Operator 1 Attack Rate / Decay Rate&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || Op2 A/D || Operator 2 Attack Rate / Decay Rate&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || Op1 S/R || Operator 1 Sustain Level / Release Rate&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || Op2 S/R || Operator 2 Sustain Level / Release Rate&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || Op1 Wave || Operator 1 Waveform&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || Op2 Wave || Operator 2 Waveform&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || FB/Add || Feedback / Additive or FM select&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || Unknown || Currently unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Credits ==&lt;br /&gt;
&lt;br /&gt;
This file format was reverse engineered by [[User:Carbon14|carbon14]]. 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>Carbon14</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=MOD_Format&amp;diff=12018</id>
		<title>MOD Format</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=MOD_Format&amp;diff=12018"/>
		<updated>2024-10-14T15:14:00Z</updated>

		<summary type="html">&lt;p&gt;Carbon14: Fix table closure&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Music Infobox&lt;br /&gt;
 | Type = Tracked&lt;br /&gt;
 | Instruments = FM or samples&lt;br /&gt;
 | NumChannels = 4 - 8&lt;br /&gt;
 | NumTracks = 1&lt;br /&gt;
 | NumPatterns = 128&lt;br /&gt;
 | NumOrders = 1&lt;br /&gt;
 | Tags = Instrument names&lt;br /&gt;
 | Games = &lt;br /&gt;
   {{Game|Fury of the Furries}}&lt;br /&gt;
   {{Game|Halloween Harry}}&lt;br /&gt;
   {{Game|Unreal Tournament}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
MOD is a name for a family of file formats typically used by a style of music player called a tracker. There have been many trackers and tracker style music libraries over the years, and as a result a number of variations of the format have developed.&lt;br /&gt;
&lt;br /&gt;
Typically MOD files include sampled sounds, but some formats rely on an FM synthesizer instead, or as well.&lt;br /&gt;
&lt;br /&gt;
Hopefully this page will outline the general principles of the MOD format. Follow the links for more specific details of actual MOD formats used by specific games.&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
The MOD format typically comprises 4 pieces of information.&lt;br /&gt;
&lt;br /&gt;
* A header which contains global information such as a song title and overall volume, as well an the number of entries in each of the other sections.&lt;br /&gt;
* An instrument table, containing one or more instruments, sounds that should be used to play the music. Most often these are audio samples, but some MOD formats allow for FM synth instruments.&lt;br /&gt;
* A pattern table, which indicates the order in which patterns should be played.&lt;br /&gt;
* The patterns themselves. Short sections of the song, represented as notes and effects.&lt;br /&gt;
&lt;br /&gt;
The patterns are played one at a time, using the order laid down in the pattern table.&lt;br /&gt;
&lt;br /&gt;
== Header section ==&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[20] || Title || Song title, if not 20 characters long it will be null terminated.&lt;br /&gt;
|-&lt;br /&gt;
| char[22] || Sample 1 name || Name of the first sample, if not 22 characters long it will be null terminated.&lt;br /&gt;
|-&lt;br /&gt;
| UINT16BE || Sample 1 length || Length in 2-byte words of the first sample.&lt;br /&gt;
|-&lt;br /&gt;
| INT8 || Sample 1 finetune || &lt;br /&gt;
|- &lt;br /&gt;
| UINT8 || Sample 1 volume ||&lt;br /&gt;
|-&lt;br /&gt;
| UINT16BE || Sample 1 repeat offset || Position in sample 1 to repeat from, when the note is held. In 2-byte words.&lt;br /&gt;
|-&lt;br /&gt;
| UINT16BE || Sample 1 repeat length || Length in 2-byte words of sample 1 repeat section.&lt;br /&gt;
|-&lt;br /&gt;
| char[22] || Sample 2 name || Name of the second sample...&lt;br /&gt;
|-&lt;br /&gt;
| || etc || Typically there will be 15 or 31 samples in the file, depending on the specific format.&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || Number of patterns || This is the number of patterns that need to be played, not necessarily the number of different patterns in the file. Some patterns may be played more than once.&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || Song end || What happens when the Number of patterns has been played.&lt;br /&gt;
|-&lt;br /&gt;
| UINT8[128] || Pattern table || The file contains at up to 128 different patterns, this table is the order in which patterns should be played.&lt;br /&gt;
|-&lt;br /&gt;
| FOURCC || File format tag || Code to indicate the specific tracker/MOD format.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Pattern Table ==&lt;br /&gt;
&lt;br /&gt;
The pattern table is fixed length, usually 128 bytes in length. Each byte indicates the number of a pattern to be played, and the total number of patterns to be played to complete the song is given in the Number of patterns byte. If a song contained a verse, chorus and bridge, (patterns 0, 1 and 2 respectively) then it might contain a pattern table &amp;lt;pre&amp;gt;00 00 01 00 01 02 00 01 01 01&amp;lt;/pre&amp;gt; to play verse, verse, chorus, verse, chorus, bridge, verse, chorus, chorus, chorus.&lt;br /&gt;
&lt;br /&gt;
The Song end byte indicates what happens when the number of patterns have been played. If this byte is greater than or equal to 127, the song will end. Otherwise it represents a position in the pattern table, where playing should continue, which allows the song to repeat, but it could have a non-repeating intro, played only the first time through.&lt;br /&gt;
&lt;br /&gt;
== Patterns ==&lt;br /&gt;
&lt;br /&gt;
The patterns are stored sequentially. The best way to identify the number of patterns in the file is to find the largest pattern number used in the pattern table and add 1. Sample data will usually follow directly after the last pattern.&lt;br /&gt;
&lt;br /&gt;
Each patterns contains 64 lines or steps. The MOD file will contain a number of different sound channels that play simultaneously, 4, 6 and 8-channel formats are common, and the specific format will indicate how many channels there should be. Each channel requires 4 bytes per step. So a 6 channel MOD file will require 4 * 6 * 64 bytes per pattern. Those 4 bytes in some order need to encode:&lt;br /&gt;
&lt;br /&gt;
* The instrument (a sample number from 1 - 15 (or 1 - 31).&lt;br /&gt;
* The pitch of the note.&lt;br /&gt;
* An optional effect&lt;br /&gt;
&lt;br /&gt;
== Sample data ==&lt;br /&gt;
&lt;br /&gt;
After the patterns the file contains sample data. This is in 8-bit two&#039;s complement mono format. Each of the samples follows on from the previous, the file header will have indicated the length (in 16-bit words) of each of the samples.&lt;br /&gt;
&lt;br /&gt;
== Specific MOD formats ==&lt;br /&gt;
&lt;br /&gt;
Remember that this is just a general form for MOD files, each specific format will have it&#039;s own details, and may differ in important ways.&lt;br /&gt;
&lt;br /&gt;
[[4MD Format]]&lt;br /&gt;
&lt;br /&gt;
[[KMD Format (Fury of the Furries)]]&lt;br /&gt;
&lt;br /&gt;
[[S3M Format]]&lt;br /&gt;
&lt;br /&gt;
== External sources ==&lt;br /&gt;
&lt;br /&gt;
[https://github.com/lclevy/unmo3/blob/master/spec/mod.txt mod.txt] Link to a github copy of a file written many years ago by THUNDER (kurtt@sfu.ca) and revised and expanded by ByteRaver (erlandvo@hotmail.com)&lt;/div&gt;</summary>
		<author><name>Carbon14</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=MOD_Format&amp;diff=12017</id>
		<title>MOD Format</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=MOD_Format&amp;diff=12017"/>
		<updated>2024-10-14T15:10:34Z</updated>

		<summary type="html">&lt;p&gt;Carbon14: Flesh out page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Music Infobox&lt;br /&gt;
 | Type = Tracked&lt;br /&gt;
 | Instruments = FM or samples&lt;br /&gt;
 | NumChannels = 4 - 8&lt;br /&gt;
 | NumTracks = 1&lt;br /&gt;
 | NumPatterns = 128&lt;br /&gt;
 | NumOrders = 1&lt;br /&gt;
 | Tags = Instrument names&lt;br /&gt;
 | Games = &lt;br /&gt;
   {{Game|Fury of the Furries}}&lt;br /&gt;
   {{Game|Halloween Harry}}&lt;br /&gt;
   {{Game|Unreal Tournament}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
MOD is a name for a family of file formats typically used by a style of music player called a tracker. There have been many trackers and tracker style music libraries over the years, and as a result a number of variations of the format have developed.&lt;br /&gt;
&lt;br /&gt;
Typically MOD files include sampled sounds, but some formats rely on an FM synthesizer instead, or as well.&lt;br /&gt;
&lt;br /&gt;
Hopefully this page will outline the general principles of the MOD format. Follow the links for more specific details of actual MOD formats used by specific games.&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
The MOD format typically comprises 4 pieces of information.&lt;br /&gt;
&lt;br /&gt;
* A header which contains global information such as a song title and overall volume, as well an the number of entries in each of the other sections.&lt;br /&gt;
* An instrument table, containing one or more instruments, sounds that should be used to play the music. Most often these are audio samples, but some MOD formats allow for FM synth instruments.&lt;br /&gt;
* A pattern table, which indicates the order in which patterns should be played.&lt;br /&gt;
* The patterns themselves. Short sections of the song, represented as notes and effects.&lt;br /&gt;
&lt;br /&gt;
The patterns are played one at a time, using the order laid down in the pattern table.&lt;br /&gt;
&lt;br /&gt;
== Header section ==&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[20] || Title || Song title, if not 20 characters long it will be null terminated.&lt;br /&gt;
|-&lt;br /&gt;
| char[22] || Sample 1 name || Name of the first sample, if not 22 characters long it will be null terminated.&lt;br /&gt;
|-&lt;br /&gt;
| UINT16BE || Sample 1 length || Length in 2-byte words of the first sample.&lt;br /&gt;
|-&lt;br /&gt;
| INT8 || Sample 1 finetune || &lt;br /&gt;
|- &lt;br /&gt;
| UINT8 || Sample 1 volume ||&lt;br /&gt;
|-&lt;br /&gt;
| UINT16BE || Sample 1 repeat offset || Position in sample 1 to repeat from, when the note is held. In 2-byte words.&lt;br /&gt;
|-&lt;br /&gt;
| UINT16BE || Sample 1 repeat length || Length in 2-byte words of sample 1 repeat section.&lt;br /&gt;
|-&lt;br /&gt;
| char[22] || Sample 2 name || Name of the second sample...&lt;br /&gt;
|-&lt;br /&gt;
| || etc || Typically there will be 15 or 31 samples in the file, depending on the specific format.&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || Number of patterns || This is the number of patterns that need to be played, not necessarily the number of different patterns in the file. Some patterns may be played more than once.&lt;br /&gt;
|-&lt;br /&gt;
| UINT8 || Song end || What happens when the Number of patterns has been played.&lt;br /&gt;
|-&lt;br /&gt;
| UINT8[128] || Pattern table || The file contains at up to 128 different patterns, this table is the order in which patterns should be played.&lt;br /&gt;
|-&lt;br /&gt;
| FOURCC || File format tag || Code to indicate the specific tracker/MOD format.&lt;br /&gt;
&lt;br /&gt;
== Pattern Table ==&lt;br /&gt;
&lt;br /&gt;
The pattern table is fixed length, usually 128 bytes in length. Each byte indicates the number of a pattern to be played, and the total number of patterns to be played to complete the song is given in the Number of patterns byte. If a song contained a verse, chorus and bridge, (patterns 0, 1 and 2 respectively) then it might contain a pattern table &amp;lt;pre&amp;gt;00 00 01 00 01 02 00 01 01 01&amp;lt;/pre&amp;gt; to play verse, verse, chorus, verse, chorus, bridge, verse, chorus, chorus, chorus.&lt;br /&gt;
&lt;br /&gt;
The Song end byte indicates what happens when the number of patterns have been played. If this byte is greater than or equal to 127, the song will end. Otherwise it represents a position in the pattern table, where playing should continue, which allows the song to repeat, but it could have a non-repeating intro, played only the first time through.&lt;br /&gt;
&lt;br /&gt;
== Patterns ==&lt;br /&gt;
&lt;br /&gt;
The patterns are stored sequentially. The best way to identify the number of patterns in the file is to find the largest pattern number used in the pattern table and add 1. Sample data will usually follow directly after the last pattern.&lt;br /&gt;
&lt;br /&gt;
Each patterns contains 64 lines or steps. The MOD file will contain a number of different sound channels that play simultaneously, 4, 6 and 8-channel formats are common, and the specific format will indicate how many channels there should be. Each channel requires 4 bytes per step. So a 6 channel MOD file will require 4 * 6 * 64 bytes per pattern. Those 4 bytes in some order need to encode:&lt;br /&gt;
&lt;br /&gt;
* The instrument (a sample number from 1 - 15 (or 1 - 31).&lt;br /&gt;
* The pitch of the note.&lt;br /&gt;
* An optional effect&lt;br /&gt;
&lt;br /&gt;
== Sample data ==&lt;br /&gt;
&lt;br /&gt;
After the patterns the file contains sample data. This is in 8-bit two&#039;s complement mono format. Each of the samples follows on from the previous, the file header will have indicated the length (in 16-bit words) of each of the samples.&lt;br /&gt;
&lt;br /&gt;
== Specific MOD formats ==&lt;br /&gt;
&lt;br /&gt;
Remember that this is just a general form for MOD files, each specific format will have it&#039;s own details, and may differ in important ways.&lt;br /&gt;
&lt;br /&gt;
[[4MD Format]]&lt;br /&gt;
&lt;br /&gt;
[[KMD Format (Fury of the Furries)]]&lt;br /&gt;
&lt;br /&gt;
[[S3M Format]]&lt;br /&gt;
&lt;br /&gt;
== External sources ==&lt;br /&gt;
&lt;br /&gt;
[https://github.com/lclevy/unmo3/blob/master/spec/mod.txt mod.txt] Link to a github copy of a file written many years ago by THUNDER (kurtt@sfu.ca) and revised and expanded by ByteRaver (erlandvo@hotmail.com)&lt;/div&gt;</summary>
		<author><name>Carbon14</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=MOD_Format&amp;diff=12006</id>
		<title>MOD Format</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=MOD_Format&amp;diff=12006"/>
		<updated>2024-10-11T15:14:56Z</updated>

		<summary type="html">&lt;p&gt;Carbon14: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Stub}}&lt;br /&gt;
{{Music Infobox&lt;br /&gt;
 | Type = Tracked&lt;br /&gt;
 | Instruments = FM or samples&lt;br /&gt;
 | NumChannels = 4 - 8&lt;br /&gt;
 | NumTracks = 1&lt;br /&gt;
 | NumPatterns = 128&lt;br /&gt;
 | NumOrders = 1&lt;br /&gt;
 | Tags = Instrument names&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
MOD is a name for a family of file formats typically used by a style of music player called a tracker. There have been many trackers and tracker style music libraries over the years, and as a result a number of variations of the format have developed.&lt;br /&gt;
&lt;br /&gt;
Typically MOD files include sampled sounds, but some formats rely on an FM synthesizer instead, or as well.&lt;br /&gt;
&lt;br /&gt;
Hopefully this page will outline the general principles of the MOD format. &lt;br /&gt;
&lt;br /&gt;
== External sources ==&lt;br /&gt;
&lt;br /&gt;
[https://github.com/lclevy/unmo3/blob/master/spec/mod.txt mod.txt] Link to a github copy of a file written many years ago by THUNDER (kurtt@sfu.ca) and revised and expanded by ByteRaver (erlandvo@hotmail.com)&lt;/div&gt;</summary>
		<author><name>Carbon14</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Talk:MOD_Format&amp;diff=12005</id>
		<title>Talk:MOD Format</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Talk:MOD_Format&amp;diff=12005"/>
		<updated>2024-10-11T15:14:37Z</updated>

		<summary type="html">&lt;p&gt;Carbon14: Clarification as to the current state of this page.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I have started this page, and included a link to my primary reference material. I intend to summarise that reference material to give an outline of the format. Specific games that use MOD files may well use specific variations, and it seems to me that it makes sense to have a general page to outline the basic principles and specific variant pages, rather than many pages with almost identical content. I am well aware that I might fail to get round to this task, and so it seemed useful to at least get a link to a very good resource to start with. If you feel I&#039;m going about this the wrong way,  feel free to say so. [[User:Carbon14|Carbon14]] ([[User talk:Carbon14|talk]]) 15:14, 11 October 2024 (GMT)&lt;/div&gt;</summary>
		<author><name>Carbon14</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=MOD_Format&amp;diff=12004</id>
		<title>MOD Format</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=MOD_Format&amp;diff=12004"/>
		<updated>2024-10-11T15:11:06Z</updated>

		<summary type="html">&lt;p&gt;Carbon14: Starting page on the MOD music format&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Stub}}&lt;br /&gt;
{{Music Infobox&lt;br /&gt;
 | Type = Tracked&lt;br /&gt;
 | Instruments = FM or samples&lt;br /&gt;
 | NumChannels = 4 - 8&lt;br /&gt;
 | NumTracks = 1&lt;br /&gt;
 | NumPatterns = 128&lt;br /&gt;
 | NumOrders = 1&lt;br /&gt;
 | Tags = Instrument names&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
MOD is a name for a family of file formats typically used by a style of music player called a tracker. There have been many trackers and tracker style music libraries over the years, and as a result a number of variations of the format have developed.&lt;br /&gt;
&lt;br /&gt;
Typically MOD files include sampled sounds, but some formats rely on an FM synthesizer instead, or as well.&lt;br /&gt;
&lt;br /&gt;
Hopefully this page will outline the general principles of the MOD format. &lt;br /&gt;
&lt;br /&gt;
== External sources ==&lt;br /&gt;
&lt;br /&gt;
[https://github.com/lclevy/unmo3/blob/master/spec/mod.txt mod.txt] Link to a github copy of a file written many years ago my THUNDER (kurtt@sfu.ca) and revised and expanded by ByteRaver (erlandvo@hotmail.com)&lt;/div&gt;</summary>
		<author><name>Carbon14</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=ImHex&amp;diff=12001</id>
		<title>ImHex</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=ImHex&amp;diff=12001"/>
		<updated>2024-10-10T15:39:32Z</updated>

		<summary type="html">&lt;p&gt;Carbon14: Added more detail&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Tool Infobox&lt;br /&gt;
 | Platform = Windows, Linux, macOS, online&lt;br /&gt;
 | Release = 2020/11/12&lt;br /&gt;
 | Homepage = [https://imhex.werwolv.net/ Homepage]&lt;br /&gt;
 | Download = [https://imhex.werwolv.net/ Download links on the homepage]&lt;br /&gt;
 | Edit1 = Hex editing&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ImHex&#039;&#039;&#039; is a powerful hex editor with many additional tools built it.&lt;br /&gt;
&lt;br /&gt;
In addition to editing binary files, it features a powerful pattern language, which allows you to mark up parts of the file, to help you visualise the structure of the file. Particularly useful when trying to understand an undocumented file format.&lt;br /&gt;
&lt;br /&gt;
It also has many additional features built-in including data visualization, a graphing calculator, LLVM demangler, diffing and disassemblers for 18 different architectures.&lt;br /&gt;
&lt;br /&gt;
It&#039;s still a work in progress, and has some quirks, but it is under active development. Your mileage might vary&lt;br /&gt;
&lt;br /&gt;
== Platform and license ==&lt;br /&gt;
&lt;br /&gt;
It&#039;s written in c++ and is completely free and open source under the GPLv2.&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
&lt;br /&gt;
[https://docs.werwolv.net/imhex Main documentation]&lt;br /&gt;
&lt;br /&gt;
[https://docs.werwolv.net/pattern-language Pattern Language documentation]&lt;br /&gt;
&lt;br /&gt;
== Disassembler architectures ==&lt;br /&gt;
&lt;br /&gt;
* ARM    &lt;br /&gt;
* AArch64    &lt;br /&gt;
* MIPS    &lt;br /&gt;
* Intel x86    &lt;br /&gt;
* PowerPC    &lt;br /&gt;
* SPARC    &lt;br /&gt;
* SystemZ    &lt;br /&gt;
* XCore    &lt;br /&gt;
* Motorola 68K    &lt;br /&gt;
* TMS320C64x    &lt;br /&gt;
* M680x    &lt;br /&gt;
* Ethereum Virtual Machine    &lt;br /&gt;
* MOS Technology 65xx    &lt;br /&gt;
* WebAssembly    &lt;br /&gt;
* Berkeley Packet Filter    &lt;br /&gt;
* RISC-V    &lt;br /&gt;
* SuperH  &lt;br /&gt;
* Tricore    &lt;br /&gt;
&lt;br /&gt;
== Example pattern script ==&lt;br /&gt;
&lt;br /&gt;
This script which can be run in ImHex, marks up the individual files in a [[DAT Format (Fury of the Furries)]] file, and decompresses each into a separate file within a virtual file system in the ImHex editor.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/*!&lt;br /&gt;
    Deconstruct a Fury of the Furries DAT archive&lt;br /&gt;
&lt;br /&gt;
    Running this pattern will extract and decompress the archive into the Virtual Filesystem&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
#pragma endian little&lt;br /&gt;
#pragma pattern_limit 2000000&lt;br /&gt;
&lt;br /&gt;
import std.string;&lt;br /&gt;
import std.core;&lt;br /&gt;
import std.io;&lt;br /&gt;
import hex.core;&lt;br /&gt;
import type.base;&lt;br /&gt;
&lt;br /&gt;
std::mem::Section currentSection;&lt;br /&gt;
s32 currentOffset = 0;&lt;br /&gt;
&lt;br /&gt;
// Is the archived file compressed&lt;br /&gt;
enum Compressed : u8 {&lt;br /&gt;
    Yes,&lt;br /&gt;
    No&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
fn addSpace() {&lt;br /&gt;
  u8 space[18] @ 0 in currentSection;&lt;br /&gt;
  for (u8 i = 0, i &amp;lt; 18, i = i + 1) {&lt;br /&gt;
    space[i] = 0x20;&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// Copy a run length section from earlier in the compressed file&lt;br /&gt;
fn outputRunLengthCopy(auto length, auto offset) {&lt;br /&gt;
  while (length &amp;gt; 0) {&lt;br /&gt;
    std::mem::copy_section_to_section(currentSection, offset + 18, currentSection, currentOffset + 18, 1);&lt;br /&gt;
    offset = offset + 1;&lt;br /&gt;
    currentOffset = currentOffset + 1;&lt;br /&gt;
    length = length - 1;&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// A pair of bytes representing a run length&lt;br /&gt;
struct CompressionPair {&lt;br /&gt;
  u16 shadowPair [[hidden, no_unique_address]];&lt;br /&gt;
  u8 length = ((shadowPair &amp;gt;&amp;gt; 8) &amp;amp; 0x0f) + 3;&lt;br /&gt;
  u16 offset = ((shadowPair &amp;gt;&amp;gt; 12) &amp;lt;&amp;lt; 8) + (shadowPair &amp;amp; 0xff) + 18;&lt;br /&gt;
  s32 fullOffset = offset + (currentOffset &amp;amp; 0xfffff000);&lt;br /&gt;
  if (fullOffset &amp;gt;= currentOffset) {&lt;br /&gt;
    fullOffset = fullOffset - 4096;&lt;br /&gt;
  }&lt;br /&gt;
  str comment = std::string::to_string(length) + &amp;quot; bytes @ &amp;quot; + type::impl::format_number(fullOffset, &amp;quot;0x{:02X}&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  u16 pair [[comment(comment)]];&lt;br /&gt;
  &lt;br /&gt;
  outputRunLengthCopy(length, fullOffset);&lt;br /&gt;
} [[inline]];&lt;br /&gt;
&lt;br /&gt;
// A single byte literal&lt;br /&gt;
struct CompressionLiteral {&lt;br /&gt;
  u8 byte;&lt;br /&gt;
} [[inline]];&lt;br /&gt;
&lt;br /&gt;
// Either a single byte literal, or a run-length pair&lt;br /&gt;
struct CompressionItem {&lt;br /&gt;
  u8 index = std::core::array_index();&lt;br /&gt;
  u8 flag = (parent.flags &amp;gt;&amp;gt; index) &amp;amp; 0x01;&lt;br /&gt;
  if (flag) {&lt;br /&gt;
    CompressionLiteral byte;&lt;br /&gt;
    std::mem::copy_value_to_section(byte, currentSection, currentOffset + 18);&lt;br /&gt;
    currentOffset = currentOffset + 1;&lt;br /&gt;
  }&lt;br /&gt;
  else {&lt;br /&gt;
    CompressionPair pair;&lt;br /&gt;
  }&lt;br /&gt;
  if ($ &amp;gt;= parent.parent.parent.end) {&lt;br /&gt;
    break;&lt;br /&gt;
  }&lt;br /&gt;
} [[inline]];&lt;br /&gt;
&lt;br /&gt;
// A set up up to 8 compression items controlled by a flag bitfield&lt;br /&gt;
struct CompressionBlock {&lt;br /&gt;
  u8 flags [[color(&amp;quot;008800&amp;quot;)]];&lt;br /&gt;
  CompressionItem parts[8] [[inline]];&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// A compressed data file&lt;br /&gt;
struct CompressedData {&lt;br /&gt;
  CompressionBlock data[while($ &amp;lt; parent.end)];&lt;br /&gt;
} [[inline]];&lt;br /&gt;
&lt;br /&gt;
// A single file within the archive&lt;br /&gt;
struct File {&lt;br /&gt;
  char name[13] [[color(&amp;quot;00ff00&amp;quot;)]];&lt;br /&gt;
  u32 uncompressedSize [[color(&amp;quot;00ee00&amp;quot;)]];&lt;br /&gt;
  u32 compressedSize [[color(&amp;quot;00dd00&amp;quot;)]];&lt;br /&gt;
  &lt;br /&gt;
  // create decompression section&lt;br /&gt;
  Compressed isCompressed [[color(&amp;quot;00cc00&amp;quot;)]];&lt;br /&gt;
  currentSection = std::mem::create_section(name);&lt;br /&gt;
  std::mem::set_section_size(currentSection, uncompressedSize + 18);&lt;br /&gt;
  addSpace();&lt;br /&gt;
  u8 buffer[uncompressedSize] @ 18 in currentSection;&lt;br /&gt;
  currentOffset = 0;&lt;br /&gt;
  &lt;br /&gt;
  u32 end = $ + compressedSize;&lt;br /&gt;
  if (isCompressed == 0) {&lt;br /&gt;
      CompressedData compressedData [[color(&amp;quot;000000&amp;quot;)]];&lt;br /&gt;
  }&lt;br /&gt;
  else {&lt;br /&gt;
    u8 data[compressedSize] [[color(&amp;quot;000000&amp;quot;)]];&lt;br /&gt;
    std::mem::copy_value_to_section(data, currentSection, 18);&lt;br /&gt;
  }    &lt;br /&gt;
  str fileName = std::string::to_string(name);&lt;br /&gt;
  hex::core::add_virtual_file(fileName, buffer);&lt;br /&gt;
  std::mem::delete_section(currentSection);&lt;br /&gt;
} [[name(name)]];&lt;br /&gt;
&lt;br /&gt;
// A dat archive&lt;br /&gt;
struct Archive {&lt;br /&gt;
  u16 fileCount [[color(&amp;quot;ff0000&amp;quot;), name(&amp;quot;Number of files&amp;quot;)]];&lt;br /&gt;
  File files[fileCount] [[inline]];&lt;br /&gt;
} [[inline]];&lt;br /&gt;
&lt;br /&gt;
Archive archive @ 0x00;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Carbon14</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Category:Hex_editing_tools&amp;diff=12000</id>
		<title>Category:Hex editing tools</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Category:Hex_editing_tools&amp;diff=12000"/>
		<updated>2024-10-10T15:30:12Z</updated>

		<summary type="html">&lt;p&gt;Carbon14: Add hex editor category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Modding Tools]]&lt;/div&gt;</summary>
		<author><name>Carbon14</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=File:ImHex.png&amp;diff=11999</id>
		<title>File:ImHex.png</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=File:ImHex.png&amp;diff=11999"/>
		<updated>2024-10-10T15:27:26Z</updated>

		<summary type="html">&lt;p&gt;Carbon14: Example of ImHex hex editor, showing editor, with patterns marked up,  and with a pattern in the pattern editor which has decompressed the main file, into a virtual file system&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
Example of ImHex hex editor, showing editor, with patterns marked up,  and with a pattern in the pattern editor which has decompressed the main file, into a virtual file system&lt;/div&gt;</summary>
		<author><name>Carbon14</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=ImHex&amp;diff=11998</id>
		<title>ImHex</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=ImHex&amp;diff=11998"/>
		<updated>2024-10-10T15:24:03Z</updated>

		<summary type="html">&lt;p&gt;Carbon14: Adding information about ImHex hex editor&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Tool Infobox&lt;br /&gt;
 | Platform = Windows, Linux, macOS, online&lt;br /&gt;
 | Release = 2020/11/12&lt;br /&gt;
 | Homepage = [https://imhex.werwolv.net/ Homepage]&lt;br /&gt;
 | Download = [https://imhex.werwolv.net/ Download links on the homepage]&lt;br /&gt;
 | Edit1 = Hex editing&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ImHex&#039;&#039;&#039; is a powerful hex editor with many additional tools built it.&lt;br /&gt;
&lt;br /&gt;
In addition to editing binary files, it features a powerful pattern language, which allows you to mark up parts of the file, to help you visualise the structure of the file. Particularly useful when trying to understand an undocumented file format.&lt;br /&gt;
&lt;br /&gt;
It also has many additional features built-in including data visualization, a graphing calculator, LLVM demangler, diffing and disassemblers for 18 different architectures.&lt;br /&gt;
&lt;br /&gt;
It&#039;s still a work in progress, and has some quirks, but it is under active development. Your mileage might vary&lt;br /&gt;
&lt;br /&gt;
== Platform and license ==&lt;br /&gt;
&lt;br /&gt;
It&#039;s written in c++ and is completely free and open source under the GPLv2.&lt;br /&gt;
&lt;br /&gt;
==Example pattern script==&lt;br /&gt;
&lt;br /&gt;
This script which can be run in ImHex, marks up the individual files in a [[DAT Format (Fury of the Furries)]] file, and decompresses each into a separate file within a virtual file system in the ImHex editor.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/*!&lt;br /&gt;
    Deconstruct a Fury of the Furries DAT archive&lt;br /&gt;
&lt;br /&gt;
    Running this pattern will extract and decompress the archive into the Virtual Filesystem&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
#pragma endian little&lt;br /&gt;
#pragma pattern_limit 2000000&lt;br /&gt;
&lt;br /&gt;
import std.string;&lt;br /&gt;
import std.core;&lt;br /&gt;
import std.io;&lt;br /&gt;
import hex.core;&lt;br /&gt;
import type.base;&lt;br /&gt;
&lt;br /&gt;
std::mem::Section currentSection;&lt;br /&gt;
s32 currentOffset = 0;&lt;br /&gt;
&lt;br /&gt;
// Is the archived file compressed&lt;br /&gt;
enum Compressed : u8 {&lt;br /&gt;
    Yes,&lt;br /&gt;
    No&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
fn addSpace() {&lt;br /&gt;
  u8 space[18] @ 0 in currentSection;&lt;br /&gt;
  for (u8 i = 0, i &amp;lt; 18, i = i + 1) {&lt;br /&gt;
    space[i] = 0x20;&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// Copy a run length section from earlier in the compressed file&lt;br /&gt;
fn outputRunLengthCopy(auto length, auto offset) {&lt;br /&gt;
  while (length &amp;gt; 0) {&lt;br /&gt;
    std::mem::copy_section_to_section(currentSection, offset + 18, currentSection, currentOffset + 18, 1);&lt;br /&gt;
    offset = offset + 1;&lt;br /&gt;
    currentOffset = currentOffset + 1;&lt;br /&gt;
    length = length - 1;&lt;br /&gt;
  }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// A pair of bytes representing a run length&lt;br /&gt;
struct CompressionPair {&lt;br /&gt;
  u16 shadowPair [[hidden, no_unique_address]];&lt;br /&gt;
  u8 length = ((shadowPair &amp;gt;&amp;gt; 8) &amp;amp; 0x0f) + 3;&lt;br /&gt;
  u16 offset = ((shadowPair &amp;gt;&amp;gt; 12) &amp;lt;&amp;lt; 8) + (shadowPair &amp;amp; 0xff) + 18;&lt;br /&gt;
  s32 fullOffset = offset + (currentOffset &amp;amp; 0xfffff000);&lt;br /&gt;
  if (fullOffset &amp;gt;= currentOffset) {&lt;br /&gt;
    fullOffset = fullOffset - 4096;&lt;br /&gt;
  }&lt;br /&gt;
  str comment = std::string::to_string(length) + &amp;quot; bytes @ &amp;quot; + type::impl::format_number(fullOffset, &amp;quot;0x{:02X}&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  u16 pair [[comment(comment)]];&lt;br /&gt;
  &lt;br /&gt;
  outputRunLengthCopy(length, fullOffset);&lt;br /&gt;
} [[inline]];&lt;br /&gt;
&lt;br /&gt;
// A single byte literal&lt;br /&gt;
struct CompressionLiteral {&lt;br /&gt;
  u8 byte;&lt;br /&gt;
} [[inline]];&lt;br /&gt;
&lt;br /&gt;
// Either a single byte literal, or a run-length pair&lt;br /&gt;
struct CompressionItem {&lt;br /&gt;
  u8 index = std::core::array_index();&lt;br /&gt;
  u8 flag = (parent.flags &amp;gt;&amp;gt; index) &amp;amp; 0x01;&lt;br /&gt;
  if (flag) {&lt;br /&gt;
    CompressionLiteral byte;&lt;br /&gt;
    std::mem::copy_value_to_section(byte, currentSection, currentOffset + 18);&lt;br /&gt;
    currentOffset = currentOffset + 1;&lt;br /&gt;
  }&lt;br /&gt;
  else {&lt;br /&gt;
    CompressionPair pair;&lt;br /&gt;
  }&lt;br /&gt;
  if ($ &amp;gt;= parent.parent.parent.end) {&lt;br /&gt;
    break;&lt;br /&gt;
  }&lt;br /&gt;
} [[inline]];&lt;br /&gt;
&lt;br /&gt;
// A set up up to 8 compression items controlled by a flag bitfield&lt;br /&gt;
struct CompressionBlock {&lt;br /&gt;
  u8 flags [[color(&amp;quot;008800&amp;quot;)]];&lt;br /&gt;
  CompressionItem parts[8] [[inline]];&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// A compressed data file&lt;br /&gt;
struct CompressedData {&lt;br /&gt;
  CompressionBlock data[while($ &amp;lt; parent.end)];&lt;br /&gt;
} [[inline]];&lt;br /&gt;
&lt;br /&gt;
// A single file within the archive&lt;br /&gt;
struct File {&lt;br /&gt;
  char name[13] [[color(&amp;quot;00ff00&amp;quot;)]];&lt;br /&gt;
  u32 uncompressedSize [[color(&amp;quot;00ee00&amp;quot;)]];&lt;br /&gt;
  u32 compressedSize [[color(&amp;quot;00dd00&amp;quot;)]];&lt;br /&gt;
  &lt;br /&gt;
  // create decompression section&lt;br /&gt;
  Compressed isCompressed [[color(&amp;quot;00cc00&amp;quot;)]];&lt;br /&gt;
  currentSection = std::mem::create_section(name);&lt;br /&gt;
  std::mem::set_section_size(currentSection, uncompressedSize + 18);&lt;br /&gt;
  addSpace();&lt;br /&gt;
  u8 buffer[uncompressedSize] @ 18 in currentSection;&lt;br /&gt;
  currentOffset = 0;&lt;br /&gt;
  &lt;br /&gt;
  u32 end = $ + compressedSize;&lt;br /&gt;
  if (isCompressed == 0) {&lt;br /&gt;
      CompressedData compressedData [[color(&amp;quot;000000&amp;quot;)]];&lt;br /&gt;
  }&lt;br /&gt;
  else {&lt;br /&gt;
    u8 data[compressedSize] [[color(&amp;quot;000000&amp;quot;)]];&lt;br /&gt;
    std::mem::copy_value_to_section(data, currentSection, 18);&lt;br /&gt;
  }    &lt;br /&gt;
  str fileName = std::string::to_string(name);&lt;br /&gt;
  hex::core::add_virtual_file(fileName, buffer);&lt;br /&gt;
  std::mem::delete_section(currentSection);&lt;br /&gt;
} [[name(name)]];&lt;br /&gt;
&lt;br /&gt;
// A dat archive&lt;br /&gt;
struct Archive {&lt;br /&gt;
  u16 fileCount [[color(&amp;quot;ff0000&amp;quot;), name(&amp;quot;Number of files&amp;quot;)]];&lt;br /&gt;
  File files[fileCount] [[inline]];&lt;br /&gt;
} [[inline]];&lt;br /&gt;
&lt;br /&gt;
Archive archive @ 0x00;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Carbon14</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Fury_of_the_Furries&amp;diff=11952</id>
		<title>Fury of the Furries</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Fury_of_the_Furries&amp;diff=11952"/>
		<updated>2024-10-02T15:31:48Z</updated>

		<summary type="html">&lt;p&gt;Carbon14: Document what looks like a bug in the data shipped by the developers&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 = No&lt;br /&gt;
 | Sound = Edit&lt;br /&gt;
 | Music = Edit&lt;br /&gt;
 | Text = Edit&lt;br /&gt;
 | Story = Edit&lt;br /&gt;
 | Interface = Edit&lt;br /&gt;
 | Demos = Edit&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Fury of the Furries&#039;&#039;&#039; (also subsequently reskinned as &#039;&#039;&#039;Pac-In-Time&#039;&#039;&#039;) is a puzzle-platform game for the PC, Macintosh, Amiga and Amiga-32, developed by [https://en.wikipedia.org/wiki/Kalisto_Entertainment Kalisto] and released by [https://en.wikipedia.org/wiki/Mindscape_(company) Mindscape] in 1993&lt;br /&gt;
&lt;br /&gt;
== Obtaining the game ==&lt;br /&gt;
&lt;br /&gt;
The game has not been officially released as freeware.&lt;br /&gt;
&lt;br /&gt;
{{BeginGameFileList}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.dat&lt;br /&gt;
 | Format = [[DAT Format (Fury of the Furries)]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Archive collection of other files, used by either of the preliminary executables (intro.dat or lang.dat)&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = messages.*&lt;br /&gt;
 | Format = [[MESSAGES Format (Fury of the Furries)]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Text strings in different languages&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = passw.dta&lt;br /&gt;
 | Format = [[DTA Format (Fury of the Furries)]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Passwords used in the games cheat protection&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = prot.*&lt;br /&gt;
 | Format = [[PROT Format (Fury of the Furries)]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Text strings in different languages for the cheat protection screen&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = lang.txt&lt;br /&gt;
 | Format = [[LANG.TXT Format (Fury of the Furries)]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Selection of languages supported by the game&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = furies.anm&lt;br /&gt;
 | Format = [[ANM Format (Fury of the Furries)]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Arrangement of icons on the screen during language selection&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.kmd&lt;br /&gt;
 | Format = [[KMD Format (Fury of the Furries)]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Obscure MOD file music format&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.iff&lt;br /&gt;
 | Format = [[AIFF Format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Sound effect in AIFF format&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = spr/*.lbm&lt;br /&gt;
 | Format = [[LBM Format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = 4-bit Image file contains player and enemy sprites&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = dec/*.lbm&lt;br /&gt;
 | Format = [[LBM Format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = 4-bit Image file containing backgrounds for game levels&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = pic/*.lbm&lt;br /&gt;
 | Format = [[LBM Format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = 16-bit Image file containing cut scene images&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = dat/data*.bin&lt;br /&gt;
 | Format = [[BIN Format (Fury of the Furries)]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Game level data&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = dat/cdata*.bin&lt;br /&gt;
 | Format = CDATA Format (Fury of the Furries)&lt;br /&gt;
 | KnownFormat = No&lt;br /&gt;
 | Desc = Unknown&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = dat/demo*.bin&lt;br /&gt;
 | Format = [[DEMO Format (Fury of the Furries)]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Script for automatic playing of certain game levels in &#039;attract mode&#039;&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = dat/fdata*.bin&lt;br /&gt;
 | Format = FDATA Format (Fury of the Furries)&lt;br /&gt;
 | KnownFormat = No&lt;br /&gt;
 | Desc = Unknown&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = dat/gamedat.bin&lt;br /&gt;
 | Format = [[GAMEDAT Format (Fury of the Furries)]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = User preference settings and save progress&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = dat/sdata*.bin&lt;br /&gt;
 | Format = SDATA Format (Fury of the Furries)&lt;br /&gt;
 | KnownFormat = No&lt;br /&gt;
 | Desc = Unknown&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.blk&lt;br /&gt;
 | Format = [[BLK Format (Fury of the Furries)]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Pixel ranges used to select sections of images&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.imm&lt;br /&gt;
 | Format = [[IMM Format (Fury of the Furries)]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Pixel information for an image, but without a color palette&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.lmh&lt;br /&gt;
 | Format = [[LMH LMO Format (Fury of the Furries)|LMH Format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Part of an animation for the game intro&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.lmo&lt;br /&gt;
 | Format = [[LMH LMO Format (Fury of the Furries)|LMO Format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Part of an animation for the game intro&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.pam&lt;br /&gt;
 | Format = [[VGA Palette]] (modern form)&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Palette information for images&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.snd&lt;br /&gt;
 | Format = [[SND Format (Fury of the Furries)]]&lt;br /&gt;
 | KnownFormat = Yes &lt;br /&gt;
 | Desc = Sound effects used in the game intro&lt;br /&gt;
}}&lt;br /&gt;
{{EndGameFileList}}&lt;br /&gt;
&lt;br /&gt;
== Oddities ==&lt;br /&gt;
&lt;br /&gt;
The file KAL.SND in the INTRO.DAT archive seems to be faulty. In general the SND files mostly contain just a sound wave form as you would find in the SSND chunk of an [[AIFF Format]] file. However, here the data seems to contain almost (but not quite) an entire AIFF file.  It looks as though the developers would create sounds as AIFF files, and then extract the wave data to pack into the SND files,  and here they have mistakenly taken more than they should have into that file.   If this is indeed a mistake then the result would be a very short burst of noise at the beginning of the sample (coming from the AIFF header mistakenly included) and a slight truncation of the intended sample, with the bulk of the sample sounding correct.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/david-c14/FuryStudio/blob/v0.4.1-dev/doc/reference/index.md A developing hypertext reference for the behaviour of the game engine]&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
[[Category:Mindscape]]&lt;br /&gt;
[[Category:Puzzle-Platformer]]&lt;/div&gt;</summary>
		<author><name>Carbon14</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=LZEXE&amp;diff=11936</id>
		<title>LZEXE</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=LZEXE&amp;diff=11936"/>
		<updated>2024-08-01T14:25:25Z</updated>

		<summary type="html">&lt;p&gt;Carbon14: Link to explanation of the algorithm and decompressor&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Tool Infobox&lt;br /&gt;
 | Platform = MS-DOS&lt;br /&gt;
 | Release = 1989&lt;br /&gt;
 | Homepage = [https://bellard.org/lzexe.html bellard.org]&lt;br /&gt;
 | Download = See homepage&lt;br /&gt;
 | Edit1 = Extraction &amp;lt;!-- Not really an extraction tool but it does do the opposite, kind of zipping up an .exe file --&amp;gt;&lt;br /&gt;
 | Games = N/A&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&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 [[:Category:id Software|id Software]] and [[:Category:Apogee|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.  UNLZEXE looks at the .exe entry point where the decompression routine sits, and compares this to known LZEXE decompressors to identify the version.&lt;br /&gt;
&lt;br /&gt;
There are three known variants of LZEXE:&lt;br /&gt;
&lt;br /&gt;
* Version 0.90: First release, supported by most decompressors.&lt;br /&gt;
* Version 0.91: Most popular release, supported by most decompressors.&lt;br /&gt;
* Version 0.91e: Latest version available, but still listed as version 0.91.  It is referred here as 0.91e as this is one of the download links on the author&#039;s website.  The decompression code in this version contains two very small changes which prevents UNLZEXE from recognising it.  Support for decompressing this version has been added to [https://github.com/Malvineous/gamecompjs/blob/master/compress/cmp-lzexe.js Camoto&#039;s gamecompjs].  The actual compression algorithm has not changed from 0.91 so supporting this variant merely requires detecting the altered decompression routine.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* [https://cosmodoc.org/topics/lzexe/ A comprehensive breakdown of the decompression process by Scott Smitelli]&lt;br /&gt;
&lt;br /&gt;
[[Category:Compression algorithms]]&lt;/div&gt;</summary>
		<author><name>Carbon14</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Talk:BGI_Stroked_Font&amp;diff=11365</id>
		<title>Talk:BGI Stroked Font</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Talk:BGI_Stroked_Font&amp;diff=11365"/>
		<updated>2023-12-21T08:26:50Z</updated>

		<summary type="html">&lt;p&gt;Carbon14: /* character layout */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= character layout =&lt;br /&gt;
The numbers in the description and diagram include 64, and for the above the baseline it ranges from 0 to 64, which is too large a range for a 6-bit number. Do we know enough detail to clarify the range, and to determine if the negative values are simply signed or 2s complement? [[User:Carbon14|Carbon14]] ([[User talk:Carbon14|talk]]) 08:26, 21 December 2023 (GMT)&lt;br /&gt;
&lt;br /&gt;
: Looking at the FreeBASIC code, it looks as though the X values is simply signed, and has a range from -63 to +63 with both -ve and +ve 0; while the Y value is a 2s complement with a range of -64 to 63. [[User:Carbon14|Carbon14]] ([[User talk:Carbon14|talk]]) 08:26, 21 December 2023 (GMT)&lt;/div&gt;</summary>
		<author><name>Carbon14</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Talk:BGI_Stroked_Font&amp;diff=11364</id>
		<title>Talk:BGI Stroked Font</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Talk:BGI_Stroked_Font&amp;diff=11364"/>
		<updated>2023-12-21T08:11:16Z</updated>

		<summary type="html">&lt;p&gt;Carbon14: question about co-ordinate encoding&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= character layout =&lt;br /&gt;
The numbers in the description and diagram include 64, and for the above the baseline it ranges from 0 to 64, which is too large a range for a 6-bit number. Do we know enough detail to clarify the range, and to determine if the negative values are simply signed or 2s complement?&lt;/div&gt;</summary>
		<author><name>Carbon14</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=BGI_Stroked_Font&amp;diff=11363</id>
		<title>BGI Stroked Font</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=BGI_Stroked_Font&amp;diff=11363"/>
		<updated>2023-12-21T08:05:02Z</updated>

		<summary type="html">&lt;p&gt;Carbon14: Correct typo, and correct 5-bit to 6-bit number in X Y bytes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Font Infobox&lt;br /&gt;
 | MaxGlyphs = 32,767&lt;br /&gt;
 | GlyphMinSize = Unlimited&lt;br /&gt;
 | GlyphMaxSize = Unlimited&lt;br /&gt;
 | Access = Indexed&lt;br /&gt;
 | Bitmap = N&lt;br /&gt;
 | Vector = Y&lt;br /&gt;
 | Compressed = N&lt;br /&gt;
 | Hidden = Y&lt;br /&gt;
 | Metadata = ID, Description&lt;br /&gt;
 | Games =&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;BGI Stroked Font&#039;&#039;&#039; is a vector font created by Borland to work with their 1987 graphics API, [[Borland Graphics Interface]]. Since the format stores vector fonts, it can easily be scaled in size with little loss of fidelity. However, because the format only supports lines and not curves, scaling to larger sizes will make the characters look jagged. The font files typically have a *.CHR file extension.&lt;br /&gt;
&lt;br /&gt;
After 1987, Borland&#039;s C and Pascal programming languages shipped with 10 different BGI Stroked Fonts: Bold, Euro, Goth, Lcom, Litt, Sans, Scri, Simp, Trip, and Tscr. Due to the popularity of Borland&#039;s programming languages, and their graphic API, BGI Stroked Fonts were used in hundreds of DOS video games.&lt;br /&gt;
&lt;br /&gt;
The designers of the file format unfortunately used a file signature starting with &amp;quot;PK&amp;quot; which would later be used by PK Zip, so BGI Stroked Font files, despite having an extension of CHR, might be misidentified as zip archives if the identifier doesn&#039;t take into account the full PK Zip signature.&lt;br /&gt;
&lt;br /&gt;
== Format ==&lt;br /&gt;
=== Header ===&lt;br /&gt;
The header includes the font&#039;s id, version number, and description.&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 || Must be 0x50 0x4B 0x08 0x08.&lt;br /&gt;
|-&lt;br /&gt;
| [[char]][...] || Description || User text. Borland&#039;s official fonts start with &amp;quot;BGI Stroked Font&amp;quot;, then the version number, and ends with a copyright. The description is terminated with: 0x1A.&lt;br /&gt;
|-&lt;br /&gt;
| [[INT16LE]] || Header Size || The size, in bytes, of the entire header.&lt;br /&gt;
|-&lt;br /&gt;
| [[char]][4] || Font Id || a 4-character id of the font.&lt;br /&gt;
|-&lt;br /&gt;
| [[INT16LE]] || Data Size || The size of the font&#039;s data block. The Header Size + Data Size should be the size of the file.&lt;br /&gt;
|-&lt;br /&gt;
| [[INT16LE]] || Major Version Number || The major version number of the font format.&lt;br /&gt;
|-&lt;br /&gt;
| [[INT16LE]] || Minor Version Number || The minor version number of the font format.&lt;br /&gt;
|-&lt;br /&gt;
| Nulls || Padding || The rest of the header should be padded out to nulls based on the Header Size. All official Borland fonts use a header size of 0x80.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Stroke Header ===&lt;br /&gt;
This section contains general information about the font including how many characters are represented, the top of the highest ascender, bottom of the lowest descender, baseline, where in the file to find each character&#039;s instructions, and the width of each character.&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]] || Stroke Check || A value of 0x2B indicates this is a stroked font.&lt;br /&gt;
|-&lt;br /&gt;
| [[INT16LE]] || Character Count || Number of total characters stored in this font.&lt;br /&gt;
|-&lt;br /&gt;
| [[BYTE]] || Undefined || Borland&#039;s own documentation labels this as &amp;quot;undefined.&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| [[INT8]] || Starting Character || The index of the first character to have a glyph associated with it.&lt;br /&gt;
|-&lt;br /&gt;
| [[INT16LE]] || Strokes Offset || The file offset where stroke definitions begin.&lt;br /&gt;
|-&lt;br /&gt;
| [[BYTE]] || Scan Flag || {{TODO|Borland&#039;s documentation calls this the &amp;quot;scan flag,&amp;quot; but doesn&#039;t explain what it is for.}}&lt;br /&gt;
|-&lt;br /&gt;
| [[INT8]] || Origin to Ascender || The distance from the origin to the font&#039;s highest point.&lt;br /&gt;
|-&lt;br /&gt;
| [[INT8]] || Origin to Baseline || The distance from the origin to the font&#039;s baseline (typically 0).&lt;br /&gt;
|-&lt;br /&gt;
| [[INT8]] || Origin to Descender || The distance from the origin to the font&#039;s lowest point. Note, you can derive the total character height by getting the distance from the Ascender to Descender.&lt;br /&gt;
|-&lt;br /&gt;
| Nulls || Padding || This section is padded with nulls until you get to the Strokes Offset. All official Borland fonts pad this section to 0x10 bytes.&lt;br /&gt;
|-&lt;br /&gt;
| [[INT16LE]][Character Count] || Character Stroke Offsets || An array of the offset to the stroke definitions for each character. To get the position in the file, you must add the Header Size and the Strokes Offset to this value.&lt;br /&gt;
|-&lt;br /&gt;
| [[INT8]][Character Count] || Character Widths || The unscaled width of each character.&lt;br /&gt;
|-&lt;br /&gt;
| Stroke Data || Character strokes || The stroke instructions for each character. See below for how to interpret them.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Stroke Data ===&lt;br /&gt;
This section contains the actual instructions for drawing individual characters.&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;
| [[BYTE]] || X Instruction || Instructions for drawing the character and an X value.&lt;br /&gt;
|-&lt;br /&gt;
| [[BYTE]] || Y Instruction || Instructions for drawing the character and a Y value.&lt;br /&gt;
|-&lt;br /&gt;
| ... || Several possible instruction pairs per character.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Encoded in each two byte pair is a single stroke instruction, and an X and Y value. The most-significant bit in each byte is an opcode, the next seven bits represent a signed value. The first byte is the X value, the second byte is the Y value. See the diagram below.&lt;br /&gt;
&lt;br /&gt;
 7 6 543210 &lt;br /&gt;
 ^ ^ ^&lt;br /&gt;
 | | +----------- 6-Bit number.&lt;br /&gt;
 | +------------- Sign bit for number.&lt;br /&gt;
 +--------------- Opcode.&lt;br /&gt;
&lt;br /&gt;
The two opcodes determine the instruction.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Code 1 !! Code 2 !! Instruction&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 0 || End of character stroke definition.&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || Borland&#039;s documentation has this labeled as &amp;quot;do scan,&amp;quot; implying it&#039;s related to the Scan Flag. It&#039;s only used in their BOLD font on characters with multiple objects like the colon and equals sign. It doesn&#039;t appear to affect how the character is drawn. {{TODO|More info is needed.}}&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 0 || Move plotter to the specified X and Y coordinates.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 1 || Draw a line from the previous X and Y coordinates and move plotter to the new X and Y coordinates.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Character Layout ==&lt;br /&gt;
[[Image:BGI Stroked Font - Layout Diagram.png|thumb|256x256px|Y-axis layout.]]&lt;br /&gt;
The Y values for each character are stored in a unique manner. Characters are drawn relative to the baseline, but, rather than put the baseline at 0, the half above the baseline starts at 64 and decreases toward 0 as you move away from the baseline, while the half below the baseline starts at -64 and increases toward -1. See the diagram to the right.&lt;br /&gt;
&lt;br /&gt;
== Source Code ==&lt;br /&gt;
=== Shape Viewer ===&lt;br /&gt;
This FreeBASIC program will draw all of the characters in the specified font, and give details about the font.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;freebasic&amp;quot;&amp;gt;&lt;br /&gt;
ScreenRes 1000, 800, 32&lt;br /&gt;
&lt;br /&gt;
&#039; Open the font file.&lt;br /&gt;
Open &amp;quot;SANS.CHR&amp;quot; For Binary As #1&lt;br /&gt;
&lt;br /&gt;
&#039; Verify the signature.&lt;br /&gt;
Dim As String Check&lt;br /&gt;
Check = Space(4)&lt;br /&gt;
Get #1, , Check&lt;br /&gt;
If Check &amp;lt;&amp;gt; &amp;quot;PK&amp;quot; + Chr(8) + Chr(8) Then&lt;br /&gt;
	Print &amp;quot;Not a Borland CHR font.&amp;quot;&lt;br /&gt;
	End&lt;br /&gt;
End If&lt;br /&gt;
&lt;br /&gt;
&#039; Load the Description&lt;br /&gt;
Dim As UByte Buffer&lt;br /&gt;
Dim As String Description&lt;br /&gt;
Do&lt;br /&gt;
	Get #1, , Buffer&lt;br /&gt;
	If Buffer &amp;lt;&amp;gt; &amp;amp;h1A Then&lt;br /&gt;
		Description = Description + Chr(Buffer)&lt;br /&gt;
	End If&lt;br /&gt;
Loop Until Buffer = &amp;amp;h1A&lt;br /&gt;
&lt;br /&gt;
&#039; Load the header size.&lt;br /&gt;
Dim As UShort HeaderSize&lt;br /&gt;
Get #1, , HeaderSize&lt;br /&gt;
&lt;br /&gt;
&#039; Load the font id.&lt;br /&gt;
Dim As String FontId&lt;br /&gt;
FontId = Space(4)&lt;br /&gt;
Get #1, , FontId&lt;br /&gt;
&lt;br /&gt;
&#039; Load the data file size. (HeaderSize + DataSize should match the size of the file.)&lt;br /&gt;
Dim As UShort DataSize&lt;br /&gt;
Get #1, , DataSize&lt;br /&gt;
&lt;br /&gt;
&#039; Load the font version number.&lt;br /&gt;
Dim As UShort FontMajorVersion&lt;br /&gt;
Get #1, , FontMajorVersion&lt;br /&gt;
Dim As UShort FontMinorVersion&lt;br /&gt;
Get #1, , FontMinorVersion&lt;br /&gt;
&lt;br /&gt;
&#039; Jump to the end of the header. The rest should be nulls anyway.&lt;br /&gt;
Get #1, HeaderSize, Buffer&lt;br /&gt;
&lt;br /&gt;
&#039; Verify this is a BGI Stroked Font.&lt;br /&gt;
Dim As String StrokedFontCheck&lt;br /&gt;
StrokedFontCheck = Space(1)&lt;br /&gt;
Get #1, , StrokedFontCheck&lt;br /&gt;
If StrokedFontCheck &amp;lt;&amp;gt; &amp;quot;+&amp;quot; Then&lt;br /&gt;
	Print &amp;quot;Not a stroked font.&amp;quot;&lt;br /&gt;
	End&lt;br /&gt;
End If&lt;br /&gt;
&lt;br /&gt;
&#039; Load the number of characters.&lt;br /&gt;
Dim As UShort CharacterCount&lt;br /&gt;
Get #1, , CharacterCount&lt;br /&gt;
&lt;br /&gt;
&#039; Skip an unknown byte.&lt;br /&gt;
Get #1, , Buffer&lt;br /&gt;
&lt;br /&gt;
&#039; Load the starting charcter. This is the first character id to have a glyph associated to it.&lt;br /&gt;
Dim As UByte StartingChar&lt;br /&gt;
Get #1, , StartingChar&lt;br /&gt;
&lt;br /&gt;
&#039; Load the file offset where the stroke definitions begin.&lt;br /&gt;
Dim As UShort StrokeDefinitionOffset&lt;br /&gt;
Get #1, , StrokeDefinitionOffset&lt;br /&gt;
&lt;br /&gt;
&#039; Skip an unknown byte.&lt;br /&gt;
Get #1, , Buffer&lt;br /&gt;
&lt;br /&gt;
&#039; Load the distance from the origin to the top of the capital letters.&lt;br /&gt;
Dim As Byte OriginToCapital&lt;br /&gt;
Get #1, , OriginToCapital&lt;br /&gt;
&lt;br /&gt;
&#039; Load the distance from the origin to the baseline.&lt;br /&gt;
Dim As Byte OriginToBaseline&lt;br /&gt;
Get #1, , OriginToBaseline&lt;br /&gt;
&lt;br /&gt;
&#039; Load the distance from the origin to the bottom of the descenders.&lt;br /&gt;
Dim As Byte OriginToDescender&lt;br /&gt;
Get #1, , OriginToDescender&lt;br /&gt;
&lt;br /&gt;
&#039; Skip remaining nulls.&lt;br /&gt;
Dim As Integer I&lt;br /&gt;
For I = 0 To 4&lt;br /&gt;
	Get #1, , Buffer&lt;br /&gt;
Next I&lt;br /&gt;
&lt;br /&gt;
&#039; Load offset to characters definitions.&lt;br /&gt;
Dim As UShort CharacterDefinitionOffset(StartingChar To (StartingChar + CharacterCount) - 1)&lt;br /&gt;
For I = StartingChar To (StartingChar + CharacterCount) - 1&lt;br /&gt;
	Get #1, , CharacterDefinitionOffset(I)&lt;br /&gt;
Next I&lt;br /&gt;
&lt;br /&gt;
&#039; Load character widths.&lt;br /&gt;
Dim As UByte CharacterWidths(StartingChar To (StartingChar + CharacterCount) - 1)&lt;br /&gt;
For I = StartingChar To (StartingChar + CharacterCount) - 1&lt;br /&gt;
	Get #1, , CharacterWidths(I)&lt;br /&gt;
Next I&lt;br /&gt;
&lt;br /&gt;
Dim As Integer CharacterHeight = OriginToCapital + (OriginToDescender * -1)&lt;br /&gt;
&lt;br /&gt;
Print &amp;quot;Font Id: &amp;quot;; FontId&lt;br /&gt;
Print &amp;quot;Description: &amp;quot;; Description&lt;br /&gt;
Print &amp;quot;Total Character Height: &amp;quot;; CharacterHeight&lt;br /&gt;
Print &amp;quot;Max Ascender: &amp;quot;; OriginToCapital&lt;br /&gt;
Print &amp;quot;Max Descender: &amp;quot;; OriginToDescender&lt;br /&gt;
Print &amp;quot;Total Characters: &amp;quot;; CharacterCount&lt;br /&gt;
Print &amp;quot;Starting Character: 0x&amp;quot;; Hex(StartingChar)&lt;br /&gt;
&lt;br /&gt;
Dim As UByte XByte, YByte, Finished&lt;br /&gt;
Dim As Integer XCurrent, YCurrent, XStart, YStart, XBuffer, YBuffer&lt;br /&gt;
Dim As Byte XNew, YNew, XOpcode, YOpcode, XSign, YSign&lt;br /&gt;
&lt;br /&gt;
XStart = 10&lt;br /&gt;
YStart = 130&lt;br /&gt;
XBuffer = 5&lt;br /&gt;
YBuffer = 10&lt;br /&gt;
&lt;br /&gt;
For I = StartingChar To (CharacterCount - StartingChar) - 1&lt;br /&gt;
	&#039; Jump to the starting offset of this character.&lt;br /&gt;
	Get #1, CharacterDefinitionOffset(I) + StrokeDefinitionOffset + HeaderSize, Buffer&lt;br /&gt;
&lt;br /&gt;
	&#039; Load all of the drawing instructions and draw the character.&lt;br /&gt;
	Finished = 0&lt;br /&gt;
	Do&lt;br /&gt;
		&#039; Load the opcode/values. Two bytes, one for X, the other for Y.&lt;br /&gt;
		&#039; 7 6 543210&lt;br /&gt;
		&#039; ^ ^ ^&lt;br /&gt;
		&#039; | | +------ Start of 6-bit number.&lt;br /&gt;
		&#039; | +-------- Sign bit for number.&lt;br /&gt;
		&#039; +---------- Opcode bit.&lt;br /&gt;
		&lt;br /&gt;
		Get #1, , XByte		&#039; First opcode and X value.&lt;br /&gt;
		Get #1, , YByte		&#039; Second opcode and Y value.&lt;br /&gt;
&lt;br /&gt;
		&#039; Read the opcode and sign bits.&lt;br /&gt;
		XOpcode = Bit(XByte, 7)&lt;br /&gt;
		YOpcode = Bit(YByte, 7)&lt;br /&gt;
		XSign = Bit(XByte, 6)&lt;br /&gt;
		YSign = Bit(YByte, 6)&lt;br /&gt;
&lt;br /&gt;
		&#039; Clear the opcode bits and the sign bits.&lt;br /&gt;
		XByte = BitReset(XByte, 7)&lt;br /&gt;
		XByte = BitReset(XByte, 6)&lt;br /&gt;
		YByte = BitReset(YByte, 7)&lt;br /&gt;
		YByte = BitReset(YByte, 6)&lt;br /&gt;
&lt;br /&gt;
		XNew = XByte&lt;br /&gt;
		YNew = YByte&lt;br /&gt;
&lt;br /&gt;
		&#039; Set the values to negative if the signed bits are on.&lt;br /&gt;
		If XSign = True Then&lt;br /&gt;
			XNew = XNew * -1&lt;br /&gt;
		End If&lt;br /&gt;
		If YSign = True Then&lt;br /&gt;
			YNew = (64 - YNew)		&#039; Normalize the descender&#039;s value.&lt;br /&gt;
			YNew = YNew * -1&lt;br /&gt;
		End If&lt;br /&gt;
&lt;br /&gt;
		&#039; Normalize the Y position.&lt;br /&gt;
		YNew = (64 - YNew)&lt;br /&gt;
&lt;br /&gt;
		If XOpcode = 0 Then&lt;br /&gt;
			If YOpcode = 0 Then&lt;br /&gt;
				&#039; End of character definition. Move to the next character.&lt;br /&gt;
				XStart = XStart + CharacterWidths(I) + XBuffer&lt;br /&gt;
				If XStart &amp;gt; 950 Then&lt;br /&gt;
					XStart = 10&lt;br /&gt;
					YStart = YStart + CharacterHeight + YBuffer&lt;br /&gt;
				End If&lt;br /&gt;
				Finished = 1&lt;br /&gt;
			Else&lt;br /&gt;
				&#039; Not sure what this is for. It&#039;s only used in the BOLD font when a character has &lt;br /&gt;
				&#039; multiple separate objects like with the colon and equal sign. However, not all &lt;br /&gt;
				&#039; characters with broken up objects in the font use it, and leaving it out doesn&#039;t &lt;br /&gt;
				&#039; appear to mess up the drawing at all.&lt;br /&gt;
			End If&lt;br /&gt;
		Else&lt;br /&gt;
			If YOpcode = 0 Then&lt;br /&gt;
				&#039; Move Pointer to X, Y.&lt;br /&gt;
				&#039; This happens below since both move and draw must change the position.&lt;br /&gt;
			Else&lt;br /&gt;
				&#039; Draw From Current Pointer to new X, Y.&lt;br /&gt;
				Line(XCurrent, YCurrent)-(XStart + XNew, YStart + YNew), RGB(255, 255, 255)&lt;br /&gt;
			End If&lt;br /&gt;
&lt;br /&gt;
			XCurrent = XStart + XNew&lt;br /&gt;
			YCurrent = YStart + YNew&lt;br /&gt;
		End If&lt;br /&gt;
	Loop Until Finished = 1&lt;br /&gt;
Next I&lt;br /&gt;
&lt;br /&gt;
Sleep&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
{{BeginFileFormatTools|Type=image}}&lt;br /&gt;
{{FileFormatTool&lt;br /&gt;
| Name = [https://ftp.sunet.se/mirror/archive/ftp.sunet.se/pub/simtelnet/msdos/borland/bgifont.zip FE Stroke Font Editor]&lt;br /&gt;
| Platform = DOS&lt;br /&gt;
| canView = Yes&lt;br /&gt;
| canExport = Yes&lt;br /&gt;
| canImport = Yes&lt;br /&gt;
| editHidden = No&lt;br /&gt;
| editMetadata = Yes&lt;br /&gt;
| notes = Borland&#039;s in-house font Stroked Font editor.&lt;br /&gt;
}}&lt;br /&gt;
{{EndFileFormatTools}}&lt;br /&gt;
&lt;br /&gt;
== Credits ==&lt;br /&gt;
This format was reverse engineered by [[User:TheAlmightyGuru|TheAlmightyGuru]]. 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;
== Links ==&lt;br /&gt;
* [https://ftp.sunet.se/mirror/archive/ftp.sunet.se/pub/simtelnet/msdos/borland ftp.sunet.se/mirror/archive/ftp.sunet.se/pub/simtelnet/msdos/borland] - Various tools for BGI fonts.&lt;/div&gt;</summary>
		<author><name>Carbon14</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=DAT_Format&amp;diff=11351</id>
		<title>DAT Format</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=DAT_Format&amp;diff=11351"/>
		<updated>2023-10-16T14:56:25Z</updated>

		<summary type="html">&lt;p&gt;Carbon14: Added Fury of the Furries&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Disambig}}&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;DAT Format&#039;&#039; could mean:&lt;br /&gt;
&lt;br /&gt;
* [[DAT Format (Bullfrog)]]&lt;br /&gt;
* [[DAT Format (California Games II)]]&lt;br /&gt;
* [[DAT Format (Dr. Riptide)]]&lt;br /&gt;
* [[DAT Format (Dark Legions)]]&lt;br /&gt;
* [[DAT Format (Fury of the Furries)]]&lt;br /&gt;
* [[DAT Format (God of Thunder)]]&lt;br /&gt;
* [[DAT Format (Highway Hunter)]]&lt;br /&gt;
* [[DAT Format (Hocus Pocus)]]&lt;br /&gt;
* [[DAT Format (Hugo)]]&lt;br /&gt;
* [[DAT Format (Monster Bash)]]&lt;br /&gt;
* [[DAT Format (Mystic Towers)]]&lt;br /&gt;
* [[DAT Format (Papyrus)]]&lt;br /&gt;
* [[DAT Format (Sango Fighter)]]&lt;br /&gt;
* [[DAT Format (The Lost Vikings)]]&lt;br /&gt;
* [[DAT Format (Wacky Wheels)]]&lt;br /&gt;
* [[DAT Format (Witchaven savegame)]]&lt;br /&gt;
* [[DAT Format (Zool)]]&lt;br /&gt;
* [[DAT Format (ZZT)]]&lt;/div&gt;</summary>
		<author><name>Carbon14</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=BIN_Format_(Fury_of_the_Furries)&amp;diff=11309</id>
		<title>BIN Format (Fury of the Furries)</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=BIN_Format_(Fury_of_the_Furries)&amp;diff=11309"/>
		<updated>2023-09-08T15:06:06Z</updated>

		<summary type="html">&lt;p&gt;Carbon14: /* FILE Format */ Confirm starting position of player sprite&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Map Infobox&lt;br /&gt;
 | Type = 2D tile-based&lt;br /&gt;
 | Layers = 3&lt;br /&gt;
 | Tile size = 16&amp;amp;times;16&lt;br /&gt;
 | Viewport = 320&amp;amp;times;200&lt;br /&gt;
 | Games = &lt;br /&gt;
  {{Game|Fury of the Furries}}&lt;br /&gt;
  {{Game|Pac-In-Time}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Fury of the Furries]] maps contain the static background and landscape for the level, collectable coins, time extensions and extra lives and destructible bricks. They also contain the &#039;scripting for the game play itself&#039;, this is in the form of the definitions of the sprites that interact with the player character. There are up to 10 sprites in the level, each having up to 10 states. Triggers are defined for switching between states, and for the player and or sprites to switch on or off other game-play elements.&lt;br /&gt;
&lt;br /&gt;
The file itself is run-length encoded, and after decompression is always a fixed length. Generally unused elements within the game are marked by the [[UINT16LE]] value 0xFFFF.&lt;br /&gt;
&lt;br /&gt;
== File Formats ==&lt;br /&gt;
&lt;br /&gt;
=== RLE Compressed File Format ===&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;
| FOURCC || header || Appears to be a header with version number. Most files decompress to an object 25518 bytes in length, but a handful of files are shorter, and appear to be earlier versions.&amp;lt;br /&amp;gt;&lt;br /&gt;
byte is the shortest, at 25432 bytes, the last entry is the time field.&amp;lt;br /&amp;gt;&lt;br /&gt;
byt1 and byt3 are 25482 bytes long, and include currents.&amp;lt;br /&amp;gt;&lt;br /&gt;
byt4 is 25518, it&#039;s the version seen for the vast majority of the files, and includes all the fields after the currents.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || length || Number of bytes in section.&amp;lt;br /&amp;gt;&lt;br /&gt;
if zero then stop decompressing.&amp;lt;br /&amp;gt;&lt;br /&gt;
if less than 0x7D00 then use the following length bytes from the input.&amp;lt;br /&amp;gt;&lt;br /&gt;
otherwise use the following byte from the input (length - 0x7D00) times.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
compressed and uncompressed sections always alternate, even if this makes the packing less efficient. This means that if you have two adjacent runs, There will be at least 1 character represented as uncompressed.&lt;br /&gt;
|-&lt;br /&gt;
| ... || etc || continue with another &#039;length&#039; until the final file size is achieved (25,518 bytes), or you read a 0 length.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The file should end with a zero length section. i.e. two bytes of 0.&lt;br /&gt;
&lt;br /&gt;
=== Uncompressed File Format ===&lt;br /&gt;
&lt;br /&gt;
==== FILE Format ====&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]] || mapWidth || Width of the playable area (in tiles) between 20 and 78.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || mapHeight || Height of the playable area (in tiles) between 13 and 51.&lt;br /&gt;
&lt;br /&gt;
The maximum number of tiles in a game is 1024. This places constraints on the width and height. &lt;br /&gt;
The minimum width is 20 to match the viewport size of 320 pixels, and this constrains the height to 51 (20 &amp;amp;times; 51 = 1020). &lt;br /&gt;
The minimum height is 13 to match the viewport size of 200 pixels, and this constrains the width to 78 (13 &amp;amp;times; 78 = 1014).&lt;br /&gt;
Any other combination of width and height is possible so long as it meets these constraints.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]][2][78 &amp;amp;times; 51] || tileIndex || Pairs of coordinates into a [[LBM Format]] &amp;lt;tt&amp;gt;DEC&amp;lt;/tt&amp;gt; file containing the tiles.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || decFile || The &amp;lt;tt&amp;gt;DEC&amp;lt;/tt&amp;gt; file number less one. i.e. a value of 3 indicates &amp;lt;tt&amp;gt;DECOR04.LBM&amp;lt;/tt&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || startLeft || The center of the starting position for the player character from the left of the level, less 16 pixels.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || startTop || The center of starting position for the player character from the top of the level, less 16 pixels.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || foregroundPaletteIndex || The index of the first palette entry to be regarded as foreground.&lt;br /&gt;
&lt;br /&gt;
The palette for the &amp;lt;tt&amp;gt;DEC&amp;lt;/tt&amp;gt; file has 16 colours and they are used in a particular order. The first is always black and is background (i.e. the player character is not blocked by this colour)&lt;br /&gt;
The next 4 usually dark versions of yellow, red, green and blue and are used for the shadow colour of the player character sprite, in the 4 different forms that the player can take.&lt;br /&gt;
The next colour (colour 5 in the palette) is the bright colour of the player character, and will be swapped out as the player changes form.&lt;br /&gt;
The remaining colours a chosen to suit the needs of the stage of the game (desert, forest, mountains etc).&lt;br /&gt;
Generally the lower colours are regarded as background, and the upper colours as foreground, and this is used in the collision detection for the player and the landscape.&lt;br /&gt;
|-&lt;br /&gt;
| EXIT[5] || exit || 5 instances of a 6-byte structure describing the exits from the level.&lt;br /&gt;
|-&lt;br /&gt;
| WATER[5] || water1 || 5 instances of an 8-byte structure describing the regions of water in the level.&lt;br /&gt;
|-&lt;br /&gt;
| TELEPORT[5] || teleport || 5 instances of an 8-byte structure describing the regions of the game that can teleport the player.&lt;br /&gt;
|-&lt;br /&gt;
| NONSTICK[5] || nonStick || 5 instances of an 8-byte structure describing regions that the player cannot attach a rope to.&lt;br /&gt;
|-&lt;br /&gt;
| ACID[5] || acid || 5 instances of an 8-byte structure describing regions that will dissolve the player if touched.&lt;br /&gt;
|-&lt;br /&gt;
| DANGER[20] || danger || 20 instances of an 8-byte structure describing regions that will explode the player if touched.&lt;br /&gt;
|-&lt;br /&gt;
| SPRITE[10] || sprite || 10 instances of a 1688-byte structure describing sprites.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || blueStart || 1 if the blue form of the player is available at the start of the game.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || greenStart || 1 if the green form of the player is available at the start of the game.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || redStart || 1 if the red form of the player is available at the start of the game.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || yellowStart || 1 if the yellow form of the player is available at the start of the game.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]][12] || unknown || Purpose unknown.&lt;br /&gt;
|-&lt;br /&gt;
| FIELD[5] || redField || 5 instances of an 8-byte structure describing the particle field that enables/disables the red form of the player.&lt;br /&gt;
|-&lt;br /&gt;
| FIELD[5] || greenField || 5 instances of an 8-byte structure describing the particle field that enables/disables the green form of the player.&lt;br /&gt;
|-&lt;br /&gt;
| FIELD[5] || yellowField || 5 instances of an 8-byte structure describing the particle field that enables/disables the yellow form of the player.&lt;br /&gt;
|-&lt;br /&gt;
| FIELD[5] || blueField || 5 instances of an 8-byte structure describing the particle field that enables/disables the blue form of the player.&lt;br /&gt;
|-&lt;br /&gt;
| WATER[5] || water2 || 5 further instances of an 8-byte structure describing the regions of water in the level.&lt;br /&gt;
&lt;br /&gt;
Probably one of these 2 sets of water data describes regions that start full of water and can be emptied, and the others describe regions which start empty and can be filled. I&#039;m not sure.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]][10] || unknown || Purpose unknown.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || waterPaletteIndex || Index of colour in palette used for water.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || airPaletteIndex || Index of colour in palette used for air.&lt;br /&gt;
&lt;br /&gt;
These two palette entries can be used to modify the image as regions of water fill/empty.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || time || Amount of time the player has to complete the level. In 30ths of a second (The game plays at 30 fps).&lt;br /&gt;
|-&lt;br /&gt;
| CURRENT[5] || current || 5 instances of a 10-byte structure describing regions of air or water currents.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || motePaletteIndex || Index of colour in palette used for dust motes moving in currents.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || unknown || Purpose unknown.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || spriteMap || Index of [[LBM Format]] &amp;lt;tt&amp;gt;SPR&amp;lt;/tt&amp;gt; sprite map image to use for this level. 0 = A, 1 = B.&lt;br /&gt;
|-&lt;br /&gt;
| EXITRETURN[5] || exitReturn || 5 instances of a 4-byte structure describing where the player character should re-enter the level following a side-quest.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]][5] || exitGraphic || 5 instances of and indication of how a player is depicted exiting. 0 used for the end of the level dissolves the level viewport in a swirling vortex. 1 is smooth and is used for tunnelling in multi-map levels.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || unknown || Seems to indicate a row in the map at which some odd palette behaviour is observed. Possibly a bug, but it could be that the intention is to shift something in the colour scheme when the player is above ground / below ground.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== EXIT Format ====&lt;br /&gt;
&lt;br /&gt;
The exit region is 16 &amp;amp;times; 16 pixels.&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]] || left || Left pixel of the centre of the exit.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || top pixel of the centre of the exit.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || destination || Level number less one to go to next from this exit.  Also the most significant bit indicates 0 = level exit, 1 = go to side quest.&amp;lt;br /&amp;gt;&lt;br /&gt;
e.g. if this value is 0x8006, then go to level 7 as a side-quest.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== WATER Format ====&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]] || left || Left pixel of the water region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the water region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right pixel of the water region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom pixel of the water region.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== TELEPORT Format ====&lt;br /&gt;
&lt;br /&gt;
The teleport region is 16 &amp;amp;times; 16 pixels.&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]] || srcX || Left pixel of the centre of the teleport region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || srcY || Top pixel of the centre of the teleport region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || destX || Right pixel of the centre of the teleport region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || destY || Bottom pixel of the centre of the teleport region.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== NONSTICK Format ====&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]] || left || Left pixel of the non-stick region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the non-stick region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right pixel of the non-stick region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom pixel of the non-stick region.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== ACID Format ====&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]] || left || Left pixel of the acid region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the acid region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right pixel of the acid region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom pixel of the acid region.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== DANGER Format ====&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]] || left || Left pixel of the danger region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the danger region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right pixel of the danger region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom pixel of the danger region.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== FIELD Format ====&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]] || left || Left pixel of the particle field.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the particle field.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right pixel of the particle field.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom pixel of the particle field.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== CURRENT Format ====&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]] || left || Left pixel of the current region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the current region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right pixel of the current region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom pixel of the current region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || flags || bit-0 and bit-1 : direction 00 = down, 01 = right, 10 = up, 11 = left&amp;lt;br/&amp;gt;bit-2: strength of current 0 = weak, 1 = strong&amp;lt;br/&amp;gt;bit-3: show current using dust motes 0 = no, 1 = yes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== EXITRETURN Format ====&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]] || left || Left pixel of the centre of the return region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the return region.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== REGION Format ====&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]] || left || Left of region&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top of region&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right of region&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom of region&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== SPRITE Format ====&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;}&lt;br /&gt;
! Data Type || Name || Description&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || layer || 0 = middleground (can interact with the player)&amp;lt;br/&amp;gt;1=background&amp;lt;br/&amp;gt;2=foreground (player can move behind it).&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || malevolence || Bit-0: sprite will kill player in ? form&amp;lt;br/&amp;gt;Bit-1: sprite will kill player in yellow form&amp;lt;br/&amp;gt;Bit-2: sprite will kill player in ? form&amp;lt;br/&amp;gt;Bit-3: sprite will kill player in ? form.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || unknown || Purpose unknown&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || mask || Sprite requires a mask graphic for transparency. If a mask is required, it will be immediately below the sprite tile in the &amp;lt;tt&amp;gt;SPR&amp;lt;/tt&amp;gt; file.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || cleanUp || The previous sprite image needs to be removed for each frame. This is not necessary if the sprite is unmasked and never changes position.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || strength || How much damage the sprite can sustain. 0 = infinite, otherwise 1-127.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || blastArea || Size of the explosion if the sprite is destroyed. (Purely a decorative concern, there is no splash damage).&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || active || Is the sprite in use.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]][2] || unknown ||&lt;br /&gt;
|-&lt;br /&gt;
| REGION || furryEntryRegion || Sprite will activate if furry enters this region.&lt;br /&gt;
|-&lt;br /&gt;
| REGION || furryExitRegion || Sprite will activate if furry leaves this region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]][72] || unknown || Suspect that this region is actually populated and used as working space while the level is being played. &lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || fireRate || How often the sprite fires projectiles. 0 = none, 1-5 = low-high.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || fireType || How are projectiles fired. 1 = All directions slowly, 2 = Right, 3 = Left, 4 = All directions medium, 5 = All directions fast.&lt;br /&gt;
|-&lt;br /&gt;
| STATE[10] || state || 10 instances of a 158-byte structure describing the states that the sprite can be in.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== STATE Format ====&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]] || left || Left pixel of the sprite location.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the sprite location.&lt;br /&gt;
|- &lt;br /&gt;
| [[UINT16LE]] || destState || Another state to move towards. The sprite will physically move to the location of the destination state, and change state when it reaches that location.&lt;br /&gt;
|- &lt;br /&gt;
| [[UINT16LE]] || speed || Speed of sprite movement 0 = None, 1-5 = slow-fast.&lt;br /&gt;
|- &lt;br /&gt;
| [[UINT8]] || movementType || 0 = horizontal then vertical, 1 = as the crow flies, 2 = just track player vertically, no sideways movement, 3 = just track player horizontally, no up/down movement, 4 = track player, 5 = fast move??, 6 = None.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || destWaterState || Another state to change to when a requested water level change is acheived.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || gravity || If 1, the sprite falls when unsupported.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || current || Control currents. Bits 0-4 specify currents affected, Bit-5 turns currents off, Bit-6 turns currents on.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || activateSprite || Number of another sprite to activate.&lt;br /&gt;
|-&lt;br /&gt;
| TRIGGER || entryTrigger || A 10-byte structure that describes a trigger to change state when the player enters a region.&lt;br /&gt;
|- &lt;br /&gt;
| TRIGGER || exitTrigger || A 10-byte structure that describes a trigger to change state when the player leaves a region.&lt;br /&gt;
|-&lt;br /&gt;
| TRIGGER || spriteEntryTrigger || A 10-byte structure that describes a trigger to change state when another sprite enters a region.&lt;br /&gt;
|-&lt;br /&gt;
| TRIGGER || spriteExitTrigger || A 10-byte structure that describes a trigger to change state when another sprite leaves a region (or is destroyed).&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || destroy || The sprite is destroyed (deactivated) when it enters this state.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || bounce || The sprite bounces ballistically when it hits a surface.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || emptyWater || Bits 8-15 speed of emptying, Bits 0-7 number of water region to empty.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || fillWater || Bits 8-15 speed of filling, Bits 0-7 number of water region to fill.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]][4] || unknown || Seems to affect the starting location of projectiles, relative to the sprite location.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || waterTriggerLeft || Left pixel of region for water trigger (see destWaterState field).&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || waterTriggerTop || Top pixel of region for water trigger.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || waterTriggerRight || Right pixel of region for water trigger.&lt;br /&gt;
|-&lt;br /&gt;
| FRAME[10] || frame || 10 instances of an 8-byte structure describing the sprite tile location within the &amp;lt;tt&amp;gt;SPR&amp;lt;/tt&amp;gt; image file&lt;br /&gt;
|- &lt;br /&gt;
| [[UINT16LE]] || animSpeed || Rate of frame change of sprite animation.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || cycle || Does the animation cycle repeat.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || cycleCount || Number of animation frames before changing state.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || animTriggerState || Sprite state to move to when cycleCount is reached.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || waterTriggerBottom || Bottom pixel of region for water trigger.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== TRIGGER Format ====&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]] || state || State to move to when triggered.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || left || Left pixel of the trigger region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the trigger region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right pixel of the trigger region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom pixel of the trigger region.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== FRAME Format ====&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]] || left || Left pixel of the sprite on the &amp;lt;tt&amp;gt;SPR&amp;lt;/tt&amp;gt; image file.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the sprite on the &amp;lt;tt&amp;gt;SPR&amp;lt;/tt&amp;gt; image file.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right pixel of the sprite on the &amp;lt;tt&amp;gt;SPR&amp;lt;/tt&amp;gt; image file &amp;lt;em&amp;gt;+ 8 pixels&amp;lt;/em&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom pixel of the sprite on the &amp;lt;tt&amp;gt;SPR&amp;lt;/tt&amp;gt; image file.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
There are 10 different stages in the game, and correspondingly 10 different tile and sprite sets. &lt;br /&gt;
&lt;br /&gt;
The tile images for the backgrounds and landscape are stored in the &amp;lt;tt&amp;gt;DEC&amp;lt;/tt&amp;gt; directory, in image files which are in [[LBM Format]]. These files are named &amp;lt;tt&amp;gt;DECORxx.LBM&amp;lt;/tt&amp;gt; where xx is specified by the decFile field of the main structure.&lt;br /&gt;
&lt;br /&gt;
The sprite images are stored in the &amp;lt;tt&amp;gt;SPR&amp;lt;/tt&amp;gt; directory, in image files which are in [[LBM Format]]. These files are named &amp;lt;tt&amp;gt;SPRxxn&amp;lt;/tt&amp;gt; where xx is specified by the decFile field of the main structure, and n is specified by the spriteMap field in the main structure.&lt;br /&gt;
&lt;br /&gt;
The sprites can be of varying sizes, the FRAME data structure describes the bounding box in pixels within the sprite image file. If the sprite requires a transparency mask, then this mask will be a rectangular region with the same size as the sprite, and placed in the image file immediately below the sprite.&lt;br /&gt;
&lt;br /&gt;
Within the tile image file, all the tiles are 16 &amp;amp;times; 16 pixels, tiles are referenced in the main file structure as a pair of byte coordinates, giving the X and Y position in tiles within the image file.&lt;br /&gt;
&lt;br /&gt;
Certain tiles in the image file have special meaning.&lt;br /&gt;
&lt;br /&gt;
The tile at 0,1 is a coin. If the player touches this tile in the level, they will gain a coin, and the tile will be swapped out for the tile at 0,0 which is always empty.&lt;br /&gt;
&lt;br /&gt;
The tile at 0,2 is an extra life. If the player touches this tile in the level, they will gain an extra life, and the tile will be swapped out for the tile at 0,0.&lt;br /&gt;
&lt;br /&gt;
The tile at 0,3 is a time extension. If the player touches this tile in the level, they will gain an extra 30 seconds on the clock, and the tile will be swapped out for the tile at 0,0.&lt;br /&gt;
&lt;br /&gt;
All the remaining tiles on rows 0, 1 and 2 in the map are destructible tiles. The red form of the player can chew through the scenery. Chewing a tile from row 0 will cause that tile to be swapped out with the tile immediately below it in row 1. Chewing a tile from row 1 will cause that tile to be swapped out with the tile immediately below it in row 2. Chewing a tile from row 2 will cause that tile to be swapped out with the tile at 0,0, which is empty, so the player can then get through the gap created. Typically the tiles in these rows depict a gradually degraded state, you can have tiles that require more or less action to destroy them, by choosing from the three rows. Often the top row tiles are visually indistinguishable from some other non-destructible tiles in the tileset, allowing you to hide destructible tiles.&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
{{BeginFileFormatTools|Type=group}}&lt;br /&gt;
{{FileFormatTool&lt;br /&gt;
| Name = [[FuryUtils]]&lt;br /&gt;
| Platform = x64Windows, Linux&lt;br /&gt;
| canExtract = Yes&lt;br /&gt;
| canDecompress = Yes&lt;br /&gt;
| canCreate = Yes&lt;br /&gt;
| canModify = Yes&lt;br /&gt;
| canCompress = Yes&lt;br /&gt;
| editHidden = N/A&lt;br /&gt;
| editMetadata = Yes&lt;br /&gt;
| notes = &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:Carbon14|carbon14]]. 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>Carbon14</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=BIN_Format_(Fury_of_the_Furries)&amp;diff=11308</id>
		<title>BIN Format (Fury of the Furries)</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=BIN_Format_(Fury_of_the_Furries)&amp;diff=11308"/>
		<updated>2023-09-08T15:03:49Z</updated>

		<summary type="html">&lt;p&gt;Carbon14: /* FRAME Format */  Note that frame boundary extends by an additional 8 pixels at the right&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Map Infobox&lt;br /&gt;
 | Type = 2D tile-based&lt;br /&gt;
 | Layers = 3&lt;br /&gt;
 | Tile size = 16&amp;amp;times;16&lt;br /&gt;
 | Viewport = 320&amp;amp;times;200&lt;br /&gt;
 | Games = &lt;br /&gt;
  {{Game|Fury of the Furries}}&lt;br /&gt;
  {{Game|Pac-In-Time}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Fury of the Furries]] maps contain the static background and landscape for the level, collectable coins, time extensions and extra lives and destructible bricks. They also contain the &#039;scripting for the game play itself&#039;, this is in the form of the definitions of the sprites that interact with the player character. There are up to 10 sprites in the level, each having up to 10 states. Triggers are defined for switching between states, and for the player and or sprites to switch on or off other game-play elements.&lt;br /&gt;
&lt;br /&gt;
The file itself is run-length encoded, and after decompression is always a fixed length. Generally unused elements within the game are marked by the [[UINT16LE]] value 0xFFFF.&lt;br /&gt;
&lt;br /&gt;
== File Formats ==&lt;br /&gt;
&lt;br /&gt;
=== RLE Compressed File Format ===&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;
| FOURCC || header || Appears to be a header with version number. Most files decompress to an object 25518 bytes in length, but a handful of files are shorter, and appear to be earlier versions.&amp;lt;br /&amp;gt;&lt;br /&gt;
byte is the shortest, at 25432 bytes, the last entry is the time field.&amp;lt;br /&amp;gt;&lt;br /&gt;
byt1 and byt3 are 25482 bytes long, and include currents.&amp;lt;br /&amp;gt;&lt;br /&gt;
byt4 is 25518, it&#039;s the version seen for the vast majority of the files, and includes all the fields after the currents.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || length || Number of bytes in section.&amp;lt;br /&amp;gt;&lt;br /&gt;
if zero then stop decompressing.&amp;lt;br /&amp;gt;&lt;br /&gt;
if less than 0x7D00 then use the following length bytes from the input.&amp;lt;br /&amp;gt;&lt;br /&gt;
otherwise use the following byte from the input (length - 0x7D00) times.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
compressed and uncompressed sections always alternate, even if this makes the packing less efficient. This means that if you have two adjacent runs, There will be at least 1 character represented as uncompressed.&lt;br /&gt;
|-&lt;br /&gt;
| ... || etc || continue with another &#039;length&#039; until the final file size is achieved (25,518 bytes), or you read a 0 length.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The file should end with a zero length section. i.e. two bytes of 0.&lt;br /&gt;
&lt;br /&gt;
=== Uncompressed File Format ===&lt;br /&gt;
&lt;br /&gt;
==== FILE Format ====&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]] || mapWidth || Width of the playable area (in tiles) between 20 and 78.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || mapHeight || Height of the playable area (in tiles) between 13 and 51.&lt;br /&gt;
&lt;br /&gt;
The maximum number of tiles in a game is 1024. This places constraints on the width and height. &lt;br /&gt;
The minimum width is 20 to match the viewport size of 320 pixels, and this constrains the height to 51 (20 &amp;amp;times; 51 = 1020). &lt;br /&gt;
The minimum height is 13 to match the viewport size of 200 pixels, and this constrains the width to 78 (13 &amp;amp;times; 78 = 1014).&lt;br /&gt;
Any other combination of width and height is possible so long as it meets these constraints.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]][2][78 &amp;amp;times; 51] || tileIndex || Pairs of coordinates into a [[LBM Format]] &amp;lt;tt&amp;gt;DEC&amp;lt;/tt&amp;gt; file containing the tiles.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || decFile || The &amp;lt;tt&amp;gt;DEC&amp;lt;/tt&amp;gt; file number less one. i.e. a value of 3 indicates &amp;lt;tt&amp;gt;DECOR04.LBM&amp;lt;/tt&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || startLeft || The left of the starting position for the player character, less 8 pixels.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || startTop || The top of the starting position for the player character.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || foregroundPaletteIndex || The index of the first palette entry to be regarded as foreground.&lt;br /&gt;
&lt;br /&gt;
The palette for the &amp;lt;tt&amp;gt;DEC&amp;lt;/tt&amp;gt; file has 16 colours and they are used in a particular order. The first is always black and is background (i.e. the player character is not blocked by this colour)&lt;br /&gt;
The next 4 usually dark versions of yellow, red, green and blue and are used for the shadow colour of the player character sprite, in the 4 different forms that the player can take.&lt;br /&gt;
The next colour (colour 5 in the palette) is the bright colour of the player character, and will be swapped out as the player changes form.&lt;br /&gt;
The remaining colours a chosen to suit the needs of the stage of the game (desert, forest, mountains etc).&lt;br /&gt;
Generally the lower colours are regarded as background, and the upper colours as foreground, and this is used in the collision detection for the player and the landscape.&lt;br /&gt;
|-&lt;br /&gt;
| EXIT[5] || exit || 5 instances of a 6-byte structure describing the exits from the level.&lt;br /&gt;
|-&lt;br /&gt;
| WATER[5] || water1 || 5 instances of an 8-byte structure describing the regions of water in the level.&lt;br /&gt;
|-&lt;br /&gt;
| TELEPORT[5] || teleport || 5 instances of an 8-byte structure describing the regions of the game that can teleport the player.&lt;br /&gt;
|-&lt;br /&gt;
| NONSTICK[5] || nonStick || 5 instances of an 8-byte structure describing regions that the player cannot attach a rope to.&lt;br /&gt;
|-&lt;br /&gt;
| ACID[5] || acid || 5 instances of an 8-byte structure describing regions that will dissolve the player if touched.&lt;br /&gt;
|-&lt;br /&gt;
| DANGER[20] || danger || 20 instances of an 8-byte structure describing regions that will explode the player if touched.&lt;br /&gt;
|-&lt;br /&gt;
| SPRITE[10] || sprite || 10 instances of a 1688-byte structure describing sprites.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || blueStart || 1 if the blue form of the player is available at the start of the game.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || greenStart || 1 if the green form of the player is available at the start of the game.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || redStart || 1 if the red form of the player is available at the start of the game.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || yellowStart || 1 if the yellow form of the player is available at the start of the game.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]][12] || unknown || Purpose unknown.&lt;br /&gt;
|-&lt;br /&gt;
| FIELD[5] || redField || 5 instances of an 8-byte structure describing the particle field that enables/disables the red form of the player.&lt;br /&gt;
|-&lt;br /&gt;
| FIELD[5] || greenField || 5 instances of an 8-byte structure describing the particle field that enables/disables the green form of the player.&lt;br /&gt;
|-&lt;br /&gt;
| FIELD[5] || yellowField || 5 instances of an 8-byte structure describing the particle field that enables/disables the yellow form of the player.&lt;br /&gt;
|-&lt;br /&gt;
| FIELD[5] || blueField || 5 instances of an 8-byte structure describing the particle field that enables/disables the blue form of the player.&lt;br /&gt;
|-&lt;br /&gt;
| WATER[5] || water2 || 5 further instances of an 8-byte structure describing the regions of water in the level.&lt;br /&gt;
&lt;br /&gt;
Probably one of these 2 sets of water data describes regions that start full of water and can be emptied, and the others describe regions which start empty and can be filled. I&#039;m not sure.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]][10] || unknown || Purpose unknown.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || waterPaletteIndex || Index of colour in palette used for water.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || airPaletteIndex || Index of colour in palette used for air.&lt;br /&gt;
&lt;br /&gt;
These two palette entries can be used to modify the image as regions of water fill/empty.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || time || Amount of time the player has to complete the level. In 30ths of a second (The game plays at 30 fps).&lt;br /&gt;
|-&lt;br /&gt;
| CURRENT[5] || current || 5 instances of a 10-byte structure describing regions of air or water currents.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || motePaletteIndex || Index of colour in palette used for dust motes moving in currents.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || unknown || Purpose unknown.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || spriteMap || Index of [[LBM Format]] &amp;lt;tt&amp;gt;SPR&amp;lt;/tt&amp;gt; sprite map image to use for this level. 0 = A, 1 = B.&lt;br /&gt;
|-&lt;br /&gt;
| EXITRETURN[5] || exitReturn || 5 instances of a 4-byte structure describing where the player character should re-enter the level following a side-quest.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]][5] || exitGraphic || 5 instances of and indication of how a player is depicted exiting. 0 used for the end of the level dissolves the level viewport in a swirling vortex. 1 is smooth and is used for tunnelling in multi-map levels.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || unknown || Seems to indicate a row in the map at which some odd palette behaviour is observed. Possibly a bug, but it could be that the intention is to shift something in the colour scheme when the player is above ground / below ground.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== EXIT Format ====&lt;br /&gt;
&lt;br /&gt;
The exit region is 16 &amp;amp;times; 16 pixels.&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]] || left || Left pixel of the centre of the exit.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || top pixel of the centre of the exit.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || destination || Level number less one to go to next from this exit.  Also the most significant bit indicates 0 = level exit, 1 = go to side quest.&amp;lt;br /&amp;gt;&lt;br /&gt;
e.g. if this value is 0x8006, then go to level 7 as a side-quest.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== WATER Format ====&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]] || left || Left pixel of the water region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the water region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right pixel of the water region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom pixel of the water region.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== TELEPORT Format ====&lt;br /&gt;
&lt;br /&gt;
The teleport region is 16 &amp;amp;times; 16 pixels.&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]] || srcX || Left pixel of the centre of the teleport region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || srcY || Top pixel of the centre of the teleport region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || destX || Right pixel of the centre of the teleport region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || destY || Bottom pixel of the centre of the teleport region.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== NONSTICK Format ====&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]] || left || Left pixel of the non-stick region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the non-stick region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right pixel of the non-stick region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom pixel of the non-stick region.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== ACID Format ====&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]] || left || Left pixel of the acid region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the acid region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right pixel of the acid region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom pixel of the acid region.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== DANGER Format ====&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]] || left || Left pixel of the danger region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the danger region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right pixel of the danger region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom pixel of the danger region.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== FIELD Format ====&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]] || left || Left pixel of the particle field.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the particle field.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right pixel of the particle field.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom pixel of the particle field.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== CURRENT Format ====&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]] || left || Left pixel of the current region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the current region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right pixel of the current region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom pixel of the current region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || flags || bit-0 and bit-1 : direction 00 = down, 01 = right, 10 = up, 11 = left&amp;lt;br/&amp;gt;bit-2: strength of current 0 = weak, 1 = strong&amp;lt;br/&amp;gt;bit-3: show current using dust motes 0 = no, 1 = yes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== EXITRETURN Format ====&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]] || left || Left pixel of the centre of the return region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the return region.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== REGION Format ====&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]] || left || Left of region&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top of region&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right of region&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom of region&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== SPRITE Format ====&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;}&lt;br /&gt;
! Data Type || Name || Description&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || layer || 0 = middleground (can interact with the player)&amp;lt;br/&amp;gt;1=background&amp;lt;br/&amp;gt;2=foreground (player can move behind it).&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || malevolence || Bit-0: sprite will kill player in ? form&amp;lt;br/&amp;gt;Bit-1: sprite will kill player in yellow form&amp;lt;br/&amp;gt;Bit-2: sprite will kill player in ? form&amp;lt;br/&amp;gt;Bit-3: sprite will kill player in ? form.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || unknown || Purpose unknown&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || mask || Sprite requires a mask graphic for transparency. If a mask is required, it will be immediately below the sprite tile in the &amp;lt;tt&amp;gt;SPR&amp;lt;/tt&amp;gt; file.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || cleanUp || The previous sprite image needs to be removed for each frame. This is not necessary if the sprite is unmasked and never changes position.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || strength || How much damage the sprite can sustain. 0 = infinite, otherwise 1-127.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || blastArea || Size of the explosion if the sprite is destroyed. (Purely a decorative concern, there is no splash damage).&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || active || Is the sprite in use.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]][2] || unknown ||&lt;br /&gt;
|-&lt;br /&gt;
| REGION || furryEntryRegion || Sprite will activate if furry enters this region.&lt;br /&gt;
|-&lt;br /&gt;
| REGION || furryExitRegion || Sprite will activate if furry leaves this region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]][72] || unknown || Suspect that this region is actually populated and used as working space while the level is being played. &lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || fireRate || How often the sprite fires projectiles. 0 = none, 1-5 = low-high.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || fireType || How are projectiles fired. 1 = All directions slowly, 2 = Right, 3 = Left, 4 = All directions medium, 5 = All directions fast.&lt;br /&gt;
|-&lt;br /&gt;
| STATE[10] || state || 10 instances of a 158-byte structure describing the states that the sprite can be in.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== STATE Format ====&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]] || left || Left pixel of the sprite location.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the sprite location.&lt;br /&gt;
|- &lt;br /&gt;
| [[UINT16LE]] || destState || Another state to move towards. The sprite will physically move to the location of the destination state, and change state when it reaches that location.&lt;br /&gt;
|- &lt;br /&gt;
| [[UINT16LE]] || speed || Speed of sprite movement 0 = None, 1-5 = slow-fast.&lt;br /&gt;
|- &lt;br /&gt;
| [[UINT8]] || movementType || 0 = horizontal then vertical, 1 = as the crow flies, 2 = just track player vertically, no sideways movement, 3 = just track player horizontally, no up/down movement, 4 = track player, 5 = fast move??, 6 = None.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || destWaterState || Another state to change to when a requested water level change is acheived.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || gravity || If 1, the sprite falls when unsupported.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || current || Control currents. Bits 0-4 specify currents affected, Bit-5 turns currents off, Bit-6 turns currents on.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || activateSprite || Number of another sprite to activate.&lt;br /&gt;
|-&lt;br /&gt;
| TRIGGER || entryTrigger || A 10-byte structure that describes a trigger to change state when the player enters a region.&lt;br /&gt;
|- &lt;br /&gt;
| TRIGGER || exitTrigger || A 10-byte structure that describes a trigger to change state when the player leaves a region.&lt;br /&gt;
|-&lt;br /&gt;
| TRIGGER || spriteEntryTrigger || A 10-byte structure that describes a trigger to change state when another sprite enters a region.&lt;br /&gt;
|-&lt;br /&gt;
| TRIGGER || spriteExitTrigger || A 10-byte structure that describes a trigger to change state when another sprite leaves a region (or is destroyed).&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || destroy || The sprite is destroyed (deactivated) when it enters this state.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || bounce || The sprite bounces ballistically when it hits a surface.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || emptyWater || Bits 8-15 speed of emptying, Bits 0-7 number of water region to empty.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || fillWater || Bits 8-15 speed of filling, Bits 0-7 number of water region to fill.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]][4] || unknown || Seems to affect the starting location of projectiles, relative to the sprite location.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || waterTriggerLeft || Left pixel of region for water trigger (see destWaterState field).&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || waterTriggerTop || Top pixel of region for water trigger.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || waterTriggerRight || Right pixel of region for water trigger.&lt;br /&gt;
|-&lt;br /&gt;
| FRAME[10] || frame || 10 instances of an 8-byte structure describing the sprite tile location within the &amp;lt;tt&amp;gt;SPR&amp;lt;/tt&amp;gt; image file&lt;br /&gt;
|- &lt;br /&gt;
| [[UINT16LE]] || animSpeed || Rate of frame change of sprite animation.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || cycle || Does the animation cycle repeat.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || cycleCount || Number of animation frames before changing state.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || animTriggerState || Sprite state to move to when cycleCount is reached.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || waterTriggerBottom || Bottom pixel of region for water trigger.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== TRIGGER Format ====&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]] || state || State to move to when triggered.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || left || Left pixel of the trigger region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the trigger region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right pixel of the trigger region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom pixel of the trigger region.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== FRAME Format ====&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]] || left || Left pixel of the sprite on the &amp;lt;tt&amp;gt;SPR&amp;lt;/tt&amp;gt; image file.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the sprite on the &amp;lt;tt&amp;gt;SPR&amp;lt;/tt&amp;gt; image file.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right pixel of the sprite on the &amp;lt;tt&amp;gt;SPR&amp;lt;/tt&amp;gt; image file &amp;lt;em&amp;gt;+ 8 pixels&amp;lt;/em&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom pixel of the sprite on the &amp;lt;tt&amp;gt;SPR&amp;lt;/tt&amp;gt; image file.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
There are 10 different stages in the game, and correspondingly 10 different tile and sprite sets. &lt;br /&gt;
&lt;br /&gt;
The tile images for the backgrounds and landscape are stored in the &amp;lt;tt&amp;gt;DEC&amp;lt;/tt&amp;gt; directory, in image files which are in [[LBM Format]]. These files are named &amp;lt;tt&amp;gt;DECORxx.LBM&amp;lt;/tt&amp;gt; where xx is specified by the decFile field of the main structure.&lt;br /&gt;
&lt;br /&gt;
The sprite images are stored in the &amp;lt;tt&amp;gt;SPR&amp;lt;/tt&amp;gt; directory, in image files which are in [[LBM Format]]. These files are named &amp;lt;tt&amp;gt;SPRxxn&amp;lt;/tt&amp;gt; where xx is specified by the decFile field of the main structure, and n is specified by the spriteMap field in the main structure.&lt;br /&gt;
&lt;br /&gt;
The sprites can be of varying sizes, the FRAME data structure describes the bounding box in pixels within the sprite image file. If the sprite requires a transparency mask, then this mask will be a rectangular region with the same size as the sprite, and placed in the image file immediately below the sprite.&lt;br /&gt;
&lt;br /&gt;
Within the tile image file, all the tiles are 16 &amp;amp;times; 16 pixels, tiles are referenced in the main file structure as a pair of byte coordinates, giving the X and Y position in tiles within the image file.&lt;br /&gt;
&lt;br /&gt;
Certain tiles in the image file have special meaning.&lt;br /&gt;
&lt;br /&gt;
The tile at 0,1 is a coin. If the player touches this tile in the level, they will gain a coin, and the tile will be swapped out for the tile at 0,0 which is always empty.&lt;br /&gt;
&lt;br /&gt;
The tile at 0,2 is an extra life. If the player touches this tile in the level, they will gain an extra life, and the tile will be swapped out for the tile at 0,0.&lt;br /&gt;
&lt;br /&gt;
The tile at 0,3 is a time extension. If the player touches this tile in the level, they will gain an extra 30 seconds on the clock, and the tile will be swapped out for the tile at 0,0.&lt;br /&gt;
&lt;br /&gt;
All the remaining tiles on rows 0, 1 and 2 in the map are destructible tiles. The red form of the player can chew through the scenery. Chewing a tile from row 0 will cause that tile to be swapped out with the tile immediately below it in row 1. Chewing a tile from row 1 will cause that tile to be swapped out with the tile immediately below it in row 2. Chewing a tile from row 2 will cause that tile to be swapped out with the tile at 0,0, which is empty, so the player can then get through the gap created. Typically the tiles in these rows depict a gradually degraded state, you can have tiles that require more or less action to destroy them, by choosing from the three rows. Often the top row tiles are visually indistinguishable from some other non-destructible tiles in the tileset, allowing you to hide destructible tiles.&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
{{BeginFileFormatTools|Type=group}}&lt;br /&gt;
{{FileFormatTool&lt;br /&gt;
| Name = [[FuryUtils]]&lt;br /&gt;
| Platform = x64Windows, Linux&lt;br /&gt;
| canExtract = Yes&lt;br /&gt;
| canDecompress = Yes&lt;br /&gt;
| canCreate = Yes&lt;br /&gt;
| canModify = Yes&lt;br /&gt;
| canCompress = Yes&lt;br /&gt;
| editHidden = N/A&lt;br /&gt;
| editMetadata = Yes&lt;br /&gt;
| notes = &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:Carbon14|carbon14]]. 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>Carbon14</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=BIN_Format_(Fury_of_the_Furries)&amp;diff=11307</id>
		<title>BIN Format (Fury of the Furries)</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=BIN_Format_(Fury_of_the_Furries)&amp;diff=11307"/>
		<updated>2023-09-08T15:02:20Z</updated>

		<summary type="html">&lt;p&gt;Carbon14: /* STATE Format */ correct endianess of empty / fill instructions&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Map Infobox&lt;br /&gt;
 | Type = 2D tile-based&lt;br /&gt;
 | Layers = 3&lt;br /&gt;
 | Tile size = 16&amp;amp;times;16&lt;br /&gt;
 | Viewport = 320&amp;amp;times;200&lt;br /&gt;
 | Games = &lt;br /&gt;
  {{Game|Fury of the Furries}}&lt;br /&gt;
  {{Game|Pac-In-Time}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Fury of the Furries]] maps contain the static background and landscape for the level, collectable coins, time extensions and extra lives and destructible bricks. They also contain the &#039;scripting for the game play itself&#039;, this is in the form of the definitions of the sprites that interact with the player character. There are up to 10 sprites in the level, each having up to 10 states. Triggers are defined for switching between states, and for the player and or sprites to switch on or off other game-play elements.&lt;br /&gt;
&lt;br /&gt;
The file itself is run-length encoded, and after decompression is always a fixed length. Generally unused elements within the game are marked by the [[UINT16LE]] value 0xFFFF.&lt;br /&gt;
&lt;br /&gt;
== File Formats ==&lt;br /&gt;
&lt;br /&gt;
=== RLE Compressed File Format ===&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;
| FOURCC || header || Appears to be a header with version number. Most files decompress to an object 25518 bytes in length, but a handful of files are shorter, and appear to be earlier versions.&amp;lt;br /&amp;gt;&lt;br /&gt;
byte is the shortest, at 25432 bytes, the last entry is the time field.&amp;lt;br /&amp;gt;&lt;br /&gt;
byt1 and byt3 are 25482 bytes long, and include currents.&amp;lt;br /&amp;gt;&lt;br /&gt;
byt4 is 25518, it&#039;s the version seen for the vast majority of the files, and includes all the fields after the currents.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || length || Number of bytes in section.&amp;lt;br /&amp;gt;&lt;br /&gt;
if zero then stop decompressing.&amp;lt;br /&amp;gt;&lt;br /&gt;
if less than 0x7D00 then use the following length bytes from the input.&amp;lt;br /&amp;gt;&lt;br /&gt;
otherwise use the following byte from the input (length - 0x7D00) times.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
compressed and uncompressed sections always alternate, even if this makes the packing less efficient. This means that if you have two adjacent runs, There will be at least 1 character represented as uncompressed.&lt;br /&gt;
|-&lt;br /&gt;
| ... || etc || continue with another &#039;length&#039; until the final file size is achieved (25,518 bytes), or you read a 0 length.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The file should end with a zero length section. i.e. two bytes of 0.&lt;br /&gt;
&lt;br /&gt;
=== Uncompressed File Format ===&lt;br /&gt;
&lt;br /&gt;
==== FILE Format ====&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]] || mapWidth || Width of the playable area (in tiles) between 20 and 78.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || mapHeight || Height of the playable area (in tiles) between 13 and 51.&lt;br /&gt;
&lt;br /&gt;
The maximum number of tiles in a game is 1024. This places constraints on the width and height. &lt;br /&gt;
The minimum width is 20 to match the viewport size of 320 pixels, and this constrains the height to 51 (20 &amp;amp;times; 51 = 1020). &lt;br /&gt;
The minimum height is 13 to match the viewport size of 200 pixels, and this constrains the width to 78 (13 &amp;amp;times; 78 = 1014).&lt;br /&gt;
Any other combination of width and height is possible so long as it meets these constraints.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]][2][78 &amp;amp;times; 51] || tileIndex || Pairs of coordinates into a [[LBM Format]] &amp;lt;tt&amp;gt;DEC&amp;lt;/tt&amp;gt; file containing the tiles.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || decFile || The &amp;lt;tt&amp;gt;DEC&amp;lt;/tt&amp;gt; file number less one. i.e. a value of 3 indicates &amp;lt;tt&amp;gt;DECOR04.LBM&amp;lt;/tt&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || startLeft || The left of the starting position for the player character, less 8 pixels.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || startTop || The top of the starting position for the player character.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || foregroundPaletteIndex || The index of the first palette entry to be regarded as foreground.&lt;br /&gt;
&lt;br /&gt;
The palette for the &amp;lt;tt&amp;gt;DEC&amp;lt;/tt&amp;gt; file has 16 colours and they are used in a particular order. The first is always black and is background (i.e. the player character is not blocked by this colour)&lt;br /&gt;
The next 4 usually dark versions of yellow, red, green and blue and are used for the shadow colour of the player character sprite, in the 4 different forms that the player can take.&lt;br /&gt;
The next colour (colour 5 in the palette) is the bright colour of the player character, and will be swapped out as the player changes form.&lt;br /&gt;
The remaining colours a chosen to suit the needs of the stage of the game (desert, forest, mountains etc).&lt;br /&gt;
Generally the lower colours are regarded as background, and the upper colours as foreground, and this is used in the collision detection for the player and the landscape.&lt;br /&gt;
|-&lt;br /&gt;
| EXIT[5] || exit || 5 instances of a 6-byte structure describing the exits from the level.&lt;br /&gt;
|-&lt;br /&gt;
| WATER[5] || water1 || 5 instances of an 8-byte structure describing the regions of water in the level.&lt;br /&gt;
|-&lt;br /&gt;
| TELEPORT[5] || teleport || 5 instances of an 8-byte structure describing the regions of the game that can teleport the player.&lt;br /&gt;
|-&lt;br /&gt;
| NONSTICK[5] || nonStick || 5 instances of an 8-byte structure describing regions that the player cannot attach a rope to.&lt;br /&gt;
|-&lt;br /&gt;
| ACID[5] || acid || 5 instances of an 8-byte structure describing regions that will dissolve the player if touched.&lt;br /&gt;
|-&lt;br /&gt;
| DANGER[20] || danger || 20 instances of an 8-byte structure describing regions that will explode the player if touched.&lt;br /&gt;
|-&lt;br /&gt;
| SPRITE[10] || sprite || 10 instances of a 1688-byte structure describing sprites.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || blueStart || 1 if the blue form of the player is available at the start of the game.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || greenStart || 1 if the green form of the player is available at the start of the game.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || redStart || 1 if the red form of the player is available at the start of the game.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || yellowStart || 1 if the yellow form of the player is available at the start of the game.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]][12] || unknown || Purpose unknown.&lt;br /&gt;
|-&lt;br /&gt;
| FIELD[5] || redField || 5 instances of an 8-byte structure describing the particle field that enables/disables the red form of the player.&lt;br /&gt;
|-&lt;br /&gt;
| FIELD[5] || greenField || 5 instances of an 8-byte structure describing the particle field that enables/disables the green form of the player.&lt;br /&gt;
|-&lt;br /&gt;
| FIELD[5] || yellowField || 5 instances of an 8-byte structure describing the particle field that enables/disables the yellow form of the player.&lt;br /&gt;
|-&lt;br /&gt;
| FIELD[5] || blueField || 5 instances of an 8-byte structure describing the particle field that enables/disables the blue form of the player.&lt;br /&gt;
|-&lt;br /&gt;
| WATER[5] || water2 || 5 further instances of an 8-byte structure describing the regions of water in the level.&lt;br /&gt;
&lt;br /&gt;
Probably one of these 2 sets of water data describes regions that start full of water and can be emptied, and the others describe regions which start empty and can be filled. I&#039;m not sure.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]][10] || unknown || Purpose unknown.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || waterPaletteIndex || Index of colour in palette used for water.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || airPaletteIndex || Index of colour in palette used for air.&lt;br /&gt;
&lt;br /&gt;
These two palette entries can be used to modify the image as regions of water fill/empty.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || time || Amount of time the player has to complete the level. In 30ths of a second (The game plays at 30 fps).&lt;br /&gt;
|-&lt;br /&gt;
| CURRENT[5] || current || 5 instances of a 10-byte structure describing regions of air or water currents.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || motePaletteIndex || Index of colour in palette used for dust motes moving in currents.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || unknown || Purpose unknown.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || spriteMap || Index of [[LBM Format]] &amp;lt;tt&amp;gt;SPR&amp;lt;/tt&amp;gt; sprite map image to use for this level. 0 = A, 1 = B.&lt;br /&gt;
|-&lt;br /&gt;
| EXITRETURN[5] || exitReturn || 5 instances of a 4-byte structure describing where the player character should re-enter the level following a side-quest.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]][5] || exitGraphic || 5 instances of and indication of how a player is depicted exiting. 0 used for the end of the level dissolves the level viewport in a swirling vortex. 1 is smooth and is used for tunnelling in multi-map levels.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || unknown || Seems to indicate a row in the map at which some odd palette behaviour is observed. Possibly a bug, but it could be that the intention is to shift something in the colour scheme when the player is above ground / below ground.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== EXIT Format ====&lt;br /&gt;
&lt;br /&gt;
The exit region is 16 &amp;amp;times; 16 pixels.&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]] || left || Left pixel of the centre of the exit.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || top pixel of the centre of the exit.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || destination || Level number less one to go to next from this exit.  Also the most significant bit indicates 0 = level exit, 1 = go to side quest.&amp;lt;br /&amp;gt;&lt;br /&gt;
e.g. if this value is 0x8006, then go to level 7 as a side-quest.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== WATER Format ====&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]] || left || Left pixel of the water region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the water region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right pixel of the water region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom pixel of the water region.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== TELEPORT Format ====&lt;br /&gt;
&lt;br /&gt;
The teleport region is 16 &amp;amp;times; 16 pixels.&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]] || srcX || Left pixel of the centre of the teleport region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || srcY || Top pixel of the centre of the teleport region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || destX || Right pixel of the centre of the teleport region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || destY || Bottom pixel of the centre of the teleport region.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== NONSTICK Format ====&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]] || left || Left pixel of the non-stick region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the non-stick region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right pixel of the non-stick region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom pixel of the non-stick region.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== ACID Format ====&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]] || left || Left pixel of the acid region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the acid region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right pixel of the acid region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom pixel of the acid region.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== DANGER Format ====&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]] || left || Left pixel of the danger region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the danger region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right pixel of the danger region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom pixel of the danger region.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== FIELD Format ====&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]] || left || Left pixel of the particle field.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the particle field.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right pixel of the particle field.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom pixel of the particle field.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== CURRENT Format ====&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]] || left || Left pixel of the current region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the current region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right pixel of the current region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom pixel of the current region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || flags || bit-0 and bit-1 : direction 00 = down, 01 = right, 10 = up, 11 = left&amp;lt;br/&amp;gt;bit-2: strength of current 0 = weak, 1 = strong&amp;lt;br/&amp;gt;bit-3: show current using dust motes 0 = no, 1 = yes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== EXITRETURN Format ====&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]] || left || Left pixel of the centre of the return region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the return region.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== REGION Format ====&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]] || left || Left of region&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top of region&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right of region&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom of region&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== SPRITE Format ====&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;}&lt;br /&gt;
! Data Type || Name || Description&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || layer || 0 = middleground (can interact with the player)&amp;lt;br/&amp;gt;1=background&amp;lt;br/&amp;gt;2=foreground (player can move behind it).&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || malevolence || Bit-0: sprite will kill player in ? form&amp;lt;br/&amp;gt;Bit-1: sprite will kill player in yellow form&amp;lt;br/&amp;gt;Bit-2: sprite will kill player in ? form&amp;lt;br/&amp;gt;Bit-3: sprite will kill player in ? form.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || unknown || Purpose unknown&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || mask || Sprite requires a mask graphic for transparency. If a mask is required, it will be immediately below the sprite tile in the &amp;lt;tt&amp;gt;SPR&amp;lt;/tt&amp;gt; file.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || cleanUp || The previous sprite image needs to be removed for each frame. This is not necessary if the sprite is unmasked and never changes position.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || strength || How much damage the sprite can sustain. 0 = infinite, otherwise 1-127.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || blastArea || Size of the explosion if the sprite is destroyed. (Purely a decorative concern, there is no splash damage).&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || active || Is the sprite in use.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]][2] || unknown ||&lt;br /&gt;
|-&lt;br /&gt;
| REGION || furryEntryRegion || Sprite will activate if furry enters this region.&lt;br /&gt;
|-&lt;br /&gt;
| REGION || furryExitRegion || Sprite will activate if furry leaves this region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]][72] || unknown || Suspect that this region is actually populated and used as working space while the level is being played. &lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || fireRate || How often the sprite fires projectiles. 0 = none, 1-5 = low-high.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || fireType || How are projectiles fired. 1 = All directions slowly, 2 = Right, 3 = Left, 4 = All directions medium, 5 = All directions fast.&lt;br /&gt;
|-&lt;br /&gt;
| STATE[10] || state || 10 instances of a 158-byte structure describing the states that the sprite can be in.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== STATE Format ====&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]] || left || Left pixel of the sprite location.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the sprite location.&lt;br /&gt;
|- &lt;br /&gt;
| [[UINT16LE]] || destState || Another state to move towards. The sprite will physically move to the location of the destination state, and change state when it reaches that location.&lt;br /&gt;
|- &lt;br /&gt;
| [[UINT16LE]] || speed || Speed of sprite movement 0 = None, 1-5 = slow-fast.&lt;br /&gt;
|- &lt;br /&gt;
| [[UINT8]] || movementType || 0 = horizontal then vertical, 1 = as the crow flies, 2 = just track player vertically, no sideways movement, 3 = just track player horizontally, no up/down movement, 4 = track player, 5 = fast move??, 6 = None.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || destWaterState || Another state to change to when a requested water level change is acheived.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || gravity || If 1, the sprite falls when unsupported.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || current || Control currents. Bits 0-4 specify currents affected, Bit-5 turns currents off, Bit-6 turns currents on.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || activateSprite || Number of another sprite to activate.&lt;br /&gt;
|-&lt;br /&gt;
| TRIGGER || entryTrigger || A 10-byte structure that describes a trigger to change state when the player enters a region.&lt;br /&gt;
|- &lt;br /&gt;
| TRIGGER || exitTrigger || A 10-byte structure that describes a trigger to change state when the player leaves a region.&lt;br /&gt;
|-&lt;br /&gt;
| TRIGGER || spriteEntryTrigger || A 10-byte structure that describes a trigger to change state when another sprite enters a region.&lt;br /&gt;
|-&lt;br /&gt;
| TRIGGER || spriteExitTrigger || A 10-byte structure that describes a trigger to change state when another sprite leaves a region (or is destroyed).&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || destroy || The sprite is destroyed (deactivated) when it enters this state.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || bounce || The sprite bounces ballistically when it hits a surface.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || emptyWater || Bits 8-15 speed of emptying, Bits 0-7 number of water region to empty.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || fillWater || Bits 8-15 speed of filling, Bits 0-7 number of water region to fill.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]][4] || unknown || Seems to affect the starting location of projectiles, relative to the sprite location.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || waterTriggerLeft || Left pixel of region for water trigger (see destWaterState field).&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || waterTriggerTop || Top pixel of region for water trigger.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || waterTriggerRight || Right pixel of region for water trigger.&lt;br /&gt;
|-&lt;br /&gt;
| FRAME[10] || frame || 10 instances of an 8-byte structure describing the sprite tile location within the &amp;lt;tt&amp;gt;SPR&amp;lt;/tt&amp;gt; image file&lt;br /&gt;
|- &lt;br /&gt;
| [[UINT16LE]] || animSpeed || Rate of frame change of sprite animation.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || cycle || Does the animation cycle repeat.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || cycleCount || Number of animation frames before changing state.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || animTriggerState || Sprite state to move to when cycleCount is reached.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || waterTriggerBottom || Bottom pixel of region for water trigger.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== TRIGGER Format ====&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]] || state || State to move to when triggered.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || left || Left pixel of the trigger region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the trigger region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right pixel of the trigger region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom pixel of the trigger region.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== FRAME Format ====&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]] || left || Left pixel of the sprite on the &amp;lt;tt&amp;gt;SPR&amp;lt;/tt&amp;gt; image file.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the sprite on the &amp;lt;tt&amp;gt;SPR&amp;lt;/tt&amp;gt; image file.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right pixel of the sprite on the &amp;lt;tt&amp;gt;SPR&amp;lt;/tt&amp;gt; image file.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom pixel of the sprite on the &amp;lt;tt&amp;gt;SPR&amp;lt;/tt&amp;gt; image file.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
There are 10 different stages in the game, and correspondingly 10 different tile and sprite sets. &lt;br /&gt;
&lt;br /&gt;
The tile images for the backgrounds and landscape are stored in the &amp;lt;tt&amp;gt;DEC&amp;lt;/tt&amp;gt; directory, in image files which are in [[LBM Format]]. These files are named &amp;lt;tt&amp;gt;DECORxx.LBM&amp;lt;/tt&amp;gt; where xx is specified by the decFile field of the main structure.&lt;br /&gt;
&lt;br /&gt;
The sprite images are stored in the &amp;lt;tt&amp;gt;SPR&amp;lt;/tt&amp;gt; directory, in image files which are in [[LBM Format]]. These files are named &amp;lt;tt&amp;gt;SPRxxn&amp;lt;/tt&amp;gt; where xx is specified by the decFile field of the main structure, and n is specified by the spriteMap field in the main structure.&lt;br /&gt;
&lt;br /&gt;
The sprites can be of varying sizes, the FRAME data structure describes the bounding box in pixels within the sprite image file. If the sprite requires a transparency mask, then this mask will be a rectangular region with the same size as the sprite, and placed in the image file immediately below the sprite.&lt;br /&gt;
&lt;br /&gt;
Within the tile image file, all the tiles are 16 &amp;amp;times; 16 pixels, tiles are referenced in the main file structure as a pair of byte coordinates, giving the X and Y position in tiles within the image file.&lt;br /&gt;
&lt;br /&gt;
Certain tiles in the image file have special meaning.&lt;br /&gt;
&lt;br /&gt;
The tile at 0,1 is a coin. If the player touches this tile in the level, they will gain a coin, and the tile will be swapped out for the tile at 0,0 which is always empty.&lt;br /&gt;
&lt;br /&gt;
The tile at 0,2 is an extra life. If the player touches this tile in the level, they will gain an extra life, and the tile will be swapped out for the tile at 0,0.&lt;br /&gt;
&lt;br /&gt;
The tile at 0,3 is a time extension. If the player touches this tile in the level, they will gain an extra 30 seconds on the clock, and the tile will be swapped out for the tile at 0,0.&lt;br /&gt;
&lt;br /&gt;
All the remaining tiles on rows 0, 1 and 2 in the map are destructible tiles. The red form of the player can chew through the scenery. Chewing a tile from row 0 will cause that tile to be swapped out with the tile immediately below it in row 1. Chewing a tile from row 1 will cause that tile to be swapped out with the tile immediately below it in row 2. Chewing a tile from row 2 will cause that tile to be swapped out with the tile at 0,0, which is empty, so the player can then get through the gap created. Typically the tiles in these rows depict a gradually degraded state, you can have tiles that require more or less action to destroy them, by choosing from the three rows. Often the top row tiles are visually indistinguishable from some other non-destructible tiles in the tileset, allowing you to hide destructible tiles.&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
{{BeginFileFormatTools|Type=group}}&lt;br /&gt;
{{FileFormatTool&lt;br /&gt;
| Name = [[FuryUtils]]&lt;br /&gt;
| Platform = x64Windows, Linux&lt;br /&gt;
| canExtract = Yes&lt;br /&gt;
| canDecompress = Yes&lt;br /&gt;
| canCreate = Yes&lt;br /&gt;
| canModify = Yes&lt;br /&gt;
| canCompress = Yes&lt;br /&gt;
| editHidden = N/A&lt;br /&gt;
| editMetadata = Yes&lt;br /&gt;
| notes = &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:Carbon14|carbon14]]. 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>Carbon14</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=Fury_of_the_Furries&amp;diff=11304</id>
		<title>Fury of the Furries</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=Fury_of_the_Furries&amp;diff=11304"/>
		<updated>2023-09-01T15:56:28Z</updated>

		<summary type="html">&lt;p&gt;Carbon14: Add external link to reference documentation&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 = No&lt;br /&gt;
 | Sound = Edit&lt;br /&gt;
 | Music = Edit&lt;br /&gt;
 | Text = Edit&lt;br /&gt;
 | Story = Edit&lt;br /&gt;
 | Interface = Edit&lt;br /&gt;
 | Demos = Edit&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Fury of the Furries]] (also subsequently reskinned as &#039;&#039;&#039;Pac-In-Time&#039;&#039;&#039;) is a puzzle-platform game for the PC, Macintosh, Amiga and Amiga-32, developed by [https://en.wikipedia.org/wiki/Kalisto_Entertainment Kalisto] and released by [https://en.wikipedia.org/wiki/Mindscape_(company) Mindscape] in 1993&lt;br /&gt;
&lt;br /&gt;
== Obtaining the game ==&lt;br /&gt;
&lt;br /&gt;
The game has not been officially released as freeware.&lt;br /&gt;
&lt;br /&gt;
{{BeginGameFileList}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.dat&lt;br /&gt;
 | Format = [[DAT Format (Fury of the Furries)]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Archive collection of other files, used by either of the preliminary executables (intro.dat or lang.dat)&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = messages.*&lt;br /&gt;
 | Format = [[MESSAGES Format (Fury of the Furries)]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Text strings in different languages&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = passw.dta&lt;br /&gt;
 | Format = [[DTA Format (Fury of the Furries)]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Passwords used in the games cheat protection&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = prot.*&lt;br /&gt;
 | Format = [[PROT Format (Fury of the Furries)]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Text strings in different languages for the cheat protection screen&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = lang.txt&lt;br /&gt;
 | Format = [[LANG.TXT Format (Fury of the Furries)]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Selection of languages supported by the game&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = furies.anm&lt;br /&gt;
 | Format = [[ANM Format (Fury of the Furries)]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Arrangement of icons on the screen during language selection&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.kmd&lt;br /&gt;
 | Format = [[KMD Format (Fury of the Furries)]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Obscure MOD file music format&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.iff&lt;br /&gt;
 | Format = [[AIFF Format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Sound effect in AIFF format&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = spr/*.lbm&lt;br /&gt;
 | Format = [[LBM Format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = 4-bit Image file contains player and enemy sprites&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = dec/*.lbm&lt;br /&gt;
 | Format = [[LBM Format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = 4-bit Image file containing backgrounds for game levels&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = pic/*.lbm&lt;br /&gt;
 | Format = [[LBM Format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = 16-bit Image file containing cut scene images&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = dat/data*.bin&lt;br /&gt;
 | Format = [[BIN Format (Fury of the Furries)]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Game level data&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = dat/cdata*.bin&lt;br /&gt;
 | Format = CDATA Format (Fury of the Furries)&lt;br /&gt;
 | KnownFormat = No&lt;br /&gt;
 | Desc = Unknown&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = dat/demo*.bin&lt;br /&gt;
 | Format = [[DEMO Format (Fury of the Furries)]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Script for automatic playing of certain game levels in &#039;attract mode&#039;&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = dat/fdata*.bin&lt;br /&gt;
 | Format = FDATA Format (Fury of the Furries)&lt;br /&gt;
 | KnownFormat = No&lt;br /&gt;
 | Desc = Unknown&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = dat/gamedat.bin&lt;br /&gt;
 | Format = [[GAMEDAT Format (Fury of the Furries)]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = User preference settings and save progress&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = dat/sdata*.bin&lt;br /&gt;
 | Format = SDATA Format (Fury of the Furries)&lt;br /&gt;
 | KnownFormat = No&lt;br /&gt;
 | Desc = Unknown&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.blk&lt;br /&gt;
 | Format = [[BLK Format (Fury of the Furries)]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Pixel ranges used to select sections of images&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.imm&lt;br /&gt;
 | Format = [[IMM Format (Fury of the Furries)]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Pixel information for an image, but without a color palette&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.lmh&lt;br /&gt;
 | Format = [[LMH LMO Format (Fury of the Furries)|LMH Format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Part of an animation for the game intro&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.lmo&lt;br /&gt;
 | Format = [[LMH LMO Format (Fury of the Furries)|LMO Format]]&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Part of an animation for the game intro&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.pam&lt;br /&gt;
 | Format = [[VGA Palette]] (modern form)&lt;br /&gt;
 | KnownFormat = Yes&lt;br /&gt;
 | Desc = Palette information for images&lt;br /&gt;
}}&lt;br /&gt;
{{GameFile&lt;br /&gt;
 | Name = *.snd&lt;br /&gt;
 | Format = [[SND Format (Fury of the Furries)]]&lt;br /&gt;
 | KnownFormat = Yes &lt;br /&gt;
 | Desc = Sound effects used in the game intro&lt;br /&gt;
}}&lt;br /&gt;
{{EndGameFileList}}&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/david-c14/FuryStudio/blob/v0.4.1-dev/doc/reference/index.md A developing hypertext reference for the behaviour of the game engine]&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
[[Category:Mindscape]]&lt;br /&gt;
[[Category:Puzzle-Platformer]]&lt;/div&gt;</summary>
		<author><name>Carbon14</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=User:Carbon14&amp;diff=11182</id>
		<title>User:Carbon14</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=User:Carbon14&amp;diff=11182"/>
		<updated>2023-08-22T07:06:42Z</updated>

		<summary type="html">&lt;p&gt;Carbon14: Added link to experiments playlist&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;UK based computer programmer since 1982.&lt;br /&gt;
&lt;br /&gt;
Currently researching the 1993 game &#039;Fury of the Furries&#039; published by Kalisto.&lt;br /&gt;
&lt;br /&gt;
Also black-box testing Yamaha OPL synthesizers with a view to a clock-by-clock perfect description of the chip behaviour (as featured in Ad-lib compatible sound cards)&lt;br /&gt;
&lt;br /&gt;
likes: DOS, Assembler, nachos&lt;br /&gt;
&lt;br /&gt;
hates: Windows 8.1, Visual Basic, shellfish&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Updated 2023: Still researching &#039;Fury of the Furries&#039;  currently working on a level editor&lt;br /&gt;
&lt;br /&gt;
July 2023: I think I&#039;ve reached a milestone. With the release of version 0.4.0 of the toolset, it&#039;s now practical to actually mod the game, producing new levels. My next target is a series of experiments to prove and refine the fine detail of the game data, possible even to fill in some of the remaining holes in the knowledge.&lt;br /&gt;
&lt;br /&gt;
[https://www.youtube.com/playlist?list=PLjTRBUwQYI14I0n8tNQtZICVa9EvJeti3 Experiments]&lt;/div&gt;</summary>
		<author><name>Carbon14</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=User:Carbon14&amp;diff=11166</id>
		<title>User:Carbon14</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=User:Carbon14&amp;diff=11166"/>
		<updated>2023-07-26T18:27:46Z</updated>

		<summary type="html">&lt;p&gt;Carbon14: Typo.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;UK based computer programmer since 1982.&lt;br /&gt;
&lt;br /&gt;
Currently researching the 1993 game &#039;Fury of the Furries&#039; published by Kalisto.&lt;br /&gt;
&lt;br /&gt;
Also black-box testing Yamaha OPL synthesizers with a view to a clock-by-clock perfect description of the chip behaviour (as featured in Ad-lib compatible sound cards)&lt;br /&gt;
&lt;br /&gt;
likes: DOS, Assembler, nachos&lt;br /&gt;
&lt;br /&gt;
hates: Windows 8.1, Visual Basic, shellfish&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Updated 2023: Still researching &#039;Fury of the Furries&#039;  currently working on a level editor&lt;br /&gt;
&lt;br /&gt;
July 2023: I think I&#039;ve reached a milestone. With the release of version 0.4.0 of the toolset, it&#039;s now practical to actually mod the game, producing new levels. My next target is a series of experiments to prove and refine the fine detail of the game data, possible even to fill in some of the remaining holes in the knowledge.&lt;/div&gt;</summary>
		<author><name>Carbon14</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=User:Carbon14&amp;diff=11165</id>
		<title>User:Carbon14</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=User:Carbon14&amp;diff=11165"/>
		<updated>2023-07-26T13:17:01Z</updated>

		<summary type="html">&lt;p&gt;Carbon14: Update state of play&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;UK based computer programmer since 1982.&lt;br /&gt;
&lt;br /&gt;
Currently researching the 1984 game &#039;Fury of the Furries&#039; published by Kalisto.&lt;br /&gt;
&lt;br /&gt;
Also black-box testing Yamaha OPL synthesizers with a view to a clock-by-clock perfect description of the chip behaviour (as featured in Ad-lib compatible sound cards)&lt;br /&gt;
&lt;br /&gt;
likes: DOS, Assembler, nachos&lt;br /&gt;
&lt;br /&gt;
hates: Windows 8.1, Visual Basic, shellfish&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Updated 2023: Still researching &#039;Fury of the Furries&#039;  currently working on a level editor&lt;br /&gt;
&lt;br /&gt;
July 2023: I think I&#039;ve reached a milestone. With the release of version 0.4.0 of the toolset, it&#039;s now practical to actually mod the game, producing new levels. My next target is a series of experiments to prove and refine the fine detail of the game data, possible even to fill in some of the remaining holes in the knowledge.&lt;/div&gt;</summary>
		<author><name>Carbon14</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=FuryUtils&amp;diff=11164</id>
		<title>FuryUtils</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=FuryUtils&amp;diff=11164"/>
		<updated>2023-07-26T13:14:28Z</updated>

		<summary type="html">&lt;p&gt;Carbon14: Include details of new addition to the tool set. - BinFile utility.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Tool Infobox&lt;br /&gt;
 | Platform = Windows, Linux&lt;br /&gt;
 | Release = 2023-04-28 &amp;lt;!-- earliest release date --&amp;gt;&lt;br /&gt;
 | Download = [https://github.com/david-c14/FuryStudio/releases/ Releases]&lt;br /&gt;
 | Edit1 = Extraction&lt;br /&gt;
 | Edit2 = Format Conversion&lt;br /&gt;
 | Games = &lt;br /&gt;
   {{Game|Fury of the Furries}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;FuryUtils&#039;&#039;&#039; is a suite of tools for modding [[Fury of the Furries]]&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;BinFile&#039;&#039;&#039; is a command line tool for converting game level data [[BIN Format (Fury of the Furries)|(DAT/DATA*.BIN)]] files to and from a yaml text description.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;DatFile&#039;&#039;&#039; is a command line tool for packing and unpacking [[DAT Format (Fury of the Furries)|DAT Format]] archive files.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;ImmFile&#039;&#039;&#039; is a command line tool for converting [[LBM Format]] and [[IMM Format (Fury of the Furries)|IMM Format]] images files to and from Windows BMP format files.&lt;br /&gt;
&lt;br /&gt;
* There is also a library suitable for C, C++ or C#, containing the same functionality, if you want to build these formats into your own tools.&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
&lt;br /&gt;
The Utils zip or tar-gz package contains a suite of command line utilities and documentation in markdown format (readable as text). (Windows and Linux)&lt;br /&gt;
&lt;br /&gt;
The Lib zip or tar-gz package contains the core libraries with APIs for C or C++ and a .NET assembly wrapper, along with documentation and code samples. (Windows and Linux) &lt;br /&gt;
&lt;br /&gt;
== Status ==&lt;br /&gt;
&lt;br /&gt;
The suite is currently under active development, and more tools are anticipated.&lt;/div&gt;</summary>
		<author><name>Carbon14</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=BIN_Format_(Fury_of_the_Furries)&amp;diff=11163</id>
		<title>BIN Format (Fury of the Furries)</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=BIN_Format_(Fury_of_the_Furries)&amp;diff=11163"/>
		<updated>2023-07-26T13:11:14Z</updated>

		<summary type="html">&lt;p&gt;Carbon14: Add tools section, following updated release of tool&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Map Infobox&lt;br /&gt;
 | Type = 2D tile-based&lt;br /&gt;
 | Layers = 3&lt;br /&gt;
 | Tile size = 16&amp;amp;times;16&lt;br /&gt;
 | Viewport = 320&amp;amp;times;200&lt;br /&gt;
 | Games = &lt;br /&gt;
  {{Game|Fury of the Furries}}&lt;br /&gt;
  {{Game|Pac-In-Time}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Fury of the Furries]] maps contain the static background and landscape for the level, collectable coins, time extensions and extra lives and destructible bricks. They also contain the &#039;scripting for the game play itself&#039;, this is in the form of the definitions of the sprites that interact with the player character. There are up to 10 sprites in the level, each having up to 10 states. Triggers are defined for switching between states, and for the player and or sprites to switch on or off other game-play elements.&lt;br /&gt;
&lt;br /&gt;
The file itself is run-length encoded, and after decompression is always a fixed length. Generally unused elements within the game are marked by the [[UINT16LE]] value 0xFFFF.&lt;br /&gt;
&lt;br /&gt;
== File Formats ==&lt;br /&gt;
&lt;br /&gt;
=== RLE Compressed File Format ===&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;
| FOURCC || header || Appears to be a header with version number. Most files decompress to an object 25518 bytes in length, but a handful of files are shorter, and appear to be earlier versions.&amp;lt;br /&amp;gt;&lt;br /&gt;
byte is the shortest, at 25432 bytes, the last entry is the time field.&amp;lt;br /&amp;gt;&lt;br /&gt;
byt1 and byt3 are 25482 bytes long, and include currents.&amp;lt;br /&amp;gt;&lt;br /&gt;
byt4 is 25518, it&#039;s the version seen for the vast majority of the files, and includes all the fields after the currents.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || length || Number of bytes in section.&amp;lt;br /&amp;gt;&lt;br /&gt;
if zero then stop decompressing.&amp;lt;br /&amp;gt;&lt;br /&gt;
if less than 0x7D00 then use the following length bytes from the input.&amp;lt;br /&amp;gt;&lt;br /&gt;
otherwise use the following byte from the input (length - 0x7D00) times.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
compressed and uncompressed sections always alternate, even if this makes the packing less efficient. This means that if you have two adjacent runs, There will be at least 1 character represented as uncompressed.&lt;br /&gt;
|-&lt;br /&gt;
| ... || etc || continue with another &#039;length&#039; until the final file size is achieved (25,518 bytes), or you read a 0 length.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The file should end with a zero length section. i.e. two bytes of 0.&lt;br /&gt;
&lt;br /&gt;
=== Uncompressed File Format ===&lt;br /&gt;
&lt;br /&gt;
==== FILE Format ====&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]] || mapWidth || Width of the playable area (in tiles) between 20 and 78.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || mapHeight || Height of the playable area (in tiles) between 13 and 51.&lt;br /&gt;
&lt;br /&gt;
The maximum number of tiles in a game is 1024. This places constraints on the width and height. &lt;br /&gt;
The minimum width is 20 to match the viewport size of 320 pixels, and this constrains the height to 51 (20 &amp;amp;times; 51 = 1020). &lt;br /&gt;
The minimum height is 13 to match the viewport size of 200 pixels, and this constrains the width to 78 (13 &amp;amp;times; 78 = 1014).&lt;br /&gt;
Any other combination of width and height is possible so long as it meets these constraints.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]][2][78 &amp;amp;times; 51] || tileIndex || Pairs of coordinates into a [[LBM Format]] &amp;lt;tt&amp;gt;DEC&amp;lt;/tt&amp;gt; file containing the tiles.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || decFile || The &amp;lt;tt&amp;gt;DEC&amp;lt;/tt&amp;gt; file number less one. i.e. a value of 3 indicates &amp;lt;tt&amp;gt;DECOR04.LBM&amp;lt;/tt&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || startLeft || The left of the starting position for the player character, less 8 pixels.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || startTop || The top of the starting position for the player character.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || foregroundPaletteIndex || The index of the first palette entry to be regarded as foreground.&lt;br /&gt;
&lt;br /&gt;
The palette for the &amp;lt;tt&amp;gt;DEC&amp;lt;/tt&amp;gt; file has 16 colours and they are used in a particular order. The first is always black and is background (i.e. the player character is not blocked by this colour)&lt;br /&gt;
The next 4 usually dark versions of yellow, red, green and blue and are used for the shadow colour of the player character sprite, in the 4 different forms that the player can take.&lt;br /&gt;
The next colour (colour 5 in the palette) is the bright colour of the player character, and will be swapped out as the player changes form.&lt;br /&gt;
The remaining colours a chosen to suit the needs of the stage of the game (desert, forest, mountains etc).&lt;br /&gt;
Generally the lower colours are regarded as background, and the upper colours as foreground, and this is used in the collision detection for the player and the landscape.&lt;br /&gt;
|-&lt;br /&gt;
| EXIT[5] || exit || 5 instances of a 6-byte structure describing the exits from the level.&lt;br /&gt;
|-&lt;br /&gt;
| WATER[5] || water1 || 5 instances of an 8-byte structure describing the regions of water in the level.&lt;br /&gt;
|-&lt;br /&gt;
| TELEPORT[5] || teleport || 5 instances of an 8-byte structure describing the regions of the game that can teleport the player.&lt;br /&gt;
|-&lt;br /&gt;
| NONSTICK[5] || nonStick || 5 instances of an 8-byte structure describing regions that the player cannot attach a rope to.&lt;br /&gt;
|-&lt;br /&gt;
| ACID[5] || acid || 5 instances of an 8-byte structure describing regions that will dissolve the player if touched.&lt;br /&gt;
|-&lt;br /&gt;
| DANGER[20] || danger || 20 instances of an 8-byte structure describing regions that will explode the player if touched.&lt;br /&gt;
|-&lt;br /&gt;
| SPRITE[10] || sprite || 10 instances of a 1688-byte structure describing sprites.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || blueStart || 1 if the blue form of the player is available at the start of the game.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || greenStart || 1 if the green form of the player is available at the start of the game.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || redStart || 1 if the red form of the player is available at the start of the game.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || yellowStart || 1 if the yellow form of the player is available at the start of the game.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]][12] || unknown || Purpose unknown.&lt;br /&gt;
|-&lt;br /&gt;
| FIELD[5] || redField || 5 instances of an 8-byte structure describing the particle field that enables/disables the red form of the player.&lt;br /&gt;
|-&lt;br /&gt;
| FIELD[5] || greenField || 5 instances of an 8-byte structure describing the particle field that enables/disables the green form of the player.&lt;br /&gt;
|-&lt;br /&gt;
| FIELD[5] || yellowField || 5 instances of an 8-byte structure describing the particle field that enables/disables the yellow form of the player.&lt;br /&gt;
|-&lt;br /&gt;
| FIELD[5] || blueField || 5 instances of an 8-byte structure describing the particle field that enables/disables the blue form of the player.&lt;br /&gt;
|-&lt;br /&gt;
| WATER[5] || water2 || 5 further instances of an 8-byte structure describing the regions of water in the level.&lt;br /&gt;
&lt;br /&gt;
Probably one of these 2 sets of water data describes regions that start full of water and can be emptied, and the others describe regions which start empty and can be filled. I&#039;m not sure.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]][10] || unknown || Purpose unknown.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || waterPaletteIndex || Index of colour in palette used for water.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || airPaletteIndex || Index of colour in palette used for air.&lt;br /&gt;
&lt;br /&gt;
These two palette entries can be used to modify the image as regions of water fill/empty.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || time || Amount of time the player has to complete the level. In 30ths of a second (The game plays at 30 fps).&lt;br /&gt;
|-&lt;br /&gt;
| CURRENT[5] || current || 5 instances of a 10-byte structure describing regions of air or water currents.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || motePaletteIndex || Index of colour in palette used for dust motes moving in currents.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || unknown || Purpose unknown.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || spriteMap || Index of [[LBM Format]] &amp;lt;tt&amp;gt;SPR&amp;lt;/tt&amp;gt; sprite map image to use for this level. 0 = A, 1 = B.&lt;br /&gt;
|-&lt;br /&gt;
| EXITRETURN[5] || exitReturn || 5 instances of a 4-byte structure describing where the player character should re-enter the level following a side-quest.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]][5] || exitGraphic || 5 instances of and indication of how a player is depicted exiting. 0 used for the end of the level dissolves the level viewport in a swirling vortex. 1 is smooth and is used for tunnelling in multi-map levels.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || unknown || Seems to indicate a row in the map at which some odd palette behaviour is observed. Possibly a bug, but it could be that the intention is to shift something in the colour scheme when the player is above ground / below ground.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== EXIT Format ====&lt;br /&gt;
&lt;br /&gt;
The exit region is 16 &amp;amp;times; 16 pixels.&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]] || left || Left pixel of the centre of the exit.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || top pixel of the centre of the exit.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || destination || Level number less one to go to next from this exit.  Also the most significant bit indicates 0 = level exit, 1 = go to side quest.&amp;lt;br /&amp;gt;&lt;br /&gt;
e.g. if this value is 0x8006, then go to level 7 as a side-quest.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== WATER Format ====&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]] || left || Left pixel of the water region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the water region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right pixel of the water region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom pixel of the water region.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== TELEPORT Format ====&lt;br /&gt;
&lt;br /&gt;
The teleport region is 16 &amp;amp;times; 16 pixels.&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]] || srcX || Left pixel of the centre of the teleport region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || srcY || Top pixel of the centre of the teleport region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || destX || Right pixel of the centre of the teleport region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || destY || Bottom pixel of the centre of the teleport region.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== NONSTICK Format ====&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]] || left || Left pixel of the non-stick region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the non-stick region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right pixel of the non-stick region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom pixel of the non-stick region.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== ACID Format ====&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]] || left || Left pixel of the acid region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the acid region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right pixel of the acid region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom pixel of the acid region.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== DANGER Format ====&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]] || left || Left pixel of the danger region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the danger region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right pixel of the danger region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom pixel of the danger region.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== FIELD Format ====&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]] || left || Left pixel of the particle field.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the particle field.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right pixel of the particle field.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom pixel of the particle field.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== CURRENT Format ====&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]] || left || Left pixel of the current region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the current region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right pixel of the current region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom pixel of the current region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || flags || bit-0 and bit-1 : direction 00 = down, 01 = right, 10 = up, 11 = left&amp;lt;br/&amp;gt;bit-2: strength of current 0 = weak, 1 = strong&amp;lt;br/&amp;gt;bit-3: show current using dust motes 0 = no, 1 = yes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== EXITRETURN Format ====&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]] || left || Left pixel of the centre of the return region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the return region.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== REGION Format ====&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]] || left || Left of region&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top of region&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right of region&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom of region&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== SPRITE Format ====&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;}&lt;br /&gt;
! Data Type || Name || Description&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || layer || 0 = middleground (can interact with the player)&amp;lt;br/&amp;gt;1=background&amp;lt;br/&amp;gt;2=foreground (player can move behind it).&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || malevolence || Bit-0: sprite will kill player in ? form&amp;lt;br/&amp;gt;Bit-1: sprite will kill player in yellow form&amp;lt;br/&amp;gt;Bit-2: sprite will kill player in ? form&amp;lt;br/&amp;gt;Bit-3: sprite will kill player in ? form.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || unknown || Purpose unknown&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || mask || Sprite requires a mask graphic for transparency. If a mask is required, it will be immediately below the sprite tile in the &amp;lt;tt&amp;gt;SPR&amp;lt;/tt&amp;gt; file.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || cleanUp || The previous sprite image needs to be removed for each frame. This is not necessary if the sprite is unmasked and never changes position.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || strength || How much damage the sprite can sustain. 0 = infinite, otherwise 1-127.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || blastArea || Size of the explosion if the sprite is destroyed. (Purely a decorative concern, there is no splash damage).&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || active || Is the sprite in use.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]][2] || unknown ||&lt;br /&gt;
|-&lt;br /&gt;
| REGION || furryEntryRegion || Sprite will activate if furry enters this region.&lt;br /&gt;
|-&lt;br /&gt;
| REGION || furryExitRegion || Sprite will activate if furry leaves this region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]][72] || unknown || Suspect that this region is actually populated and used as working space while the level is being played. &lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || fireRate || How often the sprite fires projectiles. 0 = none, 1-5 = low-high.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || fireType || How are projectiles fired. 1 = All directions slowly, 2 = Right, 3 = Left, 4 = All directions medium, 5 = All directions fast.&lt;br /&gt;
|-&lt;br /&gt;
| STATE[10] || state || 10 instances of a 158-byte structure describing the states that the sprite can be in.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== STATE Format ====&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]] || left || Left pixel of the sprite location.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the sprite location.&lt;br /&gt;
|- &lt;br /&gt;
| [[UINT16LE]] || destState || Another state to move towards. The sprite will physically move to the location of the destination state, and change state when it reaches that location.&lt;br /&gt;
|- &lt;br /&gt;
| [[UINT16LE]] || speed || Speed of sprite movement 0 = None, 1-5 = slow-fast.&lt;br /&gt;
|- &lt;br /&gt;
| [[UINT8]] || movementType || 0 = horizontal then vertical, 1 = as the crow flies, 2 = just track player vertically, no sideways movement, 3 = just track player horizontally, no up/down movement, 4 = track player, 5 = fast move??, 6 = None.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || destWaterState || Another state to change to when a requested water level change is acheived.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || gravity || If 1, the sprite falls when unsupported.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || current || Control currents. Bits 0-4 specify currents affected, Bit-5 turns currents off, Bit-6 turns currents on.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || activateSprite || Number of another sprite to activate.&lt;br /&gt;
|-&lt;br /&gt;
| TRIGGER || entryTrigger || A 10-byte structure that describes a trigger to change state when the player enters a region.&lt;br /&gt;
|- &lt;br /&gt;
| TRIGGER || exitTrigger || A 10-byte structure that describes a trigger to change state when the player leaves a region.&lt;br /&gt;
|-&lt;br /&gt;
| TRIGGER || spriteEntryTrigger || A 10-byte structure that describes a trigger to change state when another sprite enters a region.&lt;br /&gt;
|-&lt;br /&gt;
| TRIGGER || spriteExitTrigger || A 10-byte structure that describes a trigger to change state when another sprite leaves a region (or is destroyed).&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || destroy || The sprite is destroyed (deactivated) when it enters this state.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || bounce || The sprite bounces ballistically when it hits a surface.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || emptyWater || Bits 0-7 speed of emptying, Bits 8-15 number of water region to empty.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || fillWater || Bits 0-7 speed of filling, Bits 8-15 number of water region to fill.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]][4] || unknown || Seems to affect the starting location of projectiles, relative to the sprite location.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || waterTriggerLeft || Left pixel of region for water trigger (see destWaterState field).&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || waterTriggerTop || Top pixel of region for water trigger.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || waterTriggerRight || Right pixel of region for water trigger.&lt;br /&gt;
|-&lt;br /&gt;
| FRAME[10] || frame || 10 instances of an 8-byte structure describing the sprite tile location within the &amp;lt;tt&amp;gt;SPR&amp;lt;/tt&amp;gt; image file&lt;br /&gt;
|- &lt;br /&gt;
| [[UINT16LE]] || animSpeed || Rate of frame change of sprite animation.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || cycle || Does the animation cycle repeat.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || cycleCount || Number of animation frames before changing state.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || animTriggerState || Sprite state to move to when cycleCount is reached.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || waterTriggerBottom || Bottom pixel of region for water trigger.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== TRIGGER Format ====&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]] || state || State to move to when triggered.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || left || Left pixel of the trigger region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the trigger region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right pixel of the trigger region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom pixel of the trigger region.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== FRAME Format ====&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]] || left || Left pixel of the sprite on the &amp;lt;tt&amp;gt;SPR&amp;lt;/tt&amp;gt; image file.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the sprite on the &amp;lt;tt&amp;gt;SPR&amp;lt;/tt&amp;gt; image file.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right pixel of the sprite on the &amp;lt;tt&amp;gt;SPR&amp;lt;/tt&amp;gt; image file.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom pixel of the sprite on the &amp;lt;tt&amp;gt;SPR&amp;lt;/tt&amp;gt; image file.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
There are 10 different stages in the game, and correspondingly 10 different tile and sprite sets. &lt;br /&gt;
&lt;br /&gt;
The tile images for the backgrounds and landscape are stored in the &amp;lt;tt&amp;gt;DEC&amp;lt;/tt&amp;gt; directory, in image files which are in [[LBM Format]]. These files are named &amp;lt;tt&amp;gt;DECORxx.LBM&amp;lt;/tt&amp;gt; where xx is specified by the decFile field of the main structure.&lt;br /&gt;
&lt;br /&gt;
The sprite images are stored in the &amp;lt;tt&amp;gt;SPR&amp;lt;/tt&amp;gt; directory, in image files which are in [[LBM Format]]. These files are named &amp;lt;tt&amp;gt;SPRxxn&amp;lt;/tt&amp;gt; where xx is specified by the decFile field of the main structure, and n is specified by the spriteMap field in the main structure.&lt;br /&gt;
&lt;br /&gt;
The sprites can be of varying sizes, the FRAME data structure describes the bounding box in pixels within the sprite image file. If the sprite requires a transparency mask, then this mask will be a rectangular region with the same size as the sprite, and placed in the image file immediately below the sprite.&lt;br /&gt;
&lt;br /&gt;
Within the tile image file, all the tiles are 16 &amp;amp;times; 16 pixels, tiles are referenced in the main file structure as a pair of byte coordinates, giving the X and Y position in tiles within the image file.&lt;br /&gt;
&lt;br /&gt;
Certain tiles in the image file have special meaning.&lt;br /&gt;
&lt;br /&gt;
The tile at 0,1 is a coin. If the player touches this tile in the level, they will gain a coin, and the tile will be swapped out for the tile at 0,0 which is always empty.&lt;br /&gt;
&lt;br /&gt;
The tile at 0,2 is an extra life. If the player touches this tile in the level, they will gain an extra life, and the tile will be swapped out for the tile at 0,0.&lt;br /&gt;
&lt;br /&gt;
The tile at 0,3 is a time extension. If the player touches this tile in the level, they will gain an extra 30 seconds on the clock, and the tile will be swapped out for the tile at 0,0.&lt;br /&gt;
&lt;br /&gt;
All the remaining tiles on rows 0, 1 and 2 in the map are destructible tiles. The red form of the player can chew through the scenery. Chewing a tile from row 0 will cause that tile to be swapped out with the tile immediately below it in row 1. Chewing a tile from row 1 will cause that tile to be swapped out with the tile immediately below it in row 2. Chewing a tile from row 2 will cause that tile to be swapped out with the tile at 0,0, which is empty, so the player can then get through the gap created. Typically the tiles in these rows depict a gradually degraded state, you can have tiles that require more or less action to destroy them, by choosing from the three rows. Often the top row tiles are visually indistinguishable from some other non-destructible tiles in the tileset, allowing you to hide destructible tiles.&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
{{BeginFileFormatTools|Type=group}}&lt;br /&gt;
{{FileFormatTool&lt;br /&gt;
| Name = [[FuryUtils]]&lt;br /&gt;
| Platform = x64Windows, Linux&lt;br /&gt;
| canExtract = Yes&lt;br /&gt;
| canDecompress = Yes&lt;br /&gt;
| canCreate = Yes&lt;br /&gt;
| canModify = Yes&lt;br /&gt;
| canCompress = Yes&lt;br /&gt;
| editHidden = N/A&lt;br /&gt;
| editMetadata = Yes&lt;br /&gt;
| notes = &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:Carbon14|carbon14]]. 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>Carbon14</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=File:Mod-Fury_of_the_Furries.png&amp;diff=11110</id>
		<title>File:Mod-Fury of the Furries.png</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=File:Mod-Fury_of_the_Furries.png&amp;diff=11110"/>
		<updated>2023-07-19T14:53:15Z</updated>

		<summary type="html">&lt;p&gt;Carbon14: /* Summary */ Clarified that the graphics are not ALL new&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
A modified level of the game with partially modified graphics&lt;/div&gt;</summary>
		<author><name>Carbon14</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=File:Mod-Fury_of_the_Furries.png&amp;diff=11109</id>
		<title>File:Mod-Fury of the Furries.png</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=File:Mod-Fury_of_the_Furries.png&amp;diff=11109"/>
		<updated>2023-07-19T12:49:33Z</updated>

		<summary type="html">&lt;p&gt;Carbon14: A modified level of the game with modified graphics&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
A modified level of the game with modified graphics&lt;/div&gt;</summary>
		<author><name>Carbon14</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=BIN_Format_(Fury_of_the_Furries)&amp;diff=11107</id>
		<title>BIN Format (Fury of the Furries)</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=BIN_Format_(Fury_of_the_Furries)&amp;diff=11107"/>
		<updated>2023-07-14T13:20:47Z</updated>

		<summary type="html">&lt;p&gt;Carbon14: /* SPRITE Format */ Added detail of some previously unclear data&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Map Infobox&lt;br /&gt;
 | Type = 2D tile-based&lt;br /&gt;
 | Layers = 3&lt;br /&gt;
 | Tile size = 16&amp;amp;times;16&lt;br /&gt;
 | Viewport = 320&amp;amp;times;200&lt;br /&gt;
 | Games = &lt;br /&gt;
  {{Game|Fury of the Furries}}&lt;br /&gt;
  {{Game|Pac-In-Time}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Fury of the Furries]] maps contain the static background and landscape for the level, collectable coins, time extensions and extra lives and destructible bricks. They also contain the &#039;scripting for the game play itself&#039;, this is in the form of the definitions of the sprites that interact with the player character. There are up to 10 sprites in the level, each having up to 10 states. Triggers are defined for switching between states, and for the player and or sprites to switch on or off other game-play elements.&lt;br /&gt;
&lt;br /&gt;
The file itself is run-length encoded, and after decompression is always a fixed length. Generally unused elements within the game are marked by the [[UINT16LE]] value 0xFFFF.&lt;br /&gt;
&lt;br /&gt;
== File Formats ==&lt;br /&gt;
&lt;br /&gt;
=== RLE Compressed File Format ===&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;
| FOURCC || header || Appears to be a header with version number. Most files decompress to an object 25518 bytes in length, but a handful of files are shorter, and appear to be earlier versions.&amp;lt;br /&amp;gt;&lt;br /&gt;
byte is the shortest, at 25432 bytes, the last entry is the time field.&amp;lt;br /&amp;gt;&lt;br /&gt;
byt1 and byt3 are 25482 bytes long, and include currents.&amp;lt;br /&amp;gt;&lt;br /&gt;
byt4 is 25518, it&#039;s the version seen for the vast majority of the files, and includes all the fields after the currents.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || length || Number of bytes in section.&amp;lt;br /&amp;gt;&lt;br /&gt;
if zero then stop decompressing.&amp;lt;br /&amp;gt;&lt;br /&gt;
if less than 0x7D00 then use the following length bytes from the input.&amp;lt;br /&amp;gt;&lt;br /&gt;
otherwise use the following byte from the input (length - 0x7D00) times.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
compressed and uncompressed sections always alternate, even if this makes the packing less efficient. This means that if you have two adjacent runs, There will be at least 1 character represented as uncompressed.&lt;br /&gt;
|-&lt;br /&gt;
| ... || etc || continue with another &#039;length&#039; until the final file size is achieved (25,518 bytes), or you read a 0 length.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The file should end with a zero length section. i.e. two bytes of 0.&lt;br /&gt;
&lt;br /&gt;
=== Uncompressed File Format ===&lt;br /&gt;
&lt;br /&gt;
==== FILE Format ====&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]] || mapWidth || Width of the playable area (in tiles) between 20 and 78.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || mapHeight || Height of the playable area (in tiles) between 13 and 51.&lt;br /&gt;
&lt;br /&gt;
The maximum number of tiles in a game is 1024. This places constraints on the width and height. &lt;br /&gt;
The minimum width is 20 to match the viewport size of 320 pixels, and this constrains the height to 51 (20 &amp;amp;times; 51 = 1020). &lt;br /&gt;
The minimum height is 13 to match the viewport size of 200 pixels, and this constrains the width to 78 (13 &amp;amp;times; 78 = 1014).&lt;br /&gt;
Any other combination of width and height is possible so long as it meets these constraints.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]][2][78 &amp;amp;times; 51] || tileIndex || Pairs of coordinates into a [[LBM Format]] &amp;lt;tt&amp;gt;DEC&amp;lt;/tt&amp;gt; file containing the tiles.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || decFile || The &amp;lt;tt&amp;gt;DEC&amp;lt;/tt&amp;gt; file number less one. i.e. a value of 3 indicates &amp;lt;tt&amp;gt;DECOR04.LBM&amp;lt;/tt&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || startLeft || The left of the starting position for the player character, less 8 pixels.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || startTop || The top of the starting position for the player character.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || foregroundPaletteIndex || The index of the first palette entry to be regarded as foreground.&lt;br /&gt;
&lt;br /&gt;
The palette for the &amp;lt;tt&amp;gt;DEC&amp;lt;/tt&amp;gt; file has 16 colours and they are used in a particular order. The first is always black and is background (i.e. the player character is not blocked by this colour)&lt;br /&gt;
The next 4 usually dark versions of yellow, red, green and blue and are used for the shadow colour of the player character sprite, in the 4 different forms that the player can take.&lt;br /&gt;
The next colour (colour 5 in the palette) is the bright colour of the player character, and will be swapped out as the player changes form.&lt;br /&gt;
The remaining colours a chosen to suit the needs of the stage of the game (desert, forest, mountains etc).&lt;br /&gt;
Generally the lower colours are regarded as background, and the upper colours as foreground, and this is used in the collision detection for the player and the landscape.&lt;br /&gt;
|-&lt;br /&gt;
| EXIT[5] || exit || 5 instances of a 6-byte structure describing the exits from the level.&lt;br /&gt;
|-&lt;br /&gt;
| WATER[5] || water1 || 5 instances of an 8-byte structure describing the regions of water in the level.&lt;br /&gt;
|-&lt;br /&gt;
| TELEPORT[5] || teleport || 5 instances of an 8-byte structure describing the regions of the game that can teleport the player.&lt;br /&gt;
|-&lt;br /&gt;
| NONSTICK[5] || nonStick || 5 instances of an 8-byte structure describing regions that the player cannot attach a rope to.&lt;br /&gt;
|-&lt;br /&gt;
| ACID[5] || acid || 5 instances of an 8-byte structure describing regions that will dissolve the player if touched.&lt;br /&gt;
|-&lt;br /&gt;
| DANGER[20] || danger || 20 instances of an 8-byte structure describing regions that will explode the player if touched.&lt;br /&gt;
|-&lt;br /&gt;
| SPRITE[10] || sprite || 10 instances of a 1688-byte structure describing sprites.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || blueStart || 1 if the blue form of the player is available at the start of the game.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || greenStart || 1 if the green form of the player is available at the start of the game.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || redStart || 1 if the red form of the player is available at the start of the game.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || yellowStart || 1 if the yellow form of the player is available at the start of the game.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]][12] || unknown || Purpose unknown.&lt;br /&gt;
|-&lt;br /&gt;
| FIELD[5] || redField || 5 instances of an 8-byte structure describing the particle field that enables/disables the red form of the player.&lt;br /&gt;
|-&lt;br /&gt;
| FIELD[5] || greenField || 5 instances of an 8-byte structure describing the particle field that enables/disables the green form of the player.&lt;br /&gt;
|-&lt;br /&gt;
| FIELD[5] || yellowField || 5 instances of an 8-byte structure describing the particle field that enables/disables the yellow form of the player.&lt;br /&gt;
|-&lt;br /&gt;
| FIELD[5] || blueField || 5 instances of an 8-byte structure describing the particle field that enables/disables the blue form of the player.&lt;br /&gt;
|-&lt;br /&gt;
| WATER[5] || water2 || 5 further instances of an 8-byte structure describing the regions of water in the level.&lt;br /&gt;
&lt;br /&gt;
Probably one of these 2 sets of water data describes regions that start full of water and can be emptied, and the others describe regions which start empty and can be filled. I&#039;m not sure.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]][10] || unknown || Purpose unknown.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || waterPaletteIndex || Index of colour in palette used for water.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || airPaletteIndex || Index of colour in palette used for air.&lt;br /&gt;
&lt;br /&gt;
These two palette entries can be used to modify the image as regions of water fill/empty.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || time || Amount of time the player has to complete the level. In 30ths of a second (The game plays at 30 fps).&lt;br /&gt;
|-&lt;br /&gt;
| CURRENT[5] || current || 5 instances of a 10-byte structure describing regions of air or water currents.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || motePaletteIndex || Index of colour in palette used for dust motes moving in currents.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || unknown || Purpose unknown.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || spriteMap || Index of [[LBM Format]] &amp;lt;tt&amp;gt;SPR&amp;lt;/tt&amp;gt; sprite map image to use for this level. 0 = A, 1 = B.&lt;br /&gt;
|-&lt;br /&gt;
| EXITRETURN[5] || exitReturn || 5 instances of a 4-byte structure describing where the player character should re-enter the level following a side-quest.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]][5] || exitGraphic || 5 instances of and indication of how a player is depicted exiting. 0 used for the end of the level dissolves the level viewport in a swirling vortex. 1 is smooth and is used for tunnelling in multi-map levels.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || unknown || Seems to indicate a row in the map at which some odd palette behaviour is observed. Possibly a bug, but it could be that the intention is to shift something in the colour scheme when the player is above ground / below ground.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== EXIT Format ====&lt;br /&gt;
&lt;br /&gt;
The exit region is 16 &amp;amp;times; 16 pixels.&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]] || left || Left pixel of the centre of the exit.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || top pixel of the centre of the exit.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || destination || Level number less one to go to next from this exit.  Also the most significant bit indicates 0 = level exit, 1 = go to side quest.&amp;lt;br /&amp;gt;&lt;br /&gt;
e.g. if this value is 0x8006, then go to level 7 as a side-quest.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== WATER Format ====&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]] || left || Left pixel of the water region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the water region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right pixel of the water region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom pixel of the water region.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== TELEPORT Format ====&lt;br /&gt;
&lt;br /&gt;
The teleport region is 16 &amp;amp;times; 16 pixels.&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]] || srcX || Left pixel of the centre of the teleport region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || srcY || Top pixel of the centre of the teleport region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || destX || Right pixel of the centre of the teleport region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || destY || Bottom pixel of the centre of the teleport region.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== NONSTICK Format ====&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]] || left || Left pixel of the non-stick region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the non-stick region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right pixel of the non-stick region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom pixel of the non-stick region.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== ACID Format ====&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]] || left || Left pixel of the acid region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the acid region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right pixel of the acid region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom pixel of the acid region.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== DANGER Format ====&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]] || left || Left pixel of the danger region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the danger region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right pixel of the danger region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom pixel of the danger region.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== FIELD Format ====&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]] || left || Left pixel of the particle field.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the particle field.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right pixel of the particle field.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom pixel of the particle field.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== CURRENT Format ====&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]] || left || Left pixel of the current region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the current region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right pixel of the current region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom pixel of the current region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || flags || bit-0 and bit-1 : direction 00 = down, 01 = right, 10 = up, 11 = left&amp;lt;br/&amp;gt;bit-2: strength of current 0 = weak, 1 = strong&amp;lt;br/&amp;gt;bit-3: show current using dust motes 0 = no, 1 = yes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== EXITRETURN Format ====&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]] || left || Left pixel of the centre of the return region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the return region.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== REGION Format ====&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]] || left || Left of region&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top of region&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right of region&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom of region&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== SPRITE Format ====&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;}&lt;br /&gt;
! Data Type || Name || Description&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || layer || 0 = middleground (can interact with the player)&amp;lt;br/&amp;gt;1=background&amp;lt;br/&amp;gt;2=foreground (player can move behind it).&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || malevolence || Bit-0: sprite will kill player in ? form&amp;lt;br/&amp;gt;Bit-1: sprite will kill player in yellow form&amp;lt;br/&amp;gt;Bit-2: sprite will kill player in ? form&amp;lt;br/&amp;gt;Bit-3: sprite will kill player in ? form.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || unknown || Purpose unknown&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || mask || Sprite requires a mask graphic for transparency. If a mask is required, it will be immediately below the sprite tile in the &amp;lt;tt&amp;gt;SPR&amp;lt;/tt&amp;gt; file.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || cleanUp || The previous sprite image needs to be removed for each frame. This is not necessary if the sprite is unmasked and never changes position.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || strength || How much damage the sprite can sustain. 0 = infinite, otherwise 1-127.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || blastArea || Size of the explosion if the sprite is destroyed. (Purely a decorative concern, there is no splash damage).&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || active || Is the sprite in use.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]][2] || unknown ||&lt;br /&gt;
|-&lt;br /&gt;
| REGION || furryEntryRegion || Sprite will activate if furry enters this region.&lt;br /&gt;
|-&lt;br /&gt;
| REGION || furryExitRegion || Sprite will activate if furry leaves this region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]][72] || unknown || Suspect that this region is actually populated and used as working space while the level is being played. &lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || fireRate || How often the sprite fires projectiles. 0 = none, 1-5 = low-high.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || fireType || How are projectiles fired. 1 = All directions slowly, 2 = Right, 3 = Left, 4 = All directions medium, 5 = All directions fast.&lt;br /&gt;
|-&lt;br /&gt;
| STATE[10] || state || 10 instances of a 158-byte structure describing the states that the sprite can be in.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== STATE Format ====&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]] || left || Left pixel of the sprite location.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the sprite location.&lt;br /&gt;
|- &lt;br /&gt;
| [[UINT16LE]] || destState || Another state to move towards. The sprite will physically move to the location of the destination state, and change state when it reaches that location.&lt;br /&gt;
|- &lt;br /&gt;
| [[UINT16LE]] || speed || Speed of sprite movement 0 = None, 1-5 = slow-fast.&lt;br /&gt;
|- &lt;br /&gt;
| [[UINT8]] || movementType || 0 = horizontal then vertical, 1 = as the crow flies, 2 = just track player vertically, no sideways movement, 3 = just track player horizontally, no up/down movement, 4 = track player, 5 = fast move??, 6 = None.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || destWaterState || Another state to change to when a requested water level change is acheived.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || gravity || If 1, the sprite falls when unsupported.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || current || Control currents. Bits 0-4 specify currents affected, Bit-5 turns currents off, Bit-6 turns currents on.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || activateSprite || Number of another sprite to activate.&lt;br /&gt;
|-&lt;br /&gt;
| TRIGGER || entryTrigger || A 10-byte structure that describes a trigger to change state when the player enters a region.&lt;br /&gt;
|- &lt;br /&gt;
| TRIGGER || exitTrigger || A 10-byte structure that describes a trigger to change state when the player leaves a region.&lt;br /&gt;
|-&lt;br /&gt;
| TRIGGER || spriteEntryTrigger || A 10-byte structure that describes a trigger to change state when another sprite enters a region.&lt;br /&gt;
|-&lt;br /&gt;
| TRIGGER || spriteExitTrigger || A 10-byte structure that describes a trigger to change state when another sprite leaves a region (or is destroyed).&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || destroy || The sprite is destroyed (deactivated) when it enters this state.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || bounce || The sprite bounces ballistically when it hits a surface.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || emptyWater || Bits 0-7 speed of emptying, Bits 8-15 number of water region to empty.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || fillWater || Bits 0-7 speed of filling, Bits 8-15 number of water region to fill.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]][4] || unknown || Seems to affect the starting location of projectiles, relative to the sprite location.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || waterTriggerLeft || Left pixel of region for water trigger (see destWaterState field).&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || waterTriggerTop || Top pixel of region for water trigger.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || waterTriggerRight || Right pixel of region for water trigger.&lt;br /&gt;
|-&lt;br /&gt;
| FRAME[10] || frame || 10 instances of an 8-byte structure describing the sprite tile location within the &amp;lt;tt&amp;gt;SPR&amp;lt;/tt&amp;gt; image file&lt;br /&gt;
|- &lt;br /&gt;
| [[UINT16LE]] || animSpeed || Rate of frame change of sprite animation.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || cycle || Does the animation cycle repeat.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || cycleCount || Number of animation frames before changing state.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || animTriggerState || Sprite state to move to when cycleCount is reached.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || waterTriggerBottom || Bottom pixel of region for water trigger.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== TRIGGER Format ====&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]] || state || State to move to when triggered.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || left || Left pixel of the trigger region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the trigger region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right pixel of the trigger region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom pixel of the trigger region.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== FRAME Format ====&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]] || left || Left pixel of the sprite on the &amp;lt;tt&amp;gt;SPR&amp;lt;/tt&amp;gt; image file.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the sprite on the &amp;lt;tt&amp;gt;SPR&amp;lt;/tt&amp;gt; image file.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right pixel of the sprite on the &amp;lt;tt&amp;gt;SPR&amp;lt;/tt&amp;gt; image file.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom pixel of the sprite on the &amp;lt;tt&amp;gt;SPR&amp;lt;/tt&amp;gt; image file.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
There are 10 different stages in the game, and correspondingly 10 different tile and sprite sets. &lt;br /&gt;
&lt;br /&gt;
The tile images for the backgrounds and landscape are stored in the &amp;lt;tt&amp;gt;DEC&amp;lt;/tt&amp;gt; directory, in image files which are in [[LBM Format]]. These files are named &amp;lt;tt&amp;gt;DECORxx.LBM&amp;lt;/tt&amp;gt; where xx is specified by the decFile field of the main structure.&lt;br /&gt;
&lt;br /&gt;
The sprite images are stored in the &amp;lt;tt&amp;gt;SPR&amp;lt;/tt&amp;gt; directory, in image files which are in [[LBM Format]]. These files are named &amp;lt;tt&amp;gt;SPRxxn&amp;lt;/tt&amp;gt; where xx is specified by the decFile field of the main structure, and n is specified by the spriteMap field in the main structure.&lt;br /&gt;
&lt;br /&gt;
The sprites can be of varying sizes, the FRAME data structure describes the bounding box in pixels within the sprite image file. If the sprite requires a transparency mask, then this mask will be a rectangular region with the same size as the sprite, and placed in the image file immediately below the sprite.&lt;br /&gt;
&lt;br /&gt;
Within the tile image file, all the tiles are 16 &amp;amp;times; 16 pixels, tiles are referenced in the main file structure as a pair of byte coordinates, giving the X and Y position in tiles within the image file.&lt;br /&gt;
&lt;br /&gt;
Certain tiles in the image file have special meaning.&lt;br /&gt;
&lt;br /&gt;
The tile at 0,1 is a coin. If the player touches this tile in the level, they will gain a coin, and the tile will be swapped out for the tile at 0,0 which is always empty.&lt;br /&gt;
&lt;br /&gt;
The tile at 0,2 is an extra life. If the player touches this tile in the level, they will gain an extra life, and the tile will be swapped out for the tile at 0,0.&lt;br /&gt;
&lt;br /&gt;
The tile at 0,3 is a time extension. If the player touches this tile in the level, they will gain an extra 30 seconds on the clock, and the tile will be swapped out for the tile at 0,0.&lt;br /&gt;
&lt;br /&gt;
All the remaining tiles on rows 0, 1 and 2 in the map are destructible tiles. The red form of the player can chew through the scenery. Chewing a tile from row 0 will cause that tile to be swapped out with the tile immediately below it in row 1. Chewing a tile from row 1 will cause that tile to be swapped out with the tile immediately below it in row 2. Chewing a tile from row 2 will cause that tile to be swapped out with the tile at 0,0, which is empty, so the player can then get through the gap created. Typically the tiles in these rows depict a gradually degraded state, you can have tiles that require more or less action to destroy them, by choosing from the three rows. Often the top row tiles are visually indistinguishable from some other non-destructible tiles in the tileset, allowing you to hide destructible tiles.&lt;br /&gt;
&lt;br /&gt;
== Credits ==&lt;br /&gt;
&lt;br /&gt;
This file format was reverse engineered by [[User:Carbon14|carbon14]]. 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>Carbon14</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=BIN_Format_(Fury_of_the_Furries)&amp;diff=11106</id>
		<title>BIN Format (Fury of the Furries)</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=BIN_Format_(Fury_of_the_Furries)&amp;diff=11106"/>
		<updated>2023-07-12T09:51:40Z</updated>

		<summary type="html">&lt;p&gt;Carbon14: /* EXIT Format */ correct and clarify EXIT.destination&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Map Infobox&lt;br /&gt;
 | Type = 2D tile-based&lt;br /&gt;
 | Layers = 3&lt;br /&gt;
 | Tile size = 16&amp;amp;times;16&lt;br /&gt;
 | Viewport = 320&amp;amp;times;200&lt;br /&gt;
 | Games = &lt;br /&gt;
  {{Game|Fury of the Furries}}&lt;br /&gt;
  {{Game|Pac-In-Time}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Fury of the Furries]] maps contain the static background and landscape for the level, collectable coins, time extensions and extra lives and destructible bricks. They also contain the &#039;scripting for the game play itself&#039;, this is in the form of the definitions of the sprites that interact with the player character. There are up to 10 sprites in the level, each having up to 10 states. Triggers are defined for switching between states, and for the player and or sprites to switch on or off other game-play elements.&lt;br /&gt;
&lt;br /&gt;
The file itself is run-length encoded, and after decompression is always a fixed length. Generally unused elements within the game are marked by the [[UINT16LE]] value 0xFFFF.&lt;br /&gt;
&lt;br /&gt;
== File Formats ==&lt;br /&gt;
&lt;br /&gt;
=== RLE Compressed File Format ===&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;
| FOURCC || header || Appears to be a header with version number. Most files decompress to an object 25518 bytes in length, but a handful of files are shorter, and appear to be earlier versions.&amp;lt;br /&amp;gt;&lt;br /&gt;
byte is the shortest, at 25432 bytes, the last entry is the time field.&amp;lt;br /&amp;gt;&lt;br /&gt;
byt1 and byt3 are 25482 bytes long, and include currents.&amp;lt;br /&amp;gt;&lt;br /&gt;
byt4 is 25518, it&#039;s the version seen for the vast majority of the files, and includes all the fields after the currents.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || length || Number of bytes in section.&amp;lt;br /&amp;gt;&lt;br /&gt;
if zero then stop decompressing.&amp;lt;br /&amp;gt;&lt;br /&gt;
if less than 0x7D00 then use the following length bytes from the input.&amp;lt;br /&amp;gt;&lt;br /&gt;
otherwise use the following byte from the input (length - 0x7D00) times.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
compressed and uncompressed sections always alternate, even if this makes the packing less efficient. This means that if you have two adjacent runs, There will be at least 1 character represented as uncompressed.&lt;br /&gt;
|-&lt;br /&gt;
| ... || etc || continue with another &#039;length&#039; until the final file size is achieved (25,518 bytes), or you read a 0 length.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The file should end with a zero length section. i.e. two bytes of 0.&lt;br /&gt;
&lt;br /&gt;
=== Uncompressed File Format ===&lt;br /&gt;
&lt;br /&gt;
==== FILE Format ====&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]] || mapWidth || Width of the playable area (in tiles) between 20 and 78.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || mapHeight || Height of the playable area (in tiles) between 13 and 51.&lt;br /&gt;
&lt;br /&gt;
The maximum number of tiles in a game is 1024. This places constraints on the width and height. &lt;br /&gt;
The minimum width is 20 to match the viewport size of 320 pixels, and this constrains the height to 51 (20 &amp;amp;times; 51 = 1020). &lt;br /&gt;
The minimum height is 13 to match the viewport size of 200 pixels, and this constrains the width to 78 (13 &amp;amp;times; 78 = 1014).&lt;br /&gt;
Any other combination of width and height is possible so long as it meets these constraints.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]][2][78 &amp;amp;times; 51] || tileIndex || Pairs of coordinates into a [[LBM Format]] &amp;lt;tt&amp;gt;DEC&amp;lt;/tt&amp;gt; file containing the tiles.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || decFile || The &amp;lt;tt&amp;gt;DEC&amp;lt;/tt&amp;gt; file number less one. i.e. a value of 3 indicates &amp;lt;tt&amp;gt;DECOR04.LBM&amp;lt;/tt&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || startLeft || The left of the starting position for the player character, less 8 pixels.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || startTop || The top of the starting position for the player character.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || foregroundPaletteIndex || The index of the first palette entry to be regarded as foreground.&lt;br /&gt;
&lt;br /&gt;
The palette for the &amp;lt;tt&amp;gt;DEC&amp;lt;/tt&amp;gt; file has 16 colours and they are used in a particular order. The first is always black and is background (i.e. the player character is not blocked by this colour)&lt;br /&gt;
The next 4 usually dark versions of yellow, red, green and blue and are used for the shadow colour of the player character sprite, in the 4 different forms that the player can take.&lt;br /&gt;
The next colour (colour 5 in the palette) is the bright colour of the player character, and will be swapped out as the player changes form.&lt;br /&gt;
The remaining colours a chosen to suit the needs of the stage of the game (desert, forest, mountains etc).&lt;br /&gt;
Generally the lower colours are regarded as background, and the upper colours as foreground, and this is used in the collision detection for the player and the landscape.&lt;br /&gt;
|-&lt;br /&gt;
| EXIT[5] || exit || 5 instances of a 6-byte structure describing the exits from the level.&lt;br /&gt;
|-&lt;br /&gt;
| WATER[5] || water1 || 5 instances of an 8-byte structure describing the regions of water in the level.&lt;br /&gt;
|-&lt;br /&gt;
| TELEPORT[5] || teleport || 5 instances of an 8-byte structure describing the regions of the game that can teleport the player.&lt;br /&gt;
|-&lt;br /&gt;
| NONSTICK[5] || nonStick || 5 instances of an 8-byte structure describing regions that the player cannot attach a rope to.&lt;br /&gt;
|-&lt;br /&gt;
| ACID[5] || acid || 5 instances of an 8-byte structure describing regions that will dissolve the player if touched.&lt;br /&gt;
|-&lt;br /&gt;
| DANGER[20] || danger || 20 instances of an 8-byte structure describing regions that will explode the player if touched.&lt;br /&gt;
|-&lt;br /&gt;
| SPRITE[10] || sprite || 10 instances of a 1688-byte structure describing sprites.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || blueStart || 1 if the blue form of the player is available at the start of the game.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || greenStart || 1 if the green form of the player is available at the start of the game.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || redStart || 1 if the red form of the player is available at the start of the game.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || yellowStart || 1 if the yellow form of the player is available at the start of the game.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]][12] || unknown || Purpose unknown.&lt;br /&gt;
|-&lt;br /&gt;
| FIELD[5] || redField || 5 instances of an 8-byte structure describing the particle field that enables/disables the red form of the player.&lt;br /&gt;
|-&lt;br /&gt;
| FIELD[5] || greenField || 5 instances of an 8-byte structure describing the particle field that enables/disables the green form of the player.&lt;br /&gt;
|-&lt;br /&gt;
| FIELD[5] || yellowField || 5 instances of an 8-byte structure describing the particle field that enables/disables the yellow form of the player.&lt;br /&gt;
|-&lt;br /&gt;
| FIELD[5] || blueField || 5 instances of an 8-byte structure describing the particle field that enables/disables the blue form of the player.&lt;br /&gt;
|-&lt;br /&gt;
| WATER[5] || water2 || 5 further instances of an 8-byte structure describing the regions of water in the level.&lt;br /&gt;
&lt;br /&gt;
Probably one of these 2 sets of water data describes regions that start full of water and can be emptied, and the others describe regions which start empty and can be filled. I&#039;m not sure.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]][10] || unknown || Purpose unknown.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || waterPaletteIndex || Index of colour in palette used for water.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || airPaletteIndex || Index of colour in palette used for air.&lt;br /&gt;
&lt;br /&gt;
These two palette entries can be used to modify the image as regions of water fill/empty.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || time || Amount of time the player has to complete the level. In 30ths of a second (The game plays at 30 fps).&lt;br /&gt;
|-&lt;br /&gt;
| CURRENT[5] || current || 5 instances of a 10-byte structure describing regions of air or water currents.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || motePaletteIndex || Index of colour in palette used for dust motes moving in currents.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || unknown || Purpose unknown.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || spriteMap || Index of [[LBM Format]] &amp;lt;tt&amp;gt;SPR&amp;lt;/tt&amp;gt; sprite map image to use for this level. 0 = A, 1 = B.&lt;br /&gt;
|-&lt;br /&gt;
| EXITRETURN[5] || exitReturn || 5 instances of a 4-byte structure describing where the player character should re-enter the level following a side-quest.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]][5] || exitGraphic || 5 instances of and indication of how a player is depicted exiting. 0 used for the end of the level dissolves the level viewport in a swirling vortex. 1 is smooth and is used for tunnelling in multi-map levels.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || unknown || Seems to indicate a row in the map at which some odd palette behaviour is observed. Possibly a bug, but it could be that the intention is to shift something in the colour scheme when the player is above ground / below ground.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== EXIT Format ====&lt;br /&gt;
&lt;br /&gt;
The exit region is 16 &amp;amp;times; 16 pixels.&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]] || left || Left pixel of the centre of the exit.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || top pixel of the centre of the exit.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || destination || Level number less one to go to next from this exit.  Also the most significant bit indicates 0 = level exit, 1 = go to side quest.&amp;lt;br /&amp;gt;&lt;br /&gt;
e.g. if this value is 0x8006, then go to level 7 as a side-quest.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== WATER Format ====&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]] || left || Left pixel of the water region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the water region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right pixel of the water region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom pixel of the water region.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== TELEPORT Format ====&lt;br /&gt;
&lt;br /&gt;
The teleport region is 16 &amp;amp;times; 16 pixels.&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]] || srcX || Left pixel of the centre of the teleport region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || srcY || Top pixel of the centre of the teleport region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || destX || Right pixel of the centre of the teleport region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || destY || Bottom pixel of the centre of the teleport region.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== NONSTICK Format ====&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]] || left || Left pixel of the non-stick region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the non-stick region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right pixel of the non-stick region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom pixel of the non-stick region.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== ACID Format ====&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]] || left || Left pixel of the acid region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the acid region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right pixel of the acid region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom pixel of the acid region.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== DANGER Format ====&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]] || left || Left pixel of the danger region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the danger region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right pixel of the danger region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom pixel of the danger region.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== FIELD Format ====&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]] || left || Left pixel of the particle field.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the particle field.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right pixel of the particle field.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom pixel of the particle field.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== CURRENT Format ====&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]] || left || Left pixel of the current region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the current region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right pixel of the current region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom pixel of the current region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || flags || bit-0 and bit-1 : direction 00 = down, 01 = right, 10 = up, 11 = left&amp;lt;br/&amp;gt;bit-2: strength of current 0 = weak, 1 = strong&amp;lt;br/&amp;gt;bit-3: show current using dust motes 0 = no, 1 = yes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== EXITRETURN Format ====&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]] || left || Left pixel of the centre of the return region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the return region.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== SPRITE Format ====&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;}&lt;br /&gt;
! Data Type || Name || Description&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || layer || 0 = middleground (can interact with the player)&amp;lt;br/&amp;gt;1=background&amp;lt;br/&amp;gt;2=foreground (player can move behind it).&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || malevolence || Bit-0: sprite will kill player in ? form&amp;lt;br/&amp;gt;Bit-1: sprite will kill player in yellow form&amp;lt;br/&amp;gt;Bit-2: sprite will kill player in ? form&amp;lt;br/&amp;gt;Bit-3: sprite will kill player in ? form.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || unknown || Purpose unknown&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || mask || Sprite requires a mask graphic for transparency. If a mask is required, it will be immediately below the sprite tile in the &amp;lt;tt&amp;gt;SPR&amp;lt;/tt&amp;gt; file.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || cleanUp || The previous sprite image needs to be removed for each frame. This is not necessary if the sprite is unmasked and never changes position.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || strength || How much damage the sprite can sustain. 0 = infinite, otherwise 1-127.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || blastArea || Size of the explosion if the sprite is destroyed. (Purely a decorative concern, there is no splash damage).&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || active || Is the sprite in use.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]][90] || unknown || Suspect that this region is actually populated and used as working space while the level is being played. &lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || fireRate || How often the sprite fires projectiles. 0 = none, 1-5 = low-high.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || fireType || How are projectiles fired. 1 = All directions slowly, 2 = Right, 3 = Left, 4 = All directions medium, 5 = All directions fast.&lt;br /&gt;
|-&lt;br /&gt;
| STATE[10] || state || 10 instances of a 158-byte structure describing the states that the sprite can be in.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== STATE Format ====&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]] || left || Left pixel of the sprite location.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the sprite location.&lt;br /&gt;
|- &lt;br /&gt;
| [[UINT16LE]] || destState || Another state to move towards. The sprite will physically move to the location of the destination state, and change state when it reaches that location.&lt;br /&gt;
|- &lt;br /&gt;
| [[UINT16LE]] || speed || Speed of sprite movement 0 = None, 1-5 = slow-fast.&lt;br /&gt;
|- &lt;br /&gt;
| [[UINT8]] || movementType || 0 = horizontal then vertical, 1 = as the crow flies, 2 = just track player vertically, no sideways movement, 3 = just track player horizontally, no up/down movement, 4 = track player, 5 = fast move??, 6 = None.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || destWaterState || Another state to change to when a requested water level change is acheived.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || gravity || If 1, the sprite falls when unsupported.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || current || Control currents. Bits 0-4 specify currents affected, Bit-5 turns currents off, Bit-6 turns currents on.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || activateSprite || Number of another sprite to activate.&lt;br /&gt;
|-&lt;br /&gt;
| TRIGGER || entryTrigger || A 10-byte structure that describes a trigger to change state when the player enters a region.&lt;br /&gt;
|- &lt;br /&gt;
| TRIGGER || exitTrigger || A 10-byte structure that describes a trigger to change state when the player leaves a region.&lt;br /&gt;
|-&lt;br /&gt;
| TRIGGER || spriteEntryTrigger || A 10-byte structure that describes a trigger to change state when another sprite enters a region.&lt;br /&gt;
|-&lt;br /&gt;
| TRIGGER || spriteExitTrigger || A 10-byte structure that describes a trigger to change state when another sprite leaves a region (or is destroyed).&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || destroy || The sprite is destroyed (deactivated) when it enters this state.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || bounce || The sprite bounces ballistically when it hits a surface.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || emptyWater || Bits 0-7 speed of emptying, Bits 8-15 number of water region to empty.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || fillWater || Bits 0-7 speed of filling, Bits 8-15 number of water region to fill.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]][4] || unknown || Seems to affect the starting location of projectiles, relative to the sprite location.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || waterTriggerLeft || Left pixel of region for water trigger (see destWaterState field).&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || waterTriggerTop || Top pixel of region for water trigger.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || waterTriggerRight || Right pixel of region for water trigger.&lt;br /&gt;
|-&lt;br /&gt;
| FRAME[10] || frame || 10 instances of an 8-byte structure describing the sprite tile location within the &amp;lt;tt&amp;gt;SPR&amp;lt;/tt&amp;gt; image file&lt;br /&gt;
|- &lt;br /&gt;
| [[UINT16LE]] || animSpeed || Rate of frame change of sprite animation.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || cycle || Does the animation cycle repeat.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || cycleCount || Number of animation frames before changing state.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || animTriggerState || Sprite state to move to when cycleCount is reached.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || waterTriggerBottom || Bottom pixel of region for water trigger.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== TRIGGER Format ====&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]] || state || State to move to when triggered.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || left || Left pixel of the trigger region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the trigger region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right pixel of the trigger region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom pixel of the trigger region.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== FRAME Format ====&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]] || left || Left pixel of the sprite on the &amp;lt;tt&amp;gt;SPR&amp;lt;/tt&amp;gt; image file.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the sprite on the &amp;lt;tt&amp;gt;SPR&amp;lt;/tt&amp;gt; image file.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right pixel of the sprite on the &amp;lt;tt&amp;gt;SPR&amp;lt;/tt&amp;gt; image file.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom pixel of the sprite on the &amp;lt;tt&amp;gt;SPR&amp;lt;/tt&amp;gt; image file.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
There are 10 different stages in the game, and correspondingly 10 different tile and sprite sets. &lt;br /&gt;
&lt;br /&gt;
The tile images for the backgrounds and landscape are stored in the &amp;lt;tt&amp;gt;DEC&amp;lt;/tt&amp;gt; directory, in image files which are in [[LBM Format]]. These files are named &amp;lt;tt&amp;gt;DECORxx.LBM&amp;lt;/tt&amp;gt; where xx is specified by the decFile field of the main structure.&lt;br /&gt;
&lt;br /&gt;
The sprite images are stored in the &amp;lt;tt&amp;gt;SPR&amp;lt;/tt&amp;gt; directory, in image files which are in [[LBM Format]]. These files are named &amp;lt;tt&amp;gt;SPRxxn&amp;lt;/tt&amp;gt; where xx is specified by the decFile field of the main structure, and n is specified by the spriteMap field in the main structure.&lt;br /&gt;
&lt;br /&gt;
The sprites can be of varying sizes, the FRAME data structure describes the bounding box in pixels within the sprite image file. If the sprite requires a transparency mask, then this mask will be a rectangular region with the same size as the sprite, and placed in the image file immediately below the sprite.&lt;br /&gt;
&lt;br /&gt;
Within the tile image file, all the tiles are 16 &amp;amp;times; 16 pixels, tiles are referenced in the main file structure as a pair of byte coordinates, giving the X and Y position in tiles within the image file.&lt;br /&gt;
&lt;br /&gt;
Certain tiles in the image file have special meaning.&lt;br /&gt;
&lt;br /&gt;
The tile at 0,1 is a coin. If the player touches this tile in the level, they will gain a coin, and the tile will be swapped out for the tile at 0,0 which is always empty.&lt;br /&gt;
&lt;br /&gt;
The tile at 0,2 is an extra life. If the player touches this tile in the level, they will gain an extra life, and the tile will be swapped out for the tile at 0,0.&lt;br /&gt;
&lt;br /&gt;
The tile at 0,3 is a time extension. If the player touches this tile in the level, they will gain an extra 30 seconds on the clock, and the tile will be swapped out for the tile at 0,0.&lt;br /&gt;
&lt;br /&gt;
All the remaining tiles on rows 0, 1 and 2 in the map are destructible tiles. The red form of the player can chew through the scenery. Chewing a tile from row 0 will cause that tile to be swapped out with the tile immediately below it in row 1. Chewing a tile from row 1 will cause that tile to be swapped out with the tile immediately below it in row 2. Chewing a tile from row 2 will cause that tile to be swapped out with the tile at 0,0, which is empty, so the player can then get through the gap created. Typically the tiles in these rows depict a gradually degraded state, you can have tiles that require more or less action to destroy them, by choosing from the three rows. Often the top row tiles are visually indistinguishable from some other non-destructible tiles in the tileset, allowing you to hide destructible tiles.&lt;br /&gt;
&lt;br /&gt;
== Credits ==&lt;br /&gt;
&lt;br /&gt;
This file format was reverse engineered by [[User:Carbon14|carbon14]]. 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>Carbon14</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=File:BIN_Format_(Fury_of_the_Furries).png&amp;diff=11097</id>
		<title>File:BIN Format (Fury of the Furries).png</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=File:BIN_Format_(Fury_of_the_Furries).png&amp;diff=11097"/>
		<updated>2023-07-07T11:59:51Z</updated>

		<summary type="html">&lt;p&gt;Carbon14: Carbon14 uploaded a new version of File:BIN Format (Fury of the Furries).png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Carbon14</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=BIN_Format_(Fury_of_the_Furries)&amp;diff=11096</id>
		<title>BIN Format (Fury of the Furries)</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=BIN_Format_(Fury_of_the_Furries)&amp;diff=11096"/>
		<updated>2023-07-07T11:58:00Z</updated>

		<summary type="html">&lt;p&gt;Carbon14: /* RLE Compressed File Format */ Add alternating section specification&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Map Infobox&lt;br /&gt;
 | Type = 2D tile-based&lt;br /&gt;
 | Layers = 3&lt;br /&gt;
 | Tile size = 16&amp;amp;times;16&lt;br /&gt;
 | Viewport = 320&amp;amp;times;200&lt;br /&gt;
 | Games = &lt;br /&gt;
  {{Game|Fury of the Furries}}&lt;br /&gt;
  {{Game|Pac-In-Time}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Fury of the Furries]] maps contain the static background and landscape for the level, collectable coins, time extensions and extra lives and destructible bricks. They also contain the &#039;scripting for the game play itself&#039;, this is in the form of the definitions of the sprites that interact with the player character. There are up to 10 sprites in the level, each having up to 10 states. Triggers are defined for switching between states, and for the player and or sprites to switch on or off other game-play elements.&lt;br /&gt;
&lt;br /&gt;
The file itself is run-length encoded, and after decompression is always a fixed length. Generally unused elements within the game are marked by the [[UINT16LE]] value 0xFFFF.&lt;br /&gt;
&lt;br /&gt;
== File Formats ==&lt;br /&gt;
&lt;br /&gt;
=== RLE Compressed File Format ===&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;
| FOURCC || header || Appears to be a header with version number. Most files decompress to an object 25518 bytes in length, but a handful of files are shorter, and appear to be earlier versions.&amp;lt;br /&amp;gt;&lt;br /&gt;
byte is the shortest, at 25432 bytes, the last entry is the time field.&amp;lt;br /&amp;gt;&lt;br /&gt;
byt1 and byt3 are 25482 bytes long, and include currents.&amp;lt;br /&amp;gt;&lt;br /&gt;
byt4 is 25518, it&#039;s the version seen for the vast majority of the files, and includes all the fields after the currents.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || length || Number of bytes in section.&amp;lt;br /&amp;gt;&lt;br /&gt;
if zero then stop decompressing.&amp;lt;br /&amp;gt;&lt;br /&gt;
if less than 0x7D00 then use the following length bytes from the input.&amp;lt;br /&amp;gt;&lt;br /&gt;
otherwise use the following byte from the input (length - 0x7D00) times.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
compressed and uncompressed sections always alternate, even if this makes the packing less efficient. This means that if you have two adjacent runs, There will be at least 1 character represented as uncompressed.&lt;br /&gt;
|-&lt;br /&gt;
| ... || etc || continue with another &#039;length&#039; until the final file size is achieved (25,518 bytes), or you read a 0 length.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The file should end with a zero length section. i.e. two bytes of 0.&lt;br /&gt;
&lt;br /&gt;
=== Uncompressed File Format ===&lt;br /&gt;
&lt;br /&gt;
==== FILE Format ====&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]] || mapWidth || Width of the playable area (in tiles) between 20 and 78.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || mapHeight || Height of the playable area (in tiles) between 13 and 51.&lt;br /&gt;
&lt;br /&gt;
The maximum number of tiles in a game is 1024. This places constraints on the width and height. &lt;br /&gt;
The minimum width is 20 to match the viewport size of 320 pixels, and this constrains the height to 51 (20 &amp;amp;times; 51 = 1020). &lt;br /&gt;
The minimum height is 13 to match the viewport size of 200 pixels, and this constrains the width to 78 (13 &amp;amp;times; 78 = 1014).&lt;br /&gt;
Any other combination of width and height is possible so long as it meets these constraints.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]][2][78 &amp;amp;times; 51] || tileIndex || Pairs of coordinates into a [[LBM Format]] &amp;lt;tt&amp;gt;DEC&amp;lt;/tt&amp;gt; file containing the tiles.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || decFile || The &amp;lt;tt&amp;gt;DEC&amp;lt;/tt&amp;gt; file number less one. i.e. a value of 3 indicates &amp;lt;tt&amp;gt;DECOR04.LBM&amp;lt;/tt&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || startLeft || The left of the starting position for the player character, less 8 pixels.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || startTop || The top of the starting position for the player character.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || foregroundPaletteIndex || The index of the first palette entry to be regarded as foreground.&lt;br /&gt;
&lt;br /&gt;
The palette for the &amp;lt;tt&amp;gt;DEC&amp;lt;/tt&amp;gt; file has 16 colours and they are used in a particular order. The first is always black and is background (i.e. the player character is not blocked by this colour)&lt;br /&gt;
The next 4 usually dark versions of yellow, red, green and blue and are used for the shadow colour of the player character sprite, in the 4 different forms that the player can take.&lt;br /&gt;
The next colour (colour 5 in the palette) is the bright colour of the player character, and will be swapped out as the player changes form.&lt;br /&gt;
The remaining colours a chosen to suit the needs of the stage of the game (desert, forest, mountains etc).&lt;br /&gt;
Generally the lower colours are regarded as background, and the upper colours as foreground, and this is used in the collision detection for the player and the landscape.&lt;br /&gt;
|-&lt;br /&gt;
| EXIT[5] || exit || 5 instances of a 6-byte structure describing the exits from the level.&lt;br /&gt;
|-&lt;br /&gt;
| WATER[5] || water1 || 5 instances of an 8-byte structure describing the regions of water in the level.&lt;br /&gt;
|-&lt;br /&gt;
| TELEPORT[5] || teleport || 5 instances of an 8-byte structure describing the regions of the game that can teleport the player.&lt;br /&gt;
|-&lt;br /&gt;
| NONSTICK[5] || nonStick || 5 instances of an 8-byte structure describing regions that the player cannot attach a rope to.&lt;br /&gt;
|-&lt;br /&gt;
| ACID[5] || acid || 5 instances of an 8-byte structure describing regions that will dissolve the player if touched.&lt;br /&gt;
|-&lt;br /&gt;
| DANGER[20] || danger || 20 instances of an 8-byte structure describing regions that will explode the player if touched.&lt;br /&gt;
|-&lt;br /&gt;
| SPRITE[10] || sprite || 10 instances of a 1688-byte structure describing sprites.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || blueStart || 1 if the blue form of the player is available at the start of the game.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || greenStart || 1 if the green form of the player is available at the start of the game.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || redStart || 1 if the red form of the player is available at the start of the game.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || yellowStart || 1 if the yellow form of the player is available at the start of the game.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]][12] || unknown || Purpose unknown.&lt;br /&gt;
|-&lt;br /&gt;
| FIELD[5] || redField || 5 instances of an 8-byte structure describing the particle field that enables/disables the red form of the player.&lt;br /&gt;
|-&lt;br /&gt;
| FIELD[5] || greenField || 5 instances of an 8-byte structure describing the particle field that enables/disables the green form of the player.&lt;br /&gt;
|-&lt;br /&gt;
| FIELD[5] || yellowField || 5 instances of an 8-byte structure describing the particle field that enables/disables the yellow form of the player.&lt;br /&gt;
|-&lt;br /&gt;
| FIELD[5] || blueField || 5 instances of an 8-byte structure describing the particle field that enables/disables the blue form of the player.&lt;br /&gt;
|-&lt;br /&gt;
| WATER[5] || water2 || 5 further instances of an 8-byte structure describing the regions of water in the level.&lt;br /&gt;
&lt;br /&gt;
Probably one of these 2 sets of water data describes regions that start full of water and can be emptied, and the others describe regions which start empty and can be filled. I&#039;m not sure.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]][10] || unknown || Purpose unknown.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || waterPaletteIndex || Index of colour in palette used for water.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || airPaletteIndex || Index of colour in palette used for air.&lt;br /&gt;
&lt;br /&gt;
These two palette entries can be used to modify the image as regions of water fill/empty.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || time || Amount of time the player has to complete the level. In 30ths of a second (The game plays at 30 fps).&lt;br /&gt;
|-&lt;br /&gt;
| CURRENT[5] || current || 5 instances of a 10-byte structure describing regions of air or water currents.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || motePaletteIndex || Index of colour in palette used for dust motes moving in currents.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || unknown || Purpose unknown.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || spriteMap || Index of [[LBM Format]] &amp;lt;tt&amp;gt;SPR&amp;lt;/tt&amp;gt; sprite map image to use for this level. 0 = A, 1 = B.&lt;br /&gt;
|-&lt;br /&gt;
| EXITRETURN[5] || exitReturn || 5 instances of a 4-byte structure describing where the player character should re-enter the level following a side-quest.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]][5] || exitGraphic || 5 instances of and indication of how a player is depicted exiting. 0 used for the end of the level dissolves the level viewport in a swirling vortex. 1 is smooth and is used for tunnelling in multi-map levels.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || unknown || Seems to indicate a row in the map at which some odd palette behaviour is observed. Possibly a bug, but it could be that the intention is to shift something in the colour scheme when the player is above ground / below ground.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== EXIT Format ====&lt;br /&gt;
&lt;br /&gt;
The exit region is 16 &amp;amp;times; 16 pixels.&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]] || left || Left pixel of the centre of the exit.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || top pixel of the centre of the exit.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || destination || Level number to go to next from this exit.  Also the most significant bit indicates 0 = level exit, 1 = go to side quest.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== WATER Format ====&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]] || left || Left pixel of the water region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the water region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right pixel of the water region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom pixel of the water region.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== TELEPORT Format ====&lt;br /&gt;
&lt;br /&gt;
The teleport region is 16 &amp;amp;times; 16 pixels.&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]] || srcX || Left pixel of the centre of the teleport region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || srcY || Top pixel of the centre of the teleport region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || destX || Right pixel of the centre of the teleport region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || destY || Bottom pixel of the centre of the teleport region.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== NONSTICK Format ====&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]] || left || Left pixel of the non-stick region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the non-stick region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right pixel of the non-stick region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom pixel of the non-stick region.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== ACID Format ====&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]] || left || Left pixel of the acid region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the acid region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right pixel of the acid region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom pixel of the acid region.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== DANGER Format ====&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]] || left || Left pixel of the danger region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the danger region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right pixel of the danger region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom pixel of the danger region.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== FIELD Format ====&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]] || left || Left pixel of the particle field.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the particle field.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right pixel of the particle field.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom pixel of the particle field.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== CURRENT Format ====&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]] || left || Left pixel of the current region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the current region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right pixel of the current region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom pixel of the current region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || flags || bit-0 and bit-1 : direction 00 = down, 01 = right, 10 = up, 11 = left&amp;lt;br/&amp;gt;bit-2: strength of current 0 = weak, 1 = strong&amp;lt;br/&amp;gt;bit-3: show current using dust motes 0 = no, 1 = yes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== EXITRETURN Format ====&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]] || left || Left pixel of the centre of the return region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the return region.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== SPRITE Format ====&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;}&lt;br /&gt;
! Data Type || Name || Description&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || layer || 0 = middleground (can interact with the player)&amp;lt;br/&amp;gt;1=background&amp;lt;br/&amp;gt;2=foreground (player can move behind it).&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || malevolence || Bit-0: sprite will kill player in ? form&amp;lt;br/&amp;gt;Bit-1: sprite will kill player in yellow form&amp;lt;br/&amp;gt;Bit-2: sprite will kill player in ? form&amp;lt;br/&amp;gt;Bit-3: sprite will kill player in ? form.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || unknown || Purpose unknown&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || mask || Sprite requires a mask graphic for transparency. If a mask is required, it will be immediately below the sprite tile in the &amp;lt;tt&amp;gt;SPR&amp;lt;/tt&amp;gt; file.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || cleanUp || The previous sprite image needs to be removed for each frame. This is not necessary if the sprite is unmasked and never changes position.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || strength || How much damage the sprite can sustain. 0 = infinite, otherwise 1-127.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || blastArea || Size of the explosion if the sprite is destroyed. (Purely a decorative concern, there is no splash damage).&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || active || Is the sprite in use.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]][90] || unknown || Suspect that this region is actually populated and used as working space while the level is being played. &lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || fireRate || How often the sprite fires projectiles. 0 = none, 1-5 = low-high.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || fireType || How are projectiles fired. 1 = All directions slowly, 2 = Right, 3 = Left, 4 = All directions medium, 5 = All directions fast.&lt;br /&gt;
|-&lt;br /&gt;
| STATE[10] || state || 10 instances of a 158-byte structure describing the states that the sprite can be in.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== STATE Format ====&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]] || left || Left pixel of the sprite location.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the sprite location.&lt;br /&gt;
|- &lt;br /&gt;
| [[UINT16LE]] || destState || Another state to move towards. The sprite will physically move to the location of the destination state, and change state when it reaches that location.&lt;br /&gt;
|- &lt;br /&gt;
| [[UINT16LE]] || speed || Speed of sprite movement 0 = None, 1-5 = slow-fast.&lt;br /&gt;
|- &lt;br /&gt;
| [[UINT8]] || movementType || 0 = horizontal then vertical, 1 = as the crow flies, 2 = just track player vertically, no sideways movement, 3 = just track player horizontally, no up/down movement, 4 = track player, 5 = fast move??, 6 = None.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || destWaterState || Another state to change to when a requested water level change is acheived.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || gravity || If 1, the sprite falls when unsupported.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || current || Control currents. Bits 0-4 specify currents affected, Bit-5 turns currents off, Bit-6 turns currents on.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || activateSprite || Number of another sprite to activate.&lt;br /&gt;
|-&lt;br /&gt;
| TRIGGER || entryTrigger || A 10-byte structure that describes a trigger to change state when the player enters a region.&lt;br /&gt;
|- &lt;br /&gt;
| TRIGGER || exitTrigger || A 10-byte structure that describes a trigger to change state when the player leaves a region.&lt;br /&gt;
|-&lt;br /&gt;
| TRIGGER || spriteEntryTrigger || A 10-byte structure that describes a trigger to change state when another sprite enters a region.&lt;br /&gt;
|-&lt;br /&gt;
| TRIGGER || spriteExitTrigger || A 10-byte structure that describes a trigger to change state when another sprite leaves a region (or is destroyed).&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || destroy || The sprite is destroyed (deactivated) when it enters this state.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || bounce || The sprite bounces ballistically when it hits a surface.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || emptyWater || Bits 0-7 speed of emptying, Bits 8-15 number of water region to empty.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || fillWater || Bits 0-7 speed of filling, Bits 8-15 number of water region to fill.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]][4] || unknown || Seems to affect the starting location of projectiles, relative to the sprite location.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || waterTriggerLeft || Left pixel of region for water trigger (see destWaterState field).&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || waterTriggerTop || Top pixel of region for water trigger.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || waterTriggerRight || Right pixel of region for water trigger.&lt;br /&gt;
|-&lt;br /&gt;
| FRAME[10] || frame || 10 instances of an 8-byte structure describing the sprite tile location within the &amp;lt;tt&amp;gt;SPR&amp;lt;/tt&amp;gt; image file&lt;br /&gt;
|- &lt;br /&gt;
| [[UINT16LE]] || animSpeed || Rate of frame change of sprite animation.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || cycle || Does the animation cycle repeat.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || cycleCount || Number of animation frames before changing state.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || animTriggerState || Sprite state to move to when cycleCount is reached.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || waterTriggerBottom || Bottom pixel of region for water trigger.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== TRIGGER Format ====&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]] || state || State to move to when triggered.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || left || Left pixel of the trigger region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the trigger region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right pixel of the trigger region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom pixel of the trigger region.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== FRAME Format ====&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]] || left || Left pixel of the sprite on the &amp;lt;tt&amp;gt;SPR&amp;lt;/tt&amp;gt; image file.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the sprite on the &amp;lt;tt&amp;gt;SPR&amp;lt;/tt&amp;gt; image file.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right pixel of the sprite on the &amp;lt;tt&amp;gt;SPR&amp;lt;/tt&amp;gt; image file.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom pixel of the sprite on the &amp;lt;tt&amp;gt;SPR&amp;lt;/tt&amp;gt; image file.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
There are 10 different stages in the game, and correspondingly 10 different tile and sprite sets. &lt;br /&gt;
&lt;br /&gt;
The tile images for the backgrounds and landscape are stored in the &amp;lt;tt&amp;gt;DEC&amp;lt;/tt&amp;gt; directory, in image files which are in [[LBM Format]]. These files are named &amp;lt;tt&amp;gt;DECORxx.LBM&amp;lt;/tt&amp;gt; where xx is specified by the decFile field of the main structure.&lt;br /&gt;
&lt;br /&gt;
The sprite images are stored in the &amp;lt;tt&amp;gt;SPR&amp;lt;/tt&amp;gt; directory, in image files which are in [[LBM Format]]. These files are named &amp;lt;tt&amp;gt;SPRxxn&amp;lt;/tt&amp;gt; where xx is specified by the decFile field of the main structure, and n is specified by the spriteMap field in the main structure.&lt;br /&gt;
&lt;br /&gt;
The sprites can be of varying sizes, the FRAME data structure describes the bounding box in pixels within the sprite image file. If the sprite requires a transparency mask, then this mask will be a rectangular region with the same size as the sprite, and placed in the image file immediately below the sprite.&lt;br /&gt;
&lt;br /&gt;
Within the tile image file, all the tiles are 16 &amp;amp;times; 16 pixels, tiles are referenced in the main file structure as a pair of byte coordinates, giving the X and Y position in tiles within the image file.&lt;br /&gt;
&lt;br /&gt;
Certain tiles in the image file have special meaning.&lt;br /&gt;
&lt;br /&gt;
The tile at 0,1 is a coin. If the player touches this tile in the level, they will gain a coin, and the tile will be swapped out for the tile at 0,0 which is always empty.&lt;br /&gt;
&lt;br /&gt;
The tile at 0,2 is an extra life. If the player touches this tile in the level, they will gain an extra life, and the tile will be swapped out for the tile at 0,0.&lt;br /&gt;
&lt;br /&gt;
The tile at 0,3 is a time extension. If the player touches this tile in the level, they will gain an extra 30 seconds on the clock, and the tile will be swapped out for the tile at 0,0.&lt;br /&gt;
&lt;br /&gt;
All the remaining tiles on rows 0, 1 and 2 in the map are destructible tiles. The red form of the player can chew through the scenery. Chewing a tile from row 0 will cause that tile to be swapped out with the tile immediately below it in row 1. Chewing a tile from row 1 will cause that tile to be swapped out with the tile immediately below it in row 2. Chewing a tile from row 2 will cause that tile to be swapped out with the tile at 0,0, which is empty, so the player can then get through the gap created. Typically the tiles in these rows depict a gradually degraded state, you can have tiles that require more or less action to destroy them, by choosing from the three rows. Often the top row tiles are visually indistinguishable from some other non-destructible tiles in the tileset, allowing you to hide destructible tiles.&lt;br /&gt;
&lt;br /&gt;
== Credits ==&lt;br /&gt;
&lt;br /&gt;
This file format was reverse engineered by [[User:Carbon14|carbon14]]. 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>Carbon14</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=BIN_Format_(Fury_of_the_Furries)&amp;diff=11095</id>
		<title>BIN Format (Fury of the Furries)</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=BIN_Format_(Fury_of_the_Furries)&amp;diff=11095"/>
		<updated>2023-07-07T11:00:48Z</updated>

		<summary type="html">&lt;p&gt;Carbon14: /* RLE Compressed File Format */ Add detail of zero byte ending.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Map Infobox&lt;br /&gt;
 | Type = 2D tile-based&lt;br /&gt;
 | Layers = 3&lt;br /&gt;
 | Tile size = 16&amp;amp;times;16&lt;br /&gt;
 | Viewport = 320&amp;amp;times;200&lt;br /&gt;
 | Games = &lt;br /&gt;
  {{Game|Fury of the Furries}}&lt;br /&gt;
  {{Game|Pac-In-Time}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Fury of the Furries]] maps contain the static background and landscape for the level, collectable coins, time extensions and extra lives and destructible bricks. They also contain the &#039;scripting for the game play itself&#039;, this is in the form of the definitions of the sprites that interact with the player character. There are up to 10 sprites in the level, each having up to 10 states. Triggers are defined for switching between states, and for the player and or sprites to switch on or off other game-play elements.&lt;br /&gt;
&lt;br /&gt;
The file itself is run-length encoded, and after decompression is always a fixed length. Generally unused elements within the game are marked by the [[UINT16LE]] value 0xFFFF.&lt;br /&gt;
&lt;br /&gt;
== File Formats ==&lt;br /&gt;
&lt;br /&gt;
=== RLE Compressed File Format ===&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;
| FOURCC || header || Appears to be a header with version number. Most files decompress to an object 25518 bytes in length, but a handful of files are shorter, and appear to be earlier versions.&amp;lt;br /&amp;gt;&lt;br /&gt;
byte is the shortest, at 25432 bytes, the last entry is the time field.&amp;lt;br /&amp;gt;&lt;br /&gt;
byt1 and byt3 are 25482 bytes long, and include currents.&amp;lt;br /&amp;gt;&lt;br /&gt;
byt4 is 25518, it&#039;s the version seen for the vast majority of the files, and includes all the fields after the currents.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || uncompressedLength || Number of bytes in section.&amp;lt;br /&amp;gt;&lt;br /&gt;
if zero then stop decompressing.&amp;lt;br /&amp;gt;&lt;br /&gt;
if less than 0x7D00 then use the following uncompressedLength bytes from the input.&amp;lt;br /&amp;gt;&lt;br /&gt;
otherwise use the following byte from the input (uncompressedLength - 0x7D00) times.&lt;br /&gt;
|-&lt;br /&gt;
| ... || etc || continue with another &#039;uncompressedLength&#039; until the final file size is achieved (25,518 bytes), or you read a 0 uncompressedLength.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The file should end with a zero length section. i.e. two bytes of 0.&lt;br /&gt;
&lt;br /&gt;
=== Uncompressed File Format ===&lt;br /&gt;
&lt;br /&gt;
==== FILE Format ====&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]] || mapWidth || Width of the playable area (in tiles) between 20 and 78.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || mapHeight || Height of the playable area (in tiles) between 13 and 51.&lt;br /&gt;
&lt;br /&gt;
The maximum number of tiles in a game is 1024. This places constraints on the width and height. &lt;br /&gt;
The minimum width is 20 to match the viewport size of 320 pixels, and this constrains the height to 51 (20 &amp;amp;times; 51 = 1020). &lt;br /&gt;
The minimum height is 13 to match the viewport size of 200 pixels, and this constrains the width to 78 (13 &amp;amp;times; 78 = 1014).&lt;br /&gt;
Any other combination of width and height is possible so long as it meets these constraints.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]][2][78 &amp;amp;times; 51] || tileIndex || Pairs of coordinates into a [[LBM Format]] &amp;lt;tt&amp;gt;DEC&amp;lt;/tt&amp;gt; file containing the tiles.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || decFile || The &amp;lt;tt&amp;gt;DEC&amp;lt;/tt&amp;gt; file number less one. i.e. a value of 3 indicates &amp;lt;tt&amp;gt;DECOR04.LBM&amp;lt;/tt&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || startLeft || The left of the starting position for the player character, less 8 pixels.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || startTop || The top of the starting position for the player character.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || foregroundPaletteIndex || The index of the first palette entry to be regarded as foreground.&lt;br /&gt;
&lt;br /&gt;
The palette for the &amp;lt;tt&amp;gt;DEC&amp;lt;/tt&amp;gt; file has 16 colours and they are used in a particular order. The first is always black and is background (i.e. the player character is not blocked by this colour)&lt;br /&gt;
The next 4 usually dark versions of yellow, red, green and blue and are used for the shadow colour of the player character sprite, in the 4 different forms that the player can take.&lt;br /&gt;
The next colour (colour 5 in the palette) is the bright colour of the player character, and will be swapped out as the player changes form.&lt;br /&gt;
The remaining colours a chosen to suit the needs of the stage of the game (desert, forest, mountains etc).&lt;br /&gt;
Generally the lower colours are regarded as background, and the upper colours as foreground, and this is used in the collision detection for the player and the landscape.&lt;br /&gt;
|-&lt;br /&gt;
| EXIT[5] || exit || 5 instances of a 6-byte structure describing the exits from the level.&lt;br /&gt;
|-&lt;br /&gt;
| WATER[5] || water1 || 5 instances of an 8-byte structure describing the regions of water in the level.&lt;br /&gt;
|-&lt;br /&gt;
| TELEPORT[5] || teleport || 5 instances of an 8-byte structure describing the regions of the game that can teleport the player.&lt;br /&gt;
|-&lt;br /&gt;
| NONSTICK[5] || nonStick || 5 instances of an 8-byte structure describing regions that the player cannot attach a rope to.&lt;br /&gt;
|-&lt;br /&gt;
| ACID[5] || acid || 5 instances of an 8-byte structure describing regions that will dissolve the player if touched.&lt;br /&gt;
|-&lt;br /&gt;
| DANGER[20] || danger || 20 instances of an 8-byte structure describing regions that will explode the player if touched.&lt;br /&gt;
|-&lt;br /&gt;
| SPRITE[10] || sprite || 10 instances of a 1688-byte structure describing sprites.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || blueStart || 1 if the blue form of the player is available at the start of the game.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || greenStart || 1 if the green form of the player is available at the start of the game.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || redStart || 1 if the red form of the player is available at the start of the game.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || yellowStart || 1 if the yellow form of the player is available at the start of the game.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]][12] || unknown || Purpose unknown.&lt;br /&gt;
|-&lt;br /&gt;
| FIELD[5] || redField || 5 instances of an 8-byte structure describing the particle field that enables/disables the red form of the player.&lt;br /&gt;
|-&lt;br /&gt;
| FIELD[5] || greenField || 5 instances of an 8-byte structure describing the particle field that enables/disables the green form of the player.&lt;br /&gt;
|-&lt;br /&gt;
| FIELD[5] || yellowField || 5 instances of an 8-byte structure describing the particle field that enables/disables the yellow form of the player.&lt;br /&gt;
|-&lt;br /&gt;
| FIELD[5] || blueField || 5 instances of an 8-byte structure describing the particle field that enables/disables the blue form of the player.&lt;br /&gt;
|-&lt;br /&gt;
| WATER[5] || water2 || 5 further instances of an 8-byte structure describing the regions of water in the level.&lt;br /&gt;
&lt;br /&gt;
Probably one of these 2 sets of water data describes regions that start full of water and can be emptied, and the others describe regions which start empty and can be filled. I&#039;m not sure.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]][10] || unknown || Purpose unknown.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || waterPaletteIndex || Index of colour in palette used for water.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || airPaletteIndex || Index of colour in palette used for air.&lt;br /&gt;
&lt;br /&gt;
These two palette entries can be used to modify the image as regions of water fill/empty.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || time || Amount of time the player has to complete the level. In 30ths of a second (The game plays at 30 fps).&lt;br /&gt;
|-&lt;br /&gt;
| CURRENT[5] || current || 5 instances of a 10-byte structure describing regions of air or water currents.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || motePaletteIndex || Index of colour in palette used for dust motes moving in currents.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || unknown || Purpose unknown.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || spriteMap || Index of [[LBM Format]] &amp;lt;tt&amp;gt;SPR&amp;lt;/tt&amp;gt; sprite map image to use for this level. 0 = A, 1 = B.&lt;br /&gt;
|-&lt;br /&gt;
| EXITRETURN[5] || exitReturn || 5 instances of a 4-byte structure describing where the player character should re-enter the level following a side-quest.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]][5] || exitGraphic || 5 instances of and indication of how a player is depicted exiting. 0 used for the end of the level dissolves the level viewport in a swirling vortex. 1 is smooth and is used for tunnelling in multi-map levels.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || unknown || Seems to indicate a row in the map at which some odd palette behaviour is observed. Possibly a bug, but it could be that the intention is to shift something in the colour scheme when the player is above ground / below ground.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== EXIT Format ====&lt;br /&gt;
&lt;br /&gt;
The exit region is 16 &amp;amp;times; 16 pixels.&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]] || left || Left pixel of the centre of the exit.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || top pixel of the centre of the exit.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || destination || Level number to go to next from this exit.  Also the most significant bit indicates 0 = level exit, 1 = go to side quest.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== WATER Format ====&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]] || left || Left pixel of the water region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the water region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right pixel of the water region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom pixel of the water region.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== TELEPORT Format ====&lt;br /&gt;
&lt;br /&gt;
The teleport region is 16 &amp;amp;times; 16 pixels.&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]] || srcX || Left pixel of the centre of the teleport region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || srcY || Top pixel of the centre of the teleport region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || destX || Right pixel of the centre of the teleport region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || destY || Bottom pixel of the centre of the teleport region.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== NONSTICK Format ====&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]] || left || Left pixel of the non-stick region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the non-stick region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right pixel of the non-stick region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom pixel of the non-stick region.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== ACID Format ====&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]] || left || Left pixel of the acid region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the acid region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right pixel of the acid region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom pixel of the acid region.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== DANGER Format ====&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]] || left || Left pixel of the danger region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the danger region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right pixel of the danger region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom pixel of the danger region.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== FIELD Format ====&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]] || left || Left pixel of the particle field.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the particle field.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right pixel of the particle field.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom pixel of the particle field.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== CURRENT Format ====&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]] || left || Left pixel of the current region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the current region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right pixel of the current region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom pixel of the current region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || flags || bit-0 and bit-1 : direction 00 = down, 01 = right, 10 = up, 11 = left&amp;lt;br/&amp;gt;bit-2: strength of current 0 = weak, 1 = strong&amp;lt;br/&amp;gt;bit-3: show current using dust motes 0 = no, 1 = yes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== EXITRETURN Format ====&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]] || left || Left pixel of the centre of the return region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the return region.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== SPRITE Format ====&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;}&lt;br /&gt;
! Data Type || Name || Description&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || layer || 0 = middleground (can interact with the player)&amp;lt;br/&amp;gt;1=background&amp;lt;br/&amp;gt;2=foreground (player can move behind it).&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || malevolence || Bit-0: sprite will kill player in ? form&amp;lt;br/&amp;gt;Bit-1: sprite will kill player in yellow form&amp;lt;br/&amp;gt;Bit-2: sprite will kill player in ? form&amp;lt;br/&amp;gt;Bit-3: sprite will kill player in ? form.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || unknown || Purpose unknown&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || mask || Sprite requires a mask graphic for transparency. If a mask is required, it will be immediately below the sprite tile in the &amp;lt;tt&amp;gt;SPR&amp;lt;/tt&amp;gt; file.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || cleanUp || The previous sprite image needs to be removed for each frame. This is not necessary if the sprite is unmasked and never changes position.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || strength || How much damage the sprite can sustain. 0 = infinite, otherwise 1-127.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || blastArea || Size of the explosion if the sprite is destroyed. (Purely a decorative concern, there is no splash damage).&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || active || Is the sprite in use.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]][90] || unknown || Suspect that this region is actually populated and used as working space while the level is being played. &lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || fireRate || How often the sprite fires projectiles. 0 = none, 1-5 = low-high.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || fireType || How are projectiles fired. 1 = All directions slowly, 2 = Right, 3 = Left, 4 = All directions medium, 5 = All directions fast.&lt;br /&gt;
|-&lt;br /&gt;
| STATE[10] || state || 10 instances of a 158-byte structure describing the states that the sprite can be in.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== STATE Format ====&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]] || left || Left pixel of the sprite location.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the sprite location.&lt;br /&gt;
|- &lt;br /&gt;
| [[UINT16LE]] || destState || Another state to move towards. The sprite will physically move to the location of the destination state, and change state when it reaches that location.&lt;br /&gt;
|- &lt;br /&gt;
| [[UINT16LE]] || speed || Speed of sprite movement 0 = None, 1-5 = slow-fast.&lt;br /&gt;
|- &lt;br /&gt;
| [[UINT8]] || movementType || 0 = horizontal then vertical, 1 = as the crow flies, 2 = just track player vertically, no sideways movement, 3 = just track player horizontally, no up/down movement, 4 = track player, 5 = fast move??, 6 = None.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || destWaterState || Another state to change to when a requested water level change is acheived.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || gravity || If 1, the sprite falls when unsupported.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || current || Control currents. Bits 0-4 specify currents affected, Bit-5 turns currents off, Bit-6 turns currents on.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || activateSprite || Number of another sprite to activate.&lt;br /&gt;
|-&lt;br /&gt;
| TRIGGER || entryTrigger || A 10-byte structure that describes a trigger to change state when the player enters a region.&lt;br /&gt;
|- &lt;br /&gt;
| TRIGGER || exitTrigger || A 10-byte structure that describes a trigger to change state when the player leaves a region.&lt;br /&gt;
|-&lt;br /&gt;
| TRIGGER || spriteEntryTrigger || A 10-byte structure that describes a trigger to change state when another sprite enters a region.&lt;br /&gt;
|-&lt;br /&gt;
| TRIGGER || spriteExitTrigger || A 10-byte structure that describes a trigger to change state when another sprite leaves a region (or is destroyed).&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || destroy || The sprite is destroyed (deactivated) when it enters this state.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || bounce || The sprite bounces ballistically when it hits a surface.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || emptyWater || Bits 0-7 speed of emptying, Bits 8-15 number of water region to empty.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || fillWater || Bits 0-7 speed of filling, Bits 8-15 number of water region to fill.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]][4] || unknown || Seems to affect the starting location of projectiles, relative to the sprite location.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || waterTriggerLeft || Left pixel of region for water trigger (see destWaterState field).&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || waterTriggerTop || Top pixel of region for water trigger.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || waterTriggerRight || Right pixel of region for water trigger.&lt;br /&gt;
|-&lt;br /&gt;
| FRAME[10] || frame || 10 instances of an 8-byte structure describing the sprite tile location within the &amp;lt;tt&amp;gt;SPR&amp;lt;/tt&amp;gt; image file&lt;br /&gt;
|- &lt;br /&gt;
| [[UINT16LE]] || animSpeed || Rate of frame change of sprite animation.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || cycle || Does the animation cycle repeat.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || cycleCount || Number of animation frames before changing state.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || animTriggerState || Sprite state to move to when cycleCount is reached.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || waterTriggerBottom || Bottom pixel of region for water trigger.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== TRIGGER Format ====&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]] || state || State to move to when triggered.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || left || Left pixel of the trigger region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the trigger region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right pixel of the trigger region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom pixel of the trigger region.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== FRAME Format ====&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]] || left || Left pixel of the sprite on the &amp;lt;tt&amp;gt;SPR&amp;lt;/tt&amp;gt; image file.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the sprite on the &amp;lt;tt&amp;gt;SPR&amp;lt;/tt&amp;gt; image file.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right pixel of the sprite on the &amp;lt;tt&amp;gt;SPR&amp;lt;/tt&amp;gt; image file.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom pixel of the sprite on the &amp;lt;tt&amp;gt;SPR&amp;lt;/tt&amp;gt; image file.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
There are 10 different stages in the game, and correspondingly 10 different tile and sprite sets. &lt;br /&gt;
&lt;br /&gt;
The tile images for the backgrounds and landscape are stored in the &amp;lt;tt&amp;gt;DEC&amp;lt;/tt&amp;gt; directory, in image files which are in [[LBM Format]]. These files are named &amp;lt;tt&amp;gt;DECORxx.LBM&amp;lt;/tt&amp;gt; where xx is specified by the decFile field of the main structure.&lt;br /&gt;
&lt;br /&gt;
The sprite images are stored in the &amp;lt;tt&amp;gt;SPR&amp;lt;/tt&amp;gt; directory, in image files which are in [[LBM Format]]. These files are named &amp;lt;tt&amp;gt;SPRxxn&amp;lt;/tt&amp;gt; where xx is specified by the decFile field of the main structure, and n is specified by the spriteMap field in the main structure.&lt;br /&gt;
&lt;br /&gt;
The sprites can be of varying sizes, the FRAME data structure describes the bounding box in pixels within the sprite image file. If the sprite requires a transparency mask, then this mask will be a rectangular region with the same size as the sprite, and placed in the image file immediately below the sprite.&lt;br /&gt;
&lt;br /&gt;
Within the tile image file, all the tiles are 16 &amp;amp;times; 16 pixels, tiles are referenced in the main file structure as a pair of byte coordinates, giving the X and Y position in tiles within the image file.&lt;br /&gt;
&lt;br /&gt;
Certain tiles in the image file have special meaning.&lt;br /&gt;
&lt;br /&gt;
The tile at 0,1 is a coin. If the player touches this tile in the level, they will gain a coin, and the tile will be swapped out for the tile at 0,0 which is always empty.&lt;br /&gt;
&lt;br /&gt;
The tile at 0,2 is an extra life. If the player touches this tile in the level, they will gain an extra life, and the tile will be swapped out for the tile at 0,0.&lt;br /&gt;
&lt;br /&gt;
The tile at 0,3 is a time extension. If the player touches this tile in the level, they will gain an extra 30 seconds on the clock, and the tile will be swapped out for the tile at 0,0.&lt;br /&gt;
&lt;br /&gt;
All the remaining tiles on rows 0, 1 and 2 in the map are destructible tiles. The red form of the player can chew through the scenery. Chewing a tile from row 0 will cause that tile to be swapped out with the tile immediately below it in row 1. Chewing a tile from row 1 will cause that tile to be swapped out with the tile immediately below it in row 2. Chewing a tile from row 2 will cause that tile to be swapped out with the tile at 0,0, which is empty, so the player can then get through the gap created. Typically the tiles in these rows depict a gradually degraded state, you can have tiles that require more or less action to destroy them, by choosing from the three rows. Often the top row tiles are visually indistinguishable from some other non-destructible tiles in the tileset, allowing you to hide destructible tiles.&lt;br /&gt;
&lt;br /&gt;
== Credits ==&lt;br /&gt;
&lt;br /&gt;
This file format was reverse engineered by [[User:Carbon14|carbon14]]. 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>Carbon14</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=BIN_Format_(Fury_of_the_Furries)&amp;diff=11094</id>
		<title>BIN Format (Fury of the Furries)</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=BIN_Format_(Fury_of_the_Furries)&amp;diff=11094"/>
		<updated>2023-07-07T10:56:15Z</updated>

		<summary type="html">&lt;p&gt;Carbon14: /* RLE Compressed File Format */ Add discovered details of file header /version&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Map Infobox&lt;br /&gt;
 | Type = 2D tile-based&lt;br /&gt;
 | Layers = 3&lt;br /&gt;
 | Tile size = 16&amp;amp;times;16&lt;br /&gt;
 | Viewport = 320&amp;amp;times;200&lt;br /&gt;
 | Games = &lt;br /&gt;
  {{Game|Fury of the Furries}}&lt;br /&gt;
  {{Game|Pac-In-Time}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Fury of the Furries]] maps contain the static background and landscape for the level, collectable coins, time extensions and extra lives and destructible bricks. They also contain the &#039;scripting for the game play itself&#039;, this is in the form of the definitions of the sprites that interact with the player character. There are up to 10 sprites in the level, each having up to 10 states. Triggers are defined for switching between states, and for the player and or sprites to switch on or off other game-play elements.&lt;br /&gt;
&lt;br /&gt;
The file itself is run-length encoded, and after decompression is always a fixed length. Generally unused elements within the game are marked by the [[UINT16LE]] value 0xFFFF.&lt;br /&gt;
&lt;br /&gt;
== File Formats ==&lt;br /&gt;
&lt;br /&gt;
=== RLE Compressed File Format ===&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;
| FOURCC || header || Appears to be a header with version number. Most files decompress to an object 25518 bytes in length, but a handful of files are shorter, and appear to be earlier versions.&amp;lt;br /&amp;gt;&lt;br /&gt;
byte is the shortest, at 25432 bytes, the last entry is the time field.&amp;lt;br /&amp;gt;&lt;br /&gt;
byt1 and byt3 are 25482 bytes long, and include currents.&amp;lt;br /&amp;gt;&lt;br /&gt;
byt4 is 25518, it&#039;s the version seen for the vast majority of the files, and includes all the fields after the currents.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || uncompressedLength || Number of bytes in section.&amp;lt;br /&amp;gt;&lt;br /&gt;
if zero then stop decompressing.&amp;lt;br /&amp;gt;&lt;br /&gt;
if less than 0x7D00 then use the following uncompressedLength bytes from the input.&amp;lt;br /&amp;gt;&lt;br /&gt;
otherwise use the following byte from the input (uncompressedLength - 0x7D00) times.&lt;br /&gt;
|-&lt;br /&gt;
| ... || etc || continue with another &#039;uncompressedLength&#039; until the final file size is achieved (25,518 bytes), or you read a 0 uncompressedLength.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Uncompressed File Format ===&lt;br /&gt;
&lt;br /&gt;
==== FILE Format ====&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]] || mapWidth || Width of the playable area (in tiles) between 20 and 78.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || mapHeight || Height of the playable area (in tiles) between 13 and 51.&lt;br /&gt;
&lt;br /&gt;
The maximum number of tiles in a game is 1024. This places constraints on the width and height. &lt;br /&gt;
The minimum width is 20 to match the viewport size of 320 pixels, and this constrains the height to 51 (20 &amp;amp;times; 51 = 1020). &lt;br /&gt;
The minimum height is 13 to match the viewport size of 200 pixels, and this constrains the width to 78 (13 &amp;amp;times; 78 = 1014).&lt;br /&gt;
Any other combination of width and height is possible so long as it meets these constraints.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]][2][78 &amp;amp;times; 51] || tileIndex || Pairs of coordinates into a [[LBM Format]] &amp;lt;tt&amp;gt;DEC&amp;lt;/tt&amp;gt; file containing the tiles.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || decFile || The &amp;lt;tt&amp;gt;DEC&amp;lt;/tt&amp;gt; file number less one. i.e. a value of 3 indicates &amp;lt;tt&amp;gt;DECOR04.LBM&amp;lt;/tt&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || startLeft || The left of the starting position for the player character, less 8 pixels.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || startTop || The top of the starting position for the player character.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || foregroundPaletteIndex || The index of the first palette entry to be regarded as foreground.&lt;br /&gt;
&lt;br /&gt;
The palette for the &amp;lt;tt&amp;gt;DEC&amp;lt;/tt&amp;gt; file has 16 colours and they are used in a particular order. The first is always black and is background (i.e. the player character is not blocked by this colour)&lt;br /&gt;
The next 4 usually dark versions of yellow, red, green and blue and are used for the shadow colour of the player character sprite, in the 4 different forms that the player can take.&lt;br /&gt;
The next colour (colour 5 in the palette) is the bright colour of the player character, and will be swapped out as the player changes form.&lt;br /&gt;
The remaining colours a chosen to suit the needs of the stage of the game (desert, forest, mountains etc).&lt;br /&gt;
Generally the lower colours are regarded as background, and the upper colours as foreground, and this is used in the collision detection for the player and the landscape.&lt;br /&gt;
|-&lt;br /&gt;
| EXIT[5] || exit || 5 instances of a 6-byte structure describing the exits from the level.&lt;br /&gt;
|-&lt;br /&gt;
| WATER[5] || water1 || 5 instances of an 8-byte structure describing the regions of water in the level.&lt;br /&gt;
|-&lt;br /&gt;
| TELEPORT[5] || teleport || 5 instances of an 8-byte structure describing the regions of the game that can teleport the player.&lt;br /&gt;
|-&lt;br /&gt;
| NONSTICK[5] || nonStick || 5 instances of an 8-byte structure describing regions that the player cannot attach a rope to.&lt;br /&gt;
|-&lt;br /&gt;
| ACID[5] || acid || 5 instances of an 8-byte structure describing regions that will dissolve the player if touched.&lt;br /&gt;
|-&lt;br /&gt;
| DANGER[20] || danger || 20 instances of an 8-byte structure describing regions that will explode the player if touched.&lt;br /&gt;
|-&lt;br /&gt;
| SPRITE[10] || sprite || 10 instances of a 1688-byte structure describing sprites.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || blueStart || 1 if the blue form of the player is available at the start of the game.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || greenStart || 1 if the green form of the player is available at the start of the game.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || redStart || 1 if the red form of the player is available at the start of the game.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || yellowStart || 1 if the yellow form of the player is available at the start of the game.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]][12] || unknown || Purpose unknown.&lt;br /&gt;
|-&lt;br /&gt;
| FIELD[5] || redField || 5 instances of an 8-byte structure describing the particle field that enables/disables the red form of the player.&lt;br /&gt;
|-&lt;br /&gt;
| FIELD[5] || greenField || 5 instances of an 8-byte structure describing the particle field that enables/disables the green form of the player.&lt;br /&gt;
|-&lt;br /&gt;
| FIELD[5] || yellowField || 5 instances of an 8-byte structure describing the particle field that enables/disables the yellow form of the player.&lt;br /&gt;
|-&lt;br /&gt;
| FIELD[5] || blueField || 5 instances of an 8-byte structure describing the particle field that enables/disables the blue form of the player.&lt;br /&gt;
|-&lt;br /&gt;
| WATER[5] || water2 || 5 further instances of an 8-byte structure describing the regions of water in the level.&lt;br /&gt;
&lt;br /&gt;
Probably one of these 2 sets of water data describes regions that start full of water and can be emptied, and the others describe regions which start empty and can be filled. I&#039;m not sure.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]][10] || unknown || Purpose unknown.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || waterPaletteIndex || Index of colour in palette used for water.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || airPaletteIndex || Index of colour in palette used for air.&lt;br /&gt;
&lt;br /&gt;
These two palette entries can be used to modify the image as regions of water fill/empty.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || time || Amount of time the player has to complete the level. In 30ths of a second (The game plays at 30 fps).&lt;br /&gt;
|-&lt;br /&gt;
| CURRENT[5] || current || 5 instances of a 10-byte structure describing regions of air or water currents.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || motePaletteIndex || Index of colour in palette used for dust motes moving in currents.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || unknown || Purpose unknown.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || spriteMap || Index of [[LBM Format]] &amp;lt;tt&amp;gt;SPR&amp;lt;/tt&amp;gt; sprite map image to use for this level. 0 = A, 1 = B.&lt;br /&gt;
|-&lt;br /&gt;
| EXITRETURN[5] || exitReturn || 5 instances of a 4-byte structure describing where the player character should re-enter the level following a side-quest.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]][5] || exitGraphic || 5 instances of and indication of how a player is depicted exiting. 0 used for the end of the level dissolves the level viewport in a swirling vortex. 1 is smooth and is used for tunnelling in multi-map levels.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || unknown || Seems to indicate a row in the map at which some odd palette behaviour is observed. Possibly a bug, but it could be that the intention is to shift something in the colour scheme when the player is above ground / below ground.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== EXIT Format ====&lt;br /&gt;
&lt;br /&gt;
The exit region is 16 &amp;amp;times; 16 pixels.&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]] || left || Left pixel of the centre of the exit.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || top pixel of the centre of the exit.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || destination || Level number to go to next from this exit.  Also the most significant bit indicates 0 = level exit, 1 = go to side quest.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== WATER Format ====&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]] || left || Left pixel of the water region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the water region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right pixel of the water region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom pixel of the water region.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== TELEPORT Format ====&lt;br /&gt;
&lt;br /&gt;
The teleport region is 16 &amp;amp;times; 16 pixels.&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]] || srcX || Left pixel of the centre of the teleport region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || srcY || Top pixel of the centre of the teleport region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || destX || Right pixel of the centre of the teleport region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || destY || Bottom pixel of the centre of the teleport region.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== NONSTICK Format ====&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]] || left || Left pixel of the non-stick region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the non-stick region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right pixel of the non-stick region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom pixel of the non-stick region.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== ACID Format ====&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]] || left || Left pixel of the acid region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the acid region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right pixel of the acid region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom pixel of the acid region.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== DANGER Format ====&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]] || left || Left pixel of the danger region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the danger region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right pixel of the danger region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom pixel of the danger region.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== FIELD Format ====&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]] || left || Left pixel of the particle field.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the particle field.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right pixel of the particle field.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom pixel of the particle field.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== CURRENT Format ====&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]] || left || Left pixel of the current region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the current region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right pixel of the current region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom pixel of the current region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || flags || bit-0 and bit-1 : direction 00 = down, 01 = right, 10 = up, 11 = left&amp;lt;br/&amp;gt;bit-2: strength of current 0 = weak, 1 = strong&amp;lt;br/&amp;gt;bit-3: show current using dust motes 0 = no, 1 = yes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== EXITRETURN Format ====&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]] || left || Left pixel of the centre of the return region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the return region.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== SPRITE Format ====&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;}&lt;br /&gt;
! Data Type || Name || Description&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || layer || 0 = middleground (can interact with the player)&amp;lt;br/&amp;gt;1=background&amp;lt;br/&amp;gt;2=foreground (player can move behind it).&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || malevolence || Bit-0: sprite will kill player in ? form&amp;lt;br/&amp;gt;Bit-1: sprite will kill player in yellow form&amp;lt;br/&amp;gt;Bit-2: sprite will kill player in ? form&amp;lt;br/&amp;gt;Bit-3: sprite will kill player in ? form.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || unknown || Purpose unknown&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || mask || Sprite requires a mask graphic for transparency. If a mask is required, it will be immediately below the sprite tile in the &amp;lt;tt&amp;gt;SPR&amp;lt;/tt&amp;gt; file.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || cleanUp || The previous sprite image needs to be removed for each frame. This is not necessary if the sprite is unmasked and never changes position.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || strength || How much damage the sprite can sustain. 0 = infinite, otherwise 1-127.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || blastArea || Size of the explosion if the sprite is destroyed. (Purely a decorative concern, there is no splash damage).&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || active || Is the sprite in use.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]][90] || unknown || Suspect that this region is actually populated and used as working space while the level is being played. &lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || fireRate || How often the sprite fires projectiles. 0 = none, 1-5 = low-high.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || fireType || How are projectiles fired. 1 = All directions slowly, 2 = Right, 3 = Left, 4 = All directions medium, 5 = All directions fast.&lt;br /&gt;
|-&lt;br /&gt;
| STATE[10] || state || 10 instances of a 158-byte structure describing the states that the sprite can be in.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== STATE Format ====&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]] || left || Left pixel of the sprite location.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the sprite location.&lt;br /&gt;
|- &lt;br /&gt;
| [[UINT16LE]] || destState || Another state to move towards. The sprite will physically move to the location of the destination state, and change state when it reaches that location.&lt;br /&gt;
|- &lt;br /&gt;
| [[UINT16LE]] || speed || Speed of sprite movement 0 = None, 1-5 = slow-fast.&lt;br /&gt;
|- &lt;br /&gt;
| [[UINT8]] || movementType || 0 = horizontal then vertical, 1 = as the crow flies, 2 = just track player vertically, no sideways movement, 3 = just track player horizontally, no up/down movement, 4 = track player, 5 = fast move??, 6 = None.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || destWaterState || Another state to change to when a requested water level change is acheived.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || gravity || If 1, the sprite falls when unsupported.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || current || Control currents. Bits 0-4 specify currents affected, Bit-5 turns currents off, Bit-6 turns currents on.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || activateSprite || Number of another sprite to activate.&lt;br /&gt;
|-&lt;br /&gt;
| TRIGGER || entryTrigger || A 10-byte structure that describes a trigger to change state when the player enters a region.&lt;br /&gt;
|- &lt;br /&gt;
| TRIGGER || exitTrigger || A 10-byte structure that describes a trigger to change state when the player leaves a region.&lt;br /&gt;
|-&lt;br /&gt;
| TRIGGER || spriteEntryTrigger || A 10-byte structure that describes a trigger to change state when another sprite enters a region.&lt;br /&gt;
|-&lt;br /&gt;
| TRIGGER || spriteExitTrigger || A 10-byte structure that describes a trigger to change state when another sprite leaves a region (or is destroyed).&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || destroy || The sprite is destroyed (deactivated) when it enters this state.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || bounce || The sprite bounces ballistically when it hits a surface.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || emptyWater || Bits 0-7 speed of emptying, Bits 8-15 number of water region to empty.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || fillWater || Bits 0-7 speed of filling, Bits 8-15 number of water region to fill.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]][4] || unknown || Seems to affect the starting location of projectiles, relative to the sprite location.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || waterTriggerLeft || Left pixel of region for water trigger (see destWaterState field).&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || waterTriggerTop || Top pixel of region for water trigger.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || waterTriggerRight || Right pixel of region for water trigger.&lt;br /&gt;
|-&lt;br /&gt;
| FRAME[10] || frame || 10 instances of an 8-byte structure describing the sprite tile location within the &amp;lt;tt&amp;gt;SPR&amp;lt;/tt&amp;gt; image file&lt;br /&gt;
|- &lt;br /&gt;
| [[UINT16LE]] || animSpeed || Rate of frame change of sprite animation.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || cycle || Does the animation cycle repeat.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || cycleCount || Number of animation frames before changing state.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || animTriggerState || Sprite state to move to when cycleCount is reached.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || waterTriggerBottom || Bottom pixel of region for water trigger.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== TRIGGER Format ====&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]] || state || State to move to when triggered.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || left || Left pixel of the trigger region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the trigger region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right pixel of the trigger region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom pixel of the trigger region.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== FRAME Format ====&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]] || left || Left pixel of the sprite on the &amp;lt;tt&amp;gt;SPR&amp;lt;/tt&amp;gt; image file.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the sprite on the &amp;lt;tt&amp;gt;SPR&amp;lt;/tt&amp;gt; image file.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right pixel of the sprite on the &amp;lt;tt&amp;gt;SPR&amp;lt;/tt&amp;gt; image file.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom pixel of the sprite on the &amp;lt;tt&amp;gt;SPR&amp;lt;/tt&amp;gt; image file.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
There are 10 different stages in the game, and correspondingly 10 different tile and sprite sets. &lt;br /&gt;
&lt;br /&gt;
The tile images for the backgrounds and landscape are stored in the &amp;lt;tt&amp;gt;DEC&amp;lt;/tt&amp;gt; directory, in image files which are in [[LBM Format]]. These files are named &amp;lt;tt&amp;gt;DECORxx.LBM&amp;lt;/tt&amp;gt; where xx is specified by the decFile field of the main structure.&lt;br /&gt;
&lt;br /&gt;
The sprite images are stored in the &amp;lt;tt&amp;gt;SPR&amp;lt;/tt&amp;gt; directory, in image files which are in [[LBM Format]]. These files are named &amp;lt;tt&amp;gt;SPRxxn&amp;lt;/tt&amp;gt; where xx is specified by the decFile field of the main structure, and n is specified by the spriteMap field in the main structure.&lt;br /&gt;
&lt;br /&gt;
The sprites can be of varying sizes, the FRAME data structure describes the bounding box in pixels within the sprite image file. If the sprite requires a transparency mask, then this mask will be a rectangular region with the same size as the sprite, and placed in the image file immediately below the sprite.&lt;br /&gt;
&lt;br /&gt;
Within the tile image file, all the tiles are 16 &amp;amp;times; 16 pixels, tiles are referenced in the main file structure as a pair of byte coordinates, giving the X and Y position in tiles within the image file.&lt;br /&gt;
&lt;br /&gt;
Certain tiles in the image file have special meaning.&lt;br /&gt;
&lt;br /&gt;
The tile at 0,1 is a coin. If the player touches this tile in the level, they will gain a coin, and the tile will be swapped out for the tile at 0,0 which is always empty.&lt;br /&gt;
&lt;br /&gt;
The tile at 0,2 is an extra life. If the player touches this tile in the level, they will gain an extra life, and the tile will be swapped out for the tile at 0,0.&lt;br /&gt;
&lt;br /&gt;
The tile at 0,3 is a time extension. If the player touches this tile in the level, they will gain an extra 30 seconds on the clock, and the tile will be swapped out for the tile at 0,0.&lt;br /&gt;
&lt;br /&gt;
All the remaining tiles on rows 0, 1 and 2 in the map are destructible tiles. The red form of the player can chew through the scenery. Chewing a tile from row 0 will cause that tile to be swapped out with the tile immediately below it in row 1. Chewing a tile from row 1 will cause that tile to be swapped out with the tile immediately below it in row 2. Chewing a tile from row 2 will cause that tile to be swapped out with the tile at 0,0, which is empty, so the player can then get through the gap created. Typically the tiles in these rows depict a gradually degraded state, you can have tiles that require more or less action to destroy them, by choosing from the three rows. Often the top row tiles are visually indistinguishable from some other non-destructible tiles in the tileset, allowing you to hide destructible tiles.&lt;br /&gt;
&lt;br /&gt;
== Credits ==&lt;br /&gt;
&lt;br /&gt;
This file format was reverse engineered by [[User:Carbon14|carbon14]]. 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>Carbon14</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=File:BIN_Format_(Fury_of_the_Furries).png&amp;diff=11092</id>
		<title>File:BIN Format (Fury of the Furries).png</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=File:BIN_Format_(Fury_of_the_Furries).png&amp;diff=11092"/>
		<updated>2023-07-05T13:57:17Z</updated>

		<summary type="html">&lt;p&gt;Carbon14: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Carbon14</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=BIN_Format_(Fury_of_the_Furries)&amp;diff=11091</id>
		<title>BIN Format (Fury of the Furries)</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=BIN_Format_(Fury_of_the_Furries)&amp;diff=11091"/>
		<updated>2023-07-03T15:14:38Z</updated>

		<summary type="html">&lt;p&gt;Carbon14: /* RLE Compressed File Format */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Map Infobox&lt;br /&gt;
 | Type = 2D tile-based&lt;br /&gt;
 | Layers = 3&lt;br /&gt;
 | Tile size = 16&amp;amp;times;16&lt;br /&gt;
 | Viewport = 320&amp;amp;times;200&lt;br /&gt;
 | Games = &lt;br /&gt;
  {{Game|Fury of the Furries}}&lt;br /&gt;
  {{Game|Pac-In-Time}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Fury of the Furries]] maps contain the static background and landscape for the level, collectable coins, time extensions and extra lives and destructible bricks. They also contain the &#039;scripting for the game play itself&#039;, this is in the form of the definitions of the sprites that interact with the player character. There are up to 10 sprites in the level, each having up to 10 states. Triggers are defined for switching between states, and for the player and or sprites to switch on or off other game-play elements.&lt;br /&gt;
&lt;br /&gt;
The file itself is run-length encoded, and after decompression is always a fixed length. Generally unused elements within the game are marked by the [[UINT16LE]] value 0xFFFF.&lt;br /&gt;
&lt;br /&gt;
== File Formats ==&lt;br /&gt;
&lt;br /&gt;
=== RLE Compressed File Format ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Data Type || Name || Description&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT32LE]] || unknown || Unknown, but possibly a format identifier, most often &amp;lt;tt&amp;gt;byt4&amp;lt;/tt&amp;gt;. Sometimes &amp;lt;tt&amp;gt;byt3&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;byt1&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;byte&amp;lt;/tt&amp;gt; is seen.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || uncompressedLength || Number of bytes in section.&amp;lt;br /&amp;gt;&lt;br /&gt;
if zero then stop decompressing.&amp;lt;br /&amp;gt;&lt;br /&gt;
if less than 0x7D00 then use the following uncompressedLength bytes from the input.&amp;lt;br /&amp;gt;&lt;br /&gt;
otherwise use the following byte from the input (uncompressedLength - 0x7D00) times.&lt;br /&gt;
|-&lt;br /&gt;
| ... || etc || continue with another &#039;uncompressedLength&#039; until the final file size is achieved (25,518 bytes), or you read a 0 uncompressedLength.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Uncompressed File Format ===&lt;br /&gt;
&lt;br /&gt;
==== FILE Format ====&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]] || mapWidth || Width of the playable area (in tiles) between 20 and 78.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || mapHeight || Height of the playable area (in tiles) between 13 and 51.&lt;br /&gt;
&lt;br /&gt;
The maximum number of tiles in a game is 1024. This places constraints on the width and height. &lt;br /&gt;
The minimum width is 20 to match the viewport size of 320 pixels, and this constrains the height to 51 (20 &amp;amp;times; 51 = 1020). &lt;br /&gt;
The minimum height is 13 to match the viewport size of 200 pixels, and this constrains the width to 78 (13 &amp;amp;times; 78 = 1014).&lt;br /&gt;
Any other combination of width and height is possible so long as it meets these constraints.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]][2][78 &amp;amp;times; 51] || tileIndex || Pairs of coordinates into a [[LBM Format]] &amp;lt;tt&amp;gt;DEC&amp;lt;/tt&amp;gt; file containing the tiles.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || decFile || The &amp;lt;tt&amp;gt;DEC&amp;lt;/tt&amp;gt; file number less one. i.e. a value of 3 indicates &amp;lt;tt&amp;gt;DECOR04.LBM&amp;lt;/tt&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || startLeft || The left of the starting position for the player character, less 8 pixels.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || startTop || The top of the starting position for the player character.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || foregroundPaletteIndex || The index of the first palette entry to be regarded as foreground.&lt;br /&gt;
&lt;br /&gt;
The palette for the &amp;lt;tt&amp;gt;DEC&amp;lt;/tt&amp;gt; file has 16 colours and they are used in a particular order. The first is always black and is background (i.e. the player character is not blocked by this colour)&lt;br /&gt;
The next 4 usually dark versions of yellow, red, green and blue and are used for the shadow colour of the player character sprite, in the 4 different forms that the player can take.&lt;br /&gt;
The next colour (colour 5 in the palette) is the bright colour of the player character, and will be swapped out as the player changes form.&lt;br /&gt;
The remaining colours a chosen to suit the needs of the stage of the game (desert, forest, mountains etc).&lt;br /&gt;
Generally the lower colours are regarded as background, and the upper colours as foreground, and this is used in the collision detection for the player and the landscape.&lt;br /&gt;
|-&lt;br /&gt;
| EXIT[5] || exit || 5 instances of a 6-byte structure describing the exits from the level.&lt;br /&gt;
|-&lt;br /&gt;
| WATER[5] || water1 || 5 instances of an 8-byte structure describing the regions of water in the level.&lt;br /&gt;
|-&lt;br /&gt;
| TELEPORT[5] || teleport || 5 instances of an 8-byte structure describing the regions of the game that can teleport the player.&lt;br /&gt;
|-&lt;br /&gt;
| NONSTICK[5] || nonStick || 5 instances of an 8-byte structure describing regions that the player cannot attach a rope to.&lt;br /&gt;
|-&lt;br /&gt;
| ACID[5] || acid || 5 instances of an 8-byte structure describing regions that will dissolve the player if touched.&lt;br /&gt;
|-&lt;br /&gt;
| DANGER[20] || danger || 20 instances of an 8-byte structure describing regions that will explode the player if touched.&lt;br /&gt;
|-&lt;br /&gt;
| SPRITE[10] || sprite || 10 instances of a 1688-byte structure describing sprites.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || blueStart || 1 if the blue form of the player is available at the start of the game.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || greenStart || 1 if the green form of the player is available at the start of the game.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || redStart || 1 if the red form of the player is available at the start of the game.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || yellowStart || 1 if the yellow form of the player is available at the start of the game.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]][12] || unknown || Purpose unknown.&lt;br /&gt;
|-&lt;br /&gt;
| FIELD[5] || redField || 5 instances of an 8-byte structure describing the particle field that enables/disables the red form of the player.&lt;br /&gt;
|-&lt;br /&gt;
| FIELD[5] || greenField || 5 instances of an 8-byte structure describing the particle field that enables/disables the green form of the player.&lt;br /&gt;
|-&lt;br /&gt;
| FIELD[5] || yellowField || 5 instances of an 8-byte structure describing the particle field that enables/disables the yellow form of the player.&lt;br /&gt;
|-&lt;br /&gt;
| FIELD[5] || blueField || 5 instances of an 8-byte structure describing the particle field that enables/disables the blue form of the player.&lt;br /&gt;
|-&lt;br /&gt;
| WATER[5] || water2 || 5 further instances of an 8-byte structure describing the regions of water in the level.&lt;br /&gt;
&lt;br /&gt;
Probably one of these 2 sets of water data describes regions that start full of water and can be emptied, and the others describe regions which start empty and can be filled. I&#039;m not sure.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]][10] || unknown || Purpose unknown.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || waterPaletteIndex || Index of colour in palette used for water.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || airPaletteIndex || Index of colour in palette used for air.&lt;br /&gt;
&lt;br /&gt;
These two palette entries can be used to modify the image as regions of water fill/empty.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || time || Amount of time the player has to complete the level. In 30ths of a second (The game plays at 30 fps).&lt;br /&gt;
|-&lt;br /&gt;
| CURRENT[5] || current || 5 instances of a 10-byte structure describing regions of air or water currents.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || motePaletteIndex || Index of colour in palette used for dust motes moving in currents.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || unknown || Purpose unknown.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || spriteMap || Index of [[LBM Format]] &amp;lt;tt&amp;gt;SPR&amp;lt;/tt&amp;gt; sprite map image to use for this level. 0 = A, 1 = B.&lt;br /&gt;
|-&lt;br /&gt;
| EXITRETURN[5] || exitReturn || 5 instances of a 4-byte structure describing where the player character should re-enter the level following a side-quest.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]][5] || exitGraphic || 5 instances of and indication of how a player is depicted exiting. 0 used for the end of the level dissolves the level viewport in a swirling vortex. 1 is smooth and is used for tunnelling in multi-map levels.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || unknown || Seems to indicate a row in the map at which some odd palette behaviour is observed. Possibly a bug, but it could be that the intention is to shift something in the colour scheme when the player is above ground / below ground.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== EXIT Format ====&lt;br /&gt;
&lt;br /&gt;
The exit region is 16 &amp;amp;times; 16 pixels.&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]] || left || Left pixel of the centre of the exit.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || top pixel of the centre of the exit.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || destination || Level number to go to next from this exit.  Also the most significant bit indicates 0 = level exit, 1 = go to side quest.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== WATER Format ====&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]] || left || Left pixel of the water region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the water region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right pixel of the water region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom pixel of the water region.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== TELEPORT Format ====&lt;br /&gt;
&lt;br /&gt;
The teleport region is 16 &amp;amp;times; 16 pixels.&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]] || srcX || Left pixel of the centre of the teleport region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || srcY || Top pixel of the centre of the teleport region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || destX || Right pixel of the centre of the teleport region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || destY || Bottom pixel of the centre of the teleport region.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== NONSTICK Format ====&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]] || left || Left pixel of the non-stick region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the non-stick region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right pixel of the non-stick region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom pixel of the non-stick region.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== ACID Format ====&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]] || left || Left pixel of the acid region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the acid region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right pixel of the acid region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom pixel of the acid region.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== DANGER Format ====&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]] || left || Left pixel of the danger region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the danger region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right pixel of the danger region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom pixel of the danger region.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== FIELD Format ====&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]] || left || Left pixel of the particle field.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the particle field.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right pixel of the particle field.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom pixel of the particle field.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== CURRENT Format ====&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]] || left || Left pixel of the current region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the current region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right pixel of the current region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom pixel of the current region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || flags || bit-0 and bit-1 : direction 00 = down, 01 = right, 10 = up, 11 = left&amp;lt;br/&amp;gt;bit-2: strength of current 0 = weak, 1 = strong&amp;lt;br/&amp;gt;bit-3: show current using dust motes 0 = no, 1 = yes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== EXITRETURN Format ====&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]] || left || Left pixel of the centre of the return region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the return region.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== SPRITE Format ====&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;}&lt;br /&gt;
! Data Type || Name || Description&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || layer || 0 = middleground (can interact with the player)&amp;lt;br/&amp;gt;1=background&amp;lt;br/&amp;gt;2=foreground (player can move behind it).&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || malevolence || Bit-0: sprite will kill player in ? form&amp;lt;br/&amp;gt;Bit-1: sprite will kill player in yellow form&amp;lt;br/&amp;gt;Bit-2: sprite will kill player in ? form&amp;lt;br/&amp;gt;Bit-3: sprite will kill player in ? form.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || unknown || Purpose unknown&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || mask || Sprite requires a mask graphic for transparency. If a mask is required, it will be immediately below the sprite tile in the &amp;lt;tt&amp;gt;SPR&amp;lt;/tt&amp;gt; file.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || cleanUp || The previous sprite image needs to be removed for each frame. This is not necessary if the sprite is unmasked and never changes position.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || strength || How much damage the sprite can sustain. 0 = infinite, otherwise 1-127.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || blastArea || Size of the explosion if the sprite is destroyed. (Purely a decorative concern, there is no splash damage).&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || active || Is the sprite in use.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]][90] || unknown || Suspect that this region is actually populated and used as working space while the level is being played. &lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || fireRate || How often the sprite fires projectiles. 0 = none, 1-5 = low-high.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || fireType || How are projectiles fired. 1 = All directions slowly, 2 = Right, 3 = Left, 4 = All directions medium, 5 = All directions fast.&lt;br /&gt;
|-&lt;br /&gt;
| STATE[10] || state || 10 instances of a 158-byte structure describing the states that the sprite can be in.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== STATE Format ====&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]] || left || Left pixel of the sprite location.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the sprite location.&lt;br /&gt;
|- &lt;br /&gt;
| [[UINT16LE]] || destState || Another state to move towards. The sprite will physically move to the location of the destination state, and change state when it reaches that location.&lt;br /&gt;
|- &lt;br /&gt;
| [[UINT16LE]] || speed || Speed of sprite movement 0 = None, 1-5 = slow-fast.&lt;br /&gt;
|- &lt;br /&gt;
| [[UINT8]] || movementType || 0 = horizontal then vertical, 1 = as the crow flies, 2 = just track player vertically, no sideways movement, 3 = just track player horizontally, no up/down movement, 4 = track player, 5 = fast move??, 6 = None.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || destWaterState || Another state to change to when a requested water level change is acheived.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || gravity || If 1, the sprite falls when unsupported.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || current || Control currents. Bits 0-4 specify currents affected, Bit-5 turns currents off, Bit-6 turns currents on.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || activateSprite || Number of another sprite to activate.&lt;br /&gt;
|-&lt;br /&gt;
| TRIGGER || entryTrigger || A 10-byte structure that describes a trigger to change state when the player enters a region.&lt;br /&gt;
|- &lt;br /&gt;
| TRIGGER || exitTrigger || A 10-byte structure that describes a trigger to change state when the player leaves a region.&lt;br /&gt;
|-&lt;br /&gt;
| TRIGGER || spriteEntryTrigger || A 10-byte structure that describes a trigger to change state when another sprite enters a region.&lt;br /&gt;
|-&lt;br /&gt;
| TRIGGER || spriteExitTrigger || A 10-byte structure that describes a trigger to change state when another sprite leaves a region (or is destroyed).&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || destroy || The sprite is destroyed (deactivated) when it enters this state.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || bounce || The sprite bounces ballistically when it hits a surface.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || emptyWater || Bits 0-7 speed of emptying, Bits 8-15 number of water region to empty.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || fillWater || Bits 0-7 speed of filling, Bits 8-15 number of water region to fill.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]][4] || unknown || Seems to affect the starting location of projectiles, relative to the sprite location.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || waterTriggerLeft || Left pixel of region for water trigger (see destWaterState field).&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || waterTriggerTop || Top pixel of region for water trigger.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || waterTriggerRight || Right pixel of region for water trigger.&lt;br /&gt;
|-&lt;br /&gt;
| FRAME[10] || frame || 10 instances of an 8-byte structure describing the sprite tile location within the &amp;lt;tt&amp;gt;SPR&amp;lt;/tt&amp;gt; image file&lt;br /&gt;
|- &lt;br /&gt;
| [[UINT16LE]] || animSpeed || Rate of frame change of sprite animation.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || cycle || Does the animation cycle repeat.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || cycleCount || Number of animation frames before changing state.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || animTriggerState || Sprite state to move to when cycleCount is reached.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || waterTriggerBottom || Bottom pixel of region for water trigger.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== TRIGGER Format ====&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]] || state || State to move to when triggered.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || left || Left pixel of the trigger region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the trigger region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right pixel of the trigger region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom pixel of the trigger region.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== FRAME Format ====&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]] || left || Left pixel of the sprite on the &amp;lt;tt&amp;gt;SPR&amp;lt;/tt&amp;gt; image file.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the sprite on the &amp;lt;tt&amp;gt;SPR&amp;lt;/tt&amp;gt; image file.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right pixel of the sprite on the &amp;lt;tt&amp;gt;SPR&amp;lt;/tt&amp;gt; image file.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom pixel of the sprite on the &amp;lt;tt&amp;gt;SPR&amp;lt;/tt&amp;gt; image file.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
There are 10 different stages in the game, and correspondingly 10 different tile and sprite sets. &lt;br /&gt;
&lt;br /&gt;
The tile images for the backgrounds and landscape are stored in the &amp;lt;tt&amp;gt;DEC&amp;lt;/tt&amp;gt; directory, in image files which are in [[LBM Format]]. These files are named &amp;lt;tt&amp;gt;DECORxx.LBM&amp;lt;/tt&amp;gt; where xx is specified by the decFile field of the main structure.&lt;br /&gt;
&lt;br /&gt;
The sprite images are stored in the &amp;lt;tt&amp;gt;SPR&amp;lt;/tt&amp;gt; directory, in image files which are in [[LBM Format]]. These files are named &amp;lt;tt&amp;gt;SPRxxn&amp;lt;/tt&amp;gt; where xx is specified by the decFile field of the main structure, and n is specified by the spriteMap field in the main structure.&lt;br /&gt;
&lt;br /&gt;
The sprites can be of varying sizes, the FRAME data structure describes the bounding box in pixels within the sprite image file. If the sprite requires a transparency mask, then this mask will be a rectangular region with the same size as the sprite, and placed in the image file immediately below the sprite.&lt;br /&gt;
&lt;br /&gt;
Within the tile image file, all the tiles are 16 &amp;amp;times; 16 pixels, tiles are referenced in the main file structure as a pair of byte coordinates, giving the X and Y position in tiles within the image file.&lt;br /&gt;
&lt;br /&gt;
Certain tiles in the image file have special meaning.&lt;br /&gt;
&lt;br /&gt;
The tile at 0,1 is a coin. If the player touches this tile in the level, they will gain a coin, and the tile will be swapped out for the tile at 0,0 which is always empty.&lt;br /&gt;
&lt;br /&gt;
The tile at 0,2 is an extra life. If the player touches this tile in the level, they will gain an extra life, and the tile will be swapped out for the tile at 0,0.&lt;br /&gt;
&lt;br /&gt;
The tile at 0,3 is a time extension. If the player touches this tile in the level, they will gain an extra 30 seconds on the clock, and the tile will be swapped out for the tile at 0,0.&lt;br /&gt;
&lt;br /&gt;
All the remaining tiles on rows 0, 1 and 2 in the map are destructible tiles. The red form of the player can chew through the scenery. Chewing a tile from row 0 will cause that tile to be swapped out with the tile immediately below it in row 1. Chewing a tile from row 1 will cause that tile to be swapped out with the tile immediately below it in row 2. Chewing a tile from row 2 will cause that tile to be swapped out with the tile at 0,0, which is empty, so the player can then get through the gap created. Typically the tiles in these rows depict a gradually degraded state, you can have tiles that require more or less action to destroy them, by choosing from the three rows. Often the top row tiles are visually indistinguishable from some other non-destructible tiles in the tileset, allowing you to hide destructible tiles.&lt;br /&gt;
&lt;br /&gt;
== Credits ==&lt;br /&gt;
&lt;br /&gt;
This file format was reverse engineered by [[User:Carbon14|carbon14]]. 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>Carbon14</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=BIN_Format_(Fury_of_the_Furries)&amp;diff=11090</id>
		<title>BIN Format (Fury of the Furries)</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=BIN_Format_(Fury_of_the_Furries)&amp;diff=11090"/>
		<updated>2023-07-03T15:13:36Z</updated>

		<summary type="html">&lt;p&gt;Carbon14: /* RLE Compressed File Format */  Correct error in compressed format description&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Map Infobox&lt;br /&gt;
 | Type = 2D tile-based&lt;br /&gt;
 | Layers = 3&lt;br /&gt;
 | Tile size = 16&amp;amp;times;16&lt;br /&gt;
 | Viewport = 320&amp;amp;times;200&lt;br /&gt;
 | Games = &lt;br /&gt;
  {{Game|Fury of the Furries}}&lt;br /&gt;
  {{Game|Pac-In-Time}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Fury of the Furries]] maps contain the static background and landscape for the level, collectable coins, time extensions and extra lives and destructible bricks. They also contain the &#039;scripting for the game play itself&#039;, this is in the form of the definitions of the sprites that interact with the player character. There are up to 10 sprites in the level, each having up to 10 states. Triggers are defined for switching between states, and for the player and or sprites to switch on or off other game-play elements.&lt;br /&gt;
&lt;br /&gt;
The file itself is run-length encoded, and after decompression is always a fixed length. Generally unused elements within the game are marked by the [[UINT16LE]] value 0xFFFF.&lt;br /&gt;
&lt;br /&gt;
== File Formats ==&lt;br /&gt;
&lt;br /&gt;
=== RLE Compressed File Format ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Data Type || Name || Description&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT32LE]] || unknown || Unknown, but possibly a format identifier, most often &amp;lt;tt&amp;gt;byt4&amp;lt;/tt&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || uncompressedLength || Number of bytes in section.&amp;lt;br /&amp;gt;&lt;br /&gt;
if zero then stop decompressing.&amp;lt;br /&amp;gt;&lt;br /&gt;
if less than 0x7D00 then use the following uncompressedLength bytes from the input.&amp;lt;br /&amp;gt;&lt;br /&gt;
otherwise use the following byte from the input (uncompressedLength - 0x7D00) times.&lt;br /&gt;
|-&lt;br /&gt;
| ... || etc || continue with another &#039;uncompressedLength&#039; until the final file size is achieved (25,518 bytes), or you read a 0 uncompressedLength.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Uncompressed File Format ===&lt;br /&gt;
&lt;br /&gt;
==== FILE Format ====&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]] || mapWidth || Width of the playable area (in tiles) between 20 and 78.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || mapHeight || Height of the playable area (in tiles) between 13 and 51.&lt;br /&gt;
&lt;br /&gt;
The maximum number of tiles in a game is 1024. This places constraints on the width and height. &lt;br /&gt;
The minimum width is 20 to match the viewport size of 320 pixels, and this constrains the height to 51 (20 &amp;amp;times; 51 = 1020). &lt;br /&gt;
The minimum height is 13 to match the viewport size of 200 pixels, and this constrains the width to 78 (13 &amp;amp;times; 78 = 1014).&lt;br /&gt;
Any other combination of width and height is possible so long as it meets these constraints.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]][2][78 &amp;amp;times; 51] || tileIndex || Pairs of coordinates into a [[LBM Format]] &amp;lt;tt&amp;gt;DEC&amp;lt;/tt&amp;gt; file containing the tiles.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || decFile || The &amp;lt;tt&amp;gt;DEC&amp;lt;/tt&amp;gt; file number less one. i.e. a value of 3 indicates &amp;lt;tt&amp;gt;DECOR04.LBM&amp;lt;/tt&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || startLeft || The left of the starting position for the player character, less 8 pixels.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || startTop || The top of the starting position for the player character.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || foregroundPaletteIndex || The index of the first palette entry to be regarded as foreground.&lt;br /&gt;
&lt;br /&gt;
The palette for the &amp;lt;tt&amp;gt;DEC&amp;lt;/tt&amp;gt; file has 16 colours and they are used in a particular order. The first is always black and is background (i.e. the player character is not blocked by this colour)&lt;br /&gt;
The next 4 usually dark versions of yellow, red, green and blue and are used for the shadow colour of the player character sprite, in the 4 different forms that the player can take.&lt;br /&gt;
The next colour (colour 5 in the palette) is the bright colour of the player character, and will be swapped out as the player changes form.&lt;br /&gt;
The remaining colours a chosen to suit the needs of the stage of the game (desert, forest, mountains etc).&lt;br /&gt;
Generally the lower colours are regarded as background, and the upper colours as foreground, and this is used in the collision detection for the player and the landscape.&lt;br /&gt;
|-&lt;br /&gt;
| EXIT[5] || exit || 5 instances of a 6-byte structure describing the exits from the level.&lt;br /&gt;
|-&lt;br /&gt;
| WATER[5] || water1 || 5 instances of an 8-byte structure describing the regions of water in the level.&lt;br /&gt;
|-&lt;br /&gt;
| TELEPORT[5] || teleport || 5 instances of an 8-byte structure describing the regions of the game that can teleport the player.&lt;br /&gt;
|-&lt;br /&gt;
| NONSTICK[5] || nonStick || 5 instances of an 8-byte structure describing regions that the player cannot attach a rope to.&lt;br /&gt;
|-&lt;br /&gt;
| ACID[5] || acid || 5 instances of an 8-byte structure describing regions that will dissolve the player if touched.&lt;br /&gt;
|-&lt;br /&gt;
| DANGER[20] || danger || 20 instances of an 8-byte structure describing regions that will explode the player if touched.&lt;br /&gt;
|-&lt;br /&gt;
| SPRITE[10] || sprite || 10 instances of a 1688-byte structure describing sprites.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || blueStart || 1 if the blue form of the player is available at the start of the game.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || greenStart || 1 if the green form of the player is available at the start of the game.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || redStart || 1 if the red form of the player is available at the start of the game.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || yellowStart || 1 if the yellow form of the player is available at the start of the game.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]][12] || unknown || Purpose unknown.&lt;br /&gt;
|-&lt;br /&gt;
| FIELD[5] || redField || 5 instances of an 8-byte structure describing the particle field that enables/disables the red form of the player.&lt;br /&gt;
|-&lt;br /&gt;
| FIELD[5] || greenField || 5 instances of an 8-byte structure describing the particle field that enables/disables the green form of the player.&lt;br /&gt;
|-&lt;br /&gt;
| FIELD[5] || yellowField || 5 instances of an 8-byte structure describing the particle field that enables/disables the yellow form of the player.&lt;br /&gt;
|-&lt;br /&gt;
| FIELD[5] || blueField || 5 instances of an 8-byte structure describing the particle field that enables/disables the blue form of the player.&lt;br /&gt;
|-&lt;br /&gt;
| WATER[5] || water2 || 5 further instances of an 8-byte structure describing the regions of water in the level.&lt;br /&gt;
&lt;br /&gt;
Probably one of these 2 sets of water data describes regions that start full of water and can be emptied, and the others describe regions which start empty and can be filled. I&#039;m not sure.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]][10] || unknown || Purpose unknown.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || waterPaletteIndex || Index of colour in palette used for water.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || airPaletteIndex || Index of colour in palette used for air.&lt;br /&gt;
&lt;br /&gt;
These two palette entries can be used to modify the image as regions of water fill/empty.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || time || Amount of time the player has to complete the level. In 30ths of a second (The game plays at 30 fps).&lt;br /&gt;
|-&lt;br /&gt;
| CURRENT[5] || current || 5 instances of a 10-byte structure describing regions of air or water currents.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || motePaletteIndex || Index of colour in palette used for dust motes moving in currents.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || unknown || Purpose unknown.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || spriteMap || Index of [[LBM Format]] &amp;lt;tt&amp;gt;SPR&amp;lt;/tt&amp;gt; sprite map image to use for this level. 0 = A, 1 = B.&lt;br /&gt;
|-&lt;br /&gt;
| EXITRETURN[5] || exitReturn || 5 instances of a 4-byte structure describing where the player character should re-enter the level following a side-quest.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]][5] || exitGraphic || 5 instances of and indication of how a player is depicted exiting. 0 used for the end of the level dissolves the level viewport in a swirling vortex. 1 is smooth and is used for tunnelling in multi-map levels.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || unknown || Seems to indicate a row in the map at which some odd palette behaviour is observed. Possibly a bug, but it could be that the intention is to shift something in the colour scheme when the player is above ground / below ground.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== EXIT Format ====&lt;br /&gt;
&lt;br /&gt;
The exit region is 16 &amp;amp;times; 16 pixels.&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]] || left || Left pixel of the centre of the exit.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || top pixel of the centre of the exit.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || destination || Level number to go to next from this exit.  Also the most significant bit indicates 0 = level exit, 1 = go to side quest.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== WATER Format ====&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]] || left || Left pixel of the water region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the water region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right pixel of the water region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom pixel of the water region.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== TELEPORT Format ====&lt;br /&gt;
&lt;br /&gt;
The teleport region is 16 &amp;amp;times; 16 pixels.&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]] || srcX || Left pixel of the centre of the teleport region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || srcY || Top pixel of the centre of the teleport region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || destX || Right pixel of the centre of the teleport region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || destY || Bottom pixel of the centre of the teleport region.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== NONSTICK Format ====&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]] || left || Left pixel of the non-stick region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the non-stick region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right pixel of the non-stick region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom pixel of the non-stick region.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== ACID Format ====&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]] || left || Left pixel of the acid region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the acid region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right pixel of the acid region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom pixel of the acid region.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== DANGER Format ====&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]] || left || Left pixel of the danger region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the danger region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right pixel of the danger region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom pixel of the danger region.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== FIELD Format ====&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]] || left || Left pixel of the particle field.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the particle field.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right pixel of the particle field.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom pixel of the particle field.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== CURRENT Format ====&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]] || left || Left pixel of the current region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the current region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right pixel of the current region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom pixel of the current region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || flags || bit-0 and bit-1 : direction 00 = down, 01 = right, 10 = up, 11 = left&amp;lt;br/&amp;gt;bit-2: strength of current 0 = weak, 1 = strong&amp;lt;br/&amp;gt;bit-3: show current using dust motes 0 = no, 1 = yes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== EXITRETURN Format ====&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]] || left || Left pixel of the centre of the return region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the return region.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== SPRITE Format ====&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;}&lt;br /&gt;
! Data Type || Name || Description&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || layer || 0 = middleground (can interact with the player)&amp;lt;br/&amp;gt;1=background&amp;lt;br/&amp;gt;2=foreground (player can move behind it).&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || malevolence || Bit-0: sprite will kill player in ? form&amp;lt;br/&amp;gt;Bit-1: sprite will kill player in yellow form&amp;lt;br/&amp;gt;Bit-2: sprite will kill player in ? form&amp;lt;br/&amp;gt;Bit-3: sprite will kill player in ? form.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || unknown || Purpose unknown&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || mask || Sprite requires a mask graphic for transparency. If a mask is required, it will be immediately below the sprite tile in the &amp;lt;tt&amp;gt;SPR&amp;lt;/tt&amp;gt; file.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || cleanUp || The previous sprite image needs to be removed for each frame. This is not necessary if the sprite is unmasked and never changes position.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || strength || How much damage the sprite can sustain. 0 = infinite, otherwise 1-127.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || blastArea || Size of the explosion if the sprite is destroyed. (Purely a decorative concern, there is no splash damage).&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || active || Is the sprite in use.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]][90] || unknown || Suspect that this region is actually populated and used as working space while the level is being played. &lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || fireRate || How often the sprite fires projectiles. 0 = none, 1-5 = low-high.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || fireType || How are projectiles fired. 1 = All directions slowly, 2 = Right, 3 = Left, 4 = All directions medium, 5 = All directions fast.&lt;br /&gt;
|-&lt;br /&gt;
| STATE[10] || state || 10 instances of a 158-byte structure describing the states that the sprite can be in.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== STATE Format ====&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]] || left || Left pixel of the sprite location.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the sprite location.&lt;br /&gt;
|- &lt;br /&gt;
| [[UINT16LE]] || destState || Another state to move towards. The sprite will physically move to the location of the destination state, and change state when it reaches that location.&lt;br /&gt;
|- &lt;br /&gt;
| [[UINT16LE]] || speed || Speed of sprite movement 0 = None, 1-5 = slow-fast.&lt;br /&gt;
|- &lt;br /&gt;
| [[UINT8]] || movementType || 0 = horizontal then vertical, 1 = as the crow flies, 2 = just track player vertically, no sideways movement, 3 = just track player horizontally, no up/down movement, 4 = track player, 5 = fast move??, 6 = None.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || destWaterState || Another state to change to when a requested water level change is acheived.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || gravity || If 1, the sprite falls when unsupported.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || current || Control currents. Bits 0-4 specify currents affected, Bit-5 turns currents off, Bit-6 turns currents on.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || activateSprite || Number of another sprite to activate.&lt;br /&gt;
|-&lt;br /&gt;
| TRIGGER || entryTrigger || A 10-byte structure that describes a trigger to change state when the player enters a region.&lt;br /&gt;
|- &lt;br /&gt;
| TRIGGER || exitTrigger || A 10-byte structure that describes a trigger to change state when the player leaves a region.&lt;br /&gt;
|-&lt;br /&gt;
| TRIGGER || spriteEntryTrigger || A 10-byte structure that describes a trigger to change state when another sprite enters a region.&lt;br /&gt;
|-&lt;br /&gt;
| TRIGGER || spriteExitTrigger || A 10-byte structure that describes a trigger to change state when another sprite leaves a region (or is destroyed).&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || destroy || The sprite is destroyed (deactivated) when it enters this state.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || bounce || The sprite bounces ballistically when it hits a surface.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || emptyWater || Bits 0-7 speed of emptying, Bits 8-15 number of water region to empty.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || fillWater || Bits 0-7 speed of filling, Bits 8-15 number of water region to fill.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]][4] || unknown || Seems to affect the starting location of projectiles, relative to the sprite location.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || waterTriggerLeft || Left pixel of region for water trigger (see destWaterState field).&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || waterTriggerTop || Top pixel of region for water trigger.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || waterTriggerRight || Right pixel of region for water trigger.&lt;br /&gt;
|-&lt;br /&gt;
| FRAME[10] || frame || 10 instances of an 8-byte structure describing the sprite tile location within the &amp;lt;tt&amp;gt;SPR&amp;lt;/tt&amp;gt; image file&lt;br /&gt;
|- &lt;br /&gt;
| [[UINT16LE]] || animSpeed || Rate of frame change of sprite animation.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || cycle || Does the animation cycle repeat.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || cycleCount || Number of animation frames before changing state.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || animTriggerState || Sprite state to move to when cycleCount is reached.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || waterTriggerBottom || Bottom pixel of region for water trigger.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== TRIGGER Format ====&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]] || state || State to move to when triggered.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || left || Left pixel of the trigger region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the trigger region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right pixel of the trigger region.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom pixel of the trigger region.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== FRAME Format ====&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]] || left || Left pixel of the sprite on the &amp;lt;tt&amp;gt;SPR&amp;lt;/tt&amp;gt; image file.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || top || Top pixel of the sprite on the &amp;lt;tt&amp;gt;SPR&amp;lt;/tt&amp;gt; image file.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || right || Right pixel of the sprite on the &amp;lt;tt&amp;gt;SPR&amp;lt;/tt&amp;gt; image file.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16LE]] || bottom || Bottom pixel of the sprite on the &amp;lt;tt&amp;gt;SPR&amp;lt;/tt&amp;gt; image file.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
There are 10 different stages in the game, and correspondingly 10 different tile and sprite sets. &lt;br /&gt;
&lt;br /&gt;
The tile images for the backgrounds and landscape are stored in the &amp;lt;tt&amp;gt;DEC&amp;lt;/tt&amp;gt; directory, in image files which are in [[LBM Format]]. These files are named &amp;lt;tt&amp;gt;DECORxx.LBM&amp;lt;/tt&amp;gt; where xx is specified by the decFile field of the main structure.&lt;br /&gt;
&lt;br /&gt;
The sprite images are stored in the &amp;lt;tt&amp;gt;SPR&amp;lt;/tt&amp;gt; directory, in image files which are in [[LBM Format]]. These files are named &amp;lt;tt&amp;gt;SPRxxn&amp;lt;/tt&amp;gt; where xx is specified by the decFile field of the main structure, and n is specified by the spriteMap field in the main structure.&lt;br /&gt;
&lt;br /&gt;
The sprites can be of varying sizes, the FRAME data structure describes the bounding box in pixels within the sprite image file. If the sprite requires a transparency mask, then this mask will be a rectangular region with the same size as the sprite, and placed in the image file immediately below the sprite.&lt;br /&gt;
&lt;br /&gt;
Within the tile image file, all the tiles are 16 &amp;amp;times; 16 pixels, tiles are referenced in the main file structure as a pair of byte coordinates, giving the X and Y position in tiles within the image file.&lt;br /&gt;
&lt;br /&gt;
Certain tiles in the image file have special meaning.&lt;br /&gt;
&lt;br /&gt;
The tile at 0,1 is a coin. If the player touches this tile in the level, they will gain a coin, and the tile will be swapped out for the tile at 0,0 which is always empty.&lt;br /&gt;
&lt;br /&gt;
The tile at 0,2 is an extra life. If the player touches this tile in the level, they will gain an extra life, and the tile will be swapped out for the tile at 0,0.&lt;br /&gt;
&lt;br /&gt;
The tile at 0,3 is a time extension. If the player touches this tile in the level, they will gain an extra 30 seconds on the clock, and the tile will be swapped out for the tile at 0,0.&lt;br /&gt;
&lt;br /&gt;
All the remaining tiles on rows 0, 1 and 2 in the map are destructible tiles. The red form of the player can chew through the scenery. Chewing a tile from row 0 will cause that tile to be swapped out with the tile immediately below it in row 1. Chewing a tile from row 1 will cause that tile to be swapped out with the tile immediately below it in row 2. Chewing a tile from row 2 will cause that tile to be swapped out with the tile at 0,0, which is empty, so the player can then get through the gap created. Typically the tiles in these rows depict a gradually degraded state, you can have tiles that require more or less action to destroy them, by choosing from the three rows. Often the top row tiles are visually indistinguishable from some other non-destructible tiles in the tileset, allowing you to hide destructible tiles.&lt;br /&gt;
&lt;br /&gt;
== Credits ==&lt;br /&gt;
&lt;br /&gt;
This file format was reverse engineered by [[User:Carbon14|carbon14]]. 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>Carbon14</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=File:BLK_Format_(Fury_of_the_Furries).png&amp;diff=11089</id>
		<title>File:BLK Format (Fury of the Furries).png</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=File:BLK_Format_(Fury_of_the_Furries).png&amp;diff=11089"/>
		<updated>2023-06-30T14:19:47Z</updated>

		<summary type="html">&lt;p&gt;Carbon14: tileset from Fury of the Furries language selection page.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
tileset from Fury of the Furries language selection page.&lt;/div&gt;</summary>
		<author><name>Carbon14</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=File:Fury_of_the_Furries.png&amp;diff=11088</id>
		<title>File:Fury of the Furries.png</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=File:Fury_of_the_Furries.png&amp;diff=11088"/>
		<updated>2023-06-30T14:12:25Z</updated>

		<summary type="html">&lt;p&gt;Carbon14: Title screen for Fury of the Furries&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
Title screen for Fury of the Furries&lt;/div&gt;</summary>
		<author><name>Carbon14</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=LBM_Format&amp;diff=11087</id>
		<title>LBM Format</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=LBM_Format&amp;diff=11087"/>
		<updated>2023-06-30T14:02:23Z</updated>

		<summary type="html">&lt;p&gt;Carbon14: correct typo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Image Infobox&lt;br /&gt;
 | Hardware1 = CGA&lt;br /&gt;
 | Hardware2 = EGA&lt;br /&gt;
 | Hardware3 = VGA&lt;br /&gt;
 | Depth = Any&lt;br /&gt;
 | MinSize = 0&amp;amp;times;0&lt;br /&gt;
 | MaxSize = 65535&amp;amp;times;65535&lt;br /&gt;
 | Palette = Internal&lt;br /&gt;
 | NumPlanes = 255&lt;br /&gt;
 | HasTransparency = Yes&lt;br /&gt;
 | HasHitmap = No&lt;br /&gt;
 | Games = &lt;br /&gt;
   {{Game|Bubble Bobble featuring Rainbow Islands}}&lt;br /&gt;
   {{Game|Blockout}}&lt;br /&gt;
   {{Game|The Blues Brothers}}&lt;br /&gt;
   {{Game|Commander Keen Dreams}}&lt;br /&gt;
   {{Game|Dangerous Dave 3}}&lt;br /&gt;
   {{Game|Dangerous Dave 4}}&lt;br /&gt;
   {{Game|Fury of the Furries}}&lt;br /&gt;
   {{Game|The Settlers II}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The LBM file extension is an image file in [[Interchange File Format (IFF)]] structure to store image or palette data. Most commonly you can find these files in &#039;&#039;&#039;&amp;lt;u&amp;gt;I&amp;lt;/u&amp;gt;nter&amp;lt;u&amp;gt;L&amp;lt;/u&amp;gt;eaved &amp;lt;u&amp;gt;B&amp;lt;/u&amp;gt;it&amp;lt;u&amp;gt;M&amp;lt;/u&amp;gt;ap (ILBM) format&#039;&#039;&#039;, but some games are using a similar, but simpler-to-use &#039;&#039;&#039;&amp;lt;u&amp;gt;P&amp;lt;/u&amp;gt;lanar &amp;lt;u&amp;gt;B&amp;lt;/u&amp;gt;it&amp;lt;u&amp;gt;M&amp;lt;/u&amp;gt;ap (PBM)&#039;&#039;&#039; format. Both formats commonly exist under the .lbm file extension, occasionally appearing also as .bbm extension.&lt;br /&gt;
&lt;br /&gt;
ILBM and PBM formats are used by games from late 80s and early 90s that either originated from Amiga platform or had their assets such as graphics done on Amiga.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== File format ==&lt;br /&gt;
&lt;br /&gt;
In essence LBM files consist of a number of consecutive chunks, whose order can, to some extent, be varied. Each chunk has a different function and has the same basic format. This means that a program does not have to read or decode every chunk in a file, only the ones it wants to deal with or the ones it can understand. For example a program might use a TIME chunk to store the date and time that a file was last edited. Another program does not need to know about this and can just skip the chunk and leave it unchanged, or drop the chunk entirely, although that is not an advisable thing for a tool to do automatically.&lt;br /&gt;
&lt;br /&gt;
For details on the chunk structure and how to read them, see [[Interchange File Format (IFF)]].&lt;br /&gt;
&lt;br /&gt;
LBM files usually contain enough information to allow them to be displayed by an image editing program, including image dimensions, palette and pixel data. Some files were designed to act as palettes for paint programs (pixel data left blank) or to be merged into another image. This makes them much more flexible, but also much more complex than other formats such as BMP.&lt;br /&gt;
&lt;br /&gt;
For LBMs the &#039;&#039;&#039;BMHD&#039;&#039;&#039; chunk and any other &#039;vital&#039; chunks must appear before the &#039;&#039;&#039;BODY&#039;&#039;&#039; chunk. Any chunks appearing after &#039;&#039;&#039;BODY&#039;&#039;&#039; are considered &#039;extra&#039; and many programs will leave them unread and unchanged.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| FOURCC || chunkID || &amp;quot;FORM&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT32BE]] || lenChunk || Length of chunk data, in bytes.  Does not include the pad byte.  Will be the same as the file size minus eight bytes (this field and &amp;lt;tt&amp;gt;chunkID&amp;lt;/tt&amp;gt; are not included in the count)&lt;br /&gt;
|-&lt;br /&gt;
| FOURCC || formatID || &amp;quot;ILBM&amp;quot; or &amp;quot;PBM &amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| BYTE[lenChunk - 4] || content || Actual data of the chunk, made up of the other sub-chunks below&lt;br /&gt;
|-&lt;br /&gt;
| BYTE || pad || Optional padding byte, only present if &amp;lt;tt&amp;gt;lenChunk&amp;lt;/tt&amp;gt; is not a multiple of 2.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
There are many possible chunk types. However there are only a limited number of common chunk types used and understood by most programs, and descriptions of these follow.  Again refer to [[Interchange File Format (IFF)]] for further detail about finding and handling chunks.&lt;br /&gt;
&lt;br /&gt;
=== BMHD: Bitmap Header ===&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;BMHD&#039;&#039;&#039; chunk specifies how the image is to be displayed and is usually the first chunk inside the &#039;&#039;&#039;FORM&#039;&#039;&#039;.  It not only defines the image&#039;s height/width, but where it is drawn on the screen, how to display it in various screen resolutions and if the image is compressed.  The content of this chunk is as follows:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16BE]] || width || Image width, in pixels&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16BE]] || height || Image height, in pixels&lt;br /&gt;
|-&lt;br /&gt;
| [[INT16BE]] || xOrigin ||rowspan=2| Where on screen, in pixels, the image&#039;s top-left corner is. Value is usually 0,0 unless image is part of a larger image or not fullscreen.&lt;br /&gt;
|-&lt;br /&gt;
| [[INT16BE]] || yOrigin&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || numPlanes || Number of planes in bitmap, 1 for monochrome, 4 for 16 color, 8 for 256 color or 0 if there is only a colormap, and no image data. (i.e. this file is just a colormap.)&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || mask || 1 = masked, 2 = transparent color, 3 = lasso (for MacPaint).  Mask data is not considered a bit plane.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || compression || If 0 then uncompressed. If 1 then image data is RLE compressed. Other values are theoretically possible, representing other compression methods.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || pad1 || Ignore when reading, set to 0 when writing for future compatibility &lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16BE]] || transClr || Transparent colour, useful only when &amp;lt;tt&amp;gt;mask&amp;lt;/tt&amp;gt; &amp;gt;= 2&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || xAspect ||rowspan=2| Pixel aspect, a ratio width:height; used for displaying the image on a variety of different screen resolutions for 320x200 5:6 or 10:11&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || yAspect&lt;br /&gt;
|-&lt;br /&gt;
| [[INT16BE]] || pageWidth ||rowspan=2| The size of the screen the image is to be displayed on, in pixels, usually 320&amp;amp;times;200&lt;br /&gt;
|-&lt;br /&gt;
| [[INT16BE]] || pageHeight&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== BODY: Image data ===&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;BODY&#039;&#039;&#039; chunk is usually the last chunk in a file, and the largest.&lt;br /&gt;
&lt;br /&gt;
In ILBM files the &#039;&#039;&#039;BODY&#039;&#039;&#039; chunk stores the actual image data as interleaved bitplanes (and optional mask) by row. The bitplanes appear first from 1 to n, followed by the mask plane. If the image is uncompressed then each line will be made up of &amp;lt;code&amp;gt;(width + 15) / 16&amp;lt;/code&amp;gt; 16-bit values (i.e. one bit per pixel, rounded up to the nearest multiple of 16-bits.) If it is compressed then each line is compressed individually and is always a multiple of 16-bits long when compressed.&lt;br /&gt;
&lt;br /&gt;
The first bitplane represents the least significant bit of the color index for that pixel.&lt;br /&gt;
&lt;br /&gt;
The first pixel in a row is represented by the most-significant bit of the first 16-bit value.&lt;br /&gt;
&lt;br /&gt;
In PBM files the &#039;&#039;&#039;BODY&#039;&#039;&#039; chunk is simpler as uncompressed it is just a continuous stream of bytes containing image data.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Compression ====&lt;br /&gt;
&lt;br /&gt;
If an image is compressed, each row of data (but not each bitplane) is compressed individually, including the mask data if present.  The compression is a [[RLE Compression#Code|Code-based RLE Compression]].  It can be decoded as follows:&lt;br /&gt;
&lt;br /&gt;
* Loop until we have [Final length] bytes worth of data (final length calculated from image size.)&lt;br /&gt;
* While [Decompressed data length] &amp;lt; [Final length]:&lt;br /&gt;
*# Read a byte [Value]&lt;br /&gt;
*# If [Value] &amp;gt; 128, then:&lt;br /&gt;
*#* Read the next byte and output it (257 - [Value]) times.&lt;br /&gt;
*#* Move forward 2 bytes and return to step 1.&lt;br /&gt;
*# Else if [Value] &amp;lt; 128, then:&lt;br /&gt;
*#* Read and output the next [value + 1] bytes&lt;br /&gt;
*#* Move forward [Value + 2] bytes and return to step 1.&lt;br /&gt;
*# Else [Value] = 128, exit the loop (stop decompressing)&lt;br /&gt;
&lt;br /&gt;
For the compression routine, it&#039;s best to encode a 2 byte repeat run as a replicate run except when preceded and followed by a literal run, in which case it&#039;s best to merge the three into one literal run. Always encode &amp;gt;3 byte repeats as replicate runs.&lt;br /&gt;
&lt;br /&gt;
=== CAMG: Amiga mode ===&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;CAMG&#039;&#039;&#039; chunk is specifically for the Commodore Amiga computer. It stores a LONG &amp;quot;viewport mode&amp;quot;. This lets you specify Amiga display modes like &amp;quot;dual playfield&amp;quot; and &amp;quot;hold and modify&amp;quot;. It is not surprisingly rare outside of Amiga games.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT32BE]] || viewportMode|| bit flags; directly interpreted by Amiga hardware&lt;br /&gt;
|}&lt;br /&gt;
If you need to convert or display files that might contain meaningful CAMG chunks, see the &#039;Notes on working with LBM files&#039; below.&lt;br /&gt;
&lt;br /&gt;
=== CMAP: Palette ===&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;CMAP&#039;&#039;&#039; chunk contains the image&#039;s palette and consists of 3-byte RGB values for each colour used.  Each byte is between 0 and 255 inclusive.  The chunk is &amp;lt;code&amp;gt;3 &amp;amp;times; numColours&amp;lt;/code&amp;gt; bytes long.  The number of colours in the palette will be &amp;lt;code&amp;gt;2 ^ numBitplanes&amp;lt;/code&amp;gt;. This chunk is optional and a default palette will be used if it is not present.  It is possible to have fewer entries than expected (e.g. 7 colours for a 4-plane &#039;16 colour&#039; bitmap for example.)  Remember that if this has an odd number of colours, as per the IFF specification the chunk will be padded by one byte to make it an even number of bytes long, but the pad byte is not included in the chunk&#039;s length field.&lt;br /&gt;
&lt;br /&gt;
=== CRNG: Colour range ===&lt;br /&gt;
&lt;br /&gt;
The colour range chunk is &#039;nonstandard&#039;.  It is used by Electronic Arts&#039; Deluxe Paint program to identify a contiguous range of colour registers or a &amp;quot;shade range&amp;quot; and colour cycling.  There can be zero or more &#039;&#039;&#039;CRNG&#039;&#039;&#039; chunks in an LBM file, but all should appear before the &#039;&#039;&#039;BODY&#039;&#039;&#039; chunk.  Deluxe Paint normally writes 4 CRNG chunks in an LBM when the user asks it to &amp;quot;Save Picture&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[INT16BE]] || padding || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| [[INT16BE]] || rate || Colour cycle rate.  The units are such that a rate of 60 steps per second is represented as 2&amp;lt;sup&amp;gt;14&amp;lt;/sup&amp;gt; = 16384.  Lower rates can be obtained by linear scaling: for 30 steps/second, rate = 8192.&lt;br /&gt;
|-&lt;br /&gt;
| [[INT16BE]] || flags || Flags which control the cycling of colours through the palette. If bit0 is 1, the colours should cycle, otherwise this colour register range is inactive and should have no effect. If bit1 is 0, the colours cycle upwards, i.e. each colour moves into the next index position in the colour map and the uppermost colour in the range moves down to the lowest position. If bit1 is 1, the colours cycle in the opposite direction. Only those colours between the &#039;&#039;&#039;low&#039;&#039;&#039; and &#039;&#039;&#039;high&#039;&#039;&#039; entries in the colour map should cycle.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || low || The index of the first entry in the colour map that is part of this range.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || high || The index of the last entry in the colour map that is part of this range.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== CCRT: Colour cycling ===&lt;br /&gt;
&lt;br /&gt;
Commodore&#039;s Graphicraft program uses &#039;&#039;&#039;CCRT&#039;&#039;&#039; for &#039;&#039;Colour Cycling Range and Timing&#039;&#039;. This chunk contains a CycleInfo structure. Like &#039;&#039;&#039;CRNG&#039;&#039;&#039; it is a nonstandard chunk.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[INT16BE]] || direction || Cycle direction: 0=no cycling, 1=forwards, -1=backwards&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || low || lowest color register selected&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || high || highest color register selected&lt;br /&gt;
|-&lt;br /&gt;
| [[INT32BE]] || delaySec || Seconds between changing colors&lt;br /&gt;
|-&lt;br /&gt;
| [[INT32BE]] || delayuS || Microseconds between changing colors (added to &#039;&#039;&#039;delaySec&#039;&#039;&#039; to get total delay time)&lt;br /&gt;
|-&lt;br /&gt;
| [[INT16BE]] || padding || 0x0000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The data is similar to a &#039;&#039;&#039;CRNG&#039;&#039;&#039; chunk.  A program would probably only use one of these two methods of expressing colour cycle data. You could write out both if you want to communicate this information to both DeluxePaint and Graphicraft.&lt;br /&gt;
&lt;br /&gt;
=== DEST: Bitplane combining ===&lt;br /&gt;
&lt;br /&gt;
The optional property &#039;&#039;&#039;DEST&#039;&#039;&#039; is a way to control how to scatter zero or more source bitplanes into a deeper destination image.  Some readers may ignore DEST.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || numPlanes || Number of bitplanes in source image&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || pad1 || unused; use 0 for consistency&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16BE]] || planePick || How to pick planes to scatter them into the destination image&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16BE]] || planeOnOff || Default data for Plane Pick&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16BE]] || planeMask || Selects which bitplanes to store into&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The low order depth number of bits in planePick, planeOnOff, and planeMask correspond one-to-one with destination bitplanes. Bit 0 with bitplane 0, etc. (Any higher order bits should be ignored.)&lt;br /&gt;
&lt;br /&gt;
&amp;quot;1&amp;quot; bits in planePick mean &amp;quot;put the next source bitplane into this bitplane&amp;quot;, so the number of &amp;quot;1&amp;quot; bits should equal numPlanes. &amp;quot;0&amp;quot; bits mean &amp;quot;put the corresponding bit from planeOnOff into this bitplane&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Bits in planeMask gate writing to the destination bitplane: &amp;quot;1&amp;quot; bits mean &amp;quot;write to this bitplane&amp;quot; while &amp;quot;0&amp;quot; bits mean &amp;quot;leave this bitplane alone&amp;quot;. The normal case (with no &#039;&#039;&#039;DEST&#039;&#039;&#039; chunk) is equivalent to &amp;lt;code&amp;gt;planePick = planeMask = (2 ^ numPlanes) - 1&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Remember that color numbers are formed by pixels in the destination bitmap (depth planes deep) not in the source bitmap (numPlanes planes deep).&lt;br /&gt;
&lt;br /&gt;
=== GRAB: Hotspot ===&lt;br /&gt;
&lt;br /&gt;
The optional &#039;&#039;&#039;GRAB&#039;&#039;&#039; chunk locates a &amp;quot;handle&amp;quot; or &amp;quot;hotspot&amp;quot; of the image relative to its upper left corner, e.g. when used as a mouse cursor or a &amp;quot;paint brush&amp;quot;. It is optional.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[INT16BE]] || x || X coordinate of hotspot, in pixels relative to top-left corner of the image&lt;br /&gt;
|-&lt;br /&gt;
| [[INT16BE]] || y || Y coordinate of hotspot, in pixels relative to top-left corner of the image&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== SPRT: Z-order ===&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;SPRT&#039;&#039;&#039; chunk indicates that an image is intended to be a sprite. It should thus have a mask plane or transparent colour and shouldn&#039;t be fullscreen. How this is handled depends on the program using the image. The only data stored here is the sprite order, used by many programs to place the sprite in the foreground (a sprite of order 1 appears behind one of order 0, etc.)  It is optional.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16BE]] || order || Z-order of image (0 is closest to the foreground, larger numbers are further away/behind)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TINY: Thumbnail ===&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;TINY&#039;&#039;&#039; chunk contains a small preview image for various graphics programs, including Deluxe Paint. It is compressed and is similar in format to the &#039;&#039;&#039;BODY&#039;&#039;&#039; chunk.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16BE]] || width || Thumbnail width, in pixels&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16BE]] || height || Thumbnail height, in pixels&lt;br /&gt;
|-&lt;br /&gt;
| BYTE[] || data || Pixel data, stored in exactly the same way as the &#039;&#039;&#039;BODY&#039;&#039;&#039; chunk. Use exactly the same algorithm, substituting the width and height from the &#039;&#039;&#039;TINY&#039;&#039;&#039; chunk in place of those taken from the &#039;&#039;&#039;BMHD&#039;&#039;&#039; chunk.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Notes for working with LBM ==&lt;br /&gt;
&lt;br /&gt;
==== Color Maps ====&lt;br /&gt;
&lt;br /&gt;
Sometimes an LBM file contains only a colour map and no image data. Often used to store a palette of colours that can be applied to an image separately. In this case the BODY chunk should be empty and the numPlanes field in the BMHD chunk will be 0.&lt;br /&gt;
&lt;br /&gt;
==== Deep Images ====&lt;br /&gt;
&lt;br /&gt;
Some LBM files contain &#039;true-colour&#039; information rather than indexed colours. These so-called &#039;deep images&#039; files have no CMAP chunk and usually have 24 or 32 bitplanes. The standard ordering for the bitplanes will put the least significant bit of the red component first:&lt;br /&gt;
&lt;br /&gt;
R0 R1 R2 R3 R4 R5 R6 R7 G0 G1 G2 G3 G4 G5 G6 G7 B0 B1 B2 B3 B4 B5 B6 B7&lt;br /&gt;
&lt;br /&gt;
If there are 32 bit planes, the last 8 bit planes will be an alpha channel:&lt;br /&gt;
&lt;br /&gt;
R0 R1 ... R7 G0 ... G7 B0 ... B6 B7 A0 A1 A2 A3 A4 A5 A6 A7&lt;br /&gt;
&lt;br /&gt;
An image containing no colour map and only 8 bitplanes may be a greyscale image:&lt;br /&gt;
&lt;br /&gt;
I0 I1 I2 I3 I4 I5 I6 I7&lt;br /&gt;
&lt;br /&gt;
==== Extra Half-Brite ====&lt;br /&gt;
&lt;br /&gt;
If the ILBM file contains a CAMG chunk in which bit 7 is set (i.e. 0x80 in hexadecimal). The file expects to make use of the EHB (Extra Half-Brite) mode of the Amiga chipset. The colour map will have no more than 32 entries, but the image will have 6 bitplanes. The most significant bitplane should be regarded as a flag, when unset, use the lower 5 bits as an index into the colour map as usual. When the flag is set; use the lower 5 bits as an index into the colour map, but the actual colour to be used should be half as bright, which can be achieved by shifted the RGB components of the colour one bit to the right. Alternatively, create a colour map with 64 entries, and copy the lower 32 entries into the upper half, converting them to half brightness; then use all 6 bitplanes as a colour index.&lt;br /&gt;
&lt;br /&gt;
PBM images cannot exist in extra half-brite mode.&lt;br /&gt;
&lt;br /&gt;
==== Hold and Modify ====&lt;br /&gt;
&lt;br /&gt;
If the ILBM file contains a CAMG chunk in which bit 11 is set (i.e. 0x800 in hexadecimal) the file expects to make use of the HAM (Hold-And-Modify) mode of the Amiga chipset. In HAM6 format the colour map will have up to 16 entries, but the image will have 6 (or possibly 5 bitplanes). In HAM8 format the colour map will have up to 64 entries but the image will have 8 (or possibly 7 bitplanes).&lt;br /&gt;
&lt;br /&gt;
The last two bitplanes (if an odd number of bitplanes assume an extra bitplane which is always 0) are control flags which indicate how to use the first 4 (or 6) bitplanes.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Control Flags !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 00 || Use bitplanes 0-3 (or 0-5) as a colour map index as normal&lt;br /&gt;
|-&lt;br /&gt;
| 10 || Use the colour of the previous pixel but replace the Blue component with bits from bitplanes 0-3 (or 0-5)&lt;br /&gt;
|-&lt;br /&gt;
| 01 || Use the colour of the previous pixel but replace the Red component with bits from bitplanes 0-3 (or 0-5)&lt;br /&gt;
|-&lt;br /&gt;
| 11 || Use the colour of the previous pixel but replace the Green component with bits from bitplanes 0-3 (or 0-5)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If the first pixel of a scanline is a modification pixel, then modify and use the image border colour.&lt;br /&gt;
&lt;br /&gt;
Note that when using 4 bits to modify a colour component you should use the 4 bits in the upper 4 bits of the component AND in the lower 4 bits (to avoid reducing the overall colour gamut). When using 6 bits this is less important, but you can still put the 2 most significant bits of the modification bits into the least significant two bits of the colour component.&lt;br /&gt;
&lt;br /&gt;
PBM images cannot exist in hold and modify mode.&lt;br /&gt;
&lt;br /&gt;
== Utilities ==&lt;br /&gt;
&lt;br /&gt;
Most utilities that work with LBM and BBM files are rather &#039;&#039;&#039;dated&#039;&#039;&#039;, such as MacPaint or Deluxe Paint.&lt;br /&gt;
&lt;br /&gt;
* [http://settlers2.net/documentation/graphics-files-lbm/ Graphics Workshop 1.1Y] from mid-90s can convert from and to all variants of LBM files; it supports a variety of other image file formats. It is dated but still works on even Windows 10 when running in Windows XP compatibility mode. There is also newer commercial version known as [http://www.mindworkshop.com/gww.html Graphics Workshop Professional] with much more modern UI (seeming to be mid-00s), which however is also dated by today&#039;s standards.&lt;br /&gt;
&lt;br /&gt;
* [http://www.ultimatepaint.com/ Ultimate Paint] can read, write and display palette color cycle animations.&lt;br /&gt;
&lt;br /&gt;
* [http://www.xnview.com/en/nconvert/ XnView&#039;s nconvert] is a free and &#039;&#039;&#039;up to date&#039;&#039;&#039; command line converter.&lt;br /&gt;
&lt;br /&gt;
* [http://www.imageconverterplus.com/ Image Converter Plus] is a program that will convert ILBM files into any number of formats. While the full version is not free, the demo version adds a watermark that can be removed.&lt;br /&gt;
&lt;br /&gt;
* Paint Shop Pro 7.04 and other older versions of PSP can read and write ILBM, but can only read PBM files. PSP7 gets a special mention as the shareware version has a bug that allows the evaluation shutdown mechanism to be skipped by simply opening a file (ie. modify shortcut to always open a file and you won&#039;t be bothered).&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/steffest/DPaint-js DPaint.js] is a new javascript image editor with a strong focus on Amiga formats. Modelled after the original DeluxePaint. It can be hosted locally, or there is an [https://www.stef.be/dpaint/ online version] available&lt;br /&gt;
&lt;br /&gt;
* [[FuryUtils]] is a suite of tools including ImmFile which can convert some LBM files to and from windows Bmp files. Sufficient to support [[Fury of the Furries]]&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
In the [[Commander Keen Dreams]] series of games, compressed standalone ILBM images are used for title screens, but the game does not read most of the ILBM chunks. This is because the images were edited in DeluxePaint, then imported directly into the game&#039;s files.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
[https://web.archive.org/web/20190829195455/https://wiki.multimedia.cx/index.php/IFF IFF]&lt;br /&gt;
&lt;br /&gt;
[https://web.archive.org/web/20070911223155/http://www.szonye.com/bradd/iff.html “EA IFF 85” Standard for Interchange Format Files]&lt;/div&gt;</summary>
		<author><name>Carbon14</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=LBM_Format&amp;diff=11086</id>
		<title>LBM Format</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=LBM_Format&amp;diff=11086"/>
		<updated>2023-06-30T14:01:45Z</updated>

		<summary type="html">&lt;p&gt;Carbon14: Added link to internally described tools FuryUtils.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Image Infobox&lt;br /&gt;
 | Hardware1 = CGA&lt;br /&gt;
 | Hardware2 = EGA&lt;br /&gt;
 | Hardware3 = VGA&lt;br /&gt;
 | Depth = Any&lt;br /&gt;
 | MinSize = 0&amp;amp;times;0&lt;br /&gt;
 | MaxSize = 65535&amp;amp;times;65535&lt;br /&gt;
 | Palette = Internal&lt;br /&gt;
 | NumPlanes = 255&lt;br /&gt;
 | HasTransparency = Yes&lt;br /&gt;
 | HasHitmap = No&lt;br /&gt;
 | Games = &lt;br /&gt;
   {{Game|Bubble Bobble featuring Rainbow Islands}}&lt;br /&gt;
   {{Game|Blockout}}&lt;br /&gt;
   {{Game|The Blues Brothers}}&lt;br /&gt;
   {{Game|Commander Keen Dreams}}&lt;br /&gt;
   {{Game|Dangerous Dave 3}}&lt;br /&gt;
   {{Game|Dangerous Dave 4}}&lt;br /&gt;
   {{Game|Fury of the Furries}}&lt;br /&gt;
   {{Game|The Settlers II}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The LBM file extension is an image file in [[Interchange File Format (IFF)]] structure to store image or palette data. Most commonly you can find these files in &#039;&#039;&#039;&amp;lt;u&amp;gt;I&amp;lt;/u&amp;gt;nter&amp;lt;u&amp;gt;L&amp;lt;/u&amp;gt;eaved &amp;lt;u&amp;gt;B&amp;lt;/u&amp;gt;it&amp;lt;u&amp;gt;M&amp;lt;/u&amp;gt;ap (ILBM) format&#039;&#039;&#039;, but some games are using a similar, but simpler-to-use &#039;&#039;&#039;&amp;lt;u&amp;gt;P&amp;lt;/u&amp;gt;lanar &amp;lt;u&amp;gt;B&amp;lt;/u&amp;gt;it&amp;lt;u&amp;gt;M&amp;lt;/u&amp;gt;ap (PBM)&#039;&#039;&#039; format. Both formats commonly exist under the .lbm file extension, occasionally appearing also as .bbm extension.&lt;br /&gt;
&lt;br /&gt;
ILBM and PBM formats are used by games from late 80s and early 90s that either originated from Amiga platform or had their assets such as graphics done on Amiga.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== File format ==&lt;br /&gt;
&lt;br /&gt;
In essence LBM files consist of a number of consecutive chunks, whose order can, to some extent, be varied. Each chunk has a different function and has the same basic format. This means that a program does not have to read or decode every chunk in a file, only the ones it wants to deal with or the ones it can understand. For example a program might use a TIME chunk to store the date and time that a file was last edited. Another program does not need to know about this and can just skip the chunk and leave it unchanged, or drop the chunk entirely, although that is not an advisable thing for a tool to do automatically.&lt;br /&gt;
&lt;br /&gt;
For details on the chunk structure and how to read them, see [[Interchange File Format (IFF)]].&lt;br /&gt;
&lt;br /&gt;
LBM files usually contain enough information to allow them to be displayed by an image editing program, including image dimensions, palette and pixel data. Some files were designed to act as palettes for paint programs (pixel data left blank) or to be merged into another image. This makes them much more flexible, but also much more complex than other formats such as BMP.&lt;br /&gt;
&lt;br /&gt;
For LBMs the &#039;&#039;&#039;BMHD&#039;&#039;&#039; chunk and any other &#039;vital&#039; chunks must appear before the &#039;&#039;&#039;BODY&#039;&#039;&#039; chunk. Any chunks appearing after &#039;&#039;&#039;BODY&#039;&#039;&#039; are considered &#039;extra&#039; and many programs will leave them unread and unchanged.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| FOURCC || chunkID || &amp;quot;FORM&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT32BE]] || lenChunk || Length of chunk data, in bytes.  Does not include the pad byte.  Will be the same as the file size minus eight bytes (this field and &amp;lt;tt&amp;gt;chunkID&amp;lt;/tt&amp;gt; are not included in the count)&lt;br /&gt;
|-&lt;br /&gt;
| FOURCC || formatID || &amp;quot;ILBM&amp;quot; or &amp;quot;PBM &amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| BYTE[lenChunk - 4] || content || Actual data of the chunk, made up of the other sub-chunks below&lt;br /&gt;
|-&lt;br /&gt;
| BYTE || pad || Optional padding byte, only present if &amp;lt;tt&amp;gt;lenChunk&amp;lt;/tt&amp;gt; is not a multiple of 2.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
There are many possible chunk types. However there are only a limited number of common chunk types used and understood by most programs, and descriptions of these follow.  Again refer to [[Interchange File Format (IFF)]] for further detail about finding and handling chunks.&lt;br /&gt;
&lt;br /&gt;
=== BMHD: Bitmap Header ===&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;BMHD&#039;&#039;&#039; chunk specifies how the image is to be displayed and is usually the first chunk inside the &#039;&#039;&#039;FORM&#039;&#039;&#039;.  It not only defines the image&#039;s height/width, but where it is drawn on the screen, how to display it in various screen resolutions and if the image is compressed.  The content of this chunk is as follows:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16BE]] || width || Image width, in pixels&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16BE]] || height || Image height, in pixels&lt;br /&gt;
|-&lt;br /&gt;
| [[INT16BE]] || xOrigin ||rowspan=2| Where on screen, in pixels, the image&#039;s top-left corner is. Value is usually 0,0 unless image is part of a larger image or not fullscreen.&lt;br /&gt;
|-&lt;br /&gt;
| [[INT16BE]] || yOrigin&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || numPlanes || Number of planes in bitmap, 1 for monochrome, 4 for 16 color, 8 for 256 color or 0 if there is only a colormap, and no image data. (i.e. this file is just a colormap.)&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || mask || 1 = masked, 2 = transparent color, 3 = lasso (for MacPaint).  Mask data is not considered a bit plane.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || compression || If 0 then uncompressed. If 1 then image data is RLE compressed. Other values are theoretically possible, representing other compression methods.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || pad1 || Ignore when reading, set to 0 when writing for future compatibility &lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16BE]] || transClr || Transparent colour, useful only when &amp;lt;tt&amp;gt;mask&amp;lt;/tt&amp;gt; &amp;gt;= 2&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || xAspect ||rowspan=2| Pixel aspect, a ratio width:height; used for displaying the image on a variety of different screen resolutions for 320x200 5:6 or 10:11&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || yAspect&lt;br /&gt;
|-&lt;br /&gt;
| [[INT16BE]] || pageWidth ||rowspan=2| The size of the screen the image is to be displayed on, in pixels, usually 320&amp;amp;times;200&lt;br /&gt;
|-&lt;br /&gt;
| [[INT16BE]] || pageHeight&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== BODY: Image data ===&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;BODY&#039;&#039;&#039; chunk is usually the last chunk in a file, and the largest.&lt;br /&gt;
&lt;br /&gt;
In ILBM files the &#039;&#039;&#039;BODY&#039;&#039;&#039; chunk stores the actual image data as interleaved bitplanes (and optional mask) by row. The bitplanes appear first from 1 to n, followed by the mask plane. If the image is uncompressed then each line will be made up of &amp;lt;code&amp;gt;(width + 15) / 16&amp;lt;/code&amp;gt; 16-bit values (i.e. one bit per pixel, rounded up to the nearest multiple of 16-bits.) If it is compressed then each line is compressed individually and is always a multiple of 16-bits long when compressed.&lt;br /&gt;
&lt;br /&gt;
The first bitplane represents the least significant bit of the color index for that pixel.&lt;br /&gt;
&lt;br /&gt;
The first pixel in a row is represented by the most-significant bit of the first 16-bit value.&lt;br /&gt;
&lt;br /&gt;
In PBM files the &#039;&#039;&#039;BODY&#039;&#039;&#039; chunk is simpler as uncompressed it is just a continuous stream of bytes containing image data.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Compression ====&lt;br /&gt;
&lt;br /&gt;
If an image is compressed, each row of data (but not each bitplane) is compressed individually, including the mask data if present.  The compression is a [[RLE Compression#Code|Code-based RLE Compression]].  It can be decoded as follows:&lt;br /&gt;
&lt;br /&gt;
* Loop until we have [Final length] bytes worth of data (final length calculated from image size.)&lt;br /&gt;
* While [Decompressed data length] &amp;lt; [Final length]:&lt;br /&gt;
*# Read a byte [Value]&lt;br /&gt;
*# If [Value] &amp;gt; 128, then:&lt;br /&gt;
*#* Read the next byte and output it (257 - [Value]) times.&lt;br /&gt;
*#* Move forward 2 bytes and return to step 1.&lt;br /&gt;
*# Else if [Value] &amp;lt; 128, then:&lt;br /&gt;
*#* Read and output the next [value + 1] bytes&lt;br /&gt;
*#* Move forward [Value + 2] bytes and return to step 1.&lt;br /&gt;
*# Else [Value] = 128, exit the loop (stop decompressing)&lt;br /&gt;
&lt;br /&gt;
For the compression routine, it&#039;s best to encode a 2 byte repeat run as a replicate run except when preceded and followed by a literal run, in which case it&#039;s best to merge the three into one literal run. Always encode &amp;gt;3 byte repeats as replicate runs.&lt;br /&gt;
&lt;br /&gt;
=== CAMG: Amiga mode ===&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;CAMG&#039;&#039;&#039; chunk is specifically for the Commodore Amiga computer. It stores a LONG &amp;quot;viewport mode&amp;quot;. This lets you specify Amiga display modes like &amp;quot;dual playfield&amp;quot; and &amp;quot;hold and modify&amp;quot;. It is not surprisingly rare outside of Amiga games.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT32BE]] || viewportMode|| bit flags; directly interpreted by Amiga hardware&lt;br /&gt;
|}&lt;br /&gt;
If you need to convert or display files that might contain meaningful CAMG chunks, see the &#039;Notes on working with LBM files&#039; below.&lt;br /&gt;
&lt;br /&gt;
=== CMAP: Palette ===&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;CMAP&#039;&#039;&#039; chunk contains the image&#039;s palette and consists of 3-byte RGB values for each colour used.  Each byte is between 0 and 255 inclusive.  The chunk is &amp;lt;code&amp;gt;3 &amp;amp;times; numColours&amp;lt;/code&amp;gt; bytes long.  The number of colours in the palette will be &amp;lt;code&amp;gt;2 ^ numBitplanes&amp;lt;/code&amp;gt;. This chunk is optional and a default palette will be used if it is not present.  It is possible to have fewer entries than expected (e.g. 7 colours for a 4-plane &#039;16 colour&#039; bitmap for example.)  Remember that if this has an odd number of colours, as per the IFF specification the chunk will be padded by one byte to make it an even number of bytes long, but the pad byte is not included in the chunk&#039;s length field.&lt;br /&gt;
&lt;br /&gt;
=== CRNG: Colour range ===&lt;br /&gt;
&lt;br /&gt;
The colour range chunk is &#039;nonstandard&#039;.  It is used by Electronic Arts&#039; Deluxe Paint program to identify a contiguous range of colour registers or a &amp;quot;shade range&amp;quot; and colour cycling.  There can be zero or more &#039;&#039;&#039;CRNG&#039;&#039;&#039; chunks in an LBM file, but all should appear before the &#039;&#039;&#039;BODY&#039;&#039;&#039; chunk.  Deluxe Paint normally writes 4 CRNG chunks in an LBM when the user asks it to &amp;quot;Save Picture&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[INT16BE]] || padding || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| [[INT16BE]] || rate || Colour cycle rate.  The units are such that a rate of 60 steps per second is represented as 2&amp;lt;sup&amp;gt;14&amp;lt;/sup&amp;gt; = 16384.  Lower rates can be obtained by linear scaling: for 30 steps/second, rate = 8192.&lt;br /&gt;
|-&lt;br /&gt;
| [[INT16BE]] || flags || Flags which control the cycling of colours through the palette. If bit0 is 1, the colours should cycle, otherwise this colour register range is inactive and should have no effect. If bit1 is 0, the colours cycle upwards, i.e. each colour moves into the next index position in the colour map and the uppermost colour in the range moves down to the lowest position. If bit1 is 1, the colours cycle in the opposite direction. Only those colours between the &#039;&#039;&#039;low&#039;&#039;&#039; and &#039;&#039;&#039;high&#039;&#039;&#039; entries in the colour map should cycle.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || low || The index of the first entry in the colour map that is part of this range.&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || high || The index of the last entry in the colour map that is part of this range.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== CCRT: Colour cycling ===&lt;br /&gt;
&lt;br /&gt;
Commodore&#039;s Graphicraft program uses &#039;&#039;&#039;CCRT&#039;&#039;&#039; for &#039;&#039;Colour Cycling Range and Timing&#039;&#039;. This chunk contains a CycleInfo structure. Like &#039;&#039;&#039;CRNG&#039;&#039;&#039; it is a nonstandard chunk.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[INT16BE]] || direction || Cycle direction: 0=no cycling, 1=forwards, -1=backwards&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || low || lowest color register selected&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || high || highest color register selected&lt;br /&gt;
|-&lt;br /&gt;
| [[INT32BE]] || delaySec || Seconds between changing colors&lt;br /&gt;
|-&lt;br /&gt;
| [[INT32BE]] || delayuS || Microseconds between changing colors (added to &#039;&#039;&#039;delaySec&#039;&#039;&#039; to get total delay time)&lt;br /&gt;
|-&lt;br /&gt;
| [[INT16BE]] || padding || 0x0000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The data is similar to a &#039;&#039;&#039;CRNG&#039;&#039;&#039; chunk.  A program would probably only use one of these two methods of expressing colour cycle data. You could write out both if you want to communicate this information to both DeluxePaint and Graphicraft.&lt;br /&gt;
&lt;br /&gt;
=== DEST: Bitplane combining ===&lt;br /&gt;
&lt;br /&gt;
The optional property &#039;&#039;&#039;DEST&#039;&#039;&#039; is a way to control how to scatter zero or more source bitplanes into a deeper destination image.  Some readers may ignore DEST.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || numPlanes || Number of bitplanes in source image&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT8]] || pad1 || unused; use 0 for consistency&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16BE]] || planePick || How to pick planes to scatter them into the destination image&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16BE]] || planeOnOff || Default data for Plane Pick&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16BE]] || planeMask || Selects which bitplanes to store into&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The low order depth number of bits in planePick, planeOnOff, and planeMask correspond one-to-one with destination bitplanes. Bit 0 with bitplane 0, etc. (Any higher order bits should be ignored.)&lt;br /&gt;
&lt;br /&gt;
&amp;quot;1&amp;quot; bits in planePick mean &amp;quot;put the next source bitplane into this bitplane&amp;quot;, so the number of &amp;quot;1&amp;quot; bits should equal numPlanes. &amp;quot;0&amp;quot; bits mean &amp;quot;put the corresponding bit from planeOnOff into this bitplane&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Bits in planeMask gate writing to the destination bitplane: &amp;quot;1&amp;quot; bits mean &amp;quot;write to this bitplane&amp;quot; while &amp;quot;0&amp;quot; bits mean &amp;quot;leave this bitplane alone&amp;quot;. The normal case (with no &#039;&#039;&#039;DEST&#039;&#039;&#039; chunk) is equivalent to &amp;lt;code&amp;gt;planePick = planeMask = (2 ^ numPlanes) - 1&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Remember that color numbers are formed by pixels in the destination bitmap (depth planes deep) not in the source bitmap (numPlanes planes deep).&lt;br /&gt;
&lt;br /&gt;
=== GRAB: Hotspot ===&lt;br /&gt;
&lt;br /&gt;
The optional &#039;&#039;&#039;GRAB&#039;&#039;&#039; chunk locates a &amp;quot;handle&amp;quot; or &amp;quot;hotspot&amp;quot; of the image relative to its upper left corner, e.g. when used as a mouse cursor or a &amp;quot;paint brush&amp;quot;. It is optional.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[INT16BE]] || x || X coordinate of hotspot, in pixels relative to top-left corner of the image&lt;br /&gt;
|-&lt;br /&gt;
| [[INT16BE]] || y || Y coordinate of hotspot, in pixels relative to top-left corner of the image&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== SPRT: Z-order ===&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;SPRT&#039;&#039;&#039; chunk indicates that an image is intended to be a sprite. It should thus have a mask plane or transparent colour and shouldn&#039;t be fullscreen. How this is handled depends on the program using the image. The only data stored here is the sprite order, used by many programs to place the sprite in the foreground (a sprite of order 1 appears behind one of order 0, etc.)  It is optional.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16BE]] || order || Z-order of image (0 is closest to the foreground, larger numbers are further away/behind)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TINY: Thumbnail ===&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;TINY&#039;&#039;&#039; chunk contains a small preview image for various graphics programs, including Deluxe Paint. It is compressed and is similar in format to the &#039;&#039;&#039;BODY&#039;&#039;&#039; chunk.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16BE]] || width || Thumbnail width, in pixels&lt;br /&gt;
|-&lt;br /&gt;
| [[UINT16BE]] || height || Thumbnail height, in pixels&lt;br /&gt;
|-&lt;br /&gt;
| BYTE[] || data || Pixel data, stored in exactly the same way as the &#039;&#039;&#039;BODY&#039;&#039;&#039; chunk. Use exactly the same algorithm, substituting the width and height from the &#039;&#039;&#039;TINY&#039;&#039;&#039; chunk in place of those taken from the &#039;&#039;&#039;BMHD&#039;&#039;&#039; chunk.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Notes for working with LBM ==&lt;br /&gt;
&lt;br /&gt;
==== Color Maps ====&lt;br /&gt;
&lt;br /&gt;
Sometimes an LBM file contains only a colour map and no image data. Often used to store a palette of colours that can be applied to an image separately. In this case the BODY chunk should be empty and the numPlanes field in the BMHD chunk will be 0.&lt;br /&gt;
&lt;br /&gt;
==== Deep Images ====&lt;br /&gt;
&lt;br /&gt;
Some LBM files contain &#039;true-colour&#039; information rather than indexed colours. These so-called &#039;deep images&#039; files have no CMAP chunk and usually have 24 or 32 bitplanes. The standard ordering for the bitplanes will put the least significant bit of the red component first:&lt;br /&gt;
&lt;br /&gt;
R0 R1 R2 R3 R4 R5 R6 R7 G0 G1 G2 G3 G4 G5 G6 G7 B0 B1 B2 B3 B4 B5 B6 B7&lt;br /&gt;
&lt;br /&gt;
If there are 32 bit planes, the last 8 bit planes will be an alpha channel:&lt;br /&gt;
&lt;br /&gt;
R0 R1 ... R7 G0 ... G7 B0 ... B6 B7 A0 A1 A2 A3 A4 A5 A6 A7&lt;br /&gt;
&lt;br /&gt;
An image containing no colour map and only 8 bitplanes may be a greyscale image:&lt;br /&gt;
&lt;br /&gt;
I0 I1 I2 I3 I4 I5 I6 I7&lt;br /&gt;
&lt;br /&gt;
==== Extra Half-Brite ====&lt;br /&gt;
&lt;br /&gt;
If the ILBM file contains a CAMG chunk in which bit 7 is set (i.e. 0x80 in hexadecimal). The file expects to make use of the EHB (Extra Half-Brite) mode of the Amiga chipset. The colour map will have no more than 32 entries, but the image will have 6 bitplanes. The most significant bitplane should be regarded as a flag, when unset, use the lower 5 bits as an index into the colour map as usual. When the flag is set; use the lower 5 bits as an index into the colour map, but the actual colour to be used should be half as bright, which can be achieved by shifted the RGB components of the colour one bit to the right. Alternatively, create a colour map with 64 entries, and copy the lower 32 entries into the upper half, converting them to half brightness; then use all 6 bitplanes as a colour index.&lt;br /&gt;
&lt;br /&gt;
PBM images cannot exist in extra half-brite mode.&lt;br /&gt;
&lt;br /&gt;
==== Hold and Modify ====&lt;br /&gt;
&lt;br /&gt;
If the ILBM file contains a CAMG chunk in which bit 11 is set (i.e. 0x800 in hexadecimal) the file expects to make use of the HAM (Hold-And-Modify) mode of the Amiga chipset. In HAM6 format the colour map will have up to 16 entries, but the image will have 6 (or possibly 5 bitplanes). In HAM8 format the colour map will have up to 64 entries but the image will have 8 (or possibly 7 bitplanes).&lt;br /&gt;
&lt;br /&gt;
The last two bitplanes (if an odd number of bitplanes assume an extra bitplane which is always 0) are control flags which indicate how to use the first 4 (or 6) bitplanes.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Control Flags !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 00 || Use bitplanes 0-3 (or 0-5) as a colour map index as normal&lt;br /&gt;
|-&lt;br /&gt;
| 10 || Use the colour of the previous pixel but replace the Blue component with bits from bitplanes 0-3 (or 0-5)&lt;br /&gt;
|-&lt;br /&gt;
| 01 || Use the colour of the previous pixel but replace the Red component with bits from bitplanes 0-3 (or 0-5)&lt;br /&gt;
|-&lt;br /&gt;
| 11 || Use the colour of the previous pixel but replace the Green component with bits from bitplanes 0-3 (or 0-5)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If the first pixel of a scanline is a modification pixel, then modify and use the image border colour.&lt;br /&gt;
&lt;br /&gt;
Note that when using 4 bits to modify a colour component you should use the 4 bits in the upper 4 bits of the component AND in the lower 4 bits (to avoid reducing the overall colour gamut). When using 6 bits this is less important, but you can still put the 2 most significant bits of the modification bits into the least significant two bits of the colour component.&lt;br /&gt;
&lt;br /&gt;
PBM images cannot exist in hold and modify mode.&lt;br /&gt;
&lt;br /&gt;
== Utilities ==&lt;br /&gt;
&lt;br /&gt;
Most utilities that work with LBM and BBM files are rather &#039;&#039;&#039;dated&#039;&#039;&#039;, such as MacPaint or Deluxe Paint.&lt;br /&gt;
&lt;br /&gt;
* [http://settlers2.net/documentation/graphics-files-lbm/ Graphics Workshop 1.1Y] from mid-90s can convert from and to all variants of LBM files; it supports a variety of other image file formats. It is dated but still works on even Windows 10 when running in Windows XP compatibility mode. There is also newer commercial version known as [http://www.mindworkshop.com/gww.html Graphics Workshop Professional] with much more modern UI (seeming to be mid-00s), which however is also dated by today&#039;s standards.&lt;br /&gt;
&lt;br /&gt;
* [http://www.ultimatepaint.com/ Ultimate Paint] can read, write and display palette color cycle animations.&lt;br /&gt;
&lt;br /&gt;
* [http://www.xnview.com/en/nconvert/ XnView&#039;s nconvert] is a free and &#039;&#039;&#039;up to date&#039;&#039;&#039; command line converter.&lt;br /&gt;
&lt;br /&gt;
* [http://www.imageconverterplus.com/ Image Converter Plus] is a program that will convert ILBM files into any number of formats. While the full version is not free, the demo version adds a watermark that can be removed.&lt;br /&gt;
&lt;br /&gt;
* Paint Shop Pro 7.04 and other older versions of PSP can read and write ILBM, but can only read PBM files. PSP7 gets a special mention as the shareware version has a bug that allows the evaluation shutdown mechanism to be skipped by simply opening a file (ie. modify shortcut to always open a file and you won&#039;t be bothered).&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/steffest/DPaint-js DPaint.js] is a new javascript image editor with a strong focus on Amiga formats. Modelled after the original DeluxePaint. It can be hosted locally, or there is an [https://www.stef.be/dpaint/ online version] available&lt;br /&gt;
&lt;br /&gt;
* [[FuryUtils]] is a suite of tools including ImmFile which can convert some LBM files to and from windows Bmp files. Sufficient to support [[Fury of the Furries]]&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
In the [[Commander Keen Dreams]] series of games, compressed standalone ILBM images are used for title screens, but the game does not read most of the ILBM chunks. This is becuase the images were edited in DeluxePaint, then imported directly into the game&#039;s files.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
[https://web.archive.org/web/20190829195455/https://wiki.multimedia.cx/index.php/IFF IFF]&lt;br /&gt;
&lt;br /&gt;
[https://web.archive.org/web/20070911223155/http://www.szonye.com/bradd/iff.html “EA IFF 85” Standard for Interchange Format Files]&lt;/div&gt;</summary>
		<author><name>Carbon14</name></author>
	</entry>
	<entry>
		<id>https://moddingwiki.shikadi.net/w/index.php?title=FuryUtils&amp;diff=11085</id>
		<title>FuryUtils</title>
		<link rel="alternate" type="text/html" href="https://moddingwiki.shikadi.net/w/index.php?title=FuryUtils&amp;diff=11085"/>
		<updated>2023-06-30T13:58:49Z</updated>

		<summary type="html">&lt;p&gt;Carbon14: Update capabilities of the toolset&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Tool Infobox&lt;br /&gt;
 | Platform = Windows, Linux&lt;br /&gt;
 | Release = 2023-04-28 &amp;lt;!-- earliest release date --&amp;gt;&lt;br /&gt;
 | Download = [https://github.com/david-c14/FuryStudio/releases/ Releases]&lt;br /&gt;
 | Edit1 = Extraction&lt;br /&gt;
 | Edit2 = Format Conversion&lt;br /&gt;
 | Games = &lt;br /&gt;
   {{Game|Fury of the Furries}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;FuryUtils&#039;&#039;&#039; is a suite of tools for modding [[Fury of the Furries]]&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;DatFile&#039;&#039;&#039; is a command line tool for packing and unpacking [[DAT Format (Fury of the Furries)|DAT Format]] archive files.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;ImmFile&#039;&#039;&#039; is a command line tool for converting [[LBM Format]] and [[IMM Format (Fury of the Furries)|IMM Format]] images files to and from Windows BMP format files.&lt;br /&gt;
&lt;br /&gt;
* There is also a library suitable for C, C++ or C#, containing the same functionality, if you want to build these formats into your own tools.&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
&lt;br /&gt;
The Utils zip or tar-gz package contains a suite of command line utilities and documentation in markdown format (readable as text). (Windows and Linux)&lt;br /&gt;
&lt;br /&gt;
The Lib zip or tar-gz package contains the core libraries with APIs for C or C++ and a .NET assembly wrapper, along with documentation and code samples. (Windows and Linux) &lt;br /&gt;
&lt;br /&gt;
== Status ==&lt;br /&gt;
&lt;br /&gt;
The suite is currently under active development, and more tools are anticipated.&lt;/div&gt;</summary>
		<author><name>Carbon14</name></author>
	</entry>
</feed>