My thoughts on the german (cut) version / savegame conversion to uncut?

So, hi. Bought that game yesterday on steam sale, put already 9 hours in it, only to realize the german version has a dead end at 31%:
- Room service crashes the game if I try to plant a bomb
- Eternal Sunshine crashes halfway through the middle cutscene (right before the showdown)
- Reunion tour is crashing while driving around (altough I belive I could figure out how to drive safely and could circumvent this with a little luck).

The usual fixes are not availiable for the cut version, so I did a little magic and now I have the uncut up and running (it's english, but that could be fixed easily if I wanted to). Loading my old save sadly crashes the game. But loosing 'bout 9 hours in gameplay? do not want! So i took a quick look into converting my savegame.

First I tried to look at the obvios: I created another savegame with the now farily stable uncut version and compared these two. Sadly, I made no success, nothing obvious to see.

So I fired up to do some more magic and looked at the main binary itself. We all know that the programming of this PC port is bad. Like, REALLY bad. But looking at the assembly gives all that a new dimension. If you don't belive me, go and figure out yourself how they load savegames. It's a nightmare.

Problem is tough: I now know perfectly how to exploit the save game loading process (i.e. i could make up some savegame that would screw around with your system if you are silly enough to run sr2 as admin). The thing I did not figure out is the interesting: HOW THE HELL differ the two save games from each other?

I know here are people around that messed around with sr2 more than I will do in my whole life. If you consider yourself one of these I would gladly apreciate it if you share some insight with me.

In the meantime I'll start plaing from scratch again, heavvily cursing those that did QA on that PC port (before release, of course) - if anybody did.

Someone should ask Voliation for debug symbols, in exchange they get a patched executable (lol)...
 
The problem is the PC port of SR2 was made by another company entirely, and they did some really weird stuff. The result is often someone will find something out about the files, comment, and Volition will go "What were they thinking?" or something of that effect. We probably can't get much info from them if it differs that much from the standard PC port.. they'd know how the xbox version saves were stored at least.
You might actually know the most bout the savegame design and loading. In fact, to convert, the likelihood is you'd have to figure out what parts are where in the savegames (both versions), and copy over data with any conversions. If/when you do so, let us know, because then we'll know all the fun of a save-game editor and be able to make one for SR2 :P

(Unless someone actually figured it out and I missed it.. I know SR3 is fairly known, and SR4 is getting worked over well, but can't recall anyone noting SR2's saves)
 
Well thanks for your answer. Not exactly what I've hoped, but I found out some more interesting things regarding various other crashes. Most of them (especially those while driving) seem to originate from how the game multithreads - or, to be more correctly, how it tries to multithread. Maybe (but i don't have any proof for that now) the broken multithreading also has some side-effects on the prefetching... who knows, reversing x86 ms-vc++ can be a bit bitchy sometimes, especially if one has such a messy executable. They have tons of debug code in there, but not anything substentially useful for me.

If anyone is interested, loading the save files begins at 0x00691c30 with reading all bbsave-files from a given directory. As far as actual debugging goes: I'm currently lacking a paid version of IDA pro so I am quite limited, especially with the debug functions.
 
It's fairly well known that the PC ports are not the most optimized versions.. and tend to have tremendous timing issues. They can run too fast or too slow, sometimes in the same minute on the same system. There's stuff to try to smooth some of it out, but I'm not surprised it's really bad multithreading somewhere behind parts of it. When the game was made for the xbox at least it was a given finite defined hardware set and each console ws identical so you could use timing off of it. You can't port that cleanly if it's deeply assumed. (Ever tried to emulate an old dos game that uses cpu cycles for timing? Heck, some did that right into the win9X era sadly)

So yeah, you're probably making a fair bit of headway into untangling it, and are probably going to find it easier to decompose the savegames directly then just rip and port your data from the german save. Perhaps some of the people who worked on things like the powertools would comment here on what they know about the underlying systems?

(Of course, you're going to end up spending more time than you'd save by doing this instead of just replaying content, but fun is where you find it ;) )
 
(Ever tried to emulate an old dos game that uses cpu cycles for timing? Heck, some did that right into the win9X era sadly)
Need for Speed: Rivals does exactly that - not with cpu cycles but with frame rate. They limited on 30fps. If you unlimit it, it blows up. And that's a 2013 game.
But enough of off-topic, I'm still figuring things out. There's a whole bunch of fun remaining here.
 
Back
Top