diff --git a/Classes/BuildListControl.lua b/Classes/BuildListControl.lua index c963a575..e85ad21c 100644 --- a/Classes/BuildListControl.lua +++ b/Classes/BuildListControl.lua @@ -45,13 +45,7 @@ function BuildListClass:IsMouseOver() if not self:IsShown() then return end - if self:GetMouseOverControl() then - return true - end - local x, y = self:GetPos() - local width, height = self:GetSize() - local cursorX, cursorY = GetCursorPos() - return cursorX >= x and cursorY >= y and cursorX < x + width and cursorY < y + height + return self:IsMouseInBounds() or self:GetMouseOverControl() end function BuildListClass:Draw(viewPort) diff --git a/Classes/ButtonControl.lua b/Classes/ButtonControl.lua index e9621b99..bdd66e71 100644 --- a/Classes/ButtonControl.lua +++ b/Classes/ButtonControl.lua @@ -15,10 +15,7 @@ function ButtonClass:IsMouseOver() if not self:IsShown() then return false end - local x, y = self:GetPos() - local width, height = self:GetSize() - local cursorX, cursorY = GetCursorPos() - return cursorX >= x and cursorY >= y and cursorX < x + width and cursorY < y + height + return self:IsMouseInBounds() end function ButtonClass:Draw() diff --git a/Classes/CalcBreakdownControl.lua b/Classes/CalcBreakdownControl.lua index b085b6d9..7d0f342a 100644 --- a/Classes/CalcBreakdownControl.lua +++ b/Classes/CalcBreakdownControl.lua @@ -23,13 +23,7 @@ function CalcBreakdownClass:IsMouseOver() if not self:IsShown() then return end - if self:GetMouseOverControl() then - return true - end - local x, y = self:GetPos() - local width, height = self:GetSize() - local cursorX, cursorY = GetCursorPos() - return cursorX >= x and cursorY >= y and cursorX < x + width and cursorY < y + height + return self:IsMouseInBounds() or self:GetMouseOverControl() end function CalcBreakdownClass:SetBreakdownData(displayData, pinned) @@ -354,6 +348,8 @@ function CalcBreakdownClass:FormatModValue(value, modType) else return -value.."% less" end + elseif modType == "FLAG" then + return value and "True" or "False" else return value end diff --git a/Classes/CalcSectionControl.lua b/Classes/CalcSectionControl.lua index b13c22e5..0cb2ddac 100644 --- a/Classes/CalcSectionControl.lua +++ b/Classes/CalcSectionControl.lua @@ -50,11 +50,9 @@ function CalcSectionClass:IsMouseOver() if self:GetMouseOverControl() then return true end - local x, y = self:GetPos() - local width, height = self:GetSize() - local cursorX, cursorY = GetCursorPos() - local mOver = cursorX >= x and cursorY >= y and cursorX < x + width and cursorY < y + height + local mOver = self:IsMouseInBounds() if mOver and not self.collapsed and self.enabled then + local cursorX, cursorY = GetCursorPos() for _, data in ipairs(self.data) do if data.enabled then for _, colData in ipairs(data) do diff --git a/Classes/CheckBoxControl.lua b/Classes/CheckBoxControl.lua index 55b2d84e..aa286ca8 100644 --- a/Classes/CheckBoxControl.lua +++ b/Classes/CheckBoxControl.lua @@ -15,10 +15,7 @@ function CheckBoxClass:IsMouseOver() if not self:IsShown() then return false end - local x, y = self:GetPos() - local width, height = self:GetSize() - local cursorX, cursorY = GetCursorPos() - return cursorX >= x and cursorY >= y and cursorX < x + width and cursorY < y + height + return self:IsMouseInBounds() end function CheckBoxClass:Draw(viewPort) diff --git a/Classes/Control.lua b/Classes/Control.lua index 360efdc9..7e095d14 100644 --- a/Classes/Control.lua +++ b/Classes/Control.lua @@ -85,6 +85,13 @@ function ControlClass:IsEnabled() return self:GetProperty("enabled") end +function ControlClass:IsMouseInBounds() + local x, y = self:GetPos() + local width, height = self:GetSize() + local cursorX, cursorY = GetCursorPos() + return cursorX >= x and cursorY >= y and cursorX < x + width and cursorY < y + height +end + function ControlClass:SetFocus(focus) if focus ~= self.hasFocus then if focus and self.OnFocusGained then diff --git a/Classes/EditControl.lua b/Classes/EditControl.lua index ba9bc68f..04ed2914 100644 --- a/Classes/EditControl.lua +++ b/Classes/EditControl.lua @@ -49,13 +49,7 @@ function EditClass:IsMouseOver() if not self:IsShown() then return false end - if self:GetMouseOverControl() then - return true - end - local x, y = self:GetPos() - local width, height = self:GetSize() - local cursorX, cursorY = GetCursorPos() - return cursorX >= x and cursorY >= y and cursorX < x + width and cursorY < y + height + return self:IsMouseInBounds() or self:GetMouseOverControl() end function EditClass:SelectAll() diff --git a/Classes/ItemDBControl.lua b/Classes/ItemDBControl.lua index 2aa30c63..1a35be7f 100644 --- a/Classes/ItemDBControl.lua +++ b/Classes/ItemDBControl.lua @@ -164,13 +164,7 @@ function ItemDBClass:IsMouseOver() if not self:IsShown() then return end - if self:GetMouseOverControl() then - return true - end - local x, y = self:GetPos() - local width, height = self:GetSize() - local cursorX, cursorY = GetCursorPos() - return cursorX >= x and cursorY >= y and cursorX < x + width and cursorY < y + height + return self:IsMouseInBounds() or self:GetMouseOverControl() end function ItemDBClass:Draw(viewPort) diff --git a/Classes/ItemListControl.lua b/Classes/ItemListControl.lua index 87121e23..47cad556 100644 --- a/Classes/ItemListControl.lua +++ b/Classes/ItemListControl.lua @@ -32,13 +32,7 @@ function ItemListClass:IsMouseOver() if not self:IsShown() then return end - if self:GetMouseOverControl() then - return true - end - local x, y = self:GetPos() - local width, height = self:GetSize() - local cursorX, cursorY = GetCursorPos() - return cursorX >= x and cursorY >= y and cursorX < x + width and cursorY < y + height + return self:IsMouseInBounds() or self:GetMouseOverControl() end function ItemListClass:Draw(viewPort) diff --git a/Classes/ModList.lua b/Classes/ModList.lua index 4053b4a0..17ef3b4f 100644 --- a/Classes/ModList.lua +++ b/Classes/ModList.lua @@ -172,4 +172,3 @@ function ModListClass:Print() ConPrintf("%s|%s", modLib.formatMod(mod), mod.source or "?") end end - diff --git a/Classes/PassiveTreeView.lua b/Classes/PassiveTreeView.lua index fafddef9..f7ee42da 100644 --- a/Classes/PassiveTreeView.lua +++ b/Classes/PassiveTreeView.lua @@ -59,13 +59,14 @@ function PassiveTreeViewClass:Draw(build, viewPort, inputEvents) local spec = build.spec local cursorX, cursorY = GetCursorPos() + local mOver = cursorX >= viewPort.x and cursorX < viewPort.x + viewPort.width and cursorY >= viewPort.y and cursorY < viewPort.y + viewPort.height -- Process input events local treeClick for id, event in ipairs(inputEvents) do if event.type == "KeyDown" then if event.key == "LEFTBUTTON" then - if cursorX >= viewPort.x and cursorX < viewPort.x + viewPort.width and cursorY >= viewPort.y and cursorY < viewPort.y + viewPort.height then + if mOver then -- Record starting coords of mouse drag -- Dragging won't actually commence unless the cursor moves far enough self.dragX, self.dragY = cursorX, cursorY @@ -79,13 +80,15 @@ function PassiveTreeViewClass:Draw(build, viewPort, inputEvents) -- Mouse button went down, but didn't move far enough to trigger drag, so register a normal click treeClick = "LEFT" end - elseif event.key == "RIGHTBUTTON" then - treeClick = "RIGHT" - elseif event.key == "WHEELUP" then - self:Zoom(IsKeyDown("SHIFT") and 3 or 1, viewPort) - elseif event.key == "WHEELDOWN" then - self:Zoom(IsKeyDown("SHIFT") and -3 or -1, viewPort) - end + elseif mOver then + if event.key == "RIGHTBUTTON" then + treeClick = "RIGHT" + elseif event.key == "WHEELUP" then + self:Zoom(IsKeyDown("SHIFT") and 3 or 1, viewPort) + elseif event.key == "WHEELDOWN" then + self:Zoom(IsKeyDown("SHIFT") and -3 or -1, viewPort) + end + end end end @@ -130,7 +133,7 @@ function PassiveTreeViewClass:Draw(build, viewPort, inputEvents) end local hoverNode - if cursorX >= viewPort.x and cursorX < viewPort.x + viewPort.width and cursorY >= viewPort.y and cursorY < viewPort.y + viewPort.height then + if mOver then -- Cursor is over the tree, check if it is over a node local curTreeX, curTreeY = screenToTree(cursorX, cursorY) for nodeId, node in pairs(spec.nodes) do diff --git a/Classes/SkillListControl.lua b/Classes/SkillListControl.lua index cb559287..68b73067 100644 --- a/Classes/SkillListControl.lua +++ b/Classes/SkillListControl.lua @@ -51,13 +51,7 @@ function SkillListClass:IsMouseOver() if not self:IsShown() then return end - if self:GetMouseOverControl() then - return true - end - local x, y = self:GetPos() - local width, height = self:GetSize() - local cursorX, cursorY = GetCursorPos() - return cursorX >= x and cursorY >= y and cursorX < x + width and cursorY < y + height + return self:IsMouseInBounds() or self:GetMouseOverControl() end function SkillListClass:Draw(viewPort) diff --git a/Classes/TextListControl.lua b/Classes/TextListControl.lua index 0b6a8257..520961be 100644 --- a/Classes/TextListControl.lua +++ b/Classes/TextListControl.lua @@ -21,13 +21,7 @@ function TextListClass:IsMouseOver() if not self:IsShown() then return end - if self:GetMouseOverControl() then - return true - end - local x, y = self:GetPos() - local width, height = self:GetSize() - local cursorX, cursorY = GetCursorPos() - return cursorX >= x and cursorY >= y and cursorX < x + width and cursorY < y + height + return self:IsMouseInBounds() or self:GetMouseOverControl() end function TextListClass:Draw(viewPort) diff --git a/Data/Gems/act_int.lua b/Data/Gems/act_int.lua index 19014d82..9aaf2736 100644 --- a/Data/Gems/act_int.lua +++ b/Data/Gems/act_int.lua @@ -3218,7 +3218,11 @@ gems["Righteous Fire"] = { area = true, fire = true, setupFunc = function(env, output) - env.mainSkill.skillData.FireDot = (output.Life + output.EnergyShield) * 0.5 + if env.mainSkill.skillFlags.totem then + env.mainSkill.skillData.FireDot = output.TotemLife * 0.5 + else + env.mainSkill.skillData.FireDot = (output.Life + output.EnergyShield) * 0.5 + end end, color = 3, baseFlags = { diff --git a/Modules/Build.lua b/Modules/Build.lua index 241aa8f3..797b2566 100644 --- a/Modules/Build.lua +++ b/Modules/Build.lua @@ -9,6 +9,7 @@ local pairs = pairs local ipairs = ipairs local t_insert = table.insert local m_min = math.min +local m_max = math.max local buildMode = common.New("ControlHost") @@ -83,6 +84,12 @@ function buildMode:Init(dbFileName, buildName) DrawImage(nil, x + 1, y + 1, strW, 18) SetDrawColor(1, 1, 1) DrawString(x + 4, y + 2, "LEFT", 16, "FIXED", str) + if control:IsMouseInBounds() then + SetDrawLayer(nil, 10) + main:AddTooltipLine(16, "Required level: "..m_max(1, (100 + used - usedMax))) + main:DrawTooltip(x, y, control.width, control.height, main.viewPort) + SetDrawLayer(nil, 0) + end end self.controls.characterLevel = common.New("EditControl", {"LEFT",self.anchorTopBarRight,"RIGHT"}, 0, 0, 106, 20, "", "Level", "[%d]", 3, function(buf) self.characterLevel = tonumber(buf) or 1 diff --git a/Modules/CalcSections.lua b/Modules/CalcSections.lua index 49bd9344..65e75996 100644 --- a/Modules/CalcSections.lua +++ b/Modules/CalcSections.lua @@ -280,7 +280,7 @@ return { { label = "Total Increased", { format = "{0:mod:1}%", { modName = { "Evasion", "ArmourAndEvasion", "Defences" }, modType = "INC" }, }, }, { label = "Total More", { format = "{0:mod:1}%", { modName = { "Evasion", "ArmourAndEvasion", "Defences" }, modType = "MORE" }, }, }, { label = "Total", { format = "{0:output:Evasion}", { breakdown = "Evasion" }, }, }, - { label = "Evade Chance", { format = "{0:output:EvadeChance}%", { breakdown = "EvadeChance" }, { label = "Enemy Accuracy modifiers", modName = "Accuracy", enemy = true }, }, }, + { label = "Evade Chance", { format = "{0:output:EvadeChance}%", { breakdown = "EvadeChance" }, { modName = { "CannotEvade" } }, { label = "Enemy Accuracy modifiers", modName = "Accuracy", enemy = true }, }, }, } }, { 1, "Resist", 3, "Resists", data.colorCodes.DEFENCE, { extra = data.colorCodes.FIRE.."{0:output:FireResist}+{0:output:FireResistOverCap}^7/"..data.colorCodes.COLD.."{0:output:ColdResist}+{0:output:ColdResistOverCap}^7/"..data.colorCodes.LIGHTNING.."{0:output:LightningResist}+{0:output:LightningResistOverCap}", diff --git a/Modules/Calcs.lua b/Modules/Calcs.lua index 0708f49f..d692e364 100644 --- a/Modules/Calcs.lua +++ b/Modules/Calcs.lua @@ -3,7 +3,7 @@ -- Module: Calcs -- Performs all the offense and defense calculations. -- Here be dragons! --- This file is 2500 lines long, over half of which is in one function... +-- This file is 2400 lines long, over half of which is in one function... -- local pairs = pairs @@ -916,7 +916,7 @@ local function mergeMainMods(env, repSlotName, repItem) end -- Finalise environment and perform the calculations --- This function is 1400 lines long. Enjoy! +-- This function is 1300 lines long. Enjoy! local function performCalcs(env) local modDB = env.modDB local enemyDB = env.enemyDB @@ -1036,7 +1036,7 @@ local function performCalcs(env) -- Merge auxillary modifiers if env.mode_buffs then - if activeSkill.buffModList then + if activeSkill.buffModList and not activeSkill.skillFlags.totem then if activeSkill.activeGem.data.golem and modDB:Sum("FLAG", skillCfg, "LiegeOfThePrimordial") and (activeSkill.activeGem.data.fire or activeSkill.activeGem.data.cold or activeSkill.activeGem.data.lightning) then modDB:ScaleAddList(activeSkill.buffModList, 2) else @@ -1167,9 +1167,9 @@ local function performCalcs(env) if inc ~= 0 or more ~= 1 or (base ~= 0 and extraBase ~= 0) then local out = { } if base ~= 0 and extraBase ~= 0 then - out[1] = "("..round(extraBase, 2).." + "..round(base, 2)..") ^8(base)" + out[1] = s_format("(%g + %g) ^8(base)", extraBase, base) else - out[1] = round(base + extraBase, 2).." ^8(base)" + out[1] = s_format("%g ^8(base)", base + extraBase) end if inc ~= 0 then t_insert(out, s_format("x %.2f", 1 + inc/100).." ^8(increased/reduced)") @@ -1177,7 +1177,7 @@ local function performCalcs(env) if more ~= 1 then t_insert(out, s_format("x %.2f", more).." ^8(more/less)") end - t_insert(out, "= "..output[...]) + t_insert(out, s_format("= %g", output[...])) breakdown[...] = out end end @@ -1210,18 +1210,18 @@ local function performCalcs(env) local out = { } local resistForm = (damageType == "Physical") and "physical damage reduction" or "resistance" if resist ~= 0 then - t_insert(out, "Enemy "..resistForm..": "..resist.."%") + t_insert(out, s_format("Enemy %s: %d%%", resistForm, resist)) end if pen ~= 0 then t_insert(out, "Effective resistance:") - t_insert(out, resist.."% ^8(resistance)") - t_insert(out, "- "..pen.."% ^8(penetration)") - t_insert(out, "= "..(resist-pen).."%") + t_insert(out, s_format("%d%% ^8(resistance)", resist)) + t_insert(out, s_format("- %d%% ^8(penetration)", pen)) + t_insert(out, s_format("= %d%%", resist - pen)) end if (resist - pen) ~= 0 and taken ~= 0 then t_insert(out, "Effective DPS modifier:") - t_insert(out, (1 - (resist - pen) / 100).." ^8("..resistForm..")") - t_insert(out, "x "..(1 + taken / 100).." ^8(increased/reduced damage taken)") + t_insert(out, s_format("%.2f ^8(%s)", 1 - (resist - pen) / 100, resistForm)) + t_insert(out, s_format("x %.2f ^8(increased/reduced damage taken)", 1 + taken / 100)) t_insert(out, s_format("= %.3f", mult)) end return out @@ -1251,7 +1251,7 @@ local function performCalcs(env) -- Add attribute bonuses modDB:NewMod("Life", "BASE", m_floor(output.Str / 2), "Strength") - local strDmgBonus = round((output.Str + modDB:Sum("BASE", nil, "DexIntToMeleeBonus", 0)) / 5) + local strDmgBonus = round((output.Str + modDB:Sum("BASE", nil, "DexIntToMeleeBonus")) / 5) modDB:NewMod("PhysicalDamage", "INC", strDmgBonus, "Strength", ModFlag.Melee) modDB:NewMod("Accuracy", "BASE", output.Dex * 2, "Dexterity") if not modDB:Sum("FLAG", nil, "IronReflexes") then @@ -1414,9 +1414,9 @@ local function performCalcs(env) output.EvadeChance = 100 - calcHitChance(output.Evasion, enemyAccuracy) if breakdown then breakdown.EvadeChance = { - "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 accuracy: "..enemyAccuracy, - "Approximate evade chance: "..output.EvadeChance.."%", + s_format("Enemy level: %d ^8(%s the Configuration tab)", env.enemyLevel, env.configInput.enemyLevel and "overridden from" or "can be overridden in"), + s_format("Average enemy accuracy: %d", enemyAccuracy), + s_format("Approximate evade chance: %d%%", output.EvadeChance), } end end @@ -1806,9 +1806,9 @@ local function performCalcs(env) local convMult = env.conversionTable[damageType].mult if breakdown then t_insert(breakdown[damageType], "Hit damage:") - t_insert(breakdown[damageType], ""..min.." to "..max.." ^8(total damage)") + t_insert(breakdown[damageType], s_format("%d to %d ^8(total damage)", min, max)) if convMult ~= 1 then - t_insert(breakdown[damageType], "x "..convMult.." ^8("..((1-convMult)*100).."% converted to other damage types)") + t_insert(breakdown[damageType], s_format("x %g ^8(%g%% converted to other damage types)", convMult, (1-convMult)*100)) end end min = min * convMult @@ -1843,7 +1843,7 @@ local function performCalcs(env) end end if breakdown then - t_insert(breakdown[damageType], "= "..round(min).." to "..round(max)) + t_insert(breakdown[damageType], s_format("= %d to %d", min, max)) end else min, max = 0, 0 @@ -1910,28 +1910,29 @@ local function performCalcs(env) do local more = m_floor(modDB:Sum("MORE", skillCfg, "ManaCost") * 100 + 0.0001) / 100 local inc = modDB:Sum("INC", skillCfg, "ManaCost") - output.ManaCost = m_floor(m_max(0, (skillData.manaCost or 0) * more * (1 + inc / 100) - modDB:Sum("BASE", skillCfg, "ManaCost"))) + local base = modDB:Sum("BASE", skillCfg, "ManaCost") + output.ManaCost = m_floor(m_max(0, (skillData.manaCost or 0) * more * (1 + inc / 100) - base)) if breakdown and output.ManaCost ~= (skillData.manaCost or 0) then breakdown.ManaCost = { - (skillData.manaCost or 0).." ^8(base mana cost)", + s_format("%d ^8(base mana cost)", skillData.manaCost or 0) } if more ~= 1 then - t_insert(breakdown.ManaCost, "x "..more.." ^8(mana cost multiplier)") + t_insert(breakdown.ManaCost, s_format("x %.2f ^8(mana cost multiplier)", more)) end if inc ~= 0 then - t_insert(breakdown.ManaCost, "x "..(1 + inc/100).." ^8(increased/reduced mana cost)") - end - local base = modDB:Sum("BASE", skillCfg, "ManaCost") + t_insert(breakdown.ManaCost, s_format("x %.2f ^8(increased/reduced mana cost)", 1 + inc/100)) + end if base ~= 0 then - t_insert(breakdown.ManaCost, "- "..base.." ^8(- mana cost)") + t_insert(breakdown.ManaCost, s_format("- %d ^8(- mana cost)", base)) end - t_insert(breakdown.ManaCost, "= " .. output.ManaCost) + t_insert(breakdown.ManaCost, s_format("= %d", output.ManaCost)) end end -- Calculate skill DOT components local dotCfg = { skillName = skillCfg.skillName, + slotName = skillCfg.slotName, flags = bor(band(skillCfg.flags, ModFlag.SourceMask), ModFlag.Dot, skillData.dotIsSpell and ModFlag.Spell or 0), keywordFlags = skillCfg.keywordFlags } @@ -1966,13 +1967,14 @@ local function performCalcs(env) end local inc = modDB:Sum("INC", dotCfg, "Damage", damageType.."Damage", isElemental[damageType] and "ElementalDamage" or nil) local more = round(modDB:Sum("MORE", dotCfg, "Damage", damageType.."Damage", isElemental[damageType] and "ElementalDamage" or nil), 2) - output[damageType.."Dot"] = baseVal * (1 + inc/100) * more * effMult + local total = baseVal * (1 + inc/100) * more * effMult + output[damageType.."Dot"] = total + output.TotalDot = output.TotalDot + total if breakdown then breakdown[damageType.."Dot"] = { } - dotBreakdown(breakdown[damageType.."Dot"], baseVal, inc, more, effMult, output[damageType.."Dot"]) + dotBreakdown(breakdown[damageType.."Dot"], baseVal, inc, more, effMult, total) end end - output.TotalDot = output.TotalDot + (output[damageType.."Dot"] or 0) end -- Calculate bleeding chance and damage @@ -1982,6 +1984,7 @@ local function performCalcs(env) skillFlags.bleed = true skillFlags.duration = true local dotCfg = { + slotName = skillCfg.slotName, flags = bor(band(skillCfg.flags, ModFlag.SourceMask), ModFlag.Dot, skillData.dotIsSpell and ModFlag.Spell or 0), keywordFlags = bor(skillCfg.keywordFlags, KeywordFlag.Bleed) } @@ -2035,6 +2038,7 @@ local function performCalcs(env) skillFlags.poison = true skillFlags.duration = true local dotCfg = { + slotName = skillCfg.slotName, flags = bor(band(skillCfg.flags, ModFlag.SourceMask), ModFlag.Dot, skillData.dotIsSpell and ModFlag.Spell or 0), keywordFlags = bor(skillCfg.keywordFlags, KeywordFlag.Poison) } @@ -2109,6 +2113,7 @@ local function performCalcs(env) if canDeal.Fire and output.IgniteChance > 0 and sourceDmg > 0 then skillFlags.ignite = true local dotCfg = { + slotName = skillCfg.slotName, flags = bor(band(skillCfg.flags, ModFlag.SourceMask), ModFlag.Dot, skillData.dotIsSpell and ModFlag.Spell or 0), keywordFlags = skillCfg.keywordFlags, } @@ -2373,7 +2378,7 @@ function calcs.buildOutput(build, mode) end elseif mode == "CALCS" then -- Calculate XP modifier - --[[ FIXME + --[[ FIXME? if input.monster_level and input.monster_level > 0 then local playerLevel = build.characterLevel local diff = m_abs(playerLevel - input.monster_level) - 3 - m_floor(playerLevel / 16) diff --git a/README.md b/README.md index 143168cc..e971953b 100644 --- a/README.md +++ b/README.md @@ -49,7 +49,7 @@ 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.0 - 2016/11/01 +### 1.2.0 - 2016/11/02 With this update, the program's internal modifier system has been completely overhauled. On its own this overhaul doesn't change much from the user's perspective, but it has opened the way for some significant upgrades: @@ -82,6 +82,7 @@ Other changes: * Some options now have tooltips that explain aspects of their function * The new class background artworks have been added to the passive skill tree * Unsupported modifiers are now shown in red instead of white to help convey the fact that they won't work + * The required level for a build's passive tree is now shown when hovering over the points display * Support gem compatability is now determined using the same data the game itself uses, and should now be 100% accurate ### 1.1.11 - 2016/10/25 diff --git a/changelog.txt b/changelog.txt index d5575c82..962016d0 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,4 +1,4 @@ -VERSION[1.2.0][2016/11/01] +VERSION[1.2.0][2016/11/02] With this update, the program's internal modifier system has been completely overhauled. On its own this overhaul doesn't change much from the user's perspective, but it has opened the way for some significant upgrades: @@ -31,6 +31,7 @@ Other changes: * Some options now have tooltips that explain aspects of their function * The new class background artworks have been added to the passive skill tree * Unsupported modifiers are now shown in red instead of white to help convey the fact that they won't work + * The required level for a build's passive tree is now shown when hovering over the points display * Support gem compatability is now determined using the same data the game itself uses, and should now be 100% accurate VERSION[1.1.11][2016/10/25] * Added flat mana to ES armour rare templates diff --git a/manifest.xml b/manifest.xml index ff460a4a..22664f41 100644 --- a/manifest.xml +++ b/manifest.xml @@ -7,44 +7,44 @@ - - - - - + + + + + - + - + - + - - + + - + - + - + - + - + - - + + @@ -56,7 +56,7 @@ - +