undying logo.png

INTRODUCTION

You have awoken inside a mysterious cave on a mountain. Exiting the cave you find yourself at the outskirts of a small town that seems to have been abandoned for hundreds of years.

SPECIFICATIONS

  • Action Roleplaying

  • Inspired by Dark Souls

  • Unreal Engine 4, Maya, GIMP

  • 4 weeks working time

  • AdvancedMagicFX12-13, BossyEnemy, Brushify, Cemetery Vol1, DarkForest, DeadHillsLandscape, Hack And Slash FX, Infinity Blade Packages, Medieval Dungeon, ModularFantasyHouse, NaturePackage, WinterForestSet, Adobe Mixamo, Sound from freesound.com, Final boss music by hendrotriyo.

GOALS

  • Design a level that promotes trial and error and learning how to overcome without being unfair.

  • Create a believable environment.

  • Create a fully playable experience.

  • Design surprise encounters with enemies so that the player is more careful when exploring.

FEATURES

There are two main resources for the player to consider. Health that if reaches zero the player will return to the last checkpoint and stamina that links into almost everything the player can do. Stamina refills when the player is not performing any actions.

 

The main attack the player has is swinging their sword. They do this in a combo of two dealing more damage on the second attack. Attacking forces the player to stand in place and makes them more receptive to being hit by enemies. It is giving a sense of risk versus reward. Attacking also consumes stamina so you can not attack forever without replenishing it.

 

The player can block with their shield. Holding up the shield prevents stamina regeneration and every hit blocked consumes stamina as well. This is a safe way to avoid damage but not very sustainable.

 

Rolling/dodging is where the player rolls on the ground in an attempt to dodge the enemy attack costing a small portion of stamina. They are also immune for a very small period of time in the middle of the dodge. This is the more sustainable approach to avoiding damage but is also harder to pull off.

 

Sprinting consumes a large amount of stamina. It's good for covering a large distance quickly or reposition at the cost of not being able to perform any other actions for a short while.

 

The player has three charges of healing. The only way to replenish the healing charges is by visiting a checkpoint or dying.

 

Dying is more of a feature in this game rather than a failure. Every time the player visits a checkpoint or dies, all the enemies in the level respawn, making the environment more unforgiving to the player and learning by dying to things is a big part of this game.

attack

dodge

block

Player character

As I took inspiration from Dark Souls I wanted my player character to behave and feel close to my reference. A challenge was to give weight to the character and making decisions such as attacking and dodging meaningful by locking the player into the animation while not making the character feel clunky and unresponsive. I tackled this by letting the player be able to still control the rotation of the character while swinging. As for the dodge the player can control the rotation just at the end of the dodge. The decision to not have a jump came from playing Dark Souls games and finding that being able to jump did not add much to the gameplay or level design. Instead I put more effort into the dodge roll adding favor such as rolling into destructible objects and making it feel good to use.

Stamina system

The stamina system connects to almost all player features in Undying. Finding a balance  between not letting the player attack forever and not having the system feeling like a burden, I had to do a lot of tweaking to make it feel good. 

When the player performs an action the stamina drains an x amount. After a short delay the stamina will start regenerating if the player does not do another action. If the player depletes the stamina fully, it will take slightly longer for it to fill up to full.

Player character

