Persona 3 Calculator

I’m going to present the Persona 3 FES Persona Calculator I wrote in this post. It’s not the most sophisticated software on earth, but in my opinion it’s a nice little program to learn a bit more about optimization when programming in C#, and it’s a good start for kicking off a series of small after-work projects. And of course it’s more than overkill for the task at hand, but it’s fun to do.


A short word on what the tool does. In Persona 3 (I guess the other games are similar, but it’s the first one I’ve played), a major part of the gameplay lies in collecting the titular Persona, which are comparable to Final Fantasy X’s Aeon. You can collect Persona in the dungeon (Tartarus) after fights. The interesting thing is that you can “fuse” the Persona in order to receive new ones, which can inherit and create more abilities than they would have if you simply collected them. Also, there are special Persona you won’t be able to get without fusing them from other Persona.

All in all there are 169 Persona in Persona 3 FES, which are sorted into the 22 arcana used in Tarot. I don’t want to go into too much details of the fusion, you can find the rules written down in great detail in this document as well as in this chart. The essential thing is that you can combine up to 6 Persona and get a new Persona out of it, unless the fusion is not valid. The major factor for the validity of a fusion is that some arcana can’t be combined. Another factor is that some arcana can only be fused by using 3 or more Persona.


The goal now was to create a tool for figuring out what Persona one needs to fuse in order to get a certain target Persona. The background is that I was using this FAQ and it suggested certain Persona for certain boss fights. My specific problem was that I needed a Horus Persona for the boss fight on floor 236. The tool is at the moment far enough to calculate the necessary fusions.

In the next screenshot you see the main GUI of the current tool. You can enter which persona you already own and which level they have (the default shown for the others is their base level). It’s one of the main limitations of the tool since it takes quite some time (reading the save game would be much more convenient… see later posts), but it’s necessary in order to figure out in which order a Triangle fusion will be carried out. This was also needed in my case since Horus’ arcana (Sun) can only be created via a Triangle Fusion. At the bottom of the screen is a text box for entering which Persona you want created.


The next screenshot shows the result of trying to create a Horus. Actually, a lot of other Persona which can be created (sans special fusions) are shown.


As you can see, it contains Horus as well as the intermediate Persona. Therefore, I needed to fuse:

Nandi (41) = Apsaras + Dionysus
Uriel (63) = Orpheus + Nandi
Garuda (67) = Kumbhanda + Uriel
Horus (68) = Ose + Kingu + Garuda

Wohoo that worked! The boss is now history :-)

In the following posts, I’m going to handle:

  1. My approach
  2. Importing data directly from save games: Part 1, Part 2, Special
  3. Optimization of the algorithms: Part1, Part 2
  4. Optimizations on the language level (C#)
  5. Release
  6. Testing