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