Tuesday, May 20, 2014

Final Fantasy Mysic Quest: Hacking Progress

I did some searching around in an attempt to speed up working out optimal plans for fighting each time of enemy in the game. There's no need for me to cast life on every enemy if there's a list out there, right? Unfortunately I couldn't find such a list. Mystic Quest is fairly easy and relatively niche so it doesn't seem like anyone's put in the effort that's been done on games like Final Fantasy VI to work out exactly what is going on. (In the 100% speedrun for that game they manipulate the RNG to spawn Doomgame by walking in and out of a town over and over again until they see the exact pattern of NPC movements on the one move the NPC gets each time they enter town!)

What I did find was someone posting a preliminary deconstruction of what existed where in the ROM. Image tiles, stuff like that. It also listed where the monster stats were stored and gave a list of the order of the monsters but it didn't actually post what the monster stats were.

So I went and grabbed a hex editor and pulled all the stats out myself. I built a little spreadsheet to parse the monster section and convert it into something I could read so now I have health, attack, defense, speed, and magic stats for every monster and boss in the game. I also have a bunch of other columns and no idea what they mean. Several of them look more like bits that get toggled and not numbers, probably for spell immunities/weaknesses and such. I don't know what they are right now, but I figure I can start playing the game and keeping track of what works on who and probably figure some of it out.

I also found a low level guide that went through and tracked every possible encounter from each monster icon in the game and compared how much experience each fight was worth. The idea being you'd reset every single encounter you absolutely had to fight until it came out with the lowest number. Unfortunately the guy writing the guide didn't realize that you can use exit on many monsters which makes them grant no experience at all. So his 'lowest possible level' was higher than what the speed run beats the game at. On the plus side I now have a list of all possible encounters and don't need to keep fighting fight over and over to make sure I know what can spawn!

One thing that confuses me about the ROM data dump is there's nothing that seems to line up, at all, with experience or gold. I was thinking maybe there's another section of the ROM with that data in it, maybe stored with the encounter formations? But then it feels like exit shouldn't be able to remove part of the experience from a fight. I'm going to make notes of experience and gold earned for a bit and see if I can't find it in the ROM with a little trial and error searching.

I found someone's guess for damage formulas. My plan is to make a tab for my spreadsheet into a predictor for damage done based on my stats and the monster stats to see if I can verify them. They were completely deterministic so if they're right it means you can work out exactly what spells/attacks are needed to one shot each enemy in a fight. Except for crits, anyway. But the idea is to kill everything in one round except bosses so crits are irrelevant most of the time.

As part of building out this area of my spreadsheet I needed to track the stats of my buddy. I wrote down the stats for the first one and decided to try out the equipment bug by saving the game and then loading. Her stats went up because she went from using the no gear of a fresh state (which carried over to her when she joined the party) to her actual gear. I figured I could use this to get 2 data points for the damage formula so I closed my emulator and restarted the game. But when she joined up she still had the stats from before. I hadn't loaded any game since loading the ROM so that felt weird. Maybe it was an emulator issue? (I was doing testing in the emulator so I could save states.) I went to try it out on my SNES. I started a new game without loading anything and when the first character joined my party I checked out her stats. She was awesome. Because the last time I'd played the game was when I beat it during my marathon and presumably I'd loaded at some point with the last character in my party. This means the bug isn't something you need to set up to abuse... If you ever save a game on a given cartridge you're stuck with it in some form. So either I'd need to waste time saving/loading to get the 'right' stats or I'm forced to use weird stats. Might as well be forced to use the best stats?

1 comment:

Sthenno said...

I just want to say congratulations on finding a game that you can actually do this work on - that is one that is not already almost entirely solved. Speedrunning is the best.