How to Add New Character Buff

Purpose and Scope

This guide explains how to add a new character buff item that the player can use from the inventory.

Use this workflow when the buff: — is an item of type World.Items.Types.Buff — belongs to one of the character buff categories — activates a CharacterState on the player — is handled by BP_BuffComponent — must work through the State System and DT_CharacterStates

This guide is for character buffs only.

Do not use this workflow for: — melee weapon buffs placed into the weapon buff slot — melee attack debuffs applied through ANS_CC_Debuffs

Supported buff categories

Character buffs use one of these categories: — HealthArmorExperienceDamage

When creating the item in Item Assistant, you choose the buff category there. This category must match the gameplay tag namespace and the logic you later add in BP_BuffComponent.

Core idea

A character buff in this project is not just an inventory item. It is a full chain: 1. Create the item as Buff in Item Assistant. 2. Generate the item row and data assets. 3. Create a new CharacterStates.Buffs... gameplay tag. 4. Assign that tag in the buff clarification asset. 5. Register the state in DT_CharacterStates. 6. Add the tag to BP_BuffComponent. 7. Implement activation and deactivation logic in the state solvers.

After that, the buff becomes a normal State System participant and other gameplay logic can react to it.

Step 1. Create the buff in Item Assistant

Open Item Assistant and create a new item.

Set: — Item Type = BuffBuff Category = one of: — HealthArmorExperienceDamage

Then fill: — all General fields — all Inventory fields

After that, the tool creates the required data assets and adds a new row to the item database: — item data asset — inventory data asset — clarification data asset — new row in DT_ItemData

Step 2. Create the gameplay tag

Open Project Settings and add a new gameplay tag for the buff.

Use the correct namespace based on the buff category: — CharacterStates.Buffs.Armor.<BuffName>CharacterStates.Buffs.Damage.<BuffName>CharacterStates.Buffs.Experience.<BuffName>CharacterStates.Buffs.Health.<BuffName>

Examples: — CharacterStates.Buffs.Armor.ExtraArmorCharacterStates.Buffs.Damage.BerserkCharacterStates.Buffs.Experience.DoubleXPCharacterStates.Buffs.Health.ExtraLife

The category in the tag must match the category chosen in Item Assistant.

Step 3. Fill the clarification asset

Open the created BP_Buff_ClarData asset for the new buff.

Fill at least: — Character TagActions After Using If Buff In UseActions After Using If Buff Not In UseRemove From Inventory After Deactivating, if needed by design

In Character Tag, set the gameplay tag created in Project Settings.

Example: — CharacterStates.Buffs.Health.ExtraLife

The clarification asset is what connects the inventory buff item to the runtime State System.

Step 4. Register the state in DT_CharacterStates

Open DT_CharacterStates.

Create a new character state row for the buff tag and fill all required fields for that state.

At this stage, define: — which components participate in the state logic — which components validate or react to the state — any other required fields used by your project setup for this state

This step is required because buff activation goes through the shared State System, and the mediator validates states against DT_CharacterStates.

Step 5. Add the tag to BP_BuffComponent HandleState

Open BP_BuffComponent.

Find the parameter: — HandleState

Add the new gameplay tag there.

This tells BP_BuffComponent that it must handle this state as one of its supported buff states. Without this, the component will not participate correctly in state-driven buff logic.

Step 6. Add activation logic

In BP_BuffComponent, open: — Activate State Solver

Find the Switch node used for buff tags.

Add the new gameplay tag to the switch and call: — Activate BF On Character

This is the activation entry for the new character buff. When the state becomes active, the component will route the new buff through this branch.

Step 7. Add deactivation logic

In BP_BuffComponent, open: — Deactivate State Solver

Find the Switch node used for buff tags.

Add the new gameplay tag to the switch and call: — Deactivate BF

This ensures the buff is removed correctly when it expires, is toggled off, or is otherwise deactivated by gameplay logic.

Step 8. Test the buff in game

After setup, test the full flow: 1. Obtain the new buff item. 2. Use it from the inventory. 3. Verify that the item resolves to the correct clarification asset. 4. Verify that the Character Tag is activated. 5. Verify that DT_CharacterStates allows the state. 6. Verify that BP_BuffComponent catches the tag through HandleState. 7. Verify that Activate State Solver runs. 8. Verify that deactivation also works through Deactivate State Solver.

A correctly configured character buff should behave as a normal runtime state, not as a one-off isolated item effect.

Sanity check

Before considering the buff finished, verify all of the following: — the item was created through Item Assistant — Item Type is BuffBuff Category is correct — General and Inventory data are filled — the generated row exists in DT_ItemData — the gameplay tag exists in Project Settings — the tag uses the correct namespace for its category — the same tag is assigned in BP_Buff_ClarData — the state exists in DT_CharacterStates — the tag was added to BP_BuffComponent.HandleStateActivate State Solver contains the new tag and calls Activate BF On CharacterDeactivate State Solver contains the new tag and calls Deactivate BF

Example: Extra Life

Extra Life is a Health-category character buff. Its tag is: — CharacterStates.Buffs.Health.ExtraLife

This buff works differently from simple stat buffs. Instead of only modifying a number, it spawns an actor behind the player that absorbs incoming damage. While that spawned actor still has HP, it protects the player as additional health. The buff can end either when the actor runs out of HP or when the player removes the buff manually.

To support such a buff, the project uses custom logic in: — BP_BuffComponentBPI BC TryToReduceDamageByBuffsTryToApplyDamageOnBuffExtraLife

During incoming damage processing, the project first tries to reduce damage through armor and buffs. In the branch for Health-category buff reduction, TryToApplyDamageOnBuffExtraLife contains a switch that currently handles: — CharacterStates.Buffs.Health.ExtraLife

If the player has CharacterStates.Buffs.Health.ExtraLife, the function calculates how much damage should be redirected to the spawned buff actor and how much, if any, should still reach the player.

If the player has a different Health buff, you can add your own calculation rules there.

If none of the listed Health buffs are active, the incoming damage passes through without Health-buff reduction.

Notes for custom Health buffs

Health-category buffs are not all required to behave like Extra Life.

You can create another Health buff with its own rules, but if it must affect damage reduction, you also need to extend the relevant logic in BP_BuffComponent, especially in the branch that processes Health-type buff mitigation.

Otherwise, the new tag may activate correctly as a state but will not change incoming damage behavior.