diff --git a/index.html b/index.html
index bf45843..b42ad24 100644
--- a/index.html
+++ b/index.html
@@ -105,9 +105,9 @@
-
+
diff --git a/js/bullets.js b/js/bullets.js
index 3efddfd..7f20aad 100644
--- a/js/bullets.js
+++ b/js/bullets.js
@@ -296,7 +296,7 @@ const b = {
},
{
name: "scrap bots",
- description: "+15% chance to build a bot after killing a mob
the bot will follow you until you exit the map",
+ description: "+13% chance to build a bot after killing a mob
the bot will follow you until you exit the map",
maxCount: 6,
count: 0,
allowed() {
@@ -304,7 +304,7 @@ const b = {
},
requires: "",
effect() {
- b.isModBotSpawner += 0.15;
+ b.isModBotSpawner += 0.13;
},
remove() {
b.isModBotSpawner = 0;
diff --git a/js/engine.js b/js/engine.js
index 665e3fd..96f9d75 100644
--- a/js/engine.js
+++ b/js/engine.js
@@ -95,19 +95,21 @@ function collisionChecks(event) {
}
}
- function collidePlayer(obj, speedThreshold = 12, massThreshold = 2) {
+ function collidePlayer(obj) {
//player dmg from hitting a body
- if (
- obj.classType === "body" &&
- obj.speed > speedThreshold &&
- obj.mass > massThreshold &&
- (obj.velocity.y > 0 || player.velocity.y > 0)
- ) {
- const v = Vector.magnitude(Vector.sub(player.velocity, obj.velocity));
- if (v > speedThreshold && mech.collisionImmuneCycle < mech.cycle) {
+ if (obj.classType === "body" && mech.collisionImmuneCycle < mech.cycle) {
+ const velocityThreshold = 13
+ if (player.position.y > obj.position.y) { //block is above the player look at total momentum difference
+ const velocityDiffMag = Vector.magnitude(Vector.sub(player.velocity, obj.velocity))
+ if (velocityDiffMag > velocityThreshold) hit(velocityDiffMag - velocityThreshold)
+ } else { //block is below player only look at horizontal momentum difference
+ const velocityDiffMagX = Math.abs(obj.velocity.x - player.velocity.x)
+ if (velocityDiffMagX > velocityThreshold) hit(velocityDiffMagX - velocityThreshold)
+ }
+
+ function hit(dmg) {
mech.collisionImmuneCycle = mech.cycle + b.modCollisionImmuneCycles; //player is immune to collision damage for 30 cycles
- let dmg = Math.sqrt((v - speedThreshold + 0.1) * (obj.mass - massThreshold)) * 0.01;
- dmg = Math.min(Math.max(dmg, 0.02), 0.15);
+ dmg = Math.min(Math.max(Math.sqrt(dmg) * obj.mass * 0.01, 0.02), 0.15);
mech.damage(dmg);
game.drawList.push({ //add dmg to draw queue
x: pairs[i].activeContacts[0].vertex.x,
@@ -116,11 +118,31 @@ function collisionChecks(event) {
color: game.mobDmgColor,
time: game.drawTime
});
- return;
}
}
}
+ // function collidePlayer(obj, speedThreshold = 12, massThreshold = 2) {
+ // //player dmg from hitting a body
+ // if (obj.classType === "body" && mech.collisionImmuneCycle < mech.cycle && obj.speed > speedThreshold && obj.mass > massThreshold) {
+ // const v = Vector.magnitude(Vector.sub(player.velocity, obj.velocity));
+ // if ((Math.abs(obj.velocity.x - player.velocity.x) > speedThreshold) || (player.position.y > obj.position.y && v > speedThreshold)) {
+ // mech.collisionImmuneCycle = mech.cycle + b.modCollisionImmuneCycles; //player is immune to collision damage for 30 cycles
+ // let dmg = Math.sqrt((v - speedThreshold + 0.1) * (obj.mass - massThreshold)) * 0.01;
+ // dmg = Math.min(Math.max(dmg, 0.02), 0.15);
+ // mech.damage(dmg);
+ // game.drawList.push({ //add dmg to draw queue
+ // x: pairs[i].activeContacts[0].vertex.x,
+ // y: pairs[i].activeContacts[0].vertex.y,
+ // radius: dmg * 500,
+ // color: game.mobDmgColor,
+ // time: game.drawTime
+ // });
+ // return;
+ // }
+ // }
+ // }
+
//mob + (player,bullet,body) collisions
for (let k = 0; k < mob.length; k++) {
if (mob[k].alive && mech.alive) {
diff --git a/js/index.js b/js/index.js
index 187cbca..bea7ae1 100644
--- a/js/index.js
+++ b/js/index.js
@@ -369,8 +369,8 @@ document.getElementById("build-button").addEventListener("click", () => { //setu
let localSettings = JSON.parse(localStorage.getItem("localSettings"));
// console.log(localSettings)
if (localSettings) {
- game.isBodyDamage = localSettings.isBodyDamage
- document.getElementById("body-damage").checked = localSettings.isBodyDamage
+ // game.isBodyDamage = localSettings.isBodyDamage
+ // document.getElementById("body-damage").checked = localSettings.isBodyDamage
game.isEasyToAimMode = localSettings.isEasyToAimMode
document.getElementById("track-pad-mode").checked = localSettings.isEasyToAimMode
@@ -389,14 +389,14 @@ if (localSettings) {
document.getElementById("fps-select").value = localSettings.fpsCapDefault
} else {
localSettings = {
- isBodyDamage: true,
+ // isBodyDamage: true,
isEasyToAimMode: false,
isCommunityMaps: false,
difficultyMode: '1',
fpsCapDefault: 'max',
};
localStorage.setItem("localSettings", JSON.stringify(localSettings)); //update local storage
- document.getElementById("body-damage").checked = localSettings.isBodyDamage
+ // document.getElementById("body-damage").checked = localSettings.isBodyDamage
document.getElementById("track-pad-mode").checked = localSettings.isEasyToAimMode
game.isEasyToAimMode = localSettings.isEasyToAimMode
document.getElementById("community-maps").checked = localSettings.isEasyToAimMode
@@ -459,28 +459,32 @@ document.body.addEventListener("mousedown", (e) => {
});
document.body.addEventListener("mouseenter", (e) => { //prevents mouse getting stuck when leaving the window
- // console.log(e)
- if (e.which === 1) {
+ // game.mouseDown = false;
+ // game.mouseDownRight = false;
+
+ if (e.button === 1) {
game.mouseDown = true;
} else {
game.mouseDown = false;
}
- if (e.which === 3) {
+ if (e.button === 3) {
game.mouseDownRight = true;
} else {
game.mouseDownRight = false;
}
});
document.body.addEventListener("mouseleave", (e) => { //prevents mouse getting stuck when leaving the window
+ // game.mouseDown = false;
+ // game.mouseDownRight = false;
// console.log(e)
- if (e.which === 1) {
+ if (e.button === 1) {
game.mouseDown = true;
} else {
game.mouseDown = false;
}
- if (e.which === 3) {
+ if (e.button === 3) {
game.mouseDownRight = true;
} else {
game.mouseDownRight = false;
@@ -521,11 +525,11 @@ document.getElementById("fps-select").addEventListener("input", () => {
localStorage.setItem("localSettings", JSON.stringify(localSettings)); //update local storage
});
-document.getElementById("body-damage").addEventListener("input", () => {
- game.isBodyDamage = document.getElementById("body-damage").checked
- localSettings.isBodyDamage = game.isBodyDamage
- localStorage.setItem("localSettings", JSON.stringify(localSettings)); //update local storage
-});
+// document.getElementById("body-damage").addEventListener("input", () => {
+// game.isBodyDamage = document.getElementById("body-damage").checked
+// localSettings.isBodyDamage = game.isBodyDamage
+// localStorage.setItem("localSettings", JSON.stringify(localSettings)); //update local storage
+// });
document.getElementById("track-pad-mode").addEventListener("input", () => {
game.isEasyToAimMode = document.getElementById("track-pad-mode").checked
diff --git a/js/level.js b/js/level.js
index 5f0c74e..da21787 100644
--- a/js/level.js
+++ b/js/level.js
@@ -20,6 +20,8 @@ const level = {
// b.giveMod("renormalization");
// b.giveMod("pocket universe");
// b.giveMod("wave packet");
+ // b.giveGuns("laser")
+ // mech.setField("pilot wave")
level.intro(); //starting level
// level.testing();
diff --git a/js/player.js b/js/player.js
index e5df93b..bdd507e 100644
--- a/js/player.js
+++ b/js/player.js
@@ -216,7 +216,7 @@ const mech = {
for (let i = 0; i < len; i++) {
b.spore(player) //spawn drone
}
- } else if (game.isBodyDamage && player.velocity.y > 27 && momentum > 180 * b.modSquirrelFx) { //falling damage
+ } else if (player.velocity.y > 27 && momentum > 180 * b.modSquirrelFx) { //falling damage
let dmg = Math.sqrt(momentum - 180) * 0.01
dmg = Math.min(Math.max(dmg, 0.02), 0.20);
mech.damage(dmg);
@@ -776,6 +776,7 @@ const mech = {
mech.fieldRegen = b.modEnergyRegen; //0.001
mech.fieldMeterColor = "#0cf"
mech.fieldShieldingScale = 1;
+ game.isBodyDamage = true;
mech.fieldDamageResistance = 1;
mech.fieldRange = 155;
mech.fieldFire = false;
@@ -1937,10 +1938,11 @@ const mech = {
},
{
name: "pilot wave",
- description: "use energy to push blocks with your mouse
field radius decreases out of line of sight",
+ description: "use energy to push blocks with your mouse
immune to damage from block collisions",
isEasyToAim: false,
effect: () => {
game.replaceTextLog = true; //allow text over write
+ game.isBodyDamage = false;
mech.fieldPhase = 0;
mech.fieldPosition = {
x: game.mouseInGame.x,
@@ -2008,7 +2010,7 @@ const mech = {
for (let i = 0, len = body.length; i < len; ++i) {
if (Vector.magnitude(Vector.sub(body[i].position, mech.fieldPosition)) < mech.fieldRadius) {
- const DRAIN = speed * body[i].mass * 0.00002
+ const DRAIN = speed * body[i].mass * 0.000022
if (mech.energy > DRAIN) {
mech.energy -= DRAIN;
Matter.Body.setVelocity(body[i], velocity); //give block mouse velocity
diff --git a/js/spawn.js b/js/spawn.js
index ae92a8c..e524d58 100644
--- a/js/spawn.js
+++ b/js/spawn.js
@@ -8,7 +8,7 @@ const spawn = {
"striker", "striker",
"laser", "laser",
"exploder", "exploder",
- "spiker", "spiker",
+ "stabber", "stabber",
"spinner",
"grower",
"springer",
@@ -19,7 +19,7 @@ const spawn = {
"ghoster",
"sneaker",
],
- allowedBossList: ["chaser", "spinner", "striker", "springer", "laser", "focuser", "beamer", "exploder", "spawner", "shooter", "spiker"],
+ allowedBossList: ["chaser", "spinner", "striker", "springer", "laser", "focuser", "beamer", "exploder", "spawner", "shooter", "stabber"],
setSpawnList() { //this is run at the start of each new level to determine the possible mobs for the level
//each level has 2 mobs: one new mob and one from the last level
spawn.pickList.splice(0, 1);
@@ -936,15 +936,12 @@ const spawn = {
ctx.lineTo(best.x, best.y);
}
},
- spiker(x, y, radius = 25 + Math.ceil(Math.random() * 15)) {
- mobs.spawn(x, y, 10, radius, "rgb(220,50,205)");
+ stabber(x, y, radius = 25 + Math.ceil(Math.random() * 15)) {
+ mobs.spawn(x, y, 4, radius, "rgb(220,50,205)"); //can't have sides above 6 or collision events don't work (probably because of a convex problem)
let me = mob[mob.length - 1];
- me.accelMag = 0.0005 * game.accelScale;
+ me.accelMag = 0.0006 * game.accelScale;
// me.g = 0.0002; //required if using 'gravity'
- me.frictionStatic = 0;
- me.friction = 0;
me.delay = 360 * game.CDScale;
- me.cd = Infinity;
me.spikeVertex = 0;
me.spikeLength = 0;
me.isSpikeGrowing = false;
@@ -958,14 +955,6 @@ const spawn = {
this.checkStatus();
this.attraction();
- const setNoseShape = () => {
- const sub = Vector.sub(this.vertices[this.spikeVertex], this.position)
- const spike = Vector.mult(Vector.normalise(sub), this.radius * this.spikeLength)
- this.vertices[this.spikeVertex].x = this.position.x + spike.x
- this.vertices[this.spikeVertex].y = this.position.y + spike.y
- };
-
-
if (this.isSpikeReset) {
if (this.seePlayer.recall) {
const dist = Vector.sub(this.seePlayer.position, this.position);
@@ -1002,7 +991,9 @@ const spawn = {
this.isSpikeReset = true
}
}
- setNoseShape();
+ const spike = Vector.mult(Vector.normalise(Vector.sub(this.vertices[this.spikeVertex], this.position)), this.radius * this.spikeLength)
+ this.vertices[this.spikeVertex].x = this.position.x + spike.x
+ this.vertices[this.spikeVertex].y = this.position.y + spike.y
}
};
},