Project 1: Stress Test

Stress Test is a first-person looter shooter with rogue-lite mechanics where players progress through a series of four distinct levels. The primary goal is to defeat waves of enemies, earn money to purchase upgrades, and scavenge for improved weapons, culminating in a challenging boss fight. Developed over four months in Unreal Engine 5, Stress Test was the collective effort of a team of four students. As the Enemy AI Systems designer, I focused entirely on programming and animating enemy behaviors, ensuring they played a central role in player progression and engagement. While the game is currently playable, we have future plans to refine and expand on this core experience.

Capstone

At a Glance

Lead Systems Designer

UE5

4 Months

Small Team Collaboration

All Enemy Systems

Deep Dive

Original Concept

The initial concept for Stress Test laid the foundation for what would become a dynamic looter shooter experience. Early iterations featured a variety of key mechanics, including sprint and crouch functions, a camera shake for added immersion, and a camera zoom to mimic aiming down sights. To test these systems, we introduced Ammo-Tester, a simple enemy that allowed us to refine core combat interactions.

The concept also included enemy loot drops, giving players resources to upgrade and prepare for tougher encounters, and a working skill tree to enhance player abilities as they progressed. This early design phase was crucial for setting the stage for the game’s core loop, blending fast-paced combat with player progression.

Enemy AI Systems

In Stress Test, I developed the entire Enemy AI system, crafting dynamic encounters that challenged players across all four levels. Each enemy type had unique attack patterns designed to progressively prepare players for the final boss fight. I was also responsible for custom animations, rigging, and retargeting to ensure smooth interactions between AI actions and player responses.

As someone with no prior experience in behavior trees, AI systems, or animations, I faced numerous challenges, including a complete system overhaul where only a few original designs remained. Balancing enemy difficulty was one of the biggest hurdles. Early prototypes were overly punishing, so I iterated on AI reaction times and targeting to create a more engaging experience. Moving forward, I plan to introduce advanced AI behaviors like group coordination and environmental interactions.

Level Design

I designed two core levels for Stress Test, each aimed at enhancing gameplay mechanics and player engagement. The first was a fire-themed level featuring a central fire pit, which served as a strategic hazard. Players could lure enemies into the pit for extra damage or risk falling in themselves, creating a dynamic layer of risk and reward. The level design encouraged players to be more mindful of their surroundings.

The second was a boss arena, designed for a two-phase fight. In phase one, the arena was standard, but in phase two, the outer half of the floor lowered to reveal a lava pit. This shift required players to quickly adapt their strategy, as the shrinking space intensified the challenge during the final boss encounter.

Enemy Design

Early Enemy Design: Ammo-Tester

One of the first enemies implemented in Stress Test was a placeholder named Ammo-Tester. This enemy was designed to serve as a basic target for testing player weapons and combat mechanics. Ammo-Tester lacked any animations and primarily functioned by shooting line tracers out of its chest while chasing the player. Despite its simplicity, this enemy played a key role during early development, allowing us to refine basic shooting mechanics and enemy pathfinding before moving on to more complex AI designs.

Melee Enemies

The melee enemies in Stress Test were designed to be fast and aggressive, putting pressure on the player in close-quarters combat. These enemies were equipped with sword-like arms and had three distinct attacks: a standard slash, a leap attack to close distance quickly, and a spin kick that tracked the player, forcing them to stay mobile.

Visually, these enemies took on a green-themed robotic design, reinforcing their mechanical, relentless nature. The combination of varied attack patterns and visual design helped make melee enemies a core threat that required players to engage with both defensive maneuvers and offensive timing.

Ranged Enemies

The ranged enemies in Stress Test were designed to challenge players from a distance. Featuring a gun arm, these blue-themed robots harassed players with frightening accuracy, forcing them to stay on the move and seek cover. Balancing these enemies was one of the most difficult tasks, as their precision made them overwhelming in early iterations. To address this, an additional attack that was initially planned for them was removed from the final version to make encounters more manageable.

Shield Enemies

The shield enemies in Stress Test introduced a tactical challenge for players, as they were designed to be more defensive. These yellow-themed enemies moved slowly but were equipped with a towering shield that covered most of their body, destroying incoming projectiles on contact. The key to defeating them was to destroy the shield, which would then stun the enemy for 3 seconds, providing a crucial window for players to deal direct damage. This enemy type forced players to adapt their strategy, as they had to break through the defenses before delivering the finishing blow.

Kamikaze Enemies

The kamikaze enemies in Stress Test were designed to create chaotic and high-stakes moments during combat. These fast, red, explosive enemies had very low health, meaning a single shot was enough to set them off. When triggered, they dealt explosive damage to anyone nearby, including other enemies. This created a double-edged sword for players, as well-timed shots could take out groups of enemies but also put the player at risk of getting caught in the explosion themselves.

The Boss

The boss, K.Y.L.E, is a formidable foe who embodies the most dangerous traits of every enemy encountered throughout the game. Equipped with their deadliest attacks and introducing new, unique abilities, K.Y.L.E presents a significant challenge. As the fight progresses, players who manage to damage him enough will trigger his second phase, where his stats are boosted, and his attacks evolve into larger, longer, and even more devastating forms, raising the stakes for an intense final showdown.

What Went Right

Revised Enemy AI System

I began with no prior experience in enemy AI or system creation. While the initial foundation wasn’t a complete failure, it was unstable and required an almost total overhaul. I developed a more flexible system to handle various enemy types and attack patterns. This revision proved successful, allowing me to create the enemies now featured in the game. By implementing modular behavior sub-trees and centralizing attack logic into a component, I ensured long-term versatility and scalability. Although the system still has room for advanced improvements, it can now support any enemy or attack design. I’m proud of what was accomplished in such a short timeframe.

Attack Logic Actor Component

As previously mentioned, modularizing enemy logic was crucial to the new design. Anticipating late-stage asset integration and potential content cuts, I focused on grouping systems as closely as possible. My goal was to ensure that the scripts had minimal dependencies outside of their blueprints, allowing for easier adjustments as the project progressed. This approach was especially important for the boss design, as the basic enemies served as the IPM for the boss's attack patterns.

Asset Integration

We had a fantastic artist work with us during the last month of development. She was very flexible with our requests and provided everything promptly. Because of that, I was able to dedicate ample time to learning retargeting and IK rigs. This made the process just smooth and bug-free. 

What Went Wrong

Team Communication

Initially, this was a major challenge for the team. While my concept was chosen as the foundation, we all agreed to branch out in search of something more original. However, the lack of organized record-keeping and issues with the recommended documentation led to a significant amount of wasted time and effort. I attributed this to the typical growing pains of a first-time team project. Having worked closely with others during my time in the Air Force, I was familiar with team dynamics and could quickly recognize when others were less experienced. But, as with any team, we eventually found our rhythm. By the halfway point, we were working more efficiently, generating new ideas and refining our workflow. Ultimately, I believe everyone came out of the experience stronger and more capable.

Original Behavior System

The initial behavior system did not meet the team's expectations due to my inexperience at the time. Navigation was inconsistent, and enemies were unresponsive—common challenges for a first-time student project. I recognized the shortcomings and was determined to improve the experience. Retaining elements like the AI controllers and EQS, I reworked the system, addressing each issue one step at a time. I refined movement timing, implemented behavioral states, and strengthened weak or exploitable areas. As a result, enemy encounters now feel fluid and engaging, delivering a much more polished gameplay experience.

Interested in Working Together?