From c8bf77db8ee3e415d1efa02c679fec59c7876d36 Mon Sep 17 00:00:00 2001 From: landgreen Date: Tue, 24 Jan 2023 21:33:33 -0800 Subject: [PATCH] stereoMadness! level: lock there is a way to escape the slime on the right side now new community level! stereoMadness by Richard0820 --- js/level.js | 1611 ++++++++++++++++++++++++++++++++++++++++++++++++++- todo.txt | 15 +- 2 files changed, 1611 insertions(+), 15 deletions(-) diff --git a/js/level.js b/js/level.js index b025f62..8d6b81e 100644 --- a/js/level.js +++ b/js/level.js @@ -10,7 +10,7 @@ const level = { // playableLevels: ["pavilion", "pavilion", "pavilion", "pavilion", "pavilion", "pavilion", "pavilion", "pavilion", "pavilion", "pavilion", "pavilion"], //see level.populateLevels: (intro, ... , reservoir, reactor, ... , gauntlet, final) added later playableLevels: ["labs", "rooftops", "skyscrapers", "warehouse", "highrise", "office", "aerie", "satellite", "sewers", "testChamber", "pavilion", "lock"], - communityLevels: ["stronghold", "basement", "crossfire", "vats", "run", "n-gon", "house", "perplex", "coliseum", "tunnel", "islands", "temple", "dripp", "biohazard"], + communityLevels: ["stronghold", "basement", "crossfire", "vats", "run", "n-gon", "house", "perplex", "coliseum", "tunnel", "islands", "temple", "dripp", "biohazard", "stereoMadness"], trainingLevels: ["walk", "crouch", "jump", "hold", "throw", "throwAt", "deflect", "heal", "fire", "nailGun", "shotGun", "superBall", "matterWave", "missile", "stack", "mine", "grenades", "harpoon"], levels: [], start() { @@ -4404,9 +4404,10 @@ const level = { const doorCenterLeft = level.door(2537, 775, 25, 225, 195, 5) const doorButtonRight = level.door(4462, 1010, 25, 225, 195, 5) const doorLeft = level.door(2538, 1825, 25, 225, 195, 5) - const buttonRight = level.button(4178, -355) - const buttonLeft = level.button(4585, 1235) - spawn.mapRect(4000, -350, 700, 125); //button platform + const buttonLeft = level.button(4565, 1235) + const buttonRight = level.button(4142, -355) + // spawn.mapRect(4000, -350, 700, 125); //button platform + spawn.mapRect(4000, -350, 600, 75); buttonLeft.isUp = true buttonRight.isUp = true const hazardSlimeLeft = level.hazard(900, -300, 1638, 2450) //hazard(x, y, width, height, damage = 0.002) { @@ -4520,6 +4521,22 @@ const level = { spawn.mapVertex(4425, 1743, "-150 30 -120 0 150 0 150 1000 -150 1000"); spawn.mapVertex(4250, 1811, "-150 30 -120 0 150 0 150 600 -150 600"); spawn.mapVertex(4075, 2079, "-150 30 -120 0 150 0 150 600 -150 600"); + + //escape ledge when drowning + spawn.mapRect(4425, 800, 75, 25); + spawn.mapRect(4425, 325, 75, 25); + // spawn.mapRect(4425, -100, 75, 25); + // spawn.mapRect(4425, -550, 75, 25); + // spawn.mapRect(4425, -1000, 75, 25); + + + // if (Math.random() < 0.5) { + // spawn.mapRect(2775, 525, 100, 25); + // spawn.mapRect(3200, 75, 125, 25); + // } else { + // spawn.mapRect(4400, 800, 100, 25); + // spawn.mapRect(3925, 400, 100, 25); + // } } //left side if (Math.random() < 1) { @@ -13105,7 +13122,1593 @@ const level = { //POWERUPS }, + stereoMadness() { + simulation.makeTextLog(`stereoMadness by Richard0820`); + + let totalCoin = 0; + const hunter = function(x, y, radius = 30) { //doesn't stop chasing until past 105000 + mobs.spawn(x, y, 6, radius, "black"); + let me = mob[mob.length - 1]; + me.stroke = "transparent"; + me.collisionFilter.mask = cat.player | cat.bullet; + me.accelMag = 0.0006 * Math.min(simulation.difficulty + 1, 6); + me.showHealthBar = false; + me.isUnblockable = true; + me.isShielded = true; + me.memory = Infinity; + me.seeAtDistance2 = Infinity; + Matter.Body.setDensity(me, 1) + simulation.makeTextLog(`Ω: Intruder Detected`); + me.boost = 10; + me.do = function() { + if (me.boost == 1 && m.fieldMode == 3 || m.fieldMode == 9 && me.boost == 1) { + me.accelMag *= 1.5; + me.boost--; + } + this.attraction(); + this.checkStatus(); + this.repelBullets(); + this.locatePlayer(); + this.alwaysSeePlayer() + if (player.position.x > 105000) { + this.death() + } + }; + me.onHit = function() { + for (let i = 0; i < 10; i++) { + spawn.spawns(this.position.x + Math.random() * 1000 - Math.random() * 1000, this.position.y - Math.random() * 1000) + } + } + } + const coin = function(x, y, radius = 50) { + mobs.spawn(x, y, 40, radius, "yellow"); + let me = mob[mob.length - 1]; + me.stroke = "#00000055" + me.isShielded = true; + me.leaveBody = false; + me.isBadTarget = true; + me.isUnblockable = true; + me.isDropPowerUp = false; + me.showHealthBar = false; + me.collisionFilter.category = 0; + Matter.Body.setDensity(me, 0.0045); + me.onDeath = function() { + totalCoin++; + }; + me.damageReduction = 0.35 / (tech.isScaleMobsWithDuplication ? 1 + tech.duplicationChance() : 1) + me.do = function() { + ctx.save() + ctx.translate(this.position.x, this.position.y) + ctx.rotate(Math.PI / 2 + 0.5) + ctx.strokeStyle = "#000000"; + ctx.beginPath() + ctx.arc(0, 0, 30, -1, Math.PI, false) + ctx.moveTo(20, -5) + ctx.arc(0, 0, 20, -1, Math.PI, false) + ctx.lineWidth = 5; + ctx.stroke() + ctx.restore() + if (!simulation.isTimeSkipping) { + const sine = Math.sin(simulation.cycle * 0.015) + this.radius = 50 * (1 + 0.1 * sine) + const sub = Vector.sub(player.position, this.position) + const mag = Vector.magnitude(sub) + const force = Vector.mult(Vector.normalise(sub), 0.000000003) + if (mag < this.radius) { //heal player when inside radius + if (m.health < 0.7) { + m.damage(-0.001); + } else if (m.health == 0.7 || m.health > 0.7) { + this.death() + } + ctx.strokeStyle = "#00FFDD55"; + ctx.beginPath(); + ctx.arc(m.pos.x, m.pos.y, 34, 0, 2 * Math.PI); + ctx.lineWidth = 6; + ctx.stroke(); + } + ctx.beginPath(); + ctx.arc(this.position.x, this.position.y, this.radius + 15, 0, 2 * Math.PI); + ctx.strokeStyle = "#000" + ctx.lineWidth = 1; + ctx.stroke(); + }; + } + } + const spike = function(x, y, angle = Math.PI * 0.5, radius = 50) { + mobs.spawn(x, y, 3, radius, "#454545"); + let me = mob[mob.length - 1]; + me.stroke = "transparent"; + me.isDropPowerUp = false; + me.showHealthBar = false; + Matter.Body.setDensity(me, 50) + me.collisionFilter.mask = cat.player | cat.mob | cat.bullet; + me.constraint = Constraint.create({ + pointA: { + x: me.position.x, + y: me.position.y + }, + bodyB: me, + stiffness: 0, + damping: 0 + }); + me.do = function() { + if (this.health < 1) { + this.health += 0.001; //regen + simulation.drawList.push({ + x: this.position.x, + y: this.position.y, + radius: this.radius / 1.5, + color: `rgba(0, 255, 20, ${Math.random() * 0.1})`, + time: simulation.drawTime + }); + } + this.checkStatus(); + Matter.Body.setAngle(me, angle); + }; + me.onHit = function() { + m.damage(0.01) //extra damage + me.collisionFilter.mask = 0; + setTimeout(() => { + me.collisionFilter.mask = cat.player | cat.mob | cat.bullet; + }, 1000); + } + me.onDeath = function() { + tech.addJunkTechToPool(0.1) + } + Composite.add(engine.world, me.constraint); + } + + function drawStar(cx, cy, spikes, outerRadius, innerRadius) { + outerRadius *= (1 + 0.1 * Math.sin(simulation.cycle * 0.15)); + innerRadius *= (1 + 0.1 * Math.sin(simulation.cycle * 0.15)); + var rot = Math.PI / 2 * 3; + var xs = cx; + var y = cy; + var step = Math.PI / spikes; + + ctx.strokeSyle = "#000"; + ctx.beginPath(); + ctx.moveTo(cx, cy - outerRadius) + for (i = 0; i < spikes; i++) { + xs = cx + Math.cos(rot) * outerRadius; + y = cy + Math.sin(rot) * outerRadius; + ctx.lineTo(xs, y) + rot += step + + xs = cx + Math.cos(rot) * innerRadius; + y = cy + Math.sin(rot) * innerRadius; + ctx.lineTo(xs, y) + rot += step + } + ctx.lineTo(cx, cy - outerRadius) + ctx.closePath(); + ctx.lineWidth = 5; + ctx.strokeStyle = 'red'; + ctx.stroke(); + ctx.fillStyle = 'darkred'; + ctx.fill(); + + } + const slimePit1 = level.hazard(7475, -75, 475, 100, 0.01) + const slimePit2 = level.hazard(11275, -75, 1450, 100, 0.01) + const slimePit3 = level.hazard(13400, -150, 3500, 200, 0.1) + const slimePit4 = level.hazard(20275, -400, 3475, 450, 0.01) + const slimePit5 = level.hazard(25300, -800, 20000, 650, 0.003) + const slimePit6 = level.hazard(47725, -425, 2500, 475, 0.01) + const slimePit7 = level.hazard(50975, -575, 4050, 650, 0.01) + const slimePit8 = level.hazard(54950, -950, 6650, 1050, 0.01) + const slimePit9 = level.hazard(63550, -75, 2150, 100, 0.01) + const slimePit10 = level.hazard(70875, -75, 1200, 100, 0.01) + const slimePit11 = level.hazard(72075, -50, 900, 75, 1) + const slimePit12 = level.hazard(75900, -75, 2575, 100, 0.01) + const slimePit13 = level.hazard(78475, -35, 2300, 70, 0.01) + const slimePit14 = level.hazard(82875, -75, 5100, 100, 0.1) + + const drip1 = level.drip(32474, -2165, -800, 100); + const drip2 = level.drip(37750, -2165, -800, 100); + const drip3 = level.drip(43525, -2165, -800, 100); + const drip4 = level.drip(20475, -830, -375, 100); + const drip5 = level.drip(49960, -2315, -423, 200) + let textlogOne = 0; + let textlogTwo = 0; + let barThere = true; + let bar = document.createElement("div"); + bar.style.cssText = `position: absolute; top: 80px; background-color: black; width: 80vw; z-index: 1; border-radius: 10px; height: 20px; left: 5em; right: 5em;`; + bar.innerHTML += `
` + document.body.appendChild(bar); + let innerBar = document.getElementById("innerBar"); + level.custom = () => { + level.exit.drawAndCheck(); + if (barThere == true) { + innerBar.style.width = "calc(" + `${Math.max(0, Math.min(player.position.x/1310, 80))}` + "vw - 10px)"; + innerBar.style.backgroundColor = m.eyeFillColor; + } + if (m.pos.x > 25360 && textlogOne == 0) { + simulation.makeTextLog(`
A stong force pushes you forward...
`) + textlogOne++; + } + if (m.pos.x < -3000) { + Matter.Body.setVelocity(player, { + x: 99, + y: 19 + }); + + if (textlogTwo == 0) + simulation.makeTextLog(`
A strong force pushes you away...
`); + textlogTwo++; + } + if (m.pos.y > 1055) { + Matter.Body.setPosition(player, { x: 0, y: -150 }); + simulation.makeTextLog(`
There is nowhere to run...
`); + m.damage(0.1 * simulation.difficultyMode); + } + if (m.alive == false && barThere == true) { + document.body.removeChild(bar); + barThere = false; + } + ctx.beginPath() + ctx.lineWidth = 5; + ctx.strokeStyle = "#000000"; + ctx.moveTo(40, -1000) + ctx.arc(0, -1000, 40, 0, 2 * Math.PI) + ctx.stroke() + ctx.fillStyle = "#FF00FF55" + ctx.fillRect(89750, -1300, 800, 200) + ctx.fillRect(89750, -200, 800, 200) + ctx.fillRect(92050, -200, 800, 200) + ctx.fillRect(92050, -1675, 800, 575) + ctx.fillRect(93950, -350, 200, 350); + ctx.fillRect(95100, -1350, 150, 375); + ctx.fillRect(100900, -1325, 1175, 250); + ctx.fillRect(100900, -225, 1200, 250); + ctx.fillRect(98725, -1325, 450, 150); + ctx.fillRect(98725, -125, 450, 150); + ctx.beginPath() + //lines! + ctx.lineWidth = 10; + ctx.strokeStyle = "#000000"; + ctx.moveTo(7462.5, -250) + ctx.lineTo(7462.5, -170) + ctx.moveTo(7710, -330) + ctx.lineTo(7710, -250) + ctx.moveTo(7960, -420) + ctx.lineTo(7960, -320) + ctx.moveTo(13725, -250) + ctx.lineTo(13725, -180) + ctx.moveTo(14025, -350) + ctx.lineTo(14025, -280) + ctx.moveTo(14325, -450) + ctx.lineTo(14325, -380) + ctx.moveTo(14625, -550) + ctx.lineTo(14625, -480) + ctx.moveTo(14925, -650) + ctx.lineTo(14925, -580) + ctx.moveTo(15225, -750) + ctx.lineTo(15225, -680) + ctx.moveTo(15525, -850) + ctx.lineTo(15525, -780) + ctx.moveTo(15825, -950) + ctx.lineTo(15825, -880) + ctx.moveTo(16125, -1050) + ctx.lineTo(16125, -980) + ctx.moveTo(16425, -1150) + ctx.lineTo(16425, -1080) + ctx.moveTo(22600, -650) + ctx.lineTo(22600, -580) + ctx.moveTo(22800, -750) + ctx.lineTo(22800, -680) + ctx.moveTo(23000, -850) + ctx.lineTo(23000, -780) + ctx.moveTo(23200, -950) + ctx.lineTo(23200, -880) + ctx.moveTo(23400, -1050) + ctx.lineTo(23400, -980) + ctx.moveTo(23600, -1150) + ctx.lineTo(23600, -1080) + ctx.moveTo(29550, -1625) + ctx.lineTo(29550, -1425) + ctx.moveTo(32275, -2125) + ctx.lineTo(32275, -1925) + ctx.moveTo(33775, -2125) + ctx.lineTo(33775, -1925) + ctx.moveTo(32275, -350) + ctx.lineTo(32275, -550) + ctx.moveTo(33775, -350) + ctx.lineTo(33775, -550) + ctx.moveTo(35475, -650) + ctx.lineTo(35475, -450) + ctx.moveTo(37650, -2000) + ctx.lineTo(37650, -1800) + ctx.moveTo(39675, -400) + ctx.lineTo(39675, -600) + ctx.moveTo(40375, -500) + ctx.lineTo(40375, -700) + ctx.moveTo(41075, -600) + ctx.lineTo(41075, -800) + ctx.moveTo(43625, -1925) + ctx.lineTo(43625, -1725) + ctx.moveTo(50975, -1125) + ctx.lineTo(50975, -925) + ctx.moveTo(51387.5, -1325) + ctx.lineTo(51387.5, -1125) + ctx.moveTo(51787.5, -1525) + ctx.lineTo(51787.5, -1325) + ctx.moveTo(52187.5, -1725) + ctx.lineTo(52187.5, -1525) + ctx.moveTo(52587.5, -1725) + ctx.lineTo(52587.5, -1925) + ctx.moveTo(52987.5, -2125) + ctx.lineTo(52987.5, -1925) + ctx.moveTo(53387.5, -2325) + ctx.lineTo(53387.5, -2125) + ctx.moveTo(53787.5, -2525) + ctx.lineTo(53787.5, -2325) + ctx.moveTo(54187.5, -2725) + ctx.lineTo(54187.5, -2525) + ctx.moveTo(54587.5, -2925) + ctx.lineTo(54587.5, -2725) + ctx.moveTo(54987.5, -3125) + ctx.lineTo(54987.5, -2925) + ctx.moveTo(57500, -1925) + ctx.lineTo(57650, -1925) + ctx.moveTo(57520, -1845) + ctx.lineTo(57650, -1845) + ctx.moveTo(57500, -1925) + ctx.lineTo(57895 + 300, -1925) + ctx.moveTo(57520, -1845) + ctx.lineTo(57895 + 300, -1845) + ctx.moveTo(58525, -1725) + ctx.lineTo(58525 + 125, -1725) + ctx.moveTo(58525, -1625) + ctx.lineTo(58525 + 125, -1625) + ctx.moveTo(59000, -1725) + ctx.lineTo(59150, -1725) + ctx.moveTo(59150, -1625) + ctx.lineTo(59000, -1625) + ctx.moveTo(70875, -200) + ctx.lineTo(70875, -100) + ctx.moveTo(63700, -200) + ctx.lineTo(63800, -200) + ctx.moveTo(64000, -200) + ctx.lineTo(64100, -200) + ctx.moveTo(64675, -200) + ctx.lineTo(64575, -200) + ctx.moveTo(64875, -200) + ctx.lineTo(64975, -200) + ctx.moveTo(65025, -300) + ctx.lineTo(64925, -300) + ctx.moveTo(65225, -300) + ctx.lineTo(65325, -300) + ctx.moveTo(71275, -200) + ctx.lineTo(71275, -300) + ctx.moveTo(71675, -300) + ctx.lineTo(71675, -400) + ctx.moveTo(72075, -400) + ctx.lineTo(72075, -500) + ctx.moveTo(72425, -325) + ctx.lineTo(72425, -425) + ctx.moveTo(72675, -200) + ctx.lineTo(72675, -300) + ctx.moveTo(72925, -75) + ctx.lineTo(72925, -175) + ctx.moveTo(75225, -100) + ctx.lineTo(75225, -200) + ctx.moveTo(76600, -125) + ctx.lineTo(76600, -225) + ctx.moveTo(76900, -200) + ctx.lineTo(76900, -300) + ctx.moveTo(77175, -275) + ctx.lineTo(77175, -375) + ctx.moveTo(77475, -350) + ctx.lineTo(77475, -450) + ctx.moveTo(85575, -275) + ctx.lineTo(85575, -375) + ctx.moveTo(86000, -275) + ctx.lineTo(86000, -375) + ctx.moveTo(86275, -275) + ctx.lineTo(86275, -375) + ctx.moveTo(86950, -425) + ctx.lineTo(86950, -525) + ctx.moveTo(89700, -175) + ctx.lineTo(89700, -75) + ctx.moveTo(89700, -1125) + ctx.lineTo(89700, -1225) + ctx.moveTo(90600, -1225) + ctx.lineTo(90600, -1125) + ctx.moveTo(90600, -100) + ctx.lineTo(90600, -175) + ctx.moveTo(92000, -100) + ctx.lineTo(92000, -175) + ctx.moveTo(92900, -100) + ctx.lineTo(92900, -175) + ctx.moveTo(92900, -1225) + ctx.lineTo(92900, -1125) + ctx.moveTo(94500, -1475) + ctx.lineTo(94500, -1575) + ctx.moveTo(94700, -1475) + ctx.lineTo(94700, -1575) + ctx.moveTo(94900, -1475) + ctx.lineTo(94900, -1575) + ctx.moveTo(96125, -1500) + ctx.lineTo(96125, -1575) + ctx.moveTo(96550, -1575) + ctx.lineTo(96550, -1500) + ctx.moveTo(97000, -1475) + ctx.lineTo(97000, -1575) + + ctx.stroke() + ctx.beginPath() + ctx.strokeStyle = "#FFFFFF"; + ctx.fillStyle = document.body.style.backgroundColor; + let cycles = Math.sin(simulation.cycle * 0.15) + ctx.moveTo(7482.5, -270) + ctx.arc(7462.5, -270, 20 * (1 + 0.1 * cycles), 0, 2 * Math.PI); + ctx.moveTo(7730, -350) + ctx.arc(7710, -350, 20 * (1 + 0.1 * cycles), 0, 2 * Math.PI); + ctx.moveTo(7980, -420) + ctx.arc(7960, -420, 20 * (1 + 0.1 * cycles), 0, 2 * Math.PI) + ctx.moveTo(13745, -180) + ctx.arc(13725, -180, 20 * (1 + 0.1 * cycles), 0, 2 * Math.PI) + ctx.moveTo(14045, -280) + ctx.arc(14025, -280, 20 * (1 + 0.1 * cycles), 0, 2 * Math.PI) + ctx.moveTo(14345, -380) + ctx.arc(14325, -380, 20 * (1 + 0.1 * cycles), 0, 2 * Math.PI) + ctx.moveTo(14645, -480) + ctx.arc(14625, -480, 20 * (1 + 0.1 * cycles), 0, 2 * Math.PI) + ctx.moveTo(14945, -580) + ctx.arc(14925, -580, 20 * (1 + 0.1 * cycles), 0, 2 * Math.PI) + ctx.moveTo(15245, -680) + ctx.arc(15225, -680, 20 * (1 + 0.1 * cycles), 0, 2 * Math.PI) + ctx.moveTo(15545, -780) + ctx.arc(15525, -780, 20 * (1 + 0.1 * cycles), 0, 2 * Math.PI) + ctx.moveTo(15845, -880) + ctx.arc(15825, -880, 20 * (1 + 0.1 * cycles), 0, 2 * Math.PI) + ctx.moveTo(16145, -980) + ctx.arc(16125, -980, 20 * (1 + 0.1 * cycles), 0, 2 * Math.PI) + ctx.moveTo(16445, -1080) + ctx.arc(16425, -1080, 20 * (1 + 0.1 * cycles), 0, 2 * Math.PI) + ctx.moveTo(22620, -580); + ctx.arc(22600, -580, 20 * (1 + 0.1 * cycles), 0, 2 * Math.PI) + ctx.moveTo(22820, -680); + ctx.arc(22800, -680, 20 * (1 + 0.1 * cycles), 0, 2 * Math.PI) + ctx.moveTo(23020, -780); + ctx.arc(23000, -780, 20 * (1 + 0.1 * cycles), 0, 2 * Math.PI) + ctx.moveTo(23220, -880); + ctx.arc(23200, -880, 20 * (1 + 0.1 * cycles), 0, 2 * Math.PI) + ctx.moveTo(23420, -980); + ctx.arc(23400, -980, 20 * (1 + 0.1 * cycles), 0, 2 * Math.PI) + ctx.moveTo(23620, -1080); + ctx.arc(23600, -1080, 20 * (1 + 0.1 * cycles), 0, 2 * Math.PI) + ctx.moveTo(29570, -1425) + ctx.arc(29550, -1425, 20 * (1 + 0.1 * cycles), 0, 2 * Math.PI) + ctx.moveTo(32295, -1925) + ctx.arc(32275, -1925, 20 * (1 + 0.1 * cycles), 0, 2 * Math.PI) + ctx.moveTo(33795, -1925) + ctx.arc(33775, -1925, 20 * (1 + 0.1 * cycles), 0, 2 * Math.PI) + ctx.moveTo(32295, -550) + ctx.arc(32275, -550, 20 * (1 + 0.1 * cycles), 0, 2 * Math.PI) + ctx.moveTo(33795, -550) + ctx.arc(33775, -550, 20 * (1 + 0.1 * cycles), 0, 2 * Math.PI) + ctx.moveTo(35495, -650) + ctx.arc(35475, -650, 20 * (1 + 0.1 * cycles), 0, 2 * Math.PI) + ctx.moveTo(37670, -1800) + ctx.arc(37650, -1800, 20 * (1 + 0.1 * cycles), 0, 2 * Math.PI) + ctx.moveTo(39695, -600) + ctx.arc(39675, -600, 20 * (1 + 0.1 * cycles), 0, 2 * Math.PI) + ctx.moveTo(40395, -700) + ctx.arc(40375, -700, 20 * (1 + 0.1 * cycles), 0, 2 * Math.PI) + ctx.moveTo(41095, -800) + ctx.arc(41075, -800, 20 * (1 + 0.1 * cycles), 0, 2 * Math.PI) + ctx.moveTo(43645, -1725) + ctx.arc(43625, -1725, 20 * (1 + 0.1 * cycles), 0, 2 * Math.PI) + ctx.moveTo(50995, -1125) + ctx.arc(50975, -1125, 20 * (1 + 0.1 * cycles), 0, 2 * Math.PI) + ctx.moveTo(51407.5, -1325) + ctx.arc(51387.5, -1325, 20 * (1 + 0.1 * cycles), 0, 2 * Math.PI) + ctx.moveTo(51807.5, -1525) + ctx.arc(51787.5, -1525, 20 * (1 + 0.1 * cycles), 0, 2 * Math.PI) + ctx.moveTo(52207.5, -1725) + ctx.arc(52187.5, -1725, 20 * (1 + 0.1 * cycles), 0, 2 * Math.PI) + ctx.moveTo(52607.5, -1925) + ctx.arc(52587.5, -1925, 20 * (1 + 0.1 * cycles), 0, 2 * Math.PI) + ctx.moveTo(53007.5, -2125) + ctx.arc(52987.5, -2125, 20 * (1 + 0.1 * cycles), 0, 2 * Math.PI) + ctx.moveTo(53407.5, -2325) + ctx.arc(53387.5, -2325, 20 * (1 + 0.1 * cycles), 0, 2 * Math.PI) + ctx.moveTo(53807.5, -2525) + ctx.arc(53787.5, -2525, 20 * (1 + 0.1 * cycles), 0, 2 * Math.PI) + ctx.moveTo(54207.5, -2725) + ctx.arc(54187.5, -2725, 20 * (1 + 0.1 * cycles), 0, 2 * Math.PI) + ctx.moveTo(54607.5, -2925) + ctx.arc(54587.5, -2925, 20 * (1 + 0.1 * cycles), 0, 2 * Math.PI) + ctx.moveTo(55007.5, -3125) + ctx.arc(54987.5, -3125, 20 * (1 + 0.1 * cycles), 0, 2 * Math.PI) + ctx.moveTo(57520, -1925) + ctx.arc(57500, -1925, 20 * (1 + 0.1 * cycles), 0, 2 * Math.PI) + ctx.moveTo(57520, -1845) + ctx.arc(57500, -1845, 20 * (1 + 0.1 * cycles), 0, 2 * Math.PI) + ctx.moveTo(58525, -1725) + ctx.arc(58505, -1725, 20 * (1 + 0.1 * cycles), 0, 2 * Math.PI) + ctx.moveTo(57895 + 300, -1925) + ctx.arc(57875 + 300, -1925, 20 * (1 + 0.1 * cycles), 0, 2 * Math.PI) + ctx.moveTo(57895 + 300, -1845) + ctx.arc(57875 + 300, -1845, 20 * (1 + 0.1 * cycles), 0, 2 * Math.PI) + ctx.moveTo(58525, -1625) + ctx.arc(58505, -1625, 20 * (1 + 0.1 * cycles), 0, 2 * Math.PI) + ctx.moveTo(58690 + 375 + 125, -1625) + ctx.arc(58670 + 375 + 125, -1625, 20 * (1 + 0.1 * cycles), 0, 2 * Math.PI) + ctx.moveTo(59190, -1725) + ctx.arc(59170, -1725, 20 * (1 + 0.1 * cycles), 0, 2 * Math.PI) + ctx.moveTo(70895, -200) + ctx.arc(70875, -200, 20 * (1 + 0.1 * cycles), 0, 2 * Math.PI) + ctx.moveTo(63720, -200) + ctx.arc(63700, -200, 20 * (1 + 0.1 * cycles), 0, 2 * Math.PI) + ctx.moveTo(64120, -200) + ctx.arc(64100, -200, 20 * (1 + 0.1 * cycles), 0, 2 * Math.PI) + ctx.moveTo(64595, -200) + ctx.arc(64575, -200, 20 * (1 + 0.1 * cycles), 0, 2 * Math.PI) + ctx.moveTo(64995, -200) + ctx.arc(64975, -200, 20 * (1 + 0.1 * cycles), 0, 2 * Math.PI) + ctx.moveTo(64945, -300) + ctx.arc(64925, -300, 20 * (1 + 0.1 * cycles), 0, 2 * Math.PI) + ctx.moveTo(65345, -300) + ctx.arc(65325, -300, 20 * (1 + 0.1 * cycles), 0, 2 * Math.PI) + ctx.moveTo(71295, -300) + ctx.arc(71275, -300, 20 * (1 + 0.1 * cycles), 0, 2 * Math.PI) + ctx.moveTo(71695, -400) + ctx.arc(71675, -400, 20 * (1 + 0.1 * cycles), 0, 2 * Math.PI) + ctx.moveTo(72095, -500) + ctx.arc(72075, -500, 20 * (1 + 0.1 * cycles), 0, 2 * Math.PI) + ctx.moveTo(72445, -425) + ctx.arc(72425, -425, 20 * (1 + 0.1 * cycles), 0, 2 * Math.PI) + ctx.moveTo(72695, -300) + ctx.arc(72675, -300, 20 * (1 + 0.1 * cycles), 0, 2 * Math.PI) + ctx.moveTo(72945, -175) + ctx.arc(72925, -175, 20 * (1 + 0.1 * cycles), 0, 2 * Math.PI) + ctx.moveTo(75245, -200) + ctx.arc(75225, -200, 20 * (1 + 0.1 * cycles), 0, 2 * Math.PI) + ctx.moveTo(76620, -125) + ctx.arc(76600, -125, 20 * (1 + 0.1 * cycles), 0, 2 * Math.PI) + ctx.moveTo(76920, -200) + ctx.arc(76900, -200, 20 * (1 + 0.1 * cycles), 0, 2 * Math.PI) + ctx.moveTo(77195, -275) + ctx.arc(77175, -275, 20 * (1 + 0.1 * cycles), 0, 2 * Math.PI) + ctx.moveTo(77495, -350) + ctx.arc(77475, -350, 20 * (1 + 0.1 * cycles), 0, 2 * Math.PI) + ctx.moveTo(85595, -375) + ctx.arc(85575, -375, 20 * (1 + 0.1 * cycles), 0, 2 * Math.PI) + ctx.moveTo(86020, -375) + ctx.arc(86000, -375, 20 * (1 + 0.1 * cycles), 0, 2 * Math.PI) + ctx.moveTo(86295, -375) + ctx.arc(86275, -375, 20 * (1 + 0.1 * cycles), 0, 2 * Math.PI) + ctx.moveTo(86970, -525) + ctx.arc(86950, -525, 20 * (1 + 0.1 * cycles), 0, 2 * Math.PI) + ctx.moveTo(89720, -175) + ctx.arc(89700, -175, 20 * (1 + 0.1 * cycles), 0, 2 * Math.PI) + ctx.moveTo(89720, -1125) + ctx.arc(89700, -1125, 20 * (1 + 0.1 * cycles), 0, 2 * Math.PI) + ctx.moveTo(90620, -1125) + ctx.arc(90600, -1125, 20 * (1 + 0.1 * cycles), 0, 2 * Math.PI) + ctx.moveTo(90620, -175) + ctx.arc(90600, -175, 20 * (1 + 0.1 * cycles), 0, 2 * Math.PI) + ctx.moveTo(92020, -175) + ctx.arc(92000, -175, 20 * (1 + 0.1 * cycles), 0, 2 * Math.PI) + ctx.moveTo(92920, -175) + ctx.arc(92900, -175, 20 * (1 + 0.1 * cycles), 0, 2 * Math.PI) + ctx.moveTo(92920, -1125) + ctx.arc(92900, -1125, 20 * (1 + 0.1 * cycles), 0, 2 * Math.PI) + ctx.moveTo(94520, -1575) + ctx.arc(94500, -1575, 20 * (1 + 0.1 * cycles), 0, 2 * Math.PI) + ctx.moveTo(94720, -1575) + ctx.arc(94700, -1575, 20 * (1 + 0.1 * cycles), 0, 2 * Math.PI) + ctx.moveTo(94920, -1575) + ctx.arc(94900, -1575, 20 * (1 + 0.1 * cycles), 0, 2 * Math.PI) + ctx.moveTo(96145, -1575) + ctx.arc(96125, -1575, 20 * (1 + 0.1 * cycles), 0, 2 * Math.PI) + ctx.moveTo(96570, -1500) + ctx.arc(96550, -1500, 20 * (1 + 0.1 * cycles), 0, 2 * Math.PI) + ctx.moveTo(97020, -1575) + ctx.arc(97000, -1575, 20 * (1 + 0.1 * cycles), 0, 2 * Math.PI) + ctx.fill() + ctx.stroke() + slimePit1.query() + slimePit2.query() + slimePit3.query() + slimePit4.query() + slimePit5.query() + slimePit5.query() + slimePit6.query() + slimePit7.query() + slimePit8.query() + slimePit9.query() + slimePit10.query() + slimePit11.query() + slimePit12.query() + slimePit13.query() + slimePit14.query() + drip1.draw() + drip2.draw() + drip3.draw() + drip4.draw() + drip5.draw() + + ctx.fillStyle = "rgba(0,255,255,0.9)" + ctx.fillRect(25325, -1375, 75, 400) + ctx.fillRect(46425, -1350, 100, 500) + ctx.fillRect(87925, -725, 75, 450) + + /* + if (player.position.x < 46470) { + document.body.style.backgroundColor = "#DD00DD"; + } + */ + if (player.position.x > 25360 && player.position.x < 46470) { + Matter.Body.setVelocity(player, { + x: player.velocity.x, //+ 0.2, + y: player.velocity.y, + }); + if (input.up) { + Matter.Body.setVelocity(player, { + x: player.velocity.x, + y: player.velocity.y, //- 1, + }); + } + document.body.style.backgroundColor = "#fb3310" + } else if (player.position.x > 46470 && player.position.x < 61675) { + document.body.style.backgroundColor = "#7704FF" + } else if (player.position.x > 9700 && player.position.x < 46470) { + document.body.style.backgroundColor = "#7704FF" + } else if (player.position.x > 61675 && player.position.x < 87950) { + document.body.style.backgroundColor = "#DD1111" + } else if (player.position.x > 87950) { + document.body.style.backgroundColor = "#7704FF" + } + + if (m.pos.y > -200 && 20350 < m.pos.x && m.pos.x < 23635) { + Matter.Body.setVelocity(player, { + x: 0, + y: 0 + }); + Matter.Body.setPosition(player, { + x: 20250, + y: -1000 + }); + // move bots + for (let i = 0; i < bullet.length; i++) { + if (bullet[i].botType) { + Matter.Body.setPosition(bullet[i], Vector.add(player.position, { + x: 250 * (Math.random() - 0.5), + y: 250 * (Math.random() - 0.5) + })); + Matter.Body.setVelocity(bullet[i], { + x: 0, + y: 0 + }); + } + } + m.damage(0.1 * simulation.difficultyMode) + m.energy -= 0.1 * simulation.difficultyMode + } + if (m.pos.y > -150 && m.pos.x > 47770 && m.pos.x < 50130) { + Matter.Body.setVelocity(player, { + x: 0, + y: 0 + }); + Matter.Body.setPosition(player, { + x: 47640, + y: -900 + }); + // move bots + for (let i = 0; i < bullet.length; i++) { + if (bullet[i].botType) { + Matter.Body.setPosition(bullet[i], Vector.add(player.position, { + x: 250 * (Math.random() - 0.5), + y: 250 * (Math.random() - 0.5) + })); + Matter.Body.setVelocity(bullet[i], { + x: 0, + y: 0 + }); + } + } + m.damage(0.1 * simulation.difficultyMode) + m.energy -= 0.1 * simulation.difficultyMode + } + if (m.pos.y > -150 && 50975 < m.pos.x && m.pos.x < 54925) { + Matter.Body.setVelocity(player, { + x: 0, + y: 0 + }); + Matter.Body.setPosition(player, { + x: 50965, + y: -1100 + }); + // move bots + for (let i = 0; i < bullet.length; i++) { + if (bullet[i].botType) { + Matter.Body.setPosition(bullet[i], Vector.add(player.position, { + x: 250 * (Math.random() - 0.5), + y: 250 * (Math.random() - 0.5) + })); + Matter.Body.setVelocity(bullet[i], { + x: 0, + y: 0 + }); + } + } + m.damage(0.1 * simulation.difficultyMode) + m.energy -= 0.1 * simulation.difficultyMode + } + if (m.pos.y > -150 && 55025 < m.pos.x && m.pos.x < 57675) { + Matter.Body.setVelocity(player, { + x: 0, + y: 0 + }); + Matter.Body.setPosition(player, { + x: 55148, + y: -3072 + }); + // move bots + for (let i = 0; i < bullet.length; i++) { + if (bullet[i].botType) { + Matter.Body.setPosition(bullet[i], Vector.add(player.position, { + x: 250 * (Math.random() - 0.5), + y: 250 * (Math.random() - 0.5) + })); + Matter.Body.setVelocity(bullet[i], { + x: 0, + y: 0 + }); + } + } + m.damage(0.1 * simulation.difficultyMode) + m.energy -= 0.1 * simulation.difficultyMode + } + if (m.pos.y > -150 && 57875 < m.pos.x && m.pos.x < 58700) { + Matter.Body.setVelocity(player, { + x: 0, + y: 0 + }); + Matter.Body.setPosition(player, { + x: 57800, + y: -2200 + + }); + // move bots + for (let i = 0; i < bullet.length; i++) { + if (bullet[i].botType) { + Matter.Body.setPosition(bullet[i], Vector.add(player.position, { + x: 250 * (Math.random() - 0.5), + y: 250 * (Math.random() - 0.5) + })); + Matter.Body.setVelocity(bullet[i], { + x: 0, + y: 0 + }); + } + } + m.damage(0.1 * simulation.difficultyMode) + m.energy -= 0.1 * simulation.difficultyMode + } + if (m.pos.y > -150 && 58875 < m.pos.x && m.pos.x < 61650) { + Matter.Body.setVelocity(player, { + x: 0, + y: 0 + }); + Matter.Body.setPosition(player, { + x: 58850, + y: -2025 + + }); + // move bots + for (let i = 0; i < bullet.length; i++) { + if (bullet[i].botType) { + Matter.Body.setPosition(bullet[i], Vector.add(player.position, { + x: 250 * (Math.random() - 0.5), + y: 250 * (Math.random() - 0.5) + })); + Matter.Body.setVelocity(bullet[i], { + x: 0, + y: 0 + }); + } + } + m.damage(0.1 * simulation.difficultyMode) + m.energy -= 0.1 * simulation.difficultyMode + } + if (m.pos.y > -1677 && 104650 < m.pos.x && m.pos.x < 105000 && barThere == true) { + Matter.Body.setVelocity(player, { + x: 0, + y: 0 + }); + Matter.Body.setPosition(player, { + x: 132577, + y: -300 + + }); + // move bots + for (let i = 0; i < bullet.length; i++) { + if (bullet[i].botType) { + Matter.Body.setPosition(bullet[i], Vector.add(player.position, { + x: 250 * (Math.random() - 0.5), + y: 250 * (Math.random() - 0.5) + })); + Matter.Body.setVelocity(bullet[i], { + x: 0, + y: 0 + }); + } + } + document.body.style.transitionDuration = "0ms"; + document.body.style.backgroundColor = "#696969"; + simulation.makeTextLog(`
You have earned: ` + Math.min(3, totalCoin) + ` tech
`) + if (barThere == true) { //only runs once + document.body.removeChild(bar); + for (let i = 0, len = Math.min(3, totalCoin); i < len; i++) powerUps.directSpawn(player.position.x, player.position.y, "tech"); + barThere = false; + + + } + } + ctx.fillStyle = "#FFFFFF53" + ctx.fillRect(57645, -2055, 385, 85) + ctx.fillRect(58645, -1880, 385, 85) + //chains + ctx.strokeStyle = "#FF0000" + ctx.strokeRect(66975, -725, 25, 50) + ctx.strokeRect(67050, -725, 25, 50) + ctx.strokeRect(66975 + 1150, -725, 25, 50) + ctx.strokeRect(67050 + 1250, -725, 25, 50) + ctx.strokeRect(69162, -725, 25, 50) + ctx.strokeRect(69862, -725, 25, 50) + ctx.strokeRect(74412.5, -412.5, 25, 50) + ctx.strokeRect(74612.5, -412.5, 25, 50) + ctx.strokeRect(77962.5, -900, 25, 50) + ctx.strokeRect(78212.5, -775, 25, 50) + ctx.strokeRect(78462.5, -650, 25, 50) + ctx.strokeRect(81587.5, -725, 25, 50) + ctx.strokeRect(81687.5, -725, 25, 50) + ctx.strokeRect(81787.5, -725, 25, 50) + ctx.strokeRect(83037.5, -215, 25, 50) + ctx.strokeRect(83362.5, -215, 25, 50) + ctx.strokeRect(83687.5, -215, 25, 50) + ctx.strokeRect(84187.5, -315, 25, 50) + ctx.strokeStyle = "#FF000088" + ctx.strokeRect(66975, -850, 25, 50) + ctx.strokeRect(67050, -850, 25, 50) + ctx.strokeRect(66975 + 1150, -850, 25, 50) + ctx.strokeRect(67050 + 1250, -850, 25, 50) + ctx.strokeRect(69162, -850, 25, 50) + ctx.strokeRect(69862, -850, 25, 50) + ctx.strokeRect(74412.5, -525, 25, 50) + ctx.strokeRect(74612.5, -525, 25, 50) + ctx.strokeRect(77962.5, -985, 25, 50) + ctx.strokeRect(78212.5, -860, 25, 50) + ctx.strokeRect(78462.5, -735, 25, 50) + ctx.strokeRect(81587.5, -850, 25, 50) + ctx.strokeRect(81687.5, -850, 25, 50) + ctx.strokeRect(81787.5, -850, 25, 50) + ctx.strokeRect(83037.5, -315, 25, 50) + ctx.strokeRect(83362.5, -315, 25, 50) + ctx.strokeRect(83687.5, -315, 25, 50) + ctx.strokeRect(84187.5, -415, 25, 50) + ctx.strokeStyle = "#FF000044" + ctx.strokeRect(66975, -975, 25, 50) + ctx.strokeRect(67050, -975, 25, 50) + ctx.strokeRect(66975 + 1150, -975, 25, 50) + ctx.strokeRect(67050 + 1250, -975, 25, 50) + ctx.strokeRect(69162, -975, 25, 50) + ctx.strokeRect(69862, -975, 25, 50) + ctx.strokeRect(74412.5, -633, 25, 50) + ctx.strokeRect(74612.5, -633, 25, 50) + ctx.strokeRect(77962.5, -1075, 25, 50) + ctx.strokeRect(78212.5, -950, 25, 50) + ctx.strokeRect(78462.5, -825, 25, 50) + ctx.strokeRect(81587.5, -975, 25, 50) + ctx.strokeRect(81687.5, -975, 25, 50) + ctx.strokeRect(81787.5, -975, 25, 50) + ctx.strokeRect(83037.5, -415, 25, 50) + ctx.strokeRect(83362.5, -415, 25, 50) + ctx.strokeRect(83687.5, -415, 25, 50) + ctx.strokeRect(84187.5, -515, 25, 50) + ctx.strokeStyle = "#FF000011" + ctx.strokeRect(66975, -1100, 25, 50) + ctx.strokeRect(67050, -1100, 25, 50) + ctx.strokeRect(66975 + 1150, -1100, 25, 50) + ctx.strokeRect(67050 + 1250, -1100, 25, 50) + ctx.strokeRect(69162, -1100, 25, 50) + ctx.strokeRect(69862, -1100, 25, 50) + ctx.strokeRect(74412.5, -741, 25, 50) + ctx.strokeRect(74612.5, -741, 25, 50) + ctx.strokeRect(77962.5, -1165, 25, 50) + ctx.strokeRect(78212.5, -1040, 25, 50) + ctx.strokeRect(78462.5, -915, 25, 50) + ctx.strokeRect(81587.5, -1100, 25, 50) + ctx.strokeRect(81687.5, -1100, 25, 50) + ctx.strokeRect(81787.5, -1100, 25, 50) + ctx.strokeRect(83037.5, -515, 25, 50) + ctx.strokeRect(83362.5, -515, 25, 50) + ctx.strokeRect(83687.5, -515, 25, 50) + ctx.strokeRect(84187.5, -615, 25, 50) + ctx.stroke() + ctx.beginPath() + ctx.strokeStyle = "#FF0000" + ctx.moveTo(66987.5, -680) + ctx.lineTo(66987.5, -625) + ctx.moveTo(67062.5, -680) + ctx.lineTo(67062.5, -625) + ctx.moveTo(66987.5 + 1150, -680) + ctx.lineTo(66987.5 + 1150, -625) + ctx.moveTo(67062.5 + 1250, -680) + ctx.lineTo(67062.5 + 1250, -625) + ctx.moveTo(69175, -680) + ctx.lineTo(69175, -625) + ctx.moveTo(69875, -680) + ctx.lineTo(69875, -625) + ctx.moveTo(74425, -290) + ctx.lineTo(74425, -370) + ctx.moveTo(74625, -290) + ctx.lineTo(74625, -370) + ctx.moveTo(77975, -790) + ctx.lineTo(77975, -855) + ctx.moveTo(78225, -665) + ctx.lineTo(78225, -730) + ctx.moveTo(78475, -540) + ctx.lineTo(78475, -605) + ctx.moveTo(81600, -680) + ctx.lineTo(81600, -625) + ctx.moveTo(81700, -680) + ctx.lineTo(81700, -625) + ctx.moveTo(81800, -680) + ctx.lineTo(81800, -625) + ctx.moveTo(83050, -100) + ctx.lineTo(83050, -170) + ctx.moveTo(83375, -100) + ctx.lineTo(83375, -170) + ctx.moveTo(83700, -100) + ctx.lineTo(83700, -170) + ctx.moveTo(84200, -200) + ctx.lineTo(84200, -270) + ctx.stroke() + ctx.strokeStyle = "#FF000099" + ctx.moveTo(66987.5, -810) + ctx.lineTo(66987.5, -715) + ctx.moveTo(67062.5, -810) + ctx.lineTo(67062.5, -715) + ctx.moveTo(66987.5 + 1150, -810) + ctx.lineTo(66987.5 + 1150, -715) + ctx.moveTo(67062.5 + 1250, -810) + ctx.lineTo(67062.5 + 1250, -715) + ctx.moveTo(69175, -810) + ctx.lineTo(69175, -715) + ctx.moveTo(69875, -810) + ctx.lineTo(69875, -715) + ctx.moveTo(74425, -405) + ctx.lineTo(74425, -480) + ctx.moveTo(74625, -405) + ctx.lineTo(74625, -480) + ctx.moveTo(77975, -890) + ctx.lineTo(77975, -940) + ctx.moveTo(78225, -765) + ctx.lineTo(78225, -815) + ctx.moveTo(78475, -640) + ctx.lineTo(78475, -690) + ctx.moveTo(81600, -810) + ctx.lineTo(81600, -715) + ctx.moveTo(81700, -810) + ctx.lineTo(81700, -715) + ctx.moveTo(81800, -810) + ctx.lineTo(81800, -715) + ctx.moveTo(83050, -210) + ctx.lineTo(83050, -270) + ctx.moveTo(83375, -210) + ctx.lineTo(83375, -270) + ctx.moveTo(83700, -210) + ctx.lineTo(83700, -270) + ctx.moveTo(84200, -310) + ctx.lineTo(84200, -370) + ctx.stroke() + ctx.strokeStyle = "#FF000044" + ctx.moveTo(66987.5, -930) + ctx.lineTo(66987.5, -845) + ctx.moveTo(67062.5, -930) + ctx.lineTo(67062.5, -845) + ctx.moveTo(66987.5 + 1150, -930) + ctx.lineTo(66987.5 + 1150, -845) + ctx.moveTo(67062.5 + 1250, -930) + ctx.lineTo(67062.5 + 1250, -845) + ctx.moveTo(69175, -930) + ctx.lineTo(69175, -845) + ctx.moveTo(69875, -930) + ctx.lineTo(69875, -845) + ctx.moveTo(74425, -515) + ctx.lineTo(74425, -590) + ctx.moveTo(74625, -515) + ctx.lineTo(74625, -590) + ctx.moveTo(77975, -975) + ctx.lineTo(77975, -1040) + ctx.moveTo(78225, -850) + ctx.lineTo(78225, -915) + ctx.moveTo(78475, -725) + ctx.lineTo(78475, -790) + ctx.moveTo(81600, -930) + ctx.lineTo(81600, -845) + ctx.moveTo(81700, -930) + ctx.lineTo(81700, -845) + ctx.moveTo(81800, -930) + ctx.lineTo(81800, -845) + ctx.moveTo(83050, -305) + ctx.lineTo(83050, -370) + ctx.moveTo(83375, -305) + ctx.lineTo(83375, -370) + ctx.moveTo(83700, -305) + ctx.lineTo(83700, -370) + ctx.moveTo(84200, -405) + ctx.lineTo(84200, -470) + ctx.stroke() + ctx.strokeStyle = "#FF000022" + ctx.moveTo(66987.5, -1060) + ctx.lineTo(66987.5, -965) + ctx.moveTo(67062.5, -1060) + ctx.lineTo(67062.5, -965) + ctx.moveTo(66987.5 + 1150, -1060) + ctx.lineTo(66987.5 + 1150, -965) + ctx.moveTo(67062.5 + 1250, -1060) + ctx.lineTo(67062.5 + 1250, -965) + ctx.moveTo(69175, -1060) + ctx.lineTo(69175, -965) + ctx.moveTo(69875, -1060) + ctx.lineTo(69875, -965) + ctx.moveTo(74425, -620) + ctx.lineTo(74425, -712.5) + ctx.moveTo(74625, -620) + ctx.lineTo(74625, -712.5) + ctx.moveTo(77975, -1075) + ctx.lineTo(77975, -1120) + ctx.moveTo(78225, -950) + ctx.lineTo(78225, -995) + ctx.moveTo(78475, -825) + ctx.lineTo(78475, -870) + ctx.moveTo(81600, -1060) + ctx.lineTo(81600, -965) + ctx.moveTo(81700, -1060) + ctx.lineTo(81700, -965) + ctx.moveTo(81800, -1060) + ctx.lineTo(81800, -965) + ctx.moveTo(83050, -405) + ctx.lineTo(83050, -470) + ctx.moveTo(83375, -405) + ctx.lineTo(83375, -470) + ctx.moveTo(83700, -405) + ctx.lineTo(83700, -470) + ctx.moveTo(84200, -505) + ctx.lineTo(84200, -570) + ctx.stroke() + let star = 95525; + for (let i = 0; i < 3; i++) { + drawStar(star, -1540, 5, 40, 15); + star += 200; + } + drawStar(97375, -1540, 5, 25, 10) + drawStar(97675, -1540, 5, 25, 10) + drawStar(97975, -1540, 5, 25, 10) + drawStar(98275, -1540, 5, 25, 10) + drawStar(98575, -1540, 5, 25, 10) + + }; + var gradient = ctx.createLinearGradient(0, 0, 175, 0); + gradient.addColorStop(0, "#7704FF00"); + gradient.addColorStop(1, "#00FFFF"); + level.customTopLayer = () => { + if (player.position.x > 25360 && player.position.x < 46470 && player.position.y > -2348 || player.position.x > 87995 && player.position.x < 103950 && player.position.y > -1350) { + player.force.x += 0.0045 + m.airControl = () => { + if (input.up) { + player.force.y -= 0.02 + } + } + m.draw = () => { + ctx.save(); + ctx.globalAlpha = (m.immuneCycle < m.cycle) ? 1 : 0.5 + ctx.translate(player.position.x, player.position.y); + ctx.rotate(player.angle); + if (input.up) { //forward thrust drawing + ctx.rotate(`${Math.max(-0.5, Math.min(m.angle, 0.5))}`) + } else { + ctx.rotate(`${Math.max(0.5, Math.min(m.angle, -0.5))}`) + } + ctx.beginPath(); + ctx.arc(0, 0, 30, 0, 2 * Math.PI); + ctx.fillStyle = m.bodyGradient + ctx.fill(); + ctx.arc(15, 0, 4, 0, 2 * Math.PI); + ctx.strokeStyle = "#333"; + ctx.lineWidth = 2; + ctx.stroke(); + ctx.beginPath() + ctx.moveTo(30, 0) + ctx.lineTo(60, 10) + ctx.lineTo(60, 30) + ctx.lineTo(20, 40) + ctx.lineTo(0, 40) + ctx.lineTo(-50, 60) + ctx.lineTo(-50, 0) + ctx.lineTo(-40, -40) + ctx.lineTo(-40, -40) + ctx.lineTo(-30, 10) + ctx.lineTo(30, 10) + ctx.lineTo(30, 0) + ctx.fill(); + ctx.moveTo(-50, 30) + ctx.lineTo(-60, 30) + ctx.lineTo(-60, 0) + ctx.lineTo(-50, 0) + ctx.fill() + ctx.stroke() + ctx.restore(); + } + } else { + m.draw = () => { + m.drawDefault() + } + m.airControl = () => { + if (input.up && m.buttonCD_jump + 20 < m.cycle && m.yOffWhen.stand > 23 && m.lastOnGroundCycle + 5 > m.cycle) m.jump() + if (m.buttonCD_jump + 60 > m.cycle && !(input.up) && m.Vy < 0) { + Matter.Body.setVelocity(player, { + x: player.velocity.x, + y: player.velocity.y * 0.94 + }); + } + if (input.left) { + if (player.velocity.x > -m.airSpeedLimit / player.mass / player.mass) player.force.x -= m.FxAir; // move player left / a + } else if (input.right) { + if (player.velocity.x < m.airSpeedLimit / player.mass / player.mass) player.force.x += m.FxAir; //move player right / d + } + } + } + ctx.fillStyle = `rgba(68, 68, 68, ${Math.max(0.1,Math.min((-1400 - m.pos.y) / -100, 0.99))})`; + ctx.fillRect(91900, -1675, 12050, 375) + ctx.save() + ctx.translate(104700, -1675); + ctx.fillStyle = gradient; + ctx.fillRect(0, 0, 175, 1675) + ctx.restore() + }; + level.setPosToSpawn(0, -150); //spawn + level.defaultZoom = 1800 //default I think + simulation.zoomTransition(level.defaultZoom) + document.body.style.backgroundColor = "#0150FF"; + document.body.style.transitionDuration = "1500ms"; //smoother transitions, so that people don't complain + level.exit.x = 133150; + level.exit.y = -260; + spawn.mapRect(level.exit.x, level.exit.y + 25, 100, 20); + //ground? I forgot + spawn.mapRect(-5000, 0, 110000, 1000); + //*mountains to prevent player from running away* + spawn.mapVertex(-5775, -1330, "0 0 1000 7000 -1000 7000"); + spawn.mapVertex(-7000, -330, "0 0 1000 4000 -1000 4000"); + spawn.mapVertex(-10000, -330, "0 0 1000 4000 -1000 4000"); + spawn.mapVertex(-9000, -330, "0 0 1000 4000 -1000 4000"); + spawn.mapVertex(-7500, -330, "0 0 1000 4000 -1000 4000"); + spawn.mapRect(-10000, 0, 3500, 1000); + //spawn.mapRect(-10000, -10000, 1000, 11000); + //hunter(-600, -150) + //stage one --> 0% + //spikes + spike(3000, -30); + spike(5000, -30); + spike(4925, 0); + spike(7275, -30); + spike(7375, -30); + spike(9806, -30); + spike(9900, -30); + spike(12000, -130); + spike(13050, -255); + spike(17300, -1105); + spike(17400, -1105); + spike(17200, -1105); + spike(17500, -1105); + spike(18200, -1105); + spike(18100, -1105); + spike(18300, -1105); + spike(18400, -1105); + spike(19875, -1108); + spike(19975, -930); + spike(21000, -930); + spike(21725, -780); + spike(23600, -1230); + spawn.mapVertex(62000, -300, "0 1000 1000 1000 0 0"); + //upside down spikes + let u = Math.PI * 1.5; + spike(18825, -1170, u); + spike(18925, -1170, u); + spike(19025, -1170, u); + spike(19125, -1170, u); + spike(19225, -1170, u); + spike(19325, -1170, u); + spike(49962.5, -2370, u); + spike(50062.5, -2370, u); + spike(50162.5, -2370, u); + spike(50262.5, -2370, u); + spike(50362.5, -2370, u); + //bottom of the flying part + spike(32375, -280); + spike(32475, -280); + spike(32575, -280); + spike(32675, -280); + spike(32775, -280); + spike(32875, -280); + spike(32975, -280); + spike(33075, -280); + spike(33175, -280); + spike(33275, -280); + spike(33375, -280); + spike(33475, -280); + spike(33575, -280); + spike(33675, -280); + spike(35575, -280); + spike(35675, -280); + spike(35775, -280); + spike(35875, -280); + spike(39775, -280); + spike(39875, -280); + spike(39975, -280); + spike(40075, -280); + spike(40175, -280); + spike(40275, -280); + spike(40475, -280); + spike(40575, -280); + spike(40675, -280); + spike(40775, -280); + spike(40875, -280); + spike(40975, -280); + //top of the flying part + spike(32375, -2193, u); + spike(32475, -2193, u); + spike(32575, -2193, u); + spike(32675, -2193, u); + spike(32775, -2193, u); + spike(32875, -2193, u); + spike(32975, -2193, u); + spike(33075, -2193, u); + spike(33175, -2193, u); + spike(33275, -2193, u); + spike(33375, -2193, u); + spike(33475, -2193, u); + spike(33575, -2193, u); + spike(33675, -2193, u); + spike(37750, -2193, u); + spike(37850, -2193, u); + spike(37950, -2193, u); + spike(38050, -2193, u); + spike(43025, -2193, u); + spike(43125, -2193, u); + spike(43225, -2193, u); + spike(43325, -2193, u); + spike(43425, -2193, u); + spike(43525, -2193, u); + spike(43725, -2193, u); + spike(43825, -2193, u); + spike(43925, -2193, u); + spike(44025, -2193, u); + spike(44125, -2193, u); + spike(44225, -2193, u); + spike(44325, -2193, u); + spike(44425, -2193, u); + spike(44525, -2193, u); + spike(44625, -2193, u); + spike(44725, -2193, u); + spike(44825, -2193, u); + //about 55% of the map + spike(63375, -30); + spike(63475, -30); + spike(65775, -30); + spike(65875, -30); + spike(66975, -30); + spike(67075, -30); + spike(66975, -500, u); + spike(67075, -500, u); + spike(68125, -30); + spike(68225, -30); + spike(68325, -30); + spike(68125, -500, u); + spike(68225, -500, u); + spike(68325, -500, u); + spike(69175, -500, u); + spike(69175, -30); + spike(69875, -500, u); + spike(69875, -30); + spike(70675, -30); + spike(70775, -30); + spike(73725, -30); + spike(73825, -30); + spike(74425, -195, u); + spike(74525, -195, u); + spike(74625, -195, u); + spike(75125, -30); + spawn.mapVertex(78725, -466, "0 50 100 50 50 0"); //ocd still triggers from -467 + spike(79300, -180); + spike(80800, -30); + spike(80900, -30); + spike(81600, -30); + spike(81700, -30); + spike(81800, -30); + spike(81600, -500, u); + spike(81700, -500, u); + spike(81800, -500, u); + spike(93425, -1430); + spike(93525, -1430); + spike(85800, -305); + spike(86475, -305); + spike(87150, -455); + spike(94025, -1570, u); + spike(94125, -1570, u); + spike(94500, -1430); + spike(94700, -1430); + spike(94900, -1430); + spike(94600, -1400); + spike(94800, -1400); + spike(94212.5, -1675, u); + spike(94287.5, -1675, u); + //even more 90% + spike(95525, -1400) + spike(95525, -1675, u) + spike(95625, -1400) + spike(95625, -1675, u) + spike(95725, -1400) + spike(95725, -1675, u) + spike(95825, -1400) + spike(95825, -1675, u) + spike(95925, -1400) + spike(95925, -1675, u) + spike(96025, -1400) + spike(96225, -1400) + spike(96650, -1675, u) + spike(96900, -1400) + spike(97150, -1675, u) + spike(98900, -1400) + spike(96975, -155) + spike(97075, -155) + spike(97175, -155) + spike(97275, -155) + spike(97375, -155) + spike(97475, -155) + spike(96975, -1170, u) + spike(97075, -1170, u) + spike(97175, -1170, u) + spike(97275, -1170, u) + spike(97375, -1170, u) + spike(97475, -1170, u) + spike(98700, -1070, u) + spike(98800, -1070, u) + spike(98900, -1070, u) + spike(99000, -1070, u) + spike(99100, -1070, u) + spike(99200, -1070, u) + spike(98700, -230) + spike(98800, -230) + spike(98900, -230) + spike(99000, -230) + spike(99100, -230) + spike(99200, -230) + spike(98975, -1400) + spike(99375, -1675, u) + spike(99300, -1675, u) + spike(99575, -1675, u) + spike(100000, -1400) + //actual stuff + spawn.mapRect(7425, -175, 75, 175); + spawn.mapRect(7675, -250, 75, 250); + spawn.mapRect(7925, -325, 75, 325); + spawn.mapRect(10625, -100, 725, 100); + spawn.mapRect(11625, -100, 725, 100); + spawn.mapRect(12650, -225, 800, 225); + spawn.mapRect(13675, -300, 100, 50); + spawn.mapRect(13975, -400, 100, 50); + spawn.mapRect(14275, -500, 100, 50); + spawn.mapRect(14575, -600, 100, 50); + spawn.mapRect(14875, -700, 100, 50); + spawn.mapRect(15175, -800, 100, 50); + spawn.mapRect(15475, -900, 100, 50); + spawn.mapRect(15775, -1000, 100, 50); + spawn.mapRect(16075, -1100, 100, 50); + spawn.mapRect(16375, -1200, 100, 50); + spawn.mapRect(16625, -1075, 350, 100); + spawn.mapRect(16800, -1075, 1825, 1125); + spawn.mapRect(17250, -1225, 200, 50); + spawn.mapRect(18150, -1225, 200, 50); + spawn.mapRect(18550, -975, 1050, 1025); + spawn.mapRect(19525, -1075, 400, 1125); + spawn.mapRect(18775, -1275, 600, 75); + spawn.mapRect(19825, -900, 500, 950); + spawn.mapRect(20150, -900, 375, 125); + spawn.mapRect(20750, -900, 300, 50); + spawn.mapRect(21225, -750, 550, 50); + spawn.mapRect(21950, -625, 450, 50); + spawn.mapRect(22550, -700, 100, 50); + spawn.mapRect(22750, -800, 100, 50); + spawn.mapRect(22950, -900, 100, 50); + spawn.mapRect(23150, -1000, 100, 50); + spawn.mapRect(23350, -1100, 100, 50); + spawn.mapRect(23550, -1200, 100, 50); + spawn.mapRect(23525, -975, 400, 100); + spawn.mapRect(23650, -975, 1825, 1025); + spawn.mapRect(23750, -2500, 625, 1125); + spawn.mapRect(24000, -2500, 1200, 1300); + spawn.mapRect(24900, -2500, 575, 1125); + spawn.mapRect(25425, -2500, 20000, 275); + spawn.mapRect(25425, -250, 20000, 300); + spawn.mapRect(29450, -2300, 200, 675); + spawn.mapRect(32225, -2225, 100, 100); + spawn.mapRect(33725, -2225, 100, 100); + spawn.mapRect(32225, -350, 100, 100); + spawn.mapRect(33725, -350, 100, 100); + spawn.mapRect(37600, -2225, 100, 225); + spawn.mapRect(35425, -475, 100, 225); + spawn.mapRect(39625, -400, 100, 150); + spawn.mapRect(40325, -500, 100, 250); + spawn.mapRect(41025, -600, 100, 350); + spawn.mapRect(43575, -2225, 100, 300); + spawn.mapRect(44875, -2500, 1675, 1225); + spawn.mapRect(44875, -950, 1675, 1000); + spawn.mapRect(46425, -825, 1400, 875); + spawn.mapRect(48075, -1100, 175, 1150); + spawn.mapRect(48575, -1300, 175, 1375); + spawn.mapRect(49075, -1500, 175, 1550); + spawn.mapRect(49575, -1700, 175, 975); + spawn.mapRect(49575, -500, 175, 550); + spawn.mapRect(50075, -1900, 175, 700); + spawn.mapRect(50075, -1000, 1000, 1000); + spawn.mapRect(49912.5, -2525, 500, 125); + spawn.mapRect(51300, -1200, 175, 1225); + spawn.mapRect(51700, -1400, 175, 1425); + spawn.mapRect(52100, -1600, 175, 1625); + spawn.mapRect(52500, -1800, 175, 1825); + spawn.mapRect(52900, -2000, 175, 2025); + spawn.mapRect(53300, -2200, 175, 2225); + spawn.mapRect(53700, -2400, 175, 2425); + spawn.mapRect(54100, -2600, 175, 2625); + spawn.mapRect(54500, -2800, 175, 2825); + spawn.mapRect(54900, -3000, 175, 3025); + spawn.mapRect(55050, -3000, 175, 75); + spawn.mapRect(55475, -2875, 250, 75); + spawn.mapRect(55900, -2625, 250, 75); + spawn.mapRect(56500, -2400, 375, 75); + spawn.mapRect(57200, -2200, 250, 75); + spawn.mapRect(57650, -2050, 375, 75); + spawn.mapRect(57650, -1970, 375, 1975); + spawn.mapRect(58650, -1875, 375, 75); + spawn.mapRect(58650, -1795, 375, 1975); + spawn.mapRect(59525, -1750, 175, 75); + spawn.mapRect(60125, -1600, 175, 75); + spawn.mapRect(60750, -1425, 175, 75); + spawn.mapRect(61250, -1225, 175, 75); + spawn.mapRect(61550, -1025, 225, 1125); + spawn.mapRect(63525, -100, 100, 100); + spawn.mapRect(63800, -225, 200, 50); + spawn.mapRect(64175, -100, 100, 100); + spawn.mapRect(64275, -100, 100, 100); + spawn.mapRect(64375, -100, 100, 100); + spawn.mapRect(64675, -225, 200, 50); + spawn.mapRect(65025, -325, 200, 50); + spawn.mapRect(65425, -100, 300, 100); + spawn.mapRect(66925, -650, 200, 120); + spawn.mapRect(68075, -650, 300, 120); + spawn.mapRect(69125, -650, 100, 120); + spawn.mapRect(69825, -650, 100, 120); + spawn.mapRect(70825, -100, 100, 100); + spawn.mapRect(71225, -200, 100, 200); + spawn.mapRect(71625, -300, 100, 300); + spawn.mapRect(72025, -400, 100, 400); + spawn.mapRect(72125, -400, 100, 50); + spawn.mapRect(72375, -325, 100, 50); + spawn.mapRect(72625, -200, 100, 50); + spawn.mapRect(72875, -75, 100, 50); + spawn.mapRect(74375, -300, 300, 75); + spawn.mapRect(75175, -100, 100, 100); + spawn.mapRect(75900, -150, 400, 50); + spawn.mapRect(76550, -250, 100, 50); + spawn.mapRect(76850, -325, 100, 50); + spawn.mapRect(77125, -400, 100, 50); + spawn.mapRect(77425, -475, 300, 50); + spawn.mapRect(77925, -400, 100, 100); + spawn.mapRect(78175, -275, 100, 100); + spawn.mapRect(78425, -150, 100, 100); + spawn.mapRect(78675, -50, 100, 100); + spawn.mapRect(77925, -800, 100, 100); + spawn.mapRect(78175, -675, 100, 100); + spawn.mapRect(78425, -550, 100, 100); + spawn.mapRect(78675, -450, 100, 100); + spawn.mapRect(78450, -100, 50, 125); + spawn.mapRect(79025, -150, 100, 50); + spawn.mapRect(79250, -150, 100, 50); + spawn.mapRect(79475, -150, 100, 50); + spawn.mapRect(79800, -225, 300, 50); + spawn.mapRect(80250, -150, 100, 50); + spawn.mapRect(80450, -100, 300, 50); + spawn.mapRect(81550, -650, 300, 120); + spawn.mapRect(82800, -100, 100, 100); + spawn.mapRect(82900, -100, 200, 50); + spawn.mapRect(83325, -100, 100, 50); + spawn.mapRect(83650, -100, 200, 50); + spawn.mapRect(83850, -100, 100, 100); + spawn.mapRect(83950, -200, 100, 200); + spawn.mapRect(84050, -200, 200, 50); + spawn.mapRect(84500, -350, 100, 50); + spawn.mapRect(84725, -250, 100, 50); + spawn.mapRect(84950, -150, 300, 50); + spawn.mapRect(85525, -275, 100, 50); + spawn.mapRect(85750, -275, 100, 50); + spawn.mapRect(85950, -275, 375, 50); + spawn.mapRect(86425, -275, 100, 50); + spawn.mapRect(86625, -275, 100, 50); + spawn.mapRect(86900, -425, 300, 50); + spawn.mapRect(87375, -275, 300, 50); + spawn.mapRect(87900, -300, 125, 300); + spawn.mapRect(87900, -1850, 125, 1150); + spawn.mapRect(87900, -1850, 17000, 175); + spawn.mapRect(104875, -1850, 125, 2850); //Last part + spawn.mapRect(87900, -1850, 4000, 550); + spawn.mapRect(89650, -100, 100, 100); + spawn.mapRect(89750, -200, 100, 100); + spawn.mapRect(89850, -300, 600, 100); + spawn.mapRect(90450, -200, 100, 100); + spawn.mapRect(90550, -100, 100, 100); + spawn.mapRect(89650, -1300, 100, 100); + spawn.mapRect(89750, -1200, 100, 100); + spawn.mapRect(89850, -1100, 600, 100); + spawn.mapRect(90450, -1200, 100, 100); + spawn.mapRect(90550, -1300, 100, 100); + spawn.mapRect(91950, -100, 100, 100); + spawn.mapRect(92050, -200, 100, 100); + spawn.mapRect(92150, -300, 600, 100); + spawn.mapRect(92750, -200, 100, 100); + spawn.mapRect(92850, -100, 100, 100); + spawn.mapRect(92050, -1200, 100, 100); + spawn.mapRect(92150, -1100, 600, 100); + spawn.mapRect(92750, -1200, 100, 100); + spawn.mapRect(92850, -1300, 100, 100); + spawn.mapRect(92950, -1400, 11000, 100); + spawn.mapRect(93975, -1700, 200, 100); + spawn.mapRect(96075, -1500, 100, 100); + spawn.mapRect(96500, -1675, 100, 100); + spawn.mapRect(96950, -1490, 1900, 100); + spawn.mapRect(97200, -1685, 1650, 100); + spawn.mapRect(93900, -300, 100, 300); + spawn.mapRect(93900, -400, 300, 100); + spawn.mapRect(94100, -300, 100, 300); + spawn.mapRect(95025, -1300, 100, 300); + spawn.mapRect(95025, -1000, 300, 100); + spawn.mapRect(95225, -1300, 100, 300); + spawn.mapRect(96925, -1300, 600, 100); + spawn.mapRect(96925, -125, 600, 125); + spawn.mapRect(98650, -1300, 100, 200); + spawn.mapRect(98650, -1200, 600, 100); + spawn.mapRect(99150, -1300, 100, 200); + spawn.mapRect(98650, -200, 100, 200); + spawn.mapRect(99150, -200, 100, 200); + spawn.mapRect(98650, -200, 600, 100); + spawn.mapRect(100825, -1300, 100, 300); + spawn.mapRect(100825, -1100, 1325, 100); + spawn.mapRect(102050, -1300, 100, 300); + spawn.mapRect(100825, -300, 100, 300); + spawn.mapRect(100825, -300, 1350, 100); + spawn.mapRect(102075, -300, 100, 300); + spawn.mapRect(99425, -1675, 100, 125); + spawn.mapRect(100050, -1525, 100, 125); + + spawn.mapRect(132025, -225, 2325, 525); + spawn.mapRect(132025, -1450, 500, 1750); + spawn.mapRect(133875, -1475, 475, 1775); + spawn.mapRect(132025, -1925, 2325, 475); + + simulation.enableConstructMode() //also remove when done + coin(50165.9, -1090) + coin(78725.4, -600) + coin(103830.0, -1473) + hunter(0, -1000) + }, // ******************************************************************************************************** // ******************************************************************************************************** // ***************************************** training levels ********************************************** diff --git a/todo.txt b/todo.txt index 483ddb8..a40dab1 100644 --- a/todo.txt +++ b/todo.txt @@ -1,17 +1,10 @@ ******************************************************** NEXT PATCH ************************************************** -new level: lock - it's a work in progress - I'm looking for feedback: - anything confusing? - combat too hard/easy? - it will probably feel hard because you don't know the map yet +level: lock + there is a way to escape the slime on the right side now -images are now hidden by default for new players -time dilation 18->15 energy/s - -bug fixes: - extended CSS media rules and power up selection code to entanglement +new community level! + stereoMadness by Richard0820 *********************************************************** TODO *****************************************************