diff --git a/js/bullets.js b/js/bullets.js
index 713bd9e..e9df9b5 100644
--- a/js/bullets.js
+++ b/js/bullets.js
@@ -1789,13 +1789,13 @@ const b = {
name: "foam", //15
description: "spray bubbly foam that sticks to enemies
does damage over time and slows movement",
ammo: 0,
- ammoPack: 80,
+ ammoPack: 95,
have: false,
isStarterGun: true,
fire() {
const me = bullet.length;
- const dir = mech.angle + 0.1 * (Math.random() - 0.5)
- const RADIUS = (9 + 12 * Math.random()) * b.modBulletSize
+ const dir = mech.angle + 0.2 * (Math.random() - 0.5)
+ const RADIUS = (6 + 16 * Math.random()) * b.modBulletSize
bullet[me] = Bodies.polygon(mech.pos.x + 30 * Math.cos(mech.angle), mech.pos.y + 30 * Math.sin(mech.angle), 25, RADIUS, {
angle: dir,
density: 0.000001, // 0.001 is normal density
@@ -1803,7 +1803,7 @@ const b = {
frictionAir: 0,
friction: 0.2,
restitution: 0.2,
- dmg: b.modExtraDmg, //damage done in addition to the damage from momentum
+ dmg: 0.04 + b.modExtraDmg, //damage done in addition to the damage from momentum
classType: "bullet",
collisionFilter: {
category: 0x000100,
@@ -1815,7 +1815,7 @@ const b = {
radius: RADIUS,
target: null,
onDmg(who) {
- if (!this.target && who.alive) {
+ if (!this.target && who.alive && who.dropPowerUp) {
this.target = who;
this.collisionFilter.category = 0x000000;
}
@@ -1852,7 +1852,7 @@ const b = {
Matter.Body.setPosition(this, this.target.position)
Matter.Body.setVelocity(this.target, Matter.Vector.mult(this.target.velocity, 0.95))
Matter.Body.setAngularVelocity(this.target, this.target.angularVelocity * 0.96)
- this.target.damage(b.dmgScale * 0.0035);
+ this.target.damage(b.dmgScale * 0.0025);
} else {
//look for a new target
this.target = null
@@ -1863,7 +1863,7 @@ const b = {
});
World.add(engine.world, bullet[me]); //add bullet to world
mech.fireCDcycle = mech.cycle + Math.floor((mech.crouch ? 15 : 3) * b.modFireRate); // cool down
- const SPEED = mech.crouch ? 25 : 16 - RADIUS * 0.25;
+ const SPEED = mech.crouch ? 22 : 15 - RADIUS * 0.25;
Matter.Body.setVelocity(bullet[me], {
x: SPEED * Math.cos(dir),
y: SPEED * Math.sin(dir)
diff --git a/js/level.js b/js/level.js
index d806e94..7ba8682 100644
--- a/js/level.js
+++ b/js/level.js
@@ -110,7 +110,7 @@ const level = {
// powerUps.spawn(450, -400, "mod", false, 6);
// powerUps.spawn(450, -400, "mod", false);
// spawn.bodyRect(-45, -100, 40, 50);
- spawn.shooter(800, -1150);
+ spawn.shooter(800, -1050);
// spawn.groupBoss(-600, -550);
// spawn.hopper(800, -150);
// spawn.beamer(800, -150);
diff --git a/js/mobs.js b/js/mobs.js
index 3b88a84..ea6e955 100644
--- a/js/mobs.js
+++ b/js/mobs.js
@@ -711,7 +711,7 @@ const mobs = {
// }
},
grow() {
- if (!this.isSleeping) {
+ if (!mech.isBodiesAsleep) {
if (this.seePlayer.recall) {
if (this.radius < 80) {
const scale = 1.01;
@@ -845,7 +845,7 @@ const mobs = {
}
},
fire() {
- if (!this.isSleeping) {
+ if (!mech.isBodiesAsleep) {
const setNoseShape = () => {
const mag = this.radius + this.radius * this.noseLength;
this.vertices[1].x = this.position.x + Math.cos(this.angle) * mag;
@@ -921,7 +921,7 @@ const mobs = {
this.death(); //death with no power up or body
},
timeLimit() {
- if (!this.isSleeping) {
+ if (!mech.isBodiesAsleep) {
this.timeLeft--;
if (this.timeLeft < 0) {
this.dropPowerUp = false;
diff --git a/js/player.js b/js/player.js
index e4d2197..1fe5172 100644
--- a/js/player.js
+++ b/js/player.js
@@ -846,13 +846,13 @@ const mech = {
},
grabPowerUp() { //look for power ups to grab with field
if (mech.fieldCDcycle < mech.cycle) {
- const grabPowerUpRange2 = (this.grabRange + 220) * (this.grabRange + 220)
+ const grabPowerUpRange2 = (mech.grabRange + 220) * (mech.grabRange + 220)
for (let i = 0, len = powerUp.length; i < len; ++i) {
const dxP = mech.pos.x - powerUp[i].position.x;
const dyP = mech.pos.y - powerUp[i].position.y;
const dist2 = dxP * dxP + dyP * dyP;
// float towards player if looking at and in range or if very close to player
- if (dist2 < grabPowerUpRange2 && this.lookingAt(powerUp[i]) || dist2 < 16000) {
+ if (dist2 < grabPowerUpRange2 && mech.lookingAt(powerUp[i]) || dist2 < 16000) {
if (dist2 < 5000) { //use power up if it is close enough
Matter.Body.setVelocity(player, { //player knock back, after grabbing power up
x: player.velocity.x + ((powerUp[i].velocity.x * powerUp[i].mass) / player.mass) * 0.3,
@@ -861,7 +861,7 @@ const mech = {
mech.usePowerUp(i);
return;
}
- this.fieldMeter -= this.fieldRegen * 0.5;
+ mech.fieldMeter -= mech.fieldRegen * 0.5;
powerUp[i].force.x += 7 * (dxP / dist2) * powerUp[i].mass;
powerUp[i].force.y += 7 * (dyP / dist2) * powerUp[i].mass - powerUp[i].mass * game.g; //negate gravity
//extra friction
@@ -876,11 +876,12 @@ const mech = {
pushMass(who) {
const speed = Matter.Vector.magnitude(Matter.Vector.sub(who.velocity, player.velocity))
const fieldBlockCost = 0.03 + Math.sqrt(who.mass) * speed * 0.003 //0.012
- if (this.fieldMeter > fieldBlockCost * 0.6) { //shield needs at least some of the cost to block
- this.fieldMeter -= fieldBlockCost * this.fieldShieldingScale;
- if (this.fieldMeter < 0) this.fieldMeter = 0;
- this.drawHold(who);
+ if (mech.fieldMeter > fieldBlockCost * 0.6) { //shield needs at least some of the cost to block
+ mech.fieldMeter -= fieldBlockCost * mech.fieldShieldingScale;
+ if (mech.fieldMeter < 0) mech.fieldMeter = 0;
+ mech.drawHold(who);
mech.fieldCDcycle = mech.cycle + 10;
+ mech.holdingTarget = null
//knock backs
const unit = Matter.Vector.normalise(Matter.Vector.sub(player.position, who.position))
const mass = Math.min(Math.sqrt(who.mass), 3.5); //large masses above 4*4 can start to overcome the push back
@@ -1061,9 +1062,9 @@ const mech = {
} else if ((keys[32] || game.mouseDownRight && mech.fieldMeter > 0.1 && mech.fieldCDcycle < mech.cycle)) { //not hold but field button is pressed
mech.drawField();
mech.grabPowerUp();
- mech.pushMobsFacing();
- mech.pushBodyFacing();
mech.lookForPickUp();
+ mech.pushBodyFacing();
+ mech.pushMobsFacing();
} else if (mech.holdingTarget && mech.fireCDcycle < mech.cycle && mech.fieldMeter > 0.05) { //holding, but field button is released
mech.pickUp();
} else {
@@ -1294,10 +1295,10 @@ const mech = {
ctx.lineWidth = 2 * Math.random();
ctx.stroke();
- mech.pushMobs360(110);
- // mech.pushBody360(100); //disabled because doesn't work at short range
mech.grabPowerUp();
mech.lookForPickUp();
+ mech.pushMobs360(110);
+ // mech.pushBody360(100); //disabled because doesn't work at short range
} else {
mech.fieldCDcycle = mech.cycle + 120; //if out of energy
}
@@ -1327,10 +1328,9 @@ const mech = {
} else if ((keys[32] || game.mouseDownRight) && mech.fieldCDcycle < mech.cycle) { //push away
const DRAIN = 0.0004
if (mech.fieldMeter > DRAIN) {
- mech.pushMobs360(170);
- mech.pushBody360(180);
mech.grabPowerUp();
mech.lookForPickUp(170);
+ mech.pushMobs360(170);
//look for nearby objects to make zero-g
function zeroG(who, mag = 1.06) {
for (let i = 0, len = who.length; i < len; ++i) {
@@ -1462,11 +1462,11 @@ const mech = {
mech.holding();
mech.throw();
} else if ((keys[32] || game.mouseDownRight && mech.fieldMeter > 0.1 && mech.fieldCDcycle < mech.cycle)) { //not hold but field button is pressed
- mech.pushMobsFacing();
- mech.pushBodyFacing();
mech.drawField();
mech.grabPowerUp();
mech.lookForPickUp();
+ mech.pushMobsFacing();
+ mech.pushBodyFacing();
} else if (mech.holdingTarget && mech.fireCDcycle < mech.cycle && mech.fieldMeter > 0.05) { //holding, but field button is released
mech.pickUp();
} else {
diff --git a/js/spawn.js b/js/spawn.js
index e66b7d3..7983031 100644
--- a/js/spawn.js
+++ b/js/spawn.js
@@ -587,7 +587,7 @@ const spawn = {
};
// if (Math.random() < Math.min(0.2 + game.difficulty * 0.1, 0.7)) spawn.shield(me, x, y);
me.do = function () {
- if (!this.isSleeping) {
+ if (!mech.isBodiesAsleep) {
this.seePlayerByLookingAt();
const dist2 = this.distanceToPlayer2();
//laser Tracking
@@ -689,7 +689,7 @@ const spawn = {
this.attraction();
this.gravity();
//draw
- if (!this.isSleeping) {
+ if (!mech.isBodiesAsleep) {
if (this.seePlayer.yes) {
if (this.alpha < 1) this.alpha += 0.01;
} else {