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:
landgreen
2021-03-23 15:47:33 -07:00
parent 38e38578e6
commit 84e4079181
8 changed files with 118 additions and 87 deletions

BIN
.DS_Store vendored

Binary file not shown.

View File

@@ -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();

View File

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

View File

@@ -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();

View File

@@ -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> &nbsp; ${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> &nbsp; ${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>`

View File

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

View File

@@ -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>`);
} }
} }
}, },

View File

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