Abilities can now apply secondary status effects such as buffs/debuffs, damage over time bleeds/poisons, basically whatever!
These effects can be something that executes instantly and then is gone, or it can be a status effect that persists for a period of time before dropping away.
Each ability can specify one callback function to apply effects and the callback triggers are very flexible. for instance, I can specify when/if it should trigger based on if the ability resulted in a kill, if the ability penetrated the targets armor, if it was resisted by the armor, if it was blocked, if it did block, if it was parried/did parry, was evaded/did evade, if it executed successfully, if it was interrupted, if it failed so on and so on. This uses a tag matching system rather than being hard coded so it is fully extensible allowing any tag string to be used as a trigger.
I have also completed the initial 9 abilities, one of which will now apply a bleeding effect to your target when it strikes flesh (was not defended and did penetrate armor), and one of which will now apply a stat buff to yourself to improve your next few attacks.
So, the initial set of abilities are:
Thrust
[Basic Press] (W + Lclick)
{Balanced Stance > Striking Stance}
A moderate piercing attack
Jab
[Basic Hold] (Lclick)
{Balanced Stance > Balanced Stance}
A light, fast piercing attack
Disengage
[Basic Fallback] (S + Lclick)
{Balanced Stance > Defensive Stance}
A quick backstep which will put physical distance between you and your target
Pierce
[Skillful Press] (W + Alt + Lclick)
{Balanced Stance > Balanced Stance}
A viscous piercing attack which will apply Bleeding to flesh wounds at 1 point of damage per second for 10 seconds
Slice
[Skillful Hold] (Alt + Lclick)
{Striking Stance > Striking Stance}
A moderate slashing attack
Feint
[Skillful Fallback] (S + Alt + Lclick)
{Balanced Stance > Striking Stance}
A quick ruse which leaves you ready to strike
Lunge
[Powerful Press] (W + Shift + Lclick)
{Striking Stance > Balanced Stance}
A strong piercing attack which can close the distance to your target
Slash
[Powerful Hold] (Shift + Lclick)
{Balanced Stance > Striking Stance}
A strong slashing attack
Guarded Slash
[Powerful Fallback] (S + Shift + Lclick)
{Striking Stance > Balanced Stance}
A defensive slashing attack which will apply Readiness on you increasing Agility and Focus by 2 for 5 seconds
Defensive Stance
{Hold Rclick}
Stance Evasion
{Lclick} (Requires: Defensive Stance)
As a reminder, every ability has a starting stance and an ending stance. If the character is not in the proper starting stance, the ability will be delayed while the character first transitions between stances. This transition is quite fast, but it does have a significant impact in combat.
Attacks have a 'peak' at which the hit is resolved, determining if it hits anything, if it is defended, or if it does damage etc. If a character takes damage (or otherwise interrupted) while performing an ability, but before the ability peaks/resolves, the ability is interrupted and cancelled. A forced stance transition is included in this interrupt period making for easier interrupt.
You can improve your attack speed by 'soft chaining' one ability's ending stance to your next ability's starting stance, eliminating the need for a transition.
Attacks also have a 'hit zone' or 'swing arc' an area in which the ability will connect with an enemy target. You can avoid attacks by physically moving out of the hit zone.
Generally, thrusting type attacks have a much narrower hit zone, and strike with less force, but are also faster making them harder to interrupt or defend, and making them more likely to interrupt. Swing type attacks have wider hit zones, often apply more force, but are slower and easier to interrupt or defend.
Later on as more abilities are added and learned, 'hard chains' will be available where 'follow up' abilities will have a hard requirement to immediately follow a given opener ability, as well as reactionary abilities which will have a hard requirement to immediately follow a given event trigger.
In any case, this was a fun session. It is always nice to get back to the code and knock out another system or mechanic.
Next up, I will be revisiting the AI module to clean and polish things up a bit, work out a few bugs on my issue log.
http://games.joshkirklin.com/sulium
A single player RPG featuring a branching, player driven storyline of meaningful choices and multiple endings alongside challenging active combat and intelligent AI.