From 84e407918158ec43a9cf15b5acbe0168af2ce3de Mon Sep 17 00:00:00 2001 From: landgreen Date: Tue, 23 Mar 2021 15:47:33 -0700 Subject: [PATCH] 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 --- .DS_Store | Bin 6148 -> 6148 bytes js/bullet.js | 6 +- js/level.js | 151 +++++++++++++++++++++++++++++--------------------- js/mob.js | 4 +- js/powerup.js | 5 +- js/spawn.js | 4 +- js/tech.js | 7 +-- todo.txt | 28 ++++++---- 8 files changed, 118 insertions(+), 87 deletions(-) diff --git a/.DS_Store b/.DS_Store index c3946ebe904b117a8e6b1c7e6f0b2519e595ab89..582b8e5369f379c3693e0bde19ec86960b67c08c 100644 GIT binary patch delta 15 WcmZoMXffEJ#muyrZL<#Z4G{n*Qv|;N delta 15 WcmZoMXffEJ#mqFLf3ptr4G{n;JOw=f diff --git a/js/bullet.js b/js/bullet.js index 73b8760..dd3c909 100644 --- a/js/bullet.js +++ b/js/bullet.js @@ -452,7 +452,7 @@ const b = { }, pulse(energy, angle = m.angle) { let best; - let explosionRadius = 1400 * energy + let explosionRadius = 1300 * energy let range = 3000 const path = [{ 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) { 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 ctx.beginPath(); diff --git a/js/level.js b/js/level.js index 4f61e6e..dcd6afa 100644 --- a/js/level.js +++ b/js/level.js @@ -12,7 +12,7 @@ const level = { start() { if (level.levelsCleared === 0) { //this code only runs on the first level // simulation.enableConstructMode() //used to build maps in testing mode - // level.difficultyIncrease(25) + // level.difficultyIncrease(125) // simulation.zoomScale = 1000; // simulation.setZoom(); // m.setField("nano-scale manufacturing") @@ -822,9 +822,9 @@ const level = { } //float 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, { - 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 }); } @@ -1221,7 +1221,7 @@ const level = { }; 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); level.exit.x = 6500; level.exit.y = -230; @@ -1241,7 +1241,11 @@ const level = { spawn.mapRect(-950, 0, 8200, 800); //ground spawn.mapRect(-950, -1200, 800, 1400); //left wall 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 powerUps.spawnStartingPowerUps(600, -800); @@ -1619,6 +1623,8 @@ const level = { spawn.mapRect(300, -375, 50, 225); spawn.bodyRect(312, -150, 25, 140); spawn.mapRect(300, -10, 50, 50); + spawn.mapVertex(1555, 0, "625 0 75 0 200 -100 500 -100"); //entrance ramp + //upper entrance / exit spawn.mapRect(-400, -1050, 750, 50); @@ -1692,16 +1698,22 @@ const level = { //mobs spawn.randomMob(1075, -3500, -0.3); // spawn.randomMob(-75, -3425, 0.2); - spawn.randomMob(1475, -225, -0.3); - spawn.randomMob(2075, -150, -0.2); + // spawn.randomMob(1475, -225, -0.3); + // spawn.randomMob(2075, -150, -0.2); spawn.randomMob(2175, -700, -0.2); 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(0, -1175, 0.5); spawn.randomMob(-75, -1150, 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) { spawn.randomMob(2300, -2775, -0.5); spawn.randomMob(600, -925, -0.5); @@ -1842,6 +1854,7 @@ const level = { spawn.mapRect(9300, 2590, 650, 25); spawn.mapRect(9700, 2580, 100, 50); + spawn.randomGroup(1300, 2100, 0.1); spawn.randomMob(8300, 2100, 0.1); spawn.randomSmallMob(2575, -75, 0.1); //entrance @@ -1850,7 +1863,7 @@ const level = { spawn.randomMob(2425, 2150, 0.1); spawn.randomSmallMob(3500, 250, 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(6350, 2525, 0.2); 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.y = -425; spawn.mapRect(level.exit.x, level.exit.y + 15, 100, 50); //exit bump @@ -1907,14 +1921,13 @@ const level = { document.body.style.backgroundColor = "#dbdcde"; //spawn start building - spawn.mapRect(-300, -800, 50, 800); - spawn.mapRect(-100, -20, 100, 30); + spawn.mapRect(-350, -800, 100, 1100); // spawn.mapRect(-300, -10, 500, 50); 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.mapVertex(-18, 145, "625 0 0 0 0 -300 500 -300"); //entrance ramp - spawn.mapRect(-300, 250, 6300, 300); //deeper ground + spawn.mapRect(-350, 250, 6350, 300); //deeper ground spawn.bodyRect(2100, 50, 80, 80); spawn.bodyRect(2000, 50, 60, 60); // spawn.bodyRect(1650, 50, 300, 200); @@ -1923,10 +1936,10 @@ const level = { //exit building // 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.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({ x: -250, y: -400, @@ -2050,10 +2063,10 @@ const level = { spawn.randomMob(5750, 125, 0.4); spawn.randomMob(5900, -1500, 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(2000, -2800, 0.4); - spawn.randomMob(2200, -500, 0.4); + spawn.randomMob(2400, -400, 0.4); spawn.randomMob(4475, -3550, 0.3); spawn.randomGroup(5000, -2150, 1); spawn.randomGroup(3700, -4100, 0.3); @@ -2277,12 +2290,15 @@ const level = { spawn.spawnStairs(3800, 0, 3, 150, 206); //stairs top exit spawn.mapRect(3400, -275, 450, 275); //exit platform + + + spawn.randomSmallMob(2200, -1775); spawn.randomSmallMob(4000, -825); - spawn.randomSmallMob(-350, -2400); + spawn.randomSmallMob(-350, -3400); spawn.randomMob(4250, -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(3000, -1150, 0.2); spawn.randomMob(3200, -1150, 0.3); @@ -2291,11 +2307,11 @@ const level = { spawn.randomMob(3600, -1800, 0.1); spawn.randomMob(5200, -100, 0.3); 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(2225, -1325, 0.4); 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 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(3700, -3250, 1100, 100); + + spawn.randomGroup(350, -500, 1) spawn.randomSmallMob(-225, 25); - spawn.randomSmallMob(1000, -1100); + spawn.randomSmallMob(2100, -900); + spawn.randomSmallMob(4000, -250); spawn.randomSmallMob(4450, -3000); spawn.randomSmallMob(5600, 100); @@ -2454,7 +2473,8 @@ const level = { spawn.randomMob(3900, -2700, 0.8); spawn.randomMob(3600, -500, 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.5); 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(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(4450, -100); spawn.randomSmallMob(2700, -475); @@ -2653,7 +2675,7 @@ const level = { spawn.randomMob(1690, -2250, 0.25); spawn.randomMob(2200, -600, 0.2); 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(1700, -900, 0.4); if (simulation.difficulty > 3) spawn.randomLevelBoss(2600, -2300); @@ -2666,7 +2688,7 @@ const level = { }; 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); level.exit.x = -4275; level.exit.y = -2805; @@ -2771,9 +2793,12 @@ const level = { spawn.mapRect(-2225, 0, 2475, 150); spawn.mapRect(175, -1000, 75, 1100); - spawn.mapRect(-175, -985, 25, 175); - spawn.bodyRect(-170, -810, 14, 160, 1, spawn.propsFriction); //door to starting room - spawn.mapRect(-600, -650, 825, 50); + // spawn.mapRect(-175, -985, 50, 175); + spawn.mapRect(-600, -1075, 50, 475); + // 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(-175, -250, 425, 300); spawn.bodyRect(-75, -300, 50, 50); @@ -3036,29 +3061,29 @@ const level = { //mobs spawn.randomSmallMob(-1125, 550); - spawn.randomSmallMob(-2325, 800); 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(-900, 825); - spawn.randomMob(-2025, 175, 0.6); - spawn.randomMob(-2325, 450, 0.6); - spawn.randomMob(-2925, 675, 0.5); - spawn.randomMob(-2700, 300, 0.2); - spawn.randomMob(-2500, 300, 0.2); - spawn.randomMob(-2075, -425, 0.2); - spawn.randomMob(-1550, -725, 0.2); - spawn.randomMob(375, 1100, 0.1); - 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.randomMob(-800, -1750, 0); + spawn.randomMob(400, -750, -0.1); + spawn.randomMob(650, 1300, -0.1); + spawn.randomMob(-2450, 1050, -0.1); + spawn.randomMob(500, 400, -0.1); + spawn.randomMob(-75, -1700, -0.1); + spawn.randomMob(900, -800, -0.2); + spawn.randomGroup(-75, 1050, -0.1); + spawn.randomGroup(-900, 1000, 0.2); spawn.randomGroup(-1300, -1100, -0.3); + spawn.randomSmallMob(-2325, 800); + spawn.randomSmallMob(-900, 825); if (simulation.difficulty > 3) { if (Math.random() < 0.25) { @@ -3067,9 +3092,8 @@ const level = { 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); + powerUps.addRerollToLevel() //needs to run after mobs are spawned }, office() { let button, door @@ -3077,8 +3101,8 @@ const level = { button = level.button(525, 0) door = level.door(1362, -200, 25, 200, 195) level.setPosToSpawn(1375, -1550); //normal spawn - level.exit.x = 3250; - level.exit.y = -530; + level.exit.x = 3288; + level.exit.y = -630; // spawn.randomSmallMob(3550, -550); level.fillBG.push({ x: 3050, @@ -3090,7 +3114,7 @@ const level = { } else { //reverse direction, start in bottom right button = level.button(3800, 0) 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.y = -1530; // spawn.bodyRect(3655, -650, 40, 150); //door @@ -3103,7 +3127,6 @@ const level = { }); } - level.custom = () => { button.query(); button.draw(); @@ -3122,7 +3145,6 @@ const level = { level.defaultZoom = 1400 simulation.zoomTransition(level.defaultZoom) 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); document.body.style.backgroundColor = "#e0e5e0"; @@ -3216,19 +3238,22 @@ const level = { spawn.mapRect(3000, -1000, 50, 800); //left wall spawn.mapRect(3000 + 2000 - 50, -1300, 50, 1100); //right wall 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.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.25, 2000 - 300, 50); //1st floor spawn.spawnStairs(3000 + 2000 - 50, 0, 4, 250, 350, true); //stairs ground - spawn.randomSmallMob(4575, -560, 1); spawn.randomSmallMob(1315, -880, 1); spawn.randomSmallMob(800, -600); - spawn.randomSmallMob(-100, -1600); + // spawn.randomSmallMob(-100, -1600); spawn.randomMob(4100, -225, 0.8); spawn.randomMob(-250, -700, 0.8); spawn.randomMob(4500, -225, 0.15); diff --git a/js/mob.js b/js/mob.js index 0a2a7a0..666355d 100644 --- a/js/mob.js +++ b/js/mob.js @@ -312,7 +312,7 @@ const mobs = { if ( this.distanceToPlayer2() < this.seeAtDistance2 && 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 ) { this.foundPlayer(); @@ -365,7 +365,7 @@ const mobs = { if ( this.distanceToPlayer2() < this.seeAtDistance2 && 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 ) { this.foundPlayer(); diff --git a/js/powerup.js b/js/powerup.js index 40e4874..a2b8575 100644 --- a/js/powerup.js +++ b/js/powerup.js @@ -16,7 +16,9 @@ const powerUps = { m.setField(index) simulation.makeTextLog(`m.setField("${m.fieldUpgrades[m.fieldMode].name}")`); } else if (type === "tech") { - powerUps.lastTechIndex = index + setTimeout(() => { + powerUps.lastTechIndex = index + }, 100); tech.giveTech(index) simulation.makeTextLog(`tech.giveTech("${tech.tech[index].name}")`); } @@ -342,7 +344,6 @@ const powerUps = { // text += `
  ${tech.tech[choose].name}
