$(".debug").hide(); let playerHp = 100; let enemyHp = 160; let playerMaxHp = 100; let enemyMaxHp = 160; let playerExtraDmg = 1; let playerDef = 0; let enemyExtraDmg = 1.05; let enemyDef = 0; let moveNames = []; let selectableMoves = []; let movePool = []; let movesChosen = 1; let click = new Audio("click.mp3") let music = new Audio("Brokemon.wav") let musicPlaying = false; console.log("yo hi snooper if somethings red tell me ok? also run playerHp = -2") let params = window.location.search; params = new URLSearchParams(params); let newHp = params.get("hp"); let newDmg = params.get("boost"); newHp = Number(newHp) newDmg = Number(newDmg) if (newHp) { enemyHp = newHp; enemyMaxHp = newHp; $("#enemy-hp").html(newHp); } if (newDmg) { enemyExtraDmg = newDmg; $("#enemyBoost").html(`x${newDmg}`); }; $('#button-1').prop("disabled", true); $('#button-2').prop("disabled", true); $('#button-3').prop("disabled", true); $('#button-4').prop("disabled", true); function toggleMusic() { if (musicPlaying) { if (music.paused) { music.play() } else { music.pause() } } } function setDifficulty() { let diffBoost = $("#enemy-boost-input").val(); let diffHp = $("#enemy-hp-input").val(); diffBoost = Math.max(0, Math.min(100000, Math.round(diffBoost))) diffHp = Math.max(1, Math.min(10000000, Math.round(diffHp))) window.location.replace(`index.html?hp=${diffHp}&boost=${diffBoost}`) } function setupAi() { for (i of Array(4).keys()) { let sNum = Math.random() * selectableMoves.length; let sSelected = selectableMoves.splice(Math.floor(sNum), 1)[0] movePool.push(sSelected); } } function debug(key) { if (key.code === "F7") { console.log('opened debug HAXOR :O'); $(".debug").show(); } } function toggleButtons() { $('#button-1').prop('disabled', (i, v) => !v); $('#button-2').prop('disabled', (i, v) => !v); $('#button-3').prop('disabled', (i, v) => !v); $('#button-4').prop('disabled', (i, v) => !v); } function roundAndUpdate() { playerHp = Math.round(playerHp); enemyHp = Math.round(enemyHp); $("#enemy-hp").html(enemyHp); $("#player-hp").html(playerHp); if (enemyHp <= 0) { $("#enemy-hp").html("<span class='dead'>Dead</span>") } if (playerHp <= 0) { $("#player-hp").html("<span class='dead'>Dead</span>") } $("#playerBoost").html(`x${Math.round(playerExtraDmg * 100) / 100}`); $("#enemyBoost").html(`x${Math.round(enemyExtraDmg * 100) / 100}`); if (playerExtraDmg < 1) { $("#playerBoost").switchClass("boost", "nerf", 1000, "easeInOutQuad"); } else if (playerExtraDmg >= 1) { console.log("cool") $("#playerBoost").switchClass("nerf", "boost", 1000, "easeInOutQuad"); } if (enemyExtraDmg < 1) { $("#enemyBoost").switchClass("boost", "nerf", 1000, "easeInOutQuad"); } else if (enemyExtraDmg >= 1) { $("#enemyBoost").switchClass("nerf", "boost", 1000, "easeInOutQuad"); } $("#player-defense").html(playerDef); $("#enemy-defense").html(enemyDef); } function display(top, bottom) { $("#top-bar").html("| " + top); $("#bottom-bar").html("| " + bottom); } function moveAi() { let num = Math.random() * movePool.length; let selected = movePool[Math.floor(num)]; eval(`${selected}.useMove("enemy")`) } function loop1() { if (playerHp > 0 && enemyHp > 0) { display("Your turn!", "") toggleButtons() } else { setTimeout(handleWin, 1000) } } function loop2() { if(playerHp > 0 && enemyHp > 0) { display("Enemy turn!", "") setTimeout(loop3, 1000) } else { setTimeout(handleWin, 1000) } } function loop3() { moveAi() setTimeout(loop1, 1500) } function handleWin() { if (playerHp >= enemyHp) { display("You win!", "Good job!") } else { display("You lost.", "sad") } } function evalUse(name, user) { eval(`${name}.useMove("${user}")`) } class Move { constructor(name, dmg, target, effect, effectType, heal, codeName, specialMsg) { this.name = name; this.dmg = dmg; if (target != "attack") { this.target = target; this.effect = effect; } else { this.target = "attack"; } this.heal = heal; this.effectType = effectType; this.codeName = codeName; moveNames.push(codeName); selectableMoves = [...moveNames]; this.addFunction = `${codeName}.addToMoves()`; this.useFunction = `${codeName}.useMove("player")`; $("#key").before(`<button class="move-select" id="add-${codeName}" onclick="${this.addFunction}">${name}</button>`); if (dmg > 0 && target === "attack") { $(`#add-${codeName}`).addClass("damageMove"); } else if (dmg > 0) { $(`#add-${codeName}`).addClass("specialDmgMove"); } else if (target != "attack") { $(`#add-${codeName}`).addClass("statusMove"); } else if (heal > 0) { $(`#add-${codeName}`).addClass("healMove"); } this.specialMsg = specialMsg; } addToMoves() { click.play(); $(`#button-${movesChosen}`).html(this.name); $(`#button-${movesChosen}`).attr("onclick", `${this.useFunction}`) movesChosen += 1; $(`#add-${this.codeName}`).remove(); if (movesChosen === 5) { $("#moveSelector").remove(); music.play() music.loop = true; musicPlaying = true; loop1(); } } useMove(user) { switch (user) { case "player": click.play(); let pDamageDealt = this.dmg * playerExtraDmg; let randomDamageBoost = Math.random() / 5 randomDamageBoost += 0.9 pDamageDealt *= randomDamageBoost if (this.dmg > 0) { console.log("indeedee") pDamageDealt -= enemyDef pDamageDealt = Math.max(pDamageDealt, (pDamageDealt + enemyDef) / 2) } enemyHp -= pDamageDealt; playerHp += this.heal * playerExtraDmg; console.log(this.codeName) playerHp = Math.min(playerHp, playerMaxHp); enemyHp = Math.min(enemyHp, enemyMaxHp) if (this.target === "user") { if (this.effectType === 1) { playerExtraDmg += this.effect; playerExtraDmg = Math.max(playerExtraDmg, 0.5); } else if (this.effectType === 2) { playerDef += this.effect; } } else if (this.target === "enemy") { if (this.effectType === 1) { enemyExtraDmg += this.effect; enemyExtraDmg = Math.max(enemyExtraDmg, 0.5); } else if (this.effectType === 2) { enemyDef += this.effect; } } if (this.dmg > 0 && this.heal >= 0) { if (this.target != "attack" || this.heal > 0) { display(`You used ${this.name}!`, `It dealt ${Math.round(pDamageDealt)} damage and some other stuff.`) } else { display(`You used ${this.name}!`, `It dealt ${Math.round(pDamageDealt)} damage.`) } } else if (this.target === "user") { if (this.effectType === 1) { display(`You used ${this.name}!`, `Your attack increased by ${this.effect * 100}%.`) } else { display(`You used ${this.name}!`, `Your defense increased by ${this.effect}.`) } } else if (this.target === "enemy") { if (this.effectType === 1) { display(`You used ${this.name}!`, `The opponent's attack decreased by ${this.effect * -100}%.`) } else { display(`You used ${this.name}!`, `The opponent's defense decreased by ${this.effect * -1}.`) } } else if (this.heal > 0) { display(`You used ${this.name}!`, `It brought your HP back up to ${Math.round(playerHp)}.`) } else if (this.heal < 0) { display(`You use ${this.name}!`, `It dealt ${Math.round(pDamageDealt)} damage with ${Math.round(this.heal * playerExtraDmg * -1)} recoil.`) } if (this.specialMsg) { console.log("sure") switch (this.codeName) { case "beast": display("MRBEASTTTT", "You healed both yourself and your enemy."); break; case "saiyan": display("SUPER SAIYAN!!!", "*insert japanese here*") break; } } toggleButtons(); setTimeout(loop2, 1500) break; case "enemy": let eDamageDealt = this.dmg * enemyExtraDmg; let eRandomDamageBoost = Math.random() / 5 eRandomDamageBoost += 0.9 eDamageDealt *= eRandomDamageBoost if (this.dmg > 0) { eDamageDealt -= playerDef; eDamageDealt = Math.max(eDamageDealt, (eDamageDealt + playerDef) / 2); }; playerHp -= eDamageDealt; enemyHp += this.heal * enemyExtraDmg; enemyHp = Math.min(enemyHp, enemyMaxHp); playerHp = Math.min(playerHp, playerMaxHp); if (this.target === "user") { if (this.effectType === 1) { enemyExtraDmg += this.effect; enemyExtraDmg = Math.max(enemyExtraDmg, 0.5); } else if (this.effectType === 2) { enemyDef += this.effect; } } else if (this.target === "enemy") { if (this.effectType === 1) { playerExtraDmg += this.effect; playerExtraDmg = Math.max(playerExtraDmg, 0.5); } else if (this.effectType === 2) { playerDef += this.effect; } } if (this.dmg > 0 && this.heal >= 0) { if (this.target != "attack" || this.heal > 0) { display(`The opponent used ${this.name}!`, `It dealt ${Math.round(eDamageDealt)} damage and some other stuff.`) } else { display(`The opponent used ${this.name}!`, `It dealt ${Math.round(eDamageDealt)} damage.`) } } else if (this.target === "user") { if (this.effectType === 1) { display(`The opponent used ${this.name}!`, `The opponent's attack increased by ${this.effect * 100}%.`) } else { display(`The opponent used ${this.name}!`, `The opponent's defense increased by ${this.effect * 1}.`) } } else if (this.target === "enemy") { if (this.effectType === 1) { display(`The opponent used ${this.name}!`, `Your attack decreased by ${this.effect * -100}%.`) } else { display(`The opponent used ${this.name}!`, `Your defense decreased by ${this.effect * -1}.`) } } else if (this.heal > 0) { display(`The opponent used ${this.name}!`, `It brought its HP back up to ${Math.round(enemyHp)}.`) } else if (this.heal < 0) { display(`The opponent used ${this.name}!`, `It dealt ${Math.round(eDamageDealt)} damage with ${Math.round(this.heal * enemyExtraDmg * -1)} recoil.`) } if (this.specialMsg) { switch (this.codeName) { case "beast": display("MRBEASTTTT", "Both the enemy and you were healed."); break; case "saiyan": display("ENEMY GO SUPER SAIYAN!!!", "*insert japanese here*") break; } } break; } roundAndUpdate() } } // let name = new Move("name", dmg, "effectTarget", effectPower, effectType, heal, "codename", hasSpeicalDisplay) let bonk = new Move("Bonk", 40, "attack", 0, 0, 0, "bonk", false); let stronk = new Move("Stronkify", 0, "user", 0.15, 1, 0, "stronk", false); let belittle = new Move("Belittle", 0, "enemy", -0.15, 1, 0, "belittle", false); let tickle = new Move("Tickle", 10, "enemy", -0.1, 1, 0, "tickle", false); let lick = new Move("Lick Wounds", 0, "attack", 0, 0, 30, "lick", false); let hyperbonk = new Move("HYPERBONK", 50, "attack", 0, 0, -40, "hyperbonk", false); let triangulate = new Move("Triangulate 🤓", 15, "user", 0.05, 1, 10, "triangulate", false); let munch = new Move("Gremlin Munch", 30, "attack", 0, 0, 15, "munch", false); let beast = new Move("MRBEASTTTT", -20, "attack", 0, 0, 40, "beast", true); let saiyan = new Move("Super Saiyan", 0, "user", 0.3, 1, -30, "saiyan", true); let rock = new Move("El Rock", 0, "user", 5, 2, 0, "rock", false); let pickaxe = new Move("Diamond Pickaxe", 0, "enemy", -4, 2, 0, "pickaxe", false); let l = new Move("L", 25, "enemy", -0.05, 1, 0, "l", false); // Kalob was a special child. He belittled people so they could not lick their wounds using a baseball bat to bonk them document.addEventListener("keydown", debug); setupAi()