Changes

6,663 bytes added ,  23:19, 28 November 2021
Replaced the redirect with actual information regarding the manual files, obtained from own research.
Line 1: Line 1: −
#REDIRECT [[DARC]]
+
BCMA is the file format used for the electronic manuals on the Nintendo 3DS. It presumably stands for '''B'''inary '''CTR''' '''Ma'''nual.
 +
 
 +
== Region and language codes ==
 +
In several places, three letter uppercase region codes and two letter lowercase language codes are used. These will be indicated by the italic placeholders ''REG'' and ''la'' respectively on this page.
 +
 
 +
The following region and language codes are known:
 +
{| class="wikitable"
 +
! Region code
 +
! Region
 +
! Language code
 +
! Language
 +
|-
 +
|rowspan="8"| EUR
 +
|rowspan="8"| Europe
 +
| de
 +
| German
 +
|-
 +
| en
 +
| British English
 +
|-
 +
| fr
 +
| French
 +
|-
 +
| es
 +
| Spanish
 +
|-
 +
| it
 +
| Italic
 +
|-
 +
| nl
 +
| Dutch
 +
|-
 +
| pt
 +
| Portuguese
 +
|-
 +
| ru
 +
| Russian
 +
 +
|-
 +
| JPN
 +
| Japan
 +
| ja
 +
| Japanese
 +
|}
 +
 
 +
== Top-level archive overview ==
 +
A BCMA file is a regular, uncompressed [[DARC]] archive which contains a set of LZ10-compressed DARC archives. These subarchives contoin files containing either textures in the [[BCLIM format]] or metadata and manual pages in the binary [[CLYT format]].
 +
 
 +
