Content for everyone
Technical stuffLinks
YouTube Videos
|
Analysis of the ART files of Eraser Turnabout, Virtual K'Nex and Waldo Exploring GeographyPlease see my command line PACKER and UNPACKER written in C! These tools can also pack/unpack ART files for Blown Away, Panic in the Park and Waldo at the Circus General structureNotes about the ART filesAn ART file contains several pictures; the names for each picture can be up to 8 chars. Pictures are saved in chunks. At the beginning of each chunk, a 16 bit word defines the length and compression type of the chunk. If raw data is chosen, the max data size is 32767 (0x7FFF) bytes. Notes about the compression:
The uncompressed data is a Windows bitmap, but without the BITMAPINFOHEADER header. 42 4D xx xx xx xx 00 00 00 00 36 04 00 00 Interpreted: bfType 42 4D bfSize xx xx xx xx bfReserved 00 00 00 00 bfOffbits 36 04 00 00 Example: artfile_2_0.h#define ART_NAME_SIZE 8 #define ART_MAGIC_SEQ "ART_DATA" #pragma pack(push, 1) typedef struct tagFileHeader { char magic[ART_NAME_SIZE]; // always "ART_DATA" uint32_t totalHeaderSize; // size of all headers (file header and all picture headers). headerSize/16 = numberPictures uint32_t reserved; // always 0 } FileHeader; typedef struct tagPictureEntryHeader { char name[ART_NAME_SIZE]; uint32_t offset; // offset to the picture (PictureHeader) uint32_t uncompressedSize; // size of the picture (picture data + palette) } PictureEntryHeader; // Commented out because bitfields are implementation specific and therefore not reliable. /* #define ART_COMPRESSIONTYPE_LZW 0 #define ART_COMPRESSIONTYPE_NONE 1 typedef struct tagPictureChunk { unsigned compressionType : 1; // Compression type of the follow-up data // 0 = LZW-like compression (special implementation) // 1 = None unsigned chunkDataSize : 15; // size of the chunk data //char data[]; } PictureChunk; */ #pragma pack(pop) |
Please also see my pages for other Imagination Pilots games: Blown Away | Panic in the Park | Waldo at the Circus | Waldo Exploring Geography | Eraser Turnabout | Virtual K'Nex |