Miptex
Miptex is an 8-bit texture format used by Quake and GoldSrc. They can be stored individually with a .mip
file, but most tools and engines expect them to be embedded in a BSP or WAD.
Miptex are always a multiple of 16, and contains the full-size texture plus 3 smaller mipmaps, although these mipmaps are only used by the software renderer (the OpenGL renderer uses the GPU to generate 32-bit mipmaps). Some programs also will use these mipmaps, such as TrenchBroom.
Half-Life extends the miptex format to add a dedicated palette, instead of relying upon an external shared palette. This is an uncompressed 768 byte array of 256 24-bit RGB values, like Quake's palette.lmp.
Technical
This work is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License; version 2 as published by the Free Software Foundation. This work is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See version 2 of the GNU General Public License for more details.
The header of a miptex lump can be represented by the following C struct (from client/bspfile.h
in the Quake I source code release):
#define MIPLEVELS 4
typedef struct miptex_s
{
char name[16];
unsigned width, height;
unsigned offsets[MIPLEVELS]; // four mip maps stored
} miptex_t;
It is then followed by raw 8-bit image data for each mipmap, at the offsets relative to the start of the lump.
For WAD3 miptex, the final mipmap is immediately followed by a 16-bit signed short enumerating the number of palette indices (should always be 256). That is then followed by raw RGB888 image data, representing the palette.
Derivatives
Quake II encapsulates a modified version of miptex in a file format called WAL, which is always stored individually per texture and contains additional surface metadata for compilers. Variations of WAL, such as Daikatana WALs, M8, and M32, are used in other Quake II Engine games, and add some additional features.