diff --git a/.DS_Store b/.DS_Store
index ac0e627..2d62762 100644
Binary files a/.DS_Store and b/.DS_Store differ
diff --git a/js/level.js b/js/level.js
index 0c4abe0..7581318 100644
--- a/js/level.js
+++ b/js/level.js
@@ -20,7 +20,7 @@ const level = {
// b.giveGuns("drones")
// b.giveGuns("nail gun")
// b.giveGuns("harpoon")
- // tech.giveTech("needle gun")
+ // tech.giveTech("brainstorming")
// tech.giveTech("nanowires")
// tech.giveTech("relativistic momentum")
// for (let i = 0; i < 2; i++) tech.giveTech("refractory metal")
@@ -2344,8 +2344,8 @@ const level = {
// spawn.launcherBoss(3200, -500)
// spawn.laserTargetingBoss(1700, -500)
- spawn.powerUpBoss(3200, -500)
- spawn.powerUpBossBaby(3200, -500)
+ // spawn.powerUpBoss(3200, -500)
+ // spawn.powerUpBossBaby(3200, -500)
// spawn.snakeBoss(1700, -500)
// spawn.streamBoss(3200, -500)
// spawn.pulsarBoss(1700, -500)
@@ -2367,7 +2367,7 @@ const level = {
// for (let i = 0; i < 10; ++i) spawn.bodyRect(1600 + 5, -500, 30, 40);
// for (let i = 0; i < 5; i++) spawn.focuser(1900, -500)
- spawn.pulsar(1900, -500)
+ // spawn.pulsar(1900, -500)
// spawn.shield(mob[mob.length - 1], 1900, -500, 1);
// mob[mob.length - 1].isShielded = true
// spawn.nodeGroup(1200, 0, "grenadier")
diff --git a/js/powerup.js b/js/powerup.js
index a4113cf..81fe330 100644
--- a/js/powerup.js
+++ b/js/powerup.js
@@ -734,7 +734,28 @@ const powerUps = {
}
}
+ if (tech.isBrainstorm && !tech.isBrainstormActive && !simulation.isChoosing) {
+ tech.isBrainstormActive = true
+ let count = 0
+ requestAnimationFrame(cycle);
+ function cycle() {
+ count++
+ if (count < 600 && simulation.isChoosing) {
+ if (!(count % tech.brainStormDelay)) {
+ powerUps.tech.effect();
+ document.getElementById("choose-grid").style.pointerEvents = "auto"; //turn off the normal 500ms delay
+ document.body.style.cursor = "auto";
+ document.getElementById("choose-grid").style.transitionDuration = "0s";
+ }
+ requestAnimationFrame(cycle);
+ } else {
+ tech.isBrainstormActive = false
+ }
+ }
+ }
+
+ //add in research button or pseudoscience button
if (tech.isJunkResearch && powerUps.research.currentRerollCount < 3) {
tech.junkResearchNumber = Math.floor(5 * Math.random())
text += `
`
@@ -747,8 +768,26 @@ const powerUps = {
text += ` ${tech.isResearchReality?"alternate reality": "research"}
`
}
+ // if (tech.isBrainstorm && tech.isBrainstormActive < 4) {
+ // setTimeout(() => {
+ // if (simulation.isChoosing) {
+ // tech.isBrainstormActive++
+ // powerUps.tech.effect();
+ // //turn off the normal 500ms delay
+ // document.getElementById("choose-grid").style.pointerEvents = "auto";
+ // document.body.style.cursor = "auto";
+ // document.getElementById("choose-grid").style.transitionDuration = "0s";
+ // } else {
+ // tech.isBrainstormActive = 0;
+ // }
+ // }, 1000);
+ // } else {
+ // tech.isBrainstormActive = 0;
+ // }
+
document.getElementById("choose-grid").innerHTML = text
powerUps.showDraft();
+
} else if (tech.isBanish) {
for (let i = 0, len = tech.tech.length; i < len; i++) {
if (tech.tech[i].name === "decoherence") powerUps.ejectTech(i)
diff --git a/js/spawn.js b/js/spawn.js
index 1d5bad2..a781905 100644
--- a/js/spawn.js
+++ b/js/spawn.js
@@ -1269,7 +1269,7 @@ const spawn = {
me.isBoss = true;
me.frictionAir = 0.01
me.seeAtDistance2 = 1000000;
- me.accelMag = 0.0005 * simulation.accelScale;
+ me.accelMag = 0.0002 + 0.0004 * simulation.accelScale;
Matter.Body.setDensity(me, 0.00035); //normal is 0.001
me.collisionFilter.mask = cat.bullet | cat.player //| cat.body
me.memory = Infinity;
@@ -1284,11 +1284,11 @@ const spawn = {
me.foundPlayer();
}
- me.damageReduction = 0.25 / (tech.isScaleMobsWithDuplication ? 1 + tech.duplicationChance() : 1)
- me.isInvulnerable = true
- me.startingDamageReduction = me.damageReduction
- me.damageReduction = 0
- me.invulnerabilityCountDown = 60 + simulation.difficulty * 2
+ me.damageReduction = 0.2 / (tech.isScaleMobsWithDuplication ? 1 + tech.duplicationChance() : 1)
+ // me.isInvulnerable = true
+ // me.startingDamageReduction = me.damageReduction
+ // me.damageReduction = 0
+ // me.invulnerabilityCountDown = 60 + simulation.difficulty * 2
me.onHit = function() { //run this function on hitting player
if (powerUps.ejectTech()) {
@@ -1310,22 +1310,22 @@ const spawn = {
for (let i = 0; i < powerUp.length; i++) powerUp[i].collisionFilter.mask = cat.map | cat.powerUp
};
me.do = function() {
- if (this.isInvulnerable) {
- if (this.invulnerabilityCountDown > 0) {
- this.invulnerabilityCountDown--
- ctx.beginPath();
- let vertices = this.vertices;
- ctx.moveTo(vertices[0].x, vertices[0].y);
- for (let j = 1; j < vertices.length; j++) ctx.lineTo(vertices[j].x, vertices[j].y);
- ctx.lineTo(vertices[0].x, vertices[0].y);
- ctx.lineWidth = 20;
- ctx.strokeStyle = "rgba(255,255,255,0.7)";
- ctx.stroke();
- } else {
- this.isInvulnerable = false
- this.damageReduction = this.startingDamageReduction
- }
- }
+ // if (this.isInvulnerable) {
+ // if (this.invulnerabilityCountDown > 0) {
+ // this.invulnerabilityCountDown--
+ // ctx.beginPath();
+ // let vertices = this.vertices;
+ // ctx.moveTo(vertices[0].x, vertices[0].y);
+ // for (let j = 1; j < vertices.length; j++) ctx.lineTo(vertices[j].x, vertices[j].y);
+ // ctx.lineTo(vertices[0].x, vertices[0].y);
+ // ctx.lineWidth = 20;
+ // ctx.strokeStyle = "rgba(255,255,255,0.7)";
+ // ctx.stroke();
+ // } else {
+ // this.isInvulnerable = false
+ // this.damageReduction = this.startingDamageReduction
+ // }
+ // }
this.stroke = `hsl(0,0%,${80 + 25 * Math.sin(simulation.cycle * 0.01)}%)`
//steal all power ups
for (let i = 0; i < Math.min(powerUp.length, this.vertices.length); i++) {
diff --git a/js/tech.js b/js/tech.js
index ff549b1..3562d29 100644
--- a/js/tech.js
+++ b/js/tech.js
@@ -2093,7 +2093,7 @@ const tech = {
requires: "not mass-energy",
effect() {
tech.isPiezo = true;
- if (simulation.isTextLogOpen) m.energy += 20.48;
+ // if (simulation.isTextLogOpen) m.energy += 20.48;
},
remove() {
tech.isPiezo = false;
@@ -2485,8 +2485,8 @@ const tech = {
description: "increase damage by 5%
for every 10 health below 100",
maxCount: 1,
count: 0,
- frequency: 2,
- frequencyDefault: 2,
+ frequency: 1,
+ frequencyDefault: 1,
allowed() {
return m.health < 0.6 || build.isExperimentSelection
},
@@ -2521,8 +2521,8 @@ const tech = {
description: "heal for 3% of damage done
take 10% more harm",
maxCount: 9,
count: 0,
- frequency: 2,
- frequencyDefault: 2,
+ frequency: 1,
+ frequencyDefault: 1,
isHealTech: true,
allowed() {
return !tech.isEnergyHealth
@@ -2789,12 +2789,12 @@ const tech = {
description: `researched or canceled tech won't reoccur
spawn ${powerUps.orb.research(9)}`,
maxCount: 1,
count: 0,
- frequency: 2,
- frequencyDefault: 2,
+ frequency: 1,
+ frequencyDefault: 1,
allowed() {
- return (powerUps.research.count > 2 || build.isExperimentSelection) && !tech.isSuperDeterminism
+ return !tech.isSuperDeterminism
},
- requires: "not determinism, at least 3 research",
+ requires: "not superdeterminism",
effect() {
tech.isBanish = true
for (let i = 0; i < 9; i++) powerUps.spawn(m.pos.x + 40 * (Math.random() - 0.5), m.pos.y + 40 * (Math.random() - 0.5), "research", false);
@@ -2815,9 +2815,9 @@ const tech = {
frequency: 2,
frequencyDefault: 2,
allowed() {
- return (powerUps.research.count > 2 || build.isExperimentSelection) && !tech.isSuperDeterminism
+ return (powerUps.research.count > 3 || build.isExperimentSelection) && !tech.isSuperDeterminism
},
- requires: "at least 3 research and not superdeterminism",
+ requires: "at least 4 research and not superdeterminism",
effect() {
tech.renormalization = true;
},
@@ -2873,9 +2873,9 @@ const tech = {
frequency: 2,
frequencyDefault: 2,
allowed() {
- return powerUps.research.count > 3 || build.isExperimentSelection
+ return powerUps.research.count > 5 || build.isExperimentSelection
},
- requires: "at least 4 research",
+ requires: "at least 6 research",
effect() {
tech.isRerollDamage = true;
},
@@ -2901,6 +2901,27 @@ const tech = {
tech.isJunkResearch = false;
}
},
+ {
+ name: "brainstorming",
+ description: "the tech choice menu randomizes
every 2 seconds for 10 seconds",
+ maxCount: 1,
+ count: 0,
+ frequency: 1,
+ frequencyDefault: 1,
+ allowed() {
+ return true
+ },
+ requires: "",
+ effect() {
+ tech.isBrainstorm = true
+ tech.isBrainstormActive = false
+ tech.brainStormDelay = 120
+ },
+ remove() {
+ tech.isBrainstorm = false
+ tech.isBrainstormActive = false
+ }
+ },
{
name: "Born rule",
description: "remove all current tech
spawn new tech to replace them",
@@ -3352,9 +3373,9 @@ const tech = {
isNonRefundable: true,
isBadRandomOption: true,
allowed() {
- return (tech.totalCount > 3) && !tech.isSuperDeterminism
+ return (tech.totalCount > 3) && tech.duplicationChance() > 0 && !tech.isSuperDeterminism
},
- requires: "NOT EXPERIMENT MODE, at least 4 tech, not superdeterminism",
+ requires: "NOT EXPERIMENT MODE, some duplication, at least 4 tech, not superdeterminism",
effect: () => {
const removeTotal = tech.removeTech()
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");
@@ -3628,7 +3649,7 @@ const tech = {
frequency: 2,
frequencyDefault: 2,
allowed() {
- return (tech.isNeedles || tech.isNeedleShot) && !tech.isNeedleIce
+ return ((tech.haveGunCheck("nail gun") && tech.isNeedles) || (tech.isNeedleShot && tech.haveGunCheck("shotgun"))) && !tech.isNeedleIce
},
requires: "needle gun, needle-shot, not needle ice",
effect() {
@@ -7178,6 +7199,29 @@ const tech = {
// },
// remove() {}
// },
+ {
+ name: "brainstorm",
+ description: "the tech choice menu randomizes
every 0.5 seconds for 10 seconds",
+ maxCount: 1,
+ count: 0,
+ frequency: 0,
+ frequencyDefault: 0,
+ isExperimentHide: true,
+ isJunk: true,
+ allowed() {
+ return true
+ },
+ requires: "",
+ effect() {
+ tech.isBrainstorm = true
+ tech.isBrainstormActive = false
+ tech.brainStormDelay = 30
+ },
+ remove() {
+ tech.isBrainstorm = false
+ tech.isBrainstormActive = false
+ }
+ },
{
name: "catabolysis",
description: `set your maximum health to 1
double your current ammo 10 times`,
@@ -9116,5 +9160,8 @@ const tech = {
isWormholeMapIgnore: null,
isLessDamageReduction: null,
nailSize: null,
- needleTunnel: null
+ needleTunnel: null,
+ isBrainstorm: null,
+ isBrainstormActive: null,
+ brainStormDelay: null
}
\ No newline at end of file
diff --git a/todo.txt b/todo.txt
index bb7209d..437ca4a 100644
--- a/todo.txt
+++ b/todo.txt
@@ -1,15 +1,19 @@
******************************************************** NEXT PATCH **************************************************
-powerUpBoss & powerUpBossBaby go invulnerable for a second after they die
-powerUpBossBaby is even smaller, and a bit slower
-growBoss goes invulnerable for a second after one of it dies
-shieldingBoss makes shields that are 50% stronger, shieldingBoss has 40% lower health
+powerUpBoss no longer gets invulnerability after death
+ but powerUpBossBaby still has it
+
+tech: brainstorming - randomize your tech choice menu every 2s for 10s
+JUNK tech: brainstorm - randomize your tech choice menu every 0.5s for 10s
+
******************************************************** TODO ********************************************************
-tech: heal power ups spawn as research instead
- research heals for 10 health
- using research does 10 damage
+tech: basic research - heal power ups spawn as research power ups instead, and using research heals you (needs to be pretty low, like 3% health)
+tech: maintenance - heals no longer spawn, but using research heals you 100%
+
+pulsar mobs retarget too easily
+also they drift around too much
electric motors: increases movement speed and jump height, but jumping and moving costs energy
overwrite the key event listeners?
@@ -22,9 +26,6 @@ bug once: switching from shotgun to harpoon somehow set b.activeGun to not defi
quasarBoss: inverted pulsar boss that hits everything except where its aiming
-pulsar mobs retarget too easily
-also they drift around too much
-
intro map: diegeticly draw a mouse with field highlighted
also indicate space?
dynamically adjust drawing after picking up a gun
@@ -35,8 +36,8 @@ increase mass and movement speed at the same time
m.defaultMass = 4.5
m.definePlayerMass()
-tech selection menu choices randomize every second
- JUNK tech?
+tech selection menu choices randomize every 1 second
+ cycles for 10 cycles before it stops cycling
new late game level that is easier if you can: platform well, jump high, immune to slime, wormhole through walls, fly fast
climb vertically to avoid rising slime