From 8945dfa01be54763ebe9f416fe92ad01b2591aa5 Mon Sep 17 00:00:00 2001 From: lilgreenland Date: Fri, 20 Sep 2019 07:09:23 -0700 Subject: [PATCH] wording, and spore balance --- js/bullets.js | 10 +- js/level.js | 2 +- js/player.js | 277 ++++++-------------------------------------------- 3 files changed, 35 insertions(+), 254 deletions(-) diff --git a/js/bullets.js b/js/bullets.js index a688e2a..7f7ab9f 100644 --- a/js/bullets.js +++ b/js/bullets.js @@ -767,13 +767,13 @@ const b = { { name: "spores", ammo: 0, - ammoPack: 7, + ammoPack: 6, have: false, fire() { const me = bullet.length; const dir = mech.angle; bullet[me] = Bodies.polygon(mech.pos.x + 30 * Math.cos(mech.angle), mech.pos.y + 30 * Math.sin(mech.angle), 20, 4.5, b.fireAttributes(dir)); - b.fireProps(mech.crouch ? 60 : 35, mech.crouch ? 25 : 14, dir, me); //cd , speed + b.fireProps(mech.crouch ? 70 : 50, mech.crouch ? 25 : 14, dir, me); //cd , speed b.drawOneBullet(bullet[me].vertices); Matter.Body.setDensity(bullet[me], 0.000001); bullet[me].endCycle = game.cycle + 100; @@ -798,7 +798,7 @@ const b = { //spawn bullets on end bullet[me].onEnd = function () { - const NUM = 12; + const NUM = 9; for (let i = 0; i < NUM; i++) { const bIndex = bullet.length; const RADIUS = 4 + 2 * Math.random(); @@ -808,7 +808,7 @@ const b = { angle: dir, friction: 0, frictionAir: 0.01, - dmg: 1, //damage done in addition to the damage from momentum + dmg: 1.65, //damage done in addition to the damage from momentum classType: "bullet", collisionFilter: { category: 0x000100, @@ -820,7 +820,7 @@ const b = { this.endCycle = 0; //bullet ends cycle after doing damage }, onEnd() {}, - lookFrequency: 57 + Math.floor(37 * Math.random()), + lookFrequency: 67 + Math.floor(47 * Math.random()), do() { this.force.y += this.mass * 0.00025; // high gravity because of the high friction diff --git a/js/level.js b/js/level.js index ee814d0..061f594 100644 --- a/js/level.js +++ b/js/level.js @@ -15,7 +15,7 @@ const level = { document.title = "n-gon"; this.intro(); //starting level // b.giveGuns(0) // set a starting gun for testing - mech.fieldUpgrades[4]() //give a field power up for testing + mech.fieldUpgrades[6]() //give a field power up for testing // game.levelsCleared = 3; //for testing to simulate possible mobs spawns // this.bosses(); // this.testingMap(); diff --git a/js/player.js b/js/player.js index 1a50dd2..e3df862 100644 --- a/js/player.js +++ b/js/player.js @@ -817,7 +817,7 @@ const mech = { }, () => { mech.fieldMode = 1; - game.makeTextLog("Time Dilation Field
(left mouse or space bar)

field emitter slows objects in range

", 1000); + game.makeTextLog("Time Dilation Field
(right mouse or space bar)

field emitter slows objects in range

", 1000); mech.setHoldDefaults(); mech.fieldArc = 1; //field covers full 360 degrees mech.calculateFieldThreshold(); @@ -872,7 +872,7 @@ const mech = { }, () => { mech.fieldMode = 2; - game.makeTextLog("Kinetic Energy Field
(left mouse or space bar)

field emitter does damage on contact
blocks are thrown at a higher velocity

", 1000); + game.makeTextLog("Kinetic Energy Field
(right mouse or space bar)

field emitter does damage on contact
blocks are thrown at a higher velocity

", 1000); mech.setHoldDefaults(); //throw quicker and harder mech.throwChargeRate = 3; //0.5 @@ -922,7 +922,7 @@ const mech = { }, () => { mech.fieldMode = 3; - game.makeTextLog("Negative Mass Field
(left mouse or space bar)

field emitter nullifies gravity around player
field emitter holds more massive objects

", 1000); + game.makeTextLog("Negative Mass Field
(right mouse or space bar)

field emitter nullifies gravity around player
field emitter holds more massive objects

", 1000); mech.setHoldDefaults(); mech.holdingMassScale = 0.05; //can hold heavier blocks mech.fieldArc = 1; //field covers full 360 degrees @@ -983,14 +983,14 @@ const mech = { }, () => { mech.fieldMode = 4; - game.makeTextLog("Zero-Point Energy Field
(left mouse or space bar)

improved energy regeneration
field emitter surrounds player

", 1000); + game.makeTextLog("Zero-Point Energy Field
(right mouse or space bar)

improved energy regeneration
field emitter surrounds player

", 1000); mech.setHoldDefaults(); - mech.fieldRegen = 0.02; //0.0015 + mech.fieldRegen = 0.01; //0.0015 mech.fieldArc = 1; //field covers full 360 degrees mech.calculateFieldThreshold(); mech.hold = function () { - mech.grabRange = 250 + 35 * Math.sin(game.cycle / 20) + mech.grabRange = 190 + 35 * Math.sin(game.cycle / 30) if (mech.isHolding) { mech.drawHold(mech.holdingTarget); @@ -1011,12 +1011,14 @@ const mech = { }, () => { mech.fieldMode = 5; - game.makeTextLog("Nano-Scale Manufacturing
(passive effect)

when energy is full, build a drone using 10 energy
reduced energy regeneration

", 1000); + game.makeTextLog("Nano-Scale Manufacturing
(passive effect)

when energy is full, build a drone using 20 energy

", 1000); mech.setHoldDefaults(); - mech.fieldRegen = 0.0005 //0.0015; + mech.grabRange = 160; + mech.fieldArc = 0.11; + // mech.fieldRegen = 0.0008 //0.0015; mech.hold = function () { if (mech.fieldMeter === 1) { - mech.fieldMeter -= 0.1; + mech.fieldMeter -= 0.2; b.guns[12].fire() //spawn drone } @@ -1025,9 +1027,23 @@ const mech = { mech.holding(); mech.throw(); } else if ((keys[32] || game.mouseDownRight && mech.fieldMeter > 0.1)) { //not hold but field button is pressed - mech.drawField(); + // mech.drawField(); + //draw field + + const range = this.grabRange - 20; + ctx.beginPath(); + ctx.arc(this.pos.x, this.pos.y, range, this.angle - Math.PI * this.fieldArc, this.angle + Math.PI * this.fieldArc, false); + let eye = 13; + ctx.lineTo(mech.pos.x + eye * Math.cos(this.angle), mech.pos.y + eye * Math.sin(this.angle)); + if (this.holdingTarget) { + ctx.fillStyle = "rgba(150,150,150," + (0.05 + 0.1 * Math.random()) + ")"; + } else { + ctx.fillStyle = "rgba(150,150,150," + (0.15 + 0.15 * Math.random()) + ")"; + } + ctx.fill(); + mech.grabPowerUp(); - mech.pushMobs(); + // mech.pushMobs(); mech.lookForPickUp(); } else if (mech.holdingTarget && mech.fireCDcycle < game.cycle) { //holding, but field button is released mech.pickUp(); @@ -1039,7 +1055,7 @@ const mech = { }, () => { mech.fieldMode = 6; - game.makeTextLog("Metamaterial Refractive Optics
(left mouse or space bar)

localized invisibility field

", 1000); + game.makeTextLog("Metamaterial Refractive Optics
(right mouse or space bar)

localized invisibility field

", 1000); mech.setHoldDefaults(); mech.fieldArc = 1; //field covers full 360 degrees mech.calculateFieldThreshold(); @@ -1079,242 +1095,7 @@ const mech = { } mech.drawFieldMeter() } - }, - // () => { - // mech.fieldMode = 1; - // game.makeTextLog("

Time Dilation Field


active ability: hold left and right mouse to slow time
passive bonus: +field regeneration", 1000); //
passive bonus: can phase through blocks - // mech.setHoldDefaults(); - // mech.fieldRegen = 0.01; //0.0015 - // mech.hold = function () { - // if (mech.isHolding) { - // mech.drawHold(mech.holdingTarget); - // mech.holding(); - // mech.throw(); - // } else if (game.mouseDown && (keys[32] || game.mouseDownRight) && mech.fieldCDcycle < game.cycle) { - // if (mech.fieldMeter > mech.fieldRegen * 1.15) { - // mech.fieldMeter -= mech.fieldRegen * 1.15; - // const range = 900; - // //draw slow field - // ctx.beginPath(); - // ctx.arc(mech.pos.x, mech.pos.y, range, 0, 2 * Math.PI); - // ctx.fillStyle = "#f5f5ff"; - // ctx.globalCompositeOperation = "difference"; - // ctx.fill(); - // ctx.globalCompositeOperation = "source-over"; - - // function slow(who, friction = 0) { - // for (let i = 0, len = who.length; i < len; ++i) { - // dist = Matter.Vector.magnitude(Matter.Vector.sub(who[i].position, mech.pos)) - // if (dist < range) { - // Matter.Body.setAngularVelocity(who[i], who[i].angularVelocity * friction) - // Matter.Body.setVelocity(who[i], { - // x: who[i].velocity.x * friction, - // y: who[i].velocity.y * friction - // }); - // } - // } - // } - // slow(mob); - // slow(body); - // slow(bullet); - // } else { - // mech.fieldCDcycle = game.cycle + 120; - // } - // } else if ((keys[32] || game.mouseDownRight) && mech.fieldMeter > 0.1) { //field button is pressed - // mech.drawField(); - // mech.grabPowerUp(); - // mech.pushMobs(); - // mech.lookForPickUp(130); - // } else if (mech.holdingTarget && mech.fireCDcycle < game.cycle) { //holding, but field button is released - // mech.pickUp(); - // } else { - // mech.holdingTarget = null; //clears holding target (this is so you only pick up right after the field button is released and a hold target exists) - // } - // mech.drawFieldMeter() - // } - // }, - // () => { - // mech.fieldMode = 2; - // game.makeTextLog("

Kinetic Energy Field


passive bonus: +field emitter damage
passive bonus: +throw energy", 1000); - // mech.setHoldDefaults(); - // // mech.fieldRegen = 0.0008; // 0.0015 is normal - // //throw quicker and harder - // mech.throwChargeRate = 4; //0.5 - // mech.throwChargeMax = 300; //50 - // //passive field does extra damage - // mech.grabRange = 180; - // mech.fieldArc = 0.08; - // mech.fieldDamage = 2.5; - - // mech.hold = function () { - // if (mech.isHolding) { - // mech.drawHold(mech.holdingTarget); - // mech.holding(); - // mech.throw(); - // } else if ((keys[32] || game.mouseDownRight) && mech.fieldMeter > 0.15) { //not hold but field button is pressed - // //draw field - // const range = mech.grabRange - 20; - // ctx.beginPath(); - // ctx.arc(mech.pos.x, mech.pos.y, range, mech.angle - Math.PI * mech.fieldArc, mech.angle + Math.PI * mech.fieldArc, false); - // let eye = 13; - // ctx.lineTo(mech.pos.x + eye * Math.cos(mech.angle), mech.pos.y + eye * Math.sin(mech.angle)); - // if (mech.holdingTarget) { - // ctx.fillStyle = "rgba(255,50,150," + (0.05 + 0.1 * Math.random()) + ")"; - // } else { - // ctx.fillStyle = "rgba(255,50,150," + (0.15 + 0.15 * Math.random()) + ")"; - // } - // ctx.fill(); - // //draw random lines in field for cool effect - // let offAngle = mech.angle + 2 * Math.PI * mech.fieldArc * (Math.random() - 0.5); - // ctx.beginPath(); - // eye = 15; - // ctx.moveTo(mech.pos.x + eye * Math.cos(mech.angle), mech.pos.y + eye * Math.sin(mech.angle)); - // ctx.lineTo(mech.pos.x + range * Math.cos(offAngle), mech.pos.y + range * Math.sin(offAngle)); - // ctx.strokeStyle = "rgba(120,170,255,0.4)"; - // ctx.stroke(); - - // mech.grabPowerUp(); - // mech.pushMobs(); - // mech.lookForPickUp(); - // } else if (mech.holdingTarget && mech.fireCDcycle < game.cycle) { //holding, but field button is released - // mech.pickUp(); - // } else { - // mech.holdingTarget = null; //clears holding target (this is so you only pick up right after the field button is released and a hold target exists) - // } - // mech.drawFieldMeter() - // } - // }, - // () => { - // mech.fieldMode = 3; - // game.makeTextLog("

Mass Recycler


active ability: hold left and right mouse to convert blocks into health
negative effect: -energy regen", 1000); - // mech.setHoldDefaults(); - // mech.fieldRegen = 0.0005; //0.0015 - // mech.hold = function () { - // // health drain - // // if (game.cycle % 360 === 0 && mech.health > 0.2) { - // // mech.health = mech.health * 0.97 - 0.01; - // // if (mech.health < 0) { - // // mech.health = 0; - // // mech.death(); - // // return; - // // } - // // mech.displayHealth(); - // // } - // if (mech.isHolding) { - // mech.drawHold(mech.holdingTarget); - // mech.holding(); - // mech.throw(); - // } else if (game.mouseDown && (keys[32] || game.mouseDownRight) && mech.fieldCDcycle < game.cycle) { - // if (mech.fieldMeter > mech.fieldRegen) { - // // mech.fieldMeter -= mech.fieldRegen - // const range = 165; - // //draw range - // ctx.globalCompositeOperation = "screen" //"lighter" // "destination-atop" //"difference" //"color-burn"; - // ctx.beginPath(); - // ctx.arc(mech.pos.x, mech.pos.y, range, 0, 2 * Math.PI); - // ctx.lineWidth = 1; - // ctx.fillStyle = "rgba(150,210,180," + (0.9 + Math.random() * 0.1) + ")"; - // ctx.fill(); - // ctx.globalCompositeOperation = "source-over"; - // ctx.strokeStyle = "#364"; - // ctx.stroke(); - - // //find all blocks in range - // for (let i = 0, len = body.length; i < len; i++) { - // if (!body[i].isNotHoldable) { - // dist = Matter.Vector.magnitude(Matter.Vector.sub(body[i].position, mech.pos)) - // const healCost = Math.sqrt(0.003 * body[i].mass) + 0.04 - // if (dist < range && mech.fieldMeter > healCost + 0.2) { // convert block to heal power up - // // mech.fieldCDcycle = game.cycle + 4; - // mech.fieldMeter -= healCost - // powerUps.spawnHeal(body[i].position.x, body[i].position.y, 120 * healCost); - // Matter.World.remove(engine.world, body[i]); - // body.splice(i, 1); - // break - // } - // } - // } - // } else { - // mech.fieldCDcycle = game.cycle + 120; - // } - // } else if ((keys[32] || game.mouseDownRight) && mech.fieldMeter > 0.2) { //field button is pressed - // mech.drawField(); - // mech.grabPowerUp(); - // mech.pushMobs(); - // mech.lookForPickUp(130); - // } else if (mech.holdingTarget && mech.fireCDcycle < game.cycle) { //holding, but field button is released - // mech.pickUp(); - // } else { - // mech.holdingTarget = null; //clears holding target (this is so you only pick up right after the field button is released and a hold target exists) - // } - // mech.drawFieldMeter() - // } - // }, - // () => { - // mech.fieldMode = 4; - // game.makeTextLog("

Negative Mass Field


active ability: hold left and right mouse to nullify gravity
passive bonuses: +field size, +hold larger blocks", 1000); - // mech.setHoldDefaults(); - // mech.fieldArc = 1; //field covers full 360 degrees - // mech.calculateFieldThreshold(); - // mech.holdingMassScale = 0.05; //can hold heavier blocks - // // mech.gravity = 0.0015; //passive reduce gravity from default 0.0019 - - // mech.hold = function () { - // const range = 200 + 35 * Math.sin(game.cycle / 20) - // if (mech.isHolding) { - // mech.drawHold(mech.holdingTarget); - // mech.holding(); - // mech.throw(); - // } else if (game.mouseDown && (keys[32] || game.mouseDownRight) && mech.fieldCDcycle < game.cycle) { //push away - // if (mech.fieldMeter > 0.005) { - // mech.fieldMeter -= 0.005; - - // //look for nearby objects to make zero-g - // function zeroG(who) { - // for (let i = 0, len = who.length; i < len; ++i) { - // sub = Matter.Vector.sub(who[i].position, mech.pos); - // dist = Matter.Vector.magnitude(sub); - // if (dist < range) { - // who[i].force.y -= who[i].mass * game.g; - // } - // } - // } - // zeroG(powerUp); - // zeroG(body); - - // player.force.y -= player.mass * mech.gravity; // + 0.005 * Math.sin(game.cycle / 10); //wobble - // //add player vertical friction to reduce map jump craziness - // Matter.Body.setVelocity(player, { - // x: player.velocity.x, - // y: player.velocity.y * 0.99 - // }); - - // //draw zero-G range - // ctx.beginPath(); - // ctx.arc(mech.pos.x, mech.pos.y + 15, range, 0, 2 * Math.PI); - // ctx.globalCompositeOperation = "color-burn"; - // ctx.fillStyle = "rgb(90,90,100)"; - // ctx.fill(); - // ctx.globalCompositeOperation = "source-over"; - - // } else { - // //trigger cooldown - // mech.fieldCDcycle = game.cycle + 120; - // } - // } else if ((keys[32] || game.mouseDownRight) && mech.fieldMeter > 0.2 && mech.fieldCDcycle < game.cycle) { //not hold but field button is pressed - // mech.grabRange = range - // mech.drawField(); - // mech.grabPowerUp(); - // mech.pushMobs(); - // mech.lookForPickUp(); - // } else if (mech.holdingTarget && mech.fireCDcycle < game.cycle && mech.fieldCDcycle < game.cycle) { //holding, but field button is released - // mech.pickUp(); - // } else { - // mech.holdingTarget = null; //clears holding target (this is so you only pick up right after the field button is released and a hold target exists) - // } - // mech.drawFieldMeter() - // } - // }, + } ], drawLeg(stroke) { // if (game.mouseInGame.x > this.pos.x) {