let h = noise(i/2,j/2)*2;
if(i==4 || j==4 || i==8 || j==8){
if(i%2==1 || j%2==1) map[i][j] = 5;
background(255); noStroke();
translate(-player.x*20, -player.y*20);
rect(i*20, j*20, 20, 20);
fill(255, 0, 0); stroke(255, 0, 0);
circle(player.x*20, player.y*20, 5);
line(player.x*20 - player.dir.x*2000, player.y*20 - player.dir.y*2000,
player.x*20 + player.dir.x*2000, player.y*20 + player.dir.y*2000);
rect(200, -1000, 2000, 2000);
rect(-1000, 200, 2000, 2000);
rect(200, 0, -2000, -2000);
rect(0, 200, -2000, -2000);
let cell = {x: player.x + player.dir.y*2, y: player.y - player.dir.x*2, d: 0, od: 0};
while(cell.x>0 && cell.x<10 && cell.y>0 && cell.y<10){
let offx = cell.x-floor(cell.x), offy = cell.y-floor(cell.y),
old_cell = map[floor(cell.x)][floor(cell.y)];
if(player.dir.x>0) offx = 1-offx;
if(player.dir.y>0) offy = 1-offy;
if(player.dir.x==0) offx = 1000;
else offx /= player.dir.x;
if(player.dir.y==0) offy = 1000;
else offy /= player.dir.y;
if(abs(offx) < abs(offy)){
cell.x += player.dir.x*abs(offx);
cell.y += player.dir.y*abs(offx);
cell.x += player.dir.x*abs(offy);
cell.y += player.dir.y*abs(offy);
circle(100 + cell.d*20, 60, 2);
fill(old_cell*255/9, 30);
rect(250 + cell.od*20, 500, (cell.d - cell.od)*20, -old_cell*30);
cell.x += player.dir.x/1000; cell.y += player.dir.y/1000;
cell = {x: player.x + player.dir.y*2, y: player.y - player.dir.x*2, d: 0, od: 0};
while(cell.x>0 && cell.x<10 && cell.y>0 && cell.y<10){
let offx = cell.x-floor(cell.x), offy = cell.y-floor(cell.y),
old_cell = map[floor(cell.x)][floor(cell.y)];
if(player.dir.x<0) offx = 1-offx;
if(player.dir.y<0) offy = 1-offy;
if(abs(offx) < abs(offy)){
cell.x -= player.dir.x*abs(offx);
cell.y -= player.dir.y*abs(offx);
cell.x -= player.dir.x*abs(offy);
cell.y -= player.dir.y*abs(offy);
circle(100 + cell.d*20, 60, 2);
fill(old_cell*255/9, 30);
rect(250 + cell.od*20, 500, (cell.d - cell.od)*20, -old_cell*30);
cell.x -= player.dir.x/1000; cell.y -= player.dir.y/1000;
cell = {x: player.x + player.dir.y, y: player.y - player.dir.x, d: 0, od: 0};
while(cell.x>0 && cell.x<10 && cell.y>0 && cell.y<10){
let offx = cell.x-floor(cell.x), offy = cell.y-floor(cell.y),
old_cell = map[floor(cell.x)][floor(cell.y)];
if(player.dir.x>0) offx = 1-offx;
if(player.dir.y>0) offy = 1-offy;
if(player.dir.x==0) offx = 1000;
else offx /= player.dir.x;
if(player.dir.y==0) offy = 1000;
else offy /= player.dir.y;
if(abs(offx) < abs(offy)){
cell.x += player.dir.x*abs(offx);
cell.y += player.dir.y*abs(offx);
cell.x += player.dir.x*abs(offy);
cell.y += player.dir.y*abs(offy);
circle(100 + cell.d*20, 80, 2);
fill(old_cell*255/9, 60);
rect(250 + cell.od*30, 500, (cell.d - cell.od)*30, -old_cell*35);
cell.x += player.dir.x/1000; cell.y += player.dir.y/1000;
cell = {x: player.x + player.dir.y, y: player.y - player.dir.x, d: 0, od: 0};
while(cell.x>0 && cell.x<10 && cell.y>0 && cell.y<10){
let offx = cell.x-floor(cell.x), offy = cell.y-floor(cell.y),
old_cell = map[floor(cell.x)][floor(cell.y)];
if(player.dir.x<0) offx = 1-offx;
if(player.dir.y<0) offy = 1-offy;
if(abs(offx) < abs(offy)){
cell.x -= player.dir.x*abs(offx);
cell.y -= player.dir.y*abs(offx);
cell.x -= player.dir.x*abs(offy);
cell.y -= player.dir.y*abs(offy);
circle(100 + cell.d*20, 80, 2);
fill(old_cell*255/9, 60);
rect(250 + cell.od*30, 500, (cell.d - cell.od)*30, -old_cell*35);
cell.x -= player.dir.x/1000; cell.y -= player.dir.y/1000;
cell = {x: player.x, y: player.y, d: 0, od: 0};
while(cell.x>0 && cell.x<10 && cell.y>0 && cell.y<10){
let offx = cell.x-floor(cell.x), offy = cell.y-floor(cell.y),
old_cell = map[floor(cell.x)][floor(cell.y)];
if(player.dir.x>0) offx = 1-offx;
if(player.dir.y>0) offy = 1-offy;
if(player.dir.x==0) offx = 1000;
else offx /= player.dir.x;
if(player.dir.y==0) offy = 1000;
else offy /= player.dir.y;
if(abs(offx) < abs(offy)){
cell.x += player.dir.x*abs(offx);
cell.y += player.dir.y*abs(offx);
cell.x += player.dir.x*abs(offy);
cell.y += player.dir.y*abs(offy);
circle(100 + cell.d*20, 100, 2);
rect(250 + cell.od*40, 500, (cell.d - cell.od)*40, -old_cell*40);
cell.x += player.dir.x/1000; cell.y += player.dir.y/1000;
cell = {x: player.x, y: player.y, d: 0, od: 0};
while(cell.x>0 && cell.x<10 && cell.y>0 && cell.y<10){
let offx = cell.x-floor(cell.x), offy = cell.y-floor(cell.y),
old_cell = map[floor(cell.x)][floor(cell.y)];
if(player.dir.x<0) offx = 1-offx;
if(player.dir.y<0) offy = 1-offy;
if(abs(offx) < abs(offy)){
cell.x -= player.dir.x*abs(offx);
cell.y -= player.dir.y*abs(offx);
cell.x -= player.dir.x*abs(offy);
cell.y -= player.dir.y*abs(offy);
circle(100 + cell.d*20, 100, 2);
rect(250 + cell.od*40, 500, (cell.d - cell.od)*40, -old_cell*40);
cell.x -= player.dir.x/1000; cell.y -= player.dir.y/1000;
cell = {x: player.x - player.dir.y, y: player.y + player.dir.x, d: 0, od: 0};
while(cell.x>0 && cell.x<10 && cell.y>0 && cell.y<10){
let offx = cell.x-floor(cell.x), offy = cell.y-floor(cell.y),
old_cell = map[floor(cell.x)][floor(cell.y)];
if(player.dir.x>0) offx = 1-offx;
if(player.dir.y>0) offy = 1-offy;
if(player.dir.x==0) offx = 1000;
else offx /= player.dir.x;
if(player.dir.y==0) offy = 1000;
else offy /= player.dir.y;
if(abs(offx) < abs(offy)){
cell.x += player.dir.x*abs(offx);
cell.y += player.dir.y*abs(offx);
cell.x += player.dir.x*abs(offy);
cell.y += player.dir.y*abs(offy);
circle(100 + cell.d*20, 120, 2);
fill(old_cell*255/9, 30);
rect(250 + cell.od*45, 500, (cell.d - cell.od)*45, -old_cell*42);
cell.x += player.dir.x/1000; cell.y += player.dir.y/1000;
cell = {x: player.x - player.dir.y, y: player.y + player.dir.x, d: 0, od: 0};
while(cell.x>0 && cell.x<10 && cell.y>0 && cell.y<10){
let offx = cell.x-floor(cell.x), offy = cell.y-floor(cell.y),
old_cell = map[floor(cell.x)][floor(cell.y)];
if(player.dir.x<0) offx = 1-offx;
if(player.dir.y<0) offy = 1-offy;
if(abs(offx) < abs(offy)){
cell.x -= player.dir.x*abs(offx);
cell.y -= player.dir.y*abs(offx);
cell.x -= player.dir.x*abs(offy);
cell.y -= player.dir.y*abs(offy);
circle(100 + cell.d*20, 120, 2);
fill(old_cell*255/9, 30);
rect(250 + cell.od*45, 500, (cell.d - cell.od)*45, -old_cell*42);
cell.x -= player.dir.x/1000; cell.y -= player.dir.y/1000;
player.dir.x = Math.cos(player.dir.a);
player.dir.y = Math.sin(player.dir.a);
if(keyIsDown('d'.charCodeAt()-32)){
player.x += player.dir.x/40;
player.y += player.dir.y/40;
if(keyIsDown('a'.charCodeAt()-32)){
player.x -= player.dir.x/40;
player.y -= player.dir.y/40;
if(keyIsDown('w'.charCodeAt()-32)){
player.x += player.dir.y/40;
player.y -= player.dir.x/40;
if(keyIsDown('s'.charCodeAt()-32)){
player.x -= player.dir.y/40;
player.y += player.dir.x/40;
player.dir.a += sign(e.delta) * Math.pow(e.delta/100, 2)/100;