wave beam rework
community level crossfire has been nerfed a bit **wave beam rework** removed tech: wave packet (this is now the default mode of wave beam) tech: imaginary number - 50% more damage, but the wave is a single strand tech: bound state - wave bullets reflect backwards 2 times now stacks 9 times and works with phase velocity tech: jabbering - wave beam fires another packet if you hold fire also increases wave damage by 25%
This commit is contained in:
190
js/bullet.js
190
js/bullet.js
@@ -3608,33 +3608,33 @@ const b = {
|
|||||||
name: "wave beam",
|
name: "wave beam",
|
||||||
description: "emit a <strong>sine wave</strong> of oscillating particles<br>propagates through <strong>walls</strong>",
|
description: "emit a <strong>sine wave</strong> of oscillating particles<br>propagates through <strong>walls</strong>",
|
||||||
ammo: 0,
|
ammo: 0,
|
||||||
ammoPack: 70,
|
ammoPack: 65,
|
||||||
have: false,
|
have: false,
|
||||||
do() {},
|
packetCounter: 0,
|
||||||
fire() {
|
delay: 72,
|
||||||
m.fireCDcycle = m.cycle + Math.floor(3 * b.fireCD); // cool down
|
do() {
|
||||||
const dir = m.angle
|
if (this.packetCounter && !input.fire) {
|
||||||
const SPEED = 10
|
this.packetCounter++;
|
||||||
let wiggleMag
|
if (this.packetCounter > 36) { // 36 is one wave packet
|
||||||
if (tech.waveHelix === 2) {
|
m.fireCDcycle = m.cycle + Math.floor(this.delay * b.fireCD); // cool down
|
||||||
wiggleMag = (m.crouch ? 6 : 12) * (1 + Math.sin(m.cycle * 0.1))
|
this.packetCounter = 0;
|
||||||
} else {
|
}
|
||||||
wiggleMag = m.crouch ? 6 : 12
|
|
||||||
}
|
}
|
||||||
// const wiggleMag = tech.waveHelix ? (m.crouch ? 6 + 6 * Math.sin(m.cycle * 0.1) : 13 + 13 * Math.sin(m.cycle * 0.1)) : (m.crouch ? 6 : 12)
|
},
|
||||||
const size = 5 * (tech.waveHelix === 1 ? 1 : 0.7)
|
fire() {
|
||||||
for (let i = 0; i < tech.waveHelix; i++) {
|
const SPEED = 10
|
||||||
|
for (let i = 0; i < 2; i++) {
|
||||||
const me = bullet.length;
|
const me = bullet.length;
|
||||||
bullet[me] = Bodies.polygon(m.pos.x + 25 * Math.cos(dir), m.pos.y + 25 * Math.sin(dir), 7, size, {
|
bullet[me] = Bodies.polygon(m.pos.x + 25 * Math.cos(m.angle), m.pos.y + 25 * Math.sin(m.angle), 7, 3.5, {
|
||||||
angle: dir,
|
angle: m.angle,
|
||||||
cycle: -0.5,
|
cycle: -0.5,
|
||||||
endCycle: simulation.cycle + Math.floor((tech.isWaveReflect ? 600 : 120) * tech.isBulletsLastLonger),
|
endCycle: simulation.cycle + Math.floor((tech.waveReflections ? Infinity : 150) * tech.isBulletsLastLonger), // - this.packetCounter + tech.wavePacketLength, //- this.packetCounter + this.packetLength makes the entire packet go away at the same time
|
||||||
inertia: Infinity,
|
inertia: Infinity,
|
||||||
frictionAir: 0,
|
frictionAir: 0,
|
||||||
slow: 0,
|
slow: 0,
|
||||||
|
amplitude: (m.crouch ? 10 : 20) * Math.sin(this.packetCounter * 0.088) * ((i % 2) ? (tech.isImaginaryWave ? 1 : -1) : 1),
|
||||||
minDmgSpeed: 0,
|
minDmgSpeed: 0,
|
||||||
dmg: b.dmgScale * (tech.waveHelix === 1 ? 0.6 : 0.75), //control damage also when you divide by mob.mass
|
dmg: b.dmgScale * 0.5 * (tech.isImaginaryWave ? 3 : 1) * (0.75 + 0.25 * tech.wavePacketLength / 36), //control damage also when you divide by mob.mass
|
||||||
isJustReflected: false,
|
|
||||||
classType: "bullet",
|
classType: "bullet",
|
||||||
collisionFilter: {
|
collisionFilter: {
|
||||||
category: 0,
|
category: 0,
|
||||||
@@ -3642,77 +3642,103 @@ const b = {
|
|||||||
},
|
},
|
||||||
beforeDmg() {},
|
beforeDmg() {},
|
||||||
onEnd() {},
|
onEnd() {},
|
||||||
do() {
|
do() {},
|
||||||
if (!m.isBodiesAsleep) {
|
query() {
|
||||||
if (tech.isWaveReflect) {
|
let slowCheck = 1
|
||||||
// check if inside a mob
|
if (Matter.Query.point(map, this.position).length) { //check if inside map
|
||||||
q = Matter.Query.point(mob, this.position)
|
slowCheck = waveSpeedMap
|
||||||
for (let i = 0; i < q.length; i++) {
|
} else { //check if inside a body
|
||||||
let dmg = this.dmg / Math.min(10, q[i].mass)
|
let q = Matter.Query.point(body, this.position)
|
||||||
q[i].damage(dmg);
|
if (q.length) {
|
||||||
q[i].foundPlayer();
|
slowCheck = waveSpeedBody
|
||||||
simulation.drawList.push({ //add dmg to draw queue
|
Matter.Body.setPosition(this, Vector.add(this.position, q[0].velocity)) //move with the medium
|
||||||
x: this.position.x,
|
|
||||||
y: this.position.y,
|
|
||||||
radius: Math.log(2 * dmg + 1.1) * 40,
|
|
||||||
color: 'rgba(0,0,0,0.4)',
|
|
||||||
time: simulation.drawTime
|
|
||||||
});
|
|
||||||
}
|
|
||||||
Matter.Body.setPosition(this, Vector.add(this.position, player.velocity)) //bullets move with player
|
|
||||||
const sub = Vector.sub(this.position, m.pos)
|
|
||||||
const range = 558 //93 * x
|
|
||||||
if (Vector.magnitude(sub) > range) {
|
|
||||||
// Matter.Body.setPosition(this, Vector.sub(this.position, Vector.mult(Vector.normalise(sub), 2 * range))) //teleport to opposite side
|
|
||||||
Matter.Body.setVelocity(this, Vector.mult(this.velocity, -1));
|
|
||||||
Matter.Body.setPosition(this, Vector.add(m.pos, Vector.mult(Vector.normalise(sub), range))) //reflect
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
let slowCheck = 1
|
|
||||||
if (Matter.Query.point(map, this.position).length) { //check if inside map
|
|
||||||
slowCheck = tech.waveSpeedMap
|
|
||||||
} else { //check if inside a body
|
|
||||||
let q = Matter.Query.point(body, this.position)
|
|
||||||
if (q.length) {
|
|
||||||
slowCheck = tech.waveSpeedBody
|
|
||||||
Matter.Body.setPosition(this, Vector.add(this.position, q[0].velocity)) //move with the medium
|
|
||||||
} else { // check if inside a mob
|
|
||||||
q = Matter.Query.point(mob, this.position)
|
|
||||||
for (let i = 0; i < q.length; i++) {
|
|
||||||
slowCheck = 0.3;
|
|
||||||
Matter.Body.setPosition(this, Vector.add(this.position, q[i].velocity)) //move with the medium
|
|
||||||
let dmg = this.dmg / Math.min(10, q[i].mass)
|
|
||||||
q[i].damage(dmg);
|
|
||||||
q[i].foundPlayer();
|
|
||||||
simulation.drawList.push({ //add dmg to draw queue
|
|
||||||
x: this.position.x,
|
|
||||||
y: this.position.y,
|
|
||||||
radius: Math.log(2 * dmg + 1.1) * 40,
|
|
||||||
color: 'rgba(0,0,0,0.4)',
|
|
||||||
time: simulation.drawTime
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (slowCheck !== this.slow) { //toggle velocity based on inside and outside status change
|
|
||||||
this.slow = slowCheck
|
|
||||||
Matter.Body.setVelocity(this, Vector.mult(Vector.normalise(this.velocity), SPEED * slowCheck));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
this.cycle++
|
// else { // check if inside a mob
|
||||||
//6 * Math.cos(this.cycle * 0.1) +
|
// q = Matter.Query.point(mob, this.position)
|
||||||
// Math.cos(simulation.cycle * 0.09) *
|
// for (let i = 0; i < q.length; i++) {
|
||||||
const wiggle = Vector.mult(transverse, wiggleMag * Math.cos(this.cycle * 0.35) * ((i % 2) ? -1 : 1))
|
// slowCheck = 0.3;
|
||||||
Matter.Body.setPosition(this, Vector.add(this.position, wiggle))
|
// Matter.Body.setPosition(this, Vector.add(this.position, q[i].velocity)) //move with the medium
|
||||||
|
// let dmg = this.dmg / Math.min(10, q[i].mass)
|
||||||
|
// q[i].damage(dmg);
|
||||||
|
// q[i].foundPlayer();
|
||||||
|
// simulation.drawList.push({ //add dmg to draw queue
|
||||||
|
// x: this.position.x,
|
||||||
|
// y: this.position.y,
|
||||||
|
// radius: Math.log(2 * dmg + 1.1) * 40,
|
||||||
|
// color: 'rgba(0,0,0,0.4)',
|
||||||
|
// time: simulation.drawTime
|
||||||
|
// });
|
||||||
|
// }
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
|
if (slowCheck !== this.slow) { //toggle velocity based on inside and outside status change
|
||||||
|
this.slow = slowCheck
|
||||||
|
Matter.Body.setVelocity(this, Vector.mult(Vector.normalise(this.velocity), SPEED * slowCheck));
|
||||||
|
}
|
||||||
|
q = Matter.Query.point(mob, this.position) // check if inside a mob
|
||||||
|
for (let i = 0; i < q.length; i++) {
|
||||||
|
let dmg = this.dmg / Math.min(10, q[i].mass)
|
||||||
|
q[i].damage(dmg);
|
||||||
|
q[i].foundPlayer();
|
||||||
|
|
||||||
|
//this draw circle had to be remove to reduce lag
|
||||||
|
// simulation.drawList.push({ //add dmg to draw queue
|
||||||
|
// x: this.position.x,
|
||||||
|
// y: this.position.y,
|
||||||
|
// radius: Math.log(2 * dmg + 1.1) * 40,
|
||||||
|
// color: 'rgba(0,0,0,0.4)',
|
||||||
|
// time: simulation.drawTime
|
||||||
|
// });
|
||||||
|
}
|
||||||
|
},
|
||||||
|
wiggle() {
|
||||||
|
this.cycle++
|
||||||
|
const where = Vector.mult(transverse, this.amplitude * Math.cos(this.cycle * 0.35))
|
||||||
|
Matter.Body.setPosition(this, Vector.add(this.position, where))
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
let waveSpeedMap = 0.1
|
||||||
|
let waveSpeedBody = 0.25
|
||||||
|
if (tech.isPhaseVelocity) {
|
||||||
|
waveSpeedMap = 3
|
||||||
|
waveSpeedBody = 1.9
|
||||||
|
}
|
||||||
|
if (tech.waveReflections) {
|
||||||
|
const range = 120
|
||||||
|
bullet[me].reflectCycle = range
|
||||||
|
bullet[me].do = function() {
|
||||||
|
if (!m.isBodiesAsleep) {
|
||||||
|
this.query()
|
||||||
|
if (this.cycle > this.reflectCycle) {
|
||||||
|
this.reflectCycle += range
|
||||||
|
Matter.Body.setVelocity(this, Vector.mult(this.velocity, -1));
|
||||||
|
if (this.reflectCycle > range * (1 + tech.waveReflections)) this.endCycle = 0;
|
||||||
|
}
|
||||||
|
this.wiggle()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
bullet[me].do = function() {
|
||||||
|
if (!m.isBodiesAsleep) {
|
||||||
|
this.query()
|
||||||
|
this.wiggle();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
World.add(engine.world, bullet[me]); //add bullet to world
|
World.add(engine.world, bullet[me]); //add bullet to world
|
||||||
Matter.Body.setVelocity(bullet[me], {
|
Matter.Body.setVelocity(bullet[me], {
|
||||||
x: SPEED * Math.cos(dir),
|
x: SPEED * Math.cos(m.angle),
|
||||||
y: SPEED * Math.sin(dir)
|
y: SPEED * Math.sin(m.angle)
|
||||||
});
|
});
|
||||||
const transverse = Vector.normalise(Vector.perp(bullet[me].velocity))
|
const transverse = Vector.normalise(Vector.perp(bullet[me].velocity))
|
||||||
|
// const transverse = Vector.normalise(player.velocity)
|
||||||
|
}
|
||||||
|
//fire some of bullets then delay for a while
|
||||||
|
this.packetCounter++
|
||||||
|
if (this.packetCounter > tech.wavePacketLength) {
|
||||||
|
m.fireCDcycle = m.cycle + Math.floor(this.delay * b.fireCD); // cool down
|
||||||
|
this.packetCounter = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}, {
|
}, {
|
||||||
|
|||||||
67
js/level.js
67
js/level.js
@@ -20,10 +20,10 @@ const level = {
|
|||||||
// b.giveGuns("laser")
|
// b.giveGuns("laser")
|
||||||
// tech.isExplodeRadio = true
|
// tech.isExplodeRadio = true
|
||||||
// for (let i = 0; i < 9; i++) tech.giveTech("auto-loading heuristics")
|
// for (let i = 0; i < 9; i++) tech.giveTech("auto-loading heuristics")
|
||||||
// tech.giveTech("pulse")
|
// for (let i = 0; i < 2; i++) tech.giveTech("bound state")
|
||||||
// tech.giveTech("ice crystal nucleation")
|
// for (let i = 0; i < 9; i++) tech.giveTech("jabbering")
|
||||||
// tech.giveTech("needle gun")
|
// tech.giveTech("phase velocity")
|
||||||
// tech.giveTech("cardinality")
|
// tech.giveTech("imaginary number")
|
||||||
// tech.giveTech("Bayesian statistics")
|
// tech.giveTech("Bayesian statistics")
|
||||||
// tech.isExplodeRadio = true;
|
// tech.isExplodeRadio = true;
|
||||||
|
|
||||||
@@ -1116,10 +1116,10 @@ const level = {
|
|||||||
// spawn.shooterBoss(1900, -500)
|
// spawn.shooterBoss(1900, -500)
|
||||||
// spawn.launcherBoss(1200, -500)
|
// spawn.launcherBoss(1200, -500)
|
||||||
// spawn.laserTargetingBoss(1600, -400)
|
// spawn.laserTargetingBoss(1600, -400)
|
||||||
// spawn.striker(1600, -500)
|
spawn.striker(1600, -500)
|
||||||
// spawn.laserTargetingBoss(1700, -120)
|
// spawn.laserTargetingBoss(1700, -120)
|
||||||
// spawn.bomberBoss(1400, -500)
|
// spawn.bomberBoss(1400, -500)
|
||||||
spawn.ghoster(1800, -120)
|
// spawn.ghoster(1800, -120)
|
||||||
// spawn.streamBoss(1600, -500)
|
// spawn.streamBoss(1600, -500)
|
||||||
// spawn.orbitalBoss(1600, -500)
|
// spawn.orbitalBoss(1600, -500)
|
||||||
// spawn.cellBossCulture(1600, -500)
|
// spawn.cellBossCulture(1600, -500)
|
||||||
@@ -4619,9 +4619,9 @@ const level = {
|
|||||||
crossfire() {
|
crossfire() {
|
||||||
//*1.5
|
//*1.5
|
||||||
//Level Setup
|
//Level Setup
|
||||||
const slimePitOne = level.hazard(0, 850, 3800, 120, 25);
|
const slimePitOne = level.hazard(0, 850, 3800, 120);
|
||||||
const slimePitTwo = level.hazard(4600, 430, 2000, 120, 35);
|
const slimePitTwo = level.hazard(4600, 430, 2000, 120);
|
||||||
const slimePitThree = level.hazard(6500, 200, 1000, 170, 50);
|
const slimePitThree = level.hazard(6500, 200, 1000, 170);
|
||||||
|
|
||||||
level.custom = () => {
|
level.custom = () => {
|
||||||
slimePitOne.query();
|
slimePitOne.query();
|
||||||
@@ -4701,27 +4701,27 @@ const level = {
|
|||||||
|
|
||||||
//Mob Spawning
|
//Mob Spawning
|
||||||
spawn.randomMob(200, 400, 0.7);
|
spawn.randomMob(200, 400, 0.7);
|
||||||
spawn.randomMob(1200, 400, 0.7);
|
// spawn.randomMob(1200, 400, 0.7);
|
||||||
spawn.randomMob(2000, 400, 0.7);
|
spawn.randomMob(2000, 400, 0.7);
|
||||||
spawn.randomMob(3000, 400, 0.7);
|
// spawn.randomMob(3000, 400, 0.7);
|
||||||
spawn.randomMob(5000, 0, 0.7);
|
spawn.randomMob(5000, 0, 0.7);
|
||||||
spawn.randomMob(5600, 0, 0.7);
|
spawn.randomMob(5600, 0, 0.7);
|
||||||
spawn.randomMob(6200, -200, 0.7);
|
spawn.randomMob(6200, -200, 0.7);
|
||||||
spawn.randomMob(6600, -200, 0.7);
|
// spawn.randomMob(6600, -200, 0.7);
|
||||||
spawn.randomMob(7200, -800, 0.7);
|
spawn.randomMob(7200, -800, 0.7);
|
||||||
spawn.randomSmallMob(800, 400, 0.9);
|
spawn.randomSmallMob(800, 400, 0.9);
|
||||||
spawn.randomSmallMob(1800, 400, 0.9);
|
spawn.randomSmallMob(1800, 400, 0.9);
|
||||||
spawn.randomSmallMob(2600, 400, 0.9);
|
// spawn.randomSmallMob(2600, 400, 0.9);
|
||||||
spawn.randomSmallMob(5200, 0, 0.9);
|
spawn.randomSmallMob(5200, 0, 0.9);
|
||||||
spawn.randomSmallMob(5400, 0, 0.9);
|
// spawn.randomSmallMob(5400, 0, 0.9);
|
||||||
spawn.randomSmallMob(6400, -200, 0.9);
|
spawn.randomSmallMob(6400, -200, 0.9);
|
||||||
spawn.randomGroup(3800, 400, 0.5);
|
spawn.randomGroup(3800, 400, 0.5);
|
||||||
spawn.randomGroup(4200, 400, 0.5);
|
spawn.randomGroup(4200, 400, 0.5);
|
||||||
spawn.randomGroup(4400, 200, 0.5);
|
// spawn.randomGroup(4400, 200, 0.5);
|
||||||
spawn.randomGroup(7000, -800, 0.5);
|
spawn.randomGroup(7000, -800, 0.5);
|
||||||
spawn.randomGroup(7700, 300, 0.5);
|
// spawn.randomGroup(7700, 300, 0.5);
|
||||||
spawn.randomGroup(9800, 300, 0.5);
|
spawn.randomGroup(9800, 300, 0.5);
|
||||||
spawn.randomGroup(7700, -1100, 0.5);
|
// spawn.randomGroup(7700, -1100, 0.5);
|
||||||
spawn.randomGroup(9800, -1100, 0.5);
|
spawn.randomGroup(9800, -1100, 0.5);
|
||||||
|
|
||||||
if (simulation.difficulty > 10) {
|
if (simulation.difficulty > 10) {
|
||||||
@@ -4732,21 +4732,19 @@ const level = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//Boss Spawning
|
//Boss Spawning
|
||||||
spawn.pulsarBoss(-400, -200);
|
if (simulation.difficulty > 20) {
|
||||||
if (simulation.difficulty > 25) {
|
spawn.pulsarBoss(-400, -200);
|
||||||
spawn.pulsarBoss(3600, -400);
|
|
||||||
if (simulation.difficulty > 40) {
|
if (simulation.difficulty > 40) {
|
||||||
spawn.pulsarBoss(4200, 1000);
|
spawn.pulsarBoss(3600, -400);
|
||||||
if (simulation.difficulty > 65) {
|
if (simulation.difficulty > 60) {
|
||||||
spawn.pulsarBoss(5800, -1200);
|
spawn.pulsarBoss(4200, 1000);
|
||||||
spawn.pulsarBoss(-400, -200);
|
if (simulation.difficulty > 80) {
|
||||||
if (simulation.difficulty > 85) {
|
spawn.pulsarBoss(5800, -1200);
|
||||||
spawn.pulsarBoss(3600, -400);
|
if (simulation.difficulty > 100) {
|
||||||
spawn.pulsarBoss(4200, 1000);
|
|
||||||
if (simulation.difficulty > 115) {
|
|
||||||
spawn.pulsarBoss(5800, -1200);
|
|
||||||
spawn.pulsarBoss(-400, -200);
|
spawn.pulsarBoss(-400, -200);
|
||||||
spawn.pulsarBoss(3600, -400);
|
if (simulation.difficulty > 120) {
|
||||||
|
spawn.pulsarBoss(3600, -400);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -4756,10 +4754,11 @@ const level = {
|
|||||||
//Powerup Spawning
|
//Powerup Spawning
|
||||||
powerUps.spawnStartingPowerUps(4000, 400);
|
powerUps.spawnStartingPowerUps(4000, 400);
|
||||||
powerUps.spawnStartingPowerUps(4400, 400);
|
powerUps.spawnStartingPowerUps(4400, 400);
|
||||||
powerUps.chooseRandomPowerUp(4000, 400);
|
powerUps.chooseRandomPowerUp(4002, 400);
|
||||||
powerUps.chooseRandomPowerUp(4000, 400);
|
powerUps.chooseRandomPowerUp(4004, 400);
|
||||||
powerUps.chooseRandomPowerUp(4400, 400);
|
powerUps.chooseRandomPowerUp(4006, 400);
|
||||||
powerUps.chooseRandomPowerUp(4400, 400);
|
powerUps.chooseRandomPowerUp(4407, 400);
|
||||||
|
powerUps.chooseRandomPowerUp(4409, 400);
|
||||||
powerUps.addRerollToLevel(); //needs to run after mobs are spawned
|
powerUps.addRerollToLevel(); //needs to run after mobs are spawned
|
||||||
|
|
||||||
//Block Spawning
|
//Block Spawning
|
||||||
|
|||||||
@@ -1010,7 +1010,7 @@ const simulation = {
|
|||||||
ctx.beginPath();
|
ctx.beginPath();
|
||||||
for (let i = 0, len = cons.length; i < len; ++i) {
|
for (let i = 0, len = cons.length; i < len; ++i) {
|
||||||
ctx.moveTo(cons[i].pointA.x, cons[i].pointA.y);
|
ctx.moveTo(cons[i].pointA.x, cons[i].pointA.y);
|
||||||
ctx.lineTo(cons[i].bodyB.position.x, cons[i].bodyB.position.y);
|
// ctx.lineTo(cons[i].bodyB.position.x, cons[i].bodyB.position.y);
|
||||||
ctx.lineTo(cons[i].bodyB.position.x + cons[i].pointB.x, cons[i].bodyB.position.y + cons[i].pointB.y);
|
ctx.lineTo(cons[i].bodyB.position.x + cons[i].pointB.x, cons[i].bodyB.position.y + cons[i].pointB.y);
|
||||||
}
|
}
|
||||||
for (let i = 0, len = consBB.length; i < len; ++i) {
|
for (let i = 0, len = consBB.length; i < len; ++i) {
|
||||||
|
|||||||
57
js/tech.js
57
js/tech.js
@@ -3613,10 +3613,10 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "wave packet",
|
name: "jabbering",
|
||||||
description: "<strong>wave beam</strong> emits <strong>two</strong> oscillating particles<br>decrease wave <strong class='color-d'>damage</strong> by <strong>20%</strong>",
|
description: "<strong>wave beam</strong> generates another <strong>packet</strong><br>wave <strong class='color-d'>damage</strong> is increased by <strong>25%</strong>",
|
||||||
isGunTech: true,
|
isGunTech: true,
|
||||||
maxCount: 1,
|
maxCount: 9,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 2,
|
frequency: 2,
|
||||||
allowed() {
|
allowed() {
|
||||||
@@ -3624,10 +3624,10 @@
|
|||||||
},
|
},
|
||||||
requires: "wave beam",
|
requires: "wave beam",
|
||||||
effect() {
|
effect() {
|
||||||
tech.waveHelix = 2
|
tech.wavePacketLength += 36 //if you change this to not be 36 update /36 in wave .dmg
|
||||||
},
|
},
|
||||||
remove() {
|
remove() {
|
||||||
tech.waveHelix = 1
|
tech.wavePacketLength = 36
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -3638,39 +3638,56 @@
|
|||||||
count: 0,
|
count: 0,
|
||||||
frequency: 2,
|
frequency: 2,
|
||||||
allowed() {
|
allowed() {
|
||||||
return tech.haveGunCheck("wave beam") && !tech.isWaveReflect
|
return tech.haveGunCheck("wave beam")
|
||||||
},
|
},
|
||||||
requires: "wave beam",
|
requires: "wave beam",
|
||||||
effect() {
|
effect() {
|
||||||
tech.waveSpeedMap = 3 //needs to be 3 to stop bound state require check
|
tech.isPhaseVelocity = true;
|
||||||
tech.waveSpeedBody = 1.9
|
|
||||||
},
|
},
|
||||||
remove() {
|
remove() {
|
||||||
tech.waveSpeedMap = 0.08
|
tech.isPhaseVelocity = false;
|
||||||
tech.waveSpeedBody = 0.25
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "bound state",
|
name: "bound state",
|
||||||
description: "<strong>wave beam</strong> bullets last <strong>5x</strong> longer<br>bullets are <strong>bound</strong> to a <strong>region</strong> around player",
|
description: "instead of dissipating normally<br><strong>wave beam</strong> bullets <strong>reflect</strong> backwards <strong>2</strong> times",
|
||||||
isGunTech: true,
|
isGunTech: true,
|
||||||
maxCount: 1,
|
maxCount: 9,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 2,
|
frequency: 2,
|
||||||
allowed() {
|
allowed() {
|
||||||
return tech.haveGunCheck("wave beam") && tech.waveSpeedMap !== 3
|
return tech.haveGunCheck("wave beam")
|
||||||
},
|
},
|
||||||
requires: "wave beam",
|
requires: "wave beam",
|
||||||
effect() {
|
effect() {
|
||||||
tech.isWaveReflect = true
|
tech.waveReflections += 2
|
||||||
},
|
},
|
||||||
remove() {
|
remove() {
|
||||||
tech.isWaveReflect = false
|
tech.waveReflections = 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "imaginary number",
|
||||||
|
description: "the <strong>wave beam</strong> is limited to a <strong>single</strong> strand<br><strong class='color-d'>damage</strong> is increased by <strong>300%</strong>",
|
||||||
|
isGunTech: true,
|
||||||
|
maxCount: 9,
|
||||||
|
count: 0,
|
||||||
|
frequency: 2,
|
||||||
|
allowed() {
|
||||||
|
return tech.haveGunCheck("wave beam")
|
||||||
|
},
|
||||||
|
requires: "wave beam",
|
||||||
|
effect() {
|
||||||
|
tech.isImaginaryWave = true
|
||||||
|
},
|
||||||
|
remove() {
|
||||||
|
tech.isImaginaryWave = false
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "cruise missile",
|
name: "cruise missile",
|
||||||
description: "<strong>missiles</strong> travel <strong>50%</strong> slower,<br>but have a <strong>50%</strong> larger <strong class='color-e'>explosive</strong> payload",
|
description: "<strong>missiles</strong> travel <strong>63%</strong> slower,<br>but have a <strong>50%</strong> larger <strong class='color-e'>explosive</strong> payload",
|
||||||
isGunTech: true,
|
isGunTech: true,
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
@@ -6330,8 +6347,6 @@
|
|||||||
isEnergyLoss: null,
|
isEnergyLoss: null,
|
||||||
isDeathAvoid: null,
|
isDeathAvoid: null,
|
||||||
isDeathAvoidedThisLevel: null,
|
isDeathAvoidedThisLevel: null,
|
||||||
waveSpeedMap: null,
|
|
||||||
waveSpeedBody: null,
|
|
||||||
isSporeField: null,
|
isSporeField: null,
|
||||||
isMissileField: null,
|
isMissileField: null,
|
||||||
isIceField: null,
|
isIceField: null,
|
||||||
@@ -6350,7 +6365,6 @@
|
|||||||
isEnergyDamage: null,
|
isEnergyDamage: null,
|
||||||
botSpawner: null,
|
botSpawner: null,
|
||||||
isBotSpawnerReset: null,
|
isBotSpawnerReset: null,
|
||||||
waveHelix: null,
|
|
||||||
isSporeFollow: null,
|
isSporeFollow: null,
|
||||||
isNailRadiation: null,
|
isNailRadiation: null,
|
||||||
isEnergyHealth: null,
|
isEnergyHealth: null,
|
||||||
@@ -6506,5 +6520,8 @@
|
|||||||
isDroneRespawn: null,
|
isDroneRespawn: null,
|
||||||
deathSpawns: null,
|
deathSpawns: null,
|
||||||
isMobBlockFling: null,
|
isMobBlockFling: null,
|
||||||
blockingIce: null
|
blockingIce: null,
|
||||||
|
isPhaseVelocity: null,
|
||||||
|
wavePacketLength: null,
|
||||||
|
isImaginaryWave: null
|
||||||
}
|
}
|
||||||
44
todo.txt
44
todo.txt
@@ -1,10 +1,23 @@
|
|||||||
******************************************************** NEXT PATCH ********************************************************
|
******************************************************** NEXT PATCH ********************************************************
|
||||||
|
|
||||||
some bot related tech is no longer nonRefundable
|
community level crossfire has been nerfed a bit
|
||||||
nonRefundable tech is now hidden in experiment mode
|
|
||||||
|
**wave beam rework**
|
||||||
|
|
||||||
|
removed tech: wave packet (this is now the default mode of wave beam)
|
||||||
|
tech: imaginary number - 50% more damage, but the wave is a single strand
|
||||||
|
|
||||||
|
tech: bound state - wave bullets reflect backwards 2 times
|
||||||
|
now stacks 9 times and works with phase velocity
|
||||||
|
|
||||||
|
tech: jabbering - wave beam fires another packet if you hold fire
|
||||||
|
also increases wave damage by 25%
|
||||||
|
|
||||||
|
|
||||||
******************************************************** BUGS ********************************************************
|
******************************************************** BUGS ********************************************************
|
||||||
|
|
||||||
|
wave beam shouldn't hit level.boost
|
||||||
|
|
||||||
increase the width on the grid by a few pixels so that very small screens or people with odd fonts don't goto a new line
|
increase the width on the grid by a few pixels so that very small screens or people with odd fonts don't goto a new line
|
||||||
|
|
||||||
you have to press z once to get copy to work for simulation.enableConstructMode() sometimes
|
you have to press z once to get copy to work for simulation.enableConstructMode() sometimes
|
||||||
@@ -35,9 +48,28 @@ is there a way to check if the player is stuck inside the map or block
|
|||||||
|
|
||||||
******************************************************** TODO ********************************************************
|
******************************************************** TODO ********************************************************
|
||||||
|
|
||||||
avoid taking collision damage by teleporting to a random power up
|
tech: picking up heal power ups when at full health does harm equal to the heal values
|
||||||
removes the power up
|
benefit on pick up:
|
||||||
what if you get stuck?
|
get ammo
|
||||||
|
get 1% duplication
|
||||||
|
get 1% damage permanent
|
||||||
|
|
||||||
|
nail-gun, or ....
|
||||||
|
1s after being fired your bullets turn:
|
||||||
|
towards the nearest mob
|
||||||
|
in your mouse direction
|
||||||
|
back towards the player
|
||||||
|
current location or location when fired?
|
||||||
|
explode when turning back
|
||||||
|
|
||||||
|
Tech: "Quantum Tunneling" Foam travels through blocks and walls 50% faster.
|
||||||
|
|
||||||
|
wave beam needs another tech
|
||||||
|
bullets slowly get bigger?
|
||||||
|
also increase collision detection range
|
||||||
|
reduce ammo, increase damage
|
||||||
|
longitudinal vibration, increase damage
|
||||||
|
|
||||||
|
|
||||||
make a tech that improves all charge guns
|
make a tech that improves all charge guns
|
||||||
for: pulse, foam, rail gun
|
for: pulse, foam, rail gun
|
||||||
@@ -51,6 +83,7 @@ apply the new gun.do functions to other guns
|
|||||||
rail gun
|
rail gun
|
||||||
crouching missile?
|
crouching missile?
|
||||||
works similar to foam
|
works similar to foam
|
||||||
|
performance issues?
|
||||||
|
|
||||||
|
|
||||||
tech plasma field - plasma field becomes an aoe damage field with the same radius
|
tech plasma field - plasma field becomes an aoe damage field with the same radius
|
||||||
@@ -334,6 +367,7 @@ possible names for tech
|
|||||||
Gödel's incompleteness
|
Gödel's incompleteness
|
||||||
dynamical systems
|
dynamical systems
|
||||||
quantum zeno effect (perturbation of a system prevents some systems from evolving because it scrambles coherence) (apply to lasers, fields)
|
quantum zeno effect (perturbation of a system prevents some systems from evolving because it scrambles coherence) (apply to lasers, fields)
|
||||||
|
counterfactual - something false
|
||||||
|
|
||||||
|
|
||||||
plot script:
|
plot script:
|
||||||
|
|||||||
Reference in New Issue
Block a user