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
This commit is contained in:
landgreen
2023-12-10 19:33:49 -08:00
parent ad33cf68ea
commit 2d12f1da42
7 changed files with 462 additions and 47 deletions

View File

@@ -52,10 +52,10 @@
<div style="line-height: 150%;" class="details-div"> <div style="line-height: 150%;" class="details-div">
<label for="difficulty-select" title="effects: number of mobs, damage done by mobs, damage done to mobs, mob speed, heal effects">combat difficulty:</label> <label for="difficulty-select" title="effects: number of mobs, damage done by mobs, damage done to mobs, mob speed, heal effects">combat difficulty:</label>
<select name="difficulty-select" id="difficulty-select" style="background-color: #fff"> <select name="difficulty-select" id="difficulty-select" style="background-color: #fff">
<option value="1">easy</option> <option value="1">easy</option>
<option value="2" selected>normal ⚆</option> <option value="2" selected>normal ⚆</option>
<option value="4">hard ⚆</option> <option value="4">hard ⚆</option>
<option value="6">why ⚇</option> <option value="5">why ⚇</option>
</select> </select>
<br> <br>
<input onclick="build.showImages('settings')" type="checkbox" id="hide-images" name="hide-images" style="width:17px; height:17px;"> <input onclick="build.showImages('settings')" type="checkbox" id="hide-images" name="hide-images" style="width:17px; height:17px;">

View File

