The first project made from scratch using our own engine developed within our group. Spite: Absolution is a Diablo 3 inspired action adventure game with an emphasis on fast-paced combat.
During this project I took on a variety of different tasks. I started off with creating the basic structures for creating enemies in the game and their behaviors. This was the first time we used an entity component system (EnTT to be exact) and this meant we had to rethink the way that we approached problem solving and systems. A lot of the early code I wrote ended up getting completely replaced or rewritten as I got more acquainted with EnTT and how to best make use of it.
After getting the hang of using an entity component system, the rest of the development went a lot smoother (with the usual amount of bugs along the way). For the rest of the project most of my time was spent tuning details about the enemies behavior and movement, as well as implementing animations, VFX, and more.
Basic behaviors that I worked on:
- Aggro range: Enemies have an aggro radius before they notice the player. Once noticed, the aggro variable keeps growing while the player is within range (growing faster the closer the player is) until it is full and enemies switch to their attack behavior.
- Stand & Attack: Once enemies are in range they will attack the player. When the attack is done they will take a couple of moments before attacking or chasing the player again. This was partially to stop enemies from gliding around while doing their attack animation, but also to let players dodge attacks and reposition to a better location.
- Flee: Ranged enemies will keep a certain distance from the player and attack. Should the player get too close the enemy will attempt to flee in the opposite direction (provided the pathfinding has found a path)
The last couple of weeks of development I took over responsibility for programming a scripted event that was part of the requirement for our grade. We had planned to make a bridge that would collapse after the player started walking on it. A very basic event but very fun to develop, adding in little details here and there such as camera shake, hiding the UI, and adjusting the timing of the animation so that it looks like you barely made it through really ended up making it quite a cool little highlight, especially considering the very short amount of time I had to work on it.