Damage System - math

This contains in-depth mathematical analysis of the damage dealing system and functions, and breaks down the steps of the damage dealing process


1 Phases

The damage is calculated in several phases, all of them are going to be explained below, but before we do so, let's start with some definitions

1.1 Roll phase

Rolling phase is such a phase, where attack rating is determined for the attacker, and defence rating be determined for the defender.
Attacker has some set of attack stats, from which the relevant attack stat is chosen which respect to the attack style(magic / melee / blood / fire / ice / slash / stab etc.)
Let such a chosen number be \(Aa = 5\)

The same process is done for the defender, where defence stat \(Dd\) is chosen, with respect to the attacker's attack style Let \(Aa = 8\)
Then, we calculate roll for both participants.

Then, the roll function \(f(u)\) is defined, as follows:
\((u \lt 0) \rightarrow f(u) = rand(u, 0)\)
\((u \geq 0) \rightarrow f(u) = rand(0, u)\)

Then, we calculate rolls \(r_a\) for attacker and \(r_b\) for defender
\(r_a = f(Aa)\)
\(r_d = f(Dd)\)
Then, damage is evaded completelly, if
\(r_a < r_d\)
And damage is evaded with 50% chance, if
\(r_a = r_d\)

1.1.1 Example

Here is an example to support the theory above.

Let's imagine, that attacker is using ice barrage spell to attack. Because of that, we choose attack - ice stat as \(Aa\). Let
\(Aa = 12\)

For defender, we choose defence - ice stat as \(Dd\). Let
\(Dd = -3\)

We calculate \(r_a = rand(0, 12) = 3\)
\(r_d = rand(-3, 0) = -1\)
Because \(r_a \gt r_d\), damage will be dealt, and system proceeds to the other phase

1.2 Damage calculation phase

Damage calculation phase is such a phase, which takes place after roll phase, if attacker was successfull in a roll. Here, final damage \(d\) is calculated.
This phase takes previously calculated \(r_a\) and \(r_d\) as an additional input.

First, precentual difference \(r_{diff}\) between rolls \(r_a\) and \(r_d\) is calculated, and capped to 100%.
if \(r_a \neq 0\), then
\(r_{diff} = 1 - r_d / r_a\)
\(r_{diff} = 0\)

Then, max. possible damage \(d_max\) is calculated:
\(d_{max} = {MAX} + r_{diff} * 0.1 * {MAX} \)

This means, that a good attack roll can generate maximum of 10% extra damage

We calculate actual damage \(d\) as
\(d = rand(1, d_{max})\)
Note: the lower bound number 1 can be replaced with spell / attack lower bound, if the attack has some custom lower bound, but it is not shown here in documentation for the sake of simplicity

Then, that damage number is altered through series of modifier phases.

1.3 Damage modifier phases

Damage modification phase, takes place always after damage calculation phase.

Input - output specification
Input: the damage \(d\)
Output: the damage \(d1\), which can be whatever

1.3.1 Prayer damage modifier phase

This phase takes in consideration all attacker's activated prayers, and also, all defender's activated prayers.
This sorely depends on how the prayers are defined, but for example, melee / magic protection prayer can nullyfy the damage, if the attack style matches

1.4 After effects modifier phase

After effect phase is the last phase, and takes place after damage all modifier phases were completed (and if any damage was dealt at all.)
It is responsible for buff / debuff modifiers, such as poison / freeze / teleblock