From 700009820dc0d654132e14c420a5c481a378fb6a Mon Sep 17 00:00:00 2001 From: LocalIdentity Date: Fri, 12 Sep 2025 09:11:25 +1000 Subject: [PATCH] Fix Bifurcates Crit mod not working on Tangletongue The wording was updated in 0.3 but the parsing wasn't updated to work with it --- src/Data/ModCache.lua | 3 +-- src/Modules/BuildDisplayStats.lua | 2 +- src/Modules/CalcOffence.lua | 38 +++++++++++++++---------------- src/Modules/CalcSections.lua | 12 +++++----- src/Modules/ModParser.lua | 3 ++- 5 files changed, 29 insertions(+), 29 deletions(-) diff --git a/src/Data/ModCache.lua b/src/Data/ModCache.lua index 4d1db44f16..9c1bce8c7d 100755 --- a/src/Data/ModCache.lua +++ b/src/Data/ModCache.lua @@ -4147,8 +4147,7 @@ c["Base Maximum Darkness is 100"]={{[1]={flags=0,keywordFlags=0,name="PlayerHasD c["Become Ignited when you deal a Critical Hit, taking 15% of your maximum Life and Energy Shield as Fire Damage per second"]={nil,"Become Ignited when you deal a Critical Hit, taking 15% of your maximum Life and Energy Shield as Fire Damage per second "} c["Become Ignited when you deal a Critical Hit, taking 15% of your maximum Life and Energy Shield as Fire Damage per second 50% more Critical Damage Bonus"]={nil,"Become Ignited when you deal a Critical Hit, taking 15% of your maximum Life and Energy Shield as Fire Damage per second 50% more Critical Damage Bonus "} c["Benefits from consuming Frenzy Charges for your Skills have 50% chance to be doubled"]={{[1]={[1]={globalLimit=100,globalLimitKey="FlaskChargesDoubledLimit",type="Multiplier",var="FlaskChargesDoubled"},flags=0,keywordFlags=0,name="FlaskCharges",type="MORE",value=100},[2]={flags=0,keywordFlags=0,name="Multiplier:FlaskChargesDoubled",type="OVERRIDE",value=1}},"Benefits from consuming Frenzy for your Skills have 50% chance to be d "} -c["Bifurcates Critical Hits"]={nil,"Bifurcates Critical Hits "} -c["Bifurcates Critical Hits 10% of Skill Mana Costs Converted to Life Costs"]={nil,"Bifurcates Critical Hits 10% of Skill Mana Costs Converted to Life Costs "} +c["Bifurcates Critical Hits"]={{[1]={flags=0,keywordFlags=0,name="BifurcateCrit",type="FLAG",value=true}},nil} c["Bleeding you inflict deals Damage 10% faster"]={{[1]={flags=0,keywordFlags=0,name="BleedFaster",type="INC",value=10}},nil} c["Bleeding you inflict is Aggravated"]={{[1]={flags=0,keywordFlags=0,name="EnemyModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="Condition:BleedAggravated",type="FLAG",value=true}}}},nil} c["Bleeding you inflict on Cursed targets is Aggravated"]={{[1]={flags=0,keywordFlags=0,name="EnemyModifier",type="LIST",value={mod={[1]={type="Condition",var="Cursed"},flags=0,keywordFlags=0,name="Condition:BleedAggravated",type="FLAG",value=true}}}},nil} diff --git a/src/Modules/BuildDisplayStats.lua b/src/Modules/BuildDisplayStats.lua index db471fdd20..6cea13b3e5 100644 --- a/src/Modules/BuildDisplayStats.lua +++ b/src/Modules/BuildDisplayStats.lua @@ -32,7 +32,7 @@ local displayStats = { { stat = "ReloadTime", label = "Reload Time", fmt = ".2fs", compPercent = true, lowerIsBetter = true, condFunc = function(v,o) return o.ReloadTime end }, { stat = "PreEffectiveCritChance", label = "Crit Chance", fmt = ".2f%%", flag = "hit" }, { stat = "CritChance", label = "Effective Crit Chance", fmt = ".2f%%", flag = "hit", condFunc = function(v,o) return v ~= o.PreEffectiveCritChance end }, - { stat = "CritForks", label = "Crit Forks Chance", fmt = ".2f%%", flag = "hit", condFunc = function(v,o) return (o.CritForks or 0) > 0 end }, + { stat = "CritBifurcates", label = "Crit Bifurcate Chance", fmt = ".2f%%", flag = "hit", condFunc = function(v,o) return (o.CritForks or 0) > 0 end }, { stat = "CritMultiplier", label = "Crit Multiplier", fmt = "d%%", pc = true, condFunc = function(v,o) return (o.CritChance or 0) > 0 end }, { stat = "HitChance", label = "Hit Chance", fmt = ".0f%%", flag = "attack" }, { stat = "HitChance", label = "Hit Chance", fmt = ".0f%%", condFunc = function(v,o) return o.enemyHasSpellBlock end }, diff --git a/src/Modules/CalcOffence.lua b/src/Modules/CalcOffence.lua index 7897b8bc06..446e387245 100644 --- a/src/Modules/CalcOffence.lua +++ b/src/Modules/CalcOffence.lua @@ -3279,7 +3279,7 @@ function calcs.offence(env, actor, activeSkill) if critOverride == 100 then output.PreEffectiveCritChance = 100 - output.PreForkCritChance = 100 + output.PreBifurcateCritChance = 100 output.CritChance = 100 else local base = 0 @@ -3305,9 +3305,9 @@ function calcs.offence(env, actor, activeSkill) if env.mode_effective and skillModList:Flag(cfg, "CritChanceLucky") then output.CritChance = (1 - (1 - output.CritChance / 100) ^ 2) * 100 end - output.PreForkCritChance = output.CritChance - local preForkCritChance = output.CritChance - if env.mode_effective and skillModList:Flag(cfg, "ForkCrit") then + output.PreBifurcateCritChance = output.CritChance + local preBifurcateCritChance = output.CritChance + if env.mode_effective and skillModList:Flag(cfg, "BifurcateCrit") then output.CritChance = (1 - (1 - output.CritChance / 100) ^ 2) * 100 end if breakdown and output.CritChance ~= baseCrit then @@ -3339,11 +3339,11 @@ function calcs.offence(env, actor, activeSkill) if env.mode_effective and skillModList:Flag(cfg, "CritChanceLucky") then t_insert(breakdown.CritChance, "Crit Chance is Lucky:") t_insert(breakdown.CritChance, s_format("1 - (1 - %.4f) x (1 - %.4f)", preLuckyCritChance / 100, preLuckyCritChance / 100)) - t_insert(breakdown.CritChance, s_format("= %.2f%%", preForkCritChance)) + t_insert(breakdown.CritChance, s_format("= %.2f%%", preBifurcateCritChance)) end - if env.mode_effective and skillModList:Flag(cfg, "ForkCrit") then - t_insert(breakdown.CritChance, "Critical Strike Forks:") - t_insert(breakdown.CritChance, s_format("1 - (1 - %.4f) x (1 - %.4f)", preForkCritChance / 100, preForkCritChance / 100)) + if env.mode_effective and skillModList:Flag(cfg, "BifurcateCrit") then + t_insert(breakdown.CritChance, "Critical Strike Bifurcates:") + t_insert(breakdown.CritChance, s_format("1 - (1 - %.4f) x (1 - %.4f)", preBifurcateCritChance / 100, preBifurcateCritChance / 100)) t_insert(breakdown.CritChance, s_format("= %.2f%%", output.CritChance)) end end @@ -3363,23 +3363,23 @@ function calcs.offence(env, actor, activeSkill) end output.PreEffectiveCritMultiplier = 1 + extraDamage - -- if crit forks are enabled, roll for crit twice and add multiplier for each - if env.mode_effective and skillModList:Flag(cfg, "ForkCrit") then + -- if crit bifurcates are enabled, roll for crit twice and add multiplier for each + if env.mode_effective and skillModList:Flag(cfg, "BifurcateCrit") then -- get crit chance and calculate odds of critting twice - local critChancePercentage = output.PreForkCritChance - local forkMultiChance = (critChancePercentage ^ 2) / 100 - output.CritForks = forkMultiChance + local critChancePercentage = output.PreBifurcateCritChance + local bifurcateMultiChance = (critChancePercentage ^ 2) / 100 + output.CritBifurcates = bifurcateMultiChance local damageBonus = extraDamage - local forkedBonus = forkMultiChance * extraDamage / 100 + local bifurcatedBonus = bifurcateMultiChance * extraDamage / 100 if breakdown and enemyInc ~= 1 then - breakdown.CritForks = { + breakdown.CritBifurcates = { s_format("%.2f%% ^8(effective crit chance)", critChancePercentage), s_format("x %.2f%%", critChancePercentage), - s_format("= %.2f%% ^8(crit forks chance)", forkMultiChance), + s_format("= %.2f%% ^8(crit Bifurcates chance)", bifurcateMultiChance), } end - extraDamage = damageBonus + forkedBonus - skillModList:NewMod("CritMultiplier", "MORE", floor(forkMultiChance, 2), "Forked Crit Damage Bonus") + extraDamage = damageBonus + bifurcatedBonus + skillModList:NewMod("CritMultiplier", "MORE", floor(bifurcateMultiChance, 2), "Bifurcated Crit Damage Bonus") end if env.mode_effective then @@ -4064,7 +4064,7 @@ function calcs.offence(env, actor, activeSkill) combineStat("CritChance", "AVERAGE") combineStat("PreEffectiveCritMultiplier", "AVERAGE") combineStat("CritMultiplier", "AVERAGE") - combineStat("CritForks", "AVERAGE") + combineStat("CritBifurcates", "AVERAGE") combineStat("AverageDamage", "DPS") combineStat("PvpAverageDamage", "DPS") combineStat("TotalDPS", "DPS") diff --git a/src/Modules/CalcSections.lua b/src/Modules/CalcSections.lua index 4a289aec71..82fdf06726 100644 --- a/src/Modules/CalcSections.lua +++ b/src/Modules/CalcSections.lua @@ -546,9 +546,9 @@ return { { label = "Player modifiers", modName = { "CritChance", "WeaponBaseCritChance", "MainHandCritIsEqualToParent", "MainHandCritIsEqualToPartyMember", "AttackCritIsEqualToParentMainHand" }, cfg = "weapon1" }, { label = "Enemy modifiers", modName = "SelfCritChance", enemy = true }, }, }, - { label = "MH Crit Forks", bgCol = colorCodes.MAINHANDBG, haveOutput = "MainHand.CritForks", flag = "weapon1Attack", { format = "{2:output:MainHand.CritForks}%", - { breakdown = "MainHand.CritForks" }, - { label = "Player modifiers", modName = "ForkCrit", cfg = "weapon1" }, + { label = "MH Crit Bifurcates", bgCol = colorCodes.MAINHANDBG, haveOutput = "MainHand.CritBifurcates", flag = "weapon1Attack", { format = "{2:output:MainHand.CritBifurcates}%", + { breakdown = "MainHand.CritBifurcates" }, + { label = "Player modifiers", modName = "BifurcateCrit", cfg = "weapon1" }, }, }, { label = "MH Crit Multiplier", bgCol = colorCodes.MAINHANDBG, flag = "weapon1Attack", { format = "x {2:output:MainHand.CritMultiplier}", { breakdown = "MainHand.CritMultiplier" }, @@ -566,9 +566,9 @@ return { { label = "Player modifiers", modName = { "CritChance", "WeaponBaseCritChance", "AttackCritIsEqualToParentMainHand" }, cfg = "weapon2" }, { label = "Enemy modifiers", modName = "SelfCritChance", enemy = true }, }, }, - { label = "OH Crit Forks", bgCol = colorCodes.OFFHANDBG, haveOutput = "OffHand.CritForks", flag = "weapon2Attack", { format = "{2:output:OffHand.CritForks}%", - { breakdown = "OffHand.CritForks" }, - { label = "Player modifiers", modName = "ForkCrit", cfg = "weapon2" }, + { label = "OH Crit Bifurcates", bgCol = colorCodes.OFFHANDBG, haveOutput = "OffHand.CritBifurcates", flag = "weapon2Attack", { format = "{2:output:OffHand.CritBifurcates}%", + { breakdown = "OffHand.CritBifurcates" }, + { label = "Player modifiers", modName = "BifurcateCrit", cfg = "weapon2" }, }, }, { label = "OH Crit Multiplier", bgCol = colorCodes.OFFHANDBG, flag = "weapon2Attack", { format = "x {2:output:OffHand.CritMultiplier}", { breakdown = "OffHand.CritMultiplier" }, diff --git a/src/Modules/ModParser.lua b/src/Modules/ModParser.lua index 0ae35b950d..dc11d1690d 100644 --- a/src/Modules/ModParser.lua +++ b/src/Modules/ModParser.lua @@ -3439,7 +3439,8 @@ local specialModList = { ["minion critical hits do not deal extra damage"] = { mod("MinionModifier", "LIST", { mod = flag("NoCritMultiplier") }) }, ["lightning damage with non%-critical hits is lucky"] = { flag("LightningNoCritLucky") }, ["your damage with critical hits is lucky"] = { flag("CritLucky") }, - ["forks critical hits"] = { flag("ForkCrit") }, + ["forks critical hits"] = { flag("BifurcateCrit") }, + ["bifurcates critical hits"] = { flag("BifurcateCrit") }, ["critical hits deal no damage"] = { mod("Damage", "MORE", -100, { type = "Condition", var = "CriticalStrike" }) }, ["critical hit chance is increased by uncapped lightning resistance"] = { flag("CritChanceIncreasedByUncappedLightningRes") }, ["critical hit chance is increased by lightning resistance"] = { flag("CritChanceIncreasedByLightningRes") },