diff --git a/.DS_Store b/.DS_Store
index c19872b..e9600d7 100644
Binary files a/.DS_Store and b/.DS_Store differ
diff --git a/js/bullet.js b/js/bullet.js
index 44b0e78..8e83493 100644
--- a/js/bullet.js
+++ b/js/bullet.js
@@ -342,6 +342,7 @@ const b = {
if (mob[i].shield) dmg *= 2.5 //balancing explosion dmg to shields
if (Matter.Query.ray(map, mob[i].position, where).length > 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