diff --git a/.DS_Store b/.DS_Store
index ed82f45..c74069f 100644
Binary files a/.DS_Store and b/.DS_Store differ
diff --git a/js/bullet.js b/js/bullet.js
index ee19419..b59ca75 100644
--- a/js/bullet.js
+++ b/js/bullet.js
@@ -94,7 +94,7 @@ const b = {
}
},
outOfAmmo() { //triggers after firing when you have NO ammo
- simulation.makeTextLog(`${b.guns[b.activeGun].name}.ammo: 0`);
+ simulation.makeTextLog(`${b.guns[b.activeGun].name}.ammo: 0`);
m.fireCDcycle = m.cycle + 30; //fire cooldown
if (tech.isAmmoFromHealth && m.maxHealth > 0.01) {
tech.extraMaxHealth -= 0.01 //decrease max health
@@ -858,7 +858,9 @@ const b = {
b.explosion(this.position, this.explodeRad); //makes bullet do explosive damage at end
if (tech.fragments) b.targetedNail(this.position, tech.fragments * 6)
}
- bullet[me].beforeDmg = function() {};
+ bullet[me].beforeDmg = function() {
+ this.endCycle = 0; //bullet ends cycle after doing damage //this also triggers explosion
+ };
bullet[me].restitution = 0.4;
bullet[me].do = function() {
this.force.y += this.mass * 0.0025; //extra gravity for harder arcs
@@ -1829,7 +1831,13 @@ const b = {
},
beforeDmg(who) {
if (tech.wormSurviveDmg && who.alive) {
- this.endCycle = simulation.cycle + Math.floor((600 + Math.floor(Math.random() * 420)) * tech.isBulletsLastLonger); //bullet ends cycle resets
+ setTimeout(() => {
+ if (!who.alive) {
+ this.endCycle = simulation.cycle + Math.floor((600 + Math.floor(Math.random() * 420)) * tech.isBulletsLastLonger); //bullet ends cycle resets
+ } else {
+ this.endCycle = 0; //bullet ends cycle after doing damage
+ }
+ }, 1);
} else {
this.endCycle = 0; //bullet ends cycle after doing damage
}
@@ -3088,13 +3096,13 @@ const b = {
this.force = Vector.mult(Vector.normalise(Vector.sub(m.pos, this.position)), this.mass * 0.006)
} 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.cd < simulation.cycle && !(simulation.cycle % this.lookFrequency) && !m.isCloak) {
for (let i = 0, len = mob.length; i < len; i++) {
const dist2 = Vector.magnitudeSquared(Vector.sub(this.position, mob[i].position));
if (
- mob[i].alive && !mob[i].isBadTarget &&
- dist2 > 250000 &&
+ mob[i].alive &&
+ !mob[i].isBadTarget &&
+ dist2 > 40000 &&
Matter.Query.ray(map, this.position, mob[i].position).length === 0
) {
this.cd = simulation.cycle + this.delay;
@@ -3779,7 +3787,6 @@ const b = {
}) //position, velocity, damage
if (tech.isIceCrystals) {
bullet[bullet.length - 1].beforeDmg = function(who) {
- console.log(who)
mobs.statusSlow(who, 60)
if (tech.isNailRadiation) mobs.statusDoT(who, 1 * (tech.isFastRadiation ? 2.6 : 0.65), tech.isSlowRadiation ? 240 : (tech.isFastRadiation ? 30 : 120)) // one tick every 30 cycles
if (tech.isNailCrit && !who.shield && Vector.dot(Vector.normalise(Vector.sub(who.position, this.position)), Vector.normalise(this.velocity)) > 0.94) {
@@ -4579,19 +4586,20 @@ const b = {
const speed = 30
const velocity = { x: speed * Math.cos(m.angle), y: speed * Math.sin(m.angle) }
b.laserMine(m.pos, velocity)
+ m.fireCDcycle = m.cycle + Math.floor(65 * b.fireCDscale); // cool down
} else {
const pos = { x: m.pos.x + 30 * Math.cos(m.angle), y: m.pos.y + 30 * Math.sin(m.angle) }
let speed = 36
if (Matter.Query.point(map, pos).length > 0) speed = -2 //don't launch if mine will spawn inside map
b.mine(pos, { x: speed * Math.cos(m.angle), y: speed * Math.sin(m.angle) }, 0)
+ m.fireCDcycle = m.cycle + Math.floor(55 * b.fireCDscale); // cool down
}
- m.fireCDcycle = m.cycle + Math.floor(50 * b.fireCDscale); // cool down
} else {
const pos = { x: m.pos.x + 30 * Math.cos(m.angle), y: m.pos.y + 30 * Math.sin(m.angle) }
let speed = 23
if (Matter.Query.point(map, pos).length > 0) speed = -2 //don't launch if mine will spawn inside map
b.mine(pos, { x: speed * Math.cos(m.angle), y: speed * Math.sin(m.angle) }, 0)
- m.fireCDcycle = m.cycle + Math.floor(25 * b.fireCDscale); // cool down
+ m.fireCDcycle = m.cycle + Math.floor(35 * b.fireCDscale); // cool down
}
}
}, {
diff --git a/js/index.js b/js/index.js
index 1ef65f0..c2d3741 100644
--- a/js/index.js
+++ b/js/index.js
@@ -359,6 +359,7 @@ const build = {
// console.log(tech.tech[i].name, isAllowed, tech.tech[i].count, tech.haveGunCheck("nail gun"))
const isCount = tech.tech[i].count > 1 ? `(${tech.tech[i].count}x)` : "";
+ //
if (tech.tech[i].isFieldTech) {
techID.innerHTML = `
diff --git a/js/level.js b/js/level.js
index 6987d65..5c9cf7c 100644
--- a/js/level.js
+++ b/js/level.js
@@ -15,11 +15,11 @@ const level = {
// localSettings.levelsClearedLastGame = 10
// level.difficultyIncrease(30) //30 is near max on hard //60 is near max on why
// simulation.isHorizontalFlipped = true
- // b.giveGuns("grenades")
- // tech.giveTech("laser-mines")
// m.setField("metamaterial cloaking")
+ // b.giveGuns("spores")
+ // tech.giveTech("nematodes")
+ // tech.giveTech("necrophage")
// for (let i = 0; i < 3; i++) tech.giveTech("super sized")
- // tech.giveTech("irradiated nails")
// for (let i = 0; i < 9; i++) tech.giveTech("MIRV")
level.intro(); //starting level
@@ -98,7 +98,7 @@ const level = {
if (tech.isMACHO) spawn.MACHO()
for (let i = 0; i < tech.wimpCount; i++) {
spawn.WIMP()
- for (let j = 0, len = 1 + 5 * 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 j = 0, len = 5; 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.isFlipFlopLevelReset && !tech.isFlipFlopOn) {
@@ -117,7 +117,7 @@ const level = {
if (simulation.lookFreqScale > 0.2) simulation.lookFreqScale *= 0.98 //mob cycles between looks decreases each level
if (simulation.CDScale > 0.2) simulation.CDScale *= 0.97 //mob CD time decreases each level
}
- simulation.dmgScale = 0.4 * simulation.difficulty //damage done by mobs increases each level
+ simulation.dmgScale = 0.41 * simulation.difficulty //damage done by mobs increases each level
simulation.healScale = 1 / (1 + simulation.difficulty * 0.055) //a higher denominator makes for lower heals // m.health += heal * simulation.healScale;
},
difficultyDecrease(num = 1) { //used in easy mode for simulation.reset()
@@ -129,7 +129,7 @@ const level = {
if (simulation.CDScale < 5) simulation.CDScale /= 0.97 //mob CD time decreases each level
}
if (simulation.difficulty < 1) simulation.difficulty = 0;
- simulation.dmgScale = 0.4 * simulation.difficulty //damage done by mobs increases each level
+ simulation.dmgScale = 0.41 * simulation.difficulty //damage done by mobs increases each level
if (simulation.dmgScale < 0.1) simulation.dmgScale = 0.1;
simulation.healScale = 1 / (1 + simulation.difficulty * 0.055)
},
diff --git a/js/player.js b/js/player.js
index 895f481..daf94ab 100644
--- a/js/player.js
+++ b/js/player.js
@@ -1919,15 +1919,14 @@ const m = {
if (m.energy > m.maxEnergy - 0.02 && m.fieldCDcycle < m.cycle && !input.field && bullet.length < 150 && (m.cycle % 2)) {
if (tech.isSporeField) {
if (tech.isSporeWorm) {
- if (m.energy > 0.15) {
- m.energy -= 0.15
+ if (m.energy > 0.16) {
+ m.energy -= 0.16
b.worm({ x: m.pos.x + 35 * Math.cos(m.angle), y: m.pos.y + 35 * Math.sin(m.angle) })
const SPEED = 2 + 1 * Math.random();
Matter.Body.setVelocity(bullet[bullet.length - 1], {
x: SPEED * Math.cos(m.angle),
y: SPEED * Math.sin(m.angle)
});
-
}
} else {
for (let i = 0, len = Math.random() * 20; i < len; i++) {
@@ -1940,8 +1939,6 @@ const m = {
}
}
}
-
-
} else if (tech.isMissileField) {
m.energy -= 0.3;
b.missile({ x: m.pos.x, y: m.pos.y - 40 }, -Math.PI / 2 + 0.5 * (Math.random() - 0.5), 0, 1)
@@ -2204,7 +2201,7 @@ const m = {
ctx.globalCompositeOperation = "destination-in";
ctx.fill();
ctx.globalCompositeOperation = "source-over";
- // ctx.clip(); //seems to have a high performance cost
+ ctx.clip();
}
// const energy = Math.max(0.01, Math.min(m.energy, 1))
diff --git a/js/powerup.js b/js/powerup.js
index 853a1d6..bc9d96b 100644
--- a/js/powerup.js
+++ b/js/powerup.js
@@ -1,6 +1,91 @@
let powerUp = [];
const powerUps = {
+ orb: {
+ research(num = 1) {
+ switch (num) {
+ case 1:
+ return ` `
+ case 2:
+ return `
+
+
+ `
+ case 3:
+ return `
+
+
+
+ `
+ case 4:
+ return `
+
+
+
+
+ `
+ case 5:
+ return `
+
+
+
+
+
+ `
+ case 6:
+ return `
+
+
+
+
+
+
+ `
+ }
+ let text = ''
+ for (let i = 0; i < num; i++) {
+ text += ``
+ }
+ text += ' '
+ for (let i = 0; i < num; i++) {
+ text += ' '
+ }
+ return text
+ },
+ ammo(num = 1) {
+ switch (num) {
+ case 1:
+ return ``
+ }
+ let text = ''
+ for (let i = 0; i < num; i++) {
+ text += ``
+ }
+ text += ' '
+ for (let i = 0; i < num; i++) {
+ text += ' '
+ }
+ return text
+ },
+ heal(num = 1) {
+ switch (num) {
+ case 1:
+ return ``
+ }
+ let text = ''
+ for (let i = 0; i < num; i++) {
+ text += ``
+ }
+ text += ' '
+ for (let i = 0; i < num; i++) {
+ text += ' '
+ }
+ return text
+ },
+ tech(num = 1) {
+ return ``
+ }
+ },
totalPowerUps: 0, //used for tech that count power ups at the end of a level
lastTechIndex: null,
do() {},
@@ -176,7 +261,7 @@ const powerUps = {
}
if (tech.isCancelRerolls) {
for (let i = 0; i < 9; i++) {
- let spawnType = (m.health < 0.25 || tech.isEnergyNoAmmo) ? "heal" : "ammo"
+ let spawnType = ((m.health < 0.25 && !tech.isEnergyHealth) || tech.isEnergyNoAmmo) ? "heal" : "ammo"
if (Math.random() < 0.33) {
spawnType = "heal"
} else if (Math.random() < 0.5 && !tech.isSuperDeterminism) {
@@ -375,7 +460,7 @@ const powerUps = {
if (target.ammo !== Infinity) {
const ammoAdded = Math.ceil((0.7 * Math.random() + 0.7 * Math.random()) * target.ammoPack)
target.ammo += ammoAdded
- simulation.makeTextLog(`${target.name}.ammo += ${ammoAdded}`)
+ simulation.makeTextLog(`${target.name}.ammo += ${ammoAdded}`)
}
} else { //give ammo to all guns in inventory
for (let i = 0, len = b.inventory.length; i < len; i++) {
@@ -383,7 +468,7 @@ const powerUps = {
if (target.ammo !== Infinity) {
const ammoAdded = Math.ceil((0.5 * Math.random() + 0.4 * Math.random()) * target.ammoPack) //Math.ceil(Math.random() * target.ammoPack)
target.ammo += ammoAdded
- simulation.makeTextLog(`${target.name}.ammo += ${ammoAdded}`)
+ simulation.makeTextLog(`${target.name}.ammo += ${ammoAdded}`)
}
}
@@ -718,7 +803,7 @@ const powerUps = {
// if (ammo !== Infinity) {
// b.guns[ammoTarget].ammo += ammo;
// simulation.updateGunHUD();
- // simulation.makeTextLog(`${b.guns[ammoTarget].name}.ammo += ${ammo}`);
+ // simulation.makeTextLog(`${b.guns[ammoTarget].name}.ammo += ${ammo}`);
// }
// },
spawnRandomPowerUp(x, y) { //mostly used after mob dies, doesn't always return a power up
diff --git a/js/spawn.js b/js/spawn.js
index 2459581..b10716e 100644
--- a/js/spawn.js
+++ b/js/spawn.js
@@ -409,7 +409,7 @@ const spawn = {
// });
this.modeDo(); //this does different things based on the mode
this.checkStatus();
- this.cycle++; //switch modes÷
+ if (!m.isBodiesAsleep) this.cycle++; //switch modes÷ if time isn't paused
this.totalCycles++;
// if (!m.isBodiesAsleep) {
if (this.health > 0.25) {
@@ -481,9 +481,11 @@ const spawn = {
y: this.velocity.y + velocity.y
});
}
- const len = (this.totalCycles / 400 + simulation.difficulty / 2 - 30) / 15
- for (let i = 0; i < len; i++) {
- spawn.randomLevelBoss(3000 * (simulation.isHorizontalFlipped ? -1 : 1) + 2000 * (Math.random() - 0.5), -1100 + 200 * (Math.random() - 0.5))
+ if (!(this.cycle % 2 * this.spawnInterval) && !m.isBodiesAsleep && mob.length < 40) {
+ const len = (this.totalCycles / 600 + simulation.difficulty / 2 - 30) / 15
+ for (let i = 0; i < len; i++) {
+ spawn.randomLevelBoss(3000 * (simulation.isHorizontalFlipped ? -1 : 1) + 2000 * (Math.random() - 0.5), -1100 + 200 * (Math.random() - 0.5))
+ }
}
}
}
diff --git a/js/tech.js b/js/tech.js
index a5210ed..dcaea22 100644
--- a/js/tech.js
+++ b/js/tech.js
@@ -105,7 +105,7 @@
if (tech.isMetaAnalysis && tech.tech[index].isJunk) {
simulation.makeTextLog(`//tech: meta-analysis replaced junk tech with random tech`);
tech.giveTech('random')
- for (let i = 0; i < 5; i++) powerUps.spawn(m.pos.x + 40 * Math.random(), m.pos.y + 40 * Math.random(), "research");
+ for (let i = 0; i < 3; i++) powerUps.spawn(m.pos.x + 40 * Math.random(), m.pos.y + 40 * Math.random(), "research");
return
}
@@ -193,7 +193,7 @@
return dmg * tech.slowFire * tech.aimDamage
},
duplicationChance() {
- return (tech.isPowerUpsVanish ? 0.17 : 0) + (tech.isStimulatedEmission ? 0.2 : 0) + tech.cancelCount * 0.048 + tech.duplicateChance + m.duplicateChance + tech.wormDuplicate + (tech.isAnthropicTech && tech.isDeathAvoidedThisLevel ? 0.5 : 0)
+ return (tech.isPowerUpsVanish ? 0.15 : 0) + (tech.isStimulatedEmission ? 0.2 : 0) + tech.cancelCount * 0.047 + tech.duplicateChance + m.duplicateChance + tech.wormDuplicate + (tech.isAnthropicTech && tech.isDeathAvoidedThisLevel ? 0.5 : 0)
},
maxDuplicationEvent() {
if (tech.is100Duplicate && tech.duplicationChance() > 0.99) {
@@ -384,7 +384,7 @@
},
{
name: "ad hoc",
- description: "for every gun in your inventory spawn a
heal, research, field, ammo, or tech",
+ description: `for every gun in your inventory spawn a
${powerUps.orb.heal()}, ${powerUps.orb.research(1)}, field, ${powerUps.orb.ammo(1)}, or tech`,
maxCount: 1, //random power up
count: 0,
frequency: 1,
@@ -413,7 +413,7 @@
},
{
name: "logistics",
- description: "ammo power ups give 80% more ammo
but ammo is only added to your current gun",
+ description: `${powerUps.orb.ammo()} give 80% more ammo
but it's only added to your current gun`,
maxCount: 1,
count: 0,
frequency: 2,
@@ -431,7 +431,7 @@
},
{
name: "supply chain",
- description: "double your current ammo for all guns",
+ description: "double your current ammo for all guns",
maxCount: 9,
count: 0,
frequency: 2,
@@ -452,7 +452,7 @@
},
{
name: "catabolism",
- description: "firing while out of ammo spawns 4 ammo
and reduces your maximum health by 1",
+ description: `firing while out of ammo spawns ${powerUps.orb.ammo(4)}
and reduces your maximum health by 1`,
maxCount: 1,
count: 0,
frequency: 1,
@@ -470,7 +470,7 @@
},
{
name: "desublimated ammunition",
- description: "use 50% less ammo when crouching
+6 JUNK to the potential tech pool",
+ description: "every other crouched shot uses no ammo
+6 JUNK to the potential tech pool",
maxCount: 1,
count: 0,
frequency: 2,
@@ -591,7 +591,7 @@
},
{
name: "Newton's 1st law",
- description: "moving at high speeds reduces harm
by up to 66%",
+ description: "moving at high speeds
reduces harm by up to 66%",
maxCount: 1,
count: 0,
frequency: 1,
@@ -609,7 +609,7 @@
},
{
name: "Newton's 2nd law",
- description: "moving at high speeds increases damage
by up to 66%",
+ description: "moving at high speeds
increases damage by up to 66%",
maxCount: 1,
count: 0,
frequency: 1,
@@ -1424,7 +1424,7 @@
},
{
name: "bot fabrication",
- description: "anytime you collect 4 research
use them to build a random bot",
+ description: `anytime you collect ${powerUps.orb.research(4)}
use them to build a random bot`,
maxCount: 1,
count: 0,
frequency: 2,
@@ -1445,21 +1445,18 @@
},
{
name: "robotics",
- description: "use 1 research to spawn a random bot
quadruple the frequency of finding bot tech",
+ description: `spawn a random bot
quadruple the frequency of finding bot tech`,
maxCount: 1,
count: 0,
frequency: 1,
frequencyDefault: 1,
isBotTech: true,
allowed() {
- return (b.totalBots() > 1 && powerUps.research.count > 0) || build.isExperimentSelection
+ return b.totalBots() > 1 || build.isExperimentSelection
},
requires: "at least 2 bots",
effect: () => {
- if (powerUps.research.count > 0) {
- powerUps.research.changeRerolls(-1)
- b.randomBot()
- }
+ b.randomBot()
for (let i = 0, len = tech.tech.length; i < len; i++) {
if (tech.tech[i].isBotTech) tech.tech[i].frequency *= 4
}
@@ -1677,13 +1674,13 @@
},
{
name: "buckling",
- description: "if a block you threw kills a mob
spawn 1 heal, ammo, or research",
+ description: `if a block you threw kills a mob
spawn 1 ${powerUps.orb.heal()}, ${powerUps.orb.ammo()}, or ${powerUps.orb.research(1)}`,
maxCount: 1,
count: 0,
frequency: 3,
frequencyDefault: 3,
allowed() {
- return tech.throwChargeRate > 1 && m.fieldUpgrades[m.fieldMode].name === "pilot wave" && !tech.isTokamak
+ return tech.throwChargeRate > 1 && m.fieldUpgrades[m.fieldMode].name !== "pilot wave" && !tech.isTokamak
},
requires: "mass driver, not pilot wave not tokamak",
effect() {
@@ -2211,7 +2208,7 @@
},
{
name: "1st ionization energy",
- description: "each heal power up you collect
increases your maximum energy by 6",
+ description: `each ${powerUps.orb.heal()} you collect
increases your maximum energy by 6`,
maxCount: 1,
count: 0,
frequency: 2,
@@ -2292,7 +2289,7 @@
},
{
name: "exciton-lattice",
- description: `increase damage by 60%, but
ammo will no longer spawn`,
+ description: `increase damage by 60%, but
${powerUps.orb.ammo()} will no longer spawn`,
maxCount: 1,
count: 0,
frequency: 1,
@@ -2612,7 +2609,7 @@
},
{
name: "quenching",
- description: "over healing from heal power ups does harm
but it also increase your maximum health",
+ description: `over healing from ${powerUps.orb.heal()} does harm
but it also increase your maximum health`,
maxCount: 1,
count: 0,
frequency: 2,
@@ -2630,7 +2627,7 @@
},
{
name: "negative entropy",
- description: `at the start of each level
spawn a heal for every 26 missing health`,
+ description: `at the start of each level
spawn ${powerUps.orb.heal()} for every 26 missing health`,
maxCount: 1,
count: 0,
frequency: 1,
@@ -2649,7 +2646,7 @@
},
{
name: "adiabatic healing",
- description: "heal power ups are 100% more effective",
+ description: `${powerUps.orb.heal()} are 100% more effective`,
maxCount: 3,
count: 0,
frequency: 2,
@@ -2668,7 +2665,7 @@
},
{
name: "maintenance",
- description: "double the frequency of finding healing tech
spawn 11 heals",
+ description: `double the frequency of finding healing tech
spawn ${powerUps.orb.heal(11)}`,
maxCount: 1,
count: 0,
frequency: 1,
@@ -2695,7 +2692,7 @@
powerUps.research.changeRerolls(0)
}, 1000);
},
- description: "once per level, instead of dying
consume 1 research and spawn 5 heals",
+ description: `once per level, instead of dying
use ${powerUps.orb.research(1)} and spawn ${powerUps.orb.heal(5)}`,
maxCount: 1,
count: 0,
frequency: 2,
@@ -2797,7 +2794,7 @@
{
name: "many-worlds",
// description: "each level is an alternate reality, where you
find a tech at the start of each level",
- description: "on each new level use 1 research to enter an
alternate reality and spawn a tech power up",
+ description: `on each new level use ${powerUps.orb.research(1)} to enter an
alternate reality and spawn a tech power up`,
maxCount: 1,
count: 0,
frequency: 1,
@@ -2815,7 +2812,7 @@
},
{
name: "Ψ(t) collapse",
- description: "enter an alternate reality after you research
spawn 16 research",
+ description: `enter an alternate reality after you research
spawn ${powerUps.orb.research(16)}`,
maxCount: 1,
count: 0,
frequency: 1,
@@ -2834,7 +2831,7 @@
},
{
name: "decoherence",
- description: "researched or canceled tech won't reoccur
spawn 9 research",
+ description: `researched or canceled tech won't reoccur
spawn ${powerUps.orb.research(9)}`,
maxCount: 1,
count: 0,
frequency: 2,
@@ -2857,7 +2854,7 @@
},
{
name: "renormalization",
- description: "using a research for any purpose
has a 40% chance to spawn a research",
+ description: `using ${powerUps.orb.research(1)} for any purpose
has a 40% chance to spawn ${powerUps.orb.research(1)}`,
maxCount: 1,
count: 0,
frequency: 2,
@@ -2875,7 +2872,7 @@
},
{
name: "perturbation theory",
- description: "66% decreased delay after firing
when you have no research in your inventory",
+ description: `66% decreased delay after firing
when you have no ${powerUps.orb.research(1)} in your inventory`,
maxCount: 1,
count: 0,
frequency: 1,
@@ -2897,7 +2894,7 @@
},
{
name: "ansatz",
- description: "after choosing a field, tech, or gun
if you have no research spawn 2",
+ description: `after choosing a field, tech, or gun
spawn ${powerUps.orb.research(2)}if you have 0 ${powerUps.orb.research(1)} in your inventory`,
maxCount: 1,
count: 0,
frequency: 2,
@@ -2915,7 +2912,7 @@
},
{
name: "Bayesian statistics",
- description: "increase damage by 3.7%
for each research in your inventory",
+ description: `increase damage by 3.7%
for each ${powerUps.orb.research(1)} in your inventory`,
maxCount: 1,
count: 0,
frequency: 2,
@@ -2984,7 +2981,7 @@
},
{
name: "abiogenesis",
- description: "at the start of a level spawn a 2nd boss for
4 research or +49 JUNK to the tech pool",
+ description: `at the start of a level spawn a 2nd boss
use ${powerUps.orb.research(4)} or add 49 JUNK to the tech pool`,
maxCount: 1,
count: 0,
frequency: 2,
@@ -3002,7 +2999,7 @@
},
{
name: "bubble fusion",
- description: "after destroying a mob's natural shield
spawn 1-2 heals, ammo, or research",
+ description: `after destroying a mob's natural shield
spawn 1-2 ${powerUps.orb.heal()}, ${powerUps.orb.ammo()}, or ${powerUps.orb.research(1)}`,
maxCount: 1,
count: 0,
frequency: 1,
@@ -3020,7 +3017,7 @@
},
{
name: "meta-analysis",
- description: "if you choose a JUNK tech you instead get a
random normal tech and 5 research",
+ description: `if you choose a JUNK tech you instead get a
random normal tech and ${powerUps.orb.research(3)}`,
maxCount: 1,
count: 0,
frequency: 1,
@@ -3080,7 +3077,7 @@
},
{
name: "metastability",
- description: "17% chance to duplicate spawned power ups
duplicates explode with a 3 second half-life ",
+ description: "15% chance to duplicate spawned power ups
duplicates explode with a 3 second half-life ",
maxCount: 1,
count: 0,
frequency: 1,
@@ -3100,7 +3097,7 @@
},
{
name: "futures exchange",
- description: "clicking × to cancel a field, tech, or gun
adds 4.8% power up duplication chance",
+ description: "clicking × to cancel a field, tech, or gun
adds 4.7% power up duplication chance",
maxCount: 1,
count: 0,
frequency: 1,
@@ -3110,19 +3107,17 @@
},
requires: "below 100% duplication chance, not determinism",
effect() {
- // tech.cancelCount = 0
- tech.isCancelDuplication = true
+ tech.isCancelDuplication = true //search for tech.cancelCount to balance
powerUps.setDo(); //needed after adjusting duplication chance
},
remove() {
- // tech.cancelCount = 0
tech.isCancelDuplication = false
powerUps.setDo(); //needed after adjusting duplication chance
}
},
{
name: "commodities exchange",
- description: "clicking × to cancel a field, tech, or gun
spawns 9 heals, ammo, and research",
+ description: `clicking × to cancel a field, tech, or gun
spawns 9 ${powerUps.orb.heal()}, ${powerUps.orb.ammo()}, or ${powerUps.orb.research(1)}`,
maxCount: 1,
count: 0,
frequency: 1,
@@ -3176,7 +3171,7 @@
},
{
name: "apomixis",
- description: "use 11 research to spawn 8 bosses
immediately after reaching 100% duplication",
+ description: `immediately use ${powerUps.orb.research(11)} and if you
reach 100% duplication spawn 8 bosses`,
maxCount: 1,
count: 0,
frequency: 3,
@@ -3277,7 +3272,7 @@
},
{
name: "strange attractor",
- description: `use 2 research to spawn 1 tech
with double your duplication chance`,
+ description: `use ${powerUps.orb.research(2)} to spawn 1 tech
with double your duplication chance`,
maxCount: 1,
count: 0,
frequency: 1,
@@ -3349,7 +3344,7 @@
},
{
name: "backward induction",
- description: "use 2 research to choose all the unchosen
tech from your previous tech selection",
+ description: `use ${powerUps.orb.research(2)} to choose all the unchosen
tech from your previous tech selection`,
maxCount: 1,
count: 0,
frequency: 1,
@@ -3377,7 +3372,7 @@
},
{
name: "unified field theory",
- description: `spawn 6 research, and when paused
clicking the field box switches your field`,
+ description: `spawn ${powerUps.orb.research(6)}and when paused
clicking the field box switches your field`,
// description: `in the pause menu, change your field
by clicking on your field's box`,
maxCount: 1,
count: 0,
@@ -3465,7 +3460,7 @@
},
{
name: "superdeterminism",
- description: "spawn 5 tech
research, guns, and fields no longer spawn",
+ description: `spawn 5 tech
${powerUps.orb.research(1)}, guns, and fields no longer spawn`,
maxCount: 1,
count: 0,
frequency: 8,
@@ -3512,7 +3507,7 @@
},
{
name: "ergodicity",
- description: "reduce combat difficulty by 2 levels
heal power ups have no effect",
+ description: `reduce combat difficulty by 2 levels
${powerUps.orb.heal()} have no effect`,
maxCount: 1,
count: 0,
frequency: 1,
@@ -3591,7 +3586,7 @@
},
{
name: "needle gun",
- description: "nail gun fires 3 mob piercing needles
requires 3 times more ammo",
+ description: "nail gun fires 3 mob piercing needles
requires 3 times more bullets",
isGunTech: true,
maxCount: 1,
count: 0,
@@ -3869,7 +3864,7 @@
},
{
name: "shotgun spin-statistics",
- description: "immune to harm while firing the shotgun
shotgun ammo gives 50% less shots",
+ description: "immune to harm while firing the shotgun
shotgun has gives 50% fewer shots",
isGunTech: true,
maxCount: 1,
count: 0,
@@ -4665,7 +4660,7 @@
},
{
name: "reduced tolerances",
- description: "increase drone ammo/efficiency by 66%
reduce the average drone lifetime by 40%",
+ description: `increase drones per ${powerUps.orb.ammo()} or energy 66%
reduce the average drone lifetime by 40%`,
isGunTech: true,
maxCount: 3,
count: 0,
@@ -4714,7 +4709,7 @@
},
{
name: "drone repair",
- description: "broken drones repair if the drone gun is active
repairing has a 25% chance to use 1 ammo",
+ description: "broken drones repair if the drone gun is active
repairing has a 25% chance to use 1 drone",
isGunTech: true,
maxCount: 1,
count: 0,
@@ -4771,7 +4766,7 @@
},
{
name: "irradiated drones",
- description: "the space around drones is irradiated
reduce ammo/efficiency by 75%",
+ description: `the space around drones is irradiated
reduce drones per ${powerUps.orb.ammo()} or energy 75%`,
isGunTech: true,
maxCount: 1,
count: 0,
@@ -4941,7 +4936,7 @@
},
{
name: "foam fractionation",
- description: "foam gun bubbles are 100% larger
when you have below 300 ammo",
+ description: "foam gun bubbles are 100% larger
when you have below 300 foam",
isGunTech: true,
maxCount: 1,
count: 0,
@@ -5052,13 +5047,13 @@
requires: "laser, not pulse, diodes",
effect() {
tech.laserFieldDrain = 0.007 //base is 0.002
- tech.laserDamage = 0.45; //base is 0.15
+ tech.laserDamage = 0.48; //base is 0.16
tech.laserColor = "#83f"
tech.laserColorAlpha = "rgba(136, 51, 255,0.5)"
},
remove() {
tech.laserFieldDrain = 0.002;
- tech.laserDamage = 0.15; //used in check on pulse: tech.laserDamage === 0.15
+ tech.laserDamage = 0.16; //used in check on pulse: tech.laserDamage === 0.15
tech.laserColor = "#f00"
tech.laserColorAlpha = "rgba(255, 0, 0, 0.5)"
}
@@ -5267,7 +5262,8 @@
//**************************************************
{
name: "zero point energy",
- description: "use 2 research to
increase your maximum energy by 74",
+ description: `use ${powerUps.orb.research(2)}to increase your max energy by 74`,
+ // description: "use 2 research to
increase your maximum energy by 74",
isFieldTech: true,
maxCount: 1,
count: 0,
@@ -5431,7 +5427,8 @@
},
{
name: "tessellation",
- description: "use 4 research
reduce harm by 50%",
+ description: `use ${powerUps.orb.research(4)}to reduce harm by 50%`,
+ // description: "use 4 research
reduce harm by 50%",
isFieldTech: true,
maxCount: 1,
count: 0,
@@ -5530,7 +5527,7 @@
},
{
name: "bot manufacturing",
- description: "use nano-scale manufacturing and 2 research
to build 3 random bots",
+ description: `use nano-scale manufacturing and ${powerUps.orb.research(2)}
to build 3 random bots`,
isFieldTech: true,
maxCount: 1,
count: 0,
@@ -5556,7 +5553,7 @@
},
{
name: "bot prototypes",
- description: "use nano-scale and 3 research to build
2 random bots and upgrade all bots to that type",
+ description: `use ${powerUps.orb.research(3)}to build
2 random bots and upgrade all bots to that type`,
isFieldTech: true,
maxCount: 1,
count: 0,
@@ -5633,7 +5630,8 @@
},
{
name: "mycelium manufacturing",
- description: "use 3 research to repurpose nano-scale
excess energy used to grow spores",
+ description: `use ${powerUps.orb.research(3)}to repurpose nano-scale field
excess energy used to grow spores`,
+ // description: "use 3 research to repurpose nano-scale
excess energy used to grow spores",
isFieldTech: true,
maxCount: 1,
count: 0,
@@ -5658,7 +5656,8 @@
},
{
name: "missile manufacturing",
- description: "use 3 research to repurpose nano-scale
excess energy used to construct missiles",
+ description: `use ${powerUps.orb.research(3)}to repurpose nano-scale field
excess energy used to construct missiles`,
+ // description: "use 3 research to repurpose nano-scale
excess energy used to construct missiles",
isFieldTech: true,
maxCount: 1,
count: 0,
@@ -5683,7 +5682,8 @@
},
{
name: "ice IX manufacturing",
- description: "use 3 research to repurpose nano-scale
excess energy used to condense ice IX",
+ description: `use ${powerUps.orb.research(3)}to repurpose nano-scale field
excess energy used to condense ice IX`,
+ // description: "use 3 research to repurpose nano-scale
excess energy used to condense ice IX",
isFieldTech: true,
maxCount: 1,
count: 0,
@@ -5784,7 +5784,8 @@
},
{
name: "plasma jet",
- description: "use 1 research to
increase plasma torch's range by 50%",
+ description: `use ${powerUps.orb.research(1)} to increase plasma torch range 50%`,
+ // description: "use 1 research to
increase plasma torch's range by 50%",
isFieldTech: true,
maxCount: 3,
count: 0,
@@ -5864,7 +5865,7 @@
},
{
name: "Lorentz transformation",
- description: "use 3 research to increase your time rate
move, jump, and shoot 50% faster",
+ description: `use ${powerUps.orb.research(3)}to increase your time rate
move, jump, and shoot 50% faster`,
isFieldTech: true,
maxCount: 1,
count: 0,
@@ -5972,7 +5973,8 @@
},
{
name: "dynamical systems",
- description: "use 1 research
increase your damage by 35%",
+ description: `use ${powerUps.orb.research(1)}to increase your damage by 35%`,
+ // description: "use 1 research
increase your damage by 35%",
isFieldTech: true,
maxCount: 1,
count: 0,
@@ -6035,7 +6037,7 @@
},
{
name: "WIMPs",
- description: "at the end of each level spawn 3-9 research
and a harmful particle that slowly chases you",
+ description: `at the end of each level spawn ${powerUps.orb.research(5)}
and a harmful particle that slowly chases you`,
isFieldTech: true,
maxCount: 9,
count: 0,
@@ -6075,27 +6077,27 @@
},
{
name: "virtual particles",
- description: "use 3 research to exploit your wormhole for a
17% chance to duplicate spawned power ups",
+ description: `use ${powerUps.orb.research(4)}to exploit your wormhole for a
16% chance to duplicate spawned power ups`,
isFieldTech: true,
maxCount: 1,
count: 0,
frequency: 3,
frequencyDefault: 3,
allowed() {
- return m.fieldUpgrades[m.fieldMode].name === "wormhole" && (build.isExperimentSelection || powerUps.research.count > 2) && tech.duplicationChance() < 1
+ return m.fieldUpgrades[m.fieldMode].name === "wormhole" && (build.isExperimentSelection || powerUps.research.count > 3) && tech.duplicationChance() < 1
},
requires: "wormhole,below 100% duplication chance",
effect() {
- tech.wormDuplicate = 0.17
+ tech.wormDuplicate = 0.16
powerUps.setDo(); //needed after adjusting duplication chance
- for (let i = 0; i < 3; i++) {
+ for (let i = 0; i < 4; i++) {
if (powerUps.research.count > 0) powerUps.research.changeRerolls(-1)
}
},
remove() {
tech.wormDuplicate = 0
powerUps.setDo(); //needed after adjusting duplication chance
- if (this.count > 0) powerUps.research.changeRerolls(3)
+ if (this.count > 0) powerUps.research.changeRerolls(4)
}
},
{
@@ -6138,7 +6140,7 @@
},
{
name: "traversable geodesics",
- description: "your projectiles can traverse wormholes
spawn 2 guns and ammo",
+ description: `your projectiles can traverse wormholes
spawn 2 guns and ${powerUps.orb.ammo(2)}`,
isFieldTech: true,
maxCount: 1,
count: 0,
@@ -6474,7 +6476,7 @@
},
{
name: "hidden variable",
- description: "spawn 15 heal power ups
but hide your health bar",
+ description: `spawn ${powerUps.orb.heal(15)}
but hide your health bar`,
maxCount: 1,
count: 0,
frequency: 0,
@@ -7515,7 +7517,7 @@
},
{
name: "re-research",
- description: "eject all your research",
+ description: `eject all your ${powerUps.orb.research(1)}`,
maxCount: 9,
count: 0,
frequency: 0,
@@ -7534,7 +7536,7 @@
},
{
name: "quantum black hole",
- description: "use your energy and 4 research to spawn
inside the event horizon of a huge black hole",
+ description: `use your energy and ${powerUps.orb.research(4)} to spawn
inside the event horizon of a huge black hole`,
maxCount: 9,
count: 0,
frequency: 0,
@@ -7555,7 +7557,7 @@
},
{
name: "black hole cluster",
- description: "spawn 2 research
spawn 40 nearby black holes",
+ description: `spawn ${powerUps.orb.research(2)}
spawn 40 nearby black holes`,
maxCount: 9,
count: 0,
frequency: 0,
diff --git a/style.css b/style.css
index 49b57c8..63c241e 100644
--- a/style.css
+++ b/style.css
@@ -521,10 +521,7 @@ summary {
.color-symbol {
color: #fff;
}
-
-.color-gun {
- color: hsl(218, 100%, 70%);
-} */
+ */
@@ -569,6 +566,10 @@ summary {
letter-spacing: 1px;
}
+.color-ammo {
+ color: #356;
+}
+
.color-dup {
/* color: hsl(243, 100%, 38%); */
font-variant: small-caps;
@@ -708,6 +709,39 @@ summary {
margin-bottom: -7px;
}
+.research-circle {
+ width: 13px;
+ height: 13px;
+ border-radius: 50%;
+ display: inline-block;
+ margin-bottom: -2.5px;
+ background-color: #f7b;
+ border: 0.5px #fff solid;
+ opacity: 0.85;
+}
+
+.ammo-circle {
+ width: 11px;
+ height: 11px;
+ border-radius: 50%;
+ display: inline-block;
+ background-color: #578;
+ border: 0.5px #fff solid;
+ opacity: 0.95;
+ margin-bottom: -2px;
+}
+
+.heal-circle {
+ width: 14px;
+ height: 14px;
+ border-radius: 50%;
+ display: inline-block;
+ margin-bottom: -3px;
+ background-color: #0d9;
+ border: 0.5px #fff solid;
+ opacity: 0.85;
+}
+
.circle-grid-shadow {
width: 43px;
height: 43px;
diff --git a/todo.txt b/todo.txt
index 66d8c12..5e56c59 100644
--- a/todo.txt
+++ b/todo.txt
@@ -1,25 +1,24 @@
******************************************************** NEXT PATCH **************************************************
-tech: MIRV - now effects grenades and super balls in addition to missiles
- no change for super balls and missiles, but this is a new tech for grenades
+orbs replaces some power up text descriptions
-undetonated mines are returned at the end of a level
- removed tech: mine reclamation
- mine gun has 30% less ammo
- laser mines do 7% less damage
- booby trap now comes with 53 JUNK (up from 33) but it's mines can be returned for ammo
+player damage taken is increased by 1%
+finalBoss ramps up the mob spawns more slowly, making lower damage high survival builds more effective on the finalBoss
+5% laser damage increase
+15% mine fire rate reduction
-removed ctx.clip() from metamaterial cloaking field for performance reasons
- the graphics look a bit different now, maybe not as good, maybe it's just different
-
-iceIX bullets last 50% less time, but do 50% more damage and have 25% more thrust
- so it's more of a close range bullet
- ice-shot has 2 fewer bullets
+ctx.clip() is back for metamaterial cloaking field
+ it wasn't the source of the lag, firefox is just slow on my work computer
+tech: buckling was disallowed, but I fixed it so you can get the tech again
******************************************************** TODO ********************************************************
-tech MIRV applies to grenades
- maybe also merge with tech: super balls?, laser refraction...
+experiment and understand vibe more obvious
+ mostly in early game or first time players
+
+slow down throw speed for very small blocks a bit
+
+necrophage isn't working.....
work on necroBoss from TheShwarma
make spawned blocks in the direction of the player