top of page

Undead Onslaught

Undead Onslaught is a solo reimagining of S.M.G.V.B.S.S.H.F., a wave-based zombie survival shooter originally developed during my time at university. I rebuilt the entire game from the ground up in Unreal Engine 5 to enhance the original concept using more advanced tools and systems. The primary goal of the project was to deepen my understanding of Unreal’s engine architecture while demonstrating my ability to design and implement complex gameplay mechanics, AI behaviors, and combat systems independently.

Role

Lead Developer

team size 

1 person

development time

on-going

Game Engine

Unity

Genre

First Person Shooter

Technologies used

image.png

Unreal Engine 5

image.png

C#

image.png

GIT

image.png

Photoshop

image.png

Trello

Theme/Story 

The game takes place in a derelict, overrun facility where the player wakes alone with only a sidearm and little knowledge of what happened. As the player explores the map, they encounter relentless waves of undead enemies that grow stronger over time. Through environmental storytelling and clues scattered across the level, the player begins to uncover the origins of the outbreak. This narrative is designed to reward exploration and survival, offering a sense of progression as the mystery unfolds and the player seeks a way to escape.

Role and Responsibilities

As the sole developer on this project, I led every aspect of the design and development process. My work began with implementing a responsive and immersive player movement system, utilizing both Blueprints and C++ to create a fluid locomotion experience. Sprinting, aiming, and stamina mechanics were carefully designed to complement the pacing of combat, encouraging players to make tactical decisions under pressure.

I also designed and implemented the AI systems, developing dynamic enemy behavior that reacts to the player's location and actions. These behaviors allow enemies to track, swarm, and challenge the player in real-time. To support the gameplay loop, I built a modular wave-based spawner that scales difficulty based on wave number and player progression. This system ensures that the tension rises consistently throughout the session, maintaining engagement and challenge.

In addition, I created a full combat economy, enabling players to earn points by defeating enemies and spend them on weapons, perks, or unlocking new areas of the map. This system introduced strategic depth, allowing players to customize their loadout based on playstyle and situational needs. The weapon upgrade machine further enriched gameplay by allowing players to enhance their gear, adding modifiers or improvements that rewarded risk-taking and survival.

Overall, I ensured that all core systems movement, AI, combat, and progression functioned together cohesively to deliver a compelling and replayable experience.

Design Process

In developing Undead Onslaught, I followed a five-step design process, which I will elaborate on throughout this portfolio piece. Each phase was crucial in shaping the game's mechanics, systems, and overall player experience.

1

DESGIN DOCUMENT/
research on unreal

prototyping

rought blockout/coding

2

3

refinement of code and level design 

4

passover and feedback

5

Design Document

The first step in my design process was creating the Game Design Document (GDD), where I organized all the initial ideas for Undead Onslaught and planned out the key features to be included. In this document, I outlined the core gameplay mechanics, establishing a clear vision for how the game would function and what players could expect in terms of experience and interaction. This foundational step helped guide the subsequent phases of development. 
I dedicated time to learning Unreal Engine, focusing on its capabilities for enhancing AI behavior, player control, and node-based coding. Additionally, I explored the implementation of a wave-based system, leveraging Unreal’s tools to create dynamic and engaging gameplay mechanics.

Core Game Pillars

  • A wave based system 

  • Responsive AI

  • ​ruined world environment

Gameplay Breakdown

Undead Onslaught is designed around a layered gameplay loop that engages players on multiple timescales. 

Explore abandoned facility

getting ready for the next wave

fighting  enemy's

In the moment-to-moment experience, players engage in fast-paced combat, moving fluidly around zombies, aiming and firing precisely, and collecting tactical power-ups such as Max Ammo or Insta-Kill. Players must constantly monitor their surroundings to avoid being cornered while repairing barricades to delay enemy spawns.

On a minute-to-minute scale, players are challenged to manage resources and make decisions about how to spend earned points. Whether unlocking a new section of the map, purchasing a new weapon, or activating a perk, each choice influences survival. Strategic positioning and coordination (in multiplayer scenarios) are crucial to maximizing efficiency and minimizing risk.

Over the course of a full gameplay session, the experience evolves as new threats emerge. Players unlock additional map areas, encounter unique enemies or mini-bosses, and acquire stronger upgrades. Progressing through escalating waves requires players to adapt their tactics, upgrade their gear via the upgrade machine, and make increasingly difficult decisions about how to allocate limited resources.

Core Game Pillars

The core gameplay is structured around four key design pillars. First, the wave-based combat system provides dynamic pacing, ensuring that players remain engaged as the difficulty ramps up. Second, the AI is designed to be responsive, adapting to player behavior and increasing the threat level over time. Third, the ruined facility environment is crafted to reward exploration, with secrets and upgrades hidden throughout. Finally, the point-based economy and upgrade systems add depth and strategy to each run, allowing for multiple playstyles and approaches.

Code Example

BP_FirstPersonCharacter BluePrint Overview

Key Features

  1. Sprint Input

  2. ​Can Sprint Condition

  3. Sprinting State Management

  4. Custom Event: Restore Stamina

  5. Timeline: Set_Restore_Stamina_TL

  6. Stamina Restoring State​

Sprinting logic

  1. Sprint Input:

    • Node: InputAction Sprint

      • When the sprint key is pressed, the logic checks whether the character can sprint by evaluating specific conditions.

      • When released, it triggers the Stop Sprinting custom event to end the sprint.

  2. Can Sprint Condition

    • Branch Node: Determines whether the character can sprint based on various factors (e.g., stamina, standing state).

    • Conditions include

      • The character must not be crouching (likely checked via the Standing/Crouch logic).

      • The player must be in a valid state to initiate sprinting.

  3. Sprinting State Management

    • Set Sprinting: Sets a boolean variable (Sprinting) to true when sprinting begins and false when it ends.

    • This state is used to enable or disable related systems (e.g., adjusting movement speed).

  4. Stopping Actions

    • Certain actions are disabled when sprinting:

      • ADS (Aim Down Sights): Likely prevents aiming while sprinting.

      • Firing: Sprinting might block weapon firing for gameplay balance.

  5. Walking Speed Adjustment

    • The sprint logic adjusts the character’s walking speed:

      • Set Walking Speed: Increases or decreases movement speed depending on whether sprinting is active.

Restore Stamina logic

  1. Custom Event: Restore Stamina

    • This event is triggered to begin replenishing stamina after sprinting ends.

  2. Do Once Node

    • Ensures that the stamina restoration logic runs only once per trigger, preventing multiple instances of the stamina restoration process.

  3. Timeline: Set_Restore_Stamina_TL

    • A Timeline node is used to gradually restore stamina over time.

    • The Update pin continuously updates the stamina variable.

  4. Stamina Restoring State

    • Set Stamina Restoring: Sets a boolean to indicate that stamina is currently being replenished.

    • This prevents actions like resuming sprinting while the restoration process is ongoing.

If you’d like to see more of my coding work and how I tackled challenges throughout development, click the button below. These examples demonstrate my problem-solving approach and my dedication to creating polished and functional gameplay systems.

  • Facebook
  • Twitter
  • LinkedIn

©2021 by Joseph Merrick. Proudly created with Wix.com

bottom of page