From 5d4ef1994c5736cdc08934067199de85e3bca109 Mon Sep 17 00:00:00 2001 From: landgreen Date: Tue, 29 Jun 2021 07:18:41 -0700 Subject: [PATCH] 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 --- .DS_Store | Bin 6148 -> 6148 bytes js/bullet.js | 55 +++++++-------------- js/level.js | 28 ++++------- js/player.js | 22 +++++---- js/tech.js | 131 ++++++++++++++++++++++++++++++--------------------- todo.txt | 48 +++++++++---------- 6 files changed, 136 insertions(+), 148 deletions(-) diff --git a/.DS_Store b/.DS_Store index 039b8fba40af18b2fdfe23e4dcc3a2b278bcc3b4..dd7f99354f8c5ad737f32e2b425a944b7bc18f98 100644 GIT binary patch delta 21 ccmZoMXffEJ#mw~Bc(M+&AEUtLYUWN607>o!O#lD@ delta 21 ccmZoMXffEJ#mw~R;$$6WKSqbm)y$nD08(iO8UO$Q 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