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.jsAdds different temperature-modifying tools (±350/tick, NaN, and Infinity)Alice extra_element_info.jsAdds descriptions to various vanilla elements. Used to provide the functionality that desc now does before it was added to vanillaMelecie find.jsAdds a find mode that highlights a chosen element as pulsating red and yellow (read commit description)Alice +jaydsfunctions.jsAdds extra toolsJayd insane_random_events.jsMassively buffs random eventsAlice invertscroll.jsInverts the scroll wheel for adjusting brush sizeSquareScreamYT mobile_shift.jsAdds a button for shift on mobileSquareScreamYT @@ -157,7 +158,7 @@ Science & Chemistry alcohol.jsAdds methanol, (iso-)propanol, and butanolAlice alkahest.jsAdds the alkahest, a liquid which dissolves anythingAlice -aScientistsWish.jsAdds things that related to science, especially radiationCarbon Monoxide, CPU +aScientistsWish.jsAdds things that related to science, especially radiationCarbon Monoxide, salmonfishy bettermetalscrap.jsAllows metal scrap to be melted back into its original materialnousernamefound bigger_star_spawners.jsAdds spawners for larger starsAlice bioooze_and_pyrogens.jsAdds Bio-Ooze from Frackin’ Universe and several heat-producing materials from various games’ modsAlice @@ -221,23 +222,23 @@ more_breaking.jsAllows for breaking more elements in explosionsAlice rays.jsAdds more Ray typesAlice rays++.jsAdds a couple more raysuptzik -weapons.jsAdds some extra weaponsJayd +weapons.jsAdds varieties of different weapons Jayd Food & Cooking aChefsDream.jsAdds more foods, animals, tools and many other cooking related items. Updates can be found in this YouTube PlaylistSquareScreamYT aChefsDream_beta.jsBeta testing for aChefsDream. The code can be found on GitHubSquareScreamYT bananas.jsAdds bananas and banana plantsAlice +CherrySoda.jsAdds materials to make Cherry soda. Benzaldehyde + seltzer = Cherrysoda.guzzo86 community_desserts.jsAdds various desserts from community suggestionsTisquares greenitemsandmore.jsAdds various green things, including apples and more foodzonneschijn7 ketchup_mod.jsAdds a bunch of ketchup related stuff, plus a few other condimentsNubo318 (main dev), Devi, Alice (contributors) lemonade.jsAdds lemons and lemonadepersonman / baconthemyth morefoodsmod.jsAdds more foodsClide4 pizzasstuff.jsNew animals, foods, and plants_ilikepizza_ +potato_chips.jsPotato chips.guzzo86 sbstuff.jsAdds many foodsstefanblox soups.jsAdds seasoning and souppixelegend4 weAllScreamFor.jsAdds ice cream toppingsrottenEgghead -CherrySoda.jsAdds materials to make Cherry soda. Benzaldehyde + seltzer = Cherrysoda.guzzo86 -GrapeSoda.jsAdds materials to make Grape soda. Methylanthranilate + seltzer = Grapesoda.guzzo86 Life & Nature advanced_colonies.jsAdds davlers, creatures with complex coloniesDaviStudios 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",