diff --git a/index.html b/index.html
index 94463d55..61314622 100644
--- a/index.html
+++ b/index.html
@@ -16243,7 +16243,8 @@ Cancer, Landmine, Grenade, Smoke Grenade">? 简体中文
- Email us at contact@R74n.com for advertising, help, or education!
+ Try our NEW GAME: Infinite Chef
+ Email us at contact@R74n.com for advertising, help, or education!
Be notified when Sandboxels and other R74n projects are updated, along with ramblings from the developer!
@@ -16284,7 +16285,7 @@ Cancer, Landmine, Grenade, Smoke Grenade">? applications in education. With a hands-on experience, it can give students an understanding of emerging phenomena in many fields, such as biology, chemistry, ecology, geology, cooking, and even virology. There are countless aspects to discover.
We have a thriving community on Discord ! There you can post feedback or share your creations.
- Business inquiries? Education stories? Help needed? Email us at contact@R74n.com !
+ Business inquiries? Education stories? Help needed? Email us at contact@R74n.com !
More links: Help • Tips • Mods • Mobile • Offline • Privacy
Thanks to: Serioustar, ggod, Midi_png, personman, fnl4y, PitsPower, swagg boi, kaeud, WeiChei, Trent, u2ce
Translation by R74n
diff --git a/lang/hu.json b/lang/hu.json
index b8645d87..9c4361c0 100644
--- a/lang/hu.json
+++ b/lang/hu.json
@@ -189,7 +189,7 @@
"bubble":"buborék",
"acid":"sav",
"neutral_acid":"semleges_sav",
-"acid_gas":"savgáz",
+"acid_gas":"savgőz",
"glue":"ragasztó",
"soda":"szénsavas_üdítőital",
"gray_goo":"szürke_ragacs",
@@ -242,7 +242,7 @@
"sterling":"sterling_ezüst",
"gallium":"gallium",
"molten_gallium":"olvadt_gallium",
-"gallium_gas":"gallium_gáz",
+"gallium_gas":"galliumgőz",
"rose_gold":"rózsaarany",
"purple_gold":"lila_arany",
"blue_gold":"kék_arany",
@@ -259,7 +259,7 @@
"molten_solder":"olvadt_forrasztó_fém",
"juice":"lé",
"juice_ice":"fagyott_lé",
-"broth":"leves_leve",
+"broth":"leveslé",
"milk":"tej",
"chocolate_milk":"csokis_tej",
"fruit_milk":"gyümölcsös_tej",
@@ -357,7 +357,7 @@
"liquid_helium":"folyékony_hélium",
"sodium":"nátrium",
"molten_sodium":"olvadt_nátrium",
-"sodium_gas":"nátrium_gáz",
+"sodium_gas":"nátriumgőz",
"calcium":"kalcium",
"molten_calcium":"olvadt_kalcium",
"limestone":"mészkő",
@@ -377,7 +377,7 @@
"fragrance":"illat",
"perfume":"parfüm",
"cyanide":"cián",
-"cyanide_gas":"cián_gáz",
+"cyanide_gas":"ciángáz",
"ozone":"ózon",
"cloud":"felfő",
"rain_cloud":"esőfelhő",
@@ -394,7 +394,7 @@
"led_b":"kék_led",
"sulfur":"kén",
"molten_sulfur":"olvadt_kén",
-"sulfur_gas":"kén_gáz",
+"sulfur_gas":"kéngőz",
"copper_sulfate":"rézgálic",
"snake":"kígyó",
"loopy":"kacskaringós",
@@ -426,7 +426,7 @@
"bead":"gyöngy",
"color_sand":"színes_homok",
"borax":"bórax",
-"epsom_salt":"epsom_só",
+"epsom_salt":"keserűsó",
"potassium_salt":"kálium_só",
"sodium_acetate":"nátrium-acetát",
"lightning":"villámcsapás",
@@ -501,7 +501,7 @@
"molten_blue_gold":"olvadt_kék_arany",
"molten_electrum":"olvadt_elektrum",
"molten_pyrite":"olvadt_pirit",
-"broth_ice":"fagyott_leves_leve",
+"broth_ice":"fagyott_leveslé",
"frozen_vinegar":"fagyott_ecet",
"sauce_ice":"fagyott_szósz",
"alcohol_ice":"fagyott_alkohol",
@@ -519,7 +519,7 @@
"molten_alga":"olvadt_alumínium-gallim_ötvözet",
"molten_metal_scrap":"olvadt_fémtörmelék",
"molten_borax":"olvadt_borax",
-"molten_epsom_salt":"olvadt_epsom-só",
+"molten_epsom_salt":"olvadt_keserűsó",
"molten_potassium_salt":"olvadt_kálium_só",
"molten_sodium_acetate":"olvadt_nátrium-acetát",
"frozen_nitro":"fagyott_nitroglicerin",
@@ -539,5 +539,5 @@
"tsunami": "cunami",
"blaster": "plazmavető",
"propane_ice": "fagyott_propán",
-"molten_caustic_potash": "Olvadt_kálium-hidroxid"
+"molten_caustic_potash": "olvadt_kálium-hidroxid"
}
diff --git a/mod-list.html b/mod-list.html
index 6b6bd780..45c8f386 100644
--- a/mod-list.html
+++ b/mod-list.html
@@ -117,11 +117,12 @@
velocity.js Beta for explosion velocity, and later wind, which may come to the base game in the future R74n
Tools & Settings
-adjustablepixelsize.js Allows you to set the pixelSize with a URL parameter Alice
+
betaworldgen.js adds a more advanced world generation to the game Adora
betterModManager.js Improvements to the Mod Manager ggod
betterSettings.js Adds additional settings and functionality ggod
betterStats.js Separate “real” and “set” TPS, meaning you can see what the TPS actually is, instead of only seeing what it’s set to mollthecoder
+buildingreplicator.js Scans and replicates builds anywhere on the screen, along with some preset submitted builds nousernamefound
change.js Adds a tool that only replaces existing pixels Alice
color_tools.js Adds tools that manipulate colors Alice
controllable_pixel_test.js Adds a pixel that can be controlled with the keyboard keys. Read the commit description for more info. [PC ONLY] Alice
@@ -150,12 +151,13 @@
save_loading.js Adds the ability to save and load scenes from files (See the info page of the element) Alice
selective_paint.js Adds a tool to paint only selected elements SquareScreamYT
stripe_paint.js Adds a tool to paint with stripes Alice
+texturepack.js Adds tools that let you create and share custom texture packs nousernamefound
the_ground.js Adds several rock types, worldgen settings, and gemstones Alice
Science & Chemistry
alcohol.js Adds methanol, (iso-)propanol, and butanol Alice
alkahest.js Adds the alkahest, a liquid which dissolves anything Alice
-aScientistsWish.js Adds things that related to science, especially radiation Carbon Monoxide, CPU
+aScientistsWish.js Adds things that related to science, especially radiation Carbon Monoxide, salmonfishy
bettermetalscrap.js Allows metal scrap to be melted back into its original material nousernamefound
bigger_star_spawners.js Adds spawners for larger stars Alice
bioooze_and_pyrogens.js Adds Bio-Ooze from Frackin’ Universe and several heat-producing materials from various games’ mods Alice
@@ -224,13 +226,15 @@
Food & Cooking
aChefsDream.js Adds more foods, animals, tools and many other cooking related items. Updates can be found in this YouTube Playlist SquareScreamYT
aChefsDream_beta.js Beta testing for aChefsDream. The code can be found on GitHub SquareScreamYT
-bananas.js Adds bananas and banana plants Alice
+bananas.js Adds bananas and banana plants Alice '
+CherrySoda.js Adds materials to make Cherry soda. Benzaldehyde + seltzer = Cherrysoda. guzzo86
community_desserts.js Adds various desserts from community suggestions Tisquares
greenitemsandmore.js Adds various green things, including apples and more food zonneschijn7
ketchup_mod.js Adds a bunch of ketchup related stuff, plus a few other condiments Nubo318 (main dev), Devi, Alice (contributors)
lemonade.js Adds lemons and lemonade personman / baconthemyth
morefoodsmod.js Adds more foods Clide4
pizzasstuff.js New animals, foods, and plants _ilikepizza_
+potato_chips.js Potato chips. guzzo86
sbstuff.js Adds many foods stefanblox
soups.js Adds seasoning and soup pixelegend4
weAllScreamFor.js Adds ice cream toppings rottenEgghead
diff --git a/mods/10kelements.js b/mods/10kelements.js
index f60a6e13..711a4ea6 100644
--- a/mods/10kelements.js
+++ b/mods/10kelements.js
@@ -38,8 +38,8 @@ var randomProperty = function (obj) {
if (Math.abs(settings.randomcount) == settings.randomcount){
if (!settings.skineasteregg){
for (var i = 1; i <= settings.randomcount; i++){
- var f = Math.random() < 0.2
- var co = Math.random() < 0.2
+ var canHeat = Math.random() < 0.2
+ var canCold = Math.random() < 0.2
elements["element_"+i] = {
color: "#" + color[Math.floor(Math.random()*color.length)] + color[Math.floor(Math.random()*color.length)] + color[Math.floor(Math.random()*color.length)] + color[Math.floor(Math.random()*color.length)] + color[Math.floor(Math.random()*color.length)] + color[Math.floor(Math.random()*color.length)],
category: "random",
@@ -49,11 +49,11 @@ if (Math.abs(settings.randomcount) == settings.randomcount){
density: randomIntFromInterval(1, 10000)
}
total = i
- if (f){
+ if (canHeat){
elements["element_"+i].tempHigh = 20 + randomIntFromInterval(10, 6000)
elements["element_"+i].stateHigh = elementslist[Math.floor(Math.random()*elementslist.length)]
}
- if (co){
+ if (canCold){
elements["element_"+i].tempLow = 20 - randomIntFromInterval(10, 270)
elements["element_"+i].stateLow = elementslist[Math.floor(Math.random()*elementslist.length)]
}
@@ -74,6 +74,14 @@ if (Math.abs(settings.randomcount) == settings.randomcount){
}else(elements["element_"+i].desc += (" or " + reaction))
}
}
+ for (var reaction in elements["element_" + i].reactions){
+ if (elements[elements["element_"+i].reactions[reaction].elem1].category == "tools" || elements[elements["element_"+i].reactions[reaction].elem2].category == "tools"){
+ console.log(i + " makes a tool...? when it touches " + reaction)
+ if (!elements["element_"+i].desc){
+ elements["element_" + i].desc = "This breaks the laws of physics if it touches " + reaction
+ }else(elements["element_"+i].desc += (" or " + reaction))
+ }
+ }
}
} else {
for (var i = 1; i <= settings.randomcount; i++){
diff --git a/mods/CherrySoda.js b/mods/CherrySoda.js
index 0be7f3da..2561b7e7 100644
--- a/mods/CherrySoda.js
+++ b/mods/CherrySoda.js
@@ -29,7 +29,8 @@ elements.tolulene = {
burnInto: ["steam", "smoke", "fire", "fire",],
reactions: {
"potassiumpermanganate": {elem1: "benzaldehyde", elem2: "benzaldehyde"},
- }
+ },
+ tempHigh: 111,
}
elements.benzaldehyde = {
color: "#F5F5F5",
@@ -40,7 +41,7 @@ elements.benzaldehyde = {
desc: "Benzaldehyde is cherry flavor. It is also clear like tolulene.",
reactions: {
"seltzer": {elem1: "cherrysoda", elem2: "cherrysoda"},
- }
+ },
}
elements.cherrysoda = {
color: "#D2042D",
@@ -48,5 +49,29 @@ elements.cherrysoda = {
category: "food",
state: "liquid",
density: 1045,
- desc: "Cherry soda."
+ desc: "Cherry soda.",
+ tempHigh: 150,
+ stateHigh: "cherrysoda_gas",
+}
+elements.cherrysoda_gas = {
+ color: "#D20459",
+ behavior: behaviors.GAS,
+ category: "gases",
+ state: "gas",
+ density: 1025,
+ desc: "Cherry soda gas.",
+ tempLow: 149,
+ stateLow: "cherrysoda",
+ temp: 169,
+}
+elements.cherrysoda_ice = {
+ color: "#BF4F9C",
+ behavior: behaviors.wALL,
+ category: "solids",
+ state: "solid",
+ density: 1065,
+ desc: "Cherry soda gas.",
+ tempHigh: -27,
+ stateHigh: "cherrysoda",
+ temp: -47,
}
diff --git a/mods/GrapeSoda.js b/mods/GrapeSoda.js
new file mode 100644
index 00000000..1d67b1db
--- /dev/null
+++ b/mods/GrapeSoda.js
@@ -0,0 +1,141 @@
+elements.anthranilicacid = {
+ color: "#FFFFFF",
+ behavior: behaviors.POWDER,
+ category: "powders",
+ state: "solid",
+ tempHigh: 145,
+ stateHigh: "moltenanthranilicacid",
+ reactions: {
+ "methanol": {elem1: "methylanthranilate", elem2: "methylanthranilate"},
+ },
+ }
+
+ elements.moltenanthranilicacid = {
+ color: ["#FFFF99", "#FFFF66", "#FFFF00"],
+ behavior: behaviors.LIQUID,
+ category: "states",
+ state: "liquid",
+ tempLow: 144,
+ stateLow: "anthranilicacid",
+ tempHigh: 340,
+ stateHigh: "anthranilicacidgas",
+ temp: 155,
+ viscosity: 10,
+ }
+
+ elements.anthranilicacidgas = {
+ color: "#FEDEFF",
+ behavior: behaviors.GAS,
+ category: "gases",
+ state: "gas",
+ tempLow: 339,
+ stateLow: "moltenanthranilicacid",
+ temp: 350,
+ }
+
+ elements.methanol = {
+ color: "#FFE4FF",
+ behavior: behaviors.LIQUID,
+ category: "liquids",
+ state: "liquid",
+ density: 792,
+ stateHigh: "methanolgas",
+ tempHigh: 65,
+ stateLow: "methanolice",
+ tempLow: -98,
+ burn: 100,
+ burnTime: 100,
+ }
+
+ elements.methanolice = {
+ color: "#FFFFFF",
+ behavior: behaviors.SOLID,
+ category: "solids",
+ state: "solid",
+ density: 822,
+ stateHigh: "methanol",
+ temp: -117,
+ tempHigh: -97,
+ }
+
+ elements.methanolgas = {
+ color: "#E1E4FF",
+ behavior: behaviors.GAS,
+ category: "gases",
+ state: "gas",
+ density: 942,
+ stateLow: "methanol",
+ tempLow: 64,
+ temp: 84,
+ burn: 100,
+ burnTime: 100,
+ }
+ elements.methylanthranilate = {
+ color: "#FFFBBA",
+ behavior: behaviors.LIQUID,
+ category: "liquids",
+ state: "liquid",
+ density: 1120,
+ stateHigh: "methylanthranilategas",
+ tempHigh: 257,
+ stateLow: "methylanthranilateice",
+ tempLow: -20,
+ reactions: {
+ "seltzer": {elem1: "grapesoda", elem2: "grapesoda",}
+ }
+ }
+
+ elements.methylanthranilategas = {
+ color: "#FFFBBA",
+ behavior: behaviors.GAS,
+ category: "gases",
+ state: "gas",
+ density: 1120,
+ stateLow: "methylanthranilate",
+ tempLow: 256,
+ temp: 276,
+ }
+ elements.methylanthranilateice = {
+ color: "#FFFBD7",
+ behavior: behaviors.WALL,
+ category: "solids",
+ state: "solid",
+ density: 1120,
+ stateHigh: "methulanthranilate",
+ temphigh: -19,
+ temp: -39,
+ }
+
+ elements.grapesoda = {
+ color: "#5B134F",
+ behavior: behaviors.LIQUID,
+ category: "food",
+ state: "liquid",
+ density: 1120,
+ stateHigh: "grapesodagas",
+ tempHigh: 257,
+ stateLow: "grapesodaice",
+ tempLow: -20,
+ }
+
+ elements.grapesodagas = {
+ color: "#B99FEA",
+ behavior: behaviors.GAS,
+ category: "gases",
+ state: "gas",
+ density: 1100,
+ stateLow: "grapesoda",
+ tempLow: 256,
+ temp: 257,
+ }
+
+elements.grapesodaice = {
+ color: "#B99FC2",
+ behavior: behaviors.WALL,
+ category: "solids",
+ state: "solid",
+ density: 1140,
+ stateHigh: "grapesoda",
+ tempHigh: -19,
+ temp: -20,
+ }
diff --git a/mods/Quicksand_one.js b/mods/Quicksand_one.js
new file mode 100644
index 00000000..01659cc1
--- /dev/null
+++ b/mods/Quicksand_one.js
@@ -0,0 +1,517 @@
+
+elements.peat_bog = {
+ color: "#483C32",
+ behavior: elements.slime.behavior,
+ viscosity: 10000,
+ tempHigh: 55,
+ stateHigh: "liquid",
+ tempLow: 0,
+ category: "liquids",
+ state: "liquid",
+ density: 1200,
+ stain: 0.2
+};
+elements.marsh_muck = {
+ color: "#6B8E23",
+ behavior: elements.slime.behavior,
+ viscosity: 10000,
+ tempHigh: 50,
+ stateHigh: "liquid",
+ tempLow: 0,
+ category: "liquids",
+ state: "liquid",
+ density: 1000,
+ stain: 0.25
+};
+elements.quagmire = {
+ color: "#8B4513",
+ behavior: elements.slime.behavior,
+ viscosity: 10000,
+ tempHigh: 60,
+ stateHigh: "liquid",
+ tempLow: 0,
+ category: "liquids",
+ state: "liquid",
+ density: 1000,
+ stain: 0.3
+};
+elements.slime_mold = {
+ color: "#00FF00",
+ behavior: elements.slime.behavior,
+ viscosity: 10000,
+ tempHigh: 30,
+ stateHigh: "liquid",
+ tempLow: 0,
+ category: "liquids",
+ state: "liquid",
+ density: 1000,
+ stain: 0.2
+};
+elements.mangrove_mud = {
+ color: "#8B4513",
+ behavior: elements.slime.behavior,
+ viscosity: 10000,
+ tempHigh: 55,
+ stateHigh: "liquid",
+ tempLow: 0,
+ category: "liquids",
+ state: "liquid",
+ density: 1089,
+ stain: 0.25
+};
+peat_slurry = {
+ color: "#556B2F",
+ behavior: elements.slime.behavior,
+ viscosity: 10000,
+ tempHigh: 50,
+ stateHigh: "liquid",
+ tempLow: 0,
+ category: "liquids",
+ state: "liquid",
+ density: 1452,
+ stain: 0.28
+};
+elements.bog_ooze = {
+ color: "#2E8B57",
+ behavior:elements.slime.behavior,
+ viscosity: 10000,
+ tempHigh: 100,
+ stateHigh: "liquid",
+ tempLow: 0,
+ category: "liquids",
+ state: "liquid",
+ density: 1350,
+ stain: 0.3
+};
+elements.fen_mud = {
+ color: "#556B2F",
+ behavior: elements.slime.behavior,
+ viscosity: 10000,
+ tempHigh: 100,
+ stateHigh: "liquid",
+ tempLow: 0,
+ category: "liquids",
+ state: "liquid",
+ density: 1550,
+ stain: 0.28
+};
+elements.swamp_sludge = {
+ color: "#6B8E23",
+ behavior: elements.slime.behavior,
+ viscosity: 10000,
+ tempHigh: 52,
+ stateHigh: "liquid",
+ tempLow: 0,
+ category: "liquids",
+ state: "liquid",
+ density: 1450,
+ stain: 0.25
+};
+elements.marsh_slime = {
+ color: "#00FF00",
+ behavior: elements.slime.behavior,
+ viscosity: 10000,
+ tempHigh: 32,
+ stateHigh: "liquid",
+ tempLow: 0,
+ category: "liquids",
+ state: "liquid",
+ density: 1050,
+ stain: 0.16
+};
+elements.peat_paste = {
+ color: "#8B4513",
+ behavior: elements.slime.behavior,
+ viscosity: 10000,
+ tempHigh: 57,
+ stateHigh: "liquid",
+ tempLow: 0,
+ category: "liquids",
+ state: "liquid",
+ density: 1600,
+ stain: 0.1
+};
+elements.mudflat_mud = {
+ color: "#8B4513",
+ behavior: elements.slime.behavior,
+ viscosity: 10000,
+ tempHigh: 60,
+ stateHigh: "liquid",
+ tempLow: 0,
+ category: "liquids",
+ state: "liquid",
+ density: 1700,
+ stain: 0.25
+};
+elements.swamp_ooze = {
+ color: "#556B2F",
+ behavior: elements.slime.behavior,
+ viscosity: 10000,
+ tempHigh: 54,
+ stateHigh: "liquid",
+ tempLow: 0,
+ category: "liquids",
+ state: "liquid",
+ density: 1400,
+ stain: 0.20
+};
+elements.peat_pudding = {
+ color: "#8B4513",
+ behavior: elements.sap.behavior,
+ viscosity: 10000,
+ tempHigh: 58,
+ stateHigh: "liquid",
+ tempLow: 0,
+ category: "liquids",
+ state: "liquid",
+ density: 1600,
+ stain: 0.21
+};
+elements.mudflow = {
+ color: "#8B4513",
+ behavior: elements.slime.behavior,
+ viscosity: 10000,
+ tempHigh: 60,
+ stateHigh: "liquid",
+ tempLow: 0,
+ category: "liquids",
+ state: "liquid",
+ density: 1700,
+ stain: 0.2
+};
+elements.marsh_mire = {
+ color: "#6B8E23",
+ behavior: elements.slime.behavior,
+ viscosity: 10000,
+ tempHigh: 55,
+ stateHigh: "liquid",
+ tempLow: 0,
+ category: "liquids",
+ state: "liquid",
+ density: 1500,
+ stain: 0.12
+};
+elements.moor = {
+ color: "#556B2F",
+ behavior: elements.slime.behavior,
+ viscosity: 10000,
+ tempHigh: 57,
+ stateHigh: "liquid",
+ tempLow: 0,
+ category: "liquids",
+ state: "liquid",
+ density: 1600,
+ stain: 0.18
+};
+elements.quicksand_fen = {
+ color: "#DAA520",
+ behavior: elements.slime.behavior,
+ viscosity: 10000,
+ tempHigh: 62,
+ stateHigh: "liquid",
+ tempLow: 0,
+ category: "liquids",
+ state: "liquid",
+ density: 1550,
+ stain: 0.15
+};
+elements.marsh_mudslide = {
+ color: "#8B4513",
+ behavior: elements.slime.behavior,
+ viscosity: 10000,
+ tempHigh: 58,
+ stateHigh: "liquid",
+ tempLow: 0,
+ category: "liquids",
+ state: "liquid",
+ density: 1600,
+ stain: 0.1
+};
+elements.swamp_slime = {
+ color: "#00FF00",
+ behavior: elements.slime.behavior,
+ viscosity: 10000,
+ tempHigh: 35,
+ stateHigh: "liquid",
+ tempLow: 0,
+ category: "liquids",
+ state: "liquid",
+ density: 1100,
+ stain: 0.15
+};
+elements.mire_mud = {
+ color: "#8B4513",
+ behavior: elements.slime.behavior,
+ viscosity: 10000,
+ tempHigh: 60,
+ stateHigh: "liquid",
+ tempLow: 0,
+ category: "liquids",
+ state: "liquid",
+ density: 1700,
+ stain: 0.17
+};
+elements.peat_quicksand = {
+ color: "#DAA520",
+ behavior: elements.slime.behavior,
+ viscosity: 10000,
+ tempHigh: 65,
+ stateHigh: "liquid",
+ tempLow: 0,
+ category: "liquids",
+ state: "liquid",
+ density: 1800,
+ stain: 0.15
+};
+elements.dense_quicksand = {
+ color: "#DAA520",
+ behavior: elements.slime.behavior,
+ viscosity: 1000,
+ tempHigh: 65,
+ stateHigh: "liquid",
+ tempLow: 0,
+ category: "liquids",
+ state: "liquid",
+ density: 1900,
+ stain: 0.2
+};
+elements.swamp_mud = {
+ color: "#8B4513",
+ behavior: elements.slime.behavior,
+ viscosity: 1000,
+ tempHigh: 60,
+ stateHigh: "liquid",
+ tempLow: 0,
+ category: "liquids",
+ state: "liquid",
+ density: 1700,
+ stain: 0.25
+};
+elements.wet_mud = {
+ color: "#8B4513",
+ behavior: elements.slime.behavior,
+ viscosity: 1200,
+ tempHigh: 55,
+ stateHigh: "liquid",
+ tempLow: 0,
+ category: "liquids",
+ state: "liquid",
+ density: 1600,
+ stain: 0.3
+};
+elements.wet_quicksand = {
+ color: "#DAA520",
+ behavior: elements.slime.behavior,
+ viscosity: 700,
+ tempHigh: 70,
+ stateHigh: "liquid",
+ tempLow: 0,
+ category: "liquids",
+ state: "liquid",
+ density: 1080,
+ stain: 0.25
+};
+elements.slimy_mud = {
+ color: "#008000",
+ behavior: elements.slime.behavior,
+ viscosity: 900,
+ tempHigh: 55,
+ stateHigh: "liquid",
+ tempLow: 0,
+ category: "liquids",
+ state: "liquid",
+ density: 1550,
+ stain: 0.3
+};
+elements.sticky_mud = {
+ color: "#8B4513",
+ behavior: elements.slime.behavior,
+ viscosity: 1100,
+ tempHigh: 58,
+ stateHigh: "liquid",
+ tempLow: 0,
+ category: "liquids",
+ state: "liquid",
+ density: 1321,
+ stain: 0.25
+};
+elements.sloppy_mud = {
+ color: "#8B4513",
+ behavior: elements.slime.behavior,
+ viscosity: 1000,
+ tempHigh: 60,
+ stateHigh: "liquid",
+ tempLow: 0,
+ category: "liquids",
+ state: "liquid",
+ density: 1700,
+ stain: 0.3
+};
+elements.thick_mud = {
+ color: "#8B4513",
+ behavior: elements.slime.behavior,
+ viscosity: 1300,
+ tempHigh: 50,
+ stateHigh: "liquid",
+ tempLow: 0,
+ category: "liquids",
+ state: "liquid",
+ density: 1800,
+ stain: 0.35
+};
+elements.gloopy_mud = {
+ color: "#8B4513",
+ behavior: elements.slime.behavior,
+ viscosit: 1950,
+ tempHigh: 56,
+ stateHigh: "liquid",
+ tempLow: 0,
+ category: "liquids",
+ state: "liquid",
+ density: 1000,
+ stain: 0.28
+};
+elements.squelchy_mud = {
+ color: "#8B4513",
+ behavior: elements.slime.behavior,
+ viscosity: 1050,
+ tempHigh: 58,
+ stateHigh: "liquid",
+ tempLow: 0,
+ category: "liquids",
+ state: "liquid",
+ density: 1050,
+ stain: 0.3
+};
+elements.mucky_mud = {
+ color: "#8B4513",
+ behavior: elements.slime.behavior,
+ viscosity: 950,
+ tempHigh: 57,
+ stateHigh: "liquid",
+ tempLow: 0,
+ category: "liquids",
+ state: "liquid",
+ density: 1200,
+ stain: 0.28
+};
+elements.soggy_mud = {
+ color: "#8B4513",
+ behavior: elements.slime.behavior,
+ viscosity: 1050,
+ tempHigh: 58,
+ stateHigh: "liquid",
+ tempLow: 0,
+ category: "liquids",
+ state: "liquid",
+ density: 1090,
+ stain: 0.3
+};
+elements.gunky_mud = {
+ color: "#8B4513",
+ behavior: elements.slime.behavior,
+ viscosity: 900,
+ tempHigh: 55,
+ stateHigh: "liquid",
+ tempLow: 0,
+ category: "liquids",
+ state: "liquid",
+ density: 1550,
+ stain: 0.28
+};
+elements.oozy_mud = {
+ color: "#8B4513",
+ behavior: elements.slime.behavior,
+ viscosity: 950,
+ tempHigh: 56,
+ stateHigh: "liquid",
+ tempLow: 0,
+ category: "liquids",
+ state: "liquid",
+ density: 1000,
+ stain: 0.3
+};
+elements.gooey_mud = {
+ color: "#8B4513",
+ behavior: elements.slime.behavior,
+ viscosity: 1000,
+ tempHigh: 60,
+ stateHigh: "liquid",
+ tempLow: 0,
+ category: "liquids",
+ state: "liquid",
+ density: 1300,
+ stain: 0.3
+};
+elements.goopy_mud = {
+ color: "#8B4513",
+ behavior: elements.slime.behavior,
+ viscosity: 1100,
+ tempHigh: 58,
+ stateHigh: "liquid",
+ tempLow: 0,
+ category: "liquids",
+ state: "liquid",
+ density: 1080,
+ stain: 0.3
+};
+elements.mushy_mud = {
+ color: "#8B4513",
+ behavior: elements.slime.behavior,
+ viscosity: 1000,
+ tempHigh: 60,
+ stateHigh: "liquid",
+ tempLow: 0,
+ category: "liquids",
+ state: "liquid",
+ density: 1200,
+ stain: 0.3
+};
+elements.mud = {
+ color: "#8B4513",
+ behavior: elements.slime.behavior,
+ viscosity: 1050,
+ tempHigh: 58,
+ stateHigh: "liquid",
+ tempLow: 0,
+ category: "liquids",
+ state: "liquid",
+ density: 1000,
+ stain: 0.3
+};
+elements.quicksand = {
+ color: "#DAA520",
+ behavior: elements.slime.behavior,
+ viscosity: 1750,
+ tempHigh: 70,
+ stateHigh: "liquid",
+ tempLow: 0,
+ category: "liquids",
+ state: "liquid",
+ density: 1300,
+ stain: 0.25
+};
+elements.sandy_mud = {
+ color: "#8B4513",
+ behavior: elements.sap.behavior,
+ viscosity: 1600,
+ tempHigh: 60,
+ stateHigh: "liquid",
+ tempLow: 0,
+ category: "liquids",
+ state: "liquid",
+ density: 1100,
+ stain: 0.3
+};
+elements.sticky_quicksand = {
+ color: "#DAA520",
+ behavior:elements.sap.behavior,
+ viscosity: 1700,
+ tempHigh: 65,
+ stateHigh: "liquid",
+ tempLow: 0,
+ category: "liquids",
+ state: "liquid",
+ density: 1100,
+ stain: 0.25
+};
diff --git a/mods/Science_mod.js b/mods/Science_mod.js
index 4c216af2..c2ad9e2c 100644
--- a/mods/Science_mod.js
+++ b/mods/Science_mod.js
@@ -1,10 +1,8 @@
// Science mod for Sandboxels
// (Inspired by survival.js)
-// Build 19
-// By: Lucifer (@a_british_proto (Discord))
-// If there is anything you want to suggest or there's a bug then just dm me on discord
+// Build 21
+// If there is anything you want to suggest or there's a bug then just dm me on discord (@a_british_proto)
// Todo:
-// - Try to get the mod to work by making different ways to craft all the (116) elements in the mod
// - Make new substances that you can get after mixing different elements
// - Make a way to get the different substances by mixing different elements and different substances
// - Create different proporties for the substances (doing now)
@@ -1378,12 +1376,12 @@ substance.Silver_Oxzide = {
substance.Silver_Sulfate = {
behavior: behaviors.WALL,
color: "FFFFFF",
- category: "lands"
+ category: "lands",
state: "solid",
hidden:true
}
-// I have finally gotten my motivation back! :D
+// Decided to just change the console.log to a comment because it got me confused between the github page and VSC
substance.Silver_Selenide = {
behavior: behaviors.WALL,
@@ -1446,27 +1444,66 @@ substance.Aluminum_Diboride = {
hidden:true
}
-// Doing this later as my schools blocked chatgpt and the definition is not on Ptable.com :/
-// substance.Aluminum_Dodecaboride = {
-// behavior: behaviors.NULL,
-// color: "000000",
-// category: "null",
-// state: "null",
-// hidden:true
-// }
+substance.Aluminum_Dodecaboride = {
+ behavior: behaviors.WALL,
+ color: "000000",
+ category: "lands",
+ state: "solid",
+ hidden:true
+}
-// substance.Aluminum_Bromate_Nonahydrate = {
-// behavior: behaviors.NULL,
-// color: "000000",
-// category: "null",
-// state: "null",
-// hidden:true
-// }
+substance.Aluminum_Bromate_Nonahydrate = {
+ behavior: behaviors.WALL,
+ color: "FFFFFF",
+ category: "lands",
+ state: "solid",
+ hidden:true
+}
substance.Aluminum_Tribromide = {
- behavior: behavior.NULL, // It's meant to be a powder but I'm too tired to go look plus I need to go to my next lesson now
+ behavior: behavior.POWDER,
color: "FF0000",
category: "lands",
state: "powder",
hidden:true
}
+
+substance.Aluminum_Bromide_Hexahydrate = {
+ behavior: behaviors.WALL,
+ color: "FFFFFF",
+ category: "lands",
+ state: "solid",
+ hidden:true
+}
+
+substance.Aluminum_Cerium_Oxide = {
+ behavior: behaviors.WALL,
+ color: "FF5E00",
+ category: "lands",
+ state: "solid",
+ hidden:true
+}
+
+substance.Aluminum_Chloride = {
+ behavior: behaviors.WALL,
+ color: "FFFFFF",
+ category: "lands",
+ state: "solid",
+ hidden:true
+}
+
+substance.Aluminum_Chlorohydrate = {
+ behavior: behaviors.POWDER,
+ color: "FFFFFF",
+ category: "lands",
+ state: "powder",
+ hidden:true
+}
+
+substance.Aluminum_Chloride_Hydrate = {
+ behavior: behaviors.WALL,
+ color: "FFFFFF",
+ category: "lands",
+ state: "solid",
+ hidden:true
+}
diff --git a/mods/buildingreplicator.js b/mods/buildingreplicator.js
new file mode 100644
index 00000000..0d7f29fc
--- /dev/null
+++ b/mods/buildingreplicator.js
@@ -0,0 +1,210 @@
+function playSound(soundFile) {
+ var audio = new Audio("https://JustAGenericUsername.github.io/" + soundFile);
+ audio.play();
+ }
+ function reverseObject(obj) {
+ const reversedObj = {};
+ for (const key in obj) {
+ const value = obj[key];
+ reversedObj[value] = key;
+ }
+ return reversedObj;
+}
+let blueprint = [
+ ["0","0","0","0","0","G","G","G","G","G","0","0","0","0","0"],
+ ["0","0","0","G","G","S","W","W","W","S","G","G","0","0","0"],
+ ["0","0","G","W","W","S","W","W","W","S","W","W","G","0","0"],
+ ["0","G","W","W","W","S","0","0","0","S","W","W","W","G","0"],
+ ["0","G","W","W","0","0","0","0","0","0","0","W","W","G","0"],
+ ["G","S","S","S","0","0","0","0","0","0","0","S","S","S","G"],
+ ["G","W","W","0","0","0","0","0","0","0","0","0","W","W","G"],
+ ["G","W","W","0","0","0","0","0","0","0","0","0","W","W","G"],
+ ["G","W","W","0","0","0","0","0","0","0","0","0","W","W","G"],
+ ["G","S","S","S","0","0","0","0","0","0","0","S","S","S","G"],
+ ["0","G","W","W","0","0","0","0","0","0","0","W","W","G","0"],
+ ["0","G","W","W","W","S","0","0","0","S","W","W","W","G","0"],
+ ["0","0","G","W","W","S","W","W","W","S","W","W","G","0","0"],
+ ["0","0","0","G","G","S","W","W","W","S","G","G","0","0","0"],
+ ["0","0","0","0","0","G","G","G","G","G","0","0","0","0","0"]
+]
+let decaybp = [
+ [0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0],
+ [0,2,2,2,2,0,2,2,2,2,2,2,2,3,1,3,0,4,0],
+ [5,2,2,6,6,7,6,6,6,6,6,6,6,8,8,8,8,8,0],
+ [5,2,9,6,6,0,6,0,6,0,6,0,6,9,0,0,0,10,0],
+ [8,2,11,6,6,0,6,0,6,0,6,0,6,8,8,8,8,8,0],
+ [5,2,9,6,6,6,0,0,0,0,0,0,6,9,2,2,0,10,0],
+ [5,2,2,2,9,6,9,9,6,9,9,6,9,9,2,2,0,10,0],
+ [0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,10,0],
+ [0,0,9,9,0,9,9,0,9,0,9,9,0,9,9,2,2,2,2]]
+function getRandomPixelCoordinates(pixel, offsetx, offsety, bp, keyobject) {
+ let x, y, r;
+ let attempts = 0;
+ const maxAttempts = 1000;
+ do {
+ x = Math.floor(Math.random() * bp[0].length);
+ y = Math.floor(Math.random() * bp.length);
+ r = bp[y][x];
+ r = keyobject[r];
+ if (r !== undefined) {
+ attempts++;
+ }
+ if (attempts >= maxAttempts) {
+ return "terminated";
+ }
+ } while (r === undefined || r === 0 || r === "0" || !isEmpty(pixel.x + x - offsetx, pixel.y + y - offsety, true));
+ return { x, y, r };
+}
+
+elements.turn_into = {
+ color: "#000000",
+ behavior: behaviors.WALL,
+ state: "gas",
+ hidden: true,
+ properties: {
+ timer: 8,
+ },
+ category: "special",
+ tick: function(pixel){
+ if (!pixel.turninto){deletePixel(pixel.x, pixel.y); return}
+ if (pixel.timer == 8){pixel.color = pixelColorPick({element: pixel.turninto})}
+ //console.log(elements[pixel.turninto].color)
+ pixel.timer --
+ if (pixel.timer <= 0){
+ deletePixel(pixel.x, pixel.y);
+ createPixel(pixel.turninto, pixel.x, pixel.y);
+ }
+ }
+}
+elements.submitted_blueprint_1_creator = {
+ color: "#64abfd",
+ behavior: behaviors.WALL,
+ state: "solid",
+ category: "special",
+ tick: function(pixel){
+ if(!pixel.done){
+ if (pixelTicks % 3 == 0){
+ let randomcoord = getRandomPixelCoordinates(pixel, 7, 7, blueprint, {G: "glass", S: "steel", W: "silver"});
+ if (randomcoord == "terminated"){pixel.done = true; return;}
+ let rx = pixel.x + randomcoord.x-7;
+ let ry = pixel.y + randomcoord.y-7;
+ playSound("synth.wav")
+ try {
+ createPixel("turn_into", rx, ry);
+ pixelMap[rx][ry].turninto = randomcoord.r;
+ pixelMap[rx][ry].timer = 8;
+ } catch (error) {
+ console.error("Error occurred at coordinates:", rx, ",", ry);
+ console.error("Error message:", error);
+ }
+ }
+ if(pixelTicks == pixel.start){
+ // playSound("nocmusic.mp3")
+ }
+ }
+ }
+}
+elements.submitted_blueprint_2_creator = {
+ color: "#64abfd",
+ behavior: behaviors.WALL,
+ state: "solid",
+ category: "special",
+ tick: function(pixel){
+ if(!pixel.done){
+ if (pixelTicks % 3 == 0){
+ let randomcoord = getRandomPixelCoordinates(pixel, -1, -1, decaybp, {1: "led_r", 2:"porcelain", 3: "glass", 4: "tungsten", 5: "zinc", 6: "aluminum", 7: "copper", 8: "copper", 9: "steel", 10: "bronze", 11: "sterling"});
+ if (randomcoord == "terminated"){pixel.done = true; return;}
+ let rx = pixel.x + randomcoord.x+1;
+ let ry = pixel.y + randomcoord.y+1;
+ playSound("synth.wav")
+ try {
+ createPixel("turn_into", rx, ry);
+ pixelMap[rx][ry].turninto = randomcoord.r;
+ pixelMap[rx][ry].timer = 8;
+ } catch (error) {
+ console.error("Error occurred at coordinates:", rx, ",", ry);
+ console.error("Error message:", error);
+ }
+ }
+ if(pixelTicks == pixel.start){
+ // playSound("nocmusic.mp3")
+ }
+ }
+ }
+}
+elements.custom_bp_spawner = {
+ color: "#64abfd",
+ behavior: behaviors.WALL,
+ state: "solid",
+ category: "special",
+ tick: function(pixel){
+ if(!pixel.done){
+ if (pixelTicks % 3 == 0){
+ let randomcoord = getRandomPixelCoordinates(pixel, -1, -1, customBP, customBPKey);
+ if (randomcoord == "terminated"){pixel.done = true; return;}
+ let rx = pixel.x + randomcoord.x+1;
+ let ry = pixel.y + randomcoord.y+1;
+ playSound("synth.wav")
+ try {
+ createPixel("turn_into", rx, ry);
+ pixelMap[rx][ry].turninto = randomcoord.r;
+ pixelMap[rx][ry].timer = 8;
+ } catch (error) {
+ console.error("Error occurred at coordinates:", rx, ",", ry);
+ console.error("Error message:", error);
+ }
+ }
+ if(pixelTicks == pixel.start){
+ // playSound("nocmusic.mp3")
+ }
+ }
+ }
+}
+var customBP = []
+var customBPKey = {}
+let bpsizeH = 15;
+let bpsizeW = 15;
+let generatedBP = [];
+let seenElements = {};
+elements.bp_scanner = {
+ color: "#64abfd",
+ behavior: behaviors.SOLID,
+ state: "solid",
+ category: "special",
+ onSelect: function(pixel){
+ bpsizeH = prompt("Enter the height of the blueprint. It will be scanned from the TOP LEFT corner.", 15);
+ bpsizeW = prompt("Enter the width of the blueprint", 15);
+ },
+ tick: function(pixel){
+ if(pixelTicks == pixel.start){
+ generatedBP = [];
+ for (let y = 1; y <= bpsizeH; y++){
+ generatedBP.push([]);
+ }
+ let elementCounter = 1;
+ seenElements = {};
+ for (let y = 0; y < bpsizeH; y++){
+ for (let x = 0; x < bpsizeW; x++){
+ if (!isEmpty(pixel.x + x + 1, pixel.y + y + 1, true)){
+ var opElement = pixelMap[pixel.x + x+1][pixel.y + y+1].element;
+ if (!seenElements[opElement]){
+ generatedBP[y].push(elementCounter);
+ seenElements[opElement] = elementCounter;
+ elementCounter++;
+ } else {
+ generatedBP[y].push(seenElements[opElement]);
+ }
+ } else {
+ generatedBP[y].push(0);
+ }
+ }
+ }
+ console.log(generatedBP);
+ console.log(seenElements);
+ deletePixel(pixel.x, pixel.y);
+ customBP = generatedBP;
+ customBPKey = reverseObject(seenElements);
+ }
+ }
+}
+
diff --git a/mods/cash_n_more.js b/mods/cash_n_more.js
new file mode 100644
index 00000000..e267a8f7
--- /dev/null
+++ b/mods/cash_n_more.js
@@ -0,0 +1,58 @@
+elements.cash = {
+ color: "#00e600",
+ behavior: behaviors.POWDER,
+ category: "powders",
+};
+
+delete elements.paper;
+delete elements.sponge;
+
+elements.sponge = {
+ color: "#ffff1a",
+ behavior: behaviors.SOLID,
+ category: "solids",
+ tool: function(pixel) {
+ if (pixel.element == "water") {
+ pixel.element = "wet_sponge"
+ }
+ },
+};
+
+elements.wet_sponge = {
+ color: "#cccc00",
+ behavior: behaviors.SOLID,
+ category: "solids",
+};
+
+
+elements.paper = {
+ color: "#ffffff",
+ behavior: behaviors.SOLID,
+ category: "solids",
+};
+
+elements.shredded_paper = {
+ color: "#ffffff",
+ behavior: behaviors.POWDER,
+ category: "powders",
+};
+
+elements.shredded_cash = {
+ color: "#004d00",
+ behavior: behaviors.POWDER,
+ category: "powders",
+};
+
+elements.shredder = {
+ color: "#08b508",
+ behavior: behaviors.SOLID,
+ tool: function(pixel) {
+ if (pixel.element == "cash") {
+ pixel.element = "shredded_cash"
+ },
+ if (pixel.element == "paper") {
+ pixel.element = "shredded_money"
+ }
+ },
+ category: "tools",
+};
diff --git a/mods/colorLED.js b/mods/colorLED.js
new file mode 100644
index 00000000..ec3a4622
--- /dev/null
+++ b/mods/colorLED.js
@@ -0,0 +1,38 @@
+elements.led = {
+ behavior: behaviors.WALL,
+ reactions: {
+ "light": {"charge1":1},
+ "liquid_light": {"charge1":1},
+ },
+ color: "#666666",
+ colorOn: "#ffffff",
+ category: "machines",
+ tempHigh: 1500,
+ stateHigh: ["molten_glass","molten_glass","molten_glass","molten_gallium"],
+ conduct: 1,
+ breakInto: "glass_shard",
+ tick: (pixel) => {
+ if (pixel.start == pixelTicks) {
+ pixel.normalColor = pixel.color;
+ pixel.chargeColor = `rgb(${pixel.color.replace(/[rgb\(\)]/g, "").split(",").map(a => parseInt(a.trim()) + 120).join(", ")})`;
+ }
+ if (pixel.color != pixel.normalColor && !pixel.charge && !pixel.chargeCD) {
+ pixel.normalColor = pixel.color;
+ pixel.chargeColor = `rgb(${pixel.color.replace(/[rgb\(\)]/g, "").split(",").map(a => parseInt(a.trim()) + 120).join(", ")})`;
+ }
+ if (pixel.charge) {
+ pixel.color = pixel.chargeColor;
+ } else {
+ pixel.color = pixel.normalColor;
+ }
+ }
+}
+
+pixelColorPick = (function() {
+ const oldPixelColorPick = pixelColorPick;
+
+ return function(pixel, customColor = null) {
+ if (pixel.element == "led" && pixel.color && !customColor) return pixel.color;
+ return oldPixelColorPick.apply(this, arguments);
+ }
+})()
\ No newline at end of file
diff --git a/mods/colored_lightbulbs.js b/mods/colored_lightbulbs.js
new file mode 100644
index 00000000..84f8ad85
--- /dev/null
+++ b/mods/colored_lightbulbs.js
@@ -0,0 +1,44 @@
+elements.colored_light_bulb = {
+ color: "#666666",
+ colorOn: "#ffffff",
+ behavior: behaviors.WALL,
+ category: "machines",
+ tempHigh: 1500,
+ stateHigh: ["molten_glass","molten_glass","molten_copper"],
+ conduct: 1,
+ breakInto: "glass_shard",
+ tick: function(pixel) {
+ if (pixel.start == pixelTicks) {
+ pixel.normalColor = pixel.color;
+ pixel.chargeColor = `rgb(${pixel.color.replace(/[rgb\(\)]/g, "").split(",").map(a => parseInt(a.trim()) + 150).join(", ")})`;
+ }
+ if (pixel.color != pixel.normalColor && !pixel.charge && !pixel.chargeCD) {
+ pixel.normalColor = pixel.color;
+ pixel.chargeColor = `rgb(${pixel.color.replace(/[rgb\(\)]/g, "").split(",").map(a => parseInt(a.trim()) + 150).join(", ")})`;
+ }
+ if (pixel.charge) {
+ pixel.color = pixel.chargeColor;
+ } else {
+ pixel.color = pixel.normalColor;
+ }
+ if (pixel.charge > 0) {
+ for (let i = 0; i < adjacentCoords.length; i++){
+ let coord = adjacentCoords[i]
+ let x = coord[0]+pixel.x
+ let y = coord[1]+pixel.y
+ if (isEmpty(x, y)){
+ //do crap to the pixel
+ createPixel("light", x, y,),
+ pixelMap[x][y].color = pixel.chargeColor
+ }
+ }
+ }}
+}
+pixelColorPick = (function() {
+ const oldPixelColorPick = pixelColorPick;
+
+ return function(pixel, customColor = null) {
+ if (pixel.element == "colored_light_bulb" && pixel.color && !customColor) return pixel.color;
+ return oldPixelColorPick.apply(this, arguments);
+ }
+})()
diff --git a/mods/customtemptools.js b/mods/customtemptools.js
new file mode 100644
index 00000000..62c8b239
--- /dev/null
+++ b/mods/customtemptools.js
@@ -0,0 +1,50 @@
+var ct = 100
+
+elements.customtemp = {
+ color: ["#FF0000", "#FF6600", "#FFCC00", "#FFFF00", "#CCFF00", "#66FF00", "#00FF00", "#00FF66", "#00FFCC", "#00FFFF"],
+ onSelect: function() {
+ var answer4 = parseInt(prompt("Please input the desired temperature to reach.",(ct||undefined)));
+ if (!answer4) { return }
+ ct = answer4;
+ if (isNaN(answer4)) {
+ ct = 100
+ }
+ },
+ tool: function(pixel) {
+ pixel.temp = ct,
+ pixelTempCheck(pixel)
+ },
+ category: "tools",
+};
+elements.customheat = {
+ color: ["#FF0000", "#FFFFFF", "#FF0000"],
+ onSelect: function() {
+ var answer4 = parseInt(prompt("Please input the desired temperature increase per tick. (In celsius)",(ct||undefined)));
+ if (!answer4) { return }
+ ct = answer4;
+ if (isNaN(answer4)) {
+ ct = 100
+ }
+ },
+ tool: function(pixel) {
+ pixel.temp = pixel.temp + ct,
+ pixelTempCheck(pixel)
+ },
+ category: "tools",
+};
+elements.customcool = {
+ color: ["#0000FF", "#FFFFFF", "#0000FF"],
+ onSelect: function() {
+ var answer4 = parseInt(prompt("Please input the desired temperature decrease per tick. (In celsius)",(ct||undefined)));
+ if (!answer4) { return }
+ ct = answer4;
+ if (isNaN(answer4)) {
+ ct = 100
+ }
+ },
+ tool: function(pixel) {
+ pixel.temp = pixel.temp - ct,
+ pixelTempCheck(pixel)
+ },
+ category: "tools",
+};
diff --git a/mods/heatglow.js b/mods/heatglow.js
index 8c8dabc0..2293bc77 100644
--- a/mods/heatglow.js
+++ b/mods/heatglow.js
@@ -3,7 +3,7 @@ function weightedAverage(num1, num2, weight){
}
const heatfunc = function(pixel){
if (pixel.element != "metal_scrap" || eLists.metals.includes(pixel.scrapType) || !pixel.scrapType){{
- if (pixel.ogR == null || pixel.ogG == null || pixel.ogB == null || (pixel.element != pixel.ogElement && pixel.element == "metal_scrap") || (pixel.element != "metal_scrap" && pixel.ogElement == "metal_scrap")){
+ if (pixel.ogR == null || pixel.ogG == null || pixel.ogB == null || (pixel.element != pixel.ogElement && pixel.element == "metal_scrap") || (pixel.element != "metal_scrap" && pixel.ogElement == "metal_scrap") || (pixel.element == "oxidized_copper" && pixel.ogElement == "copper")){
pixel.ogR = parseInt(pixel.color.slice(4, pixel.color.indexOf(',')), 10)
pixel.ogG = parseInt(pixel.color.slice(pixel.color.indexOf(',') + 1, pixel.color.lastIndexOf(',')), 10)
pixel.ogB = parseInt(pixel.color.slice(pixel.color.lastIndexOf(',') + 1, -1), 10)
diff --git a/mods/nousersthings.js b/mods/nousersthings.js
index 59e7028e..524b532e 100644
--- a/mods/nousersthings.js
+++ b/mods/nousersthings.js
@@ -1798,6 +1798,7 @@ elements.invisiblewall = {
category: "solids",
movable: false,
noMix: true,
+ hardness: 1,
},
elements.bismuth = {
color: ["#818181","#989898","#b0b0b0","#c9c9c9"],
diff --git a/mods/potato_chips.js b/mods/potato_chips.js
new file mode 100644
index 00000000..c1beeb75
--- /dev/null
+++ b/mods/potato_chips.js
@@ -0,0 +1,44 @@
+elements.potato_chip = {
+ behavior: behaviors.STURDYPOWDER,
+ state: "solid",
+ density: 1350,
+ color: ["#F7DD93", "#D8A44B"],
+ category: "food",
+ desc: "Potato chip. Turns potato next to it into potato chip if temp is >= 104 - 180.",
+
+ tick: function(pixel) {
+ if(pixelTicks - pixel.start >= 10) {
+ if (!isEmpty(pixel.x, pixel.y - 1, true)) {
+ if (pixel.temp >= 104 && pixelMap[pixel.x][pixel.y - 1].element === "potato") {
+ changePixel(pixelMap[pixel.x][pixel.y - 1], "potato_chip");
+ }
+ }
+ if (!isEmpty(pixel.x, pixel.y + 1, true)) {
+ if (pixel.temp >= 104 && pixelMap[pixel.x][pixel.y + 1].element === "potato") {
+ changePixel(pixelMap[pixel.x][pixel.y + 1], "potato_chip");
+ }
+ }
+ if (!isEmpty(pixel.x - 1, pixel.y, true)) {
+ if (pixel.temp >= 104 && pixelMap[pixel.x - 1][pixel.y].element === "potato") {
+ changePixel(pixelMap[pixel.x - 1][pixel.y], "potato_chip");
+ }
+ }
+ if (!isEmpty(pixel.x + 1,pixel.y, true)) {
+ if (pixel.temp >= 104 && pixelMap[pixel.x + 1][pixel.y].element === "potato") {
+ changePixel(pixelMap[pixel.x + 1][pixel.y], "potato_chip");
+ }
+ }
+ }
+ }
+}
+
+elements.sunflower_oil = {
+ behavior: behaviors.LIQUID,
+ color: ["#FFFFCC", "#FFFF99", "#FFFF66", "#FFFF33", "#FFFF00", "#FFCC00"],
+ viscosity: 63,
+ category: "food",
+ state: "liquid",
+ reactions: {
+ "potato": {elem2: "potato_chip", tempMin: 140},
+ }
+}
diff --git a/mods/scp.js b/mods/scp.js
index bdc51970..4792e6f4 100644
--- a/mods/scp.js
+++ b/mods/scp.js
@@ -253,7 +253,6 @@ elements.mask_head = {
burnTime: 250,
burnInto: "possessive_mask",
breakInto: "possessive_mask",
- forceSaveColor: true,
reactions: {
"cancer": { elem1: "possessive_mask", chance:0.05 },
"tea": { elem2:null, chance:0.2 },
@@ -429,6 +428,7 @@ elements.plague_doctor = {
createPixel("doc_head", pixel.x, pixel.y-1);
pixelMap[pixel.x][pixel.y-1].color = pixel.color;
pixel.element = "doc_body";
+ pixel.color = pixelColorPick(pixel)
}
else {
deletePixel(pixel.x, pixel.y);
@@ -593,7 +593,6 @@ elements.doc_body = {
burn: .01,
burnTime: 300,
burnInto: "rotten_meat",
- forceSaveColor: true,
reactions: {
"head": { elem2 : "z_head" , chance:0.3},
"body": { elem2 : "z_body" , chance:0.3},
@@ -869,9 +868,11 @@ elements.shy_head = {
burnTime: 3000,
burnInto: "bone",
reactions: {
- "homunculus": { elem2 : ["blood","slime","blood","slime","rotten_meat",null] },
- "head": { elem2 : ["blood","blood","blood","bone",null] },
- "body": { elem2: ["blood","blood","meat","bone",null] },
+ "homunculus": { elem2 : ["blood","slime","blood","slime","rotten_meat",null] },
+ "head": { elem2 : ["blood","blood","blood","bone",null] },
+ "body": { elem2: ["blood","blood","meat","bone",null] },
+ "z_head": { elem2 : ["infection","infection","infection","bone",null] },
+ "z_body": { elem2: ["infection","infection","rotten_meat","bone",null] },
"rat": { elem2: ["infection","rotten_meat",null]},
"frog": { elem2: ["slime",null] },
"cell": { elem2: ["dna","water",null] },
@@ -986,10 +987,12 @@ elements.shy_body = {
burnInto: "bone",
forceSaveColor: true,
reactions: {
- "homunculus": { elem2 : ["blood","slime","blood","slime","rotten_meat",null] },
- "head": { elem2 : ["blood","blood","blood","meat","bone",null] },
- "body": { elem2: ["blood","blood","meat","bone",null] },
- "rat": { elem2: ["infection","rotten_meat"]},
+ "homunculus": { elem2 : ["blood","slime","blood","slime","rotten_meat",null] },
+ "head": { elem2 : ["blood","blood","blood","bone",null] },
+ "body": { elem2: ["blood","blood","meat","bone",null] },
+ "z_head": { elem2 : ["infection","infection","infection","bone",null] },
+ "z_body": { elem2: ["infection","infection","rotten_meat","bone",null] },
+ "rat": { elem2: ["infection","infection","plague"] },
"frog": { elem2: "slime" },
"cell": { elem2: ["dna","water",null] },
"cancer": { elem2: ["dna","dirty_water"] },
@@ -1007,11 +1010,12 @@ elements.SCP_682 = {
category: "scp",
density: 7500,
reactions: {
- "head": { elem2 : ["bone","blood",null] , chance:10 },
- "body": { elem1 : "mad_682" , elem2 : ["meat","blood",null] , chance:10 },
- "z_head": { elem2 : ["bone","infection",null] , chance:10 },
- "z_body": { elem1 : "mad_682" , elem2 : ["rotten_meat","infection",null] , chance:10 },
- "homunculus": { elem2 : ["slime","blood",null] , chance:10 },
+ "head": { elem2 : ["bone","blood",null] , chance:50 },
+ "body": { elem1 : "mad_682" , elem2 : ["meat","blood",null] , chance:50 },
+ "z_head": { elem2 : ["infection","infection","infection","bone",null] , chance:50 },
+ "z_body": { elem1 : "mad_682" , elem2: ["infection","infection","rotten_meat","bone",null] , chance:50 },
+ "homunculus": { elem2 : ["slime","blood",null] , chance:10 },
+ "rat": { elem2: ["infection","infection","plague"] },
"frog": { elem2 : ["slime","blood",null] , chance:10 },
"bird": { elem2 : ["feather","blood",null] , chance:10 },
"meat": { elem2 : null , chance:0.2 },
@@ -1072,6 +1076,8 @@ elements.mad_682 = {
reactions: {
"head": { elem2 : ["bone","blood",null] },
"body": { elem2 : ["meat","blood",null] },
+ "z_head": { elem2 : ["bone","infection",null] },
+ "z_body": { elem2 : ["meat","infection",null] },
"homunculus": { elem2 : ["slime","blood",null] },
"frog": { elem2 : ["slime","blood",null] },
"bird": { elem2 : ["feather","blood",null] },
@@ -1223,4 +1229,4 @@ elements.hyper_tickle_monster = {
stain: 0.08,
};
-// SCPs with ID over 999 here
\ No newline at end of file
+// SCPs with ID over 999 here
diff --git a/mods/spaceship.js b/mods/spaceship.js
new file mode 100644
index 00000000..3602462e
--- /dev/null
+++ b/mods/spaceship.js
@@ -0,0 +1,138 @@
+elements.power_core = {
+ color: ["#10F7F3", "#5AEDEB", "#BDFCFB"],
+ behavior: behaviors.WALL,
+ temp: 250,
+ category: "special",
+ stateHigh: "n_explosion",
+ tempHigh: 9500,
+ state: "solid",
+ desc: "The power core for your spaceship! Make sure it doesnt reach 9500 degrees!" ,
+ tick: function(pixel) {
+ const elementToCheck = "core_casing";
+let isValid = true;
+for (let i = pixel.x - 4; i < pixel.x + 4; i++) {
+ for (let j = pixel.y - 4; j < pixel.y + 4; j++) {
+ if (Math.abs(pixel.x - i) === 4 || Math.abs(pixel.y - j) === 4) {isValid &= pixelMap[i][j]?.element === elementToCheck;}
+ else if (i !== pixel.x && j !== pixel.y) isValid &= isEmpty(i, j);
+ }
+}
+// if (!pixel.alerted) {
+ // if (isValid) { alert("Power Core succesfully stored") }
+ // else { alert("Invalid core! Make sure its a 9x9 hollow box with the pixel in the middle!"); }
+ // pixel.alerted = true;
+// } Not finished Yet
+if (pixel.temp === 5000) { pixel.color = pixelColorPick(pixel,"#F92810");}
+ else if ( pixel.temp < 2000) { pixel.color = pixelColorPick(pixel,"#F9B610");}
+ else { pixel.color = pixelColorPick(pixel,"#5AEDEB");}
+ if (isValid) { if (pixelMap[pixel.x][pixel.y-4].element === "core_casing")
+ {createPixel("core_energizer", pixel.x, pixel.y-5);}}
+ else {{createPixel("core_energizer", pixel.x, pixel.y-4);}
+ }
+},
+};
+elements.thrusters = {
+ color: ["#8D8D8C", "#666666"],
+ behavior: behaviors.WALL,
+ category: "special",
+ behaviorOn: [
+ "XX|XX|XX",
+ "XX|XX|CR:fire",
+ "XX|XX|XX",
+ ],
+ state: "solid",
+ desc: "Use this to drive your ship! (Cosmetic)",
+ conduct:1,
+};
+elements.core_wall = {
+ color: ["#6EB5F1", "#708494"],
+ behavior: behaviors.WALL,
+ hardness: 1,
+ density: 90000000,
+ desc: "Harder than anything in the world!",
+ category: "special",
+};
+elements.space_blaster = {
+ color: ["#10F7F3", "#5AEDEB", "#BDFCFB"],
+ tick: function(pixel) {
+ for (var i = 0; i < 3; i++) {
+ var skip = false;
+ if (!isEmpty(pixel.x,pixel.y-1,true)) {
+ var p = pixelMap[pixel.x][pixel.y-1];
+ if (p.element === "space_blaster") { skip = true; }
+ if (Math.random() < 0.9 && elements[p.element].hardness !== 1) {
+ deletePixel(p.x,p.y);
+ }
+ }
+ if (!tryMove(pixel,pixel.x-1,pixel.y,["flash","heat_ray","electric"]) && !skip) {
+ explodeAt(pixel.x,pixel.y,30,"plasma");
+ var coords = circleCoords(pixel.x,pixel.y,15);
+ coords.forEach(function(coord) {
+ var x = coord.x;
+ var y = coord.y;
+ if (!isEmpty(x,y,true)) {
+ pixelMap[x][y].temp += 10000;
+ pixelTempCheck(pixelMap[x][y]);
+ }
+ })
+ deletePixel(pixel.x,pixel.y);
+ return;
+ }
+ }
+ },
+ category: "energy",
+ state: "solid",
+ density: 100000000,
+ temp: 10000,
+ hardness: 1,
+ maxSize: 3,
+ cooldown: defaultCooldown,
+ excludeRandom: true,
+ desc: "A energized blaster pixel",
+};
+elements.space_gunner_LEFT = {
+ color: ["#708494", "#5A6873"],
+ behavior: behaviors.WALL,
+ category: "special",
+ behaviorOn: [
+ "XX|XX|XX",
+ "CR:space_blaster|XX|XX",
+ "XX|XX|XX",
+ ],
+ state: "solid",
+ desc: "Use this to shoot your enemies! (Shoots Left)",
+ conduct:1,
+};
+elements.space_gunner_RIGHT = {
+ color: ["#708494", "#5A6873"],
+ behavior: behaviors.WALL,
+ category: "special",
+ behaviorOn: [
+ "XX|XX|XX",
+ "XX|XX|CR:space_blaster",
+ "XX|XX|XX",
+ ],
+ state: "solid",
+ desc: "Use this to shoot your enemies! (Shoots Right)",
+ conduct:1,
+};
+elements.core_energizer = {
+ color: "#FFFB00",
+ hidden: true,
+ behavior: behaviors.WALL,
+ state: "solid",
+ tick: function(pixel) {
+ createPixel("radiation", pixel.x, pixel.y+1)
+ },
+};
+elements.core_casing = {
+ color: ["#4A7375","#C1D875","#8BFCF3"],
+ reactions: {
+ "radiation": { elem2:"electric", temp1:200 }
+ },
+ behavior: behaviors.WALL,
+ category: "special",
+ density: 2710,
+ conduct: 0.73,
+ hardness: 1,
+ desc: "Casing for the inner core!",
+ };
\ No newline at end of file
diff --git a/mods/texturepack.js b/mods/texturepack.js
new file mode 100644
index 00000000..fdb9de06
--- /dev/null
+++ b/mods/texturepack.js
@@ -0,0 +1,94 @@
+if (!settings.texturepack){
+ settings.texturepack = {}
+ saveSettings()
+}
+elements.clear_textures = {
+ color: "#dd0000",
+ onSelect: function(){
+ var sure = prompt("Are you sure you wanna reset all texture data? Type \"yes\". Also, refresh once you've done this for the changes to apply!", "no");
+ if (sure == "yes"){
+ settings.texturepack = {}
+ saveSettings()
+ }
+ },
+ canPlace: false,
+ category: "texture tools"
+}
+var addSave = null
+elements.add_texture = {
+ color: elements.rainbow.color,
+ category: "texture tools",
+ canPlace: false,
+ onSelect: function(){
+ var whoelement = prompt("What element would you like to change the texture of? Type no if this was a mistake.", (addSave||"no"))
+ if (whoelement != "no"){
+ addSave = whoelement
+ var replacehm = prompt("Would you like to overwrite all textures or add? 1 for overwrite, 2 for add.", 2)
+ var colortodo = prompt("Hex code, please! Also, refresh once you've done this for the changes to apply!", "#ff0000")
+ if (replacehm == 1){
+ if (!replacehm || !colortodo){return}
+ if (!settings.texturepack[whoelement]){settings.texturepack[whoelement] = []}
+ settings.texturepack[whoelement] = [colortodo]
+ elements[whoelement].color = settings.texturepack[whoelement]
+ saveSettings()
+ } else {
+ if (!replacehm || !colortodo){return}
+ if (!settings.texturepack[whoelement]){settings.texturepack[whoelement] = []}
+ settings.texturepack[whoelement].push(colortodo)
+ elements[whoelement].color = settings.texturepack[whoelement]
+ saveSettings()
+ }
+ }
+ }
+}
+elements.remove_a_texture = {
+ color: elements.void.color,
+ category: "texture tools",
+ canPlace: false,
+ onSelect: function(){
+ var whoelement = prompt("What element would you like to change the texture of? Type no if this was a mistake.", "no")
+ if (whoelement != "no"){
+ var replacehm = prompt("Would you like to delete all textures of the element or just one? Type 1 for all, 2 for just one.", 2)
+ var colortodo = prompt(("Ignore this if you chose 1. Index of the color you wanna delete. For reference, here are the current colors:" + settings.texturepack[whoelement]), 0)
+ if (replacehm == 1){
+ delete settings.texturepack[whoelement]
+ saveSettings()
+ } else {
+ delete settings.texturepack[whoelement][colortodo]
+ elements[whoelement].color = settings.texturepack[whoelement]
+ saveSettings()
+ }
+ }
+ }
+}
+elements.list_all_textures = {
+ color: elements.mix.color,
+ category: "texture tools",
+ canPlace: false,
+ onSelect: function(){
+ var whoelement = prompt("What element would you like to see the textures of?")
+ alert(whoelement + " has the following textures: " + settings.texturepack[whoelement])
+ }
+}
+elements.texture_pack_share_or_load = {
+ color: elements.image.color,
+ category: "texture tools",
+ canPlace: false,
+ onSelect: function(){
+ var whichSL = prompt("Would you like to copy the texture pack to your clipboard or load it from your clipboard? Type 1 for copy, 2 for load.", 1)
+ if (whichSL == 1){
+ var text = JSON.stringify(settings.texturepack)
+ alert(text)
+ } else {
+ var text = prompt("Paste your texture pack here. It should be in the format of a JSON object.")
+ if (text){
+ settings.texturepack = JSON.parse(text)
+ saveSettings()
+ }
+ }
+ }
+}
+if (settings.texturepack){
+for (var elementi in settings.texturepack){
+ elements[elementi].color = settings.texturepack[elementi]
+}}
\ No newline at end of file