Editing CXML Containers
Jump to navigation
Jump to search
The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then publish the changes below to finish undoing the edit.
Latest revision | Your text | ||
Line 1: | Line 1: | ||
=Description= | =Description= | ||
[[Qt Resource Container (QRC)|.QRC]], [[PlayStation 3 Theme (P3T)|.P3T]], and [[Rich Appearance Format (RAF)|.RAF]] (in order of complexity from | [[Qt Resource Container (QRC)|.QRC]], [[PlayStation 3 Theme (P3T)|.P3T]], and [[Rich Appearance Format (RAF)|.RAF]] (in order of complexity from easyer to harder) and '''.CXML''' file extensions uses the same container, and are able to use zlib compression, but the zlib compression method and the structure of the container has several variations: | ||
The only way to | The only way to identity accuratelly the exact container type is by reading the texts in the "strings table" (are tags and some of his values from the .xml file that was used to build the container) that are related with the building process and defines his internal structure, but his names are too long to use when talking about them | ||
*'''For QRC there are 2 basic variations:''' (both of them uses zlib compression, and only contains a "file-table" with "files") | *'''For QRC there are 2 basic variations:''' (both of them uses zlib compression, and only contains a "file-table" with "files") | ||
**'''QRCC''' - (used by all .qrc files except icontex.qrc) - zlib compression is | **'''QRCC''' - (used by all .qrc files except icontex.qrc) - zlib compression is applyed over the whole .qrc file (except his first 8 bytes that are info for the decompression), after decompression the file generated is a QRCF and the internal container structure can be readed (QRCC always contains a QRCF that is the real container) | ||
**'''QRCF''' - (used only by icontex.qrc) - zlib compression is | **'''QRCF''' - (used only by icontex.qrc) - zlib compression is applyed per-file over each contained file (the container structure can be readed directlly and every one of the files inside the container structure is compressed individually) | ||
*For this reason is not | *For this reason is not posible to identify the 2 variations of QRC by reading his magic (both are QRCF) but his structure is different, so is needed to use unnofficial names to identify them and to be able to explain his variations here in wiki, the proposed names used in this page are: | ||
**'''QRCF_1''' (the most common and older... used by all .qrc's except icontext.qrc) | **'''QRCF_1''' (the most common and older... used by all .qrc's except icontext.qrc) | ||
**'''QRCF_2''' (the less common and newer... used only by icontex.qrc) | **'''QRCF_2''' (the less common and newer... used only by icontex.qrc) | ||
Line 14: | Line 14: | ||
*'''For P3T there are lot of posible variations:''' | *'''For P3T there are lot of posible variations:''' | ||
**The internal structure is dependant of the items included in the theme... some of them can be icons (to be stored inside an icontable) and others can be a wallpaper, the mouse pointers (stored in a pointertable), navigation sounds (stored in a se table), etc... | **The internal structure is dependant of the items included in the theme... some of them can be icons (to be stored inside an icontable) and others can be a wallpaper, the mouse pointers (stored in a pointertable), navigation sounds (stored in a se table), etc... | ||
**Is | **Is posible to create themes with the official theme compiler tool with all this items, or only a few of them (e.g: a theme containing only 1 icon... or a theme containing only the name of the theme), this frankenstein themes are really usefull for understanding the structure as you can see in this examples ---> https://www.sendspace.com/file/5suokd | ||
*'''For RAF seems is posible a lot of variations too''' | *'''For RAF seems is posible a lot of variations too''' | ||
**RAF's are used for the animation scene inside dynamic themes, when using them this way it seems the contents is restricted to a list of contained files, but raf is also used in the animation when PS3 boots (coldboot.raf) and | **RAF's are used for the animation scene inside dynamic themes, when using them this way it seems the contents is restricted to a list of contained files, but raf is also used in the animation when PS3 boots (coldboot.raf) and althought his format is pretty similar than the background of a theme is posible to include multiple files of different types inside the container | ||
All this variations are confusing and hard to explain in the page, but is needed to find a way to represent them as the basic layouts that the firmware expects to find inside the container | All this variations are confusing and hard to explain in the page, but is needed to find a way to represent them as the basic layouts that the firmware expects to find inside the container | ||
Line 45: | Line 45: | ||
}; | }; | ||
struct | struct ElementBin | ||
{ | { | ||
int name; | int name; | ||
Line 55: | Line 55: | ||
int last_child; | int last_child; | ||
}; | }; | ||
struct AttributeBin | struct AttributeBin | ||
{ | { | ||
int name; | int name; | ||
int type; | int type; | ||
Line 186: | Line 169: | ||
===Element=== | ===Element=== | ||
{| class="wikitable | ===Attribute=== | ||
|+ | |||
! Offset !! Length !! | {| class="wikitable" | ||
|+ Attribute types structure | |||
! rowspan=2 | Offset !! rowspan=2 | Length !! rowspan=2 | Name !! colspan=8 | Attribute type | |||
|- | |- | ||
! Integer !! Float !! String !! ... !! ... !! File !! String !! ... | |||
|- | |- | ||
| | | 0x0 || 0x4 || Attribute name offset || colspan=8 {{cellcolors|lightgrey}} xml tag string from the "strings table" | ||
|- | |- | ||
| | | 0x4 || 0x4 || Attribute type || 1 || 2 || 3 || 4 || 5 || 6 || 7 || 8 | ||
|- | |- | ||
| | | 0x8 || 0x4 || variable 1 || File size uncompressed ? || Float value || || || || File offset || Filename offset || | ||
|- | |- | ||
| | | 0xC || 0x4 || variable 2 || unknown (usually 0) || unknown (usually 0) || || || varies (small numbers) || File size || unknown (usually 0) || | ||
|} | |} | ||
=== | ==Container Common Structure== | ||
===Main Header=== | |||
The header contains an identifyer of the container (magic), his version, and allows to store the "absolute start offset" and "size" of 7 tables (or areas) | |||
When a "not used table" is placed before a "used table"... the start offset of the "not used table" and his size (as zero) are stored in the main header to preserve his position in the structure. The "used table" that comes later starts in the same offset than the previouslly "not used table" (an intuitive way to think in this is imagining are overlapped because starts in the same position but only the one at the top is used) | |||
*The container format is generic (used also by .RAF and .P3T with some variations) so the usage of this tables can vary, in this example there are 3 "not used tables": | |||
**two of the "not used tables" (both at offset 0x460 with a size of 0) are placed before an used table (also at offset 0x460 but with a size of 0x23A0) | |||
**the other "not used table" is placed at the end, so there is no need to store his offset | |||
*Example from 3.55 rhm.qrc: | *Example from fw 3.55 rhm.qrc: | ||
'''Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F''' | '''Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F''' | ||
'''00000000''' <span style="background:# | '''00000000''' <span style="background:#666666;">51 52 43 46</span> <span style="background:#888888;">00 00 01 10</span> <span style="background:#dddd66;">00 00 00 40</span> <span style="background:#ffff88;">00 00 02 CC</span> QRCF.......@..%| | ||
'''00000010''' <span style="background:#dd6666;">00 00 03 10</span> <span style="background:#ff8888;">00 00 01 2B</span> <span style="background:#66dddd;">00 00 04 40</span> <span style="background:#88ffff;">00 00 00 1B</span> ..%À......9Ð.... | |||
'''00000020''' <span style="background:#66dd66;">00 00 04 60</span> <span style="background:#88ff88;">00 00 00 00</span> <span style="background:#dd66dd;">00 00 04 60</span> <span style="background:#ff88ff;">00 00 00 00</span> ..9ð......9ð.... | |||
'''00000030''' <span style="background:#6666dd;">00 00 04 60</span> <span style="background:#8888ff;">00 00 23 A0</span> <span style="background:#aee2ae;">00 00 00 00</span> <span style="background:#cef2ce;">00 00 00 00</span> ..9ð..@p........ | |||
{| class="wikitable" | {| class="wikitable" | ||
Line 261: | Line 209: | ||
! Name !! Offset !! Size !! Example !! Remark | ! Name !! Offset !! Size !! Example !! Remark | ||
|- | |- | ||
| Magic || 0x00 || 0x04 || {{cellcolors|# | | Magic || 0x00 || 0x04 || {{cellcolors|#666666|#ffffff}} 51 52 43 46 || 'QRCF' | ||
|- | |- | ||
| | | Version || 0x04 || 0x04 || {{cellcolors|#888888|#ffffff}} 00 00 01 10 || | ||
|- | |- | ||
| | | Tree Table Offset || 0x08 || 0x04 || {{cellcolors|#dddd66}} 00 00 00 40 || | ||
|- | |||
| Tree Table Size || 0x0C || 0x04 || {{cellcolors|#ffff88}} 00 00 02 CC || | |||
|- | |||
| ID Table Offset || 0x10 || 0x04 || {{cellcolors|#dd6666}} 00 00 03 10 || | |||
|- | |||
| ID Table Size || 0x14 || 0x04 || {{cellcolors|#ff8888}} 00 00 01 2B || | |||
|- | |||
| String Table Offset || 0x18 || 0x04 || {{cellcolors|#66dddd}} 00 00 04 40 || | |||
|- | |||
| String Table Size || 0x1C || 0x04 || {{cellcolors|#88ffff}} 00 00 00 1B || | |||
|- | |||
| Integer Array Offset || 0x20 || 0x04 || {{cellcolors|#66dd66}} 00 00 04 60 || Overlapped | |||
|- | |||
| Integer Array size || 0x24 || 0x04 || {{cellcolors|#88ff88}} 00 00 00 00 || Not used | |||
|- | |||
| Float Array Offset || 0x28 || 0x04 || {{cellcolors|#dd66dd}} 00 00 04 60 || Overlapped | |||
|- | |||
| Float Array Size || 0x2C || 0x04 || {{cellcolors|#ff88ff}} 00 00 00 00 || Not used | |||
|- | |||
| File Table Offset || 0x30 || 0x04 || {{cellcolors|#6666dd}} 00 00 04 60 || Overlaps the previous 2 tables | |||
|- | |||
| File Table Size || 0x34 || 0x04 || {{cellcolors|#8888ff}} 00 00 23 A0 || | |||
|- | |||
| ''Unknown Table Offset'' || 0x38 || 0x04 || {{cellcolors|#aee2ae}} 00 00 00 00 || Not present | |||
|- | |||
| ''Unknown Table Size'' || 0x3C || 0x04 || {{cellcolors|#cef2ce}} 00 00 00 00 || Not Used | |||
|- | |- | ||
|} | |} | ||
*Notes | *Notes | ||
**The | **The sizes doesnt includes the (posible) padding at the end of all tables | ||
===Tree Table=== | |||
Offset (without the 0x40 header in all qrc files) | |||
http://666kb.com/i/cib5c7q4y7rpcx9x1.gif | |||
=== | |||
Same on all QRC's till offset 0x70 | |||
{| class="wikitable" | {| class="wikitable" | ||
! Offset !! Size !! Example !! Remark | |||
|- | |- | ||
| 0x00 || 0x04 || 00 00 00 00 || Root Element (Offset within '''String Table''', in this case it will be <qrc>) | |||
|- | |- | ||
| | | 0x04 || 0x04 || 00 00 00 00 || Attribute Counter | ||
|- | |- | ||
| | | 0x08 || 0x04 || FF FF FF FF || Parent | ||
|- | |- | ||
| | | 0x0C || 0x04 || FF FF FF FF || Previous Element | ||
|- | |- | ||
| | | 0x10 || 0x04 || FF FF FF FF || Next Element | ||
|- | |- | ||
| | | 0x14 || 0x04 || 00 00 00 1C || First Entry within the root Element (qrc) | ||
|- | |- | ||
| | | 0x18 || 0x04 || 00 00 00 1C || Last Entry within the root Element (qrc) | ||
|- | |- | ||
| | | 0x1C || 0x04 || 00 00 00 04 || String Pointer (Offset within '''String Table''', in this case it will be <file-table>) | ||
|- | |- | ||
| | | 0x20 || 0x04 || 00 00 00 00 || Attribute Counter | ||
|- | |- | ||
| | | 0x24 || 0x04 || 00 00 00 00 || Parent | ||
|- | |- | ||
| | | 0x28 || 0x04 || FF FF FF FF || Previous Element | ||
|- | |- | ||
| | | 0x2C || 0x04 || FF FF FF FF || Next Element | ||
|- | |- | ||
| | | 0x30 || 0x04 || 00 00 00 38 || First Entry | ||
|- | |- | ||
| | | 0x34 || 0x04 || xx xx xx xx || Last Entry | ||
|- | |- | ||
| | | 0x38 || 0x04 || 00 00 00 0F || String Pointer (Offset within '''String Table''', in this case it will be a Element <file>) | ||
|- | |- | ||
| | | 0x3C || 0x04 || 00 00 00 02 || Attribute Counter (0x02 == 2, the 2 Attributes of <file> Element) | ||
|- | |- | ||
| | | 0x40 || 0x04 || 00 00 00 1C || Parent Element (Offset within '''Tree Table''', in this case it will be <file-table>) | ||
|- | |- | ||
| | | 0x44 || 0x04 || FF FF FF FF || Previous Element | ||
|- | |- | ||
| | | 0x48 || 0x04 || 00 00 00 74 || Next Element | ||
|- | |- | ||
| | | 0x4C || 0x04 || FF FF FF FF || First Entry | ||
|- | |- | ||
| | | 0x50 || 0x04 || FF FF FF FF || Last Entry | ||
|- | |- | ||
| | | 0x54 || 0x04 || 00 00 00 14 || String Pointer (Offset within '''String Table''', in this case it will be a Attribute <src>) | ||
|- | |- | ||
| | | 0x58 || 0x04 || 00 00 00 06 || Type Descriptor (6 == File) | ||
|- | |- | ||
| | | 0x5C || 0x04 || 00 00 00 00 || Offset of data within '''File Table''' | ||
|- | |- | ||
| | | 0x60 || 0x04 || 00 00 01 50 || Size of data within '''File Table''' | ||
|- | |- | ||
| | | 0x64 || 0x04 || 00 00 00 18 || String Pointer (Offset within '''String Table''', in this case it will be a Attribute <id>) | ||
|- | |- | ||
| | | 0x68 || 0x04 || 00 00 00 07 || Type Descriptor (7 == ID) | ||
|- | |- | ||
| | | 0x6C || 0x04 || 00 00 00 00 || Offset of filename within the ID Table | ||
|- | |- | ||
| | | 0x70 || 0x04 || 00 00 00 00 || on icontex here are additional 16 bytes | ||
|- | |- | ||
| | | 0x74 || 0x04 || 00 00 00 0F || String Pointer | ||
|- | |- | ||
| | | 0x78 || 0x04 || 00 00 00 02 || Attribute Counter | ||
|- | |- | ||
| | | 0x7C || 0x04 || 00 00 00 1C || Parent Element | ||
|- | |- | ||
| | | 0x80 || 0x04 || 00 00 00 38 || Previous Element | ||
|- | |- | ||
| | | 0x84 || 0x04 || 00 00 00 B0 || Next Element | ||
|- | |- | ||
| | |} | ||
On icontex.qrc there are additional 16 bytes added on offset 0x70 within the '''Tree Table''' | |||
{| class="wikitable" | |||
! Offset !! Size !! Example !! Remark | |||
|- | |- | ||
| | | 0x70 || 0x04 || 00 00 00 00 || on icontex.qrc | ||
|- | |- | ||
| | | 0x74 || 0x04 || 00 00 00 1B || String Pointer (Offset within '''String Table''', in this case it will be a Attribute <size>) | ||
|- | |- | ||
| | | 0x78 || 0x04 || 00 00 00 01 || Type Descriptor (1 == Integer) | ||
|- | |- | ||
| | | 0x7C || 0x04 || 00 01 55 D4 || on icontex.qrc (size of .dds uncompressed [Dec = 87508]) | ||
|- | |- | ||
| | | 0x80 || 0x04 || 00 00 00 00 || similar all qrc files | ||
|- | |- | ||
| | | 0x84 || 0x04 || 00 00 00 0F || String Pointer | ||
|- | |- | ||
| | | 0x88 || 0x04 || 00 00 00 02 || Attribute Count | ||
|- | |- | ||
| | | 0x8C || 0x04 || 00 00 00 1C || Parent Element | ||
|- | |- | ||
| | | 0x90 || 0x04 || 00 00 00 38 || Previous Element | ||
|- | |- | ||
| | | 0x94 || 0x04 || 00 00 00 D0 || Next Element | ||
|- | |- | ||
|} | |} | ||
Line 422: | Line 354: | ||
Every <file> inside <file-table> has assigned 2 attributes in the xml used to create the container: "src" (includes full path + file name + file extension), and "id" (only file name), plus the attribute "size" in QRCF_2 that is added by the program that creates the container ("size" is not present in the original .xml but added automatically when the container is created, this only happens in QRCF_2 and themes and is related with the per-file compression) | Every <file> inside <file-table> has assigned 2 attributes in the xml used to create the container: "src" (includes full path + file name + file extension), and "id" (only file name), plus the attribute "size" in QRCF_2 that is added by the program that creates the container ("size" is not present in the original .xml but added automatically when the container is created, this only happens in QRCF_2 and themes and is related with the per-file compression) | ||
*For QRCF_1 containers only is stored the "src" (the file "id" is missing | *For QRCF_1 containers only is stored the "src" (the file "id" is missing althougth can be deduced from the "src") | ||
*For QRCF_2 and P3T themes only is stored the "id" (the file "src" is missing so there is no way to read the original path or file extension from the container) | *For QRCF_2 and P3T themes only is stored the "id" (the file "src" is missing so there is no way to read the original path or file extension from the container) | ||
{{Boxcode| | {{Boxcode|content=<syntaxhighlight lang="xml"> | ||
<?xml version="1.0" encoding="UTF-8"?> | <?xml version="1.0" encoding="UTF-8"?> | ||
<qrc> | <qrc> | ||
Line 454: | Line 386: | ||
===String Table=== | ===String Table=== | ||
This area is composed by a consecutive list of all the tags (elements or attributes) from the xml that was used to create the container. Are stored "from-top-to-bottom" in the exact same order that they was ordered in the xml ( | This area is composed by a consecutive list of all the tags (elements or attributes) from the xml that was used to create the container. Are stored "from-top-to-bottom" in the exact same order that they was ordered in the xml (althougth it looks in some cases the theme compiler reorders them to his convenience). This list doesnt makes differences of the "directory hierarchy" of the tags neither is specifyed if the tag is an element or an attribute (this parent-child hierarchy is defined in other place of the container by making references to this area by using "byte counters" to locate a tag) | ||
In all the .qrc files (QRCF_1) except icontex.qrc (QRCF_2). The only difference is QRCF_2 adds the "size" to all the <file> elements (added by the container creator, related with the "per-file" compression) | In all the .qrc files (QRCF_1) except icontex.qrc (QRCF_2). The only difference is QRCF_2 adds the "size" to all the <file> elements (added by the container creator, related with the "per-file" compression) | ||
Line 534: | Line 466: | ||
| 0x00000006 || '''File''' || Composed of '''Offset''' and '''Size''' each 4 bytes long | | 0x00000006 || '''File''' || Composed of '''Offset''' and '''Size''' each 4 bytes long | ||
|- | |- | ||
| 0x00000007 || '''ID | | 0x00000007 || '''ID''' || Composed of '''Offset''' and '''Size''' each 4 bytes long | ||
|- | |- | ||
|} | |} | ||
The Typ '''File''' is used to descripe two integer values, the Offset and Size for a File which will be readed from '''File Table'''. The Typ '''ID | The Typ '''File''' is used to descripe two integer values, the Offset and Size for a File which will be readed from '''File Table'''. The Typ '''ID''' is used to descripe the Offset of a Filename within the '''ID Table'''. The Size value from '''ID''' seems not to be used in Containers. | ||
Line 585: | Line 516: | ||
==Container Structure variations== | ==Container Structure variations== | ||
=== | ===QRC=== | ||
ZLIB Compressed level 9 (in both cases and in all files?) | |||
==== QRCC ==== | |||
QRCC ('''Q'''t '''R'''esources '''C'''ontainer '''C'''ompressed) | |||
In the practise and from the point of view of the system, the QRCC has no interest and is needed to decompress the whole QRCC to be able to read the internal structure of the container and to acess individual files, when a QRCC is decompressed it generates an QRCF file (the real container) but this QRCF has a different internal structure than the QRCF used by icontex.qrc (are 2 variations of the same container with some small differences... althougth both uses the same identifyer QRCF) | |||
'''Offset(h) 00 01 02 03 | *Example from 3.55 rhm.qrc: | ||
'''00000000''' <span style="background:# | '''Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F''' | ||
'''00000000''' <span style="background:#ff6666;">51 52 43 43</span> <span style="background:#8888ff;">00 00 28 00</span> <span style="background:#00ff00;">78 DA</span> QRCC..(.xÚ | |||
{| class="wikitable" | {| class="wikitable" | ||
Line 608: | Line 533: | ||
! Name !! Offset !! Size !! Example !! Remark | ! Name !! Offset !! Size !! Example !! Remark | ||
|- | |- | ||
| Magic || 0x00 || 0x04 || {{cellcolors|# | | Magic || 0x00 || 0x04 || {{cellcolors|#ff6666}} 51 52 43 43 || 'QRCC' | ||
|- | |- | ||
| | | QRCF decompressed size || 0x04 || 0x04 || {{cellcolors|#8888ff}} 00 00 28 00 || The size of the QRCF file generated when a QRCC is decompressed | ||
|- | |- | ||
| | | compressed QRCF || 0x08 || ''varies, up to the end of the QRCC file'' || {{cellcolors|#00FF00}} 78 DA... || QRCF file start offset, compressed with ZLIB | ||
|- | |- | ||
| | |} | ||
*Notes | |||
**The first 2 bytes of the compressed QRCF is the ZLIB header, in this example: 0x78DA | |||
**default/max level 9 | |||
* | ==== QRCF ==== | ||
** | QRCF ('''Q'''t '''R'''esources '''C'''ontainer '''F'''lat?) | ||
===P3T=== | |||
=== P3TF === | |||
P3TF ('''P'''laystation '''3''' '''T'''heme '''F'''lat?) | |||
====Main Header==== | |||
The header contains an identifyer of the container (magic), his version, and allows to store the "absolute start offset" and "size" of 7 tables (or areas) | |||
When a "not used table" is placed before a "used table"... the start offset of the "not used table" and his size (as zero) are stored in the main header to preserve his position in the structure. The "used table" that comes later starts in the same offset than the previouslly "not used table" (an intuitive way to think in this is imagining are overlapped because starts in the same position but only the one at the top is used) | |||
*The container format is generic (used also by .RAF and .QRC with some variations) so the usage of this tables can vary, in this example there are 3 "not used tables": | |||
**two of the "not used tables" (both at offset 0x460 with a size of 0) are placed before an used table (also at offset 0x460 but with a size of 0x23A0) | |||
**the other "not used table" is placed at the end, so there is no need to store his offset | |||
'''Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F''' | |||
'''00000000''' <span style="background:#666666;">50 33 54 46</span> <span style="background:#888888;">00 00 01 10</span> <span style="background:#dddd66;">00 00 00 40</span> <span style="background:#ffff88;">00 00 02 CC</span> P3TF.......@..%| | |||
'''00000010''' <span style="background:#dd6666;">00 00 03 10</span> <span style="background:#ff8888;">00 00 01 2B</span> <span style="background:#66dddd;">00 00 04 40</span> <span style="background:#88ffff;">00 00 00 1B</span> ..%À......9Ð.... | |||
'''00000020''' <span style="background:#66dd66;">00 00 04 60</span> <span style="background:#88ff88;">00 00 00 00</span> <span style="background:#dd66dd;">00 00 04 60</span> <span style="background:#ff88ff;">00 00 00 00</span> ..9ð......9ð.... | |||
'''00000030''' <span style="background:#6666dd;">00 00 04 60</span> <span style="background:#8888ff;">00 00 23 A0</span> <span style="background:#aee2ae;">00 00 00 00</span> <span style="background:#cef2ce;">00 00 00 00</span> ..9ð..@p........ | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Name !! Offset !! Size !! Example !! Remark | |||
|- | |- | ||
| 0x04 || | | Magic || 0x00 || 0x04 || {{cellcolors|#666666|#ffffff}} 51 52 43 46 || 'P3TF' | ||
|- | |- | ||
| | | Version || 0x04 || 0x04 || {{cellcolors|#888888|#ffffff}} 00 00 01 10 || | ||
|- | |- | ||
| | | Tree Table Offset || 0x08 || 0x04 || {{cellcolors|#dddd66}} 00 00 00 40 || | ||
|- | |- | ||
| | | Tree Table Size || 0x0C || 0x04 || {{cellcolors|#ffff88}} 00 00 02 CC || | ||
|- | |- | ||
| | | ID Table Offset || 0x10 || 0x04 || {{cellcolors|#dd6666}} 00 00 03 10 || | ||
|- | |- | ||
| | | ID Table Size || 0x14 || 0x04 || {{cellcolors|#ff8888}} 00 00 01 2B || | ||
|- | |- | ||
| | | String Table Offset || 0x18 || 0x04 || {{cellcolors|#66dddd}} 00 00 04 40 || | ||
|- | |- | ||
| | | String Table Size || 0x1C || 0x04 || {{cellcolors|#88ffff}} 00 00 00 1B || | ||
|- | |- | ||
| | | Integer Array Offset || 0x20 || 0x04 || {{cellcolors|#66dd66}} 00 00 04 60 || Overlapped | ||
|- | |- | ||
| | | Integer Array size || 0x24 || 0x04 || {{cellcolors|#88ff88}} 00 00 00 00 || Not used | ||
|- | |- | ||
| | | Float Array Offset || 0x28 || 0x04 || {{cellcolors|#dd66dd}} 00 00 04 60 || Overlapped | ||
|- | |- | ||
| | | Float Array Size || 0x2C || 0x04 || {{cellcolors|#ff88ff}} 00 00 00 00 || Not used | ||
|- | |- | ||
| | | File Table Offset || 0x30 || 0x04 || {{cellcolors|#6666dd}} 00 00 04 60 || Overlaps the previous 2 tables | ||
|- | |- | ||
| | | File Table Size || 0x34 || 0x04 || {{cellcolors|#8888ff}} 00 00 23 A0 || | ||
|- | |||
| ''Unknown Table Offset'' || 0x38 || 0x04 || {{cellcolors|#aee2ae}} 00 00 00 00 || Not present | |||
|- | |- | ||
| 0x3C || 0x04 || 00 00 00 | | ''Unknown Table Size'' || 0x3C || 0x04 || {{cellcolors|#cef2ce}} 00 00 00 00 || Not Used | ||
|- | |- | ||
| | |} | ||
*Notes | |||
**The sizes doesnt includes the (posible) padding at the end of all tables | |||
====Tree Table==== | |||
{| class="wikitable" | |||
! Offset !! Size !! Example !! Remark | |||
|- | |- | ||
| | | 0x00 || 0x04 || 00 00 00 00 || String Pointer (Offset within '''String Table''', in this case it will be <p3t>) | ||
|- | |- | ||
| | | 0x04 || 0x04 || 00 00 00 00 || Attribute Counter | ||
|- | |- | ||
| | | 0x08 || 0x04 || FF FF FF FF || Parent | ||
|- | |- | ||
| | | 0x0C || 0x04 || FF FF FF FF || Previous Element | ||
|- | |- | ||
| | | 0x10 || 0x04 || FF FF FF FF || Next Element | ||
|- | |||
| 0x14 || 0x04 || 00 00 00 1C || First Element within the root Element (p3t) | |||
|- | |||
| 0x18 || 0x04 || 00 00 18 B4 || Last Element within the root Element (p3t) | |||
|- | |||
| 0x1C || 0x04 || 00 00 00 06 || String Pointer (Offset within '''String Table''', in this case it will be <infotable>) | |||
|- | |||
| 0x20 || 0x04 || 00 00 00 00 || Attribute Counter | |||
|- | |||
| 0x24 || 0x04 || 00 00 00 00 || Parent | |||
|- | |||
| 0x28 || 0x04 || FF FF FF FF || Previous ELement | |||
|- | |||
| 0x2C || 0x04 || 00 00 01 AC || Next Element | |||
|- | |||
| 0x30 || 0x04 || 00 00 00 38 || First Entry | |||
|- | |||
| 0x34 || 0x04 || 00 00 01 60 || Last Entry | |||
|- | |||
| 0x38 || 0x04 || 00 00 00 10 || String Pointer (Offset within '''String Table''', in this case it will be <info>) | |||
|- | |||
| 0x3C || 0x04 || 00 00 00 0D || Attribute Counter (0x0D == 13, the 13 Attributes of <info> Element) | |||
|- | |||
| 0x40 || 0x04 || 00 00 00 1C || Parent Element (Offset withing '''Tree Table''', in this case it will be <infotable>) | |||
|- | |||
| 0x44 || 0x04 || FF FF FF FF || Previous Element | |||
|- | |||
| 0x48 || 0x04 || 00 00 01 24 || Next Element | |||
|- | |||
| 0x4C || 0x04 || FF FF FF FF || First Entry | |||
|- | |||
| 0x50 || 0x04 ||FF FF FF FF || Last Entry | |||
|- | |||
|} | |||
====String Table==== | |||
This area is composed by a consecutive list of all the tags (elements or attributes) from the xml that was used to create the container. Are stored "from-top-to-bottom" in the exact same order that they was ordered in the xml (althougth it looks in some cases the theme compiler reorders them to his convenience). This list doesnt makes differences of the "directory hierarchy" of the tags neither is specifyed if the tag is an element or an attribute (this parent-child hierarchy is defined in other place of the container by making references to this area by using "byte counters" to locate a tag) | |||
'''Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F''' | '''Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F''' | ||
'''00000000''' | '''00000000''' <span style="background:#ffff66;">74 68 65 6D 65 00 69 6E 66 6F 74 61 62 6C 65 00</span> theme.infotable. | ||
''' | '''00000010''' <span style="background:#ffff66;">69 6E 66 6F 00 63 6F 6D 6D 65 6E 74 00 45 6E 6A</span> info.comment.Enj | ||
''' | '''00000020''' <span style="background:#ffff66;">6F 79 2E 00 70 72 65 76 69 65 77 73 69 7A 65 00</span> oy..previewsize. | ||
''' | '''00000030''' <span style="background:#ffff66;">6E 61 6D 65 00 48 45 41 56 59 20 52 61 69 6E 20</span> name.HEAVY.Rain. | ||
''' | '''00000040''' <span style="background:#ffff66;">74 68 65 6D 65 00 61 75 74 68 6F 72 00 51 75 61</span> theme.author.Qua | ||
''' | '''00000050''' <span style="background:#ffff66;">6E 74 69 63 44 72 65 61 6D 00 75 72 6C 00 68 74</span> nticDream.url.ht | ||
''' | '''00000060''' <span style="background:#ffff66;">74 70 3A 2F 2F 77 77 77 2E 71 75 61 6E 74 69 63</span> tp://www.quantic | ||
'''00000070''' <span style="background:#ffff66;">64 72 65 61 6D 2E 63 6F 6D 00 61 75 74 68 6F 72</span> dream.com.author | |||
'''00000080''' <span style="background:#ffff66;">69 63 6F 6E 73 69 7A 65 00 61 75 74 68 6F 72 69</span> iconsize.authori | |||
'''00000090''' <span style="background:#ffff66;">63 6F 6E 00 69 63 6F 6E 73 69 7A 65 00 76 65 72</span> con.iconsize.ver | |||
'''000000A0''' <span style="background:#ffff66;">73 69 6F 6E 00 76 65 72 73 69 6F 6E 20 31 2E 30</span> sion.version.1.0 | |||
= | '''000000B0''' <span style="background:#ffff66;">00 6D 74 69 6D 65 00 32 30 30 39 31 30 33 30 31</span> .mtime.200910301 | ||
'''000000C0''' <span style="background:#ffff66;">36 31 33 34 33 00 67 65 6E 72 65 00 6F 74 68 65</span> 61343.genre.othe | |||
'''000000D0''' <span style="background:#ffff66;">72 73 00 70 72 65 76 69 65 77 00 69 63 6F 6E 00</span> re.preview.icon. | |||
'''000000E0''' <span style="background:#ffff66;">6C 6F 63 61 6C 69 7A 65 64 69 6E 66 6F 00 6C 6F</span> localizedinfo.lo | |||
'''000000F0''' <span style="background:#ffff66;">63 61 6C 65 00 E3 81 93 E3 82 8C E3 81 AF E3 82</span> cale.ã“ã‚Œã¯ã‚ | |||
'''00000100''' <span style="background:#ffff66;">B5 E3 83 B3 E3 83 97 E3 83 AB E3 83 86 E3 83 BC</span> µãƒ³ãƒ—ルテー | |||
'''00000110''' <span style="background:#ffff66;">E3 83 9E E3 83 95 E3 82 A1 E3 82 A4 E3 83 AB E3</span> マファイルã | |||
'''00000120''' <span style="background:#ffff66;">81 A7 E3 81 99 E3 80 82 00 69 63 6F 6E 74 61 62</span> §ã™ã€‚.icontab | |||
''' | '''00000130''' <span style="background:#ffff66;">6C 65 00 73 72 63 00 69 64 00 73 69 7A 65 00 70</span> le.src.id.size.p | ||
''' | '''00000140''' <span style="background:#ffff66;">6F 69 6E 74 65 72 74 61 62 6C 65 00 70 6F 69 6E</span> ointertable.poin | ||
'''00000150''' <span style="background:#ffff66;">74 65 72 00 62 61 73 65 5F 78 00 62 61 73 65 5F</span> ter.base_X.base_ | |||
'''00000160''' <span style="background:#ffff66;">79 00 6E 6F 74 69 66 69 63 61 74 69 6F 6E 00 62</span> y.notification.b | |||
'''00000170''' <span style="background:#ffff66;">67 69 6D 61 67 65 74 61 62 6C 65 00 62 67 69 6D</span> gimagetable.bgim | |||
'''00000180''' <span style="background:#ffff66;">61 67 65 00 61 6E 69 6D 00 66 6F 6E 74 00 73 65</span> age.anim.font.se | |||
'''00000190''' <span style="background:#ffff66;">6C 65 63 74 69 6F 6E 00 63 6F 6C 6F 72</span> <span style="background:#ff6666;">00 00 00</span> lection.color | |||
*Notes: | |||
**yellow: used bytes | |||
**red: padding to align to 0x10 bytes | |||
**The integer values and text strings of some attributes tags from the xml (e.g: "themename=mytheme", or "fontcolor=2") are stored in this area too at the right of his tag, the presence of an integer value displaces the next tag (this only happens in themes and rafs, not in QRC files so is added here as a note but is very important for the structure of the other containers when using "byte counters" to locate the tags) | |||
==== | ====ID Table==== | ||
The '''ID Table''' of a P3T also can hold additional information for the <localizedinfo> Element. | |||
'''Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F''' | |||
'''00000000''' 00 00 01 24 65 6E 00 00 00 01 60 6A 70 00 00 00 ...$<span style="background:#ffff66;">en</span>....`<span style="background:#ffff66;">jp</span>... | |||
'''00000010''' 01 C8 69 63 6F 6E 5F 75 73 65 72 00 00 00 02 14 .Èicon_user..... | |||
'''00000020''' 69 63 6F 6E 5F 73 65 74 74 69 6E 67 00 00 00 02 icon_setting.... | |||
'''00000030''' 60 69 63 6F 6E 5F 70 68 6F 74 6F 00 00 00 02 AC `icon_photo....¬ | |||
'''00000040''' 69 63 6F 6E 5F 6D 75 73 69 63 00 00 00 02 F8 69 icon_music....øi | |||
'''00000050''' 63 6F 6E 5F 76 69 64 65 6F 00 00 00 03 44 69 63 con_video....Dic | |||
'''00000060''' 6F 6E 5F 67 61 6D 65 00 [...] on_game | |||
====File Table==== | |||
The files are not concatenated in the same order than in the '''Tree Table''' & '''ID Table'''. There are even some file within the '''File Table''' which are not contained in '''ID Table'''(anim.raf, authoricon, ect.,...). | |||
==Summary== | |||
===Table Description=== | |||
For P3T i will use the Info Array to describe (place where all the infos from the <info> Element will be stored). The other File's follow the same handling like for QRC. (Well the Info Array does also follow the same handling but we have here 13 Attributes and it will also read some values not present in a QRC Container.) Also you can see here again that if a ID is readed then the entry Offset of a Element is also used as a 4 byte long pointer within '''ID Table'''. You start from the Offset the '''Tree Table''' is given you and the next readed 4 bytes should match the entry offset of the Element in '''Tree Table'''. | |||
''' ''Tree Table of HeavyRain.p3t'' ''ID Table of HeavyRain.p3t''''' | |||
'''<span style="background:#FCDFFF;">Typ Descriptor</span> A Integer value which describe the Typ of the Attribute (3 == String) <span style="background:#ff6666;">Next Element</span>''' | '''Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F''' | ||
'''00000050''' [...] <span style="background:#ccd815;">00 00 00 15</span> <span style="background:#FCDFFF;">00 00 00 03</span> <span style="background:#00FFFF;">00 00 00 1D</span> ............ '''00000000''' <span style="background:#00FFFF;">00</span> <span style="background:#ffff66;">00 01 24</span> 65 6E 00 <span style="background:#00FFFF;">00</span> <span style="background:#ffff66;">00 01 60</span> 6A 70 00 00 00 <span style="background:#00FFFF;">.</span><span style="background:#ffff66;">..$</span>en.<span style="background:#00FFFF;">.</span><span style="background:#ffff66;">..`</span>jp... | |||
'''<span style="background:#00FFFF;">String Offset</span> A Integer value which describe the Offset of a String within '''String Table''' <span style="background:#cef2ce;">First Entry</span>''' | '''00000060''' <span style="background:#2bffb3;">00 00 00 06</span> <span style="background:#ccd815;">00 00 00 24</span> <span style="background:#FCDFFF;">00 00 00 01</span> <span style="background:#9CB071;">00 07 E9 80</span> .......$......é€ '''00000010''' 01 C8 69 63 6F 6E 5F 75 73 65 72 00 00 00 02 14 .Èicon_user..... | ||
'''00000070''' 00 00 00 00 <span style="background:#ccd815;">00 00 00 30</span> <span style="background:#FCDFFF;">00 00 00 03</span> <span style="background:#00FFFF;">00 00 00 35</span> .......0.......5 '''00000020''' 69 63 6F 6E 5F 73 65 74 74 69 6E 67 00 00 00 02 icon_setting.... | |||
'''<span style="background:#2bffb3;">Length of String</span> A Integer value which describe the Length of the String to read from '''String Table''' <span style="background:#5CB3FF;">Last Entry</span>''' | '''00000080''' <span style="background:#2bffb3;">00 00 00 10</span> <span style="background:#ccd815;">00 00 00 46</span> <span style="background:#FCDFFF;">00 00 00 03</span> <span style="background:#00FFFF;">00 00 00 4D</span> .......F.......M '''00000030''' 60 69 63 6F 6E 5F 70 68 6F 74 6F 00 00 00 02 AC `icon_photo....¬ | ||
'''00000090''' <span style="background:#2bffb3;">00 00 00 0C</span> <span style="background:#ccd815;">00 00 00 5A</span> <span style="background:#FCDFFF;">00 00 00 03</span> <span style="background:#00FFFF;">00 00 00 5E</span> .......Z.......^ '''00000040''' 69 63 6F 6E 5F 6D 75 73 69 63 00 00 00 02 F8 69 icon_music....øi | |||
'''<span style="background:#ccd815;">String Pointer</span> -"- (in this case a Attribute <previewsize>) <span style="background:#ccd815;">String Pointer</span> -"- (in this case a Attribute <local>)''' | '''000000A0''' <span style="background:#2bffb3;">00 00 00 1B</span> <span style="background:#ccd815;">00 00 00 7A</span> <span style="background:#FCDFFF;">00 00 00 01</span> <span style="background:#9CB071;">00 00 40 80</span> .......z......@€ '''00000050''' 63 6F 6E 5F 76 69 64 65 6F 00 00 00 03 44 69 63 con_video....Dic | ||
'''000000B0''' 00 00 00 00 <span style="background:#ccd815;">00 00 00 89</span> <span style="background:#FCDFFF;">00 00 00 06</span> <span style="background:#6666ff;">00 00 00 00</span> .......‰........ '''00000060''' 6F 6E 5F 67 61 6D 65 00 [...] on_game [...] | |||
'''<span style="background:#FCDFFF;">Typ Descriptor</span> A Integer value which describe the Typ of the Attribute (1 == Integer) <span style="background:#FCDFFF;">Typ Descriptor</span> -"- (7 == ID)''' | '''000000C0''' <span style="background:#2bffb3;">00 00 1A 0B</span> 00 00 00 94 00 00 00 01 00 00 40 80 .......”......@€ | ||
'''000000D0''' 00 00 00 00 00 00 00 9D 00 00 00 03 00 00 00 A5 ...............¥ '''''String Table of HeavyRain.p3t''''' | |||
'''<span style="background:#9CB071;">Integer Hex Value</span> A Integer Value which describe the size of the icon "preview" <span style="background:#00FFFF;">ID Offset</span>''' | '''000000E0''' 00 00 00 0B 00 00 00 B1 00 00 00 03 00 00 00 B7 .......±.......· | ||
'''000000F0''' 00 00 00 0E 00 00 00 C6 00 00 00 03 00 00 00 CC .......Æ.......Ì '''Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F''' | |||
'''<span style="background:#ccd815;">String Pointer</span> -"- (in this case a Attribute <name>) <span style="background:#ccd815;">String Pointer</span> -"- (in this case a Attribute <name>)''' | '''00000100''' 00 00 00 06 00 00 00 D3 00 00 00 06 00 00 1A 10 .......Ó........ '''00000000''' 74 68 65 6D 65 00 69 6E 66 6F 74 61 62 6C 65 00 theme.infotable. | ||
'''00000110''' 00 02 12 99 00 00 00 DB 00 00 00 06 00 02 2C B0 ...™...Û......,° '''00000010''' 69 6E 66 6F 00 <span style="background:#ccd815;">63</span> 6F 6D 6D 65 6E 74 00 <span style="background:#00FFFF;">45</span> <span style="background:#2bffb3;">6E 6A</span> info.<span style="background:#ccd815;">c</span>omment.<span style="background:#00FFFF;">E</span><span style="background:#2bffb3;">nj</span> | |||
'''<span style="background:#FCDFFF;">Typ Descriptor</span> -"- (3 == String) <span style="background:#FCDFFF;">Typ Descriptor</span> -"- (3 == String)''' | '''00000120''' 00 00 1F CE <span style="background:#ccd815;">00 00 00 E0</span> <span style="background:#43BFC7;">00 00 00 02</span> <span style="background:#9AFEFF;">00 00 00 1C</span> ...Î...à........ '''00000020''' <span style="background:#2bffb3;">6F 79 2E</span> 00 <span style="background:#ccd815;">70</span> 72 65 76 69 65 77 73 69 7A 65 00 <span style="background:#2bffb3;">oy</span>..<span style="background:#ccd815;">p</span>reviewsize. | ||
'''00000130''' <span style="background:#ffff66;">00 00 00 38</span> <span style="background:#ff6666;">00 00 01 60</span> <span style="background:#cef2ce;">FF FF FF FF</span> <span style="background:#5CB3FF;">FF FF FF FF</span> ...8...`ÿÿÿÿÿÿÿÿ '''00000030''' <span style="background:#ccd815;">6E</span> 61 6D 65 00 <span style="background:#00FFFF;">48</span> <span style="background:#2bffb3;">45 41 56 59 20 52 61 69 6E 20</span> <span style="background:#ccd815;">n</span>ame.<span style="background:#00FFFF;">H</span><span style="background:#2bffb3;">EAVY.Rain.</span> | |||
'''<span style="background:#00FFFF;">String Offset</span> <span style="background:#00FFFF;">String Offset</span>''' | '''00000140''' <span style="background:#ccd815;">00 00 00 EE</span> <span style="background:#FCDFFF;">00 00 00 07</span> <span style="background:#FCDFFF;">00 00 00 00</span> 00 00 00 00 ...î............ '''00000040''' <span style="background:#2bffb3;">74 68 65 6D 65</span> 00 <span style="background:#ccd815;">61</span> 75 74 68 6F 72 00 <span style="background:#00FFFF;">51</span> <span style="background:#2bffb3;">75 61</span> <span style="background:#2bffb3;">theme</span>.<span style="background:#ccd815;">a</span>uthor.<span style="background:#00FFFF;">Q</span><span style="background:#2bffb3;">ua</span> | ||
'''00000150''' <span style="background:#ccd815;">00 00 00 30</span> <span style="background:#FCDFFF;">00 00 00 03</span> <span style="background:#00FFFF;">00 00 00 35</span> <span style="background:#2bffb3;">00 00 00 10</span> ...0.......5.... '''00000050''' <span style="background:#2bffb3;">6E 74 69 63 44 72 65 61 6D</span> 00 <span style="background:#ccd815;">75</span> 72 6C 00 <span style="background:#00FFFF;">68</span> <span style="background:#2bffb3;">74</span> <span style="background:#2bffb3;">nticDream</span>.<span style="background:#ccd815;">u</span>rl.<span style="background:#00FFFF;">h</span><span style="background:#2bffb3;">t</span> | |||
'''<span style="background:#2bffb3;">Length of String</span> <span style="background:#2bffb3;">Length of String</span>''' | '''00000160''' <span style="background:#ccd815;">00 00 00 E0</span> <span style="background:#43BFC7;">00 00 00 03</span> <span style="background:#9AFEFF;">00 00 00 1C</span> <span style="background:#ffff66;">00 00 01 24</span> ...à...........$ '''00000060''' <span style="background:#2bffb3;">74 70 3A 2F 2F 77 77 77 2E 71 75 61 6E 74 69 63</span> <span style="background:#2bffb3;">tp://www.quantic</span> | ||
'''00000170''' <span style="background:#ff6666;">FF FF FF FF</span> <span style="background:#cef2ce;">FF FF FF FF</span> <span style="background:#5CB3FF;">FF FF FF FF</span> <span style="background:#ccd815;">00 00 00 EE</span> ÿÿÿÿÿÿÿÿÿÿÿÿ...î '''00000070''' <span style="background:#2bffb3;">64 72 65 61 6D 2E 63 6F 6D</span> 00 <span style="background:#ccd815;">61</span> 75 74 68 6F 72 <span style="background:#2bffb3;">dream.com</span>.<span style="background:#ccd815;">a</span>uthor | |||
'''<span style="background:#ccd815;">String Pointer</span> -"- (in this case a Attribute <author>) <span style="background:#ccd815;">String Pointer</span> -"- (in this case a Element <localizedinfo>)''' | '''00000180''' <span style="background:#FCDFFF;">00 00 00 07</span> <span style="background:#FCDFFF;">00 00 00 07</span> 00 00 00 00 <span style="background:#ccd815;">00 00 00 15</span> ................ '''00000080''' 69 63 6F 6E 73 69 7A 65 00 <span style="background:#ccd815;">61</span> 75 74 68 6F 72 69 iconsize.<span style="background:#ccd815;">a</span>uthori | ||
'''00000190''' <span style="background:#FCDFFF;">00 00 00 03</span> <span style="background:#00FFFF;">00 00 00 F5</span> <span style="background:#2bffb3;">00 00 00 33</span> <span style="background:#ccd815;">00 00 00 30</span> .......õ...3...0 '''00000090''' 63 6F 6E 00 69 63 6F 6E 73 69 7A 65 00 76 65 72 con.iconsize.ver | |||
'''<span style="background:#FCDFFF;">Typ Descriptor</span> -"- (3 == String) <span style="background:#43BFC7;">Attribute Counter</span> (0x03 == 3)''' | '''000001A0''' <span style="background:#FCDFFF;">00 00 00 03</span> <span style="background:#00FFFF;">00 00 00 35</span> <span style="background:#2bffb3;">00 00 00 10</span> 00 00 01 29 .......5.......) '''000000A0''' 73 69 6F 6E 00 76 65 72 73 69 6F 6E 20 31 2E 30 sion.version.1.0 | ||
'''000000B0''' 00 6D 74 69 6D 65 00 32 30 30 39 31 30 33 30 31 .mtime.200910301 | |||
'''<span style="background:#00FFFF;">String Offset</span> <span style="background:#9AFEFF;">Parent</span>''' | '''000000C0''' 36 31 33 34 33 00 67 65 6E 72 65 00 6F 74 68 65 61343.genre.othe | ||
'''000000D0''' 72 73 00 70 72 65 76 69 65 77 00 69 63 6F 6E 00 re.preview.icon. | |||
'''000000E0''' <span style="background:#ccd815;">6C</span> 6F 63 61 6C 69 7A 65 64 69 6E 66 6F 00 <span style="background:#ccd815;">6C</span> 6F <span style="background:#ccd815;">l</span>ocalizedinfo.<span style="background:#ccd815;">l</span>o | |||
'''000000F0''' 63 61 6C 65 00 <span style="background:#00FFFF;">E3</span> <span style="background:#2bffb3;">81 93 E3 82 8C E3 81 AF E3 82</span> cale.<span style="background:#00FFFF;">ã</span><span style="background:#2bffb3;">“ã‚Œã¯ã‚</span> | |||
'''00000100''' <span style="background:#2bffb3;">B5 E3 83 B3 E3 83 97 E3 83 AB E3 83 86 E3 83 BC</span> <span style="background:#2bffb3;">µãƒ³ãƒ—ルテー</span> | |||
'''00000110''' <span style="background:#2bffb3;">E3 83 9E E3 83 95 E3 82 A1 E3 82 A4 E3 83 AB E3</span> <span style="background:#2bffb3;">マファイルã</span> | |||
'''00000120''' <span style="background:#2bffb3;">81 A7 E3 81 99 E3 80 82</span> 00 69 63 6F 6E 74 61 62 <span style="background:#2bffb3;">§ã™ã€‚</span>.icontab | |||
'''00000130''' 6C 65 00 73 72 63 00 69 64 00 73 69 7A 65 00 70 le.src.id.size.p | |||
'''00000140''' 6F 69 6E 74 65 72 74 61 62 6C 65 00 70 6F 69 6E ointertable.poin | |||
'''00000150''' 74 65 72 00 62 61 73 65 5F [...] ter.base_ [...] | |||
====Typ Description==== | |||
{| class="wikitable" | |||
|- | |||
! Value !! Typ !! Notes | |||
|- | |||
| 0x00000001 || '''Integer''' || Composed of '''Offset''' and '''Length''' each 4 bytes long | |||
|- | |||
| 0x00000003 || '''String''' || Composed of '''Offset''' and '''Length'''' each 4 bytes long | |||
|- | |||
| 0x00000006 || '''File''' || Composed of '''Offset''' and '''Size''' each 4 bytes long | |||
|- | |||
| 0x00000007 || '''ID''' || Composed of '''Offset''' and '''Length''' each 4 bytes long | |||
|- | |||
|} | |||
The Typ '''File''' is used to descripe two integer values, the Offset and Size for a File which will be readed from '''File Table'''. The Typ '''ID''' is used to descripe the Offset of a Filename within the '''ID Table'''. The Size value from '''ID''' seems not to be used in Containers. This is similar to '''Integer''' Typ but here the offset value is used to store the size of a file. '''String''' describe the Offset and Length of a string to read from '''String Table'''. | |||
'''<span style="background:#ccd815;">String Pointer</span> Points to a Offset within '''String Table''' which represents a string (in this case a Attribute <comment>) <span style="background:#ffff66;">Previous Element</span>''' | |||
'''<span style="background:#FCDFFF;">Typ Descriptor</span> A Integer value which describe the Typ of the Attribute (3 == String) <span style="background:#ff6666;">Next Element</span>''' | |||
'''<span style="background:#00FFFF;">String Offset</span> A Integer value which describe the Offset of a String within '''String Table''' <span style="background:#cef2ce;">First Entry</span>''' | |||
'''<span style="background:#2bffb3;">Length of String</span> A Integer value which describe the Length of the String to read from '''String Table''' <span style="background:#5CB3FF;">Last Entry</span>''' | |||
'''<span style="background:#ccd815;">String Pointer</span> -"- (in this case a Attribute <previewsize>) <span style="background:#ccd815;">String Pointer</span> -"- (in this case a Attribute <local>)''' | |||
'''<span style="background:#FCDFFF;">Typ Descriptor</span> A Integer value which describe the Typ of the Attribute (1 == Integer) <span style="background:#FCDFFF;">Typ Descriptor</span> -"- (7 == ID)''' | |||
'''<span style="background:#9CB071;">Integer Hex Value</span> A Integer Value which describe the size of the icon "preview" <span style="background:#00FFFF;">ID Offset</span>''' | |||
'''<span style="background:#ccd815;">String Pointer</span> -"- (in this case a Attribute <name>) <span style="background:#ccd815;">String Pointer</span> -"- (in this case a Attribute <name>)''' | |||
'''<span style="background:#FCDFFF;">Typ Descriptor</span> -"- (3 == String) <span style="background:#FCDFFF;">Typ Descriptor</span> -"- (3 == String)''' | |||
'''<span style="background:#00FFFF;">String Offset</span> <span style="background:#00FFFF;">String Offset</span>''' | |||
'''<span style="background:#2bffb3;">Length of String</span> <span style="background:#2bffb3;">Length of String</span>''' | |||
'''<span style="background:#ccd815;">String Pointer</span> -"- (in this case a Attribute <author>) <span style="background:#ccd815;">String Pointer</span> -"- (in this case a Element <localizedinfo>)''' | |||
'''<span style="background:#FCDFFF;">Typ Descriptor</span> -"- (3 == String) <span style="background:#43BFC7;">Attribute Counter</span> (0x03 == 3)''' | |||
'''<span style="background:#00FFFF;">String Offset</span> <span style="background:#9AFEFF;">Parent</span>''' | |||
'''<span style="background:#2bffb3;">Length of String</span> <span style="background:#ffff66;">Previous Element</span>''' | '''<span style="background:#2bffb3;">Length of String</span> <span style="background:#ffff66;">Previous Element</span>''' | ||
Line 866: | Line 828: | ||
'''<span style="background:#9AFEFF;">Parent</span> <span style="background:#2bffb3;">Length of String</span>''' | '''<span style="background:#9AFEFF;">Parent</span> <span style="background:#2bffb3;">Length of String</span>''' | ||
===RAF=== | ===RAF=== | ||
==== | ===CXML=== | ||
====HKNW==== | |||
Magic of the container is '''HKNW''' (acronym of hakoniwa) | |||
Hakoniwa is the "Photo Gallery" official app (NPIA00006) that comes partially preinstalled in the firmwares (there is a mandatory icon in XMB photo column and is dependant of hknw_plugin.sprx, but the program itself is not installed with the firmware). To use the program is needed to install the .PKG that installs the rest of the files in dev_hdd0/game/NPIA00006/USRDIR/EBOOT.PBP | |||
In path: '''dev_flash/vsh/resource/hknw_plugin/jacket/''' index.cxml, frame_01.cxml, and frame_05.cxml | |||
* | *Example of the string table from frame_01.cxml | ||
root.version.1.00.jacket.id.normal.base.position.rotation.scale.name.frame_01.filetable.num.file.src.frame_01_lo.gim.lod.frame_01_parallax_512.gtf.shadow_square_1.gtf.shadow_square_2.gtf.shadow_3.gtf.frame_01_mi.gim.frame_01_hi.gim.vptable.vp.vp_jacket_ezprim.vpo.optional.vp_jacket_normalmap.vpo.vp_jacket_ezshadow.vpo.fptable.fp.fp_jacket_ezprim_rgb.fpo.fp_jacket_normalmap_specL.fpo.fp_jacket_ezshadow.fpo.modeltable.model.color.uv.vertex.tangent.binormal.layertable.layer.priority.type.image-frame-static.order.duration.image-thumbnail-auto | |||
*Notes: | |||
**The main tag is <root> like in a standard .xml | |||
**Contains some attribute types (e.g: the second tag <version> has an "attribute type 3" that points to the value "1.00" stored inside the string table) not present in the examples in this wiki page (usefull for completion of the lists of data types numbers) | |||
== | =Examples= | ||
==QRC== | |||
QRCF_1 entry size is 60 bytes (0x3C), QRCF_2 and P3TF entry size is 76 bytes (0x4C), and there is a padding at the end of the tables | |||
* | *Offset (without the 0x40 header in all qrc files) ---> http://666kb.com/i/cib5c7q4y7rpcx9x1.gif | ||
** | *rhm.qrc v1.00 datatable ---> http://i.imgur.com/P9K2rYj.jpg | ||
**The hexeditor view is resized to a width of 0x3C, the marked lines are the 5 entries | |||
**At the start of the first line at top (the line not marked) has been added 4 bytes to be able to align the others to the correct width, this first line at top of the table is the header of the data table | |||
This .XML is used to build the rhm.qrc container from firmware version 1.00, the tags from the XML are included in the "strings table" inside the container and defines his contents and structure. The example is speculative and based in the XML used by themes | |||
{| class="wikitable" | {{Boxcode|content=<syntaxhighlight lang="xml"> | ||
<?xml version="1.0" encoding="UTF-8"?> | |||
<qrc> | |||
<file-table> | |||
<file src="lib/rhm/Clear.fpo" id="lib/rhm/Clear.fpo"/> | |||
<file src="lib/rhm/Clear.vpo" id="lib/rhm/Clear.vpo"/> | |||
<file src="lib/rhm/Copy.fpo" id="lib/rhm/Copy.fpo"/> | |||
<file src="lib/rhm/default.fpo" id="lib/rhm/default.fpo"/> | |||
<file src="lib/rhm/default.vpo" id="lib/rhm/default.vpo"/> | |||
</file-table> | |||
</qrc> | |||
</syntaxhighlight>}} | |||
*Notes: | |||
**For QRCF_2 the "size" is added by the compiler, the xml used to build the container doesnt needs it (like in themes) | |||
{| class="wikitable" style="font-size:x-small;" | |||
|+[[rhm.qrc]] (v1.00) | |||
! Offset !! Size !! Example !! Name !! Notes !! icontex.qrc (v2.00) !! theme.p3t | |||
|- | |- | ||
! | ! colspan="5" | CXML Header | ||
|- | |- {{cellcolors|#666666|#ffffff}} | ||
| Magic || | | 0x00 || 0x04 || QRCF || Magic || QRCF (unnofficially: QRCF_1) || QRCF (unnofficially: QRCF_2) || P3TF | ||
|- | |- {{cellcolors|#666666|#ffffff}} | ||
| | | 0x04 || 0x04 || 00000110 || Version || 110 || 110 || 110 | ||
|- | |- bgcolor="#ff8888" | ||
| | | 0x08 || 0x04 || 00000040 || Data table absolute start offset || 40 || 40 || 40 | ||
|- | |- bgcolor="#ff8888" | ||
| | | 0x0C || 0x04 || 00000164 || Data table size || 164 (without the padding at the end) || 1ECC || 19E8 | ||
|- | |- bgcolor="#88ff88" | ||
| | | 0x10 || 0x04 || 000001B0 || Filename table absolute start offset || 1B0 || 1F10 || 1A30 | ||
|- bgcolor="#88ff88" | |||
| 0x14 || 0x04 || 00000071 || Filename table size || 71 (without the padding at the end) || 326 || 599 | |||
|- bgcolor="#8888ff" | |||
| 0x18 || 0x04 || 00000230 || Strings table absolute start offset || 230 || 2240 || 1FD0 | |||
|- bgcolor="#8888ff" | |||
| 0x1C || 0x04 || 0000001B || Strings table size || 1B without the padding at the end || 20 || 1CE | |||
|- bgcolor="#ffeedd" | |||
| 0x20 || 0x04 || 00000250 || Integer array absolute start offset || ''Overlapped'' || 2260 (overlapped) || 21A0 (overlapped) | |||
|- bgcolor="#ffeedd" | |||
| 0x24 || 0x04 || 00000000 || Integer array size || ''Empty'' || 0 || 0 | |||
|- bgcolor="#ffeebb" | |||
| 0x28 || 0x04 || 00000250 || Float array absolute start offset || ''Overlapped'' || 2260 (overlapped) || 21A0 (overlapped) | |||
|- bgcolor="#ffeebb" | |||
| 0x2C || 0x04 || 00000000 || Float array size || ''Empty'' || 0 || 0 | |||
|- bgcolor="#ffee99" | |||
| 0x30 || 0x04 || 00000250 || File table absolute start offset || ''Overlaps the previous 2 tables'' || 2260 || 21A0 | |||
|- bgcolor="#ffee99" | |||
| 0x34 || 0x04 || 00000DD0 || File table size || ''Overlaps the previous 2 tables'' || AA7F0 || 149890 | |||
|- bgcolor="#ffee77" | |||
| 0x38 || 0x04 || 00000000 || Unknown area absolute start offset || ''Not used'' || 0 || 0 | |||
|- bgcolor="#ffee77" | |||
| 0x3C || 0x04 || 00000000 || Unknown area size || ''Empty'' || 0 || 0 | |||
|- | |- | ||
| | ! colspan="5" | Data Table (first colored area is the header of the data table) | ||
|- | |- {{cellcolors|#ff7777}} | ||
| | | 0x40 || 0x04 || 00000000 || xml element TAG name relative offset || 0 = '''qrc''' || 0 = '''qrc''' || 0 = '''theme''' | ||
|- | |- {{cellcolors|#ff7777}} | ||
| | | 0x44 || 0x04 || 00000000 || xml element number of attributes || 0 = '''no attributes''' || 0 || 0 | ||
|- | |- {{cellcolors|#ff7777}} | ||
| | | 0x48 || 0x04 || FFFFFFFF || parent element relative start offset || FFFFFFFF = '''parent doesnt exists''' || FFFFFFFF || FFFFFFFF | ||
|- | |- {{cellcolors|#ff7777}} | ||
| | | 0x4C || 0x04 || FFFFFFFF || previous brother element relative start offset || FFFFFFFF = '''previous brother doesnt exists''' || FFFFFFFF || FFFFFFFF | ||
|- | |- {{cellcolors|#ff7777}} | ||
| | | 0x50 || 0x04 || FFFFFFFF || next brother element relative start offset || FFFFFFFF = '''next brother doesnt exists''' || FFFFFFFF || FFFFFFFF | ||
|- | |- {{cellcolors|#ff7777}} | ||
| | | 0x54 || 0x04 || 0000001C || first children element relative start offset || 0x40 + 0x1C = '''first children at 0x5C absolute''' || 0x40 + 0x1C = 5C absolute || 0x40 + 0x1C = 5C absolute | ||
|- | |- {{cellcolors|#ff7777}} | ||
| | | 0x58 || 0x04 || 0000001C || last children element relative start offset || 0x40 + 0x1C = '''last children at 0x5C absolute''' || 0x40 + 0x1C = 5C absolute || 0x40 + 0x19CC = 0x1A0C absolute | ||
|- {{cellcolors|#ff8888}} | |||
| 0x5C || 0x04 || 00000004 || xml element TAG name relative offset || 4 = '''file-table''' || 4 = '''file-table''' || 6 = '''icontable''' | |||
|- {{cellcolors|#ff8888}} | |||
| 0x60 || 0x04 || 00000000 || xml element number of attributes || 0 = '''no attributes''' || 0 || 0 | |||
|- {{cellcolors|#ff8888}} | |||
| 0x64 || 0x04 || 00000000 || parent element relative start offset || 0x40 + 0x0 = 0x40 absolute = parent is '''qrc''' || 0 = '''qrc''' || 0 = '''theme''' | |||
|- {{cellcolors|#ff8888}} | |||
| 0x68 || 0x04 || FFFFFFFF || previous brother element relative start offset || FFFFFFFF = '''previous brother doesnt exists''' || FFFFFFFF || FFFFFFFF | |||
|- {{cellcolors|#ff8888}} | |||
| 0x6C || 0x04 || FFFFFFFF || next brother element relative start offset || FFFFFFFF = '''next brother doesnt exists''' || FFFFFFFF || 141C (related with value at 0x58, allways same or smaller) | |||
|- {{cellcolors|#ff8888}} | |||
| 0x70 || 0x04 || 00000038 || first children element relative start offset || 0x40 + 0x38 = '''first children at 0x78 absolute''' || 38 || 38 | |||
|- {{cellcolors|#ff8888}} | |||
| 0x74 || 0x04 || 00000128 || last children element relative start offset || 0x40 + 0x128 = '''last children at 0x168 absolute''' || 1E80 || 13D0 | |||
|- bgcolor="#cccccc" | |||
| colspan="5" | 1st entry start || colspan="2" | 1st entry start | |||
|- {{cellcolors|#ff9999}} | |||
| 0x78 || 0x04 || 0000000F || xml element TAG name relative offset || F = '''file''' || F = '''file''' || 10 = '''icon''' | |||
|- {{cellcolors|#ff9999}} | |||
| 0x7C || 0x04 || 00000002 || xml element number of attributes || 2 attributes = '''src''' and '''id''' || 3 attributes = '''src''', '''id''', and '''size''' || 3 attributes = '''src''', '''id''', and '''size''' | |||
|- {{cellcolors|#ff9999}} | |||
| 0x80 || 0x04 || 0000001C || parent element relative start offset || 0x40 + 0x1C = 0x5C absolute = parent is '''file-table''' || 1C || 1C | |||
|- {{cellcolors|#ff9999}} | |||
| 0x84 || 0x04 || FFFFFFFF || previous brother element relative start offset || FFFFFFFF = '''previous brother doesnt exists''' || FFFFFFFF || FFFFFFFF | |||
|- {{cellcolors|#ff9999}} | |||
| 0x88 || 0x04 || 00000074 || next brother element relative start offset || 0x40 + 0x74 = '''next brother at 0xB4''' || 84 || 84 | |||
|- {{cellcolors|#ff9999}} | |||
| 0x8C || 0x04 || FFFFFFFF || first children element relative start offset || FFFFFFFF = '''first children doesnt exists''' || FFFFFFFF || FFFFFFFF | |||
|- {{cellcolors|#ff9999}} | |||
| 0x90 || 0x04 || FFFFFFFF || last children element relative start offset || FFFFFFFF = '''last children doesnt exists''' || FFFFFFFF || FFFFFFFF | |||
|- {{cellcolors|#ffaaaa}} | |||
| 0x94 || 0x04 || 00000014 || xml attribute TAG name relative offset || 14 = '''src''' || 14 = '''src''' || 15 = '''src''' | |||
|- {{cellcolors|#ffaaaa}} | |||
| 0x98 || 0x04 || 00000006 || || 6 || 6 || 6 | |||
|- {{cellcolors|#ffaaaa}} | |||
| 0x9C || 0x04 || 00000000 || 1st file relative start offset || 0x250 + 0x0 = '''file starts at 0x250''' absolute || 0 --1st file start-- || 0 --1st file start-- | |||
|- {{cellcolors|#ffaaaa}} | |||
| 0xA0 || 0x04 || 00000150 || 1st file size || '''file size is 150''' || 15FF --1st file size-- || 29BB --1st file size-- | |||
|- {{cellcolors|#ffbbbb}} | |||
| 0xA4 || 0x04 || 00000018 || xml attribute TAG name relative offset || 18 = '''id''' || 18 = '''id''' || 19 = '''id''' | |||
|- {{cellcolors|#ffbbbb}} | |||
| 0xA8 || 0x04 || 00000007 || || 7 || 7 || 7 | |||
|- {{cellcolors|#ffbbbb}} | |||
| 0xAC || 0x04 || 00000000 || 1st filename relative start offset || 0x1B0 + 0x0 = '''filename starts at 0x1B0''' absolute || 0 --1st filename start-- || 0 --1st filename start-- | |||
|- {{cellcolors|#ffbbbb}} | |||
| 0xB0 || 0x04 || 00000000 || 1st filename size related ? || '''filename size is... 0''' wtf ? || 0 || 0 | |||
|- bgcolor="#cccccc" | |||
| colspan="5" | 2nd entry start | |||
|- | |||
| 0xB4 || 0x04 || 0000000F || xml element TAG name relative offset || || {{cellcolors|#ffcccc}} 1B = '''size''' || {{cellcolors|#ffcccc}} 1C = '''size''' | |||
|- | |- | ||
| | | 0xB8 || 0x04 || 00000002 || xml element number of attributes || 2 || {{cellcolors|#ffcccc}} 1 || {{cellcolors|#ffcccc}} 1 | ||
|- | |- | ||
| | | 0xBC || 0x04 || 0000001C || parent element relative start offset || || {{cellcolors|#ffcccc}} 55D5 --1st file size uncompressed ?-- || {{cellcolors|#ffcccc}} 10080 --1st file size uncompressed ?-- | ||
|- | |- | ||
| | | 0xC0 || 0x04 || 00000038 || previous brother element relative start offset || 0x40 + 0x38 = 0x78 || {{cellcolors|#ffcccc}} 0 || {{cellcolors|#ffcccc}} 0 | ||
|- | |- | ||
|} | | 0xC4 || 0x04 || 000000B0 || next brother element relative start offset || 0x40 + 0xB0 = 0xF0 || {{cellcolors|#cccccc}} F --2nd entry start-- || {{cellcolors|#cccccc}} 10 --2nd entry start-- | ||
|- | |||
| 0xC8 || 0x04 || FFFFFFFF || first children element relative start offset || || 3 = compressed ? || 3 = compressed ? | |||
|- | |||
| 0xCC || 0x04 || FFFFFFFF || last children element relative start offset || || 1C || 1C | |||
= | |- | ||
| 0xD0 || 0x04 || 00000014 || xml attribute TAG name relative offset || || 38 --previous entry-- || 38 --previous entry-- | |||
|- | |||
| 0xD4 || 0x04 || 00000006 || || || D0 --next entry-- || D0 --next entry-- | |||
|- | |||
| 0xD8 || 0x04 || 00000150 || 2th file relative start offset || 0x250 + 0x150 = 0x3A0 || FFFFFFFF || FFFFFFFF | |||
|- | |||
| 0xDC || 0X04 || 000000E0 || 2th file size || || FFFFFFFF || FFFFFFFF | |||
|- | |||
| 0xE0 || 0x04 || 00000018 || xml attribute TAG name relative offset || || 14 || 15 | |||
|- | |- | ||
| | | 0xE4 || 0x04 || 00000007 || || || 6 || 6 | ||
|- | |- | ||
| 0x04 || | | 0xE8 || 0x04 || 00000016 || 2th filename relative start offset || 0x1B0 + 0x16 = 0x1C6 || 1600 ---2nd file start--- || 29C0 ---2nd file start--- | ||
|- | |- | ||
| | | 0xEC || 0x04 || 00000000 || || || 1B51 ---2nd file size--- || 2500 ---2nd file size--- | ||
|- bgcolor="#cccccc" | |||
| colspan="5" | 3rd entry start | |||
|- | |- | ||
| | | 0xF0 || 0x04 || 0000000F || xml element TAG name relative offset || || 18 || 19 | ||
|- | |- | ||
| | | 0xF4 || 0x04 || 00000002 || xml element number of attributes || 2 || 7 || 7 | ||
|- | |- | ||
| | | 0xF8 || 0x04 || 0000001C || parent element relative start offset || || 7 ---2nd filename start--- || E ---2nd filename start--- | ||
|- | |- | ||
| | | 0xFC || 0x04 || 00000074 || previous brother element relative start offset || 0x40 + 0x74 = 0xB4 || 0 || 0 | ||
|- | |- | ||
| | | 0x100 || 0x04 || 000000EC || next brother element relative start offset || 0x40 + 0xEC = 0x12C || 1B || 1C | ||
|- | |- | ||
| | | 0x104 || 0x04 || FFFFFFFF || first children element relative start offset || || 1 || 1 | ||
|- | |- | ||
| | | 0x108 || 0x04 || FFFFFFFF || last children element relative start offset || || 155D4 --2nd file size uncompressed-- || 10080 --2nd file size uncompressed-- | ||
|- | |- | ||
| | | 0x10C || 0x04 || 00000014 || xml attribute TAG name relative offset || || 0 || 0 | ||
|- | |- | ||
| | | 0x110 || 0x04 || 00000006 || || || {{cellcolors|#cccccc}} F --3rd entry start-- || {{cellcolors|#cccccc}} 10 --3ed entry start-- | ||
|- | |- | ||
| | | 0x114 || 0x04 || 00000230 || 3th file relative start offset || 0x250 + 0x230 = 0x480 || 3 = compressed ? || 3 = compressed ? | ||
|- | |- | ||
| | | 0x118 || 0x04 || 00000120 || 3th file size || || 1C || 1C | ||
|- | |- | ||
| | | 0x11C || 0x04 || 00000018 || xml attribute TAG name relative offset || | ||
|- | |- | ||
| | | 0x120 || 0x04 || 00000007 || || | ||
|- | |- | ||
| | | 0x124 || 0x04 || 0000002C || 3th filename relative start offset || 0x1B0 + 0x2C = 0x1DC | ||
|- | |- | ||
| | | 0x128 || 0x04 || 00000000 || || | ||
|- bgcolor="#cccccc" | |||
| colspan="5" | 4th entry start | |||
|- | |- | ||
| | | 0x12C || 0x04 || 0000000F || xml element TAG name relative offset || | ||
|- | |- | ||
| | | 0x130 || 0x04 || 00000002 || xml element number of attributes || 2 | ||
|- | |- | ||
| | | 0x134 || 0x04 || 0000001C || parent element relative start offset || | ||
|- | |- | ||
| | | 0x138 || 0x04 || 000000B0 || previous brother element relative start offset || 0x40 + 0xB0 = 0xF0 | ||
|- | |- | ||
| | | 0x13C || 0x04 || 00000128 || next brother element relative start offset || 0x40 + 0x128 = 0x168 | ||
|- | |- | ||
| | | 0x140 || 0x04 || FFFFFFFF || first children element relative start offset || | ||
|- | |- | ||
| | | 0x144 || 0x04 || FFFFFFFF || last children element relative start offset || | ||
|- | |- | ||
| | | 0x148 || 0x04 || 00000014 || xml attribute TAG name relative offset || | ||
|- | |- | ||
| | | 0x14C || 0x04 || 00000006 || || | ||
|- | |- | ||
| | | 0x150 || 0x04 || 00000350 || 4th file relative start offset || 0x250 + 0x350 = 0x5A0 | ||
|- | |- | ||
| | | 0x154 || 0x04 || 000001F0 || 4th file size || | ||
|- | |- | ||
| | | 0x158 || 0x04 || 00000018 || xml attribute TAG name relative offset || | ||
|- | |- | ||
| | | 0x15C || 0x04 || 00000007 || || | ||
|- | |- | ||
| | | 0x160 || 0x04 || 00000041 || 4th filename relative start offset || 0x1B0 + 0x41 = 0x1F1 | ||
|- | |- | ||
| | | 0x164 || 0x04 || 00000000 || || | ||
|- bgcolor="#cccccc" | |||
| colspan="5" | 5th entry start | |||
|- | |- | ||
| | | 0x168 || 0x04 || 0000000F || xml element TAG name relative offset || | ||
|- | |- | ||
| | | 0x16C || 0x04 || 00000002 || xml element number of attributes || 2 | ||
|- | |- | ||
| | | 0x170 || 0x04 || 0000001C || parent element relative start offset || | ||
|- | |- | ||
| | | 0x174 || 0x04 || 000000EC || previous brother element relative start offset || 0x40 + 0xEC = 0x12C | ||
|- | |- | ||
| | | 0x178 || 0x04 || FFFFFFFF || next brother element relative start offset || FFFFFFFF = '''next entry doesnt exists''' | ||
|- | |- | ||
| | | 0x17C || 0x04 || FFFFFFFF || first children element relative start offset || | ||
|- | |- | ||
| | | 0x180 || 0x04 || FFFFFFFF || last children element relative start offset || | ||
|- | |- | ||
| | | 0x184 || 0x04 || 00000014 || xml attribute TAG name relative offset || | ||
|- | |- | ||
| | | 0x188 || 0x04 || 00000006 || || | ||
|- | |||
= | | 0x18C || 0x04 || 00000540 || 5th file relative start offset || 0x250 + 0x540 = 0x790 | ||
|- | |||
| 0x190 || 0x04 || 00000890 || 5th file size || | |||
|- | |||
| 0x194 || 0x04 || 00000018 || xml attribute TAG name relative offset || | |||
|- | |||
| 0x198 || 0x04 || 00000007 || || | |||
|- | |||
| 0x19C || 0x04 || 00000059 || 5th filename relative start offset || 0x1B0 + 0x59 = 0x209 | |||
|- | |||
| 0x1A0 || 0x04 || 00000000 || || | |||
|- bgcolor="#cccccc" | |||
| 0x1A4 || 0x0C || 00000000... || ''padding'' to align to a multiply of 0x10 || | |||
|- | |- | ||
! | ! colspan="5" | Filename Table | ||
|- | |- | ||
| | | 0x1B0 || 0x04 || 00000038 || 1st data, start offset (relative to data table start offset) || 0x40 + 0x38 = 0x78 | ||
|- | |- | ||
| | | 0x1B4 || 0x12 || lib/rhm/Clear.fpo || 1st file name || included 1 NULL byte at the end | ||
|- | |- | ||
| | | 0x1C6 || 0x04 || 00000074 || 2nd data, start offset (relative to data table start offset) || 0x40 + 0x74 = 0xB4 | ||
|- | |- | ||
| | | 0x1CA || 0x12 || lib/rhm/Clear.vpo || 2nd file name || included 1 NULL byte at the end | ||
|- | |- | ||
| | | 0x1DC || 0x04 || 000000B0 || 3rd data, start offset (relative to data table start offset) || 0x40 + 0xB0 = 0xF0 | ||
|- | |- | ||
| | | 0x1E0 || 0x11 || lib/rhm/Copy.fpo || 3rd file name || included 1 NULL byte at the end | ||
|- | |- | ||
| | | 0x1F1 || 0x04 || 000000EC || 4th data, start offset (relative to data table start offset) || 0x40 + 0xEC = 0x12C | ||
|- | |||
| 0x1F5 || 0x14 || lib/rhm/default.fpo || 4th file name || included 1 NULL byte at the end | |||
|- | |||
| 0x209 || 0x04 || 00000128 || 5th data, start offset (relative to data table start offset) || 0x40 + 0x128 = 0x168 | |||
|- | |||
| 0x20D || 0x14 || lib/rhm/default.vpo || 5th file name || included 1 NULL byte at the end | |||
|- bgcolor="#cccccc" | |||
| 0x221 || 0xF || 00000000... || ''padding'' to align the filename table to a multiply of 0x10 || | |||
|- | |||
! colspan="5" | Strings table | |||
|- | |||
| 0x230 || 0x1B || qrc file-table file src id || Container identifyer (first tag) + other tags from MAKE.XML || <syntaxhighlight lang="xml"> <qrc> <file-table> <file src= id=/></syntaxhighlight> || <syntaxhighlight lang="xml"> <qrc> <file-table> <file src= id= size=/></syntaxhighlight> || <syntaxhighlight lang="xml"> <theme> <icontable> <icon src= id= size=/></syntaxhighlight> | |||
|- bgcolor="#cccccc" | |||
| 0x24B || 0x5 || 00000000... || ''padding'' to align the filename table to a multiply of 0x10 || | |||
|- | |||
! colspan="5" | File Table | |||
|- | |||
| 0x250 || 0x150 || 00001B5C... || 1st file || | |||
|- | |||
| 0x3A0 || 0x1E0 || 00001B5B... || 2nd file || | |||
|- | |||
| 0x480 || 0x120 || 00001B5C... || 3rd file || | |||
|- | |||
| 0x5A0 || 0x1F0 || 00001B5C... || 4th file || | |||
|- | |||
| 0x790 || 0x890 || 00001B5B... || 5th file || | |||
|- | |||
|} | |||
'''rhm.qrc (from firmware 1.00)''' | |||
<div style="height:450px; overflow:auto"> | |||
Offset(h) 00 04 08 0C | |||
00000000 51524346 00000110 00000040 00000164 [email protected] | |||
00000010 000001B0 00000071 00000230 0000001B ...°...q...0.... | |||
00000020 00000250 00000000 00000250 00000000 ...P.......P.... | |||
00000030 00000250 00000DD0 00000000 00000000 ...P...Ð........ | |||
00000040 00000000 00000000 FFFFFFFF FFFFFFFF ........ÿÿÿÿÿÿÿÿ | |||
00000050 FFFFFFFF 0000001C 0000001C 00000004 ÿÿÿÿ............ | |||
00000060 00000000 00000000 FFFFFFFF FFFFFFFF ........ÿÿÿÿÿÿÿÿ | |||
00000070 00000038 00000128 0000000F 00000002 ...8...(........ | |||
00000080 0000001C FFFFFFFF 00000074 FFFFFFFF ....ÿÿÿÿ...tÿÿÿÿ | |||
00000090 FFFFFFFF 00000014 00000006 00000000 ÿÿÿÿ............ | |||
000000A0 00000150 00000018 00000007 00000000 ...P............ | |||
000000B0 00000000 0000000F 00000002 0000001C ................ | |||
000000C0 00000038 000000B0 FFFFFFFF FFFFFFFF ...8...°ÿÿÿÿÿÿÿÿ | |||
000000D0 00000014 00000006 00000150 000000E0 ...........P...à | |||
000000E0 00000018 00000007 00000016 00000000 ................ | |||
000000F0 0000000F 00000002 0000001C 00000074 ...............t | |||
00000100 000000EC FFFFFFFF FFFFFFFF 00000014 ...ìÿÿÿÿÿÿÿÿ.... | |||
00000110 00000006 00000230 00000120 00000018 .......0... .... | |||
=Tools= | |||
=Tools= | |||
. | |||
.. | |||
... | |||
{{File Formats}} | {{File Formats}} | ||
<noinclude>[[Category:Main]]</noinclude> | <noinclude>[[Category:Main]]</noinclude> |