@@ -305,17 +305,14 @@ const build = {
// console.log(localSettings.isHideImages, from) // console.log(localSettings.isHideImages, from)
}, },
hideHUD() { hideHUD() {
if (simulation.isTraining) { if (simulation.isTraining) {
localSettings.isHideHUD = false localSettings.isHideHUD = false
} else { } else {
localSettings.isHideHUD = !localSettings.isHideHUD localSettings.isHideHUD = !localSettings.isHideHUD
} }
if (localSettings.isAllowed) localStorage.setItem("localSettings", JSON.stringify(localSettings)); //update local storage if (localSettings.isAllowed) localStorage.setItem("localSettings", JSON.stringify(localSettings)); //update local storage
document.getElementById("hide-hud").checked = localSettings.isHideHUD document.getElementById("hide-hud").checked = localSettings.isHideHUD
document.getElementById("hide-hud").classList.toggle("ticked") document.getElementById("hide-hud").classList.toggle("ticked")
simulation.removeEphemera("dmgDefBars") simulation.removeEphemera("dmgDefBars")
if (!localSettings.isHideHUD) { if (!localSettings.isHideHUD) {
simulation.ephemera.push({ simulation.ephemera.push({
@@ -791,9 +788,9 @@ ${simulation.isCheating ? "<br><br><em>lore disabled</em>" : ""}
<div> <div>
<select name="difficulty-select" id="difficulty-select-experiment"> <select name="difficulty-select" id="difficulty-select-experiment">
<option value="1">easy</option> <option value="1">easy</option>
<option value="2" selected>normal</option> <option value="2" selected>normal</option>
<option value="4">hard</option> <option value="4">hard</option>
<option value="6">why</option> <option value="5">why</option>
</select> </select>
&nbsp; &nbsp; &nbsp; &nbsp;
<label for="hide-images-experiment" title="reload experiment with no images for fields, guns, and tech" style="font-size: 0.85em;">hide images</label> <label for="hide-images-experiment" title="reload experiment with no images for fields, guns, and tech" style="font-size: 0.85em;">hide images</label>

View File

@@ -11,7 +11,7 @@ const level = {
// playableLevels: ["pavilion", "pavilion", "pavilion", "pavilion", "pavilion", "pavilion", "pavilion", "pavilion", "pavilion", "pavilion", "pavilion"], // playableLevels: ["pavilion", "pavilion", "pavilion", "pavilion", "pavilion", "pavilion", "pavilion", "pavilion", "pavilion", "pavilion", "pavilion"],
//see level.populateLevels: (intro, ... , reservoir or factory, reactor, ... , subway, final) added later //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"], 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"], trainingLevels: ["walk", "crouch", "jump", "hold", "throw", "throwAt", "deflect", "heal", "fire", "nailGun", "shotGun", "superBall", "matterWave", "missile", "stack", "mine", "grenades", "harpoon", "diamagnetism"],
levels: [], levels: [],
start() { start() {
@@ -49,7 +49,7 @@ const level = {
// for (let i = 0; i < 10; i++) powerUps.directSpawn(1750, -500, "research"); // for (let i = 0; i < 10; i++) powerUps.directSpawn(1750, -500, "research");
// for (let i = 0; i < 100; i++) powerUps.directSpawn(1750, -500, "coupling"); // 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 < 4; ++i) spawn.hopMother(1900, -500)
// for (let i = 0; i < 5; ++i) spawn.starter(1900, -500) // for (let i = 0; i < 5; ++i) spawn.starter(1900, -500)
@@ -218,7 +218,7 @@ const level = {
return "normal" return "normal"
} else if (simulation.difficultyMode === 4) { } else if (simulation.difficultyMode === 4) {
return "hard" return "hard"
} else if (simulation.difficultyMode === 6) { } else if (simulation.difficultyMode === 5) {
return "why" return "why"
} }
}, },
@@ -30076,6 +30076,423 @@ const level = {
if (simulation.difficulty > 1) spawn.randomLevelBoss(3928, -655); if (simulation.difficulty > 1) spawn.randomLevelBoss(3928, -655);
spawn.secondaryBossChance(4088, -1744) spawn.secondaryBossChance(4088, -1744)
level.custom = () => {
level.exit.drawAndCheck();
level.enter.draw();
};
},
unchartedCave() {
simulation.makeTextLog(`<strong>unchartedCave</strong> by <span class='color-var'>3xionDev</span>`);
//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.custom = () => {
level.exit.drawAndCheck(); level.exit.drawAndCheck();

View File

@@ -567,7 +567,7 @@ const m = {
if (tech.isHarmReduceNoKill && m.lastKillCycle + 300 < m.cycle) dmg *= 0.33 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.squirrelFx !== 1) dmg *= 0.78//Math.pow(0.78, (tech.squirrelFx - 1) / 0.4)
if (tech.isAddBlockMass && m.isHolding) dmg *= 0.1 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.isHarmReduce && input.field) dmg *= 0.15
if (tech.isNeutronium && input.field && m.fieldCDcycle < m.cycle) dmg *= 0.05 if (tech.isNeutronium && input.field && m.fieldCDcycle < m.cycle) dmg *= 0.05
if (tech.isBotArmor) dmg *= 0.94 ** b.totalBots() if (tech.isBotArmor) dmg *= 0.94 ** b.totalBots()
@@ -3025,12 +3025,12 @@ const m = {
m.drawHold(m.holdingTarget); m.drawHold(m.holdingTarget);
m.holding(); m.holding();
m.throwBlock(); 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 if (m.energy > m.fieldRegen) m.energy -= m.fieldRegen
m.grabPowerUp(); m.grabPowerUp();
m.lookForPickUp(); m.lookForPickUp();
const DRAIN = 0.00035 const DRAIN = 0.00035
if (m.energy > DRAIN) { if (m.energy > DRAIN && m.fieldCDcycle < m.cycle) {
if (tech.isFlyFaster) { if (tech.isFlyFaster) {
//look for nearby objects to make zero-g //look for nearby objects to make zero-g
function moveThis(who, range, mag = 1.06) { function moveThis(who, range, mag = 1.06) {
@@ -4980,8 +4980,6 @@ const m = {
} else { } 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) 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) { 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 const range = 300
for (let i = 0; i < mob.length; i++) { for (let i = 0; i < mob.length; i++) {
if (!mob[i].isBadTarget && if (!mob[i].isBadTarget &&
@@ -4989,14 +4987,14 @@ const m = {
Vector.magnitude(Vector.sub(m.pos, mob[i].position)) < range && Vector.magnitude(Vector.sub(m.pos, mob[i].position)) < range &&
Matter.Query.ray(map, m.pos, mob[i].position).length === 0 Matter.Query.ray(map, m.pos, mob[i].position).length === 0
) { ) {
count-- m.energy -= 0.18
m.energy -= 0.2
if (m.fieldCDcycle < m.cycle + 30) m.fieldCDcycle = m.cycle + 30 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); 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) { 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 bullet[bullet.length - 1].drain = 0
for (; count > 0; count--) { const maxCount = 6
b.harpoon(m.pos, mob[i], angle + count * 2 * Math.PI / maxCount, 0.75, true, 10) 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 bullet[bullet.length - 1].drain = 0
} }
break break

View File

@@ -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 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) const index = Math.floor(Math.random() * mob.length)
powerUps.spawn(mob[index].position.x, mob[index].position.y, "research"); powerUps.spawn(mob[index].position.x, mob[index].position.y, "research");
} }

View File

@@ -253,7 +253,7 @@ const tech = {
if (tech.energyDamage) dmg *= 1 + m.energy * 0.22 * tech.energyDamage; if (tech.energyDamage) dmg *= 1 + m.energy * 0.22 * tech.energyDamage;
if (tech.isDamageFromBulletCount) dmg *= 1 + bullet.length * 0.007 if (tech.isDamageFromBulletCount) dmg *= 1 + bullet.length * 0.007
if (tech.isNoFireDamage && m.cycle > m.fireCDcycle + 120) dmg *= 2 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.isDamageAfterKillNoRegen && m.lastKillCycle + 300 > m.cycle) dmg *= 1.83
if (tech.isAxion && tech.isHarmMACHO) dmg *= 2 - m.defense() if (tech.isAxion && tech.isHarmMACHO) dmg *= 2 - m.defense()
if (tech.isHarmDamage && m.lastHarmCycle + 480 > m.cycle) dmg *= 3; if (tech.isHarmDamage && m.lastHarmCycle + 480 > m.cycle) dmg *= 3;
@@ -1047,7 +1047,7 @@ const tech = {
// }, // },
{ {
name: "Newtons 1st law", name: "Newtons 1st law",
description: "<strong class='color-defense'>defense</strong> is proportional to your <strong>speed</strong><br>up to <strong>+66%</strong> <strong class='color-defense'>defense</strong> at <strong>40 speed</strong>", description: "<strong class='color-defense'>defense</strong> is proportional to your <strong>speed</strong><br>up to <strong>+88%</strong> <strong class='color-defense'>defense</strong> at <strong>55 speed</strong>",
maxCount: 1, maxCount: 1,
count: 0, count: 0,
frequency: 1, frequency: 1,
@@ -1065,7 +1065,7 @@ const tech = {
}, },
{ {
name: "Newtons 2nd law", name: "Newtons 2nd law",
description: "<strong class='color-d'>damage</strong> is proportional to your <strong>speed</strong><br>up to <strong>+66%</strong> <strong class='color-d'>damage</strong> at <strong>40 speed</strong>", description: "<strong class='color-d'>damage</strong> is proportional to your <strong>speed</strong><br>up to <strong>+88%</strong> <strong class='color-d'>damage</strong> at <strong>55 speed</strong>",
maxCount: 1, maxCount: 1,
count: 0, count: 0,
frequency: 1, frequency: 1,
@@ -8121,9 +8121,9 @@ const tech = {
frequency: 2, frequency: 2,
frequencyDefault: 2, frequencyDefault: 2,
allowed() { 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() { effect() {
tech.isTokamak = true; tech.isTokamak = true;
}, },
@@ -8775,7 +8775,7 @@ const tech = {
}, },
{ {
name: "CIWS", name: "CIWS",
description: "<strong>grappling hook</strong> uses <strong>20</strong> <strong class='color-f'>energy</strong><br> to fire <strong>harpoons</strong> at nearby mobs", description: "<strong>grappling hook</strong> uses <strong>18</strong> <strong class='color-f'>energy</strong><br> to fire <strong>harpoons</strong> at nearby mobs",
isFieldTech: true, isFieldTech: true,
maxCount: 1, maxCount: 1,
count: 0, count: 0,
@@ -8801,9 +8801,9 @@ const tech = {
frequency: 2, frequency: 2,
frequencyDefault: 2, frequencyDefault: 2,
allowed() { allowed() {
return m.fieldMode === 10 return m.fieldMode === 10 && !tech.isReel && !tech.isTokamak
}, },
requires: "grappling hook", requires: "grappling hook, not reel, tokamak",
effect() { effect() {
tech.isHookExplosion = true tech.isHookExplosion = true
}, },
@@ -8820,9 +8820,9 @@ const tech = {
frequency: 1, frequency: 1,
frequencyDefault: 1, frequencyDefault: 1,
allowed() { 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() { effect() {
tech.blockDamage = 0.375 tech.blockDamage = 0.375
tech.isReel = true tech.isReel = true

View File

@@ -1,26 +1,29 @@
******************************************************** NEXT PATCH ************************************************** ******************************************************** 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 new community map unchartedCave by 3xionDev!
tech: reel - increase block damage 400%, generate 30 energy after hooking blocks
added tokamak to grappling hook Newtons 1st law 66->88% defense when moving fast
updated rope graphics Newtons 2nd law 66->88% damage when moving fast
added input.up to adjust positioning while hook is attached CIWS energy 20->18 per shot
added images for CIWS, rupture, autonomous defense rupture disables reel and tokamak
aerostat: 25->15% reduced damage on ground
rupture unlocks explosive tech
rupture destroys blocks
autonomous defense renamed to CIWS
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 ***************************************************** *********************************************************** 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 player got stuck inside block that wasn't pick up able
grappling hook field grappling hook field