Content for everyone
Technical stuffLinks
|
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 structure
Notes 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 |
|