top of page
Overview

Overview

Forsaken is a Dark Messiah of Might and Magic inspired FPS Project intended to showcase my capabilities within the fields of Game Design, Technical Design and Level Design.

It was developed over the course of 7 weeks (half-time) at TGA in Malmö.

Project goals

Template:

  • Establishing a First Person Template with an intricate melee combat system

  • Devising melee combat AI with enough reactivity and variance to make gameplay challenging and satisfying

  • Recreate the magic of Dark Messiah's first person melee combat as much as possible

Details

Time Spent

  • Template - 5 weeks

  • Level - 2 weeks

Engine

  • Unreal Engine 5

Software Used

  • Blender

  • Photopea & Photoshop

  • Substance Painter

  • FL Studio

  • PureRef

Level Design:

  • Creating interesting combat spaces

  • Showcasing the Template's features

  • Giving the Player some relevance within the gameworld through a simple narrative structure

Production Overview

Production overview

DishonoredPureRef.jpg

I initially sought to craft a Dishonored-style experience, with an emphasis on stealth, magical powers and first-person melee combat.

However, the project would soon become a collaboration with two other talented level designers; Jonathan Mårtensson and Hannes Wäst.

Jonathan desired a
Skyrim-style template with some basic swordplay, and I was happy to oblige, as I figured I could purpose the template for my Dishonored-style experience as well as help Jonathan craft his.

Hannes saw the potential of the Template and soon became interested in using it for his portfolio, and envisioned a level in which you play as a
Dwarf.

Throughout the course of the project, I would take requests for gameplay additions such as these and do my best to implement them.

As the project grew, it started to resemble Dark Messiah of Might and Magic more and more, and I soon decided to scrap the Dishonored approach entirely.

My focus was now on creating a solid melee combat system, with emphasis on
good feedback and an intricate enemy AI.

Urzul2.jpg
Creating the Template

Creating the Template

TemplateHeader.jpg

Player Controller

I set out to begin working on the template by formatting the Player's viewmodel animations.

This would give me a good base to build the combat on top of, as much of it would have to be formatted through the
state machinery and animation notifies.

Viewmodel.png

Viewmodel Animations

Showcase of the Player's viewmodel animations.

I wanted an animation set that was realistic and grounded, with a good semblance of weightiness without feeling clunky.
 

For the animation set, I created a variety of animations with the intent of providing functionality for:

  •  
  • Light Attacks

  • Heavy Attacks
  • Blocking/Parrying
  • Kicking

Later during development, I added animations for the crossbow, upon request.

  •  

Combat Traces

With the animations in place, I began formatting out the traces that would provide melee functionality.

With each attack animation, a series of CapsuleTraces are drawn around the Player's weapon, which
deal damage upon collision.

If a CapsuleTrace is
blocked, it induces a hit response animation on the Player. If a CapsuleTrace is overlapped, a hit animation is not triggered, but damage is still delivered.

This ensures that if the Player fights in close quarters, hitting geometry such as a wall does not cause the Player to produce a hit animation, which would interrupt combat and be unsatisfying.

State Machinery

PlayerStateMachine.jpg

This webbed mess is the State Machine driving the Player's viewmodel animations.

Showcase of the State Machine in action.

It was very important for combat to have a nice feel and flow, so emphasis on a proper State Machine was of the highest priority.

Each State and the blends inbetween are fine-tuned for optimal responsivity.

The Player is able to conduct light and heavy attacks, block, kick and fire their crossbow intuitively and satisfyingly.

I wanted as little animation locking as possible, and for Players to easily be able to queue actions and produce the expected output. The end result reached satisfactory parameters.

Directional Input

This function calculates the Player's Walk Direction, which factors into the type of heavy attack animation that gets queued.

This system emulates functionality from
Dark Messiah of Might and Magic.

DirectionCalculator.jpg

Combat Features

Block & Parry

These states provide blocking & parrying functionality.

While
"Block_Enter" is active, the parry window is open. This will mitigate all damage, and stun enemies.

When transitioned into
"Block_Idle", the Player is no longer able to parry, though the Player may still block enemies attacks and reduce damage taken.

Block_SM.png

Showcase of the Blocking & Parrying system in action.

Note how if the Player
times their block with the enemy's attack, they will parry, and stunlock the enemy for a short time.

Also note how if the Player is blocking, there is an
increased chance that the enemy will Heavy Attack. This breeches the Player's block and causes the Player to become stunlocked. Timing is essential.

Kick

The Player is able to engage their mighty foot, and kick enemies.

During combat, this will
interrupt most enemy attacks, providing a valuable window of attack for the Player as well as pushing the enemy back.

