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.