DPS Formulas

Every formula used in the calculator, in order of application. Based on the OSRS Wiki DPS documentation.

1. Effective Level

// Wiki order: base → potion (additive) → prayer (floor) → style + 8 → void (floor)
effectiveLevel = FLOOR(FLOOR((baseLvl + potionBoost) × prayerMult) + styleBonus + 8) × voidMult)

Potion boosts (additive): Super Combat = 5 + FLOOR(lvl × 0.15); Ranging = 4 + FLOOR(lvl × 0.10); Magic = 4 + FLOOR(lvl × 0.10); Overload = 5 + FLOOR(lvl × 0.15); Smelling Salts = 11 + FLOOR(lvl × 0.16).

Prayer multipliers (str): Piety = 1.23; Chivalry = 1.18; Ult Str = 1.15; Rigour = 1.23; Eagle Eye = 1.15.

Prayer multipliers (atk): Piety = 1.20; Chivalry = 1.15; Rigour = 1.20; Augury = 1.25.

Style bonus (str): Aggressive = +3; Controlled = +1; others = +0.

Style bonus (atk): Accurate = +3; Controlled = +1; others = +0.

Void multipliers (str): Melee void = 1.10; Ranged void = 1.10, Elite ranged = 1.125; Mage void = 1.00, Elite mage = 1.025.

2. Equipment Strength

equipStr = SUM(gear[slot].mstr)  // or .rstr for ranged, .mdmg for magic

Pact G6: +FLOOR(STR_level × 0.20) added to melee strength.

Pact G7: +FLOOR(Prayer_level × 0.50) added to melee strength.

3. Base Max Hit

// Melee & Ranged:
maxHit = FLOOR(0.5 + effLvl × (equipStr + 64) / 640)

// Powered Staff — each has unique base damage using visible magic level:
//   Shadow:         FLOOR(magic / 3) + 1
//   Sang / Lithic:  FLOOR(magic / 3) - 1
//   Trident Swamp:  FLOOR(magic / 3) - 2
//   Trident Seas:   FLOOR(magic / 3) - 5
// Then: maxHit = FLOOR(baseDmg × (1 + mdmg% / 100))

// Standard Spells (e.g. Fire Surge base = 24):
maxHit = FLOOR(spellBase × (1 + mdmg% / 100))

Shadow passive: Triples ALL equipment magic attack + magic damage % before calculation. Magic damage capped at 100%.

4. Multiplier Chain

Applied in order, each FLOOR'd after multiplication:

  1. Slayer Helm (i) / V's Helm: Melee ×7/6 (16.67%), Ranged/Magic ×1.15 (15%), on task only
  2. Style Pacts (GA/HA/FA): ×1.01
  3. Crossbow Mastery (K8): ×1.70
  4. Halberd Distance (J4): ×(1 + 0.04 × FLOOR(dist/3))
  5. Twisted Bow: ×MIN(250, MAX(0, 250 + FLOOR(3M/10) - FLOOR(M/200) - 100)) / 100
  6. Shadowflame Quadrant: ×1.40
  7. Osmumten's Fang: ×0.85 (reduced max hit, compensated by double roll + min hit)
  8. Arclight vs Demons: ×1.70
  9. Devil's Element: ×1.30 (elemental weakness)

Note: Void Knight bonus (1.10/1.125) is applied inside the effective level, not as a chain multiplier.

Shadow 3x is applied to equipment magic dmg% before max hit calc (not as a chain multiplier).

Flat modifiers after chain: H4 = +5 melee str; F8 = -8 powered staff max hit.

5. Attack Roll

attackRoll = (effAtkLvl + 8) × (equipAtk + 64) × (1 + pactAcc% / 100)

// Pact accuracy: CA = +15%, F1 = +35%, H1 = 5% + 5%/tile

Void accuracy: ×1.10 applied to roll. Slayer helm: ×7/6 applied to roll.

TBow accuracy scaling: ×MIN(140, MAX(0, 140 + FLOOR(3M/10) - FLOOR(M/200) - 10)) / 100

6. Defence Roll

// Melee/Ranged:
defRoll = (defLevel + 9) × (defBonus + 64)

// Magic attacks: use target's magicLevel instead of defLevel
defRoll = (magicLevel + 9) × (magicDefBonus + 64)

7. Accuracy

if (atkRoll > defRoll):
  accuracy = 1 - (defRoll + 2) / (2 × (atkRoll + 1))
else:
  accuracy = atkRoll / (2 × (defRoll + 1))

Double accuracy roll (N7 crossbow, Drygore): accuracy = 1 - (1 - acc)²
Fang exact double roll: A>D: 1-(D+2)(2D+3)/((A+1)²×6) | A≤D: A(4A+5)/(6(A+1)(D+1))

8. Attack Speed

speed = weapon.attackSpeed
if (rapid style): speed -= 1
// Pacts: F7 (spell -2t), F8 (powered staff -3t), J2 (light melee -1t), K4 (bow -1t), K8 (xbow -2t)
speed = MAX(1, speed)

9. DPS Calculation

// Standard:
DPS = (maxHit / 2 × accuracy) / (speed × 0.6)

// Always-max (N6 crossbow):
DPS = (maxHit × accuracy) / (speed × 0.6)

// Scythe: hits depend on target size (1×1=1, 2×2=2, 3×3+=3 hits)
// hit1 = full max, hit2 = FLOOR(max/2), hit3 = FLOOR(max/4)
DPS = DPS_hit1 + DPS_hit2 + DPS_hit3  // for 3×3+ targets

// Fang: min hit raised, average = (max + FLOOR(max × 3/20)) / 2
fangMin = FLOOR(maxHit × 3 / 20)
DPS = ((maxHit + fangMin) / 2 × accuracy) / (speed × 0.6)

// Tecpatl double hit:
DPS = standardDPS × 2

10. Bonus Hit DPS

// D2 Swift Strikes (light melee):
bonusDPS = FLOOR(maxHit × 0.40) / 2 × accuracy / interval

// D3 Blindside Blows (heavy melee):
bonusDPS = 0.15 × maxHit × accuracy / interval

11. Echo Cascade

echoRate = B2(+25% ranged) + K10(+5% all) + E2(+15% xbow)

// Without cascade:
echoDPS = baseDPS × echoRate

// With K3 (cascade 4x):
echoDPS = baseDPS × echoRate × (1 + p/2 + p/4 + p/8)

// E1 (bow echo never miss): echo accuracy = 100%

12. Weapon Passives

Fang of the Hound: 5% chance Flames of Cerberus proc (bonus fire hit).

Drygore Blowpipe: Double accuracy roll. 25% chance burn DoT (3-tick fire).

King's Barrage: 2 bolts per attack (each at halved max), freeze.

Nature's Recurve: 50% chance heal 10% damage (no DPS effect).

Flask of Fervour: +1.5 flat DPS.

Sources: OSRS Wiki — Damage per second, OSRS Wiki — Combat. Pact modifiers are DP-league specific.