← All scenarios
STATUS-006computeEffectTick

stack_independent — two Acid Bomb DoTs from different casters tick separately

With stackingPolicy='stack_independent', applying the same Effect twice creates two distinct Effect instances on the target. Each has its own duration and ticks independently. Common case: two players DoT the same monster.

stackingPolicystackIndependentmultipleDoTInstances
Action
computeEffectTick
Compute tick #9 of effect acid_demonstration_dot_from_caster_alice
effectId
acid_demonstration_dot_from_caster_alice
atTick
9
context.mapType
pve

Actors

Two-acid-bomb victim
monster · Lv80
defender
demonshadow 2mediumnormal
Active effects
  • acid_demonstration_dot_from_caster_alice
  • acid_demonstration_dot_from_caster_bob
HP 12000 / 12000
Hard DEF 25
Hard MDEF 15
Expected output
From the scenario fixture. Numerical values marked as null are placeholders pending rAthena verification.
tickDamage: 60

Alice's DoT at tick 9: 9 is a multiple of her tickInterval(3) past her appliedAt(0) → fires. Damage = floor(200 * 0.3) = 60. Bob's DoT exists independently with its own caster snapshot.

Show full expected JSON
{
  "_designNote": "Effect IDs MUST be globally unique per Actor when using stack_independent — that's why both effects in this scenario have different IDs encoding the caster. Implementation guidance: when a caller applies a stack_independent Effect, they should generate a unique ID like `${baseId}_${casterId}_${appliedAtTick}`."
}

Computed: EffectTickResult

Server-evaluated by calculateEffectTick() from @ro/core.

Damage at tick 9
acid_demonstration_dot_from_caster_aliceneutralmiscsnapshot
Per-tick value; caller decides whether to apply.
60
Formula evaluation
D-015 tick pipeline
formula result60
after stacks60
floor + max(0)60

Stack-aware formulas (e.g. stacks * floor(maxHP * 0.005)) handle scaling themselves; the library does not auto-multiply.

Formula scope
snapshotState (frozen at apply time)
maxHP12,000
currentHP12,000
maxSP0
currentSP0
baseLevel80
stacks1
atTick9
str0
agi0
vit0
int0
dex0
luk0
casterMATK200