Editing Resource Container CXML (RCO, QRC, Theme Files, RAF, CXML)
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: | ||
== RCO == | == RCO == | ||
*In PSvita the RCO's uses a cxml structure, with a header size of 0x50 and the magic identifyer '''RCOF''' | *In PSvita the RCO's uses a cxml structure, with a header size of 0x50 and the magic identifyer '''RCOF''' | ||
**RCOF header is 0x10 bytes bigger than any | **RCOF header is 0x10 bytes bigger than any cxml header in PS3 (this means there are 2 new tables added for the new cxml variant used in vita rco's). And endianess changed | ||
**Some of the extracted files (after cropped and [[Template:Zlib_Header|zlib]] decompressed) are another variant of a cxml structure with identifyer '''RCSF'''. After a second extraction (with a cxml decompiler tool) the resulting file is a .xml containing only text strings (this double cxml method is used for .xml files that stores language translations) | **Some of the extracted files (after cropped and [[Template:Zlib_Header|zlib]] decompressed) are another variant of a cxml structure with identifyer '''RCSF'''. After a second extraction (with a cxml decompiler tool) the resulting file is a .xml containing only text strings (this double cxml method is used for .xml files that stores language translations) | ||
[https://github.com/cfwprpht/Simply_Vita_RCO_Extractor Simply Vita RCO Extractor] | [https://github.com/cfwprpht/Simply_Vita_RCO_Extractor Simply Vita RCO Extractor] | ||
[ | [https://anonfiles.com/file/d333453b707746c83a11e696b6b1ca51 Some RCO as Reference] | ||
{| class="wikitable" style="font-size:x-small;" | {| class="wikitable" style="font-size:x-small;" | ||
Line 28: | Line 22: | ||
| 0x0C || 0x04 || 2C 15 00 00 || Tree size || in PS3 = Tree size | | 0x0C || 0x04 || 2C 15 00 00 || Tree size || in PS3 = Tree size | ||
|- bgcolor="#88ff88" | |- bgcolor="#88ff88" | ||
| 0x10 || 0x04 || 80 15 00 00 || ID | | 0x10 || 0x04 || 80 15 00 00 || ID table absolute start offset || in PS3 = ID table absolute start offset | ||
|- bgcolor="#88ff88" | |- bgcolor="#88ff88" | ||
| 0x14 || 0x04 || B0 00 00 00 || ID | | 0x14 || 0x04 || B0 00 00 00 || ID table size || in PS3 = ID table size | ||
|- bgcolor="#8888ff" | |- bgcolor="#8888ff" | ||
| 0x18 || 0x04 || 30 16 00 00 || | | 0x18 || 0x04 || 30 16 00 00 || ---------- unknown table 1 ---------- || in PS3 = Strings table absolute start offset | ||
|- bgcolor="#8888ff" | |- bgcolor="#8888ff" | ||
| 0x1C || 0x04 || 98 00 00 00 || | | 0x1C || 0x04 || 98 00 00 00 || ---------- unknown table 1 size ---------- || in PS3 = Strings table size | ||
|- bgcolor="#ffeedd" | |- bgcolor="#ffeedd" | ||
| 0x20 || 0x04 || D0 16 00 00 || Strings table absolute start offset || in PS3 = Integer array absolute start offset | | 0x20 || 0x04 || D0 16 00 00 || Strings table absolute start offset || in PS3 = Integer array absolute start offset | ||
Line 40: | Line 34: | ||
| 0x24 || 0x04 || F1 01 00 00 || Strings table size || in PS3 = Integer array size | | 0x24 || 0x04 || F1 01 00 00 || Strings table size || in PS3 = Integer array size | ||
|- bgcolor="#ffeebb" | |- bgcolor="#ffeebb" | ||
| 0x28 || 0x04 || D0 18 00 00 || | | 0x28 || 0x04 || D0 18 00 00 || overlapped (not used, but present in the header to keep the structure standards) || in PS3 = Float array absolute start offset | ||
|- bgcolor="#ffeebb" | |- bgcolor="#ffeebb" | ||
| 0x2C || 0x04 || 00 00 00 00 || | | 0x2C || 0x04 || 00 00 00 00 || empty || in PS3 = Float array size | ||
|- bgcolor="#ffee99" | |- bgcolor="#ffee99" | ||
| 0x30 || 0x04 || D0 18 00 00 || | | 0x30 || 0x04 || D0 18 00 00 || ---------- unknown table 2 ---------- || in PS3 = File table absolute start offset | ||
|- bgcolor="#ffee99" | |- bgcolor="#ffee99" | ||
| 0x34 || 0x04 || 34 00 00 00 || | | 0x34 || 0x04 || 34 00 00 00 || ---------- unknown table 2 size ---------- || in PS3 = File table size | ||
|- bgcolor="#ffee77" | |- bgcolor="#ffee77" | ||
| 0x38 || 0x04 || 10 19 00 00 || Integer array absolute start offset || in PS3 = Unknown area absolute start offset | | 0x38 || 0x04 || 10 19 00 00 || Integer array absolute start offset || in PS3 = Unknown area absolute start offset | ||
Line 66: | Line 60: | ||
|} | |} | ||
===Attribute=== | |||
{| class="wikitable" | |||
|+ Attribute types structure | |||
! rowspan=2 | Offset !! rowspan=2 | Length !! rowspan=2 | Name !! colspan=8 | Attribute type | |||
=== | |||
{| class="wikitable | |||
|+ | |||
! Offset !! Length !! | |||
| | |||
| | |||
|- | |- | ||
! Integer !! Float !! String !! Integer Array !! Float Array !! analysing... !! ID with ref !! File | |||
|- | |- | ||
| | | 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 || Integer value || Float value || String Offset || Integer Array Offset || Float Array Offset || analysing... || Filename offset || File offset | ||
|- | |- | ||
| | | 0xC || 0x4 || variable 2 || unknown (usually 0) || unknown (usually 0) || String Length || Integer count || Float count || analysing... || unknown (usually 0) || File size | ||
|} | |} | ||
==Container Common Structure== | ==Container Common Structure== | ||
Line 335: | Line 82: | ||
ZLIB Compressed level 9 (only container) | ZLIB Compressed level 9 (only container) | ||
==== RCOF | ==== RCOF ==== | ||
RCOF ('''R'''esources '''C'''ontainer | RCOF ('''R'''esources '''C'''ontainer '''F'''lat?) | ||
*Example from FW?? notification_settings_plugin.rco: | *Example from FW?? notification_settings_plugin.rco: | ||
'''Offset(h) 00 01 02 03 | '''Offset(h) 00 01 02 03 04 05 06 07''' | ||
'''00000000''' <span style="background:# | '''00000000''' <span style="background:#ff6666;">52 43 4F 46</span> <span style="background:#ffee33;">10</span> <span style="background:#8888ff;">01</span> 00 00 RCOF.... | ||
{| class="wikitable" | {| class="wikitable" | ||
Line 347: | Line 93: | ||
! Name !! Offset !! Size !! Example !! Remark | ! Name !! Offset !! Size !! Example !! Remark | ||
|- | |- | ||
| Magic || 0x00 || 0x04 || {{cellcolors|# | | Magic || 0x00 || 0x04 || {{cellcolors|#ff6666}} 52 43 4F 46 || 'RCOF' | ||
|- | |- | ||
| | | ? || 0x04 || 0x01 || {{cellcolors|#ffee33}} 10 || | ||
|- | |- | ||
| Version || 0x05 || 0x01 || {{cellcolors|#8888ff}} 01 || RCO version '0.1' | |||
| Version || | |||
|- | |- | ||
|} | |} | ||
<small> | <small> | ||
Line 377: | Line 110: | ||
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 previously "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) | 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 previously "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 | *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 | |||