Combat Design Prototype
Project meant to demonstrate my ability and potential to implement combat design in Unreal Engine. Focusing on 3 enemy archetypes with varying degrees of complexity and behavior. Also providing analysis of current build state, and areas of improvement for further iteration cycles. Systems not directly necessary to demonstrate the combat design were intentionally kept as simple as possible so development time could remain focused on the combat itself.
Password: CombatDesignProject
Project Overview
I wanted to design the prototype around readable behavior and enemy logic rather than stat based difficulty. The enemies should be able to create pressure based on actions, adaptability, and timed attacks. The enemies select actions based on their current combat state and player actions, rather than pure RNG. Letting the player learn the enemy behavior and feel an increase to their skill beyond numerical stat values.
I selected and altered pre-existing attack animations to enhance combat fluidity and readability to try and give each enemy their own identity, while tying the combat mechanics directly into them.
Disclosure
All models and source animations are from a third party and are not my creation.
3
Enemy archetypes
Fodder, Brute, and Elite
9
Attacks implemented
Each with its own conditions and cooldown
0
Randomized attacks
Every action selected from combat state and player behavior
Enemy Archetypes
Three enemies built on a shared combat architecture, separated by their attack conditions, movement values, and behavioral exceptions rather than by raw statistics.
Fodder
A common mob with limited decisions and mild aggression. Deliberately slow attack tempo, manageable alone but dangerous in numbers.
Brute
High health and large powerful attacks offset by a slower tempo and longer recovery. Easy to avoid, punishing to misread.
Elite
More aggressive and adaptable, maintaining pressure through faster actions, mobility, and responses to a wider range of player actions.
Combat AI Architecture
I built the three enemies around a shared combat architecture while keeping their individual attacks, conditions, movement values, and behavioral exceptions separate.
StateTree acts as the primary decisioning layer, while Blueprints and reusable components handle the supporting gameplay logic.
StateTrees
The individual enemies use the same general structure, but their attack conditions and behavioral rules determine how they actually behave in combat.
Blueprint Logic
Blueprints support the StateTree by handling the logic behind its decisions, including:
- ▸Attack availability and cooldowns
- ▸Distance and condition checks
- ▸Target and focus handling
- ▸Animation execution
- ▸Combat values and enemy-specific behavior
Reusable Combat Systems
Functionality that did not need to exist separately for every enemy was moved into reusable systems. This includes systems for:
- ▸AI target handling
- ▸Attack hit detection
- ▸Damage and health
- ▸Animation-driven hit windows
This allows the enemies to share the same basic infrastructure while their StateTree conditions, attacks, values, and behavioral exceptions create their individual combat identities.
Combat Clips
Gameplay footage of each enemy in the current build, with my assessment of what is working and what I would address in the next iteration.
Fodder Combat
SpearThe Fodder’s combat could be improved by increasing the effective hit area around the spearhead. During testing, I found that staying extremely close to the enemy could allow the player to avoid damage despite remaining directly in front of the attack.
The Fodder could also benefit from more consistent target tracking during attack animations. In a future iteration, I would add attack commitment through Animation Notify States while maintaining target tracking during the appropriate portions of the attack.
Brute Combat
GreatswordThe Brute currently feels the most engaging of the three enemies. I believe a large part of this comes from the Brute being resistant to stagger, allowing it to maintain pressure and fully commit to its heavier attacks.
However, the Brute also suffers from the same tracking issue seen with the Fodder. I would address this across the enemies by adding Focus Target StateTree tasks to the appropriate attack states, followed by defined attack commitment windows so tracking stops once the attack has committed.
Elite Combat
Dual SwordsThe Elite feels responsive due to Backstep Slash directly responding to player attacks. However, there are still spacing and movement issues that create awkward moments when the enemy suddenly loses mobility.
A more robust Disengage state with proper dash-based repositioning would help maintain the Elite’s intended mobility and pressure while creating smoother transitions between attacks and repositioning.
Animations and Animation-Driven Combat
The source animations are third party assets, I have adjusted and retimed them through Animation Montages to better fit the intended combat behavior of each enemy.
My focus was on using animation timing to support readability and combat feel. I adjusted windups, attack speed, follow-through, and recovery where needed so the animations better communicated when an attack was being prepared and when the player had an opportunity to react or punish.
The comparisons below show the original source animations alongside the versions used in the prototype, with a breakdown of the changes made and the reasoning behind them, as well as the Animation Notify State used to open and close damage windows during attacks.
Fodder
SpearThrust
Gap
I adjust the speed and timing of these attacks to feel a bit more telegraphed, while retaining a snappy attack window to give a feel of weight. After further consideration of the animations I feel as though they could be repurposed into a more capable spear enemy. The existing enemy concept would strongly benefit from less confident attack sets.
Brute
GreatswordGap
Spin
Overhead
The original animations lacked proper weight behind the sword for the feel I was wanting. By increasing the speed of the swings and slowing down the recovery periods it not only gives stronger readability but makes the attacks feel like a heavily weighted sword is behind them.
Elite
Dual SwordsFeintSlash
FeintSpin
BackStep
BlockCounter
The Elite animations felt a bit floaty, or unconfident. By tweaking the speeds at the right moment I was able to achieve more grounded and controlled feeling. As though it were being executed by someone more trained in combat.