Introduction

In this project I set out to create a 3rd person action/stealth adventure set in a near future setting. The focus was to create a whitebox experience. The project includes level design and scripting.

Project Details

  • Developed over 4 weeks
  • Engine: Unreal Engine 4
  • Level Design
  • AI Scripting
  • Performance
  • Whitebox
  • Epic Marketplace Assets used: Advanced Locomotion System V4, Blocking Starter Pack, Matte Painting Skybox Pack II

Pre-production

PureRef_3ArEYs5Nki.png

Gathering reference material

I began my process by gathering inspiring images, I believe that any material whether it being images, videos or music is worth gathering at this stage since it’s not only meant to be used as reference material but also as a source of inspiration.

My reference library largely consisted of images of brutalist architecture and Icelandic/Norwegian landscapes.

msedge_y5QUKQFNiZ.jpg

Landscape reference

Since I based my level on a real location I used google earth to survey the landscape in that area. This greatly helped when drawing my overview since I got a better understanding of the mountainous region.


Before and after overview

Click to enlarge

Click to enlarge

blockout process

Iterations

During the blockout phase I always try to iterate on my design since this is when it's the easiest to make changes. Although I try to iterate early in the process, I have no issues with making large iterations further into the process as shown in the blockout gifs.


Flowchart3rdPerson.png

Gameplay

3rdPersonDistractGif.gif

Distract enemies

The player is able to whistle at enemies alerting them. When alerted the npc will search the origin location of the whistle. This mechanic allows the player to isolate targets and eliminate them without getting spotted by other npcs.

I thought about implementing a ranged distract ability similar to the coin toss from the hitman series but due to time constraints I never implemented this mechanic.

EnvKillsGif.gif

Using the environment

I wanted the player to be creative with their environment, using it to their advantage. Environmental kills also count as “accidents” meaning that they will not alert the npcs, allowing the player to take out enemies without alerting their associates.

Exploding barrels may not be the most innovative mechanic but they’re a lot of fun! Especially when they send npcs flying into the canyon, leaving no evidence!

OutlineGif.gif

Player perception

When playtesting I realized that it can be really difficult to predict enemy paths and sometimes players would walk around a wall and be surprised by an enemy lookin right at them. I combated this by introducing a “hearing” mechanic which allows the player to hold a key which will narrow the players field of view but outline nearby enemies, allowing them to predict npc paths more efficiently.

This mechanic felt a little unfair but by tweaking the distance of which outlines render It can be balanced.

KeycardGif.gif

Keycards

I wanted to create high risk high reward situations in the level promoting exploration. Certain guards carry keycards in the level. These keycards allow the player to access areas otherwise locked.

The player can either pickpocket the keycard or get them of a downed npc.

When implementing this system I was a worried that players wouldn’t understand that certain doors require keycards, therefore I created signs sharing the same color as the keycard, communicating their usage area to the player.

PlatformingGif.gif

Platforming

Albeit a very “gamey” mechanic, I enjoyed adding a bit of platforming into the experience. It added a bit of lightness to an otherwise serious experience which I believe made the level more fun.


Design Techniques

In this screenshot I break some of the aspects that I consider when creating level.

Funnel Before Reveal

I utilized the funnel before reveal technique in order to enhance the reveal of the super weapon. Initially the reveal framed the weapon in the cave but I wanted to surprise the player. Which is also why I added the bird directing the players attention to the right just as the helicopters fly past.

FunnelBeforeRevealGifd.gif

Working with Sequencers

For the helicopter flyby I contemplated creating a blueprint actor that would follow a splined path, but ultimately felt that this was unnecessary. A more effective way of creating the same feeling was by utilizing the sequencer in unreal engine.

UE4Editor_kW7rtsXvWC.jpg

Framing the objective

I wanted to highlight the importance of the bridge so I used framing to draw the players attention toward the area.

I also placed two guards in this area to slow down the player's speed allowing the player to further take in the view.

HighresScreenshot00769.png

Leading the player

During playtesting I noticed that it wasn’t clear that the player was meant to drop of the train onto the platform under the bridge. By adding a wire hanging over the edge I created a leading line. I further enhance the visibility of the lower platform by placing contrasting sheets underneath the wire.

In case this wasn’t enough I made sure that the player was never in any emergent danger while observing their escape route.

HighresScreenshot00766.png

Using movement to draw attention

Another issue noticed during playtesting was, players not noticing certain guards. This lead to them being spotted without knowing who saw them. The most serious problem was the guards on top of the train center.

Initially there were 2 guards on the roof. Players would almost always forget about these guards and get spotted once they got close enough to the building.

By removing one guard and making the single guard patrol a path, I lowered the risk of getting caught while also drawing more attention to the single guard.

MovementGif.gif

AI Scripting

PerceptionGif.gif

Custom perception

Normally the built in perception system in unreal engine would suffice for a whitebox level experience, but I wanted to challenge myself in creating my own system using blueprints.

An issue I had with the built in perception system was that it traces to the middle of the cylinder collider of the actor. This causes the AI to lose sight of its target if it’s behind a low cover.

I solved this by using two linetraces, one to the head and one to the waist. If only the head trace reports a hit, then the target will be considered “in cover” and the AI will continue its combat behavior. If none of the traces reports a hit, depending on how far away the target is. The AI will either advance or search.

AiCoverGifSMall.gif

Cover system

I decided to use cover nodes for the AI similar to the system used in my Insurgency level. In the behavior tree there is a task which will look for an empty cover node, reserve it, then move there. This prevents several AIs from running to the same cover.

An issue I noticed during playtesting was that the AI would use covers right next to or sometimes behind the player. This didn’t feel realistic so I changed the AI from using a sphere trace around themselves, to a box trace towards the player. This made the AIs feel a lot better.

TasksGif.gif

Dynamic patrol system

I wanted the AI to feel more believable so I created a patrol system which allowed me to assign tasks on each patrol node. An example of a task would be: Pick up a box then drop the box at another node. These small tasks made the AI feel more natural which improved the stealth experience.

I can also set the speed of which the AI should patrol between nodes and whether or not they should rotate to a certain angle when stationary.


Closing Thoughts

This project was a learning experience in which I got to delve deeper into AI scripting while also utilizing my design skills in creating a whitebox experience. I'm not entierly happy with the result and If I had a couple more weeks to work on the project I would redesign the beginning and the end of the level to better suite the stealth gameplay. I would probably also consider making the level a night level since I believe being able to hide in the shadows would enhance the stealth experience.

In conclusion this was a great project in which I learnt a ton. I could definitely see myself working on this type of level in the future!

Thank you for reading!