Release 1.2.18

- Added jewel templates
- Added Tulfall
- Creating a new build opens an unnamed build instead of prompting for a build name
- Support for EE
This commit is contained in:
Openarl
2016-11-29 21:18:03 +10:00
parent aaf3fe6d19
commit d79b6b6ca3
14 changed files with 260 additions and 84 deletions

View File

@@ -331,7 +331,7 @@ function CalcBreakdownClass:AddModSection(sectionData)
for _, tag in ipairs(row.mod.tagList) do
local desc
if tag.type == "Condition" then
desc = "Condition: "..(tag.varList and table.concat(tag.varList, "/") or self:FormatModName(tag.var))
desc = "Condition: "..(tag.neg and "Not " or "")..(tag.varList and table.concat(tag.varList, "/") or self:FormatModName(tag.var))
elseif tag.type == "Multiplier" then
if tag.base then
desc = (row.mod.type == "BASE" and string.format("%+g", tag.base) or tag.base.."%").." + "..math.abs(row.mod.value).." per "..self:FormatModName(tag.var)

View File

@@ -126,6 +126,15 @@ local varList = {
{ var = "enemyChaosResist", type = "number", label = "Enemy Chaos Resistance:", apply = function(val, modList, enemyModList)
enemyModList:NewMod("ChaosResist", "BASE", val, "Config")
end },
{ var = "enemyConditionHitByFireDamage", type = "check", label = "Enemy was Hit by Fire Damage?", ifNode = 39085, apply = function(val, modList, enemyModList)
modList:NewMod("Misc", "LIST", { type = "EnemyCondition", var = "HitByFireDamage" }, "Config")
end },
{ var = "enemyConditionHitByColdDamage", type = "check", label = "Enemy was Hit by Cold Damage?", ifNode = 39085, apply = function(val, modList, enemyModList)
modList:NewMod("Misc", "LIST", { type = "EnemyCondition", var = "HitByColdDamage" }, "Config")
end },
{ var = "enemyConditionHitByLightningDamage", type = "check", label = "Enemy was Hit by Light. Damage?", ifNode = 39085, apply = function(val, modList, enemyModList)
modList:NewMod("Misc", "LIST", { type = "EnemyCondition", var = "HitByLightningDamage" }, "Config")
end },
}
local ConfigTabClass = common.NewClass("ConfigTab", "UndoHandler", "ControlHost", "Control", function(self, build)

View File

@@ -165,6 +165,9 @@ function ModDBClass:Sum(modType, cfg, arg1, arg2, arg3, arg4, arg5, arg6, arg7,
else
match = self.conditions[tag.var]
end
if tag.neg then
match = not match
end
if not match then
value = nullValue
end

View File

@@ -135,6 +135,9 @@ function ModListClass:Sum(modType, cfg, arg1, arg2, arg3, arg4, arg5, arg6, arg7
else
match = self.conditions[tag.var]
end
if tag.neg then
match = not match
end
if not match then
value = nullValue
end

View File

@@ -178,5 +178,15 @@ League: Breach
50% chance to gain a Power Charge on Killing a Frozen Enemy
Adds 10 to 20 Cold Damage to Spells per Power Charge
+21 Mana gained on Killing a Frozen Enemy
]],[[
Tulfall
Tornado Wand
(35-39)% increased Spell Damage
11% increased Cast Speed
50% chance to gain a Power Charge on Killing a Frozen Enemy
Adds 15 to 25 Cold Damage to Spells per Power Charge
Lose all Power Charges on reaching Maximum Power Charges
Gain a Frenzy Charge on reaching Maximum Power Charges
11% increased Cold Damage per Frenzy Charge
]],
}

View File

