Talk:Monster damage
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 :/