studyup 0.0.0-stage → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (898) hide show
  1. package/hexgl-package/HexGL-master/.htaccess +4 -0
  2. package/hexgl-package/HexGL-master/LICENSE +21 -0
  3. package/hexgl-package/HexGL-master/README.md +26 -0
  4. package/hexgl-package/HexGL-master/audio/LICENSE +28 -0
  5. package/hexgl-package/HexGL-master/audio/bg.ogg +0 -0
  6. package/hexgl-package/HexGL-master/audio/boost.ogg +0 -0
  7. package/hexgl-package/HexGL-master/audio/crash.ogg +0 -0
  8. package/hexgl-package/HexGL-master/audio/destroyed.ogg +0 -0
  9. package/hexgl-package/HexGL-master/audio/wind.ogg +0 -0
  10. package/hexgl-package/HexGL-master/bkcore/Audio.js +142 -0
  11. package/hexgl-package/HexGL-master/bkcore/hexgl/CameraChase.js +73 -0
  12. package/hexgl-package/HexGL-master/bkcore/hexgl/Gameplay.js +231 -0
  13. package/hexgl-package/HexGL-master/bkcore/hexgl/HUD.js +270 -0
  14. package/hexgl-package/HexGL-master/bkcore/hexgl/HexGL.js +446 -0
  15. package/hexgl-package/HexGL-master/bkcore/hexgl/Ladder.js +52 -0
  16. package/hexgl-package/HexGL-master/bkcore/hexgl/RaceData.js +99 -0
  17. package/hexgl-package/HexGL-master/bkcore/hexgl/ShipControls.js +806 -0
  18. package/hexgl-package/HexGL-master/bkcore/hexgl/ShipEffects.js +186 -0
  19. package/hexgl-package/HexGL-master/bkcore/hexgl/tracks/Cityscape.js +521 -0
  20. package/hexgl-package/HexGL-master/bkcore/threejs/Loader.js +260 -0
  21. package/hexgl-package/HexGL-master/bkcore/threejs/Particles.js +191 -0
  22. package/hexgl-package/HexGL-master/bkcore/threejs/Preloader.js +151 -0
  23. package/hexgl-package/HexGL-master/bkcore/threejs/RenderManager.js +132 -0
  24. package/hexgl-package/HexGL-master/bkcore/threejs/Shaders.js +950 -0
  25. package/hexgl-package/HexGL-master/bkcore.coffee/ImageData.coffee +141 -0
  26. package/hexgl-package/HexGL-master/bkcore.coffee/ImageData.js +156 -0
  27. package/hexgl-package/HexGL-master/bkcore.coffee/Timer.coffee +118 -0
  28. package/hexgl-package/HexGL-master/bkcore.coffee/Timer.js +159 -0
  29. package/hexgl-package/HexGL-master/bkcore.coffee/Utils.coffee +193 -0
  30. package/hexgl-package/HexGL-master/bkcore.coffee/Utils.js +250 -0
  31. package/hexgl-package/HexGL-master/bkcore.coffee/controllers/GamepadController.coffee +45 -0
  32. package/hexgl-package/HexGL-master/bkcore.coffee/controllers/GamepadController.js +73 -0
  33. package/hexgl-package/HexGL-master/bkcore.coffee/controllers/OrientationController.coffee +72 -0
  34. package/hexgl-package/HexGL-master/bkcore.coffee/controllers/OrientationController.js +130 -0
  35. package/hexgl-package/HexGL-master/bkcore.coffee/controllers/TouchController.coffee +109 -0
  36. package/hexgl-package/HexGL-master/bkcore.coffee/controllers/TouchController.js +188 -0
  37. package/hexgl-package/HexGL-master/bkcore.coffee/tests.html +10 -0
  38. package/hexgl-package/HexGL-master/bkcore.coffee/threejs/Particles.coffee +199 -0
  39. package/hexgl-package/HexGL-master/bkcore.coffee/threejs/Particles.js +210 -0
  40. package/hexgl-package/HexGL-master/cache.appcache +74 -0
  41. package/hexgl-package/HexGL-master/css/BebasNeue-webfont.eot +0 -0
  42. package/hexgl-package/HexGL-master/css/BebasNeue-webfont.svg +245 -0
  43. package/hexgl-package/HexGL-master/css/BebasNeue-webfont.ttf +0 -0
  44. package/hexgl-package/HexGL-master/css/BebasNeue-webfont.woff +0 -0
  45. package/hexgl-package/HexGL-master/css/bg.jpg +0 -0
  46. package/hexgl-package/HexGL-master/css/fonts.css +16 -0
  47. package/hexgl-package/HexGL-master/css/help-0.png +0 -0
  48. package/hexgl-package/HexGL-master/css/help-1.png +0 -0
  49. package/hexgl-package/HexGL-master/css/help-2.png +0 -0
  50. package/hexgl-package/HexGL-master/css/help-3.png +0 -0
  51. package/hexgl-package/HexGL-master/css/mobile-controls-1.jpg +0 -0
  52. package/hexgl-package/HexGL-master/css/mobile-controls-2.jpg +0 -0
  53. package/hexgl-package/HexGL-master/css/mobile-over.jpg +0 -0
  54. package/hexgl-package/HexGL-master/css/mobile.jpg +0 -0
  55. package/hexgl-package/HexGL-master/css/multi.css +264 -0
  56. package/hexgl-package/HexGL-master/css/title.png +0 -0
  57. package/hexgl-package/HexGL-master/css/touchcontroller.css +8 -0
  58. package/hexgl-package/HexGL-master/favicon.png +0 -0
  59. package/hexgl-package/HexGL-master/geometries/bonus/base/base.js +45 -0
  60. package/hexgl-package/HexGL-master/geometries/booster/booster.js +45 -0
  61. package/hexgl-package/HexGL-master/geometries/ships/feisar/feisar.js +45 -0
  62. package/hexgl-package/HexGL-master/geometries/tracks/cityscape/bonus/speed.js +45 -0
  63. package/hexgl-package/HexGL-master/geometries/tracks/cityscape/scrapers1.js +45 -0
  64. package/hexgl-package/HexGL-master/geometries/tracks/cityscape/scrapers2.js +45 -0
  65. package/hexgl-package/HexGL-master/geometries/tracks/cityscape/start.js +45 -0
  66. package/hexgl-package/HexGL-master/geometries/tracks/cityscape/startbanner.js +45 -0
  67. package/hexgl-package/HexGL-master/geometries/tracks/cityscape/track.js +45 -0
  68. package/hexgl-package/HexGL-master/geometries/tracks/edge/track.js +38 -0
  69. package/hexgl-package/HexGL-master/icon_128.png +0 -0
  70. package/hexgl-package/HexGL-master/icon_256.png +0 -0
  71. package/hexgl-package/HexGL-master/icon_32.png +0 -0
  72. package/hexgl-package/HexGL-master/icon_64.png +0 -0
  73. package/hexgl-package/HexGL-master/index.html +129 -0
  74. package/hexgl-package/HexGL-master/launch.coffee +85 -0
  75. package/hexgl-package/HexGL-master/launch.js +116 -0
  76. package/hexgl-package/HexGL-master/libs/DAT.GUI.min.js +53 -0
  77. package/hexgl-package/HexGL-master/libs/Detector.js +59 -0
  78. package/hexgl-package/HexGL-master/libs/Editor.html +717 -0
  79. package/hexgl-package/HexGL-master/libs/Editor_files/App.js +212 -0
  80. package/hexgl-package/HexGL-master/libs/Editor_files/CanvasRenderer.js +389 -0
  81. package/hexgl-package/HexGL-master/libs/Editor_files/Diagram.js +148 -0
  82. package/hexgl-package/HexGL-master/libs/Editor_files/Iterator.js +92 -0
  83. package/hexgl-package/HexGL-master/libs/Editor_files/Links.js +56 -0
  84. package/hexgl-package/HexGL-master/libs/Editor_files/ModuleList.js +47 -0
  85. package/hexgl-package/HexGL-master/libs/Editor_files/Node.js +122 -0
  86. package/hexgl-package/HexGL-master/libs/Editor_files/Parser.js +140 -0
  87. package/hexgl-package/HexGL-master/libs/Editor_files/Project.js +162 -0
  88. package/hexgl-package/HexGL-master/libs/Editor_files/Timer.js +166 -0
  89. package/hexgl-package/HexGL-master/libs/Editor_files/ace.js +11 -0
  90. package/hexgl-package/HexGL-master/libs/Editor_files/class.js +989 -0
  91. package/hexgl-package/HexGL-master/libs/Editor_files/editor.css +16 -0
  92. package/hexgl-package/HexGL-master/libs/Editor_files/font.css +24 -0
  93. package/hexgl-package/HexGL-master/libs/Editor_files/gamecore.js +133 -0
  94. package/hexgl-package/HexGL-master/libs/Editor_files/hashlist.js +41 -0
  95. package/hexgl-package/HexGL-master/libs/Editor_files/jhashtable.js +468 -0
  96. package/hexgl-package/HexGL-master/libs/Editor_files/jquery-1.8.js +2 -0
  97. package/hexgl-package/HexGL-master/libs/Editor_files/kinetic.js +30 -0
  98. package/hexgl-package/HexGL-master/libs/Editor_files/main.css +204 -0
  99. package/hexgl-package/HexGL-master/libs/Editor_files/mode-json.js +1 -0
  100. package/hexgl-package/HexGL-master/libs/Editor_files/pooled.js +542 -0
  101. package/hexgl-package/HexGL-master/libs/Editor_files/theme-monokai.js +1 -0
  102. package/hexgl-package/HexGL-master/libs/ShaderExtras.js +1788 -0
  103. package/hexgl-package/HexGL-master/libs/Stats.js +6 -0
  104. package/hexgl-package/HexGL-master/libs/Three.dev.js +758 -0
  105. package/hexgl-package/HexGL-master/libs/Three.r53.js +767 -0
  106. package/hexgl-package/HexGL-master/libs/leap-0.4.1.min.js +3 -0
  107. package/hexgl-package/HexGL-master/libs/postprocessing/BloomPass.js +100 -0
  108. package/hexgl-package/HexGL-master/libs/postprocessing/DotScreenPass.js +52 -0
  109. package/hexgl-package/HexGL-master/libs/postprocessing/EffectComposer.js +143 -0
  110. package/hexgl-package/HexGL-master/libs/postprocessing/FilmPass.js +51 -0
  111. package/hexgl-package/HexGL-master/libs/postprocessing/MaskPass.js +86 -0
  112. package/hexgl-package/HexGL-master/libs/postprocessing/RenderPass.js +63 -0
  113. package/hexgl-package/HexGL-master/libs/postprocessing/SavePass.js +52 -0
  114. package/hexgl-package/HexGL-master/libs/postprocessing/ShaderPass.js +51 -0
  115. package/hexgl-package/HexGL-master/libs/postprocessing/TexturePass.js +37 -0
  116. package/hexgl-package/HexGL-master/manifest.webapp +18 -0
  117. package/hexgl-package/HexGL-master/package.webapp +10 -0
  118. package/hexgl-package/HexGL-master/package.zip +0 -0
  119. package/hexgl-package/HexGL-master/replays/cityscape-casual/bkcore.replay.json +1 -0
  120. package/hexgl-package/HexGL-master/textures/bonus/base/diffuse.jpg +0 -0
  121. package/hexgl-package/HexGL-master/textures/bonus/base/normal.jpg +0 -0
  122. package/hexgl-package/HexGL-master/textures/bonus/base/specular.jpg +0 -0
  123. package/hexgl-package/HexGL-master/textures/checker.png +0 -0
  124. package/hexgl-package/HexGL-master/textures/hud/hex.jpg +0 -0
  125. package/hexgl-package/HexGL-master/textures/hud/hud-bg.png +0 -0
  126. package/hexgl-package/HexGL-master/textures/hud/hud-fg-shield.png +0 -0
  127. package/hexgl-package/HexGL-master/textures/hud/hud-fg-speed.png +0 -0
  128. package/hexgl-package/HexGL-master/textures/particles/cloud - Copie.png +0 -0
  129. package/hexgl-package/HexGL-master/textures/particles/cloud.png +0 -0
  130. package/hexgl-package/HexGL-master/textures/particles/damage.png +0 -0
  131. package/hexgl-package/HexGL-master/textures/particles/spark - Copie.png +0 -0
  132. package/hexgl-package/HexGL-master/textures/particles/spark.png +0 -0
  133. package/hexgl-package/HexGL-master/textures/ships/feisar/booster/booster.png +0 -0
  134. package/hexgl-package/HexGL-master/textures/ships/feisar/booster/boostersprite.jpg +0 -0
  135. package/hexgl-package/HexGL-master/textures/ships/feisar/diffuse.jpg +0 -0
  136. package/hexgl-package/HexGL-master/textures/ships/feisar/normal.jpg +0 -0
  137. package/hexgl-package/HexGL-master/textures/ships/feisar/specular.jpg +0 -0
  138. package/hexgl-package/HexGL-master/textures/skybox/dawnclouds/nx.jpg +0 -0
  139. package/hexgl-package/HexGL-master/textures/skybox/dawnclouds/ny.jpg +0 -0
  140. package/hexgl-package/HexGL-master/textures/skybox/dawnclouds/nz.jpg +0 -0
  141. package/hexgl-package/HexGL-master/textures/skybox/dawnclouds/px.jpg +0 -0
  142. package/hexgl-package/HexGL-master/textures/skybox/dawnclouds/py.jpg +0 -0
  143. package/hexgl-package/HexGL-master/textures/skybox/dawnclouds/pz.jpg +0 -0
  144. package/hexgl-package/HexGL-master/textures/tracks/cityscape/collision.png +0 -0
  145. package/hexgl-package/HexGL-master/textures/tracks/cityscape/diffuse.jpg +0 -0
  146. package/hexgl-package/HexGL-master/textures/tracks/cityscape/height.png +0 -0
  147. package/hexgl-package/HexGL-master/textures/tracks/cityscape/normal.jpg +0 -0
  148. package/hexgl-package/HexGL-master/textures/tracks/cityscape/scrapers1/diffuse.jpg +0 -0
  149. package/hexgl-package/HexGL-master/textures/tracks/cityscape/scrapers1/normal.jpg +0 -0
  150. package/hexgl-package/HexGL-master/textures/tracks/cityscape/scrapers1/specular.jpg +0 -0
  151. package/hexgl-package/HexGL-master/textures/tracks/cityscape/scrapers2/diffuse.jpg +0 -0
  152. package/hexgl-package/HexGL-master/textures/tracks/cityscape/scrapers2/normal.jpg +0 -0
  153. package/hexgl-package/HexGL-master/textures/tracks/cityscape/scrapers2/specular.jpg +0 -0
  154. package/hexgl-package/HexGL-master/textures/tracks/cityscape/specular.jpg +0 -0
  155. package/hexgl-package/HexGL-master/textures/tracks/cityscape/start/diffuse.jpg +0 -0
  156. package/hexgl-package/HexGL-master/textures/tracks/cityscape/start/normal.jpg +0 -0
  157. package/hexgl-package/HexGL-master/textures/tracks/cityscape/start/specular.jpg +0 -0
  158. package/hexgl-package/HexGL-master/textures/tracks/cityscape/start/start.jpg +0 -0
  159. package/hexgl-package/HexGL-master/textures.full/bonus/base/diffuse.jpg +0 -0
  160. package/hexgl-package/HexGL-master/textures.full/bonus/base/normal.jpg +0 -0
  161. package/hexgl-package/HexGL-master/textures.full/bonus/base/specular.jpg +0 -0
  162. package/hexgl-package/HexGL-master/textures.full/checker.png +0 -0
  163. package/hexgl-package/HexGL-master/textures.full/hud/hex.jpg +0 -0
  164. package/hexgl-package/HexGL-master/textures.full/hud/hud-bg.png +0 -0
  165. package/hexgl-package/HexGL-master/textures.full/hud/hud-fg-shield.png +0 -0
  166. package/hexgl-package/HexGL-master/textures.full/hud/hud-fg-speed.png +0 -0
  167. package/hexgl-package/HexGL-master/textures.full/particles/cloud - Copie.png +0 -0
  168. package/hexgl-package/HexGL-master/textures.full/particles/cloud.png +0 -0
  169. package/hexgl-package/HexGL-master/textures.full/particles/damage.png +0 -0
  170. package/hexgl-package/HexGL-master/textures.full/particles/spark - Copie.png +0 -0
  171. package/hexgl-package/HexGL-master/textures.full/particles/spark.png +0 -0
  172. package/hexgl-package/HexGL-master/textures.full/ships/feisar/booster/booster.png +0 -0
  173. package/hexgl-package/HexGL-master/textures.full/ships/feisar/booster/boostersprite.jpg +0 -0
  174. package/hexgl-package/HexGL-master/textures.full/ships/feisar/diffuse.jpg +0 -0
  175. package/hexgl-package/HexGL-master/textures.full/ships/feisar/normal.jpg +0 -0
  176. package/hexgl-package/HexGL-master/textures.full/ships/feisar/specular.jpg +0 -0
  177. package/hexgl-package/HexGL-master/textures.full/skybox/dawnclouds/nx.jpg +0 -0
  178. package/hexgl-package/HexGL-master/textures.full/skybox/dawnclouds/ny.jpg +0 -0
  179. package/hexgl-package/HexGL-master/textures.full/skybox/dawnclouds/nz.jpg +0 -0
  180. package/hexgl-package/HexGL-master/textures.full/skybox/dawnclouds/px.jpg +0 -0
  181. package/hexgl-package/HexGL-master/textures.full/skybox/dawnclouds/py.jpg +0 -0
  182. package/hexgl-package/HexGL-master/textures.full/skybox/dawnclouds/pz.jpg +0 -0
  183. package/hexgl-package/HexGL-master/textures.full/tracks/cityscape/collision.png +0 -0
  184. package/hexgl-package/HexGL-master/textures.full/tracks/cityscape/diffuse.jpg +0 -0
  185. package/hexgl-package/HexGL-master/textures.full/tracks/cityscape/height.png +0 -0
  186. package/hexgl-package/HexGL-master/textures.full/tracks/cityscape/normal.jpg +0 -0
  187. package/hexgl-package/HexGL-master/textures.full/tracks/cityscape/scrapers1/diffuse.jpg +0 -0
  188. package/hexgl-package/HexGL-master/textures.full/tracks/cityscape/scrapers1/normal.jpg +0 -0
  189. package/hexgl-package/HexGL-master/textures.full/tracks/cityscape/scrapers1/specular.jpg +0 -0
  190. package/hexgl-package/HexGL-master/textures.full/tracks/cityscape/scrapers2/diffuse.jpg +0 -0
  191. package/hexgl-package/HexGL-master/textures.full/tracks/cityscape/scrapers2/normal.jpg +0 -0
  192. package/hexgl-package/HexGL-master/textures.full/tracks/cityscape/scrapers2/specular.jpg +0 -0
  193. package/hexgl-package/HexGL-master/textures.full/tracks/cityscape/specular.jpg +0 -0
  194. package/hexgl-package/HexGL-master/textures.full/tracks/cityscape/start/diffuse.jpg +0 -0
  195. package/hexgl-package/HexGL-master/textures.full/tracks/cityscape/start/normal.jpg +0 -0
  196. package/hexgl-package/HexGL-master/textures.full/tracks/cityscape/start/specular.jpg +0 -0
  197. package/hexgl-package/HexGL-master/textures.full/tracks/cityscape/start/start.jpg +0 -0
  198. package/index.html +291 -0
  199. package/package.json +12 -3
  200. package/sandboxels-package/sandboxels-1.13.2/.github/CONTRIBUTING.md +10 -0
  201. package/sandboxels-package/sandboxels-1.13.2/.github/FUNDING.yml +13 -0
  202. package/sandboxels-package/sandboxels-1.13.2/.github/SUPPORT.md +9 -0
  203. package/sandboxels-package/sandboxels-1.13.2/404.html +74 -0
  204. package/sandboxels-package/sandboxels-1.13.2/CITATION.cff +42 -0
  205. package/sandboxels-package/sandboxels-1.13.2/CNAME +1 -0
  206. package/sandboxels-package/sandboxels-1.13.2/README.md +47 -0
  207. package/sandboxels-package/sandboxels-1.13.2/SECURITY.md +9 -0
  208. package/sandboxels-package/sandboxels-1.13.2/ad.html +73 -0
  209. package/sandboxels-package/sandboxels-1.13.2/aff.json +3 -0
  210. package/sandboxels-package/sandboxels-1.13.2/archive/first-version.html +234 -0
  211. package/sandboxels-package/sandboxels-1.13.2/archive/second-version.html +1293 -0
  212. package/sandboxels-package/sandboxels-1.13.2/archive/third-version.html +2242 -0
  213. package/sandboxels-package/sandboxels-1.13.2/archive.txt +231 -0
  214. package/sandboxels-package/sandboxels-1.13.2/backgrounds/License.txt +1 -0
  215. package/sandboxels-package/sandboxels-1.13.2/backgrounds/sky.png +0 -0
  216. package/sandboxels-package/sandboxels-1.13.2/backgrounds/sky_dark.png +0 -0
  217. package/sandboxels-package/sandboxels-1.13.2/backgrounds/sky_grass.png +0 -0
  218. package/sandboxels-package/sandboxels-1.13.2/backgrounds/sky_pink.png +0 -0
  219. package/sandboxels-package/sandboxels-1.13.2/backgrounds/sky_purple.png +0 -0
  220. package/sandboxels-package/sandboxels-1.13.2/backgrounds/sky_warm.png +0 -0
  221. package/sandboxels-package/sandboxels-1.13.2/changelog.html +3362 -0
  222. package/sandboxels-package/sandboxels-1.13.2/changelog.txt +3096 -0
  223. package/sandboxels-package/sandboxels-1.13.2/controls.html +191 -0
  224. package/sandboxels-package/sandboxels-1.13.2/controls.txt +65 -0
  225. package/sandboxels-package/sandboxels-1.13.2/education-use.html +109 -0
  226. package/sandboxels-package/sandboxels-1.13.2/feed.rss +30 -0
  227. package/sandboxels-package/sandboxels-1.13.2/feedback.html +89 -0
  228. package/sandboxels-package/sandboxels-1.13.2/fonts/PressStart2P-License-OFL.txt +93 -0
  229. package/sandboxels-package/sandboxels-1.13.2/fonts/PressStart2P-Regular.ttf +0 -0
  230. package/sandboxels-package/sandboxels-1.13.2/fonts/VT323-License-OFL.txt +93 -0
  231. package/sandboxels-package/sandboxels-1.13.2/fonts/VT323-Regular.ttf +0 -0
  232. package/sandboxels-package/sandboxels-1.13.2/fonts/Vietnamese_Pixel.ttf +0 -0
  233. package/sandboxels-package/sandboxels-1.13.2/fonts/fusion-pixel-12px-monospaced-ja.ttf +0 -0
  234. package/sandboxels-package/sandboxels-1.13.2/fonts/fusion-pixel-12px-monospaced-ko.ttf +0 -0
  235. package/sandboxels-package/sandboxels-1.13.2/fonts/fusion-pixel-12px-monospaced-latin.ttf +0 -0
  236. package/sandboxels-package/sandboxels-1.13.2/fonts/fusion-pixel-12px-monospaced-zh_hans.ttf +0 -0
  237. package/sandboxels-package/sandboxels-1.13.2/fonts/fusion-pixel-12px-monospaced-zh_hant.ttf +0 -0
  238. package/sandboxels-package/sandboxels-1.13.2/help.html +122 -0
  239. package/sandboxels-package/sandboxels-1.13.2/icons/80x15.png +0 -0
  240. package/sandboxels-package/sandboxels-1.13.2/icons/88x31.png +0 -0
  241. package/sandboxels-package/sandboxels-1.13.2/icons/android-chrome-192x192.png +0 -0
  242. package/sandboxels-package/sandboxels-1.13.2/icons/android-chrome-384x384.png +0 -0
  243. package/sandboxels-package/sandboxels-1.13.2/icons/apple-touch-icon-114x114-precomposed.png +0 -0
  244. package/sandboxels-package/sandboxels-1.13.2/icons/apple-touch-icon-114x114.png +0 -0
  245. package/sandboxels-package/sandboxels-1.13.2/icons/apple-touch-icon-120x120-precomposed.png +0 -0
  246. package/sandboxels-package/sandboxels-1.13.2/icons/apple-touch-icon-120x120.png +0 -0
  247. package/sandboxels-package/sandboxels-1.13.2/icons/apple-touch-icon-144x144-precomposed.png +0 -0
  248. package/sandboxels-package/sandboxels-1.13.2/icons/apple-touch-icon-144x144.png +0 -0
  249. package/sandboxels-package/sandboxels-1.13.2/icons/apple-touch-icon-152x152-precomposed.png +0 -0
  250. package/sandboxels-package/sandboxels-1.13.2/icons/apple-touch-icon-152x152.png +0 -0
  251. package/sandboxels-package/sandboxels-1.13.2/icons/apple-touch-icon-180x180-precomposed.png +0 -0
  252. package/sandboxels-package/sandboxels-1.13.2/icons/apple-touch-icon-180x180.png +0 -0
  253. package/sandboxels-package/sandboxels-1.13.2/icons/apple-touch-icon-57x57-precomposed.png +0 -0
  254. package/sandboxels-package/sandboxels-1.13.2/icons/apple-touch-icon-57x57.png +0 -0
  255. package/sandboxels-package/sandboxels-1.13.2/icons/apple-touch-icon-60x60-precomposed.png +0 -0
  256. package/sandboxels-package/sandboxels-1.13.2/icons/apple-touch-icon-60x60.png +0 -0
  257. package/sandboxels-package/sandboxels-1.13.2/icons/apple-touch-icon-72x72-precomposed.png +0 -0
  258. package/sandboxels-package/sandboxels-1.13.2/icons/apple-touch-icon-72x72.png +0 -0
  259. package/sandboxels-package/sandboxels-1.13.2/icons/apple-touch-icon-76x76-precomposed.png +0 -0
  260. package/sandboxels-package/sandboxels-1.13.2/icons/apple-touch-icon-76x76.png +0 -0
  261. package/sandboxels-package/sandboxels-1.13.2/icons/apple-touch-icon-precomposed.png +0 -0
  262. package/sandboxels-package/sandboxels-1.13.2/icons/apple-touch-icon.png +0 -0
  263. package/sandboxels-package/sandboxels-1.13.2/icons/browserconfig.xml +9 -0
  264. package/sandboxels-package/sandboxels-1.13.2/icons/card.png +0 -0
  265. package/sandboxels-package/sandboxels-1.13.2/icons/cover-3840x1240px-text.png +0 -0
  266. package/sandboxels-package/sandboxels-1.13.2/icons/cover-3840x1240px.png +0 -0
  267. package/sandboxels-package/sandboxels-1.13.2/icons/cover-3840x1240px.webp +0 -0
  268. package/sandboxels-package/sandboxels-1.13.2/icons/cover.png +0 -0
  269. package/sandboxels-package/sandboxels-1.13.2/icons/favicon-16x16.png +0 -0
  270. package/sandboxels-package/sandboxels-1.13.2/icons/favicon-32x32.png +0 -0
  271. package/sandboxels-package/sandboxels-1.13.2/icons/favicon.ico +0 -0
  272. package/sandboxels-package/sandboxels-1.13.2/icons/icon-hd.png +0 -0
  273. package/sandboxels-package/sandboxels-1.13.2/icons/icon.png +0 -0
  274. package/sandboxels-package/sandboxels-1.13.2/icons/index.html +196 -0
  275. package/sandboxels-package/sandboxels-1.13.2/icons/modulator.png +0 -0
  276. package/sandboxels-package/sandboxels-1.13.2/icons/mstile-150x150.png +0 -0
  277. package/sandboxels-package/sandboxels-1.13.2/icons/original-logo-recreated-pixel.png +0 -0
  278. package/sandboxels-package/sandboxels-1.13.2/icons/promo1.png +0 -0
  279. package/sandboxels-package/sandboxels-1.13.2/icons/promo2.png +0 -0
  280. package/sandboxels-package/sandboxels-1.13.2/icons/promo3.png +0 -0
  281. package/sandboxels-package/sandboxels-1.13.2/icons/promo4.png +0 -0
  282. package/sandboxels-package/sandboxels-1.13.2/icons/safari-pinned-tab.svg +107 -0
  283. package/sandboxels-package/sandboxels-1.13.2/icons/site.webmanifest +20 -0
  284. package/sandboxels-package/sandboxels-1.13.2/icons/tall.webp +0 -0
  285. package/sandboxels-package/sandboxels-1.13.2/icons/wallpaper-old.png +0 -0
  286. package/sandboxels-package/sandboxels-1.13.2/icons/wallpaper.png +0 -0
  287. package/sandboxels-package/sandboxels-1.13.2/icons/wallpaper.webp +0 -0
  288. package/sandboxels-package/sandboxels-1.13.2/icons/wordmark-black.png +0 -0
  289. package/sandboxels-package/sandboxels-1.13.2/icons/wordmark-white.png +0 -0
  290. package/sandboxels-package/sandboxels-1.13.2/index.html +21523 -0
  291. package/sandboxels-package/sandboxels-1.13.2/lang/README.txt +5 -0
  292. package/sandboxels-package/sandboxels-1.13.2/lang/af.json +1 -0
  293. package/sandboxels-package/sandboxels-1.13.2/lang/ar.json +1 -0
  294. package/sandboxels-package/sandboxels-1.13.2/lang/ar_sy.json +1 -0
  295. package/sandboxels-package/sandboxels-1.13.2/lang/bn.json +1 -0
  296. package/sandboxels-package/sandboxels-1.13.2/lang/ca.json +1 -0
  297. package/sandboxels-package/sandboxels-1.13.2/lang/cs.json +1 -0
  298. package/sandboxels-package/sandboxels-1.13.2/lang/da.json +1 -0
  299. package/sandboxels-package/sandboxels-1.13.2/lang/de.json +1 -0
  300. package/sandboxels-package/sandboxels-1.13.2/lang/el.json +1 -0
  301. package/sandboxels-package/sandboxels-1.13.2/lang/en.json +1 -0
  302. package/sandboxels-package/sandboxels-1.13.2/lang/en_au.json +1 -0
  303. package/sandboxels-package/sandboxels-1.13.2/lang/en_ca.json +1 -0
  304. package/sandboxels-package/sandboxels-1.13.2/lang/en_gb.json +1 -0
  305. package/sandboxels-package/sandboxels-1.13.2/lang/es.json +1 -0
  306. package/sandboxels-package/sandboxels-1.13.2/lang/et.json +1 -0
  307. package/sandboxels-package/sandboxels-1.13.2/lang/fi.json +1 -0
  308. package/sandboxels-package/sandboxels-1.13.2/lang/fil.json +1 -0
  309. package/sandboxels-package/sandboxels-1.13.2/lang/fr.json +1 -0
  310. package/sandboxels-package/sandboxels-1.13.2/lang/gen.js +21 -0
  311. package/sandboxels-package/sandboxels-1.13.2/lang/he.json +1 -0
  312. package/sandboxels-package/sandboxels-1.13.2/lang/hu.json +1 -0
  313. package/sandboxels-package/sandboxels-1.13.2/lang/id.json +1 -0
  314. package/sandboxels-package/sandboxels-1.13.2/lang/it.json +1 -0
  315. package/sandboxels-package/sandboxels-1.13.2/lang/ja.json +1 -0
  316. package/sandboxels-package/sandboxels-1.13.2/lang/ko.json +1 -0
  317. package/sandboxels-package/sandboxels-1.13.2/lang/la.json +1 -0
  318. package/sandboxels-package/sandboxels-1.13.2/lang/ne.json +1 -0
  319. package/sandboxels-package/sandboxels-1.13.2/lang/nl.json +1 -0
  320. package/sandboxels-package/sandboxels-1.13.2/lang/no.json +1 -0
  321. package/sandboxels-package/sandboxels-1.13.2/lang/pl.json +1 -0
  322. package/sandboxels-package/sandboxels-1.13.2/lang/pt.json +1 -0
  323. package/sandboxels-package/sandboxels-1.13.2/lang/pt_br.json +1 -0
  324. package/sandboxels-package/sandboxels-1.13.2/lang/qha.json +1 -0
  325. package/sandboxels-package/sandboxels-1.13.2/lang/qvp.json +1 -0
  326. package/sandboxels-package/sandboxels-1.13.2/lang/ro.json +1 -0
  327. package/sandboxels-package/sandboxels-1.13.2/lang/ru.json +1 -0
  328. package/sandboxels-package/sandboxels-1.13.2/lang/sr.json +1 -0
  329. package/sandboxels-package/sandboxels-1.13.2/lang/sv.json +1 -0
  330. package/sandboxels-package/sandboxels-1.13.2/lang/template.json +677 -0
  331. package/sandboxels-package/sandboxels-1.13.2/lang/th.json +1 -0
  332. package/sandboxels-package/sandboxels-1.13.2/lang/tok.json +1 -0
  333. package/sandboxels-package/sandboxels-1.13.2/lang/tok_old.json +543 -0
  334. package/sandboxels-package/sandboxels-1.13.2/lang/tr.json +1 -0
  335. package/sandboxels-package/sandboxels-1.13.2/lang/uk.json +1 -0
  336. package/sandboxels-package/sandboxels-1.13.2/lang/vi.json +1 -0
  337. package/sandboxels-package/sandboxels-1.13.2/lang/xem.json +1 -0
  338. package/sandboxels-package/sandboxels-1.13.2/lang/zh_cn.json +1 -0
  339. package/sandboxels-package/sandboxels-1.13.2/lang/zh_hant.json +1 -0
  340. package/sandboxels-package/sandboxels-1.13.2/license.txt +48 -0
  341. package/sandboxels-package/sandboxels-1.13.2/lite.html +1599 -0
  342. package/sandboxels-package/sandboxels-1.13.2/manifest.json +33 -0
  343. package/sandboxels-package/sandboxels-1.13.2/media.html +134 -0
  344. package/sandboxels-package/sandboxels-1.13.2/mobile-use.html +110 -0
  345. package/sandboxels-package/sandboxels-1.13.2/mod-list.html +535 -0
  346. package/sandboxels-package/sandboxels-1.13.2/mods/1.10example.js +118 -0
  347. package/sandboxels-package/sandboxels-1.13.2/mods/10kelements.js +172 -0
  348. package/sandboxels-package/sandboxels-1.13.2/mods/3pms_mod.js +144 -0
  349. package/sandboxels-package/sandboxels-1.13.2/mods/AnonymousWorldgenLibrary.js +55 -0
  350. package/sandboxels-package/sandboxels-1.13.2/mods/Batteries.js +288 -0
  351. package/sandboxels-package/sandboxels-1.13.2/mods/BlueStuff.js +681 -0
  352. package/sandboxels-package/sandboxels-1.13.2/mods/CandyCanes.js +15 -0
  353. package/sandboxels-package/sandboxels-1.13.2/mods/CandyCorn.js +8 -0
  354. package/sandboxels-package/sandboxels-1.13.2/mods/CherrySoda.js +77 -0
  355. package/sandboxels-package/sandboxels-1.13.2/mods/EasterEggs.js +1 -0
  356. package/sandboxels-package/sandboxels-1.13.2/mods/ExtraMachines.js +2338 -0
  357. package/sandboxels-package/sandboxels-1.13.2/mods/FoodFoodFood.js +114 -0
  358. package/sandboxels-package/sandboxels-1.13.2/mods/Gemstones.js +80 -0
  359. package/sandboxels-package/sandboxels-1.13.2/mods/GrapeSoda.js +141 -0
  360. package/sandboxels-package/sandboxels-1.13.2/mods/Humanitize.js +959 -0
  361. package/sandboxels-package/sandboxels-1.13.2/mods/Inators.js +108 -0
  362. package/sandboxels-package/sandboxels-1.13.2/mods/IreThings.js +169 -0
  363. package/sandboxels-package/sandboxels-1.13.2/mods/Lab.js +397 -0
  364. package/sandboxels-package/sandboxels-1.13.2/mods/LimesAdditions.js +401 -0
  365. package/sandboxels-package/sandboxels-1.13.2/mods/MarkusFoodMod.js +334 -0
  366. package/sandboxels-package/sandboxels-1.13.2/mods/Mucho_frio_y_Calor.js +16 -0
  367. package/sandboxels-package/sandboxels-1.13.2/mods/Natural_disasters.js +207 -0
  368. package/sandboxels-package/sandboxels-1.13.2/mods/Neutronium Mod.js +1228 -0
  369. package/sandboxels-package/sandboxels-1.13.2/mods/PRNGworldgenlib.js +526 -0
  370. package/sandboxels-package/sandboxels-1.13.2/mods/Quicksand_one.js +1355 -0
  371. package/sandboxels-package/sandboxels-1.13.2/mods/RF_transmitter_receiver.js +62 -0
  372. package/sandboxels-package/sandboxels-1.13.2/mods/Random_quicksands.js +932 -0
  373. package/sandboxels-package/sandboxels-1.13.2/mods/Science_mod.js +1791 -0
  374. package/sandboxels-package/sandboxels-1.13.2/mods/Shroomboxels.js +71 -0
  375. package/sandboxels-package/sandboxels-1.13.2/mods/SuperASAX_Funny_Mod.js +297 -0
  376. package/sandboxels-package/sandboxels-1.13.2/mods/Temperature+.js +47 -0
  377. package/sandboxels-package/sandboxels-1.13.2/mods/Thread.js +180 -0
  378. package/sandboxels-package/sandboxels-1.13.2/mods/UAMM.js +502 -0
  379. package/sandboxels-package/sandboxels-1.13.2/mods/Ultra_Steel.js +61 -0
  380. package/sandboxels-package/sandboxels-1.13.2/mods/UwUify.js +87 -0
  381. package/sandboxels-package/sandboxels-1.13.2/mods/VCR_OSD_MONO.ttf +0 -0
  382. package/sandboxels-package/sandboxels-1.13.2/mods/Vegan.js +255 -0
  383. package/sandboxels-package/sandboxels-1.13.2/mods/WhisperingTheory.js +213 -0
  384. package/sandboxels-package/sandboxels-1.13.2/mods/aChefsDream.js +8159 -0
  385. package/sandboxels-package/sandboxels-1.13.2/mods/aChefsDream2.js +815 -0
  386. package/sandboxels-package/sandboxels-1.13.2/mods/aChefsDream_beta.js +12 -0
  387. package/sandboxels-package/sandboxels-1.13.2/mods/aScientistsWish.js +1195 -0
  388. package/sandboxels-package/sandboxels-1.13.2/mods/a_bundle_of_tests.js +417 -0
  389. package/sandboxels-package/sandboxels-1.13.2/mods/a_mod_by_alice.js +46043 -0
  390. package/sandboxels-package/sandboxels-1.13.2/mods/acid_and_shapes.js +1 -0
  391. package/sandboxels-package/sandboxels-1.13.2/mods/adaceythings.js +343 -0
  392. package/sandboxels-package/sandboxels-1.13.2/mods/adjustablepixelsize.js +28 -0
  393. package/sandboxels-package/sandboxels-1.13.2/mods/advanced_colonies.js +146 -0
  394. package/sandboxels-package/sandboxels-1.13.2/mods/advancedbugs.js +37 -0
  395. package/sandboxels-package/sandboxels-1.13.2/mods/aircrafts.js +260 -0
  396. package/sandboxels-package/sandboxels-1.13.2/mods/alchem.js +372 -0
  397. package/sandboxels-package/sandboxels-1.13.2/mods/alchemy.js +69 -0
  398. package/sandboxels-package/sandboxels-1.13.2/mods/alcohol.js +113 -0
  399. package/sandboxels-package/sandboxels-1.13.2/mods/alkahest.js +33 -0
  400. package/sandboxels-package/sandboxels-1.13.2/mods/alkali_metal.js +308 -0
  401. package/sandboxels-package/sandboxels-1.13.2/mods/all_around_fillers.js +73 -0
  402. package/sandboxels-package/sandboxels-1.13.2/mods/all_stain.js +7 -0
  403. package/sandboxels-package/sandboxels-1.13.2/mods/allliquids.js +24 -0
  404. package/sandboxels-package/sandboxels-1.13.2/mods/amogus.js +69 -0
  405. package/sandboxels-package/sandboxels-1.13.2/mods/anmm.js +566 -0
  406. package/sandboxels-package/sandboxels-1.13.2/mods/ants.js +137 -0
  407. package/sandboxels-package/sandboxels-1.13.2/mods/apioforms_pre.js +238 -0
  408. package/sandboxels-package/sandboxels-1.13.2/mods/applestuff.js +80 -0
  409. package/sandboxels-package/sandboxels-1.13.2/mods/asciiboxels.js +231 -0
  410. package/sandboxels-package/sandboxels-1.13.2/mods/aussieAdditions.js +123 -0
  411. package/sandboxels-package/sandboxels-1.13.2/mods/baby.js +65 -0
  412. package/sandboxels-package/sandboxels-1.13.2/mods/background_changer.js +59 -0
  413. package/sandboxels-package/sandboxels-1.13.2/mods/bacteria_mod.js +121 -0
  414. package/sandboxels-package/sandboxels-1.13.2/mods/bananas.js +543 -0
  415. package/sandboxels-package/sandboxels-1.13.2/mods/barf_mod.js +42 -0
  416. package/sandboxels-package/sandboxels-1.13.2/mods/barista.js +209 -0
  417. package/sandboxels-package/sandboxels-1.13.2/mods/bere.js +85 -0
  418. package/sandboxels-package/sandboxels-1.13.2/mods/betterMenuScreens.js +279 -0
  419. package/sandboxels-package/sandboxels-1.13.2/mods/betterModManager.js +174 -0
  420. package/sandboxels-package/sandboxels-1.13.2/mods/betterSettings.js +304 -0
  421. package/sandboxels-package/sandboxels-1.13.2/mods/betterStats.js +55 -0
  422. package/sandboxels-package/sandboxels-1.13.2/mods/better_smooth_water.js +6 -0
  423. package/sandboxels-package/sandboxels-1.13.2/mods/betterelec.js +51 -0
  424. package/sandboxels-package/sandboxels-1.13.2/mods/bettergraygoo.js +1 -0
  425. package/sandboxels-package/sandboxels-1.13.2/mods/bettermetalscrap.js +37 -0
  426. package/sandboxels-package/sandboxels-1.13.2/mods/bf.js +394 -0
  427. package/sandboxels-package/sandboxels-1.13.2/mods/bfdi.js +145 -0
  428. package/sandboxels-package/sandboxels-1.13.2/mods/bigger_star_spawners.js +198 -0
  429. package/sandboxels-package/sandboxels-1.13.2/mods/biology.js +8694 -0
  430. package/sandboxels-package/sandboxels-1.13.2/mods/bioooze_and_pyrogens.js +264 -0
  431. package/sandboxels-package/sandboxels-1.13.2/mods/black_hole.js +43 -0
  432. package/sandboxels-package/sandboxels-1.13.2/mods/blocks.js +164 -0
  433. package/sandboxels-package/sandboxels-1.13.2/mods/boiling_things.js +540 -0
  434. package/sandboxels-package/sandboxels-1.13.2/mods/bojithekings_mod.js +377 -0
  435. package/sandboxels-package/sandboxels-1.13.2/mods/boompaste.js +76 -0
  436. package/sandboxels-package/sandboxels-1.13.2/mods/borders.js +76 -0
  437. package/sandboxels-package/sandboxels-1.13.2/mods/bouncing_balls.js +703 -0
  438. package/sandboxels-package/sandboxels-1.13.2/mods/broken_mod_test.js +1 -0
  439. package/sandboxels-package/sandboxels-1.13.2/mods/building.js +154 -0
  440. package/sandboxels-package/sandboxels-1.13.2/mods/buildingreplicator.js +210 -0
  441. package/sandboxels-package/sandboxels-1.13.2/mods/c_fighter_jet.js +449 -0
  442. package/sandboxels-package/sandboxels-1.13.2/mods/cannibal_cooking.js +620 -0
  443. package/sandboxels-package/sandboxels-1.13.2/mods/cash_n_more.js +58 -0
  444. package/sandboxels-package/sandboxels-1.13.2/mods/cat.js +100 -0
  445. package/sandboxels-package/sandboxels-1.13.2/mods/cells.js +376 -0
  446. package/sandboxels-package/sandboxels-1.13.2/mods/chalcopyrite.js +124 -0
  447. package/sandboxels-package/sandboxels-1.13.2/mods/chalk.js +499 -0
  448. package/sandboxels-package/sandboxels-1.13.2/mods/change.js +58 -0
  449. package/sandboxels-package/sandboxels-1.13.2/mods/changePixelDebug.js +9 -0
  450. package/sandboxels-package/sandboxels-1.13.2/mods/changeTempReactionParameter.js +73 -0
  451. package/sandboxels-package/sandboxels-1.13.2/mods/chaos.js +32 -0
  452. package/sandboxels-package/sandboxels-1.13.2/mods/charsonsmodbeta.js +494 -0
  453. package/sandboxels-package/sandboxels-1.13.2/mods/charsonsmoduno.js +2116 -0
  454. package/sandboxels-package/sandboxels-1.13.2/mods/chem.js +7877 -0
  455. package/sandboxels-package/sandboxels-1.13.2/mods/chemFormula.js +44 -0
  456. package/sandboxels-package/sandboxels-1.13.2/mods/chemFormulas.json +549 -0
  457. package/sandboxels-package/sandboxels-1.13.2/mods/cherries.js +543 -0
  458. package/sandboxels-package/sandboxels-1.13.2/mods/chess.js +1463 -0
  459. package/sandboxels-package/sandboxels-1.13.2/mods/children.js +14 -0
  460. package/sandboxels-package/sandboxels-1.13.2/mods/circuitcore.js +1914 -0
  461. package/sandboxels-package/sandboxels-1.13.2/mods/circuitcore_displays.js +157 -0
  462. package/sandboxels-package/sandboxels-1.13.2/mods/citybuilding.js +193 -0
  463. package/sandboxels-package/sandboxels-1.13.2/mods/classic_explosives.js +62 -0
  464. package/sandboxels-package/sandboxels-1.13.2/mods/classic_textures.js +196 -0
  465. package/sandboxels-package/sandboxels-1.13.2/mods/clf3.js +86 -0
  466. package/sandboxels-package/sandboxels-1.13.2/mods/clone_liquid.js +22 -0
  467. package/sandboxels-package/sandboxels-1.13.2/mods/clouds.js +103 -0
  468. package/sandboxels-package/sandboxels-1.13.2/mods/cmur.js +5195 -0
  469. package/sandboxels-package/sandboxels-1.13.2/mods/code_library.js +1827 -0
  470. package/sandboxels-package/sandboxels-1.13.2/mods/coffee.js +228 -0
  471. package/sandboxels-package/sandboxels-1.13.2/mods/cold_liquid_explosion.js +20 -0
  472. package/sandboxels-package/sandboxels-1.13.2/mods/cold_opposites.js +66 -0
  473. package/sandboxels-package/sandboxels-1.13.2/mods/coldblooded.js +729 -0
  474. package/sandboxels-package/sandboxels-1.13.2/mods/collab_mod.js +253 -0
  475. package/sandboxels-package/sandboxels-1.13.2/mods/colonies.js +574 -0
  476. package/sandboxels-package/sandboxels-1.13.2/mods/colorLED.js +38 -0
  477. package/sandboxels-package/sandboxels-1.13.2/mods/color_everything.js +3 -0
  478. package/sandboxels-package/sandboxels-1.13.2/mods/color_tools.js +297 -0
  479. package/sandboxels-package/sandboxels-1.13.2/mods/colored_lightbulbs.js +44 -0
  480. package/sandboxels-package/sandboxels-1.13.2/mods/combustion.js +416 -0
  481. package/sandboxels-package/sandboxels-1.13.2/mods/community_desserts.js +829 -0
  482. package/sandboxels-package/sandboxels-1.13.2/mods/content.js +131 -0
  483. package/sandboxels-package/sandboxels-1.13.2/mods/controllable_pixel.js +75 -0
  484. package/sandboxels-package/sandboxels-1.13.2/mods/controllable_pixel_test.js +161 -0
  485. package/sandboxels-package/sandboxels-1.13.2/mods/conveyance.js +95 -0
  486. package/sandboxels-package/sandboxels-1.13.2/mods/cooked_apple.js +26 -0
  487. package/sandboxels-package/sandboxels-1.13.2/mods/cookie_clicker.js +943 -0
  488. package/sandboxels-package/sandboxels-1.13.2/mods/cookingnstuff.js +1 -0
  489. package/sandboxels-package/sandboxels-1.13.2/mods/cool_tools.js +35 -0
  490. package/sandboxels-package/sandboxels-1.13.2/mods/copy_canvas.js +9 -0
  491. package/sandboxels-package/sandboxels-1.13.2/mods/copypaste.js +100 -0
  492. package/sandboxels-package/sandboxels-1.13.2/mods/coresbyp.js +90 -0
  493. package/sandboxels-package/sandboxels-1.13.2/mods/cpt_alt.js +241 -0
  494. package/sandboxels-package/sandboxels-1.13.2/mods/crimson.js +424 -0
  495. package/sandboxels-package/sandboxels-1.13.2/mods/cs_expanded.js +31 -0
  496. package/sandboxels-package/sandboxels-1.13.2/mods/cubesstuff.js +3329 -0
  497. package/sandboxels-package/sandboxels-1.13.2/mods/currency.js +246 -0
  498. package/sandboxels-package/sandboxels-1.13.2/mods/cursed_shader_by_jayd.js +90 -0
  499. package/sandboxels-package/sandboxels-1.13.2/mods/cursor.js +3 -0
  500. package/sandboxels-package/sandboxels-1.13.2/mods/cursor_shapes.js +149 -0
  501. package/sandboxels-package/sandboxels-1.13.2/mods/customBackground.js +45 -0
  502. package/sandboxels-package/sandboxels-1.13.2/mods/customexplosion.js +110 -0
  503. package/sandboxels-package/sandboxels-1.13.2/mods/customtemptools.js +50 -0
  504. package/sandboxels-package/sandboxels-1.13.2/mods/dalgonacandy.js +41 -0
  505. package/sandboxels-package/sandboxels-1.13.2/mods/datawire.js +238 -0
  506. package/sandboxels-package/sandboxels-1.13.2/mods/date_test.js +268 -0
  507. package/sandboxels-package/sandboxels-1.13.2/mods/death_count.js +35 -0
  508. package/sandboxels-package/sandboxels-1.13.2/mods/debris.js +75 -0
  509. package/sandboxels-package/sandboxels-1.13.2/mods/debrisable.js +1136 -0
  510. package/sandboxels-package/sandboxels-1.13.2/mods/debugRework.js +169 -0
  511. package/sandboxels-package/sandboxels-1.13.2/mods/delete_all_of_element.js +17 -0
  512. package/sandboxels-package/sandboxels-1.13.2/mods/deneme.js +70 -0
  513. package/sandboxels-package/sandboxels-1.13.2/mods/dependency_test.js +13 -0
  514. package/sandboxels-package/sandboxels-1.13.2/mods/descriptions.js +17 -0
  515. package/sandboxels-package/sandboxels-1.13.2/mods/devsnacks.js +193 -0
  516. package/sandboxels-package/sandboxels-1.13.2/mods/devtests.js +278 -0
  517. package/sandboxels-package/sandboxels-1.13.2/mods/discord_port.js +36 -0
  518. package/sandboxels-package/sandboxels-1.13.2/mods/doElectricity changes.js +55 -0
  519. package/sandboxels-package/sandboxels-1.13.2/mods/dogs.js +85 -0
  520. package/sandboxels-package/sandboxels-1.13.2/mods/doom.js +935 -0
  521. package/sandboxels-package/sandboxels-1.13.2/mods/doomsday.js +56 -0
  522. package/sandboxels-package/sandboxels-1.13.2/mods/drawPixels_change_test.js +39 -0
  523. package/sandboxels-package/sandboxels-1.13.2/mods/dried_food.js +38 -0
  524. package/sandboxels-package/sandboxels-1.13.2/mods/drill.js +261 -0
  525. package/sandboxels-package/sandboxels-1.13.2/mods/drills.js +760 -0
  526. package/sandboxels-package/sandboxels-1.13.2/mods/easysurvival.js +917 -0
  527. package/sandboxels-package/sandboxels-1.13.2/mods/edible_everything.js +7 -0
  528. package/sandboxels-package/sandboxels-1.13.2/mods/editTools.js +608 -0
  529. package/sandboxels-package/sandboxels-1.13.2/mods/eklegems.js +1313 -0
  530. package/sandboxels-package/sandboxels-1.13.2/mods/electricityTest.js +42 -0
  531. package/sandboxels-package/sandboxels-1.13.2/mods/elem3.js +352316 -0
  532. package/sandboxels-package/sandboxels-1.13.2/mods/elementEraser.js +40 -0
  533. package/sandboxels-package/sandboxels-1.13.2/mods/element_UI.js +140 -0
  534. package/sandboxels-package/sandboxels-1.13.2/mods/elementreplacer.js +12 -0
  535. package/sandboxels-package/sandboxels-1.13.2/mods/elementsManager.js +1212 -0
  536. package/sandboxels-package/sandboxels-1.13.2/mods/empty.js +7 -0
  537. package/sandboxels-package/sandboxels-1.13.2/mods/evenmoretemptools.js +42 -0
  538. package/sandboxels-package/sandboxels-1.13.2/mods/example_mod.js +89 -0
  539. package/sandboxels-package/sandboxels-1.13.2/mods/example_mod_old.js +84 -0
  540. package/sandboxels-package/sandboxels-1.13.2/mods/exoplanet.js +220 -0
  541. package/sandboxels-package/sandboxels-1.13.2/mods/explodeAtPlus.js +138 -0
  542. package/sandboxels-package/sandboxels-1.13.2/mods/explosionsound.js +19 -0
  543. package/sandboxels-package/sandboxels-1.13.2/mods/extra_element_info.js +79 -0
  544. package/sandboxels-package/sandboxels-1.13.2/mods/extrasaveslots.js +42 -0
  545. package/sandboxels-package/sandboxels-1.13.2/mods/fans.js +204 -0
  546. package/sandboxels-package/sandboxels-1.13.2/mods/fantastic_creatures.js +198 -0
  547. package/sandboxels-package/sandboxels-1.13.2/mods/fantasy_elements.js +800 -0
  548. package/sandboxels-package/sandboxels-1.13.2/mods/fast_lightmap.js +339 -0
  549. package/sandboxels-package/sandboxels-1.13.2/mods/fey_and_more.js +1678 -0
  550. package/sandboxels-package/sandboxels-1.13.2/mods/fill_script.js +42 -0
  551. package/sandboxels-package/sandboxels-1.13.2/mods/find.js +115 -0
  552. package/sandboxels-package/sandboxels-1.13.2/mods/fine_tuned_cloner.js +121 -0
  553. package/sandboxels-package/sandboxels-1.13.2/mods/fire_extinguisher.js +128 -0
  554. package/sandboxels-package/sandboxels-1.13.2/mods/fire_mod.js +565 -0
  555. package/sandboxels-package/sandboxels-1.13.2/mods/fire_slime.js +68 -0
  556. package/sandboxels-package/sandboxels-1.13.2/mods/fishin.js +519 -0
  557. package/sandboxels-package/sandboxels-1.13.2/mods/fission.js +68 -0
  558. package/sandboxels-package/sandboxels-1.13.2/mods/fission_physics.js +86 -0
  559. package/sandboxels-package/sandboxels-1.13.2/mods/fiveys_stuff.js +119 -0
  560. package/sandboxels-package/sandboxels-1.13.2/mods/flesh_infection.js +645 -0
  561. package/sandboxels-package/sandboxels-1.13.2/mods/flipflop.js +36 -0
  562. package/sandboxels-package/sandboxels-1.13.2/mods/flowers_and_forests.js +468 -0
  563. package/sandboxels-package/sandboxels-1.13.2/mods/flying_fish.js +49 -0
  564. package/sandboxels-package/sandboxels-1.13.2/mods/food_mods.js +15 -0
  565. package/sandboxels-package/sandboxels-1.13.2/mods/foodgalore +100 -0
  566. package/sandboxels-package/sandboxels-1.13.2/mods/fools+.js +299 -0
  567. package/sandboxels-package/sandboxels-1.13.2/mods/fools.js +99 -0
  568. package/sandboxels-package/sandboxels-1.13.2/mods/fools24.js +842 -0
  569. package/sandboxels-package/sandboxels-1.13.2/mods/fools25.js +350 -0
  570. package/sandboxels-package/sandboxels-1.13.2/mods/fossils.js +676 -0
  571. package/sandboxels-package/sandboxels-1.13.2/mods/fractals.js +156 -0
  572. package/sandboxels-package/sandboxels-1.13.2/mods/franklin.js +44 -0
  573. package/sandboxels-package/sandboxels-1.13.2/mods/freeTPS.js +19 -0
  574. package/sandboxels-package/sandboxels-1.13.2/mods/fueled_generators.js +131 -0
  575. package/sandboxels-package/sandboxels-1.13.2/mods/funny elements 2022-11-15.js +84 -0
  576. package/sandboxels-package/sandboxels-1.13.2/mods/funny_liquid.js +618 -0
  577. package/sandboxels-package/sandboxels-1.13.2/mods/funny_liquid_2.js +322 -0
  578. package/sandboxels-package/sandboxels-1.13.2/mods/funny_liquid_3.js +254 -0
  579. package/sandboxels-package/sandboxels-1.13.2/mods/funny_solid.js +163 -0
  580. package/sandboxels-package/sandboxels-1.13.2/mods/funnynames.js +320 -0
  581. package/sandboxels-package/sandboxels-1.13.2/mods/fwibblen.js +69 -0
  582. package/sandboxels-package/sandboxels-1.13.2/mods/gambling.js +94 -0
  583. package/sandboxels-package/sandboxels-1.13.2/mods/gameOfLife.js +83 -0
  584. package/sandboxels-package/sandboxels-1.13.2/mods/garn47.js +325 -0
  585. package/sandboxels-package/sandboxels-1.13.2/mods/gasdecay.js +31 -0
  586. package/sandboxels-package/sandboxels-1.13.2/mods/generative_mods.js +2479 -0
  587. package/sandboxels-package/sandboxels-1.13.2/mods/generator_prompt.js +166 -0
  588. package/sandboxels-package/sandboxels-1.13.2/mods/genetics.js +4038 -0
  589. package/sandboxels-package/sandboxels-1.13.2/mods/glenn_gases.js +411 -0
  590. package/sandboxels-package/sandboxels-1.13.2/mods/glow.js +130 -0
  591. package/sandboxels-package/sandboxels-1.13.2/mods/gradient_background_support.js +21 -0
  592. package/sandboxels-package/sandboxels-1.13.2/mods/graphite.js +460 -0
  593. package/sandboxels-package/sandboxels-1.13.2/mods/grav_mudstones.js +382 -0
  594. package/sandboxels-package/sandboxels-1.13.2/mods/gravity.js +40 -0
  595. package/sandboxels-package/sandboxels-1.13.2/mods/gravity_test.js +51 -0
  596. package/sandboxels-package/sandboxels-1.13.2/mods/greenitemsandmore.js +183 -0
  597. package/sandboxels-package/sandboxels-1.13.2/mods/guided_rocket.js +106 -0
  598. package/sandboxels-package/sandboxels-1.13.2/mods/halogen.js +384 -0
  599. package/sandboxels-package/sandboxels-1.13.2/mods/haseulite.js +1673 -0
  600. package/sandboxels-package/sandboxels-1.13.2/mods/heatglow.js +74 -0
  601. package/sandboxels-package/sandboxels-1.13.2/mods/heatshield.js +30 -0
  602. package/sandboxels-package/sandboxels-1.13.2/mods/hexagon.js +45 -0
  603. package/sandboxels-package/sandboxels-1.13.2/mods/hidden_ground.js +42 -0
  604. package/sandboxels-package/sandboxels-1.13.2/mods/hideandshowtools.js +18 -0
  605. package/sandboxels-package/sandboxels-1.13.2/mods/human_edit.js +725 -0
  606. package/sandboxels-package/sandboxels-1.13.2/mods/human_friendly_design.js +899 -0
  607. package/sandboxels-package/sandboxels-1.13.2/mods/humans.js +203 -0
  608. package/sandboxels-package/sandboxels-1.13.2/mods/hydroid.js +224 -0
  609. package/sandboxels-package/sandboxels-1.13.2/mods/icb.js +32 -0
  610. package/sandboxels-package/sandboxels-1.13.2/mods/iean.js +135 -0
  611. package/sandboxels-package/sandboxels-1.13.2/mods/immune.js +199 -0
  612. package/sandboxels-package/sandboxels-1.13.2/mods/incinerators.js +29 -0
  613. package/sandboxels-package/sandboxels-1.13.2/mods/industry.js +308 -0
  614. package/sandboxels-package/sandboxels-1.13.2/mods/infLiqLight.js +8 -0
  615. package/sandboxels-package/sandboxels-1.13.2/mods/injector.js +450 -0
  616. package/sandboxels-package/sandboxels-1.13.2/mods/insane_random_events.js +123 -0
  617. package/sandboxels-package/sandboxels-1.13.2/mods/invertscroll.js +8 -0
  618. package/sandboxels-package/sandboxels-1.13.2/mods/invisible_things.js +83 -0
  619. package/sandboxels-package/sandboxels-1.13.2/mods/iocalfaeus_clones.js +100 -0
  620. package/sandboxels-package/sandboxels-1.13.2/mods/jaydsfunctions.js +187 -0
  621. package/sandboxels-package/sandboxels-1.13.2/mods/jaydsmods.js +89 -0
  622. package/sandboxels-package/sandboxels-1.13.2/mods/jaydstuff.js +783 -0
  623. package/sandboxels-package/sandboxels-1.13.2/mods/junction.js +50 -0
  624. package/sandboxels-package/sandboxels-1.13.2/mods/ketchup_mod.js +526 -0
  625. package/sandboxels-package/sandboxels-1.13.2/mods/kopalsBar.js +175 -0
  626. package/sandboxels-package/sandboxels-1.13.2/mods/kopalstuff.js +541 -0
  627. package/sandboxels-package/sandboxels-1.13.2/mods/lactose_intolerance_and_celiac.js +18 -0
  628. package/sandboxels-package/sandboxels-1.13.2/mods/laetium.js +328 -0
  629. package/sandboxels-package/sandboxels-1.13.2/mods/lattice_filler.js +29 -0
  630. package/sandboxels-package/sandboxels-1.13.2/mods/lemonade.js +71 -0
  631. package/sandboxels-package/sandboxels-1.13.2/mods/libhooktick.js +49 -0
  632. package/sandboxels-package/sandboxels-1.13.2/mods/libpacman-v1.js +61 -0
  633. package/sandboxels-package/sandboxels-1.13.2/mods/libpixeltracking.js +29 -0
  634. package/sandboxels-package/sandboxels-1.13.2/mods/library_test.js +5 -0
  635. package/sandboxels-package/sandboxels-1.13.2/mods/life_eater.js +169 -0
  636. package/sandboxels-package/sandboxels-1.13.2/mods/light.js +218 -0
  637. package/sandboxels-package/sandboxels-1.13.2/mods/lighting_test.js +79 -0
  638. package/sandboxels-package/sandboxels-1.13.2/mods/lightmap.js +382 -0
  639. package/sandboxels-package/sandboxels-1.13.2/mods/limewater.js +75 -0
  640. package/sandboxels-package/sandboxels-1.13.2/mods/liquid_energy.js +294 -0
  641. package/sandboxels-package/sandboxels-1.13.2/mods/liquid_mixing.js +184 -0
  642. package/sandboxels-package/sandboxels-1.13.2/mods/liquid_void.js +29 -0
  643. package/sandboxels-package/sandboxels-1.13.2/mods/littlejohnny.js +72 -0
  644. package/sandboxels-package/sandboxels-1.13.2/mods/lizard_mod.js +91 -0
  645. package/sandboxels-package/sandboxels-1.13.2/mods/logicgates.js +482 -0
  646. package/sandboxels-package/sandboxels-1.13.2/mods/lone_urea.js +69 -0
  647. package/sandboxels-package/sandboxels-1.13.2/mods/lost_souls.js +177 -0
  648. package/sandboxels-package/sandboxels-1.13.2/mods/lye.js +34 -0
  649. package/sandboxels-package/sandboxels-1.13.2/mods/machines.js +293 -0
  650. package/sandboxels-package/sandboxels-1.13.2/mods/manyMoreThemes.js +67 -0
  651. package/sandboxels-package/sandboxels-1.13.2/mods/mars.js +473 -0
  652. package/sandboxels-package/sandboxels-1.13.2/mods/maxColorOffset.js +54 -0
  653. package/sandboxels-package/sandboxels-1.13.2/mods/maze.js +71 -0
  654. package/sandboxels-package/sandboxels-1.13.2/mods/meat_rockets.js +70 -0
  655. package/sandboxels-package/sandboxels-1.13.2/mods/memelists.js +17 -0
  656. package/sandboxels-package/sandboxels-1.13.2/mods/metals.js +791 -0
  657. package/sandboxels-package/sandboxels-1.13.2/mods/minecraft.js +818 -0
  658. package/sandboxels-package/sandboxels-1.13.2/mods/minesweeper.js +100 -0
  659. package/sandboxels-package/sandboxels-1.13.2/mods/miscellaneous_elements.js +278 -0
  660. package/sandboxels-package/sandboxels-1.13.2/mods/miscible_psoup_and_birthpool.js +7 -0
  661. package/sandboxels-package/sandboxels-1.13.2/mods/mix.js +65 -0
  662. package/sandboxels-package/sandboxels-1.13.2/mods/mixture.js +714 -0
  663. package/sandboxels-package/sandboxels-1.13.2/mods/mixtureII.js +440 -0
  664. package/sandboxels-package/sandboxels-1.13.2/mods/mjsstuff.js +233 -0
  665. package/sandboxels-package/sandboxels-1.13.2/mods/mobile_keybinds.js +33 -0
  666. package/sandboxels-package/sandboxels-1.13.2/mods/mobile_shift.js +336 -0
  667. package/sandboxels-package/sandboxels-1.13.2/mods/mobs.js +5147 -0
  668. package/sandboxels-package/sandboxels-1.13.2/mods/mod_for_mnem.js +1 -0
  669. package/sandboxels-package/sandboxels-1.13.2/mods/modlangs.js +53 -0
  670. package/sandboxels-package/sandboxels-1.13.2/mods/moreViews.js +473 -0
  671. package/sandboxels-package/sandboxels-1.13.2/mods/more_art_states.js +89 -0
  672. package/sandboxels-package/sandboxels-1.13.2/mods/more_breaking.js +189 -0
  673. package/sandboxels-package/sandboxels-1.13.2/mods/more_disasters.js +497 -0
  674. package/sandboxels-package/sandboxels-1.13.2/mods/more_gold.js +115 -0
  675. package/sandboxels-package/sandboxels-1.13.2/mods/morebombs.js +1143 -0
  676. package/sandboxels-package/sandboxels-1.13.2/mods/morechemistry.js +1764 -0
  677. package/sandboxels-package/sandboxels-1.13.2/mods/morefoodsmod.js +154 -0
  678. package/sandboxels-package/sandboxels-1.13.2/mods/moreliquids.js +138 -0
  679. package/sandboxels-package/sandboxels-1.13.2/mods/morepowders.js +335 -0
  680. package/sandboxels-package/sandboxels-1.13.2/mods/moretools.js +68 -0
  681. package/sandboxels-package/sandboxels-1.13.2/mods/moretrees.js +490 -0
  682. package/sandboxels-package/sandboxels-1.13.2/mods/mossstuff.js +2301 -0
  683. package/sandboxels-package/sandboxels-1.13.2/mods/mouthwash.js +23 -0
  684. package/sandboxels-package/sandboxels-1.13.2/mods/move_tools.js +71 -0
  685. package/sandboxels-package/sandboxels-1.13.2/mods/moveable_cubes.js +258 -0
  686. package/sandboxels-package/sandboxels-1.13.2/mods/moving_pixels.js +179 -0
  687. package/sandboxels-package/sandboxels-1.13.2/mods/mush_infection.js +321 -0
  688. package/sandboxels-package/sandboxels-1.13.2/mods/musicalfruit.js +4 -0
  689. package/sandboxels-package/sandboxels-1.13.2/mods/mustard.js +48 -0
  690. package/sandboxels-package/sandboxels-1.13.2/mods/mystic.js +274 -0
  691. package/sandboxels-package/sandboxels-1.13.2/mods/nastystuff.js +57 -0
  692. package/sandboxels-package/sandboxels-1.13.2/mods/nature_Mod.js +1384 -0
  693. package/sandboxels-package/sandboxels-1.13.2/mods/nekonicos_stuff.js +1651 -0
  694. package/sandboxels-package/sandboxels-1.13.2/mods/nested_for_reaction_example.js +19 -0
  695. package/sandboxels-package/sandboxels-1.13.2/mods/nettysaddon.js +48 -0
  696. package/sandboxels-package/sandboxels-1.13.2/mods/neutronium_compressor.js +416 -0
  697. package/sandboxels-package/sandboxels-1.13.2/mods/nicer_flame.js +48 -0
  698. package/sandboxels-package/sandboxels-1.13.2/mods/nirmod.js +296 -0
  699. package/sandboxels-package/sandboxels-1.13.2/mods/nitroglycerin.js +54 -0
  700. package/sandboxels-package/sandboxels-1.13.2/mods/no_blood.js +23 -0
  701. package/sandboxels-package/sandboxels-1.13.2/mods/no_radiation_events.js +3 -0
  702. package/sandboxels-package/sandboxels-1.13.2/mods/no_random_grbs.js +9 -0
  703. package/sandboxels-package/sandboxels-1.13.2/mods/no_scroll.js +5 -0
  704. package/sandboxels-package/sandboxels-1.13.2/mods/noblegas.js +215 -0
  705. package/sandboxels-package/sandboxels-1.13.2/mods/nocancer.js +9 -0
  706. package/sandboxels-package/sandboxels-1.13.2/mods/nocancer2.js +1 -0
  707. package/sandboxels-package/sandboxels-1.13.2/mods/noconfirm.js +1 -0
  708. package/sandboxels-package/sandboxels-1.13.2/mods/nograssgrow.js +6 -0
  709. package/sandboxels-package/sandboxels-1.13.2/mods/noita.js +4895 -0
  710. package/sandboxels-package/sandboxels-1.13.2/mods/noita_demake.js +430 -0
  711. package/sandboxels-package/sandboxels-1.13.2/mods/nopixellimit.js +2 -0
  712. package/sandboxels-package/sandboxels-1.13.2/mods/note_block.js +97 -0
  713. package/sandboxels-package/sandboxels-1.13.2/mods/note_block_advanced.js +628 -0
  714. package/sandboxels-package/sandboxels-1.13.2/mods/nousersthings.js +4081 -0
  715. package/sandboxels-package/sandboxels-1.13.2/mods/nuclear.js +300 -0
  716. package/sandboxels-package/sandboxels-1.13.2/mods/nv7.js +35013 -0
  717. package/sandboxels-package/sandboxels-1.13.2/mods/obsidian.js +51 -0
  718. package/sandboxels-package/sandboxels-1.13.2/mods/occlusion.js +149 -0
  719. package/sandboxels-package/sandboxels-1.13.2/mods/ocean.js +130 -0
  720. package/sandboxels-package/sandboxels-1.13.2/mods/ochem_prerelease.js +774 -0
  721. package/sandboxels-package/sandboxels-1.13.2/mods/oldTooltip.js +23 -0
  722. package/sandboxels-package/sandboxels-1.13.2/mods/oldleds.js +20 -0
  723. package/sandboxels-package/sandboxels-1.13.2/mods/onTryMoveInto.js +85 -0
  724. package/sandboxels-package/sandboxels-1.13.2/mods/onecolor.js +146 -0
  725. package/sandboxels-package/sandboxels-1.13.2/mods/orchidslibrary.js +70 -0
  726. package/sandboxels-package/sandboxels-1.13.2/mods/ores.js +232 -0
  727. package/sandboxels-package/sandboxels-1.13.2/mods/organism.js +915 -0
  728. package/sandboxels-package/sandboxels-1.13.2/mods/oxide.theme.js +46 -0
  729. package/sandboxels-package/sandboxels-1.13.2/mods/page_color.js +35 -0
  730. package/sandboxels-package/sandboxels-1.13.2/mods/paint_event.js +17 -0
  731. package/sandboxels-package/sandboxels-1.13.2/mods/periodic_and_more.js +64 -0
  732. package/sandboxels-package/sandboxels-1.13.2/mods/peta.js +214 -0
  733. package/sandboxels-package/sandboxels-1.13.2/mods/petal_dye.js +40 -0
  734. package/sandboxels-package/sandboxels-1.13.2/mods/pixelResizeTool.js +18 -0
  735. package/sandboxels-package/sandboxels-1.13.2/mods/pizzasstuff.js +2338 -0
  736. package/sandboxels-package/sandboxels-1.13.2/mods/place_all_elements.js +30 -0
  737. package/sandboxels-package/sandboxels-1.13.2/mods/placuchtestthing.js +17 -0
  738. package/sandboxels-package/sandboxels-1.13.2/mods/planet.js +270 -0
  739. package/sandboxels-package/sandboxels-1.13.2/mods/planet_cracker.js +81 -0
  740. package/sandboxels-package/sandboxels-1.13.2/mods/plants.js +1616 -0
  741. package/sandboxels-package/sandboxels-1.13.2/mods/plastic.js +93 -0
  742. package/sandboxels-package/sandboxels-1.13.2/mods/portal.js +120 -0
  743. package/sandboxels-package/sandboxels-1.13.2/mods/potato_chips.js +44 -0
  744. package/sandboxels-package/sandboxels-1.13.2/mods/prairie.js +200 -0
  745. package/sandboxels-package/sandboxels-1.13.2/mods/precisionDrawing.js +58 -0
  746. package/sandboxels-package/sandboxels-1.13.2/mods/pressure.js +223 -0
  747. package/sandboxels-package/sandboxels-1.13.2/mods/pressure_sensitive.js +20 -0
  748. package/sandboxels-package/sandboxels-1.13.2/mods/prideflags.js +307 -0
  749. package/sandboxels-package/sandboxels-1.13.2/mods/primordial_birthpool.js +38 -0
  750. package/sandboxels-package/sandboxels-1.13.2/mods/prompt.js +1215 -0
  751. package/sandboxels-package/sandboxels-1.13.2/mods/prop and prompt variables.js +16 -0
  752. package/sandboxels-package/sandboxels-1.13.2/mods/prop.js +466 -0
  753. package/sandboxels-package/sandboxels-1.13.2/mods/pullers.js +479 -0
  754. package/sandboxels-package/sandboxels-1.13.2/mods/purple_guys_mod.js +3635 -0
  755. package/sandboxels-package/sandboxels-1.13.2/mods/pushers.js +287 -0
  756. package/sandboxels-package/sandboxels-1.13.2/mods/radioactive.js +135 -0
  757. package/sandboxels-package/sandboxels-1.13.2/mods/rainbow_cursor.js +12 -0
  758. package/sandboxels-package/sandboxels-1.13.2/mods/rainbow_tests.js +348 -0
  759. package/sandboxels-package/sandboxels-1.13.2/mods/rainsmod.js +412 -0
  760. package/sandboxels-package/sandboxels-1.13.2/mods/random_elems.js +463 -0
  761. package/sandboxels-package/sandboxels-1.13.2/mods/random_everything.js +7 -0
  762. package/sandboxels-package/sandboxels-1.13.2/mods/random_fixes.js +42 -0
  763. package/sandboxels-package/sandboxels-1.13.2/mods/random_liquids.js +220 -0
  764. package/sandboxels-package/sandboxels-1.13.2/mods/random_rocks.js +164 -0
  765. package/sandboxels-package/sandboxels-1.13.2/mods/random_things.js +69 -0
  766. package/sandboxels-package/sandboxels-1.13.2/mods/randomelements.js +200 -0
  767. package/sandboxels-package/sandboxels-1.13.2/mods/randomness.js +730 -0
  768. package/sandboxels-package/sandboxels-1.13.2/mods/randomness_but_tick.js +1257 -0
  769. package/sandboxels-package/sandboxels-1.13.2/mods/randomness_but_tool.js +26 -0
  770. package/sandboxels-package/sandboxels-1.13.2/mods/ray_cloner.js +150 -0
  771. package/sandboxels-package/sandboxels-1.13.2/mods/rays++.js +60 -0
  772. package/sandboxels-package/sandboxels-1.13.2/mods/rays.js +464 -0
  773. package/sandboxels-package/sandboxels-1.13.2/mods/reactor_supplies_and_others.js +88 -0
  774. package/sandboxels-package/sandboxels-1.13.2/mods/real_light.js +754 -0
  775. package/sandboxels-package/sandboxels-1.13.2/mods/replace.js +79 -0
  776. package/sandboxels-package/sandboxels-1.13.2/mods/replace_all.js +45 -0
  777. package/sandboxels-package/sandboxels-1.13.2/mods/reverse_time.js +421 -0
  778. package/sandboxels-package/sandboxels-1.13.2/mods/rich_grain.js +54 -0
  779. package/sandboxels-package/sandboxels-1.13.2/mods/rising_powders.js +3 -0
  780. package/sandboxels-package/sandboxels-1.13.2/mods/rock_paper_scissors.js +32 -0
  781. package/sandboxels-package/sandboxels-1.13.2/mods/roseyiede.js +363 -0
  782. package/sandboxels-package/sandboxels-1.13.2/mods/rpg.js +1342 -0
  783. package/sandboxels-package/sandboxels-1.13.2/mods/ru_expanded.js +25 -0
  784. package/sandboxels-package/sandboxels-1.13.2/mods/runAfterAutogen and onload restructure.js +1 -0
  785. package/sandboxels-package/sandboxels-1.13.2/mods/runAfterAutogen2.js +56 -0
  786. package/sandboxels-package/sandboxels-1.13.2/mods/sandboxels.js +2501 -0
  787. package/sandboxels-package/sandboxels-1.13.2/mods/saturnsstuff.js +729 -0
  788. package/sandboxels-package/sandboxels-1.13.2/mods/save_loading.js +520 -0
  789. package/sandboxels-package/sandboxels-1.13.2/mods/sbmixup.js +1439 -0
  790. package/sandboxels-package/sandboxels-1.13.2/mods/sbstuff.js +1865 -0
  791. package/sandboxels-package/sandboxels-1.13.2/mods/scenexe.js +770 -0
  792. package/sandboxels-package/sandboxels-1.13.2/mods/schematics.js +214 -0
  793. package/sandboxels-package/sandboxels-1.13.2/mods/scp.js +7831 -0
  794. package/sandboxels-package/sandboxels-1.13.2/mods/selective_paint.js +60 -0
  795. package/sandboxels-package/sandboxels-1.13.2/mods/sensitive.js +20 -0
  796. package/sandboxels-package/sandboxels-1.13.2/mods/shade.js +46 -0
  797. package/sandboxels-package/sandboxels-1.13.2/mods/shader_by_jayd.js +168 -0
  798. package/sandboxels-package/sandboxels-1.13.2/mods/shipstuff.js +198 -0
  799. package/sandboxels-package/sandboxels-1.13.2/mods/singleColor.js +1 -0
  800. package/sandboxels-package/sandboxels-1.13.2/mods/single_humans.js +147 -0
  801. package/sandboxels-package/sandboxels-1.13.2/mods/sky.js +141 -0
  802. package/sandboxels-package/sandboxels-1.13.2/mods/slag_fix.js +25 -0
  803. package/sandboxels-package/sandboxels-1.13.2/mods/smooth_water.js +6 -0
  804. package/sandboxels-package/sandboxels-1.13.2/mods/solid_rock.js +74 -0
  805. package/sandboxels-package/sandboxels-1.13.2/mods/solidcolor.js +146 -0
  806. package/sandboxels-package/sandboxels-1.13.2/mods/solubility.js +287 -0
  807. package/sandboxels-package/sandboxels-1.13.2/mods/some_tf_liquids.js +358 -0
  808. package/sandboxels-package/sandboxels-1.13.2/mods/souls.js +163 -0
  809. package/sandboxels-package/sandboxels-1.13.2/mods/soups.js +104 -0
  810. package/sandboxels-package/sandboxels-1.13.2/mods/spaceship.js +138 -0
  811. package/sandboxels-package/sandboxels-1.13.2/mods/special_property_library.js +155 -0
  812. package/sandboxels-package/sandboxels-1.13.2/mods/sponge_edit.js +76 -0
  813. package/sandboxels-package/sandboxels-1.13.2/mods/sports_beta.js +69 -0
  814. package/sandboxels-package/sandboxels-1.13.2/mods/spouts.js +715 -0
  815. package/sandboxels-package/sandboxels-1.13.2/mods/spring.js +283 -0
  816. package/sandboxels-package/sandboxels-1.13.2/mods/stainless_steel.js +126 -0
  817. package/sandboxels-package/sandboxels-1.13.2/mods/star_wars.js +70 -0
  818. package/sandboxels-package/sandboxels-1.13.2/mods/state_voids.js +347 -0
  819. package/sandboxels-package/sandboxels-1.13.2/mods/static.js +182 -0
  820. package/sandboxels-package/sandboxels-1.13.2/mods/stickyslime.js +3 -0
  821. package/sandboxels-package/sandboxels-1.13.2/mods/stickystuff.js +59 -0
  822. package/sandboxels-package/sandboxels-1.13.2/mods/stormlib.js +99 -0
  823. package/sandboxels-package/sandboxels-1.13.2/mods/stripe_paint.js +110 -0
  824. package/sandboxels-package/sandboxels-1.13.2/mods/structure_test.js +755 -0
  825. package/sandboxels-package/sandboxels-1.13.2/mods/sturdierpowders.js +595 -0
  826. package/sandboxels-package/sandboxels-1.13.2/mods/subspace.js +46 -0
  827. package/sandboxels-package/sandboxels-1.13.2/mods/survival.js +499 -0
  828. package/sandboxels-package/sandboxels-1.13.2/mods/survivalhack.js +500 -0
  829. package/sandboxels-package/sandboxels-1.13.2/mods/sus.js +92 -0
  830. package/sandboxels-package/sandboxels-1.13.2/mods/switches.js +53 -0
  831. package/sandboxels-package/sandboxels-1.13.2/mods/talismanadditions.js +124 -0
  832. package/sandboxels-package/sandboxels-1.13.2/mods/tech.js +282 -0
  833. package/sandboxels-package/sandboxels-1.13.2/mods/test.js +8 -0
  834. package/sandboxels-package/sandboxels-1.13.2/mods/test_2.js +399 -0
  835. package/sandboxels-package/sandboxels-1.13.2/mods/testmod.js +7 -0
  836. package/sandboxels-package/sandboxels-1.13.2/mods/text.js +681 -0
  837. package/sandboxels-package/sandboxels-1.13.2/mods/texture_pack_by_jayd.js +116 -0
  838. package/sandboxels-package/sandboxels-1.13.2/mods/texturepack.js +94 -0
  839. package/sandboxels-package/sandboxels-1.13.2/mods/the_ground.js +3 -0
  840. package/sandboxels-package/sandboxels-1.13.2/mods/the_ground_og.js +2570 -0
  841. package/sandboxels-package/sandboxels-1.13.2/mods/the_snail.js +63 -0
  842. package/sandboxels-package/sandboxels-1.13.2/mods/themostrandomstuff.js +523 -0
  843. package/sandboxels-package/sandboxels-1.13.2/mods/thermal_conduit.js +157 -0
  844. package/sandboxels-package/sandboxels-1.13.2/mods/thiquovite.js +1745 -0
  845. package/sandboxels-package/sandboxels-1.13.2/mods/ticking_temp_stuff.js +494 -0
  846. package/sandboxels-package/sandboxels-1.13.2/mods/time.js +7 -0
  847. package/sandboxels-package/sandboxels-1.13.2/mods/toms_stuff.js +308 -0
  848. package/sandboxels-package/sandboxels-1.13.2/mods/tool_pixel_behavior.js +792 -0
  849. package/sandboxels-package/sandboxels-1.13.2/mods/tooltip.js +32 -0
  850. package/sandboxels-package/sandboxels-1.13.2/mods/toothpaste.js +154 -0
  851. package/sandboxels-package/sandboxels-1.13.2/mods/tpt.js +89 -0
  852. package/sandboxels-package/sandboxels-1.13.2/mods/triggerable_random_powders.js +68 -0
  853. package/sandboxels-package/sandboxels-1.13.2/mods/troll.js +170 -0
  854. package/sandboxels-package/sandboxels-1.13.2/mods/true_flashbang.js +520 -0
  855. package/sandboxels-package/sandboxels-1.13.2/mods/ultimadrink.js +3191 -0
  856. package/sandboxels-package/sandboxels-1.13.2/mods/uncook.js +51 -0
  857. package/sandboxels-package/sandboxels-1.13.2/mods/unhide.js +10 -0
  858. package/sandboxels-package/sandboxels-1.13.2/mods/variety_mod.js +727 -0
  859. package/sandboxels-package/sandboxels-1.13.2/mods/velocity.js +139 -0
  860. package/sandboxels-package/sandboxels-1.13.2/mods/velocity2.js +209 -0
  861. package/sandboxels-package/sandboxels-1.13.2/mods/video.js +125 -0
  862. package/sandboxels-package/sandboxels-1.13.2/mods/vinegar.js +17 -0
  863. package/sandboxels-package/sandboxels-1.13.2/mods/volcanic_expansion.js +94 -0
  864. package/sandboxels-package/sandboxels-1.13.2/mods/war.js +51 -0
  865. package/sandboxels-package/sandboxels-1.13.2/mods/war_crimes.js +131 -0
  866. package/sandboxels-package/sandboxels-1.13.2/mods/waterspout.js +26 -0
  867. package/sandboxels-package/sandboxels-1.13.2/mods/weAllScreamFor.js +218 -0
  868. package/sandboxels-package/sandboxels-1.13.2/mods/weapons.js +1286 -0
  869. package/sandboxels-package/sandboxels-1.13.2/mods/wheel_fix.js +19 -0
  870. package/sandboxels-package/sandboxels-1.13.2/mods/wifi.js +162 -0
  871. package/sandboxels-package/sandboxels-1.13.2/mods/wifi_draw.js +87 -0
  872. package/sandboxels-package/sandboxels-1.13.2/mods/wine.js +8 -0
  873. package/sandboxels-package/sandboxels-1.13.2/mods/wirelike_test.js +681 -0
  874. package/sandboxels-package/sandboxels-1.13.2/mods/worldEdit.js +441 -0
  875. package/sandboxels-package/sandboxels-1.13.2/mods/worldEdit.ts +569 -0
  876. package/sandboxels-package/sandboxels-1.13.2/mods/world_gen_test.js +315 -0
  877. package/sandboxels-package/sandboxels-1.13.2/mods/worldgen_test.js +173 -0
  878. package/sandboxels-package/sandboxels-1.13.2/mods/worldgenlibrary.js +164 -0
  879. package/sandboxels-package/sandboxels-1.13.2/mods/x_dependent_change_test.js +34 -0
  880. package/sandboxels-package/sandboxels-1.13.2/mods/yumcherries.js +543 -0
  881. package/sandboxels-package/sandboxels-1.13.2/mods/zonneschijn7.js +6 -0
  882. package/sandboxels-package/sandboxels-1.13.2/mods/zoom.js +322 -0
  883. package/sandboxels-package/sandboxels-1.13.2/offline-use.html +103 -0
  884. package/sandboxels-package/sandboxels-1.13.2/offline.html +1 -0
  885. package/sandboxels-package/sandboxels-1.13.2/presskit.html +165 -0
  886. package/sandboxels-package/sandboxels-1.13.2/promo.html +13 -0
  887. package/sandboxels-package/sandboxels-1.13.2/scripts/im2elements/code.go +116 -0
  888. package/sandboxels-package/sandboxels-1.13.2/scripts/im2elements/go.mod +5 -0
  889. package/sandboxels-package/sandboxels-1.13.2/scripts/im2elements/go.sum +2 -0
  890. package/sandboxels-package/sandboxels-1.13.2/scripts/im2elements/main.go +58 -0
  891. package/sandboxels-package/sandboxels-1.13.2/scripts/perlin.js +165 -0
  892. package/sandboxels-package/sandboxels-1.13.2/service-worker.js +16 -0
  893. package/sandboxels-package/sandboxels-1.13.2/sitemap.txt +13 -0
  894. package/sandboxels-package/sandboxels-1.13.2/style.css +1105 -0
  895. package/sandboxels-package/sandboxels-1.13.2/template.html +86 -0
  896. package/sandboxels-package/sandboxels-1.13.2/tips.html +147 -0
  897. package/sandboxels-package/sandboxels-1.13.2/translate.html +105 -0
  898. package/README.md +0 -3
