Skip to content
123 changes: 123 additions & 0 deletions src/Data/Bosses.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
-- This file is automatically generated, do not edit!
-- Path of Building
--
-- Boss Data
-- Boss data (c) Grinding Gear Games
--
local bosses = ...

bosses["Venarius"] = {
armourMult = 0,
evasionMult = 0,
isUber = true,
}
bosses["EaterOfWorlds"] = {
armourMult = 0,
evasionMult = 0,
isUber = true,
}
bosses["SearingExarch"] = {
armourMult = 0,
evasionMult = 50,
isUber = true,
}
bosses["Maven"] = {
armourMult = 100,
evasionMult = 0,
isUber = true,
}
bosses["Sirus"] = {
armourMult = 100,
evasionMult = 0,
isUber = true,
}
bosses["Shaper"] = {
armourMult = 33,
evasionMult = 33,
isUber = true,
}
bosses["Elder"] = {
armourMult = 33,
evasionMult = 33,
isUber = true,
}

bosses["BlackStar"] = {
armourMult = 0,
evasionMult = 50,
isUber = false,
}
bosses["InfiniteHunger"] = {
armourMult = 100,
evasionMult = 0,
isUber = false,
}

bosses["Atziri"] = {
armourMult = 100,
evasionMult = 50,
isUber = false,
}

bosses["Phoenix"] = {
armourMult = 50,
evasionMult = 50,
isUber = false,
}
bosses["Hydra"] = {
armourMult = 0,
evasionMult = 100,
isUber = false,
}
bosses["Minotaur"] = {
armourMult = 100,
evasionMult = 0,
isUber = false,
}
bosses["Chimera"] = {
armourMult = 0,
evasionMult = 50,
isUber = false,
}

bosses["Enslaver"] = {
armourMult = 33,
evasionMult = 33,
isUber = false,
}
bosses["Eradicator"] = {
armourMult = 33,
evasionMult = 33,
isUber = false,
}
bosses["Constrictor"] = {
armourMult = 33,
evasionMult = 33,
isUber = false,
}
bosses["Purifier"] = {
armourMult = 33,
evasionMult = 33,
isUber = false,
}

bosses["Baran"] = {
armourMult = 100,
evasionMult = 0,
isUber = false,
}
bosses["Veritania"] = {
armourMult = 100,
evasionMult = 0,
isUber = false,
}
bosses["AlHezmin"] = {
armourMult = 100,
evasionMult = 0,
isUber = false,
}
bosses["Drox"] = {
armourMult = 100,
evasionMult = 0,
isUber = false,
}
34 changes: 34 additions & 0 deletions src/Export/Enemies/Bosses.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
-- Path of Building
--
-- Boss Data
-- Boss data (c) Grinding Gear Games
--
local bosses = ...

#boss SynthesisVenarius Venarius {Uber}
#boss AtlasInvadersConsumeBoss EaterOfWorlds {Uber}
#boss AtlasInvadersCleansingBoss SearingExarch {Uber}
#boss TheMaven Maven {Uber}
#boss AtlasExiles5 Sirus {Uber}
#boss TheShaperBoss Shaper {Uber}
#boss TheElder Elder {Uber}

#boss AtlasInvadersBlackStarBoss BlackStar
#boss AtlasInvadersDoomBoss InfiniteHunger

#boss Atziri Atziri

#boss AtlasBossPhoenix Phoenix
#boss AtlasBossHydra Hydra
#boss AtlasBossMinotaur Minotaur
#boss AtlasBossChimera Chimera

#boss ElderGuardian1 Enslaver
#boss ElderGuardian2 Eradicator
#boss ElderGuardian3 Constrictor
#boss ElderGuardian4 Purifier

#boss AtlasExiles1 Baran
#boss AtlasExiles2 Veritania
#boss AtlasExiles3 AlHezmin
#boss AtlasExiles4 Drox
36 changes: 36 additions & 0 deletions src/Export/Scripts/enemies.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
local directiveTable = { }

-- #boss <Type> <Name>
directiveTable.boss = function(state, args, out)
state.id = nil
state.name = nil
for arg in args:gmatch("%S+") do
if state.id == nil then
state.id = arg
elseif state.name == nil then
if arg == "#" then
state.name = state.id
else
state.name = arg
end
end
end

local isUber = args:match("{Uber}")

local monsterType = dat("MonsterTypes"):GetRow("Id", state.id)
if not monsterType then
print("Invalid Type: "..state.varietyId)
return
end

out:write('bosses["', state.name, '"] = {\n')
out:write('\tarmourMult = ', monsterType.Armour, ',\n')
out:write('\tevasionMult = ', monsterType.Evasion, ',\n')
out:write('\tisUber = ', isUber and "true" or "false", ',\n')
out:write('}\n')
end

processTemplateFile("Bosses", "Enemies/", "../Data/", directiveTable)

