Zool
Zool is a Chupa-Chups sponsored platform game.
Tools
The following tools are able to work with this game.
Name | Platform | Group/archives | Levels | Graphics | Music | Sounds | Text | Saves | .exe patch | Notes |
---|---|---|---|---|---|---|---|---|---|---|
Camoto | Linux/Windows | Edit | No | No | No | No | No | No | No |
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. |
Notice that in the full version the game data is in zool.dat, but in the two demo versions the game data is uncompressed in individual files.
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.
Formats
Filename | Description |
---|---|
*.CHM | Character map |
CHM
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;
}
Credits
Amiga stuff by Aybe.