Talk:RCOXML Objects: Difference between revisions
Line 54: | Line 54: | ||
=WidgetType= | =WidgetType= | ||
See the "paf" [[VSH Exports]] and [https://github.com/TheRouletteBoi/VirtualShell/blob/main/include/vsh/paf.hpp paf.hpp] | 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] | ||
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> | |||
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<br> | |||
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 zonga burga coined the term "RCOXML Objects" (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> | |||
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 0x81F. Anyway, so far rcomage supports up to ID 0x81F (32 objects) | |||
*Notes | |||
**It seems the items ('''XItem''' 0x80C, '''MItem''' 0x80A, '''LItem''' 0x814, '''IItem''' 0x818) 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 [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... | |||
<div> | <div> | ||
Line 138: | Line 141: | ||
<center> | <center> | ||
{| class="wikitable" style="font-size: | {| class="wikitable" style="font-size:small" | ||
|- | |- | ||
!rowspan=" | !rowspan="4" | Color legend: | ||
|- | |- | ||
! {{cellcolors|#8e8}} Green | ! {{cellcolors|#8e8}} Green | ||
Line 150: | Line 153: | ||
! {{cellcolors|#d53}} Red | ! {{cellcolors|#d53}} Red | ||
| The name in rcomage doesnt matches with the official codename, and is doubtfull which is the correct name | | The name in rcomage doesnt matches with the official codename, and is doubtfull which is the correct name | ||
|} | |} | ||
</center> | </center> | ||
Line 161: | Line 161: | ||
**paf::Ph'''LabelPrim'''::WidgetType(void) | **paf::Ph'''LabelPrim'''::WidgetType(void) | ||
**paf::Ph'''LabelPrimDiv'''::PhLabelPrimDiv(paf::PhWidget *, paf::PhAppear *) | **paf::Ph'''LabelPrimDiv'''::PhLabelPrimDiv(paf::PhWidget *, paf::PhAppear *) | ||
**paf::Ph'''Camera'''::PhCamera(paf::PhWidget *, paf::PhAppear *) | **paf::Ph'''Camera'''::PhCamera(paf::PhWidget *, paf::PhAppear *) | ||
=Some texture using object and attribute names= | =Some texture using object and attribute names= |
Revision as of 21:46, 19 February 2023
Rcomage unknown object attributes
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
Type | Name | Displayed as | Notes | |||
---|---|---|---|---|---|---|
Suggested names for Wiki |
In rcomage | In official RCOXML code | In official VSH Exports | |||
0x804 | XmBar ? | XMenu | name="xmenu" | XmBar | XMB Main Menu, horizontal list placeholder | Main XMB |
0x805 | XmItem ? | XMList | name="list_sysconf" | XmItem ? | XMB Main Menu, horizontal list item | |
0x806 | XmList ? | XList | name="xlist_video_config" | XmList ? | XMB Main Menu, vertical list placeholder | |
0x809 | MenuList | MList | name="mlist_select_update_method" | MenuList | Context Menu, vertical list placeholder | Menu when pressing triangle at right side of the screen |
0x80A | MenuItem | MItem | name="mitem_select_network" | Context Menu, vertical list item | ||
0x80B | UnkList ? | ObjUnknown0xB | 0x80B is the "List" 0x80C is the "Item" | |||
0x80C | UnkItem ? | XItem | name="item_xlist_video_config_volume" | |||
0x813 | List | LList | name="list_edit_apcnf7" | List | Editable Menu, horizontal list placeholder | Like in network settings |
0x814 | Item | LItem | name="litem_edit_apcnf7_0" | Editable Menu, horizontal list item | ||
0x817 | InfoList | IList | name="ilist_ms_info" | InfoList | Information Menu, vertical list placeholder | Like in audio file info |
0x818 | InfoItem | IItem | name="item_ms_info_size" | Information Menu, vertical list item | ||
0x81C | CheckList | CheckboxGroup | name="checkbox_list_npsignin" | CheckBoxList | Checkbox Menu, horizontal list placeholder | Like in poweroff screen |
0x81D | CheckItem | CheckboxItem | name="checkbox_item_select_auto_power_off" | CheckBox ? | Checkbox Menu, horizontal list item |
- Problematic names and values are marked in red
- The "Items" doesnt have standard attributes, only have 3 specific attributes, and that atributes uses to be a reference (ref/text/image but not always, there are some expections). This is an easy way to identify them
- The "Lists" does have standard attributes, and a variable number of specific attributes based on its purpose, all the lists (except xmenu and xlist) seems to use specific attributes intended to override the position/size of the list for the different screen resolutions supported by PS3, see: XMB Layouts
- If the previous sentence is true, it means we know the first 21 attributes of ObjUnknown0xB (the standard ones, shared by a lot of objects, always located in the same positions) http://www.psdevwiki.com/ps3/Template:RCO_TOC_Objects_standard_attributes and the specific ones can be found by getting inspiration in the specific attributes of the other "list" objects and the test-error method (first one uses to be a "counter" of childrens, then a variable number of "stuff", and at the end a bunch of "events")
WidgetType
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 zonga burga coined the term "RCOXML Objects" (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 0x81F. Anyway, so far rcomage supports up to ID 0x81F (32 objects)
- Notes
- It seems the items (XItem 0x80C, MItem 0x80A, LItem 0x814, IItem 0x818) 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...
ID | Name | paf VSH Exports | Notes | ||
---|---|---|---|---|---|
RCOmage | Official | NID | Sample | ||
0x800 | ObjectTree | ? | ? | ? | |
0x801 | Page | Scene ? | 0x41BBFE5E ? | paf::PhScene::WidgetType(void) ? | |
0x802 | Plane | Plane | 0x10DEDCC7 | paf::PhPlane::WidgetType(void) | |
0x803 | Button | Button | 0x24A5BD6B | paf::PhButton::WidgetType(void) | |
0x804 | XMenu | XmBar | 0x703117AD | paf::PhXmBar::WidgetType(void) | |
0x805 | XMList | XmItem ? | 0xC84FD77B ? | paf::PhXmItem::WidgetType(void) ? | The children of XmList |
0x806 | XList | XmList ? | 0x4FF7B8A9 ? | paf::PhXmList::WidgetType(void) ? | The parent of XmItem |
0x807 | Progress | Progress | 0xE801C345 | paf::PhProgress::WidgetType(void) | |
0x808 | Scroll | Scroll | 0x009207F4 | paf::PhScroll::WidgetType(void) | |
0x809 | MList | MenuList | 0xA98865F8 | paf::PhMenuList::WidgetType(void) | The parent of MenuItem |
0x80A | MItem | MenuItem ? | ? | ? | The children of MenuList |
0x80B | ObjUnknown0xB | ? | ? | ? | The parent of XItem ? |
0x80C | XItem | ? | ? | ? | The children of ObjUnknown0xB ? |
0x80D | Text | Text | 0xB7DFCE90 | paf::PhText::WidgetType(void) | |
0x80E | ModelObject | ? | ? | ? | |
0x80F | Spin | Spin ? | ? | ? | In the VSH exports page there are some mentioning "PhSpin" but is missing the generic paf::PhSpin::WidgetType(void) |
0x810 | Action | NumSpin ? | 0x59A11C82 ? | paf::PhNumSpin::WidgetType(void) ? | |
0x811 | ItemSpin | ItemSpin ? | 0x4C36ABBB ? | paf::PhItemSpin::WidgetType(void) ? | |
0x812 | Group | PlaneDiv ? | 0xE36C18F5 ? | paf::PhPlaneDiv::WidgetType(void) ? | |
0x813 | LList | List ? | 0xD64EDE7C ? | paf::PhList::WidgetType(void) ? | The parent of Item |
0x814 | LItem | Item ? | ? | ? | The children of List |
0x815 | Edit | IPAddr | 0x3806365F | paf::PhIPAddr::WidgetType(void) | |
0x816 | Clock | Clock | 0x545D47A2 | paf::PhClock::WidgetType(void) | |
0x817 | IList | InfoList | 0xF7630798 | paf::PhInfoList::WidgetType(void) | The parent of InfoItem |
0x818 | IItem | InfoItem ? | ? | ? | The children of InfoList |
0x819 | 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) |
0x81A | UButton | ? | ? | ? | very similar than Button 0x803 |
0x81B | ObjUnknown0x1B | ? | ? | ? | |
0x81C | CheckBoxGroup | CheckBoxList | 0x90F4F801 | paf::PhCheckBoxList::WidgetType(void) | The parent of CheckBox |
0x81D | CheckboxItem | CheckBox | 0xBF66BF2D | paf::PhCheckBox::WidgetType(void) | The children of CheckBoxList |
0x81E | Meter | LevelMeter | 0xC88CA4B2 | paf::PhLevelMeter::WidgetType(void) | |
0x81F | EditBox | LabelText | 0xDDD4ACF6 | paf::PhLabelText::WidgetType(void) |
Color legend: | |
---|---|
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::PhWidget::WidgetType(void)
- paf::PhLabelPrim::WidgetType(void)
- paf::PhLabelPrimDiv::PhLabelPrimDiv(paf::PhWidget *, paf::PhAppear *)
- paf::PhCamera::PhCamera(paf::PhWidget *, paf::PhAppear *)
Some texture using object and attribute names
The names of this images indicates the attribute names of some RCOXML objects. Are the object attributes with datatype/reftype "image"
<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" />
ObjUnknown0xB
*Superbrainstorming based on smoke. This brainstorming seems to be wrong, because the object named "XMList" by rcomage seems to be an "item" so it cant have other xml "item" childrens
**what about this ?, matches prety fine with how are grouped. Main menu separated because is an special object created specifically for top XMB menu, and the others grouped in pairs for "list" and "item". Also matches how are ordered in rcomage. All this attributes appears consecutivelly in groups of two, at top... XMList and XList... then MList MItem... then ObjUnknown0xB and XItem... then LList and LItem... then IList and IItem. Note how XMList doesnt seems to have an XMItem
XMenu XMList ObjUnknown0xB <------ is XMItem ? XList XItem MList MItem LList LItem IList IItem
If this is true and ObjUnknown0xB is actually XMItem it seems is posible to deduce the attributes because the other "item" objects uses pretty similar attributes (usually 3 attributes, either images or texts), to verify it are needed some/lot of tests by copying the attributes from the other items and creating a 100% custom object for the experiment also a good understanding of all the other rcoxml code, so is hard to know, im not skilled/brave to build this frankenstein but i think the theory is good enought--Sandungas (talk) 08:16, 8 December 2015 (UTC)
Objects using overrides in the "specific" attributes
The "standard" attributes contains 6 overrides and most objects uses the "standard" attributes, but additionally to this ones some of the objects (seems to) use more overrides in the "specific" attributes
- Lists
- MList (3 ?, override size XYZ ?)
- LList (2 ?, override size XY ?)
- IList (1 ?, override size X ?)
- CheckboxGroup (3 ?, override size XYZ ?)... this object is an expanded/repurposed version of Mlist intended for PS3 only (not supported in PSP), the 3 override attributes are the same than Mlist
- Text
- Text (3 ?, override size XYZ ?)
- EditBox (3 ?, override size XYZ ?)... this object is an expanded/repurposed version of Text intended for PS3 only (not supported in PSP), the 3 override attributes are the same than Text
- Others
- Meter (1 ?, override size X ?)
anchorMode
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"
- Extracted as "int"
Lists ItemNum
Some of the "list" objects have an attribute (always located at the first position in the group of specific attributes) that indicates how many children "items" objects there are. Rcomage (and this wiki page) names this attribute "ItemsCount", but it seems the codename is "ItemNum", this "list" objects seems to use it:
- paf::PhInfoList::SetItemNum(int)
- paf::PhList::SetItemNum(int)
- paf::PhXmList::SetItemNum(int)
paf::PhXmBar::SetItemNum(int)doesnt existspaf::PhMenuList::SetItemNum(int)doesnt existspaf::PhCheckBoxList::SetItemNum(int)doesnt existspaf::PhLabelPrim::SetItemNum(int)doesnt exists
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
- 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)
Spins identification
- The object named ItemSpin by rcomage has been found using event names:
- event:native:/OnFocusLeftNumSpinWizardEventHandler
- event:native:/OnFocusRightNumSpinWizardEventHandler
- The object named Spin by rcomage has been found using event names:
- 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
The official codenames are ItemSpin and NumSpin but it seems in rcomage are swapped
Additionally there is another codename for Spin that is a bit confusing by now
Links, etc...
- Elements and attributes to be used in RCOmageXML
- 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
- http://electricvoice.blog40.fc2.com/blog-entry-668.html
- 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