It is possible to add or remove text or data, even if it changes the umd file size, without crashing the game.
It's also possible to remove lots of extra stuff that is not used such as alternate language files (deu, esp, ita, fra) Optimizations may also be possible; such as removing zero padding, and reducing Unicode files to plain ASCII.
There is a simple structure to the umd file.
Most of the data in the umd file are the resource files themselves.
There is an index with name, offset, and size of the resource files. There is also a footer that contains the index offset and umd file size.
To change the size and then manually adjust the entries in the index and footer is laborious and a time-consuming task.
I'm working on a program that extracts or bundles the resource files from the umd file and adjusts the offsets and file size. Currently, the program extracts all the files of the RS3 xboxdynamic.umd. I'm adding the capability to extract RS3 BA xboxdynamic.umd, and RS3 xboxfiles.umd. Once that works, I'll work on the bundle process.
Here's a look at some structures of the umd file.
CODE |
struct umdfooter { DWORD umd_type; // signature of a umd file DWORD index_offset; // offset to the index table DWORD filesize;// reported file size DWORD version; // version of engine DWORD gf_id; // game file identifier };
struct indexentry { BYTE entrylen; // length of filename string char * filename; // path and name of file DWORD offset; // offset within the umdfile DWORD filesize; // size of the resource file DWORD zero_pad; };
|
The RS3 (not BA) xboxdynamic.umd file contains 536 resource files. The version that I have (US, NTSC) has a file size of 2,498,072 bytes.