Project Description

In this project, I created a souls like combat boss rush.

The combat had a lot of inspiration from Lies of P and Sekiro where timing of parrying was key in order for the survival.

In order to make the game more re-playable and competitive, a ranking system and skill tree was added. Killing a boss results in a skill point which can be spent in order to try new combinations to beat your previous rank and time.

Game feel and feedback

Due to this being a souls like centred around parrying, the parrying would have to feel good and have feedback to reward the player for a perfect parry. In order to achieve this, I used different systems together to notify the player with what was happening. This included Niagara particle effects, audio, camera shake, and animations. 

Due to being limited with animations, there were a few things that I had to compromise on, for instance the player getting hit. Having feedback where the player's body would animate getting hit would be really good feedback and something I would like to add given the correct animations.

Image above showing feedback sparks on a perfect parry.

AI

In order to create the AI of the enemy I decided to use behaviour trees. This taught be the fundamentals of how AI works in unreal, from blackboards, to creating custom tasks and decorators.

Image above showing overview of one of the bosses behaviour trees.

I am happy with the end result of the AI and the amount learnt from this. I would like to expand to make the AI more dynamic and responsive to the player, and with the knowledge gained from this, I feel like I can look at implementing more complex AI in a future project with knowing the fundamentals and the process.

Development Approach

This project was created using weekly sprints. Before starting with the programming, the game was broken down into a MVP, core mechanics and desired outcomes. Using this breakdown I created a weekly to-do list to get the final game done. Due to being unfamiliar with a few things, I over-budgeted with some time to add a security layer. I am glad I did this as this time was used for debugging, correcting and adding some extra features.

Overall, I adhered to this development plan pretty closely; however, whilst developing I noticed that there were some key features I forgot to add to the development plan that would make the game feel better - example a camera lock on.

Additionally, during development you start with getting some challenges, which meant some compromises had to be made, and this is where I would deviate from the plan slightly. For example, animation limitations caused a few issues, resulting in limited movesets. Due to this limitation I was not able to try add some fancy moves to the boss fights as well as not do custom behaviour such as winding up for an attack and then pausing, trying to bait the player to block too early.

If I were to do the development plan again, I would definitely restructure/reorder it. All the work in the beginning few weeks was all abstract and untestable. Having AI but no combat to test the AI with resulted with a lot of "basic AI completed, to be iterated on later when moves can be tested". Therefore, in future I will keep in mind having core mechanics completed first, then game feel and experience after that.

Please press the button above if you would like to have a look at the development plan of the game.

Playtesting

As per my development plan, playtesting was done through out the process. Overall this helped find a few bugs. For example, I let the player block during attacks, this caused a bug where the player could not move due to it cancelling the attack animation, which resulted in the "End attack" animation notifier to not be called.

Additionally, this helped balance the game. Some testing sessions found the game too challenging due to the fact that some of the movesets where not predictable due to the wind up not being visible and attack patterns not being able to be predicted. In order to counter this I tried to ensure all moves for current boss do not start in the same "quarter", for instance, if the boss starts an attack from above their right shoulder, this would be the only move that would take place from there, meaning the challenge then resulted to learning the timing and amounts of parries per attack. Additionally, for the larger combo moves I used an audio que and enemy overlay.

Image showing enemy overlay when starting a combo.

Build

A link to download a build if you would like to try :)