Skip to content

Commit 23a709a

Browse files
author
LocalIdentity
committed
Add support for a lot of skills with buildups
1 parent 2c6bd44 commit 23a709a

7 files changed

Lines changed: 105 additions & 40 deletions

File tree

src/Data/SkillStatMap.lua

Lines changed: 51 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1138,6 +1138,9 @@ return {
11381138
["skill_overwhelming_pressure_aura_enemy_ailment_threshold_+%"] = {
11391139
mod("AilmentThreshold", "INC", nil, 0, 0, { type = "GlobalEffect", effectType = "Debuff", effectName = "Overwhelming Presence"}),
11401140
},
1141+
["skill_overwhelming_pressure_aura_enemy_stun_threshold_+%"] = {
1142+
mod("EnemyStunThreshold", "INC", nil, 0, 0, { type = "GlobalEffect", effectType = "Debuff", effectName = "Overwhelming Presence"}),
1143+
},
11411144
["bleed_on_hit_with_attacks_%"] = {
11421145
mod("BleedChance", "BASE", nil, ModFlag.Attack),
11431146
},
@@ -1275,10 +1278,13 @@ return {
12751278
["active_skill_shock_effect_+%_final"] = {
12761279
mod("EnemyShockMagnitude", "MORE", nil),
12771280
},
1281+
["active_skill_electrocutes_as_though_dealt_damage_+%_final"] = {
1282+
mod("EnemyElectrocuteBuildup", "MORE", nil),
1283+
},
12781284
["non_damaging_ailment_effect_+%"] = {
12791285
mod("EnemyChillMagnitude", "INC", nil),
12801286
mod("EnemyShockMagnitude", "INC", nil),
1281-
mod("EnemyFreezeEffect", "INC", nil),
1287+
mod("EnemyFreezeBuildup", "INC", nil),
12821288
},
12831289
["lightning_ailment_effect_+%"] = {
12841290
mod("EnemyShockMagnitude", "INC", nil),
@@ -1293,10 +1299,16 @@ return {
12931299
},
12941300
["cold_ailment_effect_+%"] = {
12951301
mod("EnemyChillMagnitude", "INC", nil),
1296-
mod("EnemyFreezeEffect", "INC", nil),
1302+
mod("EnemyFreezeBuildup", "INC", nil),
1303+
},
1304+
["hit_damage_freeze_multiplier_+%"] = {
1305+
mod("EnemyFreezeBuildup", "INC", nil),
12971306
},
12981307
["active_skill_hit_damage_freeze_multiplier_+%_final"] = {
1299-
mod("EnemyFreezeEffect", "MORE", nil),
1308+
mod("EnemyFreezeBuildup", "MORE", nil),
1309+
},
1310+
["support_hypothermia_hit_damage_freeze_multiplier_+%_final"] = {
1311+
mod("EnemyFreezeBuildup", "MORE", nil),
13001312
},
13011313
["base_poison_effect_+%"] = {
13021314
mod("AilmentEffect", "INC", nil),
@@ -1403,6 +1415,10 @@ return {
14031415
["shock_minimum_damage_taken_increase_%+"] = {
14041416
mod("ShockMinimum", "BASE", nil),
14051417
},
1418+
["active_skill_pins_as_though_dealt_damage_+%_final"] = {
1419+
mod("EnemyPinBuildup", "MORE", nil),
1420+
},
1421+
14061422
-- Global flags
14071423
["never_ignite"] = {
14081424
flag("CannotIgnite"),
@@ -1420,6 +1436,13 @@ return {
14201436
["never_chill"] = {
14211437
flag("CannotChill"),
14221438
},
1439+
["cannot_pin"] = {
1440+
flag("CannotPin"),
1441+
},
1442+
["cannot_stun"] = {
1443+
flag("CannotHeavyStun"),
1444+
flag("CannotStun"),
1445+
},
14231446
["cannot_cause_bleeding"] = {
14241447
flag("CannotBleed"),
14251448
},
@@ -1472,14 +1495,26 @@ return {
14721495
flag("FireCanShock"),
14731496
flag("ChaosCanShock"),
14741497
},
1498+
["chaos_damage_can_freeze"] = {
1499+
flag("ChaosCanFreeze"),
1500+
},
14751501
["base_chaos_damage_can_ignite"] = {
14761502
flag("ChaosCanIgnite"),
14771503
},
14781504
["base_lightning_damage_can_electrocute"] = {
14791505
flag("LightningCanElectrocute"),
14801506
},
14811507
["base_all_damage_can_pin"] = {
1482-
{ flag("CanPin") },
1508+
flag("CanPin"),
1509+
},
1510+
["support_pin_physical_damage_can_pin"] = {
1511+
flag("PhysicalCanPin"),
1512+
},
1513+
["support_pin_buildup_pin_instead_of_stun"] = {
1514+
flag("PinBuildupInsteadOfHeavyStunBuildup"),
1515+
},
1516+
["support_pin_pin_buildup_+%_final"] = {
1517+
mod("EnemyPinBuildup", "MORE", nil),
14831518
},
14841519
["is_hazard"] = {
14851520
flag("CanCreateHazards"),
@@ -1497,6 +1532,15 @@ return {
14971532
mod("EnemyImpalePhysicalDamageReduction", "BASE", nil),
14981533
mult = -1,
14991534
},
1535+
["support_brink_hit_damage_stun_multiplier_+%_final"] = {
1536+
mod("EnemyHeavyStunBuildup", "MORE", nil),
1537+
},
1538+
["active_skill_hit_damage_stun_multiplier_+%_final"] = {
1539+
mod("EnemyHeavyStunBuildup", "MORE", nil),
1540+
},
1541+
["active_skill_minion_hit_damage_stun_multiplier_+%_final"] = {
1542+
mod("MinionModifier", "LIST", { mod = mod("EnemyHeavyStunBuildup", "MORE", nil) }),
1543+
},
15001544
["base_stun_duration_+%"] = {
15011545
mod("EnemyStunDuration", "INC", nil),
15021546
},
@@ -2592,9 +2636,6 @@ return {
25922636
["armour_break_physical_damage_%_dealt_as_armour_break"] = {
25932637
flag("Condition:CanArmourBreak", { type = "GlobalEffect", effectType = "Buff", effectName = "ArmourBreak" }),
25942638
},
2595-
["active_skill_pins_as_though_dealt_damage_+%_final"] = {
2596-
mod("EnemyPinBuildup", "MORE", nil),
2597-
},
25982639
--
25992640
-- Spectre or Minion-specific stats
26002641
--
@@ -2794,4 +2835,7 @@ return {
27942835
["quality_display_supercharged_slam_is_gem"] = {
27952836
-- Display Only
27962837
},
2838+
["quality_display_active_skill_pins_as_though_dealt_damage_+%_final_is_gem"] = {
2839+
-- Display Only
2840+
},
27972841
}

src/Data/Skills/sup_dex.lua

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1334,8 +1334,8 @@ skills["SupportCommiseratePlayer"] = {
13341334
mod("AilmentMagnitude", "MORE", nil, 0, KeywordFlag.Poison, { type = "Condition", var = "Poisoned" }),
13351335
mod("EnemyShockMagnitude", "MORE", nil, 0, 0, { type = "Condition", var = "Shocked" }),
13361336
mod("EnemyChillMagnitude", "MORE", nil, 0, 0, { type = "Condition", var = "Chilled" }),
1337-
mod("EnemyFreezeEffect", "MORE", nil, 0, 0, { type = "Condition", var = "Frozen" }),
1338-
mod("EnemyElectrocuteEffect", "MORE", nil, 0, 0, { type = "Condition", var = "Electrocuted" }),
1337+
mod("EnemyFreezeBuildup", "MORE", nil, 0, 0, { type = "Condition", var = "Frozen" }),
1338+
mod("EnemyElectrocuteBuildup", "MORE", nil, 0, 0, { type = "Condition", var = "Electrocuted" }),
13391339
},
13401340
},
13411341
baseFlags = {

src/Data/Skills/sup_str.lua

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5600,6 +5600,14 @@ skills["RuthlessSupportPlayer"] = {
56005600
label = "Ruthless",
56015601
incrementalEffectiveness = 0.092720001935959,
56025602
statDescriptionScope = "gem_stat_descriptions",
5603+
statMap = {
5604+
["support_ruthless_big_hit_max_count"] = {
5605+
mod("RuthlessBlowMaxCount", "BASE", nil),
5606+
},
5607+
["support_ruthless_big_hit_stun_damage_+%_final"] = {
5608+
mod("RuthlessBlowStunMultiplier", "BASE", nil),
5609+
},
5610+
},
56035611
baseFlags = {
56045612
},
56055613
constantStats = {
@@ -6224,7 +6232,7 @@ skills["SupportStunPlayer"] = {
62246232
statDescriptionScope = "gem_stat_descriptions",
62256233
statMap = {
62266234
["support_overpower_hit_damage_stun_multiplier_+%_final"] = {
6227-
mod("StunBuildup", "MORE", nil),
6235+
mod("EnemyHeavyStunBuildup", "MORE", nil),
62286236
},
62296237
},
62306238
baseFlags = {
@@ -6259,7 +6267,7 @@ skills["SupportStunPlayerTwo"] = {
62596267
statDescriptionScope = "gem_stat_descriptions",
62606268
statMap = {
62616269
["support_overpower_hit_damage_stun_multiplier_+%_final"] = {
6262-
mod("StunBuildup", "MORE", nil),
6270+
mod("EnemyHeavyStunBuildup", "MORE", nil),
62636271
},
62646272
},
62656273
baseFlags = {
@@ -6294,7 +6302,7 @@ skills["SupportStunPlayerThree"] = {
62946302
statDescriptionScope = "gem_stat_descriptions",
62956303
statMap = {
62966304
["support_overpower_hit_damage_stun_multiplier_+%_final"] = {
6297-
mod("StunBuildup", "MORE", nil),
6305+
mod("EnemyHeavyStunBuildup", "MORE", nil),
62986306
},
62996307
["support_overpower_damage_+%_final"] = {
63006308
mod("Damage", "MORE", nil),

src/Export/Skills/sup_dex.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -292,8 +292,8 @@ statMap = {
292292
mod("AilmentMagnitude", "MORE", nil, 0, KeywordFlag.Poison, { type = "Condition", var = "Poisoned" }),
293293
mod("EnemyShockMagnitude", "MORE", nil, 0, 0, { type = "Condition", var = "Shocked" }),
294294
mod("EnemyChillMagnitude", "MORE", nil, 0, 0, { type = "Condition", var = "Chilled" }),
295-
mod("EnemyFreezeEffect", "MORE", nil, 0, 0, { type = "Condition", var = "Frozen" }),
296-
mod("EnemyElectrocuteEffect", "MORE", nil, 0, 0, { type = "Condition", var = "Electrocuted" }),
295+
mod("EnemyFreezeBuildup", "MORE", nil, 0, 0, { type = "Condition", var = "Frozen" }),
296+
mod("EnemyElectrocuteBuildup", "MORE", nil, 0, 0, { type = "Condition", var = "Electrocuted" }),
297297
},
298298
},
299299
#mods

src/Export/Skills/sup_str.txt

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1302,6 +1302,14 @@ statMap = {
13021302

13031303
#skill RuthlessSupportPlayer
13041304
#set RuthlessSupportPlayer
1305+
statMap = {
1306+
["support_ruthless_big_hit_max_count"] = {
1307+
mod("RuthlessBlowMaxCount", "BASE", nil),
1308+
},
1309+
["support_ruthless_big_hit_stun_damage_+%_final"] = {
1310+
mod("RuthlessBlowStunMultiplier", "BASE", nil),
1311+
},
1312+
},
13051313
#mods
13061314
#skillEnd
13071315

@@ -1445,7 +1453,7 @@ statMap = {
14451453
#set SupportStunPlayer
14461454
statMap = {
14471455
["support_overpower_hit_damage_stun_multiplier_+%_final"] = {
1448-
mod("StunBuildup", "MORE", nil),
1456+
mod("EnemyHeavyStunBuildup", "MORE", nil),
14491457
},
14501458
},
14511459
#mods
@@ -1455,7 +1463,7 @@ statMap = {
14551463
#set SupportStunPlayerTwo
14561464
statMap = {
14571465
["support_overpower_hit_damage_stun_multiplier_+%_final"] = {
1458-
mod("StunBuildup", "MORE", nil),
1466+
mod("EnemyHeavyStunBuildup", "MORE", nil),
14591467
},
14601468
},
14611469
#mods
@@ -1465,7 +1473,7 @@ statMap = {
14651473
#set SupportStunPlayerThree
14661474
statMap = {
14671475
["support_overpower_hit_damage_stun_multiplier_+%_final"] = {
1468-
mod("StunBuildup", "MORE", nil),
1476+
mod("EnemyHeavyStunBuildup", "MORE", nil),
14691477
},
14701478
["support_overpower_damage_+%_final"] = {
14711479
mod("Damage", "MORE", nil),

src/Modules/CalcOffence.lua

Lines changed: 26 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -770,6 +770,17 @@ function calcs.offence(env, actor, activeSkill)
770770
end
771771
end
772772
end
773+
if skillModList:Flag(nil, "PinBuildupInsteadOfHeavyStunBuildup") then
774+
-- Fortifying Cry mod
775+
for i, value in ipairs(skillModList:Tabulate("INC", { }, "EnemyHeavyStunBuildup")) do
776+
local mod = value.mod
777+
skillModList:NewMod("EnemyPinBuildup", mod.type, mod.value, mod.source, mod.flags, mod.keywordFlags, unpack(mod))
778+
end
779+
for i, value in ipairs(skillModList:Tabulate("MORE", { }, "EnemyHeavyStunBuildup")) do
780+
local mod = value.mod
781+
skillModList:NewMod("EnemyPinBuildup", mod.type, mod.value, mod.source, mod.flags, mod.keywordFlags, unpack(mod))
782+
end
783+
end
773784
if skillModList:Flag(nil, "ProjectileSpeedAppliesToProjectileDamage") then
774785
-- Projectile speed to projectile damage conversion
775786
for i, value in ipairs(skillModList:Tabulate("INC", { }, "ProjectileSpeed")) do
@@ -3196,28 +3207,25 @@ function calcs.offence(env, actor, activeSkill)
31963207
end
31973208
end
31983209
end
3199-
3200-
output.RuthlessBlowHitEffect = 1
3201-
output.RuthlessBlowAilmentEffect = 1
3210+
32023211
output.FistOfWarDamageEffect = 1
32033212
if env.mode_combat then
32043213
local ruthlessEffect = env.configInput.ruthlessSupportMode or "AVERAGE"
3205-
-- Calculate Ruthless Blow chance/multipliers + Fist of War multipliers
3206-
output.RuthlessBlowMaxCount = skillModList:Sum("BASE", cfg, "RuthlessBlowMaxCount")
3207-
if output.RuthlessBlowMaxCount > 0 and ( not skillCfg.skillCond["usedByMirage"] or (skillData.mirageUses or 0) > output.RuthlessBlowMaxCount ) then
3214+
local ruthlessBlowMaxCount = skillModList:Sum("BASE", cfg, "RuthlessBlowMaxCount")
3215+
local ruthlessBlowChance
3216+
if ruthlessBlowMaxCount > 0 and ( not skillCfg.skillCond["usedByMirage"] or (skillData.mirageUses or 0) > ruthlessBlowMaxCount ) then
32083217
if ruthlessEffect == "AVERAGE" then
3209-
output.RuthlessBlowChance = round(100 / output.RuthlessBlowMaxCount)
3218+
ruthlessBlowChance = round(100 / ruthlessBlowMaxCount)
32103219
elseif ruthlessEffect == "MAX" then
3211-
output.RuthlessBlowChance = 100
3212-
skillModList:NewMod("DPS", "MORE", -100 / (output.RuthlessBlowMaxCount or 1), "Only Ruthless Blows")
3220+
ruthlessBlowChance = 100
3221+
skillModList:NewMod("DPS", "MORE", -100 + 100 / (ruthlessBlowMaxCount or 1), "Only Ruthless Blows")
32133222
end
32143223
else
3215-
output.RuthlessBlowChance = 0
3224+
ruthlessBlowChance = 0
32163225
end
3217-
output.RuthlessBlowHitMultiplier = 1 + skillModList:Sum("BASE", cfg, "RuthlessBlowHitMultiplier") / 100
3218-
output.RuthlessBlowAilmentMultiplier = 1 + skillModList:Sum("BASE", cfg, "RuthlessBlowAilmentMultiplier") / 100
3219-
output.RuthlessBlowHitEffect = 1 - output.RuthlessBlowChance / 100 + output.RuthlessBlowChance / 100 * output.RuthlessBlowHitMultiplier
3220-
output.RuthlessBlowAilmentEffect = 1 - output.RuthlessBlowChance / 100 + output.RuthlessBlowChance / 100 * output.RuthlessBlowAilmentMultiplier
3226+
local ruthlessBlowStunMultiplier = skillModList:Sum("BASE", cfg, "RuthlessBlowStunMultiplier") / 100
3227+
local ruthlessBlowStunEffect = (ruthlessBlowChance / 100) * ruthlessBlowStunMultiplier
3228+
skillModList:NewMod("EnemyHeavyStunBuildup", "MORE", ruthlessBlowStunEffect * 100, "Ruthless Blows")
32213229

32223230
globalOutput.FistOfWarCooldown = skillModList:Sum("BASE", cfg, "FistOfWarCooldown") or 0
32233231
-- If Fist of War & Active Skill is a Slam Skill & NOT a Vaal Skill & NOT used by mirage or other
@@ -3593,9 +3601,6 @@ function calcs.offence(env, actor, activeSkill)
35933601
elseif output.TripleDamageEffect ~= 0 then
35943602
t_insert(breakdown[damageType], s_format("x %.2f ^8(multiplier from %d%% chance to deal triple damage)", 1 + output.TripleDamageEffect, output.TripleDamageChance))
35953603
end
3596-
if output.RuthlessBlowHitEffect ~= 1 then
3597-
t_insert(breakdown[damageType], s_format("x %.2f ^8(ruthless blow effect modifier)", output.RuthlessBlowHitEffect))
3598-
end
35993604
if output.FistOfWarDamageEffect ~= 1 then
36003605
t_insert(breakdown[damageType], s_format("x %.2f ^8(fist of war effect modifier)", output.FistOfWarDamageEffect))
36013606
end
@@ -3607,9 +3612,9 @@ function calcs.offence(env, actor, activeSkill)
36073612
end
36083613
end
36093614
if activeSkill.skillModList:Flag(nil, "Condition:WarcryMaxHit") then
3610-
output.allMult = output.ScaledDamageEffect * output.RuthlessBlowHitEffect * output.FistOfWarDamageEffect * globalOutput.MaxOffensiveWarcryEffect
3615+
output.allMult = output.ScaledDamageEffect * output.FistOfWarDamageEffect * globalOutput.MaxOffensiveWarcryEffect
36113616
else
3612-
output.allMult = output.ScaledDamageEffect * output.RuthlessBlowHitEffect * output.FistOfWarDamageEffect * globalOutput.OffensiveWarcryEffect
3617+
output.allMult = output.ScaledDamageEffect * output.FistOfWarDamageEffect * globalOutput.OffensiveWarcryEffect
36133618
end
36143619
local allMult = output.allMult
36153620
if pass == 1 then
@@ -4892,12 +4897,12 @@ function calcs.offence(env, actor, activeSkill)
48924897

48934898
-- Calculate poise-related debuffs
48944899
for _, ailment in ipairs({"Freeze", "Electrocute", "HeavyStun", "Pin"}) do
4895-
local enemyPoiseThreshold = data.monsterPoiseThresholdTable[env.enemyLevel] * calcLib.mod(enemyDB, nil, "PoiseThreshold", "Enemy"..ailment.."Threshold")
4900+
local enemyPoiseThreshold = data.monsterPoiseThresholdTable[env.enemyLevel] * calcLib.mod(enemyDB, nil, "PoiseThreshold", ailment.."Threshold", ailment == "HeavyStun" and "EnemyStunThreshold")
48964901
local hitMin, hitMax, critMin, critMax = calcMinMaxUnmitigatedAilmentSourceDamage(ailment, data.buildupTypes[ailment].ScalesFrom)
48974902
-- TODO: average for now, can do more complicated calculation later
48984903
local hitAvg = hitMin + (hitMax - hitMin) / 2
48994904
local critAvg = critMin + (critMax - critMin) / 2
4900-
local inc = skillModList:Sum("INC", cfg, "Enemy"..ailment.."Buildup", "EnemyImmobilisationBuildup")
4905+
local inc = skillModList:Sum("INC", cfg, not skillModList:Flag(cfg, "PinBuildupInsteadOf"..ailment.."Buildup") and "Enemy"..ailment.."Buildup", "EnemyImmobilisationBuildup")
49014906
local more = skillModList:More(cfg, "Enemy"..ailment.."Buildup", "EnemyImmobilisationBuildup")
49024907
local hitPoiseBuildup = hitAvg * data.gameConstants[ailment .. "DamageScale"] / enemyPoiseThreshold
49034908
hitPoiseBuildup = hitPoiseBuildup * (1 + inc / 100) * more * 100

src/Modules/CalcSections.lua

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1378,7 +1378,7 @@ return {
13781378
{ label = "Stun Buildup", haveOutput = "HeavyStunBuildupOnHit", { format = "{1:output:HeavyStunBuildupOnHit}%",
13791379
{ breakdown = "HeavyStunBuildup" },
13801380
{ label = "Player modifiers", modName = { "EnemyHeavyStunBuildup", "EnemyImmobilisationBuildup" }, cfg = "skill" },
1381-
{ label = "Enemy modifiers", modName = { "PoiseThreshold", "EnemyHeavyStunThreshold" }, enemy = true },
1381+
{ label = "Enemy modifiers", modName = { "PoiseThreshold", "EnemyHeavyStunThreshold", "EnemyStunThreshold" }, enemy = true },
13821382
}, },
13831383
{ label = "Pin Buildup", haveOutput = "PinBuildupOnHit", { format = "{1:output:PinBuildupOnHit}%",
13841384
{ breakdown = "PinBuildup" },
@@ -1848,7 +1848,7 @@ return {
18481848
{ label = "Weap. Swap Speed", { format = "{0:output:WeaponSwapSpeed} ms", { breakdown = "WeaponSwapSpeedMod" }, { modName = { "WeaponSwapSpeed" } }, }, },
18491849
} }, { defaultCollapsed = false, label = "Stun Duration", data = {
18501850
{ label = "Stun Avoid Chance", haveOutput = "StunAvoidChance", { format = "{0:output:StunAvoidChance}%", { breakdown = "StunAvoidChance" }, { modName = "AvoidStun" }, }, },
1851-
{ label = "Stun Threshold", { format = "{ 0:output:StunThreshold}", { breakdown = "StunThreshold" }, { modName = { "StunThreshold", "StunThresholdManaPercent", "StunThresholdEnergyShieldPercent" } }, }, },
1851+
{ label = "Stun Threshold", { format = "{0:output:StunThreshold}", { breakdown = "StunThreshold" }, { modName = { "StunThreshold", "StunThresholdManaPercent", "StunThresholdEnergyShieldPercent" } }, }, },
18521852
{ label = "Stun Chance", { format = "{0:output:SelfStunChance}%", { breakdown = "SelfStunChance" }, }, },
18531853
{ label = "Interrupt Avoid Ch.", haveOutput = "InterruptStunAvoidChance", { format = "{0:output:InterruptStunAvoidChance}%", { modName = "AvoidInterruptStun" }, }, },
18541854
{ label = "Stun Duration", { format = "{2:output:StunDuration}s",

0 commit comments

Comments
 (0)