plasma ball
plasma ball much more damage new graphics fast decay in mob shields works with capacitor some bug fixes paradigm shift: 4->10% chance to give research instead of tech harpoon density: 0.006->0.005 (lower damage and knock back to mobs) wormhole: 7->5% duplication chance pilot wave uses less energy
This commit is contained in:
15
js/bullet.js
15
js/bullet.js
@@ -1365,7 +1365,7 @@ const b = {
|
|||||||
},
|
},
|
||||||
minDmgSpeed: 4,
|
minDmgSpeed: 4,
|
||||||
lookFrequency: Math.floor(7 + Math.random() * 3),
|
lookFrequency: Math.floor(7 + Math.random() * 3),
|
||||||
density: tech.harpoonDensity, //0.001 is normal for blocks, 0.006 is normal for harpoon, 0.006*6 when buffed
|
density: tech.harpoonDensity, //0.001 is normal for blocks, 0.005 is normal for harpoon, 0.005*6 when buffed
|
||||||
drain: 0.004,
|
drain: 0.004,
|
||||||
beforeDmg(who) {
|
beforeDmg(who) {
|
||||||
if (tech.isShieldPierce && who.isShielded) { //disable shields
|
if (tech.isShieldPierce && who.isShielded) { //disable shields
|
||||||
@@ -1398,7 +1398,7 @@ const b = {
|
|||||||
this.caughtPowerUp.effect();
|
this.caughtPowerUp.effect();
|
||||||
Matter.Composite.remove(engine.world, this.caughtPowerUp);
|
Matter.Composite.remove(engine.world, this.caughtPowerUp);
|
||||||
powerUp.splice(index, 1);
|
powerUp.splice(index, 1);
|
||||||
if (tech.isHarpoonPowerUp) tech.harpoonDensity = 0.006 * 6 //0.006 is normal
|
if (tech.isHarpoonPowerUp) tech.harpoonDensity = 0.005 * 6 //0.005 is normal
|
||||||
} else {
|
} else {
|
||||||
this.dropCaughtPowerUp()
|
this.dropCaughtPowerUp()
|
||||||
}
|
}
|
||||||
@@ -1629,7 +1629,7 @@ const b = {
|
|||||||
},
|
},
|
||||||
minDmgSpeed: 4,
|
minDmgSpeed: 4,
|
||||||
lookFrequency: Math.floor(7 + Math.random() * 3),
|
lookFrequency: Math.floor(7 + Math.random() * 3),
|
||||||
density: tech.harpoonDensity, //0.001 is normal for blocks, 0.006 is normal for harpoon, 0.006*6 when buffed
|
density: tech.harpoonDensity, //0.001 is normal for blocks, 0.005 is normal for harpoon, 0.005*6 when buffed
|
||||||
beforeDmg(who) {
|
beforeDmg(who) {
|
||||||
if (tech.isShieldPierce && who.isShielded) { //disable shields
|
if (tech.isShieldPierce && who.isShielded) { //disable shields
|
||||||
who.isShielded = false
|
who.isShielded = false
|
||||||
@@ -1671,7 +1671,7 @@ const b = {
|
|||||||
this.caughtPowerUp.effect();
|
this.caughtPowerUp.effect();
|
||||||
Matter.Composite.remove(engine.world, this.caughtPowerUp);
|
Matter.Composite.remove(engine.world, this.caughtPowerUp);
|
||||||
powerUp.splice(index, 1);
|
powerUp.splice(index, 1);
|
||||||
if (tech.isHarpoonPowerUp) tech.harpoonDensity = 0.006 * 6 //0.006 is normal
|
if (tech.isHarpoonPowerUp) tech.harpoonDensity = 0.005 * 6 //0.006 is normal
|
||||||
} else {
|
} else {
|
||||||
this.dropCaughtPowerUp()
|
this.dropCaughtPowerUp()
|
||||||
}
|
}
|
||||||
@@ -6153,7 +6153,7 @@ const b = {
|
|||||||
}
|
}
|
||||||
//fire
|
//fire
|
||||||
if ((!input.fire && this.charge > 0.6)) {
|
if ((!input.fire && this.charge > 0.6)) {
|
||||||
tech.harpoonDensity = 0.009 //0.001 is normal for blocks, 0.006 is normal for harpoon, 0.006*6 when buffed
|
tech.harpoonDensity = 0.008 //0.001 is normal for blocks, 0.005 is normal for harpoon, 0.005*6 when buffed
|
||||||
const where = {
|
const where = {
|
||||||
x: m.pos.x + 30 * Math.cos(m.angle),
|
x: m.pos.x + 30 * Math.cos(m.angle),
|
||||||
y: m.pos.y + 30 * Math.sin(m.angle)
|
y: m.pos.y + 30 * Math.sin(m.angle)
|
||||||
@@ -6208,7 +6208,8 @@ const b = {
|
|||||||
const recoil = Vector.mult(Vector.normalise(Vector.sub(where, m.pos)), input.down ? 0.03 : 0.06)
|
const recoil = Vector.mult(Vector.normalise(Vector.sub(where, m.pos)), input.down ? 0.03 : 0.06)
|
||||||
player.force.x -= recoil.x
|
player.force.x -= recoil.x
|
||||||
player.force.y -= recoil.y
|
player.force.y -= recoil.y
|
||||||
tech.harpoonDensity = 0.01 //0.001 is normal for blocks, 0.006 is normal for harpoon, 0.006*6 when buffed
|
tech.harpoonDensity = 0.008 //0.001 is normal for blocks, 0.005 is normal for harpoon, 0.005*6 when buffed
|
||||||
|
|
||||||
const harpoonSize = tech.isLargeHarpoon ? 1 + 0.1 * Math.sqrt(this.ammo) : 1
|
const harpoonSize = tech.isLargeHarpoon ? 1 + 0.1 * Math.sqrt(this.ammo) : 1
|
||||||
if (tech.extraHarpoons) {
|
if (tech.extraHarpoons) {
|
||||||
let targetCount = 0
|
let targetCount = 0
|
||||||
@@ -6412,7 +6413,7 @@ const b = {
|
|||||||
const recoil = Vector.mult(Vector.normalise(Vector.sub(where, m.pos)), input.down ? 0.015 : 0.035)
|
const recoil = Vector.mult(Vector.normalise(Vector.sub(where, m.pos)), input.down ? 0.015 : 0.035)
|
||||||
player.force.x -= recoil.x
|
player.force.x -= recoil.x
|
||||||
player.force.y -= recoil.y
|
player.force.y -= recoil.y
|
||||||
tech.harpoonDensity = 0.006 //0.001 is normal for blocks, 0.006 is normal for harpoon, 0.006*6 when buffed
|
tech.harpoonDensity = 0.005 //0.001 is normal for blocks, 0.005 is normal for harpoon, 0.005*6 when buffed
|
||||||
},
|
},
|
||||||
// railGun2() {
|
// railGun2() {
|
||||||
// const where = {
|
// const where = {
|
||||||
|
|||||||
14
js/level.js
14
js/level.js
@@ -18,7 +18,7 @@ const level = {
|
|||||||
// m.setField("metamaterial cloaking")
|
// m.setField("metamaterial cloaking")
|
||||||
// b.giveGuns("harpoon")
|
// b.giveGuns("harpoon")
|
||||||
// tech.giveTech("grappling hook")
|
// tech.giveTech("grappling hook")
|
||||||
// tech.giveTech("bulk modulus")
|
// tech.giveTech("capacitor bank")
|
||||||
// for (let i = 0; i < 2; i++) powerUps.directSpawn(0, 0, "tech");
|
// for (let i = 0; i < 2; i++) powerUps.directSpawn(0, 0, "tech");
|
||||||
// for (let i = 0; i < 9; i++) tech.giveTech("dynamo-bot")
|
// for (let i = 0; i < 9; i++) tech.giveTech("dynamo-bot")
|
||||||
// for (let i = 10; i < tech.tech.length; i++) { tech.tech[i].isBanished = true }
|
// for (let i = 10; i < tech.tech.length; i++) { tech.tech[i].isBanished = true }
|
||||||
@@ -32,7 +32,7 @@ const level = {
|
|||||||
// level.difficultyIncrease(30) //30 is near max on hard //60 is near max on why
|
// level.difficultyIncrease(30) //30 is near max on hard //60 is near max on why
|
||||||
// simulation.enableConstructMode() //used to build maps in testing mode
|
// simulation.enableConstructMode() //used to build maps in testing mode
|
||||||
// level.reactor();
|
// level.reactor();
|
||||||
// level.pavilion(); //not in rotation, used for testing
|
// level.testing(); //not in rotation, used for testing
|
||||||
if (simulation.isTraining) { level.walk(); } else { level.intro(); } //normal starting level ************************************************
|
if (simulation.isTraining) { level.walk(); } else { level.intro(); } //normal starting level ************************************************
|
||||||
// powerUps.research.changeRerolls(3000)
|
// powerUps.research.changeRerolls(3000)
|
||||||
// for (let i = 0; i < 30; i++) powerUps.spawn(player.position.x + Math.random() * 50, player.position.y - Math.random() * 50, "tech", false);
|
// for (let i = 0; i < 30; i++) powerUps.spawn(player.position.x + Math.random() * 50, player.position.y - Math.random() * 50, "tech", false);
|
||||||
@@ -113,9 +113,7 @@ const level = {
|
|||||||
for (let i = 0; i < 2; i++) powerUps.spawn(level.exit.x + 10 * (Math.random() - 0.5), level.exit.y - 100 + 10 * (Math.random() - 0.5), "tech", false) //exit
|
for (let i = 0; i < 2; i++) powerUps.spawn(level.exit.x + 10 * (Math.random() - 0.5), level.exit.y - 100 + 10 * (Math.random() - 0.5), "tech", false) //exit
|
||||||
// for (let i = 0; i < 2; i++) powerUps.spawn(player.position.x + 90 * (Math.random() - 0.5), player.position.y + 90 * (Math.random() - 0.5), "tech", false); //start
|
// for (let i = 0; i < 2; i++) powerUps.spawn(player.position.x + 90 * (Math.random() - 0.5), player.position.y + 90 * (Math.random() - 0.5), "tech", false); //start
|
||||||
}
|
}
|
||||||
if (m.plasmaBall) {
|
if (m.plasmaBall) m.plasmaBall.isOn = false
|
||||||
m.plasmaBall.isOn = false
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
trainingText(say) {
|
trainingText(say) {
|
||||||
simulation.lastLogTime = 0; //clear previous messages
|
simulation.lastLogTime = 0; //clear previous messages
|
||||||
@@ -2543,11 +2541,11 @@ const level = {
|
|||||||
spawn.mapRect(4850, -275, 50, 175);
|
spawn.mapRect(4850, -275, 50, 175);
|
||||||
|
|
||||||
//???
|
//???
|
||||||
level.difficultyIncrease(5) //30 is near max on hard //60 is near max on why
|
level.difficultyIncrease(15) //30 is near max on hard //60 is near max on why
|
||||||
m.addHealth(Infinity)
|
m.addHealth(Infinity)
|
||||||
|
|
||||||
// spawn.starter(1900, -500, 200) //big boy
|
spawn.starter(1900, -500, 200) //big boy
|
||||||
for (let i = 0; i < 10; ++i) spawn.launcher(1900, -500)
|
// for (let i = 0; i < 10; ++i) spawn.launcher(1900, -500)
|
||||||
// spawn.slashBoss(1900, -500)
|
// spawn.slashBoss(1900, -500)
|
||||||
// spawn.launcherBoss(3200, -500)
|
// spawn.launcherBoss(3200, -500)
|
||||||
// spawn.laserTargetingBoss(1700, -500)
|
// spawn.laserTargetingBoss(1700, -500)
|
||||||
|
|||||||
115
js/player.js
115
js/player.js
@@ -2103,16 +2103,12 @@ const m = {
|
|||||||
mask: 0 //cat.body | cat.map | cat.mob | cat.mobBullet | cat.mobShield
|
mask: 0 //cat.body | cat.map | cat.mob | cat.mobBullet | cat.mobShield
|
||||||
},
|
},
|
||||||
frictionAir: 0,
|
frictionAir: 0,
|
||||||
// radius: 1,
|
|
||||||
// friction: 0,
|
|
||||||
// frictionStatic: 0,
|
|
||||||
// restitution: 0,
|
|
||||||
alpha: 0.6,
|
alpha: 0.6,
|
||||||
isAttached: false,
|
isAttached: false,
|
||||||
isOn: false,
|
isOn: false,
|
||||||
drain: 0.0012,
|
drain: 0.0015,
|
||||||
radiusLimit: 10,
|
radiusLimit: 10,
|
||||||
damage: 0.18,
|
damage: 0.4,
|
||||||
setPositionToNose() {
|
setPositionToNose() {
|
||||||
const nose = { x: m.pos.x + 10 * Math.cos(m.angle), y: m.pos.y + 10 * Math.sin(m.angle) }
|
const nose = { x: m.pos.x + 10 * Math.cos(m.angle), y: m.pos.y + 10 * Math.sin(m.angle) }
|
||||||
Matter.Body.setPosition(this, Vector.add(nose, Vector.mult(Vector.normalise(Vector.sub(nose, m.pos)), this.circleRadius)));
|
Matter.Body.setPosition(this, Vector.add(nose, Vector.mult(Vector.normalise(Vector.sub(nose, m.pos)), this.circleRadius)));
|
||||||
@@ -2120,38 +2116,94 @@ const m = {
|
|||||||
fire() {
|
fire() {
|
||||||
this.isAttached = false;
|
this.isAttached = false;
|
||||||
const speed = 4 //scale with mass?
|
const speed = 4 //scale with mass?
|
||||||
|
// Matter.Body.setVelocity(this, {
|
||||||
|
// x: speed * Math.cos(m.angle),
|
||||||
|
// y: speed * Math.sin(m.angle)
|
||||||
|
// });
|
||||||
Matter.Body.setVelocity(this, {
|
Matter.Body.setVelocity(this, {
|
||||||
x: 0.4 * player.velocity.x + speed * Math.cos(m.angle),
|
x: player.velocity.x * 0.5 + speed * Math.cos(m.angle),
|
||||||
y: 0.2 * player.velocity.y + speed * Math.sin(m.angle)
|
y: player.velocity.y * 0.2 + speed * Math.sin(m.angle)
|
||||||
});
|
});
|
||||||
|
m.plasmaBall.setPositionToNose()
|
||||||
|
},
|
||||||
|
scale(scale) {
|
||||||
|
Matter.Body.scale(m.plasmaBall, scale, scale); //shrink fast
|
||||||
|
if (this.circleRadius < this.radiusLimit) this.isOn = false
|
||||||
},
|
},
|
||||||
do() {
|
do() {
|
||||||
if (this.isOn) {
|
if (this.isOn) {
|
||||||
//collisions with map
|
//collisions with map
|
||||||
if (Matter.Query.collides(this, map).length > 0) {
|
if (Matter.Query.collides(this, map).length > 0) {
|
||||||
const scale = Math.max(0.7, 0.99 - 1 / m.plasmaBall.circleRadius)
|
this.scale(Math.max(0.9, 0.98 - 0.05 / m.plasmaBall.circleRadius))
|
||||||
Matter.Body.scale(m.plasmaBall, scale, scale); //shrink fast
|
if (this.speed > 2.5) {
|
||||||
if (m.plasmaBall.circleRadius < m.plasmaBall.radiusLimit) this.isOn = false
|
const scale = 0.96
|
||||||
|
Matter.Body.setVelocity(this, {
|
||||||
|
x: scale * this.velocity.x,
|
||||||
|
y: scale * this.velocity.y
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
//collisions with mobs
|
//collisions with mobs
|
||||||
const whom = Matter.Query.collides(this, mob)
|
const whom = Matter.Query.collides(this, mob)
|
||||||
const dmg = this.damage * m.dmgScale
|
const dmg = this.damage * m.dmgScale
|
||||||
for (let i = 0, len = whom.length; i < len; i++) {
|
for (let i = 0, len = whom.length; i < len; i++) {
|
||||||
if (whom[i].bodyA.alive) whom[i].bodyA.damage(dmg);
|
if (whom[i].bodyA.alive) {
|
||||||
if (whom[i].bodyB.alive) whom[i].bodyB.damage(dmg);
|
whom[i].bodyA.damage(dmg);
|
||||||
|
if (whom[i].bodyA.shield) this.scale(Math.max(0.9, 0.99 - 0.5 / m.plasmaBall.circleRadius))
|
||||||
|
}
|
||||||
|
if (whom[i].bodyB.alive) {
|
||||||
|
whom[i].bodyB.damage(dmg);
|
||||||
|
if (whom[i].bodyB.shield) this.scale(Math.max(0.9, 0.99 - 0.5 / m.plasmaBall.circleRadius))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//slowly slow down if too fast
|
||||||
|
if (this.speed > 6) {
|
||||||
|
const scale = 0.997
|
||||||
|
Matter.Body.setVelocity(this, {
|
||||||
|
x: scale * this.velocity.x,
|
||||||
|
y: scale * this.velocity.y
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//graphics
|
//graphics
|
||||||
var gradient = ctx.createRadialGradient(this.position.x, this.position.y, 0, this.position.x, this.position.y, this.circleRadius);
|
const radius = this.circleRadius * (0.99 + 0.02 * Math.random()) + 3 * Math.random()
|
||||||
|
const gradient = ctx.createRadialGradient(this.position.x, this.position.y, 0, this.position.x, this.position.y, radius);
|
||||||
|
this.alpha = 0.5 + 0.1 * Math.random()
|
||||||
gradient.addColorStop(0, `rgba(255,255,255,${this.alpha})`);
|
gradient.addColorStop(0, `rgba(255,255,255,${this.alpha})`);
|
||||||
gradient.addColorStop(0.2, `rgba(255,200,255,${this.alpha})`);
|
gradient.addColorStop(0.18 + 0.1 * Math.random(), `rgba(255,150,255,${this.alpha})`);
|
||||||
gradient.addColorStop(1, `rgba(255,0,255,${this.alpha})`);
|
gradient.addColorStop(0.95, `rgba(255,0,255,${this.alpha})`);
|
||||||
|
// gradient.addColorStop(1, `rgba(255,150,255,${this.alpha})`);
|
||||||
ctx.fillStyle = gradient
|
ctx.fillStyle = gradient
|
||||||
ctx.beginPath();
|
ctx.beginPath();
|
||||||
ctx.arc(this.position.x, this.position.y, this.circleRadius, 0, 2 * Math.PI);
|
ctx.arc(this.position.x, this.position.y, radius, 0, 2 * Math.PI);
|
||||||
ctx.fill();
|
ctx.fill();
|
||||||
|
//draw arcs
|
||||||
|
const unit = Vector.rotate({ x: 1, y: 0 }, Math.random() * 6.28)
|
||||||
|
let len = 8
|
||||||
|
const step = this.circleRadius / len
|
||||||
|
let x = this.position.x
|
||||||
|
let y = this.position.y
|
||||||
|
ctx.beginPath();
|
||||||
|
if (Math.random() < 0.5) {
|
||||||
|
x += step * (unit.x + 6 * (Math.random() - 0.5))
|
||||||
|
y += step * (unit.y + 6 * (Math.random() - 0.5))
|
||||||
|
len -= 2
|
||||||
|
}
|
||||||
|
if (Math.random() < 0.5) {
|
||||||
|
x += step * (unit.x + 6 * (Math.random() - 0.5))
|
||||||
|
y += step * (unit.y + 6 * (Math.random() - 0.5))
|
||||||
|
len -= 2
|
||||||
|
}
|
||||||
|
ctx.moveTo(x, y);
|
||||||
|
|
||||||
|
for (let i = 0; i < len; i++) {
|
||||||
|
x += step * (unit.x + 1.9 * (Math.random() - 0.5))
|
||||||
|
y += step * (unit.y + 1.9 * (Math.random() - 0.5))
|
||||||
|
ctx.lineTo(x, y);
|
||||||
|
}
|
||||||
|
ctx.strokeStyle = "#88f";
|
||||||
|
ctx.lineWidth = 2 * Math.random();
|
||||||
|
ctx.stroke();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
@@ -2176,20 +2228,32 @@ const m = {
|
|||||||
m.plasmaBall.setPositionToNose()
|
m.plasmaBall.setPositionToNose()
|
||||||
}
|
}
|
||||||
} else if (m.energy > m.plasmaBall.drain) { //charge up when attached
|
} else if (m.energy > m.plasmaBall.drain) { //charge up when attached
|
||||||
m.energy -= m.plasmaBall.drain;
|
|
||||||
const scale = 1 + 5 * Math.pow(Math.max(1, m.plasmaBall.circleRadius), -1.5)
|
|
||||||
|
if (tech.isCapacitor) {
|
||||||
|
m.energy -= m.plasmaBall.drain * 4;
|
||||||
|
const scale = 1 + 5 * 16 * Math.pow(Math.max(1, m.plasmaBall.circleRadius), -1.8)
|
||||||
Matter.Body.scale(m.plasmaBall, scale, scale); //grow
|
Matter.Body.scale(m.plasmaBall, scale, scale); //grow
|
||||||
|
|
||||||
|
} else {
|
||||||
|
m.energy -= m.plasmaBall.drain;
|
||||||
|
const scale = 1 + 16 * Math.pow(Math.max(1, m.plasmaBall.circleRadius), -1.8)
|
||||||
|
Matter.Body.scale(m.plasmaBall, scale, scale); //grow
|
||||||
|
}
|
||||||
m.plasmaBall.setPositionToNose()
|
m.plasmaBall.setPositionToNose()
|
||||||
|
|
||||||
//add friction for player when holding ball, maybe more friction in vertical
|
//add friction for player when holding ball, maybe more friction in vertical
|
||||||
|
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
m.fieldCDcycle = m.cycle + 90;
|
m.fieldCDcycle = m.cycle + 90;
|
||||||
m.plasmaBall.fire()
|
m.plasmaBall.fire()
|
||||||
}
|
}
|
||||||
} else if (m.holdingTarget && m.fieldCDcycle < m.cycle) { //holding, but field button is released
|
} else if (m.holdingTarget && m.fieldCDcycle < m.cycle) { //holding, but field button is released
|
||||||
m.pickUp();
|
m.pickUp();
|
||||||
|
if (m.plasmaBall.isAttached) {
|
||||||
|
m.fieldCDcycle = m.cycle + 30;
|
||||||
|
m.plasmaBall.fire()
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
m.holdingTarget = null; //clears holding target (this is so you only pick up right after the field button is released and a hold target exists)
|
m.holdingTarget = null; //clears holding target (this is so you only pick up right after the field button is released and a hold target exists)
|
||||||
if (m.plasmaBall.isAttached) {
|
if (m.plasmaBall.isAttached) {
|
||||||
@@ -2200,6 +2264,7 @@ const m = {
|
|||||||
m.drawFieldMeter("rgba(0, 0, 0, 0.2)")
|
m.drawFieldMeter("rgba(0, 0, 0, 0.2)")
|
||||||
|
|
||||||
m.plasmaBall.do()
|
m.plasmaBall.do()
|
||||||
|
console.log(m.plasmaBall.isAttached)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -2903,7 +2968,7 @@ const m = {
|
|||||||
|
|
||||||
for (let i = 0, len = body.length; i < len; ++i) {
|
for (let i = 0, len = body.length; i < len; ++i) {
|
||||||
if (Vector.magnitude(Vector.sub(body[i].position, m.fieldPosition)) < m.fieldRadius && !body[i].isNotHoldable) {
|
if (Vector.magnitude(Vector.sub(body[i].position, m.fieldPosition)) < m.fieldRadius && !body[i].isNotHoldable) {
|
||||||
const DRAIN = speed * body[i].mass * 0.000005 // * (1 + m.energy * m.energy) //drain more energy when you have more energy
|
const DRAIN = speed * body[i].mass * 0.0000035 // * (1 + m.energy * m.energy) //drain more energy when you have more energy
|
||||||
if (m.energy > DRAIN) {
|
if (m.energy > DRAIN) {
|
||||||
m.energy -= DRAIN;
|
m.energy -= DRAIN;
|
||||||
Matter.Body.setVelocity(body[i], velocity); //give block mouse velocity
|
Matter.Body.setVelocity(body[i], velocity); //give block mouse velocity
|
||||||
@@ -2988,10 +3053,10 @@ const m = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "wormhole",
|
name: "wormhole",
|
||||||
description: "use <strong class='color-f'>energy</strong> to <strong>tunnel</strong> through a <strong class='color-worm'>wormhole</strong><br><strong class='color-worm'>wormholes</strong> attract <strong class='color-block'>blocks</strong> and power ups<br><strong>7%</strong> chance to <strong class='color-dup'>duplicate</strong> spawned <strong>power ups</strong>", //<br>bullets may also traverse <strong class='color-worm'>wormholes</strong>
|
description: "use <strong class='color-f'>energy</strong> to <strong>tunnel</strong> through a <strong class='color-worm'>wormhole</strong><br><strong class='color-worm'>wormholes</strong> attract <strong class='color-block'>blocks</strong> and power ups<br><strong>5%</strong> chance to <strong class='color-dup'>duplicate</strong> spawned <strong>power ups</strong>", //<br>bullets may also traverse <strong class='color-worm'>wormholes</strong>
|
||||||
drain: 0,
|
drain: 0,
|
||||||
effect: function() {
|
effect: function() {
|
||||||
m.duplicateChance = 0.07
|
m.duplicateChance = 0.05
|
||||||
m.fieldRange = 0
|
m.fieldRange = 0
|
||||||
powerUps.setDupChance(); //needed after adjusting duplication chance
|
powerUps.setDupChance(); //needed after adjusting duplication chance
|
||||||
|
|
||||||
|
|||||||
@@ -1045,7 +1045,7 @@ const powerUps = {
|
|||||||
},
|
},
|
||||||
pauseEjectTech(index) {
|
pauseEjectTech(index) {
|
||||||
if (tech.isPauseEjectTech || simulation.testing) {
|
if (tech.isPauseEjectTech || simulation.testing) {
|
||||||
if (Math.random() < 0.04 || tech.tech[index].isFromAppliedScience) {
|
if (Math.random() < 0.1 || tech.tech[index].isFromAppliedScience) {
|
||||||
tech.removeTech(index)
|
tech.removeTech(index)
|
||||||
powerUps.spawn(m.pos.x + 40 * (Math.random() - 0.5), m.pos.y + 40 * (Math.random() - 0.5), "research", false);
|
powerUps.spawn(m.pos.x + 40 * (Math.random() - 0.5), m.pos.y + 40 * (Math.random() - 0.5), "research", false);
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
16
js/tech.js
16
js/tech.js
@@ -3070,7 +3070,7 @@ const tech = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "paradigm shift",
|
name: "paradigm shift",
|
||||||
description: `<strong>clicking</strong> <strong class='color-m'>tech</strong> while paused <strong>ejects</strong> them<br><strong>4%</strong> chance to convert that tech into ${powerUps.orb.research(1)}`,
|
description: `<strong>clicking</strong> <strong class='color-m'>tech</strong> while paused <strong>ejects</strong> them<br><strong>10%</strong> chance to convert that tech into ${powerUps.orb.research(1)}`,
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 1,
|
frequency: 1,
|
||||||
@@ -3859,7 +3859,7 @@ const tech = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "pneumatic actuator",
|
name: "pneumatic actuator",
|
||||||
description: "<strong>nail gun</strong> takes <strong>no</strong> time to ramp up<br>to it's shortest <strong><em>delay</em></strong> after firing",
|
description: "<strong>nail gun</strong> takes <strong>no</strong> time to ramp up<br>to its shortest <strong><em>delay</em></strong> after firing",
|
||||||
isGunTech: true,
|
isGunTech: true,
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
@@ -5430,16 +5430,16 @@ const tech = {
|
|||||||
{
|
{
|
||||||
name: "capacitor bank",
|
name: "capacitor bank",
|
||||||
// description: "<strong>charge</strong> effects build up almost <strong>instantly</strong><br><em style = 'font-size:97%;'>throwing <strong class='color-block'>blocks</strong>, foam, railgun, pulse, tokamak</em>",
|
// description: "<strong>charge</strong> effects build up almost <strong>instantly</strong><br><em style = 'font-size:97%;'>throwing <strong class='color-block'>blocks</strong>, foam, railgun, pulse, tokamak</em>",
|
||||||
descriptionFunction() { return `<strong>charge</strong> effects build up almost <strong>instantly</strong><br><em style = 'font-size:97%;'>throwing <strong class='color-block'>blocks</strong>, ${tech.haveGunCheck("foam", false) ? "<strong>foam</strong>" : "foam"}, ${tech.isRailGun ? "<strong>railgun</strong>" : "railgun"}, ${tech.isPulseLaser ? "<strong>pulse</strong>" : "pulse"}, ${tech.isTokamak ? "<strong>tokamak</strong>" : "tokamak"}</em>` },
|
descriptionFunction() { return `<strong>charge</strong> effects build up almost <strong>instantly</strong><br><em style = 'font-size:93%;'>throwing, ${tech.haveGunCheck("foam", false) ? "<strong>foam</strong>" : "foam"}, ${tech.isPlasmaBall ? "<strong>plasma ball</strong>" : "plasma ball"}, ${tech.isRailGun ? "<strong>railgun</strong>" : "railgun"}, ${tech.isPulseLaser ? "<strong>pulse</strong>" : "pulse"}, ${tech.isTokamak ? "<strong>tokamak</strong>" : "tokamak"}</em>` },
|
||||||
isGunTech: true,
|
isGunTech: true,
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 2,
|
frequency: 2,
|
||||||
frequencyDefault: 2,
|
frequencyDefault: 2,
|
||||||
allowed() {
|
allowed() {
|
||||||
return tech.blockDamage > 0.075 || tech.isRailGun || tech.haveGunCheck("foam") || tech.isTokamak || tech.isPulseLaser
|
return tech.blockDamage > 0.075 || tech.isRailGun || tech.haveGunCheck("foam") || tech.isTokamak || tech.isPulseLaser || tech.isPlasmaBall
|
||||||
},
|
},
|
||||||
requires: "throwing blocks, railgun, foam, pulse, tokamak",
|
requires: "throwing blocks, railgun, foam, pulse, tokamak, plasma ball",
|
||||||
effect() {
|
effect() {
|
||||||
tech.isCapacitor = true;
|
tech.isCapacitor = true;
|
||||||
for (i = 0, len = b.guns.length; i < len; i++) { //find which gun
|
for (i = 0, len = b.guns.length; i < len; i++) { //find which gun
|
||||||
@@ -5717,7 +5717,7 @@ const tech = {
|
|||||||
},
|
},
|
||||||
remove() {
|
remove() {
|
||||||
tech.isHarpoonPowerUp = false
|
tech.isHarpoonPowerUp = false
|
||||||
tech.harpoonDensity = 0.006
|
tech.harpoonDensity = 0.005
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -6654,7 +6654,7 @@ const tech = {
|
|||||||
},
|
},
|
||||||
remove() {
|
remove() {
|
||||||
tech.isPlasmaBall = false;
|
tech.isPlasmaBall = false;
|
||||||
if (this.count) m.fieldUpgrades[m.fieldMode].set()
|
if (this.count && m.fieldUpgrades[m.fieldMode].name === "plasma torch") m.fieldUpgrades[m.fieldMode].set()
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -6675,7 +6675,7 @@ const tech = {
|
|||||||
},
|
},
|
||||||
remove() {
|
remove() {
|
||||||
tech.isExtruder = false;
|
tech.isExtruder = false;
|
||||||
if (this.count) m.fieldUpgrades[m.fieldMode].set()
|
if (this.count && m.fieldUpgrades[m.fieldMode].name === "plasma torch") m.fieldUpgrades[m.fieldMode].set()
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
69
todo.txt
69
todo.txt
@@ -1,25 +1,46 @@
|
|||||||
******************************************************** NEXT PATCH **************************************************
|
******************************************************** NEXT PATCH **************************************************
|
||||||
|
plasma ball
|
||||||
plasma ball is now live, but it's still in beta
|
much more damage
|
||||||
still needs
|
|
||||||
new graphics
|
new graphics
|
||||||
damage balancing
|
|
||||||
fast decay in mob shields
|
fast decay in mob shields
|
||||||
player angle rotation speed while firing adds to fire speed
|
works with capacitor
|
||||||
tech upgrade to get electrical arcs that randomly damage nearby mobs
|
some bug fixes
|
||||||
current tech synergy
|
|
||||||
capacitor bank,plasma jet(range?)
|
|
||||||
|
|
||||||
reservoir level is less crowded, so you can dodge mobs easier
|
|
||||||
horizontal flipped version is so reenabled
|
|
||||||
pure science renamed paradigm shift
|
|
||||||
difficulty scaling for heal and mob damage reduced 2%
|
|
||||||
|
|
||||||
some possible bug fixes, I don't know...
|
|
||||||
|
|
||||||
|
paradigm shift: 4->10% chance to give research instead of tech
|
||||||
|
harpoon density: 0.006->0.005 (lower damage and knock back to mobs)
|
||||||
|
wormhole: 7->5% duplication chance
|
||||||
|
pilot wave uses less energy
|
||||||
|
|
||||||
******************************************************** TODO ********************************************************
|
******************************************************** TODO ********************************************************
|
||||||
|
|
||||||
|
plasma ball
|
||||||
|
maybe grow faster when you have more energy
|
||||||
|
or excess energy
|
||||||
|
change size/alpha when touching mobs
|
||||||
|
explode when touching mobs like spirit bomb?
|
||||||
|
player angle rotation speed while firing adds to fire speed
|
||||||
|
tech upgrade to get electrical arcs that randomly damage nearby mobs
|
||||||
|
use plasma jet tech?
|
||||||
|
tech: black hole: gives the plasma ball gravity
|
||||||
|
plasma orb increases in size and power as it eats enemies
|
||||||
|
maybe does damage to player to grow faster?
|
||||||
|
tech that makes it explode when it expires
|
||||||
|
|
||||||
|
bug: often game puts player position at NaN
|
||||||
|
try:
|
||||||
|
cloaking/harpoon grapple on normal, continue past beating the final boss
|
||||||
|
clues:
|
||||||
|
maybe with vanish or other special blocks and grapple hook
|
||||||
|
very high level for tech, duplication
|
||||||
|
maybe not about JUNK though
|
||||||
|
maybe on tons of bullets
|
||||||
|
maybe grappling hook, Bulk modulus
|
||||||
|
solution: just kill the player if they go NaN
|
||||||
|
vanish elements shouldn't collide with mobs
|
||||||
|
maybe they don't return if mobs are in the way?
|
||||||
|
maybe they kill mobs in the way
|
||||||
|
maybe they should go non-collide with mobs
|
||||||
|
|
||||||
bug: harpoon attack gave a mob really high levels of health
|
bug: harpoon attack gave a mob really high levels of health
|
||||||
recent events:
|
recent events:
|
||||||
had 3 harpoons at a time
|
had 3 harpoons at a time
|
||||||
@@ -34,17 +55,6 @@ bug: maybe I can put in an event listener to reset inputs to false when you tab
|
|||||||
enemies stuck with foam receive upward force over time
|
enemies stuck with foam receive upward force over time
|
||||||
only form aerogel tech?
|
only form aerogel tech?
|
||||||
|
|
||||||
bug: often game puts player position at NaN
|
|
||||||
try:
|
|
||||||
cloaking/harpoon grapple on normal, continue past beating the final boss
|
|
||||||
clues:
|
|
||||||
maybe with vanish or other special blocks and grapple hook
|
|
||||||
very high level for tech, duplication
|
|
||||||
maybe not about JUNK though
|
|
||||||
maybe on tons of bullets
|
|
||||||
maybe grappling hook, Bulk modulus
|
|
||||||
solution: just kill the player if they go NaN
|
|
||||||
|
|
||||||
Tech: superglue
|
Tech: superglue
|
||||||
Requires: foam + another gun or plasma torch or molecular assembler
|
Requires: foam + another gun or plasma torch or molecular assembler
|
||||||
Foam bubbles decay 50% slower
|
Foam bubbles decay 50% slower
|
||||||
@@ -53,9 +63,10 @@ Requires: foam + another gun or plasma torch or molecular assembler
|
|||||||
Enemies stuck with foam take 25% more damage
|
Enemies stuck with foam take 25% more damage
|
||||||
should foam bots gets this also or is that too strong
|
should foam bots gets this also or is that too strong
|
||||||
|
|
||||||
|
tech: harpoons stick into enemies
|
||||||
buff pilot wave damage or lower energy drain
|
detonate after a short delay
|
||||||
lower base harpoon density
|
attaches mob to wall if possible
|
||||||
|
firing while harpoon is stuck into an enemy rips it out of them, inflicting damage and stun and pulling them towards you
|
||||||
|
|
||||||
const ctx = canvas.getContext('2d', {‘willReadFrequently': true});
|
const ctx = canvas.getContext('2d', {‘willReadFrequently': true});
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user