This page will give you the information necessary to set up combo steps for weapons and how the individual parameters of each weapon are set.
This table contains the majority of the data for how an attack with a weapon works for a humanoid character. Everything from animation, combo linking, damage, stamina cost, and blocking interactions are controlled here.
Row Name:
Name or number associated with this combo step. This is referenced by ComboStepNext to determine which action to perform based on the player's input.
ComboInput:
The action input pressed by the player.
PrimaryLight - Light attack. Left click by default on PC.
PrimaryHeavy - Heavy attack or Special attack. Right click by default on PC.
Offhand - Offhand. Left Ctrl by default on PC.
WeaponComboLead:
Once the action button is pressed, we search for the row that matches the weapon the player is using. This list is populated by the E_WeaponComboType Enum and is also referenced in the WeaponUseTable and on a weapon item's VisualObject under the WeaponComboType property.
WeaponComboSupport:
The offhand weapon type that must be present in order to use this combo row. Defaults to None for cases where the offhand weapon does not matter. A match here takes priority over another row which has None specified.
ComboOpener:
Flags an attack as a combo opener.
NOTE:
A combo opener cannot be specified as a ComboStepNext by another combo row.
ComboFinisher:
Marks a combo row as a finisher for purposes of perk functionality.
ComboStepNext:
The next combo row that should be selected based on the input received from the player. Combo inputs are only valid during a BP_ComboWindow or in the attack montage. While a player
can
successfully input an attack during a BP_QueueWindow, that will not continue the combo.
ComboMontage:
The animation montage to play when this combo row is selected.
ComboMontageWater:
The animation montage to play when this combo row is selected and the player is swimming. If a montage is not specified, attacking is not possible while swimming.
KnockbackClass:
The Knockback type to apply to a target hit by this attack.
BlockerHitConfirmKnockbackClass:
The Knockback type to apply to a target who blocks this attack.
BlockReboundKnockbackClass:
The Knockback type to apply to the attacker when this attack is blocked. Leaving this entry empty will cause an attacker to not rebound off shields and be able to continue attacking a blocking character uninterrupted.
ShieldBreakKnockbackClass:
The Knockback type to apply to a target whose shield breaks as a result of this attack.
BP_Knockback_Base
This is the data object that all knockbacks use. Within this object, the parameters listed below can be specified to create custom knockback effects.
NOTE:
A high knockback distance can push a target out of range of follow-up attacks.
DamageModifiers:
Specifies multipliers on the amount of damage inflicted by this attack based on the damage type of the attack. DmgTypeHealth_BP is health damage, which is typically used here. Modifiers can be specified for when the attack hits or is blocked. This is important because blocked damage directly impacts how much stamina it takes to block an attack.
ComboStaminaCostModifier:
A multiplier on the stamina cost of this attack.
ComboEffects:
Buff effects applied when this attack deals damage to an enemy. Potency can be specified to create custom behavior within the buff effect.
BlockIgnore:
Setting this to true will cause the attack to pass through shields and deal damage to the target as if they were not blocking.
BlockDeflectionIgnore:
Setting this to true will cause an attacker to not rebound off shields and be able to continue attacking a blocking character uninterrupted.
CanQueueSameCombo:
Specifies if the same input can be queued to advance the combo to its next step.
JourneyTrigger:
Specifies a journey step to award when performing this combo row. For example, HeavyFinisher
AutoFace:
Specifies if this attack will cause you to turn to face a target.
CanTargetLock:
Specifies if target locking is active or can be activated during this attack.
ConditionTagQuery:
Tag conditions on the attacker that must be met in order to execute this combo row. For example, sprint attacks require the sprint tag.
ForceExecution:
Used to force an NPC to link combo rows together.
MinAttackRangeOverride / MaxAttackRangeOverride:
Old data. Always set to -1.
SpellTemplateID:
Used to specify how a combo row handles spell casting. This can allow a weapon to cast a spell directly from one of its combo inputs!
-1 = ignore. 0 = query weapon item for what spell to cast. >0 = template ID of spell to cast (MUST be either known or has CanBeTransient=true)
This table contains additional weapon combat data for how different weapon types can be used. Held inputs, equip and unequip animations, and usability in water are all handled here.
Row Name:
The name of the weapon type as defined by the weapon's WeaponComboType in the weapon item's VisualObject in the ItemTable. These map to the same names listed in E_WeaponComboType.
ValidCrossInput / ValidHeldInput:
This determines if a weapon has a valid held input that the player can release, or press another action to unleash. For example, the Katana specifies OffhandSpecial as the held input, with MainhandBasic as the release input which results in the player holding Offhand input and dashing forward to attack by pressing Light attack.
CanCancelSelf indicates if the act of releasing the held input will cancel the held action. For example, with a bow, holding right click and then releasing it will not cause an arrow to be fired.
OverrideInput:
This is used to override input values to allow for different control configurations on a gamepad. For example, on bows, this lets a gamepad user aim and fire the bow more comfortably by swapping which inputs lead to which actions.
ItemSwap:
The montage to play when equipping the weapon.
CanUseWhenMounted / CanUseInWaterWhenMounted:
Whether the weapon in question can be unsheathed and used while swimming.
SheathedWeaponSocket:
The socket where the weapon is attached when sheathed on the character model.
ItemUnequipOverride:
The montage to play when a weapon is unequipped. If empty, it will default to playing the
ItemSwap
montage backwards.
This section will go over how to set up a weapon to use the data specified in DT_ComboRules and WeaponUseTable.
For most weapons, this is set to BPGameItemWeapon. This blueprint contains all the basic data that is shared amongst all weapon types such as repairing and icon overlays for modifiers and fittings. For custom weapons, this also controls any debuffs that get applied when this weapon deals damage. For example, this Axe of the Grey Ones uses BPGameItemWeapon_GenericBleed.
Within this blueprint we can find the Buff section under the Weapons category and specify a buff class to apply, and its potency.
The next important object to specify is the Visual Object. Contrary to its name, this object contains much much more than just visuals.
Equipment Rules:
This specifies if a given item occupies one hand, or both.
Primary: Main hand
Great: Both hands
Secondary: Off hand (torches, bindings, shields, etc)
Collision Size Multiplier:
Increases the hitbox of the weapon by the specified scalars.
Weapon Trails:
The different weapon trail effects that are applied when a trail type is called by number by an animation montage notify.
Weapon Camera Mode:
Specifies if the camera should change when this weapon is equipped. Used mostly for bows.
Weapon Combo Type:
This specifies what combo type this weapon uses when wielded. This is used in the WeaponUseTable and DT_ComboRules. This is how a weapon knows which animations and attacks to use.
Anim Package:
The anim package parameters determine extra animation data for idles, jumping, crouching, and so on.
Additional data:
Some additional data stored in the visual object is the equip socket the weapon is attached to when wielded and also if the weapon can be used in water.
Specific Collision Overrides:
Within the weapon visual object, there is a function “GetSpecificCollision.” This can be used to override the size of the hitbox based on specific attacks. For example, if a weapon has a kick attack versus attacking with the blade of the weapon. One handed axes have several overrides.
These overrides are referenced in the BP_CollisionNotifyState of an animation montage
Equip Location
This specifies which slot the weapon occupies.
Stat Based Damage Type ID
Finds a row from the DataTable ItemStatBasedDamageModifier to determine how this particular weapon scales based on player stats.
The modifier value specified here is a multiplier on how much bonus damage the weapon gets per point of the specified attribute. In BP_AttributeSystem the variable BonusDamageMeleePercentagePerAttribute defaults to 0.05 which equates to a 5% damage increase per point of a relevant attribute if the DamageModifierValue in this table is set to 1, or 0.5% when the value is set to 0.1.
Here is a list of the different player attributes and their Stat ID.
Vitality - 14
Grit - 15
Expertise - 16
Strength - 17
Agility - 19
Authority - 27
Corrupted Authority - 28
Corrupted Vitality - 29
Corrupted Strength - 30
Weapon Type
Determines pickup animations to use from PickupAnimationMapperTable
Determines if a player has a Sorcery Focus equipped.
Determines resources gathered by tools.
Determines if a weapon is ranged or melee.
Determines if equipping a weapon should force third person camera.
Weapon Arche Type
Used to evaluate movement types for ranged or melee combat, or if an item can accept modifications. For example, ammunition and shield archetype items cannot accept modifications. This is also used for NPCs to determine what types of items they are wielding and thus determine how they should behave in combat with them. NPCs also use this to determine what combo presets they can use from the
ComboPresetsTable
though if none is found, they will default back to their presets as defined in their spawn data.
In addition this also determines:
How a weapon appears in a display rack.
If an item can be added to a ranged weapon as ammo. (Must be of type ammunition)
If an item should visually sheath on the character’s body.
This section will cover the information present in attack montages and how they are used and put together.
BP_HyperArmorWindow
Specifies a window of time during the animation in which the character is immune to knockback effects and thus cannot be interrupted by damage.
BP_CapsuleSlideWindow
Enables a root motion lock when the character collides with another character. This is meant to prevent instances of the character sliding past their target during an attack.
BP_CancelDodgeWindow
Specifies a window of time during the animation in which the player can press the dodge key in order to interrupt the attack immediately.
BP_CancelMoveWindow
Specifies a window of time during the animation in which the player can move to cancel the animation.
BP_CancelAttackWindow
Specifies a window of time during the animation in which the player can cancel the animation with another attack.
BP_ComboWindow
Specifies a window of time during the animation in which the player can press additional attack inputs and have them queued up for execution of the next combo step as soon as possible.
BP_QueueWindow
Specifies a window of time during the animation in which the player’s attack input will be queued up for a new combo rather than continuing the existing combo. This can overlap with the combo window and the combo window takes priority. Some overlap is desirable as to not drop any inputs from the player.
BP_ComboAdvanceWindow
Specifies a window of time during the animation in which the player will execute the next attack in the combo. If an input was already queued from a ComboWindow, that input will execute as soon as the ComboAdvanceWindow begins. This window is extremely important as it defines the earliest point in which an attack can be linked into another attack.
This window is for PLAYERS ONLY! Any NPC executing attacks will ignore this anim notify. This notify specifies a window of time during the animation in which the player’s weapon collision is active and able to deal damage. The collision volume surrounding the weapon is defined on the weapon and has some override options in the details panel here:
Some special cases exist for weapons such as daggers or when dual wielding weapons. In both cases, an additional CollisionNotifyState must exist to specify collision for the weapon in the character’s off hand. For daggers, since they are technically one weapon, the OverrideTargetSocket is altered in order to apply the collision to the character’s off hand. In this case it is set to Socket_Secondary.
In the case of an actual offhand weapon attack, such as when the character is wielding a throwing axe, the IsOffHand bool is set to true and that weapon’s collision is then used.
This event triggers a collision sweep for targets and assigns damage to them. This is used by NPCs for delivering damage. This can also be used by players, so it is very important to check the IsHumanoid box to true if the attack can be used by players, otherwise the attack will hit twice - once for SweepAttack and once for CollisonNotifyState.
Multiple SweepAttacks can be present in a montage in order to cover large areas, or to trigger multiple hits. When using multiple SweepAttacks to cover an area, make sure the SweepAttackGroup stat on each sweep attack is set to be the same. A target can only be hit by one attack from the same attack group. The final BP_SweepAttack in a SweepAttackGroup must have the ClearAttackGroups boolean set to true to free up that group ID for other attacks.
If you want all of your SweepAttacks to always hit and deal damage, set the SweepAttackGroup to 0 to bypass all grouping checks.
For offhand attacks, a new SweepAttack must exist for each hand that deals damage and the IsOffHand boolean must be set to true for the attack that originates from the character’s left hand. Unlike CollisionNotifyStates, SweepAttacks don’t reference the attacker’s weapon, so even dagger offhand strikes must use the IsOffHand boolean.
BP_WeaponTrailNotifyState
There are several of these notify states - one for each weapon trail type:
Normal - used for light attacks
Heavy - used for heavy attacks with no other modifier
Sunder - used for attacks which apply the sunder effect
Smash - used for attacks which bypass shields
Bleed - used for attacks which apply the bleed effect
Cripple - used for attacks which apply the cripple effect
In addition to picking the correct notify, the correct trail type and sockets must be selected as well to ensure the weapon trail functions properly. NOTE: For dual weapon attacks, two notifies must exist - one for each weapon.
The Trail Particle Index values map as follows:
Normal - 0 (called Distort in the dropdown)
Heavy - 1
Sunder - 2
Smash - 3
Cripple - 4
Bleed - 5 (called Inky in the dropdown)
This section will cover bows and their charging and firing components. Below is the animation montage for the charged shot from the bow.
BP_FieldOfViewChangeForDuration
This notify sets the players field of view while charging their shot.
BP_SetChargeHold
This notify causes the player to enter the ChargeHold substate and will drain their stamina continually until the ChargeHold ends.
BP_PowerCharge
This BP causes the damage of the outgoing attack to be multiplied by a value specified by a curve based on how long the attack is held. For bows, this is specified in
Curve_BowPowerCharge
and for katanas it is in
Curve_KatanaPowerCharge
. The value in the curve is increased by 1, and then acts as a direct multiplier on the outgoing damage value.
BP_ProjectileAttack
Launches the actual projectile from the bow after gathering all relevant data.