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

Difference between revisions of "BRFNT files"

From WiiBrew
Jump to navigation Jump to search
m
Line 12: Line 12:
 
10h bytes
 
10h bytes
  
0000: 'RFNT'
+
0x0000: 'RFNT'
  
0004: FE FF 01 04
+
0x0004: FE FF 01 04
  
0008: DWORD length of whole file
+
0x0008: DWORD length of whole file
  
000C: WORD ??
+
0x000C: WORD ??
  
000E: WORD ?? (language flag?)
+
0x000E: WORD ?? (language flag?)
  
 
FINF Header
 
FINF Header
 
20H bytes:
 
20H bytes:
  
0000: 'FINF'
+
0x0000: 'FINF'
  
0004: DWORD finf size
+
0x0004: DWORD finf size
  
0008: BYTE ??
+
0x0008: BYTE ??
  
0009: BYTE font height - 1
+
0x0009: BYTE font height - 1
  
000A: WORD ??
+
0x000A: WORD ??
  
000C: BYTE ??
+
0x000C: BYTE ??
  
000D: BYTE character width or height + 1 (?)
+
0x000D: BYTE character width or height + 1 (?)
  
000E: BYTE character height or width + 1 (?)
+
0x000E: BYTE character height or width + 1 (?)
  
000F: BYTE 00 (?)
+
0x000F: BYTE 00 (?)
  
0010: DWORD TGLP section position
+
0x0010: DWORD TGLP section position
  
0014: DWORD CWDH section position
+
0x0014: DWORD CWDH section position
  
0018: DWORD CMAP section position
+
0x0018: DWORD CMAP section position
  
001C: BYTE font height - 1 (excluding left line?)
+
0x001C: BYTE font height - 1 (excluding left line?)
  
001D: BYTE font width - 1 (excluding bottom line?)
+
0x001D: BYTE font width - 1 (excluding bottom line?)
  
001E: BYTE character width or height - 1 (?)
+
0x001E: BYTE character width or height - 1 (?)
  
001F: BYTE 00 (?)
+
0x001F: BYTE 00 (?)
  
 
TGLP Header
 
TGLP Header
 
30h bytes
 
30h bytes
  
0000: 'TGLP'
+
0x0000: 'TGLP'
  
0004: DWORD length of 'TGLP' section
+
0x0004: DWORD length of 'TGLP' section
  
0008: BYTE font width - 1
+
0x0008: BYTE font width - 1
  
0009: BYTE font height - 1
+
0x0009: BYTE font height - 1
  
000A: BYTE character width - 1
+
0x000A: BYTE character width - 1
  
000B: BYTE character height - 1
+
0x000B: BYTE character height - 1
  
000C: DWORD length of 1 image
+
0x000C: DWORD length of 1 image
  
0010: WORD images count
+
0x0010: WORD images count
  
0012: WORD ??
+
0x0012: WORD ??
  
0014: WORD characters per row
+
0x0014: WORD characters per row
  
0016: WORD characters per column
+
0x0016: WORD characters per column
  
0018: WORD width of image
+
0x0018: WORD width of image
  
001A: WORD height of image
+
0x001A: WORD height of image
  
001C: DWORD position of data
+
0x001C: DWORD position of data
  
 
TGLP Data
 
TGLP Data
Line 120: Line 120:
  
 
CWDH Section
 
CWDH Section
0000: 'CWDH'
+
0x0000: 'CWDH'
  
0004: DWORD length of this section
+
0x0004: DWORD length of this section
  
0008: DWORD last character ? (= character count - 1)
+
0x0008: DWORD last character ? (= character count - 1)
  
000C: DWORD first character ? (= 0)
+
0x000C: DWORD first character ? (= 0)
  
