After finding @HugoPeters work on Beyond, I became really interested in the concept of reverse-engineering a game engine, so I started working on my favourite game - Heavy Rain.
Currently I managed to:
- Read the BigFile index (the sdat encrypted file)
- Find and display a list of entries grouped by type
- Unpack all of the segs archived entries
- Read the inner structure of the entries
- Parse some of the blocks of the entries to extract data from them:
- Textures (some of them are misaligned)
- Scripts that are not compiled
- BIK Video files
- Some of the audio files + Multi-Channel audio exporting (Mostly soundtrack)
- Linking the entries together by parsing the storyboard
- Properly aligning textures
Tool usage:
* Run the tool to generate "engine.json" configuration file.
* Open the configuration file and set "qdGameDirectory" to the game file directory location
* Set vlcExeLocation to the location of your VLC Media Player installation to be able to play sounds directly from the tool
* Set loadBigFile to the BigFile index file you want to load.
The tool can extract any entry into a separate binary file by selecting an entry and clicking the Export button.
To view the inner blocks of the entry double click it in the tree. Selecting a block will automatically adjust the offset in the hex view.
To export video from an entry double click the entry, and double click the VIDEDATA block.
To export sounds from an entry double click the entry, and double click the PARTITIO block.
To play the exported sound using VLC player, double click the entry inside of the PARTITIO block.
To view scripts, double click the SCRIPT block, and select the inner script entry, it will be displayed under the Contents tab.