A fast-paced first-person shooter set in a futuristic, urban city, developed in Unreal Engine 5 by a team of 15 people in 7 months.
Project Mercury is a fast-paced first-person shooter inspired by games like Titanfall 2 and Ghostrunner. I designed the combat of the game, including the enemies and the player's arsenal. These designs were tweaked and iterated upon based on internal and external feedback. As a fan of shooters, it was very exciting and fun to work on one of my own. This was the first successful Unreal Engine 5 game developed in the Game Design and Development minor program at Michigan State University.
When I designed the enemies for this game, my goal was to create distinctly different enemies as obstacles for the player to overcome, and to encourage the player to utilize their movement tools efficiently. The game contains a variety of enemies with different attacks, allowing for a variety of combat scenarios. Additionally, I attended our motion capture session for the enemies in the game, coordinating with our art director to ensure that they were in line with my design.
Shown to the left here is the assault robot, an enemy that attacks the player at a range using a gun. This enemy saw various iteration throughout development in response to feedback received through playtesting and to other design decisions surrounding the gameplay.
Originally, there were to be only two variants of this enemy: one with an assault rifle, and a shotgun. We then added a shield to the robots carrying a shotgun, encouraging the player to use their movement capabilities to kill them. Assault robots were going to shoot projectiles at the player to encourage using movement to dodge them, but due to technical limitations, their attacks ended up being hitscan.
As we figured out the gunplay of the game, we created a sniper variant of the assault robot with a laser sight that could teleport, as well as implemented a mechanic that would have the player killing assault robots for their guns. Because of this, these enemies are amongst the weakest, as I intended to treat them as fodder for the player.
The final, and largest iteration that came for the assault enemy was the implementation of Unreal's Environment Query System into their AI, in response to feedback regarding their intelligence. This required a restructure of this enemy from the programmers on the team but resulted in smarter movement patterns for them, based on player location and the cover that they had available to use.
I communicated with programmers to have enemy designs implemented and was flexible on any issues that came up. Late into development, I started utilizing flowcharts to better communicate intentions to programmers.
This flowchart is for tweaks to enemy behaviors, prominently featuring the assault robot, as well as a couple other enemies.
For assault robots, a cover system was detailed here. Decisions are made based on their surroundings and the player's location. The first check they should do is the distance between the player and themselves.
The second check they perform is for any available cover around them.
If both checks meet the correct condition, they will move into cover, with their subsequent behavior defined by what they're hiding behind.
If the player is in sight, they will start shooting then restart the tree when finished, otherwise they will move to a new location.
Details for updated attacks for two enemies: the slam robot and the rocket drone are also shown here, adding very specific and subtle actions intended to create a better feeling combat experience for players. Ultimately, some parts of their behavior were cut after subsequent testing.
This flowchart is for the cut boss fight, demonstrating how I wanted it to behave. The main section of it is focused on how it should attack the player.
The first check is on its current health, which will decide whether the boss performs a ranged attack. If the boss's health is low enough, it will do so in one of two ways depending on how low on health it is, before going to perform a melee attack. Otherwise, it will just perform melee attacks.
For its melee attacks, the boss first considers distance to the player, and whether or not they are wall running, to decide which of its melee attacks to perform, followed by a cooldown before going to attack again.
There is also information regarding how the boss should move around the arena, simply considering whether the boss is currently performing a ranged attack to give the player room to maneuver around them, as well as the gameplay loop of what the player themselves is expected to do during the fight.
As our level came together, I worked on placing down enemies throughout. Challenges with enemy placement included considering what worked in what parts of the level, as well as figuring out a good pace to onboard the player within the space that we had to work with. As the level progresses, additional enemy types are introduced, and the difficulty of fights increases.
In addition, I was tasked to work on making the guns we already had more interesting to use. One of our main goals was to create a feeling of being an action hero like John Wick. A mechanic that I had suggested to make this feeling stick would be to have the player obtain guns from their enemies to use in combat. These guns would be disposed once out of ammo, creating a resource for players to manage efficiently and creating opportunities for combat puzzles. Considering that the players aren't going to have these guns constantly, I sought to make them feel as powerful as possible, dealing more damage than the pistol and including unique attributes.
I learned a lot about Unreal working on this project. I got to make a blueprint of my own and I learned a lot about how to communicate better with programmers on enemy behaviors and how to communicate my design effectively to ensure everyone on the team shares the same vision for the game, as well as what kind of design choices need to be made sooner. I look forward to taking these lessons into future projects.