Combat Designer & UI/UX
Stormlight
A third-person action-adventure combat experience loosely based on environments and characters from The Stormlight Archive by Brandon Sanderson and inspired by games like Blood Spear, God of War, Dark Souls, and Star Wars Jedi: Fallen Order.
Gameplay Demo
Laying the Groundwork
Within our last semester at LaSalle College, we were supposed to create a game in a four-month period, with a team of our own choice. First of all, we had to decide what kind of game we wanted to make, and fortunately, that answer came fast. Our team was eager to develop a combat game. We knew the challenges that came with this genre, but at the same time, we were excited to push ourselves to do something that would serve as a standout piece for our portfolios.
With the genre decided, we set some clear objectives so that we could be certain to bring our vision into reality within this confined timeline:
Objectives
- AAA-quality UI, gameplay, and overall experience
- Strong first impression
- Polished, bug-free experience
- Create visually stunning moments optimized for gaming devices.
- Create a subtle yet impactful narrative through level design, cinematics, and sound.
Pillar
Fast-paced Combat: The player must feel nimble and controllable, with the ability to quickly cover ground, change positions during combat, and execute a series of rapid strikes.
The player is powerful: The player’s interaction with the Stormlight mechanic will make them feel powerful despite playing within a desolate and ruthless environment. Their attacks will have weight and their stormlight infused abilities will evoke the feeling of an unstoppable, powerful god.
With these in mind, we quickly realized our project had to be realistic. We scoped our game as a vertical slice – a very polished demo with no more than a 30-minute playthrough. This allowed us to hone in on every part of the experience without feature creep or an overambitious open world. Focus our efforts on quality over quantity, we aimed to craft an immersive, memorable gameplay experience within our given timeframe.
The Challenge: Designing Enemy AI
With a clear vision in mind, now was the time to divide up the roles. I took up the responsibility of designing the enemies’ AI, which is essentially the combat logic our opponents would use. No small feat-never having worked with AI in Unreal Engine 5 before, I knew I had a steep learning curve ahead. It also required close collaboration with my teammate responsible for the main character, ensuring that enemy behavior complemented the mechanics he implemented for the player.
Stepping into AI combat design for the first time was both exciting and daunting. I dove deep into research, studying how to create engaging enemy behavior and effective attack-and-response systems. With a great base of knowledge gathered, I presented the team with the following conservative but structured development plan:
Phase 1: Implement a functional melee enemy as a base, that should be capable of using two different attacks, be able to patrol or stay in place, and have passive behavior when it loses sight of the payer or is not engaged in combat.
Phase 2: If successful, expand into enemy variations with unique combat styles.
Contingency Plan: If AI complexity became too great, we would move toward turret-style enemies, relying as little as possible on sophisticated behavior scripting.
Fortunately, our first melee enemy worked and we were able to build from it without needing to move to the contingency. This marked a key technical success that eventually set us up for making broad refinements in combat encounters which greatly improved the overall gameplay experience.
From Basic Melee to Skirmisher
What started as a basic melee enemy evolved quite a bit during the development process of the game. Early in the project, we realized that for combat to be engaging, our enemies needed more distinct characteristics. Since the game was scoped as a focused, smaller experience, we decided to merge the basic melee enemy with a more advanced variation—the Skirmisher.
Visual Design & Concept
Visually, the Skirmisher was designed to be a mirror to the player to immediately tell the player that this was an enemy that shared similar abilities and methods of combat. Because of this, the Skirmisher could attack with a sword, dash, and use magic-based abilities like the player.
Attack Breakdown
Each attack was designed to add strategic depth and keep the player engaged:
- Basic Attack: A standard close-range sword attack, comprising most of this enemy’s attacks. To avoid repetition, we added two variations of animation while keeping the same logic behind the behavior.
- Jump Attack: The enemy leaps high into the air, lands near the player, and creates an area-of-effect (AoE) impact upon landing. The attack will trigger when there’s enough distance between him and the player to serve as a gap-closing move to counter players trying to retreat from him. To further maintain player focus, there is a small teleportation effect after the attacks begin.
- Spinning Attack: A constant spinning melee attack; the enemy follows the player relentlessly. If the player allows the enemy to get too close, they’ll take sustained damage. This attack was designed to force movement, encouraging players to reposition and create space. This attack also starts with a teleportation, to keep the player engaged.
- Ground Attack: The enemy strikes the ground with his sword, summoning crystal formations erupting from the floor. If the player gets hit, they are staggered for a while, leaving them open to attacks.
Flexibility in Combat Design
To give the level designers more control, each attack was made toggleable. This allowed designers to customize enemy behavior based on the encounter’s setting, ensuring that combat remained varied and engaging. By adjusting which attacks were available, different battle scenarios could be fine-tuned to fit the pacing and intensity of each encounter.
The Siphoner
The second enemy we introduced was the Siphoner, which we designed as an enemy that replenishes resources for the player. Unlike other foes, the Siphoner was designed to be weak and goes down in just two hits. But the strength of the Siphoner lay in numbers: whereas one would pose little threat, encountering two or more would overwhelm the player quickly.
Visual Design & Concept
The Siphoner had been designed to resemble a withered body lying in the desert, with strange, glowing lines running across its form. This visual cue subtly communicated that the enemy uses magic, making it instantly recognizable in combat.
Attack Breakdown
Despite its simplicity, the Siphoner had two distinct attacks
Drain Attack: The enemy summons a magic sphere around himself that slowly drains the player’s magic power; if the player runs out of magic, it then starts draining their health.
Melee Attack: A basic melee strike, used to complement the drain attack when it’s on cooldown.
Flexibility in Combat Design
Like the Skirmisher, the Siphoner’s attacks were toggleable, giving level designers more control over enemy behavior. This flexibility allowed for varied combat encounters, ensuring that enemy placement and difficulty could be fine-tuned to match the intended experience.
The Mage A Long-Range Threat
The third enemy we developed was the Mage, a powerful long-range combatant. As expected, its main advantage was the ability to attack from a distance using a variety of spells. The Mage was highly mobile, constantly attacking before relocating to a new position. This design choice forced players to adapt their strategy, making encounters more dynamic when a Mage was present.
During playtesting, we realized that adding a support role to this enemy would make encounters even more engaging. As a result, the Mage was given the ability to shield nearby allies, making it a priority target. This change encouraged players to strategize even further, especially in encounters with multiple enemy types.
Visual Design & Concept
The Mage shares a similar skeletal, withered appearance to the Siphoner, with glowing lines running across its body as a visual cue of its magical abilities. However, it stands out by being clothed and displaying greater awareness through its animations, reinforcing its intelligence.
Attack Breakdown
The Mage’s abilities were designed to provide a mix of direct damage, support, and crowd control:
Single Projectile – A simple spell where the Mage fires a single projectile toward the player.
Multi-Projectile – A more powerful variant, launching multiple projectiles that spread out in a 160° arc in front of the Mage.
Shield Buff – The Mage casts a protective shield on nearby allies, temporarily increasing their health by 50%. Before dealing damage to shielded enemies, the player must first break the shield, adding an extra layer of challenge.
Short-Range Clap – A last-resort defensive ability. If the player gets too close, the Mage generates a shockwave, pushing the player back and creating an opening to relocate. This ability has a long cooldown, preventing excessive use.
Laser Strike – The Mage’s most powerful attack. It summons five beams of light that erupt from the ground, dealing high damage. To balance its strength, the attack is well-telegraphed through animation cues and clear visual indicators, giving the player a chance to react.
Flexibility in Combat Design
By combining ranged attacks, support abilities, and mobility, the Mage introduced a strategic layer to combat, making enemy encounters more engaging and requiring players to prioritize their targets wisely. Like all enemies before, the mage could also be customized to use certain attacks depending on the type of combat we wanted to create.
The Juggernaut A Force on the field
After designing all the previous enemies, we felt that something was missing—the classic tank enemy. However, by the time we considered adding this enemy type, we were already deep into development, juggling multiple priorities such as the final UI for the game. Despite the risks of adding it at that phase, we believed the addition would enhance combat encounters and add more depth to them, so we moved forward with the idea. And thus, the Juggernaut was born.
Visual Design & Concept
As the name suggests, the Juggernaut is a slow-moving, heavy-hitting powerhouse. But we wanted to make it more than just a brute force enemy—we wanted it to interact meaningfully with other enemies, much like how the Mage shields its allies.
To achieve this, we designed the Juggernaut as a prisoner, forced into combat by a master—the Skirmisher. This connection introduced a tactical layer to encounters: if the player defeats the Skirmisher before the Juggernaut, it triggers an enraged state, increasing the Juggernaut’s attack speed, movement speed, and damage. It also unlocks a powerful new attack, making the battle more dangerous.
The Juggernaut’s visual design reinforces its idea—a towering, muscular figure that moves with deliberate, weighty strides. Its size and intimidating stance immediately signal its strength and resilience, ensuring that players understand the threat before the battle even begins.
Attack Breakdown
Normal Punch – A straightforward, heavy-hitting punch. Easy to avoid, but damaging nonetheless if hit
Heavy Swing – A two-hit combo, starting with a normal punch, followed by a powerful backhand strike. Small animation cues help the player identify and react to the attack pattern.
Heavy Swing Combo – A three-hit chain attack, using both arms. This is the Juggernaut’s longest combo and one of its most punishing moves, requiring players to stay alert and dodge strategically.
Rush Attack – A gap-closing charge. While the Juggernaut usually moves slowly and deliberately, if the player keeps their distance, it will suddenly break into a powerful charge, knocking the player back if they fail to evade in time.
Enraged Attack (Triggered by Master’s Death) – If the Skirmisher is killed first, the Juggernaut enters a berserk state, unlocking a new three-hit combo. The final attack in this chain is a devastating stomp, creating a large area-of-effect (AoE) shockwave that deals massive damage. Players must carefully plan their approach, as an enraged Juggernaut can quickly turn the tide of battle.
Impact on Gameplay
The Juggernaut’s combination of brute strength, strategic AI behavior, and synergy with other enemies adds an exciting layer of risk and decision-making for the player. Do they take out the Skirmisher first and risk dealing with a raging Juggernaut? Or do they focus on the Juggernaut first, while dodging the attacks of its faster, more agile handler?
By blending enemy relationships with engaging combat mechanics, the Juggernaut became more than just another tank—it became a dynamic battlefield threat that demands careful planning and quick reflexes.
Creating a Balanced and Engaging System
With all the enemies fully implemented, one crucial element was still missing—combat logic between them. If every enemy attacked relentlessly and without coordination, the gameplay would feel chaotic and overwhelming rather than strategic and engaging. To address this, I researched different methods to make group combat feel more balanced and organic.
After a thorough investigation, I decided to implement a Token System. This system worked by assigning the player a set number of attack tokens, which determined how many enemies could engage simultaneously. Before attacking, an enemy would first check if any tokens were available. If there were, it could proceed with the attack; if not, it would have to wait for its turn until a token became available again.
In practice, this system created a natural and strategic flow of combat, similar to the classic Assassin’s Creed games, where enemies take turns attacking rather than swarming the player all at once. For example, if the player had two tokens, only two enemies could engage at the same time, while the others held back, waiting for their turn. This approach improved combat readability and balance, ensuring the player wasn’t overwhelmed while still keeping battles engaging, intense, and dynamic.
Crafting a Polished User Interface
One of the key aspects I wanted to highlight in this project was the User Interface (UI). From the very beginning, the team understood that a well-crafted UI could elevate our game from a student project to something that felt truly polished. With that in mind, we made UI design a priority early in development, ensuring that it was both visually refined and fully functional for both keyboard and controller inputs.
Laying the Foundation
I began by creating a user flow and mapping out the expected menu screens and HUD to create a structured framework. Once I had a solid base, the next step was to build a working UI prototype. This prototype included all essential interactions, such as main menu navigation, pause screens, death screens, and the HUD, they all had to be included and tested to make sure everything worked smoothly with both input methods. One of the important objectives was to enable players to switch between keyboard and controller seamlessly at runtime
Iterating Through Playtesting
Once the prototype was integrated into the game, we conducted multiple playtesting sessions to evaluate its usability and flow. Most of the menu navigation worked as expected, but the HUD required significant refinement—particularly in how we visually conveyed Stormlight, a key gameplay element. Based on player feedback, we adjusted the HUD design to ensure clearer, more intuitive communication of vital game information.
Finalizing the UI Design
Having insights from playtesting, I moved to the final UI design phase. In Figma, I did a high-fidelity interface and shared iterations with the team, taking their feedback and making the adjustments. After everyone aligned on the visual direction, I took the finalized UI into Unreal Engine 5 via widgets and ensured a smooth, polished integration within.
Visual Inspiration & Style
For the UI’s aesthetic, we took inspiration from titles like God of War, Uncharted, Shadow of the Colossus, and Spec Ops: The Line. Our goal was to use clean yet impactful typography and visuals, creating a modern, immersive experience while maintaining simplicity for ease of use.
In the end, this approach to UI design not only enhanced the look and feel of our game but also solidified it as a well-rounded and professional experience.
Additional Impact
Beyond the core areas I’ve highlighted, I also contributed to several other aspects of the project that played a crucial role in refining the overall experience.
I worked on VFX for enemy attacks, environmental hazards, and various player effects, ensuring that each visual element reinforced gameplay clarity and immersion. Additionally, I focused on game optimization, primarily by implementing Level of Detail (LOD) techniques and optimizing AI behavior to minimize performance impact.
I also utilized Unreal Engine’s Sequencer to create cinematic sequences that added depth to the game’s presentation. Lastly, I played a significant role in bug fixing, not just within the AI behavior code but also across player mechanics and UI widgets, ensuring a polished and seamless final experience.
Last Reflections
This was the longest and most ambitious project I’ve worked on, but also the most exciting. It challenged me in many ways and taught me several lessons that I’ll carry forward in my career.
Communication was by far one of the most critical aspects. Throughout development, we encountered challenges related to game mechanics, project scope, and new ideas that emerged along the way. Clear and consistent communication was essential—not only for overcoming obstacles but also for ensuring that development progressed as smoothly as possible.
Teamwork played a crucial role as well. With so many different aspects to cover, collaboration was key. Since each team member specialized in different areas, it was vital to keep everyone aligned, update the team on progress, and most importantly, trust each other’s expertise.
Lastly, resilience and openness to feedback were fundamental to our success. Playtesting often revealed unexpected issues, requiring us to make significant changes—even to elements we initially felt confident about. Being receptive to feedback and willing to iterate allowed the project to grow into something far better than we had envisioned. Additionally, as we approached the final stretch, fatigue started to set in across the team. However, pushing through those tough moments with determination ultimately allowed us to bring this game to life in the best way possible.
Related Projects
Contact
Don’t hesitate to reach out if you are interested in working together, let’s make it happen!
Living in
Montréal, Canada
sfb199762@gmail.com