Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions src/Classes/ItemsTab.lua
Original file line number Diff line number Diff line change
Expand Up @@ -3272,6 +3272,10 @@ function ItemsTabClass:AddItemTooltip(tooltip, item, slot, dbMode, maxWidth)
if armourData.Ward > 0 then
tooltip:AddLine(fontSizeBig, s_format("^x7F7F7FWard: %s%d", main:StatColor(armourData.Ward, base.armour.WardBase), armourData.Ward), "FONTIN SC")
end
-- Facebreaker
if armourData.PhysicalDPS then
tooltip:AddLine(fontSizeBig, s_format("^x7F7F7FPhysical Damage: "..colorCodes.MAGIC.."%d-%d", armourData.PhysicalMin, armourData.PhysicalMax), "FONTIN SC")
end
elseif base.flask then
-- Flask-specific info
local flaskData = item.flaskData
Expand Down
8 changes: 8 additions & 0 deletions src/Data/ModCache.lua
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,7 @@ c["+1 Ring Slot"]={{[1]={flags=0,keywordFlags=0,name="AdditionalRingSlot",type="
c["+1 maximum stacks of Puppet Master"]={{}," maximum stacks of Puppet Master "}
c["+1 metre to Dodge Roll distance"]={{}," metre to Dodge Roll distance "}
c["+1 metre to Dodge Roll distance 50% increased Evasion Rating if you've Dodge Rolled Recently"]={{[1]={[1]={type="Condition",var="DodgeRolledRecently"},flags=0,keywordFlags=0,name="Evasion",type="BASE",value=1}}," metre to Dodge Roll distance 50% increased "}
c["+1 to Armour per Strength"]={{[1]={[1]={stat="Str",type="PerStat"},flags=0,keywordFlags=0,name="Armour",type="BASE",value=1}},nil}
c["+1 to Evasion Rating per 1 Item Armour on Equipped Gloves"]={{[1]={[1]={div=1,stat="ArmourOnGloves",type="PerStat"},flags=0,keywordFlags=0,name="Evasion",type="BASE",value=1}},nil}
c["+1 to Evasion Rating per 1 Item Energy Shield on Equipped Helmet"]={{[1]={[1]={div=1,stat="EnergyShieldOnHelmet",type="PerStat"},flags=0,keywordFlags=0,name="Evasion",type="BASE",value=1}},nil}
c["+1 to Level of all Chaos Skills"]={{[1]={flags=0,keywordFlags=0,name="GemProperty",type="LIST",value={key="level",keyOfScaledMod="value",keyword="chaos",value=1}}},nil}
Expand Down Expand Up @@ -633,6 +634,7 @@ c["+3 to Level of all Wing Blast Skills"]={{[1]={flags=0,keywordFlags=0,name="Ge
c["+3 to Level of all Withering Presence Skills"]={{[1]={flags=0,keywordFlags=0,name="GemProperty",type="LIST",value={key="level",keyOfScaledMod="value",keyword="withering presence",value=3}}},nil}
c["+3 to Level of all Wolf Pack Skills"]={{[1]={flags=0,keywordFlags=0,name="GemProperty",type="LIST",value={key="level",keyOfScaledMod="value",keyword="wolf pack",value=3}}},nil}
c["+3 to Maximum Rage"]={{[1]={flags=0,keywordFlags=0,name="MaximumRage",type="BASE",value=3}},nil}
c["+3 to Melee Strike Range while Unarmed"]={{[1]={[1]={type="Condition",var="Unarmed"},flags=0,keywordFlags=0,name="MeleeWeaponRange",type="BASE",value=3},[2]={[1]={type="Condition",var="Unarmed"},flags=0,keywordFlags=0,name="UnarmedRange",type="BASE",value=3}},nil}
c["+3 to Stun Threshold per Strength"]={{[1]={[1]={stat="Str",type="PerStat"},flags=0,keywordFlags=0,name="StunThreshold",type="BASE",value=3}},nil}
c["+3 to all Attributes"]={{[1]={flags=0,keywordFlags=0,name="Str",type="BASE",value=3},[2]={flags=0,keywordFlags=0,name="Dex",type="BASE",value=3},[3]={flags=0,keywordFlags=0,name="Int",type="BASE",value=3},[4]={flags=0,keywordFlags=0,name="All",type="BASE",value=3}},nil}
c["+3 to maximum Rage while Shapeshifted"]={{[1]={[1]={type="Condition",var="Shapeshifted"},flags=0,keywordFlags=0,name="MaximumRage",type="BASE",value=3}},nil}
Expand Down Expand Up @@ -964,6 +966,7 @@ c["1% increased maximum Darkness per 1% Chaos Resistance"]={{[1]={[1]={div=1,sta
c["1% increased maximum Life"]={{[1]={flags=0,keywordFlags=0,name="Life",type="INC",value=1}},nil}
c["1% more Attack Speed per 75 Item Evasion on Equipped Armour Items"]={{[1]={flags=1,keywordFlags=0,name="Speed",type="MORE",value=1}}," per 75 Item Evasion on Equipped Armour Items "}
c["1% more Attack Speed per 75 Item Evasion on Equipped Armour Items +0.1% to Critical Hit Chance per 10 Item Energy Shield on Equipped Armour Items"]={{[1]={[1]={div=10,stat="EnergyShieldOnAllArmourItems",type="PerStat"},flags=1,keywordFlags=0,name="Speed",type="MORE",value=1}}," per 75 Item Evasion on Equipped Armour Items +0.1% to Critical Hit Chance "}
c["1% more Unarmed Damage per 5 Strength"]={{[1]={[1]={div=5,stat="Str",type="PerStat"},flags=16777220,keywordFlags=0,name="Damage",type="MORE",value=1}},nil}
c["1% of Maximum Life Converted to Energy Shield per 20 Tribute"]={{[1]={[1]={actor="parent",div=20,stat="Tribute",type="PerStat"},flags=0,keywordFlags=0,name="LifeConvertToEnergyShield",type="BASE",value=1}},nil}
c["1% of damage taken Recouped as Life per 10 Tribute"]={{[1]={[1]={actor="parent",div=10,stat="Tribute",type="PerStat"},flags=0,keywordFlags=0,name="LifeRecoup",type="BASE",value=1}},nil}
c["1% of damage taken Recouped as Mana per 10 Tribute"]={{[1]={[1]={actor="parent",div=10,stat="Tribute",type="PerStat"},flags=0,keywordFlags=0,name="ManaRecoup",type="BASE",value=1}},nil}
Expand Down Expand Up @@ -2838,6 +2841,7 @@ c["45% increased Spell Damage"]={{[1]={flags=2,keywordFlags=0,name="Damage",type
c["450% increased Armour"]={{[1]={flags=0,keywordFlags=0,name="Armour",type="INC",value=450}},nil}
c["450% increased Armour and Evasion"]={{[1]={flags=0,keywordFlags=0,name="ArmourAndEvasion",type="INC",value=450}},nil}
c["48% increased Spirit"]={{[1]={flags=0,keywordFlags=0,name="Spirit",type="INC",value=48}},nil}
c["49% increased Stun Buildup"]={{[1]={flags=0,keywordFlags=0,name="EnemyHeavyStunBuildup",type="INC",value=49}},nil}
c["5 Life Regeneration per second"]={{[1]={flags=0,keywordFlags=0,name="LifeRegen",type="BASE",value=5}},nil}
c["5 Mana gained when you Block"]={{[1]={flags=0,keywordFlags=0,name="ManaOnBlock",type="BASE",value=5}},nil}
c["5 to 10 Physical Thorns damage"]={{[1]={flags=0,keywordFlags=0,name="ThornsDamage",type="BASE",value=5}}," to 10 Physical "}
Expand Down Expand Up @@ -3013,6 +3017,7 @@ c["50% increased Spell Damage"]={{[1]={flags=2,keywordFlags=0,name="Damage",type
c["50% increased Spell damage for each 200 total Mana you have Spent Recently"]={{[1]={[1]={div=200,type="Multiplier",var="ManaSpentRecently"},flags=2,keywordFlags=0,name="Damage",type="INC",value=50}},nil}
c["50% increased Spirit"]={{[1]={flags=0,keywordFlags=0,name="Spirit",type="INC",value=50}},nil}
c["50% increased Strength Requirement"]={{[1]={flags=0,keywordFlags=0,name="StrRequirement",type="INC",value=50}},nil}
c["50% increased Stun Buildup"]={{[1]={flags=0,keywordFlags=0,name="EnemyHeavyStunBuildup",type="INC",value=50}},nil}
c["50% increased Stun Threshold while Channelling"]={{[1]={[1]={type="Condition",var="Channelling"},flags=0,keywordFlags=0,name="StunThreshold",type="INC",value=50}},nil}
c["50% increased Surrounded Area of Effect"]={{[1]={flags=0,keywordFlags=0,name="SurroundedArea",type="INC",value=50}},nil}
c["50% increased Thorns damage if you've consumed an Endurance Charge Recently"]={{[1]={[1]={limit=1,type="Multiplier",var="RemovableEnduranceCharge"},flags=0,keywordFlags=0,name="ThornsDamage",type="INC",value=50}},nil}
Expand Down Expand Up @@ -3797,6 +3802,7 @@ c["Can Allocate Passive Skills from the Sorceress's starting point"]={nil,"Can A
c["Can Allocate Passive Skills from the Sorceress's starting point Grants 4 Passive Skill Points"]={nil,"Can Allocate Passive Skills from the Sorceress's starting point Grants 4 Passive Skill Points "}
c["Can Allocate Passive Skills from the Warrior's starting point"]={nil,"Can Allocate Passive Skills from the Warrior's starting point "}
c["Can Allocate Passive Skills from the Warrior's starting point Grants 4 Passive Skill Points"]={nil,"Can Allocate Passive Skills from the Warrior's starting point Grants 4 Passive Skill Points "}
c["Can Attack as though using a One Handed Mace while both of your hand slots are empty"]={{[1]={flags=0,keywordFlags=0,name="WeaponData",type="LIST",value={key="countsAsMace1H",value=true}}},nil}
c["Can Attack as though using a Quarterstaff while both of your hand slots are empty"]={nil,"Can Attack as though using a Quarterstaff while both of your hand slots are empty "}
c["Can Attack as though using a Quarterstaff while both of your hand slots are empty Unarmed Attacks that would use an Equipped Quarterstaff's damage have:"]={nil,"Can Attack as though using a Quarterstaff while both of your hand slots are empty Unarmed Attacks that would use an Equipped Quarterstaff's damage have: "}
c["Can Attack as though using a Quarterstaff while both of your hand slots are empty Unarmed Attacks that would use an Equipped Quarterstaff's damage have: Base Unarmed Physical damage replaced with damage based on their Skill Level"]={nil,"Can Attack as though using a Quarterstaff while both of your hand slots are empty Unarmed Attacks that would use an Equipped Quarterstaff's damage have: Base Unarmed Physical damage replaced with damage based on their Skill Level "}
Expand Down Expand Up @@ -4669,6 +4675,7 @@ c["Has 2 Charm Slots"]={{[1]={flags=0,keywordFlags=0,name="CharmLimit",type="BAS
c["Has 3 Charm Slot"]={{[1]={flags=0,keywordFlags=0,name="CharmLimit",type="BASE",value=3}},nil}
c["Has 3 Charm Slots"]={{[1]={flags=0,keywordFlags=0,name="CharmLimit",type="BASE",value=3}},nil}
c["Has 4 Augment Sockets"]={nil,"Has 4 Augment Sockets "}
c["Has 8 to 12 Physical Damage, +3 to +4 Per Boss's Face Broken"]={{[1]={flags=0,keywordFlags=0,name="Condition:UseFacebreaker",type="FLAG",value=true},[2]={flags=0,keywordFlags=0,name="ArmourData",type="LIST",value={key="PhysicalDPS",value=true}},[3]={flags=0,keywordFlags=0,name="ArmourData",type="LIST",value={key="PhysicalMin",value="8"}},[4]={flags=0,keywordFlags=0,name="ArmourData",type="LIST",value={key="PhysicalMax",value="12"}},[5]={[1]={type="Condition",var="{Hand}Attack"},flags=16777216,keywordFlags=0,name="PhysicalMin",type="BASE",value=8},[6]={[1]={type="Condition",var="{Hand}Attack"},flags=16777216,keywordFlags=0,name="PhysicalMax",type="BASE",value=12},[7]={[1]={type="Condition",var="{Hand}Attack"},[2]={limit=60,type="Multiplier",var="BrokenBossFaces"},flags=16777216,keywordFlags=0,name="PhysicalMin",type="BASE",value=3},[8]={[1]={type="Condition",var="{Hand}Attack"},[2]={limit=60,type="Multiplier",var="BrokenBossFaces"},flags=16777216,keywordFlags=0,name="PhysicalMax",type="BASE",value=4}},nil}
c["Has no Attribute Requirements"]={{[1]={flags=0,keywordFlags=0,name="NoAttributeRequirements",type="FLAG",value=true}},nil}
c["Hazards have 15% chance to rearm after they are triggered"]={{[1]={[1]={skillType=203,type="SkillType"},flags=0,keywordFlags=0,name="HazardRearmChance",type="BASE",value=15}},nil}
c["Hazards have 5% chance to rearm after they are triggered"]={{[1]={[1]={skillType=203,type="SkillType"},flags=0,keywordFlags=0,name="HazardRearmChance",type="BASE",value=5}},nil}
Expand Down Expand Up @@ -5502,6 +5509,7 @@ c["Trusted Kinship"]={{[1]={flags=0,keywordFlags=0,name="Keystone",type="LIST",v
c["Unaffected by Chill during Dodge Roll"]={nil,"Unaffected by Chill during Dodge Roll "}
c["Unaffected by Chill while Leeching Mana"]={{[1]={[1]={type="Condition",var="LeechingMana"},flags=0,keywordFlags=0,name="SelfChillEffect",type="MORE",value=-100}},nil}
c["Unaffected by Elemental Weakness"]={nil,"Unaffected by Elemental Weakness "}
c["Unarmed Attacks that would use an Equipped One Hand Mace's damage use this Item's damage"]={{[1]={flags=0,keywordFlags=0,name="UnarmedAttacksAsItemDamage",value="One Hand Mace"},[2]={flags=0,keywordFlags=0,name="Condition:UnarmedAttacksAsItemDamage",type="FLAG",value=true}},nil}
c["Unarmed Attacks that would use an Equipped Quarterstaff's damage have:"]={nil,"Unarmed Attacks that would use an Equipped Quarterstaff's damage have: "}
c["Unarmed Attacks that would use an Equipped Quarterstaff's damage have: Base Unarmed Physical damage replaced with damage based on their Skill Level"]={nil,"Unarmed Attacks that would use an Equipped Quarterstaff's damage have: Base Unarmed Physical damage replaced with damage based on their Skill Level "}
c["Unarmed Attacks that would use an Equipped Quarterstaff's damage have: Base Unarmed Physical damage replaced with damage based on their Skill Level 1% more Attack Speed per 75 Item Evasion on Equipped Armour Items"]={nil,"Unarmed Attacks that would use an Equipped Quarterstaff's damage have: Base Unarmed Physical damage replaced with damage based on their Skill Level 1% more Attack Speed per 75 Item Evasion on Equipped Armour Items "}
Expand Down
11 changes: 11 additions & 0 deletions src/Data/Uniques/Special/New.lua
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,15 @@
data.uniques.new = {

-- New
[[
Facebreaker
Stocky Mitts
Has 8 to 12 Physical Damage, +3 to +4 Per Boss's Face Broken
(47-50)% increased Stun Buildup
1% more Unarmed Damage per 5 Strength
+3 to Melee Strike Range while Unarmed
+1 to Armour per Strength
Can Attack as though using a One Handed Mace while both of your hand slots are empty
Unarmed Attacks that would use an Equipped One Hand Mace's damage use this Item's damage
]],
}
21 changes: 21 additions & 0 deletions src/Modules/CalcActiveSkill.lua
Original file line number Diff line number Diff line change
Expand Up @@ -274,6 +274,13 @@ local function getWeaponFlags(env, weaponData, weaponTypes)
if not info then
return
end

-- ConPrintf("############# FACEBREAKER TEST BLOCK ###################")
-- ConPrintf(">>>> prettyPrintTable >>>>>")
-- prettyPrintTable(weaponData)
-- ConPrintf("########################################################")


if weaponTypes then
for _, types in ipairs(weaponTypes) do
if not types[weaponData.type] and
Expand All @@ -287,6 +294,10 @@ local function getWeaponFlags(env, weaponData, weaponTypes)
if weaponData.countsAsAll1H then
flags = bor(ModFlag.Axe, ModFlag.Claw, ModFlag.Dagger, ModFlag.Mace, ModFlag.Sword, ModFlag.Spear)
end
-- if weaponData.countsAsMace1H then -- Facebreaker
-- ConPrintf("countsAsMace1H ----- WORKS")
-- flags = bor(ModFlag.Mace, ModFlag.Weapon1H)
-- end
if weaponData.type ~= "None" then
flags = bor(flags, ModFlag.Weapon)
if info.oneHand then
Expand Down Expand Up @@ -814,6 +825,16 @@ function calcs.buildActiveSkillModList(env, activeSkill)
skillModList:NewMod("PhysicalMax", "BASE", physMax, "Hollow Palm Technique", ModFlag.Attack, nil, { type = "Condition", var = "HollowPalm" })
end

-- Facebreaker added phys for skills that would use Mace (this is a "hidden skill", keep logic similar to Hollow Palm Technique)
if activeSkill.actor.modDB.conditions.UseFacebreaker then -- and ((activeEffect.grantedEffect.weaponTypes and activeEffect.grantedEffect.weaponTypes.OneHandMace)) then
ConPrintf("TEST>>>")
local brokenFaces = 5 -- activeSkill.actor.modDB.conditions.brokenBossFaces -- For testing, set 5 faces broken, brokenFaces part of configuration (player could set how many faces have been broken)
local physMin = 3 * brokenFaces -- TODO: 3 is GGG set damage number, find proper place to place this value and retrieve from it
local physMax = 4 * brokenFaces -- TODO: 4 is GGG set damage number, find proper place to place this value and retrieve from it
skillModList:NewMod("PhysicalMin", "BASE", physMin, "Facebreaker", ModFlag.Attack, nil, { type = "Condition", var = "Facebreaker" })
skillModList:NewMod("PhysicalMax", "BASE", physMax, "Facebreaker", ModFlag.Attack, nil, { type = "Condition", var = "Facebreaker" })
end

-- Extract skill data
for _, value in ipairs(env.modDB:List(activeSkill.skillCfg, "SkillData")) do
activeSkill.skillData[value.key] = value.value
Expand Down
36 changes: 26 additions & 10 deletions src/Modules/CalcSetup.lua
Original file line number Diff line number Diff line change
Expand Up @@ -1509,17 +1509,33 @@ function calcs.initEnv(build, mode, override, specEnv)
if env.player.weaponData1.countsAsDualWielding then
env.player.weaponData2 = env.player.itemList["Weapon 1"].weaponData[2]
elseif not env.player.itemList["Weapon 2"] then
-- Hollow Palm Technique
if (not env.player.itemList["Weapon 1"]) and env.modDB.mods.Keystone then
for _, keystone in ipairs(env.modDB.mods.Keystone) do
if keystone.value == "Hollow Palm Technique" then
env.player.weaponData2 = copyTable(env.data.unarmedWeaponData[env.classId])
for i = 1, 2 do
env.player["weaponData" .. tostring(i)].asThoughUsing = env.player["weaponData" .. tostring(i)].asThoughUsing or { }
env.player["weaponData" .. tostring(i)].asThoughUsing["Staff"] = true
if (not env.player.itemList["Weapon 1"]) then
-- Hollow Palm Technique
if env.modDB.mods.Keystone then
for _, keystone in ipairs(env.modDB.mods.Keystone) do
if keystone.value == "Hollow Palm Technique" then
env.player.weaponData2 = copyTable(env.data.unarmedWeaponData[env.classId])
for i = 1, 2 do
env.player["weaponData" .. tostring(i)].asThoughUsing = env.player["weaponData" .. tostring(i)].asThoughUsing or { }
env.player["weaponData" .. tostring(i)].asThoughUsing["Staff"] = true
end
env.player.modDB.conditions["HollowPalm"] = true -- Had to add condition here because it was otherwise not recognized correctly when "DisableSkill" is processed
break
end
env.player.modDB.conditions["HollowPalm"] = true -- Had to add condition here because it was otherwise not recognized correctly when "DisableSkill" is processed
break
end
end
-- Facebreaker
if env.player.itemList["Gloves"] and env.player.itemList["Gloves"].title == "Facebreaker" then
env.player.weaponData2 = copyTable(env.data.unarmedWeaponData[env.classId])
for i = 1, 2 do
env.player["weaponData" .. tostring(i)].asThoughUsing = env.player["weaponData" .. tostring(i)].asThoughUsing or { }
env.player["weaponData" .. tostring(i)].asThoughUsing["One Hand Mace"] = true
ConPrintf("TESTzzzz")
prettyPrintTable(env.player)
-- env.player["weaponData" .. tostring(i)]["PhysicalMin"] = env.player["armourData"]["PhysicalMin"]
-- env.player["weaponData" .. tostring(i)]["PhysicalMax"] = env.player["armourData"]["PhysicalMax"]
env.player["weaponData" .. tostring(i)]["PhysicalMin"] = 999 -- Debugging
env.player["weaponData" .. tostring(i)]["PhysicalMax"] = 9999 -- Debugging
end
end
end
Expand Down
8 changes: 8 additions & 0 deletions src/Modules/ConfigOptions.lua
Original file line number Diff line number Diff line change
Expand Up @@ -778,6 +778,14 @@ Huge sets the radius to 11.
{ var = "TotalVaalRejuvenationTotemLife", type = "countAllowZero", label = "Total Vaal Rejuvenation Totem Life:", ifSkill = { "Vaal Rejuvenation Totem" }, ifMod = "takenFromVaalRejuvenationTotemsBeforeYou", tooltip = "The total life of your Vaal Rejuvenation Totems that can be taken before yours", apply = function(val, modList, enemyModList)
modList:NewMod("TotalVaalRejuvenationTotemLife", "BASE", val, "Config")
end },

-- Section: Item-specific options
{ section = "Item Options", col = 2 },
{ label = "Facebreaker:", ifFlag = "Condition:UseFacebreaker" },
{ var = "brokenBossFaces", type = "count", label = "Broken Boss Faces", ifFlag = "Condition:UseFacebreaker", tooltip = "Each ^xB97123Boss Encounter^7 icon on the World Screen is a face which can be broken by beating the encounter.\n^xADAA47Rare Monster Encounter^7 icons do not provide any bonus when broken.", apply = function(val, modList, enemyModList)
modList:NewMod("Multiplier:BrokenBossFaces", "BASE", val, "Config", { type = "Condition", var = "Combat" })
end },

-- Section: Combat options
{ section = "When In Combat", col = 1 },
{ var = "usePowerCharges", type = "check", label = "Do you use Power Charges?", apply = function(val, modList, enemyModList)
Expand Down
Loading