If an enemy should stand close to a
ledge, they will ragdollize and tumble to their likely doom.

 

Enemies take variable fall damage depending on their velocity upon impact.

They will
stand back up after a time, if their ragdoll's velocity is close to zero.

 

A series of Traces dictate whether an Enemy is to be ragdollized, or not.

A
backwards Trace is made, the length of which dictates the start position of multiple downward traces.

If
three or more downward traces should not return a hit, it would indicate the Enemy is in front of a gap, and they will ragdollize.

Example of a kick not producing ragdollization due to the Enemy standing too far from the edge.
 

A wall causes the backward Trace to shorten, influencing the positions of the downward Traces.

A gap is produced to showcase how this system can allow the Player to kick enemies down gaps
despite the presence of a wall.

The backwards Trace is also used to check for specific Actors, such as spike boards, which Players should be able to kick enemies into.

If a collision with such an Actor is registered, it will cause ragdollization.

Crossbow

The Player can use their crossbow to fire a bolt which lodges into geometry and inflicts a decent amount of damage.

A
sneak attack with the crossbow instantly kills an enemy.

The crossbow can help give the Player an advantage in and out of  combat.

Blood System

Supplementing the combat is a brutal and satisfying Blood System, which helps gives the combat weight and viscerality.

Blood may drip onto the floor and form blood drip decals. If subsequent blood drips onto a blood decal, it increments the frame in a blood atlas texture and eventually forms into a pool of blood. This pool of blood scales up with each additional blood drip, up to a point.

The texture atlases which produce the effect.

This system helps produce some very brutal and satisfying scenes.

Should a blood particle impact a wall, it gives the appearance of trickling down the surface.
Largely inspired by games like
Painkiller and Hitman.

Environmental Assets

Throwable Items

Throwables.jpg

Crates and Barrels can be picked up and thrown onto enemies.

Thrown items cause immediate ragdollization of Enemies, if their velocity is high enough.

This gives the Player another advantage in combat.

Barrels are destroyed on impact, rendering them a
one-use item.

Awnings

Awnings are large wooden platforms with two destructible supports.

When the supports are destroyed, the items atop of it come
tumbling down.

If an unlucky enemy is located underneath, they will be subject to the onslaught of the falling items.

 

Spike Boards

Spike boards are gratuitously satisfying elements, into which Players can kick unlucky Enemies and instantly kill them.

Upon killing an enemy, a constraint is formed with their ragdoll which causes them to stay impaled on the spike board.

 

Chandeliers

Chandeliers can be suspended sideways and fastened to a nearby attachment point.

When the
attachment point is attacked, it causes the chandelier to become physically simulated.

This will
cause heavy damage to anyone who comes into contact with it, including the Player.

Artificial Intelligence

Artificial Intelligence

Header_AI.png

It was of utmost importance to create an Enemy AI that would be responsive, dynamic and challenging.

I desired to keep my scope simple, and create only one enemy type; centered around melee combat.

 

The AI needed to be tailored to the Player's abilities, as well as environmental influences that could change the flow of the combat, and allow for combat sequences to feel emergent.

NPC mesh provided by DJmaesen under the (CC BY 4.0) license
https://sketchfab.com/3d-models/cultist-tpose-4ed6ff150848409b99ef64f6d61310a9

I keyframed out an animation set for the NPCs, intended to provide functionality for locomotion, attacking, dodging and hit reactions.

The rig used by human characters is created by me prior to beginning this project.

Showcase of the Enemy animation set.

Behavior Tree

BehaviorTree.jpg

The main Behavior Tree driving Enemy AI.

Basic States

Idle

In their idle state, NPCs can either remain stationary, or patrol along a series of patrol points. They will stop for a variable time at each patrol point before moving on to the next.

Combat

If NPCs are alerted to the Player, by either sight or sound events, or by a nearby enemy becoming combat active, they will begin to engage the Player in combat.
The NPC's combat skill dictates how quickly they spot the Player.

Search

If NPCs lose sight of the Player, they will after a while begin to search for the Player.
If the
search fails, they will return to their idle behavior.

Combat Behavior

CombatAssessor_0.jpg

The combat assessor is the main task governing an NPC's combat behavior.

This task is responsible for reading the Player's inputs and distance to the NPC, and based on these variables, producing an appropriate combat action.

An NPCs combat effectiveness is dictated by the variable "CombatSkill", and is factored into the calculations to give NPCs a variance in their combat aptitude.

CombatAssessor_1.jpg

Inside the Combat Assessor.

Action Queuing

CombatAssessor_2.jpg

This branch of the Combat Assessor is responsible for queuing combat actions, such as attacking, blocking or dodging.

The first set of checks produce some variance depending on the Player's distance from the NPC.