print("Enemy data exported.")
2 changes: 1 addition & 1 deletion src/Modules/CalcOffence.lua
Original file line number Diff line number Diff line change
Expand Up @@ -1562,7 +1562,7 @@ function calcs.offence(env, actor, activeSkill)
if breakdown then
breakdown.AccuracyHitChance = {
"Enemy level: "..env.enemyLevel..(env.configInput.enemyLevel and " ^8(overridden from the Configuration tab" or " ^8(can be overridden in the Configuration tab)"),
"Average enemy evasion: "..enemyEvasion,
"Enemy evasion: "..enemyEvasion,
"Approximate hit chance: "..output.AccuracyHitChance.."%",
}
end
Expand Down
2 changes: 0 additions & 2 deletions src/Modules/CalcSetup.lua
Original file line number Diff line number Diff line change
Expand Up @@ -493,8 +493,6 @@ function calcs.initEnv(build, mode, override, specEnv)
-- Initialise enemy modifier database
calcs.initModDB(env, enemyDB)
enemyDB:NewMod("Accuracy", "BASE", env.data.monsterAccuracyTable[env.enemyLevel], "Base")
enemyDB:NewMod("Evasion", "BASE", env.data.monsterEvasionTable[env.enemyLevel], "Base")
enemyDB:NewMod("Armour", "BASE", env.data.monsterArmourTable[env.enemyLevel], "Base")

-- Add mods from the config tab
env.modDB:AddList(build.configTab.modList)
Expand Down
32 changes: 26 additions & 6 deletions src/Modules/ConfigOptions.lua
Original file line number Diff line number Diff line change
Expand Up @@ -1444,6 +1444,8 @@ Bosses' damage is monster damage scaled to an average damage of their attacks
This is divided by 4.25 to represent 4 damage types + some ^xD02090chaos
^7Fill in the exact damage numbers if more precision is needed

Bosses' armour and evasion multiplier are calculated using the average of the boss type

Standard Boss adds the following modifiers:
+40% to enemy Elemental Resistances
+25% to enemy ^xD02090Chaos Resistance
Expand All @@ -1452,15 +1454,13 @@ Standard Boss adds the following modifiers:
Guardian / Pinnacle Boss adds the following modifiers:
+50% to enemy Elemental Resistances
+30% to enemy ^xD02090Chaos Resistance
^7+33% to enemy Armour
188% of monster damage
^7188% of monster damage
5% penetration

Uber Pinnacle Boss adds the following modifiers:
+50% to enemy Elemental Resistances
+30% to enemy ^xD02090Chaos Resistance
^7+100% to enemy Armour
70% less to enemy Damage taken
^770% less to enemy Damage taken
235% of monster damage
8% penetration]], list = {{val="None",label="No"},{val="Boss",label="Standard Boss"},{val="Pinnacle",label="Guardian/Pinnacle Boss"},{val="Uber",label="Uber Pinnacle Boss"}}, apply = function(val, modList, enemyModList, build)
--these defaults are here so that the placeholder gets reset correctly
Expand Down Expand Up @@ -1492,6 +1492,9 @@ Uber Pinnacle Boss adds the following modifiers:
build.configTab.varControls['enemyLightningPen']:SetPlaceholder(defaultPen, true)
build.configTab.varControls['enemyColdPen']:SetPlaceholder(defaultPen, true)
build.configTab.varControls['enemyFirePen']:SetPlaceholder(defaultPen, true)

build.configTab.varControls['enemyArmour']:SetPlaceholder(data.monsterArmourTable[defaultLevel], true)
build.configTab.varControls['enemyEvasion']:SetPlaceholder(data.monsterEvasionTable[defaultLevel], true)
elseif val == "Boss" then
enemyModList:NewMod("Condition:RareOrUnique", "FLAG", true, "Config", { type = "Condition", var = "Effective" })
enemyModList:NewMod("AilmentThreshold", "MORE", 488, "Boss")
Expand Down Expand Up @@ -1521,10 +1524,12 @@ Uber Pinnacle Boss adds the following modifiers:
build.configTab.varControls['enemyLightningPen']:SetPlaceholder(defaultPen, true)
build.configTab.varControls['enemyColdPen']:SetPlaceholder(defaultPen, true)
build.configTab.varControls['enemyFirePen']:SetPlaceholder(defaultPen, true)

build.configTab.varControls['enemyArmour']:SetPlaceholder(data.monsterArmourTable[defaultLevel], true)
build.configTab.varControls['enemyEvasion']:SetPlaceholder(data.monsterEvasionTable[defaultLevel], true)
elseif val == "Pinnacle" then
enemyModList:NewMod("Condition:RareOrUnique", "FLAG", true, "Config", { type = "Condition", var = "Effective" })
enemyModList:NewMod("Condition:PinnacleBoss", "FLAG", true, "Config", { type = "Condition", var = "Effective" })
enemyModList:NewMod("Armour", "MORE", 33, "Boss")
enemyModList:NewMod("AilmentThreshold", "MORE", 404, "Boss")
modList:NewMod("WarcryPower", "BASE", 20, "Boss")

