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,2479 @@
1
+ function whenAvailable(names, callback) {
2
+ var interval = 10; // ms
3
+ window.setTimeout(function() {
4
+ let bool = true;
5
+ for(let i = 0; i < names.length; i++)
6
+ {
7
+ if(!window[names[i]])
8
+ {
9
+ bool = false;
10
+ }
11
+ }
12
+ if (bool) {
13
+ callback();
14
+ } else {
15
+ whenAvailable(names, callback);
16
+ }
17
+ }, interval);
18
+ }
19
+ var modName = "mods/generative_mods.js";
20
+ var explodeAtPlusMod = "mods/explodeAtPlus.js";
21
+ var runAfterAutogenMod = "mods/runAfterAutogen2.js";
22
+ var libraryMod = "mods/code_library.js";
23
+ var feyAndMoreMod = "mods/fey_and_more.js";
24
+ var mobsMod = "mods/mobs.js";
25
+
26
+ if(enabledMods.includes(runAfterAutogenMod) && enabledMods.includes(explodeAtPlusMod) && enabledMods.includes(libraryMod) && enabledMods.includes(feyAndMoreMod) && enabledMods.includes(mobsMod)) {
27
+ whenAvailable(["eLists","explodeAtPlus","urlParams","runAfterAutogen","mobsLoaded"], function() {
28
+
29
+ //urlParams reads
30
+
31
+ //Bombs
32
+
33
+ if(urlParams.get('generateBombs') !== null) { //if the variable exists at all
34
+ generateBombs = true
35
+ } else { //if it doesn't (and it returns null)
36
+ generateBombs = false
37
+ }
38
+
39
+ if(urlParams.get('bombAmount') != null) { //null check
40
+ bombAmount = urlParams.get('bombAmount')
41
+ if(isNaN(bombAmount) || bombAmount === "" || bombAmount === null) { //NaN check
42
+ bombAmount = 10
43
+ }
44
+ bombAmount = parseInt(bombAmount)
45
+ if(bombAmount > 50) {
46
+ alert("Maximum amount of additional bomb/anti-bomb pairs is 50.\nOnly 50 were added.")
47
+ } else if(bombAmount < 1) {
48
+ alert("Minimum amount of additional bomb/anti-bomb pairs is 1.\n1 pair was added.")
49
+ }
50
+ bombAmount = Math.min(50,Math.max(bombAmount,1))
51
+ } else {
52
+ bombAmount = 10
53
+ }
54
+
55
+ //Clouds
56
+
57
+ if(urlParams.get('generateClouds') !== null) { //if the variable exists at all
58
+ generateClouds = true
59
+ } else { //if it doesn't (and it returns null)
60
+ generateClouds = false
61
+ }
62
+
63
+ if(urlParams.get('cloudIncludeRandom') !== null) { //if the variable exists at all
64
+ cloudIncludeRandom = true
65
+ } else { //if it doesn't (and it returns null)
66
+ cloudIncludeRandom = false
67
+ }
68
+
69
+ //Creepers
70
+
71
+ //Include generated creepers in Random tool?
72
+ if(urlParams.get('creeperIncludeRandom') !== null) { //if the variable exists at all
73
+ creeperIncludeRandom = true
74
+ } else { //if it doesn't (and it returns null)
75
+ creeperIncludeRandom = false
76
+ }
77
+
78
+ //Generate creepers
79
+ if(urlParams.get('generateCreepers') !== null) { //if the variable exists at all
80
+ generateCreepers = true
81
+ } else { //if it doesn't (and it returns null)
82
+ generateCreepers = false
83
+ }
84
+
85
+ //Fairies
86
+
87
+ if(urlParams.get('fairyIncludeRandom') !== null) { //if the variable exists at all
88
+ fairyIncludeRandom = true
89
+ } else { //if it doesn't (and it returns null)
90
+ fairyIncludeRandom = false
91
+ }
92
+
93
+ //Generate fairies
94
+ if(urlParams.get('generateFairies') !== null) { //if the variable exists at all
95
+ generateFairies = true
96
+ } else { //if it doesn't (and it returns null)
97
+ generateFairies = false
98
+ }
99
+
100
+ if(urlParams.get('fairyAmount') != null) { //null check
101
+ fairyAmount = urlParams.get('fairyAmount')
102
+ if(isNaN(fairyAmount) || fairyAmount === "" || fairyAmount === null) { //NaN check
103
+ fairyAmount = 10
104
+ }
105
+ fairyAmount = parseInt(fairyAmount)
106
+ if(fairyAmount > 10000) {
107
+ alert("Maximum amount of additional fairies is 10000.\nOnly 10000 fairies were added.")
108
+ } else if(fairyAmount < 1) {
109
+ alert("Minimum amount of additional fairies is 1.\n1 fairy was added.")
110
+ }
111
+ fairyAmount = Math.min(10000,Math.max(fairyAmount,1))
112
+ } else {
113
+ fairyAmount = 10
114
+ }
115
+
116
+ //Spouts
117
+
118
+ //Generate spouts
119
+ if(urlParams.get('generateSpouts') !== null) { //if the variable exists at all
120
+ generateSpouts = true
121
+ } else { //if it doesn't (and it returns null)
122
+ generateSpouts = false
123
+ }
124
+
125
+ if(urlParams.get('spoutIncludeRandom') !== null) { //if the variable exists at all
126
+ spoutIncludeRandom = true
127
+ } else { //if it doesn't (and it returns null)
128
+ spoutIncludeRandom = false
129
+ }
130
+
131
+ //Requisite variables
132
+
133
+ //Bombs
134
+
135
+ amalgamatedBombFire = "plasma,plasma,plasma,plasma,plasma,plasma,plasma,plasma,plasma,plasma,plasma,plasma,smoke,plasma,plasma,fire,smoke,fire,smoke,plasma,metal_scrap,metal_scrap,metal_scrap,metal_scrap,metal_scrap,acid,acid,oil,oil,oil,oil,oil,oil,oil,plasma,plasma,plasma,plasma,plasma,smoke,plasma,plasma,fire,smoke,plasma,metal_scrap,metal_scrap,metal_scrap,metal_scrap,metal_scrap,metal_scrap,flash,flash,flash,flash,flash,acid_gas,acid_gas,acid_gas,acid,oil,oil,oil,oil,oil,oil,oil,oil,oil,oil,plasma,plasma,plasma,plasma,metal_scrap,metal_scrap,metal_scrap,metal_scrap,metal_scrap,acid,acid,oil,oil,oil,oil,oil,oil,oil,plasma,plasma,plasma,plasma,plasma,smoke,plasma,plasma,fire,smoke,plasma,metal_scrap,metal_scrap,metal_scrap,metal_scrap,metal_scrap,metal_scrap,electric_cluster_bomb,electric_cluster_bomb,flash,flash,flash,flash,flash,acid_gas,acid_gas,acid_gas,acid,oil,oil,oil,oil,oil,oil,oil,oil,oil,oil,plasma,plasma,plasma,plasma,plague,plague,plague,plague,plague,plague,radiation,radiation,radiation,radiation,radiation,radiation,radiation,radiation,uranium,uranium,uranium,uranium,uranium,uranium,greek_fire,greek_fire,greek_fire,greek_fire,greek_fire,antimatter,antimatter,antimatter,antimatter,antimatter,smoke_grenade,antimatter,smoke_grenade,fireball,flash,acid_gas,acid_gas,acid_gas,plague,plague,plague,plague,plague,plague,radiation,radiation,radiation,radiation,radiation,radiation,radiation,radiation,uranium,uranium,uranium,uranium,uranium,uranium,greek_fire,greek_fire,greek_fire,greek_fire,greek_fire,antimatter,antimatter,antimatter,antimatter,antimatter,smoke_grenade,antimatter,flash,acid_gas,acid_gas,acid_gas,radiation,radiation,radiation,radiation,plague,acid_gas,acid_gas,acid_gas,chlorine,chlorine,chlorine"
136
+ eLists.BOMB = ["bomb", "tnt", "c4", "grenade", "dynamite", "gunpowder", "firework", "nuke", "h_bomb", "dirty_bomb", "emp_bomb", "sticky_bomb", "cold_bomb", "hot_bomb", "electro_bomb", "water_bomb", "antimatter_bomb", "flashbang", "smoke_grenade", "fireball", "landmine", "cluster_bomb", "cluster_nuke", "op_hottester_bomb", "anti-bomb", "electric_bomblet", "electric_cluster_bomb", "radioactive_popper", "acid_bomb", "amalgamated_bomb"]; bombChoices = eLists.BOMB;
137
+ var excludedBombElements = ["water", "antimatter", "acid"];
138
+
139
+ //Clouds
140
+
141
+ eLists.CLOUD = ["cloud", "rain_cloud", "snow_cloud", "fire_cloud", "hail_cloud", "acid_cloud", "pyrocumulus"]; cloudChoices = eLists.CLOUD;
142
+ var includedClouds = ["cloud", "rain_cloud", "snow_cloud", "fire_cloud", "hail_cloud", "acid_cloud", "pyrocumulus"];
143
+ var excludedCloudElements = ["snow", "fire", "hail", "acid"];
144
+ if(typeof(behaviorGenerators) === "undefined") { behaviorGenerators = {} };
145
+
146
+ //Creepers
147
+
148
+ var placeholderColor = "#FF00FF";
149
+ var hslOffsets = [[0, -5, 5], [0, -20, 10], [0, 0, 10], [0, -20, 10], [0, -35, 0], [0, -20, -30], [0, 10, -10], [0, 10, 20], [0, -20, 10], [0, -10, 5]];
150
+ var colorOfRandomCreeper = ["#7ba883", "#8aba8a", "#87b292", "#8aba8a", "#71a171", "#346434", "#4d6d72", "#a0caad", "#8aba8a", "#7dac7f"]
151
+
152
+ //Fairies
153
+
154
+ var excludedFairyElements = []
155
+ var backupCategoryWhitelist = ["land","powders","weapons","food","life","corruption","states","fey","Fantastic Creatures","dyes","energy liquids","random liquids","random gases","random rocks"];
156
+ var backupElementWhitelist = ["mercury", "chalcopyrite_ore", "chalcopyrite_dust", "copper_concentrate", "fluxed_copper_concentrate", "unignited_pyrestone", "ignited_pyrestone", "everfire_dust", "extinguished_everfire_dust", "mistake", "polusium_oxide", "vaporized_polusium_oxide", "glowstone_dust", "redstone_dust", "soul_mud", "wet_soul_sand", "nitrogen_snow", "fusion_catalyst", "coal", "coal_coke", "blast_furnace_fuel", "molten_mythril"];
157
+
158
+ //Spouts
159
+ eLists.SPOUT = ["spout", "udder", "torch"]; spoutChoices = eLists.SPOUT;
160
+ var excludedSpoutElements = ["ketchup", "liquid_cloner", "fire_cloner"]
161
+ var includedSpouts = ["ketchup_spout", "spout", "udder", "torch"]
162
+ var backupCategoryWhitelist = ["land","powders","weapons","food","life","corruption","states","fey","Fantastic Creatures","dyes","energy liquids","random liquids","random gases","random rocks"];
163
+ var backupElementWhitelist = ["mercury", "chalcopyrite_ore", "chalcopyrite_dust", "copper_concentrate", "fluxed_copper_concentrate", "unignited_pyrestone", "ignited_pyrestone", "everfire_dust", "extinguished_everfire_dust", "mistake", "polusium_oxide", "vaporized_polusium_oxide", "glowstone_dust", "redstone_dust", "soul_mud", "wet_soul_sand", "nitrogen_snow", "fusion_catalyst", "coal", "coal_coke", "blast_furnace_fuel", "molten_mythril"];
164
+
165
+
166
+ //Requisite non-generating functions
167
+
168
+ //Bombs
169
+
170
+ function firebombFire(pixel,x,y,radius,fire,smoke,power,damage) {
171
+ var coords = circleCoords(pixel.x,pixel.y,radius);
172
+ for (var i = 0; i < coords.length; i++) {
173
+ var x = coords[i].x;
174
+ var y = coords[i].y;
175
+ if(!isEmpty(x,y,true)) {
176
+ var pixel = pixelMap[x][y];
177
+ var info = elements[pixel.element];
178
+ var cursedFireChance = 0.15 + power;
179
+ if (info.burn) { //Light everything on fire
180
+ pixel.burning = true;
181
+ pixel.burnStart = pixelTicks;
182
+ pixel.temp += 10; //smoke prevention
183
+ } else if(Math.random() < cursedFireChance) { //(15+power)%/px cursed burning
184
+ pixel.burning = true;
185
+ pixel.burnStart = pixelTicks;
186
+ pixel.temp += 10;
187
+ };
188
+ } else if(isEmpty(x,y)) { //if there's space for fire
189
+ if (Array.isArray(fire)) { //this should remain "fire"
190
+ var newfire = fire[Math.floor(Math.random() * fire.length)];
191
+ } else {
192
+ var newfire = fire;
193
+ };
194
+ createPixel(newfire,x,y); //add fire
195
+ var firePixel = pixelMap[x][y];
196
+ firePixel.temp = Math.max(elements[newfire].temp,firePixel.temp);
197
+ firePixel.burning = true;
198
+ };
199
+ };
200
+ };
201
+
202
+ function hotterBomb(pixel,x,y,radius,fire,smoke,power,damage) {
203
+ //console.log(`Radius: ${radius}\nPower: ${power}\nPixel: (${pixel.x},${pixel.y})\nDamage: ${damage}`);
204
+ //console.log(`Expected temperature increase for pixel at (${pixel.x},${pixel.y}): ${800 * ((1 + (7 * damage)) ** 2) * ((power ** 2) * 1.5)}`);
205
+ pixel.temp += (800 * ((1 + (7 * damage)) ** 2) * ((power ** 2) * 1.5));
206
+ };
207
+
208
+ function empCharge(pixel,x,y,radius,fire,smoke,power,damage) {
209
+ var info = elements[pixel.element];
210
+ if(info.conduct) {
211
+ var distanceFromEdge = Math.max(0,radius - coordPyth(pixel.x,pixel.y,x,y));
212
+ var radiusRelatedIncrease = Math.sqrt(distanceFromEdge/5);
213
+ pixel.charge ??= 0;
214
+ pixel.charge += (50 * radiusRelatedIncrease);
215
+ pixel.temp += 700/bound(info.conduct,0.1,1);
216
+ };
217
+ };
218
+
219
+ function starbombHeat(pixel,x,y,radius,fire,smoke,power,damage) { //Massively heats depending on distance from explosion center
220
+ var distanceFromEdge = Math.max(0,radius - coordPyth(pixel.x,pixel.y,x,y));
221
+ var radiusRelatedIncrease = 10 ** logN(distanceFromEdge,5);
222
+ pixel.temp += (10000 * radiusRelatedIncrease);
223
+ pixelTempCheck(pixel);
224
+ };
225
+
226
+ //Clouds
227
+
228
+ behaviorGenerators.cloud = function(element) {
229
+ if(element instanceof Array) { element = element.join(",") };
230
+ return [
231
+ ["XX","XX","XX"],
232
+ ["XX",`CH:${element}%0.05`,"M1%2.5 AND BO"],
233
+ ["XX","XX","XX"]
234
+ ];
235
+ };
236
+
237
+ behaviorGenerators.heavy_cloud = function(element) {
238
+ if(element instanceof Array) { element = element.join(",") };
239
+ return [
240
+ ["XX","XX","XX"],
241
+ ["XX",`CH:${element}%0.1`,"M1%2.5 AND BO"],
242
+ ["XX",`CR:${element}%0.05`,"XX"]
243
+ ];
244
+ };
245
+
246
+ behaviorGenerators.heavier_cloud = function(element) {
247
+ if(element instanceof Array) { element = element.join(",") };
248
+ return [
249
+ ["XX","XX","XX"],
250
+ ["XX",`CH:${element}%0.2`,"M1%2.5 AND BO"],
251
+ ["XX",`CR:${element}%0.1`,"XX"]
252
+ ];
253
+ };
254
+
255
+ behaviorGenerators.heaviest_cloud = function(element) {
256
+ if(element instanceof Array) { element = element.join(",") };
257
+ return [
258
+ ["XX","XX","XX"],
259
+ ["XX",`CH:${element}%0.4`,"M1%2.5 AND BO"],
260
+ ["XX",`CR:${element}%0.2`,"XX"]
261
+ ];
262
+ };
263
+
264
+ behaviorGenerators.heaviester_cloud = function(element) {
265
+ if(element instanceof Array) { element = element.join(",") };
266
+ return [
267
+ ["XX","XX","XX"],
268
+ ["XX",`CH:${element}%0.8`,"M1%2.5 AND BO"],
269
+ ["XX",`CR:${element}%0.4`,"XX"]
270
+ ];
271
+ };
272
+
273
+ behaviorGenerators.heaviestest_cloud = function(element) {
274
+ if(element instanceof Array) { element = element.join(",") };
275
+ return [
276
+ ["XX",`CR:${element}%0.8`,"XX"],
277
+ [`CR:${element}%0.05`,`CH:${element}%3`,`CR:${element}%0.05 AND M1%2.5 AND BO`],
278
+ ["XX",`CR:${element}%0.8`,"XX"]
279
+ ];
280
+ };
281
+
282
+ function placeDownwardColumn(element,xx,yy,creationChance) {
283
+ if(element.includes(",")) { element = element.split(",") };
284
+ var newElement = element;
285
+ //console.log(JSON.stringify(element));
286
+ //console.log("from " + xx + "," + yy)
287
+ if(!outOfBounds(xx,yy)) {
288
+ for(i = yy; i < pixelMap[xx].length; i++) {
289
+ if(Array.isArray(element)) {
290
+ newElement = element[Math.floor(Math.random() * element.length)];
291
+ };
292
+ //console.log(JSON.stringify(newElement));
293
+ if(isEmpty(xx,i,false)) {
294
+ if(Math.random() < creationChance) {
295
+ createPixel(newElement,xx,i)
296
+ }
297
+ } else if(!isEmpty(xx,i,true)) {
298
+ var newPixel = pixelMap[xx][i];
299
+ var otherElement = newPixel.element;
300
+ var newState = elements[otherElement].state ?? "solid"; //assume undefined = solid
301
+ if(newState !== "solid") {
302
+ continue;
303
+ } else {
304
+ break;
305
+ };
306
+ } else if(outOfBounds(xx,i)) {
307
+ break;
308
+ };
309
+ };
310
+ };
311
+ };
312
+
313
+ function singleColumn(pixel,element,chance,fillAmountDecimal) {
314
+ if(Math.random() < chance) {
315
+ placeDownwardColumn(element,pixel.x,pixel.y+1,fillAmountDecimal);
316
+ }
317
+ };
318
+
319
+ function multiColumn(pixel,element,chance,fillAmountDecimal,columnRadius) {
320
+ if(Math.random() < chance) {
321
+ for(j = 0 - columnRadius; j <= columnRadius; j++) {
322
+ placeDownwardColumn(element,pixel.x+j,pixel.y+1,fillAmountDecimal);
323
+ };
324
+ }
325
+ };
326
+
327
+ //Creepers
328
+
329
+ autoCreeperPlacerTick = function(pixel) {
330
+ var creeperElement = elements[pixel.element].creeperType;
331
+ var headName,bodyName;
332
+ if(typeof(creeperElement === "string")) { //comma separated string check
333
+ if(creeperElement.includes(",")) { //if it is
334
+ creeperElement = creeperElement.split(","); //to array
335
+ creeperElement = creeperElement.filter(function(e) { //strip nonexistent elements
336
+ return typeof(elements[e]) === "object";
337
+ });
338
+ };
339
+ };
340
+ if(Array.isArray(creeperElement)) {
341
+ headName = `${creeperElement.join("_")}_creeper_head`; //auto head element name
342
+ bodyName = `${creeperElement.join("_")}_creeper_body`; //auto body element name
343
+ } else {
344
+ headName = `${creeperElement}_creeper_head`; //auto head element name
345
+ bodyName = `${creeperElement}_creeper_body`; //auto body element name
346
+ };
347
+ if (isEmpty(pixel.x, pixel.y+1)) {
348
+ createPixel(bodyName, pixel.x, pixel.y+1);
349
+ pixel.element = headName;
350
+ pixel.color = pixelColorPick(pixel)
351
+ } else if (isEmpty(pixel.x, pixel.y-1)) {
352
+ createPixel(headName, pixel.x, pixel.y-1);
353
+ pixel.element = bodyName;
354
+ pixel.color = pixelColorPick(pixel)
355
+ } else {
356
+ deletePixel(pixel.x, pixel.y);
357
+ };
358
+ };
359
+
360
+ autoCreeperBodyTick = function(pixel) {
361
+ var creeperElement = elements[pixel.element].creeperType;
362
+ var headName,bodyName,explodeInto;
363
+ if(typeof(creeperElement === "string")) { //comma separated string check
364
+ if(creeperElement.includes(",")) { //if it is
365
+ creeperElement = creeperElement.split(","); //to array
366
+ creeperElement = creeperElement.filter(function(e) { //strip nonexistent elements
367
+ return typeof(elements[e]) === "object";
368
+ });
369
+ };
370
+ };
371
+ if(Array.isArray(creeperElement)) {
372
+ headName = `${creeperElement.join("_")}_creeper_head`; //auto head element name
373
+ bodyName = `${creeperElement.join("_")}_creeper_body`; //auto body element name
374
+ explodeInto = creeperElement.join(","); //auto body element name
375
+ } else {
376
+ headName = `${creeperElement}_creeper_head`; //auto head element name
377
+ bodyName = `${creeperElement}_creeper_body`; //auto body element name
378
+ explodeInto = creeperElement; //auto body element name
379
+ };
380
+ if (tryMove(pixel, pixel.x, pixel.y+1)) { // Fall
381
+ if (!isEmpty(pixel.x, pixel.y-2, true)) { // Drag head down
382
+ var headPixel = pixelMap[pixel.x][pixel.y-2];
383
+ if (headPixel.element == headName) {
384
+ if (isEmpty(pixel.x, pixel.y-1)) {
385
+ movePixel(pixelMap[pixel.x][pixel.y-2], pixel.x, pixel.y-1);
386
+ }
387
+ else {
388
+ swapPixels(pixelMap[pixel.x][pixel.y-2], pixelMap[pixel.x][pixel.y-1]);
389
+ }
390
+ }
391
+ }
392
+ }
393
+ doHeat(pixel);
394
+ doBurning(pixel);
395
+ doElectricity(pixel);
396
+ if (pixel.dead) {
397
+ // Turn into rotten_meat if pixelTicks-dead > 500
398
+ if (pixelTicks-pixel.dead > 200) {
399
+ Math.random() < 0.1 ? changePixel(pixel,"gunpowder") : changePixel(pixel,"rotten_meat");
400
+ }
401
+ return
402
+ }
403
+
404
+ // Find the head
405
+ if (!isEmpty(pixel.x, pixel.y-1, true) && pixelMap[pixel.x][pixel.y-1].element == headName) {
406
+ var head = pixelMap[pixel.x][pixel.y-1];
407
+ if (head.dead) { // If head is dead, kill body
408
+ pixel.dead = head.dead;
409
+ }
410
+ }
411
+ else { var head = null }
412
+
413
+ if (isEmpty(pixel.x, pixel.y-1)) {
414
+ // create blood if decapitated 10% chance
415
+ if (Math.random() < 0.1) {
416
+ createPixel("blood", pixel.x, pixel.y-1);
417
+ // set dead to true 15% chance
418
+ if (Math.random() < 0.15) {
419
+ pixel.dead = pixelTicks;
420
+ }
421
+ }
422
+ }
423
+ else if (head == null) { return }
424
+ else if (Math.random() < 0.1) { // Move 10% chance
425
+ var movesToTry = [
426
+ [1*pixel.dir,0],
427
+ [1*pixel.dir,-1],
428
+ ];
429
+ // While movesToTry is not empty, tryMove(pixel, x, y) with a random move, then remove it. if tryMove returns true, break.
430
+ while (movesToTry.length > 0) {
431
+ var move = movesToTry.splice(Math.floor(Math.random() * movesToTry.length), 1)[0];
432
+ if (isEmpty(pixel.x+move[0], pixel.y+move[1]-1)) {
433
+ if (tryMove(pixel, pixel.x+move[0], pixel.y+move[1])) {
434
+ movePixel(head, head.x+move[0], head.y+move[1]);
435
+ break;
436
+ };
437
+ };
438
+ };
439
+ // 15% chance to change direction while not chasing a human
440
+ if(!head.following) {
441
+ if (Math.random() < 0.15) {
442
+ pixel.dir *= -1;
443
+ //console.log("*turns around cutely to face ${pixel.dir < 0 ? 'left' : 'right'}*");
444
+ };
445
+ }/* else {
446
+ //console.log("*chases cutely*");
447
+ };*/
448
+ };
449
+
450
+ if(pixel.charge) {
451
+ pixel.charged = true;
452
+ };
453
+
454
+ if(head) {
455
+ if(typeof(head.charge) !== "undefined") {
456
+ if(head.charge) {
457
+ pixel.charged = true;
458
+ };
459
+ };
460
+ if(typeof(head.charged) !== "undefined") {
461
+ if(head.charged) {
462
+ pixel.charged = true;
463
+ };
464
+ };
465
+ };
466
+
467
+ if(typeof(pixel.charged) === "undefined") {
468
+ pixel.charged = false;
469
+ };
470
+
471
+ if(pixel.charged) {
472
+ var explosionRadius = 7;
473
+ if(!pixel.didChargeBlueTinted) { //do once, on initial charge
474
+ //console.log("something something halsey lyric");
475
+ var color = pixel.color;
476
+ if(color.startsWith("rgb")) {
477
+ //console.log("rgb detected");
478
+ color = color.split(","); //split color for addition
479
+ var red = parseFloat(color[0].substring(4));
480
+ var green = parseFloat(color[1]);
481
+ var blue = parseFloat(color[2].slice(0,-1));
482
+ red = rgbColorBound(red + 51);
483
+ green = rgbColorBound(green + 51);
484
+ blue = rgbColorBound(blue + 102);
485
+ color = `rgb(${red},${green},${blue})`;
486
+ pixel.color = color;
487
+ //console.log("color set");
488
+ } else if(color.startsWith("hsl")) {
489
+ //console.log("hsl detected");
490
+ color = color.split(","); //split color for addition
491
+ var hue = parseFloat(color[0].substring(4));
492
+ var saturation = parseFloat(color[1].slice(0,-1));
493
+ var luminance = parseFloat(color[2].slice(0,-2));
494
+ hue = hue % 360; //piecewise hue shift
495
+ if(hue <= 235 && hue >= 135) {
496
+ hue = 185;
497
+ } else if(hue < 135) {
498
+ hue += 50;
499
+ } else if(hue > 235 && hue < 360) {
500
+ hue -= 50;
501
+ };
502
+ saturation = slBound (saturation + 10);
503
+ luminance = slBound(luminance + 20);
504
+ color = `hsl(${hue},${saturation}%,${luminance}%)`;
505
+ pixel.color = color;
506
+ //console.log("color set");
507
+ };
508
+ pixel.didChargeBlueTinted = true;
509
+ };
510
+ } else {
511
+ var explosionRadius = 5;
512
+ };
513
+
514
+ if(pixel.burning) {
515
+ pixel.hissing = true;
516
+ if(!pixel.hissStart) {
517
+ pixel.hissStart = pixelTicks;
518
+ };
519
+ if(!pixel.burnStart) { //I don't like errors.
520
+ pixel.burnStart = pixel.ticks;
521
+ };
522
+ if(pixelTicks - pixel.burnStart > 30) {
523
+ //console.log("Kaboom?");
524
+ explodeAt(pixel.x,pixel.y,explosionRadius,creeperElement);
525
+ //console.log("Yes, Rico, kaboom.");
526
+ };
527
+ };
528
+
529
+ //Head hissing color handler: keeps track of head's hissing for coloring purposes
530
+ for(i = 0; i < 1; i++) { //dummy for loop
531
+ if(pixel.dead || !head || head.dead) { //can't hiss without a head according to the classic creeper anatomy
532
+ //console.log("ss-- oof");
533
+ pixel.hissing = false;
534
+ break;
535
+ };
536
+ if(head.hissing) {
537
+ //console.log("Ssssssss");
538
+ if(!head.hissStart) {
539
+ //console.log("t-30 ticks or whatever it was");
540
+ head.hissStart = pixelTicks;
541
+ };
542
+
543
+ //Color code {
544
+ var ticksHissing = pixelTicks - head.hissStart;
545
+ var color = pixel.color; //do on each hissing tick
546
+ if(color.startsWith("rgb")) {
547
+ //console.log("rgb detected");
548
+ color = color.split(","); //split color for addition
549
+ var red = parseFloat(color[0].substring(4));
550
+ var green = parseFloat(color[1]);
551
+ var blue = parseFloat(color[2].slice(0,-1));
552
+ red = rgbColorBound(red + ticksHissing);
553
+ green = rgbColorBound(green + ticksHissing);
554
+ blue = rgbColorBound(blue + ticksHissing);
555
+ color = `rgb(${red},${green},${blue})`;
556
+ pixel.color = color;
557
+ //console.log("color set");
558
+ } else if(color.startsWith("hsl")) {
559
+ //console.log("hsl detected");
560
+ color = color.split(","); //split color for addition
561
+ var hue = parseFloat(color[0].substring(4));
562
+ var saturation = parseFloat(color[1].slice(0,-1));
563
+ var luminance = parseFloat(color[2].slice(0,-2));
564
+ //console.log("the j");
565
+ luminance = slBound(luminance + 1.176);
566
+ //console.log(luminance);
567
+ color = `hsl(${hue},${saturation}%,${luminance}%)`;
568
+ pixel.color = color;
569
+ //console.log("color set");
570
+ };
571
+ //}
572
+ };
573
+ };
574
+ };
575
+
576
+ autoCreeperHeadTick = function(pixel) {
577
+ var creeperElement = elements[pixel.element].creeperType;
578
+ var headName,bodyName,explodeInto;
579
+ if(typeof(creeperElement === "string")) { //comma separated string check
580
+ if(creeperElement.includes(",")) { //if it is
581
+ creeperElement = creeperElement.split(","); //to array
582
+ creeperElement = creeperElement.filter(function(e) { //strip nonexistent elements
583
+ return typeof(elements[e]) === "object";
584
+ });
585
+ };
586
+ };
587
+ if(Array.isArray(creeperElement)) {
588
+ headName = `${creeperElement.join("_")}_creeper_head`; //auto head element name
589
+ bodyName = `${creeperElement.join("_")}_creeper_body`; //auto body element name
590
+ explodeInto = creeperElement.join(","); //auto body element name
591
+ } else {
592
+ headName = `${creeperElement}_creeper_head`; //auto head element name
593
+ bodyName = `${creeperElement}_creeper_body`; //auto body element name
594
+ explodeInto = creeperElement; //auto body element name
595
+ };
596
+ doHeat(pixel);
597
+ doBurning(pixel);
598
+ doElectricity(pixel);
599
+ if (pixel.dead) {
600
+ // Turn into rotten_meat if pixelTicks-dead > 500
601
+ if (pixelTicks-pixel.dead > 200) {
602
+ Math.random() < 0.1 ? changePixel(pixel,"gunpowder") : changePixel(pixel,"rotten_meat");
603
+ return
604
+ }
605
+ }
606
+
607
+ // Find the body
608
+ if (!isEmpty(pixel.x, pixel.y+1, true) && pixelMap[pixel.x][pixel.y+1].element == bodyName) {
609
+ var body = pixelMap[pixel.x][pixel.y+1];
610
+ if (body.dead) { // If body is dead, kill head
611
+ pixel.dead = body.dead;
612
+ }
613
+ }
614
+ else { var body = null }
615
+
616
+ if(body) {
617
+ if(body.dir !== pixel.dir) { //hacky workaround: lock head dir to body dir
618
+ pixel.dir = body.dir;
619
+ };
620
+ };
621
+
622
+ if (isEmpty(pixel.x, pixel.y+1)) {
623
+ tryMove(pixel, pixel.x, pixel.y+1);
624
+ // create blood if severed 10% chance
625
+ if (isEmpty(pixel.x, pixel.y+1) && !pixel.dead && Math.random() < 0.1) {
626
+ createPixel("blood", pixel.x, pixel.y+1);
627
+ // set dead to true 15% chance
628
+ if (Math.random() < 0.15) {
629
+ pixel.dead = pixelTicks;
630
+ }
631
+ }
632
+ }
633
+
634
+ //start of most new code
635
+ var pX = pixel.x;
636
+ var pY = pixel.y;
637
+
638
+ if(pixel.charge) {
639
+ pixel.charged = true;
640
+ };
641
+
642
+ if(body) {
643
+ if(typeof(body.charge) !== "undefined") {
644
+ if(body.charge) {
645
+ pixel.charged = true;
646
+ };
647
+ };
648
+ if(typeof(body.charged) !== "undefined") {
649
+ if(body.charged) {
650
+ pixel.charged = true;
651
+ };
652
+ };
653
+ };
654
+
655
+ if(typeof(pixel.charged) === "undefined") {
656
+ pixel.charged = false;
657
+ };
658
+
659
+ if(pixel.charged) {
660
+ var explosionRadius = 10;
661
+ if(!pixel.didChargeBlueTinted) { //do once, on initial charge
662
+ //console.log("something something halsey lyric");
663
+ var color = pixel.color;
664
+ if(color.startsWith("rgb")) {
665
+ //console.log("rgb detected");
666
+ color = color.split(","); //split color for addition
667
+ var red = parseFloat(color[0].substring(4));
668
+ var green = parseFloat(color[1]);
669
+ var blue = parseFloat(color[2].slice(0,-1));
670
+ red = rgbColorBound(red + 51);
671
+ green = rgbColorBound(green + 51);
672
+ blue = rgbColorBound(blue + 102);
673
+ color = `rgb(${red},${green},${blue})`;
674
+ pixel.color = color;
675
+ //console.log("color set");
676
+ } else if(color.startsWith("hsl")) {
677
+ //console.log("hsl detected");
678
+ color = color.split(","); //split color for addition
679
+ var hue = parseFloat(color[0].substring(4));
680
+ var saturation = parseFloat(color[1].slice(0,-1));
681
+ var luminance = parseFloat(color[2].slice(0,-2));
682
+ hue = hue % 360; //piecewise hue shift
683
+ if(hue <= 235 && hue >= 135) {
684
+ hue = 185;
685
+ } else if(hue < 135) {
686
+ hue += 50;
687
+ } else if(hue > 235 && hue < 360) {
688
+ hue -= 50;
689
+ };
690
+ saturation = slBound (saturation + 10);
691
+ luminance = slBound(luminance + 20);
692
+ color = `hsl(${hue},${saturation}%,${luminance}%)`;
693
+ pixel.color = color;
694
+ //console.log("color set");
695
+ };
696
+ pixel.didChargeBlueTinted = true;
697
+ };
698
+ } else {
699
+ var explosionRadius = 7;
700
+ };
701
+
702
+ //Human detection loop (looks ahead according to direction and sets the "following" variable to true, telling the body to lock the direction)
703
+ var directionAdverb = "left";
704
+ if(pixel.dir > 0) {
705
+ directionAdverb = "right";
706
+ };
707
+ //console.log(`Looking ${directionAdverb}`)
708
+ if(pixel.dir === -1) {
709
+ for(i = -4; i < 4+1; i++) {
710
+ var oY = i;
711
+ //console.log(`Starting row look at row ${pY+oY}`)
712
+ for(j = (-1); j > (-16 - 1); j--) {
713
+ var oX = j;
714
+ var nX = pX+oX;
715
+ var nY = pY+oY;
716
+ if(outOfBounds(nX,nY)) {
717
+ //console.log(`Stopping row look at pixel (${nX},${nY}) due to OoB`)
718
+ break;
719
+ };
720
+ if(isEmpty(nX,nY)) {
721
+ ////console.log(`Skipping pixel (${nX},${nY}) (empty)`)
722
+ continue;
723
+ };
724
+ if(!isEmpty(nX,nY,true)) {
725
+ var newPixel = pixelMap[nX][nY];
726
+ var newElement = newPixel.element;
727
+ if(enemyHumanoidArray.includes(newElement)) {
728
+ //console.log(`Human part found at (${nX},${nY})`)
729
+ if(!newPixel.dead) {
730
+ pixel.following = true;
731
+ //console.log(`Human detected at (${nX},${nY})`)
732
+ //Start "hissing" if a human is close enough
733
+ if(coordPyth(pX,pY,nX,nY) <= 3.15) { //probably misapplying the tolerance from the MC Wiki line: "Creepers will chase after any player, as long as it is within a 16 block (±5%) radius"
734
+ pixel.hissing = true;
735
+ if(!pixel.hissStart) {
736
+ pixel.hissStart = pixelTicks;
737
+ };
738
+ };
739
+ };
740
+ } else {
741
+ //console.log(`Stopping row look at pixel (${nX},${nY}) due to non-human pixel in the way`)
742
+ break; //can't see through humans
743
+ };
744
+ };
745
+ };
746
+ };
747
+ } else if(pixel.dir === 1) {
748
+ for(i = -4; i < 4+1; i++) {
749
+ var oY = i;
750
+ //console.log(`Starting row look at row ${pY+oY}`)
751
+ for(j = 1; j < 16 + 1; j++) {
752
+ var oX = j;
753
+ var nX = pX+oX;
754
+ var nY = pY+oY;
755
+ if(outOfBounds(nX,nY)) {
756
+ //console.log(`Stopping row look at pixel (${nX},${nY}) due to OoB`)
757
+ break;
758
+ };
759
+ if(isEmpty(nX,nY)) {
760
+ ////console.log(`Skipping pixel (${nX},${nY}) (empty)`)
761
+ continue;
762
+ };
763
+ if(!isEmpty(nX,nY,true)) {
764
+ var newPixel = pixelMap[nX][nY];
765
+ var newElement = newPixel.element;
766
+ if(enemyHumanoidArray.includes(newElement)) {
767
+ //console.log(`Human part found at (${nX},${nY})`)
768
+ if(!newPixel.dead) {
769
+ pixel.following = true;
770
+ //console.log(`Human detected at (${nX},${nY})`)
771
+ //Start "hissing" if a human is close enough
772
+ if(coordPyth(pX,pY,nX,nY) <= 3.15) {
773
+ pixel.hissing = true;
774
+ if(!pixel.hissStart) {
775
+ pixel.hissStart = pixelTicks;
776
+ };
777
+ };
778
+ break;
779
+ };
780
+ } else {
781
+ //console.log(`Stopping row look at pixel (${nX},${nY}) due to non-human pixel in the way`)
782
+ break;
783
+ };
784
+ };
785
+ };
786
+ };
787
+ };
788
+
789
+ //Pre-explosion handler: keeps track of time before the kaboom
790
+ for(i = 0; i < 1; i++) { //dummy for loop
791
+ if(pixel.hissing) {
792
+ //console.log("Ssssssss");
793
+ if(pixel.dead || !body || body.dead) { //can't explode without a body according to the classic creeper anatomy
794
+ //console.log("ss-- oof");
795
+ pixel.hissing = false;
796
+ break;
797
+ };
798
+ if(!pixel.hissStart) {
799
+ //console.log("t-30 ticks or whatever it was");
800
+ pixel.hissStart = pixelTicks;
801
+ };
802
+ //Color code {
803
+ var ticksHissing = pixelTicks - pixel.hissStart;
804
+ var color = pixel.color; //do on each hissing tick
805
+ if(color.startsWith("rgb")) {
806
+ //console.log("rgb detected");
807
+ color = color.split(","); //split color for addition
808
+ var red = parseFloat(color[0].substring(4));
809
+ var green = parseFloat(color[1]);
810
+ var blue = parseFloat(color[2].slice(0,-1));
811
+ red = rgbColorBound(red + ticksHissing);
812
+ green = rgbColorBound(green + ticksHissing);
813
+ blue = rgbColorBound(blue + ticksHissing);
814
+ color = `rgb(${red},${green},${blue})`;
815
+ pixel.color = color;
816
+ //console.log("color set");
817
+ } else if(color.startsWith("hsl")) {
818
+ //console.log("hsl detected");
819
+ color = color.split(","); //split color for addition
820
+ var hue = parseFloat(color[0].substring(4));
821
+ var saturation = parseFloat(color[1].slice(0,-1));
822
+ var luminance = parseFloat(color[2].slice(0,-2));
823
+ luminance = slBound(luminance + 1.176);
824
+ color = `hsl(${hue},${saturation}%,${luminance}%)`;
825
+ pixel.color = color;
826
+ //console.log("color set");
827
+ };
828
+ //}
829
+
830
+ if(pixelTicks - pixel.hissStart > 30) {
831
+ //console.log("Kaboom?");
832
+ //console.log(`Exploding with element ${creeperElement} and radius ${explosionRadius} (charged: ${pixel.charged})`);
833
+ explodeAt(body.x,body.y,explosionRadius,explodeInto);
834
+ //console.log("Yes, Rico, kaboom.");
835
+ };
836
+ };
837
+ };
838
+
839
+ if(Math.random() < 0.01) { //1% chance each tick to lose interest
840
+ pixel.following = false;
841
+ //console.log("Meh.");
842
+ };
843
+ };
844
+
845
+ //Several
846
+
847
+ function commonMovableCriteria(name) {
848
+ if(typeof(elements[name]) !== "object") {
849
+ throw new Error(`Nonexistent element ${name}`);
850
+ };
851
+ var info = elements[name];
852
+ //console.log(`${name} (${JSON.stringify(elements[name])})`);
853
+ if(typeof(info.state) === "undefined") {
854
+ var state = null;
855
+ } else {
856
+ var state = info.state;
857
+ };
858
+ if(typeof(info.category) === "undefined") {
859
+ var category = "other";
860
+ } else {
861
+ var category = info.category;
862
+ };
863
+ if(excludedFairyElements.includes(name) || excludedCloudElements.includes(name)) {
864
+ return false
865
+ };
866
+ if(elements[name].behavior && elements[name].behavior.toString() == elements.wall.behavior.toString() && !elements[name].tick) {
867
+ return false;
868
+ };
869
+ if(["liquid","gas"].includes(state)) {
870
+ return true;
871
+ };
872
+ if(info.movable) {
873
+ return true;
874
+ };
875
+ if(backupCategoryWhitelist.includes(category)) {
876
+ return true;
877
+ };
878
+ if(backupElementWhitelist.includes(name)) {
879
+ return true;
880
+ };
881
+ if(category.includes("mudstone")) {
882
+ return true;
883
+ };
884
+ return false;
885
+ };
886
+
887
+ //runAfterLoad calls
888
+
889
+ //Bombs
890
+
891
+ runAfterLoad(function() {
892
+ if(enabledMods.includes("mods/fey_and_more.js")) {
893
+ amalgamatedBombFire += ",poisonwater".repeat(8);
894
+ amalgamatedBombFire += ",mystic_fire".repeat(4);
895
+ amalgamatedBombFire += ",firesea".repeat(6);
896
+ amalgamatedBombFire += ",lektre".repeat(6);
897
+ };
898
+ if(enabledMods.includes("mods/Neutronium Mod.js")) {
899
+ amalgamatedBombFire += ",flamer".repeat(3);
900
+ amalgamatedBombFire += ",flamebomb".repeat(3);
901
+ amalgamatedBombFire += ",toxin".repeat(3);
902
+ };
903
+ if(enabledMods.includes("mods/randomness.js")) {
904
+ amalgamatedBombFire += ",burning_unnamed_gas".repeat(4);
905
+ amalgamatedBombFire += ",warp".repeat(6);
906
+ amalgamatedBombFire += ",bomb_3".repeat(3);
907
+ amalgamatedBombFire += ",op_hottester_bomb".repeat(3);
908
+ eLists.BOMB.push("unnamed_bomb");
909
+ eLists.BOMB.push("warp_bomb");
910
+ };
911
+ if(enabledMods.includes("mods/glenn_gases.js")) {
912
+ amalgamatedBombFire += ",electric_gas".repeat(3);
913
+ amalgamatedBombFire += ",corrosive_gas".repeat(3);
914
+ amalgamatedBombFire += ",iocalfaeus_gas".repeat(3);
915
+ amalgamatedBombFire += ",ignited_gas".repeat(3);
916
+ amalgamatedBombFire += ",finine".repeat(3);
917
+ amalgamatedBombFire += ",acidic_vapour".repeat(3);
918
+ amalgamatedBombFire += ",nitrous_gas".repeat(3);
919
+ amalgamatedBombFire += ",void_gas".repeat(3);
920
+ amalgamatedBombFire += ",black_damp".repeat(3);
921
+ };
922
+ if(enabledMods.includes("mods/some_tf_liquids.js")) {
923
+ amalgamatedBombFire += ",blazing_pyrotheum".repeat(5);
924
+ amalgamatedBombFire += ",tectonic_petrotheum".repeat(7);
925
+ amalgamatedBombFire += ",resonant_ender".repeat(5);
926
+ };
927
+ if(enabledMods.includes("mods/chem.js")) {
928
+ amalgamatedBombFire += ",FOOF".repeat(8);
929
+ };
930
+ if(enabledMods.includes("mods/bioooze.js")) {
931
+ amalgamatedBombFire += ",bioooze".repeat(8);
932
+ };
933
+ });
934
+
935
+ //Fairies
936
+
937
+ runAfterLoad(function() {
938
+ if(typeof(eLists.FAIRY) === "undefined") { eLists.FAIRY = [] };
939
+ eLists.FAIRY.push("acid_fairy");
940
+ eLists.FAIRY.push("oil_fairy");
941
+ eLists.FAIRY.push("honey_fairy");
942
+ fairyChoices = eLists.FAIRY;
943
+ for(i = 0; i < eLists.FAIRY.length; i++) {
944
+ var fairyName = eLists.FAIRY[i];
945
+ if(!fairyChoices.includes(fairyName)) {
946
+ fairyChoices.push(fairyName);
947
+ };
948
+ };
949
+ });
950
+
951
+ //Non-generated elements
952
+
953
+ //Bombs
954
+
955
+ elements.anti_bomb = {
956
+ color: "#625c71",
957
+ behavior: [
958
+ "M2|M1 AND EX:10|M2",
959
+ "XX|XX|XX",
960
+ "XX|EX:10|XX",
961
+ ],
962
+ category: "weapons",
963
+ state: "solid",
964
+ density: 1300,
965
+ excludeRandom: true,
966
+ cooldown: defaultCooldown,
967
+ };
968
+
969
+ elements.firebomb = {
970
+ color: "#ee7e3e",
971
+ tick: function(pixel) {
972
+ if(!isEmpty(pixel.x,pixel.y-1,true)) { //[0][1] EX (ignore bounds)
973
+ var newPixel = pixelMap[pixel.x][pixel.y-1];
974
+ var newElement = newPixel.element;
975
+ var newInfo = elements[newElement];
976
+ if(newInfo.state !== "gas" && newElement !== pixel.element) {
977
+ explodeAtPlus(pixel.x,pixel.y,10,"fire,fire,fire,fire,fire,greek_fire","fire",null,firebombFire);
978
+ };
979
+ };
980
+ if(!isEmpty(pixel.x,pixel.y+1,true)) { //[2][1] EX (don't ignore bounds, non-bound case)
981
+ var newPixel = pixelMap[pixel.x][pixel.y+1];
982
+ var newElement = newPixel.element;
983
+ var newInfo = elements[newElement];
984
+ if(newInfo.state !== "gas" && newElement !== pixel.element) {
985
+ explodeAtPlus(pixel.x,pixel.y,10,"fire,fire,fire,fire,fire,greek_fire","fire",null,firebombFire);
986
+ };
987
+ };
988
+ if(outOfBounds(pixel.x,pixel.y+1)) { //[2][1] EX (don't ignore bounds, bound case)
989
+ explodeAtPlus(pixel.x,pixel.y,10,"fire,fire,fire,fire,fire,greek_fire","fire",null,firebombFire);
990
+ };
991
+ if(!tryMove(pixel,pixel.x,pixel.y+1)) { //behaviors.POWDER
992
+ Math.random() < 0.5 ? tryMove(pixel,pixel.x-1,pixel.y+1) : tryMove(pixel,pixel.x+1,pixel.y+1);
993
+ };
994
+ },
995
+ category: "weapons",
996
+ state: "solid",
997
+ density: 1500,
998
+ excludeRandom: true,
999
+ desc: "An advanced incendiary weapon. <br/>To enable automatic bomb generation, set the generateBombs query parameter.",
1000
+ };
1001
+
1002
+ elements.cluster_nuke = {
1003
+ color: "#e3f636",
1004
+ behavior: [
1005
+ "CR:radiation%5|EX:90>plasma,plasma,plasma,nuke,nuke,nuke,radiation,radiation,radiation,rad_steam,rad_steam,radiation,rad_steam AND CR:radiation%5|CR:radiation%5",
1006
+ "CR:radiation%5|XX|CR:radiation%5",
1007
+ "M2 AND CR:radiation%5|M1 AND EX:90>plasma,plasma,plasma,nuke,nuke,nuke,radiation,radiation,radiation,rad_steam,rad_steam,radiation,rad_steam AND CR:radiation%5|M2 AND CR:radiation%5",
1008
+ ],
1009
+ category: "weapons",
1010
+ state: "solid",
1011
+ density: 1500,
1012
+ excludeRandom: true,
1013
+ desc: "It's a nuke that drops more nukes. <br/>To enable automatic bomb generation, set the generateBombs query parameter.",
1014
+ };
1015
+
1016
+ elements.anti_bomb = {
1017
+ color: "#525c61",
1018
+ behavior: [
1019
+ "M2|M1 AND EX:10|M2",
1020
+ "XX|XX|XX",
1021
+ "XX|EX:10|XX",
1022
+ ],
1023
+ category: "weapons",
1024
+ state: "solid",
1025
+ density: 1300,
1026
+ excludeRandom: true,
1027
+ };
1028
+
1029
+ elements.electric_bomblet = {
1030
+ color: "#ffffff",
1031
+ behavior: [
1032
+ "SH%50|EX:8>electric AND SH%50|SH%50",
1033
+ "SH%50|EX:9>electric%0.5|SH%50",
1034
+ "M2 AND SH%50|M1 AND SH%50 AND EX:8>electric AND SW:electric|M2 AND SH%50",
1035
+ ],
1036
+ category: "weapons",
1037
+ state: "solid",
1038
+ density: 1200,
1039
+ hidden: true,
1040
+ excludeRandom: true,
1041
+ hardness: 0.3,
1042
+ };
1043
+
1044
+ elements.electric_cluster_bomb = {
1045
+ color: "#ffffff",
1046
+ behavior: [
1047
+ "SH%50|EX:8>electric_bomblet AND SH%50|SH%50",
1048
+ "SH%50|XX|SH%50",
1049
+ "M2 AND SH%50|M1 AND SH%50 AND EX:8>electric_bomblet AND SW:electric|M2 AND SH%50",
1050
+ ],
1051
+ category: "weapons",
1052
+ state: "solid",
1053
+ density: 1800,
1054
+ hidden: true,
1055
+ excludeRandom: true,
1056
+ hardness: 0.3,
1057
+ };
1058
+
1059
+ elements.radioactive_popper = {
1060
+ color: "#d6ce72",
1061
+ behavior: [
1062
+ "XX|EX:7>radiation|XX",
1063
+ "XX|XX|XX",
1064
+ "M2|M1 AND EX:7>radiation|M2",
1065
+ ],
1066
+ category: "weapons",
1067
+ state: "solid",
1068
+ density: 1200,
1069
+ hidden: true,
1070
+ excludeRandom: true,
1071
+ hardness: 0.3,
1072
+ cooldown: 3,
1073
+ };
1074
+
1075
+ elements.acid_bomb = {
1076
+ color: "#7d8a63",
1077
+ behavior: [
1078
+ "XX|EX:15>acid_gas|XX",
1079
+ "XX|XX|XX",
1080
+ "M2|M1 AND EX:15>acid_gas|M2",
1081
+ ],
1082
+ category: "weapons",
1083
+ state: "solid",
1084
+ density: 1400,
1085
+ excludeRandom: true,
1086
+ cooldown: defaultCooldown,
1087
+ };
1088
+
1089
+ elements.amalgamated_bomb = {
1090
+ color: ["#FF0000","#FF0000","#FFFF00","#FFFF00","#00FF00","#00FF00","#0000FF","#0000FF"],
1091
+ tick: function(pixel) {
1092
+ doDefaults(pixel);
1093
+ if(!isEmpty(pixel.x,pixel.y-1,true)) { //[0][1] EX (ignore bounds)
1094
+ var newPixel = pixelMap[pixel.x][pixel.y-1];
1095
+ var newElement = newPixel.element;
1096
+ var newInfo = elements[newElement];
1097
+ if(newInfo.state !== "gas" && newElement !== pixel.element) {
1098
+ explodeAtPlus(pixel.x,pixel.y,70,amalgamatedBombFire,amalgamatedBombFire);
1099
+ };
1100
+ };
1101
+ if(!isEmpty(pixel.x,pixel.y+1,true)) { //[2][1] EX (don't ignore bounds, non-bound case)
1102
+ var newPixel = pixelMap[pixel.x][pixel.y+1];
1103
+ var newElement = newPixel.element;
1104
+ var newInfo = elements[newElement];
1105
+ if(newInfo.state !== "gas" && newElement !== pixel.element) {
1106
+ explodeAtPlus(pixel.x,pixel.y,70,amalgamatedBombFire,amalgamatedBombFire);
1107
+ };
1108
+ };
1109
+ if(outOfBounds(pixel.x,pixel.y+1)) { //[2][1] EX (don't ignore bounds, bound case)
1110
+ explodeAtPlus(pixel.x,pixel.y,70,amalgamatedBombFire,amalgamatedBombFire);
1111
+ };
1112
+ if(!tryMove(pixel,pixel.x,pixel.y+1)) { //behaviors.POWDER
1113
+ Math.random() < 0.5 ? tryMove(pixel,pixel.x-1,pixel.y+1) : tryMove(pixel,pixel.x+1,pixel.y+1);
1114
+ };
1115
+ },
1116
+ category: "weapons",
1117
+ state: "solid",
1118
+ temp: 7065,
1119
+ density: 158000,
1120
+ excludeRandom: true,
1121
+ };
1122
+
1123
+ elements.op_hottester_bomb = {
1124
+ color: "#cc436e",
1125
+ properties: {
1126
+ radius: 15, //just so people can edit it per pixel to be stupidly high
1127
+ },
1128
+ tick: function(pixel) {
1129
+ doDefaults(pixel);
1130
+ if(!isEmpty(pixel.x,pixel.y-1,true)) { //[0][1] EX (ignore bounds)
1131
+ var newPixel = pixelMap[pixel.x][pixel.y-1];
1132
+ var newElement = newPixel.element;
1133
+ var newInfo = elements[newElement];
1134
+ if(newInfo.state !== "gas" && newElement !== pixel.element) {
1135
+ explodeAtPlus(pixel.x,pixel.y,pixel.radius,"plasma","plasma",hotterBomb,hotterBomb,false);
1136
+ };
1137
+ };
1138
+ if(!isEmpty(pixel.x,pixel.y+1,true)) { //[2][1] EX (don't ignore bounds, non-bound case)
1139
+ var newPixel = pixelMap[pixel.x][pixel.y+1];
1140
+ var newElement = newPixel.element;
1141
+ var newInfo = elements[newElement];
1142
+ if(newInfo.state !== "gas" && newElement !== pixel.element) {
1143
+ explodeAtPlus(pixel.x,pixel.y,pixel.radius,"plasma","plasma",hotterBomb,hotterBomb,false);
1144
+ };
1145
+ };
1146
+ if(outOfBounds(pixel.x,pixel.y+1)) { //[2][1] EX (don't ignore bounds, bound case)
1147
+ explodeAtPlus(pixel.x,pixel.y,pixel.radius,"plasma","plasma",hotterBomb,hotterBomb,false);
1148
+ };
1149
+ if(!tryMove(pixel,pixel.x,pixel.y+1)) { //behaviors.POWDER
1150
+ Math.random() < 0.5 ? tryMove(pixel,pixel.x-1,pixel.y+1) : tryMove(pixel,pixel.x+1,pixel.y+1);
1151
+ };
1152
+ },
1153
+ category: "weapons",
1154
+ state: "solid",
1155
+ temp: 7065,
1156
+ density: 1900,
1157
+ excludeRandom: true,
1158
+ };
1159
+
1160
+ elements.op_electromagneticester_emp = {
1161
+ color: "#818253",
1162
+ tick: function(pixel) { //replace EMP
1163
+ if (pixel.start===pixelTicks) {return}
1164
+ if (!tryMove(pixel,pixel.x,pixel.y+1)) {
1165
+ if (outOfBounds(pixel.x,pixel.y+1) || (pixelMap[pixel.x][pixel.y+1].element!=="emp_bomb" && elements[pixelMap[pixel.x][pixel.y+1].element].state!=="gas")) {
1166
+ for (i = 0; i < currentPixels.length; i++) {
1167
+ var newPixel = currentPixels[i];
1168
+ if (newPixel.charge) {
1169
+ delete newPixel.charge;
1170
+ newPixel.chargeCD = 50;
1171
+ }
1172
+ }
1173
+ explodeAtPlus(pixel.x,pixel.y+1,20,"electric","smoke",empCharge,null,false);
1174
+ }
1175
+ }
1176
+ doDefaults(pixel);
1177
+ },
1178
+ maxSize: 1,
1179
+ category: "weapons",
1180
+ state: "solid",
1181
+ density: 1500,
1182
+ excludeRandom: true,
1183
+ alias: "overpowered electromagnetic pulse bomb",
1184
+ cooldown: defaultCooldown
1185
+ };
1186
+
1187
+ //Fairies
1188
+
1189
+ elements.acid_fairy = {
1190
+ name: "acid fairy",
1191
+ color: ["#e2f777","#d1ff94","#d8f7c1"],
1192
+ behavior: [
1193
+ "XX|M1|M1",
1194
+ "XX|FX%5|XX",
1195
+ "XX|CR:acid%0.5 AND CR:fairy_dust%0.005 AND M1|M1",
1196
+ ],
1197
+ state: "solid",
1198
+ category: "fey",
1199
+ desc: "Like the other fairies, but with acid. <br/>To enable automatic fairy generation, set the generateFairies query parameter.",
1200
+ }
1201
+
1202
+ elements.oil_fairy = {
1203
+ name: "oil fairy",
1204
+ color: ["#636360","#a6956f","#a3816d","#cfc191"],
1205
+ behavior: [
1206
+ "XX|M1|M1",
1207
+ "XX|FX%5|XX",
1208
+ "XX|CR:oil%0.5 AND CR:fairy_dust%0.005 AND M1|M1",
1209
+ ],
1210
+ state: "solid",
1211
+ category: "fey",
1212
+ desc: "Like the other fairies, but with oil. <br/>To enable automatic fairy generation, set the generateFairies query parameter.",
1213
+ }
1214
+
1215
+ elements.honey_fairy = {
1216
+ name: "honey fairy",
1217
+ color: ["#ffeaa6","#ffe987","#f2e7c2"],
1218
+ behavior: [
1219
+ "XX|M1|M1",
1220
+ "XX|FX%5|XX",
1221
+ "XX|CR:honey%0.5 AND CR:fairy_dust%0.005 AND M1|M1",
1222
+ ],
1223
+ state: "solid",
1224
+ category: "fey",
1225
+ desc: "Like the other fairies, but with sweet honey. <br/>To enable automatic fairy generation, set the generateFairies query parameter.",
1226
+ }
1227
+
1228
+ //Sequential generations
1229
+
1230
+ //Bombs
1231
+
1232
+ for (var i = 2; i <= bombAmount + 1; i++) {
1233
+ elements[`bomb_${i}`] = {
1234
+ name: `bomb ${i}`,
1235
+ color: "#624c41",
1236
+ behavior: [
1237
+ `XX|EX:${5*(i+1)}>fire|XX`,
1238
+ "XX|XX|XX",
1239
+ `M2|M1 AND EX:${5*(i+1)}>fire|M2`,
1240
+ ],
1241
+ state: "solid",
1242
+ density: 1300 * 8**((i-1)/2),
1243
+ excludeRandom:true,
1244
+ category: "weapons",
1245
+ desc: `${5*(i+1)/10} times the radius of the regular bomb`,
1246
+ cooldown: defaultCooldown,
1247
+ };
1248
+ eLists.BOMB.push(`bomb_${i}`);
1249
+ };
1250
+
1251
+ for (var i = 2; i <= bombAmount + 1; i++) {
1252
+ elements[`anti_bomb_${i}`] = {
1253
+ color: "#625c71",
1254
+ behavior: [
1255
+ `M2|M1 AND EX:${5*(i+1)}>fire|M2`,
1256
+ "XX|XX|XX",
1257
+ `XX|EX:${5*(i+1)}>fire|XX`,
1258
+ ],
1259
+ state: "solid",
1260
+ density: 1300 * 8**((i-1)/2),
1261
+ excludeRandom:true,
1262
+ category: "weapons",
1263
+ desc: `${5*(i+1)/10} times the radius of the regular anti-bomb`,
1264
+ cooldown: defaultCooldown,
1265
+ };
1266
+ eLists.BOMB.push(`anti_bomb_${i}`);
1267
+ };
1268
+
1269
+ //Fairies
1270
+
1271
+ //For statement by charPointer
1272
+ if(enabledMods.includes("mods/fey_and_more.js")) {
1273
+ for (var i = 2; i <= fairyAmount + 1; i++) {
1274
+ elements[`${i}-fairy`] = {
1275
+ name: `${i}-fairy`,
1276
+ color: ["#33007a","#8e009f","#09009f"],
1277
+ behavior: [
1278
+ "XX|M1|M1",
1279
+ "XX|FX%5|XX",
1280
+ `XX|CR:${i-1}-fairy%1 AND CR:fairy_dust%0.005 AND M1|M1`,
1281
+ ],
1282
+ reactions: {
1283
+ "glitter": { "elem1": `${i+1}-fairy`, "elem2": null }
1284
+ },
1285
+ state: "solid",
1286
+ excludeRandom:true,
1287
+ category: "fey",
1288
+ hidden: true,
1289
+ }
1290
+ if (i == fairyAmount) { elements[`${i}-fairy`]["reactions"] = {}; }
1291
+ if (i == 2) elements[`${i}-fairy`]["behavior"][2] = `XX|CR:fairy%1 AND CR:fairy_dust%0.005 AND M1|M1`;
1292
+ eLists.FAIRY.push(`${i}-fairy`);
1293
+ }
1294
+ //post-gen
1295
+ if(!elements.rainbow.reactions) { //rainbow promotes fairy
1296
+ elements.rainbow.reactions = {};
1297
+ };
1298
+ elements.rainbow.reactions.fairy = { "elem1": "2-fairy", "elem2": null }
1299
+ //remove last fairy's reaction
1300
+ delete elements[`${fairyAmount + 1}-fairy`].reactions
1301
+ };
1302
+
1303
+ //Main generator functions
1304
+
1305
+ //Bombs
1306
+
1307
+ generateBomb = function(bombElements,isAfterScriptLoading=false,bombNumber=1) {//it can be a single element, though
1308
+ bombNumber = Math.max(0,bombNumber);
1309
+
1310
+ //To specify an array bomb, have the array be inside another array.
1311
+ /*For reasons related to how element colors are loaded, if this function is being run from a JS mod file, isAfterScriptLoading should be false.
1312
+ Otherwise, you'll get TypeErrors for some reason when trying to place your bomb. If this is being run after the game has loaded (e.g. in the console),
1313
+ then isAfterScriptLoading should be true or you might also get TypeErrors (this latter case was a bit inconsistent when I tested it, but
1314
+ the former case wasn't. **isAfterScriptLoading must be false when this function is run from a JS mod file**.*/
1315
+ if(typeof(bombElements) === "string") { //it should be an array, so string check
1316
+ //console.log("String detected");
1317
+ if(bombElements.includes(",")) { //comma-separated string?
1318
+ //console.log("Splitting string to array");
1319
+ bombElements = bombElements.split(","); //,SS to array
1320
+ } else {
1321
+ //console.log("Wrapping string in array");
1322
+ bombElements = [bombElements]; //single string to array
1323
+ };
1324
+ };
1325
+ var returns = [];
1326
+ for(aaf = 0; aaf < bombElements.length; aaf++) {
1327
+ var elementOfBomb = bombElements[aaf];
1328
+ //console.log("1",elementOfBomb);
1329
+ var allElementsHaveColors = ((elementOfBomb instanceof Array ? elementOfBomb : [elementOfBomb]).map(function(name) { return !!(elements[name]?.color)}).reduce(function(a,b) { return a*b }) == 1)
1330
+ if(!allElementsHaveColors) { continue };
1331
+ var startColor;
1332
+ var randomExcl = 0;
1333
+ //console.log(elementOfBomb);
1334
+
1335
+ var bombName;
1336
+
1337
+ //console.log("2-1");
1338
+ if(typeof(elementOfBomb === "string")) { //comma separated string check
1339
+ if(elementOfBomb.includes(",")) { //if it is
1340
+ elementOfBomb = elementOfBomb.split(","); //to array
1341
+ elementOfBomb = elementOfBomb.filter(function(e) { //strip nonexistent elements
1342
+ //console.log("3 a");
1343
+ return typeof(elements[e]) === "object";
1344
+ });
1345
+ };
1346
+ };
1347
+ if(Array.isArray(elementOfBomb)) {
1348
+ bombName = `${elementOfBomb.join("_")}_bomb`; //auto placer element name
1349
+
1350
+ //array case color concatenator (bombs are always excludeRandom)
1351
+ startColor = [];
1352
+ //console.log(elementOfBomb);
1353
+ for(ll = 0; ll < elementOfBomb.length; ll++) {
1354
+ if(typeof(elements[elementOfBomb[ll]].excludeRandom !== "undefined")) { //if excludeRandom exists (prevent TypeError)
1355
+ if(elements[elementOfBomb[ll]].excludeRandom) { //it it's true
1356
+ randomExcl = 1; //the whole array bomb is excluded (from spawnRandomBomb)
1357
+ //console.log("array nyet" + elementOfBomb);
1358
+ };
1359
+ };
1360
+ startColor = startColor.concat(elements[elementOfBomb[ll]].color);
1361
+ };
1362
+ } else { //they should all be strings, so here
1363
+ bombName = `${elementOfBomb}_bomb`; //auto placer element name
1364
+ startColor = elements[elementOfBomb].color;
1365
+ if(typeof(elements[elementOfBomb].excludeRandom !== "undefined")) { //if excludeRandom exists (prevent TypeError)
1366
+ if(elements[elementOfBomb].excludeRandom) { //it it's true
1367
+ //console.log("nyet " + elementOfBomb);
1368
+ randomExcl = 1; //the bomb is excluded
1369
+ } else {
1370
+ //console.log("allow " + elementOfBomb);
1371
+ randomExcl = 0;
1372
+ };
1373
+ };
1374
+ };
1375
+ //console.log("e",bombName);
1376
+
1377
+ //Color gen
1378
+ if(Array.isArray(startColor)) { //Average arrays, make colors rgb()
1379
+ startColor = averageRgbPrefixedColorArray(startColor);
1380
+ } else {
1381
+ startColor = rgbHexCatcher(startColor);
1382
+ };
1383
+
1384
+ startColor = addColors(changeLuminance(changeSaturation(startColor,0.6,"multiply","hsl_json"),0.5,"multiply","rgb"),"rgb(24,0,0)","rgb");
1385
+
1386
+ var newColorObject = rgbStringToObject(startColor);
1387
+
1388
+ //End color gen
1389
+
1390
+ //The bomb
1391
+
1392
+ //console.log(elementOfBomb);
1393
+ var firstInfo, firstTemp;
1394
+ if(Array.isArray(elementOfBomb)) {
1395
+ firstInfo = elements[elementOfBomb[0]];
1396
+ firstTemp = airTemp;
1397
+ if(typeof(firstInfo.temp) !== "undefined") {
1398
+ firstTemp = firstInfo.temp;
1399
+ };
1400
+ } else {
1401
+ firstInfo = elements[elementOfBomb];
1402
+ firstTemp = airTemp;
1403
+ if(typeof(firstInfo.temp) !== "undefined") {
1404
+ firstTemp = firstInfo.temp;
1405
+ };
1406
+ };
1407
+
1408
+ elementOfBomb = tryJoin(elementOfBomb,",");
1409
+ descElement = tryJoin(elementOfBomb,", ");
1410
+
1411
+ //console.log(elementOfBomb);
1412
+
1413
+ if(bombNumber !== 1) {
1414
+ bombName += `_${bombNumber}`;
1415
+ };
1416
+
1417
+ if(!elementExists(bombName)) {
1418
+ elements[bombName] = {
1419
+ color: startColor,
1420
+ insulate: true,
1421
+ flippableX: true,
1422
+ colorObject: newColorObject,
1423
+ behavior: [
1424
+ ["XX",`EX:${5*(bombNumber+1)}>${elementOfBomb}`,"XX"],
1425
+ ["XX","XX","XX"],
1426
+ ["M2",`M1 AND EX:${5*(bombNumber+1)}>${elementOfBomb}`,"M2"]
1427
+ ],
1428
+ category: "auto_bombs",
1429
+ desc: `Explodes into ${descElement}<br/>Radius: ${5*(bombNumber+1)}`,
1430
+ temp: firstTemp,
1431
+ excludeRandom: true,
1432
+ autoType: "bomb",
1433
+ };
1434
+ if(typeof(eLists) === "undefined") {
1435
+ eLists = {};
1436
+ };
1437
+ if(typeof(eLists.BOMB) === "undefined") {
1438
+ eLists.BOMB = [];
1439
+ };
1440
+ eLists.BOMB.push(bombName);
1441
+ if(!randomExcl) {
1442
+ if(typeof(bombChoices) === "undefined") {
1443
+ bombChoices = []
1444
+ };
1445
+ if(!bombChoices.includes(bombName)) {
1446
+ bombChoices.push(bombName);
1447
+ };
1448
+ }
1449
+ if(isAfterScriptLoading) {
1450
+ elements[bombName].flippableX = true;
1451
+ elementCount++; //increment for new bomb element
1452
+ createElementButton(bombName);
1453
+ elements[bombName].id = nextid++;
1454
+ document.getElementById("extraInfo").innerHTML = "<small><p>There are " + elementCount + " elements, including " + hiddenCount + " hidden ones.</p><p>©2021-" + new Date().getFullYear() + ". All Rights Reserved. <a href='https://r74n.com'>R74n</a></p></small>"; //update extra info counts (and the copyright year, due to the method used)
1455
+ };
1456
+ };
1457
+ returns.push(bombName);
1458
+ };
1459
+ return returns;
1460
+ };
1461
+
1462
+ //Clouds
1463
+
1464
+ //Clouds
1465
+
1466
+ generateCloud = function(cloudElements,cloudType=0,isAfterScriptLoading=false) {//it can be a single element, though
1467
+ //To specify an array cloud, have the array be inside another array.
1468
+ /*For reasons related to how element colors are loaded, if this function is being run from a JS mod file, isAfterScriptLoading should be false.
1469
+ Otherwise, you'll get TypeErrors for some reason when trying to place your cloud. If this is being run after the game has loaded (e.g. in the console),
1470
+ then isAfterScriptLoading should be true or you might also get TypeErrors (this latter case was a bit inconsistent when I tested it, but
1471
+ the former case wasn't. **isAfterScriptLoading must be false when this function is run from a JS mod file**.*/
1472
+ if(cloudType !== "*") {
1473
+ if(typeof(cloudElements) === "string") { //it should be an array, so string check
1474
+ //console.log("String detected");
1475
+ if(cloudElements.includes(",")) { //comma-separated string?
1476
+ //console.log("Splitting string to array");
1477
+ cloudElements = cloudElements.split(","); //,SS to array
1478
+ } else {
1479
+ //console.log("Wrapping string in array");
1480
+ cloudElements = [cloudElements]; //single string to array
1481
+ };
1482
+ };
1483
+ var returns = [];
1484
+ for(aaf = 0; aaf < cloudElements.length; aaf++) {
1485
+ var elementOfCloud = cloudElements[aaf];
1486
+ var allElementsHaveColors = ((elementOfCloud instanceof Array ? elementOfCloud : [elementOfCloud]).map(function(name) { return !!(elements[name]?.color)}).reduce(function(a,b) { return a*b }) == 1)
1487
+ if(!allElementsHaveColors) { continue };
1488
+ var startColor;
1489
+ var randomExcl = 0;
1490
+ //console.log("randomExcl set")
1491
+ //console.log(elementOfCloud);
1492
+
1493
+ var cloudName, cloudPrefix, cloudBehavior;
1494
+
1495
+ switch(cloudType) {
1496
+ case 0:
1497
+ cloudPrefix = "";
1498
+ cloudBehavior = behaviorGenerators.cloud(elementOfCloud);
1499
+ break;
1500
+ case 1:
1501
+ cloudPrefix = "heavy_";
1502
+ cloudBehavior = behaviorGenerators.heavy_cloud(elementOfCloud);
1503
+ break;
1504
+ case 2:
1505
+ cloudPrefix = "heavier_";
1506
+ cloudBehavior = behaviorGenerators.heavier_cloud(elementOfCloud);
1507
+ break;
1508
+ case 3:
1509
+ cloudPrefix = "heaviest_";
1510
+ cloudBehavior = behaviorGenerators.heaviest_cloud(elementOfCloud);
1511
+ break;
1512
+ case 4:
1513
+ cloudPrefix = "heaviester_";
1514
+ cloudBehavior = behaviorGenerators.heaviester_cloud(elementOfCloud);
1515
+ break;
1516
+ case 5:
1517
+ cloudPrefix = "heaviestest_";
1518
+ cloudBehavior = behaviorGenerators.heaviestest_cloud(elementOfCloud);
1519
+ break;
1520
+ default:
1521
+ throw new RangeError("Cloud type must be between 0 and 5");
1522
+ };
1523
+
1524
+ if(typeof(elementOfCloud === "string")) { //comma separated string check
1525
+ if(elementOfCloud.includes(",")) { //if it is
1526
+ elementOfCloud = elementOfCloud.split(","); //to array
1527
+ elementOfCloud = elementOfCloud.filter(function(e) { //strip nonexistent elements
1528
+ return typeof(elements[e]) === "object";
1529
+ });
1530
+ };
1531
+ };
1532
+ if(Array.isArray(elementOfCloud)) {
1533
+ cloudName = `${elementOfCloud.join("_")}_cloud`; //auto placer element name
1534
+
1535
+ //array case color concatenator and excludeRandom handler
1536
+ startColor = [];
1537
+ //console.log(elementOfCloud);
1538
+ for(ll = 0; ll < elementOfCloud.length; ll++) {
1539
+ if(typeof(elements[elementOfCloud[ll]].excludeRandom !== "undefined")) { //if excludeRandom exists (prevent TypeError)
1540
+ if(elements[elementOfCloud[ll]].excludeRandom) { //it it's true
1541
+ randomExcl = 1; //the whole array cloud is excluded
1542
+ //console.log("array nyet" + elementOfCloud);
1543
+ };
1544
+ };
1545
+ //console.log(elementOfCloud[ll]);
1546
+ startColor = startColor.concat(elements[elementOfCloud[ll]].color);
1547
+ };
1548
+ } else { //they should all be strings, so here
1549
+ cloudName = `${elementOfCloud}_cloud`; //auto placer element name
1550
+ startColor = elements[elementOfCloud].color;
1551
+ if(typeof(elements[elementOfCloud].excludeRandom !== "undefined")) { //if excludeRandom exists (prevent TypeError)
1552
+ if(elements[elementOfCloud].excludeRandom) { //it it's true
1553
+ //console.log("nyet " + elementOfCloud);
1554
+ randomExcl = 1; //the cloud is excluded
1555
+ } else {
1556
+ //console.log("allow " + elementOfCloud);
1557
+ randomExcl = 0;
1558
+ };
1559
+ };
1560
+ };
1561
+ //Color gen
1562
+ if(Array.isArray(startColor)) { //Average arrays, make colors rgb()
1563
+ startColor = averageRgbPrefixedColorArray(startColor);
1564
+ } else {
1565
+ startColor = rgbHexCatcher(startColor);
1566
+ };
1567
+
1568
+ startColor = changeLuminance(
1569
+ changeSaturation(
1570
+ startColor,
1571
+ (0.4 + (cloudType/10)),
1572
+ "multiply",
1573
+ "hsl_json"
1574
+ ),
1575
+ (0.6 - (cloudType/10)),
1576
+ "multiply",
1577
+ "rgb"
1578
+ );
1579
+
1580
+ var newColorObject = rgbStringToObject(startColor);
1581
+
1582
+ //End color gen
1583
+
1584
+ //The cloud
1585
+
1586
+ //console.log(elementOfCloud);
1587
+ var firstInfo, firstTemp;
1588
+ if(Array.isArray(elementOfCloud)) {
1589
+ firstInfo = elements[elementOfCloud[0]];
1590
+ firstTemp = airTemp;
1591
+ if(typeof(firstInfo.temp) !== "undefined") {
1592
+ firstTemp = firstInfo.temp;
1593
+ };
1594
+ } else {
1595
+ firstInfo = elements[elementOfCloud];
1596
+ firstTemp = airTemp;
1597
+ if(typeof(firstInfo.temp) !== "undefined") {
1598
+ firstTemp = firstInfo.temp;
1599
+ };
1600
+ };
1601
+
1602
+ elementOfCloud = tryJoin(elementOfCloud,",");
1603
+
1604
+ //console.log(elementOfCloud);
1605
+
1606
+ cloudName = cloudPrefix + cloudName;
1607
+
1608
+ if(elementExists(cloudName)) {
1609
+ cloudName = "auto_" + cloudName;
1610
+ };
1611
+
1612
+ elements[cloudName] = {
1613
+ color: startColor,
1614
+ cloudType: elementOfCloud,
1615
+ insulate: true,
1616
+ colorObject: newColorObject,
1617
+ behavior: cloudBehavior,
1618
+ category: "clouds",
1619
+ temp: firstTemp,
1620
+ state: "gas",
1621
+ density: 0.6 * (2**cloudType),
1622
+ ignoreAir: true,
1623
+ conduct: 0.01 * (2**cloudType),
1624
+ autoType: "cloud",
1625
+ };
1626
+
1627
+ if(cloudType === 4) { //column tick for heaviester clouds
1628
+ elements[cloudName].tick = function(pixel) {
1629
+ singleColumn(pixel,elements[pixel.element].cloudType,0.01,0.3);
1630
+ };
1631
+ };
1632
+
1633
+ if(cloudType === 5) { //three-column tick for heaviestest clouds
1634
+ elements[cloudName].tick = function(pixel) {
1635
+ multiColumn(pixel,elements[pixel.element].cloudType,0.02,0.4,1);
1636
+ };
1637
+ };
1638
+
1639
+ eLists.CLOUD.push(cloudName);
1640
+
1641
+ if(!randomExcl) {
1642
+ if(typeof(cloudChoices) === "undefined") {
1643
+ cloudChoices = []
1644
+ };
1645
+ if(!cloudChoices.includes(cloudName)) {
1646
+ cloudChoices.push(cloudName);
1647
+ };
1648
+ }
1649
+ if(cloudIncludeRandom) {
1650
+ randomExcl ? elements[cloudName].excludeRandom = true : elements[cloudName].excludeRandom = false;
1651
+ } else {
1652
+ elements[cloudName].excludeRandom = true;
1653
+ };
1654
+ if(isAfterScriptLoading) {
1655
+ elementCount++; //increment for new cloud element
1656
+ createElementButton(cloudName);
1657
+ elements[cloudName].id = nextid++;
1658
+ document.getElementById("extraInfo").innerHTML = "<small><p>There are " + elementCount + " elements, including " + hiddenCount + " hidden ones.</p><p>©2021-" + new Date().getFullYear() + ". All Rights Reserved. <a href='https://r74n.com'>R74n</a></p></small>"; //update extra info counts (and the copyright year, due to the method used)
1659
+ };
1660
+ returns.push(cloudName);
1661
+ };
1662
+ return returns;
1663
+ } else if(cloudType === "*") {
1664
+ var trueReturns = [];
1665
+ for(cloudTypeForIndex = 0; cloudTypeForIndex <= 5; cloudTypeForIndex++) {
1666
+ trueReturns = trueReturns.concat(generateCloud(cloudElements,cloudTypeForIndex,isAfterScriptLoading));
1667
+ };
1668
+ return trueReturns;
1669
+ };
1670
+ };
1671
+
1672
+ //Creepers
1673
+
1674
+ generateCreeper = function(creeperElements,isAfterScriptLoading=false) {//it can be a single element, though
1675
+ //To specify an array creeper, have the array be inside another array.
1676
+ /*For reasons related to how element colors are loaded, if this function is being run from a JS mod file, isAfterScriptLoading should be false.
1677
+ Otherwise, you'll get TypeErrors for some reason when trying to place your creeper. If this is being run after the game has loaded (e.g. in the console),
1678
+ then isAfterScriptLoading should be true or you might also get TypeErrors (this latter case was a bit inconsistent when I tested it, but
1679
+ the former case wasn't. **isAfterScriptLoading must be false when this function is run from a JS mod file**.
1680
+ If isAfterScriptLoading is true, buttons (depending on the hiding setting) will be added to the auto creeper category, the 3 new elements per creeper will be assigned IDs, and the footer will be updated with the increased element counts.*/
1681
+ if(typeof(creeperElements) === "string") { //it should be an array, so string check
1682
+ //console.log("String detected");
1683
+ if(creeperElements.includes(",")) { //comma-separated string?
1684
+ //console.log("Splitting string to array");
1685
+ creeperElements = creeperElements.split(","); //,SS to array
1686
+ } else {
1687
+ //console.log("Wrapping string in array");
1688
+ creeperElements = [creeperElements]; //single string to array
1689
+ };
1690
+ };
1691
+ var returns = [];
1692
+ for(aaf = 0; aaf < creeperElements.length; aaf++) {
1693
+ var elementOfCreeper = creeperElements[aaf];
1694
+ var allElementsHaveColors = ((elementOfCreeper instanceof Array ? elementOfCreeper : [elementOfCreeper]).map(function(name) { return !!(elements[name]?.color)}).reduce(function(a,b) { return a*b }) == 1)
1695
+ if(!allElementsHaveColors) { continue };
1696
+ var startColor;
1697
+ var randomExcl = 0;
1698
+ //console.log("randomExcl set")
1699
+ //console.log(elementOfCreeper);
1700
+
1701
+ var headName,bodyName,placerName,descElement;
1702
+
1703
+ if(typeof(elementOfCreeper === "string")) { //comma separated string check
1704
+ if(elementOfCreeper.includes(",")) { //if it is
1705
+ elementOfCreeper = elementOfCreeper.split(","); //to array
1706
+ elementOfCreeper = elementOfCreeper.filter(function(e) { //strip nonexistent elements
1707
+ return typeof(elements[e]) === "object";
1708
+ });
1709
+ };
1710
+ };
1711
+ if(Array.isArray(elementOfCreeper)) {
1712
+ headName = `${elementOfCreeper.join("_")}_creeper_head`; //auto head element name
1713
+ bodyName = `${elementOfCreeper.join("_")}_creeper_body`; //auto body element name
1714
+ placerName = `${elementOfCreeper.join("_")}_creeper`; //auto placer element name
1715
+ descElement = elementOfCreeper.join(", "); //auto explosion element list
1716
+
1717
+ //array case color concatenator and excludeRandom handler
1718
+ startColor = [];
1719
+ //console.log(elementOfCreeper);
1720
+ for(ll = 0; ll < elementOfCreeper.length; ll++) {
1721
+ if(typeof(elements[elementOfCreeper[ll]].excludeRandom !== "undefined")) { //if excludeRandom exists (prevent TypeError)
1722
+ if(elements[elementOfCreeper[ll]].excludeRandom) { //it it's true
1723
+ randomExcl = 1; //the whole array creeper is excluded
1724
+ //console.log("array nyet" + elementOfCreeper);
1725
+ };
1726
+ };
1727
+ //console.log(elementOfCreeper[ll]);
1728
+ startColor = startColor.concat(elements[elementOfCreeper[ll]].color);
1729
+ };
1730
+ } else { //they should all be strings, so here
1731
+ headName = `${elementOfCreeper}_creeper_head`; //auto head element name
1732
+ bodyName = `${elementOfCreeper}_creeper_body`; //auto body element name
1733
+ placerName = `${elementOfCreeper}_creeper`; //auto placer element name
1734
+ descElement = elementOfCreeper; //auto explosion element
1735
+ startColor = elements[elementOfCreeper].color;
1736
+ if(typeof(elements[elementOfCreeper].excludeRandom !== "undefined")) { //if excludeRandom exists (prevent TypeError)
1737
+ if(elements[elementOfCreeper].excludeRandom) { //it it's true
1738
+ //console.log("nyet " + elementOfCreeper);
1739
+ randomExcl = 1; //the creeper is excluded
1740
+ } else {
1741
+ //console.log("allow " + elementOfCreeper);
1742
+ randomExcl = 0;
1743
+ };
1744
+ };
1745
+ };
1746
+ //Color gen
1747
+ if(Array.isArray(startColor)) { //Average arrays, make colors rgb()
1748
+ startColor = averageRgbPrefixedColorArray(startColor);
1749
+ } else {
1750
+ startColor = rgbHexCatcher(startColor);
1751
+ };
1752
+ var preColor = rgbStringToHSL(startColor);
1753
+ var colorsArray = [preColor, preColor, preColor, preColor, preColor, preColor, preColor, preColor, preColor, preColor]
1754
+ var colorObjectArray = [];
1755
+ for(q = 0; q < hslOffsets.length; q++) {
1756
+ colorsArray[q] = addArraysInPairs(colorsArray[q],hslOffsets[q]);
1757
+ colorsArray[q] = hslToHex(...colorsArray[q]);
1758
+ colorObjectArray[q] = hexToRGB(colorsArray[q]); //outputs hex
1759
+ if(isAfterScriptLoading) { // if it's after the hex -> RGB conversion
1760
+ var coq = colorObjectArray[q]; //pull the object
1761
+ //console.log(coq.r);
1762
+ colorsArray[q] = `rgb(${coq.r},${coq.g},${coq.b})`; //and change to the RGB from its values
1763
+ };
1764
+ };
1765
+
1766
+ //End color gen
1767
+
1768
+ //console.log(`${headName}; ${bodyName}; ${placerName}; ${descElement}`)
1769
+
1770
+ //Placer
1771
+ elements[placerName] = {
1772
+ movable: true,
1773
+ creeperType: elementOfCreeper,
1774
+ color: colorsArray,
1775
+ colorObject: colorObjectArray,
1776
+ category: "auto creepers",
1777
+ properties: {
1778
+ dead: false,
1779
+ dir: 1,
1780
+ panic: 0,
1781
+ following: false,
1782
+ },
1783
+ tick: function(pixel) {
1784
+ autoCreeperPlacerTick(pixel);
1785
+ },
1786
+ related: [bodyName,headName,"creeper"],
1787
+ desc: `Auto-generated creeper.<br/>Explodes into ${descElement}.`,
1788
+ autoType: "creeper",
1789
+ };
1790
+
1791
+ eLists.CREEPER.push(placerName);
1792
+
1793
+ //Body
1794
+ elements[bodyName] = {
1795
+ movable: true,
1796
+ creeperType: elementOfCreeper,
1797
+ color: colorsArray,
1798
+ colorObject: colorObjectArray,
1799
+ category: "auto creepers",
1800
+ hidden: true,
1801
+ excludeRandom: true,
1802
+ density: 1500,
1803
+ state: "solid",
1804
+ conduct: 25,
1805
+ tempHigh: 250,
1806
+ stateHigh: "cooked_meat",
1807
+ tempLow: -30,
1808
+ stateLow: "frozen_meat",
1809
+ burn: 10,
1810
+ burnTime: 250,
1811
+ burnInto: ["cooked_meat","cooked_meat","cooked_meat","cooked_meat","gunpowder"],
1812
+ breakInto: ["blood","gunpowder"],
1813
+ reactions: {
1814
+ "cancer": { "elem1":"cancer", "chance":0.005 },
1815
+ "radiation": { "elem1":["ash","meat","rotten_meat","cooked_meat"], "chance":0.4 },
1816
+ "plague": { "elem1":"plague", "chance":0.05 },
1817
+ },
1818
+ properties: {
1819
+ dead: false,
1820
+ dir: 1,
1821
+ panic: 0,
1822
+ charged: false,
1823
+ didChargeBlueTinted: false,
1824
+ },
1825
+ tick: function(pixel) {
1826
+ autoCreeperBodyTick(pixel);
1827
+ },
1828
+ autoType: "creeper",
1829
+ };
1830
+
1831
+ //Head
1832
+ elements[headName] = {
1833
+ movable: true,
1834
+ creeperType: elementOfCreeper,
1835
+ color: colorsArray,
1836
+ colorObject: colorObjectArray,
1837
+ category: "auto creepers",
1838
+ hidden: true,
1839
+ excludeRandom: true,
1840
+ density: 1080,
1841
+ state: "solid",
1842
+ conduct: 25,
1843
+ tempHigh: 250,
1844
+ stateHigh: "cooked_meat",
1845
+ tempLow: -30,
1846
+ stateLow: "frozen_meat",
1847
+ burn: 10,
1848
+ burnTime: 250,
1849
+ burnInto: ["cooked_meat","cooked_meat","cooked_meat","cooked_meat","cooked_meat","cooked_meat","cooked_meat","cooked_meat","cooked_meat","gunpowder"],
1850
+ breakInto: "blood",
1851
+ reactions: {
1852
+ "cancer": { "elem1":"cancer", "chance":0.005 },
1853
+ "radiation": { "elem1":["ash","meat","rotten_meat","cooked_meat"], "chance":0.4 },
1854
+ "plague": { "elem1":"plague", "chance":0.05 },
1855
+ "oxygen": { "elem2":"carbon_dioxide", "chance":0.5 },
1856
+ },
1857
+ properties: {
1858
+ dead: false,
1859
+ following: false,
1860
+ hissing: false,
1861
+ charged: false,
1862
+ didChargeBlueTinted: false,
1863
+ },
1864
+ tick: function(pixel) {
1865
+ autoCreeperHeadTick(pixel);
1866
+ },
1867
+ autoType: "creeper",
1868
+ };
1869
+ if(isAfterScriptLoading) {
1870
+ elementCount += 3; //placer, body, head
1871
+ createElementButton(placerName)
1872
+ if(settings["unhide"] === 0) { //hide some elements: body and head would be hidden, so only update hidden count
1873
+ hiddenCount += 2;
1874
+ } else if(settings["unhide"] === 1) { //unhide all elements: b/h would not be hidden, so only create their buttons
1875
+ createElementButton(bodyName);
1876
+ createElementButton(headName);
1877
+ } else if(settings["unhide"] === 2) {
1878
+ settings.unlocked[bodyName] ? createElementButton(bodyName) : hiddenCount++; //ternary: if headName is unlocked, create button, else increase hiddenCount
1879
+ settings.unlocked[headName] ? createElementButton(headName) : hiddenCount++; //above with headName
1880
+ };
1881
+ elements[placerName].id = nextid++; //set placer's id to nextid and then increment nextid
1882
+ elements[bodyName].id = nextid++; //repeat with body and head
1883
+ elements[headName].id = nextid++;
1884
+ headBodyObject[headName] = bodyName;
1885
+ document.getElementById("extraInfo").innerHTML = "<small><p>There are " + elementCount + " elements, including " + hiddenCount + " hidden ones.</p><p>©2021-" + new Date().getFullYear() + ". All Rights Reserved. <a href='https://r74n.com'>R74n</a></p></small>"; //update extra info counts (and the copyright year, due to the method used)
1886
+ };
1887
+ if(creeperIncludeRandom) {
1888
+ randomExcl ? elements[placerName].excludeRandom = true : elements[placerName].excludeRandom = false;
1889
+ } else {
1890
+ elements[placerName].excludeRandom = true;
1891
+ };
1892
+ if(!randomExcl) {
1893
+ //console.log("spawn enabling " + placerName);
1894
+ spawnCreepers.push(placerName);
1895
+ } else {
1896
+ //console.log("nyetted " + placerName);
1897
+ };
1898
+ returns.push(placerName);
1899
+ };
1900
+ return returns;
1901
+ };
1902
+
1903
+ //Fairies
1904
+
1905
+ generateFairy = function(fairyElements,isAfterScriptLoading=false) {//it can be a single element, though
1906
+ //To specify an array fairy, have the array be inside another array.
1907
+ /*For reasons related to how element colors are loaded, if this function is being run from a JS mod file, isAfterScriptLoading should be false.
1908
+ Otherwise, you'll get TypeErrors for some reason when trying to place your fairy. If this is being run after the game has loaded (e.g. in the console),
1909
+ then isAfterScriptLoading should be true or you might also get TypeErrors (this latter case was a bit inconsistent when I tested it, but
1910
+ the former case wasn't. **isAfterScriptLoading must be false when this function is run from a JS mod file**.*/
1911
+ if(typeof(fairyElements) === "string") { //it should be an array, so string check
1912
+ //console.log("String detected");
1913
+ if(fairyElements.includes(",")) { //comma-separated string?
1914
+ //console.log("Splitting string to array");
1915
+ fairyElements = fairyElements.split(","); //,SS to array
1916
+ } else {
1917
+ //console.log("Wrapping string in array");
1918
+ fairyElements = [fairyElements]; //single string to array
1919
+ };
1920
+ };
1921
+ var returns = [];
1922
+ for(aaf = 0; aaf < fairyElements.length; aaf++) {
1923
+ var elementOfFairy = fairyElements[aaf];
1924
+ var allElementsHaveColors = ((elementOfFairy instanceof Array ? elementOfFairy : [elementOfFairy]).map(function(name) { return !!(elements[name]?.color)}).reduce(function(a,b) { return a*b }) == 1)
1925
+ if(!allElementsHaveColors) { continue };
1926
+ var startColor;
1927
+ var randomExcl = 0;
1928
+ var isNocheer = 0;
1929
+ //console.log("randomExcl set")
1930
+ //console.log(elementOfFairy);
1931
+
1932
+ var fairyName;
1933
+
1934
+ if(typeof(elementOfFairy === "string")) { //comma separated string check
1935
+ if(elementOfFairy.includes(",")) { //if it is
1936
+ elementOfFairy = elementOfFairy.split(","); //to array
1937
+ elementOfFairy = elementOfFairy.filter(function(e) { //strip nonexistent elements
1938
+ return typeof(elements[e]) === "object";
1939
+ });
1940
+ };
1941
+ };
1942
+ if(Array.isArray(elementOfFairy)) {
1943
+ fairyName = `${elementOfFairy.join("_")}_fairy`; //auto placer element name
1944
+
1945
+ //array case color concatenator and excludeRandom handler
1946
+ startColor = [];
1947
+ //console.log(elementOfFairy);
1948
+ for(ll = 0; ll < elementOfFairy.length; ll++) {
1949
+ if(typeof(elements[elementOfFairy[ll]].excludeRandom !== "undefined")) { //if excludeRandom exists (prevent TypeError)
1950
+ if(elements[elementOfFairy[ll]].excludeRandom) { //it it's true
1951
+ randomExcl = 1; //the whole array fairy is excluded
1952
+ //console.log("array nyet" + elementOfFairy);
1953
+ };
1954
+ };
1955
+ //console.log(elementOfFairy[ll]);
1956
+ startColor = startColor.concat(elements[elementOfFairy[ll]].color);
1957
+ };
1958
+
1959
+ for(ll = 0; ll < elementOfFairy.length; ll++) {
1960
+ if(typeof(elements[elementOfFairy[ll]].nocheer !== "undefined")) { //if nocheer exists (prevent TypeError)
1961
+ if(elements[elementOfFairy[ll]].nocheer) { //it it's true
1962
+ isNocheer = 1; //the whole array fairy is excluded
1963
+ //console.log("array nyet" + elementOfFairy);
1964
+ };
1965
+ };
1966
+ //console.log(elementOfFairy[ll]);
1967
+ startColor = startColor.concat(elements[elementOfFairy[ll]].color);
1968
+ };
1969
+ } else { //they should all be strings, so here
1970
+ fairyName = `${elementOfFairy}_fairy`; //auto placer element name
1971
+ startColor = elements[elementOfFairy].color;
1972
+ if(typeof(elements[elementOfFairy].excludeRandom !== "undefined")) { //if excludeRandom exists (prevent TypeError)
1973
+ if(elements[elementOfFairy].excludeRandom) { //it it's true
1974
+ //console.log("nyet " + elementOfFairy);
1975
+ randomExcl = 1; //the fairy is excluded
1976
+ } else {
1977
+ //console.log("allow " + elementOfFairy);
1978
+ randomExcl = 0;
1979
+ };
1980
+ };
1981
+
1982
+ if(typeof(elements[elementOfFairy].nocheer !== "undefined")) { //if nocheer exists (prevent TypeError)
1983
+ if(elements[elementOfFairy].nocheer) { //it it's true
1984
+ //console.log("nyet " + elementOfFairy);
1985
+ isNocheer = 1; //the fairy is excluded
1986
+ } else {
1987
+ //console.log("allow " + elementOfFairy);
1988
+ isNocheer = 0;
1989
+ };
1990
+ };
1991
+ };
1992
+ //Color gen
1993
+ if(Array.isArray(startColor)) { //Average arrays, make colors rgb()
1994
+ startColor = averageRgbPrefixedColorArray(startColor);
1995
+ } else {
1996
+ startColor = rgbHexCatcher(startColor);
1997
+ };
1998
+
1999
+ //console.log(`rgbStringToObject(${startColor}) from more_fairies.js`)
2000
+ var newColorObjectArray = [];
2001
+ var newColorArray = [];
2002
+
2003
+ for(i = 0; i < elements.fairy.color.length; i++) {
2004
+ var newFairyColorlet = elements.fairy.color[i];
2005
+ var newColor = multiplyColors(startColor,newFairyColorlet);
2006
+ var newColorJSON = multiplyColors(startColor,newFairyColorlet,"json");
2007
+ newColorArray.push(newColor);
2008
+ newColorObjectArray.push(newColorJSON);
2009
+ };
2010
+
2011
+ //End color gen
2012
+
2013
+ //The fairy
2014
+
2015
+ //console.log(elementOfFairy);
2016
+ var firstInfo, firstTemp;
2017
+ if(Array.isArray(elementOfFairy)) {
2018
+ firstInfo = elements[elementOfFairy[0]];
2019
+ firstTemp = airTemp;
2020
+ if(typeof(firstInfo.temp) !== "undefined") {
2021
+ firstTemp = firstInfo.temp;
2022
+ };
2023
+ } else {
2024
+ firstInfo = elements[elementOfFairy];
2025
+ firstTemp = airTemp;
2026
+ if(typeof(firstInfo.temp) !== "undefined") {
2027
+ firstTemp = firstInfo.temp;
2028
+ };
2029
+ };
2030
+
2031
+ elementOfFairy = tryJoin(elementOfFairy,",");
2032
+
2033
+ //console.log(elementOfFairy);
2034
+
2035
+ if(!elementExists(fairyName)) {
2036
+ elements[fairyName] = {
2037
+ color: newColorArray,
2038
+ insulate: true,
2039
+ flippableX: true,
2040
+ colorObject: newColorObjectArray,
2041
+ behavior: [
2042
+ ["XX","M1","M1"],
2043
+ ["XX","FX%5","XX"],
2044
+ ["XX",`CR:${elementOfFairy}%0.5 AND CR:fairy_dust%0.005 AND M1`,"M1"]
2045
+ ],
2046
+ category: "auto_fey",
2047
+ temp: firstTemp,
2048
+ hardness: 1,
2049
+ autoType: "fairy",
2050
+ };
2051
+ if(typeof(eLists) === "undefined") {
2052
+ eLists = {};
2053
+ };
2054
+ if(typeof(eLists.FAIRY) === "undefined") {
2055
+ eLists.FAIRY = [];
2056
+ };
2057
+ eLists.FAIRY.push(fairyName);
2058
+ if(!randomExcl) {
2059
+ if(typeof(fairyChoices) === "undefined") {
2060
+ fairyChoices = []
2061
+ };
2062
+ if(!fairyChoices.includes(fairyName)) {
2063
+ fairyChoices.push(fairyName);
2064
+ };
2065
+ }
2066
+ if(isNocheer) {
2067
+ elements[fairyName].nocheer = true;
2068
+ }
2069
+ if(fairyIncludeRandom) {
2070
+ randomExcl ? elements[fairyName].excludeRandom = true : elements[fairyName].excludeRandom = false;
2071
+ } else {
2072
+ elements[fairyName].excludeRandom = true;
2073
+ };
2074
+ if(isAfterScriptLoading) {
2075
+ elements[fairyName].flippableX = true;
2076
+ elementCount++; //increment for new fairy element
2077
+ if (settings.cheerful && elements[fairyName].nocheer) {
2078
+ elements[fairyName].hidden = true;
2079
+ hiddenCount++;
2080
+ } else {
2081
+ createElementButton(fairyName);
2082
+ };
2083
+ elements[fairyName].id = nextid++;
2084
+ document.getElementById("extraInfo").innerHTML = "<small><p>There are " + elementCount + " elements, including " + hiddenCount + " hidden ones.</p><p>©2021-" + new Date().getFullYear() + ". All Rights Reserved. <a href='https://r74n.com'>R74n</a></p></small>"; //update extra info counts (and the copyright year, due to the method used)
2085
+ };
2086
+ };
2087
+ returns.push(fairyName);
2088
+ };
2089
+ return returns;
2090
+ };
2091
+
2092
+ //Spouts
2093
+
2094
+ generateSpout = function(spoutElements,isAfterScriptLoading=false) {//it can be a single element, though
2095
+ //To specify an array spout, have the array be inside another array.
2096
+ /*For reasons related to how element colors are loaded, if this function is being run from a JS mod file, isAfterScriptLoading should be false.
2097
+ Otherwise, you'll get TypeErrors for some reason when trying to place your spout. If this is being run after the game has loaded (e.g. in the console),
2098
+ then isAfterScriptLoading should be true or you might also get TypeErrors (this latter case was a bit inconsistent when I tested it, but
2099
+ the former case wasn't. **isAfterScriptLoading must be false when this function is run from a JS mod file**.*/
2100
+ if(typeof(spoutElements) === "string") { //it should be an array, so string check
2101
+ //console.log("String detected");
2102
+ if(spoutElements.includes(",")) { //comma-separated string?
2103
+ //console.log("Splitting string to array");
2104
+ spoutElements = spoutElements.split(","); //,SS to array
2105
+ } else {
2106
+ //console.log("Wrapping string in array");
2107
+ spoutElements = [spoutElements]; //single string to array
2108
+ };
2109
+ };
2110
+ var returns = [];
2111
+ for(aaf = 0; aaf < spoutElements.length; aaf++) {
2112
+ var elementOfSpout = spoutElements[aaf];
2113
+ var allElementsHaveColors = ((elementOfSpout instanceof Array ? elementOfSpout : [elementOfSpout]).map(function(name) { return !!(elements[name]?.color)}).reduce(function(a,b) { return a*b }) == 1)
2114
+ if(!allElementsHaveColors) { continue };
2115
+ var startColor;
2116
+ var randomExcl = 0;
2117
+ var isNocheer = 0;
2118
+ //console.log("randomExcl set")
2119
+ //console.log(elementOfSpout);
2120
+
2121
+ var spoutName;
2122
+
2123
+ if(typeof(elementOfSpout === "string")) { //comma separated string check
2124
+ if(elementOfSpout.includes(",")) { //if it is
2125
+ elementOfSpout = elementOfSpout.split(","); //to array
2126
+ elementOfSpout = elementOfSpout.filter(function(e) { //strip nonexistent elements
2127
+ return typeof(elements[e]) === "object";
2128
+ });
2129
+ };
2130
+ };
2131
+ if(Array.isArray(elementOfSpout)) {
2132
+ spoutName = `${elementOfSpout.join("_")}_spout`; //auto placer element name
2133
+
2134
+ //array case color concatenator and excludeRandom handler
2135
+ startColor = [];
2136
+ //console.log(elementOfSpout);
2137
+ for(ll = 0; ll < elementOfSpout.length; ll++) {
2138
+ if(typeof(elements[elementOfSpout[ll]].excludeRandom !== "undefined")) { //if excludeRandom exists (prevent TypeError)
2139
+ if(elements[elementOfSpout[ll]].excludeRandom) { //it it's true
2140
+ randomExcl = 1; //the whole array spout is excluded
2141
+ //console.log("array nyet" + elementOfSpout);
2142
+ };
2143
+ };
2144
+ //console.log(elementOfSpout[ll]);
2145
+ startColor = startColor.concat(elements[elementOfSpout[ll]].color);
2146
+ };
2147
+
2148
+ for(ll = 0; ll < elementOfSpout.length; ll++) {
2149
+ if(typeof(elements[elementOfSpout[ll]].nocheer !== "undefined")) { //if nocheer exists (prevent TypeError)
2150
+ if(elements[elementOfSpout[ll]].nocheer) { //it it's true
2151
+ isNocheer = 1; //the whole array spout is excluded
2152
+ //console.log("array nyet" + elementOfSpout);
2153
+ };
2154
+ };
2155
+ //console.log(elementOfSpout[ll]);
2156
+ startColor = startColor.concat(elements[elementOfSpout[ll]].color);
2157
+ };
2158
+ } else { //they should all be strings, so here
2159
+ spoutName = `${elementOfSpout}_spout`; //auto placer element name
2160
+ startColor = elements[elementOfSpout].color;
2161
+ if(typeof(elements[elementOfSpout].excludeRandom !== "undefined")) { //if excludeRandom exists (prevent TypeError)
2162
+ if(elements[elementOfSpout].excludeRandom) { //it it's true
2163
+ //console.log("nyet " + elementOfSpout);
2164
+ randomExcl = 1; //the spout is excluded
2165
+ } else {
2166
+ //console.log("allow " + elementOfSpout);
2167
+ randomExcl = 0;
2168
+ };
2169
+ };
2170
+
2171
+ if(typeof(elements[elementOfSpout].nocheer !== "undefined")) { //if nocheer exists (prevent TypeError)
2172
+ if(elements[elementOfSpout].nocheer) { //it it's true
2173
+ //console.log("nyet " + elementOfSpout);
2174
+ isNocheer = 1; //the spout is excluded
2175
+ } else {
2176
+ //console.log("allow " + elementOfSpout);
2177
+ isNocheer = 0;
2178
+ };
2179
+ };
2180
+ };
2181
+ //Color gen
2182
+ if(Array.isArray(startColor)) { //Average arrays, make colors rgb()
2183
+ startColor = averageRgbPrefixedColorArray(startColor);
2184
+ } else {
2185
+ startColor = rgbHexCatcher(startColor);
2186
+ };
2187
+
2188
+ var newColorObject = rgbStringToObject(startColor);
2189
+
2190
+ //End color gen
2191
+
2192
+ //The spout
2193
+
2194
+ //console.log(elementOfSpout);
2195
+ var firstInfo, firstTemp;
2196
+ if(Array.isArray(elementOfSpout)) {
2197
+ firstInfo = elements[elementOfSpout[0]];
2198
+ firstTemp = airTemp;
2199
+ if(typeof(firstInfo.temp) !== "undefined") {
2200
+ firstTemp = firstInfo.temp;
2201
+ };
2202
+ } else {
2203
+ firstInfo = elements[elementOfSpout];
2204
+ firstTemp = airTemp;
2205
+ if(typeof(firstInfo.temp) !== "undefined") {
2206
+ firstTemp = firstInfo.temp;
2207
+ };
2208
+ };
2209
+
2210
+ elementOfSpout = tryJoin(elementOfSpout,",");
2211
+
2212
+ //console.log(elementOfSpout);
2213
+
2214
+ elements[spoutName] = {
2215
+ color: startColor,
2216
+ insulate: true,
2217
+ colorObject: newColorObject,
2218
+ behavior: [
2219
+ ["XX",`CR:${elementOfSpout}`,"XX"],
2220
+ [`CR:${elementOfSpout}`,"XX",`CR:${elementOfSpout}`],
2221
+ ["XX",`CR:${elementOfSpout}`,"XX"]
2222
+ ],
2223
+ category: "spouts",
2224
+ temp: firstTemp,
2225
+ hardness: 1,
2226
+ autoType: "spout",
2227
+ };
2228
+ if(!randomExcl) {
2229
+ if(typeof(spoutChoices) === "undefined") {
2230
+ spoutChoices = []
2231
+ };
2232
+ if(!spoutChoices.includes(spoutName)) {
2233
+ spoutChoices.push(spoutName);
2234
+ };
2235
+ }
2236
+ if(spoutIncludeRandom) {
2237
+ randomExcl ? elements[spoutName].excludeRandom = true : elements[spoutName].excludeRandom = false;
2238
+ } else {
2239
+ elements[spoutName].excludeRandom = true;
2240
+ };
2241
+ if(isNocheer) {
2242
+ elements[spoutName].nocheer = true;
2243
+ }
2244
+ if(isAfterScriptLoading) {
2245
+ elementCount++; //increment for new spout element
2246
+ if (settings.cheerful && elements[spoutName].nocheer) {
2247
+ elements[spoutName].hidden = true;
2248
+ hiddenCount++;
2249
+ } else {
2250
+ createElementButton(spoutName);
2251
+ };
2252
+ elements[spoutName].id = nextid++;
2253
+ document.getElementById("extraInfo").innerHTML = "<small><p>There are " + elementCount + " elements, including " + hiddenCount + " hidden ones.</p><p>©2021-" + new Date().getFullYear() + ". All Rights Reserved. <a href='https://r74n.com'>R74n</a></p></small>"; //update extra info counts (and the copyright year, due to the method used)
2254
+ };
2255
+
2256
+ eLists.SPOUT.push(spoutName);
2257
+ returns.push(spoutName);
2258
+ };
2259
+ return returns;
2260
+ };
2261
+
2262
+ //Other runAfterAutogen
2263
+
2264
+ //Bombs
2265
+
2266
+ runAfterAutogen(function() {
2267
+ if(elementExists("vaporized_rock")) {
2268
+ elements.molten_dirt.tempHigh = 3000;
2269
+ elements.molten_dirt.stateHigh = "vaporized_rock";
2270
+ };
2271
+ });
2272
+
2273
+ //Modless orphaned code that I don't want meeting La Maison
2274
+
2275
+ runAfterAutogen(function() {
2276
+ var solidBlacklist = ["mistake", "birthpool", "firesea"]; //exclude these since they seem to be liquid
2277
+
2278
+ solids = Object.keys(elements).filter(function(e) {
2279
+ return elements[e].category === "solids" && !solidBlacklist.includes(e);
2280
+ });
2281
+
2282
+ for(i = 0; i < solids.length; i++) { //A lot of elements in solids, particularly metals, are missing a "state: solid".
2283
+ var solidName = solids[i]
2284
+ elements[solidName].state = "solid";
2285
+ };
2286
+ });
2287
+
2288
+ //Mass generation calls
2289
+
2290
+ //Bombs
2291
+
2292
+ runAfterAutogen(function() {
2293
+ if(generateBombs) {
2294
+ var tempArray = Object.keys(elements);
2295
+ tempArray.push(["rock", "sand"]);
2296
+ generateBomb(tempArray,false)
2297
+ };
2298
+ });
2299
+
2300
+ //Creepers
2301
+
2302
+ runAfterAutogen(function() {
2303
+ if(generateCreepers) {
2304
+ var tempArray = Object.keys(elements);
2305
+ tempArray.push(["rock", "sand"]);
2306
+ generateCreeper(tempArray,false)
2307
+ };
2308
+ });
2309
+
2310
+ //Several
2311
+
2312
+ runAfterAutogen(function() {
2313
+ cloudElements = [...Object.keys(elements).filter(function(e) { //same criteria as spouts
2314
+ return (commonMovableCriteria(e,excludedCloudElements));
2315
+ }),["rock","sand"]];
2316
+ fairyElements = [...Object.keys(elements).filter(function(e) { //same criteria as spouts
2317
+ return (commonMovableCriteria(e,excludedFairyElements));
2318
+ }),["rock","sand"]];
2319
+ spoutElements = [...Object.keys(elements).filter(function(e) { //same criteria as spouts
2320
+ return (commonMovableCriteria(e,excludedSpoutElements));
2321
+ }),["rock","sand"]];
2322
+ if(generateFairies) {
2323
+ generateFairy(fairyElements,false);
2324
+ };
2325
+ if(generateClouds) {
2326
+ generateCloud(cloudElements,"*",false);
2327
+ };
2328
+ if(generateSpouts) {
2329
+ generateSpout(spoutElements,false);
2330
+ };
2331
+ });
2332
+
2333
+ //Random spawners
2334
+
2335
+ //Bombs
2336
+
2337
+ elements.spawn_random_bomb = {
2338
+ color: ["#141c23","#340f3c","#4b2d3f","#35463f","#244633","#460c1b","#294725","#34290c"],
2339
+ behavior: behaviors.WALL,
2340
+ category: "special",
2341
+ excludeRandom: true,
2342
+ tick: function(pixel) {
2343
+ if(bombChoices == undefined || bombChoices.length == 0) {
2344
+ deletePixel(pixel.x,pixel.y);
2345
+ return false;
2346
+ };
2347
+ changePixel(pixel,bombChoices[Math.floor(Math.random() * bombChoices.length)])
2348
+ },
2349
+ };
2350
+
2351
+ //Clouds
2352
+
2353
+ elements.spawn_random_cloud = {
2354
+ color: ["#3e5f8a","#a334ec","#ea96f9","#a6ecf6","#70ebc8","#d9286b","#7eed91","#a18b30"],
2355
+ behavior: behaviors.WALL,
2356
+ category: "special",
2357
+ excludeRandom: true,
2358
+ tick: function(pixel) {
2359
+ if(cloudChoices == undefined || cloudChoices.length == 0) {
2360
+ deletePixel(pixel.x,pixel.y);
2361
+ return false;
2362
+ };
2363
+ changePixel(pixel,cloudChoices[Math.floor(Math.random() * cloudChoices.length)])
2364
+ },
2365
+ };
2366
+
2367
+ //Creepers
2368
+
2369
+ elements.spawn_random_creeper = {
2370
+ color: colorOfRandomCreeper,
2371
+ behavior: behaviors.WALL,
2372
+ category: "special",
2373
+ excludeRandom: false, //see below
2374
+ movable: true,
2375
+ tick: function(pixel) {
2376
+ if(spawnCreepers == undefined || spawnCreepers.length == 0) {
2377
+ deletePixel(pixel.x,pixel.y);
2378
+ return false;
2379
+ };
2380
+ changePixel(pixel,spawnCreepers[Math.floor(Math.random() * spawnCreepers.length)]) //spawnCreepers is already excludeRandom filtered
2381
+ },
2382
+ };
2383
+
2384
+ //Fairies
2385
+
2386
+ elements.spawn_random_fairy = {
2387
+ color: ["#3e5f8a","#a334ec","#ea96f9","#a6ecf6","#70ebc8","#d9286b","#7eed91","#a18b30"],
2388
+ behavior: behaviors.WALL,
2389
+ category: "special",
2390
+ excludeRandom: true,
2391
+ tick: function(pixel) {
2392
+ if(fairyChoices == undefined || fairyChoices.length == 0) {
2393
+ deletePixel(pixel.x,pixel.y);
2394
+ return false;
2395
+ };
2396
+ changePixel(pixel,fairyChoices[Math.floor(Math.random() * fairyChoices.length)])
2397
+ },
2398
+ };
2399
+
2400
+ //Spouts
2401
+
2402
+ elements.spawn_random_spout = {
2403
+ color: ["#3e5f8a","#a334ec","#ea96f9","#a6ecf6","#70ebc8","#d9286b","#7eed91","#a18b30"],
2404
+ behavior: behaviors.WALL,
2405
+ category: "special",
2406
+ excludeRandom: true,
2407
+ tick: function(pixel) {
2408
+ if(spoutChoices == undefined || spoutChoices.length == 0) {
2409
+ deletePixel(pixel.x,pixel.y);
2410
+ return false;
2411
+ };
2412
+ changePixel(pixel,spoutChoices[Math.floor(Math.random() * spoutChoices.length)])
2413
+ },
2414
+ };
2415
+
2416
+ //Other post-generation
2417
+
2418
+ //Fairies
2419
+
2420
+ //FAIRYKILL
2421
+ behaviors.FAIRYKILL_OLD = behaviors.FAIRYKILL;
2422
+ behaviors.FAIRYKILL = function(pixel) {
2423
+ if (pixel.start === pixelTicks) {return}
2424
+ if (pixel.charge && elements[pixel.element].behaviorOn) {
2425
+ pixelTick(pixel)
2426
+ }
2427
+ var ignore = (elements[pixel.element].ignore == "undefined" ? [] : elements[pixel.element].ignore);
2428
+ for(i = 0; i < adjacentCoords.length; i++) {
2429
+ var coord = adjacentCoords[i];
2430
+ var offsetX = coord[0];
2431
+ var offsetY = coord[1];
2432
+ var newX = pixel.x+offsetX;
2433
+ var newY = pixel.y+offsetY;
2434
+ if(!isEmpty(newX,newY,true)) {
2435
+ var newPixel = pixelMap[newX][newY];
2436
+ var newElement = newPixel.element;
2437
+ var isIgnored = (newElement === ignore || ignore.includes(newElement))
2438
+ if(eLists.FAIRY.includes(newElement) && !isIgnored) {
2439
+ deletePixel(newX,newY);
2440
+ };
2441
+ };
2442
+ };
2443
+ doDefaults(pixel);
2444
+ };
2445
+
2446
+ //Add ignores
2447
+ var ignoreArray = ["acid", "iron", "silver", "steel", "tungstensteel", "void", "liquid_void", "chute", "vute", "drute", "drolute", "volute", "alkahest", "acid_gas"];
2448
+ for(l = 0; l < ignoreArray.length; l++) {
2449
+ var name = ignoreArray[l];
2450
+ var fairyName = `${ignoreArray[l]}_fairy`;
2451
+ if(elementExists(name) && elementExists(fairyName)) {
2452
+ var baseInfo = elements[name];
2453
+ if(typeof(baseInfo.ignore) === "undefined") {
2454
+ baseInfo.ignore = [];
2455
+ } else if(typeof(baseInfo.ignore) === "string") {
2456
+ baseInfo.ignore = [baseInfo.ignore];
2457
+ };
2458
+ baseInfo.ignore.push(fairyName);
2459
+ };
2460
+ };
2461
+
2462
+ //Update FAIRYKILL elements
2463
+ var fairykillElements = ["iron", "silver", "steel", "tungstensteel"];
2464
+ for(q = 0; q < fairykillElements.length; q++) {
2465
+ var name = fairykillElements[q];
2466
+ if(elementExists(name)) {
2467
+ elements[name].behavior = behaviors.FAIRYKILL;
2468
+ };
2469
+ };
2470
+ });
2471
+ } else {
2472
+ if(!enabledMods.includes(runAfterAutogenMod)) { enabledMods.splice(enabledMods.indexOf(modName),0,runAfterAutogenMod) };
2473
+ if(!enabledMods.includes(explodeAtPlusMod)) { enabledMods.splice(enabledMods.indexOf(modName),0,explodeAtPlusMod) };
2474
+ if(!enabledMods.includes(libraryMod)) { enabledMods.splice(enabledMods.indexOf(modName),0,libraryMod) };
2475
+ if(!enabledMods.includes(feyAndMoreMod)) { enabledMods.splice(enabledMods.indexOf(modName),0,feyAndMoreMod) };
2476
+ if(!enabledMods.includes(mobsMod)) { enabledMods.splice(enabledMods.indexOf(modName),0,mobsMod) };
2477
+ alert(`The "${runAfterAutogenMod}", "${libraryMod}", "${explodeAtPlusMod}", "${feyAndMoreMod}", and "${mobsMod}" mods are required; any missing mods in this list have been automatically inserted (reload for this to take effect).`)
2478
+ localStorage.setItem("enabledMods", JSON.stringify(enabledMods));
2479
+ };