diff --git a/js/bullets.js b/js/bullets.js
index 570c906..9977acf 100644
--- a/js/bullets.js
+++ b/js/bullets.js
@@ -1155,8 +1155,8 @@ const b = {
}
},
{
- name: "nail bomb",
- description: "fire a bomb that ejects magnetized nails
nails are attracted to enemy targets
click left mouse again to detonate",
+ name: "magnetic nails",
+ description: "fire a grenade that ejects magnetized nails
nails are attracted to enemy targets",
ammo: 0,
ammoPack: 6,
have: false,
@@ -1169,95 +1169,62 @@ const b = {
b.fireProps(10, mech.crouch ? 42 : 26, dir, me); //cd , speed
b.drawOneBullet(bullet[me].vertices);
- bullet[me].endCycle = Infinity
- bullet[me].endCycle = Infinity
+ bullet[me].endCycle = game.cycle + Math.floor((mech.crouch ? 90 : 40) * b.modBulletsLastLonger);
// bullet[me].restitution = 0.3;
// bullet[me].frictionAir = 0.01;
// bullet[me].friction = 0.15;
// bullet[me].friction = 1;
- bullet[me].inertia = Infinity; //prevents rotation
bullet[me].restitution = 0.5;
bullet[me].onEnd = () => {}
bullet[me].minDmgSpeed = 1;
- bullet[me].isArmed = false;
- bullet[me].isTriggered = false;
bullet[me].do = function () {
//extra gravity for harder arcs
this.force.y += this.mass * 0.002;
- mech.fireCDcycle = mech.cycle + 10 //can't fire until after the explosion
-
- //set armed and sucking status
- if (!this.isArmed && !game.mouseDown) {
- this.isArmed = true
- } else if (this.isArmed && game.mouseDown && !this.isTriggered) {
- this.isTriggered = true;
- this.endCycle = game.cycle + 2;
- }
-
- if (this.isTriggered) {
+ if (game.cycle > this.endCycle - 1) {
if (!mech.isBodiesAsleep) {
- //target nearby mobs
- const targets = []
- for (let i = 0, len = mob.length; i < len; i++) {
- if (
- Matter.Query.ray(map, this.position, mob[i].position).length === 0 &&
- Matter.Query.ray(body, this.position, mob[i].position).length === 0
- ) {
- targets.push(mob[i].position)
- }
- }
- for (let i = 0; i < 4; i++) {
- const SPEED = 35 + 20 * Math.random()
- if (Math.random() < 0.5 && targets.length > 0) { // aim near a random target
- const SPREAD = 100
- const INDEX = Math.floor(Math.random() * targets.length)
- const WHERE = {
- x: targets[INDEX].x + SPREAD * Math.random(),
- y: targets[INDEX].y + SPREAD * Math.random()
+ for (let i = 0; i < 12; i++) {
+ //target nearby mobs
+ const targets = []
+ for (let i = 0, len = mob.length; i < len; i++) {
+ const sub = Matter.Vector.sub(this.position, mob[i].position);
+ const dist = Matter.Vector.magnitude(sub);
+ if (dist < 1500 && Matter.Query.ray(map, this.position, mob[i].position).length === 0) {
+ targets.push(mob[i].position)
}
- needle(this.position, Matter.Vector.mult(Matter.Vector.normalise(Matter.Vector.sub(WHERE, this.position)), SPEED))
- } else { // aim in random direction
- const ANGLE = 2 * Math.PI * Math.random()
- needle(this.position, {
- x: SPEED * Math.cos(ANGLE),
- y: SPEED * Math.sin(ANGLE)
- })
+ }
+ for (let i = 0; i < 1; i++) {
+ const SPEED = 35 + 20 * Math.random()
+ if (targets.length > 0) { // aim near a random target
+ const SPREAD = 100
+ const INDEX = Math.floor(Math.random() * targets.length)
+ const WHERE = {
+ x: targets[INDEX].x + SPREAD * (Math.random() - 0.5),
+ y: targets[INDEX].y + SPREAD * (Math.random() - 0.5)
+ }
+ needle(this.position, Matter.Vector.mult(Matter.Vector.normalise(Matter.Vector.sub(WHERE, this.position)), SPEED))
+ } else { // aim in random direction
+ const ANGLE = 2 * Math.PI * Math.random()
+ needle(this.position, {
+ x: SPEED * Math.cos(ANGLE),
+ y: SPEED * Math.sin(ANGLE)
+ })
+ }
+ }
+
+ function needle(pos, velocity) {
+ const me = bullet.length;
+ bullet[me] = Bodies.rectangle(pos.x, pos.y, 23 * b.modBulletSize, 2 * b.modBulletSize, b.fireAttributes(dir));
+ Matter.Body.setVelocity(bullet[me], velocity);
+
+ Matter.Body.setAngle(bullet[me], Math.atan2(velocity.y, velocity.x))
+ World.add(engine.world, bullet[me]); //add bullet to world
+ bullet[me].endCycle = game.cycle + 45 + Math.floor(15 * Math.random());
+ bullet[me].dmg = 1.1;
+ bullet[me].category = 0x010000
+ bullet[me].mask = 0x011011
+ bullet[me].do = function () {};
}
}
-
- function needle(pos, velocity) {
- const me = bullet.length;
- bullet[me] = Bodies.rectangle(pos.x, pos.y, 23 * b.modBulletSize, 2 * b.modBulletSize, b.fireAttributes(dir));
- Matter.Body.setVelocity(bullet[me], velocity);
-
- Matter.Body.setAngle(bullet[me], Math.atan2(velocity.y, velocity.x))
- World.add(engine.world, bullet[me]); //add bullet to world
- bullet[me].endCycle = game.cycle + 45 + Math.floor(15 * Math.random());
- bullet[me].dmg = 1.1;
- bullet[me].category = 0x010000
- bullet[me].mask = 0x011011
- bullet[me].do = function () {};
- }
- }
- } else {
- // flashing lights to show armed
- if (!(game.cycle % 10)) {
- if (this.isFlashOn) {
- this.isFlashOn = false;
- } else {
- this.isFlashOn = true;
- }
- }
- if (this.isFlashOn) {
- ctx.fillStyle = "#000";
- ctx.beginPath();
- ctx.arc(this.position.x, this.position.y, this.radius, 0, 2 * Math.PI);
- ctx.fill();
- //draw clock on timer
- ctx.fillStyle = "#83f";
- ctx.beginPath();
- ctx.arc(this.position.x, this.position.y, this.radius * 0.3, 0, 2 * Math.PI);
- ctx.fill();
}
}
}