blocks don't block vision
more bug fixes (pulse color, backwards induction giving too many tech) mobs can now see through blocks mobs spawns and level spawns have been adjusted to prevent getting zonked at the start of a level
This commit is contained in:
@@ -452,7 +452,7 @@ const b = {
|
|||||||
},
|
},
|
||||||
pulse(energy, angle = m.angle) {
|
pulse(energy, angle = m.angle) {
|
||||||
let best;
|
let best;
|
||||||
let explosionRadius = 1400 * energy
|
let explosionRadius = 1300 * energy
|
||||||
let range = 3000
|
let range = 3000
|
||||||
const path = [{
|
const path = [{
|
||||||
x: m.pos.x + 20 * Math.cos(angle),
|
x: m.pos.x + 20 * Math.cos(angle),
|
||||||
@@ -537,7 +537,7 @@ const b = {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (best.who) b.explosion(path[1], explosionRadius, true)
|
if (best.who) b.explosion(path[1], explosionRadius)
|
||||||
|
|
||||||
if (tech.isPulseStun) {
|
if (tech.isPulseStun) {
|
||||||
const range = 100 + 2000 * energy
|
const range = 100 + 2000 * energy
|
||||||
@@ -661,7 +661,7 @@ const b = {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (best.who) b.explosion(path[1], explosionRadius, true)
|
if (best.who) b.explosion(path[1], explosionRadius)
|
||||||
|
|
||||||
//draw laser beam
|
//draw laser beam
|
||||||
ctx.beginPath();
|
ctx.beginPath();
|
||||||
|
|||||||
151
js/level.js
151
js/level.js
@@ -12,7 +12,7 @@ const level = {
|
|||||||
start() {
|
start() {
|
||||||
if (level.levelsCleared === 0) { //this code only runs on the first level
|
if (level.levelsCleared === 0) { //this code only runs on the first level
|
||||||
// simulation.enableConstructMode() //used to build maps in testing mode
|
// simulation.enableConstructMode() //used to build maps in testing mode
|
||||||
// level.difficultyIncrease(25)
|
// level.difficultyIncrease(125)
|
||||||
// simulation.zoomScale = 1000;
|
// simulation.zoomScale = 1000;
|
||||||
// simulation.setZoom();
|
// simulation.setZoom();
|
||||||
// m.setField("nano-scale manufacturing")
|
// m.setField("nano-scale manufacturing")
|
||||||
@@ -822,9 +822,9 @@ const level = {
|
|||||||
}
|
}
|
||||||
//float
|
//float
|
||||||
if (player.velocity.y > 5) player.force.y -= 0.95 * player.mass * simulation.g
|
if (player.velocity.y > 5) player.force.y -= 0.95 * player.mass * simulation.g
|
||||||
const slowY = (player.velocity.y > 0) ? Math.max(0.4, 1 - 0.001 * player.velocity.y * player.velocity.y) : Math.max(0.98, 1 - 0.001 * Math.abs(player.velocity.y)) //down : up
|
const slowY = (player.velocity.y > 0) ? Math.max(0.8, 1 - 0.002 * player.velocity.y * player.velocity.y) : Math.max(0.98, 1 - 0.001 * Math.abs(player.velocity.y)) //down : up
|
||||||
Matter.Body.setVelocity(player, {
|
Matter.Body.setVelocity(player, {
|
||||||
x: Math.max(0.6, 1 - 0.07 * Math.abs(player.velocity.x)) * player.velocity.x,
|
x: Math.max(0.95, 1 - 0.036 * Math.abs(player.velocity.x)) * player.velocity.x,
|
||||||
y: slowY * player.velocity.y
|
y: slowY * player.velocity.y
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -1221,7 +1221,7 @@ const level = {
|
|||||||
};
|
};
|
||||||
level.customTopLayer = () => {};
|
level.customTopLayer = () => {};
|
||||||
|
|
||||||
level.setPosToSpawn(0, -750); //normal spawn
|
level.setPosToSpawn(0, -475); //normal spawn
|
||||||
spawn.mapRect(level.enter.x, level.enter.y + 20, 100, 20);
|
spawn.mapRect(level.enter.x, level.enter.y + 20, 100, 20);
|
||||||
level.exit.x = 6500;
|
level.exit.x = 6500;
|
||||||
level.exit.y = -230;
|
level.exit.y = -230;
|
||||||
@@ -1241,7 +1241,11 @@ const level = {
|
|||||||
spawn.mapRect(-950, 0, 8200, 800); //ground
|
spawn.mapRect(-950, 0, 8200, 800); //ground
|
||||||
spawn.mapRect(-950, -1200, 800, 1400); //left wall
|
spawn.mapRect(-950, -1200, 800, 1400); //left wall
|
||||||
spawn.mapRect(-950, -1800, 8200, 800); //roof
|
spawn.mapRect(-950, -1800, 8200, 800); //roof
|
||||||
spawn.mapRect(-250, -700, 1000, 900); // shelf
|
// spawn.mapRect(-250, -700, 1000, 900); // shelf
|
||||||
|
// spawn.mapRect(-250, -350, 600, 550);
|
||||||
|
spawn.mapRect(175, -700, 575, 950);
|
||||||
|
spawn.mapRect(-250, -425, 600, 650);
|
||||||
|
|
||||||
spawn.mapRect(-250, -1200, 1000, 250); // shelf roof
|
spawn.mapRect(-250, -1200, 1000, 250); // shelf roof
|
||||||
powerUps.spawnStartingPowerUps(600, -800);
|
powerUps.spawnStartingPowerUps(600, -800);
|
||||||
|
|
||||||
@@ -1619,6 +1623,8 @@ const level = {
|
|||||||
spawn.mapRect(300, -375, 50, 225);
|
spawn.mapRect(300, -375, 50, 225);
|
||||||
spawn.bodyRect(312, -150, 25, 140);
|
spawn.bodyRect(312, -150, 25, 140);
|
||||||
spawn.mapRect(300, -10, 50, 50);
|
spawn.mapRect(300, -10, 50, 50);
|
||||||
|
spawn.mapVertex(1555, 0, "625 0 75 0 200 -100 500 -100"); //entrance ramp
|
||||||
|
|
||||||
|
|
||||||
//upper entrance / exit
|
//upper entrance / exit
|
||||||
spawn.mapRect(-400, -1050, 750, 50);
|
spawn.mapRect(-400, -1050, 750, 50);
|
||||||
@@ -1692,16 +1698,22 @@ const level = {
|
|||||||
//mobs
|
//mobs
|
||||||
spawn.randomMob(1075, -3500, -0.3);
|
spawn.randomMob(1075, -3500, -0.3);
|
||||||
// spawn.randomMob(-75, -3425, 0.2);
|
// spawn.randomMob(-75, -3425, 0.2);
|
||||||
spawn.randomMob(1475, -225, -0.3);
|
// spawn.randomMob(1475, -225, -0.3);
|
||||||
spawn.randomMob(2075, -150, -0.2);
|
// spawn.randomMob(2075, -150, -0.2);
|
||||||
spawn.randomMob(2175, -700, -0.2);
|
spawn.randomMob(2175, -700, -0.2);
|
||||||
spawn.randomMob(-75, -850, -0.1);
|
spawn.randomMob(-75, -850, -0.1);
|
||||||
spawn.randomMob(1300, -600, -0.1);
|
// spawn.randomMob(1300, -600, -0.1);
|
||||||
spawn.randomMob(550, -3400, 0);
|
spawn.randomMob(550, -3400, 0);
|
||||||
spawn.randomMob(0, -1175, 0.5);
|
spawn.randomMob(0, -1175, 0.5);
|
||||||
spawn.randomMob(-75, -1150, 0.5);
|
spawn.randomMob(-75, -1150, 0.5);
|
||||||
spawn.randomMob(1075, -625, 0.5);
|
spawn.randomMob(1075, -625, 0.5);
|
||||||
spawn.randomMob(1725, -575, 0.5);
|
// spawn.randomMob(1725, -575, 0.5);
|
||||||
|
spawn.randomMob(800, -3400, -0.3);
|
||||||
|
spawn.randomMob(1225, -3375, -0.2);
|
||||||
|
spawn.randomMob(1200, -1125, -0.1);
|
||||||
|
spawn.randomMob(2050, -950, 0.5);
|
||||||
|
|
||||||
|
|
||||||
if (simulation.difficulty > 40) {
|
if (simulation.difficulty > 40) {
|
||||||
spawn.randomMob(2300, -2775, -0.5);
|
spawn.randomMob(2300, -2775, -0.5);
|
||||||
spawn.randomMob(600, -925, -0.5);
|
spawn.randomMob(600, -925, -0.5);
|
||||||
@@ -1842,6 +1854,7 @@ const level = {
|
|||||||
spawn.mapRect(9300, 2590, 650, 25);
|
spawn.mapRect(9300, 2590, 650, 25);
|
||||||
spawn.mapRect(9700, 2580, 100, 50);
|
spawn.mapRect(9700, 2580, 100, 50);
|
||||||
|
|
||||||
|
|
||||||
spawn.randomGroup(1300, 2100, 0.1);
|
spawn.randomGroup(1300, 2100, 0.1);
|
||||||
spawn.randomMob(8300, 2100, 0.1);
|
spawn.randomMob(8300, 2100, 0.1);
|
||||||
spawn.randomSmallMob(2575, -75, 0.1); //entrance
|
spawn.randomSmallMob(2575, -75, 0.1); //entrance
|
||||||
@@ -1850,7 +1863,7 @@ const level = {
|
|||||||
spawn.randomMob(2425, 2150, 0.1);
|
spawn.randomMob(2425, 2150, 0.1);
|
||||||
spawn.randomSmallMob(3500, 250, 0.2);
|
spawn.randomSmallMob(3500, 250, 0.2);
|
||||||
spawn.randomMob(3800, 2175, 0.2);
|
spawn.randomMob(3800, 2175, 0.2);
|
||||||
spawn.randomSmallMob(1100, -300, 0.2); //entrance
|
spawn.randomSmallMob(2500, -275, 0.2); //entrance
|
||||||
spawn.randomMob(4450, 2500, 0.2);
|
spawn.randomMob(4450, 2500, 0.2);
|
||||||
spawn.randomMob(6350, 2525, 0.2);
|
spawn.randomMob(6350, 2525, 0.2);
|
||||||
spawn.randomGroup(9200, 2400, 0.3);
|
spawn.randomGroup(9200, 2400, 0.3);
|
||||||
@@ -1891,7 +1904,8 @@ const level = {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
level.setPosToSpawn(-50, -50); //normal spawn
|
level.setPosToSpawn(-100, 210); //normal spawn
|
||||||
|
spawn.mapRect(-150, 240, 100, 30);
|
||||||
level.exit.x = -100;
|
level.exit.x = -100;
|
||||||
level.exit.y = -425;
|
level.exit.y = -425;
|
||||||
spawn.mapRect(level.exit.x, level.exit.y + 15, 100, 50); //exit bump
|
spawn.mapRect(level.exit.x, level.exit.y + 15, 100, 50); //exit bump
|
||||||
@@ -1907,14 +1921,13 @@ const level = {
|
|||||||
document.body.style.backgroundColor = "#dbdcde";
|
document.body.style.backgroundColor = "#dbdcde";
|
||||||
|
|
||||||
//spawn start building
|
//spawn start building
|
||||||
spawn.mapRect(-300, -800, 50, 800);
|
spawn.mapRect(-350, -800, 100, 1100);
|
||||||
spawn.mapRect(-100, -20, 100, 30);
|
|
||||||
// spawn.mapRect(-300, -10, 500, 50);
|
// spawn.mapRect(-300, -10, 500, 50);
|
||||||
spawn.mapRect(150, -510, 50, 365);
|
spawn.mapRect(150, -510, 50, 365);
|
||||||
spawn.bodyRect(170, -130, 14, 145, 1, spawn.propsFriction); //door to starting room
|
spawn.bodyRect(170, -140, 20, 163, 1, spawn.propsFriction); //door to starting room
|
||||||
|
spawn.mapVertex(175, 200, "625 0 300 0 425 -300 500 -300"); //entrance ramp
|
||||||
// spawn.mapRect(-300, 0, 1000, 300); //ground
|
// spawn.mapRect(-300, 0, 1000, 300); //ground
|
||||||
spawn.mapVertex(-18, 145, "625 0 0 0 0 -300 500 -300"); //entrance ramp
|
spawn.mapRect(-350, 250, 6350, 300); //deeper ground
|
||||||
spawn.mapRect(-300, 250, 6300, 300); //deeper ground
|
|
||||||
spawn.bodyRect(2100, 50, 80, 80);
|
spawn.bodyRect(2100, 50, 80, 80);
|
||||||
spawn.bodyRect(2000, 50, 60, 60);
|
spawn.bodyRect(2000, 50, 60, 60);
|
||||||
// spawn.bodyRect(1650, 50, 300, 200);
|
// spawn.bodyRect(1650, 50, 300, 200);
|
||||||
@@ -1923,10 +1936,10 @@ const level = {
|
|||||||
|
|
||||||
//exit building
|
//exit building
|
||||||
// spawn.mapRect(-100, -410, 100, 30);
|
// spawn.mapRect(-100, -410, 100, 30);
|
||||||
spawn.mapRect(-300, -800, 500, 50);
|
spawn.mapRect(-350, -850, 550, 100);
|
||||||
spawn.mapRect(150, -800, 50, 110);
|
spawn.mapRect(150, -800, 50, 110);
|
||||||
spawn.bodyRect(170, -690, 14, 180, 1, spawn.propsFriction); //door to exit room
|
spawn.bodyRect(170, -690, 14, 180, 1, spawn.propsFriction); //door to exit room
|
||||||
spawn.mapRect(-300, -400, 500, 100); //far left starting ceiling
|
spawn.mapRect(-300, -400, 500, 150); //far left starting ceiling
|
||||||
level.fill.push({
|
level.fill.push({
|
||||||
x: -250,
|
x: -250,
|
||||||
y: -400,
|
y: -400,
|
||||||
@@ -2050,10 +2063,10 @@ const level = {
|
|||||||
spawn.randomMob(5750, 125, 0.4);
|
spawn.randomMob(5750, 125, 0.4);
|
||||||
spawn.randomMob(5900, -1500, 0.4);
|
spawn.randomMob(5900, -1500, 0.4);
|
||||||
spawn.randomMob(4700, -800, 0.4);
|
spawn.randomMob(4700, -800, 0.4);
|
||||||
spawn.randomMob(1400, -400, 0.3);
|
spawn.randomMob(1400, 200, 0.3);
|
||||||
spawn.randomMob(2850, 175, 0.4);
|
spawn.randomMob(2850, 175, 0.4);
|
||||||
spawn.randomMob(2000, -2800, 0.4);
|
spawn.randomMob(2000, -2800, 0.4);
|
||||||
spawn.randomMob(2200, -500, 0.4);
|
spawn.randomMob(2400, -400, 0.4);
|
||||||
spawn.randomMob(4475, -3550, 0.3);
|
spawn.randomMob(4475, -3550, 0.3);
|
||||||
spawn.randomGroup(5000, -2150, 1);
|
spawn.randomGroup(5000, -2150, 1);
|
||||||
spawn.randomGroup(3700, -4100, 0.3);
|
spawn.randomGroup(3700, -4100, 0.3);
|
||||||
@@ -2277,12 +2290,15 @@ const level = {
|
|||||||
spawn.spawnStairs(3800, 0, 3, 150, 206); //stairs top exit
|
spawn.spawnStairs(3800, 0, 3, 150, 206); //stairs top exit
|
||||||
spawn.mapRect(3400, -275, 450, 275); //exit platform
|
spawn.mapRect(3400, -275, 450, 275); //exit platform
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
spawn.randomSmallMob(2200, -1775);
|
spawn.randomSmallMob(2200, -1775);
|
||||||
spawn.randomSmallMob(4000, -825);
|
spawn.randomSmallMob(4000, -825);
|
||||||
spawn.randomSmallMob(-350, -2400);
|
spawn.randomSmallMob(-350, -3400);
|
||||||
spawn.randomMob(4250, -1350, 0.8);
|
spawn.randomMob(4250, -1350, 0.8);
|
||||||
spawn.randomMob(2550, -1350, 0.8);
|
spawn.randomMob(2550, -1350, 0.8);
|
||||||
spawn.randomMob(1225, -2400, 0.3);
|
spawn.randomMob(1875, -1075, 0.3);
|
||||||
spawn.randomMob(1120, -1200, 0.3);
|
spawn.randomMob(1120, -1200, 0.3);
|
||||||
spawn.randomMob(3000, -1150, 0.2);
|
spawn.randomMob(3000, -1150, 0.2);
|
||||||
spawn.randomMob(3200, -1150, 0.3);
|
spawn.randomMob(3200, -1150, 0.3);
|
||||||
@@ -2291,11 +2307,11 @@ const level = {
|
|||||||
spawn.randomMob(3600, -1800, 0.1);
|
spawn.randomMob(3600, -1800, 0.1);
|
||||||
spawn.randomMob(5200, -100, 0.3);
|
spawn.randomMob(5200, -100, 0.3);
|
||||||
spawn.randomMob(5275, -900, 0.2);
|
spawn.randomMob(5275, -900, 0.2);
|
||||||
spawn.randomMob(900, -2125, 0.3);
|
spawn.randomMob(0, -1075, 0.3);
|
||||||
spawn.randomGroup(600, -1575, 0);
|
spawn.randomGroup(600, -1575, 0);
|
||||||
spawn.randomGroup(2225, -1325, 0.4);
|
spawn.randomGroup(2225, -1325, 0.4);
|
||||||
spawn.randomGroup(4900, -1200, 0);
|
spawn.randomGroup(4900, -1200, 0);
|
||||||
if (simulation.difficulty > 3) spawn.randomLevelBoss(3200, -2050);
|
if (simulation.difficulty > 3) spawn.randomLevelBoss(3200, -1900);
|
||||||
powerUps.addRerollToLevel() //needs to run after mobs are spawned
|
powerUps.addRerollToLevel() //needs to run after mobs are spawned
|
||||||
if (tech.isDuplicateBoss && Math.random() < 2 * tech.duplicationChance()) spawn.randomLevelBoss(2175, -2425);
|
if (tech.isDuplicateBoss && Math.random() < 2 * tech.duplicationChance()) spawn.randomLevelBoss(2175, -2425);
|
||||||
},
|
},
|
||||||
@@ -2441,9 +2457,12 @@ const level = {
|
|||||||
spawn.mapRect(4250, -3700, 50, 300);
|
spawn.mapRect(4250, -3700, 50, 300);
|
||||||
spawn.mapRect(3700, -3250, 1100, 100);
|
spawn.mapRect(3700, -3250, 1100, 100);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
spawn.randomGroup(350, -500, 1)
|
spawn.randomGroup(350, -500, 1)
|
||||||
spawn.randomSmallMob(-225, 25);
|
spawn.randomSmallMob(-225, 25);
|
||||||
spawn.randomSmallMob(1000, -1100);
|
spawn.randomSmallMob(2100, -900);
|
||||||
|
|
||||||
spawn.randomSmallMob(4000, -250);
|
spawn.randomSmallMob(4000, -250);
|
||||||
spawn.randomSmallMob(4450, -3000);
|
spawn.randomSmallMob(4450, -3000);
|
||||||
spawn.randomSmallMob(5600, 100);
|
spawn.randomSmallMob(5600, 100);
|
||||||
@@ -2454,7 +2473,8 @@ const level = {
|
|||||||
spawn.randomMob(3900, -2700, 0.8);
|
spawn.randomMob(3900, -2700, 0.8);
|
||||||
spawn.randomMob(3600, -500, 0.8);
|
spawn.randomMob(3600, -500, 0.8);
|
||||||
spawn.randomMob(3400, -200, 0.8);
|
spawn.randomMob(3400, -200, 0.8);
|
||||||
spawn.randomMob(1650, -1300, 0.7)
|
// spawn.randomMob(1650, -1300, 0.7)
|
||||||
|
spawn.randomMob(425, 0, 0.7);
|
||||||
spawn.randomMob(4100, -50, 0.7);
|
spawn.randomMob(4100, -50, 0.7);
|
||||||
spawn.randomMob(4100, -50, 0.5);
|
spawn.randomMob(4100, -50, 0.5);
|
||||||
spawn.randomMob(1700, -50, 0.3)
|
spawn.randomMob(1700, -50, 0.3)
|
||||||
@@ -2639,7 +2659,9 @@ const level = {
|
|||||||
spawn.bodyRect(1425, -1110, 115, 25, 0.9); //block on far left building
|
spawn.bodyRect(1425, -1110, 115, 25, 0.9); //block on far left building
|
||||||
spawn.bodyRect(1540, -1110, 300, 25, 0.9); //block on far left building
|
spawn.bodyRect(1540, -1110, 300, 25, 0.9); //block on far left building
|
||||||
|
|
||||||
spawn.randomSmallMob(1300, -70);
|
|
||||||
|
spawn.randomMob(-100, -1300, 0.5);
|
||||||
|
spawn.randomSmallMob(1850, -600);
|
||||||
spawn.randomSmallMob(3200, -100);
|
spawn.randomSmallMob(3200, -100);
|
||||||
spawn.randomSmallMob(4450, -100);
|
spawn.randomSmallMob(4450, -100);
|
||||||
spawn.randomSmallMob(2700, -475);
|
spawn.randomSmallMob(2700, -475);
|
||||||
@@ -2653,7 +2675,7 @@ const level = {
|
|||||||
spawn.randomMob(1690, -2250, 0.25);
|
spawn.randomMob(1690, -2250, 0.25);
|
||||||
spawn.randomMob(2200, -600, 0.2);
|
spawn.randomMob(2200, -600, 0.2);
|
||||||
spawn.randomMob(850, -1300, 0.25);
|
spawn.randomMob(850, -1300, 0.25);
|
||||||
spawn.randomMob(-100, -900, -0.2);
|
spawn.randomMob(-100, -1700, -0.2);
|
||||||
spawn.randomGroup(3700, -1500, 0.4);
|
spawn.randomGroup(3700, -1500, 0.4);
|
||||||
spawn.randomGroup(1700, -900, 0.4);
|
spawn.randomGroup(1700, -900, 0.4);
|
||||||
if (simulation.difficulty > 3) spawn.randomLevelBoss(2600, -2300);
|
if (simulation.difficulty > 3) spawn.randomLevelBoss(2600, -2300);
|
||||||
@@ -2666,7 +2688,7 @@ const level = {
|
|||||||
};
|
};
|
||||||
level.customTopLayer = () => {};
|
level.customTopLayer = () => {};
|
||||||
|
|
||||||
level.setPosToSpawn(0, -700); //normal spawn
|
level.setPosToSpawn(-300, -700); //normal spawn
|
||||||
spawn.mapRect(level.enter.x, level.enter.y + 20, 100, 20);
|
spawn.mapRect(level.enter.x, level.enter.y + 20, 100, 20);
|
||||||
level.exit.x = -4275;
|
level.exit.x = -4275;
|
||||||
level.exit.y = -2805;
|
level.exit.y = -2805;
|
||||||
@@ -2771,9 +2793,12 @@ const level = {
|
|||||||
spawn.mapRect(-2225, 0, 2475, 150);
|
spawn.mapRect(-2225, 0, 2475, 150);
|
||||||
spawn.mapRect(175, -1000, 75, 1100);
|
spawn.mapRect(175, -1000, 75, 1100);
|
||||||
|
|
||||||
spawn.mapRect(-175, -985, 25, 175);
|
// spawn.mapRect(-175, -985, 50, 175);
|
||||||
spawn.bodyRect(-170, -810, 14, 160, 1, spawn.propsFriction); //door to starting room
|
spawn.mapRect(-600, -1075, 50, 475);
|
||||||
spawn.mapRect(-600, -650, 825, 50);
|
// spawn.bodyRect(-170, -810, 14, 160, 1, spawn.propsFriction); //door to starting room
|
||||||
|
// spawn.mapRect(-600, -650, 825, 50);
|
||||||
|
// spawn.mapRect(-600, -1075, 75, 475);
|
||||||
|
spawn.mapRect(-600, -650, 625, 50);
|
||||||
spawn.mapRect(-1300, -650, 500, 50);
|
spawn.mapRect(-1300, -650, 500, 50);
|
||||||
spawn.mapRect(-175, -250, 425, 300);
|
spawn.mapRect(-175, -250, 425, 300);
|
||||||
spawn.bodyRect(-75, -300, 50, 50);
|
spawn.bodyRect(-75, -300, 50, 50);
|
||||||
@@ -3036,29 +3061,29 @@ const level = {
|
|||||||
|
|
||||||
//mobs
|
//mobs
|
||||||
spawn.randomSmallMob(-1125, 550);
|
spawn.randomSmallMob(-1125, 550);
|
||||||
spawn.randomSmallMob(-2325, 800);
|
|
||||||
spawn.randomSmallMob(-2950, -50);
|
spawn.randomSmallMob(-2950, -50);
|
||||||
|
spawn.randomMob(-2025, 175, 0.3);
|
||||||
|
spawn.randomMob(-2325, 450, 0.3);
|
||||||
|
spawn.randomMob(-2925, 675, 0.2);
|
||||||
|
spawn.randomMob(-2700, 300, 0.1);
|
||||||
|
spawn.randomMob(-2500, 300, 0.1);
|
||||||
|
spawn.randomMob(-2075, -425, 0.1);
|
||||||
|
spawn.randomMob(-1550, -725, 0.1);
|
||||||
|
spawn.randomMob(375, 1100, 0);
|
||||||
|
spawn.randomMob(-1575, 1100, 0);
|
||||||
spawn.randomSmallMob(825, 300);
|
spawn.randomSmallMob(825, 300);
|
||||||
spawn.randomSmallMob(-900, 825);
|
spawn.randomMob(-800, -1750, 0);
|
||||||
spawn.randomMob(-2025, 175, 0.6);
|
spawn.randomMob(400, -750, -0.1);
|
||||||
spawn.randomMob(-2325, 450, 0.6);
|
spawn.randomMob(650, 1300, -0.1);
|
||||||
spawn.randomMob(-2925, 675, 0.5);
|
spawn.randomMob(-2450, 1050, -0.1);
|
||||||
spawn.randomMob(-2700, 300, 0.2);
|
spawn.randomMob(500, 400, -0.1);
|
||||||
spawn.randomMob(-2500, 300, 0.2);
|
spawn.randomMob(-75, -1700, -0.1);
|
||||||
spawn.randomMob(-2075, -425, 0.2);
|
spawn.randomMob(900, -800, -0.2);
|
||||||
spawn.randomMob(-1550, -725, 0.2);
|
spawn.randomGroup(-75, 1050, -0.1);
|
||||||
spawn.randomMob(375, 1100, 0.1);
|
spawn.randomGroup(-900, 1000, 0.2);
|
||||||
spawn.randomMob(-1425, -100, 0.1);
|
|
||||||
spawn.randomMob(-800, -750, 0);
|
|
||||||
spawn.randomMob(400, -350, 0);
|
|
||||||
spawn.randomMob(650, 1300, 0);
|
|
||||||
spawn.randomMob(-750, -150, 0);
|
|
||||||
spawn.randomMob(475, 300, 0);
|
|
||||||
spawn.randomMob(-75, -700, 0);
|
|
||||||
spawn.randomMob(900, -200, -0.1);
|
|
||||||
spawn.randomGroup(-125, 275, -0.2);
|
|
||||||
spawn.randomGroup(-825, 1000, 0.2);
|
|
||||||
spawn.randomGroup(-1300, -1100, -0.3);
|
spawn.randomGroup(-1300, -1100, -0.3);
|
||||||
|
spawn.randomSmallMob(-2325, 800);
|
||||||
|
spawn.randomSmallMob(-900, 825);
|
||||||
|
|
||||||
if (simulation.difficulty > 3) {
|
if (simulation.difficulty > 3) {
|
||||||
if (Math.random() < 0.25) {
|
if (Math.random() < 0.25) {
|
||||||
@@ -3067,9 +3092,8 @@ const level = {
|
|||||||
spawn.snakeBoss(-1000 + Math.random() * 2500, -1300); //boss snake with head
|
spawn.snakeBoss(-1000 + Math.random() * 2500, -1300); //boss snake with head
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
powerUps.addRerollToLevel() //needs to run after mobs are spawned
|
|
||||||
|
|
||||||
if (tech.isDuplicateBoss && Math.random() < 2 * tech.duplicationChance()) spawn.randomLevelBoss(300, -800);
|
if (tech.isDuplicateBoss && Math.random() < 2 * tech.duplicationChance()) spawn.randomLevelBoss(300, -800);
|
||||||
|
powerUps.addRerollToLevel() //needs to run after mobs are spawned
|
||||||
},
|
},
|
||||||
office() {
|
office() {
|
||||||
let button, door
|
let button, door
|
||||||
@@ -3077,8 +3101,8 @@ const level = {
|
|||||||
button = level.button(525, 0)
|
button = level.button(525, 0)
|
||||||
door = level.door(1362, -200, 25, 200, 195)
|
door = level.door(1362, -200, 25, 200, 195)
|
||||||
level.setPosToSpawn(1375, -1550); //normal spawn
|
level.setPosToSpawn(1375, -1550); //normal spawn
|
||||||
level.exit.x = 3250;
|
level.exit.x = 3288;
|
||||||
level.exit.y = -530;
|
level.exit.y = -630;
|
||||||
// spawn.randomSmallMob(3550, -550);
|
// spawn.randomSmallMob(3550, -550);
|
||||||
level.fillBG.push({
|
level.fillBG.push({
|
||||||
x: 3050,
|
x: 3050,
|
||||||
@@ -3090,7 +3114,7 @@ const level = {
|
|||||||
} else { //reverse direction, start in bottom right
|
} else { //reverse direction, start in bottom right
|
||||||
button = level.button(3800, 0)
|
button = level.button(3800, 0)
|
||||||
door = level.door(3012, -200, 25, 200, 195)
|
door = level.door(3012, -200, 25, 200, 195)
|
||||||
level.setPosToSpawn(3250, -550); //normal spawn
|
level.setPosToSpawn(3337, -650); //normal spawn
|
||||||
level.exit.x = 1375;
|
level.exit.x = 1375;
|
||||||
level.exit.y = -1530;
|
level.exit.y = -1530;
|
||||||
// spawn.bodyRect(3655, -650, 40, 150); //door
|
// spawn.bodyRect(3655, -650, 40, 150); //door
|
||||||
@@ -3103,7 +3127,6 @@ const level = {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
level.custom = () => {
|
level.custom = () => {
|
||||||
button.query();
|
button.query();
|
||||||
button.draw();
|
button.draw();
|
||||||
@@ -3122,7 +3145,6 @@ const level = {
|
|||||||
level.defaultZoom = 1400
|
level.defaultZoom = 1400
|
||||||
simulation.zoomTransition(level.defaultZoom)
|
simulation.zoomTransition(level.defaultZoom)
|
||||||
spawn.mapRect(level.exit.x, level.exit.y + 20, 100, 50); //ground bump wall
|
spawn.mapRect(level.exit.x, level.exit.y + 20, 100, 50); //ground bump wall
|
||||||
|
|
||||||
spawn.mapRect(level.enter.x, level.enter.y + 20, 100, 20);
|
spawn.mapRect(level.enter.x, level.enter.y + 20, 100, 20);
|
||||||
|
|
||||||
document.body.style.backgroundColor = "#e0e5e0";
|
document.body.style.backgroundColor = "#e0e5e0";
|
||||||
@@ -3216,19 +3238,22 @@ const level = {
|
|||||||
spawn.mapRect(3000, -1000, 50, 800); //left wall
|
spawn.mapRect(3000, -1000, 50, 800); //left wall
|
||||||
spawn.mapRect(3000 + 2000 - 50, -1300, 50, 1100); //right wall
|
spawn.mapRect(3000 + 2000 - 50, -1300, 50, 1100); //right wall
|
||||||
spawn.mapRect(4150, -600, 350, 150); //table
|
spawn.mapRect(4150, -600, 350, 150); //table
|
||||||
spawn.mapRect(3650, -1300, 50, 650); //exit wall
|
spawn.mapRect(3650, -1300, 50, 700); //exit wall
|
||||||
spawn.mapRect(3650, -1300, 1350, 50); //exit wall
|
spawn.mapRect(3650, -1300, 1350, 50); //exit wall
|
||||||
spawn.bodyRect(3665, -650, 20, 150); //door
|
spawn.bodyRect(3665, -600, 20, 100); //door
|
||||||
|
// spawn.mapRect(3150, -550, 300, 75);
|
||||||
|
// spawn.mapRect(3225, -600, 175, 75);
|
||||||
|
spawn.mapRect(3150, -550, 375, 75);
|
||||||
|
spawn.mapRect(3225, -600, 225, 75);
|
||||||
|
|
||||||
|
|
||||||
spawn.mapRect(3000, -2000 * 0.5, 700, 50); //exit roof
|
spawn.mapRect(3000, -2000 * 0.5, 700, 50); //exit roof
|
||||||
spawn.mapRect(3000, -2000 * 0.25, 2000 - 300, 50); //1st floor
|
spawn.mapRect(3000, -2000 * 0.25, 2000 - 300, 50); //1st floor
|
||||||
spawn.spawnStairs(3000 + 2000 - 50, 0, 4, 250, 350, true); //stairs ground
|
spawn.spawnStairs(3000 + 2000 - 50, 0, 4, 250, 350, true); //stairs ground
|
||||||
|
|
||||||
spawn.randomSmallMob(4575, -560, 1);
|
spawn.randomSmallMob(4575, -560, 1);
|
||||||
spawn.randomSmallMob(1315, -880, 1);
|
spawn.randomSmallMob(1315, -880, 1);
|
||||||
spawn.randomSmallMob(800, -600);
|
spawn.randomSmallMob(800, -600);
|
||||||
spawn.randomSmallMob(-100, -1600);
|
// spawn.randomSmallMob(-100, -1600);
|
||||||
spawn.randomMob(4100, -225, 0.8);
|
spawn.randomMob(4100, -225, 0.8);
|
||||||
spawn.randomMob(-250, -700, 0.8);
|
spawn.randomMob(-250, -700, 0.8);
|
||||||
spawn.randomMob(4500, -225, 0.15);
|
spawn.randomMob(4500, -225, 0.15);
|
||||||
|
|||||||
@@ -312,7 +312,7 @@ const mobs = {
|
|||||||
if (
|
if (
|
||||||
this.distanceToPlayer2() < this.seeAtDistance2 &&
|
this.distanceToPlayer2() < this.seeAtDistance2 &&
|
||||||
Matter.Query.ray(map, this.position, this.mPosRange()).length === 0 &&
|
Matter.Query.ray(map, this.position, this.mPosRange()).length === 0 &&
|
||||||
Matter.Query.ray(body, this.position, this.mPosRange()).length === 0 &&
|
// Matter.Query.ray(body, this.position, this.mPosRange()).length === 0 &&
|
||||||
!m.isCloak
|
!m.isCloak
|
||||||
) {
|
) {
|
||||||
this.foundPlayer();
|
this.foundPlayer();
|
||||||
@@ -365,7 +365,7 @@ const mobs = {
|
|||||||
if (
|
if (
|
||||||
this.distanceToPlayer2() < this.seeAtDistance2 &&
|
this.distanceToPlayer2() < this.seeAtDistance2 &&
|
||||||
Matter.Query.ray(map, this.position, this.mPosRange()).length === 0 &&
|
Matter.Query.ray(map, this.position, this.mPosRange()).length === 0 &&
|
||||||
Matter.Query.ray(body, this.position, this.mPosRange()).length === 0 &&
|
// Matter.Query.ray(body, this.position, this.mPosRange()).length === 0 &&
|
||||||
!m.isCloak
|
!m.isCloak
|
||||||
) {
|
) {
|
||||||
this.foundPlayer();
|
this.foundPlayer();
|
||||||
|
|||||||
@@ -16,7 +16,9 @@ const powerUps = {
|
|||||||
m.setField(index)
|
m.setField(index)
|
||||||
simulation.makeTextLog(`<span class='color-var'>m</span>.setField("<span class='color-text'>${m.fieldUpgrades[m.fieldMode].name}</span>")`);
|
simulation.makeTextLog(`<span class='color-var'>m</span>.setField("<span class='color-text'>${m.fieldUpgrades[m.fieldMode].name}</span>")`);
|
||||||
} else if (type === "tech") {
|
} else if (type === "tech") {
|
||||||
|
setTimeout(() => {
|
||||||
powerUps.lastTechIndex = index
|
powerUps.lastTechIndex = index
|
||||||
|
}, 100);
|
||||||
tech.giveTech(index)
|
tech.giveTech(index)
|
||||||
simulation.makeTextLog(`<span class='color-var'>tech</span>.giveTech("<span class='color-text'>${tech.tech[index].name}</span>")`);
|
simulation.makeTextLog(`<span class='color-var'>tech</span>.giveTech("<span class='color-text'>${tech.tech[index].name}</span>")`);
|
||||||
}
|
}
|
||||||
@@ -342,7 +344,6 @@ const powerUps = {
|
|||||||
// text += `<div class="choose-grid-module" onclick="powerUps.choose('tech',${choose})"><div class="grid-title"><div class="circle-grid tech"></div> ${tech.tech[choose].name}</div> ${tech.tech[choose].description}</div>`
|
// text += `<div class="choose-grid-module" onclick="powerUps.choose('tech',${choose})"><div class="grid-title"><div class="circle-grid tech"></div> ${tech.tech[choose].name}</div> ${tech.tech[choose].description}</div>`
|
||||||
return choose
|
return choose
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
let text = ""
|
let text = ""
|
||||||
if (!tech.isDeterminism) text += `<div class='cancel' onclick='powerUps.endDraft("tech",true)'>✕</div>`
|
if (!tech.isDeterminism) text += `<div class='cancel' onclick='powerUps.endDraft("tech",true)'>✕</div>`
|
||||||
|
|||||||
@@ -1953,7 +1953,7 @@ const spawn = {
|
|||||||
if (
|
if (
|
||||||
this.distanceToPlayer2() < this.seeAtDistance2 &&
|
this.distanceToPlayer2() < this.seeAtDistance2 &&
|
||||||
Matter.Query.ray(map, this.position, this.mPosRange()).length === 0 &&
|
Matter.Query.ray(map, this.position, this.mPosRange()).length === 0 &&
|
||||||
Matter.Query.ray(body, this.position, this.mPosRange()).length === 0 &&
|
// Matter.Query.ray(body, this.position, this.mPosRange()).length === 0 &&
|
||||||
!m.isCloak
|
!m.isCloak
|
||||||
) {
|
) {
|
||||||
this.foundPlayer();
|
this.foundPlayer();
|
||||||
@@ -2547,7 +2547,7 @@ const spawn = {
|
|||||||
spawn.shield(me, x, y, 1);
|
spawn.shield(me, x, y, 1);
|
||||||
spawn.spawnOrbitals(me, radius + 50 + 200 * Math.random())
|
spawn.spawnOrbitals(me, radius + 50 + 200 * Math.random())
|
||||||
|
|
||||||
Matter.Body.setDensity(me, 0.008); //extra dense //normal is 0.001 //makes effective life much larger
|
Matter.Body.setDensity(me, 0.004); //extra dense //normal is 0.001 //makes effective life much larger
|
||||||
me.onDeath = function() {
|
me.onDeath = function() {
|
||||||
powerUps.spawnBossPowerUp(this.position.x, this.position.y)
|
powerUps.spawnBossPowerUp(this.position.x, this.position.y)
|
||||||
// this.vertices = Matter.Vertices.hull(Matter.Vertices.clockwiseSort(this.vertices)) //helps collisions functions work better after vertex have been changed
|
// this.vertices = Matter.Vertices.hull(Matter.Vertices.clockwiseSort(this.vertices)) //helps collisions functions work better after vertex have been changed
|
||||||
|
|||||||
@@ -1392,9 +1392,7 @@
|
|||||||
}
|
}
|
||||||
}, {
|
}, {
|
||||||
name: "flip-flop",
|
name: "flip-flop",
|
||||||
description: `unlock advanced <strong class='color-m'>tech</strong> that runs if flip-flop is <strong class="color-flop">ON</strong><br><strong>flip-flop</strong> toggles <strong class="color-flop">ON</strong> and <strong class="color-flop">OFF</strong> after a collision`,
|
description: `<strong>flip-flop</strong> toggles <strong class="color-flop">ON</strong> and <strong class="color-flop">OFF</strong> after a <strong>collision</strong><br>unlock advanced <strong class='color-m'>tech</strong> that runs if <strong class="color-flop">ON</strong>`,
|
||||||
// description: `if <strong>flip-flop</strong> is <strong class="color-flop">ON</strong>, collisions set it to <strong class="color-flop">OFF</strong>
|
|
||||||
// <br>if <strong>flip-flop</strong> is <strong class="color-flop">OFF</strong>, collisions set it to <strong class="color-flop">ON</strong>`,
|
|
||||||
nameInfo: "<span id = 'tech-flip-flop'></span>",
|
nameInfo: "<span id = 'tech-flip-flop'></span>",
|
||||||
addNameInfo() {
|
addNameInfo() {
|
||||||
setTimeout(function() {
|
setTimeout(function() {
|
||||||
@@ -2742,7 +2740,7 @@
|
|||||||
|
|
||||||
{
|
{
|
||||||
name: "backward induction",
|
name: "backward induction",
|
||||||
description: "gain all the <strong class='color-m'>tech</strong> <strong>options</strong> you didn't <strong>choose</strong><br>from your previous <strong class='color-m'>tech</strong> selection",
|
description: "<strong>choose</strong> all the <strong class='color-m'>tech</strong> <strong>options</strong> you didn't <strong>choose</strong><br>from your previous <strong class='color-m'>tech</strong> selection",
|
||||||
maxCount: 1,
|
maxCount: 1,
|
||||||
count: 0,
|
count: 0,
|
||||||
frequency: 1,
|
frequency: 1,
|
||||||
@@ -2760,6 +2758,7 @@
|
|||||||
const index = powerUps.tech.choiceLog[i]
|
const index = powerUps.tech.choiceLog[i]
|
||||||
if (powerUps.tech.choiceLog[i] !== powerUps.lastTechIndex && tech.tech[index].count < tech.tech[index].maxCount && tech.tech[index].allowed()) {
|
if (powerUps.tech.choiceLog[i] !== powerUps.lastTechIndex && tech.tech[index].count < tech.tech[index].maxCount && tech.tech[index].allowed()) {
|
||||||
tech.giveTech(index)
|
tech.giveTech(index)
|
||||||
|
simulation.makeTextLog(`<span class='color-var'>tech</span>.giveTech("<span class='color-text'>${tech.tech[index].name}</span>") <em>// backward induction</em>`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
26
todo.txt
26
todo.txt
@@ -1,8 +1,10 @@
|
|||||||
******************************************************** NEXT PATCH ********************************************************
|
******************************************************** NEXT PATCH ********************************************************
|
||||||
|
|
||||||
more bug fixes (many worlds, disintegrated armament)
|
more bug fixes (pulse color, backwards induction giving too many tech)
|
||||||
|
|
||||||
|
mobs can now see through blocks
|
||||||
|
mobs spawns and level spawns have been adjusted to prevent getting zonked at the start of a level
|
||||||
|
|
||||||
tech: backward induction - gain all the tech options you didn't choose from your previous tech selection menu
|
|
||||||
|
|
||||||
******************************************************** BUGS ********************************************************
|
******************************************************** BUGS ********************************************************
|
||||||
|
|
||||||
@@ -35,23 +37,27 @@ fix door.isOpen actually meaning isClosed?
|
|||||||
|
|
||||||
******************************************************** TODO ********************************************************
|
******************************************************** TODO ********************************************************
|
||||||
|
|
||||||
change the color of heals for ergodicity
|
have junk tech drop frequency to 0 after showing up once
|
||||||
|
how to communicate that to player?
|
||||||
|
console message
|
||||||
|
|
||||||
look into improving mouse lag with pointer lock?
|
look into improving mouse lag with pointer lock?
|
||||||
https://developer.mozilla.org/en-US/docs/Web/API/Pointer_Lock_API
|
https://developer.mozilla.org/en-US/docs/Web/API/Pointer_Lock_API
|
||||||
https://www.vsynctester.com/game.html
|
https://www.vsynctester.com/game.html
|
||||||
https://news.ycombinator.com/item?id=26530272
|
https://news.ycombinator.com/item?id=26530272
|
||||||
|
|
||||||
clarify dielectric polarization text / graphics
|
|
||||||
|
|
||||||
tech - gain all the tech you didn't take on the last selection menu
|
|
||||||
normally 2, but synergy with cardinality - 4, and 0 with determinism
|
|
||||||
frequency to 1
|
|
||||||
|
|
||||||
should blocks block mob vision?
|
should blocks block mob vision?
|
||||||
mobs will attack player in the starting room though...
|
|
||||||
Matter.Query.ray(map, this.position, this.mPosRange()).length === 0 &&
|
Matter.Query.ray(map, this.position, this.mPosRange()).length === 0 &&
|
||||||
Matter.Query.ray(body, this.position, this.mPosRange()).length === 0 &&
|
Matter.Query.ray(body, this.position, this.mPosRange()).length === 0 &&
|
||||||
|
only negative is mobs will attack player in the starting room
|
||||||
|
maybe make all doors to spawns somehow block vision
|
||||||
|
maybe start in cloaking mode
|
||||||
|
disable it a few cycles after level loads?
|
||||||
|
or disable when player moves?
|
||||||
|
***maybe just clear spawns away from the starting room***
|
||||||
|
ok go through each map and find issues on each map
|
||||||
|
**but first test he game with no block blocking vision**
|
||||||
|
|
||||||
|
|
||||||
mob vision: look at player history
|
mob vision: look at player history
|
||||||
build a new type of attraction for mobs
|
build a new type of attraction for mobs
|
||||||
|
|||||||
Reference in New Issue
Block a user