top of page

Project Zero

Introduction

Project Zero has been my most ambitious, challenging and rewarding undertaking.

In previous solo projects I've made, it has either been a level whitebox with conceptual gameplay or isolated gameplay systems without a proper level to use them in. With Project Zero I wanted to create a holistic project where many systemic design elements would work together to create a grand, epic experience.

I took on the challenge to create my own stealth game, taking inspiration from some of my favorite games in the genre but having my own take on the design and the technical implementation of features.

I created all of the systems from scratch and designed them to be scalable and iterable, meaning I could start small and extend their functionality over time.

Since it's such a big project, I've split it into different sections with sub-categories. I hope it's easy for you to find what you want to know more about. 

Project details
  • Made in Unreal Engine 4.24 over 14 weeks

  • Heavily inspired by MGSV: Ground Zeroes

  • Models made in Maya

  • UI assets made in Photoshop

  • Audio cut and mixed in Audacity

What did I not create?

Stealth Design

Stealth Design

Topics

Topic_GeneralPhilosophy.jpg
General Philosophy
Topic_Interrogation.jpg
Interrogation
Topic_CoverSystem.jpg
Player Cover System
Topic_HideBody.jpg
Non-lethal Takedowns & Hiding Bodies
Topic_CoverPlacement.jpg
Cover Placement
Topic_ReflexMode.jpg
Stealth Feedback & Reflex mode
Topic_Distract.jpg
Distracting Enemies
Topic_Binoculars.jpg
Binoculars & Markers

General philosophy

What makes a great stealth experience?

I asked myself this question when getting started on Project Zero. Spy stories have always intrigued me and the feeling of navigating unnoticed behind enemy lines always makes me feel like a boss. But why?

To delve into this, I did extensive research on some of my favorite stealth game series and found some common ideas.

Being on the edge of detection in a stealth game should feel thrilling and the outcome of every tense situation should give a feeling of relief and accomplishment.

Enemy behavior should be fairly predictable, letting the player outsmart them by planning and executing their approach in the most effective and creative way they can think of. I wanted a stealth experience where the player feels like they are in total control of their actions, and that punishing consequences occur because of their mistakes.

 

This is called player agency and was one of the most important core design elements weaved into my design.

Stealth Philosophy
Player Cover System

Player Cover System

The player cover system is one of the core features that could make or break the experience.

My goal was to let the player get behind virtually any object in the game and be covered from both bullets and detection, and therefore cater to both a combat and stealth approach. Utilizing covers reduces the fatigue of the constant threat of detection, and offers a high prospect and refuge in contrast to the otherwise open and exposed areas.

What I wanted to achieve with the cover system:

  • An opportunity for the player to take a second, breathe, and plan their next move

  • Protection from exposure in both combat and stealth scenarios

  • The player can easily transition between covers, keeping flow in focus

The result

First iteration of the cover system

The first iteration was inspired by Deus Ex: Mankind Divided, which has a tight cover system that locks the player into a "lane" along the cover surface and lets the player exit or transition between covers by pressing an action button.

The benefit with this style of cover system was that it would allow players to feel safe knowing they couldn't accidentally step out of cover by overshooting it.

The downside was that it crippled the fluid movement I was aiming for, and would probably be better suited for a level design with tighter cover placement.

It behaved nicely, but didn't feel quite right.

On the technical side, boiled down, it works like this:

  • A collision sphere around the player checks for cover objects

  • Traces on each side of the player check if the surface is flat and wide enough 

  • Locomotion changes and movement now follows the surface normal

  • A sphere trace checks for corners to trigger the peek animation

  • The same trace keeps the player covered while passing small gaps

The final iteration of the cover system is more dynamic in the sense that it lets the player move around freely, gently nudging them into the cover's lane when close enough to a cover surface.

This made the system feel more fluid and more intimately connected with the player's movement.

Final iteration of the cover system

PlayerSafe.jpg

While in cover, the player is safe from detection

within a specified angle.

CoverPeek.jpg

When aiming a weapon from a corner or low cover, the

player pawn will automatically peek out.

Cover Placement

Cover Placement

When placing cover assets in the world, I encountered some issues. Some shapes were more complex than others and would return false info about the surface to the cover handler. A small bump in a surface could say "hey, this is a corner" and result in unpredictable behavior.

To counter this problem, I created a dedicated cover actor and scripted it to get the bounds of any chosen mesh and create an additional custom collision box on a separate channel that only reacts with the player's cover checks.

 

This way, projectiles and visibility checks would still react with the actual surface of the object, while the player pawn would move along the custom collision box.

Using a "Low Cover Threshold" value, the script automatically measures the height of the object and flags it as low cover when appropriate.

CoverObjectSettings.png

Placing covers in a scene

CoversInScene.jpg

Covers in a level

Distracting enemies

While playtesting, some players got anxious or frustrated with always having to engage certain enemies in order to get past them. I took this into consideration and added two different ways to distract an enemy:

Distracting Enemies

Whistling

If close enough, whistling will alert an enemy and cause them to investigate the player's location. This is a good way to either make them leave their post, or separate them from other enemies' sight lines and silently take them out.

Throwing Magazines

Empty Magazines can be picked up after reloading or found in the world, and can be thrown from a distance to lure enemies away.

Empty magazines are dropped when reloading

Throwing a magazine to lure an enemy away

Whistling to draw an enemy in

Interrogation

When sneaking up on an enemy, the player can catch them by surprise and hold them at gunpoint. The player will then interrogate the enemy who can reveal information such as level hints or key codes to secret areas.

If left unguarded, the enemy will try to reach for their weapon and and trigger an alarm.

Lone enemies can be caught off guard

Interrogation

Information is assigned to enemies through volumes in the world. Each volume contains a set of information and lets enemies inside the volume know what information to reveal. Once a piece has been revealed, it's removed from the volume.

NkGT4BTixJ.png

Information is stored in data tables.

Non-lethal Takedowns & Hiding Bodies

A non-lethal approach to engaging enemies is to knock them out by rolling into them. This will put the enemy in an 'unconscious' state and incapacitate them for a while.

A few points about how it works:

  • If the enemy hasn't seen you, they will be knocked out instantly. They will not trigger an alarm.

  • If the enemy has seen you, they require two hits to be knocked out. They will trigger an alarm when waking up.

  • If the enemy is in combat, they can still be knocked over, but cannot be knocked out.

Once an enemy is unconscious or dead, other enemies can detect their body and trigger an alarm. To avoid this, the player can grab a limb and hide the body.

This is a feature I didn't get to spend enough time to polish. Since the physics can be unpredictable, bodies can sometimes get stuck or become unresponsive.

Non-lethal Takedowns

If at first you don't succeed, try again

Bodies can be hidden behind objects or in bushes

Stealth Feedback & Reflex Mode

To let the player know when they are about to be detected, there are a few indications to look out for. There are three layers of feedback given to the player before they are fully detected and combat is initiated:

1. When an enemy has a line of sight towards the player but hasn't seen them yet, a radial indicator pops up on the HUD showing the direction of the enemy. This lets the player quickly hide before the enemy reacts.

2. When an enemy is alerted because they see or hear something they react with a voice line and turn on their flashlight, letting the player know that they need to move to another location to avoid being detected.

3. When an enemy has a clear sight of the player and is about to enter combat, time is slowed down for a moment, giving the player a final chance to take them out before they trigger an alarm and combat starts.

Steath Feedback & Reflex Mode

Reflex mode in my reference game