Grenade Arena pits two teams against each other where players use throwable grenades to eliminate their opponents and score points.
Inspired by competitive arena games, and dissatisfied with the predominance of VR shooters, I wanted to concept a game that could take advantage of throwing in VR. I hypothesized that throwing could feel more immersive and visceral than the point-and-shoot style of most other VR action games due to the familiarity of the movement. I also believed throwing could introduce an aspect of anticipation and skill that could make the gameplay engaging. This game project was also an opportunity for me to learn how to test products with users and develop Unreal Engine code for multiplayer replication. I built and shipped the game on the Helios platform during my free time over a 3 month duration. The Helios platform provides for base code classes, backend networking, and the player avatar system, but all other visuals, code, and gameplay were created by me as a solo developer.
The biggest challenge of creating this experience was working through the Helios SDK which had specific requirements and limitations. Helios is a social VR platform whose core feature is allowing players to create or choose their own identity through an avatar and then join different rooms or ‘worlds’ with other players. The platform is set up such that players have ultimate authority over their avatar, so I had to design the game system to allow for this plurality while also ensuring specific avatars did not have unfair advantages.
This limitation in the SDK meant that I couldn’t alter the avatar code directly to create the gameplay. My solution was to create custom Blueprint actors that would attach to each avatar, and these actors would carry out all of the functionality independent of the avatar itself. The gameplay code is structured around three primary Blueprints:
- Game Mode: Handles all high-level tracking, such as score and team changes
- Player Controller: Handles all player-specific controls, UI, and functions. Works as a conduit between local players and the server for replication.
- Custom attached actors: Handle all low-level events and metrics, such as displaying team colors, tracking player health, and checking for hits.
All code was developed through Unreal’s Blueprint system including all of the multiplayer replication. Unreal’s multiplayer system sets the host as authoritative, meaning all gameplay events need to be sent and distributed through the host to all players. No two players can interact directly with each other. This required careful execution of all gameplay events to ensure players stayed in-sync with each other.
One of the challenges I encountered was trying to develop a hit detection system that would work accurately and efficiently, allowing players to hide behind cover to avoid grenade explosions. Initially, I tried casting a multitude of rays from the grenade detonation to check for nearby players, but this would have required an enormous amount of rays, would have been too costly, and still would not guarantee proper hit detection. My solution was to create a hit detection actor with 6 distinct check points. This actor would attach to all players and scale to their avatar’s size. If a player is within range of the detonation, one ray is cast to each point. If at least one ray is not blocked, a successful hit is registered.
To design the arena environment, I started from a schematic approach. I wanted to encourage social interaction and teamwork, so I divided the arena in half and placed three prospective points of interest that players would try to capture to control the arena. The arena was scaled so that a player could throw a grenade from one point of interest to the adjacent one, setting up a relationship between the points of interest. For new players, or players respawning, I designated safe zones outside the arena proper where players were safe from harm, allowing them to familiarize themselves with the controls. The final design incorporated an elevated viewing deck as well for players that want to observe or socialize.
To enhance the social interactions of the game, I added a scoreboard that tracks scores of all players and teams. Additionally, gameplay events (kills and deaths) are broadcast to all players in real time, similar to other arena-style games.
I published the first prototype for testing after 6 weeks of development. My goal was to keep players interested for more than 10 minutes on average. I figured less than 10 minutes would indicate either the game was broken or the player became bored–both of which are failure conditions. The first prototype saw an average of 10-15 minutes and quickly rose to more than double that after major bugs were fixed and gameplay was refined.