Greatsword Heavy

Brute

The brute is an enemy with a high health pool and large powerful attacks. To compensate for the damage output and health pool the enemy has a slower tempo and longer recovery times. The attacks can be easy to avoid due to their slow nature but are very punishing when the player makes mistakes due to raw power.

StateTree

Brute enemy StateTree showing Idle, Combat, Overhead, Spin, Gap, Approach, and Disengage states with their distance conditions

Enemy Decisioning

Overhead

The default close range attack for this enemy, with the shortest cooldown.

Spin

A close to mid-range attack used when Overhead is on cooldown, or the player is just out of range of Overhead.

Gap

Used to reduce distance between the enemy and the player.

Gap and Spin have similar animations, and a small overlap in when the attacks can trigger. This introduces a need for the player to be able to distinguish which attack the enemy is actually going to use based on windup and follow-through — i.e. will this be a 2 stage or 3 stage attack.

Implemented and Planned Iterations

Implemented

The Brute would often not use any of his longer-range attacks during his run animation. Causing him to only use the first 2 attacks and only perform them after he finished approaching the player.

To mitigate this issue I restructured the StateTrees of all of the enemy AI. I used to have Idle, Chase, Recovery, and Attack states, with Attack having the list of attacks the enemy had. I fixed the issue by having an Idle state and a Combat state with Approach, Disengage, and the various attacks as children. I also tweaked the placement of conditions and transitions on Combat and Approach to achieve a more natural interaction.

Planned

For future iterations of the Brute I would like to add an enraged state relative to his health. The enrage state would allow his attacks to create AOEs and have a reduced disengage period.

The gap close and spin attacks would greatly benefit from root motion warping to stick to the player even if they are trying to create space. I believe testing out a condition where the player remains at a distance for a set amount of time may be beneficial for the Gap attack as well.

See the Brute animation breakdown