diff --git a/code/modules/food_and_drinks/food/condiment.dm b/code/modules/food_and_drinks/food/condiment.dm
index e1c463becc..baa804a4de 100644
--- a/code/modules/food_and_drinks/food/condiment.dm
+++ b/code/modules/food_and_drinks/food/condiment.dm
@@ -23,7 +23,8 @@
"sodiumchloride" = list("saltshakersmall", "salt shaker", "Salt. From space oceans, presumably"),
"blackpepper" = list("peppermillsmall", "pepper mill", "Often used to flavor food or make people sneeze"),
"cornoil" = list("oliveoil", "corn oil bottle", "A delicious oil used in cooking. Made from corn"),
- "sugar" = list("emptycondiment", "sugar bottle", "Tasty spacey sugar!"))
+ "sugar" = list("emptycondiment", "sugar bottle", "Tasty spacey sugar!"),
+ "mayonnaise" = list("mayonnaise", "mayonnaise jar", "An oily condiment made from egg yolks."))
var/originalname = "condiment" //Can't use initial(name) for this. This stores the name set by condimasters.
/obj/item/weapon/reagent_containers/food/condiment/attack(mob/M, mob/user, def_zone)
@@ -207,6 +208,13 @@
list_reagents = list("soysauce" = 50)
possible_states = list()
+/obj/item/weapon/reagent_containers/food/condiment/mayonnaise
+ name = "mayonnaise"
+ desc = "An oily condiment made from egg yolks."
+ icon_state = "mayonnaise"
+ list_reagents = list("mayonnaise" = 50)
+ possible_states = list()
+
//Food packs. To easily apply deadly toxi... delicious sauces to your food!
diff --git a/code/modules/food_and_drinks/food/snacks_other.dm b/code/modules/food_and_drinks/food/snacks_other.dm
index 6ec7fd9a1e..7cfce5419d 100644
--- a/code/modules/food_and_drinks/food/snacks_other.dm
+++ b/code/modules/food_and_drinks/food/snacks_other.dm
@@ -468,3 +468,11 @@
list_reagents = list("nutriment" = 3, "vitamin" = 2, "sodiumchloride" = 5)
bonus_reagents = list("sodiumchloride" = 10)
tastes = list("bran" = 4, "raisins" = 3, "salt" = 1)
+
+/obj/item/weapon/reagent_containers/food/snacks/butter
+ name = "stick of butter"
+ desc = "A stick of delicious, golden, fatty goodness."
+ icon_state = "butter"
+ list_reagents = list("nutriment" = 5)
+ filling_color = "#FFD700"
+ tastes = list("butter" = 1)
\ No newline at end of file
diff --git a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm
index a8ab8fd426..b929337a13 100644
--- a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm
+++ b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm
@@ -10,7 +10,7 @@
active_power_usage = 100
pass_flags = PASSTABLE
resistance_flags = ACID_PROOF
- var/operating = 0
+ var/operating = FALSE
var/obj/item/weapon/reagent_containers/beaker = null
var/limit = 10
var/list/blend_items = list (
@@ -220,9 +220,12 @@
[processing_chamber]
[beaker_contents]
"}
- if (is_beaker_ready && !is_chamber_empty && !(stat & (NOPOWER|BROKEN)))
- dat += "Grind the reagents
"
- dat += "Juice the reagents
"
+ if (is_beaker_ready)
+ if(!is_chamber_empty && !(stat & (NOPOWER|BROKEN)))
+ dat += "Grind the reagents
"
+ dat += "Juice the reagents
"
+ else if (beaker.reagents.total_volume)
+ dat += "Mix the reagents
"
if(holdingitems && holdingitems.len > 0)
dat += "Eject the reagents
"
if (beaker)
@@ -248,6 +251,8 @@
grind()
if("juice")
juice()
+ if("mix")
+ mix()
if("eject")
eject()
if ("detach")
@@ -327,11 +332,11 @@
playsound(src.loc, 'sound/machines/juicer.ogg', 20, 1)
var/offset = prob(50) ? -2 : 2
animate(src, pixel_x = pixel_x + offset, time = 0.2, loop = 250) //start shaking
- operating = 1
+ operating = TRUE
updateUsrDialog()
spawn(50)
pixel_x = initial(pixel_x) //return to its spot after shaking
- operating = 0
+ operating = FALSE
updateUsrDialog()
//Snacks
@@ -365,11 +370,11 @@
playsound(src.loc, 'sound/machines/blender.ogg', 50, 1)
var/offset = prob(50) ? -2 : 2
animate(src, pixel_x = pixel_x + offset, time = 0.2, loop = 250) //start shaking
- operating = 1
+ operating = TRUE
updateUsrDialog()
spawn(60)
pixel_x = initial(pixel_x) //return to its spot after shaking
- operating = 0
+ operating = FALSE
updateUsrDialog()
//Snacks and Plants
@@ -467,3 +472,33 @@
break
beaker.reagents.add_reagent(r_id, min(O.reagent_contents[r_id], space))
remove_object(O)
+
+/obj/machinery/reagentgrinder/proc/mix()
+
+ //For butter and other things that would change upon shaking or mixing
+ power_change()
+ if(stat & (NOPOWER|BROKEN))
+ return
+ if (!beaker)
+ return
+ playsound(src.loc, 'sound/machines/juicer.ogg', 20, 1)
+ var/offset = prob(50) ? -2 : 2
+ animate(src, pixel_x = pixel_x + offset, time = 0.2, loop = 250) //start shaking
+ operating = TRUE
+ updateUsrDialog()
+ addtimer(CALLBACK(src, /obj/machinery/reagentgrinder/proc/mix_complete), 50)
+
+/obj/machinery/reagentgrinder/proc/mix_complete()
+ pixel_x = initial(pixel_x) //return to its spot after shaking
+ operating = FALSE
+ updateUsrDialog()
+ if (beaker.reagents.total_volume)
+ //Recipe to make Butter
+ while(beaker.reagents.get_reagent_amount("milk") >= 15)
+ beaker.reagents.remove_reagent("milk", 15)
+ new /obj/item/weapon/reagent_containers/food/snacks/butter(src.loc)
+ //Recipe to make Mayonnaise
+ if (beaker.reagents.has_reagent("eggyolk"))
+ var/amount = beaker.reagents.get_reagent_amount("eggyolk")
+ beaker.reagents.remove_reagent("eggyolk", amount)
+ beaker.reagents.add_reagent("mayonnaise", amount)
\ No newline at end of file
diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm
index 56a89fe389..f4a0820849 100644
--- a/code/modules/reagents/chemistry/reagents/food_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm
@@ -527,6 +527,12 @@
M.heal_bodypart_damage(3,1)
..()
+/datum/reagent/consumable/mayonnaise
+ name = "Mayonnaise"
+ id = "mayonnaise"
+ description = "An white and oily mixture of mixed egg yolks."
+ color = "#DFDFDF"
+ taste_description = "mayonnaise"
////Lavaland Flora Reagents////
diff --git a/icons/obj/food/containers.dmi b/icons/obj/food/containers.dmi
index 2672732597..68c192bec3 100644
Binary files a/icons/obj/food/containers.dmi and b/icons/obj/food/containers.dmi differ
diff --git a/icons/obj/food/food.dmi b/icons/obj/food/food.dmi
index c4713bd086..b13c484139 100644
Binary files a/icons/obj/food/food.dmi and b/icons/obj/food/food.dmi differ