DPS Simulator
experimental model ⓘ
Experimental Built for comparing builds — not for predicting your live damage. What’s modeled →

Character

Loading…

Buffs & modifiers

Active selections

Party buffs 0
from allies, applied to you at 100% uptime — cast your own buffs in the rotation
Self buffs 0
you cast these — pinning assumes 100% uptime; put the skill in the rotation for cast-accurate timing
Target debuffs 0
applied to every dummy
Starting summons 0
already active at fight start — pets and clones you walk into the fight with; counts are not mana-checked, so only enter what you can maintain

Fight single-target skills & autos hit the first dummy; AoE casts hit all

Each crit, hit, proc, status and Multistrike outcome is sampled.
Monster presets use the game’s stat formulas. Boss buffs can change live values; edit any field to match your target.
melee range (≤6m)
Model notes

This simulator is a best-effort deconstruction of the game engine: damage formulas, cooldowns, buffs, DoTs, autocasts and summons are transcribed from the game code, and what we model is checked against closed-form math and recorded fights. It is built for comparing builds, gear stages and rotations — not for predicting a live fight to the last point.

Known simplifications:

  • Expected mode probability-blends crits, hits, procs and statuses into one deterministic comparison number. Rolled fights samples those outcomes, physical damage variance and fractional multistrike independently with a reproducible seed, then reports the mean and P10–P90 across the selected fights. Its breakdown, timeline and log show fight 1, not the mean.
  • Auto counts are attack attempts, not animation loops. The in-game meter’s xN counts landed damage events, while the simulator counts server-side attack attempts; visible weapon animations are a third boundary. Dual-wield schedules two hit events per attempt. In Rolled mode the fight log shows those mainhand and offhand events separately with CRIT/HIT/MISS badges. Compare damage per attempt or total damage, not those raw counts as if they were the same unit.
  • Fights happen on stationary dummies: no movement, dodging, mechanics downtime, or deaths.
  • Skills have weapon requirements, and toggle stances keep checking them. A skill with a WeaponTypes list can only be cast with a matching weapon. Toggle stances lose their buff on an incompatible loadout and return automatically when you swap back. Sniper's Nest therefore never buffs Launcher grenade casts. In 0.33.0 its standing-still delay is zero and it instead carries a 75% movement-speed penalty; the simulator assumes stationary fights. The generic ToggleStillTime re-arm path remains for any future nonzero source. The weapon swap itself has no modeled animation lock.
  • A few niche stats and triggers aren’t modeled yet (on-block / on-dodge / on-kill riders, weapon-swap animation time).
  • Model MP charges manual casts and owner autocasts. Gear, linked-skill and grimoire autocasts pay the cost at their resolved skill level, with skill/global cost modifiers and the HP split. Unaffordable procs are skipped, including their damage and effects. Expected mode probability-blends MP use; Rolled mode spends on actual successful proc rolls. Native spawned sub-skills and companion costs remain excluded and are listed when present. Regen uses the current client formula with an assumed one-second base tick accelerated by MP Regen Rate, updated as buffs and loadouts change. Siphon MP is approximated once per manual action’s primary packet; secondary/proc refunds and caster HP loss are not simulated.
  • Gear that grants a skill gives you that skill. An item carrying GrantSkill (Kraken Card → Blizzard, Razor’s Edge → Limit Break, Amber Loop → Heal, Jack-o’-lantern → Death Coil) now shows up in the add-a-skill list and can be picked by the optimizer, cast at the level the item grants — on top of feeding on-attack autocast procs for you and your summons. Weapon requirements still apply, exactly as they do to a skill you trained.
  • Some zones can only have one copy alive, so recasting cuts the old one short. A skill with a MaxInstances cap (Fire Pillar allows 1) despawns its oldest live zone when you exceed the cap, so a pillar recast every 3s only ticks for 3s — not its full 5s duration. The sim now uses the cadence your rotation actually casts at, so spamming a capped zone no longer credits time it never had.
  • Multi-projectile skills are an upper bound — every projectile is assumed to connect. Gear that adds spawns to a skill (Kraken Card turns Ice Shard into 3 shards, each a full-damage hit) fans them across a 60° arc around your aim rather than along it, so the outer shards only land point-blank or against something big enough to eat the whole spread — at range, against a small target, they sail past. The sim has no range, no aim line and no target hitbox, so it prices every spawn as landing: those skills read at their ceiling here, and a kiting build will do less in game. That is deliberate — overstating them by a known mechanism is more useful for comparing builds than correcting them with a made-up one.

Spot a number that disagrees with the game? Share your in-game parse or feedback in the SpiritValers thread on Discord — real parses are what calibrate the model.

Rotation

Result

—
expected DPS · experimental
—
total over fight
—
skill casts + Basic Attack meter events

Fight log

casts buffs autos autocasts dots