diff --git a/.DS_Store b/.DS_Store
index cfe0883..a8cc3c5 100644
Binary files a/.DS_Store and b/.DS_Store differ
diff --git a/js/index.js b/js/index.js
index 1aad4dd..eb082f7 100644
--- a/js/index.js
+++ b/js/index.js
@@ -428,7 +428,10 @@ const build = {
}
},
reset() {
+ simulation.startGame(true); //starts game, but pauses it
build.isExperimentSelection = true;
+ simulation.paused = true;
+
m.setField(0)
b.inventory = []; //removes guns and ammo
@@ -522,9 +525,6 @@ function openExperimentMenu() {
document.body.style.overflowY = "scroll";
document.body.style.overflowX = "hidden";
document.getElementById("info").style.display = 'none'
- simulation.startGame(true); //starts game, but pauses it
- build.isExperimentSelection = true;
- simulation.paused = true;
build.reset();
}
diff --git a/js/level.js b/js/level.js
index 762d70c..4f61e6e 100644
--- a/js/level.js
+++ b/js/level.js
@@ -1102,8 +1102,8 @@ const level = {
// simulation.difficulty = 30
// spawn.starter(1900, -500, 200) //big boy
- spawn.exploder(1900, -500)
- // spawn.pulsarBoss(1900, -500)
+ spawn.pulsar(1900, -500)
+ spawn.pulsarBoss(1900, -500)
// spawn.historyBoss(1900, -500)
// spawn.ghoster(2900, -500)
// spawn.launcherBoss(1200, -500)
diff --git a/js/powerup.js b/js/powerup.js
index 362033b..a9a67a9 100644
--- a/js/powerup.js
+++ b/js/powerup.js
@@ -680,7 +680,6 @@ const powerUps = {
if (
(!tech.isSuperDeterminism || (target === 'tech' || target === 'heal' || target === 'ammo')) &&
!(tech.isEnergyNoAmmo && target === 'ammo') &&
- !(tech.isNoHeals || target === 'heal') &&
(!simulation.isNoPowerUps || (target === 'research' || target === 'heal' || target === 'ammo'))
) {
powerUps.directSpawn(x, y, target, moving, mode, size)
diff --git a/js/simulation.js b/js/simulation.js
index f8a4bd3..8d21ab4 100644
--- a/js/simulation.js
+++ b/js/simulation.js
@@ -496,6 +496,7 @@ const simulation = {
fpsInterval: 0, //set in startGame
then: null,
startGame(isBuildRun = false) {
+ simulation.clearMap()
if (!isBuildRun) { //if a build run logic flow returns to "experiment-button").addEventListener
document.body.style.cursor = "none";
document.body.style.overflow = "hidden"
diff --git a/js/spawn.js b/js/spawn.js
index 861ed30..a09da2d 100644
--- a/js/spawn.js
+++ b/js/spawn.js
@@ -1486,6 +1486,7 @@ const spawn = {
me.radius *= 1.5
me.vertices[1].x = me.position.x + Math.cos(me.angle) * me.radius; //make one end of the triangle longer
me.vertices[1].y = me.position.y + Math.sin(me.angle) * me.radius;
+ me.homePosition = { x: x, y: y };
me.fireCycle = 0
me.fireTarget = { x: 0, y: 0 }
me.pulseRadius = Math.min(500, 230 + simulation.difficulty * 3)
@@ -1575,6 +1576,10 @@ const spawn = {
}
}
}
+ //gently return to starting location
+ const sub = Vector.sub(this.homePosition, this.position)
+ const dist = Vector.magnitude(sub)
+ if (dist > 250) this.force = Vector.mult(Vector.normalise(sub), this.mass * 0.0002)
}
};
},
@@ -1586,6 +1591,7 @@ const spawn = {
me.radius *= 2
me.vertices[1].x = me.position.x + Math.cos(me.angle) * me.radius; //make one end of the triangle longer
me.vertices[1].y = me.position.y + Math.sin(me.angle) * me.radius;
+ me.homePosition = { x: x, y: y };
Matter.Body.setDensity(me, 0.002); //extra dense //normal is 0.001 //makes effective life much larger
me.fireCycle = Infinity
me.fireTarget = { x: 0, y: 0 }
@@ -1691,6 +1697,10 @@ const spawn = {
this.fireCycle = 0
}
}
+ //gently return to starting location
+ const sub = Vector.sub(this.homePosition, this.position)
+ const dist = Vector.magnitude(sub)
+ if (dist > 350) this.force = Vector.mult(Vector.normalise(sub), this.mass * 0.0002)
}
};
},
diff --git a/js/tech.js b/js/tech.js
index 01a6db7..6223873 100644
--- a/js/tech.js
+++ b/js/tech.js
@@ -10,7 +10,7 @@
} else if (tech.tech[i].frequencyDefault) {
tech.tech[i].frequency = tech.tech[i].frequencyDefault
} else {
- tech.tech[i].frequency = 1
+ tech.tech[i].frequency = 2
}
}
lore.techCount = 0;
@@ -165,7 +165,7 @@
description: `increase damage by 25%
your inventory can only hold 1 gun`,
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return b.inventory.length === 1 //&& !tech.haveGunCheck("CPT gun")
},
@@ -194,7 +194,7 @@
description: "while your first gun is equipped
reduce harm by 13% for each of your guns",
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return b.inventory.length > 1 && !tech.isEnergyHealth
},
@@ -215,7 +215,7 @@
description: "increase damage by 17%
for each gun in your inventory",
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return b.inventory.length > 1
},
@@ -232,7 +232,7 @@
description: "17% decreased delay after firing
for each gun in your inventory",
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return b.inventory.length > 1
},
@@ -251,11 +251,11 @@
description: "spawn 6 guns, but you can't switch guns
guns cycle automatically with each new level",
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return (tech.isDamageForGuns || tech.isFireRateForGuns) && (b.inventory.length + 5) < b.guns.length
},
- requires: "arsenal or cyclic rate boost",
+ requires: "arsenal or active cooling",
effect() {
tech.isGunCycle = true;
for (let i = 0; i < 6; i++) powerUps.spawn(m.pos.x + 10 * Math.random(), m.pos.y + 10 * Math.random(), "gun");
@@ -274,7 +274,7 @@
description: "spawn a gun and double the frequency
of finding tech for a specific gun",
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
isNonRefundable: true,
// isExperimentHide: true,
// isBadRandomOption: true,
@@ -296,7 +296,7 @@
description: "for every gun in your inventory spawn a
heal, research, field, ammo, or tech",
maxCount: 1, //random power up
count: 0,
- frequency: 1,
+ frequency: 2,
isNonRefundable: true,
// isExperimentHide: true,
allowed() {
@@ -325,7 +325,7 @@
description: "ammo power ups give 200% ammo
but ammo is only added to your current gun",
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return !tech.isEnergyNoAmmo
},
@@ -342,7 +342,7 @@
description: "double your current ammo for all guns",
maxCount: 9,
count: 0,
- frequency: 1,
+ frequency: 2,
isNonRefundable: true,
allowed() {
return tech.isAmmoForGun
@@ -361,7 +361,7 @@
description: "when you fire while out of ammo
gain 4 ammo, but lose 5 health",
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return m.harmReduction() < 1 && !tech.isEnergyHealth && !tech.isEnergyNoAmmo
},
@@ -378,7 +378,7 @@
// description: "find 3 ammo at the start of each level",
// maxCount: 1,
// count: 0,
- // frequency: 1,
+ // frequency: 2,
// allowed() {
// return !tech.isPerpetualReroll && !tech.isPerpetualHeal && !tech.isPerpetualReroll && !tech.isPerpetualStun && !tech.isEnergyNoAmmo
// },
@@ -395,7 +395,7 @@
description: "use 50% less ammo when crouching",
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return true
},
@@ -412,8 +412,8 @@
description: "reduce harm by 55% when crouching",
maxCount: 1,
count: 0,
- frequency: 2,
- frequencyDefault: 2,
+ frequency: 4,
+ frequencyDefault: 4,
allowed() {
return tech.isCrouchAmmo && !tech.isEnergyHealth
},
@@ -430,7 +430,7 @@
description: "66% decreased delay after firing
you can only fire when at rest",
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return !m.isShipMode
},
@@ -453,8 +453,8 @@
description: "increase damage by 33% when at rest",
maxCount: 9,
count: 0,
- frequency: 2,
- frequencyDefault: 2,
+ frequency: 4,
+ frequencyDefault: 4,
allowed() {
return tech.isFireNotMove
},
@@ -471,7 +471,7 @@
description: "while firing your position is locked
and harm is reduced by 60%",
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return !tech.isEnergyHealth && !m.isShipMode
},
@@ -492,7 +492,7 @@
description: "move and jump about 30% faster
take 5% more harm",
maxCount: 9,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return true
},
@@ -513,7 +513,7 @@
description: "moving at high speeds reduces harm
by up to 60%",
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return m.Fx > 0.016 && !tech.isEnergyHealth
},
@@ -530,7 +530,7 @@
description: "moving at high speeds increases damage
by up to 43%",
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return m.Fx > 0.016
},
@@ -547,7 +547,7 @@
// description: "reduce harm by 50% when at rest",
// maxCount: 1,
// count: 0,
- // frequency: 1,
+ // frequency: 2,
// allowed() {
// return tech.isFireNotMove || tech.isFireMoveLock
// },
@@ -564,7 +564,7 @@
description: "increase damage by up to 33%
at a distance of 40 steps from the target",
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return true
},
@@ -581,7 +581,7 @@
description: "increase damage by 20%
20% increased delay after firing",
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return true
},
@@ -599,7 +599,7 @@
description: "30% decreased delay after firing",
maxCount: 9,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return true
},
@@ -618,7 +618,7 @@
description: "increase damage by 4%
for every 10 active bullets",
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return tech.isBulletsLastLonger > 1
},
@@ -636,7 +636,7 @@
// isGunTech: true,
maxCount: 3,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return m.fieldUpgrades[m.fieldMode].name === "nano-scale manufacturing" || tech.haveGunCheck("spores") || tech.haveGunCheck("drones") || tech.haveGunCheck("missiles") || tech.haveGunCheck("foam") || tech.haveGunCheck("wave beam") || tech.isNeutronBomb
},
@@ -653,7 +653,7 @@
description: "after a mob or shield dies,
leftover radiation spreads to a nearby mob",
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return tech.isNailRadiation || tech.isWormholeDamage || tech.isNeutronBomb || tech.isExplodeRadio
},
@@ -670,7 +670,7 @@
description: "explosions release gamma radiation
100% more damage, but over 4 seconds",
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return tech.explosiveRadius === 1 && !tech.isSmallExplosion && (tech.haveGunCheck("missiles") || tech.isIncendiary || (tech.haveGunCheck("grenades") && !tech.isNeutronBomb) || tech.haveGunCheck("vacuum bomb") || tech.isPulseLaser || tech.isMissileField || tech.boomBotCount > 1)
},
@@ -687,7 +687,7 @@
description: "increase explosive damage by 20%
increase explosive radius by 20%",
maxCount: 9,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return !tech.isExplodeRadio && (tech.haveGunCheck("missiles") || tech.isIncendiary || (tech.haveGunCheck("grenades") && !tech.isNeutronBomb) || tech.haveGunCheck("vacuum bomb") || tech.isPulseLaser || tech.isMissileField || tech.boomBotCount > 1)
},
@@ -704,7 +704,7 @@
description: "increase explosive damage by 60%
decrease explosive radius by 20%",
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return !tech.isExplodeRadio && (tech.haveGunCheck("missiles") || tech.isIncendiary || (tech.haveGunCheck("grenades") && !tech.isNeutronBomb) || tech.haveGunCheck("vacuum bomb") || tech.isPulseLaser || tech.isMissileField || tech.boomBotCount > 1)
},
@@ -721,7 +721,7 @@
description: "increase explosive radius by 80%, but
you take 400% more harm from explosions",
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
isBadRandomOption: true,
allowed() {
return !tech.isRewindGrenade && (tech.haveGunCheck("missiles") || tech.isIncendiary || (tech.haveGunCheck("grenades") && !tech.isNeutronBomb) || tech.haveGunCheck("vacuum bomb") || tech.isPulseLaser || tech.isMissileField)
@@ -740,7 +740,7 @@
description: "harm from explosions is passively reduced
by 7% for every 10 stored energy",
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return tech.haveGunCheck("missiles") || tech.isIncendiary || (tech.haveGunCheck("grenades") && !tech.isNeutronBomb) || tech.haveGunCheck("vacuum bomb") || tech.isMissileField || tech.isExplodeMob || tech.isPulseLaser
},
@@ -757,7 +757,7 @@
description: "shotgun, super balls, and drones
are loaded with explosives",
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return ((m.fieldUpgrades[m.fieldMode].name === "nano-scale manufacturing" && !(tech.isSporeField || tech.isMissileField || tech.isIceField)) || tech.haveGunCheck("drones") || tech.haveGunCheck("super balls") || tech.haveGunCheck("shotgun")) && !tech.isNailShot
},
@@ -774,7 +774,7 @@
description: "some detonations and collisions eject nails
blocks, rail gun, grenades, missiles, shotgun slugs",
maxCount: 9,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return (tech.haveGunCheck("grenades") && !tech.isNeutronBomb) || tech.haveGunCheck("missiles") || tech.haveGunCheck("rail gun") || (tech.haveGunCheck("shotgun") && tech.isSlugShot) || tech.throwChargeRate > 1
},
@@ -791,7 +791,7 @@
description: "mobs explode when they die
be careful",
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return (tech.haveGunCheck("missiles") || tech.isIncendiary || (tech.haveGunCheck("grenades") && !tech.isNeutronBomb) || tech.haveGunCheck("vacuum bomb") || tech.isPulseLaser || tech.isMissileField || tech.boomBotCount > 1) && !tech.sporesOnDeath && !tech.nailsDeathMob && !tech.isBotSpawner
},
@@ -808,7 +808,7 @@
description: "mobs release a nail when they die
nails target nearby mobs",
maxCount: 9,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return !tech.sporesOnDeath && !tech.isExplodeMob && !tech.isBotSpawner
},
@@ -825,7 +825,7 @@
description: "mobs produce spores when they die
9% chance",
maxCount: 9,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return !tech.nailsDeathMob && !tech.isExplodeMob && !tech.isBotSpawner
},
@@ -845,7 +845,7 @@
description: "mobs spawn with 11% less health",
maxCount: 3,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return tech.nailsDeathMob || tech.sporesOnDeath || tech.isExplodeMob || tech.isBotSpawner
},
@@ -867,7 +867,7 @@
description: "reduce harm by 66%
after not using your gun or field for 2 seconds",
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return (b.totalBots() > 1 || tech.haveGunCheck("drones") || tech.haveGunCheck("mine") || tech.haveGunCheck("spores") || m.fieldUpgrades[m.fieldMode].name === "nano-scale manufacturing") && !tech.isEnergyHealth
},
@@ -884,7 +884,7 @@
description: "increase damage by 100%
after not using your gun or field for 2 seconds",
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return tech.isNoFireDefense
},
@@ -901,7 +901,7 @@
description: "20% chance to build a bot after killing a mob
the bot lasts for about 20 seconds",
maxCount: 3,
count: 0,
- frequency: 1,
+ frequency: 2,
isBotTech: true,
allowed() {
return b.totalBots() > 0 && !tech.sporesOnDeath && !tech.nailsDeathMob && !tech.isExplodeMob
@@ -919,7 +919,7 @@
description: "a bot fires nails at mobs in line of sight",
maxCount: 9,
count: 0,
- frequency: 1,
+ frequency: 2,
isBot: true,
isBotTech: true,
allowed() {
@@ -939,7 +939,7 @@
description: "convert all your bots to nail-bots
500% increased nail-bot fire rate",
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
isBotTech: true,
allowed() {
return tech.nailBotCount > 1 && !b.hasBotUpgrade()
@@ -964,7 +964,7 @@
description: "a bot fires foam at nearby mobs",
maxCount: 9,
count: 0,
- frequency: 1,
+ frequency: 2,
isBot: true,
isBotTech: true,
allowed() {
@@ -984,7 +984,7 @@
description: "convert all your bots to foam-bots
250% increased foam size and fire rate",
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
isBotTech: true,
allowed() {
return tech.foamBotCount > 1 && !b.hasBotUpgrade()
@@ -1009,7 +1009,7 @@
description: "a bot defends the space around you
ignites an explosion after hitting a mob",
maxCount: 9,
count: 0,
- frequency: 1,
+ frequency: 2,
isBot: true,
isBotTech: true,
allowed() {
@@ -1029,7 +1029,7 @@
description: "convert all your bots to boom-bots
250% increased explosion damage and size",
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
isBotTech: true,
allowed() {
return tech.boomBotCount > 1 && !b.hasBotUpgrade()
@@ -1054,7 +1054,7 @@
description: "a bot uses energy to emit a laser beam
that targets nearby mobs",
maxCount: 9,
count: 0,
- frequency: 1,
+ frequency: 2,
isBot: true,
isBotTech: true,
allowed() {
@@ -1074,7 +1074,7 @@
description: "convert all your bots to laser-bots
75% improved damage, efficiency, and range", // 400% increased laser-bot laser damage",
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
isBotTech: true,
allowed() {
return tech.laserBotCount > 1 && !b.hasBotUpgrade()
@@ -1099,7 +1099,7 @@
description: "a bot is locked in orbit around you
stuns and damages mobs on contact",
maxCount: 9,
count: 0,
- frequency: 1,
+ frequency: 2,
isBot: true,
isBotTech: true,
allowed() {
@@ -1119,7 +1119,7 @@
description: "convert all your bots to orbital-bots
increase damage by 200% and radius by 30%",
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
isBotTech: true,
allowed() {
return tech.orbitBotCount > 1 && !b.hasBotUpgrade()
@@ -1153,7 +1153,7 @@
description: "a bot damages mobs while it traces your path
regen 6 energy per second when it's near",
maxCount: 9,
count: 0,
- frequency: 1,
+ frequency: 2,
isBot: true,
isBotTech: true,
allowed() {
@@ -1172,7 +1172,7 @@
description: "convert your bots to dynamo-bots
dynamo-bots regen 24 energy per second",
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
isBotTech: true,
allowed() {
return tech.dynamoBotCount > 1 && !b.hasBotUpgrade()
@@ -1196,7 +1196,7 @@
description: "anytime you collect 4 research
use them to build a random bot",
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
isBotTech: true,
allowed() {
return powerUps.research.count > 3 || build.isExperimentSelection
@@ -1215,7 +1215,7 @@
description: "use 1 research to spawn a random bot
quadruple the frequency of finding bot tech",
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
isBotTech: true,
allowed() {
return (b.totalBots() > 1 && powerUps.research.count > 0) || build.isExperimentSelection
@@ -1242,7 +1242,7 @@
description: "reduce harm by 6%
for each of your permanent bots",
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
isBotTech: true,
allowed() {
return b.totalBots() > 3 && !tech.isEnergyHealth
@@ -1259,7 +1259,7 @@
description: "increase damage by 6%
for each of your permanent bots",
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
isBotTech: true,
allowed() {
return b.totalBots() > 3
@@ -1276,7 +1276,7 @@
description: "double your permanent bots
remove all of your guns",
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
isBotTech: true,
isNonRefundable: true,
isBadRandomOption: true,
@@ -1311,7 +1311,7 @@
description: "increase block collision damage by 100%
charge throws more quickly for less energy",
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return m.fieldUpgrades[m.fieldMode].name !== "wormhole"
},
@@ -1327,8 +1327,8 @@
description: "mobs killed by collisions with blocks
spawn a heal, ammo, or research",
maxCount: 1,
count: 0,
- frequency: 2,
- frequencyDefault: 2,
+ frequency: 4,
+ frequencyDefault: 4,
allowed() {
return tech.throwChargeRate > 1 && !tech.isNoHeals
},
@@ -1344,8 +1344,8 @@
description: "while you are holding a block
reduce harm by 85%",
maxCount: 1,
count: 0,
- frequency: 2,
- frequencyDefault: 2,
+ frequency: 4,
+ frequencyDefault: 4,
allowed() {
return tech.throwChargeRate > 1 && m.fieldUpgrades[m.fieldMode].name !== "pilot wave" && m.fieldUpgrades[m.fieldMode].name !== "wormhole"
},
@@ -1361,7 +1361,7 @@
description: `after receiving harm from a collision become
immune to harm for an extra 0.75 seconds`,
maxCount: 9,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return true
},
@@ -1378,7 +1378,7 @@
description: `become immune to harm for 1 second
once every 7 seconds`,
maxCount: 3,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return true //tech.collisionImmuneCycles > 30
},
@@ -1410,7 +1410,7 @@
},
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return true
},
@@ -1466,8 +1466,8 @@
description: "if flip-flop is in the ON state
take 0 harm from collisions with mobs",
maxCount: 1,
count: 0,
- frequency: 2,
- frequencyDefault: 2,
+ frequency: 4,
+ frequencyDefault: 4,
allowed() {
return tech.isFlipFlop
},
@@ -1484,8 +1484,8 @@
description: "if flip-flop is in the ON state
do 55.5% more damage",
maxCount: 1,
count: 0,
- frequency: 2,
- frequencyDefault: 2,
+ frequency: 4,
+ frequencyDefault: 4,
allowed() {
return tech.isFlipFlop
},
@@ -1501,8 +1501,8 @@
description: "if flip-flop is ON regen 22 energy per second
if flip-flop is OFF drain 3.1 energy per second",
maxCount: 1,
count: 0,
- frequency: 2,
- frequencyDefault: 2,
+ frequency: 4,
+ frequencyDefault: 4,
allowed() {
return tech.isFlipFlop
},
@@ -1518,8 +1518,8 @@
description: "set flip-flop to the ON state
at the start of a level",
maxCount: 1,
count: 0,
- frequency: 2,
- frequencyDefault: 2,
+ frequency: 4,
+ frequencyDefault: 4,
allowed() {
return tech.isFlipFlopEnergy || tech.isFlipFlopDamage || tech.isFlipFlopHarm
},
@@ -1535,7 +1535,7 @@
description: `slow time by 50% after receiving harm
reduce harm by 20%`,
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return simulation.fpsCapDefault > 45 && !tech.isRailTimeSlow
},
@@ -1551,8 +1551,8 @@
description: `freeze all mobs for 7 seconds
after receiving harm`,
maxCount: 1,
count: 0,
- frequency: 2,
- frequencyDefault: 2,
+ frequency: 4,
+ frequencyDefault: 4,
allowed() {
return tech.isSlowFPS
},
@@ -1568,7 +1568,7 @@
description: `collisions with stunned or frozen mobs
cause you no harm`,
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return tech.isStunField || tech.isPulseStun || tech.oneSuperBall || tech.isHarmFreeze || tech.isIceField || tech.isIceCrystals || tech.isSporeFreeze || tech.isAoESlow || tech.isFreezeMobs || tech.isCloakStun || tech.orbitBotCount > 1 || tech.isWormholeDamage
},
@@ -1585,7 +1585,7 @@
description: "freeze effects are applied to a small area",
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return tech.isIceCrystals || tech.isSporeFreeze || tech.isIceField
},
@@ -1602,7 +1602,7 @@
description: "rebuild your broken parts as drones
chance to occur after receiving harm",
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return m.harmReduction() < 1
},
@@ -1621,7 +1621,7 @@
description: "for 10 seconds after receiving harm
reduce harm by 66%",
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return !tech.isEnergyHealth && m.harmReduction() < 1
},
@@ -1637,7 +1637,7 @@
description: "for 10 seconds after receiving harm
increase damage by 200%",
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return m.harmReduction() < 1
},
@@ -1653,7 +1653,7 @@
description: "charge, parity, and time invert to undo harm
rewind (1.5—5) seconds for (66—220) energy",
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() { //&& (m.fieldUpgrades[m.fieldMode].name !== "nano-scale manufacturing" || m.maxEnergy > 1)
return m.maxEnergy > 0.99 && m.fieldUpgrades[m.fieldMode].name !== "standing wave harmonics" && !tech.isEnergyHealth && !tech.isRewindGun
},
@@ -1669,7 +1669,7 @@
description: "when you rewind, build several bots
that protect you for about 9 seconds",
maxCount: 3,
count: 0,
- frequency: 1,
+ frequency: 2,
isBotTech: true,
allowed() {
return tech.isRewindAvoidDeath
@@ -1686,7 +1686,7 @@
description: "before you rewind drop several grenades",
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return !tech.isExplosionHarm && tech.isRewindAvoidDeath
},
@@ -1702,7 +1702,7 @@
description: "colliding with mobs gives you 2048 energy", //
reduce harm by 15%
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return !tech.isEnergyHealth && (m.harmReduction() < 1 || tech.isFlipFlopHarm)
},
@@ -1719,7 +1719,7 @@
description: "reduce harm by 66%
you no longer passively regenerate energy",
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return (tech.iceEnergy || tech.isWormholeEnergy || tech.isPiezo || tech.isRailEnergyGain) && tech.energyRegen !== 0.004 && !tech.isEnergyHealth
},
@@ -1737,9 +1737,9 @@
description: "energy protects you instead of health
harm reduction effects provide no benefit",
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
- return !tech.isEnergyLoss && !tech.isPiezo && !tech.isRewindAvoidDeath && !tech.isRewindGun && !tech.isSpeedHarm && m.fieldUpgrades[m.fieldMode].name !== "negative mass field" && !tech.isHealLowHealth && !tech.isTechDamage
+ return !tech.isNoHeals && !tech.isEnergyLoss && !tech.isPiezo && !tech.isRewindAvoidDeath && !tech.isRewindGun && !tech.isSpeedHarm && m.fieldUpgrades[m.fieldMode].name !== "negative mass field" && !tech.isHealLowHealth && !tech.isTechDamage
},
requires: "not exothermic process, piezoelectricity, CPT, 1st law, negative mass , ...",
effect: () => {
@@ -1766,7 +1766,7 @@
description: "each heal power up you collect
increases your maximum energy by 5",
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return tech.isEnergyHealth && !tech.isNoHeals
},
@@ -1791,7 +1791,7 @@
description: "increase damage by 1%
for every 9 stored energy",
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return m.maxEnergy > 1 || tech.isEnergyRecovery || tech.isPiezo || tech.energySiphon > 0
},
@@ -1807,7 +1807,7 @@
description: `increase damage by 50%, but
ammo will no longer spawn`,
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return (tech.haveGunCheck("nail gun") && tech.isIceCrystals) || tech.haveGunCheck("laser") || m.fieldUpgrades[m.fieldMode].name === "plasma torch" || m.fieldUpgrades[m.fieldMode].name === "nano-scale manufacturing" || m.fieldUpgrades[m.fieldMode].name === "pilot wave"
},
@@ -1823,7 +1823,7 @@
description: "increase damage by 50%
if a mob dies drain energy by 25%",
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return !tech.isEnergyHealth
},
@@ -1839,8 +1839,8 @@
description: `increase damage by 40%, but
reduce maximum energy by 50`,
maxCount: 1,
count: 0,
- frequency: 2,
- frequencyDefault: 2,
+ frequency: 4,
+ frequencyDefault: 4,
allowed() {
return tech.isEnergyLoss && m.maxEnergy < 1.1 && !tech.isSporeField && !tech.isRewindAvoidDeath
},
@@ -1858,8 +1858,8 @@
description: `increase damage by 5%
for every 10 energy below 100`,
maxCount: 1,
count: 0,
- frequency: 2,
- frequencyDefault: 2,
+ frequency: 4,
+ frequencyDefault: 4,
allowed() {
return tech.isEnergyLoss && m.maxEnergy < 1.1
},
@@ -1875,7 +1875,7 @@
description: "increase your maximum energy by 50",
maxCount: 9,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return m.maxEnergy > 0.99
},
@@ -1895,7 +1895,7 @@
description: "energy above your max decays 60% slower",
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return tech.isEnergyRecovery || tech.isPiezo || tech.energySiphon > 0 || tech.isRailEnergyGain || tech.isWormholeEnergy || tech.iceEnergy > 0
},
@@ -1911,7 +1911,7 @@
description: "6% of damage done recovered as energy",
maxCount: 9,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return tech.damageFromTech() > 1
},
@@ -1928,6 +1928,7 @@
maxCount: 1,
count: 0,
frequency: 1,
+ frequencyDefault: 1,
allowed() {
return m.maxEnergy > 0.99
},
@@ -1944,6 +1945,7 @@
maxCount: 1,
count: 0,
frequency: 1,
+ frequencyDefault: 1,
isHealTech: true,
allowed() {
return !tech.isEnergyHealth && !tech.isNoHeals
@@ -1960,7 +1962,7 @@
description: "if a mob has died in the last 5 seconds
increase damage by 50% else decrease it by 50%",
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return true
},
@@ -1976,8 +1978,8 @@
description: "if a mob has died in the last 5 seconds
reduce harm by 75% else increase it by 25%",
maxCount: 1,
count: 0,
- frequency: 2,
- frequencyDefault: 2,
+ frequency: 4,
+ frequencyDefault: 4,
allowed() {
return tech.isDamageAfterKill
},
@@ -1993,7 +1995,7 @@
description: "increase damage by 6%
for every 10 health below 100",
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return m.health < 0.5 || build.isExperimentSelection
},
@@ -2009,7 +2011,7 @@
description: "increase damage by 100%
lose 11 health when you pick up a tech",
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return (m.harmReduction() < 1 || tech.healthDrain || tech.isLowHealthDmg || tech.isHealthRecovery || tech.isHealLowHealth || tech.largerHeals > 1 || tech.isPerpetualHeal) && !tech.isEnergyHealth
},
@@ -2025,7 +2027,7 @@
description: "heal for 3% of damage done
take 8% more harm",
maxCount: 9,
count: 0,
- frequency: 1,
+ frequency: 2,
isHealTech: true,
allowed() {
return !tech.isEnergyHealth && tech.damageFromTech() > 1 && !tech.isNoHeals
@@ -2042,7 +2044,7 @@
description: "increase damage by 40%
when your health is above 100",
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return m.maxHealth > 1;
},
@@ -2059,6 +2061,7 @@
maxCount: 9,
count: 0,
frequency: 1,
+ frequencyDefault: 1,
allowed() {
return !tech.isEnergyHealth && !tech.isNoHeals
},
@@ -2079,6 +2082,7 @@
maxCount: 1,
count: 0,
frequency: 1,
+ frequencyDefault: 1,
allowed() {
return !tech.isEnergyHealth && !tech.isDroneGrab && !tech.isNoHeals
},
@@ -2096,7 +2100,7 @@
description: "unused power ups at the end of each level
are still activated (selections are random)",
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return tech.isArmorFromPowerUps
},
@@ -2112,7 +2116,7 @@
description: `at the start of each level
spawn a heal for every 50 missing health`,
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
isHealTech: true,
allowed() {
return m.health > 0.1 && (m.maxHealth > 1 || tech.isArmorFromPowerUps) && !tech.isNoHeals
@@ -2129,7 +2133,7 @@
description: "heal power ups are 100% more effective",
maxCount: 3,
count: 0,
- frequency: 1,
+ frequency: 2,
isHealTech: true,
allowed() {
return ((m.health / m.maxHealth) < 0.7 || build.isExperimentSelection) && !tech.isEnergyHealth && !tech.isNoHeals
@@ -2148,6 +2152,7 @@
maxCount: 1,
count: 0,
frequency: 1,
+ frequencyDefault: 1,
isNonRefundable: true,
allowed() {
return ((m.health / m.maxHealth) < 0.7 || build.isExperimentSelection) && !tech.isNoHeals
@@ -2166,7 +2171,7 @@
// description: "find 3 heals at the start of each level",
// maxCount: 1,
// count: 0,
- // frequency: 1,
+ // frequency: 2,
// isHealTech: true,
// allowed() {
// return !tech.isPerpetualReroll && !tech.isPerpetualAmmo && !tech.isPerpetualStun
@@ -2190,7 +2195,7 @@
description: "use 1 research to avoid dying
and spawn 6 heal power ups once per level",
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
isHealTech: true,
allowed() {
return powerUps.research.count > 0 || build.isExperimentSelection
@@ -2211,8 +2216,8 @@
description: "after anthropic principle prevents your death
increase damage by 137.03599% on that level",
maxCount: 1,
count: 0,
- frequency: 2,
- frequencyDefault: 2,
+ frequency: 4,
+ frequencyDefault: 4,
allowed() {
return tech.isDeathAvoid
},
@@ -2228,7 +2233,7 @@
description: "after dying, continue in an alternate reality
reduce harm by 23%", //spawn 4 research
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return !tech.isSwitchReality && !tech.isResearchReality && tech.isDeathAvoid
},
@@ -2246,6 +2251,7 @@
maxCount: 1,
count: 0,
frequency: 1,
+ frequencyDefault: 1,
allowed() {
return !tech.isImmortal && !tech.isResearchReality && level.onLevel < 6
},
@@ -2262,6 +2268,7 @@
maxCount: 1,
count: 0,
frequency: 1,
+ frequencyDefault: 1,
allowed() {
return !tech.isImmortal && !tech.isSwitchReality
},
@@ -2278,7 +2285,7 @@
description: "researched or canceled tech won't reoccur
spawn 5 research",
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return (powerUps.research.count > 2 || build.isExperimentSelection) && !tech.isDeterminism
},
@@ -2296,7 +2303,7 @@
description: "using a research for any purpose
has a 37% chance to spawn a research",
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return (powerUps.research.count > 3 || build.isExperimentSelection) && !tech.isSuperDeterminism && !tech.isRerollHaste
},
@@ -2312,7 +2319,7 @@
description: "66% decreased delay after firing
when you have no research in your inventory",
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return powerUps.research.count === 0 && !tech.manyWorlds
},
@@ -2332,7 +2339,7 @@
description: "after choosing a field, tech, or gun
if you have no research spawn 2",
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return powerUps.research.count === 0 && !tech.isSuperDeterminism && !tech.isRerollHaste
},
@@ -2348,7 +2355,7 @@
description: "increase damage by 3.9%
for each research in your inventory",
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return powerUps.research.count > 4 || build.isExperimentSelection
},
@@ -2364,7 +2371,7 @@
description: "remove all current tech
spawn new tech to replace them",
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
isNonRefundable: true,
isBadRandomOption: true,
allowed() {
@@ -2379,7 +2386,7 @@
for (let i = 0, len = tech.tech.length; i < len; i++) { // spawn new tech power ups
if (!tech.tech[i].isNonRefundable) count += tech.tech[i].count
}
- if (tech.isDeterminism) count -= 4 //remove the bonus tech
+ if (tech.isDeterminism) count -= 5 //remove the bonus tech
if (tech.isSuperDeterminism) count -= 4 //remove the bonus tech
tech.setupAllTech(); // remove all tech
@@ -2395,7 +2402,7 @@
// description: "find 1 research at the start of each level",
// maxCount: 1,
// count: 0,
- // frequency: 1,
+ // frequency: 2,
// allowed() {
// return !tech.isSuperDeterminism && !tech.isPerpetualHeal && !tech.isPerpetualAmmo && !tech.isPerpetualStun
// },
@@ -2413,6 +2420,7 @@
maxCount: 1,
count: 0,
frequency: 1,
+ frequencyDefault: 1,
allowed() {
return true
},
@@ -2429,7 +2437,8 @@
description: "if you choose a JUNK tech you instead get a
random normal tech and 2 research",
maxCount: 1,
count: 0,
- frequency: 2,
+ frequency: 1,
+ frequencyDefault: 1,
allowed() {
return tech.duplicateChance
},
@@ -2447,6 +2456,7 @@
maxCount: 9,
count: 0,
frequency: 1,
+ frequencyDefault: 1,
allowed() {
return tech.duplicationChance() < 1
},
@@ -2469,8 +2479,9 @@
maxCount: 1,
count: 0,
frequency: 1,
+ frequencyDefault: 1,
allowed() {
- return tech.duplicationChance() < 1
+ return tech.duplicationChance() < 1 && level.levelsCleared < 6
},
requires: "below 100% duplication chance",
effect: () => {
@@ -2489,8 +2500,9 @@
maxCount: 1,
count: 0,
frequency: 1,
+ frequencyDefault: 1,
allowed() {
- return tech.duplicationChance() < 1 && !tech.isDeterminism && level.levelsCleared < 5
+ return tech.duplicationChance() < 1 && !tech.isDeterminism && level.levelsCleared < 4
},
requires: "below 100% duplication chance, below level 5, not determinism",
effect() {
@@ -2508,7 +2520,7 @@
description: "clicking × to cancel a field, tech, or gun
spawns 8 heals, ammo, and research",
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return tech.isCancelDuplication
},
@@ -2524,7 +2536,7 @@
description: "your chance to duplicate power ups
increases your damage by the same percent",
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return tech.duplicationChance() > 0.15
},
@@ -2540,7 +2552,7 @@
description: "each level has a chance to spawn a level boss
equal to double your duplication chance",
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return tech.duplicationChance() > 0
},
@@ -2556,7 +2568,7 @@
description: "after reaching 100% duplication chance
immediately spawn 4 level bosses",
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return tech.isDuplicateBoss
},
@@ -2574,6 +2586,7 @@
maxCount: 1,
count: 0,
frequency: 1,
+ frequencyDefault: 1,
isNonRefundable: true,
allowed() {
return (tech.totalCount > 3) && !tech.isSuperDeterminism
@@ -2603,6 +2616,7 @@
maxCount: 1,
count: 0,
frequency: 1,
+ frequencyDefault: 1,
isNonRefundable: true,
allowed() {
return (tech.totalCount > 3) && !tech.isSuperDeterminism && tech.duplicationChance() > 0
@@ -2619,6 +2633,7 @@
maxCount: 1,
count: 0,
frequency: 1,
+ frequencyDefault: 1,
isNonRefundable: true,
allowed() {
return !tech.isSuperDeterminism && tech.duplicationChance() > 0 && powerUps.research.count > 1
@@ -2640,6 +2655,7 @@
maxCount: 1,
count: 0,
frequency: 1,
+ frequencyDefault: 1,
allowed() {
return tech.duplicationChance() > 0
},
@@ -2657,6 +2673,7 @@
maxCount: 1,
count: 0,
frequency: 1,
+ frequencyDefault: 1,
allowed() {
return !tech.isSuperDeterminism
},
@@ -2674,6 +2691,7 @@
maxCount: 1,
count: 0,
frequency: 1,
+ frequencyDefault: 1,
isNonRefundable: true,
allowed() {
return !tech.isSuperDeterminism
@@ -2699,6 +2717,7 @@
maxCount: 1,
count: 0,
frequency: 1,
+ frequencyDefault: 1,
allowed() {
return tech.totalCount > 9
},
@@ -2718,7 +2737,7 @@
description: "tech, fields, and guns have 5 choices",
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return !tech.isDeterminism
},
@@ -2731,10 +2750,11 @@
}
}, {
name: "determinism",
- description: "spawn 5 tech, but you have no cancel
and 1 choice for tech, fields, and guns",
+ description: "spawn 6 tech, but you have no cancel
and 1 choice for tech, fields, and guns",
maxCount: 1,
count: 0,
frequency: 1,
+ frequencyDefault: 1,
isBadRandomOption: true,
allowed() {
return !tech.isExtraChoice && !tech.isCancelDuplication && !tech.isCancelRerolls
@@ -2743,19 +2763,19 @@
effect: () => {
tech.isDeterminism = true;
//if you change the number spawned also change it in Born rule
- for (let i = 0; i < 5; i++) powerUps.spawn(m.pos.x + 60 * (Math.random() - 0.5), m.pos.y + 60 * (Math.random() - 0.5), "tech");
+ for (let i = 0; i < 6; i++) powerUps.spawn(m.pos.x + 60 * (Math.random() - 0.5), m.pos.y + 60 * (Math.random() - 0.5), "tech");
},
remove() {
tech.isDeterminism = false;
- for (let i = 0; i < 5; i++) powerUps.removeRandomTech()
+ for (let i = 0; i < 6; i++) powerUps.removeRandomTech()
}
}, {
name: "superdeterminism",
description: "spawn 5 tech
research, guns, and fields no longer spawn",
maxCount: 1,
count: 0,
- frequency: 3,
- frequencyDefault: 3,
+ frequency: 8,
+ frequencyDefault: 8,
isBadRandomOption: true,
allowed() {
return tech.isDeterminism && !tech.manyWorlds && !tech.isGunSwitchField
@@ -2777,6 +2797,7 @@
maxCount: 1,
count: 0,
frequency: 1,
+ frequencyDefault: 1,
allowed() {
return level.onLevel < 8 && level.onLevel > 0
},
@@ -2799,10 +2820,11 @@
maxCount: 1,
count: 0,
frequency: 1,
+ frequencyDefault: 1,
allowed() {
- return level.onLevel > 1
+ return level.onLevel > 1 && m.health > m.maxHealth - 0.1 && !tech.isEnergyHealth
},
- requires: "past levels 1",
+ requires: "past levels 1, full health, not mass-energy",
effect() {
tech.isNoHeals = true;
level.difficultyDecrease(simulation.difficultyMode * 2)
@@ -2825,7 +2847,7 @@
isGunTech: true,
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return (b.totalBots() > 3 || m.fieldUpgrades[m.fieldMode].name === "nano-scale manufacturing" || m.fieldUpgrades[m.fieldMode].name === "plasma torch" || m.fieldUpgrades[m.fieldMode].name === "pilot wave") && !tech.isEnergyHealth && !tech.isRewindAvoidDeath //build.isExperimentSelection ||
},
@@ -2867,7 +2889,7 @@
isGunTech: true,
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return tech.haveGunCheck("nail gun") && !tech.nailFireRate && !tech.isIceCrystals && !tech.isRivets
},
@@ -2904,7 +2926,7 @@
isGunTech: true,
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return tech.isNeedles && !tech.isNailRadiation
},
@@ -2921,7 +2943,7 @@
isGunTech: true,
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return tech.haveGunCheck("nail gun") && !tech.nailFireRate && !tech.isIceCrystals && !tech.isNeedles
},
@@ -2952,7 +2974,7 @@
isGunTech: true,
maxCount: 9,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return tech.isRivets
},
@@ -2969,7 +2991,7 @@
isGunTech: true,
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return tech.haveGunCheck("nail gun") && !tech.nailInstantFireRate && !tech.isRivets && !tech.isNeedles && !tech.isNailRadiation && !tech.isNailCrit
},
@@ -3005,7 +3027,7 @@
isGunTech: true,
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return tech.haveGunCheck("nail gun") && !tech.isRivets && !tech.isNeedles
},
@@ -3030,7 +3052,7 @@
isGunTech: true,
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return tech.haveGunCheck("nail gun") && tech.nailFireRate && !tech.isIceCrystals
},
@@ -3055,7 +3077,7 @@
isGunTech: true,
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return (tech.isNailShot || tech.nailBotCount > 1 || tech.haveGunCheck("nail gun")) && !tech.isIceCrystals
},
@@ -3072,7 +3094,7 @@
isGunTech: true,
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return (tech.isMineDrop + tech.nailBotCount + tech.fragments + tech.nailsDeathMob / 2 + ((tech.haveGunCheck("mine") && !tech.isLaserMine) + tech.isNailShot + (tech.haveGunCheck("nail gun") && !tech.isNeedleShieldPierce)) * 2 > 1) && !tech.isIceCrystals
},
@@ -3089,7 +3111,7 @@
isGunTech: true,
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return tech.isNailRadiation && !tech.isFastRadiation
},
@@ -3106,7 +3128,7 @@
isGunTech: true,
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return tech.isNailRadiation && !tech.isSlowRadiation
},
@@ -3123,7 +3145,7 @@
isGunTech: true,
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return tech.haveGunCheck("shotgun")
},
@@ -3162,11 +3184,11 @@
isGunTech: true,
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return tech.haveGunCheck("shotgun") && !tech.isIncendiary && !tech.isSlugShot
},
- requires: "shotgun",
+ requires: "shotgun, not slug",
effect() {
tech.isNailShot = true;
},
@@ -3179,11 +3201,11 @@
isGunTech: true,
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return tech.haveGunCheck("shotgun") && !tech.isNailShot
},
- requires: "shotgun",
+ requires: "shotgun, not nailshot",
effect() {
tech.isSlugShot = true;
},
@@ -3196,7 +3218,7 @@
isGunTech: true,
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return tech.haveGunCheck("shotgun")
},
@@ -3213,7 +3235,7 @@
isGunTech: true,
maxCount: 9,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return tech.haveGunCheck("super balls") && !tech.oneSuperBall
},
@@ -3230,7 +3252,7 @@
isGunTech: true,
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return tech.haveGunCheck("super balls") && tech.superBallNumber === 4
},
@@ -3247,7 +3269,7 @@
isGunTech: true,
maxCount: 9,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return tech.haveGunCheck("super balls")
},
@@ -3264,7 +3286,7 @@
isGunTech: true,
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return tech.haveGunCheck("wave beam")
},
@@ -3281,7 +3303,7 @@
isGunTech: true,
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return tech.haveGunCheck("wave beam") && !tech.isWaveReflect
},
@@ -3300,7 +3322,7 @@
isGunTech: true,
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return tech.haveGunCheck("wave beam") && tech.waveSpeedMap !== 3
},
@@ -3317,7 +3339,7 @@
isGunTech: true,
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return tech.haveGunCheck("missiles") || tech.isMissileField
},
@@ -3334,7 +3356,7 @@
isGunTech: true,
maxCount: 9,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return tech.haveGunCheck("missiles")
},
@@ -3351,7 +3373,7 @@
isGunTech: true,
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
isBot: true,
isBotTech: true,
allowed() {
@@ -3371,7 +3393,7 @@
isGunTech: true,
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return tech.haveGunCheck("grenades")
},
@@ -3390,7 +3412,7 @@
isGunTech: true,
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return tech.haveGunCheck("grenades") && !tech.isNeutronBomb
},
@@ -3409,7 +3431,7 @@
isGunTech: true,
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return tech.haveGunCheck("grenades") && !tech.fragments && !tech.isVacuumBomb
},
@@ -3428,7 +3450,7 @@
isGunTech: true,
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return tech.isNeutronBomb
},
@@ -3445,7 +3467,7 @@
isGunTech: true,
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return tech.isNeutronBomb
},
@@ -3462,7 +3484,7 @@
isGunTech: true,
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return (tech.haveGunCheck("mine") || tech.isMineDrop) && !tech.isMineSentry
},
@@ -3479,7 +3501,7 @@
isGunTech: true,
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return tech.haveGunCheck("mine") && !tech.isMineSentry
},
@@ -3496,7 +3518,7 @@
isGunTech: true,
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return (tech.haveGunCheck("mine") || tech.isMineDrop) && !tech.isMineAmmoBack && !tech.isLaserMine
},
@@ -3513,7 +3535,7 @@
isGunTech: true,
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return tech.haveGunCheck("spores")
},
@@ -3530,7 +3552,7 @@
isGunTech: true,
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return tech.haveGunCheck("spores") || tech.sporesOnDeath > 0 || tech.isSporeField
},
@@ -3548,7 +3570,7 @@
isGunTech: true,
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return tech.haveGunCheck("spores") || tech.sporesOnDeath > 0 || tech.isSporeField
},
@@ -3565,7 +3587,7 @@
isGunTech: true,
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return tech.haveGunCheck("spores") || tech.sporesOnDeath > 0 || tech.isSporeField
},
@@ -3582,7 +3604,7 @@
isGunTech: true,
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return (tech.haveGunCheck("spores") || tech.sporesOnDeath > 0 || tech.isSporeField) && !tech.isEnergyHealth
},
@@ -3599,7 +3621,7 @@
isGunTech: true,
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return tech.haveGunCheck("drones") || (m.fieldUpgrades[m.fieldMode].name === "nano-scale manufacturing" && !(tech.isSporeField || tech.isMissileField || tech.isIceField))
},
@@ -3616,7 +3638,7 @@
isGunTech: true,
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return !tech.isArmorFromPowerUps && (tech.haveGunCheck("drones") || (m.fieldUpgrades[m.fieldMode].name === "nano-scale manufacturing" && !(tech.isSporeField || tech.isMissileField || tech.isIceField)))
},
@@ -3633,7 +3655,7 @@
isGunTech: true,
maxCount: 3,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return tech.haveGunCheck("drones") || (m.fieldUpgrades[m.fieldMode].name === "nano-scale manufacturing" && !(tech.isSporeField || tech.isMissileField || tech.isIceField))
},
@@ -3658,7 +3680,7 @@
isGunTech: true,
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return tech.haveGunCheck("foam") || tech.foamBotCount > 1
},
@@ -3675,7 +3697,7 @@
isGunTech: true,
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return tech.haveGunCheck("foam") || tech.foamBotCount > 1
},
@@ -3693,7 +3715,7 @@
isGunTech: true,
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return tech.haveGunCheck("foam") || tech.foamBotCount > 1
},
@@ -3710,7 +3732,7 @@
isGunTech: true,
maxCount: 9,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return tech.haveGunCheck("foam")
},
@@ -3727,7 +3749,7 @@
isGunTech: true,
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return tech.haveGunCheck("foam")
},
@@ -3745,7 +3767,7 @@
// description: "increase foam damage by 200%
foam dissipates 50% faster",
// maxCount: 1,
// count: 0,
- // frequency: 1,
+ // frequency: 2,
// allowed() {
// return tech.haveGunCheck("foam") || tech.foamBotCount > 2
// },
@@ -3762,7 +3784,7 @@
// description: "slow time while charging the rail gun
charging no longer drains energy",
// maxCount: 1,
// count: 0,
- // frequency: 1,
+ // frequency: 2,
// allowed() {
// return simulation.fpsCapDefault > 45 && tech.haveGunCheck("rail gun") && !tech.isSlowFPS && !tech.isCapacitor
// },
@@ -3782,7 +3804,7 @@
isGunTech: true,
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return tech.haveGunCheck("rail gun")
},
@@ -3799,7 +3821,7 @@
isGunTech: true,
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return tech.haveGunCheck("rail gun")
},
@@ -3816,7 +3838,7 @@
isGunTech: true,
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return tech.haveGunCheck("rail gun")
},
@@ -3833,7 +3855,7 @@
isGunTech: true,
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return tech.haveGunCheck("laser") || tech.laserBotCount > 1 || tech.isLaserMine
},
@@ -3850,7 +3872,7 @@
isGunTech: true,
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return tech.haveGunCheck("laser") || tech.laserBotCount > 1
},
@@ -3869,7 +3891,7 @@
isGunTech: true,
maxCount: 9,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return (tech.haveGunCheck("laser") || tech.isLaserMine || tech.laserBotCount > 1) && !tech.isWideLaser && !tech.isPulseLaser && !tech.historyLaser
},
@@ -3890,7 +3912,7 @@
isGunTech: true,
maxCount: 9,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return tech.haveGunCheck("laser") && !tech.isWideLaser && !tech.isPulseAim && !tech.historyLaser
},
@@ -3915,7 +3937,7 @@
isGunTech: true,
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return tech.haveGunCheck("laser") && tech.laserReflections < 3 && !tech.beamSplitter && !tech.isPulseLaser && !tech.historyLaser
},
@@ -3942,7 +3964,7 @@
isGunTech: true,
maxCount: 9,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return tech.haveGunCheck("laser") && tech.isWideLaser
},
@@ -3969,7 +3991,7 @@
isGunTech: true,
maxCount: 9,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return tech.haveGunCheck("laser") && tech.laserReflections < 3 && !tech.beamSplitter && !tech.isPulseLaser && !tech.isWideLaser
},
@@ -3996,7 +4018,7 @@
isGunTech: true,
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return tech.haveGunCheck("laser") && tech.laserReflections < 3 && !tech.isWideLaser && !tech.historyLaser
},
@@ -4021,7 +4043,7 @@
isGunTech: true,
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return tech.isPulseLaser
},
@@ -4038,7 +4060,7 @@
isGunTech: true,
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return tech.isPulseLaser && !tech.beamSplitter
},
@@ -4060,7 +4082,7 @@
isFieldTech: true,
maxCount: 9,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return m.fieldUpgrades[m.fieldMode].name === "standing wave harmonics"
},
@@ -4077,7 +4099,7 @@
isFieldTech: true,
maxCount: 9,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return m.fieldUpgrades[m.fieldMode].name === "standing wave harmonics"
},
@@ -4096,7 +4118,7 @@
isFieldTech: true,
maxCount: 9,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return m.fieldUpgrades[m.fieldMode].name === "perfect diamagnetism" || m.fieldUpgrades[m.fieldMode].name === "standing wave harmonics" || m.fieldUpgrades[m.fieldMode].name === "nano-scale manufacturing"
},
@@ -4113,7 +4135,7 @@
isFieldTech: true,
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return tech.isStunField || tech.oneSuperBall || tech.isCloakStun || tech.orbitBotCount > 1 || tech.isPerpetualStun
},
@@ -4130,7 +4152,7 @@
isFieldTech: true,
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return m.fieldUpgrades[m.fieldMode].name === "perfect diamagnetism"
},
@@ -4147,7 +4169,7 @@
isFieldTech: true,
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return m.fieldUpgrades[m.fieldMode].name === "nano-scale manufacturing" || m.fieldUpgrades[m.fieldMode].name === "pilot wave"
},
@@ -4166,6 +4188,7 @@
maxCount: 1,
count: 0,
frequency: 1,
+ frequencyDefault: 1,
isBotTech: true,
isNonRefundable: true,
// isExperimentHide: true,
@@ -4187,6 +4210,7 @@
maxCount: 1,
count: 0,
frequency: 1,
+ frequencyDefault: 1,
isBotTech: true,
isNonRefundable: true,
// isExperimentHide: true,
@@ -4272,7 +4296,7 @@
isFieldTech: true,
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return m.maxEnergy > 0.99 && m.fieldUpgrades[m.fieldMode].name === "nano-scale manufacturing" && !(tech.isMissileField || tech.isIceField || tech.isFastDrones || tech.isDroneGrab)
},
@@ -4289,7 +4313,7 @@
isFieldTech: true,
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return m.maxEnergy > 0.5 && m.fieldUpgrades[m.fieldMode].name === "nano-scale manufacturing" && !(tech.isSporeField || tech.isIceField || tech.isFastDrones || tech.isDroneGrab)
},
@@ -4306,7 +4330,7 @@
isFieldTech: true,
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return m.fieldUpgrades[m.fieldMode].name === "nano-scale manufacturing" && !(tech.isSporeField || tech.isMissileField || tech.isFastDrones || tech.isDroneGrab)
},
@@ -4323,7 +4347,7 @@
isFieldTech: true,
maxCount: 9,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return tech.isIceField
},
@@ -4340,7 +4364,7 @@
isFieldTech: true,
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return m.fieldUpgrades[m.fieldMode].name === "negative mass field"
},
@@ -4357,7 +4381,7 @@
isFieldTech: true,
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return m.fieldUpgrades[m.fieldMode].name === "negative mass field" || m.fieldUpgrades[m.fieldMode].name === "pilot wave"
},
@@ -4374,7 +4398,7 @@
isFieldTech: true,
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 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"
},
@@ -4392,7 +4416,7 @@
// isFieldTech: true,
// maxCount: 1,
// count: 0,
- // frequency: 1,
+ // frequency: 2,
// allowed() {
// return m.fieldUpgrades[m.fieldMode].name === "plasma torch" && !tech.isEnergyHealth
// },
@@ -4410,7 +4434,7 @@
isFieldTech: true,
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
isBot: true,
isBotTech: true,
allowed() {
@@ -4431,7 +4455,7 @@
isFieldTech: true,
maxCount: 9,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return m.fieldUpgrades[m.fieldMode].name === "plasma torch" && !tech.isExtruder
},
@@ -4449,7 +4473,7 @@
isFieldTech: true,
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return m.fieldUpgrades[m.fieldMode].name === "plasma torch" && tech.isPlasmaRange === 1
},
@@ -4466,7 +4490,7 @@
isFieldTech: true,
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return m.fieldUpgrades[m.fieldMode].name === "time dilation field"
},
@@ -4485,7 +4509,7 @@
isFieldTech: true,
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return m.fieldUpgrades[m.fieldMode].name === "time dilation field" || m.fieldUpgrades[m.fieldMode].name === "pilot wave"
},
@@ -4508,7 +4532,7 @@
isFieldTech: true,
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return (m.fieldUpgrades[m.fieldMode].name === "time dilation field" || m.fieldUpgrades[m.fieldMode].name === "pilot wave") && tech.energyRegen !== 0;
},
@@ -4527,7 +4551,7 @@
isFieldTech: true,
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return m.fieldUpgrades[m.fieldMode].name === "metamaterial cloaking"
},
@@ -4544,7 +4568,7 @@
isFieldTech: true,
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return m.fieldUpgrades[m.fieldMode].name === "metamaterial cloaking"
},
@@ -4561,7 +4585,7 @@
isFieldTech: true,
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return m.fieldUpgrades[m.fieldMode].name === "metamaterial cloaking" || m.fieldUpgrades[m.fieldMode].name === "pilot wave"
},
@@ -4580,7 +4604,7 @@
isFieldTech: true,
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return m.fieldUpgrades[m.fieldMode].name === "wormhole"
},
@@ -4597,7 +4621,7 @@
isFieldTech: true,
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return m.fieldUpgrades[m.fieldMode].name === "wormhole"
},
@@ -4614,7 +4638,7 @@
isFieldTech: true,
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return m.fieldUpgrades[m.fieldMode].name === "wormhole"
},
@@ -4631,7 +4655,7 @@
isFieldTech: true,
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
allowed() {
return m.fieldUpgrades[m.fieldMode].name === "wormhole"
},
@@ -4930,7 +4954,7 @@
effect() {
for (let i = 0, len = tech.tech.length; i < len; i++) {
if (tech.tech[i].isJunk) {
- tech.tech[i].frequency = 1
+ tech.tech[i].frequency = 2
} else {
tech.tech[i].frequency = 0
}
@@ -5611,7 +5635,7 @@
description: `this`,
maxCount: 1,
count: 0,
- frequency: 1,
+ frequency: 2,
isLore: true,
// isNonRefundable: true,
isExperimentHide: true,
@@ -5648,7 +5672,7 @@
// description: `${lore.techCount+1}/${lore.techGoal}
add copies of this to the potential tech pool`,
// maxCount: 1,
// count: 0,
- // frequency: 1,
+ // frequency: 2,
// isLore: true,
// isNonRefundable: true,
// isExperimentHide: true,
diff --git a/todo.txt b/todo.txt
index 176ddaa..778b0cf 100644
--- a/todo.txt
+++ b/todo.txt
@@ -1,9 +1,11 @@
******************************************************** NEXT PATCH ********************************************************
-tech requirement info UI updated in experiment mode
+some tech is now only 50% likely to show up
+ I choose about 25 tech that don't effect game play as much, and dropped them down to 50% frequency
-tech: ergodicity - remove heal power ups and heal tech, reduce difficulty by 2 levels
+reset on experiment menu should now clear power ups and bullets
+fixed bug with no heals
******************************************************** BUGS ********************************************************
@@ -36,10 +38,9 @@ fix door.isOpen actually meaning isClosed?
******************************************************** TODO ********************************************************
-reset on experiment menu should clear power ups and bullets
-
-
-give pulsars attraction if with in distance range
+tech - gain all the tech you didn't take on the last selection menu
+ normally 2, but synergy with cardinality - 4, and 0 with determinism
+ frequency to 1
should blocks block mob vision?
mobs will attack player in the starting room though...