@@ -182,6 +182,23 @@ Prefixes:
{range:0}Adds (0-60 to 0-104) Cold Damage to Spells
{range:0}Adds (0-15 to 0-200) Lightning Damage to Spells
{spell suf}]],
["jewel pre"] = [[
Prefixes:
{range:0}(0 to 16)% increased Physical Damage
{range:0}(0 to 16)% increased Fire Damage
{range:0}(0 to 16)% increased Cold Damage
{range:0}(0 to 16)% increased Lightning Damage
{range:0}(0 to 16)% increased Chaos Damage
{range:0}(0 to 16)% increased Totem Damage
{range:0}(0 to 7)% increased maximum Life]],
["jewel suf"] = [[
Suffixes:
{range:0}(0 to 10)% increased Damage
{range:0}(0 to 12)% increased Projectile Damage
{range:0}(0 to 12)% increased Damage over Time
{range:0}(0 to 12)% increased Area Damage
{range:0}(0 to 4)% increased Attack and Cast Speed
{range:0}(0 to 5)% increased Attack Speed]],
}
local rares = {
@@ -1030,6 +1047,74 @@ Prophecy Wand
(16 to 20)% increased Spell Damage
{spell 1h}
]],
-- Jewels
[[
Jewel
Crimson Jewel
{jewel pre}
{range:0}(0 to 18)% increased Armour
{range:0}(0 to 14)% increased Physical Damage with One Handed Melee Weapons
{range:0}(0 to 14)% increased Physical Damage with Two Handed Melee Weapons
{range:0}(0 to 6)% increased Attack Speed with One Handed Melee Weapons
{range:0}(0 to 6)% increased Attack Speed with Two Handed Melee Weapons
{range:0}(0 to 18)% increased Critical Strike Chance with One Handed Melee Weapons
{range:0}(0 to 18)% increased Critical Strike Chance with Two Handed Melee Weapons
{range:0}+(0 to 12)% to Critical Strike Multiplier with One Handed Melee Weapons
{range:0}+(0 to 12)% to Critical Strike Multiplier with Two Handed Melee Weapons
{jewel suf}
{range:0}(0 to 12)% increased Melee Damage
{range:0}(0 to 12)% increased Global Critical Strike Chance
{range:0}(0 to 14)% increased Melee Critical Strike Chance
{range:0}+(0 to 8)% to Global Critical Strike Multiplier
{range:0}+(0 to 10)% to Melee Critical Strike Multiplier
]],
[[
Jewel
Viridian Jewel
{jewel pre}
{range:0}(0 to 18)% increased Evasion Rating
{range:0}(0 to 16)% increased Trap Damage
{range:0}(0 to 16)% increased Mine Damage
{range:0}(0 to 16)% increased Physical Damage with Bows
{range:0}(0 to 14)% increased Physical Damage with One Handed Melee Weapons
{range:0}(0 to 14)% increased Physical Damage with Two Handed Melee Weapons
{range:0}(0 to 8)% increased Attack Speed with Bows
{range:0}(0 to 6)% increased Attack Speed with One Handed Melee Weapons
{range:0}(0 to 6)% increased Attack Speed with Two Handed Melee Weapons
{range:0}(0 to 18)% increased Critical Strike Chance with One Handed Melee Weapons
{range:0}(0 to 18)% increased Critical Strike Chance with Two Handed Melee Weapons
{range:0}+(0 to 12)% to Critical Strike Multiplier with One Handed Melee Weapons
{range:0}+(0 to 12)% to Critical Strike Multiplier with Two Handed Melee Weapons
{jewel suf}
{range:0}(0 to 12)% increased Melee Damage
{range:0}(0 to 12)% increased Global Critical Strike Chance
{range:0}(0 to 14)% increased Melee Critical Strike Chance
{range:0}+(0 to 8)% to Global Critical Strike Multiplier
{range:0}+(0 to 10)% to Melee Critical Strike Multiplier
]],
[[
Jewel
Cobalt Jewel
{jewel pre}
{range:0}(0 to 8)% increased maximum Energy Shield
{range:0}(0 to 6)% faster start of Energy Shield Recharge
{range:0}(0 to 16)% increased Trap Damage
{range:0}(0 to 16)% increased Mine Damage
{range:0}(0 to 16)% increased Minion Damage
{range:0}(0 to 16)% increased Physical Damage with Wands
{range:0}(0 to 8)% increased Attack Speed with Wands
{range:0}(0 to 16)% increased Spell Damage while wielding a Staff
{range:0}(0 to 16)% increased Spell Damage while holding a Shield
{range:0}(0 to 5)% increased Cast Speed while wielding a Staff
{range:0}(0 to 5)% increased Cast Speed while holding a Shield
{jewel suf}
{range:0}(0 to 4)% increased Cast Speed
{range:0}(0 to 12)% increased Spell Damage
{range:0}(0 to 12)% increased Global Critical Strike Chance
{range:0}(0 to 14)% increased Critical Strike Chance for Spells
{range:0}+(0 to 8)% to Global Critical Strike Multiplier
{range:0}+(0 to 10)% to Critical Strike Multiplier for Spells
]],
}
for i, rare in pairs(rares) do

