Hello everyone, I'm here again to discuss my progress on the project over the last two weeks. In the previous two weeks, the project hasn't been a major priority but I've still made some improvements I'm happy with. This update will focus on the combo system that I've added to the project.
What's changed?
Since the last update, I've worked on redesigning the combat system, adding game feel, and rebuilding some systems. Many of these changes to combat were done to make a more interesting interaction for combos and systems were rebuilt using features in Unreal Engine that I hadn't previously known about.
Combo System
The main focus of what was done since the last update was redesigning how the player would attack. Previously, when the player would attack the direction would actor rotation would snap to the direction of the camera, the player would continue to be able to move, and the combo would continue as long as the player hit the attack button at some point during the animation of the current attack. These areas left attacking feeling bland and having no risk or challenge to it and after looking at different combat systems from existing games I decided that I wanted to make something that would be more challenging for the player.
Implementation
The primary way attacking is implemented in the project is by using animation notify events. I've found this approach helps line up the animation with the logic driving the attack, helps layout the sequence of things happening in attacks, and simplifies the process overall.
During this redesign, I learned about animation notify states, a feature in Unreal Engine I hadn't previously known about. These notify states allowed me to have a start, update, and end event that I could add to the timeline of an animation, previously I had been using multiple notify events for a start and end. Animation notify states also let the code easily access the duration of states in the animations, which I used to easily and accurately update a UI element.
Attack Animation Timeline
Each of the attack animations has a similar-looking timeline which is split into two main sections, attack, and recovery. When the player starts to attack this animation will play and if the attack button is pressed again while the CanCombo state is active the next attack in the sequence will play. Otherwise, the animation will move into the attack recovery and during this time the player is not able to start another attack. Adding a recovery to each attack was another decision made to increase the risk of attacking.
Dealing Damage
During this redesign, I changed how actors are hit by an attack from the player. Previously it was an event that would trigger at a single point in the animation and anything overlapping the attack hitbox in that time would take damage. Having this be something that happened once per attack helped to avoid the issue of hitting the same actor more than once in an attack, but this led to an issue when changing the attack hitbox. Instead of having a static hitbox tied to the player I attached a hitbox to the sword of the player model, causing enemies to not take damage when it looked like they should when using the single event for dealing damage.
To fix this issue I create a window during each attack where an actor would take damage if it overlapped with the sword, seen by the CanDealDamage notify state in the timeline. While this now made enemies take damage when it looked like they should it also caused them to take damage multiple times during an attack. My solution to this problem was to create a list of actors that have already been hit during the current attack. This list would be searched to make sure each actor only takes damage once per attack and then the list gets emptied at the end of each damage window.
What's next?
Going forward I'm looking to continue focusing on the combat system in this project. I really enjoyed my time working on this redesign the last couple of weeks and I'm excited to see where I will take it.
Comments