Bombot Barrage
Team: Solo Project
Role: Game and Level Designer, Art, Programmer
Timeline: 4 Months
DESCRIPTION
Bombot Barrage was a term-long Sheridan Level Design project where I was tasked with creating a game level of my choice. I created a custom marble character controller in Unity and used Probuilder to prototype a level that taught, tested, and challenged the player’s abilities. Finally, through playtesting, art, and sound I polished my level into a rewarding experience for the player.
TOOLS
- Unity + Probuilder
- Visual Studio (C#)
- Maya + Substance Painter
- Audacity
JUMP TO SECTION
PROJECT SHOWCASE
You can also play Bombot Barrage in browser on itch.io:
LEVEL DESIGN
LEVEL DESIGN DOCUMENT
I worked on this project to improve my level design skills and to experience the full level-design pipeline. To do this, I began by making a level design document.
I wanted my level to include rolling, collecting, and navigating, so I first created a beat bubble diagram with challenges that supported these core pillars. This way I could quickly and easily make necessary changes early on.
I then converted this diagram into a top-down level map, which I then referenced and iterated upon when grey-boxing my level.
GREYBOXING AND PLAYTESTING
Before making the final version of my level, I first made a grey-box using Probuilder so that I could quickly iterate on it during playtesting.
Playtesting allowed me to iron out problems in my level, and fix them before moving onto the art stage.
Two of the biggest problems I encountered were spikes in difficulty and a lack of direction. These mainly occurred in the final section of the level, and thanks to playtesting I was able to fix the issues, creating a more natural climb in difficulty.
LEVEL ART
I added level art to give my level a final layer of polish, and to fit more closely with the themes outlined in the level design document.
To accomplish this, I used a large amount of Kenney Game Assets, as well as a mix of my own art for select key props including Bombots, gears, gems, and boost panels.
Desired paths were also subtly highlighted with lighting and emissive textures so that navigation would be easier for the player.
LEVEL DESIGN TAKE AWAYS
Spending an entire term developing one level showed me just how much work can go into the entire level-design pipeline, and how much polish happens behind the scenes. I especially learned how important playtesting was, as I’ve had trouble with balancing difficulty in the past, and running several playtests with multiple people highlighted difficulty spikes or unintended skips I never would have seen before on my own.
GAME ART
KEY MODELS
I wanted key parts of my level to feature unique game art, so I opted to model, texture, and animate these elements myself.
Models were created using Maya, and textures were created using Substance painter.
Animations such as the Bombots jumping also served a gameplay purpose, as it gave the player time to react before the Bombot begins chasing them.
SHADERS
I wanted the marble to have a distinct glassy look that couldn’t be achieved with Unity’s standard materials, so I used Unity Shader Graph instead. By combining normal maps alongside refraction code, I was able to create a material similar to glass.
Originally the boost panels were a flat texture, however I felt the visuals didn’t match the exciting launch they caused, so I used Shader Graph to create something more animated. By layering two alpha maps, I was able to make a dynamic and streaky arrow animation that fit the impact perfectly. Additionally, the custom Shader could be easily modified in editor which made it easier to find the exact look I wanted.
ART TAKE AWAYS
My work on game art in this project showed me how much visual cues can affect gameplay. During development Bombots sometimes felt unpredictable, but once I added a jumping animation to cue their movement they felt much fairer for the player. Additionally, boost panels became much more exciting to use once bright visuals and impactful sounds were added to sell their speed.
PROGRAMMING
CHARACTER CONTROLLER
When making the character controller I wanted it to have the weighty feeling of a marble, while not feeling sluggish to control.
To accomplish this I created my own character controller using C# that allowed me to tweak values such as acceleration, ground and air friction, and jump force. This allowed for small adjustments until I found the perfect fit for my game. Dynamic FOV tied to the player’s speed was also added to make boosting feel extra powerful.
Finally, I also created a test area to measure the controller’s capabilities, such as max jump distance and max slope angles that can be climbed.
ENEMY AI
When designing the “Bombot” enemies for my game, I wanted the chases to not end immediately, while still feeling fair.
To prolong the chases, I gave the Bombots a separate detection radius (smaller) and evasion radius (larger). This way, once the player was caught they would have to move a substantial distance before getting away.
To give the player a fighting chance I also gave the Bombot a 1-second delay before starting the chase, choreographed by a hop and audio cue.
Finally, I also gave the Bombots a max turning speed so that with clever movement players can swerve around Bombots without being hit.
PROGRAMMING TAKE AWAYS
My work developing a character controller showed me just how important metrics are when testing a character’s movement. Putting in the time to test and measure a character’s maximum jump and speed can speed up the level design process dramatically. Additionally, adding exposed and adjustable values to characters and enemies helps speed up testing, and opens the door to possible modular variants of enemies/players.