Daerandin
Well-Known Member
I have the Steam Edition of this game, and I have managed to get all in-game awards and Steam achievements in the normal way. However, this was an extremely boring process as some had annoying requirements such as spending total 10 days in-game. So that got me interested in figuring out how to circumvent the requirements.
I started by looking at the files associated to your in-game profile. There are two files, config.dat and stats.dat, both are binary data. Both are zlib compressed, and once you uncompress them you can inspect them with a hex editor. Both files consist of 32-bit values, all in little-endian byte ordering. With the help of my 100% complete in-game profile, and a new profile, I managed to figure out pretty all the useful data values in those files. In short, config.dat has data for which maps you have unlocked/completed in the campaigns/trails. The stats.dat file consists a lot of useless statistics, as well as which in-game awards you have unlocked.
Steam Achievements are given when you earn an in-game award in this game. So I can unlock all in-game awards by editing the stats.dat file, but this will not yield Steam Achievements. But I managed to figure that out too. I ran the game, and used the edb debugger to attach to the game process. Once I managed to identify the specific memory address for awards, I could put a breakpoint on such an address when the game modified it. With this I managed to identify all parts of the game code that give you awards after a match.
This part was quite interesting, the game first checks if your profile already has an award. If not, then it moves on to perform one or more checks to see if you qualify for the award. For a while I was considering modifying the actual checks, but that would require way too much work. The easier solution was just to remove the conditional jump that happens if you don't qualify. Since I already have all achievements I couldn't test myself, but I made a small program to test one specific achievement, and it worked both two others who tested it.
If anyone is interested in the full details of my investigation, just let me know.
In any case, I am going to create programs (for both windows and Linux) to let you unlock all campaign/trails maps and fill the in-game awards-cabinet. I will additionally create a separate program to modify game code while it is running so that you can qualify for awards, which will also result in getting Steam achievements.
I started by looking at the files associated to your in-game profile. There are two files, config.dat and stats.dat, both are binary data. Both are zlib compressed, and once you uncompress them you can inspect them with a hex editor. Both files consist of 32-bit values, all in little-endian byte ordering. With the help of my 100% complete in-game profile, and a new profile, I managed to figure out pretty all the useful data values in those files. In short, config.dat has data for which maps you have unlocked/completed in the campaigns/trails. The stats.dat file consists a lot of useless statistics, as well as which in-game awards you have unlocked.
Steam Achievements are given when you earn an in-game award in this game. So I can unlock all in-game awards by editing the stats.dat file, but this will not yield Steam Achievements. But I managed to figure that out too. I ran the game, and used the edb debugger to attach to the game process. Once I managed to identify the specific memory address for awards, I could put a breakpoint on such an address when the game modified it. With this I managed to identify all parts of the game code that give you awards after a match.
This part was quite interesting, the game first checks if your profile already has an award. If not, then it moves on to perform one or more checks to see if you qualify for the award. For a while I was considering modifying the actual checks, but that would require way too much work. The easier solution was just to remove the conditional jump that happens if you don't qualify. Since I already have all achievements I couldn't test myself, but I made a small program to test one specific achievement, and it worked both two others who tested it.
If anyone is interested in the full details of my investigation, just let me know.
In any case, I am going to create programs (for both windows and Linux) to let you unlock all campaign/trails maps and fill the in-game awards-cabinet. I will additionally create a separate program to modify game code while it is running so that you can qualify for awards, which will also result in getting Steam achievements.