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 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=11 | Attribute type | |||
=== | |||
{| class="wikitable | |||
|+ | |||
! Offset !! Length !! | |||
! | |||
| | |||
|- | |- | ||
! Integer !! Float !! String !! analysing... !! analysing... !! Integer Array !! Float Array !! File !! Ref ID STR || analysing... || Ref ID INT | |||
| | |||
| | |||
|- | |- | ||
| 0x0 || 0x4 || Attribute name offset || colspan=11 {{cellcolors|lightgrey}} '''_________________________________________________________ xml tag string from the "strings table" ____________________________________________________''' | |||
|-_____ | |||
| 0x4 || 0x4 || Attribute type || 1 || 2 || 3 || 4 || 5 || 6 || 7 || 8 || 9 || A || B | |||
|- | |- | ||
| 0x8 || 0x4 || variable 1 || Integer value || Float value || String Offset || analysing... || analysing... || Integer Array || Float Array || File offset || Ref ID STR offset || analysing... || Ref ID INT offset | |||
| Integer value || Float value || | |||
|- | |- | ||
| 0xC || 0x4 || variable 2 || unknown (usually 0) || unknown (usually 0) || String Length || analysing... || analysing... || Integer's count || Float's count || File size || unknown (usually 0) || analysing... || unknown (usually 0) | |||
| | |||
|} | |} | ||
==Container Common Structure== | ==Container Common Structure== | ||
Line 335: | Line 81: | ||
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:#666666;">52 43 4F 46</span> | '''00000000''' <span style="background:#666666;">52 43 4F 46</span> <span style="background:#888888;">10 01 00 00</span> RCOF.... | ||
{| class="wikitable" | {| class="wikitable" | ||
Line 348: | Line 93: | ||
|- | |- | ||
| Magic || 0x00 || 0x04 || {{cellcolors|#666666|#ffffff}} 52 43 4F 46 || 'RCOF' | | Magic || 0x00 || 0x04 || {{cellcolors|#666666|#ffffff}} 52 43 4F 46 || 'RCOF' | ||
|- | |- | ||
| Version || 0x04 || 0x04 || {{cellcolors|#888888|#ffffff}} 00 00 01 10* || CXML version '1.10' | | Version || 0x04 || 0x04 || {{cellcolors|#888888|#ffffff}} 00 00 01 10* || CXML version '1.10' | ||
Line 377: | Line 108: | ||
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 | |||