The player character and Enemy AI each have their own custom ability classes included as part of the Combat System. All the gameplay code for the player’s gameplay abilities are created inside various different ability classes. Some Combat Abilities have properties that can be used to adjust various things for each ability.
Every one of the default player abilities can be overridden in child classes and given modified or customized functionality as needed by user created classes & user written code.
Setting Player Ability Montages
By default the animation montage for the player abilities are set through the Combat Style data asset. The montages are retrieved from the player’s current combat style. However, this is optional. If you want to set the animation montage for the ability in the ability class itself, a new property for an animation montage can easily be added & the “GetAbilityMontage” function can be overridden to get the montage from the montage variable instead of using the combat style.
Player Ability Hierarchy
Almost all player combat abilities are a child of GA_CombatAbility. Some player combat abilities also have their own hierarchy. For example, GA_RangedAttack and GA_PlayerAimAbility both inherit from the same base class, GA_PlayerRanged.
While all player combat abilities inherit from the GA_CombatAbility base class, there is no requirement for player abilities to derive from the GA_CombatAbility class. Any ability that is a child of BP_AshenGameplayAbility can be gratned to the player and used. So, the user of the framework can decide for themselves if their gameplay abilities need to derive from BP_AshenGameplayAbility or derive from any other ability, or if they want to create their own base that is derived from BP_AshenGameplayAbility.