input.down alt fire, not crouch

gun alt fire is determined by the down key not the player crouch state
  (so you can control alt fire when in the air or stuck in a tunnel)
  I did this with text replace, so it could produce some bugs

harpoon
  automatically uses power ups that return to player
  will aim at harder to hit targets, and possible miss
  returns extra fast if it is far from the player
  bullets last a bit longer so they don't despawn early
  cd on miss fire lowered to 1.5s (was 3s)

bugs fixes
This commit is contained in:
landgreen
2021-09-14 05:46:52 -07:00
parent a1b062e2a4
commit 8cf4197219
5 changed files with 110 additions and 81 deletions

BIN
.DS_Store vendored

Binary file not shown.

View File

@@ -82,7 +82,7 @@ const b = {
}, },
fireWithAmmo() { //triggers after firing when you have ammo fireWithAmmo() { //triggers after firing when you have ammo
b.guns[b.activeGun].fire(); b.guns[b.activeGun].fire();
if (tech.isCrouchAmmo && m.crouch) { if (tech.isCrouchAmmo && input.down) {
if (tech.isCrouchAmmo % 2) { if (tech.isCrouchAmmo % 2) {
b.guns[b.activeGun].ammo--; b.guns[b.activeGun].ammo--;
simulation.updateGunHUD(); simulation.updateGunHUD();
@@ -103,7 +103,7 @@ const b = {
} }
}, },
refundAmmo() { //triggers after firing when you removed ammo for a gun, but didn't need to (like a rail gun misfire) refundAmmo() { //triggers after firing when you removed ammo for a gun, but didn't need to (like a rail gun misfire)
if (tech.isCrouchAmmo && m.crouch) { if (tech.isCrouchAmmo && input.down) {
tech.isCrouchAmmo-- tech.isCrouchAmmo--
if ((tech.isCrouchAmmo) % 2) { if ((tech.isCrouchAmmo) % 2) {
b.guns[b.activeGun].ammo++; b.guns[b.activeGun].ammo++;
@@ -732,12 +732,12 @@ const b = {
bullet[me].beforeDmg = function() { bullet[me].beforeDmg = function() {
this.endCycle = 0; //bullet ends cycle after doing damage //this also triggers explosion this.endCycle = 0; //bullet ends cycle after doing damage //this also triggers explosion
}; };
speed = m.crouch ? 43 : 32 speed = input.down ? 43 : 32
Matter.Body.setVelocity(bullet[me], { Matter.Body.setVelocity(bullet[me], {
x: m.Vx / 2 + speed * Math.cos(angle), x: m.Vx / 2 + speed * Math.cos(angle),
y: m.Vy / 2 + speed * Math.sin(angle) y: m.Vy / 2 + speed * Math.sin(angle)
}); });
bullet[me].endCycle = simulation.cycle + Math.floor(m.crouch ? 120 : 80); bullet[me].endCycle = simulation.cycle + Math.floor(input.down ? 120 : 80);
bullet[me].restitution = 0.4; bullet[me].restitution = 0.4;
bullet[me].do = function() { bullet[me].do = function() {
this.force.y += this.mass * 0.0025; //extra gravity for harder arcs this.force.y += this.mass * 0.0025; //extra gravity for harder arcs
@@ -757,7 +757,7 @@ const b = {
bullet[me].beforeDmg = function() { bullet[me].beforeDmg = function() {
this.endCycle = 0; //bullet ends cycle after doing damage //this also triggers explosion this.endCycle = 0; //bullet ends cycle after doing damage //this also triggers explosion
}; };
speed = m.crouch ? 46 : 32 speed = input.down ? 46 : 32
Matter.Body.setVelocity(bullet[me], { Matter.Body.setVelocity(bullet[me], {
x: m.Vx / 2 + speed * Math.cos(angle), x: m.Vx / 2 + speed * Math.cos(angle),
y: m.Vy / 2 + speed * Math.sin(angle) y: m.Vy / 2 + speed * Math.sin(angle)
@@ -792,7 +792,7 @@ const b = {
bullet[me].beforeDmg = function() { bullet[me].beforeDmg = function() {
this.endCycle = 0; //bullet ends cycle after doing damage //this also triggers explosion this.endCycle = 0; //bullet ends cycle after doing damage //this also triggers explosion
}; };
speed = m.crouch ? 46 : 32 speed = input.down ? 46 : 32
Matter.Body.setVelocity(bullet[me], { Matter.Body.setVelocity(bullet[me], {
x: m.Vx / 2 + speed * Math.cos(angle), x: m.Vx / 2 + speed * Math.cos(angle),
y: m.Vy / 2 + speed * Math.sin(angle) y: m.Vy / 2 + speed * Math.sin(angle)
@@ -917,7 +917,7 @@ const b = {
}; };
speed = 35 speed = 35
bullet[me].endCycle = simulation.cycle + 70; bullet[me].endCycle = simulation.cycle + 70;
if (m.crouch) { if (input.down) {
speed += 9 speed += 9
bullet[me].endCycle += 20; bullet[me].endCycle += 20;
} }
@@ -931,7 +931,7 @@ const b = {
grenadeNeutron = function(where = { x: m.pos.x + 30 * Math.cos(m.angle), y: m.pos.y + 30 * Math.sin(m.angle) }, angle = m.angle, size = 1) { grenadeNeutron = function(where = { x: m.pos.x + 30 * Math.cos(m.angle), y: m.pos.y + 30 * Math.sin(m.angle) }, angle = m.angle, size = 1) {
const me = bullet.length; const me = bullet.length;
bullet[me] = Bodies.polygon(where.x, where.y, 10, 4, b.fireAttributes(angle, false)); bullet[me] = Bodies.polygon(where.x, where.y, 10, 4, b.fireAttributes(angle, false));
b.fireProps((m.crouch ? 45 : 25) / Math.pow(0.93, tech.missileCount), m.crouch ? 35 : 20, angle, me); //cd , speed b.fireProps((input.down ? 45 : 25) / Math.pow(0.93, tech.missileCount), input.down ? 35 : 20, angle, me); //cd , speed
Matter.Body.setDensity(bullet[me], 0.000001); Matter.Body.setDensity(bullet[me], 0.000001);
bullet[me].endCycle = Infinity; bullet[me].endCycle = Infinity;
bullet[me].frictionAir = 0; bullet[me].frictionAir = 0;
@@ -949,7 +949,7 @@ const b = {
const SCALE = 2 const SCALE = 2
Matter.Body.scale(bullet[me], SCALE, SCALE); Matter.Body.scale(bullet[me], SCALE, SCALE);
speed = m.crouch ? 25 : 15 speed = input.down ? 25 : 15
Matter.Body.setVelocity(bullet[me], { Matter.Body.setVelocity(bullet[me], {
x: m.Vx / 2 + speed * Math.cos(angle), x: m.Vx / 2 + speed * Math.cos(angle),
y: m.Vy / 2 + speed * Math.sin(angle) y: m.Vy / 2 + speed * Math.sin(angle)
@@ -1110,8 +1110,6 @@ const b = {
}, },
harpoon(where, target, angle = m.angle, scale = 1, isReturn = false, ropeLength = 15) { harpoon(where, target, angle = m.angle, scale = 1, isReturn = false, ropeLength = 15) {
const me = bullet.length; const me = bullet.length;
// let vector = "-40 2 -40 -2 50 -3 30 2" //"-40 2 -40 -2 30 -2 50 0 30 2"
// if (scale !== 1) vector = `${-40*scale} 2 ${-40*scale} -2 ${50*scale} -3 ${30*scale} 2` //`${-40*scale} 2 ${-40*scale} -2 ${30*scale} -2 ${50*scale} 0 ${30*scale} 2`
bullet[me] = Bodies.fromVertices(where.x, where.y, [{ x: -40 * scale, y: 2, index: 0, isInternal: false }, { x: -40 * scale, y: -2, index: 1, isInternal: false }, { x: 50 * scale, y: -3, index: 3, isInternal: false }, { x: 30 * scale, y: 2, index: 4, isInternal: false }], { bullet[me] = Bodies.fromVertices(where.x, where.y, [{ x: -40 * scale, y: 2, index: 0, isInternal: false }, { x: -40 * scale, y: -2, index: 1, isInternal: false }, { x: 50 * scale, y: -3, index: 3, isInternal: false }, { x: 30 * scale, y: 2, index: 4, isInternal: false }], {
cycle: 0, cycle: 0,
angle: angle, angle: angle,
@@ -1123,7 +1121,7 @@ const b = {
drawStringFlip: (Math.round(Math.random()) ? 1 : -1), drawStringFlip: (Math.round(Math.random()) ? 1 : -1),
dmg: 0, //damage done in addition to the damage from momentum dmg: 0, //damage done in addition to the damage from momentum
classType: "bullet", classType: "bullet",
endCycle: simulation.cycle + ropeLength * 2.5, endCycle: simulation.cycle + ropeLength * 2.5 + 15,
collisionFilter: { collisionFilter: {
category: cat.bullet, category: cat.bullet,
mask: tech.isNeedleShieldPierce ? cat.map | cat.body | cat.mob | cat.mobBullet : cat.map | cat.body | cat.mob | cat.mobBullet | cat.mobShield, mask: tech.isNeedleShieldPierce ? cat.map | cat.body | cat.mob | cat.mobBullet : cat.map | cat.body | cat.mob | cat.mobBullet | cat.mobShield,
@@ -1132,7 +1130,6 @@ const b = {
lookFrequency: Math.floor(7 + Math.random() * 3), lookFrequency: Math.floor(7 + Math.random() * 3),
density: 0.005, //0.001 is normal density: 0.005, //0.001 is normal
beforeDmg(who) { beforeDmg(who) {
// console.log(Vector.magnitude(Vector.sub(this.position, m.pos)))
if (tech.isNeedleShieldPierce && who.isShielded) { //disable shields if (tech.isNeedleShieldPierce && who.isShielded) { //disable shields
who.isShielded = false who.isShielded = false
requestAnimationFrame(() => { who.isShielded = true }); requestAnimationFrame(() => { who.isShielded = true });
@@ -1175,7 +1172,7 @@ const b = {
this.endCycle = 0; this.endCycle = 0;
if (m.cycle + 25 * b.fireCDscale < m.fireCDcycle) m.fireCDcycle = m.cycle + 25 * b.fireCDscale //lower cd to 25 if it is above 25 if (m.cycle + 25 * b.fireCDscale < m.fireCDcycle) m.fireCDcycle = m.cycle + 25 * b.fireCDscale //lower cd to 25 if it is above 25
//recoil on catching //recoil on catching
const momentum = Vector.mult(Vector.sub(this.velocity, player.velocity), this.mass * (m.crouch ? 0.0001 : 0.0002)) const momentum = Vector.mult(Vector.sub(this.velocity, player.velocity), this.mass * (input.down ? 0.0001 : 0.0002))
player.force.x += momentum.x player.force.x += momentum.x
player.force.y += momentum.y player.force.y += momentum.y
// refund ammo // refund ammo
@@ -1187,13 +1184,31 @@ const b = {
} }
} }
// if you grabbed a power up, stop it near the player // if you grabbed a power up, stop it near the player
for (let i = 0, len = powerUp.length; i < len; ++i) { //near power up // for (let i = 0, len = powerUp.length; i < len; ++i) { //near power up
if (Vector.magnitudeSquared(Vector.sub(this.position, powerUp[i].position)) < 6000) { // if (Vector.magnitudeSquared(Vector.sub(this.position, powerUp[i].position)) < 6000) {
Matter.Body.setVelocity(powerUp[i], { x: 0, y: -2 }) // Matter.Body.setVelocity(powerUp[i], { x: 0, y: -2 })
// Matter.Body.setPosition(powerUp[i], this.position) // break
break // }
// }
for (let i = 0, len = powerUp.length; i < len; ++i) {
if ( //use power up if it is close enough
Vector.magnitudeSquared(Vector.sub(this.position, powerUp[i].position)) < 6000 &&
!simulation.isChoosing &&
(powerUp[i].name !== "heal" || m.health !== m.maxHealth || tech.isOverHeal)
) {
powerUps.onPickUp(powerUp[i]);
Matter.Body.setVelocity(player, { //player knock back, after grabbing power up
x: player.velocity.x + powerUp[i].velocity.x / player.mass * 1,
y: player.velocity.y + powerUp[i].velocity.y / player.mass * 1
});
powerUp[i].effect();
Matter.Composite.remove(engine.world, powerUp[i]);
powerUp.splice(i, 1);
break; //because the array order is messed up after splice
} }
} }
} else { } else {
let isPulling = false let isPulling = false
for (let i = 0, len = powerUp.length; i < len; ++i) { //near power up for (let i = 0, len = powerUp.length; i < len; ++i) { //near power up
@@ -1202,11 +1217,13 @@ const b = {
Matter.Body.setPosition(powerUp[i], this.vertices[2]) Matter.Body.setPosition(powerUp[i], this.vertices[2])
isPulling = true isPulling = true
this.endCycle += 0.5 //it pulls back slower, so this prevents it from ending early this.endCycle += 0.5 //it pulls back slower, so this prevents it from ending early
break break //just pull 1 power up if possible
} }
} }
if (m.energy > 0.005) m.energy -= 0.005 if (m.energy > 0.005) m.energy -= 0.005
const returnForce = Vector.mult(Vector.normalise(Vector.sub(this.position, m.pos)), this.thrustMag * this.mass * (isPulling ? 0.5 : 1)) const sub = Vector.sub(this.position, m.pos)
const rangeScale = 1 + 0.000001 * Vector.magnitude(sub) * Vector.magnitude(sub) //return faster when far from player
const returnForce = Vector.mult(Vector.normalise(sub), rangeScale * this.thrustMag * this.mass * (isPulling ? 0.6 : 1))
this.force.x -= returnForce.x this.force.x -= returnForce.x
this.force.y -= returnForce.y this.force.y -= returnForce.y
this.drawString() this.drawString()
@@ -1467,7 +1484,7 @@ const b = {
} }
} }
this.cycle++ this.cycle++
const wiggleMag = (m.crouch ? 6 : 12) * Math.cos(simulation.cycle * 0.09) const wiggleMag = (input.down ? 6 : 12) * Math.cos(simulation.cycle * 0.09)
const wiggle = Vector.mult(transverse, wiggleMag * Math.cos(this.cycle * 0.36)) //+ wiggleMag * Math.cos(simulation.cycle * 0.3)) const wiggle = Vector.mult(transverse, wiggleMag * Math.cos(this.cycle * 0.36)) //+ wiggleMag * Math.cos(simulation.cycle * 0.3))
const velocity = Vector.mult(player.velocity, 0.3) //move with player const velocity = Vector.mult(player.velocity, 0.3) //move with player
Matter.Body.setPosition(this, Vector.add(velocity, Vector.add(this.position, wiggle))) Matter.Body.setPosition(this, Vector.add(velocity, Vector.add(this.position, wiggle)))
@@ -1499,7 +1516,7 @@ const b = {
//calculate laser collision //calculate laser collision
let best; let best;
let range = tech.isPlasmaRange * (120 + (m.crouch ? 400 : 300) * Math.sqrt(Math.random())) //+ 100 * Math.sin(m.cycle * 0.3); let range = tech.isPlasmaRange * (120 + (input.down ? 400 : 300) * Math.sqrt(Math.random())) //+ 100 * Math.sin(m.cycle * 0.3);
// const dir = m.angle // + 0.04 * (Math.random() - 0.5) // const dir = m.angle // + 0.04 * (Math.random() - 0.5)
const path = [{ const path = [{
x: m.pos.x + 20 * Math.cos(m.angle), x: m.pos.x + 20 * Math.cos(m.angle),
@@ -3379,7 +3396,7 @@ const b = {
this.cd = simulation.cycle + this.delay; this.cd = simulation.cycle + this.delay;
target = Vector.add(mob[i].position, Vector.mult(mob[i].velocity, Math.sqrt(dist2) / 60)) target = Vector.add(mob[i].position, Vector.mult(mob[i].velocity, Math.sqrt(dist2) / 60))
const radius = 6 + 7 * Math.random() const radius = 6 + 7 * Math.random()
const SPEED = 29 - radius * 0.5; //(m.crouch ? 32 : 20) - radius * 0.7; const SPEED = 29 - radius * 0.5; //(input.down ? 32 : 20) - radius * 0.7;
const velocity = Vector.mult(Vector.normalise(Vector.sub(target, this.position)), SPEED) const velocity = Vector.mult(Vector.normalise(Vector.sub(target, this.position)), SPEED)
b.foam(this.position, velocity, radius + 7 * this.isUpgraded) b.foam(this.position, velocity, radius + 7 * this.isUpgraded)
break; break;
@@ -3875,10 +3892,10 @@ const b = {
this.nextFireCycle = m.cycle + CD * b.fireCDscale //predict next fire cycle if the fire button is held down this.nextFireCycle = m.cycle + CD * b.fireCDscale //predict next fire cycle if the fire button is held down
m.fireCDcycle = m.cycle + Math.floor(CD * b.fireCDscale); // cool down m.fireCDcycle = m.cycle + Math.floor(CD * b.fireCDscale); // cool down
this.baseFire(m.angle + (Math.random() - 0.5) * (Math.random() - 0.5) * (m.crouch ? 1.35 : 3.2) / CD) this.baseFire(m.angle + (Math.random() - 0.5) * (Math.random() - 0.5) * (input.down ? 1.35 : 3.2) / CD)
}, },
fireNeedles() { fireNeedles() {
if (m.crouch) { if (input.down) {
m.fireCDcycle = m.cycle + 38 * b.fireCDscale; // cool down m.fireCDcycle = m.cycle + 38 * b.fireCDscale; // cool down
b.needle() b.needle()
@@ -3907,7 +3924,7 @@ const b = {
} }
}, },
fireRivets() { fireRivets() {
m.fireCDcycle = m.cycle + Math.floor((m.crouch ? 25 : 17) * b.fireCDscale); // cool down m.fireCDcycle = m.cycle + Math.floor((input.down ? 25 : 17) * b.fireCDscale); // cool down
const me = bullet.length; const me = bullet.length;
const size = tech.rivetSize * 8 const size = tech.rivetSize * 8
@@ -3915,7 +3932,7 @@ const b = {
bullet[me].dmg = tech.isNailRadiation ? 0 : 2.75 bullet[me].dmg = tech.isNailRadiation ? 0 : 2.75
Matter.Body.setDensity(bullet[me], 0.002); Matter.Body.setDensity(bullet[me], 0.002);
Composite.add(engine.world, bullet[me]); //add bullet to world Composite.add(engine.world, bullet[me]); //add bullet to world
const SPEED = m.crouch ? 55 : 44 const SPEED = input.down ? 55 : 44
Matter.Body.setVelocity(bullet[me], { Matter.Body.setVelocity(bullet[me], {
x: SPEED * Math.cos(m.angle), x: SPEED * Math.cos(m.angle),
y: SPEED * Math.sin(m.angle) y: SPEED * Math.sin(m.angle)
@@ -3955,11 +3972,11 @@ const b = {
// this.nextFireCycle = m.cycle + CD * b.fireCDscale //predict next fire cycle if the fire button is held down // this.nextFireCycle = m.cycle + CD * b.fireCDscale //predict next fire cycle if the fire button is held down
// m.fireCDcycle = m.cycle + Math.floor(CD * b.fireCDscale); // cool down // m.fireCDcycle = m.cycle + Math.floor(CD * b.fireCDscale); // cool down
// this.baseFire(m.angle + (Math.random() - 0.5) * (Math.random() - 0.5) * (m.crouch ? 1.35 : 3.2) / CD) // this.baseFire(m.angle + (Math.random() - 0.5) * (Math.random() - 0.5) * (input.down ? 1.35 : 3.2) / CD)
// }, // },
fireInstantFireRate() { fireInstantFireRate() {
m.fireCDcycle = m.cycle + Math.floor(2 * b.fireCDscale); // cool down m.fireCDcycle = m.cycle + Math.floor(2 * b.fireCDscale); // cool down
this.baseFire(m.angle + (Math.random() - 0.5) * (Math.random() - 0.5) * (m.crouch ? 1.35 : 3.2) / 2) this.baseFire(m.angle + (Math.random() - 0.5) * (Math.random() - 0.5) * (input.down ? 1.35 : 3.2) / 2)
}, },
baseFire(angle) { baseFire(angle) {
const speed = 30 + 6 * Math.random() const speed = 30 + 6 * Math.random()
@@ -3996,7 +4013,7 @@ const b = {
do() {}, do() {},
fire() { fire() {
let knock, spread let knock, spread
if (m.crouch) { if (input.down) {
spread = 0.65 spread = 0.65
m.fireCDcycle = m.cycle + Math.floor(60 * b.fireCDscale) // cool down m.fireCDcycle = m.cycle + Math.floor(60 * b.fireCDscale) // cool down
if (tech.isShotgunImmune && m.immuneCycle < m.cycle + Math.floor(60 * b.fireCDscale)) m.immuneCycle = m.cycle + Math.floor(60 * b.fireCDscale); //player is immune to damage for 30 cycles if (tech.isShotgunImmune && m.immuneCycle < m.cycle + Math.floor(60 * b.fireCDscale)) m.immuneCycle = m.cycle + Math.floor(60 * b.fireCDscale); //player is immune to damage for 30 cycles
@@ -4029,7 +4046,7 @@ const b = {
Matter.Body.setDensity(bullet[me], 0.007 * (tech.isShotgunReversed ? 1.6 : 1)); Matter.Body.setDensity(bullet[me], 0.007 * (tech.isShotgunReversed ? 1.6 : 1));
Composite.add(engine.world, bullet[me]); //add bullet to world Composite.add(engine.world, bullet[me]); //add bullet to world
const SPEED = (m.crouch ? 45 : 35) + Math.random() * 6 const SPEED = (input.down ? 45 : 35) + Math.random() * 6
Matter.Body.setVelocity(bullet[me], { Matter.Body.setVelocity(bullet[me], {
x: SPEED * Math.cos(dir), x: SPEED * Math.cos(dir),
y: SPEED * Math.sin(dir) y: SPEED * Math.sin(dir)
@@ -4075,9 +4092,9 @@ const b = {
} }
} else if (tech.isIncendiary) { } else if (tech.isIncendiary) {
spread *= 0.15 spread *= 0.15
const END = Math.floor(m.crouch ? 10 : 7); const END = Math.floor(input.down ? 10 : 7);
const totalBullets = 10 const totalBullets = 10
const angleStep = (m.crouch ? 0.4 : 1.3) / totalBullets const angleStep = (input.down ? 0.4 : 1.3) / totalBullets
let dir = m.angle - angleStep * totalBullets / 2; let dir = m.angle - angleStep * totalBullets / 2;
for (let i = 0; i < totalBullets; i++) { //5 -> 7 for (let i = 0; i < totalBullets; i++) { //5 -> 7
dir += angleStep dir += angleStep
@@ -4103,7 +4120,7 @@ const b = {
} else if (tech.isNailShot) { } else if (tech.isNailShot) {
spread *= 0.65 spread *= 0.65
const dmg = 2 * (tech.isShotgunReversed ? 1.6 : 1) const dmg = 2 * (tech.isShotgunReversed ? 1.6 : 1)
if (m.crouch) { if (input.down) {
for (let i = 0; i < 17; i++) { for (let i = 0; i < 17; i++) {
speed = 38 + 15 * Math.random() speed = 38 + 15 * Math.random()
const dir = m.angle + (Math.random() - 0.5) * spread const dir = m.angle + (Math.random() - 0.5) * spread
@@ -4135,12 +4152,12 @@ const b = {
x: m.pos.x + 35 * Math.cos(m.angle), x: m.pos.x + 35 * Math.cos(m.angle),
y: m.pos.y + 35 * Math.sin(m.angle) y: m.pos.y + 35 * Math.sin(m.angle)
} }
const spread = (m.crouch ? 0.04 : 0.08) const spread = (input.down ? 0.04 : 0.08)
const number = 3 * (tech.isShotgunReversed ? 1.6 : 1) + Math.random() const number = 3 * (tech.isShotgunReversed ? 1.6 : 1) + Math.random()
let angle = m.angle - (number - 1) * spread * 0.5 let angle = m.angle - (number - 1) * spread * 0.5
for (let i = 0; i < number; i++) { for (let i = 0; i < number; i++) {
b.worm(where) b.worm(where)
const SPEED = (16 + 20 * m.crouch) * (1 + 0.15 * Math.random()) const SPEED = (16 + 20 * input.down) * (1 + 0.15 * Math.random())
Matter.Body.setVelocity(bullet[bullet.length - 1], { Matter.Body.setVelocity(bullet[bullet.length - 1], {
x: SPEED * Math.cos(angle), x: SPEED * Math.cos(angle),
y: SPEED * Math.sin(angle) y: SPEED * Math.sin(angle)
@@ -4148,13 +4165,13 @@ const b = {
angle += spread angle += spread
} }
} else if (tech.isIceShot) { } else if (tech.isIceShot) {
const spread = (m.crouch ? 0.7 : 1.2) const spread = (input.down ? 0.7 : 1.2)
for (let i = 0, len = 16 * (tech.isShotgunReversed ? 1.6 : 1); i < len; i++) { for (let i = 0, len = 16 * (tech.isShotgunReversed ? 1.6 : 1); i < len; i++) {
// iceIX(speed = 0, dir = m.angle + Math.PI * 2 * Math.random(), where = { x: m.pos.x + 30 * Math.cos(m.angle), y: m.pos.y + 30 * Math.sin(m.angle) }) { // iceIX(speed = 0, dir = m.angle + Math.PI * 2 * Math.random(), where = { x: m.pos.x + 30 * Math.cos(m.angle), y: m.pos.y + 30 * Math.sin(m.angle) }) {
b.iceIX(25 + 20 * Math.random(), m.angle + spread * (Math.random() - 0.5)) b.iceIX(25 + 20 * Math.random(), m.angle + spread * (Math.random() - 0.5))
} }
} else if (tech.isFoamShot) { } else if (tech.isFoamShot) {
const spread = (m.crouch ? 0.35 : 0.7) const spread = (input.down ? 0.35 : 0.7)
const where = { const where = {
x: m.pos.x + 25 * Math.cos(m.angle), x: m.pos.x + 25 * Math.cos(m.angle),
y: m.pos.y + 25 * Math.sin(m.angle) y: m.pos.y + 25 * Math.sin(m.angle)
@@ -4167,7 +4184,7 @@ const b = {
} }
} else if (tech.isNeedleShot) { } else if (tech.isNeedleShot) {
const number = 11 * (tech.isShotgunReversed ? 1.6 : 1) const number = 11 * (tech.isShotgunReversed ? 1.6 : 1)
const spread = (m.crouch ? 0.03 : 0.05) const spread = (input.down ? 0.03 : 0.05)
let angle = m.angle - (number - 1) * spread * 0.5 let angle = m.angle - (number - 1) * spread * 0.5
for (let i = 0; i < number; i++) { for (let i = 0; i < number; i++) {
b.needle(angle) b.needle(angle)
@@ -4208,8 +4225,8 @@ const b = {
// num: 5, // num: 5,
do() {}, do() {},
fireOne() { fireOne() {
const SPEED = m.crouch ? 43 : 36 const SPEED = input.down ? 43 : 36
m.fireCDcycle = m.cycle + Math.floor((m.crouch ? 23 : 15) * b.fireCDscale); // cool down m.fireCDcycle = m.cycle + Math.floor((input.down ? 23 : 15) * b.fireCDscale); // cool down
let dir = m.angle let dir = m.angle
const me = bullet.length; const me = bullet.length;
bullet[me] = Bodies.polygon(m.pos.x + 30 * Math.cos(m.angle), m.pos.y + 30 * Math.sin(m.angle), 12, 21 * tech.bulletSize, b.fireAttributes(dir, false)); bullet[me] = Bodies.polygon(m.pos.x + 30 * Math.cos(m.angle), m.pos.y + 30 * Math.sin(m.angle), 12, 21 * tech.bulletSize, b.fireAttributes(dir, false));
@@ -4235,9 +4252,9 @@ const b = {
}; };
}, },
fireMulti() { fireMulti() {
const SPEED = m.crouch ? 43 : 36 const SPEED = input.down ? 43 : 36
m.fireCDcycle = m.cycle + Math.floor((m.crouch ? 23 : 15) * b.fireCDscale); // cool down m.fireCDcycle = m.cycle + Math.floor((input.down ? 23 : 15) * b.fireCDscale); // cool down
const SPREAD = m.crouch ? 0.08 : 0.13 const SPREAD = input.down ? 0.08 : 0.13
const num = tech.missileCount + 2 const num = tech.missileCount + 2
let dir = m.angle - SPREAD * (num - 1) / 2; let dir = m.angle - SPREAD * (num - 1) / 2;
for (let i = 0; i < num; i++) { for (let i = 0; i < num; i++) {
@@ -4266,12 +4283,12 @@ const b = {
} }
}, },
fireQueue() { fireQueue() {
const SPEED = m.crouch ? 43 : 36 const SPEED = input.down ? 43 : 36
const dir = m.angle const dir = m.angle
const x = m.pos.x const x = m.pos.x
const y = m.pos.y const y = m.pos.y
const num = tech.missileCount + 2 const num = tech.missileCount + 2
const delay = Math.floor((m.crouch ? 18 : 12) * b.fireCDscale) const delay = Math.floor((input.down ? 18 : 12) * b.fireCDscale)
m.fireCDcycle = m.cycle + delay; // cool down m.fireCDcycle = m.cycle + delay; // cool down
const fireBall = () => { const fireBall = () => {
@@ -4418,7 +4435,7 @@ const b = {
ctx.stroke(); ctx.stroke();
}, },
fire360Longitudinal() { fire360Longitudinal() {
m.fireCDcycle = m.cycle + Math.floor((m.crouch ? 3 : 8) * b.fireCDscale); // cool down m.fireCDcycle = m.cycle + Math.floor((input.down ? 3 : 8) * b.fireCDscale); // cool down
this.waves.push({ this.waves.push({
position: { x: m.pos.x, y: m.pos.y, }, position: { x: m.pos.x, y: m.pos.y, },
radius: 25, radius: 25,
@@ -4499,8 +4516,8 @@ const b = {
ctx.stroke(); ctx.stroke();
}, },
fireLongitudinal() { fireLongitudinal() {
m.fireCDcycle = m.cycle + Math.floor((m.crouch ? 3 : 8) * b.fireCDscale); // cool down m.fireCDcycle = m.cycle + Math.floor((input.down ? 3 : 8) * b.fireCDscale); // cool down
const halfArc = m.crouch ? 0.0785 : 0.275 //6.28 is a full circle, but these arcs needs to stay small because we are using small angle linear approximation, for collisions const halfArc = input.down ? 0.0785 : 0.275 //6.28 is a full circle, but these arcs needs to stay small because we are using small angle linear approximation, for collisions
this.waves.push({ this.waves.push({
position: { position: {
x: m.pos.x + 25 * Math.cos(m.angle), x: m.pos.x + 25 * Math.cos(m.angle),
@@ -4531,7 +4548,7 @@ const b = {
inertia: Infinity, inertia: Infinity,
frictionAir: 0, frictionAir: 0,
slow: 0, slow: 0,
amplitude: (m.crouch ? 5 : 10) * ((this.wavePacketCycle % 2) ? -1 : 1) * Math.sin((this.wavePacketCycle + 1) * 0.088), //0.0968 //0.1012 //0.11 //0.088 //shorten wave packet amplitude: (input.down ? 5 : 10) * ((this.wavePacketCycle % 2) ? -1 : 1) * Math.sin((this.wavePacketCycle + 1) * 0.088), //0.0968 //0.1012 //0.11 //0.088 //shorten wave packet
minDmgSpeed: 0, minDmgSpeed: 0,
dmg: b.dmgScale * tech.waveBeamDamage * tech.wavePacketDamage, //also control damage when you divide by mob.mass dmg: b.dmgScale * tech.waveBeamDamage * tech.wavePacketDamage, //also control damage when you divide by mob.mass
classType: "bullet", classType: "bullet",
@@ -4634,7 +4651,7 @@ const b = {
do() {}, do() {},
fire() { fire() {
const countReduction = Math.pow(0.9, tech.missileCount) const countReduction = Math.pow(0.9, tech.missileCount)
if (m.crouch) { if (input.down) {
m.fireCDcycle = m.cycle + 10 * b.fireCDscale / countReduction; // cool down m.fireCDcycle = m.cycle + 10 * b.fireCDscale / countReduction; // cool down
// for (let i = 0; i < tech.missileCount; i++) { // for (let i = 0; i < tech.missileCount; i++) {
// b.missile(where, -Math.PI / 2 + 0.2 * (Math.random() - 0.5) * Math.sqrt(tech.missileCount), -2, Math.sqrt(countReduction)) // b.missile(where, -Math.PI / 2 + 0.2 * (Math.random() - 0.5) * Math.sqrt(tech.missileCount), -2, Math.sqrt(countReduction))
@@ -4700,9 +4717,9 @@ const b = {
do() {}, do() {},
fire() { fire() {
const countReduction = Math.pow(0.93, tech.missileCount) const countReduction = Math.pow(0.93, tech.missileCount)
m.fireCDcycle = m.cycle + Math.floor((m.crouch ? 40 : 30) * b.fireCDscale / countReduction); // cool down m.fireCDcycle = m.cycle + Math.floor((input.down ? 40 : 30) * b.fireCDscale / countReduction); // cool down
const where = { x: m.pos.x + 30 * Math.cos(m.angle), y: m.pos.y + 30 * Math.sin(m.angle) } const where = { x: m.pos.x + 30 * Math.cos(m.angle), y: m.pos.y + 30 * Math.sin(m.angle) }
const SPREAD = m.crouch ? 0.12 : 0.2 const SPREAD = input.down ? 0.12 : 0.2
let angle = m.angle - SPREAD * (tech.missileCount - 1) / 2; let angle = m.angle - SPREAD * (tech.missileCount - 1) / 2;
for (let i = 0; i < tech.missileCount; i++) { for (let i = 0; i < tech.missileCount; i++) {
b.grenade(where, angle, countReduction) //function(where = { x: m.pos.x + 30 * Math.cos(m.angle), y: m.pos.y + 30 * Math.sin(m.angle) }, angle = m.angle, size = 1) b.grenade(where, angle, countReduction) //function(where = { x: m.pos.x + 30 * Math.cos(m.angle), y: m.pos.y + 30 * Math.sin(m.angle) }, angle = m.angle, size = 1)
@@ -4717,7 +4734,7 @@ const b = {
have: false, have: false,
do() {}, do() {},
fire() { fire() {
if (m.crouch) { if (input.down) {
if (tech.isLaserMine) { if (tech.isLaserMine) {
const speed = 30 const speed = 30
const velocity = { x: speed * Math.cos(m.angle), y: speed * Math.sin(m.angle) } const velocity = { x: speed * Math.cos(m.angle), y: speed * Math.sin(m.angle) }
@@ -4749,7 +4766,7 @@ const b = {
const me = bullet.length; const me = bullet.length;
const dir = m.angle; const dir = m.angle;
bullet[me] = Bodies.polygon(m.pos.x + 30 * Math.cos(m.angle), m.pos.y + 30 * Math.sin(m.angle), 20, 4.5, b.fireAttributes(dir, false)); bullet[me] = Bodies.polygon(m.pos.x + 30 * Math.cos(m.angle), m.pos.y + 30 * Math.sin(m.angle), 20, 4.5, b.fireAttributes(dir, false));
b.fireProps(m.crouch ? 45 : 25, m.crouch ? 30 : 16, dir, me); //cd , speed b.fireProps(input.down ? 45 : 25, input.down ? 30 : 16, dir, me); //cd , speed
Matter.Body.setDensity(bullet[me], 0.000001); Matter.Body.setDensity(bullet[me], 0.000001);
bullet[me].endCycle = simulation.cycle + 600; bullet[me].endCycle = simulation.cycle + 600;
bullet[me].frictionAir = 0; bullet[me].frictionAir = 0;
@@ -4883,7 +4900,7 @@ const b = {
do() {}, do() {},
fire() { fire() {
if (tech.isDroneRadioactive) { if (tech.isDroneRadioactive) {
if (m.crouch) { if (input.down) {
b.droneRadioactive({ x: m.pos.x + 30 * Math.cos(m.angle) + 10 * (Math.random() - 0.5), y: m.pos.y + 30 * Math.sin(m.angle) + 10 * (Math.random() - 0.5) }, 45) b.droneRadioactive({ x: m.pos.x + 30 * Math.cos(m.angle) + 10 * (Math.random() - 0.5), y: m.pos.y + 30 * Math.sin(m.angle) + 10 * (Math.random() - 0.5) }, 45)
m.fireCDcycle = m.cycle + Math.floor(50 * b.fireCDscale); // cool down m.fireCDcycle = m.cycle + Math.floor(50 * b.fireCDscale); // cool down
} else { } else {
@@ -4891,7 +4908,7 @@ const b = {
m.fireCDcycle = m.cycle + Math.floor(25 * b.fireCDscale); // cool down m.fireCDcycle = m.cycle + Math.floor(25 * b.fireCDscale); // cool down
} }
} else { } else {
if (m.crouch) { if (input.down) {
b.drone({ x: m.pos.x + 30 * Math.cos(m.angle) + 10 * (Math.random() - 0.5), y: m.pos.y + 30 * Math.sin(m.angle) + 10 * (Math.random() - 0.5) }, 55) b.drone({ x: m.pos.x + 30 * Math.cos(m.angle) + 10 * (Math.random() - 0.5), y: m.pos.y + 30 * Math.sin(m.angle) + 10 * (Math.random() - 0.5) }, 55)
m.fireCDcycle = m.cycle + Math.floor(10 * b.fireCDscale); // cool down m.fireCDcycle = m.cycle + Math.floor(10 * b.fireCDscale); // cool down
} else { } else {
@@ -4921,7 +4938,7 @@ const b = {
if (this.isDischarge) { if (this.isDischarge) {
this.charge-- this.charge--
const spread = (m.crouch ? 0.05 : 0.6) * (Math.random() - 0.5) const spread = (input.down ? 0.05 : 0.6) * (Math.random() - 0.5)
const radius = 5 + 8 * Math.random() + (tech.isAmmoFoamSize && this.ammo < 300) * 12 const radius = 5 + 8 * Math.random() + (tech.isAmmoFoamSize && this.ammo < 300) * 12
const SPEED = 18 - radius * 0.4; const SPEED = 18 - radius * 0.4;
const dir = m.angle + 0.15 * (Math.random() - 0.5) const dir = m.angle + 0.15 * (Math.random() - 0.5)
@@ -4984,7 +5001,7 @@ const b = {
const dir = { x: Math.cos(m.angle), y: Math.sin(m.angle) }; //make a vector for the player's direction of length 1; used in dot product const dir = { x: Math.cos(m.angle), y: Math.sin(m.angle) }; //make a vector for the player's direction of length 1; used in dot product
const length = tech.isLargeHarpoon ? 1 + 0.15 * Math.sqrt(this.ammo) : 1 const length = tech.isLargeHarpoon ? 1 + 0.15 * Math.sqrt(this.ammo) : 1
const totalCycles = 8 * (tech.isFilament ? 1 + Math.min(75, this.ammo) / 33 : 1) const totalCycles = 8 * (tech.isFilament ? 1 + Math.min(75, this.ammo) / 33 : 1)
if (m.crouch) { if (input.down) {
for (let i = 0, len = mob.length; i < len; ++i) { for (let i = 0, len = mob.length; i < len; ++i) {
if (mob[i].alive && !mob[i].isBadTarget && Matter.Query.ray(map, m.pos, mob[i].position).length === 0) { if (mob[i].alive && !mob[i].isBadTarget && Matter.Query.ray(map, m.pos, mob[i].position).length === 0) {
const dot = Vector.dot(dir, Vector.normalise(Vector.sub(mob[i].position, m.pos))) //the dot product of diff and dir will return how much over lap between the vectors const dot = Vector.dot(dir, Vector.normalise(Vector.sub(mob[i].position, m.pos))) //the dot product of diff and dir will return how much over lap between the vectors
@@ -4996,7 +5013,7 @@ const b = {
} }
} }
b.harpoon(where, closest.target, m.angle, length, false) b.harpoon(where, closest.target, m.angle, length, false)
m.fireCDcycle = m.cycle + 50 * b.fireCDscale; // cool down m.fireCDcycle = m.cycle + 40 * b.fireCDscale; // cool down
} else if (tech.extraHarpoons) { } else if (tech.extraHarpoons) {
const range = 560 * (tech.isFilament ? 1 + this.ammo / 33 : 1) const range = 560 * (tech.isFilament ? 1 + this.ammo / 33 : 1)
let targetCount = 0 let targetCount = 0
@@ -5004,10 +5021,10 @@ const b = {
if (mob[i].alive && !mob[i].isBadTarget && Matter.Query.ray(map, m.pos, mob[i].position).length === 0) { if (mob[i].alive && !mob[i].isBadTarget && Matter.Query.ray(map, m.pos, mob[i].position).length === 0) {
const dot = Vector.dot(dir, Vector.normalise(Vector.sub(mob[i].position, m.pos))) //the dot product of diff and dir will return how much over lap between the vectors const dot = Vector.dot(dir, Vector.normalise(Vector.sub(mob[i].position, m.pos))) //the dot product of diff and dir will return how much over lap between the vectors
const dist = Vector.magnitude(Vector.sub(where, mob[i].position)) const dist = Vector.magnitude(Vector.sub(where, mob[i].position))
if (dist < range && dot > 0.9) { //target closest mob that player is looking at and isn't too close to target if (dist < range && dot > 0.7) { //target closest mob that player is looking at and isn't too close to target
if (this.ammo > 0) { if (this.ammo > 0) {
this.ammo-- this.ammo--
b.harpoon(where, mob[i], Vector.angle(Vector.sub(where, mob[i].position), { x: 0, y: 0 }), length, true, totalCycles) b.harpoon(where, mob[i], m.angle, length, true, totalCycles) //Vector.angle(Vector.sub(where, mob[i].position), { x: 0, y: 0 })
targetCount++ targetCount++
if (targetCount > tech.extraHarpoons) break if (targetCount > tech.extraHarpoons) break
} }
@@ -5026,16 +5043,16 @@ const b = {
if (mob[i].alive && !mob[i].isBadTarget && Matter.Query.ray(map, m.pos, mob[i].position).length === 0) { if (mob[i].alive && !mob[i].isBadTarget && Matter.Query.ray(map, m.pos, mob[i].position).length === 0) {
const dot = Vector.dot(dir, Vector.normalise(Vector.sub(mob[i].position, m.pos))) //the dot product of diff and dir will return how much over lap between the vectors const dot = Vector.dot(dir, Vector.normalise(Vector.sub(mob[i].position, m.pos))) //the dot product of diff and dir will return how much over lap between the vectors
const dist = Vector.magnitude(Vector.sub(where, mob[i].position)) const dist = Vector.magnitude(Vector.sub(where, mob[i].position))
if (dist < closest.distance && dot > 0.95) { //target closest mob that player is looking at and isn't too close to target if (dist < closest.distance && dot > 0.88) { //target closest mob that player is looking at and isn't too close to target
closest.distance = dist closest.distance = dist
closest.target = mob[i] closest.target = mob[i]
} }
} }
} }
b.harpoon(where, closest.target, m.angle, length, true, totalCycles) b.harpoon(where, closest.target, m.angle, length, true, totalCycles)
m.fireCDcycle = m.cycle + 120 //Infinity; // cool down m.fireCDcycle = m.cycle + 90 //Infinity; // cool down
} }
const recoil = Vector.mult(Vector.normalise(Vector.sub(where, m.pos)), m.crouch ? 0.015 : 0.035) const recoil = Vector.mult(Vector.normalise(Vector.sub(where, m.pos)), input.down ? 0.015 : 0.035)
player.force.x -= recoil.x player.force.x -= recoil.x
player.force.y -= recoil.y player.force.y -= recoil.y
} }
@@ -5176,7 +5193,7 @@ const b = {
}); });
//knock back //knock back
const KNOCK = (m.crouch ? 0.08 : 0.34) * (tech.isShotgunReversed ? -2 : 1) const KNOCK = (input.down ? 0.08 : 0.34) * (tech.isShotgunReversed ? -2 : 1)
player.force.x -= KNOCK * Math.cos(m.angle) player.force.x -= KNOCK * Math.cos(m.angle)
player.force.y -= KNOCK * Math.sin(m.angle) * 0.35 //reduce knock back in vertical direction to stop super jumps player.force.y -= KNOCK * Math.sin(m.angle) * 0.35 //reduce knock back in vertical direction to stop super jumps
pushAway(800) pushAway(800)
@@ -5252,7 +5269,7 @@ const b = {
}); });
//knock back //knock back
const KNOCK = ((m.crouch) ? 0.1 : 0.5) * this.charge * this.charge * (tech.isShotgunReversed ? -2 : 1) const KNOCK = ((input.down) ? 0.1 : 0.5) * this.charge * this.charge * (tech.isShotgunReversed ? -2 : 1)
player.force.x -= KNOCK * Math.cos(m.angle) player.force.x -= KNOCK * Math.cos(m.angle)
player.force.y -= KNOCK * Math.sin(m.angle) * 0.35 //reduce knock back in vertical direction to stop super jumps player.force.y -= KNOCK * Math.sin(m.angle) * 0.35 //reduce knock back in vertical direction to stop super jumps
pushAway(1200 * this.charge) pushAway(1200 * this.charge)
@@ -5268,7 +5285,7 @@ const b = {
m.fireCDcycle = Infinity //can't fire until mouse is released m.fireCDcycle = Infinity //can't fire until mouse is released
const previousCharge = this.charge const previousCharge = this.charge
let smoothRate = Math.min(0.998, (m.crouch ? 0.98 : 0.985) * (0.98 + 0.02 * b.fireCDscale)) //small b.fireCDscale = faster shots, b.fireCDscale=1 = normal shot, big b.fireCDscale = slower chot let smoothRate = Math.min(0.998, (input.down ? 0.98 : 0.985) * (0.98 + 0.02 * b.fireCDscale)) //small b.fireCDscale = faster shots, b.fireCDscale=1 = normal shot, big b.fireCDscale = slower chot
this.charge = this.charge * smoothRate + 1 - smoothRate this.charge = this.charge * smoothRate + 1 - smoothRate
m.energy += (this.charge - previousCharge) * (tech.isRailEnergyGain ? 1 : -0.33) //energy drain is proportional to charge gained, but doesn't stop normal m.fieldRegen m.energy += (this.charge - previousCharge) * (tech.isRailEnergyGain ? 1 : -0.33) //energy drain is proportional to charge gained, but doesn't stop normal m.fieldRegen
//draw targeting //draw targeting
@@ -5450,7 +5467,7 @@ const b = {
if (this.charge > 5) { if (this.charge > 5) {
m.fireCDcycle = m.cycle + 35; // cool down m.fireCDcycle = m.cycle + 35; // cool down
if (tech.beamSplitter) { if (tech.beamSplitter) {
const divergence = m.crouch ? 0.15 : 0.35 const divergence = input.down ? 0.15 : 0.35
const angle = m.angle - tech.beamSplitter * divergence / 2 const angle = m.angle - tech.beamSplitter * divergence / 2
for (let i = 0; i < 1 + tech.beamSplitter; i++) b.pulse(this.charge, angle + i * divergence) for (let i = 0; i < 1 + tech.beamSplitter; i++) b.pulse(this.charge, angle + i * divergence)
} else { } else {
@@ -5497,7 +5514,7 @@ const b = {
} else { } else {
m.fireCDcycle = m.cycle m.fireCDcycle = m.cycle
m.energy -= m.fieldRegen + tech.laserFieldDrain * tech.isLaserDiode m.energy -= m.fieldRegen + tech.laserFieldDrain * tech.isLaserDiode
// const divergence = m.crouch ? 0.15 : 0.2 // const divergence = input.down ? 0.15 : 0.2
// const scale = Math.pow(0.9, tech.beamSplitter) // const scale = Math.pow(0.9, tech.beamSplitter)
// const pushScale = scale * scale // const pushScale = scale * scale
let dmg = tech.laserDamage // * scale //Math.pow(0.9, tech.laserDamage) let dmg = tech.laserDamage // * scale //Math.pow(0.9, tech.laserDamage)
@@ -5505,7 +5522,7 @@ const b = {
x: m.pos.x + 20 * Math.cos(m.angle), x: m.pos.x + 20 * Math.cos(m.angle),
y: m.pos.y + 20 * Math.sin(m.angle) y: m.pos.y + 20 * Math.sin(m.angle)
} }
const divergence = m.crouch ? 0.15 : 0.35 const divergence = input.down ? 0.15 : 0.35
const angle = m.angle - tech.beamSplitter * divergence / 2 const angle = m.angle - tech.beamSplitter * divergence / 2
for (let i = 0; i < 1 + tech.beamSplitter; i++) { for (let i = 0; i < 1 + tech.beamSplitter; i++) {
b.laser(where, { b.laser(where, {
@@ -5622,7 +5639,7 @@ const b = {
// // b.pulse(energy, m.angle - i * 0.27) // // b.pulse(energy, m.angle - i * 0.27)
// // b.pulse(energy, m.angle + i * 0.27) // // b.pulse(energy, m.angle + i * 0.27)
// // } // // }
// const divergence = m.crouch ? 0.2 : 0.5 // const divergence = input.down ? 0.2 : 0.5
// const angle = m.angle - tech.beamSplitter * divergence / 2 // const angle = m.angle - tech.beamSplitter * divergence / 2
// for (let i = 0; i < 1 + tech.beamSplitter; i++) { // for (let i = 0; i < 1 + tech.beamSplitter; i++) {
// b.pulse(energy, angle + i * divergence) // b.pulse(energy, angle + i * divergence)

View File

@@ -18,6 +18,9 @@ const level = {
// m.setField("time dilation") // m.setField("time dilation")
// b.giveGuns("harpoon") // b.giveGuns("harpoon")
// tech.giveTech("filament") // tech.giveTech("filament")
// tech.giveTech("unaaq")
// tech.giveTech("reticulum")
// tech.giveTech("reticulum")
// tech.giveTech("reticulum") // tech.giveTech("reticulum")
// tech.giveTech("necrophage") // tech.giveTech("necrophage")
// for (let i = 0; i < 3; i++) tech.giveTech("super sized") // for (let i = 0; i < 3; i++) tech.giveTech("super sized")

View File

@@ -779,7 +779,7 @@ const powerUps = {
if (tech.isTechDamage && who.name === "tech") m.damage(0.11) if (tech.isTechDamage && who.name === "tech") m.damage(0.11)
if (tech.isMassEnergy) m.energy += 2; if (tech.isMassEnergy) m.energy += 2;
if (tech.isMineDrop && bullet.length < 150) { if (tech.isMineDrop && bullet.length < 150) {
if (tech.isLaserMine && m.crouch) { if (tech.isLaserMine && input.down) {
b.laserMine(who.position) b.laserMine(who.position)
} else { } else {
b.mine(who.position, { x: 0, y: 0 }, 0) b.mine(who.position, { x: 0, y: 0 }, 0)

View File

@@ -1,20 +1,25 @@
******************************************************** NEXT PATCH ************************************************** ******************************************************** NEXT PATCH **************************************************
harpoon cd on miss fire lowered to 1.5s (was 3s) gun alt fire is determined by the down key not the player crouch state
(so you can control alt fire when in the air or stuck in a tunnel)
I did this with text replace, so it could produce some bugs
harpoon
automatically uses power ups that return to player
will aim at harder to hit targets, and possible miss
returns extra fast if it is far from the player
bullets last a bit longer so they don't despawn early
cd on miss fire lowered to 1.5s (was 3s)
bugs fixes bugs fixes
******************************************************** TODO ******************************************************** ******************************************************** TODO ********************************************************
Separate actually crouching and forced crouching for gun altfires?
"Interstellar Disturbance": Cosmic String applies to mobs who cross the wormhole's path, even after initial wormholing, but at reduced damage and stun time. "Interstellar Disturbance": Cosmic String applies to mobs who cross the wormhole's path, even after initial wormholing, but at reduced damage and stun time.
disable zoom progress when paused disable zoom progress when paused
gun: harpoon gun: harpoon
delay for a not returning harpoon is too long
the return system should just be simple, with no or a very predictable way to lose the harpoon
return to player is slower for heavier harpoons return to player is slower for heavier harpoons
harpoon tech harpoon tech
holding down fire lets the string extend farther, holding down fire lets the string extend farther,
@@ -22,16 +27,15 @@ harpoon tech
can't have 2+ harpoons can't have 2+ harpoons
it uses up ammo as extends, and returns it as it contracts? it uses up ammo as extends, and returns it as it contracts?
will this effect performance? will this effect performance?
fire 2+ harpoons at the same time but different angles
2+ harpoons, with separate CDs 2+ harpoons, with separate CDs
can't have extended string? can't have extended string?
grappling hook? grappling hook?
remove string in all modes, why? remove string in all modes, why?
increase ammo increase ammo
post launch tracking: more airFriction, more thrust, harder turning post launch tracking: more airFriction, more thrust, harder turning
if no target found slow down and aim much better? if no target found slow down and aim much better?
tracking so good harpoon can hit a target, circle around and hit it again tracking so good harpoon can hit a target, circle around and hit it again
doesn't seem to be good physics
level:lab too much walking around and too much platforming level:lab too much walking around and too much platforming
@@ -46,6 +50,11 @@ make the player get a buff after using wormhole
using wormhole makes you immune to harm and drains energy until you run out using wormhole makes you immune to harm and drains energy until you run out
disable incoming energy, by saving current energy and just setting energy in the next cycle to be lower then the saved value disable incoming energy, by saving current energy and just setting energy in the next cycle to be lower then the saved value
Pilot wave tech
Energy use is increased, but you can now shape blocks using pressure
Grouping blocks will merge them into a massive ball
Size, density is determined by total mass
make a boss with a tail make a boss with a tail
but the tail is made of interesting mobs but the tail is made of interesting mobs
stabbers maybe stabbers maybe