Qt Resource Container (QRC): Difference between revisions

From PS3 Developer wiki
Jump to navigation Jump to search
mNo edit summary
 
(45 intermediate revisions by 4 users not shown)
Line 1: Line 1:
location: /dev_flash/vsh/resource/qgl
== Description ==
QRC files ('''Q'''t '''R'''esources '''C'''ontainer) are located inside a QGL folder ('''Q'''t '''G'''raphics '''L'''ibrary) in path: '''dev_flash/vsh/resource/qgl''' with names: [[canyon.qrc]], [[earth.qrc]], [[icons.qrc]], [[icontex.qrc]], [[lines.qrc]], [[raf.qrc]], [[rhm.qrc]], and [[store.qrc]]. The contents of QRC files are compatible/generated with/by: [http://en.wikipedia.org/wiki/Qt_%28framework%29 Qt framework] and [http://en.wikipedia.org/wiki/OpenGL OpenGL]


== General format ==
The internal structure of QRC files can be clasifyed as one of the variants of a group of containers named: [[CXML Containers]]
QGL ('''Q'''t '''G'''raphics '''L'''ibrary) based in [http://en.wikipedia.org/wiki/Qt_%28framework%29 Qt framework] and [http://en.wikipedia.org/wiki/OpenGL OpenGL]


=== QRCC ===
*QRC related firmware modules in '''dev_flashvsh/modules/''':
QRCC ('''Q'''t '''R'''esources '''C'''ontainer '''C'''ompressed)
**qglbase.sprx <--- generic
**qgl_gaia_app.sprx <--- earth animation inside music player
**qgl_canyon_app.sprx <--- abstract animation inside music player
**custom_render_plugin.sprx


QRC file ZLIB Compressed level 9.
*Other stuff related with QRC:
**http://blog.us.playstation.com/2009/09/04/q-games-update-star-dust-dynamic-themes-our-favorite-little-tikiman/
**ps3 standalone visualizer app released by "Q games" (responsibles of XMB design): http://blog.us.playstation.com/2013/08/08/new-ps3-visualizer-app-from-q-games-out-tuesday/ and http://www.ps3hax.net/2013/08/q-games-releases-new-visualizer-music-app-for-ps3-high/


*Example from 3.55 rhm.qrc:
== QRC containers ==
'''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"
=== icons.qrc & icontex.qrc ===
|-
*See: [[icons.qrc]] and [[icontex.qrc]] pages
! Name !! Offset !! Size !! Example !! Remark
{{icons.qrc}}
|-
{{icontex.qrc}}
| 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
=== lines.qrc ===
**The first 2 bytes of the compressed QRCF is the ZLIB header, in this example: 0x78DA
*See: [[lines.qrc]] page
**default/max level 9
{{lines.qrc}}


=== QRCF ===
=== rhm.qrc & raf.qrc ===
QRCF ('''Q'''t '''R'''esources '''C'''ontainer '''F'''lat?)
*See: [[rhm.qrc]] and [[raf.qrc]] pages
{{rhm.qrc}}
{{raf.qrc}}


QRC "container" with an structure similar than themes .p3t
=== canyon.qrc & earth.qrc ===
*See: [[canyon.qrc]] and [[earth.qrc]] pages
*Music player visualizers (a.k.a. 'valley' and 'gaia'), the other music player visualizer available is a modification of the [[XMB]] wave/sparks animation, and is stored inside [[lines.qrc]] using specific .MNU settings in path: '''override/music_1/''')
{{canyon.qrc}}
{{earth.qrc}}


====Main Header====
=== store.qrc ===
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)
*See: [[store.qrc]] page
 
{{store.qrc}}
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 fw 3.55 rhm.qrc:
'''Offset(h) 00 01 02 03  04 05 06 07  08 09 0A 0B  0C 0D 0E 0F'''
'''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"
|-
! Name !! Offset !! Size !! Example !! Remark
|-
| 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
**The sizes doesnt includes the (posible) padding at the end of all tables
 
====Tree Table====
Default entry size is 49 bytes (offset 0x30), The '''Tree Table''' defines the Offset, Size and Filename pointer of each file contained in the File Table. There is a total padding of 52 bytes (0x34) between each entry but first we have a unique* padding of 92 byte (0x5C) before the first entry starts (see '''Structure Tree Table''' below). After that, the first 4 bytes are the Offset and the next 4 bytes are the Size of the file from the '''File Table'''. The padding have a structure which is for every QRC the same. First 8 bytes are compiled of 2x 4 bytes which are always 0x00000018 & 0x00000007. Next 4 bytes are the Offset of the Filename pointer within the ID Table. Next 16 bytes are compiled of 4x 4 bytes which are always 0x00000000, 0x0000000F, 0x00000002 & 0x0000001C. Next 4 bytes are the pointer for the '''Filename''' from the '''ID Table'''. Next 4 bytes are the offset within the '''Tree Table''' for the next '''Filename pointer'''. Last 16 bytes are compiled of 1x 8 bytes and 2x 4 bytes which are always 0xFFFFFFFFFFFFFFFF, 0x00000014 & 0x00000006.
 
* excluding icontext.qrc
 
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"
! Offset !! Size !! Example !! Remark
|-
| 0x00 || 0x08 || 00 00 00 00 00 00 00 00 || similar all qrc files
|-
| 0x08 || 0x08 || FF FF FF FF FF FF FF FF || similar all qrc files
|-
| 0x10 || 0x04 || FF FF FF FF || similar all qrc files
|-
| 0x14 || 0x04 || 00 00 00 1C || similar all qrc files
|-
| 0x18 || 0x04 || 00 00 00 1C || similar all qrc files
|-
| 0x1C || 0x04 || 00 00 00 04 || similar all qrc files
|-
| 0x20 || 0x08 || 00 00 00 00 00 00 00 00 || similar all qrc files
|-
| 0x28 || 0x08 || FF FF FF FF FF FF FF FF || similar all qrc files
|-
| 0x30 || 0x04 || 00 00 00 38 || similar all qrc files: start offset Tree Table
|-
| 0x34 || 0x04 || xx xx xx xx || size body Tree Table
|-
| 0x38 || 0x04 || 00 00 00 0F || similar all qrc files
|-
| 0x3C || 0x04 || 00 00 00 02 || 00 00 00 03 on icontex.qrc
|-
| 0x40 || 0x04 || 00 00 00 1C || similar all qrc files
|-
| 0x44 || 0x04 || FF FF FF FF || similar all qrc files
|-
| 0x48 || 0x04 || 00 00 00 74 || 00 00 00 84 on icontex.qrc : start offset of the Filename pointer entry inside ID Table
|-
| 0x4C || 0x08 || FF FF FF FF FF FF FF FF || similar all qrc files
|-
| 0x54 || 0x04 || 00 00 00 14 || similar all qrc files
|-
| 0x58 || 0x04 || 00 00 00 06 || similar all qrc files
|-
| 0x5C || 0x04 || 00 00 00 00 || offset of first File Data
|-
| 0x60 || 0x04 || 00 00 01 50 || size of first File Data
|-
| 0x64 || 0x04 || 00 00 00 18 || similar all qrc files
|-
| 0x68 || 0x04 || 00 00 00 07 || similar all qrc files
|-
| 0x6C || 0x04 || 00 00 00 00 || offset of first filename within the ID Table
|-
| 0x70 || 0x04 || 00 00 00 00 || on icontex here are additional 16 bytes
|-
| 0x74 || 0x04 || 00 00 00 0F || similar all qrc files
|-
| 0x78 || 0x04 || 00 00 00 02 || similar all qrc files
|-
| 0x7C || 0x04 || 00 00 00 1C || similar all qrc files
|-
| 0x80 || 0x04 || 00 00 00 38 || Filename pointer of the first file for the ID Table
|-
| 0x84 || 0x04 || 00 00 00 B0 || start offset of the next entry for the Filename pointer within the ID Table
|-
|}
 
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 || on icontex.qrc
|-
| 0x78 || 0x04 || 00 00 00 01 || on icontex.qrc
|-
| 0x7C || 0x04 || 00 01 55 D4 || on icontex.qrc (size of .dds uncompressed)
|-
| 0x80 || 0x04 || 00 00 00 00 || similar all qrc files
|-
| 0x84 || 0x04 || 00 00 00 0F || similar all qrc files
|-
| 0x88 || 0x04 || 00 00 00 02 || similar all qrc files
|-
| 0x8C || 0x04 || 00 00 00 1C || similar all qrc files
|-
| 0x90 || 0x04 || 00 00 00 38 || Filename pointer of the first file for the ID Table
|-
| 0x94 || 0x04 || 00 00 00 B0 || start offset of the next entry for the Filename pointer within the Tree Table
|-
|}
 
