Line 5: |
Line 5: |
| | | |
| The titleID-low for DLC is: ((uniqueID<<8) | DLC_title_index). DLC_title_index starts at zero. Each DLC item is grouped under a DLC_title_index. Usually an application only has one DLC_title_index, but for applications which have a *lot* of DLC there's more than one DLC_title_index(JPN Home Menu for themes for example). | | The titleID-low for DLC is: ((uniqueID<<8) | DLC_title_index). DLC_title_index starts at zero. Each DLC item is grouped under a DLC_title_index. Usually an application only has one DLC_title_index, but for applications which have a *lot* of DLC there's more than one DLC_title_index(JPN Home Menu for themes for example). |
| + | |
| + | Every DLC title include [[NCCH]] partitions. The first one is always content metadata. |
| + | |
| + | == Content metadata structure == |
| + | The first [[NCCH]] partition of a DLC title. It determines region, language and DLC icons. The ExeFS section of content metadata only contains [[SMDH|icon]] section. The RomFS section contains "icons" directory, MetaDataContentHeader.bin and some ContentInfoArchive file(s). |
| + | |
| + | === icons directory === |
| + | Contains DLC icons (.icn files). |
| + | |
| + | === MetaDataContentHeader.bin === |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Offset |
| + | ! Size |
| + | ! Description |
| + | |- |
| + | | 0x0 |
| + | | 0x4 |
| + | | Unknown |
| + | |- |
| + | | 0x4 |
| + | | 0x4 |
| + | | Number of working DLC |
| + | |- |
| + | | 0x8 |
| + | | 0x4 |
| + | | Number of available DLC |
| + | |- |
| + | | 0xC |
| + | | 0x4 |
| + | | Company Code |
| + | |- |
| + | | 0x10 |
| + | | 0x4 |
| + | | Magic number, always 0xDEADBEEF (little endian) |
| + | |- |
| + | | 0x14 |
| + | | 0x4 * 7 |
| + | | Region data (see below) |
| + | |- |
| + | | 0x30 |
| + | | 0x4 |
| + | | Number of ContentInfoArchive file (n) |
| + | |- |
| + | | 0x34 |
| + | | 0x4 * n |
| + | | Region data of ContentInfoArchive files (see below). |
| + | |} |
| + | |
| + | ==== Region data ==== |
| + | The first, the second and the third record of the main region data is often assigned to JPN, USA, EUR region respectively. |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Offset |
| + | ! Size |
| + | ! Description |
| + | |- |
| + | | 0x0 |
| + | | 0x2 |
| + | | Region ID |
| + | |- |
| + | | 0x2 |
| + | | 0x2 |
| + | | Language ID |
| + | |} |
| + | |
| + | ==== Region IDs ==== |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! ID |
| + | ! Region code |
| + | ! Region name |
| + | |- |
| + | | 0x0 |
| + | | JPN |
| + | | Japan |
| + | |- |
| + | | 0x1 |
| + | | USA |
| + | | North America |
| + | |- |
| + | | 0x2 |
| + | | EUR |
| + | | Europe |
| + | |} |
| + | |
| + | ==== Language IDs ==== |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! ID |
| + | ! Language code |
| + | ! Language |
| + | |- |
| + | | 0x0 |
| + | | ja |
| + | | Japanese |
| + | |- |
| + | | 0x1 |
| + | | en |
| + | | English |
| + | |- |
| + | | 0x2 |
| + | | fr |
| + | | French |
| + | |- |
| + | | 0x3 |
| + | | de |
| + | | German |
| + | |- |
| + | | 0x4 |
| + | | it |
| + | | Italian |
| + | |- |
| + | | 0x5 |
| + | | es |
| + | | Spanish |
| + | |- |
| + | | 0x7 |
| + | | ko |
| + | | Korean |
| + | |- |
| + | | 0x8 |
| + | | nl |
| + | | Dutch |
| + | |- |
| + | | 0x9 |
| + | | pt |
| + | | Portuguese |
| + | |- |
| + | | 0xA |
| + | | ru |
| + | | Russian |
| + | |} |
| + | |
| + | ==== Example ==== |
| + | MetaDataContentHeader.bin in Fire Emblem Awakening DLC (EUR): |
| + | |
| + | Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F |
| + | |
| + | 00000000 01 00 00 00 19 00 00 00 19 00 00 00 30 00 30 00 ............0.0. |
| + | 00000010 EF BE AD DE FF FF FF FF FF FF FF FF 02 00 01 00 ï¾.Þÿÿÿÿÿÿÿÿ.... |
| + | 00000020 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ |
| + | 00000030 08 00 00 00 02 00 01 00 02 00 05 00 02 00 02 00 ................ |
| + | 00000040 02 00 03 00 02 00 04 00 02 00 08 00 02 00 09 00 ................ |
| + | 00000050 02 00 0A 00 .... |
| + | |
| + | === ContentInfoArchive files === |
| + | The name of these files follow this format: ContentInfoArchive_<region code>_<language code>.bin (<region code> and <language code> are determined in MetaDataContentHeader.bin) |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Offset |
| + | ! Size |
| + | ! Description |
| + | |- |
| + | | 0x0 |
| + | | 0x4 |
| + | | Unknown |
| + | |- |
| + | | 0x4 |
| + | | 0x4 |
| + | | Number of DLC (n) |
| + | |- |
| + | | 0x8 |
| + | | 0x88 * n |
| + | | DLC data (see below) |
| + | |} |
| + | |
| + | ==== DLC data ==== |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Offset |
| + | ! Size |
| + | ! Description |
| + | |- |
| + | | 0x0 |
| + | | 0x40 |
| + | | Content title (UTF-8) |
| + | |- |
| + | | 0x40 |
| + | | 0x80 |
| + | | Content description (UTF-8) |
| + | |- |
| + | | 0xC0 |
| + | | 0x4 |
| + | | Content ID |
| + | |- |
| + | | 0xC4 |
| + | | 0x4 |
| + | | Unknown |
| + | |} |
| | | |
| == List == | | == List == |
Line 124: |
Line 316: |
| | v0 | | | v0 |
| |} | | |} |
| + | |
| + | == Tools == |
| + | * [https://github.com/Gericom/EveryFileExplorer EveryFileExplorer] Open .icn files. |