1. Established Registrant
Join Date
Jun 2009
Posts
226

## Incoming Hit Distribution?

The work I've done over the past few days on AP reduction has got me thinking about how incoming melee distribution works.

I never took Calc, and I am sure the base math is over my head but I am going to attempt to explain what I mean.

We're going to use a simple level 80 Jormungar as an example.

Via beast lore we see that the melee damage range is 362 - 528 Damage. Testing with the attack debuffs seems to indicate that the range is scaled due to the fact the damage range decreases with attack power reduction in a non even fashion (IE Minimum hit drops more then maximum)

It seems logical that NPCs can only hit certain predictable values in a given range based on their AP. In EQ this was a flat value plus [1-20]multipled by a second value. This would dertmine all possible values a NPC could hit a player for, with the curve adjusted by Armor. WoW must use a similar formula, but I don't think the curve is adjusted by armor (tho it may be) but possibly some other stat such as Defense or player level.

My theory is that the Minimum and Maximum of the range are the Curves low points, and the mid value of the curve would be about 445 based on the above example. Despite the RNG determining exact hits, we should see most hits fall to the center of the curve rather then the outsides when given a large enough sample size. Now, because the range adjusts for attack power, this may be consistent between various levels of attack power. What isn't known in this case however, is how NPC AP interacts to player stats. What I am attempting to figure out is if a NPC with lower Attack power will hit to the left of the range (ie more often for minimum values) rather then the suspected center of the range given the correct player level and whatever defensive stat the formula works with.

The only way I can see to test this is to have someone get hit a few thousand times, in order to minimize RNG messing with results, then plot all the values taken onto a graph. It'd be important for whatever class does this to not use Block or any effect which absorbs damage, since you want to take full damage for an extended amount of time to get real values.

I am not sure if this line of logic has ever been explored in WoW, but there is a lot of focus on what people are hit for after armor. I haven't ever seen discussion on what could be done to influance the actual value of hits within a given NPC's range to the lower end of the spectiurm and am pretty curious how this works in WoW.

-Fenier

2. Originally Posted by Fenier
My theory is that the Minimum and Maximum of the range are the Curves low points, and the mid value of the curve would be about 445 based on the above example. Despite the RNG determining exact hits, we should see most hits fall to the center of the curve rather then the outsides when given a large enough sample size.
Some of your language is a little mushy. But maybe I can help based on what I know of the game's roll systems and damage mechanics.

First off, on the damage dealing end (as damage receiving is a separate set of reactions/modifiers). There are 4 important main components:
1.) Base damage = the flat value that the hit will generate regardless of any other buffs present.
2.) Random damage range = with most physical hits and some magic hits there will be a random range attached, this can be pretty big for some bosses (XT is something around 10k it seems).
3.) Attack Power = I'm not 100% sure the factor is the same as for players, but I don't know why it would be different. AP is divided by 14 and added to the *dps* (not the damage range).
4.) Crit flag = if yes, double damage, if no, no bonus damage.

We can ignore #4 as a tank who should be uncrittable. For #3, bosses have a set AP value, I haven't looked into it a lot either, the reason being that it is generally expected with the saturation of buffs that someone will be maintaining demoralizing shout/roar or another similar AP debuff (hunter pets, lock curse, etc). It's not a variable, it's there or it isn't so it's not vital to understand the direct value, just know that it is a reduction in your damage taken and is often not at the expense of anything else (some classes it is, like lock curses). The dps is based on the average value of the damage range (i.e. midpoint between min and max). This is where your language is a little mushy. If the damage dealt is 2000 + (100 to 500) the average will be 2300, but there will not statistically be any more hits at 2300 than 2500, it's an equal chance of any of the random values. The random damage range is always present, and like the base damage, will not be affected by anything, only the AP component which is added on top of those values is significant. To find dps as opposed to damage, you would use the base swing speed (before modifiers such as haste/de-haste) with the average damage value. Divide AP by 14, and add it to that value. That will tell you how much AP is adding to it.

For some sample math:
Boss A = 10,000 base damage, random damage range 3000-7000, base swing speed is 2.0 seconds, AP is 2100

Average swing before AP is 15,000, speed is 2.0 sec, so dps is 7500 dps. AP divided by 14 is 150, added to the dps is 7650, that will be 15300 damage per swing.

If you have a shout/roar that reduces boss AP by 700 (random numbers for clean math), the boss's ap now only adds 100 to the dps instead of 150, so the final hit value will be 15200, so the debuff reduced the swing damage by 100.

I'm not sure what the actual AP values are, nor that the exchange is the same as it is for players, or applied the same way, but that IS the equation for players, for how what that may help.

I want to say I've seen charts for Boss AP values, but I can't seem to find them right now (silly crappy work computer).

3. Established Registrant
Join Date
Jun 2009
Posts
226
So it would be then that..

DamageBase + Random[X-Y] + NPCATK = Mob Hit

The question there is, is the Random Range every value in that range, or is it based on a set of predetermined values, such as in 5s, 10s etc.

