.BLP

From Wikipedia, the free encyclopedia

.BLP files are texture files used by games made by Blizzard Entertainment. While Blizzard provides Custom Interface Kit for extracting the user interface files from the World of Warcraft .MPQs, they do not provide a utility to view the .BLP files contained within. Also, .BLP graphics were used for Warcraft III, and are also stored within .MPQs.

Contents

[edit] Format

The file starts with a proprietary header, followed by the texture data. The texture data is typically stored in DXT1, DXT3, uncompressed or possibly DXT5. It is important to note that the size of the image is a power of 2.

[edit] Converters

Several third party applications exist that can convert .BLP files to .tga files and vice versa. Some of the programs were made for Warcraft III textures though, and don't work for all Blizzard game textures. These converters have become very important to the Warcraft III modding community, and have been the doorway to the vast amount of customised skins available for download.

[edit] Specification

Note that all types are little-endian.

BLP2 Format

struct BLP2Header
{
    FourCC      ID; // Always 'BLP2'
    UInt32      Type;
    UInt8       Encoding;
    UInt8       AlphaDepth;
    UInt8       AlphaEncoding;
    UInt8       HasMips;
    UInt32      Width;
    UInt32      Height;
    UInt32      Offsets[16];
    UInt32      Lengths[16];
    RGBAColor8  Palette[256];
};

Type
    0: JPEG compression
    1: Uncompressed or DirectX compression

Encoding
    1: Uncompressed
    2: DirectX compression

AlphaDepth
    0: No alpha channel
    1: 1 bit alpha
    8: 8 bit alpha

AlphaEncoding
    0: DXT1 alpha (0 or 1 bit alpha)
    1: DXT2/3 alpha (4 bit alpha)
    7: DXT4/5 alpha (interpolated alpha)

HasMips
    0: No mip levels
    1: Mip levels present (the number of levels is determined by the image size)

Width, Height: Dimensions of the image in pixels (always a power of two)

Offsets[0]: Offset from the start of the file to the image data
Lengths[0]: Length in bytes of the image data
Palette: 4-byte RGBA color values for paletted textures (this field is present regardless of whether the texture actually uses palettes)

Type 1 Encoding 0 AlphaDepth 0 (uncompressed paletted image with no alpha)

Each by of the image data is an index into Palette which contains the actual RGB value for the pixel. Although the palette entries are 32-bits, the alpha value of each Palette entry may contain garbage and should be discarded.

Type 1 Encoding 1 AlphaDepth 1 (uncompressed paletted image with 1-bit alpha)

This is the same as Type 1 Encoding 1 AlphaDepth 0 except that immediately following the index array is a second image array containing 1-bit alpha values for each pixel. The first byte of the array is for pixels 0 through 7, the second byte for pixels 8 through 15 and so on. Bit 0 of each byte corresponds to the first pixel (leftmost) in the group, bit 7 to the rightmost. A set bit indicates the pixel is opaque while a zero bit indicates a transparent pixel.

Type 1 Encoding 1 AlphaDepth 8(uncompressed paletted image with 8-bit alpha)

This is the same as Type 1 Encoding 1 AlphaDepth 0 except that immediately following the index array is a second image array containing the actual 8-bit alpha values for each pixel. This second array starts at BLP2Header.Offset[0] + BLP2Header.Width * BLP2Header.Height.

Type 1 Encoding 2 AlphaDepth 0 (DXT1 no alpha)

The image data is formatted using DXT1 compression with no alpha channel.

Type 1 Encoding 2 AlphaDepth 1 (DXT1 one bit alpha)

The image data is formatted using DXT1 compression with a one-bit alpha channel.

Type 1 Encoding 2 AlphaDepth 8 AlphaEncoding 1(DXT3)

The image data is formatted using DXT3 compression.

Type 1 Encoding 2 AlphaDepth 8 AlphaEncoding 7(DXT5)

The image data is formatted using DXT5 compression.

[edit] References