Editing Talk:Resource Container (RCO)

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 1: Line 1:
=Unknowns=


==RCO versions (aka minFirmwareVer in rcomage)==
=RCO versions=
All RCO files contains a version number, the version increases with bigger firmwares but not for every firmware and is not directly associated with it. The same versioning method is used in PSP and PS3 RCO's
All RCO files contains a version number, the version increases with bigger firmwares but not for every firmware and is not directly associated with it. The same versioning method is used in PSP and PS3 RCO's


It seems all the RCO's of a specific firmware shares the same version (verifyed for firmware 4.76) and seems to be the version of the "rco set", or the version of the "rco tool" used to compile the whole "rco set". RCOmage v1.1.1 (latest stable) identifyes the version with a list of hardcoded values
It seems all the RCO's of a specific firmware shares the same version (verifyed for firmware 4.76) and seems to be the version of the "rco set", or the version of the "rco tool" used to compile the whole "rco set". RCOmage v1.1.1 (latest stable) identifyes the version with a list of hardcoded values


{{Boxcode|code=<syntaxhighlight lang="c">
{{Boxcode|content=<syntaxhighlight lang="c">
switch(rco->verId) {
switch(rco->verId) {
case 0x70: fputs("1.0", fp); break;
case 0x70: fputs("1.0", fp); break;
Line 24: Line 23:


Example... sysconf_plugin.rco from PS3 firmware 2.00 with version 0x106
Example... sysconf_plugin.rco from PS3 firmware 2.00 with version 0x106
{{Boxcode|code=<syntaxhighlight lang="xml">
{{Boxcode|content=<syntaxhighlight lang="xml">
<RcoFile UMDFlag="0" rcomageXmlVer="1.1" type="ps3" minFirmwareVer="unknownId0x106">
<RcoFile UMDFlag="0" rcomageXmlVer="1.1" type="ps3" minFirmwareVer="unknownId0x106">
</syntaxhighlight>}}
</syntaxhighlight>}}
==unknownByte==
In the xml representation of the .rco structure... every image inside the imagetree uses an unknown attribute named '''unknownByte'''. Is an attribute related with the image format and is equal to 0 in most of the PS3 images (very rarelly used)
*After searching in ALL the images contained inside ALL .rco files from firmware 4.76... there is a total of 72 images using '''unknownByte="1"''' (and 3098 images using '''unknownByte="0"''' for a total of 3170 images inside .rco's)
**7 images inside [[eula_net_plugin]].rco
**34 images inside [[newstore_plugin]].rco
**29 images inside [[regcam_plugin]].rco
**2 images inside [[system_plugin]].rco
from [[system_plugin]].rco
{{Boxcode|code=<syntaxhighlight lang="xml">
<Image name="tex_optionmenu_bg" src=".\RCO 476 ofw\system_plugin\Images\tex_optionmenu_bg.gim" format="gim" compression="zlib" unknownByte="1" />
<Image name="tex_optionmenu_base" src=".\RCO 476 ofw\system_plugin\Images\tex_optionmenu_base.gim" format="gim" compression="zlib" unknownByte="1" />
</syntaxhighlight>}}
*The 2 .gim files found using '''unknownByte="1"''' has some things in common:
**The size of both .gim file is exactlly 452KB (463.232 bytes)
**The resolution of both images in pixels is 512x206
**The first 0x80 bytes of the header in both is exactlly the same (see example below)
unknownByte .gim header example
Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
00000000  2E 47 49 4D 31 2E 30 30 00 50 53 50 00 00 00 00  .GIM1.00.PSP....
00000010  00 02 00 00 00 07 11 70 00 00 00 10 00 00 00 10  .......p........
00000020  00 03 00 00 00 07 11 60 00 00 00 10 00 00 00 10  .......`........
00000030  00 04 00 00 00 07 11 50 00 07 11 50 00 00 00 10  .......P...P....
00000040  00 30 00 00 00 03 00 00 02 18 00 D8 00 20 00 10  .0.........Ø. ..
00000050  00 01 00 02 00 00 00 00 00 00 00 30 00 00 00 40  ...........0...@
00000060  00 07 11 40 00 00 00 00 00 01 00 01 00 03 00 01  ...@............
00000070  00 00 00 40 00 00 00 00 00 00 00 00 00 00 00 00  ...@............
Is not specific for .GIM image format because other image formats uses it too, here are a couple of examples from newstore_plugin.rco where is used with .JPG and .PNG
{{Boxcode|code=<syntaxhighlight lang="xml">
<Image name="BackGround" src=".\RCO 476 ofw\newstore_plugin\Images\BackGround.jpg" format="jpg" compression="uncompressed" unknownByte="1" />
<Image name="ScrollButtonRich" src=".\RCO 476 ofw mod 5\newstore_plugin\Images\ScrollButtonRich.png" format="png" compression="uncompressed" unknownByte="1" />
</syntaxhighlight>}}
Is specific for PS3 (not used on PSP) as can be seen in the comments of the source code of rcomage [https://github.com/zingaburga/RCOMage/blob/master/src/rcofile.h here] in line number 188
PS3 RCOs seem to have this extra element - probably something to do with planes/frames??
==UMDFlag==
This attribute was named UMDFlag unofficially because it was found used in the .rco files contained inside PSP UMD discs only
The name seems not accurate enought (because PS3 cant read UMD discs) so maybe is something more generic like "disc media", though never has been found a PS3 disc containing .rco's and the '''HYBRID_FLAG''' used in the bluray contents descriptor file [[PS3_DISC.SFB]] for "music bluray" and "photo bluray" are completlly speculative
*Speculation. Maybe is::
**0 = system rco
**1 = external rco (disc media, etc)


=Hashreports=
=Hashreports=
==PS3 rco's all versions==
==PS3 all versions==
all OFW 1.00-4.75 hashes: https://www.mirrorcreator.com/files/7KCMQKWQ/RCO-hashreport.7z_links <--- please someone convert this in a "human readable wiki table"
all OFW 1.00-4.75 hashes: https://www.mirrorcreator.com/files/7KCMQKWQ/RCO-hashreport.7z_links <--- please someone convert this in a "human readable wiki table"


==PSP rco's==
==PSP 6.61==
*PSP 6.60 and 6.61 firmware contains 63 .rco files (same files for both firmwares). Two of them are specific for PSPgo model (bluetooth_plugin.rco, slide_plugin.rco)
*PSP 6.60 and 6.61 firmware contains 63 .rco files (same files for both firmwares). Two of them are specific for PSPgo model (bluetooth_plugin.rco, slide_plugin.rco)
*Only 10 of them are compresed with ZLIB (dd_helper.rco, dnas_plugin.rco, htmlviewer_plugin.rco, lftv_rmc_univer3in1.rco, lftv_rmc_univer3in1_jp.rco, lftv_rmc_univertuner.rco, lftv_rmc_univertuner_jp.rco, lftv_tuner_jp_jp.rco, lftv_tuner_us_en.rco, oneseg_plugin.rco). All the others are compressed with RLZ (and RLZ decompression is not supported by rcomage, is needed to use Resurssiklunssi v0.3 to rebuild them)
*Only 10 of them are compresed with ZLIB (dd_helper.rco, dnas_plugin.rco, htmlviewer_plugin.rco, lftv_rmc_univer3in1.rco, lftv_rmc_univer3in1_jp.rco, lftv_rmc_univertuner.rco, lftv_rmc_univertuner_jp.rco, lftv_tuner_jp_jp.rco, lftv_tuner_us_en.rco, oneseg_plugin.rco). All the others are compressed with RLZ (and RLZ decompression is not supported by rcomage, is needed to use Resurssiklunssi v0.3 to rebuild them)
Line 91: Line 40:
***The converted files will have '''minFirmwareVer="2.6"''' (the original value is lost in the conversion)
***The converted files will have '''minFirmwareVer="2.6"''' (the original value is lost in the conversion)


{{Boxcode|width=auto|float=left|title=PSP 6.61 official rco's|code=<syntaxhighlight lang="bash">
{{Boxcode|content=<syntaxhighlight lang="c">
; Generated by QuickSFV v2.36 on 2015-12-09 at 04:49:59
; Generated by QuickSFV v2.36 on 2015-12-09 at 04:49:59
; http://www.QuickSFV.org
; http://www.QuickSFV.org
Line 219: Line 168:
</syntaxhighlight>}}
</syntaxhighlight>}}


{{Boxcode|width=auto|float=left|title=PSP 6.60 and 6.61 firmware. RCO hashes after resurssiklunssi rebuild (cross option)|code=<syntaxhighlight lang="bash">
*PSP 6.60 and 6.61 firmware. RCO hashes after resurssiklunssi rebuild (cross option)
{{Boxcode|content=<syntaxhighlight lang="c">
; Generated by QuickSFV v2.36 on 2015-12-13 at 03:40:27
; Generated by QuickSFV v2.36 on 2015-12-13 at 03:40:27
; http://www.QuickSFV.org
; http://www.QuickSFV.org
Line 349: Line 299:
4fd833dc230d78d2827ad85f58685aa6 *resource\video_plugin_videotoolbar.rco
4fd833dc230d78d2827ad85f58685aa6 *resource\video_plugin_videotoolbar.rco
5b1e65248b962b983cf0553f662c2050 *resource\visualizer_plugin.rco
5b1e65248b962b983cf0553f662c2050 *resource\visualizer_plugin.rco
</syntaxhighlight>}}{{clear}}
</syntaxhighlight>}}


*PSP firmware 1.00 contains only 21 .rco files (all them uses ZLIB, none of them uses RLZ)
*PSP firmware 1.00 contains only 21 .rco files (all them uses ZLIB, none of them uses RLZ)
{{Boxcode|width=auto|float=left|title=PSP 1.00 official rco's|code=<syntaxhighlight lang="bash">
{{Boxcode|content=<syntaxhighlight lang="c">
; Generated by QuickSFV v2.36 on 2015-12-13 at 03:51:28
; Generated by QuickSFV v2.36 on 2015-12-13 at 03:51:28
; http://www.QuickSFV.org
; http://www.QuickSFV.org
Line 398: Line 348:
ef87b1df11ab6b00986b1ce6395066c4 *resource\video_plugin.rco
ef87b1df11ab6b00986b1ce6395066c4 *resource\video_plugin.rco
87d878f00d9355b873adcac6f79927f6 *resource\video_plugin_videotoolbar.rco
87d878f00d9355b873adcac6f79927f6 *resource\video_plugin_videotoolbar.rco
</syntaxhighlight>}}{{clear}}
</syntaxhighlight>}}


=Examples (rcomage builds)=
=Examples (rcomage builds)=
Line 409: Line 359:


The .xml below is the RCOXML source file used to create the .rco. The file '''image_test.gim''' is a dummy of 8 bytes filed with 8888888888888888
The .xml below is the RCOXML source file used to create the .rco. The file '''image_test.gim''' is a dummy of 8 bytes filed with 8888888888888888
{{Boxcode|code=<syntaxhighlight lang="xml">
{{Boxcode|content=<syntaxhighlight lang="xml">
<RcoFile UMDFlag="0" rcomageXmlVer="1.1" type="ps3" minFirmwareVer="unknownId0x130">
<RcoFile UMDFlag="0" rcomageXmlVer="1.1" type="ps3" minFirmwareVer="unknownId0x130">
<MainTree name="test">
<MainTree name="test">
Line 687: Line 637:
**<span style="background:#7777ff;">00 00 00 F4</span> the offset where the image data starts, because the area before the image data has been compressed his position has been displaced
**<span style="background:#7777ff;">00 00 00 F4</span> the offset where the image data starts, because the area before the image data has been compressed his position has been displaced
**<span style="background:#ffff00;">00 00 00 44</span> <span style="background:#ffff00;">00 00 00 A4</span> <span style="background:#ffff00;">00 00 00 00</span> the info about the compressed area that comes next (composed by: lenPacked, lenUnpacked, and lenLongestText)
**<span style="background:#ffff00;">00 00 00 44</span> <span style="background:#ffff00;">00 00 00 A4</span> <span style="background:#ffff00;">00 00 00 00</span> the info about the compressed area that comes next (composed by: lenPacked, lenUnpacked, and lenLongestText)
**<span style="background:#ff00ff;">78 DA ...</span> the compressed area itself, includes the whole TOC, the pointers to the TOC, and all the strings tables (languages, labels, and events)
**<span style="background:#ff00ff;">78 DA ...</span> the compressed area itself, includes the whole TOC, the pointers/references to the TOC, and all the strings tables (languages, labels, and events)


==ImageTree with 2 images==
==ImageTree with 2 images==
This example is intended to replace the previous one (but by now i dont want to delete the previous one). It can help to see how the offsets are cummulated and the optional paddings to align to boundary
This example is intended to replace the previous one (but by now i dont want to delete the previous one). It can help to see how the offsets are cummulated and the optional paddings to align to boundary
The .xml below is the RCOXML source file used to create the .rco. The file '''image2_test.gim''' is a dummy of 2 bytes filed with 2222 and the file '''image3_test.gim''' is a dummy of 3 bytes filed with 333333
The .xml below is the RCOXML source file used to create the .rco. The file '''image2_test.gim''' is a dummy of 2 bytes filed with 2222 and the file '''image3_test.gim''' is a dummy of 3 bytes filed with 333333
{{Boxcode|code=<syntaxhighlight lang="xml">
{{Boxcode|content=<syntaxhighlight lang="xml">
<RcoFile UMDFlag="0" rcomageXmlVer="1.1" type="ps3" minFirmwareVer="unknownId0x130">
<RcoFile UMDFlag="0" rcomageXmlVer="1.1" type="ps3" minFirmwareVer="unknownId0x130">
<MainTree name="test">
<MainTree name="test">
Line 999: Line 949:
|}
|}


=Examples (official builds)=
==ObjectTree with 1 page and 1 plane==
This ones should be considered "perfect" rco structures, even if there is a weird detail (initially a nonsense, a sony bug, or details not managed correctlly by rcomage)... it needs to be considered a "specification" of that rco version. See also [[Talk:Rcomage]]
This is a basic example of how objecttree and animationtree (not files) stores his values inside the container. It can help to understand all the values related with the hierarchy relationship between parents/childrens/brothers, etc...


==PS3 1.02 xai_plugin.rco==
{{Boxcode|content=<syntaxhighlight lang="xml">
 
<RcoFile UMDFlag="0" rcomageXmlVer="1.1" type="ps3" minFirmwareVer="unknownId0x130">
 
<MainTree name="test">
{{Boxcode|code=<syntaxhighlight lang="xml">
<RcoFile UMDFlag="0" rcomageXmlVer="1.1" type="ps3" minFirmwareVer="unknownId0x97">
<MainTree name="sample">
<ObjectTree>
<ObjectTree>
<Page name="root" pageMode="0x1101" pageOnInit="nothing" pageOnCancel="nothing" pageOnContext="nothing" pageOnActivate="nothing">
<Page name="page_test" pageMode="0x111" pageOnInit="nothing" pageOnCancel="nothing" pageOnContext="nothing" pageOnActivate="nothing">
<Plane name="application" positionX="0" positionY="0" positionZ="0" colorScaleR="1" colorScaleG="1" colorScaleB="1" colorScaleA="1" sizeX="0" sizeY="0" sizeZ="0" sizeScaleX="1" sizeScaleY="1" sizeScaleZ="1" anchorMode="0x0" onInit="nothing" positionOverrideX="0x0" positionOverrideY="0x0" positionOverrideZ="0x0" sizeOverrideX="0x0" sizeOverrideY="0x0" sizeOverrideZ="0x0" planeImage="nothing" planeResizeMode="0x0"></Plane>
<Plane name="plane_test" positionX="1" positionY="2" positionZ="3" colorScaleR="4" colorScaleG="5" colorScaleB="6" colorScaleA="7" sizeX="8" sizeY="9" sizeZ="10" sizeScaleX="11" sizeScaleY="12" sizeScaleZ="13" anchorMode="0x3" onInit="nothing" positionOverrideX="0x10" positionOverrideY="0x20" positionOverrideZ="0x30" sizeOverrideX="0x40" sizeOverrideY="0x50" sizeOverrideZ="0x60" planeImage="nothing" planeResizeMode="0x6"></Plane>
</Page>
</Page>
</ObjectTree>
</ObjectTree>
Line 1,017: Line 964:
</syntaxhighlight>}}
</syntaxhighlight>}}


MD5: F3835BBD0E2448EB6AD5C3FA02906346
When compiled MD5: 8950DE68C7DD9BA5DD96F7F29D86EF17
  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  46 52 50 00 00 00 00 97 00 00 00 00 00 00 00 00  FRP............
  00000000  46 52 50 00 00 00 01 30 00 00 00 00 00 00 00 00  FRP....0........
  00000010  00 00 00 A4 FF FF FF FF FF FF FF FF FF FF FF FF  ...¤ÿÿÿÿÿÿÿÿÿÿÿÿ
  00000010  00 00 00 A4 FF FF FF FF FF FF FF FF FF FF FF FF  ...¤ÿÿÿÿÿÿÿÿÿÿÿÿ
  00000020  FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
  00000020  FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
  00000030  00 00 00 CC FF FF FF FF 00 00 01 D4 00 00 00 00  ...Ìÿÿÿÿ...Ô....
  00000030  00 00 00 CC FF FF FF FF 00 00 01 D4 00 00 00 00  ...Ìÿÿÿÿ...Ô....
  00000040  00 00 01 D4 00 00 00 1C 00 00 01 F0 00 00 00 04  ...Ô..........
  00000040  00 00 01 D4 00 00 00 20 00 00 01 F4 00 00 00 04  ...Ô... ...ô....
  00000050  FF FF FF FF 00 00 00 00 FF FF FF FF 00 00 00 00  ÿÿÿÿ....ÿÿÿÿ....
  00000050  FF FF FF FF 00 00 00 00 FF FF FF FF 00 00 00 00  ÿÿÿÿ....ÿÿÿÿ....
  00000060  FF FF FF FF 00 00 00 00 FF FF FF FF 00 00 00 00  ÿÿÿÿ....ÿÿÿÿ....
  00000060  FF FF FF FF 00 00 00 00 FF FF FF FF 00 00 00 00  ÿÿÿÿ....ÿÿÿÿ....
Line 1,039: Line 984:
  000000F0  00 00 00 00 08 01 00 00 00 00 00 08 00 00 00 28  ...............(
  000000F0  00 00 00 00 08 01 00 00 00 00 00 08 00 00 00 28  ...............(
  00000100  00 00 00 4C 00 00 00 01 00 00 00 00 00 00 00 00  ...L............
  00000100  00 00 00 4C 00 00 00 01 00 00 00 00 00 00 00 00  ...L............
  00000110  00 00 00 28 00 00 00 00 00 00 00 00 01 11 00 00  ...(............
  00000110  00 00 00 28 00 00 00 00 00 00 00 00 11 01 00 00  ...(............
  00000120  FF FF 00 00 FF FF FF FF FF FF 00 00 FF FF FF FF  ÿÿ..ÿÿÿÿÿÿ..ÿÿÿÿ
  00000120  FF FF 00 00 FF FF FF FF FF FF 00 00 FF FF FF FF  ÿÿ..ÿÿÿÿÿÿ..ÿÿÿÿ
  00000130  FF FF 00 00 FF FF FF FF FF FF 00 00 FF FF FF FF  ÿÿ..ÿÿÿÿÿÿ..ÿÿÿÿ
  00000130  FF FF 00 00 FF FF FF FF FF FF 00 00 FF FF FF FF  ÿÿ..ÿÿÿÿÿÿ..ÿÿÿÿ
  00000140  08 02 00 00 00 00 00 10 00 00 00 28 00 00 00 00  ...........(....
  00000140  08 02 00 00 00 00 00 14 00 00 00 28 00 00 00 00  ...........(....
  00000150  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 4C  ...............L
  00000150  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 4C  ...............L
  00000160  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
  00000160  00 00 00 00 00 00 00 00 3F 80 00 00 40 00 00 00  ........?€..@...
  00000170  00 00 00 00 3F 80 00 00 3F 80 00 00 3F 80 00 00  ....?€..?€..?€..
  00000170  40 40 00 00 40 80 00 00 40 A0 00 00 40 C0 00 00  @@..@€......
  00000180  3F 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ?€..............
  00000180  40 E0 00 00 41 00 00 00 41 10 00 00 41 20 00 00  ..A...A...A ..
  00000190  3F 80 00 00 3F 80 00 00 3F 80 00 00 00 00 00 00  ?€..?€..?€......
  00000190  41 30 00 00 41 40 00 00 41 50 00 00 00 00 00 03 A0..A@..AP......
  000001A0  FF FF 00 00 FF FF FF FF 00 00 00 00 00 00 00 00  ÿÿ..ÿÿÿÿ........
  000001A0  FF FF 00 00 FF FF FF FF 10 00 00 00 20 00 00 00  ÿÿ..ÿÿÿÿ.... ...
  000001B0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
  000001B0  30 00 00 00 40 00 00 00 50 00 00 00 60 00 00 00  0...@...P...`...
  000001C0  FF FF 00 00 FF FF FF FF 00 00 00 00 00 00 00 F4  ÿÿ..ÿÿÿÿ.......ô
  000001C0  FF FF 00 00 FF FF FF FF 00 00 00 06 00 00 00 F4  ÿÿ..ÿÿÿÿ.......ô
  000001D0  00 00 01 40 73 61 6D 70 6C 65 00 00 72 6F 6F 74 ...@sample..root
  000001D0  00 00 01 40 74 65 73 74 00 00 00 00 70 61 67 65  ...@test....page
  000001E0  00 00 00 00 61 70 70 6C 69 63 61 74 69 6F 6E 00 ....application.
  000001E0  5F 74 65 73 74 00 00 00 70 6C 61 6E 65 5F 74 65 _test...plane_te
  000001F0  00 00 00 00                                     ....
  000001F0  73 74 00 00 00 00 00 00                          st......


{| class="wikitable" style="font-size:x-small;"
{| class="wikitable" style="font-size:x-small;"
|-
|-
! colspan="2" | Areas !! Offset !! Length !! Example !! Name !! Notes
! Areas !! Offset !! Length !! Example !! Name !! Notes
|-
|-
| colspan="2" rowspan="42" | HDR
| rowspan="42" | Header
|-{{cellcolors|#000000|#ffffff}}
|-{{cellcolors|#000000|#ffffff}}
| 0x00 || 0x04 || 46 52 50 00 || '''prf_signature''' || FRP in big endian
| 0x00 || 0x04 || 46 52 50 00 || '''signature''' || FRP in big endian
|-{{cellcolors|#000000|#ffffff}}
|-{{cellcolors|#000000|#ffffff}}
| 0x04 || 0x04 || 00 00 00 97 || '''prf_version''' || 0x97 = one of the firmwares for PS3
| 0x04 || 0x04 || 00 00 01 30 || '''version''' || 0x130 = one of the firmwares for PS3
|-{{cellcolors|#000000|#ffffff}}
|-{{cellcolors|#000000|#ffffff}}
| 0x08 || 0x04 || 00 00 00 00 || {{cellcolors|#ff7777}} <abbr title="minor_version ?">''prf_unknown''</abbr> ||  
| 0x08 || 0x04 || 00 00 00 00 || {{cellcolors|#ff7777}} ''unknown'' ||  
|-{{cellcolors|#000000|#ffffff}}
|-{{cellcolors|#000000|#ffffff}}
| 0x0C || 0x04 || 00 00 00 00 || <abbr title="compress everything except the header and '''dat''' data tables to store files">'''prf_compression'''</abbr> || 0x00 = uncompressed
| 0x0C || 0x04 || 00 00 00 00 || <abbr title="compresses everything except the header and '''dat''' data tables to store files">'''compress_toc_ref_txt'''</abbr> || 0x00 = uncompressed
|-{{cellcolors|#7777ff}}
|-{{cellcolors|#7777ff}}
| 0x10 || 0x04 || 00 00 00 A4 || '''toc_maintree_absolute_offset''' || MainTree at 0xA4
| 0x10 || 0x04 || 00 00 00 A4 || '''toc_maintree_absolute_offset''' || MainTree at 0xA4
Line 1,089: Line 1,034:
| 0x34 || 0x04 || FF FF FF FF || '''toc_animationtree_absolute_offset''' || no
| 0x34 || 0x04 || FF FF FF FF || '''toc_animationtree_absolute_offset''' || no
|-{{cellcolors|#66ff66}}
|-{{cellcolors|#66ff66}}
| 0x38 || 0x04 || 00 00 01 D4 || '''str_language_table_absolute_offset''' || languages at 0x1D4
| 0x38 || 0x04 || 00 00 01 D4 || '''txt_language_table_absolute_offset''' || languages at 0x1D4
|-{{cellcolors|#66ff66}}
|-{{cellcolors|#66ff66}}
| 0x3C || 0x04 || 00 00 00 00 || '''str_language_table_length''' || empty
| 0x3C || 0x04 || 00 00 00 00 || '''txt_language_table_length''' || empty
|-{{cellcolors|#99ff99}}
|-{{cellcolors|#99ff99}}
| 0x40 || 0x04 || 00 00 01 D4 || '''str_label_table_absolute_offset''' || labels at 0x1D4
| 0x40 || 0x04 || 00 00 01 D4 || '''txt_label_table_absolute_offset''' || labels at 0x1D4
|-{{cellcolors|#99ff99}}
|-{{cellcolors|#99ff99}}
| 0x44 || 0x04 || 00 00 00 1C || '''str_label_table_length''' || length 0x1C
| 0x44 || 0x04 || 00 00 00 20 || '''txt_label_table_length''' || length 0x20
|-{{cellcolors|#bbffbb}}
|-{{cellcolors|#bbffbb}}
| 0x48 || 0x04 || 00 00 01 F0 || '''str_event_table_absolute_offset''' || events at 0x1F0
| 0x48 || 0x04 || 00 00 01 F4 || '''txt_event_table_absolute_offset''' || events at 0x1F4
|-{{cellcolors|#bbffbb}}
|-{{cellcolors|#bbffbb}}
| 0x4C || 0x04 || 00 00 00 04 || '''str_event_table_length''' || length 0x4
| 0x4C || 0x04 || 00 00 00 04 || '''txt_event_table_length''' || length 0x4
|-{{cellcolors|#770077}}
|-{{cellcolors|#770077}}
| 0x50 || 0x04 || FF FF FF FF || '''ptr_language_table_absolute_offset''' || no
| 0x50 || 0x04 || FF FF FF FF || '''ref_language_table_absolute_offset''' || no
|-{{cellcolors|#770077}}
|-{{cellcolors|#770077}}
| 0x54 || 0x04 || 00 00 00 00 || '''ptr_language_table_length''' || empty
| 0x54 || 0x04 || 00 00 00 00 || '''ref_language_table_length''' || empty
|-{{cellcolors|#880088}}
|-{{cellcolors|#880088}}
| 0x58 || 0x04 || FF FF FF FF || '''ptr_image_table_absolute_offset''' || no
| 0x58 || 0x04 || FF FF FF FF || '''ref_image_table_absolute_offset''' || no
|-{{cellcolors|#880088}}
|-{{cellcolors|#880088}}
| 0x5C || 0x04 || 00 00 00 00 || '''ptr_image_table_length''' || empty
| 0x5C || 0x04 || 00 00 00 00 || '''ref_image_table_length''' || empty
|-{{cellcolors|#990099}}
|-{{cellcolors|#990099}}
| 0x60 || 0x04 || FF FF FF FF || '''ptr_model_table_absolute_offset''' || no
| 0x60 || 0x04 || FF FF FF FF || '''ref_model_table_absolute_offset''' || no
|-{{cellcolors|#990099}}
|-{{cellcolors|#990099}}
| 0x64 || 0x04 || 00 00 00 00 || '''ptr_model_table_length''' || empty
| 0x64 || 0x04 || 00 00 00 00 || '''ref_model_table_length''' || empty
|-{{cellcolors|#aa00aa}}
|-{{cellcolors|#aa00aa}}
| 0x68 || 0x04 || FF FF FF FF || '''ptr_sound_table_absolute_offset''' || no
| 0x68 || 0x04 || FF FF FF FF || '''ref_sound_table_absolute_offset''' || no
|-{{cellcolors|#aa00aa}}
|-{{cellcolors|#aa00aa}}
| 0x6C || 0x04 || 00 00 00 00 || '''ptr_sound_table_length''' || empty
| 0x6C || 0x04 || 00 00 00 00 || '''ref_sound_table_length''' || empty
|-{{cellcolors|#bb00bb}}
|-{{cellcolors|#bb00bb}}
| 0x70 || 0x04 || 00 00 01 CC || '''ptr_object_table_absolute_offset''' || object pointers at 0x1CC
| 0x70 || 0x04 || 00 00 01 CC || '''ref_object_table_absolute_offset''' || object pointers at 0x1CC
|-{{cellcolors|#bb00bb}}
|-{{cellcolors|#bb00bb}}
| 0x74 || 0x04 || 00 00 00 08 || '''ptr_object_table_length''' || size 0x8
| 0x74 || 0x04 || 00 00 00 08 || '''ref_object_table_length''' || size 0x8
|-{{cellcolors|#cc00cc}}
|-{{cellcolors|#cc00cc}}
| 0x78 || 0x04 || FF FF FF FF || '''ptr_animation_table_absolute_offset''' || no
| 0x78 || 0x04 || FF FF FF FF || '''ref_animation_table_absolute_offset''' || no
|-{{cellcolors|#cc00cc}}
|-{{cellcolors|#cc00cc}}
| 0x7C || 0x04 || 00 00 00 00 || '''ptr_animation_table_length''' || empty
| 0x7C || 0x04 || 00 00 00 00 || '''ref_animation_table_length''' || empty
|-{{cellcolors|#ccaa88}}
|-{{cellcolors|#ccaa88}}
| 0x80 || 0x04 || FF FF FF FF || '''dat_image_table_absolute_offset''' || no
| 0x80 || 0x04 || FF FF FF FF || '''dat_image_table_absolute_offset''' || no
Line 1,143: Line 1,088:
| 0xA0 || 0x04 || FF FF FF FF || {{cellcolors|#ff7777}} <abbr title="dat_unknown_table_absolute_offset">''dat_unknown_3''</abbr> ||  
| 0xA0 || 0x04 || FF FF FF FF || {{cellcolors|#ff7777}} <abbr title="dat_unknown_table_absolute_offset">''dat_unknown_3''</abbr> ||  
|-{{cellcolors|#000000}}
|-{{cellcolors|#000000}}
| colspan="7" |  
| colspan="6" |  
|-
|-
| colspan="2" rowspan="72" | TOC
| rowspan="80" | TOC
|-{{cellcolors|#7777ff}}
| 0xA4 || 0x01 || 01 || '''entry_type''' || 0x1=MainTree
|-{{cellcolors|#7777ff}}
| 0xA5 || 0x01 || 01 || '''hierarchy_depth''' ||
|-{{cellcolors|#7777ff}}
|-{{cellcolors|#7777ff}}
| 0xA4 || 0x04 || 01 01 00 00 || '''entry_type''' || MainTree
| 0xA6 || 0x02 || 00 00 || ''unknown'' ||  
|-{{cellcolors|#7777ff}}
|-{{cellcolors|#7777ff}}
| 0xA8 || 0x04 || 00 00 00 00 || '''entry_label_offset''' || sample
| 0xA8 || 0x04 || 00 00 00 00 || '''entry_label_offset''' || test
|-{{cellcolors|#7777ff}}
|-{{cellcolors|#7777ff}}
| 0xAC || 0x04 || 00 00 00 00 || '''entry_header_size''' ||  
| 0xAC || 0x04 || 00 00 00 00 || '''entry_header_size''' ||  
Line 1,163: Line 1,112:
| 0xC0 || 0x04 || 00 00 00 00 || '''parent_offset''' || no parent
| 0xC0 || 0x04 || 00 00 00 00 || '''parent_offset''' || no parent
|-{{cellcolors|#7777ff}}
|-{{cellcolors|#7777ff}}
| 0xC4 || 0x04 || 00 00 00 00 || {{cellcolors|#ff7777}} ''toc_entry_unknown_1'' ||  
| 0xC4 || 0x04 || 00 00 00 00 || ''unknown'' ||  
|-{{cellcolors|#7777ff}}
|-{{cellcolors|#7777ff}}
| 0xC8 || 0x04 || 00 00 00 00 || {{cellcolors|#ff7777}} ''toc_entry_unknown_2'' ||  
| 0xC8 || 0x04 || 00 00 00 00 || ''unknown'' ||  
|-{{cellcolors|lightgrey}}
|-{{cellcolors|lightgrey}}
| colspan="5" |  
| colspan="5" |  
|-{{cellcolors|#8888ff}}
|-{{cellcolors|#8888ff}}
| 0xCC || 0x04 || 08 00 00 00 || '''entry_type''' || ObjectTree
| 0xCC || 0x01 || 08 || '''entry_type''' || 0x8=ObjectTree
|-{{cellcolors|#8888ff}}
| 0xCD || 0x01 || 00 || '''hierarchy_depth''' || 0x0=Root
|-{{cellcolors|#8888ff}}
| 0xCE || 0x02 || 00 00 || ''unknown'' ||
|-{{cellcolors|#8888ff}}
|-{{cellcolors|#8888ff}}
| 0xD0 || 0x04 || FF FF FF FF || '''entry_label_offset''' || no label
| 0xD0 || 0x04 || FF FF FF FF || '''entry_label_offset''' || no label
Line 1,185: Line 1,138:
| 0xE8 || 0x04 || 00 00 00 28 || '''parent_offset''' || 0xCC-0x28 = parent is at 0xA4 ('''MainTree''')
| 0xE8 || 0x04 || 00 00 00 28 || '''parent_offset''' || 0xCC-0x28 = parent is at 0xA4 ('''MainTree''')
|-{{cellcolors|#8888ff}}
|-{{cellcolors|#8888ff}}
| 0xEC || 0x04 || 00 00 00 00 || {{cellcolors|#ff7777}} ''toc_entry_unknown_1'' ||  
| 0xEC || 0x04 || 00 00 00 00 || ''unknown'' ||  
|-{{cellcolors|#8888ff}}
|-{{cellcolors|#8888ff}}
| 0xF0 || 0x04 || 00 00 00 00 || {{cellcolors|#ff7777}} ''toc_entry_unknown_2'' ||  
| 0xF0 || 0x04 || 00 00 00 00 || ''unknown'' ||  
|-{{cellcolors|lightgrey}}
|-{{cellcolors|lightgrey}}
| colspan="5" |  
| colspan="5" |  
|-{{cellcolors|#9999ff}}
|-{{cellcolors|#9999ff}}
| 0xF4 || 0x01 || 08 01 00 00 || '''entry_type''' || Page
| 0xF4 || 0x01 || 08 || '''entry_type''' || 0x8=ObjectTree
|-{{cellcolors|#9999ff}}
| 0xF5 || 0x01 || 01 || '''hierarchy_depth''' || 0x1=Page
|-{{cellcolors|#9999ff}}
| 0xF6 || 0x02 || 00 00 || ''unknown'' ||
|-{{cellcolors|#9999ff}}
|-{{cellcolors|#9999ff}}
| 0xF8 || 0x04 || 00 00 00 08 || '''entry_label_offset''' || root
| 0xF8 || 0x04 || 00 00 00 08 || '''entry_label_offset''' || page_test
|-{{cellcolors|#9999ff}}
|-{{cellcolors|#9999ff}}
| 0xFC || 0x04 || 00 00 00 28 || '''entry_header_size''' ||  
| 0xFC || 0x04 || 00 00 00 28 || '''entry_header_size''' ||  
Line 1,207: Line 1,164:
| 0x110 || 0x04 || 00 00 00 28 || '''parent_offset''' || 0xF4-0x28 = parent is at 0xCC ('''ObjectTree''')
| 0x110 || 0x04 || 00 00 00 28 || '''parent_offset''' || 0xF4-0x28 = parent is at 0xCC ('''ObjectTree''')
|-{{cellcolors|#9999ff}}
|-{{cellcolors|#9999ff}}
| 0x114 || 0x04 || 00 00 00 00 || {{cellcolors|#ff7777}} ''toc_entry_unknown_1'' ||  
| 0x114 || 0x04 || 00 00 00 00 || ''unknown'' ||  
|-{{cellcolors|#9999ff}}
|-{{cellcolors|#9999ff}}
| 0x118 || 0x04 || 00 00 00 00 || {{cellcolors|#ff7777}} ''toc_entry_unknown_2'' ||  
| 0x118 || 0x04 || 00 00 00 00 || ''unknown'' ||  
|-{{cellcolors|#bbbbff}}
|-{{cellcolors|#aaaaff}}
| 0x11C || 0x04 || 01 11 00 00 || '''pageMode''' ||  
| 0x11C || 0x04 || 11 01 00 00 || '''pageMode''' ||  
|-{{cellcolors|#bbbbff}}
|-{{cellcolors|#aaaaff}}
| 0x120 || 0x08 || FF FF 00 00 FF FF FF FF || '''pageOnInit''' || nothing
| 0x120 || 0x08 || FF FF 00 00 FF FF FF FF || '''pageOnInit''' || ?
|-{{cellcolors|#bbbbff}}
|-{{cellcolors|#aaaaff}}
| 0x128 || 0x08 || FF FF 00 00 FF FF FF FF || '''pageOnCancel''' || nothing
| 0x128 || 0x08 || FF FF 00 00 FF FF FF FF || '''pageOnCancel''' || ?
|-{{cellcolors|#bbbbff}}
|-{{cellcolors|#aaaaff}}
| 0x130 || 0x08 || FF FF 00 00 FF FF FF FF || '''pageOnContext''' || nothing
| 0x130 || 0x08 || FF FF 00 00 FF FF FF FF || '''pageOnContext''' || ?
|-{{cellcolors|#bbbbff}}
|-{{cellcolors|#aaaaff}}
| 0x138 || 0x08 || FF FF 00 00 FF FF FF FF || '''pageOnActivate''' || nothing
| 0x138 || 0x08 || FF FF 00 00 FF FF FF FF || '''pageOnActivate''' || ?
|-{{cellcolors|lightgrey}}
|-{{cellcolors|lightgrey}}
| colspan="5" |  
| colspan="5" |  
|-{{cellcolors|#9999ff}}
|-{{cellcolors|#9999ff}}
| 0x140 || 0x04 || 08 02 00 00 || '''entry_type''' || Plane
| 0x140 || 0x01 || 08 || '''entry_type''' || 0x8=ObjectTree
|-{{cellcolors|#9999ff}}
| 0x141 || 0x01 || 02 || '''hierarchy_depth''' || 0x2=Plane
|-{{cellcolors|#9999ff}}
| 0x142 || 0x02 || 00 00 || ''unknown'' ||
|-{{cellcolors|#9999ff}}
|-{{cellcolors|#9999ff}}
| 0x144 || 0x04 || 00 00 00 10 || '''entry_label_offset''' || application
| 0x144 || 0x04 || 00 00 00 14 || '''entry_label_offset''' || plane_test
|-{{cellcolors|#9999ff}}
|-{{cellcolors|#9999ff}}
| 0x148 || 0x04 || 00 00 00 28 || '''entry_header_size''' ||  
| 0x148 || 0x04 || 00 00 00 28 || '''entry_header_size''' ||  
Line 1,239: Line 1,200:
| 0x15C || 0x04 || 00 00 00 4C || '''parent_offset''' || 0x140-0x4C = parent is at 0xF4 ('''Page''')
| 0x15C || 0x04 || 00 00 00 4C || '''parent_offset''' || 0x140-0x4C = parent is at 0xF4 ('''Page''')
|-{{cellcolors|#9999ff}}
|-{{cellcolors|#9999ff}}
| 0x160 || 0x04 || 00 00 00 00 || {{cellcolors|#ff7777}} ''toc_entry_unknown_1'' ||  
| 0x160 || 0x04 || 00 00 00 00 || ''unknown'' ||  
|-{{cellcolors|#9999ff}}
|-{{cellcolors|#9999ff}}
| 0x164 || 0x04 || 00 00 00 00 || {{cellcolors|#ff7777}} ''toc_entry_unknown_2'' ||  
| 0x164 || 0x04 || 00 00 00 00 || ''unknown'' ||
|-{{cellcolors|#aaaaff}}
| 0x168 || 0x04 || 3F 80 00 00 || '''PositionX''' || 1 [http://www.h-schmidt.net/FloatConverter/IEEE754.html after converted from float to decimal]
|-{{cellcolors|#aaaaff}}
|-{{cellcolors|#aaaaff}}
| 0x168 || 0x04 || 00 00 00 00 || '''positionX''' || 0
| 0x16C || 0x04 || 40 00 00 00 || '''PositionY''' || 2
|-{{cellcolors|#aaaaff}}
|-{{cellcolors|#aaaaff}}
| 0x16C || 0x04 || 00 00 00 00 || '''positionY''' || 0
| 0x170 || 0x04 || 40 40 00 00 || '''PositionZ''' || 3
|-{{cellcolors|#aaaaff}}
|-{{cellcolors|#aaaaff}}
| 0x170 || 0x04 || 00 00 00 00 || '''positionZ''' || 0
| 0x174 || 0x04 || 40 80 00 00 || '''ColorScaleR''' || 4
|-{{cellcolors|#aaaaff}}
|-{{cellcolors|#aaaaff}}
| 0x174 || 0x04 || 3F 80 00 00 || '''colorScaleR''' || 1
| 0x178 || 0x04 || 40 A0 00 00 || '''ColorScaleG''' || 5
|-{{cellcolors|#aaaaff}}
|-{{cellcolors|#aaaaff}}
| 0x178 || 0x04 || 3F 80 00 00 || '''colorScaleG''' || 1
| 0x17C || 0x04 || 40 C0 00 00 || '''ColorScaleB''' || 6
|-{{cellcolors|#aaaaff}}
|-{{cellcolors|#aaaaff}}
| 0x17C || 0x04 || 3F 80 00 00 || '''colorScaleB''' || 1
| 0x180 || 0x04 || 40 E0 00 00 || '''ColorScaleA''' || 7
|-{{cellcolors|#aaaaff}}
|-{{cellcolors|#aaaaff}}
| 0x180 || 0x04 || 3F 80 00 00 || '''colorScaleA''' || 1
| 0x184 || 0x04 || 41 00 00 00 || '''SizeX''' || 8
|-{{cellcolors|#aaaaff}}
|-{{cellcolors|#aaaaff}}
| 0x184 || 0x04 || 00 00 00 00 || '''sizeX''' || 0
| 0x188 || 0x04 || 41 10 00 00 || '''SizeY''' || 9
|-{{cellcolors|#aaaaff}}
|-{{cellcolors|#aaaaff}}
| 0x188 || 0x04 || 00 00 00 00 || '''sizeY''' || 0
| 0x18C || 0x04 || 41 20 00 00 || '''SizeZ''' || 10
|-{{cellcolors|#aaaaff}}
|-{{cellcolors|#aaaaff}}
| 0x18C || 0x04 || 00 00 00 00 || '''sizeZ''' || 0
| 0x190 || 0x04 || 41 30 00 00 || '''SizeScaleX''' || 11
|-{{cellcolors|#aaaaff}}
|-{{cellcolors|#aaaaff}}
| 0x190 || 0x04 || 3F 80 00 00 || '''sizeScaleX''' || 1
| 0x194 || 0x04 || 41 40 00 00 || '''SizeScaleY''' || 12
|-{{cellcolors|#aaaaff}}
|-{{cellcolors|#aaaaff}}
| 0x194 || 0x04 || 3F 80 00 00 || '''sizeScaleY''' || 1
| 0x198 || 0x04 || 41 50 00 00 || '''SizeScaleZ''' || 13
|-{{cellcolors|#aaaaff}}
|-{{cellcolors|#aaaaff}}
| 0x198 || 0x04 || 3F 80 00 00 || '''sizeScaleZ''' || 1
| 0x19C || 0x04 || 00 00 00 03 || '''AnchorMode''' || 0x3
|-{{cellcolors|#aaaaff}}
|-{{cellcolors|#aaaaff}}
| 0x19C || 0x04 || 00 00 00 00 || '''anchorMode''' || 0x0 (center)
| 0x1A0 || 0x08 || FF FF 00 00 FF FF FF FF || '''OnInit''' || ?
|-{{cellcolors|#aaaaff}}
|-{{cellcolors|#aaaaff}}
| 0x1A0 || 0x08 || FF FF 00 00 FF FF FF FF || '''onInit''' || nothing
| 0x1A8 || 0x04 || 10 00 00 00 || '''PositionOverrideX''' || 10
|-{{cellcolors|#aaaaff}}
|-{{cellcolors|#aaaaff}}
| 0x1A8 || 0x04 || 00 00 00 00 || '''positionOverrideX''' || no
| 0x1AC || 0x04 || 20 00 00 00 || '''PositionOverrideY''' || 20
|-{{cellcolors|#aaaaff}}
|-{{cellcolors|#aaaaff}}
| 0x1AC || 0x04 || 00 00 00 00 || '''positionOverrideY''' || no
| 0x1B0 || 0x04 || 30 00 00 00 || '''PositionOverrideZ''' || 30
|-{{cellcolors|#aaaaff}}
|-{{cellcolors|#aaaaff}}
| 0x1B0 || 0x04 || 00 00 00 00 || '''positionOverrideZ''' || no
| 0x1B4 || 0x04 || 40 00 00 00 || '''SizeOverrideX''' || 40
|-{{cellcolors|#aaaaff}}
|-{{cellcolors|#aaaaff}}
| 0x1B4 || 0x04 || 00 00 00 00 || '''sizeOverrideX''' || no
| 0x1B8 || 0x04 || 50 00 00 00 || '''SizeOverrideY''' || 50
|-{{cellcolors|#aaaaff}}
|-{{cellcolors|#aaaaff}}
| 0x1B8 || 0x04 || 00 00 00 00 || '''sizeOverrideY''' || no
| 0x1BC || 0x04 || 60 00 00 00 || '''SizeOverrideZ''' || 60
|-{{cellcolors|#aaaaff}}
|-{{cellcolors|#aaaaff}}
| 0x1BC || 0x04 || 00 00 00 00 || '''sizeOverrideZ''' || no
| 0x1C0 || 0x04 || FF FF 00 00 FF FF FF FF || '''planeImage''' || ?
|-{{cellcolors|#bbbbff}}
|-{{cellcolors|#aaaaff}}
| 0x1C0 || 0x04 || FF FF 00 00 FF FF FF FF || '''planeImage''' || nothing
| 0x1C8 || 0x04 || 00 00 00 06 || '''planeResizeMode''' || 0x6
|-{{cellcolors|#bbbbff}}
| 0x1C8 || 0x04 || 00 00 00 00 || '''planeResizeMode''' || 0x0
|-{{cellcolors|#000000}}
|-{{cellcolors|#000000}}
| colspan="7" |  
| colspan="6" |  
|-
|-
| rowspan="3" | PTR
| rowspan="3" | object<br>pointers
| rowspan="3" | objects
|-{{cellcolors|#bb00bb}}
|-{{cellcolors|#bb00bb}}
| 0x1CC || 0x04 || 00 00 00 F4 ||  || First object ('''Page''') at 0xF4
| 0x1CC || 0x04 || 00 00 00 F4 ||  || First object ('''Page''') at 0xF4
Line 1,298: Line 1,258:
| 0x1D0 || 0x04 || 00 00 01 40 ||  || Second object ('''Plane''') at 0x140
| 0x1D0 || 0x04 || 00 00 01 40 ||  || Second object ('''Plane''') at 0x140
|-{{cellcolors|#000000}}
|-{{cellcolors|#000000}}
| colspan="7" |  
| colspan="6" |  
|-
|-
| rowspan="10" | STR
| rowspan="2" | languages
| rowspan="2" | languages
|-{{cellcolors|#66ff66}}
|-{{cellcolors|#66ff66}}
| 0x1D4 || 0x00 ||  ||  || empty
| 0x1D4 || 0x00 ||  ||  || empty
|-
|-
| rowspan="6" | labels
| rowspan="7" | labels
|-{{cellcolors|#99ff99}}
|-{{cellcolors|#99ff99}}
| 0x1D4 || 0x07 || 73 61 6D 70 6C 65 00 ||  || '''sample''' (null terminated)
| 0x1D4 || 0x05 || 74 65 73 74 00 ||  || '''test''' (null terminated)
|-{{cellcolors|lightgrey}}
|-{{cellcolors|lightgrey}}
| 0x1DB || 0x01 || 00 ||  || padding (aligned to 4 bytes boundary)
| 0x1D9 || 0x03 || 00 00 00 ||  || padding (aligned to 4 bytes boundary)
|-{{cellcolors|#99ff99}}
|-{{cellcolors|#99ff99}}
| 0x1DC || 0x05 || 72 6F 6F 74 00 ||  || '''root''' (null terminated)
| 0x1DC || 0x0A || 70 61 67 65 5F 74 65 73 74 00 ||  || '''page_test''' (null terminated)
|-{{cellcolors|lightgrey}}
|-{{cellcolors|lightgrey}}
| 0x1E1 || 0x03 || 00 00 00 ||  || padding (aligned to 4 bytes boundary)
| 0x1E6 || 0x02 || 00 00 ||  || padding (aligned to 4 bytes boundary)
|-{{cellcolors|#99ff99}}
|-{{cellcolors|#99ff99}}
| 0x1E4 || 0x0C || 61 70 70 6C 69 63 61 74 69 6F 6E 00 ||  || '''application''' (null terminated)
| 0x1E8 || 0x0B || 70 6C 61 6E 65 5F 74 65 73 74 00 ||  || '''plane_test''' (null terminated)
|-{{cellcolors|lightgrey}}
| 0x1F3 || 0x01 || 00 ||  || padding (aligned to 4 bytes boundary)
|-
|-
| rowspan="2" | events
| rowspan="2" | events
|-{{cellcolors|#bbffbb}}
|-{{cellcolors|#bbffbb}}
| 0x1F0 || 0x04 || 00 00 00 00 ||  || dummy event ?
| 0x1F4 || 0x04 || 00 00 00 00 ||  || dummy event ?
|}
|}


When compiled with rcomage v1.1.2 using ZLIB compression MD5: 4B6C364DDA94BBF1C0A7AC9864DC4796
When compiled (with zlib header compression) MD5: E83B073FD14180A635A63D202EFBFBA3
  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  46 52 50 00 00 00 00 97 00 00 00 00 00 00 00 <span style="background:#ff0000;">10</span>  FRP............
  00000000  46 52 50 00 00 00 01 30 00 00 00 00 00 00 00 <span style="background:#ff0000;">10</span>  FRP....0........
  00000010  00 00 00 A4 FF FF FF FF FF FF FF FF FF FF FF FF  ...¤ÿÿÿÿÿÿÿÿÿÿÿÿ
  00000010  00 00 00 A4 FF FF FF FF FF FF FF FF FF FF FF FF  ...¤ÿÿÿÿÿÿÿÿÿÿÿÿ
  00000020  FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
  00000020  FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
  00000030  00 00 00 CC FF FF FF FF <span style="background:#00ff00;">FF FF FF FF</span> 00 00 00 00  ...Ìÿÿÿÿÿÿÿÿ....
  00000030  00 00 00 CC FF FF FF FF <span style="background:#00ff00;">FF FF FF FF</span> 00 00 00 00  ...Ìÿÿÿÿÿÿÿÿ....
  00000040  00 00 01 D4 00 00 00 1C 00 00 01 F0 00 00 00 04  ...Ô..........
  00000040  00 00 01 D4 00 00 00 20 00 00 01 F4 00 00 00 04  ...Ô... ...ô....
  00000050  FF FF FF FF 00 00 00 00 FF FF FF FF 00 00 00 00  ÿÿÿÿ....ÿÿÿÿ....
  00000050  FF FF FF FF 00 00 00 00 FF FF FF FF 00 00 00 00  ÿÿÿÿ....ÿÿÿÿ....
  00000060  FF FF FF FF 00 00 00 00 FF FF FF FF 00 00 00 00  ÿÿÿÿ....ÿÿÿÿ....
  00000060  FF FF FF FF 00 00 00 00 FF FF FF FF 00 00 00 00  ÿÿÿÿ....ÿÿÿÿ....
Line 1,335: Line 1,296:
  00000080  FF FF FF FF 00 00 00 00 FF FF FF FF 00 00 00 00  ÿÿÿÿ....ÿÿÿÿ....
  00000080  FF FF FF FF 00 00 00 00 FF FF FF FF 00 00 00 00  ÿÿÿÿ....ÿÿÿÿ....
  00000090  FF FF FF FF 00 00 00 00 FF FF FF FF FF FF FF FF  ÿÿÿÿ....ÿÿÿÿÿÿÿÿ
  00000090  FF FF FF FF 00 00 00 00 FF FF FF FF FF FF FF FF  ÿÿÿÿ....ÿÿÿÿÿÿÿÿ
  000000A0  FF FF FF FF <span style="background:#ffff00;">00 00 00 6C</span> <span style="background:#ffff00;">00 00 01 50</span> <span style="background:#ffff00;">00 00 00 00</span>  ÿÿÿÿ...l...P....
  000000A0  FF FF FF FF <span style="background:#ffff00;">00 00 00 8B</span> <span style="background:#ffff00;">00 00 01 54</span> <span style="background:#ffff00;">00 00 00 00</span>  ÿÿÿÿ......T....
  000000B0  <span style="background:#ff00ff;">78 DA 75 CD C1 0D 80 20 0C 05 D0 5F 4F 1C 75 0B</span>  xÚuÍÁ.€ ..Ð_O.u.
  000000B0  <span style="background:#ff00ff;">78 DA 75 CD 31 0A 83 30 14 87 F1 FF 6B A1 38 B6</span>  xÚuÍ1.ƒ0.‡ñÿk¡8¶
  000000C0  <span style="background:#ff00ff;">B6 D0 01 58 82 18 0F 24 28 44 19 C0 A1 BD 2B 04</span>  ¶Ð.X‚..$(D.À¡½+.
  000000C0  <span style="background:#ff00ff;">D0 03 38 66 F4 06 7D DD 1D BC 41 EB 20 5D 8A 08</span>  Ð.8fô..¼Aë ]Š.
  000000D0  <span style="background:#ff00ff;">23 2A F0 92 9F 26 A5 B4 44 78 E3 3E 84 02 E6 73</span>  #*ð’Ÿ&¥´Dxã>„.æs
  000000D0  <span style="background:#ff00ff;">7A 00 8F D2 A3 F4 28 3D 84 BB 7E 83 86 82 E4 83</span>  z..Ò£ô(=„»~ƒ†‚äƒ
  000000E0  <span style="background:#ff00ff;">7A 95 39 FE CC 51 2C 77 4F D4 E6 A8 0B FB E2 CE</span>  z•9þÌQ,wOÔæ¨.ûâÎ
  000000E0  <span style="background:#ff00ff;">1F 49 C8 23 31 D3 7F 01 86 5D 19 66 4A CC 85 38</span>  .IÈ#1Ó..†].fJÌ…8
  000000F0  <span style="background:#ff00ff;">5A 65 0D 82 36 FE CB 08 14 F4 FB 37 C9 BF 9F EE</span>  Ze.‚6þË..ôû7É¿Ÿî
  000000F0  <span style="background:#ff00ff;">67 71 3C A0 4C CD 5D 4C BC 07 4A AD D9 41 A2 2B</span>  gq< LÍ]L¼.J­ÙA¢+
  00000100 <span style="background:#ff00ff;">23 53 7C 3F 00 1A 36 39 5B 3D 01 AB 31 0E 9E B4</span>  #S|?..69[=.«1.ž´
00000100  <span style="background:#ff00ff;">82 F6 95 5A BB 8D 92 0B 8E 11 1F 7C F1 93 EE C2</span>  ‚ö•Z»..Ž..|ñ“îÂ
  00000110 <span style="background:#ff00ff;">56 AB 51 3A 65 16 04 17 88 21 38 F3</span>              V«Q:e...ˆ!8ó
  00000110 <span style="background:#ff00ff;">19 39 0A 38 2A 89 8E DB 3F 5C 2B 47 01 47 85 27</span>  .9.8*‰ŽÛ?\+G.G…'
  00000120 <span style="background:#ff00ff;">B6 7B B6 27 4C 92 F9 D0 F4 83 A8 AB 5F CD 63 3D</span>  ¶{¶'L’ùÐôƒ¨«_Íc=
00000130  <span style="background:#ff00ff;">74 EF BA 8D 07 5A 00 16 DA 3D 9D 00</span>              tïº..Z..Ú=..


*Changes
*Changes
**<span style="background:#ff0000;">10</span> the compression setting for ZLIB
**<span style="background:#ff0000;">10</span> the "compression header" setting with zlib (is not actually compressing the header, the term is not accurate)
**<span style="background:#00ff00;">FF FF FF FF</span> weird
**<span style="background:#00ff00;">FF FF FF FF</span> weird <!-- this seems to be a mistake of rcomage, because the area is empty originally rcomage detects that is empty and replaces the value by a generic 0xFFFFFFFF but this is not correct, the offset where the table starts must be there even if the table is empty -->
**<span style="background:#ffff00;">00 00 00 6C</span> <span style="background:#ffff00;">00 00 01 50</span> <span style="background:#ffff00;">00 00 00 00</span> the info about the compressed area that comes next (composed by: lenPacked, lenUnpacked, and lenLongestText)
**<span style="background:#ffff00;">00 00 00 8B</span> <span style="background:#ffff00;">00 00 01 54</span> <span style="background:#ffff00;">00 00 00 00</span> the info about the compressed area that comes next (composed by: lenPacked, lenUnpacked, and lenLongestText)
**<span style="background:#ff00ff;">78 DA ...</span> the compressed area itself, includes the TOC, the pointer tables (PTR), and string tables (STR)
**<span style="background:#ff00ff;">78 DA ...</span> the compressed area itself, includes the whole TOC, the pointers/references to the TOC, and all the strings tables (languages, labels, and events)
 
 
=Examples (official)=
This ones should be considered "perfect" rco structures, even if there is a weird detail (initially a nonsense, a sony bug, or details not managed correctlly by rcomage)... it needs to be considered a "specification" of that rco version. See also [[Talk:Rcomage]]
 
==PSP system_plugin.rco firmware 0.6.5==
PSP firmware 0.6.5 uses a primitive version of the rco format, this is an example of the rco header (first 0x94 bytes), most notable change is the header is smaller (so is missing some areas for features that was not implemented yet). I dont plan to look for all the changes but this little example hopefully will show what areas are missing to have an overall idea of the order of how features was implemented in the rco format. This version of the rco format is not compatible with rcomage... <strike>but it should by deleting the "unknowns" in the definitions of the source code (lines 51 and 76 of rcofile.h) then compile it (not tested, other errors can happen but this should work)</strike> the idea doesnt works, compiler returns other errors http://paste.ubuntu.com/23207840/
 
Original header (remember PSP uses little endian so some bytes are swapped)
Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
00000000  00 50 52 46 55 00 00 00 00 00 00 00 00 00 00 00  .PRFU...........
00000010  94 00 00 00 FF FF FF FF 7C 0A 00 00 34 08 00 00  ”...ÿÿÿÿ|...4...
00000020  FF FF FF FF BC 00 00 00 FF FF FF FF 7C 0B 00 00  ÿÿÿÿ¼...ÿÿÿÿ|...
00000030  FF FF FF FF E0 0C 00 00 68 00 00 00 48 0D 00 00  ÿÿÿÿà...h...H...
00000040  9C 04 00 00 E4 11 00 00 04 00 00 00 F0 0B 00 00  œ...ä.......ð...
00000050  28 00 00 00 18 0C 00 00 94 00 00 00 FF FF FF FF  (.......”...ÿÿÿÿ
00000060  00 00 00 00 AC 0C 00 00 2C 00 00 00 D8 0C 00 00  ....¬...,...Ø...
00000070  08 00 00 00 FF FF FF FF 00 00 00 00 E8 11 00 00  ....ÿÿÿÿ....è...
00000080  40 DF 01 00 28 F1 01 00 F0 58 02 00 FF FF FF FF  @ß..(ñ..ðX..ÿÿÿÿ
00000090  00 00 00 00                                      ....
 
{| class="wikitable" style="font-size:x-small;"
|-
! Areas !! Offset !! Length !! Example !! Name !! Notes
|-
| rowspan="43" | Header
|-{{cellcolors|#666666|#ffffff}}
| 0x00 || 0x04 || PRF || '''magic''' || PRF in little endian
|-{{cellcolors|#666666|#ffffff}}
| 0x04 || 0x04 || 55 00 00 00 || '''version''' || 0x55 = one of the firmwares for PSP
|-{{cellcolors|#666666|#ffffff}}
| 0x08 || 0x04 || 00 00 00 00 || ''unknown'' ||
|-{{cellcolors|#666666|#ffffff}}
| 0x0C || 0x04 || 00 00 00 00 || '''compress_header''' || 0x00 = uncompressed
|-{{cellcolors|lightgrey}}
| colspan="5" |
|-
| 0x10 || 0x04 || 94 00 00 00 || '''toc_maintree_absolute_offset''' || MainTree at absolute offset 0x94
|-
| 0x14 || 0x04 || FF FF FF FF || '''toc_scripttree_absolute_offset''' ||
|-
| 0x18 || 0x04 || 7C 0A 00 00 || '''toc_languagetree_absolute_offset''' || TextTree at absolute offset 0xA7C
|-
| 0x1C || 0x04 || 34 08 00 00 || '''toc_soundtree_absolute_offset''' || SoundTree at absolute offset 0x834
|-
| 0x20 || 0x04 || FF FF FF FF || '''toc_modeltree_absolute_offset''' ||
|-
| 0x24 || 0x04 || BC 00 00 00 || '''toc_imagetree_absolute_offset''' || ImageTree at absolute offset 0xBC
|-
| 0x28 || 0x04 || FF FF FF FF || {{cellcolors|#ff7777}} ''toc_unknowntree_absolute_offset'' or '''toc_fonttree_absolute_offset'''||
|-
| 0x2C || 0x04 || 7C 0B 00 00 || '''toc_objecttree_absolute_offset''' || ObjectTree at absolute offset 0xB7C
|-
| 0x30 || 0x04 || FF FF FF FF || '''toc_animationtree_absolute_offset''' ||
|-{{cellcolors|lightgrey}}
| colspan="5" |
|-
| 0x34 || 0x04 || E0 0C 00 00 || '''strings_texts_absolute_offset''' || strings texts table at absolute offset 0xCE0
|-
| 0x38 || 0x04 || 68 00 00 00 || '''strings_texts_length''' || strings texts table size 0x68
|-
| 0x3C || 0x04 || 48 0D 00 00 || '''strings_labels_absolute_offset''' || strings labels table at absolute offset 0xD48
|-
| 0x40 || 0x04 || 9C 04 00 00 || '''strings_labels_length''' || strings labels size 0x49C
|-
| 0x44 || 0x04 || E4 11 00 00 || '''strings_events_absolute_offset''' || strings events table at absolute offset 0x11E4
|-
| 0x48 || 0x04 || 04 00 00 00 || '''strings_events_length''' || strings events size 0x4
|-{{cellcolors|lightgrey}}
| colspan="5" |
|-
| 0x4C || 0x04 || F0 0B 00 00 || '''text_pointer_table_offset''' ||
|-
| 0x50 || 0x04 || 28 00 00 00 || '''text_pointer_table_length''' ||
|-
| 0x54 || 0x04 || 18 0C 00 00 || '''image_pointer_table_offset''' ||
|-
| 0x58 || 0x04 || 94 00 00 00 || '''image_pointer_table_length''' ||
|-
| 0x5C || 0x04 || FF FF FF FF || '''model_pointer_table_offset''' ||
|-
| 0x60 || 0x04 || 00 00 00 00 || '''model_pointer_table_length''' ||
|-
| 0x64 || 0x04 || AC 0C 00 00 || '''sound_pointer_table_offset''' ||
|-
| 0x68 || 0x04 || 2C 00 00 00 || '''sound_pointer_table_length''' ||
|-
| 0x6C || 0x04 || D8 0C 00 00 || '''object_pointer_table_offset''' ||
|-
| 0x70 || 0x04 || 08 00 00 00 || '''object_pointer_table_length''' ||
|-
| 0x74 || 0x04 || FF FF FF FF || '''anim_pointer_table_offset''' ||
|-
| 0x78 || 0x04 || 00 00 00 00 || '''anim_pointer_table_length''' ||
|-{{cellcolors|lightgrey}}
| colspan="5" |
|-
| 0x7C || 0x04 || E8 11 00 00 || '''image_data_section_offset''' ||
|-
| 0x80 || 0x04 || 40 DF 01 00 || '''image_data_section_length''' ||
|-
| 0x84 || 0x04 || 28 F1 01 00 || '''sound_data_section_offset''' ||
|-
| 0x88 || 0x04 || F0 58 02 00 || '''sound_data_section_length''' ||
|-
| 0x8C || 0x04 || FF FF FF FF || '''model_data_section_offset''' ||
|-
| 0x90 || 0x04 || 00 00 00 00 || '''model_data_section_length''' ||
|-{{cellcolors|#ff7777}}
| colspan="5" | 12 bytes of unknowns 0xFF's was added here for newer versions of the rco format
|}
Please note that all contributions to PS3 Developer wiki are considered to be released under the GNU Free Documentation License 1.2 (see PS3 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: