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