Liam's Despair

Project Type Individual project
Software Used Unity
Languages C#
Project Duration 1 month

About Liam's Despair

Liam's Despair is a game I developed for my second year final project. For this project I wanted to immerse myself into the creation of a 3rd person Action RPG with an arcane magic thematic, inspired by my fanatism for games like Dark Souls and Elden Ring. I wanted to discover how to create mechanics such as a rolling, a stamina bar, respawning enemies, enemy AI...

Lore

The player steps into the shoes of an arcane warrior of the Corek faction, named Liam, who has been captured by the Elder, a rival faction of the Corek. Due to experimentation on his body, his memory has been partially erased, and he has also lost all of his powers and equipment. Once he wakes up from his rest, he will find himself in an inhospitable and ruined place, little by little he will discover where he is, what is happening in that place and why.

Attack and roll

When developing the combat mechanics, I implemented a direct transition between attack and rolling in order to smooth the animation, since going to the idle state made it feel a lot more clunky. There is a window of frames where the player can input an attack or roll before the previous animation ends so the action will occur when it finishes the current animation, This makes it more user friendly since without this feature you would have to time it perfectly. The roll mechanic also gives invecibility frames to the player. One of the things I wanted to implement in the game but didn't have the time to do so was a combo of attacks, as well as enemies being slightly stunned for a short period of time after attacks.

Attack-roll-anim

Spell casting

This wouldn't be an arcane themed RPG without the ability to cast spells. I implemented a damaging spell that launches 3 projectiles that can bounce in objects. Spell casting is limited by the number of scrolls the player has.

RuneStone resting

RuneStone resting allows the player to recover HP to full, refill the potions and to set a new respawn location. However, enemies in the level will respawn and regain full health.

Chests and healing potions

The player can find healing potions inside a chest, these heal for a portion of the player's health but require some time to cast the animation, which makes the player vulnerable to enemy attacks. Potions refill when the player rests at a runestone.

Leveling up and collecting azuri and relics

The player can obtain azuri (the currency of the game displayed in the bottom left corner of the screen) upon killing enemies, destroying objects or selling relics. This currency can be used to increase the player's level (displayed under the character icon). Leveling up increases the player's attack damage, spell damage, maximum stamina and maximum health, but doesn't heal the player for that amount.

I used Unity's Pro Builder to create all of the level shapes, as well as using Unity store assets to decorate the level and implementing some dynamic illumination with the use of blue fire candlesticks. My aim was to grant a decadent and arcane aura to the dungeon.

Level-building Level-building-2

Level Ambience

Level-ambience Level-rocks Level-objects Level-cell

The cell contains items and it is visible that the it is accesible following a secret path, this informs the player that it is worth exploring the level in depth in order to unveil the secrets and to loot all of the items.

The enemy AI is quite simple, enemies have 3 states: patrol, chase and attack. By default enemies are in the patrol state, if the player enters in the chase radius, the enemy will chase, and if the enemy catches the player and enters the attack radius, the enemy will launch an attack. If the player exits the chase radius, the enemy will go back to patrolling.

For the enemy movement I used Unity's NavMesh, I baked the level so that the enemies (who are NavMesh agents) could choose the correct paths and go through the doors and avoid objects while chasing the player.

When patrolling, enemies have a predetermined path. Each enemy has an array of waypoints (spheres in the image), once reached a certain waypoint, the enemy will go to the next one. Once all of them are iterated, the array will start all over again. If no waypoint array is provided, the enemy will choose random nearby points to do the patrol.

Enemy-waypoint

Main menu

The first screen that is shown when entering the game, from here the player can play the game, adjust the volume, see the credits or exit.

Pause menu

By pressing "Esc" the time will freeze and the pause menu will appear. The pause menu options are: resume the game, restart the level, options, go back to main menu or exit the game. Inside the options menu, the player can check the game controls, change the volume of the SFX and the music, adjust the brightness and mouse sensitivity.

Death

When the player dies he will respawn at the last RuneStone he rested at, if he has not rested at a RuneStone, he will go back to the start of the level.

Completing the level

Upon completing the level, the player can return to the main menu or exit the game.

Level-complete