Trials of Persephone started as a submission for the Magic Maker Program, an opportunity for RIT students to work full time on their game or other media concept. Rainey Walker, a 3D Digital Design major at RIT (Rainey Orsagh now- we got married), and I decided to create a game to submit for Magic Maker. We started by looking at previous projects that had been accepted for the Magic Maker program, and looked for themes and commonalities. We found that a wide range of games were accepted, although there was a tendency towards more unique and innovative games with a narrative focus. Since we are both passionate about virtual reality, we decided to make a VR game. VR shooters have always been very popular, but we wanted more fantastical theming.
So, we decided to have our player play as a spellcaster, where they would have to aim their spells similar to aiming in a shooter, but by theming it as magic we gave ourselves more freedom to experiment with mechanics that wouldn’t fit a gun themetically. We also loved how games like Boneworks and Half-Life: Alyx encouraged the player to interact with the environment and physics objects, so we decided that the player would draw their spells from the environment around them.
At this point in the development process, Rainey started working on our visual style and narrative, while I started to work on prototyping the mechanics. We were running low on time to submit for the Magic Maker Program, so my prototype was very quick and messy. We decided to use Unreal Engine because its the engine I’m most familiar with, and it makes development for VR very easy.
The first thing I did was set up the character to have their hands interact with the environment using Unreal’s physics handles, and I set up arms for the character using IK. Next I worked on the magic system- I set it up so that the player can harvest mana from the environment with the grip button, and then fire it with the trigger button. I used primitives to give the player some diagetic UI on their wrists to see what mana they have. I set up a basic enemy AI, and implemented a Pokémon-esque damage type system. I also set up some simple environmental effects of the different mana types, such as stone being used to make bridges and flora being used to grow plants.
I wasn’t very happy with the prototype when it came time to submit it- it was very hacked together, which would have been fine, but also the mechanics just weren’t fun, and they didn’t play to the strengths of virtual reality.
Despite not being too happy with the way the prototype turned out, We still submitted Trials of Persephone to the Magic Maker Program. Unfortunately, our project didn’t get chosen. We decided to keep working on it, although with the results of the prototype, and advise from the people at Magic Maker, we decided to rethink some of our original design decisions.
The first thing to do was to think about what went wrong the first time around. One of my main takeaways was that we started working in the engine too late- we invested so much time into designing the mechanics without even knowing if they were going to work, or if they were going to be fun. Another issue was that of scope- it was a very ambitious project, especially for 2 people. We were very susceptible to feature creep, and having the game in VR just accentuated the problem. In order to address these issues, we decided to transition away from VR, scale down the narrative elements, and begin prototyping right away.
I did a lot of prototyping. I iterated through tons of different ideas, looking for mechanics that felt fun- my ideology was if it was fun without any polish, it would definitely be fun with. As I worked on it, I found that movement mechanics worked really well- something that I couldn’t pursue fully in VR, due to motion sickness.
The player needing to collect mana while falling in order to save themself led to lots of tense and exciting moments, that felt incredibly gratifying to pull off. I decided to build around that feeling- where the player is moving fast, and has to think fast to keep up with their movements. It was a little too fast though, so I reduced the gravity scale slightly. I also found that the most exciting moments were when the player had no mana on hand, instead relying on collecting mana as they used it. So I decided to encourage that- I developed a mechanic where as long as the player is in the air with no mana, they have the ability to slow down time, drawing inspiration from SUPERHOT.
With that change though, the rules were starting to get over complicated. I introduced the game to some playtesters, and watching them struggle to grasp the mechanics told me that I needed to simplify. I made it so the player can only hold one mana in each hand. This let me simplify the controls further, instead of having different buttons for picking up and using spells, it's now all on the same button. It also forced the player to pick up mana as they go, and made the moments I mentioned above much more common. I also removed the requirement of having no mana to use the “bullet time” effect, and instead gave the player a timer of how much bullet time they have left. The timer resets when you hit the ground. These changes encouraged the fun moments I want the player to experience, and cut down on the clutter and clunkiness.
I was finally happy with the mechanics. I had fun playing it, and my playtesters did too. The next step was to polish and make some levels.
Some of the smaller mechanics I introduced were checkpoints, a narrative delivery system, and a system for slowly introducing the two separate hands, to make the early game less complex. I also made some AI-powered motion capture animations, implemented them, made some procedural textures for the mana spheres (now called Pneuma Spheres), and reworking the health and damage system.
I struggled some with my earlier scripts. While they were efficient, and made sense to me at the time, they were hard to read. Also, since I had experimented so much with the mechanics there were a lot of sections that were just never used, or had been changed so much that they were hard to understand. I started the project two years ago, and in that time I have grown significantly as a programmer, and I was able to rewrite a lot of the old sections for better readability and encapsulation. This experience taught me first hand why its important to write readable and robust code the first time around.
Now, my main focus is on making more levels. We have our first level done, greyboxed by me and detailed by Rainey, and are working on the second. I’ve also started working on some visual effects, which is new ground for me.