Skip to content

Commit cd0fb7d

Browse files
author
LocalIdentity
committed
Add support for int support gems
Ablation Ambush Danse Macabre Potential Rising Tempest Shock Siphon Soul Thief Spell Cascade Spell Echo Supercritical Unleash Withering Touch
1 parent 89a268e commit cd0fb7d

File tree

7 files changed

+171
-8
lines changed

7 files changed

+171
-8
lines changed

src/Data/SkillStatMap.lua

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -265,8 +265,8 @@ return {
265265
["skill_double_hits_when_dual_wielding"] = {
266266
skill("doubleHitsWhenDualWielding", true),
267267
},
268-
["base_spell_repeat_count"] = {
269-
mod("RepeatCount", "BASE", nil, 0, 0, {type = "SkillType", skillType = SkillType.Multicastable }),
268+
["support_spell_echo_number_of_echo_cascades"] = {
269+
mod("RepeatCount", "BASE", nil, 0, 0, {type = "SkillType", skillType = SkillType.Cascadable }),
270270
},
271271
["base_melee_attack_repeat_count"] = {
272272
mod("RepeatCount", "BASE", nil, 0, 0, { type = "SkillType", skillType = SkillType.Multistrikeable }),
@@ -422,6 +422,10 @@ return {
422422
mod("ElementalDamageManaLeech", "BASE", nil),
423423
div = 100,
424424
},
425+
["base_mana_leech_from_physical_attack_damage_permyriad"] = {
426+
mod("PhysicalDamageManaLeech", "BASE", nil, ModFlag.Attack),
427+
div = 100,
428+
},
425429
["base_life_leech_from_attack_damage_permyriad"] = {
426430
mod("DamageLifeLeech", "BASE", nil, ModFlag.Attack),
427431
div = 100,

src/Data/Skills/act_int.lua

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1198,6 +1198,9 @@ skills["BoneBlastPlayer"] = {
11981198
damageIncrementalEffectiveness = 0.0094999996945262,
11991199
statDescriptionScope = "bone_blast",
12001200
baseFlags = {
1201+
spell = true,
1202+
duration = true,
1203+
area = true,
12011204
},
12021205
constantStats = {
12031206
{ "base_skill_effect_duration", 1000 },

src/Data/Skills/sup_int.lua

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,11 @@ skills["SupportAblationPlayer"] = {
2222
label = "Ablation",
2323
incrementalEffectiveness = 0.054999999701977,
2424
statDescriptionScope = "gem_stat_descriptions",
25+
statMap = {
26+
["support_ablation_offering_skill_damage_+%_final"] = {
27+
mod("Damage", "MORE", nil, 0, 0, { type = "SkillType", skillType = SkillType.Offering }),
28+
},
29+
},
2530
baseFlags = {
2631
},
2732
constantStats = {
@@ -53,6 +58,11 @@ skills["SupportAmbushPlayer"] = {
5358
label = "Ambush",
5459
incrementalEffectiveness = 0.054999999701977,
5560
statDescriptionScope = "gem_stat_descriptions",
61+
statMap = {
62+
["support_ambush_critical_strike_chance_vs_enemies_on_full_life_+%_final"] = {
63+
mod("CritChance", "MORE", nil, 0, 0, { type = "ActorCondition", actor = "enemy", var = "FullLife" }),
64+
},
65+
},
5666
baseFlags = {
5767
},
5868
constantStats = {
@@ -911,6 +921,14 @@ skills["SupportDanseMacabrePlayer"] = {
911921
label = "Danse Macabre",
912922
incrementalEffectiveness = 0.054999999701977,
913923
statDescriptionScope = "gem_stat_descriptions",
924+
statMap = {
925+
["support_danse_macabre_offering_skill_damage_+%_final_if_consumed_additional_skeleton"] = {
926+
mod("Damage", "MORE", nil, 0, 0, { type = "SkillType", skillType = SkillType.Offering }),
927+
},
928+
["offering_spells_effect_+%_if_consumed_additional_skeleton"] = {
929+
mod("BuffEffect", "INC", nil, 0, 0, { type = "SkillType", skillType = SkillType.Offering }),
930+
},
931+
},
914932
baseFlags = {
915933
},
916934
constantStats = {
@@ -2353,6 +2371,11 @@ skills["SupportPotentialPlayer"] = {
23532371
label = "Potential",
23542372
incrementalEffectiveness = 0.054999999701977,
23552373
statDescriptionScope = "gem_stat_descriptions",
2374+
statMap = {
2375+
["skill_consume_power_charge_to_gain_critical_strike_chance_+%_final"] = {
2376+
mod("CritChance", "MORE", nil, 0, 0, { type = "Multiplier", var = "RemovablePowerCharge", limit = 1 }),
2377+
},
2378+
},
23562379
baseFlags = {
23572380
},
23582381
constantStats = {
@@ -2383,6 +2406,11 @@ skills["SupportTempestuousTempoPlayer"] = {
23832406
label = "Rising Tempest",
23842407
incrementalEffectiveness = 0.054999999701977,
23852408
statDescriptionScope = "gem_stat_descriptions",
2409+
statMap = {
2410+
["support_elemental_damage_+%_final_per_different_elemental_skill_used_recently"] = {
2411+
mod("ElementalDamage", "MORE", nil, 0, 0, { type = "Multiplier", var = "DifferentElementalSkillUsedRecently" }),
2412+
},
2413+
},
23862414
baseFlags = {
23872415
},
23882416
constantStats = {
@@ -2444,6 +2472,11 @@ skills["SupportEnergyShieldOnShockKillPlayer"] = {
24442472
incrementalEffectiveness = 0.012699999846518,
24452473
damageIncrementalEffectiveness = 0.061500001698732,
24462474
statDescriptionScope = "gem_stat_descriptions",
2475+
statMap = {
2476+
["support_recover_%_maximum_energy_shield_killing_shocked_enemies"] = {
2477+
mod("EnergyShieldOnKill", "BASE", nil, 0, 0, { type = "PercentStat", stat = "EnergyShield", percent = 1 }, { type = "ActorCondition", actor = "enemy", var = "Shocked" })
2478+
},
2479+
},
24472480
baseFlags = {
24482481
},
24492482
constantStats = {
@@ -2503,6 +2536,14 @@ skills["SupportSpellCascadePlayer"] = {
25032536
label = "Spell Cascade",
25042537
incrementalEffectiveness = 0.054999999701977,
25052538
statDescriptionScope = "gem_stat_descriptions",
2539+
statMap = {
2540+
["support_spell_cascade_area_of_effect_+%_final"] = {
2541+
mod("AreaOfEffect", "MORE", nil),
2542+
},
2543+
["support_spell_cascade_damage_+%_final"] = {
2544+
mod("Damage", "MORE", nil),
2545+
},
2546+
},
25062547
baseFlags = {
25072548
},
25082549
constantStats = {
@@ -2535,6 +2576,14 @@ skills["SupportSpellEchoPlayer"] = {
25352576
label = "Spell Echo",
25362577
incrementalEffectiveness = 0.092720001935959,
25372578
statDescriptionScope = "gem_stat_descriptions",
2579+
statMap = {
2580+
["support_multicast_cast_speed_+%_final"] = {
2581+
mod("Speed", "MORE", nil, ModFlag.Cast),
2582+
},
2583+
["support_spell_echo_area_of_effect_+%_final"] = {
2584+
mod("AreaOfEffect", "MORE", nil),
2585+
},
2586+
},
25382587
baseFlags = {
25392588
},
25402589
constantStats = {
@@ -2624,6 +2673,11 @@ skills["SupportIncreasedCriticalDamagePlayer"] = {
26242673
baseEffectiveness = 0,
26252674
incrementalEffectiveness = 0.092720001935959,
26262675
statDescriptionScope = "gem_stat_descriptions",
2676+
statMap = {
2677+
["support_critical_damage_critical_strike_chance_+%_final"] = {
2678+
mod("CritChance", "MORE", nil),
2679+
},
2680+
},
26272681
baseFlags = {
26282682
},
26292683
constantStats = {
@@ -2654,8 +2708,22 @@ skills["SupportUnleashPlayer"] = {
26542708
label = "Unleash",
26552709
incrementalEffectiveness = 0.092720001935959,
26562710
statDescriptionScope = "gem_stat_descriptions",
2711+
statMap = {
2712+
["support_anticipation_rapid_fire_count"] = {
2713+
mod("SealCount", "BASE", nil),
2714+
},
2715+
["unleash_support_seal_gain_frequency_as_%_of_total_cast_time"] = {
2716+
mod("SealGainFrequency", "BASE", nil),
2717+
},
2718+
["support_spell_rapid_fire_repeat_use_damage_+%_final"] = {
2719+
mod("SealRepeatPenalty", "MORE", nil),
2720+
},
2721+
},
26572722
baseFlags = {
26582723
},
2724+
baseMods = {
2725+
flag("HasSeals"),
2726+
},
26592727
constantStats = {
26602728
{ "support_spell_rapid_fire_repeat_use_damage_+%_final", -50 },
26612729
{ "unleash_support_seal_gain_frequency_as_%_of_total_cast_time", 200 },
@@ -2782,6 +2850,11 @@ skills["SupportWitheringTouchPlayer"] = {
27822850
label = "Withering Touch",
27832851
incrementalEffectiveness = 0.092720001935959,
27842852
statDescriptionScope = "gem_stat_descriptions",
2853+
statMap = {
2854+
["support_withering_touch_damage_+%_final"] = {
2855+
mod("Damage", "MORE", nil),
2856+
},
2857+
},
27852858
baseFlags = {
27862859
},
27872860
constantStats = {

src/Export/Skills/act_int.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ statMap = {
8484
#skill BoneBlastPlayer
8585
#startSets
8686
#set BoneBlastPlayer
87-
#flags
87+
#flags spell duration area
8888
#mods
8989
#skillEnd
9090

src/Export/Skills/sup_int.txt

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,22 @@ local skills, mod, flag, skill = ...
88
#skill SupportAblationPlayer
99
#startSets
1010
#set SupportAblationPlayer
11+
statMap = {
12+
["support_ablation_offering_skill_damage_+%_final"] = {
13+
mod("Damage", "MORE", nil, 0, 0, { type = "SkillType", skillType = SkillType.Offering }),
14+
},
15+
},
1116
#mods
1217
#skillEnd
1318

1419
#skill SupportAmbushPlayer
1520
#startSets
1621
#set SupportAmbushPlayer
22+
statMap = {
23+
["support_ambush_critical_strike_chance_vs_enemies_on_full_life_+%_final"] = {
24+
mod("CritChance", "MORE", nil, 0, 0, { type = "ActorCondition", actor = "enemy", var = "FullLife" }),
25+
},
26+
},
1727
#mods
1828
#skillEnd
1929

@@ -210,6 +220,14 @@ statMap = {
210220
#skill SupportDanseMacabrePlayer
211221
#startSets
212222
#set SupportDanseMacabrePlayer
223+
statMap = {
224+
["support_danse_macabre_offering_skill_damage_+%_final_if_consumed_additional_skeleton"] = {
225+
mod("Damage", "MORE", nil, 0, 0, { type = "SkillType", skillType = SkillType.Offering }),
226+
},
227+
["offering_spells_effect_+%_if_consumed_additional_skeleton"] = {
228+
mod("BuffEffect", "INC", nil, 0, 0, { type = "SkillType", skillType = SkillType.Offering }),
229+
},
230+
},
213231
#mods
214232
#skillEnd
215233

@@ -578,12 +596,22 @@ statMap = {
578596
#skill SupportPotentialPlayer
579597
#startSets
580598
#set SupportPotentialPlayer
599+
statMap = {
600+
["skill_consume_power_charge_to_gain_critical_strike_chance_+%_final"] = {
601+
mod("CritChance", "MORE", nil, 0, 0, { type = "Multiplier", var = "RemovablePowerCharge", limit = 1 }),
602+
},
603+
},
581604
#mods
582605
#skillEnd
583606

584607
#skill SupportTempestuousTempoPlayer
585608
#startSets
586609
#set SupportTempestuousTempoPlayer
610+
statMap = {
611+
["support_elemental_damage_+%_final_per_different_elemental_skill_used_recently"] = {
612+
mod("ElementalDamage", "MORE", nil, 0, 0, { type = "Multiplier", var = "DifferentElementalSkillUsedRecently" }),
613+
},
614+
},
587615
#mods
588616
#skillEnd
589617

@@ -596,6 +624,11 @@ statMap = {
596624
#skill SupportEnergyShieldOnShockKillPlayer
597625
#startSets
598626
#set SupportEnergyShieldOnShockKillPlayer
627+
statMap = {
628+
["support_recover_%_maximum_energy_shield_killing_shocked_enemies"] = {
629+
mod("EnergyShieldOnKill", "BASE", nil, 0, 0, { type = "PercentStat", stat = "EnergyShield", percent = 1 }, { type = "ActorCondition", actor = "enemy", var = "Shocked" })
630+
},
631+
},
599632
#mods
600633
#skillEnd
601634

@@ -608,12 +641,28 @@ statMap = {
608641
#skill SupportSpellCascadePlayer
609642
#startSets
610643
#set SupportSpellCascadePlayer
644+
statMap = {
645+
["support_spell_cascade_area_of_effect_+%_final"] = {
646+
mod("AreaOfEffect", "MORE", nil),
647+
},
648+
["support_spell_cascade_damage_+%_final"] = {
649+
mod("Damage", "MORE", nil),
650+
},
651+
},
611652
#mods
612653
#skillEnd
613654

614655
#skill SupportSpellEchoPlayer
615656
#startSets
616657
#set SupportSpellEchoPlayer
658+
statMap = {
659+
["support_multicast_cast_speed_+%_final"] = {
660+
mod("Speed", "MORE", nil, ModFlag.Cast),
661+
},
662+
["support_spell_echo_area_of_effect_+%_final"] = {
663+
mod("AreaOfEffect", "MORE", nil),
664+
},
665+
},
617666
#mods
618667
#skillEnd
619668

@@ -632,12 +681,29 @@ statMap = {
632681
#skill SupportIncreasedCriticalDamagePlayer
633682
#startSets
634683
#set SupportIncreasedCriticalDamagePlayer
684+
statMap = {
685+
["support_critical_damage_critical_strike_chance_+%_final"] = {
686+
mod("CritChance", "MORE", nil),
687+
},
688+
},
635689
#mods
636690
#skillEnd
637691

638692
#skill SupportUnleashPlayer
639693
#startSets
640694
#set SupportUnleashPlayer
695+
statMap = {
696+
["support_anticipation_rapid_fire_count"] = {
697+
mod("SealCount", "BASE", nil),
698+
},
699+
["unleash_support_seal_gain_frequency_as_%_of_total_cast_time"] = {
700+
mod("SealGainFrequency", "BASE", nil),
701+
},
702+
["support_spell_rapid_fire_repeat_use_damage_+%_final"] = {
703+
mod("SealRepeatPenalty", "MORE", nil),
704+
},
705+
},
706+
#baseMod flag("HasSeals")
641707
#mods
642708
#skillEnd
643709

@@ -656,5 +722,10 @@ statMap = {
656722
#skill SupportWitheringTouchPlayer
657723
#startSets
658724
#set SupportWitheringTouchPlayer
725+
statMap = {
726+
["support_withering_touch_damage_+%_final"] = {
727+
mod("Damage", "MORE", nil),
728+
},
729+
},
659730
#mods
660731
#skillEnd

src/Modules/CalcOffence.lua

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -868,7 +868,8 @@ function calcs.offence(env, actor, activeSkill)
868868

869869
if skillModList:Flag(nil, "HasSeals") and activeSkill.skillTypes[SkillType.CanRapidFire] and not skillModList:Flag(nil, "NoRepeatBonuses") then
870870
-- Applies DPS multiplier based on seals count
871-
output.SealCooldown = skillModList:Sum("BASE", skillCfg, "SealGainFrequency") / calcLib.mod(skillModList, skillCfg, "SealGainFrequency")
871+
local totalCastSpeed = 1 / activeSkill.activeEffect.grantedEffect.castTime * calcLib.mod(skillModList, skillCfg, "Speed")
872+
output.SealCooldown = 1 / totalCastSpeed * skillModList:Sum("BASE", skillCfg, "SealGainFrequency") / calcLib.mod(skillModList, skillCfg, "SealGainFrequency") / 100
872873
output.SealMax = skillModList:Sum("BASE", skillCfg, "SealCount")
873874
output.AverageBurstHits = output.SealMax
874875
output.TimeMaxSeals = output.SealCooldown * output.SealMax
@@ -880,19 +881,20 @@ function calcs.offence(env, actor, activeSkill)
880881
skillModList:NewMod("CritChance", "INC", mod.value, mod.source, mod.flags, mod.keywordFlags, unpack(mod))
881882
end
882883
env.player.mainSkill.skillData.dpsMultiplier = (1 + output.SealMax * calcLib.mod(skillModList, skillCfg, "SealRepeatPenalty"))
883-
env.player.mainSkill.skillData.hitTimeOverride = m_max(output.TimeMaxSeals, (1 / activeSkill.activeEffect.grantedEffect.castTime * 1.1 * calcLib.mod(skillModList, skillCfg, "Speed") * output.ActionSpeedMod))
884+
env.player.mainSkill.skillData.hitTimeOverride = m_max(output.TimeMaxSeals, totalCastSpeed * 1.1)
884885
else
885-
env.player.mainSkill.skillData.dpsMultiplier = 1 + 1 / output.SealCooldown / (1 / activeSkill.activeEffect.grantedEffect.castTime * 1.1 * calcLib.mod(skillModList, skillCfg, "Speed") * output.ActionSpeedMod) * calcLib.mod(skillModList, skillCfg, "SealRepeatPenalty")
886+
env.player.mainSkill.skillData.dpsMultiplier = 1 + 1 / output.SealCooldown / (totalCastSpeed * 1.1) * calcLib.mod(skillModList, skillCfg, "SealRepeatPenalty")
886887
end
887888
end
888889

889890
if breakdown then
890891
breakdown.SealGainTime = { }
891892
breakdown.multiChain(breakdown.SealGainTime, {
892893
label = "Gain frequency:",
893-
base = { "%.2fs ^8(base gain frequency)", skillModList:Sum("BASE", skillCfg, "SealGainFrequency") },
894+
base = { "%.2fs ^8(base cast time)", activeSkill.activeEffect.grantedEffect.castTime },
894895
{ "%.2f ^8(increased/reduced gain frequency)", 1 + skillModList:Sum("INC", skillCfg, "SealGainFrequency") / 100 },
895-
{ "%.2f ^8(action speed modifier)", output.ActionSpeedMod },
896+
{ "%d%% ^8(of cast time)", skillModList:Sum("BASE", skillCfg, "SealGainFrequency") },
897+
{ "%.2f ^8(increased/reduced cast speed)", 1 / calcLib.mod(skillModList, skillCfg, "Speed") },
896898
total = s_format("= %.2fs ^8per Seal", output.SealCooldown),
897899
})
898900
end

src/Modules/ConfigOptions.lua

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -488,6 +488,16 @@ local configSettings = {
488488
{ var = "animateWeaponLingeringBlade", type = "check", label = "Are you animating Lingering Blades?", ifSkill = "Animate Weapon", tooltip = "Enables additional damage given to Lingering Blades\nThe exact weapon is unknown but should be similar to Glass Shank", apply = function(val, modList, enemyModList)
489489
modList:NewMod("Condition:AnimatingLingeringBlades", "FLAG", true, "Config")
490490
end },
491+
{ label = "Rising Tempest:", ifSkill = "Rising Tempest" },
492+
{ var = "risingTempestLightning", type = "check", label = "Lightning Skill used Recently:", ifSkill = "Rising Tempest", apply = function(val, modList, enemyModList)
493+
modList:NewMod("Multiplier:DifferentElementalSkillUsedRecently", "BASE", 1, "Config")
494+
end },
495+
{ var = "risingTempestCold", type = "check", label = "Cold Skill used Recently:", ifSkill = "Rising Tempest", apply = function(val, modList, enemyModList)
496+
modList:NewMod("Multiplier:DifferentElementalSkillUsedRecently", "BASE", 1, "Config")
497+
end },
498+
{ var = "risingTempestFire", type = "check", label = "Fire Skill used Recently:", ifSkill = "Rising Tempest", apply = function(val, modList, enemyModList)
499+
modList:NewMod("Multiplier:DifferentElementalSkillUsedRecently", "BASE", 1, "Config")
500+
end },
491501
{ label = "Shrapnel Ballista:", ifSkill = "Shrapnel Ballista", includeTransfigured = true },
492502
{ var = "ShrapnelBallistaProjectileOverlap", type = "count", label = "# of Shotgunning Projectiles:", tooltip = "Maximum is limited by the number of Projectiles., default of 1, if Arrow nova then default of maximum projectiles", ifSkill = "Shrapnel Ballista", includeTransfigured = true, apply = function(val, modList, enemyModList)
493503
modList:NewMod("SkillData", "LIST", { key = "ShrapnelBallistaProjectileOverlap", value = val }, "Config", { type = "SkillName", skillName = "Shrapnel Ballista", includeTransfigured = true })

0 commit comments

Comments
 (0)