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!

@@ -16258,10 +16259,10 @@ Cancer, Landmine, Grenade, Smoke Grenade">? + --> +

Support development by subscribing on our Patreon! Many benefits!!

@@ -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: HelpTipsModsMobileOfflinePrivacy

Thanks to: Serioustar, ggod, Midi_png, personman, fnl4y, PitsPower, swagg boi, kaeud, WeiChei, Trent, u2ce

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.jsBeta for explosion velocity, and later wind, which may come to the base game in the futureR74n Tools & Settings -adjustablepixelsize.jsAllows you to set the pixelSize with a URL parameterAlice + betaworldgen.jsadds a more advanced world generation to the gameAdora betterModManager.jsImprovements to the Mod Managerggod betterSettings.jsAdds additional settings and functionalityggod betterStats.jsSeparate “real” and “set” TPS, meaning you can see what the TPS actually is, instead of only seeing what it’s set tomollthecoder +buildingreplicator.jsScans and replicates builds anywhere on the screen, along with some preset submitted buildsnousernamefound change.jsAdds a tool that only replaces existing pixelsAlice color_tools.jsAdds tools that manipulate colorsAlice controllable_pixel_test.jsAdds 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.jsAdds the ability to save and load scenes from files (See the info page of the element)Alice selective_paint.jsAdds a tool to paint only selected elementsSquareScreamYT stripe_paint.jsAdds a tool to paint with stripesAlice +texturepack.jsAdds tools that let you create and share custom texture packsnousernamefound the_ground.jsAdds several rock types, worldgen settings, and gemstonesAlice Science & Chemistry alcohol.jsAdds methanol, (iso-)propanol, and butanolAlice alkahest.jsAdds the alkahest, a liquid which dissolves anythingAlice -aScientistsWish.jsAdds things that related to science, especially radiationCarbon Monoxide, CPU +aScientistsWish.jsAdds things that related to science, especially radiationCarbon Monoxide, salmonfishy bettermetalscrap.jsAllows metal scrap to be melted back into its original materialnousernamefound bigger_star_spawners.jsAdds spawners for larger starsAlice bioooze_and_pyrogens.jsAdds Bio-Ooze from Frackin’ Universe and several heat-producing materials from various games’ modsAlice @@ -224,13 +226,15 @@ Food & Cooking aChefsDream.jsAdds more foods, animals, tools and many other cooking related items. Updates can be found in this YouTube PlaylistSquareScreamYT aChefsDream_beta.jsBeta testing for aChefsDream. The code can be found on GitHubSquareScreamYT -bananas.jsAdds bananas and banana plantsAlice +bananas.jsAdds bananas and banana plantsAlice' +CherrySoda.jsAdds materials to make Cherry soda. Benzaldehyde + seltzer = Cherrysoda.guzzo86 community_desserts.jsAdds various desserts from community suggestionsTisquares greenitemsandmore.jsAdds various green things, including apples and more foodzonneschijn7 ketchup_mod.jsAdds a bunch of ketchup related stuff, plus a few other condimentsNubo318 (main dev), Devi, Alice (contributors) lemonade.jsAdds lemons and lemonadepersonman / baconthemyth morefoodsmod.jsAdds more foodsClide4 pizzasstuff.jsNew animals, foods, and plants_ilikepizza_ +potato_chips.jsPotato chips.guzzo86 sbstuff.jsAdds many foodsstefanblox soups.jsAdds seasoning and souppixelegend4 weAllScreamFor.jsAdds ice cream toppingsrottenEgghead 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