View File

@@ -32,23 +32,9 @@ function buildMode:Init(dbFileName, buildName)
self.anchorTopBarLeft = common.New("Control", nil, 4, 4, 0, 20)
self.controls.back = common.New("ButtonControl", {"LEFT",self.anchorTopBarLeft,"RIGHT"}, 0, 0, 60, 20, "<< Back", function()
if self.unsaved then
main:OpenPopup(280, 100, "Save Changes", {
common.New("LabelControl", nil, 0, 20, 0, 16, "^7This build has unsaved changes.\nDo you want to save them now?"),
common.New("ButtonControl", nil, -90, 70, 80, 20, "Save", function()
self:SaveDBFile()
main:ClosePopup()
main:SetMode("LIST", self.buildName)
end),
common.New("ButtonControl", nil, 0, 70, 80, 20, "Don't Save", function()
main:ClosePopup()
main:SetMode("LIST", self.buildName)
end),
common.New("ButtonControl", nil, 90, 70, 80, 20, "Cancel", function()
main:ClosePopup()
end),
})
self:OpenSavePopup(false)
else
main:SetMode("LIST", self.buildName)
main:SetMode("LIST", self.dbFileName and self.buildName)
end
end)
self.controls.buildName = common.New("Control", {"LEFT",self.controls.back,"RIGHT"}, 8, 0, 0, 20)
@@ -67,40 +53,14 @@ function buildMode:Init(dbFileName, buildName)
self:SaveDBFile()
end)
self.controls.save.enabled = function()
return self.unsaved
return not self.dbFileName or self.unsaved
end
self.controls.saveAs = common.New("ButtonControl", {"LEFT",self.controls.save,"RIGHT"}, 8, 0, 70, 20, "Save As", function()
local newFileName, newBuildName
local popup
popup = main:OpenPopup(370, 100, "Save As", {
common.New("LabelControl", nil, 0, 20, 0, 16, "^7Enter new build name:"),
edit = common.New("EditControl", nil, 0, 40, 350, 20, self.buildName, nil, "\\/:%*%?\"<>|", 50, function(buf)
newFileName = main.buildPath..buf..".xml"
newBuildName = buf
popup.controls.save.enabled = false
if not buf:match("%S") then
return
end
local out = io.open(newFileName, "r")
if out then
out:close()
return
end
popup.controls.save.enabled = true
end),
save = common.New("ButtonControl", nil, -45, 70, 80, 20, "Save", function()
self.dbFileName = newFileName
self.buildName = newBuildName
main.modeArgs = { newFileName, newBuildName }
self:SaveDBFile()
main:ClosePopup()
end),
common.New("ButtonControl", nil, 45, 70, 80, 20, "Cancel", function()
main:ClosePopup()
end),
}, "save", "edit")
popup.controls.save.enabled = false
self:OpenSaveAsPopup()
end)
self.controls.saveAs.enabled = function()
return self.dbFileName
end
-- Controls: top bar, right side
self.anchorTopBarRight = common.New("Control", nil, function() return main.screenW / 2 + 6 end, 4, 0, 20)
@@ -325,6 +285,7 @@ function buildMode:Init(dbFileName, buildName)
self.buildName = buildName
self.characterLevel = 1
self.controls.characterLevel:SetText(tostring(self.characterLevel))
self.banditNormal = "None"
self.banditCruel = "None"
self.banditMerciless = "None"
@@ -344,7 +305,7 @@ function buildMode:Init(dbFileName, buildName)
ConPrintf("Loading '%s'...", dbFileName)
if self:LoadDBFile() then
main:SetMode("LIST", dbFileName)
main:SetMode("LIST", buildName)
return
end
@@ -385,26 +346,12 @@ function buildMode:CanExit()
if not self.unsaved then
return true
end
main:OpenPopup(280, 100, "Save Changes", {
common.New("LabelControl", nil, 0, 20, 0, 16, "^7This build has unsaved changes.\nDo you want to save them before exiting?"),
common.New("ButtonControl", nil, -90, 70, 80, 20, "Save", function()
self:SaveDBFile()
main:ClosePopup()
Exit()
end),
common.New("ButtonControl", nil, 0, 70, 80, 20, "Don't Save", function()
main:ClosePopup()
Exit()
end),
common.New("ButtonControl", nil, 90, 70, 80, 20, "Cancel", function()
main:ClosePopup()
end),
})
self:OpenSavePopup(true)
return false
end
function buildMode:Shutdown()
if launch.devMode and not self.abortSave then
if launch.devMode and not self.abortSave and self.dbFileName then
self:SaveDBFile()
end
self.abortSave = nil
@@ -445,6 +392,12 @@ function buildMode:OnFrame(inputEvents)
if event.key == "s" then
self:SaveDBFile()
inputEvents[id] = nil
elseif event.key == "w" then
if self.unsaved then
self:OpenSavePopup(false)
else
main:SetMode("LIST", self.dbFileName and self.buildName)
end
elseif event.key == "1" then
self.viewMode = "TREE"
elseif event.key == "2" then
@@ -559,6 +512,61 @@ function buildMode:OnFrame(inputEvents)
self:DrawControls(main.viewPort)
end
function buildMode:OpenSavePopup(exit)
main:OpenPopup(280, 100, "Save Changes", {
common.New("LabelControl", nil, 0, 20, 0, 16, "^7This build has unsaved changes.\nDo you want to save them "..(exit and "before exiting?" or "now?")),
common.New("ButtonControl", nil, -90, 70, 80, 20, "Save", function()
main:ClosePopup()
self.actionOnSave = exit and "EXIT" or "LIST"
self:SaveDBFile()
end),
common.New("ButtonControl", nil, 0, 70, 80, 20, "Don't Save", function()
main:ClosePopup()
if exit then
Exit()
else
main:SetMode("LIST", self.dbFileName and self.buildName)
end
end),
common.New("ButtonControl", nil, 90, 70, 80, 20, "Cancel", function()
main:ClosePopup()
end),
})
end
function buildMode:OpenSaveAsPopup()
local newFileName, newBuildName
local popup
popup = main:OpenPopup(370, 100, self.dbFileName and "Save As" or "Save", {
common.New("LabelControl", nil, 0, 20, 0, 16, "^7Enter new build name:"),
edit = common.New("EditControl", nil, 0, 40, 350, 20, self.dbFileName and self.buildName, nil, "\\/:%*%?\"<>|", 50, function(buf)
newFileName = main.buildPath..buf..".xml"
newBuildName = buf
popup.controls.save.enabled = false
if not buf:match("%S") then
return
end
local out = io.open(newFileName, "r")
if out then
out:close()
return
end
popup.controls.save.enabled = true
end),
save = common.New("ButtonControl", nil, -45, 70, 80, 20, "Save", function()
self.dbFileName = newFileName
self.buildName = newBuildName
main.modeArgs = { newFileName, newBuildName }
self:SaveDBFile()
main:ClosePopup()
end),
common.New("ButtonControl", nil, 45, 70, 80, 20, "Cancel", function()
main:ClosePopup()
end),
}, "save", "edit")
popup.controls.save.enabled = false
end
function buildMode:RefreshStatList()
-- Build list of side bar stats
wipeTable(self.controls.statBox.list)
@@ -626,6 +634,9 @@ function buildMode:LoadDB(xmlText, fileName)
end
function buildMode:LoadDBFile()
if not self.dbFileName then
return
end
local file = io.open(self.dbFileName, "r")
if not file then
return true
@@ -655,6 +666,10 @@ function buildMode:SaveDB(fileName)
end
function buildMode:SaveDBFile()
if not self.dbFileName then
self:OpenSaveAsPopup()
return
end
local xmlText = self:SaveDB(self.dbFileName)
if not xmlText then
return true
@@ -665,6 +680,11 @@ function buildMode:SaveDBFile()
end
file:write(xmlText)
file:close()
if self.actionOnSave == "LIST" then
main:SetMode("LIST", self.buildName)
elseif self.actionOnSave == "EXIT" then
Exit()
end
end
return buildMode

