irradiated drones
irradiated drones
new tech: beta radiation - double damage and half lifespan
now don't clump as often, to make the graphics look better
effective radius now includes edges of mobs, not just centers
so they work better on large radius mobs
do 50% more damage, but have a 10% smaller radius and last 3 second shorter time and 80% less ammo (was 75%)
irradiated drones can't get a slowing effect anymore
it was just too annoying
nano-scale can now unlock irradiated drone tech properly
nano-scale now drains more energy per irradiated drone, to scale with the higher ammo costs
time dilation field is now just called "time dilation"
constraints under time dilation is less buggy, but still a bit buggy
This commit is contained in:
55
js/bullet.js
55
js/bullet.js
@@ -1041,10 +1041,10 @@ const b = {
|
||||
}
|
||||
//aoe damage to mobs
|
||||
for (let i = 0, len = mob.length; i < len; i++) {
|
||||
if (Vector.magnitude(Vector.sub(mob[i].position, this.position)) < this.damageRadius) {
|
||||
if (Vector.magnitude(Vector.sub(mob[i].position, this.position)) < this.damageRadius + mob[i].radius) {
|
||||
let dmg = b.dmgScale * 0.09
|
||||
if (Matter.Query.ray(map, mob[i].position, this.position).length > 0) dmg *= 0.25 //reduce damage if a wall is in the way
|
||||
if (mob[i].shield) dmg *= 4 //x5 to make up for the /5 that shields normally take
|
||||
if (mob[i].shield) dmg *= 3 //to make up for the /5 that shields normally take
|
||||
mob[i].damage(dmg);
|
||||
mob[i].locatePlayer();
|
||||
if (tech.isNeutronSlow) {
|
||||
@@ -2211,30 +2211,31 @@ const b = {
|
||||
},
|
||||
droneRadioactive(where = { x: m.pos.x + 30 * Math.cos(m.angle) + 20 * (Math.random() - 0.5), y: m.pos.y + 30 * Math.sin(m.angle) + 20 * (Math.random() - 0.5) }, speed = 1) {
|
||||
const me = bullet.length;
|
||||
const THRUST = tech.isFastDrones ? 0.002 : 0.0012
|
||||
const THRUST = tech.isFastDrones ? 0.002 : 0.0012 + 0.0004 * (Math.random() - 0.5)
|
||||
const dir = m.angle + 0.4 * (Math.random() - 0.5);
|
||||
const RADIUS = (4 + 1 * Math.random())
|
||||
bullet[me] = Bodies.polygon(where.x, where.y, 8, RADIUS, {
|
||||
angle: dir,
|
||||
inertia: Infinity,
|
||||
friction: 0.05,
|
||||
friction: 0,
|
||||
frictionAir: 0,
|
||||
restitution: 1,
|
||||
restitution: 0.8 + 0.199 * Math.random(),
|
||||
dmg: 0.24, //damage done in addition to the damage from momentum
|
||||
lookFrequency: 120 + Math.floor(23 * Math.random()),
|
||||
endCycle: simulation.cycle + Math.floor((900 + 400 * Math.random()) * tech.isBulletsLastLonger) + 140 + RADIUS * 5,
|
||||
endCycle: simulation.cycle + Math.floor((900 + 120 * Math.random()) * tech.isBulletsLastLonger / tech.droneRadioDamage) + 140 + RADIUS * 5,
|
||||
classType: "bullet",
|
||||
collisionFilter: {
|
||||
category: cat.bullet,
|
||||
mask: cat.map | cat.body | cat.bullet | cat.mob | cat.mobBullet | cat.mobShield //self collide
|
||||
},
|
||||
minDmgSpeed: 0,
|
||||
speedCap: 5 + 2 * Math.random(), //6 is normal
|
||||
lockedOn: null,
|
||||
isFollowMouse: true,
|
||||
deathCycles: 110 + RADIUS * 5,
|
||||
isImproved: false,
|
||||
radioRadius: 0,
|
||||
maxRadioRadius: 400 + Math.floor(75 * Math.random()) + 80 * tech.isNeutronSlow,
|
||||
maxRadioRadius: 365 + Math.floor(150 * Math.random()),
|
||||
beforeDmg(who) {
|
||||
const unit = Vector.mult(Vector.normalise(Vector.sub(this.position, who.position)), -20) //move away from target after hitting
|
||||
Matter.Body.setVelocity(this, {
|
||||
@@ -2274,46 +2275,24 @@ const b = {
|
||||
}
|
||||
//aoe damage to mobs
|
||||
for (let i = 0, len = mob.length; i < len; i++) {
|
||||
if (Vector.magnitude(Vector.sub(mob[i].position, this.position)) < this.radioRadius) {
|
||||
let dmg = b.dmgScale * 0.035 //neutron bombs dmg = 0.09
|
||||
if (Vector.magnitude(Vector.sub(mob[i].position, this.position)) < this.radioRadius + mob[i].radius) {
|
||||
let dmg = b.dmgScale * 0.055 * tech.droneRadioDamage //neutron bombs dmg = 0.09
|
||||
if (Matter.Query.ray(map, mob[i].position, this.position).length > 0) dmg *= 0.25 //reduce damage if a wall is in the way
|
||||
if (mob[i].shield) dmg *= 4 //x5 to make up for the /5 that shields normally take
|
||||
if (mob[i].shield) dmg *= 3 // to make up for the /5 that shields normally take
|
||||
mob[i].damage(dmg);
|
||||
mob[i].locatePlayer();
|
||||
if (tech.isNeutronSlow) {
|
||||
Matter.Body.setVelocity(mob[i], {
|
||||
x: mob[i].velocity.x * 0.97,
|
||||
y: mob[i].velocity.y * 0.97
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
//draw
|
||||
ctx.beginPath();
|
||||
ctx.arc(this.position.x, this.position.y, this.radioRadius, 0, 2 * Math.PI);
|
||||
ctx.globalCompositeOperation = "lighter"
|
||||
ctx.fillStyle = `rgba(25,139,170,${0.1+0.05*Math.random()})`;
|
||||
// ctx.fillStyle = `rgba(25,139,170,${0.15+0.05*Math.random()})`;
|
||||
// ctx.fillStyle = `rgba(36, 207, 255,${0.1+0.05*Math.random()})`;
|
||||
ctx.fillStyle = `rgba(28, 175, 217,${0.13+0.07*Math.random()})`;
|
||||
ctx.fill();
|
||||
ctx.globalCompositeOperation = "source-over"
|
||||
|
||||
if (tech.isNeutronSlow) {
|
||||
const slow = (who, radius = this.radioRadius * 3.2) => {
|
||||
for (i = 0, len = who.length; i < len; i++) {
|
||||
const sub = Vector.sub(this.position, who[i].position);
|
||||
const dist = Vector.magnitude(sub);
|
||||
if (dist < radius) {
|
||||
Matter.Body.setVelocity(who[i], {
|
||||
x: who[i].velocity.x * 0.975,
|
||||
y: who[i].velocity.y * 0.975
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
slow(body, this.radioRadius)
|
||||
slow([player], this.radioRadius)
|
||||
}
|
||||
|
||||
|
||||
//normal drone actions
|
||||
if (simulation.cycle + this.deathCycles > this.endCycle) { //fall shrink and die
|
||||
this.force.y += this.mass * 0.0012;
|
||||
@@ -2430,7 +2409,7 @@ const b = {
|
||||
this.force = Vector.mult(Vector.normalise(Vector.sub(this.position, simulation.mouseInGame)), -this.mass * THRUST)
|
||||
}
|
||||
// speed cap instead of friction to give more agility
|
||||
if (this.speed > 6) {
|
||||
if (this.speed > this.speedCap) {
|
||||
Matter.Body.setVelocity(this, {
|
||||
x: this.velocity.x * 0.97,
|
||||
y: this.velocity.y * 0.97
|
||||
@@ -4383,10 +4362,10 @@ const b = {
|
||||
if (tech.isDroneRadioactive) {
|
||||
if (m.crouch) {
|
||||
b.droneRadioactive({ x: m.pos.x + 30 * Math.cos(m.angle) + 10 * (Math.random() - 0.5), y: m.pos.y + 30 * Math.sin(m.angle) + 10 * (Math.random() - 0.5) }, 45)
|
||||
m.fireCDcycle = m.cycle + Math.floor(7 * 13 * b.fireCD); // cool down
|
||||
m.fireCDcycle = m.cycle + Math.floor(5 * 13 * b.fireCD); // cool down
|
||||
} else {
|
||||
b.droneRadioactive({ x: m.pos.x + 30 * Math.cos(m.angle) + 10 * (Math.random() - 0.5), y: m.pos.y + 30 * Math.sin(m.angle) + 10 * (Math.random() - 0.5) }, 10)
|
||||
m.fireCDcycle = m.cycle + Math.floor(7 * 6 * b.fireCD); // cool down
|
||||
m.fireCDcycle = m.cycle + Math.floor(5 * 6 * b.fireCD); // cool down
|
||||
}
|
||||
} else {
|
||||
if (m.crouch) {
|
||||
|
||||
28
js/level.js
28
js/level.js
@@ -13,25 +13,14 @@ const level = {
|
||||
start() {
|
||||
if (level.levelsCleared === 0) { //this code only runs on the first level
|
||||
// simulation.enableConstructMode() //used to build maps in testing mode
|
||||
// simulation.difficulty = 20
|
||||
// level.difficultyIncrease(30)
|
||||
// simulation.isHorizontalFlipped = true
|
||||
// level.difficultyIncrease(99)
|
||||
// m.setField("nano-scale manufacturing")
|
||||
// m.setField("time dilation")
|
||||
// b.giveGuns("grenades")
|
||||
// tech.giveTech("neutron bomb")
|
||||
// b.giveGuns("drones")
|
||||
// tech.giveTech("radioactive drones")
|
||||
// tech.isRadioactiveResistance = true
|
||||
// for (let i = 0; i < 9; i++) tech.giveTech("spherical harmonics")
|
||||
// tech.isExplodeRadio = true
|
||||
// tech.giveTech("vacuum permittivity")
|
||||
// tech.giveTech("quenching")
|
||||
// tech.giveTech("decoherence")
|
||||
// tech.giveTech("supertemporal")
|
||||
// for (let i = 0; i < 3; i++) tech.giveTech("packet length")
|
||||
// for (let i = 0; i < 3; i++) tech.giveTech("propagation")
|
||||
// for (let i = 0; i < 3; i++) tech.giveTech("bound state")
|
||||
// for (let i = 0; i < 9; i++) tech.giveTech("WIMPs")
|
||||
|
||||
level.intro(); //starting level
|
||||
// level.labs();
|
||||
@@ -969,7 +958,6 @@ const level = {
|
||||
|
||||
if (this.height > 0 && Matter.Query.region([player], this).length) {
|
||||
const DRAIN = 0.003 * (tech.isRadioactiveResistance ? 0.25 : 1) + m.fieldRegen
|
||||
console.log(DRAIN)
|
||||
if (m.energy > DRAIN) {
|
||||
m.energy -= DRAIN
|
||||
} else {
|
||||
@@ -2091,7 +2079,7 @@ const level = {
|
||||
// toggle.query();
|
||||
};
|
||||
|
||||
level.setPosToSpawn(0, -750); //normal spawn
|
||||
level.setPosToSpawn(0, -450); //normal spawn
|
||||
spawn.mapRect(level.enter.x, level.enter.y + 20, 100, 20);
|
||||
level.exit.x = 6500;
|
||||
level.exit.y = -230;
|
||||
@@ -2110,8 +2098,8 @@ const level = {
|
||||
spawn.mapRect(-950, 0, 8200, 800); //ground
|
||||
spawn.mapRect(-950, -1200, 800, 1400); //left wall
|
||||
spawn.mapRect(-950, -1800, 8200, 800); //roof
|
||||
spawn.mapRect(-250, -700, 1000, 900); // shelf
|
||||
spawn.mapRect(-250, -1200, 1000, 250); // shelf roof
|
||||
spawn.mapRect(-250, -400, 1000, 600); // shelf
|
||||
spawn.mapRect(-250, -1200, 1000, 550); // shelf roof
|
||||
// powerUps.spawnStartingPowerUps(600, -800);
|
||||
// for (let i = 0; i < 50; ++i) powerUps.spawn(550, -800, "research", false);
|
||||
// powerUps.spawn(350, -800, "gun", false);
|
||||
@@ -2135,16 +2123,16 @@ const level = {
|
||||
spawn.mapRect(6700, -1800, 800, 2600); //right wall
|
||||
spawn.mapRect(level.exit.x, level.exit.y + 20, 100, 100); //exit bump
|
||||
|
||||
// spawn.starter(1900, -500, 200) //big boy
|
||||
spawn.starter(1900, -500, 200) //big boy
|
||||
// spawn.grower(1900, -500)
|
||||
// spawn.pulsarBoss(1900, -500)
|
||||
// spawn.shooterBoss(1900, -500)
|
||||
// spawn.historyBoss(1200, -500)
|
||||
// spawn.laserTargetingBoss(1600, -400)
|
||||
spawn.hopper(1600, -500)
|
||||
// spawn.hopper(1600, -500)
|
||||
// spawn.laserTargetingBoss(1700, -120)
|
||||
// spawn.bomberBoss(1400, -500)
|
||||
spawn.hopBoss(1800, -120)
|
||||
// spawn.hopBoss(1800, -120)
|
||||
// spawn.streamBoss(1600, -500)
|
||||
// spawn.orbitalBoss(1600, -500)
|
||||
// spawn.cellBossCulture(1600, -500)
|
||||
|
||||
22
js/player.js
22
js/player.js
@@ -1683,7 +1683,7 @@ const m = {
|
||||
m.energy -= 0.04;
|
||||
b.iceIX(1)
|
||||
} else if (tech.isDroneRadioactive) {
|
||||
m.energy -= 1;
|
||||
m.energy -= 1.5; //almost 5x drain of normal drones
|
||||
b.droneRadioactive({ x: m.pos.x + 30 * Math.cos(m.angle) + 10 * (Math.random() - 0.5), y: m.pos.y + 30 * Math.sin(m.angle) + 10 * (Math.random() - 0.5) }, 25)
|
||||
} else {
|
||||
m.energy -= 0.45 * tech.droneEnergyReduction;
|
||||
@@ -1916,7 +1916,7 @@ const m = {
|
||||
}
|
||||
},
|
||||
{
|
||||
name: "time dilation field",
|
||||
name: "time dilation",
|
||||
description: "use <strong class='color-f'>energy</strong> to <strong style='letter-spacing: 1px;'>stop time</strong><br><strong>move</strong> and <strong>fire</strong> while time is stopped<br>mobs still do <strong class='color-harm'>harm</strong> while time is stopped",
|
||||
effect: () => {
|
||||
// m.fieldMeterColor = "#000"
|
||||
@@ -1960,13 +1960,19 @@ const m = {
|
||||
sleep(mob);
|
||||
sleep(body);
|
||||
sleep(bullet);
|
||||
// for (let i = 0, len = cons.length; i < len; i++) {
|
||||
// Matter.Body.setVelocity(cons[i].bodyB, {
|
||||
// x: 0,
|
||||
// y: 0
|
||||
// });
|
||||
// }
|
||||
//doesn't really work, just slows down constraints
|
||||
for (let i = 0, len = cons.length; i < len; i++) {
|
||||
if (cons[i].stiffness !== 0) {
|
||||
cons[i].storeStiffness = cons[i].stiffness;
|
||||
cons[i].stiffness = 0;
|
||||
}
|
||||
}
|
||||
// for (let i = 0, len = cons.length; i < len; i++) {
|
||||
// if (cons[i].stiffness !== 0) {
|
||||
// cons[i].storeStiffness = cons[i].stiffness;
|
||||
// cons[i].stiffness = 0;
|
||||
// }
|
||||
// }
|
||||
|
||||
simulation.cycle--; //pause all functions that depend on game cycle increasing
|
||||
if (tech.isTimeSkip) {
|
||||
|
||||
131
js/tech.js
131
js/tech.js
@@ -843,7 +843,7 @@
|
||||
allowed() {
|
||||
return ((m.fieldUpgrades[m.fieldMode].name === "nano-scale manufacturing" && !(tech.isDroneRadioactive || tech.isSporeField || tech.isMissileField || tech.isIceField)) || (tech.haveGunCheck("drones") && !tech.isDroneRadioactive) || tech.haveGunCheck("super balls") || tech.haveGunCheck("shotgun")) && !tech.isNailShot
|
||||
},
|
||||
requires: "super balls, shotgun, drones, not radioactive drones",
|
||||
requires: "super balls, shotgun, drones, not irradiated drones",
|
||||
effect() {
|
||||
tech.isIncendiary = true
|
||||
},
|
||||
@@ -4067,9 +4067,9 @@
|
||||
frequency: 2,
|
||||
frequencyDefault: 2,
|
||||
allowed() {
|
||||
return tech.isNeutronBomb || tech.isDroneRadioactive
|
||||
return tech.isNeutronBomb || tech.isDroneRadioactive || tech.isExplodeRadio
|
||||
},
|
||||
requires: "neutron bomb or radioactive drones",
|
||||
requires: "neutron bomb or irradiated drones or iridium-192",
|
||||
effect() {
|
||||
tech.isRadioactiveResistance = true
|
||||
},
|
||||
@@ -4086,9 +4086,9 @@
|
||||
frequency: 2,
|
||||
frequencyDefault: 2,
|
||||
allowed() {
|
||||
return tech.isNeutronBomb || tech.isDroneRadioactive
|
||||
return tech.isNeutronBomb
|
||||
},
|
||||
requires: "neutron bomb or radioactive drones",
|
||||
requires: "neutron bomb",
|
||||
effect() {
|
||||
tech.isNeutronSlow = true
|
||||
},
|
||||
@@ -4271,35 +4271,32 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
name: "radioisotope generator",
|
||||
description: "<strong class='color-p'>irradiate</strong> <strong>drones</strong>, reduce <strong class='color-g'>ammo</strong> by <strong>75%</strong><br>does <strong class='color-d'>damage</strong>, <strong class='color-harm'>harm</strong>, and drains <strong class='color-f'>energy</strong>",
|
||||
name: "reduced tolerances",
|
||||
description: "increase <strong>drone</strong> <strong class='color-g'>ammo</strong>/<strong class='color-f'>efficiency</strong> by <strong>66%</strong><br>reduce the average <strong>drone</strong> lifetime by <strong>40%</strong>",
|
||||
isGunTech: true,
|
||||
maxCount: 1,
|
||||
maxCount: 3,
|
||||
count: 0,
|
||||
frequency: 2,
|
||||
frequencyDefault: 2,
|
||||
allowed() {
|
||||
return tech.haveGunCheck("drones") && tech.droneCycleReduction === 1 && !tech.isIncendiary
|
||||
return !tech.isDroneRadioactive && (tech.haveGunCheck("drones") || (m.fieldUpgrades[m.fieldMode].name === "nano-scale manufacturing" && !(tech.isSporeField || tech.isMissileField || tech.isIceField)))
|
||||
},
|
||||
requires: "drone gun, not reduced tolerances or incendiary",
|
||||
requires: "drones, not irradiated drones",
|
||||
effect() {
|
||||
tech.isDroneRadioactive = true
|
||||
tech.droneCycleReduction = Math.pow(0.6, 1 + this.count)
|
||||
tech.droneEnergyReduction = Math.pow(0.333, 1 + this.count)
|
||||
for (i = 0, len = b.guns.length; i < len; i++) { //find which gun
|
||||
if (b.guns[i].name === "drones") {
|
||||
b.guns[i].ammoPack = b.guns[i].defaultAmmoPack * 0.25
|
||||
b.guns[i].ammo = Math.ceil(b.guns[i].ammo * 0.25)
|
||||
const scale = Math.pow(3, this.count + 1)
|
||||
b.guns[i].ammoPack = b.guns[i].defaultAmmoPack * scale
|
||||
}
|
||||
}
|
||||
},
|
||||
remove() {
|
||||
if (tech.isDroneRadioactive) {
|
||||
tech.isDroneRadioactive = false
|
||||
for (i = 0, len = b.guns.length; i < len; i++) { //find which gun
|
||||
if (b.guns[i].name === "drones") {
|
||||
b.guns[i].ammoPack = b.guns[i].defaultAmmoPack
|
||||
b.guns[i].ammo = b.guns[i].ammo * 4
|
||||
}
|
||||
}
|
||||
tech.droneCycleReduction = 1
|
||||
tech.droneEnergyReduction = 1
|
||||
for (i = 0, len = b.guns.length; i < len; i++) { //find which gun
|
||||
if (b.guns[i].name === "drones") b.guns[i].ammoPack = b.guns[i].defaultAmmoPack
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -4361,35 +4358,58 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
name: "reduced tolerances",
|
||||
description: "increase <strong>drone</strong> <strong class='color-g'>ammo</strong>/<strong class='color-f'>efficiency</strong> by <strong>66%</strong><br>reduce the average <strong>drone</strong> lifetime by <strong>40%</strong>",
|
||||
name: "irradiated drones",
|
||||
description: "<strong class='color-p'>irradiate</strong> the space around your <strong>drones</strong><br>reduce <strong class='color-g'>ammo</strong>/<strong class='color-f'>efficiency</strong> by <strong>80%</strong>",
|
||||
//<br>does <strong class='color-d'>damage</strong>, <strong class='color-harm'>harm</strong>, and drains <strong class='color-f'>energy</strong>
|
||||
isGunTech: true,
|
||||
maxCount: 3,
|
||||
maxCount: 1,
|
||||
count: 0,
|
||||
frequency: 2,
|
||||
frequencyDefault: 2,
|
||||
allowed() {
|
||||
return !tech.isDroneRadioactive && (tech.haveGunCheck("drones") || (m.fieldUpgrades[m.fieldMode].name === "nano-scale manufacturing" && !(tech.isSporeField || tech.isMissileField || tech.isIceField)))
|
||||
return tech.droneCycleReduction === 1 && !tech.isIncendiary && (tech.haveGunCheck("drones") || (m.fieldUpgrades[m.fieldMode].name === "nano-scale manufacturing" && !(tech.isSporeField || tech.isMissileField || tech.isIceField)))
|
||||
},
|
||||
requires: "drones",
|
||||
requires: "drone gun, not reduced tolerances or incendiary",
|
||||
effect() {
|
||||
tech.droneCycleReduction = Math.pow(0.6, 1 + this.count)
|
||||
tech.droneEnergyReduction = Math.pow(0.333, 1 + this.count)
|
||||
tech.isDroneRadioactive = true
|
||||
for (i = 0, len = b.guns.length; i < len; i++) { //find which gun
|
||||
if (b.guns[i].name === "drones") {
|
||||
const scale = Math.pow(3, this.count + 1)
|
||||
b.guns[i].ammoPack = b.guns[i].defaultAmmoPack * scale
|
||||
b.guns[i].ammoPack = b.guns[i].defaultAmmoPack * 0.2
|
||||
b.guns[i].ammo = Math.ceil(b.guns[i].ammo * 0.2)
|
||||
}
|
||||
}
|
||||
},
|
||||
remove() {
|
||||
tech.droneCycleReduction = 1
|
||||
tech.droneEnergyReduction = 1
|
||||
for (i = 0, len = b.guns.length; i < len; i++) { //find which gun
|
||||
if (b.guns[i].name === "drones") b.guns[i].ammoPack = b.guns[i].defaultAmmoPack
|
||||
if (tech.isDroneRadioactive) {
|
||||
tech.isDroneRadioactive = false
|
||||
for (i = 0, len = b.guns.length; i < len; i++) { //find which gun
|
||||
if (b.guns[i].name === "drones") {
|
||||
b.guns[i].ammoPack = b.guns[i].defaultAmmoPack
|
||||
b.guns[i].ammo = b.guns[i].ammo * 5
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
name: "beta radiation", //"control rod ejection",
|
||||
description: "reduce the average <strong>drone</strong> lifetime by <strong>50%</strong><br>increase <strong class='color-p'>radiation</strong> <strong class='color-d'>damage</strong> by <strong>100%</strong>",
|
||||
isGunTech: true,
|
||||
maxCount: 1,
|
||||
count: 0,
|
||||
frequency: 2,
|
||||
frequencyDefault: 2,
|
||||
allowed() {
|
||||
return tech.isDroneRadioactive
|
||||
},
|
||||
requires: "irradiated drones",
|
||||
effect() {
|
||||
tech.droneRadioDamage = 2
|
||||
},
|
||||
remove() {
|
||||
tech.droneRadioDamage = 1
|
||||
}
|
||||
},
|
||||
{
|
||||
name: "necrophoresis",
|
||||
description: "<strong>foam</strong> bubbles grow and split into 3 <strong>copies</strong><br> when the mob they are stuck to <strong>dies</strong>",
|
||||
@@ -5000,12 +5020,12 @@
|
||||
isFieldTech: true,
|
||||
maxCount: 1,
|
||||
count: 0,
|
||||
frequency: 2,
|
||||
frequencyDefault: 2,
|
||||
frequency: 3,
|
||||
frequencyDefault: 3,
|
||||
allowed() {
|
||||
return (build.isExperimentSelection || powerUps.research.count > 2) && m.fieldUpgrades[m.fieldMode].name === "nano-scale manufacturing" && !(tech.isMissileField || tech.isIceField || tech.isFastDrones || tech.isDroneGrab)
|
||||
return (build.isExperimentSelection || powerUps.research.count > 2) && m.fieldUpgrades[m.fieldMode].name === "nano-scale manufacturing" && !(tech.isMissileField || tech.isIceField || tech.isFastDrones || tech.isDroneGrab || tech.isDroneRadioactive)
|
||||
},
|
||||
requires: "nano-scale manufacturing, no other manufacturing",
|
||||
requires: "nano-scale manufacturing, no other manufacturing, no drone tech",
|
||||
effect() {
|
||||
if (!build.isExperimentSelection) {
|
||||
for (let i = 0; i < 3; i++) {
|
||||
@@ -5024,12 +5044,12 @@
|
||||
isFieldTech: true,
|
||||
maxCount: 1,
|
||||
count: 0,
|
||||
frequency: 2,
|
||||
frequencyDefault: 2,
|
||||
frequency: 3,
|
||||
frequencyDefault: 3,
|
||||
allowed() {
|
||||
return (build.isExperimentSelection || powerUps.research.count > 2) && m.maxEnergy > 0.5 && m.fieldUpgrades[m.fieldMode].name === "nano-scale manufacturing" && !(tech.isSporeField || tech.isIceField || tech.isFastDrones || tech.isDroneGrab)
|
||||
return (build.isExperimentSelection || powerUps.research.count > 2) && m.maxEnergy > 0.5 && m.fieldUpgrades[m.fieldMode].name === "nano-scale manufacturing" && !(tech.isSporeField || tech.isIceField || tech.isFastDrones || tech.isDroneGrab || tech.isDroneRadioactive)
|
||||
},
|
||||
requires: "nano-scale manufacturing, no other manufacturing",
|
||||
requires: "nano-scale manufacturing, no other manufacturing, no drone tech",
|
||||
effect() {
|
||||
if (!build.isExperimentSelection) {
|
||||
for (let i = 0; i < 3; i++) {
|
||||
@@ -5048,12 +5068,12 @@
|
||||
isFieldTech: true,
|
||||
maxCount: 1,
|
||||
count: 0,
|
||||
frequency: 2,
|
||||
frequencyDefault: 2,
|
||||
frequency: 3,
|
||||
frequencyDefault: 3,
|
||||
allowed() {
|
||||
return (build.isExperimentSelection || powerUps.research.count > 2) && m.fieldUpgrades[m.fieldMode].name === "nano-scale manufacturing" && !(tech.isSporeField || tech.isMissileField || tech.isFastDrones || tech.isDroneGrab)
|
||||
return (build.isExperimentSelection || powerUps.research.count > 2) && m.fieldUpgrades[m.fieldMode].name === "nano-scale manufacturing" && !(tech.isSporeField || tech.isMissileField || tech.isFastDrones || tech.isDroneGrab || tech.isDroneRadioactive)
|
||||
},
|
||||
requires: "nano-scale manufacturing, no other manufacturing",
|
||||
requires: "nano-scale manufacturing, no other manufacturing, no drone tech",
|
||||
effect() {
|
||||
if (!build.isExperimentSelection) {
|
||||
for (let i = 0; i < 3; i++) {
|
||||
@@ -5152,9 +5172,9 @@
|
||||
frequency: 2,
|
||||
frequencyDefault: 2,
|
||||
allowed() {
|
||||
return m.fieldUpgrades[m.fieldMode].name === "pilot wave" || m.fieldUpgrades[m.fieldMode].name === "negative mass field" || m.fieldUpgrades[m.fieldMode].name === "time dilation field"
|
||||
return m.fieldUpgrades[m.fieldMode].name === "pilot wave" || m.fieldUpgrades[m.fieldMode].name === "negative mass field" || m.fieldUpgrades[m.fieldMode].name === "time dilation"
|
||||
},
|
||||
requires: "pilot wave, negative mass field, time dilation field",
|
||||
requires: "pilot wave, negative mass field, time dilation",
|
||||
effect() {
|
||||
tech.isFreezeMobs = true
|
||||
},
|
||||
@@ -5269,9 +5289,9 @@
|
||||
frequency: 2,
|
||||
frequencyDefault: 2,
|
||||
allowed() {
|
||||
return m.fieldUpgrades[m.fieldMode].name === "time dilation field"
|
||||
return m.fieldUpgrades[m.fieldMode].name === "time dilation"
|
||||
},
|
||||
requires: "time dilation field",
|
||||
requires: "time dilation",
|
||||
effect() {
|
||||
tech.isTimeSkip = true;
|
||||
b.setFireCD();
|
||||
@@ -5290,9 +5310,9 @@
|
||||
frequency: 2,
|
||||
frequencyDefault: 2,
|
||||
allowed() {
|
||||
return m.fieldUpgrades[m.fieldMode].name === "time dilation field"
|
||||
return m.fieldUpgrades[m.fieldMode].name === "time dilation"
|
||||
},
|
||||
requires: "time dilation field",
|
||||
requires: "time dilation",
|
||||
effect() {
|
||||
tech.fastTime = 1.40;
|
||||
tech.fastTimeJump = 1.11;
|
||||
@@ -5315,9 +5335,9 @@
|
||||
frequency: 2,
|
||||
frequencyDefault: 2,
|
||||
allowed() {
|
||||
return (m.fieldUpgrades[m.fieldMode].name === "time dilation field") && tech.energyRegen !== 0
|
||||
return (m.fieldUpgrades[m.fieldMode].name === "time dilation") && tech.energyRegen !== 0
|
||||
},
|
||||
requires: "time dilation field, not ground state",
|
||||
requires: "time dilation, not ground state",
|
||||
effect: () => {
|
||||
tech.energyRegen = 0.004;
|
||||
m.fieldRegen = tech.energyRegen;
|
||||
@@ -7246,5 +7266,6 @@
|
||||
superBallDelay: null,
|
||||
isBlockExplode: null,
|
||||
isOverHeal: null,
|
||||
isDroneRadioactive: null
|
||||
isDroneRadioactive: null,
|
||||
droneRadioDamage: null
|
||||
}
|
||||
48
todo.txt
48
todo.txt
@@ -1,23 +1,21 @@
|
||||
******************************************************** NEXT PATCH ********************************************************
|
||||
|
||||
tech - radioisotope generator - drones have the effect of neutron bomb, but you get less ammo
|
||||
bug fix - reduced tolerances now properly gives extra ammo
|
||||
water shielding now protects you from all radioactivity, but only gives 75% protection
|
||||
(drones, neutron bomb, radioactive explosions, and even slime)
|
||||
irradiated drones
|
||||
new tech: beta radiation - double damage and half lifespan
|
||||
now don't clump as often, to make the graphics look better
|
||||
effective radius now includes edges of mobs, not just centers
|
||||
so they work better on large radius mobs
|
||||
do 50% more damage, but have a 10% smaller radius and last 3 second shorter time and 80% less ammo (was 75%)
|
||||
irradiated drones can't get a slowing effect anymore
|
||||
it was just too annoying
|
||||
nano-scale can now unlock irradiated drone tech properly
|
||||
nano-scale now drains more energy per irradiated drone, to scale with the higher ammo costs
|
||||
|
||||
final boss has more durability in it's final phase
|
||||
final boss no longers gets knocked around as much from explosions
|
||||
|
||||
level.warehouse predraw lighting for performance
|
||||
bug fix on sewers where slime was doing too much harm
|
||||
time dilation field is now just called "time dilation"
|
||||
constraints under time dilation is less buggy, but still a bit buggy
|
||||
|
||||
******************************************************** BUGS ********************************************************
|
||||
|
||||
slime does extra damage on flipped levels?
|
||||
|
||||
using time dilatation breaks constraints
|
||||
on map n-gon, toggles
|
||||
|
||||
player can become crouched while not touching the ground if they exit the ground while crouched
|
||||
|
||||
a couple times people have reported the final boss dropping extra bodies on death
|
||||
@@ -40,10 +38,6 @@ is there a way to check if the player is stuck inside the map or block
|
||||
|
||||
******************************************************** LEVELS ********************************************************
|
||||
|
||||
make a power up you can carry around like the heal power up when at full health
|
||||
drop it on a map element to turn it on?
|
||||
use it in combat?
|
||||
|
||||
labs - procedural generation
|
||||
bugs
|
||||
mob spawns shouldn't be based on probability?
|
||||
@@ -92,18 +86,11 @@ map: observatory
|
||||
laser beam shoots out of telescope
|
||||
button opens the dome
|
||||
|
||||
map: prison
|
||||
doors linked to buttons
|
||||
mobs inside the doors?
|
||||
|
||||
boss levels - small levels just a boss, and maybe a few mobs
|
||||
boss level for timeSkipBoss because of game instability for boss on normal levels
|
||||
this might not fix issues
|
||||
|
||||
******************************************************** MOBS ********************************************************
|
||||
|
||||
mob mechanics
|
||||
use the force at a location effect, like the plasma field
|
||||
Matter.Body.applyForce(who, path[1], force)
|
||||
|
||||
mob - after taking damage
|
||||
release seekers
|
||||
@@ -153,6 +140,13 @@ level boss: fires a line intersection in a random direction every few seconds.
|
||||
|
||||
******************************************************** TODO ********************************************************
|
||||
|
||||
tech - shorter cloaking delay
|
||||
|
||||
irradiated drones, get annoying when they go after mobs near the player...
|
||||
should they only follow mouse? or at least show a preference for targets near mouse, not near player
|
||||
|
||||
tech - 1/2 your drone ammo/efficiency double the damage?
|
||||
|
||||
tech foam teleports around, like a quantum wave function collapse
|
||||
|
||||
should ammo apply to all guns, or just one of your guns?
|
||||
@@ -174,7 +168,7 @@ have throw charge scale with fire delay
|
||||
in testing mode console log the body you click on
|
||||
|
||||
throwing a block removes the block and rewinds time 10 seconds (including health and energy)
|
||||
requires CPT, CPT gun, time dilation field?
|
||||
requires CPT, CPT gun, time dilation?
|
||||
|
||||
tech plasma : plasma length increases then decreases as you hold down the field button (like stabbing with a spear)
|
||||
grows to 1.5 longer after 0.3 seconds, then returns to normal length over 1 second, until field is pressed again
|
||||
|
||||
Reference in New Issue
Block a user