Editing Resource Container CXML (RCO, QRC, Theme Files, RAF, CXML)

Jump to navigation Jump to search
Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.

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 9: Line 9:


[http://www.file-upload.net/download-9992747/Desktop.rar.html Some RCO as Reference]
[http://www.file-upload.net/download-9992747/Desktop.rar.html Some RCO as Reference]
[https://bitbucket.org/SilicaAndPina/cxml-decompiler CXML Decompiler and Compiler]
There is also a cxml compiler labled "cxml.py" inside the [https://archive.org/download/PlayStationMobile/Development%20Tools/SDK/PSM_SDK_2.00.00.exe PSM SDK] @ %SCE_PSM_SDK%\tools\PublishingUtility\cxml\compiler as this is the format of [[app.info]]


{| class="wikitable" style="font-size:x-small;"
{| class="wikitable" style="font-size:x-small;"
Line 40: Line 36:
| 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 || Char table absolute start offset || in PS3 = Float array absolute start offset
| 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 || Char table size || in PS3 = Float array size
| 0x2C || 0x04 || 00 00 00 00 || empty || in PS3 = Float array size
|- bgcolor="#ffee99"
|- bgcolor="#ffee99"
| 0x30 || 0x04 || D0 18 00 00 || Hash ID INT table absolute start offset || in PS3 = File table absolute start offset
| 0x30 || 0x04 || D0 18 00 00 || Styles ID INT table absolute start offset || in PS3 = File table absolute start offset
|- bgcolor="#ffee99"
|- bgcolor="#ffee99"
| 0x34 || 0x04 || 34 00 00 00 || Hash ID INT table size || in PS3 = File table size
| 0x34 || 0x04 || 34 00 00 00 || Styles ID INT table 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 69: Line 65:


  namespace cxml {
  namespace cxml {
     class cxml : public Base {
     struct Header { /*header of a cxml document*/
        struct Header { /*header of a cxml document*/
        char magic[4];
            char magic[4];
        int version;
            int version;
        int tree_offset;
            int tree_offset;
        int tree_size;
            int tree_size;
        int idstrtable_offset;
            int idstrtable_offset;
        int idstrtable_size;
            int idstrtable_size;
        int idinttable_offset;
            int idinttable_offset;
        int idinttable_size;
            int idinttable_size;
        int stringtable_offset;
            int stringtable_offset;
        int stringtable_size;
            int stringtable_size;
        int styleidtable_offset;
            int chartable_offset;
        int styleidtable_size;
            int chartable_size;
        int intarraytable_offset;
            int hashidtable_offset;
        int intarraytable_size;
            int hashidtable_size;
        int floatarraytable_offset;
            int intarraytable_offset;
        int floatarraytable_size;
            int intarraytable_size;
        int filetable_offset;
            int floatarraytable_offset;
        int filetable_size;
            int floatarraytable_size;
    };
            int filetable_offset;
            int filetable_size;
        };
          
          
        struct ChildElementBin {
    struct ChildElementBin {
            int name;
        int name;
            int attr_num;
        int attr_num;
            int parent_node;
        int parent;
            int prev_sibling;
        int prev;
            int next_sibling;
        int next;
            int first_child;
        int first_child;
            int last_child;
        int last_child;
            AttributeBin attribute;
        AttributeBin attribute;
        };
    };
          
          
        struct SiblingElementBin {
    struct BrotherElementBin {
            int name;
        int name;
            int attr_num;
        int attr_num;
            int parent_node;
        int parent;
            int prev_sibling;
        int prev;
            int next_sibling;
        int next;
            AttributeBin attribute;
        AttributeBin attribute;
        };
    };
          
          
        struct AttributeBin {
    struct AttributeBin {
            typedef enum {
        int INTEGER = 1;
                NONE,
        int FLOAT = 2;
                INTEGER,
        int STRING = 3;
                FLOAT,
        int unk = 4;
                STRING,
        int STYLE_ID = 5;
                CHAR,
        int INTEGER_ARRAY = 6;
                HASH_ID,
        int FLOAT_ARRAY = 7;
                INTEGER_ARRAY,
        int DATA = 8;
                FLOAT_ARRAY,
        int ID_STR_REF = 9;
                DATA,
        int ID_STR_NO_REF = 10;
                ID_STR_LPB,
        int ID_INT_REF = 11;
                ID_STR,
        int ID_INT_NO_REF = 12;
                ID_INT_LPB,
        int name;
                ID_INT,
        int type;
            } TYPE;
   
   
             int name;
        struct SingleValue {
             TYPE type;
             int intValue;
             float floatValue;     
        };
   
   
            struct SingleValue {
        struct StringData {
                int intValue;
             int offset;
                float floatValue;     
             int len;
            };
        };
             struct StringData {
                int offset;
                int len;
            };
             struct CharData {
                int offset;
                int len;
            };
                  
                  
            struct IntArrayData {
        struct IntArrayData {
                int offset;
            int offset;
                int num;
            int num;
            };
        };
                  
                  
            struct FloatArrayData {
        struct FloatArrayData {
                int offset;
            int offset;
                int num;
            int num;
            };
        };
                
                
            struct FileData {
        struct FileData {
                int offset;
            int offset;
                int size;
            int size;
            };
        };
   
   
            struct IdStringTableData {
        struct IdStringTableData {
                int offset;
            int offset;
                bool loopback;
            bool loopback;
            };
        };
   
   
            struct IdIntegerTableData {
        struct IdIntegerTableData {
                int offset;
            int offset;
                bool loopback;
            bool loopback;
            };
        };
                  
                  
            union {
        union {
                int i;
            int i;
                float f;
            float f;
                StringData s;
            StringData s;
                CharData c;
            IntArrayData ia;
                IntArrayData ia;
            FloatArrayData fa;
                FloatArrayData fa;
            FileData file;
                FileData file;
            int id;
                int id;
            int idref;
                int idref;
            };
         };
         };
    };
          
          
        struct IDBin {
    struct IDBin {
            int entity_offset;
        int entity_offset;
            char id[0];
        char id[0];
        };
    };
          
          
        enum AllocationType {
    enum AllocationType {
            AllocationType_Alloc_Tree,
        AllocationType_Alloc_Tree,
            AllocationType_Alloc_IDSTRTable,
        AllocationType_Alloc_IDSTRTable,
            AllocationType_Alloc_IDINTTable,
        AllocationType_Alloc_IDINTTable,
            AllocationType_Alloc_StringTable,
        AllocationType_Alloc_StringTable,
            AllocationType_Alloc_CharTable,
        AllocationType_Alloc_IntArrayTable,
            AllocationType_Alloc_IntArrayTable,
        AllocationType_Alloc_FloatArrayTable,
            AllocationType_Alloc_FloatArrayTable,
        AllocationType_Alloc_FileTable,
            AllocationType_Alloc_FileTable,
        AllocationType_Alloc_StyleIDTable,
            AllocationType_Alloc_HashIDTable,
    
    
            AllocationType_Free_Tree,
        AllocationType_Free_Tree,
            AllocationType_Free_IDSTRTable,
        AllocationType_Free_IDSTRTable,
            AllocationType_Free_IDINTTable,
        AllocationType_Free_IDINTTable,
            AllocationType_Free_StringTable,
        AllocationType_Free_StringTable,
            AllocationType_Free_CharTable,
        AllocationType_Free_IntArrayTable,
            AllocationType_Free_IntArrayTable,
        AllocationType_Free_FloatArrayTable,
            AllocationType_Free_FloatArrayTable,
        AllocationType_Free_FileTable,
            AllocationType_Free_FileTable,
        AllocationType_AFree_StyleIDTable,
            AllocationType_AFree_HashIDTable,
    };
        };
        
        
        enum AccessMode {
    enum AccessMode {
            AccessMode_ReadWrite,
        AccessMode_ReadWrite,
            AccessMode_ReadOnly_File,
        AccessMode_ReadOnly_File,
            AccessMode_ReadOnly_Memory,
        AccessMode_ReadOnly_Memory,
        };
    };
          
          
        class Document {
    class Document {
        public:
    public:
            typedef void (*Allocator)( AllocationType type, void * userdata, void * old_addr, unsigned int required_size, void ** addr, unsigned int * size );
        typedef void (*Allocator)( AllocationType type, void * userdata, void * old_addr, unsigned int required_size, void ** addr, unsigned int * size );
          
          
        private:
    private:
            AccessMode access_mode;
        AccessMode access_mode;
            Header header;
        Header header;
            char *tree;
        char * tree;
            unsigned int tree_capacity;
        unsigned int tree_capacity;
            char *idstrtable;
        char * idstrtable;
            unsigned int idstrtable_capacity;
        unsigned int idstrtable_capacity;
            char *idinttable;
        char * idinttable;
            unsigned int idinttable_capacity;
        unsigned int idinttable_capacity;
            char *stringtable;
        char * stringtable;
            unsigned int stringtable_capacity;
        unsigned int stringtable_capacity;
            char *chartable;
        int * intarraytable;
            unsigned int chartable_capacity;
        unsigned int intarraytable_capacity;
            int *intarraytable;
        float * floatarraytable;
            unsigned int intarraytable_capacity;
        unsigned int floatarraytable_capacity;
            float *floatarraytable;
        char * filetable;
            unsigned int floatarraytable_capacity;
        unsigned int filetable_capacity;
            char *filetable;
        char * styleidtable;
            unsigned int filetable_capacity;
        unsigned int styleidtable_capacity;
            char *hashidtable;
        Allocator allocator;
            unsigned int hashidtable_capacity;
        void * allocator_userdata;
            Allocator allocator;
    };
            void *allocator_userdata;
        };
          
          
        class Element {
    class Element {
        private:
    private:
            Document *doc;
        Document * doc;
            int offset;
        int offset;
        };
    };
        
        
        class Attribute {
    class Attribute {
        private:
    private:
            Document *doc;
        Document * doc;
            int element_offset;
        int element_offset;
            int offset;
        int offset;
        };
        /// <summary>
        /// Initializes this class. Some times also called Constructore.
        /// </summary>
        void Initialize() {
            // All stuff that need to be set before running any function call...
            // goes into here.
        };
     };
     };
  };
  };
Line 282: Line 252:
| 0x08 || 0x04 || Parent relative offset in '''TOC'''
| 0x08 || 0x04 || Parent relative offset in '''TOC'''
|-
|-
| 0x0C || 0x04 || Previous Sibling relative offset in '''TOC'''
| 0x0C || 0x04 || Previous Brother relative offset in '''TOC'''
|-
|-
| 0x10 || 0x04 || Next Sibling relative offset in '''TOC'''
| 0x10 || 0x04 || Next Brother relative offset in '''TOC'''
|-
|-
| 0x14 || 0x04 || First child relative offset in '''TOC'''
| 0x14 || 0x04 || First child relative offset in '''TOC'''
Line 294: Line 264:


{| class="wikitable" style="text-align:center;"
{| class="wikitable" style="text-align:center;"
|+ CXML Sibling Element definition
|+ CXML Brother Element definition
! Offset !! Length !! usage
! Offset !! Length !! usage
|-
|-
Line 303: Line 273:
| 0x08 || 0x04 || Parent relative offset in '''TOC'''
| 0x08 || 0x04 || Parent relative offset in '''TOC'''
|-
|-
| 0x0C || 0x04 || Previous Sibling relative offset in '''TOC'''
| 0x0C || 0x04 || Previous Brother relative offset in '''TOC'''
|-
|-
| 0x10 || 0x04 || Next Sibling relative offset in '''TOC'''
| 0x10 || 0x04 || Next Brother relative offset in '''TOC'''
|}
|}
Length is 5 x 4 bytes == 20 bytes (0x14).
Length is 5 x 4 bytes == 20 bytes (0x14).


NOTE:
NOTE:
*The '''Child Element''' defination describe the Child Element without his Attributes where the '''Sibling Element''' describe the Sibling Element also without his Attributes.
*The '''Child Element''' defination describe the Child Element without his Attributes where the '''Brother Element''' describe the Brother Element also without his Attributes.
*So the full order to read will be '''Child Element''' >>> '''Attributes''', '''Sibling Element''' >>> '''Attributes'''. The Root (so offset 0x00) of any SonyPlaystation Resource file always start's with a Child element to read.
*So the full order to read will be '''Child Element''' >>> '''Attributes''', '''Brother Element''' >>> '''Attributes'''. The Root (so offset 0x00) of any SonyPlaystation Resource file always start's with a Child element to read.


===Attribute===
===Attribute===
Line 321: Line 291:
|-
|-
! Attribute type<BR />(offset 0x4, length 0x4)
! Attribute type<BR />(offset 0x4, length 0x4)
! 1<BR />(Single Integer) !! 2<BR />(Single Float) !! 3<BR />(String) !! 4<BR />(Char) !! 5<BR />(ID HASH) !! 6<BR />(Integer Array) !! 7<BR />(Float Array) !! 8<BR />(File) !! 9<BR />(ID STR w lpb Ref) !! A<BR />(ID STR wo lpb Ref) !! B<BR />(ID INT w lpb Ref) !! C<BR />(ID INT wo lpb Ref)
! 1<BR />(Single Integer) !! 2<BR />(Single Float) !! 3<BR />(String) !! 4<BR />(analysing...) !! 5<BR />(ID STYLE) !! 6<BR />(Integer Array) !! 7<BR />(Float Array) !! 8<BR />(File) !! 9<BR />(ID STR w lpb Ref) !! A<BR />(ID STR wo lpb Ref) !! B<BR />(ID INT w lpb Ref) !! C<BR />(ID INT wo lpb Ref)
|-
|-
! variable 1<BR />(offset 0x8, length 0x4)
! variable 1<BR />(offset 0x8, length 0x4)
| Integer value || Float value || '''Strings Table''' offset || '''Chars Table''' offset || '''ID HASH Table''' offset || '''Integer Arrays Table''' offset || '''Float Arrays Table''' offset || '''Files Table''' offset || '''ID STR Table''' offset || '''ID STR Table''' offset || '''ID INT Table''' offset || '''ID INT Table''' offset
| Integer value || Float value || '''Strings Table''' offset || analysing... || '''ID STYLE Table''' offset || '''Integer Arrays Table''' offset || '''Float Arrays Table''' offset || '''Files Table''' offset || '''ID STR Table''' offset || '''ID STR Table''' offset || '''ID INT Table''' offset || '''ID INT Table''' offset
|-
|-
! variable 2<BR />(offset 0xC, length 0x4)
! variable 2<BR />(offset 0xC, length 0x4)
| {{cellcolors|#ffaaaa}} Not used <abbr title="(always 0 in the samples found)">(always 0)</abbr> || {{cellcolors|#ffaaaa}} Not used <abbr title="(always 0 in the samples found)">(always 0)</abbr> || String length || Char length || int's to read (always 4) || Nr. of int's to read || Nr. of float's to read || File size || {{cellcolors|#ffaaaa}} Not used <abbr title="(always 0 in the samples found)">(always 0)</abbr> || {{cellcolors|#ffaaaa}} Not used <abbr title="(always 0 in the samples found)">(always 0)</abbr> || {{cellcolors|#ffaaaa}} Not used <abbr title="(always 0 in the samples found)">(always 0)</abbr> || {{cellcolors|#ffaaaa}} Not used <abbr title="(always 0 in the samples found)">(always 0)</abbr>
| {{cellcolors|#ffaaaa}} Not used <abbr title="(always 0 in the samples found)">(always 0)</abbr> || {{cellcolors|#ffaaaa}} Not used <abbr title="(always 0 in the samples found)">(always 0)</abbr> || String length || analysing... || Nr. of int's to read (always 4) || Nr. of int's to read || Nr. of float's to read || File size || {{cellcolors|#ffaaaa}} Not used <abbr title="(always 0 in the samples found)">(always 0)</abbr> || {{cellcolors|#ffaaaa}} Not used <abbr title="(always 0 in the samples found)">(always 0)</abbr> || {{cellcolors|#ffaaaa}} Not used <abbr title="(always 0 in the samples found)">(always 0)</abbr> || {{cellcolors|#ffaaaa}} Not used <abbr title="(always 0 in the samples found)">(always 0)</abbr>
|}
|}
  * w = with || wo = without || lpb = loopback
  * w = with || wo = without || lpb = loopback
Line 335: Line 305:
ZLIB Compressed level 9 (only container)
ZLIB Compressed level 9 (only container)


==== RCOF / RCSF ====
==== RCOF ====
RCOF ('''R'''esources '''C'''ontainer '''O'''bject '''F'''ile)<br />
RCOF ('''R'''esources '''C'''ontainer '''F'''lat?)
RCSF ('''R'''esources '''C'''ontainer '''S'''tring '''F'''ile)


*Example from FW?? notification_settings_plugin.rco:
*Example from FW?? notification_settings_plugin.rco:
Line 348: Line 317:
|-
|-
| 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'
|-
|}
'''Offset(h) 00 01 02 03  04 05 06 07'''
'''00000000'''  <span style="background:#666666;">52 43 53 46</span>  <span style="background:#888888;">10 01 00 00</span> RCSF....
{| class="wikitable"
|-
! Name !! Offset !! Size !! Example !! Remark
|-
| Magic || 0x00 || 0x04 || {{cellcolors|#666666|#ffffff}} 52 43 53 46 || 'RCSF'
|-
|-
| 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 380: Line 335:
**one of the "not used table" (at offset 0x18D0 with a size of 0) is placed before an used table (also at offset 0x18D0 but with a size of  0x34)
**one of the "not used table" (at offset 0x18D0 with a size of 0) is placed before an used table (also at offset 0x18D0 but with a size of  0x34)


====RCOF====
 
  '''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:#666666;">52 43 4F 46</span>  <span style="background:#666666;">10 01 00 00</span>  <span style="background:#ff8888;">50 00 00 00</span>  <span style="background:#ff8888;">2C 15 00 00</span>  RCOF....P...,...
  '''00000000'''  <span style="background:#666666;">52 43 4F 46</span>  <span style="background:#666666;">10 01 00 00</span>  <span style="background:#ff8888;">50 00 00 00</span>  <span style="background:#ff8888;">2C 15 00 00</span>  RCOF....P...,...
Line 387: Line 342:
  '''00000030'''  <span style="background:#ffee99;">D0 18 00 00</span>  <span style="background:#ffee99;">34 00 00 00</span>  <span style="background:#ffee77;">10 19 00 00</span>  <span style="background:#ffee77;">2C 00 00 00</span>  Ð...4.......,...
  '''00000030'''  <span style="background:#ffee99;">D0 18 00 00</span>  <span style="background:#ffee99;">34 00 00 00</span>  <span style="background:#ffee77;">10 19 00 00</span>  <span style="background:#ffee77;">2C 00 00 00</span>  Ð...4.......,...
  '''00000040'''  <span style="background:#ffee55;">40 19 00 00</span>  <span style="background:#ffee55;">8C 00 00 00</span>  <span style="background:#ffee33;">D0 19 00 00</span>  <span style="background:#ffee33;">60 89 00 00</span>  @...Œ...Ð...`‰..
  '''00000040'''  <span style="background:#ffee55;">40 19 00 00</span>  <span style="background:#ffee55;">8C 00 00 00</span>  <span style="background:#ffee33;">D0 19 00 00</span>  <span style="background:#ffee33;">60 89 00 00</span>  @...Œ...Ð...`‰..


{| class="wikitable"
{| class="wikitable"
Line 416: Line 372:
| empty || 0x2C || 0x04 || {{cellcolors|#ffeebb}} 00 00 00 00 || Not used
| empty || 0x2C || 0x04 || {{cellcolors|#ffeebb}} 00 00 00 00 || Not used
|-
|-
| Hash ID Integer Table Offset || 0x30 || 0x04 || {{cellcolors|#ffee99}} 00 00 18 D0* ||  
| Styles ID Integer Table Offset || 0x30 || 0x04 || {{cellcolors|#ffee99}} 00 00 18 D0* ||  
|-
|-
| Hash ID Integer Table Size || 0x34 || 0x04 || {{cellcolors|#ffee99}} 00 00 00 34* ||
| Styles ID Integer Table Size || 0x34 || 0x04 || {{cellcolors|#ffee99}} 00 00 00 34* ||
|-
|-
| Integer Array Table Offset || 0x38 || 0x04 || {{cellcolors|#ffee77}} 00 00 19 10* ||  
| Integer Array Table Offset || 0x38 || 0x04 || {{cellcolors|#ffee77}} 00 00 19 10* ||  
Line 433: Line 389:
|-
|-
|}
|}
====Vita RCSF====
'''Offset(h) 00 01 02 03  04 05 06 07  08 09 0A 0B  0C 0D 0E 0F'''
'''00000000'''  <span style="background:#666666;">52 43 53 46</span>  <span style="background:#666666;">10 01 00 00</span>  <span style="background:#ff8888;">50 00 00 00</span>  <span style="background:#ff8888;">8C AD 00 00</span>  RCSF....P...Œ­­-..
'''00000010'''  <span style="background:#8888ff;">E0 AD 00 00</span>  <span style="background:#8888ff;">00 00 00 00</span>  <span style="background:#88ff88;">E0 AD 00 00</span>  <span style="background:#88ff88;">40 3C 00 00</span>  à­-..@<....ê.....
'''00000020'''  <span style="background:#ffeedd;">20 EA 00 00</span>  <span style="background:#ffeedd;">18 00 00 00</span>  <span style="background:#ffeebb;">40 EA 00 00</span>  <span style="background:#ffeebb;">B2 36 00 00</span>  .ê......@ê..²6..
'''00000030'''  <span style="background:#ffee99;">00 21 01 00</span>  <span style="background:#ffee99;">00 00 00 00</span>  <span style="background:#ffee77;">00 21 01 00</span>  <span style="background:#ffee77;">00 00 00 00</span>  .!......!.......
'''00000040'''  <span style="background:#ffee55;">00 21 01 00</span>  <span style="background:#ffee55;">00 00 00 00</span>  <span style="background:#ffee33;">00 21 01 00</span>  <span style="background:#ffee33;">00 00 00 00</span>  .!......!.......
{| class="wikitable"
|-
! Name !! Offset !! Size !! Example !! Remark
|-
| Magic || 0x00 || 0x04 || {{cellcolors|#666666|#ffffff}} 52 43 53 46 || 'RCSF'
|-
| Version || 0x04 || 0x04 || {{cellcolors|#666666|#ffffff}} 00 00 01 10* || CXML version '1.10'
|-
| Tree Table Offset || 0x08 || 0x04 || {{cellcolors|#ff8888}} 00 00 00 50* ||
|-
| Tree Table Size || 0x0C || 0x04 || {{cellcolors|#ff8888}} 00 00 AD 8C* ||
|-
| Overlapped || 0x18 || 0x04 || {{cellcolors|#8888ff}} 00 00 AD E0* || overlapped
|-
| empty || 0x1C || 0x04 || {{cellcolors|#8888ff}} 00 00 00 00* || not used
|-
| ID Integer Table Offset || 0x10 || 0x04 || {{cellcolors|#88ff88}} 00 00 AD E0* ||
|-
| ID Integer Table Size || 0x14 || 0x04 || {{cellcolors|#88ff88}} 00 00 3C 40* ||
|-
| String Table Offset || 0x20 || 0x04 || {{cellcolors|#ffeedd}} 00 00 EA 20* ||
|-
| String Table size || 0x24 || 0x04 || {{cellcolors|#ffeedd}} 00 00 00 18* ||
|-
| Char Table Offset || 0x28 || 0x04 || {{cellcolors|#ffeebb}} 00 00 EA 40* ||
|-
| Char Table Size || 0x2C || 0x04 || {{cellcolors|#ffeebb}} 00 00 36 B2 ||
|-
| End offset || 0x30 || 0x04 || {{cellcolors|#ffee99}} 00 01 21 00* || End offset
|-
| empty || 0x34 || 0x04 || {{cellcolors|#ffee99}} 00 00 00 00* || not used
|-
| overlapped || 0x38 || 0x04 || {{cellcolors|#ffee77}} 00 01 21 00* || overlapped
|-
| empty || 0x3C || 0x04 || {{cellcolors|#ffee77}} 00 00 00 00* || not used
|-
| overlapped || 0x38 || 0x04 || {{cellcolors|#ffee55}} 00 01 21 00* || overlapped
|-
| empty || 0x3C || 0x04 || {{cellcolors|#ffee55}} 00 00 00 00* || not used
|-
| overlapped || 0x38 || 0x04 || {{cellcolors|#ffee33}} 00 01 21 00* || overlapped
|-
| empty || 0x3C || 0x04 || {{cellcolors|#ffee33}} 00 00 00 00* || not used
|-
|}
  * reversed little endian
  * reversed little endian
*Notes
*Notes
**The sizes doesn't includes the (possible) padding at the end of all tables
**The sizes doesn't includes the (possible) padding at the end of all tables


===Tree Table===
===Tree Table===
Line 503: Line 405:
| 0x08 || 0x04 || FF FF FF FF  || Parent
| 0x08 || 0x04 || FF FF FF FF  || Parent
|-
|-
| 0x0C || 0x04 || FF FF FF FF || Previous Sibling
| 0x0C || 0x04 || FF FF FF FF || Previous Brother
|-
|-
| 0x10 || 0x04 || FF FF FF FF || Next Sibling
| 0x10 || 0x04 || FF FF FF FF || Next Brother
|-
|-
| 0x14 || 0x04 || 00 00 00 3C || First Child within the root Element <resource> (which will also our Next '''Child Element''' to read)
| 0x14 || 0x04 || 00 00 00 3C || First Child within the root Element <resource> (which will also our Next '''Child Element''' to read)
Line 533: Line 435:
| 0x44 || 0x04 || 00 00 00 00 || Parent (Offset within XML Table, pointing to Root Element)
| 0x44 || 0x04 || 00 00 00 00 || Parent (Offset within XML Table, pointing to Root Element)
|-
|-
| 0x48 || 0x04 || FF FF FF FF || Previous Sibling
| 0x48 || 0x04 || FF FF FF FF || Previous Brother
|-
|-
| 0x4C || 0x04 || 00 00 07 88 || Next Sibling
| 0x4C || 0x04 || 00 00 07 88 || Next Brother
|-
|-
| 0x50 || 0x04 || 00 00 00 58 || First Child
| 0x50 || 0x04 || 00 00 00 58 || First Child
Line 547: Line 449:
| 0x60 || 0x04 || 00 00 00 3C || Parrent <stringtable>
| 0x60 || 0x04 || 00 00 00 3C || Parrent <stringtable>
|-
|-
| 0x64 || 0x04 || FF FF FF FF || Previous Sibling
| 0x64 || 0x04 || FF FF FF FF || Previous Brother
|-
|-
| 0x68 || 0x04 || 00 00 00 B4 || Next Sibling
| 0x68 || 0x04 || 00 00 00 B4 || Next Brother
|-
|-
| 0x6C || 0x04 || FF FF FF FF || First Child
| 0x6C || 0x04 || FF FF FF FF || First Child
Line 606: Line 508:




===String Table===
====String Table====
from [http://www.file-upload.net/download-9994498/string_table.rar.html notification_settings_plugin.rco] FW??
from [http://www.file-upload.net/download-9994498/string_table.rar.html notification_settings_plugin.rco] FW??
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 doesn't makes differences of the "directory hierarchy" of the tags neither is specified 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)
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 doesn't makes differences of the "directory hierarchy" of the tags neither is specified 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)
Line 649: Line 551:
**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, RCO 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)
**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, RCO 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)


===Char Table===
===ID Table===
Need To write....
 
===ID Tables===
In a '''Vita RCO''' we have '''3''' diffrent '''ID Tables''' which we will take a deeper look now.  
In a '''Vita RCO''' we have '''3''' diffrent '''ID Tables''' which we will take a deeper look now.  


Line 700: Line 599:
  '''00000090'''  FF FF FF FF  <span style="background:#ffff66;">20 41 32 74</span>                            ÿÿÿÿ.A2t
  '''00000090'''  FF FF FF FF  <span style="background:#ffff66;">20 41 32 74</span>                            ÿÿÿÿ.A2t


====ID Hash====
====ID Style====
from [http://www.file-upload.net/download-9994521/id_styletable.rar.html notification_settings_plugin.rco] FW??
from [http://www.file-upload.net/download-9994521/id_styletable.rar.html notification_settings_plugin.rco] FW??


Line 712: Line 611:
  '''00000020'''  <span style="background:#ffff66;">DA 39 A3 EE  20 2F 57 0C  86 D6 DE 69  22 43 90 D9</span>  Ú9£î./W.†ÖÞi"C.Ù
  '''00000020'''  <span style="background:#ffff66;">DA 39 A3 EE  20 2F 57 0C  86 D6 DE 69  22 43 90 D9</span>  Ú9£î./W.†ÖÞi"C.Ù
  '''00000030'''  <span style="background:#ffff66;">DD 31 50 3B</span>                                        Ý1P;
  '''00000030'''  <span style="background:#ffff66;">DD 31 50 3B</span>                                        Ý1P;


===Integer Array===
===Integer Array===
Line 856: Line 756:


===XML Output===
===XML Output===
This is the Output, saved as xml, from the notification_settings_plugin.rco on 3.60 DevKit Firmware
This is the Output, saved as xml, from the notification_settings_plugin.rco
 
download [http://www.file-upload.net/download-9995156/notification_settings_plugin.rar.html notification_settings_plugin.xml] from FW??
*Note: That xml below isn't perfect right now. Especially the values from <styletable> need to be corrected. I'll change the xml here as soon i finished the CXML Tool and got a nice correct xml written out.


    <?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="UTF-8"?>
    <resource version="0.100000001490116f" type="normal">
<resource version="0.1" type="normal">
      <stringtable>
  <stringtable>
        <locale origsize="1120" src="files\original\ja.z" compress="on" id="ja" />
    <local origsize="1040" src="xmls/ja.xml"   compress="on" id="ja"/>
        <locale origsize="1344" src="files\original\en-gb.z" compress="on" id="en-gb" />
    <local origsize="1248" src="xmls/en-gb.xml" compress="on" id="en-gb"/>
        <locale origsize="1344" src="files\original\en.z" compress="on" id="en" />
    <local origsize="1248" src="xmls/en.cml"   compress="on" id="en"/>
        <locale origsize="1424" src="files\original\fr.z" compress="on" id="fr" />
    <local origsize="1328" src="xmls/fr.xml"   compress="on" id="fr"/>
        <locale origsize="1488" src="files\original\es.z" compress="on" id="es" />
    <local origsize="1392" src="xmls/es.xml"   compress="on" id="es"/>
        <locale origsize="1392" src="files\original\de.z" compress="on" id="de" />
    <local origsize="1312" src="xmls/de.xml"   compress="on" id="de"/>
        <locale origsize="1376" src="files\original\it.z" compress="on" id="it" />
    <local origsize="1280" src="xmls/it.xml"   compress="on" id="it"/>
        <locale origsize="1392" src="files\original\nl.z" compress="on" id="nl" />
    <local origsize="1296" src="xmls/nl.xml"   compress="on" id="nl"/>
        <locale origsize="1408" src="files\original\pt-br.z" compress="on" id="pt-br" />
    <local origsize="1312" src="xmls/pt-br.xml" compress="on" id="pt-br"/>
        <locale origsize="1392" src="files\original\pt.z" compress="on" id="pt" />
    <local origsize="1296" src="xmls/pt.xml"   compress="on" id="pt"/>
        <locale origsize="1408" src="files\original\ru.z" compress="on" id="ru" />
    <local origsize="1312" src="xmls/ru.xml"   compress="on" id="ru"/>
        <locale origsize="1120" src="files\original\ko.z" compress="on" id="ko" />
    <local origsize="1040" src="xmls/ko.xml"   compress="on" id="ko"/>
        <locale origsize="1072" src="files\original\zh-t.z" compress="on" id="zh-t" />
    <local origsize="992" src="xmls/zh-t.xml" compress="on" id="zh-t"/>
        <locale origsize="1072" src="files\original\zh-s.z" compress="on" id="zh-s" />
    <local origsize="992" src="xmls/zh-s.xml" compress="on" id="zh-s"/>
        <locale origsize="1360" src="files\original\fi.z" compress="on" id="fi" />
    <local origsize="1264" src="xmls/fi.xml"   compress="on" id="fi"/>
        <locale origsize="1328" src="files\original\sv.z" compress="on" id="sv" />
    <local origsize="1232" src="xmls/sv.xml"   compress="on" id="sv"/>
        <locale origsize="1328" src="files\original\da.z" compress="on" id="da" />
    <local origsize="1232" src="xmls/da.xml"   compress="on" id="da"/>
        <locale origsize="1328" src="files\original\no.z" compress="on" id="no" />
    <local origsize="1232" src="xmls/no.xml"   compress="on" id="no"/>
        <locale origsize="1392" src="files\original\pl.z" compress="on" id="pl" />
    <local origsize="1296" src="xmls/pl.xml"   compress="on" id="pl"/>
        <locale origsize="1392" src="files\original\tr.z" compress="on" id="tr" />
    <local origsize="1296" src="xmls/tr.xml"   compress="on" id="tr"/>
      </stringtable>
  </stringtable>
      <texturetable>
  <texturetable>
        <texture origsize="5328" src="files\original\1DDD0E08.z" compress="on" id="1DDD0E08" type="texture/gim" />
    <texture origsize="5328" src="texture/1DDD0E08.gim" compress="on" id="1DDD0E08" type="texture/gim"/>
        <texture origsize="7632" src="files\original\2133CEEB.z" compress="on" id="2133CEEB" type="texture/gim" />
    <texture origsize="7632" src="texture/2133CEEB.gim" compress="on" id="2133CEEB" type="texture/gim"/>
        <texture origsize="7632" src="files\original\F7988312.z" compress="on" id="F7988312" type="texture/gim" />
    <texture origsize="7632" src="texture/F7988312.gim" compress="on" id="F7988312" type="texture/gim"/>
        <texture origsize="5328" src="files\original\6F57E251.z" compress="on" id="6F57E251" type="texture/gim" />
    <texture origsize="5328" src="texture/6F57E251.gim" compress="on" id="6F57E251" type="texture/gim"/>
        <texture origsize="7632" src="files\original\86645D41.z" compress="on" id="86645D41" type="texture/gim" />
    <texture origsize="7632" src="texture/86645D41.gim" compress="on" id="86645D41" type="texture/gim"/>
        <texture origsize="7632" src="files\original\100DEBD1.z" compress="on" id="100DEBD1" type="texture/gim" />
    <texture src="texture/29B91F26.gim" origsize="57648" div_ratio_h="0.49" compress="on" margin_v="1" id="29B91F26" margin_h="1" type="texture/gim" div_mode="3x1"/>
        <texture src="files\original\29B91F26.z" origsize="57648" div_ratio_h="[0.490000009536743f]" compress="on" margin_v="[1]" id="29B91F26" margin_h="[1]" type="texture/gim" div_mode="3x1" />
    <texture src="texture/D0A272A1.gim" origsize="57648" div_ratio_h="0.49" compress="on" margin_v="1" id="D0A272A1" margin_h="1" type="texture/gim" div_mode="3x1"/>
        <texture src="files\original\D0A272A1.z" origsize="57648" div_ratio_h="[0.490000009536743f]" compress="on" margin_v="[1]" id="D0A272A1" margin_h="[1]" type="texture/gim" div_mode="3x1" />
  </texturetable>
      </texturetable>
  <styletable>
      <styletable>
    <style_button id="86009135" bg_obj="1, 0, 0, 0" glow_obj="0, 0, 0, 0">
        <style_button id="2F652005" bg_obj="9C96918B" glow_obj="22FF88BD">
        <planeobj texture0="261FB929" id="01000000"/>
          <planeobj texture0="29B91F26" id="9C96918B" />
        <planeobj texture0="A172A2D0" blend="2" id="00000000" />
          <planeobj texture0="D0A272A1" blend="2" id="22FF88BD" />
         <style_text textobj="00000000" id="E98E283C"/>
        </style_button>
            <textobj font_size="28" bold="1" color="0.49, 1, 1, 1" max_line_count="1" line_pitch="28" word_wrap="1" ellipsis="1" id="00000000"/>
         <style_text textobj="01F875B1" id="3C288EE9">
          <textobj font_size="28f" bold="1" color="[1f, 1f, 1f, 1f]" max_line_count="2" line_pitch="28f" word_wrap="1" ellipsis="1" id="01F875B1" />
         </style_text>
         </style_text>
        <style_plane id="C72CF1D7" planeobj="E95F1628">
    </style_button>
          <planeobj texture0="1845D10D" id="E95F1628" />
    <style_plane id="D7F12CC7" planeobj="0, 0, 0, 0">
        </style_plane>
        <planeobj texture0="0DD14518" id="01000000"/>
      </styletable>
    </style_plane>
      <pagetable />
    <pagetable>
      <templatetable>
        <templatetable>
        <template id="3F187491">
            <template id="9174183F">
          <file_list style="7038364B" id="38B62BE4">
                <file_list style="4B363870" id="04000000"/>
            <layout_hint align="[0, 0]" size="[960f, 448f]" id="0A2F2CD9" pos="[0f, 0f]" />
                <layout_hint align="0, 0" size="960, 448" id="00000000" pos="0, 0"/>
          </file_list>
            </template>
        </template>
            <template fast_open="1" id="60FB37AF">
        <template fast_open="1" id="AF37FB60">
                <list_item style="998F48F3" id="02000000">
          <list_item style="F3488F99" id="63678FEE">
                    <layout_hint align="0, 0" size="840, 80" id="00000000" pos="448, 0"/>
            <layout_hint align="[0, 0]" size="[840f, 80f]" id="0A2F2CD9" pos="[0f, 0f]" />
                    <text style="E98E283C" id="01000000">
            <text style="3C288EE9" id="2FBCDEAE">
                        <layout_hint size="462, 0" align="1, 0" adjust="0, 0" id="05000000" pos="-272, 0"/>
              <layout_hint size="[462f, 0f]" align="[1, 4]" adjust="[0, 2]" id="DA39A3EE" pos="[-272f, 0f]" />
                        <plane style="2B337B5F" id="02000000">
              <plane style="5F7B332B" id="202F570C">
                            <layout_hint pos="-30, 0" id="05000000" adjust="0, 0" alpha="0" anchor="1, 0" size="60, 60"/>
                <layout_hint pos="[-30f, 0f]" id="DA39A3EE" adjust="[0, 0]" alpha="0f" anchor="[1, 5]" size="[60f, 60f]" />
                        </plane>
              </plane>
                        <check_box style="98F8209F" id="00000000">
              <check_box style="9F20F898" id="86D6DE69">
                            <layout_hint align="2, 0" size="46, 46" pos="602, 0" anchor="1, 0" id="05000000"/>
                <layout_hint align="[2, 0]" size="[46f, 46f]" pos="[602f, 0f]" anchor="[1, 5]" id="DA39A3EE" />
                            <focus_hint focus_shape="0" focus_size="47, 47"/>
                <focus_hint focus_shape="0" focus_size="[47f, 47f]" />
                        </check_box>
              </check_box>
                    </text>
            </text>
                </list_item>
          </list_item>
            </template>
        </template>
            <template fast_open="1" id="23860CE8">
        <template fast_open="1" id="E80C8623">
                <list_item style="998F48F3" id="02000000">
          <list_item style="F3488F99" id="63678FEE">
                    <layout_hint align="0, 0" size="840, 80" id="00000000" pos="0, 0"/>
            <layout_hint align="[0, 0]" size="[840f, 80f]" id="0A2F2CD9" pos="[0f, 0f]" />
                    <button sound="74324120" style="0520652F" id="00000000">
            <button sound="20413274" style="2F652005" id="224390D9">
                        <layout_hint size="840, 80" adjust="1, 0" id="01000000" pos="0, 0"/>
              <layout_hint size="[840f, 80f]" adjust="[0, 0]" id="DA39A3EE" pos="[0f, 0f]" />
                        <focus_hint focus_shape="3" focus_hint="960, 80"/>
              <focus_hint focus_shape="3" focus_size="[960f, 80f]" />
                        <text style="E98E283C" id="02000000">
              <text style="3C288EE9" id="2FBCDEAE">
                            <layout_hint size="-206, 0" align="0, 0" adjust="4, 0" id="01000000" pos="0, 330"/>
                <layout_hint size="[398f, 0f]" align="[1, 4]" adjust="[0, 2]" id="DA39A3EE" pos="[-206f, 0f]" />
                            <file_list style="2B337B5F" id="05000000">
                <plane style="5F7B332B" id="202F570C">
                                <layout_hint pos="0, -40" id="01000000" adjust="1, 0" alpha="0" anchor="2, 0" size="60, 60"/>
                  <layout_hint pos="[-40f, 0f]" id="DA39A3EE" adjust="[0, 0]" alpha="0f" anchor="[1, 5]" size="[60f, 60f]" />
                            </file_list>
                </plane>
                        </text>
              </text>
                        <plane style="D7F12CC7" id="D9904322">
              <plane style="C72CF1D7" id="DD31503B">
                            <layout_hint size="46, 46" align="5, 2" adjust="1, 0" id="EEA339DA" pos="330, 0"/>
                <layout_hint size="[46f, 46f]" align="[2, 0]" adjust="[0, 0]" id="DA39A3EE" pos="[330f, 0f]" />
                        </plane>
              </plane>
                    </button>
            </button>
                </list_item>
          </list_item>
            </template>
        </template>
        </templatetable>
      </templatetable>
    </pagetable>
    </resource>
  </styletable>
== CXML Tools ==
</resource>
Because CXML is "Compiled XML" tools read CXML files are often called "Decompilers"
</xml>
while one to build it is a "Compiler"
 
{| class="wikitable"
|+ CXML Decompilers
|-
! Name || Functions !! Developer !! License || Language
|-
| cxml.py // PSM SDK || Compile || Sony Computer Entertainment || All Rights Reserved || Python2
|-
| [https://bitbucket.org/SilicaAndPina/cxml-decompiler cxml-decompiler] || Decompile, Compile || Li || MIT || C#
|-
| [https://github.com/OpenPSS/SnowPME/tree/master/LibCXML LibCXML // SnowPME] || Decompile || OpenPSS || GPLv3 || C++
|-
| [https://github.com/Princess-of-Sleeping/RcoDecompiler RcoDecompiler] || Decompile || Princess of Sleeping || MIT || C
|-
|}
== Other useful links ==


So what of old but still handy [https://github.com/ColdSauce/psxsdk/tree/master/tools VAG2WAV WAV2VAG Source]
==Other Usefull Links==
So what of old but still handy [http://psxsdk.googlecode.com/svn/!svn/bc/13/trunk/tools/ VAG2WAV WAV2VAG Source]
Please note that all contributions to Vita Developer wiki are considered to be released under the GNU Free Documentation License 1.2 (see Vita Developer wiki:Copyrights for details). If you do not want your writing to be edited mercilessly and redistributed at will, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource. Do not submit copyrighted work without permission!

To protect the wiki against automated edit spam, we kindly ask you to solve the following hCaptcha:

Cancel Editing help (opens in new window)

Templates used on this page: