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 *****************************************************