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