Stamina System Blueprint (in player character

Respawn system

I made a system that if the player dies it respawns the player at the last checkpoint they have been to. It also removes all the enemies in the level and respawns them completely fresh. If the player touches a checkpoint it also respawns all the enemies in the level but gives all the healing charges back. This way, if the player gets unlucky and has to spend all their healing on the first few enemies they can run back to the checkpoint and get more healing charges at the cost of having to fight the enemies again.

respawn

Respawn function in player character

ENemy Spawner blueprint

Checkpoint blueprint

OVERALL DESIGN

I decided to go with a quite linear approach with small exceptions to the level design due to wanting to focus on setting up interesting enemy encounters. As dying is a big part of the game I decided to place enemies in hidden positions that would flank the player in surprising ways. This way the first time the player enters the area they might get surprised and die but the second time they know exactly where the enemies are and can handle the encounter with more knowledge.

I have unexpected events such as the floor breaking suddenly under the player ending up in the middle of a couple of enemies for the same reason.

 

Standard enemies move slow but have fast attack animations. I did this to give the player a chance to use positional advantage and promote dodge rolling. Just trying to attack the enemy without dodging their attack first will get you killed very fast.

PROCESS

I spent the first two days figuring out what kind of blueprints I would need in this project and created a test level for them.

Then I spent twelve days making all the blueprints in a functional state with placeholder meshes. A decent amount of that time was spent on the player and the boss as I found those to be the most important for the game.

 

On day 13 I moved on to making a very rough sketch on paper just roughly outlining the areas that I wanted and where.

 

I decided what asset packs that would be needed to complete my level in a separate project that I later migrated over to the main project.

 

I started with a rough blockout and did the landscape. This is also where I started placing the enemies in, running through the level for the first time seeing what works and what did not. I did plenty of playtests here to adjust what I felt was too unfair or too easy.

 

During the last week I replaced all the placeholders and blockout meshes with the proper meshes. I also added sound and visual effects to all the blueprints. I spent time squashing as many bugs as I could find. I have also adjusted some values on enemies and the player. I added a faster variation to the standard enemy to add more of a challenge to the later stages of the level.

CHALLENGES

During early playtests I noticed that every area looked different but did not feel different. I solved this by adding a twist to every area. 

 

  • The village is a mix of open areas and small indoor areas. 

  • The swamp causes the player to move slower in the water while having fast enemies that can catch you while being slowed down.

  • The castle has very narrow rooms not giving much space to work with when fighting a mix of slow and fast enemies. This forced the player to approach every area in a different way.

BOSS DESIGN

When I started designing the boss I looked at different Dark Souls boss fights for inspiration. I wanted the same big heavy feel to the boss as they have. Every attack the boss makes needs to feel deadly. I made this happen by finding fitting sounds for every attack.

Then I needed a way to keep the player from being able to just dodge the attack from the boss and be able to defeat him so quickly. I accomplished this by spawning normal enemies around the boss every 15 seconds. This kept the player from being able to stand close to the boss for too long without getting swarmed and hit by them.

As the fight progressed, a new problem arose. Eventually there were way too many normal enemies and it made it impossible to get close to the boss. 

This was solved by the boss's charge ability, which he uses when the player is too far away and it also kills all enemies that get hit by it.

This created an interesting dynamic between the player being close to the boss and eventually having to run away and use the boss's own ability to create space to be able to go in for the attack again.

At 50% and 25% I decided to add a projectile mechanic to surprise the player and keep the fight from being repetitive. This attack makes the boss stop for a few seconds baiting the player into running in for the attack. Then the boss unleashes a barrage of explosive projectiles at the player. Most people fighting the boss for the first time will die to this. The correct way to deal with this is to sprint around the room until the barrage is over.

What I ended up with is an interesting boss fight that always keeps the player on their toes.

swing

charge

BOSS BLUEPRINT

The boss’s mechanics are either based on timers that loop or depend on where the player is relative to the boss.

Abilities triggers:

  • Walking towards the player (if no abilities are being used / player is not in swing range)

  • Swinging (if no abilities are being used / player is in swing range)

  • Charge (On an 8 second timer checking if the player is not in swing range)

  • Spawn enemies (on a 15 second timer)

  • Casting Projectiles (At 50% and 25% health when not using any other ability)

Boss enemy Blueprint

projectiles

Boss Trigger blueprint

Walkthrough

The MOUNTAIN CAVE

The player starts in a mysterious cave surrounded by darkness with a large staircase leading up to a big door. I designed it this way to give the next area a “wow-moment” impression.

THE FOREST

I made this area linear to introduce the player to the basics of the game. In the forest I introduce the player to the combat where they only needs to fight one enemy at a time. I increase the challenge and they will have to fight two at once and then three. This is also where I have a hidden enemy for the first time. If the player drops down a ledge, there will be a hidden enemy behind them, sneaking up on them.

VILLAGE PART 1

In the village I ramp up the number of enemies that the player has to fight, but also give the player ample space to fight in. There are some enemies hidden between the buildings just to keep the player on their toes.

VILLAGE PART 2

This part of the village mostly takes place indoors. Here most fights occur in rooms with a destructible environment such as tables, chairs and crates.

In one room there is a floor that breaks under the player’s feet. They will land in a smaller room surrounded by three zombies.

This is designed to be a very scary moment for the player but since the game is constructed around dying, the next time the player comes to the same area they will know exactly what will happen and can deal with the scenario accordingly.

The SWAMP

The player has to find the two flames and bring them to the door leading into the castle.

In the swamp I introduce a new fast moving type of enemy. The swamp water also slows the player so they have to make sure to stay out of it when attracting this new enemy.

The CASTLE

I made this area narrow and with a lot of hidden enemies so the player has to be very aware of their surroundings. Entering every room should feel like a risk of being flanked and surrounded.

the BOSS ROOM

This room is large and open which was required to make the boss fight to be able to happen. Entering the room should feel like an epic moment and as soon as the player engages the boss the heroic music starts playing. 

Once the boss reaches 0 health an ending cinematic plays.