diff --git a/code/modules/reagents/Chemistry-Recipes.dm b/code/modules/reagents/Chemistry-Recipes.dm
index 6ecd4caf63..f7fed5fa76 100644
--- a/code/modules/reagents/Chemistry-Recipes.dm
+++ b/code/modules/reagents/Chemistry-Recipes.dm
@@ -2172,7 +2172,7 @@
result = "mojito"
required_reagents = list("rum" = 3, "limejuice" = 1, "mint" = 1)
result_amount = 5
-
+
/datum/chemical_reaction/drinks/piscosour
name = "Pisco Sour"
id = "piscosour"
@@ -2186,8 +2186,8 @@
result = "coldfront"
required_reagents = list("icecoffee" = 1, "whiskey" = 1, "mint" = 1)
result_amount = 3
-
-
+
+
//R-UST Port
/datum/chemical_reaction/hyrdophoron
name = "Hydrophoron"
diff --git a/code/modules/reagents/reagent_containers/blood_pack.dm b/code/modules/reagents/reagent_containers/blood_pack.dm
index 9949550182..0f40a83e20 100644
--- a/code/modules/reagents/reagent_containers/blood_pack.dm
+++ b/code/modules/reagents/reagent_containers/blood_pack.dm
@@ -14,19 +14,25 @@
new /obj/item/weapon/reagent_containers/blood/empty(src)
/obj/item/weapon/reagent_containers/blood
- name = "BloodPack"
- desc = "Contains blood used for transfusion."
+ name = "IV pack"
+ var/base_name = " "
+ desc = "Holds liquids used for transfusion."
+ var/base_desc = " "
icon = 'icons/obj/bloodpack.dmi'
icon_state = "empty"
item_state = "bloodpack_empty"
volume = 200
+ var/label_text = ""
var/blood_type = null
/obj/item/weapon/reagent_containers/blood/New()
..()
+ base_name = name
+ base_desc = desc
if(blood_type != null)
- name = "BloodPack [blood_type]"
+ label_text = "[blood_type]"
+ update_iv_label()
reagents.add_reagent("blood", 200, list("donor"=null,"viruses"=null,"blood_DNA"=null,"blood_type"=blood_type,"resistances"=null,"trace_chem"=null))
update_icon()
@@ -45,6 +51,30 @@
icon_state = "full"
item_state = "bloodpack_full"
+/obj/item/weapon/reagent_containers/blood/attackby(obj/item/weapon/W as obj, mob/user as mob)
+ if(istype(W, /obj/item/weapon/pen) || istype(W, /obj/item/device/flashlight/pen))
+ var/tmp_label = sanitizeSafe(input(user, "Enter a label for [name]", "Label", label_text), MAX_NAME_LEN)
+ if(length(tmp_label) > 50)
+ to_chat(user, "The label can be at most 50 characters long.")
+ else if(length(tmp_label) > 10)
+ to_chat(user, "You set the label.")
+ label_text = tmp_label
+ update_iv_label()
+ else
+ to_chat(user, "You set the label to \"[tmp_label]\".")
+ label_text = tmp_label
+ update_iv_label()
+
+/obj/item/weapon/reagent_containers/blood/proc/update_iv_label()
+ if(label_text == "")
+ name = base_name
+ else if(length(label_text) > 10)
+ var/short_label_text = copytext(label_text, 1, 11)
+ name = "[base_name] ([short_label_text]...)"
+ else
+ name = "[base_name] ([label_text])"
+ desc = "[base_desc] It is labeled \"[label_text]\"."
+
/obj/item/weapon/reagent_containers/blood/APlus
blood_type = "A+"
diff --git a/code/modules/reagents/reagent_containers/dropper.dm b/code/modules/reagents/reagent_containers/dropper.dm
index 0a1816e4c8..f15c2faf3f 100644
--- a/code/modules/reagents/reagent_containers/dropper.dm
+++ b/code/modules/reagents/reagent_containers/dropper.dm
@@ -2,8 +2,8 @@
/// Droppers.
////////////////////////////////////////////////////////////////////////////////
/obj/item/weapon/reagent_containers/dropper
- name = "Dropper"
- desc = "A dropper. Transfers 5 units."
+ name = "dropper"
+ desc = "A dropper. Transfers up to 5 units at a time."
icon = 'icons/obj/chemical.dmi'
icon_state = "dropper0"
amount_per_transfer_from_this = 5
@@ -12,17 +12,25 @@
slot_flags = SLOT_EARS
volume = 5
+/obj/item/weapon/reagent_containers/dropper/examine(var/mob/user)
+ if(!..(user, 2))
+ return
+ if(reagents && reagents.reagent_list.len)
+ to_chat(user, "It contains [reagents.total_volume] units of liquid.")
+ else
+ to_chat(user, "It is empty.")
+
/obj/item/weapon/reagent_containers/dropper/afterattack(var/obj/target, var/mob/user, var/proximity)
if(!target.reagents || !proximity) return
if(reagents.total_volume)
if(!target.reagents.get_free_space())
- user << "[target] is full."
+ to_chat(user, "[target] is full.")
return
if(!target.is_open_container() && !ismob(target) && !istype(target, /obj/item/weapon/reagent_containers/food) && !istype(target, /obj/item/clothing/mask/smokable/cigarette)) //You can inject humans and food but you cant remove the shit.
- user << "You cannot directly fill this object."
+ to_chat(user, "You cannot directly fill this object.")
return
var/trans = 0
@@ -50,7 +58,7 @@
safe_thing = victim.glasses
if(safe_thing)
- trans = reagents.splash(safe_thing, amount_per_transfer_from_this, max_spill=30)
+ trans = reagents.splash(safe_thing, min(amount_per_transfer_from_this, reagents.total_volume), max_spill=30)
user.visible_message("[user] tries to squirt something into [target]'s eyes, but fails!", "You transfer [trans] units of the solution.")
return
@@ -60,30 +68,30 @@
user.attack_log += text("\[[time_stamp()]\] Used the [name] to squirt [M.name] ([M.key]). Reagents: [contained]")
msg_admin_attack("[user.name] ([user.ckey]) squirted [M.name] ([M.key]) with [name]. Reagents: [contained] (INTENT: [uppertext(user.a_intent)]) (JMP)")
- trans += reagents.splash(target, reagents.total_volume/2, max_spill=30)
- trans += reagents.trans_to_mob(target, reagents.total_volume/2, CHEM_BLOOD) //I guess it gets into the bloodstream through the eyes or something
- user.visible_message("[user] squirts something into [target]'s eyes!", "You transfer [trans] units of the solution.")
+ trans += reagents.trans_to_mob(target, min(amount_per_transfer_from_this, reagents.total_volume)/2, CHEM_INGEST) //Half injected, half ingested
+ trans += reagents.trans_to_mob(target, min(amount_per_transfer_from_this, reagents.total_volume), CHEM_BLOOD) //I guess it gets into the bloodstream through the eyes or something
+ user.visible_message("[user] squirts something into [target]'s eyes!", "You transfer [trans] units of the solution.")
return
else
- trans = reagents.splash(target, amount_per_transfer_from_this, max_spill=0) //sprinkling reagents on generic non-mobs
- user << "You transfer [trans] units of the solution."
+ trans = reagents.trans_to_obj(target, amount_per_transfer_from_this)
+ to_chat(user, "You transfer [trans] units of the solution.")
else // Taking from something
if(!target.is_open_container() && !istype(target,/obj/structure/reagent_dispensers))
- user << "You cannot directly remove reagents from [target]."
+ to_chat(user, "You cannot directly remove reagents from [target].")
return
if(!target.reagents || !target.reagents.total_volume)
- user << "[target] is empty."
+ to_chat(user, "[target] is empty.")
return
var/trans = target.reagents.trans_to_obj(src, amount_per_transfer_from_this)
- user << "You fill the dropper with [trans] units of the solution."
+ to_chat(user, "You fill the dropper with [trans] units of the solution.")
return
@@ -98,7 +106,7 @@
/obj/item/weapon/reagent_containers/dropper/industrial
name = "Industrial Dropper"
- desc = "A larger dropper. Transfers 10 units."
+ desc = "A larger dropper. Transfers up to 10 units at a time."
amount_per_transfer_from_this = 10
possible_transfer_amounts = list(1,2,3,4,5,6,7,8,9,10)
volume = 10