58 lines
2.7 KiB
Plaintext
58 lines
2.7 KiB
Plaintext
======================
|
|
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.
|