top of page

SIMULATED HAVOC

FIRST-PERSON BOOMER SHOOTER

Introduction

With this project, I set out to create a fast-paced experience that blends the fluid movement of Titanfall2 2 with the intense, relentless combat of DOOM (1993).​​​

The design goal was to create a reactive gameplay experience, ensuring that player movement, combat and enemy AI work together seamlessly to keep the player engaged.​​

Story

​As a soldier in Earth's last line of defense, you are dropped into an advanced combat simulation designed to prepare you for an impending alien invasion. Clear the city and save humanities leaders trapped inside the government tower. With breakneck movement, wall-running, you must fight through waves of monstrous enemies, proving you have what it takes to face the real war.

Breakdown

  • Solo project spanning eight weeks half speed (4h/day)

  • Unreal Engine 5

  • Basic blockout level

  • Basic color scheme​​

  • All scripts were created by me

  • Assets/Plugins used:
    • Blockout Tools Plugin​
    • Ultra Dynamic Sky
    • Sprites from DOOM (1993) and Duke Nukem

    • Sounds from Doom (1993) and soundsnap.com​​​​​​

Focus area

  • Traversal

  • AI design

  • Gameplay design​

  • Gameplay Prototyping

  • Combat design

VIDEO PLAYTHROUGH

loader,gif

LEVEL BREAKDOWN

Overview

image.png
HighresScreenshot00044_edited.jpg

1. Opening Vista

The player sees their long-term goal over in the distance - The Tower.

HighresScreenshot00045_edited.jpg

2. First Encounter

The player learns to battle an enemy in a safe environment.

HighresScreenshot00046_edited.jpg

3. New Weapon

The player familiarize themself of the parkour system and gain a new weapon.

HighresScreenshot00043_edited.jpg

4. The Sluice

Down in the sluice the player gets to the first area viewed from the opening shot.

HighresScreenshot00047_edited.jpg

5. Crossroad

The player has to use their parkour to safely cross the sluice to the crane, which acts as a crossroad.

HighresScreenshot00041_edited.jpg

6. The Plaza

The player finds themself in a trap and must fight their way through.

HighresScreenshot00039_edited.jpg

7. Crane

Looping back to the crane now powered, the player can activate it and reach the next area.

HighresScreenshot00048_edited.jpg

8. Final Push

The player finds themself in a funnel area with hordes of enemies attacking them.

HighresScreenshot00050_edited.jpg

9. Elevator Ride / End

The player has fought their way through hard and can now use the elevator to reach the top of the tower.

Tension Graph

Screenshot 2025-04-02 112912.png

DESIGN TECHNIQUES 

Visual Design

For this project I decided for a blockout design for easier readability with a simplistic yet readable color scheme, this allowed me to focus more on the technical aspect of this project and not worry about making everything seem realistic or beautiful. The colors where carefully selected through feedback and playtesting and lets the player not having to second guess where to go or how things work.

Onboarding

I design onboarding to gradually introduce the player to enemies, weapons, and parkour without overwhelming them. I start with controlled encounters, allowing players to learn enemy behavior and weapon handling in low-pressure situations. As they progress, I introduce more complex enemy combinations and encourage weapon experimentation. Inspired by Titanfall 2, I integrate parkour elements step by step—first in safe environments, then layering movement challenges into combat. This ensures players build confidence naturally, making advanced mechanics feel second nature by the time they face high-intensity encounters.

Hourglass Design

I use Hourglass Level Design to balance pacing and player agency in my levels. I create tight, linear openings to introduce mechanics and direct focus before expanding into larger open areas where both combat and action encourages quicker movement and strategy. This design creates good pacing and makes the player neither bored or fatigued.

Combat Bubbles

I design combat bubbles as open-ended arenas that give players freedom in movement and strategy. Inspired by modern DOOM, these spaces allow for multiple approaches, rewarding mobility and quick decision-making and makes the player react faster as the intensity grows.

PLAYER MECHANICS

Parkour system

Breakdown

The player can wallrun on green-marked surfaces for faster traversal. Gravity and movement slow slightly for better control. While wallrunning, the player can double jump to reach higher or distant areas, enhancing movement and exploration. Addionality I added the ability to ledge climb when high enough of ledges for faster movement. 

​​Lastly I implemented a ground slam mechanic where landing with enough force, damages nearby enemies and objects, adding further encouragement to seek vantage points and mobility as an advantage.  ​​

Weapon Arsenal

Breakdown

