Raptor PIC Format
Format type | Image |
---|---|
Hardware | VGA |
Colour depth | 8-bit (VGA) |
Minimum size (pixels) | 0×0 |
Maximum size (pixels) | 2147483648×2147483648 |
Palette | Shared |
Plane count | 1 |
Transparent pixels? | No |
Hitmap pixels? | No |
Games |
The Raptor PIC Format is used by Raptor to store various images, sprites and tiles. The format is raw VGA data with a custom header.
File format
Data type | Name | Description |
---|---|---|
UINT32LE | unknown1 | Always 1 when iLineCount is 0 |
UINT32LE | unknown2 | Always 1 when iLineCount is 0 |
UINT32LE | iLineCount | Number of non-transparent image lines? |
UINT32LE | width | Width of the image, in pixels |
UINT32LE | height | Height of the image, in pixels |
UINT8 | data[] | 8bpp raw VGA data, one byte per pixel; or sprite layout blocks |
! The first two values are unknown. Possibly they might be hotspot coordinates. If iLineCount is 0 then the two values are always 1.
If iLineCount is 0, then the rest of the file are the raw pixel values (width*height bytes total) and the image has no transparent parts.
If iLineCount is NOT 0, then the rest of the file consists of multiple blocks in the following format:
0 | UINT32LE | iPosX relative to left edge of image 4 | UINT32LE | iPosY relative to top edge of image 8 | UINT32LE | iLinearOffset relative to top-left pixel 12 | UINT32LE | iCount number of pixels to write (in that row) 16 | BYTE[iCount] | bPixels pixels to write
The iLinearOffset value can be used to speed up the drawing process to a 320x200 pixel VGA video buffer. The iLinearOffset value could also be calculated like this:
iLinearOffset = iPosX + 320*iPosY
This formula could also be used as a validity check.
The actual value of iLineCount should not be used to detect the end of the image data. The PIC files appear to always end with a terminating data block where both iLinearOffset and iCount are set to -1 (0xFFFFFFFF) with no additional pixel data following that block.
Credits
This file format, including the decryption algorithm, was reverse engineered by Malvineous. Sprite format 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!)