The Siege
Introduction
Play as a wizard assassin infiltrating a city under siege. Your task is to assassinate the local Lord to end the blockade quicker.
Run through the quiet streets, avoiding the guards enforcing the nightly curfew, and head for the Lord's castle to complete your mission.
Project details
-
6 weeks, half-time (4 hours a day)
-
Solo Project
-
Unreal Engine 5
-
First-Person Stealth Experience
-
Dishonored inspired
-
Focus on creating a holistic experience
-
All scripts and AI made by me
-
Assets/Plugins used
-
Blockout Tools Plugin
-
Dark Fantasy weapon pack
-
First-person Knife animation Pack
-
Mega Magic VFX Bundle
-
Free Fantasy Weapon Sample
-
Mixamo Animations
-
Overview
Gallery
Top Down

Level Flowchart

Level Start

Vantage Point

The loading dock

Sneaking through the alley

Sneaking through the tavern

Taking the barge to the basment

Overlooking the guard post

Passing the graveyard

Reaching the castle courtyard
Tension Graph

Design Techniques
Player Choice
Throughout the level, I wanted to give the player options for how they would like to proceed.
With height differences, the player can often take paths along higher elevated places or sneak around close to the canal.
In several positions, they also have the option to utilise their abilities to proceed.
And, of course, they always have the option to take down all the enemies in their path.
Landmark
The lord's castle serves as the player's landmark and guiding point. While the player might sometimes lose sight of it, it will always return to help remind the player of their long-term goal.
Guiding the player
To help guide the player towards their long-term goal, I use light in the shape of fire and torches to show them places of interest and a way forward.
I also utilise the river as a constant leading line, pointing towards the castle and helping guide the player towards the end goal.
Funnel before reveal
Going from the first, more closed-in section to the second, more open section, I funnel the player through a narrow part before getting a small reveal over the new area.
Then, I give the player a nice way to proceed from the balcony into an L-shaped bend, thus giving them an even more significant reveal and vantage point from which they can plan their next move.
Systemic Design
To help contribute to a non-linear level that would give the player many options to explore and choose their path forward, I set out to develop several different abilities and gameplay systems that would all be compatible with the game world and each have their own effect on the gameplay.
Storytelling
A city under siege
I worked in a few environmental storytelling sections to convey the feeling of a city under siege and further immerse the player into the world. A trebuchet round that has impacted in the street, body bags that are being piled and waiting to be laid to rest, and guards being on alert
Supplying the Castle
When entering the second part of the level, the player can see a barge travelling along the river. As it reaches the guard's post, it stops to be searched.
Later in the level, they will encounter another barge. The player can then jump into it to hide, thus entering the castle's basement without being detected.
By having the first barge stopped to be searched, I wanted to convey to the player that the barge carries risks.
Scripting
Teleportation
As mentioned earlier, to help contribute to a playstyle where the player has a choice on how to proceed, I designed a simple teleport system to help the player reach higher areas and teleport away from enemies.
I decided to show a VFX at the point where the player would teleport. However, in playtesting, I also noticed that the player had difficulty judging where they would land, so I decided to take the Dishonoured approach of painting a VFX directly beneath the teleport location.
Blueprints
Vision & Telekenisis
Having recently replayed Cyberpunk 2077 during planning, I was inspired to create a system that would work like the hacking ability. This would give the player choices in how to proceed with the level by enabling them to affect certain objects in the level.
To save time, I only constructed two objects: one that would make a noise that would distract the AI and one that would fall and kill anyone underneath. Due to how I made the system, I could easily construct further interactions.
To help the player find these interactable objects, I created a vision ability that outlines objects that can be affected. And while I was at it, I made the system able to detect enemies aswell
Blueprints
Assassination & Melee
To enhance the non-linear gameplay, I added a simple takedown system that allows the player to eliminate enemy obstacles. I wanted this assassination to feel satisfying, so I took an animation from the pack that stabbed in a sideways direction, added a position on the AI that the camera and mesh could lerp to, and edited the AI's animation to make him bend his neck a little.
If the AI discovers the player, I wanted them to be able to defend themselves and not instantly lose the game. For this purpose, I created a simple melee system that can block. To reward skill, I made blocking able to stun the enemy if you block just before an enemy strike lands. I added a slow-motion effect to give some extra game feel and gameplay feedback.
Blueprints
AI
I decided to make a simple AI with only a few behaviours. The most advanced behaviour is when it enters combat. Using an EQS system that generates points around the player, the AI circles the player, charging and striking them at a set interval before returning to circling the player.
Process
Pre-Prod and Reasearch
My pre-prod first consisted of narrowing down which abilities I wanted to showcase in a level scenario. So I started gathering references of abilities from different games, not only from the game I took inspiration for. I then selected three abilities that would work well with my idea of creating a non-linear level, but that could also work well with eachother
Later, while gathering level references, I researched the sizes of typical European medieval city houses. This information gave me a more accurate and believable scale for my buildings.
Blocking out
Using the information I gathered, I first set out to blockout the level. Starting at that end has always been easiest, as I can quickly get a feel for sizes and layout. I also do not tend to get stuck as much compared to trying to sketch something out on a blank piece of paper.
The first part of the level was the easiest part to blockout, as I found a good reference picture to base my design on. The second part was a bit trickier, as at first, I did not have a clear idea of what I wanted, but gathering ideas from many references, I managed to finish something that I could iterate on
Alpha Features
The task after that was to create an alpha version of my abilities so I could quickly have something to test with. I also set up a player gym where I could try them out.
My method consists of first making something that works and then adding and iterating on that until I come up with something good. But as one of my main goals in this piece was to focus on making a more holistic piece where I could get my idea across, I endeavoured to try and keep the scripts simple so that I would also have enough time to focus on making an enjoyable level.

