Creating a deflection mechanic
After being provided a brief for a solo dev twin-stick shooter, I brainstormed and sketched a concept for a game where you only defeat enemies by deflecting their own projectiles back at them. Your direct weapon hit merely pushes enemies.
​​​
I wanted the game to be fast-paced, combo-driven and to have varied enemies that keeps players on their toes. This deflection mechanic would facilitate that nicely.​​​​​​​​​

Pitch document detailing my design plans
Implementing the Deflection:
Early, I saw playtesters struggling to deflect projectiles back at the shooter. I shifted the pressure off of them by giving projectiles a slight aim-assist after deflected. This also allowed me to up the pressure elsewhere, like increasing the number of enemies, which moved the game towards my desired, frantic, powerful player-experience.
​
I implemented this by giving enemies collision volumes. The player would shoot out a hit trace, and if they overlapped, the enemy was marked as the homing destination. This trigger volume's size differed depending on the difficulty setting to challenge players of different skill levels appropriately.​​​​​​​​​

No assist
Assist On (Player-facing)
Assist On (Dev-facing)
Enemies & Pushing the player​​
I wanted to introduce a variety of gameplay problems and scenarios through diverse enemies that would require the player to react and improvise on the fly.​
This enemy's shield blocks one shot from the front. It also recharges after a short delay. This requires the player to ​land a second projectile within the timeframe, causing some stress.
​
However, if the player positions themselves well, they can also cause the enemy to get shot by another foe from behind.
_gif.gif)
_gif.gif)
This evolution of the previous enemy is introduced later, and uses the player's power against them after they've gotten used to feeling safe after a successful deflection.
This leader enemy was meant to move the player away from defensive strategies, and to promote more aggressive play.
The leader controls a horde of minions that will quickly overwhelm the player if they aren't fast to dispatch it.
In order to do this, they need to push past the horde.
_gif.gif)

Similarly to the above enemy, this health pickup pushes players out of their comfort zone. It's the only thing in the game that can be destroyed via a direct weapon swing.
​
The pickup disappears after a while, which pushes a risk-reward decision on the player. Additionally, if the player is already at full health, it gives a large score bonus, retaining an incentive for highly-skilled players.
Visual clarity & Readability​​
I put a lot of thought and work into ensuring the game is readable, so players can absorb the most important information at a glimpse, and focus on their gameplay.​ I made custom character models with an emphasis on clear shape language and colour-coding.

Related enemies or evolutions share similar designs to telegraph their behavior.​

I made the player model arrow-shaped & gave them a forward-facing light to help identify their front. This helped players orient themselves.

All enemies have a red post-process outline so they're easier to spot, while still allowing me to play with unique, identifiable colours.

I experimented with the environment colours and brightness to allow for something readable, while still making the game exciting. Eventually, I opted to colour the entire grid, but make the floor grid dimmer.
Learning my tools​​
Since this was a solo development project, I took it as an opportunity to explore Unreal, and learn some of its extensive systems and tools.
As showcased above, I used the (at the time) newly released Unreal modelling tool to create custom character models with distinct shape language and colour-coding.


I've always wanted to delve deep into FL studio and learn the software. So, I grabbed a MIDI keyboard and composed the main song for the game, also with the hope of enhancing the heroic player experience I was going for.
This was the first project where I took commenting and working modularly seriously. The project required we work in a non-destructive way using a pre-existing project. I made sure to always create child actors if I could, and re-use logic when appropriate.
​
I learned how to use data tables and structures. I utilized them in the game's endless survival mode to determine how waves progressed, in addition to dictating what colour the environment should change to in relation to the player's combo meter.


Enhancing the player experience​​
I wanted to find ways to produce the player experiences I was going for.
I devised a combo system that decayed over time, and would be lost if the player took damage. But, the score multiplier with it increased exponentially with every kill, thus promoting an aggressive playstyle.
​​
This really did well at pushing an adrenaline-filled game loop, further enhanced by the increasingly shaky and blaring combo number, as well as the colourful environment tied to the combo.


The player's toolkit felt a bit empty with only one interaction. That's when I came up with the time-freeze ability. This would freeze all enemies and their projectiles, giving the player some breathing room, and time to set up a powerful combo attack. This played really well into the powerful player fantasy I wanted, as well as rewarding players for clever set ups with a huge combo boost.
​
Charge for this ability would be obtained with kills, thus feeding it into the core loop, and not allowing it to be a crutch for players.
Postmortem
The Good
-
Learning Unreal: This was the first project where really dove deep into Unreal's systems, since it was an 8 week solo project. I had the opportunity to experiment and learn tools I had never heard of before, which lead to me feeling much more proficient with the engine by the end of development.
-
Clean Project: Similarly to the previous bullet point, I gained a new appreciation for upholding a project's health and good practices. This not only benefitted me during development, but also ended up benefitting my teammates in later team projects.
-
A project I can call my own: Although it's not perfect, I'm really proud of what I created. I touched every aspect of the game, and put a lot of thought into making the game cohesive, and giving it some depth. Player feedback of the final version is very positive, and I think it's quite a fun game that I may even consider revisiting in the future. I had a blast!
The Bad
-
Suboptimal code: Looking back at some of my logic, I think I'd be able to make some things more efficiently now, which would result in better performance and an easier time to troubleshoot issues and bugs. (Of which there are still a handful.)
-
Not very replayable: Although I made the hand-crafted arcade mode, and a second endless mode, the game only has a few enemies, and its mechanics are only so complex. As a result, the game does get stale after 30 minutes. It'd be great to expand on it one day. And perhaps consider some level design!