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 77 777763 77 76 77 77 77 76 777763
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 = "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 (firstname.lastname@example.org)
Patched by Anchorite (email@example.com)