Magic & Mayhem sprites file
From Just Solve the File Format Problem
A collection of sprites for Magic & Mayhem game.
Description
All integers are little-endian.
Signature - "SPR\0"
|
4 bytes |
| File size | 4 bytes |
| Number of frames (sprites) | 4 bytes |
| Number of palettes | 4 bytes |
| Unknown | 4 bytes |
| Palettes | 256 * 3 bytes per each palette |
| Frame offsets | 4 bytes * Number of frames; 0 is first byte after file header |
| Size | 4 bytes |
| Width | 4 bytes |
| Height | 4 bytes |
| Origin x | 4 bytes (signed) |
| Origin y | 4 bytes (signed) |
| Name | 8 bytes, null-terminated |
| Palette number (0-based) | 4 bytes |
| Unknown 1 (offset?) | 4 bytes |
| Unknown 2 (offset?) | 4 bytes |
| Offsets into lines and deltas for each row | 4 bytes * 2 * Height |
| Deltas offset (from beginning of sprite header) | 4 bytes |
| Pixels offset (from beginning of sprite header) | 4 bytes |
Sprite pixels are encoded with custom RLE scheme. Each scanline is:
- Read n number of pixels from deltas (1 byte), advancing deltas pointer
- Put n pixels from pixels offset (each pixel is 1 byte index into sprite's palette), advancing pixels pointer
- Read b number of blank pixels from deltas, advancing deltas pointer
- Put b blank pixels
- Repeat until whole width is filled