FONT (File Format)
The FONT format defines fonts that can be used to display text in-game.
| To do: Notate differences between different versions of the format. Only Metroid Prime's FONT version is documented at the moment. Character definition structure should be expanded on; there should be a section explaining what each value does, and it should be made more clear which UV coordinate corresponds to which vertex. |
| This file format needs more research There's some unknowns in the header, and some of the values in the character definition structure should be double-checked. |
Format
Header
| Offset | Type | Size | Description |
|---|---|---|---|
| 0x0 | char[4] | 4 | "FONT" magic fourCC |
| 0x4 | u32 | 4 | Version; see below |
| 0x8 | u32 | 4 | Unknown |
| 0xC | s32 | 4 | Line height |
| 0x10 | u32 | 4 | Paragraph upper margin |
| 0x14 | s32 | 4 | Line margin |
| 0x18 | u32 | 4 | Unknown |
| 0x1C | u16 | 2 | Unknown |
| 0x1E | u32 | 4 | Font size (in points) |
| 0x22 | string | N | Font name; zero-terminated string |
| 0x22+N | TXTR | 4 | Texture ID |
| 0x26+N | u32 | 4 | Unknown |
| 0x2A+N | u32 | 4 | Glyph count |
| 0x2E+N | Glyph[] | - | Glyph table (Version 2, Version 4) |
Version
| Version | Game |
|---|---|
| 1 | Metroid Prime Kiosk Demo |
| 2 | Metroid Prime NTSC 0-00 |
| 4 | Metroid Prime PAL/Player's Choice and Metroid Prime 2 |
| 5 | Metroid Prime 3, DKCR |
Glyph Entry (Version 2)
| Offset | Type | Size | Description |
|---|---|---|---|
| 0x0 | u16 | 2 | UTF-16 character |
| 0x2 | float | 4 | Left UV coordinate |
| 0x6 | float | 4 | Top UV coordinate |
| 0xA | float | 4 | Right UV coordinate |
| 0xE | float | 4 | Bottom UV coordinate |
| 0x12 | u32 | 4 | Left padding |
| 0x16 | u32 | 4 | Print head advance |
| 0x1A | u32 | 4 | Right padding |
| 0x1E | u32 | 4 | Width |
| 0x22 | u32 | 4 | Height |
| 0x26 | u32 | 4 | Base offset |
| 0x2A | u32 | 4 | Kerning index |
| 0x2E | End of glyph definition | ||
Glyph Entry (Version 4)
| Offset | Type | Size | Description |
|---|---|---|---|
| 0x0 | u16 | 2 | UTF-16 character |
| 0x2 | float | 4 | Left UV coordinate |
| 0x6 | float | 4 | Top UV coordinate |
| 0xA | float | 4 | Right UV coordinate |
| 0xE | float | 4 | Bottom UV coordinate |
| 0x12 | u8 | 1 | RGBA layer index |
| 0x13 | u8 | 1 | Glyph left padding |
| 0x14 | u8 | 1 | Print head advance |
| 0x15 | u8 | 1 | Glyph right padding |
| 0x16 | u8 | 1 | Glyph width |
| 0x17 | u8 | 1 | Glyph height |
| 0x18 | u16 | 2 | Kerning index |
| 0x1A | End of glyph definition | ||
Kerning Table
This table is at the end of the file, and defines kerning pairs. It starts with a 32-bit count value and then loops the following structure:
| Offset | Size | Description |
|---|---|---|
| 0x0 | 2 | Character 1 |
| 0x2 | 2 | Character 2 |
| 0x4 | 4 | Kerning adjust |
| 0x8 | End of entry | |