diff --git a/src/armor.html b/src/armor.html index bb9ba80..8d122c1 100644 --- a/src/armor.html +++ b/src/armor.html @@ -9,6 +9,7 @@ Erdtree - Armor Optimizer + diff --git a/src/class.html b/src/class.html index 33dcb76..0da8e89 100644 --- a/src/class.html +++ b/src/class.html @@ -1,270 +1,276 @@ - - - - - - + + + + + + + + Erdtree - Class Optimizer + + + + + + + + - - Erdtree - Class Optimizer - - - - + + +
+

Class Optimizer

+
+
+
+
+
+ Class + +
+
+ +
+
    +
    +
    +
    +
    + Level +
    + + + + +
    +
    +
    +
    + +
    + + + + +
    +
    +
    + +
    + + + + +
    +
    +
    + +
    + + + + +
    +
    +
    + +
    + + + + +
    +
    +
    + +
    + + + + +
    +
    +
    + +
    + + + + +
    +
    +
    + +
    + + + + +
    +
    +
    + +
    + + + + +
    +
    +
    +
    +
    + Helmet + +
    +
    + Talismans +
    +
      + +
    +
    +
    + +
    +
    +
    +

    Softcaps

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    SkillStatSoftcapsNotes
    VigorHP25 (800HP)
    40 (1450HP)
    60 (1900HP)
    A +12 upgraded crimson flask heals for 810HP.
    MindFP40 (220FP)A +12 upgraded cerulean flask gives 220FP.
    EnduranceStamina30 (125stm.)
    50 (155stm.)
    Equip Load25 (72 wgt.)
    60 (120 wgt.)
    StrengthAR37 ≃ 55 (2h)
    54 ≃ 80 (2h)
    66 ≃ 99 (2h)
    80 +
    2-handing gives you 1.5x strength.
    DexterityAR55, 80
    IntelligenceAR55, 80
    Spell Buff60, 80
    FaithAR55, 80
    Spell Buff60, 80
    ArcaneAR55, 80
    Status45, 60
    Spell Buff60, 80 (Pure catalyst)
    30, 45 (Hybrid catalyst) +
    +
    + + - - - - - - - -
    -

    Class Optimizer

    -
    - -
    -
    -
    -
    - Class - -
    -
    - -
    -
      -
      -
      -
      -
      - Level -
      - - - - -
      -
      -
      -
      - -
      - - - - -
      -
      -
      - -
      - - - - -
      -
      -
      - -
      - - - - -
      -
      -
      - -
      - - - - -
      -
      -
      - -
      - - - - -
      -
      -
      - -
      - - - - -
      -
      -
      - -
      - - - - -
      -
      -
      - -
      - - - - -
      -
      -
      -
      -
      - Helmet - -
      -
      - Talismans -
      -
        - -
      -
      - -
      - -
      -
      -
      - -

      Softcaps

      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      SkillStatSoftcapsNotes
      VigorHP25 (800HP)
      40 (1450HP)
      60 (1900HP)
      A +12 upgraded crimson flask heals for 810HP.
      MindFP40 (220FP)A +12 upgraded cerulean flask gives 220FP.
      EnduranceStamina30 (125stm.)
      50 (155stm.)
      Equip Load25 (72 wgt.)
      60 (120 wgt.)
      StrengthAR37 ≃ 55 (2h)
      54 ≃ 80 (2h)
      66 ≃ 99 (2h)
      80
      2-handing gives you 1.5x strength.
      DexterityAR55, 80
      IntelligenceAR55, 80
      Spell Buff60, 80
      FaithAR55, 80
      Spell Buff60, 80
      ArcaneAR55, 80
      Status45, 60
      Spell Buff60, 80 (Pure catalyst)
      30, 45 (Hybrid catalyst)
      -
      - - - - + \ No newline at end of file diff --git a/src/index.html b/src/index.html index 98803f5..1bb99fa 100644 --- a/src/index.html +++ b/src/index.html @@ -1,83 +1,78 @@ - - - - - - + + + + + + + + Erdtree - Elden Ring Build Planner + + + + + + - - Erdtree - Elden Ring Build Planner - - - - - + + +
      +

      Create, view and optimize builds for Elden Ring.

      +
      +
      +
      + + + + +
      +

      Credits

      +

      + This page was heavily inspired by the awesome MugenMonkey website. +

      +
      + + - - - -
      -

      Create, view and optimize builds for Elden Ring.

      -
      - -
      -
      - - - - - - - -
      -

      Credits

      -

      - This page was heavily inspired by the awesome MugenMonkey website. -

      -
      - - - - + \ No newline at end of file diff --git a/src/planner.html b/src/planner.html index 73fdb96..1fc7445 100644 --- a/src/planner.html +++ b/src/planner.html @@ -1,264 +1,276 @@ - - - - - - + + + + + + + + Erdtree - Build Planner + + + + + + + + - - Erdtree - Build Planner - - - - - - - - - - - - -
      -

      Build Planner

      -
      - -
      -
      - -
      + + +
      +

      Build Planner

      +
      +
      +
      + +
      +
      + Character +
      +
      +
      + Name + +
      +
      +
      - Character +
      - -
      -
      - Name - +
      +
      + + + + +
      +
      + + + + +
      +
      + + + + +
      +
      + + + + +
      +
      + + + + +
      +
      + + + + +
      +
      + + + + +
      +
      + + + + +
      +
      + + + + +
      +
      + Import +
      + +
      +
      + Export +
      + +
      +
      + +
      + Equipment +
      + Weapons & Shields + +
      - -
      - -
      -
      -
      - - + + + + +
      - - + + + + + + +
      +
      +
      +
      + + + + + +
      - - + + + + + + +
      +
      +
      +
      + + + + + +
      - - + + + + +
      -
      - - - - -
      -
      - - - - -
      -
      - - - - -
      -
      - - - - -
      -
      - - - - -
      -
      - Import -
      - -
      +
      +
      + Armor +
      + + +
      +
      + + +
      +
      + + +
      +
      + + +
      +
      +
    • Talismans
    • +
      + + +
      +
      + + +
      +
      + + +
      +
      + + +
      +
      +
    • Spells
    • +
      +
      +
      + + -
      - Export -
      - -
      -
      - - -
      - Equipment - -
      - Weapons & Shields - - - -
      -
      - - - - - - - -
      -
      - - - - - - - -
      -
      -
      -
      - - - - - - - -
      -
      - - - - - - - -
      -
      -
      -
      - - - - - - - -
      -
      - - - - - - - -
      -
      - -
      - Armor - -
      - - -
      -
      - - -
      -
      - - -
      -
      - - -
      - -
      -
    • Talismans
    • - -
      - - -
      -
      - - -
      -
      - - -
      -
      - - -
      - -
      -
    • Spells
    • -
      -
      -
      - - - - + \ No newline at end of file diff --git a/src/resource/favicon.ico b/src/resource/favicon.ico new file mode 100644 index 0000000..c433e6c Binary files /dev/null and b/src/resource/favicon.ico differ diff --git a/src/script/class.js b/src/script/class.js index 4d28dd2..7bb1cac 100644 --- a/src/script/class.js +++ b/src/script/class.js @@ -1,64 +1,63 @@ -const CLASSES = fetch("/data/classes.json") - .then((response) => response.json()) - .catch((error) => console.log(error)); -const TALISMANS = fetch("/data/talismans.json") - .then((response) => response.json()) - .catch((error) => console.log(error)); -const HELMETS = fetch("/data/helmets.json") - .then((response) => response.json()) - .catch((error) => console.log(error)); +let CLASSES; +let TALISMANS; +let HELMETS; const STAT_SHORT_NAMES = ["vig.", "mnd.", "end.", "str.", "dex.", "int.", "fth.", "arc."]; +const selected = select => select.options[select.selectedIndex]; + async function init() { + // fetch and await data sources + CLASSES = await fetch("/data/classes.json").then(response => response.json()); + TALISMANS = await fetch("/data/talismans.json").then(response => response.json()); + HELMETS = await fetch("/data/helmets.json").then(response => response.json()); + // populate helmet select - let helmets = Object.values(await HELMETS); - helmets = helmets.filter((helmet) => helmet.stats != null); let destination = document.getElementById("helmet"); - helmets.forEach((helmet) => { - destination.options.add(new Option(helmet.name, helmet.id)); - }); + Object.values(HELMETS) + .filter(helmet => helmet.stats != null) + .forEach(helmet => destination.options.add(new Option(helmet.name, helmet.id))); // populate talisman list - let talismans = Object.values(await TALISMANS); - talismans = talismans.filter((talisman) => talisman.stats != null && !talisman.id.includes("scar")); - let template = document.getElementById("talisman"); destination = document.getElementById("talismans"); - talismans.forEach((item) => { - let clone = template.content.cloneNode(true); - let li = clone.children[0]; - let input = li.children[0].children[0]; - let label = li.children[0].children[1]; - let aside = li.children[1]; + Object.values(TALISMANS) + .filter(talisman => talisman.stats != null && !talisman.id.includes("scar")) + .forEach(item => { + let clone = template.content.cloneNode(true); + let li = clone.children[0]; - input.id = item.id; - input.value = item.id; - label.htmlFor = item.id; - label.innerHTML = item.name; - aside.innerHTML = statsDescription(item.stats); + let input = li.children[0].children[0]; + let label = li.children[0].children[1]; + let aside = li.children[1]; - destination.appendChild(clone); - }); + input.id = item.id; + input.value = item.id; + label.htmlFor = item.id; + label.innerHTML = item.name; + aside.innerHTML = statsDescription(item.stats); + + destination.appendChild(clone); + }); update(); } -async function update() { +function update() { // get inputted stats, clamp value to 0..99 - let total = [...document.getElementsByName("total")].map((elem) => { + let total = [...document.getElementsByName("total")].map(elem => { elem.value = Math.min(Math.max(elem.value, 0), 99) || null; return parseInt(elem.value) || 0; }); // get added stats from items - let items = itemStats(Object.values(await TALISMANS).concat(Object.values(await HELMETS))); + let items = itemStats([...Object.values(TALISMANS), ...Object.values(HELMETS)]); // calculate best class let sorted = sortClasses( - Object.values(await CLASSES), - total.map((stat, i) => stat - items[i]) + Object.values(CLASSES), + total.map((stat, i) => stat - items[i]), ); let best = sorted[0]; @@ -80,7 +79,7 @@ async function update() { let destination = document.getElementById("classes"); destination.innerHTML = ""; let template = document.getElementById("class"); - sorted.forEach((c) => { + sorted.forEach(c => { let clone = template.content.cloneNode(true); let li = clone.children[0]; let span = li.children[0]; @@ -94,41 +93,40 @@ async function update() { // update talismans let talismans = [...document.getElementsByName("talisman")]; - - if (talismans.filter((checkbox) => checkbox.checked).length >= 4) { - talismans.forEach((checkbox) => (checkbox.disabled = !checkbox.checked)); + if (talismans.filter(checkbox => checkbox.checked).length >= 4) { + talismans.forEach(checkbox => (checkbox.disabled = !checkbox.checked)); } else { - talismans.forEach((checkbox) => (checkbox.disabled = false)); + talismans.forEach(checkbox => (checkbox.disabled = false)); } } -function sortClasses(classes, desiredStats) { - let deltas = classes.map((c) => { - c.total = c.level + statDelta(c.stats, desiredStats); - return c; - }); - deltas.sort((a, b) => a.total - b.total); - return deltas; +function delta(classStats, final) { + return classStats.map((stat, i) => (stat < final[i] ? final[i] - stat : 0)).reduce((total, n) => total + n); } -function statDelta(classStats, desiredStats) { - return classStats.map((e, i) => (e < desiredStats[i] ? desiredStats[i] - e : 0)).reduce((total, n) => total + n); +function sortClasses(classes, desiredStats) { + return classes + .map(c => { + c.total = c.level + delta(c.stats, desiredStats); + return c; + }) + .sort((a, b) => a.total - b.total); } function itemStats(relevantItems) { - let helmet = document.getElementById("helmet").options[document.getElementById("helmet").selectedIndex].value; - let talismans = [...document.getElementsByName("talisman")].filter((t) => t.checked).map((t) => t.value); + let helmet = selected(document.getElementById("helmet")).value; + let talismans = [...document.getElementsByName("talisman")].filter(t => t.checked).map(t => t.value); ids = [helmet, ...talismans]; - let relevant = relevantItems.filter((item) => ids.includes(item.id)); - - return relevant.reduce((total, item) => total.map((stat, i) => (stat += item.stats[i])), [0, 0, 0, 0, 0, 0, 0, 0]); + return relevantItems + .filter(item => ids.includes(item.id)) + .reduce((total, item) => total.map((stat, i) => (stat += item.stats[i])), [0, 0, 0, 0, 0, 0, 0, 0]); } -function reset() { - document.getElementsByName("total").forEach((elem) => (elem.value = null)); +function resetAll() { + document.getElementsByName("total").forEach(elem => (elem.value = null)); document.getElementById("helmet").selectedIndex = 0; - [...document.getElementsByName("talisman")].forEach((elem) => (elem.checked = false)); + [...document.getElementsByName("talisman")].forEach(elem => (elem.checked = false)); update(); } @@ -138,7 +136,3 @@ function statsDescription(stats) { return stat ? total + " +" + stat + STAT_SHORT_NAMES[i] : total; }, ""); } - -function clamp(n, min, max) { - return Math.min(Math.max(n, min), max); -} diff --git a/src/sitemap.xml b/src/sitemap.xml index d8b7d5c..9742ef7 100644 --- a/src/sitemap.xml +++ b/src/sitemap.xml @@ -1,33 +1,32 @@ - + + + + https://erdtree.palmoe.dk/ - 2022-03-28T13:52:48+00:00 + 2022-04-06T23:37:09+00:00 1.00 https://erdtree.palmoe.dk/planner - 2022-03-28T13:52:48+00:00 + 2022-04-07T15:27:19+00:00 0.80 https://erdtree.palmoe.dk/class - 2022-03-28T13:52:48+00:00 + 2022-04-06T23:35:40+00:00 0.80 https://erdtree.palmoe.dk/armor - 2022-03-28T13:52:48+00:00 + 2022-04-10T20:24:25+00:00 0.80 - https://erdtree.palmoe.dk/weapons - 2022-03-28T13:52:48+00:00 - 0.64 + https://erdtree.palmoe.dk/weapon + 2022-04-07T15:44:52+00:00 + 0.80 diff --git a/src/weapon.html b/src/weapon.html index 5db802d..fce2d28 100644 --- a/src/weapon.html +++ b/src/weapon.html @@ -9,6 +9,7 @@ Erdtree - Weapon Finder +