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
 
(3 intermediate revisions by 2 users not shown)
Line 9: Line 9:
 
The endianess is Big Endian.  
 
The endianess is Big Endian.  
  
RFNT Header
+
== RFNT Header ==
 
10h bytes
 
10h bytes
  
0000: 'RFNT'
+
{| class="wikitable"
 +
! Offset
 +
! Size
 +
! Description
 +
|-
 +
| 0x0000
 +
|
 +
| 'RFNT'
 +
|-
 +
| 0x0004
 +
|
 +
| Endian byte mark - FE FF
 +
|-
 +
| 0x0006
 +
|
 +
| file version - 01 04
 +
|-
 +
| 0x0008
 +
|
 +
| DWORD length of whole file
 +
|-
 +
| 0x000C
 +
|
 +
| offset to first block - WORD
 +
|-
 +
| 0x000E
 +
|
 +
| block count - WORD
 +
|}
  
0004: FE FF 01 04
+
== FINF Header ==
  
0008: DWORD length of whole file
+
20H bytes
  
000C: WORD ??
+
0x0000: 'FINF'
  
000E: WORD ?? (language flag?)
+
0x0004: DWORD finf size
  
FINF Header
+
0x0008: BYTE ??
20H bytes:
 
  
0000: 'FINF'
+
0x0009: BYTE font height - 1
  
0004: DWORD finf size
+
0x000A: WORD ??
  
0008: BYTE ??
+
0x000C: BYTE ??
  
0009: BYTE font height - 1
+
0x000D: BYTE character width or height + 1 (?)
  
000A: WORD ??
+
0x000E: BYTE character height or width + 1 (?)
  
000C: BYTE ??
+
0x000F: BYTE 00 (?)
  
000D: BYTE character width or height + 1 (?)
+
0x0010: DWORD TGLP section position
  
000E: BYTE character height or width + 1 (?)
+
0x0014: DWORD CWDH section position
  
000F: BYTE 00 (?)
+
0x0018: DWORD CMAP section position
  
0010: DWORD TGLP section position
+
0x001C: BYTE font height - 1 (excluding left line?)
  
0014: DWORD CWDH section position
+
0x001D: BYTE font width - 1 (excluding bottom line?)
  
0018: DWORD CMAP section position
+
0x001E: BYTE character width or height - 1 (?)
  
001C: BYTE font height - 1 (excluding left line?)
+
0x001F: BYTE 00 (?)
  
001D: BYTE font width - 1 (excluding bottom line?)
+
== TGLP Header ==
  
001E: BYTE character width or height - 1 (?)
 
 
001F: BYTE 00 (?)
 
 
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 Tpl Type
  
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
 
 
Bitmap is formed in a Zig-zag way.
 
Bitmap is formed in a Zig-zag way.
  
Line 119: Line 141:
 
...
 
...
  
CWDH Section
+
== CWDH Section ==
0000: 'CWDH'
 
  
0004: DWORD length of this section
+
0x0000: 'CWDH'
  
0008: DWORD last character ? (= character count - 1)
+
0x0004: DWORD length of this section
  
000C: DWORD first character ? (= 0)
+
0x0008: DWORD last character ? (= character count - 1)
  
0010: character count * (
+
0x000C: DWORD first character ? (= 0)
 +
 
 +
0x0010: character count * (
  
 
BYTE space width ?
 
BYTE space width ?
Line 135: Line 158:
 
????: (0~3) * 00 (align to 4 bytes)
 
????: (0~3) * 00 (align to 4 bytes)
  
CMAP Section
+
== CMAP Section ==
Type 1 :
 
  
0000: ‘CMAP’
+
=== Type 1 ===
  
0004: DWORD length of this section
+
0x0000: ‘CMAP’
  
0008: WORD UTF-16 code of first char
+
0x0004: DWORD length of this section
  
000A: WORD UTF-16 code of last char
+
0x0008: WORD UTF-16 code of first char
  
000C: DWORD 0 ?
+
0x000A: WORD UTF-16 code of last char
  
0010: DWORD position of next CMAP + 8
+
0x000C: DWORD 0 ?
  
0014: WORD offset of first char
+
0x0010: DWORD position of next CMAP + 8
  
0016: WORD ?
+
0x0014: WORD offset of first char
  
Type 2 :
+
0x0016: WORD ?
  
0000: ‘CMAP’
+
=== Type 2 ===
  
0004: DWORD length of this section
+
0x0000: ‘CMAP’
  
0008: WORD 0
+
0x0004: DWORD length of this section
  
000A: WORD -1
+
0x0008: WORD 0
  
000C: 00 02 00 00 ?
+
0x000A: WORD -1
  
0010: DWORD position of next CMAP + 8 (0 if no next)
+
0x000C: 00 02 00 00 ?
  
0014: WORD characters in this table (tbl_char count)
+
0x0010: DWORD position of next CMAP + 8 (0 if no next)
  
0016: tbl_char count * (
+
0x0014: WORD characters in this table (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]]

Latest revision as of 10:15, 16 November 2014

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

Offset Size Description
0x0000 'RFNT'
0x0004 Endian byte mark - FE FF
0x0006 file version - 01 04
0x0008 DWORD length of whole file
0x000C offset to first block - WORD
0x000E block count - WORD

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 Tpl Type

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