fireworks
grenade now has 3 fireworks options, you can only have 1 at a time flame test, fireworks, pyrotechnics implosion has been removed controlled explosion 3->4 research base matter wave moves 20% faster gun science renamed ordnance bug fixes
This commit is contained in:
@@ -183,7 +183,7 @@
|
|||||||
<path class="st0" d="M191.4 36.9h-134c-11.3 0-20.5 9.2-20.5 20.5v134c0 11.3 9.2 20.5 20.5 20.5h113.4l-5.3-18.3 12.8 11.8 12.1 11.1 21.6 18.7V57.4c-.1-11.3-9.3-20.5-20.6-20.5zm-38.6 129.5s-3.6-4.3-6.6-8c13.1-3.7 18.1-11.8 18.1-11.8-4.1 2.7-8 4.6-11.5 5.9-5 2.1-9.8 3.4-14.5 4.3-9.6 1.8-18.4 1.3-25.9-.1-5.7-1.1-10.6-2.6-14.7-4.3-2.3-.9-4.8-2-7.3-3.4-.3-.2-.6-.3-.9-.5-.2-.1-.3-.2-.4-.2-1.8-1-2.8-1.7-2.8-1.7s4.8 7.9 17.5 11.7c-3 3.8-6.7 8.2-6.7 8.2-22.1-.7-30.5-15.1-30.5-15.1 0-31.9 14.4-57.8 14.4-57.8 14.4-10.7 28-10.4 28-10.4l1 1.2c-18 5.1-26.2 13-26.2 13s2.2-1.2 5.9-2.8c10.7-4.7 19.2-5.9 22.7-6.3.6-.1 1.1-.2 1.7-.2 6.1-.8 13-1 20.2-.2 9.5 1.1 19.7 3.9 30.1 9.5 0 0-7.9-7.5-24.9-12.6l1.4-1.6s13.7-.3 28 10.4c0 0 14.4 25.9 14.4 57.8 0-.1-8.4 14.3-30.5 15zM303.8 79.7h-33.2V117l22.1 19.9v-36.2h11.8c7.5 0 11.2 3.6 11.2 9.4v27.7c0 5.8-3.5 9.7-11.2 9.7h-34v21.1h33.2c17.8.1 34.5-8.8 34.5-29.2v-29.8c.1-20.8-16.6-29.9-34.4-29.9zm174 59.7v-30.6c0-11 19.8-13.5 25.8-2.5l18.3-7.4c-7.2-15.8-20.3-20.4-31.2-20.4-17.8 0-35.4 10.3-35.4 30.3v30.6c0 20.2 17.6 30.3 35 30.3 11.2 0 24.6-5.5 32-19.9l-19.6-9c-4.8 12.3-24.9 9.3-24.9-1.4zM417.3 113c-6.9-1.5-11.5-4-11.8-8.3.4-10.3 16.3-10.7 25.6-.8l14.7-11.3c-9.2-11.2-19.6-14.2-30.3-14.2-16.3 0-32.1 9.2-32.1 26.6 0 16.9 13 26 27.3 28.2 7.3 1 15.4 3.9 15.2 8.9-.6 9.5-20.2 9-29.1-1.8l-14.2 13.3c8.3 10.7 19.6 16.1 30.2 16.1 16.3 0 34.4-9.4 35.1-26.6 1-21.7-14.8-27.2-30.6-30.1zm-67 55.5h22.4V79.7h-22.4v88.8zM728 79.7h-33.2V117l22.1 19.9v-36.2h11.8c7.5 0 11.2 3.6 11.2 9.4v27.7c0 5.8-3.5 9.7-11.2 9.7h-34v21.1H728c17.8.1 34.5-8.8 34.5-29.2v-29.8c0-20.8-16.7-29.9-34.5-29.9zm-162.9-1.2c-18.4 0-36.7 10-36.7 30.5v30.3c0 20.3 18.4 30.5 36.9 30.5 18.4 0 36.7-10.2 36.7-30.5V109c0-20.4-18.5-30.5-36.9-30.5zm14.4 60.8c0 6.4-7.2 9.7-14.3 9.7-7.2 0-14.4-3.1-14.4-9.7V109c0-6.5 7-10 14-10 7.3 0 14.7 3.1 14.7 10v30.3zM682.4 109c-.5-20.8-14.7-29.2-33-29.2h-35.5v88.8h22.7v-28.2h4l20.6 28.2h28L665 138.1c10.7-3.4 17.4-12.7 17.4-29.1zm-32.6 12h-13.2v-20.3h13.2c14.1 0 14.1 20.3 0 20.3z" />
|
<path class="st0" d="M191.4 36.9h-134c-11.3 0-20.5 9.2-20.5 20.5v134c0 11.3 9.2 20.5 20.5 20.5h113.4l-5.3-18.3 12.8 11.8 12.1 11.1 21.6 18.7V57.4c-.1-11.3-9.3-20.5-20.6-20.5zm-38.6 129.5s-3.6-4.3-6.6-8c13.1-3.7 18.1-11.8 18.1-11.8-4.1 2.7-8 4.6-11.5 5.9-5 2.1-9.8 3.4-14.5 4.3-9.6 1.8-18.4 1.3-25.9-.1-5.7-1.1-10.6-2.6-14.7-4.3-2.3-.9-4.8-2-7.3-3.4-.3-.2-.6-.3-.9-.5-.2-.1-.3-.2-.4-.2-1.8-1-2.8-1.7-2.8-1.7s4.8 7.9 17.5 11.7c-3 3.8-6.7 8.2-6.7 8.2-22.1-.7-30.5-15.1-30.5-15.1 0-31.9 14.4-57.8 14.4-57.8 14.4-10.7 28-10.4 28-10.4l1 1.2c-18 5.1-26.2 13-26.2 13s2.2-1.2 5.9-2.8c10.7-4.7 19.2-5.9 22.7-6.3.6-.1 1.1-.2 1.7-.2 6.1-.8 13-1 20.2-.2 9.5 1.1 19.7 3.9 30.1 9.5 0 0-7.9-7.5-24.9-12.6l1.4-1.6s13.7-.3 28 10.4c0 0 14.4 25.9 14.4 57.8 0-.1-8.4 14.3-30.5 15zM303.8 79.7h-33.2V117l22.1 19.9v-36.2h11.8c7.5 0 11.2 3.6 11.2 9.4v27.7c0 5.8-3.5 9.7-11.2 9.7h-34v21.1h33.2c17.8.1 34.5-8.8 34.5-29.2v-29.8c.1-20.8-16.6-29.9-34.4-29.9zm174 59.7v-30.6c0-11 19.8-13.5 25.8-2.5l18.3-7.4c-7.2-15.8-20.3-20.4-31.2-20.4-17.8 0-35.4 10.3-35.4 30.3v30.6c0 20.2 17.6 30.3 35 30.3 11.2 0 24.6-5.5 32-19.9l-19.6-9c-4.8 12.3-24.9 9.3-24.9-1.4zM417.3 113c-6.9-1.5-11.5-4-11.8-8.3.4-10.3 16.3-10.7 25.6-.8l14.7-11.3c-9.2-11.2-19.6-14.2-30.3-14.2-16.3 0-32.1 9.2-32.1 26.6 0 16.9 13 26 27.3 28.2 7.3 1 15.4 3.9 15.2 8.9-.6 9.5-20.2 9-29.1-1.8l-14.2 13.3c8.3 10.7 19.6 16.1 30.2 16.1 16.3 0 34.4-9.4 35.1-26.6 1-21.7-14.8-27.2-30.6-30.1zm-67 55.5h22.4V79.7h-22.4v88.8zM728 79.7h-33.2V117l22.1 19.9v-36.2h11.8c7.5 0 11.2 3.6 11.2 9.4v27.7c0 5.8-3.5 9.7-11.2 9.7h-34v21.1H728c17.8.1 34.5-8.8 34.5-29.2v-29.8c0-20.8-16.7-29.9-34.5-29.9zm-162.9-1.2c-18.4 0-36.7 10-36.7 30.5v30.3c0 20.3 18.4 30.5 36.9 30.5 18.4 0 36.7-10.2 36.7-30.5V109c0-20.4-18.5-30.5-36.9-30.5zm14.4 60.8c0 6.4-7.2 9.7-14.3 9.7-7.2 0-14.4-3.1-14.4-9.7V109c0-6.5 7-10 14-10 7.3 0 14.7 3.1 14.7 10v30.3zM682.4 109c-.5-20.8-14.7-29.2-33-29.2h-35.5v88.8h22.7v-28.2h4l20.6 28.2h28L665 138.1c10.7-3.4 17.4-12.7 17.4-29.1zm-32.6 12h-13.2v-20.3h13.2c14.1 0 14.1 20.3 0 20.3z" />
|
||||||
</svg>
|
</svg>
|
||||||
</a>
|
</a>
|
||||||
Chat about n-gon in the <a href="https://discord.gg/2eC9pgJ">discord</a>.<br> Let me know about ideas, or bugs.
|
Chat about n-gon in the <a href="https://discord.gg/JyfrKbXTfw">discord</a>.<br> Let me know about ideas, or bugs.
|
||||||
<br><br><br>
|
<br><br><br>
|
||||||
<a href="https://github.com/landgreen/n-gon">
|
<a href="https://github.com/landgreen/n-gon">
|
||||||
<svg viewBox="0 0 100 16" xmlns="http://www.w3.org/2000/svg" fill="#1B1F23">
|
<svg viewBox="0 0 100 16" xmlns="http://www.w3.org/2000/svg" fill="#1B1F23">
|
||||||
|
|||||||
140
js/bullet.js
140
js/bullet.js
@@ -430,18 +430,18 @@ const b = {
|
|||||||
m.energy -= 0.15
|
m.energy -= 0.15
|
||||||
m.damage(0.01 * harm); //remove 99% of the damage 1-0.99
|
m.damage(0.01 * harm); //remove 99% of the damage 1-0.99
|
||||||
// console.log(Math.max(0, Math.min(0.15 - 0.01 * player.speed, 0.15)))
|
// console.log(Math.max(0, Math.min(0.15 - 0.01 * player.speed, 0.15)))
|
||||||
knock = Vector.mult(Vector.normalise(sub), 0.6 * player.mass * Math.max(0, Math.min(0.15 - 0.002 * player.speed, 0.15)) * tech.implosion);
|
knock = Vector.mult(Vector.normalise(sub), -0.6 * player.mass * Math.max(0, Math.min(0.15 - 0.002 * player.speed, 0.15)));
|
||||||
player.force.x = knock.x; // not += so crazy forces can't build up with MIRV
|
player.force.x = knock.x; // not += so crazy forces can't build up with MIRV
|
||||||
player.force.y = knock.y - 0.3; //some extra vertical kick
|
player.force.y = knock.y - 0.3; //some extra vertical kick
|
||||||
} else {
|
} else {
|
||||||
if (simulation.dmgScale) m.damage(harm);
|
if (simulation.dmgScale) m.damage(harm);
|
||||||
knock = Vector.mult(Vector.normalise(sub), Math.sqrt(dmg) * player.mass * 0.013 * tech.implosion);
|
knock = Vector.mult(Vector.normalise(sub), -Math.sqrt(dmg) * player.mass * 0.013);
|
||||||
player.force.x += knock.x;
|
player.force.x += knock.x;
|
||||||
player.force.y += knock.y;
|
player.force.y += knock.y;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (dist < alertRange) {
|
} else if (dist < alertRange) {
|
||||||
knock = Vector.mult(Vector.normalise(sub), Math.sqrt(dmg) * player.mass * 0.005 * tech.implosion);
|
knock = Vector.mult(Vector.normalise(sub), -Math.sqrt(dmg) * player.mass * 0.005);
|
||||||
player.force.x += knock.x;
|
player.force.x += knock.x;
|
||||||
player.force.y += knock.y;
|
player.force.y += knock.y;
|
||||||
}
|
}
|
||||||
@@ -453,7 +453,7 @@ const b = {
|
|||||||
sub = Vector.sub(where, body[i].position);
|
sub = Vector.sub(where, body[i].position);
|
||||||
dist = Vector.magnitude(sub);
|
dist = Vector.magnitude(sub);
|
||||||
if (dist < radius) {
|
if (dist < radius) {
|
||||||
knock = Vector.mult(Vector.normalise(sub), Math.sqrt(dmg) * body[i].mass * 0.022 * tech.implosion);
|
knock = Vector.mult(Vector.normalise(sub), -Math.sqrt(dmg) * body[i].mass * 0.022);
|
||||||
body[i].force.x += knock.x;
|
body[i].force.x += knock.x;
|
||||||
body[i].force.y += knock.y;
|
body[i].force.y += knock.y;
|
||||||
if (tech.isBlockExplode) {
|
if (tech.isBlockExplode) {
|
||||||
@@ -468,7 +468,7 @@ const b = {
|
|||||||
}, 150 + 300 * Math.random());
|
}, 150 + 300 * Math.random());
|
||||||
}
|
}
|
||||||
} else if (dist < alertRange) {
|
} else if (dist < alertRange) {
|
||||||
knock = Vector.mult(Vector.normalise(sub), Math.sqrt(dmg) * body[i].mass * 0.011 * tech.implosion);
|
knock = Vector.mult(Vector.normalise(sub), -Math.sqrt(dmg) * body[i].mass * 0.011);
|
||||||
body[i].force.x += knock.x;
|
body[i].force.x += knock.x;
|
||||||
body[i].force.y += knock.y;
|
body[i].force.y += knock.y;
|
||||||
}
|
}
|
||||||
@@ -480,11 +480,11 @@ const b = {
|
|||||||
sub = Vector.sub(where, powerUp[i].position);
|
sub = Vector.sub(where, powerUp[i].position);
|
||||||
dist = Vector.magnitude(sub);
|
dist = Vector.magnitude(sub);
|
||||||
if (dist < radius) {
|
if (dist < radius) {
|
||||||
knock = Vector.mult(Vector.normalise(sub), Math.sqrt(dmg) * powerUp[i].mass * 0.013 * tech.implosion);
|
knock = Vector.mult(Vector.normalise(sub), -Math.sqrt(dmg) * powerUp[i].mass * 0.013);
|
||||||
powerUp[i].force.x += knock.x;
|
powerUp[i].force.x += knock.x;
|
||||||
powerUp[i].force.y += knock.y;
|
powerUp[i].force.y += knock.y;
|
||||||
} else if (dist < alertRange) {
|
} else if (dist < alertRange) {
|
||||||
knock = Vector.mult(Vector.normalise(sub), Math.sqrt(dmg) * powerUp[i].mass * 0.007 * tech.implosion);
|
knock = Vector.mult(Vector.normalise(sub), -Math.sqrt(dmg) * powerUp[i].mass * 0.007);
|
||||||
powerUp[i].force.x += knock.x;
|
powerUp[i].force.x += knock.x;
|
||||||
powerUp[i].force.y += knock.y;
|
powerUp[i].force.y += knock.y;
|
||||||
}
|
}
|
||||||
@@ -501,12 +501,10 @@ const b = {
|
|||||||
if (Matter.Query.ray(map, mob[i].position, where).length > 0) dmg *= 0.5 //reduce damage if a wall is in the way
|
if (Matter.Query.ray(map, mob[i].position, where).length > 0) dmg *= 0.5 //reduce damage if a wall is in the way
|
||||||
mob[i].damage(dmg * damageScale * m.dmgScale);
|
mob[i].damage(dmg * damageScale * m.dmgScale);
|
||||||
mob[i].locatePlayer();
|
mob[i].locatePlayer();
|
||||||
|
knock = Vector.mult(Vector.normalise(sub), -Math.sqrt(dmg * damageScale) * mob[i].mass * (mob[i].isBoss ? 0.003 : 0.01));
|
||||||
if (tech.isExplosionStun) {
|
if (tech.isExplosionStun) {
|
||||||
mobs.statusStun(mob[i], 120)
|
mobs.statusStun(mob[i], 120)
|
||||||
knock *= 0.1
|
} else if (!mob[i].isInvulnerable) {
|
||||||
}
|
|
||||||
knock = Vector.mult(Vector.normalise(sub), Math.sqrt(dmg * damageScale) * mob[i].mass * (mob[i].isBoss ? 0.005 : 0.01) * tech.implosion);
|
|
||||||
if (!mob[i].isInvulnerable) {
|
|
||||||
mob[i].force.x += knock.x;
|
mob[i].force.x += knock.x;
|
||||||
mob[i].force.y += knock.y;
|
mob[i].force.y += knock.y;
|
||||||
}
|
}
|
||||||
@@ -514,12 +512,10 @@ const b = {
|
|||||||
damageScale *= 0.87 //reduced damage for each additional explosion target
|
damageScale *= 0.87 //reduced damage for each additional explosion target
|
||||||
} else if (!mob[i].seePlayer.recall && dist < alertRange) {
|
} else if (!mob[i].seePlayer.recall && dist < alertRange) {
|
||||||
mob[i].locatePlayer();
|
mob[i].locatePlayer();
|
||||||
knock = Vector.mult(Vector.normalise(sub), Math.sqrt(dmg * damageScale) * mob[i].mass * (mob[i].isBoss ? 0.002 : 0.006) * tech.implosion);
|
knock = Vector.mult(Vector.normalise(sub), -Math.sqrt(dmg * damageScale) * mob[i].mass * (mob[i].isBoss ? 0 : 0.006));
|
||||||
if (tech.isExplosionStun) {
|
if (tech.isExplosionStun) {
|
||||||
mobs.statusStun(mob[i], 60)
|
mobs.statusStun(mob[i], 60)
|
||||||
knock *= 0.1
|
} else if (!mob[i].isInvulnerable) {
|
||||||
}
|
|
||||||
if (!mob[i].isInvulnerable) {
|
|
||||||
mob[i].force.x += knock.x;
|
mob[i].force.x += knock.x;
|
||||||
mob[i].force.y += knock.y;
|
mob[i].force.y += knock.y;
|
||||||
}
|
}
|
||||||
@@ -773,10 +769,10 @@ const b = {
|
|||||||
const cycle = () => {
|
const cycle = () => {
|
||||||
if (simulation.paused || m.isBodiesAsleep) { requestAnimationFrame(cycle) } else {
|
if (simulation.paused || m.isBodiesAsleep) { requestAnimationFrame(cycle) } else {
|
||||||
count++
|
count++
|
||||||
if (count < 60 && m.alive) requestAnimationFrame(cycle);
|
if (count < 110 && m.alive) requestAnimationFrame(cycle);
|
||||||
if (!(count % 8)) {
|
if (!(count % 10)) {
|
||||||
const unit = Vector.rotate({ x: 1, y: 0 }, 6.28 * Math.random())
|
const unit = Vector.rotate({ x: 1, y: 0 }, 6.28 * Math.random())
|
||||||
b.explosion(Vector.add(where, Vector.mult(unit, size * (count * 0.011 + 0.03 * Math.random()))), size * (0.5 + Math.random() * 0.35), `hsla(${360*Math.random()},100%,66%,0.6)`); //makes bullet do explosive damage at end
|
b.explosion(Vector.add(where, Vector.mult(unit, size * (count * 0.01 + 0.02 * Math.random()))), size * (0.4 + Math.random() * 0.35), `hsla(${360*Math.random()},100%,66%,0.6)`); //makes bullet do explosive damage at end
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -791,7 +787,7 @@ const b = {
|
|||||||
if (count < 21 && m.alive) requestAnimationFrame(cycle);
|
if (count < 21 && m.alive) requestAnimationFrame(cycle);
|
||||||
if (count % 2) {
|
if (count % 2) {
|
||||||
const unit = Vector.rotate({ x: 1, y: 0 }, curl * 6.28 * count / 18 + off)
|
const unit = Vector.rotate({ x: 1, y: 0 }, curl * 6.28 * count / 18 + off)
|
||||||
b.explosion(Vector.add(where, Vector.mult(unit, size * 0.8)), size * 0.75, color); //makes bullet do explosive damage at end
|
b.explosion(Vector.add(where, Vector.mult(unit, size * 0.75)), size * 0.7, color); //makes bullet do explosive damage at end
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -800,6 +796,48 @@ const b = {
|
|||||||
let count = 0
|
let count = 0
|
||||||
requestAnimationFrame(cycle);
|
requestAnimationFrame(cycle);
|
||||||
},
|
},
|
||||||
|
fireFlower(where, size) { //can occur after grenades detonate
|
||||||
|
// size *= b.explosionRange()
|
||||||
|
const range = size * Math.sqrt(b.explosionRange())
|
||||||
|
const cycle = () => {
|
||||||
|
if (simulation.paused || m.isBodiesAsleep) { requestAnimationFrame(cycle) } else {
|
||||||
|
if (count < 30 && m.alive) requestAnimationFrame(cycle);
|
||||||
|
if (count === 0) {
|
||||||
|
const color = `hsla(${360*Math.random()},100%,66%,0.6)`
|
||||||
|
b.explosion(where, size * 0.8, color);
|
||||||
|
}
|
||||||
|
if (count === 8) {
|
||||||
|
const color = `hsla(${360*Math.random()},100%,66%,0.6)`
|
||||||
|
for (let i = 0, len = 6; i < len; i++) {
|
||||||
|
const unit = Vector.rotate({ x: 1, y: 0 }, 6.28 * i / len)
|
||||||
|
b.explosion(Vector.add(where, Vector.mult(unit, 1.2 * range)), size * 0.6, color); //makes bullet do explosive damage at end
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (count === 16) {
|
||||||
|
const color = `hsla(${360*Math.random()},100%,66%,0.6)`
|
||||||
|
for (let i = 0, len = 10; i < len; i++) {
|
||||||
|
const unit = Vector.rotate({ x: 1, y: 0 }, 6.28 * i / len)
|
||||||
|
b.explosion(Vector.add(where, Vector.mult(unit, 1.75 * range)), size * 0.45, color); //makes bullet do explosive damage at end
|
||||||
|
}
|
||||||
|
}
|
||||||
|
count++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
let count = 0
|
||||||
|
requestAnimationFrame(cycle);
|
||||||
|
},
|
||||||
|
grenadeEnd() {
|
||||||
|
if (tech.isCircleExplode) {
|
||||||
|
b.starburst(this.position, this.explodeRad)
|
||||||
|
} else if (tech.isPetalsExplode) {
|
||||||
|
b.fireFlower(this.position, this.explodeRad)
|
||||||
|
} else if (tech.isClusterExplode) {
|
||||||
|
b.fireworks(this.position, this.explodeRad)
|
||||||
|
} else {
|
||||||
|
b.explosion(this.position, this.explodeRad); //makes bullet do explosive damage at end
|
||||||
|
}
|
||||||
|
if (tech.fragments) b.targetedNail(this.position, tech.fragments * Math.floor(2 + 1.5 * Math.random()))
|
||||||
|
},
|
||||||
grenade() {
|
grenade() {
|
||||||
|
|
||||||
},
|
},
|
||||||
@@ -808,17 +846,8 @@ const b = {
|
|||||||
const me = bullet.length;
|
const me = bullet.length;
|
||||||
bullet[me] = Bodies.circle(where.x, where.y, 15, b.fireAttributes(angle, false));
|
bullet[me] = Bodies.circle(where.x, where.y, 15, b.fireAttributes(angle, false));
|
||||||
Matter.Body.setDensity(bullet[me], 0.0003);
|
Matter.Body.setDensity(bullet[me], 0.0003);
|
||||||
bullet[me].explodeRad = (tech.implosion ? 375 : 300) * size + 100 * tech.isBlockExplode;
|
bullet[me].explodeRad = 300 * size + 100 * tech.isBlockExplode;
|
||||||
bullet[me].onEnd = function() {
|
bullet[me].onEnd = b.grenadeEnd
|
||||||
if (tech.isCircleExplode) {
|
|
||||||
b.starburst(this.position, this.explodeRad)
|
|
||||||
} else if (tech.isClusterExplode) {
|
|
||||||
b.fireworks(this.position, this.explodeRad)
|
|
||||||
} else {
|
|
||||||
b.explosion(this.position, this.explodeRad); //makes bullet do explosive damage at end
|
|
||||||
}
|
|
||||||
if (tech.fragments) b.targetedNail(this.position, tech.fragments * Math.floor(2 + 1.5 * Math.random()))
|
|
||||||
}
|
|
||||||
bullet[me].minDmgSpeed = 1;
|
bullet[me].minDmgSpeed = 1;
|
||||||
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
|
||||||
@@ -839,16 +868,8 @@ const b = {
|
|||||||
const me = bullet.length;
|
const me = bullet.length;
|
||||||
bullet[me] = Bodies.circle(where.x, where.y, 15, b.fireAttributes(angle, false));
|
bullet[me] = Bodies.circle(where.x, where.y, 15, b.fireAttributes(angle, false));
|
||||||
Matter.Body.setDensity(bullet[me], 0.0003);
|
Matter.Body.setDensity(bullet[me], 0.0003);
|
||||||
bullet[me].explodeRad = (tech.implosion ? 375 : 300) * size + 100 * tech.isBlockExplode;
|
bullet[me].explodeRad = 300 * size + 100 * tech.isBlockExplode;
|
||||||
bullet[me].onEnd = function() {
|
bullet[me].onEnd = b.grenadeEnd
|
||||||
if (tech.isCircleExplode) {
|
|
||||||
b.starburst(this.position, this.explodeRad)
|
|
||||||
} else if (tech.isClusterExplode) {
|
|
||||||
b.fireworks(this.position, this.explodeRad)
|
|
||||||
}
|
|
||||||
b.explosion(this.position, this.explodeRad); //makes bullet do explosive damage at end
|
|
||||||
if (tech.fragments) b.targetedNail(this.position, tech.fragments * Math.floor(2 + 1.5 * Math.random()))
|
|
||||||
}
|
|
||||||
bullet[me].minDmgSpeed = 1;
|
bullet[me].minDmgSpeed = 1;
|
||||||
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
|
||||||
@@ -879,28 +900,18 @@ const b = {
|
|||||||
const me = bullet.length;
|
const me = bullet.length;
|
||||||
bullet[me] = Bodies.circle(where.x, where.y, 15, b.fireAttributes(angle, false));
|
bullet[me] = Bodies.circle(where.x, where.y, 15, b.fireAttributes(angle, false));
|
||||||
Matter.Body.setDensity(bullet[me], 0.0003);
|
Matter.Body.setDensity(bullet[me], 0.0003);
|
||||||
bullet[me].explodeRad = (tech.implosion ? 425 : 350) * size + Math.floor(Math.random() * 50) + tech.isBlockExplode * 100
|
bullet[me].explodeRad = 350 * size + Math.floor(Math.random() * 50) + tech.isBlockExplode * 100
|
||||||
bullet[me].onEnd = function() {
|
bullet[me].onEnd = b.grenadeEnd
|
||||||
if (tech.isCircleExplode) {
|
|
||||||
b.starburst(this.position, this.explodeRad)
|
|
||||||
} else if (tech.isClusterExplode) {
|
|
||||||
b.fireworks(this.position, this.explodeRad)
|
|
||||||
}
|
|
||||||
b.explosion(this.position, this.explodeRad); //makes bullet do explosive damage at end
|
|
||||||
if (tech.fragments) b.targetedNail(this.position, tech.fragments * Math.floor(2 + 1.5 * Math.random()))
|
|
||||||
}
|
|
||||||
bullet[me].minDmgSpeed = 1;
|
bullet[me].minDmgSpeed = 1;
|
||||||
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 = input.down ? 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)
|
||||||
});
|
});
|
||||||
Composite.add(engine.world, bullet[me]); //add bullet to world
|
Composite.add(engine.world, bullet[me]); //add bullet to world
|
||||||
|
|
||||||
bullet[me].endCycle = simulation.cycle + 70;
|
bullet[me].endCycle = simulation.cycle + 70;
|
||||||
bullet[me].frictionAir = 0.07;
|
bullet[me].frictionAir = 0.07;
|
||||||
const MAG = 0.015
|
const MAG = 0.015
|
||||||
@@ -961,16 +972,8 @@ const b = {
|
|||||||
const me = bullet.length;
|
const me = bullet.length;
|
||||||
bullet[me] = Bodies.circle(where.x, where.y, 20, b.fireAttributes(angle, false));
|
bullet[me] = Bodies.circle(where.x, where.y, 20, b.fireAttributes(angle, false));
|
||||||
Matter.Body.setDensity(bullet[me], 0.0002);
|
Matter.Body.setDensity(bullet[me], 0.0002);
|
||||||
bullet[me].explodeRad = (tech.implosion ? 425 : 350) * size + Math.floor(Math.random() * 50) + tech.isBlockExplode * 100
|
bullet[me].explodeRad = 350 * size + Math.floor(Math.random() * 50) + tech.isBlockExplode * 100
|
||||||
bullet[me].onEnd = function() {
|
bullet[me].onEnd = b.grenadeEnd
|
||||||
if (tech.isCircleExplode) {
|
|
||||||
b.starburst(this.position, this.explodeRad)
|
|
||||||
} else if (tech.isClusterExplode) {
|
|
||||||
b.fireworks(this.position, this.explodeRad)
|
|
||||||
}
|
|
||||||
b.explosion(this.position, this.explodeRad); //makes bullet do explosive damage at end
|
|
||||||
if (tech.fragments) b.targetedNail(this.position, tech.fragments * Math.floor(2 + 1.5 * Math.random()))
|
|
||||||
}
|
|
||||||
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
|
||||||
};
|
};
|
||||||
@@ -1056,15 +1059,12 @@ const b = {
|
|||||||
if (tech.isRPG) {
|
if (tech.isRPG) {
|
||||||
const SCALE = 2
|
const SCALE = 2
|
||||||
Matter.Body.scale(bullet[me], SCALE, SCALE);
|
Matter.Body.scale(bullet[me], SCALE, SCALE);
|
||||||
|
|
||||||
speed = input.down ? 25 : 15
|
speed = input.down ? 25 : 15
|
||||||
// speed = input.down ? 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)
|
||||||
});
|
});
|
||||||
|
|
||||||
const MAG = 0.005
|
const MAG = 0.005
|
||||||
bullet[me].thrust = {
|
bullet[me].thrust = {
|
||||||
x: bullet[me].mass * MAG * Math.cos(angle),
|
x: bullet[me].mass * MAG * Math.cos(angle),
|
||||||
@@ -5643,7 +5643,7 @@ const b = {
|
|||||||
ctx.lineTo(vertices[0].x + vibe * (Math.random() - 0.5), vertices[0].y + vibe * (Math.random() - 0.5));
|
ctx.lineTo(vertices[0].x + vibe * (Math.random() - 0.5), vertices[0].y + vibe * (Math.random() - 0.5));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this.waves[i].radius += tech.waveBeamSpeed * this.waves[i].expanding //expand / move
|
this.waves[i].radius += 0.9 * tech.waveBeamSpeed * this.waves[i].expanding //expand / move
|
||||||
// if (this.waves[i].radius > end) this.waves.splice(i, 1) //end
|
// if (this.waves[i].radius > end) this.waves.splice(i, 1) //end
|
||||||
if (this.waves[i].radius > end) {
|
if (this.waves[i].radius > end) {
|
||||||
this.waves[i].expanding = -1
|
this.waves[i].expanding = -1
|
||||||
@@ -5738,7 +5738,7 @@ const b = {
|
|||||||
}
|
}
|
||||||
// ctx.stroke(); //draw vibes
|
// ctx.stroke(); //draw vibes
|
||||||
|
|
||||||
this.waves[i].radius += tech.waveBeamSpeed * 2 * this.waves[i].expanding //expand / move
|
this.waves[i].radius += tech.waveBeamSpeed * 1.8 * this.waves[i].expanding //expand / move
|
||||||
if (this.waves[i].radius > end) {
|
if (this.waves[i].radius > end) {
|
||||||
this.waves[i].expanding = -1
|
this.waves[i].expanding = -1
|
||||||
this.waves[i].reflection--
|
this.waves[i].reflection--
|
||||||
@@ -5857,9 +5857,9 @@ const b = {
|
|||||||
let waveSpeedMap = 0.1
|
let waveSpeedMap = 0.1
|
||||||
let waveSpeedBody = 0.25
|
let waveSpeedBody = 0.25
|
||||||
if (tech.isPhaseVelocity) {
|
if (tech.isPhaseVelocity) {
|
||||||
waveSpeedMap = 3
|
waveSpeedMap = 3.5
|
||||||
waveSpeedBody = 1.9
|
waveSpeedBody = 2
|
||||||
bullet[me].dmg *= 1.15
|
bullet[me].dmg *= 1.2
|
||||||
}
|
}
|
||||||
if (tech.waveReflections) {
|
if (tech.waveReflections) {
|
||||||
bullet[me].reflectCycle = totalCycles / tech.waveReflections //tech.waveLengthRange
|
bullet[me].reflectCycle = totalCycles / tech.waveReflections //tech.waveLengthRange
|
||||||
|
|||||||
18
js/level.js
18
js/level.js
@@ -15,16 +15,16 @@ const level = {
|
|||||||
levels: [],
|
levels: [],
|
||||||
start() {
|
start() {
|
||||||
if (level.levelsCleared === 0) { //this code only runs on the first level
|
if (level.levelsCleared === 0) { //this code only runs on the first level
|
||||||
// simulation.isHorizontalFlipped = true
|
// // simulation.isHorizontalFlipped = true
|
||||||
// m.setField("perfect diamagnetism")
|
// m.setField("wormhole")
|
||||||
// b.giveGuns("grenades")
|
// b.giveGuns("matter wave")
|
||||||
// tech.giveTech("rule 30")
|
// tech.giveTech("chain reaction")
|
||||||
// tech.giveTech("cherenkov radiation")
|
// tech.giveTech("fireworks")
|
||||||
// tech.giveTech("flame test")
|
// tech.giveTech("flame test")
|
||||||
// tech.giveTech("pyrotechnics")
|
// tech.giveTech("pyrotechnics")
|
||||||
// for (let i = 0; i < 10; i++) tech.giveTech("replication")
|
// for (let i = 0; i < 10; i++) tech.giveTech("replication")
|
||||||
// tech.giveTech("decoherence")
|
// tech.giveTech("acetone peroxide")
|
||||||
// tech.giveTech("pneumatic actuator")
|
// for (let i = 0; i < 10; i++) tech.giveTech("ammonium nitrate")
|
||||||
// for (let i = 0; i < 10; i++) powerUps.directSpawn(450, -50, "tech");
|
// for (let i = 0; i < 10; i++) powerUps.directSpawn(450, -50, "tech");
|
||||||
// for (let i = 0; i < 10; i++) powerUps.directSpawn(450, -50, "research");
|
// for (let i = 0; i < 10; i++) powerUps.directSpawn(450, -50, "research");
|
||||||
// for (let i = 0; i < 15; i++) tech.giveTech()
|
// for (let i = 0; i < 15; i++) tech.giveTech()
|
||||||
@@ -2652,7 +2652,7 @@ const level = {
|
|||||||
// spawn.slashBoss(1900, -500)
|
// spawn.slashBoss(1900, -500)
|
||||||
// spawn.launcherBoss(3200, -500)
|
// spawn.launcherBoss(3200, -500)
|
||||||
// spawn.laserTargetingBoss(1700, -500)
|
// spawn.laserTargetingBoss(1700, -500)
|
||||||
// spawn.powerUpBoss(1900, -500)
|
spawn.powerUpBoss(1900, -500)
|
||||||
// spawn.powerUpBossBaby(3200, -500)
|
// spawn.powerUpBossBaby(3200, -500)
|
||||||
// spawn.snakeBoss(1700, -500)
|
// spawn.snakeBoss(1700, -500)
|
||||||
// spawn.streamBoss(3200, -500)
|
// spawn.streamBoss(3200, -500)
|
||||||
@@ -2663,7 +2663,7 @@ const level = {
|
|||||||
// spawn.blinkBoss(1700, -500)
|
// spawn.blinkBoss(1700, -500)
|
||||||
// spawn.snakeSpitBoss(3200, -500)
|
// spawn.snakeSpitBoss(3200, -500)
|
||||||
// spawn.laserBombingBoss(1700, -500)
|
// spawn.laserBombingBoss(1700, -500)
|
||||||
spawn.launcherBoss(3200, -500)
|
// spawn.launcherBoss(3200, -500)
|
||||||
// spawn.blockBoss(1700, -500)
|
// spawn.blockBoss(1700, -500)
|
||||||
// spawn.blinkBoss(3200, -500)
|
// spawn.blinkBoss(3200, -500)
|
||||||
// spawn.spiderBoss(1700, -500)
|
// spawn.spiderBoss(1700, -500)
|
||||||
|
|||||||
64
js/tech.js
64
js/tech.js
@@ -301,7 +301,7 @@ const tech = {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
tech: [{
|
tech: [{
|
||||||
name: "gun sciences",
|
name: "ordnance",
|
||||||
description: "</strong>triple</strong> the <strong class='flicker'>frequency</strong> of finding <strong class='color-g'>gun</strong><strong class='color-m'>tech</strong><br>spawn a <strong class='color-g'>gun</strong>",
|
description: "</strong>triple</strong> the <strong class='flicker'>frequency</strong> of finding <strong class='color-g'>gun</strong><strong class='color-m'>tech</strong><br>spawn a <strong class='color-g'>gun</strong>",
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
@@ -4396,7 +4396,7 @@ const tech = {
|
|||||||
//
|
//
|
||||||
{
|
{
|
||||||
name: "phase velocity",
|
name: "phase velocity",
|
||||||
description: "matter wave <strong>propagates</strong> faster through <strong>solids</strong><br>increase matter wave <strong class='color-d'>damage</strong> by <strong>15%</strong>",
|
description: "matter wave <strong>propagates</strong> faster through <strong>solids</strong><br>increase matter wave <strong class='color-d'>damage</strong> by <strong>20%</strong>",
|
||||||
// description: "matter wave <strong>propagates</strong> faster through <strong>solids</strong><br>up by <strong>3000%</strong> in the map and <strong>760%</strong> in <strong class='color-block'>blocks</strong>",
|
// description: "matter wave <strong>propagates</strong> faster through <strong>solids</strong><br>up by <strong>3000%</strong> in the map and <strong>760%</strong> in <strong class='color-block'>blocks</strong>",
|
||||||
isGunTech: true,
|
isGunTech: true,
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
@@ -4471,7 +4471,7 @@ const tech = {
|
|||||||
tech.waveBeamDamage += 1.5 * 0.37 //this sets base matter wave damage
|
tech.waveBeamDamage += 1.5 * 0.37 //this sets base matter wave damage
|
||||||
},
|
},
|
||||||
remove() {
|
remove() {
|
||||||
tech.waveBeamSpeed = 10;
|
tech.waveBeamSpeed = 12;
|
||||||
tech.waveBeamDamage = 1.5 //this sets base matter wave damage
|
tech.waveBeamDamage = 1.5 //this sets base matter wave damage
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -4789,25 +4789,25 @@ const tech = {
|
|||||||
// },
|
// },
|
||||||
{
|
{
|
||||||
name: "controlled explosion",
|
name: "controlled explosion",
|
||||||
description: `use ${powerUps.orb.research(3)} to dynamically <strong>reduce</strong> all<br><strong class='color-e'>explosions</strong> until they do no <strong class='color-harm'>harm</strong>`,
|
description: `use ${powerUps.orb.research(4)} to dynamically <strong>reduce</strong> all<br><strong class='color-e'>explosions</strong> until they do no <strong class='color-harm'>harm</strong>`,
|
||||||
isGunTech: true,
|
isGunTech: true,
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 2,
|
frequency: 2,
|
||||||
frequencyDefault: 2,
|
frequencyDefault: 2,
|
||||||
allowed() {
|
allowed() {
|
||||||
return !tech.isImmuneExplosion && (build.isExperimentSelection || powerUps.research.count > 2) && (tech.haveGunCheck("missiles") || tech.isMissileField || tech.missileBotCount > 0 || tech.isIncendiary || tech.isPulseLaser || tech.isTokamak || (tech.haveGunCheck("grenades") && !tech.isNeutronBomb))
|
return !tech.isImmuneExplosion && (build.isExperimentSelection || powerUps.research.count > 3) && (tech.haveGunCheck("missiles") || tech.isMissileField || tech.missileBotCount > 0 || tech.isIncendiary || tech.isPulseLaser || tech.isTokamak || (tech.haveGunCheck("grenades") && !tech.isNeutronBomb))
|
||||||
},
|
},
|
||||||
requires: "an explosive damage source, not electric reactive armor",
|
requires: "an explosive damage source, not electric reactive armor",
|
||||||
effect: () => {
|
effect: () => {
|
||||||
tech.isSmartRadius = true;
|
tech.isSmartRadius = true;
|
||||||
for (let i = 0; i < 3; i++) {
|
for (let i = 0; i < 4; i++) {
|
||||||
if (powerUps.research.count > 0) powerUps.research.changeRerolls(-1)
|
if (powerUps.research.count > 0) powerUps.research.changeRerolls(-1)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
remove() {
|
remove() {
|
||||||
tech.isSmartRadius = false;
|
tech.isSmartRadius = false;
|
||||||
if (this.count > 0) powerUps.research.changeRerolls(3)
|
if (this.count > 0) powerUps.research.changeRerolls(4)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -4891,25 +4891,6 @@ const tech = {
|
|||||||
b.setGrenadeMode()
|
b.setGrenadeMode()
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
|
||||||
name: "implosion",
|
|
||||||
description: "<strong class='color-e'>explosions</strong> pull objects towards them<br>increase <strong>grenade</strong> radius and <strong class='color-d'>damage</strong> <strong>25%</strong>",
|
|
||||||
isGunTech: true,
|
|
||||||
maxCount: 1,
|
|
||||||
count: 0,
|
|
||||||
frequency: 2,
|
|
||||||
frequencyDefault: 2,
|
|
||||||
allowed() {
|
|
||||||
return tech.haveGunCheck("grenades") && !tech.isExplodeRadio && !tech.isNeutronBomb
|
|
||||||
},
|
|
||||||
requires: "grenades, not iridium-192, neutron bomb",
|
|
||||||
effect: () => {
|
|
||||||
tech.implosion = 1;
|
|
||||||
},
|
|
||||||
remove() {
|
|
||||||
tech.implosion = -1;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
name: "chain reaction",
|
name: "chain reaction",
|
||||||
description: "increase <strong>grenade</strong> radius and <strong class='color-d'>damage</strong> <strong>33%</strong><br><strong class='color-block'>blocks</strong> caught in <strong class='color-e'>explosions</strong> also <strong class='color-e'>explode</strong>",
|
description: "increase <strong>grenade</strong> radius and <strong class='color-d'>damage</strong> <strong>33%</strong><br><strong class='color-block'>blocks</strong> caught in <strong class='color-e'>explosions</strong> also <strong class='color-e'>explode</strong>",
|
||||||
@@ -4938,9 +4919,9 @@ const tech = {
|
|||||||
frequency: 2,
|
frequency: 2,
|
||||||
frequencyDefault: 2,
|
frequencyDefault: 2,
|
||||||
allowed() {
|
allowed() {
|
||||||
return tech.haveGunCheck("grenades") && !tech.isNeutronBomb
|
return tech.haveGunCheck("grenades") && !tech.isNeutronBomb && !tech.isCircleExplode && !tech.isPetalsExplode
|
||||||
},
|
},
|
||||||
requires: "grenades, not neutron bomb",
|
requires: "grenades, not neutron bomb, pyrotechnics, fireworks",
|
||||||
effect() {
|
effect() {
|
||||||
tech.isClusterExplode = true;
|
tech.isClusterExplode = true;
|
||||||
},
|
},
|
||||||
@@ -4957,9 +4938,9 @@ const tech = {
|
|||||||
frequency: 2,
|
frequency: 2,
|
||||||
frequencyDefault: 2,
|
frequencyDefault: 2,
|
||||||
allowed() {
|
allowed() {
|
||||||
return tech.haveGunCheck("grenades") && !tech.isNeutronBomb && tech.isClusterExplode
|
return tech.haveGunCheck("grenades") && !tech.isNeutronBomb && !tech.isClusterExplode && !tech.isPetalsExplode
|
||||||
},
|
},
|
||||||
requires: "grenades, flame test, not neutron bomb",
|
requires: "grenades, not neutron bomb, flame test, fireworks",
|
||||||
effect() {
|
effect() {
|
||||||
tech.isCircleExplode = true;
|
tech.isCircleExplode = true;
|
||||||
},
|
},
|
||||||
@@ -4967,6 +4948,25 @@ const tech = {
|
|||||||
tech.isCircleExplode = false;
|
tech.isCircleExplode = false;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "fireworks",
|
||||||
|
description: "when <strong>grenades</strong> detonate they release<br>colorful rings <strong>petals</strong> of <strong class='color-e'>explosions</strong>",
|
||||||
|
isGunTech: true,
|
||||||
|
maxCount: 1,
|
||||||
|
count: 0,
|
||||||
|
frequency: 2,
|
||||||
|
frequencyDefault: 2,
|
||||||
|
allowed() {
|
||||||
|
return tech.haveGunCheck("grenades") && !tech.isNeutronBomb && !tech.isClusterExplode && !tech.isCircleExplode
|
||||||
|
},
|
||||||
|
requires: "grenades, not neutron bomb, pyrotechnics, flame test",
|
||||||
|
effect() {
|
||||||
|
tech.isPetalsExplode = true;
|
||||||
|
},
|
||||||
|
remove() {
|
||||||
|
tech.isPetalsExplode = false;
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: "neutron bomb",
|
name: "neutron bomb",
|
||||||
description: "<strong>grenades</strong> are <strong class='color-p'>irradiated</strong> with <strong class='color-p'>Cf-252</strong><br>does <strong class='color-d'>damage</strong>, <strong class='color-harm'>harm</strong>, and drains <strong class='color-f'>energy</strong>",
|
description: "<strong>grenades</strong> are <strong class='color-p'>irradiated</strong> with <strong class='color-p'>Cf-252</strong><br>does <strong class='color-d'>damage</strong>, <strong class='color-harm'>harm</strong>, and drains <strong class='color-f'>energy</strong>",
|
||||||
@@ -10185,7 +10185,7 @@ const tech = {
|
|||||||
isNoDraftPause: null,
|
isNoDraftPause: null,
|
||||||
isFoamPressure: null,
|
isFoamPressure: null,
|
||||||
foamDamage: null,
|
foamDamage: null,
|
||||||
implosion: null,
|
|
||||||
isClusterExplode: null,
|
isClusterExplode: null,
|
||||||
isCircleExplode: null
|
isCircleExplode: null,
|
||||||
|
isPetalsExplode: null
|
||||||
}
|
}
|
||||||
38
todo.txt
38
todo.txt
@@ -1,44 +1,22 @@
|
|||||||
******************************************************** NEXT PATCH **************************************************
|
******************************************************** NEXT PATCH **************************************************
|
||||||
|
|
||||||
grenade tech: flame test - grenades release a cluster of smaller explosions
|
grenade now has 3 fireworks options, you can only have 1 at a time
|
||||||
grenade tech: pyrotechnics - grenades release a circle of smaller explosions
|
flame test, fireworks, pyrotechnics
|
||||||
grenade tech: implosion - explosions pull things in, not out, +25% to grenade explosion damage and radius
|
implosion has been removed
|
||||||
chain reaction no longer requires vacuum bomb
|
controlled explosion 3->4 research
|
||||||
bosses and mobs have much less knock back from explosions
|
|
||||||
invulnerable mobs have no knock back
|
|
||||||
|
|
||||||
alternator harpoon/grapple/railgun energy drain reduced by 100->60%
|
base matter wave moves 20% faster
|
||||||
bots no longer unlock tech until you upgrade to a bot type
|
gun science renamed ordnance
|
||||||
JUNK tech rule 30 is now sometimes rule 90 instead
|
|
||||||
disabled testing for why? mode
|
|
||||||
|
|
||||||
wave beam
|
|
||||||
amplitude 50->37% damage
|
|
||||||
propagation 50->37% damage
|
|
||||||
worms
|
|
||||||
annelids 10-120% -> about 37% damage
|
|
||||||
radiation
|
|
||||||
nuclear transmutation stacks 9x
|
|
||||||
gives 70->47% damage per stack
|
|
||||||
explosions
|
|
||||||
ammonium nitrate 27->24% damage and radius
|
|
||||||
|
|
||||||
|
bug fixes
|
||||||
|
|
||||||
******************************************************** TODO ********************************************************
|
******************************************************** TODO ********************************************************
|
||||||
|
|
||||||
buff early matter wave without phonon
|
buff early matter wave without phonon
|
||||||
|
|
||||||
some grenade tech made all the bosses go away and not drop anything
|
|
||||||
check: fireworks, vacuum, stun, chain reaction, implosion
|
|
||||||
|
|
||||||
more fireworks themed grenade tech
|
more fireworks themed grenade tech
|
||||||
shotting star - fire a series of explosions higher and higher up, also increase radius with height
|
shooting star - fire a series of explosions higher and higher up, also increase radius with height
|
||||||
star burst - 5 explosions in star shape
|
|
||||||
delay - explosion in same place
|
|
||||||
pulse
|
|
||||||
30s of lasers
|
|
||||||
|
|
||||||
merge mines and grenades?
|
|
||||||
tech - neutron bombs deal 100% more damage, but finishes detonating much faster
|
tech - neutron bombs deal 100% more damage, but finishes detonating much faster
|
||||||
tech - neutron bombs will explode into a small iridum explosion after it expires
|
tech - neutron bombs will explode into a small iridum explosion after it expires
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user