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
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
|
Layer Index
- TXTR Red channel is fill, Green channel is outline
- TXTR Blue channel is fill, Alpha channel is outline
|
0x13
|
u32
|
4
|
Glyph left padding
|
0x17
|
u32
|
4
|
Print head advance
|
0x1B
|
u32
|
4
|
Glyph right padding
|
0x1F
|
u32
|
4
|
Glyph width
|
0x23
|
u32
|
4
|
Glyph height
|
0x27
|
u32
|
4
|
Kerning index
|
0x2B
|
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
|