BCFNT: Difference between revisions

CWDH
 
(9 intermediate revisions by 4 users not shown)
Line 1: Line 1:
[[Category:File formats]]
=CTR Font Format=
=CTR Font Format=
[[.bcfnt]] files are bitmap fonts made for the 3ds. The system font uses this format too except the header is changed from CFNT to CFNU and all file offsets are changed to absolute in memory offsets.
[[.bcfnt]] files are bitmap fonts made for the 3ds. The system font uses this format too except the header is changed from CFNT to CFNU and all file offsets are changed to absolute in memory offsets.
Line 12: Line 13:
|  0x00
|  0x00
|  0x04  
|  0x04  
|  Magic Header (either CFNT or CFNU)
|  Magic Header (either CFNT or CFNU or FFNT)
|-
|-
|  0x04
|  0x04
|  0x02
|  0x02
Unknown
Endianness (0xFEFF = little, 0xFFFE = big)
|-
|-
|  0x06
|  0x06
Line 24: Line 25:
|  0x08     
|  0x08     
|  0x04
|  0x04
Unknown
Version (observed to be 0x03000000)
|-
|-
|  0x0C       
|  0x0C       
Line 35: Line 36:
|}
|}


=== CFNT Header ===
=== FINF Header ===


{| class="wikitable" border="1"
==== Version 3 (BCFNT) ====
|-
!  Offset
!  Size
!  Description
|-
|  0x00
|  0x04
|  Magic Header (either CFNT or CFNU)
|-
|  0x04
|  0x02
|  Unknown
|-
|  0x06
|  0x02
|  Header Size
|-
|  0x08   
|  0x04
|  Unknown
|-
|  0x0C     
|  0x04
|  File size (the total)
|-
|  0x10   
|  0x04
|  Number of "blocks" to read
|}
 
=== FINF Header ===


{| class="wikitable" border="1"
{| class="wikitable" border="1"
Line 130: Line 100:
|  0x1F     
|  0x1F     
|  0x01
|  0x01
Padding
Reserved
|}
 
==== Version 4 (BFFNT) ====
 
{| class="wikitable" border="1"
|-
!  Offset
!  Size
!  Description
|-
|  0x00
|  0x04
|  Magic Header (FINF)
|-
|  0x04
|  0x04
|  Section Size
|-
|  0x08
|  0x01
|  Font Type
|-
|  0x09
|  0x01
|  Height
|-
|  0x0A
|  0x01
|  Width
|-
|  0x0B
|  0x01
|  Ascent
|-
|  0x0C 
|  0x02
|  Line Feed
|-
|  0x0E
|  0x02
|  Alter Char Index
|-
|  0x10   
|  0x03
|  Default Width (3 bytes: Left, Glyph Width, Char Width)
|-
|  0x13
|  0x01
|  Encoding
|-
|  0x14   
|  0x04
|  TGLP Offset
|-
|  0x18
|  0x04
|  CWDH Offset
|-
|  0x1C
|  0x04
|  CMAP Offset
|}
|}


=== TGLP Header ===
=== TGLP Header ===


==== Version 3 (BCFNT) ====
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
Line 179: Line 211:
|  0x14     
|  0x14     
|  0x02
|  0x02
|  Number of Sheet rows
|  Number of columns
|-
|-
|  0x16     
|  0x16     
|  0x02
|  0x02
|  Number of Sheet lines
|  Number of rows
|-
|-
|  0x18     
|  0x18     
Line 198: Line 230:
|}
|}


=== FINF Header ===
==== Version 4 (BFFNT) ====
 
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
Line 208: Line 239:
|  0x00
|  0x00
|  0x04  
|  0x04  
|  Magic Header (FINF)
|  Magic Header (TGLP)
|-
|-
|  0x04
|  0x04
Line 216: Line 247:
|  0x08
|  0x08
|  0x01
|  0x01
Font Type
Cell Width
|-  
|-  
|  0x09     
|  0x09     
|  0x01
|  0x01
Line Feed
Cell Height
|-
|-
|  0x0A       
|  0x0A       
0x02
0x01
Alter Char Index
Number of Sheets
|-
|  0x0B   
|  0x01
|  Max Character Width
|-
|-
|  0x0C     
|  0x0C     
0x03
0x04
Default Width (3 bytes: Left, Glyph Width, Char Width)
Sheet Size
|-
|-
0x0F      
0x10      
0x01
0x02
Encoding
Baseline Position
|-
|-
0x10      
0x12      
0x04
0x02
TGLP Offset
Sheet Image Format 0-13: (RGBA8, RGB8, RGBA5551, RGB565, RGBA4, LA8, HILO8, L8, A8, LA4, L4, A4, ETC1, ETC1A4)
|-
|-
|  0x14     
|  0x14     
0x04
0x02
CWDH Offset
Number of Sheet columns
|-
|  0x16   
|  0x02
|  Number of Sheet rows
|-
|-
|  0x18     
|  0x18     
0x04
0x02
CMAP Offset
Sheet Width
|-
|  0x1A   
|  0x02
|  Sheet Height
|-
|-
|  0x1C     
|  0x1C     
0x01
0x04
Height
Sheet Data Offset
|-
|  0x1D   
|  0x01
|  Width
|-
|  0x1E   
|  0x01
|  Ascent
|-
|  0x1F   
|  0x01
|  Padding
|}
|}


Line 344: Line 375:
|  Char Widths (3 bytes: Left, Glyph Width, Char Width)
|  Char Widths (3 bytes: Left, Glyph Width, Char Width)
|}
|}
=Tools=
[https://github.com/ObsidianX/3dstools] - BFFNT Extractor/Creator.  Creates PNG files from TGLP atlas data and a JSON manifest.