Back to Main Index

Technical Data

Extended Bitmaps and FS2000

Standard BMP Structures

BitMapHeader

WORD
DWORD WORD
WORD
DWORD

FileType (always 'B' 'M')
FileSize (usually 0 for uncompressed images)
Reserved1 (0)
Reserved2 (0)
BitmapOffset (offset to start of image data)

BitMapInfo

DWORD
LONG
LONG
WORD
WORD
DWORD
DWORD
LONG
LONG
DWORD
DWORD

Size;
Width;
Height;
Planes;
BitsPerPixel;
Compression; (0 for 8 bit, 3 for 16 bit)
SizeOfBitmap;
HorzResolution;
VertResolution;
ColorsUsed;
ColorsImportant;

BitFieldsMask
(16/32 bit images)

DWORD
DWORD
DWORD

RedMask
GreenMask
BlueMask
The 3 masks used in 16 bit files set which way the 16 bits are split between the 3 colour channels. The 2 main formats you will find are 565 (R=0xF8000000 G=0x07E00000 B=0x001F0000) and 444 (R=0xF0000000 G=0x0F000000 B=0x00F00000). The NT 3.0 format only allows for 3 channels so the Extended Bitmap is assuming that the spare 4 bits with 444 are a transparency channel. 32 bit files use the Masks in the same way to define the split between colour channels.

PaletteEntry
(8 bit Images)

BYTE
BYTE
BYTE
BYTE

Blue
Green
Red
Pad (used for Transparency in Extended Bitmaps)



Extended Bmp Structures

FS70

LONG

ID (always 'F' 'S' '7' '0')
  LONG HeaderLength (always 20)
  LONG Unknown1 - Values seen 0,1,3,7
  WORD Unknown2 - Values seen 0,1
  WORD ImageSize (largest image = 1<<ImageSize)
  LONG Unknown3 - Values seen 0
The new FS70 Header section that appears in some FS2000 Extended Bitmaps is not fully understood yet. Many have all 3 Unknown entries set to zero. Unknown1 may be a indication of texture type - Ground textures have a value of 3 except for the lm (Night) versions which have a value of 7. Sea and Sand textures seem to have a value of 1 and most other textures have 0

The FS70 section appears in some 8 bit Bitmaps and all 16 bitBitmaps. Interestingly all the Building (Day) textures are without the section but all the Building (Night) textures have it.

The FS70 Header will always appear immediately before the start of the Pixel Data. Because this is a "Non-Standard" addition to the Bmp format many Paint programs will not realise it is there and start reading Pixel data at the start of the FS70 block and so display the image offset by 20 pixels (with 8 bit images). The only safe way to read an image in is to test the "BitMapOffset" in the BitMapHeader and use that to identify the start of the actual Pixel data.

Normal 8 bit Bitmap 256x256

BitMapHeader
BitMapInfo
PaletteEntry[256]
Pixel Data 256x256
14
40
1024
65536

Total Filesize 66614

Extended 8 bit Bitmap 256x256

BitMapHeader
BitMapInfo
PaletteEntry[256] - Includes Transparency data
FS70 Header - Not in all images
Pixel Data 256x256
Pixel Data 128x128
Pixel Data 64x64
Pixel Data 32x32
Pixel Data 16x16
Pixel Data 8x8
Pixel Data 4x4
Pixel Data 2x2
Pixel Data 1x1
14
40
1024
20
65536
16384
4096
1024
256
64
16
4
1

Total Filesize FS70
Total Filesize CFS
88479
88459

Extended 16 bit Bitmap 256x256

BitMapHeader
BitMapInfo
BitFieldsMask
FS70 Header
Pixel Data 256x256
Pixel Data 128x128
Pixel Data 64x64
Pixel Data 32x32
Pixel Data 16x16
Pixel Data 8x8
Pixel Data 4x4
Pixel Data 2x2
Pixel Data 1x1
14
40
4
20
131072
32768
8192
2048
512
128
32
8
2

Total Filesize 174848