images removed
images have been disabled I think they don't fit stylistically new power up: level WARP it shows up when you enter testing mode on the initial level interferometer horizontal laser now moves with the elevator LaunchSite community map updated some minor bug fixes
This commit is contained in:
@@ -1830,8 +1830,9 @@ if (localSettings.isAllowed && !localSettings.isEmpty) {
|
||||
localSettings.loreCount = 0; //this sets what conversation is heard
|
||||
if (localSettings.isAllowed) localStorage.setItem("localSettings", JSON.stringify(localSettings)); //update local storage
|
||||
}
|
||||
if (localSettings.isHideImages === undefined) localSettings.isHideImages = true //default to hide images
|
||||
document.getElementById("hide-images").checked = localSettings.isHideImages
|
||||
// if (localSettings.isHideImages === undefined) localSettings.isHideImages = true //default to hide images
|
||||
// document.getElementById("hide-images").checked = localSettings.isHideImages
|
||||
localSettings.isHideImages = true //no images
|
||||
|
||||
if (localSettings.isHideHUD === undefined) localSettings.isHideHUD = true
|
||||
document.getElementById("hide-hud").checked = localSettings.isHideHUD
|
||||
@@ -1876,7 +1877,7 @@ if (localSettings.isAllowed && !localSettings.isEmpty) {
|
||||
if (localSettings.isAllowed) localStorage.setItem("localSettings", JSON.stringify(localSettings)); //update local storage
|
||||
document.getElementById("community-maps").checked = localSettings.isCommunityMaps
|
||||
simulation.isCommunityMaps = localSettings.isCommunityMaps
|
||||
document.getElementById("hide-images").checked = localSettings.isHideImages
|
||||
// document.getElementById("hide-images").checked = localSettings.isHideImages
|
||||
document.getElementById("fps-select").value = localSettings.fpsCapDefault
|
||||
document.getElementById("banned").value = localSettings.banList
|
||||
}
|
||||
|
||||
184
js/level.js
184
js/level.js
@@ -8,8 +8,8 @@ const level = {
|
||||
defaultZoom: 1400,
|
||||
onLevel: -1,
|
||||
levelsCleared: 0,
|
||||
//see level.populateLevels: (initial, ... , (reservoir, factory, or gravityInterferometer), reactor, ... , subway, final) added later
|
||||
playableLevels: ["labs", "rooftops", "skyscrapers", "warehouse", "highrise", "office", "aerie", "satellite", "sewers", "testChamber", "pavilion", "lock", "towers", "flocculation", "gravityObservatory"],
|
||||
uniqueLevels: ["initial", "reservoir", "factory", "interferometer", "reactor", "subway", "final"], //see level.populateLevels: (initial, ... , (reservoir, factory, or interferometer), reactor, ... , subway, final) added later
|
||||
playableLevels: ["labs", "rooftops", "skyscrapers", "warehouse", "highrise", "office", "aerie", "satellite", "sewers", "testChamber", "pavilion", "lock", "towers", "flocculation", "gravitron"],
|
||||
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", "dojo", "arena", "soft", "flappyGon", "rings", "trial"],
|
||||
trainingLevels: ["walk", "crouch", "jump", "hold", "throw", "throwAt", "deflect", "heal", "fire", "nailGun", "shotGun", "superBall", "matterWave", "missile", "stack", "mine", "grenades", "harpoon"],
|
||||
levels: [],
|
||||
@@ -56,10 +56,10 @@ const level = {
|
||||
// requestAnimationFrame(() => { for (let i = 0; i < 1; i++) tech.giveTech("field coupling") });
|
||||
// for (let i = 0; i < 1; i++) tech.giveTech("interest")
|
||||
// m.lastKillCycle = m.cycle
|
||||
// for (let i = 0; i < 4; i++) powerUps.directSpawn(450, -50, "tech");
|
||||
// for (let i = 0; i < 1; i++) powerUps.directSpawn(450, -50, "warp");
|
||||
// for (let i = 0; i < 7; i++) powerUps.directSpawn(m.pos.x + 200, m.pos.y - 250, "research", false);
|
||||
// spawn.bodyRect(575, -700, 150, 150); //block mob line of site on testing
|
||||
// level.gravityInterferometer();
|
||||
// level.interferometer();
|
||||
|
||||
level[simulation.isTraining ? "walk" : "initial"]() //normal starting level **************************************************
|
||||
|
||||
@@ -778,8 +778,9 @@ const level = {
|
||||
}
|
||||
level.levels = shuffle(level.levels); //shuffles order of maps with seeded random
|
||||
level.levels.length = 9 //remove any extra levels past 9
|
||||
pick = ["gravityInterferometer", "factory", "reservoir"]
|
||||
pick = ["interferometer", "factory", "reservoir"]
|
||||
level.levels.splice(Math.floor(Math.seededRandom(level.levels.length * 0.6, level.levels.length)), 0, pick[Math.floor(Math.random() * pick.length)]); //add level to the back half of the randomized levels list
|
||||
|
||||
level.levels.splice(Math.floor(Math.seededRandom(level.levels.length * 0.6, level.levels.length)), 0, "reactor"); //add level to the back half of the randomized levels list
|
||||
if (!build.isExperimentSelection || (build.hasExperimentalMode && !simulation.isCheating)) { //experimental mode is endless, unless you only have an experiment Tech
|
||||
level.levels.unshift("initial"); //add level to the start of the randomized levels list
|
||||
@@ -3041,7 +3042,13 @@ const level = {
|
||||
wires.lineTo(2355, -690)
|
||||
wires.lineTo(2600, -690)
|
||||
|
||||
let isSpawnedWarp = false
|
||||
level.custom = () => {
|
||||
if (!isSpawnedWarp && simulation.testing) {
|
||||
isSpawnedWarp = true
|
||||
powerUps.directSpawn(m.pos.x, -900, "warp")
|
||||
// powerUps.directSpawn(2100, -1200, "warp")
|
||||
}
|
||||
//working on a message using text
|
||||
// ctx.font = "50px Arial";
|
||||
// ctx.fillStyle = "rgba(0,0,0,0.3)"
|
||||
@@ -7049,7 +7056,7 @@ const level = {
|
||||
}
|
||||
|
||||
},
|
||||
gravityInterferometer() {
|
||||
interferometer() {
|
||||
level.isVerticalFLipLevel = true
|
||||
mobs.maxMobBody = 20 //normally 40, but set to 10 to avoid too much clutter
|
||||
simulation.fallHeight = 4000
|
||||
@@ -7084,8 +7091,8 @@ const level = {
|
||||
frictionAir: 1,
|
||||
classType: "body",
|
||||
holdX: 1762,
|
||||
maxHeight: -1600,
|
||||
minHeight: 100,
|
||||
maxHeight: -1580,
|
||||
minHeight: 130,
|
||||
verticalForce: 0.03,
|
||||
isUp: false,
|
||||
drag: 0.01,
|
||||
@@ -7182,13 +7189,13 @@ const level = {
|
||||
lasers.push(level.laser({ x: -100, y: 1990 }, { x: -100, y: -2000 })) ////x, y, width, height, damage = 0.002)
|
||||
spawn.mapRect(-112, 1990, 25, 25); //laser entrance
|
||||
|
||||
balance.push(level.rotor(-1250, 1700, 400, 25, 0.01, 0, 0.5)) //balance(x, y, width, height, density = 0.001, angle = 0, frictionAir = 0.001, angularVelocity = 0, rotationForce = 0.0005) {
|
||||
balance.push(level.rotor(-750, 1700, 400, 25, 0.01, Math.PI / 2, 0.5))
|
||||
balance.push(level.rotor(-275, 1650, 550, 32, 0.01, 0, 0.5))
|
||||
balance.push(level.rotor(-1250, 1755, 400, 25, 0.01, 0, 0.5)) //balance(x, y, width, height, density = 0.001, angle = 0, frictionAir = 0.001, angularVelocity = 0, rotationForce = 0.0005) {
|
||||
balance.push(level.rotor(-750, 1755, 400, 25, 0.01, Math.PI / 2, 0.5))
|
||||
balance.push(level.rotor(-275, 1675, 550, 32, 0.01, 0, 0.5))
|
||||
|
||||
lasers.push(level.laser({ x: -1625, y: -850 }, { x: 1980, y: -850 })) ////x, y, width, height, damage = 0.002)
|
||||
spawn.mapRect(1980, -862, 25, 25); //laser entrance
|
||||
balance.push(level.rotor(1000, -910, 550, 32, 0.01, 0, 0.5))
|
||||
// spawn.mapRect(1980, -862, 25, 25); //laser entrance
|
||||
// balance.push(level.rotor(1000, -910, 550, 32, 0.01, 0, 0.5))
|
||||
|
||||
//left side
|
||||
//level entrance
|
||||
@@ -7206,7 +7213,6 @@ const level = {
|
||||
spawn.mapVertex(-850, 840, "-225 -475 0 -500 225 -475 225 475 -225 475");
|
||||
spawn.mapVertex(-350, 840, "-225 -475 0 -500 225 -475 225 475 -225 475");
|
||||
|
||||
|
||||
//lower right side
|
||||
//far right wall ledges
|
||||
spawn.mapRect(1925, -1700, 200, 200);
|
||||
@@ -7233,14 +7239,12 @@ const level = {
|
||||
spawn.mapRect(475, 1987, 550, 50);
|
||||
|
||||
//ceiling zone
|
||||
spawn.mapRect(1200, -1625, 400, 25);
|
||||
spawn.mapRect(-75, -1625, 1075, 25);
|
||||
spawn.mapRect(1200, -1600, 400, 25);
|
||||
spawn.mapRect(-75, -1725, 1075, 25);
|
||||
spawn.mapRect(-575, -1625, 450, 25);
|
||||
spawn.mapRect(-1075, -1850, 450, 25);
|
||||
spawn.mapRect(325, -1825, 575, 25);
|
||||
spawn.mapRect(-1075, -1425, 450, 25);
|
||||
spawn.mapRect(-1675, -1588, 550, 25);
|
||||
|
||||
}
|
||||
let buildVerticalFLippedMap = function () { // flip Y with this -> spawn.mapRect(x, -y - h, w, h);
|
||||
buttons.push(level.button(-1895, 1600, 126, true, true, "hsl(330, 100%, 50%)"))
|
||||
@@ -7267,14 +7271,13 @@ const level = {
|
||||
lasers.push(level.laser({ x: -100, y: -1990 }, { x: -100, y: 2000 })) ////x, y, width, height, damage = 0.002)
|
||||
spawn.mapRect(-112, -1990 - 25, 25, 25); //laser entrance
|
||||
|
||||
balance.push(level.rotor(-1250, -1700 - 25, 400, 25, 0.01, 0, 0.5)) //balance(x, y, width, height, density = 0.001, angle = 0, frictionAir = 0.001, angularVelocity = 0, rotationForce = 0.0005) {
|
||||
balance.push(level.rotor(-750, -1700 - 25, 400, 25, 0.01, Math.PI / 2, 0.5))
|
||||
balance.push(level.rotor(-250, -1650 - 32, 500, 32, 0.01, 0, 0.5))
|
||||
balance.push(level.rotor(-1250, -1755 - 25, 400, 25, 0.01, 0, 0.5)) //balance(x, y, width, height, density = 0.001, angle = 0, frictionAir = 0.001, angularVelocity = 0, rotationForce = 0.0005) {
|
||||
balance.push(level.rotor(-750, -1755 - 25, 400, 25, 0.01, Math.PI / 2, 0.5))
|
||||
balance.push(level.rotor(-250, -1675 - 32, 500, 32, 0.01, 0, 0.5))
|
||||
|
||||
lasers.push(level.laser({ x: -1625, y: 850 }, { x: 1980, y: 850 })) ////x, y, width, height, damage = 0.002)
|
||||
spawn.mapRect(1980, 862 - 25, 25, 25); //laser entrance
|
||||
balance.push(level.rotor(1000, 910 - 32, 550, 32, 0.01, 0, 0.5))
|
||||
|
||||
// spawn.mapRect(1980, 862 - 25, 25, 25); //laser entrance
|
||||
// balance.push(level.rotor(1000, 910 - 32, 550, 32, 0.01, 0, 0.5))
|
||||
|
||||
//left side
|
||||
//level entrance
|
||||
@@ -7313,11 +7316,11 @@ const level = {
|
||||
spawn.mapRect(475, -1987 - 50, 550, 50);
|
||||
|
||||
//ceiling zone
|
||||
spawn.mapRect(1200, 1625 - 25, 400, 25);
|
||||
spawn.mapRect(-75, 1625 - 25, 1075, 25);
|
||||
spawn.mapRect(1200, 1575, 400, 25);
|
||||
spawn.mapRect(-75, 1700, 1075, 25);
|
||||
spawn.mapRect(-575, 1625 - 25, 450, 25);
|
||||
spawn.mapRect(-1075, 1850 - 25, 450, 25);
|
||||
spawn.mapRect(325, 1825 - 25, 575, 25);
|
||||
|
||||
spawn.mapRect(-1075, 1425 - 25, 450, 25);
|
||||
spawn.mapRect(-1675, 1588 - 25, 550, 25);
|
||||
}
|
||||
@@ -7386,6 +7389,10 @@ const level = {
|
||||
buildNormalMap()
|
||||
level.custom = () => {
|
||||
elevator.move()
|
||||
// console.log(elevator)
|
||||
lasers[lasers.length - 1].look.y = elevator.position.y
|
||||
lasers[lasers.length - 1].position.y = elevator.position.y
|
||||
|
||||
for (let i = 0; i < buttons.length; i++) {
|
||||
buttons[i].draw()
|
||||
if (buttons[i].isUp && !isFlipping) {
|
||||
@@ -7500,13 +7507,17 @@ const level = {
|
||||
ctx.fillRect(-2025, 2025 - 450, 400, 450);
|
||||
//shadows
|
||||
ctx.fillStyle = "rgba(0,0,0,0.08)"
|
||||
ctx.fillRect(-2025, -2075, 900, 775);
|
||||
ctx.fillRect(-1075, -2025, 450, 725);
|
||||
ctx.fillRect(-575, -2025, 450, 725);
|
||||
|
||||
ctx.fillRect(175, -250 - 725, 325, 725);
|
||||
ctx.fillRect(650, -350 - 975, 475, 975);
|
||||
ctx.fillRect(375, -1650 - 400, 750, 400);
|
||||
//ceiling
|
||||
ctx.fillStyle = "rgba(0,0,0,0.04)"
|
||||
ctx.fillRect(1225, 2025 - 425, 350, 425);
|
||||
ctx.fillRect(-50, 2025 - 425, 1025, 425);
|
||||
ctx.fillRect(1225, 2025 - 450, 350, 450);
|
||||
ctx.fillRect(-50, 1700, 1025, 325);
|
||||
ctx.fillRect(-550, 2025 - 425, 400, 425);
|
||||
ctx.fillRect(-1050, 2025 - 625, 400, 625);
|
||||
ctx.fillRect(-1625, 2025 - 450, 475, 450);
|
||||
@@ -7514,13 +7525,17 @@ const level = {
|
||||
ctx.fillRect(-2025, -2025, 400, 450);
|
||||
//shadows
|
||||
ctx.fillStyle = "rgba(0,0,0,0.08)"
|
||||
ctx.fillRect(-2025, 1300, 900, 775);
|
||||
ctx.fillRect(-1075, 1300, 450, 725);
|
||||
ctx.fillRect(-575, 1300, 450, 725);
|
||||
|
||||
ctx.fillRect(175, 250, 325, 725);
|
||||
ctx.fillRect(650, 350, 475, 975);
|
||||
ctx.fillRect(375, 1650, 750, 400);
|
||||
//ceiling
|
||||
ctx.fillStyle = "rgba(0,0,0,0.04)"
|
||||
ctx.fillRect(1225, -2025, 350, 425);
|
||||
ctx.fillRect(-50, -2025, 1025, 425);
|
||||
ctx.fillRect(1225, -2025, 350, 450);
|
||||
ctx.fillRect(-50, -2025, 1025, 325);
|
||||
ctx.fillRect(-550, -2025, 400, 425);
|
||||
ctx.fillRect(-1050, -2025, 400, 625);
|
||||
ctx.fillRect(-1625, -2025, 475, 450);
|
||||
@@ -7569,7 +7584,7 @@ const level = {
|
||||
spawn.randomLevelBoss(-875, -200);
|
||||
powerUps.addResearchToLevel() //needs to run after mobs are spawned
|
||||
},
|
||||
gravityObservatory() {
|
||||
gravitron() {
|
||||
mobs.maxMobBody = 25 //normally 40, but set lower to avoid too much clutter
|
||||
level.isVerticalFLipLevel = true
|
||||
simulation.fallHeight = 4000
|
||||
@@ -7778,13 +7793,13 @@ const level = {
|
||||
buildNormalMap()
|
||||
level.custom = () => {
|
||||
//stuff floats near buttons
|
||||
if ((player.position.x > -3505 && player.position.x < -3075) ||
|
||||
(player.position.x > 0 && player.position.x < 425) ||
|
||||
(player.position.x > 3575)) {
|
||||
if (player.position.y > 0) {
|
||||
player.force.y -= 0.8 * simulation.g * player.mass
|
||||
}
|
||||
}
|
||||
// if ((player.position.x > -3505 && player.position.x < -3075) ||
|
||||
// (player.position.x > 0 && player.position.x < 425) ||
|
||||
// (player.position.x > 3575)) {
|
||||
// if (player.position.y > 0) {
|
||||
// player.force.y -= 0.8 * simulation.g * player.mass
|
||||
// }
|
||||
// }
|
||||
for (let i = 0; i < body.length; i++) {
|
||||
if ((body[i].position.x > -3505 && body[i].position.x < -3075) ||
|
||||
(body[i].position.x > 0 && body[i].position.x < 425) ||
|
||||
@@ -31644,6 +31659,7 @@ const level = {
|
||||
level.setPosToSpawn(0, -50); //normal spawn
|
||||
const elevatortoggle = level.toggle(13650, 3000)
|
||||
let newMobsSpawned = false;
|
||||
let leverTimer = 0;
|
||||
level.exit.x = 11900;
|
||||
level.exit.y = -800;
|
||||
const boost1 = level.boost(12050, 200, 1000)
|
||||
@@ -31670,6 +31686,24 @@ const level = {
|
||||
powerUps.spawn(8650, 2000, "ammo")
|
||||
level.custom = () => {
|
||||
|
||||
ctx.fillStyle = `rgba(68, 68, 68)`
|
||||
ctx.fillRect(11450, 700, 50, 125);
|
||||
ctx.fillRect(11425, 750, 75, 75);
|
||||
if (newMobsSpawned) {
|
||||
// ctx.fillStyle = `#00FFFF22`;
|
||||
ctx.fillStyle = `rgba(0, 255, 255, ${leverTimer / 5})`
|
||||
ctx.fillRect(11500, 700, 450, 2375 + 100)
|
||||
ctx.fill()
|
||||
ctx.fillStyle = `#00f2ff`
|
||||
ctx.fillRect(11500 + Math.floor(Math.random() * 450), 700, 5, 2375 + 100)
|
||||
ctx.fillRect(11500 + Math.floor(Math.random() * 450), 700, 5, 2375 + 100)
|
||||
ctx.fill()
|
||||
|
||||
if (m.pos.x > 11500 && m.pos.x < 11950 && m.pos.y > 800 && m.pos.y < 2700) {
|
||||
player.force.y -= m.mass * simulation.g + (input.down ? 0 : 0.012 * 4);
|
||||
}
|
||||
}
|
||||
|
||||
//light rain
|
||||
ctx.beginPath()
|
||||
ctx.fillStyle = "rgba(30,150,117,255)"
|
||||
@@ -31687,8 +31721,8 @@ const level = {
|
||||
|
||||
elevatortoggle.query();
|
||||
if (elevatortoggle.isOn) {
|
||||
elevator1.move();
|
||||
if (newMobsSpawned == false) {
|
||||
leverTimer += 0.0125;
|
||||
//last room mobs
|
||||
spawn.randomSmallMob(11723.3, -127.5);
|
||||
spawn.randomSmallMob(10525.2, 727.5);
|
||||
@@ -31698,9 +31732,12 @@ const level = {
|
||||
spawn.randomGroup(11066.3, 560.4, 0.4);
|
||||
newMobsSpawned = true;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
if (leverTimer > 0 && leverTimer < 1) {
|
||||
leverTimer += 0.0125
|
||||
}
|
||||
|
||||
ctx.fillStyle = "rgba(0,0,0,0.3)"
|
||||
ctx.beginPath()
|
||||
ctx.moveTo(5150, 1050)
|
||||
@@ -31730,6 +31767,7 @@ const level = {
|
||||
ctx.lineTo(12050, -280)
|
||||
ctx.lineTo(11950, -280)
|
||||
ctx.fill()
|
||||
|
||||
//ladder
|
||||
ctx.fillRect(12065, -770, 20, 870)
|
||||
ctx.fillRect(12115, -770, 20, 870)
|
||||
@@ -31749,11 +31787,6 @@ const level = {
|
||||
ctx.fillRect(12055, 0, 90, 15)
|
||||
ctx.fillRect(12055, 60, 90, 15)
|
||||
|
||||
//elevator line
|
||||
ctx.fillStyle = "rgba(0,0,0,0.8)"
|
||||
ctx.fillRect(11724, 800, 1, 3500)
|
||||
|
||||
|
||||
//post rocket shadows
|
||||
ctx.fillStyle = "rgba(0,0,0,0.3)"
|
||||
ctx.fillRect(10000, 510, 50, 700)
|
||||
@@ -31773,6 +31806,7 @@ const level = {
|
||||
ctx.lineTo(5700, 2300)
|
||||
ctx.lineTo(5884.8, 380.1)
|
||||
ctx.fill()
|
||||
|
||||
//boss room shadow
|
||||
ctx.fillRect(11950, 2000, 5000, 1100)
|
||||
ctx.fillRect(12150, -25, 3000, 250)
|
||||
@@ -31781,7 +31815,6 @@ const level = {
|
||||
level.exit.drawAndCheck();
|
||||
|
||||
level.enter.draw();
|
||||
|
||||
}
|
||||
|
||||
level.customTopLayer = () => {
|
||||
@@ -31790,19 +31823,16 @@ const level = {
|
||||
} else {
|
||||
ctx.fillStyle = `rgba(68, 68, 68, 68)`
|
||||
}
|
||||
|
||||
ctx.fillRect(12150, -30, 1600, 1000)
|
||||
mover.draw();
|
||||
|
||||
|
||||
//vanishing platform
|
||||
vanisher.query();
|
||||
|
||||
|
||||
//rocket
|
||||
|
||||
ctx.fillStyle = "rgba(202,88,0,1)"
|
||||
ctx.fillRect(6800, -1000, 600, 2800)
|
||||
//ctx.beginPath()
|
||||
ctx.beginPath()
|
||||
ctx.moveTo(7400, -998)//base right
|
||||
ctx.lineTo(7350, -1400)//1/3rd up
|
||||
@@ -31819,18 +31849,21 @@ const level = {
|
||||
ctx.fillRect(6800, 1700, 600, 300)
|
||||
ctx.fillRect(6450, -400, 250, 2100)
|
||||
ctx.fillRect(7500, -400, 250, 2100)
|
||||
|
||||
//right engine
|
||||
ctx.beginPath()
|
||||
ctx.moveTo(6450, -398)//base right
|
||||
ctx.lineTo(6575, -900)//peak
|
||||
ctx.lineTo(6700, -398)//baseleft
|
||||
ctx.fill()
|
||||
|
||||
//right engine
|
||||
ctx.beginPath()
|
||||
ctx.moveTo(7500, -398)//base right
|
||||
ctx.lineTo(7625, -900)//peak
|
||||
ctx.lineTo(7750, -398)//baseleft
|
||||
ctx.fill()
|
||||
|
||||
//right wing
|
||||
ctx.beginPath()
|
||||
ctx.moveTo(6910, 450)
|
||||
@@ -31839,6 +31872,7 @@ const level = {
|
||||
ctx.lineTo(6250, 1600)
|
||||
ctx.lineTo(6780, 1030)
|
||||
ctx.fill()
|
||||
|
||||
//left wing
|
||||
ctx.beginPath()
|
||||
ctx.moveTo((7100 - 6910) + 7100, 450)
|
||||
@@ -31859,8 +31893,8 @@ const level = {
|
||||
ctx.lineTo(6900, 2)//baseleft
|
||||
ctx.fill()
|
||||
|
||||
ctx.fillStyle = "rgba(0,0,0,1)"
|
||||
//right wing outline
|
||||
ctx.fillStyle = "rgba(0,0,0,1)"
|
||||
ctx.beginPath()
|
||||
ctx.moveTo((7100 - 6250) + 7100, 1700)
|
||||
ctx.lineTo((7100 - 6250) + 7100, 1600)
|
||||
@@ -31869,6 +31903,7 @@ const level = {
|
||||
ctx.lineTo((7100 - 6800) + 7100, 1030)
|
||||
ctx.lineTo((7100 - 6290) + 7100, 1600)
|
||||
ctx.fill()
|
||||
|
||||
//left wing outline
|
||||
ctx.beginPath()
|
||||
ctx.moveTo(6250, 1700)
|
||||
@@ -31878,16 +31913,24 @@ const level = {
|
||||
ctx.lineTo(6800, 1030)
|
||||
ctx.lineTo(6290, 1600)
|
||||
ctx.fill()
|
||||
|
||||
ctx.fillRect(6800, 2000, 600, 50)
|
||||
ctx.fillRect(6850, 2050, 500, 150)
|
||||
|
||||
|
||||
|
||||
//light
|
||||
if (elevatortoggle.isOn) {
|
||||
ctx.fillStyle = `rgba(242, 255, 0, ${3 * Math.sqrt(leverTimer) / 10})`
|
||||
ctx.beginPath()
|
||||
ctx.moveTo(13070, 2012)
|
||||
ctx.lineTo(12930, 2012)
|
||||
ctx.lineTo(12230, 2700)
|
||||
ctx.lineTo(13770, 2700)
|
||||
ctx.fill()
|
||||
}
|
||||
|
||||
//shadows
|
||||
ctx.fillStyle = "rgba(0,0,0,0.3)"
|
||||
//ctx.fillRect(-272, -580, 1700, 600)
|
||||
ctx.beginPath()
|
||||
ctx.moveTo(1800, -400)
|
||||
ctx.lineTo(2500, 300)
|
||||
@@ -31901,16 +31944,10 @@ const level = {
|
||||
ctx.lineTo(1522.9, 2431.8)
|
||||
ctx.lineTo(983.5, 887.3)
|
||||
ctx.fill()
|
||||
//ctx.rect(6800, 0, 600, 1800)
|
||||
|
||||
//move elevator
|
||||
//elevator1.move();
|
||||
//elevator2.move();
|
||||
|
||||
|
||||
|
||||
};
|
||||
|
||||
//GEOMETRY
|
||||
|
||||
//vanishing platform
|
||||
var vanisher = level.vanish(10250, 201, 500, 20);
|
||||
|
||||
@@ -31925,20 +31962,14 @@ const level = {
|
||||
spawn.mapRect(9500, -1500, 500, 2300);
|
||||
|
||||
|
||||
//-9000, +2000
|
||||
spawn.mapRect(2500, 0, 3200, 500);
|
||||
spawn.mapRect(5700, 0, 500, 2300);
|
||||
|
||||
spawn.mapRect(1800, 1100, 800, 2600);
|
||||
spawn.mapRect(2600, 1660, 1800, 2040);
|
||||
spawn.mapRect(1800, -495, 200, 100);
|
||||
spawn.mapVertex(2400, -230, "0 10 900 510 800 510 750 510 0 110");
|
||||
|
||||
|
||||
|
||||
|
||||
//stairs
|
||||
|
||||
spawn.mapRect(2600, 1150, 50, 550);
|
||||
spawn.mapRect(2650, 1200, 50, 500);
|
||||
spawn.mapRect(2700, 1250, 50, 450);
|
||||
@@ -31956,10 +31987,8 @@ const level = {
|
||||
spawn.mapRect(4685, 1300, 50, 550);
|
||||
spawn.mapRect(4400, 2000, 550, 50);
|
||||
spawn.mapRect(5150, 1000, 550, 50);
|
||||
|
||||
spawn.mapVertex(5500, 1550, "0 0 -500 600 100 0 -400 600");
|
||||
|
||||
|
||||
//second room
|
||||
spawn.mapRect(8000, 0, 1500, 2300);
|
||||
spawn.mapRect(6200, 2200, 1800, 100);
|
||||
@@ -31980,6 +32009,9 @@ const level = {
|
||||
spawn.mapRect(10900, 2050, 400, 50);
|
||||
spawn.mapRect(10950, 2000, 550, 700);
|
||||
|
||||
//light
|
||||
spawn.mapRect(12925, 2000, 150, 12);
|
||||
|
||||
//roof over stairs
|
||||
spawn.mapRect(9500, 1200, 1000, 500);
|
||||
spawn.mapRect(9500, 2200, 500, 100);
|
||||
@@ -32005,10 +32037,9 @@ const level = {
|
||||
spawn.mapRect(11800, -1500, 350, 400);
|
||||
spawn.mapRect(12150, -1500, 3000, 1500);
|
||||
spawn.mapRect(13700, 0, 2000, 800);
|
||||
|
||||
spawn.mapRect(13200, 550, 50, 300);
|
||||
|
||||
|
||||
//MOBS
|
||||
|
||||
|
||||
//mobs in first room
|
||||
@@ -32024,9 +32055,6 @@ const level = {
|
||||
spawn.randomMob(13381.7, 2437.2, 0.8);
|
||||
spawn.randomGroup(10472.4, 2079.0, 0.4);
|
||||
|
||||
|
||||
|
||||
|
||||
//boss room
|
||||
spawn.randomLevelBoss(12786, 2461, ["launcherBoss", "laserTargetingBoss", "blinkBoss", "streamBoss", "historyBoss", "grenadierBoss", "blockBoss", "revolutionBoss", "slashBoss"]);
|
||||
spawn.mapRect(13500, 3000, 500, 400);
|
||||
@@ -32035,11 +32063,6 @@ const level = {
|
||||
//extra boss
|
||||
spawn.randomLevelBoss(12808.8, 527.0, ["blinkBoss"]);
|
||||
|
||||
//elavators
|
||||
const elevator1 = level.elevator(11500, 2680, 450, 20, 800, 0.0025, { up: 0.1, down: 0.2 }) //x, y, width, height, maxHeight, force = 0.003, friction = { up: 0.01, down: 0.2 }) {
|
||||
//const elevator2 = level.elevator(11500, 1821, 20, 675, 1121, 0.0025, { up: 0.1, down: 0.2 }) //x, y, width, height, maxHeight, force = 0.003, friction = { up: 0.01, down: 0.2 }) {
|
||||
//const elevator1 = level.elevator(-1625, -90, 310, 800, -2000, 0.0025, { up: 0.1, down: 0.2 }) //x, y, width, height, maxHeight, force = 0.003, friction = { up: 0.01, down: 0.2 }) {
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -32053,6 +32076,7 @@ const level = {
|
||||
// if (simulation.difficulty > 1) spawn.randomLevelBoss(2200, -1300);
|
||||
// spawn.secondaryBossChance(100, -1500)
|
||||
powerUps.addResearchToLevel() //needs to run after mobs are spawned
|
||||
|
||||
},
|
||||
shipwreck() {
|
||||
simulation.inGameConsole(`<strong>shipwreck</strong> by <span class='color-var'>3xionDev</span>`);
|
||||
|
||||
@@ -373,8 +373,9 @@ const powerUps = {
|
||||
document.getElementById("choose-grid").classList.remove('choose-grid');
|
||||
document.getElementById("choose-grid").style.gridTemplateColumns = "800px"//adjust this to increase the width of the whole menu, but mostly the center column
|
||||
let lore = localSettings.loreCount > 0 ? "lore.unlockTesting() //press T to enter testing" : ""
|
||||
let text = `<div class="grid-container" style = "font-size:1rem;"><pre> <strong>//console commands</strong>
|
||||
let text = `<div class="grid-container" style = "font-size:1rem;padding: 0px;"><pre> <strong>//console commands</strong>
|
||||
powerUps.instructions.effect() //reproduce this message
|
||||
powerUps.warp.effect() //warp to any level
|
||||
tech.giveTech("name") //replace "name" with tech name
|
||||
m.setField("name") //standing wave perfect diamagnetism negative mass molecular assembler plasma torch time dilation metamaterial cloaking pilot wave wormhole grappling hook
|
||||
b.giveGuns("name") //nail gun shotgun super balls wave missiles grenades spores drones foam harpoon mine laser
|
||||
@@ -386,14 +387,18 @@ const powerUps = {
|
||||
m.maxEnergy = 1 //set max energy
|
||||
simulation.enableConstructMode() //press T to build with mouse
|
||||
${lore}
|
||||
powerUps.spawn(m.pos.x, m.pos.y, "name") //tech gun field heal ammo research coupling boost instructions entanglement
|
||||
|
||||
Matter.Body.setPosition(player, simulation.mouseInGame);
|
||||
spawn.bodyRect(simulation.mouseInGame.x, simulation.mouseInGame.y, 50, 50)
|
||||
spawn.randomLevelBoss(simulation.mouseInGame.x, simulation.mouseInGame.y)
|
||||
<strong>chrome</strong> <strong>firefox</strong>
|
||||
spawn.randomLevelBoss(simulation.mouseInGame.x, simulation.mouseInGame.y)
|
||||
powerUps.spawn(m.pos.x, m.pos.y, "name") //tech gun field heal ammo research coupling boost instructions entanglement
|
||||
|
||||
//this URL downloads newest version of n-gon
|
||||
https://codeload.github.com/landgreen/n-gon/zip/refs/heads/master
|
||||
|
||||
<strong>chrome</strong> <strong>firefox</strong>
|
||||
<strong>Win/Linux:</strong> Ctrl + Shift + J Ctrl + Shift + J
|
||||
<strong>Mac:</strong> Cmd + Option + J Cmd + Shift + J</pre></div>
|
||||
<div class="choose-grid-module" id="exit" style="text-align: center;font-size: 1.3rem;">exit</div>`
|
||||
<strong>Mac:</strong> Cmd + Option + J Cmd + Shift + J</pre></div><div class="choose-grid-module" id="exit" style="text-align: center;font-size: 1.3rem;">exit</div>`
|
||||
document.getElementById("choose-grid").innerHTML = text
|
||||
//show level info
|
||||
document.getElementById("choose-grid").style.opacity = "1"
|
||||
@@ -413,6 +418,77 @@ const powerUps = {
|
||||
});
|
||||
},
|
||||
},
|
||||
warp: {
|
||||
name: "warp",
|
||||
color: "rgb(110,155,160)",
|
||||
size() {
|
||||
return 30
|
||||
},
|
||||
load(name) {
|
||||
level.levels[level.onLevel + 1] = name
|
||||
powerUps.warp.exit()
|
||||
level.nextLevel();
|
||||
// simulation.clearNow = true
|
||||
},
|
||||
exit() {
|
||||
level.unPause()
|
||||
document.body.style.cursor = "none";
|
||||
//reset hide image style
|
||||
if (localSettings.isHideImages) {
|
||||
document.getElementById("choose-grid").classList.add('choose-grid-no-images');
|
||||
document.getElementById("choose-grid").classList.remove('choose-grid');
|
||||
} else {
|
||||
document.getElementById("choose-grid").classList.add('choose-grid');
|
||||
document.getElementById("choose-grid").classList.remove('choose-grid-no-images');
|
||||
}
|
||||
},
|
||||
effect() {
|
||||
requestAnimationFrame(() => { //add a background behind the power up menu
|
||||
ctx.fillStyle = `rgba(150,150,150,0.9)`;
|
||||
ctx.fillRect(0, 0, canvas.width, canvas.height);
|
||||
});
|
||||
powerUps.animatePowerUpGrab('rgba(0, 0, 0,0.6)')
|
||||
|
||||
if (!simulation.paused) {
|
||||
simulation.paused = true;
|
||||
simulation.isChoosing = true; //stops p from un pausing on key down
|
||||
document.body.style.cursor = "auto";
|
||||
document.getElementById("choose-grid").style.pointerEvents = "auto";
|
||||
document.getElementById("choose-grid").style.transitionDuration = "0s";
|
||||
}
|
||||
//build level info
|
||||
document.getElementById("choose-grid").classList.add('choose-grid-no-images');
|
||||
document.getElementById("choose-grid").classList.remove('choose-grid');
|
||||
document.getElementById("choose-grid").style.gridTemplateColumns = "200px"//adjust this to increase the width of the whole menu, but mostly the center column
|
||||
let levelChoices = `<div class="choose-grid-module" style="font-size: 1.5rem;color:rgb(110,155,160);text-align:center;"><strong>WARP</strong></div>`
|
||||
levelChoices += `<div class="choose-grid-module" style="font-size: 1rem;color:rgb(110,155,160);background-color:#444;text-align:center;">level.uniqueLevels</div>`
|
||||
for (let i = 0; i < level.uniqueLevels.length; i++) {
|
||||
levelChoices += `<div class="choose-grid-module" style="font-size: 1rem;padding-left:5px;" onclick="powerUps.warp.load('${level.uniqueLevels[i]}')">${level.uniqueLevels[i]}</div>` //id="uniqueLevels-warp-${i}"
|
||||
}
|
||||
levelChoices += `<div class="choose-grid-module" style="color:rgb(110,155,160);background-color:#444;text-align:center;">level.playableLevels</div>`
|
||||
for (let i = 0; i < level.playableLevels.length; i++) {
|
||||
levelChoices += `<div class="choose-grid-module" style="padding-left:5px;" onclick="powerUps.warp.load('${level.playableLevels[i]}')">${level.playableLevels[i]}</div>`
|
||||
}
|
||||
levelChoices += `<div class="choose-grid-module" style="color:rgb(110,155,160);background-color:#444;text-align:center;">level.communityLevels</div>`
|
||||
for (let i = 0; i < level.communityLevels.length; i++) {
|
||||
levelChoices += `<div class="choose-grid-module" style="padding-left:5px;" onclick="powerUps.warp.load('${level.communityLevels[i]}')">${level.communityLevels[i]}</div>`
|
||||
}
|
||||
levelChoices += `<div class="choose-grid-module" style="color:rgb(110,155,160);background-color:#444;text-align:center;">level.trainingLevels</div>`
|
||||
for (let i = 0; i < level.trainingLevels.length; i++) {
|
||||
levelChoices += `<div class="choose-grid-module" style="padding-left:5px;" onclick="powerUps.warp.load('${level.trainingLevels[i]}')">${level.trainingLevels[i]}</div>`
|
||||
}
|
||||
let text = `${levelChoices} <div class="choose-grid-module" id="exit" style="font-size: 1.4rem;color:rgb(110,155,160);text-align:right;padding-right:5px;"><strong>exit</strong></div>`
|
||||
document.getElementById("choose-grid").innerHTML = text
|
||||
//show level info
|
||||
document.getElementById("choose-grid").style.opacity = "1"
|
||||
document.getElementById("choose-grid").style.transitionDuration = "0.3s"; //how long is the fade in on
|
||||
document.getElementById("choose-grid").style.visibility = "visible"
|
||||
|
||||
document.getElementById("exit").addEventListener("click", () => {
|
||||
powerUps.warp.exit()
|
||||
});
|
||||
},
|
||||
},
|
||||
difficulty: {
|
||||
name: "difficulty",
|
||||
color: "#000",
|
||||
|
||||
30
js/tech.js
30
js/tech.js
@@ -1560,7 +1560,7 @@ const tech = {
|
||||
{
|
||||
name: "enthalpy",
|
||||
descriptionFunction() {
|
||||
return `after mobs <strong>die</strong><br>they have an <strong>8%</strong> chance to spawn ${powerUps.orb.heal(1)}`
|
||||
return `<strong>8%</strong> chance to spawn ${powerUps.orb.heal(1)} after mobs <strong>die</strong>`
|
||||
},
|
||||
maxCount: 9,
|
||||
count: 0,
|
||||
@@ -1642,7 +1642,7 @@ const tech = {
|
||||
{
|
||||
name: "scrap refit",
|
||||
link: `<a target="_blank" href='https://en.wikipedia.org/wiki/Scrap' class="link">scrap refit</a>`,
|
||||
description: "after mobs <strong>die</strong><br>reset scrap <strong class='color-bot'>bots</strong> to <strong>15</strong> seconds of operation",
|
||||
description: "after mobs <strong>die</strong> reset scrap <strong class='color-bot'>bots</strong><br>to <strong>15</strong> seconds of operation",
|
||||
maxCount: 1,
|
||||
count: 0,
|
||||
frequency: 3,
|
||||
@@ -1662,7 +1662,7 @@ const tech = {
|
||||
{
|
||||
name: "nail-bot",
|
||||
link: `<a target="_blank" href='https://en.wikipedia.org/wiki/Robot' class="link">nail-bot</a>`,
|
||||
description: "construct a <strong class='color-bot'>bot</strong> fires <strong>nails</strong> at mobs in line of sight",
|
||||
description: "construct a <strong class='color-bot'>bot</strong> that fires <strong>nails</strong> at mobs",
|
||||
maxCount: 9,
|
||||
count: 0,
|
||||
frequency: 1,
|
||||
@@ -1720,7 +1720,7 @@ const tech = {
|
||||
{
|
||||
name: "foam-bot",
|
||||
link: `<a target="_blank" href='https://en.wikipedia.org/wiki/Robot' class="link">foam-bot</a>`,
|
||||
description: "construct a <strong class='color-bot'>bot</strong> sprays sticky <strong>foam</strong> at nearby mobs",
|
||||
description: "construct a <strong class='color-bot'>bot</strong> that sprays sticky <strong>foam</strong> at mobs",
|
||||
maxCount: 9,
|
||||
count: 0,
|
||||
frequency: 1,
|
||||
@@ -1778,7 +1778,7 @@ const tech = {
|
||||
{
|
||||
name: "sound-bot",
|
||||
link: `<a target="_blank" href='https://en.wikipedia.org/wiki/Robot' class="link">sound-bot</a>`,
|
||||
description: "construct a <strong class='color-bot'>bot</strong> emits expanding<br>arcs of <strong>sound</strong> aimed towards nearby mobs",
|
||||
description: "construct a <strong class='color-bot'>bot</strong> that emits expanding<br>arcs of <strong>sound</strong> aimed towards nearby mobs",
|
||||
maxCount: 9,
|
||||
count: 0,
|
||||
frequency: 1,
|
||||
@@ -1834,7 +1834,7 @@ const tech = {
|
||||
{
|
||||
name: "boom-bot",
|
||||
link: `<a target="_blank" href='https://en.wikipedia.org/wiki/Robot' class="link">boom-bot</a>`,
|
||||
description: "construct a <strong class='color-bot'>bot</strong> <strong>defends</strong> the space around you<br>ignites an <strong class='color-e'>explosion</strong> after hitting a mob",
|
||||
description: "construct a <strong class='color-bot'>bot</strong> that <strong class='color-e'>explodes</strong> nearby mobs",
|
||||
maxCount: 9,
|
||||
count: 0,
|
||||
frequency: 1,
|
||||
@@ -1892,7 +1892,7 @@ const tech = {
|
||||
{
|
||||
name: "laser-bot",
|
||||
link: `<a target="_blank" href='https://en.wikipedia.org/wiki/Robot' class="link">laser-bot</a>`,
|
||||
description: "construct a <strong class='color-bot'>bot</strong> uses <strong class='color-f'>energy</strong> to emit a <strong class='color-laser'>laser</strong><br>that targets nearby mobs",
|
||||
description: "construct a <strong class='color-bot'>bot</strong> that uses <strong class='color-f'>energy</strong> to emit<br>a <strong class='color-laser'>laser</strong> that targets mobs",
|
||||
maxCount: 9,
|
||||
count: 0,
|
||||
frequency: 1,
|
||||
@@ -1950,7 +1950,7 @@ const tech = {
|
||||
{
|
||||
name: "orbital-bot",
|
||||
link: `<a target="_blank" href='https://en.wikipedia.org/wiki/Robot' class="link">orbital-bot</a>`,
|
||||
description: "construct a <strong class='color-bot'>bot</strong> is locked in <strong>orbit</strong> around you<br><strong>stuns</strong> and <strong class='color-d'>damages</strong> mobs on <strong>contact</strong>",
|
||||
description: "construct a <strong class='color-bot'>bot</strong> locked in <strong>orbit</strong> around you<br>that <strong>stuns</strong> and <strong class='color-d'>damages</strong> mobs",
|
||||
maxCount: 9,
|
||||
count: 0,
|
||||
frequency: 1,
|
||||
@@ -2017,7 +2017,7 @@ const tech = {
|
||||
{
|
||||
name: "dynamo-bot",
|
||||
link: `<a target="_blank" href='https://en.wikipedia.org/wiki/Robot' class="link">dynamo-bot</a>`,
|
||||
description: "construct a <strong class='color-bot'>bot</strong> <strong class='color-d'>damages</strong> mobs it touches<br><strong>+8</strong> <strong class='color-f'>energy</strong> per second when nearby",
|
||||
description: "construct a <strong class='color-bot'>bot</strong> that <strong class='color-d'>damages</strong> mobs and<br>generates <strong>+8</strong> <strong class='color-f'>energy</strong> per second when nearby",
|
||||
maxCount: 9,
|
||||
count: 0,
|
||||
frequency: 1,
|
||||
@@ -2170,7 +2170,7 @@ const tech = {
|
||||
{
|
||||
name: "ersatz bots",
|
||||
link: `<a target="_blank" href='https://en.wikipedia.org/wiki/Ersatz_good' class="link">ersatz bots</a>`,
|
||||
description: `<strong>double</strong> your current permanent <strong class='color-bot'>bots</strong><br>remove <strong>all</strong> ${powerUps.orb.gun()} in your inventory`,
|
||||
description: `<strong>double</strong> your <strong class='color-bot'>bots</strong><br>remove <strong>all</strong> ${powerUps.orb.gun()} in your inventory`,
|
||||
maxCount: 1,
|
||||
count: 0,
|
||||
frequency: 2,
|
||||
@@ -3988,7 +3988,7 @@ const tech = {
|
||||
{
|
||||
name: "junk DNA",
|
||||
descriptionFunction() {
|
||||
return `increase <strong class='color-d'>damage</strong> by twice the<br><strong class='color-junk'>JUNK</strong> chance <em style ="float: right;">(${(1 + 2 * (tech.junkChance + level.junkAdded)).toFixed(2)}x)</em>`
|
||||
return `increase <strong class='color-d'>damage</strong> by twice your<br><strong class='color-junk'>JUNK</strong> chance <em style ="float: right;">(${(1 + 2 * (tech.junkChance + level.junkAdded)).toFixed(2)}x)</em>`
|
||||
},
|
||||
maxCount: 1,
|
||||
count: 0,
|
||||
@@ -6632,9 +6632,9 @@ const tech = {
|
||||
frequency: 1,
|
||||
frequencyDefault: 1,
|
||||
allowed() {
|
||||
return (tech.haveGunCheck("drones") && !tech.isForeverDrones) || (m.fieldMode === 4 && simulation.molecularMode === 3)
|
||||
return (tech.haveGunCheck("drones") && !tech.isForeverDrones && !tech.isDroneRadioactive) || (m.fieldMode === 4 && simulation.molecularMode === 3)
|
||||
},
|
||||
requires: "drones, not fault tolerance",
|
||||
requires: "drones, not fault tolerance, irradiated drones",
|
||||
effect() {
|
||||
tech.isDroneOnDamage = true;
|
||||
},
|
||||
@@ -6758,9 +6758,9 @@ const tech = {
|
||||
frequency: 2,
|
||||
frequencyDefault: 2,
|
||||
allowed() {
|
||||
return tech.droneCycleReduction === 1 && !tech.isIncendiary && !tech.isDroneTeleport && (tech.haveGunCheck("drones") || tech.isForeverDrones || (m.fieldMode === 4 && simulation.molecularMode === 3))
|
||||
return tech.droneCycleReduction === 1 && !tech.isDroneOnDamage && !tech.isIncendiary && !tech.isDroneTeleport && (tech.haveGunCheck("drones") || tech.isForeverDrones || (m.fieldMode === 4 && simulation.molecularMode === 3))
|
||||
},
|
||||
requires: "drones, not reduced tolerances, incendiary, torque bursts",
|
||||
requires: "drones, not reduced tolerances, incendiary, torque bursts, ablative drones",
|
||||
effect() {
|
||||
tech.isDroneRadioactive = true
|
||||
for (i = 0, len = b.guns.length; i < len; i++) { //find which gun
|
||||
|
||||
Reference in New Issue
Block a user