In memory of Ben “bushing” Byer, who passed away on Monday, February 8th, 2016.

BRFNT files

From WiiBrew
Jump to navigation Jump to search

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