← All scenarios
STATUS-005computeEffectTick

DoT snapshot=true — Burn tick uses caster's stats at apply time

Inverse of STATUS-004. When snapshot=true, tick damage is computed from the snapshotState captured at apply time, not from current state. Even if the caster (or target) gets buffed later, ticks use the frozen values.

DoTsnapshotPolicysnapshotTruecasterSnapshot
Action
computeEffectTick
Compute tick #3 of effect burn
effectId
burn
atTick
3
context.mapType
pvp

Actors

Burning target
player · Lv50
defender
Primary stats
str
30
agi
30
vit
40
int
30
dex
30
luk
10
demihumanneutral 1mediumnormal
Active effects
  • burn
HP 3200 / 3200
Hard DEF 20
Hard MDEF 10
Expected output
From the scenario fixture. Numerical values marked as null are placeholders pending rAthena verification.
tickDamage: pending

tickDamage = floor(220 * 0.4 + 80 * 0.5) = floor(88 + 40) = 128. Element multiplier may apply on top depending on whether burn ticks go through the magical pipeline or are 'misc' fixed damage — document.

Show full expected JSON
{
  "breakdown": {
    "_assertion": "If you re-run this scenario with a modified caster state, tickDamage must NOT change. Snapshot is immutable per Effect instance.",
    "snapshotStateRead": true
  }
}

Computed: EffectTickResult

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

Damage at tick 3
burnfiremagicalsnapshot
Per-tick value; caller decides whether to apply.
128
Formula evaluation
D-015 tick pipeline
formula result128
after stacks128
floor + max(0)128

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)
maxHP3,200
currentHP3,200
maxSP0
currentSP0
baseLevel50
stacks1
atTick3
str30
agi30
vit40
int30
dex30
luk10
casterMATK220
casterINT80