diff --git a/code/game/objects/items/storage/bags.dm b/code/game/objects/items/storage/bags.dm
index 948b9577..9bf1c0e9 100644
--- a/code/game/objects/items/storage/bags.dm
+++ b/code/game/objects/items/storage/bags.dm
@@ -364,7 +364,7 @@
STR.max_combined_w_class = 200
STR.max_items = 50
STR.insert_preposition = "in"
- STR.can_hold = typecacheof(list(/obj/item/reagent_containers/pill, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/glass/bottle,/obj/item/reagent_containers/chem_pack))
+ STR.can_hold = typecacheof(list(/obj/item/reagent_containers/pill, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/syringe/dart, /obj/item/reagent_containers/chem_pack))
/*
* Biowaste bag (mostly for xenobiologists)
diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm
index 1c3efc23..d5794174 100644
--- a/code/game/objects/items/storage/belt.dm
+++ b/code/game/objects/items/storage/belt.dm
@@ -710,6 +710,9 @@ obj/item/storage/belt/slut/ComponentInitialize()
var/datum/component/storage/STR = GetComponent(/datum/component/storage)
STR.max_items = 15
STR.display_numerical_stacking = FALSE
+ STR.allow_quick_gather = TRUE
+ STR.allow_quick_empty = TRUE
+ STR.click_gather = TRUE
STR.can_hold = typecacheof(list(
/obj/item/reagent_containers/syringe/dart
))
@@ -718,6 +721,25 @@ obj/item/storage/belt/slut/ComponentInitialize()
for(var/i in 1 to 16)
new /obj/item/reagent_containers/syringe/dart/(src)
+/obj/item/storage/belt/medolier/afterattack(obj/target, mob/user , proximity)
+ if(!(istype(target, /obj/item/reagent_containers/glass/beaker)))
+ return
+ if(!proximity)
+ return
+ if(!target.reagents)
+ return
+
+ for(var/obj/item/reagent_containers/syringe/dart/D in contents)
+ if(round(target.reagents.total_volume, 1) <= 0)
+ to_chat(user, "You soak as many of the darts as you can with the contents from [target].")
+ return
+ if(D.mode == SYRINGE_INJECT)
+ continue
+
+ D.afterattack(target, user, proximity)
+
+ ..()
+
/obj/item/storage/belt/holster
name = "shoulder holster"
desc = "A holster to carry a handgun and ammo. WARNING: Badasses only."
diff --git a/code/modules/crafting/recipes/recipes_weapon_and_ammo.dm b/code/modules/crafting/recipes/recipes_weapon_and_ammo.dm
index 9a06981b..6eb1c31b 100644
--- a/code/modules/crafting/recipes/recipes_weapon_and_ammo.dm
+++ b/code/modules/crafting/recipes/recipes_weapon_and_ammo.dm
@@ -190,7 +190,6 @@
category = CAT_WEAPONRY
subcategory = CAT_WEAPON
-/* We don't have this yet -- Archie
/datum/crafting_recipe/rapiddartgun
name = "Rapid Smart dartgun"
result = /obj/item/gun/syringe/dart/rapiddart
@@ -204,7 +203,6 @@
time = 120 //Modifying your gun
category = CAT_WEAPONRY
subcategory = CAT_WEAPON
-*/
/datum/crafting_recipe/improvised_pneumatic_cannon
name = "Pneumatic Cannon"
diff --git a/code/modules/projectiles/guns/misc/syringe_gun.dm b/code/modules/projectiles/guns/misc/syringe_gun.dm
index 15290c3a..ace8f32c 100644
--- a/code/modules/projectiles/guns/misc/syringe_gun.dm
+++ b/code/modules/projectiles/guns/misc/syringe_gun.dm
@@ -138,3 +138,32 @@
if (shot == TRUE)
user.adjustStaminaLoss(15)
user.adjustOxyLoss(15)
+
+/obj/item/gun/syringe/dart/rapiddart
+ name = "Repeating dart gun"
+ icon_state = "rapiddartgun"
+ item_state = "rapiddartgun"
+
+/obj/item/gun/syringe/dart/rapiddart/CheckParts(list/parts_list)
+ var/obj/item/reagent_containers/glass/beaker/B = locate(/obj/item/reagent_containers/glass/beaker) in parts_list
+
+ if(istype(B, /obj/item/reagent_containers/glass/beaker/large))
+ desc = "[initial(desc)] A modification of the dart gun's pressure chamber has been perfomed using a [B], extending it's holding size to [max_syringes]."
+ max_syringes = 2
+ return
+ else if(istype(B, /obj/item/reagent_containers/glass/beaker/plastic))
+ desc = "[initial(desc)] A modification of the dart gun's pressure chamber has been perfomed using a [B], extending it's holding size to [max_syringes]."
+ max_syringes = 3
+ return
+ else if(istype(B, /obj/item/reagent_containers/glass/beaker/meta))
+ desc = "[initial(desc)] A modification of the dart gun's pressure chamber has been perfomed using a [B], extending it's holding size to [max_syringes]."
+ max_syringes = 4
+ return
+ else if(istype(B, /obj/item/reagent_containers/glass/beaker/bluespace))
+ desc = "[initial(desc)] A modification of the dart gun's pressure chamber has been perfomed using a [B], extending it's holding size to [max_syringes]."
+ max_syringes = 6
+ return
+ else
+ max_syringes = 1
+ desc = "[initial(desc)] It has a [B] strapped to it, but it doesn't seem to be doing anything."
+ ..()
diff --git a/code/modules/reagents/chemistry/machinery/chem_master.dm b/code/modules/reagents/chemistry/machinery/chem_master.dm
index 9c47b62b..f540ae85 100644
--- a/code/modules/reagents/chemistry/machinery/chem_master.dm
+++ b/code/modules/reagents/chemistry/machinery/chem_master.dm
@@ -384,6 +384,38 @@
adjust_item_drop_location(P)
reagents.trans_to(P, vol_part)
. = TRUE
+
+ if("createDart")
+ for(var/datum/reagent/R in reagents.reagent_list)
+ if(!(istype(R, /datum/reagent/medicine)))
+ visible_message("The [src] beeps, \"SmartDarts are insoluble with non-medicinal compounds.\"")
+ return
+
+ var/many = params["many"]
+ if(reagents.total_volume == 0)
+ return
+ var/amount = 1
+ var/vol_each = min(reagents.total_volume, 20)
+ if(text2num(many))
+ amount = CLAMP(round(input(usr, "Max 10. Buffer content will be split evenly.", "How many darts?", amount) as num|null), 0, 10)
+ if(!amount)
+ return
+ vol_each = min(reagents.total_volume / amount, 20)
+
+ var/name = stripped_input(usr,"Name:","Name your SmartDart!", "[reagents.get_master_reagent_name()] ([vol_each]u)", MAX_NAME_LEN)
+ if(!name || !reagents.total_volume || !src || QDELETED(src) || !usr.canUseTopic(src, !issilicon(usr)))
+ return
+
+ var/obj/item/reagent_containers/syringe/dart/D
+ for(var/i = 0; i < amount; i++)
+ D = new /obj/item/reagent_containers/syringe/dart(drop_location())
+ D.name = trim("[name] SmartDart")
+ adjust_item_drop_location(D)
+ reagents.trans_to(D, vol_each)
+ D.mode=!mode
+ D.update_icon()
+ . = TRUE
+
//END CITADEL ADDITIONS
if("analyzeBeak")
var/datum/reagent/R = GLOB.chemical_reagents_list[params["id"]]
@@ -488,4 +520,4 @@
condi = TRUE
#undef PILL_STYLE_COUNT
-#undef RANDOM_PILL_STYLE
\ No newline at end of file
+#undef RANDOM_PILL_STYLE
diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm
index 101aa1be..48a74515 100644
--- a/code/modules/reagents/reagent_containers/syringes.dm
+++ b/code/modules/reagents/reagent_containers/syringes.dm
@@ -307,7 +307,7 @@
var/trans = target.reagents.trans_to(src, amount_per_transfer_from_this)
to_chat(user, "You soak the [src] with [trans] units of the solution. It now contains [reagents.total_volume] units.")
- if (reagents.total_volume >= reagents.maximum_volume)
+ if (round(reagents.total_volume,1) >= reagents.maximum_volume)
mode=!mode
update_icon()
@@ -323,8 +323,9 @@
rounded_vol = "empty"
if(reagents && reagents.total_volume)
- if(volume/reagents.total_volume == 1)
+ if(volume/round(reagents.total_volume, 1) == 1)
rounded_vol="full"
+ mode = SYRINGE_INJECT
icon_state = "[rounded_vol]"
item_state = "syringe_[rounded_vol]"
diff --git a/icons/obj/guns/projectile.dmi b/icons/obj/guns/projectile.dmi
index 895299be..5c41ffe8 100644
Binary files a/icons/obj/guns/projectile.dmi and b/icons/obj/guns/projectile.dmi differ
diff --git a/tgui/src/interfaces/chem_master.ract b/tgui/src/interfaces/chem_master.ract
index b1b5b5cc..a001fbe0 100644
--- a/tgui/src/interfaces/chem_master.ract
+++ b/tgui/src/interfaces/chem_master.ract
@@ -81,6 +81,11 @@
Dispense Buffer to Hypo vials
+
+ Create SmartDart (max 20ยต)
+
+ Create Multiple SmartDarts
+