At least the following archives should be found in the top level archive:
 +
 
 +
{| class="wikitable"
 +
! Archive path
 +
! Comment
 +
|-
 +
| [[#BcmaInfo.arc|./BcmaInfo.arc]]
 +
| Archive containing metadata about this manual, such as available languages and version information.
 +
|-
 +
| [[#REG_la_index.arc|./''REG''_''la''_index.arc]]
 +
| Archive containing the table of contents for a specific locale.
 +
|-
 +
| [[#REG_la_size.arc|./''REG''_''la''_large.arc]]
 +
| Archive containing the pages of the manual in a large font size.
 +
|-
 +
| [[#REG_la_size.arc|./''REG''_''la''_small.arc]]
 +
| Archive containing the pages of the manual in a small font size.
 +
|}
 +
 
 +
Other archives not named here may be present as well. Usually, these contain locale specific images.
 +
 
 +
 
 +
== BcmaInfo.arc ==
 +
This archive has a single BCLYT file located in ''./blyt/BcmaInfo.bclyt''. This file contains the following panes, all direct children of the RootPane:
 +
 
 +
{| class="wikitable"
 +
!rowspan="2"| Pane name
 +
!rowspan="2"| Pane type
 +
!colspan="3"| User data
 +
!rowspan="2"| Other info
 +
|-
 +
 
 +
! Key
 +
! Type
 +
! Value description
 +
|-
 +
 
 +
|rowspan="2"| LangInfo
 +
|rowspan="2"| pan1
 +
| LangNum
 +
| Int[1]
 +
| The number of languages following this property
 +
|rowspan="2"|This pane lists all languages in this manual.
 +
|-
 +
 
 +
| Lang_''xxx''
 +
| String
 +
| ''xxx'' is a number from 000 until the value of ''LangNum''. This value is a language-region pair in the form of ''REG''_''la''.
 +
|-
 +
 
 +
 
 +
 
 +
|rowspan="2"| RegionInfo
 +
|rowspan="2"| pan1
 +
| RegionNum
 +
| Int[1]
 +
| The number of regions following this property
 +
|rowspan="2"|
 +
|-
 +
 
 +
| Region_''xxx''
 +
| String
 +
| ''xxx'' is a number from 000 until the value of ''RegionNum''. This value is a region name in the form of ''REG''.
 +
|-
 +
 
 +
 
 +
 
 +
|rowspan="2"| ''REG''
 +
|rowspan="2"| pan1
 +
| LangNum
 +
| Int[1]
 +
| The number of languages following this property
 +
|rowspan="2"| This pane lists all languages in the region indicated by the name of this pane. There is one pane for every region listed in the ''RegInfo'' pane.
 +
|-
 +
 
 +
| Lang_''xxx''
 +
| String
 +
| ''xxx'' is a number from 000 until the value of ''LangNum''. This value is a language-region pair in the form of ''REG''_''la''.
 +
|-
 +
 
 +
 
 +
 
 +
|rowspan="2"| ''REG''_''la''
 +
|rowspan="2"| txt1
 +
| TexResNum
 +
| Int[1]
 +
| The number of texture resources following this property
 +
|rowspan="2"| This pane lists all additional archives with locale-dependent textures that should be loaded. The text string of this text pane is set to the localized name of the language. There is an instance of this pane for every language listed in the ''LangInfo'' pane.
 +
|-
 +
 
 +
| TexRes_''xxxx''
 +
| String
 +
| ''xxxx'' is a number from 0000 until the value of ''TexResNum''. This value is a file name referring to an archive in the top-level BCMA file, for example ''Common_texture.arc''.
 +
|-
 +
 
 +
 
 +
 
 +
|rowspan="2"| VersionInfo
 +
|rowspan="2"| pan1
 +
| CurrentVersion
 +
| Int[1]
 +
| The version of the file format. Only the value 2 has been found so far.
 +
|rowspan="2"|
 +
|-
 +
 
 +
| Description
 +
| String
 +
| Contains a human-readable description about the export settings and software. For example, the Kid Icarus manual contains "Multi Region (Old Style Langinfo Include). (ManualEditor 0.33.0.0)"
 +
|}
 +
 
 +
All other properties of the panes seem to be set to a default value and do not seem to matter.
 +
 
 +
== ''REG''_''la''_index.arc ==
 +
This archive contains the table of contents for a certain language. This archive contains exactly one file, ''./blyt/Index.bclyt'', which contains the following panes, all children of the RootPane:
 +
 
 +
{| class="wikitable"
 +
!rowspan="2"| Pane name
 +
!rowspan="2"| Pane type
 +
!colspan="3"| User data
 +
!rowspan="2"| Other info
 +
|-
 +
 
 +
! Key
 +
! Type
 +
! Value description
 +
|-
 +
 
 +
 
 +
 
 +
|rowspan="4"| MetaData
 +
|rowspan="4"| pan1
 +
| PageNum
 +
| Int[1]
 +
| The amount of pages in this manual
 +
|rowspan="4"|
 +
|-
 +
 
 +
| CategoryNum
 +
| Int[1]
 +
| The amount of categories in this manual.
 +
|-
 +
 
 +
| SplitNumL
 +
| Int[''PageNum'']
 +
| Each integer in this array maps to the amount of parts each page in the manual with the large font size has been split.
 +
|-
 +
 
 +
| SplitNumS
 +
| Int[''PageNum'']
 +
| Each integer in this array maps to the amount of parts each page in the manual with the small font size has been split.
 +
|-
 +
 
 +
 
 +
 
 +
| PageTitle_''xxx''
 +
| txt1
 +
|colspan="3"| ''None''
 +
| The text of this textbox contains the page title of the page at index ''xxx'', where ''xxx'' ranges from 000 until ''PageNum''
 +
|-
 +
 
 +
 
 +
 
 +
|rowspan="3"| Category_''xxx''
 +
|rowspan="3"| txt1
 +
| IsValid
 +
| Int[1]
 +
| Either 0 or 1, whether this category is valid. This seems to be always 0 for the first category, usually named ''__CATEGORY_INVALID__''. Other sections have this set to 1.
 +
|rowspan="3"| This pane describes each category. The text of the textbox is the localized name of the category shown to the user.
 +
 
 +
|-
 +
| CategoryPageNum
 +
| Int[1]
 +
| The amount of pages in this category
 +
 
 +
|-
 +
| PageID_''xxx''
 +
| Int[1]
 +
| The ''xxx'' ranges from 000 until ''CategoryPageNum''. The value refers to the same page number used in ''PageTitle_xxx'', which should be part of this category.
 +
 
 +
|}
 +
 
 +
== ''REG''_''la''_''size''.arc ==
 +
These archives actually contain the contents of a page in the manual. It contains the following files:
 +
 
 +
{|class="wikitable"
 +
! File name
 +
! Description
 +
|-
 +
 
 +
| ./blyt/Page_''xxx''_''size''_''y''.bclyt
 +
| Contains the text and foreground images of page number ''xxx'', part ''y'' and size ''size''.
 +
|-
 +
 
 +
| ./blyt/Page_''xxx''_''size''_bg.bclyt
 +
| Contains all background images on the page.
 +
|-
 +
 
 +
| ./blyt/Page_''xxx''_''size''_info.bclyt
 +
| Could perhaps contain metadata from the manual editor?
 +
|}
 +
 
 +
In the filenames, ''xxx'' should be replaced by the page number, starting from 000. ''size'' should be replaced by either "large" or "small". Finally, ''y'' should be replaced by the page part, starting from 0.
 +
 
 +
 +
 
 
[[Category:File formats]]
 
[[Category:File formats]]