I developed and published an arcade-style VR game where the aim is to hit targets with a boomerang before they explode. It's available for free on Windows via Steam, compatible with HTC Vive and Oculus Rift.
The following is a partial breakdown of the development of Boom Boomerang and a summary of its main features.
Below are expandable sections outlining broad aspects of the project's conception, followed by more extensive sections where I go through stages of production and talk about some of the key aspects of the project.
Click to expand each section below.
I wanted to make a game that was easy to play but difficult to master. Players should intuitively know what they have to do, and they should feel a sense of accomplishment which correlates with a learning curve based on increased cognitive understanding and muscle memory.
This was my first project in Unreal. Making this game was an opportunity for me to take my first steps in Unreal Engine and explore the principles of game development in practice.
Virtual Reality felt like a way to get in at the ground floor of the game development world by taking advantage of this new and exciting format.
The idea of making a VR boomerang game seemed interesting and unique. Part of that based on the concept that throwing an object and having it return to you creates a relationship between you and the virtual space, enhancing your sense of presence within it.
Players enjoyed the unique gameplay, the visual style and chance to climb leaderboards by mastering the physical mechanics. Those physical mechanics are also the fundamental barrier limiting player engagement and longevity of the game. This game relies on an accuracy of motion by throwing and aiming the boomerang. This skill varies immensely from person to person. Difficulty and accessibility issues were improved during alpha and beta development, but this extra physical barrier meant player numbers were modest.
Mood and Inspiration
I looked at several sources for reference and inspiration, largely in composing the environment and visual style of the game, but also with regard to the gameplay and how old concepts can be applied to new formats. The classic arcade style and its short format were well suited to the novelty and limited scope of VR games, and a stylized aesthetic approach offered flexibility - I wasn't concerned with making a boomerang simulator.
Other VR games such as Space Pirate Trainer, Racket: Nx, Holopoint and Fruit Ninja VR formed the most relevant context in which I was to build this game. And so I looked at them in terms of scope and standard, as well as art and design techniques.
The environment's design needed to be wide and open, so that it could offer potential for varied target layouts. Being on the ground would basically cut off half of the world from player interaction, so I looked to the sky for references. You can see some of those references here or by visiting the mood board using the button below.
A Spotify playlist inspired by work on Boom Boomerang.
Early prototyping involved a lot of learning - this being my first proper Unreal project - and there was an added challenge because I was building game mechanics with very little in terms of reference, nobody had made a boomerang game in VR. In retrospect I probably could have chosen something simpler for my first major project, but I embraced the opportunity to make something completely new.
The challenge of building a game around physically throwing a virtual object led to much experimentation. Physics simulations didn't provide the level control required to make aiming the boomerang viable, so I created a spline-based system which used a timeline to determine the trajectory of the boomerang along a drawn path. Splines allowed me to manipulate the shape of that path with precision, and I could use the same spline to lay out targets so they always lined up with the flight of the boomerang. Splines became a fundamental building block of the game's mechanical design.
This video displays the 'Boom Spline' - a blueprint actor built to design each level's target layout. The number of targets, the target type, and other variables are set on each instance inside the editor. The spline actor is then added to an array which forms the structure of the level.
Music and SFX
I created the soundtrack for the game using Ableton Live. I wanted the game to have dynamic music - the tracks would fade in and out based on the game logic - which meant composing several tracks with the same beats per minute. I used FMOD to mix the music in the game. Tracks are cross-faded based on variables that are exposed to blueprints in Unreal. You can listen to a mixed version of the three songs that make up the soundtrack here.
I also created a lot of the sound effects for the gameplay and user interface. Where appropriate, these were kept in the same musical key as the main soundtrack so that they could blend into it. You can hear some of these sounds below.
I mixed samples to make all the other gameplay sounds effects, such as impacts and explosions.
The design of the standard target needed to be a simple shape, so that many of them could appear without a huge performance impact. They also needed to animate in some way when hit, and then explode when you catch the boomerang. The final design was a translucent cube which splits in half when hit, as if sliced by the boomerang.
Catch me if you can
Throwing a boomerang is only half the fun - catching it is the other half, so I had to make it a core element of the gameplay. This meant designing it so that targets are only cleared once they've been hit AND the boomerang has been caught. If you don't catch the boomerang, the targets are reset to their previous state and continue to count down.
The main challenge in Boom Boomerang is to destroy the targets before they explode. The orange inner core inside the target grows as the bomb timer counts down. When the core reaches the outer edge of the target, it explodes, and the player loses a life.
It's easy to miss a throw, so I designed another mechanic to afford the player a second chance to hit a target, and it also allowed for more strategy in advanced gameplay. When the player presses a specific button during the boomerang's flight, the boomerang emits a shockwave which hits all targets within a certain radius. This ability can only be used once per throw, so timing the sonic boom is important. It also causes the boomerang to speed up, making it a little harder to catch... or potentially benefiting the player by saving them precious moments they could use while other targets are still counting down.
Block targets are larger than the regular targets, and require the player to hit them once in order to weaken them, and then again to destroy them. Once the block target is hit the first time, its timer speeds up, making it crucial to hit it again quickly. The boomerang is also destroyed when it hits a block target, so there's no catching required and the player can throw boomerangs at a faster pace. The physics simulation on the targets, the timing required to clear multiple targets and the strategy required on harder levels make this an interesting alternative to the standard target gameplay.
This target had to be different... and difficult. By rotating panel targets around a central target, I could stagger the stages of completion to give this particular target a more methodical type of gameplay. The panels must be destroyed first by hitting them with the boomerang. However the panels bounce the boomerang back in the same direction - and they rotate around the central target, meaning that the timing of the throw becomes more important. Once the panels are cleared, the player can destroy the central target, which is a smaller variant of the main target type.
When the boomerang enters a boomering, it is teleported to another boomering of the same colour. By throwing the boomerang through the rings, the player can chain together many targets and maximise their score. Each round can be completed by throwing the boomerang only once, and it's up to the player to figure out which boomering they must throw the boomerang through first in order to achieve that. This distinct level-type was an attempt at building more puzzle-based gameplay.
I used Simul's trueSKY plugin to render the volumetric clouds and atmospherics. Having experimented with mesh-based solutions and custom volumetrics, I felt trueSKY provided the best results and the most control. Its performance impact was also impressively small. It allowed me to set a dynamic day and night cycle with precise manipulation of the colours, atmospherics and shape of the clouds.
The ground landscape environment is composed of various assets integrated into a stylized low-poly aesthetic. Since there is no locomotion for the player within the game, I could focus on the environment from a single perspective.
I built a large 3D landscape environment in Unreal and captured 360 degree panoramic images of it in different lighting scenarios. The images are then projected onto the inside of a large sphere in the final game.
There are 4 different image textures, cross-dissolved according to the time of day. The sky surface itself is masked from this image, and runs a custom shader configured using gradients to layer various colours along with the sun, which is dynamically updated. The trueSKY plugin functionality provides extra atmospheric and volumetric effects, including the moon.
This video shows some of the 3D environment, which was captured as an images and projected around the player in the final game.
This video below showcases the final environment including the projected landscape, the volumetric clouds and the local environment which are rendered in the game. It also includes some of the ambient sound effects I used in the game.
Apart from the environment and atmospheric effects, the other visual elements such as particle emitters and post-processing had to be brought into focus with the stylized aesthetic, in order to maintain a coherent art style. This also applied to the UI which underwent constant iteration. The cyan and pink colour scheme, however, was settled on quite early - it worked well in contrast to the default night setting, and evoked retro arcade designs which felt fitting to the game's form and structure.
The main UI is somewhat traditional: a flat plane in front of the player as if to emulate a screen, with a laser pointer for selection. Levels begin with a large 3D 'Start Button' in front of the player which they must physically press with the controller. The button then travels upwards, drawing the eye towards the target area. This was a way of reinforcing the player's attention at the start of each level.
Flipbooks for VFX
To make the explosion effects, I captured ray-marched fluid simulations as flipbooks from within the engine and then used them in particle emitters as SubUV animations, adding directional shading in the material to mimic world lighting. These formed the base of the main explosion and smoke effects.
The game contains three different game modes: Arcade, Survival and Onslaught. Each mode is designed to offer a different style of gameplay and sense of achievement. Arcade and Survival both offer varying difficulty modes. All three modes include local leaderboards and global leaderboards, driving player engagement through online competition.
Arcade Mode provides the player with the opportunity to learn different target layouts in contained levels which each must be completed in sequence to progress. Levels are made up of several short rounds. The score at the end of each level is counted and the player is given awards based on that score. The awards are one star, two stars, three stars, and finally three stars and a diamond. The awards can then be used as currency to unlock new boomerangs and cosmetic effects.
Survival mode is made up of continuous rounds, mostly in the same layout as the arcade levels. The aim is to last as long as possible and to score as many points as you can during that time. The score is then added to a global leaderboard. The leaderboard for Survival in normal difficulty mode is presented in the main menu as the main ranking table for the game.
In this mode, targets appear at regular but shortening intervals in random locations, and the player must destroy them as quickly as possible in order to avoid being overwhelmed. This mode relies somewhat on using the Sonic Boom ability, since targets are placed randomly and therefore harder to hit. The sonic boom ability can clear whole clusters of targets effectively, but soon enough the targets pile up, and in those final moments of chaos a sense of panic can lead to an intense and exciting experience.
Rules, levels and scores
Designing the rules of the game involved working out how the player scores points and how those points are managed over the course of the gameplay. It also involved designing the layouts, difficulty and duration of each level. I wanted to balance things in a way that could offer intuitive but layered gameplay. Where a beginner can play and have fun, while a more experienced player can still feel like they are making progress.
The score for each throw depends on how many targets you hit. You also get a combo multiplier for chaining successful throws. If you miss a throw, you lose a combo point. This means gathering points is balanced by performance based on immediate accuracy ( getting points within each throw) and also on performance consistency (over the course of several throws and rounds). I also had to balance the thresholds at which awards were given, so that the game seemed fair to players of different skill levels.
Awards and Leaderboards
The video below shows how the player is awarded stars and diamonds according to their score in Arcade Mode. Their score is then added to local and global leaderboards, which also applies to the other two modes.
Players can also use earned stars and diamonds to unlock new boomerangs and visual effects for the boomerang.
Testing and Feedback
Once I had a playable build of the game, I distributed Steam keys online and gathered feedback via Discord. I then spent time addressing various issues that had arisen, namely the addition of aim-assist and making the game more accessible. The Early Access release on Steam provided more opportunity for feedback and fine-tuning.
Tutorial and Aim Assist
Most of the constructive feedback related to people having issues with the core mechanic of the game - throwing the boomerang.
The tutorial at the start of the game underwent further development based on feedback, but most of the focus was on the throwing mechanic itself, for which I built an aim assist system. It was built by using the existing spline tools I already had. Essentially, the boomerang's position is interpolated between it's 'naturally' thrown position and the equivalent position along the target's path. I also added indicators at the spline's start position, visualizing the throw point to the player. This aim-assist system is modulated by the game's difficulty setting, with 'hard mode' having no aim-assist at all.
This video begins by showing the controllers and some of the finger animations I made for them. The tutorial which follows takes place on the game's first launch, and leads into the game's environment and main menu. The tutorial section also shows the aim-assist in action, with an arrow indicator showing where the boomerang must be thrown to hit the targets.
Platforms and Release
Having gathered and addressed feedback where I could, and having implemented new features and improved old ones, I went ahead with the full release of the game on Steam. Later on, I acquired an Oculus Rift S and was able to target that device and then release the game on their own store as well. I also explored the possibility of releasing the game on the Oculus Quest.
Releasing the game on Steam allowed me to list the game as compatible on both the HTC Vive and Oculus Rift headsets, and their extensive backend system (Steamworks) provides a lot of control to publishers to curate the store page, achievements, leaderboards etc.
After applying to the Oculus Start program, I received an Oculus Rift S to use for development. This meant I could market the game to a much wider audience as well as distribute it on their own store.
I worked on a Quest version of the game in order to determine if the mobile platform was a viable option. Although I made good progress in porting the game over to Android, visuals and performance were too compromised. Various other factors also contributed to my decision not pursue publishing the game on this platform. You can see some of that work in the video opposite.
Lessons and Reflections
Accessibility and difficulty were fundamental to the issues presented in feedback. Everybody has different physical coordination, and this game requires a particular motion - throwing - which relies on the individual's own physical characteristics. The addition of aim-assist and an expanded tutorial improved things in this regard, but I think it remains the largest issue with the game's design.
There are a multitude of lessons learnt from my experience in making Boom Boomerang, not to mention the tsunami of technical knowledge I absorbed.
Navigating creative design decisions in a technical framework is what I love about the work I do, and progressing in that craft sometimes feels like a great game itself. Learning about myself as a developer, about where I feel most confident and where I don't, about what I'm inclined to focus on and what I could pay more attention to - those are valuable lessons too, and ones I expanded on in my next project.
Thank you for reading.
This video shows some camera tests I ran later in production to determine the best way to portray gameplay. A point-of-view perspective ended up being more relevant for most marketing material, but these clips give a good idea of the gameplay from a different perspective. This includes tests with LIV, a plugin designed for mixed reality recording. Unfortunately, specific rendering issues meant full integration of LIV couldn't be completed.