Magic & Mayhem sprites file
From Just Solve the File Format Problem
(Difference between revisions)
(Created page with "{{FormatInfo | name = Magic & Mayhem sprites file | formattype = electronic | subcat = Game data files | subcat2 = | subcat3 = | subcat4 ...") |
|||
| Line 26: | Line 26: | ||
== Description == | == Description == | ||
| − | All integers are little-endian. | + | All integers are [[Endianness|little-endian]]. |
{| class="wikitable" | {| class="wikitable" | ||
| Line 39: | Line 39: | ||
|4 bytes | |4 bytes | ||
|- | |- | ||
| − | |Number of | + | |Number of palettes |
|4 bytes | |4 bytes | ||
|- | |- | ||
| Line 45: | Line 45: | ||
|4 bytes | |4 bytes | ||
|- | |- | ||
| − | | | + | |Palettes |
| − | |256 * 3 bytes per each | + | |256 * 3 bytes per each palette |
|- | |- | ||
|Frame offsets | |Frame offsets | ||
| Line 73: | Line 73: | ||
|8 bytes, null-terminated | |8 bytes, null-terminated | ||
|- | |- | ||
| − | | | + | |Palette number (0-based) |
|4 bytes | |4 bytes | ||
|- | |- | ||
| Line 95: | Line 95: | ||
|} | |} | ||
| − | Sprite pixels are encoded with custom RLE scheme. Each scanline is: | + | Sprite pixels are encoded with custom [[Run-length encoding|RLE]] scheme. Each scanline is: |
* Read ''n'' number of pixels from ''deltas'' (1 byte), advancing ''deltas'' pointer | * 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 | + | * 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 | * Read ''b'' number of blank pixels from ''deltas'', advancing ''deltas'' pointer | ||
* Put ''b'' blank pixels | * Put ''b'' blank pixels | ||
| Line 107: | Line 107: | ||
* [https://github.com/saniv/sau/blob/master/src/fmt_spr.c Sprite and Archive Utility - Magic & Mayhem sprite decoder source] | * [https://github.com/saniv/sau/blob/master/src/fmt_spr.c Sprite and Archive Utility - Magic & Mayhem sprite decoder source] | ||
* [https://gist.github.com/kolen/2ece70493ba5d9510db01823bb6ac78e Incomplete Kaitai Struct format spec] | * [https://gist.github.com/kolen/2ece70493ba5d9510db01823bb6ac78e Incomplete Kaitai Struct format spec] | ||
| + | * [[Wikipedia: Magic and Mayhem]] | ||
Latest revision as of 14:43, 23 November 2018
A collection of sprites for Magic & Mayhem game.
[edit] 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