diff --git a/js/player.js b/js/player.js index c3733f4..11074e9 100644 --- a/js/player.js +++ b/js/player.js @@ -2020,23 +2020,23 @@ const m = { }, { name: "molecular assembler", - description: "excess energy used to build drones
use energy to deflect mobs
generate 12 energy per second", - //double your default energy regeneration + description: `excess energy used to build ${simulation.molecularMode === 0 ? "spores" : simulation.molecularMode === 1 ? "missiles" : simulation.molecularMode === 2 ? "ice IX" : "drones"}
use energy to deflect mobs
generate 12 energy per second`, + // simulation.molecularMode: Math.floor(4 * Math.random()), //0 spores, 1 missile, 2 ice IX, 3 drones effect: () => { m.fieldMeterColor = "#ff0" m.eyeFillColor = m.fieldMeterColor m.hold = function() { if (m.energy > m.maxEnergy - 0.02 && m.fieldCDcycle < m.cycle && !input.field && bullet.length < 300 && (m.cycle % 2)) { - if (tech.isSporeField) { + if (simulation.molecularMode === 0) { if (tech.isSporeFlea) { - const drain = 0.15 + (Math.max(bullet.length, 130) - 130) * 0.02 + const drain = 0.18 + (Math.max(bullet.length, 130) - 130) * 0.02 if (m.energy > drain) { m.energy -= drain const speed = m.crouch ? 20 + 8 * Math.random() : 10 + 3 * Math.random() b.flea({ x: m.pos.x + 35 * Math.cos(m.angle), y: m.pos.y + 35 * Math.sin(m.angle) }, { x: speed * Math.cos(m.angle), y: speed * Math.sin(m.angle) }) } } else if (tech.isSporeWorm) { - const drain = 0.15 + (Math.max(bullet.length, 130) - 130) * 0.02 + const drain = 0.18 + (Math.max(bullet.length, 130) - 130) * 0.02 if (m.energy > drain) { m.energy -= drain b.worm({ x: m.pos.x + 35 * Math.cos(m.angle), y: m.pos.y + 35 * Math.sin(m.angle) }) @@ -2047,7 +2047,7 @@ const m = { }); } } else { - const drain = 0.08 + (Math.max(bullet.length, 130) - 130) * 0.01 + const drain = 0.1 + (Math.max(bullet.length, 130) - 130) * 0.01 for (let i = 0, len = Math.random() * 20; i < len; i++) { if (m.energy > drain) { m.energy -= drain @@ -2057,25 +2057,27 @@ const m = { } } } - } else if (tech.isMissileField) { - m.energy -= 0.3; + } else if (simulation.molecularMode === 1) { + m.energy -= 0.35; b.missile({ x: m.pos.x, y: m.pos.y - 40 }, -Math.PI / 2 + 0.5 * (Math.random() - 0.5), 0, 1) - } else if (tech.isIceField) { - m.energy -= 0.04; + } else if (simulation.molecularMode === 2) { + m.energy -= 0.05; b.iceIX(1) - } else if (tech.isDroneRadioactive) { - const drain = 0.8 + (Math.max(bullet.length, 50) - 50) * 0.01 - if (m.energy > drain) { - m.energy -= drain - 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 { - //every bullet above 100 adds 0.005 to the energy cost per drone - //at 200 bullets the energy cost is 0.45 + 100*0.006 = 1.05 - const drain = (0.45 + (Math.max(bullet.length, 100) - 100) * 0.006) * tech.droneEnergyReduction - if (m.energy > drain) { - m.energy -= drain - b.drone() + } else if (simulation.molecularMode === 3) { + if (tech.isDroneRadioactive) { + const drain = 0.8 + (Math.max(bullet.length, 50) - 50) * 0.01 + if (m.energy > drain) { + m.energy -= drain + 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 { + //every bullet above 100 adds 0.005 to the energy cost per drone + //at 200 bullets the energy cost is 0.45 + 100*0.006 = 1.05 + const drain = (0.45 + (Math.max(bullet.length, 100) - 100) * 0.006) * tech.droneEnergyReduction + if (m.energy > drain) { + m.energy -= drain + b.drone() + } } } } diff --git a/js/simulation.js b/js/simulation.js index 6915d26..abf14a2 100644 --- a/js/simulation.js +++ b/js/simulation.js @@ -191,6 +191,7 @@ const simulation = { accelScale: null, //set in levels.setDifficulty CDScale: null, //set in levels.setDifficulty isNoPowerUps: false, + molecularMode: Math.floor(4 * Math.random()), //0 spores, 1 missile, 2 ice IX, 3 drones // dropFPS(cap = 40, time = 15) { // simulation.fpsCap = cap // simulation.fpsInterval = 1000 / simulation.fpsCap; diff --git a/js/tech.js b/js/tech.js index 30f2aac..a9c8fc3 100644 --- a/js/tech.js +++ b/js/tech.js @@ -221,7 +221,7 @@ const tech = { } }, hasExplosiveDamageCheck() { - return tech.haveGunCheck("missiles") || tech.isMissileField || tech.missileBotCount > 0 || tech.isBoomBotUpgrade || tech.isIncendiary || tech.isPulseLaser || tech.isTokamak || (tech.haveGunCheck("grenades") && !tech.isNeutronBomb) + return tech.haveGunCheck("missiles") || simulation.molecularMode === 1 || tech.missileBotCount > 0 || tech.isBoomBotUpgrade || tech.isIncendiary || tech.isPulseLaser || tech.isTokamak || (tech.haveGunCheck("grenades") && !tech.isNeutronBomb) }, damageFromTech() { let dmg = 1 //m.fieldDamage @@ -890,9 +890,9 @@ const tech = { frequency: 1, frequencyDefault: 1, allowed() { - return true //m.fieldUpgrades[m.fieldMode].name === "molecular assembler" || tech.haveGunCheck("spores") || tech.haveGunCheck("drones") || tech.haveGunCheck("missiles") || tech.haveGunCheck("foam") || tech.haveGunCheck("matter wave") || tech.isNeutronBomb || tech.isIceField || tech.isIceShot || tech.relayIce || tech.isNeedleIce || tech.blockingIce > 1 || tech.isSporeWorm || tech.isFoamBotUpgrade || tech.isFoamBall + return true }, - requires: "", //drones, spores, missiles, foam, matter wave, neutron bomb, ice IX, flea + requires: "", effect() { tech.isBulletsLastLonger += 0.3 }, @@ -1010,7 +1010,7 @@ const tech = { frequency: 1, frequencyDefault: 1, allowed() { - return !tech.isEnergyHealth //((m.fieldUpgrades[m.fieldMode].name === "standing wave" && (tech.blockingIce !== 0 || tech.blockDmg !== 0)) || b.totalBots() > 1 || tech.haveGunCheck("mine") || tech.haveGunCheck("spores") || m.fieldUpgrades[m.fieldMode].name === "molecular assembler") && + return !tech.isEnergyHealth }, requires: "not mass-energy", effect() { @@ -2086,7 +2086,7 @@ const tech = { count: 0, frequency: 1, frequencyDefault: 1, - allowed() { //&& (m.fieldUpgrades[m.fieldMode].name !== "molecular assembler" || m.maxEnergy > 1) + allowed() { return m.maxEnergy > 0.99 && m.fieldUpgrades[m.fieldMode].name !== "standing wave" && !tech.isEnergyHealth && !tech.isRewindField //&& !tech.isRewindGun }, requires: "not standing wave, mass-energy, max energy reduction, retrocausality", @@ -3730,51 +3730,6 @@ const tech = { //************************************************** gun //************************************************** tech //************************************************** - // { - // name: "CPT gun", - // link: `CPT gun`, - // description: `adds the CPT gun to your inventory
it rewinds your health, velocity, and position`, - // isGunTech: true, - // maxCount: 1, - // count: 0, - // frequency: 2, - // frequencyDefault: 2, - // allowed() { - // return (b.totalBots() > 3 || m.fieldUpgrades[m.fieldMode].name === "molecular assembler" || m.fieldUpgrades[m.fieldMode].name === "plasma torch" || m.fieldUpgrades[m.fieldMode].name === "pilot wave") && !tech.isEnergyHealth && !tech.isRewindAvoidDeath //build.isExperimentSelection || - // }, - // requires: "bots > 3, plasma torch, assembler, pilot wave, not mass-energy equivalence, CPT", - // effect() { - // tech.isRewindGun = true - // b.guns.push(b.gunRewind) - // b.giveGuns("CPT gun"); - // }, - // remove() { - // if (tech.isRewindGun) { - // b.removeGun("CPT gun", true) - // // for (let i = 0; i < b.guns.length; i++) { - // // if (b.guns[i].name === "CPT gun") { - // // b.guns[i].have = false - // // for (let j = 0; j < b.inventory.length; j++) { - // // if (b.inventory[j] === i) { - // // b.inventory.splice(j, 1) - // // break - // // } - // // } - // // if (b.inventory.length) { - // // b.activeGun = b.inventory[0]; - // // } else { - // // b.activeGun = null; - // // } - // // simulation.makeGunHUD(); - - // // b.guns.splice(i, 1) //also remove CPT gun from gun pool array - // // break - // // } - // // } - // tech.isRewindGun = false - // } - // } - // }, { name: "needle ice", description: `after needles impact walls
they chip off 1-2 freezing ice IX crystals`, @@ -4244,7 +4199,7 @@ const tech = { frequency: 2, frequencyDefault: 2, allowed() { - return tech.isIceCrystals || tech.isSporeFreeze || tech.isIceField || tech.isIceShot || tech.relayIce || tech.isNeedleIce || tech.blockingIce > 1 + return tech.isIceCrystals || tech.isSporeFreeze || simulation.molecularMode === 2 || tech.isIceShot || tech.relayIce || tech.isNeedleIce || tech.blockingIce > 1 }, requires: "a freeze effect", effect() { @@ -4263,7 +4218,7 @@ const tech = { frequency: 2, frequencyDefault: 2, allowed() { - return tech.isIceCrystals || tech.isSporeFreeze || tech.isIceField || tech.isIceShot || tech.relayIce || tech.isNeedleIce || tech.blockingIce > 1 + return tech.isIceCrystals || tech.isSporeFreeze || simulation.molecularMode === 2 || tech.isIceShot || tech.relayIce || tech.isNeedleIce || tech.blockingIce > 1 }, requires: "a freeze effect", effect() { @@ -4282,7 +4237,7 @@ const tech = { frequency: 2, frequencyDefault: 2, allowed() { - return (tech.isIceCrystals || tech.isSporeFreeze || tech.isIceField || tech.isIceShot || tech.relayIce || tech.isNeedleIce || tech.blockingIce > 1) && !tech.sporesOnDeath && !tech.isExplodeMob && !tech.botSpawner && !tech.isMobBlockFling && !tech.nailsDeathMob + return (tech.isIceCrystals || tech.isSporeFreeze || simulation.molecularMode === 2 || tech.isIceShot || tech.relayIce || tech.isNeedleIce || tech.blockingIce > 1) && !tech.sporesOnDeath && !tech.isExplodeMob && !tech.botSpawner && !tech.isMobBlockFling && !tech.nailsDeathMob }, requires: "a localized freeze effect, no other mob death tech", effect() { @@ -4301,7 +4256,7 @@ const tech = { frequency: 2, frequencyDefault: 2, allowed() { - return tech.isIceField || tech.relayIce || tech.isNeedleIce || tech.blockingIce || tech.iceIXOnDeath || tech.isIceShot + return simulation.molecularMode === 2 || tech.relayIce || tech.isNeedleIce || tech.blockingIce || tech.iceIXOnDeath || tech.isIceShot }, requires: "ice IX", effect() { @@ -4320,7 +4275,7 @@ const tech = { frequency: 2, frequencyDefault: 2, allowed() { - return tech.isIceCrystals || tech.isSporeFreeze || tech.isIceField || tech.relayIce || tech.isNeedleIce || tech.blockingIce > 1 || tech.iceIXOnDeath || tech.isIceShot + return tech.isIceCrystals || tech.isSporeFreeze || simulation.molecularMode === 2 || tech.relayIce || tech.isNeedleIce || tech.blockingIce > 1 || tech.iceIXOnDeath || tech.isIceShot }, requires: "a localized freeze effect", effect() { @@ -4339,7 +4294,7 @@ const tech = { frequency: 1, frequencyDefault: 1, allowed() { - return (tech.haveGunCheck("shotgun") && !tech.isNailShot && !tech.isIceShot && !tech.isRivets && !tech.isFoamShot && !tech.isSporeWorm && !tech.isNeedles) || (tech.haveGunCheck("super balls") && !tech.isFoamBall) || (tech.isRivets && !tech.isNailCrit) || (m.fieldUpgrades[m.fieldMode].name === "molecular assembler" && !(tech.isDroneTeleport || tech.isDroneRadioactive || tech.isSporeField || tech.isMissileField || tech.isIceField)) || (tech.haveGunCheck("drones") && !tech.isForeverDrones && !tech.isDroneRadioactive && !tech.isDroneTeleport) + return (tech.haveGunCheck("shotgun") && !tech.isNailShot && !tech.isIceShot && !tech.isRivets && !tech.isFoamShot && !tech.isSporeWorm && !tech.isNeedles) || (tech.haveGunCheck("super balls") && !tech.isFoamBall) || (tech.isRivets && !tech.isNailCrit) || (m.fieldUpgrades[m.fieldMode].name === "molecular assembler" && simulation.molecularMode === 1) || (tech.haveGunCheck("drones") && !tech.isForeverDrones && !tech.isDroneRadioactive && !tech.isDroneTeleport) }, requires: "shotgun, super balls, rivets, drones, not irradiated drones, burst drones, polyurethane", effect() { @@ -4622,7 +4577,7 @@ const tech = { frequency: 2, frequencyDefault: 2, allowed() { - return (tech.haveGunCheck("missiles") && tech.missileFireCD === 45) || tech.isMissileField || tech.missileBotCount + return (tech.haveGunCheck("missiles") && tech.missileFireCD === 45) || simulation.molecularMode === 1 || tech.missileBotCount }, requires: "missiles", effect() { @@ -4641,7 +4596,7 @@ const tech = { frequency: 2, frequencyDefault: 2, allowed() { - return tech.haveGunCheck("missiles") && tech.isMissileBig //&& !tech.isSmartRadius && !tech.isImmuneExplosion + return (tech.haveGunCheck("missiles") || simulation.molecularMode === 1) && tech.isMissileBig }, requires: "missiles, cruse missile", effect() { @@ -4728,7 +4683,7 @@ const tech = { frequency: 2, frequencyDefault: 2, allowed() { - return tech.explosiveRadius === 1 && !tech.isSmallExplosion && !tech.isBlockExplode && !tech.fragments && (tech.haveGunCheck("missiles") || tech.missileBotCount || tech.isIncendiary || (tech.haveGunCheck("grenades") && !tech.isNeutronBomb) || tech.isPulseLaser || tech.isMissileField || tech.isBoomBotUpgrade || tech.isTokamak) + return tech.explosiveRadius === 1 && !tech.isSmallExplosion && !tech.isBlockExplode && !tech.fragments && (tech.haveGunCheck("missiles") || tech.missileBotCount || tech.isIncendiary || (tech.haveGunCheck("grenades") && !tech.isNeutronBomb) || tech.isPulseLaser || simulation.molecularMode === 1 || tech.isBoomBotUpgrade || tech.isTokamak) }, requires: "an explosive damage source, not ammonium nitrate, nitroglycerin, chain reaction, fragmentation", effect: () => { @@ -4747,7 +4702,7 @@ const tech = { frequency: 1, frequencyDefault: 1, allowed() { - return !tech.isExplodeRadio && ((tech.haveGunCheck("harpoon") && !tech.isFoamBall) || (tech.haveGunCheck("grenades") && !tech.isNeutronBomb) || tech.haveGunCheck("missiles") || tech.missileBotCount || tech.isRivets || tech.blockDamage > 0.075) + return !tech.isExplodeRadio && ((tech.haveGunCheck("harpoon") && !tech.isFoamBall) || (tech.haveGunCheck("grenades") && !tech.isNeutronBomb) || tech.haveGunCheck("missiles") || simulation.molecularMode === 1 || tech.missileBotCount || tech.isRivets || tech.blockDamage > 0.075) }, requires: "grenades, missiles, rivets, harpoon, or mass driver, not iridium-192, not polyurethane foam", effect() { @@ -4843,7 +4798,7 @@ const tech = { frequency: 2, frequencyDefault: 2, allowed() { - return !tech.isImmuneExplosion && (build.isExperimentSelection || powerUps.research.count > 3) && (tech.haveGunCheck("missiles") || tech.isMissileField || tech.missileBotCount > 0 || tech.isIncendiary || tech.isPulseLaser || tech.isTokamak || (tech.haveGunCheck("grenades") && !tech.isNeutronBomb)) + return !tech.isImmuneExplosion && (build.isExperimentSelection || powerUps.research.count > 3) && (tech.haveGunCheck("missiles") || simulation.molecularMode === 1 || tech.missileBotCount > 0 || tech.isIncendiary || tech.isPulseLaser || tech.isTokamak || (tech.haveGunCheck("grenades") && !tech.isNeutronBomb)) }, requires: "an explosive damage source, not electric reactive armor", effect: () => { @@ -4886,7 +4841,7 @@ const tech = { frequency: 2, frequencyDefault: 2, allowed() { - return tech.haveGunCheck("missiles") || tech.missileBotCount || tech.haveGunCheck("grenades") + return tech.haveGunCheck("missiles") || tech.missileBotCount || tech.haveGunCheck("grenades") || simulation.molecularMode === 1 }, requires: "missiles, grenades", effect() { @@ -5227,7 +5182,7 @@ const tech = { frequency: 2, frequencyDefault: 2, allowed() { - return tech.haveGunCheck("spores") || tech.sporesOnDeath > 0 || tech.isSporeField || tech.isSporeWorm || tech.isSporeFlea + return tech.haveGunCheck("spores") || tech.sporesOnDeath > 0 || simulation.molecularMode === 0 || tech.isSporeWorm || tech.isSporeFlea }, requires: "spores", effect() { @@ -5247,7 +5202,7 @@ const tech = { frequency: 2, frequencyDefault: 2, allowed() { - return tech.haveGunCheck("spores") || tech.sporesOnDeath > 0 || tech.isSporeField || tech.isSporeWorm || tech.isSporeFlea + return tech.haveGunCheck("spores") || tech.sporesOnDeath > 0 || simulation.molecularMode === 0 || tech.isSporeWorm || tech.isSporeFlea }, requires: "spores", effect() { @@ -5267,7 +5222,7 @@ const tech = { frequency: 2, frequencyDefault: 2, allowed() { - return (tech.haveGunCheck("spores") || tech.sporesOnDeath > 0 || tech.isSporeField) && !tech.isEnergyHealth || tech.isSporeWorm || tech.isSporeFlea + return (tech.haveGunCheck("spores") || tech.sporesOnDeath > 0 || simulation.molecularMode === 0) && !tech.isEnergyHealth || tech.isSporeWorm || tech.isSporeFlea }, requires: "spores, not mass-energy", effect() { @@ -5278,7 +5233,7 @@ const tech = { } }, { - name: "fleas", + name: "siphonaptera", description: "sporangium hatch fleas", //
spore tech applies to fleas isGunTech: true, maxCount: 1, @@ -5286,7 +5241,7 @@ const tech = { frequency: 3, frequencyDefault: 3, allowed() { - return (tech.haveGunCheck("spores") || tech.sporesOnDeath > 0 || tech.isSporeField) && !tech.isSporeWorm + return (tech.haveGunCheck("spores") || tech.sporesOnDeath > 0 || simulation.molecularMode === 0) && !tech.isSporeWorm }, requires: "spores, not worms", effect() { @@ -5306,7 +5261,7 @@ const tech = { frequency: 3, frequencyDefault: 3, allowed() { - return (tech.haveGunCheck("spores") || tech.sporesOnDeath > 0 || tech.isSporeField || (tech.haveGunCheck("shotgun") && !tech.isIncendiary && !tech.isRivets && !tech.isIceShot && !tech.isFoamShot && !tech.isNeedles && !tech.isNailShot)) && !tech.isSporeFlea + return (tech.haveGunCheck("spores") || tech.sporesOnDeath > 0 || simulation.molecularMode === 0 || (tech.haveGunCheck("shotgun") && !tech.isIncendiary && !tech.isRivets && !tech.isIceShot && !tech.isFoamShot && !tech.isNeedles && !tech.isNailShot)) && !tech.isSporeFlea }, requires: "spores, not fleas", effect() { @@ -5344,7 +5299,7 @@ const tech = { frequency: 2, frequencyDefault: 2, allowed() { - return (tech.isSporeFollow && (tech.haveGunCheck("spores") || (tech.haveGunCheck("shotgun") && tech.isSporeWorm))) || tech.haveGunCheck("drones") || (m.fieldUpgrades[m.fieldMode].name === "molecular assembler" && !(tech.isMissileField || tech.isIceField)) + return (tech.isSporeFollow && (tech.haveGunCheck("spores") || (tech.haveGunCheck("shotgun") && tech.isSporeWorm))) || tech.haveGunCheck("drones") || (m.fieldUpgrades[m.fieldMode].name === "molecular assembler" && (simulation.molecularMode === 0 || simulation.molecularMode === 3)) }, requires: "spores, worms, flagella, drones", effect() { @@ -5364,7 +5319,7 @@ const tech = { frequency: 2, frequencyDefault: 2, allowed() { - return !tech.isDroneRadioactive && (tech.haveGunCheck("drones") || (m.fieldUpgrades[m.fieldMode].name === "molecular assembler" && !(tech.isSporeField || tech.isMissileField || tech.isIceField))) + return !tech.isDroneRadioactive && (tech.haveGunCheck("drones") || (m.fieldUpgrades[m.fieldMode].name === "molecular assembler" && simulation.molecularMode === 3)) }, requires: "drones, not irradiated drones", effect() { @@ -5394,7 +5349,7 @@ const tech = { frequency: 2, frequencyDefault: 2, allowed() { - return !tech.isExtraMaxEnergy && (tech.haveGunCheck("drones") || tech.isForeverDrones || (m.fieldUpgrades[m.fieldMode].name === "molecular assembler" && !(tech.isSporeField || tech.isMissileField || tech.isIceField))) + return !tech.isExtraMaxEnergy && (tech.haveGunCheck("drones") || tech.isForeverDrones || (m.fieldUpgrades[m.fieldMode].name === "molecular assembler" && simulation.molecularMode === 3)) }, requires: "drones, not weak interaction", effect() { @@ -5434,7 +5389,7 @@ const tech = { frequency: 3, frequencyDefault: 3, allowed() { - return (tech.haveGunCheck("drones") || tech.isForeverDrones || (m.fieldUpgrades[m.fieldMode].name === "molecular assembler" && !(tech.isSporeField || tech.isMissileField || tech.isIceField))) && !tech.isDroneRadioactive && !tech.isIncendiary + return (tech.haveGunCheck("drones") || tech.isForeverDrones || (m.fieldUpgrades[m.fieldMode].name === "molecular assembler" && simulation.molecularMode === 3)) && !tech.isDroneRadioactive && !tech.isIncendiary }, requires: "drones, molecular assembler, not irradiated drones, incendiary", effect() { @@ -5473,7 +5428,7 @@ const tech = { frequency: 2, frequencyDefault: 2, allowed() { - return tech.droneCycleReduction === 1 && !tech.isIncendiary && !tech.isDroneTeleport && (tech.haveGunCheck("drones") || tech.isForeverDrones || (m.fieldUpgrades[m.fieldMode].name === "molecular assembler" && !(tech.isSporeField || tech.isMissileField || tech.isIceField))) + return tech.droneCycleReduction === 1 && !tech.isIncendiary && !tech.isDroneTeleport && (tech.haveGunCheck("drones") || tech.isForeverDrones || (m.fieldUpgrades[m.fieldMode].name === "molecular assembler" && simulation.molecularMode === 3)) }, requires: "drones, not reduced tolerances, incendiary, torque bursts", effect() { @@ -6817,98 +6772,18 @@ const tech = { }, remove() {} }, - { - name: "mycelium manufacturing", - link: `mycelium manufacturing`, - // description: `use ${powerUps.orb.research(1)}to repurpose molecular assembler
excess energy used to grow spores`, - descriptionFunction() { return `use ${powerUps.orb.research(1)}to repurpose molecular assembler
excess energy used to grow ${b.guns[6].nameString('s')}` }, - isFieldTech: true, - maxCount: 1, - count: 0, - frequency: 3, - frequencyDefault: 3, - allowed() { - return (build.isExperimentSelection || powerUps.research.count > 0) && m.fieldUpgrades[m.fieldMode].name === "molecular assembler" && !(tech.isMissileField || tech.isIceField || tech.isFastDrones || tech.isDroneGrab || tech.isDroneRadioactive || tech.isDroneTeleport) - }, - requires: "molecular assembler, no other manufacturing, no drone tech", - effect() { - if (!build.isExperimentSelection) { - for (let i = 0; i < 1; i++) { - if (powerUps.research.count > 0) powerUps.research.changeRerolls(-1) - } - } - tech.isSporeField = true; - }, - remove() { - tech.isSporeField = false; - if (this.count > 0) powerUps.research.changeRerolls(1) - } - }, - { - name: "missile manufacturing", - link: `missile manufacturing`, - description: `use ${powerUps.orb.research(1)}to repurpose molecular assembler
excess energy used to construct missiles`, - // description: "use 3 research to repurpose assembler
excess energy used to construct missiles", - isFieldTech: true, - maxCount: 1, - count: 0, - frequency: 3, - frequencyDefault: 3, - allowed() { - return (build.isExperimentSelection || powerUps.research.count > 0) && m.maxEnergy > 0.5 && m.fieldUpgrades[m.fieldMode].name === "molecular assembler" && !(tech.isSporeField || tech.isIceField || tech.isFastDrones || tech.isDroneGrab || tech.isDroneRadioactive || tech.isDroneTeleport || tech.isDronesTravel) - }, - requires: "molecular assembler, no other manufacturing, no drone tech", - effect() { - if (!build.isExperimentSelection) { - for (let i = 0; i < 1; i++) { - if (powerUps.research.count > 0) powerUps.research.changeRerolls(-1) - } - } - tech.isMissileField = true; - }, - remove() { - tech.isMissileField = false; - if (this.count > 0) powerUps.research.changeRerolls(1) - } - }, - { - name: "ice IX manufacturing", - link: `ice IX manufacturing`, - description: `use ${powerUps.orb.research(1)}to repurpose molecular assembler
excess energy used to condense ice IX`, - // description: "use 3 research to repurpose assembler
excess energy used to condense ice IX", - isFieldTech: true, - maxCount: 1, - count: 0, - frequency: 3, - frequencyDefault: 3, - allowed() { - return (build.isExperimentSelection || powerUps.research.count > 0) && m.fieldUpgrades[m.fieldMode].name === "molecular assembler" && !(tech.isSporeField || tech.isMissileField || tech.isFastDrones || tech.isDroneGrab || tech.isDroneRadioactive || tech.isDroneTeleport || tech.isDronesTravel) - }, - requires: "molecular assembler, no other manufacturing, no drone tech", - effect() { - if (!build.isExperimentSelection) { - for (let i = 0; i < 1; i++) { - if (powerUps.research.count > 0) powerUps.research.changeRerolls(-1) - } - } - tech.isIceField = true; - }, - remove() { - tech.isIceField = false; - if (this.count > 0) powerUps.research.changeRerolls(1) - } - }, // { - // name: "scrap-bot manufacturing", - // link: `manufacturing`, - // description: `use ${powerUps.orb.research(1)}to repurpose molecular assembler
excess energy used to condense scrap bot `, + // name: "mycelium manufacturing", + // link: `mycelium manufacturing`, + // // description: `use ${powerUps.orb.research(1)}to repurpose molecular assembler
excess energy used to grow spores`, + // descriptionFunction() { return `use ${powerUps.orb.research(1)}to repurpose molecular assembler
excess energy used to grow ${b.guns[6].nameString('s')}` }, // isFieldTech: true, // maxCount: 1, // count: 0, // frequency: 3, // frequencyDefault: 3, // allowed() { - // return (build.isExperimentSelection || powerUps.research.count > 0) && m.fieldUpgrades[m.fieldMode].name === "molecular assembler" && !(tech.isIceField || tech.isSporeField || tech.isMissileField || tech.isFastDrones || tech.isDroneGrab || tech.isDroneRadioactive || tech.isDroneTeleport || tech.isDronesTravel) + // return (build.isExperimentSelection || powerUps.research.count > 0) && m.fieldUpgrades[m.fieldMode].name === "molecular assembler" && !(tech.isMissileField || tech.isIceField || tech.isFastDrones || tech.isDroneGrab || tech.isDroneRadioactive || tech.isDroneTeleport) // }, // requires: "molecular assembler, no other manufacturing, no drone tech", // effect() { @@ -6917,29 +6792,65 @@ const tech = { // if (powerUps.research.count > 0) powerUps.research.changeRerolls(-1) // } // } - // tech.isBotField = true; + // tech.isSporeField = true; // }, // remove() { - // tech.isBotField = false; + // tech.isSporeField = false; // if (this.count > 0) powerUps.research.changeRerolls(1) // } // }, // { - // name: "thermal reservoir", - // description: "increase your plasma damage by 100%
plasma temporarily lowers health not energy", + // name: "missile manufacturing", + // link: `missile manufacturing`, + // description: `use ${powerUps.orb.research(1)}to repurpose molecular assembler
excess energy used to construct missiles`, + // // description: "use 3 research to repurpose assembler
excess energy used to construct missiles", // isFieldTech: true, // maxCount: 1, // count: 0, - // frequency: 2, + // frequency: 3, + // frequencyDefault: 3, // allowed() { - // return m.fieldUpgrades[m.fieldMode].name === "plasma torch" && !tech.isEnergyHealth + // return (build.isExperimentSelection || powerUps.research.count > 0) && m.maxEnergy > 0.5 && m.fieldUpgrades[m.fieldMode].name === "molecular assembler" && !(tech.isSporeField || tech.isIceField || tech.isFastDrones || tech.isDroneGrab || tech.isDroneRadioactive || tech.isDroneTeleport || tech.isDronesTravel) // }, - // requires: "plasma torch, not mass-energy equivalence", + // requires: "molecular assembler, no other manufacturing, no drone tech", // effect() { - // tech.isPlasmaRange += 0.27; + // if (!build.isExperimentSelection) { + // for (let i = 0; i < 1; i++) { + // if (powerUps.research.count > 0) powerUps.research.changeRerolls(-1) + // } + // } + // tech.isMissileField = true; // }, // remove() { - // tech.isPlasmaRange = 1; + // tech.isMissileField = false; + // if (this.count > 0) powerUps.research.changeRerolls(1) + // } + // }, + // { + // name: "ice IX manufacturing", + // link: `ice IX manufacturing`, + // description: `use ${powerUps.orb.research(1)}to repurpose molecular assembler
excess energy used to condense ice IX`, + // // description: "use 3 research to repurpose assembler
excess energy used to condense ice IX", + // isFieldTech: true, + // maxCount: 1, + // count: 0, + // frequency: 3, + // frequencyDefault: 3, + // allowed() { + // return (build.isExperimentSelection || powerUps.research.count > 0) && m.fieldUpgrades[m.fieldMode].name === "molecular assembler" && !(tech.isSporeField || tech.isMissileField || tech.isFastDrones || tech.isDroneGrab || tech.isDroneRadioactive || tech.isDroneTeleport || tech.isDronesTravel) + // }, + // requires: "molecular assembler, no other manufacturing, no drone tech", + // effect() { + // if (!build.isExperimentSelection) { + // for (let i = 0; i < 1; i++) { + // if (powerUps.research.count > 0) powerUps.research.changeRerolls(-1) + // } + // } + // tech.isIceField = true; + // }, + // remove() { + // tech.isIceField = false; + // if (this.count > 0) powerUps.research.changeRerolls(1) // } // }, { @@ -10204,9 +10115,6 @@ const tech = { isEnergyLoss: null, isDeathAvoid: null, isDeathAvoidedThisLevel: null, - isSporeField: null, - isMissileField: null, - isIceField: null, isPlasmaRange: null, isFreezeMobs: null, isIceCrystals: null, diff --git a/todo.txt b/todo.txt index 4ba0790..184bd2c 100644 --- a/todo.txt +++ b/todo.txt @@ -1,10 +1,11 @@ ******************************************************** NEXT PATCH ************************************************** +molecular fabricator defaults to random type on game load + spores, missile, ice IX, drones + +renamed fleas -> siphonaptera + -tech: colony - sporangium discharge 38% more stuff, but it has a chance to discharge random bullet type -tech: annelids renamed -> K-selection - fleas and worms are bigger and do more damage -tech: anti-shear topology now applies to grenades, shotgun so basically everything that matters - no longer a "gun tech" *********************************************************** TODO ***************************************************** @@ -14,8 +15,6 @@ fleas flea tech: add a delay to flea jumping also +dmg -molecular fabricator defaults to random type on game load - improve mob invincible graphic opacity oscillates from 100% to 0%? make different from stun