diff --git a/.DS_Store b/.DS_Store
index 039b8fb..dd7f993 100644
Binary files a/.DS_Store and b/.DS_Store differ
diff --git a/js/bullet.js b/js/bullet.js
index 5b978e2..55af9b6 100644
--- a/js/bullet.js
+++ b/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) {
diff --git a/js/level.js b/js/level.js
index 768f834..6f0369a 100644
--- a/js/level.js
+++ b/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)
diff --git a/js/player.js b/js/player.js
index 8000520..7ee8b3c 100644
--- a/js/player.js
+++ b/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 energy to stop time
move and fire while time is stopped
mobs still do harm 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) {
diff --git a/js/tech.js b/js/tech.js
index b554971..c768d8b 100644
--- a/js/tech.js
+++ b/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: "irradiate drones, reduce ammo by 75%
does damage, harm, and drains energy",
+ name: "reduced tolerances",
+ description: "increase drone ammo/efficiency by 66%
reduce the average drone lifetime by 40%",
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 drone ammo/efficiency by 66%
reduce the average drone lifetime by 40%",
+ name: "irradiated drones",
+ description: "irradiate the space around your drones
reduce ammo/efficiency by 80%",
+ //
does damage, harm, and drains energy
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 drone lifetime by 50%
increase radiation damage by 100%",
+ 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: "foam bubbles grow and split into 3 copies
when the mob they are stuck to dies",
@@ -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
}
\ No newline at end of file
diff --git a/todo.txt b/todo.txt
index 9fecfab..abe42bd 100644
--- a/todo.txt
+++ b/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