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">
<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">
<option value="1">easy</option>
<option value="1">easy</option>
<option value="2" selected>normal ⚆</option>
<option value="4">hard ⚆</option>
<option value="6">why ⚇</option>
<option value="5">why ⚇</option>
</select>
<br>
<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)
},
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 ? "<br><br><em>lore disabled</em>" : ""}
<div>
<select name="difficulty-select" id="difficulty-select-experiment">
<option value="1">easy</option>
<option value="2" selected>normal</option>
<option value="4">hard</option>
<option value="6">why</option>
<option value="2" selected>normal</option>
<option value="4">hard</option>
<option value="5">why</option>
</select>
&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>

View File

@@ -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(`<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.exit.drawAndCheck();

View File

@@ -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

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
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");
}

View File

@@ -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: "<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,
count: 0,
frequency: 1,
@@ -1065,7 +1065,7 @@ const tech = {
},
{
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,
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: "<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,
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

View File

@@ -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