From ModdingWiki
Jump to: navigation, search
There is no image of a modified version of this game — upload one!
Levels?X mark.svg Not editable
Tiles?X mark.svg Not editable
Sprites?X mark.svg Not editable
Fullscreen?X mark.svg Not editable
Sound?X mark.svg Not editable
Music?X mark.svg Not editable
Text?X mark.svg Not editable
Story/cutscenes?X mark.svg Not editable
UI/menus?X mark.svg Not editable

Zool is a Chupa-Chups sponsored platform game.


The following tools are able to work with this game.

Name PlatformGroup/archives Levels Graphics Music Sounds Text Saves .exe patch Notes
Camoto Linux/WindowsEditNoNoNoNoNoNoNo

File formats

The following file formats are used by this game.
Filename Format Details
zool.dat DAT Format (Zool) Archive containing game data
settings Zool Configuration Format Key mapping, high scores, etc.

Preliminary info.

Currently this is about the Amiga CD32 files, it is put here as a reference for attempts on deciphering the PC version.

On the CD32 version of the game, all files are crunched using the FUNGUS cruncher; use xfdmaster to uncrunch them.

Use UAE XFD wrapper (beta) to decrunch files from command line.


Filename Description
*.CHM Character map


Data type Description
UINT32BE iHeights Offset to image heights
UINT32BE iWidths Offset to image widths (0 = 16 px, 1 = 32 px)
UINT32BE iUnknowns Offset to image unknowns (seems to be tile orientation)
UINT32BE iOffsets Offset to image pixels (4-bit graphic planar, see Raw_EGA_data)
Above infos count = iWidths - iHeights
Characters data ...

Some of the files are mal-formed, or not even that format, though.

CHM palette

Their palette comes from an uncompressed WinUAE memory dump taken at the right level, offset 1264, 64 colors in UINT16BE format, 12-bit RGB; each channel nibble is duplicated (OR-ed with itself with a 4 bits left-shifted version).

Pseudo C# example:

       public static IEnumerable<byte[]> FromStream(Stream stream, long position, int colors)
           var reader = new BinaryReader(stream);
           reader.BaseStream.Position = position;
           var bytes = new byte[colors][];
           for (int j = 0; j < colors; j++)
               // 12-bit color : 0RGB
               ushort u = reader.ReadUInt16();
               ushort color = u.ToBigEndian();
               int r = (color & 0x0F00) >> 8;
               int g = (color & 0x00F0) >> 4;
               int b = (color & 0x000F) >> 0;
               // Each channel byte is formed by duplicating the nibble
               var r1 = (byte)(r | (r << 4));
               var g1 = (byte)(g | (g << 4));
               var b1 = (byte)(b | (b << 4));
               bytes[j] = new[] { r1, g1, b1 };
           return bytes;


Amiga stuff by Aybe.