Inspiration
When we were turned loose to work on our projects, I was really struggling to come up with ideas. Eventually, I had settled on some sort of space shooter where you would fly through a space station and shoot enemies. However, as I worked on the game for the first weak, I really wasn't enjoying it. It felt boring, it had so many technical limitations. I wasn't sure if I liked my own game. I wasn't sure if I had enough time to start a new project, or if that was even allowed. I was having so much fun at Make School up to that point, and I was really sad thinking that I would have to spend the rest of it working on this doomed project.
On friday, I gathered the courage to talk to my instructor, Andrija, to see if I could pull the plug. He agreed, and we had an impromptu second brainstorming session. Enzo gave me the idea of taking a simple idea for a game and forcing myself to make eight variations of it as a way of finding new ideas. I decided to try eight variations of a simple "VR survival shooter." The first three were simple, but when I was reaching the fourth and fifth I was really running out of ideas. After about an hour, my sixth idea was "A survival shooter where you have to assemble your weapons as you use them." This naturally led to the idea of brewing potions, and magic was something I had always wanted to explore with VR.
I was a week behind, but fueled with new passion for a game concept that I truly enjoyed, I worked extra hard. I ended up finishing on time, and enjoying the second half of Make School to its fullest.
What it does
In this game, you can combine ingredients to create six different potions, each having a unique effect ranging from a massive Area of Effect damage fireball to a potion which increases the effectiveness of your other potions. You must defend your tower against oncoming waves of goblins. After each level, the goblins get faster and the waves get longer. You have to find the best strategies to defend your tower under ever harder circumstances.
There is also a mysterious backstory which is revealed line by line each time you complete a level. You must progress very far in order to learn the full story.
How I built it
Each feature is actually relatively simple. The three main aspects are:
Player Mechanics In this game, the shelf which has the ingredients used to make potions is at a distance from the player, and they use their telekinetic abilities to pull objects off of it from afar. This is done using the OverlapBox method to see if the player is pointing at a grab-able object, and then Vector3.MoveTowards to pull it to the player. Adding a vibration to the controller and a "whoosh" sound effect makes this one of the most satisfying mechanics. Additionally, the player can pick up nearby objects normally, using standard NewtonVR code.
Potion Effects Making potions is very simple - if an "Ingredient" object comes within the top of the "Potion" object's collider, it adds that ingredient to the potion. When the potion collides with an enemy or the ground, it checks what's inside of it and makes the appropriate elemental effect. Each elemental effect is a script which simply creates the various effects.
Enemies The enemies were extremely simple - they use NavMesh to walk directly towards the player's location, and when they reach a target inside the tower they deal damage to it and disappear. Their movement speed is increased based on the level, as well as the number of enemies per level.
Challenges I ran into
The biggest challenge was the constant battle between my code for pulling objects from afar and NewtonVR's code for picking up nearby objects. What happens if you're pointing at an object on the shelf, but your hand is also in range of picking up an object nearby it? It feels weird to have it do both at the same time. But making it so that it prioritizes pulling objects off the shelf frequently caused players to pull things into their hands which they didn't mean to grab - sometimes, knocking over a mountain of potions that they had so delicately stacked.
I didn't have enough time to remove NewtonVR's code, so instead I had to make some modifications to it. I made it so that if there was an object within the NewtonVR pickup range, you couldn't pull objects off of shelves. However, NewtonVR's default pickup range is HUGE - you could pick up objects that weren't even remotely near your hand, leading to the player being confused as to why they couldn't pull something from the shelf. To make things worse, I couldn't find the variable in the code which controlled the grab range, so instead, I had to run code on startup that found the collider representing the hand's range and manually shrink it. It was ugly, but it worked (sort of).
Accomplishments that I'm proud of
I'm proud that I was able to finish this game despite losing my first week, and that I was actually able to have a finished game at all. It's so satisfying knowing that this thing is finished and out in the world now!
What I learned
I learned that automatically using NewtonVR is maybe not always the correct solution, especially if you're planning to have a large set of mechanics that all hinge on grabbing.
What's next for Equivalent Exchange VR
During this project, I put HEAVY focus on player mechanics and the first few levels of the game. As a result, players will probably get bored after they master the basics and find that there are only two types of enemies.
Next, I would add random variations to the enemies that get introduced at higher levels. For example, making groups of enemies immune to a random type of potion(s), forcing the player to constantly vary their strategy. I'd also make movement a bit more complex than just three lines of goblins walking towards the tower, maybe adding enemies that are faster or slower, smaller or larger, or maybe some that charged all the way from the back after a large delay.

Log in or sign up for Devpost to join the conversation.