AAF File FormatEdit

The AAF Font File Format is used to store fonts in Fallouts 1 & 2.. Only the AAF files used in the English versions are discussed here, there may or may not be variations for other languages.

The AAF file stores a separate glyph for each of the 256 position in the ASCII table. The fonts in an AAF file are typically non-fixed size, i.e. each glyph has it's own width and height. A glyph is defined by a rectangular bitmap representing the pixels of the glyph, corresponding to the way that it appears on the screen. Each pixel can have a possible value in the range of 0 to 9.

  • 0 means that the pixel is transparent.
  • The values 1 to 9 represent the relative brightness of that pixel, with 9 being the brightest. There does not appear to be a linear increase in brightness from values 1 to 9.

Here is an example of the bitmap of a glyph. This glyph is from the file FONT1.AAF and represents the character 'b' (ASCII 98).

  77  76
  77  77
  77  76

Pixels with value 0 are not shown as they are transparent. The higher numbers 7 and 6 represent the brighter parts of the glyph, while the 3 would be much duller in colour. This would be expected for the rounder corners of the b.

Offset Size (bytes) Data Type Description
0x0000 4 char[4] = "AAFF" Signature used to identify file type.
0x0004 2 unsigned short Maximum glyph Height.This is the maximum height of the glyph, including ascenders and descenders.
0x0006 2 unsigned short Horizontal gap.Gap size (in pixels) between adjacent glyphs.
0x0008 2 unsigned short Width of space.The width of the space character.
0x000A 2 unsigned short Vertical gap.The number of pixels between two lines of glyphs.
0x000C 2 unsigned short GLYPH-0-WIDTH : Width of glyph 0.The width (in pixels) of the glyph corresponding to ascii 0.
0x000E 2 unsigned short GLYPH-0-HEIGHT : Height of glyph 0.The height (in pixels) of the glyph corresponding to ascii 0.
0x0010 4 unsigned long Offset of glyph 0.The offset in this AAF file where the data for glyph 0 is stored.You need add 0x080C to this value to getting REAL offset from begin of file.Note: If GLYPH-x-WIDTH * GLYPH-x-HEIGHT = 0 (NULL glyph), then this value is offset of next "REAL" glyph.
0x0014 2 unsigned short GLYPH-1-WIDTH : Width of glyph 1.
0x0016 2 unsigned short GLYPH-1-HEIGHT : Height of glyph 1.
0x0018 4 unsigned long Offset of glyph 1. You need add 0x080C to this value to getting REAL offset from begin of file.
0x001C (2 + 2 + 2) * (256 - 2) Descriptions of glyphs 2 through 255, as described above.
0x080C GLYPH-0-WIDTH * GLYPH-0-HEIGHT byte = [0..9] Pixel data for glyph 0. Contains the pixel data for the glyph. Each pixel in the glyph is represented by one byte, with possible values in the range 0 to 9. A value of 0 means the pixel is transparent, while values 1 to 9 represent different brightness values of the pixel (1 is dark and 9 is bright). Pixel data is starts at the top left corner of the glyph and increases left to right, then top to bottom.
0x080C + (GLYPH-0-WIDTH * GLYPH-0-HEIGHT) GLYPH-1-WIDTH * GLYPH-1-HEIGHT byte = [0..9] Pixel data for glyph 1.
0x080C + (GLYPH-0-WIDTH * GLYPH-0-HEIGHT) + (GLYPH-1-WIDTH * GLYPH-1-HEIGHT) ... byte = [0..9] Pixel data for glyphs 2 to 255, as described above.

Note: All integers are in Motorola format.

Created by Noid (

Patched by Anchorite (

Found in TeamX's offline docs