====ID Table====
Each entry is composed by:
 
{| class="wikitable"
|-
! Offset !! Length !! Example !! Name !! Notes
|-
| 0x0 || 0x4 || 00000038 || '''Filename Table pointer''' || Same value than in the '''Tree Table'''
|-
| 0x4 || ''variable'' || lib/rhm/Clear.fpo || '''File name''' ||
|-
| ''variable'' || 0x1 || 00 || '''NULL byte''' ||
|}
*The end of the table has a padding to align to 0x10 bytes
 
 
For a better understanding of the infos posted in the Structure Table and for a side by side compare about the Filename pointers.
 
<span style="background:#66ff66;">Offset of first entry</span>
 
<span style="background:#e6ec8b;">Size of the body starting on</span> <span style="background:#66ff66;">offset of first entry</span>
 
<span style="background:#ccd815;">Constant 16 byte long padding</span>
 
<span style="background:#ffff66;">Filename pointer</span>
 
<span style="background:#ff6666;">Offset pointer for Filename pointer's within the Tree Table</span>
 
<span style="background:#cef2ce;">Constant 16 byte long padding</span>
 
<span style="background:#6666ff;">Offset of the Filedata within the File Table</span>
 
<span style="background:#2bffb3;">Size of the Filedata</span>
 
<span style="background:#ae91e0;">Constant 8 byte long padding</span>
 
<span style="background:#00FFFF;">Offset for the Filename pointer within the ID Table</span>
 
