Editing Talk:RCOXML Objects
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: | ||
= | =RCOXML format versions= | ||
*Objects supported by PSP, but with added attributes specific for PS3 | |||
**Standard object attributes (6 attributes added) | |||
**MList (3 attributes added) | |||
**Text (3 attributes added) | |||
**Spin (2 attributes added) | |||
**ItemSpin (2 attributes added) | |||
**LList (2 attributes added) | |||
**IList (4 attributes added) | |||
**IItem (1 attribute added) | |||
*Objects specific for PS3 (not supported by PSP) | |||
**ObjUnknown0x1B | |||
**CheckboxGroup | |||
**CheckboxItem | |||
**Meter | |||
**EditBox | |||
* | *Objects not used in PS3 official firmware (ObjUnknown0x1B is an easter egg, implemented specifically for PS3 but not used in latest PS3 retail firmware) | ||
** | **ObjUnknown0xB | ||
** | **XItem | ||
**ModelObject | |||
**LItem | |||
**Icon | |||
**UButton | |||
**ObjUnknown0x1B | |||
=Float conversions= | |||
Some of the values in the tables in frontpage (in the red marked rows as speculative) was dumped by rcomage as type "unk" but are "floats", for this reason rcomage didnt made the float-to-decimal conversion and appears as a hexidecimal value with the endianess swapped (bytes reversed) and the starting zeroes removed | |||
To make the decimal conversion you can use this web http://www.h-schmidt.net/FloatConverter/IEEE754.html | |||
Example, a value '''0xa0c0''' was extracted by using the type "unk". After changing endianess manually the value is '''0xc0a00000'''. And after the decimal conversion the result is '''-5''' | |||
=Screen resolution adaptative values= | |||
Some of the values (mostly positions and maybe scalation factors) of some important "rcoxml objects" inside .rco files has been replaced by a reference to the [[XMB Layouts]] files with the purpose of changing his values "on the fly" based in the screen resolution settings for the TV | |||
The .rco format is inherited from PSP, but PSP only used 1 screen resolution so this feature of the .rco format was not used in PSP, is specific for PS3 | |||
==Standard object attributes== | |||
Are used 5485 times in 4.76 PS3 firmware, most objects uses them | |||
*The 6 attributes specific for PS3 are references to the [[XMB Layouts]] files. The firmware loads the rco, calculates a reference to a line of the grid table, and loads the value from the grid table | |||
*The value in the rco is composed by: "grid line reference" (first 2 bytes swapped, then converted to decimal) + "unknown flags" (last 2 bytes swapped). The "unknown flags" maybe are related with the presence (or not) of a alternative value in the factor tables | |||
*The grid is a 3D scene defined by the X, Y, Z axis, the camera (TV screen frame) is located in the vertical of Z axis, the world coordinates is located in the center of the screen (0, 0, 0) | |||
*rcomage is not able to extract the 2 values that composes each attribute separatedlly (it messes up both together, the "grid line reference" from the first 2 bytes, and the "unknown flags" from last 2 bytes), for this reason the better way to manage this data types with rcomage is as data type "unk" (for a raw value extraction) | |||
{{RCOXML_standard_object_attributes}} | |||
==Grid references example== | |||
For more detailed info see the changelog of [[Talk:Custom_render_plugin]].rco and [[XMB Layouts]] | |||
* | *In firmware 4.76 custom_render_plugin.rco contains 3 '''plane objects''' using the standard attributed definitions: | ||
**Page object '''page_coldboot''' - is the old/classic coldboot from firmware 1.00 used when the console boots | |||
***Plane object '''scelogo''' - is an image of 512x32 pixels size. Uses grid references | |||
**Page object '''page_coldboot2''' - is the new coldboot introduced in firmware 2.70 | |||
***Plane object '''coldboot_ps3logo''' - is a placeholder for the [[coldboot.raf]] animation. Doesnt uses grid references | |||
**Page object '''page_gameboot''' - used when a game boots | |||
***Plane object '''ps3logo''' - is an image of 512x54 pixels size. Uses grid references | |||
{| | {{Boxcode|content=<syntaxhighlight lang="xml"> | ||
<RcoFile> | |||
<MainTree> | |||
<ObjectTree> | |||
<Page name="page_coldboot" pageUnknownInt0="0x1110000" pageOnInit="nothing" pageOnCancel="nothing" pageOnContext="nothing" pageOnActivate="nothing"> | |||
<Plane name="scelogo" standardPosX="0" standardPosY="0" standardPosZ="0" standardRedScale="1" standardGreenScale="1" standardBlueScale="1" standardAlphaScale="1" standardWidth="0" standardHeight="0" standardDepth="0" standardScaleWidth="1" standardScaleHeight="1" standardScaleDepth="1" standardIconOffset="0x0" standardOnInit="nothing" standardUnknown17="0x98020000" standardUnknown18="0x99020000" standardUnknown19="0x0" standardUnknown20="0x9a020100" standardUnknown21="0x9b020100" standardUnknown22="0x100" planeImage="image:tex_scelogo" planeDisplayMode="0x0"></Plane> | |||
</Page> | |||
| | <Page name="page_coldboot2" pageUnknownInt0="0x1110000" pageOnInit="nothing" pageOnCancel="nothing" pageOnContext="nothing" pageOnActivate="nothing"> | ||
<Plane name="coldboot_ps3logo" standardPosX="0" standardPosY="0" standardPosZ="0" standardRedScale="1" standardGreenScale="1" standardBlueScale="1" standardAlphaScale="1" standardWidth="0" standardWeight="0" standardDepth="0" standardScaleWidth="1" standardScaleHeight="1" standardScaleDepth="1" standardIconOffset="0x0" standardOnInit="nothing" standardUnknown17="0x0" standardUnknown18="0x0" standardUnknown19="0x0" standardUnknown20="0x100" standardUnknown21="0x100" standardUnknown22="0x100" planeImage="nothing" planeDisplayMode="0x0"></Plane> | |||
</Page> | |||
<Page name="page_gameboot" pageUnknownInt0="0x1110000" pageOnInit="nothing" pageOnCancel="nothing" pageOnContext="nothing" pageOnActivate="nothing"> | |||
<Plane name="ps3logo" standardPosX="0" standardPosY="0" standardPosZ="0" standardRedScale="1" standardGreenScale="1" standardBlueScale="1" standardAlphaScale="1" standardWidth="0" standardHeight="0" standardDepth="0" standardScaleWidth="1" standardScaleHeight="1" standardScaleDepth="1" standardIconOffset="0x0" standardOnInit="nothing" standardUnknown17="0x0" standardUnknown18="0x0" standardUnknown19="0x0" standardUnknown20="0x9c020100" standardUnknown21="0x9d020100" standardUnknown22="0x100" planeImage="image:tex_ps3logo" planeDisplayMode="0x0"></Plane> | |||
</ObjectTree> | |||
</MainTree> | |||
</RcoFile> | |||
</syntaxhighlight>}} | |||
And this is the same, using more linefeeds and tabs, and ordered in groups for a better overview | |||
{{Boxcode|content=<syntaxhighlight lang="xml"> | |||
<RcoFile> | |||
<MainTree> | |||
<ObjectTree> | |||
<Page name="page_coldboot" pageUnknownInt0="0x1110000" pageOnInit="nothing" pageOnCancel="nothing" pageOnContext="nothing" pageOnActivate="nothing"> | |||
<Plane | |||
name="scelogo" | |||
standardPosX="0" standardPosY="0" standardPosZ="0" | |||
standardRedScale="1" standardGreenScale="1" standardBlueScale="1" standardAlphaScale="1" | |||
standardWidth="0" standardHeight="0" standardDepth="0" | |||
standardScaleWidth="1" standardScaleHeight="1" standardScaleDepth="1" | |||
standardIconOffset="0x0" | |||
standardOnInit="nothing" | |||
standardUnknown17="0x98020000" standardUnknown18="0x99020000" standardUnknown19="0x0" | |||
standardUnknown20="0x9a020100" standardUnknown21="0x9b020100" standardUnknown22="0x100" | |||
planeImage="image:tex_scelogo" | |||
planeDisplayMode="0x0" | |||
> | |||
</Plane> | |||
</Page> | |||
<Page name="page_coldboot2" pageUnknownInt0="0x1110000" pageOnInit="nothing" pageOnCancel="nothing" pageOnContext="nothing" pageOnActivate="nothing"> | |||
<Plane | |||
name="coldboot_ps3logo" | |||
standardPosX="0" standardPosY="0" standardPosZ="0" | |||
standardRedScale="1" standardGreenScale="1" standardBlueScale="1" standardAlphaScale="1" | |||
standardWidth="0" standardWeight="0" standardDepth="0" | |||
standardScaleWidth="1" standardScaleHeight="1" standardScaleDepth="1" | |||
standardIconOffset="0x0" | |||
standardOnInit="nothing" | |||
standardUnknown17="0x0" standardUnknown18="0x0" standardUnknown19="0x0" | |||
standardUnknown20="0x100" standardUnknown21="0x100" standardUnknown22="0x100" | |||
planeImage="nothing" | |||
planeDisplayMode="0x0" | |||
> | |||
</Plane> | |||
</Page> | |||
<Page name="page_gameboot" pageUnknownInt0="0x1110000" pageOnInit="nothing" pageOnCancel="nothing" pageOnContext="nothing" pageOnActivate="nothing"> | |||
<Plane | |||
name="ps3logo" | |||
standardPosX="0" standardPosY="0" standardPosZ="0" | |||
standardRedScale="1" standardGreenScale="1" standardBlueScale="1" standardAlphaScale="1" | |||
standardWidth="0" standardHeight="0" standardDepth="0" | |||
standardScaleWidth="1" standardScaleHeight="1" standardScaleDepth="1" | |||
standardIconOffset="0x0" | |||
standardOnInit="nothing" | |||
standardUnknown17="0x0" standardUnknown18="0x0" standardUnknown19="0x0" | |||
standardUnknown20="0x9c020100" standardUnknown21="0x9d020100" standardUnknown22="0x100" | |||
planeImage="image:tex_ps3logo" | |||
planeDisplayMode="0x0" | |||
> | |||
</Plane> | |||
</ObjectTree> | |||
</MainTree> | |||
</RcoFile> | |||
</syntaxhighlight>}} | |||
As a resume: | |||
== | *'''page_coldboot''' | ||
**'''scelogo''' | |||
***standardPosX="0" standardPosY="0" standardPosZ="0" <--------------------------------------------------------------- '''positions are empty !''' | |||
***standardWidth="0" standardHeight="0" standardDepth="0" <------------------------------------------------------------ '''sizes are empty !''' | |||
***standardUnknown17="0x98020000" standardUnknown18="0x99020000" standardUnknown19="0x0" <------- This ones are grid references, overrides the values for position | |||
***standardUnknown20="0x9a020100" standardUnknown21="0x9b020100" standardUnknown22="0x100" <---- This ones are grid references, overrides the values for sizes | |||
* | *'''page_coldboot2''' | ||
* | **'''coldboot_ps3logo''' | ||
** | ***standardPosX="0" standardPosY="0" standardPosZ="0" <--------------------------------------------------------------- '''positions are empty !''' | ||
*< | ***standardWidth="0" standardHeight="0" standardDepth="0" <------------------------------------------------------------ '''sizes are empty !''' | ||
* | ***standardUnknown17="0x0" standardUnknown18="0x0" standardUnknown19="0x0" <------------------------------ This is reserved for a grid reference, but is doubtfull how this values are working | ||
** | ***standardUnknown20="0x100" standardUnknown21="0x100" standardUnknown22="0x100" <--------------------- This is reserved for a grid reference, but is doubtfull how this values are working | ||
* | |||
**< | |||
*< | |||
= | *'''page_gameboot''' | ||
**'''ps3logo''' | |||
***standardPosX="0" standardPosY="0" standardPosZ="0" <--------------------------------------------------------------- '''positions are empty !''' | |||
***standardWidth="0" standardHeight="0" standardDepth="0" <------------------------------------------------------------ '''sizes are empty !''' | |||
***standardUnknown17="0x0" standardUnknown18="0x0" standardUnknown19="0x0" <------------------------------- This ones are grid references, overrides the values for position | |||
***standardUnknown20="0x9c020100" standardUnknown21="0x9d020100" standardUnknown22="0x100" <------ This ones are grid references, overrides the values for sizes | |||
---- | |||
Before calculating the grid references is needed to convert the values manually to the correct format. Every one of the attributes used for grid references is composed by 2 values, the first one is the grid reference itself (first 2 bytes), and the second one is unknown (last 2 bytes). Is needed to cut the attribute at half and swap the bytes | |||
* | *'''scelogo''' grid references | ||
**''' | **position | ||
*** | ***standardUnknown17="0x98020000" <----------- this is 0x0'''298''' (grid reference) and 0x0000 (unknown) | ||
***standardUnknown18="0x99020000" <----------- this is 0x0'''299''' (grid reference) and 0x0000 (unknown) | |||
***standardUnknown19="0x0" <---------------------- this is 0x0000 (grid reference ?) and 0x0000 (unknown) | |||
**size | |||
***standardUnknown20="0x9a020100" <----------- this is 0x0'''29a''' (grid reference) and 0x000'''1''' (unknown) | |||
***standardUnknown21="0x9b020100" <----------- this is 0x0'''29b''' (grid reference) and 0x000'''1''' (unknown) | |||
***standardUnknown22="0x100" <------------------- this is 0x0000 (grid reference ?) and 0x000'''1''' (unknown) | |||
* | *'''coldboot_ps3logo''' grid references | ||
**''' | **position | ||
*** | ***standardUnknown17="0x0" <---------------------- this is 0x0000 (grid reference ?) and 0x0000 (unknown) | ||
***standardUnknown18="0x0" <---------------------- this is 0x0000 (grid reference ?) and 0x0000 (unknown) | |||
***standardUnknown19="0x0" <---------------------- this is 0x0000 (grid reference ?) and 0x0000 (unknown) | |||
**size | |||
***standardUnknown20="0x100" <------------------- this is 0x0000 (grid reference ?) and 0x000'''1''' (unknown) | |||
***standardUnknown21="0x100" <------------------- this is 0x0000 (grid reference ?) and 0x000'''1''' (unknown) | |||
***standardUnknown22="0x100" <------------------- this is 0x0000 (grid reference ?) and 0x000'''1''' (unknown) | |||
= | *'''ps3logo''' grid references | ||
**position | |||
***standardUnknown17="0x0" <---------------------- this is 0x0000 (grid reference ?) and 0x0000 (unknown) | |||
***standardUnknown18="0x0" <---------------------- this is 0x0000 (grid reference ?) and 0x0000 (unknown) | |||
***standardUnknown19="0x0" <---------------------- this is 0x0000 (grid reference ?) and 0x0000 (unknown) | |||
**size | |||
***standardUnknown20="0x9c020100" <----------- this is 0x0'''29c''' (grid reference) and 0x000'''1''' (unknown) | |||
***standardUnknown21="0x9d020100" <----------- this is 0x0'''29d''' (grid reference) and 0x000'''1''' (unknown) | |||
***standardUnknown22="0x100" <------------------- this is 0x0000 (grid reference ?) and 0x000'''1''' (unknown) | |||
---- | |||
Now to get the correct value from the grid references is needed to look at the [[XMB Layouts]] files '''from the same firmware !!!''' | |||
The grid reference value needs to be converted to decimal, and added a +1 (because it seems inside the .txt file the lines are counted starting with zero, so first line is number 0) | |||
The | |||
*'''scelogo''' grid references | |||
**position | |||
***standardUnknown17="0x98020000" <----------- the first 2 bytes 0x0'''298''' swapped and converted to decimal = 664 + 1 = '''line 665''' of [[XMB Layouts]] files | |||
***standardUnknown18="0x99020000" <----------- the first 2 bytes 0x0'''299''' swapped and converted to decimal = 665 + 1 = '''line 666''' of [[XMB Layouts]] files | |||
***standardUnknown19="0x0" <---------------------- the first 2 bytes 0x0000 swapped and converted to decimal = 0 | |||
**size | |||
***standardUnknown20="0x9a020100" <----------- the first 2 bytes 0x0'''29a''' swapped and converted to decimal = 666 + 1 = '''line 667''' of [[XMB Layouts]] files | |||
***standardUnknown21="0x9b020100" <----------- the first 2 bytes 0x0'''29b''' swapped and converted to decimal = 667 + 1 = '''line 668''' of [[XMB Layouts]] files | |||
***standardUnknown22="0x100" <------------------- the first 2 bytes 0x0000 swapped and converted to decimal = 0 | |||
= | *'''ps3logo''' grid references | ||
**position | |||
***standardUnknown17="0x0" <---------------------- the first 2 bytes 0x0000 swapped and converted to decimal = 0 | |||
***standardUnknown18="0x0" <---------------------- the first 2 bytes 0x0000 swapped and converted to decimal = 0 | |||
***standardUnknown19="0x0" <---------------------- the first 2 bytes 0x0000 swapped and converted to decimal = 0 | |||
**size | |||
***standardUnknown20="0x9c020100" <----------- the first 2 bytes 0x0'''29c''' swapped and converted to decimal = 668 + 1 = '''line 669''' of [[XMB Layouts]] files | |||
***standardUnknown21="0x9d020100" <----------- the first 2 bytes 0x0'''29d''' swapped and converted to decimal = 669 + 1 = '''line 670''' of [[XMB Layouts]] files | |||
***standardUnknown22="0x100" <------------------- the first 2 bytes 0x0000 swapped and converted to decimal = 0 | |||
{| class="wikitable" style="font-size:small;" | |||
|+ [[XMB]] Layout grid tables (from 4.76 firmware) | |||
! Line number !! layout_grid_table_272.txt !! layout_grid_table_480.txt !! layout_grid_table_720.txt !! layout_grid_table_1080.txt | |||
|- | |||
! 1 | |||
| 0 || 0 || 0 || 0 | |||
|- | |||
! 2 | |||
| 1 || 1 || 1 || 1 | |||
|- | |||
! 665 | |||
| 177 || 133 || 266 || 400 | |||
|- | |||
! 666 | |||
| 0 || 0 || 0 || 0 | |||
|- | |||
! 667 | |||
| 455 || 455 || 682 || 1024 | |||
|- | |||
! 668 | |||
| 28 || 28 || 42 || 64 | |||
|- | |||
! 669 | |||
| 533 || 533 || 800 || 1200 | |||
|- | |||
! 670 | |||
| 56 || 56 || 85 || 128 | |||
|- | |||
|} | |||
Now replacing the values from layout_grid_table_1080.txt to see how are displayed in a HD screen: | |||
*''' | *'''page_coldboot''' | ||
**'''scelogo''' for 1080p resolution | |||
***position (displaced 400 pixels right from the center of the screen) | |||
****X=400 | |||
****Y=0 | |||
****Z=0 | |||
***size (the original image tex_scelogo.gim is 512x32 pixels, but is displayed exactlly at double his size 1024x64) | |||
****X=1024 | |||
****Y=64 | |||
****Z=0 | |||
= | *'''page_gameboot''' | ||
* | **'''ps3logo''' for 1080p resolution | ||
* | ***position (center of the screen) | ||
* | ****X=0 | ||
* | ****Y=0 | ||
****Z=0 | |||
***size (the original image tex_ps3logo.gim is 512x54 pixels, but displayed at 1200x128<!--aspect ratio broken (by a sony mistake or on purpose ?), the correct size to preserve the aspect ratio of the original after scaling is 1200x127-->) | |||
****X=1200 | |||
****Y=128 | |||
****Z=0 | |||
{{#ev:youtube|tgPXlMbchFM}} | |||
{{#ev:youtube|GUb1gIKhwMU}} |