BTI
BTI is an image file format similar to TEX0, TPL and BREFT file formats. The only difference is the file header.
File Format
The file format is very simple and starts with a file header followed by the image data. All data is written in big endian.
File Header
The following table shows the file header. It is 0x20 bytes long. There is no magic to identify BTI files, so tools may do some plausibility checks to identify them.
File Header (Table inspired off of this') | ||
---|---|---|
Offset | Type | Description |
0x00 | Byte | Image format |
0x01 | Byte | Enable alpha (0x00 means alpha is disabled, anything higher means alpha is enabled) |
0x02 | UInt16 | Width of the image in pixels |
0x04 | UInt16 | Height of the image in pixels |
0x06 | Byte | Wrap S[1] (0x01 for posteffect.bti, 0x00 for others). Probably repeat, clamp or mirror wraps for U projection maps |
0x07 | Byte | Wrap T[2] (0x01 for posteffect.bti, 0x00 for others). Probably repeat, clamp or mirror wraps for V projection maps |
0x08 | UInt16 | Palette format |
0x0A | UInt16 | Number of palette entries |
0x0C | UInt32 | Offset to palette data, relative to the start of the file header |
0x10 | Boolean | Mipmap Enable Whether the texture will use mipmaps or not |
0x11 | Boolean | EnableEdgeLOD |
0x12 | Boolean | Clamp LOD Bias |
0x13 | Boolean | Max Anisotropy |
0x14 | Byte | Minification filter type |
0x15 | Byte | Magnification filter type |
0x16 | Byte | Min LOD The minimum LOD clamp, scaled by 8. Usually 0 so the 0th Mipmap level is used. |
0x17 | Byte | Max LOD The maximum LOD clamp, scaled by 8. This should practically have the same value as MipmapCount. |
0x18 | Byte | Total number of images, thus number of mipmaps + 1. Apparently unread by the engine itself, it only uses the MipmapEnable flag and the max LOD field. |
0x19 | Byte | Unknown Probably Padding |
0x1A | UInt16 | LOD Bias The LOD bias of the texture, scaled by 100. |
0x1C | UInt32 | Offset to image data, relative to the start of the file header |
0x20 | End of file header |
Palette Data
Image Formats (Table inspired off of this) | ||||||
---|---|---|---|---|---|---|
ID | Name | Bits per pixel | Block width | Block height | Block size | Type |
0x00 | I4 | 4 | 8 | 8 | 32 bytes | Gray |
0x01 | I8 | 8 | 8 | 4 | 32 bytes | Gray |
0x02 | IA4 | 8 | 8 | 4 | 32 bytes | Gray + Alpha |
0x03 | IA8 | 16 | 4 | 4 | 32 bytes | Gray + Alpha |
0x04 | RGB565 | 16 | 4 | 4 | 32 bytes | Color |
0x05 | RGB5A3 | 16 | 4 | 4 | 32 bytes | Color + Alpha |
0x06 | RGBA32 | 32 | 4 | 4 | 64 bytes | Color + Alpha |
0x08 | C4 | 4 | 8 | 8 | 32 bytes | Palette (IA8, RGB565, RGB5A3) |
0x09 | C8 | 8 | 8 | 4 | 32 bytes | Palette (IA8, RGB565, RGB5A3) |
0x0A | C14X2 | 16 | 4 | 4 | 32 bytes | Palette (IA8, RGB565, RGB5A3) |
0x0E | CMPR | 4 | 8 | 8 | 32 bytes | Color + 1 bit Alpha (compressed) |
Tools
Wexos's Toolbox can convert PNG files into BTI images. (Only supports certain pallets.)
Wiimms SZS Tools can convert BTI and PNG images in any direction. It may also convert the image and palette formats and add or remove mipmaps on the fly.
Switch Toolbox can open BTI images and convert them into PNG files.
BTIConv is a cross platform solution to convert BTI and PNG images in any direction. Built in NET 6.0
Libraries
Hack.io.BTI Windows only C# library to help manipulating BTI images