Hi everyone. I've (barely) started to try to figure out exactly how the game works, with the ultimate goal of making it easier to modify the original game, find glitches for TAS, and also do some crazy project that I'm not quite ready to share, simply because I'm not sure I'll actually be able to do it and I don't want people to be disappointed.
So far, I haven't been able to find much research done by others on this topic.
http://tasvideos.org/3972S.html is reasonably technical, but not even close to comprehensive. If anyone else has seen any useful information, I'd love if you could share.
Right now the debugger I'm using is Bizhawk. It's primarily designed for TAS, but it also has a lot of tools that are critically important for this sort of thing, and I haven't seen any other tools/emulators that offer the same functionality.
My first goal is creating a table of useful memory addresses and what data they store, making it possible to read data directly from the game. Being able to
modify them is much more involved for two reasons:
-Most useful information gets copied into memory in multiple places, so changing just one of them will likely do nothing or cause the game to become unstable
-Often times whatever function causes a value to change also does a bunch of other things as well, so it's often necessary to be able to reproduce all of those behaviors as well
Disassembling parts of the game might be necessary in order to accomplish this, but in some cases it's possible to figure out some logic just based on the order in which things change, etc. Also sometimes changing a value in memory directly just magically works -- "freezing" a value tends to yield better results than modifying it, but to be honest I'm not sure exactly why that's true. This kind of direct memory manipulation is in fact how the original Game Shark works:
https://gamehacking.org/faqs/hackv500c.html#playstation_code_typesAll in all, I'm not sure how far I'll be able to get with this. I've done this with Sega Genesis games mostly successfully, but the PlayStation seems much weirder to me so far. In fact, there's a chance that the Wii version would be much easier to work with, but that wouldn't be my first choice.
Edit: I'm going to keep the most up to date documents here so that people won't have to search the entire thread to find the newest version.
SystemID PSX
10E5CA d u 0 MainRAM Lives
0C973C d u 0 MainRAM Lives (copy)
10E5D0 d u 0 MainRAM Health
1FFDD8 d u 0 MainRAM Facing Forward/Back
1FFDDC d u 0 MainRAM Facing Left/Right
0BF020 d 2 0 MainRAM X Pos 1
0BF060 d 2 0 MainRAM X Pos 2
10E5F4 d u 0 MainRAM X Pos 2 (copy)
0C95CC d u 0 MainRAM ? X Pos on Ground
1FFE50 d u 0 MainRAM ? Derived from X Pos
10674C d 2 0 MainRAM Y Pos 1
1FFD40 d 2 0 MainRAM Y Pos 2
0BEF98 d u 0 MainRAM ? Y Pos in Jump
0BEFA0 d u 0 MainRAM ? Y Pos in Jump
1FFD38 d s 0 MainRAM ? Y Pos on Ground
1FFD1C d 2 0 MainRAM ? Fall Down Height
1FFDCC d 2 0 MainRAM ? Jump Up Height
1FFE18 d u 0 MainRAM ? Colliding