'''                    Tree Table of rhm.qrc                                                                            ID Table of 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  00 00 00 00 00 00 00 00 FF FF FF FF FF FF FF FF  ........ÿÿÿÿÿÿÿÿ                      00000000  <span style="background:#00FFFF;">00</span> <span style="background:#ffff66;">00 00 38</span> 6C 69 62 2F 72 68 6D 2F 43 6C 65 61  ...8lib/rhm/Clea'''
''' 00000010  FF FF FF FF 00 00 00 1C 00 00 00 1C 00 00 00 04  ÿÿÿÿ............                      00000010  72 2E 66 70 6F 00 <span style="background:#00FFFF;">00</span> <span style="background:#ffff66;">00 00 74</span> 6C 69 62 2F 72 68  r.fpo....tlib/rh'''
''' 00000020  00 00 00 00 00 00 00 00 FF FF FF FF FF FF FF FF  ........ÿÿÿÿÿÿÿÿ                      00000020  6D 2F 43 6C 65 61 72 2E 76 70 6F 00 <span style="background:#00FFFF;">00</span> <span style="background:#ffff66;">00 00 B0</span>  m/Clear.vpo....°'''
''' 00000030  <span style="background:#66ff66;">00 00 00 38</span> <span style="background:#e6ec8b;">00 00 02 90</span> <span style="background:#66ff66;">00</span> <span style="background:#ccd815;">00 00 0F 00 00 00 02</span>  ...8............                      00000030  6C 69 62 2F 72 68 6D 2F 43 6F 70 79 2E 66 70 6F  lib/rhm/Copy.fpo'''
''' 00000040  <span style="background:#ccd815;">00 00 00 1C</span> <span style="background:#ffff66;">FF FF FF FF</span> <span style="background:#ff6666;">00 00 00 74</span> <span style="background:#cef2ce;">FF FF FF FF</span>  ....ÿÿÿÿ...tÿÿÿÿ                      00000040  00 <span style="background:#00FFFF;">00</span> <span style="background:#ffff66;">00 00 EC</span> 6C 69 62 2F 72 68 6D 2F 64 65 66  ....ìlib/rhm/def'''
''' 00000050  <span style="background:#cef2ce;">FF FF FF FF 00 00 00 14 00 00 00 06</span> <span style="background:#6666ff;">00 00 00 00</span>  ÿÿÿÿ............                      00000050  61 75 6C 74 2E 66 70 6F 00 <span style="background:#00FFFF;">00</span> <span style="background:#ffff66;">00 01 28</span> 6C 69 62  ault.fpo....(lib'''
''' 00000060  <span style="background:#2bffb3;">00 00 01 50</span> <span style="background:#ae91e0;">00 00 00 18 00 00 00 07</span> <span style="background:#00FFFF;">00 00 00 00</span>  ...P............                      00000060  2F 72 68 6D 2F 64 65 66 61 75 6C 74 2E 76 70 6F  /rhm/default.vpo'''
''' 00000070  <span style="background:#ccd815;">00 00 00 00</span> <span style="background:#ff6666;">00</span> <span style="background:#ccd815;">00 00 0F 00 00 00 02 00 00 00 1C</span>  ................                      00000070  00 <span style="background:#00FFFF;">00</span> <span style="background:#ffff66;">00 01 64</span> 6C 69 62 2F 67 6C 75 74 69 6C 73  ....dlib/glutils'''
''' 00000080  <span style="background:#ffff66;">00 00 00 38</span> <span style="background:#ff6666;">00 00 00 B0</span> <span style="background:#cef2ce;">FF FF FF FF FF FF FF FF</span>  ...8...°ÿÿÿÿÿÿÿÿ                      00000080  2F 43 6F 6E 65 46 69 6C 74 65 72 2E 66 70 6F 00  /ConeFilter.fpo.'''
''' 00000090  <span style="background:#cef2ce;">00 00 00 14 00 00 00 06</span> <span style="background:#6666ff;">00 00 01 50</span> <span style="background:#2bffb3;">00 00 00 E0</span>  ...........P...à                      00000090  <span style="background:#00FFFF;">00</span> <span style="background:#ffff66;">00 01 A0</span> 6C 69 62 2F 67 6C 75 74 69 6C 73 2F  ....lib/glutils/'''
''' 000000A0  <span style="background:#ae91e0;">00 00 00 18 00 00 00 07</span> <span style="background:#00FFFF;">00 00 00 16</span> <span style="background:#ccd815;">00 00 00 00</span>  ................                      000000A0  43 6F 6E 65 46 69 6C 74 65 72 2E 76 70 6F 00 <span style="background:#00FFFF;">00</span>  ConeFilter.vpo..'''
''' 000000B0  <span style="background:#ff6666;">00</span> <span style="background:#ccd815;">00 00 0F 00 00 00 02 00 00 00 1C</span> <span style="background:#ffff66;">00 00 00 74</span>  ...............t                      000000B0  <span style="background:#ffff66;">00 01 DC</span> 6C 69 62 2F 67 6C 75 74 69 6C 73 2F 43  ..Ülib/glutils/C'''
''' 000000C0  <span style="background:#ff6666;">00 00 00 EC</span> <span style="background:#cef2ce;">FF FF FF FF FF FF FF FF 00 00 00 14</span>  ...ìÿÿÿÿÿÿÿÿ....                      000000C0  6F 6E 65 46 69 6C 74 65 72 53 69 6D 70 6C 65 2E  oneFilterSimple.'''
''' 000000D0  <span style="background:#cef2ce;">00 00 00 06</span> <span style="background:#6666ff;">00 00 02 30</span> <span style="background:#2bffb3;">00 00 01 20</span> <span style="background:#ae91e0;">00 00 00 18</span>  .......0........                      000000D0  66 70 6F 00 <span style="background:#00FFFF;">00</span> <span style="background:#ffff66;">00 02 18</span> 6C 69 62 2F 67 6C 75 74  fpo.....lib/glut'''
''' 000000E0  <span style="background:#ae91e0;">00 00 00 07</span> <span style="background:#00FFFF;">00 00 00 2C</span> <span style="background:#ccd815;">00 00 00 00</span> <span style="background:#ff6666;">00</span> <span style="background:#ccd815;">00 00 0F</span>  .......,........                      000000E0  69 6C 73 2F 53 63 72 65 65 6E 43 6F 70 79 2E 66  ils/ScreenCopy.f'''
''' 000000F0  <span style="background:#ccd815;">00 00 00 02 00 00 00 1C</span> <span style="background:#ffff66;">00 00 00 B0</span> <span style="background:#ff6666;">00 00 01 28</span>  ...........°...(                      000000F0  70 6F 00 <span style="background:#00FFFF;">00</span> <span style="background:#ffff66;">00 02 54</span> 6C 69 62 2F 67 6C 75 74 69  po....Tlib/gluti'''
''' 00000100  <span style="background:#cef2ce;">FF FF FF FF FF FF FF FF 00 00 00 14 00 00 00 06</span>  ÿÿÿÿÿÿÿÿ........                      00000100  6C 73 2F 42 6C 75 72 32 2E 66 70 6F 00 <span style="background:#00FFFF;">00</span> 00 02  ls/Blur2.fpo....'''
''' 00000110  <span style="background:#6666ff;">00 00 03 50</span> <span style="background:#2bffb3;">00 00 01 F0</span> <span style="background:#ae91e0;">00 00 00 18 00 00 00 07</span>  ...P...ð........                      00000110  90 6C 69 62 2F 67 6C 75 74 69 6C 73 2F 42 6C 75  .lib/glutils/Blu'''
''' 00000120  <span style="background:#00FFFF;">00 00 00 41</span> <span style="background:#ccd815;">00 00 00 00</span> <span style="background:#ff6666;">00</span> <span style="background:#ccd815;">00 00 0F 00 00 00 02</span>  ...A............                      00000120  72 32 4D 61 73 6B 2E 66 70 6F                    r2Mask.fpo'''
''' 00000130  <span style="background:#ccd815;">00 00 00 1C</span> <span style="background:#ffff66;">00 00 00 EC</span> <span style="background:#ff6666;">00 00 01 64</span> <span style="background:#cef2ce;">FF FF FF FF</span>  .......ì...dÿÿÿÿ'''
''' 00000140  <span style="background:#cef2ce;">FF FF FF FF 00 00 00 14 00 00 00 06</span> <span style="background:#6666ff;">00 00 05 40</span>  ÿÿÿÿ...........@'''
''' 00000150  <span style="background:#2bffb3;">00 00 08 10</span> <span style="background:#ae91e0;">00 00 00 18 00 00 00 07</span> <span style="background:#00FFFF;">00 00 00 59</span>  ...............Y'''
''' 00000160  <span style="background:#ccd815;">00 00 00 00</span> <span style="background:#ff6666;">00</span> <span style="background:#ccd815;">00 00 0F 00 00 00 02 00 00 00 1C</span>  ................'''
''' 00000170  <span style="background:#ffff66;">00 00 01 28</span> <span style="background:#ff6666;">00 00 01 A0</span> <span style="background:#cef2ce;">FF FF FF FF FF FF FF FF</span>  ...(....ÿÿÿÿÿÿÿÿ'''
''' 00000180  <span style="background:#cef2ce;">00 00 00 14 00 00 00 06</span> <span style="background:#6666ff;">00 00 0D 50</span> <span style="background:#2bffb3;">00 00 05 50</span>  ...........P...P'''
''' 00000190  <span style="background:#ae91e0;">00 00 00 18 00 00 00 07</span> <span style="background:#00FFFF;">00 00 00 71</span> <span style="background:#ccd815;">00 00 00 00</span>  ...........q....'''
''' 000001A0  <span style="background:#ff6666;">00</span> <span style="background:#ccd815;">00 00 0F 00 00 00 02 00 00 00 1C</span> <span style="background:#ffff66;">00 00 01 64</span>  ...............d'''
''' 000001B0  <span style="background:#ff6666;">00 00 01 DC</span> <span style="background:#cef2ce;">FF FF FF FF FF FF FF FF 00 00 00 14</span>  ...Üÿÿÿÿÿÿÿÿ....'''
''' 000001C0  <span style="background:#cef2ce;">00 00 00 06</span> <span style="background:#6666ff;">00 00 12 A0</span> <span style="background:#2bffb3;">00 00 03 D0</span> <span style="background:#ae91e0;">00 00 00 18</span>  ...........Ð....'''
''' 000001D0  <span style="background:#ae91e0;">00 00 00 07</span> <span style="background:#00FFFF;">00 00 00 90</span> <span style="background:#ccd815;">00 00 00 00</span> <span style="background:#ff6666;">00</span> <span style="background:#ccd815;">00 00 0F</span>  ................'''
''' 000001E0  <span style="background:#ccd815;">00 00 00 02 00 00 00 1C</span> <span style="background:#ffff66;">00 00 01 A0</span> <span style="background:#ff6666;">00 00 02 18</span>  ................'''
''' 000001F0  <span style="background:#cef2ce;">FF FF FF FF FF FF FF FF 00 00 00 14 00 00 00 06</span>  ÿÿÿÿÿÿÿÿ........'''
''' 00000200  <span style="background:#6666ff;">00 00 16 70</span> <span style="background:#2bffb3;">00 00 01 C0</span> <span style="background:#ae91e0;">00 00 00 18 00 00 00 07</span>  ...p...À........'''
''' 00000210  <span style="background:#00FFFF;">00 00 00 AF</span> <span style="background:#ccd815;">00 00 00 00</span> <span style="background:#ff6666;">00</span> <span style="background:#ccd815;">00 00 0F 00 00 00 02</span>  ...¯............'''
''' 00000220  <span style="background:#ccd815;">00 00 00 1C</span> <span style="background:#ffff66;">00 00 01 DC</span> <span style="background:#ff6666;">00 00 02 54</span> <span style="background:#cef2ce;">FF FF FF FF</span>  .......Ü...Tÿÿÿÿ'''
''' 00000230  <span style="background:#cef2ce;">FF FF FF FF 00 00 00 14 00 00 00 06</span> <span style="background:#6666ff;">00 00 18 30</span>  ...............0'''
''' 00000240  <span style="background:#2bffb3;">00 00 03 10</span> <span style="background:#ae91e0;">00 00 00 18 00 00 00 07</span> <span style="background:#00FFFF;">00 00 00 D4</span>  ...............Ô'''
''' 00000250  <span style="background:#ccd815;">00 00 00 00</span> <span style="background:#ff6666;">00</span> <span style="background:#ccd815;">00 00 0F 00 00 00 02 00 00 00 1C</span>  ................'''
''' 00000260  <span style="background:#ffff66;">00 00 02 18</span> <span style="background:#ff6666;">00 00 02 90</span> <span style="background:#cef2ce;">FF FF FF FF FF FF FF FF</span>  ........ÿÿÿÿÿÿÿÿ'''
''' 00000270  <span style="background:#cef2ce;">00 00 00 14 00 00 00 06</span> <span style="background:#6666ff;">00 00 1B 40</span> <span style="background:#2bffb3;">00 00 04 20</span>  ...........@....'''
''' 00000280  <span style="background:#ae91e0;">00 00 00 18 00 00 00 07</span> <span style="background:#00FFFF;">00 00 00 F3</span> <span style="background:#ccd815;">00 00 00 00</span>  ...........ó....'''
''' 00000290  <span style="background:#ff6666;">00</span> <span style="background:#ccd815;">00 00 0F 00 00 00 02 00 00 00 1C</span> <span style="background:#ffff66;">00 00 02 54</span>  ...............T'''
''' 000002A0  <span style="background:#ff6666;">FF FF FF FF</span> <span style="background:#cef2ce;">FF FF FF FF FF FF FF FF 00 00 00 14</span>  ÿÿÿÿÿÿÿÿÿÿÿÿ....'''
''' 000002B0  <span style="background:#cef2ce;">00 00 00 06</span> <span style="background:#6666ff;">00 00 1F 60</span> <span style="background:#2bffb3;">00 00 04 40</span> <span style="background:#ae91e0;">00 00 00 18</span>  .......`...@....'''
''' 000002C0  <span style="background:#ae91e0;">00 00 00 07</span> <span style="background:#00FFFF;">00 00 01 0D</span> 00 00 00 00              ............'''


