studyup 0.0.0-stage → 1.0.1

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 +518 -0
  199. package/package.json +13 -4
  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,4895 @@
1
+ function isASecond(number) {
2
+ if (number % 30 === 0 || number % 29 === 0 || number % 31 === 0) {
3
+ return true;
4
+ } else {
5
+ return false;
6
+ }
7
+ }
8
+
9
+ doNHeat = function(pixel) {
10
+ // Check right and bottom adjacent pixels
11
+ for (var i = 0; i < biCoords.length; i++) {
12
+ var x = pixel.x+biCoords[i][0];
13
+ var y = pixel.y+biCoords[i][1];
14
+ if (!isEmpty(x,y,true)) {
15
+ var newPixel = pixelMap[x][y];
16
+ // Skip if both temperatures are the same
17
+ if (pixel.temp === newPixel.temp || elements[newPixel.element].insulate === true) {
18
+ continue;
19
+ }
20
+ // Set both pixel temperatures to their average
21
+ var avg = (pixel.temp + newPixel.temp)/2;
22
+ pixel.temp = avg;
23
+ newPixel.temp = avg;
24
+ pixelTempCheck(pixel);
25
+ pixelTempCheck(newPixel);
26
+ }
27
+ }
28
+ }
29
+
30
+ doNBurning = function(pixel) {
31
+ if (pixel.NBurning) { // Burning
32
+ if (pixel.NBurnStart === undefined) { pixel.NBurnStart = pixelTicks }
33
+ var info = elements[pixel.element];
34
+ if (pixel.temp < -50) {
35
+ pixel.NBurning = undefined;
36
+ pixel.NBurnStart = undefined;
37
+ return;
38
+ }
39
+ for (var i = 0; i < adjacentCoords.length; i++) { // Burn adjacent pixels
40
+ var x = pixel.x+adjacentCoords[i][0];
41
+ var y = pixel.y+adjacentCoords[i][1];
42
+ if (!isEmpty(x,y,true)) {
43
+ var newPixel = pixelMap[x][y]
44
+ if (elements[newPixel.element].burnable === true && elements[newPixel.element].nburnTime === true && Math.random() > 0.8) {
45
+ newPixel.NBurning = true
46
+ }
47
+ else if (elements[newPixel.element].burnableFast === true && Math.random() > 0.25) {
48
+ changePixel(newPixel,"noita_fire")
49
+ newPixel.NBurning = true
50
+ }
51
+ }
52
+ }
53
+
54
+ if ((pixelTicks - pixel.NBurnStart > (info.nburnTime || 200)) && Math.floor(Math.random()*100)<(info.nburn || 10) && !(info.nburnTime === undefined && info.hardness >= 1)) {
55
+ if (elements[pixel.element].nburnInto !== undefined) {
56
+ if (Math.random() > 0.5) {
57
+ deletePixel(pixel.x,pixel.y)
58
+ }
59
+ else {
60
+ changePixel(pixel,elements[pixel.element].nburnInto);
61
+ }
62
+ }
63
+ else {
64
+ changePixel(pixel,"noita_fire");
65
+ pixel.NBurning = true;
66
+ }
67
+ }
68
+ else if (Math.floor(Math.random()*100)<10 && info.id !== elements.noita_fire.id) { // Spawn fire
69
+ if (isEmpty(pixel.x,pixel.y-1)) {
70
+ createPixel(("noita_fire"),pixel.x,pixel.y-1);
71
+ pixelMap[pixel.x][pixel.y-1].temp = pixel.temp//+(pixelTicks - (pixel.burnStart || 0));
72
+ pixelMap[pixel.x][pixel.y-1].NBurning = true
73
+ }
74
+ // same for below if top is blocked
75
+ else if (isEmpty(pixel.x,pixel.y+1)) {
76
+ createPixel(("noita_fire"),pixel.x,pixel.y+1);
77
+ pixelMap[pixel.x][pixel.y+1].temp = pixel.temp//+(pixelTicks - (pixel.burnStart || 0));
78
+ pixelMap[pixel.x][pixel.y+1].NBurning = true
79
+ }
80
+ }
81
+
82
+ }
83
+ }
84
+
85
+ NExplode = function(x,y,radius,damage,fire="noita_fire") {
86
+ // if fire contains , split it into an array
87
+ if (fire.indexOf(",") !== -1) {
88
+ fire = fire.split(",");
89
+ }
90
+ var coords = circleCoords(x,y,radius);
91
+ var power = radius/10;
92
+ //for (var p = 0; p < Math.round(radius/10+1); p++) {
93
+ for (var i = 0; i < coords.length; i++) {
94
+ if (isEmpty(coords[i].x,coords[i].y)) {
95
+ // if fire is an array, choose a random item
96
+ if (Array.isArray(fire)) {
97
+ createPixel(fire[Math.floor(Math.random() * fire.length)],coords[i].x,coords[i].y);
98
+ }
99
+ else {
100
+ createPixel(fire,coords[i].x,coords[i].y);
101
+ }
102
+ }
103
+ else if (!outOfBounds(coords[i].x,coords[i].y)) {
104
+ // damage the pixel
105
+ var pixel = pixelMap[coords[i].x][coords[i].y];
106
+ var info = elements[pixel.element];
107
+ if (pixel.hp) { // lower hp
108
+ DoDamage(pixel,"explosion",damage)
109
+ var damaged = true
110
+ }
111
+ if (info.hardness && damaged != true) { // lower damage depending on hardness(0-1)
112
+ if (info.hardness < 1) {
113
+ // more hardness = less damage, logarithmic
114
+ damage *= Math.pow((1-info.hardness),info.hardness);
115
+ }
116
+ else { damage = 0; }
117
+ }
118
+ if (damage > 0.9 && damaged != true) {
119
+ if (Array.isArray(fire)) {
120
+ var newfire = fire[Math.floor(Math.random() * fire.length)];
121
+ }
122
+ else {
123
+ var newfire = fire;
124
+ }
125
+ changePixel(pixel,newfire);
126
+ continue;
127
+ }
128
+ else if (damage > 0.25 && damaged != true) {
129
+ if (isBreakable(pixel)) {
130
+ breakPixel(pixel);
131
+ continue;
132
+ }
133
+ else {
134
+ if (Array.isArray(fire)) {
135
+ var newfire = fire[Math.floor(Math.random() * fire.length)];
136
+ }
137
+ else {
138
+ var newfire = fire;
139
+ }
140
+ if (elements[pixel.element].onBreak !== undefined) {
141
+ elements[pixel.element].onBreak(pixel);
142
+ }
143
+ changePixel(pixel,newfire);
144
+ continue;
145
+ }
146
+ }
147
+ }
148
+ }
149
+ }
150
+
151
+ DoDamage = function(pixel,type,damage,damageMultiplier={ "melee": 1, "projectile": 1, "explosion": 1, "fire": 1, "electricity": 1, "drill": 1, "slice": 1, "ice": 1, "healing": 1, "radioactive": 1, "poison": 1, "curse": 1, "holy": 1, "material": 1 }) {
152
+ if (pixel.immunities[type] != true) {
153
+ pixel.hp = (pixel.hp - (damage * damageMultiplier[type]))
154
+ }
155
+ }
156
+
157
+ DoNoitaCreature = function(pixel) {
158
+ if (!pixel.stains) {
159
+ pixel.stains = []
160
+ }
161
+ if (pixel.stains.wet && isASecond(pixelTicks)) {
162
+ if ((pixel.stains.wet[1] + pixel.stains.wet[0]) < pixelTicks) {
163
+ delete pixel.stains.wet
164
+ }
165
+ }
166
+ if (pixel.stains.bloody && isASecond(pixelTicks)) {
167
+ if ((pixel.stains.bloody[1] + pixel.stains.bloody[0]) < pixelTicks) {
168
+ delete pixel.stains.bloody
169
+ }
170
+ }
171
+ if (pixel.stains.onFire && isASecond(pixelTicks)) {
172
+ if (pixel.stains.wet || pixel.stains.bloody) {
173
+ if (pixel.stains.onFire) {
174
+ delete pixel.onFire
175
+ }
176
+ if (pixel.stains.wet[1]) {
177
+ pixel.stains.wet[1] -= 10
178
+ }
179
+ else if (pixel.stains.bloody[1]) {
180
+ pixel.stains.bloody[1] -= 10
181
+ }
182
+ }
183
+ DoDamage(pixel,"fire",(Math.ceil(pixel.maxhp / 50)))
184
+ pixel.panic++
185
+ if ((pixel.stains.onFire[1] + pixel.stains.onFire[0]) < pixelTicks) {
186
+ delete pixel.stains.onFire
187
+ }
188
+ }
189
+ if (pixel.stains.poisoned && isASecond(pixelTicks)) {
190
+ DoDamage(pixel,"poison",(Math.ceil(pixel.maxhp / 50)))
191
+ pixel.panic++
192
+ if ((pixel.stains.poisoned[1] + pixel.stains.poisoned[0]) < pixelTicks) {
193
+ delete pixel.stains.poisoned
194
+ }
195
+ }
196
+ if (pixel.stains.teleportitis && isASecond(pixelTicks)) {
197
+ var x = Math.floor(Math.random()*(width))+1;
198
+ var y = Math.floor(Math.random()*(height))+1;
199
+ if (isEmpty(x,y)) {
200
+ tryMove(pixel,x,y)
201
+ }
202
+ pixel.panic++
203
+ if ((pixel.stains.teleportitis[1] + pixel.stains.teleportitis[0]) < pixelTicks) {
204
+ delete pixel.stains.teleportitis
205
+ }
206
+ }
207
+ if (!pixel.immunities) {
208
+ pixel.immunities = { "melee": false, "projectile": false, "explosion": false, "fire": false, "electricity": false, "drill": false, "slice": false, "ice": false, "healing": false, "radioactive": false, "poison": false, "curse": false, "holy": false, "material": false }
209
+ }
210
+ }
211
+
212
+ DoNoitaHumanoid = function(pixel) {
213
+ if (!pixel.stains) {
214
+ pixel.stains = []
215
+ }
216
+ if (pixel.stains.wet && isASecond(pixelTicks)) {
217
+ if ((pixel.stains.wet[1] + pixel.stains.wet[0]) < pixelTicks) {
218
+ delete pixel.stains.wet
219
+ }
220
+ }
221
+ if (pixel.stains.bloody && isASecond(pixelTicks)) {
222
+ if ((pixel.stains.bloody[1] + pixel.stains.bloody[0]) < pixelTicks) {
223
+ delete pixel.stains.bloody
224
+ }
225
+ }
226
+ if (pixel.stains.onFire && isASecond(pixelTicks)) {
227
+ if (pixel.stains.wet || pixel.stains.bloody) {
228
+ if (pixel.stains.onFire) {
229
+ delete pixel.onFire
230
+ }
231
+ if (pixel.stains.wet[1]) {
232
+ pixel.stains.wet[1] -= 10
233
+ }
234
+ else if (pixel.stains.bloody[1]) {
235
+ pixel.stains.bloody[1] -= 10
236
+ }
237
+ }
238
+ DoDamage(pixel,"fire",(Math.ceil(pixel.maxhp / 50)))
239
+ pixel.panic++
240
+ if ((pixel.stains.onFire[1] + pixel.stains.onFire[0]) < pixelTicks) {
241
+ delete pixel.stains.onFire
242
+ }
243
+ }
244
+ if (pixel.stains.poisoned && isASecond(pixelTicks)) {
245
+ DoDamage(pixel,"poison",(Math.ceil(pixel.maxhp / 50)))
246
+ pixel.panic++
247
+ if ((pixel.stains.poisoned[1] + pixel.stains.poisoned[0]) < pixelTicks) {
248
+ delete pixel.stains.poisoned
249
+ }
250
+ }
251
+ if (pixel.stains.teleportitis && isASecond(pixelTicks)) {
252
+ var x = Math.floor(Math.random()*(width))+1;
253
+ var y = Math.floor(Math.random()*(height))+1;
254
+ if (isEmpty(x,y) && isEmpty(x,y-1)) {
255
+ tryMove(pixel,x,y)
256
+ if (pixel.head)
257
+ tryMove(pixel.head,x,y-1)
258
+ }
259
+ pixel.panic++
260
+ if ((pixel.stains.teleportitis[1] + pixel.stains.teleportitis[0]) < pixelTicks) {
261
+ delete pixel.stains.teleportitis
262
+ }
263
+ }
264
+ if (!pixel.immunities) {
265
+ pixel.immunities = { "melee": false, "projectile": false, "explosion": false, "fire": false, "electricity": false, "drill": false, "slice": false, "ice": false, "healing": false, "radioactive": false, "poison": false, "curse": false, "holy": false, "material": false }
266
+ }
267
+ }
268
+
269
+ DoNoitaStaining = function(pixel,damagePixel) {
270
+ if (elements[damagePixel.element].id === elements.noita_acid.id) {
271
+ DoDamage(pixel,"material",750)
272
+ }
273
+ else if (elements[damagePixel.element].id === elements.lava.id) {
274
+ DoDamage(pixel,"material",450)
275
+ if (!pixel.stains.onFire) {
276
+ pixel.stains.onFire = [pixelTicks,1000]
277
+ }
278
+ }
279
+ else if (elements[damagePixel.element].id === elements.noita_fire.id) {
280
+ if (!pixel.stains.onFire) {
281
+ pixel.stains.onFire = [pixelTicks,1000]
282
+ }
283
+ }
284
+ else if (elements[damagePixel.element].id === elements.noita_poison.id) {
285
+ if (!pixel.stains.poisoned) {
286
+ pixel.stains.poisoned = [pixelTicks,1000]
287
+ }
288
+ }
289
+ else if ((elements[damagePixel.element].id === elements.noita_mud.id || elements[damagePixel.element].id === elements.noita_water.id || elements[damagePixel.element].id === elements.brine.id)) {
290
+ for (i = 0; i < pixel.stains.length; i++) {
291
+ if (pixel.stains[i] != pixel.stains.wet) {
292
+ delete pixel.stains[i]
293
+ }
294
+ }
295
+ if (!pixel.stains.wet) {
296
+ pixel.stains.wet = [pixelTicks,1000]
297
+ }
298
+ }
299
+ else if (elements[damagePixel.element].id === elements.noita_blood.id) {
300
+ if (!pixel.stains.bloody) {
301
+ pixel.stains.bloody = [pixelTicks,1000]
302
+ }
303
+ }
304
+ else if (elements[damagePixel.element].id === elements.healthium.id) {
305
+ pixel.hp += 100
306
+ if (!pixel.stains.regeneration) {
307
+ pixel.stains.regeneration = [pixelTicks,1000]
308
+ }
309
+ }
310
+ else if (elements[damagePixel.element].id === elements.teleportatium.id || elements[damagePixel.element].id === elements.unstable_teleportatium.id) {
311
+ if (!pixel.stains.teleportitis) {
312
+ pixel.stains.teleportitis = [pixelTicks,1000]
313
+ }
314
+ }
315
+ if (elements[damagePixel.element].state === "liquid") {
316
+ for (i = 0; i < pixel.stains.length; i++) {
317
+ if (pixel.stains[i] == pixel.stains.onFire) {
318
+ delete pixel.stains[i]
319
+ }
320
+ }
321
+ }
322
+ }
323
+
324
+ requiresAir = function(pixel) {
325
+ if (!isEmpty(pixel.x,pixel.y-1) && !isEmpty(pixel.x,pixel.y+1) && !isEmpty(pixel.x-1,pixel.y) && !isEmpty(pixel.x+1,pixel.y) && Math.random() > 0.85) {
326
+ var neighbors = getNeighbors(pixel)
327
+ for (i = 0; i < neighbors.length; i++) {
328
+ if (elements[neighbors[i].element].living) {
329
+ var organism = true
330
+ }
331
+ }
332
+ if (!organism) {
333
+ changePixel(pixel,"soil")
334
+ }
335
+ }
336
+ }
337
+
338
+ textures.BRICKWORK = [ // bricky squary minecraftey
339
+ "ssssssssgsgwgsssgsssssswggggssss",
340
+ "gggsgggsgsgwgswwsgwwwwswggggswgg",
341
+ "sggsgggsggwwgswgswggggsgggggsgss",
342
+ "gwgsgggsgggggswwswggggssssgssgsw",
343
+ "gwggssssssssssssswggggswwwwwsgsw",
344
+ "wwgswwwwwgggggggswggggswwwwgsggw",
345
+ "gggswwwwwgggggggswggggsgwwwgsggg",
346
+ "sssssgssssssssssswggggsssssswsss",
347
+ "gggwgsggggggggggswggggsggggggggg",
348
+ "gggggsgwwgggggggsgggggsgggssssss",
349
+ "wggggsgwwggggggggsssssgwggsggggg",
350
+ "wggggsggggggggggsgggggsgggsggggg",
351
+ "wggggsggggggggggsgwgggsgggsggggg",
352
+ "wgssssssgssssssssgggggsgggsggggg",
353
+ "wgsgggggswggggggssssssgssggwwwww",
354
+ "ggsgggggsggwwggggsggggggsggggggg",
355
+ "sssssssssggwwggggsggggggsssgssss",
356
+ "wwwwswwwsggggggggswwggggwggswwsw",
357
+ "wwwwswwwsgggggsssgsssssssssswwsw",
358
+ "wwwwsgggsggggswwwwsgggggggggsssw",
359
+ "wwwwsgggsggggswwwwsggwwgggggggsw",
360
+ "wwwwsggssssssswwwwsggwwgggggggsw",
361
+ "ssssgssswggggswwwwsgggggggggggss",
362
+ "wggggggsgggggsssssssssssssssssss",
363
+ "gggggggsgggggsgwwwwwwwgsggggswgs",
364
+ "gggggggsgggggswggggggggsggggsggs",
365
+ "gggggggsggggsswggggggggsggggsggs",
366
+ "ggggggggsssssswggggggggsggggssss",
367
+ "gggggggswwwggswggggggggswgggswws",
368
+ "ggwgwwgsgssggswggggggggsssssswws",
369
+ "ggggwwgsgsgwgswgggggggsgwwwgswws",
370
+ "gggggggsgsgwgsggggggggswggggswws",
371
+ ]
372
+
373
+ textures.ALTGROUND = [ // groundy and dirt alt
374
+ "Sgsssgssggssggg",
375
+ "ggsssgggggsggss",
376
+ "ggssSgggsggggsS",
377
+ "ssggggsggggsggg",
378
+ "sSggsgggssggggs",
379
+ "ggggggggsggssgg",
380
+ "ssgggssggggsSgg",
381
+ "ssgsgsSggsggggg",
382
+ "sSggggggggggssg",
383
+ "ggggssgsgssgsgg",
384
+ "ggsgsggggsggggg",
385
+ "gggggggggggggsg",
386
+ "ssgggsgsssgsggg",
387
+ "sggsgggsssggggs",
388
+ "ggggssgssSgssgs",
389
+ ]
390
+
391
+ textures.GROUND = [ // groundy and dirt
392
+ "sggggggggs",
393
+ "ggsgssgggg",
394
+ "ggggssgggg",
395
+ "ssggggggsg",
396
+ "ssgssggggg",
397
+ "gggssggggg",
398
+ "ggggggsggg",
399
+ "gssggggggg",
400
+ "gssggggggg",
401
+ "gggggggggs",
402
+ ]
403
+
404
+ textures.WOOD = [ // planks
405
+ "gsgsgggggggggggggggggggggggggggggggggggggg",
406
+ "gsgggggggggggggggggggggggggggggggggggggggg",
407
+ "ssssssssssssssssssssssssssssssssssssssssss",
408
+ "SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSsSSSSSSSSSSS",
409
+ "gggggggggggggggggggggggggggsggsggggggggggg",
410
+ "gggggggggggggggggggggggggggggssggggggggggg",
411
+ "ssssssssssssssssssssssssssssssssssssssssss",
412
+ "SSSSSSSSSSSSSSSSSssSSSSSSSSSSSSSSSSSSSSSSS",
413
+ "gggggggggggggggggssggggggggggggggggggggggg",
414
+ "ggggggggggggggggggsggggggggggggggggggggggg",
415
+ "ssssssssssssssssssssssssssssssssssssssssss",
416
+ "SSsSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS",
417
+ "sgsggggggggggggggggggggggggggggggggggggggg",
418
+ "ggsggggggggggggggggggsgggggggggggggggggggg",
419
+ "ssssssssssssssssssssssssssssssssssssssssss",
420
+ "ggggggggggggggggggsggggggggggggggggggsgggg",
421
+ "ggggggggggggggggggsggggggggggggggggggsgggg",
422
+ "ssssssssssssssssssssssssssssssssssssssssss",
423
+ "SSSSSSSSSsSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS",
424
+ "gggggggggsgggggggggggggggggggggggggggggggg",
425
+ "gggggggggsgggggggggggggggggggggggggggggggg",
426
+ "ssssssssssssssssssssssssssssssssssssssssss",
427
+ "sssSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS",
428
+ "gsgggggggggggggggggggggggggggggggggggggggg",
429
+ "gsgggggggggggggggggggggggggggggggggggggggg",
430
+ "ssssssssssssssssssssssssssssssssssssssssss",
431
+ "SsSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS",
432
+ ]
433
+
434
+ textures.STEEL = [ // boxy panels
435
+ "ggwwgggggGgggwgsgggw",
436
+ "wwgsgggggGgggggsgggw",
437
+ "wgwggggggGgggggsgggg",
438
+ "swwggggggGggwwgsgggg",
439
+ "swwggggggGgggwgsgwgg",
440
+ "wggggwgggGgggwgsgwgg",
441
+ "wggggggggGggwwwsgwgg",
442
+ "gggwgggggGggwwwsgwgg",
443
+ "gwwwgggggGggwswswwwg",
444
+ "gwgggggggGgwwwwswggg",
445
+ "gggggggGgGggwgssgssg",
446
+ "ggggggsggGggwgwsgssgg",
447
+ "gggggggggGggwgwsgggg",
448
+ "sssssssssgggggwsssss",
449
+ "gggggggggggggswggggg",
450
+ "wgggggggggggwwwggggg",
451
+ "ggGGGGGGgggwwGGggggg",
452
+ "gsgggggGgggwsgGggggg",
453
+ "gsgggGgGggwgssgggggg",
454
+ "gsgggggGggwwwggwgwgg",
455
+ "gsgsgggGgwwgwggwwwgg",
456
+ "gsgggggGgggwsggwwwgg",
457
+ "gssssssgggwwggwgwggg",
458
+ "ggggggggwwwwggwgwggg",
459
+ "gggggswwwsgggggggggg",
460
+ "GGGGGGGGGGggwwggGGGG",
461
+ "gggggggggGgwwwgsggww",
462
+ ]
463
+
464
+ textures.STATICSHINE = [ // diagonalish stripes
465
+ "gwgssgGs",
466
+ "sgwgssgG",
467
+ "Gsgwgssg",
468
+ "gGsgwgss",
469
+ "sgGsgwgs",
470
+ "ssgGsgwg",
471
+ "gssgGsgw",
472
+ "wgssgGsg",
473
+ ]
474
+
475
+ elements.ground = {
476
+ color: ["#464128","#464128","#5f5731","#464128"],
477
+ colorPattern: textures.GROUND,
478
+ colorKey: {
479
+ "g": "#464128",
480
+ "s": "#5f5731",
481
+ },
482
+ grain:0.25,
483
+ behavior: behaviors.WALL,
484
+ reactions: {
485
+ },
486
+ tempHigh: 1500,
487
+ stateHigh: "lava",
488
+ category: "land",
489
+ state: "solid",
490
+ density: 10000,
491
+ hardness: 0.5,
492
+ breakInto: "noita_sand",
493
+ corrodible: true,
494
+ static: true,
495
+ earth: true,
496
+ meltableLava: true,
497
+ }
498
+
499
+ elements.noita_rock = {
500
+ color: ["#27282d","#27282d","#3e4555","#27282d"],
501
+ colorPattern: textures.GROUND,
502
+ colorKey: {
503
+ "g": "#27282d",
504
+ "s": "#3e4555",
505
+ },
506
+ tick: function(pixel) {
507
+ if (isEmpty(pixel.x+1,pixel.y) && Math.random() > 0.99 && (pixel.start + 25) < pixelTicks) {
508
+ createPixel("moss",pixel.x+1,pixel.y)
509
+ pixelMap[pixel.x+1][pixel.y].settled = true
510
+ }
511
+ else if (isEmpty(pixel.x-1,pixel.y) && Math.random() > 0.99 && (pixel.start + 25) < pixelTicks) {
512
+ createPixel("moss",pixel.x-1,pixel.y)
513
+ pixelMap[pixel.x-1][pixel.y].settled = true
514
+ }
515
+ else if (isEmpty(pixel.x,pixel.y+1) && Math.random() > 0.99 && (pixel.start + 25) < pixelTicks) {
516
+ createPixel("moss",pixel.x,pixel.y+1)
517
+ pixelMap[pixel.x][pixel.y+1].settled = true
518
+ }
519
+ else if (isEmpty(pixel.x,pixel.y-1) && Math.random() > 0.99 && (pixel.start + 25) < pixelTicks) {
520
+ createPixel("moss",pixel.x,pixel.y-1)
521
+ pixelMap[pixel.x][pixel.y-1].settled = true
522
+ }
523
+ doDefaults(pixel);
524
+ },
525
+ movable: false,
526
+ grain:0.25,
527
+ name: "rock",
528
+ reactions: {
529
+ },
530
+ tempHigh: 1500,
531
+ stateHigh: "lava",
532
+ category: "land",
533
+ state: "solid",
534
+ density: 10000,
535
+ hardness: 0.5,
536
+ corrodible: true,
537
+ static: true,
538
+ earth: true,
539
+ meltableLava: true,
540
+ }
541
+
542
+ elements.volcanic_rock = {
543
+ color: ["#441e1f","#441e1f","#5f2621","#441e1f"],
544
+ colorPattern: textures.ALTGROUND,
545
+ colorKey: {
546
+ "g": "#441e1f",
547
+ "s": "#5f2621",
548
+ "S": "#52201c",
549
+ },
550
+ grain:0.25,
551
+ behavior: behaviors.WALL,
552
+ reactions: {
553
+ },
554
+ tempHigh: 1500,
555
+ stateHigh: "lava",
556
+ category: "land",
557
+ state: "solid",
558
+ density: 10000,
559
+ hardness: 0.5,
560
+ corrodible: true,
561
+ static: true,
562
+ earth: true,
563
+ meltableLava: true,
564
+ }
565
+
566
+ elements.fools_gold = {
567
+ color: ["#ffef42","#ffef42","#ffff86","#ffef42"],
568
+ name: "fool's gold",
569
+ colorPattern: textures.BRICKWORK,
570
+ colorKey: {
571
+ "g": "#ffef42",
572
+ "s": "#ffb81b",
573
+ "S": "#bb8632",
574
+ "w": "#ffff86"
575
+ },
576
+ grain:0.1,
577
+ behavior: behaviors.WALL,
578
+ reactions: {
579
+ },
580
+ tempHigh: 1500,
581
+ stateHigh: "lava",
582
+ category: "land",
583
+ state: "solid",
584
+ density: 10000,
585
+ hardness: 0.5,
586
+ corrodible: true,
587
+ static: true,
588
+ earth: true,
589
+ meltableLava: true,
590
+ }
591
+
592
+ elements.glowing_matter = {
593
+ color: ["#234630","#234630","#3b6e53","#234630"],
594
+ colorPattern: textures.GROUND,
595
+ colorKey: {
596
+ "g": "#234630",
597
+ "s": "#3b6e53",
598
+ },
599
+ tick: function(pixel) {
600
+ if (isEmpty(pixel.x+1,pixel.y) && Math.random() > 0.9 && (pixel.start + 25) < pixelTicks) {
601
+ createPixel("green_slime",pixel.x+1,pixel.y)
602
+ }
603
+ else if (isEmpty(pixel.x-1,pixel.y) && Math.random() > 0.9 && (pixel.start + 25) < pixelTicks) {
604
+ createPixel("green_slime",pixel.x-1,pixel.y)
605
+ }
606
+ else if (isEmpty(pixel.x,pixel.y+1) && Math.random() > 0.9 && (pixel.start + 25) < pixelTicks) {
607
+ createPixel("green_slime",pixel.x,pixel.y+1)
608
+ }
609
+ else if (isEmpty(pixel.x,pixel.y-1) && Math.random() > 0.9 && (pixel.start + 25) < pixelTicks) {
610
+ createPixel("green_slime",pixel.x,pixel.y-1)
611
+ }
612
+ doDefaults(pixel);
613
+ },
614
+ movable: false,
615
+ grain:0.25,
616
+ behavior: behaviors.WALL,
617
+ reactions: {
618
+ },
619
+ tempHigh: 1500,
620
+ stateHigh: "lava",
621
+ category: "land",
622
+ state: "solid",
623
+ density: 10000,
624
+ hardness: 0.5,
625
+ corrodible: true,
626
+ static: true,
627
+ earth: true,
628
+ meltableLava: true,
629
+ }
630
+
631
+ elements.poisonous_rock = {
632
+ color: ["#662e83","#662e83","#8b45ac","#662e83"],
633
+ colorPattern: textures.GROUND,
634
+ colorKey: {
635
+ "g": "#662e83",
636
+ "s": "#8b45ac",
637
+ },
638
+ grain:0.25,
639
+ behavior: behaviors.WALL,
640
+ reactions: {
641
+ },
642
+ tempHigh: 1500,
643
+ stateHigh: "lava",
644
+ category: "land",
645
+ state: "solid",
646
+ density: 10000,
647
+ hardness: 0.5,
648
+ corrodible: true,
649
+ static: true,
650
+ earth: true,
651
+ meltableLava: true,
652
+ }
653
+
654
+ elements.grey_rock = {
655
+ color: ["#4e4e4e","#545454","#616161","#464646"],
656
+ colorPattern: textures.GROUND,
657
+ colorKey: {
658
+ "g": "#4e4e4e",
659
+ "s": "#616161",
660
+ },
661
+ grain:0.3,
662
+ behavior: behaviors.WALL,
663
+ reactions: {
664
+ },
665
+ tempHigh: 1500,
666
+ stateHigh: "lava",
667
+ category: "land",
668
+ state: "solid",
669
+ density: 10000,
670
+ hardness: 0.5,
671
+ corrodible: true,
672
+ static: true,
673
+ earth: true,
674
+ meltableLava: true,
675
+ }
676
+
677
+
678
+ elements.dense_rock = {
679
+ color: ["#37221d","#37221d","#623b32","#37221d"],
680
+ colorPattern: textures.GROUND,
681
+ colorKey: {
682
+ "g": "#37221d",
683
+ "s": "#623b32",
684
+ },
685
+ grain:0.25,
686
+ behavior: behaviors.WALL,
687
+ reactions: {
688
+ },
689
+ tempHigh: 1500,
690
+ stateHigh: "lava",
691
+ category: "land",
692
+ state: "solid",
693
+ density: 2550,
694
+ hardness: 0.9,
695
+ static: true,
696
+ earth: true,
697
+ }
698
+
699
+ elements.extremely_dense_rock = {
700
+ color: ["#251511","#251511","#40231c","#251511"],
701
+ colorPattern: textures.GROUND,
702
+ colorKey: {
703
+ "g": "#251511",
704
+ "s": "#40231c",
705
+ },
706
+ grain:0.25,
707
+ behavior: behaviors.WALL,
708
+ reactions: {
709
+ },
710
+ category: "land",
711
+ state: "solid",
712
+ density: 2550,
713
+ hardness: 0.995,
714
+ static: true,
715
+ earth: true,
716
+ }
717
+
718
+ elements.brickwork = {
719
+ color: ["#514a31","#514a31","#403a29","#514a31"],
720
+ colorPattern: textures.BRICKWORK,
721
+ colorKey: {
722
+ "g": "#514a31",
723
+ "s": "#403a29",
724
+ "S": "#59533b",
725
+ "w": "#59533b",
726
+ },
727
+ grain:0.15,
728
+ behavior: behaviors.WALL,
729
+ reactions: {
730
+ },
731
+ category: "solids",
732
+ state: "solid",
733
+ density: 2550,
734
+ hardness: 0.95,
735
+ static: true,
736
+ earth: true,
737
+ corrodible: true
738
+ }
739
+
740
+ elements.noita_wood = {
741
+ color: ["#433821","#564832","#322b18","#473c23","#473c23","#473c23","#473c23","#564832","#433821"],
742
+ colorPattern: textures.WOOD,
743
+ colorKey: {
744
+ "g": "#473c23",
745
+ "s": "#322b18",
746
+ "S": "#564832",
747
+ },
748
+ renderer: function(pixel,ctx) {
749
+ if (!viewInfo[view].colorEffects) { drawDefault(ctx,pixel); return }
750
+ if (pixel.alpha === 0) return;
751
+ let edge1 = false;
752
+ let edge2 = false;
753
+ let edge3 = false;
754
+ for (var i = 0; i < adjacentCoords.length; i++) {
755
+ var coords = adjacentCoords[i];
756
+ var x = pixel.x + coords[0];
757
+ var y = pixel.y;
758
+ if (isEmpty(x,y) || (!outOfBounds(x,y) && elements[pixelMap[x][y].element].movable !== elements[pixel.element].movable)) {
759
+ edge1 = true;
760
+ break;
761
+ }
762
+ }
763
+ for (var i = 0; i < adjacentCoords.length; i++) {
764
+ var coords = adjacentCoords[i];
765
+ var x = pixel.x + coords[0];
766
+ var y = pixel.y;
767
+ if ((isEmpty(x-1,y) || isEmpty(x+1,y)) || (!outOfBounds(x-1,y) && elements[pixelMap[x-1][y].element].movable !== elements[pixel.element].movable) || (!outOfBounds(x+1,y) && elements[pixelMap[x+1][y].element].movable !== elements[pixel.element].movable)) {
768
+ edge2 = true;
769
+ break;
770
+ }
771
+ }
772
+ for (var i = 0; i < adjacentCoords.length; i++) {
773
+ var coords = adjacentCoords[i];
774
+ var x = pixel.x + coords[0];
775
+ var y = pixel.y;
776
+ if (isEmpty(x-2,y) || isEmpty(x+2,y) || (!outOfBounds(x-2,y) && elements[pixelMap[x-2][y].element].movable !== elements[pixel.element].movable) || (!outOfBounds(x+2,y) && elements[pixelMap[x+2][y].element].movable !== elements[pixel.element].movable)) {
777
+ edge3 = true;
778
+ break;
779
+ }
780
+ }
781
+ if (edge1) { drawSquare(ctx,"#302917",pixel.x,pixel.y) }
782
+ else if (edge2) { drawSquare(ctx,"#433821",pixel.x,pixel.y) }
783
+ else if (edge3) { drawSquare(ctx,"#302917",pixel.x,pixel.y) }
784
+ else { drawSquare(ctx,pixel.color,pixel.x,pixel.y) }
785
+ },
786
+ grain:0.5,
787
+ name: "wood",
788
+ behavior: behaviors.WALL,
789
+ movable: false,
790
+ reactions: {
791
+ },
792
+ tempHigh: 1500,
793
+ stateHigh: "noita_fire",
794
+ category: "solids",
795
+ burn: 5,
796
+ burnTime: 300,
797
+ burnInto: ["ember","charcoal","noita_fire"],
798
+ burnable: true,
799
+ nburnTime: 300,
800
+ tick: function(pixel) {
801
+ doNHeat(pixel)
802
+ doNBurning(pixel)
803
+ },
804
+ state: "solid",
805
+ hardness: 0.2,
806
+ breakInto: "sawdust",
807
+ forceSaveColor: true,
808
+ corrodible: true,
809
+ static: true,
810
+ }
811
+
812
+ elements.noita_sand = {
813
+ color: ["#c4b999","#c0b287","#baa565","#b59843","#c7c1ad"],
814
+ name: "sand",
815
+ behavior: behaviors.POWDER,
816
+ tempHigh: 1500,
817
+ stateHigh: "lava",
818
+ reactions: {
819
+ "mystery_fungus": { elem2:"mystery_fungus", chance:0.45 },
820
+ },
821
+ category: "powders",
822
+ state: "solid",
823
+ density: 6000,
824
+ hardness: 0.2,
825
+ corrodible: true,
826
+ sandGround: true,
827
+ meltableLavaFast: true,
828
+ }
829
+
830
+ elements.noita_water = {
831
+ color: "#366158",
832
+ name: "water",
833
+ behavior: behaviors.LIQUID,
834
+ tick: function(pixel) {
835
+ var coords = rectCoords(pixel.x-1,pixel.y-1,pixel.x+1,pixel.y+1);
836
+ for (var i = 0; i < coords.length; i++) {
837
+ var x = coords[i].x;
838
+ var y = coords[i].y;
839
+ if (!isEmpty(x,y,true)) {
840
+ if (!outOfBounds(x,y) && (elements[pixelMap[x][y].element].fire === true)) {
841
+ changePixel(pixel,"noita_steam")
842
+ }
843
+ else if (!outOfBounds(x,y) && elements[pixelMap[x][y].element].id === elements.lava.id) {
844
+ changePixel(pixel,"noita_steam")
845
+ changePixel(pixelMap[x][y],"noita_rock")
846
+ }
847
+ }
848
+ }
849
+ },
850
+ tempHigh: 150,
851
+ stateHigh: "noita_steam",
852
+ tempLow: 0,
853
+ stateLow: "noita_ice",
854
+ category: "liquids",
855
+ reactions: {
856
+ "fire": { elem1: "noita_steam" },
857
+ "noita_fire": { elem1: "noita_steam" },
858
+ },
859
+ state: "liquid",
860
+ density: 4000,
861
+ conduct: 0.02,
862
+ stain: -0.5,
863
+ extinguish: true,
864
+ corrodible: true,
865
+ water: true,
866
+ freezable: true,
867
+ }
868
+
869
+ elements.peat = {
870
+ color: ["#6e8c3b","#617d3c"],
871
+ behavior: behaviors.LIQUID,
872
+ burnable: true,
873
+ nburnTime: 35,
874
+ tick: function(pixel) {
875
+ doNHeat(pixel)
876
+ doNBurning(pixel)
877
+ doDefaults(pixel)
878
+ },
879
+ viscosity: 100,
880
+ tempHigh: 150,
881
+ stateHigh: "noita_fire",
882
+ category: "liquids",
883
+ reactions: {
884
+ },
885
+ state: "liquid",
886
+ density: 3400,
887
+ extinguish: true,
888
+ corrodible: true,
889
+ impure: true,
890
+ plant: true,
891
+ }
892
+
893
+ elements.swamp = {
894
+ color: ["#2f2f0a","#272707"],
895
+ behavior: behaviors.LIQUID,
896
+ tick: function(pixel) {
897
+ var coords = rectCoords(pixel.x-1,pixel.y-1,pixel.x+1,pixel.y+1);
898
+ for (var i = 0; i < coords.length; i++) {
899
+ var x = coords[i].x;
900
+ var y = coords[i].y;
901
+ if (!isEmpty(x,y,true)) {
902
+ if (!outOfBounds(x,y) && (elements[pixelMap[x][y].element].fire === true)) {
903
+ changePixel(pixel,"noita_steam")
904
+ }
905
+ else if (!outOfBounds(x,y) && elements[pixelMap[x][y].element].id === elements.lava.id) {
906
+ changePixel(pixel,"noita_steam")
907
+ changePixel(pixelMap[x][y],"noita_rock")
908
+ }
909
+ }
910
+ }
911
+ },
912
+ viscosity: 100,
913
+ tempHigh: 150,
914
+ stateHigh: "noita_steam",
915
+ tempLow: 0,
916
+ stateLow: "noita_ice",
917
+ category: "liquids",
918
+ reactions: {
919
+ "fire": { elem1: "noita_steam" },
920
+ "noita_fire": { elem1: "noita_steam" },
921
+ "toxic_sludge": { elem2:"swamp_water", chance:0.15 },
922
+ "noita_water": { elem2:"swamp_water", chance:0.01 },
923
+ },
924
+ state: "liquid",
925
+ density: 3500,
926
+ conduct: 0.02,
927
+ stain: -0.5,
928
+ meltableWater: true,
929
+ extinguish: true,
930
+ corrodible: true,
931
+ water: true,
932
+ freezable: true,
933
+ soluble: true,
934
+ impure: true,
935
+ }
936
+
937
+ elements.swamp_water = {
938
+ color: "#2e542c",
939
+ name: "swamp",
940
+ behavior: behaviors.LIQUID,
941
+ tick: function(pixel) {
942
+ var coords = rectCoords(pixel.x-1,pixel.y-1,pixel.x+1,pixel.y+1);
943
+ for (var i = 0; i < coords.length; i++) {
944
+ var x = coords[i].x;
945
+ var y = coords[i].y;
946
+ if (!isEmpty(x,y,true)) {
947
+ if (!outOfBounds(x,y) && (elements[pixelMap[x][y].element].fire === true)) {
948
+ changePixel(pixel,"noita_steam")
949
+ }
950
+ else if (!outOfBounds(x,y) && elements[pixelMap[x][y].element].id === elements.lava.id) {
951
+ changePixel(pixel,"noita_steam")
952
+ changePixel(pixelMap[x][y],"noita_rock")
953
+ }
954
+ }
955
+ }
956
+ if (isEmpty(pixel.x,pixel.y-1) && Math.random() > 0.94 && (pixel.start + 100) < pixelTicks) {
957
+ changePixel(pixel, "peat")
958
+ }
959
+ },
960
+ tempHigh: 150,
961
+ stateHigh: "noita_steam",
962
+ tempLow: 0,
963
+ stateLow: "noita_ice",
964
+ category: "liquids",
965
+ reactions: {
966
+ "fire": { elem1: "noita_steam" },
967
+ "noita_fire": { elem1: "noita_steam" },
968
+ "toxic_sludge": { elem2:"swamp_water", chance:0.17 },
969
+ },
970
+ state: "liquid",
971
+ density: 3400,
972
+ conduct: 0.02,
973
+ stain: -0.5,
974
+ extinguish: true,
975
+ corrodible: true,
976
+ water: true,
977
+ impure: true,
978
+ }
979
+
980
+ elements.noita_steam = {
981
+ color: ["#61617d","#61617d","#47475c","#47475c","#61617d"],
982
+ name: "steam",
983
+ behavior: behaviors.GAS,
984
+ tick: function(pixel) {
985
+ if (Math.random() > 0.95 && Math.random() > 0.95 && (pixel.start + 500) < pixelTicks) {
986
+ changePixel(pixel,"noita_water")
987
+ }
988
+ var coords = rectCoords(pixel.x-1,pixel.y-1,pixel.x+1,pixel.y+1);
989
+ for (var i = 0; i < coords.length; i++) {
990
+ var x = coords[i].x;
991
+ var y = coords[i].y;
992
+ if (!isEmpty(x,y,true)) {
993
+ if (!outOfBounds(x,y) && elements[pixelMap[x][y].element].static === true && Math.random() > 0.97) {
994
+ changePixel(pixel,"noita_water")
995
+ }
996
+ }
997
+ }
998
+ doDefaults(pixel);
999
+ },
1000
+ reactions: {
1001
+ },
1002
+ tempLow: 10,
1003
+ stateLow: "noita_water",
1004
+ category: "gases",
1005
+ state: "gas",
1006
+ density: 0.6,
1007
+ conduct: 0.002,
1008
+ stain: -0.05,
1009
+ alias: "water vapor",
1010
+ extinguish: true
1011
+ }
1012
+
1013
+ elements.noita_ice = {
1014
+ color: ["#4c8fb0","#4c8fb0","#4c8fb0","#55a7bf","#80b6d1","#55a7bf","#4c8fb0"],
1015
+ name: "ice",
1016
+ behavior: behaviors.WALL,
1017
+ tempHigh: 25,
1018
+ stateHigh: "noita_water",
1019
+ category: "solids",
1020
+ state: "solid",
1021
+ density: 917,
1022
+ breakInto: "noita_snow",
1023
+ corrodible: true,
1024
+ static: true,
1025
+ meltableWater: true,
1026
+ frozen: true,
1027
+ }
1028
+
1029
+ elements.noita_snow = {
1030
+ color: ["#a6c2d8","#81b0d2"],
1031
+ name: "snow",
1032
+ behavior: behaviors.POWDER,
1033
+ tick: function(pixel) {
1034
+ var coords = rectCoords(pixel.x-1,pixel.y-1,pixel.x+1,pixel.y+1);
1035
+ for (var i = 0; i < coords.length; i++) {
1036
+ var x = coords[i].x;
1037
+ var y = coords[i].y;
1038
+ if (!isEmpty(x,y,true)) {
1039
+ if (!outOfBounds(x,y) && elements[pixelMap[x][y].element].fire === true) {
1040
+ changePixel(pixel,"noita_steam")
1041
+ }
1042
+ }
1043
+ }
1044
+ },
1045
+ reactions: {
1046
+ "fire": { elem1: "noita_steam" },
1047
+ },
1048
+ tempHigh: 25,
1049
+ tempLow: -100,
1050
+ stateLow: "noita_packed_snow",
1051
+ stateHigh: "noita_water",
1052
+ category: "land",
1053
+ state: "solid",
1054
+ density: 100,
1055
+ corrodible: true,
1056
+ static: true,
1057
+ frozen: true,
1058
+ meltableWater: true,
1059
+ }
1060
+
1061
+ elements.noita_packed_snow = {
1062
+ color: ["#a6c2d8","#a6c2d8","#81b0d2","#a6c2d8"],
1063
+ name: "packed_snow",
1064
+ behavior: behaviors.WALL,
1065
+ tick: function(pixel) {
1066
+ var coords = rectCoords(pixel.x-1,pixel.y-1,pixel.x+1,pixel.y+1);
1067
+ for (var i = 0; i < coords.length; i++) {
1068
+ var x = coords[i].x;
1069
+ var y = coords[i].y;
1070
+ if (!isEmpty(x,y,true)) {
1071
+ if (!outOfBounds(x,y) && elements[pixelMap[x][y].element].fire === true) {
1072
+ changePixel(pixel,"noita_steam")
1073
+ }
1074
+ }
1075
+ }
1076
+ },
1077
+ reactions: {
1078
+ "fire": { elem1: "noita_steam" },
1079
+ },
1080
+ tempHigh: 25,
1081
+ tempLow: -200,
1082
+ stateLow: "noita_ice",
1083
+ stateHigh: "noita_water",
1084
+ breakInto: "noita_snow",
1085
+ category: "land",
1086
+ state: "solid",
1087
+ density: 400,
1088
+ static: true,
1089
+ frozen: true,
1090
+ meltableWater: true,
1091
+ }
1092
+
1093
+ elements.noita_poison = {
1094
+ color: "#cb42ff",
1095
+ name: "poison",
1096
+ behavior: behaviors.LIQUID,
1097
+ tick: function(pixel) {
1098
+ if (isEmpty(pixel.x+1,pixel.y) && Math.random() > 0.95 && (pixel.start + 25) < pixelTicks) {
1099
+ createPixel("noita_poison_gas",pixel.x+1,pixel.y)
1100
+ }
1101
+ else if (isEmpty(pixel.x-1,pixel.y) && Math.random() > 0.95 && (pixel.start + 25) < pixelTicks) {
1102
+ createPixel("noita_poison_gas",pixel.x-1,pixel.y)
1103
+ }
1104
+ else if (isEmpty(pixel.x,pixel.y+1) && Math.random() > 0.95 && (pixel.start + 25) < pixelTicks) {
1105
+ createPixel("noita_poison_gas",pixel.x,pixel.y+1)
1106
+ }
1107
+ else if (isEmpty(pixel.x,pixel.y-1) && Math.random() > 0.95 && (pixel.start + 25) < pixelTicks) {
1108
+ createPixel("noita_poison_gas",pixel.x,pixel.y-1)
1109
+ }
1110
+ doDefaults(pixel);
1111
+ },
1112
+ tempHigh: 150,
1113
+ stateHigh: "noita_poison_gas",
1114
+ tempLow: 0,
1115
+ stateLow: "noita_poison_ice",
1116
+ category: "liquids",
1117
+ reactions: {
1118
+ "noita_blood": { elem1: "pink_slime", elem2: "noita_smoke", chance:0.10 },
1119
+ "noita_meat": { elem2: "noita_rotten_meat", chance:0.50 },
1120
+ "noita_poison": { elem2: "poisonous_rock", elem1: "noita_poison_gas", chance:0.70 },
1121
+ },
1122
+ state: "liquid",
1123
+ density: 3000,
1124
+ conduct: 0.8,
1125
+ corrodible: true,
1126
+ water: true,
1127
+ impure: true,
1128
+ soluble: true,
1129
+ }
1130
+
1131
+ elements.noita_poison_gas = {
1132
+ color: ["#59147d","#59147d","#59147d","#410b5c","#410b5c"],
1133
+ name: "poison_gas",
1134
+ behavior: behaviors.GAS,
1135
+ tick: function(pixel) {
1136
+ if (Math.random() > 0.9 && (pixel.start + 225) < pixelTicks) {
1137
+ deletePixel(pixel.x,pixel.y)
1138
+ }
1139
+ doDefaults(pixel);
1140
+ },
1141
+ reactions: {
1142
+ "noita_blood": { elem1: "pink_slime", elem2: "noita_smoke", chance:0.10 },
1143
+ },
1144
+ tempLow: 10,
1145
+ stateLow: "noita_poison",
1146
+ category: "gases",
1147
+ state: "gas",
1148
+ density: 2000,
1149
+ burnableFast: true,
1150
+ }
1151
+
1152
+ elements.noita_poison_ice = {
1153
+ color: ["#4c8fb0","#4c8fb0","#4c8fb0","#55a7bf","#80b6d1","#55a7bf","#4c8fb0"],
1154
+ name: "ice",
1155
+ behavior: behaviors.WALL,
1156
+ reactions: {
1157
+ },
1158
+ tempHigh: 25,
1159
+ stateHigh: "noita_poison",
1160
+ category: "solids",
1161
+ state: "solid",
1162
+ density: 10000,
1163
+ corrodible: true,
1164
+ static: true,
1165
+ meltablePoison: true,
1166
+ frozen: true,
1167
+ }
1168
+
1169
+ elements.urine = {
1170
+ color: "#ffeb00",
1171
+ behavior: behaviors.LIQUID,
1172
+ tempHigh: 150,
1173
+ stateHigh: "noita_steam",
1174
+ tempLow: 0,
1175
+ stateLow: "noita_ice",
1176
+ category: "liquids",
1177
+ reactions: {
1178
+ "noita_snow": { elem1: "noita_water", elem2: "noita_steam", chance:0.20 },
1179
+ "lava": { elem1: "noita_steam", elem2: "fools_gold", chance:0.70 },
1180
+ },
1181
+ state: "liquid",
1182
+ density: 4000,
1183
+ conduct: 0.02,
1184
+ stain: -0.5,
1185
+ extinguish: true,
1186
+ corrodible: true,
1187
+ soluble: true,
1188
+ }
1189
+
1190
+ elements.brine = {
1191
+ color: "#2e744b",
1192
+ behavior: behaviors.LIQUID,
1193
+ tempHigh: 150,
1194
+ stateHigh: "noita_steam",
1195
+ tempLow: 0,
1196
+ stateLow: "noita_ice",
1197
+ category: "liquids",
1198
+ tick: function(pixel) {
1199
+ var coords = rectCoords(pixel.x-1,pixel.y-1,pixel.x+1,pixel.y+1);
1200
+ for (var i = 0; i < coords.length; i++) {
1201
+ var x = coords[i].x;
1202
+ var y = coords[i].y;
1203
+ if (!isEmpty(x,y,true)) {
1204
+ if (!outOfBounds(x,y) && elements[pixelMap[x][y].element].fire === true) {
1205
+ if (Math.random() > 0.5) {
1206
+ changePixel(pixel,"noita_steam")
1207
+ }
1208
+ else {
1209
+ changePixel(pixel,"noita_salt")
1210
+ }
1211
+ }
1212
+ }
1213
+ }
1214
+ },
1215
+ reactions: {
1216
+ "lava": { elem1: "noita_steam", elem2: "glowing_matter", chance:0.20 },
1217
+ "toxic_sludge": { elem2: "noita_water", chance:0.20 },
1218
+ },
1219
+ state: "liquid",
1220
+ density: 4000,
1221
+ conduct: 0.02,
1222
+ stain: -0.5,
1223
+ extinguish: true,
1224
+ corrodible: true,
1225
+ freezable: true,
1226
+ water: true,
1227
+ }
1228
+
1229
+ elements.pink_slime = {
1230
+ color: ["#bb2f83","#942769"],
1231
+ name: "slime",
1232
+ behavior: behaviors.LIQUID,
1233
+ viscosity: 1000,
1234
+ tempHigh: 1000,
1235
+ stateHigh: "noita_fire",
1236
+ tempLow: 0,
1237
+ category: "liquids",
1238
+ reactions: {
1239
+ "noita_water": { elem1: "slime_mist", chance:0.10 },
1240
+ "whiskey": { elem1: "noita_smoke", chance:0.30 },
1241
+ "lava": { elem1: "static_hell_slime", elem2: "static_hell_slime", chance:0.70 },
1242
+ },
1243
+ state: "liquid",
1244
+ density: 5000,
1245
+ conduct: 0.02,
1246
+ stain: -0.5,
1247
+ isFood: true,
1248
+ corrodible: true,
1249
+ meltableLava: true,
1250
+ slime: true,
1251
+ }
1252
+
1253
+ elements.green_slime = {
1254
+ color: ["#6d8b3b","#607c3b"],
1255
+ name: "slime",
1256
+ behavior: behaviors.LIQUID,
1257
+ tick: function(pixel) {
1258
+ if (isEmpty(pixel.x+1,pixel.y) && Math.random() > 0.95 && (pixel.start + 25) < pixelTicks) {
1259
+ deletePixel(pixel.x,pixel.y)
1260
+ }
1261
+ else if (isEmpty(pixel.x-1,pixel.y) && Math.random() > 0.95 && (pixel.start + 25) < pixelTicks) {
1262
+ deletePixel(pixel.x,pixel.y)
1263
+ }
1264
+ else if (isEmpty(pixel.x,pixel.y+1) && Math.random() > 0.95 && (pixel.start + 25) < pixelTicks) {
1265
+ deletePixel(pixel.x,pixel.y)
1266
+ }
1267
+ else if (isEmpty(pixel.x,pixel.y-1) && Math.random() > 0.95 && (pixel.start + 25) < pixelTicks) {
1268
+ deletePixel(pixel.x,pixel.y)
1269
+ }
1270
+ doDefaults(pixel);
1271
+ },
1272
+ viscosity: 1000,
1273
+ tempHigh: 1000,
1274
+ stateHigh: "noita_fire",
1275
+ tempLow: 0,
1276
+ category: "liquids",
1277
+ reactions: {
1278
+ "lava": { elem1: "fungal_gas", elem1: "green_fungus", chance:0.70 },
1279
+ },
1280
+ state: "liquid",
1281
+ density: 5000,
1282
+ conduct: 0.02,
1283
+ stain: -0.5,
1284
+ isFood: true,
1285
+ corrodible: true,
1286
+ meltableLava: true,
1287
+ slime: true,
1288
+ }
1289
+
1290
+ elements.yellow_slime = {
1291
+ color: ["#bec538","#92982c"],
1292
+ name: "slime",
1293
+ behavior: behaviors.LIQUID,
1294
+ tick: function(pixel) {
1295
+ if (isEmpty(pixel.x+1,pixel.y) && Math.random() > 0.95 && (pixel.start + 25) < pixelTicks) {
1296
+ deletePixel(pixel.x,pixel.y)
1297
+ }
1298
+ else if (isEmpty(pixel.x-1,pixel.y) && Math.random() > 0.95 && (pixel.start + 25) < pixelTicks) {
1299
+ deletePixel(pixel.x,pixel.y)
1300
+ }
1301
+ else if (isEmpty(pixel.x,pixel.y+1) && Math.random() > 0.95 && (pixel.start + 25) < pixelTicks) {
1302
+ deletePixel(pixel.x,pixel.y)
1303
+ }
1304
+ else if (isEmpty(pixel.x,pixel.y-1) && Math.random() > 0.95 && (pixel.start + 25) < pixelTicks) {
1305
+ deletePixel(pixel.x,pixel.y)
1306
+ }
1307
+ doDefaults(pixel);
1308
+ },
1309
+ viscosity: 1000,
1310
+ tempHigh: 1000,
1311
+ stateHigh: "noita_fire",
1312
+ tempLow: 0,
1313
+ category: "liquids",
1314
+ reactions: {
1315
+ "lava": { elem1: "fungal_gas", elem1: "yellow_fungus", chance:0.70 },
1316
+ },
1317
+ state: "liquid",
1318
+ density: 5000,
1319
+ conduct: 0.02,
1320
+ stain: -0.5,
1321
+ isFood: true,
1322
+ corrodible: true,
1323
+ meltableLava: true,
1324
+ slime: true,
1325
+ }
1326
+
1327
+ elements.hell_slime = {
1328
+ color: ["#714242","#784747"],
1329
+ behavior: behaviors.LIQUID,
1330
+ viscosity: 1000,
1331
+ tempHigh: 1000,
1332
+ stateHigh: "noita_fire",
1333
+ tempLow: 0,
1334
+ category: "liquids",
1335
+ reactions: {
1336
+ },
1337
+ state: "liquid",
1338
+ density: 4000,
1339
+ conduct: 0.02,
1340
+ stain: -0.5,
1341
+ isFood: true,
1342
+ earth: true,
1343
+ static: true,
1344
+ slime: true,
1345
+ corrodible: true,
1346
+ }
1347
+
1348
+ elements.static_hell_slime = {
1349
+ color: ["#714242","#784747"],
1350
+ name: "hell_slime",
1351
+ behavior: behaviors.WALL,
1352
+ tempHigh: 1000,
1353
+ stateHigh: "noita_fire",
1354
+ tempLow: 0,
1355
+ category: "liquids",
1356
+ reactions: {
1357
+ },
1358
+ state: "liquid",
1359
+ density: 5000,
1360
+ conduct: 0.02,
1361
+ stain: -0.5,
1362
+ isFood: true,
1363
+ static: true,
1364
+ slime: true,
1365
+ corrodible: true,
1366
+ }
1367
+
1368
+ elements.pus = {
1369
+ color: ["#8d504b","#8f6046","#8d5249","#7d5044","#915449"],
1370
+ behavior: behaviors.LIQUID,
1371
+ tick: function(pixel) {
1372
+ var coords = rectCoords(pixel.x-1,pixel.y-1,pixel.x+1,pixel.y+1);
1373
+ for (var i = 0; i < coords.length; i++) {
1374
+ var x = coords[i].x;
1375
+ var y = coords[i].y;
1376
+ if (!isEmpty(x,y,true)) {
1377
+ if (!outOfBounds(x,y) && (elements[pixelMap[x][y].element].fungus === true) && Math.random() > 0.60) {
1378
+ changePixel(pixel,"weird_fungus")
1379
+ changePixel(pixelMap[x][y],"weird_fungus")
1380
+ }
1381
+ if (!outOfBounds(x,y) && (elements[pixelMap[x][y].element].sandMetal === true || elements[pixelMap[x][y].element].gold === true) && Math.random() > 0.80) {
1382
+ changePixel(pixelMap[x][y],"noita_smoke")
1383
+ }
1384
+ }
1385
+ }
1386
+ },
1387
+ viscosity: 1000,
1388
+ tempHigh: 150,
1389
+ stateHigh: "noita_steam",
1390
+ tempLow: 0,
1391
+ category: "liquids",
1392
+ reactions: {
1393
+ "noita_water": { elem2: "pus", chance:0.80 },
1394
+ "toxic_sludge": { elem2: "pus", chance:0.80 },
1395
+ "noita_aluminium": { elem2: "noita_smoke", chance:0.10 },
1396
+ "noita_grass": { elem2: "noita_smoke", chance:0.80 },
1397
+ },
1398
+ state: "liquid",
1399
+ density: 1243.4,
1400
+ conduct: 0.02,
1401
+ stain: -0.5,
1402
+ isFood: true,
1403
+ corrodible: true,
1404
+ impure: true,
1405
+ water: true,
1406
+ }
1407
+
1408
+ elements.noita_oil = {
1409
+ color: "#3d3628",
1410
+ name: "oil",
1411
+ behavior: behaviors.LIQUID,
1412
+ burnable: true,
1413
+ nburnTime: 500,
1414
+ tick: function(pixel) {
1415
+ doNHeat(pixel)
1416
+ doNBurning(pixel)
1417
+ },
1418
+ tempHigh: 1000,
1419
+ category: "liquids",
1420
+ reactions: {
1421
+ "noita_meat": { func:function(pixel1,pixel2){ if (pixel1.NBurning === true && Math.random()> 0.9) {changePixel(pixel2,"lightly_cooked_meat");} } },
1422
+ "lightly_cooked_meat": { func:function(pixel1,pixel2){ if (pixel1.NBurning === true && ((pixel1.NBurnStart - pixelTicks) < -100) && Math.random()> 0.8) {changePixel(pixel2,"noita_cooked_meat");} } },
1423
+ "noita_cooked_meat": { func:function(pixel1,pixel2){ if (pixel1.NBurning === true && ((pixel1.NBurnStart - pixelTicks) < -225) && Math.random()> 0.9) {changePixel(pixel2,"fully_cooked_meat");} } },
1424
+ "fully_cooked_meat": { func:function(pixel1,pixel2){ if (pixel1.NBurning === true && ((pixel1.NBurnStart - pixelTicks) < -450) && Math.random()> 0.95) {changePixel(pixel2,"burned_meat");} } },
1425
+ },
1426
+ state: "liquid",
1427
+ density: 1000,
1428
+ corrodible: true,
1429
+ impure: true,
1430
+ }
1431
+
1432
+ elements.noita_gold = {
1433
+ color: ["#ffd785","#f9bb50","#e18c68","#ffd785","#f9bb50","#e18c68","#ffffb5","#ffd785","#f9bb50","#e18c68","#ffffb5","#ffffff"],
1434
+ name: "gold",
1435
+ behavior: behaviors.POWDER,
1436
+ tempHigh: 1500,
1437
+ stateHigh: "noita_molten_gold",
1438
+ reactions: {
1439
+ "flummoxium": { elem1:"levitatium", elem2:"levitatium", chance:0.45 },
1440
+ "diminution": { elem1:"noita_silver" },
1441
+ },
1442
+ category: "powders",
1443
+ state: "solid",
1444
+ density: 8000,
1445
+ conduct: 0.8,
1446
+ hardness: 0.25,
1447
+ sandMetal: true,
1448
+ corrodible: true,
1449
+ meltableMetal: true,
1450
+ }
1451
+
1452
+ elements.noita_molten_gold = {
1453
+ color: ["#ffd785","#f9bb50","#e18c68","#ffd785","#f9bb50","#e18c68","#ffffb5","#ffd785","#f9bb50","#e18c68","#ffffb5","#ffffff"],
1454
+ name: "molten_gold",
1455
+ behavior: behaviors.LIQUID,
1456
+ viscosity: 100,
1457
+ tempLow: 10,
1458
+ stateLow: "noita_gold",
1459
+ reactions: {
1460
+ },
1461
+ density: 3000,
1462
+ conduct: 0.8,
1463
+ corrodible: true,
1464
+ molten: true,
1465
+ }
1466
+
1467
+ elements.metal_dust = {
1468
+ color: ["#606d70","#3e4555","#758582","#bec8c1"],
1469
+ behavior: behaviors.POWDER,
1470
+ reactions: {
1471
+ },
1472
+ tempHigh: 1500,
1473
+ stateHigh:"molten_metal",
1474
+ category: "powders",
1475
+ density: 8000,
1476
+ state: "solid",
1477
+ conduct: 0.8,
1478
+ hardness: 0.25,
1479
+ sandMetal: true,
1480
+ corrodible: true,
1481
+ meltableMetal: true,
1482
+ }
1483
+
1484
+ elements.molten_metal = {
1485
+ color: ["#7d8a8d","#dbe5de","#5b6272","#92a29f"],
1486
+ behavior: behaviors.LIQUID,
1487
+ viscosity: 100,
1488
+ tempLow: 10,
1489
+ stateLow: "metal_dust",
1490
+ reactions: {
1491
+ },
1492
+ density: 3000,
1493
+ conduct: 0.8,
1494
+ corrodible: true,
1495
+ molten: true,
1496
+ }
1497
+
1498
+ elements.noita_brass = {
1499
+ color: ["#c7632e","#ae4a54","#d68b67","#f5dc99","#c7632e","#ae4a54","#d68b67","#f5dc99","#ffffff"],
1500
+ name:"brass",
1501
+ behavior: behaviors.POWDER,
1502
+ tick: function(pixel) {
1503
+ var coords = rectCoords(pixel.x-1,pixel.y-1,pixel.x+1,pixel.y+1);
1504
+ for (var i = 0; i < coords.length; i++) {
1505
+ var x = coords[i].x;
1506
+ var y = coords[i].y;
1507
+ if (!isEmpty(x,y,true)) {
1508
+ if (!outOfBounds(x,y) && (elements[pixelMap[x][y].element].fungus === true)) {
1509
+ changePixel(pixel,"funky_cloud")
1510
+ changePixel(pixelMap[x][y],"funky_cloud")
1511
+ }
1512
+ }
1513
+ }
1514
+ },
1515
+ reactions: {
1516
+ "noita_diamond": { elem1:"purifying_powder", elem2:"purifying_powder", chance:0.5, },
1517
+ "unstable_teleportatium": { elem2:"noita_smoke", elem1:"metal_dust", chance:0.50 },
1518
+ "pus": { elem1:"noita_smoke", chance:0.20 },
1519
+ },
1520
+ tempHigh: 1500,
1521
+ stateHigh:"noita_molten_brass",
1522
+ category: "powders",
1523
+ density: 8000,
1524
+ state: "solid",
1525
+ conduct: 0.8,
1526
+ hardness: 0.275,
1527
+ sandMetal: true,
1528
+ corrodible: true,
1529
+ meltableMetal: true,
1530
+ }
1531
+
1532
+ elements.noita_molten_brass = {
1533
+ color: ["#ffffc1","#ff937c","#ffac56","#ffd48f","#ffffc1","#ff937c","#ffac56","#ffd48f","#ffffff"],
1534
+ name: "molten_brass",
1535
+ behavior: behaviors.LIQUID,
1536
+ viscosity: 100,
1537
+ tempLow: 10,
1538
+ stateLow: "noita_brass",
1539
+ reactions: {
1540
+ },
1541
+ density: 3000,
1542
+ conduct: 0.8,
1543
+ corrodible: true,
1544
+ molten: true,
1545
+ }
1546
+
1547
+ elements.noita_copper = {
1548
+ color: ["#58444d","#915861","#b2947a","#cfbf9d"],
1549
+ name:"copper",
1550
+ behavior: behaviors.POWDER,
1551
+ reactions: {
1552
+ "teleportatium": { elem1:"noita_brass", elem2:"noita_smoke", chance:0.5, },
1553
+ "polymorphine": { elem1:"polymorphine_cloud", elem2:"polymorphine_cloud", chance:0.5, },
1554
+ "flummoxium": { elem1:"levitatium", elem2:"levitatium", chance:0.45, },
1555
+ "pus": { elem1:"noita_smoke", chance:0.20 },
1556
+ },
1557
+ tempHigh: 1500,
1558
+ stateHigh:"noita_molten_copper",
1559
+ category: "powders",
1560
+ density: 8000,
1561
+ state: "solid",
1562
+ conduct: 0.8,
1563
+ hardness: 0.3,
1564
+ sandMetal: true,
1565
+ corrodible: true,
1566
+ meltableMetal: true,
1567
+ }
1568
+
1569
+ elements.noita_molten_copper = {
1570
+ color: ["#ad8d75","#ffffc5","#e6a189","#ffdda2"],
1571
+ name: "molten_copper",
1572
+ behavior: behaviors.LIQUID,
1573
+ viscosity: 100,
1574
+ tempLow: 10,
1575
+ stateLow: "noita_copper",
1576
+ reactions: {
1577
+ },
1578
+ density: 3000,
1579
+ conduct: 0.8,
1580
+ corrodible: true,
1581
+ molten: true,
1582
+ }
1583
+
1584
+ elements.noita_silver = {
1585
+ color: ["#94938f","#f9f9f2","#c1c0bb","#ffffff"],
1586
+ name:"silver",
1587
+ behavior: behaviors.POWDER,
1588
+ reactions: {
1589
+ "polymorphine": { elem1:"noita_copper", elem2:"noita_smoke", chance:0.5, },
1590
+ "teleportatium": { elem1:"teleportatium_cloud", elem2:"teleportatium_cloud", chance:0.1, },
1591
+ "pus": { elem1:"noita_smoke", chance:0.20 },
1592
+ },
1593
+ tempHigh: 1500,
1594
+ stateHigh:"noita_molten_silver",
1595
+ category: "powders",
1596
+ density: 8000,
1597
+ state: "solid",
1598
+ conduct: 0.8,
1599
+ hardness: 0.25,
1600
+ sandMetal: true,
1601
+ corrodible: true,
1602
+ meltableMetal: true,
1603
+ }
1604
+
1605
+ elements.noita_molten_silver = {
1606
+ color: ["#e0dbca","#b3ae9e","#ffffff"],
1607
+ name: "molten_silver",
1608
+ behavior: behaviors.LIQUID,
1609
+ viscosity: 100,
1610
+ tempLow: 10,
1611
+ stateLow: "noita_silver",
1612
+ reactions: {
1613
+ },
1614
+ density: 3000,
1615
+ conduct: 0.8,
1616
+ corrodible: true,
1617
+ molten: true,
1618
+ }
1619
+
1620
+ elements.noita_steel = {
1621
+ color: ["#907e55","#4c4137","#695b4b","#695b4b","#695b4b","#6e5f4e","#5d5043","#84744e","#6e5f4e","#6e5f4e","#6e5f4e","#6e5f4e","#5d5043","#84744e","#4c4137","#907e55"],
1622
+ colorPattern: textures.STEEL,
1623
+ colorKey: {
1624
+ "g": "#6e5f4e",
1625
+ "s": "#5d5043",
1626
+ "G": "#84744e",
1627
+ "w": "#695b4b"
1628
+ },
1629
+ renderer: function(pixel,ctx) {
1630
+ if (!viewInfo[view].colorEffects) { drawDefault(ctx,pixel); return }
1631
+ if (pixel.alpha === 0) return;
1632
+ let edge1 = false;
1633
+ let edge2 = false;
1634
+ let edge3 = false;
1635
+ for (var i = 0; i < adjacentCoords.length; i++) {
1636
+ var coords = adjacentCoords[i];
1637
+ var x = pixel.x + coords[0];
1638
+ var y = pixel.y + coords[1];
1639
+ if (isEmpty(x,y) || (!outOfBounds(x,y) && elements[pixelMap[x][y].element].movable !== elements[pixel.element].movable)) {
1640
+ edge1 = true;
1641
+ break;
1642
+ }
1643
+ }
1644
+ for (var i = 0; i < adjacentCoords.length; i++) {
1645
+ var coords = adjacentCoords[i];
1646
+ var x = pixel.x + coords[0];
1647
+ var y = pixel.y + coords[1];
1648
+ if (isEmpty(x-1,y) || isEmpty(x,y-1) || isEmpty(x+1,y) || isEmpty(x,y+1) || (!outOfBounds(x-1,y) && elements[pixelMap[x-1][y].element].movable !== elements[pixel.element].movable) || (!outOfBounds(x+1,y) && elements[pixelMap[x+1][y].element].movable !== elements[pixel.element].movable) || (!outOfBounds(x,y-1) && elements[pixelMap[x][y-1].element].movable !== elements[pixel.element].movable) || (!outOfBounds(x,y+1) && elements[pixelMap[x][y+1].element].movable !== elements[pixel.element].movable)) {
1649
+ edge2 = true;
1650
+ break;
1651
+ }
1652
+ }
1653
+ for (var i = 0; i < adjacentCoords.length; i++) {
1654
+ var coords = adjacentCoords[i];
1655
+ var x = pixel.x + coords[0];
1656
+ var y = pixel.y + coords[1];
1657
+ if (isEmpty(x-2,y) || isEmpty(x,y-2) || isEmpty(x+2,y) || isEmpty(x,y+2) || (!outOfBounds(x-2,y) && elements[pixelMap[x-2][y].element].movable !== elements[pixel.element].movable) || (!outOfBounds(x+2,y) && elements[pixelMap[x+2][y].element].movable !== elements[pixel.element].movable) || (!outOfBounds(x,y-2) && elements[pixelMap[x][y-2].element].movable !== elements[pixel.element].movable) || (!outOfBounds(x,y+2) && elements[pixelMap[x][y+2].element].movable !== elements[pixel.element].movable)) {
1658
+ edge3 = true;
1659
+ break;
1660
+ }
1661
+ }
1662
+ if (edge1) { drawSquare(ctx,"#4c4137",pixel.x,pixel.y) }
1663
+ else if (edge2) { drawSquare(ctx,"#6e5f4e",pixel.x,pixel.y) }
1664
+ else if (edge3) { drawSquare(ctx,"#907e55",pixel.x,pixel.y) }
1665
+ else { drawSquare(ctx,pixel.color,pixel.x,pixel.y) }
1666
+ },
1667
+ grain: 0.1,
1668
+ name:"steel",
1669
+ behavior: behaviors.WALL,
1670
+ reactions: {
1671
+ },
1672
+ tempHigh: 1500,
1673
+ stateHigh:"molten_metal",
1674
+ category: "solids",
1675
+ density: 8000,
1676
+ state: "solid",
1677
+ conduct: 0.8,
1678
+ hardness: 0.8,
1679
+ static: true,
1680
+ meltableMetalGeneric: true,
1681
+ corrodible: true,
1682
+ rust: true,
1683
+ }
1684
+
1685
+ elements.noita_prop_steel = {
1686
+ color: ["#c1c8be","#606d70","#3e4555","#758582","#bec8c1","#25333b"],
1687
+ colorPattern: textures.STATICSHINE,
1688
+ colorKey: {
1689
+ "g": "#606d70",
1690
+ "s": "#3e4555",
1691
+ "G": "#758582",
1692
+ "w": "#bec8c1"
1693
+ },
1694
+ renderer: function(pixel,ctx) {
1695
+ if (!viewInfo[view].colorEffects) { drawDefault(ctx,pixel); return }
1696
+ if (pixel.alpha === 0) return;
1697
+ let edge1 = false;
1698
+ let edge2 = false;
1699
+ let edge3 = false;
1700
+ if ((isEmpty(pixel.x-1,pixel.y) || isEmpty(pixel.x,pixel.y-1)) && !isEmpty(pixel.x,pixel.y+1,true) && !isEmpty(pixel.x+1,pixel.y,true)) {
1701
+ edge1 = true;
1702
+ }
1703
+ else if ((isEmpty(pixel.x+1,pixel.y) || isEmpty(pixel.x,pixel.y+1)) && !isEmpty(pixel.x,pixel.y-1,true) && !isEmpty(pixel.x-1,pixel.y,true)) {
1704
+ edge2 = true;
1705
+ }
1706
+ else if ((isEmpty(pixel.x+1,pixel.y-1) || isEmpty(pixel.x-1,pixel.y+1)) && isEmpty(pixel.x-1,pixel.y-1) && isEmpty(pixel.x+1,pixel.y+1)) {
1707
+ edge3 = true;
1708
+ }
1709
+ if (edge1) { drawSquare(ctx,"#c1c8be",pixel.x,pixel.y) }
1710
+ else if (edge2) { drawSquare(ctx,"#25333b",pixel.x,pixel.y) }
1711
+ else if (edge3) { drawSquare(ctx,"#4f5eab",pixel.x,pixel.y) }
1712
+ else { drawSquare(ctx,pixel.color,pixel.x,pixel.y) }
1713
+ },
1714
+ name:"steel",
1715
+ behavior: behaviors.STURDYPOWDER,
1716
+ reactions: {
1717
+ },
1718
+ tempHigh: 1500,
1719
+ stateHigh:"noita_molten_prop_steel",
1720
+ category: "solids",
1721
+ density: 8000,
1722
+ state: "solid",
1723
+ conduct: 0.8,
1724
+ hardness: 0.8,
1725
+ meltableMetal: true,
1726
+ corrodible: true,
1727
+ rust: true,
1728
+ }
1729
+
1730
+ elements.noita_steel_sand = {
1731
+ color: ["#3e4555","#758582","#606d70","#bec8c1"],
1732
+ name:"steel",
1733
+ behavior: behaviors.POWDER,
1734
+ reactions: {
1735
+ "polymorphine": { elem1:"noita_copper", elem2:"noita_smoke", chance:0.5, },
1736
+ "teleportatium": { elem1:"teleportatium_cloud", elem2:"teleportatium_cloud", chance:0.1, },
1737
+ "pus": { elem1:"noita_smoke", chance:0.20 },
1738
+ },
1739
+ tempHigh: 1500,
1740
+ stateHigh:"noita_molten_steel",
1741
+ category: "powders",
1742
+ density: 8000,
1743
+ state: "solid",
1744
+ conduct: 0.8,
1745
+ hardness: 0.8,
1746
+ sandMetal: true,
1747
+ corrodible: true,
1748
+ }
1749
+
1750
+ elements.noita_molten_prop_steel = {
1751
+ color: ["#b5b698","#ffffe9","#938e7d","#caceaa"],
1752
+ name: "molten metal",
1753
+ behavior: behaviors.LIQUID,
1754
+ viscosity: 100,
1755
+ tempLow: 10,
1756
+ stateLow: "noita_steel_sand",
1757
+ reactions: {
1758
+ },
1759
+ density: 2000,
1760
+ conduct: 0.8,
1761
+ corrodible: true,
1762
+ nmolten: true,
1763
+ }
1764
+
1765
+ elements.noita_molten_steel = {
1766
+ color: ["#7a6d60","#867868","#a1916b","#7a6d60"],
1767
+ name: "molten steel",
1768
+ behavior: behaviors.LIQUID,
1769
+ viscosity: 100,
1770
+ tempLow: 10,
1771
+ stateLow: "metal_dust",
1772
+ reactions: {
1773
+ },
1774
+ density: 5000,
1775
+ conduct: 0.8,
1776
+ corrodible: true,
1777
+ moltenMetal: true,
1778
+ gold: true
1779
+ }
1780
+
1781
+ elements.noita_aluminium = {
1782
+ color: ["#c1c8be","#606d70","#3e4555","#758582","#bec8c1","#25333b"],
1783
+ colorPattern: textures.STATICSHINE,
1784
+ colorKey: {
1785
+ "g": "#606d70",
1786
+ "s": "#3e4555",
1787
+ "G": "#758582",
1788
+ "w": "#bec8c1"
1789
+ },
1790
+ name:"aluminium",
1791
+ behavior: behaviors.WALL,
1792
+ reactions: {
1793
+ },
1794
+ tempHigh: 1500,
1795
+ stateHigh:"noita_molten_prop_steel",
1796
+ category: "solids",
1797
+ density: 8000,
1798
+ state: "solid",
1799
+ conduct: 0.8,
1800
+ hardness: 0.8,
1801
+ earth: true,
1802
+ meltableMetal: true,
1803
+ corrodible: true,
1804
+ rustOxide: true,
1805
+ }
1806
+
1807
+ elements.aluminium_oxide = {
1808
+ color: ["#d1d1d2","#c5c1b8","#bdb59c","#ccc49f"],
1809
+ name:"aluminium",
1810
+ behavior: behaviors.WALL,
1811
+ reactions: {
1812
+ },
1813
+ tempHigh: 1500,
1814
+ stateHigh:"noita_molten_prop_steel",
1815
+ category: "solids",
1816
+ density: 8000,
1817
+ state: "solid",
1818
+ conduct: 0.8,
1819
+ hardness: 0.8,
1820
+ earth: true,
1821
+ meltableMetal: true,
1822
+ corrodible: true,
1823
+ rustOxide: true,
1824
+ }
1825
+
1826
+ elements.noita_diamond = {
1827
+ color: ["#97ebff","#97ebff","#ffffff","#c4ffff","#78b7d5","#78b7d5"],
1828
+ name:"diamond",
1829
+ behavior: behaviors.POWDER,
1830
+ reactions: {
1831
+ "noita_brass": { elem1:"purifying_powder", elem2:"purifying_powder", chance:0.5, },
1832
+ "chaotic_polymorphine": { elem1:"silver", elem2:"smoke", chance:0.5, },
1833
+ "noita_honey": { elem2:"ambrosia", elem1:"noita_poison", chance:0.5, },
1834
+ "flummoxium": { elem1:"levitatium", elem2:"levitatium", chance:0.45, },
1835
+ "diminution": { elem1:"toxic_sludge" },
1836
+ },
1837
+ category: "powders",
1838
+ state: "solid",
1839
+ density: 8000,
1840
+ hardness: 0.99,
1841
+ sandMetal: true,
1842
+ }
1843
+
1844
+ elements.noita_glass = {
1845
+ color: ["#76bed1","#6aabc3","#83dbe2"],
1846
+ renderer: renderPresets.BORDER,
1847
+ name:"glass",
1848
+ behavior: behaviors.WALL,
1849
+ reactions: {
1850
+ "concentrated_mana": { elem1:"noita_steam", chance:0.25 },
1851
+ },
1852
+ tempHigh: 1500,
1853
+ stateHigh:"noita_molten_glass",
1854
+ category: "solids",
1855
+ density: 6000,
1856
+ state: "solid",
1857
+ hardness: 0.2,
1858
+ meltableMetal: true,
1859
+ static: true,
1860
+ earth: true,
1861
+ }
1862
+
1863
+ elements.glass_broken = {
1864
+ color: ["#74bed0","#74bed0","#82dbe2","#69aac2"],
1865
+ name:"glass",
1866
+ behavior: behaviors.POWDER,
1867
+ reactions: {
1868
+ "concentrated_mana": { elem1:"noita_steam", chance:0.25 },
1869
+ },
1870
+ tempHigh: 1500,
1871
+ stateHigh:"noita_molten_glass",
1872
+ category: "powders",
1873
+ density: 6000,
1874
+ state: "solid",
1875
+ conduct: 0.8,
1876
+ hardness: 0.1,
1877
+ sandOther: true,
1878
+ meltableMetal: true,
1879
+ earth: true
1880
+ }
1881
+
1882
+ elements.noita_molten_glass = {
1883
+ color: ["#d7ffff","#d7ffff","#bef4eb"],
1884
+ name: "molten_glass",
1885
+ behavior: behaviors.LIQUID,
1886
+ viscosity: 100,
1887
+ tempLow: 10,
1888
+ stateLow: "noita_glass",
1889
+ reactions: {
1890
+ },
1891
+ density: 5000,
1892
+ conduct: 0.8,
1893
+ molten: true,
1894
+ meltableLava: true,
1895
+ earth: true
1896
+ }
1897
+
1898
+ elements.lava = {
1899
+ color: "#ff8100",
1900
+ behavior: behaviors.LIQUID,
1901
+ onCollide: function(pixel1,pixel2) {
1902
+ if (elements[pixel2.element].burnable === true && Math.random() < 0.08) {
1903
+ changePixel(pixel2,"noita_fire")
1904
+ pixel2.NBurning = true
1905
+ }
1906
+ else if (elements[pixel2.element].burnableFast === true && Math.random() < 0.8) {
1907
+ changePixel(pixel2,"noita_fire")
1908
+ pixel2.NBurning = true
1909
+ }
1910
+ else if (elements[pixel2.element].meltableLava === true && Math.random() < 0.03) {
1911
+ changePixel(pixel2,"noita_fire")
1912
+ pixel2.NBurning = true
1913
+ changePixel(pixel1,"noita_smoke")
1914
+ }
1915
+ else if (elements[pixel2.element].meltableLavaFast === true && Math.random() < 0.8) {
1916
+ changePixel(pixel2,"lava")
1917
+ changePixel(pixel1,"noita_smoke")
1918
+ }
1919
+ else if (elements[pixel2.element].meltableMetal === true && Math.random() < 0.8) {
1920
+ changePixel(pixel2,elements[pixel2.element].stateHigh)
1921
+ }
1922
+ },
1923
+ reactions: {
1924
+ "freezing_liquid": { elem1: "dense_rock", elem2: "freezing_vapour", chance:0.80 },
1925
+ "frozen_steel": { elem1: "volcanic_rock", elem2: "noita_steel", chance:0.80 },
1926
+ "noita_poison": { elem1: "poisonous_rock", elem2: "noita_poison_gas", chance:0.70 },
1927
+ "brine": { elem1: "glowing_matter", elem2: "noita_steam", chance:0.80 },
1928
+ "urine": { elem1: "fools_gold", elem2: "noita_steam", chance:0.70 },
1929
+ "noita_water": { elem1: "noita_rock", elem2: "noita_steam", chance:0.80 },
1930
+ "noita_mud": { elem1: "ground", elem2: "noita_steam", chance:0.80 },
1931
+ "noita_blood": { elem1: "volcanic_rock", elem2: "noita_steam", chance:0.70 },
1932
+ "noita_gunpowder": { elem2: "noita_fire", chance:0.70 },
1933
+ "teleportatium": { elem2:"teleportatium_cloud", chance:0.80 },
1934
+ },
1935
+ tempLow: 10,
1936
+ stateLow: "noita_rock",
1937
+ viscosity: 100,
1938
+ category: "liquids",
1939
+ state: "liquid",
1940
+ density: 6000,
1941
+ }
1942
+
1943
+ elements.noita_fire = {
1944
+ color: "#ff9700",
1945
+ name: "fire",
1946
+ tick: function(pixel){
1947
+ if (!pixel.NBurning) {pixel.NBurning = true}
1948
+ if (pixel.start === pixelTicks) {return}
1949
+ let move1Spots = adjacentCoords.slice(0);
1950
+ let moved = false;
1951
+ for (var i = 0; i < move1Spots.length; i++) {
1952
+ const j = Math.random()*move1Spots.length | 0;
1953
+ const coords = move1Spots[j];
1954
+ const x = pixel.x+coords[0];
1955
+ const y = pixel.y+coords[1];
1956
+ if (tryMove(pixel, x, y)) { moved = true; break; }
1957
+ move1Spots.splice(j, 1);
1958
+ }
1959
+ if (moved === false) {
1960
+ let move2Spots = diagonalCoords.slice(0);
1961
+ for (var i = 0; i < move2Spots.length; i++) {
1962
+ const j = Math.random()*move2Spots.length | 0;
1963
+ const coords = move2Spots[j];
1964
+ if (tryMove(pixel, pixel.x+coords[0], pixel.y+coords[1])) { break; }
1965
+ move2Spots.splice(j, 1);
1966
+ }
1967
+ }
1968
+ if (pixel.del !== true) {
1969
+ doNHeat(pixel);
1970
+ doAirDensity(pixel);
1971
+ doNBurning(pixel);
1972
+ if (settings.burn===0 && (pixelTicks-pixel.start > 70) && Math.random() < 0.1) {
1973
+ changePixel(pixel,"noita_smoke")
1974
+ }
1975
+ }
1976
+ },
1977
+ onCollide: function(pixel1,pixel2) {
1978
+ if (elements[pixel2.element].burnable === true) {
1979
+ pixel2.NBurning = true
1980
+ }
1981
+ else if (elements[pixel2.element].burnableFast === true) {
1982
+ changePixel(pixel2,"noita_fire")
1983
+ }
1984
+ if (pixel2.hp && !pixel2.stains.onFire) {
1985
+ pixel2.stains.onFire = [pixelTicks,1000]
1986
+ }
1987
+ },
1988
+ reactions: {
1989
+ },
1990
+ NBurning: true,
1991
+ nburnTime: 15,
1992
+ nburnInto: "noita_smoke",
1993
+ tempLow:10,
1994
+ stateLow: "noita_smoke",
1995
+ category: "energy",
1996
+ state: "gas",
1997
+ density: 0.1,
1998
+ noMix: true,
1999
+ fire: true,
2000
+ hot: true,
2001
+ }
2002
+
2003
+ elements.spark = {
2004
+ color: "#ffee00",
2005
+ behavior: behaviors.GAS,
2006
+ tick: function(pixel) {
2007
+ if (isEmpty(pixel.x+1,pixel.y) && Math.random() > 0.80 && (pixel.start + 3) < pixelTicks) {
2008
+ deletePixel(pixel.x,pixel.y)
2009
+ }
2010
+ else if (isEmpty(pixel.x-1,pixel.y) && Math.random() > 0.80 && (pixel.start + 3) < pixelTicks) {
2011
+ deletePixel(pixel.x,pixel.y)
2012
+ }
2013
+ else if (isEmpty(pixel.x,pixel.y+1) && Math.random() > 0.80 && (pixel.start + 3) < pixelTicks) {
2014
+ deletePixel(pixel.x,pixel.y)
2015
+ }
2016
+ else if (isEmpty(pixel.x,pixel.y-1) && Math.random() > 0.80 && (pixel.start + 3) < pixelTicks) {
2017
+ deletePixel(pixel.x,pixel.y)
2018
+ }
2019
+ doDefaults(pixel);
2020
+ },
2021
+ category: "energy",
2022
+ temp: 40,
2023
+ tempLow: -270,
2024
+ stateLow: ["liquid_light",null],
2025
+ state: "gas",
2026
+ density: 1000,
2027
+ hidden: true,
2028
+ noMix: true,
2029
+ fire: true,
2030
+ hot: true,
2031
+ }
2032
+
2033
+ elements.electric_spark = {
2034
+ color: "#3dffff",
2035
+ behavior: behaviors.GAS,
2036
+ charge: 3,
2037
+ tick: function(pixel) {
2038
+ if (isEmpty(pixel.x+1,pixel.y) && Math.random() > 0.80 && (pixel.start + 3) < pixelTicks) {
2039
+ deletePixel(pixel.x,pixel.y)
2040
+ }
2041
+ else if (isEmpty(pixel.x-1,pixel.y) && Math.random() > 0.80 && (pixel.start + 3) < pixelTicks) {
2042
+ deletePixel(pixel.x,pixel.y)
2043
+ }
2044
+ else if (isEmpty(pixel.x,pixel.y+1) && Math.random() > 0.80 && (pixel.start + 3) < pixelTicks) {
2045
+ deletePixel(pixel.x,pixel.y)
2046
+ }
2047
+ else if (isEmpty(pixel.x,pixel.y-1) && Math.random() > 0.80 && (pixel.start + 3) < pixelTicks) {
2048
+ deletePixel(pixel.x,pixel.y)
2049
+ }
2050
+ doDefaults(pixel);
2051
+ },
2052
+ category: "energy",
2053
+ temp: 40,
2054
+ tempLow: -270,
2055
+ stateLow: ["liquid_light",null],
2056
+ state: "gas",
2057
+ density: 1000,
2058
+ hidden: true,
2059
+ noMix: true,
2060
+ fire: true,
2061
+ hot: true,
2062
+ }
2063
+
2064
+ elements.noita_smoke = {
2065
+ color: ["#414141","#414141","#313131","#313131","#414141",],
2066
+ name: "smoke",
2067
+ behavior: behaviors.GAS,
2068
+ tick: function(pixel) {
2069
+ if (Math.random() > 0.9 && (pixel.start + 175) < pixelTicks) {
2070
+ deletePixel(pixel.x,pixel.y)
2071
+ }
2072
+ doDefaults(pixel);
2073
+ },
2074
+ reactions: {
2075
+ },
2076
+ tempHigh: 1000,
2077
+ stateHigh: "noita_fire",
2078
+ category: "gases",
2079
+ state: "gas",
2080
+ density: 0.1,
2081
+ stain: 0.075,
2082
+ noMix: true
2083
+ }
2084
+
2085
+ elements.freezing_liquid = {
2086
+ color: ["#6681e5","#607ad7","#7290ff",],
2087
+ behavior: behaviors.LIQUID,
2088
+ tick: function(pixel) {
2089
+ if (isEmpty(pixel.x+1,pixel.y) && Math.random() > 0.80 && (pixel.start + 200) < pixelTicks) {
2090
+ changePixel(pixel,"freezing_vapour")
2091
+ }
2092
+ else if (isEmpty(pixel.x-1,pixel.y) && Math.random() > 0.80 && (pixel.start + 200) < pixelTicks) {
2093
+ changePixel(pixel,"freezing_vapour")
2094
+ }
2095
+ else if (isEmpty(pixel.x,pixel.y+1) && Math.random() > 0.80 && (pixel.start + 200) < pixelTicks) {
2096
+ changePixel(pixel,"freezing_vapour")
2097
+ }
2098
+ else if (isEmpty(pixel.x,pixel.y-1) && Math.random() > 0.80 && (pixel.start + 200) < pixelTicks) {
2099
+ changePixel(pixel,"freezing_vapour")
2100
+ }
2101
+ doDefaults(pixel);
2102
+ },
2103
+ onCollide: function(pixel1,pixel2) {
2104
+ if (elements[pixel2.element].freezable === true) {
2105
+ changePixel(pixel2,"noita_ice")
2106
+ }
2107
+ },
2108
+ tempHigh: 150,
2109
+ stateHigh: "freezing_vapour",
2110
+ tempLow: -10,
2111
+ stateLow: "ice_cold",
2112
+ category: "liquids",
2113
+ reactions: {
2114
+ "worm_blood": { elem1: "worm_blood", chance:0.20 },
2115
+ },
2116
+ state: "liquid",
2117
+ density: 3000,
2118
+ conduct: 0.02,
2119
+ stain: -0.5,
2120
+ extinguish: true,
2121
+ corrodible: true,
2122
+ impure: true
2123
+ }
2124
+
2125
+ elements.freezing_vapour = {
2126
+ color: ["#63a6de","#63a6de","#5691c4","#5691c4","#63a6de",],
2127
+ behavior: behaviors.GAS,
2128
+ tick: function(pixel) {
2129
+ if (isEmpty(pixel.x+1,pixel.y) && Math.random() > 0.80 && (pixel.start + 125) < pixelTicks) {
2130
+ deletePixel(pixel.x,pixel.y)
2131
+ }
2132
+ else if (isEmpty(pixel.x-1,pixel.y) && Math.random() > 0.80 && (pixel.start + 125) < pixelTicks) {
2133
+ deletePixel(pixel.x,pixel.y)
2134
+ }
2135
+ else if (isEmpty(pixel.x,pixel.y+1) && Math.random() > 0.80 && (pixel.start + 125) < pixelTicks) {
2136
+ deletePixel(pixel.x,pixel.y)
2137
+ }
2138
+ else if (isEmpty(pixel.x,pixel.y-1) && Math.random() > 0.80 && (pixel.start + 125) < pixelTicks) {
2139
+ deletePixel(pixel.x,pixel.y)
2140
+ }
2141
+ doDefaults(pixel);
2142
+ },
2143
+ category: "gases",
2144
+ tempLow: -10,
2145
+ stateLow: "freezing_liquid",
2146
+ state: "gas",
2147
+ density: 2,
2148
+ }
2149
+
2150
+ elements.ice_cold = {
2151
+ color: ["#8a9bdd","#8a9bdd","#788bd5","#788bd5","#a0b0e5","#a0b0e5","#8a9bdd"],
2152
+ name: "ice",
2153
+ behavior: behaviors.WALL,
2154
+ tempHigh: 25,
2155
+ stateHigh: "freezing_liquid",
2156
+ category: "solids",
2157
+ state: "solid",
2158
+ density: 917,
2159
+ corrodible: true,
2160
+ static: true,
2161
+ }
2162
+
2163
+ elements.funky_cloud = {
2164
+ color: ["#ff68b1","#f75998","#ff5ea1","#c3487c","#b44373",],
2165
+ behavior: behaviors.GAS,
2166
+ tick: function(pixel) {
2167
+ if (isEmpty(pixel.x+1,pixel.y) && Math.random() > 0.70 && (pixel.start + 125) < pixelTicks) {
2168
+ deletePixel(pixel.x,pixel.y)
2169
+ }
2170
+ else if (isEmpty(pixel.x-1,pixel.y) && Math.random() > 0.70 && (pixel.start + 125) < pixelTicks) {
2171
+ deletePixel(pixel.x,pixel.y)
2172
+ }
2173
+ else if (isEmpty(pixel.x,pixel.y+1) && Math.random() > 0.70 && (pixel.start + 125) < pixelTicks) {
2174
+ deletePixel(pixel.x,pixel.y)
2175
+ }
2176
+ else if (isEmpty(pixel.x,pixel.y-1) && Math.random() > 0.70 && (pixel.start + 125) < pixelTicks) {
2177
+ deletePixel(pixel.x,pixel.y)
2178
+ }
2179
+ doDefaults(pixel);
2180
+ },
2181
+ category: "gases",
2182
+ tempHigh: 1000,
2183
+ stateHigh: "noita_fire",
2184
+ tempLow: -45,
2185
+ state: "gas",
2186
+ density: 2,
2187
+ alias: "gas"
2188
+ }
2189
+
2190
+ elements.fungal_gas = {
2191
+ color: ["#710c55","#710c55","#710c55","#57053c","#57053c",],
2192
+ behavior: behaviors.GAS,
2193
+ tick: function(pixel) {
2194
+ if (isEmpty(pixel.x+1,pixel.y) && Math.random() > 0.70 && (pixel.start + 225) < pixelTicks) {
2195
+ deletePixel(pixel.x,pixel.y)
2196
+ }
2197
+ else if (isEmpty(pixel.x-1,pixel.y) && Math.random() > 0.70 && (pixel.start + 225) < pixelTicks) {
2198
+ deletePixel(pixel.x,pixel.y)
2199
+ }
2200
+ else if (isEmpty(pixel.x,pixel.y+1) && Math.random() > 0.70 && (pixel.start + 225) < pixelTicks) {
2201
+ deletePixel(pixel.x,pixel.y)
2202
+ }
2203
+ else if (isEmpty(pixel.x,pixel.y-1) && Math.random() > 0.70 && (pixel.start + 225) < pixelTicks) {
2204
+ deletePixel(pixel.x,pixel.y)
2205
+ }
2206
+ doDefaults(pixel);
2207
+ },
2208
+ burnableFast: true,
2209
+ category: "gases",
2210
+ tempHigh: 1000,
2211
+ stateHigh: "noita_fire",
2212
+ tempLow: -45,
2213
+ burn: 100,
2214
+ burnTime: 1,
2215
+ fireColor: ["#00ffff","#00ffdd"],
2216
+ state: "gas",
2217
+ density: 2,
2218
+ alias: "gas",
2219
+ fungus: true,
2220
+ }
2221
+
2222
+ elements.weird_fungus = {
2223
+ color: ["#ff70bf","#ff6bb6","#ff7acf"],
2224
+ burnable: true,
2225
+ nburnTime: 25,
2226
+ tick: function(pixel) {
2227
+ doNHeat(pixel)
2228
+ doNBurning(pixel)
2229
+ if (pixel.start === pixelTicks) {return}
2230
+ if (pixel.settled != true) {
2231
+ if (!tryMove(pixel, pixel.x, pixel.y+1)) {
2232
+ if (Math.random() < 0.5) {
2233
+ if (!tryMove(pixel, pixel.x+1, pixel.y+1)) {
2234
+ if (!tryMove(pixel, pixel.x-1, pixel.y+1) && Math.random() > 0.95) {
2235
+ pixel.settled = true
2236
+ }
2237
+ }
2238
+ } else if (!tryMove(pixel, pixel.x-1, pixel.y+1)) {
2239
+ if (!tryMove(pixel, pixel.x+1, pixel.y+1) && Math.random() > 0.95) {
2240
+ pixel.settled = true
2241
+ }
2242
+ }
2243
+ }
2244
+ if (isEmpty(pixel.x, pixel.y-1)) {
2245
+ createPixel(pixel.element,pixel.x,pixel.y-1)
2246
+ }
2247
+ if (isEmpty(pixel.x, pixel.y+1)) {
2248
+ createPixel(pixel.element,pixel.x,pixel.y+1)
2249
+ }
2250
+ }
2251
+ if (pixel.settled == true) {
2252
+ if (isEmpty(pixel.x, pixel.y-1) && isEmpty(pixel.x-1, pixel.y) && isEmpty(pixel.x+1, pixel.y)) {
2253
+ tryMove(pixel, pixel.x, pixel.y+1)
2254
+ }
2255
+ if (!isEmpty(pixel.x, pixel.y-1, true) && !outOfBounds(pixel.x, pixel.y-1, true)) {
2256
+ if (elements[pixelMap[pixel.x][pixel.y-1].element].movable === true && (!pixelMap[pixel.x][pixel.y-1].settled || pixelMap[pixel.x][pixel.y-1].settled != true)) {
2257
+ pixel.settled = false
2258
+ }
2259
+ }
2260
+ if (isEmpty(pixel.x, pixel.y-1)) {
2261
+ createPixel(pixel.element,pixel.x,pixel.y-1)
2262
+ pixelMap[pixel.x][pixel.y-1].settled = true
2263
+ }
2264
+ if (isEmpty(pixel.x, pixel.y+1)) {
2265
+ createPixel(pixel.element,pixel.x,pixel.y+1)
2266
+ pixelMap[pixel.x][pixel.y+1].settled = true
2267
+ }
2268
+ }
2269
+ doDefaults(pixel);
2270
+ },
2271
+ reactions: {
2272
+ },
2273
+ tempHigh: 1500,
2274
+ stateHigh: "noita_fire",
2275
+ category:"powders",
2276
+ state: "solid",
2277
+ density: 6000,
2278
+ corrodible: true,
2279
+ impure: true,
2280
+ earth: true,
2281
+ fungus: true,
2282
+ plant: true,
2283
+ }
2284
+
2285
+ elements.green_fungus = {
2286
+ color: ["#89ff64","#96ff63"],
2287
+ burnable: true,
2288
+ nburnTime: 25,
2289
+ tick: function(pixel) {
2290
+ doNHeat(pixel)
2291
+ doNBurning(pixel)
2292
+ if (pixel.start === pixelTicks) {return}
2293
+ if (pixel.settled != true) {
2294
+ if (!tryMove(pixel, pixel.x, pixel.y+1)) {
2295
+ if (Math.random() < 0.5) {
2296
+ if (!tryMove(pixel, pixel.x+1, pixel.y+1)) {
2297
+ if (!tryMove(pixel, pixel.x-1, pixel.y+1) && Math.random() > 0.95) {
2298
+ pixel.settled = true
2299
+ }
2300
+ }
2301
+ } else if (!tryMove(pixel, pixel.x-1, pixel.y+1)) {
2302
+ if (!tryMove(pixel, pixel.x+1, pixel.y+1) && Math.random() > 0.95) {
2303
+ pixel.settled = true
2304
+ }
2305
+ }
2306
+ }
2307
+ if (isEmpty(pixel.x, pixel.y-1)) {
2308
+ createPixel(pixel.element,pixel.x,pixel.y-1)
2309
+ }
2310
+ if (isEmpty(pixel.x, pixel.y+1)) {
2311
+ createPixel(pixel.element,pixel.x,pixel.y+1)
2312
+ }
2313
+ }
2314
+ if (pixel.settled == true) {
2315
+ if (isEmpty(pixel.x, pixel.y-1) && isEmpty(pixel.x-1, pixel.y) && isEmpty(pixel.x+1, pixel.y)) {
2316
+ tryMove(pixel, pixel.x, pixel.y+1)
2317
+ }
2318
+ if (!isEmpty(pixel.x, pixel.y-1, true) && !outOfBounds(pixel.x, pixel.y-1, true)) {
2319
+ if (elements[pixelMap[pixel.x][pixel.y-1].element].movable === true && (!pixelMap[pixel.x][pixel.y-1].settled || pixelMap[pixel.x][pixel.y-1].settled != true)) {
2320
+ pixel.settled = false
2321
+ }
2322
+ }
2323
+ if (isEmpty(pixel.x, pixel.y-1)) {
2324
+ createPixel(pixel.element,pixel.x,pixel.y-1)
2325
+ pixelMap[pixel.x][pixel.y-1].settled = true
2326
+ }
2327
+ if (isEmpty(pixel.x, pixel.y+1)) {
2328
+ createPixel(pixel.element,pixel.x,pixel.y+1)
2329
+ pixelMap[pixel.x][pixel.y+1].settled = true
2330
+ }
2331
+ }
2332
+ doDefaults(pixel);
2333
+ },
2334
+ reactions: {
2335
+ },
2336
+ tempHigh: 1500,
2337
+ stateHigh: "noita_fire",
2338
+ category:"powders",
2339
+ state: "solid",
2340
+ density: 6000,
2341
+ corrodible: true,
2342
+ impure: true,
2343
+ earth: true,
2344
+ fungus: true,
2345
+ plant: true,
2346
+ }
2347
+
2348
+ elements.yellow_fungus = {
2349
+ color: ["#ffff59","#ffff51"],
2350
+ burnable: true,
2351
+ nburnTime: 25,
2352
+ tick: function(pixel) {
2353
+ doNHeat(pixel)
2354
+ doNBurning(pixel)
2355
+ if (pixel.start === pixelTicks) {return}
2356
+ if (pixel.settled != true) {
2357
+ if (!tryMove(pixel, pixel.x, pixel.y+1)) {
2358
+ if (Math.random() < 0.5) {
2359
+ if (!tryMove(pixel, pixel.x+1, pixel.y+1)) {
2360
+ if (!tryMove(pixel, pixel.x-1, pixel.y+1) && Math.random() > 0.95) {
2361
+ pixel.settled = true
2362
+ }
2363
+ }
2364
+ } else if (!tryMove(pixel, pixel.x-1, pixel.y+1)) {
2365
+ if (!tryMove(pixel, pixel.x+1, pixel.y+1) && Math.random() > 0.95) {
2366
+ pixel.settled = true
2367
+ }
2368
+ }
2369
+ }
2370
+ if (isEmpty(pixel.x, pixel.y-1)) {
2371
+ createPixel(pixel.element,pixel.x,pixel.y-1)
2372
+ }
2373
+ if (isEmpty(pixel.x, pixel.y+1)) {
2374
+ createPixel(pixel.element,pixel.x,pixel.y+1)
2375
+ }
2376
+ }
2377
+ if (pixel.settled == true) {
2378
+ if (isEmpty(pixel.x, pixel.y-1) && isEmpty(pixel.x-1, pixel.y) && isEmpty(pixel.x+1, pixel.y)) {
2379
+ tryMove(pixel, pixel.x, pixel.y+1)
2380
+ }
2381
+ if (!isEmpty(pixel.x, pixel.y-1, true) && !outOfBounds(pixel.x, pixel.y-1, true)) {
2382
+ if (elements[pixelMap[pixel.x][pixel.y-1].element].movable === true && (!pixelMap[pixel.x][pixel.y-1].settled || pixelMap[pixel.x][pixel.y-1].settled != true)) {
2383
+ pixel.settled = false
2384
+ }
2385
+ }
2386
+ if (isEmpty(pixel.x, pixel.y-1)) {
2387
+ createPixel(pixel.element,pixel.x,pixel.y-1)
2388
+ pixelMap[pixel.x][pixel.y-1].settled = true
2389
+ }
2390
+ if (isEmpty(pixel.x, pixel.y+1)) {
2391
+ createPixel(pixel.element,pixel.x,pixel.y+1)
2392
+ pixelMap[pixel.x][pixel.y+1].settled = true
2393
+ }
2394
+ }
2395
+ doDefaults(pixel);
2396
+ },
2397
+ reactions: {
2398
+ },
2399
+ tempHigh: 1500,
2400
+ stateHigh: "noita_fire",
2401
+ category:"powders",
2402
+ state: "solid",
2403
+ density: 6000,
2404
+ corrodible: true,
2405
+ impure: true,
2406
+ earth: true,
2407
+ fungus: true,
2408
+ plant: true,
2409
+ }
2410
+
2411
+ elements.corpse_fungus = {
2412
+ color: ["#933051","#a2355a","#bf3f6a"],
2413
+ name: "weird_fungus",
2414
+ behavior: behaviors.POWDER,
2415
+ burnable: true,
2416
+ nburnTime: 25,
2417
+ tick: function(pixel) {
2418
+ doNHeat(pixel)
2419
+ doNBurning(pixel)
2420
+ },
2421
+ reactions: {
2422
+ },
2423
+ tempHigh: 1500,
2424
+ stateHigh: "noita_fire",
2425
+ category:"solids",
2426
+ state: "solid",
2427
+ density: 6000,
2428
+ corrodible: true,
2429
+ earth: true,
2430
+ fungus: true,
2431
+ }
2432
+
2433
+ elements.noita_grass = {
2434
+ color: ["#739c45","#84b53c"],
2435
+ name:"grass",
2436
+ behavior: behaviors.POWDER,
2437
+ burnable: true,
2438
+ nburnTime: 25,
2439
+ tick: function(pixel) {
2440
+ doNHeat(pixel)
2441
+ doNBurning(pixel)
2442
+ requiresAir(pixel);
2443
+ doDefaults(pixel);
2444
+ },
2445
+ reactions: {
2446
+ "pus": { elem1:"noita_smoke", chance:0.80 },
2447
+ "healthium": { elem1:"holy_grass", elem2: null, chance:0.80 },
2448
+ },
2449
+ tempHigh: 1000,
2450
+ stateHigh: "dry_grass",
2451
+ category:"powders",
2452
+ state: "solid",
2453
+ density: 6000,
2454
+ corrodible: true,
2455
+ impure: true,
2456
+ plant: true,
2457
+ }
2458
+
2459
+ elements.holy_grass = {
2460
+ color: ["#aeff73","#bfff6a"],
2461
+ name:"divine_ground",
2462
+ behavior: behaviors.POWDER,
2463
+ burnable: true,
2464
+ nburnTime: 30,
2465
+ tick: function(pixel) {
2466
+ doNHeat(pixel)
2467
+ doNBurning(pixel)
2468
+ requiresAir(pixel);
2469
+ doDefaults(pixel);
2470
+ },
2471
+ reactions: {
2472
+ "urine": { elem1:"noita_grass", elem2:"healium", chance:0.80 },
2473
+ },
2474
+ tempHigh: 1000,
2475
+ stateHigh: "dry_grass",
2476
+ category:"powders",
2477
+ state: "solid",
2478
+ density: 6000,
2479
+ corrodible: true,
2480
+ plant: true,
2481
+ }
2482
+
2483
+ elements.dry_grass = {
2484
+ color: ["#877836","#6b6638"],
2485
+ name:"grass",
2486
+ behavior: behaviors.POWDER,
2487
+ burnable: true,
2488
+ nburnTime: 20,
2489
+ tick: function(pixel) {
2490
+ doNHeat(pixel)
2491
+ doNBurning(pixel)
2492
+ requiresAir(pixel);
2493
+ doDefaults(pixel);
2494
+ },
2495
+ reactions: {
2496
+ "pus": { elem1:"noita_smoke", chance:0.80 },
2497
+ },
2498
+ tempHigh: 1500,
2499
+ stateHigh: "noita_fire",
2500
+ category:"powders",
2501
+ state: "solid",
2502
+ density: 6000,
2503
+ corrodible: true,
2504
+ impure: true,
2505
+ plant: true,
2506
+ }
2507
+
2508
+ elements.frozen_grass = {
2509
+ color: ["#2a3c48","#36434a"],
2510
+ name:"ice",
2511
+ behavior: behaviors.POWDER,
2512
+ burnable: true,
2513
+ nburnTime: 30,
2514
+ tick: function(pixel) {
2515
+ doNHeat(pixel)
2516
+ doNBurning(pixel)
2517
+ },
2518
+ reactions: {
2519
+ "pus": { elem1:"noita_smoke", chance:0.80 },
2520
+ },
2521
+ tempHigh: 750,
2522
+ stateHigh: "noita_grass",
2523
+ category:"powders",
2524
+ state: "solid",
2525
+ density: 6000,
2526
+ corrodible: true,
2527
+ impure: true,
2528
+ plant: true,
2529
+ }
2530
+
2531
+ elements.plant_material = {
2532
+ color: ["#84b53c","#739c45"],
2533
+ burnable: true,
2534
+ nburnTime: 25,
2535
+ tick: function(pixel) {
2536
+ doNHeat(pixel)
2537
+ doNBurning(pixel)
2538
+ if (pixel.start === pixelTicks) {return}
2539
+ if (pixel.settled != true) {
2540
+ if (!tryMove(pixel, pixel.x, pixel.y+1)) {
2541
+ if (Math.random() < 0.5) {
2542
+ if (!tryMove(pixel, pixel.x+1, pixel.y+1)) {
2543
+ if (!tryMove(pixel, pixel.x-1, pixel.y+1) && Math.random() > 0.95) {
2544
+ pixel.settled = true
2545
+ }
2546
+ }
2547
+ } else if (!tryMove(pixel, pixel.x-1, pixel.y+1)) {
2548
+ if (!tryMove(pixel, pixel.x+1, pixel.y+1) && Math.random() > 0.95) {
2549
+ pixel.settled = true
2550
+ }
2551
+ }
2552
+ }
2553
+ }
2554
+ if (pixel.settled == true) {
2555
+ if (isEmpty(pixel.x, pixel.y-1) && isEmpty(pixel.x-1, pixel.y) && isEmpty(pixel.x+1, pixel.y)) {
2556
+ tryMove(pixel, pixel.x, pixel.y+1)
2557
+ }
2558
+ if (!isEmpty(pixel.x, pixel.y-1, true) && !outOfBounds(pixel.x, pixel.y-1, true)) {
2559
+ if (elements[pixelMap[pixel.x][pixel.y-1].element].movable === true && (!pixelMap[pixel.x][pixel.y-1].settled || pixelMap[pixel.x][pixel.y-1].settled != true)) {
2560
+ pixel.settled = false
2561
+ }
2562
+ }
2563
+ }
2564
+ requiresAir(pixel);
2565
+ doDefaults(pixel);
2566
+ },
2567
+ reactions: {
2568
+ },
2569
+ tempHigh: 1500,
2570
+ stateHigh: "noita_fire",
2571
+ category:"powders",
2572
+ state: "solid",
2573
+ density: 3400,
2574
+ corrodible: true,
2575
+ plant: true,
2576
+ }
2577
+
2578
+ elements.moss = {
2579
+ color: ["#739c45","#84b53c"],
2580
+ burnable: true,
2581
+ nburnTime: 25,
2582
+ tick: function(pixel) {
2583
+ doNHeat(pixel)
2584
+ doNBurning(pixel)
2585
+ if (pixel.start === pixelTicks) {return}
2586
+ if (pixel.settled != true) {
2587
+ if (!tryMove(pixel, pixel.x, pixel.y+1)) {
2588
+ if (Math.random() < 0.5) {
2589
+ if (!tryMove(pixel, pixel.x+1, pixel.y+1)) {
2590
+ if (!tryMove(pixel, pixel.x-1, pixel.y+1) && Math.random() > 0.95) {
2591
+ pixel.settled = true
2592
+ }
2593
+ }
2594
+ } else if (!tryMove(pixel, pixel.x-1, pixel.y+1)) {
2595
+ if (!tryMove(pixel, pixel.x+1, pixel.y+1) && Math.random() > 0.95) {
2596
+ pixel.settled = true
2597
+ }
2598
+ }
2599
+ }
2600
+ }
2601
+ if (pixel.settled == true) {
2602
+ if (isEmpty(pixel.x, pixel.y-1) && isEmpty(pixel.x-1, pixel.y) && isEmpty(pixel.x+1, pixel.y)) {
2603
+ tryMove(pixel, pixel.x, pixel.y+1)
2604
+ }
2605
+ if (!isEmpty(pixel.x, pixel.y-1, true) && !outOfBounds(pixel.x, pixel.y-1, true)) {
2606
+ if (elements[pixelMap[pixel.x][pixel.y-1].element].movable === true && (!pixelMap[pixel.x][pixel.y-1].settled || pixelMap[pixel.x][pixel.y-1].settled != true)) {
2607
+ pixel.settled = false
2608
+ }
2609
+ }
2610
+ }
2611
+ doDefaults(pixel);
2612
+ },
2613
+ reactions: {
2614
+ },
2615
+ tempHigh: 1500,
2616
+ stateHigh: "noita_fire",
2617
+ category:"powders",
2618
+ state: "solid",
2619
+ density: 3400,
2620
+ corrodible: true,
2621
+ impure: true,
2622
+ plant: true,
2623
+ }
2624
+
2625
+ elements.noita_salt = {
2626
+ color: ["#a7b6c4","#9cc1ba","#adb0ae","#c4b5c4","#a2b6c3","#9daabc","#c4c4b1"],
2627
+ behavior: behaviors.POWDER,
2628
+ reactions: {
2629
+ "noita_water": { elem1: null, elem2:"brine", chance:0.05 },
2630
+ "chilly_water": { elem1: null, elem2:"brine", chance:0.05 },
2631
+ "diminution": { elem1: "noita_smoke" }
2632
+ },
2633
+ tempHigh: 1500,
2634
+ category:"powders",
2635
+ state: "solid",
2636
+ density: 6000,
2637
+ corrodible: true
2638
+ }
2639
+
2640
+ elements.noita_honey = {
2641
+ color: ["#e8bd5a","#eac947","#e8bd5a","#eac947","#f0d99a"],
2642
+ name: "honey",
2643
+ behavior: behaviors.POWDER,
2644
+ tempHigh: 1000,
2645
+ stateHigh: "noita_fire",
2646
+ tempLow: 0,
2647
+ category: "liquids",
2648
+ reactions: {
2649
+ "noita_fire": { elem1: "lava", elem2: "noita_smoke" },
2650
+ "noita_diamond": { elem1: "ambrosia", elem2: "noita_poison", chance:0.50 },
2651
+ },
2652
+ state: "liquid",
2653
+ density: 10000,
2654
+ stain: -0.5,
2655
+ isFood: true,
2656
+ corrodible: true,
2657
+ meltableLavaFast: true,
2658
+ }
2659
+
2660
+ elements.ambrosia = {
2661
+ color: "#ffcc34",
2662
+ behavior: behaviors.LIQUID,
2663
+ viscosity: 100,
2664
+ tempHigh: 1000,
2665
+ stateHigh: "noita_fire",
2666
+ tempLow: 0,
2667
+ category: "liquids",
2668
+ reactions: {
2669
+ "diminution": { elem1: "noita_acid", elem2: "noita_smoke" },
2670
+ },
2671
+ state: "liquid",
2672
+ density: 5120,
2673
+ conduct: 0.8,
2674
+ stain: -0.5,
2675
+ water: true,
2676
+ impure: true,
2677
+ }
2678
+
2679
+ elements.frog.breakInto = ["slime","frog_meat"]
2680
+
2681
+ elements.frog_meat = {
2682
+ color: ["#cc4c4c","#b2588b","#c996e6","#cd7d8a","#c4a4a9","#8f4d53"],
2683
+ behavior: behaviors.STURDYPOWDER,
2684
+ onBreak: function(pixel) {
2685
+ if (Math.random() > 0.95) {
2686
+ changePixel(pixel,"frog_meat")
2687
+ }
2688
+ else if (Math.random() > 0.90) {
2689
+ changePixel(pixel,"noita_blood")
2690
+ }
2691
+ },
2692
+ burnable: true,
2693
+ reactions: {
2694
+ "whiskey": { elem2:"berserkium", chance:0.1 }
2695
+ },
2696
+ meat: true,
2697
+ tempHigh: 200,
2698
+ stateHigh: "cooked_meat",
2699
+ category:"food",
2700
+ burn:15,
2701
+ burnTime:200,
2702
+ burnInto:"cooked_meat",
2703
+ state: "solid",
2704
+ density: 6000,
2705
+ conduct: 0.2,
2706
+ isFood: true,
2707
+ corrodible: true
2708
+ }
2709
+
2710
+ elements.ambiguous_meat = {
2711
+ color: ["#cc4c4c","#b2588b","#c996e6","#cd7d8a","#c4a4a9","#8f4d53"],
2712
+ behavior: behaviors.STURDYPOWDER,
2713
+ onBreak: function(pixel) {
2714
+ if (Math.random() > 0.95) {
2715
+ changePixel(pixel,"ambiguous_meat")
2716
+ }
2717
+ else if (Math.random() > 0.90) {
2718
+ changePixel(pixel,"noita_blood")
2719
+ }
2720
+ },
2721
+ burnable: true,
2722
+ reactions: {
2723
+ },
2724
+ meat: true,
2725
+ tempHigh: 200,
2726
+ stateHigh: "cooked_meat",
2727
+ category:"food",
2728
+ burn:15,
2729
+ burnTime:200,
2730
+ burnInto:"cooked_meat",
2731
+ state: "solid",
2732
+ density: 6000,
2733
+ conduct: 0.2,
2734
+ isFood: true,
2735
+ corrodible: true,
2736
+ }
2737
+
2738
+ elements.worm_meat = {
2739
+ color: ["#6fa0c3","#6599bf","#b9d3dd","#94b9d0","#aac9d8","#5582a1"],
2740
+ behavior: behaviors.STURDYPOWDER,
2741
+ onBreak: function(pixel) {
2742
+ if (Math.random() > 0.95) {
2743
+ changePixel(pixel,"worm_meat")
2744
+ }
2745
+ else if (Math.random() > 0.90) {
2746
+ changePixel(pixel,"worm_blood")
2747
+ }
2748
+ },
2749
+ burnable: true,
2750
+ reactions: {
2751
+ },
2752
+ meat: true,
2753
+ tempHigh: 200,
2754
+ stateHigh: "cooked_meat",
2755
+ category:"food",
2756
+ burn:15,
2757
+ burnTime:200,
2758
+ burnInto:"cooked_meat",
2759
+ state: "solid",
2760
+ density: 6000,
2761
+ conduct: 0.2,
2762
+ isFood: true,
2763
+ corrodible: true,
2764
+ }
2765
+
2766
+ elements.helpless_meat = {
2767
+ color: ["#cc4c4c","#b2588b","#c996e6","#cd7d8a","#c4a4a9","#8f4d53"],
2768
+ name: "meat of an innocent creature",
2769
+ behavior: behaviors.STURDYPOWDER,
2770
+ onBreak: function(pixel) {
2771
+ if (Math.random() > 0.95) {
2772
+ changePixel(pixel,"helpless_meat")
2773
+ }
2774
+ else if (Math.random() > 0.90) {
2775
+ changePixel(pixel,"noita_blood")
2776
+ }
2777
+ },
2778
+ burnable: true,
2779
+ reactions: {
2780
+ },
2781
+ meat: true,
2782
+ tempHigh: 200,
2783
+ stateHigh: "cooked_meat",
2784
+ category:"food",
2785
+ burn:15,
2786
+ burnTime:200,
2787
+ burnInto:"cooked_meat",
2788
+ state: "solid",
2789
+ density: 6000,
2790
+ conduct: 0.2,
2791
+ isFood: true,
2792
+ corrodible: true,
2793
+ desc: "You monster. How dare you."
2794
+ }
2795
+
2796
+ elements.noita_meat = {
2797
+ color: ["#cc4c4c","#b2588b","#c996e6","#cd7d8a","#c4a4a9","#8f4d53"],
2798
+ name: "meat",
2799
+ behavior: behaviors.STURDYPOWDER,
2800
+ onBreak: function(pixel) {
2801
+ if (Math.random() > 0.95) {
2802
+ changePixel(pixel,"noita_meat")
2803
+ }
2804
+ else if (Math.random() > 0.90) {
2805
+ changePixel(pixel,"noita_blood")
2806
+ }
2807
+ },
2808
+ burnable: true,
2809
+ reactions: {
2810
+ },
2811
+ meat: true,
2812
+ tempHigh: 200,
2813
+ stateHigh: "cooked_meat",
2814
+ category:"food",
2815
+ burn:15,
2816
+ burnTime:200,
2817
+ burnInto:"cooked_meat",
2818
+ state: "solid",
2819
+ density: 6000,
2820
+ conduct: 0.2,
2821
+ isFood: true,
2822
+ corrodible: true,
2823
+ }
2824
+
2825
+ elements.lightly_cooked_meat = {
2826
+ color: ["#b8a26e","#a67971","#e2dbb4","#c3af96","#c6beb4","#88785e"],
2827
+ behavior: behaviors.STURDYPOWDER,
2828
+ onBreak: function(pixel) {
2829
+ if (Math.random() > 0.95) {
2830
+ changePixel(pixel,"lightly_cooked_meat")
2831
+ }
2832
+ else if (Math.random() > 0.90) {
2833
+ changePixel(pixel,"noita_oil")
2834
+ }
2835
+ },
2836
+ burnable: true,
2837
+ reactions: {
2838
+ "noita_meat": { func:function(pixel1,pixel2){ if (Math.random()> 0.9) {changePixel(pixel2,"lightly_cooked_meat");} } },
2839
+ },
2840
+ meat: true,
2841
+ tempHigh: 200,
2842
+ stateHigh: "cooked_meat",
2843
+ category:"food",
2844
+ burn:15,
2845
+ burnTime:200,
2846
+ burnInto:"cooked_meat",
2847
+ state: "solid",
2848
+ density: 6000,
2849
+ conduct: 0.2,
2850
+ isFood: true,
2851
+ corrodible: true,
2852
+ }
2853
+ elements.noita_cooked_meat = {
2854
+ color: ["#a17858","#8e5f65","#cbb18d","#ac8779","#ab9b95","#715d52"],
2855
+ name: "cooked meat",
2856
+ behavior: behaviors.STURDYPOWDER,
2857
+ onBreak: function(pixel) {
2858
+ if (Math.random() > 0.95) {
2859
+ changePixel(pixel,"noita_cooked_meat")
2860
+ }
2861
+ else if (Math.random() > 0.90) {
2862
+ changePixel(pixel,"noita_oil")
2863
+ }
2864
+ },
2865
+ burnable: true,
2866
+ reactions: {
2867
+ "noita_meat": { func:function(pixel1,pixel2){ if (Math.random()> 0.9) {changePixel(pixel2,"noita_cooked_meat");} } },
2868
+ "lightly_cooked_meat": { func:function(pixel1,pixel2){ if (Math.random()> 0.9) {changePixel(pixel2,"noita_cooked_meat");} } },
2869
+ },
2870
+ meat: true,
2871
+ tempHigh: 200,
2872
+ stateHigh: "cooked_meat",
2873
+ category:"food",
2874
+ burn:15,
2875
+ burnTime:200,
2876
+ burnInto:"cooked_meat",
2877
+ state: "solid",
2878
+ density: 6000,
2879
+ conduct: 0.2,
2880
+ isFood: true,
2881
+ corrodible: true,
2882
+ }
2883
+
2884
+ elements.fully_cooked_meat = {
2885
+ color: ["#6f533d","#624246","#a37e4a","#7d5a4d","#7b6962","#4e4039"],
2886
+ behavior: behaviors.STURDYPOWDER,
2887
+ onBreak: function(pixel) {
2888
+ if (Math.random() > 0.95) {
2889
+ changePixel(pixel,"fully_cooked_meat")
2890
+ }
2891
+ else if (Math.random() > 0.90) {
2892
+ changePixel(pixel,"noita_oil")
2893
+ }
2894
+ },
2895
+ burnable: true,
2896
+ reactions: {
2897
+ "noita_meat": { func:function(pixel1,pixel2){ if (Math.random()> 0.9) {changePixel(pixel2,"fully_cooked_meat");} } },
2898
+ "lightly_cooked_meat": { func:function(pixel1,pixel2){ if (Math.random()> 0.9) {changePixel(pixel2,"fully_cooked_meat");} } },
2899
+ "noita_cooked_meat": { func:function(pixel1,pixel2){ if (Math.random()> 0.9) {changePixel(pixel2,"fully_cooked_meat");} } },
2900
+ },
2901
+ meat: true,
2902
+ tempHigh: 200,
2903
+ stateHigh: "cooked_meat",
2904
+ category:"food",
2905
+ burn:15,
2906
+ burnTime:200,
2907
+ burnInto:"cooked_meat",
2908
+ state: "solid",
2909
+ density: 6000,
2910
+ conduct: 0.2,
2911
+ isFood: true,
2912
+ corrodible: true,
2913
+ }
2914
+
2915
+ elements.burned_meat = {
2916
+ color: ["#403a35","#3c3435","#5b5246","#4a423f","#4e4a48","#302d2b"],
2917
+ behavior: behaviors.STURDYPOWDER,
2918
+ onBreak: function(pixel) {
2919
+ if (Math.random() > 0.95) {
2920
+ changePixel(pixel,"burned_meat")
2921
+ }
2922
+ else if (Math.random() > 0.90) {
2923
+ changePixel(pixel,"noita_oil")
2924
+ }
2925
+ },
2926
+ burnable: true,
2927
+ reactions: {
2928
+ "noita_meat": { func:function(pixel1,pixel2){ if (Math.random()> 0.9) {changePixel(pixel2,"lightly_cooked_meat");} } },
2929
+ "lightly_cooked_meat": { func:function(pixel1,pixel2){ if ( Math.random()> 0.9) {changePixel(pixel2,"noita_cooked_meat");} } },
2930
+ "noita_cooked_meat": { func:function(pixel1,pixel2){ if (Math.random()> 0.9) {changePixel(pixel2,"fully_cooked_meat");} } },
2931
+ "fully_cooked_meat": { func:function(pixel1,pixel2){ if (Math.random()> 0.995) {changePixel(pixel2,"burned_meat");} } },
2932
+ },
2933
+ meat: true,
2934
+ tempHigh: 200,
2935
+ stateHigh: "cooked_meat",
2936
+ category:"food",
2937
+ burn:15,
2938
+ burnTime:200,
2939
+ burnInto:"cooked_meat",
2940
+ state: "solid",
2941
+ density: 6000,
2942
+ conduct: 0.2,
2943
+ isFood: true,
2944
+ corrodible: true,
2945
+ }
2946
+
2947
+ elements.acid.impure = true
2948
+ elements.dirty_water.impure = true
2949
+ elements.alcohol.impure = true
2950
+ elements.blood.impure = true
2951
+ elements.cement.impure = true
2952
+ elements.melted_wax.impure = true
2953
+ elements.slime.impure = true
2954
+ elements.glue.impure = true
2955
+ elements.seeds.impure = true
2956
+ elements.potato_seed.impure = true
2957
+ elements.grass_seed.impure = true
2958
+ elements.wheat_seed.impure = true
2959
+ elements.pumpkin_seed.impure = true
2960
+ elements.corn_seed.impure = true
2961
+ elements.mushroom_spore.impure = true
2962
+ elements.grass.impure = true
2963
+ elements.mushroom_stalk.impure = true
2964
+ elements.mushroom_cap.impure = true
2965
+ elements.mushroom_gill.impure = true
2966
+ elements.hyphae.impure = true
2967
+
2968
+ elements.meat.meat = true
2969
+ elements.rotten_meat.meat = true
2970
+ elements.cured_meat.meat = true
2971
+ elements.cooked_meat.meat = true
2972
+
2973
+ elements.purifying_powder = {
2974
+ color: ["#a7b6c4","#a9c4c3","#c4b5c4","#b1c4c4","#a2b4b0","#bec4b6","#ababb2"],
2975
+ behavior: behaviors.POWDER,
2976
+ tick: function(pixel) {
2977
+ var coords = rectCoords(pixel.x-1,pixel.y-1,pixel.x+1,pixel.y+1);
2978
+ for (var i = 0; i < coords.length; i++) {
2979
+ var x = coords[i].x;
2980
+ var y = coords[i].y;
2981
+ if (!isEmpty(x,y,true)) {
2982
+ elements.purifying_powder.tool(pixelMap[x][y]);
2983
+ }
2984
+ }
2985
+ },
2986
+ tool: function(impure) {
2987
+ if (elements[impure.element].impure === true) {
2988
+ changePixel(impure, "noita_water")
2989
+ }
2990
+ },
2991
+ canPlace: true,
2992
+ reactions: {
2993
+ },
2994
+ category: "powders",
2995
+ state: "solid",
2996
+ density: 6000,
2997
+ hardness: 0.99,
2998
+ corrodible: true
2999
+ }
3000
+
3001
+ elements.alchemic_precursor = {
3002
+ color: ["#0843ec","#2b52e4","#2568db","#2250df","#1542e4"],
3003
+ behavior: behaviors.LIQUID,
3004
+ tick: function(pixel) {
3005
+ var coords = rectCoords(pixel.x-1,pixel.y-1,pixel.x+1,pixel.y+1);
3006
+ for (var i = 0; i < coords.length; i++) {
3007
+ var x = coords[i].x;
3008
+ var y = coords[i].y;
3009
+ if (!isEmpty(x,y,true)) {
3010
+ elements.alchemic_precursor.tool(pixelMap[x][y]);
3011
+ }
3012
+ }
3013
+ },
3014
+ tool: function(meat) {
3015
+ if (elements[meat.element].meat === true) {
3016
+ changePixel(meat, "draught_of_midas")
3017
+ }
3018
+ },
3019
+ canPlace: true,
3020
+ tempLow: -10,
3021
+ burn: 100,
3022
+ burnTime: 3,
3023
+ fireColor: ["#80acf0","#96cdfe","#bee6d4"],
3024
+ category: "liquids",
3025
+ reactions: {
3026
+ "magma": { elem1:"gas_of_midas" },
3027
+ },
3028
+ state: "liquid",
3029
+ density: 3500,
3030
+ conduct: 0.02,
3031
+ stain: -0.5,
3032
+ extinguish: true
3033
+ }
3034
+
3035
+ elements.noita_acid = {
3036
+ name: "acid",
3037
+ color: "#00ff3c",
3038
+ behavior: behaviors.LIQUID,
3039
+ tick: function(pixel) {
3040
+ for (var i = 0; i < adjacentCoords.length; i++) {
3041
+ var x = pixel.x+adjacentCoords[i][0];
3042
+ var y = pixel.y+adjacentCoords[i][1];
3043
+ if (!isEmpty(x,y,true)) {
3044
+ var newPixel = pixelMap[x][y];
3045
+ if ((elements[newPixel.element].corrodible !== true || elements.acid.ignore.indexOf(newPixel.element) !== -1 && elements.noita_acid.ignore.indexOf(newPixel.element) !== -1)) {
3046
+ }
3047
+ else {
3048
+ changePixel(newPixel,"flammable_gas");
3049
+ }
3050
+ }
3051
+ }
3052
+ if (isEmpty(pixel.x+1,pixel.y) && Math.random() > 0.92 && (pixel.start + 225) < pixelTicks) {
3053
+ changePixel(pixel,"flammable_gas")
3054
+ }
3055
+ else if (isEmpty(pixel.x-1,pixel.y) && Math.random() > 0.92 && (pixel.start + 225) < pixelTicks) {
3056
+ changePixel(pixel,"flammable_gas")
3057
+ }
3058
+ else if (isEmpty(pixel.x,pixel.y+1) && Math.random() > 0.92 && (pixel.start + 225) < pixelTicks) {
3059
+ changePixel(pixel,"flammable_gas")
3060
+ }
3061
+ else if (isEmpty(pixel.x,pixel.y-1) && Math.random() > 0.92 && (pixel.start + 225) < pixelTicks) {
3062
+ changePixel(pixel,"flammable_gas")
3063
+ }
3064
+ doDefaults(pixel);
3065
+ },
3066
+ ignore:["noita_acid","acid"],
3067
+ reactions: {
3068
+ "flammable_gas": {elem1:"flammable_gas",elem2:null, chance:0.12}
3069
+ },
3070
+ category: "liquids",
3071
+ tempHigh: 150,
3072
+ stateHigh: "flammable_gas",
3073
+ tempLow: -58.88,
3074
+ burn: 30,
3075
+ burnTime: 1,
3076
+ state: "liquid",
3077
+ density: 2900,
3078
+ stain: -0.1,
3079
+ impure: true,
3080
+ }
3081
+
3082
+ elements.flammable_gas = {
3083
+ color: ["#357d22","#357d22","#357d22","#357d22","#285e1a",],
3084
+ behavior: behaviors.GAS,
3085
+ tick: function(pixel) {
3086
+ if (isEmpty(pixel.x+1,pixel.y) && Math.random() > 0.70 && (pixel.start + 225) < pixelTicks) {
3087
+ deletePixel(pixel.x,pixel.y)
3088
+ }
3089
+ else if (isEmpty(pixel.x-1,pixel.y) && Math.random() > 0.70 && (pixel.start + 225) < pixelTicks) {
3090
+ deletePixel(pixel.x,pixel.y)
3091
+ }
3092
+ else if (isEmpty(pixel.x,pixel.y+1) && Math.random() > 0.70 && (pixel.start + 225) < pixelTicks) {
3093
+ deletePixel(pixel.x,pixel.y)
3094
+ }
3095
+ else if (isEmpty(pixel.x,pixel.y-1) && Math.random() > 0.70 && (pixel.start + 225) < pixelTicks) {
3096
+ deletePixel(pixel.x,pixel.y)
3097
+ }
3098
+ doDefaults(pixel);
3099
+ },
3100
+ burnableFast: true,
3101
+ category: "gases",
3102
+ tempHigh: 1000,
3103
+ stateHigh: "noita_fire",
3104
+ tempLow: -45,
3105
+ burn: 100,
3106
+ burnTime: 1,
3107
+ fireColor: ["#00ffff","#00ffdd"],
3108
+ state: "gas",
3109
+ density: 2,
3110
+ alias: "gas"
3111
+ }
3112
+
3113
+ elements.draught_of_midas = {
3114
+ color: ["#ffea47","#ffde5a","#ffea47","#ffde5a","#fffa9a","#ffea47","#ffde5a",],
3115
+ behavior: behaviors.LIQUID,
3116
+ tick: function(pixel) {
3117
+ var coords = rectCoords(pixel.x-1,pixel.y-1,pixel.x+1,pixel.y+3);
3118
+ for (var i = 0; i < coords.length; i++) {
3119
+ var x = coords[i].x;
3120
+ var y = coords[i].y;
3121
+ if (!isEmpty(x,y,true)) {
3122
+ elements.draught_of_midas.tool(pixelMap[x][y]);
3123
+ }
3124
+ }
3125
+ },
3126
+ tool: function(pixel) {
3127
+ if (elements[pixel.element].id === elements.midas_touch.id) { return; }
3128
+ if (elements[pixel.element].id === elements.draught_of_midas.id) { return; }
3129
+ if (elements[pixel.element].id === elements.gas_of_midas.id) { return; }
3130
+ if (elements.midas_touch.reactions[pixel.element]) { return; }
3131
+ if (elements.draught_of_midas.reactions[pixel.element]) { return; }
3132
+ if (elements.gas_of_midas.reactions[pixel.element]) { return; }
3133
+ if (Math.random() < (elements[pixel.element].hardness || 0.25)) { return; }
3134
+ if (elements[pixel.element].state === "gas" && elements[pixel.element].id !== elements.mud.id && elements[pixel.element].id !== elements.noita_mud.id) {
3135
+ changePixel(pixel,"gold_coin");
3136
+ pixel.color = pixelColorPick(pixel,["#ffdf5e","#ffe682"]);
3137
+ }
3138
+ else if (elements[pixel.element].movable && elements[pixel.element].id !== elements.mud.id && elements[pixel.element].id !== elements.noita_mud.id) {
3139
+ changePixel(pixel,"gold_coin");
3140
+ }
3141
+ else if (elements[pixel.element].id === elements.alchemic_precursor.id) {
3142
+ changePixel(pixel, "draught_of_midas");
3143
+ }
3144
+ else if (elements[pixel.element].id !== elements.mud.id && elements[pixel.element].id !== elements.noita_mud.id) {
3145
+ changePixel(pixel,"gold_coin");
3146
+ }
3147
+ },
3148
+ canPlace: true,
3149
+ reactions: {
3150
+ "gold":{}, "gold_coin":{}, "rose_gold":{}, "blue_gold":{}, "purple_gold":{}, "electrum":{},
3151
+ "molten_gold":{}, "pipe":{},
3152
+ "paper": { stain2:"#54803d" },
3153
+ "head": { elem2:"gold" },
3154
+ "body": { elem2:"gold" },
3155
+ "copper": { elem2:"rose_gold" },
3156
+ "gallium": { elem2:"blue_gold" },
3157
+ "molten_gallium": { elem2:"blue_gold" },
3158
+ "aluminum": { elem2:"purple_gold" },
3159
+ "silver": { elem2:"electrum" }
3160
+ },
3161
+ density: 997,
3162
+ state: "liquid",
3163
+ category:"liquids",
3164
+ }
3165
+
3166
+ elements.gas_of_midas = {
3167
+ color: ["#ffea47","#ffde5a","#ffea47","#ffde5a","#fffa9a","#ffea47","#ffde5a",],
3168
+ behavior: behaviors.GAS,
3169
+ tick: function(pixel) {
3170
+ var coords = rectCoords(pixel.x-1,pixel.y-1,pixel.x+1,pixel.y+1);
3171
+ for (var i = 0; i < coords.length; i++) {
3172
+ var x = coords[i].x;
3173
+ var y = coords[i].y;
3174
+ if (!isEmpty(x,y,true)) {
3175
+ if (!outOfBounds(x,y) && elements[pixelMap[x][y].element].id !== elements.gold.id && elements[pixelMap[x][y].element].id !== elements.gold_coin.id && elements[pixelMap[x][y].element].id !== elements.midas_touch.id && elements[pixelMap[x][y].element].id !== elements.draught_of_midas.id && elements[pixelMap[x][y].element].id !== elements.gas_of_midas.id) {
3176
+ elements.draught_of_midas.tool(pixelMap[x][y]);
3177
+ changePixel(pixel,"gold_coin")
3178
+ }
3179
+ }
3180
+ }
3181
+ if (isEmpty(pixel.x+1,pixel.y) && Math.random() > 0.70 && (pixel.start + 204) < pixelTicks) {
3182
+ deletePixel(pixel.x,pixel.y)
3183
+ }
3184
+ else if (isEmpty(pixel.x-1,pixel.y) && Math.random() > 0.70 && (pixel.start + 204) < pixelTicks) {
3185
+ deletePixel(pixel.x,pixel.y)
3186
+ }
3187
+ else if (isEmpty(pixel.x,pixel.y+1) && Math.random() > 0.70 && (pixel.start + 204) < pixelTicks) {
3188
+ deletePixel(pixel.x,pixel.y)
3189
+ }
3190
+ else if (isEmpty(pixel.x,pixel.y-1) && Math.random() > 0.70 && (pixel.start + 204) < pixelTicks) {
3191
+ deletePixel(pixel.x,pixel.y)
3192
+ }
3193
+ },
3194
+ tool: function(pixel) {
3195
+ if (elements[pixel.element].id === elements.midas_touch.id) { return; }
3196
+ if (elements[pixel.element].id === elements.draught_of_midas.id) { return; }
3197
+ if (elements[pixel.element].id === elements.gas_of_midas.id) { return; }
3198
+ if (elements.midas_touch.reactions[pixel.element]) { return; }
3199
+ if (elements.draught_of_midas.reactions[pixel.element]) { return; }
3200
+ if (elements.gas_of_midas.reactions[pixel.element]) { return; }
3201
+ if (Math.random() < (elements[pixel.element].hardness || 0.25)) { return; }
3202
+ if (elements[pixel.element].state === "gas" && elements[pixel.element].id !== elements.mud.id && elements[pixel.element].id !== elements.noita_mud.id && Math.random() > 0.90) {
3203
+ changePixel(pixel,"gold_coin");
3204
+ pixel.color = pixelColorPick(pixel,["#ffdf5e","#ffe682"]);
3205
+ }
3206
+ else if (elements[pixel.element].movable && elements[pixel.element].id !== elements.mud.id && elements[pixel.element].id !== elements.noita_mud.id && Math.random() > 0.90) {
3207
+ changePixel(pixel,"gold_coin");
3208
+ }
3209
+ else if (elements[pixel.element].id !== elements.mud.id && elements[pixel.element].id !== elements.noita_mud.id && Math.random() > 0.90) {
3210
+ changePixel(pixel,"gold_coin");
3211
+ }
3212
+ },
3213
+ canPlace: true,
3214
+ reactions: {
3215
+ "gold":{}, "gold_coin":{}, "rose_gold":{}, "blue_gold":{}, "purple_gold":{}, "electrum":{},
3216
+ "molten_gold":{}, "pipe":{},
3217
+ "paper": { stain2:"#54803d" },
3218
+ "head": { elem2:"gold" },
3219
+ "body": { elem2:"gold" },
3220
+ "copper": { elem2:"rose_gold" },
3221
+ "gallium": { elem2:"blue_gold" },
3222
+ "molten_gallium": { elem2:"blue_gold" },
3223
+ "aluminum": { elem2:"purple_gold" },
3224
+ "silver": { elem2:"electrum" }
3225
+ },
3226
+ tempLow: -50,
3227
+ stateLow: "draught_of_midas",
3228
+ density: 997,
3229
+ state: "gas",
3230
+ category:"liquids",
3231
+ }
3232
+
3233
+ elements.noita_blood = {
3234
+ color: "#820000",
3235
+ name: "blood",
3236
+ behavior: behaviors.LIQUID,
3237
+ reactions: {
3238
+ },
3239
+ viscosity: 10,
3240
+ tempHigh: 150,
3241
+ stateHigh: "noita_steam",
3242
+ tempLow: -50,
3243
+ category:"liquids",
3244
+ state: "liquid",
3245
+ density: 1060,
3246
+ stain: 0.05,
3247
+ impure: true,
3248
+ blood: true,
3249
+ }
3250
+
3251
+ elements.worm_blood = {
3252
+ color: ["#a0a72f","#92982c","#bec538"],
3253
+ behavior: behaviors.LIQUID,
3254
+ reactions: {
3255
+ "freezing_liquid": { elem2: "worm_blood", chance:0.20 },
3256
+ "worm_pheremone": { elem1: "flummoxium", elem2: "flummoxium", chance:0.15 },
3257
+ },
3258
+ viscosity: 10,
3259
+ tempHigh: 150,
3260
+ stateHigh: "noita_steam",
3261
+ tempLow: -10,
3262
+ category:"liquids",
3263
+ state: "liquid",
3264
+ density: 1060,
3265
+ stain: 0.05,
3266
+ impure: true,
3267
+ blood: true,
3268
+ }
3269
+
3270
+ elements.soil = {
3271
+ color: ["#272618","#232018","#27282d","#36311e"],
3272
+ behavior: behaviors.POWDER,
3273
+ reactions: {
3274
+ },
3275
+ tick: function(pixel) {
3276
+ if (isEmpty(pixel.x,pixel.y-1) && Math.random() > 0.98 && (pixel.start + 100) < pixelTicks) {
3277
+ changePixel(pixel, "noita_grass")
3278
+ }
3279
+ },
3280
+ tempHigh: 1500,
3281
+ tempLow: -50,
3282
+ stateLow: "permafrost",
3283
+ category:"land",
3284
+ state: "solid",
3285
+ density: 1220,
3286
+ corrodible: true
3287
+ }
3288
+
3289
+ elements.noita_mud = {
3290
+ color: ["#464128","#686841","#5f5731","#3b3325"],
3291
+ name: "mud",
3292
+ behavior: behaviors.POWDER,
3293
+ reactions: {
3294
+ "toxic_sludge": { elem2:"swamp_water", chance:0.15 },
3295
+ },
3296
+ tempHigh: 1500,
3297
+ stateHigh: "molten_soil",
3298
+ onStateHigh: function(pixel) {
3299
+ releaseElement(pixel,"noita_steam");
3300
+ },
3301
+ tempLow: -50,
3302
+ stateLow: "permafrost",
3303
+ category: "land",
3304
+ state: "solid",
3305
+ density: 2000,
3306
+ stain: 0.025,
3307
+ impure: true,
3308
+ corrodible: true
3309
+ }
3310
+
3311
+ elements.whiskey = {
3312
+ color: "#e87106",
3313
+ behavior: behaviors.LIQUID,
3314
+ tick: function(pixel) {
3315
+ if (isEmpty(pixel.x+1,pixel.y) && Math.random() > 0.96 && (pixel.start + 25) < pixelTicks) {
3316
+ createPixel("whiskey_fumes",pixel.x+1,pixel.y)
3317
+ }
3318
+ else if (isEmpty(pixel.x-1,pixel.y) && Math.random() > 0.96 && (pixel.start + 25) < pixelTicks) {
3319
+ createPixel("whiskey_fumes",pixel.x-1,pixel.y)
3320
+ }
3321
+ else if (isEmpty(pixel.x,pixel.y+1) && Math.random() > 0.96 && (pixel.start + 25) < pixelTicks) {
3322
+ createPixel("whiskey_fumes",pixel.x,pixel.y+1)
3323
+ }
3324
+ else if (isEmpty(pixel.x,pixel.y-1) && Math.random() > 0.96 && (pixel.start + 25) < pixelTicks) {
3325
+ createPixel("whiskey_fumes",pixel.x,pixel.y-1)
3326
+ }
3327
+ doDefaults(pixel);
3328
+ },
3329
+ reactions: {
3330
+ "frog_meat": { elem1:"berserkium", chance:0.1 }
3331
+ },
3332
+ tempHigh: 150,
3333
+ stateHigh: "whiskey_fumes",
3334
+ tempLow: -100,
3335
+ burn: 100,
3336
+ burnTime: 3,
3337
+ fireColor: ["#80acf0","#96cdfe","#bee6d4"],
3338
+ category: "liquids",
3339
+ state: "liquid",
3340
+ density: 785.1,
3341
+ stain: -0.25,
3342
+ isFood: true,
3343
+ darkText: true,
3344
+ alias: "alcohol",
3345
+ impure: true,
3346
+ }
3347
+
3348
+ elements.whiskey_fumes = {
3349
+ color: ["#994d0a","#994d0a","#994d0a","#994d0a","#7f4004",],
3350
+ behavior: behaviors.GAS,
3351
+ tick: function(pixel) {
3352
+ if (isEmpty(pixel.x+1,pixel.y) && Math.random() > 0.75 && (pixel.start + 25) < pixelTicks) {
3353
+ deletePixel(pixel.x,pixel.y)
3354
+ }
3355
+ else if (isEmpty(pixel.x-1,pixel.y) && Math.random() > 0.75 && (pixel.start + 25) < pixelTicks) {
3356
+ deletePixel(pixel.x,pixel.y)
3357
+ }
3358
+ else if (isEmpty(pixel.x,pixel.y+1) && Math.random() > 0.75 && (pixel.start + 25) < pixelTicks) {
3359
+ deletePixel(pixel.x,pixel.y)
3360
+ }
3361
+ else if (isEmpty(pixel.x,pixel.y-1) && Math.random() > 0.75 && (pixel.start + 25) < pixelTicks) {
3362
+ deletePixel(pixel.x,pixel.y)
3363
+ }
3364
+ doNHeat(pixel)
3365
+ doNBurning(pixel)
3366
+ doDefaults(pixel);
3367
+ },
3368
+ burnable: true,
3369
+ nburnTime: 25,
3370
+ category: "gases",
3371
+ tempHigh: 1000,
3372
+ stateHigh: "noita_fire",
3373
+ tempLow: -45,
3374
+ burn: 100,
3375
+ burnTime: 1,
3376
+ fireColor: ["#00ffff","#00ffdd"],
3377
+ state: "gas",
3378
+ density: 2,
3379
+ alias: "gas"
3380
+ }
3381
+
3382
+ elements.beer = {
3383
+ color: "#bb7e03",
3384
+ behavior: behaviors.LIQUID,
3385
+ reactions: {
3386
+ },
3387
+ tempHigh: 150,
3388
+ tempLow: -100,
3389
+ burn: 100,
3390
+ burnTime: 3,
3391
+ fireColor: ["#80acf0","#96cdfe","#bee6d4"],
3392
+ category: "liquids",
3393
+ state: "liquid",
3394
+ density: 785.1,
3395
+ stain: -0.25,
3396
+ isFood: true,
3397
+ darkText: true,
3398
+ alias: "alcohol",
3399
+ impure: true
3400
+ }
3401
+
3402
+ elements.concentrated_mana = {
3403
+ color: "#0cffff",
3404
+ behavior: behaviors.LIQUID,
3405
+ onCollide: function(pixel1,pixel2) {
3406
+ if (elements[pixel2.element].meltableMetal === true && Math.random() < 0.25) {
3407
+ changePixel(pixel2,"noita_steam")
3408
+ }
3409
+ },
3410
+ reactions: {
3411
+ "noita_water": { elem2:"concentrated_mana", chance:0.25 },
3412
+ "noita_gold": { elem2:"noita_steam", chance:0.25 },
3413
+ "noita_glass": { elem2:"noita_steam", chance:0.25 },
3414
+ "glass_broken": { elem2:"noita_steam", chance:0.25 },
3415
+ "teleportatium": { elem2:"noita_fire", chance:0.10 },
3416
+ "unstable_teleportatium": { elem2:"noita_fire", chance:0.10 },
3417
+ "diminution": { elem1:"noita_steam", elem2:"noita_steam", chance:0.60 },
3418
+ },
3419
+ tempHigh: 150,
3420
+ tempLow: -100,
3421
+ category: "liquids",
3422
+ state: "liquid",
3423
+ density: 2412,
3424
+ stain: -0.05,
3425
+ isFood: true,
3426
+ darkText: true,
3427
+ impure: true
3428
+ }
3429
+
3430
+ elements.berserkium = {
3431
+ color: "#ff989b",
3432
+ behavior: behaviors.LIQUID,
3433
+ reactions: {
3434
+ "flummoxium": { elem1:"pheremone", elem2:"pheremone", chance:0.25 }
3435
+ },
3436
+ tempHigh: 150,
3437
+ tempLow: -113.88,
3438
+ category: "liquids",
3439
+ state: "liquid",
3440
+ density: 2412,
3441
+ stain: -0.05,
3442
+ isFood: true,
3443
+ darkText: true,
3444
+ impure: true
3445
+ }
3446
+
3447
+ elements.flummoxium = {
3448
+ color: ["#8c83c2","#ed7cc2","#8ce4bb","#f4dd5a","#f47c61"],
3449
+ behavior: behaviors.LIQUID,
3450
+ reactions: {
3451
+ "berserkium": { elem1:"pheremone", elem2:"pheremone", chance:0.25 },
3452
+ "noita_brass": { elem1:"levitatium", elem2:"levitatium", chance:0.25 },
3453
+ "noita_copper": { elem1:"levitatium", elem2:"levitatium", chance:0.25 },
3454
+ "noita_diamond": { elem1:"levitatium", elem2:"levitatium", chance:0.25 },
3455
+ "noita_gold": { elem1:"levitatium", elem2:"levitatium", chance:0.25 },
3456
+ "metal_dust": { elem1:"levitatium", elem2:"levitatium", chance:0.25 },
3457
+ "noita_silver": { elem1:"levitatium", elem2:"levitatium", chance:0.25 },
3458
+ "noita_steel": { elem1:"levitatium", elem2:"levitatium", chance:0.25 },
3459
+ "toxic_gold": { elem1:"levitatium", elem2:"levitatium", chance:0.25 },
3460
+ },
3461
+ tempHigh: 150,
3462
+ tempLow: -10,
3463
+ category: "liquids",
3464
+ state: "liquid",
3465
+ density: 1200,
3466
+ stain: -0.05,
3467
+ isFood: true,
3468
+ darkText: true,
3469
+ impure: true
3470
+ }
3471
+
3472
+ elements.diminution = {
3473
+ color: ["#0cce2c","#0fdb2f","#19e738",],
3474
+ behavior: behaviors.LIQUID,
3475
+ tick: function(pixel) {
3476
+ var coords = rectCoords(pixel.x-1,pixel.y-1,pixel.x+1,pixel.y+1);
3477
+ for (var i = 0; i < coords.length; i++) {
3478
+ var x = coords[i].x;
3479
+ var y = coords[i].y;
3480
+ if (!isEmpty(x,y,true)) {
3481
+ if (!outOfBounds(x,y) && (elements[pixelMap[x][y].element].fungus === true)) {
3482
+ changePixel(pixelMap[x][y],"noita_sand")
3483
+ }
3484
+ }
3485
+ }
3486
+ },
3487
+ reactions: {
3488
+ "berserkium": { elem2:"noita_water", chance:0.60 },
3489
+ "mycelium": { elem2:"soil" },
3490
+ "levitatium": { elem1:"toxic_sludge", elem2:"toxic_sludge", chance:0.60 },
3491
+ "ambrosia": { elem1:"noita_smoke", elem2:"noita_acid", chance:0.80 },
3492
+ "noita_gold": { elem2:"noita_silver" },
3493
+ "noita_molten_gold": { elem2:"noita_molten_silver" },
3494
+ "noita_diamond": { elem1:"noita_steam", elem2:"toxic_sludge" },
3495
+ "noita_salt": { elem2:"noita_smoke" },
3496
+ "flammable_gas": { elem2:"diminution" },
3497
+ },
3498
+ tempHigh: 150,
3499
+ stateHigh: "diminution_cloud",
3500
+ tempLow: -10,
3501
+ category: "liquids",
3502
+ state: "liquid",
3503
+ density: 1872,
3504
+ stain: -0.05,
3505
+ isFood: true,
3506
+ darkText: true,
3507
+ impure: true
3508
+ }
3509
+
3510
+ elements.diminution_cloud = {
3511
+ color: ["#1cf53b","#0fdc2f","#12e932","#0f961f","#15a425"],
3512
+ tick: function(pixel) {
3513
+ if (isEmpty(pixel.x+1,pixel.y) && Math.random() > 0.70 && (pixel.start + 125) < pixelTicks) {
3514
+ deletePixel(pixel.x,pixel.y)
3515
+ }
3516
+ else if (isEmpty(pixel.x-1,pixel.y) && Math.random() > 0.70 && (pixel.start + 125) < pixelTicks) {
3517
+ deletePixel(pixel.x,pixel.y)
3518
+ }
3519
+ else if (isEmpty(pixel.x,pixel.y+1) && Math.random() > 0.70 && (pixel.start + 125) < pixelTicks) {
3520
+ deletePixel(pixel.x,pixel.y)
3521
+ }
3522
+ else if (isEmpty(pixel.x,pixel.y-1) && Math.random() > 0.70 && (pixel.start + 125) < pixelTicks) {
3523
+ deletePixel(pixel.x,pixel.y)
3524
+ }
3525
+ doDefaults(pixel);
3526
+ },
3527
+ behavior: behaviors.GAS,
3528
+ tempLow: -10,
3529
+ stateLow: "diminution",
3530
+ category: "gases",
3531
+ state: "gas",
3532
+ density: 1000,
3533
+ isFood: true,
3534
+ darkText: true,
3535
+ }
3536
+
3537
+ elements.healthium = {
3538
+ color: "#d8ffba",
3539
+ behavior: behaviors.LIQUID,
3540
+ reactions: {
3541
+ "noita_grass": { elem2:"holy_grass", elem1: null, chance:0.80 },
3542
+ "purifying_powder": { elem1:"noita_gunpowder", elem2:"noita_gunpowder", chance:0.80 },
3543
+ "lava": { elem1:"healium", chance:0.70 },
3544
+ },
3545
+ tempHigh: 150,
3546
+ stateHigh: "healium",
3547
+ tempLow: -10,
3548
+ category: "liquids",
3549
+ state: "liquid",
3550
+ density: 1872,
3551
+ stain: -0.05,
3552
+ isFood: true,
3553
+ darkText: true,
3554
+ water: true,
3555
+ }
3556
+
3557
+ elements.healium = {
3558
+ color: ["#adff99","#adff99","#adff99","#98e786","#98e786"],
3559
+ tick: function(pixel) {
3560
+ if (isEmpty(pixel.x+1,pixel.y) && Math.random() > 0.70 && (pixel.start + 125) < pixelTicks) {
3561
+ deletePixel(pixel.x,pixel.y)
3562
+ }
3563
+ else if (isEmpty(pixel.x-1,pixel.y) && Math.random() > 0.70 && (pixel.start + 125) < pixelTicks) {
3564
+ deletePixel(pixel.x,pixel.y)
3565
+ }
3566
+ else if (isEmpty(pixel.x,pixel.y+1) && Math.random() > 0.70 && (pixel.start + 125) < pixelTicks) {
3567
+ deletePixel(pixel.x,pixel.y)
3568
+ }
3569
+ else if (isEmpty(pixel.x,pixel.y-1) && Math.random() > 0.70 && (pixel.start + 125) < pixelTicks) {
3570
+ deletePixel(pixel.x,pixel.y)
3571
+ }
3572
+ doDefaults(pixel);
3573
+ },
3574
+ behavior: behaviors.GAS,
3575
+ tempLow: -10,
3576
+ stateLow: "healthium",
3577
+ category: "gases",
3578
+ state: "gas",
3579
+ density: 1000,
3580
+ isFood: true,
3581
+ darkText: true,
3582
+ }
3583
+
3584
+ elements.teleportatium = {
3585
+ color: "#aaffff",
3586
+ behavior: behaviors.LIQUID,
3587
+ reactions: {
3588
+ "noita_copper": { elem1:"noita_smoke", elem2:"noita_brass", chance:0.50 },
3589
+ "noita_silver": { elem1:"teleportatium_cloud", elem2:"teleportatium_cloud", chance:0.1, },
3590
+ "whiskey": { elem1:"unstable_teleportatium", chance:0.21 },
3591
+ "concentrated_mana": { elem1:"noita_fire", chance:0.10 },
3592
+ "lava": { elem1:"freezing_vapour", chance:0.70 },
3593
+ },
3594
+ tempHigh: 150,
3595
+ stateHigh: "teleportatium_cloud",
3596
+ tempLow: -10,
3597
+ category: "liquids",
3598
+ state: "liquid",
3599
+ density: 1872,
3600
+ stain: -0.05,
3601
+ isFood: true,
3602
+ darkText: true,
3603
+ impure: true
3604
+ }
3605
+
3606
+ elements.teleportatium_cloud = {
3607
+ color: ["#74bcda","#74bcda","#74bcda","#63a2b9","#63a2b9"],
3608
+ tick: function(pixel) {
3609
+ if (isEmpty(pixel.x+1,pixel.y) && Math.random() > 0.70 && (pixel.start + 125) < pixelTicks) {
3610
+ deletePixel(pixel.x,pixel.y)
3611
+ }
3612
+ else if (isEmpty(pixel.x-1,pixel.y) && Math.random() > 0.70 && (pixel.start + 125) < pixelTicks) {
3613
+ deletePixel(pixel.x,pixel.y)
3614
+ }
3615
+ else if (isEmpty(pixel.x,pixel.y+1) && Math.random() > 0.70 && (pixel.start + 125) < pixelTicks) {
3616
+ deletePixel(pixel.x,pixel.y)
3617
+ }
3618
+ else if (isEmpty(pixel.x,pixel.y-1) && Math.random() > 0.70 && (pixel.start + 125) < pixelTicks) {
3619
+ deletePixel(pixel.x,pixel.y)
3620
+ }
3621
+ doDefaults(pixel);
3622
+ },
3623
+ behavior: behaviors.GAS,
3624
+ tempLow: -10,
3625
+ category: "gases",
3626
+ state: "gas",
3627
+ density: 2000,
3628
+ isFood: true,
3629
+ darkText: true,
3630
+ }
3631
+
3632
+ elements.unstable_teleportatium = {
3633
+ color: "#3fffff",
3634
+ behavior: behaviors.LIQUID,
3635
+ tick: function(pixel) {
3636
+ var coords = rectCoords(pixel.x-1,pixel.y-1,pixel.x+1,pixel.y+1);
3637
+ for (var i = 0; i < coords.length; i++) {
3638
+ var x = coords[i].x;
3639
+ var y = coords[i].y;
3640
+ if (!isEmpty(x,y,true)) {
3641
+ if (!outOfBounds(x,y) && (elements[pixelMap[x][y].element].slime === true)) {
3642
+ changePixel(pixel,"teleportatium")
3643
+ changePixel(pixelMap[x][y],"teleportatium")
3644
+ }
3645
+ }
3646
+ }
3647
+ },
3648
+ reactions: {
3649
+ "noita_brass": { elem1:"noita_smoke", elem2:"metal_dust", chance:0.50 },
3650
+ "flummoxium": { elem1:"noita_smoke", elem2:"guiding_powder" },
3651
+ "concentrated_mana": { elem1:"noita_fire", chance:0.10 },
3652
+ "lava": { elem1:"freezing_vapour", chance:0.70 },
3653
+ },
3654
+ tempHigh: 150,
3655
+ stateHigh: "teleportatium_cloud",
3656
+ tempLow: -10,
3657
+ category: "liquids",
3658
+ state: "liquid",
3659
+ density: 1872,
3660
+ stain: -0.05,
3661
+ isFood: true,
3662
+ darkText: true,
3663
+ impure: true
3664
+ }
3665
+
3666
+ elements.toxic_sludge = {
3667
+ color: "#cbff11",
3668
+ behavior: behaviors.LIQUID,
3669
+ reactions: {
3670
+ "brine": { elem1:"noita_water", chance:0.20 },
3671
+ "water": { elem1:"noita_water", chance:0.13 },
3672
+ "noita_water": { elem1:"noita_water", chance:0.13 },
3673
+ "noita_mud": { elem1:"swamp_water", chance:0.15 },
3674
+ },
3675
+ viscosity: 5,
3676
+ tempLow: -10,
3677
+ category: "liquids",
3678
+ state: "liquid",
3679
+ density: 1872,
3680
+ stain: -0.05,
3681
+ isFood: true,
3682
+ darkText: true,
3683
+ impure: true,
3684
+ corrodible: true,
3685
+ soluble: true,
3686
+ }
3687
+
3688
+ elements.levitatium = {
3689
+ color: "#f5f5f5",
3690
+ behavior: behaviors.LIQUID,
3691
+ reactions: {
3692
+ "diminution": { elem1:"toxic_sludge", elem2:"toxic_sludge", chance:0.25 },
3693
+ "acceleratium": { elem1:"hastium", elem2:"hastium", chance:0.25 },
3694
+ },
3695
+ tempHigh: 150,
3696
+ tempLow: -10,
3697
+ category: "liquids",
3698
+ state: "liquid",
3699
+ density: 1200,
3700
+ stain: -0.05,
3701
+ isFood: true,
3702
+ darkText: true,
3703
+ impure: true
3704
+ }
3705
+
3706
+ elements.pheremone = {
3707
+ color: "#ff4072",
3708
+ behavior: behaviors.LIQUID,
3709
+ reactions: {
3710
+ },
3711
+ tempHigh: 150,
3712
+ tempLow: -10,
3713
+ category: "liquids",
3714
+ state: "liquid",
3715
+ density: 3513,
3716
+ stain: -0.05,
3717
+ isFood: true,
3718
+ darkText: true,
3719
+ water: true,
3720
+ impure: true
3721
+ }
3722
+
3723
+ // substances above
3724
+ // creatures below
3725
+
3726
+ elements.noita = {
3727
+ color: ["#2b2429","#151515"],
3728
+ category: "life",
3729
+ properties: {
3730
+ dead: false,
3731
+ dir: 1,
3732
+ panic: 0
3733
+ },
3734
+ onPlace: function(pixel) {
3735
+ if (isEmpty(pixel.x, pixel.y+1)) {
3736
+ createPixel("noita_body", pixel.x, pixel.y+1);
3737
+ var color = pixel.color;
3738
+ changePixel(pixel,"noita_head");
3739
+ pixel.color = color;
3740
+ }
3741
+ else if (isEmpty(pixel.x, pixel.y-1)) {
3742
+ createPixel("noita_head", pixel.x, pixel.y-1);
3743
+ pixelMap[pixel.x][pixel.y-1].color = pixel.color;
3744
+ changePixel(pixel,"noita_body");
3745
+ }
3746
+ else {
3747
+ deletePixel(pixel.x, pixel.y);
3748
+ }
3749
+ },
3750
+ reactions: {
3751
+ },
3752
+ related: ["noita_body","noita_head"],
3753
+ cooldown: defaultCooldown,
3754
+ forceSaveColor: true,
3755
+ blood: "noita_blood",
3756
+ living: true,
3757
+ }
3758
+
3759
+ elements.noita_body = {
3760
+ color: ["#996e98","#6a406a","#d69f34","#996e98","#6a406a"],
3761
+ category: "life",
3762
+ hidden: true,
3763
+ density: 6000,
3764
+ state: "solid",
3765
+ conduct: .05,
3766
+ tempHigh: 150,
3767
+ stateHigh: "cooked_meat",
3768
+ tempLow: -30,
3769
+ stateLow: "noita_meat",
3770
+ burn: 10,
3771
+ burnTime: 250,
3772
+ burnInto: "cooked_meat",
3773
+ breakInto: "noita_meat",
3774
+ forceSaveColor: true,
3775
+ pickElement: "noita",
3776
+ reactions: {
3777
+ },
3778
+ properties: {
3779
+ maxhp: 10000,
3780
+ hp: 10000,
3781
+ dir: 1,
3782
+ panic: 0
3783
+ },
3784
+ tick: function(pixel) {
3785
+ if (tryMove(pixel, pixel.x, pixel.y+1)) { // Fall
3786
+ if (!isEmpty(pixel.x, pixel.y-2, true)) { // Drag head down
3787
+ var headpixel = pixelMap[pixel.x][pixel.y-2];
3788
+ if (headpixel.element === "noita_head") {
3789
+ if (isEmpty(pixel.x, pixel.y-1)) {
3790
+ movePixel(pixelMap[pixel.x][pixel.y-2], pixel.x, pixel.y-1);
3791
+ }
3792
+ else {
3793
+ swapPixels(pixelMap[pixel.x][pixel.y-2], pixelMap[pixel.x][pixel.y-1]);
3794
+ }
3795
+ }
3796
+ }
3797
+ }
3798
+ doHeat(pixel);
3799
+ doBurning(pixel);
3800
+ doElectricity(pixel);
3801
+ if (pixel.hp < 1) {
3802
+ pixel.element = "noita_meat"
3803
+ if (pixel.head) {
3804
+ pixel.head.element = "noita_meat"
3805
+ }
3806
+ return
3807
+ }
3808
+
3809
+ // Find the head
3810
+ if (!isEmpty(pixel.x, pixel.y-1, true) && pixelMap[pixel.x][pixel.y-1].element == "noita_head") {
3811
+ pixel.head = pixelMap[pixel.x][pixel.y-1];
3812
+ if (pixel.head.hp < 1) { // If head is dead, kill body
3813
+ pixel.hp = pixel.head.hp;
3814
+ }
3815
+ else if (pixel.head.panic > 0) {
3816
+ pixel.panic = pixel.head.panic;
3817
+ delete pixel.head.panic;
3818
+ }
3819
+ }
3820
+ else { pixel.head = null }
3821
+ if (pixel.head && Math.random() < 0.25) {
3822
+ let y = Math.random() < 0.5 ? 0 : -1;
3823
+ for (let x = 1; x < 10; x++) {
3824
+ let x2 = pixel.x+(x*pixel.dir);
3825
+ let y2 = pixel.y+y;
3826
+ if (!isEmpty(x2,y2,true)) {
3827
+ let seenPixel = pixelMap[x2][y2];
3828
+ if (elements.human.reactions[seenPixel.element] && elements.human.reactions[seenPixel.element].attr1 && elements.human.reactions[seenPixel.element].attr1.panic) {
3829
+ pixel.panic += elements.human.reactions[seenPixel.element].attr1.panic;
3830
+ pixel.dir *= -1;
3831
+ break;
3832
+ }
3833
+ else if (seenPixel.dead || seenPixel.temp > 200) {
3834
+ pixel.panic += 5;
3835
+ pixel.dir *= -1;
3836
+ if (seenPixel.panic) delete seenPixel.panic;
3837
+ break;
3838
+ }
3839
+ }
3840
+ }
3841
+ }
3842
+ if (pixel.burning) {
3843
+ pixel.panic += 0.1;
3844
+ if (head && pixelTicks-pixel.burnStart > 240) {
3845
+ pixel.color = head.color;
3846
+ }
3847
+ }
3848
+ if (pixel.charge) {
3849
+ pixel.panic += 1;
3850
+ }
3851
+ else if (pixel.panic > 0) {
3852
+ pixel.panic -= 0.1;
3853
+ if (pixel.panic < 0) { pixel.panic = 0; }
3854
+ else if (pixel.panic > 50) { pixel.panic = 50; }
3855
+ }
3856
+
3857
+ if (isEmpty(pixel.x, pixel.y-1)) {
3858
+ // create blood if decapitated 10% chance
3859
+ if (Math.random() < 0.1 && !pixel.charge) {
3860
+ createPixel("noita_blood", pixel.x, pixel.y-1);
3861
+ // set dead to true 15% chance
3862
+ if (Math.random() < 0.15) {
3863
+ pixel.dead = pixelTicks;
3864
+ }
3865
+ }
3866
+ }
3867
+ else if (pixel.head === null) { return }
3868
+ else if (Math.random() < 0.1*(isEmpty(pixel.x, pixel.y+1) ? 1 : pixel.panic+1)) { // Move 10% chance
3869
+ var movesToTry = [
3870
+ [1*pixel.dir,0],
3871
+ [1*pixel.dir,-1],
3872
+ ];
3873
+ let moved = false;
3874
+ // While movesToTry is not empty, tryMove(pixel, x, y) with a random move, then remove it. if tryMove returns true, break.
3875
+ while (movesToTry.length > 0) {
3876
+ var move = movesToTry.splice(Math.floor(Math.random() * movesToTry.length), 1)[0];
3877
+ if (isEmpty(pixel.x+move[0], pixel.y+move[1]-1)) {
3878
+ var origx = pixel.x+move[0];
3879
+ var origy = pixel.y+move[1];
3880
+ if (tryMove(pixel, pixel.x+move[0], pixel.y+move[1]) && pixel.x===origx && pixel.y===origy) {
3881
+ movePixel(pixel.head, pixel.head.x+move[0], pixel.head.y+move[1]);
3882
+ moved = true;
3883
+ break;
3884
+ }
3885
+ }
3886
+ }
3887
+ // 15% chance to change direction
3888
+ if (Math.random() < 0.10 || !moved) {
3889
+ pixel.dir *= -1;
3890
+ }
3891
+
3892
+ }
3893
+ if (pixel.temp > 150 && Math.random() > 0.75) {
3894
+ DoDamage(pixel,"fire",10)
3895
+ pixel.panic++
3896
+ }
3897
+ if (pixel.temp < -25) {
3898
+ DoDamage(pixel,"ice",10)
3899
+ pixel.panic++
3900
+ }
3901
+ DoNoitaHumanoid(pixel)
3902
+ },
3903
+ onCollide: function(pixel,damagePixel) {
3904
+ DoNoitaStaining(pixel,damagePixel)
3905
+ },
3906
+ onBreak: function(pixel) {
3907
+ releaseElement(pixel,elements[pixel.element].blood,4);
3908
+ },
3909
+ blood: "noita_blood",
3910
+ living: true,
3911
+ }
3912
+
3913
+ elements.noita_head = {
3914
+ color: ["#996e98","#6a406a","#996e98","#6a406a","#2b2429","#151515","#2b2429","#151515","#2b2429","#151515","#2b2429","#151515","#2b2429","#151515","#2b2429","#151515"],
3915
+ category: "life",
3916
+ hidden: true,
3917
+ density: 6000,
3918
+ state: "solid",
3919
+ conduct: .05,
3920
+ tempHigh: 150,
3921
+ stateHigh: "noita_cooked_meat",
3922
+ tempLow: -30,
3923
+ stateLow: "noita_meat",
3924
+ burn: 10,
3925
+ burnTime: 250,
3926
+ burnInto: "cooked_meat",
3927
+ breakInto: "noita_meat",
3928
+ forceSaveColor: true,
3929
+ pickElement: "noita",
3930
+ reactions: {
3931
+ },
3932
+ properties: {
3933
+ hp: 10000,
3934
+ maxhp: 10000,
3935
+ },
3936
+ tick: function(pixel) {
3937
+ doHeat(pixel);
3938
+ doBurning(pixel);
3939
+ doElectricity(pixel);
3940
+ if (pixel.hp < 1) {
3941
+ pixel.element = "noita_meat"
3942
+ return
3943
+ }
3944
+
3945
+ // Find the body
3946
+ if (!isEmpty(pixel.x, pixel.y+1, true) && pixelMap[pixel.x][pixel.y+1].element == "noita_body") {
3947
+ var body = pixelMap[pixel.x][pixel.y+1];
3948
+ if (body.hp !== pixel.hp) {
3949
+ pixel.hp = body.hp;
3950
+ }
3951
+ }
3952
+ else { var body = null }
3953
+
3954
+ // check for eating food
3955
+ if (body && !pixel.dead && Math.random() < 0.1) {
3956
+ shuffleArray(interactCoordsShuffle);
3957
+ for (var i = 0; i < interactCoordsShuffle.length; i++) {
3958
+ var x = pixel.x+interactCoordsShuffle[i][0];
3959
+ var y = pixel.y+interactCoordsShuffle[i][1];
3960
+ if (!isEmpty(x,y,true) && elements[pixelMap[x][y].element].isFood && pixelMap[x][y].panic === undefined) {
3961
+ deletePixel(x,y);
3962
+ break;
3963
+ }
3964
+ }
3965
+ }
3966
+
3967
+ if (tryMove(pixel, pixel.x, pixel.y+1)) {
3968
+ // create blood if severed 10% chance
3969
+ if (isEmpty(pixel.x, pixel.y+1) && !pixel.dead && Math.random() < 0.1 && !pixel.charge) {
3970
+ createPixel("noita_blood", pixel.x, pixel.y+1);
3971
+ // set dead to true 15% chance
3972
+ if (Math.random() < 0.15) {
3973
+ pixel.dead = pixelTicks;
3974
+ }
3975
+ }
3976
+ }
3977
+ // homeostasis
3978
+ if (pixel.temp > 37) { pixel.temp -= 1; }
3979
+ else if (pixel.temp < 37) { pixel.temp += 1; }
3980
+ },
3981
+ onChange: function(pixel) {
3982
+ for (var i = 0; i < adjacentCoords.length; i++) {
3983
+ var coord = adjacentCoords[i];
3984
+ var x = pixel.x+coord[0];
3985
+ var y = pixel.y+coord[1];
3986
+ if (!isEmpty(x,y,true) && pixelMap[x][y].panic !== undefined) {
3987
+ pixelMap[x][y].panic += 20;
3988
+ }
3989
+ }
3990
+ },
3991
+ onDelete: function(pixel) {
3992
+ for (var i = 0; i < adjacentCoords.length; i++) {
3993
+ var coord = adjacentCoords[i];
3994
+ var x = pixel.x+coord[0];
3995
+ var y = pixel.y+coord[1];
3996
+ if (!isEmpty(x,y,true) && pixelMap[x][y].panic !== undefined) {
3997
+ pixelMap[x][y].panic += 20;
3998
+ }
3999
+ }
4000
+ },
4001
+ onBreak: function(pixel) {
4002
+ releaseElement(pixel,elements[pixel.element].blood,4);
4003
+ },
4004
+ blood: "noita_blood",
4005
+ living: true,
4006
+ }
4007
+
4008
+ elements.lammas = {
4009
+ color: ["#cbcbcb","#ebebeb","#fffffe","#cbcbcb","#ebebeb","#fffffe","#ffcf93","#ffb373","#cbcbcb","#ebebeb","#fffffe"],
4010
+ properties: {
4011
+ maxhp: 250,
4012
+ hp: 250,
4013
+ dir: 1,
4014
+ panic: 0,
4015
+ },
4016
+ tick: function(pixel) {
4017
+ if (tryMove(pixel, pixel.x, pixel.y+1)) {} // Fall
4018
+ doDefaults(pixel);
4019
+ if (pixel.hp < 1) {
4020
+ pixel.element = "helpless_meat"
4021
+ return
4022
+ }
4023
+ if (pixel.panic > 0) {
4024
+ pixel.panic -= 0.1;
4025
+ if (pixel.panic < 0) { pixel.panic = 0; }
4026
+ }
4027
+ if (Math.random() < 0.1*(isEmpty(pixel.x, pixel.y+1) ? 1 : pixel.panic+1)) { // Move 10% chance
4028
+ var movesToTry = [
4029
+ [1*pixel.dir,0],
4030
+ [1*pixel.dir,-1],
4031
+ ];
4032
+ let moved = false;
4033
+ // While movesToTry is not empty, tryMove(pixel, x, y) with a random move, then remove it. if tryMove returns true, break.
4034
+ while (movesToTry.length > 0) {
4035
+ var move = movesToTry.splice(Math.floor(Math.random() * movesToTry.length), 1)[0];
4036
+ if (isEmpty(pixel.x+move[0], pixel.y+move[1])) {
4037
+ var origx = pixel.x+move[0];
4038
+ var origy = pixel.y+move[1];
4039
+ if (tryMove(pixel, pixel.x+move[0], pixel.y+move[1]) && pixel.x===origx && pixel.y===origy) {
4040
+ moved = true;
4041
+ break;
4042
+ }
4043
+ }
4044
+ else if (!isEmpty(pixel.x+move[0], pixel.y+move[1], true)) {
4045
+ var hitPixel = pixelMap[pixel.x+move[0]][pixel.y+move[1]];
4046
+ if (hitPixel.element === "lammas" && hitPixel.panic < pixel.panic) {
4047
+ hitPixel.panic = pixel.panic;
4048
+ }
4049
+ }
4050
+ }
4051
+ // 15% chance to change direction
4052
+ if (Math.random() < 0.15 || !moved) {
4053
+ pixel.dir *= -1;
4054
+ }
4055
+
4056
+ if (pixel.temp > 150 && Math.random() > 0.75) {
4057
+ DoDamage(pixel,"fire",10)
4058
+ pixel.panic++
4059
+ }
4060
+ if (pixel.temp < -25) {
4061
+ DoDamage(pixel,"ice",10)
4062
+ pixel.panic++
4063
+ }
4064
+ DoNoitaCreature(pixel)
4065
+ }
4066
+
4067
+ },
4068
+ onCollide: function(pixel,damagePixel) {
4069
+ DoNoitaStaining(pixel,damagePixel)
4070
+ },
4071
+ onBreak: function(pixel) {
4072
+ releaseElement(pixel,elements[pixel.element].blood,4);
4073
+ },
4074
+ reactions: {
4075
+ },
4076
+ category: "life",
4077
+ tempLow: -50,
4078
+ stateLow: "helpless_meat",
4079
+ tempHigh: 200,
4080
+ stateHigh: "helpless_meat",
4081
+ breakInto: "helpless_meat",
4082
+ breakIntoColor: ["#cbcbcb","#ebebeb","#fffffe","#cbcbcb","#ebebeb","#fffffe","#ffcf93","#ffb373","#cbcbcb","#ebebeb","#fffffe"],
4083
+ blood: "noita_blood",
4084
+ burn:80,
4085
+ burnTime:150,
4086
+ state: "solid",
4087
+ density: 6000,
4088
+ conduct: 0.25,
4089
+ living: true,
4090
+ }
4091
+
4092
+ elements.evakas = {
4093
+ properties: {
4094
+ maxhp: 250,
4095
+ hp: 250,
4096
+ dir: 1,
4097
+ panic: 0,
4098
+ },
4099
+ tick: function(pixel) {
4100
+ if (tryMove(pixel, pixel.x, pixel.y+1)) {} // Fall
4101
+ doDefaults(pixel);
4102
+ if (pixel.hp < 1) {
4103
+ pixel.element = "helpless_meat"
4104
+ return
4105
+ }
4106
+ if (pixel.panic > 0) {
4107
+ pixel.panic -= 0.1;
4108
+ if (pixel.panic < 0) { pixel.panic = 0; }
4109
+ }
4110
+ if (Math.random() < 0.1*((!isEmpty(pixel.x, pixel.y+1,true) && !outOfBounds(pixel.x, pixel.y+1,true) && elements[pixelMap[pixel.x][pixel.y+1].element].id === elements.noita_water.id) ? 1 : pixel.panic+1)) { // Move 10% chance
4111
+ var movesToTry = [
4112
+ [1*pixel.dir,1],
4113
+ [1*pixel.dir,-1],
4114
+ ];
4115
+ let moved = false;
4116
+ while (movesToTry.length > 0) {
4117
+ var move = movesToTry.splice(Math.floor(Math.random() * movesToTry.length), 1)[0];
4118
+ if (!isEmpty(pixel.x+move[0], pixel.y+move[1],true) && !outOfBounds(pixel.x+move[0], pixel.y+move[1],true) && elements[pixelMap[pixel.x+move[0]][pixel.y+move[1]].element].id === elements.noita_water.id) {
4119
+ var origx = pixel.x+move[0];
4120
+ var origy = pixel.y+move[1];
4121
+ swapPixels(pixel, pixelMap[pixel.x+move[0]][pixel.y+move[1]])
4122
+ if (pixel.x===origx && pixel.y===origy) {
4123
+ moved = true;
4124
+ break;
4125
+ }
4126
+ }
4127
+ else if (isEmpty(pixel.x+move[0], pixel.y+move[1]) || outOfBounds(pixel.x+move[0], pixel.y+move[1]) || elements[pixelMap[pixel.x+move[0]][pixel.y+move[1]].element].id !== elements.noita_water.id) {
4128
+ }
4129
+ else if (!isEmpty(pixel.x+move[0], pixel.y+move[1], true)) {
4130
+ var hitPixel = pixelMap[pixel.x+move[0]][pixel.y+move[1]];
4131
+ if (hitPixel.element === "evakas" && hitPixel.panic < pixel.panic) {
4132
+ hitPixel.panic = pixel.panic;
4133
+ }
4134
+ }
4135
+ }
4136
+ // 15% chance to change direction
4137
+ if (Math.random() < 0.15 || !moved || outOfBounds(pixel.x+1, pixel.y) || outOfBounds(pixel.x-1, pixel.y)) {
4138
+ pixel.dir *= -1;
4139
+ }
4140
+ if (pixel.temp > 150 && Math.random() > 0.75) {
4141
+ DoDamage(pixel,"fire",10)
4142
+ pixel.panic++
4143
+ }
4144
+ if (pixel.temp < -25) {
4145
+ DoDamage(pixel,"ice",10)
4146
+ pixel.panic++
4147
+ }
4148
+ DoNoitaCreature(pixel)
4149
+ }
4150
+
4151
+ },
4152
+ onCollide: function(pixel,damagePixel) {
4153
+ DoNoitaStaining(pixel,damagePixel)
4154
+ },
4155
+ onBreak: function(pixel) {
4156
+ releaseElement(pixel,elements[pixel.element].blood,4);
4157
+ },
4158
+ color: ["#313540","#4e5b95","#4e5b95","#4c89ab"],
4159
+ name:"eväkäs",
4160
+ reactions: {
4161
+ },
4162
+ tempHigh: 200,
4163
+ tempLow: -50,
4164
+ stateLow: "helpless_meat",
4165
+ category:"life",
4166
+ stateHigh: "helpless_meat",
4167
+ breakInto: "helpless_meat",
4168
+ breakIntoColor: ["#313540","#4e5b95","#4e5b95","#4c89ab"],
4169
+ blood: "noita_blood",
4170
+ burn:20,
4171
+ burnTime:200,
4172
+ state: "solid",
4173
+ density: 1080,
4174
+ conduct: 0.2,
4175
+ living: true,
4176
+ }
4177
+
4178
+ elements.hamis = {
4179
+ color: ["#52316f","#52316f","#beda65","#52316f","#52316f","#beda65","#52316f","#52316f","#beda65","#2d1b3d","#2d1b3d","#2d1b3d","#2d1b3d","#634c7e"],
4180
+ name: "hämis",
4181
+ properties: {
4182
+ maxhp: 275,
4183
+ hp: 275,
4184
+ dir: 1,
4185
+ panic: 0,
4186
+ },
4187
+ tick: function(pixel) {
4188
+ if (tryMove(pixel, pixel.x, pixel.y+1)) {} // Fall
4189
+ doDefaults(pixel);
4190
+ if (pixel.hp < 1) {
4191
+ pixel.element = "noita_meat"
4192
+ return
4193
+ }
4194
+ if (pixel.panic > 0) {
4195
+ pixel.panic -= 0.1;
4196
+ if (pixel.panic < 0) { pixel.panic = 0; }
4197
+ }
4198
+ if (Math.random() < 0.1*(isEmpty(pixel.x, pixel.y+1) ? 1 : pixel.panic+1)) { // Move 10% chance
4199
+ var movesToTry = [
4200
+ [1*pixel.dir,0],
4201
+ [1*pixel.dir,-1],
4202
+ ];
4203
+ let moved = false;
4204
+ // While movesToTry is not empty, tryMove(pixel, x, y) with a random move, then remove it. if tryMove returns true, break.
4205
+ while (movesToTry.length > 0) {
4206
+ var move = movesToTry.splice(Math.floor(Math.random() * movesToTry.length), 1)[0];
4207
+ if (isEmpty(pixel.x+move[0], pixel.y+move[1])) {
4208
+ var origx = pixel.x+move[0];
4209
+ var origy = pixel.y+move[1];
4210
+ if (tryMove(pixel, pixel.x+move[0], pixel.y+move[1]) && pixel.x===origx && pixel.y===origy) {
4211
+ moved = true;
4212
+ break;
4213
+ }
4214
+ }
4215
+ else if (!isEmpty(pixel.x+move[0], pixel.y+move[1], true)) {
4216
+ var hitPixel = pixelMap[pixel.x+move[0]][pixel.y+move[1]];
4217
+ if (hitPixel.element === "hamis") {
4218
+ DoDamage(pixel,"melee",750)
4219
+ }
4220
+ }
4221
+ }
4222
+ // 15% chance to change direction
4223
+ if (Math.random() < 0.15 || !moved) {
4224
+ pixel.dir *= -1;
4225
+ }
4226
+
4227
+ if (pixel.temp > 150 && Math.random() > 0.75) {
4228
+ DoDamage(pixel,"fire",10)
4229
+ pixel.panic++
4230
+ }
4231
+ if (pixel.temp < -25) {
4232
+ DoDamage(pixel,"ice",10)
4233
+ pixel.panic++
4234
+ }
4235
+ DoNoitaCreature(pixel)
4236
+ }
4237
+
4238
+ },
4239
+ onCollide: function(pixel,damagePixel) {
4240
+ DoNoitaStaining(pixel,damagePixel)
4241
+ },
4242
+ onBreak: function(pixel) {
4243
+ releaseElement(pixel,elements[pixel.element].blood,4);
4244
+ },
4245
+ reactions: {
4246
+ },
4247
+ category: "life",
4248
+ tempLow: -50,
4249
+ stateLow: "noita_meat",
4250
+ tempHigh: 200,
4251
+ stateHigh: "noita_meat",
4252
+ breakInto: "noita_meat",
4253
+ breakIntoColor: ["#52316f","#52316f","#beda65","#52316f","#52316f","#beda65","#52316f","#52316f","#beda65","#2d1b3d","#2d1b3d","#2d1b3d","#2d1b3d","#634c7e"],
4254
+ blood: "noita_blood",
4255
+ burn:80,
4256
+ burnTime:150,
4257
+ state: "solid",
4258
+ density: 6000,
4259
+ conduct: 0.25,
4260
+ living: true,
4261
+ }
4262
+
4263
+ // creatures above
4264
+ // props below
4265
+
4266
+ elements.lantern = {
4267
+ color: ["#524526","#6c9ccc","#6c9ccc","#efd97d","#6c9ccc","#6c9ccc","#6d5c2e","#524526","#6c9ccc","#647cdc","#efd97d","#6c9ccc","#647cdc","#6d5c2e","#23211b"],
4268
+ properties: {
4269
+ maxhp: 375,
4270
+ hp: 375,
4271
+ },
4272
+ tick: function(pixel) {
4273
+ if (!tryMove(pixel, pixel.x, pixel.y+1)) {
4274
+ tryMove(pixel, pixel.x+(Math.random() < 0.5 ? -1 : 1), pixel.y+1);
4275
+ }
4276
+ doDefaults(pixel);
4277
+ if (pixel.hp < 1) {
4278
+ pixel.element = "glass_broken"
4279
+ return
4280
+ }
4281
+
4282
+ if (pixel.temp > 150 && Math.random() > 0.75) {
4283
+ DoDamage(pixel,"fire",10)
4284
+ }
4285
+ if (pixel.temp < -25) {
4286
+ DoDamage(pixel,"ice",10)
4287
+ }
4288
+
4289
+ },
4290
+ onBreak: function(pixel) {
4291
+ releaseElement(pixel,elements[pixel.element].blood,4);
4292
+ },
4293
+ reactions: {
4294
+ },
4295
+ category: "props",
4296
+ tempLow: -50,
4297
+ stateLow: "glass_broken",
4298
+ tempHigh: 200,
4299
+ stateHigh: "glass_broken",
4300
+ breakInto: "glass_broken",
4301
+ breakIntoColor: ["#524526","#6c9ccc","#efd97d","#6c9ccc","#6d5c2e","#524526","#6c9ccc","#efd97d","#6c9ccc","#6d5c2e","#23211b"],
4302
+ blood: "noita_oil",
4303
+ burnTime:150,
4304
+ state: "solid",
4305
+ density: 6000,
4306
+ conduct: 0.25,
4307
+ living: true,
4308
+ }
4309
+
4310
+ elements.propane_tank = {
4311
+ color: ["#60547a","#78669d","#ccbc6c","#78669d","#8777ae","#78669d","#8f7340","#78669d","#60547a"],
4312
+ properties: {
4313
+ maxhp: 5000,
4314
+ hp: 5000,
4315
+ },
4316
+ tick: function(pixel) {
4317
+ if (!tryMove(pixel, pixel.x, pixel.y+1)) {
4318
+ tryMove(pixel, pixel.x+(Math.random() < 0.5 ? -1 : 1), pixel.y+1);
4319
+ }
4320
+ doDefaults(pixel);
4321
+ if (pixel.hp < 1) {
4322
+ pixel.element = "noita_prop_steel"
4323
+ releaseElement(pixel,"freezing_vapour")
4324
+ NExplode(pixel.x,pixel.y,6,32500,["freezing_vapour"])
4325
+ return
4326
+ }
4327
+
4328
+ if (pixel.temp > 150 && Math.random() > 0.75) {
4329
+ DoDamage(pixel,"fire",10)
4330
+ }
4331
+ if (pixel.temp < -25) {
4332
+ DoDamage(pixel,"ice",10)
4333
+ }
4334
+ },
4335
+ onBreak: function(pixel) {
4336
+ releaseElement(pixel,elements[pixel.element].blood,4);
4337
+ changePixel(pixel,"propane_tank_spell")
4338
+ },
4339
+ reactions: {
4340
+ },
4341
+ category: "props",
4342
+ tempLow: -50,
4343
+ stateLow: "noita_prop_steel",
4344
+ tempHigh: 200,
4345
+ stateHigh: "noita_prop_steel",
4346
+ breakInto: "noita_prop_steel",
4347
+ breakIntoColor: ["#60547a","#78669d","#ccbc6c","#78669d","#8777ae","#78669d","#8f7340","#78669d","#60547a"],
4348
+ blood: "freezing_liquid",
4349
+ burnTime:150,
4350
+ state: "solid",
4351
+ density: 6000,
4352
+ conduct: 0.25,
4353
+ living: true,
4354
+ }
4355
+
4356
+ // props above
4357
+ // spells below
4358
+
4359
+ elements.square_of_fire = {
4360
+ color: "#ff9700",
4361
+ category: "spells",
4362
+ hidden: true,
4363
+ tick: function(pixel){
4364
+ if (!pixel.expandedT){
4365
+ pixel.expandedT = 0
4366
+ }
4367
+ if (pixel.expandedT === 0){
4368
+ for (i = 0; i < squareCoords.length; i++){
4369
+ let x = squareCoords[i][0] + pixel.x;
4370
+ let y = squareCoords[i][1] + pixel.y;
4371
+ if (isEmpty(x, y)){
4372
+ createPixel(pixel.element, x, y)
4373
+ }
4374
+ }
4375
+ }
4376
+ pixel.expandedT ++;
4377
+ if (pixel.expandedT > 2){
4378
+ if (Math.random() > 0.5) {
4379
+ changePixel(pixel, "noita_fire")
4380
+ return
4381
+ }
4382
+ else {
4383
+ deletePixel(pixel.x,pixel.y)
4384
+ return
4385
+ }
4386
+ }
4387
+ },
4388
+ movable: false,
4389
+ hardness: 0.8
4390
+ }
4391
+
4392
+ elements.square_of_acid = {
4393
+ color: "#00ff3c",
4394
+ category: "spells",
4395
+ hidden: true,
4396
+ tick: function(pixel){
4397
+ if (!pixel.expandedT){
4398
+ pixel.expandedT = 0
4399
+ }
4400
+ if (pixel.expandedT === 0){
4401
+ for (i = 0; i < squareCoords.length; i++){
4402
+ let x = squareCoords[i][0] + pixel.x;
4403
+ let y = squareCoords[i][1] + pixel.y;
4404
+ if (isEmpty(x, y)){
4405
+ createPixel(pixel.element, x, y)
4406
+ }
4407
+ }
4408
+ }
4409
+ pixel.expandedT ++;
4410
+ if (pixel.expandedT > 2){
4411
+ if (Math.random() > 0.5) {
4412
+ changePixel(pixel, "noita_acid")
4413
+ return
4414
+ }
4415
+ else {
4416
+ deletePixel(pixel.x,pixel.y)
4417
+ return
4418
+ }
4419
+ }
4420
+ },
4421
+ movable: false,
4422
+ hardness: 0.8
4423
+ }
4424
+
4425
+ elements.square_of_oil = {
4426
+ color: "#3d3628",
4427
+ category: "spells",
4428
+ hidden: true,
4429
+ tick: function(pixel){
4430
+ if (!pixel.expandedT){
4431
+ pixel.expandedT = 0
4432
+ }
4433
+ if (pixel.expandedT === 0){
4434
+ for (i = 0; i < squareCoords.length; i++){
4435
+ let x = squareCoords[i][0] + pixel.x;
4436
+ let y = squareCoords[i][1] + pixel.y;
4437
+ if (isEmpty(x, y)){
4438
+ createPixel(pixel.element, x, y)
4439
+ }
4440
+ }
4441
+ }
4442
+ pixel.expandedT ++;
4443
+ if (pixel.expandedT > 2) {
4444
+ if (Math.random() > 0.5) {
4445
+ changePixel(pixel, "noita_oil")
4446
+ return
4447
+ }
4448
+ else {
4449
+ deletePixel(pixel.x,pixel.y)
4450
+ return
4451
+ }
4452
+ }
4453
+ },
4454
+ movable: false,
4455
+ hardness: 0.8
4456
+ }
4457
+
4458
+ elements.square_of_water = {
4459
+ color: "#366158",
4460
+ category: "spells",
4461
+ hidden: true,
4462
+ tick: function(pixel){
4463
+ if (!pixel.expandedT){
4464
+ pixel.expandedT = 0
4465
+ }
4466
+ if (pixel.expandedT === 0){
4467
+ for (i = 0; i < squareCoords.length; i++){
4468
+ let x = squareCoords[i][0] + pixel.x;
4469
+ let y = squareCoords[i][1] + pixel.y;
4470
+ if (isEmpty(x, y)){
4471
+ createPixel(pixel.element, x, y)
4472
+ }
4473
+ }
4474
+ }
4475
+ pixel.expandedT ++;
4476
+ if (pixel.expandedT > 2){
4477
+ if (Math.random() > 0.5) {
4478
+ changePixel(pixel, "noita_water")
4479
+ return
4480
+ }
4481
+ else {
4482
+ deletePixel(pixel.x,pixel.y)
4483
+ return
4484
+ }
4485
+ }
4486
+ },
4487
+ movable: false,
4488
+ hardness: 0.8
4489
+ }
4490
+
4491
+ elements.acid_ball = {
4492
+ color: ["#84b44c","#cce464","#5c7c4c"],
4493
+ tick: function(pixel) {
4494
+ if (!pixel.xDir && !pixel.Dirx) {
4495
+ let Brandom = Math.random()
4496
+ if (Brandom > 0.5) {
4497
+ pixel.xDir = 1
4498
+ pixel.Dirx = true
4499
+ }
4500
+ else {
4501
+ pixel.xDir = -1
4502
+ pixel.Dirx = true
4503
+ }
4504
+ }
4505
+ if (!pixel.yDir && !pixel.Diry) {
4506
+ let Brandom = Math.random()
4507
+ if (Brandom > 0.66) {
4508
+ pixel.yDir = 1
4509
+ pixel.Diry = true
4510
+ }
4511
+ else if (Brandom < 0.33) {
4512
+ pixel.yDir = -1
4513
+ pixel.Diry = true
4514
+ }
4515
+ else {
4516
+ pixel.yDir = 0
4517
+ pixel.Diry = true
4518
+ }
4519
+ }
4520
+ if (!tryMove(pixel, pixel.x+pixel.xDir, pixel.y+pixel.yDir)) {
4521
+ NExplode(pixel.x,pixel.y,5,0,["noita_acid"])
4522
+ deletePixel(pixel.x,pixel.y)
4523
+ }
4524
+ if ((pixel.start + 330) < pixelTicks) {
4525
+ NExplode(pixel.x,pixel.y,5,0,["noita_acid"])
4526
+ deletePixel(pixel.x,pixel.y)
4527
+ }
4528
+ },
4529
+ state: "solid",
4530
+ category:"spells",
4531
+ density: 1300,
4532
+ excludeRandom: true,
4533
+ maxSize: 1,
4534
+ cooldown: defaultCooldown,
4535
+ hardness: 0.8,
4536
+ }
4537
+
4538
+ elements.bullet = {
4539
+ color: ["#f7e787","#f7e787","#f7c34f"],
4540
+ name: "???",
4541
+ tick: function(pixel) {
4542
+ if (!pixel.xDir && !pixel.Dirx) {
4543
+ let Brandom = Math.random()
4544
+ if (Brandom > 0.5) {
4545
+ pixel.xDir = 1
4546
+ pixel.Dirx = true
4547
+ }
4548
+ else {
4549
+ pixel.xDir = -1
4550
+ pixel.Dirx = true
4551
+ }
4552
+ }
4553
+ if (!pixel.yDir && !pixel.Diry) {
4554
+ let Brandom = Math.random()
4555
+ if (Brandom > 0.66) {
4556
+ pixel.yDir = 1
4557
+ pixel.Diry = true
4558
+ }
4559
+ else if (Brandom < 0.33) {
4560
+ pixel.yDir = -1
4561
+ pixel.Diry = true
4562
+ }
4563
+ else {
4564
+ pixel.yDir = 0
4565
+ pixel.Diry = true
4566
+ }
4567
+ }
4568
+ if (!tryMove(pixel, pixel.x+pixel.xDir, pixel.y+pixel.yDir)) {
4569
+ NExplode(pixel.x,pixel.y,2,1000,["spark"])
4570
+ deletePixel(pixel.x,pixel.y)
4571
+ }
4572
+ if ((pixel.start + 330) < pixelTicks) {
4573
+ NExplode(pixel.x,pixel.y,2,1000,["spark"])
4574
+ deletePixel(pixel.x,pixel.y)
4575
+ }
4576
+ },
4577
+ state: "solid",
4578
+ category:"spells",
4579
+ density: 1300,
4580
+ excludeRandom: true,
4581
+ maxSize: 1,
4582
+ cooldown: defaultCooldown,
4583
+ hardness: 0.8,
4584
+ }
4585
+
4586
+ elements.arrow = {
4587
+ color: ["#953232","#654f2e","#9a7946","#deddd7"],
4588
+ tick: function(pixel) {
4589
+ if (!pixel.xDir && !pixel.Dirx) {
4590
+ let Brandom = Math.random()
4591
+ if (Brandom > 0.5) {
4592
+ pixel.xDir = 1
4593
+ pixel.Dirx = true
4594
+ }
4595
+ else {
4596
+ pixel.xDir = -1
4597
+ pixel.Dirx = true
4598
+ }
4599
+ }
4600
+ if (!pixel.yDir && !pixel.Diry) {
4601
+ let Brandom = Math.random()
4602
+ if (Brandom > 0.66) {
4603
+ pixel.yDir = 1
4604
+ pixel.Diry = true
4605
+ }
4606
+ else if (Brandom < 0.33) {
4607
+ pixel.yDir = -1
4608
+ pixel.Diry = true
4609
+ }
4610
+ else {
4611
+ pixel.yDir = 0
4612
+ pixel.Diry = true
4613
+ }
4614
+ }
4615
+ if (!tryMove(pixel, pixel.x+pixel.xDir, pixel.y+pixel.yDir)) {
4616
+ if (pixel.bouncy == true) {
4617
+ if (pixel.xDir != pixel.yDir) { pixel.xDir = -pixel.xDir; }
4618
+ if (pixel.yDir != (-pixel.xDir)) { pixel.yDir = -pixel.yDir; }
4619
+ }
4620
+ if (!outOfBounds(pixel.x+pixel.xDir,pixel.y+pixel.yDir) && !isEmpty(pixel.x+pixel.xDir,pixel.y+pixel.yDir, true)) {
4621
+ var hitPixel = pixelMap[pixel.x+pixel.xDir][pixel.y+pixel.yDir]
4622
+ if (hitPixel.hp) { // lower hp
4623
+ DoDamage(hitPixel,"ice",500)
4624
+ }
4625
+ }
4626
+ pixel.element = "plant_material"
4627
+ pixel.settled = true
4628
+ }
4629
+ if ((pixel.start + 330) < pixelTicks) {
4630
+ pixel.element = "plant_material"
4631
+ pixel.settled = true
4632
+ }
4633
+ },
4634
+ state: "solid",
4635
+ category:"spells",
4636
+ density: 1300,
4637
+ excludeRandom: true,
4638
+ maxSize: 1,
4639
+ cooldown: defaultCooldown,
4640
+ hardness: 0.8,
4641
+ }
4642
+
4643
+ elements.bouncing_burst = {
4644
+ color: ["#4db73a","#358627","#95ed57"],
4645
+ tick: function(pixel) {
4646
+ if (!pixel.xDir && !pixel.Dirx) {
4647
+ let Brandom = Math.random()
4648
+ if (Brandom > 0.5) {
4649
+ pixel.xDir = 1
4650
+ pixel.Dirx = true
4651
+ }
4652
+ else {
4653
+ pixel.xDir = -1
4654
+ pixel.Dirx = true
4655
+ }
4656
+ }
4657
+ if (!pixel.yDir && !pixel.Diry) {
4658
+ let Brandom = Math.random()
4659
+ if (Brandom > 0.66) {
4660
+ pixel.yDir = 1
4661
+ pixel.Diry = true
4662
+ }
4663
+ else if (Brandom < 0.33) {
4664
+ pixel.yDir = -1
4665
+ pixel.Diry = true
4666
+ }
4667
+ else {
4668
+ pixel.yDir = 0
4669
+ pixel.Diry = true
4670
+ }
4671
+ }
4672
+ if (pixel.bounces > 10) {
4673
+ pixel.bouncy = false
4674
+ }
4675
+ if (!tryMove(pixel, pixel.x+pixel.xDir, pixel.y+pixel.yDir)) {
4676
+ if (pixel.bouncy == true) {
4677
+ if (pixel.xDir != pixel.yDir) { pixel.xDir = -pixel.xDir; }
4678
+ if (pixel.yDir != (-pixel.xDir)) { pixel.yDir = -pixel.yDir; }
4679
+ if (!pixel.bounces) { pixel.bounces = 1 }
4680
+ else { pixel.bounces ++ }
4681
+ }
4682
+ if (!outOfBounds(pixel.x+pixel.xDir,pixel.y+pixel.yDir) && !isEmpty(pixel.x+pixel.xDir,pixel.y+pixel.yDir, true)) {
4683
+ var hitPixel = pixelMap[pixel.x+pixel.xDir][pixel.y+pixel.yDir]
4684
+ if (hitPixel.hp) { // lower hp
4685
+ DoDamage(hitPixel,"ice",300)
4686
+ }
4687
+ deletePixel(pixel.x,pixel.y)
4688
+ }
4689
+ if (!pixel.bouncy || (pixel.start + 330) < pixelTicks) {
4690
+ deletePixel(pixel.x,pixel.y)
4691
+ }
4692
+ }
4693
+ },
4694
+ properties: {
4695
+ "bouncy": true
4696
+ },
4697
+ state: "solid",
4698
+ category:"spells",
4699
+ density: 1300,
4700
+ excludeRandom: true,
4701
+ maxSize: 1,
4702
+ cooldown: defaultCooldown,
4703
+ hardness: 0.8,
4704
+ }
4705
+
4706
+ elements.propane_tank_spell = {
4707
+ name: "propane_tank",
4708
+ color: ["#60547a","#78669d","#ccbc6c","#78669d","#8777ae","#78669d","#8f7340","#78669d","#60547a"],
4709
+ tick: function(pixel) {
4710
+ if (!pixel.xDir && !pixel.Dirx) {
4711
+ let Brandom = Math.random()
4712
+ if (Brandom > 0.5) {
4713
+ pixel.xDir = 1
4714
+ pixel.Dirx = true
4715
+ }
4716
+ else {
4717
+ pixel.xDir = -1
4718
+ pixel.Dirx = true
4719
+ }
4720
+ }
4721
+ if (!pixel.yDir && !pixel.Diry) {
4722
+ let Brandom = Math.random()
4723
+ if (Brandom > 0.66) {
4724
+ pixel.yDir = 1
4725
+ pixel.Diry = true
4726
+ }
4727
+ else if (Brandom < 0.33) {
4728
+ pixel.yDir = -1
4729
+ pixel.Diry = true
4730
+ }
4731
+ else {
4732
+ pixel.yDir = 0
4733
+ pixel.Diry = true
4734
+ }
4735
+ }
4736
+ if (pixel.bounces > 5) {
4737
+ pixel.bouncy = false
4738
+ }
4739
+ releaseElement(pixel,"freezing_vapour")
4740
+ if (!tryMove(pixel, pixel.x+pixel.xDir, pixel.y+pixel.yDir)) {
4741
+ if (pixel.bouncy == true) {
4742
+ if (pixel.xDir != pixel.yDir) { pixel.xDir = -pixel.xDir; }
4743
+ if (pixel.yDir != (-pixel.xDir)) { pixel.yDir = -pixel.yDir; }
4744
+ if (!pixel.bounces) { pixel.bounces = 1 }
4745
+ else { pixel.bounces ++ }
4746
+ }
4747
+ if (!outOfBounds(pixel.x+pixel.xDir,pixel.y+pixel.yDir) && !isEmpty(pixel.x+pixel.xDir,pixel.y+pixel.yDir, true)) {
4748
+ var hitPixel = pixelMap[pixel.x+pixel.xDir][pixel.y+pixel.yDir]
4749
+ if (hitPixel.hp) { // lower hp
4750
+ DoDamage(hitPixel,"explosion",32500)
4751
+ NExplode(pixel.x,pixel.y,6,32500,["freezing_vapour"])
4752
+ deletePixel(pixel.x,pixel.y)
4753
+ }
4754
+ }
4755
+ if (!pixel.bouncy) {
4756
+ NExplode(pixel.x,pixel.y,6,32500,["freezing_vapour"])
4757
+ deletePixel(pixel.x,pixel.y)
4758
+ }
4759
+ }
4760
+ },
4761
+ properties: {
4762
+ "bouncy": true
4763
+ },
4764
+ state: "solid",
4765
+ category:"spells",
4766
+ density: 1300,
4767
+ excludeRandom: true,
4768
+ maxSize: 1,
4769
+ cooldown: defaultCooldown,
4770
+ hardness: 0.8,
4771
+ }
4772
+
4773
+ elements.black_hole = {
4774
+ color: ["#251b35","#251b35","#251b35","#997bc6","#997bc6","#251b35","#251b35"],
4775
+ tick: function(pixel) {
4776
+ if (!pixel.xDir && !pixel.Dirx) {
4777
+ let Brandom = Math.random()
4778
+ if (Brandom > 0.5) {
4779
+ pixel.xDir = 1
4780
+ pixel.Dirx = true
4781
+ }
4782
+ else {
4783
+ pixel.xDir = -1
4784
+ pixel.Dirx = true
4785
+ }
4786
+ }
4787
+ if (!pixel.yDir && !pixel.Diry) {
4788
+ let Brandom = Math.random()
4789
+ if (Brandom > 0.66) {
4790
+ pixel.yDir = 1
4791
+ pixel.Diry = true
4792
+ }
4793
+ else if (Brandom < 0.33) {
4794
+ pixel.yDir = -1
4795
+ pixel.Diry = true
4796
+ }
4797
+ else {
4798
+ pixel.yDir = 0
4799
+ pixel.Diry = true
4800
+ }
4801
+ }
4802
+ for (let i = -10; i < 11; i++) {
4803
+ if (!isEmpty(pixel.x+i,pixel.y+i,true) && !outOfBounds(pixel.x+i,pixel.y+i) && elements[pixelMap[pixel.x+i][pixel.y+i].element].state == "solid" && elements[pixelMap[pixel.x+i][pixel.y+i].element].movable == true) {
4804
+ if (pixel.x > pixel.x+i) {
4805
+ var dirx = 1
4806
+ }
4807
+ else if (pixel.x < pixel.x+i) {
4808
+ var dirx = -1
4809
+ }
4810
+ else {
4811
+ var diry = 0
4812
+ }
4813
+ if (pixel.y > pixel.y+i) {
4814
+ var diry = 1
4815
+ }
4816
+ else if (pixel.y < pixel.y+i) {
4817
+ var diry = -1
4818
+ }
4819
+ else {
4820
+ var diry = 0
4821
+ }
4822
+ if (dirx != undefined && diry != undefined && !((dirx==0) && (diry==0))) {
4823
+ tryMove(pixelMap[pixel.x+i][pixel.y+i], (pixel.x+i)+dirx, (pixel.y+i)+diry)
4824
+ }
4825
+ }
4826
+ }
4827
+ for (let i = -6; i < 7; i++) {
4828
+ for (j = -6; j < 7; j++) {
4829
+ if (!isEmpty(pixel.x+j,pixel.y+i) && !outOfBounds(pixel.x+j,pixel.y+i) && !((i==0) && (j==0))) {
4830
+ if (elements[pixelMap[pixel.x+j][pixel.y+i].element].state == "solid") {
4831
+ deletePixel(pixel.x+j,pixel.y+i)
4832
+ }
4833
+ }
4834
+ }
4835
+ }
4836
+ if (!tryMove(pixel, pixel.x+pixel.xDir, pixel.y+pixel.yDir)) {
4837
+ if (!isEmpty(pixel.x+pixel.xDir, pixel.y+pixel.yDir) && !outOfBounds(pixel.x+pixel.xDir, pixel.y+pixel.yDir)) {
4838
+ swapPixels(pixel,pixelMap[pixel.x+pixel.xDir][pixel.y+pixel.yDir])
4839
+ }
4840
+ else {
4841
+ deletePixel(pixel.x,pixel.y)
4842
+ }
4843
+ }
4844
+ if ((pixel.start + 130) < pixelTicks) {
4845
+ deletePixel(pixel.x,pixel.y)
4846
+ }
4847
+ },
4848
+ renderer: function(pixel,ctx) {
4849
+ drawSquare(ctx,"#60bbf7",pixel.x-3,pixel.y-3,7,0.5);
4850
+ drawSquare(ctx,pixel.color,pixel.x-2,pixel.y-2,5,1);
4851
+ drawDefault(ctx,pixel);
4852
+ },
4853
+ state: "solid",
4854
+ category:"spells",
4855
+ density: 1300,
4856
+ excludeRandom: true,
4857
+ maxSize: 1,
4858
+ cooldown: defaultCooldown,
4859
+ hardness: 0.8,
4860
+ }
4861
+
4862
+ worldgentypes.noita_surface = {
4863
+ layers: [
4864
+ [0.8, "soil"],
4865
+ [0.3, "noita_rock"],
4866
+ [0.1, "dense_rock"],
4867
+ [0, "extremely_dense_rock"],
4868
+ ],
4869
+ decor: [
4870
+ ["lammas", 0.1],
4871
+ ]
4872
+ } /*
4873
+
4874
+ worldgentypes.noita_lava = {
4875
+ layers: [
4876
+ [0.3, "lava"],
4877
+ [0.1, "dense_rock"],
4878
+ [0, "extremely_dense_rock"],
4879
+ ],
4880
+ }
4881
+
4882
+ worldgentypes.noita_holy_mountain = {
4883
+ layers: [
4884
+ [0.9, "extremely_dense_rock"],
4885
+ [0.8, "dense_rock"],
4886
+ [0.7, "brickwork"],
4887
+ [0.3, "flash"],
4888
+ [0.2, "brickwork"],
4889
+ [0.1, "dense_rock"],
4890
+ [0, "extremely_dense_rock"],
4891
+ ],
4892
+ baseHeight: 0.9,
4893
+ heightVariance: 0.05,
4894
+ complexity: 1,
4895
+ } */