From 93bdb5e8c3601a1f1fdd6cb6eb1bfb36b91e88ac Mon Sep 17 00:00:00 2001 From: landgreen Date: Wed, 5 May 2021 05:47:54 -0700 Subject: [PATCH] more wave beam adjustments --- .DS_Store | Bin 6148 -> 6148 bytes js/bullet.js | 179 ++++++++++++++++++++++++++------------------------- js/level.js | 10 +-- js/player.js | 2 +- js/tech.js | 54 +++++----------- todo.txt | 9 ++- 6 files changed, 117 insertions(+), 137 deletions(-) diff --git a/.DS_Store b/.DS_Store index c19872b4e834ba5718c8c24d8d3e6a53e65db9db..e9600d714650d25396c0669672f65a35e064432d 100644 GIT binary patch delta 15 WcmZoMXffEJ#mr>+Y_ksY4G{n-tpzmz delta 15 WcmZoMXffEJ#mr 0) dmg *= 0.5 //reduce damage if a wall is in the way mobs.statusDoT(mob[i], dmg * damageScale * 0.25, 240) //apply radiation damage status effect on direct hits + if (tech.isExplosionStun) mobs.statusStun(mob[i], 60) mob[i].locatePlayer(); damageScale *= 0.87 //reduced damage for each additional explosion target } @@ -3614,7 +3615,7 @@ const b = { ammoPack: 75, have: false, wavePacketCycle: 0, - delay: 40, + delay: 45, do() { if (this.wavePacketCycle && !input.fire) { this.wavePacketCycle = 0; @@ -3623,99 +3624,99 @@ const b = { }, damage: 1, fire() { - for (let i = 0; i < 2; i++) { - const me = bullet.length; - bullet[me] = Bodies.polygon(m.pos.x + 25 * Math.cos(m.angle), m.pos.y + 25 * Math.sin(m.angle), 7, 3.5, { - angle: m.angle, - cycle: -0.5, - endCycle: simulation.cycle + Math.floor((tech.waveReflections ? Infinity : 4.3 * tech.wavePacketLength) * tech.isBulletsLastLonger), - inertia: Infinity, - frictionAir: 0, - slow: 0, - amplitude: (m.crouch ? 10 : 20) * Math.sin(this.wavePacketCycle * tech.wavePacketFrequency) * ((i % 2) ? -1 : 1), - minDmgSpeed: 0, - dmg: b.dmgScale * tech.waveBeamDamage * tech.wavePacketDamage, //also control damage when you divide by mob.mass - classType: "bullet", - collisionFilter: { - category: 0, - mask: 0, //cat.mob | cat.mobBullet | cat.mobShield - }, - beforeDmg() {}, - onEnd() {}, - do() {}, - query() { - let slowCheck = 1 - if (Matter.Query.point(map, this.position).length) { //check if inside map - slowCheck = waveSpeedMap - } else { //check if inside a body - let q = Matter.Query.point(body, this.position) - if (q.length) { - slowCheck = waveSpeedBody - Matter.Body.setPosition(this, Vector.add(this.position, q[0].velocity)) //move with the medium - } + totalCycles = Math.floor(4.3 * tech.wavePacketLength * tech.waveReflections * tech.isBulletsLastLonger) + // for (let i = 0; i < 2; i++) { + const me = bullet.length; + bullet[me] = Bodies.polygon(m.pos.x + 25 * Math.cos(m.angle), m.pos.y + 25 * Math.sin(m.angle), 5, 4, { + angle: m.angle, + cycle: -0.5, + endCycle: simulation.cycle + totalCycles, + inertia: Infinity, + frictionAir: 0, + slow: 0, + amplitude: (m.crouch ? 10 : 20) * Math.sin(this.wavePacketCycle * tech.wavePacketFrequency) * ((this.wavePacketCycle % 2) ? -1 : 1), + minDmgSpeed: 0, + dmg: b.dmgScale * tech.waveBeamDamage * tech.wavePacketDamage, //also control damage when you divide by mob.mass + classType: "bullet", + collisionFilter: { + category: 0, + mask: 0, //cat.mob | cat.mobBullet | cat.mobShield + }, + beforeDmg() {}, + onEnd() {}, + do() {}, + query() { + let slowCheck = 1 + if (Matter.Query.point(map, this.position).length) { //check if inside map + slowCheck = waveSpeedMap + } else { //check if inside a body + let q = Matter.Query.point(body, this.position) + if (q.length) { + slowCheck = waveSpeedBody + Matter.Body.setPosition(this, Vector.add(this.position, q[0].velocity)) //move with the medium } - 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), tech.waveBeamSpeed * 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(); + } + 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), tech.waveBeamSpeed * 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 * tech.waveFrequency)) - Matter.Body.setPosition(this, Vector.add(this.position, where)) + //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 * tech.waveFrequency)) + 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 = 100 - 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 - Matter.Body.setVelocity(bullet[me], { - x: tech.waveBeamSpeed * Math.cos(m.angle), - y: tech.waveBeamSpeed * Math.sin(m.angle) - }); - const transverse = Vector.normalise(Vector.perp(bullet[me].velocity)) + let waveSpeedMap = 0.1 + let waveSpeedBody = 0.25 + if (tech.isPhaseVelocity) { + waveSpeedMap = 3 + waveSpeedBody = 1.9 } + if (tech.waveReflections) { + bullet[me].reflectCycle = totalCycles / tech.waveReflections //tech.waveLengthRange + bullet[me].do = function() { + if (!m.isBodiesAsleep) { + this.query() + if (this.cycle > this.reflectCycle) { + this.reflectCycle += totalCycles / tech.waveReflections + Matter.Body.setVelocity(this, Vector.mult(this.velocity, -1)); + // if (this.reflectCycle > tech.waveLengthRange * (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 + Matter.Body.setVelocity(bullet[me], { + x: tech.waveBeamSpeed * Math.cos(m.angle), + y: tech.waveBeamSpeed * Math.sin(m.angle) + }); + const transverse = Vector.normalise(Vector.perp(bullet[me].velocity)) + // } //fire some of bullets then delay for a while this.wavePacketCycle++ if (this.wavePacketCycle > tech.wavePacketLength) { diff --git a/js/level.js b/js/level.js index f0522a9..0654d44 100644 --- a/js/level.js +++ b/js/level.js @@ -15,14 +15,14 @@ const level = { // level.difficultyIncrease(30) // simulation.zoomScale = 1000; // simulation.setZoom(); - // m.setField("nano-scale manufacturing") + // m.setField("metamaterial cloaking") // b.giveGuns("wave beam") // tech.isExplodeRadio = true // tech.giveTech("phase velocity") - // for (let i = 0; i < 3; i++) tech.giveTech("wavelength") - // for (let i = 0; i < 1; i++) tech.giveTech("bound state") - // for (let i = 0; i < 3; i++) tech.giveTech("propagation") - // for (let i = 0; i < 3; i++) tech.giveTech("amplitude") + // for (let i = 0; i < 9; i++) tech.giveTech("packet length") + // for (let i = 0; i < 3; i++) tech.giveTech("bound state") + // for (let i = 0; i < 9; i++) tech.giveTech("propagation") + // for (let i = 0; i < 9; i++) tech.giveTech("amplitude") // tech.isExplodeRadio = true; // tech.isMineSentry = true diff --git a/js/player.js b/js/player.js index e000527..1ec7154 100644 --- a/js/player.js +++ b/js/player.js @@ -1958,7 +1958,7 @@ const m = { //120 cycles after shooting (or using field) enable cloak if (m.energy < 0.05 && m.fireCDcycle < m.cycle && !input.fire) m.fireCDcycle = m.cycle - if (m.fireCDcycle + 50 < m.cycle) { + if (m.fireCDcycle + 50 < m.cycle && !input.fire) { //automatically cloak if not firing if (!m.isCloak) { m.isCloak = true //enter cloak if (tech.isIntangible) { diff --git a/js/tech.js b/js/tech.js index e850ff3..e2440e7 100644 --- a/js/tech.js +++ b/js/tech.js @@ -3614,46 +3614,43 @@ }, { name: "bound state", - description: "instead of dissipating normally
wave packets reflect backwards 2 times", + description: "instead of dissipating normally
wave packets reflect backwards 1 times", isGunTech: true, maxCount: 9, count: 0, frequency: 2, allowed() { - return tech.haveGunCheck("wave beam") && tech.wavePacketLength === 36 + return tech.haveGunCheck("wave beam") }, - requires: "wave beam, not wavelength", + requires: "wave beam", effect() { - tech.waveReflections += 2 - // tech.waveFrequency = 0.2 + tech.waveReflections++ }, remove() { - tech.waveReflections = 0 - // tech.waveFrequency = 0.35 //this is also set in "wavelength" + tech.waveReflections = 1 } }, { - name: "wavelength", + name: "packet length", description: "wave packet length and duration
is increased by 50%", // description: "holding fire allows the wave beam to emits a second packet
at zero ammo cost", isGunTech: true, - maxCount: 9, + maxCount: 3, count: 0, frequency: 2, allowed() { - return tech.haveGunCheck("wave beam") && !tech.waveReflections + return tech.haveGunCheck("wave beam") }, - requires: "wave beam, not bound state", + requires: "wave beam", effect() { - const scale = 1.5 - tech.wavePacketLength *= scale //if you change this to not be 36 update /36 in wave .dmg + const scale = 1.5 - 0.025 * this.count + tech.waveLengthRange *= Math.sqrt(scale) + tech.wavePacketLength *= scale tech.wavePacketFrequency /= scale - // tech.wavePacketLength = tech.wavePacketFrequency * 420 //36 //how many wave packets are released // double this to emit 2 packets - // tech.waveFrequency *= 0.8 }, remove() { tech.wavePacketFrequency = 0.088 //shorten wave packet tech.wavePacketLength = tech.wavePacketFrequency * 408 //36.96 //how many wave packets are released // double this to emit 2 packets - // tech.waveFrequency = 0.35 //this is also set in "bound state" //increase -> shrink amplitude, add more nodes + tech.waveLengthRange = 140; } }, { @@ -3680,7 +3677,7 @@ name: "propagation", description: "wave packet propagation speed is 25% slower
wave damage is increased by 50%", isGunTech: true, - maxCount: 3, + maxCount: 9, count: 0, frequency: 2, allowed() { @@ -3689,11 +3686,11 @@ requires: "wave beam", effect() { tech.waveBeamSpeed *= 0.75; - tech.waveBeamDamage += 0.55 * 0.5 + tech.waveBeamDamage += 1.2 * 0.5 }, remove() { tech.waveBeamSpeed = 10; - tech.waveBeamDamage = 0.55 //this sets base wave beam damage + tech.waveBeamDamage = 1.2 //this sets base wave beam damage } }, { @@ -3714,24 +3711,6 @@ tech.isPhaseVelocity = false; } }, - // { - // name: "imaginary", - // description: "the wavePacket is limited to a single strand
wave damage is increased by 300%", - // isGunTech: true, - // maxCount: 1, - // count: 0, - // frequency: 2, - // allowed() { - // return tech.haveGunCheck("wave beam") - // }, - // requires: "wave beam", - // effect() { - // tech.isImaginaryWave = true - // }, - // remove() { - // tech.isImaginaryWave = false - // } - // }, { name: "cruise missile", description: "missiles travel 63% slower,
but have a 50% larger explosive payload", @@ -6575,4 +6554,5 @@ isImaginaryWave: null, waveBeamSpeed: null, wavePacketAmplitude: null, + waveLengthRange: null, } \ No newline at end of file diff --git a/todo.txt b/todo.txt index c7964c6..2cc4fa7 100644 --- a/todo.txt +++ b/todo.txt @@ -1,11 +1,9 @@ ******************************************************** NEXT PATCH ******************************************************** -several small wave beam tech adjustments +more wave beam balance ******************************************************** BUGS ******************************************************** -power ups don't float up in acid anymore? - 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 @@ -36,11 +34,12 @@ is there a way to check if the player is stuck inside the map or block ******************************************************** TODO ******************************************************** -wave tech: delay similar to foam +wave tech: delay similar to quantum foam + firing makes the entire packet, but with a delay? wave tech: dispersion - add noise and damage to waves wave tech: chirp - amplitude and damage increases towards the end of the wavePacket wave tech: wave bullets are removed after doing damage, but they do something - more damage, explode, freeze, stun radiation + more damage, explode, freeze, tech: mobs that die while frozen produce ice-IX bullets