The player has access to four different weapons as they progress through the level. These weapons differ from each other, and it is important to know when to use one or the other.

 

  • Fists are the player's default weapon, offering unlimited attacks but dealing minimal damage.

  • The pistol is a reliable all-rounder, effective at close to medium range and ideal for engaging ranged enemies.

  • The shotgun excels in close quarters combat with high damage, piercing shots, and widespread but is limited by ammo.

  • The rocket launcher, the most powerful weapon, delivers explosive AOE damage, destroying enemies and objects alike, though its slow fire rate and self-damage risk require careful use.

Item Pickups

Breakdown

There are many items that awaits the player throughout the level. Most serve as ammo for each weapon the player has. These items can be spawned into the level through spawn points, be dropped from defeated enemies or be found inside loot chests. Other than ammo the player can pick up health packs and shield packs to replenish their respective stat, only if required. 

AI ENEMIES

Breakdown

One of my primary objectives for this project was to develop the AI enemies that the player encounters. The behavior trees serve as the foundation for all enemy actions, providing a solid and consistent framework.

 

I created a shared behavior tree that is used across all enemy types, enabling easy scalability for different enemy variations. The difference between the enemies lies in their variables and stats, such as attack type, attack range, and movement speed et cetera. all of which are controlled through these tasks in the behavior tree. To manage this, I created several data tables for each enemy to store their specific stats, as well as their sounds and sprites.

Level System

To Increase both gameplay variation and difficulty, I implemented a level system which increases the AI enemies stats. These stats change; max health, max shield, damage, attack cooldown, attack range and max movement speed. This is really useful to scale the difficulty for later stages in the level as the player gets more comfortable with their weapons.

The image above is an example of a damage table for a specific enemy type, where each row corresponds to a specific level of that enemy type.

Damage Calculations

Damage calculation works the same for players and enemies, both using a shared health component. I created three functions in a function library for different damage types:

 

  • Normal - which factors in max damage, range, shield absorption, and health damage leak.

  • No Range - which ignores max range, but still use other factors.

  • No Modifier - which bypasses every factor and applies the max damage towards the target.

 

This allows both enemies and the player to apply damage uniquely using an interface.

Enemy Variations

Monster 01 (Brute)

The Brute moves quickly to attack the player but deals not as much damage as other monsters.​

Strengths
  • Fast movement.

  • Fast attacks

Weaknesses
  • Very weak at close range

Monster 02 (Pyro)

The Pyro moves very slow and will attack the player at a larger range by shooting fireballs towards the player dealing Area-Of-Effect damage.

Strengths
  • Very high damage

Weaknesses
  • Very slow

  • Long attack cooldown

Monster 03 (Boomer)

The Boomer is quick and disastrous towards the player, wanting to come up close and personal them and detonate itself dealing massive Area-Of-Effect damage.

Strengths
  • High damage

  • Deals damage on death

Weaknesses
  • Low health

Monster 04 (Barrager)

The Barrager fires a burst of bullets towards the player in rapid progression.

Strengths
  • Quick firerate

Weaknesses
  • Low damage

Behavior Tree

My behavior tree is designed to be shared across all enemies, ensuring a consistent yet dynamic AI system. It consists of several key tasks that handles enemy movement, decision-making, and combat interactions. 


Roaming and Player Engagement
  • Random Roaming: When the enemy is not engaged with the player, it will wander randomly to nearby reachable locations.

  • Move Towards Player: Once the player is detected, the enemy will transition from roaming to actively pursuing the player.
     

Combat and Attack Handling
  • Attack Player: If the enemy reaches the required range for their attack range, it will initiate an attack.

  • Attack Cooldown (Optional): For enemies who have attack cooldowns, a cooldown task ensures balanced pacing between attacks.


Visibility and Positioning
  • EQS Task (Regaining Line of Sight): If the enemy loses sight of the player, it will use an Environmental Query System (EQS) to locate a nearby position that restores line of sight and scores best for just them.

  • Line Trace for Faster Reactions: While moving toward the EQS result and even attacking, the enemy continuously performs line traces toward the player's current location, allowing it to re-engage more quickly or stop if line of sight is broken.


Death and Visual Representation
  • Death Task: Handles enemy defeat and any necessary cleanup.

  • Set Sprite Task: Ensures that the correct sprite is displayed for each action, visually reflecting the enemy's current state.

DEV-TOOL

Spawn System

Breakdown

To make it easier for me as I designed ​the level I created a dynamic spawn system with two spawn points, one for AIs and the other objects. It also serves as a dev tool, allowing easy tracking of spawn locations, select enemy types, levels, object types and call events when interacted with. To enhance readability, each spawn point displays their actor name, billboard, and an indicator showing its spawning availability.

Trigger Spawning Box

When the player enters the Trigger Spawning Box’s collision area, it activates the trigger, which iterates through its assigned array of actors or objects spawn point and initiates their spawning process.

