Magic & Mayhem sprites file

From Just Solve the File Format Problem
(Difference between revisions)
Jump to: navigation, search
(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 pallettes
+
|Number of palettes
 
|4 bytes
 
|4 bytes
 
|-
 
|-
Line 45: Line 45:
 
|4 bytes
 
|4 bytes
 
|-
 
|-
|Pallettes
+
|Palettes
|256 * 3 bytes per each pallette
+
|256 * 3 bytes per each palette
 
|-
 
|-
 
|Frame offsets
 
|Frame offsets
Line 73: Line 73:
 
|8 bytes, null-terminated
 
|8 bytes, null-terminated
 
|-
 
|-
|Pallette number (0-based)
+
|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 pallette), advancing ''pixels'' 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
 
* 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

File Format
Name Magic & Mayhem sprites file
Ontology
Extension(s) .spr

A collection of sprites for Magic & Mayhem game.

[edit] Description

All integers are little-endian.

File header
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
Sprite (frame)
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
Offset into lines and deltas
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

[edit] Links

Personal tools
Namespaces

Variants
Actions
Navigation
Toolbox