I started looking into updating the run, but I've immediately run into a major roadblock that may sound familiar to anyone who's spoken to me for longer than ten seconds: I cannot, for the life of me, figure out how the RNG works. All I've managed to figure out over two full days of looking is that the global timer at
$E97 (4byte) is involved, somehow, but only sometimes. There's some other factors in play as well, but trying to find other values in RAM has proved fruitless, namely because half of the values that change either softlock the game or outright crash it when they're modified, and naturally the other half don't change the RNG. Given how much of this game is manipulation and how tight it is in the published run, I don't see myself finishing this if I have to brute force everything, and I've barely even started in the first place.
For battles at least, the outcome of an attack seems to be determined around the time it happens visually, with the character's attack textbox being the last thing that can affect it, but delaying any action by a frame seems to lead to different results down the line. Delaying the attack textbox by two frames could be a miss, delaying a previous textbox by two frames could be a critical hit, delaying one textbox by a frame and entering the battle a frame later could be a normal hit. Certain inputs also seem to have some sort of effect on the outcome of an attack without needing to delay at all, but since most attacks go through and damage values are completely static, it's extremely hard to tell what's changing unless it actually leads to a miss or a crit.
Here's a userfile that goes up to the second battle of the game if anyone wants to mess around with this:
User movie #637849514729792831
A few things you can mess around with:
- Adding an Up or Down input at frame 9391 will change Kaeli's first attack to a miss.
- Adding blank frames after the input at 9389 so that the next two A presses happen at 9396 and 9409 will also cause Kaeli's first attack to miss. Adding any input at 9408, even A, will change it back to a hit.
- Again, delaying any input could lead to a different result down the road. Delaying multiple different inputs for various amounts of frames has different effects over delaying one input for the same amount of frames.
- The global timer still factors in sometimes. It may factor in all the time, actually, but is interfacing with some other value(s) to produce a result.
If somebody can figure this out, even if it's the easiest thing in the world and I'm just too much of an idiot to find it myself, congratulations on the free co-authorship credit you'll get in return.