Even if the Random Range is every value you should still see a slope or curve when plotting out incoming hits because it's unlikely that even over a sizable sample it would hit each value in the random range a even number of times.

This Slope or Curve should theoretically be influenced by some stat of the player. In considering this I believe it to be something similar to PlayerLevel+Defense, which may influence the random range to higher or lower values. If the equation was balanced, then the vast majority of hits you see should be exactly center of the damage range, and not favoring one side.

4. Established Registrant
Join Date
Dec 2008
Posts
457
Originally Posted by Fenier
DamageBase + Random[X-Y] + NPCATK = Mob Hit
Like Satorri said, the attack power contribution is added to DPS, not to damage. The formula is DPS = Base DPS + AP/14. For actual damage you'd have to use Damage = (DPS + AP/14) * Speed.

That being said, traditionaly games use a flat random number generator for this sort of calculations. So the "distribution curve" would actually just be a flat line from the min hit to the max hit.

5. Established Registrant
Join Date
Jun 2009
Posts
226
Does anyone happen to know if indeed WoW uses a flat line or a curve before I sit and let something wail on me for an hour or so and figure it out? Rather avoid that if at all possible heh.

I know of other games which did use Curves or Slopes, which is why I even question it to begin with.

6. Established Registrant
Join Date
Dec 2008
Posts
457
I'm almost sure it's a flat line. It's easy to test, remove all gear except your weapon, remove all talents, and do a couple of thousand hits on a dummy while recording combat log. The log can be parsed to sort the recorded damage values, in order to verify the distribution, and to also verify whether the discrete values for damage done skip integer values or if there is an equal probability for each integer value from min to max.

Edit: If you do plan on testing it, I suggest using a low level weapon, to reduce the range of possible damage values. If you need help parsing the log to sort the values, I can probably help you with that.

7. Registrant
Join Date
Jan 2009
Posts
81
Mob damage is bit different than players. There's a base damage, the modifier from AP, and then a flat multiplier that varies based on the mob status and level (elite/boss, etc). This last number is the one that blizz tweaks when they want to globally change PVE difficulty.

The existence of this multiplier is why AP reducing buffs like demo shout give so much more relative damage reduction on bosses than on players.

8. Established Registrant
Join Date
Jun 2009
Posts
226
Originally Posted by Molohk
I'm almost sure it's a flat line. It's easy to test, remove all gear except your weapon, remove all talents, and do a couple of thousand hits on a dummy while recording combat log. The log can be parsed to sort the recorded damage values, in order to verify the distribution, and to also verify whether the discrete values for damage done skip integer values or if there is an equal probability for each integer value from min to max.

Edit: If you do plan on testing it, I suggest using a low level weapon, to reduce the range of possible damage values. If you need help parsing the log to sort the values, I can probably help you with that.
Since Player and NPC damage function differently, wouldn't I want to have a static armor value and be hit a few thousand times, as opposed to hit something?

9. Registrant
Join Date
Jan 2009
Posts
81
Originally Posted by Fenier
Since Player and NPC damage function differently, wouldn't I want to have a static armor value and be hit a few thousand times, as opposed to hit something?
I strongly doubt that blizz uses a different RNG for NPC base damage than player base damage, but anything is possible. I don't know of any testing done on it.

10. Established Registrant
Join Date
Dec 2008
Posts
457
Sure that'd be better, so we don't have to assume they use the same kind of RNG. The problem is that you want to get hit a lot, so avoidance is bad for testing and you can't really go against low level mobs, and if you go against similar level mobs you'll probably need some sort of healing to keep you alive for long enough to get a valid sample. And you'd have to make sure the heals you get don't have some sort of buff that changes your taken damage (grace, inspiration, divine aegis, etc.).

Might be just more practical to assume it's the same RNG and test it on a dummy, and then do a smaller test with incoming damage to match findings.

11. Registrant
Join Date
Jan 2009
Posts
81
I believe that armor reduction scales with level, so you'll want to go against a variety of levels of mob if you want to confirm/compensate for that. Avoidance isn't a problem, just place your back to the mob and get some coffee.

12. Established Registrant
Join Date
Dec 2008
Posts
457
Yes, armor mitigation depends on the attacker's level, but the formula is known and as long as armor stays constant you can easily figure out unmitigated damage. Do avoid any other damage reductions, like defensive stance.

13. Simply put Fenier, while Blizz's equations are not transparent, I can say with a great deal of certainty that there is no curve or player stat that modifies the random damage portion of a mob's attack. In order for that to be the case they would have to add a totally unnecessary complication to the formulae.

As a programmer, a key goal in creating efficient and minimally process-intensive programs is to remove unnecessary complications like that.

The base damage and random value are fixed, the AP portion can be modified with AP reducing skills, and as Morelore smartly pointed out, there is clearly a damage scaling factor based on level differences. Beyond that the burden of reducing the damage lies in your own armor, % damage reduction, and the other fundamental survival mechanics, not in some obscure stat-influenced effect on a portion of the mob/server-side damage calculation.