It continues to amaze me how complex these systems (Phoenix Wright emulators) can be. Each one is trying very hard to reverse engineer the original games and make something that can replicate the experience in a pleasing way. There are also concerns about how well people can actually use the systems to realize their vision for a fan case, as well as how far off the beaten track you are able to go in terms of new features that weren’t in the original games. Though every developer who has embarked on a journey to create a Phoenix Wright engine has had the exact same template to work from, the amount of ways to approach the problem are many.
As I write a converter from Ace Attorney Online to PyWright, I am surprised at how often an assumption I made was wrong. Just today I realized that the code I was outputting for cross examinations was missing a lot of things. The cursory job I had done with them before seemed to work for my first test, and I left it alone for a while. But it turns out my simple test was the only accurate cross exam converted. A lot of the code it outputs needed to be reversed – it was putting the failure message right after the statements, causing it to show the failure every time. Also, the labels for certain situations were in the wrong places, and the counciler messages were tricky to get just right as well.
In the process, I even found one area of AAO I can improve on. The “RetourCI” command in AAO appears after a failure message, such as presenting the wrong evidence, or pressing a statement without text defined. (I think in AAO you HAVE to have text defined in order to press, no?) Anyway, the argument passed to RetourCI seems to always be the first line of a cross examination. I could be wrong, but this means that in all AAO games, if you present the wrong evidence, it will restart the cross exam from the begining, instead of continuing the next statement. Correct me if I’m wrong, but I couldn’t find any controls to make RetourCI go to the next statement. But when I convert, I can easily translate “RetourCI” into “resume” which is the PyWright command for exactly that behavior. It might be something unas could add in the future
Anyway, my point is, even though the general idea behind a Phoenix Wright engine is very simple; when you start getting into details it’s astounding how much hidden complexity there is, and how many different ways there are to approach those problems. I discovered this when I first wrote PyWright, but I am discovering it even more, as I explore someone else’s ideas and approaches.
I think writing another zelda engine would have been easier
Anyway, I think I am approaching the home stretch with the AAO converter. Barring any real showstoppers, it should be ready in a week (along with PyWright 0.977, knock on wood). Also, it is tuned for aao v5, but when unas upgrades he often updates all of the games automatically. A good way to ensure your game will be able to be converted, even when he switches to v6, is to make a backup. You can do this by opening your game in play mode, in aao, and then saving the web page html. In firefox, you can do this by file->save page as->web page, complete. Make a folder for it to keep it tidy.