From 2073ae22794733ad3924437a5a9edcb553e62a56 Mon Sep 17 00:00:00 2001 From: landgreen Date: Mon, 30 Dec 2019 11:10:36 -0800 Subject: [PATCH] made draft mode default, bug fixes --- index.html | 6 -- js/bullets.js | 4 +- js/game.js | 3 - js/index.js | 11 +-- js/level.js | 9 +-- js/player.js | 44 ++++++------ js/powerups.js | 185 +++++++++++++++---------------------------------- style.css | 7 -- 8 files changed, 88 insertions(+), 181 deletions(-) diff --git a/index.html b/index.html index 1251708..08c8d41 100644 --- a/index.html +++ b/index.html @@ -85,12 +85,6 @@ custom - - When you gain a new a power up choose between 3 random options. - - draft - -
settings diff --git a/js/bullets.js b/js/bullets.js index 3e482c8..f64b3b4 100644 --- a/js/bullets.js +++ b/js/bullets.js @@ -309,7 +309,7 @@ const b = { game.replaceTextLog = true; game.makeTextLog("
NO AMMO

Q, E, and mouse wheel change weapons

", 200); } - if (mech.isHolding) { + if (mech.holdingTarget) { mech.drop(); } } @@ -1761,7 +1761,7 @@ const b = { //use energy to explode const energy = mech.fieldMeter * 0.25 mech.fieldMeter -= energy - if (best.who) b.explosion(path[1], 1200 * energy) + if (best.who) b.explosion(path[1], 1000 * energy) mech.fireCDcycle = mech.cycle + Math.floor(65 * b.modFireRate); // cool down //draw laser beam diff --git a/js/game.js b/js/game.js index defe576..4301ff1 100644 --- a/js/game.js +++ b/js/game.js @@ -86,7 +86,6 @@ const game = { accelScale: null, //set in levels.setDifficulty CDScale: null, //set in levels.setDifficulty lookFreqScale: null, //set in levels.setDifficulty - isDraftMode: false, // dropFPS(cap = 40, time = 15) { // game.fpsCap = cap // game.fpsInterval = 1000 / game.fpsCap; @@ -501,7 +500,6 @@ const game = { document.getElementById("choose-grid").style.display = "none" document.getElementById("controls").style.display = "inline"; document.getElementById("build-button").style.display = "inline" - document.getElementById("draft-button").style.display = "inline" isShowingBuilds = false document.getElementById("settings").style.display = "inline"; document.getElementById("splash").style.display = "inline"; @@ -520,7 +518,6 @@ const game = { document.getElementById("controls").style.display = "none"; document.getElementById("settings").style.display = "none"; document.getElementById("build-button").style.display = "none"; - document.getElementById("draft-button").style.display = "none" document.getElementById("splash").onclick = null; //removes the onclick effect so the function only runs once document.getElementById("splash").style.display = "none"; //hides the element that spawned the function document.getElementById("dmg").style.display = "inline"; diff --git a/js/index.js b/js/index.js index f4924c0..8def363 100644 --- a/js/index.js +++ b/js/index.js @@ -2,8 +2,6 @@ /* TODO: ******************************************* ***************************************************** -make draft mode default and add in negative mods - field: catch mobs in your field and make them into guardian bullets negative mod effect ideas @@ -11,6 +9,8 @@ negative mod effect ideas -fire rate -slow life decay +mod: gain an extra choice of power ups + mod: if you fire when out of ammo you gain 1 ammo pack at the cost of 10% max health 20% of your current health @@ -104,12 +104,6 @@ const cat = { } -document.getElementById("draft-button").addEventListener("click", () => { - game.isDraftMode = true; - game.startGame(); -}); - - //build build grid display const build = { isShowingBuilds: false, @@ -163,7 +157,6 @@ const build = { document.getElementById("build-button").addEventListener("click", () => { document.getElementById("build-button").style.display = "none"; - document.getElementById("draft-button").style.display = "none"; const el = document.getElementById("build-grid") if (build.isShowingBuilds) { el.style.display = "none" diff --git a/js/level.js b/js/level.js index f8a40ae..f56742c 100644 --- a/js/level.js +++ b/js/level.js @@ -67,6 +67,7 @@ const level = { //****************************************************************************************************************** testingMap() { //start with all guns + level.difficultyIncrease(8) game.zoomScale = 1400 //1400 is normal spawn.setSpawnList(); mech.setPosToSpawn(-75, -60); //normal spawn @@ -117,11 +118,11 @@ const level = { // powerUps.spawn(450, -400, "mod", false, 6); // powerUps.spawn(450, -400, "mod", false); // spawn.bodyRect(-45, -100, 40, 50); - spawn.groupBoss(800, -1050); - spawn.shooter(400, -1050); - spawn.shooter(1200, -1050); + // spawn.groupBoss(800, -1050); + spawn.spinner(400, -1050); + spawn.spinner(1200, -1050); // spawn.groupBoss(-600, -550); - spawn.hopper(800, -150); + spawn.spinner(800, -150); // spawn.beamer(800, -150); // spawn.grower(800, -250); // spawn.blinker(800, -250, 40); diff --git a/js/player.js b/js/player.js index 069787b..65ee93c 100644 --- a/js/player.js +++ b/js/player.js @@ -687,7 +687,7 @@ const mech = { return false; }, drop() { - if (mech.isHolding) { + if (mech.isHolding && mech.holdingTarget) { mech.isHolding = false; mech.definePlayerMass() mech.holdingTarget.collisionFilter.category = cat.body; @@ -735,6 +735,7 @@ const mech = { } }, holding() { + // if (mech.holdingTarget) { mech.fieldMeter -= mech.fieldRegen; if (mech.fieldMeter < 0) mech.fieldMeter = 0; Matter.Body.setPosition(mech.holdingTarget, { @@ -743,32 +744,35 @@ const mech = { }); Matter.Body.setVelocity(mech.holdingTarget, player.velocity); Matter.Body.rotate(mech.holdingTarget, 0.01 / mech.holdingTarget.mass); //gently spin the block + // } }, throw () { if ((keys[32] || game.mouseDownRight)) { if (mech.fieldMeter > 0.0007) { - mech.fieldMeter -= 0.0007; - mech.throwCharge += mech.throwChargeRate;; - //draw charge - const x = mech.pos.x + 15 * Math.cos(mech.angle); - const y = mech.pos.y + 15 * Math.sin(mech.angle); - const len = mech.holdingTarget.vertices.length - 1; - const edge = mech.throwCharge * mech.throwCharge * 0.02; - const grd = ctx.createRadialGradient(x, y, edge, x, y, edge + 5); - grd.addColorStop(0, "rgba(255,50,150,0.3)"); - grd.addColorStop(1, "transparent"); - ctx.fillStyle = grd; - ctx.beginPath(); - ctx.moveTo(x, y); - ctx.lineTo(mech.holdingTarget.vertices[len].x, mech.holdingTarget.vertices[len].y); - ctx.lineTo(mech.holdingTarget.vertices[0].x, mech.holdingTarget.vertices[0].y); - ctx.fill(); - for (let i = 0; i < len; i++) { + if (mech.holdingTarget) { + mech.fieldMeter -= 0.0007; + mech.throwCharge += mech.throwChargeRate;; + //draw charge + const x = mech.pos.x + 15 * Math.cos(mech.angle); + const y = mech.pos.y + 15 * Math.sin(mech.angle); + const len = mech.holdingTarget.vertices.length - 1; + const edge = mech.throwCharge * mech.throwCharge * 0.02; + const grd = ctx.createRadialGradient(x, y, edge, x, y, edge + 5); + grd.addColorStop(0, "rgba(255,50,150,0.3)"); + grd.addColorStop(1, "transparent"); + ctx.fillStyle = grd; ctx.beginPath(); ctx.moveTo(x, y); - ctx.lineTo(mech.holdingTarget.vertices[i].x, mech.holdingTarget.vertices[i].y); - ctx.lineTo(mech.holdingTarget.vertices[i + 1].x, mech.holdingTarget.vertices[i + 1].y); + ctx.lineTo(mech.holdingTarget.vertices[len].x, mech.holdingTarget.vertices[len].y); + ctx.lineTo(mech.holdingTarget.vertices[0].x, mech.holdingTarget.vertices[0].y); ctx.fill(); + for (let i = 0; i < len; i++) { + ctx.beginPath(); + ctx.moveTo(x, y); + ctx.lineTo(mech.holdingTarget.vertices[i].x, mech.holdingTarget.vertices[i].y); + ctx.lineTo(mech.holdingTarget.vertices[i + 1].x, mech.holdingTarget.vertices[i + 1].y); + ctx.fill(); + } } } else { mech.drop() diff --git a/js/powerups.js b/js/powerups.js index a85b6f6..2217228 100644 --- a/js/powerups.js +++ b/js/powerups.js @@ -43,7 +43,7 @@ const powerUps = { heal = Math.min(mech.maxHealth - mech.health, heal) if (b.isModRecursiveHealing) heal *= 2 mech.addHealth(heal); - if (heal > 0) game.makeTextLog("
  heal " + (heal * 100).toFixed(0) + "%", 300) + if (heal > 0) game.makeTextLog("
  heal " + (heal * game.healScale * 100).toFixed(0) + "%", 300) } }, ammo: { @@ -91,54 +91,27 @@ const powerUps = { return 45; }, effect() { - if (game.isDraftMode) { - function doNotHave(who, skip1 = -1, skip2 = -1) { - let options = []; - for (let i = 1; i < who.length; i++) { - if (i !== mech.fieldMode && i !== skip1 && i !== skip2) options.push(i); - } - if (options.length > 0) return options[Math.floor(Math.random() * options.length)] + function doNotHave(who, skip1 = -1, skip2 = -1) { + let options = []; + for (let i = 1; i < who.length; i++) { + if (i !== mech.fieldMode && i !== skip1 && i !== skip2) options.push(i); } + if (options.length > 0) return options[Math.floor(Math.random() * options.length)] + } - let choice1 = doNotHave(mech.fieldUpgrades) - let choice2 = doNotHave(mech.fieldUpgrades, choice1) - let choice3 = doNotHave(mech.fieldUpgrades, choice1, choice2) - if (choice1 > -1) { - let text = `

choose a field

` - text += `
  ${mech.fieldUpgrades[choice1].name}
${mech.fieldUpgrades[choice1].description}
` - if (choice2 > -1) text += `
  ${mech.fieldUpgrades[choice2].name}
${mech.fieldUpgrades[choice2].description}
` - if (choice3 > -1) text += `
  ${mech.fieldUpgrades[choice3].name}
${mech.fieldUpgrades[choice3].description}
` - // text += `
${game.SVGrightMouse} activate the shield with the right mouse
fields shield you from damage
and let you pick up and throw blocks
` - document.getElementById("choose-grid").innerHTML = text - powerUps.showDraft(); - } else { - powerUps.giveRandomAmmo() - } + let choice1 = doNotHave(mech.fieldUpgrades) + let choice2 = doNotHave(mech.fieldUpgrades, choice1) + let choice3 = doNotHave(mech.fieldUpgrades, choice1, choice2) + if (choice1 > -1) { + let text = `

choose a field

` + text += `
  ${mech.fieldUpgrades[choice1].name}
${mech.fieldUpgrades[choice1].description}
` + if (choice2 > -1) text += `
  ${mech.fieldUpgrades[choice2].name}
${mech.fieldUpgrades[choice2].description}
` + if (choice3 > -1) text += `
  ${mech.fieldUpgrades[choice3].name}
${mech.fieldUpgrades[choice3].description}
` + // text += `
${game.SVGrightMouse} activate the shield with the right mouse
fields shield you from damage
and let you pick up and throw blocks
` + document.getElementById("choose-grid").innerHTML = text + powerUps.showDraft(); } else { - const previousMode = mech.fieldMode - if (this.mode) { //this.mode is set if the power up has been ejected from player - // mech.fieldUpgrades[this.mode].effect(); //set a predetermined power up - mech.setField(this.mode) - } else { //choose a random mode that you don't already have - availableModes = [] - for (let i = 1; i < mech.fieldUpgrades.length; i++) { //start on 1 to skip the default field - if (i !== previousMode) { - availableModes.push(i) - } - } - const mode = availableModes[Math.floor(Math.random() * availableModes.length)] - mech.setField(mode) - } - game.replaceTextLog = true; - game.makeTextLog(`${game.SVGrightMouse} ${mech.fieldUpgrades[mech.fieldMode].name}

${mech.fieldUpgrades[mech.fieldMode].description}`, 600); - game.replaceTextLog = false; - //pop the old field out in case player wants to swap back - if (previousMode !== 0) { - mech.fieldCDcycle = mech.cycle + 40; //trigger fieldCD to stop power up grab automatic pick up of spawn - setTimeout(function () { - powerUps.spawn(mech.pos.x, mech.pos.y - 15, "field", false, previousMode); - }, 100); - } + powerUps.giveRandomAmmo() } } }, @@ -149,43 +122,26 @@ const powerUps = { return 42; }, effect() { - if (game.isDraftMode) { - function doNotHave(who, skip1 = -1, skip2 = -1) { - let options = []; - for (let i = 0; i < who.length; i++) { - if (!who[i].have && i !== skip1 && i !== skip2) options.push(i); - } - if (options.length > 0) return options[Math.floor(Math.random() * options.length)] - } - - let choice1 = doNotHave(b.mods) - let choice2 = doNotHave(b.mods, choice1) - let choice3 = doNotHave(b.mods, choice1, choice2) - if (choice1 > -1) { - let text = "

choose a mod

" - text += `
  ${b.mods[choice1].name}
${b.mods[choice1].description}
` - if (choice2 > -1) text += `
  ${b.mods[choice2].name}
${b.mods[choice2].description}
` - if (choice3 > -1) text += `
  ${b.mods[choice3].name}
${b.mods[choice3].description}
` - document.getElementById("choose-grid").innerHTML = text - powerUps.showDraft(); - } else { - powerUps.giveRandomAmmo() - } - } else { - //find what mods I don't have + function doNotHave(who, skip1 = -1, skip2 = -1) { let options = []; - for (let i = 0; i < b.mods.length; i++) { - if (!b.mods[i].have) options.push(i); + for (let i = 0; i < who.length; i++) { + if (!who[i].have && i !== skip1 && i !== skip2) options.push(i); } + if (options.length > 0) return options[Math.floor(Math.random() * options.length)] + } - // give a random mod from the mods I don 't have - if (options.length > 0) { - let newMod = options[Math.floor(Math.random() * options.length)] - b.giveMod(newMod) - game.replaceTextLog = true; - game.makeTextLog(`
  ${b.mods[newMod].name}

${b.mods[newMod].description}`, 1000); - game.replaceTextLog = false; - } + let choice1 = doNotHave(b.mods) + let choice2 = doNotHave(b.mods, choice1) + let choice3 = doNotHave(b.mods, choice1, choice2) + if (choice1 > -1) { + let text = "

choose a mod

" + text += `
  ${b.mods[choice1].name}
${b.mods[choice1].description}
` + if (choice2 > -1) text += `
  ${b.mods[choice2].name}
${b.mods[choice2].description}
` + if (choice3 > -1) text += `
  ${b.mods[choice3].name}
${b.mods[choice3].description}
` + document.getElementById("choose-grid").innerHTML = text + powerUps.showDraft(); + } else { + powerUps.giveRandomAmmo() } } }, @@ -196,58 +152,27 @@ const powerUps = { return 35; }, effect() { - if (game.isDraftMode) { - - function doNotHave(who, skip1 = -1, skip2 = -1) { - let options = []; - for (let i = 0; i < who.length; i++) { - if (!who[i].have && i !== skip1 && i !== skip2) options.push(i); - } - if (options.length > 0) return options[Math.floor(Math.random() * options.length)] - } - - let choice1 = doNotHave(b.guns) - let choice2 = doNotHave(b.guns, choice1) - let choice3 = doNotHave(b.guns, choice1, choice2) - - if (choice1 > -1) { - let text = "

choose a gun

" - text += `
  ${b.guns[choice1].name}
${b.guns[choice1].description}
` - if (choice2 > -1) text += `
  ${b.guns[choice2].name}
${b.guns[choice2].description}
` - if (choice3 > -1) text += `
  ${b.guns[choice3].name}
${b.guns[choice3].description}
` - document.getElementById("choose-grid").innerHTML = text - powerUps.showDraft(); - } else { - powerUps.giveRandomAmmo() - } - } else { - //find what guns I don't have + function doNotHave(who, skip1 = -1, skip2 = -1) { let options = []; - if (b.activeGun === null && game.difficulty < 3) { - //choose the first gun to be one that is good for the early game - for (let i = 0; i < b.guns.length; ++i) { - if (!b.guns[i].have && b.guns[i].isStarterGun) options.push(i); - } - } else { - //choose a gun you don't have - for (let i = 0; i < b.guns.length; ++i) { - if (!b.guns[i].have) options.push(i); - } + for (let i = 0; i < who.length; i++) { + if (!who[i].have && i !== skip1 && i !== skip2) options.push(i); } - //give player a gun they don't already have if possible - game.replaceTextLog = true; - if (options.length > 0) { - let newGun = options[Math.floor(Math.random() * options.length)]; - if (b.activeGun === null) b.activeGun = newGun //if no active gun switch to new gun - b.guns[newGun].have = true; - b.inventory.push(newGun); - b.guns[newGun].ammo += b.guns[newGun].ammoPack * 2; - game.makeGunHUD(); - game.makeTextLog(`${game.SVGleftMouse} ${b.guns[newGun].name}

${b.guns[newGun].description}`, 900); - } else { - powerUps.giveRandomAmmo() - } - game.replaceTextLog = false + if (options.length > 0) return options[Math.floor(Math.random() * options.length)] + } + + let choice1 = doNotHave(b.guns) + let choice2 = doNotHave(b.guns, choice1) + let choice3 = doNotHave(b.guns, choice1, choice2) + + if (choice1 > -1) { + let text = "

choose a gun

" + text += `
  ${b.guns[choice1].name}
${b.guns[choice1].description}
` + if (choice2 > -1) text += `
  ${b.guns[choice2].name}
${b.guns[choice2].description}
` + if (choice3 > -1) text += `
  ${b.guns[choice3].name}
${b.guns[choice3].description}
` + document.getElementById("choose-grid").innerHTML = text + powerUps.showDraft(); + } else { + powerUps.giveRandomAmmo() } } }, diff --git a/style.css b/style.css index 5427cf7..d546dc3 100644 --- a/style.css +++ b/style.css @@ -53,13 +53,6 @@ summary { background-color: #efeff5; } -#draft-button { - position: absolute; - top: 3px; - left: 3px; - z-index: 12; -} - #build-button { position: absolute; top: 3px;