diff --git a/lang/es.json b/lang/es.json
index 31123ab2..5d54b999 100644
--- a/lang/es.json
+++ b/lang/es.json
@@ -153,7 +153,7 @@
"ammonia":"amoníaco",
"liquid_ammonia":"liquido_de_amoníaco",
"carbon_dioxide":"dióxido_de_carbono",
-"oil":"aceite ",
+"oil":"aceite",
"lamp_oil":"aceite_de_lampara",
"propane":"propano",
"methane":"metano",
@@ -198,7 +198,7 @@
"slow_cloner":"clonador_lento",
"clone_powder":"polvo_de_clone",
"floating_cloner":"clonador_flotante",
-"virus":"virus ",
+"virus":"virus",
"ice_nine":"hielo_nueve",
"strange_matter":"asunto_extraño",
"permafrost":"permafrost",
@@ -241,7 +241,7 @@
"bronze":"bronce",
"sterling":"libra_esterliina",
"gallium":"galio",
-"molten_gallium":"galion_fundido",
+"molten_gallium":"galio_fundido",
"gallium_gas":"gas_galio",
"rose_gold":"oro_rosa",
"purple_gold":"oro_purpura",
@@ -277,7 +277,7 @@
"rotten_cheese":"queso_podrido",
"chocolate":"chocolate",
"grape":"uva",
-"vinegar":"vinagre ",
+"vinegar":"vinagre",
"herb":"hierba",
"lettuce":"lechuga",
"pickle":"pepinillo",
@@ -406,121 +406,121 @@
"neutron":"neutrón",
"proton":"protón ",
"electric":"electrico",
-"uranium":"",
-"molten_uranium":"",
-"diamond":"",
-"gold_coin":"",
-"rust":"",
-"oxidized_copper":"",
-"alga":"",
-"metal_scrap":"",
-"glass_shard":"",
-"rad_shard":"",
-"brick_rubble":"",
-"baked_clay":"",
-"clay_shard":"",
-"porcelain_shard":"",
-"feather":"",
-"confetti":"",
-"glitter":"",
-"bead":"",
-"color_sand":"",
-"borax":"",
-"epsom_salt":"",
-"potassium_salt":"",
-"sodium_acetate":"",
-"lightning":"",
-"bless":"",
-"god_ray":"",
-"heat_ray":"",
-"explosion":"",
-"n_explosion":"",
-"supernova":"",
-"pop":"",
-"cook":"",
-"incinerate":"",
-"room_temp":"",
-"positron":"",
-"tnt":"",
-"c4":"",
-"grenade":"",
-"dynamite":"",
-"gunpowder":"",
-"ember":"",
-"firework":"",
-"fw_ember":"",
-"nuke":"",
-"h_bomb":"",
-"dirty_bomb":"",
-"emp_bomb":"",
-"nitro":"",
-"greek_fire":"",
-"fireball":"",
-"rocket":"",
-"cold_bomb":"",
-"hot_bomb":"",
-"antimatter_bomb":"",
-"party_popper":"",
-"flashbang":"",
-"flash":"",
-"smoke_grenade":"",
-"landmine":"",
-"armageddon":"",
-"tesla_coil":"",
-"light_bulb":"",
-"shocker":"",
-"pressure_plate":"",
-"primordial_soup":"",
-"molten_slag":"",
-"molten_dirt":"",
-"debug":"reydeporvida",
-"prop":"",
-"salt_ice":"",
-"sugar_ice":"",
-"seltzer_ice":"",
-"dirty_ice":"",
-"pool_ice":"",
-"blood_ice":"",
-"antibody_ice":"",
-"infection_ice":"",
-"unknown":"",
-"slime_ice":"",
-"antiice":"",
-"ammonia_ice":"",
-"liquid_propane":"",
-"methane_ice":"",
-"molten_brick":"",
-"acid_ice":"",
-"soda_ice":"",
-"molten_steel":"",
-"molten_brass":"",
-"molten_bronze":"",
-"molten_sterling":"",
-"molten_rose_gold":"",
-"molten_purple_gold":"",
-"molten_blue_gold":"",
-"molten_electrum":"",
-"molten_pyrite":"",
-"broth_ice":"",
-"frozen_vinegar":"",
-"sauce_ice":"",
-"alcohol_ice":"",
-"bleach_ice":"",
-"chlorine_ice":"",
-"frozen_ink":"",
-"tea_ice":"",
-"coffee_ice":"",
-"hydrogen_ice":"",
-"oxygen_ice":"",
-"molten_amalgam":"",
-"neon_ice":"",
-"cyanide_ice":"",
-"molten_copper_sulfate":"",
-"molten_alga":"",
-"molten_metal_scrap":"",
-"molten_borax":"",
-"molten_epsom_salt":"",
-"molten_potassium_salt":"",
+"uranium":"uranio",
+"molten_uranium":"uranio_fundido",
+"diamond":"diamante",
+"gold_coin":"moneda_de_oro",
+"rust":"óxido",
+"oxidized_copper":"cobre_oxidado",
+"alga":"aluminio_galio",
+"metal_scrap":"chatarra",
+"glass_shard":"fragmento_de_vidrio",
+"rad_shard":"fragmento_de_vidrio_rad",
+"brick_rubble":"escombros_de_ladrillo",
+"baked_clay":"arcilla_horneado",
+"clay_shard":"fragmento_de_arcilla",
+"porcelain_shard":"fragmento_de_porcelina",
+"feather":"pluma",
+"confetti":"confetti",
+"glitter":"brillo",
+"bead":"cuenta",
+"color_sand":"arena_de_color",
+"borax":"bórax",
+"epsom_salt":"sal_de_epsom",
+"potassium_salt":"sal_de_potassio",
+"sodium_acetate":"acetato_sodio",
+"lightning":"relampago",
+"bless":"bendecir",
+"god_ray":"rayo_de_dios",
+"heat_ray":"rayo_de_calor",
+"explosion":"explosión",
+"n_explosion":"explosión_n",
+"supernova":"supernova",
+"pop":"estallido",
+"cook":"cocinar",
+"incinerate":"incinerar",
+"room_temp":"temp_ambiente",
+"positron":"positrón",
+"tnt":"tnt",
+"c4":"c4",
+"grenade":"grenada",
+"dynamite":"dinamita",
+"gunpowder":"polvóra",
+"ember":"ascua",
+"firework":"fuego_artificiale",
+"fw_ember":"ascua_fa",
+"nuke":"bomba_nuclear",
+"h_bomb":"bomba_h",
+"dirty_bomb":"bomba_sucio",
+"emp_bomb":"bomba_de_iem",
+"nitro":"nitróglicerina",
+"greek_fire":"fuego_griego",
+"fireball":"bola_de_fuego",
+"rocket":"cohete",
+"cold_bomb":"bomba_de_frio",
+"hot_bomb":"bomba_de_calor",
+"antimatter_bomb":"bomba_antimaterio",
+"party_popper":"aguafiestas",
+"flashbang":"bomba_de_destello",
+"flash":"destello",
+"smoke_grenade":"granada_de_humo",
+"landmine":"mina",
+"armageddon":"armagedón",
+"tesla_coil":"bobina_de_tesla",
+"light_bulb":"foco",
+"shocker":"choquedor",
+"pressure_plate":"placa_de_presión",
+"primordial_soup":"sopa_primordial",
+"molten_slag":"escoria_fundido",
+"molten_dirt":"tierra_fundido",
+"debug":"depurar",
+"prop":"prop",
+"salt_ice":"hielo_de_sal",
+"sugar_ice":"hielo_de_azúcar",
+"seltzer_ice":"hielo_carbonado",
+"dirty_ice":"hielo_sucio",
+"pool_ice":"hielo_clorado",
+"blood_ice":"sangre_congelado",
+"antibody_ice":"anticuerpo_congelado",
+"infection_ice":"infección_congelado",
+"unknown":"desconocido",
+"slime_ice":"limo_congelado",
+"antiice":"antihielo",
+"ammonia_ice":"hielo_de_ammonia",
+"liquid_propane":"propano_líquido",
+"methane_ice":"hielo_methano",
+"molten_brick":"ladrillo_fundido",
+"acid_ice":"acido_congelado",
+"soda_ice":"soda_congelado",
+"molten_steel":"acero_fundido",
+"molten_brass":"latón_fundido",
+"molten_bronze":"bronce_fundido",
+"molten_sterling":"esterlina_fundido",
+"molten_rose_gold":"oro_rosa_fundido",
+"molten_purple_gold":"oro_purpula_fundido",
+"molten_blue_gold":"oro_azúl_fundido",
+"molten_electrum":"electro_fundido",
+"molten_pyrite":"pirita_fundido",
+"broth_ice":"caldo_congelado",
+"frozen_vinegar":"vinagre_congelado",
+"sauce_ice":"salsa_congelado",
+"alcohol_ice":"alcohol_congelado",
+"bleach_ice":"lejía_congelado",
+"chlorine_ice":"cloro_congelado",
+"frozen_ink":"tinta_congelado",
+"tea_ice":"té_congelado",
+"coffee_ice":"café_congelado",
+"hydrogen_ice":"hidrógeno_congelado",
+"oxygen_ice":"oxígeno_congelado",
+"molten_amalgam":"amalgama_fundido",
+"neon_ice":"neón_congelado",
+"cyanide_ice":"ciaruno_congelado",
+"molten_copper_sulfate":"cobre_sulfató_fundido",
+"molten_alga":"aluminio_galio_fundido",
+"molten_metal_scrap":"chatarra_fundido",
+"molten_borax":"bórax_fundido",
+"molten_epsom_salt":"sal_de_epsom_fundido",
+"molten_potassium_salt":"sal_de_potassio_fundido",
"molten_sodium_acetate":"",
"frozen_nitro":"",
"cured_meat": "",
@@ -540,4 +540,4 @@
"blaster": "",
"propane_ice": "",
"molten_caustic_potash": ""
-}
\ No newline at end of file
+}
diff --git a/mod-list.html b/mod-list.html
index 83e5553f..be9438b4 100644
--- a/mod-list.html
+++ b/mod-list.html
@@ -136,6 +136,7 @@
| evenmoretemptools.js | Adds different temperature-modifying tools (±350/tick, NaN, and Infinity) | Alice |
| extra_element_info.js | Adds descriptions to various vanilla elements. Used to provide the functionality that desc now does before it was added to vanilla | Melecie |
| find.js | Adds a find mode that highlights a chosen element as pulsating red and yellow (read commit description) | Alice |
+| jaydsfunctions.js | Adds extra tools | Jayd |
| insane_random_events.js | Massively buffs random events | Alice |
| invertscroll.js | Inverts the scroll wheel for adjusting brush size | SquareScreamYT |
| mobile_shift.js | Adds a button for shift on mobile | SquareScreamYT |
@@ -157,7 +158,7 @@
| 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 |
@@ -221,23 +222,23 @@
| more_breaking.js | Allows for breaking more elements in explosions | Alice |
| rays.js | Adds more Ray types | Alice |
| rays++.js | Adds a couple more rays | uptzik |
-| weapons.js | Adds some extra weapons | Jayd |
+| weapons.js | Adds varieties of different weapons | Jayd |
| 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 |
+| 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 |
-| CherrySoda.js | Adds materials to make Cherry soda. Benzaldehyde + seltzer = Cherrysoda. | guzzo86 |
-| GrapeSoda.js | Adds materials to make Grape soda. Methylanthranilate + seltzer = Grapesoda. | guzzo86 |
| Life & Nature |
| advanced_colonies.js | Adds davlers, creatures with complex colonies | DaviStudios |
diff --git a/mods/CherrySoda.js b/mods/CherrySoda.js
index 98475765..2561b7e7 100644
--- a/mods/CherrySoda.js
+++ b/mods/CherrySoda.js
@@ -65,7 +65,7 @@ elements.cherrysoda_gas = {
temp: 169,
}
elements.cherrysoda_ice = {
- color: "BF4F9C",
+ color: "#BF4F9C",
behavior: behaviors.wALL,
category: "solids",
state: "solid",
diff --git a/mods/GrapeSoda.js b/mods/GrapeSoda.js
index 5716aeac..1d67b1db 100644
--- a/mods/GrapeSoda.js
+++ b/mods/GrapeSoda.js
@@ -45,7 +45,6 @@ elements.anthranilicacid = {
tempLow: -98,
burn: 100,
burnTime: 100,
- burnInto: "carbondioxide"
}
elements.methanolice = {
@@ -68,6 +67,8 @@ elements.anthranilicacid = {
stateLow: "methanol",
tempLow: 64,
temp: 84,
+ burn: 100,
+ burnTime: 100,
}
elements.methylanthranilate = {
color: "#FFFBBA",
diff --git a/mods/Lab.js b/mods/Lab.js
new file mode 100644
index 00000000..f759f1c4
--- /dev/null
+++ b/mods/Lab.js
@@ -0,0 +1,233 @@
+elements.lab = {
+ color: "#ff0000",
+ behaviorOn: behaviors.WALL,
+ behavior: [
+ "CR:wall|CR:wall|CR:wall|CR:wall|CR:wall|CR:wall|CR:wall|CR:wire|CR:wire|CR:wire|CR:wall|CR:wall|CR:wall|CR:wall|CR:wall|CR:wall|CR:wall|CR:wall|CR:wall|CR:wall|CR:wall|CR:wall|CR:wall|CR:wall",
+ "CR:wall|DL|XX|XX|XX|XX|XX|CR:e_cr|CR:wall|CR:sensor|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|CR:wall",
+ "CR:wall|XX|XX|XX|XX|XX|XX|XX|CR:glass|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|CR:wall",
+ "CR:wall|XX|XX|XX|XX|XX|XX|XX|CR:glass|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|CR:wall",
+ "CR:wall|CR:wall|CR:wall|CR:wall|XX|CR:wall|CR:wall|CR:wall|CR:wall|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|CR:wall",
+ "CR:wall|XX|XX|XX|XX|XX|XX|XX|CR:wall|CR:wall|CR:wall|CR:wire|xx|CR:wall|XX|XX|XX|XX|XX|XX|XX|XX|XX|CR:wall",
+ "CR:wall|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|CR:ecloner|XX|CR:wall|XX|XX|XX|XX|XX|XX|XX|XX|XX|CR:wall",
+ "CR:wall|XX|XX|XX|XX|XX|XX|XX|CR:wall|CR:wall|CR:wall|CR:wire|CR:wall|CR:wall|XX|XX|XX|XX|XX|XX|XX|XX|XX|CR:wall",
+ "CR:wall|XX|XX|XX|XX|XX|XX|XX|CR:glass|XX|XX|CR:sensor|CR:wall|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|CR:wall",
+ "CR:wall|XX|XX|XX|XX|XX|XX|XX|CR:glass|XX|XX|XX|CR:wall|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|CR:wall",
+ "CR:wall|XX|XX|XX|XX|XX|XX|XX|CR:wall|CR:wall|XX|CR:wall|CR:wall|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|CR:wall",
+ "CR:wall|XX|XX|XX|XX|XX|XX|XX|CR:wall|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|CR:wall",
+ "CR:wall|XX|XX|XX|XX|XX|XX|XX|CR:wall|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|CR:wall",
+ "CR:wall|XX|XX|XX|XX|XX|XX|XX|CR:wall|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|CR:wall",
+ "CR:wall|XX|XX|XX|XX|XX|XX|XX|CR:wall|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|CR:wall",
+ "CR:wall|XX|XX|XX|XX|XX|XX|XX|CR:wall|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|CR:wall",
+ "CR:wall|XX|XX|XX|XX|XX|XX|XX|CR:wall|XX|XX|XX|XX|XX|XX|XX|CR:player|XX|XX|XX|XX|XX|XX|CR:wall",
+ "CR:wall|XX|XX|XX|XX|XX|XX|XX|CR:wall|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|CR:wall",
+ "CR:wall|XX|XX|XX|XX|XX|XX|XX|CR:wall|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|CR:wall",
+ "CR:wall|XX|XX|XX|XX|XX|XX|XX|CR:wall|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|CR:wall",
+ "CR:wall|XX|XX|XX|XX|XX|XX|XX|CR:wall|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|CR:wall",
+ "CR:wall|XX|XX|XX|XX|XX|XX|XX|CR:wall|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|CR:wall",
+ "CR:wall|XX|XX|XX|XX|XX|XX|XX|CR:wall|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|CR:wall",
+ "CR:wall|CR:wall|CR:wall|CR:wall|CR:wall|CR:wall|CR:wall|CR:wall|CR:wall|XX|CR:wall|CR:wall|CR:wall|XX|CR:wall|CR:wall|CR:wall|CR:wall|XX|XX|XX|XX|XX|CR:wall",
+ "CR:wall|CR:wire|CR:wall|CR:wire|CR:wall|CR:wire|CR:wall|CR:wire|CR:wall|XX|XX|XX|CR:wall|XX|XX|XX|XX|CR:wall|XX|XX|XX|XX|XX|CR:wall",
+ "CR:wall|CR:wire|CR:wire|CR:wire|CR:wire|CR:wire|CR:wire|CR:wire|CR:wall|XX|XX|XX|CR:wall|XX|XX|XX|XX|CR:wall|XX|XX|XX|XX|XX|CR:wall",
+ "CR:wall|CR:wall|CR:wall|CR:wall|CR:wire|CR:wall|CR:wall|CR:wall|CR:wire|CR:sensor|XX|XX|CR:wall|XX|XX|XX|XX|CR:wall|XX|XX|XX|XX|XX|CR:wall",
+ "CR:wall|CR:wall|CR:wall|CR:wall|CR:wire|CR:wire|CR:wire|CR:wire|CR:wire|CR:wall|CR:wall|CR:wall|CR:wall|CR:wall|CR:wall|CR:wall|CR:wall|CR:wall|CR:wall|CR:wall|CR:wall|CR:wall|CR:wall|CR:wall",
+ ],
+ category: "lab",
+ state: "solid",
+};
+elements.e_cr = {
+ name: "e-cr",
+ color: "#dddd00",
+ behavior: behaviors.WALL,
+ behaviorOn: [
+ "XX|XX|XX",
+ "XX|XX|XX",
+ "XX|CR:human|XX"
+ ],
+ tick: function(pixel) {
+ if (pixel.create) { return }
+ for (var i = 0; i < adjacentCoords.length; i++) {
+ var coords = adjacentCoords[i];
+ var x = pixel.x + coords[0];
+ var y = pixel.y + coords[1];
+ if (!isEmpty(x,y,true)) {
+ pixel.temp = pixelMap[x][y].temp;
+ if (pixelMap[x][y].create) { pixel.create = pixelMap[x][y].create; break }
+ var element = pixelMap[x][y].element;
+ if (element === pixel.element || elements[pixel.element].ignore.indexOf(element) !== -1) { continue }
+ pixel.create = element;
+ break;
+ }
+ }
+ },
+ ignore: ["cloner","slow_cloner","clone_powder","floating_cloner","wire","ewall","wire","sensor","battery"],
+ category:"machines",
+ insulate:true,
+ darkText: true,
+ conduct: 1,
+ hardness: 1,
+ movable: false
+}
+var libraryMod = "mods/code_library.js";
+
+if(enabledMods.includes(libraryMod)) {
+ sussyKey = null;
+ isShift = false;
+ isAlt = false;
+
+ document.addEventListener("keydown", function(modifierDownListener) {
+ // User presses shift
+ if (modifierDownListener.keyCode == 16) {
+ isShift = true;
+ }
+ // User presses alt
+ if (modifierDownListener.keyCode == 18) {
+ isAlt = true;
+ }
+ });
+
+ document.addEventListener("keyup", function(modifierUpListener) {
+ // User releases shift
+ if (modifierUpListener.keyCode == 16) {
+ isShift = false;
+ }
+ // User releases alt
+ if (modifierUpListener.keyCode == 18) {
+ isAlt = false;
+ }
+ });
+
+ document.addEventListener("keyup", function(sussyListener) {
+ switch (sussyListener.keyCode) {
+ case 87:
+ sussyKey = "W";
+ break;
+ case 65:
+ sussyKey = "A";
+ break;
+ case 83:
+ sussyKey = "S";
+ break;
+ case 68:
+ sussyKey = "D";
+ break;
+ case 81:
+ sussyKey = "Q";
+ break;
+ case 88:
+ sussyKey = "X";
+ break;
+ case 90:
+ sussyKey = "Z";
+ break;
+ case 72:
+ sussyKey = "H";
+ break;
+ };
+ });
+
+ function controllablePixelTryCreatePixelNullCheck(element,x,y) {
+ if(!elements[element]) { //catch the null
+ return false;
+ };
+ if(isEmpty(x,y)) {
+ tryCreatePixel(element,x,y);
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ elements.player = {
+ color: "#FFFFFF",
+ colorOn: "#FFFF00",
+ behavior: behaviors.WALL,
+ state: "solid",
+ density: 2000,
+ maxSize: 1,
+ conduct: 1,
+ hardness: 1,
+ tick: function(pixel) {
+ var xx = pixel.x;
+ var yy = pixel.y;
+ userElement = currentElement;
+ if(userElement === pixel.element) {
+ userElement = null;
+ };
+ if(isShift && !isAlt) {
+ sussyKey === "Z" ? pixel.color = "rgb(255,191,127)" : pixel.color = "rgb(255,127,127)";
+ }
+ if(isAlt && !isShift) {
+ sussyKey === "Z" ? pixel.color = "rgb(191,255,127)" : pixel.color = "rgb(127,255,127)";
+ }
+ if(isAlt && isShift) {
+ sussyKey === "Z" ? pixel.color = "rgb(255,255,0)" : pixel.color = "rgb(255,255,127)";
+ }
+ if(!isAlt && !isShift) {
+ sussyKey === "Z" ? pixel.color = "rgb(255,255,191)" : pixel.color = "rgb(255,255,255)";
+ }
+ if(sussyKey !== null) {
+ switch (sussyKey) {
+ case "W":
+ isAlt ? controllablePixelTryCreatePixelNullCheck(userElement,xx,yy-1) : tryMove(pixel,xx,yy-1);
+ if(!isShift) {
+ sussyKey = null;
+ }
+ break;
+ case "A":
+ isAlt ? controllablePixelTryCreatePixelNullCheck(userElement,xx-1,yy) : tryMove(pixel,xx-1,yy);
+ if(!isShift) {
+ sussyKey = null;
+ }
+ break;
+ case "S":
+ isAlt ? controllablePixelTryCreatePixelNullCheck(userElement,xx,yy+1) : tryMove(pixel,xx,yy+1);
+ if(!isShift) {
+ sussyKey = null;
+ }
+ break;
+ case "D":
+ tryMove(pixel,xx+1,yy);
+ if(!isShift) {
+ sussyKey = null;
+ }
+ break;
+ case "H": //Alt+D is something else in some browsers.
+ if(isAlt) {
+ controllablePixelTryCreatePixelNullCheck(userElement,xx+1,yy);
+ };
+ if(!isShift) {
+ sussyKey = null;
+ }
+ break;
+ case "X":
+ explodeAt(xx,yy,5)
+ if(!isShift) {
+ sussyKey = null;
+ }
+ break;
+ case "Z":
+ if (!pixel.charge && !pixel.chargeCD && !isEmpty(pixel.x,pixel.y,true)) {
+ pixel.charge = 1;
+ }
+ if(!isShift === 0) {
+ sussyKey = null;
+ }
+ break;
+ case "Q": //Use if a key gets stuck
+ sussyKey = null;
+ isShift = null;
+ isAlt = null;
+ break;
+ }
+ }
+ },
+ }
+} else {
+ alert(`The ${libraryMod} mod is required and has been automatically inserted (reload for this to take effect).`)
+ enabledMods.splice(enabledMods.indexOf(modName),0,libraryMod)
+ localStorage.setItem("enabledMods", JSON.stringify(enabledMods));
+};
+
+// i know it looks messy but it works
+
+// if u dont belive me test it but place it in the center of the canvas
diff --git a/mods/Natural_disasters.js b/mods/Natural_disasters.js
new file mode 100644
index 00000000..259efd8e
--- /dev/null
+++ b/mods/Natural_disasters.js
@@ -0,0 +1,207 @@
+//mod made by imilkflamingos
+
+
+function countNeighbors(pixel,target){
+ var targeted = 0;
+ for (var i = 0; i < squareCoords.length; i++) {
+ var coord = squareCoords[i];
+ var x = pixel.x+coord[0];
+ var y = pixel.y+coord[1];
+ if (!isEmpty(x,y, true)) {
+ var otherPixel = pixelMap[x][y];
+ if (otherPixel.element == target){
+ targeted = targeted + 1
+ }
+ }
+ }
+ return targeted;
+}
+
+//made by Fioushemastor
+function getDistance(x1, y1, x2, y2) {
+ return Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2));
+ }
+
+ function getNearestPixel( posX,posY, targetElement) {
+ let nearestPixel
+ let minDistance = Infinity
+
+ //the stuff
+ for (let index in pixelMap) {
+ for (let pixel of pixelMap[index]) {
+ if (pixel == undefined) continue;
+ if (pixel.element == targetElement) {
+ let distance = getDistance(pixel.x, pixel.y, posX, posY);
+ if (distance < minDistance) {
+ minDistance = distance;
+ nearestPixel = pixel;
+ }
+ }
+ }
+ }
+ return nearestPixel
+ }
+// Rest made me
+
+function getRandomInt (min, max) {
+ return Math.floor(Math.random() * (max - min + 1)) + min;
+}
+function createEarthQuakeRand() {
+ const chance = Math.random();
+ if ( chance <= 0.005 ) {
+ var randY = getRandomInt(60,85)
+ var randX = getRandomInt(1,163)
+ if(isEmpty(randX,randY)) {
+ createPixel('earthquake',randX,randY)
+ }
+ else {
+ changePixel(pixelMap[randX][randY],'earthquake')
+ }
+ }
+
+}
+function createTsunamiRand(){
+ var randX = getRandomInt(1,163)
+ const ClosestPixel = getNearestPixel(randX,25,'water')
+ if(ClosestPixel) {
+ var neighbors = countNeighbors(ClosestPixel,'water')
+ if (isEmpty(ClosestPixel.x,ClosestPixel.y-1)) {
+ const chance = Math.random();
+ if ( chance <= 0.001 && countNeighbors(ClosestPixel,'water') >= 3) {
+ createPixel('tsunami',ClosestPixel.x,ClosestPixel.y-1)
+ }
+ }
+ }
+
+}
+function createWildFireRand(){
+ var randX = getRandomInt(1,163)
+ const ClosestPixel = getNearestPixel(randX,25,'plant')
+ if(ClosestPixel) {
+ if (!isEmpty(ClosestPixel.x,ClosestPixel.y)) {
+ const chance = Math.random();
+ if ( chance <= 0.0005) {
+ ClosestPixel.burning = true;
+ }
+ }
+ }
+
+}
+function createMetorShower(){
+
+}
+
+function createCloud(pixel, type) {
+ for (let i = 0; i < 70; i++) {
+ if(isEmpty(pixel.x-i,pixel.y) ) {
+ createPixel(type,pixel.x-i,pixel.y, );
+ }
+ if(isEmpty(pixel.x+i,pixel.y) ) {
+ createPixel(type,pixel.x+i,pixel.y, );
+ }
+ if(isEmpty(pixel.x-i,pixel.y-1) ) {
+ createPixel(type,pixel.x-i,pixel.y-1, );
+ }
+ if(isEmpty(pixel.x+i,pixel.y-1) ) {
+ createPixel(type,pixel.x+i,pixel.y-1, );
+ }
+ if(isEmpty(pixel.x-i,pixel.y+1) ) {
+ createPixel(type,pixel.x-i,pixel.y+1, );
+ }
+ if(isEmpty(pixel.x+i,pixel.y+1) ) {
+ createPixel(type,pixel.x+i,pixel.y+1, );
+ }
+ i+1
+}
+}
+
+elements.Test_Element = {
+ hidden: true,
+ color: "#ff0000",
+ conduct: 0.1,
+ category:"test",
+ behavior: behaviors.WALL,
+
+ onSelect: function(pixel){},
+ tick: function(pixel) {
+
+ },
+
+};
+
+elements.Diaster_Spawner = {
+ maxSize : 1,
+ color: ["#8D8D8C", "#666666"],
+ category: "land",
+ behavior: behaviors.WALL,
+ properties : {
+ age: 0,
+
+ },
+ tick : function(pixel) {
+ const num = getRandomInt(1,3)
+ if (num == 1) {
+ createCloud(pixel, 'rain_cloud')
+ } else if(num == 2){
+ createCloud(pixel, 'thunder_cloud')
+ } else {
+ createCloud(pixel, 'tornado_cloud')
+ }
+
+ if(pixel.age > 100) {
+ changePixel(pixel,"cloud");
+ }
+ pixel.age++
+ doDefaults(pixel);
+ },
+
+};
+
+elements.tornado_cloud = {
+ color: ["#8D8D8C", "#666666"],
+ category: "land",
+ state : 'gas',
+ behavior: [
+ "XX|XX|XX",
+ "XX|DL%0.0001|M1%2.5 AND BO",
+ "XX|XX|XX",
+ ],
+ tick : function(pixel) {
+ const chance = Math.random();
+
+ if ( chance <= 0.00001) {
+ if(isEmpty(pixel.x,pixel.y+1)) {
+ changePixel(pixel,"tornado")
+ }
+ }
+
+ },
+ density: 0.4,
+ ignoreAir: true,
+ conduct: 0.03
+};
+
+
+
+function createCloudRand() {
+ const chance = Math.random();
+ var randY = getRandomInt(7,19)
+ if(chance <= 0.001) {
+ if( isEmpty(83,randY)){
+ createPixel('Diaster_Spawner',83,randY)
+ }
+ }
+}
+
+function runEvents(){
+ if(!paused) {
+ createEarthQuakeRand();
+ createTsunamiRand();
+ createCloudRand();
+ createWildFireRand();
+ }
+}
+
+runAfterLoad(function() {
+ RunSimInterval = window.setInterval(runEvents, 75);
+});
diff --git a/mods/Quicksand_one.js b/mods/Quicksand_one.js
index 01659cc1..7f601977 100644
--- a/mods/Quicksand_one.js
+++ b/mods/Quicksand_one.js
@@ -59,7 +59,7 @@ elements.mangrove_mud = {
density: 1089,
stain: 0.25
};
-peat_slurry = {
+elements.peat_slurry = {
color: "#556B2F",
behavior: elements.slime.behavior,
viscosity: 10000,
@@ -92,7 +92,7 @@ elements.fen_mud = {
tempLow: 0,
category: "liquids",
state: "liquid",
- density: 1550,
+ density: 1450,
stain: 0.28
};
elements.swamp_sludge = {
@@ -479,7 +479,7 @@ elements.mud = {
density: 1000,
stain: 0.3
};
-elements.quicksand = {
+elements.quicksand_mud = {
color: "#DAA520",
behavior: elements.slime.behavior,
viscosity: 1750,
@@ -505,7 +505,7 @@ elements.sandy_mud = {
};
elements.sticky_quicksand = {
color: "#DAA520",
- behavior:elements.sap.behavior,
+ behavior: elements.sap.behavior,
viscosity: 1700,
tempHigh: 65,
stateHigh: "liquid",
@@ -515,3 +515,592 @@ elements.sticky_quicksand = {
density: 1100,
stain: 0.25
};
+elements.fluff_mud = {
+ color: "#964B00",
+ behavior: elements.slime.behavior,
+ viscosity: 10000,
+ tempHigh: 40,
+ stateHigh: "liquid",
+ tempLow: 0,
+ category: "liquids",
+ state: "liquid",
+ density: 1300,
+ stain: 0.2
+};
+elements.bog = {
+ color: "#556B2F",
+ behavior: elements.slime.behavior,
+ viscosity: 10000,
+ tempHigh: 45,
+ stateHigh: "liquid",
+ tempLow: 0,
+ category: "liquids",
+ state: "liquid",
+ density: 1400,
+ stain: 0.25
+};
+elements.mire = {
+ color: "#2E8B57",
+ behavior: elements.slime.behavior,
+ viscosity: 10000,
+ tempHigh: 50,
+ stateHigh: "liquid",
+ tempLow: 0,
+ category: "liquids",
+ state: "liquid",
+ density: 1500,
+ stain: 0.3
+};
+elements.oobleck = {
+ color: "#008000",
+ behavior: elements.slime.behavior,
+ viscosity: 10000,
+ tempHigh: 25,
+ stateHigh: "liquid",
+ tempLow: 0,
+ category: "liquids",
+ state: "liquid",
+ density: 1600,
+ stain: 0.15
+};
+elements.spiderwebs = {
+ color: "#D3D3D3",
+ behavior: elements.slime.behavior,
+ viscosity: 10000,
+ tempHigh: 20,
+ stateHigh: "liquid",
+ tempLow: 0,
+ category: "liquids",
+ state: "liquid",
+ density: 1700,
+ stain: 0.1
+};
+
+elements.silt_quicksand = {
+ color: "#DAA520",
+ behavior: elements.slime.behavior,
+ viscosity: 10000,
+ tempHigh: 68,
+ stateHigh: "liquid",
+ tempLow: 0,
+ category: "liquids",
+ state: "liquid",
+ density: 1500,
+ stain: 0.15
+};
+elements.syrupy_mud = {
+ color: "#8B4513",
+ behavior: elements.slime.behavior,
+ viscosity: 10000,
+ tempHigh: 65,
+ stateHigh: "liquid",
+ tempLow: 0,
+ category: "liquids",
+ state: "liquid",
+ density: 1550,
+ stain: 0.2
+};
+elements.quagmire_mud = {
+ color: "#A0522D",
+ behavior: elements.slime.behavior,
+ viscosity: 10000,
+ tempHigh: 60,
+ stateHigh: "liquid",
+ tempLow: 0,
+ category: "liquids",
+ state: "liquid",
+ density: 1600,
+ stain: 0.25
+};
+elements.bog_quicksand = {
+ color: "#556B2F",
+ behavior: elements.slime.behavior,
+ viscosity: 10000,
+ tempHigh: 62,
+ stateHigh: "liquid",
+ tempLow: 0,
+ category: "liquids",
+ state: "liquid",
+ density: 1650,
+ stain: 0.2
+};
+elements.sludge_mud = {
+ color: "#2E8B57",
+ behavior: elements.slime.behavior,
+ viscosity: 10000,
+ tempHigh: 58,
+ stateHigh: "liquid",
+ tempLow: 0,
+ category: "liquids",
+ state: "liquid",
+ density: 1700,
+ stain: 0.3
+};
+elements.squishy_slime = {
+ color: "#FF4500",
+ behavior: elements.slime.behavior,
+ viscosity: 15000,
+ tempHigh: 20,
+ stateHigh: "liquid",
+ tempLow: 0,
+ category: "liquids",
+ state: "liquid",
+ density: 1600,
+ stain: 0.1
+};
+elements.sparkling_slime = {
+ color: "#FFD700",
+ behavior: elements.slime.behavior,
+ viscosity: 12000,
+ tempHigh: 25,
+ stateHigh: "liquid",
+ tempLow: 0,
+ category: "liquids",
+ state: "liquid",
+ density: 1650,
+ stain: 0.15
+};
+elements.glittery_slime = {
+ color: "#B0E0E6",
+ behavior: elements.slime.behavior,
+ viscosity: 25000,
+ tempHigh: 10,
+ stateHigh: "liquid",
+ tempLow: 0,
+ category: "liquids",
+ state: "liquid",
+ density: 1750,
+ stain: 0.25
+};
+elements.swirling_slime = {
+ color: "#9370DB",
+ behavior: elements.slime.behavior,
+ viscosity: 18000,
+ tempHigh: 5,
+ stateHigh: "liquid",
+ tempLow: 0,
+ category: "liquids",
+ state: "liquid",
+ density: 1800,
+ stain: 0.3
+};
+elements.fizzling_slime = {
+ color: "#00FFFF",
+ behavior: elements.slime.behavior,
+ viscosity: 15000,
+ tempHigh: -5,
+ stateHigh: "liquid",
+ tempLow: -10,
+ category: "liquids",
+ state: "liquid",
+ density: 1900,
+ stain: 0.25
+};
+elements.crackling_slime = {
+ color: "#FF6347",
+ behavior: elements.slime.behavior,
+ viscosity: 20000,
+ tempHigh: -10,
+ stateHigh: "liquid",
+ tempLow: -15,
+ category: "liquids",
+ state: "liquid",
+ density: 1480,
+ stain: 0.3
+};
+elements.glowing_slime = {
+ color: "#7B68EE",
+ behavior: elements.slime.behavior,
+ viscosity: 25000,
+ tempHigh: -15,
+ stateHigh: "liquid",
+ tempLow: -20,
+ category: "liquids",
+ state: "liquid",
+ density: 1395,
+ stain: 0.2
+};
+elements.crunchy_slime = {
+ color: "#00BFFF",
+ behavior: elements.slime.behavior,
+ viscosity: 30000,
+ tempHigh: -20,
+ stateHigh: "liquid",
+ tempLow: -25,
+ category: "liquids",
+ state: "liquid",
+ density: 2050,
+ stain: 0.25
+};
+elements.sizzling_slime = {
+ color: "#FFA07A",
+ behavior: elements.slime.behavior,
+ viscosity: 35000,
+ tempHigh: -25,
+ stateHigh: "liquid",
+ tempLow: -30,
+ category: "liquids",
+ state: "liquid",
+ density: 1463,
+ stain: 0.3
+};
+elements.spider_webbing = {
+ color: "#FFFFFF",
+ behavior: elements.slime.behavior,
+ viscosity: 5000,
+ tempHigh: 25,
+ stateHigh: "liquid",
+ tempLow: 0,
+ category: "liquids",
+ state: "liquid",
+ density: 1100,
+ stain: 0.05
+};
+elements.webbing_gel = {
+ color: "#FFD700",
+ behavior: elements.slime.behavior,
+ viscosity: 7000,
+ tempHigh: 30,
+ stateHigh: "liquid",
+ tempLow: 0,
+ category: "liquids",
+ state: "liquid",
+ density: 1200,
+ stain: 0.08
+};
+elements.arachnid_slime = {
+ color: "#00FF00",
+ behavior: elements.slime.behavior,
+ viscosity: 8000,
+ tempHigh: 35,
+ stateHigh: "liquid",
+ tempLow: 0,
+ category: "liquids",
+ state: "liquid",
+ density: 1250,
+ stain: 0.1
+};
+elements.sticky_silk = {
+ color: "#FFFACD",
+ behavior: elements.slime.behavior,
+ viscosity: 6000,
+ tempHigh: 40,
+ stateHigh: "liquid",
+ tempLow: 0,
+ category: "liquids",
+ state: "liquid",
+ density: 1300,
+ stain: 0.12
+};
+elements.webbing_solution = {
+ color: "#FFA07A",
+ behavior: elements.slime.behavior,
+ viscosity: 9000,
+ tempHigh: 45,
+ stateHigh: "liquid",
+ tempLow: 0,
+ category: "liquids",
+ state: "liquid",
+ density: 1350,
+ stain: 0.15
+};
+elements.arachnid_resin = {
+ color: "#FF00FF",
+ behavior: elements.slime.behavior,
+ viscosity: 7500,
+ tempHigh: 50,
+ stateHigh: "liquid",
+ tempLow: 0,
+ category: "liquids",
+ state: "liquid",
+ density: 1400,
+ stain: 0.18
+};
+elements.spider_snot = {
+ color: "#7FFFD4",
+ behavior: elements.slime.behavior,
+ viscosity: 8500,
+ tempHigh: 55,
+ stateHigh: "liquid",
+ tempLow: 0,
+ category: "liquids",
+ state: "liquid",
+ density: 1450,
+ stain: 0.2
+};
+elements.arachnid_ooze = {
+ color: "#6495ED",
+ behavior: elements.slime.behavior,
+ viscosity: 9500,
+ tempHigh: 60,
+ stateHigh: "liquid",
+ tempLow: 0,
+ category: "liquids",
+ state: "liquid",
+ density: 1325,
+ stain: 0.22
+};
+elements.sticky_spider_goo = {
+ color: "#8A2BE2",
+ behavior: elements.slime.behavior,
+ viscosity: 8500,
+ tempHigh: 65,
+ stateHigh: "liquid",
+ tempLow: 0,
+ category: "liquids",
+ state: "liquid",
+ density: 1350,
+ stain: 0.25
+};
+elements.arachnid_sludge = {
+ color: "#FF4500",
+ behavior: elements.slime.behavior,
+ viscosity: 8000,
+ tempHigh: 70,
+ stateHigh: "liquid",
+ tempLow: 0,
+ category: "liquids",
+ state: "liquid",
+ density: 1142,
+ stain: 0.28
+};
+elements.spider_secretion = {
+ color: "#FFFF00",
+ behavior: elements.slime.behavior,
+ viscosity: 9000,
+ tempHigh: 75,
+ stateHigh: "liquid",
+ tempLow: 0,
+ category: "liquids",
+ state: "liquid",
+ density: 1464,
+ stain: 0.3
+};
+elements.arachnid_essence = {
+ color: "#800080",
+ behavior: elements.slime.behavior,
+ viscosity: 8500,
+ tempHigh: 80,
+ stateHigh: "liquid",
+ tempLow: 0,
+ category: "liquids",
+ state: "liquid",
+ density: 1325,
+ stain: 0.25
+};
+elements.sticky_spider_residue = {
+ color: "#8B4513",
+ behavior: elements.slime.behavior,
+ viscosity: 9500,
+ tempHigh: 85,
+ stateHigh: "liquid",
+ tempLow: 0,
+ category: "liquids",
+ state: "liquid",
+ density: 1499,
+ stain: 0.28
+};
+elements.arachnid_phlegm = {
+ color: "#32CD32",
+ behavior: elements.slime.behavior,
+ viscosity: 9000,
+ tempHigh: 90,
+ stateHigh: "liquid",
+ tempLow: 0,
+ category: "liquids",
+ state: "liquid",
+ density: 1345,
+ stain: 0.3
+};
+elements.sticky_spider_slime = {
+ color: "#800000",
+ behavior: elements.slime.behavior,
+ viscosity: 9000,
+ tempHigh: 105,
+ stateHigh: "liquid",
+ tempLow: 0,
+ category: "liquids",
+ state: "liquid",
+ density: 1431,
+ stain: 0.3
+};
+elements.arachnid_mucus = {
+ color: "#FF1493",
+ behavior: elements.slime.behavior,
+ viscosity: 9500,
+ tempHigh: 110,
+ stateHigh: "liquid",
+ tempLow: 0,
+ category: "liquids",
+ state: "liquid",
+ density: 2000,
+ stain: 0.25
+};
+elements.spider_secretion = {
+ color: "#32CD32",
+ behavior: elements.slime.behavior,
+ viscosity: 9000,
+ tempHigh: 115,
+ stateHigh: "liquid",
+ tempLow: 0,
+ category: "liquids",
+ state: "liquid",
+ density: 2050,
+ stain: 0.28
+};
+elements.arachnid_excretion = {
+ color: "#FF4500",
+ behavior: elements.slime.behavior,
+ viscosity: 8500,
+ tempHigh: 120,
+ stateHigh: "liquid",
+ tempLow: 0,
+ category: "liquids",
+ state: "liquid",
+ density: 2100,
+ stain: 0.3
+};
+elements.sticky_spider_ooze = {
+ color: "#00008B",
+ behavior: elements.slime.behavior,
+ viscosity: 9000,
+ tempHigh: 125,
+ stateHigh: "liquid",
+ tempLow: 0,
+ category: "liquids",
+ state: "liquid",
+ density: 2150,
+ stain: 0.25
+};
+elements.arachnid_liquid = {
+ color: "#FFFF00",
+ behavior: elements.slime.behavior,
+ viscosity: 9500,
+ tempHigh: 130,
+ stateHigh: "liquid",
+ tempLow: 0,
+ category: "liquids",
+ state: "liquid",
+ density: 2200,
+ stain: 0.28
+};
+elements.swamp_slime = {
+ color: "#32CD32",
+ behavior: elements.slime.behavior,
+ viscosity: 9000,
+ tempHigh: 30,
+ stateHigh: "liquid",
+ tempLow: 0,
+ category: "liquids",
+ state: "liquid",
+ density: 1450,
+ stain: 0.2
+};
+elements.muddy_swamp_water = {
+ color: "#8B4513",
+ behavior: elements.slime.behavior,
+ viscosity: 9500,
+ tempHigh: 35,
+ stateHigh: "liquid",
+ tempLow: 0,
+ category: "liquids",
+ state: "liquid",
+ density: 1500,
+ stain: 0.25
+};
+elements.swamp_sludge = {
+ color: "#556B2F",
+ behavior: elements.slime.behavior,
+ viscosity: 10000,
+ tempHigh: 40,
+ stateHigh: "liquid",
+ tempLow: 0,
+ category: "liquids",
+ state: "liquid",
+ density: 1550,
+ stain: 0.3
+};
+elements.boggy_mud = {
+ color: "#6B8E23",
+ behavior: elements.slime.behavior,
+ viscosity: 10500,
+ tempHigh: 45,
+ stateHigh: "liquid",
+ tempLow: 0,
+ category: "liquids",
+ state: "liquid",
+ density: 1600,
+ stain: 0.2
+};
+elements.swamp_ooze = {
+ color: "#32CD32",
+ behavior: elements.slime.behavior,
+ viscosity: 11000,
+ tempHigh: 50,
+ stateHigh: "liquid",
+ tempLow: 0,
+ category: "liquids",
+ state: "liquid",
+ density: 1650,
+ stain: 0.25
+};
+elements.sludgy_swamp_mixture = {
+ color: "#556B2F",
+ behavior: elements.slime.behavior,
+ viscosity: 11500,
+ tempHigh: 55,
+ stateHigh: "liquid",
+ tempLow: 0,
+ category: "liquids",
+ state: "liquid",
+ density: 1700,
+ stain: 0.3
+};
+elements.marshy_slime = {
+ color: "#8B4513",
+ behavior: elements.slime.behavior,
+ viscosity: 12000,
+ tempHigh: 60,
+ stateHigh: "liquid",
+ tempLow: 0,
+ category: "liquids",
+ state: "liquid",
+ density: 1750,
+ stain: 0.2
+};
+elements.soggy_bog = {
+ color: "#6B8E23",
+ behavior: elements.slime.behavior,
+ viscosity: 12500,
+ tempHigh: 65,
+ stateHigh: "liquid",
+ tempLow: 0,
+ category: "liquids",
+ state: "liquid",
+ density: 1800,
+ stain: 0.25
+};
+elements.mossy_swamp_water = {
+ color: "#32CD32",
+ behavior: elements.slime.behavior,
+ viscosity: 13000,
+ tempHigh: 70,
+ stateHigh: "liquid",
+ tempLow: 0,
+ category: "liquids",
+ state: "liquid",
+ density: 1850,
+ stain: 0.3
+};
+elements.murky_marsh_mixture = {
+ color: "#556B2F",
+ behavior: elements.slime.behavior,
+ viscosity: 13500,
+ tempHigh: 75,
+ stateHigh: "liquid",
+ tempLow: 0,
+ category: "liquids",
+ state: "liquid",
+ density: 1900,
+ stain: 0.2
+};
diff --git a/mods/aChefsDream.js b/mods/aChefsDream.js
index 205c30d7..acf75e57 100644
--- a/mods/aChefsDream.js
+++ b/mods/aChefsDream.js
@@ -18,7 +18,37 @@ function getRGB(rgb){
let rgb2 = rgb.replace(")", "").replace("rgb(", "").replace(/,/g, "r").split("r")
return { r: parseInt(rgb2[0]), g: parseInt(rgb2[1]), b: parseInt(rgb2[2]) };
}
-
+function findMostFrequent(arr) {
+ let freqMap = {};
+
+ if (arr) {
+ if (arr.length === 0) {
+ return "water";
+ } else if (arr.length === 1) {
+ return arr[0]
+ } else {
+ arr.forEach(item => {
+ if(!freqMap[item]) {
+ freqMap[item] = 0;
+ }
+ freqMap[item]++;
+ });
+
+ let max = 0;
+ let mostFrequent = [];
+
+ for (let item in freqMap) {
+ if (freqMap[item] > max) {
+ max = freqMap[item];
+ mostFrequent = [item];
+ } else if (freqMap[item] === max) {
+ mostFrequent.push(item);
+ }
+ }
+ return mostFrequent.join(', ');
+ }
+ }
+}
behaviors.STURDYPOWDER2 = [
"XX|XX|XX",
"XX|XX|XX",
@@ -39,25 +69,21 @@ elements.knife = {
//changePixel(pixel, cutInto)
if (shiftDown) {
if (Math.random() < 0.5) {
- changePixel(pixel, cutInto)
- var cutIntoEmit = elements[pixel.element].cutIntoEmit;
- if (!cutIntoEmit) { return };
- if(cutIntoEmit instanceof Array) { cutIntoEmit = cutIntoEmit[Math.floor(Math.random() * cutIntoEmit.length)] };
var thiselement = pixel.element;
- if (elements[thiselement].cutIntoEmit && Math.random() < 0.7 && isEmpty(pixel.x,pixel.y-1)) {
- createPixel(elements[thiselement].cutIntoEmit,pixel.x,pixel.y-1);
+ changePixel(pixel, cutInto)
+ pixelTempCheck(pixel);
+ if (elements[thiselement].cutIntoColor) {
+ pixel.color = pixelColorPick(pixel, elements[thiselement].cutIntoColor);
}
}
}
else if (!shiftDown) {
if (Math.random() < 0.1) {
- changePixel(pixel, cutInto)
- var cutIntoEmit = elements[pixel.element].cutIntoEmit;
- if (!cutIntoEmit) { return };
- if(cutIntoEmit instanceof Array) { cutIntoEmit = cutIntoEmit[Math.floor(Math.random() * cutIntoEmit.length)] };
var thiselement = pixel.element;
- if (elements[thiselement].cutIntoEmit && Math.random() < 0.4 && isEmpty(pixel.x,pixel.y-1)) {
- createPixel(elements[thiselement].cutIntoEmit,pixel.x,pixel.y-1);
+ changePixel(pixel, cutInto)
+ pixelTempCheck(pixel);
+ if (elements[thiselement].cutIntoColor) {
+ pixel.color = pixelColorPick(pixel, elements[thiselement].cutIntoColor);
}
}
}
@@ -422,6 +448,10 @@ elements.soup = {
if (Math.random() < 0.5) { deletePixel(ingredient.x, ingredient.y); }
else {
ingredient.color = pixelColorPick(ingredient, hex);
+ if (!ingredient.elemlist){
+ ingredient.elemlist = [];
+ }
+ ingredient.elemlist.push(soup.elemlist[Math.floor(Math.random() * soup.elemlist.length)])
}
}
}
@@ -439,6 +469,13 @@ elements.soup = {
}
}
},
+ hoverStat: function(soup, ingredient) {
+ if (findMostFrequent(soup.elemlist) == undefined) {
+ return "Ingredients:None"
+ } else {
+ return "Ingredients:"+findMostFrequent(soup.elemlist)
+ }
+ },
}
if (!elements.broth.reactions) elements.broth.reactions = {};
@@ -6586,6 +6623,7 @@ elements.durian = {
cutInto: "cut_durian",
state: "solid",
density: 1050,
+ breakInto: "durian_juice"
}
elements.cut_durian = {
@@ -6601,6 +6639,7 @@ elements.cut_durian = {
hidden: true,
freezeDryInto: "freeze_dried_fruits",
freezeDryIntoColor: "#a19f3b",
+ breakInto: "durian_juice"
}
elements.durian_seed = {
@@ -6649,6 +6688,32 @@ elements.durian_seed = {
"XX|M1|XX",
],
};
+
+elements.durian_juice = {
+ color: "#ebe06e",
+ onMix: function(pixel) {
+ if (shiftDown) {
+ if (Math.random() < 0.2) {
+ changePixel(pixel,"juice")
+ pixel.color = pixelColorPick(pixel,"#ebe06e")
+ }
+ }
+ },
+ behavior: behaviors.LIQUID,
+ category: "liquids",
+ tempHigh: 100,
+ stateHigh: ["steam","sugar"],
+ burn: 70,
+ burnTime: 300,
+ burnInto: ["steam", "smoke"],
+ state: "liquid",
+ density: 825,
+ hidden: true,
+ temp: 30,
+ hidden: true,
+ tempLow: 0,
+};
+eLists.JUICEMIXABLE.push("durian_juice");
elements.egg_white = {
color: "#edece8",
behavior: behaviors.LIQUID,
@@ -7613,6 +7678,7 @@ elements.unripe_rambutan = {
cutInto: "cut_rambutan",
state: "solid",
density: 1050,
+ breakInto: "rambutan_juice"
}
elements.rambutan = {
@@ -7626,7 +7692,7 @@ elements.rambutan = {
state: "solid",
density: 1050,
cutInto: "cut_rambutan",
- hidden: true,
+ breakInto: "rambutan_juice"
}
elements.cut_rambutan = {
@@ -7642,6 +7708,7 @@ elements.cut_rambutan = {
hidden: true,
freezeDryInto: "freeze_dried_fruits",
freezeDryIntoColor: "#a19f3b",
+ breakInto: "rambutan_juice"
}
elements.rambutan_seed = {
@@ -7691,6 +7758,32 @@ elements.rambutan_seed = {
],
};
+elements.rambutan_juice = {
+ color: "#f7f4cb",
+ onMix: function(pixel) {
+ if (shiftDown) {
+ if (Math.random() < 0.2) {
+ changePixel(pixel,"juice")
+ pixel.color = pixelColorPick(pixel,"#f7f4cb")
+ }
+ }
+ },
+ behavior: behaviors.LIQUID,
+ category: "liquids",
+ tempHigh: 100,
+ stateHigh: ["steam","sugar"],
+ burn: 70,
+ burnTime: 300,
+ burnInto: ["steam", "smoke"],
+ state: "liquid",
+ density: 825,
+ hidden: true,
+ temp: 30,
+ hidden: true,
+ tempLow: 0,
+};
+eLists.JUICEMIXABLE.push("rambutan_juice");
+
elements.barbecued_shrimp = {
color:["#bf743b", "#b57026","#8f5e29","#a87b11"],
behavior: behaviors.STURDYPOWDER,
@@ -7829,6 +7922,26 @@ elements.raisin = {
isFood: true
}
+elements.fruit_slush = {
+ color: "#ed93a4",
+ behavior: behaviors.LIQUID,
+ reactions: {
+ "dirt": { elem1: null, elem2: "mud" },
+ "sand": { elem1: null, elem2: "wet_sand" },
+ "uranium": { elem1:"dirty_water", chance:0.25 },
+ },
+ temp: -5,
+ tempHigh: 18,
+ tempLow: -20,
+ stateLow: "juice_ice",
+ stateHigh: "juice",
+ category: "food",
+ state: "liquid",
+ density: 95,
+ viscosity: 100,
+ hidden: true
+}
+
// things to mix: juice, water, seltzer, sugar water, soda, juice, milk, cream,
// juice, milk, chocolate milk, fruit milk, eggnog, nut milk, alcohol, wine, tea,
// tea, coffee, honey, caramel, vanilla essence, peppermint tea, sugar, yogurt,
@@ -7836,9 +7949,9 @@ elements.raisin = {
// juice mixing
for (let juicei = 0; juicei < eLists.JUICEMIXABLE.length; juicei++) {
+ elem = eLists.JUICEMIXABLE[juicei];
// juice with juice
for (let juicej = 0; juicej < eLists.JUICEMIXABLE.length; juicej++) {
- elem = eLists.JUICEMIXABLE[juicei];
elem2 = eLists.JUICEMIXABLE[juicej];
if (elem != elem2) {
if (!elements[elem].reactions) { chance:1, elements[elem].reactions = {} }
@@ -7909,6 +8022,19 @@ for (let juicei = 0; juicei < eLists.JUICEMIXABLE.length; juicei++) {
pixel2.color = `rgb(${parseInt(newrgb.r)},${parseInt(newrgb.g)},${parseInt(newrgb.b)})`;
}}
}
+
+iceelem = elem+"_ice"
+// ice slush
+elements[elem].stateLowColorMultiplier = 1.2;
+elements[elem].tempLow = 10;
+elements.fruit_slush.stateHighColorMultiplier = 0.83333333333;
+elements.fruit_slush.stateLowColorMultiplier = 1.2;
+elements.juice_ice.stateHighColorMultiplier = 0.83333333333;
+elements.juice_ice.stateHigh = "fruit_slush"
+elements.juice_ice.tempHigh = -20
+elements[iceelem].stateHigh = "fruit_slush"
+elements[iceelem].tempHigh = -20
+
// fruit milk with milk
elements.fruit_milk.reactions.milk = { chance:1, func: function(pixel1, pixel2){
let newrgb = interpolateRgb(getRGB(pixel1.color), getRGB(pixel2.color), 0.2);
@@ -7982,3 +8108,25 @@ elements.fruit_milk.reactions.fruit_milk = { chance:1, func: function(pixel1, pi
pixel2.color = `rgb(${parseInt(newrgb.r)},${parseInt(newrgb.g)},${parseInt(newrgb.b)})`;
}
}
+// fruit milk onMix
+elements.fruit_milk.onMix = function(pixel){
+ let num = Math.floor(Math.random() * 4);
+ let x = pixel.x + adjacentCoords[num][0];
+ let y = pixel.y + adjacentCoords[num][1];
+ if(!isEmpty(x,y) && !outOfBounds(x,y)){
+ let pixel2 = pixelMap[x][y];
+ if(pixel.color != pixel2.color && pixel2.element == "fruit_milk"){
+ let condition;
+ if(shiftDown == 0){
+ condition = (Math.floor(Math.random() * 2) == 1);
+ } else {
+ condition = true;
+ }
+ if(condition){
+ let newrgb = interpolateRgb(getRGB(pixel.color), getRGB(pixel2.color), 0.5);
+ pixel.color = `rgb(${parseInt(newrgb.r)},${parseInt(newrgb.g)},${parseInt(newrgb.b)})`;
+ pixel2.color = `rgb(${parseInt(newrgb.r)},${parseInt(newrgb.g)},${parseInt(newrgb.b)})`;
+ }
+ }
+ }
+ }
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/community_desserts.js b/mods/community_desserts.js
index b4ae1e81..d4e4e0c0 100644
--- a/mods/community_desserts.js
+++ b/mods/community_desserts.js
@@ -5,37 +5,50 @@
*
* Got questions? Contact tisqbisque on Discord!
*
- * This version: 1.1
+ * This version: 2.0
*/
+// Other mods can add to this list [:
+eListAdd("FRUITS",["apple","banana","blackberry","blueberry","grape","kiwi","mango","orange","peach","plum","pomegranate","rambutan","strawberry"]);
+function fruitLength() {
+ return eLists.FRUITS.length;
+}
// Dulce de leche items
elements.dulce_de_leche = {
alias: "manjar",
- color: ["#c56600","#f7a204","#ca6400","#893604"],
+ color: ["#c56600", "#f7a204", "#ca6400", "#893604"],
category: "Community",
state: "liquid",
behavior: behaviors.LIQUID,
reactions: {
- "cream_cheese": { elem1:"dulce_de_leche", elem2:null, color1:["#DFAB73","#fbcc75","#e2aa73","#be9075"], oneway:true }, // for recipe accuracy :3
+ "cream_cheese": { elem1: "dulce_de_leche", elem2: null, color1: ["#DFAB73", "#fbcc75", "#e2aa73", "#be9075"], oneway: true }, // for recipe accuracy :3
},
tempLow: -20,
stateLow: "candy",
tempHigh: 250,
- stateHigh: ["fragrance","smoke","smoke"],
+ stateHigh: ["fragrance", "smoke", "smoke"],
viscosity: 500,
stain: 0.02,
density: 1284.93,
hidden: true,
isFood: true,
- desc: "Added in the first version of the mod.\nMade by heating Sweetened Condensed Milk at 175°C+.\nFrom undexconocidox_26419.\n"
+ desc: "Added in version 1.0 of Community Desserts.\nMade by heating Sweetened Condensed Milk at 175°C+.\nFrom undexconocidox_26419.\n"
}
elements.sweetened_condensed_milk = {
- color: ["#ffe9ba","#fbd396","#fde2a9"],
+ alias: "sweet_milk",
+ color: ["#ffe9ba", "#fbd396", "#fde2a9"],
category: "Community",
state: "liquid",
behavior: behaviors.LIQUID,
+ onMix: function(cmilk, jamcheck) {
+ if(shiftDown && elements[jamcheck.element].id === elements.jam.id && Math.random() < 0.06) {
+ changePixel(cmilk,"mousse");
+ pixelMap[cmilk.x][cmilk.y].color = shiftColor(rgbToHex(jamcheck.color),"#272727","add");
+ deletePixel(jamcheck.x,jamcheck.y);
+ }
+ },
tempLow: 0,
- stateLow: ["ice_cream","sugar"],
+ stateLow: ["ice_cream", "sugar"],
tempHigh: 175,
stateHigh: "dulce_de_leche",
viscosity: 5,
@@ -43,29 +56,29 @@ elements.sweetened_condensed_milk = {
density: 1050.83,
hidden: true,
isFood: true,
- desc: "Added in the first version of the mod.\nMade by mixing Milk and Sugar at 85°C+.\n",
+ desc: "Added in version 1.0 of Community Desserts.\nMade by mixing Milk and Sugar at 85°C+.\n",
}
// Chocotorta items
elements.cream_cheese = {
- color: ["#ebe9ea","#e4dfdd","#eeeeee"],
+ color: ["#ebe9ea", "#e4dfdd", "#eeeeee"],
category: "Community",
state: "solid",
behavior: behaviors.STURDYPOWDER,
//reactions: {
- // For future use
+ // For future use
//},
tempHigh: 65,
stateHigh: "melted_cheese",
- stateHighColor: ["#fbffff","#f6f6f6"],
+ stateHighColor: ["#fbffff", "#f6f6f6"],
hardness: 0.01,
density: 980.61,
hidden: true,
isFood: true,
- desc: "Added in the first version of the mod.\nMade by mixing Acid with Milk or Cream.\n",
+ desc: "Added in version 1.0 of Community Desserts.\nMade by mixing Acid with Milk or Cream at 90°C-.\n",
}
elements.cocoa_bean = {
- color: ["#e16f51","#e28e67","#e18550","#84574d"],
+ color: ["#e16f51", "#e28e67", "#e18550", "#84574d"],
category: "Community",
state: "solid",
behavior: behaviors.POWDER,
@@ -78,17 +91,17 @@ elements.cocoa_bean = {
stateLow: "frozen_plant",
// not hidden by default
// not food don't eat it
- desc: "Added in the first version of the mod.\n",
+ desc: "Added in version 1.0 of Community Desserts.\n",
}
elements.cocoa_powder = {
- color: ["#855344","#6d4c41","#40271d"],
+ color: ["#855344", "#6d4c41", "#40271d"],
category: "Community",
state: "solid",
behavior: behaviors.POWDER,
- onMix: function(powder, doughcheck) {
+ onMix: function (powder, doughcheck) {
if (elements[doughcheck.element].id == elements.dough.id && shiftDown && Math.random() < 0.25) {
- deletePixel(powder.x,powder.y);
- changePixel(doughcheck,"chocolate_biscuit_dough");
+ deletePixel(powder.x, powder.y);
+ changePixel(doughcheck, "chocolate_biscuit_dough");
}
},
density: 363.5,
@@ -96,7 +109,7 @@ elements.cocoa_powder = {
stateHigh: "smoke",
hidden: true,
isFood: true,
- desc: "Added in the first version of the mod.\nMade by Smashing Cocoa Bean.\n",
+ desc: "Added in version 1.0 of Community Desserts.\nMade by Smashing Cocoa Bean.\n",
}
elements.chocolate_biscuit_dough = {
color: "#623727",
@@ -111,7 +124,7 @@ elements.chocolate_biscuit_dough = {
density: 526.9,
isFood: true,
hidden: true,
- desc: "Added in the first version of the mod.\nMade by hard mixing Cocoa Powder with Dough.\n",
+ desc: "Added in version 1.0 of Community Desserts.\nMade by hard mixing Cocoa Powder with Dough.\n",
}
elements.chocolate_biscuit = {
color: "#864B36",
@@ -119,34 +132,34 @@ elements.chocolate_biscuit = {
state: "solid",
behavior: behaviors.STURDYPOWDER,
breakInto: "crumb",
- breakIntoColor: ["#af8264","#b28461","#aa7852","#a8744b"],
+ breakIntoColor: ["#af8264", "#b28461", "#aa7852", "#a8744b"],
tempHigh: 232.2,
- stateHigh: ["smoke","smoke","smoke","ash"],
+ stateHigh: ["smoke", "smoke", "smoke", "ash"],
density: 233.96,
isFood: true,
hidden: true,
- desc: "Added in the first version of the mod.\nMade by cooking Choco Biscuit Dough at 94°C+.\nCan be layered with other items to make chocotorta, from undexconocidox_26419.\n",
+ desc: "Added in version 1.0 of Community Desserts.\nMade by cooking Choco Biscuit Dough at 94°C+.\nCan be layered with other items to make chocotorta, from undexconocidox_26419.\n",
}
// Haupia items
elements.coconut = {
- color: ["#793b1e","#995c31","#5f3015"],
+ color: ["#793b1e", "#995c31", "#5f3015"],
category: "Community",
state: "solid",
behavior: behaviors.POWDER,
- breakInto: ["coconut_milk","tinder"],
+ breakInto: ["coconut_milk", "tinder"],
tempHigh: 225,
- stateHigh: ["steam","ash","smoke"],
+ stateHigh: ["steam", "ash", "smoke"],
density: 822,
- desc: "Added in the first version of the mod.\n",
+ desc: "Added in version 1.0 of Community Desserts.\n",
}
elements.coconut_milk = {
- color: ["#f3f3f3","#e4ddcb","#f8f8f8"],
+ color: ["#f3f3f3", "#e4ddcb", "#f8f8f8"],
category: "Community",
state: "liquid",
behavior: behaviors.LIQUID,
reactions: {
- "sugar": { elem1:null, elem2:"haupia_mix", tempMin:90 },
+ "sugar": { elem1: null, elem2: "haupia_mix", tempMin: 90 },
},
tempHigh: 102,
stateHigh: "steam",
@@ -156,10 +169,10 @@ elements.coconut_milk = {
density: 1031.33,
hidden: true,
isFood: true,
- desc: "Added in the first version of the mod.\nMade by smashing Coconut.\n",
+ desc: "Added in version 1.0 of Community Desserts.\nMade by smashing Coconut.\n",
}
elements.haupia_mix = {
- color: ["#f3f3f3","#e4ddcb","#f8f8f8"],
+ color: ["#f3f3f3", "#e4ddcb", "#f8f8f8"],
category: "Community",
state: "liquid",
behavior: behaviors.LIQUID,
@@ -170,55 +183,647 @@ elements.haupia_mix = {
viscosity: 2.3,
density: 1242.67,
hidden: true,
- desc: "Added in the first version of the mod.\nMade by mixing Coconut Milk and Sugar at 90°C+.\n",
+ desc: "Added in version 1.0 of Community Desserts.\nMade by mixing Coconut Milk and Sugar at 90°C+.\n",
}
elements.haupia = {
- color: ["#ffffff","#f8f8f8","#f7f9f8"],
+ color: ["#ffffff", "#f8f8f8", "#f7f9f8"],
category: "Community",
state: "solid",
behavior: behaviors.SUPPORT,
tempHigh: 105,
- stateHigh: ["steam","fragrance"],
+ stateHigh: ["steam", "fragrance"],
density: 1300,
hidden: true,
isFood: true,
- desc: "Added in the first version of the mod.\nMade by cooling Haupia Mix at 3°C-.\nFrom tisqbisque.\n"
+ desc: "Added in version 1.0 of Community Desserts.\nMade by cooling Haupia Mix at 3°C-.\nFrom tisqbisque.\n"
+}
+
+// Pie crust items
+elements.pie_crust_batter = {
+ alias: "pie_batter",
+ color: ["#efdbae", "#ffe6ab", "#eacb88"],
+ category: "Community",
+ state: "solid",
+ behavior: behaviors.STURDYPOWDER,
+ tempHigh: 180,
+ stateHigh: "pie_crust",
+ density: 233.96,
+ isFood: true,
+ hidden: true,
+ desc: "Added in version 2.0 of Community Desserts.\nMade by mixing Dough and Butter.\n",
+}
+elements.pie_crust = {
+ color: ["#c18d45", "#b07f3c", "#d0a352", "#b27f3a"],
+ category: "Community",
+ state: "solid",
+ behavior: behaviors.STURDYPOWDER,
+ breakInto: "crumb",
+ breakIntoColor: ["#af8264", "#b28461", "#aa7852", "#a8744b"],
+ tempHigh: 232.2,
+ stateHigh: ["smoke", "smoke", "smoke", "ash"],
+ density: 233.96,
+ isFood: true,
+ hidden: true,
+ desc: "Added in version 2.0 of Community Desserts.\nMade by cooking Pie Crust Batter at 180°C+.\n",
+}
+
+// Jam and fruit items
+elements.jam = {
+ color: ["#e14a4a","#f64040","#e72225"],
+ category: "Community",
+ state: "liquid",
+ behavior: behaviors.LIQUID,
+ tick: function (pixel) {
+ var madeJelly = false;
+ // Check left, right, up, down from jam pixel..
+ if(pixel.temp >= 95) {
+ if(Math.random() < 0.05 && pixel.x-1 !== 0) {
+ if (!isEmpty(pixel.x-1,pixel.y) && pixelMap[pixel.x-1][pixel.y].element === "water") {
+ changePixel(pixelMap[pixel.x-1][pixel.y],"jelly");
+ pixelMap[pixel.x-1][pixel.y].color = shiftColor(rgbToHex(pixel.color),"#272727","sub");
+ madeJelly = true;
+ };
+ };
+ if(Math.random() < 0.05 && pixel.x+1 !== width) {
+ if (!isEmpty(pixel.x+1,pixel.y) && pixelMap[pixel.x+1][pixel.y].element === "water") {
+ changePixel(pixelMap[pixel.x+1][pixel.y],"jelly");
+ pixelMap[pixel.x+1][pixel.y].color = shiftColor(rgbToHex(pixel.color),"#272727","sub");
+ madeJelly = true;
+ };
+ };
+ if(Math.random() < 0.05 && pixel.y-1 !== 0) {
+ if (!isEmpty(pixel.x,pixel.y-1) && pixelMap[pixel.x][pixel.y-1].element === "water") {
+ changePixel(pixelMap[pixel.x][pixel.y-1],"jelly");
+ pixelMap[pixel.x][pixel.y-1].color = shiftColor(rgbToHex(pixel.color),"#272727","sub");
+ madeJelly = true;
+ };
+ };
+ if(Math.random() < 0.05 && pixel.y+1 !== height) {
+ if (!isEmpty(pixel.x,pixel.y+1) && pixelMap[pixel.x][pixel.y+1].element === "water") {
+ changePixel(pixelMap[pixel.x][pixel.y+1],"jelly");
+ pixelMap[pixel.x][pixel.y+1].color = shiftColor(rgbToHex(pixel.color),"#272727","sub");
+ madeJelly = true;
+ };
+ };
+ if(madeJelly) {
+ deletePixel(pixel.x,pixel.y);
+ }
+ }
+ },
+ tempHigh: 160,
+ stateHigh: ["smoke", "smoke", "sugar"],
+ tempLow: -5,
+ stateLowName: "frozen_jam",
+ stateLowColorMultiplier: 1.1,
+ viscosity: 200000,
+ stain: 0.3,
+ density: 1333.5,
+ isFood: true,
+ hidden: true,
+ desc: "Added in version 2.0 of Community Desserts.\nMade by smashing a fruit.\n",
+}
+elements.frozen_jam = {
+ stateHighColorMultiplier: 0.91,
+}
+elements.fruit_seed = { // similar to pinecone
+ color: ["#5c3333","#472727","#311b1b"],
+ tick: function(pixel) {
+ if (!tryMove(pixel,pixel.x,pixel.y+1) && pixelTicks-pixel.start > 50) {
+ if (pixel.h === undefined) { // set to even number between 8 and 26
+ pixel.h = Math.floor(Math.random()*9)*2+8;
+ pixel.lh = pixel.h;
+ }
+ if (Math.random() < 0.02 && pixel.h > 0 && pixel.temp < 100) {
+ if (!outOfBounds(pixel.x,pixel.y+1)) { // grow roots
+ var dirtPixel = pixelMap[pixel.x][pixel.y+1];
+ if (dirtPixel && (eLists.SOIL.indexOf(dirtPixel.element) !== -1 || dirtPixel.element === "grass")) {
+ changePixel(dirtPixel,"root");
+ }
+ }
+ if (isEmpty(pixel.x,pixel.y-1) && tryMove(pixel,pixel.x,pixel.y-1)) {
+ createPixel("wood",pixel.x,pixel.y+1);
+ pixel.h --;
+ }
+ }
+ else if (pixel.h === 0) {
+ changePixel(pixel,"fruit_tree");
+ pixelMap[pixel.x][pixel.y].h = pixel.lh;
+ }
+ }
+ doDefaults(pixel);
+ },
+ tempHigh: 500,
+ stateHigh: "wood",
+ burn: 5,
+ burnTime: 100,
+ category: "Community",
+ state: "solid",
+ density: 1500,
+ cooldown: defaultCooldown,
+ seed: true,
+ desc: "Added in version 2.0 of Community Desserts.\nGrows into Fruit Tree.\n"
+}
+elements.fruit_tree = { // like sapling
+ color: ["#007a00","#0a910a","#036903"],
+ tick: function (pixel) {
+ if (pixel.h > 0 && pixelTicks % (50+pixel.h) === 0) {
+ // extend to the left and right, giving the next h-1
+ // The taller the tree, the longer the umbrella
+ if (isEmpty(pixel.x-1,pixel.y)) {
+ createPixel("fruit_tree",pixel.x-1,pixel.y);
+ pixelMap[pixel.x-1][pixel.y].h = pixel.h-2;
+ }
+ if (isEmpty(pixel.x+1,pixel.y)) {
+ createPixel("fruit_tree",pixel.x+1,pixel.y);
+ pixelMap[pixel.x+1][pixel.y].h = pixel.h-2;
+ }
+ if (isEmpty(pixel.x,pixel.y-1)) {
+ createPixel("fruit_tree",pixel.x,pixel.y-1);
+ }
+ }
+ else if(isEmpty(pixel.x,pixel.y+1) && Math.random() < 0.0005 ) {
+ createPixel(eLists.FRUITS[Math.floor(Math.random()*fruitLength())],pixel.x,pixel.y+1);
+ }
+ doDefaults(pixel);
+ },
+ reactions: {
+ "vinegar": { elem1:"dead_plant", elem2:null, chance:0.035 },
+ "baking_soda": { elem1:"dead_plant", elem2:null, chance:0.01 },
+ "bleach": { elem1:"dead_plant", elem2:null, chance:0.05 },
+ "alcohol": { elem1:"dead_plant", elem2:null, chance:0.035 }
+ },
+ category: "Community",
+ tempHigh: 100,
+ stateHigh: "dead_plant",
+ burn:45,
+ burnTime:75,
+ burnInto: ["dead_plant","dead_plant","dead_plant","dead_plant","fruit_seed"],
+ breakInto: ["dead_plant","dead_plant","dead_plant","dirt","sap"],
+ state: "solid",
+ density: 1050,
+ seed: "fruit_seed",
+ hidden: true,
+ movable: false,
+ desc: "Added in version 2.0 of Community Desserts.\nMay drop a random fruit. Current # of fruits: " + (fruitLength()-1) +".\n",
+}
+elements.apple = {
+ color: ["#c6de70","#efdc5c","#c75833","#bd3838"],
+ category: "Community",
+ state: "solid",
+ behavior: behaviors.POWDER,
+ reactions: {
+ "rock": { elem1:"juice", chance:0.1, color1:"#f5cb40" },
+ "concrete": { elem1:"juice", chance:0.1, color1:"#f5cb40" },
+ "basalt": { elem1:"juice", chance:0.1, color1:"#f5cb40" },
+ "limestone": { elem1:"juice", chance:0.1, color1:"#f5cb40" },
+ "tuff": { elem1:"juice", chance:0.1, color1:"#f5cb40" },
+ "acid": { elem1:"juice", color1:"#f5cb40" },
+ "acid_gas": { elem1:"juice", color1:"#f5cb40" },
+ },
+ breakInto: "jam",
+ breakIntoColor: ["#ddae16","#fdcd53","#fed75e","#e9b429"],
+ tempHigh: 256,
+ stateHigh: ["steam", "sugar"],
+ density: 460.72,
+ isFood: true,
+ hidden: true,
+ desc: "Added in version 2.0 of Community Desserts.\n"
+}
+elements.banana = {
+ color: ["#f8e662","#ffe312","#fee402","#fed601"],
+ category: "Community",
+ state: "solid",
+ behavior: behaviors.POWDER,
+ reactions: {
+ "rock": { elem1:"juice", chance:0.1, color1:"#fae7b5" },
+ "concrete": { elem1:"juice", chance:0.1, color1:"#fae7b5" },
+ "basalt": { elem1:"juice", chance:0.1, color1:"#fae7b5" },
+ "limestone": { elem1:"juice", chance:0.1, color1:"#fae7b5" },
+ "tuff": { elem1:"juice", chance:0.1, color1:"#fae7b5" },
+ "acid": { elem1:"juice", color1:"#fae7b5" },
+ "acid_gas": { elem1:"juice", color1:"#fae7b5" },
+ },
+ breakInto: "jam",
+ breakIntoColor: ["#d6aa46","#e3b544","#cda23a","#e3c869"],
+ tempHigh: 256,
+ stateHigh: ["steam", "sugar"],
+ density: 634.01,
+ isFood: true,
+ hidden: true,
+ desc: "Added in version 2.0 of Community Desserts.\n"
+}
+elements.blackberry = {
+ color: ["#5c2f3e","#281c2a","#02060f","#19252c"],
+ category: "Community",
+ state: "solid",
+ behavior: behaviors.POWDER,
+ reactions: {
+ "rock": { elem1:"juice", chance:0.1, color1:"#7b1e57" },
+ "concrete": { elem1:"juice", chance:0.1, color1:"#7b1e57" },
+ "basalt": { elem1:"juice", chance:0.1, color1:"#7b1e57" },
+ "limestone": { elem1:"juice", chance:0.1, color1:"#7b1e57" },
+ "tuff": { elem1:"juice", chance:0.1, color1:"#7b1e57" },
+ "acid": { elem1:"juice", color1:"#7b1e57" },
+ "acid_gas": { elem1:"juice", color1:"#7b1e57" },
+ },
+ breakInto: "jam",
+ breakIntoColor: ["#481317","#50030d","#250b0c","#62020d"],
+ tempHigh: 256,
+ stateHigh: ["steam", "sugar"],
+ density: 608.65,
+ isFood: true,
+ hidden: true,
+ desc: "Added in version 2.0 of Community Desserts.\n"
+}
+elements.blueberry = {
+ color: ["#385f9e","#386891","#4874b5","#4b8ee3"],
+ category: "Community",
+ state: "solid",
+ behavior: behaviors.POWDER,
+ reactions: {
+ "rock": { elem1:"juice", chance:0.1, color1:"#933487" },
+ "concrete": { elem1:"juice", chance:0.1, color1:"#933487" },
+ "basalt": { elem1:"juice", chance:0.1, color1:"#933487" },
+ "limestone": { elem1:"juice", chance:0.1, color1:"#933487" },
+ "tuff": { elem1:"juice", chance:0.1, color1:"#933487" },
+ "acid": { elem1:"juice", color1:"#933487" },
+ "acid_gas": { elem1:"juice", color1:"#933487" },
+ },
+ breakInto: "jam",
+ breakIntoColor: ["#48132c","#6f3a56","#13030d","#351123"],
+ tempHigh: 256,
+ stateHigh: ["steam", "sugar"],
+ density: 625.56,
+ isFood: true,
+ hidden: true,
+ desc: "Added in version 2.0 of Community Desserts.\n"
+}
+elements.kiwi = {
+ color: ["#be8456","#cb8a3e","#bc7742","#975e25"],
+ category: "Community",
+ state: "solid",
+ behavior: behaviors.POWDER,
+ reactions: {
+ "rock": { elem1:"juice", chance:0.1, color1:"#eef299" },
+ "concrete": { elem1:"juice", chance:0.1, color1:"#eef299" },
+ "basalt": { elem1:"juice", chance:0.1, color1:"#eef299" },
+ "limestone": { elem1:"juice", chance:0.1, color1:"#eef299" },
+ "tuff": { elem1:"juice", chance:0.1, color1:"#eef299" },
+ "acid": { elem1:"juice", color1:"#eef299" },
+ "acid_gas": { elem1:"juice", color1:"#eef299" },
+ },
+ breakInto: "jam",
+ breakIntoColor: ["#beb43c","#b7ac41","#8d7614","#755e11"],
+ tempHigh: 256,
+ stateHigh: ["steam", "sugar"],
+ density: 748.14,
+ isFood: true,
+ hidden: true,
+ desc: "Added in version 2.0 of Community Desserts.\n"
+}
+elements.mango = {
+ color: ["#ff1f25","#f97231","#fdeb1d","#85b624"],
+ category: "Community",
+ state: "solid",
+ behavior: behaviors.POWDER,
+ reactions: {
+ "rock": { elem1:"juice", chance:0.1, color1:"#ffbf34" },
+ "concrete": { elem1:"juice", chance:0.1, color1:"#ffbf34" },
+ "basalt": { elem1:"juice", chance:0.1, color1:"#ffbf34" },
+ "limestone": { elem1:"juice", chance:0.1, color1:"#ffbf34" },
+ "tuff": { elem1:"juice", chance:0.1, color1:"#ffbf34" },
+ "acid": { elem1:"juice", color1:"#ffbf34" },
+ "acid_gas": { elem1:"juice", color1:"#ffbf34" },
+ },
+ breakInto: "jam",
+ breakIntoColor: ["#ef9d00","#fdb005","#fed803","#fbdd00"],
+ tempHigh: 256,
+ stateHigh: ["steam", "sugar"],
+ density: 697.41,
+ isFood: true,
+ hidden: true,
+ desc: "Added in version 2.0 of Community Desserts.\n"
+}
+elements.orange = {
+ color: ["#ffa500","#ff951d","#ffb20a","#f68310"],
+ category: "Community",
+ state: "solid",
+ behavior: behaviors.POWDER,
+ reactions: {
+ "rock": { elem1:"juice", chance:0.1, color1:"#f7ca05" },
+ "concrete": { elem1:"juice", chance:0.1, color1:"#f7ca05" },
+ "basalt": { elem1:"juice", chance:0.1, color1:"#f7ca05" },
+ "limestone": { elem1:"juice", chance:0.1, color1:"#f7ca05" },
+ "tuff": { elem1:"juice", chance:0.1, color1:"#f7ca05" },
+ "acid": { elem1:"juice", color1:"#f7ca05" },
+ "acid_gas": { elem1:"juice", color1:"#f7ca05" },
+ },
+ breakInto: "jam",
+ breakIntoColor: ["#edb848","#f6b23e","#e59e12","#eca528"],
+ tempHigh: 256,
+ stateHigh: ["steam", "sugar"],
+ density: 435, // these oranges have peels so they float [:
+ isFood: true,
+ hidden: true,
+ desc: "Added in version 2.0 of Community Desserts.\n"
+}
+elements.peach = {
+ color: ["#ffc612","#f78a00","#d43d22","#a41622"],
+ category: "Community",
+ state: "solid",
+ behavior: behaviors.POWDER,
+ reactions: {
+ "rock": { elem1:"juice", chance:0.1, color1:"#ffc663" },
+ "concrete": { elem1:"juice", chance:0.1, color1:"#ffc663" },
+ "basalt": { elem1:"juice", chance:0.1, color1:"#ffc663" },
+ "limestone": { elem1:"juice", chance:0.1, color1:"#ffc663" },
+ "tuff": { elem1:"juice", chance:0.1, color1:"#ffc663" },
+ "acid": { elem1:"juice", color1:"#ffc663" },
+ "acid_gas": { elem1:"juice", color1:"#ffc663" },
+ },
+ breakInto: "jam",
+ breakIntoColor: ["#f59400","#f29e04","#e9a230","#eead37"],
+ tempHigh: 256,
+ stateHigh: ["steam", "sugar"],
+ density: 650.92,
+ isFood: true,
+ hidden: true,
+ desc: "Added in version 2.0 of Community Desserts.\n"
+}
+elements.plum = {
+ color: ["#952444","#5a2346","#3e2141","#450a1a"],
+ category: "Community",
+ state: "solid",
+ behavior: behaviors.POWDER,
+ reactions: {
+ "rock": { elem1:"juice", chance:0.1, color1:"#a10013" },
+ "concrete": { elem1:"juice", chance:0.1, color1:"#a10013" },
+ "basalt": { elem1:"juice", chance:0.1, color1:"#a10013" },
+ "limestone": { elem1:"juice", chance:0.1, color1:"#a10013" },
+ "tuff": { elem1:"juice", chance:0.1, color1:"#a10013" },
+ "acid": { elem1:"juice", color1:"#a10013" },
+ "acid_gas": { elem1:"juice", color1:"#a10013" },
+ },
+ breakInto: "jam",
+ breakIntoColor: ["#a9050c","#55081a","#781123","#4f1e2f"],
+ tempHigh: 256,
+ stateHigh: ["steam", "sugar"],
+ density: 697.41,
+ isFood: true,
+ hidden: true,
+ desc: "Added in version 2.0 of Community Desserts.\n"
+}
+elements.pomegranate = {
+ color: ["#fd4127","#be2216","#aa1519","#330104"],
+ category: "Community",
+ state: "solid",
+ behavior: behaviors.POWDER,
+ reactions: {
+ "rock": { elem1:"juice", chance:0.1, color1:"#c9002c" },
+ "concrete": { elem1:"juice", chance:0.1, color1:"#c9002c" },
+ "basalt": { elem1:"juice", chance:0.1, color1:"#c9002c" },
+ "limestone": { elem1:"juice", chance:0.1, color1:"#c9002c" },
+ "tuff": { elem1:"juice", chance:0.1, color1:"#c9002c" },
+ "acid": { elem1:"juice", color1:"#c9002c" },
+ "acid_gas": { elem1:"juice", color1:"#c9002c" },
+ },
+ breakInto: "jam",
+ breakIntoColor: ["#4b0000","#6b0900","#a3000e","#c80402"],
+ tempHigh: 256,
+ stateHigh: ["steam", "sugar"],
+ density: 1150,
+ isFood: true,
+ hidden: true,
+ desc: "Added in version 2.0 of Community Desserts.\n"
+}
+elements.rambutan = {
+ color: ["#9a1408","#eb2814","#9bf05f","#f6ffff"],
+ category: "Community",
+ state: "solid",
+ behavior: behaviors.POWDER,
+ reactions: {
+ "rock": { elem1:"juice", chance:0.1, color1:"#eae6dd" },
+ "concrete": { elem1:"juice", chance:0.1, color1:"#eae6dd" },
+ "basalt": { elem1:"juice", chance:0.1, color1:"#eae6dd" },
+ "limestone": { elem1:"juice", chance:0.1, color1:"#eae6dd" },
+ "tuff": { elem1:"juice", chance:0.1, color1:"#eae6dd" },
+ "acid": { elem1:"juice", color1:"#eae6dd" },
+ "acid_gas": { elem1:"juice", color1:"#eae6dd" },
+ },
+ breakInto: "jam",
+ breakIntoColor: ["#60271a","#773119","#841e01","#953810"],
+ tempHigh: 256,
+ stateHigh: ["steam", "sugar"],
+ density: 281,
+ isFood: true,
+ hidden: true,
+ desc: "Added in version 2.0 of Community Desserts.\n"
+}
+elements.strawberry = {
+ color: ["#c53415","#ea1720","#f1232d","#ea7e72"],
+ category: "Community",
+ state: "solid",
+ behavior: behaviors.POWDER,
+ reactions: {
+ "rock": { elem1:"juice", chance:0.1, color1:"#f53c28" },
+ "concrete": { elem1:"juice", chance:0.1, color1:"#f53c28" },
+ "basalt": { elem1:"juice", chance:0.1, color1:"#f53c28" },
+ "limestone": { elem1:"juice", chance:0.1, color1:"#f53c28" },
+ "tuff": { elem1:"juice", chance:0.1, color1:"#f53c28" },
+ "acid": { elem1:"juice", color1:"#f53c28" },
+ "acid_gas": { elem1:"juice", color1:"#f53c28" },
+ },
+ breakInto: "jam",
+ // Jam is strawberry-colored by default akschully
+ tempHigh: 256,
+ stateHigh: ["steam", "sugar"],
+ density: 642.47,
+ isFood: true,
+ hidden: true,
+ desc: "Added in version 2.0 of Community Desserts.\n"
+}
+
+// Vanilla items
+elements.vanilla_bean = {
+ alias: "vanilla",
+ color: ["#362C1D","#6f4a3b","#764735","#593b30"],
+ category: "Community",
+ state: "solid",
+ behavior: behaviors.POWDER,
+ reactions: {
+ "rock": { elem1:"vanilla_extract", chance:0.1 },
+ "concrete": { elem1:"vanilla_extract", chance:0.1 },
+ "basalt": { elem1:"vanilla_extract", chance:0.1 },
+ "limestone": { elem1:"vanilla_extract", chance:0.1 },
+ "tuff": { elem1:"vanilla_extract", chance:0.1 },
+ "acid": { elem1:"vanilla_extract" },
+ "acid_gas": { elem1:"vanilla_extract", },
+ },
+ breakInto: "vanilla_extract",
+ tempHigh: 315,
+ stateHigh: ["steam","ash"],
+ density: 1100,
+ desc: "Added in version 2.0 of Community Desserts.\n"
+}
+elements.vanilla_extract = {
+ // Will have more application one day
+ color: ["#5e1b00","#321501"],
+ category: "Community",
+ state: "liquid",
+ behavior: behaviors.LIQUID,
+ tempHigh: 285,
+ stateHigh: ["steam", "alcohol_gas"],
+ density: 879.16,
+ viscosity: 5000,
+ stain: 0.45,
+ hidden: true,
+ desc: "Added in version 2.0 of Community Desserts.\nMade by smashing Vanilla Bean.\nFrom lethanaero.\n",
+}
+
+// Mousse items
+elements.mousse = {
+ color: ["#fffdce","#fffee2","#fffff5"],
+ category: "Community",
+ state: "liquid",
+ behavior: behaviors.LIQUID,
+ tempHigh: 286,
+ stateHigh: ["steam", "smoke", "smoke", "sugar"],
+ density: 1707.61,
+ viscosity: 5000000, // is there a limit?
+ hidden: true,
+ desc: "Added in version 2.0 of Community Desserts.\nMade by hard mixing Jam and Sweetened Condensed Milk.\nFrom brickmaster0513.\n",
+}
+
+// Tiramisu items
+elements.egg_ribbons = {
+ color: ["#ffdc5e","#ffe07c"],
+ category: "Community",
+ state: "liquid",
+ behavior: behaviors.LIQUID,
+ tempHigh: 150,
+ stateHigh: ["smoke","hard_yolk"],
+ tempLow: 0,
+ stateLow: ["sugar","hard_yolk"],
+ density: 1227.5,
+ viscosity: 300,
+ hidden: true,
+ desc: "Added in version 2.0 of Community Desserts.\nMade by hard mixing Yolk and Sugar.\n",
+}
+elements.mascarpone = {
+ color: ["#faf9f1","#faf9f7"],
+ category: "Community",
+ state: "liquid",
+ behavior: behaviors.LIQUID,
+ reactions: {
+ "egg_ribbons": { elem1:"tiramisu_cream", elem2:null }
+ },
+ tempHigh: 218,
+ stateHigh: ["smoke","smoke"],
+ density: 946.79,
+ viscosity: 30000,
+ hidden: true,
+ desc: "Added in version 2.0 of Community Desserts.\nMade by mixing Acid with Milk or Cream at 85°C+.\n",
+}
+elements.tiramisu_cream = {
+ color: ["#fff0d1","#fbefd7"],
+ category: "Community",
+ state: "liquid",
+ behavior: behaviors.LIQUID,
+ tempHigh: 218,
+ stateHigh: ["smoke","smoke"],
+ density: 946.79,
+ viscosity: 30000,
+ hidden: true,
+ desc: "Added in version 2.0 of Community Desserts.\nMade by mixing Egg Ribbons with Mascarpone.\nCan be layered with other items to make tiramisu, from tisqbisque.\n",
}
// Adjusting existing elements here
-elements.milk.reactions = {
- "melted_chocolate": { elem1:"chocolate_milk", elem2:null },
- "chocolate": { elem1:"chocolate_milk", elem2:"melted_chocolate", chance:0.05 },
- "coffee_ground": { elem1:"chocolate_milk", chance:0.05 },
- "juice": { elem1:"fruit_milk", elem2:null, chance:0.05 },
- "soda": { elem1:"pilk", elem2:null, chance:0.1 },
- "yolk": { elem1:"eggnog", elem2:null, chance:0.1 },
- "cell": { elem1:"yogurt", chance:0.1 },
- "ash": { elem1:"soap", chance:0.1 },
- "dirt": { elem1: null, elem2: "mud" },
- "sand": { elem1: null, elem2: "wet_sand" },
- "clay_soil": { elem1: null, elem2: "clay" },
- "caramel": { color1:"#C8B39A", elem2:null, chance:0.05 },
- // Start mod items here
- "sugar": { elem1:"sweetened_condensed_milk", elem2:null, chance:0.05, tempMin:85 },
- "acid": { elem1:null, elem2:"cream_cheese", chance:0.8 },
-}
+if (!elements.milk.reactions) { elements.milk.reactions = {} };
+elements.milk.reactions.acid = { elem1: null, elem2: "cream_cheese", chance: 0.8 };
+elements.milk.reactions.sugar = { elem1: "sweetened_condensed_milk", elem2: null, chance: 0.05, tempMin: 85 };
-elements.cream.reactions = {
- "dirt": { elem1: null, elem2: "mud" },
- "sand": { elem1: null, elem2: "wet_sand" },
- "clay_soil": { elem1: null, elem2: "clay" },
- "melted_chocolate": { color1:"#664934", elem2:null },
- "chocolate": { color1:"#664934", elem2:"melted_chocolate", chance:0.05 },
- "juice": { elem1:"fruit_milk", elem2:null, chance:0.05 },
- "soda": { elem1:"pilk", elem2:null, chance:0.1 },
- "yolk": { elem1:"#eggnog", elem2:null, chance:0.1 },
- "caramel": { color1:"#C8B39A", chance:0.05 },
- "sugar": { elem2:null, chance:0.005},
- // Start mod items here
- "acid": { elem1:null, elem2:"cream_cheese", chance:0.8 },
+if (!elements.cream.reactions) { elements.cream.reactions = {} };
+elements.cream.reactions.acid = { elem1: "cream_cheese", elem2: null, chance: 0.8, tempMax:90 };
+if (!elements.acid.reactions) { elements.acid.reactions = {} };
+elements.acid.reactions.cream = { elem1: null, elem2: "mascarpone", chance: 0.5, tempMin:85 };
+
+if (!elements.dough.reactions) { elements.dough.reactions = {} };
+elements.dough.reactions.butter = { elem1: "pie_crust_batter", elem2: null, chance: 0.05 };
+
+if(elements.sugar.reactions.grape) { delete elements["sugar"].reactions.grape; }; // I would remove the reactions entirely but I don't want to mess with other mods
+if(elements.caramel.reactions.grape) { delete elements["caramel"].reactions.grape; };
+if(elements.grape.reactions.water) { delete elements["grape"].reactions.water };
+if(elements.grape.reactions.sugar_water) { delete elements["grape"].reactions.sugar_water };
+if (!elements.grape.hidden) { elements.grape.hidden = true };
+elements.grape.breakInto = "jam";
+
+if (!elements.jelly.desc) { elements.jelly.desc = "Changed in version 2.0 of Community Desserts.\nMade by mixing Jam and Water at temperatures 95°C+.\n" };
+if (!elements.jelly.hidden) { elements.jelly.hidden = true };
+elements.jelly.viscosity = 150000;
+elements.jelly.stain = 0.25;
+
+elements.yolk.onMix = function(pixel,sugarcheck) {
+ if (elements[sugarcheck.element].id == elements.sugar.id && shiftDown && Math.random() < 0.35) {
+ deletePixel(sugarcheck.x, sugarcheck.y);
+ changePixel(pixel, "egg_ribbons");
+ }
}
// Mod items first
-elements.acid.ignore = ["cream_cheese","cream","milk",
- "glass","rad_glass","glass_shard","rad_shard","stained_glass","baked_clay","acid_gas","neutral_acid","acid_cloud","water","salt_water","sugar_water","dirty_water","copper","gold","porcelain","plastic","bead","microplastic","molten_plastic","pool_water","chlorine","hydrogen","gold_coin","silver","nickel","calcium","bone"];
\ No newline at end of file
+elements.acid.ignore = ["cream_cheese", "cream", "milk", "mascarpone",
+ "glass", "rad_glass", "glass_shard", "rad_shard", "stained_glass", "baked_clay", "acid_gas", "neutral_acid", "acid_cloud", "water", "salt_water", "sugar_water", "dirty_water", "copper", "gold", "porcelain", "plastic", "bead", "microplastic", "molten_plastic", "pool_water", "chlorine", "hydrogen", "gold_coin", "silver", "nickel", "calcium", "bone"];
+
+// For new colors
+function shiftColor(base, change, direction) {
+ const colorRegEx = /^\#?[A-Fa-f0-9]{6}$/;
+
+ // Missing parameter(s)
+ if (!base || !change) {
+ console.log("Parameter absent!");
+ return '#000000';
+ }
+ // Invalid parameter(s)
+ if (!base.match(colorRegEx) || !change.match(colorRegEx)) {
+ console.log("Parameter bad!");
+ return '#000000';
+ }
+
+ // Remove any '#'
+ base = base.replace(/\#/g, '');
+ change = change.replace(/\#/g, '');
+
+ // Build new color
+ let newColor = '';
+ for (let i = 0; i < 3; i++) {
+ const basePiece = parseInt(base.substring(i * 2, i * 2 + 2), 16);
+ const changePiece = parseInt(change.substring(i * 2, i * 2 + 2), 16);
+ let newPiece = '';
+
+ if (direction === 'add') { // Adding a lighter color makes it darker. #000000 does effectively nothing! #ffffff makes it fully white!
+ newPiece = (basePiece + changePiece);
+ newPiece = newPiece > 255 ? 255 : newPiece;
+ }
+ if (direction === 'sub') { // Subtracting a darker color makes it closer to original. #000000 does effectively nothing! #ffffff makes it fully black!
+ newPiece = (basePiece - changePiece);
+ newPiece = newPiece < 0 ? 0 : newPiece;
+ }
+
+ newPiece = newPiece.toString(16);
+ newPiece = newPiece.length < 2 ? '0' + newPiece : newPiece;
+ newColor += newPiece;
+ }
+
+ return '#' + newColor;
+}
+
+function rgbToHex(rgbObj) {
+ var values = rgbObj.substring(rgbObj.indexOf('(') + 1, rgbObj.lastIndexOf(')')).split(',');
+ var r = parseInt(values[0]);
+ var g = parseInt(values[1]);
+ var b = parseInt(values[2]);
+ return "#" + componentToHex(r) + componentToHex(g) + componentToHex(b);
+}
+function componentToHex(c) {
+ let hex = c.toString(16);
+ return hex.length == 1 ? "0" + hex : hex;
+}
\ No newline at end of file
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/drills.js b/mods/drills.js
new file mode 100644
index 00000000..9cc21fdc
--- /dev/null
+++ b/mods/drills.js
@@ -0,0 +1,609 @@
+/* Made by: Necrotic_Phantom
+ With help from: voidapex11 */
+
+// For change log: "+" = addition, "-" = removal and "~" = change. L, R, U, D corresponds to LEFT, RIGHT, UP and DOWN
+// "committed" means posted current version on github. It is a courtesy and important, especially if you're working on another person's mod at the same time as them, so you don't disrupt each other's work
+
+/*
+===CHANGE LOG===
+ Version: 1.0.0
+@Necrotic_Phantom & @voidapex11
++ steel drill L, R, U & D
++ steel drill missile L, R, U & D
++ diamond drill L, R, U & D
++ diamond drill missile L, R, U & D
++ void drill L, R, U & D
++ void drill missile L, R, U & D
++ drills.js info (drills_info) element to 'mods' category
+~ changed all element colors from gray to individual colors
+~ fixed steel/diamond/void drill missile L, R, U & D drilling errors
+~ fixed steel/diamond/void drill R & steel/diamond/void drill missile R crashing upon border collision
+~ made steel/diamond/void drill missile L, R, U & D explode upon border contact
+~ committed
+*/
+
+/* Future Plans (in approx order):
+~ find error/fix all types of drill_RIGHT crashing game a few seconds after hitting border
++ reverse steel drill L, R, U & D
++ reverse diamond drill L, R, U & D
++ reverse void drill L, R, U & D
++ random steel drill
++ random steel drill missile
++ random reverse steel drill
++ random diamond drill
++ random diamond drill missile
++ random reverse diamond drill
++ random void drill
++ random void drill missile
++ random reverse void drill
++ programmable steel drill
++ programmable steel drill missile
++ programmable reverse steel drill
++ programmable diamond drill
++ programmable diamond drill missile
++ programmable reverse diamond drill
++ programmable void drill
++ programmable void drill missile
++ programmable reverse void drill
++ seeking steel drill
++ seeking steel drill missile
++ seeking reverse steel drill
++ seeking diamond drill
++ seeking diamond drill missile
++ seeking reverse diamond drill
++ seeking void drill
++ seeking void drill missile
++ seeking reverse void drill
++ ricochet drills??? */
+
+drills_mod_desc_Colour = "#000000"
+steel_drill_Colour = "#71797e"
+steel_drill_missile_Colour = ["#71797e", "#ff0000"];
+diamond_drill_Colour = "#03fcec"
+diamond_drill_missile_Colour = ["#03fcec", "#ff0000"];
+void_drill_Colour = "#262626"
+void_drill_missile_Colour = ["#262626", "#ff0000"];
+
+
+
+elements.drills_info = {
+ color: drills_mod_desc_Colour,
+ name: "drills.js_info",
+ category: "Mods",
+ behavior: behaviors.SELFDELETE,
+ maxSize: 1,
+ tool: function(pixel) {},
+ onSelect: function(pixel) {
+ let info1stMod = "The drills.js mod adds different kinds of drills to a new 'drills' category.\n\nMod made by: Necrotic_Phantom. \n With help from: voidapex11."
+ alert(info1stMod)
+ return
+ },
+};
+
+
+
+steel_drill_function = function(pixel, dif_x, dif_y) {
+ dif_x = dif_x-pixel.x
+ dif_y = dif_y-pixel.y
+ if (!outOfBounds(pixel.x+dif_x,pixel.y+dif_y)) {
+ pxl = pixelMap[pixel.x+dif_x][pixel.y+dif_y]
+ if (!isEmpty(pixel.x+dif_x,pixel.y+dif_y)) {
+ if (elements[pxl.element].hardness <= 0.8) {
+ delete pixelMap[pixel.x+dif_x][pixel.y+dif_y];
+ }
+ };
+ tryMove(pixel,pixel.x+dif_x,pixel.y+dif_y);
+ };
+ doDefaults(pixel);
+}
+
+elements.steel_drill_LEFT = {
+ color: steel_drill_Colour,
+ tick: function(pixel) {
+ steel_drill_function(pixel,pixel.x-1,pixel.y);
+ },
+ category: "Drills",
+ breakInto: ["metal_scrap", "steel", "iron", "tin"],
+ tempHigh: 10000,
+ stateHigh: ["molten_steel", "molten_iron", "molten_tin"],
+ density: 10000,
+ hardness: 0.8,
+ conduct: 1,
+ state: "solid",
+}
+
+elements.steel_drill_RIGHT = {
+ color: steel_drill_Colour,
+ tick: function(pixel) {
+ steel_drill_function(pixel,pixel.x+1,pixel.y);
+ },
+ category: "Drills",
+ breakInto: ["metal_scrap", "steel", "iron", "tin"],
+ tempHigh: 10000,
+ stateHigh: ["molten_aluminum", "molten_steel", "molten_iron", "molten_tin"],
+ density: 10000,
+ hardness: 0.8,
+ conduct: 1,
+ state: "solid",
+}
+
+elements.steel_drill_UP = {
+ color: steel_drill_Colour,
+ tick: function(pixel) {
+ steel_drill_function(pixel,pixel.x,pixel.y-1);
+ },
+ category: "Drills",
+ breakInto: ["metal_scrap", "steel", "iron", "tin"],
+ tempHigh: 10000,
+ stateHigh: ["molten_aluminum", "molten_steel", "molten_iron", "molten_tin"],
+ density: 10000,
+ hardness: 0.8,
+ conduct: 1,
+ state: "solid",
+}
+
+elements.steel_drill_DOWN = {
+ color: steel_drill_Colour,
+ tick: function(pixel) {
+ steel_drill_function(pixel,pixel.x,pixel.y+1);
+ },
+ category: "Drills",
+ breakInto: ["metal_scrap", "steel", "iron", "tin"],
+ tempHigh: 10000,
+ stateHigh: ["molten_aluminum", "molten_steel", "molten_iron", "molten_tin"],
+ density: 10000,
+ hardness: 0.8,
+ conduct: 1,
+ state: "solid",
+}
+
+
+
+steel_drill_missile_function = function(pixel, dif_x, dif_y) {
+ dif_x = dif_x-pixel.x
+ dif_y = dif_y-pixel.y
+ if (pixel.die <= 0) {
+ deletePixel(pixel.x, pixel.y)
+ explodeAt(pixel.x, pixel.y, 15);
+ return true
+ };
+ if (!outOfBounds(pixel.x+dif_x,pixel.y+dif_y)) {
+ pxl = pixelMap[pixel.x+dif_x][pixel.y+dif_y]
+ if (!isEmpty(pixel.x+dif_x,pixel.y+dif_y)) {
+ pixel.primed = true
+ if (elements[pxl.element].hardness <= 0.8) {
+ delete pixelMap[pixel.x+dif_x][pixel.y+dif_y];
+ }
+ }
+ else if (pixel.primed) {
+ pixel.die--
+ return true
+ };
+ tryMove(pixel,pixel.x+dif_x,pixel.y+dif_y);
+ }
+ else if (outOfBounds(pixel.x+dif_x, pixel.y+dif_y)) {
+ deletePixel(pixel.x, pixel.y)
+ explodeAt(pixel.x, pixel.y, 15);
+ };
+ doDefaults(pixel);
+}
+
+elements.steel_drill_missile_LEFT = {
+ color: steel_drill_missile_Colour,
+ properties: {
+ die: 5,
+ primed: false,
+ },
+ tick: function(pixel) {
+ steel_drill_missile_function(pixel,pixel.x-1,pixel.y);
+ },
+ category: "Drills",
+ density: 10000,
+ hardness: 0.8,
+ conduct: 1,
+ state: "solid",
+ maxSize: 1,
+}
+
+elements.steel_drill_missile_RIGHT = {
+ color: steel_drill_missile_Colour,
+ properties: {
+ die: 5,
+ primed: false,
+ },
+ tick: function(pixel) {
+ steel_drill_missile_function(pixel,pixel.x+1,pixel.y);
+ },
+ category: "Drills",
+ density: 10000,
+ hardness: 0.8,
+ conduct: 1,
+ state: "solid",
+ maxSize: 1,
+}
+
+elements.steel_drill_missile_UP = {
+ color: steel_drill_missile_Colour,
+ properties: {
+ die: 5,
+ primed: false,
+ },
+ tick: function(pixel) {
+ steel_drill_missile_function(pixel,pixel.x,pixel.y-1);
+ },
+ category: "Drills",
+ density: 10000,
+ hardness: 0.8,
+ conduct: 1,
+ state: "solid",
+ maxSize: 1,
+}
+
+elements.steel_drill_missile_DOWN = {
+ color: steel_drill_missile_Colour,
+ properties: {
+ die: 5,
+ primed: false,
+ },
+ tick: function(pixel) {
+ steel_drill_missile_function(pixel,pixel.x,pixel.y+1);
+ },
+ category: "Drills",
+ density: 10000,
+ hardness: 0.8,
+ conduct: 1,
+ state: "solid",
+ maxSize: 1,
+}
+
+
+
+diamond_drill_function = function(pixel, dif_x, dif_y) {
+ dif_x = dif_x-pixel.x
+ dif_y = dif_y-pixel.y
+ if (!outOfBounds(pixel.x+dif_x,pixel.y+dif_y)) {
+ pxl = pixelMap[pixel.x+dif_x][pixel.y+dif_y]
+ if (!isEmpty(pixel.x+dif_x,pixel.y+dif_y)) {
+ if (elements[pxl.element].hardness <= 0.99) {
+ delete pixelMap[pixel.x+dif_x][pixel.y+dif_y];
+ }
+ };
+ tryMove(pixel,pixel.x+dif_x,pixel.y+dif_y);
+ };
+ doDefaults(pixel);
+}
+
+elements.diamond_drill_LEFT = {
+ color: diamond_drill_Colour,
+ tick: function(pixel) {
+ diamond_drill_function(pixel,pixel.x-1,pixel.y);
+ },
+ category: "Drills",
+ breakInto: ["metal_scrap", "diamond", "iron", "tin"],
+ tempHigh: 10000,
+ stateHigh: ["molten_aluminum", "carbon_dioxide", "molten_iron", "molten_tin"],
+ density: 10000,
+ hardness: 0.99,
+ conduct: 1,
+ state: "solid",
+}
+
+elements.diamond_drill_RIGHT = {
+ color: diamond_drill_Colour,
+ tick: function(pixel) {
+ diamond_drill_function(pixel,pixel.x+1,pixel.y);
+ },
+ category: "Drills",
+ breakInto: ["metal_scrap", "diamond", "iron", "tin"],
+ tempHigh: 10000,
+ stateHigh: ["molten_aluminum", "carbon_dioxide", "molten_iron", "molten_tin"],
+ density: 10000,
+ hardness: 0.99,
+ conduct: 1,
+ state: "solid",
+}
+
+elements.diamond_drill_UP = {
+ color: diamond_drill_Colour,
+ tick: function(pixel) {
+ diamond_drill_function(pixel,pixel.x,pixel.y-1);
+ },
+ category: "Drills",
+ breakInto: ["metal_scrap", "diamond", "iron", "tin"],
+ tempHigh: 10000,
+ stateHigh: ["molten_aluminum", "carbon_dioxide", "molten_iron", "molten_tin"],
+ density: 10000,
+ hardness: 0.99,
+ conduct: 1,
+ state: "solid",
+}
+
+elements.diamond_drill_DOWN = {
+ color: diamond_drill_Colour,
+ tick: function(pixel) {
+ diamond_drill_function(pixel,pixel.x,pixel.y+1);
+ },
+ category: "Drills",
+ breakInto: ["metal_scrap", "diamond", "iron", "tin"],
+ tempHigh: 10000,
+ stateHigh: ["molten_aluminum", "carbon_dioxide", "molten_iron", "molten_tin"],
+ density: 10000,
+ hardness: 0.99,
+ conduct: 1,
+ state: "solid",
+}
+
+
+
+diamond_drill_missile_function = function(pixel, dif_x, dif_y) {
+ dif_x = dif_x-pixel.x
+ dif_y = dif_y-pixel.y
+ if (pixel.die <= 0) {
+ deletePixel(pixel.x, pixel.y)
+ explodeAt(pixel.x, pixel.y, 15);
+ return true
+ };
+ if (!outOfBounds(pixel.x+dif_x,pixel.y+dif_y)) {
+ pxl = pixelMap[pixel.x+dif_x][pixel.y+dif_y]
+ if (!isEmpty(pixel.x+dif_x,pixel.y+dif_y)) {
+ pixel.primed = true
+ if (elements[pxl.element].hardness <= 0.99) {
+ delete pixelMap[pixel.x+dif_x][pixel.y+dif_y];
+ }
+ }
+ else if (pixel.primed) {
+ pixel.die--
+ return true
+ };
+ tryMove(pixel,pixel.x+dif_x,pixel.y+dif_y);
+ }
+ else if (outOfBounds(pixel.x+dif_x, pixel.y+dif_y)) {
+ deletePixel(pixel.x, pixel.y)
+ explodeAt(pixel.x, pixel.y, 15);
+ };
+ doDefaults(pixel);
+}
+
+elements.diamond_drill_missile_LEFT = {
+ color: diamond_drill_missile_Colour,
+ properties: {
+ die: 5,
+ primed: false,
+ },
+ tick: function(pixel) {
+ diamond_drill_missile_function(pixel,pixel.x-1,pixel.y);
+ },
+ category: "Drills",
+ density: 10000,
+ hardness: 0.99,
+ conduct: 1,
+ state: "solid",
+ maxSize: 1,
+}
+
+elements.diamond_drill_missile_RIGHT = {
+ color: diamond_drill_missile_Colour,
+ properties: {
+ die: 5,
+ primed: false,
+ },
+ tick: function(pixel) {
+ diamond_drill_missile_function(pixel,pixel.x+1,pixel.y);
+ },
+ category: "Drills",
+ density: 10000,
+ hardness: 0.99,
+ conduct: 1,
+ state: "solid",
+ maxSize: 1,
+}
+
+elements.diamond_drill_missile_UP = {
+ color: diamond_drill_missile_Colour,
+ properties: {
+ die: 5,
+ primed: false,
+ },
+ tick: function(pixel) {
+ diamond_drill_missile_function(pixel,pixel.x,pixel.y-1);
+ },
+ category: "Drills",
+ density: 10000,
+ hardness: 0.99,
+ conduct: 1,
+ state: "solid",
+ maxSize: 1,
+}
+
+elements.diamond_drill_missile_DOWN = {
+ color: diamond_drill_missile_Colour,
+ properties: {
+ die: 5,
+ primed: false,
+ },
+ tick: function(pixel) {
+ diamond_drill_missile_function(pixel,pixel.x,pixel.y+1);
+ },
+ category: "Drills",
+ density: 10000,
+ hardness: 0.99,
+ conduct: 1,
+ state: "solid",
+ maxSize: 1,
+}
+
+
+
+void_drill_function = function(pixel, dif_x, dif_y) {
+ dif_x = dif_x-pixel.x
+ dif_y = dif_y-pixel.y
+ if (!outOfBounds(pixel.x+dif_x,pixel.y+dif_y)) {
+ pxl = pixelMap[pixel.x+dif_x][pixel.y+dif_y]
+ if (!isEmpty(pixel.x+dif_x,pixel.y+dif_y)) {
+ if (elements[pxl.element].hardness <= 1) {
+ delete pixelMap[pixel.x+dif_x][pixel.y+dif_y];
+ }
+ };
+ tryMove(pixel,pixel.x+dif_x,pixel.y+dif_y);
+ };
+ doDefaults(pixel);
+}
+
+elements.void_drill_LEFT = {
+ color: void_drill_Colour,
+ tick: function(pixel) {
+ void_drill_function(pixel,pixel.x-1,pixel.y);
+ },
+ category: "Drills",
+ breakInto: ["metal_scrap", "void", "iron", "tin"],
+ tempHigh: 10000,
+ stateHigh: ["molten_aluminum", "void", "molten_iron", "molten_tin"],
+ density: 10000,
+ hardness: 1,
+ conduct: 1,
+ state: "solid",
+}
+
+elements.void_drill_RIGHT = {
+ color: void_drill_Colour,
+ tick: function(pixel) {
+ void_drill_function(pixel,pixel.x+1,pixel.y);
+ },
+ category: "Drills",
+ breakInto: ["metal_scrap", "void", "iron", "tin"],
+ tempHigh: 10000,
+ stateHigh: ["molten_aluminum", "void", "molten_iron", "molten_tin"],
+ density: 10000,
+ hardness: 1,
+ conduct: 1,
+ state: "solid",
+}
+
+elements.void_drill_UP = {
+ color: void_drill_Colour,
+ tick: function(pixel) {
+ void_drill_function(pixel,pixel.x,pixel.y-1);
+ },
+ category: "Drills",
+ breakInto: ["metal_scrap", "void", "iron", "tin"],
+ tempHigh: 10000,
+ stateHigh: ["molten_aluminum", "void", "molten_iron", "molten_tin"],
+ density: 10000,
+ hardness: 1,
+ conduct: 1,
+ state: "solid",
+}
+
+elements.void_drill_DOWN = {
+ color: void_drill_Colour,
+ tick: function(pixel) {
+ void_drill_function(pixel,pixel.x,pixel.y+1);
+ },
+ category: "Drills",
+ breakInto: ["metal_scrap", "void", "iron", "tin"],
+ tempHigh: 10000,
+ stateHigh: ["molten_aluminum", "void", "molten_iron", "molten_tin"],
+ density: 10000,
+ hardness: 1,
+ conduct: 1,
+ state: "solid",
+}
+
+
+
+void_drill_missile_function = function(pixel, dif_x, dif_y) {
+ dif_x = dif_x-pixel.x
+ dif_y = dif_y-pixel.y
+ if (pixel.die <= 0) {
+ deletePixel(pixel.x, pixel.y)
+ explodeAt(pixel.x, pixel.y, 15);
+ return true
+ };
+ if (!outOfBounds(pixel.x+dif_x,pixel.y+dif_y)) {
+ pxl = pixelMap[pixel.x+dif_x][pixel.y+dif_y]
+ if (!isEmpty(pixel.x+dif_x,pixel.y+dif_y)) {
+ pixel.primed = true
+ if (elements[pxl.element].hardness <= 1) {
+ delete pixelMap[pixel.x+dif_x][pixel.y+dif_y];
+ }
+ }
+ else if (pixel.primed) {
+ pixel.die--
+ return true
+ };
+ tryMove(pixel,pixel.x+dif_x,pixel.y+dif_y);
+ }
+ else if (outOfBounds(pixel.x+dif_x, pixel.y+dif_y)) {
+ deletePixel(pixel.x, pixel.y)
+ explodeAt(pixel.x, pixel.y, 15);
+ };
+ doDefaults(pixel);
+}
+
+elements.void_drill_missile_LEFT = {
+ color: void_drill_missile_Colour,
+ properties: {
+ die: 5,
+ primed: false,
+ },
+ tick: function(pixel) {
+ void_drill_missile_function(pixel,pixel.x-1,pixel.y);
+ },
+ category: "Drills",
+ density: 10000,
+ hardness: 1,
+ conduct: 1,
+ state: "solid",
+ maxSize: 1,
+}
+
+elements.void_drill_missile_RIGHT = {
+ color: void_drill_missile_Colour,
+ properties: {
+ die: 5,
+ primed: false,
+ },
+ tick: function(pixel) {
+ void_drill_missile_function(pixel,pixel.x+1,pixel.y);
+ },
+ category: "Drills",
+ density: 10000,
+ hardness: 1,
+ conduct: 1,
+ state: "solid",
+ maxSize: 1,
+}
+
+elements.void_drill_missile_UP = {
+ color: void_drill_missile_Colour,
+ properties: {
+ die: 5,
+ primed: false,
+ },
+ tick: function(pixel) {
+ void_drill_missile_function(pixel,pixel.x,pixel.y-1);
+ },
+ category: "Drills",
+ density: 10000,
+ hardness: 1,
+ conduct: 1,
+ state: "solid",
+ maxSize: 1,
+}
+
+elements.void_drill_missile_DOWN = {
+ color: void_drill_missile_Colour,
+ properties: {
+ die: 5,
+ primed: false,
+ },
+ tick: function(pixel) {
+ void_drill_missile_function(pixel,pixel.x,pixel.y+1);
+ },
+ category: "Drills",
+ density: 10000,
+ hardness: 1,
+ conduct: 1,
+ state: "solid",
+ maxSize: 1,
+}
\ No newline at end of file
diff --git a/mods/potato_chips.js b/mods/potato_chips.js
index e0de48f1..c1beeb75 100644
--- a/mods/potato_chips.js
+++ b/mods/potato_chips.js
@@ -4,10 +4,10 @@ elements.potato_chip = {
density: 1350,
color: ["#F7DD93", "#D8A44B"],
category: "food",
- desc: "Potato chip. Turns potato next to it into potato chip if temp is >= 104.",
+ desc: "Potato chip. Turns potato next to it into potato chip if temp is >= 104 - 180.",
tick: function(pixel) {
- if(pixelTicks - pixel.start >= 15) {
+ 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");
diff --git a/mods/scp.js b/mods/scp.js
index a6eb71dc..db64a288 100644
--- a/mods/scp.js
+++ b/mods/scp.js
@@ -1,35 +1,36 @@
window.addEventListener("load", () => {
document.getElementById("elementButton-mask_head")?.remove()
})
-
window.addEventListener("load", () => {
document.getElementById("elementButton-mask_body")?.remove()
})
-
+window.addEventListener("load", () => {
+ document.getElementById("elementButton-infected_skin")?.remove()
+})
+window.addEventListener("load", () => {
+ document.getElementById("elementButton-infected_meat")?.remove()
+})
+window.addEventListener("load", () => {
+ document.getElementById("elementButton-frozen_infected_meat")?.remove()
+})
window.addEventListener("load", () => {
document.getElementById("elementButton-zombie")?.remove()
})
-
window.addEventListener("load", () => {
document.getElementById("elementButton-z_head")?.remove()
})
-
window.addEventListener("load", () => {
document.getElementById("elementButton-z_body")?.remove()
})
-
window.addEventListener("load", () => {
document.getElementById("elementButton-REDACTED")?.remove()
})
-
window.addEventListener("load", () => {
document.getElementById("elementButton-hyper_tickle_monster")?.remove()
})
-
window.addEventListener("load", () => {
document.getElementById("elementButton-calm_682")?.remove()
})
-
window.addEventListener("load", () => {
document.getElementById("elementButton-mad_682")?.remove()
})
@@ -57,17 +58,22 @@ elements.SCP_008 = {
reactions: {
"head": { elem1:null, elem2:"z_head" , chance:0.5 },
"body": { elem1:null, elem2:"z_body" , chance:0.5 },
+ "skin": { elem1:null, elem2: ["infected_skin","infected_skin","infected_meat"] , chance:0.3 },
+ "blood": { elem1:null, elem2:"infection" , chance:0.6 },
+ "meat": { elem1:null, elem2:"infected_meat" , chance:0.4 },
+ "rotten_meat": { elem1:null, elem2:"infected_meat" , chance:0.5 },
+ "frozen_meat": { elem1:null, elem2:"frozen_infected_meat" , chance:0.3 },
"frog": { elem2:"SCP_008" , chance:0.5 },
"ant": { elem2:"SCP_008" , chance:0.5 },
"bee": { elem2:"SCP_008" , chance:0.5 },
"fish": { elem2:"SCP_008" , chance:0.5 },
"firefly": { elem2:"SCP_008" , chance:0.5 },
- "chlorine": { elem1: [null,null,null,null,"anomalous_essence"] , chance:0.01 },
- "liquid_chlorine": { elem1: [null,null,null,null,"anomalous_essence"] , chance:0.01 },
- "light": { elem1: [null,null,null,null,"anomalous_essence"] , chance:0.01 },
+ "chlorine": { elem1: [null,null,null,null,null,null,null,null,"anomalous_essence"] , chance:0.01 },
+ "liquid_chlorine": { elem1: [null,null,null,null,null,null,null,null,"anomalous_essence"] , chance:0.01 },
+ "light": { elem1: [null,null,null,null,null,null,null,null,"anomalous_essence"] , chance:0.01 },
},
- tempHigh: 1000,
- stateHigh: [null,null,null,null,"anomalous_essence"],
+ tempHigh: 750,
+ stateHigh: [null,null,null,null,null,null,null,null,"anomalous_essence"],
tempLow: -100,
stateLow: "frozen_008",
category: "scp",
@@ -80,14 +86,19 @@ elements.frozen_008 = {
behavior: [
"XX|XX|XX",
"XX|DL%0.001|X",
- "M2%1.0|M1%1.0|M2%1.0",
+ "XX|M1%1.0|XX",
],
reactions: {
"head": { elem1:null, elem2:"z_head" , chance:0.4 },
"body": { elem1:null, elem2:"z_body" , chance:0.4 },
- "chlorine": { elem1: [null,null,null,null,"anomalous_essence"] , chance:0.01 },
- "liquid_chlorine": { elem1: [null,null,null,null,"anomalous_essence"] , chance:0.01 },
- "light": { elem1: [null,null,null,null,"anomalous_essence"] , chance:0.01 },
+ "skin": { elem1:null, elem2:"frozen_infected_meat" , chance:0.4 },
+ "blood": { elem1:null, elem2:"infection" , chance:0.6 },
+ "meat": { elem1:null, elem2:"frozen_infected_meat" , chance:0.4 },
+ "rotten_meat": { elem1:null, elem2:"frozen_infected_meat" , chance:0.5 },
+ "frozen_meat": { elem1:null, elem2:"frozen_infected_meat" , chance:0.4 },
+ "chlorine": { elem1: [null,null,null,null,null,null,null,null,"anomalous_essence"] , chance:0.01 },
+ "liquid_chlorine": { elem1: [null,null,null,null,null,null,null,null,"anomalous_essence"] , chance:0.01 },
+ "light": { elem1: [null,null,null,null,null,null,null,null,"anomalous_essence"] , chance:0.01 },
},
temp: -50,
tempHigh: 0,
@@ -96,6 +107,131 @@ elements.frozen_008 = {
state: "solid",
density: 95,
},
+
+elements.infected_skin = {
+ color: ["#11111f","#75816B","#4D6B53"],
+ singleColor: true,
+ behavior: [
+ "XX|CR:stench,stench,stench,SCP_008,fly%0.05 AND CH:meat>infected_meat%1|XX",
+ "CH:meat>infected_meat%1|XX|CH:meat>infected_meat%1",
+ "M2%1.0|M1%1.0 AND CH:meat>infected_meat%1|M2%1.0",
+ ],
+ tick: function(pixel) {
+ if (pixel.temp > 40 && Math.random() < 0.003) {
+ for (var i = 0; i < adjacentCoords.length; i++) {
+ var coords = adjacentCoords[i];
+ var x = pixel.x + coords[0];
+ var y = pixel.y + coords[1];
+ if (isEmpty(x,y)) {
+ pixel.temp -= 20;
+ createPixel("infection",x,y)
+ break;
+ }
+ }
+ }
+ if (pixel.temp < 36 && Math.random() < 0.1) {
+ pixel.temp += 1;
+ }
+ doDefaults(pixel);
+ },
+ reactions: {
+ "cell": { chance:0.01, func:function(pixel1,pixel2){
+ changePixel(pixel2,"infected_skin");
+ pixel2.color = pixelColorPick(pixel2,RGBToHex(pixel1.color.match(/\d+/g)))
+ if (pixel1.origColor) { pixel2.origColor = pixel1.origColor }
+ } },
+ "skin": { chance:0.01, func:function(pixel1,pixel2){
+ changePixel(pixel2,"infected_skin");
+ pixel2.color = pixelColorPick(pixel2,RGBToHex(pixel1.color.match(/\d+/g)))
+ if (pixel1.origColor) { pixel2.origColor = pixel1.origColor }
+ } },
+ "blood": { elem2:"infection" , chance:0.6 },
+ "acid": { elem1:"infection" },
+ "soap": { elem1:null, elem2:null, chance:0.005 },
+ "light": { stain1:"#825043" },
+ "poison": { stain1:"#cc564b" },
+ "poison_gas": { stain1:"#cc564b" },
+ "infection": { stain1:"#cc564b" },
+ "pollen": { stain1:"#cc564b" },
+ "dust": { stain1:"#cc564b" },
+ "flea": { stain1:"#cc564b" },
+ "mushroom_spore": { stain1:"#cc564b" },
+ "mushroom_stalk": { stain1:"#cc564b" },
+ "chlorine": { stain1:"#cc564b" },
+ "quicklime": { stain1:"#cc564b" },
+ },
+ category:"solids",
+ breakInto: [null,null,"SCP_008","infection","dust"],
+ temp: 37,
+ tempHigh: 200,
+ stateHigh: ["cooked_meat","cooked_meat","cooked_meat","SCP_008"],
+ tempLow: -18,
+ stateLow: "frozen_008_meat",
+ burn:5,
+ burnTime:400,
+ burnInto: ["cooked_meat","cooked_meat","SCP_008"],
+ state: "solid",
+ density: 1010,
+ conduct: 0.04,
+ movable: false,
+},
+
+elements.infected_meat = {
+ color: ["#b8b165","#b89765"],
+ behavior: [
+ "XX|CR:stench,stench,stench,SCP_008,fly%0.25 AND CH:rotten_meat,meat>infected_meat%1|XX",
+ "SP%99 AND CH:rotten_meat,meat>infected_meat%1|XX|SP%99 AND CH:rotten_meat,meat>infected_meat%1",
+ "XX|M1 AND CH:rotten_meat,meat>infected_meat%1|XX",
+ ],
+ reactions: {
+ "water": { elem2:"dirty_water" },
+ "salt_water": { elem2:"dirty_water" },
+ "sugar_water": { elem2:"dirty_water" },
+ "dirty_water": { elem2:"broth", tempMin:70, color2:"#d7db69" },
+ "seltzer": { elem2:"dirty_water" },
+ "fly": { elem1: [null,null,"SCP_008"] , elem2: ["dead_bug","dead_bug","SCP_008"] , chance:0.2},
+ "blood": { elem2:"infection" , chance:0.6 },
+ "skin": { elem2:"infected_skin" , chance:0.6 },
+ },
+ tempHigh: 300,
+ stateHigh: ["SCP_008","ash","ammonia"],
+ tempLow: -20,
+ stateLow: "frozen_infected_meat",
+ category:"scp",
+ hidden: true,
+ burn:12,
+ burnTime:200,
+ burnInto:["SCP_008","ash","ammonia"],
+ state: "solid",
+ density: 1005,
+ conduct: 0.1,
+ isFood: true
+},
+
+elements.frozen_infected_meat = {
+ color: "#242424",
+ behavior: [
+ "XX|CH:rotten_meat,frozen_meat>frozen_infected_meat%1|XX",
+ "SP%99 AND CH:rotten_meat,frozen_meat>frozen_infected_meat%1|XX|SP%99 AND CH:rotten_meat,frozen_meat>frozen_infected_meat%1",
+ "XX|M1 AND CH:rotten_meat,frozen_meat>frozen_infected_meat%1|XX",
+ ],
+ reactions: {
+ "water": { elem2:"dirty_water" },
+ "salt_water": { elem1:"infected_meat",elem2:"dirty_water" , chance:0.5 },
+ "sugar_water": { elem2:"dirty_water" },
+ "seltzer": { elem2:"dirty_water" },
+ "fly": { elem2: ["dead_bug","dead_bug","SCP_008"] , chance:0.2},
+ "blood": { elem2:"infection" , chance:0.6 },
+ },
+ temp: -20,
+ tempHigh: 10,
+ stateHigh: "infected_meat",
+ category:"scp",
+ hidden: true,
+ state: "solid",
+ density: 1005,
+ conduct: 0.05,
+},
elements.possessive_mask = {
color: ["#f7ead0","#faf9f6","#e9e6db"],
@@ -376,7 +512,7 @@ elements.black_acid = {
tempLow: -58.88,
burn: 30,
burnTime: 10,
- burnInto: ["fire","fire","fire","fire","fire","fire","fire","fire","ash","ash","anomalous_essence"],
+ burnInto: ["fire","fire","fire","fire","fire","fire","fire","fire","ash","ash","fire","fire","fire","fire","ash","ash","anomalous_essence"],
fireColor: "#111111",
state: "liquid",
density: 1105,
@@ -394,7 +530,7 @@ elements.SCP_055 = {
category: "scp",
state: "solid",
tempHigh: 55055055055,
- stateHigh: ["metal_scrap","smoke","smoke","anomalous_essence"],
+ stateHigh: ["metal_scrap","metal_scrap","smoke","smoke","smoke","smoke","smoke","smoke","smoke",null,"anomalous_essence"],
},
elements.REDACTED = {
@@ -408,6 +544,7 @@ elements.REDACTED = {
],
category: "scp",
state: "solid",
+ movable: false,
},
elements.plague_doctor = {
@@ -428,7 +565,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";
- pixelMap[pixel.x][pixel.y].color = ["#11111f","#242424"];
+ pixel.color = pixelColorPick(pixel)
}
else {
deletePixel(pixel.x, pixel.y);
@@ -820,7 +957,7 @@ elements.shy_head = {
hidden: true,
color: ["#f7ead0","#faf9f6","#e9e6db"],
category: "scp",
- breakInto: ["bone","bone","blood","bone","bone","blood","anomalous_essence"],
+ breakInto: ["bone","bone","blood","bone","bone","blood","bone","bone","blood","bone","bone","blood","anomalous_essence"],
properties: {
dead: false
},
@@ -854,7 +991,7 @@ elements.shy_head = {
pixel.dead = pixelTicks;
}
}
- }
+ }
// homeostasis
if (pixel.temp > 37) { pixel.temp -= 1; }
else if (pixel.temp < 37) { pixel.temp += 1; }
@@ -875,7 +1012,6 @@ elements.shy_head = {
"z_body": { elem2: ["infection","infection","rotten_meat","bone",null] },
"rat": { elem2: ["infection","rotten_meat",null]},
"frog": { elem2: ["slime",null] },
- "cell": { elem2: ["dna","water",null] },
"cancer": { elem2: ["dna","dirty_water",null], },
"blood": { elem2: null, chance:0.2 },
"bone": { elem2: null, chance:0.2 },
@@ -890,7 +1026,7 @@ elements.shy_body = {
hidden: true,
color: ["#f7ead0","#faf9f6","#e9e6db"],
category: "scp",
- breakInto: ["bone","bone","blood","bone","bone","blood","anomalous_essence"],
+ breakInto: ["bone","bone","blood","bone","bone","blood","bone","bone","blood","bone","bone","blood","anomalous_essence"],
properties: {
dead: false,
dir: 1,
@@ -1004,7 +1140,7 @@ elements.SCP_682 = {
color: ["#424242","#75816B","#4D6B53"],
behavior: [
"M2%0.5|M2%0.3|M2%0.5",
- "M1%10|XX|M1%10",
+ "M2%10|XX|M2%10",
"XX|M1|XX",
],
category: "scp",
@@ -1067,7 +1203,7 @@ elements.mad_682 = {
color: ["#424242","#75816B","#4D6B53"],
behavior: [
"M2%0.5|M2%0.3|M2%0.5",
- "M1%10 AND CH:concrete>dust AND DL:dust|CH:SCP_682%0.3|M1%10 AND CH:concrete>dust AND DL:dust",
+ "M2%10|CH:SCP_682%0.3|M2%10",
"XX|M1|XX",
],
category: "scp",
@@ -1093,8 +1229,8 @@ elements.mad_682 = {
"lead": { elem2 : ["metal_scrap","metal_scrap","radiation"] , chance:0.3 },
"glass": { elem2 : "glass_shard" },
"wood": { elem2 : "sawdust" },
- "concrete": { elem2 : "dust" , chance:0.1 },
- "dust": { elem2 : null , chance:0.1 },
+ "concrete": { elem2 : "dust" , chance:10 },
+ "dust": { elem2 : null , chance:10 },
},
hidden: true,
state: "solid",