Created
July 7, 2014 07:00
-
-
Save Mailaender/bd96dd59e86979c2a604 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
====================== | |
Dune 2 SHP file format | |
====================== | |
Sourced from Red Horizon Utilities by Emanuel Rabina | |
http://www.ultraq.net.nz/redhorizon/ | |
The Dune 2 SHP file, is a multiple image filetype, where each image can have | |
it's own set of dimensions. The file is structured as follows: | |
File header: | |
NumImages (2 bytes) - the number of images in the file | |
Offsets[NumImages + 1] - offset to the image header for an image. The last | |
(2 or 4 bytes each) offset points to the end of the file. The offsets | |
don't take into account the NumImages bytes at the | |
beginning, so add 2 bytes to the offset value to | |
get the actual position of an image header in the | |
file | |
The size of the offsets can be either 2 or 4 bytes. There is no simple way | |
to determine which it will be, but checking the file's 4th byte to see if | |
it's 0, seems to be a commonly accepted practice amongst existing Dune 2 SHP | |
file readers: | |
eg: A 2-byte offset file: 01 00 06 00 EC 00 45 0A ... | |
A 4-byte offset file: 01 00 08 00 00 00 EC 00 ... | |
^^ | |
The marked byte will be 0 in 4-byte offset files, non 0 in 2-byte offset | |
files. | |
Lastly, like C&C SHP files, there is an extra offset, pointing to the end of | |
the file (or what would have been the position of another image header/data | |
pair). | |
Following the file header, are a series of image header & image data pairs. | |
The image header is structured as follows: | |
Image header: | |
Flags (2 bytes) - flags to identify the type of data following the | |
Datasize field, and/or the compression schemes used | |
Slices (1 byte) - number of Format2 slices used to encode the image | |
data. Often this is the same as the height of the | |
image | |
Width (2 bytes) - width of the image | |
Height (1 byte) - height of the image | |
Filesize (2 bytes) - size of the image data in the file | |
Datasize (2 bytes) - size of the image data when Format2 encoded/compressed | |
Regarding the flags, there seem to be 4 values: | |
- 00000000 (0) = Decompress with Format80, then Format2 | |
- 00000001 (1) = (see 3) | |
- 00000010 (2) = Decompress with Format2 | |
- 00000011 (3) = A small 16-byte lookup table follows, and the image data | |
should be decompressed with Format80 then Format2. | |
- 00000101 (5) = The first byte gives the size of the lookup table that | |
follows, and the image data should be decompressed with | |
Format80 then Format2. | |
And after this image header is the image data. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment