BRFNT files: Difference between revisions
Incomplete documentation. I'll finish it later. |
Randomdude (talk | contribs) mNo edit summary |
||
| Line 9: | Line 9: | ||
The endianess is Big Endian. | The endianess is Big Endian. | ||
RFNT Header | |||
10h bytes | |||
0000: 'RFNT' | |||
0004: FE FF 01 04 | |||
0008: DWORD length of whole file | |||
000C: WORD ?? | |||
000E: WORD ?? (language flag?) | |||
FINF Header | |||
20H bytes: | |||
0000: 'FINF' | |||
0004: DWORD finf size | |||
0008: BYTE ?? | |||
0009: BYTE font height - 1 | |||
000A: WORD ?? | |||
000C: BYTE ?? | |||
000D: BYTE character width or height + 1 (?) | |||
000E: BYTE character height or width + 1 (?) | |||
000F: BYTE 00 (?) | |||
0010: DWORD TGLP section position | |||
0014: DWORD CWDH section position | |||
0018: DWORD CMAP section position | |||
001C: BYTE font height - 1 (excluding left line?) | |||
001D: BYTE font width - 1 (excluding bottom line?) | |||
001E: BYTE character width or height - 1 (?) | |||
001F: BYTE 00 (?) | |||
TGLP Header | |||
30h bytes | |||
0000: 'TGLP' | |||
0004: DWORD length of 'TGLP' section | |||
0008: BYTE font width - 1 | |||
0009: BYTE font height - 1 | |||
000A: BYTE character width - 1 | |||
000B: BYTE character height - 1 | |||
000C: DWORD length of 1 image | |||
0010: WORD images count | |||
0012: WORD ?? | |||
0014: WORD characters per row | |||
0016: WORD characters per column | |||
0018: WORD width of image | |||
001A: WORD height of image | |||
001C: DWORD position of data | |||
TGLP Data | |||
Bitmap is formed in a Zig-zag way. | |||
A single block of bitmap looks like this: | |||
00 01 02 03 04 05 06 07 | |||
08 09 0A 0B 0C 0D 0E 0F | |||
10 11 12 13 14 15 16 17 | |||
18 19 1A 1B 1C 1D 1E 1F | |||
Multiple blocks: | |||
B01 B02 B03 ... B08 (assume width=64) | |||
B09 B0A B0B ... | |||
... | |||
Multiple images: | |||
I01 | |||
I02 | |||
I03 | |||
... | |||
CWDH Section | |||
0000: 'CWDH' | |||
0004: DWORD length of this section | |||
0008: DWORD last character ? (= character count - 1) | |||
000C: DWORD first character ? (= 0) | |||
0010: character count * ( | |||
BYTE space width ? | |||
BYTE character width | |||
BYTE smaller than character width ) | |||
????: (0~3) * 00 (align to 4 bytes) | |||
CMAP Section | |||
Type 1 : | |||
0000: ‘CMAP’ | |||
0004: DWORD length of this section | |||
0008: WORD UTF-16 code of first char | |||
000A: WORD UTF-16 code of last char | |||
000C: DWORD 0 ? | |||
0010: DWORD position of next CMAP + 8 | |||
0014: WORD offset of first char | |||
0016: WORD ? | |||
Type 2 : | |||
0000: ‘CMAP’ | |||
0004: DWORD length of this section | |||
0008: WORD 0 | |||
000A: WORD -1 | |||
000C: 00 02 00 00 ? | |||
0010: DWORD position of next CMAP + 8 (0 if no next) | |||
0014: WORD characters in this table (tbl_char count) | |||
0016: tbl_char count * ( | |||
WORD UTF-16 code of char | |||
WORD offset of char ) | |||
????: WORD 0 | |||
Revision as of 19:24, 4 June 2010
This is incomplete.
Stores images of characters used to display text. Can be found in Mario Kart Wii and possibly others.
The file structure is composed by a header and sections. There always appears to be a FINF, TGLP and CWDH section along with one or more CMAP sections.
The file is not completely known.
The endianess is Big Endian.
RFNT Header 10h bytes
0000: 'RFNT'
0004: FE FF 01 04
0008: DWORD length of whole file
000C: WORD ??
000E: WORD ?? (language flag?)
FINF Header 20H bytes:
0000: 'FINF'
0004: DWORD finf size
0008: BYTE ??
0009: BYTE font height - 1
000A: WORD ??
000C: BYTE ??
000D: BYTE character width or height + 1 (?)
000E: BYTE character height or width + 1 (?)
000F: BYTE 00 (?)
0010: DWORD TGLP section position
0014: DWORD CWDH section position
0018: DWORD CMAP section position
001C: BYTE font height - 1 (excluding left line?)
001D: BYTE font width - 1 (excluding bottom line?)
001E: BYTE character width or height - 1 (?)
001F: BYTE 00 (?)
TGLP Header 30h bytes
0000: 'TGLP'
0004: DWORD length of 'TGLP' section
0008: BYTE font width - 1
0009: BYTE font height - 1
000A: BYTE character width - 1
000B: BYTE character height - 1
000C: DWORD length of 1 image
0010: WORD images count
0012: WORD ??
0014: WORD characters per row
0016: WORD characters per column
0018: WORD width of image
001A: WORD height of image
001C: DWORD position of data
TGLP Data Bitmap is formed in a Zig-zag way.
A single block of bitmap looks like this:
00 01 02 03 04 05 06 07
08 09 0A 0B 0C 0D 0E 0F
10 11 12 13 14 15 16 17
18 19 1A 1B 1C 1D 1E 1F
Multiple blocks:
B01 B02 B03 ... B08 (assume width=64)
B09 B0A B0B ...
...
Multiple images:
I01
I02
I03
...
CWDH Section 0000: 'CWDH'
0004: DWORD length of this section
0008: DWORD last character ? (= character count - 1)
000C: DWORD first character ? (= 0)
0010: character count * (
BYTE space width ? BYTE character width BYTE smaller than character width ) ????: (0~3) * 00 (align to 4 bytes)
CMAP Section Type 1 :
0000: ‘CMAP’
0004: DWORD length of this section
0008: WORD UTF-16 code of first char
000A: WORD UTF-16 code of last char
000C: DWORD 0 ?
0010: DWORD position of next CMAP + 8
0014: WORD offset of first char
0016: WORD ?
Type 2 :
0000: ‘CMAP’
0004: DWORD length of this section
0008: WORD 0
000A: WORD -1
000C: 00 02 00 00 ?
0010: DWORD position of next CMAP + 8 (0 if no next)
0014: WORD characters in this table (tbl_char count)
0016: tbl_char count * (
WORD UTF-16 code of char WORD offset of char ) ????: WORD 0