From GameBrew

AuthorZiNgA BuRgA
Last Updated2018/11/21
TypePC Utilities

Rcomage is a general purpose RCO creation/manipulation tool. It is designed to allow RCOs to be modified in almost any way, and intended to replace my previous application, RCO Editor. Rcomage should also generate almost fully compliant resource files (very similar to original Sony RCOs).

RCO files are resource files that can be found in the PSP's flash0:/vsh/resource/ directory which contain stuff like icon data and various other resource components. RCOs can also be found on UMD Video/Audio discs, where they are used to supply resources to the menus.

Currently, it only has two primary features - RCO dumping and RCO compiling.

User guide

General usage

Included is a very basic GUI to save you learning the commands.

For normal operation like editing an RCO file, open the RCO in the Dump tab, select where to export the structure and resources to, then click Dump. You may then proceed to edit the dump of the RCO (eg, replace images or modify the structure by editing the XML dump).

To compile an RCO go to the Compile tab, select a valid XML structure file, select where to save the new RCO and click Compile.

For using the CLI, use the command 'rcomage help' for details.

RCOXML structure

The following should give you a general idea of the general structure for an RCO file. Not all nodes below are required, and various object/anim entries are omitted.

RcoFile - XML root element; generally does not need to be modified
        MainTree - root RCO node from which everything must descend from
                VSMXFile - attached UMD virtual machine instruction code, for UMD and some LFTV RCOs.  Only one may exist in an RCO file
                ImageTree - parent node from which all image resources descend from
                ModelTree - parent node from which all model resources descend from
                SoundTree - parent node from which all sound resources descend from
                ObjectTree - parent node from which all object pages descend from
                                page objects go here
                                page objects go here
                AnimTree - parent node from which all animation sequences descend from
                                animation entries go here
                                animation entries go here


  • RCO Editor doesn't write adler32 checksums when compressing images so anything edited with RCOEdit will generate a warning when you try to dump it; use --no-decomp-warn flag to suppress warnings (the GUI automatically does this).
  • Sony's Gimconv is a little slow, so if you're dumping and converting GIMs, be a little patient.
  • What was referred to as ""page"" in RCOEdit is now called ""object"".
  • Conversions (such as WAV<->VAG or PNG<->GIM) may be lossy.
  • A recent update_plugin.rco decompressed with Resurssiklunssi will generate a warning, due to Sony deciding not to compress a particular icon in it, in turn, changing the structure a bit, which Resurssiklunssi wasn't designed to handle, so generates a ""bad"" RCO; recompiling the RCO with Rcomage will fix this issue however.
  • if zlib level 9 compression is used (specify '--zlib-method default --zlib-level 9' when compiling), RCOs recompiled with Rcomage should either be the same size as the original (decompressed with Resurssiklunssi), or 4 bytes smaller. This 4 byte difference is due to some weird padding found in the EventData segment of some RCOs, which don't seem to really make any sense. However, these 4 bytes don't seem to be necessary.
  • Other differences which may occur when recompiling are reordering of names/events and how null text data is represented.




v1.1.1 2010/06/02

  • Add --ini-dir option to allow specifying INI directory for the CLI.
  • Add version tag 0x97 as a valid PS3 tag (fixes some issues with dumping RCOs from older PS3 firmwares) [thanks to Mr Shizzy for the samples].
  • Export animtable tag constants to .ini file; also fix up PS3's special MoveTo animation.
  • Minor modification to WAV parser - will now skip bytes if header specifies it.
  • Remove UTF-8 BOMs from dumped XML before the text values - seems to cause issues on some machines (and I don't think it's exactly valid anyway).
  • Strip nulls from text (RCO Editor may add them).
  • Replace the various ""unknownInt1"" name with ""accelMode"" - thanks to Vegetano1 for the find.

v1.1.0 2010/04/03

  • Minor message output changes.
  • Fixed bug where rcomage may have tried to convert non-GIM images through gimconv when dumping.
  • Fixed minor issue if Image/Sound/Text tree contained no subentries.
  • Removed option to select compression for PNG/JPG/TIF/GIF resources in GUI as it's mostly useless and may break the RCO if changed.
  • Add UMDFlag attribute to RcoFile tag.
  • Reduce the use of CDATA sections in the dumped text XML file.
  • Add basic VSMX decoder/encoder; add corresponding option when dumping/compiling in CLI and GUI, as well as vsmxdec and vsmxenc functions in the CLI.
  • Add experimental VSMX -> Javascript decompiler. This will most likely crash, but if you're lucky, it might go through and give half-readable output. Only use this if you're really interested; can only be accessed via the CLI using the --decompile option of vsmxdec.
  • Export some internal constants to .ini files.
  • Add support for UTF8 and UTF32 text in RCOs (found in PS3 RCOs); also fixed some potential character encoding issues.
  • Add support for Fontstyle entries (used in the sysconf PS3 RCO).
  • Greatly improve handling PS3 RCO object structures (thanks goes to geohot for RCO samples).
  • Add support for writing PS3 RCOs; also modify GimConv to add PS3 configuration option.

v1.0.2 2009/12/07

  • Statically link all libraries; also now built with MinGW so MSVC runtime no longer required.
  • Include required DLLs with GimConv.
  • Fixed bug in GUI where it didn't chdir across drives.
  • Partially removed annoying auto-fill for dumping RCOs for GUI.
  • Fixed crash where bad label reference was supplied.
  • Add like two additional warnings.
  • Add ability to select zlib compression options from CLI.
  • Partial support for reading big-endian (PS3?) RCOs; it's ""partial"" as there are still issues - mainly object handling is mostly stuffed up.
  • Fix regression in earlier update which broke VSMX dumping.
  • Minor changes to XML format.
  • APply hack which hopefully fixes up GimConv converting from some GIMs.
  • And if the above still causes GimConv to freeze, added a timeout to try to not cause Rcomage to lock up as well.
  • Added ""vagenc"" and ""vagdec"" functions if you happen to want to convert a .vag file.
  • Added ""extract"" function (not 100% complete)

v1.0.1 2009/10/28

  • Fix crash with WAV -> VAG conversion.
  • Fix sound clipping issues with WAV -> VAG conversion (fix appears to work, but I really haven't looked at it much).
  • Added ability for compile function to read from stdin.
  • Use \ for directory separators on Windows.
  • Slight speedup with gimconv (no longer invokes the cmd shell).
  • '--xml-only' switch for dumping removed, use '--resdir -' instead.
  • Fix bugs relating to handling XML files with resource dumping disabled.
  • Minor changes to messages.
  • GUI will attempt to use relative paths instead of always relying on absolute paths.
  • Fix folder creation bug in GUI.
  • Other minor GUI changes.


  • Highboy for his WAV <-> VAG conversion sample code.
  • Z33 for sample GIM handling code and his various RCO tools as well as guides/investigations on various file formats.
  • Creators of 7-zip for their awesome implementation of deflate.
  • Supporting libraries: libxml2, iconv and zlib.
  • Geohot for help with PS3 RCO support.
  • Alpha testers, for discovering some issues and supporting theme development.
  • Everyone else supporting PSP customisation and homebrew scene (too numerous to name).

External links