Talk:RCOXML Objects: Difference between revisions

From PS3 Developer wiki
Jump to navigation Jump to search
(→‎Grid references example: finally, a bit messy though, if there is other people looking at this feel free to edit the pages related)
 
(173 intermediate revisions by 2 users not shown)
Line 1: Line 1:
=RCOXML format versions=
=WidgetType=
See the "paf" [[VSH Exports]], [https://www.psx-place.com/threads/custom-xai_plugin-source.12455/page-3#post-356203 psx-place talk], and [https://github.com/TheRouletteBoi/VirtualShell/blob/main/include/vsh/paf.hpp paf.hpp]


*Objects supported by PSP, but with added attributes specific for PS3
The goal of this table is to replace the unnoficial rcomage names by the official codenames. The official codenames are used in the VSH export functions (in text format) but inside the RCO internal file structure this names in text format doesnt exists, instead of text strings the RCO structure only stores the ID in hexadecimal format based on the [[Template:RCO TOC entry types|RCO TOC entry types]]<br>
**Standard object attributes (6 attributes added)
Rcomage uses a file named tagmap.ini intended to convert the ID (hex) value by the name (text string) when is extracting the RCO contents, and back from text to hex when compiling an RCO
**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)
A bit of background story... rcomage was made by zinga burga for PSP, at that time he had to figure the names by looking at other related text strings, he used the exact codename only in few of them, and he invented other unnofficial names based on educated guesses, but there are many innacurate names and a few unknowns<br>
**ObjUnknown0x1B
At the initial steps of rcomage development zinga burga realized that it was posible to extract the info inside the RCO structure as an XML format (this is something sony made on purpose), but inside the RCO files there is not any XML. This is when zinga burga coined the term "RCOXML Objects" because rcomage is representing the RCO contents in XML format (and this wiki respected the term), but in the names of the VSH export function are named '''WidgetType''', in other words, we could say the table below is a list of '''Widgets''' ordered by his '''Type'''<br>
**CheckboxGroup
At some point kakaroto and geohot updated rcomage source code to add support for PS3 (they had to change the endianess and added definitions for a few RCOXML objects only supported by PS3 that was breaking the output) but maybe there are new objects specific for PS3 over ID 0x081F. Anyway, so far rcomage supports up to ID 0x081F (32 objects)
**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)
*Notes
**ObjUnknown0xB
**It seems the items ('''XItem''' 0x080C, '''MItem''' 0x080A, '''LItem''' 0x0814, '''IItem''' 0x0818) doesnt have VSH exports because are terminal objects located at bottom of the hierarchy (are always the children of a parent "list")
**XItem
**The codename "Prim" seems to be inherited from PSX->PSP->PS3 and seems to be a [https://en.wikipedia.org/wiki/Geometric_primitive geometric primitive]. In the PSX XMB the options availables for it was: type="rect", type="line", type="outline". It seems to be used to draw lines, frames, etc...
**ModelObject
**LItem
**Icon
**UButton
**ObjUnknown0x1B


=Float conversions=
<div>
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
<div style="float:left;">
{| class="wikitable" style="line-height:1em; font-size:1em"
|-
! rowspan="2" | [[Template:RCO TOC entry types|NodeType]] !! colspan="2" | Name !! colspan="2" | paf [[VSH Exports#paf|VSH Exports]] !! rowspan="2" | Notes
|-
! <abbr title="and name in wiki by now, at some point could be changed">RCOmage</abbr> !! Official !! NID !! Sample
|-
| colspan="6" style="text-align:center; background:#ddd" | Supported by {{icon content psp|50px}} and {{icon content ps3|50px}}
|-
| 0x0800 || {{cellcolors|#d53}} ObjectTree || ? || ? || ? ||
|-
| 0x0801 || {{cellcolors|#f93}} Page || {{cellcolors|#79d}} '''Scene''' || style="font-family:monospace" | 0x41BBFE5E || paf::Ph'''Scene'''::WidgetType(void) ||
|-
| 0x0802 || {{cellcolors|#8e8}} Plane || {{cellcolors|#79d}} '''Plane''' || style="font-family:monospace" | 0x10DEDCC7 || paf::Ph'''Plane'''::WidgetType(void) ||
|-
| 0x0803 || {{cellcolors|#8e8}} Button || {{cellcolors|#79d}} '''Button''' || style="font-family:monospace" | 0x24A5BD6B || paf::Ph'''Button'''::WidgetType(void) ||
|-
| 0x0804 || {{cellcolors|#f93}} XMenu || {{cellcolors|#79d}} '''XmBar''' || style="font-family:monospace" | 0x703117AD || paf::Ph'''XmBar'''::WidgetType(void) ||
|-
| 0x0805 || {{cellcolors|#f93}} XMList || {{cellcolors|#79d}} '''XmList''' || style="font-family:monospace" | 0x4FF7B8A9 || paf::Ph'''XmList'''::WidgetType(void) ||
|-
| 0x0806 || {{cellcolors|#d53}} XList || XmItem ? || style="font-family:monospace" | 0xC84FD77B ? || paf::Ph'''XmItem'''::WidgetType(void) ? ||
|-
| 0x0807 || {{cellcolors|#8e8}} Progress || {{cellcolors|#79d}} '''Progress''' || style="font-family:monospace" | 0xE801C345 || paf::Ph'''Progress'''::WidgetType(void) ||
|-
| 0x0808 || {{cellcolors|#8e8}} Scroll || {{cellcolors|#79d}} '''Scroll''' || style="font-family:monospace" | 0x009207F4 || paf::Ph'''Scroll'''::WidgetType(void) ||
|-
| 0x0809 || {{cellcolors|#f93}} MList || {{cellcolors|#79d}} '''MenuList''' || style="font-family:monospace" | 0xA98865F8 || paf::Ph'''MenuList'''::WidgetType(void) || The parent of MenuItem 0x080A
|-
| 0x080A || {{cellcolors|#f93}} MItem || MenuItem ? || ? || ? || The children of MenuList 0x0809
|-
| 0x080B || {{cellcolors|#d53}} ObjUnknown0xB || ? || ? || ? || The parent of XItem 0x080C ?
|-
| 0x080C || {{cellcolors|#d53}} XItem || ? || ? || ? || The children of ObjUnknown0xB 0x080B ?
|-
| 0x080D || {{cellcolors|#8e8}} Text || {{cellcolors|#79d}} '''Text''' || style="font-family:monospace" | 0xB7DFCE90 || paf::Ph'''Text'''::WidgetType(void) ||
|-
| 0x080E || {{cellcolors|#d53}} ModelObject || Model ? || ? || ? || This is intended to load a (3D model) [https://www.ifcaro.net/qhimm/index.php/PSP/GMO_Format .GMO] file for the PSP wave
|-
| 0x080F || {{cellcolors|#d53}} Spin || ItemSpin ? || style="font-family:monospace" | 0x4C36ABBB ? || paf::Ph'''ItemSpin'''::WidgetType(void) ? || In the VSH exports page is mentioned the codename "PhSpin" but is missing the generic paf::PhSpin::WidgetType(void)
|-
| 0x0810 || {{cellcolors|#d53}} Action || ? || ? || ? ||
|-
| 0x0811 || {{cellcolors|#f93}} ItemSpin || {{cellcolors|#79d}} '''NumSpin''' || style="font-family:monospace" | 0x59A11C82 || paf::Ph'''NumSpin'''::WidgetType(void) ||
|-
| 0x0812 || {{cellcolors|#f93}} Group || {{cellcolors|#79d}} '''Widget''' || style="font-family:monospace" | 0x546B3D02 || paf::Ph'''Widget'''::WidgetType(void)
|-
| 0x0813 || {{cellcolors|#f93}} LList || List || style="font-family:monospace" | 0xD64EDE7C || paf::Ph'''List'''::WidgetType(void) || The parent of Item 0x0814
|-
| 0x0814 || {{cellcolors|#f93}} LItem || Item ? || ? || ? || The children of List 0x0813
|-
| 0x0815 || {{cellcolors|#f93}} Edit || {{cellcolors|#79d}} '''IPAddr''' || style="font-family:monospace" | 0x3806365F || paf::Ph'''IPAddr'''::WidgetType(void) ||
|-
| 0x0816 || {{cellcolors|#8e8}} Clock || {{cellcolors|#79d}} '''Clock''' || style="font-family:monospace" | 0x545D47A2 || paf::Ph'''Clock'''::WidgetType(void) ||
|-
| 0x0817 || {{cellcolors|#f93}} IList || {{cellcolors|#79d}} '''InfoList''' || style="font-family:monospace" | 0xF7630798 || paf::Ph'''InfoList'''::WidgetType(void) || The parent of InfoItem 0x0818
|-
| 0x0818 || {{cellcolors|#f93}} IItem || InfoItem ? || ? || ? || The children of InfoList 0x0817
|-
| 0x0819 || {{cellcolors|#d53}} Icon || ? || ? || ? || Terminal object, same specific attributes than all the other "items". The difference with standard "items" is "icon" have standard attributes (but the standard "items" doesnt)
|-
| 0x081A || {{cellcolors|#d53}} UButton || ? || ? || ? || This is an improved version of '''Button''' 0x0803
|-
| colspan="6" style="text-align:center; background:#ddd" | Supported by {{icon content ps3|50px}} only
|-
| 0x081B || {{cellcolors|#d53}} ObjUnknown0x1B || ? || ? || ? ||
|-
| 0x081C || {{cellcolors|#f93}} CheckBoxGroup || {{cellcolors|#79d}} '''CheckBoxList''' || style="font-family:monospace" | 0x90F4F801 || paf::Ph'''CheckBoxList'''::WidgetType(void) || The parent of CheckBox 0x081D<br>This is an improved version of '''MenuList''' 0x0809
|-
| 0x081D || {{cellcolors|#f93}} CheckboxItem || CheckBox || style="font-family:monospace" | 0xBF66BF2D || paf::Ph'''CheckBox'''::WidgetType(void) || The children of CheckBoxList 0x081C
|-
| 0x081E || {{cellcolors|#f93}} Meter || {{cellcolors|#79d}} '''LevelMeter''' || style="font-family:monospace" | 0xC88CA4B2 || paf::Ph'''LevelMeter'''::WidgetType(void) ||
|-
| 0x081F || {{cellcolors|#f93}} EditBox || LabelText || style="font-family:monospace" | 0xDDD4ACF6 || paf::Ph'''LabelText'''::WidgetType(void) || This is an improved version of '''Text''' 0x080D
|}


To make the decimal conversion you can use this web http://www.h-schmidt.net/FloatConverter/IEEE754.html
<center>
{| class="wikitable" style="font-size:small"
|-
!rowspan="5" | Color legend:
|-
! {{cellcolors|#79d}} Blue
| The official codename has been identifyed 100%
|-
! {{cellcolors|#8e8}} Green
| The name in rcomage matches with the official codename
|-
! {{cellcolors|#f93}} Orange
| The name in rcomage doesnt matches with the official codename, but has been identifyed (this are the easy ones)
|-
! {{cellcolors|#d53}} Red
| The name in rcomage doesnt matches with the official codename, and is doubtfull which is the correct name
|}
</center>
</div></div><div style="clear:both;"></div>


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'''
*Other VSH export candidates:
**paf::Ph'''LabelPrim'''::WidgetType(void)
**paf::Ph'''PlaneDiv'''::WidgetType(void)
**paf::Ph'''LabelPrimDiv'''::PhLabelPrimDiv(paf::PhWidget *, paf::PhAppear *)
**paf::Ph'''Camera'''::PhCamera(paf::PhWidget *, paf::PhAppear *)


=Screen resolution adaptative values=
*Spins confussion
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 object 0x0811 (named "ItemSpin" in RCOmage) is officially codenamed "PhNumSpin" (the name was swapped), but the object 0x080F (named "Spin" in RCOmage) has not been identifyed yet, probably is officially codenamed "PhItemSpin". Additionally there is another codename for '''PhSpin''' that is a bit confusing by now. Is not clear yet if there are 2 or 3 spin objects
**The object named '''Spin''' by rcomage has been found in official firmware using event names with the word "ispin" (a short form of "ItemSpin"):
***object2:lftv_page212_group000_'''ispin'''000 <--- this is loading another "object" so the name '''ispin''' belongs to the other object
***object2:lftv_page212_group000_'''ispin'''001 <--- this is loading another "object" so the name '''ispin''' belongs to the other object
**In the VSH exports page there are 3 exports that returns names related with spins (but one of the returned strings seems to be wrong)
***const char* paf_4C36ABBB() <-- returns "PhItemSpin" (_ZN3paf10PhItemSpin10WidgetTypeEv)
***const char* paf_CA9160F6() <-- returns "PhNumSpin" (_ZNK3paf9PhNumSpin13GetWidgetTypeEv)
***const char* paf_59A11C82() <-- returns "PhNumSpin" (_ZN3paf9PhNumSpin10WidgetTypeEv)


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
*Other related VSH exports
**PAF_Resource_DOMGetNodeID returns the widget name (ie: "page_game_config")
**PAF_Resource_DOMGetNodeType returns the widget type (ie: 0x801)
**PAF_Resource_DOMGetNodeData
**PAF_Resource_DOMGetNodeChildByID
**PAF_Resource_DOMGetNodeChildByPos
**PAF_Resource_DOMGetNodeFirstChild
**PAF_Resource_DOMGetNodeNext
**PAF_Resource_GetPageNodeByID
**PAF_Resource_GetWidgetNodeByID
**PAF_Resource_ResolveRefNode
**PAF_Resource_ResolveRefString
**PAF_Resource_ResolveRefWString


==Standard object attributes==
==Menu lists and menu items associations==
Are used 5485 times in 4.76 PS3 firmware, most objects uses them so is the most important group of attributes and are critical to fully understand how all the other objects works. Also the way that is stored some of the "unknown" attribute values is the same used in other unknowns from other objects. in few words, by identifying this unknowns there will be a lot of other objects affected not only in the "standard attributes" but also in the "specific attributes"
There are 6 groups of list/item associated with each other that was given consecutive IDs in hexadecimal. The fact that was given consecutive IDs means each group of list/item was implemented at the same time because requires each other (an "item" requires a parent "list", and a "list" without children "items" doesnt makes sense)


*Are pointers to the grid tables !!!, see [[XMB Layouts]]. The firmware loads the rco, calculates the pointer to a line of the grid table, and loads the value from the grid table
*The "items" '''doesnt''' have the 21 [[Template:RCO_TOC_Objects_standard_attributes|standard attributes]], '''only''' have 3 specific attributes (usually a ref/text/image). This is an easy way to identify them, by the abscense of the [[Template:RCO_TOC_Objects_standard_attributes|standard attributes]]
*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)
*In the proposed names below, the "group1" and "group2" are just temporal names because is partially unknown what represents (one of them is position, the other is not clear)
*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)
**standardUnknown17 should be renamed to something like...... gridRefgroup1X
**standardUnknown18 should be renamed to something like...... gridRefgroup1Y
**standardUnknown19 should be renamed to something like...... gridRefgroup1Z
**standardUnknownInt20 should be renamed to something like... gridRefgroup2X
**standardUnknownInt21 should be renamed to something like... gridRefgroup2Y
**standardUnknown22 should be renamed to something like...... gridRefgroup2Z


{{RCOXML_standard_object_attributes}}
*The "lists" '''does''' have the 21 [[Template:RCO_TOC_Objects_standard_attributes|standard attributes]], followed by a variable number of specific attributes. All the lists (except 0x0804 and 0x0806) seems to use specific override attributes intended to adjust them dinamically for the different screen resolutions supported by PS3, see: [[XMB Layouts]].


===Unknown17, Unknown18, Unknown19===
*The consecutive ID's is a handy way to identify them, it means there is an "item" ID next to each "list" ID (or the other way around, there is a "list" ID next to each "item" ID)
The 3 are related, and stores the value in the same format (this format is also used by a lot of specific attributes of other unknowns), some examples:


standardUnknown17="0xf6010100" standardUnknown18="0xf7010100" standardUnknown19="0xf8010100"
{| class="wikitable" style="line-height:1em; font-size:1em"
standardUnknown17="0xf9010100" standardUnknown18="0xfa010100" standardUnknown19="0xfb010100"
|-
standardUnknown17="0x80040100" standardUnknown18="0x81040100" standardUnknown19="0x82040100"
! [[Template:RCO TOC entry types|NodeType]] !! RCOmage name !! Displayed as !! Notes
standardUnknown17="0x84040100" standardUnknown18="0x85040100" standardUnknown19="0x86040100"
|-
standardUnknown17="0x120f0100" standardUnknown18="0x140f0100" standardUnknown19="0x6000100"
| 0x0804 || XMenu || XMB Main Menu, horizontal list placeholder || rowspan="3" | Main XMB
standardUnknown17="0xfc0e0000" standardUnknown18="0xfe0e0000" standardUnknown19="0x6000000"
|-
standardUnknown17="0x4000100" standardUnknown18="0x5000100" standardUnknown19="0x6000100"
| 0x0805 || XMList || XMB Main Menu, horizontal list item
|-
| 0x0806 || XList || XMB Main Menu, vertical list placeholder
|-
| colspan="4" style="border-left:hidden; border-right:hidden; padding:10px" |
|-
! [[Template:RCO TOC entry types|NodeType]] !! RCOmage name !! Displayed as !! Notes
|-
| 0x0809 || MList || Context Menu, vertical list placeholder ||rowspan="2" | Menu at right side of the screen<br>enabled by pressing triangle over a game/app icon
|-
| 0x080A || MItem || Context Menu, vertical list item
|-
| colspan="4" style="border-left:hidden; border-right:hidden; padding:10px" |
|-
! [[Template:RCO TOC entry types|NodeType]] !! RCOmage name !! Displayed as !! Notes
|-
| 0x080B || ObjUnknown0xB || rowspan="2" | ? || rowspan="2" | 0x080B is the "List"<br>0x080C is the "Item"
|-
| 0x080C || XItem
|-
| colspan="4" style="border-left:hidden; border-right:hidden; padding:10px" |
|-
! [[Template:RCO TOC entry types|NodeType]] !! RCOmage name !! Displayed as !! Notes
|-
| 0x0813 || LList || Editable Menu, horizontal list placeholder || rowspan="2" | Used in network settings
|-
| 0x0814 || LItem || Editable Menu, horizontal list item
|-
| colspan="4" style="border-left:hidden; border-right:hidden; padding:10px" |
|-
! [[Template:RCO TOC entry types|NodeType]] !! RCOmage name !! Displayed as !! Notes
|-
| 0x0817 || IList || Information Menu, vertical list placeholder || rowspan="2" | Used in audio file info
|-
| 0x0818 || IItem || Information Menu, vertical list item
|-
| colspan="4" style="border-left:hidden; border-right:hidden; padding:10px" |
|-
! [[Template:RCO TOC entry types|NodeType]] !! RCOmage name !! Displayed as !! Notes
|-
| 0x081C || CheckboxGroup || Checkbox Menu, horizontal list placeholder || rowspan="2" | Used in poweroff screen
|-
| 0x081D || CheckboxItem || Checkbox Menu, horizontal list item
|}


Is not very usuall to see the 3 used consecutivelly (most times the first or the last stores a 0x0000, 0x0001, 0x0100, or 0x0101), but are used this way several times inside firmware, and its values uses to increases in + 0x1000000 or + 0x2000000
==ItemsCount or ItemNum attribute from list objects==
The first specific attribute of the list objects (in other words, the attribute in position 22, located inmediatly after the 21 [[Template:RCO_TOC_Objects_standard_attributes|standard attributes]]) indicates how many chidren there are in the list. In RCOmage this attribute is named "ItemsCount" but it seems the codename is "ItemNum", this VSH exports are used to change the value dinamically to hide/show the items from a list:


===Unknown20, Unknown21, Unknown22===
*<strike>paf::Ph'''XmBar'''::SetItemNum(int)</strike> not mentioned in [[VSH Exports#paf|VSH Exports]] page
Seems related too, <strike>but uses a different value format</strike>, some examples:
*paf::Ph'''XmList'''::SetItemNum(int)
**paf::Ph'''XmList'''::Redraw(int)
*<strike>paf::Ph'''MenuList'''::SetItemNum(int)</strike> not mentioned in [[VSH Exports#paf|VSH Exports]] page
*paf::Ph'''List'''::SetItemNum(int)
**paf::Ph'''List'''::Redraw(void)
*paf::Ph'''InfoList'''::SetItemNum(int)
**<strike>paf::Ph'''InfoList'''::Redraw(void)</strike> not mentioned in [[VSH Exports#paf|VSH Exports]] page
*<strike>paf::Ph'''CheckBoxList'''::SetItemNum(int)</strike> not mentioned in [[VSH Exports#paf|VSH Exports]] page


Attribute 20 and 21 of the examples below are not valid because was extracted as "int" !!!
=Objects with additional override attributes=
The override attributes are intended to adjust the position and size of the objects dinamically for the different screen resolutions supported by PS3, see: [[XMB Layouts]]<br>
Most of the objects definitions starts with the 21 [[Template:RCO_TOC_Objects_standard_attributes|standard attributes]] that includes 6 overrides (''positionOverrideX, positionOverrideY, positionOverrideZ, sizeOverrideX, sizeOverrideY, sizeOverrideZ'')<br>
But there are a few objects with additional overrides, all this additional overrides (different than 6 overrides from the [[Template:RCO_TOC_Objects_standard_attributes|standard attributes]]) are unknown, seems to be related with font sizes, linespaces or stuff that requires an individual visual adjustment


standardUnknownInt20="0x1029a" standardUnknownInt21="0x1029b" standardUnknown22="0x100"
*List objects
standardUnknownInt20="0x10cfa" standardUnknownInt21="0x10cfb" standardUnknown22="0x100"
**'''MenuList''' 0x0809 and '''CheckboxList''' 0x081C
standardUnknownInt20="0x10f38" standardUnknownInt21="0x10f39" standardUnknown22="0x100"
***6 overrides from the [[Template:RCO_TOC_Objects_standard_attributes|standard attributes]] + 3 specific override atributes (override something size XYZ ?)
standardUnknownInt20="0x10b75" standardUnknownInt21="0x10b76" standardUnknown22="0x100"
**'''List''' 0x0813
standardUnknownInt20="0x10675" standardUnknownInt21="0x10676" standardUnknown22="0x100"
***6 overrides from the [[Template:RCO_TOC_Objects_standard_attributes|standard attributes]] + 2 specific override atributes (override something size XY ?)
standardUnknownInt20="0x10679" standardUnknownInt21="0x1067a" standardUnknown22="0x100"
**'''InfoList''' 0x0817
standardUnknownInt20="0x10683" standardUnknownInt21="0x10684" standardUnknown22="0x100"
***6 overrides from the [[Template:RCO_TOC_Objects_standard_attributes|standard attributes]] + 1 specific override atribute (override something size X ?)
standardUnknownInt20="0x1067f" standardUnknownInt21="0x10680" standardUnknown22="0x100"
standardUnknownInt20="0x1068b" standardUnknownInt21="0x1068c" standardUnknown22="0x100"
standardUnknownInt20="0x10687" standardUnknownInt21="0x10688" standardUnknown22="0x100"
standardUnknownInt20="0x1068b" standardUnknownInt21="0x1068c" standardUnknown22="0x100"
standardUnknownInt20="0x10007" standardUnknownInt21="0x10008" standardUnknown22="0x100"
standardUnknownInt20="0x10d94" standardUnknownInt21="0x10d95" standardUnknown22="0x100"
standardUnknownInt20="0x10d94" standardUnknownInt21="0x10d96" standardUnknown22="0x100"
standardUnknownInt20="0x10d9b" standardUnknownInt21="0x10d9c" standardUnknown22="0x100"
standardUnknownInt20="0x10d7d" standardUnknownInt21="0x10d7e" standardUnknown22="0x100"
standardUnknownInt20="0xef8"  standardUnknownInt21="0xef9"  standardUnknown22="0x840d0000"


*standardUnknown22 (used 5485 times) is related to the Z axis, with value:
*Text objects
**"0x0000 0000" (5411 times) <---- no grid reference (first 2 bytes), the image is laying in the same plane than the world coordinates center (last 2 bytes)
**'''Text''' 0x080D and '''LabelText''' 0x081F
**"0x0000 0100" (73 times) <---- no grid reference (first 2 bytes), the image is displaced 1 pixel closer to the camera (last 2 bytes swaped), this trick is used frequently in other parts of the firmware (like in the script of coldboot.raf) when images are overlapped to assure this one is displayed on top of the others
***6 overrides from the [[Template:RCO_TOC_Objects_standard_attributes|standard attributes]] + 3 specific override atributes (override something size XYZ ?)
**"0x840d 0000" (1 time, inside hknw_plugin.rco) <--- the z axis displacement value is stored in the grid layout table (first 2 bytes swaped, converted to decimal, + 1 = line 3461)


Example from hknw_plugin.rco
*Other objects
{{Boxcode|content=<syntaxhighlight lang="xml">
**'''LevelMeter''' 0x081E
<Plane name="hknw_menu_help1_LR" 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="0xf60e0000" standardUnknown18="0xf70e0000" standardUnknown19="0x6000000" standardUnknownInt20="0xef8" standardUnknownInt21="0xef9" standardUnknown22="0x840d0000" planeImage="image:tex_Arrow_LR1" planeDisplayMode="0x0"></Plane>
***6 overrides from the [[Template:RCO_TOC_Objects_standard_attributes|standard attributes]] + 1 specific override atribute (override something size X ?)
</syntaxhighlight>}}


=ObjUnknown0xB=
The object named ObjUnknown0xB by RCOmage (ID 0x80B) seems to be a list (the parent of ID 0x80C). If this speculation is true it means it should start with the 21 [[Template:RCO_TOC_Objects_standard_attributes|standard attributes]], the attribute number 22 should indicate how many children it have (attribute name "ItemsCount" in RCOmage, or "ItemNum" in official code), followed by some unknown attributes (similar than the other list objects), and the last attributes should be [[Template:RCO_TOC_reference_types|events]], as example: <code><Name attribute="event:native:/OnFocusIn"/></code>


----
=Rcomage unknown object attributes=
The value format seems the same in all the 6 unknowns, because the 0x840d0000 is storing bytes in the order: xx0yzzzz (this pattern matches with lot of other unknown attributes, standard and specific)
*See: [[Talk:Rcomage#objattribdef-ps3.ini]]
At the time of documenting the RCO format for wiki it was posible to identify some/lot of unknown attributes, in the link there are a few of them listed as dirty notes (later was identifyed some more that are not included in the link). At this point there is no need for that dirty notes because the new names of the identifyed attributes was used in the tables in wiki, the dirty notes are just kept to have a record of the changes, and liked here because are very related with this page (needs to be cleaned up together with this talk page)


The zero is a real zero and uses to appear in that position (when the pointer is an small number) because the first 2 bytes needs to be swapped like this: 0yxx
=Some textures using attribute names=
The names of some images indicates the attribute names of some RCOXML objects


The zzzz seems separated, and usually stores only a 0x0000, 0x0001, 0x0100, or 0x0101 <--- this ones are the "unknown flags" maybe related with the factor table (and this examples are not accurate)
<Image name="tex_default_text_field" src="Images\tex_default_text_field.png" format="gim" compression="zlib" unknownByte="0" />
<Image name="tex_default_text_focus" src="Images\tex_default_text_focus.png" format="gim" compression="zlib" unknownByte="0" />
<Image name="tex_default_text_field_focus" src="Images\tex_default_text_field_focus.png" format="gim" compression="zlib" unknownByte="0" />
<Image name="tex_default_progress_base" src="Images\tex_default_progress_base.png" format="gim" compression="zlib" unknownByte="0" />
<Image name="tex_default_progress_base_shadow" src="Images\tex_default_progress_base_shadow.png" format="gim" compression="zlib" unknownByte="0" />
<Image name="tex_default_progress_slider" src="Images\tex_default_progress_slider.png" format="gim" compression="zlib" unknownByte="0" />
<Image name="tex_default_scroll_base" src="Images\tex_default_scroll_base.png" format="gim" compression="zlib" unknownByte="0" />
<Image name="tex_default_scroll_base_shadow" src="Images\tex_default_scroll_base_shadow.png" format="gim" compression="zlib" unknownByte="0" />
<Image name="tex_default_scroll_slider" src="Images\tex_default_scroll_slider.png" format="gim" compression="zlib" unknownByte="0" />
<Image name="tex_default_scroll_arrow_up" src="Images\tex_default_scroll_arrow_up.png" format="gim" compression="zlib" unknownByte="0" />
<Image name="tex_default_scroll_arrow_up_shadow" src="Images\tex_default_scroll_arrow_up_shadow.png" format="gim" compression="zlib" unknownByte="0" />
<Image name="tex_default_scroll_arrow_down" src="Images\tex_default_scroll_arrow_down.png" format="gim" compression="zlib" unknownByte="0" />
<Image name="tex_default_scroll_arrow_down_shadow" src="Images\tex_default_scroll_arrow_down_shadow.png" format="gim" compression="zlib" unknownByte="0" />
<Image name="tex_default_spin_arrow_up" src="Images\tex_default_spin_arrow_up.png" format="gim" compression="zlib" unknownByte="0" />
<Image name="tex_default_spin_arrow_up_shadow" src="Images\tex_default_spin_arrow_up_shadow.png" format="gim" compression="zlib" unknownByte="0" />
<Image name="tex_default_spin_arrow_down" src="Images\tex_default_spin_arrow_down.png" format="gim" compression="zlib" unknownByte="0" />
<Image name="tex_default_spin_arrow_down_shadow" src="Images\tex_default_spin_arrow_down_shadow.png" format="gim" compression="zlib" unknownByte="0" />
<Image name="tex_default_check" src="Images\tex_default_check.png" format="gim" compression="zlib" unknownByte="0" />
<Image name="tex_default_check_shadow" src="Images\tex_default_check_shadow.png" format="gim" compression="zlib" unknownByte="0" />
<Image name="tex_default_lvmeter_on" src="Images\tex_default_lvmeter_on.png" format="gim" compression="zlib" unknownByte="0" />
<Image name="tex_default_lvmeter_off" src="Images\tex_default_lvmeter_off.png" format="gim" compression="zlib" unknownByte="0" />
<Image name="tex_default_lvmeter_focus" src="Images\tex_default_lvmeter_focus.png" format="gim" compression="zlib" unknownByte="0" />
<Image name="tex_default_lvmeter_bg" src="Images\tex_default_lvmeter_bg.png" format="gim" compression="zlib" unknownByte="0" />


==Grid references example==
=anchorMode=
For more detailed info see the changelog of [[Talk:Custom_render_plugin]].rco and [[XMB Layouts]]
[[Rcomage]] has some problems with this attribute from PS3 RCOs, it manages the value as 4 bytes length but in the internal RCO file structure is divided in 2 chunks of 2 bytes each. The anchor mode is specifyed by the first byte of the second chunk, is unknown why sony "reserved" 2 bytes for the first chunk (first chunk is always filled with zeroes). All this is a bit confusing and what im saying could not be completly accurate because the different endianess in between PSP and PS3 and what RCOmage does internally. RCOmage allows to choose a "data type" for every attribute by editing the file objectattribdef-ps3.ini. There is no way to extract the value accuratelly so the alternatives are to set it as "int", or you can set it to "unk" instead, this way it will be managed as raw data (no conversion applyed so you can see the real value when the info is extracted to XML)


*In firmware 4.50 custom_render_plugin.rco contains 3 '''plane objects''' using the standard attributed definitions:
*Examples:
**Page object '''page_coldboot''' - is the old/classic coldboot from firmware 1.00 used when the console boots
**Extracted as "int"
***Plane object '''scelogo''' - is an image of 512x32 pixels size. Uses grid references
***anchorMode="0x320000"
**Page object '''page_coldboot2''' - is the new coldboot introduced in firmware 2.70
**Extracted as "unk"
***Plane object '''coldboot_ps3logo''' - is a placeholder for the [[coldboot.raf]] animation. Doesnt uses grid references
***anchorMode="0x3200"
**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)
 
*'''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
! 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:
=Events notes=
*All the attribute event names in rcomage and here in wiki contains the characters '''On''' before the event name to indicate that is an event (it helps when you are reading the xml code generated by rcomage), and because some official event strings found in OFW uses it too, but the real codenames of the events doesnt seems to have that '''On''' (the real codename is what goes at the right of the "On"). As example: the vsh export ''paf::PhWidget::HandleFocusInEvent(paf::PhEvent *)'' is related with the attribute '''OnFocusIn''' ...and...  ''paf::PhWidget::HandleFocusOutEvent(paf::PhEvent *)'' with '''OnFocusOut'''


*page_coldboot'''
*'''OnScrollIn''' and '''OnScrollOut''' are used in the "list" objects, the "In" and "Out" represents to move the cursor one item in the "list". The confusing detail is the "lists" can be horizontal (along X axis) or vertical (along Y axis). So it seems in a horizontal list (such the main XmBar) the "In/Out" are "Right/Left", and in a vertical list the "In/Out" should be "Down/Up" (this is just a theory based on the existence of vsh exports: ''paf::PhXmBar::ScrollRight(float, paf::PhEvent *)'' ...and... ''paf::PhXmBar::ScrollLeft(float, paf::PhEvent *)'', but has not been verifyed)
**'''scelogo''' for 1080p resolution
***position (center of the screen, displaced 400 pixels right)
****X=400
****Y=0
****Z=0
***size (the original image scelogo.gim is 512x32 pixels, but is displayed at double his size 1024x64)
****X=1024
****Y=64
****Z=0


*'''page_gameboot'''
=Links, etc...=
**'''ps3logo''' for 1080p resolution
*[https://translate.googleusercontent.com/translate_c?depth=1&hl=es&rurl=translate.google.com&sl=auto&tl=en&u=http://ctfs.wiki.fc2.com/wiki/RCOmageXML%25E3%2581%25A7%25E4%25BD%25BF%25E7%2594%25A8%25E3%2581%2595%25E3%2582%258C%25E3%2582%258B%25E8%25A6%2581%25E7%25B4%25A0%25E3%2581%25A8%25E5%25B1%259E%25E6%2580%25A7&usg=ALkJrhgDxWnUbgejQi-PgJ-wyqCtUxGy_g Elements and attributes to be used in RCOmageXML]
***position (center of the screen)
*https://translate.googleusercontent.com/translate_c?depth=1&hl=es&rurl=translate.google.com&sl=auto&tl=en&u=http://ctfs.wiki.fc2.com/wiki/RCOmageXML&usg=ALkJrhjRxsEgJ7QEiFf9aBAfxp9-eXKIsQ
****X=0
*http://electricvoice.blog40.fc2.com/blog-entry-668.html
****Y=0
*https://translate.googleusercontent.com/translate_c?act=url&depth=1&hl=es&ie=UTF8&prev=_t&rurl=translate.google.com&sl=auto&tl=en&u=http://electricvoice.blog40.fc2.com/blog-category-21.html&usg=ALkJrhg33PGW3RXbfzfYuN1OcV9P5AkM0w
****Z=0
***size
****X=1200 (the original image ps3logo.gim is 512x54 pixels, but displayed at 1200x128)
****Y=128
****Z=0


{{#ev:youtube|GUb1gIKhwMU}}
=Suggestions=

Latest revision as of 03:47, 3 March 2023

WidgetType[edit source]

See the "paf" VSH Exports, psx-place talk, and paf.hpp

The goal of this table is to replace the unnoficial rcomage names by the official codenames. The official codenames are used in the VSH export functions (in text format) but inside the RCO internal file structure this names in text format doesnt exists, instead of text strings the RCO structure only stores the ID in hexadecimal format based on the RCO TOC entry types
Rcomage uses a file named tagmap.ini intended to convert the ID (hex) value by the name (text string) when is extracting the RCO contents, and back from text to hex when compiling an RCO

A bit of background story... rcomage was made by zinga burga for PSP, at that time he had to figure the names by looking at other related text strings, he used the exact codename only in few of them, and he invented other unnofficial names based on educated guesses, but there are many innacurate names and a few unknowns
At the initial steps of rcomage development zinga burga realized that it was posible to extract the info inside the RCO structure as an XML format (this is something sony made on purpose), but inside the RCO files there is not any XML. This is when zinga burga coined the term "RCOXML Objects" because rcomage is representing the RCO contents in XML format (and this wiki respected the term), but in the names of the VSH export function are named WidgetType, in other words, we could say the table below is a list of Widgets ordered by his Type
At some point kakaroto and geohot updated rcomage source code to add support for PS3 (they had to change the endianess and added definitions for a few RCOXML objects only supported by PS3 that was breaking the output) but maybe there are new objects specific for PS3 over ID 0x081F. Anyway, so far rcomage supports up to ID 0x081F (32 objects)

  • Notes
    • It seems the items (XItem 0x080C, MItem 0x080A, LItem 0x0814, IItem 0x0818) doesnt have VSH exports because are terminal objects located at bottom of the hierarchy (are always the children of a parent "list")
    • The codename "Prim" seems to be inherited from PSX->PSP->PS3 and seems to be a geometric primitive. In the PSX XMB the options availables for it was: type="rect", type="line", type="outline". It seems to be used to draw lines, frames, etc...
NodeType Name paf VSH Exports Notes
RCOmage Official NID Sample
Supported by PSP icon and PS3 icon
0x0800 ObjectTree ? ? ?
0x0801 Page Scene 0x41BBFE5E paf::PhScene::WidgetType(void)
0x0802 Plane Plane 0x10DEDCC7 paf::PhPlane::WidgetType(void)
0x0803 Button Button 0x24A5BD6B paf::PhButton::WidgetType(void)
0x0804 XMenu XmBar 0x703117AD paf::PhXmBar::WidgetType(void)
0x0805 XMList XmList 0x4FF7B8A9 paf::PhXmList::WidgetType(void)
0x0806 XList XmItem ? 0xC84FD77B ? paf::PhXmItem::WidgetType(void) ?
0x0807 Progress Progress 0xE801C345 paf::PhProgress::WidgetType(void)
0x0808 Scroll Scroll 0x009207F4 paf::PhScroll::WidgetType(void)
0x0809 MList MenuList 0xA98865F8 paf::PhMenuList::WidgetType(void) The parent of MenuItem 0x080A
0x080A MItem MenuItem ? ? ? The children of MenuList 0x0809
0x080B ObjUnknown0xB ? ? ? The parent of XItem 0x080C ?
0x080C XItem ? ? ? The children of ObjUnknown0xB 0x080B ?
0x080D Text Text 0xB7DFCE90 paf::PhText::WidgetType(void)
0x080E ModelObject Model ? ? ? This is intended to load a (3D model) .GMO file for the PSP wave
0x080F Spin ItemSpin ? 0x4C36ABBB ? paf::PhItemSpin::WidgetType(void) ? In the VSH exports page is mentioned the codename "PhSpin" but is missing the generic paf::PhSpin::WidgetType(void)
0x0810 Action ? ? ?
0x0811 ItemSpin NumSpin 0x59A11C82 paf::PhNumSpin::WidgetType(void)
0x0812 Group Widget 0x546B3D02 paf::PhWidget::WidgetType(void)
0x0813 LList List 0xD64EDE7C paf::PhList::WidgetType(void) The parent of Item 0x0814
0x0814 LItem Item ? ? ? The children of List 0x0813
0x0815 Edit IPAddr 0x3806365F paf::PhIPAddr::WidgetType(void)
0x0816 Clock Clock 0x545D47A2 paf::PhClock::WidgetType(void)
0x0817 IList InfoList 0xF7630798 paf::PhInfoList::WidgetType(void) The parent of InfoItem 0x0818
0x0818 IItem InfoItem ? ? ? The children of InfoList 0x0817
0x0819 Icon ? ? ? Terminal object, same specific attributes than all the other "items". The difference with standard "items" is "icon" have standard attributes (but the standard "items" doesnt)
0x081A UButton ? ? ? This is an improved version of Button 0x0803
Supported by PS3 icon only
0x081B ObjUnknown0x1B ? ? ?
0x081C CheckBoxGroup CheckBoxList 0x90F4F801 paf::PhCheckBoxList::WidgetType(void) The parent of CheckBox 0x081D
This is an improved version of MenuList 0x0809
0x081D CheckboxItem CheckBox 0xBF66BF2D paf::PhCheckBox::WidgetType(void) The children of CheckBoxList 0x081C
0x081E Meter LevelMeter 0xC88CA4B2 paf::PhLevelMeter::WidgetType(void)
0x081F EditBox LabelText 0xDDD4ACF6 paf::PhLabelText::WidgetType(void) This is an improved version of Text 0x080D
Color legend:
Blue The official codename has been identifyed 100%
Green The name in rcomage matches with the official codename
Orange The name in rcomage doesnt matches with the official codename, but has been identifyed (this are the easy ones)
Red The name in rcomage doesnt matches with the official codename, and is doubtfull which is the correct name
  • Other VSH export candidates:
    • paf::PhLabelPrim::WidgetType(void)
    • paf::PhPlaneDiv::WidgetType(void)
    • paf::PhLabelPrimDiv::PhLabelPrimDiv(paf::PhWidget *, paf::PhAppear *)
    • paf::PhCamera::PhCamera(paf::PhWidget *, paf::PhAppear *)
  • Spins confussion
    • The object 0x0811 (named "ItemSpin" in RCOmage) is officially codenamed "PhNumSpin" (the name was swapped), but the object 0x080F (named "Spin" in RCOmage) has not been identifyed yet, probably is officially codenamed "PhItemSpin". Additionally there is another codename for PhSpin that is a bit confusing by now. Is not clear yet if there are 2 or 3 spin objects
    • The object named Spin by rcomage has been found in official firmware using event names with the word "ispin" (a short form of "ItemSpin"):
      • object2:lftv_page212_group000_ispin000 <--- this is loading another "object" so the name ispin belongs to the other object
      • object2:lftv_page212_group000_ispin001 <--- this is loading another "object" so the name ispin belongs to the other object
    • In the VSH exports page there are 3 exports that returns names related with spins (but one of the returned strings seems to be wrong)
      • const char* paf_4C36ABBB() <-- returns "PhItemSpin" (_ZN3paf10PhItemSpin10WidgetTypeEv)
      • const char* paf_CA9160F6() <-- returns "PhNumSpin" (_ZNK3paf9PhNumSpin13GetWidgetTypeEv)
      • const char* paf_59A11C82() <-- returns "PhNumSpin" (_ZN3paf9PhNumSpin10WidgetTypeEv)
  • Other related VSH exports
    • PAF_Resource_DOMGetNodeID returns the widget name (ie: "page_game_config")
    • PAF_Resource_DOMGetNodeType returns the widget type (ie: 0x801)
    • PAF_Resource_DOMGetNodeData
    • PAF_Resource_DOMGetNodeChildByID
    • PAF_Resource_DOMGetNodeChildByPos
    • PAF_Resource_DOMGetNodeFirstChild
    • PAF_Resource_DOMGetNodeNext
    • PAF_Resource_GetPageNodeByID
    • PAF_Resource_GetWidgetNodeByID
    • PAF_Resource_ResolveRefNode
    • PAF_Resource_ResolveRefString
    • PAF_Resource_ResolveRefWString

Menu lists and menu items associations[edit source]

There are 6 groups of list/item associated with each other that was given consecutive IDs in hexadecimal. The fact that was given consecutive IDs means each group of list/item was implemented at the same time because requires each other (an "item" requires a parent "list", and a "list" without children "items" doesnt makes sense)

  • The "items" doesnt have the 21 standard attributes, only have 3 specific attributes (usually a ref/text/image). This is an easy way to identify them, by the abscense of the standard attributes
  • The "lists" does have the 21 standard attributes, followed by a variable number of specific attributes. All the lists (except 0x0804 and 0x0806) seems to use specific override attributes intended to adjust them dinamically for the different screen resolutions supported by PS3, see: XMB Layouts.
  • The consecutive ID's is a handy way to identify them, it means there is an "item" ID next to each "list" ID (or the other way around, there is a "list" ID next to each "item" ID)
NodeType RCOmage name Displayed as Notes
0x0804 XMenu XMB Main Menu, horizontal list placeholder Main XMB
0x0805 XMList XMB Main Menu, horizontal list item
0x0806 XList XMB Main Menu, vertical list placeholder
NodeType RCOmage name Displayed as Notes
0x0809 MList Context Menu, vertical list placeholder Menu at right side of the screen
enabled by pressing triangle over a game/app icon
0x080A MItem Context Menu, vertical list item
NodeType RCOmage name Displayed as Notes
0x080B ObjUnknown0xB ? 0x080B is the "List"
0x080C is the "Item"
0x080C XItem
NodeType RCOmage name Displayed as Notes
0x0813 LList Editable Menu, horizontal list placeholder Used in network settings
0x0814 LItem Editable Menu, horizontal list item
NodeType RCOmage name Displayed as Notes
0x0817 IList Information Menu, vertical list placeholder Used in audio file info
0x0818 IItem Information Menu, vertical list item
NodeType RCOmage name Displayed as Notes
0x081C CheckboxGroup Checkbox Menu, horizontal list placeholder Used in poweroff screen
0x081D CheckboxItem Checkbox Menu, horizontal list item

ItemsCount or ItemNum attribute from list objects[edit source]

The first specific attribute of the list objects (in other words, the attribute in position 22, located inmediatly after the 21 standard attributes) indicates how many chidren there are in the list. In RCOmage this attribute is named "ItemsCount" but it seems the codename is "ItemNum", this VSH exports are used to change the value dinamically to hide/show the items from a list:

  • paf::PhXmBar::SetItemNum(int) not mentioned in VSH Exports page
  • paf::PhXmList::SetItemNum(int)
    • paf::PhXmList::Redraw(int)
  • paf::PhMenuList::SetItemNum(int) not mentioned in VSH Exports page
  • paf::PhList::SetItemNum(int)
    • paf::PhList::Redraw(void)
  • paf::PhInfoList::SetItemNum(int)
    • paf::PhInfoList::Redraw(void) not mentioned in VSH Exports page
  • paf::PhCheckBoxList::SetItemNum(int) not mentioned in VSH Exports page

Objects with additional override attributes[edit source]

The override attributes are intended to adjust the position and size of the objects dinamically for the different screen resolutions supported by PS3, see: XMB Layouts
Most of the objects definitions starts with the 21 standard attributes that includes 6 overrides (positionOverrideX, positionOverrideY, positionOverrideZ, sizeOverrideX, sizeOverrideY, sizeOverrideZ)
But there are a few objects with additional overrides, all this additional overrides (different than 6 overrides from the standard attributes) are unknown, seems to be related with font sizes, linespaces or stuff that requires an individual visual adjustment

  • List objects
    • MenuList 0x0809 and CheckboxList 0x081C
      • 6 overrides from the standard attributes + 3 specific override atributes (override something size XYZ ?)
    • List 0x0813
      • 6 overrides from the standard attributes + 2 specific override atributes (override something size XY ?)
    • InfoList 0x0817
      • 6 overrides from the standard attributes + 1 specific override atribute (override something size X ?)
  • Text objects
    • Text 0x080D and LabelText 0x081F
      • 6 overrides from the standard attributes + 3 specific override atributes (override something size XYZ ?)
  • Other objects
    • LevelMeter 0x081E
      • 6 overrides from the standard attributes + 1 specific override atribute (override something size X ?)

ObjUnknown0xB[edit source]

The object named ObjUnknown0xB by RCOmage (ID 0x80B) seems to be a list (the parent of ID 0x80C). If this speculation is true it means it should start with the 21 standard attributes, the attribute number 22 should indicate how many children it have (attribute name "ItemsCount" in RCOmage, or "ItemNum" in official code), followed by some unknown attributes (similar than the other list objects), and the last attributes should be events, as example: <Name attribute="event:native:/OnFocusIn"/>

Rcomage unknown object attributes[edit source]

At the time of documenting the RCO format for wiki it was posible to identify some/lot of unknown attributes, in the link there are a few of them listed as dirty notes (later was identifyed some more that are not included in the link). At this point there is no need for that dirty notes because the new names of the identifyed attributes was used in the tables in wiki, the dirty notes are just kept to have a record of the changes, and liked here because are very related with this page (needs to be cleaned up together with this talk page)

Some textures using attribute names[edit source]

The names of some images indicates the attribute names of some RCOXML objects

<Image name="tex_default_text_field" src="Images\tex_default_text_field.png" format="gim" compression="zlib" unknownByte="0" />
<Image name="tex_default_text_focus" src="Images\tex_default_text_focus.png" format="gim" compression="zlib" unknownByte="0" />
<Image name="tex_default_text_field_focus" src="Images\tex_default_text_field_focus.png" format="gim" compression="zlib" unknownByte="0" />
<Image name="tex_default_progress_base" src="Images\tex_default_progress_base.png" format="gim" compression="zlib" unknownByte="0" />
<Image name="tex_default_progress_base_shadow" src="Images\tex_default_progress_base_shadow.png" format="gim" compression="zlib" unknownByte="0" />
<Image name="tex_default_progress_slider" src="Images\tex_default_progress_slider.png" format="gim" compression="zlib" unknownByte="0" />
<Image name="tex_default_scroll_base" src="Images\tex_default_scroll_base.png" format="gim" compression="zlib" unknownByte="0" />
<Image name="tex_default_scroll_base_shadow" src="Images\tex_default_scroll_base_shadow.png" format="gim" compression="zlib" unknownByte="0" />
<Image name="tex_default_scroll_slider" src="Images\tex_default_scroll_slider.png" format="gim" compression="zlib" unknownByte="0" />
<Image name="tex_default_scroll_arrow_up" src="Images\tex_default_scroll_arrow_up.png" format="gim" compression="zlib" unknownByte="0" />
<Image name="tex_default_scroll_arrow_up_shadow" src="Images\tex_default_scroll_arrow_up_shadow.png" format="gim" compression="zlib" unknownByte="0" />
<Image name="tex_default_scroll_arrow_down" src="Images\tex_default_scroll_arrow_down.png" format="gim" compression="zlib" unknownByte="0" />
<Image name="tex_default_scroll_arrow_down_shadow" src="Images\tex_default_scroll_arrow_down_shadow.png" format="gim" compression="zlib" unknownByte="0" />
<Image name="tex_default_spin_arrow_up" src="Images\tex_default_spin_arrow_up.png" format="gim" compression="zlib" unknownByte="0" />
<Image name="tex_default_spin_arrow_up_shadow" src="Images\tex_default_spin_arrow_up_shadow.png" format="gim" compression="zlib" unknownByte="0" />
<Image name="tex_default_spin_arrow_down" src="Images\tex_default_spin_arrow_down.png" format="gim" compression="zlib" unknownByte="0" />
<Image name="tex_default_spin_arrow_down_shadow" src="Images\tex_default_spin_arrow_down_shadow.png" format="gim" compression="zlib" unknownByte="0" />
<Image name="tex_default_check" src="Images\tex_default_check.png" format="gim" compression="zlib" unknownByte="0" />
<Image name="tex_default_check_shadow" src="Images\tex_default_check_shadow.png" format="gim" compression="zlib" unknownByte="0" />
<Image name="tex_default_lvmeter_on" src="Images\tex_default_lvmeter_on.png" format="gim" compression="zlib" unknownByte="0" />
<Image name="tex_default_lvmeter_off" src="Images\tex_default_lvmeter_off.png" format="gim" compression="zlib" unknownByte="0" />
<Image name="tex_default_lvmeter_focus" src="Images\tex_default_lvmeter_focus.png" format="gim" compression="zlib" unknownByte="0" />
<Image name="tex_default_lvmeter_bg" src="Images\tex_default_lvmeter_bg.png" format="gim" compression="zlib" unknownByte="0" />

anchorMode[edit source]

Rcomage has some problems with this attribute from PS3 RCOs, it manages the value as 4 bytes length but in the internal RCO file structure is divided in 2 chunks of 2 bytes each. The anchor mode is specifyed by the first byte of the second chunk, is unknown why sony "reserved" 2 bytes for the first chunk (first chunk is always filled with zeroes). All this is a bit confusing and what im saying could not be completly accurate because the different endianess in between PSP and PS3 and what RCOmage does internally. RCOmage allows to choose a "data type" for every attribute by editing the file objectattribdef-ps3.ini. There is no way to extract the value accuratelly so the alternatives are to set it as "int", or you can set it to "unk" instead, this way it will be managed as raw data (no conversion applyed so you can see the real value when the info is extracted to XML)

  • Examples:
    • Extracted as "int"
      • anchorMode="0x320000"
    • Extracted as "unk"
      • anchorMode="0x3200"

Events notes[edit source]

  • All the attribute event names in rcomage and here in wiki contains the characters On before the event name to indicate that is an event (it helps when you are reading the xml code generated by rcomage), and because some official event strings found in OFW uses it too, but the real codenames of the events doesnt seems to have that On (the real codename is what goes at the right of the "On"). As example: the vsh export paf::PhWidget::HandleFocusInEvent(paf::PhEvent *) is related with the attribute OnFocusIn ...and... paf::PhWidget::HandleFocusOutEvent(paf::PhEvent *) with OnFocusOut
  • OnScrollIn and OnScrollOut are used in the "list" objects, the "In" and "Out" represents to move the cursor one item in the "list". The confusing detail is the "lists" can be horizontal (along X axis) or vertical (along Y axis). So it seems in a horizontal list (such the main XmBar) the "In/Out" are "Right/Left", and in a vertical list the "In/Out" should be "Down/Up" (this is just a theory based on the existence of vsh exports: paf::PhXmBar::ScrollRight(float, paf::PhEvent *) ...and... paf::PhXmBar::ScrollLeft(float, paf::PhEvent *), but has not been verifyed)

Links, etc...[edit source]

Suggestions[edit source]