jargon

Roe2Js :: "index.html"

Jul 2nd, 2024
43
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <!DOCTYPE html>
  2. <html lang="en-us">
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6.     <title>Keal's Roe2Js Test @ Test.Puzzlum.Org.2.Test</title>
  7.     <link rel="icon" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAABhWlDQ1BJQ0MgcHJvZmlsZQAAKJF9kT1Iw1AUhU/TSkUqDhYRcchQO1kQFXGUKhbBQmkrtOpg8tI/aNKQpLg4Cq4FB38Wqw4uzro6uAqC4A+Io5OToouUeF9SaBHjhcf7OO+ew3v3AUKzylQzMAGommWkE3Exl18Vg6/wYQgBROGXmKknM4tZeNbXPXVT3cV4lnffn9WvFEwG+ETiOaYbFvEG8cympXPeJw6zsqQQnxOPG3RB4keuyy6/cS45LPDMsJFNzxOHicVSF8tdzMqGSjxNHFFUjfKFnMsK5y3OarXO2vfkLwwVtJUM12mNIoElJJGCCBl1VFCFhRjtGikm0nQe9/CPOP4UuWRyVcDIsYAaVEiOH/wPfs/WLE5NukmhONDzYtsfY0BwF2g1bPv72LZbJ4D/GbjSOv5aE5j9JL3R0SJHwMA2cHHd0eQ94HIHGH7SJUNyJD8toVgE3s/om/LA4C3Qt+bOrX2O0wcgS7NavgEODoFoibLXPd7d2z23f3va8/sBOVpykGwdVzgAAAAGYktHRABiAGIAYvJegGgAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfmARYEJyCieUm9AAAAGXRFWHRDb21tZW50AENyZWF0ZWQgd2l0aCBHSU1QV4EOFwAACTFJREFUeNrtnV9sleUdx7+Hc9qecvq/p7giUIQpCjEZ1C1ZxjAwh5HswsV4ZUxkd1u2FRNijEYlQoxL/LM6sl0smxcu3hgluixcqK2KIgmDumg7FqCAAUop7WlpD+ectqfdjbv4fmee17OW0q7fz90357zved+3vz6/P8/vfZ7Yznv/Mg3zjTn8yUukhzFMescPnl1Q97PEf9LFjQ3ABmAWM4lSD/jzH9bN6Ad/9vN/LagHdKrrLdJbct8j3YEO0p1d7aS3bmzzCGBsAMYGYBZkDDBTnx91vvkeExTzWdLLi99iDda9+QGPAMYGYGwAZkHGAFE+f3yySPr8UI70xUwueHy6uoL079u/TfoXbafm1QNKF+tJ34SbSLdiE+mB4iGPAMYGYGwAZiEQm+49GuwHKEywzz9+NkP60nCe9NXcOOfRU3y+ZIJtLl3DMcHmdU2kf7nr9Jw+kJFjH5L+fuYODpqKMdKHcZh0d/wEP7/6JOktrW0eAYwNwNgAzLysAyjnrnAt/MLQtWDePzTGMcB4kWOIVAX/ZLYwSbpR6gQz5XTXAdKT+bFgnv+j/A+Dnx/Bp6Rvxs2kq4pVpD/KfMIxw8fcUzgW5+eZSPLx2zbu8ghgbADGBmBuSAxwQWr9mSz7+EsjXAe4KDFCTuoIDalyLkTI7/X2j4V9+mfi03Nhn749fxfpuOTxdagjXYNq0pXgPD6FVLAOUEAhWDdYn23h+0Uv31/2JOm3Pn6MzxfnGKmqspFjhu/s8ghgbADGBmBmJQaYkDw+P846m58gfWWUY4KBq+wTlyxjH5uu5vNpv8HESa7Nb79yl/hYtuFlWCZ3wFMdnejk30eaYx5cIL0cy0kfx3G+XnBMtAZrgj5ez38LbiHdX+xnnb1EugIcA1RmebLlw2P8XsLdEXMPHgHsAowNwCxaYro+gPYEdp0dIn3k5CDpMwOch58f5DrAWIFjhKYazqtXpzmv7vkT++jbetmnri6s5rwZ3EO4ARu4TgH2oW/jbfax6JeIYVrqFJzH16KW9B3gfoFJTAb1ERwJ/p6i6w+0oEVijrWk/x7nGAX1fL0/bn3MI4CxARgbgPnaGED53cvsYw7+4yLpsxIDDIwWJK/nPLU6Wcbne+mPpLdl7iY9JXUH9fE55MSi2abfx/tS+ODSxyA4pmlE46x+fhrc03gZl4N/kPVYH6wbaJ3hPM4Hz38lzj2c2m/gEcAuwNgAzKIlci7gV4+yD2t/eY3UCdjH/PPC1aCFZfo45Bi9zMevnuY8V+fr1cepj40jTvpzfE46KfP7t+P2oE9vRjPpPvSRPgF+D6ABDcEYZSM2Bn38KYTfjdS5CK1TaAxxvMjfv5zt8whgbADGBmC+UQygtD3aO6sXUJjmusEwRkhr7V3zXu3R+1T69vPg/oQMOObQWrzODaheK7X3enAPos7vq4+/CK6j6HsF2lOon/egJ3j93egOPs9pjwDGBmBsAOZ/jAFmm3yKbfBv+YOkf1K8L5jnqo/WmGGTrOGjdQOtrSvaT1Dq59ovoD2CmtePiM/WfgDtedQYQfsNprgsgtpks0cAYwMwNgAzL2KA+zbzHjuHjr1C+q8Zjgm+W9wkPvV0sC6gefOX+DKYR2uer7V2zfMVjUnUZ2vMod+vRGXw/OrzNaYYi/Pcw7L620hvd0+gsQEYG4D5ysXN930DP5KYoJDhfoCxIufNSXl3TvNorbXXoIb0OvB7ETqXoP0EUT456l1BvT6tc2gMU5B3EdXn19avCvp8jwDGBmBsAGa+1AGi2NL6a9Idn/2WbyDHeXq+yD5+Mi8hDr9m8F95t/pg5QN8EKwraA+gzhVorV+ZjPN7FJNJ/hMV4xyDNFZyDOI1gowNwNgAzP9LHWCm6Dp7V6Uvvhy8bqHuCaToewlaV4haXyBy/YEUr0n0082/8QhgbADGBmAWZR1gpoxkuQ9/7969pMvKeL2C8XGutRcK7ONHRsJ5fEMDvxu4dOlS0hMTvGZSUdZh3LNnj0cAYwMwNgDjGOA6UFfH6w1UVVUFfXxvL8/f79+/P3j+3bt3k165ciXpbJb3YBodHfUIYGwAxgZgHAPMAel0OpjnV1fzfgaxWKyk809N8Xx+LpcLxhz5fN4jgLEBGBuAcQwwB1y7Jnv1JhLBPD2ZTJZ0/qamJtI6t6Axgs4FeAQwNgBjAzCOAa4PFRX87mAmkwnm/WvX8noB+/btI11eXh48fnqaewC1P8B1AGMDMDYA4xhgbtD5fu3R036BJUv4f2TFihWkh4eHg3UG7TnU7+vvewQwNgBjAzCOAa4PtbW1wTqAzgVE9Qzq91OpVFAPDvKeRJ4LMDYAYwMwjgFuTB2gvp73/Onv7w9qzdu1X0B7DoeGhuZV3u8RwNgAjA3AfEUsgQRNWOueOxWy9q6uiRO17p2u36/HR52/CpyH65o+47p2LsZm9Xi9Pv28KAsP6t7F+vul3r8+PyWL7Iyu1yOAXYCxAZjFWwdQn/8qXiW9FNzDdgInSLejPeiT2tBG+g28QfpBPEj6NbxG+mE8TLoVraSvgeffn8ATMzr+WfAeRg/gAdIv4AXSg+Dafh24n2A3eL2AN/Fm8P71+TyNp7muAK4rvI7XSd+JO0m/g3dIn8EZjwDGBmBsAAYAEpo3psG17AM4QLoPvNbu/bifdCc6Sev6+7qPnu6tq3nrK+A9g7ZiK+lt2Bb0kRqj6PfvwT3BvHsDNgTzbEU/1+MP4VBJz0ev5yB4H8WH8BDpd/FuMAZ7Bs94BDA2AGMDMMDX9ANUozro47vQFfSxE+D5bl0fPwpdP199YDOaST+P54MxwCqsCh7/HJ4LXv+NRusU53CO9A7sKOn+NUbxCGAXYGwAxjHAf9D97PeC19fvRjdp3ftW5xZ0X70WtAR9vPqsndhJ+j28F6wbNIDX638cj5PuQAdpnbsoQ1nw+m7FraS1n0CJun+da/EIYGwAxgZg5ioG0B60ozhK+gt8QVrnvxXtEdQ6wZN4MuiDde9d9emP4BHSOv+t/QQ6t1Hq8Xp9T+Gp4PN6ES/O6P51X8Ie9Mzoc43Z9O/tEcAuwNgAzKIlFkecivXaxx7VVx5daEgE6wSK+sQb/V5A1PGlvidR6v1HvTdQ6ud6fx4B7AKMDcAsWv4N2zMl/7GYSjUAAAAASUVORK5CYII" type="image/png">
  8.     <link rel="shortcut icon" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAABhWlDQ1BJQ0MgcHJvZmlsZQAAKJF9kT1Iw1AUhU/TSkUqDhYRcchQO1kQFXGUKhbBQmkrtOpg8tI/aNKQpLg4Cq4FB38Wqw4uzro6uAqC4A+Io5OToouUeF9SaBHjhcf7OO+ew3v3AUKzylQzMAGommWkE3Exl18Vg6/wYQgBROGXmKknM4tZeNbXPXVT3cV4lnffn9WvFEwG+ETiOaYbFvEG8cympXPeJw6zsqQQnxOPG3RB4keuyy6/cS45LPDMsJFNzxOHicVSF8tdzMqGSjxNHFFUjfKFnMsK5y3OarXO2vfkLwwVtJUM12mNIoElJJGCCBl1VFCFhRjtGikm0nQe9/CPOP4UuWRyVcDIsYAaVEiOH/wPfs/WLE5NukmhONDzYtsfY0BwF2g1bPv72LZbJ4D/GbjSOv5aE5j9JL3R0SJHwMA2cHHd0eQ94HIHGH7SJUNyJD8toVgE3s/om/LA4C3Qt+bOrX2O0wcgS7NavgEODoFoibLXPd7d2z23f3va8/sBOVpykGwdVzgAAAAGYktHRABiAGIAYvJegGgAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfmARYEJyCieUm9AAAAGXRFWHRDb21tZW50AENyZWF0ZWQgd2l0aCBHSU1QV4EOFwAACTFJREFUeNrtnV9sleUdx7+Hc9qecvq/p7giUIQpCjEZ1C1ZxjAwh5HswsV4ZUxkd1u2FRNijEYlQoxL/LM6sl0smxcu3hgluixcqK2KIgmDumg7FqCAAUop7WlpD+ectqfdjbv4fmee17OW0q7fz90357zved+3vz6/P8/vfZ7Yznv/Mg3zjTn8yUukhzFMescPnl1Q97PEf9LFjQ3ABmAWM4lSD/jzH9bN6Ad/9vN/LagHdKrrLdJbct8j3YEO0p1d7aS3bmzzCGBsAMYGYBZkDDBTnx91vvkeExTzWdLLi99iDda9+QGPAMYGYGwAZkHGAFE+f3yySPr8UI70xUwueHy6uoL079u/TfoXbafm1QNKF+tJ34SbSLdiE+mB4iGPAMYGYGwAZiEQm+49GuwHKEywzz9+NkP60nCe9NXcOOfRU3y+ZIJtLl3DMcHmdU2kf7nr9Jw+kJFjH5L+fuYODpqKMdKHcZh0d/wEP7/6JOktrW0eAYwNwNgAzLysAyjnrnAt/MLQtWDePzTGMcB4kWOIVAX/ZLYwSbpR6gQz5XTXAdKT+bFgnv+j/A+Dnx/Bp6Rvxs2kq4pVpD/KfMIxw8fcUzgW5+eZSPLx2zbu8ghgbADGBmBuSAxwQWr9mSz7+EsjXAe4KDFCTuoIDalyLkTI7/X2j4V9+mfi03Nhn749fxfpuOTxdagjXYNq0pXgPD6FVLAOUEAhWDdYn23h+0Uv31/2JOm3Pn6MzxfnGKmqspFjhu/s8ghgbADGBmBmJQaYkDw+P846m58gfWWUY4KBq+wTlyxjH5uu5vNpv8HESa7Nb79yl/hYtuFlWCZ3wFMdnejk30eaYx5cIL0cy0kfx3G+XnBMtAZrgj5ez38LbiHdX+xnnb1EugIcA1RmebLlw2P8XsLdEXMPHgHsAowNwCxaYro+gPYEdp0dIn3k5CDpMwOch58f5DrAWIFjhKYazqtXpzmv7vkT++jbetmnri6s5rwZ3EO4ARu4TgH2oW/jbfax6JeIYVrqFJzH16KW9B3gfoFJTAb1ERwJ/p6i6w+0oEVijrWk/x7nGAX1fL0/bn3MI4CxARgbgPnaGED53cvsYw7+4yLpsxIDDIwWJK/nPLU6Wcbne+mPpLdl7iY9JXUH9fE55MSi2abfx/tS+ODSxyA4pmlE46x+fhrc03gZl4N/kPVYH6wbaJ3hPM4Hz38lzj2c2m/gEcAuwNgAzKIlci7gV4+yD2t/eY3UCdjH/PPC1aCFZfo45Bi9zMevnuY8V+fr1cepj40jTvpzfE46KfP7t+P2oE9vRjPpPvSRPgF+D6ABDcEYZSM2Bn38KYTfjdS5CK1TaAxxvMjfv5zt8whgbADGBmC+UQygtD3aO6sXUJjmusEwRkhr7V3zXu3R+1T69vPg/oQMOObQWrzODaheK7X3enAPos7vq4+/CK6j6HsF2lOon/egJ3j93egOPs9pjwDGBmBsAOZ/jAFmm3yKbfBv+YOkf1K8L5jnqo/WmGGTrOGjdQOtrSvaT1Dq59ovoD2CmtePiM/WfgDtedQYQfsNprgsgtpks0cAYwMwNgAzL2KA+zbzHjuHjr1C+q8Zjgm+W9wkPvV0sC6gefOX+DKYR2uer7V2zfMVjUnUZ2vMod+vRGXw/OrzNaYYi/Pcw7L620hvd0+gsQEYG4D5ysXN930DP5KYoJDhfoCxIufNSXl3TvNorbXXoIb0OvB7ETqXoP0EUT456l1BvT6tc2gMU5B3EdXn19avCvp8jwDGBmBsAGa+1AGi2NL6a9Idn/2WbyDHeXq+yD5+Mi8hDr9m8F95t/pg5QN8EKwraA+gzhVorV+ZjPN7FJNJ/hMV4xyDNFZyDOI1gowNwNgAzP9LHWCm6Dp7V6Uvvhy8bqHuCaToewlaV4haXyBy/YEUr0n0082/8QhgbADGBmAWZR1gpoxkuQ9/7969pMvKeL2C8XGutRcK7ONHRsJ5fEMDvxu4dOlS0hMTvGZSUdZh3LNnj0cAYwMwNgDjGOA6UFfH6w1UVVUFfXxvL8/f79+/P3j+3bt3k165ciXpbJb3YBodHfUIYGwAxgZgHAPMAel0OpjnV1fzfgaxWKyk809N8Xx+LpcLxhz5fN4jgLEBGBuAcQwwB1y7Jnv1JhLBPD2ZTJZ0/qamJtI6t6Axgs4FeAQwNgBjAzCOAa4PFRX87mAmkwnm/WvX8noB+/btI11eXh48fnqaewC1P8B1AGMDMDYA4xhgbtD5fu3R036BJUv4f2TFihWkh4eHg3UG7TnU7+vvewQwNgBjAzCOAa4PtbW1wTqAzgVE9Qzq91OpVFAPDvKeRJ4LMDYAYwMwjgFuTB2gvp73/Onv7w9qzdu1X0B7DoeGhuZV3u8RwNgAjA3AfEUsgQRNWOueOxWy9q6uiRO17p2u36/HR52/CpyH65o+47p2LsZm9Xi9Pv28KAsP6t7F+vul3r8+PyWL7Iyu1yOAXYCxAZjFWwdQn/8qXiW9FNzDdgInSLejPeiT2tBG+g28QfpBPEj6NbxG+mE8TLoVraSvgeffn8ATMzr+WfAeRg/gAdIv4AXSg+Dafh24n2A3eL2AN/Fm8P71+TyNp7muAK4rvI7XSd+JO0m/g3dIn8EZjwDGBmBsAAYAEpo3psG17AM4QLoPvNbu/bifdCc6Sev6+7qPnu6tq3nrK+A9g7ZiK+lt2Bb0kRqj6PfvwT3BvHsDNgTzbEU/1+MP4VBJz0ev5yB4H8WH8BDpd/FuMAZ7Bs94BDA2AGMDMMDX9ANUozro47vQFfSxE+D5bl0fPwpdP199YDOaST+P54MxwCqsCh7/HJ4LXv+NRusU53CO9A7sKOn+NUbxCGAXYGwAxjHAf9D97PeC19fvRjdp3ftW5xZ0X70WtAR9vPqsndhJ+j28F6wbNIDX638cj5PuQAdpnbsoQ1nw+m7FraS1n0CJun+da/EIYGwAxgZg5ioG0B60ozhK+gt8QVrnvxXtEdQ6wZN4MuiDde9d9emP4BHSOv+t/QQ6t1Hq8Xp9T+Gp4PN6ES/O6P51X8Ie9Mzoc43Z9O/tEcAuwNgAzKIlFkecivXaxx7VVx5daEgE6wSK+sQb/V5A1PGlvidR6v1HvTdQ6ud6fx4B7AKMDcAsWv4N2zMl/7GYSjUAAAAASUVORK5CYII" type="image/png">
  9.     <style>
  10.  
  11.  
  12.  
  13. :root {
  14.      --host: "http://test.puzzlum.org.2.test";
  15. }
  16.  
  17. canvas {
  18.     image-rendering: smooth;
  19.     position: absolute;
  20.     top: 0px;
  21.     left: 0px;
  22.     width: 320px;
  23.     height: 240px;
  24.     margin: 0px;
  25.     background-color: #f0f0f0;
  26.     border: none;
  27.     z-index: -1;   
  28. }
  29. .frontbuffer {
  30.     z-index: -1;
  31. }
  32.  
  33. .backbuffer {
  34.     z-index: -2;
  35.     visibility: hidden;
  36. }
  37.  
  38.  
  39. :root {
  40.     --ega-black: #000000;
  41.     --ega-blue: #0000AA;
  42.     --ega-green: #00AA00;
  43.     --ega-cyan: #00AAAA;
  44.     --ega-red: #AA0000;
  45.     --ega-magenta: #AA00AA;
  46.     --ega-brown: #AA5500;
  47.     --ega-light-gray: #AAAAAA;
  48.     --ega-dark-gray: #555555;
  49.     --ega-light-blue: #5555FF;
  50.     --ega-light-green: #55FF55;
  51.     --ega-light-cyan: #55FFFF;
  52.     --ega-light-red: #FF5555;
  53.     --ega-light-magenta: #FF55FF;
  54.     --ega-yellow: #FFFF55;
  55.     --ega-white: #FFFFFF;
  56. }
  57.  
  58. :root {
  59.     --ega-0: #000000;
  60.     --ega-1: #0000AA;
  61.     --ega-2: #00AA00;
  62.     --ega-3: #00AAAA;
  63.     --ega-4: #AA0000;
  64.     --ega-5: #AA00AA;
  65.     --ega-6: #AA5500;
  66.     --ega-7: #AAAAAA;
  67.     --ega-8: #555555;
  68.     --ega-9: #5555FF;
  69.     --ega-10: #55FF55;
  70.     --ega-11: #55FFFF;
  71.     --ega-12: #FF5555;
  72.     --ega-13: #FF55FF;
  73.     --ega-14: #FFFF55;
  74.     --ega-15: #FFFFFF;
  75. }
  76. :root {
  77.     --ega-a: #55FF55;
  78.     --ega-b: #55FFFF;
  79.     --ega-c: #FF5555;
  80.     --ega-d: #FF55FF;
  81.     --ega-e: #FFFF55;
  82.     --ega-f: #FFFFFF;
  83. }
  84.  
  85.  
  86. :root {
  87.     --bull-regular: '\25CE';
  88.     /*--bull-visited: '\25B2';*/
  89.     --bull-visited: '\25C9';
  90.     --bull-focus: '\25C9';
  91.     --bull-active: '\25C9';
  92.     --bull-hover: '\25C9';
  93. }
  94.  
  95. :root {
  96.     --link-regular: var(--ega-11);
  97.     --link-visited: var(--ega-14);
  98.     --link-focus: var(--ega-15);
  99.     --link-active: var(--ega-15);
  100.     --link-hover: var(--ega-15);
  101. }
  102.  
  103. /* Regular links */
  104. a,
  105. a::before {
  106.     text-decoration: none;
  107.     content: var(--bull-regular);
  108.     color: var(--link-regular);
  109. }
  110.  
  111. /* Currently hovered links */
  112. a:hover,
  113. a:hover::before {
  114.     content: var(--bull-hover);
  115.     color: var(--link-hover);
  116. }
  117.  
  118. /* Currently active links */
  119. a:active,
  120. a:active::before {
  121.     content: var(--bull-active);
  122.     color: var(--link-active);
  123. }
  124.  
  125. /* Currently open/active links */
  126. a:focus,
  127. a:focus::before {
  128.     outline: none; /* Remove default focus outline */
  129.     content: var(--bull-focus);
  130.     color: var(--link-focus);
  131. }
  132.  
  133. /* Visited links */
  134. a:visited,
  135. a:visited::before {
  136.     content: var(--bull-visited);
  137.     color: var(--link-visited);
  138. }
  139.  
  140.  
  141. /* main.css */
  142.  
  143. body {
  144.     text-decoration: none;
  145.     background-color: var(--ega-1);
  146.     color: var(--ega-14);
  147.     -webkit-text-stroke-width: 1.3px;
  148.     -webkit-text-stroke-color: rgba(0, 0, 0, 0.1);
  149.     font-family: 'Courier New', Courier, monospace;
  150. }
  151.  
  152. span {
  153.     display: inline-block;
  154.     width: 6em;
  155.     text-align: center;
  156. }
  157.  
  158. suffix {
  159.     display: inline-block;
  160.     width: 1.3em;
  161.     text-align: center;
  162. }
  163.  
  164. table {
  165.     border-collapse: collapse;
  166.     width: auto;
  167.     height: auto;
  168. }
  169.  
  170. .outertable {
  171.     text-decoration: none;
  172.     border: none;
  173.     width: 100%;
  174.     text-align: center;
  175.     vertical-align: top;
  176.     padding: 0.0em;
  177. }
  178.  
  179. .lefttable {
  180.     background-color: rgba(255, 255, 255, 0.6);
  181.     text-decoration: none;
  182.     border: 1px solid black;
  183.     width: 12em;
  184.     text-align: center;
  185.     vertical-align: top;
  186.     padding: 0.3em;
  187. }
  188.  
  189. .righttable {
  190.     background-color: rgba(255, 255, 255, 0.6);
  191.     text-decoration: none;
  192.     border: 1px solid black;
  193.     width: 12em;
  194.     text-align: right;
  195.     vertical-align: top;
  196.     padding: 0.3em;
  197. }
  198.  
  199. td {
  200.     border: none;
  201.     padding: 0;
  202.     background-size: 100% 100%;
  203. }
  204.  
  205. body, html {
  206.     margin: 0;
  207.     padding: 0;
  208.     height: 100%;
  209.     overflow: hidden;
  210. }
  211.  
  212. .container {
  213.     display: flex;
  214.     height: 100%;
  215. }
  216.  
  217. .left, .right {
  218.     flex: 1;
  219.     overflow-y: auto;
  220. }
  221.  
  222. .scroll-region {
  223.     overflow: auto;
  224. }
  225.  
  226. .top-scroll {
  227.     height: 20vh;
  228.     overflow-y: auto;
  229. }
  230.  
  231. .bottom-scroll {
  232.     height: calc(100% - 20vh);
  233.     overflow-y: auto;
  234. }
  235.  
  236.  
  237. /* Background scrolling animation */
  238.  
  239. .background {
  240.     position: fixed;
  241.     top: 0;
  242.     left: 0;
  243.     width: 100%;
  244.     height: 100%;
  245.     background-image: url(/GFX/stonwall.png);
  246.     background-size: auto;
  247.     background-repeat: repeat;
  248.     animation: scrollBackground 7s linear infinite;
  249.     z-index: -1;
  250. }
  251.  
  252. @keyframes scrollBackground {
  253.     from {
  254.         background-position: 0 0;
  255.     }
  256.     to {
  257.         background-position: 24px 24px;
  258.     }
  259. }
  260.  
  261. /* Class to apply the panning animation to any element with the specific background */
  262. .panning-background {
  263.     background-image: url(/GFX/stonwall.png);
  264.     background-size: auto;
  265.     background-repeat: repeat;
  266.     animation: scrollBackground 7s linear infinite;
  267. }
  268.  
  269. </style>
  270. </head>
  271. <body>
  272. <div class="container">
  273.     <div class="left scrollable"></div>
  274.     <div class="right">
  275.         <div class="scrollable"></div>
  276.         <div class="scrollable"></div>
  277.     </div>
  278. </div>
  279. <script>
  280.  
  281. var special = {
  282.     "emptyCell": "________",
  283.     "stonwall": "stonwall",
  284.     "rockwall": "rockwall",
  285.     "sel1dash": "sel1dash",
  286.     "sel2dash": "sel2dash",
  287.     "sel1dots": "sel1dots",
  288.     "sel2dots": "sel2dots"
  289. }
  290.  
  291.  
  292.  
  293. var host = host || `http://test.puzzlum.org.2.test`;
  294. var map = map || `demo`;
  295.  
  296. // Map position    
  297. var cx = 0;
  298. var cy = 0;
  299.  
  300. var tileW = 24;
  301. var tileH = 24;
  302.  
  303. var gutterW = 8;
  304. var gutterH = 8;
  305.  
  306. var viewCursor = {
  307.    "hover": { "x": 0, "y": 0 },
  308.    "prev": { "x": 0, "y": 0 },
  309.    "click": { "x": 0, "y": 0 },
  310.    "dragging": false,
  311.    "dragStart": { "x": 0, "y": 0 },
  312.    "dragEnd": { "x": 0, "y": 0 }
  313. }
  314.  
  315.  
  316. var canvasCursor = {
  317.    "hover": { "x": 0, "y": 0 },
  318.    "prev": { "x": 0, "y": 0 },
  319.    "click": { "x": 0, "y": 0 },
  320.    "dragging": false,
  321.    "dragStart": { "x": 0, "y": 0 },
  322.    "dragEnd": { "x": 0, "y": 0 }
  323. }
  324.  
  325.  
  326. var layers = {
  327.     "terrain": 0,
  328.     "critter": 1,
  329.     "object": 2,
  330.     "ailment": 3,
  331.     "gui": 4
  332. }
  333.  
  334. var rawMap = [
  335.    [
  336.        [
  337.            "dirt____",
  338.            "________",
  339.            "wall____",
  340.            "________"
  341.        ],
  342.        [
  343.            "dirt____",
  344.            "________",
  345.            "wall____",
  346.            "________"
  347.        ],
  348.        [
  349.            "dirt____",
  350.            "________",
  351.            "wall____",
  352.            "________"
  353.        ],
  354.        [
  355.            "dirt____",
  356.            "________",
  357.            "wall____",
  358.            "________"
  359.        ],
  360.        [
  361.            "dirt____",
  362.            "________",
  363.            "wall____",
  364.            "________"
  365.        ],
  366.        [
  367.            "dirt____",
  368.            "________",
  369.            "wall____",
  370.            "________"
  371.        ],
  372.        [
  373.            "dirt____",
  374.            "________",
  375.            "wall____",
  376.            "________"
  377.        ],
  378.        [
  379.            "dirt____",
  380.            "________",
  381.            "wall____",
  382.            "________"
  383.        ],
  384.        [
  385.            "dirt____",
  386.            "________",
  387.            "wall____",
  388.            "________"
  389.        ],
  390.        [
  391.            "dirt____",
  392.            "________",
  393.            "wall____",
  394.            "________"
  395.        ],
  396.        [
  397.            "dirt____",
  398.            "________",
  399.            "wall____",
  400.            "________"
  401.        ],
  402.        [
  403.            "dirt____",
  404.            "________",
  405.            "wall____",
  406.            "________"
  407.        ],
  408.        [
  409.            "dirt____",
  410.            "________",
  411.            "wall____",
  412.            "________"
  413.        ],
  414.        [
  415.            "dirt____",
  416.            "________",
  417.            "wall____",
  418.            "________"
  419.        ],
  420.        [
  421.            "dirt____",
  422.            "________",
  423.            "wall____",
  424.            "________"
  425.        ],
  426.        [
  427.            "dirt____",
  428.            "________",
  429.            "wall____",
  430.            "________"
  431.        ],
  432.        [
  433.            "dirt____",
  434.            "________",
  435.            "wall____",
  436.            "________"
  437.        ],
  438.        [
  439.            "dirt____",
  440.            "________",
  441.            "wall____",
  442.            "________"
  443.        ],
  444.        [
  445.            "dirt____",
  446.            "________",
  447.            "wall____",
  448.            "________"
  449.        ]
  450.    ],
  451.    [
  452.        [
  453.            "dirt____",
  454.            "________",
  455.            "wall____",
  456.            "________"
  457.        ],
  458.        [
  459.            "dirt____",
  460.            "________",
  461.            "________",
  462.            "________"
  463.        ],
  464.        [
  465.            "dirt____",
  466.            "spdr____",
  467.            "________",
  468.            "________"
  469.        ],
  470.        [
  471.            "dirt____",
  472.            "________",
  473.            "wall____",
  474.            "________"
  475.        ],
  476.        [
  477.            "dirt____",
  478.            "spdr____",
  479.            "________",
  480.            "________"
  481.        ],
  482.        [
  483.            "dirt____",
  484.            "________",
  485.            "chst____",
  486.            "________"
  487.        ],
  488.        [
  489.            "dirt____",
  490.            "________",
  491.            "wall____",
  492.            "________"
  493.        ],
  494.        [
  495.            "dirt____",
  496.            "________",
  497.            "________",
  498.            "________"
  499.        ],
  500.        [
  501.            "dirt____",
  502.            "emgd____",
  503.            "________",
  504.            "________"
  505.        ],
  506.        [
  507.            "dirt____",
  508.            "________",
  509.            "________",
  510.            "________"
  511.        ],
  512.        [
  513.            "dirt____",
  514.            "________",
  515.            "wall____",
  516.            "________"
  517.        ],
  518.        [
  519.            "dirt____",
  520.            "________",
  521.            "________",
  522.            "________"
  523.        ],
  524.        [
  525.            "dirt____",
  526.            "________",
  527.            "________",
  528.            "________"
  529.        ],
  530.        [
  531.            "dirt____",
  532.            "________",
  533.            "wall____",
  534.            "________"
  535.        ],
  536.        [
  537.            "dirt____",
  538.            "________",
  539.            "________",
  540.            "________"
  541.        ],
  542.        [
  543.            "dirt____",
  544.            "pndx____",
  545.            "________",
  546.            "________"
  547.        ],
  548.        [
  549.            "dirt____",
  550.            "________",
  551.            "________",
  552.            "________"
  553.        ],
  554.        [
  555.            "dirt____",
  556.            "________",
  557.            "chst____",
  558.            "________"
  559.        ],
  560.        [
  561.            "dirt____",
  562.            "________",
  563.            "wall____",
  564.            "________"
  565.        ]
  566.    ],
  567.    [
  568.        [
  569.            "dirt____",
  570.            "________",
  571.            "wall____",
  572.            "________"
  573.        ],
  574.        [
  575.            "dirt____",
  576.            "________",
  577.            "________",
  578.            "________"
  579.        ],
  580.        [
  581.            "dirt____",
  582.            "________",
  583.            "________",
  584.            "________"
  585.        ],
  586.        [
  587.            "dirt____",
  588.            "________",
  589.            "wall____",
  590.            "________"
  591.        ],
  592.        [
  593.            "dirt____",
  594.            "________",
  595.            "________",
  596.            "________"
  597.        ],
  598.        [
  599.            "dirt____",
  600.            "________",
  601.            "________",
  602.            "________"
  603.        ],
  604.        [
  605.            "dirt____",
  606.            "________",
  607.            "________",
  608.            "________"
  609.        ],
  610.        [
  611.            "dirt____",
  612.            "________",
  613.            "________",
  614.            "________"
  615.        ],
  616.        [
  617.            "dirt____",
  618.            "________",
  619.            "________",
  620.            "________"
  621.        ],
  622.        [
  623.            "dirt____",
  624.            "________",
  625.            "________",
  626.            "________"
  627.        ],
  628.        [
  629.            "dirt____",
  630.            "________",
  631.            "________",
  632.            "________"
  633.        ],
  634.        [
  635.            "dirt____",
  636.            "________",
  637.            "________",
  638.            "________"
  639.        ],
  640.        [
  641.            "hole____",
  642.            "________",
  643.            "________",
  644.            "________"
  645.        ],
  646.        [
  647.            "hole____",
  648.            "________",
  649.            "________",
  650.            "________"
  651.        ],
  652.        [
  653.            "dirt____",
  654.            "________",
  655.            "________",
  656.            "________"
  657.        ],
  658.        [
  659.            "dirt____",
  660.            "________",
  661.            "________",
  662.            "________"
  663.        ],
  664.        [
  665.            "dirt____",
  666.            "shkt____",
  667.            "________",
  668.            "________"
  669.        ],
  670.        [
  671.            "dirt____",
  672.            "________",
  673.            "________",
  674.            "________"
  675.        ],
  676.        [
  677.            "dirt____",
  678.            "________",
  679.            "wall____",
  680.            "________"
  681.        ]
  682.    ],
  683.    [
  684.        [
  685.            "dirt____",
  686.            "________",
  687.            "wall____",
  688.            "________"
  689.        ],
  690.        [
  691.            "dirt____",
  692.            "________",
  693.            "________",
  694.            "________"
  695.        ],
  696.        [
  697.            "dirt____",
  698.            "________",
  699.            "________",
  700.            "________"
  701.        ],
  702.        [
  703.            "dirt____",
  704.            "________",
  705.            "wall____",
  706.            "________"
  707.        ],
  708.        [
  709.            "dirt____",
  710.            "________",
  711.            "________",
  712.            "________"
  713.        ],
  714.        [
  715.            "dirt____",
  716.            "spdr____",
  717.            "________",
  718.            "________"
  719.        ],
  720.        [
  721.            "dirt____",
  722.            "________",
  723.            "wall____",
  724.            "________"
  725.        ],
  726.        [
  727.            "dirt____",
  728.            "________",
  729.            "door____",
  730.            "________"
  731.        ],
  732.        [
  733.            "dirt____",
  734.            "________",
  735.            "wall____",
  736.            "________"
  737.        ],
  738.        [
  739.            "dirt____",
  740.            "________",
  741.            "wall____",
  742.            "________"
  743.        ],
  744.        [
  745.            "dirt____",
  746.            "________",
  747.            "wall____",
  748.            "________"
  749.        ],
  750.        [
  751.            "dirt____",
  752.            "________",
  753.            "________",
  754.            "________"
  755.        ],
  756.        [
  757.            "hole____",
  758.            "________",
  759.            "________",
  760.            "________"
  761.        ],
  762.        [
  763.            "hole____",
  764.            "________",
  765.            "________",
  766.            "________"
  767.        ],
  768.        [
  769.            "hole____",
  770.            "________",
  771.            "________",
  772.            "________"
  773.        ],
  774.        [
  775.            "dirt____",
  776.            "________",
  777.            "________",
  778.            "________"
  779.        ],
  780.        [
  781.            "dirt____",
  782.            "________",
  783.            "bldr____",
  784.            "________"
  785.        ],
  786.        [
  787.            "dirt____",
  788.            "________",
  789.            "________",
  790.            "________"
  791.        ],
  792.        [
  793.            "dirt____",
  794.            "________",
  795.            "wall____",
  796.            "________"
  797.        ]
  798.    ],
  799.    [
  800.        [
  801.            "dirt____",
  802.            "________",
  803.            "wall____",
  804.            "________"
  805.        ],
  806.        [
  807.            "dirt____",
  808.            "spdr____",
  809.            "________",
  810.            "________"
  811.        ],
  812.        [
  813.            "dirt____",
  814.            "________",
  815.            "________",
  816.            "________"
  817.        ],
  818.        [
  819.            "dirt____",
  820.            "________",
  821.            "wall____",
  822.            "________"
  823.        ],
  824.        [
  825.            "dirt____",
  826.            "________",
  827.            "________",
  828.            "________"
  829.        ],
  830.        [
  831.            "dirt____",
  832.            "________",
  833.            "________",
  834.            "________"
  835.        ],
  836.        [
  837.            "dirt____",
  838.            "________",
  839.            "wall____",
  840.            "________"
  841.        ],
  842.        [
  843.            "dirt____",
  844.            "________",
  845.            "bldr____",
  846.            "________"
  847.        ],
  848.        [
  849.            "dirt____",
  850.            "________",
  851.            "________",
  852.            "________"
  853.        ],
  854.        [
  855.            "dirt____",
  856.            "________",
  857.            "________",
  858.            "________"
  859.        ],
  860.        [
  861.            "dirt____",
  862.            "________",
  863.            "________",
  864.            "web_____"
  865.        ],
  866.        [
  867.            "dirt____",
  868.            "________",
  869.            "________",
  870.            "________"
  871.        ],
  872.        [
  873.            "hole____",
  874.            "shkt____",
  875.            "________",
  876.            "________"
  877.        ],
  878.        [
  879.            "stps____",
  880.            "________",
  881.            "________",
  882.            "________"
  883.        ],
  884.        [
  885.            "hole____",
  886.            "________",
  887.            "________",
  888.            "________"
  889.        ],
  890.        [
  891.            "dirt____",
  892.            "________",
  893.            "________",
  894.            "________"
  895.        ],
  896.        [
  897.            "dirt____",
  898.            "________",
  899.            "________",
  900.            "________"
  901.        ],
  902.        [
  903.            "dirt____",
  904.            "________",
  905.            "________",
  906.            "________"
  907.        ],
  908.        [
  909.            "dirt____",
  910.            "________",
  911.            "wall____",
  912.            "________"
  913.        ]
  914.    ],
  915.    [
  916.        [
  917.            "dirt____",
  918.            "________",
  919.            "door____",
  920.            "________"
  921.        ],
  922.        [
  923.            "dirt____",
  924.            "________",
  925.            "________",
  926.            "________"
  927.        ],
  928.        [
  929.            "dirt____",
  930.            "spdr____",
  931.            "________",
  932.            "________"
  933.        ],
  934.        [
  935.            "dirt____",
  936.            "________",
  937.            "wall____",
  938.            "________"
  939.        ],
  940.        [
  941.            "dirt____",
  942.            "spdr____",
  943.            "________",
  944.            "________"
  945.        ],
  946.        [
  947.            "dirt____",
  948.            "________",
  949.            "________",
  950.            "________"
  951.        ],
  952.        [
  953.            "dirt____",
  954.            "________",
  955.            "wall____",
  956.            "________"
  957.        ],
  958.        [
  959.            "hole____",
  960.            "________",
  961.            "________",
  962.            "________"
  963.        ],
  964.        [
  965.            "dirt____",
  966.            "________",
  967.            "bldr____",
  968.            "________"
  969.        ],
  970.        [
  971.            "dirt____",
  972.            "________",
  973.            "________",
  974.            "________"
  975.        ],
  976.        [
  977.            "dirt____",
  978.            "________",
  979.            "wall____",
  980.            "________"
  981.        ],
  982.        [
  983.            "dirt____",
  984.            "________",
  985.            "chst____",
  986.            "________"
  987.        ],
  988.        [
  989.            "dirt____",
  990.            "________",
  991.            "wall____",
  992.            "________"
  993.        ],
  994.        [
  995.            "dirt____",
  996.            "________",
  997.            "________",
  998.            "________"
  999.        ],
  1000.        [
  1001.            "dirt____",
  1002.            "________",
  1003.            "________",
  1004.            "________"
  1005.        ],
  1006.        [
  1007.            "dirt____",
  1008.            "________",
  1009.            "________",
  1010.            "________"
  1011.        ],
  1012.        [
  1013.            "dirt____",
  1014.            "________",
  1015.            "________",
  1016.            "________"
  1017.        ],
  1018.        [
  1019.            "dirt____",
  1020.            "________",
  1021.            "________",
  1022.            "________"
  1023.        ],
  1024.        [
  1025.            "dirt____",
  1026.            "________",
  1027.            "wall____",
  1028.            "________"
  1029.        ]
  1030.    ],
  1031.    [
  1032.        [
  1033.            "dirt____",
  1034.            "________",
  1035.            "wall____",
  1036.            "________"
  1037.        ],
  1038.        [
  1039.            "dirt____",
  1040.            "________",
  1041.            "________",
  1042.            "________"
  1043.        ],
  1044.        [
  1045.            "dirt____",
  1046.            "________",
  1047.            "________",
  1048.            "________"
  1049.        ],
  1050.        [
  1051.            "dirt____",
  1052.            "________",
  1053.            "wall____",
  1054.            "________"
  1055.        ],
  1056.        [
  1057.            "dirt____",
  1058.            "________",
  1059.            "________",
  1060.            "________"
  1061.        ],
  1062.        [
  1063.            "dirt____",
  1064.            "________",
  1065.            "wall____",
  1066.            "________"
  1067.        ],
  1068.        [
  1069.            "dirt____",
  1070.            "________",
  1071.            "wall____",
  1072.            "________"
  1073.        ],
  1074.        [
  1075.            "dirt____",
  1076.            "________",
  1077.            "________",
  1078.            "________"
  1079.        ],
  1080.        [
  1081.            "hole____",
  1082.            "________",
  1083.            "________",
  1084.            "________"
  1085.        ],
  1086.        [
  1087.            "dirt____",
  1088.            "________",
  1089.            "wall____",
  1090.            "________"
  1091.        ],
  1092.        [
  1093.            "dirt____",
  1094.            "________",
  1095.            "wall____",
  1096.            "________"
  1097.        ],
  1098.        [
  1099.            "dirt____",
  1100.            "________",
  1101.            "wall____",
  1102.            "________"
  1103.        ],
  1104.        [
  1105.            "dirt____",
  1106.            "________",
  1107.            "wall____",
  1108.            "________"
  1109.        ],
  1110.        [
  1111.            "dirt____",
  1112.            "________",
  1113.            "door____",
  1114.            "________"
  1115.        ],
  1116.        [
  1117.            "dirt____",
  1118.            "________",
  1119.            "wall____",
  1120.            "________"
  1121.        ],
  1122.        [
  1123.            "dirt____",
  1124.            "________",
  1125.            "wall____",
  1126.            "________"
  1127.        ],
  1128.        [
  1129.            "hole____",
  1130.            "________",
  1131.            "________",
  1132.            "________"
  1133.        ],
  1134.        [
  1135.            "dirt____",
  1136.            "________",
  1137.            "wall____",
  1138.            "________"
  1139.        ],
  1140.        [
  1141.            "dirt____",
  1142.            "________",
  1143.            "wall____",
  1144.            "________"
  1145.        ]
  1146.    ],
  1147.    [
  1148.        [
  1149.            "dirt____",
  1150.            "________",
  1151.            "wall____",
  1152.            "________"
  1153.        ],
  1154.        [
  1155.            "dirt____",
  1156.            "________",
  1157.            "________",
  1158.            "________"
  1159.        ],
  1160.        [
  1161.            "dirt____",
  1162.            "________",
  1163.            "________",
  1164.            "________"
  1165.        ],
  1166.        [
  1167.            "dirt____",
  1168.            "________",
  1169.            "door____",
  1170.            "________"
  1171.        ],
  1172.        [
  1173.            "dirt____",
  1174.            "________",
  1175.            "________",
  1176.            "________"
  1177.        ],
  1178.        [
  1179.            "dirt____",
  1180.            "________",
  1181.            "________",
  1182.            "________"
  1183.        ],
  1184.        [
  1185.            "dirt____",
  1186.            "________",
  1187.            "________",
  1188.            "________"
  1189.        ],
  1190.        [
  1191.            "dirt____",
  1192.            "spdr____",
  1193.            "________",
  1194.            "________"
  1195.        ],
  1196.        [
  1197.            "dirt____",
  1198.            "________",
  1199.            "________",
  1200.            "________"
  1201.        ],
  1202.        [
  1203.            "dirt____",
  1204.            "________",
  1205.            "________",
  1206.            "________"
  1207.        ],
  1208.        [
  1209.            "watr____",
  1210.            "________",
  1211.            "________",
  1212.            "________"
  1213.        ],
  1214.        [
  1215.            "dirt____",
  1216.            "________",
  1217.            "________",
  1218.            "________"
  1219.        ],
  1220.        [
  1221.            "dirt____",
  1222.            "________",
  1223.            "bldr____",
  1224.            "________"
  1225.        ],
  1226.        [
  1227.            "dirt____",
  1228.            "________",
  1229.            "________",
  1230.            "________"
  1231.        ],
  1232.        [
  1233.            "dirt____",
  1234.            "________",
  1235.            "wall____",
  1236.            "________"
  1237.        ],
  1238.        [
  1239.            "dirt____",
  1240.            "________",
  1241.            "________",
  1242.            "________"
  1243.        ],
  1244.        [
  1245.            "dirt____",
  1246.            "________",
  1247.            "________",
  1248.            "________"
  1249.        ],
  1250.        [
  1251.            "dirt____",
  1252.            "dtby____",
  1253.            "________",
  1254.            "________"
  1255.        ],
  1256.        [
  1257.            "dirt____",
  1258.            "________",
  1259.            "wall____",
  1260.            "________"
  1261.        ]
  1262.    ],
  1263.    [
  1264.        [
  1265.            "dirt____",
  1266.            "________",
  1267.            "wall____",
  1268.            "________"
  1269.        ],
  1270.        [
  1271.            "dirt____",
  1272.            "________",
  1273.            "wall____",
  1274.            "________"
  1275.        ],
  1276.        [
  1277.            "dirt____",
  1278.            "________",
  1279.            "wall____",
  1280.            "________"
  1281.        ],
  1282.        [
  1283.            "dirt____",
  1284.            "________",
  1285.            "wall____",
  1286.            "________"
  1287.        ],
  1288.        [
  1289.            "dirt____",
  1290.            "________",
  1291.            "wall____",
  1292.            "________"
  1293.        ],
  1294.        [
  1295.            "dirt____",
  1296.            "________",
  1297.            "________",
  1298.            "________"
  1299.        ],
  1300.        [
  1301.            "dirt____",
  1302.            "pndx____",
  1303.            "________",
  1304.            "________"
  1305.        ],
  1306.        [
  1307.            "dirt____",
  1308.            "________",
  1309.            "________",
  1310.            "________"
  1311.        ],
  1312.        [
  1313.            "dirt____",
  1314.            "________",
  1315.            "________",
  1316.            "________"
  1317.        ],
  1318.        [
  1319.            "dirt____",
  1320.            "________",
  1321.            "________",
  1322.            "________"
  1323.        ],
  1324.        [
  1325.            "watr____",
  1326.            "________",
  1327.            "________",
  1328.            "________"
  1329.        ],
  1330.        [
  1331.            "dirt____",
  1332.            "________",
  1333.            "________",
  1334.            "________"
  1335.        ],
  1336.        [
  1337.            "dirt____",
  1338.            "shkt____",
  1339.            "________",
  1340.            "________"
  1341.        ],
  1342.        [
  1343.            "dirt____",
  1344.            "________",
  1345.            "________",
  1346.            "________"
  1347.        ],
  1348.        [
  1349.            "dirt____",
  1350.            "________",
  1351.            "wall____",
  1352.            "________"
  1353.        ],
  1354.        [
  1355.            "dirt____",
  1356.            "________",
  1357.            "________",
  1358.            "________"
  1359.        ],
  1360.        [
  1361.            "dirt____",
  1362.            "________",
  1363.            "________",
  1364.            "________"
  1365.        ],
  1366.        [
  1367.            "dirt____",
  1368.            "dtby____",
  1369.            "________",
  1370.            "________"
  1371.        ],
  1372.        [
  1373.            "dirt____",
  1374.            "________",
  1375.            "wall____",
  1376.            "________"
  1377.        ]
  1378.    ],
  1379.    [
  1380.        [
  1381.            "stps____",
  1382.            "________",
  1383.            "wall____",
  1384.            "________"
  1385.        ],
  1386.        [
  1387.            "hole____",
  1388.            "________",
  1389.            "________",
  1390.            "________"
  1391.        ],
  1392.        [
  1393.            "hole____",
  1394.            "________",
  1395.            "________",
  1396.            "________"
  1397.        ],
  1398.        [
  1399.            "dirt____",
  1400.            "________",
  1401.            "wall____",
  1402.            "________"
  1403.        ],
  1404.        [
  1405.            "stps____",
  1406.            "________",
  1407.            "________",
  1408.            "________"
  1409.        ],
  1410.        [
  1411.            "dirt____",
  1412.            "________",
  1413.            "________",
  1414.            "________"
  1415.        ],
  1416.        [
  1417.            "dirt____",
  1418.            "________",
  1419.            "________",
  1420.            "________"
  1421.        ],
  1422.        [
  1423.            "dirt____",
  1424.            "imp_____",
  1425.            "________",
  1426.            "________"
  1427.        ],
  1428.        [
  1429.            "dirt____",
  1430.            "________",
  1431.            "________",
  1432.            "________"
  1433.        ],
  1434.        [
  1435.            "dirt____",
  1436.            "dtby____",
  1437.            "________",
  1438.            "________"
  1439.        ],
  1440.        [
  1441.            "watr____",
  1442.            "________",
  1443.            "________",
  1444.            "________"
  1445.        ],
  1446.        [
  1447.            "dirt____",
  1448.            "________",
  1449.            "________",
  1450.            "________"
  1451.        ],
  1452.        [
  1453.            "dirt____",
  1454.            "________",
  1455.            "________",
  1456.            "________"
  1457.        ],
  1458.        [
  1459.            "dirt____",
  1460.            "________",
  1461.            "________",
  1462.            "________"
  1463.        ],
  1464.        [
  1465.            "dirt____",
  1466.            "________",
  1467.            "wall____",
  1468.            "________"
  1469.        ],
  1470.        [
  1471.            "dirt____",
  1472.            "________",
  1473.            "________",
  1474.            "________"
  1475.        ],
  1476.        [
  1477.            "dirt____",
  1478.            "dtby____",
  1479.            "________",
  1480.            "________"
  1481.        ],
  1482.        [
  1483.            "dirt____",
  1484.            "________",
  1485.            "________",
  1486.            "________"
  1487.        ],
  1488.        [
  1489.            "dirt____",
  1490.            "________",
  1491.            "wall____",
  1492.            "________"
  1493.        ]
  1494.    ],
  1495.    [
  1496.        [
  1497.            "hole____",
  1498.            "________",
  1499.            "wall____",
  1500.            "________"
  1501.        ],
  1502.        [
  1503.            "stps____",
  1504.            "________",
  1505.            "________",
  1506.            "________"
  1507.        ],
  1508.        [
  1509.            "hole____",
  1510.            "________",
  1511.            "________",
  1512.            "________"
  1513.        ],
  1514.        [
  1515.            "stps____",
  1516.            "________",
  1517.            "door____",
  1518.            "________"
  1519.        ],
  1520.        [
  1521.            "hole____",
  1522.            "________",
  1523.            "________",
  1524.            "________"
  1525.        ],
  1526.        [
  1527.            "dirt____",
  1528.            "________",
  1529.            "wall____",
  1530.            "________"
  1531.        ],
  1532.        [
  1533.            "dirt____",
  1534.            "________",
  1535.            "wall____",
  1536.            "________"
  1537.        ],
  1538.        [
  1539.            "hole____",
  1540.            "________",
  1541.            "________",
  1542.            "________"
  1543.        ],
  1544.        [
  1545.            "dirt____",
  1546.            "________",
  1547.            "________",
  1548.            "________"
  1549.        ],
  1550.        [
  1551.            "dirt____",
  1552.            "________",
  1553.            "________",
  1554.            "________"
  1555.        ],
  1556.        [
  1557.            "watr____",
  1558.            "________",
  1559.            "________",
  1560.            "________"
  1561.        ],
  1562.        [
  1563.            "dirt____",
  1564.            "________",
  1565.            "________",
  1566.            "________"
  1567.        ],
  1568.        [
  1569.            "dirt____",
  1570.            "________",
  1571.            "________",
  1572.            "________"
  1573.        ],
  1574.        [
  1575.            "dirt____",
  1576.            "________",
  1577.            "chst____",
  1578.            "________"
  1579.        ],
  1580.        [
  1581.            "dirt____",
  1582.            "________",
  1583.            "wall____",
  1584.            "________"
  1585.        ],
  1586.        [
  1587.            "dirt____",
  1588.            "________",
  1589.            "________",
  1590.            "________"
  1591.        ],
  1592.        [
  1593.            "dirt____",
  1594.            "________",
  1595.            "________",
  1596.            "________"
  1597.        ],
  1598.        [
  1599.            "dirt____",
  1600.            "________",
  1601.            "________",
  1602.            "________"
  1603.        ],
  1604.        [
  1605.            "dirt____",
  1606.            "________",
  1607.            "wall____",
  1608.            "________"
  1609.        ]
  1610.    ],
  1611.    [
  1612.        [
  1613.            "dirt____",
  1614.            "________",
  1615.            "wall____",
  1616.            "________"
  1617.        ],
  1618.        [
  1619.            "dirt____",
  1620.            "________",
  1621.            "________",
  1622.            "________"
  1623.        ],
  1624.        [
  1625.            "dirt____",
  1626.            "________",
  1627.            "________",
  1628.            "________"
  1629.        ],
  1630.        [
  1631.            "dirt____",
  1632.            "________",
  1633.            "wall____",
  1634.            "________"
  1635.        ],
  1636.        [
  1637.            "dirt____",
  1638.            "________",
  1639.            "________",
  1640.            "________"
  1641.        ],
  1642.        [
  1643.            "dirt____",
  1644.            "________",
  1645.            "________",
  1646.            "________"
  1647.        ],
  1648.        [
  1649.            "dirt____",
  1650.            "________",
  1651.            "________",
  1652.            "________"
  1653.        ],
  1654.        [
  1655.            "dirt____",
  1656.            "________",
  1657.            "________",
  1658.            "________"
  1659.        ],
  1660.        [
  1661.            "dirt____",
  1662.            "________",
  1663.            "wall____",
  1664.            "________"
  1665.        ],
  1666.        [
  1667.            "dirt____",
  1668.            "________",
  1669.            "wall____",
  1670.            "________"
  1671.        ],
  1672.        [
  1673.            "dirt____",
  1674.            "________",
  1675.            "wall____",
  1676.            "________"
  1677.        ],
  1678.        [
  1679.            "dirt____",
  1680.            "________",
  1681.            "wall____",
  1682.            "________"
  1683.        ],
  1684.        [
  1685.            "dirt____",
  1686.            "________",
  1687.            "wall____",
  1688.            "________"
  1689.        ],
  1690.        [
  1691.            "dirt____",
  1692.            "________",
  1693.            "wall____",
  1694.            "________"
  1695.        ],
  1696.        [
  1697.            "dirt____",
  1698.            "________",
  1699.            "wall____",
  1700.            "________"
  1701.        ],
  1702.        [
  1703.            "dirt____",
  1704.            "________",
  1705.            "________",
  1706.            "________"
  1707.        ],
  1708.        [
  1709.            "dirt____",
  1710.            "________",
  1711.            "wall____",
  1712.            "________"
  1713.        ],
  1714.        [
  1715.            "dirt____",
  1716.            "________",
  1717.            "________",
  1718.            "________"
  1719.        ],
  1720.        [
  1721.            "dirt____",
  1722.            "________",
  1723.            "wall____",
  1724.            "________"
  1725.        ]
  1726.    ],
  1727.    [
  1728.        [
  1729.            "dirt____",
  1730.            "________",
  1731.            "door____",
  1732.            "________"
  1733.        ],
  1734.        [
  1735.            "dirt____",
  1736.            "________",
  1737.            "________",
  1738.            "________"
  1739.        ],
  1740.        [
  1741.            "dirt____",
  1742.            "________",
  1743.            "chst____",
  1744.            "________"
  1745.        ],
  1746.        [
  1747.            "dirt____",
  1748.            "________",
  1749.            "wall____",
  1750.            "________"
  1751.        ],
  1752.        [
  1753.            "dirt____",
  1754.            "________",
  1755.            "chst____",
  1756.            "________"
  1757.        ],
  1758.        [
  1759.            "hole____",
  1760.            "________",
  1761.            "________",
  1762.            "________"
  1763.        ],
  1764.        [
  1765.            "hole____",
  1766.            "grml____",
  1767.            "________",
  1768.            "________"
  1769.        ],
  1770.        [
  1771.            "dirt____",
  1772.            "________",
  1773.            "________",
  1774.            "________"
  1775.        ],
  1776.        [
  1777.            "watr____",
  1778.            "________",
  1779.            "________",
  1780.            "________"
  1781.        ],
  1782.        [
  1783.            "dirt____",
  1784.            "________",
  1785.            "chst____",
  1786.            "________"
  1787.        ],
  1788.        [
  1789.            "stpw____",
  1790.            "________",
  1791.            "________",
  1792.            "________"
  1793.        ],
  1794.        [
  1795.            "watr____",
  1796.            "________",
  1797.            "________",
  1798.            "________"
  1799.        ],
  1800.        [
  1801.            "watr____",
  1802.            "________",
  1803.            "________",
  1804.            "________"
  1805.        ],
  1806.        [
  1807.            "dirt____",
  1808.            "________",
  1809.            "________",
  1810.            "________"
  1811.        ],
  1812.        [
  1813.            "dirt____",
  1814.            "________",
  1815.            "________",
  1816.            "________"
  1817.        ],
  1818.        [
  1819.            "dirt____",
  1820.            "________",
  1821.            "________",
  1822.            "________"
  1823.        ],
  1824.        [
  1825.            "dirt____",
  1826.            "________",
  1827.            "wall____",
  1828.            "________"
  1829.        ],
  1830.        [
  1831.            "dirt____",
  1832.            "________",
  1833.            "________",
  1834.            "________"
  1835.        ],
  1836.        [
  1837.            "dirt____",
  1838.            "________",
  1839.            "wall____",
  1840.            "________"
  1841.        ]
  1842.    ],
  1843.    [
  1844.        [
  1845.            "hole____",
  1846.            "________",
  1847.            "wall____",
  1848.            "________"
  1849.        ],
  1850.        [
  1851.            "dirt____",
  1852.            "________",
  1853.            "________",
  1854.            "________"
  1855.        ],
  1856.        [
  1857.            "hole____",
  1858.            "________",
  1859.            "________",
  1860.            "________"
  1861.        ],
  1862.        [
  1863.            "hole____",
  1864.            "________",
  1865.            "wall____",
  1866.            "________"
  1867.        ],
  1868.        [
  1869.            "hole____",
  1870.            "________",
  1871.            "________",
  1872.            "________"
  1873.        ],
  1874.        [
  1875.            "hole____",
  1876.            "dtby____",
  1877.            "________",
  1878.            "________"
  1879.        ],
  1880.        [
  1881.            "hole____",
  1882.            "________",
  1883.            "________",
  1884.            "________"
  1885.        ],
  1886.        [
  1887.            "dirt____",
  1888.            "________",
  1889.            "________",
  1890.            "________"
  1891.        ],
  1892.        [
  1893.            "watr____",
  1894.            "________",
  1895.            "________",
  1896.            "________"
  1897.        ],
  1898.        [
  1899.            "dirt____",
  1900.            "________",
  1901.            "________",
  1902.            "________"
  1903.        ],
  1904.        [
  1905.            "dirt____",
  1906.            "grml____",
  1907.            "________",
  1908.            "________"
  1909.        ],
  1910.        [
  1911.            "watr____",
  1912.            "________",
  1913.            "________",
  1914.            "________"
  1915.        ],
  1916.        [
  1917.            "watr____",
  1918.            "________",
  1919.            "________",
  1920.            "________"
  1921.        ],
  1922.        [
  1923.            "dirt____",
  1924.            "________",
  1925.            "________",
  1926.            "________"
  1927.        ],
  1928.        [
  1929.            "dirt____",
  1930.            "emgd____",
  1931.            "________",
  1932.            "________"
  1933.        ],
  1934.        [
  1935.            "dirt____",
  1936.            "________",
  1937.            "________",
  1938.            "________"
  1939.        ],
  1940.        [
  1941.            "dirt____",
  1942.            "________",
  1943.            "wall____",
  1944.            "________"
  1945.        ],
  1946.        [
  1947.            "dirt____",
  1948.            "________",
  1949.            "________",
  1950.            "________"
  1951.        ],
  1952.        [
  1953.            "dirt____",
  1954.            "________",
  1955.            "wall____",
  1956.            "________"
  1957.        ]
  1958.    ],
  1959.    [
  1960.        [
  1961.            "hole____",
  1962.            "________",
  1963.            "wall____",
  1964.            "________"
  1965.        ],
  1966.        [
  1967.            "dirt____",
  1968.            "________",
  1969.            "________",
  1970.            "________"
  1971.        ],
  1972.        [
  1973.            "hole____",
  1974.            "________",
  1975.            "________",
  1976.            "________"
  1977.        ],
  1978.        [
  1979.            "hole____",
  1980.            "________",
  1981.            "wall____",
  1982.            "________"
  1983.        ],
  1984.        [
  1985.            "hole____",
  1986.            "________",
  1987.            "________",
  1988.            "________"
  1989.        ],
  1990.        [
  1991.            "hole____",
  1992.            "________",
  1993.            "________",
  1994.            "________"
  1995.        ],
  1996.        [
  1997.            "hole____",
  1998.            "grml____",
  1999.            "________",
  2000.            "________"
  2001.        ],
  2002.        [
  2003.            "dirt____",
  2004.            "________",
  2005.            "________",
  2006.            "________"
  2007.        ],
  2008.        [
  2009.            "watr____",
  2010.            "________",
  2011.            "________",
  2012.            "________"
  2013.        ],
  2014.        [
  2015.            "dirt____",
  2016.            "grml____",
  2017.            "________",
  2018.            "________"
  2019.        ],
  2020.        [
  2021.            "dirt____",
  2022.            "________",
  2023.            "________",
  2024.            "________"
  2025.        ],
  2026.        [
  2027.            "watr____",
  2028.            "________",
  2029.            "________",
  2030.            "________"
  2031.        ],
  2032.        [
  2033.            "watr____",
  2034.            "________",
  2035.            "________",
  2036.            "________"
  2037.        ],
  2038.        [
  2039.            "dirt____",
  2040.            "________",
  2041.            "________",
  2042.            "________"
  2043.        ],
  2044.        [
  2045.            "dirt____",
  2046.            "________",
  2047.            "________",
  2048.            "________"
  2049.        ],
  2050.        [
  2051.            "dirt____",
  2052.            "________",
  2053.            "chst____",
  2054.            "________"
  2055.        ],
  2056.        [
  2057.            "dirt____",
  2058.            "________",
  2059.            "wall____",
  2060.            "________"
  2061.        ],
  2062.        [
  2063.            "dirt____",
  2064.            "________",
  2065.            "chst____",
  2066.            "________"
  2067.        ],
  2068.        [
  2069.            "dirt____",
  2070.            "________",
  2071.            "wall____",
  2072.            "________"
  2073.        ]
  2074.    ],
  2075.    [
  2076.        [
  2077.            "dirt____",
  2078.            "________",
  2079.            "wall____",
  2080.            "________"
  2081.        ],
  2082.        [
  2083.            "dirt____",
  2084.            "________",
  2085.            "wall____",
  2086.            "________"
  2087.        ],
  2088.        [
  2089.            "dirt____",
  2090.            "________",
  2091.            "wall____",
  2092.            "________"
  2093.        ],
  2094.        [
  2095.            "dirt____",
  2096.            "________",
  2097.            "wall____",
  2098.            "________"
  2099.        ],
  2100.        [
  2101.            "dirt____",
  2102.            "________",
  2103.            "wall____",
  2104.            "________"
  2105.        ],
  2106.        [
  2107.            "dirt____",
  2108.            "________",
  2109.            "wall____",
  2110.            "________"
  2111.        ],
  2112.        [
  2113.            "dirt____",
  2114.            "________",
  2115.            "wall____",
  2116.            "________"
  2117.        ],
  2118.        [
  2119.            "dirt____",
  2120.            "________",
  2121.            "wall____",
  2122.            "________"
  2123.        ],
  2124.        [
  2125.            "dirt____",
  2126.            "________",
  2127.            "wall____",
  2128.            "________"
  2129.        ],
  2130.        [
  2131.            "dirt____",
  2132.            "________",
  2133.            "wall____",
  2134.            "________"
  2135.        ],
  2136.        [
  2137.            "dirt____",
  2138.            "________",
  2139.            "wall____",
  2140.            "________"
  2141.        ],
  2142.        [
  2143.            "dirt____",
  2144.            "________",
  2145.            "wall____",
  2146.            "________"
  2147.        ],
  2148.        [
  2149.            "dirt____",
  2150.            "________",
  2151.            "wall____",
  2152.            "________"
  2153.        ],
  2154.        [
  2155.            "dirt____",
  2156.            "________",
  2157.            "wall____",
  2158.            "________"
  2159.        ],
  2160.        [
  2161.            "dirt____",
  2162.            "________",
  2163.            "wall____",
  2164.            "________"
  2165.        ],
  2166.        [
  2167.            "dirt____",
  2168.            "________",
  2169.            "wall____",
  2170.            "________"
  2171.        ],
  2172.        [
  2173.            "dirt____",
  2174.            "________",
  2175.            "wall____",
  2176.            "________"
  2177.        ],
  2178.        [
  2179.            "dirt____",
  2180.            "________",
  2181.            "wall____",
  2182.            "________"
  2183.        ],
  2184.        [
  2185.            "dirt____",
  2186.            "________",
  2187.            "wall____",
  2188.            "________"
  2189.        ]
  2190.    ]
  2191. ]
  2192.  
  2193.  
  2194. // Load view portal constraints
  2195.  
  2196. var viewConstraints = {
  2197.     "viewMinX": -3,
  2198.     "viewMaxX": 3,
  2199.     "viewMinY": -3,
  2200.     "viewMaxY": 3,
  2201.     "viewMinZ": 0,
  2202.     "viewMaxZ": 4,
  2203.     "viewSpanX": 7,
  2204.     "viewSpanY": 7
  2205. }
  2206.  
  2207. var ViewPortal = create3DArrayBlock(`${special.emptyCell}`, viewConstraints.viewMinX, viewConstraints.viewMaxX, viewConstraints.viewMinY, viewConstraints.viewMaxY, 0, layers.gui);
  2208.  
  2209. // Load purse tray constraints
  2210.  
  2211. var purseConstraints = {
  2212.     "viewMinX": 0,
  2213.     "viewMaxX": 4,
  2214.     "viewMinY": 0,
  2215.     "viewMaxY": 3,
  2216.     "viewMinZ": 0,
  2217.     "viewMaxZ": 4,
  2218.     "viewSpanX": 5,
  2219.     "viewSpanY": 6
  2220. }
  2221.  
  2222. var PurseTray = create3DArrayBlock(`${special.emptyCell}`, purseConstraints.viewMinX, purseConstraints.viewMaxX, purseConstraints.viewMinY, purseConstraints.viewMaxY, 0, layers.gui)
  2223.  
  2224.  
  2225.  
  2226.  
  2227. var default_entity_stats = [];
  2228. var default_action_stats = [];
  2229.  
  2230. default_entity_stats = loadDefaultStats ( );
  2231. default_action_stats = loadDefaultActions ( );
  2232.  
  2233. function loadDefaultStats ( ){
  2234.  
  2235.     var ent_layers = [];
  2236.     var ent_stats = [];
  2237.  
  2238.     ent_stats[`____`] =
  2239.         loadJSONDirect(`/test dictionary/scripts/json/gamevars/default stats.json`);
  2240.    
  2241. var ent_layers = {
  2242.     "terrain": [
  2243.         "____",
  2244.         "dirt",
  2245.         "hole",
  2246.         "watr",
  2247.         "stps",
  2248.         "stpw"
  2249.     ],
  2250.     "critter": [
  2251.         "____",
  2252.         "dtby",
  2253.         "spdr",
  2254.         "grml",
  2255.         "imp_",
  2256.         "emgd",
  2257.         "shkt",
  2258.         "pndx"
  2259.     ],
  2260.     "object": [
  2261.         "____",
  2262.         "door",
  2263.         "wall",
  2264.         "bldr",
  2265.         "ccts",
  2266.         "chst",
  2267.         "pwch"
  2268.     ],
  2269.     "ailment": [
  2270.         "____",
  2271.         "web_",
  2272.         "wing",
  2273.         "cure",
  2274.         "vnom",
  2275.         "fire",
  2276.         "loc1",
  2277.         "loc2",
  2278.         "loc3",
  2279.         "dust",
  2280.         "zzzz"
  2281.     ]
  2282. }
  2283.  
  2284.  
  2285.     // console.log(ent_layers);
  2286.  
  2287.     for(let layer = 0; layer < ent_layers.length; layer++ ){
  2288.        
  2289.         let entityRoster = ent_layers[layer];
  2290.    
  2291.         for(let index = 0; index < entityRoster.length; index++ ){
  2292.             ent_stats[entityRoster[index]] = loadJSONDirect(`/test dictionary/scripts/json/gamevars/entities/`+left(entityRoster[index]+'____',4)+`.json`);
  2293.         }
  2294.     }
  2295.    
  2296.     return ent_stats;
  2297. }
  2298.  
  2299. function loadDefaultActions ( ){
  2300.    
  2301.     var actionRoster = []; 
  2302.     var act_stats = [];
  2303.  
  2304. var act_stats = [
  2305.     "____",
  2306.     "wstf",
  2307.     "bite",
  2308.     "burn",
  2309.     "cure",
  2310.     "dggr",
  2311.     "fire",
  2312.     "grpl",
  2313.     "ispt",
  2314.     "kick",
  2315.     "lash",
  2316.     "move",
  2317.     "pike",
  2318.     "pnch",
  2319.     "seed",
  2320.     "tngl",
  2321.     "vnom",
  2322.     "web_"
  2323. ]
  2324.    
  2325.     for( let index = 0; index < actionRoster.length; index++ ){
  2326.        
  2327.         let actName = actionRoster[index];
  2328.  
  2329.         act_stats[actName] = [];       
  2330.        
  2331.         let url = `${host}/test dictionary/scripts/json/gamevars/actions/${actName}.json`;
  2332.  
  2333.         act_stats[actName] = loadJSONDirect(url);
  2334.     }
  2335.     return act_stats;
  2336. }
  2337.  
  2338. function loadMap ( ){
  2339.    
  2340. var rawMap = [
  2341.    [
  2342.        [
  2343.            "dirt____",
  2344.            "________",
  2345.            "wall____",
  2346.            "________"
  2347.        ],
  2348.        [
  2349.            "dirt____",
  2350.            "________",
  2351.            "wall____",
  2352.            "________"
  2353.        ],
  2354.        [
  2355.            "dirt____",
  2356.            "________",
  2357.            "wall____",
  2358.            "________"
  2359.        ],
  2360.        [
  2361.            "dirt____",
  2362.            "________",
  2363.            "wall____",
  2364.            "________"
  2365.        ],
  2366.        [
  2367.            "dirt____",
  2368.            "________",
  2369.            "wall____",
  2370.            "________"
  2371.        ],
  2372.        [
  2373.            "dirt____",
  2374.            "________",
  2375.            "wall____",
  2376.            "________"
  2377.        ],
  2378.        [
  2379.            "dirt____",
  2380.            "________",
  2381.            "wall____",
  2382.            "________"
  2383.        ],
  2384.        [
  2385.            "dirt____",
  2386.            "________",
  2387.            "wall____",
  2388.            "________"
  2389.        ],
  2390.        [
  2391.            "dirt____",
  2392.            "________",
  2393.            "wall____",
  2394.            "________"
  2395.        ],
  2396.        [
  2397.            "dirt____",
  2398.            "________",
  2399.            "wall____",
  2400.            "________"
  2401.        ],
  2402.        [
  2403.            "dirt____",
  2404.            "________",
  2405.            "wall____",
  2406.            "________"
  2407.        ],
  2408.        [
  2409.            "dirt____",
  2410.            "________",
  2411.            "wall____",
  2412.            "________"
  2413.        ],
  2414.        [
  2415.            "dirt____",
  2416.            "________",
  2417.            "wall____",
  2418.            "________"
  2419.        ],
  2420.        [
  2421.            "dirt____",
  2422.            "________",
  2423.            "wall____",
  2424.            "________"
  2425.        ],
  2426.        [
  2427.            "dirt____",
  2428.            "________",
  2429.            "wall____",
  2430.            "________"
  2431.        ],
  2432.        [
  2433.            "dirt____",
  2434.            "________",
  2435.            "wall____",
  2436.            "________"
  2437.        ],
  2438.        [
  2439.            "dirt____",
  2440.            "________",
  2441.            "wall____",
  2442.            "________"
  2443.        ],
  2444.        [
  2445.            "dirt____",
  2446.            "________",
  2447.            "wall____",
  2448.            "________"
  2449.        ],
  2450.        [
  2451.            "dirt____",
  2452.            "________",
  2453.            "wall____",
  2454.            "________"
  2455.        ]
  2456.    ],
  2457.    [
  2458.        [
  2459.            "dirt____",
  2460.            "________",
  2461.            "wall____",
  2462.            "________"
  2463.        ],
  2464.        [
  2465.            "dirt____",
  2466.            "________",
  2467.            "________",
  2468.            "________"
  2469.        ],
  2470.        [
  2471.            "dirt____",
  2472.            "spdr____",
  2473.            "________",
  2474.            "________"
  2475.        ],
  2476.        [
  2477.            "dirt____",
  2478.            "________",
  2479.            "wall____",
  2480.            "________"
  2481.        ],
  2482.        [
  2483.            "dirt____",
  2484.            "spdr____",
  2485.            "________",
  2486.            "________"
  2487.        ],
  2488.        [
  2489.            "dirt____",
  2490.            "________",
  2491.            "chst____",
  2492.            "________"
  2493.        ],
  2494.        [
  2495.            "dirt____",
  2496.            "________",
  2497.            "wall____",
  2498.            "________"
  2499.        ],
  2500.        [
  2501.            "dirt____",
  2502.            "________",
  2503.            "________",
  2504.            "________"
  2505.        ],
  2506.        [
  2507.            "dirt____",
  2508.            "emgd____",
  2509.            "________",
  2510.            "________"
  2511.        ],
  2512.        [
  2513.            "dirt____",
  2514.            "________",
  2515.            "________",
  2516.            "________"
  2517.        ],
  2518.        [
  2519.            "dirt____",
  2520.            "________",
  2521.            "wall____",
  2522.            "________"
  2523.        ],
  2524.        [
  2525.            "dirt____",
  2526.            "________",
  2527.            "________",
  2528.            "________"
  2529.        ],
  2530.        [
  2531.            "dirt____",
  2532.            "________",
  2533.            "________",
  2534.            "________"
  2535.        ],
  2536.        [
  2537.            "dirt____",
  2538.            "________",
  2539.            "wall____",
  2540.            "________"
  2541.        ],
  2542.        [
  2543.            "dirt____",
  2544.            "________",
  2545.            "________",
  2546.            "________"
  2547.        ],
  2548.        [
  2549.            "dirt____",
  2550.            "pndx____",
  2551.            "________",
  2552.            "________"
  2553.        ],
  2554.        [
  2555.            "dirt____",
  2556.            "________",
  2557.            "________",
  2558.            "________"
  2559.        ],
  2560.        [
  2561.            "dirt____",
  2562.            "________",
  2563.            "chst____",
  2564.            "________"
  2565.        ],
  2566.        [
  2567.            "dirt____",
  2568.            "________",
  2569.            "wall____",
  2570.            "________"
  2571.        ]
  2572.    ],
  2573.    [
  2574.        [
  2575.            "dirt____",
  2576.            "________",
  2577.            "wall____",
  2578.            "________"
  2579.        ],
  2580.        [
  2581.            "dirt____",
  2582.            "________",
  2583.            "________",
  2584.            "________"
  2585.        ],
  2586.        [
  2587.            "dirt____",
  2588.            "________",
  2589.            "________",
  2590.            "________"
  2591.        ],
  2592.        [
  2593.            "dirt____",
  2594.            "________",
  2595.            "wall____",
  2596.            "________"
  2597.        ],
  2598.        [
  2599.            "dirt____",
  2600.            "________",
  2601.            "________",
  2602.            "________"
  2603.        ],
  2604.        [
  2605.            "dirt____",
  2606.            "________",
  2607.            "________",
  2608.            "________"
  2609.        ],
  2610.        [
  2611.            "dirt____",
  2612.            "________",
  2613.            "________",
  2614.            "________"
  2615.        ],
  2616.        [
  2617.            "dirt____",
  2618.            "________",
  2619.            "________",
  2620.            "________"
  2621.        ],
  2622.        [
  2623.            "dirt____",
  2624.            "________",
  2625.            "________",
  2626.            "________"
  2627.        ],
  2628.        [
  2629.            "dirt____",
  2630.            "________",
  2631.            "________",
  2632.            "________"
  2633.        ],
  2634.        [
  2635.            "dirt____",
  2636.            "________",
  2637.            "________",
  2638.            "________"
  2639.        ],
  2640.        [
  2641.            "dirt____",
  2642.            "________",
  2643.            "________",
  2644.            "________"
  2645.        ],
  2646.        [
  2647.            "hole____",
  2648.            "________",
  2649.            "________",
  2650.            "________"
  2651.        ],
  2652.        [
  2653.            "hole____",
  2654.            "________",
  2655.            "________",
  2656.            "________"
  2657.        ],
  2658.        [
  2659.            "dirt____",
  2660.            "________",
  2661.            "________",
  2662.            "________"
  2663.        ],
  2664.        [
  2665.            "dirt____",
  2666.            "________",
  2667.            "________",
  2668.            "________"
  2669.        ],
  2670.        [
  2671.            "dirt____",
  2672.            "shkt____",
  2673.            "________",
  2674.            "________"
  2675.        ],
  2676.        [
  2677.            "dirt____",
  2678.            "________",
  2679.            "________",
  2680.            "________"
  2681.        ],
  2682.        [
  2683.            "dirt____",
  2684.            "________",
  2685.            "wall____",
  2686.            "________"
  2687.        ]
  2688.    ],
  2689.    [
  2690.        [
  2691.            "dirt____",
  2692.            "________",
  2693.            "wall____",
  2694.            "________"
  2695.        ],
  2696.        [
  2697.            "dirt____",
  2698.            "________",
  2699.            "________",
  2700.            "________"
  2701.        ],
  2702.        [
  2703.            "dirt____",
  2704.            "________",
  2705.            "________",
  2706.            "________"
  2707.        ],
  2708.        [
  2709.            "dirt____",
  2710.            "________",
  2711.            "wall____",
  2712.            "________"
  2713.        ],
  2714.        [
  2715.            "dirt____",
  2716.            "________",
  2717.            "________",
  2718.            "________"
  2719.        ],
  2720.        [
  2721.            "dirt____",
  2722.            "spdr____",
  2723.            "________",
  2724.            "________"
  2725.        ],
  2726.        [
  2727.            "dirt____",
  2728.            "________",
  2729.            "wall____",
  2730.            "________"
  2731.        ],
  2732.        [
  2733.            "dirt____",
  2734.            "________",
  2735.            "door____",
  2736.            "________"
  2737.        ],
  2738.        [
  2739.            "dirt____",
  2740.            "________",
  2741.            "wall____",
  2742.            "________"
  2743.        ],
  2744.        [
  2745.            "dirt____",
  2746.            "________",
  2747.            "wall____",
  2748.            "________"
  2749.        ],
  2750.        [
  2751.            "dirt____",
  2752.            "________",
  2753.            "wall____",
  2754.            "________"
  2755.        ],
  2756.        [
  2757.            "dirt____",
  2758.            "________",
  2759.            "________",
  2760.            "________"
  2761.        ],
  2762.        [
  2763.            "hole____",
  2764.            "________",
  2765.            "________",
  2766.            "________"
  2767.        ],
  2768.        [
  2769.            "hole____",
  2770.            "________",
  2771.            "________",
  2772.            "________"
  2773.        ],
  2774.        [
  2775.            "hole____",
  2776.            "________",
  2777.            "________",
  2778.            "________"
  2779.        ],
  2780.        [
  2781.            "dirt____",
  2782.            "________",
  2783.            "________",
  2784.            "________"
  2785.        ],
  2786.        [
  2787.            "dirt____",
  2788.            "________",
  2789.            "bldr____",
  2790.            "________"
  2791.        ],
  2792.        [
  2793.            "dirt____",
  2794.            "________",
  2795.            "________",
  2796.            "________"
  2797.        ],
  2798.        [
  2799.            "dirt____",
  2800.            "________",
  2801.            "wall____",
  2802.            "________"
  2803.        ]
  2804.    ],
  2805.    [
  2806.        [
  2807.            "dirt____",
  2808.            "________",
  2809.            "wall____",
  2810.            "________"
  2811.        ],
  2812.        [
  2813.            "dirt____",
  2814.            "spdr____",
  2815.            "________",
  2816.            "________"
  2817.        ],
  2818.        [
  2819.            "dirt____",
  2820.            "________",
  2821.            "________",
  2822.            "________"
  2823.        ],
  2824.        [
  2825.            "dirt____",
  2826.            "________",
  2827.            "wall____",
  2828.            "________"
  2829.        ],
  2830.        [
  2831.            "dirt____",
  2832.            "________",
  2833.            "________",
  2834.            "________"
  2835.        ],
  2836.        [
  2837.            "dirt____",
  2838.            "________",
  2839.            "________",
  2840.            "________"
  2841.        ],
  2842.        [
  2843.            "dirt____",
  2844.            "________",
  2845.            "wall____",
  2846.            "________"
  2847.        ],
  2848.        [
  2849.            "dirt____",
  2850.            "________",
  2851.            "bldr____",
  2852.            "________"
  2853.        ],
  2854.        [
  2855.            "dirt____",
  2856.            "________",
  2857.            "________",
  2858.            "________"
  2859.        ],
  2860.        [
  2861.            "dirt____",
  2862.            "________",
  2863.            "________",
  2864.            "________"
  2865.        ],
  2866.        [
  2867.            "dirt____",
  2868.            "________",
  2869.            "________",
  2870.            "web_____"
  2871.        ],
  2872.        [
  2873.            "dirt____",
  2874.            "________",
  2875.            "________",
  2876.            "________"
  2877.        ],
  2878.        [
  2879.            "hole____",
  2880.            "shkt____",
  2881.            "________",
  2882.            "________"
  2883.        ],
  2884.        [
  2885.            "stps____",
  2886.            "________",
  2887.            "________",
  2888.            "________"
  2889.        ],
  2890.        [
  2891.            "hole____",
  2892.            "________",
  2893.            "________",
  2894.            "________"
  2895.        ],
  2896.        [
  2897.            "dirt____",
  2898.            "________",
  2899.            "________",
  2900.            "________"
  2901.        ],
  2902.        [
  2903.            "dirt____",
  2904.            "________",
  2905.            "________",
  2906.            "________"
  2907.        ],
  2908.        [
  2909.            "dirt____",
  2910.            "________",
  2911.            "________",
  2912.            "________"
  2913.        ],
  2914.        [
  2915.            "dirt____",
  2916.            "________",
  2917.            "wall____",
  2918.            "________"
  2919.        ]
  2920.    ],
  2921.    [
  2922.        [
  2923.            "dirt____",
  2924.            "________",
  2925.            "door____",
  2926.            "________"
  2927.        ],
  2928.        [
  2929.            "dirt____",
  2930.            "________",
  2931.            "________",
  2932.            "________"
  2933.        ],
  2934.        [
  2935.            "dirt____",
  2936.            "spdr____",
  2937.            "________",
  2938.            "________"
  2939.        ],
  2940.        [
  2941.            "dirt____",
  2942.            "________",
  2943.            "wall____",
  2944.            "________"
  2945.        ],
  2946.        [
  2947.            "dirt____",
  2948.            "spdr____",
  2949.            "________",
  2950.            "________"
  2951.        ],
  2952.        [
  2953.            "dirt____",
  2954.            "________",
  2955.            "________",
  2956.            "________"
  2957.        ],
  2958.        [
  2959.            "dirt____",
  2960.            "________",
  2961.            "wall____",
  2962.            "________"
  2963.        ],
  2964.        [
  2965.            "hole____",
  2966.            "________",
  2967.            "________",
  2968.            "________"
  2969.        ],
  2970.        [
  2971.            "dirt____",
  2972.            "________",
  2973.            "bldr____",
  2974.            "________"
  2975.        ],
  2976.        [
  2977.            "dirt____",
  2978.            "________",
  2979.            "________",
  2980.            "________"
  2981.        ],
  2982.        [
  2983.            "dirt____",
  2984.            "________",
  2985.            "wall____",
  2986.            "________"
  2987.        ],
  2988.        [
  2989.            "dirt____",
  2990.            "________",
  2991.            "chst____",
  2992.            "________"
  2993.        ],
  2994.        [
  2995.            "dirt____",
  2996.            "________",
  2997.            "wall____",
  2998.            "________"
  2999.        ],
  3000.        [
  3001.            "dirt____",
  3002.            "________",
  3003.            "________",
  3004.            "________"
  3005.        ],
  3006.        [
  3007.            "dirt____",
  3008.            "________",
  3009.            "________",
  3010.            "________"
  3011.        ],
  3012.        [
  3013.            "dirt____",
  3014.            "________",
  3015.            "________",
  3016.            "________"
  3017.        ],
  3018.        [
  3019.            "dirt____",
  3020.            "________",
  3021.            "________",
  3022.            "________"
  3023.        ],
  3024.        [
  3025.            "dirt____",
  3026.            "________",
  3027.            "________",
  3028.            "________"
  3029.        ],
  3030.        [
  3031.            "dirt____",
  3032.            "________",
  3033.            "wall____",
  3034.            "________"
  3035.        ]
  3036.    ],
  3037.    [
  3038.        [
  3039.            "dirt____",
  3040.            "________",
  3041.            "wall____",
  3042.            "________"
  3043.        ],
  3044.        [
  3045.            "dirt____",
  3046.            "________",
  3047.            "________",
  3048.            "________"
  3049.        ],
  3050.        [
  3051.            "dirt____",
  3052.            "________",
  3053.            "________",
  3054.            "________"
  3055.        ],
  3056.        [
  3057.            "dirt____",
  3058.            "________",
  3059.            "wall____",
  3060.            "________"
  3061.        ],
  3062.        [
  3063.            "dirt____",
  3064.            "________",
  3065.            "________",
  3066.            "________"
  3067.        ],
  3068.        [
  3069.            "dirt____",
  3070.            "________",
  3071.            "wall____",
  3072.            "________"
  3073.        ],
  3074.        [
  3075.            "dirt____",
  3076.            "________",
  3077.            "wall____",
  3078.            "________"
  3079.        ],
  3080.        [
  3081.            "dirt____",
  3082.            "________",
  3083.            "________",
  3084.            "________"
  3085.        ],
  3086.        [
  3087.            "hole____",
  3088.            "________",
  3089.            "________",
  3090.            "________"
  3091.        ],
  3092.        [
  3093.            "dirt____",
  3094.            "________",
  3095.            "wall____",
  3096.            "________"
  3097.        ],
  3098.        [
  3099.            "dirt____",
  3100.            "________",
  3101.            "wall____",
  3102.            "________"
  3103.        ],
  3104.        [
  3105.            "dirt____",
  3106.            "________",
  3107.            "wall____",
  3108.            "________"
  3109.        ],
  3110.        [
  3111.            "dirt____",
  3112.            "________",
  3113.            "wall____",
  3114.            "________"
  3115.        ],
  3116.        [
  3117.            "dirt____",
  3118.            "________",
  3119.            "door____",
  3120.            "________"
  3121.        ],
  3122.        [
  3123.            "dirt____",
  3124.            "________",
  3125.            "wall____",
  3126.            "________"
  3127.        ],
  3128.        [
  3129.            "dirt____",
  3130.            "________",
  3131.            "wall____",
  3132.            "________"
  3133.        ],
  3134.        [
  3135.            "hole____",
  3136.            "________",
  3137.            "________",
  3138.            "________"
  3139.        ],
  3140.        [
  3141.            "dirt____",
  3142.            "________",
  3143.            "wall____",
  3144.            "________"
  3145.        ],
  3146.        [
  3147.            "dirt____",
  3148.            "________",
  3149.            "wall____",
  3150.            "________"
  3151.        ]
  3152.    ],
  3153.    [
  3154.        [
  3155.            "dirt____",
  3156.            "________",
  3157.            "wall____",
  3158.            "________"
  3159.        ],
  3160.        [
  3161.            "dirt____",
  3162.            "________",
  3163.            "________",
  3164.            "________"
  3165.        ],
  3166.        [
  3167.            "dirt____",
  3168.            "________",
  3169.            "________",
  3170.            "________"
  3171.        ],
  3172.        [
  3173.            "dirt____",
  3174.            "________",
  3175.            "door____",
  3176.            "________"
  3177.        ],
  3178.        [
  3179.            "dirt____",
  3180.            "________",
  3181.            "________",
  3182.            "________"
  3183.        ],
  3184.        [
  3185.            "dirt____",
  3186.            "________",
  3187.            "________",
  3188.            "________"
  3189.        ],
  3190.        [
  3191.            "dirt____",
  3192.            "________",
  3193.            "________",
  3194.            "________"
  3195.        ],
  3196.        [
  3197.            "dirt____",
  3198.            "spdr____",
  3199.            "________",
  3200.            "________"
  3201.        ],
  3202.        [
  3203.            "dirt____",
  3204.            "________",
  3205.            "________",
  3206.            "________"
  3207.        ],
  3208.        [
  3209.            "dirt____",
  3210.            "________",
  3211.            "________",
  3212.            "________"
  3213.        ],
  3214.        [
  3215.            "watr____",
  3216.            "________",
  3217.            "________",
  3218.            "________"
  3219.        ],
  3220.        [
  3221.            "dirt____",
  3222.            "________",
  3223.            "________",
  3224.            "________"
  3225.        ],
  3226.        [
  3227.            "dirt____",
  3228.            "________",
  3229.            "bldr____",
  3230.            "________"
  3231.        ],
  3232.        [
  3233.            "dirt____",
  3234.            "________",
  3235.            "________",
  3236.            "________"
  3237.        ],
  3238.        [
  3239.            "dirt____",
  3240.            "________",
  3241.            "wall____",
  3242.            "________"
  3243.        ],
  3244.        [
  3245.            "dirt____",
  3246.            "________",
  3247.            "________",
  3248.            "________"
  3249.        ],
  3250.        [
  3251.            "dirt____",
  3252.            "________",
  3253.            "________",
  3254.            "________"
  3255.        ],
  3256.        [
  3257.            "dirt____",
  3258.            "dtby____",
  3259.            "________",
  3260.            "________"
  3261.        ],
  3262.        [
  3263.            "dirt____",
  3264.            "________",
  3265.            "wall____",
  3266.            "________"
  3267.        ]
  3268.    ],
  3269.    [
  3270.        [
  3271.            "dirt____",
  3272.            "________",
  3273.            "wall____",
  3274.            "________"
  3275.        ],
  3276.        [
  3277.            "dirt____",
  3278.            "________",
  3279.            "wall____",
  3280.            "________"
  3281.        ],
  3282.        [
  3283.            "dirt____",
  3284.            "________",
  3285.            "wall____",
  3286.            "________"
  3287.        ],
  3288.        [
  3289.            "dirt____",
  3290.            "________",
  3291.            "wall____",
  3292.            "________"
  3293.        ],
  3294.        [
  3295.            "dirt____",
  3296.            "________",
  3297.            "wall____",
  3298.            "________"
  3299.        ],
  3300.        [
  3301.            "dirt____",
  3302.            "________",
  3303.            "________",
  3304.            "________"
  3305.        ],
  3306.        [
  3307.            "dirt____",
  3308.            "pndx____",
  3309.            "________",
  3310.            "________"
  3311.        ],
  3312.        [
  3313.            "dirt____",
  3314.            "________",
  3315.            "________",
  3316.            "________"
  3317.        ],
  3318.        [
  3319.            "dirt____",
  3320.            "________",
  3321.            "________",
  3322.            "________"
  3323.        ],
  3324.        [
  3325.            "dirt____",
  3326.            "________",
  3327.            "________",
  3328.            "________"
  3329.        ],
  3330.        [
  3331.            "watr____",
  3332.            "________",
  3333.            "________",
  3334.            "________"
  3335.        ],
  3336.        [
  3337.            "dirt____",
  3338.            "________",
  3339.            "________",
  3340.            "________"
  3341.        ],
  3342.        [
  3343.            "dirt____",
  3344.            "shkt____",
  3345.            "________",
  3346.            "________"
  3347.        ],
  3348.        [
  3349.            "dirt____",
  3350.            "________",
  3351.            "________",
  3352.            "________"
  3353.        ],
  3354.        [
  3355.            "dirt____",
  3356.            "________",
  3357.            "wall____",
  3358.            "________"
  3359.        ],
  3360.        [
  3361.            "dirt____",
  3362.            "________",
  3363.            "________",
  3364.            "________"
  3365.        ],
  3366.        [
  3367.            "dirt____",
  3368.            "________",
  3369.            "________",
  3370.            "________"
  3371.        ],
  3372.        [
  3373.            "dirt____",
  3374.            "dtby____",
  3375.            "________",
  3376.            "________"
  3377.        ],
  3378.        [
  3379.            "dirt____",
  3380.            "________",
  3381.            "wall____",
  3382.            "________"
  3383.        ]
  3384.    ],
  3385.    [
  3386.        [
  3387.            "stps____",
  3388.            "________",
  3389.            "wall____",
  3390.            "________"
  3391.        ],
  3392.        [
  3393.            "hole____",
  3394.            "________",
  3395.            "________",
  3396.            "________"
  3397.        ],
  3398.        [
  3399.            "hole____",
  3400.            "________",
  3401.            "________",
  3402.            "________"
  3403.        ],
  3404.        [
  3405.            "dirt____",
  3406.            "________",
  3407.            "wall____",
  3408.            "________"
  3409.        ],
  3410.        [
  3411.            "stps____",
  3412.            "________",
  3413.            "________",
  3414.            "________"
  3415.        ],
  3416.        [
  3417.            "dirt____",
  3418.            "________",
  3419.            "________",
  3420.            "________"
  3421.        ],
  3422.        [
  3423.            "dirt____",
  3424.            "________",
  3425.            "________",
  3426.            "________"
  3427.        ],
  3428.        [
  3429.            "dirt____",
  3430.            "imp_____",
  3431.            "________",
  3432.            "________"
  3433.        ],
  3434.        [
  3435.            "dirt____",
  3436.            "________",
  3437.            "________",
  3438.            "________"
  3439.        ],
  3440.        [
  3441.            "dirt____",
  3442.            "dtby____",
  3443.            "________",
  3444.            "________"
  3445.        ],
  3446.        [
  3447.            "watr____",
  3448.            "________",
  3449.            "________",
  3450.            "________"
  3451.        ],
  3452.        [
  3453.            "dirt____",
  3454.            "________",
  3455.            "________",
  3456.            "________"
  3457.        ],
  3458.        [
  3459.            "dirt____",
  3460.            "________",
  3461.            "________",
  3462.            "________"
  3463.        ],
  3464.        [
  3465.            "dirt____",
  3466.            "________",
  3467.            "________",
  3468.            "________"
  3469.        ],
  3470.        [
  3471.            "dirt____",
  3472.            "________",
  3473.            "wall____",
  3474.            "________"
  3475.        ],
  3476.        [
  3477.            "dirt____",
  3478.            "________",
  3479.            "________",
  3480.            "________"
  3481.        ],
  3482.        [
  3483.            "dirt____",
  3484.            "dtby____",
  3485.            "________",
  3486.            "________"
  3487.        ],
  3488.        [
  3489.            "dirt____",
  3490.            "________",
  3491.            "________",
  3492.            "________"
  3493.        ],
  3494.        [
  3495.            "dirt____",
  3496.            "________",
  3497.            "wall____",
  3498.            "________"
  3499.        ]
  3500.    ],
  3501.    [
  3502.        [
  3503.            "hole____",
  3504.            "________",
  3505.            "wall____",
  3506.            "________"
  3507.        ],
  3508.        [
  3509.            "stps____",
  3510.            "________",
  3511.            "________",
  3512.            "________"
  3513.        ],
  3514.        [
  3515.            "hole____",
  3516.            "________",
  3517.            "________",
  3518.            "________"
  3519.        ],
  3520.        [
  3521.            "stps____",
  3522.            "________",
  3523.            "door____",
  3524.            "________"
  3525.        ],
  3526.        [
  3527.            "hole____",
  3528.            "________",
  3529.            "________",
  3530.            "________"
  3531.        ],
  3532.        [
  3533.            "dirt____",
  3534.            "________",
  3535.            "wall____",
  3536.            "________"
  3537.        ],
  3538.        [
  3539.            "dirt____",
  3540.            "________",
  3541.            "wall____",
  3542.            "________"
  3543.        ],
  3544.        [
  3545.            "hole____",
  3546.            "________",
  3547.            "________",
  3548.            "________"
  3549.        ],
  3550.        [
  3551.            "dirt____",
  3552.            "________",
  3553.            "________",
  3554.            "________"
  3555.        ],
  3556.        [
  3557.            "dirt____",
  3558.            "________",
  3559.            "________",
  3560.            "________"
  3561.        ],
  3562.        [
  3563.            "watr____",
  3564.            "________",
  3565.            "________",
  3566.            "________"
  3567.        ],
  3568.        [
  3569.            "dirt____",
  3570.            "________",
  3571.            "________",
  3572.            "________"
  3573.        ],
  3574.        [
  3575.            "dirt____",
  3576.            "________",
  3577.            "________",
  3578.            "________"
  3579.        ],
  3580.        [
  3581.            "dirt____",
  3582.            "________",
  3583.            "chst____",
  3584.            "________"
  3585.        ],
  3586.        [
  3587.            "dirt____",
  3588.            "________",
  3589.            "wall____",
  3590.            "________"
  3591.        ],
  3592.        [
  3593.            "dirt____",
  3594.            "________",
  3595.            "________",
  3596.            "________"
  3597.        ],
  3598.        [
  3599.            "dirt____",
  3600.            "________",
  3601.            "________",
  3602.            "________"
  3603.        ],
  3604.        [
  3605.            "dirt____",
  3606.            "________",
  3607.            "________",
  3608.            "________"
  3609.        ],
  3610.        [
  3611.            "dirt____",
  3612.            "________",
  3613.            "wall____",
  3614.            "________"
  3615.        ]
  3616.    ],
  3617.    [
  3618.        [
  3619.            "dirt____",
  3620.            "________",
  3621.            "wall____",
  3622.            "________"
  3623.        ],
  3624.        [
  3625.            "dirt____",
  3626.            "________",
  3627.            "________",
  3628.            "________"
  3629.        ],
  3630.        [
  3631.            "dirt____",
  3632.            "________",
  3633.            "________",
  3634.            "________"
  3635.        ],
  3636.        [
  3637.            "dirt____",
  3638.            "________",
  3639.            "wall____",
  3640.            "________"
  3641.        ],
  3642.        [
  3643.            "dirt____",
  3644.            "________",
  3645.            "________",
  3646.            "________"
  3647.        ],
  3648.        [
  3649.            "dirt____",
  3650.            "________",
  3651.            "________",
  3652.            "________"
  3653.        ],
  3654.        [
  3655.            "dirt____",
  3656.            "________",
  3657.            "________",
  3658.            "________"
  3659.        ],
  3660.        [
  3661.            "dirt____",
  3662.            "________",
  3663.            "________",
  3664.            "________"
  3665.        ],
  3666.        [
  3667.            "dirt____",
  3668.            "________",
  3669.            "wall____",
  3670.            "________"
  3671.        ],
  3672.        [
  3673.            "dirt____",
  3674.            "________",
  3675.            "wall____",
  3676.            "________"
  3677.        ],
  3678.        [
  3679.            "dirt____",
  3680.            "________",
  3681.            "wall____",
  3682.            "________"
  3683.        ],
  3684.        [
  3685.            "dirt____",
  3686.            "________",
  3687.            "wall____",
  3688.            "________"
  3689.        ],
  3690.        [
  3691.            "dirt____",
  3692.            "________",
  3693.            "wall____",
  3694.            "________"
  3695.        ],
  3696.        [
  3697.            "dirt____",
  3698.            "________",
  3699.            "wall____",
  3700.            "________"
  3701.        ],
  3702.        [
  3703.            "dirt____",
  3704.            "________",
  3705.            "wall____",
  3706.            "________"
  3707.        ],
  3708.        [
  3709.            "dirt____",
  3710.            "________",
  3711.            "________",
  3712.            "________"
  3713.        ],
  3714.        [
  3715.            "dirt____",
  3716.            "________",
  3717.            "wall____",
  3718.            "________"
  3719.        ],
  3720.        [
  3721.            "dirt____",
  3722.            "________",
  3723.            "________",
  3724.            "________"
  3725.        ],
  3726.        [
  3727.            "dirt____",
  3728.            "________",
  3729.            "wall____",
  3730.            "________"
  3731.        ]
  3732.    ],
  3733.    [
  3734.        [
  3735.            "dirt____",
  3736.            "________",
  3737.            "door____",
  3738.            "________"
  3739.        ],
  3740.        [
  3741.            "dirt____",
  3742.            "________",
  3743.            "________",
  3744.            "________"
  3745.        ],
  3746.        [
  3747.            "dirt____",
  3748.            "________",
  3749.            "chst____",
  3750.            "________"
  3751.        ],
  3752.        [
  3753.            "dirt____",
  3754.            "________",
  3755.            "wall____",
  3756.            "________"
  3757.        ],
  3758.        [
  3759.            "dirt____",
  3760.            "________",
  3761.            "chst____",
  3762.            "________"
  3763.        ],
  3764.        [
  3765.            "hole____",
  3766.            "________",
  3767.            "________",
  3768.            "________"
  3769.        ],
  3770.        [
  3771.            "hole____",
  3772.            "grml____",
  3773.            "________",
  3774.            "________"
  3775.        ],
  3776.        [
  3777.            "dirt____",
  3778.            "________",
  3779.            "________",
  3780.            "________"
  3781.        ],
  3782.        [
  3783.            "watr____",
  3784.            "________",
  3785.            "________",
  3786.            "________"
  3787.        ],
  3788.        [
  3789.            "dirt____",
  3790.            "________",
  3791.            "chst____",
  3792.            "________"
  3793.        ],
  3794.        [
  3795.            "stpw____",
  3796.            "________",
  3797.            "________",
  3798.            "________"
  3799.        ],
  3800.        [
  3801.            "watr____",
  3802.            "________",
  3803.            "________",
  3804.            "________"
  3805.        ],
  3806.        [
  3807.            "watr____",
  3808.            "________",
  3809.            "________",
  3810.            "________"
  3811.        ],
  3812.        [
  3813.            "dirt____",
  3814.            "________",
  3815.            "________",
  3816.            "________"
  3817.        ],
  3818.        [
  3819.            "dirt____",
  3820.            "________",
  3821.            "________",
  3822.            "________"
  3823.        ],
  3824.        [
  3825.            "dirt____",
  3826.            "________",
  3827.            "________",
  3828.            "________"
  3829.        ],
  3830.        [
  3831.            "dirt____",
  3832.            "________",
  3833.            "wall____",
  3834.            "________"
  3835.        ],
  3836.        [
  3837.            "dirt____",
  3838.            "________",
  3839.            "________",
  3840.            "________"
  3841.        ],
  3842.        [
  3843.            "dirt____",
  3844.            "________",
  3845.            "wall____",
  3846.            "________"
  3847.        ]
  3848.    ],
  3849.    [
  3850.        [
  3851.            "hole____",
  3852.            "________",
  3853.            "wall____",
  3854.            "________"
  3855.        ],
  3856.        [
  3857.            "dirt____",
  3858.            "________",
  3859.            "________",
  3860.            "________"
  3861.        ],
  3862.        [
  3863.            "hole____",
  3864.            "________",
  3865.            "________",
  3866.            "________"
  3867.        ],
  3868.        [
  3869.            "hole____",
  3870.            "________",
  3871.            "wall____",
  3872.            "________"
  3873.        ],
  3874.        [
  3875.            "hole____",
  3876.            "________",
  3877.            "________",
  3878.            "________"
  3879.        ],
  3880.        [
  3881.            "hole____",
  3882.            "dtby____",
  3883.            "________",
  3884.            "________"
  3885.        ],
  3886.        [
  3887.            "hole____",
  3888.            "________",
  3889.            "________",
  3890.            "________"
  3891.        ],
  3892.        [
  3893.            "dirt____",
  3894.            "________",
  3895.            "________",
  3896.            "________"
  3897.        ],
  3898.        [
  3899.            "watr____",
  3900.            "________",
  3901.            "________",
  3902.            "________"
  3903.        ],
  3904.        [
  3905.            "dirt____",
  3906.            "________",
  3907.            "________",
  3908.            "________"
  3909.        ],
  3910.        [
  3911.            "dirt____",
  3912.            "grml____",
  3913.            "________",
  3914.            "________"
  3915.        ],
  3916.        [
  3917.            "watr____",
  3918.            "________",
  3919.            "________",
  3920.            "________"
  3921.        ],
  3922.        [
  3923.            "watr____",
  3924.            "________",
  3925.            "________",
  3926.            "________"
  3927.        ],
  3928.        [
  3929.            "dirt____",
  3930.            "________",
  3931.            "________",
  3932.            "________"
  3933.        ],
  3934.        [
  3935.            "dirt____",
  3936.            "emgd____",
  3937.            "________",
  3938.            "________"
  3939.        ],
  3940.        [
  3941.            "dirt____",
  3942.            "________",
  3943.            "________",
  3944.            "________"
  3945.        ],
  3946.        [
  3947.            "dirt____",
  3948.            "________",
  3949.            "wall____",
  3950.            "________"
  3951.        ],
  3952.        [
  3953.            "dirt____",
  3954.            "________",
  3955.            "________",
  3956.            "________"
  3957.        ],
  3958.        [
  3959.            "dirt____",
  3960.            "________",
  3961.            "wall____",
  3962.            "________"
  3963.        ]
  3964.    ],
  3965.    [
  3966.        [
  3967.            "hole____",
  3968.            "________",
  3969.            "wall____",
  3970.            "________"
  3971.        ],
  3972.        [
  3973.            "dirt____",
  3974.            "________",
  3975.            "________",
  3976.            "________"
  3977.        ],
  3978.        [
  3979.            "hole____",
  3980.            "________",
  3981.            "________",
  3982.            "________"
  3983.        ],
  3984.        [
  3985.            "hole____",
  3986.            "________",
  3987.            "wall____",
  3988.            "________"
  3989.        ],
  3990.        [
  3991.            "hole____",
  3992.            "________",
  3993.            "________",
  3994.            "________"
  3995.        ],
  3996.        [
  3997.            "hole____",
  3998.            "________",
  3999.            "________",
  4000.            "________"
  4001.        ],
  4002.        [
  4003.            "hole____",
  4004.            "grml____",
  4005.            "________",
  4006.            "________"
  4007.        ],
  4008.        [
  4009.            "dirt____",
  4010.            "________",
  4011.            "________",
  4012.            "________"
  4013.        ],
  4014.        [
  4015.            "watr____",
  4016.            "________",
  4017.            "________",
  4018.            "________"
  4019.        ],
  4020.        [
  4021.            "dirt____",
  4022.            "grml____",
  4023.            "________",
  4024.            "________"
  4025.        ],
  4026.        [
  4027.            "dirt____",
  4028.            "________",
  4029.            "________",
  4030.            "________"
  4031.        ],
  4032.        [
  4033.            "watr____",
  4034.            "________",
  4035.            "________",
  4036.            "________"
  4037.        ],
  4038.        [
  4039.            "watr____",
  4040.            "________",
  4041.            "________",
  4042.            "________"
  4043.        ],
  4044.        [
  4045.            "dirt____",
  4046.            "________",
  4047.            "________",
  4048.            "________"
  4049.        ],
  4050.        [
  4051.            "dirt____",
  4052.            "________",
  4053.            "________",
  4054.            "________"
  4055.        ],
  4056.        [
  4057.            "dirt____",
  4058.            "________",
  4059.            "chst____",
  4060.            "________"
  4061.        ],
  4062.        [
  4063.            "dirt____",
  4064.            "________",
  4065.            "wall____",
  4066.            "________"
  4067.        ],
  4068.        [
  4069.            "dirt____",
  4070.            "________",
  4071.            "chst____",
  4072.            "________"
  4073.        ],
  4074.        [
  4075.            "dirt____",
  4076.            "________",
  4077.            "wall____",
  4078.            "________"
  4079.        ]
  4080.    ],
  4081.    [
  4082.        [
  4083.            "dirt____",
  4084.            "________",
  4085.            "wall____",
  4086.            "________"
  4087.        ],
  4088.        [
  4089.            "dirt____",
  4090.            "________",
  4091.            "wall____",
  4092.            "________"
  4093.        ],
  4094.        [
  4095.            "dirt____",
  4096.            "________",
  4097.            "wall____",
  4098.            "________"
  4099.        ],
  4100.        [
  4101.            "dirt____",
  4102.            "________",
  4103.            "wall____",
  4104.            "________"
  4105.        ],
  4106.        [
  4107.            "dirt____",
  4108.            "________",
  4109.            "wall____",
  4110.            "________"
  4111.        ],
  4112.        [
  4113.            "dirt____",
  4114.            "________",
  4115.            "wall____",
  4116.            "________"
  4117.        ],
  4118.        [
  4119.            "dirt____",
  4120.            "________",
  4121.            "wall____",
  4122.            "________"
  4123.        ],
  4124.        [
  4125.            "dirt____",
  4126.            "________",
  4127.            "wall____",
  4128.            "________"
  4129.        ],
  4130.        [
  4131.            "dirt____",
  4132.            "________",
  4133.            "wall____",
  4134.            "________"
  4135.        ],
  4136.        [
  4137.            "dirt____",
  4138.            "________",
  4139.            "wall____",
  4140.            "________"
  4141.        ],
  4142.        [
  4143.            "dirt____",
  4144.            "________",
  4145.            "wall____",
  4146.            "________"
  4147.        ],
  4148.        [
  4149.            "dirt____",
  4150.            "________",
  4151.            "wall____",
  4152.            "________"
  4153.        ],
  4154.        [
  4155.            "dirt____",
  4156.            "________",
  4157.            "wall____",
  4158.            "________"
  4159.        ],
  4160.        [
  4161.            "dirt____",
  4162.            "________",
  4163.            "wall____",
  4164.            "________"
  4165.        ],
  4166.        [
  4167.            "dirt____",
  4168.            "________",
  4169.            "wall____",
  4170.            "________"
  4171.        ],
  4172.        [
  4173.            "dirt____",
  4174.            "________",
  4175.            "wall____",
  4176.            "________"
  4177.        ],
  4178.        [
  4179.            "dirt____",
  4180.            "________",
  4181.            "wall____",
  4182.            "________"
  4183.        ],
  4184.        [
  4185.            "dirt____",
  4186.            "________",
  4187.            "wall____",
  4188.            "________"
  4189.        ],
  4190.        [
  4191.            "dirt____",
  4192.            "________",
  4193.            "wall____",
  4194.            "________"
  4195.        ]
  4196.    ]
  4197. ]
  4198.    
  4199.     full_map = create3DArrayBlock(`____`, 0,rawMap.length - 1, 0, rawMap[0].length - 1, 0, layers.gui );
  4200.  
  4201.     full_entity_stats = create3DArrayBlock([], 0,rawMap.length - 1, 0, rawMap[0].length - 1, 0, layers.gui );
  4202.  
  4203.     for(let y = 0; y < rawMap[0].length; y++ ){
  4204.         for(let x = 0; x < rawMap.length; x++ ){
  4205.             for(let z = 0; z < layers.gui; z++ ){
  4206.                
  4207.                 full_map[x][y][z] = left(rawMap[x][y][z]+`____`,4);
  4208.                
  4209.                 full_entity_stats[x][y][z] = default_entity_stats[left(full_map[x][y][z]+`____`,4)];
  4210.             }
  4211.         }
  4212.     }
  4213.    
  4214.     cx = randInt(0,full_map.length - 1);
  4215.     cy = randInt(0,full_map[0].length - 1);
  4216.  
  4217. }
  4218.  
  4219.  
  4220.  
  4221.  
  4222. // Function to reset the turn table
  4223. function turnReset ( ) {
  4224.    
  4225.     if(narration.length !== 0){
  4226.         logFeats(narration.join("\r\n"));
  4227.         narration = [];
  4228.     }
  4229.  
  4230.     try {
  4231.         turnTable = JSON.parse(JSON.stringify(prefab)); // Use deep copy to avoid reference issues
  4232.         logDebug("Turn table reset successfully.");
  4233.     } catch (error) {
  4234.         logError("Error resetting turn table:", error);
  4235.     }
  4236.    
  4237.     return true;
  4238. }
  4239.  
  4240. // Check if coordinates are out of bounds for the view
  4241. function oobView(coords) {
  4242.    
  4243.     const result = soob(coords, [
  4244.         [viewConstraints.viewMinX, viewConstraints.viewMaxX],
  4245.         [viewConstraints.viewMinY, viewConstraints.viewMaxY]
  4246.     ]);
  4247.     logDebug("oobView result for coords", coords, ":", result);
  4248.     return result;
  4249. }
  4250.  
  4251. // Check if coordinates are out of bounds for the map
  4252. function oobMap(coords) {
  4253.    
  4254.     const result = soob(coords, [
  4255.         [0, full_map.length - 1],
  4256.         [0, full_map[0].length - 1]
  4257.     ]);
  4258.     logDebug("oobMap result for coords", coords, ":", result);
  4259.     return result;
  4260. }
  4261.  
  4262. // Validate move direction for given coordinates
  4263. function validateMove(coords) {
  4264.     logDebug("Validating move for coords:", coords);
  4265.     if (!Array.isArray(coords) || coords.length !== 2) {
  4266.         // logError("Invalid coordinates:", coords);
  4267.         return false;
  4268.     }
  4269.  
  4270.     let isValid = oobMap(coords);
  4271.     if (isValid !== true) {
  4272.         logWarning("Coordinates out of map bounds:", coords);
  4273.         return false;
  4274.     }
  4275.  
  4276.     let [x, y] = coords;
  4277.     let direction = dice(`1d` + cardinals.length) - 1;
  4278.  
  4279.     if (direction === -1) {
  4280.         logWarning("Invalid dice roll direction:", direction);
  4281.         return false;
  4282.     }
  4283.  
  4284.     let x2 = x + cardinals[direction][0];
  4285.     let y2 = y + cardinals[direction][1];
  4286.  
  4287.     if (oobMap([x2, y2]) !== true) {
  4288.         logWarning("Destination out of map bounds:", [x2, y2]);
  4289.         return false;
  4290.     }
  4291.  
  4292.     if (turnTable[x][y].hadit === 1 || turnTable[x2][y2].hadit === 1) {
  4293.         logWarning("Turn already taken for these coordinates:", [x, y], [x2, y2]);
  4294.         return false;
  4295.     }
  4296.  
  4297.     // logDebug("Move direction validated:", direction);
  4298.     return direction;
  4299. }
  4300.  
  4301. // Execute turn logic for all critters
  4302. function takeTurns ( ) {
  4303.    
  4304.     logDebug("Executing takeTurns...");
  4305.     turnReset ( );
  4306.  
  4307.     for (let y = 0; y < full_map[0].length; y++) {
  4308.         for (let x = 0; x < full_map.length; x++) {
  4309.             critterAnimate([x, y]);
  4310.         }
  4311.     }
  4312.  
  4313.     turnReset ( );
  4314.     refreshGui ( );
  4315.     logDebug("Turn execution completed.");
  4316. }
  4317.  
  4318. // Function to animate critter movement
  4319. function critterAnimate(coords) {
  4320.    
  4321.     if (oobMap(coords) !== true) {
  4322.         return false;
  4323.     }
  4324.    
  4325.     let [x, y] = coords;
  4326.     let z = layers.critter;
  4327.  
  4328.     if (invalidName(full_map[x][y][layers.critter])){
  4329.         return false;
  4330.     }
  4331.  
  4332.     let direction = validateMove([x, y]);
  4333.    
  4334.     if ([false, 0].includes(direction)) {
  4335.         return direction;
  4336.     }
  4337.  
  4338.     let [x2, y2] = [x + cardinals[direction][0], y + cardinals[direction][1]];
  4339.    
  4340.     if (oobMap([x, y]) !== true || oobMap([x2, y2]) !== true) {
  4341.         return false;
  4342.     }
  4343.    
  4344.     queue.src.Map = full_map[x][y];
  4345.     queue.src.Stats = full_entity_stats[x][y];
  4346.  
  4347.     queue.dest.Map = full_map[x2][y2];
  4348.     queue.dest.Stats = full_entity_stats[x2][y2];
  4349.  
  4350.     // logFeats([queue.src.Map,queue.src.Stats]);
  4351.     // logFeats([queue.dest.Map,queue.dest.Stats]);
  4352.    
  4353.     if (!queue.src.Stats[layers.critter] && !queue.src.Stats[layers.critter].stats.card) {
  4354.         queue.src.Stats = default_entity_stats[full_map[x,y,z]];
  4355.     }
  4356.  
  4357.     if (!queue.dest.Stats[layers.critter] && !queue.dest.Stats[layers.critter].stats.card) {
  4358.         queue.dest.Stats = default_entity_stats[full_map[x2,y2,z]];
  4359.     }
  4360.  
  4361.     if (turnTable[x][y].hadit === 1 || turnTable[x2][y2].hadit === 1) {
  4362.         return false;
  4363.     }
  4364.  
  4365.     turnTable[x][y].hasit = 1;
  4366.     turnTable[x][y].hadit = 1;
  4367.  
  4368.     logFeats(`{${queue.src.Stats[layers.critter].stats.card.namesake}: '${queue.src.Stats[layers.critter].stats.card.action}'}`);
  4369.  
  4370.     switch(queue.src.Stats[layers.critter].stats.card.namesake){
  4371.     case ucwords(`Placeholder`):
  4372.     case ucwords(`Out Of Bounds`):
  4373.         // console.log(queue.src.Stats[layers.critter].stats.card.namesake);
  4374.         return null;
  4375.     default:   
  4376.         // console.log(queue.src.Stats[layers.critter].stats.card.namesake);
  4377.         break;
  4378.     }
  4379.    
  4380.     let actionRoster = sections(queue.src.Stats[layers.critter].stats.card.action,4);
  4381.    
  4382.     /*
  4383.     var default_action_stats = [];
  4384.    
  4385.     for(let $index = 0; $index < actionRoster.length; $index++){
  4386.         default_action_stats[actionRoster[$index]] = loadJSONDirect(`${host}/test dictionary/scripts/json/gamevars/actions/`+actionRoster[$index]+`.json`);
  4387.     }
  4388.     */
  4389.  
  4390.     let options = actionRoster;
  4391.    
  4392.     let choiceRoll = dice(`1d${options.length}`) - 1;
  4393.     let choice = options[choiceRoll];
  4394.  
  4395.     let choiceDirect = choice;
  4396.     let choiceName = ucwords('unknown');
  4397.  
  4398.     let srcCrit = inlineNames(queue.src.Map[layers.critter],4)[0];
  4399.     let destCrit = inlineNames(queue.dest.Map[layers.critter],4)[0];
  4400.  
  4401.     let srcName = ucwords(queue.src.Stats[layers.critter].stats.card.namesake);
  4402.     let destName = ucwords(queue.dest.Stats[layers.critter].stats.card.namesake);
  4403.    
  4404.  
  4405.     if (invalidName(destCrit,2)){
  4406.         destName = ucwords('clear passage');
  4407.     }
  4408.  
  4409.     if (choiceName !== ucwords('unknown')) {
  4410.         narration.push(`@ ${padCoord([x, y])}: ${srcName} attempted to wield their ${choiceName} ability upon the nearest adjacent ${ucwords(cardDirect[direction])}ward ${destName}.. (Rolled ${choiceRoll + 1} out of ${options.length})`);
  4411.     } else {
  4412.         return null;
  4413.     }
  4414.  
  4415.     if (invalidName(choice,2)){
  4416.         return null;
  4417.     }
  4418.  
  4419.     let functionName = `${attributes[z]}_${srcCrit}_${choice}`;
  4420.     let result = callAttributeFunction(functionName, queue);
  4421.  
  4422.     let Status = ``;
  4423.  
  4424.     if (result !== true) {
  4425.         Status = ucwords(`Failure`);
  4426.     } else {
  4427.         Status = ucwords(`Success`);
  4428.     }
  4429.  
  4430.     narration.push(`@ ${padCoord([x, y])}: ${srcName}'s attempted usage of their ${choiceName} ability resulted in ${Status}.`);
  4431.  
  4432.     if (result !== true) {
  4433.         return null;
  4434.     }
  4435.  
  4436.     full_map[x][y] = queue.src.Map;
  4437.     full_entity_stats[x][y] = queue.src.Stats;
  4438.    
  4439.     full_map[x2][y2] = queue.dest.Map;
  4440.     full_entity_stats[x2][y2] = queue.dest.Stats;
  4441.  
  4442.     return true;
  4443. }
  4444.  
  4445. // Function to move the critter from source to destination
  4446. function moveCritter(srcCoords, destCoords, z) {
  4447.     let [x, y] = srcCoords;
  4448.     let [x2, y2] = destCoords;
  4449.     logDebug(`Moving critter from (${x}, ${y}, ${z}) to (${x2}, ${y2}, ${z})`);
  4450.    
  4451.     for(let zi = 0; zi < layers.gui; zi++)
  4452.     {
  4453.  
  4454.         switch(zi){
  4455.         case layers.critter:
  4456.         case layers.ailment:
  4457.            
  4458.             // Swap critter positions  
  4459.             [
  4460.                 full_map[x][y][zi],
  4461.                 full_map[x2][y2][zi]
  4462.             ]
  4463.             =
  4464.             [
  4465.                 full_map[x2][y2][zi],
  4466.                 full_map[x][y][zi]
  4467.             ];
  4468.  
  4469.             // Update stats accordingly
  4470.             [
  4471.                 full_entity_stats[x][y][zi], full_entity_stats[x2][y2][zi]
  4472.             ]
  4473.             =
  4474.             [
  4475.                 full_entity_stats[x2][y2][zi], full_entity_stats[x][y][zi]
  4476.             ];
  4477.            
  4478.             break;
  4479.         }
  4480.     }
  4481.     // Update turnTable to reflect the move
  4482.     turnTable[x][y].hasit = 0;
  4483.     turnTable[x][y].hadit = 1;
  4484.     turnTable[x2][y2].hasit = 1;
  4485.     turnTable[x2][y2].hadit = 1;
  4486.     logDebug(`Critter moved successfully.`);
  4487.    
  4488. }
  4489.  
  4490. // Check if coordinates are valid
  4491. function validateCoords(coords) {
  4492.     if (!Array.isArray(coords) || coords.length !== 2) {
  4493.         logError("Invalid coordinates:", coords);
  4494.         return false;
  4495.     }
  4496.  
  4497.     let [x, y] = coords.map(c => parseInt(c, 10));
  4498.     if (isNaN(x) || isNaN(y)) {
  4499.         logError("Coordinates are not numbers:", coords);
  4500.         return false;
  4501.     }
  4502.  
  4503.     logDebug("Coordinates validated:", coords);
  4504.     return true;
  4505. }
  4506.  
  4507. // Check if coordinates are out of bounds and adjust if necessary
  4508. function soob(coords, rules) {
  4509.    
  4510.     if (!Array.isArray(coords) || !Array.isArray(rules) || coords.length !== rules.length) {
  4511.         logError("Invalid coordinates or rules for soob:", coords, rules);
  4512.         return false;
  4513.     }
  4514.    
  4515.     let [x,y] = coords;
  4516.  
  4517.     let adjustedCoords = coords.map((coord, index) => {
  4518.         let x = Math.round(parseInt(coord, 10));
  4519.         if (isNaN(x)) return false;
  4520.  
  4521.         let [min, max] = rules[index].map(rule => Math.round(parseInt(rule, 10)));
  4522.         if (isNaN(min) || isNaN(max)) return false;
  4523.  
  4524.         return Math.min(Math.max(x, min), max);
  4525.     });
  4526.  
  4527.     if (adjustedCoords.includes(false)) {
  4528.         logError("Adjusted coordinates contain invalid values:", adjustedCoords);
  4529.         return false;
  4530.     }
  4531.  
  4532.     const result = adjustedCoords.every((coord, index) => coord === coords[index]) ? true : adjustedCoords;
  4533.     logDebug("soob result for coords", coords, ":", result);
  4534.     return result;
  4535. }
  4536.  
  4537. // Function to validate and deep copy the data
  4538. function validateAndDeepCopy(data) {
  4539.     if (typeof data === 'undefined') {
  4540.         logError("Data is undefined, cannot deep copy");
  4541.         return null;
  4542.     }
  4543.  
  4544.     try {
  4545.         return JSON.parse(JSON.stringify(data));
  4546.     } catch (e) {
  4547.         logError("Failed to parse data:", data, e);
  4548.         return null;
  4549.     }
  4550. }
  4551.  
  4552. function padNumber(num, length, char = '0') {
  4553.   return num.toString ( ).padStart(length, char);
  4554. }
  4555. function padCoord(Coord){
  4556.     return '('+padNumber(Coord[0], 5, ' ')+','+padNumber(Coord[1], 5, ' ')+')';
  4557. }
  4558.  
  4559. // console.log(`Exists: "/GFX/dooropen.png"`,`(`+fileExists(`/GFX/dooropen.png`)+`)`);
  4560.  
  4561. /* Missing File: {{ #viewCursor=/test dictionary/scripts/json/gamevars/viewCursor.json }} */
  4562.  
  4563. // Hover position
  4564. viewCursor.hover.x = 0;
  4565. viewCursor.hover.y = 0;
  4566. viewCursor.hover.z = layers.gui;
  4567.  
  4568. // Hover previous position
  4569. viewCursor.prev.x = viewCursor.hover.x;
  4570. viewCursor.prev.y = viewCursor.hover.y;
  4571. viewCursor.prev.z = viewCursor.hover.z;
  4572.  
  4573. var viewSpanX = viewConstraints.viewMaxX - viewConstraints.viewMinX + 1;
  4574. var viewSpanY = viewConstraints.viewMaxY - viewConstraints.viewMinY + 1;
  4575.  
  4576. var purseSpanX = purseConstraints.purseMaxX - purseConstraints.purseMinX + 1;
  4577. var purseSpanY = purseConstraints.purseMaxY - purseConstraints.purseMinY + 1;
  4578.  
  4579. var cardDirect = [];
  4580. var cardinals = [];
  4581.  
  4582. var attributes = [
  4583.     "terrain",
  4584.     "critter",
  4585.     "object",
  4586.     "ailment",
  4587.     "gui"
  4588. ]
  4589. var entityRoster = {
  4590.     "terrain": [
  4591.         "____",
  4592.         "dirt",
  4593.         "hole",
  4594.         "watr",
  4595.         "stps",
  4596.         "stpw"
  4597.     ],
  4598.     "critter": [
  4599.         "____",
  4600.         "dtby",
  4601.         "spdr",
  4602.         "grml",
  4603.         "imp_",
  4604.         "emgd",
  4605.         "shkt",
  4606.         "pndx"
  4607.     ],
  4608.     "object": [
  4609.         "____",
  4610.         "door",
  4611.         "wall",
  4612.         "bldr",
  4613.         "ccts",
  4614.         "chst",
  4615.         "pwch"
  4616.     ],
  4617.     "ailment": [
  4618.         "____",
  4619.         "web_",
  4620.         "wing",
  4621.         "cure",
  4622.         "vnom",
  4623.         "fire",
  4624.         "loc1",
  4625.         "loc2",
  4626.         "loc3",
  4627.         "dust",
  4628.         "zzzz"
  4629.     ]
  4630. }
  4631.  
  4632. var actionRoster = [
  4633.     "____",
  4634.     "wstf",
  4635.     "bite",
  4636.     "burn",
  4637.     "cure",
  4638.     "dggr",
  4639.     "fire",
  4640.     "grpl",
  4641.     "ispt",
  4642.     "kick",
  4643.     "lash",
  4644.     "move",
  4645.     "pike",
  4646.     "pnch",
  4647.     "seed",
  4648.     "tngl",
  4649.     "vnom",
  4650.     "web_"
  4651. ]
  4652.  
  4653.  
  4654.  
  4655.  
  4656. var host = host || `http://test.puzzlum.org.2.test`;
  4657. var map = map || `demo`;
  4658.  
  4659.  
  4660. /* Missing File: {{ #/test dictionary/scripts/js/files.js }} */
  4661.  
  4662.  
  4663. // Load view portal constraints
  4664.  
  4665. var viewConstraints = {
  4666.     "viewMinX": -3,
  4667.     "viewMaxX": 3,
  4668.     "viewMinY": -3,
  4669.     "viewMaxY": 3,
  4670.     "viewMinZ": 0,
  4671.     "viewMaxZ": 4,
  4672.     "viewSpanX": 7,
  4673.     "viewSpanY": 7
  4674. }
  4675.  
  4676. var ViewPortal = create3DArrayBlock(`${special.emptyCell}`, viewConstraints.viewMinX, viewConstraints.viewMaxX, viewConstraints.viewMinY, viewConstraints.viewMaxY, 0, layers.gui);
  4677.  
  4678. // Load purse tray constraints
  4679.  
  4680. var purseConstraints = {
  4681.     "viewMinX": 0,
  4682.     "viewMaxX": 4,
  4683.     "viewMinY": 0,
  4684.     "viewMaxY": 3,
  4685.     "viewMinZ": 0,
  4686.     "viewMaxZ": 4,
  4687.     "viewSpanX": 5,
  4688.     "viewSpanY": 6
  4689. }
  4690.  
  4691. var PurseTray = create3DArrayBlock(`${special.emptyCell}`, purseConstraints.viewMinX, purseConstraints.viewMaxX, purseConstraints.viewMinY, purseConstraints.viewMaxY, 0, layers.gui)
  4692.  
  4693.  
  4694.  
  4695.  
  4696. const EQU = (a, b) => a === b;
  4697. const NEQ = (a, b) => a !== b;
  4698. const GTR = (a, b) => a > b;
  4699. const LSS = (a, b) => a < b;
  4700. const GEQ = (a, b) => a >= b;
  4701. const LEQ = (a, b) => a <= b;
  4702.  
  4703.  
  4704. var layers = {
  4705.     "terrain": 0,
  4706.     "critter": 1,
  4707.     "object": 2,
  4708.     "ailment": 3,
  4709.     "gui": 4
  4710. }
  4711.  
  4712.  
  4713. function loadJSONSync(url) {
  4714.    
  4715.     url = fixURL(url);
  4716.    
  4717.     var xhr = new XMLHttpRequest ( );
  4718.    
  4719.     xhr.open('GET', url, false); // 'false' makes the request synchronous
  4720.    
  4721.     xhr.send(null);
  4722.    
  4723.     if (xhr.status === 200) {
  4724.        
  4725.         return JSON.parse(xhr.responseText);
  4726.        
  4727.     } else {
  4728.        
  4729.         // throw new Error('Failed to load JSON');
  4730.         return [];
  4731.        
  4732.     }
  4733. }
  4734.  
  4735. function loadJSONDirect (url) {
  4736.    
  4737.     url = fixURL ( url );
  4738.    
  4739.     if( !fileExists ( url ) ) {
  4740.         return [];
  4741.     }
  4742.    
  4743.     try {
  4744.         var data = loadJSONSync(url);
  4745.         // // console.log(data);
  4746.     } catch (error) {
  4747.         return [];
  4748.         // console.error(error);
  4749.     }
  4750.     // console.log  ( basename(url), data );
  4751.     return data;
  4752. }
  4753.  
  4754. function fileExists ( url ) {
  4755.    
  4756.     url = fixURL( url );
  4757.    
  4758.     try {
  4759.         fetch ( url );
  4760.     } catch (error) {
  4761.         return false;
  4762.     }
  4763.     return true;
  4764. }
  4765.  
  4766. function basename(path = '', ext = '') {
  4767.     // Ensure path is a string
  4768.     path = path.toString ( );
  4769.  
  4770.     // Split the path by '/'
  4771.     let parts = path.split('/');
  4772.    
  4773.     // Get the last part of the path
  4774.     let base = parts[parts.length - 1];
  4775.    
  4776.     // If an extension is specified and the base ends with that extension
  4777.     if (ext && right(base, len(ext)) === ext) {
  4778.         // Remove the extension from the base
  4779.         base = left(base, len(base) - len(ext));
  4780.     }
  4781.    
  4782.     return base;
  4783. }
  4784.  
  4785. function fixURL ( url ) {
  4786.  
  4787.     // Ensure the URL starts with the host
  4788.     if ( !url.startsWith( host ) ) {
  4789.         url = `${host}${url}`;
  4790.     }
  4791.            
  4792.     // Replace spaces with %20
  4793.     url = url.replace(/ /g, '%20');
  4794.  
  4795.     return url;
  4796. }
  4797.  
  4798.  
  4799.  
  4800.  
  4801.  
  4802. var host = host || `http://test.puzzlum.org.2.test`;
  4803. var map = map || `demo`;
  4804.  
  4805. // Map position    
  4806. var cx = 0;
  4807. var cy = 0;
  4808.  
  4809. var tileW = 24;
  4810. var tileH = 24;
  4811.  
  4812. var gutterW = 8;
  4813. var gutterH = 8;
  4814.  
  4815. var viewCursor = {
  4816.     "hover": { "x": 0, "y": 0 },
  4817.     "prev": { "x": 0, "y": 0 },
  4818.     "click": { "x": 0, "y": 0 },
  4819.     "dragging": false,
  4820.     "dragStart": { "x": 0, "y": 0 },
  4821.     "dragEnd": { "x": 0, "y": 0 }
  4822. }
  4823.  
  4824.  
  4825. var canvasCursor = {
  4826.     "hover": { "x": 0, "y": 0 },
  4827.     "prev": { "x": 0, "y": 0 },
  4828.     "click": { "x": 0, "y": 0 },
  4829.     "dragging": false,
  4830.     "dragStart": { "x": 0, "y": 0 },
  4831.     "dragEnd": { "x": 0, "y": 0 }
  4832. }
  4833.  
  4834.  
  4835. var layers = {
  4836.     "terrain": 0,
  4837.     "critter": 1,
  4838.     "object": 2,
  4839.     "ailment": 3,
  4840.     "gui": 4
  4841. }
  4842.  
  4843. var rawMap = [
  4844.     [
  4845.         [
  4846.             "dirt____",
  4847.             "________",
  4848.             "wall____",
  4849.             "________"
  4850.         ],
  4851.         [
  4852.             "dirt____",
  4853.             "________",
  4854.             "wall____",
  4855.             "________"
  4856.         ],
  4857.         [
  4858.             "dirt____",
  4859.             "________",
  4860.             "wall____",
  4861.             "________"
  4862.         ],
  4863.         [
  4864.             "dirt____",
  4865.             "________",
  4866.             "wall____",
  4867.             "________"
  4868.         ],
  4869.         [
  4870.             "dirt____",
  4871.             "________",
  4872.             "wall____",
  4873.             "________"
  4874.         ],
  4875.         [
  4876.             "dirt____",
  4877.             "________",
  4878.             "wall____",
  4879.             "________"
  4880.         ],
  4881.         [
  4882.             "dirt____",
  4883.             "________",
  4884.             "wall____",
  4885.             "________"
  4886.         ],
  4887.         [
  4888.             "dirt____",
  4889.             "________",
  4890.             "wall____",
  4891.             "________"
  4892.         ],
  4893.         [
  4894.             "dirt____",
  4895.             "________",
  4896.             "wall____",
  4897.             "________"
  4898.         ],
  4899.         [
  4900.             "dirt____",
  4901.             "________",
  4902.             "wall____",
  4903.             "________"
  4904.         ],
  4905.         [
  4906.             "dirt____",
  4907.             "________",
  4908.             "wall____",
  4909.             "________"
  4910.         ],
  4911.         [
  4912.             "dirt____",
  4913.             "________",
  4914.             "wall____",
  4915.             "________"
  4916.         ],
  4917.         [
  4918.             "dirt____",
  4919.             "________",
  4920.             "wall____",
  4921.             "________"
  4922.         ],
  4923.         [
  4924.             "dirt____",
  4925.             "________",
  4926.             "wall____",
  4927.             "________"
  4928.         ],
  4929.         [
  4930.             "dirt____",
  4931.             "________",
  4932.             "wall____",
  4933.             "________"
  4934.         ],
  4935.         [
  4936.             "dirt____",
  4937.             "________",
  4938.             "wall____",
  4939.             "________"
  4940.         ],
  4941.         [
  4942.             "dirt____",
  4943.             "________",
  4944.             "wall____",
  4945.             "________"
  4946.         ],
  4947.         [
  4948.             "dirt____",
  4949.             "________",
  4950.             "wall____",
  4951.             "________"
  4952.         ],
  4953.         [
  4954.             "dirt____",
  4955.             "________",
  4956.             "wall____",
  4957.             "________"
  4958.         ]
  4959.     ],
  4960.     [
  4961.         [
  4962.             "dirt____",
  4963.             "________",
  4964.             "wall____",
  4965.             "________"
  4966.         ],
  4967.         [
  4968.             "dirt____",
  4969.             "________",
  4970.             "________",
  4971.             "________"
  4972.         ],
  4973.         [
  4974.             "dirt____",
  4975.             "spdr____",
  4976.             "________",
  4977.             "________"
  4978.         ],
  4979.         [
  4980.             "dirt____",
  4981.             "________",
  4982.             "wall____",
  4983.             "________"
  4984.         ],
  4985.         [
  4986.             "dirt____",
  4987.             "spdr____",
  4988.             "________",
  4989.             "________"
  4990.         ],
  4991.         [
  4992.             "dirt____",
  4993.             "________",
  4994.             "chst____",
  4995.             "________"
  4996.         ],
  4997.         [
  4998.             "dirt____",
  4999.             "________",
  5000.             "wall____",
  5001.             "________"
  5002.         ],
  5003.         [
  5004.             "dirt____",
  5005.             "________",
  5006.             "________",
  5007.             "________"
  5008.         ],
  5009.         [
  5010.             "dirt____",
  5011.             "emgd____",
  5012.             "________",
  5013.             "________"
  5014.         ],
  5015.         [
  5016.             "dirt____",
  5017.             "________",
  5018.             "________",
  5019.             "________"
  5020.         ],
  5021.         [
  5022.             "dirt____",
  5023.             "________",
  5024.             "wall____",
  5025.             "________"
  5026.         ],
  5027.         [
  5028.             "dirt____",
  5029.             "________",
  5030.             "________",
  5031.             "________"
  5032.         ],
  5033.         [
  5034.             "dirt____",
  5035.             "________",
  5036.             "________",
  5037.             "________"
  5038.         ],
  5039.         [
  5040.             "dirt____",
  5041.             "________",
  5042.             "wall____",
  5043.             "________"
  5044.         ],
  5045.         [
  5046.             "dirt____",
  5047.             "________",
  5048.             "________",
  5049.             "________"
  5050.         ],
  5051.         [
  5052.             "dirt____",
  5053.             "pndx____",
  5054.             "________",
  5055.             "________"
  5056.         ],
  5057.         [
  5058.             "dirt____",
  5059.             "________",
  5060.             "________",
  5061.             "________"
  5062.         ],
  5063.         [
  5064.             "dirt____",
  5065.             "________",
  5066.             "chst____",
  5067.             "________"
  5068.         ],
  5069.         [
  5070.             "dirt____",
  5071.             "________",
  5072.             "wall____",
  5073.             "________"
  5074.         ]
  5075.     ],
  5076.     [
  5077.         [
  5078.             "dirt____",
  5079.             "________",
  5080.             "wall____",
  5081.             "________"
  5082.         ],
  5083.         [
  5084.             "dirt____",
  5085.             "________",
  5086.             "________",
  5087.             "________"
  5088.         ],
  5089.         [
  5090.             "dirt____",
  5091.             "________",
  5092.             "________",
  5093.             "________"
  5094.         ],
  5095.         [
  5096.             "dirt____",
  5097.             "________",
  5098.             "wall____",
  5099.             "________"
  5100.         ],
  5101.         [
  5102.             "dirt____",
  5103.             "________",
  5104.             "________",
  5105.             "________"
  5106.         ],
  5107.         [
  5108.             "dirt____",
  5109.             "________",
  5110.             "________",
  5111.             "________"
  5112.         ],
  5113.         [
  5114.             "dirt____",
  5115.             "________",
  5116.             "________",
  5117.             "________"
  5118.         ],
  5119.         [
  5120.             "dirt____",
  5121.             "________",
  5122.             "________",
  5123.             "________"
  5124.         ],
  5125.         [
  5126.             "dirt____",
  5127.             "________",
  5128.             "________",
  5129.             "________"
  5130.         ],
  5131.         [
  5132.             "dirt____",
  5133.             "________",
  5134.             "________",
  5135.             "________"
  5136.         ],
  5137.         [
  5138.             "dirt____",
  5139.             "________",
  5140.             "________",
  5141.             "________"
  5142.         ],
  5143.         [
  5144.             "dirt____",
  5145.             "________",
  5146.             "________",
  5147.             "________"
  5148.         ],
  5149.         [
  5150.             "hole____",
  5151.             "________",
  5152.             "________",
  5153.             "________"
  5154.         ],
  5155.         [
  5156.             "hole____",
  5157.             "________",
  5158.             "________",
  5159.             "________"
  5160.         ],
  5161.         [
  5162.             "dirt____",
  5163.             "________",
  5164.             "________",
  5165.             "________"
  5166.         ],
  5167.         [
  5168.             "dirt____",
  5169.             "________",
  5170.             "________",
  5171.             "________"
  5172.         ],
  5173.         [
  5174.             "dirt____",
  5175.             "shkt____",
  5176.             "________",
  5177.             "________"
  5178.         ],
  5179.         [
  5180.             "dirt____",
  5181.             "________",
  5182.             "________",
  5183.             "________"
  5184.         ],
  5185.         [
  5186.             "dirt____",
  5187.             "________",
  5188.             "wall____",
  5189.             "________"
  5190.         ]
  5191.     ],
  5192.     [
  5193.         [
  5194.             "dirt____",
  5195.             "________",
  5196.             "wall____",
  5197.             "________"
  5198.         ],
  5199.         [
  5200.             "dirt____",
  5201.             "________",
  5202.             "________",
  5203.             "________"
  5204.         ],
  5205.         [
  5206.             "dirt____",
  5207.             "________",
  5208.             "________",
  5209.             "________"
  5210.         ],
  5211.         [
  5212.             "dirt____",
  5213.             "________",
  5214.             "wall____",
  5215.             "________"
  5216.         ],
  5217.         [
  5218.             "dirt____",
  5219.             "________",
  5220.             "________",
  5221.             "________"
  5222.         ],
  5223.         [
  5224.             "dirt____",
  5225.             "spdr____",
  5226.             "________",
  5227.             "________"
  5228.         ],
  5229.         [
  5230.             "dirt____",
  5231.             "________",
  5232.             "wall____",
  5233.             "________"
  5234.         ],
  5235.         [
  5236.             "dirt____",
  5237.             "________",
  5238.             "door____",
  5239.             "________"
  5240.         ],
  5241.         [
  5242.             "dirt____",
  5243.             "________",
  5244.             "wall____",
  5245.             "________"
  5246.         ],
  5247.         [
  5248.             "dirt____",
  5249.             "________",
  5250.             "wall____",
  5251.             "________"
  5252.         ],
  5253.         [
  5254.             "dirt____",
  5255.             "________",
  5256.             "wall____",
  5257.             "________"
  5258.         ],
  5259.         [
  5260.             "dirt____",
  5261.             "________",
  5262.             "________",
  5263.             "________"
  5264.         ],
  5265.         [
  5266.             "hole____",
  5267.             "________",
  5268.             "________",
  5269.             "________"
  5270.         ],
  5271.         [
  5272.             "hole____",
  5273.             "________",
  5274.             "________",
  5275.             "________"
  5276.         ],
  5277.         [
  5278.             "hole____",
  5279.             "________",
  5280.             "________",
  5281.             "________"
  5282.         ],
  5283.         [
  5284.             "dirt____",
  5285.             "________",
  5286.             "________",
  5287.             "________"
  5288.         ],
  5289.         [
  5290.             "dirt____",
  5291.             "________",
  5292.             "bldr____",
  5293.             "________"
  5294.         ],
  5295.         [
  5296.             "dirt____",
  5297.             "________",
  5298.             "________",
  5299.             "________"
  5300.         ],
  5301.         [
  5302.             "dirt____",
  5303.             "________",
  5304.             "wall____",
  5305.             "________"
  5306.         ]
  5307.     ],
  5308.     [
  5309.         [
  5310.             "dirt____",
  5311.             "________",
  5312.             "wall____",
  5313.             "________"
  5314.         ],
  5315.         [
  5316.             "dirt____",
  5317.             "spdr____",
  5318.             "________",
  5319.             "________"
  5320.         ],
  5321.         [
  5322.             "dirt____",
  5323.             "________",
  5324.             "________",
  5325.             "________"
  5326.         ],
  5327.         [
  5328.             "dirt____",
  5329.             "________",
  5330.             "wall____",
  5331.             "________"
  5332.         ],
  5333.         [
  5334.             "dirt____",
  5335.             "________",
  5336.             "________",
  5337.             "________"
  5338.         ],
  5339.         [
  5340.             "dirt____",
  5341.             "________",
  5342.             "________",
  5343.             "________"
  5344.         ],
  5345.         [
  5346.             "dirt____",
  5347.             "________",
  5348.             "wall____",
  5349.             "________"
  5350.         ],
  5351.         [
  5352.             "dirt____",
  5353.             "________",
  5354.             "bldr____",
  5355.             "________"
  5356.         ],
  5357.         [
  5358.             "dirt____",
  5359.             "________",
  5360.             "________",
  5361.             "________"
  5362.         ],
  5363.         [
  5364.             "dirt____",
  5365.             "________",
  5366.             "________",
  5367.             "________"
  5368.         ],
  5369.         [
  5370.             "dirt____",
  5371.             "________",
  5372.             "________",
  5373.             "web_____"
  5374.         ],
  5375.         [
  5376.             "dirt____",
  5377.             "________",
  5378.             "________",
  5379.             "________"
  5380.         ],
  5381.         [
  5382.             "hole____",
  5383.             "shkt____",
  5384.             "________",
  5385.             "________"
  5386.         ],
  5387.         [
  5388.             "stps____",
  5389.             "________",
  5390.             "________",
  5391.             "________"
  5392.         ],
  5393.         [
  5394.             "hole____",
  5395.             "________",
  5396.             "________",
  5397.             "________"
  5398.         ],
  5399.         [
  5400.             "dirt____",
  5401.             "________",
  5402.             "________",
  5403.             "________"
  5404.         ],
  5405.         [
  5406.             "dirt____",
  5407.             "________",
  5408.             "________",
  5409.             "________"
  5410.         ],
  5411.         [
  5412.             "dirt____",
  5413.             "________",
  5414.             "________",
  5415.             "________"
  5416.         ],
  5417.         [
  5418.             "dirt____",
  5419.             "________",
  5420.             "wall____",
  5421.             "________"
  5422.         ]
  5423.     ],
  5424.     [
  5425.         [
  5426.             "dirt____",
  5427.             "________",
  5428.             "door____",
  5429.             "________"
  5430.         ],
  5431.         [
  5432.             "dirt____",
  5433.             "________",
  5434.             "________",
  5435.             "________"
  5436.         ],
  5437.         [
  5438.             "dirt____",
  5439.             "spdr____",
  5440.             "________",
  5441.             "________"
  5442.         ],
  5443.         [
  5444.             "dirt____",
  5445.             "________",
  5446.             "wall____",
  5447.             "________"
  5448.         ],
  5449.         [
  5450.             "dirt____",
  5451.             "spdr____",
  5452.             "________",
  5453.             "________"
  5454.         ],
  5455.         [
  5456.             "dirt____",
  5457.             "________",
  5458.             "________",
  5459.             "________"
  5460.         ],
  5461.         [
  5462.             "dirt____",
  5463.             "________",
  5464.             "wall____",
  5465.             "________"
  5466.         ],
  5467.         [
  5468.             "hole____",
  5469.             "________",
  5470.             "________",
  5471.             "________"
  5472.         ],
  5473.         [
  5474.             "dirt____",
  5475.             "________",
  5476.             "bldr____",
  5477.             "________"
  5478.         ],
  5479.         [
  5480.             "dirt____",
  5481.             "________",
  5482.             "________",
  5483.             "________"
  5484.         ],
  5485.         [
  5486.             "dirt____",
  5487.             "________",
  5488.             "wall____",
  5489.             "________"
  5490.         ],
  5491.         [
  5492.             "dirt____",
  5493.             "________",
  5494.             "chst____",
  5495.             "________"
  5496.         ],
  5497.         [
  5498.             "dirt____",
  5499.             "________",
  5500.             "wall____",
  5501.             "________"
  5502.         ],
  5503.         [
  5504.             "dirt____",
  5505.             "________",
  5506.             "________",
  5507.             "________"
  5508.         ],
  5509.         [
  5510.             "dirt____",
  5511.             "________",
  5512.             "________",
  5513.             "________"
  5514.         ],
  5515.         [
  5516.             "dirt____",
  5517.             "________",
  5518.             "________",
  5519.             "________"
  5520.         ],
  5521.         [
  5522.             "dirt____",
  5523.             "________",
  5524.             "________",
  5525.             "________"
  5526.         ],
  5527.         [
  5528.             "dirt____",
  5529.             "________",
  5530.             "________",
  5531.             "________"
  5532.         ],
  5533.         [
  5534.             "dirt____",
  5535.             "________",
  5536.             "wall____",
  5537.             "________"
  5538.         ]
  5539.     ],
  5540.     [
  5541.         [
  5542.             "dirt____",
  5543.             "________",
  5544.             "wall____",
  5545.             "________"
  5546.         ],
  5547.         [
  5548.             "dirt____",
  5549.             "________",
  5550.             "________",
  5551.             "________"
  5552.         ],
  5553.         [
  5554.             "dirt____",
  5555.             "________",
  5556.             "________",
  5557.             "________"
  5558.         ],
  5559.         [
  5560.             "dirt____",
  5561.             "________",
  5562.             "wall____",
  5563.             "________"
  5564.         ],
  5565.         [
  5566.             "dirt____",
  5567.             "________",
  5568.             "________",
  5569.             "________"
  5570.         ],
  5571.         [
  5572.             "dirt____",
  5573.             "________",
  5574.             "wall____",
  5575.             "________"
  5576.         ],
  5577.         [
  5578.             "dirt____",
  5579.             "________",
  5580.             "wall____",
  5581.             "________"
  5582.         ],
  5583.         [
  5584.             "dirt____",
  5585.             "________",
  5586.             "________",
  5587.             "________"
  5588.         ],
  5589.         [
  5590.             "hole____",
  5591.             "________",
  5592.             "________",
  5593.             "________"
  5594.         ],
  5595.         [
  5596.             "dirt____",
  5597.             "________",
  5598.             "wall____",
  5599.             "________"
  5600.         ],
  5601.         [
  5602.             "dirt____",
  5603.             "________",
  5604.             "wall____",
  5605.             "________"
  5606.         ],
  5607.         [
  5608.             "dirt____",
  5609.             "________",
  5610.             "wall____",
  5611.             "________"
  5612.         ],
  5613.         [
  5614.             "dirt____",
  5615.             "________",
  5616.             "wall____",
  5617.             "________"
  5618.         ],
  5619.         [
  5620.             "dirt____",
  5621.             "________",
  5622.             "door____",
  5623.             "________"
  5624.         ],
  5625.         [
  5626.             "dirt____",
  5627.             "________",
  5628.             "wall____",
  5629.             "________"
  5630.         ],
  5631.         [
  5632.             "dirt____",
  5633.             "________",
  5634.             "wall____",
  5635.             "________"
  5636.         ],
  5637.         [
  5638.             "hole____",
  5639.             "________",
  5640.             "________",
  5641.             "________"
  5642.         ],
  5643.         [
  5644.             "dirt____",
  5645.             "________",
  5646.             "wall____",
  5647.             "________"
  5648.         ],
  5649.         [
  5650.             "dirt____",
  5651.             "________",
  5652.             "wall____",
  5653.             "________"
  5654.         ]
  5655.     ],
  5656.     [
  5657.         [
  5658.             "dirt____",
  5659.             "________",
  5660.             "wall____",
  5661.             "________"
  5662.         ],
  5663.         [
  5664.             "dirt____",
  5665.             "________",
  5666.             "________",
  5667.             "________"
  5668.         ],
  5669.         [
  5670.             "dirt____",
  5671.             "________",
  5672.             "________",
  5673.             "________"
  5674.         ],
  5675.         [
  5676.             "dirt____",
  5677.             "________",
  5678.             "door____",
  5679.             "________"
  5680.         ],
  5681.         [
  5682.             "dirt____",
  5683.             "________",
  5684.             "________",
  5685.             "________"
  5686.         ],
  5687.         [
  5688.             "dirt____",
  5689.             "________",
  5690.             "________",
  5691.             "________"
  5692.         ],
  5693.         [
  5694.             "dirt____",
  5695.             "________",
  5696.             "________",
  5697.             "________"
  5698.         ],
  5699.         [
  5700.             "dirt____",
  5701.             "spdr____",
  5702.             "________",
  5703.             "________"
  5704.         ],
  5705.         [
  5706.             "dirt____",
  5707.             "________",
  5708.             "________",
  5709.             "________"
  5710.         ],
  5711.         [
  5712.             "dirt____",
  5713.             "________",
  5714.             "________",
  5715.             "________"
  5716.         ],
  5717.         [
  5718.             "watr____",
  5719.             "________",
  5720.             "________",
  5721.             "________"
  5722.         ],
  5723.         [
  5724.             "dirt____",
  5725.             "________",
  5726.             "________",
  5727.             "________"
  5728.         ],
  5729.         [
  5730.             "dirt____",
  5731.             "________",
  5732.             "bldr____",
  5733.             "________"
  5734.         ],
  5735.         [
  5736.             "dirt____",
  5737.             "________",
  5738.             "________",
  5739.             "________"
  5740.         ],
  5741.         [
  5742.             "dirt____",
  5743.             "________",
  5744.             "wall____",
  5745.             "________"
  5746.         ],
  5747.         [
  5748.             "dirt____",
  5749.             "________",
  5750.             "________",
  5751.             "________"
  5752.         ],
  5753.         [
  5754.             "dirt____",
  5755.             "________",
  5756.             "________",
  5757.             "________"
  5758.         ],
  5759.         [
  5760.             "dirt____",
  5761.             "dtby____",
  5762.             "________",
  5763.             "________"
  5764.         ],
  5765.         [
  5766.             "dirt____",
  5767.             "________",
  5768.             "wall____",
  5769.             "________"
  5770.         ]
  5771.     ],
  5772.     [
  5773.         [
  5774.             "dirt____",
  5775.             "________",
  5776.             "wall____",
  5777.             "________"
  5778.         ],
  5779.         [
  5780.             "dirt____",
  5781.             "________",
  5782.             "wall____",
  5783.             "________"
  5784.         ],
  5785.         [
  5786.             "dirt____",
  5787.             "________",
  5788.             "wall____",
  5789.             "________"
  5790.         ],
  5791.         [
  5792.             "dirt____",
  5793.             "________",
  5794.             "wall____",
  5795.             "________"
  5796.         ],
  5797.         [
  5798.             "dirt____",
  5799.             "________",
  5800.             "wall____",
  5801.             "________"
  5802.         ],
  5803.         [
  5804.             "dirt____",
  5805.             "________",
  5806.             "________",
  5807.             "________"
  5808.         ],
  5809.         [
  5810.             "dirt____",
  5811.             "pndx____",
  5812.             "________",
  5813.             "________"
  5814.         ],
  5815.         [
  5816.             "dirt____",
  5817.             "________",
  5818.             "________",
  5819.             "________"
  5820.         ],
  5821.         [
  5822.             "dirt____",
  5823.             "________",
  5824.             "________",
  5825.             "________"
  5826.         ],
  5827.         [
  5828.             "dirt____",
  5829.             "________",
  5830.             "________",
  5831.             "________"
  5832.         ],
  5833.         [
  5834.             "watr____",
  5835.             "________",
  5836.             "________",
  5837.             "________"
  5838.         ],
  5839.         [
  5840.             "dirt____",
  5841.             "________",
  5842.             "________",
  5843.             "________"
  5844.         ],
  5845.         [
  5846.             "dirt____",
  5847.             "shkt____",
  5848.             "________",
  5849.             "________"
  5850.         ],
  5851.         [
  5852.             "dirt____",
  5853.             "________",
  5854.             "________",
  5855.             "________"
  5856.         ],
  5857.         [
  5858.             "dirt____",
  5859.             "________",
  5860.             "wall____",
  5861.             "________"
  5862.         ],
  5863.         [
  5864.             "dirt____",
  5865.             "________",
  5866.             "________",
  5867.             "________"
  5868.         ],
  5869.         [
  5870.             "dirt____",
  5871.             "________",
  5872.             "________",
  5873.             "________"
  5874.         ],
  5875.         [
  5876.             "dirt____",
  5877.             "dtby____",
  5878.             "________",
  5879.             "________"
  5880.         ],
  5881.         [
  5882.             "dirt____",
  5883.             "________",
  5884.             "wall____",
  5885.             "________"
  5886.         ]
  5887.     ],
  5888.     [
  5889.         [
  5890.             "stps____",
  5891.             "________",
  5892.             "wall____",
  5893.             "________"
  5894.         ],
  5895.         [
  5896.             "hole____",
  5897.             "________",
  5898.             "________",
  5899.             "________"
  5900.         ],
  5901.         [
  5902.             "hole____",
  5903.             "________",
  5904.             "________",
  5905.             "________"
  5906.         ],
  5907.         [
  5908.             "dirt____",
  5909.             "________",
  5910.             "wall____",
  5911.             "________"
  5912.         ],
  5913.         [
  5914.             "stps____",
  5915.             "________",
  5916.             "________",
  5917.             "________"
  5918.         ],
  5919.         [
  5920.             "dirt____",
  5921.             "________",
  5922.             "________",
  5923.             "________"
  5924.         ],
  5925.         [
  5926.             "dirt____",
  5927.             "________",
  5928.             "________",
  5929.             "________"
  5930.         ],
  5931.         [
  5932.             "dirt____",
  5933.             "imp_____",
  5934.             "________",
  5935.             "________"
  5936.         ],
  5937.         [
  5938.             "dirt____",
  5939.             "________",
  5940.             "________",
  5941.             "________"
  5942.         ],
  5943.         [
  5944.             "dirt____",
  5945.             "dtby____",
  5946.             "________",
  5947.             "________"
  5948.         ],
  5949.         [
  5950.             "watr____",
  5951.             "________",
  5952.             "________",
  5953.             "________"
  5954.         ],
  5955.         [
  5956.             "dirt____",
  5957.             "________",
  5958.             "________",
  5959.             "________"
  5960.         ],
  5961.         [
  5962.             "dirt____",
  5963.             "________",
  5964.             "________",
  5965.             "________"
  5966.         ],
  5967.         [
  5968.             "dirt____",
  5969.             "________",
  5970.             "________",
  5971.             "________"
  5972.         ],
  5973.         [
  5974.             "dirt____",
  5975.             "________",
  5976.             "wall____",
  5977.             "________"
  5978.         ],
  5979.         [
  5980.             "dirt____",
  5981.             "________",
  5982.             "________",
  5983.             "________"
  5984.         ],
  5985.         [
  5986.             "dirt____",
  5987.             "dtby____",
  5988.             "________",
  5989.             "________"
  5990.         ],
  5991.         [
  5992.             "dirt____",
  5993.             "________",
  5994.             "________",
  5995.             "________"
  5996.         ],
  5997.         [
  5998.             "dirt____",
  5999.             "________",
  6000.             "wall____",
  6001.             "________"
  6002.         ]
  6003.     ],
  6004.     [
  6005.         [
  6006.             "hole____",
  6007.             "________",
  6008.             "wall____",
  6009.             "________"
  6010.         ],
  6011.         [
  6012.             "stps____",
  6013.             "________",
  6014.             "________",
  6015.             "________"
  6016.         ],
  6017.         [
  6018.             "hole____",
  6019.             "________",
  6020.             "________",
  6021.             "________"
  6022.         ],
  6023.         [
  6024.             "stps____",
  6025.             "________",
  6026.             "door____",
  6027.             "________"
  6028.         ],
  6029.         [
  6030.             "hole____",
  6031.             "________",
  6032.             "________",
  6033.             "________"
  6034.         ],
  6035.         [
  6036.             "dirt____",
  6037.             "________",
  6038.             "wall____",
  6039.             "________"
  6040.         ],
  6041.         [
  6042.             "dirt____",
  6043.             "________",
  6044.             "wall____",
  6045.             "________"
  6046.         ],
  6047.         [
  6048.             "hole____",
  6049.             "________",
  6050.             "________",
  6051.             "________"
  6052.         ],
  6053.         [
  6054.             "dirt____",
  6055.             "________",
  6056.             "________",
  6057.             "________"
  6058.         ],
  6059.         [
  6060.             "dirt____",
  6061.             "________",
  6062.             "________",
  6063.             "________"
  6064.         ],
  6065.         [
  6066.             "watr____",
  6067.             "________",
  6068.             "________",
  6069.             "________"
  6070.         ],
  6071.         [
  6072.             "dirt____",
  6073.             "________",
  6074.             "________",
  6075.             "________"
  6076.         ],
  6077.         [
  6078.             "dirt____",
  6079.             "________",
  6080.             "________",
  6081.             "________"
  6082.         ],
  6083.         [
  6084.             "dirt____",
  6085.             "________",
  6086.             "chst____",
  6087.             "________"
  6088.         ],
  6089.         [
  6090.             "dirt____",
  6091.             "________",
  6092.             "wall____",
  6093.             "________"
  6094.         ],
  6095.         [
  6096.             "dirt____",
  6097.             "________",
  6098.             "________",
  6099.             "________"
  6100.         ],
  6101.         [
  6102.             "dirt____",
  6103.             "________",
  6104.             "________",
  6105.             "________"
  6106.         ],
  6107.         [
  6108.             "dirt____",
  6109.             "________",
  6110.             "________",
  6111.             "________"
  6112.         ],
  6113.         [
  6114.             "dirt____",
  6115.             "________",
  6116.             "wall____",
  6117.             "________"
  6118.         ]
  6119.     ],
  6120.     [
  6121.         [
  6122.             "dirt____",
  6123.             "________",
  6124.             "wall____",
  6125.             "________"
  6126.         ],
  6127.         [
  6128.             "dirt____",
  6129.             "________",
  6130.             "________",
  6131.             "________"
  6132.         ],
  6133.         [
  6134.             "dirt____",
  6135.             "________",
  6136.             "________",
  6137.             "________"
  6138.         ],
  6139.         [
  6140.             "dirt____",
  6141.             "________",
  6142.             "wall____",
  6143.             "________"
  6144.         ],
  6145.         [
  6146.             "dirt____",
  6147.             "________",
  6148.             "________",
  6149.             "________"
  6150.         ],
  6151.         [
  6152.             "dirt____",
  6153.             "________",
  6154.             "________",
  6155.             "________"
  6156.         ],
  6157.         [
  6158.             "dirt____",
  6159.             "________",
  6160.             "________",
  6161.             "________"
  6162.         ],
  6163.         [
  6164.             "dirt____",
  6165.             "________",
  6166.             "________",
  6167.             "________"
  6168.         ],
  6169.         [
  6170.             "dirt____",
  6171.             "________",
  6172.             "wall____",
  6173.             "________"
  6174.         ],
  6175.         [
  6176.             "dirt____",
  6177.             "________",
  6178.             "wall____",
  6179.             "________"
  6180.         ],
  6181.         [
  6182.             "dirt____",
  6183.             "________",
  6184.             "wall____",
  6185.             "________"
  6186.         ],
  6187.         [
  6188.             "dirt____",
  6189.             "________",
  6190.             "wall____",
  6191.             "________"
  6192.         ],
  6193.         [
  6194.             "dirt____",
  6195.             "________",
  6196.             "wall____",
  6197.             "________"
  6198.         ],
  6199.         [
  6200.             "dirt____",
  6201.             "________",
  6202.             "wall____",
  6203.             "________"
  6204.         ],
  6205.         [
  6206.             "dirt____",
  6207.             "________",
  6208.             "wall____",
  6209.             "________"
  6210.         ],
  6211.         [
  6212.             "dirt____",
  6213.             "________",
  6214.             "________",
  6215.             "________"
  6216.         ],
  6217.         [
  6218.             "dirt____",
  6219.             "________",
  6220.             "wall____",
  6221.             "________"
  6222.         ],
  6223.         [
  6224.             "dirt____",
  6225.             "________",
  6226.             "________",
  6227.             "________"
  6228.         ],
  6229.         [
  6230.             "dirt____",
  6231.             "________",
  6232.             "wall____",
  6233.             "________"
  6234.         ]
  6235.     ],
  6236.     [
  6237.         [
  6238.             "dirt____",
  6239.             "________",
  6240.             "door____",
  6241.             "________"
  6242.         ],
  6243.         [
  6244.             "dirt____",
  6245.             "________",
  6246.             "________",
  6247.             "________"
  6248.         ],
  6249.         [
  6250.             "dirt____",
  6251.             "________",
  6252.             "chst____",
  6253.             "________"
  6254.         ],
  6255.         [
  6256.             "dirt____",
  6257.             "________",
  6258.             "wall____",
  6259.             "________"
  6260.         ],
  6261.         [
  6262.             "dirt____",
  6263.             "________",
  6264.             "chst____",
  6265.             "________"
  6266.         ],
  6267.         [
  6268.             "hole____",
  6269.             "________",
  6270.             "________",
  6271.             "________"
  6272.         ],
  6273.         [
  6274.             "hole____",
  6275.             "grml____",
  6276.             "________",
  6277.             "________"
  6278.         ],
  6279.         [
  6280.             "dirt____",
  6281.             "________",
  6282.             "________",
  6283.             "________"
  6284.         ],
  6285.         [
  6286.             "watr____",
  6287.             "________",
  6288.             "________",
  6289.             "________"
  6290.         ],
  6291.         [
  6292.             "dirt____",
  6293.             "________",
  6294.             "chst____",
  6295.             "________"
  6296.         ],
  6297.         [
  6298.             "stpw____",
  6299.             "________",
  6300.             "________",
  6301.             "________"
  6302.         ],
  6303.         [
  6304.             "watr____",
  6305.             "________",
  6306.             "________",
  6307.             "________"
  6308.         ],
  6309.         [
  6310.             "watr____",
  6311.             "________",
  6312.             "________",
  6313.             "________"
  6314.         ],
  6315.         [
  6316.             "dirt____",
  6317.             "________",
  6318.             "________",
  6319.             "________"
  6320.         ],
  6321.         [
  6322.             "dirt____",
  6323.             "________",
  6324.             "________",
  6325.             "________"
  6326.         ],
  6327.         [
  6328.             "dirt____",
  6329.             "________",
  6330.             "________",
  6331.             "________"
  6332.         ],
  6333.         [
  6334.             "dirt____",
  6335.             "________",
  6336.             "wall____",
  6337.             "________"
  6338.         ],
  6339.         [
  6340.             "dirt____",
  6341.             "________",
  6342.             "________",
  6343.             "________"
  6344.         ],
  6345.         [
  6346.             "dirt____",
  6347.             "________",
  6348.             "wall____",
  6349.             "________"
  6350.         ]
  6351.     ],
  6352.     [
  6353.         [
  6354.             "hole____",
  6355.             "________",
  6356.             "wall____",
  6357.             "________"
  6358.         ],
  6359.         [
  6360.             "dirt____",
  6361.             "________",
  6362.             "________",
  6363.             "________"
  6364.         ],
  6365.         [
  6366.             "hole____",
  6367.             "________",
  6368.             "________",
  6369.             "________"
  6370.         ],
  6371.         [
  6372.             "hole____",
  6373.             "________",
  6374.             "wall____",
  6375.             "________"
  6376.         ],
  6377.         [
  6378.             "hole____",
  6379.             "________",
  6380.             "________",
  6381.             "________"
  6382.         ],
  6383.         [
  6384.             "hole____",
  6385.             "dtby____",
  6386.             "________",
  6387.             "________"
  6388.         ],
  6389.         [
  6390.             "hole____",
  6391.             "________",
  6392.             "________",
  6393.             "________"
  6394.         ],
  6395.         [
  6396.             "dirt____",
  6397.             "________",
  6398.             "________",
  6399.             "________"
  6400.         ],
  6401.         [
  6402.             "watr____",
  6403.             "________",
  6404.             "________",
  6405.             "________"
  6406.         ],
  6407.         [
  6408.             "dirt____",
  6409.             "________",
  6410.             "________",
  6411.             "________"
  6412.         ],
  6413.         [
  6414.             "dirt____",
  6415.             "grml____",
  6416.             "________",
  6417.             "________"
  6418.         ],
  6419.         [
  6420.             "watr____",
  6421.             "________",
  6422.             "________",
  6423.             "________"
  6424.         ],
  6425.         [
  6426.             "watr____",
  6427.             "________",
  6428.             "________",
  6429.             "________"
  6430.         ],
  6431.         [
  6432.             "dirt____",
  6433.             "________",
  6434.             "________",
  6435.             "________"
  6436.         ],
  6437.         [
  6438.             "dirt____",
  6439.             "emgd____",
  6440.             "________",
  6441.             "________"
  6442.         ],
  6443.         [
  6444.             "dirt____",
  6445.             "________",
  6446.             "________",
  6447.             "________"
  6448.         ],
  6449.         [
  6450.             "dirt____",
  6451.             "________",
  6452.             "wall____",
  6453.             "________"
  6454.         ],
  6455.         [
  6456.             "dirt____",
  6457.             "________",
  6458.             "________",
  6459.             "________"
  6460.         ],
  6461.         [
  6462.             "dirt____",
  6463.             "________",
  6464.             "wall____",
  6465.             "________"
  6466.         ]
  6467.     ],
  6468.     [
  6469.         [
  6470.             "hole____",
  6471.             "________",
  6472.             "wall____",
  6473.             "________"
  6474.         ],
  6475.         [
  6476.             "dirt____",
  6477.             "________",
  6478.             "________",
  6479.             "________"
  6480.         ],
  6481.         [
  6482.             "hole____",
  6483.             "________",
  6484.             "________",
  6485.             "________"
  6486.         ],
  6487.         [
  6488.             "hole____",
  6489.             "________",
  6490.             "wall____",
  6491.             "________"
  6492.         ],
  6493.         [
  6494.             "hole____",
  6495.             "________",
  6496.             "________",
  6497.             "________"
  6498.         ],
  6499.         [
  6500.             "hole____",
  6501.             "________",
  6502.             "________",
  6503.             "________"
  6504.         ],
  6505.         [
  6506.             "hole____",
  6507.             "grml____",
  6508.             "________",
  6509.             "________"
  6510.         ],
  6511.         [
  6512.             "dirt____",
  6513.             "________",
  6514.             "________",
  6515.             "________"
  6516.         ],
  6517.         [
  6518.             "watr____",
  6519.             "________",
  6520.             "________",
  6521.             "________"
  6522.         ],
  6523.         [
  6524.             "dirt____",
  6525.             "grml____",
  6526.             "________",
  6527.             "________"
  6528.         ],
  6529.         [
  6530.             "dirt____",
  6531.             "________",
  6532.             "________",
  6533.             "________"
  6534.         ],
  6535.         [
  6536.             "watr____",
  6537.             "________",
  6538.             "________",
  6539.             "________"
  6540.         ],
  6541.         [
  6542.             "watr____",
  6543.             "________",
  6544.             "________",
  6545.             "________"
  6546.         ],
  6547.         [
  6548.             "dirt____",
  6549.             "________",
  6550.             "________",
  6551.             "________"
  6552.         ],
  6553.         [
  6554.             "dirt____",
  6555.             "________",
  6556.             "________",
  6557.             "________"
  6558.         ],
  6559.         [
  6560.             "dirt____",
  6561.             "________",
  6562.             "chst____",
  6563.             "________"
  6564.         ],
  6565.         [
  6566.             "dirt____",
  6567.             "________",
  6568.             "wall____",
  6569.             "________"
  6570.         ],
  6571.         [
  6572.             "dirt____",
  6573.             "________",
  6574.             "chst____",
  6575.             "________"
  6576.         ],
  6577.         [
  6578.             "dirt____",
  6579.             "________",
  6580.             "wall____",
  6581.             "________"
  6582.         ]
  6583.     ],
  6584.     [
  6585.         [
  6586.             "dirt____",
  6587.             "________",
  6588.             "wall____",
  6589.             "________"
  6590.         ],
  6591.         [
  6592.             "dirt____",
  6593.             "________",
  6594.             "wall____",
  6595.             "________"
  6596.         ],
  6597.         [
  6598.             "dirt____",
  6599.             "________",
  6600.             "wall____",
  6601.             "________"
  6602.         ],
  6603.         [
  6604.             "dirt____",
  6605.             "________",
  6606.             "wall____",
  6607.             "________"
  6608.         ],
  6609.         [
  6610.             "dirt____",
  6611.             "________",
  6612.             "wall____",
  6613.             "________"
  6614.         ],
  6615.         [
  6616.             "dirt____",
  6617.             "________",
  6618.             "wall____",
  6619.             "________"
  6620.         ],
  6621.         [
  6622.             "dirt____",
  6623.             "________",
  6624.             "wall____",
  6625.             "________"
  6626.         ],
  6627.         [
  6628.             "dirt____",
  6629.             "________",
  6630.             "wall____",
  6631.             "________"
  6632.         ],
  6633.         [
  6634.             "dirt____",
  6635.             "________",
  6636.             "wall____",
  6637.             "________"
  6638.         ],
  6639.         [
  6640.             "dirt____",
  6641.             "________",
  6642.             "wall____",
  6643.             "________"
  6644.         ],
  6645.         [
  6646.             "dirt____",
  6647.             "________",
  6648.             "wall____",
  6649.             "________"
  6650.         ],
  6651.         [
  6652.             "dirt____",
  6653.             "________",
  6654.             "wall____",
  6655.             "________"
  6656.         ],
  6657.         [
  6658.             "dirt____",
  6659.             "________",
  6660.             "wall____",
  6661.             "________"
  6662.         ],
  6663.         [
  6664.             "dirt____",
  6665.             "________",
  6666.             "wall____",
  6667.             "________"
  6668.         ],
  6669.         [
  6670.             "dirt____",
  6671.             "________",
  6672.             "wall____",
  6673.             "________"
  6674.         ],
  6675.         [
  6676.             "dirt____",
  6677.             "________",
  6678.             "wall____",
  6679.             "________"
  6680.         ],
  6681.         [
  6682.             "dirt____",
  6683.             "________",
  6684.             "wall____",
  6685.             "________"
  6686.         ],
  6687.         [
  6688.             "dirt____",
  6689.             "________",
  6690.             "wall____",
  6691.             "________"
  6692.         ],
  6693.         [
  6694.             "dirt____",
  6695.             "________",
  6696.             "wall____",
  6697.             "________"
  6698.         ]
  6699.     ]
  6700. ]
  6701.  
  6702.  
  6703. // Load view portal constraints
  6704.  
  6705. var viewConstraints = {
  6706.     "viewMinX": -3,
  6707.     "viewMaxX": 3,
  6708.     "viewMinY": -3,
  6709.     "viewMaxY": 3,
  6710.     "viewMinZ": 0,
  6711.     "viewMaxZ": 4,
  6712.     "viewSpanX": 7,
  6713.     "viewSpanY": 7
  6714. }
  6715.  
  6716. var ViewPortal = create3DArrayBlock(`${special.emptyCell}`, viewConstraints.viewMinX, viewConstraints.viewMaxX, viewConstraints.viewMinY, viewConstraints.viewMaxY, 0, layers.gui);
  6717.  
  6718. // Load purse tray constraints
  6719.  
  6720. var purseConstraints = {
  6721.     "viewMinX": 0,
  6722.     "viewMaxX": 4,
  6723.     "viewMinY": 0,
  6724.     "viewMaxY": 3,
  6725.     "viewMinZ": 0,
  6726.     "viewMaxZ": 4,
  6727.     "viewSpanX": 5,
  6728.     "viewSpanY": 6
  6729. }
  6730.  
  6731. var PurseTray = create3DArrayBlock(`${special.emptyCell}`, purseConstraints.viewMinX, purseConstraints.viewMaxX, purseConstraints.viewMinY, purseConstraints.viewMaxY, 0, layers.gui)
  6732.  
  6733.  
  6734.  
  6735.  
  6736. var default_entity_stats = [];
  6737. var default_action_stats = [];
  6738.  
  6739. default_entity_stats = loadDefaultStats ( );
  6740. default_action_stats = loadDefaultActions ( );
  6741.  
  6742. function loadDefaultStats ( ){
  6743.  
  6744.     var ent_layers = [];
  6745.     var ent_stats = [];
  6746.  
  6747.     ent_stats[`____`] =
  6748.         loadJSONDirect(`/test dictionary/scripts/json/gamevars/default stats.json`);
  6749.    
  6750. var ent_layers = {
  6751.     "terrain": [
  6752.         "____",
  6753.         "dirt",
  6754.         "hole",
  6755.         "watr",
  6756.         "stps",
  6757.         "stpw"
  6758.     ],
  6759.     "critter": [
  6760.         "____",
  6761.         "dtby",
  6762.         "spdr",
  6763.         "grml",
  6764.         "imp_",
  6765.         "emgd",
  6766.         "shkt",
  6767.         "pndx"
  6768.     ],
  6769.     "object": [
  6770.         "____",
  6771.         "door",
  6772.         "wall",
  6773.         "bldr",
  6774.         "ccts",
  6775.         "chst",
  6776.         "pwch"
  6777.     ],
  6778.     "ailment": [
  6779.         "____",
  6780.         "web_",
  6781.         "wing",
  6782.         "cure",
  6783.         "vnom",
  6784.         "fire",
  6785.         "loc1",
  6786.         "loc2",
  6787.         "loc3",
  6788.         "dust",
  6789.         "zzzz"
  6790.     ]
  6791. }
  6792.  
  6793.  
  6794.     // console.log(ent_layers);
  6795.  
  6796.     for(let layer = 0; layer < ent_layers.length; layer++ ){
  6797.        
  6798.         let entityRoster = ent_layers[layer];
  6799.    
  6800.         for(let index = 0; index < entityRoster.length; index++ ){
  6801.             ent_stats[entityRoster[index]] = loadJSONDirect(`/test dictionary/scripts/json/gamevars/entities/`+left(entityRoster[index]+'____',4)+`.json`);
  6802.         }
  6803.     }
  6804.    
  6805.     return ent_stats;
  6806. }
  6807.  
  6808. function loadDefaultActions ( ){
  6809.    
  6810.     var actionRoster = []; 
  6811.     var act_stats = [];
  6812.  
  6813. var act_stats = [
  6814.     "____",
  6815.     "wstf",
  6816.     "bite",
  6817.     "burn",
  6818.     "cure",
  6819.     "dggr",
  6820.     "fire",
  6821.     "grpl",
  6822.     "ispt",
  6823.     "kick",
  6824.     "lash",
  6825.     "move",
  6826.     "pike",
  6827.     "pnch",
  6828.     "seed",
  6829.     "tngl",
  6830.     "vnom",
  6831.     "web_"
  6832. ]
  6833.    
  6834.     for( let index = 0; index < actionRoster.length; index++ ){
  6835.        
  6836.         let actName = actionRoster[index];
  6837.  
  6838.         act_stats[actName] = [];       
  6839.        
  6840.         let url = `${host}/test dictionary/scripts/json/gamevars/actions/${actName}.json`;
  6841.  
  6842.         act_stats[actName] = loadJSONDirect(url);
  6843.     }
  6844.     return act_stats;
  6845. }
  6846.  
  6847. function loadMap ( ){
  6848.    
  6849. var rawMap = [
  6850.     [
  6851.         [
  6852.             "dirt____",
  6853.             "________",
  6854.             "wall____",
  6855.             "________"
  6856.         ],
  6857.         [
  6858.             "dirt____",
  6859.             "________",
  6860.             "wall____",
  6861.             "________"
  6862.         ],
  6863.         [
  6864.             "dirt____",
  6865.             "________",
  6866.             "wall____",
  6867.             "________"
  6868.         ],
  6869.         [
  6870.             "dirt____",
  6871.             "________",
  6872.             "wall____",
  6873.             "________"
  6874.         ],
  6875.         [
  6876.             "dirt____",
  6877.             "________",
  6878.             "wall____",
  6879.             "________"
  6880.         ],
  6881.         [
  6882.             "dirt____",
  6883.             "________",
  6884.             "wall____",
  6885.             "________"
  6886.         ],
  6887.         [
  6888.             "dirt____",
  6889.             "________",
  6890.             "wall____",
  6891.             "________"
  6892.         ],
  6893.         [
  6894.             "dirt____",
  6895.             "________",
  6896.             "wall____",
  6897.             "________"
  6898.         ],
  6899.         [
  6900.             "dirt____",
  6901.             "________",
  6902.             "wall____",
  6903.             "________"
  6904.         ],
  6905.         [
  6906.             "dirt____",
  6907.             "________",
  6908.             "wall____",
  6909.             "________"
  6910.         ],
  6911.         [
  6912.             "dirt____",
  6913.             "________",
  6914.             "wall____",
  6915.             "________"
  6916.         ],
  6917.         [
  6918.             "dirt____",
  6919.             "________",
  6920.             "wall____",
  6921.             "________"
  6922.         ],
  6923.         [
  6924.             "dirt____",
  6925.             "________",
  6926.             "wall____",
  6927.             "________"
  6928.         ],
  6929.         [
  6930.             "dirt____",
  6931.             "________",
  6932.             "wall____",
  6933.             "________"
  6934.         ],
  6935.         [
  6936.             "dirt____",
  6937.             "________",
  6938.             "wall____",
  6939.             "________"
  6940.         ],
  6941.         [
  6942.             "dirt____",
  6943.             "________",
  6944.             "wall____",
  6945.             "________"
  6946.         ],
  6947.         [
  6948.             "dirt____",
  6949.             "________",
  6950.             "wall____",
  6951.             "________"
  6952.         ],
  6953.         [
  6954.             "dirt____",
  6955.             "________",
  6956.             "wall____",
  6957.             "________"
  6958.         ],
  6959.         [
  6960.             "dirt____",
  6961.             "________",
  6962.             "wall____",
  6963.             "________"
  6964.         ]
  6965.     ],
  6966.     [
  6967.         [
  6968.             "dirt____",
  6969.             "________",
  6970.             "wall____",
  6971.             "________"
  6972.         ],
  6973.         [
  6974.             "dirt____",
  6975.             "________",
  6976.             "________",
  6977.             "________"
  6978.         ],
  6979.         [
  6980.             "dirt____",
  6981.             "spdr____",
  6982.             "________",
  6983.             "________"
  6984.         ],
  6985.         [
  6986.             "dirt____",
  6987.             "________",
  6988.             "wall____",
  6989.             "________"
  6990.         ],
  6991.         [
  6992.             "dirt____",
  6993.             "spdr____",
  6994.             "________",
  6995.             "________"
  6996.         ],
  6997.         [
  6998.             "dirt____",
  6999.             "________",
  7000.             "chst____",
  7001.             "________"
  7002.         ],
  7003.         [
  7004.             "dirt____",
  7005.             "________",
  7006.             "wall____",
  7007.             "________"
  7008.         ],
  7009.         [
  7010.             "dirt____",
  7011.             "________",
  7012.             "________",
  7013.             "________"
  7014.         ],
  7015.         [
  7016.             "dirt____",
  7017.             "emgd____",
  7018.             "________",
  7019.             "________"
  7020.         ],
  7021.         [
  7022.             "dirt____",
  7023.             "________",
  7024.             "________",
  7025.             "________"
  7026.         ],
  7027.         [
  7028.             "dirt____",
  7029.             "________",
  7030.             "wall____",
  7031.             "________"
  7032.         ],
  7033.         [
  7034.             "dirt____",
  7035.             "________",
  7036.             "________",
  7037.             "________"
  7038.         ],
  7039.         [
  7040.             "dirt____",
  7041.             "________",
  7042.             "________",
  7043.             "________"
  7044.         ],
  7045.         [
  7046.             "dirt____",
  7047.             "________",
  7048.             "wall____",
  7049.             "________"
  7050.         ],
  7051.         [
  7052.             "dirt____",
  7053.             "________",
  7054.             "________",
  7055.             "________"
  7056.         ],
  7057.         [
  7058.             "dirt____",
  7059.             "pndx____",
  7060.             "________",
  7061.             "________"
  7062.         ],
  7063.         [
  7064.             "dirt____",
  7065.             "________",
  7066.             "________",
  7067.             "________"
  7068.         ],
  7069.         [
  7070.             "dirt____",
  7071.             "________",
  7072.             "chst____",
  7073.             "________"
  7074.         ],
  7075.         [
  7076.             "dirt____",
  7077.             "________",
  7078.             "wall____",
  7079.             "________"
  7080.         ]
  7081.     ],
  7082.     [
  7083.         [
  7084.             "dirt____",
  7085.             "________",
  7086.             "wall____",
  7087.             "________"
  7088.         ],
  7089.         [
  7090.             "dirt____",
  7091.             "________",
  7092.             "________",
  7093.             "________"
  7094.         ],
  7095.         [
  7096.             "dirt____",
  7097.             "________",
  7098.             "________",
  7099.             "________"
  7100.         ],
  7101.         [
  7102.             "dirt____",
  7103.             "________",
  7104.             "wall____",
  7105.             "________"
  7106.         ],
  7107.         [
  7108.             "dirt____",
  7109.             "________",
  7110.             "________",
  7111.             "________"
  7112.         ],
  7113.         [
  7114.             "dirt____",
  7115.             "________",
  7116.             "________",
  7117.             "________"
  7118.         ],
  7119.         [
  7120.             "dirt____",
  7121.             "________",
  7122.             "________",
  7123.             "________"
  7124.         ],
  7125.         [
  7126.             "dirt____",
  7127.             "________",
  7128.             "________",
  7129.             "________"
  7130.         ],
  7131.         [
  7132.             "dirt____",
  7133.             "________",
  7134.             "________",
  7135.             "________"
  7136.         ],
  7137.         [
  7138.             "dirt____",
  7139.             "________",
  7140.             "________",
  7141.             "________"
  7142.         ],
  7143.         [
  7144.             "dirt____",
  7145.             "________",
  7146.             "________",
  7147.             "________"
  7148.         ],
  7149.         [
  7150.             "dirt____",
  7151.             "________",
  7152.             "________",
  7153.             "________"
  7154.         ],
  7155.         [
  7156.             "hole____",
  7157.             "________",
  7158.             "________",
  7159.             "________"
  7160.         ],
  7161.         [
  7162.             "hole____",
  7163.             "________",
  7164.             "________",
  7165.             "________"
  7166.         ],
  7167.         [
  7168.             "dirt____",
  7169.             "________",
  7170.             "________",
  7171.             "________"
  7172.         ],
  7173.         [
  7174.             "dirt____",
  7175.             "________",
  7176.             "________",
  7177.             "________"
  7178.         ],
  7179.         [
  7180.             "dirt____",
  7181.             "shkt____",
  7182.             "________",
  7183.             "________"
  7184.         ],
  7185.         [
  7186.             "dirt____",
  7187.             "________",
  7188.             "________",
  7189.             "________"
  7190.         ],
  7191.         [
  7192.             "dirt____",
  7193.             "________",
  7194.             "wall____",
  7195.             "________"
  7196.         ]
  7197.     ],
  7198.     [
  7199.         [
  7200.             "dirt____",
  7201.             "________",
  7202.             "wall____",
  7203.             "________"
  7204.         ],
  7205.         [
  7206.             "dirt____",
  7207.             "________",
  7208.             "________",
  7209.             "________"
  7210.         ],
  7211.         [
  7212.             "dirt____",
  7213.             "________",
  7214.             "________",
  7215.             "________"
  7216.         ],
  7217.         [
  7218.             "dirt____",
  7219.             "________",
  7220.             "wall____",
  7221.             "________"
  7222.         ],
  7223.         [
  7224.             "dirt____",
  7225.             "________",
  7226.             "________",
  7227.             "________"
  7228.         ],
  7229.         [
  7230.             "dirt____",
  7231.             "spdr____",
  7232.             "________",
  7233.             "________"
  7234.         ],
  7235.         [
  7236.             "dirt____",
  7237.             "________",
  7238.             "wall____",
  7239.             "________"
  7240.         ],
  7241.         [
  7242.             "dirt____",
  7243.             "________",
  7244.             "door____",
  7245.             "________"
  7246.         ],
  7247.         [
  7248.             "dirt____",
  7249.             "________",
  7250.             "wall____",
  7251.             "________"
  7252.         ],
  7253.         [
  7254.             "dirt____",
  7255.             "________",
  7256.             "wall____",
  7257.             "________"
  7258.         ],
  7259.         [
  7260.             "dirt____",
  7261.             "________",
  7262.             "wall____",
  7263.             "________"
  7264.         ],
  7265.         [
  7266.             "dirt____",
  7267.             "________",
  7268.             "________",
  7269.             "________"
  7270.         ],
  7271.         [
  7272.             "hole____",
  7273.             "________",
  7274.             "________",
  7275.             "________"
  7276.         ],
  7277.         [
  7278.             "hole____",
  7279.             "________",
  7280.             "________",
  7281.             "________"
  7282.         ],
  7283.         [
  7284.             "hole____",
  7285.             "________",
  7286.             "________",
  7287.             "________"
  7288.         ],
  7289.         [
  7290.             "dirt____",
  7291.             "________",
  7292.             "________",
  7293.             "________"
  7294.         ],
  7295.         [
  7296.             "dirt____",
  7297.             "________",
  7298.             "bldr____",
  7299.             "________"
  7300.         ],
  7301.         [
  7302.             "dirt____",
  7303.             "________",
  7304.             "________",
  7305.             "________"
  7306.         ],
  7307.         [
  7308.             "dirt____",
  7309.             "________",
  7310.             "wall____",
  7311.             "________"
  7312.         ]
  7313.     ],
  7314.     [
  7315.         [
  7316.             "dirt____",
  7317.             "________",
  7318.             "wall____",
  7319.             "________"
  7320.         ],
  7321.         [
  7322.             "dirt____",
  7323.             "spdr____",
  7324.             "________",
  7325.             "________"
  7326.         ],
  7327.         [
  7328.             "dirt____",
  7329.             "________",
  7330.             "________",
  7331.             "________"
  7332.         ],
  7333.         [
  7334.             "dirt____",
  7335.             "________",
  7336.             "wall____",
  7337.             "________"
  7338.         ],
  7339.         [
  7340.             "dirt____",
  7341.             "________",
  7342.             "________",
  7343.             "________"
  7344.         ],
  7345.         [
  7346.             "dirt____",
  7347.             "________",
  7348.             "________",
  7349.             "________"
  7350.         ],
  7351.         [
  7352.             "dirt____",
  7353.             "________",
  7354.             "wall____",
  7355.             "________"
  7356.         ],
  7357.         [
  7358.             "dirt____",
  7359.             "________",
  7360.             "bldr____",
  7361.             "________"
  7362.         ],
  7363.         [
  7364.             "dirt____",
  7365.             "________",
  7366.             "________",
  7367.             "________"
  7368.         ],
  7369.         [
  7370.             "dirt____",
  7371.             "________",
  7372.             "________",
  7373.             "________"
  7374.         ],
  7375.         [
  7376.             "dirt____",
  7377.             "________",
  7378.             "________",
  7379.             "web_____"
  7380.         ],
  7381.         [
  7382.             "dirt____",
  7383.             "________",
  7384.             "________",
  7385.             "________"
  7386.         ],
  7387.         [
  7388.             "hole____",
  7389.             "shkt____",
  7390.             "________",
  7391.             "________"
  7392.         ],
  7393.         [
  7394.             "stps____",
  7395.             "________",
  7396.             "________",
  7397.             "________"
  7398.         ],
  7399.         [
  7400.             "hole____",
  7401.             "________",
  7402.             "________",
  7403.             "________"
  7404.         ],
  7405.         [
  7406.             "dirt____",
  7407.             "________",
  7408.             "________",
  7409.             "________"
  7410.         ],
  7411.         [
  7412.             "dirt____",
  7413.             "________",
  7414.             "________",
  7415.             "________"
  7416.         ],
  7417.         [
  7418.             "dirt____",
  7419.             "________",
  7420.             "________",
  7421.             "________"
  7422.         ],
  7423.         [
  7424.             "dirt____",
  7425.             "________",
  7426.             "wall____",
  7427.             "________"
  7428.         ]
  7429.     ],
  7430.     [
  7431.         [
  7432.             "dirt____",
  7433.             "________",
  7434.             "door____",
  7435.             "________"
  7436.         ],
  7437.         [
  7438.             "dirt____",
  7439.             "________",
  7440.             "________",
  7441.             "________"
  7442.         ],
  7443.         [
  7444.             "dirt____",
  7445.             "spdr____",
  7446.             "________",
  7447.             "________"
  7448.         ],
  7449.         [
  7450.             "dirt____",
  7451.             "________",
  7452.             "wall____",
  7453.             "________"
  7454.         ],
  7455.         [
  7456.             "dirt____",
  7457.             "spdr____",
  7458.             "________",
  7459.             "________"
  7460.         ],
  7461.         [
  7462.             "dirt____",
  7463.             "________",
  7464.             "________",
  7465.             "________"
  7466.         ],
  7467.         [
  7468.             "dirt____",
  7469.             "________",
  7470.             "wall____",
  7471.             "________"
  7472.         ],
  7473.         [
  7474.             "hole____",
  7475.             "________",
  7476.             "________",
  7477.             "________"
  7478.         ],
  7479.         [
  7480.             "dirt____",
  7481.             "________",
  7482.             "bldr____",
  7483.             "________"
  7484.         ],
  7485.         [
  7486.             "dirt____",
  7487.             "________",
  7488.             "________",
  7489.             "________"
  7490.         ],
  7491.         [
  7492.             "dirt____",
  7493.             "________",
  7494.             "wall____",
  7495.             "________"
  7496.         ],
  7497.         [
  7498.             "dirt____",
  7499.             "________",
  7500.             "chst____",
  7501.             "________"
  7502.         ],
  7503.         [
  7504.             "dirt____",
  7505.             "________",
  7506.             "wall____",
  7507.             "________"
  7508.         ],
  7509.         [
  7510.             "dirt____",
  7511.             "________",
  7512.             "________",
  7513.             "________"
  7514.         ],
  7515.         [
  7516.             "dirt____",
  7517.             "________",
  7518.             "________",
  7519.             "________"
  7520.         ],
  7521.         [
  7522.             "dirt____",
  7523.             "________",
  7524.             "________",
  7525.             "________"
  7526.         ],
  7527.         [
  7528.             "dirt____",
  7529.             "________",
  7530.             "________",
  7531.             "________"
  7532.         ],
  7533.         [
  7534.             "dirt____",
  7535.             "________",
  7536.             "________",
  7537.             "________"
  7538.         ],
  7539.         [
  7540.             "dirt____",
  7541.             "________",
  7542.             "wall____",
  7543.             "________"
  7544.         ]
  7545.     ],
  7546.     [
  7547.         [
  7548.             "dirt____",
  7549.             "________",
  7550.             "wall____",
  7551.             "________"
  7552.         ],
  7553.         [
  7554.             "dirt____",
  7555.             "________",
  7556.             "________",
  7557.             "________"
  7558.         ],
  7559.         [
  7560.             "dirt____",
  7561.             "________",
  7562.             "________",
  7563.             "________"
  7564.         ],
  7565.         [
  7566.             "dirt____",
  7567.             "________",
  7568.             "wall____",
  7569.             "________"
  7570.         ],
  7571.         [
  7572.             "dirt____",
  7573.             "________",
  7574.             "________",
  7575.             "________"
  7576.         ],
  7577.         [
  7578.             "dirt____",
  7579.             "________",
  7580.             "wall____",
  7581.             "________"
  7582.         ],
  7583.         [
  7584.             "dirt____",
  7585.             "________",
  7586.             "wall____",
  7587.             "________"
  7588.         ],
  7589.         [
  7590.             "dirt____",
  7591.             "________",
  7592.             "________",
  7593.             "________"
  7594.         ],
  7595.         [
  7596.             "hole____",
  7597.             "________",
  7598.             "________",
  7599.             "________"
  7600.         ],
  7601.         [
  7602.             "dirt____",
  7603.             "________",
  7604.             "wall____",
  7605.             "________"
  7606.         ],
  7607.         [
  7608.             "dirt____",
  7609.             "________",
  7610.             "wall____",
  7611.             "________"
  7612.         ],
  7613.         [
  7614.             "dirt____",
  7615.             "________",
  7616.             "wall____",
  7617.             "________"
  7618.         ],
  7619.         [
  7620.             "dirt____",
  7621.             "________",
  7622.             "wall____",
  7623.             "________"
  7624.         ],
  7625.         [
  7626.             "dirt____",
  7627.             "________",
  7628.             "door____",
  7629.             "________"
  7630.         ],
  7631.         [
  7632.             "dirt____",
  7633.             "________",
  7634.             "wall____",
  7635.             "________"
  7636.         ],
  7637.         [
  7638.             "dirt____",
  7639.             "________",
  7640.             "wall____",
  7641.             "________"
  7642.         ],
  7643.         [
  7644.             "hole____",
  7645.             "________",
  7646.             "________",
  7647.             "________"
  7648.         ],
  7649.         [
  7650.             "dirt____",
  7651.             "________",
  7652.             "wall____",
  7653.             "________"
  7654.         ],
  7655.         [
  7656.             "dirt____",
  7657.             "________",
  7658.             "wall____",
  7659.             "________"
  7660.         ]
  7661.     ],
  7662.     [
  7663.         [
  7664.             "dirt____",
  7665.             "________",
  7666.             "wall____",
  7667.             "________"
  7668.         ],
  7669.         [
  7670.             "dirt____",
  7671.             "________",
  7672.             "________",
  7673.             "________"
  7674.         ],
  7675.         [
  7676.             "dirt____",
  7677.             "________",
  7678.             "________",
  7679.             "________"
  7680.         ],
  7681.         [
  7682.             "dirt____",
  7683.             "________",
  7684.             "door____",
  7685.             "________"
  7686.         ],
  7687.         [
  7688.             "dirt____",
  7689.             "________",
  7690.             "________",
  7691.             "________"
  7692.         ],
  7693.         [
  7694.             "dirt____",
  7695.             "________",
  7696.             "________",
  7697.             "________"
  7698.         ],
  7699.         [
  7700.             "dirt____",
  7701.             "________",
  7702.             "________",
  7703.             "________"
  7704.         ],
  7705.         [
  7706.             "dirt____",
  7707.             "spdr____",
  7708.             "________",
  7709.             "________"
  7710.         ],
  7711.         [
  7712.             "dirt____",
  7713.             "________",
  7714.             "________",
  7715.             "________"
  7716.         ],
  7717.         [
  7718.             "dirt____",
  7719.             "________",
  7720.             "________",
  7721.             "________"
  7722.         ],
  7723.         [
  7724.             "watr____",
  7725.             "________",
  7726.             "________",
  7727.             "________"
  7728.         ],
  7729.         [
  7730.             "dirt____",
  7731.             "________",
  7732.             "________",
  7733.             "________"
  7734.         ],
  7735.         [
  7736.             "dirt____",
  7737.             "________",
  7738.             "bldr____",
  7739.             "________"
  7740.         ],
  7741.         [
  7742.             "dirt____",
  7743.             "________",
  7744.             "________",
  7745.             "________"
  7746.         ],
  7747.         [
  7748.             "dirt____",
  7749.             "________",
  7750.             "wall____",
  7751.             "________"
  7752.         ],
  7753.         [
  7754.             "dirt____",
  7755.             "________",
  7756.             "________",
  7757.             "________"
  7758.         ],
  7759.         [
  7760.             "dirt____",
  7761.             "________",
  7762.             "________",
  7763.             "________"
  7764.         ],
  7765.         [
  7766.             "dirt____",
  7767.             "dtby____",
  7768.             "________",
  7769.             "________"
  7770.         ],
  7771.         [
  7772.             "dirt____",
  7773.             "________",
  7774.             "wall____",
  7775.             "________"
  7776.         ]
  7777.     ],
  7778.     [
  7779.         [
  7780.             "dirt____",
  7781.             "________",
  7782.             "wall____",
  7783.             "________"
  7784.         ],
  7785.         [
  7786.             "dirt____",
  7787.             "________",
  7788.             "wall____",
  7789.             "________"
  7790.         ],
  7791.         [
  7792.             "dirt____",
  7793.             "________",
  7794.             "wall____",
  7795.             "________"
  7796.         ],
  7797.         [
  7798.             "dirt____",
  7799.             "________",
  7800.             "wall____",
  7801.             "________"
  7802.         ],
  7803.         [
  7804.             "dirt____",
  7805.             "________",
  7806.             "wall____",
  7807.             "________"
  7808.         ],
  7809.         [
  7810.             "dirt____",
  7811.             "________",
  7812.             "________",
  7813.             "________"
  7814.         ],
  7815.         [
  7816.             "dirt____",
  7817.             "pndx____",
  7818.             "________",
  7819.             "________"
  7820.         ],
  7821.         [
  7822.             "dirt____",
  7823.             "________",
  7824.             "________",
  7825.             "________"
  7826.         ],
  7827.         [
  7828.             "dirt____",
  7829.             "________",
  7830.             "________",
  7831.             "________"
  7832.         ],
  7833.         [
  7834.             "dirt____",
  7835.             "________",
  7836.             "________",
  7837.             "________"
  7838.         ],
  7839.         [
  7840.             "watr____",
  7841.             "________",
  7842.             "________",
  7843.             "________"
  7844.         ],
  7845.         [
  7846.             "dirt____",
  7847.             "________",
  7848.             "________",
  7849.             "________"
  7850.         ],
  7851.         [
  7852.             "dirt____",
  7853.             "shkt____",
  7854.             "________",
  7855.             "________"
  7856.         ],
  7857.         [
  7858.             "dirt____",
  7859.             "________",
  7860.             "________",
  7861.             "________"
  7862.         ],
  7863.         [
  7864.             "dirt____",
  7865.             "________",
  7866.             "wall____",
  7867.             "________"
  7868.         ],
  7869.         [
  7870.             "dirt____",
  7871.             "________",
  7872.             "________",
  7873.             "________"
  7874.         ],
  7875.         [
  7876.             "dirt____",
  7877.             "________",
  7878.             "________",
  7879.             "________"
  7880.         ],
  7881.         [
  7882.             "dirt____",
  7883.             "dtby____",
  7884.             "________",
  7885.             "________"
  7886.         ],
  7887.         [
  7888.             "dirt____",
  7889.             "________",
  7890.             "wall____",
  7891.             "________"
  7892.         ]
  7893.     ],
  7894.     [
  7895.         [
  7896.             "stps____",
  7897.             "________",
  7898.             "wall____",
  7899.             "________"
  7900.         ],
  7901.         [
  7902.             "hole____",
  7903.             "________",
  7904.             "________",
  7905.             "________"
  7906.         ],
  7907.         [
  7908.             "hole____",
  7909.             "________",
  7910.             "________",
  7911.             "________"
  7912.         ],
  7913.         [
  7914.             "dirt____",
  7915.             "________",
  7916.             "wall____",
  7917.             "________"
  7918.         ],
  7919.         [
  7920.             "stps____",
  7921.             "________",
  7922.             "________",
  7923.             "________"
  7924.         ],
  7925.         [
  7926.             "dirt____",
  7927.             "________",
  7928.             "________",
  7929.             "________"
  7930.         ],
  7931.         [
  7932.             "dirt____",
  7933.             "________",
  7934.             "________",
  7935.             "________"
  7936.         ],
  7937.         [
  7938.             "dirt____",
  7939.             "imp_____",
  7940.             "________",
  7941.             "________"
  7942.         ],
  7943.         [
  7944.             "dirt____",
  7945.             "________",
  7946.             "________",
  7947.             "________"
  7948.         ],
  7949.         [
  7950.             "dirt____",
  7951.             "dtby____",
  7952.             "________",
  7953.             "________"
  7954.         ],
  7955.         [
  7956.             "watr____",
  7957.             "________",
  7958.             "________",
  7959.             "________"
  7960.         ],
  7961.         [
  7962.             "dirt____",
  7963.             "________",
  7964.             "________",
  7965.             "________"
  7966.         ],
  7967.         [
  7968.             "dirt____",
  7969.             "________",
  7970.             "________",
  7971.             "________"
  7972.         ],
  7973.         [
  7974.             "dirt____",
  7975.             "________",
  7976.             "________",
  7977.             "________"
  7978.         ],
  7979.         [
  7980.             "dirt____",
  7981.             "________",
  7982.             "wall____",
  7983.             "________"
  7984.         ],
  7985.         [
  7986.             "dirt____",
  7987.             "________",
  7988.             "________",
  7989.             "________"
  7990.         ],
  7991.         [
  7992.             "dirt____",
  7993.             "dtby____",
  7994.             "________",
  7995.             "________"
  7996.         ],
  7997.         [
  7998.             "dirt____",
  7999.             "________",
  8000.             "________",
  8001.             "________"
  8002.         ],
  8003.         [
  8004.             "dirt____",
  8005.             "________",
  8006.             "wall____",
  8007.             "________"
  8008.         ]
  8009.     ],
  8010.     [
  8011.         [
  8012.             "hole____",
  8013.             "________",
  8014.             "wall____",
  8015.             "________"
  8016.         ],
  8017.         [
  8018.             "stps____",
  8019.             "________",
  8020.             "________",
  8021.             "________"
  8022.         ],
  8023.         [
  8024.             "hole____",
  8025.             "________",
  8026.             "________",
  8027.             "________"
  8028.         ],
  8029.         [
  8030.             "stps____",
  8031.             "________",
  8032.             "door____",
  8033.             "________"
  8034.         ],
  8035.         [
  8036.             "hole____",
  8037.             "________",
  8038.             "________",
  8039.             "________"
  8040.         ],
  8041.         [
  8042.             "dirt____",
  8043.             "________",
  8044.             "wall____",
  8045.             "________"
  8046.         ],
  8047.         [
  8048.             "dirt____",
  8049.             "________",
  8050.             "wall____",
  8051.             "________"
  8052.         ],
  8053.         [
  8054.             "hole____",
  8055.             "________",
  8056.             "________",
  8057.             "________"
  8058.         ],
  8059.         [
  8060.             "dirt____",
  8061.             "________",
  8062.             "________",
  8063.             "________"
  8064.         ],
  8065.         [
  8066.             "dirt____",
  8067.             "________",
  8068.             "________",
  8069.             "________"
  8070.         ],
  8071.         [
  8072.             "watr____",
  8073.             "________",
  8074.             "________",
  8075.             "________"
  8076.         ],
  8077.         [
  8078.             "dirt____",
  8079.             "________",
  8080.             "________",
  8081.             "________"
  8082.         ],
  8083.         [
  8084.             "dirt____",
  8085.             "________",
  8086.             "________",
  8087.             "________"
  8088.         ],
  8089.         [
  8090.             "dirt____",
  8091.             "________",
  8092.             "chst____",
  8093.             "________"
  8094.         ],
  8095.         [
  8096.             "dirt____",
  8097.             "________",
  8098.             "wall____",
  8099.             "________"
  8100.         ],
  8101.         [
  8102.             "dirt____",
  8103.             "________",
  8104.             "________",
  8105.             "________"
  8106.         ],
  8107.         [
  8108.             "dirt____",
  8109.             "________",
  8110.             "________",
  8111.             "________"
  8112.         ],
  8113.         [
  8114.             "dirt____",
  8115.             "________",
  8116.             "________",
  8117.             "________"
  8118.         ],
  8119.         [
  8120.             "dirt____",
  8121.             "________",
  8122.             "wall____",
  8123.             "________"
  8124.         ]
  8125.     ],
  8126.     [
  8127.         [
  8128.             "dirt____",
  8129.             "________",
  8130.             "wall____",
  8131.             "________"
  8132.         ],
  8133.         [
  8134.             "dirt____",
  8135.             "________",
  8136.             "________",
  8137.             "________"
  8138.         ],
  8139.         [
  8140.             "dirt____",
  8141.             "________",
  8142.             "________",
  8143.             "________"
  8144.         ],
  8145.         [
  8146.             "dirt____",
  8147.             "________",
  8148.             "wall____",
  8149.             "________"
  8150.         ],
  8151.         [
  8152.             "dirt____",
  8153.             "________",
  8154.             "________",
  8155.             "________"
  8156.         ],
  8157.         [
  8158.             "dirt____",
  8159.             "________",
  8160.             "________",
  8161.             "________"
  8162.         ],
  8163.         [
  8164.             "dirt____",
  8165.             "________",
  8166.             "________",
  8167.             "________"
  8168.         ],
  8169.         [
  8170.             "dirt____",
  8171.             "________",
  8172.             "________",
  8173.             "________"
  8174.         ],
  8175.         [
  8176.             "dirt____",
  8177.             "________",
  8178.             "wall____",
  8179.             "________"
  8180.         ],
  8181.         [
  8182.             "dirt____",
  8183.             "________",
  8184.             "wall____",
  8185.             "________"
  8186.         ],
  8187.         [
  8188.             "dirt____",
  8189.             "________",
  8190.             "wall____",
  8191.             "________"
  8192.         ],
  8193.         [
  8194.             "dirt____",
  8195.             "________",
  8196.             "wall____",
  8197.             "________"
  8198.         ],
  8199.         [
  8200.             "dirt____",
  8201.             "________",
  8202.             "wall____",
  8203.             "________"
  8204.         ],
  8205.         [
  8206.             "dirt____",
  8207.             "________",
  8208.             "wall____",
  8209.             "________"
  8210.         ],
  8211.         [
  8212.             "dirt____",
  8213.             "________",
  8214.             "wall____",
  8215.             "________"
  8216.         ],
  8217.         [
  8218.             "dirt____",
  8219.             "________",
  8220.             "________",
  8221.             "________"
  8222.         ],
  8223.         [
  8224.             "dirt____",
  8225.             "________",
  8226.             "wall____",
  8227.             "________"
  8228.         ],
  8229.         [
  8230.             "dirt____",
  8231.             "________",
  8232.             "________",
  8233.             "________"
  8234.         ],
  8235.         [
  8236.             "dirt____",
  8237.             "________",
  8238.             "wall____",
  8239.             "________"
  8240.         ]
  8241.     ],
  8242.     [
  8243.         [
  8244.             "dirt____",
  8245.             "________",
  8246.             "door____",
  8247.             "________"
  8248.         ],
  8249.         [
  8250.             "dirt____",
  8251.             "________",
  8252.             "________",
  8253.             "________"
  8254.         ],
  8255.         [
  8256.             "dirt____",
  8257.             "________",
  8258.             "chst____",
  8259.             "________"
  8260.         ],
  8261.         [
  8262.             "dirt____",
  8263.             "________",
  8264.             "wall____",
  8265.             "________"
  8266.         ],
  8267.         [
  8268.             "dirt____",
  8269.             "________",
  8270.             "chst____",
  8271.             "________"
  8272.         ],
  8273.         [
  8274.             "hole____",
  8275.             "________",
  8276.             "________",
  8277.             "________"
  8278.         ],
  8279.         [
  8280.             "hole____",
  8281.             "grml____",
  8282.             "________",
  8283.             "________"
  8284.         ],
  8285.         [
  8286.             "dirt____",
  8287.             "________",
  8288.             "________",
  8289.             "________"
  8290.         ],
  8291.         [
  8292.             "watr____",
  8293.             "________",
  8294.             "________",
  8295.             "________"
  8296.         ],
  8297.         [
  8298.             "dirt____",
  8299.             "________",
  8300.             "chst____",
  8301.             "________"
  8302.         ],
  8303.         [
  8304.             "stpw____",
  8305.             "________",
  8306.             "________",
  8307.             "________"
  8308.         ],
  8309.         [
  8310.             "watr____",
  8311.             "________",
  8312.             "________",
  8313.             "________"
  8314.         ],
  8315.         [
  8316.             "watr____",
  8317.             "________",
  8318.             "________",
  8319.             "________"
  8320.         ],
  8321.         [
  8322.             "dirt____",
  8323.             "________",
  8324.             "________",
  8325.             "________"
  8326.         ],
  8327.         [
  8328.             "dirt____",
  8329.             "________",
  8330.             "________",
  8331.             "________"
  8332.         ],
  8333.         [
  8334.             "dirt____",
  8335.             "________",
  8336.             "________",
  8337.             "________"
  8338.         ],
  8339.         [
  8340.             "dirt____",
  8341.             "________",
  8342.             "wall____",
  8343.             "________"
  8344.         ],
  8345.         [
  8346.             "dirt____",
  8347.             "________",
  8348.             "________",
  8349.             "________"
  8350.         ],
  8351.         [
  8352.             "dirt____",
  8353.             "________",
  8354.             "wall____",
  8355.             "________"
  8356.         ]
  8357.     ],
  8358.     [
  8359.         [
  8360.             "hole____",
  8361.             "________",
  8362.             "wall____",
  8363.             "________"
  8364.         ],
  8365.         [
  8366.             "dirt____",
  8367.             "________",
  8368.             "________",
  8369.             "________"
  8370.         ],
  8371.         [
  8372.             "hole____",
  8373.             "________",
  8374.             "________",
  8375.             "________"
  8376.         ],
  8377.         [
  8378.             "hole____",
  8379.             "________",
  8380.             "wall____",
  8381.             "________"
  8382.         ],
  8383.         [
  8384.             "hole____",
  8385.             "________",
  8386.             "________",
  8387.             "________"
  8388.         ],
  8389.         [
  8390.             "hole____",
  8391.             "dtby____",
  8392.             "________",
  8393.             "________"
  8394.         ],
  8395.         [
  8396.             "hole____",
  8397.             "________",
  8398.             "________",
  8399.             "________"
  8400.         ],
  8401.         [
  8402.             "dirt____",
  8403.             "________",
  8404.             "________",
  8405.             "________"
  8406.         ],
  8407.         [
  8408.             "watr____",
  8409.             "________",
  8410.             "________",
  8411.             "________"
  8412.         ],
  8413.         [
  8414.             "dirt____",
  8415.             "________",
  8416.             "________",
  8417.             "________"
  8418.         ],
  8419.         [
  8420.             "dirt____",
  8421.             "grml____",
  8422.             "________",
  8423.             "________"
  8424.         ],
  8425.         [
  8426.             "watr____",
  8427.             "________",
  8428.             "________",
  8429.             "________"
  8430.         ],
  8431.         [
  8432.             "watr____",
  8433.             "________",
  8434.             "________",
  8435.             "________"
  8436.         ],
  8437.         [
  8438.             "dirt____",
  8439.             "________",
  8440.             "________",
  8441.             "________"
  8442.         ],
  8443.         [
  8444.             "dirt____",
  8445.             "emgd____",
  8446.             "________",
  8447.             "________"
  8448.         ],
  8449.         [
  8450.             "dirt____",
  8451.             "________",
  8452.             "________",
  8453.             "________"
  8454.         ],
  8455.         [
  8456.             "dirt____",
  8457.             "________",
  8458.             "wall____",
  8459.             "________"
  8460.         ],
  8461.         [
  8462.             "dirt____",
  8463.             "________",
  8464.             "________",
  8465.             "________"
  8466.         ],
  8467.         [
  8468.             "dirt____",
  8469.             "________",
  8470.             "wall____",
  8471.             "________"
  8472.         ]
  8473.     ],
  8474.     [
  8475.         [
  8476.             "hole____",
  8477.             "________",
  8478.             "wall____",
  8479.             "________"
  8480.         ],
  8481.         [
  8482.             "dirt____",
  8483.             "________",
  8484.             "________",
  8485.             "________"
  8486.         ],
  8487.         [
  8488.             "hole____",
  8489.             "________",
  8490.             "________",
  8491.             "________"
  8492.         ],
  8493.         [
  8494.             "hole____",
  8495.             "________",
  8496.             "wall____",
  8497.             "________"
  8498.         ],
  8499.         [
  8500.             "hole____",
  8501.             "________",
  8502.             "________",
  8503.             "________"
  8504.         ],
  8505.         [
  8506.             "hole____",
  8507.             "________",
  8508.             "________",
  8509.             "________"
  8510.         ],
  8511.         [
  8512.             "hole____",
  8513.             "grml____",
  8514.             "________",
  8515.             "________"
  8516.         ],
  8517.         [
  8518.             "dirt____",
  8519.             "________",
  8520.             "________",
  8521.             "________"
  8522.         ],
  8523.         [
  8524.             "watr____",
  8525.             "________",
  8526.             "________",
  8527.             "________"
  8528.         ],
  8529.         [
  8530.             "dirt____",
  8531.             "grml____",
  8532.             "________",
  8533.             "________"
  8534.         ],
  8535.         [
  8536.             "dirt____",
  8537.             "________",
  8538.             "________",
  8539.             "________"
  8540.         ],
  8541.         [
  8542.             "watr____",
  8543.             "________",
  8544.             "________",
  8545.             "________"
  8546.         ],
  8547.         [
  8548.             "watr____",
  8549.             "________",
  8550.             "________",
  8551.             "________"
  8552.         ],
  8553.         [
  8554.             "dirt____",
  8555.             "________",
  8556.             "________",
  8557.             "________"
  8558.         ],
  8559.         [
  8560.             "dirt____",
  8561.             "________",
  8562.             "________",
  8563.             "________"
  8564.         ],
  8565.         [
  8566.             "dirt____",
  8567.             "________",
  8568.             "chst____",
  8569.             "________"
  8570.         ],
  8571.         [
  8572.             "dirt____",
  8573.             "________",
  8574.             "wall____",
  8575.             "________"
  8576.         ],
  8577.         [
  8578.             "dirt____",
  8579.             "________",
  8580.             "chst____",
  8581.             "________"
  8582.         ],
  8583.         [
  8584.             "dirt____",
  8585.             "________",
  8586.             "wall____",
  8587.             "________"
  8588.         ]
  8589.     ],
  8590.     [
  8591.         [
  8592.             "dirt____",
  8593.             "________",
  8594.             "wall____",
  8595.             "________"
  8596.         ],
  8597.         [
  8598.             "dirt____",
  8599.             "________",
  8600.             "wall____",
  8601.             "________"
  8602.         ],
  8603.         [
  8604.             "dirt____",
  8605.             "________",
  8606.             "wall____",
  8607.             "________"
  8608.         ],
  8609.         [
  8610.             "dirt____",
  8611.             "________",
  8612.             "wall____",
  8613.             "________"
  8614.         ],
  8615.         [
  8616.             "dirt____",
  8617.             "________",
  8618.             "wall____",
  8619.             "________"
  8620.         ],
  8621.         [
  8622.             "dirt____",
  8623.             "________",
  8624.             "wall____",
  8625.             "________"
  8626.         ],
  8627.         [
  8628.             "dirt____",
  8629.             "________",
  8630.             "wall____",
  8631.             "________"
  8632.         ],
  8633.         [
  8634.             "dirt____",
  8635.             "________",
  8636.             "wall____",
  8637.             "________"
  8638.         ],
  8639.         [
  8640.             "dirt____",
  8641.             "________",
  8642.             "wall____",
  8643.             "________"
  8644.         ],
  8645.         [
  8646.             "dirt____",
  8647.             "________",
  8648.             "wall____",
  8649.             "________"
  8650.         ],
  8651.         [
  8652.             "dirt____",
  8653.             "________",
  8654.             "wall____",
  8655.             "________"
  8656.         ],
  8657.         [
  8658.             "dirt____",
  8659.             "________",
  8660.             "wall____",
  8661.             "________"
  8662.         ],
  8663.         [
  8664.             "dirt____",
  8665.             "________",
  8666.             "wall____",
  8667.             "________"
  8668.         ],
  8669.         [
  8670.             "dirt____",
  8671.             "________",
  8672.             "wall____",
  8673.             "________"
  8674.         ],
  8675.         [
  8676.             "dirt____",
  8677.             "________",
  8678.             "wall____",
  8679.             "________"
  8680.         ],
  8681.         [
  8682.             "dirt____",
  8683.             "________",
  8684.             "wall____",
  8685.             "________"
  8686.         ],
  8687.         [
  8688.             "dirt____",
  8689.             "________",
  8690.             "wall____",
  8691.             "________"
  8692.         ],
  8693.         [
  8694.             "dirt____",
  8695.             "________",
  8696.             "wall____",
  8697.             "________"
  8698.         ],
  8699.         [
  8700.             "dirt____",
  8701.             "________",
  8702.             "wall____",
  8703.             "________"
  8704.         ]
  8705.     ]
  8706. ]
  8707.    
  8708.     full_map = create3DArrayBlock(`____`, 0,rawMap.length - 1, 0, rawMap[0].length - 1, 0, layers.gui );
  8709.  
  8710.     full_entity_stats = create3DArrayBlock([], 0,rawMap.length - 1, 0, rawMap[0].length - 1, 0, layers.gui );
  8711.  
  8712.     for(let y = 0; y < rawMap[0].length; y++ ){
  8713.         for(let x = 0; x < rawMap.length; x++ ){
  8714.             for(let z = 0; z < layers.gui; z++ ){
  8715.                
  8716.                 full_map[x][y][z] = left(rawMap[x][y][z]+`____`,4);
  8717.                
  8718.                 full_entity_stats[x][y][z] = default_entity_stats[left(full_map[x][y][z]+`____`,4)];
  8719.             }
  8720.         }
  8721.     }
  8722.    
  8723.     cx = randInt(0,full_map.length - 1);
  8724.     cy = randInt(0,full_map[0].length - 1);
  8725.  
  8726. }
  8727.  
  8728.  
  8729.  
  8730.  
  8731. // Function to reset the turn table
  8732. function turnReset ( ) {
  8733.    
  8734.     if(narration.length !== 0){
  8735.         logFeats(narration.join("\r\n"));
  8736.         narration = [];
  8737.     }
  8738.  
  8739.     try {
  8740.         turnTable = JSON.parse(JSON.stringify(prefab)); // Use deep copy to avoid reference issues
  8741.         logDebug("Turn table reset successfully.");
  8742.     } catch (error) {
  8743.         logError("Error resetting turn table:", error);
  8744.     }
  8745.    
  8746.     return true;
  8747. }
  8748.  
  8749. // Check if coordinates are out of bounds for the view
  8750. function oobView(coords) {
  8751.    
  8752.     const result = soob(coords, [
  8753.         [viewConstraints.viewMinX, viewConstraints.viewMaxX],
  8754.         [viewConstraints.viewMinY, viewConstraints.viewMaxY]
  8755.     ]);
  8756.     logDebug("oobView result for coords", coords, ":", result);
  8757.     return result;
  8758. }
  8759.  
  8760. // Check if coordinates are out of bounds for the map
  8761. function oobMap(coords) {
  8762.    
  8763.     const result = soob(coords, [
  8764.         [0, full_map.length - 1],
  8765.         [0, full_map[0].length - 1]
  8766.     ]);
  8767.     logDebug("oobMap result for coords", coords, ":", result);
  8768.     return result;
  8769. }
  8770.  
  8771. // Validate move direction for given coordinates
  8772. function validateMove(coords) {
  8773.     logDebug("Validating move for coords:", coords);
  8774.     if (!Array.isArray(coords) || coords.length !== 2) {
  8775.         // logError("Invalid coordinates:", coords);
  8776.         return false;
  8777.     }
  8778.  
  8779.     let isValid = oobMap(coords);
  8780.     if (isValid !== true) {
  8781.         logWarning("Coordinates out of map bounds:", coords);
  8782.         return false;
  8783.     }
  8784.  
  8785.     let [x, y] = coords;
  8786.     let direction = dice(`1d` + cardinals.length) - 1;
  8787.  
  8788.     if (direction === -1) {
  8789.         logWarning("Invalid dice roll direction:", direction);
  8790.         return false;
  8791.     }
  8792.  
  8793.     let x2 = x + cardinals[direction][0];
  8794.     let y2 = y + cardinals[direction][1];
  8795.  
  8796.     if (oobMap([x2, y2]) !== true) {
  8797.         logWarning("Destination out of map bounds:", [x2, y2]);
  8798.         return false;
  8799.     }
  8800.  
  8801.     if (turnTable[x][y].hadit === 1 || turnTable[x2][y2].hadit === 1) {
  8802.         logWarning("Turn already taken for these coordinates:", [x, y], [x2, y2]);
  8803.         return false;
  8804.     }
  8805.  
  8806.     // logDebug("Move direction validated:", direction);
  8807.     return direction;
  8808. }
  8809.  
  8810. // Execute turn logic for all critters
  8811. function takeTurns ( ) {
  8812.    
  8813.     logDebug("Executing takeTurns...");
  8814.     turnReset ( );
  8815.  
  8816.     for (let y = 0; y < full_map[0].length; y++) {
  8817.         for (let x = 0; x < full_map.length; x++) {
  8818.             critterAnimate([x, y]);
  8819.         }
  8820.     }
  8821.  
  8822.     turnReset ( );
  8823.     refreshGui ( );
  8824.     logDebug("Turn execution completed.");
  8825. }
  8826.  
  8827. // Function to animate critter movement
  8828. function critterAnimate(coords) {
  8829.    
  8830.     if (oobMap(coords) !== true) {
  8831.         return false;
  8832.     }
  8833.    
  8834.     let [x, y] = coords;
  8835.     let z = layers.critter;
  8836.  
  8837.     if (invalidName(full_map[x][y][layers.critter])){
  8838.         return false;
  8839.     }
  8840.  
  8841.     let direction = validateMove([x, y]);
  8842.    
  8843.     if ([false, 0].includes(direction)) {
  8844.         return direction;
  8845.     }
  8846.  
  8847.     let [x2, y2] = [x + cardinals[direction][0], y + cardinals[direction][1]];
  8848.    
  8849.     if (oobMap([x, y]) !== true || oobMap([x2, y2]) !== true) {
  8850.         return false;
  8851.     }
  8852.    
  8853.     queue.src.Map = full_map[x][y];
  8854.     queue.src.Stats = full_entity_stats[x][y];
  8855.  
  8856.     queue.dest.Map = full_map[x2][y2];
  8857.     queue.dest.Stats = full_entity_stats[x2][y2];
  8858.  
  8859.     // logFeats([queue.src.Map,queue.src.Stats]);
  8860.     // logFeats([queue.dest.Map,queue.dest.Stats]);
  8861.    
  8862.     if (!queue.src.Stats[layers.critter] && !queue.src.Stats[layers.critter].stats.card) {
  8863.         queue.src.Stats = default_entity_stats[full_map[x,y,z]];
  8864.     }
  8865.  
  8866.     if (!queue.dest.Stats[layers.critter] && !queue.dest.Stats[layers.critter].stats.card) {
  8867.         queue.dest.Stats = default_entity_stats[full_map[x2,y2,z]];
  8868.     }
  8869.  
  8870.     if (turnTable[x][y].hadit === 1 || turnTable[x2][y2].hadit === 1) {
  8871.         return false;
  8872.     }
  8873.  
  8874.     turnTable[x][y].hasit = 1;
  8875.     turnTable[x][y].hadit = 1;
  8876.  
  8877.     logFeats(`{${queue.src.Stats[layers.critter].stats.card.namesake}: '${queue.src.Stats[layers.critter].stats.card.action}'}`);
  8878.  
  8879.     switch(queue.src.Stats[layers.critter].stats.card.namesake){
  8880.     case ucwords(`Placeholder`):
  8881.     case ucwords(`Out Of Bounds`):
  8882.         // console.log(queue.src.Stats[layers.critter].stats.card.namesake);
  8883.         return null;
  8884.     default:   
  8885.         // console.log(queue.src.Stats[layers.critter].stats.card.namesake);
  8886.         break;
  8887.     }
  8888.    
  8889.     let actionRoster = sections(queue.src.Stats[layers.critter].stats.card.action,4);
  8890.    
  8891.     /*
  8892.     var default_action_stats = [];
  8893.    
  8894.     for(let $index = 0; $index < actionRoster.length; $index++){
  8895.         default_action_stats[actionRoster[$index]] = loadJSONDirect(`${host}/test dictionary/scripts/json/gamevars/actions/`+actionRoster[$index]+`.json`);
  8896.     }
  8897.     */
  8898.  
  8899.     let options = actionRoster;
  8900.    
  8901.     let choiceRoll = dice(`1d${options.length}`) - 1;
  8902.     let choice = options[choiceRoll];
  8903.  
  8904.     let choiceDirect = choice;
  8905.     let choiceName = ucwords('unknown');
  8906.  
  8907.     let srcCrit = inlineNames(queue.src.Map[layers.critter],4)[0];
  8908.     let destCrit = inlineNames(queue.dest.Map[layers.critter],4)[0];
  8909.  
  8910.     let srcName = ucwords(queue.src.Stats[layers.critter].stats.card.namesake);
  8911.     let destName = ucwords(queue.dest.Stats[layers.critter].stats.card.namesake);
  8912.    
  8913.  
  8914.     if (invalidName(destCrit,2)){
  8915.         destName = ucwords('clear passage');
  8916.     }
  8917.  
  8918.     if (choiceName !== ucwords('unknown')) {
  8919.         narration.push(`@ ${padCoord([x, y])}: ${srcName} attempted to wield their ${choiceName} ability upon the nearest adjacent ${ucwords(cardDirect[direction])}ward ${destName}.. (Rolled ${choiceRoll + 1} out of ${options.length})`);
  8920.     } else {
  8921.         return null;
  8922.     }
  8923.  
  8924.     if (invalidName(choice,2)){
  8925.         return null;
  8926.     }
  8927.  
  8928.     let functionName = `${attributes[z]}_${srcCrit}_${choice}`;
  8929.     let result = callAttributeFunction(functionName, queue);
  8930.  
  8931.     let Status = ``;
  8932.  
  8933.     if (result !== true) {
  8934.         Status = ucwords(`Failure`);
  8935.     } else {
  8936.         Status = ucwords(`Success`);
  8937.     }
  8938.  
  8939.     narration.push(`@ ${padCoord([x, y])}: ${srcName}'s attempted usage of their ${choiceName} ability resulted in ${Status}.`);
  8940.  
  8941.     if (result !== true) {
  8942.         return null;
  8943.     }
  8944.  
  8945.     full_map[x][y] = queue.src.Map;
  8946.     full_entity_stats[x][y] = queue.src.Stats;
  8947.    
  8948.     full_map[x2][y2] = queue.dest.Map;
  8949.     full_entity_stats[x2][y2] = queue.dest.Stats;
  8950.  
  8951.     return true;
  8952. }
  8953.  
  8954. // Function to move the critter from source to destination
  8955. function moveCritter(srcCoords, destCoords, z) {
  8956.     let [x, y] = srcCoords;
  8957.     let [x2, y2] = destCoords;
  8958.     logDebug(`Moving critter from (${x}, ${y}, ${z}) to (${x2}, ${y2}, ${z})`);
  8959.    
  8960.     for(let zi = 0; zi < layers.gui; zi++)
  8961.     {
  8962.  
  8963.         switch(zi){
  8964.         case layers.critter:
  8965.         case layers.ailment:
  8966.            
  8967.             // Swap critter positions  
  8968.             [
  8969.                 full_map[x][y][zi],
  8970.                 full_map[x2][y2][zi]
  8971.             ]
  8972.             =
  8973.             [
  8974.                 full_map[x2][y2][zi],
  8975.                 full_map[x][y][zi]
  8976.             ];
  8977.  
  8978.             // Update stats accordingly
  8979.             [
  8980.                 full_entity_stats[x][y][zi], full_entity_stats[x2][y2][zi]
  8981.             ]
  8982.             =
  8983.             [
  8984.                 full_entity_stats[x2][y2][zi], full_entity_stats[x][y][zi]
  8985.             ];
  8986.            
  8987.             break;
  8988.         }
  8989.     }
  8990.     // Update turnTable to reflect the move
  8991.     turnTable[x][y].hasit = 0;
  8992.     turnTable[x][y].hadit = 1;
  8993.     turnTable[x2][y2].hasit = 1;
  8994.     turnTable[x2][y2].hadit = 1;
  8995.     logDebug(`Critter moved successfully.`);
  8996.    
  8997. }
  8998.  
  8999. // Check if coordinates are valid
  9000. function validateCoords(coords) {
  9001.     if (!Array.isArray(coords) || coords.length !== 2) {
  9002.         logError("Invalid coordinates:", coords);
  9003.         return false;
  9004.     }
  9005.  
  9006.     let [x, y] = coords.map(c => parseInt(c, 10));
  9007.     if (isNaN(x) || isNaN(y)) {
  9008.         logError("Coordinates are not numbers:", coords);
  9009.         return false;
  9010.     }
  9011.  
  9012.     logDebug("Coordinates validated:", coords);
  9013.     return true;
  9014. }
  9015.  
  9016. // Check if coordinates are out of bounds and adjust if necessary
  9017. function soob(coords, rules) {
  9018.    
  9019.     if (!Array.isArray(coords) || !Array.isArray(rules) || coords.length !== rules.length) {
  9020.         logError("Invalid coordinates or rules for soob:", coords, rules);
  9021.         return false;
  9022.     }
  9023.    
  9024.     let [x,y] = coords;
  9025.  
  9026.     let adjustedCoords = coords.map((coord, index) => {
  9027.         let x = Math.round(parseInt(coord, 10));
  9028.         if (isNaN(x)) return false;
  9029.  
  9030.         let [min, max] = rules[index].map(rule => Math.round(parseInt(rule, 10)));
  9031.         if (isNaN(min) || isNaN(max)) return false;
  9032.  
  9033.         return Math.min(Math.max(x, min), max);
  9034.     });
  9035.  
  9036.     if (adjustedCoords.includes(false)) {
  9037.         logError("Adjusted coordinates contain invalid values:", adjustedCoords);
  9038.         return false;
  9039.     }
  9040.  
  9041.     const result = adjustedCoords.every((coord, index) => coord === coords[index]) ? true : adjustedCoords;
  9042.     logDebug("soob result for coords", coords, ":", result);
  9043.     return result;
  9044. }
  9045.  
  9046. // Function to validate and deep copy the data
  9047. function validateAndDeepCopy(data) {
  9048.     if (typeof data === 'undefined') {
  9049.         logError("Data is undefined, cannot deep copy");
  9050.         return null;
  9051.     }
  9052.  
  9053.     try {
  9054.         return JSON.parse(JSON.stringify(data));
  9055.     } catch (e) {
  9056.         logError("Failed to parse data:", data, e);
  9057.         return null;
  9058.     }
  9059. }
  9060.  
  9061. function padNumber(num, length, char = '0') {
  9062.  return num.toString ( ).padStart(length, char);
  9063. }
  9064. function padCoord(Coord){
  9065.     return '('+padNumber(Coord[0], 5, ' ')+','+padNumber(Coord[1], 5, ' ')+')';
  9066. }
  9067.  
  9068. // console.log(`Exists: "/GFX/dooropen.png"`,`(`+fileExists(`/GFX/dooropen.png`)+`)`);
  9069.  
  9070. /* Missing File: {{ #viewCursor=/test dictionary/scripts/json/gamevars/viewCursor.json }} */
  9071.  
  9072. // Hover position
  9073. viewCursor.hover.x = 0;
  9074. viewCursor.hover.y = 0;
  9075. viewCursor.hover.z = layers.gui;
  9076.  
  9077. // Hover previous position
  9078. viewCursor.prev.x = viewCursor.hover.x;
  9079. viewCursor.prev.y = viewCursor.hover.y;
  9080. viewCursor.prev.z = viewCursor.hover.z;
  9081.  
  9082. var viewSpanX = viewConstraints.viewMaxX - viewConstraints.viewMinX + 1;
  9083. var viewSpanY = viewConstraints.viewMaxY - viewConstraints.viewMinY + 1;
  9084.  
  9085. var purseSpanX = purseConstraints.purseMaxX - purseConstraints.purseMinX + 1;
  9086. var purseSpanY = purseConstraints.purseMaxY - purseConstraints.purseMinY + 1;
  9087.  
  9088. var cardDirect = [];
  9089. var cardinals = [];
  9090.  
  9091. var attributes = [
  9092.     "terrain",
  9093.     "critter",
  9094.     "object",
  9095.     "ailment",
  9096.     "gui"
  9097. ]
  9098. var entityRoster = {
  9099.     "terrain": [
  9100.         "____",
  9101.         "dirt",
  9102.         "hole",
  9103.         "watr",
  9104.         "stps",
  9105.         "stpw"
  9106.     ],
  9107.     "critter": [
  9108.         "____",
  9109.         "dtby",
  9110.         "spdr",
  9111.         "grml",
  9112.         "imp_",
  9113.         "emgd",
  9114.         "shkt",
  9115.         "pndx"
  9116.     ],
  9117.     "object": [
  9118.         "____",
  9119.         "door",
  9120.         "wall",
  9121.         "bldr",
  9122.         "ccts",
  9123.         "chst",
  9124.         "pwch"
  9125.     ],
  9126.     "ailment": [
  9127.         "____",
  9128.         "web_",
  9129.         "wing",
  9130.         "cure",
  9131.         "vnom",
  9132.         "fire",
  9133.         "loc1",
  9134.         "loc2",
  9135.         "loc3",
  9136.         "dust",
  9137.         "zzzz"
  9138.     ]
  9139. }
  9140.  
  9141. var actionRoster = [
  9142.     "____",
  9143.     "wstf",
  9144.     "bite",
  9145.     "burn",
  9146.     "cure",
  9147.     "dggr",
  9148.     "fire",
  9149.     "grpl",
  9150.     "ispt",
  9151.     "kick",
  9152.     "lash",
  9153.     "move",
  9154.     "pike",
  9155.     "pnch",
  9156.     "seed",
  9157.     "tngl",
  9158.     "vnom",
  9159.     "web_"
  9160. ]
  9161.  
  9162.  
  9163.  
  9164.  
  9165.  
  9166. var narration = [];
  9167.  
  9168. // Settings for debugging flags are as follows:
  9169. // (Suggested settings are for debugging only.)
  9170. const DEBUG = {
  9171.     // Set to false to disable detailed logging
  9172.     // suggested setting: "false"
  9173.     FULL: true,
  9174.  
  9175.     // Set to false to disable detailed logging
  9176.     // suggested setting: "false"
  9177.     DETAIL: false,
  9178.    
  9179.     // Set to false to disable error reports
  9180.     // suggested setting: "true"
  9181.     ERROR: false,
  9182.    
  9183.     // Set to false to disable warning reports
  9184.     // suggested setting: "true"
  9185.     WARNING: false,
  9186.  
  9187.     // Set to false to disable feat tracking
  9188.     // enabled highly suggested: "true"
  9189.     FEATS: true,
  9190.  
  9191.     // Set to false to disable inline messages
  9192.     // suggested setting: "false"
  9193.     CONSOLE: false,
  9194.  
  9195.     GUI: true
  9196.  
  9197. }
  9198.  
  9199. function logDebug(...args) {
  9200.     if (DEBUG.DETAIL) {
  9201.         console.log(...args);
  9202.     }
  9203. }
  9204.  
  9205. function logError(...args) {
  9206.     if (DEBUG.ERROR) {
  9207.         console.error(...args);
  9208.     }
  9209. }
  9210.  
  9211. function logWarning(...args) {
  9212.     if (DEBUG.WARNING) {
  9213.         console.warn(...args);
  9214.     }
  9215. }
  9216.  
  9217. function logFeats(...args) {
  9218.     if (DEBUG.FEATS) {
  9219.         console.warn(...args);
  9220.     }
  9221. }
  9222.  
  9223. function logGUI(...args) {
  9224.     if (DEBUG.GUI) {
  9225.         console.warn(...args);
  9226.     }
  9227. }
  9228.  
  9229. function logConsole(...args) {
  9230.     if (DEBUG.CONSOLE) {
  9231.         console.log(...args);
  9232.     }
  9233. }
  9234.  
  9235.  
  9236. /* array blocks lohi.js */
  9237.  
  9238. function create1DArrayBlock(defaultValue, low1, high1) {
  9239.     const ArrayBlock = [];
  9240.     for (let i = low1; i <= high1; i++) {
  9241.         ArrayBlock[i] = defaultValue;
  9242.     }
  9243.     return ArrayBlock;
  9244. }
  9245.  
  9246. function create2DArrayBlock(defaultValue, low1, high1, low2, high2) {
  9247.     const ArrayBlock = [];
  9248.     for (let i = low1; i <= high1; i++) {
  9249.         ArrayBlock[i] = [];
  9250.         for (let j = low2; j <= high2; j++) {
  9251.             ArrayBlock[i][j] = defaultValue;
  9252.         }
  9253.     }
  9254.     return ArrayBlock;
  9255. }
  9256.  
  9257. function create3DArrayBlock(defaultValue, low1, high1, low2, high2, low3, high3) {
  9258.     const ArrayBlock = [];
  9259.     for (let i = low1; i <= high1; i++) {
  9260.         const innerArrayBlock1 = [];
  9261.         for (let j = low2; j <= high2; j++) {
  9262.             const innerArrayBlock2 = [];
  9263.             for (let k = low3; k <= high3; k++) {
  9264.                 innerArrayBlock2.push(defaultValue);
  9265.             }
  9266.             innerArrayBlock1.push(innerArrayBlock2);
  9267.         }
  9268.         ArrayBlock.push(innerArrayBlock1);
  9269.     }
  9270.     return ArrayBlock;
  9271. }
  9272.  
  9273. function create1DObjectBlock(defaultValue, low1, high1) {
  9274.     const ObjectBlock = {};
  9275.     for (let i = low1; i <= high1; i++) {
  9276.         ObjectBlock[i] = defaultValue;
  9277.     }
  9278.     return ObjectBlock;
  9279. }
  9280.  
  9281. function create2DObjectBlock(defaultValue, low1, high1, low2, high2) {
  9282.     const ObjectBlock = {};
  9283.     for (let i = low1; i <= high1; i++) {
  9284.         ObjectBlock[i] = {};
  9285.         for (let j = low2; j <= high2; j++) {
  9286.             ObjectBlock[i][j] = defaultValue;
  9287.         }
  9288.     }
  9289.     return ObjectBlock;
  9290. }
  9291.  
  9292. function create3DObjectBlock(defaultValue, low1, high1, low2, high2, low3, high3) {
  9293.     const ObjectBlock = [];
  9294.     for (let i = low1; i <= high1; i++) {
  9295.         const innerObjectBlock1 = [];
  9296.         for (let j = low2; j <= high2; j++) {
  9297.             const innerObjectBlock2 = [];
  9298.             for (let k = low3; k <= high3; k++) {
  9299.                 innerObjectBlock2.push(defaultValue);
  9300.             }
  9301.             innerObjectBlock1.push(innerObjectBlock2);
  9302.         }
  9303.         ObjectBlock.push(innerObjectBlock1);
  9304.     }
  9305.     return ObjectBlock;
  9306. }
  9307.  
  9308.  
  9309. /* Js Script: "/test dictionary/scripts/js/animatics/animatics vars.js" */
  9310.  
  9311. var vowels = {
  9312.     "vowels": "aeiou"
  9313. }
  9314.  
  9315. // Ported BASIC functions
  9316. function len(subject) {
  9317.    return subject.toString ( ).length;
  9318. }
  9319.  
  9320. function left(subject, n) {
  9321.    return subject.toString ( ).substring(0, n);
  9322. }
  9323.  
  9324. function right(subject, n) {
  9325.    return subject.toString ( ).substring(subject.length - n);
  9326. }
  9327.  
  9328. function mid(subject, start, length) {
  9329.    subject = subject.toString ( );
  9330.    let startIndex = start - 1;
  9331.    return length === undefined ? subject.substring(startIndex) : subject.substring(startIndex, startIndex + length);
  9332. }
  9333.  
  9334. function instr(haystack, needle, start) {
  9335.    if (typeof haystack !== 'string') throw new TypeError('haystack must be a string');
  9336.    needle = typeof needle === 'string' ? needle : ',';
  9337.    start = typeof start === 'number' ? start : 1;
  9338.    start = Math.max(0, start - 1);
  9339.    const index = haystack.indexOf(needle, start);
  9340.    return index !== -1 ? index + 1 : 0;
  9341. }
  9342.  
  9343. function reduceVowels(subject) {
  9344.    subject = subject.toLowerCase ( );
  9345.    if (len(subject) < 4) return left(subject + '____', 4);
  9346.  
  9347.    let count = 0;
  9348.    const vowelsList = 'aeiou';
  9349.    for (let offset = 0; offset < subject.length; offset++) {
  9350.        if (len(subject) === 4) return subject;
  9351.        if (instr(vowelsList, mid(subject, offset + 1, 1))) {
  9352.            count++;
  9353.            if (count === 1 && len(subject) > 4) {
  9354.                subject = left(subject, offset) + mid(subject, offset + 2, len(subject) - offset - 1);
  9355.                offset--;
  9356.            }
  9357.        }
  9358.    }
  9359.    return subject;
  9360. }
  9361.  
  9362. function inlineNames(data, span, plug) {
  9363.    return data.slice(0, span).map(item => {
  9364.        if (typeof item === 'object' && item !== null && item.name) {
  9365.            return item.name + (plug || '');
  9366.        } else if (typeof item === 'string') {
  9367.            return item + (plug || '');
  9368.        } else {
  9369.            return '____';
  9370.        }
  9371.    });
  9372. }
  9373.  
  9374. function inlineName(name, plug, span) {
  9375.    if (typeof name === 'string' || (typeof name === 'object' && name !== null && name.name)) {
  9376.        let nameStr = typeof name === 'string' ? name : name.name;
  9377.        let concatenatedName = nameStr + plug.repeat(span);
  9378.        return left(concatenatedName, plug.length * span);
  9379.    } else {
  9380.        return '____';
  9381.    }
  9382. }
  9383.  
  9384. function invalidName(name, span) {
  9385.    name = (name + `____`.repeat(span)).substr(0, span * 4);
  9386.    return name === `____`.repeat(span);
  9387. }
  9388.  
  9389. function loadCards ( ) {
  9390.    let cardDirect = [];
  9391.    let cardinals = [];
  9392.    
  9393.    cardDirect.push(...loadJSONDirect('/test dictionary/scripts/json/gamevars/cardDirect.json'));
  9394.    cardinals.push(...loadJSONDirect('/test dictionary/scripts/json/gamevars/cardinals.json'));
  9395.    
  9396.    if (cardDirect.length > 0 && cardinals.length > 0) {
  9397.        const cards = cardDirect.map((direction, index) => ({
  9398.            [reduceVowels(direction)]: { x: cardinals[index][0], y: cardinals[index][1] }
  9399.        }));
  9400.        // Do something with cards
  9401.    }
  9402. }
  9403.  
  9404. function sections(subject = '_'.repeat(8), length = 4, plug = '_'.repeat(8)) {
  9405.    let result = [];
  9406.    for (let index = 0; index < subject.length; index += length) {
  9407.        let section = mid(subject, index + 1, length) + plug;
  9408.        result.push(section.substr(0, length));
  9409.    }
  9410.    return result;
  9411. }
  9412.  
  9413. function inlineName(imagePath = `____`, repeats = 2, plug = `____`) {
  9414.    let baseImagePath = basename(imagePath);
  9415.    const concatenatedString = baseImagePath + plug.repeat(repeats);
  9416.    const substringLength = repeats * plug.length;
  9417.    return concatenatedString.substring(0, substringLength);
  9418. }
  9419.  
  9420. function ucwords(subject) {
  9421.    
  9422.     return subject.replace(/\b\w/g, function(match) {
  9423.        return match.toUpperCase ( );
  9424.    });
  9425. }
  9426.  
  9427. function isObject(variable) {
  9428.    return variable !== null && typeof variable === 'object' && !Array.isArray(variable);
  9429. }
  9430.  
  9431.  
  9432. /* dice.js */
  9433.  
  9434.  
  9435. // Generate a random integer between min (inclusive) and max (exclusive)
  9436. function randInt(min, max) {
  9437.     return Math.floor(Math.random ( ) * (max - min + 1)) + min;
  9438. }
  9439.  
  9440. // Generate a random dice roll
  9441. function dice(cell) {
  9442.     if (cell.includes('${special.emptyCell}')) {
  9443.         cell = cell.replace('${special.emptyCell}', `${special.emptyCell}`);
  9444.     }
  9445.    
  9446.     var dicePattern = /(?<count>\d+)d(?<sides>\d+)/mi;
  9447.     var match = dicePattern.exec(cell); // Executing the regular expression on the cell string
  9448.  
  9449.     if (match !== null) { // Checking if there's a match
  9450.         var count = parseInt(match.groups.count); // Extracting count from the match
  9451.         var sides = parseInt(match.groups.sides); // Extracting sides from the match
  9452.         var rollResult = count * randInt(1, sides); // Generating random roll result
  9453.         cell = cell.replace(match[0], rollResult); // Replacing the dice notation with the rolled result
  9454.        
  9455.         cell = parseInt(cell,10);
  9456.     }
  9457.    
  9458.     return cell;
  9459. }
  9460.  
  9461.  
  9462.  
  9463.  
  9464. var default_entity_stats = [];
  9465. var default_action_stats = [];
  9466.  
  9467. default_entity_stats = loadDefaultStats ( );
  9468. default_action_stats = loadDefaultActions ( );
  9469.  
  9470. function loadDefaultStats ( ){
  9471.  
  9472.     var ent_layers = [];
  9473.     var ent_stats = [];
  9474.  
  9475.     ent_stats[`____`] =
  9476.         loadJSONDirect(`/test dictionary/scripts/json/gamevars/default stats.json`);
  9477.    
  9478. var ent_layers = {
  9479.     "terrain": [
  9480.         "____",
  9481.         "dirt",
  9482.         "hole",
  9483.         "watr",
  9484.         "stps",
  9485.         "stpw"
  9486.     ],
  9487.     "critter": [
  9488.         "____",
  9489.         "dtby",
  9490.         "spdr",
  9491.         "grml",
  9492.         "imp_",
  9493.         "emgd",
  9494.         "shkt",
  9495.         "pndx"
  9496.     ],
  9497.     "object": [
  9498.         "____",
  9499.         "door",
  9500.         "wall",
  9501.         "bldr",
  9502.         "ccts",
  9503.         "chst",
  9504.         "pwch"
  9505.     ],
  9506.     "ailment": [
  9507.         "____",
  9508.         "web_",
  9509.         "wing",
  9510.         "cure",
  9511.         "vnom",
  9512.         "fire",
  9513.         "loc1",
  9514.         "loc2",
  9515.         "loc3",
  9516.         "dust",
  9517.         "zzzz"
  9518.     ]
  9519. }
  9520.  
  9521.  
  9522.     // console.log(ent_layers);
  9523.  
  9524.     for(let layer = 0; layer < ent_layers.length; layer++ ){
  9525.        
  9526.         let entityRoster = ent_layers[layer];
  9527.    
  9528.         for(let index = 0; index < entityRoster.length; index++ ){
  9529.             ent_stats[entityRoster[index]] = loadJSONDirect(`/test dictionary/scripts/json/gamevars/entities/`+left(entityRoster[index]+'____',4)+`.json`);
  9530.         }
  9531.     }
  9532.    
  9533.     return ent_stats;
  9534. }
  9535.  
  9536. function loadDefaultActions ( ){
  9537.    
  9538.     var actionRoster = []; 
  9539.     var act_stats = [];
  9540.  
  9541. var act_stats = [
  9542.     "____",
  9543.     "wstf",
  9544.     "bite",
  9545.     "burn",
  9546.     "cure",
  9547.     "dggr",
  9548.     "fire",
  9549.     "grpl",
  9550.     "ispt",
  9551.     "kick",
  9552.     "lash",
  9553.     "move",
  9554.     "pike",
  9555.     "pnch",
  9556.     "seed",
  9557.     "tngl",
  9558.     "vnom",
  9559.     "web_"
  9560. ]
  9561.    
  9562.     for( let index = 0; index < actionRoster.length; index++ ){
  9563.        
  9564.         let actName = actionRoster[index];
  9565.  
  9566.         act_stats[actName] = [];       
  9567.        
  9568.         let url = `${host}/test dictionary/scripts/json/gamevars/actions/${actName}.json`;
  9569.  
  9570.         act_stats[actName] = loadJSONDirect(url);
  9571.     }
  9572.     return act_stats;
  9573. }
  9574.  
  9575. function loadMap ( ){
  9576.    
  9577. var rawMap = [
  9578.     [
  9579.         [
  9580.             "dirt____",
  9581.             "________",
  9582.             "wall____",
  9583.             "________"
  9584.         ],
  9585.         [
  9586.             "dirt____",
  9587.             "________",
  9588.             "wall____",
  9589.             "________"
  9590.         ],
  9591.         [
  9592.             "dirt____",
  9593.             "________",
  9594.             "wall____",
  9595.             "________"
  9596.         ],
  9597.         [
  9598.             "dirt____",
  9599.             "________",
  9600.             "wall____",
  9601.             "________"
  9602.         ],
  9603.         [
  9604.             "dirt____",
  9605.             "________",
  9606.             "wall____",
  9607.             "________"
  9608.         ],
  9609.         [
  9610.             "dirt____",
  9611.             "________",
  9612.             "wall____",
  9613.             "________"
  9614.         ],
  9615.         [
  9616.             "dirt____",
  9617.             "________",
  9618.             "wall____",
  9619.             "________"
  9620.         ],
  9621.         [
  9622.             "dirt____",
  9623.             "________",
  9624.             "wall____",
  9625.             "________"
  9626.         ],
  9627.         [
  9628.             "dirt____",
  9629.             "________",
  9630.             "wall____",
  9631.             "________"
  9632.         ],
  9633.         [
  9634.             "dirt____",
  9635.             "________",
  9636.             "wall____",
  9637.             "________"
  9638.         ],
  9639.         [
  9640.             "dirt____",
  9641.             "________",
  9642.             "wall____",
  9643.             "________"
  9644.         ],
  9645.         [
  9646.             "dirt____",
  9647.             "________",
  9648.             "wall____",
  9649.             "________"
  9650.         ],
  9651.         [
  9652.             "dirt____",
  9653.             "________",
  9654.             "wall____",
  9655.             "________"
  9656.         ],
  9657.         [
  9658.             "dirt____",
  9659.             "________",
  9660.             "wall____",
  9661.             "________"
  9662.         ],
  9663.         [
  9664.             "dirt____",
  9665.             "________",
  9666.             "wall____",
  9667.             "________"
  9668.         ],
  9669.         [
  9670.             "dirt____",
  9671.             "________",
  9672.             "wall____",
  9673.             "________"
  9674.         ],
  9675.         [
  9676.             "dirt____",
  9677.             "________",
  9678.             "wall____",
  9679.             "________"
  9680.         ],
  9681.         [
  9682.             "dirt____",
  9683.             "________",
  9684.             "wall____",
  9685.             "________"
  9686.         ],
  9687.         [
  9688.             "dirt____",
  9689.             "________",
  9690.             "wall____",
  9691.             "________"
  9692.         ]
  9693.     ],
  9694.     [
  9695.         [
  9696.             "dirt____",
  9697.             "________",
  9698.             "wall____",
  9699.             "________"
  9700.         ],
  9701.         [
  9702.             "dirt____",
  9703.             "________",
  9704.             "________",
  9705.             "________"
  9706.         ],
  9707.         [
  9708.             "dirt____",
  9709.             "spdr____",
  9710.             "________",
  9711.             "________"
  9712.         ],
  9713.         [
  9714.             "dirt____",
  9715.             "________",
  9716.             "wall____",
  9717.             "________"
  9718.         ],
  9719.         [
  9720.             "dirt____",
  9721.             "spdr____",
  9722.             "________",
  9723.             "________"
  9724.         ],
  9725.         [
  9726.             "dirt____",
  9727.             "________",
  9728.             "chst____",
  9729.             "________"
  9730.         ],
  9731.         [
  9732.             "dirt____",
  9733.             "________",
  9734.             "wall____",
  9735.             "________"
  9736.         ],
  9737.         [
  9738.             "dirt____",
  9739.             "________",
  9740.             "________",
  9741.             "________"
  9742.         ],
  9743.         [
  9744.             "dirt____",
  9745.             "emgd____",
  9746.             "________",
  9747.             "________"
  9748.         ],
  9749.         [
  9750.             "dirt____",
  9751.             "________",
  9752.             "________",
  9753.             "________"
  9754.         ],
  9755.         [
  9756.             "dirt____",
  9757.             "________",
  9758.             "wall____",
  9759.             "________"
  9760.         ],
  9761.         [
  9762.             "dirt____",
  9763.             "________",
  9764.             "________",
  9765.             "________"
  9766.         ],
  9767.         [
  9768.             "dirt____",
  9769.             "________",
  9770.             "________",
  9771.             "________"
  9772.         ],
  9773.         [
  9774.             "dirt____",
  9775.             "________",
  9776.             "wall____",
  9777.             "________"
  9778.         ],
  9779.         [
  9780.             "dirt____",
  9781.             "________",
  9782.             "________",
  9783.             "________"
  9784.         ],
  9785.         [
  9786.             "dirt____",
  9787.             "pndx____",
  9788.             "________",
  9789.             "________"
  9790.         ],
  9791.         [
  9792.             "dirt____",
  9793.             "________",
  9794.             "________",
  9795.             "________"
  9796.         ],
  9797.         [
  9798.             "dirt____",
  9799.             "________",
  9800.             "chst____",
  9801.             "________"
  9802.         ],
  9803.         [
  9804.             "dirt____",
  9805.             "________",
  9806.             "wall____",
  9807.             "________"
  9808.         ]
  9809.     ],
  9810.     [
  9811.         [
  9812.             "dirt____",
  9813.             "________",
  9814.             "wall____",
  9815.             "________"
  9816.         ],
  9817.         [
  9818.             "dirt____",
  9819.             "________",
  9820.             "________",
  9821.             "________"
  9822.         ],
  9823.         [
  9824.             "dirt____",
  9825.             "________",
  9826.             "________",
  9827.             "________"
  9828.         ],
  9829.         [
  9830.             "dirt____",
  9831.             "________",
  9832.             "wall____",
  9833.             "________"
  9834.         ],
  9835.         [
  9836.             "dirt____",
  9837.             "________",
  9838.             "________",
  9839.             "________"
  9840.         ],
  9841.         [
  9842.             "dirt____",
  9843.             "________",
  9844.             "________",
  9845.             "________"
  9846.         ],
  9847.         [
  9848.             "dirt____",
  9849.             "________",
  9850.             "________",
  9851.             "________"
  9852.         ],
  9853.         [
  9854.             "dirt____",
  9855.             "________",
  9856.             "________",
  9857.             "________"
  9858.         ],
  9859.         [
  9860.             "dirt____",
  9861.             "________",
  9862.             "________",
  9863.             "________"
  9864.         ],
  9865.         [
  9866.             "dirt____",
  9867.             "________",
  9868.             "________",
  9869.             "________"
  9870.         ],
  9871.         [
  9872.             "dirt____",
  9873.             "________",
  9874.             "________",
  9875.             "________"
  9876.         ],
  9877.         [
  9878.             "dirt____",
  9879.             "________",
  9880.             "________",
  9881.             "________"
  9882.         ],
  9883.         [
  9884.             "hole____",
  9885.             "________",
  9886.             "________",
  9887.             "________"
  9888.         ],
  9889.         [
  9890.             "hole____",
  9891.             "________",
  9892.             "________",
  9893.             "________"
  9894.         ],
  9895.         [
  9896.             "dirt____",
  9897.             "________",
  9898.             "________",
  9899.             "________"
  9900.         ],
  9901.         [
  9902.             "dirt____",
  9903.             "________",
  9904.             "________",
  9905.             "________"
  9906.         ],
  9907.         [
  9908.             "dirt____",
  9909.             "shkt____",
  9910.             "________",
  9911.             "________"
  9912.         ],
  9913.         [
  9914.             "dirt____",
  9915.             "________",
  9916.             "________",
  9917.             "________"
  9918.         ],
  9919.         [
  9920.             "dirt____",
  9921.             "________",
  9922.             "wall____",
  9923.             "________"
  9924.         ]
  9925.     ],
  9926.     [
  9927.         [
  9928.             "dirt____",
  9929.             "________",
  9930.             "wall____",
  9931.             "________"
  9932.         ],
  9933.         [
  9934.             "dirt____",
  9935.             "________",
  9936.             "________",
  9937.             "________"
  9938.         ],
  9939.         [
  9940.             "dirt____",
  9941.             "________",
  9942.             "________",
  9943.             "________"
  9944.         ],
  9945.         [
  9946.             "dirt____",
  9947.             "________",
  9948.             "wall____",
  9949.             "________"
  9950.         ],
  9951.         [
  9952.             "dirt____",
  9953.             "________",
  9954.             "________",
  9955.             "________"
  9956.         ],
  9957.         [
  9958.             "dirt____",
  9959.             "spdr____",
  9960.             "________",
  9961.             "________"
  9962.         ],
  9963.         [
  9964.             "dirt____",
  9965.             "________",
  9966.             "wall____",
  9967.             "________"
  9968.         ],
  9969.         [
  9970.             "dirt____",
  9971.             "________",
  9972.             "door____",
  9973.             "________"
  9974.         ],
  9975.         [
  9976.             "dirt____",
  9977.             "________",
  9978.             "wall____",
  9979.             "________"
  9980.         ],
  9981.         [
  9982.             "dirt____",
  9983.             "________",
  9984.             "wall____",
  9985.             "________"
  9986.         ],
  9987.         [
  9988.             "dirt____",
  9989.             "________",
  9990.             "wall____",
  9991.             "________"
  9992.         ],
  9993.         [
  9994.             "dirt____",
  9995.             "________",
  9996.             "________",
  9997.             "________"
  9998.         ],
  9999.         [
  10000.             "hole____",
  10001.             "________",
  10002.             "________",
  10003.             "________"
  10004.         ],
  10005.         [
  10006.             "hole____",
  10007.             "________",
  10008.             "________",
  10009.             "________"
  10010.         ],
  10011.         [
  10012.             "hole____",
  10013.             "________",
  10014.             "________",
  10015.             "________"
  10016.         ],
  10017.         [
  10018.             "dirt____",
  10019.             "________",
  10020.             "________",
  10021.             "________"
  10022.         ],
  10023.         [
  10024.             "dirt____",
  10025.             "________",
  10026.             "bldr____",
  10027.             "________"
  10028.         ],
  10029.         [
  10030.             "dirt____",
  10031.             "________",
  10032.             "________",
  10033.             "________"
  10034.         ],
  10035.         [
  10036.             "dirt____",
  10037.             "________",
  10038.             "wall____",
  10039.             "________"
  10040.         ]
  10041.     ],
  10042.     [
  10043.         [
  10044.             "dirt____",
  10045.             "________",
  10046.             "wall____",
  10047.             "________"
  10048.         ],
  10049.         [
  10050.             "dirt____",
  10051.             "spdr____",
  10052.             "________",
  10053.             "________"
  10054.         ],
  10055.         [
  10056.             "dirt____",
  10057.             "________",
  10058.             "________",
  10059.             "________"
  10060.         ],
  10061.         [
  10062.             "dirt____",
  10063.             "________",
  10064.             "wall____",
  10065.             "________"
  10066.         ],
  10067.         [
  10068.             "dirt____",
  10069.             "________",
  10070.             "________",
  10071.             "________"
  10072.         ],
  10073.         [
  10074.             "dirt____",
  10075.             "________",
  10076.             "________",
  10077.             "________"
  10078.         ],
  10079.         [
  10080.             "dirt____",
  10081.             "________",
  10082.             "wall____",
  10083.             "________"
  10084.         ],
  10085.         [
  10086.             "dirt____",
  10087.             "________",
  10088.             "bldr____",
  10089.             "________"
  10090.         ],
  10091.         [
  10092.             "dirt____",
  10093.             "________",
  10094.             "________",
  10095.             "________"
  10096.         ],
  10097.         [
  10098.             "dirt____",
  10099.             "________",
  10100.             "________",
  10101.             "________"
  10102.         ],
  10103.         [
  10104.             "dirt____",
  10105.             "________",
  10106.             "________",
  10107.             "web_____"
  10108.         ],
  10109.         [
  10110.             "dirt____",
  10111.             "________",
  10112.             "________",
  10113.             "________"
  10114.         ],
  10115.         [
  10116.             "hole____",
  10117.             "shkt____",
  10118.             "________",
  10119.             "________"
  10120.         ],
  10121.         [
  10122.             "stps____",
  10123.             "________",
  10124.             "________",
  10125.             "________"
  10126.         ],
  10127.         [
  10128.             "hole____",
  10129.             "________",
  10130.             "________",
  10131.             "________"
  10132.         ],
  10133.         [
  10134.             "dirt____",
  10135.             "________",
  10136.             "________",
  10137.             "________"
  10138.         ],
  10139.         [
  10140.             "dirt____",
  10141.             "________",
  10142.             "________",
  10143.             "________"
  10144.         ],
  10145.         [
  10146.             "dirt____",
  10147.             "________",
  10148.             "________",
  10149.             "________"
  10150.         ],
  10151.         [
  10152.             "dirt____",
  10153.             "________",
  10154.             "wall____",
  10155.             "________"
  10156.         ]
  10157.     ],
  10158.     [
  10159.         [
  10160.             "dirt____",
  10161.             "________",
  10162.             "door____",
  10163.             "________"
  10164.         ],
  10165.         [
  10166.             "dirt____",
  10167.             "________",
  10168.             "________",
  10169.             "________"
  10170.         ],
  10171.         [
  10172.             "dirt____",
  10173.             "spdr____",
  10174.             "________",
  10175.             "________"
  10176.         ],
  10177.         [
  10178.             "dirt____",
  10179.             "________",
  10180.             "wall____",
  10181.             "________"
  10182.         ],
  10183.         [
  10184.             "dirt____",
  10185.             "spdr____",
  10186.             "________",
  10187.             "________"
  10188.         ],
  10189.         [
  10190.             "dirt____",
  10191.             "________",
  10192.             "________",
  10193.             "________"
  10194.         ],
  10195.         [
  10196.             "dirt____",
  10197.             "________",
  10198.             "wall____",
  10199.             "________"
  10200.         ],
  10201.         [
  10202.             "hole____",
  10203.             "________",
  10204.             "________",
  10205.             "________"
  10206.         ],
  10207.         [
  10208.             "dirt____",
  10209.             "________",
  10210.             "bldr____",
  10211.             "________"
  10212.         ],
  10213.         [
  10214.             "dirt____",
  10215.             "________",
  10216.             "________",
  10217.             "________"
  10218.         ],
  10219.         [
  10220.             "dirt____",
  10221.             "________",
  10222.             "wall____",
  10223.             "________"
  10224.         ],
  10225.         [
  10226.             "dirt____",
  10227.             "________",
  10228.             "chst____",
  10229.             "________"
  10230.         ],
  10231.         [
  10232.             "dirt____",
  10233.             "________",
  10234.             "wall____",
  10235.             "________"
  10236.         ],
  10237.         [
  10238.             "dirt____",
  10239.             "________",
  10240.             "________",
  10241.             "________"
  10242.         ],
  10243.         [
  10244.             "dirt____",
  10245.             "________",
  10246.             "________",
  10247.             "________"
  10248.         ],
  10249.         [
  10250.             "dirt____",
  10251.             "________",
  10252.             "________",
  10253.             "________"
  10254.         ],
  10255.         [
  10256.             "dirt____",
  10257.             "________",
  10258.             "________",
  10259.             "________"
  10260.         ],
  10261.         [
  10262.             "dirt____",
  10263.             "________",
  10264.             "________",
  10265.             "________"
  10266.         ],
  10267.         [
  10268.             "dirt____",
  10269.             "________",
  10270.             "wall____",
  10271.             "________"
  10272.         ]
  10273.     ],
  10274.     [
  10275.         [
  10276.             "dirt____",
  10277.             "________",
  10278.             "wall____",
  10279.             "________"
  10280.         ],
  10281.         [
  10282.             "dirt____",
  10283.             "________",
  10284.             "________",
  10285.             "________"
  10286.         ],
  10287.         [
  10288.             "dirt____",
  10289.             "________",
  10290.             "________",
  10291.             "________"
  10292.         ],
  10293.         [
  10294.             "dirt____",
  10295.             "________",
  10296.             "wall____",
  10297.             "________"
  10298.         ],
  10299.         [
  10300.             "dirt____",
  10301.             "________",
  10302.             "________",
  10303.             "________"
  10304.         ],
  10305.         [
  10306.             "dirt____",
  10307.             "________",
  10308.             "wall____",
  10309.             "________"
  10310.         ],
  10311.         [
  10312.             "dirt____",
  10313.             "________",
  10314.             "wall____",
  10315.             "________"
  10316.         ],
  10317.         [
  10318.             "dirt____",
  10319.             "________",
  10320.             "________",
  10321.             "________"
  10322.         ],
  10323.         [
  10324.             "hole____",
  10325.             "________",
  10326.             "________",
  10327.             "________"
  10328.         ],
  10329.         [
  10330.             "dirt____",
  10331.             "________",
  10332.             "wall____",
  10333.             "________"
  10334.         ],
  10335.         [
  10336.             "dirt____",
  10337.             "________",
  10338.             "wall____",
  10339.             "________"
  10340.         ],
  10341.         [
  10342.             "dirt____",
  10343.             "________",
  10344.             "wall____",
  10345.             "________"
  10346.         ],
  10347.         [
  10348.             "dirt____",
  10349.             "________",
  10350.             "wall____",
  10351.             "________"
  10352.         ],
  10353.         [
  10354.             "dirt____",
  10355.             "________",
  10356.             "door____",
  10357.             "________"
  10358.         ],
  10359.         [
  10360.             "dirt____",
  10361.             "________",
  10362.             "wall____",
  10363.             "________"
  10364.         ],
  10365.         [
  10366.             "dirt____",
  10367.             "________",
  10368.             "wall____",
  10369.             "________"
  10370.         ],
  10371.         [
  10372.             "hole____",
  10373.             "________",
  10374.             "________",
  10375.             "________"
  10376.         ],
  10377.         [
  10378.             "dirt____",
  10379.             "________",
  10380.             "wall____",
  10381.             "________"
  10382.         ],
  10383.         [
  10384.             "dirt____",
  10385.             "________",
  10386.             "wall____",
  10387.             "________"
  10388.         ]
  10389.     ],
  10390.     [
  10391.         [
  10392.             "dirt____",
  10393.             "________",
  10394.             "wall____",
  10395.             "________"
  10396.         ],
  10397.         [
  10398.             "dirt____",
  10399.             "________",
  10400.             "________",
  10401.             "________"
  10402.         ],
  10403.         [
  10404.             "dirt____",
  10405.             "________",
  10406.             "________",
  10407.             "________"
  10408.         ],
  10409.         [
  10410.             "dirt____",
  10411.             "________",
  10412.             "door____",
  10413.             "________"
  10414.         ],
  10415.         [
  10416.             "dirt____",
  10417.             "________",
  10418.             "________",
  10419.             "________"
  10420.         ],
  10421.         [
  10422.             "dirt____",
  10423.             "________",
  10424.             "________",
  10425.             "________"
  10426.         ],
  10427.         [
  10428.             "dirt____",
  10429.             "________",
  10430.             "________",
  10431.             "________"
  10432.         ],
  10433.         [
  10434.             "dirt____",
  10435.             "spdr____",
  10436.             "________",
  10437.             "________"
  10438.         ],
  10439.         [
  10440.             "dirt____",
  10441.             "________",
  10442.             "________",
  10443.             "________"
  10444.         ],
  10445.         [
  10446.             "dirt____",
  10447.             "________",
  10448.             "________",
  10449.             "________"
  10450.         ],
  10451.         [
  10452.             "watr____",
  10453.             "________",
  10454.             "________",
  10455.             "________"
  10456.         ],
  10457.         [
  10458.             "dirt____",
  10459.             "________",
  10460.             "________",
  10461.             "________"
  10462.         ],
  10463.         [
  10464.             "dirt____",
  10465.             "________",
  10466.             "bldr____",
  10467.             "________"
  10468.         ],
  10469.         [
  10470.             "dirt____",
  10471.             "________",
  10472.             "________",
  10473.             "________"
  10474.         ],
  10475.         [
  10476.             "dirt____",
  10477.             "________",
  10478.             "wall____",
  10479.             "________"
  10480.         ],
  10481.         [
  10482.             "dirt____",
  10483.             "________",
  10484.             "________",
  10485.             "________"
  10486.         ],
  10487.         [
  10488.             "dirt____",
  10489.             "________",
  10490.             "________",
  10491.             "________"
  10492.         ],
  10493.         [
  10494.             "dirt____",
  10495.             "dtby____",
  10496.             "________",
  10497.             "________"
  10498.         ],
  10499.         [
  10500.             "dirt____",
  10501.             "________",
  10502.             "wall____",
  10503.             "________"
  10504.         ]
  10505.     ],
  10506.     [
  10507.         [
  10508.             "dirt____",
  10509.             "________",
  10510.             "wall____",
  10511.             "________"
  10512.         ],
  10513.         [
  10514.             "dirt____",
  10515.             "________",
  10516.             "wall____",
  10517.             "________"
  10518.         ],
  10519.         [
  10520.             "dirt____",
  10521.             "________",
  10522.             "wall____",
  10523.             "________"
  10524.         ],
  10525.         [
  10526.             "dirt____",
  10527.             "________",
  10528.             "wall____",
  10529.             "________"
  10530.         ],
  10531.         [
  10532.             "dirt____",
  10533.             "________",
  10534.             "wall____",
  10535.             "________"
  10536.         ],
  10537.         [
  10538.             "dirt____",
  10539.             "________",
  10540.             "________",
  10541.             "________"
  10542.         ],
  10543.         [
  10544.             "dirt____",
  10545.             "pndx____",
  10546.             "________",
  10547.             "________"
  10548.         ],
  10549.         [
  10550.             "dirt____",
  10551.             "________",
  10552.             "________",
  10553.             "________"
  10554.         ],
  10555.         [
  10556.             "dirt____",
  10557.             "________",
  10558.             "________",
  10559.             "________"
  10560.         ],
  10561.         [
  10562.             "dirt____",
  10563.             "________",
  10564.             "________",
  10565.             "________"
  10566.         ],
  10567.         [
  10568.             "watr____",
  10569.             "________",
  10570.             "________",
  10571.             "________"
  10572.         ],
  10573.         [
  10574.             "dirt____",
  10575.             "________",
  10576.             "________",
  10577.             "________"
  10578.         ],
  10579.         [
  10580.             "dirt____",
  10581.             "shkt____",
  10582.             "________",
  10583.             "________"
  10584.         ],
  10585.         [
  10586.             "dirt____",
  10587.             "________",
  10588.             "________",
  10589.             "________"
  10590.         ],
  10591.         [
  10592.             "dirt____",
  10593.             "________",
  10594.             "wall____",
  10595.             "________"
  10596.         ],
  10597.         [
  10598.             "dirt____",
  10599.             "________",
  10600.             "________",
  10601.             "________"
  10602.         ],
  10603.         [
  10604.             "dirt____",
  10605.             "________",
  10606.             "________",
  10607.             "________"
  10608.         ],
  10609.         [
  10610.             "dirt____",
  10611.             "dtby____",
  10612.             "________",
  10613.             "________"
  10614.         ],
  10615.         [
  10616.             "dirt____",
  10617.             "________",
  10618.             "wall____",
  10619.             "________"
  10620.         ]
  10621.     ],
  10622.     [
  10623.         [
  10624.             "stps____",
  10625.             "________",
  10626.             "wall____",
  10627.             "________"
  10628.         ],
  10629.         [
  10630.             "hole____",
  10631.             "________",
  10632.             "________",
  10633.             "________"
  10634.         ],
  10635.         [
  10636.             "hole____",
  10637.             "________",
  10638.             "________",
  10639.             "________"
  10640.         ],
  10641.         [
  10642.             "dirt____",
  10643.             "________",
  10644.             "wall____",
  10645.             "________"
  10646.         ],
  10647.         [
  10648.             "stps____",
  10649.             "________",
  10650.             "________",
  10651.             "________"
  10652.         ],
  10653.         [
  10654.             "dirt____",
  10655.             "________",
  10656.             "________",
  10657.             "________"
  10658.         ],
  10659.         [
  10660.             "dirt____",
  10661.             "________",
  10662.             "________",
  10663.             "________"
  10664.         ],
  10665.         [
  10666.             "dirt____",
  10667.             "imp_____",
  10668.             "________",
  10669.             "________"
  10670.         ],
  10671.         [
  10672.             "dirt____",
  10673.             "________",
  10674.             "________",
  10675.             "________"
  10676.         ],
  10677.         [
  10678.             "dirt____",
  10679.             "dtby____",
  10680.             "________",
  10681.             "________"
  10682.         ],
  10683.         [
  10684.             "watr____",
  10685.             "________",
  10686.             "________",
  10687.             "________"
  10688.         ],
  10689.         [
  10690.             "dirt____",
  10691.             "________",
  10692.             "________",
  10693.             "________"
  10694.         ],
  10695.         [
  10696.             "dirt____",
  10697.             "________",
  10698.             "________",
  10699.             "________"
  10700.         ],
  10701.         [
  10702.             "dirt____",
  10703.             "________",
  10704.             "________",
  10705.             "________"
  10706.         ],
  10707.         [
  10708.             "dirt____",
  10709.             "________",
  10710.             "wall____",
  10711.             "________"
  10712.         ],
  10713.         [
  10714.             "dirt____",
  10715.             "________",
  10716.             "________",
  10717.             "________"
  10718.         ],
  10719.         [
  10720.             "dirt____",
  10721.             "dtby____",
  10722.             "________",
  10723.             "________"
  10724.         ],
  10725.         [
  10726.             "dirt____",
  10727.             "________",
  10728.             "________",
  10729.             "________"
  10730.         ],
  10731.         [
  10732.             "dirt____",
  10733.             "________",
  10734.             "wall____",
  10735.             "________"
  10736.         ]
  10737.     ],
  10738.     [
  10739.         [
  10740.             "hole____",
  10741.             "________",
  10742.             "wall____",
  10743.             "________"
  10744.         ],
  10745.         [
  10746.             "stps____",
  10747.             "________",
  10748.             "________",
  10749.             "________"
  10750.         ],
  10751.         [
  10752.             "hole____",
  10753.             "________",
  10754.             "________",
  10755.             "________"
  10756.         ],
  10757.         [
  10758.             "stps____",
  10759.             "________",
  10760.             "door____",
  10761.             "________"
  10762.         ],
  10763.         [
  10764.             "hole____",
  10765.             "________",
  10766.             "________",
  10767.             "________"
  10768.         ],
  10769.         [
  10770.             "dirt____",
  10771.             "________",
  10772.             "wall____",
  10773.             "________"
  10774.         ],
  10775.         [
  10776.             "dirt____",
  10777.             "________",
  10778.             "wall____",
  10779.             "________"
  10780.         ],
  10781.         [
  10782.             "hole____",
  10783.             "________",
  10784.             "________",
  10785.             "________"
  10786.         ],
  10787.         [
  10788.             "dirt____",
  10789.             "________",
  10790.             "________",
  10791.             "________"
  10792.         ],
  10793.         [
  10794.             "dirt____",
  10795.             "________",
  10796.             "________",
  10797.             "________"
  10798.         ],
  10799.         [
  10800.             "watr____",
  10801.             "________",
  10802.             "________",
  10803.             "________"
  10804.         ],
  10805.         [
  10806.             "dirt____",
  10807.             "________",
  10808.             "________",
  10809.             "________"
  10810.         ],
  10811.         [
  10812.             "dirt____",
  10813.             "________",
  10814.             "________",
  10815.             "________"
  10816.         ],
  10817.         [
  10818.             "dirt____",
  10819.             "________",
  10820.             "chst____",
  10821.             "________"
  10822.         ],
  10823.         [
  10824.             "dirt____",
  10825.             "________",
  10826.             "wall____",
  10827.             "________"
  10828.         ],
  10829.         [
  10830.             "dirt____",
  10831.             "________",
  10832.             "________",
  10833.             "________"
  10834.         ],
  10835.         [
  10836.             "dirt____",
  10837.             "________",
  10838.             "________",
  10839.             "________"
  10840.         ],
  10841.         [
  10842.             "dirt____",
  10843.             "________",
  10844.             "________",
  10845.             "________"
  10846.         ],
  10847.         [
  10848.             "dirt____",
  10849.             "________",
  10850.             "wall____",
  10851.             "________"
  10852.         ]
  10853.     ],
  10854.     [
  10855.         [
  10856.             "dirt____",
  10857.             "________",
  10858.             "wall____",
  10859.             "________"
  10860.         ],
  10861.         [
  10862.             "dirt____",
  10863.             "________",
  10864.             "________",
  10865.             "________"
  10866.         ],
  10867.         [
  10868.             "dirt____",
  10869.             "________",
  10870.             "________",
  10871.             "________"
  10872.         ],
  10873.         [
  10874.             "dirt____",
  10875.             "________",
  10876.             "wall____",
  10877.             "________"
  10878.         ],
  10879.         [
  10880.             "dirt____",
  10881.             "________",
  10882.             "________",
  10883.             "________"
  10884.         ],
  10885.         [
  10886.             "dirt____",
  10887.             "________",
  10888.             "________",
  10889.             "________"
  10890.         ],
  10891.         [
  10892.             "dirt____",
  10893.             "________",
  10894.             "________",
  10895.             "________"
  10896.         ],
  10897.         [
  10898.             "dirt____",
  10899.             "________",
  10900.             "________",
  10901.             "________"
  10902.         ],
  10903.         [
  10904.             "dirt____",
  10905.             "________",
  10906.             "wall____",
  10907.             "________"
  10908.         ],
  10909.         [
  10910.             "dirt____",
  10911.             "________",
  10912.             "wall____",
  10913.             "________"
  10914.         ],
  10915.         [
  10916.             "dirt____",
  10917.             "________",
  10918.             "wall____",
  10919.             "________"
  10920.         ],
  10921.         [
  10922.             "dirt____",
  10923.             "________",
  10924.             "wall____",
  10925.             "________"
  10926.         ],
  10927.         [
  10928.             "dirt____",
  10929.             "________",
  10930.             "wall____",
  10931.             "________"
  10932.         ],
  10933.         [
  10934.             "dirt____",
  10935.             "________",
  10936.             "wall____",
  10937.             "________"
  10938.         ],
  10939.         [
  10940.             "dirt____",
  10941.             "________",
  10942.             "wall____",
  10943.             "________"
  10944.         ],
  10945.         [
  10946.             "dirt____",
  10947.             "________",
  10948.             "________",
  10949.             "________"
  10950.         ],
  10951.         [
  10952.             "dirt____",
  10953.             "________",
  10954.             "wall____",
  10955.             "________"
  10956.         ],
  10957.         [
  10958.             "dirt____",
  10959.             "________",
  10960.             "________",
  10961.             "________"
  10962.         ],
  10963.         [
  10964.             "dirt____",
  10965.             "________",
  10966.             "wall____",
  10967.             "________"
  10968.         ]
  10969.     ],
  10970.     [
  10971.         [
  10972.             "dirt____",
  10973.             "________",
  10974.             "door____",
  10975.             "________"
  10976.         ],
  10977.         [
  10978.             "dirt____",
  10979.             "________",
  10980.             "________",
  10981.             "________"
  10982.         ],
  10983.         [
  10984.             "dirt____",
  10985.             "________",
  10986.             "chst____",
  10987.             "________"
  10988.         ],
  10989.         [
  10990.             "dirt____",
  10991.             "________",
  10992.             "wall____",
  10993.             "________"
  10994.         ],
  10995.         [
  10996.             "dirt____",
  10997.             "________",
  10998.             "chst____",
  10999.             "________"
  11000.         ],
  11001.         [
  11002.             "hole____",
  11003.             "________",
  11004.             "________",
  11005.             "________"
  11006.         ],
  11007.         [
  11008.             "hole____",
  11009.             "grml____",
  11010.             "________",
  11011.             "________"
  11012.         ],
  11013.         [
  11014.             "dirt____",
  11015.             "________",
  11016.             "________",
  11017.             "________"
  11018.         ],
  11019.         [
  11020.             "watr____",
  11021.             "________",
  11022.             "________",
  11023.             "________"
  11024.         ],
  11025.         [
  11026.             "dirt____",
  11027.             "________",
  11028.             "chst____",
  11029.             "________"
  11030.         ],
  11031.         [
  11032.             "stpw____",
  11033.             "________",
  11034.             "________",
  11035.             "________"
  11036.         ],
  11037.         [
  11038.             "watr____",
  11039.             "________",
  11040.             "________",
  11041.             "________"
  11042.         ],
  11043.         [
  11044.             "watr____",
  11045.             "________",
  11046.             "________",
  11047.             "________"
  11048.         ],
  11049.         [
  11050.             "dirt____",
  11051.             "________",
  11052.             "________",
  11053.             "________"
  11054.         ],
  11055.         [
  11056.             "dirt____",
  11057.             "________",
  11058.             "________",
  11059.             "________"
  11060.         ],
  11061.         [
  11062.             "dirt____",
  11063.             "________",
  11064.             "________",
  11065.             "________"
  11066.         ],
  11067.         [
  11068.             "dirt____",
  11069.             "________",
  11070.             "wall____",
  11071.             "________"
  11072.         ],
  11073.         [
  11074.             "dirt____",
  11075.             "________",
  11076.             "________",
  11077.             "________"
  11078.         ],
  11079.         [
  11080.             "dirt____",
  11081.             "________",
  11082.             "wall____",
  11083.             "________"
  11084.         ]
  11085.     ],
  11086.     [
  11087.         [
  11088.             "hole____",
  11089.             "________",
  11090.             "wall____",
  11091.             "________"
  11092.         ],
  11093.         [
  11094.             "dirt____",
  11095.             "________",
  11096.             "________",
  11097.             "________"
  11098.         ],
  11099.         [
  11100.             "hole____",
  11101.             "________",
  11102.             "________",
  11103.             "________"
  11104.         ],
  11105.         [
  11106.             "hole____",
  11107.             "________",
  11108.             "wall____",
  11109.             "________"
  11110.         ],
  11111.         [
  11112.             "hole____",
  11113.             "________",
  11114.             "________",
  11115.             "________"
  11116.         ],
  11117.         [
  11118.             "hole____",
  11119.             "dtby____",
  11120.             "________",
  11121.             "________"
  11122.         ],
  11123.         [
  11124.             "hole____",
  11125.             "________",
  11126.             "________",
  11127.             "________"
  11128.         ],
  11129.         [
  11130.             "dirt____",
  11131.             "________",
  11132.             "________",
  11133.             "________"
  11134.         ],
  11135.         [
  11136.             "watr____",
  11137.             "________",
  11138.             "________",
  11139.             "________"
  11140.         ],
  11141.         [
  11142.             "dirt____",
  11143.             "________",
  11144.             "________",
  11145.             "________"
  11146.         ],
  11147.         [
  11148.             "dirt____",
  11149.             "grml____",
  11150.             "________",
  11151.             "________"
  11152.         ],
  11153.         [
  11154.             "watr____",
  11155.             "________",
  11156.             "________",
  11157.             "________"
  11158.         ],
  11159.         [
  11160.             "watr____",
  11161.             "________",
  11162.             "________",
  11163.             "________"
  11164.         ],
  11165.         [
  11166.             "dirt____",
  11167.             "________",
  11168.             "________",
  11169.             "________"
  11170.         ],
  11171.         [
  11172.             "dirt____",
  11173.             "emgd____",
  11174.             "________",
  11175.             "________"
  11176.         ],
  11177.         [
  11178.             "dirt____",
  11179.             "________",
  11180.             "________",
  11181.             "________"
  11182.         ],
  11183.         [
  11184.             "dirt____",
  11185.             "________",
  11186.             "wall____",
  11187.             "________"
  11188.         ],
  11189.         [
  11190.             "dirt____",
  11191.             "________",
  11192.             "________",
  11193.             "________"
  11194.         ],
  11195.         [
  11196.             "dirt____",
  11197.             "________",
  11198.             "wall____",
  11199.             "________"
  11200.         ]
  11201.     ],
  11202.     [
  11203.         [
  11204.             "hole____",
  11205.             "________",
  11206.             "wall____",
  11207.             "________"
  11208.         ],
  11209.         [
  11210.             "dirt____",
  11211.             "________",
  11212.             "________",
  11213.             "________"
  11214.         ],
  11215.         [
  11216.             "hole____",
  11217.             "________",
  11218.             "________",
  11219.             "________"
  11220.         ],
  11221.         [
  11222.             "hole____",
  11223.             "________",
  11224.             "wall____",
  11225.             "________"
  11226.         ],
  11227.         [
  11228.             "hole____",
  11229.             "________",
  11230.             "________",
  11231.             "________"
  11232.         ],
  11233.         [
  11234.             "hole____",
  11235.             "________",
  11236.             "________",
  11237.             "________"
  11238.         ],
  11239.         [
  11240.             "hole____",
  11241.             "grml____",
  11242.             "________",
  11243.             "________"
  11244.         ],
  11245.         [
  11246.             "dirt____",
  11247.             "________",
  11248.             "________",
  11249.             "________"
  11250.         ],
  11251.         [
  11252.             "watr____",
  11253.             "________",
  11254.             "________",
  11255.             "________"
  11256.         ],
  11257.         [
  11258.             "dirt____",
  11259.             "grml____",
  11260.             "________",
  11261.             "________"
  11262.         ],
  11263.         [
  11264.             "dirt____",
  11265.             "________",
  11266.             "________",
  11267.             "________"
  11268.         ],
  11269.         [
  11270.             "watr____",
  11271.             "________",
  11272.             "________",
  11273.             "________"
  11274.         ],
  11275.         [
  11276.             "watr____",
  11277.             "________",
  11278.             "________",
  11279.             "________"
  11280.         ],
  11281.         [
  11282.             "dirt____",
  11283.             "________",
  11284.             "________",
  11285.             "________"
  11286.         ],
  11287.         [
  11288.             "dirt____",
  11289.             "________",
  11290.             "________",
  11291.             "________"
  11292.         ],
  11293.         [
  11294.             "dirt____",
  11295.             "________",
  11296.             "chst____",
  11297.             "________"
  11298.         ],
  11299.         [
  11300.             "dirt____",
  11301.             "________",
  11302.             "wall____",
  11303.             "________"
  11304.         ],
  11305.         [
  11306.             "dirt____",
  11307.             "________",
  11308.             "chst____",
  11309.             "________"
  11310.         ],
  11311.         [
  11312.             "dirt____",
  11313.             "________",
  11314.             "wall____",
  11315.             "________"
  11316.         ]
  11317.     ],
  11318.     [
  11319.         [
  11320.             "dirt____",
  11321.             "________",
  11322.             "wall____",
  11323.             "________"
  11324.         ],
  11325.         [
  11326.             "dirt____",
  11327.             "________",
  11328.             "wall____",
  11329.             "________"
  11330.         ],
  11331.         [
  11332.             "dirt____",
  11333.             "________",
  11334.             "wall____",
  11335.             "________"
  11336.         ],
  11337.         [
  11338.             "dirt____",
  11339.             "________",
  11340.             "wall____",
  11341.             "________"
  11342.         ],
  11343.         [
  11344.             "dirt____",
  11345.             "________",
  11346.             "wall____",
  11347.             "________"
  11348.         ],
  11349.         [
  11350.             "dirt____",
  11351.             "________",
  11352.             "wall____",
  11353.             "________"
  11354.         ],
  11355.         [
  11356.             "dirt____",
  11357.             "________",
  11358.             "wall____",
  11359.             "________"
  11360.         ],
  11361.         [
  11362.             "dirt____",
  11363.             "________",
  11364.             "wall____",
  11365.             "________"
  11366.         ],
  11367.         [
  11368.             "dirt____",
  11369.             "________",
  11370.             "wall____",
  11371.             "________"
  11372.         ],
  11373.         [
  11374.             "dirt____",
  11375.             "________",
  11376.             "wall____",
  11377.             "________"
  11378.         ],
  11379.         [
  11380.             "dirt____",
  11381.             "________",
  11382.             "wall____",
  11383.             "________"
  11384.         ],
  11385.         [
  11386.             "dirt____",
  11387.             "________",
  11388.             "wall____",
  11389.             "________"
  11390.         ],
  11391.         [
  11392.             "dirt____",
  11393.             "________",
  11394.             "wall____",
  11395.             "________"
  11396.         ],
  11397.         [
  11398.             "dirt____",
  11399.             "________",
  11400.             "wall____",
  11401.             "________"
  11402.         ],
  11403.         [
  11404.             "dirt____",
  11405.             "________",
  11406.             "wall____",
  11407.             "________"
  11408.         ],
  11409.         [
  11410.             "dirt____",
  11411.             "________",
  11412.             "wall____",
  11413.             "________"
  11414.         ],
  11415.         [
  11416.             "dirt____",
  11417.             "________",
  11418.             "wall____",
  11419.             "________"
  11420.         ],
  11421.         [
  11422.             "dirt____",
  11423.             "________",
  11424.             "wall____",
  11425.             "________"
  11426.         ],
  11427.         [
  11428.             "dirt____",
  11429.             "________",
  11430.             "wall____",
  11431.             "________"
  11432.         ]
  11433.     ]
  11434. ]
  11435.    
  11436.     full_map = create3DArrayBlock(`____`, 0,rawMap.length - 1, 0, rawMap[0].length - 1, 0, layers.gui );
  11437.  
  11438.     full_entity_stats = create3DArrayBlock([], 0,rawMap.length - 1, 0, rawMap[0].length - 1, 0, layers.gui );
  11439.  
  11440.     for(let y = 0; y < rawMap[0].length; y++ ){
  11441.         for(let x = 0; x < rawMap.length; x++ ){
  11442.             for(let z = 0; z < layers.gui; z++ ){
  11443.                
  11444.                 full_map[x][y][z] = left(rawMap[x][y][z]+`____`,4);
  11445.                
  11446.                 full_entity_stats[x][y][z] = default_entity_stats[left(full_map[x][y][z]+`____`,4)];
  11447.             }
  11448.         }
  11449.     }
  11450.    
  11451.     cx = randInt(0,full_map.length - 1);
  11452.     cy = randInt(0,full_map[0].length - 1);
  11453.  
  11454. }
  11455.  
  11456.  
  11457.  
  11458.  
  11459. function cursorState ( layer = layers.critter) {
  11460.    
  11461.     let state = [
  11462.         cx + viewCursor.hover.x,
  11463.         cy + viewCursor.hover.y
  11464.     ]
  11465.    
  11466.     let [ x, y ] = state;
  11467.    
  11468.     if(oobMap(state) !== true) {
  11469.         [x, y] = oobMap(state);
  11470.     }
  11471.    
  11472.     return [x,y,layer];
  11473. }
  11474.  
  11475. function backbuffer ( ) {
  11476.    
  11477.     var [ px, py, pz ] = cursorState ( layers.gui );
  11478.    
  11479.     canvasViewPortal ( );
  11480.     canvasScrollBars ( );
  11481.     canvasPurseTray ( );
  11482.    
  11483.     // drawScene ( );
  11484.    
  11485.     doubleBuffer ( );
  11486. }
  11487.  
  11488.  
  11489.  
  11490. function canvasViewPortal ( ){
  11491.  
  11492.     var [ px, py, pz ] = cursorState ( layers.gui );
  11493.    
  11494.     drawRectangle(gutterW, gutterH, viewConstraints.viewSpanX * tileW, viewConstraints.viewSpanY * tileH, 'black', 'black');
  11495.    
  11496.     let buffer = [];
  11497.            
  11498.     for(let y = viewConstraints.viewMinY; y <= viewConstraints.viewMaxY; y++){
  11499.         for(let x = viewConstraints.viewMinX; x <= viewConstraints.viewMaxX; x++){
  11500.            
  11501.             buffer = [];
  11502.            
  11503.             px = cx + x;
  11504.             py = cy + y;
  11505.            
  11506.             if(oobMap([px,py]) !== true){
  11507.                 buffer.push(special.stonwall);
  11508.             }
  11509.            
  11510.             if(oobMap([px,py]) === true){
  11511.                
  11512.                 for(let z = 0; z <= pz; z++){
  11513.                     buffer.push(`${sections(full_map[px][py][z])[0]}____`);
  11514.                 }
  11515.                
  11516.                 if( ( x === 0 ) && ( y === 0 ) ){
  11517.                     buffer.push(special.sel1dash);
  11518.                 }
  11519.             }
  11520.            
  11521.             // logFeats(hover);
  11522.            
  11523.             if( ( x === viewCursor.hover.x ) && ( y === viewCursor.hover.y ) ){
  11524.                 buffer.push(special.sel2dash);
  11525.             }
  11526.            
  11527.             buffer.push(special.sel2dots);
  11528.            
  11529.             drawImageStack(buffer,gutterW+(x - viewConstraints.viewMinX)*tileW,gutterH+(y - viewConstraints.viewMinY)*tileH,tileW,tileH);
  11530.         }
  11531.     }
  11532.    
  11533.     return true;
  11534. }
  11535.  
  11536. function canvasScrollBars ( ) {
  11537.  
  11538.     var [ px, py, pz ] = cursorState ( layers.gui );
  11539.  
  11540.     var gutterW = 0;
  11541.     var gutterH = 0;
  11542.  
  11543.     let scrollX1 = ( cx - viewSpanX / 2 ) / full_map.length;
  11544.     let scrollX2 = ( cx + viewSpanX / 2 ) / full_map.length;
  11545.  
  11546.     let scrollY1 = ( cy - viewSpanY / 2 ) / full_map[0].length;
  11547.     let scrollY2 = ( cy + viewSpanY / 2 ) / full_map[0].length;
  11548.  
  11549.     scrollX1 = viewSpanX * tileW * scrollX1;
  11550.     scrollX2 = viewSpanX * tileW * scrollX2;
  11551.  
  11552.     scrollY1 = viewSpanY * tileH * scrollY1;
  11553.     scrollY2 = viewSpanY * tileH * scrollY2;
  11554.    
  11555.     if( scrollX1 < 0 ){
  11556.         scrollX1 = 0;
  11557.     }
  11558.     if( scrollY1 < 0 ){
  11559.         scrollY1 = 0;
  11560.     }
  11561.     if( scrollX1 > viewSpanX * tileW ){
  11562.         scrollX1 = viewSpanX * tileW;
  11563.     }
  11564.     if( scrollY1 > viewSpanY * tileH ){
  11565.         scrollY1 = viewSpanY * tileH;
  11566.     }
  11567.  
  11568.     if( scrollX2 < 0 ){
  11569.         scrollX2 = 0;
  11570.     }
  11571.     if( scrollY2 < 0 ){
  11572.         scrollY2 = 0;
  11573.     }
  11574.     if( scrollX2 > viewSpanX * tileW ){
  11575.         scrollX2 = viewSpanX * tileW;
  11576.     }
  11577.     if( scrollY2 > viewSpanY * tileH ){
  11578.         scrollY2 = viewSpanY * tileH;
  11579.     }
  11580.    
  11581.     scrollW = scrollX2 - scrollX1;
  11582.     scrollH = scrollY2 - scrollY1;
  11583.  
  11584.    
  11585.     // left backbar
  11586.     drawRectangle(
  11587.         gutterW,
  11588.         gutterH,
  11589.         8,
  11590.         viewSpanY*tileH,
  11591.         'rgba(0,0,0,0.0)',
  11592.         'red'
  11593.     );
  11594.    
  11595.     // top backbar
  11596.     drawRectangle(
  11597.         gutterW,
  11598.         gutterH,
  11599.         viewSpanX*tileW,
  11600.         8,
  11601.         'rgba(0,0,0,0.0)',
  11602.         'red'
  11603.     );
  11604.    
  11605.     gutterW = 0;
  11606.     gutterH = 0;
  11607.  
  11608.     // right backbar
  11609.     drawRectangle(
  11610.         gutterW+viewSpanX*tileW,
  11611.         gutterH,
  11612.         8,
  11613.         viewSpanY*tileH,
  11614.         'rgba(0,0,0,0.0)',
  11615.         'red'
  11616.     );
  11617.    
  11618.     // bottom backbar
  11619.     drawRectangle(
  11620.         gutterW,
  11621.         gutterH+viewSpanY*tileH,
  11622.         viewSpanX*tileW,
  11623.         8,
  11624.         'rgba(0,0,0,0.0)',
  11625.         'red'
  11626.     );
  11627.  
  11628.     // right scrollbar
  11629.     drawRectangle(
  11630.         gutterW*2+viewSpanX*tileW,
  11631.         gutterH*2+scrollY1,
  11632.         8,
  11633.         scrollH,
  11634.         'black',
  11635.         '#00ff00'
  11636.     );
  11637.    
  11638.     // bottom scrollbar
  11639.     drawRectangle(
  11640.         gutterW*2+scrollX1,
  11641.         gutterH*2+viewSpanY*tileH,
  11642.         scrollW,
  11643.         8,
  11644.         'black',
  11645.         '#00ff00'
  11646.     );
  11647.    
  11648.     return true;
  11649.  
  11650. }
  11651.  
  11652.  
  11653. function canvasPurseTray ( ) {
  11654.  
  11655.     var purseSpanX = 5;
  11656.     var purseSpanY = 6;
  11657.  
  11658.     var ent_stats = [];
  11659.  
  11660.     var [ px, py, pz ] = cursorState ( layers.critter );
  11661.  
  11662.     var xOffset = viewSpanX * tileW;
  11663.    
  11664.     drawRectangle(xOffset+gutterW*2, gutterH, purseSpanX * tileW, purseSpanY * tileH, 'black', 'black');
  11665.        
  11666.     var ss = [];
  11667.  
  11668.     ent_stats.stats = default_entity_stats[full_map[px][py][pz]].stats;
  11669.  
  11670.     ss.push(ent_stats.stats);
  11671.     ss.card = {};
  11672.     ss.card.namesake = `Placeholder`;
  11673.     ss.card.actionRoster = [];
  11674.    
  11675.     switch(true){
  11676.     case (oobMap([px,py]) !== true):
  11677.        
  11678.         ss.push(ent_stats.stats);
  11679.         ss.card.namesake = `Out Of Bounds`;
  11680.         ss.card.actionRoster = [];
  11681.        
  11682.         break;
  11683.        
  11684.     case (invalidName(full_map[px][py][layers.critter],2)):
  11685.        
  11686.         ss.push(ent_stats.stats);
  11687.         ss.card.namesake = `Placeholder`;
  11688.         ss.card.actionRoster = [];
  11689.        
  11690.         break;
  11691.        
  11692.     case (oobMap([px,py]) === true):
  11693.        
  11694.         ss.push(full_entity_stats[px][py][layers.critter].stats);
  11695.         ss.card.namesake = ss.card.namesake;
  11696.         ss.card.actionRoster = sections(ss.card.action,4);
  11697.        
  11698.         break;
  11699.     }
  11700.    
  11701.     let buffer = [];
  11702.    
  11703.     for(let y = purseConstraints.viewMinY; y <= purseConstraints.viewMaxY; y++){
  11704.         for(let x = purseConstraints.viewMinX; x <= purseConstraints.viewMaxX; x++){
  11705.                        
  11706.             buffer = [];
  11707.            
  11708.             if(y === 3){
  11709.                 let z = x;
  11710.                 if((z >= 0) && (z < layers.gui)){
  11711.                     if(oobMap([px,py]) === true){
  11712.                         buffer.push(
  11713.                             full_map[px][py][z]
  11714.                         );
  11715.                     }
  11716.                 }
  11717.             }
  11718.            
  11719.             let x1 = 0;
  11720.             let purseSpanX = 5;
  11721.            
  11722.             let y1 = 4;
  11723.             let purseSpanY = 3;
  11724.                
  11725.             if((x >= x1) && (x < x1 + purseSpanX) && (y >= y1) && (y < y1 + purseSpanY)){
  11726.                
  11727.                 let i = (x - x1) + (y - y1) * purseSpanX;
  11728.  
  11729.                 if((i >= 0) && (i < ss.card.actionRoster.length)){
  11730.                     buffer.push( ss.card.actionRoster[i] );
  11731.                 }
  11732.             }
  11733.            
  11734.             buffer.push(`sel2dots`);
  11735.            
  11736.             drawImageStack(buffer,xOffset+
  11737.             gutterW * 2 + x * tileW,gutterH + y * tileH,tileW,tileH);
  11738.         }
  11739.     }
  11740.    
  11741.     ss.card.namesake = ucwords(ss.card.namesake);
  11742.    
  11743.     switch(true){
  11744.     case (ucwords(ss.card.namesake) === "Placeholder"):
  11745.     case (ucwords(ss.card.namesake) === "Out Of Bounds"):
  11746.         break;
  11747.     default:       
  11748.        
  11749.         renderStats(px,py,z);
  11750.        
  11751.         drawText(gutterW + 0 * tileW, gutterH + 8 + 12,'16px Impact','white','" ' + ss.card.namesake + ' "');
  11752.        
  11753.         break;
  11754.     }
  11755.    
  11756.     return true;   
  11757. }
  11758.  
  11759.     function renderStatBar(x,y,width,height,caption,font,fg,bg){
  11760.        
  11761.         drawRectangle( x, y, width, height, 'black', bg );
  11762.  
  11763.         drawText( x, y, `${height}px ${font}`, fg, caption );
  11764.        
  11765.     }
  11766.  
  11767.     function renderStats(px,py,z){
  11768.            
  11769.         var [ px, py, pz ] = cursorState ( layers.critter );
  11770.  
  11771.         var gutterW = viewSpanX * tileW + 16;
  11772.        
  11773.        
  11774.         z = z || pz;
  11775.        
  11776.         let s = [];
  11777.         let pct = [];
  11778.        
  11779.         s['health'] = full_entity_stats[px][py][layers.critter].stats.health;
  11780.        
  11781.         s['stamina'] = full_entity_stats[px][py][layers.critter].stats.stamina;
  11782.        
  11783.         s['essence'] = full_entity_stats[px][py][layers.critter].stats.essence;
  11784.        
  11785.         renderStatusBar( s, 'health', tileW * viewSpanX + 16, 8 + 16 * 0, tileW * purseSpanX, 12, 'black', 'red' );
  11786.  
  11787.         renderStatusBar( s, 'stamina', tileW * viewSpanX + 16, 8 + 16 * 1, tileW * purseSpanX, 12, 'black', 'yellow' );
  11788.  
  11789.         renderStatusBar( s, 'essence', tileW * viewSpanX + 16, 8 + 16 * 2, tileW * purseSpanX, 12, 'black', 'cyan' );
  11790.     }
  11791.    
  11792. function renderStatusBar(stat, attrName, gutterW, gutterH, width, height, fg, bg ) {
  11793.        
  11794.     var [ px, py, pz ] = cursorState ( );
  11795.  
  11796.     let s = stat[attrName];
  11797.    
  11798.     let pct = [];
  11799.     let w = [];
  11800.    
  11801.     s.minimum = s.minimum || 0;
  11802.     s.maximum = s.maximum || 1;
  11803.     s.current = s.current || 0;
  11804.     s.recovery = s.recovery || 0;
  11805.            
  11806.     pct['current'] = Math.round(100 * s.current / s.maximum);
  11807.  
  11808.     pct['minimum'] = Math.round(100 * s.minimum / s.maximum);
  11809.  
  11810.     pct['maximum'] = Math.round(100 * s.maximum / s.maximum);
  11811.  
  11812.     pct['recovery'] = Math.round(100 * (s.current + s.recovery) / s.maximum);
  11813.    
  11814.     let x = gutterW;
  11815.     let y = gutterH+24;
  11816.    
  11817.     // s.current, s.recovery
  11818.     // s.minimum, s.maximum
  11819.  
  11820.     let caption = `${attrName}: ${s.current} / ${s.maximum}`;
  11821.    
  11822.     let font = 'Small Fonts';
  11823.    
  11824.     // fg, bg
  11825.  
  11826.     w['current'] = width * curve(pct['current']) / 100;
  11827.     w['recovery'] = width * curve(pct['recovery']) / 100;
  11828.    
  11829.     w['minimum'] = 0;
  11830.     w['maximum'] = width * curve(1.0) / 100;
  11831.  
  11832.     drawRectangle( x, y, w['maximum'], height, 'black', 'gray' );
  11833.    
  11834.     drawRectangle( x, y + 4, w['current'], height - 4, 'black', bg );
  11835.  
  11836.     drawRectangle( x, y, w['recovery'], height - 4, 'rgba(0,0,0,0.0)', 'rgba(255,255,255,0.7)' );
  11837.  
  11838.     drawRectangle( x, y, width, height, 'black', 'rgba(0,0,0,0.0)' );
  11839.  
  11840.     drawText( x, y + 8, `${height*0.8}px ${font}`, 'black', caption );
  11841.  
  11842. }
  11843.  
  11844.  
  11845.  
  11846. var imageCache = [];
  11847. var missingCache = [];
  11848.  
  11849. var frontCanvas = false;
  11850. var frontContext = false;
  11851.  
  11852. var backCanvas = false
  11853. var backContext = false;
  11854.  
  11855. makeCanvas ( );
  11856.  
  11857. function makeCanvas ( ) {
  11858.  
  11859.     //document.addEventListener("DOMContentLoaded",  ( ) => {
  11860.  
  11861.     let fragment;
  11862.  
  11863.     // Create an on-screen canvas
  11864.  
  11865.     fragment = document.createDocumentFragment ( );
  11866.  
  11867.     frontCanvas = document.createElement('canvas');
  11868.  
  11869.     fragment.appendChild(frontCanvas);
  11870.  
  11871.     frontCanvas.style.zIndex = -1;
  11872.    
  11873.     frontCanvas.width = 320;
  11874.     frontCanvas.height = 240;
  11875.    
  11876.     frontCanvas.style.width = `320px`;
  11877.     frontCanvas.style.height = `240px`;
  11878.  
  11879.     frontCanvas.id = `frontCanvas`;
  11880.  
  11881.     frontContext = frontCanvas.getContext('2d');
  11882.  
  11883.     frontContext.width = 320;
  11884.     frontContext.height = 200;
  11885.    
  11886.     // Create an off-screen canvas
  11887.  
  11888.     backCanvas = document.createElement('canvas');
  11889.  
  11890.     fragment.appendChild(backCanvas);
  11891.  
  11892.     // Append all changes at once to reduce reflows
  11893.     document.body.appendChild(fragment);
  11894.  
  11895.     backCanvas.style.width = frontCanvas.style.width;
  11896.  
  11897.     backCanvas.style.height = frontCanvas.style.height;
  11898.    
  11899.     backCanvas.width = frontCanvas.width;
  11900.     backCanvas.height = frontCanvas.height;
  11901.  
  11902.     backContext.width = frontContext.width;
  11903.  
  11904.     backContext.height = frontContext.height;
  11905.  
  11906.     backCanvas.style.zIndex = -2;
  11907.  
  11908.     backCanvas.style.visibility = 'hidden';
  11909.  
  11910.     backCanvas.id = `backCanvas`;
  11911.  
  11912.     backContext = backCanvas.getContext('2d');
  11913.  
  11914. }
  11915.    
  11916. function selectCanvas(id){
  11917.     workCanvas = document.getElementById(id);
  11918. }
  11919.  
  11920. function drawRectangle(x, y, width, height, color = 'black',fill = 'gray'){
  11921.    
  11922.     backContext.strokeStyle = color;
  11923.    
  11924.     if(fill === ''){
  11925.         fill = 'rgba(0,0,0,0.0)';
  11926.     }
  11927.     backContext.fillStyle = fill;
  11928.    
  11929.     backContext.fillRect(x, y, width, height);
  11930.  
  11931.     backContext.strokeRect(x, y, width, height);
  11932. }
  11933.  
  11934.  
  11935. function drawLine(x,y,x2,y2,color = 'black',width = 5){
  11936.     backContext.strokeStyle = color;
  11937.     backContext.lineWidth = width;
  11938.     backContext.beginPath ( );
  11939.     backContext.moveTo(x, y);
  11940.     backContext.lineTo(x2, y2);
  11941.     backContext.stroke ( );
  11942. }
  11943.  
  11944.  
  11945. function drawCircle(x,y,radius = 50, color = 'black',fill = '#00FF00', width = 5){
  11946.     backContext.beginPath ( );
  11947.     backContext.arc(x, y, radius, 0, 2 * Math.PI);
  11948.     backContext.fillStyle = '#00FF00';
  11949.     backContext.fill ( );
  11950.     backContext.strokeStyle = '#000000';
  11951.     backContext.lineWidth = width;
  11952.     backContext.stroke ( );
  11953. }
  11954.    
  11955.  
  11956. function drawText(x,y,font = '30px Arial',fill = '#000000',text = 'Hello backcanvas!'){
  11957.     backContext.font = font;
  11958.     backContext.fillStyle = fill;
  11959.     backContext.fillText(text, x, y);
  11960. }
  11961.  
  11962. function drawImageStack(imageStack, x, y, width = 24, height = 24) {
  11963.    
  11964.     // console.log({imageStack: imageStack});
  11965.    
  11966.     for(index = 0; index < imageStack.length; index++){
  11967.        
  11968.         if( imageStack[index] === undefined ){
  11969.             continue;
  11970.         }  
  11971.        
  11972.         imageStack[index] = basename(imageStack[index],`.png`);
  11973.         imageStack[index] = left( imageStack[index] + `________`, 8 );
  11974.        
  11975.         // console.log(imageStack[index]);
  11976.        
  11977.         drawImage( imageStack[index], x, y, width, height );
  11978.        
  11979.     }          
  11980.    
  11981.     if(DEBUG.GUI){
  11982.         if( index > 0 ){
  11983.            
  11984.             // drawImage(`dooropen`, x, y, width, height);
  11985.            
  11986.             // drawRectangle(x, y, width, height, 'rgba(255,0,0,0.7)','');
  11987.    
  11988.             // drawText(x,y+16,'12px Impact', 'rgba(255,0,0,0.7)','TEST');
  11989.         }
  11990.     }
  11991. }
  11992.  
  11993. function drawImage(imagePath, x, y, width = 24, height = 24) {
  11994.    
  11995.     var cachedImage = loadImage(imagePath);
  11996.    
  11997.     if (cachedImage === undefined) {
  11998.         return;
  11999.     }
  12000.  
  12001.     backContext.drawImage(cachedImage, x, y, width, height);
  12002. }
  12003.  
  12004. function loadImageStack(imageStack, width = 24, height = 24) {
  12005.    
  12006.     if(!Array.isArray(imageStack)) {
  12007.         imageStack = [imageStack];
  12008.     }  
  12009.    
  12010.     for(let index = 0; index < imageStack.length; index++){
  12011.         imageStack[index] = loadImage(imageStack[index], width, height);
  12012.     }
  12013.    
  12014.     return imageStack;
  12015.    
  12016. }
  12017.  
  12018. function loadImage(imagePath, width = 24, height = 24) {
  12019.    
  12020.     if (imagePath === undefined) {
  12021.         return undefined;
  12022.     }
  12023.    
  12024.     if(isObject(imagePath)) {
  12025.         return undefined;
  12026.     }
  12027.    
  12028.     if(Array.isArray(imagePath)) {
  12029.         return loadImageStack(imagePath, width, height)[0];
  12030.     }  
  12031.    
  12032.     imagePath = basename(imagePath, `.png`);
  12033.     imagePath = left(imagePath + `________`, 8);
  12034.  
  12035.     let fullPath = `${host}/GFX/${imagePath}.png`;
  12036.  
  12037.     if (imagePath === `________`) {
  12038.         // logFeats(`Placeholder Image: ${fullPath}`);
  12039.         return undefined;
  12040.     }
  12041.  
  12042.     let cachedImage = imageCache.find(img => img.src === fullPath);
  12043.  
  12044.     if (!cachedImage) {
  12045.         cachedImage = new Image(width, height);
  12046.         cachedImage.src = fullPath;
  12047.        
  12048.         cachedImage.onload = function ( ) {
  12049.             imageCache.push(cachedImage);
  12050.             logFeats(`Loaded: ${cachedImage.src}`);
  12051.             // backContext.drawImage(cachedImage, x, y, width, height); // Draw image after loading
  12052.         };
  12053.  
  12054.         cachedImage.onerror = function ( ) {
  12055.             logFeats(`Failed to load: ${cachedImage.src}`);
  12056.             cachedImage = undefined;
  12057.         };
  12058.     } else {
  12059.         // logFeats(`Drawing Image: ${cachedImage.src}`);
  12060.         return cachedImage;
  12061.     }
  12062. }
  12063.  
  12064.  
  12065. function doubleBuffer ( ) {
  12066.    
  12067.     frontContext.clearRect(0, 0, frontCanvas.width, frontCanvas.height);
  12068.    
  12069.     frontContext.drawImage(backCanvas, 0, 0);
  12070. }
  12071.  
  12072. function getColorAtPoint(x, y) {
  12073.     const imageData = backCanvas.getImageData(x, y, 1, 1); // Step 4
  12074.     const data = imageData.data;
  12075.     const rgba = `rgba(${data[0]}, ${data[1]}, ${data[2]}, ${data[3] / 255})`; // Step 5
  12076.     return rgba;
  12077. }
  12078.    
  12079. function grabColor(fg){
  12080.     if(left(fg,1) === '#'){
  12081.         fg = mid(fg,2);
  12082.         fg = sections(fg,2);
  12083.     }else if( ( left( fg, 5 ) === 'rgba(' ) && ( right( fg, 1 ) === ')' ) ){
  12084.         fg = mid(fg,6);
  12085.         fg = left(fg,len(fg)-1);
  12086.         fg = fg.replace(' ','');
  12087.         fg = fg.split(',');
  12088.     }else{
  12089.         fg = grabColor(fg);
  12090.     }
  12091.  
  12092.     return fg;
  12093. }
  12094.  
  12095.  
  12096.  
  12097.     var TILE_WIDTH = 64;
  12098.     var TILE_HEIGHT = 32;
  12099.     var BOX_HEIGHT = 64;
  12100.    
  12101.     function drawIsometricBox(x, y, z,imageStack) {
  12102.  
  12103.         var cached = loadImageStack(imageStack, tileW, tileH);
  12104.        
  12105.         const screenX = (x - y) * TILE_WIDTH / 2;
  12106.         const screenY = (x + y) * TILE_HEIGHT / 2 - z * BOX_HEIGHT;
  12107.  
  12108.         // drawRectangle(screenX, screenY - BOX_HEIGHT, tileW, tileH,'red','black');
  12109.  
  12110.         // Draw top
  12111.         drawImage(cached[0], screenX, screenY - BOX_HEIGHT);
  12112.  
  12113.         // drawRectangle( screenX, screenY - TILE_HEIGHT / 2, tileW, tileH,'red','black');
  12114.  
  12115.         // Draw side
  12116.         drawImage(cached[1], screenX, screenY - TILE_HEIGHT / 2);
  12117.  
  12118.         // drawRectangle(  screenX - TILE_WIDTH / 2, screenY, tileW, tileH,'red','black');
  12119.  
  12120.         // Draw front
  12121.         drawImage(cached[2], screenX - TILE_WIDTH / 2, screenY);
  12122.     }
  12123.  
  12124.     function drawScene ( ) {
  12125.         // backContext.clearRect(0, 0, frontCanvas.width, frontCanvas.height);
  12126.        
  12127.         // Draw a grid of boxes for demonstration
  12128.         for (let x = 0; x < 5; x++) {
  12129.             for (let y = 0; y < 5; y++) {
  12130.                 drawIsometricBox ( x, y, 1, [`wall____`,`wall____`,`wall____`]);
  12131.             }
  12132.         }
  12133.     }
  12134.  
  12135.     // drawScene ( );
  12136.  
  12137.  
  12138.  
  12139.  
  12140.    
  12141.     function createViewPortal (id) {
  12142.        
  12143.         id = id || `viewportal`;
  12144.  
  12145.         var newElement;    
  12146.        
  12147.         const fragment = document.createDocumentFragment ( );
  12148.        
  12149.         for( let y = viewConstraints.viewMinY; y <= viewConstraints.viewMaxY; y++ ){
  12150.             for( let x = viewConstraints.viewMinX; x <= viewConstraints.viewMaxX; x++ ){
  12151.                
  12152.                 let z = layers.gui;
  12153.                
  12154.                 // logFeats(`z: ${z}`);
  12155.                
  12156.                 newElement = document.createElement('div');
  12157.                
  12158.                 newElement.style.width = `${tileW}px`;
  12159.                 newElement.style.height = `${tileH}px`;
  12160.                
  12161.                 newElement.style.position = `absolute`;
  12162.                 newElement.style.left = `calc( 8px + ${tileW}px * (${x} + 3))`;
  12163.                 newElement.style.top = `calc( 8px + ${tileH}px * (${y} + 3))`;
  12164.                 newElement.className = `${id}`;
  12165.                 newElement.id = `${id}_${x}_${y}_${z}`;
  12166.                 newElement.style.zIndex = `${z}`;
  12167.                
  12168.                 fragment.appendChild(newElement);
  12169.             }
  12170.         }
  12171.  
  12172.         document.body.appendChild(fragment);
  12173.     }
  12174.            
  12175.     function createGui ( ){
  12176.    
  12177.         createViewPortal ('viewportal');
  12178.    
  12179.     }
  12180.  
  12181.     function idParts(id){
  12182.        
  12183.         var parts = [];
  12184.        
  12185.         var rawParts = id.split(`_`);
  12186.        
  12187.         parts['id'] = rawParts[0];
  12188.        
  12189.         parts['x'] = rawParts[1];
  12190.         parts['y'] = rawParts[2];
  12191.         parts['z'] = rawParts[3];
  12192.        
  12193.         return parts;
  12194.     }
  12195.  
  12196.  
  12197.  
  12198.     function actionsList(px, py, z, crit, actionRoster) {
  12199.        
  12200.         actionRoster = actionRoster || [];
  12201.        
  12202.         if (Array.isArray(actionRoster)) {
  12203.             actionRoster = actionRoster.join(``);
  12204.         }
  12205.    
  12206.         z = z || layers.critter;
  12207.        
  12208.         px = px || cx + viewCursor.hover.x;
  12209.         py = py || cy + viewCursor.hover.y;
  12210.    
  12211.         if (oobMap([px, py]) !== true) {
  12212.             return false;
  12213.         }
  12214.        
  12215.         if (!crit) {
  12216.             crit = inlineName(full_map[px][py][layers.critter],2);
  12217.         }
  12218.    
  12219.         if(invalidName(crit,2)){
  12220.             return actionRoster;
  12221.         }
  12222.        
  12223.         // checkAndAssignDefaultStats(px, py, z);
  12224.        
  12225.         actionRoster = full_entity_stats[px][py][layers.critter].stats.card.action;
  12226.    
  12227.         return sections(actionRoster,4);
  12228.        
  12229.     }
  12230.    
  12231.     function cloneCell ( ) {
  12232.  
  12233.         for (let z = 0; z <= layers.gui; z++) {
  12234.            
  12235.             let elementView = document.getElementById(`view_${viewCursor.hover.x}_${viewCursor.hover.y}_${z}`);
  12236.        
  12237.             let elementTray = document.getElementById(`tray_0_0_${z}`);
  12238.            
  12239.             if (elementView && elementTray) {
  12240.                 elementTray.style.backgroundImage = elementView.style.backgroundImage;
  12241.             }
  12242.         }
  12243.         return true;
  12244.     }
  12245.  
  12246.     function refreshGui ( ) {
  12247.         // console.log(`refreshGui`);
  12248.         backbuffer ( );
  12249.        
  12250.     }
  12251.  
  12252.     function checkAndAssignDefaultStats(px, py, z) {
  12253.         if (typeof full_entity_stats[px][py][z] === 'undefined' || full_entity_stats[px][py][z] == null || typeof full_entity_stats[px][py][z].stats === 'undefined' || typeof full_entity_stats[px][py][z].stats.card === 'undefined' || typeof full_entity_stats[px][py][z].stats.card.action === 'undefined') {
  12254.         full_entity_stats[px][py][z] = ent_stats;
  12255.         }
  12256.     }
  12257.  
  12258.  
  12259.  
  12260. loadMap ( );
  12261. createGui ( );
  12262. backbuffer ( );
  12263.  
  12264.  
  12265.  
  12266.  
  12267.  
  12268. function cursorState ( layer = layers.critter) {
  12269.    
  12270.     let state = [
  12271.         cx + viewCursor.hover.x,
  12272.         cy + viewCursor.hover.y
  12273.     ]
  12274.    
  12275.     let [ x, y ] = state;
  12276.    
  12277.     if(oobMap(state) !== true) {
  12278.         [x, y] = oobMap(state);
  12279.     }
  12280.    
  12281.     return [x,y,layer];
  12282. }
  12283.  
  12284. function backbuffer ( ) {
  12285.    
  12286.     var [ px, py, pz ] = cursorState ( layers.gui );
  12287.    
  12288.     canvasViewPortal ( );
  12289.     canvasScrollBars ( );
  12290.     canvasPurseTray ( );
  12291.    
  12292.     // drawScene ( );
  12293.    
  12294.     doubleBuffer ( );
  12295. }
  12296.  
  12297.  
  12298.  
  12299.  
  12300. var imageCache = [];
  12301. var missingCache = [];
  12302.  
  12303. var frontCanvas = false;
  12304. var frontContext = false;
  12305.  
  12306. var backCanvas = false
  12307. var backContext = false;
  12308.  
  12309. makeCanvas ( );
  12310.  
  12311. function makeCanvas ( ) {
  12312.  
  12313.     //document.addEventListener("DOMContentLoaded",  ( ) => {
  12314.  
  12315.     let fragment;
  12316.  
  12317.     // Create an on-screen canvas
  12318.  
  12319.     fragment = document.createDocumentFragment ( );
  12320.  
  12321.     frontCanvas = document.createElement('canvas');
  12322.  
  12323.     fragment.appendChild(frontCanvas);
  12324.  
  12325.     frontCanvas.style.zIndex = -1;
  12326.    
  12327.     frontCanvas.width = 320;
  12328.     frontCanvas.height = 240;
  12329.    
  12330.     frontCanvas.style.width = `320px`;
  12331.     frontCanvas.style.height = `240px`;
  12332.  
  12333.     frontCanvas.id = `frontCanvas`;
  12334.  
  12335.     frontContext = frontCanvas.getContext('2d');
  12336.  
  12337.     frontContext.width = 320;
  12338.     frontContext.height = 200;
  12339.    
  12340.     // Create an off-screen canvas
  12341.  
  12342.     backCanvas = document.createElement('canvas');
  12343.  
  12344.     fragment.appendChild(backCanvas);
  12345.  
  12346.     // Append all changes at once to reduce reflows
  12347.     document.body.appendChild(fragment);
  12348.  
  12349.     backCanvas.style.width = frontCanvas.style.width;
  12350.  
  12351.     backCanvas.style.height = frontCanvas.style.height;
  12352.    
  12353.     backCanvas.width = frontCanvas.width;
  12354.     backCanvas.height = frontCanvas.height;
  12355.  
  12356.     backContext.width = frontContext.width;
  12357.  
  12358.     backContext.height = frontContext.height;
  12359.  
  12360.     backCanvas.style.zIndex = -2;
  12361.  
  12362.     backCanvas.style.visibility = 'hidden';
  12363.  
  12364.     backCanvas.id = `backCanvas`;
  12365.  
  12366.     backContext = backCanvas.getContext('2d');
  12367.  
  12368. }
  12369.    
  12370. function selectCanvas(id){
  12371.     workCanvas = document.getElementById(id);
  12372. }
  12373.  
  12374. function drawRectangle(x, y, width, height, color = 'black',fill = 'gray'){
  12375.    
  12376.     backContext.strokeStyle = color;
  12377.    
  12378.     if(fill === ''){
  12379.         fill = 'rgba(0,0,0,0.0)';
  12380.     }
  12381.     backContext.fillStyle = fill;
  12382.    
  12383.     backContext.fillRect(x, y, width, height);
  12384.  
  12385.     backContext.strokeRect(x, y, width, height);
  12386. }
  12387.  
  12388.  
  12389. function drawLine(x,y,x2,y2,color = 'black',width = 5){
  12390.     backContext.strokeStyle = color;
  12391.     backContext.lineWidth = width;
  12392.     backContext.beginPath ( );
  12393.     backContext.moveTo(x, y);
  12394.     backContext.lineTo(x2, y2);
  12395.     backContext.stroke ( );
  12396. }
  12397.  
  12398.  
  12399. function drawCircle(x,y,radius = 50, color = 'black',fill = '#00FF00', width = 5){
  12400.     backContext.beginPath ( );
  12401.     backContext.arc(x, y, radius, 0, 2 * Math.PI);
  12402.     backContext.fillStyle = '#00FF00';
  12403.     backContext.fill ( );
  12404.     backContext.strokeStyle = '#000000';
  12405.     backContext.lineWidth = width;
  12406.     backContext.stroke ( );
  12407. }
  12408.    
  12409.  
  12410. function drawText(x,y,font = '30px Arial',fill = '#000000',text = 'Hello backcanvas!'){
  12411.     backContext.font = font;
  12412.     backContext.fillStyle = fill;
  12413.     backContext.fillText(text, x, y);
  12414. }
  12415.  
  12416. function drawImageStack(imageStack, x, y, width = 24, height = 24) {
  12417.    
  12418.     // console.log({imageStack: imageStack});
  12419.    
  12420.     for(index = 0; index < imageStack.length; index++){
  12421.        
  12422.         if( imageStack[index] === undefined ){
  12423.             continue;
  12424.         }  
  12425.        
  12426.         imageStack[index] = basename(imageStack[index],`.png`);
  12427.         imageStack[index] = left( imageStack[index] + `________`, 8 );
  12428.        
  12429.         // console.log(imageStack[index]);
  12430.        
  12431.         drawImage( imageStack[index], x, y, width, height );
  12432.        
  12433.     }          
  12434.    
  12435.     if(DEBUG.GUI){
  12436.         if( index > 0 ){
  12437.            
  12438.             // drawImage(`dooropen`, x, y, width, height);
  12439.            
  12440.             // drawRectangle(x, y, width, height, 'rgba(255,0,0,0.7)','');
  12441.    
  12442.             // drawText(x,y+16,'12px Impact', 'rgba(255,0,0,0.7)','TEST');
  12443.         }
  12444.     }
  12445. }
  12446.  
  12447. function drawImage(imagePath, x, y, width = 24, height = 24) {
  12448.    
  12449.     var cachedImage = loadImage(imagePath);
  12450.    
  12451.     if (cachedImage === undefined) {
  12452.         return;
  12453.     }
  12454.  
  12455.     backContext.drawImage(cachedImage, x, y, width, height);
  12456. }
  12457.  
  12458. function loadImageStack(imageStack, width = 24, height = 24) {
  12459.    
  12460.     if(!Array.isArray(imageStack)) {
  12461.         imageStack = [imageStack];
  12462.     }  
  12463.    
  12464.     for(let index = 0; index < imageStack.length; index++){
  12465.         imageStack[index] = loadImage(imageStack[index], width, height);
  12466.     }
  12467.    
  12468.     return imageStack;
  12469.    
  12470. }
  12471.  
  12472. function loadImage(imagePath, width = 24, height = 24) {
  12473.    
  12474.     if (imagePath === undefined) {
  12475.         return undefined;
  12476.     }
  12477.    
  12478.     if(isObject(imagePath)) {
  12479.         return undefined;
  12480.     }
  12481.    
  12482.     if(Array.isArray(imagePath)) {
  12483.         return loadImageStack(imagePath, width, height)[0];
  12484.     }  
  12485.    
  12486.     imagePath = basename(imagePath, `.png`);
  12487.     imagePath = left(imagePath + `________`, 8);
  12488.  
  12489.     let fullPath = `${host}/GFX/${imagePath}.png`;
  12490.  
  12491.     if (imagePath === `________`) {
  12492.         // logFeats(`Placeholder Image: ${fullPath}`);
  12493.         return undefined;
  12494.     }
  12495.  
  12496.     let cachedImage = imageCache.find(img => img.src === fullPath);
  12497.  
  12498.     if (!cachedImage) {
  12499.         cachedImage = new Image(width, height);
  12500.         cachedImage.src = fullPath;
  12501.        
  12502.         cachedImage.onload = function ( ) {
  12503.             imageCache.push(cachedImage);
  12504.             logFeats(`Loaded: ${cachedImage.src}`);
  12505.             // backContext.drawImage(cachedImage, x, y, width, height); // Draw image after loading
  12506.         };
  12507.  
  12508.         cachedImage.onerror = function ( ) {
  12509.             logFeats(`Failed to load: ${cachedImage.src}`);
  12510.             cachedImage = undefined;
  12511.         };
  12512.     } else {
  12513.         // logFeats(`Drawing Image: ${cachedImage.src}`);
  12514.         return cachedImage;
  12515.     }
  12516. }
  12517.  
  12518.  
  12519. function doubleBuffer ( ) {
  12520.    
  12521.     frontContext.clearRect(0, 0, frontCanvas.width, frontCanvas.height);
  12522.    
  12523.     frontContext.drawImage(backCanvas, 0, 0);
  12524. }
  12525.  
  12526. function getColorAtPoint(x, y) {
  12527.     const imageData = backCanvas.getImageData(x, y, 1, 1); // Step 4
  12528.     const data = imageData.data;
  12529.     const rgba = `rgba(${data[0]}, ${data[1]}, ${data[2]}, ${data[3] / 255})`; // Step 5
  12530.     return rgba;
  12531. }
  12532.    
  12533. function grabColor(fg){
  12534.     if(left(fg,1) === '#'){
  12535.         fg = mid(fg,2);
  12536.         fg = sections(fg,2);
  12537.     }else if( ( left( fg, 5 ) === 'rgba(' ) && ( right( fg, 1 ) === ')' ) ){
  12538.         fg = mid(fg,6);
  12539.         fg = left(fg,len(fg)-1);
  12540.         fg = fg.replace(' ','');
  12541.         fg = fg.split(',');
  12542.     }else{
  12543.         fg = grabColor(fg);
  12544.     }
  12545.  
  12546.     return fg;
  12547. }
  12548.  
  12549.  
  12550.  
  12551.     var TILE_WIDTH = 64;
  12552.     var TILE_HEIGHT = 32;
  12553.     var BOX_HEIGHT = 64;
  12554.    
  12555.     function drawIsometricBox(x, y, z,imageStack) {
  12556.  
  12557.         var cached = loadImageStack(imageStack, tileW, tileH);
  12558.        
  12559.         const screenX = (x - y) * TILE_WIDTH / 2;
  12560.         const screenY = (x + y) * TILE_HEIGHT / 2 - z * BOX_HEIGHT;
  12561.  
  12562.         // drawRectangle(screenX, screenY - BOX_HEIGHT, tileW, tileH,'red','black');
  12563.  
  12564.         // Draw top
  12565.         drawImage(cached[0], screenX, screenY - BOX_HEIGHT);
  12566.  
  12567.         // drawRectangle( screenX, screenY - TILE_HEIGHT / 2, tileW, tileH,'red','black');
  12568.  
  12569.         // Draw side
  12570.         drawImage(cached[1], screenX, screenY - TILE_HEIGHT / 2);
  12571.  
  12572.         // drawRectangle(  screenX - TILE_WIDTH / 2, screenY, tileW, tileH,'red','black');
  12573.  
  12574.         // Draw front
  12575.         drawImage(cached[2], screenX - TILE_WIDTH / 2, screenY);
  12576.     }
  12577.  
  12578.     function drawScene ( ) {
  12579.         // backContext.clearRect(0, 0, frontCanvas.width, frontCanvas.height);
  12580.        
  12581.         // Draw a grid of boxes for demonstration
  12582.         for (let x = 0; x < 5; x++) {
  12583.             for (let y = 0; y < 5; y++) {
  12584.                 drawIsometricBox ( x, y, 1, [`wall____`,`wall____`,`wall____`]);
  12585.             }
  12586.         }
  12587.     }
  12588.  
  12589.     // drawScene ( );
  12590.  
  12591.  
  12592.  
  12593.  
  12594. function canvasPurseTray ( ) {
  12595.  
  12596.     var purseSpanX = 5;
  12597.     var purseSpanY = 6;
  12598.  
  12599.     var ent_stats = [];
  12600.  
  12601.     var [ px, py, pz ] = cursorState ( layers.critter );
  12602.  
  12603.     var xOffset = viewSpanX * tileW;
  12604.    
  12605.     drawRectangle(xOffset+gutterW*2, gutterH, purseSpanX * tileW, purseSpanY * tileH, 'black', 'black');
  12606.        
  12607.     var ss = [];
  12608.  
  12609.     ent_stats.stats = default_entity_stats[full_map[px][py][pz]].stats;
  12610.  
  12611.     ss.push(ent_stats.stats);
  12612.     ss.card = {};
  12613.     ss.card.namesake = `Placeholder`;
  12614.     ss.card.actionRoster = [];
  12615.    
  12616.     switch(true){
  12617.     case (oobMap([px,py]) !== true):
  12618.        
  12619.         ss.push(ent_stats.stats);
  12620.         ss.card.namesake = `Out Of Bounds`;
  12621.         ss.card.actionRoster = [];
  12622.        
  12623.         break;
  12624.        
  12625.     case (invalidName(full_map[px][py][layers.critter],2)):
  12626.        
  12627.         ss.push(ent_stats.stats);
  12628.         ss.card.namesake = `Placeholder`;
  12629.         ss.card.actionRoster = [];
  12630.        
  12631.         break;
  12632.        
  12633.     case (oobMap([px,py]) === true):
  12634.        
  12635.         ss.push(full_entity_stats[px][py][layers.critter].stats);
  12636.         ss.card.namesake = ss.card.namesake;
  12637.         ss.card.actionRoster = sections(ss.card.action,4);
  12638.        
  12639.         break;
  12640.     }
  12641.    
  12642.     let buffer = [];
  12643.    
  12644.     for(let y = purseConstraints.viewMinY; y <= purseConstraints.viewMaxY; y++){
  12645.         for(let x = purseConstraints.viewMinX; x <= purseConstraints.viewMaxX; x++){
  12646.                        
  12647.             buffer = [];
  12648.            
  12649.             if(y === 3){
  12650.                 let z = x;
  12651.                 if((z >= 0) && (z < layers.gui)){
  12652.                     if(oobMap([px,py]) === true){
  12653.                         buffer.push(
  12654.                             full_map[px][py][z]
  12655.                         );
  12656.                     }
  12657.                 }
  12658.             }
  12659.            
  12660.             let x1 = 0;
  12661.             let purseSpanX = 5;
  12662.            
  12663.             let y1 = 4;
  12664.             let purseSpanY = 3;
  12665.                
  12666.             if((x >= x1) && (x < x1 + purseSpanX) && (y >= y1) && (y < y1 + purseSpanY)){
  12667.                
  12668.                 let i = (x - x1) + (y - y1) * purseSpanX;
  12669.  
  12670.                 if((i >= 0) && (i < ss.card.actionRoster.length)){
  12671.                     buffer.push( ss.card.actionRoster[i] );
  12672.                 }
  12673.             }
  12674.            
  12675.             buffer.push(`sel2dots`);
  12676.            
  12677.             drawImageStack(buffer,xOffset+
  12678.             gutterW * 2 + x * tileW,gutterH + y * tileH,tileW,tileH);
  12679.         }
  12680.     }
  12681.    
  12682.     ss.card.namesake = ucwords(ss.card.namesake);
  12683.    
  12684.     switch(true){
  12685.     case (ucwords(ss.card.namesake) === "Placeholder"):
  12686.     case (ucwords(ss.card.namesake) === "Out Of Bounds"):
  12687.         break;
  12688.     default:       
  12689.        
  12690.         renderStats(px,py,z);
  12691.        
  12692.         drawText(gutterW + 0 * tileW, gutterH + 8 + 12,'16px Impact','white','" ' + ss.card.namesake + ' "');
  12693.        
  12694.         break;
  12695.     }
  12696.    
  12697.     return true;   
  12698. }
  12699.  
  12700.     function renderStatBar(x,y,width,height,caption,font,fg,bg){
  12701.        
  12702.         drawRectangle( x, y, width, height, 'black', bg );
  12703.  
  12704.         drawText( x, y, `${height}px ${font}`, fg, caption );
  12705.        
  12706.     }
  12707.  
  12708.     function renderStats(px,py,z){
  12709.            
  12710.         var [ px, py, pz ] = cursorState ( layers.critter );
  12711.  
  12712.         var gutterW = viewSpanX * tileW + 16;
  12713.        
  12714.        
  12715.         z = z || pz;
  12716.        
  12717.         let s = [];
  12718.         let pct = [];
  12719.        
  12720.         s['health'] = full_entity_stats[px][py][layers.critter].stats.health;
  12721.        
  12722.         s['stamina'] = full_entity_stats[px][py][layers.critter].stats.stamina;
  12723.        
  12724.         s['essence'] = full_entity_stats[px][py][layers.critter].stats.essence;
  12725.        
  12726.         renderStatusBar( s, 'health', tileW * viewSpanX + 16, 8 + 16 * 0, tileW * purseSpanX, 12, 'black', 'red' );
  12727.  
  12728.         renderStatusBar( s, 'stamina', tileW * viewSpanX + 16, 8 + 16 * 1, tileW * purseSpanX, 12, 'black', 'yellow' );
  12729.  
  12730.         renderStatusBar( s, 'essence', tileW * viewSpanX + 16, 8 + 16 * 2, tileW * purseSpanX, 12, 'black', 'cyan' );
  12731.     }
  12732.    
  12733. function renderStatusBar(stat, attrName, gutterW, gutterH, width, height, fg, bg ) {
  12734.        
  12735.     var [ px, py, pz ] = cursorState ( );
  12736.  
  12737.     let s = stat[attrName];
  12738.    
  12739.     let pct = [];
  12740.     let w = [];
  12741.    
  12742.     s.minimum = s.minimum || 0;
  12743.     s.maximum = s.maximum || 1;
  12744.     s.current = s.current || 0;
  12745.     s.recovery = s.recovery || 0;
  12746.            
  12747.     pct['current'] = Math.round(100 * s.current / s.maximum);
  12748.  
  12749.     pct['minimum'] = Math.round(100 * s.minimum / s.maximum);
  12750.  
  12751.     pct['maximum'] = Math.round(100 * s.maximum / s.maximum);
  12752.  
  12753.     pct['recovery'] = Math.round(100 * (s.current + s.recovery) / s.maximum);
  12754.    
  12755.     let x = gutterW;
  12756.     let y = gutterH+24;
  12757.    
  12758.     // s.current, s.recovery
  12759.     // s.minimum, s.maximum
  12760.  
  12761.     let caption = `${attrName}: ${s.current} / ${s.maximum}`;
  12762.    
  12763.     let font = 'Small Fonts';
  12764.    
  12765.     // fg, bg
  12766.  
  12767.     w['current'] = width * curve(pct['current']) / 100;
  12768.     w['recovery'] = width * curve(pct['recovery']) / 100;
  12769.    
  12770.     w['minimum'] = 0;
  12771.     w['maximum'] = width * curve(1.0) / 100;
  12772.  
  12773.     drawRectangle( x, y, w['maximum'], height, 'black', 'gray' );
  12774.    
  12775.     drawRectangle( x, y + 4, w['current'], height - 4, 'black', bg );
  12776.  
  12777.     drawRectangle( x, y, w['recovery'], height - 4, 'rgba(0,0,0,0.0)', 'rgba(255,255,255,0.7)' );
  12778.  
  12779.     drawRectangle( x, y, width, height, 'black', 'rgba(0,0,0,0.0)' );
  12780.  
  12781.     drawText( x, y + 8, `${height*0.8}px ${font}`, 'black', caption );
  12782.  
  12783. }
  12784.  
  12785.  
  12786.  
  12787.  
  12788. function canvasViewPortal ( ){
  12789.  
  12790.     var [ px, py, pz ] = cursorState ( layers.gui );
  12791.    
  12792.     drawRectangle(gutterW, gutterH, viewConstraints.viewSpanX * tileW, viewConstraints.viewSpanY * tileH, 'black', 'black');
  12793.    
  12794.     let buffer = [];
  12795.            
  12796.     for(let y = viewConstraints.viewMinY; y <= viewConstraints.viewMaxY; y++){
  12797.         for(let x = viewConstraints.viewMinX; x <= viewConstraints.viewMaxX; x++){
  12798.            
  12799.             buffer = [];
  12800.            
  12801.             px = cx + x;
  12802.             py = cy + y;
  12803.            
  12804.             if(oobMap([px,py]) !== true){
  12805.                 buffer.push(special.stonwall);
  12806.             }
  12807.            
  12808.             if(oobMap([px,py]) === true){
  12809.                
  12810.                 for(let z = 0; z <= pz; z++){
  12811.                     buffer.push(`${sections(full_map[px][py][z])[0]}____`);
  12812.                 }
  12813.                
  12814.                 if( ( x === 0 ) && ( y === 0 ) ){
  12815.                     buffer.push(special.sel1dash);
  12816.                 }
  12817.             }
  12818.            
  12819.             // logFeats(hover);
  12820.            
  12821.             if( ( x === viewCursor.hover.x ) && ( y === viewCursor.hover.y ) ){
  12822.                 buffer.push(special.sel2dash);
  12823.             }
  12824.            
  12825.             buffer.push(special.sel2dots);
  12826.            
  12827.             drawImageStack(buffer,gutterW+(x - viewConstraints.viewMinX)*tileW,gutterH+(y - viewConstraints.viewMinY)*tileH,tileW,tileH);
  12828.         }
  12829.     }
  12830.    
  12831.     return true;
  12832. }
  12833.  
  12834. function canvasScrollBars ( ) {
  12835.  
  12836.     var [ px, py, pz ] = cursorState ( layers.gui );
  12837.  
  12838.     var gutterW = 0;
  12839.     var gutterH = 0;
  12840.  
  12841.     let scrollX1 = ( cx - viewSpanX / 2 ) / full_map.length;
  12842.     let scrollX2 = ( cx + viewSpanX / 2 ) / full_map.length;
  12843.  
  12844.     let scrollY1 = ( cy - viewSpanY / 2 ) / full_map[0].length;
  12845.     let scrollY2 = ( cy + viewSpanY / 2 ) / full_map[0].length;
  12846.  
  12847.     scrollX1 = viewSpanX * tileW * scrollX1;
  12848.     scrollX2 = viewSpanX * tileW * scrollX2;
  12849.  
  12850.     scrollY1 = viewSpanY * tileH * scrollY1;
  12851.     scrollY2 = viewSpanY * tileH * scrollY2;
  12852.    
  12853.     if( scrollX1 < 0 ){
  12854.         scrollX1 = 0;
  12855.     }
  12856.     if( scrollY1 < 0 ){
  12857.         scrollY1 = 0;
  12858.     }
  12859.     if( scrollX1 > viewSpanX * tileW ){
  12860.         scrollX1 = viewSpanX * tileW;
  12861.     }
  12862.     if( scrollY1 > viewSpanY * tileH ){
  12863.         scrollY1 = viewSpanY * tileH;
  12864.     }
  12865.  
  12866.     if( scrollX2 < 0 ){
  12867.         scrollX2 = 0;
  12868.     }
  12869.     if( scrollY2 < 0 ){
  12870.         scrollY2 = 0;
  12871.     }
  12872.     if( scrollX2 > viewSpanX * tileW ){
  12873.         scrollX2 = viewSpanX * tileW;
  12874.     }
  12875.     if( scrollY2 > viewSpanY * tileH ){
  12876.         scrollY2 = viewSpanY * tileH;
  12877.     }
  12878.    
  12879.     scrollW = scrollX2 - scrollX1;
  12880.     scrollH = scrollY2 - scrollY1;
  12881.  
  12882.    
  12883.     // left backbar
  12884.     drawRectangle(
  12885.         gutterW,
  12886.         gutterH,
  12887.         8,
  12888.         viewSpanY*tileH,
  12889.         'rgba(0,0,0,0.0)',
  12890.         'red'
  12891.     );
  12892.    
  12893.     // top backbar
  12894.     drawRectangle(
  12895.         gutterW,
  12896.         gutterH,
  12897.         viewSpanX*tileW,
  12898.         8,
  12899.         'rgba(0,0,0,0.0)',
  12900.         'red'
  12901.     );
  12902.    
  12903.     gutterW = 0;
  12904.     gutterH = 0;
  12905.  
  12906.     // right backbar
  12907.     drawRectangle(
  12908.         gutterW+viewSpanX*tileW,
  12909.         gutterH,
  12910.         8,
  12911.         viewSpanY*tileH,
  12912.         'rgba(0,0,0,0.0)',
  12913.         'red'
  12914.     );
  12915.    
  12916.     // bottom backbar
  12917.     drawRectangle(
  12918.         gutterW,
  12919.         gutterH+viewSpanY*tileH,
  12920.         viewSpanX*tileW,
  12921.         8,
  12922.         'rgba(0,0,0,0.0)',
  12923.         'red'
  12924.     );
  12925.  
  12926.     // right scrollbar
  12927.     drawRectangle(
  12928.         gutterW*2+viewSpanX*tileW,
  12929.         gutterH*2+scrollY1,
  12930.         8,
  12931.         scrollH,
  12932.         'black',
  12933.         '#00ff00'
  12934.     );
  12935.    
  12936.     // bottom scrollbar
  12937.     drawRectangle(
  12938.         gutterW*2+scrollX1,
  12939.         gutterH*2+viewSpanY*tileH,
  12940.         scrollW,
  12941.         8,
  12942.         'black',
  12943.         '#00ff00'
  12944.     );
  12945.    
  12946.     return true;
  12947.  
  12948. }
  12949.  
  12950.  
  12951.  
  12952.  
  12953. window.onmousemove = e => {
  12954.    
  12955.     canvasViewCursor ( { x: e.pageX, y: e.pageY } );
  12956.  
  12957. }
  12958.  
  12959. window.onclick = e => {
  12960.    
  12961.     canvasViewCursor ( { x: e.pageX, y: e.pageY } );
  12962.    
  12963.     [ cx, cy ] = [ cx + viewCursor.hover.x, cy + viewCursor.hover.y ];
  12964. }
  12965.  
  12966. function canvasViewCursor ( coords ) {
  12967.  
  12968.     viewCursor.prev.x = canvasCursor.x;
  12969.     viewCursor.prev.y = canvasCursor.y;
  12970.     viewCursor.prev.z = 4;
  12971.     // = viewCursor.hover.z;
  12972.    
  12973.     canvasCursor.x = coords.x;
  12974.     canvasCursor.y = coords.y;
  12975.        
  12976.     var viewRangeMinX = gutterW;
  12977.     var viewRangeMinY = gutterH;
  12978.    
  12979.     var viewRangeMaxX = gutterW + (viewConstraints.viewMaxX - viewConstraints.viewMinX + 1 ) * tileW;
  12980.    
  12981.     var viewRangeMaxY = gutterH + (viewConstraints.viewMaxY - viewConstraints.viewMinY + 1 ) * tileH;
  12982.    
  12983.     if (
  12984.    
  12985.     (canvasCursor.x > viewRangeMinX)
  12986.     &&
  12987.    
  12988.     (canvasCursor.x < viewRangeMaxX)
  12989.     &&
  12990.  
  12991.     (canvasCursor.y > viewRangeMinY)
  12992.     &&
  12993.        
  12994.     (canvasCursor.y < viewRangeMaxY)
  12995.    
  12996.     )
  12997.     {  
  12998.         x = canvasCursor.x;
  12999.         y = canvasCursor.y;
  13000.  
  13001.         x -= gutterW;
  13002.         y -= gutterH;
  13003.  
  13004.         x /= tileW;
  13005.         y /= tileH;
  13006.  
  13007.         x = Math.round(x);
  13008.         y = Math.round(y);
  13009.        
  13010.         x += viewConstraints.viewMinX;
  13011.         y += viewConstraints.viewMinY;
  13012.  
  13013.     }else{
  13014.         x = 0;
  13015.         y = 0;
  13016.     }
  13017.     if (oobView([x,y]) !== true){
  13018.         [x,y] = oobView([x,y]);
  13019.     }
  13020.    
  13021.     [ viewCursor.hover.x, viewCursor.hover.y ] =
  13022.         [ x, y ];
  13023.    
  13024.     console.log({x: x, y: y});
  13025.     return;
  13026. }
  13027.  
  13028.  
  13029.  
  13030.  
  13031. /*
  13032. function handleViewPortalHover(event) {
  13033.    
  13034.     viewCursor.prev.x = viewCursor.hover.x;
  13035.     viewCursor.prev.y = viewCursor.hover.y;
  13036.     viewCursor.prev.z = viewCursor.hover.z;
  13037.    
  13038.     const hoverId = event.target.id;
  13039.     const parts = idParts(hoverId);
  13040.    
  13041.     viewCursor.hover.x = parts.x;
  13042.     viewCursor.hover.y = parts.y;        
  13043.     viewCursor.hover.z = parts.z;
  13044.    
  13045.     // refreshGui ( );
  13046. }
  13047.  
  13048. function handleViewPortalClick(event) {
  13049.    
  13050.     const clickedId = event.target.id;
  13051.     const parts = idParts(clickedId);
  13052.    
  13053.     const id = parts.id;
  13054.     const x = parts.x;
  13055.     const y = parts.y;
  13056.     const z = parts.z;
  13057.    
  13058.     if (oobMap([cx + x, cy + y]) === true) {
  13059.         cx += x;
  13060.         cy += y;
  13061.     }
  13062. }
  13063.  
  13064. function attachListeners(id) {
  13065.    
  13066.     const elements = document.querySelectorAll(`.${id}`);
  13067.    
  13068.     elements.forEach(element => {
  13069.         switch (id) {
  13070.             case 'viewportal':
  13071.                 element.addEventListener('mousemove', handleViewPortalHover);
  13072.                 element.addEventListener('mouseover', handleViewPortalHover);
  13073.                 element.addEventListener('click', handleViewPortalClick);
  13074.                 break;
  13075.                
  13076.             case 'trayportal':
  13077.                 element.addEventListener('mousemove', handleTrayPortalHover);
  13078.                 element.addEventListener('mouseover', handleTrayPortalHover);
  13079.                 element.addEventListener('click', handleTrayPortalClick);
  13080.                 break;
  13081.         }
  13082.     });
  13083. }
  13084.  
  13085. function linkGui ( ) {
  13086.     // console.log('linkGui');
  13087.     attachListeners('viewportal');
  13088.    
  13089.     // attachListeners('trayportal');
  13090.    
  13091.     // attachListeners('viewframe');
  13092.    
  13093.     // attachListeners('trayframe');
  13094. }
  13095. */
  13096.  
  13097.  
  13098. const turnIntervalId = setInterval(takeTurns, 50);
  13099.  
  13100. const refreshIntervalId = setInterval(refreshGui, 50);
  13101.  
  13102. // const cursorIntervalId = setInterval(canvasViewCursor, 50);
  13103.  
  13104. // linkGui ( );
  13105. </script>
  13106. </body>
  13107. </html>
  13108.  
Add Comment
Please, Sign In to add comment