if (playerenters) { 
this.lastpx = -1000;
 } 
if (playerenters || timeout) { 
if (mousebuttons%2>=1) { 
if (this.lastpx>-1000) { 
dx = (mousex-this.lastpx); 
dy = (mousey-this.lastpy); 
dist = (abs(dx)>abs(dy)? abs(dx) : abs(dy));
 for (di=0; di<dist; di++) { 
px = this.lastpx + (dx*di/dist);
 py = this.lastpy + (dy*di/dist);
 laypath();
 }
 }
 px = mousex;
 py = mousey;
 laypath();
 this.lastpx = px;
 this.lastpy = py;
 } else this.lastpx = -1000;timeout = 0.05;
 }
 function laypath() {
 watertiles = {0x18e,0x1f4,0x18e,0x1f5,0x18e,0x1f5,0x18e,0x18e,0x18e,0x18e};
 grasstiles = {0x5d9,0xe29,0x7f2,0x7f9,0x5a8,0x5a9,0x56c};
 waterspot = { 0x84a,0x858,0x84d, 0x84b,0x18e,0x85b, 0x83a,0x83c,0x85c };
 grassspot = { 0x84c,0x83c,0x83b, 0x85b,0x1ff,0x84b, 0x85d,0x858,0x85a };
 watercornernwse = 0xfe9;
 watercornernesw = 0xff9;
 allcornertiles = {0x84a,0x858,0x859,0x84d,0x84b,0x18e,0x85b,0x83a,0x83c,0x83d,0x85c, 
  0x84c,0x83b,0x85d,0x85a,0xfe9,0xff9};
 // Check if can lay a water path here 
if (tiles[px,py] in watertiles) return;
 for (tx=px-1; tx<=px+1; tx++) for (ty=py-1; ty<=py+1; ty++) { 
if (tiles[tx,ty] in watertiles) continue; checkgrassorborder();
 if (isok==false) return;
 } 
// Put water on the mouse position
 tiles[px,py] = watertiles[int(random(0,10))];
 // Calculate the tiles around the mouse position 
for (tx=px-1; tx<=px+1; tx++) for (ty=py-1; ty<=py+1; ty++) {
 if ((tx==px && ty==py) || tiles[tx,ty] in watertiles) continue;
 // Check which tiles around this tile are water tiles 
 watern = (tiles[tx ,ty-1] in watertiles);
 waternw = (tiles[tx-1,ty-1] in watertiles);
 waterw = (tiles[tx-1,ty] in watertiles);
 watersw = (tiles[tx-1,ty+1] in watertiles);
 waters = (tiles[tx,ty+1] in watertiles);
 waterse = (tiles[tx+1,ty+1] in watertiles);
 watere = (tiles[tx+1,ty ] in watertiles);
 waterne = (tiles[tx+1,ty-1] in watertiles);
 if (waternw+waterne==2) watern = true;
 if (waternw+watersw==2) waterw = true;
 if (watersw+waterse==2) waters = true;
 if (waterse+waterne==2) watere = true;
 // Get the right water corner tile depending on 
// in which directions water was found 
if (watern+waters==2 || waterw+watere==2 ||
 watern+waterw+waterse==3 || waterw+waters+waterne==3 ||
 waters+watere+waternw==3 || watere+watern+watersw==3) newtile = watertiles[0];
 else if (watern+waterw+waters+watere==2) {
 if (watern+waterw==2) newtile = grassspot[0+0*3];
 else if (waterw+waters==2) newtile = grassspot[0+2*3];
 else if (waters+watere==2) newtile = grassspot[2+2*3];
 else newtile = grassspot[2+0*3]; 
} else if (watern+waterw+waters+watere==1) {
 if (watern+waterse==2 || watere+waternw==2) newtile = grassspot[2+0*3];
 else if (watern+watersw==2 || waterw+waterne==2) newtile = grassspot[0+0*3];
 else if (waters+waternw==2 || waterw+waterse==2) newtile = grassspot[0+2*3];
 else if (waters+waterne==2 || watere+watersw==2) newtile = grassspot[2+2*3];
 else if (watern==1) newtile = grassspot[1+0*3] + (tx%2); 
// 2 tiles for north 
else if (waterw==1) newtile = grassspot[0+1*3];
 else if (waters==1) newtile = grassspot[1+2*3] + (tx%2);
 // 2 tiles for south 
else newtile = grassspot[2+1*3]; 
} else if (waternw+waterne+watersw+waterse==2) {
 if (waternw+waterse==2) newtile = watercornernwse;
 else if (waterne+watersw==2) newtile = watercornernesw; 
} else if (waternw+waterne+watersw+waterse==1) {
 if (waternw==1) newtile = waterspot[2+2*3];
 else if (watersw==1) newtile = waterspot[2+0*3];
 else if (waterse==1) newtile = waterspot[0+0*3];
 else newtile = waterspot[0+2*3]; } 
// Write the tile 
tiles[tx,ty] = newtile;
 } 
// Redraw the level on the mouse position 
updateboard px-1,py-1,3,3;
 }
 function checkgrassorborder() {
 isok = ((tiles[tx,ty] in grasstiles) || (tiles[tx,ty] in allcornertiles));
 } 