View File

@@ -18,7 +18,8 @@ function listMode:Init(selBuildName)
end
self.controls.new = common.New("ButtonControl", {"TOP",self.anchor,"TOP"}, -210, 0, 60, 20, "New", function()
self:New()
main:SetMode("BUILD", false, "Unnamed build")
--self:New()
end)
self.controls.open = common.New("ButtonControl", {"LEFT",self.controls.new,"RIGHT"}, 8, 0, 60, 20, "Open", function()
self:LoadSel()

View File

@@ -1113,6 +1113,8 @@ local function performCalcs(env)
for _, value in ipairs(modDB:Sum("LIST", nil, "Misc")) do
if value.type == "Condition" then
condList[value.var] = true
elseif value.type == "EnemyCondition" then
enemyDB.conditions[value.var] = true
elseif value.type == "Multiplier" then
modDB.multipliers[value.var] = (modDB.multipliers[value.var] or 0) + value.value
end
@@ -1940,6 +1942,17 @@ local function performCalcs(env)
output.TotalMin = totalMin
output.TotalMax = totalMax
-- Update enemy hit-by-damage-type conditions
if output.FireAverage > 0 then
enemyDB.conditions.HitByFireDamage = true
end
if output.ColdAverage > 0 then
enemyDB.conditions.HitByColdDamage = true
end
if output.LightningAverage > 0 then
enemyDB.conditions.HitByLightningDamage = true
end
-- Calculate average damage and final DPS
output.AverageHit = (totalMin + totalMax) / 2 * output.CritEffect
output.AverageDamage = output.AverageHit * output.HitChance / 100

View File

@@ -198,7 +198,7 @@ function main:Init()
self.buildSortMode = "NAME"
self:SetMode("LIST")
self:SetMode("BUILD", false, "Unnamed build")
self:LoadSettings()
end

View File

@@ -417,6 +417,17 @@ local specialModList = {
["life leech applies instantly%. life regeneration has no effect%."] = { flag("VaalPact"), flag("NoLifeRegen") },
["deal no non%-fire damage"] = { flag("DealNoPhysical"), flag("DealNoLightning"), flag("DealNoCold"), flag("DealNoChaos") },
["removes all mana%. spend life instead of mana for skills"] = { mod("Mana", "MORE", -100), flag("BloodMagic") },
["enemies you hit with elemental damage temporarily get (%+%d+)%% resistance to those elements and (%-%d+)%% resistance to other elements"] = function(plus, _, minus)
minus = tonumber(minus)
return {
mod("Misc", "LIST", { type = "EnemyModifier", mod = mod("FireResist", "BASE", plus, { type = "Condition", var = "HitByFireDamage" }) }),
mod("Misc", "LIST", { type = "EnemyModifier", mod = mod("FireResist", "BASE", minus, { type = "Condition", var = "HitByFireDamage", neg = true }, { type = "Condition", varList={"HitByColdDamage","HitByLightningDamage"} }) }),
mod("Misc", "LIST", { type = "EnemyModifier", mod = mod("ColdResist", "BASE", plus, { type = "Condition", var = "HitByColdDamage" }) }),
mod("Misc", "LIST", { type = "EnemyModifier", mod = mod("ColdResist", "BASE", minus, { type = "Condition", var = "HitByColdDamage", neg = true }, { type = "Condition", varList={"HitByFireDamage","HitByLightningDamage"} }) }),
mod("Misc", "LIST", { type = "EnemyModifier", mod = mod("LightningResist", "BASE", plus, { type = "Condition", var = "HitByLightningDamage" }) }),
mod("Misc", "LIST", { type = "EnemyModifier", mod = mod("LightningResist", "BASE", minus, { type = "Condition", var = "HitByLightningDamage", neg = true }, { type = "Condition", varList={"HitByFireDamage","HitByColdDamage"} }) }),
}
end,
-- Ascendancy notables
["movement skills cost no mana"] = { mod("ManaCost", "MORE", -100, nil, 0, KeywordFlag.Movement) },
["projectiles have 100%% additional chance to pierce targets at the start of their movement, losing this chance as the projectile travels farther"] = { mod("PierceChance", "BASE", 100) },

View File

@@ -49,10 +49,21 @@ Head over to the [Releases](https://github.com/Openarl/PathOfBuilding/releases)
![ss3](https://cloud.githubusercontent.com/assets/19189971/18089780/f0ff234a-6f04-11e6-8c88-6193fe59a5c4.png)
## Changelog
### 1.2.18 - 2016/11/29
* Added 3 new Jewel templates
* Added 'Tulfall'
* Creating a new build now opens an unnamed build rather than asking for a build name
* You will be prompted to name the build when saving
* The program now opens a new build when run for the first time
* Added support for Elemental Equilibrium; when this passive is allocated, new options will appear in the Configuration tab
to allow you to indicate which damage types the enemy has been hit by before being hit by your main skill
* The enemy's resistances will update after the skill's hit damage is calculated, so that any damage over time effects are
calculated correctly
### 1.2.17 - 2016/11/28
* Added 'Tulborn' and 'Voice of the Storm'
* Added support for Mastermind of Discord; when this passive is allocated, new options will appear in the
Configuration tab to allow you to indicate which skill types you are using
* Added support for Mastermind of Discord; when this passive is allocated, new options will appear in the Configuration tab
to allow you to indicate which skill types you are using
* Conversion modifiers are now listed in the breakdowns for hit damage in the Calcs tab
* Added 2x multiplier to Cyclone's DPS to match the in-game tooltip
* Fixed bug preventing the buff from Summon Lightning Golem from applying correctly

View File

@@ -1,7 +1,17 @@
VERSION[1.2.18][2016/11/29]
* Added 3 new Jewel templates
* Added 'Tulfall'
* Creating a new build now opens an unnamed build rather than asking for a build name
* You will be prompted to name the build when saving
* The program now opens a new build when run for the first time
* Added support for Elemental Equilibrium; when this passive is allocated, new options will appear in the Configuration tab
to allow you to indicate which damage types the enemy has been hit by before being hit by your main skill
* The enemy's resistances will update after the skill's hit damage is calculated, so that any damage over time effects are
calculated correctly
VERSION[1.2.17][2016/11/28]
* Added 'Tulborn' and 'Voice of the Storm'
* Added support for Mastermind of Discord; when this passive is allocated, new options will appear in the
Configuration tab to allow you to indicate which skill types you are using
* Added support for Mastermind of Discord; when this passive is allocated, new options will appear in the Configuration tab
to allow you to indicate which skill types you are using
* Conversion modifiers are now listed in the breakdowns for hit damage in the Calcs tab
* Added 2x multiplier to Cyclone's DPS to match the in-game tooltip
* Fixed bug preventing the buff from Summon Lightning Golem from applying correctly

View File

@@ -1,20 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<PoBVersion>
<Version number="1.2.17"/>
<Version number="1.2.18"/>
<Source part="program" url="https://raw.githubusercontent.com/Openarl/PathOfBuilding/{branch}/"/>
<Source part="tree" url="https://raw.githubusercontent.com/Openarl/PathOfBuilding/{branch}/tree.zip"/>
<Source url="https://raw.githubusercontent.com/Openarl/PathOfBuilding/{branch}/runtime-win32.zip" part="runtime" platform="win32"/>
<File sha1="d4d8e00d3ecc2ffb3d0c2df0876c009bfe0937d2" name="Launch.lua" part="program"/>
<File sha1="93e19c2a160eb49993d50d9e2b47ea79962373d9" name="UpdateCheck.lua" part="program"/>
<File sha1="4f17937f2b37784e169a3792b235f2a0a3961e61" name="UpdateApply.lua" part="program"/>
<File sha1="fe91e91eca24d495f3cd5468b59af3d70d30a357" name="changelog.txt" part="program"/>
<File sha1="bf83aba6f87fe6c9b457a2dc94dc379ca1d27b5b" name="changelog.txt" part="program"/>
<File sha1="231a4fe264d84294427edacbf3e29ec4b301712e" name="Classes/BuildListControl.lua" part="program"/>
<File sha1="47c28993f5653955c9e76714775d87ac22b077da" name="Classes/ButtonControl.lua" part="program"/>
<File sha1="4c9854308faeac5a7f874a00a1e507b91ad1bcea" name="Classes/CalcBreakdownControl.lua" part="program"/>
<File sha1="441d881e7e7ad3512aedb50bec8fa811b268a4db" name="Classes/CalcBreakdownControl.lua" part="program"/>
<File sha1="23171916fa590c5344b17e67bd8d378574922388" name="Classes/CalcSectionControl.lua" part="program"/>
<File sha1="57ac3bdfbe1fe07539326e983a6df92a60c2cb78" name="Classes/CalcsTab.lua" part="program"/>
<File sha1="5d30e33c23cabf22917c02eb7df1963a5a27cb6a" name="Classes/CheckBoxControl.lua" part="program"/>
<File sha1="86c0beac5c2b6c9af922301a9c9c70812565524b" name="Classes/ConfigTab.lua" part="program"/>
<File sha1="6b968ed6c82f6d2c3380f919ef2afa61cd938734" name="Classes/ConfigTab.lua" part="program"/>
<File sha1="bbb08f183746d6ec023e2bd08fb7a89d365381da" name="Classes/Control.lua" part="program"/>
<File sha1="ae55fe1093e727872bc01cc94fa987395f944313" name="Classes/ControlHost.lua" part="program"/>
<File sha1="8305ea8d306a13160c369c474d19b05024a1f5ef" name="Classes/DropDownControl.lua" part="program"/>
@@ -26,8 +26,8 @@
<File sha1="ed4927d018a38cbe1581ca2345bc8fae8a49a78a" name="Classes/ItemSlotControl.lua" part="program"/>
<File sha1="e239a39a838d0a4a1d50bfb419be839d190c4039" name="Classes/ItemsTab.lua" part="program"/>
<File sha1="62138c7db82d57d638a16610a26acd0de75d3486" name="Classes/LabelControl.lua" part="program"/>
<File sha1="47003cfea8cdb4444ac1379090ae4986d95982b7" name="Classes/ModDB.lua" part="program"/>
<File sha1="b9cab9764c39db175ee4123366b23ea9cfd035b8" name="Classes/ModList.lua" part="program"/>
<File sha1="b878a447554368870c3ee1ec5abcba084435cf2a" name="Classes/ModDB.lua" part="program"/>
<File sha1="9075716e219fb25d917e83e3e3362d22c63d648c" name="Classes/ModList.lua" part="program"/>
<File sha1="9bc0d8791e7825e52070e96e7894d29fad70cf98" name="Classes/NotesTab.lua" part="program"/>
<File sha1="6f8f98d6ee505af53441c1fe9ad74fbff86d56ad" name="Classes/PassiveSpec.lua" part="program"/>
<File sha1="9a6bce38a62d9c07851cdd095e91f088e37cea4e" name="Classes/PassiveTree.lua" part="program"/>
@@ -42,20 +42,20 @@
<File sha1="a4f9cc96ba474d0a75c768a0eabec92837e027cf" name="Classes/TextListControl.lua" part="program"/>
<File sha1="aa9975d9b7e6fe56df19a5ada400da6b6e718478" name="Classes/TreeTab.lua" part="program"/>
<File sha1="4b7675c8b4fe71cade7dd3d70793df1ed8022d01" name="Classes/UndoHandler.lua" part="program"/>
<File sha1="c927eb267a13720de07d5c768151d748af54274c" name="Modules/Build.lua" part="program"/>
<File sha1="8888e736942ad025f3f81ceec2e1c433a9866942" name="Modules/BuildList.lua" part="program"/>
<File sha1="1865c2bc3c390b7ca2bc6dcedba7dbfbff979b39" name="Modules/Calcs.lua" part="program"/>
<File sha1="72ddc63155ed183be89b0f7226a4dace58b4a3d1" name="Modules/Build.lua" part="program"/>
<File sha1="8a07fe01c53b785ebb6256236e781fbaabd36c0e" name="Modules/BuildList.lua" part="program"/>
<File sha1="e9f5cf6c4f45010b552fce937ac06e159aea2a2d" name="Modules/Calcs.lua" part="program"/>
<File sha1="2a3ddc6fef06339cd06614fe032694a4e57bf878" name="Modules/CalcSections.lua" part="program"/>
<File sha1="f207df4010cb3c7bc6cce98be2529a3b8a708b8f" name="Modules/Common.lua" part="program"/>
<File sha1="bad785f71247b99ff76d9a359f725968aa71da5f" name="Modules/Data.lua" part="program"/>
<File sha1="592e5ab3048528b8c9f689f18663b9657a8a78b0" name="Modules/ItemTools.lua" part="program"/>
<File sha1="524318a7986bf14ed2cdddf055b9d829d521b871" name="Modules/Main.lua" part="program"/>
<File sha1="674dd0caeff9f08c19195ce4a74d81f601f205ad" name="Modules/ModParser.lua" part="program"/>
<File sha1="6165a0baf0c7d1cb6adf9bef68bfa9d9d3ad67ec" name="Modules/Main.lua" part="program"/>
<File sha1="ff99c0f6ebb3c6a6ce14005326726b60412eb34d" name="Modules/ModParser.lua" part="program"/>
<File sha1="5f93a9d8f58e0d5990a1f84e1ab1d53fbd35fb56" name="Modules/ModTools.lua" part="program"/>
<File sha1="e7ee7e5b6388facb7bf568517ecc401590757df7" name="Assets/ring.png" part="program"/>
<File sha1="9a320bfe629b1cf3f14fc77fbbf2508d0a5b2841" name="Assets/small_ring.png" part="program"/>
<File sha1="14487004d713f93791fc9958e2c9de4afb834ee2" name="Data/New.lua" part="program"/>
<File sha1="e56e6892b3f0559ba22644695de9b785dd7842d1" name="Data/Rares.lua" part="program"/>
<File sha1="5c338eb5766e531528b377a944b0b1881bc581f8" name="Data/New.lua" part="program"/>
<File sha1="69b07ade5dbfa9c2e9cd8421d858e3d60a58a3a0" name="Data/Rares.lua" part="program"/>
<File sha1="4719bd0eb7b999372a219fe6f9c419d280867512" name="Data/Gems/act_dex.lua" part="program"/>
<File sha1="0b0026bdb9342999eda1890965e3b548c49f7b4d" name="Data/Gems/act_int.lua" part="program"/>
<File sha1="4949ff400b5529fd1530d24c658b57732e367f19" name="Data/Gems/act_str.lua" part="program"/>