structure for powder special boosts

This commit is contained in:
ferricles 2021-01-12 13:07:03 -08:00
parent 18bdcf86f8
commit 96b837fcc6
4 changed files with 283 additions and 16 deletions

View file

@ -376,7 +376,7 @@ function displayExpandedItem(item, parent_id){
p_elem.appendChild(powderPrefix);
let powders = item.get("powders");
console.log(powders);
//console.log(powders);
for (let i = 0; i < powders.length; i++) {
let powder = document.createElement("b");
powder.textContent = numerals.get((powders[i]%6)+1)+" ";
@ -483,7 +483,6 @@ function displayExpandedItem(item, parent_id){
}
}
if (element !== "") {//powder special is "[e,t,w,f,a]+[0,1,2,3,4]"
console.log(skp_elements.indexOf(element));
let powderSpecial = powderSpecialStats[ skp_elements.indexOf(element)];
let specialSuffixes = new Map([ ["Duration", " sec"], ["Radius", " blocks"], ["Chains", ""], ["Damage", "%"], ["Damage Boost", "%"], ["Knockback", " blocks"] ]);
let specialTitle = document.createElement("p");
@ -660,7 +659,6 @@ function displayMeleeDamage(parent_elem, overallparent_elem, meleeStats){
//overall average DPS
let overallaverageDamage = document.createElement("p");
overallaverageDamage.classList.add("itemp");
console.log(stats);
overallaverageDamage.textContent = "Average DPS: " + stats[10];
overallparent_elem.append(overallaverageDamage);
overallparent_elem.append(document.createElement("br"));
@ -938,6 +936,65 @@ function displayDefenseStats(parent_elem, build, insertSummary){
parent_elem.append(statsTable);
}
function displayPowderSpecials(parent_elem, powderSpecials) {
parent_elem.textContent = "Powder Specials";
let specials = powderSpecials.slice();
//each entry of powderSpecials is [ps, power]
for (special of specials) {
//iterate through the special and display it warp
let powder_special = document.createElement("p");
powder_special.classList.add("left");
let specialSuffixes = new Map([ ["Duration", " sec"], ["Radius", " blocks"], ["Chains", ""], ["Damage", "%"], ["Damage Boost", "%"], ["Knockback", " blocks"] ]);
let specialTitle = document.createElement("p");
let specialEffects = document.createElement("p");
specialTitle.classList.add("left");
specialTitle.classList.add("itemp");
specialTitle.classList.add(damageClasses[powderSpecialStats.indexOf(special[0]) + 1]);
specialEffects.classList.add("left");
specialEffects.classList.add("itemp");
specialEffects.classList.add("nocolor");
let effects = special["weaponSpecialEffects"];
specialTitle.textContent = "bruh";
//specialTitle.textContent = special["weaponSpecialName"];
/*
if (element !== "") {//powder special is "[e,t,w,f,a]+[0,1,2,3,4]"
let powderSpecial = powderSpecialStats[ skp_elements.indexOf(element)];
let effects;
if (item.get("category") === "weapon") {//weapon
}else if (item.get("category") === "armor") {//armor
effects = powderSpecial["armorSpecialEffects"];
specialTitle.textContent += powderSpecial["armorSpecialName"] + ": ";
}
for (const [key,value] of effects) {
if (key !== "Description") {
let effect = document.createElement("p");
effect.classList.add("itemp");
effect.textContent += key + ": " + value[power] + specialSuffixes.get(key);
if(key === "Damage"){
effect.textContent += elementIcons[skp_elements.indexOf(element)];
}
if (element === "w") {
effect.textContent += " / Mana Used";
}
specialEffects.appendChild(effect);
}else{
specialTitle.textContent += "[ " + effects.get("Description") + " ]";
}
}
specialTitle.append(specialEffects);
powder_special.appendChild(specialTitle);
parent_div.append(powder_special);
}
*/
powder_special.appendChild(specialTitle);
powder_special.appendChild(specialEffects);
parent_elem.appendChild(powder_special);
}
}
function displaySpellDamage(parent_elem, overallparent_elem, build, spell, spellIdx) {
parent_elem.textContent = "";

View file

@ -185,27 +185,206 @@
</tr>
<tr>
<td>
<button class = "button toggleOff" id = "vanish-boost" onclick = "updateBoosts('vanish-boost')">
<button class = "button" id = "vanish-boost" onclick = "updateBoosts('vanish-boost')">
Vanish Boost (+80%)
</button>
</td>
<td>
<button class = "button toggleOff" id = "warscream-boost" onclick = "updateBoosts('warscream-boost')">
<button class = "button" id = "warscream-boost" onclick = "updateBoosts('warscream-boost')">
War Scream (+10%)
</button>
</td>
<td>
<button class = "button toggleOff" id = "yourtotem-boost" onclick = "updateBoosts('yourtotem-boost')">
<button class = "button" id = "yourtotem-boost" onclick = "updateBoosts('yourtotem-boost')">
Your Totem (+35%)
</button>
</td>
<td>
<button class = "button toggleOff" id = "allytotem-boost" onclick = "updateBoosts('allytotem-boost')">
<button class = "button" id = "allytotem-boost" onclick = "updateBoosts('allytotem-boost')">
Ally Totem (+15%)
</button>
</td>
</tr>
</table>
<div class = "powder-specials">
<div class = "powder-special-stats" style = "grid-column:1;grid-row:1">
<div class = "center" id = "powder-special-stats">
<p class = "itemp">Powder Specials</p>
</div>
</div>
<div style = "grid-column:2;grid-row:1">
<div class = "powder-special" style = "grid-column:2;grid-row:1">
<div class = "center" id = "powder-special">
<p class = "itemp Earth">
Quake
</p>
<p class = "Quake itemp" id = "Quake">
<b>
<button class = "button" id = "Quake-1" onclick = "updatePowderSpecials('Quake-1')">
4
</button>
</b>
<b>
<button class = "button" id = "Quake-2" onclick = "updatePowderSpecials('Quake-2')">
4.5
</button>
</b>
<b>
<button class = "button" id = "Quake-3" onclick = "updatePowderSpecials('Quake-3')">
5
</button>
</b>
<b>
<button class = "button" id = "Quake-4" onclick = "updatePowderSpecials('Quake-4')">
5.5
</button>
</b>
<b>
<button class = "button" id = "Quake-5" onclick = "updatePowderSpecials('Quake-5')">
6
</button>
</b>
</p>
</div>
</div>
<div class = "powder-special" style = "grid-column:2;grid-row:2">
<div class = "center" id = "powder-special">
<p class = "itemp Thunder">
Chain Lightning
</p>
<p class = "Chain_Lightning itemp" id = "Chain_Lightning">
<b>
<button class = "button" id = "Chain_Lightning-1" onclick = "updatePowderSpecials('Chain_Lightning-1')">
4
</button>
</b>
<b>
<button class = "button" id = "Chain_Lightning-2" onclick = "updatePowderSpecials('Chain_Lightning-2')">
4.5
</button>
</b>
<b>
<button class = "button" id = "Chain_Lightning-3" onclick = "updatePowderSpecials('Chain_Lightning-3')">
5
</button>
</b>
<b>
<button class = "button" id = "Chain_Lightning-4" onclick = "updatePowderSpecials('Chain_Lightning-4')">
5.5
</button>
</b>
<b>
<button class = "button" id = "Chain_Lightning-5" onclick = "updatePowderSpecials('Chain_Lightning-5')">
6
</button>
</b>
</p>
</div>
</div>
<div class = "powder-special" style = "grid-column:2;grid-row:3">
<div class = "center" id = "powder-special">
<p class = "itemp Water">
Curse
</p>
<p class = "Curse itemp" id = "Curse">
<b>
<button class = "button" id = "Curse-1" onclick = "updatePowderSpecials('Curse-1')">
4
</button>
</b>
<b>
<button class = "button" id = "Curse-2" onclick = "updatePowderSpecials('Curse-2')">
4.5
</button>
</b>
<b>
<button class = "button" id = "Curse-3" onclick = "updatePowderSpecials('Curse-3')">
5
</button>
</b>
<b>
<button class = "button" id = "Curse-4" onclick = "updatePowderSpecials('Curse-4')">
5.5
</button>
</b>
<b>
<button class = "button" id = "Curse-5" onclick = "updatePowderSpecials('Curse-5')">
6
</button>
</b>
</p>
</div>
</div>
<div class = "powder-special" style = "grid-column:2;grid-row:4">
<div class = "center" id = "powder-special">
<p class = "itemp Fire">
Courage
</p>
<p class = "Courage itemp" id = "Courage">
<b>
<button class = "button" id = "Courage-1" onclick = "updatePowderSpecials('Courage-1')">
4
</button>
</b>
<b>
<button class = "button" id = "Courage-2" onclick = "updatePowderSpecials('Courage-2')">
4.5
</button>
</b>
<b>
<button class = "button" id = "Courage-3" onclick = "updatePowderSpecials('Courage-3')">
5
</button>
</b>
<b>
<button class = "button" id = "Courage-4" onclick = "updatePowderSpecials('Courage-4')">
5.5
</button>
</b>
<b>
<button class = "button" id = "Courage-5" onclick = "updatePowderSpecials('Courage-5')">
6
</button>
</b>
</p>
</div>
</div>
<div class = "powder-special" style = "grid-column:2;grid-row:5">
<div class = "center" id = "powder-special">
<p class = "itemp Air">
Air Prison
</p>
<p class = "Air_Prison itemp" id = "Air_Prison">
<b>
<button class = "button" id = "Air_Prison-1" onclick = "updatePowderSpecials('Air_Prison-1')">
4
</button>
</b>
<b>
<button class = "button" id = "Air_Prison-2" onclick = "updatePowderSpecials('Air_Prison-2')">
4.5
</button>
</b>
<b>
<button class = "button" id = "Air_Prison-3" onclick = "updatePowderSpecials('Air_Prison-3')">
5
</button>
</b>
<b>
<button class = "button" id = "Air_Prison-4" onclick = "updatePowderSpecials('Air_Prison-4')">
5.5
</button>
</b>
<b>
<button class = "button" id = "Air_Prison-5" onclick = "updatePowderSpecials('Air_Prison-5')">
6
</button>
</b>
</p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>

View file

@ -20,7 +20,7 @@ div {
padding: 0%;
}
.equipment {
.equipment{
padding: 0%;
display: grid;
grid-template-columns: min-content min-content min-content;
@ -36,6 +36,14 @@ div {
grid-auto-rows: minmax(60px, auto);
}
.powder-specials{
padding: 0% 4% 2%;
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 5px;
grid-auto-rows: minmax(60px, auto);
}
.equipment, .skillpoints, .center, .header, .all, .nocolor{
background: #121516;
color: #aaa;
@ -70,7 +78,7 @@ a.link{
text-align: left;
}
.build-helmet, .build-chestplate, .build-leggings, .build-boots, .build-ring1, .build-ring2, .build-bracelet, .build-necklace, .build-weapon, .build-order, .build-overall, .build-melee-stats, .build-defense-stats, .spell-info, .set-info {
.build-helmet, .build-chestplate, .build-leggings, .build-boots, .build-ring1, .build-ring2, .build-bracelet, .build-necklace, .build-weapon, .build-order, .build-overall, .build-melee-stats, .build-defense-stats, .spell-info, .set-info, .powder-special, .powder-special-stats {
color: #aaa;
background: #121516;
border: 3px solid #BCBCBC;

37
test.js
View file

@ -315,12 +315,10 @@ function decodeBuild(url_tag) {
}
let powder_info = info[1].slice(39);
console.log(powder_info);
// TODO: Make this run in linear instead of quadratic time...
for (let i = 0; i < 5; ++i) {
let powders = "";
let n_blocks = Base64.toInt(powder_info.charAt(0));
console.log(n_blocks + " blocks");
powder_info = powder_info.slice(1);
for (let j = 0; j < n_blocks; ++j) {
let block = powder_info.slice(0,5);
@ -363,7 +361,6 @@ function encodeBuild() {
build_string += Base64.fromIntN(getValue(skp + "-skp"), 2); // Maximum skillpoints: 2048
}
build_string += Base64.fromIntN(player_build.level, 2);
console.log(Base64.fromIntN(player_build.level, 2));
for (const _powderset of player_build.powders) {
let n_bits = Math.ceil(_powderset.length / 6);
build_string += Base64.fromIntN(n_bits, 1); // Hard cap of 378 powders.
@ -463,23 +460,49 @@ function updateStats() {
player_build.assigned_skillpoints += delta_total;
calculateBuildStats();
}
/* Updates all external boosts (boosts from spells + powders)
/* Updates all spell boosts
*/
function updateBoosts(buttonId) {
let elem = document.getElementById(buttonId);
if (elem.classList.contains("toggleOn")) {
player_build.damageMultiplier -= damageMultipliers.get(buttonId.split("-")[0]);
elem.classList.remove("toggleOn");
elem.classList.add("toggleOff");
}else{
player_build.damageMultiplier += damageMultipliers.get(buttonId.split("-")[0]);
elem.classList.remove("toggleOff");
elem.classList.add("toggleOn");
}
//displayPowderBoosts(); TODO WRITE
calculateBuildStats();
}
/* Updates all powder special boosts
*/
function updatePowderSpecials(buttonId){
let name = (buttonId).split("-")[0];
let specialNames = ["Quake", "Chain Lightning", "Curse", "Courage", "Air Prison"];
let powderSpecials = []; // [ [special, power], [special, power]]
let elem = document.getElementById(buttonId);
if (elem.classList.contains("toggleOn")) {
elem.classList.remove("toggleOn");
}else {
for (let i = 1;i < 6; i++) {
document.getElementById(name + "-" + i).classList.remove("toggleOn");
}
elem.classList.add("toggleOn");
}
for (const sName of specialNames) {
for (let i = 1;i < 6; i++) {
if (document.getElementById(sName.replace(" ","_") + "-" + i).classList.contains("toggleOn")) {
let powderSpecial = powderSpecialStats[specialNames.indexOf(sName.replace("_"," "))];
powderSpecials.push([powderSpecial, i]);
break;
}
}
}
//console.log(powderSpecials);
displayPowderSpecials(document.getElementById("powder-special-stats"), powderSpecials);
calculateBuildStats(); //also make damage boosts apply ;-;
}
/* Calculates all build statistics and updates the entire display.
*/
function calculateBuildStats() {