Skip to content

Commit 6a06297

Browse files
LocalIdentityLocalIdentity
andauthored
Update Evasion / Hit Chance formula with 0.3 changes (#1228)
Formulas were changed and provided here https://www.reddit.com/r/PathOfExile2/comments/1n2tefy/comment/nb8wufb/?utm_source=share&utm_medium=web3x&utm_name=web3xcss&utm_term=1&utm_content=share_button Also adds the function for Deflection but doesn't take it into account for defense calcs yet Co-authored-by: LocalIdentity <localidentity2@gmail.com>
1 parent 4b2ebda commit 6a06297

3 files changed

Lines changed: 15 additions & 7 deletions

File tree

src/Modules/CalcDefence.lua

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,16 @@ function calcs.hitChance(evasion, accuracy, uncapped)
3232
if accuracy < 0 then
3333
return 5
3434
end
35-
local rawChance = ( accuracy * 1.5 ) / ( accuracy + evasion ) * 100
36-
return uncapped and m_max(round(rawChance), 5) or m_max(m_min(round(rawChance), 100), 5)
35+
local rawChance = ( accuracy * 1.25 ) / ( accuracy + evasion * 0.3 ) * 100
36+
return uncapped and m_max(round(rawChance), 5) or m_max(m_min(round(rawChance), 100), 5)
37+
end
38+
-- Calculate Deflect chance
39+
function calcs.deflectChance(evasion, accuracy, uncapped)
40+
if accuracy < 0 then
41+
return 5
42+
end
43+
local rawChance = ( accuracy * 0.9 ) / ( accuracy + evasion * 0.2 ) * 100
44+
return uncapped and m_max(round(rawChance), 0) or m_max(m_min(round(rawChance), 100), 0)
3745
end
3846
-- Calculate damage reduction from armour, float
3947
function calcs.armourReductionF(armour, raw)

src/Modules/CalcOffence.lua

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2290,14 +2290,14 @@ function calcs.offence(env, actor, activeSkill)
22902290
local more = skillModList:More("MORE", cfg, "Accuracy")
22912291
local moreVsEnemy = skillModList:More("MORE", cfg, "Accuracy", "AccuracyVsEnemy")
22922292

2293-
local enemyDistance = env.modDB:Sum("BASE", nil, "Multiplier:enemyDistance") / 10 or 20
2293+
local enemyDistance = env.modDB:Sum("BASE", nil, "Multiplier:enemyDistance") / 10 or 25
22942294
local enemyDistanceCapped = m_max(m_min(enemyDistance * 10, data.misc.AccuracyFalloffEnd), data.misc.AccuracyFalloffStart)
22952295
local modValue = m_floor(data.misc.MaxAccuracyRangePenalty * calcLib.mod(skillModList, cfg, "AccuracyPenalty"))
2296-
local accuracyPenalty = 1 - ((enemyDistanceCapped - data.misc.AccuracyFalloffStart) / 100) * modValue / 100
2296+
local accuracyPenalty = 1 - ((enemyDistanceCapped - data.misc.AccuracyFalloffStart) / (data.misc.AccuracyFalloffEnd - data.misc.AccuracyFalloffStart)) * modValue / 100
22972297
local accuracyPenalties = {}
2298-
local distances = {2, 5, 9, 12}
2298+
local distances = {2, 5, 9}
22992299
for _, distance in ipairs(distances) do
2300-
accuracyPenalties["accuracyPenalty" .. distance .. "m"] = 1 - ((distance * 10 - data.misc.AccuracyFalloffStart) / 100) * modValue / 100
2300+
accuracyPenalties["accuracyPenalty" .. distance .. "m"] = 1 - ((distance * 10 - data.misc.AccuracyFalloffStart) / (data.misc.AccuracyFalloffEnd - data.misc.AccuracyFalloffStart)) * modValue / 100 -- Fix
23012301
end
23022302

23032303
output.Accuracy = m_max(0, m_floor(base * (1 + inc / 100) * more))

src/Modules/Data.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ data.misc = { -- magic numbers
168168
SuppressionEffect = 50,
169169
AvoidChanceCap = 75,
170170
AccuracyFalloffStart = 20,
171-
AccuracyFalloffEnd = 120,
171+
AccuracyFalloffEnd = 90,
172172
MaxAccuracyRangePenalty = -data.characterConstants["accuracy_rating_+%_final_at_max_distance_scaled"],
173173
ArmourRatio = 10,
174174
NegArmourDmgBonusCap = 100,

0 commit comments

Comments
 (0)