window.addEventListener("DOMContentLoaded", init); let combatModifiers = [ { category: "Saves", items: [ { name: "Resilience", type: "full", value: function (e) { return Math.max(e.STR, e.END) + e.training + (e.mb * e.mastery); } }, { name: "Reflex", type: "full", value: function (e) { return Math.max(e.AGI, e.WIT) + e.training + (e.mb * e.mastery); } }, { name: "Resolve", type: "full", value: function (e) { return Math.max(e.INT, e.CHA) + e.training + (e.mb * e.mastery); } } ] }, { category: "Weapon", items: [ { name: "Simple", type: "full", value: function (e) { return Math.max(e.STR, e.AGI) + e.training + (e.mb * e.mastery); } }, { name: "Brawl", type: "full", value: function (e) { return Math.max(e.STR, e.AGI) + e.training + (e.mb * e.mastery); } }, { name: "Bludgeon", type: "full", value: function (e) { return Math.max(e.STR, e.AGI) + e.training + (e.mb * e.mastery); } }, { name: "Axe", type: "full", value: function (e) { return Math.max(e.STR, e.AGI) + e.training + (e.mb * e.mastery); } }, { name: "Polearm", type: "full", value: function (e) { return Math.max(e.STR, e.AGI) + e.training + (e.mb * e.mastery); } }, { name: "Sword", type: "full", value: function (e) { return Math.max(e.STR, e.AGI) + e.training + (e.mb * e.mastery); } }, { name: "Archery", type: "full", value: function (e) { return Math.max(e.STR, e.AGI) + e.training + (e.mb * e.mastery); } }, { name: "Firearm", type: "full", value: function (e) { return Math.max(e.STR, e.AGI) + e.training + (e.mb * e.mastery); } } ] }, { category: "Armor", items: [ { name: "Unarmored", type: "training-only", value: function (e) { return } }, { name: "Light", type: "training-only", value: function (e) { return } }, { name: "Medium", type: "training-only", value: function (e) { return } }, { name: "Heavy", type: "training-only", value: function (e) { return } } ] } ] let rpModifiers = [ { category: "Skills", items: [ { name: "Athletics", type: "full", value: function (e) { return e.STR + e.training + (e.mb * e.mastery); } }, { name: "Fortitude", type: "full", value: function (e) { return e.END + e.training + (e.mb * e.mastery); } }, { name: "Acrobatics", type: "full", value: function (e) { return e.AGI + e.training + (e.mb * e.mastery); } }, { name: "Stealth", type: "full", value: function (e) { return e.AGI + e.training + (e.mb * e.mastery); } }, { name: "Thievery", type: "full", value: function (e) { return e.AGI + e.training + (e.mb * e.mastery); } }, { name: "Animal_Handling", display: "Animal Handling", type: "full", value: function (e) { return e.WIT + e.training + (e.mb * e.mastery); } }, { name: "Intuition", type: "full", value: function (e) { return e.WIT + e.training + (e.mb * e.mastery); } }, { name: "Perception", type: "full", value: function (e) { return e.WIT + e.training + (e.mb * e.mastery); } }, { name: "Streetwise", type: "full", value: function (e) { return e.WIT + e.training + (e.mb * e.mastery); } }, { name: "Survival", type: "full", value: function (e) { return e.WIT + e.training + (e.mb * e.mastery); } }, { name: "Arcana", type: "full", value: function (e) { return e.INT + e.training + (e.mb * e.mastery); } }, { name: "Crafting", type: "full", value: function (e) { return e.INT + e.training + (e.mb * e.mastery); } }, { name: "Investigation", type: "full", value: function (e) { return e.INT + e.training + (e.mb * e.mastery); } }, { name: "Medicine", type: "full", value: function (e) { return e.INT + e.training + (e.mb * e.mastery); } }, { name: "Deception", type: "full", value: function (e) { return e.CHA + e.training + (e.mb * e.mastery); } }, { name: "Intimidation", type: "full", value: function (e) { return e.CHA + e.training + (e.mb * e.mastery); } }, { name: "Performance", type: "full", value: function (e) { return e.CHA + e.training + (e.mb * e.mastery); } }, { name: "Persuasion", type: "full", value: function (e) { return e.CHA + e.training + (e.mb * e.mastery); } } ] } ] function init () { populateModifiers("#combat-modifiers", combatModifiers); window.setInterval(() => { setAllValues(combatModifiers) }, 250); populateModifiers("#rp-modifiers", rpModifiers); setAllValues(rpModifiers); window.setInterval(() => { setAllValues(rpModifiers) }, 250); } function populateModifiers(container, data) { let area = document.querySelector(container); for (let i in data) { let category = data[i]; let categoryDiv = document.createElement("div"); area.append(categoryDiv); categoryDiv.style = "display: contents;"; categoryDiv.innerHTML = `
${category.category}
`; for (let j in data[i].items) { let item = data[i].items[j]; if (item.type === "full") { categoryDiv.innerHTML += `${item.display ? item.display : item.name}
${item.display ? item.display : item.name}