diff --git a/.DS_Store b/.DS_Store
index 0a677dc..f973175 100644
Binary files a/.DS_Store and b/.DS_Store differ
diff --git a/js/engine.js b/js/engine.js
index a5c5275..ea2cdc9 100644
--- a/js/engine.js
+++ b/js/engine.js
@@ -187,8 +187,8 @@ function collisionChecks(event) {
if (obj.classType === "body" && obj.speed > 6) {
const v = Vector.magnitude(Vector.sub(mob[k].velocity, obj.velocity));
if (v > 9) {
- let dmg = 0.075 * b.dmgScale * v * obj.mass * tech.throwChargeRate;
- if (mob[k].isShielded) dmg *= 0.6
+ let dmg = 0.075 * b.dmgScale * v * obj.mass * (tech.throwChargeRate) * (tech.isBlockHarm ? 2 : 1) * (tech.isMobBlockFling ? 2 : 1);
+ if (mob[k].isShielded) dmg *= 0.7
mob[k].damage(dmg, true);
if (tech.isBlockPowerUps && !mob[k].alive && mob[k].isDropPowerUp && m.throwCycle > m.cycle) {
let type = tech.isEnergyNoAmmo ? "heal" : "ammo"
@@ -197,8 +197,7 @@ function collisionChecks(event) {
} else if (Math.random() < 0.4 && !tech.isSuperDeterminism) {
type = "research"
}
- powerUps.spawn(mob[k].position.x, mob[k].position.y, type);
- // for (let i = 0, len = Math.ceil(2 * Math.random()); i < len; i++) {}
+ for (let i = 0; i < 2; i++) powerUps.spawn(mob[k].position.x, mob[k].position.y, type);
}
const stunTime = dmg / Math.sqrt(obj.mass)
diff --git a/js/level.js b/js/level.js
index 6837e25..831ab4e 100644
--- a/js/level.js
+++ b/js/level.js
@@ -29,6 +29,7 @@ const level = {
level.intro(); //starting level
// level.testing(); //not in rotation
+ // level.template(); //blank start new map development
// level.final() //final boss level
// level.gauntlet(); //before final boss level
// level.testChamber() //less mobs, more puzzle
@@ -114,16 +115,6 @@ const level = {
for (let j = 0, len = 1 + 2 * Math.random(); j < len; j++) powerUps.spawn(level.exit.x + 100 * (Math.random() - 0.5), level.exit.y - 100 + 100 * (Math.random() - 0.5), "research", false)
}
for (let i = 0; i < tech.wimpExperiment; i++) spawn.WIMP()
- // if (tech.isPerpetualReroll) powerUps.spawn(player.position.x + 60 * (Math.random() - 0.5), player.position.y + 60 * (Math.random() - 0.5), "research", false);
- // if (tech.isPerpetualAmmo) {
- // for (let i = 0; i < 3; i++) powerUps.spawn(player.position.x + 60 * (Math.random() - 0.5), player.position.y + 60 * (Math.random() - 0.5), "ammo", false);
- // }
- // if (tech.isPerpetualHeal) {
- // for (let i = 0; i < 3; i++) powerUps.spawn(player.position.x + 60 * (Math.random() - 0.5), player.position.y + 60 * (Math.random() - 0.5), "heal", false);
- // }
- // if (tech.isPerpetualStun) {
- // for (let i = 0; i < mob.length; i++) mobs.statusStun(mob[i], 780)
- // }
if (tech.isFlipFlopLevelReset && !tech.isFlipFlopOn) {
tech.isFlipFlopOn = true
m.eyeFillColor = m.fieldMeterColor
diff --git a/js/player.js b/js/player.js
index 94e6ba0..f27520b 100644
--- a/js/player.js
+++ b/js/player.js
@@ -1478,7 +1478,7 @@ const m = {
},
fieldUpgrades: [{
name: "field emitter",
- description: "use energy to block mobs,
grab power ups, and throw blocks
regen 6 energy per second",
+ description: "use energy to deflect mobs,
grab power ups, and throw blocks
regen 6 energy per second",
effect: () => {
m.hold = function() {
if (m.isHolding) {
@@ -1503,7 +1503,7 @@ const m = {
},
{
name: "standing wave harmonics",
- description: "3 oscillating shields are permanently active
blocking drains energy with no cool down
reduce harm and blocking recoil by 25%",
+ description: "3 oscillating shields are permanently active
deflecting drains energy with no cool down
reduce harm and deflecting recoil by 25%",
effect: () => {
// m.fieldHarmReduction = 0.80;
m.fieldBlockCD = 0;
@@ -1549,7 +1549,7 @@ const m = {
{
name: "perfect diamagnetism",
// description: "gain energy when blocking
no recoil when blocking",
- description: "attract power ups from far away
blocking does not drain energy
blocking has 90% less recoil",
+ description: "attract power ups from far away
deflecting does not drain energy
deflecting has 90% less recoil",
effect: () => {
m.fieldShieldingScale = 0;
m.fieldBlockCD = 4;
@@ -1621,7 +1621,7 @@ const m = {
},
{
name: "nano-scale manufacturing",
- description: "use energy to block mobs
excess energy used to build drones
double your default energy regeneration",
+ description: "excess energy used to build drones
use energy to deflect mobs
double your default energy regeneration",
effect: () => {
// m.fieldMeterColor = "#0c5"
// m.eyeFillColor = m.fieldMeterColor
@@ -1672,7 +1672,7 @@ const m = {
},
{
name: "negative mass field",
- description: "use energy to nullify gravity
reduce harm by 55%
blocks held by the field have a lower mass",
+ description: "use energy to nullify gravity
reduce harm by 55%
blocks held by the field have a lower mass",
fieldDrawRadius: 0,
effect: () => {
m.fieldFire = true;
@@ -2222,7 +2222,7 @@ const m = {
// },
{
name: "pilot wave",
- description: "use energy to push blocks with your mouse
field radius decreases out of line of sight
energy drain scales with block mass",
+ description: "use energy to push blocks with your mouse
field radius decreases out of line of sight
energy drain scales with mass",
effect: () => {
m.fieldPhase = 0;
m.fieldPosition = {
@@ -2404,7 +2404,7 @@ const m = {
},
{
name: "wormhole",
- description: "use energy to tunnel through a wormhole
wormholes attract blocks and power ups
7% chance to duplicate spawned power ups", //
bullets may also traverse wormholes
+ description: "use energy to tunnel through a wormhole
wormholes attract blocks and power ups
7% chance to duplicate spawned power ups", //
bullets may also traverse wormholes
effect: function() {
m.duplicateChance = 0.07
powerUps.setDo(); //needed after adjusting duplication chance
@@ -3016,8 +3016,8 @@ const m = {
if (obj.classType === "body" && obj.speed > 6) {
const v = Vector.magnitude(Vector.sub(mob[k].velocity, obj.velocity));
if (v > 9) {
- let dmg = 0.05 * b.dmgScale * v * obj.mass * tech.throwChargeRate;
- if (mob[k].isShielded) dmg *= 0.35
+ let dmg = 0.075 * b.dmgScale * v * obj.mass * (tech.throwChargeRate) * (tech.isBlockHarm ? 2 : 1) * (tech.isMobBlockFling ? 2 : 1);
+ if (mob[k].isShielded) dmg *= 0.7
mob[k].damage(dmg, true);
if (tech.isBlockPowerUps && !mob[k].alive && mob[k].isDropPowerUp && m.throwCycle > m.cycle) {
let type = tech.isEnergyNoAmmo ? "heal" : "ammo"
diff --git a/js/tech.js b/js/tech.js
index 4deb46a..2272214 100644
--- a/js/tech.js
+++ b/js/tech.js
@@ -227,7 +227,7 @@
allowed() {
return b.inventory.length > 1 && !tech.isEnergyHealth
},
- requires: "at least 2 guns",
+ requires: "at least 2 guns, not mass-energy",
effect() {
tech.isEntanglement = true
setTimeout(function() {
@@ -403,23 +403,6 @@
tech.isAmmoFromHealth = false;
}
},
- // {
- // name: "perpetual ammo",
- // description: "find 3 ammo at the start of each level",
- // maxCount: 1,
- // count: 0,
- // frequency: 2,
- // allowed() {
- // return !tech.isPerpetualReroll && !tech.isPerpetualHeal && !tech.isPerpetualReroll && !tech.isPerpetualStun && !tech.isEnergyNoAmmo
- // },
- // requires: "only 1 perpetual effect, not exciton lattice",
- // effect() {
- // tech.isPerpetualAmmo = true
- // },
- // remove() {
- // tech.isPerpetualAmmo = false
- // }
- // },
{
name: "desublimated ammunition",
description: "use 50% less ammo when crouching",
@@ -1177,7 +1160,7 @@
allowed() {
return m.maxEnergy > 0.5
},
- requires: "maximum energy above 50%",
+ requires: "maximum energy above 50",
effect() {
tech.laserBotCount++;
b.laserBot();
@@ -1466,7 +1449,7 @@
},
{
name: "mass driver",
- description: "increase block collision damage by 200%
charge throws more quickly for less energy",
+ description: "charge throws more quickly for less energy
increase block collision damage by 200%",
maxCount: 1,
count: 0,
frequency: 2,
@@ -1483,7 +1466,7 @@
},
{
name: "flywheel",
- description: "after a mob dies its body is spun and flung
in the general direction of a nearby mob",
+ description: "after a mob dies its block is flung at mobs
increase block collision damage by 100%",
maxCount: 1,
count: 0,
frequency: 3,
@@ -1501,7 +1484,7 @@
},
{
name: "fermions",
- description: "blocks thrown by you or pilot wave will
collide with intangible mobs, but not you",
+ description: "blocks thrown by you or pilot wave will
collide with intangible mobs, but not you",
maxCount: 1,
count: 0,
frequency: 2,
@@ -1518,7 +1501,7 @@
},
{
name: "inflation",
- description: "throwing a block expands it by 300%
increase throw charge rate by 200%",
+ description: "throwing a block expands it by 300%
increase throw charge rate by 200%",
maxCount: 1,
count: 0,
frequency: 3,
@@ -1526,7 +1509,7 @@
allowed() {
return tech.throwChargeRate > 1 && m.fieldUpgrades[m.fieldMode].name !== "pilot wave"
},
- requires: "mass driver, not ergodicity, pilot wave",
+ requires: "mass driver, not pilot wave",
effect() {
tech.isAddBlockMass = true
},
@@ -1536,7 +1519,7 @@
},
{
name: "restitution",
- description: "if a block you threw kills a mob
spawn a heal, ammo, or research",
+ description: "if a block you threw kills a mob
spawn 2 heals, ammo, or research",
maxCount: 1,
count: 0,
frequency: 3,
@@ -1554,7 +1537,7 @@
},
{
name: "inelastic collision",
- description: "while you are holding a block
reduce harm by 85%",
+ description: "holding a block reduces harm by 85%
increase block collision damage by 100%",
maxCount: 1,
count: 0,
frequency: 3,
@@ -1862,7 +1845,7 @@
count: 0,
frequency: 2,
allowed() {
- return simulation.fpsCapDefault > 45 && !tech.isRailTimeSlow
+ return simulation.fpsCapDefault > 45
},
requires: "FPS above 45",
effect() {
@@ -1879,7 +1862,7 @@
count: 0,
frequency: 2,
allowed() {
- return tech.isStunField || tech.oneSuperBall || tech.isCloakStun || tech.orbitBotCount > 1 || tech.isPerpetualStun || tech.isExplosionStun
+ return tech.isStunField || tech.oneSuperBall || tech.isCloakStun || tech.orbitBotCount > 1 || tech.isExplosionStun
},
requires: "a stun effect",
effect() {
@@ -1952,7 +1935,7 @@
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
},
- requires: "not standing wave, mass-energy, piezo, max energy reduction, CPT gun",
+ requires: "not standing wave, mass-energy, max energy reduction, CPT gun",
effect() {
tech.isRewindAvoidDeath = true;
},
@@ -2149,7 +2132,7 @@
allowed() {
return tech.isEnergyLoss && !tech.isRewindAvoidDeath
},
- requires: "exothermic process, CPT",
+ requires: "exothermic process, not CPT",
effect() {
tech.isMaxEnergyTech = true;
m.setMaxEnergy()
@@ -2311,7 +2294,7 @@
allowed() {
return m.health < 0.5 || build.isExperimentSelection
},
- requires: "health below 60",
+ requires: "health below 50",
effect() {
tech.isLowHealthDmg = true; //used in mob.damage()
},
@@ -2326,7 +2309,7 @@
count: 0,
frequency: 2,
allowed() {
- return (m.harmReduction() < 1 || tech.healthDrain || tech.isLowHealthDmg || tech.isHealthRecovery || tech.isHealLowHealth || tech.largerHeals > 1 || tech.isPerpetualHeal) && !tech.isEnergyHealth
+ return (m.harmReduction() < 1 || tech.healthDrain || tech.isLowHealthDmg || tech.isHealthRecovery || tech.isHealLowHealth || tech.largerHeals > 1) && !tech.isEnergyHealth
},
requires: "negative feedback or extra healing tech or harm reduction, not mass-energy",
effect() {
@@ -2458,7 +2441,7 @@
allowed() {
return ((m.health / m.maxHealth) < 0.7 || build.isExperimentSelection) && !tech.isEnergyHealth && !tech.isNoHeals
},
- requires: "not mass-energy equivalence, ergodicity",
+ requires: "under 70% health, not mass-energy equivalence, ergodicity",
effect() {
tech.largerHeals++;
},
@@ -2468,7 +2451,7 @@
},
{
name: "maintenance",
- description: "double the frequency of finding healing tech
spawn 12 heals",
+ description: "double the frequency of finding healing tech
spawn 15 heals",
maxCount: 1,
count: 0,
frequency: 1,
@@ -2478,33 +2461,15 @@
allowed() {
return (m.health / m.maxHealth) < 0.7 && !tech.isNoHeals
},
- requires: "health > 70%, not ergodicity",
+ requires: "health < 70%, not ergodicity",
effect() {
- for (let i = 0; i < 12; i++) powerUps.spawn(m.pos.x + 60 * (Math.random() - 0.5), m.pos.y + 60 * (Math.random() - 0.5), "heal");
+ for (let i = 0; i < 15; i++) powerUps.spawn(m.pos.x + 60 * (Math.random() - 0.5), m.pos.y + 60 * (Math.random() - 0.5), "heal");
for (let i = 0, len = tech.tech.length; i < len; i++) {
if (tech.tech[i].isHealTech) tech.tech[i].frequency *= 2
}
},
remove() {}
},
- // {
- // name: "perpetual heals",
- // description: "find 3 heals at the start of each level",
- // maxCount: 1,
- // count: 0,
- // frequency: 2,
- // isHealTech: true,
- // allowed() {
- // return !tech.isPerpetualReroll && !tech.isPerpetualAmmo && !tech.isPerpetualStun
- // },
- // requires: "only 1 perpetual effect",
- // effect() {
- // tech.isPerpetualHeal = true
- // },
- // remove() {
- // tech.isPerpetualHeal = false
- // }
- // },
{
name: "anthropic principle",
nameInfo: "",
@@ -2558,9 +2523,9 @@
count: 0,
frequency: 4,
allowed() {
- return !tech.isSwitchReality && !tech.isResearchReality && tech.isDeathAvoid
+ return !tech.isSwitchReality && !tech.isResearchReality && tech.isDeathAvoid && !tech.isCollisionRealitySwitch
},
- requires: "anthropic principle, not many-worlds, Ψ(t) collapse",
+ requires: "anthropic principle, not many-worlds, Ψ(t) collapse, non-unitary",
effect() {
tech.isImmortal = true;
// for (let i = 0; i < 4; i++) powerUps.spawn(m.pos.x + Math.random() * 10, m.pos.y + Math.random() * 10, "research", false);
@@ -2673,7 +2638,7 @@
allowed() {
return powerUps.research.count === 0 && !tech.isAnsatz
},
- requires: "no research",
+ requires: "no research, not ansatz",
effect() {
tech.isRerollHaste = true;
tech.researchHaste = 0.33;
@@ -2694,7 +2659,7 @@
allowed() {
return powerUps.research.count === 0 && !tech.isSuperDeterminism && !tech.isRerollHaste
},
- requires: "not superdeterminism or Ψ(t) collapse, no research",
+ requires: "not superdeterminism or Ψ(t) collapse, no research, perturbation theory",
effect: () => {
tech.isAnsatz = true;
},
@@ -2878,7 +2843,7 @@
allowed() {
return tech.duplicationChance() < 1 && !tech.isDeterminism
},
- requires: "below 100% duplication chance, below level 5, not determinism",
+ requires: "below 100% duplication chance, not determinism",
effect() {
// tech.cancelCount = 0
tech.isCancelDuplication = true
@@ -2916,7 +2881,7 @@
allowed() {
return tech.duplicationChance() > 0.15
},
- requires: "some duplication chance",
+ requires: "duplication chance > 15%",
effect() {
tech.isDupDamage = true;
},
@@ -2971,7 +2936,7 @@
allowed() {
return (tech.totalCount > 3) && !tech.isSuperDeterminism
},
- requires: "at least 1 tech, a chance to duplicate power ups",
+ requires: "at least 4 tech, not super determinism",
effect: () => {
const have = [] //find which tech you have
for (let i = 0; i < tech.tech.length; i++) {
@@ -3003,7 +2968,7 @@
allowed() {
return (tech.totalCount > 3) && !tech.isSuperDeterminism && tech.duplicationChance() > 0
},
- requires: "at least 1 tech, a chance to duplicate power ups",
+ requires: "at least 4 tech, a chance to duplicate power ups",
effect: () => {
const removeTotal = powerUps.removeRandomTech()
for (let i = 0; i < removeTotal + 1; i++) powerUps.spawn(m.pos.x + 60 * (Math.random() - 0.5), m.pos.y + 60 * (Math.random() - 0.5), "tech");
@@ -3022,11 +2987,10 @@
allowed() {
return !tech.isSuperDeterminism && tech.duplicationChance() > 0 && powerUps.research.count > 1
},
- requires: "at least 1 tech and 2 research, a chance to duplicate power ups",
+ requires: "at least 2 research, not super determinism",
effect: () => {
powerUps.research.changeRerolls(-2)
- simulation.makeTextLog(`m.research -= 2
-
${powerUps.research.count}`)
+ simulation.makeTextLog(`m.research -= 2
${powerUps.research.count}`)
const chanceStore = tech.duplicateChance
tech.duplicateChance = (tech.isStimulatedEmission ? 0.2 : 0) + tech.cancelCount * 0.045 + m.duplicateChance + tech.duplicateChance * 2 //increase duplication chance to simulate doubling all 3 sources of duplication chance
powerUps.spawn(m.pos.x, m.pos.y, "tech");
@@ -3143,7 +3107,7 @@
allowed() {
return powerUps.tech.choiceLog.length > 10 && !tech.isDeterminism && powerUps.research.count > 1
},
- requires: "rejected an option in the last tech selection, at least 2 research",
+ requires: "rejected an option in the last tech selection, at least 2 research, not determinism",
effect: () => {
powerUps.research.changeRerolls(-2)
let num = 3
@@ -3211,7 +3175,7 @@
allowed() {
return tech.isDeterminism && !tech.isAnsatz && !tech.isGunSwitchField
},
- requires: "determinism, not unified field theory",
+ requires: "determinism, not unified field theory, not ansatz",
effect: () => {
tech.isSuperDeterminism = true;
//if you change the number spawned also change it in Born rule
@@ -3504,7 +3468,7 @@
allowed() {
return tech.haveGunCheck("nail gun") && tech.nailFireRate && !tech.isIceCrystals
},
- requires: "nail gun and pneumatic actuator",
+ requires: "nail gun and pneumatic actuator not ice crystal nucleation",
effect() {
tech.nailInstantFireRate = true
for (i = 0, len = b.guns.length; i < len; i++) { //find which gun
@@ -3530,7 +3494,7 @@
allowed() {
return (tech.isNailShot || tech.nailBotCount > 1 || tech.haveGunCheck("nail gun")) && !tech.isIceCrystals
},
- requires: "nails",
+ requires: "nails, not ice crystal nucleation",
effect() {
tech.isNailCrit = true
},
@@ -3566,7 +3530,7 @@
allowed() {
return tech.isNailRadiation && !tech.isFastRadiation
},
- requires: "irradiated nails",
+ requires: "irradiated nails, not 1/2s half-life",
effect() {
tech.isSlowRadiation = true;
},
@@ -3584,7 +3548,7 @@
allowed() {
return tech.isNailRadiation && !tech.isSlowRadiation
},
- requires: "irradiated nails",
+ requires: "irradiated nails, not 4s half-life",
effect() {
tech.isFastRadiation = true;
},
@@ -3823,7 +3787,7 @@
},
{
name: "phase velocity",
- description: "wave beam propagates faster through solids
up by 3000% in the map and 760% in blocks",
+ description: "wave beam propagates faster through solids
up by 3000% in the map and 760% in blocks",
isGunTech: true,
maxCount: 1,
count: 0,
@@ -3948,7 +3912,7 @@
allowed() {
return tech.haveGunCheck("grenades") && !tech.fragments && !tech.isVacuumBomb
},
- requires: "grenades, not fragmentation",
+ requires: "grenades, not fragmentation, vacuum bomb",
effect() {
tech.isNeutronBomb = true;
b.setGrenadeMode()
@@ -4131,7 +4095,7 @@
allowed() {
return (tech.haveGunCheck("spores") || tech.sporesOnDeath > 0 || tech.isSporeField) && !tech.isEnergyHealth
},
- requires: "spores",
+ requires: "spores, not mass-energy",
effect() {
tech.isMutualism = true
},
@@ -4311,43 +4275,6 @@
tech.isAmmoFoamSize = false;
}
},
-
- // {
- // name: "foam size",
- // description: "increase foam damage by 200%
foam dissipates 50% faster",
- // maxCount: 1,
- // count: 0,
- // frequency: 2,
- // allowed() {
- // return tech.haveGunCheck("foam") || tech.foamBotCount > 2
- // },
- // requires: "foam",
- // effect() {
- // tech.isLargeFoam = true
- // },
- // remove() {
- // tech.isLargeFoam = false;
- // }
- // },
- // {
- // name: "frame-dragging",
- // description: "slow time while charging the rail gun
charging no longer drains energy",
- // maxCount: 1,
- // count: 0,
- // frequency: 2,
- // allowed() {
- // return simulation.fpsCapDefault > 45 && tech.haveGunCheck("rail gun") && !tech.isSlowFPS && !tech.isCapacitor
- // },
- // requires: "rail gun and FPS above 45",
- // effect() {
- // tech.isRailTimeSlow = true;
- // },
- // remove() {
- // tech.isRailTimeSlow = false;
- // simulation.fpsCap = simulation.fpsCapDefault
- // simulation.fpsInterval = 1000 / simulation.fpsCap;
- // }
- // },
{
name: "half-wave rectifier",
description: "charging the rail gun gives you energy
instead of draining it",
@@ -4430,7 +4357,7 @@
allowed() {
return (tech.haveGunCheck("laser") && !tech.isPulseLaser) || tech.laserBotCount > 1
},
- requires: "laser",
+ requires: "laser, not pulse",
effect() {
tech.isLaserPush = true;
},
@@ -4449,7 +4376,7 @@
allowed() {
return (tech.haveGunCheck("laser") || tech.isLaserMine || tech.laserBotCount > 1) && !tech.isWideLaser && !tech.isPulseLaser && !tech.historyLaser
},
- requires: "laser, not wide beam",
+ requires: "laser, not wide beam, diffuse beam, pulse, or slow light",
effect() {
tech.laserReflections++;
tech.laserDamage += 0.08; //base is 0.12
@@ -4471,7 +4398,7 @@
allowed() {
return tech.haveGunCheck("laser") && !tech.isWideLaser && !tech.isPulseAim && !tech.historyLaser
},
- requires: "laser, not specular reflection",
+ requires: "laser, not neocognitron, diffuse beam, or slow light",
effect() {
tech.beamSplitter++
for (i = 0, len = b.guns.length; i < len; i++) { //find which gun
@@ -4497,7 +4424,7 @@
allowed() {
return tech.haveGunCheck("laser") && tech.laserReflections < 3 && !tech.beamSplitter && !tech.isPulseLaser && !tech.historyLaser
},
- requires: "laser, not specular reflection, diffraction grating, slow light",
+ requires: "laser, not specular reflection, diffraction grating, slow light, pulse",
effect() {
if (tech.wideLaser === 0) tech.wideLaser = 3
tech.isWideLaser = true;
@@ -4525,7 +4452,7 @@
allowed() {
return tech.haveGunCheck("laser") && tech.isWideLaser
},
- requires: "laser, not specular reflection, not diffraction grating",
+ requires: "laser, diffuse beam",
effect() {
tech.wideLaser += 2
for (i = 0, len = b.guns.length; i < len; i++) { //find which gun
@@ -4607,7 +4534,7 @@
allowed() {
return tech.isPulseLaser && !tech.beamSplitter
},
- requires: "pulse",
+ requires: "pulse, not diffraction grating",
effect() {
tech.isPulseAim = true;
},
@@ -4621,7 +4548,7 @@
//**************************************************
{
name: "frequency resonance",
- description: "standing wave harmonics shield is retuned
increase size and blocking efficiency by 50%",
+ description: "standing wave harmonics shield is retuned
increase size and deflecting efficiency by 50%",
isFieldTech: true,
maxCount: 9,
count: 0,
@@ -4643,7 +4570,7 @@
},
{
name: "bremsstrahlung",
- description: "blocking does damage to mobs",
+ description: "deflecting does damage to mobs",
isFieldTech: true,
maxCount: 9,
count: 0,
@@ -4661,7 +4588,7 @@
},
{
name: "triple point",
- description: "the pressure from blocking is used
to condense ice IX crystals",
+ description: "the pressure from deflecting is used
to condense ice IX crystals",
isFieldTech: true,
maxCount: 9,
count: 0,
@@ -4679,7 +4606,7 @@
},
{
name: "flux pinning",
- description: "blocking with your field
stuns mobs for +2 second",
+ description: "deflecting with your field
stuns mobs for +2 second",
isFieldTech: true,
maxCount: 9,
count: 0,
@@ -4748,7 +4675,7 @@
isNonRefundable: true,
// isExperimentHide: true,
allowed() {
- return m.fieldUpgrades[m.fieldMode].name === "nano-scale manufacturing" && !(tech.isNailBotUpgrade && tech.isFoamBotUpgrade && tech.isBoomBotUpgrade && tech.isLaserBotUpgrade && tech.isOrbitBotUpgrade)
+ return m.fieldUpgrades[m.fieldMode].name === "nano-scale manufacturing"
},
requires: "nano-scale manufacturing",
effect: () => {
@@ -4840,7 +4767,7 @@
allowed() {
return m.fieldUpgrades[m.fieldMode].name === "nano-scale manufacturing" && !(tech.isMissileField || tech.isIceField || tech.isFastDrones || tech.isDroneGrab)
},
- requires: "nano-scale manufacturing",
+ requires: "nano-scale manufacturing, no other manufacturing",
effect() {
tech.isSporeField = true;
},
@@ -4858,7 +4785,7 @@
allowed() {
return m.maxEnergy > 0.5 && m.fieldUpgrades[m.fieldMode].name === "nano-scale manufacturing" && !(tech.isSporeField || tech.isIceField || tech.isFastDrones || tech.isDroneGrab)
},
- requires: "nano-scale manufacturing",
+ requires: "nano-scale manufacturing, no other manufacturing",
effect() {
tech.isMissileField = true;
},
@@ -4876,7 +4803,7 @@
allowed() {
return m.fieldUpgrades[m.fieldMode].name === "nano-scale manufacturing" && !(tech.isSporeField || tech.isMissileField || tech.isFastDrones || tech.isDroneGrab)
},
- requires: "nano-scale manufacturing",
+ requires: "nano-scale manufacturing, no other manufacturing",
effect() {
tech.isIceField = true;
},
@@ -5069,7 +4996,7 @@
allowed() {
return (m.fieldUpgrades[m.fieldMode].name === "time dilation field") && tech.energyRegen !== 0; //|| m.fieldUpgrades[m.fieldMode].name === "pilot wave"
},
- requires: "time dilation field",
+ requires: "time dilation field, not ground state",
effect: () => {
tech.energyRegen = 0.004;
m.fieldRegen = tech.energyRegen;
@@ -5081,7 +5008,7 @@
},
{
name: "boson composite",
- description: "intangible to blocks and mobs while cloaked
passing through mobs drains your energy",
+ description: "intangible to blocks and mobs while cloaked
passing through mobs drains your energy",
isFieldTech: true,
maxCount: 1,
count: 0,
@@ -5137,7 +5064,7 @@
},
{
name: "potential well",
- description: "the force that pilot wave generates
to trap blocks is greatly increased",
+ description: "the force that pilot wave generates
to trap blocks is greatly increased",
isFieldTech: true,
maxCount: 1,
count: 0,
@@ -5173,7 +5100,7 @@
},
{
name: "Penrose process",
- description: "after a block falls into a wormhole
you gain 63 energy",
+ description: "after a block falls into a wormhole
you gain 63 energy",
isFieldTech: true,
maxCount: 1,
count: 0,
@@ -5191,7 +5118,7 @@
},
{
name: "transdimensional spores",
- description: "when blocks fall into a wormhole
higher dimension spores are summoned",
+ description: "when blocks fall into a wormhole
higher dimension spores are summoned",
isFieldTech: true,
maxCount: 1,
count: 0,
@@ -5939,7 +5866,7 @@
},
{
name: "energy to mass conversion",
- description: "convert your energy into blocks",
+ description: "convert your energy into blocks",
maxCount: 9,
count: 0,
frequency: 0,
@@ -6669,7 +6596,6 @@
researchHaste: null,
isMineDrop: null,
isRerollBots: null,
- isRailTimeSlow: null,
isNailBotUpgrade: null,
isFoamBotUpgrade: null,
isLaserBotUpgrade: null,
@@ -6724,10 +6650,6 @@
isSpeedHarm: null,
isSpeedDamage: null,
isTimeSkip: null,
- isPerpetualReroll: null,
- isPerpetualAmmo: null,
- isPerpetualHeal: null,
- isPerpetualStun: null,
isCancelDuplication: null,
cancelCount: null,
isCancelRerolls: null,
diff --git a/style.css b/style.css
index 76d4158..e860d63 100644
--- a/style.css
+++ b/style.css
@@ -620,6 +620,13 @@ summary {
font-weight: 100;
}
+.color-block {
+ background-color: rgba(0, 0, 0, 0.04);
+ border: 1px solid rgba(0, 0, 0, 0.5);
+ padding: 0.5px;
+ font-weight: 100;
+}
+
.color-j {
letter-spacing: 1px;
/* font-weight: 100; */
diff --git a/todo.txt b/todo.txt
index 8b0a66f..5d42399 100644
--- a/todo.txt
+++ b/todo.txt
@@ -1,6 +1,12 @@
******************************************************** NEXT PATCH ********************************************************
+"block" is now styled text
+blocking with a shield is now called deflecting
+added 100% block damage buffs to flywheel and inelastic collision
+restitution now spawns 2 power ups (up from 1)
+
+about 75 edits to tech requirement text
******************************************************** BUGS ********************************************************
@@ -46,6 +52,10 @@ is there a way to check if the player is stuck inside the map or block
******************************************************** TODO ********************************************************
+full block build works for every level except final boss
+
+block custom css style?
+
tech: pilot wave is projected from the player, not the mouse
maybe also make field move slower? (adjust smoothing function)
less energy drain?