more wave beam adjustments

This commit is contained in:
landgreen
2021-05-05 05:47:54 -07:00
parent c10e110a5d
commit 93bdb5e8c3
6 changed files with 117 additions and 137 deletions

BIN
.DS_Store vendored

Binary file not shown.

View File

@@ -342,6 +342,7 @@ const b = {
if (mob[i].shield) dmg *= 2.5 //balancing explosion dmg to shields 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 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 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(); mob[i].locatePlayer();
damageScale *= 0.87 //reduced damage for each additional explosion target damageScale *= 0.87 //reduced damage for each additional explosion target
} }
@@ -3614,7 +3615,7 @@ const b = {
ammoPack: 75, ammoPack: 75,
have: false, have: false,
wavePacketCycle: 0, wavePacketCycle: 0,
delay: 40, delay: 45,
do() { do() {
if (this.wavePacketCycle && !input.fire) { if (this.wavePacketCycle && !input.fire) {
this.wavePacketCycle = 0; this.wavePacketCycle = 0;
@@ -3623,99 +3624,99 @@ const b = {
}, },
damage: 1, damage: 1,
fire() { fire() {
for (let i = 0; i < 2; i++) { totalCycles = Math.floor(4.3 * tech.wavePacketLength * tech.waveReflections * tech.isBulletsLastLonger)
const me = bullet.length; // for (let i = 0; i < 2; i++) {
bullet[me] = Bodies.polygon(m.pos.x + 25 * Math.cos(m.angle), m.pos.y + 25 * Math.sin(m.angle), 7, 3.5, { const me = bullet.length;
angle: m.angle, bullet[me] = Bodies.polygon(m.pos.x + 25 * Math.cos(m.angle), m.pos.y + 25 * Math.sin(m.angle), 5, 4, {
cycle: -0.5, angle: m.angle,
endCycle: simulation.cycle + Math.floor((tech.waveReflections ? Infinity : 4.3 * tech.wavePacketLength) * tech.isBulletsLastLonger), cycle: -0.5,
inertia: Infinity, endCycle: simulation.cycle + totalCycles,
frictionAir: 0, inertia: Infinity,
slow: 0, frictionAir: 0,
amplitude: (m.crouch ? 10 : 20) * Math.sin(this.wavePacketCycle * tech.wavePacketFrequency) * ((i % 2) ? -1 : 1), slow: 0,
minDmgSpeed: 0, amplitude: (m.crouch ? 10 : 20) * Math.sin(this.wavePacketCycle * tech.wavePacketFrequency) * ((this.wavePacketCycle % 2) ? -1 : 1),
dmg: b.dmgScale * tech.waveBeamDamage * tech.wavePacketDamage, //also control damage when you divide by mob.mass minDmgSpeed: 0,
classType: "bullet", dmg: b.dmgScale * tech.waveBeamDamage * tech.wavePacketDamage, //also control damage when you divide by mob.mass
collisionFilter: { classType: "bullet",
category: 0, collisionFilter: {
mask: 0, //cat.mob | cat.mobBullet | cat.mobShield category: 0,
}, mask: 0, //cat.mob | cat.mobBullet | cat.mobShield
beforeDmg() {}, },
onEnd() {}, beforeDmg() {},
do() {}, onEnd() {},
query() { do() {},
let slowCheck = 1 query() {
if (Matter.Query.point(map, this.position).length) { //check if inside map let slowCheck = 1
slowCheck = waveSpeedMap if (Matter.Query.point(map, this.position).length) { //check if inside map
} else { //check if inside a body slowCheck = waveSpeedMap
let q = Matter.Query.point(body, this.position) } else { //check if inside a body
if (q.length) { let q = Matter.Query.point(body, this.position)
slowCheck = waveSpeedBody if (q.length) {
Matter.Body.setPosition(this, Vector.add(this.position, q[0].velocity)) //move with the medium 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 if (slowCheck !== this.slow) { //toggle velocity based on inside and outside status change
Matter.Body.setVelocity(this, Vector.mult(Vector.normalise(this.velocity), tech.waveBeamSpeed * slowCheck)); 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++) { q = Matter.Query.point(mob, this.position) // check if inside a mob
let dmg = this.dmg / Math.min(10, q[i].mass) for (let i = 0; i < q.length; i++) {
q[i].damage(dmg); let dmg = this.dmg / Math.min(10, q[i].mass)
q[i].foundPlayer(); q[i].damage(dmg);
q[i].foundPlayer();
//this draw circle had to be remove to reduce lag //this draw circle had to be remove to reduce lag
// simulation.drawList.push({ //add dmg to draw queue // simulation.drawList.push({ //add dmg to draw queue
// x: this.position.x, // x: this.position.x,
// y: this.position.y, // y: this.position.y,
// radius: Math.log(2 * dmg + 1.1) * 40, // radius: Math.log(2 * dmg + 1.1) * 40,
// color: 'rgba(0,0,0,0.4)', // color: 'rgba(0,0,0,0.4)',
// time: simulation.drawTime // 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))
} }
}); },
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 waveSpeedMap = 0.1
let waveSpeedBody = 0.25 let waveSpeedBody = 0.25
if (tech.isPhaseVelocity) { if (tech.isPhaseVelocity) {
waveSpeedMap = 3 waveSpeedMap = 3
waveSpeedBody = 1.9 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))
} }
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 //fire some of bullets then delay for a while
this.wavePacketCycle++ this.wavePacketCycle++
if (this.wavePacketCycle > tech.wavePacketLength) { if (this.wavePacketCycle > tech.wavePacketLength) {

View File

@@ -15,14 +15,14 @@ const level = {
// level.difficultyIncrease(30) // level.difficultyIncrease(30)
// simulation.zoomScale = 1000; // simulation.zoomScale = 1000;
// simulation.setZoom(); // simulation.setZoom();
// m.setField("nano-scale manufacturing") // m.setField("metamaterial cloaking")
// b.giveGuns("wave beam") // b.giveGuns("wave beam")
// tech.isExplodeRadio = true // tech.isExplodeRadio = true
// tech.giveTech("phase velocity") // tech.giveTech("phase velocity")
// for (let i = 0; i < 3; i++) tech.giveTech("wavelength") // for (let i = 0; i < 9; i++) tech.giveTech("packet length")
// for (let i = 0; i < 1; i++) tech.giveTech("bound state") // for (let i = 0; i < 3; i++) tech.giveTech("bound state")
// for (let i = 0; i < 3; i++) tech.giveTech("propagation") // for (let i = 0; i < 9; i++) tech.giveTech("propagation")
// for (let i = 0; i < 3; i++) tech.giveTech("amplitude") // for (let i = 0; i < 9; i++) tech.giveTech("amplitude")
// tech.isExplodeRadio = true; // tech.isExplodeRadio = true;
// tech.isMineSentry = true // tech.isMineSentry = true

View File

@@ -1958,7 +1958,7 @@ const m = {
//120 cycles after shooting (or using field) enable cloak //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.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) { if (!m.isCloak) {
m.isCloak = true //enter cloak m.isCloak = true //enter cloak
if (tech.isIntangible) { if (tech.isIntangible) {

View File

@@ -3614,46 +3614,43 @@
}, },
{ {
name: "bound state", name: "bound state",
description: "instead of dissipating normally<br>wave packets <strong>reflect</strong> backwards <strong>2</strong> times", description: "instead of dissipating normally<br>wave packets <strong>reflect</strong> backwards <strong>1</strong> times",
isGunTech: true, isGunTech: true,
maxCount: 9, maxCount: 9,
count: 0, count: 0,
frequency: 2, frequency: 2,
allowed() { allowed() {
return tech.haveGunCheck("wave beam") && tech.wavePacketLength === 36 return tech.haveGunCheck("wave beam")
}, },
requires: "wave beam, not wavelength", requires: "wave beam",
effect() { effect() {
tech.waveReflections += 2 tech.waveReflections++
// tech.waveFrequency = 0.2
}, },
remove() { remove() {
tech.waveReflections = 0 tech.waveReflections = 1
// tech.waveFrequency = 0.35 //this is also set in "wavelength"
} }
}, },
{ {
name: "wavelength", name: "packet length",
description: "wave packet <strong>length</strong> and <strong>duration</strong><br>is increased by <strong>50%</strong>", // description: "holding fire allows the <strong>wave beam</strong> to emits a second <strong>packet</strong><br>at zero ammo cost", description: "wave packet <strong>length</strong> and <strong>duration</strong><br>is increased by <strong>50%</strong>", // description: "holding fire allows the <strong>wave beam</strong> to emits a second <strong>packet</strong><br>at zero ammo cost",
isGunTech: true, isGunTech: true,
maxCount: 9, maxCount: 3,
count: 0, count: 0,
frequency: 2, frequency: 2,
allowed() { allowed() {
return tech.haveGunCheck("wave beam") && !tech.waveReflections return tech.haveGunCheck("wave beam")
}, },
requires: "wave beam, not bound state", requires: "wave beam",
effect() { effect() {
const scale = 1.5 const scale = 1.5 - 0.025 * this.count
tech.wavePacketLength *= scale //if you change this to not be 36 update /36 in wave .dmg tech.waveLengthRange *= Math.sqrt(scale)
tech.wavePacketLength *= scale
tech.wavePacketFrequency /= 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() { remove() {
tech.wavePacketFrequency = 0.088 //shorten wave packet 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.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", name: "propagation",
description: "wave packet propagation <strong>speed</strong> is <strong>25%</strong> slower<br>wave <strong class='color-d'>damage</strong> is increased by <strong>50%</strong>", description: "wave packet propagation <strong>speed</strong> is <strong>25%</strong> slower<br>wave <strong class='color-d'>damage</strong> is increased by <strong>50%</strong>",
isGunTech: true, isGunTech: true,
maxCount: 3, maxCount: 9,
count: 0, count: 0,
frequency: 2, frequency: 2,
allowed() { allowed() {
@@ -3689,11 +3686,11 @@
requires: "wave beam", requires: "wave beam",
effect() { effect() {
tech.waveBeamSpeed *= 0.75; tech.waveBeamSpeed *= 0.75;
tech.waveBeamDamage += 0.55 * 0.5 tech.waveBeamDamage += 1.2 * 0.5
}, },
remove() { remove() {
tech.waveBeamSpeed = 10; 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; tech.isPhaseVelocity = false;
} }
}, },
// {
// name: "imaginary",
// description: "the <strong>wavePacket</strong> is limited to a <strong>single</strong> strand<br>wave <strong class='color-d'>damage</strong> is increased by <strong>300%</strong>",
// 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", name: "cruise missile",
description: "<strong>missiles</strong> travel <strong>63%</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",
@@ -6575,4 +6554,5 @@
isImaginaryWave: null, isImaginaryWave: null,
waveBeamSpeed: null, waveBeamSpeed: null,
wavePacketAmplitude: null, wavePacketAmplitude: null,
waveLengthRange: null,
} }

View File

@@ -1,11 +1,9 @@
******************************************************** NEXT PATCH ******************************************************** ******************************************************** NEXT PATCH ********************************************************
several small wave beam tech adjustments more wave beam balance
******************************************************** BUGS ******************************************************** ******************************************************** 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 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
@@ -36,11 +34,12 @@ is there a way to check if the player is stuck inside the map or block
******************************************************** TODO ******************************************************** ******************************************************** 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: dispersion - add noise and damage to waves
wave tech: chirp - amplitude and damage increases towards the end of the wavePacket 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 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 tech: mobs that die while frozen produce ice-IX bullets