diff --git a/.DS_Store b/.DS_Store index 904cd0a..ce924b8 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/js/bullet.js b/js/bullet.js index fefa9e2..a61e174 100644 --- a/js/bullet.js +++ b/js/bullet.js @@ -1211,7 +1211,7 @@ const b = { didExtruderDrain: false, canExtruderFire: true, extruder() { - const DRAIN = 0.0007 + m.fieldRegen + const DRAIN = 0.0008 + m.fieldRegen if (m.energy > DRAIN && b.canExtruderFire) { m.energy -= DRAIN if (m.energy < 0) { @@ -1230,7 +1230,7 @@ const b = { frictionAir: 0, isInHole: true, //this keeps the bullet from entering wormholes minDmgSpeed: 0, - dmg: b.dmgScale * 1.4, //damage also changes when you divide by mob.mass on in .do() + dmg: b.dmgScale * 1.8, //damage also changes when you divide by mob.mass on in .do() classType: "bullet", isBranch: false, restitution: 0, @@ -3403,7 +3403,7 @@ const b = { cd: 0, acceleration: 0.009, endCycle: Infinity, - drainThreshold: tech.isEnergyHealth ? 0.5 : 0.33, + drainThreshold: tech.isEnergyHealth ? 0.5 : 0.05, classType: "bullet", collisionFilter: { category: cat.bullet, @@ -3443,7 +3443,7 @@ const b = { const DIST = Vector.magnitude(sub); const unit = Vector.normalise(sub) if (DIST < tech.isPlasmaRange * 450 && m.energy > this.drainThreshold) { - m.energy -= 0.005; + m.energy -= 0.0003 + m.fieldRegen //0.004; //normal plasma field is 0.00008 + m.fieldRegen = 0.00108 // if (m.energy < 0) { // m.fieldCDcycle = m.cycle + 120; // m.energy = 0; @@ -3518,7 +3518,7 @@ const b = { y: best.y }; if (best.who.alive) { - const dmg = 0.6 * b.dmgScale; //********** SCALE DAMAGE HERE ********************* + const dmg = 0.65 * b.dmgScale; //********** SCALE DAMAGE HERE ********************* best.who.damage(dmg); best.who.locatePlayer(); //push mobs away diff --git a/js/level.js b/js/level.js index 628f13e..8102099 100644 --- a/js/level.js +++ b/js/level.js @@ -17,7 +17,7 @@ const level = { // tech.isFieldFree = true // m.setField("perfect diamagnetism") // b.giveGuns("drones") - // tech.giveTech("laser-bot") + // tech.giveTech("Meissner effect") // b.giveGuns("nail gun") // tech.giveTech("Lenz's law") // for (let i = 0; i < 9; i++) tech.giveTech("MIRV") @@ -2316,7 +2316,7 @@ const level = { // spawn.randomSmallMob(1300, -70); // spawn.randomMob(2650, -975, 0.8); // spawn.randomGroup(1700, -900, 0.4); - // if (simulation.difficulty > 3) spawn.randomLevelBoss(2200, -1300); + // if (simulation.difficulty > 1) spawn.randomLevelBoss(2200, -1300); powerUps.addResearchToLevel() //needs to run after mobs are spawned }, final() { @@ -3091,7 +3091,7 @@ const level = { spawn.randomMob(3600, 1725, 0.9); spawn.randomMob(4100, 1225, 0.9); spawn.randomMob(2825, 400, 0.9); - if (simulation.difficulty > 3) spawn.randomLevelBoss(6000, 2300, ["spiderBoss", "launcherBoss", "laserTargetingBoss", "streamBoss", "historyBoss", "orbitalBoss", "grenadierBoss"]); + if (simulation.difficulty > 1) spawn.randomLevelBoss(6000, 2300, ["spiderBoss", "launcherBoss", "laserTargetingBoss", "streamBoss", "historyBoss", "orbitalBoss", "grenadierBoss"]); powerUps.addResearchToLevel() //needs to run after mobs are spawned spawn.secondaryBossChance(7725, 2275) @@ -3266,7 +3266,7 @@ const level = { spawn.randomGroup(2700, -1600, 0.1); spawn.randomGroup(1600, -100, 0); spawn.randomGroup(5000, -3900, -0.3); - if (simulation.difficulty > 3) { + if (simulation.difficulty > 1) { if (Math.random() < 0.25) { spawn.randomLevelBoss(2800, -1400); } else if (Math.random() < 0.25) { @@ -3449,7 +3449,7 @@ const level = { spawn.randomGroup(600, -1575, 0); spawn.randomGroup(2225, -1325, 0.4); spawn.randomGroup(4900, -1200, 0); - if (simulation.difficulty > 3) spawn.randomLevelBoss(3200, -1900); + if (simulation.difficulty > 1) spawn.randomLevelBoss(3200, -1900); powerUps.addResearchToLevel() //needs to run after mobs are spawned spawn.secondaryBossChance(2175, -2425) @@ -3643,7 +3643,7 @@ const level = { spawn.randomMob(3575, -2425, 0.5); spawn.randomMob(3975, -3900, 0.5); spawn.randomMob(1725, 125, 0.5); - if (simulation.difficulty > 3) { + if (simulation.difficulty > 1) { if (Math.random() < 0.33) { spawn.randomLevelBoss(4250, -250); spawn.debris(-250, 50, 1650, 2); //16 debris per level @@ -3834,7 +3834,7 @@ const level = { spawn.randomMob(-100, -1700, -0.2); spawn.randomGroup(3700, -1500, 0.4); spawn.randomGroup(1700, -900, 0.4); - if (simulation.difficulty > 3) spawn.randomLevelBoss(2600, -2300); + if (simulation.difficulty > 1) spawn.randomLevelBoss(2600, -2300); powerUps.addResearchToLevel() //needs to run after mobs are spawned spawn.secondaryBossChance(3075, -2050) @@ -4076,7 +4076,7 @@ const level = { spawn.randomGroup(-3250, -2700, 0.2); spawn.randomGroup(-2450, -1100, 0); - if (simulation.difficulty > 3) spawn.randomLevelBoss(-2400, -2650); + if (simulation.difficulty > 1) spawn.randomLevelBoss(-2400, -2650); powerUps.addResearchToLevel() //needs to run after mobs are spawned spawn.secondaryBossChance(-1825, -1975) @@ -4386,7 +4386,7 @@ const level = { spawn.randomSmallMob(-2325, 800); spawn.randomSmallMob(-900, 825); - if (simulation.difficulty > 3) { + if (simulation.difficulty > 1) { if (Math.random() < 0.33) { spawn.randomLevelBoss(-800, -1300) } else { @@ -4615,7 +4615,7 @@ const level = { spawn.randomMob(950, -1150, -0.1); spawn.randomGroup(1800, -800, -0.2); spawn.randomGroup(4150, -1000, 0.6); - if (simulation.difficulty > 3) { + if (simulation.difficulty > 1) { if (Math.random() < 0.5) { spawn.tetherBoss(2850, -80, { x: 2500, y: -500 }) //chance to spawn a ring of exploding mobs around this boss @@ -4836,7 +4836,9 @@ const level = { spawn.randomGroup(2350, -850, 1); spawn.randomGroup(100, -450, 0.9); - if (simulation.difficulty > 3) spawn.randomLevelBoss(1850, -1400); + if (simulation.difficulty > 1) spawn.randomLevelBoss(1850, -1400); + spawn.secondaryBossChance(1850, -1400) + powerUps.addResearchToLevel() //needs to run after mobs are spawned }, basement() { // player made level by Francois 👑 from discord @@ -5063,22 +5065,22 @@ const level = { spawn.mapRect(2050, -1225, 75, 100); //Plateforme over acid // MOBS if (isLevelReversed === false) { ///Normal spawn - if (simulation.difficulty > 2) { + if (simulation.difficulty > 1) { if (Math.random() < 0.2) { // tether ball spawn.tetherBoss(7000, -3300, { x: 7300, y: -3300 }) if (simulation.difficulty > 4) spawn.nodeGroup(7000, -3300, "spawns", 8, 20, 105); - } else if (simulation.difficulty > 3) { + } else { spawn.randomLevelBoss(6100, -3600, ["shooterBoss", "launcherBoss", "laserTargetingBoss", "spiderBoss", "laserBoss", "pulsarBoss"]); } } } else { /// Reversed spawn - if (simulation.difficulty > 2) { + if (simulation.difficulty > 1) { if (Math.random() < 0.2) { // tether ball spawn.tetherBoss(2300, -1300, { x: 2300, y: -1750 }) if (simulation.difficulty > 4) spawn.nodeGroup(2350, -1300, "spawns", 8, 20, 105); - } else if (simulation.difficulty > 3) { + } else { spawn.randomLevelBoss(2300, -1400, ["shooterBoss", "launcherBoss", "laserTargetingBoss", "spiderBoss", "laserBoss", "snakeBoss", "pulsarBoss"]); } } @@ -5136,8 +5138,9 @@ const level = { spawn.mapRect(3300, 1075, 1500, 1800); //Mur droite salle trésor // tether ball spawn.tetherBoss(2330, 1850, { x: 2330, y: 1425 }) + spawn.secondaryBossChance(2330, 1850) //chance to spawn a ring of exploding mobs around this boss - if (simulation.difficulty > 4) spawn.nodeGroup(2330, 1850, "spawns", 8, 20, 105); + if (simulation.difficulty > 1) spawn.nodeGroup(2330, 1850, "spawns", 8, 20, 105); powerUps.chooseRandomPowerUp(3100, 1630); }, detours() { //by Francois from discord @@ -5419,6 +5422,7 @@ const level = { // if (simulation.difficulty > 4) spawn.nodeGroup(8000, 630, "spawns", 8, 20, 105); // } else { spawn.randomLevelBoss(8000, 630, ["shooterBoss", "launcherBoss", "laserTargetingBoss", "spiderBoss", "laserBoss", "bomberBoss", "orbitalBoss", "pulsarBoss"]); + spawn.secondaryBossChance(8000, 630) //find level boss index let me for (let i = 0, len = mob.length; i < len; i++) { @@ -5918,6 +5922,7 @@ const level = { spawn.randomGroup(630, -1300, -0.1); spawn.randomGroup(3450, -2880, -0.2) if (simulation.difficulty > 3) { + spawn.secondaryBossChance(3380, -1775) if (Math.random() < 0.16) { spawn.tetherBoss(3380, -1775, { x: 3775, y: -1775 }) if (simulation.difficulty > 4) spawn.nodeGroup(3380, -1775, "spawns", 8, 20, 105); //chance to spawn a ring of exploding mobs around this boss diff --git a/js/player.js b/js/player.js index 7584699..cdd48e9 100644 --- a/js/player.js +++ b/js/player.js @@ -1577,7 +1577,7 @@ const m = { }, { name: "perfect diamagnetism", - description: "attract power ups from far away
deflecting does not drain energy
deflecting has 90% less recoil", + description: "attract power ups from far away
deflecting does not drain energy
maintains functionality while inactive", // description: "attract power ups from far away
deflecting doesn't drain energy
thrown blocks have", // description: "gain energy when blocking
no recoil when blocking", effect: () => { @@ -1681,8 +1681,8 @@ const m = { } m.hold = function() { const wave = Math.sin(m.cycle * 0.022); - m.fieldRange = 190 + 12 * wave - m.fieldArc = 0.36 + 0.04 * wave //run calculateFieldThreshold after setting fieldArc, used for powerUp grab and mobPush with lookingAt(mob) + m.fieldRange = 160 + 12 * wave + 100 * tech.isBigField + m.fieldArc = 0.34 + 0.04 * wave + 0.065 * tech.isBigField //run calculateFieldThreshold after setting fieldArc, used for powerUp grab and mobPush with lookingAt(mob) m.calculateFieldThreshold(); if (m.isHolding) { m.drawHold(m.holdingTarget); @@ -1722,7 +1722,7 @@ const m = { m.pickUp(); } else { m.holdingTarget = null; //clears holding target (this is so you only pick up right after the field button is released and a hold target exists) - if (!input.field) { //tech.isFieldFre + if (!input.field) { //&& tech.isFieldFree //draw field free of player ctx.fillStyle = "rgba(110,170,200," + (0.27 + 0.2 * Math.random() - 0.1 * wave) + ")"; ctx.strokeStyle = "rgba(110, 200, 235, " + (0.4 + 0.5 * Math.random()) + ")" diff --git a/js/spawn.js b/js/spawn.js index af38da7..62d8bfd 100644 --- a/js/spawn.js +++ b/js/spawn.js @@ -98,6 +98,7 @@ const spawn = { } else { tech.addJunkTechToPool(49) } + console.log('hi') spawn.randomLevelBoss(x, y); } }, diff --git a/js/tech.js b/js/tech.js index f380abb..f502d15 100644 --- a/js/tech.js +++ b/js/tech.js @@ -5373,8 +5373,8 @@ } }, { - name: "Lenz's law", - description: "after deactivation perfect diamagnetism
maintains at the location you left it", + name: "Meissner effect", + description: "increase perfect diamagnetism field
radius by 55% and circular arc by 22°", isFieldTech: true, maxCount: 1, count: 0, @@ -5385,10 +5385,10 @@ }, requires: "perfect diamagnetism", effect() { - tech.isFieldFree = true; + tech.isBigField = true; }, remove() { - tech.isFieldFree = false; + tech.isBigField = false; } }, { @@ -5708,7 +5708,7 @@ // }, { name: "plasma-bot", - description: "use 1 research to build a bot
that uses energy to emit plasma", + description: "remove your field to build a bot
that uses energy to emit plasma", isFieldTech: true, maxCount: 1, count: 0, @@ -5717,40 +5717,52 @@ isBot: true, isBotTech: true, allowed() { - return m.fieldUpgrades[m.fieldMode].name === "plasma torch" && (build.isExperimentSelection || powerUps.research.count > 0) + return !tech.isExtruder && m.fieldUpgrades[m.fieldMode].name === "plasma torch" && (build.isExperimentSelection || powerUps.research.count > 0) }, - requires: "plasma torch", + requires: "plasma torch, not micro-extruder", effect() { tech.plasmaBotCount++; b.plasmaBot(); - for (let i = 0; i < 1; i++) { - if (powerUps.research.count > 0) powerUps.research.changeRerolls(-1) + if (build.isExperimentSelection) { + document.getElementById("field-" + m.fieldMode).classList.remove("build-field-selected"); + document.getElementById("field-0").classList.add("build-field-selected"); } + m.setField("field emitter") }, remove() { - tech.plasmaBotCount = 0; - b.clearPermanentBots(); - b.respawnBots(); - if (this.count > 0) powerUps.research.changeRerolls(1) + if (this.count > 0) { + tech.plasmaBotCount = 0; + b.clearPermanentBots(); + b.respawnBots(); + if (m.fieldMode === 0) { + m.setField("plasma torch") + if (build.isExperimentSelection) { + document.getElementById("field-0").classList.remove("build-field-selected"); + document.getElementById("field-" + m.fieldMode).classList.add("build-field-selected"); + } + } + } } }, { name: "plasma jet", - description: "increase plasma torch's range by 30%", + description: "use 1 research to
increase plasma torch's range by 50%", isFieldTech: true, - maxCount: 9, + maxCount: 3, count: 0, frequency: 2, frequencyDefault: 2, allowed() { - return m.fieldUpgrades[m.fieldMode].name === "plasma torch" && !tech.isExtruder + return (tech.plasmaBotCount || (m.fieldUpgrades[m.fieldMode].name === "plasma torch" && !tech.isExtruder)) && (build.isExperimentSelection || powerUps.research.count > 0) }, requires: "plasma torch, not micro-extruder", effect() { - tech.isPlasmaRange += 0.3; + tech.isPlasmaRange += 0.5; + if (powerUps.research.count > 0) powerUps.research.changeRerolls(-1) }, remove() { tech.isPlasmaRange = 1; + if (this.count > 0) powerUps.research.changeRerolls(this.count) } }, { @@ -5781,9 +5793,9 @@ frequency: 2, frequencyDefault: 2, allowed() { - return m.fieldUpgrades[m.fieldMode].name === "plasma torch" && tech.isPlasmaRange === 1 + return m.fieldUpgrades[m.fieldMode].name === "plasma torch" && tech.isPlasmaRange === 1 && tech.plasmaBotCount === 0 }, - requires: "plasma torch, not plasma jet", + requires: "plasma torch, not plasma jet, plasma-bot", effect() { tech.isExtruder = true; }, @@ -7865,5 +7877,6 @@ isZeno: null, isFieldFree: null, wormSurviveDmg: null, - isExtraGunField: null + isExtraGunField: null, + isBigField: null } \ No newline at end of file diff --git a/todo.txt b/todo.txt index 2f63a7f..f032ae5 100644 --- a/todo.txt +++ b/todo.txt @@ -1,14 +1,23 @@ ******************************************************** NEXT PATCH ******************************************************** -relativistic momentum: laser pushes harder and slows mobs a bit to give a more predictable effect -laserBombingBoss targets faster at higher levels -you can now block shielded mobs, but your shield gets disabled for a bit +perfect diamagnetism can maintain after you deactivate the field with out tech: Lenz's law + starting perfect diamagnetism is a bit smaller +tech: Meissner effect - makes perfect diamagnetism much bigger -fixed bug that made perfect diamagnetism have trouble blocking too many things at once -and more small bug fixes, of course +plasma-bot removes plasma field + plasma-bot uses much less energy and does a bit more damage +plasma jet requires 1 research, increases range 50% (was 30%) +tech microextruder does 30% more damage and uses 10% more energy ******************************************************** TODO ******************************************************** +plasma bot removes your field + buff plasma bot? (not sure you need to) + spawn a field power up? + no need it will show up on next boss + requires not plasma wire tech + can tokamak work outside plasma field? + mob: spawning seekers on death drones can combine with other drones to get bigger?