Adding Shape Language
After the blockout and scripting part, I started refining my blockout. One of the significant improvements I made was adding shape language to my buildings to immerse the player more in a medieval town. By using basic shapes, I breathed more life into my blocks.
I then added a basic cell shader to add more depth to the houses and bring out the shapes.
Feedback and Iterations
One of the feedbacks I often got was the lack of height difference in the environment. I solved this by adding a landspace. With this, I could add more natural heights and small bumps in the streets to get the feeling of cobblestone streets.
Initially, the goal for the player was to pass through the level, as the mission goal would lie in another level. But after getting feedback that people felt more that the castle was the end goal, I changed it to the goal instead. I also changed the castle's layout to make it more interesting.
Full Walkthrough
Commentary included
Reflections
Feedback
The feedback I received on the level was extremely valuable. It helped me improve both my process and the piece even further.
However, one of my biggest mistakes was not asking for earlier feedback and playtesting. This would have helped later iterations, as my feedback included many significant changes that would have been easier to implement if discovered earlier.
One was that it was hard to understand that you could hide on the barge or that it was dangerous. Originally, I planned to have a full-level sequence of guards going onboard the barge at the first guard post and finding someone hiding on it. But I, unfortunately, never had enough time to fully focus on creating that. This led my testers to not fully understand it. If I had asked for feedback earlier, I could have done a much simpler version, with maybe some guards talking about how someone sneaked in using the barge.
Non-Linear Design
One of the most challenging parts of this piece was designing it to be non-linear. While I wanted to present the player with options to traverse and explore, I did not want to give the player choice paralysis. With the time constraint, I would also have to account for the testing I would do to make the different paths feel viable and thought out.
Initially, I had planned many more side paths and options, such as taking more side alleys and cutting through different houses. But I had to cut many extra paths to focus more on a sort of golden path while still keeping the player's options open.
Refining Scripts
While my goal was not to make fully polished scripts and gameplay abilities, there were a few scripts that I would have loved to spend a bit more time on to enhance the experience.
One thing that I was working on but decided to scrap was an add-on to the assassinations where the player could take down enemies by jumping down on them from a height. The system was, for the most part, a copy of the other assassination script. But it presented many bugs, which I would have probably been able to fix. However, due to time concerns, I decided instead to focus my energy on something else and not spend too much time on a minor part of the overall piece.
With more time, I would also have loved to polish up my mechanics, fix minor bugs, and add more feedback for actions, such as damaging an enemy during combat.
Lessons
Ultimately, I am still happy with how this piece turned out, as it led me to try new things and improve myself even more.
One area in which I improved significantly was the use of shape language to add more life and immersion to the level. By using basic shapes to add depth and detail to the buildings, I managed to create the feeling of a medieval town.
Another area where I improved was judging better when to stop working on a script or a section of the level and deciding when it is good enough. In the past, I have often ended up spending too much time on specific areas and, as such, neglecting other parts. However, while making this piece, I had a better sense of when a script could be left alone and instead shift my focus to other areas.