diff --git a/.DS_Store b/.DS_Store index 1cb0958..49bafe2 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/js/player.js b/js/player.js index 47f05fa..69b1336 100644 --- a/js/player.js +++ b/js/player.js @@ -506,7 +506,7 @@ const m = { if (tech.isSlowFPS) dmg *= 0.8 // if (tech.isPiezo) dmg *= 0.85 if (tech.isHarmReduce && input.field && m.fieldCDcycle < m.cycle) dmg *= 0.4 - if (tech.isBotArmor) dmg *= 0.93 ** b.totalBots() + if (tech.isBotArmor) dmg *= 0.92 ** b.totalBots() if (tech.isHarmArmor && m.lastHarmCycle + 600 > m.cycle) dmg *= 0.33; if (tech.isNoFireDefense && m.cycle > m.fireCDcycle + 120) dmg *= 0.3 if (tech.energyRegen === 0) dmg *= 0.34 diff --git a/js/powerup.js b/js/powerup.js index d3f2b1a..f8f44d0 100644 --- a/js/powerup.js +++ b/js/powerup.js @@ -872,7 +872,7 @@ const powerUps = { randomPowerUpCounter: 0, spawnBossPowerUp(x, y) { //boss spawns field and gun tech upgrades if (level.levels[level.onLevel] !== "final") { - if (m.fieldMode === 0) { + if (m.fieldMode === 0 && !tech.isSuperDeterminism) { powerUps.spawn(x, y, "field") } else { powerUps.randomPowerUpCounter++; diff --git a/js/spawn.js b/js/spawn.js index cc91bfd..247a6a5 100644 --- a/js/spawn.js +++ b/js/spawn.js @@ -91,7 +91,9 @@ const spawn = { }, secondaryBossChance(x, y) { if (tech.isDuplicateBoss && Math.random() < 2 * tech.duplicationChance()) { + tech.isScaleMobsWithDuplication = true spawn.randomLevelBoss(x, y); + tech.isScaleMobsWithDuplication = false return true } else if (tech.isResearchBoss) { if (powerUps.research.count > 3) { @@ -736,7 +738,7 @@ const spawn = { const me = mob[mob.length - 1]; me.isBoss = true; Matter.Body.setDensity(me, 0.002); //normal density even though its a boss - me.damageReduction = 0.04; //extra reduction for a boss, because normal density + me.damageReduction = 0.04 / (tech.isScaleMobsWithDuplication ? 1 + tech.duplicationChance() : 1); //extra reduction for a boss, because normal density me.frictionAir = 0.01; me.accelMag = 0.0002; me.onDeath = function() { @@ -918,7 +920,7 @@ const spawn = { me.onDamage = function(dmg) { if (Math.random() < 0.33 * dmg * Math.sqrt(this.mass) && this.health > dmg) this.split(); } - me.damageReduction = 0.18 //me.damageReductionGoal + me.damageReduction = 0.18 / (tech.isScaleMobsWithDuplication ? 1 + tech.duplicationChance() : 1); //me.damageReductionGoal me.do = function() { // // this.armor(); if (!m.isBodiesAsleep) { @@ -991,7 +993,7 @@ const spawn = { me.onHit = function() { //run this function on hitting player this.explode(); }; - me.damageReduction = 0.22 + me.damageReduction = 0.22 / (tech.isScaleMobsWithDuplication ? 1 + tech.duplicationChance() : 1); me.doAwake = function() { if (!m.isBodiesAsleep) { // this.armor(); @@ -1109,7 +1111,7 @@ const spawn = { powerUps.spawnRandomPowerUp(this.position.x, this.position.y) // manual power up spawn to avoid spawning too many tech with "symbiosis" } } - me.damageReduction = 0.18 + me.damageReduction = 0.18 / (tech.isScaleMobsWithDuplication ? 1 + tech.duplicationChance() : 1) me.do = function() { // this.armor(); this.alwaysSeePlayer(); @@ -1137,7 +1139,6 @@ const spawn = { mobs.spawn(x, y, vertices, radius, "transparent"); let me = mob[mob.length - 1]; me.isBoss = true; - me.frictionAir = 0.01 me.seeAtDistance2 = 1000000; me.accelMag = 0.0005 * simulation.accelScale; @@ -1171,7 +1172,7 @@ const spawn = { } for (let i = 0; i < powerUp.length; i++) powerUp[i].collisionFilter.mask = cat.map | cat.powerUp }; - me.damageReduction = 0.25 + me.damageReduction = 0.25 / (tech.isScaleMobsWithDuplication ? 1 + tech.duplicationChance() : 1) me.do = function() { // this.armor(); this.stroke = `hsl(0,0%,${80+25*Math.sin(simulation.cycle*0.01)}%)` @@ -1340,7 +1341,7 @@ const spawn = { powerUps.spawnBossPowerUp(this.position.x, this.position.y) }; me.lastSpeed = me.speed - me.damageReduction = 0.25 + me.damageReduction = 0.25 / (tech.isScaleMobsWithDuplication ? 1 + tech.duplicationChance() : 1) me.do = function() { // this.armor(); this.gravity(); @@ -1571,7 +1572,7 @@ const spawn = { // toMe(bullet, this.position, this.eventHorizon) } }; - me.damageReduction = 0.25 + me.damageReduction = 0.25 / (tech.isScaleMobsWithDuplication ? 1 + tech.duplicationChance() : 1) me.do = function() { // this.armor(); //keep it slow, to stop issues from explosion knock backs @@ -1695,7 +1696,7 @@ const spawn = { Composite.add(engine.world, cons[cons.length - 1]); cons[len2].length = 100 + 1.5 * radius; me.cons2 = cons[len2]; - me.damageReduction = 0.25 //normal is 1, most bosses have 0.25 + me.damageReduction = 0.25 / (tech.isScaleMobsWithDuplication ? 1 + tech.duplicationChance() : 1) //normal is 1, most bosses have 0.25 me.do = function() { // this.armor(); this.gravity(); @@ -1858,7 +1859,7 @@ const spawn = { me.onDeath = function() { powerUps.spawnBossPowerUp(this.position.x, this.position.y) }; - me.damageReduction = 0.35 // me.damageReductionGoal + me.damageReduction = 0.35 / (tech.isScaleMobsWithDuplication ? 1 + tech.duplicationChance() : 1) // me.damageReductionGoal me.awake = function() { // this.armor(); this.checkStatus(); @@ -2038,7 +2039,7 @@ const spawn = { me.onDeath = function() { powerUps.spawnBossPowerUp(this.position.x, this.position.y) }; - me.damageReduction = 0.25 + me.damageReduction = 0.25 / (tech.isScaleMobsWithDuplication ? 1 + tech.duplicationChance() : 1) me.do = function() { // this.armor(); this.seePlayerByLookingAt(); @@ -2174,7 +2175,7 @@ const spawn = { me.onDeath = function() { powerUps.spawnBossPowerUp(this.position.x, this.position.y) }; - me.damageReduction = 0.25 + me.damageReduction = 0.25 / (tech.isScaleMobsWithDuplication ? 1 + tech.duplicationChance() : 1) me.targetingCount = 0; me.targetingTime = 60 - Math.min(58, 3 * simulation.difficulty) me.do = function() { @@ -2334,7 +2335,7 @@ const spawn = { } powerUps.spawnBossPowerUp(this.position.x, this.position.y) } - me.damageReduction = 0.25 + me.damageReduction = 0.25 / (tech.isScaleMobsWithDuplication ? 1 + tech.duplicationChance() : 1) me.do = function() { // this.armor(); this.seePlayerByHistory() @@ -2400,7 +2401,7 @@ const spawn = { me.do = function() { if (player.speed > 5) this.do = this.fire //don't attack until player moves } - me.damageReduction = 0.25 + me.damageReduction = 0.25 / (tech.isScaleMobsWithDuplication ? 1 + tech.duplicationChance() : 1) me.fire = function() { // this.armor(); this.checkStatus(); @@ -2655,7 +2656,7 @@ const spawn = { // me.torque -= me.inertia * 0.002 spawn.spawnOrbitals(me, radius + 50 + 200 * Math.random()) Matter.Body.setDensity(me, 0.03); //extra dense //normal is 0.001 //makes effective life much larger - me.damageReduction = 0.25 + me.damageReduction = 0.25 / (tech.isScaleMobsWithDuplication ? 1 + tech.duplicationChance() : 1) me.isBoss = true; // spawn.shield(me, x, y, 1); //not working, not sure why @@ -2921,7 +2922,7 @@ const spawn = { mobs.spawn(x, y, sides, radius, "rgb(201,202,225)"); let me = mob[mob.length - 1]; Matter.Body.rotate(me, 2 * Math.PI * Math.random()); - me.accelMag = 0.00037 * Math.sqrt(simulation.accelScale); + me.accelMag = 0.00038 * Math.sqrt(simulation.accelScale); me.frictionAir = 0.01; me.swordRadiusMax = 450 + 7 * simulation.difficulty; me.laserAngle = 0; @@ -2929,7 +2930,7 @@ const spawn = { spawn.shield(me, x, y, 1); Matter.Body.setDensity(me, 0.005); //extra dense //normal is 0.001 //makes effective life much larger - me.damageReduction = 0.12 + me.damageReduction = 0.11 / (tech.isScaleMobsWithDuplication ? 1 + tech.duplicationChance() : 1) me.isBoss = true; me.onDamage = function() {}; me.onDeath = function() { @@ -3206,13 +3207,13 @@ const spawn = { //draw if (!m.isBodiesAsleep) { if (this.distanceToPlayer2() < this.seeAtDistance2) { - if (this.alpha < 1) this.alpha += 0.003 * simulation.CDScale; //near player go solid + if (this.alpha < 1) this.alpha += 0.005 * simulation.CDScale; //near player go solid } else { - if (this.alpha > 0) this.alpha -= 0.03; ///away from player, hide + if (this.alpha > 0) this.alpha -= 0.05; ///away from player, hide } } if (this.alpha > 0) { - if (this.alpha > 0.9 && this.seePlayer.recall) { + if (this.alpha > 0.8 && this.seePlayer.recall) { this.healthBar(); if (!this.canTouchPlayer) { this.canTouchPlayer = true; @@ -3313,7 +3314,7 @@ const spawn = { me.onDeath = function() { powerUps.spawnBossPowerUp(this.position.x, this.position.y) }; - me.damageReduction = 0.2 + me.damageReduction = 0.2 / (tech.isScaleMobsWithDuplication ? 1 + tech.duplicationChance() : 1) me.do = function() { // this.armor(); this.seePlayerCheckByDistance(); @@ -3401,7 +3402,7 @@ const spawn = { // this.vertices = Matter.Vertices.hull(Matter.Vertices.clockwiseSort(this.vertices)) //helps collisions functions work better after vertex have been changed }; - me.damageReduction = 0.25 + me.damageReduction = 0.25 / (tech.isScaleMobsWithDuplication ? 1 + tech.duplicationChance() : 1) me.do = function() { // this.armor(); this.seePlayerByLookingAt(); @@ -3684,7 +3685,7 @@ const spawn = { // this.vertices = Matter.Vertices.hull(Matter.Vertices.clockwiseSort(this.vertices)) //helps collisions functions work better after vertex have been changed }; me.onDamage = function() {}; - me.damageReduction = 0.25 + me.damageReduction = 0.25 / (tech.isScaleMobsWithDuplication ? 1 + tech.duplicationChance() : 1) me.do = function() { // this.armor(); this.seePlayerCheck(); @@ -3749,7 +3750,7 @@ const spawn = { }); } }; - me.damageReduction = 0.25 + me.damageReduction = 0.25 / (tech.isScaleMobsWithDuplication ? 1 + tech.duplicationChance() : 1) me.do = function() { // this.armor(); if (this.grenadeLimiter > 1) this.grenadeLimiter-- @@ -3916,7 +3917,7 @@ const spawn = { me.onDamage = function() { this.cycle = 0 }; - me.damageReduction = 0.25 + me.damageReduction = 0.25 / (tech.isScaleMobsWithDuplication ? 1 + tech.duplicationChance() : 1) me.do = function() { // this.armor(); this.checkStatus(); @@ -3976,7 +3977,7 @@ const spawn = { // this.vertices = Matter.Vertices.hull(Matter.Vertices.clockwiseSort(this.vertices)) //helps collisions functions work better after vertex have been changed }; me.onDamage = function() {}; - me.damageReduction = 0.25 + me.damageReduction = 0.25 / (tech.isScaleMobsWithDuplication ? 1 + tech.duplicationChance() : 1) me.do = function() { // this.armor(); this.seePlayerCheck(); @@ -4195,7 +4196,7 @@ const spawn = { me.closestVertex1 = 0; // me.closestVertex2 = 1; me.cycle = 0 - me.damageReduction = 0.2 + me.damageReduction = 0.2 / (tech.isScaleMobsWithDuplication ? 1 + tech.duplicationChance() : 1) me.do = function() { // this.armor(); this.seePlayerByHistory() @@ -4309,7 +4310,7 @@ const spawn = { } } }; - me.damageReduction = 0.25 + me.damageReduction = 0.25 / (tech.isScaleMobsWithDuplication ? 1 + tech.duplicationChance() : 1) me.do = function() { // this.armor(); this.seePlayerByHistory() @@ -4415,7 +4416,7 @@ const spawn = { powerUps.spawnBossPowerUp(this.position.x, this.position.y) this.removeCons(); //remove constraint }; - me.damageReduction = 0.25 + me.damageReduction = 0.25 / (tech.isScaleMobsWithDuplication ? 1 + tech.duplicationChance() : 1) me.do = function() { // this.armor(); this.gravity(); @@ -4424,14 +4425,14 @@ const spawn = { this.attraction(); }; }, - shield(target, x, y, chance = Math.min(0.02 + simulation.difficulty * 0.005, 0.2), isExtraShield = false) { + shield(target, x, y, chance = Math.min(0.02 + simulation.difficulty * 0.005, 0.2) + tech.duplicationChance(), isExtraShield = false) { if (this.allowShields && Math.random() < chance) { mobs.spawn(x, y, 9, target.radius + 30, "rgba(220,220,255,0.9)"); let me = mob[mob.length - 1]; me.stroke = "rgb(220,220,255)"; Matter.Body.setDensity(me, 0.00001) //very low density to not mess with the original mob's motion me.shield = true; - me.damageReduction = 0.075 + me.damageReduction = 0.075 / (tech.isScaleMobsWithDuplication ? 1 + tech.duplicationChance() : 1) me.isUnblockable = true me.isExtraShield = isExtraShield //this prevents spamming with tech.isShieldAmmo me.collisionFilter.category = cat.mobShield @@ -4480,7 +4481,7 @@ const spawn = { Matter.Body.setDensity(me, 0.00001) //very low density to not mess with the original mob's motion me.frictionAir = 0; me.shield = true; - me.damageReduction = 0.075 + me.damageReduction = 0.075 / (tech.isScaleMobsWithDuplication ? 1 + tech.duplicationChance() : 1) me.collisionFilter.category = cat.mobShield me.collisionFilter.mask = cat.bullet; for (let i = 0; i < nodes; ++i) { @@ -4600,7 +4601,7 @@ const spawn = { me.onDeath = function() { powerUps.spawnBossPowerUp(this.position.x, this.position.y) }; - me.damageReduction = 0.25 + me.damageReduction = 0.25 / (tech.isScaleMobsWithDuplication ? 1 + tech.duplicationChance() : 1) me.do = function() { // this.armor(); this.seePlayerCheckByDistance(); diff --git a/js/tech.js b/js/tech.js index 0388f89..0896683 100644 --- a/js/tech.js +++ b/js/tech.js @@ -171,7 +171,7 @@ if (tech.isCloakingDamage) dmg *= 1.35 if (tech.isFlipFlopDamage && tech.isFlipFlopOn) dmg *= 1.5 if (tech.isAnthropicDamage && tech.isDeathAvoidedThisLevel) dmg *= 2.3703599 - if (tech.isDamageAfterKill) dmg *= (m.lastKillCycle + 300 > m.cycle) ? 2 : 0.66 + if (tech.isDamageAfterKill) dmg *= (m.lastKillCycle + 300 > m.cycle) ? 2 : 0.72 if (m.isSneakAttack && m.cycle > m.lastKillCycle + 240) dmg *= tech.sneakAttackDmg if (tech.isTechDamage) dmg *= 1.9 if (tech.isDupDamage) dmg *= 1 + Math.min(1, tech.duplicationChance()) @@ -190,20 +190,23 @@ if (tech.isOneGun && b.inventory.length < 2) dmg *= 1.1995 if (tech.isNoFireDamage && m.cycle > m.fireCDcycle + 120) dmg *= 2 if (tech.isSpeedDamage) dmg *= 1 + Math.min(0.66, player.speed * 0.0165) - if (tech.isBotDamage) dmg *= 1 + 0.06 * b.totalBots() + if (tech.isBotDamage) dmg *= 1 + 0.07 * b.totalBots() return dmg * tech.slowFire * tech.aimDamage }, duplicationChance() { return Math.max(0, (tech.isPowerUpsVanish ? 0.13 : 0) + (tech.isStimulatedEmission ? 0.17 : 0) + tech.cancelCount * 0.045 + tech.duplicateChance + m.duplicateChance + tech.wormDuplicate + tech.cloakDuplication + (tech.isAnthropicTech && tech.isDeathAvoidedThisLevel ? 0.5 : 0)) }, + isScaleMobsWithDuplication: false, maxDuplicationEvent() { if (tech.is100Duplicate && tech.duplicationChance() > 0.99) { tech.is100Duplicate = false const range = 500 + tech.isScaleMobsWithDuplication = true for (let i = 0, len = 8; i < len; i++) { const angle = 2 * Math.PI * i / len spawn.randomLevelBoss(m.pos.x + range * Math.cos(angle), m.pos.y + range * Math.sin(angle), spawn.nonCollideBossList); } + tech.isScaleMobsWithDuplication = false } }, setTechFrequency(name, frequency) { @@ -748,7 +751,7 @@ frequency: 2, frequencyDefault: 2, allowed() { - return m.fieldUpgrades[m.fieldMode].name === "molecular assembler" || tech.haveGunCheck("spores") || tech.haveGunCheck("drones") || tech.haveGunCheck("missiles") || tech.haveGunCheck("foam") || tech.haveGunCheck("matter wave") || tech.isNeutronBomb || tech.isIceField || tech.isIceShot || tech.relayIce || tech.blockingIce > 1 || tech.isWormShot || tech.foamBotCount > 1 + return m.fieldUpgrades[m.fieldMode].name === "molecular assembler" || tech.haveGunCheck("spores") || tech.haveGunCheck("drones") || tech.haveGunCheck("missiles") || tech.haveGunCheck("foam") || tech.haveGunCheck("matter wave") || tech.isNeutronBomb || tech.isIceField || tech.isIceShot || tech.relayIce || tech.isNeedleIce || tech.blockingIce > 1 || tech.isWormShot || tech.foamBotCount > 1 }, requires: "drones, spores, missiles, foam, matter wave, neutron bomb, ice IX", effect() { @@ -1535,7 +1538,7 @@ }, { name: "perimeter defense", - description: "reduce harm by 7%
for each of your permanent bots", + description: "reduce harm by 8%
for each of your permanent bots", maxCount: 1, count: 0, frequency: 2, @@ -1554,7 +1557,7 @@ }, { name: "network effect", - description: "increase damage by 6%
for each of your permanent bots", + description: "increase damage by 7%
for each of your permanent bots", maxCount: 1, count: 0, frequency: 2, @@ -1574,7 +1577,7 @@ { name: "ersatz bots", link: `ersatz bots`, - description: "double your current permanent bots
remove all of your current guns", + description: "double your current permanent bots
remove all guns in your inventory", maxCount: 1, count: 0, frequency: 2, @@ -1968,7 +1971,7 @@ frequency: 2, frequencyDefault: 2, allowed() { - return (tech.isIceCrystals || tech.isSporeFreeze || tech.isIceField || tech.isIceShot || tech.relayIce || tech.blockingIce > 1) && !tech.sporesOnDeath && !tech.isExplodeMob && !tech.botSpawner && !tech.isMobBlockFling && !tech.nailsDeathMob + return (tech.isIceCrystals || tech.isSporeFreeze || tech.isIceField || tech.isIceShot || tech.relayIce || tech.isNeedleIce || tech.blockingIce > 1) && !tech.sporesOnDeath && !tech.isExplodeMob && !tech.botSpawner && !tech.isMobBlockFling && !tech.nailsDeathMob }, requires: "a localized freeze effect, no other mob death tech", effect() { @@ -1986,7 +1989,7 @@ frequency: 2, frequencyDefault: 2, allowed() { - return tech.isIceField || tech.relayIce || tech.blockingIce || tech.iceIXOnDeath || tech.isIceShot + return tech.isIceField || tech.relayIce || tech.isNeedleIce || tech.blockingIce || tech.iceIXOnDeath || tech.isIceShot }, requires: "ice IX", effect() { @@ -2004,7 +2007,7 @@ frequency: 2, frequencyDefault: 2, allowed() { - return tech.isIceCrystals || tech.isSporeFreeze || tech.isIceField || tech.relayIce || tech.blockingIce > 1 || tech.iceIXOnDeath || tech.isIceShot + return tech.isIceCrystals || tech.isSporeFreeze || tech.isIceField || tech.relayIce || tech.isNeedleIce || tech.blockingIce > 1 || tech.iceIXOnDeath || tech.isIceShot }, requires: "a localized freeze effect", effect() { @@ -2022,7 +2025,7 @@ frequency: 2, frequencyDefault: 2, allowed() { - return tech.isStunField || tech.isExplosionStun || tech.isMineStun || tech.oneSuperBall || tech.isHarmFreeze || tech.isIceField || tech.relayIce || tech.isIceCrystals || tech.isSporeFreeze || tech.isAoESlow || tech.isFreezeMobs || tech.isCloakStun || tech.orbitBotCount > 1 || tech.isWormholeDamage || tech.blockingIce > 1 || tech.iceIXOnDeath || tech.isIceShot + return tech.isStunField || tech.isExplosionStun || tech.isMineStun || tech.oneSuperBall || tech.isHarmFreeze || tech.isIceField || tech.relayIce || tech.isNeedleIce || tech.isIceCrystals || tech.isSporeFreeze || tech.isAoESlow || tech.isFreezeMobs || tech.isCloakStun || tech.orbitBotCount > 1 || tech.isWormholeDamage || tech.blockingIce > 1 || tech.iceIXOnDeath || tech.isIceShot }, requires: "a freezing or stunning effect", effect() { @@ -2549,7 +2552,7 @@ }, { name: "dormancy", - description: "if a mob has died in the last 5 seconds
increase damage by 99% else decrease it by 33%", + description: "if a mob has died in the last 5 seconds
increase damage by 100% else decrease it by 28%", maxCount: 1, count: 0, frequency: 1, @@ -3229,7 +3232,7 @@ }, { name: "parthenogenesis", - description: "levels have a chance to spawn a 2nd boss
equal to double your duplication chance", + description: " bosses have a 2x chance to be duplicated, but their
health is increased by your duplication chance
", maxCount: 1, count: 0, frequency: 2, @@ -3247,27 +3250,21 @@ }, { name: "apomixis", - description: `immediately use ${powerUps.orb.research(11)} and if you
reach 100% duplication spawn 8 bosses`, + description: `when you reach 100% duplication
spawn 8 bosses with 100% more health`, maxCount: 1, count: 0, frequency: 3, frequencyDefault: 3, allowed() { - return tech.duplicationChance() > 0.6 && powerUps.research.count > 10 + return tech.duplicationChance() > 0.33 }, - requires: "duplication chance above 60%", + requires: "duplication chance above 33%", effect() { tech.is100Duplicate = true; tech.maxDuplicationEvent() - for (let i = 0; i < 11; i++) { - if (powerUps.research.count > 0) powerUps.research.changeRerolls(-1) - } }, remove() { - if (tech.is100Duplicate) { - tech.is100Duplicate = false; - if (this.count > 0) powerUps.research.changeRerolls(11) - } + tech.is100Duplicate = false; } }, // { @@ -3518,6 +3515,7 @@ frequency: 1, frequencyDefault: 1, isBadRandomOption: true, + // isNonRefundable: true, allowed() { return !tech.isExtraChoice && !tech.isCancelDuplication && !tech.isCancelRerolls }, @@ -3530,7 +3528,18 @@ remove() { if (tech.isDeterminism) { tech.isDeterminism = false; - for (let i = 0; i < 5; i++) powerUps.removeRandomTech() + for (let i = 0; i < 5; i++) { + const numberRemoved = powerUps.removeRandomTech() + if (numberRemoved === 0) { //if the player didn't remove a power up then remove 1 tech for the map + for (let i = 0; i < powerUp.length; i++) { + if (powerUp[i].name === "tech") { + Matter.Composite.remove(engine.world, powerUp[i]); + powerUp.splice(i, 1); + break; + } + } + } + } } } }, diff --git a/todo.txt b/todo.txt index 0ece240..b383e07 100644 --- a/todo.txt +++ b/todo.txt @@ -1,17 +1,16 @@ ******************************************************** NEXT PATCH ************************************************** -tech: needle ice - needles make 1-2 ice 9 after they impact a wall -needle shot gun fires 1 less needle -most harpoon tech are about 5% better -JUNK tech: negative friction - you speed up when you touch walls - -no-cloning theorem: 42% -> 38% dup chance -symbiosis: 2 tech -> 1-2 tech after a boss dies -quenching gives 10% less max health for over heal +perimeter defense and network effect each give 1% more bonus per bot (around an 18% increase for each tech) +extra bosses spawned from parthenogenesis and apomixis have health increased by your duplication chance + (if you have 50% duplication the extra boss have 50% more health) +apomixis no longer costs 8 research ******************************************************** TODO ******************************************************** +Plasma Burner: upgrade for plasma torch, basically just a jet engine. does high damage, but short range, mostly for player movement. + maybe reduce gravity to really low then apply a vector away from mouse direction + no passive energy regen, but regen energy after doing damage tech or just default? modify conservation of energy tech