Hiya. I'm not exactly the brightest when it comes to reverse engineering - typically I just like to tool around with the end result as opposed to actually getting there. But for this case I'm looking at how the game works.
From what I've seen, heavy rain and BTS run almost exactly the same way. Quote:
Okay, first a little explanation about how Beyond works.
Beyond (and Heavy Rain) store its data in blocks called Communicators.
A Communicator is a table containing data for a certain function in the game. These are formatted as precompiled Lua "function chunks". The values of these "settings" are stored either compressed (as a segs entry, which is a split up ZLIB archive), or uncompressed (as a QZIP entry, which is funny, because "ZIP" normally indicates a compressed file entry). Aside from storing just values as Lua functions, modified versions of Communicators are also used for storing the "actual" scene scripts, model data, animation data, (very small amounts of) audio, video (like the sport scenes and cartoons on the in-game TVs), textures, dialog sequence text, and more.
I don't know too much else as I've just began looking at this game. Like I said I'm not exactly the brightest and I'm in the process of learning more as I look at each script I receive.
Sadly the one tool somebody wrote to extract the chunked data together to complete entire models/textures has been gone from the internet with no mirrors.
An interesting thread:
http://forum.xentax.com/viewtopic.php?f=32&t=11411 Though it is about BTS I'm certain heavy rain behaves almost exactly the same way.
In terms of getting models and textures, I've found the best way to get textures is to extract them from the .segs data, and the best way to get models is straight from making a memory dump in-game (I have not seen ANY model data whatsoever in the .segs files, not sure how that works)
Right now (and I know this is probably a horrible way to do it) I have done this, basically:
1. Combined every .d## file into a single file. (copy *.d* out.bin)
2. Ran the segs dumper script on it, giving me a good 40k+ .segs files.
3. Decompressed every segs file.
4. Combined every decompressed segs file into one data file. (copy *.seg_unp allsegs.bin)
This lets me view everything uncompressed at once in one file via a hex editor. It's really counter-productive but it lets me search for what I want.