====Container Info Table====
== QRC contents ==
See [[Multimedia Formats and Tools]] page for a general description of DDS, GTF, BMP, TGA, FPO, VPO and JPEG image formats)


The table starts with 0x20 bytes
*ELF (Executable and Linkable Format) See Specifications here: [http://www.sco.com/developers/gabi/latest/ch4.eheader.html ELF Header] and [http://www.openwatcom.com/ftp/devel/docs/elf-64-gen.pdf ELF-64 Object File Format]
*BIN (Binary)
*MNU ?
*PATH (Camera path)
*DUMP ?
*TXT ?
*INI ?
*DDS (Direct Draw Surface)
*GTF (Graphics Texture Format)
*BMP (Bitmap)
*TGA (Targa)
*JPEG (Joint Photographic Experts Group)
*FPO (Fragment Program Objects)
*VPO (Vertex Program Objects)


In all the .qrc files (except icontex.qrc)
*QRC files from firmware version 1.00 up and including 4.50 : http://mir.cr/TSR5E8PM (32078 KB RAR / unpacked size 243425713 bytes)
**MD5 hashes generated with quickSFV http://pastebin.com/raw.php?i=ATvKyMRC
'''Offset(h) 00 01 02 03  04 05 06 07  08 09 0A 0B  0C 0D 0E 0F'''
**CRC32 hashes generated with quickSFV http://pastebin.com/raw.php?i=40h6iMCA
'''00000440'''  <span style="background:#ffff66;">71 72 63 00  66 69 6C 65  2D 74 61 62  6C 65 00 66</span>  qrc file-table f
'''00000450'''  <span style="background:#ffff66;">69 6C 65 00  73 72 63 00  69 64 00</span> <span style="background:#ff6666;">00  00 00 00 00</span>  ile src id......


In icontex.qrc (not in the other .qrc files) [this is similar to a P3T file]
== QRC related tools ==
'''Offset(h) 00 01 02 03  04 05 06 07  08 09 0A 0B  0C 0D 0E 0F'''
'''00000440'''  <span style="background:#ffff66;">71 72 63 00  66 69 6C 65  2D 74 61 62  6C 65 00 66</span>  qrc file-table f
'''00000450'''  <span style="background:#ffff66;">69 6C 65 00  73 72 63 00  69 64 00 73  69 7A 65 00</span>  ile src id size.


*yellow: used bytes
=== ZLIB ===
*red: padding to align to 0x10 bytes
QRC files uses [[Template:Zlib Header|ZLIB]] compression level 9, there are 2 types of QRC files that can be recognized by reading the first 4 bytes either QRCC or QRCF, the next 4 bytes indicates the decompressed size. The first step to extract QRC contents is to remove this 8 bytes at the start of the file. After removed the resulting file is in zlib format


====File Table====
*'''QGL converter''' - This code can decompress a QRCC to QRCF and compress a QRCF to QRCC (it crops/generates the first 8 bytes and manages the zlib decompression/compression) [https://raw.github.com/wargio/ps3tools/master/QGL.c QGL.c]
The files are concatenated in the same order than in the '''File-BIO Table''' & '''Filename Table'''
*'''Zlib GUI v1.0''' - Nice GUI to work with the zlib dll. Download: [http://www.f2065.ru/soft/ZLib_GUI_en.htm official link], or [http://www.psx-place.com/resources/zlib-gui.716/ alternative link]
 
== Tools ==
 
===ZLIB archivers===
QRC files are compressed in ZLIB, and has 8 bytes added at the start of the file. To be able to use a generic zlib archiver is needed to remove this 8 bytes (and is needed to add them in the last step when rebuilding the QRC file)
 
====SimplyZip====
Windows archiver able to extract and create zlib files. http://www.paehl.de/cms/simplyzip
 
*Usage:
**Open the program and click in the tab at top: [External progs] ---> [ZLIB (pack/unpack)]
**A window opens where you can select the file
**Choose [Decompress] or [Compress], then click in [Start]
 
==== QGL converter ====
This tool can decompress a QRCC to QRCF and compress a QRCF to QRCC (it crops/generates the first 8 bytes and manages the zlib decompression/compression)
 
https://raw.github.com/wargio/ps3tools/master/QGL.c (just run make to compile it)


=== QRC Extractors ===
=== QRC Extractors ===
After the ZLIB decompression (needed for all .qrc files except icontex.qrc) the contents can be extracted individually using different tools
After the ZLIB decompression (needed for all .qrc files except icontex.qrc) the contents can be extracted individually using different tools


*Notes
*<s>'''P3Textractor''' - Is posible to use a theme extractor to extract the contents from .qrc files, but first is needed to replace the characters '''/''' by '''_''' of the text strings inside the '''Name table''' with a hexeditor (e.g: the string '''override/black/ICONS.mnu''' needs to be replaced by '''override_black_ICONS.mnu''')</s>. Dont use this method, is too much innacurate and obsolete, is kept here only for historical purposes
**Some of the images are inverted vertically (only .dds?)
*'''CXML decompiler v4 alpha''' - Is a python script to extract the contents of CXML containers (CXML, QRCF, P3TF, RAFO, etc...), and also generates an .xml that represents the original CXML structure. To use it copy the script at bottom of [[CXML Containers]] page and save it to your PC as '''script.py'''. Then run it from the command line and follow the instructions, it requires [https://www.python.org/downloads/ python 2]
 
==== P3Textractor ====
Is posible to use a theme extractor to extract the contents from .qrc files, but first is needed to replace the characters '''/''' by '''_''' of the text strings inside the '''Name table''' with a hexeditor (e.g: the string '''override/black/ICONS.mnu''' needs to be replaced by '''override_black_ICONS.mnu''')
This patching of the text strings can be automated by selecting the whole '''Name table''' in hexeditor and the function "replace string" (replacing the text string '''/''' by '''_''' automatically only in the selected area)
 
P3Textractor manual: http://www.psdevwiki.com/ps3/Themes_(.p3t)#P3Textractor
 
*Notes
**P3Textractor renames .dds file extensions to .gim in the extraction process... so is needed to change back the file extensions manually to .dds for further edits in other programs
**This same trick with P3Textractor can be used with .raf files
 
=== Raw extractors ===
 
==== Generic Tiny little extractor ====
Theses generic tiny little tools extract '''blindly''' (they just don t want to stop) & embedded (and so, output bigger files when it s not) files and are means to be tiny and independent. Extremely Heavily based on an [http://www.ps3devwiki.com/wiki/Talk:Content_Information_Files MPO splitter] by Christian Steinruecken. Formats supported DDS/MNU/JPG/MPO/PNG (and virtually any other by modifying the source code)
 
http://rghost.net/49340892 (include Code-Compile-Credit. Drag and drop your file into them) &
mirror links: http://mir.cr/0R78ED3U


=== QRC Compilers ===
=== QRC Compilers ===
There are no compilers for .qrc files, the commonly used method consist in patching settings values in text strings (or to inject the modded files) with a hexeditor over the original .qrc file
There are no .qrc compilers, the usual method to modify qrc files is by patching the text strings of the .MNU settings or to inject the custom files with a hexeditor overriting the original .qrc file structure


This limits the mods to patches than never exceeeds the size of the original data... in the case of patching an area with an smaller patch is recommended to fill the original "trash" data with zeroes
The patches should never exceeed the size of the original data, incase of patching an predefined area with an smaller patch is recommended to "blank" the original data with zeroes before writing the new data


==== Patching strings in hexeditor ====
The format allows also to "remap" the contained files by modifying the entries in the index to make them point to the offset/size of a different file
Mostly used with the settings inside .mnu files


First extract the files with some of the extractor tool, open the .mnu files in notepad++ to be able to read the settings in a easy way
*'''Patching strings in hexeditor'''
**Mostly used with the settings inside .mnu files
**First extract the files with the CXML decompiler script, look at the main .xml to identify the file names, open the .mnu file you want to modify in notepad++ to be able to read the settings in a easy way
**Select the string you want to modify and copy it
**Open the .qrc file in a hexeditor (after ZLIB decompression if needed) and use the search funtion to locate the string you copyed in the previous step
**Notes
***Most of the settings from .mnu files are repeated several times inside the .qrc file. Be sure to patch the correct .mnu file by comparing the data before or/and after


Select the string you want to modify and "copy" his name
*'''Injecting files in hexeditor'''
**Similar than patching a text string but with a bigger chunk of data


Open the .qrc file in hexeditor (after ZLIB decompression if needed) and use the search funtion to locate the string you copyed previously
== External Links ==
 
*QRC modding by eustolio: http://www.scenespain.net/foro/tutoriales-ps3/tutorial-xmb-custom-cambia-el-color-e-iconos-base-del-xmb/ (2011 may 29)
*Notes
**Corrections: None :)
**Most of the settings inside .mnu files are repeated several times inside the .qrc file because are used in several .mnu files... be sure to patch the correct .mnu file by comparing the rest of the data at his side
*XMB wave modding by glowball: http://www.ps3hax.net/showthread.php?t=25618 (2011 july 1) and http://www.ps3hax.net/showthread.php?t=58673 (2013 july 4)
 
**Corrections:
==== Injecting files in hexeditor ====
***The concept of PAL/NTSC wave is wrong. The wave is common for all PS3 models, resolutions, aspect ratios, and regions. The 8 bytes at the start of the file doesnt has any relationship with PAL/NTSC
Similar than patching a text string, but with a bigger chunk of data
***There is no javascript inside the QRC container, the supposed .js file used in glowball method is a chunk of data containing several .mnu files (included the padding between them)
 
***The idea of an "imaginary" javascript hides the real explain of the structure or what you are patching, making users to dont understand a word and promoting the "blind testing"
== Files inside QRC containers ==
***In the case you want to patch 1 byte... you are patching a huge area instead
*File formats inside QRC containers: (See [[Multimedia Formats and Tools]] page for a general description of DDS, GTF, BMP, TGA, and JPEG image formats)
***Using hardcoded offsets is a safe way to break compatility when the files changes in with newer firmwares and good for softbricking, there is no advise of incompatibility problems
**ELF (Executable and Linkable Format) See Specifications here: [http://www.sco.com/developers/gabi/latest/ch4.eheader.html ELF Header] and [http://www.openwatcom.com/ftp/devel/docs/elf-64-gen.pdf ELF-64 Object File Format]
**BIN (Binary)
**MNU ?
**FPO (Fragment program objects)
**VPO (Vertex program objects)
**PATH (Camera path)
**DUMP ?
**TXT ?
**INI ?
**DDS (Direct Draw Surface)
**GTF (Graphics Texture Format)
**BMP (Bitmap)
**TGA (Targa)
**JPEG (Joint Photographic Experts Group)
 
*ps3 standalone visualizer app released by "Q games" (responsibles of XMB design): http://blog.us.playstation.com/2013/08/08/new-ps3-visualizer-app-from-q-games-out-tuesday/ and http://www.ps3hax.net/2013/08/q-games-releases-new-visualizer-music-app-for-ps3-high/
 
*QRC related modules in '''dev_flashvsh/modules/''':
**qglbase.sprx <--- generic
**qgl_gaia_app.sprx <--- earth animation inside music player
**qgl_canyon_app.sprx <--- abstract animation inside music player
**Indirectly related: raf.sprx <--- generic animations
 
===lines.qrc===
{{lines.qrc}}
 
===icons.qrc & icontex.qrc===
{{icons.qrc}}
{{icontex.qrc}}
 
===rhm.qrc & raf.qrc===
{{rhm.qrc}}
{{raf.qrc}}
 
===canyon.qrc & earth.qrc===
Music player visualizers
*note1: the other music player visualizer available is a modification of the [[XMB]] wave/sparks animation, and is stored inside [[lines.qrc]] using specific .MNU settings in path: '''override/music_1/''')
 
{{canyon.qrc}}
{{earth.qrc}}
 
===store.qrc===
{{store.qrc}}


*Qt Framework
**http://qt-project.org/doc/qt-5/rcc.html
**http://qt-project.org/doc/qt-5/resources.html
**https://qt.gitorious.org/qt/qtbase/source/fb20f9c2da369b07fc50857a90b596ae63f943da:src/tools/rcc
**https://qt.gitorious.org/qt-creator/qt-creator/source/1154a8c6c2bfb223f4239d7902c3755e8a9a1213:src/plugins/resourceeditor/qrceditor




{{File Formats}}<noinclude>[[Category:Main]]</noinclude>
{{File Formats}}<noinclude>[[Category:Main]]</noinclude>

Latest revision as of 12:12, 2 October 2018

Description[edit | edit source]

QRC files (Qt Resources Container) are located inside a QGL folder (Qt Graphics Library) in path: dev_flash/vsh/resource/qgl with names: canyon.qrc, earth.qrc, icons.qrc, icontex.qrc, lines.qrc, raf.qrc, rhm.qrc, and store.qrc. The contents of QRC files are compatible/generated with/by: Qt framework and OpenGL

The internal structure of QRC files can be clasifyed as one of the variants of a group of containers named: CXML Containers

  • QRC related firmware modules in dev_flashvsh/modules/:
    • qglbase.sprx <--- generic
    • qgl_gaia_app.sprx <--- earth animation inside music player
    • qgl_canyon_app.sprx <--- abstract animation inside music player
    • custom_render_plugin.sprx

QRC containers[edit | edit source]

icons.qrc & icontex.qrc[edit | edit source]

icons.qrc
Version
(firmware)
Size
(bytes)
Hash
(MD5)
Contents Feature
(added, removed or changed)
FPO VPO MNU DDS BMP
1.00~1.02 1.288.734 451016CFB126C6D050EC5B19ABB93548
1.10 1.307.885 1B265A359BB59CBE8E3348A2F9B288A1
1.11~1.32 1.317.777 D434CE9BC9AA04C0CDF834DAF82D5A3D
1.50~1.54 1.317.505 C0A0FE2D84FB7A68C96A4FB07401286C
1.60~1.70 697.758 44B0B9B26FBF5FC1EB9045E5349EC58A
1.80~1.82 736.754 9877952A1CCB9A032B8706E21DF084E9
1.90 752.563 835647C1B7C921109912DA92EC557E15
1.92~1.94 752.564 7B056E396B5ECBF2B969A71D31C6EB6E
2.00~2.01 30.170 4C5F6FEAC323C9DF834C91171DB617AD XMB Icons moved to the new container: icontex.qrc to allow Static PlayStation 3 Theme (P3T) support
2.10~2.36 30.318 BAD026CDEA08D3922A2758FC57BC04ED
2.40~2.43 29.711 6F035289BD16E3243C9049F87BF08336
2.50~2.60 29.705 848AEF795AE0A22B95398DC89D294654
2.70~2.80 29.495 8B91CD5744D56A64D26D077CF3DCED3E
3.00~3.21 32.820 EECFD7C3B62ECB2169AEC89F9ABEC3C6
3.30 32.912 3B4BD372A29B2FF36A15A0F6D0CB1482
3.40~3.42 32.229 D33497D781EAAA32A4B98B684C073E7D
3.50~3.74 32.171 97342FFE4E3B427E9C2133C1BB6A3BB4 33 3 22 1 1
4.00~4.01 32.313 653256BA53207780962A33D1E64A7758 Bug ?
4.10~4.89 32.171 97342FFE4E3B427E9C2133C1BB6A3BB4 33 3 22 1 1 Back to 3.50 version
icontex.qrc
Version
(firmware)
Size
(bytes)
Hash
(MD5)
Contents Feature
(added, removed or changed)
DDS (m) DDS (n) DDS (dif)
2.00~2.01 707.152 020BA022EBBC7FA96C77FA01CE351F26 54 54 1 Static PlayStation 3 Theme (P3T) Support
2.10~2.36 740.224 29E7BBBB83E36A7F8E413ABA274BBC33 54 54 1
2.40~2.43 795.968 7F17470EC7ED46AB5582EB76D86F800F 56 56 1
2.50~2.60 908.448 A4F84C8427AA79F9A9CC9664E8D9FABB 62 62 1
2.70~2.76 901.408 9D0D0DB2DB104C661D98E2EF5E1C024E 62 62 1
2.80 903.328 7A48902A0B565931ABB1B01B39BCEE9C 62 62 1
3.00~3.01 1.361.200 3986EF9DBDFA8F134FFFA57D59C45052 No 66 1 Removed the "m" versions, added 4 new icons
3.10~3.30 1.386.352 60EC9CD4B06808C36413D66D0D389035 No 67 1
3.40~3.61 1.426.032 9FBD278929692A82D5102C12922D9B3D No 69 1 New icon for [Video Editor & Uploader] application
3.65~3.74 1.413.264 A23FF4BA6E2E8C3E7FA1C9F10E3484CB No 69 1
4.00~4.89 1.431.936 90146D3F374EC92EBED34535E90CD298 No 70 1

lines.qrc[edit | edit source]

lines.qrc
Version
(firmware)
Size
(bytes)
Hash
(MD5)
Contents Feature
(added, removed or changed)
ELF FPO VPO MNU DDS TGA
1.00~1.02 110.923 FCC5B919D343533737E33C2ED566EF03
1.10~1.32 111.371 36A05C991491A281147B241A1338C833
1.50~1.54 111.177 EFBAF47613D96E620329404AA890A2B9
1.60~1.70 111.108 EB6258CEC5A1448138EC02D6444C4C3D
1.80~1.82 109.685 720DB784E69BF03C26AC38B3F161C49A
1.90 131.246 D7D34772AAE942017993A56AD086E623 Wallpapers ?
1.92~1.94 131.227 15E9DFB14DA89B1887C4C96564545B48
2.00~2.01 131.433 665981A0A66C01A6C96269A24F4765E6 [Colour], [Background] and [Brightness] have been added as options under [Theme Settings].
2.10~2.17 131.602 1BD253021A2B4E3864B026670BF96E89
2.20~2.36 115.785 98DA94D76B0E125A85DF2BBF7423F4E8
2.40~2.43 99.050 80E15C5B1E70799B2B0F0D93B8180B34
2.50~2.60 98.972 9AE4A67090D078055787D195E2E1043E
2.70~2.76 98.633 64966A9E622BCB06B1F0E86D3B32FB01
2.80 98.633 5AEF33A9A6E787CE3126D0CA780DD2DA
3.00~3.01 183.383 94D935914BD2F48519799803897ABED5 XMB icons change colour with the theme depending on the time of day.
Default theme changed to an updated version of Original waves theme. (original theme renamed to Classic).
3.10~3.21 183.798 A757DCE0C90559AAFAB296DE6D5A8AE5
3.30 183.980 3CDBDD7ADC3BB39D3C17B90A81EF7015
3.40~3.42 183.874 7981D59C7EF731DD0C23EB2681A79FBA
3.50 183.980 E102D35341DC27F6EE2DC975C0118C1A
3.55~3.56 183.981 A50F1DC98A9EDACBDB7C0B010B369736
3.60~3.66 183.980 D519ECFAC71AB7437AAA6E1C70BDDE4E
3.70~3.74 183.984 961BCCD9CE30D5E579F3ADB157A89EA6
4.00~4.01 185.047 93687AF9491974446D62F40A0E61BA3F
4.10~4.11 185.115 FEED5630296382AE8B7C9F811A12AB80
4.20~4.31 185.115 405F4E3F76CBD7FD2E99AACD7431DB09
4.40~4.55 185.116 D34D7E2A7DE4502E0454FD787A00A35C 2 47 11 69 24 6
4.60~4.89 185.105 261CD31A2516EF85A6D3B584C9BD02C5 2 47 11 69 24 6

rhm.qrc & raf.qrc[edit | edit source]

rhm.qrc
Version
(firmware)
Size
(bytes)
Hash
(MD5)
Contents Feature
(added, removed or changed)
FPO VPO
1.00~1.32 1.205 D1E7281246EC8A46EB6D368BD4B332BD 3 2
1.50~1.94 1.142 80951055E3973ECCC8BF7E41D6E4BFDD 3 2
2.00~2.01 1.139 98305A00173927E5D947027BFE1CA0DE 3 2 Bug ?
2.10~2.60 1.142 80951055E3973ECCC8BF7E41D6E4BFDD 3 2 Back to 1.50 version
2.70~2.80 1.141 3118E99D109DE85724C54E3C15C17129 3 2
3.00~3.74 2.489 12B8D3A7CDFB3CAF66848704027A44E7 8 3 Added glutils library
4.00~4.89 2.487 99F008FE3C2BACB937BFC925004E6E99 8 3
raf.qrc
Version
(firmware)
Size
(bytes)
Hash
(MD5)
Contents Feature
(added, removed or changed)
BIN FPO VPO
2.70~2.80 5.532 79B5E301CB12BB0AC53B39634FD918A8 1 20 2 coldboot.raf Support
3.00~3.01 5.565 833C5E1D22303EA35AADCC17F25F61AC 1 20 2 Dynamic PlayStation 3 Theme (P3T) Support
3.10~3.21 5.572 07BA8A61785C471242740F915056F0F5 1 20 2
3.30 5.542 FA2388076A217DAFD9A1FD123AF4C847 1 20 2
3.40~3.42 5.550 9566444DFE340CAA9B9B58AD026E9775 1 20 2 Bug ??
3.50~3.74 5.542 FA2388076A217DAFD9A1FD123AF4C847 1 20 2 Back to 3.30 version
4.00~4.01 5.479 B7490AB764B7BC0F9B71A4782C0BAAE7 1 20 2
4.10~4.89 5.457 1FCC497E937FDC6CDAD6A1707C9CD187 1 20 2

canyon.qrc & earth.qrc[edit | edit source]

  • See: canyon.qrc and earth.qrc pages
  • Music player visualizers (a.k.a. 'valley' and 'gaia'), the other music player visualizer available is a modification of the XMB wave/sparks animation, and is stored inside lines.qrc using specific .MNU settings in path: override/music_1/)
canyon.qrc
Version
(firmware)
Size
(bytes)
Hash
(MD5)
Contents Feature
(added, removed or changed)
FPO VPO MNU DDS
1.00~1.02 72.726 0F1B5E3CD6057B71BAF18F3154CD5B8C Music Player Visualizer (abstract)
1.10~1.32 72.912 E2C2A3374AED0964EB33FBB2CD987798
1.50~1.54 72.777 5F68DBE12F25178C3777898CCF442945
1.60~1.70 73.030 084513247EC6C3B6853C8A8DE669FF8C
1.80~1.82 73.464 3F936EDB8865DE2F8895F176496600FB
1.90 73.467 3717F76B98A3EE4C5BFDDC79E746AC53
1.92~1.94 73.459 FEB1A93499BABB48F215580B932E604C
2.00~2.01 73.438 1EAA9921CA2EC20B2B15400F585150E7
2.10~2.36 73.614 7BAAC386D22BEAF59E8818DE8B5D41BF
2.40~2.43 73.897 3F4EC983D33875CCCD3B5A21AD6AB8C2
2.50~2.60 73.884 83FDE07A293C487844306395C3258C82
2.70~2.80 73.847 8A8123CD7FC907C537EFFB346C353F5F
3.00~3.30 73.836 134EEB4B4027256C4F7C5271ED5F1BBA
3.40~3.42 73.794 D346902DC44A5E9B65C28B10D9C98C86
3.50~3.74 73.828 053DA0D0ED6B336E12665D41F0A18387 49 14 348 1
4.00~4.01 73.950 B252D14574F1B72019A1444E68C11639 Bug ?
4.10~4.31 73.840 81335553D8C52C39B84A623FAAC20416 Bugfix fail ?
4.40~4.89 73.828 053DA0D0ED6B336E12665D41F0A18387 49 14 348 1 Back to 3.50 version
earth.qrc
Version
(firmware)
Size
(bytes)
Hash
(MD5)
Contents Feature
(added, removed or changed)
ELF BIN FPO VPO MNU DUMP PATH INI TXT DDS JPG
2.00 400.569 0CF5F811709875C7513EB7EF3D6A4093 Music Player Visualizer (earth) beta/disabled ?
2.01 400.582 F12DBB64403808908A0682CF0CEFEF15 beta/disabled ?
2.10~2.17 2.155.425 F652752780B5C3567872A2540C7E9471 A new visualisation in music playback (Earth Visualization) has been added.
2.20~2.36 2.156.458 CE3FE6DDEE6126CA6EE07E65DA82ADA0
2.40~2.43 2.152.811 CA48FE2B62473602808154B132684922
2.50~2.60 2.152.637 3C289F94B5601135DE9A1E288EB0F30D
2.70~2.76 2.144.961 7953F2CF91EDD2BB6409F6DE7B48B704
2.80 2.145.029 EAFDAC5D044796B22606E06B86E85638
3.00~3.01 2.148.260 C6E70369FA95B0CA107989524C30BF6E
3.10~3.21 2.148.378 6CDF7D52C5ADAC9B048E9D0C45A19AA7
3.30 2.148.553 7B09A088BF169AB486FEDB6C569BACFB
3.40~3.42 2.148.711 43475D5E4B7E8FB223061A3BAFFC8213
3.50 2.148.512 0DB0C5118B06F7D3C8B4C73AD7B0E443
3.55~3.56 2.148.509 136A3DFDE7C60A34CFF3D4A7BBDCCDE4
3.60~3.66 2.148.514 AA7A02DFCA99E167DA347933B95B7DF4
3.70~3.74 2.148.514 5CF1F3694ECDBB75A6461FD6C85A5971
4.00~4.01 2.147.749 0A7C4A327CCD63614E55686FBE6FCCBA
4.10~4.11 2.147.272 A05BCDD9504D7111FBD9810D25217D3F
4.20~4.31 2.147.272 30002327D89E49CE2760881444A522C1
4.40~4.89 2.147.218 BEDFE56680ED40807C53E61603C76E1D 1 11 49 16 381 3 33 60 3 2 72

store.qrc[edit | edit source]

store.qrc
Version
(firmware)
Size
(bytes)
Hash
(MD5)
Contents Feature
(added, removed or changed)
DDS FPO GTF MNU VPO
2.50~2.53 195.383 5E7AF90288C53BEBF729FF8182471C7F 3 16 No 6 8 The PlayStation Network Sign-Up and Account Management utilities have been redesigned. ?
2.60 291.798 0E2298E39927AE2C632B7544E99262FD 5 41 1 20 13
2.70~2.80 291.369 301B589E1D330FC6148A9C50F1763A39
3.00~3.21 291.386 B105F15C8C7A4337F80C3AA52469581C
3.30 291.393 20E92F5465AD6FC2AADF7D04BDBA668F
3.40~3.42 291.254 929D93182B08E41ED01AC45E59513DEC Bug ?
3.50~3.56 291.393 20E92F5465AD6FC2AADF7D04BDBA668F Back to 3.30 version
3.60~3.74 291.241 63D551B86EC752837E9824A2E4E4FECF
4.00~4.01 291.317 F7322AEC80109A0B79F2691B0049E561
4.10~4.26 291.210 F89887A9CEF9B8ED942DF6D8C5AC313D
4.30~4.31 291.238 BD559BD848D4116EF073B49FF0C2DF4F
4.40~4.89 291.224 5E551FE46DCA11258A29031128E8D998 5 41 1 20 13

QRC contents[edit | edit source]

See Multimedia Formats and Tools page for a general description of DDS, GTF, BMP, TGA, FPO, VPO and JPEG image formats)

  • ELF (Executable and Linkable Format) See Specifications here: ELF Header and ELF-64 Object File Format
  • BIN (Binary)
  • MNU ?
  • PATH (Camera path)
  • DUMP ?
  • TXT ?
  • INI ?
  • DDS (Direct Draw Surface)
  • GTF (Graphics Texture Format)
  • BMP (Bitmap)
  • TGA (Targa)
  • JPEG (Joint Photographic Experts Group)
  • FPO (Fragment Program Objects)
  • VPO (Vertex Program Objects)

QRC related tools[edit | edit source]

ZLIB[edit | edit source]

QRC files uses ZLIB compression level 9, there are 2 types of QRC files that can be recognized by reading the first 4 bytes either QRCC or QRCF, the next 4 bytes indicates the decompressed size. The first step to extract QRC contents is to remove this 8 bytes at the start of the file. After removed the resulting file is in zlib format

  • QGL converter - This code can decompress a QRCC to QRCF and compress a QRCF to QRCC (it crops/generates the first 8 bytes and manages the zlib decompression/compression) QGL.c
  • Zlib GUI v1.0 - Nice GUI to work with the zlib dll. Download: official link, or alternative link

QRC Extractors[edit | edit source]

After the ZLIB decompression (needed for all .qrc files except icontex.qrc) the contents can be extracted individually using different tools

  • P3Textractor - Is posible to use a theme extractor to extract the contents from .qrc files, but first is needed to replace the characters / by _ of the text strings inside the Name table with a hexeditor (e.g: the string override/black/ICONS.mnu needs to be replaced by override_black_ICONS.mnu). Dont use this method, is too much innacurate and obsolete, is kept here only for historical purposes
  • CXML decompiler v4 alpha - Is a python script to extract the contents of CXML containers (CXML, QRCF, P3TF, RAFO, etc...), and also generates an .xml that represents the original CXML structure. To use it copy the script at bottom of CXML Containers page and save it to your PC as script.py. Then run it from the command line and follow the instructions, it requires python 2

QRC Compilers[edit | edit source]

There are no .qrc compilers, the usual method to modify qrc files is by patching the text strings of the .MNU settings or to inject the custom files with a hexeditor overriting the original .qrc file structure

The patches should never exceeed the size of the original data, incase of patching an predefined area with an smaller patch is recommended to "blank" the original data with zeroes before writing the new data

The format allows also to "remap" the contained files by modifying the entries in the index to make them point to the offset/size of a different file

  • Patching strings in hexeditor
    • Mostly used with the settings inside .mnu files
    • First extract the files with the CXML decompiler script, look at the main .xml to identify the file names, open the .mnu file you want to modify in notepad++ to be able to read the settings in a easy way
    • Select the string you want to modify and copy it
    • Open the .qrc file in a hexeditor (after ZLIB decompression if needed) and use the search funtion to locate the string you copyed in the previous step
    • Notes
      • Most of the settings from .mnu files are repeated several times inside the .qrc file. Be sure to patch the correct .mnu file by comparing the data before or/and after
  • Injecting files in hexeditor
    • Similar than patching a text string but with a bigger chunk of data

External Links[edit | edit source]

  • QRC modding by eustolio: http://www.scenespain.net/foro/tutoriales-ps3/tutorial-xmb-custom-cambia-el-color-e-iconos-base-del-xmb/ (2011 may 29)
    • Corrections: None :)
  • XMB wave modding by glowball: http://www.ps3hax.net/showthread.php?t=25618 (2011 july 1) and http://www.ps3hax.net/showthread.php?t=58673 (2013 july 4)
    • Corrections:
      • The concept of PAL/NTSC wave is wrong. The wave is common for all PS3 models, resolutions, aspect ratios, and regions. The 8 bytes at the start of the file doesnt has any relationship with PAL/NTSC
      • There is no javascript inside the QRC container, the supposed .js file used in glowball method is a chunk of data containing several .mnu files (included the padding between them)
      • The idea of an "imaginary" javascript hides the real explain of the structure or what you are patching, making users to dont understand a word and promoting the "blind testing"
      • In the case you want to patch 1 byte... you are patching a huge area instead
      • Using hardcoded offsets is a safe way to break compatility when the files changes in with newer firmwares and good for softbricking, there is no advise of incompatibility problems