@@ -0,0 +1,1463 @@
1
+ {
2
+ elements.screen = {
3
+ name: "Screen",
4
+ color: "#000000"
5
+ }
6
+
7
+ let running = false;
8
+
9
+ const offsetX = 0;
10
+ const offsetY = 0;
11
+ const screenWidth = 166 - (2 * offsetX);
12
+ const screenHeight = 82 - (2 * offsetY);
13
+
14
+ const splitHex = (hex) => hex.slice(1).match(/../g).map(a => Math.floor(parseInt(a, 16)));
15
+ const hexify = (rgb) => rgb.map(a => Math.floor(a).toString(16).padStart(2, "0")).join("");
16
+ function colorLerp(color_, color2_, t) {
17
+ const color = splitHex(color_);
18
+ const color2 = splitHex(color2_);
19
+ const r = (1 - t) * color[0] + t * color2[0];
20
+ const g = (1 - t) * color[1] + t * color2[1];
21
+ const b = (1 - t) * color[2] + t * color2[2];
22
+ return hexify([r, g, b]);
23
+ }
24
+
25
+ function clamp(x, min, max) {
26
+ return Math.max(min, Math.min(x, max));
27
+ }
28
+
29
+ // 5x5
30
+ const font = {
31
+ a: [
32
+ 0, 1, 1, 1, 0,
33
+ 0, 0, 0, 0, 1,
34
+ 0, 1, 1, 1, 1,
35
+ 1, 0, 0, 0, 1,
36
+ 0, 1, 1, 1, 1
37
+ ],
38
+ b: [
39
+ 1, 1, 1, 1, 0,
40
+ 1, 0, 0, 0, 1,
41
+ 1, 1, 1, 1, 0,
42
+ 1, 0, 0, 0, 1,
43
+ 1, 1, 1, 1, 0
44
+ ],
45
+ c: [
46
+ 0, 1, 1, 1, 1,
47
+ 1, 0, 0, 0, 0,
48
+ 1, 0, 0, 0, 0,
49
+ 1, 0, 0, 0, 0,
50
+ 0, 1, 1, 1, 1
51
+ ],
52
+ d: [
53
+ 1, 1, 1, 1, 0,
54
+ 1, 0, 0, 0, 1,
55
+ 1, 0, 0, 0, 1,
56
+ 1, 0, 0, 0, 1,
57
+ 1, 1, 1, 1, 0
58
+ ],
59
+ e: [
60
+ 1, 1, 1, 1, 1,
61
+ 1, 0, 0, 0, 0,
62
+ 1, 1, 1, 1, 1,
63
+ 1, 0, 0, 0, 0,
64
+ 1, 1, 1, 1, 1
65
+ ],
66
+ f: [
67
+ 1, 1, 1, 1, 1,
68
+ 1, 0, 0, 0, 0,
69
+ 1, 1, 1, 1, 0,
70
+ 1, 0, 0, 0, 0,
71
+ 1, 0, 0, 0, 0
72
+ ],
73
+ g: [
74
+ 1, 1, 1, 1, 1,
75
+ 1, 0, 0, 0, 0,
76
+ 1, 0, 1, 1, 1,
77
+ 1, 0, 0, 0, 1,
78
+ 1, 1, 1, 1, 1
79
+ ],
80
+ h: [
81
+ 1, 0, 0, 0, 1,
82
+ 1, 0, 0, 0, 1,
83
+ 1, 1, 1, 1, 1,
84
+ 1, 0, 0, 0, 1,
85
+ 1, 0, 0, 0, 1
86
+ ],
87
+ i: [
88
+ 1, 0, 0, 0, 0,
89
+ 1, 0, 0, 0, 0,
90
+ 1, 0, 0, 0, 0,
91
+ 1, 0, 0, 0, 0,
92
+ 1, 0, 0, 0, 0
93
+ ],
94
+ j: [
95
+ 0, 0, 0, 0, 1,
96
+ 0, 0, 0, 0, 1,
97
+ 0, 0, 0, 0, 1,
98
+ 1, 0, 0, 0, 1,
99
+ 0, 1, 1, 1, 0
100
+ ],
101
+ k: [
102
+ 1, 0, 0, 1, 0,
103
+ 1, 0, 0, 1, 0,
104
+ 1, 1, 1, 0, 0,
105
+ 1, 0, 0, 1, 0,
106
+ 1, 0, 0, 1, 0
107
+ ],
108
+ l: [
109
+ 1, 0, 0, 0, 0,
110
+ 1, 0, 0, 0, 0,
111
+ 1, 0, 0, 0, 0,
112
+ 1, 0, 0, 0, 0,
113
+ 1, 1, 1, 1, 0
114
+ ],
115
+ m: [
116
+ 1, 1, 1, 1, 0,
117
+ 1, 0, 1, 0, 1,
118
+ 1, 0, 1, 0, 1,
119
+ 1, 0, 1, 0, 1,
120
+ 1, 0, 1, 0, 1
121
+ ],
122
+ n: [
123
+ 1, 1, 1, 1, 0,
124
+ 1, 0, 0, 0, 1,
125
+ 1, 0, 0, 0, 1,
126
+ 1, 0, 0, 0, 1,
127
+ 1, 0, 0, 0, 1
128
+ ],
129
+ o: [
130
+ 0, 1, 1, 1, 0,
131
+ 1, 0, 0, 0, 1,
132
+ 1, 0, 0, 0, 1,
133
+ 1, 0, 0, 0, 1,
134
+ 0, 1, 1, 1, 0
135
+ ],
136
+ p: [
137
+ 1, 1, 1, 1, 0,
138
+ 1, 0, 0, 0, 1,
139
+ 1, 1, 1, 1, 0,
140
+ 1, 0, 0, 0, 0,
141
+ 1, 0, 0, 0, 0
142
+ ],
143
+ q: [
144
+ 0, 1, 1, 1, 1,
145
+ 1, 0, 0, 0, 1,
146
+ 0, 1, 1, 1, 1,
147
+ 0, 0, 0, 0, 1,
148
+ 0, 0, 0, 0, 1
149
+ ],
150
+ r: [
151
+ 1, 0, 1, 1, 1,
152
+ 1, 1, 0, 0, 0,
153
+ 1, 0, 0, 0, 0,
154
+ 1, 0, 0, 0, 0,
155
+ 1, 0, 0, 0, 0
156
+ ],
157
+ s: [
158
+ 0, 1, 1, 1, 1,
159
+ 1, 0, 0, 0, 0,
160
+ 0, 1, 1, 1, 0,
161
+ 0, 0, 0, 0, 1,
162
+ 1, 1, 1, 1, 0
163
+ ],
164
+ t: [
165
+ 1, 1, 1, 1, 1,
166
+ 0, 0, 1, 0, 0,
167
+ 0, 0, 1, 0, 0,
168
+ 0, 0, 1, 0, 0,
169
+ 0, 0, 1, 0, 0
170
+ ],
171
+ u: [
172
+ 1, 0, 0, 0, 1,
173
+ 1, 0, 0, 0, 1,
174
+ 1, 0, 0, 0, 1,
175
+ 1, 0, 0, 0, 1,
176
+ 1, 1, 1, 1, 1
177
+ ],
178
+ v: [
179
+ 1, 0, 0, 0, 1,
180
+ 1, 0, 0, 0, 1,
181
+ 0, 1, 0, 1, 0,
182
+ 0, 1, 0, 1, 0,
183
+ 0, 0, 1, 0, 0
184
+ ],
185
+ w: [
186
+ 1, 0, 0, 0, 1,
187
+ 1, 0, 0, 0, 1,
188
+ 1, 0, 1, 0, 1,
189
+ 1, 0, 1, 0, 1,
190
+ 0, 1, 0, 1, 0
191
+ ],
192
+ x: [
193
+ 1, 0, 0, 0, 1,
194
+ 0, 1, 0, 1, 0,
195
+ 0, 0, 1, 0, 0,
196
+ 0, 1, 0, 1, 0,
197
+ 1, 0, 0, 0, 1
198
+ ],
199
+ y: [
200
+ 1, 0, 0, 0, 1,
201
+ 1, 0, 0, 0, 1,
202
+ 0, 1, 0, 1, 0,
203
+ 0, 0, 1, 0, 0,
204
+ 0, 0, 1, 0, 0
205
+ ],
206
+ z: [
207
+ 1, 1, 1, 1, 0,
208
+ 0, 0, 0, 1, 0,
209
+ 0, 1, 1, 0, 0,
210
+ 1, 0, 0, 0, 0,
211
+ 1, 1, 1, 1, 0
212
+ ],
213
+ "0": [
214
+ 1, 1, 1, 1, 0,
215
+ 1, 0, 0, 1, 0,
216
+ 1, 0, 0, 1, 0,
217
+ 1, 0, 0, 1, 0,
218
+ 1, 1, 1, 1, 0
219
+ ],
220
+ "1": [
221
+ 1, 0, 0, 0, 0,
222
+ 1, 0, 0, 0, 0,
223
+ 1, 0, 0, 0, 0,
224
+ 1, 0, 0, 0, 0,
225
+ 1, 0, 0, 0, 0
226
+ ],
227
+ "2": [
228
+ 1, 1, 1, 1, 1,
229
+ 0, 0, 0, 0, 1,
230
+ 1, 1, 1, 1, 1,
231
+ 1, 0, 0, 0, 0,
232
+ 1, 1, 1, 1, 1
233
+ ],
234
+ "3": [
235
+ 1, 1, 1, 1, 1,
236
+ 0, 0, 0, 0, 1,
237
+ 1, 1, 1, 1, 1,
238
+ 0, 0, 0, 0, 1,
239
+ 1, 1, 1, 1, 1
240
+ ],
241
+ "4": [
242
+ 1, 0, 0, 0, 1,
243
+ 1, 0, 0, 0, 1,
244
+ 1, 1, 1, 1, 1,
245
+ 0, 0, 0, 0, 1,
246
+ 0, 0, 0, 0, 1
247
+ ],
248
+ "5": [
249
+ 1, 1, 1, 1, 1,
250
+ 1, 0, 0, 0, 0,
251
+ 1, 1, 1, 1, 1,
252
+ 0, 0, 0, 0, 1,
253
+ 1, 1, 1, 1, 1
254
+ ],
255
+ "6": [
256
+ 1, 1, 1, 1, 1,
257
+ 1, 0, 0, 0, 0,
258
+ 1, 1, 1, 1, 1,
259
+ 1, 0, 0, 0, 1,
260
+ 1, 1, 1, 1, 1
261
+ ],
262
+ "7": [
263
+ 1, 1, 1, 1, 1,
264
+ 0, 0, 0, 0, 1,
265
+ 0, 0, 0, 0, 1,
266
+ 0, 0, 0, 0, 1,
267
+ 0, 0, 0, 0, 1
268
+ ],
269
+ "8": [
270
+ 1, 1, 1, 1, 1,
271
+ 1, 0, 0, 0, 1,
272
+ 1, 1, 1, 1, 1,
273
+ 1, 0, 0, 0, 1,
274
+ 1, 1, 1, 1, 1
275
+ ],
276
+ "9": [
277
+ 1, 1, 1, 1, 1,
278
+ 1, 0, 0, 0, 1,
279
+ 1, 1, 1, 1, 1,
280
+ 0, 0, 0, 0, 1,
281
+ 1, 1, 1, 1, 1
282
+ ],
283
+ ".": [
284
+ 0, 0, 0, 0, 0,
285
+ 0, 0, 0, 0, 0,
286
+ 0, 0, 0, 0, 0,
287
+ 0, 0, 0, 0, 0,
288
+ 1, 0, 0, 0, 0
289
+ ],
290
+ ":": [
291
+ 0, 0, 0, 0, 0,
292
+ 1, 0, 0, 0, 0,
293
+ 0, 0, 0, 0, 0,
294
+ 1, 0, 0, 0, 0,
295
+ 0, 0, 0, 0, 0
296
+ ],
297
+ "-": [
298
+ 0, 0, 0, 0, 0,
299
+ 0, 0, 0, 0, 0,
300
+ 1, 1, 1, 0, 0,
301
+ 0, 0, 0, 0, 0,
302
+ 0, 0, 0, 0, 0
303
+ ],
304
+ "+": [
305
+ 0, 0, 0, 0, 0,
306
+ 0, 1, 0, 0, 0,
307
+ 1, 1, 1, 0, 0,
308
+ 0, 1, 0, 0, 0,
309
+ 0, 0, 0, 0, 0,
310
+ ],
311
+ ",": [
312
+ 0, 0, 0, 0, 0,
313
+ 0, 0, 0, 0, 0,
314
+ 0, 0, 0, 0, 0,
315
+ 1, 0, 0, 0, 0,
316
+ 1, 0, 0, 0, 0,
317
+ ],
318
+ "[": [
319
+ 1, 1, 0, 0, 0,
320
+ 1, 0, 0, 0, 0,
321
+ 1, 0, 0, 0, 0,
322
+ 1, 0, 0, 0, 0,
323
+ 1, 1, 0, 0, 0
324
+ ],
325
+ "]": [
326
+ 1, 1, 0, 0, 0,
327
+ 0, 1, 0, 0, 0,
328
+ 0, 1, 0, 0, 0,
329
+ 0, 1, 0, 0, 0,
330
+ 1, 1, 0, 0, 0
331
+ ],
332
+ "(": [
333
+ 0, 1, 0, 0, 0,
334
+ 1, 0, 0, 0, 0,
335
+ 1, 0, 0, 0, 0,
336
+ 1, 0, 0, 0, 0,
337
+ 0, 1, 0, 0, 0
338
+ ],
339
+ ")": [
340
+ 1, 0, 0, 0, 0,
341
+ 0, 1, 0, 0, 0,
342
+ 0, 1, 0, 0, 0,
343
+ 0, 1, 0, 0, 0,
344
+ 1, 0, 0, 0, 0
345
+ ],
346
+ ";": [
347
+ 0, 0, 0, 0, 0,
348
+ 1, 0, 0, 0, 0,
349
+ 0, 0, 0, 0, 0,
350
+ 1, 0, 0, 0, 0,
351
+ 1, 0, 0, 0, 0
352
+ ],
353
+ "!": [
354
+ 1, 0, 0, 0, 0,
355
+ 1, 0, 0, 0, 0,
356
+ 1, 0, 0, 0, 0,
357
+ 0, 0, 0, 0, 0,
358
+ 1, 0, 0, 0, 0
359
+ ],
360
+ "{": [
361
+ 0, 1, 1, 0, 0,
362
+ 0, 1, 0, 0, 0,
363
+ 1, 0, 0, 0, 0,
364
+ 0, 1, 0, 0, 0,
365
+ 0, 1, 1, 0, 0
366
+ ],
367
+ "}": [
368
+ 1, 1, 0, 0, 0,
369
+ 0, 1, 0, 0, 0,
370
+ 0, 0, 1, 0, 0,
371
+ 0, 1, 0, 0, 0,
372
+ 1, 1, 0, 0, 0
373
+ ],
374
+ "_": [
375
+ 0, 0, 0, 0, 0,
376
+ 0, 0, 0, 0, 0,
377
+ 0, 0, 0, 0, 0,
378
+ 0, 0, 0, 0, 0,
379
+ 1, 1, 1, 0, 0
380
+ ],
381
+ "°": [
382
+ 1, 1, 1, 0, 0,
383
+ 1, 0, 1, 0, 0,
384
+ 1, 1, 1, 0, 0,
385
+ 0, 0, 0, 0, 0,
386
+ 0, 0, 0, 0, 0
387
+ ],
388
+ "|": [
389
+ 1, 0, 0, 0, 0,
390
+ 1, 0, 0, 0, 0,
391
+ 1, 0, 0, 0, 0,
392
+ 1, 0, 0, 0, 0,
393
+ 1, 0, 0, 0, 0
394
+ ]
395
+ }
396
+
397
+ const customWidth = {
398
+ i: 1,
399
+ l: 4,
400
+ z: 4,
401
+ "0": 4,
402
+ "1": 1,
403
+ ".": 1,
404
+ ":": 1,
405
+ "-": 3,
406
+ "+": 3,
407
+ ",": 1,
408
+ "[": 2,
409
+ "]": 2,
410
+ "(": 2,
411
+ ")": 2,
412
+ ";": 1,
413
+ "!": 1,
414
+ "{": 3,
415
+ "}": 3,
416
+ "_": 3,
417
+ "°": 3,
418
+ " ": 3,
419
+ "|": 1,
420
+ }
421
+
422
+ class TextRenderer {
423
+ static getCharWidth(char) {
424
+ return customWidth[char] ?? 5;
425
+ }
426
+
427
+ static drawChar(char, x, y, color) {
428
+ if (!font[char]) return;
429
+ const width = this.getCharWidth();
430
+ for (let i = 0; i < width; i++) {
431
+ for (let j = 0; j < 5; j++) {
432
+ if (font[char][j * 5 + i] == 1) {
433
+ pixelMap[x + offsetX + i][y + offsetY + j].color = color;
434
+ }
435
+ }
436
+ }
437
+ }
438
+
439
+ static drawText(text, x, y, color) {
440
+ let offset = 0;
441
+ for (const char of text.toLowerCase().split("")) {
442
+ const width = this.getCharWidth(char);
443
+ this.drawChar(char, x + offset, y, color);
444
+ offset += width + 1;
445
+ }
446
+ }
447
+
448
+ static getStringWidth(text) {
449
+ return text.split("").map(a => this.getCharWidth(a)).reduce((a, b) => a + b, 0) + text.length - 1;
450
+ }
451
+
452
+ static drawCenteredText(text, x1, y, color) {
453
+ const x = Math.floor(x1 - (this.getStringWidth(text) / 2));
454
+ this.drawText(text, x, y, color);
455
+ }
456
+ }
457
+
458
+ class ButtonRegistry {
459
+ constructor (screen, buttons) {
460
+ this.screen = screen;
461
+ this.buttons = buttons;
462
+ this.currentButton = 0;
463
+ if (this.buttons.length > 0) {
464
+ this.buttons[this.currentButton].toggleSelection();
465
+ }
466
+ }
467
+
468
+ next() {
469
+ this.buttons[this.currentButton].toggleSelection();
470
+ this.currentButton++;
471
+ if (this.currentButton >= this.buttons.length) {
472
+ this.currentButton %= this.buttons.length;
473
+ }
474
+ this.buttons[this.currentButton].toggleSelection();
475
+ }
476
+
477
+ prev() {
478
+ this.buttons[this.currentButton].toggleSelection();
479
+ this.currentButton--;
480
+ if (this.currentButton < 0) {
481
+ this.currentButton = this.buttons.length - 1;
482
+ }
483
+ this.buttons[this.currentButton].toggleSelection();
484
+ }
485
+
486
+ current() {
487
+ return this.buttons[this.currentButton];
488
+ }
489
+ }
490
+
491
+ class GameMenu {
492
+ constructor (name, screen, width, height, offsets = null) {
493
+ this.name = name;
494
+ this.screen = screen;
495
+ this.width = width;
496
+ this.height = height;
497
+ this.offsetX = Math.floor((screenWidth - width - (offsets ? offsets.x : 0)) / 2) + (offsets ? offsets.x : 0);
498
+ this.offsetY = Math.floor((screenHeight - height - 10 - (offsets ? offsets.y : 0)) / 2) + (offsets ? offsets.y : 0) + 10;
499
+ this.buttons = [];
500
+ this.buttonRegistry = new ButtonRegistry(this, []);
501
+ }
502
+
503
+ draw() {
504
+ for (const button of this.buttons) {
505
+ button.draw();
506
+ }
507
+ }
508
+
509
+ getOffsetX() {
510
+ return offsetX + this.offsetX;
511
+ }
512
+
513
+ getOffsetY() {
514
+ return offsetY + this.offsetY;
515
+ }
516
+
517
+ onKey(ev) {
518
+ if (ev.key == "b") { // up
519
+ this.buttonRegistry.prev();
520
+ } else if (ev.key == "n") { // down
521
+ this.buttonRegistry.next();
522
+ } else if (ev.key == "Enter") {
523
+ this.buttonRegistry.current().click();
524
+ }
525
+ }
526
+
527
+ onClick(ev) {}
528
+
529
+ addButtons(...buttons) {
530
+ this.buttons.push(...buttons);
531
+ this.updateButtonRegistry();
532
+ }
533
+
534
+ getButtons() {
535
+ return this.buttons;
536
+ }
537
+
538
+ updateButtonRegistry() {
539
+ this.buttonRegistry = new ButtonRegistry(this, this.buttons);
540
+ }
541
+ }
542
+
543
+ class GuiButton {
544
+ constructor (x, y, width, height, text, color, screen) {
545
+ this.x = x + screen.getOffsetX();
546
+ this.y = y + screen.getOffsetY();
547
+ this.width = width;
548
+ this.height = height;
549
+ this.text = text;
550
+ this.color = color;
551
+ this.onPressed = () => {};
552
+ this.selected = false;
553
+ this.screen = screen;
554
+ }
555
+
556
+ draw() {
557
+ GuiUtils.drawRect(this.x, this.y, this.x + this.width, this.y + this.height, this.color);
558
+ TextRenderer.drawCenteredText(this.text, this.x + (this.width / 2), Math.floor(this.y + (this.height / 2) - 5/2), "#ffffff");
559
+ if (this.selected) {
560
+ GuiUtils.drawOutline(this.x, this.y, this.x + this.width, this.y + this.height, "#000000");
561
+ }
562
+ }
563
+
564
+ onClick(cb) {
565
+ this.onPressed = cb;
566
+ }
567
+
568
+ click() {
569
+ this.onPressed();
570
+ }
571
+
572
+ toggleSelection() {
573
+ this.selected = !this.selected;
574
+ }
575
+ }
576
+
577
+ class GuiUtils {
578
+ static drawRect(x1, y1, x2, y2, color) {
579
+ for (let i = Math.max(Math.min(x1, x2), 0); i < Math.min(Math.max(x1, x2), width); i++) {
580
+ for (let j = Math.max(Math.min(y1, y2), 0); j < Math.min(Math.max(y1, y2), height); j++) {
581
+ pixelMap[i][j].color = color;
582
+ }
583
+ }
584
+ }
585
+
586
+ static drawOutline(x1, y1, x2, y2, color) {
587
+ const initI = Math.max(Math.min(x1, x2), 0);
588
+ const endI = Math.min(Math.max(x1, x2), width);
589
+ const initJ = Math.max(Math.min(y1, y2), 0);
590
+ const endJ = Math.min(Math.max(y1, y2), height);
591
+ for (let i = initI; i < endI; i++) {
592
+ for (let j = initJ; j < endJ; j++) {
593
+ if (i == initI || i == endI - 1 || j == initJ || j == endJ - 1) {
594
+ pixelMap[i][j].color = color;
595
+ }
596
+ }
597
+ }
598
+ }
599
+
600
+ static drawVerticalLine(x, y1, y2, color) {
601
+ for (let i = Math.max(Math.min(y1, y2), 0); i <= Math.min(Math.max(y1, y2), height); i++) {
602
+ if (!pixelMap[x][i]) continue;
603
+ pixelMap[x][i].color = color;
604
+ }
605
+ }
606
+ }
607
+
608
+ const closestDivisible = (n, m) => m * Math.floor(n / m);
609
+ const xor = (a, b) => (!a && b) || (a && !b)
610
+
611
+ const colorSettings = {
612
+ color1: "#eeeed5",
613
+ color2: "#7d945d",
614
+ white: {
615
+ 1: "#A4A9AD",
616
+ 2: "#BDC3C7",
617
+ 3: "#EDF3F7"
618
+ },
619
+ black: {
620
+ 1: "#000000",
621
+ 2: "#232323",
622
+ 3: "#7A7D7F"
623
+ }
624
+ }
625
+
626
+ const sprites = {
627
+ "pawn": [
628
+ 0,0,0,1,1,0,0,0,
629
+ 0,0,1,3,3,1,0,0,
630
+ 0,0,1,3,3,1,0,0,
631
+ 0,0,0,1,1,0,0,0,
632
+ 0,0,1,3,3,1,0,0,
633
+ 0,0,1,3,3,1,0,0,
634
+ 0,1,3,3,3,3,1,0,
635
+ 0,1,3,3,3,3,1,0
636
+ ],
637
+ "bishop": [
638
+ 0,0,0,1,1,0,0,0,
639
+ 0,0,1,3,3,1,0,0,
640
+ 0,1,3,1,1,3,1,0,
641
+ 0,1,3,3,3,3,1,0,
642
+ 0,0,1,1,1,1,0,0,
643
+ 0,0,1,3,3,1,0,0,
644
+ 0,1,3,3,3,3,1,0,
645
+ 0,1,3,3,3,3,1,0
646
+ ],
647
+ "knight": [
648
+ 0,0,0,2,1,1,2,0,
649
+ 0,0,1,1,1,1,1,2,
650
+ 0,1,1,3,1,1,1,2,
651
+ 0,1,1,1,1,1,1,2,
652
+ 0,0,0,1,1,1,1,2,
653
+ 0,0,1,1,1,1,1,2,
654
+ 0,0,1,1,1,1,0,2,
655
+ 0,1,1,1,1,1,1,0
656
+ ],
657
+ "rook": [
658
+ 1,0,1,0,0,1,0,1,
659
+ 1,1,1,1,1,1,1,1,
660
+ 0,1,3,3,3,3,1,0,
661
+ 0,1,3,3,3,3,1,0,
662
+ 0,1,3,3,3,3,1,0,
663
+ 1,1,3,1,1,3,1,1,
664
+ 1,3,3,2,1,3,3,1,
665
+ 1,3,3,2,2,3,3,1
666
+ ],
667
+ "queen": [
668
+ 0,0,0,0,0,0,0,0,
669
+ 0,0,0,1,1,0,0,0,
670
+ 1,0,1,3,3,1,0,1,
671
+ 1,1,3,3,3,3,1,1,
672
+ 1,3,3,3,3,3,3,1,
673
+ 1,2,3,2,2,3,2,1,
674
+ 1,2,3,2,2,3,2,1,
675
+ 1,3,3,3,3,3,3,1
676
+ ],
677
+ "king": [
678
+ 1,0,0,0,0,0,0,1,
679
+ 1,1,0,0,0,0,1,1,
680
+ 1,3,1,0,0,1,3,1,
681
+ 1,3,3,1,1,3,3,1,
682
+ 1,3,3,3,3,3,3,1,
683
+ 1,3,3,3,3,3,3,1,
684
+ 1,3,3,3,3,3,3,1,
685
+ 1,3,3,3,3,3,3,1
686
+ ],
687
+ move: [
688
+ 0,0,0,0,0,0,0,0,
689
+ 0,0,0,0,0,0,0,0,
690
+ 0,0,0,1,1,0,0,0,
691
+ 0,0,1,1,1,1,0,0,
692
+ 0,0,1,1,1,1,0,0,
693
+ 0,0,0,1,1,0,0,0,
694
+ 0,0,0,0,0,0,0,0,
695
+ 0,0,0,0,0,0,0,0
696
+ ]
697
+ }
698
+
699
+ function checkBounds(x, y) {
700
+ return x >= 0 && x <= 7 && y >= 0 && y <= 7;
701
+ }
702
+
703
+ class Piece {
704
+ constructor (color, type, position) {
705
+ this.color = color;
706
+ this.type = type;
707
+ this.position = position;
708
+ this.moved = false;
709
+ }
710
+
711
+ moveTo(position) {
712
+ this.position = {
713
+ x: position[0],
714
+ y: position[1]
715
+ }
716
+ }
717
+
718
+ draw(screen) {
719
+ for (let i = 0; i < 8; i++) {
720
+ for (let j = 0; j < 8; j++) {
721
+ const x = i + 1 + offsetX + screen.offsetX + this.position.x * screen.n;
722
+ const y = j + 1 + offsetY + screen.offsetY + this.position.y * screen.n;
723
+ if (sprites[this.type][j * 8 + i]) pixelMap[x][y].color = colorSettings[this.color][sprites[this.type][j * 8 + i]];
724
+ }
725
+ }
726
+ if (screen.selected && screen.selected[0] == this.position.x && screen.selected[1] == this.position.y) {
727
+ const moves = this.getLegalMoves(screen.getBoard(), screen);
728
+ for (const move of moves) {
729
+ for (let i = 0; i < 8; i++) {
730
+ for (let j = 0; j < 8; j++) {
731
+ const x = move[0] * screen.n + screen.offsetX + offsetX + i + 1;
732
+ const y = move[1] * screen.n + screen.offsetY + offsetY + j + 1;
733
+ if (sprites.move[j * 8 + i]) pixelMap[x][y].color = "#dddddd";
734
+ }
735
+ }
736
+ }
737
+ }
738
+ }
739
+ // -2
740
+ // -1
741
+ // origin
742
+
743
+ getPossibleMoves(board, screen) {
744
+ const moves = [];
745
+ const direction = this.color == "black" ? 1 : -1;
746
+ const opponent = this.color == "black" ? "white" : "black";
747
+ switch (this.type) {
748
+ case "pawn":
749
+ if (!board[this.position.x][this.position.y + direction]) {
750
+ moves.push([0, direction]);
751
+ if (!board[this.position.x][this.position.y + direction * 2] && !this.moved) moves.push([0, direction * 2, false, true]);
752
+ }
753
+ if (board[this.position.x - 1] && board[this.position.x - 1][this.position.y + direction] && board[this.position.x - 1][this.position.y + direction].color == opponent) {
754
+ moves.push([-1, direction]);
755
+ }
756
+ if (board[this.position.x + 1] && board[this.position.x + 1][this.position.y + direction] && board[this.position.x + 1][this.position.y + direction].color == opponent) {
757
+ moves.push([1, direction]);
758
+ }
759
+ // en crossaint
760
+ if (screen.enPassantTargetSquare != null && (this.position.x == screen.enPassantTargetSquare[0] - 1 || this.position.x == screen.enPassantTargetSquare[0] + 1) && this.position.y == screen.enPassantTargetSquare[1]) {
761
+ moves.push([screen.enPassantTargetSquare[0] - this.position.x, direction, false, false, true]);
762
+ }
763
+ break;
764
+ case "knight": {
765
+ const possibleMoves = [[-2, -1], [-2, 1], [-1, -2], [-1, 2], [1, -2], [1, 2], [2, -1], [2, 1]];
766
+ for (const move of possibleMoves) {
767
+ const newX = move[0] + this.position.x;
768
+ const newY = move[1] + this.position.y;
769
+ if (newX >= 0 && newX < 8 && newY >= 0 && newY < 8 && (!board[newX][newY] || board[newX][newY].color == opponent)) moves.push(move);
770
+ }
771
+ break;
772
+ }
773
+ case "rook": {
774
+ for (const coord of adjacentCoords) {
775
+ let currentX = this.position.x + coord[0];
776
+ let currentY = this.position.y + coord[1];
777
+ while (checkBounds(currentX, currentY)) {
778
+ if (board[currentX][currentY]) {
779
+ if (board[currentX][currentY].color == opponent) moves.push([currentX - this.position.x, currentY - this.position.y]);
780
+ break;
781
+ } else moves.push([currentX - this.position.x, currentY - this.position.y]);
782
+ currentX += coord[0];
783
+ currentY += coord[1];
784
+ }
785
+ }
786
+ break;
787
+ }
788
+ case "bishop": {
789
+ for (let i = this.position.x - 1, j = this.position.y + 1; i >= 0 && j < 8; i--, j++) {
790
+ if (board[i][j]) {
791
+ if (board[i][j].color == opponent) moves.push([i - this.position.x, j - this.position.y]);
792
+ break;
793
+ }
794
+ moves.push([i - this.position.x, j - this.position.y]);
795
+ }
796
+ for (let i = this.position.x - 1, j = this.position.y - 1; i >= 0 && j >= 0; i--, j--) {
797
+ if (board[i][j]) {
798
+ if (board[i][j].color == opponent) moves.push([i - this.position.x, j - this.position.y]);
799
+ break;
800
+ }
801
+ moves.push([i - this.position.x, j - this.position.y]);
802
+ }
803
+ for (let i = this.position.x + 1, j = this.position.y + 1; i < 8 && j < 8; i++, j++) {
804
+ if (board[i][j]) {
805
+ if (board[i][j].color == opponent) moves.push([i - this.position.x, j - this.position.y]);
806
+ break;
807
+ }
808
+ moves.push([i - this.position.x, j - this.position.y]);
809
+ }
810
+ for (let i = this.position.x + 1, j = this.position.y - 1; i < 8 && j >= 0; i++, j--) {
811
+ if (board[i][j]) {
812
+ if (board[i][j].color == opponent) moves.push([i - this.position.x, j - this.position.y]);
813
+ break;
814
+ }
815
+ moves.push([i - this.position.x, j - this.position.y]);
816
+ }
817
+ break;
818
+ }
819
+ case "queen": {
820
+ for (const coord of squareCoords) {
821
+ let currentX = this.position.x + coord[0];
822
+ let currentY = this.position.y + coord[1];
823
+ while (checkBounds(currentX, currentY)) {
824
+ if (board[currentX][currentY]) {
825
+ if (board[currentX][currentY].color == opponent) moves.push([currentX - this.position.x, currentY - this.position.y]);
826
+ break;
827
+ } else moves.push([currentX - this.position.x, currentY - this.position.y]);
828
+ currentX += coord[0];
829
+ currentY += coord[1];
830
+ }
831
+ }
832
+ break;
833
+ }
834
+ case "king": {
835
+ const potentialMoves = [];
836
+ for (const coord of squareCoords) {
837
+ const x = coord[0] + this.position.x;
838
+ const y = coord[1] + this.position.y;
839
+ if (checkBounds(x, y) && (!board[x][y] || board[x][y].color == opponent)) {
840
+ potentialMoves.push([coord[0], coord[1]]);
841
+ }
842
+ }
843
+
844
+ if (!this.moved) {
845
+ const ksRook = board[7][this.position.y];
846
+ const qsRook = board[0][this.position.y];
847
+ if (ksRook && ksRook.type == "rook" && ksRook.color == this.color && !ksRook.moved && !board[5][this.position.y] && screen.getAttackersAt([5, this.position.y], opponent).length == 0 && !board[6][this.position.y] && screen.getAttackersAt([6, this.position.y], opponent).length == 0) {
848
+ potentialMoves.push([2, 0, true]);
849
+ }
850
+ const cond = screen.getAttackersAt([1, this.position.y], opponent).length == 0 && screen.getAttackersAt([2, this.position.y], opponent).length == 0 && screen.getAttackersAt([3, this.position.y], opponent).length == 0;
851
+ if (qsRook && qsRook.type == "rook" && qsRook.color == this.color && !qsRook.moved && !board[1][this.position.y] && !board[2][this.position.y] && !board[3][this.position.y] && cond) {
852
+ potentialMoves.push([-2, 0, true]);
853
+ }
854
+ }
855
+
856
+ for (const move of potentialMoves) {
857
+ if (screen.getAttackersAt([move[0] + this.position.x, move[1] + this.position.y], opponent).length == 0) {
858
+ moves.push(move);
859
+ }
860
+ }
861
+ }
862
+ }
863
+ return moves.map(m => [m[0] + this.position.x, m[1] + this.position.y, ...m.slice(2)]).filter(a => a[0] < 8 && a[0] >= 0 && a[1] < 8 && a[1] >= 0);
864
+ }
865
+
866
+ getLegalMoves(board, screen) {
867
+ const possibleMoves = this.getPossibleMoves(board, screen);
868
+ if (this.type == "king") return possibleMoves;
869
+ const legalMoves = [];
870
+ for (const move of possibleMoves) {
871
+ const screen2 = screen.clone();
872
+ const piece2 = screen2.pieces.find(p => p.position.x == this.position.x && p.position.y == this.position.y);
873
+ screen2.pieceMove(piece2, move, true, false);
874
+ if (!screen2.isKingAttacked(this.color)) {
875
+ legalMoves.push(move);
876
+ }
877
+ }
878
+ return legalMoves;
879
+ }
880
+
881
+ handleSelection(pos, screen) {
882
+ const found = this.getLegalMoves(screen.getBoard(), screen).find(a => a[0] == pos[0] && a[1] == pos[1]);
883
+ if (found) {
884
+ screen.pieceMove(this, found);
885
+ this.moved = true;
886
+ return true
887
+ } else return false;
888
+ }
889
+ }
890
+
891
+ const types = {
892
+ p: "pawn",
893
+ n: "knight",
894
+ b: "bishop",
895
+ r: "rook",
896
+ q: "queen",
897
+ k: "king"
898
+ }
899
+
900
+ const loadFEN = (fen) => {
901
+ const split = fen.split(" ")[0].split("/");
902
+ const pieces = [];
903
+ let posY = 0;
904
+ for (const part of split) {
905
+ let posX = 0;
906
+ for (const char of part.split("")) {
907
+ if (!isNaN(parseInt(char))) {
908
+ posX += parseInt(char);
909
+ continue;
910
+ }
911
+ const white = char.toUpperCase() == char;
912
+ const type = types[char.toLowerCase()];
913
+ pieces.push(new Piece(white ? "white" : "black", type, {
914
+ x: posX,
915
+ y: posY
916
+ }))
917
+ posX++
918
+ }
919
+ posY++;
920
+ }
921
+ return pieces;
922
+ }
923
+
924
+ class UpgradeScreen extends GameMenu {
925
+ constructor (screen, width, height, color, piece) {
926
+ super("upgrade", screen, width, height);
927
+ this.color = color;
928
+ this.piece = piece;
929
+ this.current = -1;
930
+ }
931
+
932
+ draw() {
933
+ const separator = 4;
934
+ const panelWidth = 12;
935
+ const pieces = ["queen", "rook", "bishop", "knight"];
936
+ for (let p = 0; p < 4; p++) {
937
+ const iOffset = this.getOffsetX() + 2 + (panelWidth + separator) * p;
938
+ const jOffset = this.getOffsetY() + separator;
939
+ const hovered = mousePos.x >= iOffset && mousePos.x <= iOffset + panelWidth && mousePos.y >= jOffset && mousePos.y <= jOffset + 24;
940
+ if (hovered) this.current = p;
941
+ const color = this.color == "white" ? (hovered ? "#3c3c3c" : "#1e1e1e") : (hovered ? "#aaaaaa" : "#cccccc")
942
+ for (let i = this.getOffsetX() + 2 + (panelWidth + separator) * p; i < panelWidth * (p + 1) + separator * p + this.getOffsetX() + 2; i++) {
943
+ for (let j = this.getOffsetY() + separator; j < this.getOffsetY() + separator + 24; j++) {
944
+ const x = i - iOffset;
945
+ const y = j - jOffset;
946
+ if (x < 10 && x >= 2 && y < 12 && y >= 4) {
947
+ if (sprites[pieces[p]][(y - 4) * 8 + (x - 2)]) pixelMap[i][j].color = colorSettings[this.color][sprites[pieces[p]][(y - 4) * 8 + (x - 2)]];
948
+ else pixelMap[i][j].color = color;
949
+ } else {
950
+ pixelMap[i][j].color = color;
951
+ }
952
+ }
953
+ }
954
+ }
955
+ super.draw();
956
+ }
957
+
958
+ onClick(_) {
959
+ if (this.current == -1) return;
960
+ this.screen.upgrade(this.piece, this.current);
961
+ }
962
+ }
963
+
964
+ class WinScreen extends GameMenu {
965
+ constructor (screen, width, height, winningColor, timeout = false) {
966
+ super(`${winningColor} won`, screen, width, height);
967
+ this.winningColor = winningColor;
968
+ this.timeout = timeout;
969
+ const button = new GuiButton(1, 10, Math.ceil(width - 2), 20, "reset", "#555555", this);
970
+ button.onClick(() => {
971
+ screen.resetBoard();
972
+ })
973
+ this.addButtons(button);
974
+ }
975
+
976
+ draw() {
977
+ for (let i = this.getOffsetX(); i < this.width + this.getOffsetX(); i++) {
978
+ for (let j = this.getOffsetY(); j < this.height + this.getOffsetY(); j++) {
979
+ pixelMap[i][j].color = "#ffffff";
980
+ }
981
+ }
982
+ TextRenderer.drawCenteredText(`${this.winningColor} won ${this.timeout ? "on time" : "by checkmate"}`, Math.floor(this.getOffsetX() + this.width / 2), this.getOffsetY() + 1, "#000000")
983
+ super.draw();
984
+ }
985
+
986
+ onClick(_) {
987
+ if (mousePos.x >= this.buttons[0].x
988
+ && mousePos.x <= this.buttons[0].x + this.buttons[0].width
989
+ && mousePos.y >= this.buttons[0].y
990
+ && mousePos.y <= this.buttons[0].y + this.buttons[0].height) this.buttons[0].click();
991
+ }
992
+ }
993
+
994
+ class DrawScreen extends GameMenu {
995
+ constructor (screen, width, height, type) {
996
+ super(`Game drawn`, screen, width, height);
997
+ this.type = type;
998
+ const button = new GuiButton(1, 10, Math.ceil(width - 2), 20, "reset", "#555555", this);
999
+ button.onClick(() => {
1000
+ screen.resetBoard();
1001
+ })
1002
+ this.addButtons(button);
1003
+ }
1004
+
1005
+ draw() {
1006
+ for (let i = this.getOffsetX(); i < this.width + this.getOffsetX(); i++) {
1007
+ for (let j = this.getOffsetY(); j < this.height + this.getOffsetY(); j++) {
1008
+ pixelMap[i][j].color = "#ffffff";
1009
+ }
1010
+ }
1011
+ const types = {
1012
+ 0: "50-move rule",
1013
+ 1: "insuff. mat.",
1014
+ 2: "stalemate",
1015
+ 3: "repetition"
1016
+ }
1017
+ TextRenderer.drawCenteredText(`Draw by ${types[this.type]}`, Math.floor(this.getOffsetX() + this.width / 2), this.getOffsetY() + 1, "#000000")
1018
+ super.draw();
1019
+ }
1020
+
1021
+ onClick(_) {
1022
+ if (mousePos.x >= this.buttons[0].x
1023
+ && mousePos.x <= this.buttons[0].x + this.buttons[0].width
1024
+ && mousePos.y >= this.buttons[0].y
1025
+ && mousePos.y <= this.buttons[0].y + this.buttons[0].height) this.buttons[0].click();
1026
+ }
1027
+ }
1028
+
1029
+ const pieceValue = {
1030
+ "pawn": 1,
1031
+ "knight": 3,
1032
+ "bishop": 3,
1033
+ "rook": 5,
1034
+ "queen": 9,
1035
+ "king": Infinity
1036
+ }
1037
+
1038
+ class GameScreen {
1039
+ constructor () {
1040
+ this.selected = null;
1041
+ this.pieces = loadFEN("rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1");
1042
+ this.castlingWhite = true;
1043
+ this.castlingBlack = true;
1044
+ this.capturedWhite = [];
1045
+ this.capturedBlack = [];
1046
+ this.nonActionMoves = 0;
1047
+ this.positions = [];
1048
+ this.enPassantTargetSquare = null;
1049
+ // true = white
1050
+ this.turn = true;
1051
+ this.chessClock = {
1052
+ white: 60 * 5,
1053
+ black: 60 * 5
1054
+ }
1055
+ this.inCheck = null;
1056
+ this.positions.push(this.positionToHash());
1057
+ }
1058
+
1059
+ clock() {
1060
+ this.fps = this.currentFrames;
1061
+ this.currentFrames = 0;
1062
+ if (!this.paused) this.turn ? this.chessClock.white-- : this.chessClock.black--;
1063
+ if (!this.paused && (this.turn ? this.chessClock.white : this.chessClock.black) <= 0) {
1064
+ this.timeout(this.turn ? "black" : "white");
1065
+ }
1066
+ }
1067
+
1068
+ clear() {
1069
+ for (let i = offsetX; i < width - offsetX; i++) {
1070
+ for (let j = offsetY; j < height - offsetY; j++) {
1071
+ pixelMap[i][j].color = "#000000";
1072
+ }
1073
+ }
1074
+ }
1075
+
1076
+ pause() {
1077
+ this.paused = true;
1078
+ }
1079
+
1080
+ unpause() {
1081
+ this.paused = false;
1082
+ }
1083
+
1084
+ draw() {
1085
+ if (!this.boardSize) {
1086
+ this.boardSize = closestDivisible(Math.min(width, height), 8);
1087
+ this.offsetX = (width - this.boardSize) / 2;
1088
+ this.offsetY = (height - this.boardSize) / 2;
1089
+ this.n = this.boardSize / 8;
1090
+ }
1091
+ if (!this.currentFrames) this.currentFrames = 0;
1092
+ this.currentFrames++;
1093
+ this.clear();
1094
+ this.drawBoard();
1095
+ this.drawPieces();
1096
+ this.drawCaptured();
1097
+ TextRenderer.drawText(`${Math.floor(this.chessClock.white / 60)}:${(this.chessClock.white % 60).toString().padStart(2, "0")}`, 2, 2, "#ffffff");
1098
+ TextRenderer.drawText(`${Math.floor(this.chessClock.black / 60)}:${(this.chessClock.black % 60).toString().padStart(2, "0")}`, width - offsetX - 2 - TextRenderer.getStringWidth(`${Math.floor(this.chessClock.black / 60)}:${(this.chessClock.black % 60).toString().padStart(2, "0")}`), 2, "#ffffff");
1099
+ if (this.menuScreen) {
1100
+ this.drawMenu();
1101
+ }
1102
+ }
1103
+
1104
+ drawBoard() {
1105
+ GuiUtils.drawOutline(this.offsetX + offsetY - 1, this.offsetY + offsetY - 1, width - this.offsetX - offsetX + 1, height - this.offsetY - offsetY + 1, "#ff0000");
1106
+ // totally not confusing
1107
+ for (let i = this.offsetX + offsetX; i < width - this.offsetX - offsetX; i++) {
1108
+ for (let j = this.offsetY + offsetY; j < height - this.offsetY - offsetY; j++) {
1109
+ const x = Math.floor((i - this.offsetX - offsetX) / this.n);
1110
+ const y = Math.floor((j - this.offsetY - offsetY) / this.n);
1111
+ if (this.pieces.find(p => p.position.x == x && p.position.y == y && p.type == "king" && this.inCheck == p.color)) {
1112
+ pixelMap[i][j].color = "#ff0000";
1113
+ } else if (this.selected && this.selected[0] == x && this.selected[1] == y) {
1114
+ pixelMap[i][j].color = "#ffff00";
1115
+ } else if (xor(x % 2 != 0, y % 2 != 0)) {
1116
+ pixelMap[i][j].color = colorSettings.color2;
1117
+ } else {
1118
+ pixelMap[i][j].color = colorSettings.color1;
1119
+ }
1120
+ }
1121
+ }
1122
+ }
1123
+
1124
+ drawPieces() {
1125
+ for (const piece of this.pieces) {
1126
+ piece.draw(this);
1127
+ }
1128
+ }
1129
+
1130
+ drawCaptured() {
1131
+ const whitePieces = [...new Set(this.capturedWhite.sort((a, b) => pieceValue[b.type] - pieceValue[a.type]).map(a => a.type))];
1132
+ const blackPieces = [...new Set(this.capturedBlack.sort((a, b) => pieceValue[b.type] - pieceValue[a.type]).map(a => a.type))];
1133
+ for (let k = 0; k < whitePieces.length; k++) {
1134
+ const piece = whitePieces[k];
1135
+ for (let i = 0; i < 8; i++) {
1136
+ for (let j = 0; j < 8; j++) {
1137
+ const x = i - 11 + offsetX + this.offsetX;
1138
+ const y = j + 1 + offsetY + this.offsetY + k * 9;
1139
+ if (sprites[piece][j * 8 + i]) pixelMap[x][y].color = colorSettings.white[sprites[piece][j * 8 + i]];
1140
+ }
1141
+ }
1142
+ const amount = this.capturedWhite.filter(p => p.type == piece);
1143
+ if (amount > 1) TextRenderer.drawText(offsetX + this.offsetX - 11, 1 + offsetY + this.offsetY + (k + 1) * 9);
1144
+ }
1145
+ for (let k = 0; k < blackPieces.length; k++) {
1146
+ const piece = blackPieces[k];
1147
+ for (let i = 0; i < 8; i++) {
1148
+ for (let j = 0; j < 8; j++) {
1149
+ const x = i + 3 + offsetX + this.boardSize + this.offsetX;
1150
+ const y = j + 1 + offsetY + this.offsetY + k * 9;
1151
+ if (sprites[piece][j * 8 + i]) pixelMap[x][y].color = colorSettings.black[sprites[piece][j * 8 + i]];
1152
+ }
1153
+ }
1154
+ const amount = this.capturedBlack.filter(p => p.type == piece).length;
1155
+ if (amount > 1) TextRenderer.drawText(`${amount}`, 12 + offsetX + this.boardSize + this.offsetX, 2 + offsetY + this.offsetY + k * 9, "#ffffff");
1156
+ }
1157
+ }
1158
+
1159
+ openUpgradeScreen(piece) {
1160
+ this.menuScreen = new UpgradeScreen(this, 64, 28, piece.color, piece);
1161
+ }
1162
+
1163
+ upgrade(piece, newType) {
1164
+ const types = ["queen", "rook", "bishop", "knight"]
1165
+ piece.type = types[newType];
1166
+ this.pieces.find(p => p.position.x == piece.position.x && p.position.y == piece.position.y).type = types[newType];
1167
+ this.menuScreen = null;
1168
+ const kings = {
1169
+ white: this.pieces.find(p => p.type == "king" && p.color == "white"),
1170
+ black: this.pieces.find(p => p.type == "king" && p.color == "black")
1171
+ }
1172
+ let checked = "";
1173
+ for (const king in kings) {
1174
+ const isChecked = this.isKingAttacked(king);
1175
+ if (isChecked) {
1176
+ checked = king;
1177
+ this.nonActionMoves = 0;
1178
+ this.inCheck = king;
1179
+ const isCheckmate = this.checkForCheckmate(king);
1180
+ if (isCheckmate) this.checkmate(king == "white" ? "black" : "white");
1181
+ }
1182
+ }
1183
+ if (!checked && this.inCheck) this.inCheck = null;
1184
+ }
1185
+
1186
+ handleCastling(piece, pos) {
1187
+ this.turn = !this.turn;
1188
+ piece.moveTo([pos[0], pos[1]]);
1189
+ this.pieces.find(p => p.color == piece.color && p.type == "rook" && p.position.y == piece.position.y && p.position.x == (pos[0] == 6 ? 7 : 0)).moveTo([pos[0] == 6 ? 5 : 3, pos[1]]);
1190
+ }
1191
+
1192
+ pieceMove(piece, pos, ignoreChecks = false, checkForDraw = true) {
1193
+ // castling
1194
+ if (pos[2]) return this.handleCastling(piece, pos);
1195
+ const captured = this.pieces.find(p => p.position.x == pos[0] && p.position.y == pos[1]) ?? ((pos[4] && !!this.enPassantTargetSquare) ? this.pieces.find(p => p.position.x == this.enPassantTargetSquare[0] && p.position.y == this.enPassantTargetSquare[1] && p.color != piece.color && p.type == "pawn") : null);
1196
+ if (!captured) {
1197
+ this.turn = !this.turn;
1198
+ piece.moveTo(pos);
1199
+ this.nonActionMoves++;
1200
+ if (piece.type == "pawn" && ((piece.color == "white" && piece.position.y == 0) || (piece.color == "black" && piece.position.y == 7))) {
1201
+ this.openUpgradeScreen(piece);
1202
+ }
1203
+ } else if (captured.type != "king") {
1204
+ if (piece.color == "white") this.capturedBlack.push(captured);
1205
+ else this.capturedWhite.push(captured);
1206
+ this.nonActionMoves = 0;
1207
+ this.pieces = this.pieces.filter(p => p.position.x != captured.position.x || p.position.y != captured.position.y)
1208
+ piece.moveTo(pos);
1209
+ this.turn = !this.turn;
1210
+ if (piece.type == "pawn" && ((piece.color == "white" && piece.position.y == 0) || (piece.color == "black" && piece.position.y == 7))) {
1211
+ this.openUpgradeScreen(piece);
1212
+ }
1213
+ }
1214
+ if (pos[3]) {
1215
+ this.enPassantTargetSquare = pos;
1216
+ // reset after every move that doesnt allow en passant
1217
+ } else if (this.enPassantTargetSquare || pos[4]) this.enPassantTargetSquare = null;
1218
+ const kings = {
1219
+ white: this.pieces.find(p => p.type == "king" && p.color == "white"),
1220
+ black: this.pieces.find(p => p.type == "king" && p.color == "black")
1221
+ }
1222
+ let checked = "";
1223
+ if (!ignoreChecks) {
1224
+ for (const king in kings) {
1225
+ const isChecked = this.isKingAttacked(king);
1226
+ if (isChecked) {
1227
+ checked = king;
1228
+ this.nonActionMoves = 0;
1229
+ this.inCheck = king;
1230
+ const isCheckmate = this.checkForCheckmate(king);
1231
+ if (isCheckmate) this.checkmate(king == "white" ? "black" : "white");
1232
+ }
1233
+ }
1234
+ }
1235
+ if (!checked && this.inCheck) this.inCheck = null;
1236
+ if (checkForDraw) {
1237
+ this.positions.push(this.positionToHash());
1238
+ const draw = this.checkForDraw();
1239
+ if (draw[0]) this._draw(draw[1]);
1240
+ }
1241
+ }
1242
+
1243
+ positionToHash() {
1244
+ const board = this.getBoard();
1245
+ const pieceTypes = {
1246
+ "pawn": BigInt(1 << 0),
1247
+ "knight": BigInt(1 << 1),
1248
+ "bishop": BigInt(1 << 2),
1249
+ "rook": BigInt(1 << 3),
1250
+ "queen": BigInt(1 << 4),
1251
+ "king": BigInt(1 << 5),
1252
+ }
1253
+ const colors = {
1254
+ "white": BigInt(1 << 6),
1255
+ "black": BigInt(1 << 7)
1256
+ }
1257
+ let hash = BigInt(0);
1258
+ let flag = false;
1259
+ for (let i = 0; i < 8; i++) {
1260
+ for (let j = 0; j < 8; j++) {
1261
+ const piece = board[i][j];
1262
+ if (flag) hash <<= BigInt(8);
1263
+ if (!piece) {
1264
+ hash >>= BigInt(7);
1265
+ hash |= BigInt(0);
1266
+ }
1267
+ else hash |= (colors[piece.color] | pieceTypes[piece.type]);
1268
+ flag = true;
1269
+ }
1270
+ }
1271
+ return hash;
1272
+ }
1273
+
1274
+ isKingAttacked(color) {
1275
+ const king = this.pieces.find(p => p.type == "king" && p.color == color);
1276
+ const pos = [king.position.x, king.position.y];
1277
+ const attackers = this.getAttackersAt(pos, color == "white" ? "black" : "white");
1278
+ return attackers.length > 0;
1279
+ }
1280
+
1281
+ // deep copies in javascript are so fucking annoying
1282
+ clone() {
1283
+ const newScreen = new GameScreen();
1284
+ newScreen.selected = structuredClone(this.selected);
1285
+ newScreen.pieces = structuredClone(this.pieces);
1286
+ newScreen.pieces.forEach(p => Object.setPrototypeOf(p, Piece.prototype));
1287
+ newScreen.enPassantTargetSquare = structuredClone(this.enPassantTargetSquare);
1288
+ // true = white
1289
+ newScreen.turn = structuredClone(this.turn);
1290
+ newScreen.chessClock = structuredClone(this.chessClock);
1291
+ newScreen.inCheck = structuredClone(this.inCheck);
1292
+ return newScreen;
1293
+ }
1294
+
1295
+ resetBoard() {
1296
+ this.menuScreen = null;
1297
+ this.selected = null;
1298
+ this.pieces = loadFEN("rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1");
1299
+ this.castlingWhite = true;
1300
+ this.castlingBlack = true;
1301
+ this.capturedWhite = [];
1302
+ this.capturedBlack = [];
1303
+ this.nonActionMoves = 0;
1304
+ this.positions = [];
1305
+ this.enPassantTargetSquare = null;
1306
+ // true = white
1307
+ this.turn = true;
1308
+ this.chessClock = {
1309
+ white: 60 * 5,
1310
+ black: 60 * 5
1311
+ }
1312
+ this.inCheck = null;
1313
+ this.unpause();
1314
+ }
1315
+
1316
+ timeout(winningColor) {
1317
+ this.menuScreen = new WinScreen(this, 0.85 * screenWidth, 0.5 * screenHeight, winningColor, true);
1318
+ this.pause();
1319
+ }
1320
+
1321
+ checkmate(winningColor) {
1322
+ this.menuScreen = new WinScreen(this, 0.85 * screenWidth, 0.5 * screenHeight, winningColor);
1323
+ this.pause();
1324
+ }
1325
+
1326
+ _draw(type) {
1327
+ this.menuScreen = new DrawScreen(this, 0.85 * screenWidth, 0.5 * screenHeight, type);
1328
+ this.pause();
1329
+ }
1330
+
1331
+ checkForDraw() {
1332
+ // 50-move rule
1333
+ if (this.nonActionMoves >= 100) return [true, 0];
1334
+ const whitePieces = this.pieces.filter(p => p.color == "white");
1335
+ const blackPieces = this.pieces.filter(p => p.color == "black");
1336
+ const cond1 = whitePieces.length == 1 || (whitePieces.length == 2 && whitePieces.find(p => p.type == "rook" || p.type == "bishop"));
1337
+ const cond2 = blackPieces.length == 1 || (blackPieces.length == 2 && blackPieces.find(p => p.type == "rook" || p.type == "bishop"));
1338
+ // insufficient material
1339
+ if (cond1 && cond2) return [true, 1];
1340
+ // stalemate
1341
+ if (this.pieces.filter(p => p.color == this.turn ? "white" : "black" && p.getLegalMoves(this.getBoard(), this).length > 0).length == 0 && (this.inCheck != this.turn ? "white" : "black")) return [true, 2];
1342
+ // threefold repetition
1343
+ if (this.positions.filter(p => p == this.positionToHash()).length >= 3) return [true, 3];
1344
+ return [false];
1345
+ }
1346
+
1347
+ checkForCheckmate(color) {
1348
+ if (!this.isKingAttacked(color)) return false;
1349
+ const pieces = this.pieces.filter(p => p.color == color);
1350
+ const savingMoves = [];
1351
+ for (const piece of pieces) {
1352
+ for (const move of piece.getPossibleMoves(this.getBoard(), this)) {
1353
+ const screen = this.clone();
1354
+ const piece2 = screen.pieces.find(p => p.position.x == piece.position.x && p.position.y == piece.position.y);
1355
+ screen.pieceMove(piece2, move, true, false);
1356
+ if (!screen.isKingAttacked(color)) {
1357
+ savingMoves.push([piece, move]);
1358
+ }
1359
+ }
1360
+ }
1361
+ return savingMoves.length == 0;
1362
+ }
1363
+
1364
+ getBoard() {
1365
+ const board = [];
1366
+ for (let i = 0; i < 8; i++) {
1367
+ board[i] = [];
1368
+ for (let j = 0; j < 8; j++) {
1369
+ board[i][j] = this.pieces.find(p => p.position.x == i && p.position.y == j) ?? null;
1370
+ }
1371
+ }
1372
+ return board;
1373
+ }
1374
+
1375
+ getAttackersAt(pos, color) {
1376
+ const attackers = [];
1377
+ for (const piece of this.pieces.filter(p => p.color == color && p.type != "king")) {
1378
+ if (piece.getPossibleMoves(this.getBoard(), this).find(m => m[0] == pos[0] && m[1] == pos[1])) attackers.push(piece);
1379
+ }
1380
+ return attackers;
1381
+ }
1382
+
1383
+ drawMenu() {
1384
+ this.drawOverlay();
1385
+ GuiUtils.drawRect(this.menuScreen.getOffsetX(), Math.floor((screenHeight - this.menuScreen.height) / 2) - 2, this.menuScreen.getOffsetX() + this.menuScreen.width, this.menuScreen.getOffsetY(), "#1e1e1e");
1386
+ TextRenderer.drawCenteredText(this.menuScreen.name, (this.menuScreen.width / 2) + this.menuScreen.getOffsetX(), Math.floor((screenHeight - this.menuScreen.height) / 2) - 1, "#ffffff");
1387
+ this.menuScreen.draw();
1388
+ }
1389
+
1390
+ drawOverlay() {
1391
+ for (let i = offsetX; i < width - offsetX; i++) {
1392
+ for (let j = offsetY; j < height - offsetY; j++) {
1393
+ pixelMap[i][j].color = "#" + colorLerp(pixelMap[i][j].color, "#000000", 0.5);
1394
+ }
1395
+ }
1396
+ }
1397
+
1398
+ onKey(ev) {
1399
+ if (this.menuScreen) {
1400
+ this.menuScreen.onKey(ev);
1401
+ }
1402
+ }
1403
+
1404
+ onMouseClick(ev) {
1405
+ if (outOfBounds(mousePos.x, mousePos.y)) return;
1406
+ if (!this.offsetX || !this.offsetY) return;
1407
+ if (this.menuScreen) this.menuScreen.onClick(ev);
1408
+ if (mousePos.x <= offsetX + this.offsetX || mousePos.x >= offsetX + this.offsetX + this.boardSize || mousePos.y <= offsetY + this.offsetY || mousePos.y >= offsetY + this.offsetY + this.boardSize) return;
1409
+ const newPos = [Math.floor((mousePos.x - this.offsetX - offsetX) / this.n), Math.floor((mousePos.y - this.offsetY - offsetY) / this.n)];
1410
+ if (!this.selected) {
1411
+ const piece = this.pieces.find(p => p.position.x == newPos[0] && p.position.y == newPos[1]);
1412
+ if (piece && ((piece.color == "white" && this.turn) || (piece.color == "black" && !this.turn))) this.selected = newPos;
1413
+ } else {
1414
+ const piece = this.pieces.find(p => p.position.x == this.selected[0] && p.position.y == this.selected[1]);
1415
+ if (piece && ((piece.color == "white" && this.turn) || (piece.color == "black" && !this.turn))) {
1416
+ piece.handleSelection(newPos, this);
1417
+ this.selected = null;
1418
+ } else this.selected = null;
1419
+ }
1420
+ }
1421
+ }
1422
+
1423
+ const game = new GameScreen();
1424
+
1425
+ setInterval(cellTick, (1000/(tps*4)));
1426
+ setInterval(() => {game.clock()}, 1000);
1427
+
1428
+ function cellTick() {
1429
+ if (running && !paused) {
1430
+ game.draw();
1431
+ }
1432
+ }
1433
+
1434
+ runAfterLoadList.push(() => {
1435
+ if (!localStorage.getItem("chessjs-tutorial")) {
1436
+ // "might break"
1437
+ // i know damn well it will 100% break on mobile
1438
+ alert("To start or restart chess board press 'u'. Might break on different resolutions and on mobile.");
1439
+ localStorage.setItem("chessjs-tutorial", true);
1440
+ }
1441
+ })
1442
+
1443
+ window.addEventListener("keydown", (ev) => {
1444
+ if (ev.key == "u") {
1445
+ if (!running) {
1446
+ for (let i = offsetX; i < width - offsetX; i++) {
1447
+ for (let j = offsetY; j < height - offsetY; j++) {
1448
+ if (pixelMap[i][j]) deletePixel(i, j);
1449
+ createPixel("screen", i, j);
1450
+ }
1451
+ }
1452
+ running = true;
1453
+ }
1454
+ game.resetBoard();
1455
+ } else {
1456
+ game.onKey(ev);
1457
+ }
1458
+ })
1459
+
1460
+ window.addEventListener("mousedown", (ev) => {
1461
+ game.onMouseClick(ev);
1462
+ })
1463
+ }