Elixir Mixer is a VR game designed for the Oculus Rift where players experience life as a student witch. You use the ingredients provided to mix potions and inflict them on your fellow students.
The full game was developed over the course of 10 weeks.
I acted as Lead Programmer and Lead Character Artist. I programmed all of the main code using blueprint scripting in Unreal Engine 4. I also modeled, rigged, and animated the student character.
The cauldron receives the ingredients, recognizes what it is, respawns the ingredient on the player's work desk, then destroys the original BP.
The first ingredient entered narrows the possible potion list down. The cauldron waits until two ingredients have been entered to find the result. It spawns the correct potion above the cauldron for the player to grab, spawns a particle effect, plays the sound cue, and clears the list of entered ingredients. It is then ready to receive the next combination.
This would not have been possible without Professor Aram Cookson's aid. Thanks, professor!
The original code for the potion effects on students was a mess. (above)
When the capsule collision around the student was overlapped, it would go down the list of possible potions until it found the true object that struck it, then fire the consequences. This worked occasionally, but in gameplay testing I found that half the time a student was hit, nothing would happen as the code wasn't firing properly.
Once I had the chance to, I completely restructured the students code. (above) Not only does it function better, but it is cleaner and easier to read. People other than myself can easily locate and edit information if need be.
Now the potions send a BPI Message to the student to fire the corresponding event when it collides with the student. (below) It also sends a BPI Message to the visual scorekeeper to show the player that points have been won, and sends the point amount to the game mode.
All ten ingredients are controlled by one blueprint. (above) When placed in game, you can chose which mesh you want. This blueprint will remember which mesh was chosen, and where the developer placed it when the cauldron or kill floor respawns it. The kill floor is in place for when a player drops or throws an ingredient out of range. (below) Each ingredient has it's own sound, which plays when the player picks it up.
Originally, when the ingredients respawned they would go shooting around the level. This was fixed by disabling the physics on each object until a second after it respawned, so it could safely land on the table without issue. (above)
Thanks to Brad Pirkle for helping me figure this out, and for teaching me about BPIs!
There are one hundred possible combinations (above, left) and twenty-three successful resulting potions, each of which can be produced by four ingredient combinations. (above, right) Combining an ingredient with itself results in a dud.
Each student has several options for customization.
I created the body mesh and rigged it, then animated the walk and idles that can be chosen. I also created all of the hair options, and one of the hats. The body textures were made by my teammates Ina Tomecek and Cassidy Elem. Each of us on the team modeled a hat.
When placed in the level, the hat mesh, hair mesh and texture, and body texture can be set.
You can chose whether the student is walking and draw their spline path, or indicate that they are idle and chose their idle animation.
There is also an option to delay the animation beginning by tenths of a second so that the students in a classroom don't all move in sync.
The timer keeps track of the time, the points, and the win/lose states.
The player can't start a level until they have flipped an hourglass over and started the level timer. Until they have done so, a semi-visible barrier surrounds their play space and no potions can be thrown. (below)
In effort to be mindful of players that are hearing impaired, there is a large visual timer to show the time remaining. (left) The professor in game also gives periodic reminders of the time remaining. The scorekeeper on the right is also large in-game to maintain visibility.
Depending on the specifics of the level, the player can win by earning more than specific number of points by the time the level runs out, or by meeting a point requirement before time runs out. (below)
If they win, they are sent to the next level. If they lose, they are sent back to the main menu hub.
I avoided reinventing the wheel as much as possible when it came to enabling our game to play with the Oculus Rift.
I used the Unreal Pickup blueprint example to enable pickups. (above)
I used the Unreal Motion Controller Pawn for the player character, and stripped out the ability to teleport.
The most important thing was this little node in the level blueprint. Without this, our player pawn wouldn't connect to the player's headset.