diff --git a/code/modules/projectiles/guns/syringe_gun.dm b/code/modules/projectiles/guns/syringe_gun.dm
index 04cf2d248d3..72c60277dec 100644
--- a/code/modules/projectiles/guns/syringe_gun.dm
+++ b/code/modules/projectiles/guns/syringe_gun.dm
@@ -18,62 +18,61 @@
..()
chambered = new /obj/item/ammo_casing/syringegun(src)
-/obj/item/gun/syringe/newshot()
- if(!syringes.len)
+/obj/item/gun/syringe/process_chamber()
+ if(!length(syringes) || chambered.BB)
return
var/obj/item/reagent_containers/syringe/S = syringes[1]
-
if(!S)
return
- chambered.BB = new S.projectile_type (src)
-
+ chambered.BB = new S.projectile_type(src)
S.reagents.trans_to(chambered.BB, S.reagents.total_volume)
chambered.BB.name = S.name
+
syringes.Remove(S)
-
qdel(S)
- return
-/obj/item/gun/syringe/process_chamber()
- return
-
-/obj/item/gun/syringe/afterattack(atom/target as mob|obj|turf, mob/living/user as mob|obj, params)
+/obj/item/gun/syringe/afterattack(atom/target, mob/living/user, flag, params)
if(target == loc)
return
- newshot()
..()
/obj/item/gun/syringe/examine(mob/user)
. = ..()
- . += "Can hold [max_syringes] syringe\s. Has [syringes.len] syringe\s remaining."
+ var/num_syringes = syringes.len + (chambered.BB ? 1 : 0)
+ . += "Can hold [max_syringes] syringe\s. Has [num_syringes] syringe\s remaining."
-/obj/item/gun/syringe/attack_self(mob/living/user as mob)
- if(!syringes.len)
+/obj/item/gun/syringe/attack_self(mob/living/user)
+ if(!length(syringes) && !chambered.BB)
to_chat(user, "[src] is empty.")
- return 0
+ return FALSE
- var/obj/item/reagent_containers/syringe/S = syringes[syringes.len]
-
- if(!S)
- return 0
- S.loc = user.loc
+ var/obj/item/reagent_containers/syringe/S
+ if(chambered.BB) // Remove the chambered syringe first
+ S = new()
+ chambered.BB.reagents.trans_to(S, chambered.BB.reagents.total_volume)
+ qdel(chambered.BB)
+ chambered.BB = null
+ else
+ S = syringes[length(syringes)]
+ user.put_in_hands(S)
syringes.Remove(S)
+ process_chamber()
to_chat(user, "You unload [S] from \the [src]!")
+ return TRUE
- return 1
-
-/obj/item/gun/syringe/attackby(obj/item/A, mob/user, params, show_msg = 1)
+/obj/item/gun/syringe/attackby(obj/item/A, mob/user, params, show_msg = TRUE)
if(istype(A, /obj/item/reagent_containers/syringe))
- if(syringes.len < max_syringes)
+ if(length(syringes) < max_syringes)
if(!user.unEquip(A))
return
to_chat(user, "You load [A] into \the [src]!")
syringes.Add(A)
A.loc = src
- return 1
+ process_chamber() // Chamber the syringe if none is already
+ return TRUE
else
to_chat(user, "[src] cannot hold more syringes.")
else