diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm
index ce79de34f6b..9d476d964ee 100644
--- a/code/game/objects/items/robot/robot_upgrades.dm
+++ b/code/game/objects/items/robot/robot_upgrades.dm
@@ -410,6 +410,20 @@
/obj/item/storage/bag/trash/cyborg = /obj/item/storage/bag/trash/bluespace/cyborg
)
+/***********************/
+// MARK: Service
+/***********************/
+
+/obj/item/borg/upgrade/rsf_executive
+ name = "executive service upgrade"
+ desc = "An upgrade that replaces a service cyborg's Rapid Service Fabricator with a classy Executive version."
+ icon_state = "cyborg_upgrade5"
+ origin_tech = "bio=2;materials=1"
+ require_module = TRUE
+ module_type = /obj/item/robot_module/butler
+ items_to_add = list(/obj/item/kitchen/knife/cheese)
+ items_to_replace = list(/obj/item/rsf = /obj/item/rsf/executive)
+
/***********************/
// MARK: Syndicate
/***********************/
diff --git a/code/game/objects/items/trash.dm b/code/game/objects/items/trash.dm
index 3fcc330ad13..dc9d02135ad 100644
--- a/code/game/objects/items/trash.dm
+++ b/code/game/objects/items/trash.dm
@@ -131,6 +131,11 @@
icon_state = "popsicle_stick_s"
desc = "Still tastes sweet."
+/obj/item/trash/caviar
+ name = "caviar can"
+ icon_state = "caviar-empty"
+ desc = "There's none left."
+
// Ammo casings
/obj/item/trash/spentcasing
icon = 'icons/obj/ammo.dmi'
diff --git a/code/game/objects/items/weapons/RSF.dm b/code/game/objects/items/weapons/RSF.dm
index a9ca00fa7ff..c92cd28bb05 100644
--- a/code/game/objects/items/weapons/RSF.dm
+++ b/code/game/objects/items/weapons/RSF.dm
@@ -16,13 +16,8 @@
var/atom/currently_dispensing
var/power_mode = POWER_NONE
-/obj/item/rsf/attack_self__legacy__attackchain(mob/user)
- playsound(loc, 'sound/effects/pop.ogg', 50, 0)
- if(!currently_dispensing)
- to_chat(user, "Choose an item to dispense!")
- else
- to_chat(user, "You are currently dispensing a [initial(currently_dispensing.name)].")
- var/static/list/rsf_items = list("Drinking Glass" = /obj/item/reagent_containers/drinks/drinkingglass,
+ var/list/rsf_items = list(
+ "Drinking Glass" = /obj/item/reagent_containers/drinks/drinkingglass,
"Paper" = /obj/item/paper,
"Pen" = /obj/item/pen,
"Dice Pack" = /obj/item/storage/bag/dice,
@@ -30,8 +25,12 @@
"Newdles" = /obj/item/food/chinese/newdles,
"Donut" = /obj/item/food/donut,
"Chicken Soup" = /obj/item/reagent_containers/drinks/chicken_soup,
- "Tofu Burger" = /obj/item/food/burger/tofu)
- var/static/list/rsf_icons = list("Drinking Glass" = image(icon = 'icons/obj/drinks.dmi', icon_state = "glass_empty"),
+ "Tofu Burger" = /obj/item/food/burger/tofu
+ )
+
+ var/static/list/rsf_icons = list(
+ "Drinking Glass" = image(icon = 'icons/obj/drinks.dmi', icon_state = "glass_empty"),
+ "Shot Glass" = image(icon = 'icons/obj/drinks.dmi', icon_state = "shotglass"),
"Paper" = image(icon = 'icons/obj/bureaucracy.dmi', icon_state = "paper"),
"Pen" = image(icon = 'icons/obj/bureaucracy.dmi', icon_state = "pen"),
"Dice Pack" = image(icon = 'icons/obj/dice.dmi', icon_state = "dicebag"),
@@ -39,34 +38,52 @@
"Newdles" = image(icon = 'icons/obj/food/food.dmi', icon_state = "chinese3"),
"Donut" = image(icon = 'icons/obj/food/bakedgoods.dmi', icon_state = "donut1"),
"Chicken Soup" = image(icon = 'icons/obj/drinks.dmi', icon_state = "soupcan"),
- "Tofu Burger" = image(icon = 'icons/obj/food/burgerbread.dmi', icon_state = "tofuburger"))
- var/rsf_radial_choice = show_radial_menu(user, src, rsf_icons)
+ "Tofu Burger" = image(icon = 'icons/obj/food/burgerbread.dmi', icon_state = "tofuburger"),
+ "Cigar" = image(icon = 'icons/obj/clothing/masks.dmi', icon_state = "cigaroff"),
+ "Smoked Cheese" = image(icon = 'icons/obj/food/food.dmi', icon_state = "cheesewheel-smoked"),
+ "Edam Cheese" = image(icon = 'icons/obj/food/food.dmi', icon_state = "cheesewheel-edam"),
+ "Blue Cheese" = image(icon = 'icons/obj/food/food.dmi', icon_state = "cheesewheel-blue"),
+ "Camembert Cheese" = image(icon = 'icons/obj/food/food.dmi', icon_state = "cheesewheel-camembert"),
+ "Caviar" = image(icon = 'icons/obj/food/seafood.dmi', icon_state = "caviar")
+ )
+
+ var/static/list/power_costs = list(
+ "Drinking Glass" = POWER_LOW,
+ "Shot Glass" = POWER_LOW,
+ "Paper" = POWER_LOW,
+ "Pen" = POWER_LOW,
+ "Dice Pack" = POWER_LOW,
+ "Cigarette" = POWER_LOW,
+ "Newdles" = POWER_HIGH,
+ "Donut" = POWER_HIGH,
+ "Chicken Soup" = POWER_HIGH,
+ "Tofu Burger" = POWER_HIGH,
+ "Cigar" = POWER_LOW,
+ "Smoked Cheese" = POWER_HIGH,
+ "Edam Cheese" = POWER_HIGH,
+ "Blue Cheese" = POWER_HIGH,
+ "Camembert Cheese" = POWER_HIGH,
+ "Caviar" = POWER_HIGH
+ )
+
+/obj/item/rsf/attack_self__legacy__attackchain(mob/user)
+ playsound(loc, 'sound/effects/pop.ogg', 50, FALSE)
+ if(!currently_dispensing)
+ to_chat(user, "Choose an item to dispense!")
+ else
+ to_chat(user, "You are currently dispensing a [initial(currently_dispensing.name)].")
+
+ var/rsf_radial_choice = show_radial_menu(user, src, get_radial_contents())
if(user.stat || !in_range(user, src))
return
currently_dispensing = rsf_items[rsf_radial_choice]
- switch(rsf_radial_choice)
- if("Drinking Glass")
- power_mode = POWER_LOW
- if("Paper")
- power_mode = POWER_LOW
- if("Pen")
- power_mode = POWER_LOW
- if("Dice Pack")
- power_mode = POWER_LOW
- if("Cigarette")
- power_mode = POWER_LOW
- if("Newdles")
- power_mode = POWER_HIGH
- if("Donut")
- power_mode = POWER_HIGH
- if("Chicken Soup")
- power_mode = POWER_HIGH
- if("Tofu Burger")
- power_mode = POWER_HIGH
+ power_mode = power_costs[rsf_radial_choice]
if(currently_dispensing)
to_chat(user, "Your RSF has been configured to now dispense a [initial(currently_dispensing.name)]!")
return TRUE
+/obj/item/rsf/proc/get_radial_contents()
+ return rsf_icons & rsf_items
/obj/item/rsf/afterattack__legacy__attackchain(atom/A, mob/user, proximity)
if(!currently_dispensing)
@@ -88,6 +105,27 @@
playsound(loc, 'sound/machines/click.ogg', 10, 1)
new currently_dispensing(T)
+/obj/item/rsf/executive
+ name = "\improper Executive-Service-Fabricator"
+ desc = "A fancier version of the RSF, used to deploy classy refreshments and materials to high ranking clientelle."
+ icon_state = "rsf-exec"
+
+ rsf_items = list(
+ "Drinking Glass" = /obj/item/reagent_containers/drinks/drinkingglass,
+ "Shot Glass" = /obj/item/reagent_containers/drinks/drinkingglass/shotglass,
+ "Paper" = /obj/item/paper,
+ "Pen" = /obj/item/pen,
+ "Dice Pack" = /obj/item/storage/bag/dice,
+ "Cigar" = /obj/item/clothing/mask/cigarette/cigar,
+ "Cigarette" = /obj/item/clothing/mask/cigarette,
+ "Smoked Cheese" = /obj/item/food/sliceable/cheesewheel/smoked,
+ "Edam Cheese" = /obj/item/food/sliceable/cheesewheel/edam,
+ "Blue Cheese" = /obj/item/food/sliceable/cheesewheel/blue,
+ "Camembert Cheese" = /obj/item/food/sliceable/cheesewheel/camembert,
+ "Caviar" = /obj/item/food/caviar,
+ "Donut" = /obj/item/food/donut
+ )
+
#undef POWER_NONE
#undef POWER_LOW
#undef POWER_HIGH
diff --git a/code/game/objects/items/weapons/kitchen.dm b/code/game/objects/items/weapons/kitchen.dm
index c176eea3c8d..ab8529afb20 100644
--- a/code/game/objects/items/weapons/kitchen.dm
+++ b/code/game/objects/items/weapons/kitchen.dm
@@ -219,6 +219,12 @@
desc = "A cyborg-mounted plasteel knife. Extremely sharp and durable."
origin_tech = null
+/obj/item/kitchen/knife/cheese
+ name = "cheese knife"
+ desc = "A blunt knife used to slice cheese."
+ icon_state = "knife-cheese"
+ force = 3
+
/*
* Rolling Pins
*/
diff --git a/code/modules/food_and_drinks/food/foods/ingredients.dm b/code/modules/food_and_drinks/food/foods/ingredients.dm
index c30770175fc..da8df590bd8 100644
--- a/code/modules/food_and_drinks/food/foods/ingredients.dm
+++ b/code/modules/food_and_drinks/food/foods/ingredients.dm
@@ -54,6 +54,68 @@
filling_color = "#FFF700"
tastes = list("cheese" = 1)
+/obj/item/food/sliceable/cheesewheel/smoked
+ name = "smoked cheese wheel"
+ desc = "A wheel of fancy imported-style smoked cheese."
+ icon_state = "cheesewheel-smoked"
+ slice_path = /obj/item/food/cheesewedge/smoked
+ slices_num = 4
+ list_reagents = list("nutriment" = 2, "vitamin" = 2, "cheese" = 15)
+ tastes = list("cheese" = 1, "smoke" = 2)
+
+/obj/item/food/cheesewedge/smoked
+ name = "smoked cheese wedge"
+ desc = "A wedge of fancy smoked cheese."
+ icon_state = "cheesewedge-smoked"
+ tastes = list("cheese" = 1, "smoke" = 2)
+
+/obj/item/food/sliceable/cheesewheel/edam
+ name = "edam cheese wheel"
+ desc = "A wheel of mild edam cheese."
+ icon_state = "cheesewheel-edam"
+ slice_path = /obj/item/food/cheesewedge/edam
+ slices_num = 4
+ list_reagents = list("nutriment" = 2, "vitamin" = 2, "cheese" = 15)
+ tastes = list("cheese" = 1, "salt" = 2, "almonds" = 2)
+
+/obj/item/food/cheesewedge/edam
+ name = "edam cheese wedge"
+ desc = "A wedge of mild edam cheese. It's said to have a nutty flavor."
+ icon_state = "cheesewedge-edam"
+ tastes = list("cheese" = 1, "salt" = 2, "almonds" = 2)
+
+/obj/item/food/sliceable/cheesewheel/blue
+ name = "blue cheese wheel"
+ desc = "A wheel of pungent blue cheese. It's an acquired taste..."
+ icon_state = "cheesewheel-blue"
+ slice_path = /obj/item/food/cheesewedge/blue
+ slices_num = 5
+ list_reagents = list("nutriment" = 2, "vitamin" = 2, "cheese" = 10)
+ tastes = list("strong cheese" = 2, "salt" = 1, "bitter mold" = 1)
+
+/obj/item/food/cheesewedge/blue
+ name = "blue cheese wedge"
+ desc = "A wedge of pungent blue cheese. The flavor is... intense."
+ icon_state = "cheesewedge-blue"
+ bitesize = 2
+ tastes = list("strong cheese" = 2, "salt" = 1, "bitter mold" = 1)
+
+/obj/item/food/sliceable/cheesewheel/camembert
+ name = "camembert cheese wheel"
+ desc = "A miniature wheel of gooey camembert. Yum..."
+ icon_state = "cheesewheel-camembert"
+ slice_path = /obj/item/food/cheesewedge/camembert
+ slices_num = 2
+ list_reagents = list("nutriment" = 1, "vitamin" = 2, "cheese" = 6)
+ tastes = list("mild cheese" = 3, "gooeyness" = 1)
+
+/obj/item/food/cheesewedge/camembert
+ name = "camembert cheese slice"
+ desc = "A piece of camembert. It's soft and gooey."
+ icon_state = "cheesewedge-camembert"
+ bitesize = 2
+ tastes = list("mild cheese" = 3, "gooeyness" = 1)
+
/obj/item/food/cheesewedge/checkpass(passflag)
if((passflag & PASSDOOR) && ismouse(pulledby))
return TRUE
diff --git a/code/modules/food_and_drinks/food/foods/seafood.dm b/code/modules/food_and_drinks/food/foods/seafood.dm
index 5291a48db63..a381e3ae20b 100644
--- a/code/modules/food_and_drinks/food/foods/seafood.dm
+++ b/code/modules/food_and_drinks/food/foods/seafood.dm
@@ -368,3 +368,13 @@
list_reagents = list("nutriment" = 2)
tastes = list("grilled eel" = 1, "seaweed" = 1)
goal_difficulty = FOOD_GOAL_NORMAL
+
+/obj/item/food/caviar
+ name = "\improper Three-Star caviar"
+ desc = "A small, pretentious looking can of fish eggs."
+ icon = 'icons/obj/food/seafood.dmi'
+ icon_state = "caviar"
+ bitesize = 1
+ trash = /obj/item/trash/caviar
+ list_reagents = list("protein" = 5)
+ tastes = list("fish" = 2, "high society" = 1)
diff --git a/code/modules/research/designs/mechfabricator_designs.dm b/code/modules/research/designs/mechfabricator_designs.dm
index 45357c571e2..fb709fa9dc9 100644
--- a/code/modules/research/designs/mechfabricator_designs.dm
+++ b/code/modules/research/designs/mechfabricator_designs.dm
@@ -1303,6 +1303,16 @@
construction_time = 12 SECONDS
category = list("Cyborg Upgrade Modules")
+/datum/design/borg_upgrade_rsf_executive
+ name = "Cyborg Upgrade (Executive Service Upgrade)"
+ id = "borg_upgrade_RSF_executive"
+ build_type = MECHFAB
+ build_path = /obj/item/borg/upgrade/rsf_executive
+ req_tech = list("materials" = 2, "biotech" = 3)
+ materials = list(MAT_METAL = 10000, MAT_GLASS = 6000, MAT_GOLD = 2000)
+ construction_time = 12 SECONDS
+ category = list("Cyborg Upgrade Modules")
+
//Misc
/datum/design/mecha_tracking
name = "Exosuit Tracking Beacon"
diff --git a/icons/obj/food/food.dmi b/icons/obj/food/food.dmi
index d5a6a5c1f09..19a43ff7d57 100644
Binary files a/icons/obj/food/food.dmi and b/icons/obj/food/food.dmi differ
diff --git a/icons/obj/food/seafood.dmi b/icons/obj/food/seafood.dmi
index 45b3050244a..6984cbcd36b 100644
Binary files a/icons/obj/food/seafood.dmi and b/icons/obj/food/seafood.dmi differ
diff --git a/icons/obj/kitchen.dmi b/icons/obj/kitchen.dmi
index fa69bb43736..cd23f4d6697 100644
Binary files a/icons/obj/kitchen.dmi and b/icons/obj/kitchen.dmi differ
diff --git a/icons/obj/tools.dmi b/icons/obj/tools.dmi
index cd7f22b04e2..b0d19f5de99 100644
Binary files a/icons/obj/tools.dmi and b/icons/obj/tools.dmi differ
diff --git a/icons/obj/trash.dmi b/icons/obj/trash.dmi
index c1b0445568d..ef669b16b01 100644
Binary files a/icons/obj/trash.dmi and b/icons/obj/trash.dmi differ