diff --git a/js/game.js b/js/game.js index 3b560f7..5a101b3 100644 --- a/js/game.js +++ b/js/game.js @@ -683,7 +683,7 @@ const game = { if (!(mech.cycle % 60)) { //once a second //energy overfill - if (mech.energy > mech.maxEnergy) mech.energy = mech.maxEnergy + (mech.energy - mech.maxEnergy) * 0.8 //every second energy above max energy loses 25% + if (mech.energy > mech.maxEnergy) mech.energy = mech.maxEnergy + (mech.energy - mech.maxEnergy) * mod.overfillDrain //every second energy above max energy loses 25% if (mech.pos.y > game.fallHeight) { // if 4000px deep Matter.Body.setVelocity(player, { diff --git a/js/level.js b/js/level.js index 588937b..f7034fc 100644 --- a/js/level.js +++ b/js/level.js @@ -12,8 +12,8 @@ const level = { levels: [], start() { if (level.levelsCleared === 0) { //this code only runs on the first level - // level.difficultyIncrease(8) // game.enableConstructMode() //used to build maps in testing mode + // level.difficultyIncrease(8) // game.zoomScale = 1000; // game.setZoom(); // mech.setField("wormhole") @@ -142,18 +142,18 @@ const level = { spawn.mapRect(level.exit.x, level.exit.y + 20, 100, 100); //exit bump // spawn.boost(1500, 0, 900); - spawn.starter(1900, -500, 20) + // spawn.starter(1900, -500, 20) // spawn.bomberBoss(2900, -500) // spawn.launcherBoss(1200, -500) // spawn.laserTargetingBoss(1600, -400) // spawn.spawner(1600, -500) - // spawn.sniper(1700, -120, 50) + spawn.shooter(1700, -120) // spawn.bomberBoss(1400, -500) - // spawn.sucker(1800, -120) + spawn.sniper(1800, -120) // spawn.cellBossCulture(1600, -500) // spawn.spiderBoss(1600, -500) - // spawn.sniper(1200, -500) - spawn.shield(mob[mob.length - 1], 1800, -120, 1); + spawn.launcher(1200, -500) + // spawn.shield(mob[mob.length - 1], 1800, -120, 1); // spawn.nodeBoss(1200, -500, "launcher") // spawn.snakeBoss(1200, -500) @@ -2090,10 +2090,10 @@ const level = { spawn.randomBoss(-1300, -1100, -0.3); if (game.difficulty > 3) { - if (Math.random() < 0.1) { + if (Math.random() < 0.25) { spawn.randomLevelBoss(-800, -1300) } else { - spawn.snakeBoss(-1300 + Math.random() * 2000, -2200); //boss snake with head + spawn.snakeBoss(-1000 + Math.random() * 1500, -2200); //boss snake with head } } powerUps.addRerollToLevel() //needs to run after mobs are spawned diff --git a/js/mods.js b/js/mods.js index e231a9d..612a164 100644 --- a/js/mods.js +++ b/js/mods.js @@ -932,6 +932,22 @@ const mod = { mod.isFreezeHarmImmune = false; } }, + { + name: "supercapacitor", + description: "energy above your max decays 66% slower", + maxCount: 1, + count: 0, + allowed() { + return (mod.isEnergyRecovery || mod.isPiezo || mod.energySiphon > 0 || mod.isRailEnergyGain || mod.isWormholeEnergy || mod.iceEnergy > 0) && mech.fieldUpgrades[mech.fieldMode].name !== "nano-scale manufacturing" + }, + requires: "a source of overfilled energy", + effect() { + mod.overfillDrain = 0.933 + }, + remove() { + mod.overfillDrain = 0.8 + } + }, { name: "piezoelectricity", description: "colliding with mobs overfills energy by 200%
reduce harm by 15%", @@ -3262,5 +3278,6 @@ const mod = { isRadioactive: null, isRailEnergyGain: null, isMineSentry: null, - isIncendiary: null + isIncendiary: null, + overfillDrain: null } \ No newline at end of file diff --git a/js/spawn.js b/js/spawn.js index a824987..91ea90c 100644 --- a/js/spawn.js +++ b/js/spawn.js @@ -2110,7 +2110,7 @@ const spawn = { }, seeker(x, y, radius = 5, sides = 0) { //bullets - mobs.spawn(x, y, sides, radius, "rgb(150,150,255)"); + mobs.spawn(x, y, sides, radius, "rgb(255,0,255)"); let me = mob[mob.length - 1]; me.stroke = "transparent"; me.onHit = function() { @@ -2196,9 +2196,9 @@ const spawn = { let me = mob[mob.length - 1]; me.isBoss = true; me.accelMag = 0.0011 * game.accelScale; - me.memory = 200; + me.memory = 250; me.laserRange = 500; - Matter.Body.setDensity(me, 0.001 + 0.0005 * Math.sqrt(game.difficulty)); //extra dense //normal is 0.001 //makes effective life much larger + Matter.Body.setDensity(me, 0.0013 + 0.0005 * Math.sqrt(game.difficulty)); //extra dense //normal is 0.001 //makes effective life much larger spawn.shield(me, x, y, 1); me.onDeath = function() { powerUps.spawnBossPowerUp(this.position.x, this.position.y) @@ -2211,8 +2211,8 @@ const spawn = { }; //snake tail - const nodes = Math.min(3 + Math.ceil(Math.random() * game.difficulty + 2), 8) - spawn.lineBoss(x + 105, y, "spawns", nodes); + const nodes = 2 + Math.min(3 + Math.ceil(Math.random() * game.difficulty + 2), 8) + spawn.lineBoss(x + 105, y, "snakeBody", nodes); //constraint boss with first 3 mobs in lineboss consBB[consBB.length] = Constraint.create({ bodyA: mob[mob.length - nodes], @@ -2234,6 +2234,27 @@ const spawn = { World.add(engine.world, consBB[consBB.length - 1]); }, + snakeBody(x, y, radius = 20) { + mobs.spawn(x, y, 4, radius, "rgb(255,0,0)"); + let me = mob[mob.length - 1]; + me.onHit = function() { + //run this function on hitting player + this.explode(); + }; + me.collisionFilter.mask = cat.bullet | cat.player + // me.g = 0.0002; //required if using 'gravity' + // me.accelMag = 0 //0.001 * game.accelScale; + // me.memory = 0; + me.leaveBody = false; + // me.seePlayerFreq = Math.round((80 + 50 * Math.random()) * game.lookFreqScale); + me.frictionAir = 0.02; + me.do = function() { + // this.gravity(); + // this.seePlayerCheck(); + this.checkStatus(); + // this.attraction(); + }; + }, tetherBoss(x, y, radius = 90) { // constrained mob boss for the towers level // often has a ring of mobs around it diff --git a/todo.txt b/todo.txt index 9e25339..e95a331 100644 --- a/todo.txt +++ b/todo.txt @@ -1,9 +1,8 @@ *********** NEXT PATCH *********** -mod - neutron bomb is a grenade mod, it's damage is 33% higher - direct hits also apply radiation damage over time +some changes to snake boss -missiles aim better, accelerate quicker, push blocks out of the way better - crouch fire mode rapidly launches missiles vertically +supercapacitor - overfill energy decays 66% slower + (thanks to NoHaxJustPi for coding this) ************** BUGS ************** @@ -26,13 +25,7 @@ missiles aim better, accelerate quicker, push blocks out of the way better ************** TODO ************** -rework missiles - move faster - target more accurately - don't get stuck thrusting into a wall - less delay right after firing - mods - - recursive is kinda dumb +vacuum and neutron bomb could merge new power up - increase damage and fire speed, for 15 seconds named boost?