${tech.tech[choose].description}
` return choose } - } let text = "" if (!tech.isDeterminism) text += `
` diff --git a/js/spawn.js b/js/spawn.js index a09da2d..6404c45 100644 --- a/js/spawn.js +++ b/js/spawn.js @@ -1953,7 +1953,7 @@ const spawn = { if ( this.distanceToPlayer2() < this.seeAtDistance2 && 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 ) { this.foundPlayer(); @@ -2547,7 +2547,7 @@ const spawn = { spawn.shield(me, x, y, 1); 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() { 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 diff --git a/js/tech.js b/js/tech.js index f4230f2..a65b9b0 100644 --- a/js/tech.js +++ b/js/tech.js @@ -1392,9 +1392,7 @@ } }, { name: "flip-flop", - description: `unlock advanced tech that runs if flip-flop is ON
flip-flop toggles ON and OFF after a collision`, - // description: `if flip-flop is ON, collisions set it to OFF - //
if flip-flop is OFF, collisions set it to ON`, + description: `flip-flop toggles ON and OFF after a collision
unlock advanced tech that runs if ON`, nameInfo: "", addNameInfo() { setTimeout(function() { @@ -2742,7 +2740,7 @@ { name: "backward induction", - description: "gain all the tech options you didn't choose
from your previous tech selection", + description: "choose all the tech options you didn't choose
from your previous tech selection", maxCount: 1, count: 0, frequency: 1, @@ -2760,6 +2758,7 @@ 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()) { tech.giveTech(index) + simulation.makeTextLog(`tech.giveTech("${tech.tech[index].name}") // backward induction`); } } }, diff --git a/todo.txt b/todo.txt index 0e2b018..29fc430 100644 --- a/todo.txt +++ b/todo.txt @@ -1,8 +1,10 @@ ******************************************************** 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 ******************************************************** @@ -35,23 +37,27 @@ fix door.isOpen actually meaning isClosed? ******************************************************** 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? https://developer.mozilla.org/en-US/docs/Web/API/Pointer_Lock_API https://www.vsynctester.com/game.html 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? - mobs will attack player in the starting room though... Matter.Query.ray(map, 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 build a new type of attraction for mobs