diff --git a/js/level.js b/js/level.js
index 2cfcf9b..76ae11e 100644
--- a/js/level.js
+++ b/js/level.js
@@ -190,23 +190,23 @@ const level = {
difficultyIncrease(num = 1) {
for (let i = 0; i < num; i++) {
simulation.difficulty++
- m.dmgScale *= 0.91; //damage done by player decreases each level
+ m.dmgScale *= 0.905; //damage done by player decreases each level
if (simulation.accelScale < 6) simulation.accelScale *= 1.024 //mob acceleration increases each level
if (simulation.CDScale > 0.15) simulation.CDScale *= 0.964 //mob CD time decreases each level
}
- simulation.dmgScale = Math.max(0.1, 0.29 * simulation.difficulty) //damage done by mobs scales with total levels
+ simulation.dmgScale = Math.max(0.1, 0.285 * simulation.difficulty) //damage done by mobs scales with total levels
simulation.healScale = 1 / (1 + simulation.difficulty * 0.045) //a higher denominator makes for lower heals // m.health += heal * simulation.healScale;
// console.log(`CD = ${simulation.CDScale}`)
},
difficultyDecrease(num = 1) { //used in easy mode for simulation.reset()
for (let i = 0; i < num; i++) {
simulation.difficulty--
- m.dmgScale /= 0.91; //damage done by player decreases each level
+ m.dmgScale /= 0.905; //damage done by player decreases each level
if (simulation.accelScale > 1) simulation.accelScale /= 1.024 //mob acceleration increases each level
if (simulation.CDScale < 1) simulation.CDScale /= 0.964 //mob CD time decreases each level
}
if (simulation.difficulty < 1) simulation.difficulty = 0;
- simulation.dmgScale = Math.max(0.1, 0.29 * simulation.difficulty) //damage done by mobs scales with total levels
+ simulation.dmgScale = Math.max(0.1, 0.285 * simulation.difficulty) //damage done by mobs scales with total levels
simulation.healScale = 1 / (1 + simulation.difficulty * 0.045)
},
difficultyText() {
@@ -3836,7 +3836,7 @@ const level = {
}
}
}
- spawn.secondaryBossChance(-2300, -800)
+ // spawn.secondaryBossChance(-2300, -800)
}
} else {
doorIn.isClosing = false
@@ -3853,8 +3853,10 @@ const level = {
isFightOver = true
doorIn.isClosing = false
doorOut.isClosing = false
- powerUps.spawnBossPowerUp(-3600, -100)
- powerUps.spawn(-3650, -200, "tech")
+ // powerUps.spawnBossPowerUp(-3600, -100)
+ powerUps.spawn(-3650, -50, "tech")
+ powerUps.spawn(-3650, -150, "tech")
+ powerUps.spawn(-3650, -300, "tech")
// if (player.position.x < 2760 && player.position.x > 210) {}
}
}
@@ -3926,7 +3928,7 @@ const level = {
}
}
}
- spawn.secondaryBossChance(2200, -800)
+ // spawn.secondaryBossChance(2200, -800)
}
} else {
doorIn.isClosing = false
@@ -3943,8 +3945,10 @@ const level = {
isFightOver = true
doorIn.isClosing = false
doorOut.isClosing = false
- powerUps.spawnBossPowerUp(3600, -100)
- powerUps.spawn(3650, -200, "tech")
+ // powerUps.spawnBossPowerUp(3600, -100)
+ powerUps.spawn(3650, -50, "tech")
+ powerUps.spawn(3650, -150, "tech")
+ powerUps.spawn(3650, -300, "tech")
// if (player.position.x < 2760 && player.position.x > 210) {}
}
}
@@ -7604,8 +7608,6 @@ const level = {
});
Composite.add(engine.world, consBB[consBB.length - 1]);
-
-
spawn.mapRect(-600 + 300, -2000 * 0.75, 1900, 50); //3rd floor
spawn.mapRect(-600 + 2000 * 0.7, -2000 * 0.74, 50, 375); //center wall
spawn.bodyRect(-600 + 2000 * 0.7, -2000 * 0.5 - 106, 50, 106); //center block under wall
@@ -10783,7 +10785,7 @@ const level = {
}
anotherBoss = (x, y) => {
- if (tech.isDuplicateBoss && Math.random() < tech.duplicationChance()) {
+ if (tech.isDuplicateMobs && Math.random() < tech.duplicationChance()) {
tech.isScaleMobsWithDuplication = true
spawn.randomLevelBoss(x, y, ["historyBoss"]);
tech.isScaleMobsWithDuplication = false
@@ -13771,7 +13773,7 @@ const level = {
} //for dynamic stuff that updates while playing that is one Z layer above the player
const anotherBoss = (x, y) => {
- if (tech.isDuplicateBoss && Math.random() < tech.duplicationChance()) {
+ if (tech.isDuplicateMobs && Math.random() < tech.duplicationChance()) {
tech.isScaleMobsWithDuplication = true
spawn.historyBoss(x, y)
tech.isScaleMobsWithDuplication = false
diff --git a/js/powerup.js b/js/powerup.js
index 52d342c..cbc9b4d 100644
--- a/js/powerup.js
+++ b/js/powerup.js
@@ -1357,8 +1357,10 @@ const powerUps = {
powerUps.randomPowerUpCounter++;
powerUpChance(Math.max(level.levelsCleared, 10) * 0.1)
}
- powerUps.randomPowerUpCounter += 0.6;
- powerUpChance(Math.max(level.levelsCleared, 6) * 0.1)
+ if (!(simulation.difficulty > spawn.secondaryBossThreshold)) {
+ powerUps.randomPowerUpCounter += 0.6;
+ powerUpChance(Math.max(level.levelsCleared, 6) * 0.1)
+ }
function powerUpChance(chanceToFail) {
if (Math.random() * chanceToFail < powerUps.randomPowerUpCounter) {
diff --git a/js/spawn.js b/js/spawn.js
index b834826..c03b02d 100644
--- a/js/spawn.js
+++ b/js/spawn.js
@@ -52,7 +52,7 @@ const spawn = {
const pick = spawn.pickList[Math.floor(Math.random() * spawn.pickList.length)];
spawn[pick](x, y);
}
- if (tech.isDuplicateBoss && Math.random() < tech.duplicationChance()) {
+ if (tech.isDuplicateMobs && Math.random() < tech.duplicationChance()) {
const pick = spawn.pickList[Math.floor(Math.random() * spawn.pickList.length)];
spawn[pick](x, y);
}
@@ -67,7 +67,7 @@ const spawn = {
spawn[pick](x + Math.round((Math.random() - 0.5) * 20) + i * size * 2.5, y + Math.round((Math.random() - 0.5) * 20), size);
}
}
- if (tech.isDuplicateBoss && Math.random() < tech.duplicationChance()) {
+ if (tech.isDuplicateMobs && Math.random() < tech.duplicationChance()) {
for (let i = 0; i < num; ++i) {
const pick = spawn.pickList[Math.floor(Math.random() * spawn.pickList.length)];
spawn[pick](x + Math.round((Math.random() - 0.5) * 20) + i * size * 2.5, y + Math.round((Math.random() - 0.5) * 20), size);
@@ -109,23 +109,28 @@ const spawn = {
}
}
},
+ secondaryBossThreshold: 22,
secondaryBossChance(x, y) {
- if (tech.isDuplicateBoss && Math.random() < tech.duplicationChance()) {
- tech.isScaleMobsWithDuplication = true
+ // if (tech.isDuplicateMobs && Math.random() < tech.duplicationChance()) {
+ // tech.isScaleMobsWithDuplication = true
+ // spawn.randomLevelBoss(x, y);
+ // tech.isScaleMobsWithDuplication = false
+ // return true
+ // } else if (tech.isResearchBoss) {
+ // if (powerUps.research.count > 2) {
+ // powerUps.research.changeRerolls(-3)
+ // simulation.makeTextLog(`m.research -= 3
${powerUps.research.count}`)
+ // } else {
+ // tech.addJunkTechToPool(0.49)
+ // }
+ // spawn.randomLevelBoss(x, y);
+ // return true
+ // }
+ if (simulation.difficulty > spawn.secondaryBossThreshold) { //starts on hard mode level 6, level 12 on easy, level 4 on why?
spawn.randomLevelBoss(x, y);
- tech.isScaleMobsWithDuplication = false
- return true
- } else if (tech.isResearchBoss) {
- if (powerUps.research.count > 2) {
- powerUps.research.changeRerolls(-3)
- simulation.makeTextLog(`m.research -= 3
${powerUps.research.count}`)
- } else {
- tech.addJunkTechToPool(0.49)
- }
- spawn.randomLevelBoss(x, y);
- return true
+ } else {
+ return false
}
- return false
},
//mob templates *********************************************************************************************
//***********************************************************************************************************
diff --git a/js/tech.js b/js/tech.js
index 4c05f0f..ed3614e 100644
--- a/js/tech.js
+++ b/js/tech.js
@@ -260,7 +260,7 @@ const tech = {
return dmg
},
duplicationChance() {
- return Math.min(1, Math.max(0, (tech.isPowerUpsVanish ? 0.13 : 0) + (tech.isStimulatedEmission ? 0.17 : 0) + tech.duplication + tech.duplicateChance + 0.05 * tech.isExtraGunField + m.duplicateChance + tech.fieldDuplicate + tech.cloakDuplication + (tech.isAnthropicTech && tech.isDeathAvoidedThisLevel ? 0.5 : 0)))
+ return Math.min(1, Math.max(0, (tech.isPowerUpsVanish ? 0.13 : 0) + (tech.isStimulatedEmission ? 0.17 : 0) + tech.duplication + tech.duplicateChance + 0.05 * tech.isExtraGunField + m.duplicateChance + tech.fieldDuplicate + 0.08 * tech.isDuplicateMobs + tech.cloakDuplication + (tech.isAnthropicTech && tech.isDeathAvoidedThisLevel ? 0.5 : 0)))
},
isScaleMobsWithDuplication: false,
maxDuplicationEvent() {
@@ -3722,25 +3722,25 @@ const tech = {
tech.isTechDebt = false;
}
},
- {
- name: "abiogenesis",
- // description: `use ${powerUps.orb.research(4)}(or 49% JUNK to the tech pool if you can't) to add a 2nd boss to each level`,
- description: `as a level begins spawn a 2nd boss using ${powerUps.orb.research(3)}
(+49% JUNK to the tech pool if you can't pay)`,
- maxCount: 1,
- count: 0,
- frequency: 2,
- frequencyDefault: 2,
- allowed() {
- return (build.isExperimentSelection || powerUps.research.count > 2) && !tech.isDuplicateBoss
- },
- requires: "at least 3 research, not parthenogenesis",
- effect() {
- tech.isResearchBoss = true;
- },
- remove() {
- tech.isResearchBoss = false;
- }
- },
+ // {
+ // name: "abiogenesis",
+ // // description: `use ${powerUps.orb.research(4)}(or 49% JUNK to the tech pool if you can't) to add a 2nd boss to each level`,
+ // description: `as a level begins spawn a 2nd boss using ${powerUps.orb.research(3)}
(+49% JUNK to the tech pool if you can't pay)`,
+ // maxCount: 1,
+ // count: 0,
+ // frequency: 2,
+ // frequencyDefault: 2,
+ // allowed() {
+ // return (build.isExperimentSelection || powerUps.research.count > 2) && !tech.isDuplicateMobs
+ // },
+ // requires: "at least 3 research, not parthenogenesis",
+ // effect() {
+ // tech.isResearchBoss = true;
+ // },
+ // remove() {
+ // tech.isResearchBoss = false;
+ // }
+ // },
{
name: "meta-analysis",
description: `if you choose a JUNKtech you instead get a
random normal tech and spawn ${powerUps.orb.research(2)}`,
@@ -4189,20 +4189,21 @@ const tech = {
},
{
name: "parthenogenesis",
- description: "your duplication has a chance to
duplicate mobs and bosses",
+ description: "+8% chance to duplicate spawned power ups
duplication also duplicates mobs",
maxCount: 1,
count: 0,
frequency: 1,
frequencyDefault: 1,
allowed() {
- return tech.duplicationChance() > 0 && !tech.isResearchBoss
+ return tech.duplicationChance() > 0// && !tech.isResearchBoss
},
- requires: "some duplication chance, not abiogenesis",
+ requires: "some duplication chance",
effect() {
- tech.isDuplicateBoss = true;
+ tech.isDuplicateMobs = true;
+ powerUps.setPowerUpMode(); //needed after adjusting duplication chance
},
remove() {
- tech.isDuplicateBoss = false;
+ tech.isDuplicateMobs = false;
}
},
{
@@ -11602,7 +11603,7 @@ const tech = {
isPauseSwitchField: null,
isPauseEjectTech: null,
isShieldPierce: null,
- isDuplicateBoss: null,
+ isDuplicateMobs: null,
is100Duplicate: null,
isDynamoBotUpgrade: null,
isBlockPowerUps: null,
diff --git a/todo.txt b/todo.txt
index baabcab..19f18e7 100644
--- a/todo.txt
+++ b/todo.txt
@@ -1,10 +1,13 @@
******************************************************** NEXT PATCH **************************************************
-community map crimsonTowers by Richard0820
+on later levels spawn 2 bosses, but 1 power up each
+ starts at simulation.difficulty > 23 //on hard mode level 6, level 12 on easy, level 4 on why?
+ makes combat harder, but also means that you will always get at least 2 drops per level
+ you used to have a chance to only get 1 near the end of the game
+ I'm guessing this will lead to about 3 more total tech by the final boss
+ abiogenesis - removed
+ parthenogenesis - doesn't duplicate bosses anymore, +8% duplication
-new MACHO animation
-
-tech: dark star - MACHO is bigger and damages mobs
*********************************************************** TODO *****************************************************