From 2d12f1da425384d57f0cc6ac92b4c94887f69ee9 Mon Sep 17 00:00:00 2001 From: landgreen Date: Sun, 10 Dec 2023 19:33:49 -0800 Subject: [PATCH] why not why mode is now 20% easier, but still 25% harder than hard mode easy:1, normal:2, hard:4, why:6->5 new community map unchartedCave by 3xionDev! Newtons 1st law 66->88% defense when moving fast Newtons 2nd law 66->88% damage when moving fast CIWS energy 20->18 per shot rupture disables reel and tokamak --- index.html | 4 +- js/index.js | 9 +- js/level.js | 423 +++++++++++++++++++++++++++++++++++++++++++++++++- js/player.js | 16 +- js/powerup.js | 2 +- js/tech.js | 20 +-- todo.txt | 35 +++-- 7 files changed, 462 insertions(+), 47 deletions(-) diff --git a/index.html b/index.html index 22b8a85..83d1ea6 100644 --- a/index.html +++ b/index.html @@ -52,10 +52,10 @@

diff --git a/js/index.js b/js/index.js index b6a8552..6e42585 100644 --- a/js/index.js +++ b/js/index.js @@ -305,17 +305,14 @@ const build = { // console.log(localSettings.isHideImages, from) }, hideHUD() { - if (simulation.isTraining) { localSettings.isHideHUD = false } else { localSettings.isHideHUD = !localSettings.isHideHUD } - if (localSettings.isAllowed) localStorage.setItem("localSettings", JSON.stringify(localSettings)); //update local storage document.getElementById("hide-hud").checked = localSettings.isHideHUD document.getElementById("hide-hud").classList.toggle("ticked") - simulation.removeEphemera("dmgDefBars") if (!localSettings.isHideHUD) { simulation.ephemera.push({ @@ -791,9 +788,9 @@ ${simulation.isCheating ? "

lore disabled" : ""}
    diff --git a/js/level.js b/js/level.js index ff380f1..e2f9fad 100644 --- a/js/level.js +++ b/js/level.js @@ -11,7 +11,7 @@ const level = { // playableLevels: ["pavilion", "pavilion", "pavilion", "pavilion", "pavilion", "pavilion", "pavilion", "pavilion", "pavilion", "pavilion", "pavilion"], //see level.populateLevels: (intro, ... , reservoir or factory, reactor, ... , subway, final) added later playableLevels: ["labs", "rooftops", "skyscrapers", "warehouse", "highrise", "office", "aerie", "satellite", "sewers", "testChamber", "pavilion", "lock"], - communityLevels: ["gauntlet", "stronghold", "basement", "crossfire", "vats", "run", "ngon", "house", "perplex", "coliseum", "tunnel", "islands", "temple", "dripp", "biohazard", "stereoMadness", "yingYang", "staircase", "fortress", "commandeer", "clock", "buttonbutton", "downpour", "superNgonBros", "underpass", "cantilever", "tlinat", "ruins", "ace", "crimsonTowers", "LaunchSite", "shipwreck"], + communityLevels: ["gauntlet", "stronghold", "basement", "crossfire", "vats", "run", "ngon", "house", "perplex", "coliseum", "tunnel", "islands", "temple", "dripp", "biohazard", "stereoMadness", "yingYang", "staircase", "fortress", "commandeer", "clock", "buttonbutton", "downpour", "superNgonBros", "underpass", "cantilever", "tlinat", "ruins", "ace", "crimsonTowers", "LaunchSite", "shipwreck", "unchartedCave"], trainingLevels: ["walk", "crouch", "jump", "hold", "throw", "throwAt", "deflect", "heal", "fire", "nailGun", "shotGun", "superBall", "matterWave", "missile", "stack", "mine", "grenades", "harpoon", "diamagnetism"], levels: [], start() { @@ -49,7 +49,7 @@ const level = { // for (let i = 0; i < 10; i++) powerUps.directSpawn(1750, -500, "research"); // for (let i = 0; i < 100; i++) powerUps.directSpawn(1750, -500, "coupling"); - // level.shipwreck(); + // level.unchartedCave(); // for (let i = 0; i < 4; ++i) spawn.hopMother(1900, -500) // for (let i = 0; i < 5; ++i) spawn.starter(1900, -500) @@ -218,7 +218,7 @@ const level = { return "normal" } else if (simulation.difficultyMode === 4) { return "hard" - } else if (simulation.difficultyMode === 6) { + } else if (simulation.difficultyMode === 5) { return "why" } }, @@ -30076,6 +30076,423 @@ const level = { if (simulation.difficulty > 1) spawn.randomLevelBoss(3928, -655); spawn.secondaryBossChance(4088, -1744) + level.custom = () => { + level.exit.drawAndCheck(); + + level.enter.draw(); + }; + }, + unchartedCave() { + simulation.makeTextLog(`unchartedCave by 3xionDev`); + //lore.unlockTesting(); + //simulation.enableConstructMode(); + level.difficultyIncrease(15); + level.setPosToSpawn(0, -50); //normal spawn + level.exit.x = 20985; + level.exit.y = 2816; + spawn.mapRect(level.enter.x, level.enter.y + 20, 100, 20); //bump for level entrance + spawn.mapRect(level.exit.x, level.exit.y + 20, 100, 20); //bump for level exit + level.defaultZoom = 1900 + simulation.zoomTransition(level.defaultZoom) + document.body.style.backgroundColor = "#979797"; + // color.map = "#444" //custom map color + + spawn.randomMob(1000, -975, 0); + spawn.randomMob(2550, -575, 0); + spawn.randomMob(2050, -325, 0); + spawn.randomMob(2475, -1350, 0); + spawn.randomMob(2800, -1100, 0); + spawn.randomMob(3400, -1250, 0); + spawn.randomMob(3375, -425, 0); + spawn.randomMob(4575, -775, 0); + spawn.randomMob(5750, -750, 0); + spawn.randomMob(5475, -325, 0); + spawn.randomMob(7625, -250, 0); + spawn.randomMob(9675, 525, 0); + spawn.randomMob(12150, 1200, 0); + spawn.randomMob(12825, 1275, 0); + spawn.randomMob(13175, 1725, 0); + spawn.randomMob(13725, 1375, 0); + spawn.randomMob(15550, 2375, 0); + spawn.randomMob(17625, 3550, 0); + spawn.randomMob(18850, 3500, 0); + spawn.mapRect(-150, 0, 300, 75); + spawn.mapRect(-375, 25, 2550, 75); + spawn.mapRect(-400, -950, 75, 1025); + spawn.mapRect(-400, 75, 50, 25); + spawn.mapRect(-400, -1750, 100, 800); + spawn.mapRect(-350, -1050, 50, 1125); + spawn.mapRect(-400, -1950, 100, 275); + spawn.mapRect(1875, 25, 2075, 75); + spawn.mapRect(-400, 50, 4350, 1175); + spawn.mapRect(-400, 650, 4350, 1175); + spawn.mapRect(2975, 25, 3575, 1800); + spawn.mapRect(-375, -1925, 1725, 800); + spawn.mapRect(-400, -2275, 5625, 725); + spawn.mapRect(1075, -1725, 500, 425); + spawn.mapRect(1275, -1325, 200, 125); + spawn.mapRect(1525, -1325, 25, 75); + spawn.mapRect(1400, -1425, 125, 200); + spawn.mapRect(1400, -1725, 325, 275); + spawn.mapRect(1675, -1600, 125, 100); + spawn.mapRect(-350, -1200, 250, 250); + spawn.mapRect(-175, -1225, 250, 175); + spawn.mapRect(-50, -1150, 275, 50); + spawn.bodyRect(-275, -475, 75, 175); + spawn.bodyRect(325, -750, 50, 50); + spawn.mapRect(2075, -1575, 75, 725); + spawn.mapRect(1900, -1600, 50, 325); + spawn.mapRect(2600, -1675, 25, 850); + spawn.mapRect(2125, -1625, 125, 425); + spawn.mapRect(2125, -1200, 50, 75); + spawn.mapRect(2075, -875, 25, 150); + spawn.mapRect(2025, -1625, 50, 250); + spawn.mapRect(4700, -2275, 2175, 1275); + spawn.mapRect(3975, -1725, 1125, 400); + spawn.mapRect(4300, -1400, 650, 200); + spawn.mapRect(4600, -1225, 175, 125); + spawn.mapRect(3925, -1600, 175, 150); + spawn.mapRect(3950, -1450, 50, 75); + spawn.mapRect(4225, -1350, 150, 100); + spawn.mapRect(3875, -1600, 175, 175); + spawn.mapRect(4450, -1275, 200, 125); + spawn.mapRect(4850, -1125, 50, 550); + spawn.mapRect(5225, -1175, 25, 400); + spawn.mapRect(3250, -1725, 25, 1200); + spawn.mapRect(3600, -1750, 75, 550); + spawn.mapRect(2850, -1700, 325, 325); + spawn.mapRect(2900, -1525, 175, 750); + spawn.mapRect(2975, -900, 75, 450); + spawn.mapRect(550, -175, 150, 500); + spawn.mapRect(625, -300, 125, 450); + spawn.mapRect(725, -175, 50, 475); + spawn.mapRect(675, -400, 25, 200); + spawn.mapRect(450, -25, 150, 150); + spawn.mapRect(275, -1200, 75, 625); + spawn.mapRect(300, -1300, 150, 600); + spawn.mapRect(425, -1250, 25, 800); + spawn.mapRect(425, -1225, 125, 425); + spawn.mapRect(525, -1175, 100, 250); + spawn.mapRect(175, -1200, 175, 375); + spawn.mapRect(1600, -375, 50, 650); + spawn.mapRect(1650, -525, 75, 725); + spawn.mapRect(1450, -225, 150, 475); + spawn.mapRect(1400, -125, 100, 275); + spawn.mapRect(1500, -325, 125, 150); + spawn.mapRect(1750, -225, 100, 350); + spawn.mapRect(1700, -300, 75, 275); + spawn.mapRect(1850, -150, 25, 325); + spawn.mapRect(1750, -50, 75, 225); + spawn.mapRect(1600, -50, 200, 250); + spawn.mapRect(1700, -600, 25, 125); + spawn.bodyRect(1275, -250, 50, 125); + spawn.mapRect(6450, 50, 675, 2000); + spawn.mapRect(6925, 175, 675, 300); + spawn.mapRect(7450, 300, 675, 775); + spawn.mapRect(6925, 325, 1275, 1850); + spawn.mapRect(7025, 125, 375, 100); + spawn.mapRect(7500, 275, 425, 100); + spawn.mapRect(6700, -2275, 1975, 1575); + spawn.mapRect(6475, -1175, 400, 300); + spawn.mapRect(6550, -925, 250, 150); + spawn.mapRect(6600, -825, 175, 75); + spawn.mapRect(6300, -1050, 325, 100); + spawn.mapRect(8050, 400, 450, 1675); + spawn.mapRect(8275, 475, 800, 1550); + spawn.mapRect(8600, 575, 925, 1475); + spawn.mapRect(8400, 425, 300, 100); + spawn.mapRect(8975, 550, 300, 100); + spawn.mapRect(6900, -775, 2375, 200); + spawn.mapRect(7350, -725, 2125, 275); + spawn.mapRect(7725, -550, 1800, 225); + spawn.mapRect(8300, -400, 1750, 125); + spawn.mapRect(8725, -350, 1350, 225); + spawn.mapRect(8525, -375, 400, 150); + spawn.mapRect(8650, -250, 150, 50); + spawn.mapRect(8200, -350, 175, 50); + spawn.mapRect(7600, -475, 275, 100); + spawn.mapRect(7475, -500, 175, 75); + spawn.mapRect(7200, -600, 300, 75); + spawn.mapRect(7075, -600, 150, 25); + spawn.mapRect(7125, -575, 100, 25); + spawn.mapRect(7275, -525, 100, 25); + spawn.mapRect(7500, 225, 275, 125); + spawn.mapRect(5800, -1175, 675, 100); + spawn.mapRect(9400, 625, 500, 1725); + spawn.mapRect(9750, 775, 575, 1500); + spawn.mapRect(10050, 1075, 675, 1300); + spawn.mapRect(9725, -250, 975, 350); + spawn.mapRect(10275, -100, 1000, 625); + spawn.mapRect(10125, 25, 375, 350); + spawn.mapRect(9900, 25, 375, 225); + spawn.mapRect(10075, 250, 200, 50); + spawn.mapRect(10275, 425, 75, 75); + spawn.mapRect(10150, 325, 200, 75); + spawn.mapRect(10200, 375, 125, 100); + spawn.mapRect(9600, -175, 225, 200); + spawn.mapRect(9650, -25, 125, 100); + spawn.mapRect(9450, -200, 225, 175); + spawn.mapRect(10000, 200, 50, 25); + spawn.mapRect(9800, 50, 200, 125); + spawn.mapRect(9875, 725, 150, 75); + spawn.mapRect(10300, 900, 100, 325); + spawn.mapRect(10375, 950, 75, 225); + spawn.mapRect(10425, 1000, 75, 175); + spawn.mapRect(9100, -150, 375, 75); + spawn.mapRect(3525, 0, 1850, 100); + spawn.mapRect(3650, -25, 1475, 175); + spawn.mapRect(4000, -100, 950, 225); + spawn.mapRect(4450, -175, 300, 175); + spawn.mapRect(1825, -25, 775, 100); + spawn.mapRect(4150, -1375, 175, 75); + spawn.mapRect(3800, -1600, 125, 100); + spawn.mapRect(2700, 0, 175, 100); + spawn.mapRect(2750, -50, 75, 150); + spawn.mapRect(2775, -25, 75, 75); + spawn.bodyRect(3775, -575, 50, 75); + spawn.mapRect(8050, -2300, 4650, 1750); + spawn.mapRect(9300, -975, 2450, 575); + spawn.mapRect(9925, -775, 2350, 700); + spawn.mapRect(10675, -600, 2025, 1175); + spawn.mapRect(10300, 825, 50, 125); + spawn.mapRect(10000, 750, 100, 25); + spawn.mapRect(9875, 700, 75, 75); + spawn.mapRect(9850, 675, 75, 50); + spawn.mapRect(8975, 525, 225, 50); + spawn.mapRect(8625, 450, 225, 50); + spawn.mapRect(8925, -150, 175, 50); + spawn.mapRect(-500, 1775, 10800, 1800); + spawn.mapRect(10075, 2200, 625, 1850); + spawn.mapRect(10525, 475, 250, 75); + spawn.mapRect(10450, 1025, 25, 25); + spawn.mapRect(10450, 1050, 150, 25); + spawn.mapRect(10675, 1125, 175, 1700); + spawn.mapRect(10725, 1225, 400, 725); + spawn.mapRect(10975, 1425, 300, 1300); + spawn.mapRect(11225, 1550, 700, 1275); + spawn.mapRect(11725, 1625, 1150, 1150); + spawn.mapRect(11050, 1275, 125, 350); + spawn.mapRect(11150, 1350, 75, 175); + spawn.mapRect(10825, 1200, 125, 75); + spawn.mapRect(10325, 1750, 1275, 1150); + spawn.mapRect(11250, 1500, 325, 100); + spawn.mapRect(11225, 1475, 200, 75); + spawn.mapRect(11525, 1525, 350, 75); + spawn.mapRect(11875, 1575, 425, 100); + spawn.mapRect(12200, 1625, 25, 25); + spawn.mapRect(12200, 1600, 250, 75); + spawn.randomMob(11250, 675, 0); + spawn.bodyRect(10900, 575, 50, 625); + spawn.mapRect(11050, 575, 1725, 200); + spawn.mapRect(11275, 750, 1650, 125); + spawn.mapRect(11575, 875, 1525, 150); + spawn.mapRect(11450, 850, 250, 125); + spawn.mapRect(11325, 850, 225, 50); + spawn.mapRect(11400, 875, 100, 75); + spawn.mapRect(11175, 750, 200, 75); + spawn.mapRect(11125, 775, 100, 25); + spawn.mapRect(11250, 825, 50, 25); + spawn.mapRect(11675, 1025, 400, 50); + spawn.mapRect(12175, 1025, 50, 150); + spawn.mapRect(11625, 1000, 75, 50); + spawn.mapRect(12200, 1175, 25, 25); + spawn.mapRect(12400, 950, 100, 275); + spawn.mapRect(12450, 1200, 50, 100); + spawn.mapRect(12425, 1225, 50, 125); + spawn.mapRect(12425, 1325, 25, 75); + spawn.mapRect(12325, 1025, 25, 100); + spawn.mapRect(12625, 1000, 625, 150); + spawn.mapRect(12775, 1150, 600, 50); + spawn.bodyRect(12075, 1325, 100, 50); + spawn.mapRect(12825, 2000, 800, 975); + spawn.mapRect(13475, 1625, 150, 475); + spawn.mapRect(12850, 1750, 50, 275); + spawn.mapRect(12875, 1850, 75, 225); + spawn.mapRect(12950, 1925, 75, 125); + spawn.mapRect(13450, 1700, 50, 350); + spawn.mapRect(13400, 1750, 75, 350); + spawn.mapRect(13325, 1875, 100, 200); + spawn.mapRect(13350, 1800, 75, 100); + spawn.mapRect(13300, 1950, 25, 75); + spawn.mapRect(12925, 1900, 75, 25); + spawn.mapRect(12900, 1800, 25, 75); + spawn.mapRect(13000, 1975, 150, 25); + spawn.mapRect(12475, 100, 1150, 925); + spawn.mapRect(13200, 100, 925, 1100); + spawn.mapRect(13525, 1150, 400, 75); + spawn.mapRect(13875, 1200, 175, 125); + spawn.mapRect(13975, 1300, 75, 225); + spawn.mapRect(14025, 1425, 25, 225); + spawn.mapRect(13600, 1700, 100, 1250); + spawn.mapRect(13675, 1775, 150, 1200); + spawn.mapRect(13775, 1825, 75, 1150); + spawn.mapRect(13825, 1900, 50, 1075); + spawn.mapRect(13850, 1950, 75, 1025); + spawn.mapRect(13875, 2025, 75, 950); + spawn.mapRect(13925, 2100, 50, 1025); + spawn.mapRect(13900, 2125, 100, 1000); + spawn.mapRect(13975, 2225, 75, 900); + spawn.mapRect(14000, 2375, 100, 750); + spawn.mapRect(14050, 1200, 75, 525); + spawn.mapRect(14075, 1625, 100, 150); + spawn.mapRect(14175, 1750, 50, 175); + spawn.mapRect(14150, 1750, 50, 75); + spawn.mapRect(14225, 1875, 50, 150); + spawn.mapRect(14250, 2000, 50, 150); + spawn.mapRect(14100, 300, 300, 1450); + spawn.mapRect(14225, 1675, 150, 250); + spawn.mapRect(14300, 1700, 100, 675); + spawn.mapRect(14275, 1925, 50, 175); + spawn.mapRect(14025, 2300, 50, 200); + spawn.mapRect(14075, 2600, 275, 700); + spawn.mapRect(14050, 2425, 75, 475); + spawn.mapRect(14100, 2525, 50, 150); + spawn.mapRect(14150, 2575, 50, 100); + spawn.mapRect(14325, 2650, 800, 1300); + spawn.mapRect(15000, 2600, 1075, 1275); + spawn.mapRect(15100, 2550, 1200, 1400); + spawn.mapRect(14375, 1075, 1400, 1175); + spawn.mapRect(14375, 2225, 200, 50); + spawn.mapRect(14375, 2275, 75, 75); + spawn.mapRect(14425, 2275, 75, 25); + spawn.mapRect(14775, 2200, 50, 125); + spawn.mapRect(14725, 2250, 25, 125); + spawn.bodyRect(14300, 2375, 50, 225); + spawn.mapRect(15075, 2600, 50, 25); + spawn.mapRect(15075, 2575, 50, 50); + spawn.mapRect(14950, 2625, 50, 25); + spawn.mapRect(15525, 2525, 300, 50); + spawn.mapRect(15550, 2500, 175, 100); + spawn.mapRect(14975, 2250, 200, 25); + spawn.mapRect(14400, 1000, 1900, 1250); + spawn.mapRect(15925, 2250, 275, 25); + spawn.mapRect(15975, 2275, 150, 25); + spawn.mapRect(16075, 2300, 25, 75); + spawn.mapRect(16250, 2575, 275, 1275); + spawn.mapRect(16400, 2600, 250, 1300); + spawn.mapRect(16525, 2675, 300, 1150); + spawn.mapRect(16650, 2725, 300, 1175); + spawn.mapRect(16200, 1050, 600, 1225); + spawn.mapRect(16525, 1025, 500, 1300); + spawn.mapRect(16725, 1150, 525, 1225); + spawn.mapRect(16900, 1425, 550, 1000); + spawn.mapRect(16375, 2250, 250, 50); + spawn.mapRect(16675, 2325, 75, 25); + spawn.mapRect(16850, 2400, 25, 25); + spawn.mapRect(16850, 2375, 100, 50); + spawn.mapRect(16800, 2375, 50, 25); + spawn.mapRect(16575, 2650, 150, 75); + spawn.mapRect(16625, 2625, 50, 50); + spawn.mapRect(16800, 2700, 50, 50); + spawn.mapRect(16950, 2900, 450, 1175); + spawn.mapRect(16900, 2825, 100, 275); + spawn.mapRect(16900, 2775, 75, 150); + spawn.mapRect(16950, 2850, 100, 125); + spawn.mapRect(17600, 3000, 350, 25); + spawn.mapRect(17650, 3025, 200, 50); + spawn.mapRect(17750, 3050, 100, 1200); + spawn.mapRect(17850, 3025, 25, 425); + spawn.mapRect(18200, 3100, 450, 25); + spawn.mapRect(18250, 3125, 150, 100); + spawn.mapRect(18400, 3125, 200, 50); + spawn.mapRect(18400, 3150, 75, 900); + spawn.mapRect(18400, 3950, 75, 375); + spawn.mapRect(17750, 4000, 100, 325); + spawn.mapRect(18200, 3075, 525, 50); + spawn.mapRect(18450, 3175, 50, 275); + spawn.mapRect(18575, 3125, 50, 50); + spawn.mapRect(18600, 3100, 50, 50); + spawn.mapRect(18325, 3200, 100, 175); + spawn.mapRect(18350, 3350, 75, 100); + spawn.mapRect(18375, 3450, 25, 75); + spawn.mapRect(18500, 3175, 25, 150); + spawn.mapRect(17725, 3075, 50, 175); + spawn.mapRect(17700, 3075, 25, 50); + spawn.mapRect(18550, 3150, 50, 1275); + spawn.mapRect(18975, 2975, 525, 25); + spawn.mapRect(19025, 2975, 400, 75); + spawn.mapRect(19150, 3025, 150, 1400); + spawn.mapRect(19250, 3025, 100, 325); + spawn.mapRect(19100, 3050, 75, 225); + spawn.mapRect(19125, 3275, 50, 75); + spawn.mapRect(19275, 3325, 50, 200); + spawn.mapRect(19700, 3000, 525, 50); + spawn.mapRect(19750, 3050, 175, 1275); + spawn.mapRect(19925, 3025, 100, 225); + spawn.mapRect(19900, 3200, 75, 250); + spawn.mapRect(20025, 3050, 50, 100); + spawn.mapRect(20000, 3150, 50, 75); + spawn.mapRect(19900, 3450, 50, 125); + spawn.mapRect(19725, 3050, 75, 150); + spawn.mapRect(19650, 3025, 25, 25); + spawn.mapRect(19650, 3000, 625, 25); + spawn.mapRect(17375, 1450, 3525, 250); + spawn.mapRect(17400, 1675, 100, 400); + spawn.mapRect(17475, 1675, 75, 150); + spawn.mapRect(17525, 1650, 125, 75); + spawn.mapRect(17475, 1775, 50, 175); + spawn.mapRect(17425, 2025, 50, 200); + spawn.mapRect(17825, 1650, 375, 75); + spawn.mapRect(17975, 1700, 100, 125); + spawn.mapRect(18050, 1800, 50, 150); + spawn.mapRect(18025, 1675, 100, 150); + spawn.mapRect(18075, 1900, 25, 175); + spawn.mapRect(20550, 2825, 825, 1525); + spawn.mapRect(20825, 1450, 550, 250); + spawn.mapRect(21350, 1450, 300, 2700); + spawn.mapRect(21100, 1650, 275, 425); + spawn.mapRect(21225, 2025, 175, 275); + spawn.mapRect(21175, 2025, 75, 150); + spawn.mapRect(21300, 2275, 75, 150); + spawn.mapRect(21000, 1675, 100, 300); + spawn.mapRect(21050, 1950, 50, 100); + spawn.mapRect(20700, 1700, 200, 50); + spawn.mapRect(20750, 1725, 50, 225); + spawn.mapRect(20800, 1725, 50, 175); + spawn.mapRect(20750, 1925, 25, 150); + spawn.mapRect(20975, 1675, 50, 225); + spawn.mapRect(21275, 2300, 50, 50); + spawn.mapRect(20550, 1700, 150, 50); + spawn.mapRect(20550, 1725, 50, 825); + spawn.mapRect(20575, 1725, 50, 300); + spawn.mapRect(20600, 1725, 50, 75); + spawn.mapRect(20600, 1875, 25, 350); + spawn.mapRect(20675, 1750, 25, 400); + spawn.bodyRect(20550, 2550, 50, 275); + spawn.mapRect(20500, 2850, 75, 1500); + spawn.mapRect(20475, 2900, 50, 1425); + spawn.bodyRect(21200, 2550, 50, 75); + spawn.bodyRect(20775, 2225, 75, 75); + + spawn.mapRect(19525, 1700, 550, 25); + spawn.mapRect(19650, 1725, 100, 275); + spawn.mapRect(19725, 1700, 50, 525); + spawn.mapRect(19750, 1725, 250, 150); + spawn.mapRect(19775, 1850, 100, 225); + spawn.mapRect(19850, 1875, 100, 75); + spawn.mapRect(19600, 1675, 125, 175); + spawn.mapRect(18425, 1700, 1050, 50); + spawn.mapRect(18475, 1750, 800, 25); + spawn.randomMob(12000, 2850, 0); + spawn.mapRect(10550, 2725, 5275, 1775); + spawn.mapRect(15700, 3850, 5950, 1050); + spawn.mapRect(8225, 2975, 4050, 1500); + spawn.mapRect(12100, -2300, 9350, 2925); + spawn.mapRect(14175, 350, 8725, 1075); + spawn.mapRect(20825, -2325, 3700, 2650); + spawn.mapRect(21450, 50, 4450, 5925); + spawn.mapRect(16325, 1125, 7175, 400); + spawn.mapRect(-875, -3775, 27375, 1625); + spawn.mapRect(-3250, -4000, 2925, 8075); + spawn.mapRect(8125, 4475, 18250, 7300); + spawn.mapRect(7125, 3975, 8775, 2800); + spawn.mapRect(-4300, -4475, 2300, 11350); + spawn.randomGroup(5835, -532, 0.4); + if (simulation.difficulty > 1) spawn.randomLevelBoss(18823, 2191); + spawn.secondaryBossChance(20217, 1913) + + + level.custom = () => { level.exit.drawAndCheck(); diff --git a/js/player.js b/js/player.js index 82bc338..ed5cc78 100644 --- a/js/player.js +++ b/js/player.js @@ -567,7 +567,7 @@ const m = { if (tech.isHarmReduceNoKill && m.lastKillCycle + 300 < m.cycle) dmg *= 0.33 if (tech.squirrelFx !== 1) dmg *= 0.78//Math.pow(0.78, (tech.squirrelFx - 1) / 0.4) if (tech.isAddBlockMass && m.isHolding) dmg *= 0.1 - if (tech.isSpeedHarm && player.speed > 0.1) dmg *= 1 - Math.min(player.speed * 0.0165, 0.66) + if (tech.isSpeedHarm && player.speed > 0.1) dmg *= 1 - Math.min(player.speed * 0.0193, 0.88) //capped at speed of 55 if (tech.isHarmReduce && input.field) dmg *= 0.15 if (tech.isNeutronium && input.field && m.fieldCDcycle < m.cycle) dmg *= 0.05 if (tech.isBotArmor) dmg *= 0.94 ** b.totalBots() @@ -3025,12 +3025,12 @@ const m = { m.drawHold(m.holdingTarget); m.holding(); m.throwBlock(); - } else if (input.field && m.fieldCDcycle < m.cycle) { //push away + } else if (input.field) { //push away if (m.energy > m.fieldRegen) m.energy -= m.fieldRegen m.grabPowerUp(); m.lookForPickUp(); const DRAIN = 0.00035 - if (m.energy > DRAIN) { + if (m.energy > DRAIN && m.fieldCDcycle < m.cycle) { if (tech.isFlyFaster) { //look for nearby objects to make zero-g function moveThis(who, range, mag = 1.06) { @@ -4980,8 +4980,6 @@ const m = { } 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 (tech.isHookDefense && m.energy > 0.33 && m.fieldCDcycle < m.cycle) { - const maxCount = 6 //scale the number of hooks fired - let count = maxCount const range = 300 for (let i = 0; i < mob.length; i++) { if (!mob[i].isBadTarget && @@ -4989,14 +4987,14 @@ const m = { Vector.magnitude(Vector.sub(m.pos, mob[i].position)) < range && Matter.Query.ray(map, m.pos, mob[i].position).length === 0 ) { - count-- - m.energy -= 0.2 + m.energy -= 0.18 if (m.fieldCDcycle < m.cycle + 30) m.fieldCDcycle = m.cycle + 30 const angle = Math.atan2(mob[i].position.y - player.position.y, mob[i].position.x - player.position.x); b.harpoon(m.pos, mob[i], angle, 0.75, true, 20) // harpoon(where, target, angle = m.angle, harpoonSize = 1, isReturn = false, totalCycles = 35, isReturnAmmo = true, thrust = 0.1) { bullet[bullet.length - 1].drain = 0 - for (; count > 0; count--) { - b.harpoon(m.pos, mob[i], angle + count * 2 * Math.PI / maxCount, 0.75, true, 10) + const maxCount = 6 + for (let j = maxCount - 1; j > 0; j--) { + b.harpoon(m.pos, mob[i], angle + j * 2 * Math.PI / maxCount, 0.75, true, 10) bullet[bullet.length - 1].drain = 0 } break diff --git a/js/powerup.js b/js/powerup.js index f481842..27ee626 100644 --- a/js/powerup.js +++ b/js/powerup.js @@ -1424,7 +1424,7 @@ const powerUps = { } }, addResearchToLevel() { //add a random power up to a location that has a mob, mostly used to give each level one randomly placed research - if (mob.length && Math.random() < 0.45 - 0.3 * (simulation.difficultyMode > 5)) { //lower chance on why difficulty + if (mob.length && Math.random() < 0.45 - 0.3 * (simulation.difficultyMode > 4)) { //lower chance on why difficulty const index = Math.floor(Math.random() * mob.length) powerUps.spawn(mob[index].position.x, mob[index].position.y, "research"); } diff --git a/js/tech.js b/js/tech.js index 963939c..4792f6b 100644 --- a/js/tech.js +++ b/js/tech.js @@ -253,7 +253,7 @@ const tech = { if (tech.energyDamage) dmg *= 1 + m.energy * 0.22 * tech.energyDamage; if (tech.isDamageFromBulletCount) dmg *= 1 + bullet.length * 0.007 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.isSpeedDamage) dmg *= 1 + Math.min(0.88, player.speed * 0.0193) if (tech.isDamageAfterKillNoRegen && m.lastKillCycle + 300 > m.cycle) dmg *= 1.83 if (tech.isAxion && tech.isHarmMACHO) dmg *= 2 - m.defense() if (tech.isHarmDamage && m.lastHarmCycle + 480 > m.cycle) dmg *= 3; @@ -1047,7 +1047,7 @@ const tech = { // }, { name: "Newtons 1st law", - description: "defense is proportional to your speed
up to +66% defense at 40 speed", + description: "defense is proportional to your speed
up to +88% defense at 55 speed", maxCount: 1, count: 0, frequency: 1, @@ -1065,7 +1065,7 @@ const tech = { }, { name: "Newtons 2nd law", - description: "damage is proportional to your speed
up to +66% damage at 40 speed", + description: "damage is proportional to your speed
up to +88% damage at 55 speed", maxCount: 1, count: 0, frequency: 1, @@ -8121,9 +8121,9 @@ const tech = { frequency: 2, frequencyDefault: 2, allowed() { - return (m.fieldMode === 5 || m.fieldMode === 4 || m.fieldMode === 10) && !tech.isPrinter && !tech.isReel + return (m.fieldMode === 5 || m.fieldMode === 4 || m.fieldMode === 10) && !tech.isPrinter && !tech.isReel && !tech.isHookExplosion }, - requires: "plasma torch, molecular assembler, grappling hook, not printer, reel", + requires: "plasma torch, molecular assembler, grappling hook, not printer, reel, rupture", effect() { tech.isTokamak = true; }, @@ -8775,7 +8775,7 @@ const tech = { }, { name: "CIWS", - description: "grappling hook uses 20 energy
to fire harpoons at nearby mobs", + description: "grappling hook uses 18 energy
to fire harpoons at nearby mobs", isFieldTech: true, maxCount: 1, count: 0, @@ -8801,9 +8801,9 @@ const tech = { frequency: 2, frequencyDefault: 2, allowed() { - return m.fieldMode === 10 + return m.fieldMode === 10 && !tech.isReel && !tech.isTokamak }, - requires: "grappling hook", + requires: "grappling hook, not reel, tokamak", effect() { tech.isHookExplosion = true }, @@ -8820,9 +8820,9 @@ const tech = { frequency: 1, frequencyDefault: 1, allowed() { - return m.fieldMode === 10 && !tech.isTokamak && tech.blockDamage === 0.075 + return m.fieldMode === 10 && !tech.isTokamak && tech.blockDamage === 0.075 && !tech.isHookExplosion }, - requires: "not mass driver", + requires: "grappling hook, not mass driver, rupture, tokamak", effect() { tech.blockDamage = 0.375 tech.isReel = true diff --git a/todo.txt b/todo.txt index 024fe8e..0ac580b 100644 --- a/todo.txt +++ b/todo.txt @@ -1,26 +1,29 @@ ******************************************************** NEXT PATCH ************************************************** -new community level shipwreck by 3xionDev +why mode is now 20% easier, but still 25% harder than hard mode + easy:1, normal:2, hard:4, why:6->5 -grappling hook - tech: reel - increase block damage 400%, generate 30 energy after hooking blocks - added tokamak to grappling hook - updated rope graphics - added input.up to adjust positioning while hook is attached - added images for CIWS, rupture, autonomous defense - aerostat: 25->15% reduced damage on ground - rupture unlocks explosive tech - rupture destroys blocks - autonomous defense renamed to CIWS +new community map unchartedCave by 3xionDev! + +Newtons 1st law 66->88% defense when moving fast +Newtons 2nd law 66->88% damage when moving fast +CIWS energy 20->18 per shot +rupture disables reel and tokamak -field emitter 6->4 base energy regen -tech: autonomous defense - harpoon tech that fires harpoons after taking damage -degenerate matter: 75->85% defense while field is active -neutronium: 90->95% defense while field is active -unified field theory no longer has field emitter as an option *********************************************************** TODO ***************************************************** + +scrap bots don't follow player + adjust spawn rates to balance + + +make grappling hook of different shapes + indicate tech upgrades? + rupture, reel, tokamak + do this in draw or in verticies? + draw can have different colors + player got stuck inside block that wasn't pick up able grappling hook field