From 1f471cf9414efab5e6aee88090c0dee78d51263c Mon Sep 17 00:00:00 2001 From: landgreen Date: Fri, 27 Aug 2021 06:01:57 -0700 Subject: [PATCH] orbs orbs replaces some power up text descriptions 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 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 --- .DS_Store | Bin 6148 -> 6148 bytes js/bullet.js | 26 ++++++--- js/index.js | 1 + js/level.js | 12 ++-- js/player.js | 9 +-- js/powerup.js | 93 ++++++++++++++++++++++++++++-- js/spawn.js | 10 ++-- js/tech.js | 154 +++++++++++++++++++++++++------------------------- style.css | 42 ++++++++++++-- todo.txt | 29 +++++----- 10 files changed, 252 insertions(+), 124 deletions(-) diff --git a/.DS_Store b/.DS_Store index ed82f45fc4c7bb10633fe57dd81c189f1a3eb7f4..c74069f270825b691193aecfeb2f648f62a781bf 100644 GIT binary patch delta 21 ccmZoMXffEJ#mr-mH+?% delta 21 ccmZoMXffEJ#muC1Z?X=vA7jJjYUWN607}IMrvLx| 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