Additionally, I implemented a CheckSpawnPoints button that allows the blueprint to verify its own spawn point arrays. When triggered, each individual spawn point updates its sphere color to green, indicating that it is linked to a trigger and will spawn when activated.

The CheckAllSpawnPoints button extends this functionality by prompting all other triggers to validate their respective spawn points simultaneously. This feature provides an efficient way to see the status of all spawn points at once.

Object Spawn Point

Object spawn points can determine the type of object to spawn, this can be ammo, health, weapons or even exploding barrels. It can also call events when picked up to start certain actions. To increase readability, I added a sphere above the spawn point to indicate whether it can spawn or not.

 

  • Red sphere - Is not refereed by a spawn system and will not spawn.

  • Green sphere - Is refereed by a spawn system and will spawn when activated.

  • Blue sphere - Is set to spawn independently on start.

AI Spawn Point

AI Spawn points can be placed to spawn specific enemies with customizable settings like movement and difficulty. Waves can be used to activate the spawn point the desired number of times. The AI spawn point work similar to the object spawn point and needs to be called to activate but can't spawn on start.

The same sphere indicator is present for the AI spawn points as well.

Wave System

The wave system is designed to work alongside the regular trigger spawning. It can be activated in two ways:

  1. If the Use Box Trigger? option is enabled, the wave system will activate when the player enters the trigger area.

  2. The system can also be triggered by other actions, such as picking up items or interacting with objects.

Wave Spawning Process:

  • Upon activation, the system identifies the first wave from the Spawn Waves map.

  • It then goes through the array calling every spawn point with a set specific delay between each.

  • The Delay Between Each Spawn (set to 3.5 seconds) controls the time between individual spawns within a wave.

  • The Delay Between Waves (set to 2.0 seconds) dictates the time before the next wave begins.

  • It is also possible to call events for each wave using Call Custom Event and inputing which wave. 

This setup enables flexible wave-based spawning, allowing for controlled pacing and enemy deployment based on different triggers and delays.

PRE-PRODUCTION

I began my design process by brainstorming what kind of project I wanted this to be—something cool, unique, and unlike anything I had done before. Having previously worked with 2D sprites during a summer project, I knew I wanted to continue exploring that visual style.

 

I looked through classic games for inspiration and found myself drawn to DOOM and its fast-paced, straightforward gameplay. The more I researched and watched gameplay, the more I appreciated its simplicity paired with varied and engaging mechanics. This became the foundation for the direction I wanted to take.

But it didn’t stop there. I also wanted to pay homage to one of my all-time favorite games, Titanfall 2. Its fluid movement and fast-paced combat have always stuck with me, so I decided to try blending the core elements of DOOM with the parkour-inspired mechanics of Titanfall 2.

For the player’s goal, I was inspired by Half-Life 2’s City 17 building—how it towers over everything, always visible in the distance. This gave me the idea to create a similar structure that not only serves as the player's end goal, but also acts as a constant visual landmark to help with orientation and navigation throughout the level.

To keep iteration going quickly, I made the decision in this stage to go for a rough blockout design. This has allowed me to make fast and easy changes in my level to improve and expand certain things.

I'm the kind of person who loves to dive headfirst into projects—prototyping, testing, and making features work as soon as possible, before a start sketching paper designs and layouts. With that mindset, I managed to build the core foundation for the enemy, player, and parkour systems and I had reached what I would believe is a Minimal-Viable-Product (MVP) in just three days.

REFLECTIONS

This project has been one of my most rewarding and educational experiences, deepening my understanding of technical design and optimization for better gameplay

As part of my design process, I document my challenges and solutions to learn and evolve as a designer.​

One of my biggest hurdles as I started with this project was designing and developing my enemy AI. My goal was to create a diverse set of enemies, each with their unique logic and behavior, to avoid making the gameplay feel one-dimensional and plain.

​​

To overcome this challenge, I started to design and work on a shared behavior tree, one which is built to scale to whatever kind of enemy in which I wanted to create, including but not limited to: melee, ranged, exploding and area-of-effect (AOE) based.

This project helped me refine my understanding of AI logic, gameplay design and optimization.

For this project, I aimed for a lot of features but sadly due to time constraints I had to cut one of my most anticipated feature; The boss. This feature would see the player face a boss towards the end of the level.

​During my time at The Game Assembly, this has been by far my favorite project​ - it was an incredibly rewarding experience and I am very pleased with the result.

I am part of The Game Assembly’s internship program. As per the agreement between the Games Industry and The Game Assembly, neither student nor company may be in contact with one another regarding internships before April 23rd.

Any internship offers can be made on May 5th, at the earliest.

bottom of page