TheDoktor
01-11-2009, 01:05 AM
Ever since I read Disquette's melee combat mechanics analysis (http://disquette.wordpress.com/warhammer-online-melee-combat-mechanics/), I've been curious about the formulas for spell damage. I've done some tests, and I've found a formula that seems to work, though I've only been able to try it out on a few spells because they only caster I have access to is my brother's Rank 7 Magus.
I started with the formula from Disquette's post for melee special ability damage:
Sdmg = (((StrBon/10)*2 + Wdps)*1.5 + Admg)*(1-armor)
Where StrBon = Strength - Toughness, Admg = the ability tooltip damage, and Armor = the final mitigation % after Weapon Skill is applied. Personally, I find it clearer to write the formula like this:
Sdmg = (((Str - Tou) / 5 + Wdps) * 1.5 + Admg) * (1-armor)
I reasoned that the spell damage formula must be similar, but I would have to make some alterations.
Spell damage is based on Intelligence, so we will change Str to Int:
Sdmg = (((Int - Tou) / 5 + Wdps) * 1.5 + Admg) * (1-armor)
Spells don't use Weapon DPS, so we will drop that term:
Sdmg = (((Int - Tou) / 5) * 1.5 + Admg) * (1-armor)
And finally, spells are mitigated by resists, not by armor:
Sdmg = (((Int - Tou) / 5) * 1.5 + Admg) * (1 - Resist%)
I got my bro to blast some Wild Razorswine with an instant cast, no-cooldown spell. The formula turned out to fit. But when he used a 2 second nuke, the formula no longer worked. To get it to work, I had to make another modification:
Sdmg = (((Int - Tou) / 5) * Coeff + Admg) * (1 - Resist%)
where Coeff, the spell damage coefficient, is the interval in which the spell can be cast
For insta-cast, no-cooldown spells, they are castable at the rate of the global cooldown (1.4, which is approximately 1.5). So the coefficient would only be 1.5 for those spells, but larger for spells that can't be spammed so quickly. This formula works when we put the cast time of the nuke as Coeff. But we didn't have any nukes with cooldowns to test, so I'm not sure how the cooldown is part of the formula.
Now, you might wonder, how did I figure out that the formula worked without knowing the mob's Toughness and Resist%?
It's actually possible to calculate Resist% from the combat log, leaving Toughness as the one unknown which we can calculate with algebra. This is the procedure that Disquette describes.
1. Calculate the % the mob is resisting
2. Calculate the mob's Toughness assuming the formula is true, and given the damage shown in the combat log
3. Change some of your stats, and see if the formula accurately predicts the amount of damage dealt in the combat log
Calculate the % that the mob is resisting
This is basically the same procedure that Disquette used to calculate armor mitigation, because the combat log makes it so easy. You will notice that the combat log tells the amount of damage dealt, and the amount mitigated. Well, the amount mitigated is the damage let through by your armor or resists. So the following is true:
TotalDmg = DmgDealt + DmgMitigated
Mitigation% = DmgMitigated / TotalDmg
The combat log is subject to rounding, and that will introduce a small amount of error into subsequent calculations; though I got the formula to be right within 1 point of damage.
Calculate the mob's Toughness assuming the formula is true, and given the damage shown in the combat log:
To find the Toughness, we must first realize that in the formula
Sdmg = (((Int - Tou) / 5) * Coeff + Admg) * (1 - Resist%)
there is only one term we don't know: Toughness. This means we can calculate it using algebra by reversing the formula:
Tou = Int - (Tdmg - Admg) / Coeff * 5
Using this formula, I got the same value of Toughness as I got using Disquette's melee damage formula, within 2 points, which is attributed to combat log rounding, and being unsure whether Coeff should be 1.5 or 1.4.
Then just plug this value of Toughness into the formula and play around with your stats, seeing if the formula's prediction matches the damage from your combat log. However, according to Sorcs, many spells have a coefficient that isn't what you would expect from their cast time and cooldown, so the formula for spells that break the rule might have to be figured out individually.
This formula looks like a good start, but we are going to have to test it with some other spells.
I started with the formula from Disquette's post for melee special ability damage:
Sdmg = (((StrBon/10)*2 + Wdps)*1.5 + Admg)*(1-armor)
Where StrBon = Strength - Toughness, Admg = the ability tooltip damage, and Armor = the final mitigation % after Weapon Skill is applied. Personally, I find it clearer to write the formula like this:
Sdmg = (((Str - Tou) / 5 + Wdps) * 1.5 + Admg) * (1-armor)
I reasoned that the spell damage formula must be similar, but I would have to make some alterations.
Spell damage is based on Intelligence, so we will change Str to Int:
Sdmg = (((Int - Tou) / 5 + Wdps) * 1.5 + Admg) * (1-armor)
Spells don't use Weapon DPS, so we will drop that term:
Sdmg = (((Int - Tou) / 5) * 1.5 + Admg) * (1-armor)
And finally, spells are mitigated by resists, not by armor:
Sdmg = (((Int - Tou) / 5) * 1.5 + Admg) * (1 - Resist%)
I got my bro to blast some Wild Razorswine with an instant cast, no-cooldown spell. The formula turned out to fit. But when he used a 2 second nuke, the formula no longer worked. To get it to work, I had to make another modification:
Sdmg = (((Int - Tou) / 5) * Coeff + Admg) * (1 - Resist%)
where Coeff, the spell damage coefficient, is the interval in which the spell can be cast
For insta-cast, no-cooldown spells, they are castable at the rate of the global cooldown (1.4, which is approximately 1.5). So the coefficient would only be 1.5 for those spells, but larger for spells that can't be spammed so quickly. This formula works when we put the cast time of the nuke as Coeff. But we didn't have any nukes with cooldowns to test, so I'm not sure how the cooldown is part of the formula.
Now, you might wonder, how did I figure out that the formula worked without knowing the mob's Toughness and Resist%?
It's actually possible to calculate Resist% from the combat log, leaving Toughness as the one unknown which we can calculate with algebra. This is the procedure that Disquette describes.
1. Calculate the % the mob is resisting
2. Calculate the mob's Toughness assuming the formula is true, and given the damage shown in the combat log
3. Change some of your stats, and see if the formula accurately predicts the amount of damage dealt in the combat log
Calculate the % that the mob is resisting
This is basically the same procedure that Disquette used to calculate armor mitigation, because the combat log makes it so easy. You will notice that the combat log tells the amount of damage dealt, and the amount mitigated. Well, the amount mitigated is the damage let through by your armor or resists. So the following is true:
TotalDmg = DmgDealt + DmgMitigated
Mitigation% = DmgMitigated / TotalDmg
The combat log is subject to rounding, and that will introduce a small amount of error into subsequent calculations; though I got the formula to be right within 1 point of damage.
Calculate the mob's Toughness assuming the formula is true, and given the damage shown in the combat log:
To find the Toughness, we must first realize that in the formula
Sdmg = (((Int - Tou) / 5) * Coeff + Admg) * (1 - Resist%)
there is only one term we don't know: Toughness. This means we can calculate it using algebra by reversing the formula:
Tou = Int - (Tdmg - Admg) / Coeff * 5
Using this formula, I got the same value of Toughness as I got using Disquette's melee damage formula, within 2 points, which is attributed to combat log rounding, and being unsure whether Coeff should be 1.5 or 1.4.
Then just plug this value of Toughness into the formula and play around with your stats, seeing if the formula's prediction matches the damage from your combat log. However, according to Sorcs, many spells have a coefficient that isn't what you would expect from their cast time and cooldown, so the formula for spells that break the rule might have to be figured out individually.
This formula looks like a good start, but we are going to have to test it with some other spells.