diff --git a/builder/index.html b/builder/index.html
index 73e20b1..283d301 100644
--- a/builder/index.html
+++ b/builder/index.html
@@ -1391,7 +1391,6 @@
-
diff --git a/js/build.js b/js/build.js
index 00300c1..f451ff8 100644
--- a/js/build.js
+++ b/js/build.js
@@ -221,19 +221,19 @@ class Build{
//EHP
let ehp = [totalHp, totalHp];
let defMult = classDefenseMultipliers.get(this.weapon.statMap.get("type"));
- ehp[0] /= ((1-def_pct)*(1-agi_pct)*(2-defMult)*(2-this.defenseMultiplier));
- ehp[1] /= ((1-def_pct)*(2-defMult)*(2-this.defenseMultiplier));
+ ehp[0] /= (1-def_pct)*(1-agi_pct)*(2-defMult);
+ ehp[1] /= (1-def_pct)*(2-defMult);
defenseStats.push(ehp);
//HPR
let totalHpr = rawToPct(stats.get("hprRaw"), stats.get("hprPct")/100.);
defenseStats.push(totalHpr);
//EHPR
let ehpr = [totalHpr, totalHpr];
- ehpr[0] /= ((1-def_pct)*(1-agi_pct)*(2-defMult)*(2-this.defenseMultiplier));
- ehpr[1] /= ((1-def_pct)*(2-defMult)*(2-this.defenseMultiplier));
+ ehpr[0] /= (1-def_pct)*(1-agi_pct)*(2-defMult);
+ ehpr[1] /= (1-def_pct)*(2-defMult);
defenseStats.push(ehpr);
//skp stats
- defenseStats.push([ (1 - ((1-def_pct) * (2 - this.defenseMultiplier)))*100, agi_pct*100]);
+ defenseStats.push([ def_pct*100, agi_pct*100]);
//eledefs - TODO POWDERS
let eledefs = [0, 0, 0, 0, 0];
for(const i in skp_elements){ //kinda jank but ok
diff --git a/js/build_constants.js b/js/build_constants.js
index 820beb7..eeaae5d 100644
--- a/js/build_constants.js
+++ b/js/build_constants.js
@@ -101,6 +101,7 @@ let armor_keys = ['helmet', 'chestplate', 'leggings', 'boots'];
let accessory_keys= ['ring1', 'ring2', 'bracelet', 'necklace'];
let powderable_keys = ['helmet', 'chestplate', 'leggings', 'boots', 'weapon'];
let equipment_keys = ['helmet', 'chestplate', 'leggings', 'boots', 'ring1', 'ring2', 'bracelet', 'necklace', 'weapon'];
+let tome_keys = ['weaponTome1', 'weaponTome2', 'armorTome1', 'armorTome2', 'armorTome3', 'armorTome4', 'guildTome1'];
let spell_disp = ['spell0-info', 'spell1-info', 'spell2-info', 'spell3-info'];
let other_disp = ['build-order', 'set-info', 'int-info'];
diff --git a/js/build_utils.js b/js/build_utils.js
index 4da3309..bbb2d89 100644
--- a/js/build_utils.js
+++ b/js/build_utils.js
@@ -51,16 +51,16 @@ const armorTypes = [ "helmet", "chestplate", "leggings", "boots" ];
const accessoryTypes = [ "ring", "bracelet", "necklace" ];
const weaponTypes = [ "wand", "spear", "bow", "dagger", "relik" ];
const consumableTypes = [ "potion", "scroll", "food"];
-const tomeTypes = ["armorTome", "weaponTome", "guildTome"]; //"dungeonTome", "gatheringTome", "slayingTome"
+const tome_types = ['weaponTome', 'armorTome', 'guildTome'];
const attackSpeeds = ["SUPER_SLOW", "VERY_SLOW", "SLOW", "NORMAL", "FAST", "VERY_FAST", "SUPER_FAST"];
const baseDamageMultiplier = [ 0.51, 0.83, 1.5, 2.05, 2.5, 3.1, 4.3 ];
//0.51, 0.82, 1.50, 2.05, 2.50, 3.11, 4.27
const classes = ["Warrior", "Assassin", "Mage", "Archer", "Shaman"];
const tiers = ["Normal", "Unique", "Rare", "Legendary", "Fabled", "Mythic", "Set", "Crafted"] //I'm not sure why you would make a custom crafted but if you do you should be able to use it w/ the correct powder formula
-const types = armorTypes.concat(accessoryTypes).concat(weaponTypes).concat(consumableTypes).concat(tomeTypes).map(x => x.substring(0,1).toUpperCase() + x.substring(1));
+const types = armorTypes.concat(accessoryTypes).concat(weaponTypes).concat(consumableTypes).concat(tome_types).map(x => x.substring(0,1).toUpperCase() + x.substring(1));
//weaponTypes.push("sword");
//console.log(types)
-let itemTypes = armorTypes.concat(accessoryTypes).concat(weaponTypes).concat(tomeTypes);
+let itemTypes = armorTypes.concat(accessoryTypes).concat(weaponTypes).concat(tome_types);
let elementIcons = ["\u2724","\u2726", "\u2749", "\u2739", "\u274b" ];
let skpReqs = skp_order.map(x => x + "Req");
diff --git a/js/builder_graph.js b/js/builder_graph.js
index 083eb32..24c1d2d 100644
--- a/js/builder_graph.js
+++ b/js/builder_graph.js
@@ -383,6 +383,12 @@ class BuildDisplayNode extends ComputeNode {
displayBuildStats('overall-stats', build, build_all_display_commands);
displayBuildStats("offensive-stats", build, build_offensive_display_commands);
displaySetBonuses("set-info", build);
+ let meleeStats = build.getMeleeStats();
+ displayMeleeDamage(document.getElementById("build-melee-stats"), document.getElementById("build-melee-statsAvg"), meleeStats);
+
+ displayDefenseStats(document.getElementById("defensive-stats"), build);
+
+ displayPoisonDamage(document.getElementById("build-poison-stats"), build);
}
}
diff --git a/js/display.js b/js/display.js
index 76f85cf..3f02bd5 100644
--- a/js/display.js
+++ b/js/display.js
@@ -1116,7 +1116,6 @@ function displayEquipOrder(parent_elem, buildOrder){
}
function displayMeleeDamage(parent_elem, overallparent_elem, meleeStats) {
- let tooltipinfo = meleeStats[13];
let attackSpeeds = ["Super Slow", "Very Slow", "Slow", "Normal", "Fast", "Very Fast", "Super Fast"];
//let damagePrefixes = ["Neutral Damage: ","Earth Damage: ","Thunder Damage: ","Water Damage: ","Fire Damage: ","Air Damage: "];
parent_elem.textContent = "";
@@ -1136,8 +1135,6 @@ function displayMeleeDamage(parent_elem, overallparent_elem, meleeStats) {
for (let i = 8; i < 11; ++i) {
stats[i] = stats[i].toFixed(2);
}
- //tooltipelem, tooltiptext
- let tooltip; let tooltiptext;
//title
let title_elem = document.createElement("p");
@@ -1155,9 +1152,6 @@ function displayMeleeDamage(parent_elem, overallparent_elem, meleeStats) {
let averageDamage = document.createElement("p");
averageDamage.classList.add("left");
averageDamage.textContent = "Average DPS: " + stats[10];
- tooltiptext = `= ((${stats[8]} * ${(stats[6][2]).toFixed(2)}) + (${stats[9]} * ${(stats[7][2]).toFixed(2)}))`
- tooltip = createTooltip(tooltip, "p", tooltiptext, averageDamage, ["melee-tooltip"]);
- averageDamage.appendChild(tooltip);
parent_elem.append(averageDamage);
//overall average DPS
@@ -1203,31 +1197,16 @@ function displayMeleeDamage(parent_elem, overallparent_elem, meleeStats) {
dmg.textContent = stats[i][0] + " \u2013 " + stats[i][1];
dmg.classList.add(damageClasses[i]);
dmg.classList.add("itemp");
- tooltiptext = tooltipinfo.get("damageformulas")[i].slice(0,2).join("\n");
- tooltip = createTooltip(tooltip, "p", tooltiptext, dmg, ["melee-tooltip"]);
nonCritStats.append(dmg);
}
}
let normalDamage = document.createElement("p");
normalDamage.textContent = "Total: " + stats[6][0] + " \u2013 " + stats[6][1];
- let tooltiparr = ["Min: = ", "Max: = "]
- let arr = []; let arr2 = [];
- for (let i = 0; i < 6; i++) {
- if (stats[i][0] != 0) {
- arr.push(stats[i][0]);
- arr2.push(stats[i][1]);
- }
- }
- tooltiptext = tooltiparr[0] + arr.join(" + ") + "\n" + tooltiparr[1] + arr2.join(" + ");
- tooltip = createTooltip(tooltip, "p", tooltiptext, normalDamage, ["melee-tooltip"]);
nonCritStats.append(normalDamage);
let normalDPS = document.createElement("p");
normalDPS.textContent = "Normal DPS: " + stats[8];
- normalDPS.classList.add("tooltip");
- tooltiptext = ` = ((${stats[6][0]} + ${stats[6][1]}) / 2) * ${baseDamageMultiplier[stats[11]]}`;
- tooltip = createTooltip(tooltip, "p", tooltiptext, normalDPS, ["melee-tooltip"]);
nonCritStats.append(normalDPS);
//overall average DPS
@@ -1237,9 +1216,6 @@ function displayMeleeDamage(parent_elem, overallparent_elem, meleeStats) {
let singleHitDamageSecond = document.createElement("span");
singleHitDamageSecond.classList.add("Damage");
singleHitDamageSecond.textContent = stats[12].toFixed(2);
- tooltiptext = ` = ((${stats[6][0]} + ${stats[6][1]}) / 2) * ${stats[6][2].toFixed(2)} + ((${stats[7][0]} + ${stats[7][1]}) / 2) * ${stats[7][2].toFixed(2)}`;
- // tooltip = createTooltip(tooltip, "p", tooltiptext, singleHitDamage, ["melee-tooltip", "summary-tooltip"]);
-
singleHitDamage.appendChild(singleHitDamageFirst);
singleHitDamage.appendChild(singleHitDamageSecond);
overallparent_elem.append(singleHitDamage);
@@ -1264,30 +1240,15 @@ function displayMeleeDamage(parent_elem, overallparent_elem, meleeStats) {
dmg.textContent = stats[i][2] + " \u2013 " + stats[i][3];
dmg.classList.add(damageClasses[i]);
dmg.classList.add("itemp");
- tooltiptext = tooltipinfo.get("damageformulas")[i].slice(2,4).join("\n");
- tooltip = createTooltip(tooltip, "p", tooltiptext, dmg, ["melee-tooltip"]);
critStats.append(dmg);
}
}
let critDamage = document.createElement("p");
critDamage.textContent = "Total: " + stats[7][0] + " \u2013 " + stats[7][1];
- tooltiparr = ["Min: = ", "Max: = "]
- arr = []; arr2 = [];
- for (let i = 0; i < 6; i++) {
- if (stats[i][0] != 0) {
- arr.push(stats[i][2]);
- arr2.push(stats[i][3]);
- }
- }
- tooltiptext = tooltiparr[0] + arr.join(" + ") + "\n" + tooltiparr[1] + arr2.join(" + ");
- tooltip = createTooltip(tooltip, "p", tooltiptext, critDamage, ["melee-tooltip"]);
-
critStats.append(critDamage);
let critDPS = document.createElement("p");
critDPS.textContent = "Crit DPS: " + stats[9];
- tooltiptext = ` = ((${stats[7][0]} + ${stats[7][1]}) / 2) * ${baseDamageMultiplier[stats[11]]}`;
- tooltip = createTooltip(tooltip, "p", tooltiptext, critDPS, ["melee-tooltip"]);
critStats.append(critDPS);
let critChance = document.createElement("p");
@@ -1343,8 +1304,6 @@ function displayDefenseStats(parent_elem, build, insertSummary){
statsTable.appendChild(hpRow);
}
- let tooltip; let tooltiptext;
-
let defMult = build.statMap.get("defMult");
if (!defMult) {defMult = 1}
@@ -1360,9 +1319,6 @@ function displayDefenseStats(parent_elem, build, insertSummary){
boost.textContent = stats[1][0];
boost.classList.add("col");
boost.classList.add("text-end");
- tooltiptext = `= ${stats[0]} / ((1 - ${skillPointsToPercentage(build.total_skillpoints[3]).toFixed(3)}) * (1 - ${skillPointsToPercentage(build.total_skillpoints[4]).toFixed(3)}) * (2 - ${defMult}) * (2 - ${build.defenseMultiplier}))`
- // tooltip = createTooltip(tooltip, "p", tooltiptext, boost, ["def-tooltip"]);
-
ehpRow.appendChild(ehp);
ehpRow.append(boost);
@@ -1383,12 +1339,13 @@ function displayDefenseStats(parent_elem, build, insertSummary){
boost.textContent = stats[1][1];
boost.classList.add("col");
boost.classList.add("text-end");
- tooltiptext = `= ${stats[0]} / ((1 - ${skillPointsToPercentage(build.total_skillpoints[3]).toFixed(3)}) * (2 - ${defMult}) * (2 - ${build.defenseMultiplier}))`
- // tooltip = createTooltip(tooltip, "p", tooltiptext, boost, ["def-tooltip"]);
-
ehpRow.appendChild(ehp);
ehpRow.append(boost);
- statsTable.append(ehpRow);
+ if (insertSummary) {
+ parent_elem.appendChild(ehpRow)
+ } else {
+ statsTable.append(ehpRow);
+ }
//total HPR
let hprRow = document.createElement("div");
@@ -1424,12 +1381,14 @@ function displayDefenseStats(parent_elem, build, insertSummary){
boost.textContent = stats[3][0];
boost.classList.add("col");
boost.classList.add("text-end");
- tooltiptext = `= ${stats[2]} / ((1 - ${skillPointsToPercentage(build.total_skillpoints[3]).toFixed(3)}) * (1 - ${skillPointsToPercentage(build.total_skillpoints[4]).toFixed(3)}) * (2 - ${defMult}) * (2 - ${build.defenseMultiplier}))`
- // tooltip = createTooltip(tooltip, "p", tooltiptext, boost, ["def-tooltip"]);
-
ehprRow.appendChild(ehpr);
ehprRow.append(boost);
- statsTable.append(ehprRow);
+
+ if (insertSummary) {
+ parent_elem.appendChild(ehprRow);
+ } else {
+ statsTable.appendChild(ehprRow);
+ }
//eledefs
let eledefs = stats[5];
@@ -1461,13 +1420,9 @@ function displayDefenseStats(parent_elem, build, insertSummary){
let defPct = build.statMap.get("defBonus")[i]/100;
if (defRaw < 0) {
defPct >= 0 ? defPct = "- " + defPct: defPct = "+ " + defPct;
- tooltiptext = `= min(0, ${defRaw} * (1 ${defPct}))`
} else {
defPct >= 0 ? defPct = "+ " + defPct: defPct = "- " + defPct;
- tooltiptext = `= ${defRaw} * (1 ${defPct})`
}
- // tooltip = createTooltip(tooltip, "p", tooltiptext, boost, ["def-tooltip"]);
-
eledefElemRow.appendChild(boost);
if (insertSummary) {
diff --git a/js/display_constants.js b/js/display_constants.js
index 93f77e6..4901e88 100644
--- a/js/display_constants.js
+++ b/js/display_constants.js
@@ -209,8 +209,8 @@ let posModSuffixes = {
/*
* Display commands
*/
-let build_overall_display_commands = [
- "#table",
+let build_all_display_commands = [
+ "#defense-stats",
"str", "dex", "int", "def", "agi",
"mr", "ms",
"hprRaw", "hprPct",
@@ -235,26 +235,51 @@ let build_overall_display_commands = [
"gXp", "gSpd",
];
-let item_display_commands = [
- "#cdiv",
+let build_offensive_display_commands = [
+ "str", "dex", "int", "def", "agi",
+ "mr", "ms",
+ "sdRaw", "sdPct",
+ "mdRaw", "mdPct",
+ "ref", "thorns",
+ "ls",
+ "poison",
+ "expd",
+ "spd",
+ "atkTier",
+ "rainbowRaw",
+ "!elemental",
+ "fDamPct", "wDamPct", "aDamPct", "tDamPct", "eDamPct",
+ "!elemental",
+ "spPct1", "spRaw1", "spPct2", "spRaw2", "spPct3", "spRaw3", "spPct4", "spRaw4",
+];
+
+let build_basic_display_commands = [
+ '#defense-stats',
+ // defense stats [hp, ehp, hpr, ]
+ // "sPot", // base * atkspd + spell raws
+ // melee potential
+ // "mPot", // melee% * (base * atkspd) + melee raws
+ "mr", "ms",
+ "ls",
+ "poison",
+ "spd",
+ "atkTier",
+]
+
+let sq2_item_display_commands = [
"displayName",
- //"type", //REPLACE THIS WITH SKIN
- "#ldiv",
"atkSpd",
- "#ldiv",
"!elemental",
"hp",
"nDam_", "fDam_", "wDam_", "aDam_", "tDam_", "eDam_",
+ "!spacer",
"fDef", "wDef", "aDef", "tDef", "eDef",
"!elemental",
- "#ldiv",
"classReq",
"lvl",
"strReq", "dexReq", "intReq", "defReq","agiReq",
- "#ldiv",
+ "!spacer",
"str", "dex", "int", "def", "agi",
- "#table",
- "str", "dex", "int", "def", "agi", //jank lmao
"hpBonus",
"hprRaw", "hprPct",
"sdRaw", "sdPct",
@@ -278,11 +303,25 @@ let item_display_commands = [
"spRegen",
"eSteal",
"gXp", "gSpd",
- "#ldiv",
"majorIds",
+ "!spacer",
"slots",
+ "!spacer",
"set",
"lore",
"quest",
"restrict"
];
+
+let sq2_ing_display_order = [
+ "displayName", //tier will be displayed w/ name
+ "!spacer",
+ "ids",
+ "!spacer",
+ "posMods",
+ "itemIDs",
+ "consumableIDs",
+ "!spacer",
+ "lvl",
+ "skills",
+]
diff --git a/js/load_tome.js b/js/load_tome.js
index 2186a60..62bb135 100644
--- a/js/load_tome.js
+++ b/js/load_tome.js
@@ -128,7 +128,7 @@ function init_tome_maps() {
tomeIDMap = new Map();
tomeRedirectMap = new Map();
- for (const it of tomeTypes) {
+ for (const it of tome_types) {
tomeLists.set(it, []);
}