diff --git a/src/Data/ModCache.lua b/src/Data/ModCache.lua index 930e53b57c..cb0f2aa683 100755 --- a/src/Data/ModCache.lua +++ b/src/Data/ModCache.lua @@ -2907,7 +2907,7 @@ c["Mana Recovery from Regeneration is not applied"]={{[1]={flags=0,keywordFlags= c["Mark Skills have 10% increased Cast Speed"]={{[1]={[1]={skillType=109,type="SkillType"},flags=16,keywordFlags=0,name="Speed",type="INC",value=10}},nil} c["Mark Skills have 25% increased Skill Effect Duration"]={{[1]={[1]={skillType=109,type="SkillType"},flags=0,keywordFlags=0,name="Duration",type="INC",value=25}},nil} c["Mark Skills have 60% increased Skill Effect Duration"]={{[1]={[1]={skillType=109,type="SkillType"},flags=0,keywordFlags=0,name="Duration",type="INC",value=60}},nil} -c["Maximum 10 Demonflame"]={nil,"Maximum 10 Demonflame "} +c["Maximum 10 Demonflame"]={{[1]={flags=0,keywordFlags=0,name="Condition:MasteredDarknessLimit",type="FLAG",value=true}},nil} c["Maximum 10 Fragile Regrowth"]={nil,"Maximum 10 Fragile Regrowth "} c["Maximum 10 Fragile Regrowth 0.5% of Life Regenerated per second per Fragile Regrowth"]={nil,"Maximum 10 Fragile Regrowth 0.5% of Life Regenerated per second per Fragile Regrowth "} c["Maximum Life becomes 1, Immune to Chaos Damage"]={{[1]={flags=0,keywordFlags=0,name="ChaosInoculation",type="FLAG",value=true},[2]={flags=0,keywordFlags=0,name="ChaosDamageTaken",type="MORE",value=-100}},nil} diff --git a/src/Data/Skills/other.lua b/src/Data/Skills/other.lua index f6b203a82f..9b1fa04abc 100644 --- a/src/Data/Skills/other.lua +++ b/src/Data/Skills/other.lua @@ -574,6 +574,18 @@ skills["DemonFormPlayer"] = { label = "Demon Form", incrementalEffectiveness = 0.054999999701977, statDescriptionScope = "demon_transformation", + statMap = { + ["demon_form_spell_damage_+%_per_stack"] = { + mod("Damage", "INC", nil, 0, KeywordFlag.Spell, { type = "GlobalEffect", effectType = "Buff", effectName = "Demon Form"}, { type = "Multiplier", var = "DemonFlameStacks" }, { type = "StatThreshold", stat = "Life", threshold = 2 } ), + }, + ["demon_form_grants_cast_speed_+%"] = { + mod("Speed", "INC", nil, ModFlag.Cast, 0, { type = "GlobalEffect", effectType = "Buff", effectName = "Demon Form" }, { type = "StatThreshold", stat = "Life", threshold = 2 } ), + }, + ["demon_form_life_loss_%_per_minute_per_stack"] = { + mod("LifeDemonDegenPercent", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Buff", effectName = "Demon Form" }, { type = "StatThreshold", stat = "Life", threshold = 2 } ), + div = 60, + }, + }, baseFlags = { }, constantStats = { diff --git a/src/Export/Skills/other.txt b/src/Export/Skills/other.txt index 51566a9c09..85a163c6c1 100644 --- a/src/Export/Skills/other.txt +++ b/src/Export/Skills/other.txt @@ -43,6 +43,18 @@ statMap = { #skill DemonFormPlayer #set DemonFormPlayer #flags +statMap = { + ["demon_form_spell_damage_+%_per_stack"] = { + mod("Damage", "INC", nil, 0, KeywordFlag.Spell, { type = "GlobalEffect", effectType = "Buff", effectName = "Demon Form"}, { type = "Multiplier", var = "DemonFlameStacks" }, { type = "StatThreshold", stat = "Life", threshold = 2 } ), + }, + ["demon_form_grants_cast_speed_+%"] = { + mod("Speed", "INC", nil, ModFlag.Cast, 0, { type = "GlobalEffect", effectType = "Buff", effectName = "Demon Form" }, { type = "StatThreshold", stat = "Life", threshold = 2 } ), + }, + ["demon_form_life_loss_%_per_minute_per_stack"] = { + mod("LifeDemonDegenPercent", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Buff", effectName = "Demon Form" }, { type = "StatThreshold", stat = "Life", threshold = 2 } ), + div = 60, + }, +}, #mods #skillEnd diff --git a/src/Modules/CalcDefence.lua b/src/Modules/CalcDefence.lua index 44b163591a..41912caaaf 100644 --- a/src/Modules/CalcDefence.lua +++ b/src/Modules/CalcDefence.lua @@ -1398,7 +1398,11 @@ function calcs.defence(env, actor) output[resource.."Regen"] = regenRate end output[resource.."RegenInc"] = inc - local baseDegen = (modDB:Sum("BASE", nil, resource.."Degen") + pool * modDB:Sum("BASE", nil, resource.."DegenPercent") / 100) + if resourceName == "Life" and modDB:Sum("BASE", nil, "LifeDemonDegenPercent") > 0 then + local demonFormDegen = m_max(pool * modDB:Sum("BASE", nil, "LifeDemonDegenPercent") / 100, 1) * modDB:Sum("BASE", nil, "Multiplier:DemonFlameStacks") + modDB:NewMod("LifeDegen", "BASE", demonFormDegen, "Demon Flame Degen") + end + local baseDegen = modDB:Sum("BASE", nil, resource.."Degen") + pool * modDB:Sum("BASE", nil, resource.."DegenPercent") / 100 local degenRate = (baseDegen > 0) and baseDegen * calcLib.mod(modDB, nil, resource.."Degen") or 0 output[resource.."Degen"] = degenRate local recoveryRate = modDB:Sum("BASE", nil, resource.."Recovery") * recoveryRateMod diff --git a/src/Modules/ConfigOptions.lua b/src/Modules/ConfigOptions.lua index 44f19bb278..6a06de0fc5 100644 --- a/src/Modules/ConfigOptions.lua +++ b/src/Modules/ConfigOptions.lua @@ -320,6 +320,11 @@ local configSettings = { { var = "darkPactSkeletonLife", type = "count", label = "Skeleton ^xE05030Life:", ifSkill = "Dark Pact", tooltip = "Sets the maximum ^xE05030Life ^7of the Skeleton that is being targeted.", apply = function(val, modList, enemyModList) modList:NewMod("SkillData", "LIST", { key = "skeletonLife", value = val }, "Config", { type = "SkillName", skillName = "Dark Pact" }) end }, + { label = "Demon Form:", ifSkill = "Demon Form" }, + { var = "demonFormStacks", type = "count", label = "Demonflame Stacks", ifSkill = "Demon Form", apply = function(val, modList, enemyModList) + modList:NewMod("Multiplier:DemonFlameStacks", "BASE", val, "Config", { type = "Condition", var = "MasteredDarknessLimit", neg = true} ) + modList:NewMod("Multiplier:DemonFlameStacks", "BASE", m_min(val, 10), "Config", { type = "Condition", var = "MasteredDarknessLimit"} ) + end }, { label = "Doom Blast:", ifSkill = "Doom Blast" }, { var = "doomBlastSource", type = "list", label = "Doom Blast Trigger Source:", ifSkill = "Doom Blast", list = {{val="expiration",label="Curse Expiration"},{val="replacement",label="Curse Replacement"},{val="vixen",label="Vixen's Curse"},{val="hexblast",label="Hexblast Replacement"}}, defaultIndex = 3}, { var = "curseOverlaps", type = "count", label = "Curse overlaps:", ifSkill = "Doom Blast", ifFlag = "UsesCurseOverlaps", apply = function(val, modList, enemyModList) diff --git a/src/Modules/ModParser.lua b/src/Modules/ModParser.lua index eddf4962f2..f18fd90245 100644 --- a/src/Modules/ModParser.lua +++ b/src/Modules/ModParser.lua @@ -2890,6 +2890,8 @@ local specialModList = { mod("Speed", "MORE", num, nil, ModFlag.Cast, { type = "GlobalEffect", effectType = "Buff", effectName = "Quicksand Hourglass" }, { type = "Condition", var = "QuicksandHourglass" }), flag("Condition:CanGainQuicksandHourglass") } end, + -- Witch -- Infernalist + ["maximum 10 demonflame"] = { flag("Condition:MasteredDarknessLimit") }, -- Item local modifiers ["has no sockets"] = { flag("NoSockets") }, ["reflects your other ring"] = {