A second check is then done upon the
Player's current combat action.

Depending on the Player's current combat action, a variable set of
combat actions are queued by the NPC. This gives the effect of the NPC being intelligent and responsive to Player input.

Combat actions are undertaken via RNG, where an NPC's CombatSkill dictates how difficult a given roll is.
If a roll succeeds, the combat action is undertaken.

Here is an example of an NPC responding to a Player that is currently blocking.

The response is comprised of upward to three actions.

  • Primary Action
    The most viable action for the situation

  • Fallback Action 1
    The second most viable action, if the primary action should fail

  • Fallback Action 2
    The third most viable action, if the other two fail

If all actions fail to queue, the NPC remains unresponsive for that tick.

CombatAssessor_3.jpg

RNG

CombatAssessor_4.jpg

This graph dictates a given Combat Action RNG roll.
This is what's responsible for whether an enemy undertakes a specific combat action at a given time, or not. In other words, it governs their
combat effectiveness.

CombatAssessor_6.jpg

Should a Combat Action succeed, it is communicated to the NPC.

This is an example of what a "Light Attack" looks like when it is performed.

The NPC's walk speed is minimized, and an
attack animation is played.

Animation notifies dictate when sphere traces are to be drawn, which upon colliding with the Player will
induce damage.

 

The system comes together to produce a melee combat system that has variance, provides challenge, and is satisfying.

Creating the Level

Creating the Level

Lord Barruq's Manor

ScreenShot00029.jpg

Heinous red magic threaten the lands of Yoris.
At its forefront; the deranged
Lord Barruq conducts forbidden rituals inside his mountain home, attempting to manifest an evil triumph.

You are
Urzul Gormog, hailing from the land of the Orcs. In the name of justice, you set out to rid the lands of this treacherous venom, before the corruption can spread.

Overview - Floor 1

For this level, I wanted a linear layout where the key focus would be interesting combat spaces, with little in the form of branching paths or variance. This would allow me to create a satisfying level within the time constraints that I had.

Most spaces are designed to be introduced immediately as combat spaces, with little doubt as to what the intended path is toward the next key location.

Sewers & Catacombs

SewerCatacombs.jpg

The catacombs are filled with the ancient dead, residing deep beneath Lord Barruq's evil reign.

Urzul begins her journey in the sewers; the most viable approach into the manor.
 

She soon encounters one of Barruq's henchmen, and a prompt incites the Player to kick him to his doom.
 

An enemy meets his match at Urzul's hands. He has a low combat skill, allowing the Player to get a feel for combat easily.
 

Urzul braves the catacombs and ventures forth.
 

A prompt incites the Player to pick up some items blocking the path. They are taught that they may be used offensively during combat.
 

Dungeon

Dungeon.jpg

The dungeons are dark and treacherous, and Barruq's men are plentiful here.

A prompt incites the Player to destroy a few awnings. A hapless enemy is dispatched before this feature can be tested.
 

Urzul arrives at a guard's barracks, and fends off the assaulters.

At an underground intersection, a few enemies meet their match.

Torture Chamber

TortureChamber.jpg

Barruq's defiants are tortured here, as punishment for their perceived insolence.

Urzul vanquishes Barruq's men, using the environment to her advantage.

Jail

Jail.jpg

Those brave enough to defy Lord Barruq's regime are jailed here.

The henchmen are no match for Urzul; victory abound once again.

Wine Cellar

WineCellar.jpg

Barruq's evil wine is stored here, said to be made from the blood of his many victims. It's probably just rumour, though.

Urzul makes herself drunk on the fires of battle, leaving the wine where it is.

Overview - Floor 2

Overview02_1.jpg

The Player exits the underground and converges onto the Manor.
There, Lord Barruq, and the ensuing boss fight, lies in wait.

Kitchen

Kitchen.jpg

In the kitchen, an assortment of evil foods are prepared for Lord Barruq. Bunny roasts and Ortolan buntings are on the daily menu.

Urzul serves up a dish of vengeance, and slays her enemies with impunity.

Manor

Manor.jpg

The manor is where Lord Barruq makes his keep.
His reign is to be proven short-lived.

Urzul crosses the yard, facing little resistance.

Urzul battles her way through the manor, making use of a swinging chandelier to vanquish her enemies.

The time has come to end Lord Barruq's reign.
Upon her approach, a red magic barrier is erected around the ritual area, providing a spontaneous battle arena.

It's an epic battle for the ages, and with great skill and determination, Urzul manages to best the evil Lord Barruq.
 

With Lord Barruq's death, is ended the spread of corruption.

For now...

Tony Palm
2023

Full Playthrough

Full Playthrough

bottom of page