Statuses¶
A status is a temporary buff or debuff applied to a fighter. Statuses can change stats, restrict actions, deal damage over time, modify attacks, or provide a shield.
Status types¶
Buffs¶
- StatsUp: increases one or more stats.
- Utility: provides a shield.
- AttackModifier: adds lifesteal or a double attack.
Debuffs¶
- StatsDown: reduces one or more stats.
- Control: skips a fighter's turn or active skill.
- DOT: deals damage over time.
Runtime status instances¶
Every accepted status application creates a runtime instance with its own identity and remaining duration. Independent stacks can therefore expire or be removed at different times.
The runtime ID starts with the status's configured name, with surrounding
whitespace removed and internal whitespace replaced by underscores. An
application timestamp follows that name. For example, a status named
Magic Barrier produces an ID such as Magic_Barrier_1750000000.25.
The status name determines which instances count as matching stacks. Statuses
with different names do not replace or stack with each other.
Applying another status with the same name may replace existing instances, add an independent stack, or be rejected. See Reapplication and stacking for the configuration and behavior.
Later same-name applications use the stack_policy and max_stacks values
already active on those statuses. stack_policy: "replace" replaces the
active same-name group and does not accept max_stacks. stack_policy: "stack"
adds independent instances and requires max_stacks. Once every matching
instance has expired or been removed, the next application uses its own
configuration. Runtime status snapshots include the established
stack_policy, so replay clients can preserve the active group's behavior.
Status duration¶
Each status instance decreases its own remaining duration at the end of the
affected fighter's normal turn, after energy and health regeneration. When an
instance reaches zero, its natural-expiry event appears in turn_end.events
and the expired status is absent from the turn-end snapshot. Other same-name
instances keep their own remaining durations. Natural expiry applies whether
or not the status is configured as removable.
A duration-1 status applied to an opponent remains active throughout that opponent's next normal turn, then expires at turn end. A duration-1 status that a fighter applies to itself remains active for the rest of the current normal turn, then expires at the end of that same turn.
An opponent receives a duration-1 debuff
During Cow's turn, Cow applies Attack Down with duration: 1 to Dog.
- Application: Dog receives the debuff with
remaining_duration: 1. It does not decrease at the end of Cow's turn because Dog owns the status. - Dog's next turn:
Attack Downremains active while DOT, passives, and Dog's action are processed. - Dog's turn end: Energy and health regenerate first. The debuff then
ticks from
1to0and expires. - Battle result: A
remove_statusevent withreason: "duration_expired"appears in Dog'sturn_end.events. The following turn-end snapshot no longer containsAttack Down.
If Cow applies a duration-1 status to itself instead, that status ticks and expires at the end of Cow's current normal turn.
skip_turn is the exception. When it prevents a normal turn, only active
skip_turn statuses decrease their duration. The fighter's other statuses do
not. See Control debuffs for the full behavior.
Statuses can also be removed by a skill action when configured as removable. See RemoveStatus for eligibility, filtering, and selection behavior.
See ApplyStatus to configure a status action and BattleResult to consume status events and snapshots.
Looking for exact fields?
Use the OpenAPI reference for complete status schemas, enum values, defaults, and validation rules.