Skip to content
Merged
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
24 changes: 17 additions & 7 deletions src/Data/BossSkills.lua
Original file line number Diff line number Diff line change
Expand Up @@ -8,24 +8,24 @@ return {
["Atziri Flameblast"] = {
DamageType = "Spell",
DamageMultipliers = {
Fire = { 57.29394377618, 0.2864697188809 }
Fire = { 51.086684344463, 0.25543342172232 }
},
UberDamageMultiplier = 1.26,
DamagePenetrations = {
FirePen = ""
FirePen = 8
},
UberDamagePenetrations = {
FirePen = 10
},
speed = 12500,
UberSpeed = 25000,
speed = 25000,
critChance = 0,
earlierUber = true,
tooltip = "The Uber variant has 10 ^xB97123Fire^7 penetration (Applied on Pinnacle And Uber)"
},
["Shaper Ball"] = {
DamageType = "SpellProjectile",
DamageMultipliers = {
Cold = { 11.666076975909, 0.058330384879546 }
Cold = { 11.668066430448, 0.058340332152239 }
},
DamagePenetrations = {
ColdPen = 25
Expand Down Expand Up @@ -91,7 +91,7 @@ return {
speed = 3000,
tooltip = "Allocating Throw the Gauntlet increases Damage by a further 100% (Applied on Uber) and causes the fireball to have 30 ^xB97123Fire^7 penetration (Applied on Uber)"
},
["Maven MemoryGame"] = {
["Maven Memory Game"] = {
DamageType = "Melee",
DamageMultipliers = {
Lightning = { 34.763635149472, 0.17381817574736 },
Expand All @@ -102,4 +102,14 @@ return {
speed = 7500,
tooltip = "Is three separate hits, and has a large DoT effect. Neither is taken into account here. \n i.e. Hits before death should be more than 3 to survive"
},
}
},{
{ val = "None", label = "None" },
{ val = "Atziri Flameblast", label = "Atziri Flameblast" },
{ val = "Shaper Ball", label = "Shaper Ball" },
{ val = "Shaper Slam", label = "Shaper Slam" },
{ val = "Sirus Meteor", label = "Sirus Meteor" },
{ val = "Exarch Ball", label = "Exarch Ball" },
{ val = "Eater Beam", label = "Eater Beam" },
{ val = "Maven Fireball", label = "Maven Fireball" },
{ val = "Maven Memory Game", label = "Maven Memory Game" }
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
--
return {
#boss Atziri Metadata/Monsters/Atziri/Atziri true
#skill Flameblast AtziriFlameblast, GrantedEffectIdUber = AtziriFlameblastEmpowered, stages = 10,
#skill Flameblast AtziriFlameblastEmpowered, stages = 10,
#tooltip "The Uber variant has 10 ^xB97123Fire^7 penetration (Applied on Pinnacle And Uber)"
#boss Shaper Metadata/Monsters/AtlasBosses/TheShaperBoss false
#skill Ball AtlasBossAcceleratingProjectiles
Expand All @@ -26,4 +26,4 @@ return {
#tooltip "Allocating Throw the Gauntlet increases Damage by a further 100% (Applied on Uber) and causes the fireball to have 30 ^xB97123Fire^7 penetration (Applied on Uber)"
#skill MemoryGame MavenMemoryGame
#tooltip "Is three separate hits, and has a large DoT effect. Neither is taken into account here. \n i.e. Hits before death should be more than 3 to survive"
}
#skillList
42 changes: 21 additions & 21 deletions src/Export/Enemies/Bosses.txt
Original file line number Diff line number Diff line change
Expand Up @@ -5,30 +5,30 @@
--
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 Venarius SynthesisVenarius {Uber}
#boss EaterOfWorlds AtlasInvadersConsumeBoss {Uber}
#boss SearingExarch AtlasInvadersCleansingBoss {Uber}
#boss Maven TheMaven {Uber}
#boss Sirus AtlasExiles5 {Uber}
#boss Shaper TheShaperBoss {Uber}
#boss Elder TheElder {Uber}

#boss AtlasInvadersBlackStarBoss BlackStar
#boss AtlasInvadersDoomBoss InfiniteHunger
#boss BlackStar AtlasInvadersBlackStarBoss
#boss InfiniteHunger AtlasInvadersDoomBoss

#boss Atziri Atziri

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

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

#boss AtlasExiles1 Baran
#boss AtlasExiles2 Veritania
#boss AtlasExiles3 AlHezmin
#boss AtlasExiles4 Drox
#boss Baran AtlasExiles1
#boss Veritania AtlasExiles2
#boss AlHezmin AtlasExiles3
#boss Drox AtlasExiles4
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,14 @@ local rarityDamageMult = {
Unique = (1 + dat("Mods"):GetRow("Id", "MonsterUnique5").Stat1Value[1] / 100),
UniqueAttack = (1 + dat("Mods"):GetRow("Id", "MonsterUnique5").Stat1Value[1] / 100) * (1 - dat("Mods"):GetRow("Id", "MonsterUnique8").Stat1Value[1] / 100)
}
local monsterBaseDamage = { 1.59, 4.9899997711182, 5.5599999427795, 6.1599998474121, 6.8099999427795, 7.5, 8.2299995422363, 9, 9.8199996948242, 10.699999809265, 11.619999885559, 12.60000038147, 13.640000343323, 14.739999771118, 15.909999847412, 17.139999389648, 18.450000762939, 19.829999923706, 21.290000915527, 22.840000152588, 24.469999313354, 26.190000534058, 28.010000228882, 29.940000534058, 31.959999084473, 34.110000610352, 36.360000610352, 38.75, 41.259998321533, 43.909999847412, 46.700000762939, 49.650001525879, 52.75, 56.009998321533, 59.450000762939, 63.080001831055, 66.889999389648, 70.910003662109, 75.129997253418, 79.580001831055, 84.26000213623, 89.180000305176, 94.349998474121, 99.800003051758, 105.51999664307, 111.5299987793, 117.86000061035, 124.5, 131.49000549316, 138.83000183105, 146.5299987793, 154.63000488281, 163.13999938965, 172.07000732422, 181.44999694824, 191.30000305176, 201.63000488281, 212.47999572754, 223.86999511719, 235.83000183105, 248.36999511719, 261.5299987793, 275.32998657227, 289.82000732422, 305.01000976562, 320.94000244141, 337.64999389648, 355.17999267578, 373.54998779297, 392.80999755859, 413.01000976562, 434.17999267578, 456.36999511719, 479.61999511719, 504, 529.53997802734, 556.29998779297, 584.34997558594, 613.72998046875, 644.5, 676.75, 710.52001953125, 745.89001464844, 782.94000244141, 821.72998046875, 862.35998535156, 904.90002441406, 949.44000244141, 996.07000732422, 1044.8900146484, 1096, 1149.5, 1205.5, 1264.1099853516, 1325.4499511719, 1389.6400146484, 1456.8199462891, 1527.1199951172, 1600.6800537109, 1677.6400146484, 1758.1700439453, }
local monsterBaseDamage = { 4.9899997711182, 5.5599999427795, 6.1599998474121, 6.8099999427795, 7.5, 8.2299995422363, 9, 9.8199996948242, 10.699999809265, 11.619999885559, 12.60000038147, 13.640000343323, 14.739999771118, 15.909999847412, 17.139999389648, 18.450000762939, 19.829999923706, 21.290000915527, 22.840000152588, 24.469999313354, 26.190000534058, 28.010000228882, 29.940000534058, 31.959999084473, 34.110000610352, 36.360000610352, 38.75, 41.259998321533, 43.909999847412, 46.700000762939, 49.650001525879, 52.75, 56.009998321533, 59.450000762939, 63.080001831055, 66.889999389648, 70.910003662109, 75.129997253418, 79.580001831055, 84.26000213623, 89.180000305176, 94.349998474121, 99.800003051758, 105.51999664307, 111.5299987793, 117.86000061035, 124.5, 131.49000549316, 138.83000183105, 146.5299987793, 154.63000488281, 163.13999938965, 172.07000732422, 181.44999694824, 191.30000305176, 201.63000488281, 212.47999572754, 223.86999511719, 235.83000183105, 248.36999511719, 261.5299987793, 275.32998657227, 289.82000732422, 305.01000976562, 320.94000244141, 337.64999389648, 355.17999267578, 373.54998779297, 392.80999755859, 413.01000976562, 434.17999267578, 456.36999511719, 479.61999511719, 504, 529.53997802734, 556.29998779297, 584.34997558594, 613.72998046875, 644.5, 676.75, 710.52001953125, 745.89001464844, 782.94000244141, 821.72998046875, 862.35998535156, 904.90002441406, 949.44000244141, 996.07000732422, 1044.8900146484, 1096, 1149.5, 1205.5, 1264.1099853516, 1325.4499511719, 1389.6400146484, 1456.8199462891, 1527.1199951172, 1600.6800537109, 1677.6400146484, 1758.1700439453, }
local monsterMapDifficultyMult = {}
for row in dat("MonsterMapDifficulty"):Rows() do
monsterMapDifficultyMult[row.AreaLevel] = 1 + row.DamagePercentIncrease / 100
end
local baseDamage = {
AtziriFlameblast = { index = 1, uberIndex = 2, oldMethod = true },
AtlasBossAcceleratingProjectiles = { index = 1, uberIndex = 2, oldMethod = true },
AtziriFlameblastEmpowered = { index = 1, uberIndex = 2, mapBoss = true },
AtlasBossAcceleratingProjectiles = { index = 1, uberIndex = 2 },
AtlasBossFlickerSlam = { index = 1, uberIndex = 2, oldMethod = true, attack = true },
AtlasExileOrionCircleMazeBlast3 = { index = 4, uberIndex = 5 },
CleansingFireWall = { index = 1, oldMethod = true },
Expand All @@ -22,7 +22,7 @@ local baseDamage = {
MavenMemoryGame = { index = 1, oldMethod = true, mapBoss = true },
}
local oldMethod = {
AtziriFlameblast = { Fire = { 1210.408, 0 } },
AtziriFlameblastEmpowered = { Fire = { 1210.408, 0 } },
AtlasBossAcceleratingProjectiles = { Cold = { 3358.0288, 0 } },
AtlasBossFlickerSlam = { Physical = { 1769.847, 0 } },
AtlasExileOrionCircleMazeBlast3 = { Physical = { 18154.481, 0 }, SkillUberDamageMult = 152 },
Expand Down Expand Up @@ -74,7 +74,7 @@ local function calcSkillDamage(state)
break
end
end
ExtraDamageMult = { ExtraDamageMult[1] * (1 + stageMulti * (skill.stages - 1)), ExtraDamageMult[2] * (1 + stageMulti * (skill.stages - 1)) }
ExtraDamageMult = { ExtraDamageMult[1] * (1 + stageMulti * skill.stages), ExtraDamageMult[2] * (1 + stageMulti * skill.stages) }
end
-- old method with hardcoded values (Still used for Shaper Slam)
if baseDamage[grantedId].oldMethod then
Expand All @@ -83,7 +83,7 @@ local function calcSkillDamage(state)
local conversionDivisor = m_max(totalConversions, 100)
physConversions = { m_max(1 - totalConversions / 100, 0), physConversions[2] / conversionDivisor, physConversions[3] / conversionDivisor, physConversions[4] / conversionDivisor, physConversions[5] / conversionDivisor }
end
local baseDamageMult = state.SkillExtraDamageMult * ExtraDamageMult[1] * boss.damageMult / 100 * (rarityDamageMult[rarityType] or 1) * (baseDamage[grantedId].mapBoss and monsterMapDifficultyMult[84] or 1) / (monsterBaseDamage[monsterLevel] or 1)
local baseDamageMult = state.SkillExtraDamageMult * ExtraDamageMult[1] * boss.damageMult / 100 * (rarityDamageMult[rarityType] or 1) * (baseDamage[grantedId].mapBoss and monsterMapDifficultyMult[monsterLevel] or 1) / (monsterBaseDamage[monsterLevel - 1] or 1)
if oldMethod[grantedId].Physical and physConversions[1] ~= 0 then
local damageRange = (oldMethod[grantedId].Physical[2] == 0) and (boss.damageRange / 100) or oldMethod[grantedId].Physical[2] / 100
local damageMult = oldMethod[grantedId].Physical[1] * physConversions[1] * baseDamageMult
Expand All @@ -106,12 +106,11 @@ local function calcSkillDamage(state)
end
end
if ExtraDamageMult[1] ~= ExtraDamageMult[2] then
state.DamageData.SkillUberDamageMult = 100 * ExtraDamageMult[2] / ExtraDamageMult[1] * (baseDamage[grantedId].mapBoss and (monsterMapDifficultyMult[85] / monsterMapDifficultyMult[84]) or 1)
end
if oldMethod[grantedId].SkillUberDamageMult then
state.DamageData.SkillUberDamageMult = oldMethod[grantedId].SkillUberDamageMult * (baseDamage[grantedId].mapBoss and (monsterMapDifficultyMult[85] / monsterMapDifficultyMult[84]) or 1)
state.DamageData.SkillUberDamageMult = 100 * ExtraDamageMult[2] / ExtraDamageMult[1] * (baseDamage[grantedId].mapBoss and (monsterMapDifficultyMult[monsterLevel + 1] / monsterMapDifficultyMult[monsterLevel]) or 1)
elseif oldMethod[grantedId].SkillUberDamageMult then
state.DamageData.SkillUberDamageMult = oldMethod[grantedId].SkillUberDamageMult * (baseDamage[grantedId].mapBoss and (monsterMapDifficultyMult[monsterLevel + 1] / monsterMapDifficultyMult[monsterLevel]) or 1)
elseif baseDamage[grantedId].mapBoss then
state.DamageData.SkillUberDamageMult = 100 * (monsterMapDifficultyMult[85] / monsterMapDifficultyMult[84])
state.DamageData.SkillUberDamageMult = 100 * (monsterMapDifficultyMult[baseDamage[grantedId].uberMapBoss or (monsterLevel + 1)] / monsterMapDifficultyMult[monsterLevel])
end

else
Expand Down Expand Up @@ -143,13 +142,13 @@ local function calcSkillDamage(state)
end
end
end
monsterLevel = skill.statsPerLevel[baseDamage[grantedId].index].PlayerLevelReq + 1
monsterLevel = skill.statsPerLevel[baseDamage[grantedId].index].PlayerLevelReq
if baseDamages["minPhysical1"] or baseDamages["maxPhysical1"] then
local totalConversions = physConversions[2] + physConversions[3] + physConversions[4] + physConversions[5]
local conversionDivisor = m_max(totalConversions, 100)
physConversions = { m_max(1 - totalConversions / 100, 0), physConversions[2] / conversionDivisor, physConversions[3] / conversionDivisor, physConversions[4] / conversionDivisor, physConversions[5] / conversionDivisor }
end
local baseDamageMult = state.SkillExtraDamageMult * ExtraDamageMult[1] * (rarityDamageMult[rarityType] or 1) * (baseDamage[grantedId].mapBoss and monsterMapDifficultyMult[84] or 1) / (monsterBaseDamage[monsterLevel] or 1) -- * boss.damageMult / 100
local baseDamageMult = state.SkillExtraDamageMult * ExtraDamageMult[1] * (rarityDamageMult[rarityType] or 1) * (baseDamage[grantedId].mapBoss and monsterMapDifficultyMult[monsterLevel] or 1) / (monsterBaseDamage[monsterLevel] or 1) -- * boss.damageMult / 100
if (baseDamages["minPhysical1"] or baseDamages["maxPhysical1"]) and physConversions[1] ~= 0 then
local damageMult = physConversions[1] * baseDamageMult
state.DamageData["PhysicalDamageMultMin"], state.DamageData["PhysicalDamageMultMax"] = damageMult * (baseDamages["minPhysical1"] or 0), damageMult * (baseDamages["maxPhysical1"] or 0)
Expand All @@ -171,14 +170,14 @@ local function calcSkillDamage(state)
if baseDamage[grantedId].uberIndex then
local SkillUberDamageMult = 0
local SkillDamageMult = 0
local uberMonsterLevel = skill.statsPerLevel[baseDamage[grantedId].uberIndex].PlayerLevelReq + 1
local uberMonsterLevel = skill.statsPerLevel[baseDamage[grantedId].uberIndex].PlayerLevelReq
for _, damageType in ipairs({"Physical", "Lightning", "Cold", "Fire", "Chaos"}) do
if (baseDamages["min"..damageType.."1"] or baseDamages["max"..damageType.."1"]) then
SkillDamageMult = SkillDamageMult + baseDamages["min"..damageType.."1"] or baseDamages["max"..damageType.."1"]
SkillUberDamageMult = SkillUberDamageMult + baseDamages["min"..damageType.."2"] or baseDamages["max"..damageType.."2"]
end
end
SkillUberDamageMult = (SkillUberDamageMult / (monsterBaseDamage[uberMonsterLevel] or 1)) / (SkillDamageMult / (monsterBaseDamage[monsterLevel] or 1)) * (baseDamage[grantedId].mapBoss and (monsterMapDifficultyMult[85] / monsterMapDifficultyMult[84]) or 1)
SkillUberDamageMult = (SkillUberDamageMult / (monsterBaseDamage[uberMonsterLevel] or 1)) / (SkillDamageMult / (monsterBaseDamage[monsterLevel] or 1)) * (baseDamage[grantedId].mapBoss and (monsterMapDifficultyMult[uberMonsterLevel] / monsterMapDifficultyMult[monsterLevel]) or 1)
if SkillUberDamageMult > 1.15 or SkillUberDamageMult < 0.85 then
state.DamageData.SkillUberDamageMult = m_ceil(SkillUberDamageMult * 100)
end
Expand Down Expand Up @@ -233,20 +232,7 @@ local function getStat(state, stat)
end
end
end
if boss.earlierUber then
local statsPerLevel = skill.statsPerLevelUber[2]
for i, additionalStat in ipairs(statsPerLevel.AdditionalStats) do
if additionalStat.Id == "base_reduce_enemy_lightning_resistance_%" then
DamageData["LightningUberPen"] = statsPerLevel.AdditionalStatsValues[i]
elseif additionalStat.Id == "base_reduce_enemy_cold_resistance_%" then
DamageData["ColdUberPen"] = statsPerLevel.AdditionalStatsValues[i]
elseif additionalStat.Id == "base_reduce_enemy_fire_resistance_%" then
DamageData["FireUberPen"] = statsPerLevel.AdditionalStatsValues[i]
elseif additionalStat.Id == "base_reduce_enemy_chaos_resistance_%" then
DamageData["ChaosUberPen"] = statsPerLevel.AdditionalStatsValues[i]
end
end
elseif skill.statsPerLevel2 then
if skill.statsPerLevel2 then
for level, statsPerLevel in ipairs(skill.statsPerLevel2) do
for i, additionalStat in ipairs(statsPerLevel.AdditionalStats) do
if additionalStat.Id == "base_reduce_enemy_lightning_resistance_%" then
Expand Down Expand Up @@ -313,16 +299,32 @@ local function getStat(state, stat)
end
end

local directiveTable = {}
local directiveTable = { monsters = {}, skills = {} }

-- #boss [<Display name>] <MonsterId> <earlierUber>
-- Initialises the boss
directiveTable.boss = function(state, args, out)
local displayName, monsterId, earlierUber = args:match("(%w+) (.+) (%w+)")
-- #boss [<Display name>] [<MonsterId>] <isUber>
directiveTable.monsters.boss = function(state, args, out)
local displayName, monsterId, isUber = args:match("(%w+) (.+) {(%w+)}")
if not displayName then
displayName = args
monsterId = args
displayName, monsterId = args:match("(%w+) (.+)")
end

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

out:write('bosses["', displayName, '"] = {\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

-- #boss [<Display name>] [<MonsterId>] <earlierUber>
-- Initialises the boss
directiveTable.skills.boss = function(state, args, out)
local displayName, monsterId, earlierUber = args:match("(%w+) (.+) (%w+)")
local bossData = dat("MonsterVarieties"):GetRow("Id", monsterId)
state.boss = { displayName = displayName, damageRange = bossData.Type.DamageSpread, damageMult = bossData.DamageMultiplier, critChance = m_ceil(bossData.CriticalStrikeChance / 100) }
if earlierUber == "true" then
Expand All @@ -339,12 +341,17 @@ end
-- #skill [<Display name>] [<GrantedEffectId>]
-- optional# <GrantedEffectId2> <GrantedEffectIdUber> <SkillExtraDamageMult> <speedMult>
-- Initialises and emits the skill data
directiveTable.skill = function(state, args, out)
directiveTable.skills.skill = function(state, args, out)
local displayName, grantedId = args:match("(%w+) (%w+)")
if not grantedId then
displayName, grantedId = args
end
if displayName == "MemoryGame" then
displayName = "Memory Game"
end
local boss = state.boss
state.skillList = state.skillList or {}
table.insert(state.skillList, boss.displayName.." "..displayName)
local skill = {}
local skillData = dat("GrantedEffects"):GetRow("Id", grantedId)
local GrantedEffectStatSets = dat("GrantedEffectStatSets"):GetRow("Id", grantedId)
Expand Down Expand Up @@ -430,14 +437,28 @@ directiveTable.skill = function(state, args, out)
end

-- #tooltip
directiveTable.tooltip = function(state, args, out)
directiveTable.skills.tooltip = function(state, args, out)
if args then
out:write(',\n tooltip = ', args,'\n')
end
out:write(' },\n')
state.skill = nil
end

processTemplateFile("bossSkills", "", "../Data/", directiveTable)
-- #skillList
directiveTable.skills.skillList = function(state, args, out)
out:write('},{\n')
out:write(' { val = "None", label = "None" }')
for _, skillName in pairs(state.skillList) do
out:write(',\n { val = "', skillName, '", label = "', skillName, '" }')
end
out:write('\n}')
state.boss = nil
state.skillList = nil
end

processTemplateFile("BossSkills", "Enemies/", "../Data/", directiveTable.skills)
print("Boss skill data exported.")
processTemplateFile("Bosses", "Enemies/", "../Data/", directiveTable.monsters)
print("Boss data exported.")

Loading