From 99317531524d44289538d02f7e8fa9996fd57943 Mon Sep 17 00:00:00 2001 From: Blitz54 Date: Sun, 9 Feb 2025 02:28:43 -0600 Subject: [PATCH 01/10] Add support for Demon Form --- src/Data/ModCache.lua | 2 +- src/Data/Skills/other.lua | 13 +++++++++++++ src/Export/Skills/other.txt | 13 +++++++++++++ src/Modules/ConfigOptions.lua | 5 +++++ src/Modules/ModParser.lua | 2 ++ 5 files changed, 34 insertions(+), 1 deletion(-) 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..76b75ff21f 100644 --- a/src/Data/Skills/other.lua +++ b/src/Data/Skills/other.lua @@ -574,6 +574,19 @@ skills["DemonFormPlayer"] = { label = "Demon Form", incrementalEffectiveness = 0.054999999701977, statDescriptionScope = "demon_transformation", + statMap = { + ["demon_form_spell_damage_+%_per_stack"] = { + mod("Damage", "MORE", nil, 0, KeywordFlag.Spell, { type = "GlobalEffect", effectType = "Buff", effectName = "Demon Form"}, { type = "Multiplier", var = "DemonflameStacks" } ), + }, + ["demon_form_grants_cast_speed_+%"] = { + mod("Speed", "INC", nil, 0, KeywordFlag.Spell, { type = "GlobalEffect", effectType = "Buff", effectName = "Demon Form" }, { type = "Multiplier", var = "DemonflameStacks" } ), + }, + ["demon_form_life_loss_%_per_minute_per_stack"] = { + mod("LifeRegenPercent", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Buff", effectName = "Demon Form" }, { type = "Multiplier", var = "DemonflameStacks" } ), + div = 60, + mult = -1, + }, + }, baseFlags = { }, constantStats = { diff --git a/src/Export/Skills/other.txt b/src/Export/Skills/other.txt index 51566a9c09..177d225fd6 100644 --- a/src/Export/Skills/other.txt +++ b/src/Export/Skills/other.txt @@ -43,6 +43,19 @@ statMap = { #skill DemonFormPlayer #set DemonFormPlayer #flags +statMap = { + ["demon_form_spell_damage_+%_per_stack"] = { + mod("Damage", "MORE", nil, 0, KeywordFlag.Spell, { type = "GlobalEffect", effectType = "Buff", effectName = "Demon Form"}, { type = "Multiplier", var = "DemonflameStacks" } ), + }, + ["demon_form_grants_cast_speed_+%"] = { + mod("Speed", "INC", nil, 0, KeywordFlag.Spell, { type = "GlobalEffect", effectType = "Buff", effectName = "Demon Form" }, { type = "Multiplier", var = "DemonflameStacks" } ), + }, + ["demon_form_life_loss_%_per_minute_per_stack"] = { + mod("LifeRegenPercent", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Buff", effectName = "Demon Form" }, { type = "Multiplier", var = "DemonflameStacks" } ), + div = 60, + mult = -1, + }, +}, #mods #skillEnd diff --git a/src/Modules/ConfigOptions.lua b/src/Modules/ConfigOptions.lua index 44f19bb278..79346f65cd 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 = "Demon Form 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"] = { From 6a02f3f620961b885b5910c0445f86c6a1f509fe Mon Sep 17 00:00:00 2001 From: Blitz54 Date: Sun, 9 Feb 2025 03:00:23 -0600 Subject: [PATCH 02/10] fix1 --- src/Data/Skills/other.lua | 2 +- src/Export/Skills/other.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Data/Skills/other.lua b/src/Data/Skills/other.lua index 76b75ff21f..edad70ef60 100644 --- a/src/Data/Skills/other.lua +++ b/src/Data/Skills/other.lua @@ -576,7 +576,7 @@ skills["DemonFormPlayer"] = { statDescriptionScope = "demon_transformation", statMap = { ["demon_form_spell_damage_+%_per_stack"] = { - mod("Damage", "MORE", nil, 0, KeywordFlag.Spell, { type = "GlobalEffect", effectType = "Buff", effectName = "Demon Form"}, { type = "Multiplier", var = "DemonflameStacks" } ), + mod("Damage", "INC", nil, 0, KeywordFlag.Spell, { type = "GlobalEffect", effectType = "Buff", effectName = "Demon Form"}, { type = "Multiplier", var = "DemonflameStacks" } ), }, ["demon_form_grants_cast_speed_+%"] = { mod("Speed", "INC", nil, 0, KeywordFlag.Spell, { type = "GlobalEffect", effectType = "Buff", effectName = "Demon Form" }, { type = "Multiplier", var = "DemonflameStacks" } ), diff --git a/src/Export/Skills/other.txt b/src/Export/Skills/other.txt index 177d225fd6..be11eb4af7 100644 --- a/src/Export/Skills/other.txt +++ b/src/Export/Skills/other.txt @@ -45,7 +45,7 @@ statMap = { #flags statMap = { ["demon_form_spell_damage_+%_per_stack"] = { - mod("Damage", "MORE", nil, 0, KeywordFlag.Spell, { type = "GlobalEffect", effectType = "Buff", effectName = "Demon Form"}, { type = "Multiplier", var = "DemonflameStacks" } ), + mod("Damage", "INC", nil, 0, KeywordFlag.Spell, { type = "GlobalEffect", effectType = "Buff", effectName = "Demon Form"}, { type = "Multiplier", var = "DemonflameStacks" } ), }, ["demon_form_grants_cast_speed_+%"] = { mod("Speed", "INC", nil, 0, KeywordFlag.Spell, { type = "GlobalEffect", effectType = "Buff", effectName = "Demon Form" }, { type = "Multiplier", var = "DemonflameStacks" } ), From 9061a6158be2df8bb21b0a1c29e2daf2584fad54 Mon Sep 17 00:00:00 2001 From: Blitz54 Date: Sun, 9 Feb 2025 03:06:58 -0600 Subject: [PATCH 03/10] fix2 --- src/Data/Skills/other.lua | 2 +- src/Export/Skills/other.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Data/Skills/other.lua b/src/Data/Skills/other.lua index edad70ef60..52db79b563 100644 --- a/src/Data/Skills/other.lua +++ b/src/Data/Skills/other.lua @@ -579,7 +579,7 @@ skills["DemonFormPlayer"] = { mod("Damage", "INC", nil, 0, KeywordFlag.Spell, { type = "GlobalEffect", effectType = "Buff", effectName = "Demon Form"}, { type = "Multiplier", var = "DemonflameStacks" } ), }, ["demon_form_grants_cast_speed_+%"] = { - mod("Speed", "INC", nil, 0, KeywordFlag.Spell, { type = "GlobalEffect", effectType = "Buff", effectName = "Demon Form" }, { type = "Multiplier", var = "DemonflameStacks" } ), + mod("Speed", "INC", nil, ModFlag.Cast, 0, { type = "GlobalEffect", effectType = "Buff", effectName = "Demon Form" }, { type = "Multiplier", var = "DemonflameStacks" } ), }, ["demon_form_life_loss_%_per_minute_per_stack"] = { mod("LifeRegenPercent", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Buff", effectName = "Demon Form" }, { type = "Multiplier", var = "DemonflameStacks" } ), diff --git a/src/Export/Skills/other.txt b/src/Export/Skills/other.txt index be11eb4af7..7223e1d550 100644 --- a/src/Export/Skills/other.txt +++ b/src/Export/Skills/other.txt @@ -48,7 +48,7 @@ statMap = { mod("Damage", "INC", nil, 0, KeywordFlag.Spell, { type = "GlobalEffect", effectType = "Buff", effectName = "Demon Form"}, { type = "Multiplier", var = "DemonflameStacks" } ), }, ["demon_form_grants_cast_speed_+%"] = { - mod("Speed", "INC", nil, 0, KeywordFlag.Spell, { type = "GlobalEffect", effectType = "Buff", effectName = "Demon Form" }, { type = "Multiplier", var = "DemonflameStacks" } ), + mod("Speed", "INC", nil, ModFlag.Cast, 0, { type = "GlobalEffect", effectType = "Buff", effectName = "Demon Form" }, { type = "Multiplier", var = "DemonflameStacks" } ), }, ["demon_form_life_loss_%_per_minute_per_stack"] = { mod("LifeRegenPercent", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Buff", effectName = "Demon Form" }, { type = "Multiplier", var = "DemonflameStacks" } ), From 62fab08c3ee2a2e2e0386568dd919b602f74e505 Mon Sep 17 00:00:00 2001 From: Blitz54 Date: Sun, 9 Feb 2025 03:10:50 -0600 Subject: [PATCH 04/10] fixs --- src/Modules/ConfigOptions.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Modules/ConfigOptions.lua b/src/Modules/ConfigOptions.lua index 79346f65cd..2847803125 100644 --- a/src/Modules/ConfigOptions.lua +++ b/src/Modules/ConfigOptions.lua @@ -321,7 +321,7 @@ local configSettings = { 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 = "Demon Form Stacks", ifSkill = "Demon Form", apply = function(val, modList, enemyModList) + { 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 }, From 3239e43d883aeff042080d4aa3e3e39b0b5e7d75 Mon Sep 17 00:00:00 2001 From: Blitz54 Date: Sun, 9 Feb 2025 11:55:21 -0600 Subject: [PATCH 05/10] fix4 --- src/Data/Skills/other.lua | 2 +- src/Export/Skills/other.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Data/Skills/other.lua b/src/Data/Skills/other.lua index 52db79b563..3e07533b8e 100644 --- a/src/Data/Skills/other.lua +++ b/src/Data/Skills/other.lua @@ -579,7 +579,7 @@ skills["DemonFormPlayer"] = { mod("Damage", "INC", nil, 0, KeywordFlag.Spell, { type = "GlobalEffect", effectType = "Buff", effectName = "Demon Form"}, { type = "Multiplier", var = "DemonflameStacks" } ), }, ["demon_form_grants_cast_speed_+%"] = { - mod("Speed", "INC", nil, ModFlag.Cast, 0, { type = "GlobalEffect", effectType = "Buff", effectName = "Demon Form" }, { type = "Multiplier", var = "DemonflameStacks" } ), + mod("Speed", "INC", nil, ModFlag.Cast, 0, { type = "GlobalEffect", effectType = "Buff", effectName = "Demon Form" } ), }, ["demon_form_life_loss_%_per_minute_per_stack"] = { mod("LifeRegenPercent", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Buff", effectName = "Demon Form" }, { type = "Multiplier", var = "DemonflameStacks" } ), diff --git a/src/Export/Skills/other.txt b/src/Export/Skills/other.txt index 7223e1d550..61ad00b732 100644 --- a/src/Export/Skills/other.txt +++ b/src/Export/Skills/other.txt @@ -48,7 +48,7 @@ statMap = { mod("Damage", "INC", nil, 0, KeywordFlag.Spell, { type = "GlobalEffect", effectType = "Buff", effectName = "Demon Form"}, { type = "Multiplier", var = "DemonflameStacks" } ), }, ["demon_form_grants_cast_speed_+%"] = { - mod("Speed", "INC", nil, ModFlag.Cast, 0, { type = "GlobalEffect", effectType = "Buff", effectName = "Demon Form" }, { type = "Multiplier", var = "DemonflameStacks" } ), + mod("Speed", "INC", nil, ModFlag.Cast, 0, { type = "GlobalEffect", effectType = "Buff", effectName = "Demon Form" } ), }, ["demon_form_life_loss_%_per_minute_per_stack"] = { mod("LifeRegenPercent", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Buff", effectName = "Demon Form" }, { type = "Multiplier", var = "DemonflameStacks" } ), From 0e0e2e69eee95ef4b6fb8a88c16fbf6caf4fc81d Mon Sep 17 00:00:00 2001 From: Blitz54 Date: Sun, 9 Feb 2025 12:06:24 -0600 Subject: [PATCH 06/10] removed a space --- src/Data/Skills/other.lua | 2 +- src/Export/Skills/other.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Data/Skills/other.lua b/src/Data/Skills/other.lua index 3e07533b8e..15d45951e8 100644 --- a/src/Data/Skills/other.lua +++ b/src/Data/Skills/other.lua @@ -576,7 +576,7 @@ skills["DemonFormPlayer"] = { 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" } ), + mod("Damage", "INC", nil, 0, KeywordFlag.Spell, { type = "GlobalEffect", effectType = "Buff", effectName = "Demon Form"}, { type = "Multiplier", var = "DemonflameStacks" } ), }, ["demon_form_grants_cast_speed_+%"] = { mod("Speed", "INC", nil, ModFlag.Cast, 0, { type = "GlobalEffect", effectType = "Buff", effectName = "Demon Form" } ), diff --git a/src/Export/Skills/other.txt b/src/Export/Skills/other.txt index 61ad00b732..ac33db744e 100644 --- a/src/Export/Skills/other.txt +++ b/src/Export/Skills/other.txt @@ -45,7 +45,7 @@ statMap = { #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" } ), + mod("Damage", "INC", nil, 0, KeywordFlag.Spell, { type = "GlobalEffect", effectType = "Buff", effectName = "Demon Form"}, { type = "Multiplier", var = "DemonflameStacks" } ), }, ["demon_form_grants_cast_speed_+%"] = { mod("Speed", "INC", nil, ModFlag.Cast, 0, { type = "GlobalEffect", effectType = "Buff", effectName = "Demon Form" } ), From a5a5245cc639f54cc4b587719b5fa7ca7a86d69f Mon Sep 17 00:00:00 2001 From: LocalIdentity Date: Mon, 10 Feb 2025 15:57:10 +1100 Subject: [PATCH 07/10] Fix Demon Flame degen at low health Demon flame degens a minimum of 1 life per stack --- src/Data/Skills/other.lua | 5 ++--- src/Export/Skills/other.txt | 5 ++--- src/Modules/CalcDefence.lua | 3 ++- src/Modules/ConfigOptions.lua | 4 ++-- 4 files changed, 8 insertions(+), 9 deletions(-) diff --git a/src/Data/Skills/other.lua b/src/Data/Skills/other.lua index 15d45951e8..599553d5c4 100644 --- a/src/Data/Skills/other.lua +++ b/src/Data/Skills/other.lua @@ -576,15 +576,14 @@ skills["DemonFormPlayer"] = { 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" } ), + mod("Damage", "INC", nil, 0, KeywordFlag.Spell, { type = "GlobalEffect", effectType = "Buff", effectName = "Demon Form"}, { type = "Multiplier", var = "DemonFlameStacks" } ), }, ["demon_form_grants_cast_speed_+%"] = { mod("Speed", "INC", nil, ModFlag.Cast, 0, { type = "GlobalEffect", effectType = "Buff", effectName = "Demon Form" } ), }, ["demon_form_life_loss_%_per_minute_per_stack"] = { - mod("LifeRegenPercent", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Buff", effectName = "Demon Form" }, { type = "Multiplier", var = "DemonflameStacks" } ), + mod("LifeDemonDegenPercent", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Buff", effectName = "Demon Form" } ), div = 60, - mult = -1, }, }, baseFlags = { diff --git a/src/Export/Skills/other.txt b/src/Export/Skills/other.txt index ac33db744e..6408c2273c 100644 --- a/src/Export/Skills/other.txt +++ b/src/Export/Skills/other.txt @@ -45,15 +45,14 @@ statMap = { #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" } ), + mod("Damage", "INC", nil, 0, KeywordFlag.Spell, { type = "GlobalEffect", effectType = "Buff", effectName = "Demon Form"}, { type = "Multiplier", var = "DemonFlameStacks" } ), }, ["demon_form_grants_cast_speed_+%"] = { mod("Speed", "INC", nil, ModFlag.Cast, 0, { type = "GlobalEffect", effectType = "Buff", effectName = "Demon Form" } ), }, ["demon_form_life_loss_%_per_minute_per_stack"] = { - mod("LifeRegenPercent", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Buff", effectName = "Demon Form" }, { type = "Multiplier", var = "DemonflameStacks" } ), + mod("LifeDegenPercent", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Buff", effectName = "Demon Form" }, { type = "Multiplier", var = "DemonFlameStacks" } ), div = 60, - mult = -1, }, }, #mods diff --git a/src/Modules/CalcDefence.lua b/src/Modules/CalcDefence.lua index 44b163591a..52164642c0 100644 --- a/src/Modules/CalcDefence.lua +++ b/src/Modules/CalcDefence.lua @@ -1398,7 +1398,8 @@ 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 demonFormDegen = resourceName == "Life" and m_max(pool * modDB:Sum("BASE", nil, "LifeDemonDegenPercent") / 100, 1) * modDB:Sum("BASE", nil, "Multiplier:DemonFlameStacks") or 0 + local baseDegen = modDB:Sum("BASE", nil, resource.."Degen") + pool * modDB:Sum("BASE", nil, resource.."DegenPercent") / 100 + demonFormDegen 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 2847803125..6a06de0fc5 100644 --- a/src/Modules/ConfigOptions.lua +++ b/src/Modules/ConfigOptions.lua @@ -322,8 +322,8 @@ local configSettings = { 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"} ) + 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}, From a8ac275348e5bb372ddd79831ac90bc96aa37853 Mon Sep 17 00:00:00 2001 From: LocalIdentity Date: Mon, 10 Feb 2025 19:10:02 +1100 Subject: [PATCH 08/10] Fix breakdown and stop it working with CI --- src/Data/Skills/other.lua | 6 +++--- src/Export/Skills/other.txt | 6 +++--- src/Modules/CalcDefence.lua | 7 +++++-- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/Data/Skills/other.lua b/src/Data/Skills/other.lua index 599553d5c4..9b1fa04abc 100644 --- a/src/Data/Skills/other.lua +++ b/src/Data/Skills/other.lua @@ -576,13 +576,13 @@ skills["DemonFormPlayer"] = { 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" } ), + 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" } ), + 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" } ), + mod("LifeDemonDegenPercent", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Buff", effectName = "Demon Form" }, { type = "StatThreshold", stat = "Life", threshold = 2 } ), div = 60, }, }, diff --git a/src/Export/Skills/other.txt b/src/Export/Skills/other.txt index 6408c2273c..85a163c6c1 100644 --- a/src/Export/Skills/other.txt +++ b/src/Export/Skills/other.txt @@ -45,13 +45,13 @@ statMap = { #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" } ), + 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" } ), + 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("LifeDegenPercent", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Buff", effectName = "Demon Form" }, { type = "Multiplier", var = "DemonFlameStacks" } ), + mod("LifeDemonDegenPercent", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Buff", effectName = "Demon Form" }, { type = "StatThreshold", stat = "Life", threshold = 2 } ), div = 60, }, }, diff --git a/src/Modules/CalcDefence.lua b/src/Modules/CalcDefence.lua index 52164642c0..41912caaaf 100644 --- a/src/Modules/CalcDefence.lua +++ b/src/Modules/CalcDefence.lua @@ -1398,8 +1398,11 @@ function calcs.defence(env, actor) output[resource.."Regen"] = regenRate end output[resource.."RegenInc"] = inc - local demonFormDegen = resourceName == "Life" and m_max(pool * modDB:Sum("BASE", nil, "LifeDemonDegenPercent") / 100, 1) * modDB:Sum("BASE", nil, "Multiplier:DemonFlameStacks") or 0 - local baseDegen = modDB:Sum("BASE", nil, resource.."Degen") + pool * modDB:Sum("BASE", nil, resource.."DegenPercent") / 100 + demonFormDegen + 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 From bdd80e136ba2a68ca9cc9388d8612853f8d284ab Mon Sep 17 00:00:00 2001 From: LocalIdentity Date: Wed, 10 Sep 2025 02:07:00 +1000 Subject: [PATCH 09/10] Update to 0.3 Version --- src/Data/ModCache.lua | 2 +- src/Data/Skills/other.lua | 10 +++++----- src/Export/Skills/other.txt | 10 +++++----- src/Modules/CalcDefence.lua | 4 ---- src/Modules/CalcSetup.lua | 1 + src/Modules/ConfigOptions.lua | 3 +++ src/Modules/ModParser.lua | 2 +- src/Modules/StatDescriber.lua | 4 ++-- 8 files changed, 18 insertions(+), 18 deletions(-) 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 934dacab0b..a913e389b9 100644 --- a/src/Data/Skills/other.lua +++ b/src/Data/Skills/other.lua @@ -1617,14 +1617,14 @@ skills["DemonFormPlayer"] = { 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_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 = "GlobalEffect", effectType = "Buff", effectName = "Demon Form" }, { type = "StatThreshold", stat = "Life", threshold = 2 } ), + 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("LifeDemonDegenPercent", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Buff", effectName = "Demon Form" }, { type = "StatThreshold", stat = "Life", threshold = 2 } ), + ["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, }, }, diff --git a/src/Export/Skills/other.txt b/src/Export/Skills/other.txt index 76f3356cf0..923fd070c2 100644 --- a/src/Export/Skills/other.txt +++ b/src/Export/Skills/other.txt @@ -113,14 +113,14 @@ statMap = { #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_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 = "GlobalEffect", effectType = "Buff", effectName = "Demon Form" }, { type = "StatThreshold", stat = "Life", threshold = 2 } ), + 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("LifeDemonDegenPercent", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Buff", effectName = "Demon Form" }, { type = "StatThreshold", stat = "Life", threshold = 2 } ), + ["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, }, }, diff --git a/src/Modules/CalcDefence.lua b/src/Modules/CalcDefence.lua index 7845191c40..5c3631576a 100644 --- a/src/Modules/CalcDefence.lua +++ b/src/Modules/CalcDefence.lua @@ -1624,10 +1624,6 @@ function calcs.defence(env, actor) output[resource.."Regen"] = regenRate end output[resource.."RegenInc"] = inc - 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 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 b46043435b..6429f3e952 100644 --- a/src/Modules/ConfigOptions.lua +++ b/src/Modules/ConfigOptions.lua @@ -336,6 +336,9 @@ local configSettings = { 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, 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", 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"} ) diff --git a/src/Modules/ModParser.lua b/src/Modules/ModParser.lua index a8653912b6..298ce3294b 100644 --- a/src/Modules/ModParser.lua +++ b/src/Modules/ModParser.lua @@ -3097,7 +3097,7 @@ local specialModList = { flag("Condition:CanGainQuicksandHourglass") } end, -- Witch -- Infernalist - ["maximum 10 demonflame"] = { flag("Condition:MasteredDarknessLimit") }, + ["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) From c52e26c5bac6aab02f47444db4d16e78214ddd9a Mon Sep 17 00:00:00 2001 From: LocalIdentity Date: Wed, 10 Sep 2025 02:22:29 +1000 Subject: [PATCH 10/10] Set default stacks and add tooltip --- src/Modules/ConfigOptions.lua | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/Modules/ConfigOptions.lua b/src/Modules/ConfigOptions.lua index 6429f3e952..ddbbf4b2bd 100644 --- a/src/Modules/ConfigOptions.lua +++ b/src/Modules/ConfigOptions.lua @@ -336,12 +336,11 @@ local configSettings = { 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, apply = function(val, modList, enemyModList) + { 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", 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"} ) + { 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},