Expand All @@ -1550,10 +1555,14 @@ Uber Pinnacle Boss adds the following modifiers:
build.configTab.varControls['enemyLightningPen']:SetPlaceholder(data.misc.pinnacleBossPen, true)
build.configTab.varControls['enemyColdPen']:SetPlaceholder(data.misc.pinnacleBossPen, true)
build.configTab.varControls['enemyFirePen']:SetPlaceholder(data.misc.pinnacleBossPen, true)

local defaultArmour = round(data.monsterArmourTable[defaultLevel] * (1 + data.bossStats.PinnacleArmourMean/100))
local defaultEvasion = round(data.monsterEvasionTable[defaultLevel] * (1 + data.bossStats.PinnacleEvasionMean/100))
build.configTab.varControls['enemyArmour']:SetPlaceholder(defaultArmour, true)
build.configTab.varControls['enemyEvasion']:SetPlaceholder(defaultEvasion, true)
elseif val == "Uber" then
enemyModList:NewMod("Condition:RareOrUnique", "FLAG", true, "Config", { type = "Condition", var = "Effective" })
enemyModList:NewMod("Condition:PinnacleBoss", "FLAG", true, "Config", { type = "Condition", var = "Effective" })
enemyModList:NewMod("Armour", "MORE", 100, "Boss")
enemyModList:NewMod("DamageTaken", "MORE", -70, "Boss")
enemyModList:NewMod("AilmentThreshold", "MORE", 404, "Boss")
modList:NewMod("WarcryPower", "BASE", 20, "Boss")
Expand All @@ -1580,6 +1589,11 @@ Uber Pinnacle Boss adds the following modifiers:
build.configTab.varControls['enemyLightningPen']:SetPlaceholder(data.misc.uberBossPen, true)
build.configTab.varControls['enemyColdPen']:SetPlaceholder(data.misc.uberBossPen, true)
build.configTab.varControls['enemyFirePen']:SetPlaceholder(data.misc.uberBossPen, true)

local defaultArmour = round(data.monsterArmourTable[defaultLevel] * (1 + data.bossStats.UberArmourMean/100))
local defaultEvasion = round(data.monsterEvasionTable[defaultLevel] * (1 + data.bossStats.UberArmourMean/100))
build.configTab.varControls['enemyArmour']:SetPlaceholder(defaultArmour, true)
build.configTab.varControls['enemyEvasion']:SetPlaceholder(defaultEvasion, true)
end
end },
{ var = "deliriousPercentage", type = "list", label = "Delirious Effect:", list = {{val=0,label="None"},{val="20Percent",label="20% Delirious"},{val="40Percent",label="40% Delirious"},{val="60Percent",label="60% Delirious"},{val="80Percent",label="80% Delirious"},{val="100Percent",label="100% Delirious"}}, tooltip = "Delirium scales enemy 'less Damage Taken' as well as enemy 'increased Damage dealt'\nAt 100% effect:\nEnemies Deal 30% Increased Damage\nEnemies take 80% Less Damage", apply = function(val, modList, enemyModList)
Expand Down Expand Up @@ -1622,6 +1636,12 @@ Uber Pinnacle Boss adds the following modifiers:
{ var = "enemyBlockChance", type = "integer", label = "Enemy Block Chance:", apply = function(val, modList, enemyModList)
enemyModList:NewMod("BlockChance", "BASE", val, "Config")
end },
{ var = "enemyEvasion", type = "count", label = "Enemy Base Evasion:", apply = function(val, modList, enemyModList)
enemyModList:NewMod("Evasion", "BASE", val, "Config")
end },
{ var = "enemyArmour", type = "count", label = "Enemy Base Armour:", apply = function(val, modList, enemyModList)
enemyModList:NewMod("Armour", "BASE", val, "Config")
end },
{ var = "presetBossSkills", type = "list", label = "Boss Skill Preset", tooltip = [[
Used to fill in defaults for specific boss skills if the boss config is not set

Expand Down
31 changes: 31 additions & 0 deletions src/Modules/Data.lua
Original file line number Diff line number Diff line change
Expand Up @@ -985,6 +985,37 @@ for _, minion in pairs(data.minions) do
end
end

-- Load bosses
data.bosses = { }
LoadModule("Data/Bosses", data.bosses)

local count = 0
local uberCount = 0

local armourTotal = 0
local evasionTotal = 0

local uberArmourTotal = 0
local uberEvasionTotal = 0

for _, boss in pairs(data.bosses) do
if boss.isUber then
uberCount = uberCount + 1
uberArmourTotal = uberArmourTotal + boss.armourMult
uberEvasionTotal = uberEvasionTotal + boss.evasionMult
end
count = count + 1
armourTotal = armourTotal + boss.armourMult
evasionTotal = evasionTotal + boss.evasionMult
end

data.bossStats = {
PinnacleArmourMean=armourTotal/count,
PinnacleEvasionMean=evasionTotal/count,
UberArmourMean=uberArmourTotal/uberCount,
UberEvasionMean=uberEvasionTotal/uberCount
}

-- Item bases
data.itemBases = { }
for _, type in pairs(itemTypes) do
Expand Down