diff --git a/.DS_Store b/.DS_Store
index 906e7a9..f0113c0 100644
Binary files a/.DS_Store and b/.DS_Store differ
diff --git a/js/bullet.js b/js/bullet.js
index 98fd86f..183f54b 100644
--- a/js/bullet.js
+++ b/js/bullet.js
@@ -2457,19 +2457,16 @@ const b = {
this.force = Vector.mult(Vector.normalise(Vector.sub(m.pos, this.position)), this.mass * this.acceleration)
} else { //close to player
Matter.Body.setVelocity(this, Vector.add(Vector.mult(this.velocity, 0.90), Vector.mult(player.velocity, 0.17))); //add player's velocity
-
if (this.lastLookCycle < simulation.cycle && !m.isCloak) {
- this.lastLookCycle = simulation.cycle + (this.isUpgraded ? 13 : 80)
- let target
+ this.lastLookCycle = simulation.cycle + (this.isUpgraded ? 15 : 80)
for (let i = 0, len = mob.length; i < len; i++) {
const dist = Vector.magnitudeSquared(Vector.sub(this.position, mob[i].position));
if (dist < 3000000 && //1400*1400
Matter.Query.ray(map, this.position, mob[i].position).length === 0 &&
Matter.Query.ray(body, this.position, mob[i].position).length === 0 &&
!mob[i].isShielded) {
- target = Vector.add(mob[i].position, Vector.mult(mob[i].velocity, Math.sqrt(dist) / 60))
- const SPEED = 50
- const unit = Vector.normalise(Vector.sub(target, this.position))
+ const SPEED = 45
+ const unit = Vector.normalise(Vector.sub(Vector.add(mob[i].position, Vector.mult(mob[i].velocity, Math.sqrt(dist) / 60)), this.position))
b.nail(this.position, Vector.mult(unit, SPEED), 0.4)
this.force = Vector.mult(unit, -0.01 * this.mass)
break;
@@ -2577,7 +2574,7 @@ const b = {
const radius = 6 + 7 * Math.random()
const SPEED = 29 - radius * 0.5; //(m.crouch ? 32 : 20) - radius * 0.7;
const velocity = Vector.mult(Vector.normalise(Vector.sub(target, this.position)), SPEED)
- b.foam(this.position, velocity, radius + 8 * this.isUpgraded)
+ b.foam(this.position, velocity, radius + 7 * this.isUpgraded)
break;
}
}
@@ -2690,7 +2687,7 @@ const b = {
lookFrequency: 43 + Math.floor(7 * Math.random()) - 10 * tech.isBoomBotUpgrade,
acceleration: 0.005 * (1 + 0.5 * Math.random()),
attackAcceleration: 0.012 + 0.005 * tech.isBoomBotUpgrade,
- range: 500 * (1 + 0.1 * Math.random()) + 400 * tech.isBoomBotUpgrade,
+ range: 500 * (1 + 0.1 * Math.random()) + 300 * tech.isBoomBotUpgrade,
endCycle: Infinity,
classType: "bullet",
collisionFilter: {
diff --git a/js/index.js b/js/index.js
index 7884b4e..46fcccd 100644
--- a/js/index.js
+++ b/js/index.js
@@ -300,6 +300,7 @@ const build = {
if (!tech.tech[i].isExperimentHide) {
if (tech.tech[i].allowed() || isAllowed || tech.tech[i].count > 0) {
const isCount = tech.tech[i].count > 1 ? `(${tech.tech[i].count}x)` : "";
+
if (tech.tech[i].isFieldTech) {
techID.innerHTML = `
@@ -321,6 +322,8 @@ const build = {
} else if (tech.tech[i].isJunk) {
// text += ` ${tech.tech[i].name} ${isCount}
${tech.tech[i].description}
`
techID.innerHTML = ` ${tech.tech[i].name} ${isCount}
${tech.tech[i].description}`
+ } else if (tech.tech[i].isExperimentalMode) {
+ techID.innerHTML = `${tech.tech[i].description}`
} else {
techID.innerHTML = ` ${tech.tech[i].name} ${isCount}
${tech.tech[i].description}`
}
@@ -385,12 +388,14 @@ const build = {
for (let i = 0, len = tech.tech.length; i < len; i++) {
if (!tech.tech[i].isExperimentHide) {
- if (!tech.tech[i].allowed()) { // || tech.tech[i].name === "+1 cardinality") { //|| tech.tech[i].name === "leveraged investment"
- text += `${tech.tech[i].name}
requires: ${tech.tech[i].requires} `
- // } else if (tech.tech[i].count > 1) {
- // text += ` ${tech.tech[i].name} (${tech.tech[i].count}x)
${tech.tech[i].description}
`
+ if (tech.tech[i].allowed()) { // || tech.tech[i].name === "+1 cardinality") { //|| tech.tech[i].name === "leveraged investment"
+ if (tech.tech[i].isExperimentalMode) {
+ text += `${tech.tech[i].description}
`
+ } else {
+ text += ` ${tech.tech[i].description}
`
+ }
} else {
- text += ` ${tech.tech[i].description}
`
+ text += `${tech.tech[i].name}
requires: ${tech.tech[i].requires} `
}
}
}
diff --git a/js/level.js b/js/level.js
index 665b89f..dd19012 100644
--- a/js/level.js
+++ b/js/level.js
@@ -113,6 +113,7 @@ const level = {
if (tech.isSwitchReality) {
simulation.makeTextLog(`simulation.amplitude = ${Math.random()}`);
m.switchWorlds()
+ simulation.trails()
for (let i = 0; i < 2; i++) powerUps.spawn(m.pos.x + Math.random() * 10, m.pos.y + Math.random() * 10, "tech", false);
}
},
@@ -1098,7 +1099,8 @@ const level = {
// spawn.streamBoss(1600, -500)
// spawn.cellBossCulture(1600, -500)
// spawn.cellBossCulture(1600, -500)
- spawn.orbitalBoss(1600, -500)
+ // simulation.difficulty = 66
+ // spawn.orbitalBoss(1600, -500)
// spawn.beamer(1200, -500)
// spawn.shield(mob[mob.length - 1], 1800, -120, 1);
@@ -1436,62 +1438,7 @@ const level = {
spawn.wireHead();
}
} else {
- // const say = []
- // if (localSettings.runCount > 200) { //experienced
- // say.push(
- // "I've been here before...",
- // "How many times have I done this?",
- // )
- // } else if (localSettings.runCount < 20) { //new
- // say.push(
- // "Am I still alive?",
- // "And I'm back here again...",
- // "Is this another simulation?",
- // "I'm alive...",
- // "Last time was a simulation. Is this one a simulation too?",
- // )
- // }
- // if (simulation.difficultyMode < 4 && localSettings.levelsClearedLastGame > 10) { //too easy
- // say.push(
- // "That felt too easy.
Maybe I should increase the difficulty of the simulation.",
- // "That was fun, but maybe I should increase the difficulty of the simulation.",
- // "I should increase the difficulty of the simulation, that didn't feel realistic.",
- // )
- // } else if (simulation.difficultyMode > 3 && localSettings.levelsClearedLastGame > 10) { //great run on a hard or why
- // say.push(
- // "What do I do after I escape?",
- // "I'm almost ready to stop these simulations and actually escape.",
- // "I think I'm getting closer to something, but what?",
- // "I'm getting stronger.",
- // "What happens after I escape?",
- // "I found a good combination of technology last time."
- // )
- // } else { //resolve
- // say.push(
- // "I'll try some different techs this time.",
- // "I've got to escape.",
- // "I'll find a way out.",
- // "I keep forgetting that these are just simulated escapes."
- // )
- // }
- // simulation.makeTextLog(say[Math.floor(say.length * Math.random())], 1000)
-
- const swapPeriod = 150
- const len = 30
- for (let i = 0; i < len; i++) {
- setTimeout(function() {
- simulation.wipe = function() { //set wipe to have trails
- ctx.fillStyle = `rgba(221,221,221,${i*i*0.0005 +0.0025})`;
- ctx.fillRect(0, 0, canvas.width, canvas.height);
- }
- }, (i) * swapPeriod);
- }
-
- setTimeout(function() {
- simulation.wipe = function() { //set wipe to normal
- ctx.clearRect(0, 0, canvas.width, canvas.height);
- }
- }, len * swapPeriod);
+ simulation.trails()
}
}
powerUps.spawnStartingPowerUps(2300, -150);
diff --git a/js/player.js b/js/player.js
index 06bde88..c0ede58 100644
--- a/js/player.js
+++ b/js/player.js
@@ -310,7 +310,11 @@ const m = {
//remove all tech and count current tech total
let totalTech = 0;
for (let i = 0, len = tech.tech.length; i < len; i++) {
- if (!tech.tech[i].isNonRefundable && tech.tech[i].name !== "quantum immortality" && tech.tech[i].name !== "many-worlds") {
+ if (
+ !tech.tech[i].isNonRefundable &&
+ tech.tech[i].name !== "many-worlds" &&
+ tech.tech[i].name !== "perturbation theory"
+ ) {
totalTech += tech.tech[i].count
tech.tech[i].remove();
tech.tech[i].isLost = false
@@ -323,6 +327,11 @@ const m = {
tech.addLoreTechToPool();
tech.armorFromPowerUps = 0;
tech.totalCount = 0;
+ const randomBotCount = b.totalBots()
+ b.zeroBotCount()
+ //remove all bullets, respawn bots
+ for (let i = 0; i < bullet.length; ++i) Matter.World.remove(engine.world, bullet[i]);
+ bullet = [];
//randomize health
m.health = 0.7 + Math.random()
@@ -332,16 +341,11 @@ const m = {
//randomize field
m.setField(Math.ceil(Math.random() * (m.fieldUpgrades.length - 1)))
-
- //track how ammo/ ammoPack count
+ //track ammo/ ammoPack count
let ammoCount = 0
for (let i = 0, len = b.inventory.length; i < len; i++) {
if (b.guns[b.inventory[i]].ammo !== Infinity) ammoCount += b.guns[b.inventory[i]].ammo / b.guns[b.inventory[i]].ammoPack
}
-
- //remove all bullets
- for (let i = 0; i < bullet.length; ++i) Matter.World.remove(engine.world, bullet[i]);
- bullet = [];
//removes guns and ammo
b.inventory = [];
b.activeGun = null;
@@ -353,7 +357,7 @@ const m = {
//give random guns
for (let i = 0; i < totalGuns; i++) b.giveGuns()
- //randomize ammo based on ammo/ammopack count
+ //randomize ammo based on ammo/ammoPack count
for (let i = 0, len = b.inventory.length; i < len; i++) {
if (b.guns[b.inventory[i]].ammo !== Infinity) b.guns[b.inventory[i]].ammo = Math.max(0, Math.floor(ammoCount / b.inventory.length * b.guns[b.inventory[i]].ammoPack * (1.05 + 0.5 * (Math.random() - 0.5))))
}
@@ -364,18 +368,19 @@ const m = {
let options = [];
for (let i = 0, len = tech.tech.length; i < len; i++) {
if (tech.tech[i].count < tech.tech[i].maxCount &&
- !tech.tech[i].isNonRefundable &&
- tech.tech[i].name !== "quantum immortality" &&
- tech.tech[i].name !== "many-worlds" &&
- tech.tech[i].name !== "Born rule" &&
- tech.tech[i].name !== "determinism" &&
- tech.tech[i].allowed()
- ) options.push(i);
+ !tech.tech[i].isBadRandomOption &&
+ tech.tech[i].allowed() &&
+ (!tech.tech[i].isJunk || Math.random() < 0.25)) options.push(i);
+ // !tech.tech[i].isNonRefundable &&
+ // tech.tech[i].name !== "quantum immortality" &&
+ // tech.tech[i].name !== "many-worlds" &&
+ // tech.tech[i].name !== "perturbation theory" &&
}
//add a new tech from options pool
if (options.length > 0) tech.giveTech(options[Math.floor(Math.random() * options.length)])
}
-
+ b.respawnBots();
+ for (let i = 0; i < randomBotCount; i++) b.randomBot()
simulation.makeGunHUD(); //update gun HUD
simulation.updateTechHUD();
simulation.isTextLogOpen = true;
@@ -384,9 +389,9 @@ const m = {
if (tech.isImmortal) { //if player has the immortality buff, spawn on the same level with randomized damage
//remove immortality tech
- for (let i = 0; i < tech.tech.length; i++) {
- if (tech.tech[i].name === "quantum immortality") tech.removeTech(i)
- }
+ // for (let i = 0; i < tech.tech.length; i++) {
+ // if (tech.tech[i].name === "quantum immortality") tech.removeTech(i)
+ // }
simulation.wipe = function() { //set wipe to have trails
ctx.fillStyle = "rgba(255,255,255,0)";
@@ -483,7 +488,7 @@ const m = {
harmReduction() {
let dmg = 1
dmg *= m.fieldHarmReduction
-
+ if (tech.isImmortal) dmg *= 0.84
if (tech.isHarmReduceAfterKill) dmg *= (m.lastKillCycle + 300 > m.cycle) ? 0.33 : 1.33
if (tech.healthDrain) dmg *= 1 + 2.667 * tech.healthDrain //tech.healthDrain = 0.03 at one stack //cause more damage
if (tech.squirrelFx !== 1) dmg *= 1 + (tech.squirrelFx - 1) / 5 //cause more damage
diff --git a/js/powerup.js b/js/powerup.js
index cdb0839..92c7863 100644
--- a/js/powerup.js
+++ b/js/powerup.js
@@ -111,6 +111,11 @@ const powerUps = {
document.getElementById("tech-anthropic").innerHTML = `-${powerUps.research.count}`
}
if (tech.renormalization && Math.random() < 0.37 && amount < 0) powerUps.spawn(m.pos.x, m.pos.y, "research");
+ if (tech.isResearchReality && amount < 0) {
+ m.switchWorlds()
+ simulation.trails()
+ simulation.makeTextLog(`simulation.amplitude = ${Math.random()}`);
+ }
if (tech.isRerollHaste) {
if (powerUps.research.count === 0) {
tech.researchHaste = 0.66;
diff --git a/js/simulation.js b/js/simulation.js
index f13a1cc..9edb2ee 100644
--- a/js/simulation.js
+++ b/js/simulation.js
@@ -444,6 +444,24 @@ const simulation = {
restoreCamera() {
ctx.restore();
},
+ trails() {
+ const swapPeriod = 150
+ const len = 30
+ for (let i = 0; i < len; i++) {
+ setTimeout(function() {
+ simulation.wipe = function() { //set wipe to have trails
+ ctx.fillStyle = `rgba(221,221,221,${i*i*0.0005 +0.0025})`;
+ ctx.fillRect(0, 0, canvas.width, canvas.height);
+ }
+ }, (i) * swapPeriod);
+ }
+
+ setTimeout(function() {
+ simulation.wipe = function() { //set wipe to normal
+ ctx.clearRect(0, 0, canvas.width, canvas.height);
+ }
+ }, len * swapPeriod);
+ },
wipe() {
ctx.clearRect(0, 0, canvas.width, canvas.height);
},
diff --git a/js/spawn.js b/js/spawn.js
index 3a6c6ea..b6ba4b9 100644
--- a/js/spawn.js
+++ b/js/spawn.js
@@ -2726,7 +2726,7 @@ const spawn = {
me.seeAtDistance2 = 2000000;
me.accelMag = Math.floor(10 * (Math.random() + 4.5)) * 0.00001 * simulation.accelScale;
me.frictionAir = 0.005;
- me.accelMag = 0.00017 * simulation.accelScale;
+ me.accelMag = 0.00016 * simulation.accelScale;
me.memory = Infinity;
me.collisionFilter.mask = cat.player | cat.bullet
spawn.shield(me, x, y, 1);
diff --git a/js/tech.js b/js/tech.js
index 4c7c1f5..50b2896 100644
--- a/js/tech.js
+++ b/js/tech.js
@@ -768,7 +768,7 @@
},
{
name: "nail-bot upgrade",
- description: "convert all your permanent bots to nail-bots
500% increased nail-bot fire rate",
+ description: "convert all your bots to nail-bots
500% increased nail-bot fire rate",
maxCount: 1,
count: 0,
allowed() {
@@ -809,7 +809,7 @@
},
{
name: "foam-bot upgrade",
- description: "convert all your permanent bots to foam-bots
250% increased foam-bot size and fire rate",
+ description: "convert all your bots to foam-bots
250% increased foam size and fire rate",
maxCount: 1,
count: 0,
allowed() {
@@ -850,7 +850,7 @@
},
{
name: "boom-bot upgrade",
- description: "convert all your permanent bots to boom-bots
250% increased explosion damage and size",
+ description: "convert all your bots to boom-bots
250% increased explosion damage and size",
maxCount: 1,
count: 0,
allowed() {
@@ -891,7 +891,7 @@
},
{
name: "laser-bot upgrade",
- description: "convert all your permanent bots to laser-bots
400% increased laser-bot laser damage",
+ description: "convert all your bots to laser-bots
400% increased laser-bot laser damage",
maxCount: 1,
count: 0,
allowed() {
@@ -932,7 +932,7 @@
},
{
name: "orbital-bot upgrade",
- description: "convert all your permanent bots to orbital-bots
increase damage by 200% and radius by 30%",
+ description: "convert all your bots to orbital-bots
increase damage by 200% and radius by 30%",
maxCount: 1,
count: 0,
allowed() {
@@ -983,7 +983,7 @@
},
{
name: "dynamo-bot upgrade",
- description: "convert your permanent bots to dynamo-bots
dynamo-bots regen 24 energy per second",
+ description: "convert your bots to dynamo-bots
dynamo-bots regen 24 energy per second",
maxCount: 1,
count: 0,
allowed() {
@@ -1060,6 +1060,7 @@
count: 0,
isNonRefundable: true,
isExperimentHide: true,
+ isBadRandomOption: true,
allowed() {
return b.totalBots() > 3
},
@@ -1809,16 +1810,16 @@
},
{
name: "quantum immortality",
- description: "after dying, continue in an alternate reality
spawn 4 research",
+ description: "after dying, continue in an alternate reality
reduce harm by 16%", //spawn 4 research
maxCount: 1,
count: 0,
allowed() {
- return powerUps.research.count > 1 || build.isExperimentSelection
+ return !tech.isSwitchReality && !tech.isResearchReality
},
- requires: "at least 2 research",
+ requires: "not many-worlds, perturbation theory",
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);
+ // for (let i = 0; i < 4; i++) powerUps.spawn(m.pos.x + Math.random() * 10, m.pos.y + Math.random() * 10, "research", false);
},
remove() {
tech.isImmortal = false;
@@ -1826,13 +1827,13 @@
},
{
name: "many-worlds",
- description: "on each new level enter an alternate reality
find 2 tech power ups in that reality",
+ description: "each new level is an alternate reality
find 2 tech power ups in that reality",
maxCount: 1,
count: 0,
allowed() {
- return tech.isImmortal
+ return !tech.isImmortal && !tech.isResearchReality
},
- requires: "quantum immortality",
+ requires: "not quantum immortality, perturbation theory",
effect() {
tech.isSwitchReality = true;
},
@@ -1840,6 +1841,157 @@
tech.isSwitchReality = false;
}
},
+ {
+ name: "decoherence",
+ description: "enter an alternate reality after you research
spawn 9 research immediately",
+ maxCount: 1,
+ count: 0,
+ allowed() {
+ return !tech.isImmortal && !tech.isSwitchReality
+ },
+ requires: "not quantum immortality, many-worlds",
+ effect() {
+ tech.isResearchReality = true;
+ for (let i = 0; i < 9; i++) powerUps.spawn(m.pos.x + Math.random() * 10, m.pos.y + Math.random() * 10, "research", false);
+ },
+ remove() {
+ tech.isResearchReality = false;
+ }
+ },
+ {
+ name: "renormalization",
+ description: "using a research for any purpose
has a 37% chance to spawn a research",
+ maxCount: 1,
+ count: 0,
+ allowed() {
+ return (powerUps.research.count > 1 || build.isExperimentSelection) && !tech.isSuperDeterminism && !tech.isRerollHaste
+ },
+ requires: "not superdeterminism or Ψ(t) collapse
at least 2 research",
+ effect() {
+ tech.renormalization = true;
+ },
+ remove() {
+ tech.renormalization = false;
+ }
+ },
+ {
+ name: "erase",
+ description: "researched or canceled tech won't reoccur
spawn 5 research",
+ maxCount: 1,
+ count: 0,
+ allowed() {
+ return (powerUps.research.count > 2 || build.isExperimentSelection) && !tech.isDeterminism
+ },
+ requires: "not determinism, at least 3 research",
+ effect() {
+ tech.isBanish = true
+ for (let i = 0; i < 5; i++) powerUps.spawn(m.pos.x, m.pos.y, "research", false);
+ },
+ remove() {
+ tech.isBanish = false
+ powerUps.tech.banishLog = [] //reset banish log
+ }
+ },
+ {
+ name: "Ψ(t) collapse",
+ description: "66% decreased delay after firing
when you have no research in your inventory",
+ maxCount: 1,
+ count: 0,
+ allowed() {
+ return powerUps.research.count === 0 && !tech.manyWorlds
+ },
+ requires: "no research",
+ effect() {
+ tech.isRerollHaste = true;
+ tech.researchHaste = 0.33;
+ b.setFireCD();
+ },
+ remove() {
+ tech.isRerollHaste = false;
+ tech.researchHaste = 1;
+ b.setFireCD();
+ }
+ },
+ {
+ name: "ansatz",
+ description: "after choosing a field, tech, or gun
if you have no research spawn 2",
+ maxCount: 1,
+ count: 0,
+ allowed() {
+ return powerUps.research.count === 0 && !tech.isSuperDeterminism && !tech.isRerollHaste
+ },
+ requires: "not superdeterminism or Ψ(t) collapse
no research",
+ effect: () => {
+ tech.manyWorlds = true;
+ },
+ remove() {
+ tech.manyWorlds = false;
+ }
+ },
+ {
+ name: "Bayesian statistics",
+ description: "increase damage by 3.9%
for each research in your inventory",
+ maxCount: 1,
+ count: 0,
+ allowed() {
+ return powerUps.research.count > 4 || build.isExperimentSelection
+ },
+ requires: "at least 5 research",
+ effect() {
+ tech.isRerollDamage = true;
+ },
+ remove() {
+ tech.isRerollDamage = false;
+ }
+ },
+ {
+ name: "Born rule",
+ description: "remove all current tech
spawn new tech to replace them",
+ maxCount: 1,
+ count: 0,
+ // isNonRefundable: true,
+ isBadRandomOption: true,
+ isExperimentHide: true,
+ allowed() {
+ return (tech.totalCount > 6)
+ },
+ requires: "more than 6 tech",
+ effect: () => {
+ //remove active bullets //to get rid of bots
+ for (let i = 0; i < bullet.length; ++i) Matter.World.remove(engine.world, bullet[i]);
+ bullet = [];
+ let count = 0 //count tech
+ 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 -= 3 //remove the bonus tech
+ if (tech.isSuperDeterminism) count -= 2 //remove the bonus tech
+
+ tech.setupAllTech(); // remove all tech
+ tech.addLoreTechToPool();
+ for (let i = 0; i < count; i++) { // spawn new tech power ups
+ powerUps.spawn(m.pos.x, m.pos.y, "tech");
+ }
+ //have state is checked in m.death()
+ },
+ remove() {}
+ },
+ {
+ name: "perpetual research",
+ description: "find 1 research at the start of each level",
+ maxCount: 1,
+ count: 0,
+ allowed() {
+ return !tech.isSuperDeterminism && !tech.isPerpetualHeal && !tech.isPerpetualAmmo && !tech.isPerpetualStun
+ },
+ requires: "only 1 perpetual effect, not superdeterminism",
+ effect() {
+ tech.isPerpetualReroll = true
+ },
+ remove() {
+ tech.isPerpetualReroll = false
+ }
+ },
{
name: "bubble fusion",
description: "after destroying a mob's shield
spawn 1-2 heals, ammo, or research",
@@ -2133,6 +2285,7 @@
maxCount: 1,
count: 0,
isNonRefundable: true,
+ isBadRandomOption: true,
allowed() {
return !tech.isExtraChoice && !tech.isCancelDuplication && !tech.isCancelRerolls
},
@@ -2152,6 +2305,7 @@
maxCount: 1,
count: 0,
isNonRefundable: true,
+ isBadRandomOption: true,
allowed() {
return tech.isDeterminism && !tech.manyWorlds && !tech.isGunSwitchField
},
@@ -2166,139 +2320,6 @@
tech.isSuperDeterminism = false;
}
},
- {
- name: "Ψ(t) collapse",
- description: "66% decreased delay after firing
when you have no research in your inventory",
- maxCount: 1,
- count: 0,
- allowed() {
- return powerUps.research.count === 0 && !tech.manyWorlds
- },
- requires: "no research",
- effect() {
- tech.isRerollHaste = true;
- tech.researchHaste = 0.33;
- b.setFireCD();
- },
- remove() {
- tech.isRerollHaste = false;
- tech.researchHaste = 1;
- b.setFireCD();
- }
- },
- {
- name: "ansatz",
- description: "after choosing a field, tech, or gun
if you have no research spawn 2",
- maxCount: 1,
- count: 0,
- allowed() {
- return powerUps.research.count === 0 && !tech.isSuperDeterminism && !tech.isRerollHaste
- },
- requires: "not superdeterminism or Ψ(t) collapse
no research",
- effect: () => {
- tech.manyWorlds = true;
- },
- remove() {
- tech.manyWorlds = false;
- }
- },
- {
- name: "renormalization",
- description: "using a research for any purpose
has a 37% chance to spawn a research",
- maxCount: 1,
- count: 0,
- allowed() {
- return (powerUps.research.count > 1 || build.isExperimentSelection) && !tech.isSuperDeterminism && !tech.isRerollHaste
- },
- requires: "not superdeterminism or Ψ(t) collapse
at least 2 research",
- effect() {
- tech.renormalization = true;
- },
- remove() {
- tech.renormalization = false;
- }
- },
- {
- name: "erase",
- description: "researched or canceled tech won't reoccur
spawn 4 research",
- maxCount: 1,
- count: 0,
- allowed() {
- return (powerUps.research.count > 2 || build.isExperimentSelection) && !tech.isDeterminism
- },
- requires: "not determinism, at least 3 research",
- effect() {
- tech.isBanish = true
- for (let i = 0; i < 4; i++) powerUps.spawn(m.pos.x, m.pos.y, "research", false);
- },
- remove() {
- tech.isBanish = false
- powerUps.tech.banishLog = [] //reset banish log
- }
- },
- {
- name: "Bayesian statistics",
- description: "increase damage by 3.9%
for each research in your inventory",
- maxCount: 1,
- count: 0,
- allowed() {
- return powerUps.research.count > 4 || build.isExperimentSelection
- },
- requires: "at least 5 research",
- effect() {
- tech.isRerollDamage = true;
- },
- remove() {
- tech.isRerollDamage = false;
- }
- },
- {
- name: "Born rule",
- description: "remove all current tech
spawn new tech to replace them",
- maxCount: 1,
- count: 0,
- // isNonRefundable: true,
- isExperimentHide: true,
- allowed() {
- return (tech.totalCount > 6)
- },
- requires: "more than 6 tech",
- effect: () => {
- //remove active bullets //to get rid of bots
- for (let i = 0; i < bullet.length; ++i) Matter.World.remove(engine.world, bullet[i]);
- bullet = [];
- let count = 0 //count tech
- 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 -= 3 //remove the bonus tech
- if (tech.isSuperDeterminism) count -= 2 //remove the bonus tech
-
- tech.setupAllTech(); // remove all tech
- tech.addLoreTechToPool();
- for (let i = 0; i < count; i++) { // spawn new tech power ups
- powerUps.spawn(m.pos.x, m.pos.y, "tech");
- }
- //have state is checked in m.death()
- },
- remove() {}
- },
- {
- name: "perpetual research",
- description: "find 1 research at the start of each level",
- maxCount: 1,
- count: 0,
- allowed() {
- return !tech.isSuperDeterminism && !tech.isPerpetualHeal && !tech.isPerpetualAmmo && !tech.isPerpetualStun
- },
- requires: "only 1 perpetual effect, not superdeterminism",
- effect() {
- tech.isPerpetualReroll = true
- },
- remove() {
- tech.isPerpetualReroll = false
- }
- },
//**************************************************
//************************************************** gun
//************************************************** tech
@@ -3718,7 +3739,7 @@
},
{
name: "bot prototypes",
- description: "use nano-scale manufacturing to upgrade
all bots of a random type and build 2 of that bot",
+ description: "use nano-scale manufacturing to upgrade
all bots to a random type and build 2 of that bot",
isFieldTech: true,
maxCount: 1,
count: 0,
@@ -4052,7 +4073,7 @@
}
},
{
- name: "phase decoherence",
+ name: "boson composite",
description: "intangible to blocks and mobs while cloaked
passing through mobs drains your energy",
isFieldTech: true,
maxCount: 1,
@@ -4185,6 +4206,7 @@
count: 0,
isNonRefundable: true,
isExperimentHide: true,
+ isBadRandomOption: true,
allowed() {
return true
},
@@ -4202,6 +4224,7 @@
count: 0,
isNonRefundable: true,
isExperimentHide: true,
+ isBadRandomOption: true,
allowed() {
return !tech.isEnergyNoAmmo
},
@@ -4219,6 +4242,7 @@
count: 0,
isNonRefundable: true,
isExperimentHide: true,
+ isBadRandomOption: true,
allowed() {
return !tech.isSuperDeterminism
},
@@ -4236,6 +4260,7 @@
count: 0,
isNonRefundable: true,
isExperimentHide: true,
+ isBadRandomOption: true,
allowed() {
return !tech.isSuperDeterminism
},
@@ -4253,6 +4278,7 @@
count: 0,
isNonRefundable: true,
isExperimentHide: true,
+ isBadRandomOption: true,
allowed() {
return !tech.isSuperDeterminism
},
@@ -4265,12 +4291,14 @@
},
{
name: "ship",
- description: "experimental mode: fly around with no legs",
+ description: "experimental mode: fly around with no legs
aim by rotating with keyboard",
maxCount: 1,
count: 0,
isNonRefundable: true,
+ isBadRandomOption: true,
+ isExperimentalMode: true,
allowed() {
- return !m.isShipMode && m.fieldUpgrades[m.fieldMode].name !== "negative mass field" && build.isExperimentSelection
+ return build.isExperimentSelection && !m.isShipMode && m.fieldUpgrades[m.fieldMode].name !== "negative mass field"
},
requires: "",
effect() {
@@ -4278,6 +4306,26 @@
},
remove() {}
},
+ {
+ name: "quantum leap",
+ description: "experimental mode: every 20 seconds
become an alternate version of yourself",
+ maxCount: 1,
+ count: 0,
+ isNonRefundable: true,
+ isBadRandomOption: true,
+ isExperimentalMode: true,
+ allowed() {
+ return build.isExperimentSelection
+ },
+ requires: "",
+ effect() {
+ setInterval(() => {
+ m.switchWorlds()
+ simulation.trails()
+ }, 20000); //every 20 sections
+ },
+ remove() {}
+ },
],
addLoreTechToPool() { //adds lore tech to tech pool
if (!simulation.isCheating) {
@@ -4330,7 +4378,7 @@
// remove() {}
// },
{
- name: "sliders",
+ name: "quantum leap",
description: "become an alternate version of yourself
every 20 seconds",
maxCount: 1,
count: 0,
@@ -4345,6 +4393,7 @@
effect() {
setInterval(() => {
m.switchWorlds()
+ simulation.trails()
}, 20000); //every 30 sections
},
remove() {}
@@ -5306,5 +5355,6 @@
foamFutureFire: null,
isDamageAfterKill: null,
isHarmReduceAfterKill: null,
- isSwitchReality: null
+ isSwitchReality: null,
+ isResearchReality: null
}
\ No newline at end of file
diff --git a/todo.txt b/todo.txt
index e0d07ed..c3a93e5 100644
--- a/todo.txt
+++ b/todo.txt
@@ -1,14 +1,11 @@
******************************************************** NEXT PATCH ********************************************************
-many worlds renamed to ansatz
-new tech many-worlds: at the start of each new level switch realities
-
-removed tech: electroactive polymers - convert bots to the same type on weapon swap
-all bot upgrades convert current bots to the upgraded type
- only one bot upgrade allowed
+tech: decoherence - switch realities after you research, spawn 9 research power ups
******************************************************** BUGS ********************************************************
+ship mode can old exit a level in the top part of the exit
+
use the floor of portal sensor on the player? to unstuck player
(only once on my computer) once every 7 second check isn't running code
@@ -339,10 +336,6 @@ redblobgames.com/articles/visibility
https://github.com/Silverwolf90/2d-visibility/tree/master/src
could apply to explosions, neutron bomb, player LOS
-possible names for tech
- holonomy - parallel transport of a vector leads to movement (applies to curved space)
- Hypergolic - A hypergolic propellant combination used in a rocket engine is one whose components spontaneously ignite when they come into contact with each other.
-
have a mob apply a positive status effect on other mobs,
heal?
make it yellow
@@ -369,10 +362,11 @@ n-gon outreach ideas
******************************************************** LORE ********************************************************
-cool names for tech
- strange loop, perturbation theory
-
-voice singing with pitch?
+possible names for tech
+ strange loop
+ perturbation theory
+ holonomy - parallel transport of a vector leads to movement (applies to curved space)
+ hypergolic - A hypergolic propellant combination used in a rocket engine is one whose components spontaneously ignite when they come into contact with each other.
chapter 1: bot can hear audio and learns testing mode