diff --git a/mod-list.html b/mod-list.html
index f07335c9..52bd7060 100644
--- a/mod-list.html
+++ b/mod-list.html
@@ -310,6 +310,7 @@
| Compilations |
| a_mod_by_alice.js | A mod combining most of Alice’s mods, and some other things | Alice |
+| food_mods.js | A mod combining most food mods | stefanblox, moss, Tisquares, SquareScreamYT, Adora, pixelegend4, Alice, Nubo318, Clide4, rottenEgghead |
| Technical Libraries & Tests |
| a_bundle_of_tests.js | Several test functions | Alice |
diff --git a/mods/aChefsDream.js b/mods/aChefsDream.js
index 02fe97cd..205c30d7 100644
--- a/mods/aChefsDream.js
+++ b/mods/aChefsDream.js
@@ -1,482 +1,10 @@
-/*
-Created by SquareScreamYT/sqec <@918475812884344852>
-Thanks to RealerRaddler <@914371295561535508>, Alice <@697799964985786450>, nousernamefound <@316383921346707468>, Adora the Transfem <@778753696804765696>, ryan(R74n) <@101070932608561152> and Fioushemastor <@738828785482203189> for helping :)
-Compatibility with plants.js coming soon
-Works well with community_desserts.js
-Beta testing at aChefsDream_beta.js or SquareScreamYT/aChefsDream.js on github
+// created by SquareScreamYT
+// https://github.com/SquareScreamYT/aChefsDream.js
-v1.13.7
-
-you can support me at my youtube: https://youtube.com/@sqec
-
-Upcoming Features:
-- pudding/cream
-- extract tool
-- cinnamon
-- spring onions
-- white rice noodles
-- matcha leaves, powder, tea
-- cacao pods
-- more chocolate, cocoa powder, white chocolate, cocoa butter
-- pigs, ham and bacon
-- garlic
-- stainless steel
-- pepper plants
-- hot chocolate
-- celery
-- kiwis
-- guavas
-- lychees
-- cherries (and the plasticky maraschino cherries 🤮🤮🤮)
-- dragonfuits
-- dates
-- figs
-- avocados
-- apricots and almonds (roasted)
-- hazelnuts
-- plums
-- curry/chicken tikka masala
-- raisins
-- peaches
-- cucumbers
-- eggplants
-- crabs (they eat coconuts)
-- squids
-- tofu
-- miso
-- juice reaction with other juices
-- jackfruit
-- fruit soda (any juice + co2 or seltzer)
-- rambutan
-- shrimp/prawn meat
-- sheep, goats, mutton, wool/fabric, filter
-- filter (like in nousersthing.js)
-
-Changelog (v1.0)
- - added chickens
- - lays chicken eggs
- - added chicks
- - hatches from chicken eggs
- - grows into chickens
- - added chicken eggs
- - added frozen chicken eggs
- - added hard boiled eggs
- - made by putting chicken eggs in hot water
- - added soup
- - made from broth and water
- - added noodles
- - made by putting batter in hot water
- - added chicken meat
- - raw chicken meat
- - cooked chicken meat
- - battered raw chicken
- - made by mixing raw chicken and batter
- - raw chicken nuggets
- - made by mixing battered raw chicken with crumbs
- - (cooked) chicken nuggets
- - added crushed worm
- - chicken food
- - made by smashing worms or mixing worms with rocks
- - added frozen crushed worms
- - added fried potato
- - made by putting potatoes in hot cooking oil
- - added smoked chicken
- - made by putting raw chicken with smoke
- - added boiled chicken
- - made by putting raw chicken in hot water
- - added fried chicken
- - made by putting raw chicken in hot cooking oil
- - added steamed chicken
- - made by putting raw chicken with steam
- - added olives
- - added olives
- - olives can be smashed into cooking oil
- - added olive wood
- - added olive branches
- - added olive leaves
- - added cooking oil
-
-
-
-
-Changelog (v1.1)
- - added apples and related stuff
- - apples
- - applewood
- - apple branches
- - apple leaves
- - apple juice
- - made by smashing apples
- - apple seeds
- - apple slices
- - made by cutting apples
- - apple jam
- - made by putting sugar in apple juice
- - added knife tool
- - cuts, peels, etc. pixels
- - readded potato skin and peeled potato
- - changed fried potato recipe from potato to skinned potato
- - added pepper
- - added cake
- - made by mixing baked batter and cream
- - added icing sugar
- - made by smashing sugar
- - added icing
- - made by shift-mixing icing sugar
- - noodles description
- - bug fix (freezing crushed worms makes them alive)
-
-
-
-
-Changelog (v1.2)
- - added boilers
- - added steamers
- - added smokers
- - added oranges and related stuff
- - oranges
- - orange wood
- - orange branches
- - orange leaves
- - orange juice
- - made by smashing orange
- - orange seeds
- - orange slices
- - made by cutting oranges
- - orange peels
- - byproduct of cutting oranges into orange slices
- - marmalade
- - made by putting sugar in orange peels and orange slices
- - apple and orange juice now turn into juice ice under 0 degrees
- - apple juice now boils into sugar and steam
- - apple juice now boils at 100 instead of 400
- - added coral and coral stems
- - added tuna
- - added cooked and raw tuna
- - added smoked tuna
- - made by putting raw tuna with smoke
- - added boiled tuna
- - made by putting raw tuna in hot water
- - added fried tuna
- - made by putting raw tuna in hot cooking oil
- - added steamed tuna
- - made by putting raw tuna with steam
- - added salmon
- - added cooked and raw salmon
- - added smoked salmon
- - made by putting raw salmon with smoke
- - added boiled salmon
- - made by putting raw salmon in hot water
- - added fried salmon
- - made by putting raw salmon in hot cooking oil
- - added steamed salmon
- - made by putting raw salmon with steam
- - added grape juice
- - added cream of tartar
- - added wine
- - added corn syrup
-
-
-
-Changelog (v1.3)
- - added shrimp
- - added coconuts
- - added coconut stems
- - added coconut leaves
- - added coconut tree tops
- - added coconut milk and coconut juice
- - added cut coconuts
- - salmon and tuna meats no longer melt
- - added knife description
- - added lemons and related stuff
- - lemons
- - lemon wood
- - lemon branches
- - lemon leaves
- - lemon juice
- - made by smashing lemons
- - lemon seeds
- - lemon slices
- - made by cutting lemons
- - lemon zest
- - byproduct of cutting lemons
- - lemon marmalade can now be made by mixing lemon slices or lemon zest with sugar
- - added carrots
- - added carrot seeds and leaves
- - added carrot juice
- - added dry icing
-
-
-
-Changelog (v1.3.1)
- - added lemonade
-
-
-
-Changelog (v1.3.2)
- - added apple cider vinegar
- - added turnips
- - added turnip seeds and leaves
- - added turnip juice
-
-
-
-Changelog (v1.4)
- - added baking powder
- - added corn starch
- - added maple syrup
- - added pancakes
- - added pancake mix
- - added pancake batter
- - added normal pancakes
- - added crispy pancakes
- - added burnt pancakes
- - added strawberries
- - added strawberries
- - added strawberry seeds, stem, and leaves
- - added strawberry juice
- - added whipped cream
- - chicken eggs no longer hatch under 20 degrees
- - added ginger
- - added ginger juice
- - added ginger rhizomes, pseudostems and leaves
-
-
-
-Changelog (v1.5)
- - added blueberries
- - added blueberries
- - added blueberry seeds, stem, and leaves
- - added blueberry juice
- - added strawberry and blueberry jam
- - added cut blueberries
- - added advanced dough
- - added carbonic acid
- - added cookies and cookie dough
- - replaced cooking oil with nut oil
- - added boba and boba dough
-
-
-
-Changelog (v1.6)
- - added freeze and warm tool
- - added olive seeds
- - juice mixing functionality
- - wine can now be made by mixing grape juice and alcohol
- - added bananas and related stuff
- - bananas
- - hanging banana peduncle and banana peduncle
- - banana stem and banana stem top
- - banana leaves
- - cut banana
- - banana juice
- - banana bread
-
-
-
-Changelog (v1.7)
- - added chocolate chips
- - added sprinkles
- - added banana milk (yellow fruit milk)
- - added passion fruits
- - added passion fruit vines and seeds (new climbing vines feature!)
- - added mangoes
- - added mango juice
- - added mango wood, branch, leaves and seeds
- - added pineapples
- - added pineapple leaves, seed and juice
-
-
-
-Changelog (v1.8)
- - added lime and lime juice
- - added lime zest and slices
- - added escargot
- - added broccoli
- - added broccoli stem, cut broccoli and broccoli seed
- - added freeze drying and freeze dried fruits
- - added soapy water
-
-
-
-
-Changelog (v1.9)
- - added onion
- - added cut onion
- - added fried onion
- - added rice
- - added porridge
- - added cooked and burnt rice
- - added rice plants and rice panicles
- - added rice seeds
- - added msg
- - added seaweed
- - added dried seaweed
- - added seaweed stem and seeds
- - fix egg and noodle bug
-
-
-
-
-Changelog (v1.10)
- - tweaked seaweed behavior
- - tweaked tomato and grape vines
- - added peppermint
- - added peppermint leaves and stems
- - added peppermint seeds
- - added vanilla
- - added vanilla seeds, stem, leaves
- - added vanilla flower
- - added vanilla pod
- - added vanilla essence
-
-
-
-
-Changelog (v1.10.1)
- - unhid vanilla essence
- - added peppermint candy
- - vanilla essence can now turn ice cream light yellow
- - added peppermint candy
- - added tapioca
- - added tapioca stems, leaves, and seed
-
-
-
-
-Changelog (v1.10.2)
- - added sprinkle explosions
-
-
-
-
-Changelog (v1.10.5)
- - added chilli
- - added chilli seed, stem and leaves
- - added chilli powder
- - added hot sauce
-
-
-
-
-Changelog (v1.10.7)
- - added mango milk
-
-
-
-
-Changelog (v1.10.8)
- - added onion powder
- - fix carrot plant bug
- - added fried rice
- - added durians
- - added cut durians
- - added durian seed, wood, leaves and branches
-
-
-
-
-Changelog (v1.11)
- - unhid carrot
- - unhid turnip
-
-
-
-
-Changelog (v1.12)
- - added whisk
- - added egg white
- - added hard egg white
- - added whisked egg white
- - added marshmallows
- - added cooked marshmallows
- - added burnt marshmallows
- - improved soup (from nousersthings.js)
- - added food coloring (color may fade)
- - added eat tool
- - added drink tool
-
-
-
-
-Changelog (v1.12.1)
- - removed coral, can still be found in ocean.js
- - updated food coloring
-
-
-
-
-Changelog (v1.12.2)
- - updated cooked meat behavior
-
-
-
-
-Changelog (v1.12.4)
- - added cake batter
- - added condensed milk
- - added wasabi
- - added beans
- - added baked beans
- - added fermented beans/natto
- - added soy sauce
-
-
-
-
-Changelog (v1.13)
- - added cracker and cracker dough
- - added barbecue sauce
- - added mustard
- - added agar
- - added barbecued chicken
- - tweaked grape juice color
- - added duck
- - added duckling
- - added duck eggs and frozen duck eggs
- - added raw duck and cooked duck
- - added fried duck
- - added boiled duck
- - added barbecued duck
- - added smoked duck
- - added steamed duck
- - added cows
- - added calves
- - added steak and beef
- - added smoked steak and barbecued steak
-
-
-
-
-Changelog (v1.13.5)
- - added hard jelly
- - soda can mix colors
- - added soda jelly
- - added fanta (orange juice + carbon dioxide)
-
-
-
-
-Changelog (v1.13.7)
- - rename nut to peanut
-
-
-
-
-
-
-
-
-*/
-
-/*
-elements.test = {
- //other needed properties
- cutInto: "elem"
-}
-*/
-
-console.log("Thanks for using aChefsDream.js! -sqec")
+runAfterLoad(function() {
+ console.log("Thanks for using aChefsDream.js! -sqec")
+ console.log("aChefsDream is hosted at https://github.com/SquareScreamYT/aChefsDream.js")
+})
function interpolateRgb(rgb1, rgb2, ratio) {
const interpolatedRgb = {
@@ -592,6 +120,29 @@ elements.freeze_dry = {
desc: "Use on pixels to freeze dry them, if possible."
}
+elements.food_paint = {
+ color: ["#c27070","#c29c70","#c2c270","#70c270","#70c2c2","#7070c2","#c270c2"],
+ tool: function(pixel) {
+ if (elements[pixel.element].isFood == true) {
+ if (!shiftDown) {
+ pixel.color = pixelColorPick(pixel,currentColor)
+ }
+ else {
+ var rgb = currentColor.replace("#","").match(/.{1,2}/g);
+ for (var i = 0; i < rgb.length; i++) {
+ rgb[i] = parseInt(rgb[i],16);
+ }
+ pixel.color = "rgb(" + rgb.join(",") + ")"
+ }
+ delete pixel.origColor;
+ }
+ },
+ customColor: true,
+ category: "tools",
+ canPlace: false,
+ desc: "Use on edible pixels to change color."
+}
+
elements.eat = {
color: ["#ffba79","#efff79"],
tool: function(pixel) {
@@ -849,7 +400,7 @@ elements.soup = {
isFood: true,
//thanks to nouser
onMix: function(soup,ingredient) {
- if (elements[ingredient.element].id !== elements.soup.id && elements[ingredient.element].id !== elements.broth.id) {
+ if (elements[ingredient.element].id !== elements.soup.id && elements[ingredient.element].id !== elements.broth.id && ingredient.temp > 40) {
if (elements[ingredient.element].isFood || elements[ingredient.element].category === "food" || elements[ingredient.element].category === "liquids") {
var rgb1 = soup.color.match(/\d+/g);
var rgb2 = ingredient.color.match(/\d+/g);
@@ -891,7 +442,7 @@ elements.soup = {
}
if (!elements.broth.reactions) elements.broth.reactions = {};
-elements.broth.reactions.water = { elem1: "soup", elem2: "soup" }
+elements.broth.reactions.water = { elem1: "soup", elem2: "soup", tempMin: 70 }
elements.noodles = {
desc: "whatever noodles",
@@ -1824,6 +1375,16 @@ elements.tuna = {
category: "life",
state: "solid",
cutInto: "raw_tuna",
+ conduct: 0.2,
+ eggColor: ["#211316","#2C1A1D","#503734"],
+ breakInto: "blood",
+ burn:20,
+ burnTime:200,
+ temp: 20,
+ tempHigh: 120,
+ stateHigh: "cooked_tuna",
+ tempLow: -20,
+ stateLow: "frozen_fish",
reactions: {
"algae": { elem2:null, chance:0.25, func:behaviors.FEEDPIXEL },
"plant": { elem2:null, chance:0.125, func:behaviors.FEEDPIXEL },
@@ -1860,6 +1421,16 @@ elements.salmon = {
],
category: "life",
state: "solid",
+ conduct: 0.2,
+ eggColor: ["#e8961c","#faa82d"],
+ breakInto: "blood",
+ burn:20,
+ burnTime:200,
+ temp: 20,
+ tempHigh: 120,
+ stateHigh: "cooked_salmon",
+ tempLow: -20,
+ stateLow: "frozen_fish",
reactions: {
"algae": { elem2:null, chance:0.25, func:behaviors.FEEDPIXEL },
"plant": { elem2:null, chance:0.125, func:behaviors.FEEDPIXEL },
@@ -2286,12 +1857,22 @@ elements.wine = {
elements.shrimp = {
color: ["#EE5422", "#E9683C", "#F3583F", "#EDA270"],
behavior: [
- "SW:water,salt_water,sugar_water,dirty_water,seltzer,pool_water,primordial_soup%14|M2%7.5 AND SW:water,salt_water,sugar_water,dirty_water,seltzer,pool_water,primordial_soup%5|SW:water,salt_water,sugar_water,dirty_water,seltzer,pool_water,primordial_soup%14",
+ "SW:water,salt_water,sugar_water,dirty_water,seltzer,pool_water,primordial_soup%14|M2%7.5|SW:water,salt_water,sugar_water,dirty_water,seltzer,pool_water,primordial_soup%14",
"SW:water,salt_water,sugar_water,dirty_water,seltzer,pool_water,primordial_soup%14|FX%20|SW:water,salt_water,sugar_water,dirty_water,seltzer,pool_water,primordial_soup%14",
- "M2 AND SW:water,salt_water,sugar_water,dirty_water,seltzer,pool_water,primordial_soup%15|M1|M2 AND SW:water,salt_water,sugar_water,dirty_water,seltzer,pool_water,primordial_soup%15",
+ "M2 AND SW:water,salt_water,sugar_water,dirty_water,seltzer,pool_water,primordial_soup%14|M1|M2 AND SW:water,salt_water,sugar_water,dirty_water,seltzer,pool_water,primordial_soup%14",
],
category: "life",
state: "solid",
+ cutInto: "raw_shrimp",
+ conduct: 0.2,
+ breakInto: "raw_shrimp",
+ burn:20,
+ burnTime:200,
+ temp: 20,
+ tempHigh: 120,
+ stateHigh: "cooked_shrimp",
+ tempLow: -20,
+ stateLow: "frozen_meat",
reactions: {
"algae": { elem2:null, chance:0.25, func:behaviors.FEEDPIXEL },
"plant": { elem2:null, chance:0.125, func:behaviors.FEEDPIXEL },
@@ -3227,7 +2808,7 @@ elements.maple_syrup = {
behavior: behaviors.LIQUID,
tempHigh: 170,
stateHigh: ["sugar","smoke","smoke"],
- tempLow: 0,
+ tempLow: -15,
category:"liquids",
state: "liquid",
viscosity: 15,
@@ -5350,8 +4931,8 @@ elements.onion_seed = {
createPixel("onion",pixel.x+1,pixel.y);
createPixel("onion",pixel.x-1,pixel.y);
if (isEmpty(pixel.x+1,pixel.y-3) && isEmpty(pixel.x-1,pixel.y-3)) {
- createPixel("plant",pixel.x-1,pixel.y-3);
- createPixel("plant",pixel.x+1,pixel.y-3);
+ createPixel("spring_onion_leaves",pixel.x+1,pixel.y-3);
+ createPixel("spring_onion_leaves",pixel.x-1,pixel.y-3);
changePixel(pixel,"onion");
}
}
@@ -7777,8 +7358,8 @@ elements.raw_beef = {
state: "solid",
burnInto: "steak",
temp:25,
- tempHigh: 600,
- stateHigh: ["steak"],
+ tempHigh: 200,
+ stateHigh: "steak",
reactions: {
"smoke": {elem1: "smoked_beef"},
"charcoal": {elem1: "barbecued_beef", tempMin: 70},
@@ -7844,3 +7425,560 @@ elements.jelly.temp = 0
elements.nut.name = "peanut";
elements.nut_meat.name = "peanut_meat";
elements.nut_butter.name = "peanut_butter";
+
+elements.spring_onion_leaves = {
+ color: "#519c2f",
+ behavior: [
+ "XX|XX|XX",
+ "XX|XX|XX",
+ "ST:onion|M1|ST:onion",
+ ],
+ 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:"food",
+ tempHigh: 100,
+ stateHigh: "dead_plant",
+ burn:65,
+ burnTime:60,
+ burnInto: "dead_plant",
+ breakInto: "herb",
+ state: "solid",
+ density: 1050,
+ cutInto: "chopped_spring_onion",
+}
+elements.chopped_spring_onion = {
+ color: ["#0f9912","#227d23"],
+ behavior: behaviors.POWDER,
+ category:"food",
+ tempHigh: 100,
+ stateHigh: "dead_plant",
+ burn:65,
+ burnTime:60,
+ burnInto: "dead_plant",
+ state: "solid",
+ density: 1050,
+ breakInto:"herb",
+}
+
+
+elements.spring_onion_seed = {
+ color: "#1a0e02",
+ tick: function(pixel) {
+ if (isEmpty(pixel.x,pixel.y+1)) {
+ movePixel(pixel,pixel.x,pixel.y+1);
+ }
+ else {
+ if (Math.random() < 0.2 && pixel.age > 50 && pixel.temp < 100) {
+ if (!outOfBounds(pixel.x,pixel.y+1)) {
+ var dirtPixel = pixelMap[pixel.x][pixel.y+1];
+ if (dirtPixel.element === "dirt" || dirtPixel.element === "mud" || dirtPixel.element === "sand" || dirtPixel.element === "wet_sand" || dirtPixel.element === "clay_soil" || dirtPixel.element === "mycelium") {
+ changePixel(dirtPixel,"root");
+ }
+ }
+ if (isEmpty(pixel.x,pixel.y-2) && isEmpty(pixel.x,pixel.y-1) && isEmpty(pixel.x+1,pixel.y-1) && isEmpty(pixel.x-1,pixel.y-1) && isEmpty(pixel.x+1,pixel.y) && isEmpty(pixel.x-1,pixel.y)) {
+ createPixel("onion",pixel.x,pixel.y-1);
+ createPixel("onion",pixel.x+1,pixel.y-1);
+ createPixel("onion",pixel.x-1,pixel.y-1);
+ createPixel("onion",pixel.x,pixel.y-2);
+ createPixel("onion",pixel.x+1,pixel.y);
+ createPixel("onion",pixel.x-1,pixel.y);
+ if (isEmpty(pixel.x+1,pixel.y-3) && isEmpty(pixel.x-1,pixel.y-3)) {
+ createPixel("spring_onion_leaves",pixel.x+1,pixel.y-3);
+ createPixel("spring_onion_leaves",pixel.x-1,pixel.y-3);
+ if (isEmpty(pixel.x+1,pixel.y-4) && isEmpty(pixel.x-1,pixel.y-4)) {
+ createPixel("spring_onion_leaves",pixel.x+1,pixel.y-4);
+ createPixel("spring_onion_leaves",pixel.x-1,pixel.y-4);
+ if (isEmpty(pixel.x+1,pixel.y-5) && isEmpty(pixel.x-1,pixel.y-5)) {
+ createPixel("spring_onion_leaves",pixel.x+1,pixel.y-5);
+ createPixel("spring_onion_leaves",pixel.x-1,pixel.y-5);
+ }
+ }
+ changePixel(pixel,"onion");
+ }
+ }
+ }
+ pixel.age++;
+ }
+ doDefaults(pixel);
+ },
+ properties: {
+ "age":0
+ },
+ tempHigh: 100,
+ stateHigh: "dead_plant",
+ tempLow: -2,
+ stateLow: "frozen_plant",
+ burn: 65,
+ burnTime: 15,
+ category: "life",
+ state: "solid",
+ density: 1500,
+ cooldown: defaultCooldown,
+ seed: true,
+ behavior: [
+ "XX|XX|XX",
+ "XX|XX|XX",
+ "XX|M1|XX",
+ ],
+}
+
+elements.stainless_steel ={
+ color: "#91999e",
+ behavior: behaviors.WALL,
+ tempHigh: 1455.5,
+ category: "solids",
+ density: 7850,
+ conduct: 0.42,
+ hardness: 0.8
+}
+
+elements.rambutan_wood = {
+ color: "#635418",
+ behavior: behaviors.WALL,
+ tempHigh: 400,
+ stateHigh: ["ember","charcoal","fire","fire","fire"],
+ category: "solids",
+ burn: 5,
+ burnTime: 300,
+ burnInto: ["ember","charcoal","fire"],
+ state: "solid",
+ hardness: 0.15,
+ breakInto: "sawdust",
+ breakIntoColor: ["#dba66e","#cc8a64"],
+ hidden: true
+}
+elements.rambutan_branch = {
+ color: "#635418",
+ behavior: [
+ "CR:rambutan_leaves,rambutan_branch%2|CR:rambutan_leaves,rambutan_branch%2|CR:rambutan_leaves,rambutan_branch%2",
+ "XX|XX|XX",
+ "XX|XX|XX",
+ ],
+ tempHigh: 100,
+ stateHigh: "rambutan_wood",
+ tempLow: -30,
+ stateLow: "rambutan_wood",
+ category: "life",
+ burn: 40,
+ burnTime: 50,
+ burnInto: ["sap","ember","charcoal"],
+ hidden: true,
+ state: "solid",
+ density: 1500,
+ hardness: 0.15,
+ breakInto: ["sap","sawdust"],
+}
+elements.rambutan_leaves = {
+ color: "#6fa611",
+ behavior: [
+ "XX|XX|XX",
+ "XX|XX|XX",
+ "XX|CR:unripe_rambutan%0.1|XX",
+ ],
+ 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:"life",
+ tempHigh: 100,
+ stateHigh: "dead_plant",
+ tempLow: -1.66,
+ stateLow: "frozen_plant",
+ burn:65,
+ burnTime:60,
+ burnInto: "dead_plant",
+ breakInto: "dead_plant",
+ state: "solid",
+ density: 1050,
+ hidden: true
+}
+elements.unripe_rambutan = {
+ color: ["#87c718","#8ac91c","#94de1d"],
+ behavior: [
+ "XX|ST:rambutan_leaves|XX",
+ "XX|CH:rambutan%1|XX",
+ "M2|M1|M2",
+ ],
+ category:"food",
+ tempHigh: 100,
+ stateHigh: ["dead_plant","steam"],
+ burn:65,
+ burnTime:60,
+ cutInto: "cut_rambutan",
+ state: "solid",
+ density: 1050,
+}
+
+elements.rambutan = {
+ color: ["#d64242","#f23333","#cc3737","#b1db69"],
+ behavior: behaviors.POWDER,
+ category:"food",
+ tempHigh: 100,
+ stateHigh: ["sugar","steam"],
+ burn:65,
+ burnTime:60,
+ state: "solid",
+ density: 1050,
+ cutInto: "cut_rambutan",
+ hidden: true,
+}
+
+elements.cut_rambutan = {
+ color: "#f5f1bf",
+ behavior: behaviors.STURDYPOWDER,
+ category:"food",
+ tempHigh: 100,
+ stateHigh: ["sugar","steam"],
+ burn:65,
+ burnTime:60,
+ state: "solid",
+ density: 1050,
+ hidden: true,
+ freezeDryInto: "freeze_dried_fruits",
+ freezeDryIntoColor: "#a19f3b",
+}
+
+elements.rambutan_seed = {
+ color: "#2b1807",
+ tick: function(pixel) {
+ if (isEmpty(pixel.x,pixel.y+1)) {
+ movePixel(pixel,pixel.x,pixel.y+1);
+ }
+ else {
+ if (Math.random() < 0.02 && pixel.age > 50 && pixel.temp < 100) {
+ if (!outOfBounds(pixel.x,pixel.y+1)) {
+ var dirtPixel = pixelMap[pixel.x][pixel.y+1];
+ if (dirtPixel.element === "dirt" || dirtPixel.element === "mud" || dirtPixel.element === "sand" || dirtPixel.element === "wet_sand" || dirtPixel.element === "clay_soil" || dirtPixel.element === "mycelium") {
+ changePixel(dirtPixel,"root");
+ }
+ }
+ if (isEmpty(pixel.x,pixel.y-1)) {
+ movePixel(pixel,pixel.x,pixel.y-1);
+ createPixel(Math.random() > 0.5 ? "rambutan_wood" : "rambutan_branch",pixel.x,pixel.y+1);
+ }
+ }
+ else if (pixel.age > 1000) {
+ changePixel(pixel,"rambutan_wood");
+ }
+ pixel.age++;
+ }
+ doDefaults(pixel);
+ },
+ properties: {
+ "age":0
+ },
+ tempHigh: 100,
+ stateHigh: "dead_plant",
+ tempLow: -2,
+ stateLow: "frozen_plant",
+ burn: 65,
+ burnTime: 15,
+ category: "life",
+ state: "solid",
+ density: 1500,
+ cooldown: defaultCooldown,
+ seed: true,
+ behavior: [
+ "XX|XX|XX",
+ "XX|FX%10|XX",
+ "XX|M1|XX",
+ ],
+};
+
+elements.barbecued_shrimp = {
+ color:["#bf743b", "#b57026","#8f5e29","#a87b11"],
+ behavior: behaviors.STURDYPOWDER,
+ category: "food",
+ state: "solid",
+ temp:55,
+ tempHigh: 600,
+ stateHigh: ["ash","smoke"],
+ isFood: true,
+ hidden: true,
+}
+elements.steamed_shrimp = {
+ color:["#e8dab2", "#e2cea6"],
+ behavior: behaviors.STURDYPOWDER,
+ category: "food",
+ state: "solid",
+ temp:50,
+ tempHigh: 600,
+ stateHigh: ["ash","smoke"],
+ isFood: true,
+ hidden: true,
+}
+elements.smoked_shrimp = {
+ color:["#78542e", "#6b4b26"],
+ behavior: behaviors.STURDYPOWDER,
+ category: "food",
+ state: "solid",
+ temp:55,
+ tempHigh: 600,
+ stateHigh: ["ash","smoke"],
+ isFood: true,
+ hidden: true,
+}
+elements.cooked_shrimp = {
+ color:["#ff7f50", "#ffa07a", "#ffb3a7"],
+ behavior: behaviors.STURDYPOWDER,
+ category: "food",
+ state: "solid",
+ temp: 40,
+ tempHigh: 600,
+ stateHigh: ["ash", "smoke"],
+ hidden: true,
+};
+
+elements.raw_shrimp = {
+ color: ["#f0e0d6", "#e8d9ce", "#cdb7b5"],
+ behavior: behaviors.STURDYPOWDER,
+ category: "food",
+ state: "solid",
+ burnInto: "cooked_shrimp",
+ temp:25,
+ tempHigh: 600,
+ stateHigh: "cooked_shrimp",
+ reactions: {
+ "batter": { elem1: "battered_shrimp", elem2: null },
+ "smoke": {elem1: "smoked_shrimp"},
+ "steam": {elem1: "steamed_shrimp"},
+ "water": {elem1: "boiled_shrimp", tempMin: 70},
+ "nut_oil": {elem1: "fried_shrimp", tempMin: 70},
+ "charcoal": {elem1: "barbecued_shrimp", tempMin: 70},
+ "fire": {elem1: "barbecued_shrimp"}
+ }
+};
+
+elements.boiled_shrimp = {
+ color: ["#ffd180", "#ffc978", "#ffbe70"],
+ behavior: behaviors.STURDYPOWDER,
+ category: "food",
+ state: "solid",
+ isFood: true,
+ temp: 65,
+ tempHigh: 600,
+ stateHigh: ["ash", "smoke"],
+ hidden: true,
+}
+elements.battered_shrimp = {
+ color: ["#f2e7d5", "#eae0cd"],
+ behavior: behaviors.STURDYPOWDER,
+ category: "food",
+ state: "solid",
+ temp:25,
+ tempHigh: 125,
+ stateHigh: "cooked_shrimp",
+ reactions: {
+ "crumb": { color1: "#123456", elem2: null },
+ "nut_oil": {elem1: "tempura", tempMin: 60}
+ },
+ hidden: true,
+};
+elements.tempura = {
+ color: ["#ff8c00", "#ff8c00", "#ffab00", "#ffab00"],
+ behavior: behaviors.STURDYPOWDER,
+ category: "food",
+ state: "solid",
+ temp: 40,
+ tempHigh: 600,
+ stateHigh: ["ash", "smoke"],
+ tempLow: -20,
+ breakInto: "crumb",
+ isFood: true,
+ density: 100,
+ hidden: true,
+};
+
+elements.grape.stateHigh = "raisin"
+elements.grape.tempHigh = 65
+
+elements.raisin = {
+ color: ["#522D68","#3B194D","#381845","2B194D"],
+ behavior: [
+ "XX|ST:vine|XX",
+ "ST:vine|XX|ST:vine",
+ "M2|M1|M2",
+ ],
+ reactions: {
+ "radiation": { elem1:"explosion", chance:0.1, color1:"#291824" },
+ "rock": { elem1:"juice", chance:0.1, color1:"#291824" },
+ "concrete": { elem1:"juice", chance:0.1, color1:"#291824" },
+ "basalt": { elem1:"juice", chance:0.1, color1:"#291824" },
+ "limestone": { elem1:"juice", chance:0.1, color1:"#291824" },
+ "tuff": { elem1:"juice", chance:0.1, color1:"#291824" },
+ "water": { elem2:"juice", chance:0.005, color2:"#291824" },
+ "sugar_water": { elem2:"juice", chance:0.025, color2:"#291824" },
+ "acid": { elem1:"juice", color1:"#291824" },
+ "acid_gas": { elem1:"juice", color1:"#291824" },
+ },
+ innerColor: "#cc7492",
+ tempHigh: 256,
+ stateHigh: ["steam","sugar"],
+ category: "food",
+ state: "solid",
+ density: 1154,
+ breakInto: "juice",
+ breakIntoColor: "#291824",
+ ignoreAir: true,
+ isFood: 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,
+// whipped cream, chocolate, jam
+
+// juice mixing
+for (let juicei = 0; juicei < eLists.JUICEMIXABLE.length; 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 = {} }
+ elements[elem].reactions[elem2] = { func: function(pixel1, pixel2){
+ let newrgb = interpolateRgb(getRGB(pixel1.color), getRGB(pixel2.color), 0.5);
+ changePixel(pixel1,"juice")
+ pixel1.color = `rgb(${parseInt(newrgb.r)},${parseInt(newrgb.g)},${parseInt(newrgb.b)})`;
+ pixel2.color = `rgb(${parseInt(newrgb.r)},${parseInt(newrgb.g)},${parseInt(newrgb.b)})`;
+ // console.log("juice mixed")
+ }}
+ }
+ }
+ // juice with water
+ if (!elements[elem].reactions) { elements[elem].reactions = {} }
+ elements[elem].reactions.water = { chance:1, func: function(pixel1, pixel2){
+ let newrgb = interpolateRgb(getRGB(pixel1.color), getRGB("rgb(255,255,255)"), 0.2);
+ if (((newrgb.r + newrgb.g + newrgb.b) / 3) > 215) {
+ newrgb = getRGB(pixel1.color);
+ }
+ changePixel(pixel1,"juice")
+ changePixel(pixel2,"juice")
+ pixel1.color = `rgb(${parseInt(newrgb.r)},${parseInt(newrgb.g)},${parseInt(newrgb.b)})`;
+ pixel2.color = `rgb(${parseInt(newrgb.r)},${parseInt(newrgb.g)},${parseInt(newrgb.b)})`;
+ }}
+ // juice with milk
+ if (!elements[elem].reactions) { elements[elem].reactions = {} }
+ elements[elem].reactions.milk = { chance:1, func: function(pixel1, pixel2){
+ let newrgb = interpolateRgb(getRGB(pixel1.color), getRGB(pixel2.color), 0.2);
+ changePixel(pixel1,"fruit_milk")
+ changePixel(pixel2,"fruit_milk")
+ pixel1.color = `rgb(${parseInt(newrgb.r)},${parseInt(newrgb.g)},${parseInt(newrgb.b)})`;
+ pixel2.color = `rgb(${parseInt(newrgb.r)},${parseInt(newrgb.g)},${parseInt(newrgb.b)})`;
+ }}
+ // juice with coconut milk
+ if (!elements[elem].reactions) { elements[elem].reactions = {} }
+ elements[elem].reactions.coconut_milk = { chance:1, func: function(pixel1, pixel2){
+ let newrgb = interpolateRgb(getRGB(pixel1.color), getRGB(pixel2.color), 0.2);
+ changePixel(pixel1,"fruit_milk")
+ changePixel(pixel2,"fruit_milk")
+ pixel1.color = `rgb(${parseInt(newrgb.r)},${parseInt(newrgb.g)},${parseInt(newrgb.b)})`;
+ pixel2.color = `rgb(${parseInt(newrgb.r)},${parseInt(newrgb.g)},${parseInt(newrgb.b)})`;
+ }}
+ // juice with nut milk
+ if (!elements[elem].reactions) { elements[elem].reactions = {} }
+ elements[elem].reactions.nut_milk = { chance:1, func: function(pixel1, pixel2){
+ let newrgb = interpolateRgb(getRGB(pixel1.color), getRGB(pixel2.color), 0.2);
+ changePixel(pixel1,"fruit_milk")
+ changePixel(pixel2,"fruit_milk")
+ pixel1.color = `rgb(${parseInt(newrgb.r)},${parseInt(newrgb.g)},${parseInt(newrgb.b)})`;
+ pixel2.color = `rgb(${parseInt(newrgb.r)},${parseInt(newrgb.g)},${parseInt(newrgb.b)})`;
+ }}
+ // juice with cream
+ if (!elements[elem].reactions) { elements[elem].reactions = {} }
+ elements[elem].reactions.cream = { chance:1, func: function(pixel1, pixel2){
+ let newrgb = interpolateRgb(getRGB(pixel1.color), getRGB(pixel2.color), 0.2);
+ changePixel(pixel1,"fruit_milk")
+ changePixel(pixel2,"fruit_milk")
+ pixel1.color = `rgb(${parseInt(newrgb.r)},${parseInt(newrgb.g)},${parseInt(newrgb.b)})`;
+ pixel2.color = `rgb(${parseInt(newrgb.r)},${parseInt(newrgb.g)},${parseInt(newrgb.b)})`;
+ }}
+ // juice with fruit milk
+ if (!elements[elem].reactions) { elements[elem].reactions = {} }
+ elements[elem].reactions.fruit_milk = { chance:1, func: function(pixel1, pixel2){
+ let newrgb = interpolateRgb(getRGB(pixel1.color), getRGB(pixel2.color), 0.2);
+ changePixel(pixel1,"fruit_milk")
+ changePixel(pixel2,"fruit_milk")
+ pixel1.color = `rgb(${parseInt(newrgb.r)},${parseInt(newrgb.g)},${parseInt(newrgb.b)})`;
+ pixel2.color = `rgb(${parseInt(newrgb.r)},${parseInt(newrgb.g)},${parseInt(newrgb.b)})`;
+ }}
+}
+// 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);
+ if (((newrgb.r + newrgb.g + newrgb.b) / 3) < 230) {
+ changePixel(pixel1,"fruit_milk")
+ changePixel(pixel2,"fruit_milk")
+ pixel1.color = `rgb(${parseInt(newrgb.r)},${parseInt(newrgb.g)},${parseInt(newrgb.b)})`;
+ pixel2.color = `rgb(${parseInt(newrgb.r)},${parseInt(newrgb.g)},${parseInt(newrgb.b)})`;
+ } else if (Math.random() < 0.05) {
+ changePixel(pixel1,"fruit_milk")
+ changePixel(pixel2,"fruit_milk")
+ pixel1.color = `rgb(${parseInt(newrgb.r)},${parseInt(newrgb.g)},${parseInt(newrgb.b)})`;
+ pixel2.color = `rgb(${parseInt(newrgb.r)},${parseInt(newrgb.g)},${parseInt(newrgb.b)})`;
+ }
+ }
+}
+// fruit milk with nut milk
+elements.fruit_milk.reactions.nut_milk = { chance:1, func: function(pixel1, pixel2){
+ let newrgb = interpolateRgb(getRGB(pixel1.color), getRGB(pixel2.color), 0.2);
+ if (((newrgb.r + newrgb.g + newrgb.b) / 3) < 230) {
+ changePixel(pixel1,"fruit_milk")
+ changePixel(pixel2,"fruit_milk")
+ pixel1.color = `rgb(${parseInt(newrgb.r)},${parseInt(newrgb.g)},${parseInt(newrgb.b)})`;
+ pixel2.color = `rgb(${parseInt(newrgb.r)},${parseInt(newrgb.g)},${parseInt(newrgb.b)})`;
+ } else if (Math.random() < 0.05) {
+ changePixel(pixel1,"fruit_milk")
+ changePixel(pixel2,"fruit_milk")
+ pixel1.color = `rgb(${parseInt(newrgb.r)},${parseInt(newrgb.g)},${parseInt(newrgb.b)})`;
+ pixel2.color = `rgb(${parseInt(newrgb.r)},${parseInt(newrgb.g)},${parseInt(newrgb.b)})`;
+ }
+ }
+}
+// fruit milk with coconut milk
+elements.fruit_milk.reactions.coconut_milk = { chance:1, func: function(pixel1, pixel2){
+ let newrgb = interpolateRgb(getRGB(pixel1.color), getRGB(pixel2.color), 0.2);
+ if (((newrgb.r + newrgb.g + newrgb.b) / 3) < 230) {
+ changePixel(pixel1,"fruit_milk")
+ changePixel(pixel2,"fruit_milk")
+ pixel1.color = `rgb(${parseInt(newrgb.r)},${parseInt(newrgb.g)},${parseInt(newrgb.b)})`;
+ pixel2.color = `rgb(${parseInt(newrgb.r)},${parseInt(newrgb.g)},${parseInt(newrgb.b)})`;
+ } else if (Math.random() < 0.05) {
+ changePixel(pixel1,"fruit_milk")
+ changePixel(pixel2,"fruit_milk")
+ pixel1.color = `rgb(${parseInt(newrgb.r)},${parseInt(newrgb.g)},${parseInt(newrgb.b)})`;
+ pixel2.color = `rgb(${parseInt(newrgb.r)},${parseInt(newrgb.g)},${parseInt(newrgb.b)})`;
+ }
+ }
+}
+// fruit milk with cream
+elements.fruit_milk.reactions.cream = { chance:1, func: function(pixel1, pixel2){
+ let newrgb = interpolateRgb(getRGB(pixel1.color), getRGB(pixel2.color), 0.2);
+ if (((newrgb.r + newrgb.g + newrgb.b) / 3) < 230) {
+ changePixel(pixel1,"fruit_milk")
+ changePixel(pixel2,"fruit_milk")
+ pixel1.color = `rgb(${parseInt(newrgb.r)},${parseInt(newrgb.g)},${parseInt(newrgb.b)})`;
+ pixel2.color = `rgb(${parseInt(newrgb.r)},${parseInt(newrgb.g)},${parseInt(newrgb.b)})`;
+ } else if (Math.random() < 0.05) {
+ changePixel(pixel1,"fruit_milk")
+ changePixel(pixel2,"fruit_milk")
+ pixel1.color = `rgb(${parseInt(newrgb.r)},${parseInt(newrgb.g)},${parseInt(newrgb.b)})`;
+ pixel2.color = `rgb(${parseInt(newrgb.r)},${parseInt(newrgb.g)},${parseInt(newrgb.b)})`;
+ }
+ }
+}
+// fruit milk with fruit milk
+elements.fruit_milk.reactions.fruit_milk = { chance:1, func: function(pixel1, pixel2){
+ let newrgb = interpolateRgb(getRGB(pixel1.color), getRGB(pixel2.color), 0.2);
+ changePixel(pixel1,"fruit_milk")
+ changePixel(pixel2,"fruit_milk")
+ pixel1.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/food_mods.js b/mods/food_mods.js
new file mode 100644
index 00000000..bb088d75
--- /dev/null
+++ b/mods/food_mods.js
@@ -0,0 +1,15 @@
+var mods_to_include = ["mods/sbstuff.js","mods/ketchup_mod.js","mods/morefoodsmod.js","mods/weAllScreamFor.js","mods/soups.js","mods/pizzasstuff.js","mods/community_desserts.js","mods/plants.js","mods/aChefsDream.js"]
+
+var mods_included = mods_to_include.map(mod => enabledMods.includes(mod));
+var all_mods_included = mods_included.reduce(function(a,b) { return a && b });
+
+if(!all_mods_included) {
+ var mods_needed = mods_to_include.filter(function(modPath) { return !(enabledMods.includes(modPath)) });
+
+ mods_needed.forEach(function(modPath) {
+ enabledMods.splice(enabledMods.indexOf("mods/food_mods"),0,modPath);
+ });
+ localStorage.setItem("enabledMods", JSON.stringify(enabledMods));
+ alert(`The following mods have been inserted: ${mods_needed.join(", ")}
+Reload the page for the mods to take effect. Happy cooking!`)
+}