diff --git a/js/Makefile b/js/Makefile index ddef670..ffa5748 100644 --- a/js/Makefile +++ b/js/Makefile @@ -1,5 +1,6 @@ MAPS= +MAPS+=$(wildcard ../maps/beard*.map) MAPS+=$(wildcard ../maps/trampoline*.map) MAPS+=$(wildcard ../maps/flood*.map) MAPS+=$(wildcard ../maps/contest?.map ../maps/contest10.map) @@ -12,9 +13,10 @@ maps.js: FORCE ./mapsToJson.js $(MAPS) > maps.js.new @if test ! -e maps.js || ! diff maps.js maps.js.new > /dev/null; then echo "new maps"; mv maps.js.new maps.js; else rm maps.js.new; fi -SPRITES=earth.png empty.png lambda.png liftclosed.png liftopen.png robot.png rock.png wall.png +SPRITES=earth.png empty.png lambda.png lift.png openlift.png miner.png rock.png bricks.png SPRITES+=$(wildcard trampoline?.png) SPRITES+=$(wildcard target?.png) +SPRITES+=beard.png razor.png sprites.png: $(SPRITES) convert -background "#000000" -append $(SPRITES) tmp_sprites.png diff --git a/js/beard.png b/js/beard.png new file mode 100644 index 0000000..3c6abab Binary files /dev/null and b/js/beard.png differ diff --git a/js/bricks.png b/js/bricks.png new file mode 100644 index 0000000..af57627 Binary files /dev/null and b/js/bricks.png differ diff --git a/js/gui.js b/js/gui.js index 219930c..a3f9279 100644 --- a/js/gui.js +++ b/js/gui.js @@ -16,7 +16,9 @@ var mineGui_spriteOffset = { '.': 0, ' ': 1, 'A': 8,'B': 9,'C':10,'D':11,'E':12,'F':13,'G':14,'H':15,'I':16, - '1':17,'2':18,'3':19,'4':20,'5':21,'6':22,'7':23,'8':24,'9':25 + '1':17,'2':18,'3':19,'4':20,'5':21,'6':22,'7':23,'8':24,'9':25, + 'W':26, + '!':27 }; var mineGui_images = {}; @@ -39,7 +41,7 @@ function mineGui_start() { var selMap = document.getElementById("mineGui_selectMap"); var inpMoves = document.getElementById("mineGui_moves"); var customMapInput = document.getElementById("mineGui_data") - var validMoves = {L:1,U:1,R:1,D:1,A:1,W:1}; + var validMoves = {L:1,U:1,R:1,D:1,A:1,W:1,S:1}; var k; document.getElementById("mineGui_addData").onclick = mineGui_addCustomMap; selMap.onchange = function() { @@ -256,5 +258,6 @@ function mineGui_show() { document.getElementById("mineGui_score").textContent = mineGui_mine.score; document.getElementById("mineGui_scoreMoves").textContent = mineGui_mine.moves; document.getElementById("mineGui_scoreLambdas").textContent = mineGui_mine.found_lambdas; + document.getElementById("mineGui_razors").textContent = mineGui_mine.razors; document.getElementById("mineGui_belowWater").textContent = mineGui_mine.moves_below_water; } diff --git a/js/gui.min.js b/js/gui.min.js index 27cd526..f5e1250 100644 --- a/js/gui.min.js +++ b/js/gui.min.js @@ -1 +1 @@ -var mineGui_mine=false,mineGui_curmap,mineGui_curndx,mineGui_moves="";var mineGui_movesBackup=[];var mineGui_customNdx=1;var mineGui_canvas=true;var mineGui_imgSources={sprites:"sprites.png"};var mineGui_spriteOffset={R:5,"#":7,"*":6,"\\":2,L:3,O:4,".":0," ":1,A:8,B:9,C:10,D:11,E:12,F:13,G:14,H:15,I:16,"1":17,"2":18,"3":19,"4":20,"5":21,"6":22,"7":23,"8":24,"9":25};var mineGui_images={};var mineGui_imagesNeed=0;function mineGui_loadImg(b,c){var a;++mineGui_imagesNeed;mineGui_images[b]=a=new Image();a.onload=function(){if(0==--mineGui_imagesNeed){mineGui_show()}};a.src=c}function mineGui_start(){var b=document.getElementById("mineGui");var e=document.getElementById("mineGui_selectMap");var c=document.getElementById("mineGui_moves");var a=document.getElementById("mineGui_data");var f={L:1,U:1,R:1,D:1,A:1,W:1};var d;document.getElementById("mineGui_addData").onclick=mineGui_addCustomMap;e.onchange=function(){var l=e.options[e.selectedIndex].text;mineGui_setMap(mineMaps[l],e.selectedIndex);e.blur()};var g=function(){if(c.value==mineGui_moves){return}mineGui_moves="";var k=c.value.toUpperCase(),l;for(l=0;l0){e.selectedIndex--;e.onchange()}break;case 34:if(e.selectedIndex+10){document.getElementById("mineGui_mineMapWater").textContent=b.splice(-c).join("\n")}else{document.getElementById("mineGui_mineMapWater").textContent=""}document.getElementById("mineGui_mineMapDry").textContent=b.join("\n");document.getElementById("mineGui_moves").value=mineGui_moves;var a="";switch(mineGui_mine.state){case Mine.ALIVE:a="Still mining";break;case Mine.LOST:a="Robot broken - "+mineGui_mine.reason;break;case Mine.ABORTED:a="Aborted";break;case Mine.WON:a="Won - "+mineGui_mine.reason;break}document.getElementById("mineGui_meta").textContent=mineGui_mine.metaText();document.getElementById("mineGui_state").textContent=a;document.getElementById("mineGui_score").textContent=mineGui_mine.score;document.getElementById("mineGui_scoreMoves").textContent=mineGui_mine.moves;document.getElementById("mineGui_scoreLambdas").textContent=mineGui_mine.found_lambdas;document.getElementById("mineGui_belowWater").textContent=mineGui_mine.moves_below_water}; \ No newline at end of file +var mineGui_mine=false,mineGui_curmap,mineGui_curndx,mineGui_moves="";var mineGui_movesBackup=[];var mineGui_customNdx=1;var mineGui_canvas=true;var mineGui_imgSources={sprites:"sprites.png"};var mineGui_spriteOffset={R:5,"#":7,"*":6,"\\":2,L:3,O:4,".":0," ":1,A:8,B:9,C:10,D:11,E:12,F:13,G:14,H:15,I:16,"1":17,"2":18,"3":19,"4":20,"5":21,"6":22,"7":23,"8":24,"9":25,W:26,"!":27};var mineGui_images={};var mineGui_imagesNeed=0;function mineGui_loadImg(b,c){var a;++mineGui_imagesNeed;mineGui_images[b]=a=new Image();a.onload=function(){if(0==--mineGui_imagesNeed){mineGui_show()}};a.src=c}function mineGui_start(){var b=document.getElementById("mineGui");var e=document.getElementById("mineGui_selectMap");var c=document.getElementById("mineGui_moves");var a=document.getElementById("mineGui_data");var f={L:1,U:1,R:1,D:1,A:1,W:1,S:1};var d;document.getElementById("mineGui_addData").onclick=mineGui_addCustomMap;e.onchange=function(){var l=e.options[e.selectedIndex].text;mineGui_setMap(mineMaps[l],e.selectedIndex);e.blur()};var g=function(){if(c.value==mineGui_moves){return}mineGui_moves="";var k=c.value.toUpperCase(),l;for(l=0;l0){e.selectedIndex--;e.onchange()}break;case 34:if(e.selectedIndex+10){document.getElementById("mineGui_mineMapWater").textContent=b.splice(-c).join("\n")}else{document.getElementById("mineGui_mineMapWater").textContent=""}document.getElementById("mineGui_mineMapDry").textContent=b.join("\n");document.getElementById("mineGui_moves").value=mineGui_moves;var a="";switch(mineGui_mine.state){case Mine.ALIVE:a="Still mining";break;case Mine.LOST:a="Robot broken - "+mineGui_mine.reason;break;case Mine.ABORTED:a="Aborted";break;case Mine.WON:a="Won - "+mineGui_mine.reason;break}document.getElementById("mineGui_meta").textContent=mineGui_mine.metaText();document.getElementById("mineGui_state").textContent=a;document.getElementById("mineGui_score").textContent=mineGui_mine.score;document.getElementById("mineGui_scoreMoves").textContent=mineGui_mine.moves;document.getElementById("mineGui_scoreLambdas").textContent=mineGui_mine.found_lambdas;document.getElementById("mineGui_razors").textContent=mineGui_mine.razors;document.getElementById("mineGui_belowWater").textContent=mineGui_mine.moves_below_water}; \ No newline at end of file diff --git a/js/index.html b/js/index.html index 1661094..4ff1fef 100644 --- a/js/index.html +++ b/js/index.html @@ -24,7 +24,8 @@
Score: 0 (0 moves, - found 0 Lambdas) + found 0 Lambdas, + have 0 razors)
Status: 0
@@ -34,7 +35,7 @@
Help:
-(L)eft/(U)p/(R)ight/(D)own work as expected (letter and arrow keys), (A)bort and (W)ait too.
+(L)eft/(U)p/(R)ight/(D)own work as expected (letter and arrow keys), (S)have, (A)bort and (W)ait too.
 Special keys: PageUp/PageDown for map select, Backspace for undo, (C)lear and (T)oggle text mode
 Be careful: a reload looses all custom maps and saved moves.
 Listed highscore can be outdated.
diff --git a/js/lambda.png b/js/lambda.png
index 29a2e08..295afd9 100644
Binary files a/js/lambda.png and b/js/lambda.png differ
diff --git a/js/lift.png b/js/lift.png
new file mode 100644
index 0000000..f9a5542
Binary files /dev/null and b/js/lift.png differ
diff --git a/js/liftclosed.png b/js/liftclosed.png
deleted file mode 100644
index 551ee71..0000000
Binary files a/js/liftclosed.png and /dev/null differ
diff --git a/js/liftopen.png b/js/liftopen.png
deleted file mode 100644
index e8cba11..0000000
Binary files a/js/liftopen.png and /dev/null differ
diff --git a/js/maps.js b/js/maps.js
index a3d8a4b..c8084f7 100644
--- a/js/maps.js
+++ b/js/maps.js
@@ -1,2 +1,2 @@
-var mineMaps = {"trampoline1":"############\n#..*.R..*..#\n#..A....B..######\n#....2.. ..#\\\\\\C#\n#......* *.#\\\\\\1#\n########L########\n\nTrampoline A targets 1\nTrampoline B targets 1\nTrampoline C targets 2\nHighscore 426","trampoline2":"     ######\n     #....#\n     #.**.#\n     #.**.#\n     #.**.#\n######.\\\\.######\n#**....*.......#\n#\\\\....L\\\\\\....#\n#A......*****..#\n######R.....###########\n     ###.....*.....\\\\\\#\n       #\\\\\\\\#..1...\\\\\\#\n       #\\\\\\\\#......\\\\\\#\n       ################\n\nTrampoline A targets 1\nHighscore 1742","trampoline3":"#######################################\n#****................#..1...\\\\\\\\\\\\\\B..#\n#R.......##############################\n#.. ..................................#\n#.. ........       \\            ......#\n#.. .*. ....**.*...#....... ..........#\n#.. ... ....\\\\\\\\...#.A..... ..........#\n#.. ... ....\\ .....#.......    *  \\\\..#\n#.. ... ....\\......#....... ..........#\n#.. ... ....\\......#....... ..........#\n#.. ... ...........#................**#\n#..\\\\\\\\\\...........#................\\\\#\n########### ############## ############\n#...*.................................#\n#....*..................        ......#\n#... .*....*.............. ..... .....#\n#....*2*........########.. ..... .....L\n#...*...*.......#\\\\\\#..... ...*.......#\n#.....\\\\\\.......#\\\\\\#....**..***......#\n#....    .......#\\\\\\#*................#\n#...............#\\\\\\#*...**...*.......#\n#...............#.....................#\n######       ############## ### #######\n#\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\#\n#######################################\n\nTrampoline A targets 1\nTrampoline B targets 2\nHighscore 5477\n","flood1":"###########\n#....R....#\n#.*******.#\n#.\\\\\\\\\\\\\\.#\n#.       .#\n#..*\\\\\\*..#\n#.#*\\\\\\*#.#\n#########L#\n\nWater 1\nFlooding 8 \nWaterproof 5\nHighscore 945\n","flood2":"#######\n#..***#\n#..\\\\\\#\n#...**#\n#.*.*\\#\nLR....#\n#######\n\nFlooding 5\nWaterproof 3\nHighscore 281\n","flood3":"############\n#..........#\n#.....*....#\n#..\\\\\\\\\\\\..#\n#.     ....#\n#..\\\\\\\\\\\\\\.#\n#..\\..    .#\n#..\\.. ....#\n#..... ..* #\n#..### ### #\n#...R#\\#\\\\.#\n######L#####\n\nWaterproof 10 \nFlooding 10\nWater 2\nHighscore 1303\n","flood4":"########################\n#.....................\\#\n#......*\\   ...........#\n#......*... ......* ...#\n#..   \\\\... .*..... ...#\n#.. ....... ....... ...#\n#.. ....... .\\\\.... ...#   ######\n#.  ....      .....\\...#   #\\\\\\\\#\n#\\\\\\......... .........#   #....#\n###########     R      ########*#####\n          #.......... ........***\\\\\\#\n          #.......... ............**#\n          #.......... ......... *.*\\#\n          #....\\\\.... ....\\\\..... ..L\n          #.....................****#\n          #........\\*...............#\n          #...........     .........#\n          #.........................#\n          ###########################\n\nWater 1\nFlooding 20\nWaterproof 10\nHighscore 1592\n","flood5":"#########\n#.*..#\\.#\n#.\\..#\\.L\n#.R .##.#\n#.\\  ...#\n#..\\  ..#\n#...\\  ##\n#....\\ \\#\n#########\n\nWater 2\nFlooding 11\nWaterproof 5\nHighscore 575\n","contest1":"######\n#. *R#\n#  \\.#\n#\\ * #\nL  .\\#\n######\n\nHighscore 212\n","contest2":"#######\n#..***#\n#..\\\\\\#\n#...**#\n#.*.*\\#\nLR....#\n#######\n\nHighscore 281\n","contest3":"########\n#..R...#\n#..*...#\n#..#...#\n#.\\.\\..L\n####**.#\n#\\.....#\n#\\..* .#\n########\n\nHighscore 275\n","contest4":"#########\n#.*..#\\.#\n#.\\..#\\.L\n#.R .##.#\n#.\\  ...#\n#..\\  ..#\n#...\\  ##\n#....\\ \\#\n#########\n\nHighscore 575\n","contest5":"############\n#..........#\n#.....*....#\n#..\\\\\\\\\\\\..#\n#.     ....#\n#..\\\\\\\\\\\\\\.#\n#..\\..    .#\n#..\\.. ....#\n#..... ..* #\n#..### ### #\n#...R#\\#\\\\.#\n######L#####\n\nHighscore 1303\n","contest6":"###############\n#\\\\\\.......** #\n#\\\\#.#####...##\n#\\\\#.....*##. #\n#\\#####\\...## #\n#\\......####* #\n#\\.######* #.\\#\n#\\.#. *...##.##\n#\\##. ..  *...#\n#\\...... L#.#.#\n###########.#.#\n#\\..........#.#\n##.##########.#\n#R.#\\.........#\n###############\n\nHighscore 1177\n","contest7":"    #######\n    ##    *#\n     ##R  *##\n      ##\\\\\\\\##\n       ##....##\n      ##..\\ . ##\n     ## . L .  ##\n    ##\\\\\\# #\\\\\\\\##\n   ######   #######\n\nHighscore 869\n","contest8":"##############\n#\\\\... ......#\n###.#. ...*..#\n  #.#. ... ..#\n### #.   \\ ..#\n#. .#..... **#######\n#.#\\#..... ..\\\\\\*. #\n#*\\\\#.###. ####\\\\\\ #\n#\\\\.#.     ...## \\ #\n#\\#.#..... ....# \\ #  \n###.#..... ....#   ##\n#\\\\.#..... ....#\\   # \n########.. ..###*####\n#......... .........#\n#......... ....***..#\n#..\\\\\\\\\\ # ####.....#\n#........*R..\\\\\\   .#\n##########L##########\n\nHighscore 1973\n","contest9":"        #L#######\n        #*** \\\\ #\n        #\\\\\\ .. #\n#########.##    ##########\n#.......\\ ..........*   .#\n#*******\\......#....#\\\\ .#\n###\\.\\\\\\...**..#....... *#\n#*****\\\\  .\\\\..##     #\\.#\n######### ....  ##########\n        #       #\n        ####*####      \n        #.......#\n#########  \\\\\\\\*##########\n#*\\\\  **#     *..*\\ \\\\\\\\\\#\n#.\\**\\*** .....**.# \\\\##\\#\n#\\R......     .\\\\.. \\\\\\\\\\#\n##########################\n\nHighscore 3093\n","contest10":"#############################\n#..........................\\#\n#..\\\\###...#....        ###.#\n#..\\*\\\\\\.. #.... ..##\\\\..\\#.#\n#..\\*\\.... #.... ..#\\#....#.#\n#...\\###.. #.... ....#....#.#\n#... ..... ..... .####......#\n#\\\\. #....           .......#\n#... #..#. .....*\\ ##.......#\n#.#....... ...#..  ....######\n#. ...#... ...#.\\  ....#..* #\n##........ ...#.. #....#.#\\\\#\n#.....*... .....*\\#\\\\.....*.#\n#.***.* .......*\\****.....#.#\n#.\\\\\\.. ................   .#\n#.#####    .######    ##### #\n#....\\\\.................... #\n#....****...#.##.....\\\\\\\\..\\#\n#....\\\\\\\\...#.........*....\\#\n#....\\\\\\\\...#.\\\\.    #\\###.\\#\n#....     ..#.... ...#\\\\\\\\. #\n#........ ..#.... ...#..... #\n#........         ........#R#\n###########################L#\n\nHighscore 3634\n","ems1":"#######\n#L\\\\\\##\n##*  ##\n##*  ##\n##*  ##\n##*  ##\n##*  ##\n##*  ##\n##*  ##\n##*  ##\n##*  ##\n##   ##\n##   ##\n##R  ##\n## # ##\n#\\ # \\#\n## # ##\n## # ##\n## # ##\n## # ##\n#######\n\nAuthor ems_ (irc)\nHighscore 334\n","ems2":"#########\n###***###\n###***###\n###***###\n###***###\n###***###\n###***###\n#  .**\\\\#\n# # #*#\\#\n# # #*#\\#\n# # #*#\\#\n# # #*#\\#\n# # #*#\\#\n#    .#\\#\n###   **#\n### R \\\\#\n###   #L#\n###   ###\n###   ###\n###   ###\n###   ###\n###   ###\n###   ###\n#########\n\nAuthor ems_ (irc)\nHighscore 691\n","ems3":"################\n#\\.****####\\#*##\n#\\.\\\\\\\\.***...##\n##*####.#*###..#\n#\\.R....#...##\\#\n#\\ ####...#.#*.#\n#\\ **######.#..#\n##...\\\\\\\\\\\\...##\n#L.##########.##\n################\n\nAuthor ems_ (irc)\nHighscore 1199\n","ems3v2":"################\n#\\.****####\\#*##\n#\\.\\\\\\\\.***...##\n##*####.#*###..#\n#\\.R....#...##\\#\n#\\ ####...#.#*.#\n#\\ **######.#..#\n##...\\\\\\\\\\\\...##\n#L.#\\########.##\n################\n\nAuthor ems_ (irc)\nHighscore 1272\n","ems4":"#########\n#*     L#\n#\\      #\n#\\\\     #\n##\\\\    #\n###\\\\   #\n####\\\\  #\n#####\\\\ #\n####### #\n# #*#*# #\n#  * *  #\n# #*#*# #\n#  * *  #\n# #*#*# #\n# R* *  #\n# #*#*# #\n#  * *  #\n# #*#*# #\n#  * *  #\n# #*#*# #\n#  * *  #\n###*#*#.#\n#\\. . #\\#\n### # ###\n### # ###\n##  #  ##\n##  #  ##\n##  #  ##\n##  #  ##\n##  #  ##\n#########\n\nAuthor ems_ (irc)\nHighscore 908\n","ems5":"###################\n#*************   ##\n##***********# * ##\n###*********##.*.##\n####*******####*###\n#####*****#####*###\n######***######*###\n#######*#######*###\n###### * ######*###\n#\\     .      #*###\n#\\     \\      #*###\n#\\     **     #*###\n#\\     ##     #*###\n#\\            #*###\n#\\    \\  \\    #*###\n#\\    ** **   #*###\n#\\    ## ##   #*###\n#\\            #*###\n#\\   \\  \\  \\  #*###\n#R   ** ** ** #*\\##\n#### ## ## ## #*###\n###L           . ##\n#### ## ## ## ##  #\n###  #  ##  #  #  #\n###  #  ##  #  #  #\n###  #  ##  #  #  #\n###################\n\nAuthor ems_ (irc)\nHighscore 990\n","ems5v2":"###################\n#*************   ##\n##***********# * ##\n###*********##.*.##\n####*******####*###\n#####*****#####*###\n######***######*###\n#######*#######*###\n###### * ######*###\n#\\     .      #*###\n#\\     \\      #*###\n#\\     **     #*###\n#\\     ##     #*###\n#\\            #*###\n#\\    \\  \\    #*###\n#\\    ** **   #*###\n#\\    ## ##   #*###\n#\\            #*###\n#\\   \\  \\  \\  #*###\n#R   ** ** ** #*\\##\n#### ## ## ## #*###\n####           . ##\n#### ## ## ## ## ##\n##   ## #   #  #  #\n## * L# #\\  #  # *#\n##   ## # \\ # ##  #\n## #### #  \\# \\#  #\n###################\n\nAuthor ems_ (irc)\nHighscore 1238\n","ems6":"###########################\n#............R............#\n#.####.######L######.####.#\n#.####.#*#########*#.####.#\n#.####..\\#*******#\\..####.#\n#.######..\\\\\\\\\\\\\\..######.#\n#.####*######.######*####.#\n#.####\\.....#.#.....\\####.#\n#......####.#.#.####....#.#\n#####.#***#.#.#.#***#.#.#.#\n#......\\\\\\..#.#..\\\\\\..#.#.#\n#.#########*****#####.#.#.#\n#..........\\\\\\\\\\......#...#\n###########################\n\nAuthor ems_ (irc)\nWater 7\nWaterproof 42\nHighscore 1414\n","pacman":"###########################\n#............#............#\n#.####.#####.#.#####.####.#\n#\\#  #.#   #.#.#   #.#  #\\#\n#.####.#####.#.#####.####.#\n#.........................#\n#.####.#.#########.#.####.#\n#......#.....#.....#......#\n######.#####.#.#####.######\n     #.#           #.#\n######.# #### #### #.######\nL     .  #       #  .    **\n######.# ######### #.######\n     #.#           #.#\n######.# ######### #.######\n#............#............#\n#.####.#####.#.#####.####.#\n#\\...#.      R      .#...\\#\n####.#.#.#########.#.#.####\n#......#.....#.....#......#\n#.##########.#.##########.#\n#.........................#\n###########################\n\nAuthor newsham (www.thenewsh.com/~newsham/x/pacman.map)\nHighscore 191\n","pacman2":"###########################\n#\\\\\\\\\\\\\\\\\\\\\\\\#\\\\\\\\\\\\\\\\\\\\\\\\#\n#\\####\\#####\\#\\#####\\####\\#\n#.#  #\\#   #\\#\\#   #\\#  #.#\n#\\####\\#####\\#\\#####\\####\\#\n#\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\#\n#\\####\\#\\#########\\#\\####\\#\n#\\\\\\\\\\\\#\\\\\\\\\\#\\\\\\\\\\#\\\\\\\\\\\\#\n######\\#####\\#\\#####\\######\n     #\\#           #\\#\n######\\# #### #### #\\######\nL     \\  #       #  \\    **\n######\\# ######### #\\######\n     #\\#           #\\#\n######\\# ######### #\\######\n#\\\\\\\\\\\\\\\\\\\\\\\\#\\\\\\\\\\\\\\\\\\\\\\\\#\n#\\####\\#####\\#\\#####\\####\\#\n#.\\\\\\#\\      R      \\#\\\\\\.#\n####\\#\\#\\#########\\#\\#\\####\n#\\\\\\\\\\\\#\\\\\\\\\\#\\\\\\\\\\#\\\\\\\\\\\\#\n#\\##########\\#\\##########\\#\n#\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\#\n###########################\n\nHighscore 15039\n"};
+var mineMaps = {"beard1":"##########\n#**  \\\\\\\\#\n#.R..    #\n# \\  ..*\\#\n#!   ..*!#\n####   # #\n#\\\\... # L\n#\\\\.W... #\n#\\\\.     #\n##########\n\nGrowth 15\nRazors 0\n","beard2":"##############################\n#R...........................#\n#.........................W..#\n#..\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\..#\n#............................#\n#..*****.*\\...*...*...*****..#\n#..*\\....*\\....*\\*..*.\\\\*\\\\..#\n#..*\\....****..!*!......*....#\n#..*\\....*\\....*\\*..*...*....#\n#..*\\....*\\...*...*.....*....#\n#............................#\n#..\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\..#\n#................ ..... .....#\n#................      W....L#\n##############################\n\nGrowth 25\nRazors 10\nFlooding 20\n","beard3":"        ################\n        #*****#!!  1   #\n        #..\\..#        #\n#########\\\\\\\\ # .\\\\\\.  #\n#.............# *      #\n#.. .\\\\\\#..!..#\\**     #\n#.. LW\\\\#W  ..##### ####\n#..R\\\\\\\\#.. ..*\\*\\*W...#\n#.......A.. ...\\.\\...\\\\#\n#..........     **     #\n############....\\.######\n           #.....!#\n           ########\n\nGrowth 10\nTrampoline A targets 1\n","beard4":"####################\r\n#W\\\\!#\\\\\\**.\\#W\\\\\\W#\r\n##*######..###..\\\\\\#\r\n#.......\\.R ###...\\#\r\n#####.###.#.......##\r\n#.......#.#\\####.###\r\n#\\\\##\\###\\#\\\\#...#.L\r\n#\\##\\.###.####.#.#.#\r\n#\\W#####.....###.W.#\r\n####\\\\...\\\\\\...#.#.#\r\n#W*######.######.#.#\r\n#\\\\\\\\\\\\\\\\\\.........#\r\n############\\###\\###\r\n#\\\\.. *..........\\\\#\r\n#W... #.........##W#\r\n####################\r\n","trampoline1":"############\n#..*.R..*..#\n#..A....B..######\n#....2.. ..#\\\\\\C#\n#......* *.#\\\\\\1#\n########L########\n\nTrampoline A targets 1\nTrampoline B targets 1\nTrampoline C targets 2\nHighscore 426","trampoline2":"     ######\n     #....#\n     #.**.#\n     #.**.#\n     #.**.#\n######.\\\\.######\n#**....*.......#\n#\\\\....L\\\\\\....#\n#A......*****..#\n######R.....###########\n     ###.....*.....\\\\\\#\n       #\\\\\\\\#..1...\\\\\\#\n       #\\\\\\\\#......\\\\\\#\n       ################\n\nTrampoline A targets 1\nHighscore 1742","trampoline3":"#######################################\n#****................#..1...\\\\\\\\\\\\\\B..#\n#R.......##############################\n#.. ..................................#\n#.. ........       \\            ......#\n#.. .*. ....**.*...#....... ..........#\n#.. ... ....\\\\\\\\...#.A..... ..........#\n#.. ... ....\\ .....#.......    *  \\\\..#\n#.. ... ....\\......#....... ..........#\n#.. ... ....\\......#....... ..........#\n#.. ... ...........#................**#\n#..\\\\\\\\\\...........#................\\\\#\n########### ############## ############\n#...*.................................#\n#....*..................        ......#\n#... .*....*.............. ..... .....#\n#....*2*........########.. ..... .....L\n#...*...*.......#\\\\\\#..... ...*.......#\n#.....\\\\\\.......#\\\\\\#....**..***......#\n#....    .......#\\\\\\#*................#\n#...............#\\\\\\#*...**...*.......#\n#...............#.....................#\n######       ############## ### #######\n#\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\#\n#######################################\n\nTrampoline A targets 1\nTrampoline B targets 2\nHighscore 5477\n","flood1":"###########\n#....R....#\n#.*******.#\n#.\\\\\\\\\\\\\\.#\n#.       .#\n#..*\\\\\\*..#\n#.#*\\\\\\*#.#\n#########L#\n\nWater 1\nFlooding 8 \nWaterproof 5\nHighscore 945\n","flood2":"#######\n#..***#\n#..\\\\\\#\n#...**#\n#.*.*\\#\nLR....#\n#######\n\nFlooding 5\nWaterproof 3\nHighscore 281\n","flood3":"############\n#..........#\n#.....*....#\n#..\\\\\\\\\\\\..#\n#.     ....#\n#..\\\\\\\\\\\\\\.#\n#..\\..    .#\n#..\\.. ....#\n#..... ..* #\n#..### ### #\n#...R#\\#\\\\.#\n######L#####\n\nWaterproof 10 \nFlooding 10\nWater 2\nHighscore 1303\n","flood4":"########################\n#.....................\\#\n#......*\\   ...........#\n#......*... ......* ...#\n#..   \\\\... .*..... ...#\n#.. ....... ....... ...#\n#.. ....... .\\\\.... ...#   ######\n#.  ....      .....\\...#   #\\\\\\\\#\n#\\\\\\......... .........#   #....#\n###########     R      ########*#####\n          #.......... ........***\\\\\\#\n          #.......... ............**#\n          #.......... ......... *.*\\#\n          #....\\\\.... ....\\\\..... ..L\n          #.....................****#\n          #........\\*...............#\n          #...........     .........#\n          #.........................#\n          ###########################\n\nWater 1\nFlooding 20\nWaterproof 10\nHighscore 1592\n","flood5":"#########\n#.*..#\\.#\n#.\\..#\\.L\n#.R .##.#\n#.\\  ...#\n#..\\  ..#\n#...\\  ##\n#....\\ \\#\n#########\n\nWater 2\nFlooding 11\nWaterproof 5\nHighscore 575\n","contest1":"######\n#. *R#\n#  \\.#\n#\\ * #\nL  .\\#\n######\n\nHighscore 212\n","contest2":"#######\n#..***#\n#..\\\\\\#\n#...**#\n#.*.*\\#\nLR....#\n#######\n\nHighscore 281\n","contest3":"########\n#..R...#\n#..*...#\n#..#...#\n#.\\.\\..L\n####**.#\n#\\.....#\n#\\..* .#\n########\n\nHighscore 275\n","contest4":"#########\n#.*..#\\.#\n#.\\..#\\.L\n#.R .##.#\n#.\\  ...#\n#..\\  ..#\n#...\\  ##\n#....\\ \\#\n#########\n\nHighscore 575\n","contest5":"############\n#..........#\n#.....*....#\n#..\\\\\\\\\\\\..#\n#.     ....#\n#..\\\\\\\\\\\\\\.#\n#..\\..    .#\n#..\\.. ....#\n#..... ..* #\n#..### ### #\n#...R#\\#\\\\.#\n######L#####\n\nHighscore 1303\n","contest6":"###############\n#\\\\\\.......** #\n#\\\\#.#####...##\n#\\\\#.....*##. #\n#\\#####\\...## #\n#\\......####* #\n#\\.######* #.\\#\n#\\.#. *...##.##\n#\\##. ..  *...#\n#\\...... L#.#.#\n###########.#.#\n#\\..........#.#\n##.##########.#\n#R.#\\.........#\n###############\n\nHighscore 1177\n","contest7":"    #######\n    ##    *#\n     ##R  *##\n      ##\\\\\\\\##\n       ##....##\n      ##..\\ . ##\n     ## . L .  ##\n    ##\\\\\\# #\\\\\\\\##\n   ######   #######\n\nHighscore 869\n","contest8":"##############\n#\\\\... ......#\n###.#. ...*..#\n  #.#. ... ..#\n### #.   \\ ..#\n#. .#..... **#######\n#.#\\#..... ..\\\\\\*. #\n#*\\\\#.###. ####\\\\\\ #\n#\\\\.#.     ...## \\ #\n#\\#.#..... ....# \\ #  \n###.#..... ....#   ##\n#\\\\.#..... ....#\\   # \n########.. ..###*####\n#......... .........#\n#......... ....***..#\n#..\\\\\\\\\\ # ####.....#\n#........*R..\\\\\\   .#\n##########L##########\n\nHighscore 1973\n","contest9":"        #L#######\n        #*** \\\\ #\n        #\\\\\\ .. #\n#########.##    ##########\n#.......\\ ..........*   .#\n#*******\\......#....#\\\\ .#\n###\\.\\\\\\...**..#....... *#\n#*****\\\\  .\\\\..##     #\\.#\n######### ....  ##########\n        #       #\n        ####*####      \n        #.......#\n#########  \\\\\\\\*##########\n#*\\\\  **#     *..*\\ \\\\\\\\\\#\n#.\\**\\*** .....**.# \\\\##\\#\n#\\R......     .\\\\.. \\\\\\\\\\#\n##########################\n\nHighscore 3093\n","contest10":"#############################\n#..........................\\#\n#..\\\\###...#....        ###.#\n#..\\*\\\\\\.. #.... ..##\\\\..\\#.#\n#..\\*\\.... #.... ..#\\#....#.#\n#...\\###.. #.... ....#....#.#\n#... ..... ..... .####......#\n#\\\\. #....           .......#\n#... #..#. .....*\\ ##.......#\n#.#....... ...#..  ....######\n#. ...#... ...#.\\  ....#..* #\n##........ ...#.. #....#.#\\\\#\n#.....*... .....*\\#\\\\.....*.#\n#.***.* .......*\\****.....#.#\n#.\\\\\\.. ................   .#\n#.#####    .######    ##### #\n#....\\\\.................... #\n#....****...#.##.....\\\\\\\\..\\#\n#....\\\\\\\\...#.........*....\\#\n#....\\\\\\\\...#.\\\\.    #\\###.\\#\n#....     ..#.... ...#\\\\\\\\. #\n#........ ..#.... ...#..... #\n#........         ........#R#\n###########################L#\n\nHighscore 3634\n","ems1":"#######\n#L\\\\\\##\n##*  ##\n##*  ##\n##*  ##\n##*  ##\n##*  ##\n##*  ##\n##*  ##\n##*  ##\n##*  ##\n##   ##\n##   ##\n##R  ##\n## # ##\n#\\ # \\#\n## # ##\n## # ##\n## # ##\n## # ##\n#######\n\nAuthor ems_ (irc)\nHighscore 334\n","ems2":"#########\n###***###\n###***###\n###***###\n###***###\n###***###\n###***###\n#  .**\\\\#\n# # #*#\\#\n# # #*#\\#\n# # #*#\\#\n# # #*#\\#\n# # #*#\\#\n#    .#\\#\n###   **#\n### R \\\\#\n###   #L#\n###   ###\n###   ###\n###   ###\n###   ###\n###   ###\n###   ###\n#########\n\nAuthor ems_ (irc)\nHighscore 691\n","ems3":"################\n#\\.****####\\#*##\n#\\.\\\\\\\\.***...##\n##*####.#*###..#\n#\\.R....#...##\\#\n#\\ ####...#.#*.#\n#\\ **######.#..#\n##...\\\\\\\\\\\\...##\n#L.##########.##\n################\n\nAuthor ems_ (irc)\nHighscore 1199\n","ems3v2":"################\n#\\.****####\\#*##\n#\\.\\\\\\\\.***...##\n##*####.#*###..#\n#\\.R....#...##\\#\n#\\ ####...#.#*.#\n#\\ **######.#..#\n##...\\\\\\\\\\\\...##\n#L.#\\########.##\n################\n\nAuthor ems_ (irc)\nHighscore 1272\n","ems4":"#########\n#*     L#\n#\\      #\n#\\\\     #\n##\\\\    #\n###\\\\   #\n####\\\\  #\n#####\\\\ #\n####### #\n# #*#*# #\n#  * *  #\n# #*#*# #\n#  * *  #\n# #*#*# #\n# R* *  #\n# #*#*# #\n#  * *  #\n# #*#*# #\n#  * *  #\n# #*#*# #\n#  * *  #\n###*#*#.#\n#\\. . #\\#\n### # ###\n### # ###\n##  #  ##\n##  #  ##\n##  #  ##\n##  #  ##\n##  #  ##\n#########\n\nAuthor ems_ (irc)\nHighscore 908\n","ems5":"###################\n#*************   ##\n##***********# * ##\n###*********##.*.##\n####*******####*###\n#####*****#####*###\n######***######*###\n#######*#######*###\n###### * ######*###\n#\\     .      #*###\n#\\     \\      #*###\n#\\     **     #*###\n#\\     ##     #*###\n#\\            #*###\n#\\    \\  \\    #*###\n#\\    ** **   #*###\n#\\    ## ##   #*###\n#\\            #*###\n#\\   \\  \\  \\  #*###\n#R   ** ** ** #*\\##\n#### ## ## ## #*###\n###L           . ##\n#### ## ## ## ##  #\n###  #  ##  #  #  #\n###  #  ##  #  #  #\n###  #  ##  #  #  #\n###################\n\nAuthor ems_ (irc)\nHighscore 990\n","ems5v2":"###################\n#*************   ##\n##***********# * ##\n###*********##.*.##\n####*******####*###\n#####*****#####*###\n######***######*###\n#######*#######*###\n###### * ######*###\n#\\     .      #*###\n#\\     \\      #*###\n#\\     **     #*###\n#\\     ##     #*###\n#\\            #*###\n#\\    \\  \\    #*###\n#\\    ** **   #*###\n#\\    ## ##   #*###\n#\\            #*###\n#\\   \\  \\  \\  #*###\n#R   ** ** ** #*\\##\n#### ## ## ## #*###\n####           . ##\n#### ## ## ## ## ##\n##   ## #   #  #  #\n## * L# #\\  #  # *#\n##   ## # \\ # ##  #\n## #### #  \\# \\#  #\n###################\n\nAuthor ems_ (irc)\nHighscore 1238\n","ems6":"###########################\n#............R............#\n#.####.######L######.####.#\n#.####.#*#########*#.####.#\n#.####..\\#*******#\\..####.#\n#.######..\\\\\\\\\\\\\\..######.#\n#.####*######.######*####.#\n#.####\\.....#.#.....\\####.#\n#......####.#.#.####....#.#\n#####.#***#.#.#.#***#.#.#.#\n#......\\\\\\..#.#..\\\\\\..#.#.#\n#.#########*****#####.#.#.#\n#..........\\\\\\\\\\......#...#\n###########################\n\nAuthor ems_ (irc)\nWater 7\nWaterproof 42\nHighscore 1414\n","pacman":"###########################\n#............#............#\n#.####.#####.#.#####.####.#\n#\\#  #.#   #.#.#   #.#  #\\#\n#.####.#####.#.#####.####.#\n#.........................#\n#.####.#.#########.#.####.#\n#......#.....#.....#......#\n######.#####.#.#####.######\n     #.#           #.#\n######.# #### #### #.######\nL     .  #       #  .    **\n######.# ######### #.######\n     #.#           #.#\n######.# ######### #.######\n#............#............#\n#.####.#####.#.#####.####.#\n#\\...#.      R      .#...\\#\n####.#.#.#########.#.#.####\n#......#.....#.....#......#\n#.##########.#.##########.#\n#.........................#\n###########################\n\nAuthor newsham (www.thenewsh.com/~newsham/x/pacman.map)\nHighscore 191\n","pacman2":"###########################\n#\\\\\\\\\\\\\\\\\\\\\\\\#\\\\\\\\\\\\\\\\\\\\\\\\#\n#\\####\\#####\\#\\#####\\####\\#\n#.#  #\\#   #\\#\\#   #\\#  #.#\n#\\####\\#####\\#\\#####\\####\\#\n#\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\#\n#\\####\\#\\#########\\#\\####\\#\n#\\\\\\\\\\\\#\\\\\\\\\\#\\\\\\\\\\#\\\\\\\\\\\\#\n######\\#####\\#\\#####\\######\n     #\\#           #\\#\n######\\# #### #### #\\######\nL     \\  #       #  \\    **\n######\\# ######### #\\######\n     #\\#           #\\#\n######\\# ######### #\\######\n#\\\\\\\\\\\\\\\\\\\\\\\\#\\\\\\\\\\\\\\\\\\\\\\\\#\n#\\####\\#####\\#\\#####\\####\\#\n#.\\\\\\#\\      R      \\#\\\\\\.#\n####\\#\\#\\#########\\#\\#\\####\n#\\\\\\\\\\\\#\\\\\\\\\\#\\\\\\\\\\#\\\\\\\\\\\\#\n#\\##########\\#\\##########\\#\n#\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\#\n###########################\n\nHighscore 15039\n"};
 if (typeof exports !== "undefined") {exports.maps = mineMaps;}
diff --git a/js/maps.min.js b/js/maps.min.js
index 1e9ecdd..1a1b95f 100644
--- a/js/maps.min.js
+++ b/js/maps.min.js
@@ -1 +1 @@
-var mineMaps={trampoline1:"############\n#..*.R..*..#\n#..A....B..######\n#....2.. ..#\\\\\\C#\n#......* *.#\\\\\\1#\n########L########\n\nTrampoline A targets 1\nTrampoline B targets 1\nTrampoline C targets 2\nHighscore 426",trampoline2:"     ######\n     #....#\n     #.**.#\n     #.**.#\n     #.**.#\n######.\\\\.######\n#**....*.......#\n#\\\\....L\\\\\\....#\n#A......*****..#\n######R.....###########\n     ###.....*.....\\\\\\#\n       #\\\\\\\\#..1...\\\\\\#\n       #\\\\\\\\#......\\\\\\#\n       ################\n\nTrampoline A targets 1\nHighscore 1742",trampoline3:"#######################################\n#****................#..1...\\\\\\\\\\\\\\B..#\n#R.......##############################\n#.. ..................................#\n#.. ........       \\            ......#\n#.. .*. ....**.*...#....... ..........#\n#.. ... ....\\\\\\\\...#.A..... ..........#\n#.. ... ....\\ .....#.......    *  \\\\..#\n#.. ... ....\\......#....... ..........#\n#.. ... ....\\......#....... ..........#\n#.. ... ...........#................**#\n#..\\\\\\\\\\...........#................\\\\#\n########### ############## ############\n#...*.................................#\n#....*..................        ......#\n#... .*....*.............. ..... .....#\n#....*2*........########.. ..... .....L\n#...*...*.......#\\\\\\#..... ...*.......#\n#.....\\\\\\.......#\\\\\\#....**..***......#\n#....    .......#\\\\\\#*................#\n#...............#\\\\\\#*...**...*.......#\n#...............#.....................#\n######       ############## ### #######\n#\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\#\n#######################################\n\nTrampoline A targets 1\nTrampoline B targets 2\nHighscore 5477\n",flood1:"###########\n#....R....#\n#.*******.#\n#.\\\\\\\\\\\\\\.#\n#.       .#\n#..*\\\\\\*..#\n#.#*\\\\\\*#.#\n#########L#\n\nWater 1\nFlooding 8 \nWaterproof 5\nHighscore 945\n",flood2:"#######\n#..***#\n#..\\\\\\#\n#...**#\n#.*.*\\#\nLR....#\n#######\n\nFlooding 5\nWaterproof 3\nHighscore 281\n",flood3:"############\n#..........#\n#.....*....#\n#..\\\\\\\\\\\\..#\n#.     ....#\n#..\\\\\\\\\\\\\\.#\n#..\\..    .#\n#..\\.. ....#\n#..... ..* #\n#..### ### #\n#...R#\\#\\\\.#\n######L#####\n\nWaterproof 10 \nFlooding 10\nWater 2\nHighscore 1303\n",flood4:"########################\n#.....................\\#\n#......*\\   ...........#\n#......*... ......* ...#\n#..   \\\\... .*..... ...#\n#.. ....... ....... ...#\n#.. ....... .\\\\.... ...#   ######\n#.  ....      .....\\...#   #\\\\\\\\#\n#\\\\\\......... .........#   #....#\n###########     R      ########*#####\n          #.......... ........***\\\\\\#\n          #.......... ............**#\n          #.......... ......... *.*\\#\n          #....\\\\.... ....\\\\..... ..L\n          #.....................****#\n          #........\\*...............#\n          #...........     .........#\n          #.........................#\n          ###########################\n\nWater 1\nFlooding 20\nWaterproof 10\nHighscore 1592\n",flood5:"#########\n#.*..#\\.#\n#.\\..#\\.L\n#.R .##.#\n#.\\  ...#\n#..\\  ..#\n#...\\  ##\n#....\\ \\#\n#########\n\nWater 2\nFlooding 11\nWaterproof 5\nHighscore 575\n",contest1:"######\n#. *R#\n#  \\.#\n#\\ * #\nL  .\\#\n######\n\nHighscore 212\n",contest2:"#######\n#..***#\n#..\\\\\\#\n#...**#\n#.*.*\\#\nLR....#\n#######\n\nHighscore 281\n",contest3:"########\n#..R...#\n#..*...#\n#..#...#\n#.\\.\\..L\n####**.#\n#\\.....#\n#\\..* .#\n########\n\nHighscore 275\n",contest4:"#########\n#.*..#\\.#\n#.\\..#\\.L\n#.R .##.#\n#.\\  ...#\n#..\\  ..#\n#...\\  ##\n#....\\ \\#\n#########\n\nHighscore 575\n",contest5:"############\n#..........#\n#.....*....#\n#..\\\\\\\\\\\\..#\n#.     ....#\n#..\\\\\\\\\\\\\\.#\n#..\\..    .#\n#..\\.. ....#\n#..... ..* #\n#..### ### #\n#...R#\\#\\\\.#\n######L#####\n\nHighscore 1303\n",contest6:"###############\n#\\\\\\.......** #\n#\\\\#.#####...##\n#\\\\#.....*##. #\n#\\#####\\...## #\n#\\......####* #\n#\\.######* #.\\#\n#\\.#. *...##.##\n#\\##. ..  *...#\n#\\...... L#.#.#\n###########.#.#\n#\\..........#.#\n##.##########.#\n#R.#\\.........#\n###############\n\nHighscore 1177\n",contest7:"    #######\n    ##    *#\n     ##R  *##\n      ##\\\\\\\\##\n       ##....##\n      ##..\\ . ##\n     ## . L .  ##\n    ##\\\\\\# #\\\\\\\\##\n   ######   #######\n\nHighscore 869\n",contest8:"##############\n#\\\\... ......#\n###.#. ...*..#\n  #.#. ... ..#\n### #.   \\ ..#\n#. .#..... **#######\n#.#\\#..... ..\\\\\\*. #\n#*\\\\#.###. ####\\\\\\ #\n#\\\\.#.     ...## \\ #\n#\\#.#..... ....# \\ #  \n###.#..... ....#   ##\n#\\\\.#..... ....#\\   # \n########.. ..###*####\n#......... .........#\n#......... ....***..#\n#..\\\\\\\\\\ # ####.....#\n#........*R..\\\\\\   .#\n##########L##########\n\nHighscore 1973\n",contest9:"        #L#######\n        #*** \\\\ #\n        #\\\\\\ .. #\n#########.##    ##########\n#.......\\ ..........*   .#\n#*******\\......#....#\\\\ .#\n###\\.\\\\\\...**..#....... *#\n#*****\\\\  .\\\\..##     #\\.#\n######### ....  ##########\n        #       #\n        ####*####      \n        #.......#\n#########  \\\\\\\\*##########\n#*\\\\  **#     *..*\\ \\\\\\\\\\#\n#.\\**\\*** .....**.# \\\\##\\#\n#\\R......     .\\\\.. \\\\\\\\\\#\n##########################\n\nHighscore 3093\n",contest10:"#############################\n#..........................\\#\n#..\\\\###...#....        ###.#\n#..\\*\\\\\\.. #.... ..##\\\\..\\#.#\n#..\\*\\.... #.... ..#\\#....#.#\n#...\\###.. #.... ....#....#.#\n#... ..... ..... .####......#\n#\\\\. #....           .......#\n#... #..#. .....*\\ ##.......#\n#.#....... ...#..  ....######\n#. ...#... ...#.\\  ....#..* #\n##........ ...#.. #....#.#\\\\#\n#.....*... .....*\\#\\\\.....*.#\n#.***.* .......*\\****.....#.#\n#.\\\\\\.. ................   .#\n#.#####    .######    ##### #\n#....\\\\.................... #\n#....****...#.##.....\\\\\\\\..\\#\n#....\\\\\\\\...#.........*....\\#\n#....\\\\\\\\...#.\\\\.    #\\###.\\#\n#....     ..#.... ...#\\\\\\\\. #\n#........ ..#.... ...#..... #\n#........         ........#R#\n###########################L#\n\nHighscore 3634\n",ems1:"#######\n#L\\\\\\##\n##*  ##\n##*  ##\n##*  ##\n##*  ##\n##*  ##\n##*  ##\n##*  ##\n##*  ##\n##*  ##\n##   ##\n##   ##\n##R  ##\n## # ##\n#\\ # \\#\n## # ##\n## # ##\n## # ##\n## # ##\n#######\n\nAuthor ems_ (irc)\nHighscore 334\n",ems2:"#########\n###***###\n###***###\n###***###\n###***###\n###***###\n###***###\n#  .**\\\\#\n# # #*#\\#\n# # #*#\\#\n# # #*#\\#\n# # #*#\\#\n# # #*#\\#\n#    .#\\#\n###   **#\n### R \\\\#\n###   #L#\n###   ###\n###   ###\n###   ###\n###   ###\n###   ###\n###   ###\n#########\n\nAuthor ems_ (irc)\nHighscore 691\n",ems3:"################\n#\\.****####\\#*##\n#\\.\\\\\\\\.***...##\n##*####.#*###..#\n#\\.R....#...##\\#\n#\\ ####...#.#*.#\n#\\ **######.#..#\n##...\\\\\\\\\\\\...##\n#L.##########.##\n################\n\nAuthor ems_ (irc)\nHighscore 1199\n",ems3v2:"################\n#\\.****####\\#*##\n#\\.\\\\\\\\.***...##\n##*####.#*###..#\n#\\.R....#...##\\#\n#\\ ####...#.#*.#\n#\\ **######.#..#\n##...\\\\\\\\\\\\...##\n#L.#\\########.##\n################\n\nAuthor ems_ (irc)\nHighscore 1272\n",ems4:"#########\n#*     L#\n#\\      #\n#\\\\     #\n##\\\\    #\n###\\\\   #\n####\\\\  #\n#####\\\\ #\n####### #\n# #*#*# #\n#  * *  #\n# #*#*# #\n#  * *  #\n# #*#*# #\n# R* *  #\n# #*#*# #\n#  * *  #\n# #*#*# #\n#  * *  #\n# #*#*# #\n#  * *  #\n###*#*#.#\n#\\. . #\\#\n### # ###\n### # ###\n##  #  ##\n##  #  ##\n##  #  ##\n##  #  ##\n##  #  ##\n#########\n\nAuthor ems_ (irc)\nHighscore 908\n",ems5:"###################\n#*************   ##\n##***********# * ##\n###*********##.*.##\n####*******####*###\n#####*****#####*###\n######***######*###\n#######*#######*###\n###### * ######*###\n#\\     .      #*###\n#\\     \\      #*###\n#\\     **     #*###\n#\\     ##     #*###\n#\\            #*###\n#\\    \\  \\    #*###\n#\\    ** **   #*###\n#\\    ## ##   #*###\n#\\            #*###\n#\\   \\  \\  \\  #*###\n#R   ** ** ** #*\\##\n#### ## ## ## #*###\n###L           . ##\n#### ## ## ## ##  #\n###  #  ##  #  #  #\n###  #  ##  #  #  #\n###  #  ##  #  #  #\n###################\n\nAuthor ems_ (irc)\nHighscore 990\n",ems5v2:"###################\n#*************   ##\n##***********# * ##\n###*********##.*.##\n####*******####*###\n#####*****#####*###\n######***######*###\n#######*#######*###\n###### * ######*###\n#\\     .      #*###\n#\\     \\      #*###\n#\\     **     #*###\n#\\     ##     #*###\n#\\            #*###\n#\\    \\  \\    #*###\n#\\    ** **   #*###\n#\\    ## ##   #*###\n#\\            #*###\n#\\   \\  \\  \\  #*###\n#R   ** ** ** #*\\##\n#### ## ## ## #*###\n####           . ##\n#### ## ## ## ## ##\n##   ## #   #  #  #\n## * L# #\\  #  # *#\n##   ## # \\ # ##  #\n## #### #  \\# \\#  #\n###################\n\nAuthor ems_ (irc)\nHighscore 1238\n",ems6:"###########################\n#............R............#\n#.####.######L######.####.#\n#.####.#*#########*#.####.#\n#.####..\\#*******#\\..####.#\n#.######..\\\\\\\\\\\\\\..######.#\n#.####*######.######*####.#\n#.####\\.....#.#.....\\####.#\n#......####.#.#.####....#.#\n#####.#***#.#.#.#***#.#.#.#\n#......\\\\\\..#.#..\\\\\\..#.#.#\n#.#########*****#####.#.#.#\n#..........\\\\\\\\\\......#...#\n###########################\n\nAuthor ems_ (irc)\nWater 7\nWaterproof 42\nHighscore 1414\n",pacman:"###########################\n#............#............#\n#.####.#####.#.#####.####.#\n#\\#  #.#   #.#.#   #.#  #\\#\n#.####.#####.#.#####.####.#\n#.........................#\n#.####.#.#########.#.####.#\n#......#.....#.....#......#\n######.#####.#.#####.######\n     #.#           #.#\n######.# #### #### #.######\nL     .  #       #  .    **\n######.# ######### #.######\n     #.#           #.#\n######.# ######### #.######\n#............#............#\n#.####.#####.#.#####.####.#\n#\\...#.      R      .#...\\#\n####.#.#.#########.#.#.####\n#......#.....#.....#......#\n#.##########.#.##########.#\n#.........................#\n###########################\n\nAuthor newsham (www.thenewsh.com/~newsham/x/pacman.map)\nHighscore 191\n",pacman2:"###########################\n#\\\\\\\\\\\\\\\\\\\\\\\\#\\\\\\\\\\\\\\\\\\\\\\\\#\n#\\####\\#####\\#\\#####\\####\\#\n#.#  #\\#   #\\#\\#   #\\#  #.#\n#\\####\\#####\\#\\#####\\####\\#\n#\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\#\n#\\####\\#\\#########\\#\\####\\#\n#\\\\\\\\\\\\#\\\\\\\\\\#\\\\\\\\\\#\\\\\\\\\\\\#\n######\\#####\\#\\#####\\######\n     #\\#           #\\#\n######\\# #### #### #\\######\nL     \\  #       #  \\    **\n######\\# ######### #\\######\n     #\\#           #\\#\n######\\# ######### #\\######\n#\\\\\\\\\\\\\\\\\\\\\\\\#\\\\\\\\\\\\\\\\\\\\\\\\#\n#\\####\\#####\\#\\#####\\####\\#\n#.\\\\\\#\\      R      \\#\\\\\\.#\n####\\#\\#\\#########\\#\\#\\####\n#\\\\\\\\\\\\#\\\\\\\\\\#\\\\\\\\\\#\\\\\\\\\\\\#\n#\\##########\\#\\##########\\#\n#\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\#\n###########################\n\nHighscore 15039\n"};if(typeof exports!=="undefined"){exports.maps=mineMaps};
\ No newline at end of file
+var mineMaps={beard1:"##########\n#**  \\\\\\\\#\n#.R..    #\n# \\  ..*\\#\n#!   ..*!#\n####   # #\n#\\\\... # L\n#\\\\.W... #\n#\\\\.     #\n##########\n\nGrowth 15\nRazors 0\n",beard2:"##############################\n#R...........................#\n#.........................W..#\n#..\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\..#\n#............................#\n#..*****.*\\...*...*...*****..#\n#..*\\....*\\....*\\*..*.\\\\*\\\\..#\n#..*\\....****..!*!......*....#\n#..*\\....*\\....*\\*..*...*....#\n#..*\\....*\\...*...*.....*....#\n#............................#\n#..\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\..#\n#................ ..... .....#\n#................      W....L#\n##############################\n\nGrowth 25\nRazors 10\nFlooding 20\n",beard3:"        ################\n        #*****#!!  1   #\n        #..\\..#        #\n#########\\\\\\\\ # .\\\\\\.  #\n#.............# *      #\n#.. .\\\\\\#..!..#\\**     #\n#.. LW\\\\#W  ..##### ####\n#..R\\\\\\\\#.. ..*\\*\\*W...#\n#.......A.. ...\\.\\...\\\\#\n#..........     **     #\n############....\\.######\n           #.....!#\n           ########\n\nGrowth 10\nTrampoline A targets 1\n",beard4:"####################\r\n#W\\\\!#\\\\\\**.\\#W\\\\\\W#\r\n##*######..###..\\\\\\#\r\n#.......\\.R ###...\\#\r\n#####.###.#.......##\r\n#.......#.#\\####.###\r\n#\\\\##\\###\\#\\\\#...#.L\r\n#\\##\\.###.####.#.#.#\r\n#\\W#####.....###.W.#\r\n####\\\\...\\\\\\...#.#.#\r\n#W*######.######.#.#\r\n#\\\\\\\\\\\\\\\\\\.........#\r\n############\\###\\###\r\n#\\\\.. *..........\\\\#\r\n#W... #.........##W#\r\n####################\r\n",trampoline1:"############\n#..*.R..*..#\n#..A....B..######\n#....2.. ..#\\\\\\C#\n#......* *.#\\\\\\1#\n########L########\n\nTrampoline A targets 1\nTrampoline B targets 1\nTrampoline C targets 2\nHighscore 426",trampoline2:"     ######\n     #....#\n     #.**.#\n     #.**.#\n     #.**.#\n######.\\\\.######\n#**....*.......#\n#\\\\....L\\\\\\....#\n#A......*****..#\n######R.....###########\n     ###.....*.....\\\\\\#\n       #\\\\\\\\#..1...\\\\\\#\n       #\\\\\\\\#......\\\\\\#\n       ################\n\nTrampoline A targets 1\nHighscore 1742",trampoline3:"#######################################\n#****................#..1...\\\\\\\\\\\\\\B..#\n#R.......##############################\n#.. ..................................#\n#.. ........       \\            ......#\n#.. .*. ....**.*...#....... ..........#\n#.. ... ....\\\\\\\\...#.A..... ..........#\n#.. ... ....\\ .....#.......    *  \\\\..#\n#.. ... ....\\......#....... ..........#\n#.. ... ....\\......#....... ..........#\n#.. ... ...........#................**#\n#..\\\\\\\\\\...........#................\\\\#\n########### ############## ############\n#...*.................................#\n#....*..................        ......#\n#... .*....*.............. ..... .....#\n#....*2*........########.. ..... .....L\n#...*...*.......#\\\\\\#..... ...*.......#\n#.....\\\\\\.......#\\\\\\#....**..***......#\n#....    .......#\\\\\\#*................#\n#...............#\\\\\\#*...**...*.......#\n#...............#.....................#\n######       ############## ### #######\n#\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\#\n#######################################\n\nTrampoline A targets 1\nTrampoline B targets 2\nHighscore 5477\n",flood1:"###########\n#....R....#\n#.*******.#\n#.\\\\\\\\\\\\\\.#\n#.       .#\n#..*\\\\\\*..#\n#.#*\\\\\\*#.#\n#########L#\n\nWater 1\nFlooding 8 \nWaterproof 5\nHighscore 945\n",flood2:"#######\n#..***#\n#..\\\\\\#\n#...**#\n#.*.*\\#\nLR....#\n#######\n\nFlooding 5\nWaterproof 3\nHighscore 281\n",flood3:"############\n#..........#\n#.....*....#\n#..\\\\\\\\\\\\..#\n#.     ....#\n#..\\\\\\\\\\\\\\.#\n#..\\..    .#\n#..\\.. ....#\n#..... ..* #\n#..### ### #\n#...R#\\#\\\\.#\n######L#####\n\nWaterproof 10 \nFlooding 10\nWater 2\nHighscore 1303\n",flood4:"########################\n#.....................\\#\n#......*\\   ...........#\n#......*... ......* ...#\n#..   \\\\... .*..... ...#\n#.. ....... ....... ...#\n#.. ....... .\\\\.... ...#   ######\n#.  ....      .....\\...#   #\\\\\\\\#\n#\\\\\\......... .........#   #....#\n###########     R      ########*#####\n          #.......... ........***\\\\\\#\n          #.......... ............**#\n          #.......... ......... *.*\\#\n          #....\\\\.... ....\\\\..... ..L\n          #.....................****#\n          #........\\*...............#\n          #...........     .........#\n          #.........................#\n          ###########################\n\nWater 1\nFlooding 20\nWaterproof 10\nHighscore 1592\n",flood5:"#########\n#.*..#\\.#\n#.\\..#\\.L\n#.R .##.#\n#.\\  ...#\n#..\\  ..#\n#...\\  ##\n#....\\ \\#\n#########\n\nWater 2\nFlooding 11\nWaterproof 5\nHighscore 575\n",contest1:"######\n#. *R#\n#  \\.#\n#\\ * #\nL  .\\#\n######\n\nHighscore 212\n",contest2:"#######\n#..***#\n#..\\\\\\#\n#...**#\n#.*.*\\#\nLR....#\n#######\n\nHighscore 281\n",contest3:"########\n#..R...#\n#..*...#\n#..#...#\n#.\\.\\..L\n####**.#\n#\\.....#\n#\\..* .#\n########\n\nHighscore 275\n",contest4:"#########\n#.*..#\\.#\n#.\\..#\\.L\n#.R .##.#\n#.\\  ...#\n#..\\  ..#\n#...\\  ##\n#....\\ \\#\n#########\n\nHighscore 575\n",contest5:"############\n#..........#\n#.....*....#\n#..\\\\\\\\\\\\..#\n#.     ....#\n#..\\\\\\\\\\\\\\.#\n#..\\..    .#\n#..\\.. ....#\n#..... ..* #\n#..### ### #\n#...R#\\#\\\\.#\n######L#####\n\nHighscore 1303\n",contest6:"###############\n#\\\\\\.......** #\n#\\\\#.#####...##\n#\\\\#.....*##. #\n#\\#####\\...## #\n#\\......####* #\n#\\.######* #.\\#\n#\\.#. *...##.##\n#\\##. ..  *...#\n#\\...... L#.#.#\n###########.#.#\n#\\..........#.#\n##.##########.#\n#R.#\\.........#\n###############\n\nHighscore 1177\n",contest7:"    #######\n    ##    *#\n     ##R  *##\n      ##\\\\\\\\##\n       ##....##\n      ##..\\ . ##\n     ## . L .  ##\n    ##\\\\\\# #\\\\\\\\##\n   ######   #######\n\nHighscore 869\n",contest8:"##############\n#\\\\... ......#\n###.#. ...*..#\n  #.#. ... ..#\n### #.   \\ ..#\n#. .#..... **#######\n#.#\\#..... ..\\\\\\*. #\n#*\\\\#.###. ####\\\\\\ #\n#\\\\.#.     ...## \\ #\n#\\#.#..... ....# \\ #  \n###.#..... ....#   ##\n#\\\\.#..... ....#\\   # \n########.. ..###*####\n#......... .........#\n#......... ....***..#\n#..\\\\\\\\\\ # ####.....#\n#........*R..\\\\\\   .#\n##########L##########\n\nHighscore 1973\n",contest9:"        #L#######\n        #*** \\\\ #\n        #\\\\\\ .. #\n#########.##    ##########\n#.......\\ ..........*   .#\n#*******\\......#....#\\\\ .#\n###\\.\\\\\\...**..#....... *#\n#*****\\\\  .\\\\..##     #\\.#\n######### ....  ##########\n        #       #\n        ####*####      \n        #.......#\n#########  \\\\\\\\*##########\n#*\\\\  **#     *..*\\ \\\\\\\\\\#\n#.\\**\\*** .....**.# \\\\##\\#\n#\\R......     .\\\\.. \\\\\\\\\\#\n##########################\n\nHighscore 3093\n",contest10:"#############################\n#..........................\\#\n#..\\\\###...#....        ###.#\n#..\\*\\\\\\.. #.... ..##\\\\..\\#.#\n#..\\*\\.... #.... ..#\\#....#.#\n#...\\###.. #.... ....#....#.#\n#... ..... ..... .####......#\n#\\\\. #....           .......#\n#... #..#. .....*\\ ##.......#\n#.#....... ...#..  ....######\n#. ...#... ...#.\\  ....#..* #\n##........ ...#.. #....#.#\\\\#\n#.....*... .....*\\#\\\\.....*.#\n#.***.* .......*\\****.....#.#\n#.\\\\\\.. ................   .#\n#.#####    .######    ##### #\n#....\\\\.................... #\n#....****...#.##.....\\\\\\\\..\\#\n#....\\\\\\\\...#.........*....\\#\n#....\\\\\\\\...#.\\\\.    #\\###.\\#\n#....     ..#.... ...#\\\\\\\\. #\n#........ ..#.... ...#..... #\n#........         ........#R#\n###########################L#\n\nHighscore 3634\n",ems1:"#######\n#L\\\\\\##\n##*  ##\n##*  ##\n##*  ##\n##*  ##\n##*  ##\n##*  ##\n##*  ##\n##*  ##\n##*  ##\n##   ##\n##   ##\n##R  ##\n## # ##\n#\\ # \\#\n## # ##\n## # ##\n## # ##\n## # ##\n#######\n\nAuthor ems_ (irc)\nHighscore 334\n",ems2:"#########\n###***###\n###***###\n###***###\n###***###\n###***###\n###***###\n#  .**\\\\#\n# # #*#\\#\n# # #*#\\#\n# # #*#\\#\n# # #*#\\#\n# # #*#\\#\n#    .#\\#\n###   **#\n### R \\\\#\n###   #L#\n###   ###\n###   ###\n###   ###\n###   ###\n###   ###\n###   ###\n#########\n\nAuthor ems_ (irc)\nHighscore 691\n",ems3:"################\n#\\.****####\\#*##\n#\\.\\\\\\\\.***...##\n##*####.#*###..#\n#\\.R....#...##\\#\n#\\ ####...#.#*.#\n#\\ **######.#..#\n##...\\\\\\\\\\\\...##\n#L.##########.##\n################\n\nAuthor ems_ (irc)\nHighscore 1199\n",ems3v2:"################\n#\\.****####\\#*##\n#\\.\\\\\\\\.***...##\n##*####.#*###..#\n#\\.R....#...##\\#\n#\\ ####...#.#*.#\n#\\ **######.#..#\n##...\\\\\\\\\\\\...##\n#L.#\\########.##\n################\n\nAuthor ems_ (irc)\nHighscore 1272\n",ems4:"#########\n#*     L#\n#\\      #\n#\\\\     #\n##\\\\    #\n###\\\\   #\n####\\\\  #\n#####\\\\ #\n####### #\n# #*#*# #\n#  * *  #\n# #*#*# #\n#  * *  #\n# #*#*# #\n# R* *  #\n# #*#*# #\n#  * *  #\n# #*#*# #\n#  * *  #\n# #*#*# #\n#  * *  #\n###*#*#.#\n#\\. . #\\#\n### # ###\n### # ###\n##  #  ##\n##  #  ##\n##  #  ##\n##  #  ##\n##  #  ##\n#########\n\nAuthor ems_ (irc)\nHighscore 908\n",ems5:"###################\n#*************   ##\n##***********# * ##\n###*********##.*.##\n####*******####*###\n#####*****#####*###\n######***######*###\n#######*#######*###\n###### * ######*###\n#\\     .      #*###\n#\\     \\      #*###\n#\\     **     #*###\n#\\     ##     #*###\n#\\            #*###\n#\\    \\  \\    #*###\n#\\    ** **   #*###\n#\\    ## ##   #*###\n#\\            #*###\n#\\   \\  \\  \\  #*###\n#R   ** ** ** #*\\##\n#### ## ## ## #*###\n###L           . ##\n#### ## ## ## ##  #\n###  #  ##  #  #  #\n###  #  ##  #  #  #\n###  #  ##  #  #  #\n###################\n\nAuthor ems_ (irc)\nHighscore 990\n",ems5v2:"###################\n#*************   ##\n##***********# * ##\n###*********##.*.##\n####*******####*###\n#####*****#####*###\n######***######*###\n#######*#######*###\n###### * ######*###\n#\\     .      #*###\n#\\     \\      #*###\n#\\     **     #*###\n#\\     ##     #*###\n#\\            #*###\n#\\    \\  \\    #*###\n#\\    ** **   #*###\n#\\    ## ##   #*###\n#\\            #*###\n#\\   \\  \\  \\  #*###\n#R   ** ** ** #*\\##\n#### ## ## ## #*###\n####           . ##\n#### ## ## ## ## ##\n##   ## #   #  #  #\n## * L# #\\  #  # *#\n##   ## # \\ # ##  #\n## #### #  \\# \\#  #\n###################\n\nAuthor ems_ (irc)\nHighscore 1238\n",ems6:"###########################\n#............R............#\n#.####.######L######.####.#\n#.####.#*#########*#.####.#\n#.####..\\#*******#\\..####.#\n#.######..\\\\\\\\\\\\\\..######.#\n#.####*######.######*####.#\n#.####\\.....#.#.....\\####.#\n#......####.#.#.####....#.#\n#####.#***#.#.#.#***#.#.#.#\n#......\\\\\\..#.#..\\\\\\..#.#.#\n#.#########*****#####.#.#.#\n#..........\\\\\\\\\\......#...#\n###########################\n\nAuthor ems_ (irc)\nWater 7\nWaterproof 42\nHighscore 1414\n",pacman:"###########################\n#............#............#\n#.####.#####.#.#####.####.#\n#\\#  #.#   #.#.#   #.#  #\\#\n#.####.#####.#.#####.####.#\n#.........................#\n#.####.#.#########.#.####.#\n#......#.....#.....#......#\n######.#####.#.#####.######\n     #.#           #.#\n######.# #### #### #.######\nL     .  #       #  .    **\n######.# ######### #.######\n     #.#           #.#\n######.# ######### #.######\n#............#............#\n#.####.#####.#.#####.####.#\n#\\...#.      R      .#...\\#\n####.#.#.#########.#.#.####\n#......#.....#.....#......#\n#.##########.#.##########.#\n#.........................#\n###########################\n\nAuthor newsham (www.thenewsh.com/~newsham/x/pacman.map)\nHighscore 191\n",pacman2:"###########################\n#\\\\\\\\\\\\\\\\\\\\\\\\#\\\\\\\\\\\\\\\\\\\\\\\\#\n#\\####\\#####\\#\\#####\\####\\#\n#.#  #\\#   #\\#\\#   #\\#  #.#\n#\\####\\#####\\#\\#####\\####\\#\n#\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\#\n#\\####\\#\\#########\\#\\####\\#\n#\\\\\\\\\\\\#\\\\\\\\\\#\\\\\\\\\\#\\\\\\\\\\\\#\n######\\#####\\#\\#####\\######\n     #\\#           #\\#\n######\\# #### #### #\\######\nL     \\  #       #  \\    **\n######\\# ######### #\\######\n     #\\#           #\\#\n######\\# ######### #\\######\n#\\\\\\\\\\\\\\\\\\\\\\\\#\\\\\\\\\\\\\\\\\\\\\\\\#\n#\\####\\#####\\#\\#####\\####\\#\n#.\\\\\\#\\      R      \\#\\\\\\.#\n####\\#\\#\\#########\\#\\#\\####\n#\\\\\\\\\\\\#\\\\\\\\\\#\\\\\\\\\\#\\\\\\\\\\\\#\n#\\##########\\#\\##########\\#\n#\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\#\n###########################\n\nHighscore 15039\n"};if(typeof exports!=="undefined"){exports.maps=mineMaps};
\ No newline at end of file
diff --git a/js/mine.js b/js/mine.js
index 9d845b3..31f2564 100644
--- a/js/mine.js
+++ b/js/mine.js
@@ -46,12 +46,21 @@ var Mine = function() {
 		this.lift = this.robot = false;
 		this.trampoline = {
 			sources: { }, // x, y and target
-			targets: { }, // x, y and sources
+			targets: { }  // x, y and sources
 		};
-		this.trampoline.targets = {};
+		this.beard = {
+			growth: 25,
+			razors: 0
+		};
+		map.splice(height, 0, repeat('#', width));
+		map.splice(0, 0, repeat('#', width), repeat('#', width));
+		height = height + 3;
+		width = width + 2;
 		for (i = 0; i < height; ++i) {
 			// padding
-			if (map[i].length < width) map[i] += repeat(' ', width - map[i].length);
+			if (map[i].length < width-2) map[i] += repeat(' ', width - map[i].length - 2);
+			// extra # padding:
+			map[i] = '#' + map[i] + '#';
 			line = map[i] = map[i].split('');
 			
 			// scan
@@ -61,6 +70,8 @@ var Mine = function() {
 				case '*':
 				case '#':
 				case '.':
+				case 'W':
+				case '!':
 					break;
 				case '\\':
 					this.lambdas++;
@@ -82,7 +93,7 @@ var Mine = function() {
 						if (this.trampoline.targets[line[x]]) throw "Can have only one trampoline target " + line[x];
 						this.trampoline.targets[line[x]] = { x: x, y: i, sources: [] };
 					} else {
-						throw "Invalid character in map: '" + line[x] + "'";
+						throw "Invalid character in map: '" + line[x] + "'" + x;
 					}
 					break;
 				}
@@ -99,13 +110,13 @@ var Mine = function() {
 			var words = lines[i].split(/ +/);
 			switch (words[0]) {
 			case 'Water':
-				this.water.level = words[1];
+				this.water.level = parseInt(words[1]);
 				break;
 			case 'Flooding':
-				this.water.flooding = words[1];
+				this.water.flooding = parseInt(words[1]);
 				break;
 			case 'Waterproof':
-				this.water.proof = words[1];
+				this.water.proof = parseInt(words[1]);
 				break;
 			case 'Trampoline':
 				if (words.length !== 4 || words[2] !== 'targets') 
@@ -120,6 +131,12 @@ var Mine = function() {
 				this.trampoline.sources[words[1]].target = words[3];
 				this.trampoline.targets[words[3]].sources.push(words[1]);
 				break;
+			case 'Growth':
+				this.beard.growth = parseInt(words[1]);
+				break;
+			case 'Razors':
+				this.beard.razors = parseInt(words[1]);
+				break;
 			default:
 				this.meta[words[0]] = words.splice(1).join(" ");
 				break;
@@ -136,6 +153,8 @@ var Mine = function() {
 			}
 		}
 		this.water_level = this.water.level;
+		this.razors = this.beard.razors;
+		this.beard_growth = this.beard.growth;
 		this.state = ALIVE;
 	};
 	
@@ -152,19 +171,16 @@ var Mine = function() {
 		case 'L':
 		case 'R':
 			n = (command == 'L' ? -1 : 1);
-			if (this.robot.x + n < 0) return false;
-			if (this.robot.x + n >= this.width) return false;
 			c = this.map[this.robot.y][this.robot.x+n];
 			switch (c) {
 			case '#': return false;
 			case ' ':
 			case '.':
+			case '!':
 			case '\\': return true;
 			case 'L': return false;
 			case 'O': return true;
 			case '*':
-				if (this.robot.x + 2*n < 0) return false;
-				if (this.robot.x + 2*n >= this.width) return false;
 				if (' ' == this.map[this.robot.y][this.robot.x+2*n]) return true;
 			default:
 				if (this.trampoline.sources.hasOwnProperty(c)) return true;
@@ -174,13 +190,12 @@ var Mine = function() {
 		case 'U':
 		case 'D':
 			n = (command == 'D' ? -1 : 1);
-			if (this.robot.y + n < 0) return false;
-			if (this.robot.y + n >= this.height) return false;
 			c = this.map[this.robot.y+n][this.robot.x];
 			switch (c) {
 			case '#': return false;
 			case ' ':
 			case '.':
+			case '!':
 			case '\\': return true;
 			case 'L': return false;
 			case 'O': return true;
@@ -191,6 +206,8 @@ var Mine = function() {
 			}
 			break;
 		case 'W':
+		case 'S':
+			return this.razors > 0;
 		case 'A':
 			return true;
 		}
@@ -200,22 +217,26 @@ var Mine = function() {
 	Mine.prototype.move = function(command) {
 		if (this.state != ALIVE) return false;
 		var n, c, s, t;
+		var newMap, x, y, i, j, below, map = this.map, growBeard;
 		command = command.toUpperCase();
 		if (this.validMove(command)) {
 			switch (command.toUpperCase()) {
 			case 'L':
 			case 'R':
 				n = (command == 'L' ? -1 : 1);
-				this.map[this.robot.y][this.robot.x] = ' ';
-				c = this.map[this.robot.y][this.robot.x+n];
+				map[this.robot.y][this.robot.x] = ' ';
+				c = map[this.robot.y][this.robot.x+n];
 				switch (c) {
 				case '*':
-					this.map[this.robot.y][this.robot.x+2*n] = '*';
+					map[this.robot.y][this.robot.x+2*n] = '*';
 					break;
 				case '\\':
 					this.lambdas--;
 					this.found_lambdas++;
 					break;
+				case '!':
+					this.razors++;
+					break;
 				case 'O':
 					this._foundLift();
 					break;
@@ -225,7 +246,7 @@ var Mine = function() {
 						t = this.trampoline.targets[s.target];
 						for (n = 0; n < t.sources.length; ++n) {
 							s = this.trampoline.sources[t.sources[n]];
-							this.map[s.y][s.x] = ' ';
+							map[s.y][s.x] = ' ';
 						}
 						this.robot.x = t.x;
 						this.robot.y = t.y;
@@ -233,18 +254,21 @@ var Mine = function() {
 					}
 				}
 				this.robot.x += n;
-				this.map[this.robot.y][this.robot.x] = 'R';
+				map[this.robot.y][this.robot.x] = 'R';
 				break;
 			case 'U':
 			case 'D':
 				n = (command == 'D' ? -1 : 1);
-				this.map[this.robot.y][this.robot.x] = ' ';
-				c = this.map[this.robot.y+n][this.robot.x];
+				map[this.robot.y][this.robot.x] = ' ';
+				c = map[this.robot.y+n][this.robot.x];
 				switch (c) {
 				case '\\':
 					this.lambdas--;
 					this.found_lambdas++;
 					break;
+				case '!':
+					this.razors++;
+					break;
 				case 'O':
 					this._foundLift();
 					break;
@@ -254,7 +278,7 @@ var Mine = function() {
 						t = this.trampoline.targets[s.target];
 						for (n = 0; n < t.sources.length; ++n) {
 							s = this.trampoline.sources[t.sources[n]];
-							this.map[s.y][s.x] = ' ';
+							map[s.y][s.x] = ' ';
 						}
 						this.robot.x = t.x;
 						this.robot.y = t.y;
@@ -262,7 +286,13 @@ var Mine = function() {
 					}
 				}
 				this.robot.y += n;
-				this.map[this.robot.y][this.robot.x] = 'R';
+				map[this.robot.y][this.robot.x] = 'R';
+				break;
+			case 'S':
+				--this.razors;
+				for (var i = -1; i <= 1; ++i) for (var j = -1; j <= 1; ++j) {
+					if ('W' == map[this.robot.y+i][this.robot.x+j]) map[this.robot.y+i][this.robot.x+j] = ' ';
+				}
 				break;
 			case 'A':
 				this._abort();
@@ -276,35 +306,44 @@ var Mine = function() {
 			}
 		}
 		
-		var newMap = [], x, y, below;
-		for (y = 0; y < this.height; ++y) { newMap[y] = this.map[y].slice(); }
+		newMap = [];
+		growBeard = false;
+		if (0 > --this.beard_growth) {
+			this.beard_growth = this.beard.growth;
+			growBeard = true;
+		}
+		for (y = 0; y < map.length; ++y) { newMap[y] = this.map[y].slice(); }
 		
-		for (y = 0; y < this.height; ++y) {
-			for (x = 0; x < this.width; ++x) {
-				if ('*' == this.map[y][x]) {
-					below = this.get(x, y-1);
+		for (y = 2; y < 2+this.height; ++y) {
+			for (x = 1; x <= this.width; ++x) {
+				if ('*' == map[y][x]) {
+					below = map[y-1][x];
 					if (' ' == below) {
 						// fall down
 						newMap[y-1][x] = '*';
 						newMap[y][x] = ' ';
-						if ('R' == this.get(x, y-2)) this._crushed();
-					} else if ((below == '*' || below == '\\') && ' ' == this.get(x+1, y-1) && ' ' == this.map[y][x+1]) {
+						if ('R' == map[y-2][x]) this._crushed();
+					} else if ((below == '*' || below == '\\') && ' ' == map[y-1][x+1] && ' ' == map[y][x+1]) {
 						// fall right
 						newMap[y-1][x+1] = '*';
 						newMap[y][x] = ' ';
-						if ('R' == this.get(x+1, y-2)) this._crushed();
-					} else if ((below == '*') && ' ' == this.get(x-1, y-1) && ' ' == this.map[y][x-1]) {
+						if ('R' == map[y-2][x+1]) this._crushed();
+					} else if ((below == '*') && ' ' == map[y-1][x-y] && ' ' == map[y][x-1]) {
 						// fall left
 						newMap[y-1][x-1] = '*';
 						newMap[y][x] = ' ';
-						if ('R' == this.get(x-1, y-2)) this._crushed();
+						if ('R' == map[y-2][x-1]) this._crushed();
+					}
+				} else if (growBeard && 'W' == map[y][x]) {
+					for (i = -1; i <= 1; ++i) for (j = -1; j <= 1; ++j) {
+						if (' ' == map[y+i][x+j]) newMap[y+i][x+j] = 'W';
 					}
 				}
 			}
 		}
 		this.map = newMap;
 		
-		if (this.robot.y < this.water_level) {
+		if (this.robot.y < this.water_level + 2) {
 			this.moves_below_water++;
 			if (this.moves_below_water > this.water.proof) this._drown();
 		} else {
@@ -357,7 +396,7 @@ var Mine = function() {
 	};
 	
 	Mine.prototype.toString = function() {
-		return this.map.map(function(l) { return l.join(''); }).reverse().join("\n");
+		return this.map.slice(2,-1).map(function(l) { return l.slice(1,-1).join(''); }).reverse().join("\n");
 	};
 	
 	Mine.prototype.metaText = function() {
@@ -372,6 +411,8 @@ var Mine = function() {
 		for (k = 0; k < keys.length; ++k) {
 			lines.push("Trampoline " + keys[k] + " targets " + this.trampoline.sources[keys[k]].target);
 		}
+		if (this.beard.growth != 25) lines.push("Growth " + this.beard.growth);
+		if (this.beard.razors != 0) lines.push("Razors " + this.beard.razors);
 		
 		keys = [];
 		for (k in this.meta) {
diff --git a/js/mine.min.js b/js/mine.min.js
index 48dcf2a..80689e5 100644
--- a/js/mine.min.js
+++ b/js/mine.min.js
@@ -1 +1 @@
-var Mine=function(){var b=0,f=1,a=2,d=3;function e(g,h){return new Array(h+1).join(g)}function c(g){this.parse(g)}c.ALIVE=b;c.LOST=f;c.ABORTED=a;c.WON=d;c.prototype.parse=function(g){var o,k,h,n,j,m,p;this.orig_map=g;o=g.split(/\r\n?|\r?\n/);h=0;n=o.length;for(k=0;k="A"&&p[m]<="I"){if(this.trampoline.sources[p[m]]){throw"Can have only one trampoline "+p[m]}this.trampoline.sources[p[m]]={x:m,y:k,target:false};this.trampoline.fromSources}else{if(p[m]>="1"&&p[m]<="9"){if(this.trampoline.targets[p[m]]){throw"Can have only one trampoline target "+p[m]}this.trampoline.targets[p[m]]={x:m,y:k,sources:[]}}else{throw"Invalid character in map: '"+p[m]+"'"}}break}}}if(this.robot===false){throw"Need a robot"}this.meta={};for(k=0;k"I"){throw"Invalid trampoline source '"+l[1]+"'"}if(l[3].length!=1||l[3]<"1"||l[3]>"9"){throw"Invalid trampoline target '"+l[3]+"'"}if(!this.trampoline.sources[l[1]]){throw"Trampoline "+l[1]+" not defined"}if(!this.trampoline.targets[l[3]]){throw"Trampoline target "+l[3]+" not defined"}if(this.trampoline.sources[l[1]].target){throw"Trampoline "+l[1]+" already has a target"}this.trampoline.sources[l[1]].target=l[3];this.trampoline.targets[l[3]].sources.push(l[1]);break;default:this.meta[l[0]]=l.splice(1).join(" ");break}}for(k in this.trampoline.sources){if(this.trampoline.sources.hasOwnProperty(k)){if(!this.trampoline.sources[k].target){throw"Trampoline "+k+" has no target"}}}for(k in this.trampoline.targets){if(this.trampoline.targets.hasOwnProperty(k)){if(0==this.trampoline.targets[k].sources.length){throw"Trampoline target "+k+" has no sources"}}}this.water_level=this.water.level;this.state=b};c.prototype.get=function(g,h){if(g<0||h<0||g>=this.width||h>=this.height){return"#"}return this.map[h][g]};c.prototype.validMove=function(g){if(this.state!=b){return false}var i,h;g=g.toUpperCase();switch(g){case"L":case"R":i=(g=="L"?-1:1);if(this.robot.x+i<0){return false}if(this.robot.x+i>=this.width){return false}h=this.map[this.robot.y][this.robot.x+i];switch(h){case"#":return false;case" ":case".":case"\\":return true;case"L":return false;case"O":return true;case"*":if(this.robot.x+2*i<0){return false}if(this.robot.x+2*i>=this.width){return false}if(" "==this.map[this.robot.y][this.robot.x+2*i]){return true}default:if(this.trampoline.sources.hasOwnProperty(h)){return true}break}break;case"U":case"D":i=(g=="D"?-1:1);if(this.robot.y+i<0){return false}if(this.robot.y+i>=this.height){return false}h=this.map[this.robot.y+i][this.robot.x];switch(h){case"#":return false;case" ":case".":case"\\":return true;case"L":return false;case"O":return true;case"*":return false;default:if(this.trampoline.sources.hasOwnProperty(h)){return true}break}break;case"W":case"A":return true}return false};c.prototype.move=function(i){if(this.state!=b){return false}var h,j,p,o;i=i.toUpperCase();if(this.validMove(i)){switch(i.toUpperCase()){case"L":case"R":h=(i=="L"?-1:1);this.map[this.robot.y][this.robot.x]=" ";j=this.map[this.robot.y][this.robot.x+h];switch(j){case"*":this.map[this.robot.y][this.robot.x+2*h]="*";break;case"\\":this.lambdas--;this.found_lambdas++;break;case"O":this._foundLift();break;default:if(this.trampoline.sources.hasOwnProperty(j)){p=this.trampoline.sources[j];o=this.trampoline.targets[p.target];for(h=0;hthis.water.proof){this._drown()}}else{this.moves_below_water=0}if(this.water.flooding>0&&0==(this.moves%this.water.flooding)){++this.water_level}switch(this.state){case f:this.score=25*this.found_lambdas-this.moves;break;case d:this.score=75*this.found_lambdas-this.moves;break;case b:case a:this.score=50*this.found_lambdas-this.moves;break}};c.prototype._drown=function(){if(this.state="A"&&p[m]<="I"){if(this.trampoline.sources[p[m]]){throw"Can have only one trampoline "+p[m]}this.trampoline.sources[p[m]]={x:m,y:k,target:false};this.trampoline.fromSources}else{if(p[m]>="1"&&p[m]<="9"){if(this.trampoline.targets[p[m]]){throw"Can have only one trampoline target "+p[m]}this.trampoline.targets[p[m]]={x:m,y:k,sources:[]}}else{throw"Invalid character in map: '"+p[m]+"'"+m}}break}}}if(this.robot===false){throw"Need a robot"}this.meta={};for(k=0;k"I"){throw"Invalid trampoline source '"+l[1]+"'"}if(l[3].length!=1||l[3]<"1"||l[3]>"9"){throw"Invalid trampoline target '"+l[3]+"'"}if(!this.trampoline.sources[l[1]]){throw"Trampoline "+l[1]+" not defined"}if(!this.trampoline.targets[l[3]]){throw"Trampoline target "+l[3]+" not defined"}if(this.trampoline.sources[l[1]].target){throw"Trampoline "+l[1]+" already has a target"}this.trampoline.sources[l[1]].target=l[3];this.trampoline.targets[l[3]].sources.push(l[1]);break;case"Growth":this.beard.growth=parseInt(l[1]);break;case"Razors":this.beard.razors=parseInt(l[1]);break;default:this.meta[l[0]]=l.splice(1).join(" ");break}}for(k in this.trampoline.sources){if(this.trampoline.sources.hasOwnProperty(k)){if(!this.trampoline.sources[k].target){throw"Trampoline "+k+" has no target"}}}for(k in this.trampoline.targets){if(this.trampoline.targets.hasOwnProperty(k)){if(0==this.trampoline.targets[k].sources.length){throw"Trampoline target "+k+" has no sources"}}}this.water_level=this.water.level;this.razors=this.beard.razors;this.beard_growth=this.beard.growth;this.state=b};c.prototype.get=function(g,h){if(g<0||h<0||g>=this.width||h>=this.height){return"#"}return this.map[h][g]};c.prototype.validMove=function(g){if(this.state!=b){return false}var i,h;g=g.toUpperCase();switch(g){case"L":case"R":i=(g=="L"?-1:1);h=this.map[this.robot.y][this.robot.x+i];switch(h){case"#":return false;case" ":case".":case"!":case"\\":return true;case"L":return false;case"O":return true;case"*":if(" "==this.map[this.robot.y][this.robot.x+2*i]){return true}default:if(this.trampoline.sources.hasOwnProperty(h)){return true}break}break;case"U":case"D":i=(g=="D"?-1:1);h=this.map[this.robot.y+i][this.robot.x];switch(h){case"#":return false;case" ":case".":case"!":case"\\":return true;case"L":return false;case"O":return true;case"*":return false;default:if(this.trampoline.sources.hasOwnProperty(h)){return true}break}break;case"W":case"S":return this.razors>0;case"A":return true}return false};c.prototype.move=function(l){if(this.state!=b){return false}var k,p,z,w;var g,r,q,o,m,u,h=this.map,v;l=l.toUpperCase();if(this.validMove(l)){switch(l.toUpperCase()){case"L":case"R":k=(l=="L"?-1:1);h[this.robot.y][this.robot.x]=" ";p=h[this.robot.y][this.robot.x+k];switch(p){case"*":h[this.robot.y][this.robot.x+2*k]="*";break;case"\\":this.lambdas--;this.found_lambdas++;break;case"!":this.razors++;break;case"O":this._foundLift();break;default:if(this.trampoline.sources.hasOwnProperty(p)){z=this.trampoline.sources[p];w=this.trampoline.targets[z.target];for(k=0;k--this.beard_growth){this.beard_growth=this.beard.growth;v=true}for(q=0;qthis.water.proof){this._drown()}}else{this.moves_below_water=0}if(this.water.flooding>0&&0==(this.moves%this.water.flooding)){++this.water_level}switch(this.state){case f:this.score=25*this.found_lambdas-this.moves;break;case d:this.score=75*this.found_lambdas-this.moves;break;case b:case a:this.score=50*this.found_lambdas-this.moves;break}};c.prototype._drown=function(){if(this.state