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