A general purpose RCO creation and manipulation command-line tool.
C C++ Shell
Latest commit 54ca649 Feb 5, 2011 @zingaburga zingaburga Fix up Win32 version of is_dir()
Still untested


Rcomage v1.1.1 readme
written by ZiNgA BuRgA

URL: http://endlessparadigm.com/forum/showthread.php?tid=19501

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.

Unfortunately, I've released this in a bit of a rush, so haven't really checked many things and haven't added many features I intended to put in.

I've included a very basic GUI to save you learning the commands.  For normal operation, for editing an RCO file, you'd 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.

 General 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

 Planned Features
- better sanity checks and error handling
- giant cleanup of code (so I can release it later and allow Linux users to compile it)
- RLZ compression/decompression
- better information displays
- internal BMP <-> GIM converter
- documentation of RCOXML format as well as the RCO file format
- more functions (rather than just "dump" and "compile" etc)
- discovery of various "unknown" values
- anything not on my mind right now

- RCO Editor doesn't write adler32 checksums when compressing images (yes, stupid stupid me) 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 (yes, I really did not write gimconv)
- 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 to me.  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

- 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)
- anyone I forgot to mention