Editing Qt Resource Container (QRC)
Jump to navigation
Jump to search
The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then publish the changes below to finish undoing the edit.
Latest revision | Your text | ||
Line 1: | Line 1: | ||
location: /dev_flash/vsh/resource/qgl | |||
== General format == | |||
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] | |||
*QRC | === QRCC === | ||
QRCC ('''Q'''t '''R'''esources '''C'''ontainer '''C'''ompressed) | |||
** | |||
QRC file ZLIB Compressed level 9. | |||
*Example from 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:#ff6666;">51 52 43 43</span> <span style="background:#6666ff;">00 00 28 00</span> <span style="background:#00ff00;">78 DA</span> QRCC..(.xÚ | |||
{| class="wikitable sortable" | |||
|- | |||
| style="background-color:#515243; color:#FFFFFF;" |'''Name''' | |||
| style="background-color:#515243; color:#FFFFFF;" |'''Offset''' | |||
| style="background-color:#515243; color:#FFFFFF;" |'''Size''' | |||
| style="background-color:#515243; color:#FFFFFF;" |'''Example''' | |||
| style="background-color:#515243; color:#FFFFFF;" |'''Remark''' | |||
|- | |||
| <span style="background:#ff6666;">Magic header || 0x00 || 0x04 || 51 52 43 43 || 'QRCC' | |||
|- | |||
| <span style="background:#6666ff;">File size decompressed (QRCF) || 0x04 || 0x04 || 00 00 28 00 || | |||
|- | |||
| <span style="background:#00FF00;">ZLIB header || 0x08 || 0x02 || 78 DA || default/max level 9 | |||
|- | |||
|} | |||
=== QRCF === | |||
QRCF ('''Q'''t '''R'''esources '''C'''ontainer '''F'''lat?) | |||
QRC "container" with an structure similar than themes .p3t | |||
====Main Header==== | |||
*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:#ff6666;">51 52 43 46 00 00 01 10 00 00 00 40 00 00 02 CC</span> QRCF.......@..%| | |||
'''00000010''' <span style="background:#66ff66;">00 00 03 10 00 00 01 2B</span> <span style="background:#ffff66;">00 00 04 40 00 00 00 1B</span> ..%À......9Ð.... | |||
'''00000020''' <span style="background:#ffff66;">00 00 04 60</span> 00 00 00 00 <span style="background:#ffff66;">00 00 04 60</span> 00 00 00 00 ..9ð......9ð.... | |||
'''00000030''' <span style="background:#ffff66;">00 00 04 60 00 00 23 A0</span> 00 00 00 00 00 00 00 00..9ð..@p........ | |||
{| class="wikitable sortable" | |||
|- | |||
| style="background-color:#515243; color:#FFFFFF;" |'''Name''' | |||
| style="background-color:#515243; color:#FFFFFF;" |'''Offset''' | |||
| style="background-color:#515243; color:#FFFFFF;" |'''Size''' | |||
| style="background-color:#515243; color:#FFFFFF;" |'''Example''' | |||
| style="background-color:#515243; color:#FFFFFF;" |'''Remark''' | |||
|- | |||
| <span style="background:#ff6666;">Magic || 0x00 || 0x04 || 51 52 43 46 || 'QRCF' | |||
|- | |||
| <span style="background:#ff6666;">Version || 0x04 || 0x04 || 00 00 01 10 || | |||
|- | |||
| <span style="background:#ff6666;">File-BIO table start offset || 0x08 || 0x04 || 00 00 00 40 || | |||
|- | |||
| <span style="background:#ff6666;">File-BIO table size || 0x0C || 0x04 || 00 00 02 CC || | |||
|- | |||
| <span style="background:#66ff66;">Filename table start offset || 0x10 || 0x04 || 00 00 03 10 || | |||
|- | |||
| <span style="background:#66ff66;">Filename table size || 0x14 || 0x04 || 00 00 01 2B || without the padding at the end | |||
|- | |||
| <span style="background:#ffff66;">File main info start offset || 0x18 || 0x04 || 00 00 04 40 || | |||
|- | |||
| <span style="background:#ffff66;">File main info size || 0x1C || 0x04 || 00 00 00 1B || without the padding at the end | |||
|- | |||
| <span style="background:#ffff66;">File table start offset || 0x20 || 0x04 || 00 00 04 60 || | |||
|- | |||
| ''Not used'' || 0x24 || 0x04 || 00 00 00 00 || | |||
|- | |||
| <span style="background:#ffff66;">File table start offset || 0x28 || 0x04 || 00 00 04 60 || | |||
|- | |||
| ''Not used'' || 0x2C || 0x04 || 00 00 00 00 || | |||
|- | |||
| <span style="background:#ffff66;">File table start offset || 0x30 || 0x04 || 00 00 04 60 || | |||
|- | |||
| <span style="background:#ffff66;">File table size || 0x34 || 0x04 || 00 00 23 A0 || | |||
|- | |||
| ''Not used'' || 0x38 || 0x04 || 00 00 00 00 || | |||
|- | |||
| ''Not used'' || 0x3C || 0x04 || 00 00 00 00 || | |||
|- | |||
|} | |||
====File-BIO Table==== | |||
Default entry size is 49 bytes (offset 0x30), the last entry is a bit special because is not linked to a file. The '''File-BIO 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 File-BIO 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 a variable (need more analyzing). 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 '''Filename Table'''. Next 4 bytes are a variable (need more analyzing). Last 16 bytes are compiled of 1x 8 bytes and 2x 4 bytes which are alwys 0xFFFFFFFFFFFFFFFF, 0x00000014 & 0x00000006. | |||
* excluding icontext.qrc | |||
====Structure File-BIO Table==== | |||
Offset (without the 0x40 header in all qrc files) | |||
http://666kb.com/i/cib5c7q4y7rpcx9x1.gif | |||
{| class="wikitable" | |||
| style="background-color:#515243; color:#FFFFFF;" |'''Offset''' | |||
| style="background-color:#515243; color:#FFFFFF;" |'''Size''' | |||
| style="background-color:#515243; color:#FFFFFF;" |'''Example''' | |||
| style="background-color:#515243; color:#FFFFFF;" |'''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 file-bio table | |||
|- | |||
| 0x34 || 0x04 || xx xx xx xx || size body file-bio 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 file-bio 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 | |||
|- | |||
| 0x60 || 0x04 || 00 00 01 50 || size of first file | |||
|- | |||
| 0x64 || 0x04 || 00 00 00 18 || similar all qrc files | |||
|- | |||
| 0x68 || 0x04 || 00 00 00 07 || similar all qrc files | |||
|- | |||
| 0x6C || 0x08 || 00 00 00 00 00 00 00 00 || similar all qrc files | |||
|- | |||
| 0x74 || 0x04 || 00 00 00 0F || 00 00 00 1B on icontex.qrc | |||
|- | |||
| 0x78 || 0x04 || 00 00 00 02 || 00 00 00 01 on icontex.qrc | |||
|- | |||
| 0x7C || 0x04 || 00 00 00 1C || 00 01 55 D4 on icontex.qrc (size of .dds uncompressed) | |||
|- | |||
| 0x80 || 0x04 || 00 00 00 38 || Filename pointer of the first file for the Filename Table | |||
|- | |||
| 0x84 || 0x04 || 00 00 00 B0 || start offset of the next entry for the Filename pointer within the File-BIO Table | |||
|- | |||
|} | |||
====Filename Table==== | |||
Each entry is composed by: | |||
{| class="wikitable" | |||
|- | |||
! Offset !! Length !! Example !! Name !! Notes | |||
|- | |||
| 0x0 || 0x4 || 00000038 || '''File-BIO Table entry offset''' || Same value than in the '''File-BIO 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 | |||
== | ====File Main Info==== | ||
The table starts with 0x20 bytes | |||
In all the .qrc files (except icontex.qrc) | |||
'''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</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] | |||
'''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 | |||
* | *red: padding to align to 0x10 bytes | ||
* | |||
After this, the files are concatenated in the same order than in the '''File-BIO Table''' & '''Filename Table''' | |||
== | == 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 | ||
**Some of the images are inverted vertically (only .dds?) | |||
==== 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 .qrc | 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 | ||
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 | |||
==== Patching strings in hexeditor ==== | |||
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 | |||
Select the string you want to modify and "copy" his name | |||
Open the .qrc file in hexeditor (after ZLIB decompression if needed) and use the search funtion to locate the string you copyed previously | |||
*Notes | |||
**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 | |||
==== Injecting files in hexeditor ==== | |||
Similar than patching a text string, but with a bigger chunk of data | |||
== Files inside QRC containers == | |||
*File formats inside QRC containers: (See [[Multimedia Formats and Tools]] page for a general description of DDS, GTF, BMP, TGA, and JPEG image formats) | |||
**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}} | |||
{{File Formats}}<noinclude>[[Category:Main]]</noinclude> | {{File Formats}}<noinclude>[[Category:Main]]</noinclude> |