Battle of Nowhere is a virtual reality horde shooter I developed while an intern at Great Victory Legends, Inc. Players utilize found weapons and powerups to aid in a desperate fight for survival against waves of enemies in ever-increasing numbers in a virtual reality environment.
Programmed behaviors for 3 enemy types, a multi-phase boss fight, and a companion who aids the player and emotes in response to in-game events.
Developed an in-depth and designer-friendly wave creator, allowing for customization in the enemies that spawn, which lane they spawn in, what items drop at the start of the wave, and other handy features.
Implemented UI art and created the functionality for displaying player performance statistics and world variables like the number of enemies remaining in a wave, time until the next wave, etc.
Battle of Nowhere was my first project developed in a professional environment, and as such I was presented with a very steep learning curve. I had little experience with network-based game development before joining GVL, and in the first two weeks I was tasked with quickly familiarizing myself with it by creating a functional online PvP game from scratch, using the Photon Fusion framework for networked play in Unity.
With only fragmented tutorials and documentation available on the Photon website, it was largely up to me to research the framework, develop an understanding of client/server networked play, and use this information to thoughtfully assemble a simple demo within the two training weeks. While this task was challenging and not without frustration, I do believe I stuck the landing, surpassing the expectations of my supervisor with my results and comfortably advancing to hands-on development of Battle of Nowhere.
The learning experience did not stop there, as continued work with GVL introduced me to the workflow of developing games for virtual reality. Unity provided a lot of premade VR functionality that was utilized in the project, and I was assigned many a task that involved analyzing and even modifying the existing code to implement new features.
A particularly memorable assignment was to create the ability to shoot weapon powerups to equip their respective weapons. Firing at the shotgun powerup, for example, would automatically replace the gun in your hand with a shotgun, whereas before you would have to manually drop and pick up guns with your VR controllers. Implementing such a feature required me to thoughtfully read through the existing code and track down the methods for grabbing and releasing weapons, assigning them to holsters and hands, and identifying which gun was used in which hand to shoot the powerup, so I could then craft my own method that utilized the proper channels to perform the proposed weapon swap in one fluid, unintrusive motion. This task greatly improved my ability to read and build upon existing code.