From 603d5c466c052fde088b657d93ef9d4aec8a2fc0 Mon Sep 17 00:00:00 2001 From: landgreen Date: Sat, 20 Mar 2021 16:42:36 -0700 Subject: [PATCH] frequency doubling 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 reset on experiment menu should now clear power ups and bullets fixed bug with no heals --- .DS_Store | Bin 6148 -> 6148 bytes js/index.js | 6 +- js/level.js | 4 +- js/powerup.js | 1 - js/simulation.js | 1 + js/spawn.js | 10 + js/tech.js | 492 +++++++++++++++++++++++++---------------------- todo.txt | 13 +- 8 files changed, 281 insertions(+), 246 deletions(-) diff --git a/.DS_Store b/.DS_Store index cfe088306a35a25040dda007fd4d35d2423a0b73..a8cc3c557013a6700011198b83e243930f4e0a8c 100644 GIT binary patch delta 22 dcmZoMXffEJ#mqFxXtEBoFO%?t&DG4EA^=ZD2HpSw delta 22 dcmZoMXffEJ#mrQ}F 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...