Talk:Monster damage

From Path of Exile Wiki
Jump to navigation Jump to search

This talk page is for discussing the article Monster damage.

  • Sign your posts using four tildes (~~~~)
  • Start a new topic at the bottom under a ==level 2 heading==
  • Indent replies using colons (:)
  • Keep it civil
  • Assume good faith
  • Don't remove past discussions

It's boring standing around getting hit. But I got this far: [1] (no armour) -AnnanFay (talk) 16:08, 19 February 2013 (UTC)

Monster stat calculations

Here's a discussion from the Discord channel about how to calculate monster stats, relevant for version 3.4.0. Saving it here for future testing and cleanup.

Openarl
If anyone else wants to know how the hell monster skill stat values are calculated now, do speak up :stuck_out_tongue:
Need to rework the program's skill data format though :/
But that may also allow for full gem tooltips later
So there's that

chuanhsing
I wish to know ._./
there many mystics inside .dat files

Openarl
Indeed
Ooook so
Complicated >.<
So the stat calculation has a few stages
Firstly, a base effectiveness value is calculated using two of the fields in GameConstants, both of which must be divided by 1000000 first:
base = GameConstants.SkillDamageBaseEffectiveness + GameConstants.SkillDamageIncrementalEffectiveness * (monsterLevel - 1)
Then, the two float fields from GrantedEffects come into play; in PyPoE they are named Multiplier1 (BaseEffectiveness) and Multiplier2 (IncrementalEffectiveness)
skillBase = base * GrantedEffects.BaseEffectiveness * pow(1 + GrantedEffects.IncrementalEffectiveness, monsterLevel - 1)
Then, for each stat, divide the skillBase by the value from EffectivenessCostConstants (the key immediately follows the stat float values in GEPL), then multiply by the stat float
This is only done where StatInterpolationType is 3, btw
1 is constant, 2 is linear
Yep, I think that's all of it
Have fun :smile:

chuanhsing
which dat point to StatInterpolationType?

Openarl
That's the key near the end of GEPL
Well, keys
One per stat

chuanhsing
NewStat = stat / skillBase? Constant means not apply, and linear?

Openarl
Constant just uses the stat value
But the effectiveness scaling ignores it
I actually don't know exactly how the linear scaling works; I didn't ask about that
I'll see if I can make up a fully worked example
Ok, so let's calculate the base_fire_damage_to_deal_per_minute for the Pocked Lanternbearer's Throw Fire skill
We'll say it's a level 80 spectre

Openarl
So, base = 3.885209 + 0.360246 * 79 = 32.344
skillBase = 32.344 * 1.2778 * pow(1 + 0.04, 79) = 916
The EffectivenessCostConstant key is 1, which is DamageValuePerMinute, 0.06
And of course, the StatInterpolationType is 3, so it definitely is effectiveness-scaled :stuck_out_tongue:
The corresponding float value for the stat is 1.6, so the stat value becomes:
value = 916 / 0.06 * 1.6 = 24427
The skill ID is MinerThrowFireSpectre, BTW
If you need to look that up :smiley:
Ok, back to reworking the skill data backend :/

--Illviljan (talk) 04:46, 25 October 2018 (UTC)