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