diff --git a/code/game/objects/items/robot/robot_items.dm b/code/game/objects/items/robot/robot_items.dm
index eed38a704e5b2..2d53fad04d176 100644
--- a/code/game/objects/items/robot/robot_items.dm
+++ b/code/game/objects/items/robot/robot_items.dm
@@ -841,7 +841,7 @@
/**********************************************************************
Borg apparatus
***********************************************************************/
-//These are tools that can hold only specific items. For example, the mediborg gets one that can only hold beakers and bottles.
+//These are tools that can hold only specific items. For example, the mediborg and service borg get one that can only hold reagent containers
/obj/item/borg/apparatus/
name = "unknown storage apparatus"
@@ -923,33 +923,28 @@
return
. = ..()
-/////////////////
-//beaker holder//
-/////////////////
+////////////////////
+//container holder//
+////////////////////
-/obj/item/borg/apparatus/beaker
- name = "beaker storage apparatus"
- desc = "A special apparatus for carrying beakers without spilling the contents."
+/obj/item/borg/apparatus/container
+ name = "container storage apparatus"
+ desc = "A special apparatus for carrying containers without spilling the contents. It can also synthesize new beakers!"
icon_state = "borg_beaker_apparatus"
- storable = list(/obj/item/reagent_containers/glass/beaker,
- /obj/item/reagent_containers/glass/bottle)
-
-/obj/item/borg/apparatus/beaker/Initialize(mapload)
- . = ..()
- stored = new /obj/item/reagent_containers/glass/beaker/large(src)
- RegisterSignal(stored, COMSIG_ATOM_UPDATE_ICON, TYPE_PROC_REF(/atom, update_icon))
- update_icon()
+ storable = list(/obj/item/reagent_containers/glass)
+ var/defaultcontainer = /obj/item/reagent_containers/glass/beaker
-/obj/item/borg/apparatus/beaker/Destroy()
+/obj/item/borg/apparatus/container/Destroy()
if(stored)
var/obj/item/reagent_containers/C = stored
C.SplashReagents(get_turf(src))
QDEL_NULL(stored)
. = ..()
-/obj/item/borg/apparatus/beaker/examine()
+/obj/item/borg/apparatus/container/examine()
. = ..()
- if(stored)
+ //apparatus/container/service means this will not always be true.
+ if(istype(stored, /obj/item/reagent_containers/glass))
var/obj/item/reagent_containers/C = stored
. += "The apparatus currently has [C] secured, which contains:"
if(length(C.reagents.reagent_list))
@@ -959,7 +954,7 @@
. += "Nothing."
. += "Alt-click will drop the currently stored [stored]."
-/obj/item/borg/apparatus/beaker/update_overlays()
+/obj/item/borg/apparatus/container/update_overlays()
. = ..()
var/mutable_appearance/arm = mutable_appearance(icon = icon, icon_state = "borg_beaker_apparatus_arm")
if(stored)
@@ -976,7 +971,14 @@
arm.pixel_y = arm.pixel_y - 5
. += arm
-/obj/item/borg/apparatus/beaker/attack_self(mob/living/silicon/robot/user)
+/obj/item/borg/apparatus/container/attack_self(mob/living/silicon/robot/user)
+ if(!stored)
+ var/newcontainer = new defaultcontainer(src)
+ stored = newcontainer
+ to_chat(user, "You synthesize a new [newcontainer]!")
+ playsound(src, 'sound/machines/click.ogg', 10, 1)
+ update_icon()
+ return
if(stored && !user.client?.keys_held["Alt"] && user.a_intent != "help")
var/obj/item/reagent_containers/C = stored
C.SplashReagents(get_turf(user))
@@ -984,9 +986,9 @@
return
. = ..()
-/obj/item/borg/apparatus/beaker/extra
- name = "secondary beaker storage apparatus"
- desc = "A supplementary beaker storage apparatus."
+/obj/item/borg/apparatus/container/extra
+ name = "container storage apparatus"
+ desc = "A supplementary container storage apparatus."
////////////////////
//engi part holder//
@@ -1033,10 +1035,11 @@
//versatile service holder//
////////////////////
-/obj/item/borg/apparatus/beaker/service
+/obj/item/borg/apparatus/container/service
name = "versatile service grasper"
- desc = "Specially designed for carrying glasses, food and seeds."
+ desc = "Specially designed for carrying glasses, food and seeds. It can also synthesize glasses for drinks!"
storable = list(/obj/item/reagent_containers/food,
+ /obj/item/reagent_containers/glass,
/obj/item/seeds,
/obj/item/storage/fancy/donut_box,
/obj/item/storage/fancy/egg_box,
@@ -1046,10 +1049,13 @@
/obj/item/reagent_containers/glass/bottle,
/obj/item/reagent_containers/glass/bucket
)
+ defaultcontainer = /obj/item/reagent_containers/food/drinks/drinkingglass
-/obj/item/borg/apparatus/beaker/service/examine()
+
+/obj/item/borg/apparatus/container/service/examine()
. = ..()
- if(stored)
+ //Parent type handles this type. All other objects held are handled here.
+ if(!istype(stored, /obj/item/reagent_containers/glass))
. += "You are currently holding [stored]."
. += "Alt-click will drop the currently stored [stored]."
diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm
index c8a6796c9d501..42c09695b12c5 100644
--- a/code/game/objects/items/robot/robot_upgrades.dm
+++ b/code/game/objects/items/robot/robot_upgrades.dm
@@ -742,8 +742,8 @@
R.module.remove_module(C, TRUE)
/obj/item/borg/upgrade/beaker_app
- name = "beaker storage apparatus"
- desc = "A supplementary beaker storage apparatus for medical cyborgs."
+ name = "container storage apparatus"
+ desc = "A supplementary container storage apparatus for medical cyborgs."
icon_state = "cyborg_upgrade3"
require_module = TRUE
module_type = list(/obj/item/robot_module/medical)
@@ -752,7 +752,7 @@
/obj/item/borg/upgrade/beaker_app/action(mob/living/silicon/robot/R, user = usr)
. = ..()
if(.)
- var/obj/item/borg/apparatus/beaker/extra/E = locate() in R.module.modules
+ var/obj/item/borg/apparatus/container/extra/E = locate() in R.module.modules
if(E)
to_chat(user, "This unit has no room for additional beaker storage.")
return FALSE
@@ -764,11 +764,10 @@
/obj/item/borg/upgrade/beaker_app/deactivate(mob/living/silicon/robot/R, user = usr)
. = ..()
if (.)
- var/obj/item/borg/apparatus/beaker/extra/E = locate() in R.module.modules
+ var/obj/item/borg/apparatus/container/extra/E = locate() in R.module.modules
if (E)
R.module.remove_module(E, TRUE)
-
/obj/item/borg/upgrade/speciality
name = "Speciality Module"
icon_state = "cyborg_upgrade3"
diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm
index 7030ffef05079..4135e320427ed 100644
--- a/code/modules/mob/living/silicon/robot/robot_modules.dm
+++ b/code/modules/mob/living/silicon/robot/robot_modules.dm
@@ -271,7 +271,7 @@
/obj/item/borg/charger,
/obj/item/weldingtool/cyborg/mini,
/obj/item/reagent_containers/borghypo,
- /obj/item/borg/apparatus/beaker,
+ /obj/item/borg/apparatus/container,
/obj/item/reagent_containers/dropper,
/obj/item/reagent_containers/syringe,
/obj/item/surgical_drapes,
@@ -508,7 +508,6 @@
name = "Service"
basic_modules = list(
/obj/item/assembly/flash/cyborg,
- /obj/item/reagent_containers/food/drinks/drinkingglass,
/obj/item/pen,
/obj/item/toy/crayon/spraycan/borg,
/obj/item/extinguisher/mini,
@@ -521,7 +520,7 @@
/obj/item/instrument/piano_synth,
/obj/item/reagent_containers/dropper,
/obj/item/lighter,
- /obj/item/borg/apparatus/beaker/service,
+ /obj/item/borg/apparatus/container/service,
/obj/item/reagent_containers/borghypo/borgshaker)
emag_modules = list(/obj/item/reagent_containers/borghypo/borgshaker/hacked)
ratvar_modules = list(
diff --git a/code/modules/reagents/reagent_containers/borghydro.dm b/code/modules/reagents/reagent_containers/borghydro.dm
index d6f0ca14de7ec..a406ccf40967c 100644
--- a/code/modules/reagents/reagent_containers/borghydro.dm
+++ b/code/modules/reagents/reagent_containers/borghydro.dm
@@ -185,6 +185,21 @@ Borg Shaker
accepts_reagent_upgrades = FALSE
reagent_ids = list(
+ //Non-alcoholic
+ /datum/reagent/water,
+ /datum/reagent/consumable/coffee,
+ /datum/reagent/consumable/tea,
+ /datum/reagent/consumable/space_cola,
+ /datum/reagent/consumable/dr_gibb,
+ /datum/reagent/consumable/spacemountainwind,
+ /datum/reagent/consumable/space_up,
+ //Fruit Juice
+ /datum/reagent/consumable/banana,
+ /datum/reagent/consumable/lemonjuice,
+ /datum/reagent/consumable/limejuice,
+ /datum/reagent/consumable/orangejuice,
+ /datum/reagent/consumable/tomatojuice,
+ //Alcoholic
/datum/reagent/consumable/ethanol/absinthe,
/datum/reagent/consumable/ethanol/ale,
/datum/reagent/consumable/ethanol/beer,
@@ -192,25 +207,21 @@ Borg Shaker
/datum/reagent/consumable/ethanol/gin,
/datum/reagent/consumable/ethanol/kahlua,
/datum/reagent/consumable/ethanol/rum,
+ /datum/reagent/consumable/ethanol/sake,
/datum/reagent/consumable/ethanol/tequila,
/datum/reagent/consumable/ethanol/triple_sec,
/datum/reagent/consumable/ethanol/vermouth,
/datum/reagent/consumable/ethanol/vodka,
/datum/reagent/consumable/ethanol/whiskey,
/datum/reagent/consumable/ethanol/wine,
- /datum/reagent/consumable/banana,
- /datum/reagent/consumable/coffee,
- /datum/reagent/consumable/cream,
- /datum/reagent/consumable/grenadine,
+ //Other stuff for mixing
/datum/reagent/consumable/ice,
- /datum/reagent/consumable/lemonjuice,
- /datum/reagent/consumable/limejuice,
- /datum/reagent/consumable/milk,
- /datum/reagent/consumable/orangejuice,
/datum/reagent/consumable/sodawater,
- /datum/reagent/consumable/space_cola,
- /datum/reagent/consumable/tomatojuice,
- /datum/reagent/consumable/tonic)
+ /datum/reagent/consumable/tonic,
+ /datum/reagent/consumable/grenadine,
+ /datum/reagent/consumable/cream,
+ /datum/reagent/consumable/milk,
+ /datum/reagent/consumable/sugar)
/obj/item/reagent_containers/borghypo/borgshaker/attack(mob/M, mob/user)
return //Can't inject stuff with a shaker, can we? //not with that attitude