Realms of Chaos Sprite Format
| Format type | Tileset |
|---|---|
| Hardware | VGA |
| Max tile count | Unlimited |
| Palette | Shared |
| Tile names? | No |
| Minimum tile size (pixels) | 0 |
| Maximum tile size (pixels) | 255×255 |
| Plane count | 1 |
| Plane arrangement | Unknown |
| Transparent pixels? | Unknown |
| Hitmap pixels? | No |
| Metadata? | None |
| Supports sub-tilesets? | No |
| Compressed tiles? | No |
| Hidden data? | No |
| Games |
A Realms of Chaos sprite contains multiple 256-colour VGA images (for example, an enemy sprite contains all the animation frames for that sprite.)
File format
Header
All sprite files begin with a string containing the sprite's filename and some unknown data.
| Data type | Description |
|---|---|
| CHAR[16] cFilename | Name of this sprite file ! (padded with 0's or random data?) |
| BYTE[5] unknown | Unknown data (might even be more padding) |
Image list
A number of image blocks immediately follow the header, repeating until EOF:
| Data type | Description |
|---|---|
| UINT16 iSize | Size of this sprite |
| BYTE cData[iSize] | Block of image data, iSize bytes long |
Image format
Each of the blocks of image data in the above structure contains an image header, followed by the pixel data. The header looks like this:
| Data type | Description |
|---|---|
| UINT8 iHeight | Height of the image in pixels |
| UINT8 iWidth | Width of the image in pixels |
| BYTE[8] bUnknown | ! might be collision data? |
| UINT16LE iDataSize | Size of pixel data, in bytes |
| BYTE[7] bNulls | Always 0 |
| BYTE[iDataSize] bPixelData | Pixel data (see below) |
| UINT16LE[iWidth] iColOffsets | ! Indices into pixel data for each column? |
The pixel data stores the pixel columns sequentially, using (iType, iCount) pairs to skip transparent pixels. Both values are stored as UINT8 values. Possible values for iType are:
| iType | Description |
|---|---|
| 0 | Skip iCount pixels (the pixels are transparent) |
| 1 | Write iCount pixels to the screen |
| 2 | Write iCount pixels to the screen and end this column (increase X and reset Y) |
| 3 | End of the image |
If iType is 1 or 2, iCount byte values follow after the iCount byte. These are the pixels to be drawn onto the screen.
Note: Each sprite image seems to always end with the (iType,iCount) pairs (2,0), (0,0), (3,0).
Credits
This file format was reverse engineered by K1n9_Duk3. If you find this information helpful in a project you're working on, please give credit where credit is due. (A link back to this wiki would be nice too!)