PS3 [Research] RCOmage psdevwiki MOD v20180916

RCO manipulation and creation tool

  1. 3,423

    sandungas Moderator Developer

    Dec 31, 2014
    Likes Received:
    Trophy Points:
    Babylon 20xxE series
    BlackMage focus L.gif RCOmage BlackMage focus R.gif
    psdevwiki MOD
    This is a repack of the development (a.k.a. experimental) rcomage version published at date 2015/03/11 together with some modifyed files for rcomage (responsible of RCO format conversions) and gimconv (responsible of GIM format conversions)
    All the changes made to the files are synced with the info in, for a better understanding of how things works and why some changes has been made to this files please take a read at the pages on wiki, this template is a good start point: File Formats
    If at some point this repack is updated, the pages in psdevwiki will be updated too. If you identify some "unknowns" or you consider is needed to modify something please report back and the info in psdevwiki and this repack will be updated

    ZiNgA BuRgA - rcomage
    Sandungas - documentation, research
    Other UngaBunga's - more research ;)

    • Installation
      1. Extract the contents of rcomage-dev-v1.1.2.7z to any folder
      2. Copy the files from Patches folder to the rcomage-dev-v1.1.2 extraction folder overwriting the originals
      3. Extract the contents of old_windows_dll.7z to the folder where is located rcomage.exe (optional)
    • Contents
      • ReadMe.txt
        Patches Overview​
      • rcomage-dev-v1.1.2.7z (MD5: 09238DA7C0DDA33A3909091ED6DE8058)
        Is a rcomage version released by ZiNgA BuRgA in post #293 of this thread
      • old_windows_dll.7z (optional, required by some Microsoft Windows)
      • Patches (folder)
        Rcomage (folder)
        tagmap.ini (entry ID tags)​
        miscmap.ini (file and text attributes)​
        objattribdef-ps3.ini (rcoxml object attributes for PS3)​
        objattribdef-psp.ini (rcoxml object attributes for PSP)​
        animattribdef-ps3.ini (rcoxml animation attributes for PS3)​
        animattribdef-psp.ini (rcoxml animation attributes for PSP)​
        GimConv (folder)
        GimConv.exe (7 patched versions intended to identify GIM settings)​
        GimConv.cfg (GimConv configuration file)​
      • Docs (folder)
        HowTo identify GIM settings.txt (small tutorial)​
        HowTo rebuild a PS3 RCO.txt (small tutorial)​
        Patches changelog gimconv.txt (detailed gimconv changelogs)​
        Patches changelog rcomage.txt (detailed rcomage changelogs)​
    • Patches Overview
      See: Template:RCO TOC entry types
      • The changes in this file are minor, mostly to standarize and simplify tag names

      See: Talk:Rcomage#miscmap.ini and Languages
      • 3 "unknow" languages identifyed (17_Portuguese_BR, 18_English_GB, 19_Turkish)
      • New language names based on the official number/letter codenames

      See: RCOXML Objects and XMB Layouts
      • Over 300 "unknow" attributes identifyed (standard: 6*21 + specific: 177)
      • All attribute names has been renamed using some strict rules, most are official codenames found in PSP and PS3 firmwares, and the others are intended to be the most explicit and intuitive posible
      • STANDARD attribute names (used by 21 objects) has been given a common name, because are always located first, next to the owner object name (so is easy to know the owner object type), and because are known
      • SPECIFIC attribute names has been given a unique name composed by "object name" (owner) + "attribute name" (owned), as example the attribute "pageOnInit" belongs to a "Page" object and triggers the event "OnInit", this way when you are scrolling horizontally a very long line of RCOXML code you know which object type is the owner, is a bit redundant and could be annoying because creates long attribute names but helps a lot when reading the RCOXML code generated by rcomage. Also unique names are useful for research purposes to be able to perform massive/multiple/scripted searches of a unique attribute name in multiple RCOXML files to see the values used by that attribute (hint: you can open hundreds of XML files together in notepad++, search for "uniquename", and click in "find in all opened documents", this will show a list of all the matches in all the files)
      • Attribute names with the sufix "Mode" uses predefined values, and that values works as an identifyer of the "Mode", as example the attribute "pageResizeMode" is an special "Mode" of the object "Page" that does a "Resize", and the "Mode" tells which kind of "Resize" is performed (from a list of predefined resize types)
      • Attribute names containing the word "Override" are references that loads the value externally from the "XMB Layouts", as example: the attribute "textPositionOverrideX" belongs to a "text" object and "Overrides" the attribute "positionX" with a value from the "XMB Layouts"
      • Some data types has been changed because was identifyed, and some others has been changed to data type "unk" because are related with missing functions of rcomage (such the overrides) because endianess problems or because how are splitted in intermediate steps of the value conversions. By managing them as "unk" it allows a raw extraction/injection of the values. In other words... there are some data types that has been set on purpose to "unk" to disable the value conversions made by rcomage

      See: RCOXML Animations and XMB Layouts
      • 3 "unknow" attributes identifyed
      • The changes in this file are minor, mostly to standarize and simplify attribute names, some animation attribute names (inside animattribdef-ps3.ini) has been changed to match with the objects attribute names (inside objattribdef-ps3.ini) because some animation attributes modifyes the objects attributes on real time. The point is... you will recognize which attributes are "connected" in between animations and objects because has the same names

      objattribdef-psp.ini and animattribdef-psp.ini
      • This files (selected automatically only when working with PSP RCO files) has been generated by using the ps3 .ini versions as base and deleting some objects and attributes from them. The deletions are related with functions implemented specifically for PS3 (not supported by PSP RCO files)

      See: GimConv#Identifying GIM settings by bruteforce
      • Are included seven modifyed versions of "GimConv.exe v1.20h" where has been patched a couple of bytes to change the version to: v1.20c, v1.20d, v1.20e, v1.20f, v1.20g
      • This patched GimConv.exe versions are intended to identify the original settings of the official GIM files by doing GIM-to-GIM conversions. Allows to create a GIM file exactly like the original without needed to use any other external tools. For more info read the document: "HowTo identify GIM settings.txt"

      See: Talk:GimConv
      • New help screen with info about the new options and some usage examples
      • Added new options with a new naming scheme (option names starts with either "psp" or "ps3" + the official "image_format" settings names). Are available 6 options to create GIM files for PSP, and 14 for PS3. This completes the collection of "image_format" supported by GIM specifications
      • Restored "limit_image_width" and "limit_image_height" default settings to 4096 that was the value used in the official GimConv.cfg released by sony as part of the "PS3 theme tools" (in previous rcomage versions this sizes was restricted to 512 and was causing an incompatibility with PS3 images bigger than 512x512 pixels), additionally now this image size restrictions are also set individually for every option
      • Restored "output_sequence" default setting from the official GimConv.cfg
      • Restored options: -viewer, -F, -B, -R, -DXT from the official GimConv.cfg
      • Kept previous rcomage custom options to preserve compatibility with old apps or scripts (but you should use the new options instead)
      • Removed from the help screen some (useless) official info, and some (superceeded) custon info from previous rcomage versions
    • Changelog rcomage
      Reverted the tag label "TextLang". Doesnt allows to be renamed in tagmap.ini because is hardcoded
      [Text]Text ----------------> TextLang
      Initial version
      [VSMX]VSMXFile ----------------> Script
      [Text]TextLang ----------------> Text
      [Font]FontStyle ---------------> Font
      [Anim]Animation ---------------> Anim

      [compression]uncompressed -----> none
      [languages]Japanese -----------> 00_Japanese
      [languages]English ------------> 01_English_US
      [languages]French -------------> 02_French
      [languages]Spanish ------------> 03_Spanish
      [languages]German -------------> 04_German
      [languages]Italian ------------> 05_Italian
      [languages]Dutch --------------> 06_Dutch
      [languages]Portugese ----------> 07_Portuguese_PT
      [languages]Russian ------------> 08_Russian
      [languages]Korean -------------> 09_Korean
      [languages]ChineseTrad --------> 10_Chinese_T
      [languages]ChineseSimpl -------> 11_Chinese_S
      [languages]Finnish ------------> 12_Finnish
      [languages]Swedish ------------> 13_Swedish
      [languages]Danish -------------> 14_Danish
      [languages]Norwegian ----------> 15_Norwegian
      [languages]Polish -------------> 16_Polish
      [languages]unknown0x11 --------> 17_Portuguese_BR
      [languages]unknown0x12 --------> 18_English_GB
      [languages]unknown0x13 --------> 19_Turkish

      [Standard]unknown17 -----------> positionOverrideX
      [Standard]unknown18 -----------> positionOverrideY
      [Standard]unknown19 -----------> positionOverrideZ
      [Standard]unknownInt20 --------> sizeOverrideX
      [Standard]unknownInt21 --------> sizeOverrideY
      [Standard]unknown22 -----------> sizeOverrideZ
      [Page]unknownInt0 -------------> pageMode
      [Button]image2 ----------------> buttonImageFocus
      [Button]unknownRef29 ----------> buttonText
      [Button]unknownEvent31 --------> buttonOnPush
      [Button]unknownEvent33 --------> buttonOnFocusIn
      [Button]unknownEvent35 --------> buttonOnFocusOut
      [Button]unknownEvent37 --------> buttonOnFocusLeft
      [Button]unknownEvent39 --------> buttonOnFocusRight
      [Button]unknownEvent41 --------> buttonOnFocusUp
      [Button]unknownEvent43 --------> buttonOnFocusDown
      [Button]unknownEvent45 --------> buttonOnContext
      [XMenu]unknownEvent28 ---------> xmenuOnCursorMove
      [XMenu]unknownRef32 -----------> xmenuOnScrollOut
      [XMList]unknownRef3 -----------> xmlistText
      [XList]xlistUnkInt23 ----------> xlistItemNum
      [XList]onCancel ---------------> xlistOnFocusLeft
      [XList]unknownEvent36 ---------> xlistOnFocusRight
      [Progress]unknownRef25 --------> progressImageBase
      [Progress]unknownRef27 --------> progressImageSlider
      [Progress]unknownRef29 --------> progressImageBaseShadow
      [Scroll]unknownRef26 ----------> scrollImageBase
      [Scroll]unknownRef28 ----------> scrollImageSlider
      [Scroll]unknownRef30 ----------> scrollImageArrow
      [Scroll]unknownRef32 ----------> scrollImageBaseShadow
      [Scroll]unknownRef34 ----------> scrollImageArrowShadow
      [MList]unknown23 --------------> mlistItemNum
      [MList]unknown25 --------------> mlistItemDefault
      [MList]unknown27 --------------> mlistItemSpacing
      [MList]unknown28 --------------> mlistOverrideUnk28
      [MList]unknown29 --------------> mlistOverrideUnk29
      [MList]unknown30 --------------> mlistOverrideUnk30
      [MList]unknownRef32 -----------> mlistImageFocus
      [MList]unknownRef33 -----------> mlistOnPush
      [MList]unknownRef35 -----------> mlistOnCursorMove
      [MList]unknownRef37 -----------> mlistOnFocusIn
      [MList]unknownRef39 -----------> mlistOnFocusOut
      [MList]unknownRef41 -----------> mlistOnFocusLeft
      [MList]unknownRef43 -----------> mlistOnFocusRight
      [MList]unknownRef45 -----------> mlistOnFocusUp
      [MList]unknownRef47 -----------> mlistOnFocusDown
      [MList]unknownRef49 -----------> mlistOnScrollIn
      [MList]unknownRef51 -----------> mlistOnScrollOut
      [MItem]unknownRef4 ------------> mitemTextOrImage3
      [Text]unknownInt27 ------------> textFontMode
      [Text]unknown55 ---------------> textResizeMode
      [Text]unknownInt56 ------------> textOverrideUnk56
      [Text]unknownInt57 ------------> textOverrideUnk57
      [Text]unknown58 ---------------> textOverrideUnk58
      [Spin]unknownRef25 ------------> spinImageArrow
      [Spin]unknownRef27 ------------> spinImageArrowShadow
      [Spin]unknownEvent29 ----------> spinOnDecide
      [Spin]unknownEvent31 ----------> spinOnCancel
      [Spin]unknownEvent33 ----------> spinOnRollIn
      [Spin]unknownRef35 ------------> spinOnCursorMove
      [Spin]unknownRef37 ------------> spinOnFocusIn
      [Spin]unknownRef39 ------------> spinOnFocusOut
      [Spin]unknownRef41 ------------> spinOnFocusLeft
      [Spin]unknownRef43 ------------> spinOnFocusRight
      [Spin]unknownRef45 ------------> spinOnFocusUp
      [Spin]unknownRef47 ------------> spinOnFocusDown
      [Action]unknownRef0 -----------> actionText
      [ItemSpin]unknownRef29 --------> itemspinImageArrow
      [ItemSpin]unknownRef31 --------> itemspinImageArrowShadow
      [ItemSpin]unknownEvent33 ------> itemspinOnDecide
      [ItemSpin]unknownEvent35 ------> itemspinOnCancel
      [ItemSpin]unknownRef37 --------> itemspinOnRollIn
      [ItemSpin]unknownRef39 --------> itemspinOnCursorMove
      [ItemSpin]unknownRef41 --------> itemspinOnFocusIn
      [ItemSpin]unknownRef43 --------> itemspinOnFocusOut
      [ItemSpin]unknownRef45 --------> itemspinOnFocusLeft
      [ItemSpin]unknownRef47 --------> itemspinOnFocusRight
      [ItemSpin]objPrev -------------> itemspinOnFocusUp
      [ItemSpin]objNext -------------> itemspinOnFocusDown
      [LList]unknownInt23 -----------> llistItemNum
      [LList]unknownUnk26 -----------> llistOverrideUnk26
      [LList]unknownUnk27 -----------> llistOverrideUnk27
      [LList]unknownRef28 -----------> llistOnFocusIn
      [LList]unknownRef30 -----------> llistOnFocusOut
      [LList]unknownRef32 -----------> llistOnFocusLeft
      [LList]unknownRef34 -----------> llistOnFocusRight
      [LList]unknownRef36 -----------> llistOnFocusUp
      [LList]unknownRef38 -----------> llistOnFocusDown
      [LList]unknownEvent40 ---------> llistOnScrollIn
      [LList]unknownRef42 -----------> llistOnScrollOut
      [Edit]unknownRef27 ------------> editImageBase
      [Edit]unknownRef29 ------------> editImageShadow
      [Edit]unknownEvent31 ----------> editOnDecide
      [Edit]unknownRef33 ------------> editOnCancel
      [Edit]unknownRef35 ------------> editOnFocusIn
      [Edit]unknownRef37 ------------> editOnFocusOut
      [Edit]unknownEvent39 ----------> editOnFocusLeft
      [Edit]unknownEvent41 ----------> editOnFocusRight
      [Edit]unknownObject43 ---------> editOnFocusUp
      [Edit]unknownObject45 ---------> editOnFocusDown
      [Edit]unknownRef47 ------------> editOnTick
      [Clock]unknownText25 ----------> clockTextAm
      [Clock]unknownText27 ----------> clockTextPm
      [Clock]unknownRef29 -----------> clockImageBase
      [Clock]unknownRef31 -----------> clockImageShadow
      [Clock]unknownEvent33 ---------> clockOnDecide
      [Clock]unknownEvent35 ---------> clockOnCancel
      [Clock]unknownRef37 -----------> clockOnFocusIn
      [Clock]unknownRef39 -----------> clockOnFocusOut
      [Clock]unknownEvent41 ---------> clockOnFocusLeft
      [Clock]unknownEvent43 ---------> clockOnFocusRight
      [Clock]unknownRef45 -----------> clockOnFocusUp
      [Clock]unknownRef47 -----------> clockOnFocusDown
      [Clock]unknownEvent49 ---------> clockOnTick
      [IList]unknown23 --------------> ilistUnkFloat23
      [IList]unknown24 --------------> ilistOverrideUnk24
      [IList]unknownRef25 -----------> ilistOnFocusIn
      [IList]unknownRef27 -----------> ilistOnFocusOut
      [IList]unknownEvent29 ---------> ilistOnFocusLeft
      [IList]unknownRef31 -----------> ilistOnFocusRight
      [IList]unknownRef33 -----------> ilistOnFocusUp
      [IList]unknownRef35 -----------> ilistOnFocusDown
      [IList]unknownRef37 -----------> ilistOnPush
      [Icon]unknownImage23 ----------> iconImageBase
      [Icon]unknownImage25 ----------> iconImageShadow
      [Icon]unknownImage27 ----------> iconImageFocus
      [CheckboxGroup]unknown23 ------> checkboxgroupItemNum
      [CheckboxGroup]unknown25 ------> checkboxgroupItemDefault
      [CheckboxGroup]unknown27 ------> checkboxgroupItemSpacing
      [CheckboxGroup]unknown28 ------> checkboxgroupOverrUnk28
      [CheckboxGroup]unknown29 ------> checkboxgroupOverrUnk29
      [CheckboxGroup]unknown30 ------> checkboxgroupOverrUnk30
      [CheckboxGroup]unknownRef31 ---> checkboxgroupImage
      [CheckboxGroup]unknownRef33 ---> checkboxgroupOnPush
      [CheckboxGroup]unknownRef35 ---> checkboxgroupOnCursorMove
      [CheckboxGroup]unknownRef37 ---> checkboxgroupOnFocusIn
      [CheckboxGroup]unknownRef39 ---> checkboxgroupOnFocusOut
      [CheckboxGroup]unknownRef41 ---> checkboxgroupOnFocusLeft
      [CheckboxGroup]unknownRef43 ---> checkboxgroupOnFocusRight
      [CheckboxGroup]unknownRef45 ---> checkboxgroupOnFocusUp
      [CheckboxGroup]unknownRef47 ---> checkboxgroupOnFocusDown
      [CheckboxGroup]unknownRef49 ---> checkboxgroupOnScrollIn
      [CheckboxGroup]unknownRef51 ---> checkboxgroupOnScrollOut
      [CheckboxItem]unknownRef1 -----> checkboxitemText
      [CheckboxItem]unknownRef3 -----> checkboxitemImageBase
      [CheckboxItem]unknownRef5 -----> checkboxitemImageShadow
      [Meter]unknown27 --------------> meterOverrideUnk27
      [Meter]unknownRef28 -----------> meterImageOn
      [Meter]unknownRef30 -----------> meterImageOff
      [Meter]unknownRef32 -----------> meterImageFocus
      [Meter]unknownRef34 -----------> meterImageBg
      [EditBox]unknownRef23 ---------> editboxMessage
      [EditBox]unknownRef25 ---------> editboxFontstyle
      [EditBox]unknown27 ------------> editboxFontMode
      [EditBox]unknownFloat29 -------> editboxFontSizeY
      [EditBox]unknownFloat30 -------> editboxTopColorScaleR
      [EditBox]unknownFloat31 -------> editboxTopColorScaleG
      [EditBox]unknownFloat32 -------> editboxTopColorScaleB
      [EditBox]unknownFloat33 -------> editboxBottomColorScaleR
      [EditBox]unknownFloat34 -------> editboxBottomColorScaleG
      [EditBox]unknownFloat35 -------> editboxBottomColorScaleB
      [EditBox]unknown36 ------------> editboxLineSpacing
      [EditBox]unknown40 ------------> editboxCharacterSpacing
      [EditBox]unknownFloat41 -------> editboxShadowOffsetX
      [EditBox]unknown42 ------------> editboxShadowOffsetY
      [EditBox]unknown43 ------------> editboxShadowOffsetZ
      [EditBox]unknownFloat44 -------> editboxShadowColorScaleR
      [EditBox]unknownFloat45 -------> editboxShadowColorScaleG
      [EditBox]unknownFloat46 -------> editboxShadowColorScaleB
      [EditBox]unknownFloat47 -------> editboxShadowColorScaleA
      [EditBox]unknown55 ------------> editboxResizeMode
      [EditBox]unknownInt56 ---------> editboxOverrideUnk56
      [EditBox]unknownInt57 ---------> editboxOverrideUnk57
      [EditBox]unknown58 ------------> editboxOverrideUnk58
      [EditBox]unknownRef59 ---------> editboxImageField
      [EditBox]unknownRef61 ---------> editboxImageFocus
      [EditBox]unknownRef63 ---------> editboxOnPush
      [EditBox]unknownRef65 ---------> editboxOnFocusIn
      [EditBox]unknownRef67 ---------> editboxOnFocusOut
      [EditBox]unknownRef69 ---------> editboxOnFocusLeft
      [EditBox]unknownRef71 ---------> editboxOnFocusRight
      [EditBox]unknownRef73 ---------> editboxOnFocusUp
      [EditBox]unknownRef75 ---------> editboxOnFocusDown

      [Animation] -------------------> [Anim]
      [Standard]duration ------------> time
      [MoveTo]x ---------------------> positionX
      [MoveTo]y ---------------------> positionY
      [MoveTo]z ---------------------> positionZ
      [MoveTo]unknownInt5 -----------> positionOverrideX
      [MoveTo]unknownInt6 -----------> positionOverrideY
      [MoveTo]unknown7 --------------> positionOverrideZ
      [Recolour]red -----------------> colorScaleR
      [Recolour]green ---------------> colorScaleG
      [Recolour]blue ----------------> colorScaleB
      [Recolour]alpha ---------------> colorScaleA
      [Rotate]x ---------------------> radiansX
      [Rotate]y ---------------------> radiansY
      [Rotate]z ---------------------> radiansZ
      [Resize]width -----------------> sizeScaleX
      [Resize]height ----------------> sizeScaleY
      [Resize]depth -----------------> sizeScaleZ
      [Fade]transparency ------------> colorScaleA
      [SlideOut]xspeed --------------> speedX
      [SlideOut]yspeed --------------> speedY
      [SlideOut]xcompress -----------> compressX
      [SlideOut]ycompress -----------> compressY
    • Changelog gimconv
      Initial version
      GimConv.exe (patched versions)
      • GimConv.exe (v1.20h patched to v1.20e). Set as default
      • GimConvC.exe (v1.20h patched to v1.20c). Handy to identify 1st most common GIM settings in pre-retail PS3 firmwares
      • GimConvD.exe (v1.20h patched to v1.20d)
      • GimConvE.exe (v1.20h patched to v1.20e). Handy to identify 1st most common GIM settings in retail PS3 firmwares
      • GimConvF.exe (v1.20h patched to v1.20f)
      • GimConvG.exe (v1.20h patched to v1.20g)
      • GimConvH.exe (v1.20h original, not patched, just renamed)

      GimConv.cfg (added info in the help screen)
      • options:
        -psprgba<n> <n>: 5650, 5551, 4444, 8888​
        -pspindex<n> <n>: 4, 8​
        -ps3rgba<n> <n>: 5650, 5551, 4444, 8888​
        -ps3index<n> <n>: 4, 8, 16, 32​
        -ps3dxt<n> <n>: 1, 3, 5, 1ext, 3ext, 5ext​
      • examples GIM-to-PNG:
        gimconv input.gim -o output.png
      • examples GIM-to-GIM:
        gimconv original.gim -o try1.gim -ps3rgba8888
        gimconv original.gim -o try2.gim -ps3rgba8888 --update_fileinfo on
        gimconv original.gim -o try3.gim -ps3dxt5
      • examples PNG-to-GIM:
        gimconv custom.png -o 1stMostCommonInPS3.gim -ps3rgba8888
        gimconv custom.png -o 2ndMostCommonInPS3.gim -ps3dxt5
        gimconv custom.png -o unknownSupportInPS3.gim -ps3rgba4444
        gimconv custom.png -o unknownSupportInPS3.gim -ps3index8
        gimconv custom.png -o unknownPurposeInPS3.gim -ps3dxt5ext
      • examples GIS:
        gimconv custom.png -o ps3rgba8888.gis -ps3rgba8888 -S
        gimconv ps3rgba8888.gis

      GimConv.cfg (added options)
      • PSP RGBA image formats
      • PSP INDEXED image formats
      • PS3 RGBA image formats
        -ps3rgba8888 (1st most common GIM settings in PS3 firmwares)​
      • PS3 INDEXED image formats
      • PS3 DXT image formats
        -ps3dxt5 (2nd most common GIM settings in PS3 firmwares)​

      GimConv.cfg (restored default settings from official GimConv.cfg)
      • default
        limit_image_width = 4096 (Removed the 512 pixels image size restriction)​
        limit_image_height = 4096 (Removed the 512 pixels image size restriction)​
        output_sequence = on (Doesnt causes any change in the output GIM files anyway)​

      GimConv.cfg (restored options from official GimConv.cfg)
      • options
    Last edited: Sep 16, 2018
    PSXFan, slimica, esc0rtd3w and 7 others like this.
  2. 3,423

    sandungas Moderator Developer

    Dec 31, 2014
    Likes Received:
    Trophy Points:
    Babylon 20xxE series

    How to rebuild a PS3 RCO with custom GIM images using Rcomage and GimConv_____
    Link: How to rebuild a PS3 RCO with custom GIM images using Rcomage and GimConv

    1. Extract RCO
      • Use Rcomage.exe to dump the RCO contents without image conversions (so GIM files are extracted as GIM) to a folder named "RebuildMe"
      • This files are going to be used to identify the original GIM setting, and for RCO rebuilding purposes
    2. GIM to PNG
      • Identify visually the image you want to customize by converting it to PNG. The conversion to PNG can be made by two optional ways:
        • Use Rcomage.exe to extract the RCO contents with image conversions (so GIM files are extracted and converted to PNG) to a folder named "DontRebuildMe"
        • Or use GimConv.exe to convert an original "icon.gim" (from "RebuildMe" folder) to "icon.png" with the command: "gimconv.exe icon.gim -o icon.png"
    3. Custom PNG
      • Use "icon.png" as the base (mostly to respect the original width and height) and customize it with any image edition program (gimp, photoshop, etc...)
    4. Identify GIM settings
      • Use GimConv.exe to identify the original GIM settings of "icon.gim" (from "RebuildMe" folder) by making GIM-to-GIM conversions
    5. PNG to GIM
      • Use GimConv.exe to convert the custom "icon.png" (from step 3) to "icon.gim" with the original GIM settings you found (in step 4)
    6. Overwrite original GIM
      • Copy the custom "icon.gim" to "RebuildMe" folder overwriting the original "icon.gim"
    7. Build RCO
      • Use Rcomage.exe to compile the RCO with the files from "RebuildMe" folder

    HowTo identify GIM settings__________________________________________________________________________
    Link: How to identify GIM settings

    The goal of this process is to create a GIM file exactly like the original by doing GIM-to-GIM conversions
    In every identification attempt are used different GIM settings, and every GIM file generated is compared with the original GIM (by a hash check)
    The "bruteforce game" ends when the hashes of both the original and generated GIM files matches, in other words, you have found the original GIM settings used by sony to create that specific GIM file
    This process needs to be made for every GIM file because in PS3 there are (at least) two different GIM types, and usually a single RCO file contains different GIM types

    First, try to identify the GIM type by using the most common GIM settings for PS3, by using this command:
    gimconv.exe original.gim -o try1.gim -ps3rgba8888
    Compare the hashes of "original.gim" versus "try1.gim", if hashes matches you got it at first try !. It means you can replace that GIM by using a custom.png as input with the same command you used to create "try1.gim", this way:
    gimconv.exe custom.png -o 1stMostCommonInPS3.gim -ps3rgba8888
    Else (if hashes doest matches), try this:
    gimconv.exe original.gim -o try2.gim -ps3rgba8888 --update_fileinfo on
    This command is a variant of the previous, is used to identify GIM files that have an additional area at bottom named "fileinfo". This area contains info about who/when/how the GIM file was created, by using this command the fileinfo area from the "original.gim" is preserved and added to the output "try2.gim" allowing to create a GIM that matches exactly with the original (see *Notes* below)
    you SHOULD NOT create custom GIM files with fileinfo for normal usage on a PS3 (because you dont want to add fileinfo about you and your PC at bottom of your custom GIM file, right ?), this is only for identification purposes, to replace this GIM files by custom ones you should build them with the same command from the previous example (note is the same image format, but without the fileinfo)
    gimconv.exe custom.png -o 1stMostCommonInPS3.gim -ps3rgba8888
    Else (if hashes doest matches), try this:
    gimconv.exe original.gim -o try3.gim -dxt5
    This is the second most common GIM type used in PS3 (and are very common, most RCO files has a few). It seems in official PS3 firmware never was used a variant of this GIM type with the added "fileinfo" area at bottom, so the identification process is straightworward (there is no need to repeat the same command with the fileinfo variant), if hashes matches you found it and you can replace this GIM file by a custom.png created this way:
    gimconv.exe custom.png -o 2ndMostCommonInPS3.gim -dxt5
    *Notes* (about fileinfo and GimConv versions)
    In the previous command example the option "--update_fileinfo" copyes the fileinfo area from the input "original.gim" and adds it to the output "try2.gim" BUT NOT ENTIRELLY !
    At the end of the fileinfo area there is a text string with the name and version of the tool that generated the GIM (the tool name is always "GimConv", and the version uses to be "1.20e" but not always), this string inside the fileinfo area is updated when you do a GIM-to-GIM conversion
    The problem is the only public GimConv.exe available is "GimConv 1.20h", so if the original RCO was made by "GimConv 1.20e" and you make a GIM-to-GIM conversion by using "GimConv 1.20h" the hash comparison (original GIM vs rebuild GIM) will not match because 1 byte of difference (e VS h)

    To solve this problem and to be able to automatize the bruteforce identification procedures i created several GimConv.exe files with the version patched

    There are lot of GIM files in PS3 retail firmwares made with GimConv 1.20e (and a timestamp of 2006 but are included up to retail 4.82 firmware because never was updated or replaced), so initially is better to use "GimConv 1.20e" always
    If you are doing some research in older firmwares try with the other versions, specially GimConvC.exe because some GIM files in PS3 pre-retail firmwares was made with "GimConv 1.20c"
    If you are having problems with this, or you are not getting an exact match when doing a hash comparison, open the original GIM files in a hexeditor and scroll down to the end of the file to see the GimConv versions sony used originally
    For more detailed info about GIM structure see: psdevwiki
    Last edited: Nov 28, 2018
    STLcardsWS, DeViL303 and esc0rtd3w like this.
  3. 3,423

    sandungas Moderator Developer

    Dec 31, 2014
    Likes Received:
    Trophy Points:
    Babylon 20xxE series
    sandungas updated RCOmage psdevwiki MOD with a new update entry:


    Read the rest of this update entry...

    Additionally, i have posted the tutorials here in the forum (scroll up a bit, second post in this thread marked in red, imposible to miss :P)
    Honestly, i think that two walls of text are a "must read" for everyone interested in RCO, are a needed explain that will make you understand the problems related with GIM images and how to solve them
    Last edited: Sep 16, 2018
  4. 3,423

    sandungas Moderator Developer

    Dec 31, 2014
    Likes Received:
    Trophy Points:
    Babylon 20xxE series
    @Unfamed im replying here because this is the support thread of the rcomage you was using, is also an open talk for research, now i added tutorials, and is also a community project, it did not have much activity but you can post here everything you want related with RCO, included question and/or brainstormings :)
    Please download the version published today, i fixed the problem that was causing the warnings at compilation time

    This is something interesting i would like to mention, but to start with the answer... you should not relly in that method

    I personally love the concept... the point is... if you extracts all contents of something, and then rebuild it... and hashes matches with the original it means the tools (and your PC, your windows, and everything) is working perfectly... and we are 100% sure of it (because the hash match)

    The problem with RCO format is sony uses some padding "gaps" (small areas with zeroes) in between files (images, audio, etc supported by RCO format)
    As far i could read (from Zinga Burga that made rcomage) this paddings are weird, he could not identify which rules was following and why the sizes of them varies... so rcomage doesnt creates that gaps exactly like in the official RCO

    The consequence of this is... the RCO files generated by rcomage are usually smaller than officials, and the hash doesnt matches with the original... so we cant use that trick to check if everything is working nice :'(

    There are exceptions where the file generated by rcomage is eactly like the official, but are minor, most of the times is either because the original RCO did not have files inside (so no gaps in between files), or just because have a few files and by luck

    In the tutorial i wrote about "how to identify GIM settings by bruteforce"... i use this concept of rebuilding the file and comparing hashes with the original, but this only applyes to GIM-to-GIM conversions
    Is because in a GIM-to-GIM conversion the pixel data is not really converted if you use the correct settings taken from the original GIM

    But if you do a GIM-to-PNG-to-GIM conversion it depends of the original "image-format"
    The RGBA based formats respects the pixel data (so the hash chech matches with original)
    But the DXT5 based formats doesnt (pixel data is processed and hash check doesnt matches)
    DeViL303 likes this.
  5. 9,748

    pinky Bitsiboo's Other Half Developer

    Mar 8, 2015
    Likes Received:
    Trophy Points:
    The Great Gig in the Sky
    I don't know about padding within an rco container, but I do remember reading that padding with 0's was necessary for ecdsa. it must be a multiple of 16/32 bytes.
  6. 116

    Unfamed Member

    Mar 6, 2018
    Likes Received:
    Trophy Points:
    Thanks for the advice, I used the rebuild verification because I read it in the wiki, also flashed the file to the PS3 just to be sure if the file was usable or not but didn't worked, had a softbrick when the system tried to load the rco.

    With this new revision can compile the rco without any problem and the system load the rco fine. I noticed the size reduction in that file when I tried to compile the rco for the first time

    Thank you so much for fix the bug and also for the explications and tutorials, it will help me to figure out how rco works
    DeViL303, STLcardsWS and pinky like this.
  7. 683

    Zar Developer

    Oct 15, 2014
    Likes Received:
    Trophy Points:
    @sandungas I was looking at the change you made in language, in miscmap.ini, you didn't add "Spanish (Latin America)" (last one after turkish). I don't know where I found this information (porbably in devwiki).
    Is it on purpose ?
  8. 3,423

    sandungas Moderator Developer

    Dec 31, 2014
    Likes Received:
    Trophy Points:
    Babylon 20xxE series
    Yes, is made on purpose, turkish was the last for PS3
    The RCO format allows to add more languages (and you can build a RCO with new languages by adding his identifyers in rcomage miscmap.ini), the problem is the PS3 firmware is not going to load them because doesnt knows the "2-digit" language codes after turkish
    There is an rco for settings XMB category where you can see the language codes (this is the list in the side menu where you choose the language settings), you can add new languages in this list but this is not enought, i guess are needded xregistry.sys entries for them and maybe more changes i cant even imagine, i never tryed it

    I been updating the language codes table in ps3 wiki and made a screenshot to post it here

    If someone is interested in making a list of languages for the forum, i made a more simple template ready for copypaste by clicking in "reply", in post #150 of this thread:
    Last edited: Oct 21, 2018
    Zar likes this.

Share This Page