Combat Simulator

Compare custom player stats against any combat-capable NPC. The simulator reproduces opposed accuracy/protection rolls, damage rolls, critical hits, accuracy-advantage rolls, and authored attack timings over 20,000 deterministic fights. Potion healing is assumed, so every trial continues until the enemy dies.

Fight
Player offence
Player defence

Choose an enemy and run the simulation.

How combat math works

Cursebreaker does not convert Accuracy or Defence into a fixed percentage stat. For each typed attack it creates two independent rolls. The attacker rolls from zero to effective accuracy; the defender rolls from zero to the matching protection. The attack misses only when the defence roll is strictly higher. This is why the same Accuracy value produces a different hit rate against every opponent.

Effective accuracy

For normal player attacks, effective accuracy is the relevant equipment stat plus the level of the skill used: Melee Accuracy + Swordsmanship, Ranged Accuracy + Archery, or Spell Accuracy + Magic. The result is clamped to at least 1. NPC ability attacks follow the same typed rule when they specify a skill; an NPC's plain ability-0 attack instead uses its explicit Melee Accuracy directly.

Against positive protection D, accuracy A has hit chance A / (2D) when A <= D, and 1 - D / (2A) when A > D. Equal values therefore hit 50%. 1 Accuracy against 150 protection hits about 0.33%; 150 Accuracy against 1 protection hits about 99.67%. Protection at or below zero uses the runtime's unusual fallback defence roll ending at 2, so negative resistance is actively dangerous.

Levels and maximum damage

Attack skills contribute 1 + floor(level x 0.5) base damage. Level 1 contributes 1; level 99 contributes 50. Melee and ordinary ranged maximum damage add the matching equipment Damage stat. Standard spell damage also adds floor(2 + required spell level x 0.8), so the selected spell's authored level matters independently of the player's Magic level.

A successful non-critical hit initially rolls from 1 through the computed maximum. Accuracy can improve damage as well as hit rate: whenever effective accuracy is at least protection plus 10, the game adds a second damage roll and keeps the higher result. The threshold doubles for each further roll: +20, +40, +80, and so on, up to ten extra rolls. Those best-of rolls strongly push damage toward the maximum.

Critical strikes

Every attack starts with 2 Critical Strike points, then adds the attacker's Critical Strike stat. The managed code draws an integer from 0 through 100 and crits when it exceeds 100 - points. A critical forces the attacker roll to maximum accuracy and, if it lands, replaces the normal damage roll with 150% of maximum damage, truncated to an integer.

Defence and incoming damage

Defence level does not enter the hit roll directly. It is a progression skill that earns XP when attacks resolve. The actual defensive values are Melee Protection, Spell Resistance, and Ranged Protection, primarily supplied by equipment and effects. The simulator asks for Defence level for completeness but uses the three protection fields for incoming hit checks, exactly as DamageHandler.CalculateDamageTaken does.

Simulation model

Each trial starts both combatants at time zero and repeats their standard attack at the displayed interval. Time to kill is the time of the lethal player hit. Damage taken counts every enemy hit before that moment. The player is allowed to continue after their entered Health is exhausted, modelling enough potion healing to prevent death; Health is retained only for the no-potion survival diagnostic and warning. Kills per hour is 3600 / average time to kill and assumes immediate re-engagement.

Scope: Results model sustained standard attacks in a stationary duel. They include authored NPC stats, runtime defaults, spell level, attack intervals, accuracy rolls, criticals, damage-advantage rolls, and the assumption that potion healing always prevents player death. They exclude active buffs, equipment traits, blocking, damage-over-time, potion timing or inventory limits, other healing, movement, mana limits, cooldown weaving, immunities, multi-hit/AoE behavior, and bespoke boss scripts. NPCs with complex AI are represented by their dominant authored attack profile; use the result as a baseline, not a speedrun guarantee.

Managed-code sources

The formulas were transcribed from Calculations.DamageFromLevel, Calculations.DamageFromSpellLevel, Calculations.GetAccuracy, DamageHandler.CalculateDamageTaken, UnitAttacks default damage constructors, and NPCHandler.LoadNpcTemplates in Managed/Assembly-CSharp.dll. Enemy stats and timings come from Data/XMLs/NPCs; spell levels and cast times come from AbilityHandler.