diff --git a/src/Data/ModCache.lua b/src/Data/ModCache.lua index 1c9a049124..0788468114 100755 --- a/src/Data/ModCache.lua +++ b/src/Data/ModCache.lua @@ -4426,7 +4426,7 @@ c["Defend with 200% of Armour during effect"]={nil,"Defend with 200% of Armour d c["Deflected Hits cannot inflict Bleeding on you"]={nil,"Deflected Hits cannot inflict Bleeding on you "} c["Deflected Hits cannot inflict Maim on you"]={nil,"Deflected Hits cannot inflict Maim on you "} c["Deflected Hits cannot inflict Maim on you Deflected Hits cannot inflict Bleeding on you"]={nil,"Deflected Hits cannot inflict Maim on you Deflected Hits cannot inflict Bleeding on you "} -c["Demonflame has no maximum"]={nil,"Demonflame has no maximum "} +c["Demonflame has no maximum"]={{[1]={flags=0,keywordFlags=0,name="Multiplier:DemonFlameMaximum",type="BASE",value=999}},nil} c["Detonator skills have 40% increased Area of Effect"]={nil,"Detonator skills have 40% increased Area of Effect "} c["Detonator skills have 40% increased Area of Effect Detonator skills have 80% reduced damage"]={nil,"Detonator skills have 40% increased Area of Effect Detonator skills have 80% reduced damage "} c["Detonator skills have 8% increased Area of Effect"]={nil,"Detonator skills have 8% increased Area of Effect "} diff --git a/src/Data/Skills/other.lua b/src/Data/Skills/other.lua index cf479e87d7..a913e389b9 100644 --- a/src/Data/Skills/other.lua +++ b/src/Data/Skills/other.lua @@ -1616,6 +1616,18 @@ skills["DemonFormPlayer"] = { label = "Demon Form", incrementalEffectiveness = 0.054999999701977, statDescriptionScope = "demon_transformation", + statMap = { + ["demon_form_spell_damage_+%_final_per_stack"] = { + mod("Damage", "MORE", nil, 0, KeywordFlag.Spell, { type = "Condition", var = "DemonForm" }, { type = "GlobalEffect", effectType = "Buff", effectName = "Demon Form"}, { type = "Multiplier", var = "DemonFlameStacks", limitVar = "DemonFlameMaximum" } ), + }, + ["demon_form_grants_cast_speed_+%"] = { + mod("Speed", "INC", nil, ModFlag.Cast, 0, { type = "Condition", var = "DemonForm" }, { type = "GlobalEffect", effectType = "Buff", effectName = "Demon Form" } ), + }, + ["demon_form_life_loss_per_minute_per_stack"] = { + mod("LifeDegen", "BASE", nil, 0, 0, { type = "Condition", var = "DemonForm" }, { type = "GlobalEffect", effectType = "Buff", effectName = "Demon Form" }, { type = "Multiplier", var = "DemonFlameStacks", limitVar = "DemonFlameMaximum" } ), + div = 60, + }, + }, baseFlags = { }, constantStats = { diff --git a/src/Export/Skills/other.txt b/src/Export/Skills/other.txt index a788d826e5..923fd070c2 100644 --- a/src/Export/Skills/other.txt +++ b/src/Export/Skills/other.txt @@ -112,6 +112,18 @@ statMap = { #skill DemonFormPlayer #set DemonFormPlayer #flags +statMap = { + ["demon_form_spell_damage_+%_final_per_stack"] = { + mod("Damage", "MORE", nil, 0, KeywordFlag.Spell, { type = "Condition", var = "DemonForm" }, { type = "GlobalEffect", effectType = "Buff", effectName = "Demon Form"}, { type = "Multiplier", var = "DemonFlameStacks", limitVar = "DemonFlameMaximum" } ), + }, + ["demon_form_grants_cast_speed_+%"] = { + mod("Speed", "INC", nil, ModFlag.Cast, 0, { type = "Condition", var = "DemonForm" }, { type = "GlobalEffect", effectType = "Buff", effectName = "Demon Form" } ), + }, + ["demon_form_life_loss_per_minute_per_stack"] = { + mod("LifeDegen", "BASE", nil, 0, 0, { type = "Condition", var = "DemonForm" }, { type = "GlobalEffect", effectType = "Buff", effectName = "Demon Form" }, { type = "Multiplier", var = "DemonFlameStacks", limitVar = "DemonFlameMaximum" } ), + div = 60, + }, +}, #mods #skillEnd diff --git a/src/Modules/CalcDefence.lua b/src/Modules/CalcDefence.lua index ea48705973..5c3631576a 100644 --- a/src/Modules/CalcDefence.lua +++ b/src/Modules/CalcDefence.lua @@ -1624,7 +1624,7 @@ 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) + 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/CalcSetup.lua b/src/Modules/CalcSetup.lua index 13627c259d..471400dfb3 100644 --- a/src/Modules/CalcSetup.lua +++ b/src/Modules/CalcSetup.lua @@ -595,6 +595,7 @@ function calcs.initEnv(build, mode, override, specEnv) modDB:NewMod("MaximumValour", "BASE", 50, "Base") modDB:NewMod("SoulEaterMax", "BASE", 45, "Base") modDB:NewMod("Multiplier:IntensityLimit", "BASE", 3, "Base") + modDB:NewMod("Multiplier:DemonFlameMaximum", "BASE", 10, "Base") modDB:NewMod("Damage", "INC", data.characterConstants["damage_+%_per_10_rampage_stacks"], "Base", { type = "Multiplier", var = "Rampage", limit = data.characterConstants["max_rampage_stacks"] / 20, div = 20 }) modDB:NewMod("MovementSpeed", "INC", data.characterConstants["movement_velocity_+%_per_10_rampage_stacks"], "Base", { type = "Multiplier", var = "Rampage", limit = data.characterConstants["max_rampage_stacks"] / 20, div = 20 }) modDB:NewMod("Speed", "INC", 5, "Base", ModFlag.Attack, { type = "Multiplier", var = "SoulEater"}) diff --git a/src/Modules/ConfigOptions.lua b/src/Modules/ConfigOptions.lua index cfbacabbe3..ddbbf4b2bd 100644 --- a/src/Modules/ConfigOptions.lua +++ b/src/Modules/ConfigOptions.lua @@ -335,6 +335,13 @@ 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 = "inDemonForm", type = "check", label = "Are you in Demon Form?", ifSkill = "Demon Form", defaultState = true, tooltip = "Players need a minimum of 2 ^xE05030Life ^7to enter Demon Form, so you cannot use it with Chaos Inoculation", apply = function(val, modList, enemyModList) + modList:NewMod("Condition:DemonForm", "FLAG", true, "Config", { type = "StatThreshold", stat = "Life", threshold = 2 }) + end }, + { var = "demonFormStacks", type = "count", label = "Demonflame Stacks", ifSkill = "Demon Form", defaultPlaceholderState = 10, apply = function(val, modList, enemyModList) + modList:NewMod("Multiplier:DemonFlameStacks", "BASE", val, "Config", { type = "Condition", var = "DemonForm" } ) + 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 3916b2c56f..298ce3294b 100644 --- a/src/Modules/ModParser.lua +++ b/src/Modules/ModParser.lua @@ -3096,6 +3096,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 + ["demonflame has no maximum"] = { mod("Multiplier:DemonFlameMaximum", "BASE", 999) }, -- Item local modifiers ["has no sockets"] = { flag("NoSockets") }, ["reflects your other ring"] = { diff --git a/src/Modules/StatDescriber.lua b/src/Modules/StatDescriber.lua index 79efb671a2..bff1886447 100644 --- a/src/Modules/StatDescriber.lua +++ b/src/Modules/StatDescriber.lua @@ -136,8 +136,8 @@ local function applySpecial(val, spec) val[spec.v].max = val[spec.v].max / 1000 val[spec.v].fmt = "g" elseif spec.k == "per_minute_to_per_second" then - val[spec.v].min = val[spec.v].min / 60 - val[spec.v].max = val[spec.v].max / 60 + val[spec.v].min = floor(val[spec.v].min / 60, 1) + val[spec.v].max = floor(val[spec.v].max / 60, 1) val[spec.v].fmt = "g" elseif spec.k == "per_minute_to_per_second_0dp" then val[spec.v].min = round(val[spec.v].min / 60)