Dodge and weave around the bouncing projectiles in a competitive top-down shooter
I made this game for my graduation internship at mCon esports, a company aiming to grow the esports scene within the Netherlands. This project would help work towards that goal by offering casual players an entry-level esports experience, while also familiarizing them with the mCon brand. My goal was then to build a simple Unity game with a quick-but-thorough tutorial, that people can play against each other at the mCon booth.
Before I settled on any type of concept, I first got the chance to meet the target audience; people spectating the Beat The Pro section of the mCon booth at Heroes Dutch Comic Con. I gave a lot of these people a survey to fill in, and took some of them aside for an in-person interview, which taught me that there was demand for a project like this, as long as it's distinct from the other titles on that were display, and they'd be able to play it against each other. In the survey, I also gave them some potential concepts for a game, and people were unanimously interested in something centered around dodging, so I naturally gravitated to a concept like that. Before I made my final decision though, I also did some research into people's motivations for competing, and looked into what it meant for a game to be an "esport".
The concept I then settled on was a 1v1 bullet hell; a top down shooter where players shoot projectiles at each other. In the first iteration I immediately noted that the projectiles don't stay out very long, and since I didn't want to make the game all too complex, I felt that giving the players several bullet patterns might not be all too inviting to new players. To solve this, I made projectiles bounce off the walls, which in turn gave the game its own unique quirk, added an element of chaos, and introduced an increasing difficulty over time.
Then, it was finally time to make the game functional. I started off by using Unity's Input System to spawn in players when they pressed a button, but then immediately realized that that needed to become more manual. Considering that the players can all spawn in as different heroes, and that each player needs to continue to have control over the same hero after having selected it, I needed to find some way to save that data across different scenes. The solution I ended up going with was using a scriptable object to store a C# class worth of data, and then at the start of each scene, I'd spawn in the heroes manually.
After then making the actual player actions functional and making the projectiles bounce around, I moved on to the character select screen. Instead of just making a standard version of this though, I needed to offer players some type of onboarding before they would get into a match, since at the mCon booth, many people would be playing it for the first time, and they wouldn't know what their verbs are, nor what their goal is. For this purpose, I first made the menu that players could select a character from, let them spawn in, and then made both players select a team by entering the blue and red areas. I also gave them the option to select an arena.
With that, I had a working version of the game ready, and immediately moved on to testing. My plan for this project was to test as early and as often as I could, so that I could iterate on the core gameplay as much as possible, adding new features in the time between testing iterations.
The main subject for iteration was the onboarding scene. I added a lot more text, adjusted the text that was already there, put in some button prompts, moved those button prompts to different parts of the screen, added icons for each action, replaced those button prompts with a whole control scheme layout, changed the control scheme and its layout, moved its position, added more text to clarify, and removed the action icons, until I finally arrived at the screenshot to the side. This version of the onboarding scene did clarify the dodge input for players, and being notified of the fact there's a shoot and special button was usually enough for players to try it out before entering a match.
The second order of business was to add some visual clarity. As you can also see in the onboarding scene, the walls had color-coded outlines, and I added those too all the different types of walls in the arenas, as well as adding a hitbox and hurtbox visualization to the projectiles and heroes respectively. I also added particle effects to all the projectiles, to give each of them their own bit of personality and visual flare. I also moved the player's UI to be right on top of the player, since some testers mentioned that they struggle to look at their health bar or special cooldown when they're so far away. Making that UI face the camera wasn't as simple as I thought it would be, but I got it eventually.
In the meantime, the content I added was in the form of a few more arenas, and a new hero. The arenas were all sketched out beforehand, each with their own unique gimmick. The heroes include:
Sorcerang; a sorcerer who shoots out fast electric bolts, and can summon a wall of ice to trap their opponent with the projectiles near them.
Bounshee; a ghost who shoots out spooky hands, and can summon a poltergeist around her to reflect incoming projectiles.
and Dracochet; a dragon who shoots out massive fireballs, and can spew out a wall of fire that destroys projectiles that come into its path, and deals massive damage.
Considering I only had half a year to make this from scratch, while only outsourcing a single arena and a single projectile for original 3D artwork, I am very happy with how this project turned out. mCon feels the same way as well, and not only are they planning to showcase it at both TwitchCon and Heroes Dutch Comic Con, we've actually already showcased an early demo of the game at Heroes Made In Asia before the game got to this point, where people clearly understood the goal of the game, got through the tutorial without much issue, and seemed to already be having a lot of fun. One person in particular begged me for an eventual Steam release, which I hope I can bring to fruition at some point down the line... And on that note... To be continued?