0010: character count * (
+
0x0010: character count * (
  
 
BYTE space width ?
 
BYTE space width ?
Line 138: Line 138:
 
Type 1 :
 
Type 1 :
  
0000: ‘CMAP’
+
0x0000: ‘CMAP’
  
0004: DWORD length of this section
+
0x0004: DWORD length of this section
  
0008: WORD UTF-16 code of first char
+
0x0008: WORD UTF-16 code of first char
  
000A: WORD UTF-16 code of last char
+
0x000A: WORD UTF-16 code of last char
  
000C: DWORD 0 ?
+
0x000C: DWORD 0 ?
  
0010: DWORD position of next CMAP + 8
+
0x0010: DWORD position of next CMAP + 8
  
0014: WORD offset of first char
+
0x0014: WORD offset of first char
  
0016: WORD ?
+
0x0016: WORD ?
  
 
Type 2 :
 
Type 2 :
  
0000: ‘CMAP’
+
0x0000: ‘CMAP’
  
0004: DWORD length of this section
+
0x0004: DWORD length of this section
  
0008: WORD 0
+
0x0008: WORD 0
  
000A: WORD -1
+
0x000A: WORD -1
  
000C: 00 02 00 00 ?
+
0x000C: 00 02 00 00 ?
  
0010: DWORD position of next CMAP + 8 (0 if no next)
+
0x0010: DWORD position of next CMAP + 8 (0 if no next)
  
0014: WORD characters in this table (tbl_char count)
+
0x0014: WORD characters in this table (tbl_char count)
  
0016: tbl_char count * (
+
0x0016: tbl_char count * (
  
 
WORD UTF-16 code of char
 
WORD UTF-16 code of char
 
WORD offset of char )
 
WORD offset of char )
 
????: WORD 0
 
????: WORD 0
 +
 +
[[Category:File formats]]

Revision as of 02:24, 8 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

0x0000: 'RFNT'

0x0004: FE FF 01 04

0x0008: DWORD length of whole file

0x000C: WORD ??

0x000E: WORD ?? (language flag?)

FINF Header 20H bytes:

0x0000: 'FINF'

0x0004: DWORD finf size

0x0008: BYTE ??

0x0009: BYTE font height - 1

0x000A: WORD ??

0x000C: BYTE ??

0x000D: BYTE character width or height + 1 (?)

0x000E: BYTE character height or width + 1 (?)

0x000F: BYTE 00 (?)

0x0010: DWORD TGLP section position

0x0014: DWORD CWDH section position

0x0018: DWORD CMAP section position

0x001C: BYTE font height - 1 (excluding left line?)

0x001D: BYTE font width - 1 (excluding bottom line?)

0x001E: BYTE character width or height - 1 (?)

0x001F: BYTE 00 (?)

TGLP Header 30h bytes

0x0000: 'TGLP'

0x0004: DWORD length of 'TGLP' section

0x0008: BYTE font width - 1

0x0009: BYTE font height - 1

0x000A: BYTE character width - 1

0x000B: BYTE character height - 1

0x000C: DWORD length of 1 image

0x0010: WORD images count

0x0012: WORD ??

0x0014: WORD characters per row

0x0016: WORD characters per column

0x0018: WORD width of image

0x001A: WORD height of image

0x001C: 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 0x0000: 'CWDH'

0x0004: DWORD length of this section

0x0008: DWORD last character ? (= character count - 1)

0x000C: DWORD first character ? (= 0)

0x0010: character count * (

BYTE space width ? BYTE character width BYTE smaller than character width ) ????: (0~3) * 00 (align to 4 bytes)

CMAP Section Type 1 :

0x0000: ‘CMAP’

0x0004: DWORD length of this section

0x0008: WORD UTF-16 code of first char

0x000A: WORD UTF-16 code of last char

0x000C: DWORD 0 ?

0x0010: DWORD position of next CMAP + 8

0x0014: WORD offset of first char

0x0016: WORD ?

Type 2 :

0x0000: ‘CMAP’

0x0004: DWORD length of this section

0x0008: WORD 0

0x000A: WORD -1

0x000C: 00 02 00 00 ?

0x0010: DWORD position of next CMAP + 8 (0 if no next)

0x0014: WORD characters in this table (tbl_char count)

0x0016: tbl_char count * (

WORD UTF-16 code of char WORD offset of char ) ????: WORD 0