diff --git a/code/_helpers/mobs.dm b/code/_helpers/mobs.dm
index e1215bb901..e97d30c6ad 100644
--- a/code/_helpers/mobs.dm
+++ b/code/_helpers/mobs.dm
@@ -213,6 +213,8 @@ Proc for attack log creation, because really why not
/proc/do_after(mob/user, delay, atom/target = null, needhand = 1, progress = 1, var/incapacitation_flags = INCAPACITATION_DEFAULT)
if(!user)
return 0
+ if(!delay)
+ return 1 //Okay. Done.
var/atom/target_loc = null
if(target)
target_loc = target.loc
diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm
index 35deb6935f..3a4c8a25e1 100644
--- a/code/modules/reagents/reagent_containers/syringes.dm
+++ b/code/modules/reagents/reagent_containers/syringes.dm
@@ -67,6 +67,7 @@
syringestab(target, user)
return
+ var/injtime = time // Calculated 'true' injection time (as added to by hardsuits and whatnot), 66% of this goes to warmup, then every 33% after injects 5u
switch(mode)
if(SYRINGE_DRAW)
if(!reagents.get_free_space())
@@ -169,9 +170,11 @@
to_chat(user, "You cannot inject a robotic limb.")
return
- if(ismob(target) && target != user)
+ var/cycle_time = injtime*0.33 //33% of the time slept between 5u doses
+ var/warmup_time = cycle_time //If the target is another mob, this gets overwritten
- var/injtime = time //Injecting through a hardsuit takes longer due to needing to find a port.
+ if(ismob(target) && target != user)
+ warmup_time = injtime*0.66 // Otherwise 66% of the time is warmup
if(istype(H))
if(H.wear_suit)
@@ -181,32 +184,39 @@
return
else if(isliving(target))
-
var/mob/living/M = target
if(!M.can_inject(user, 1))
return
if(injtime == time)
- user.visible_message("[user] is trying to inject [target] with [visible_name]!")
+ user.visible_message("[user] is trying to inject [target] with [visible_name]!","You begin injecting [target] with [visible_name].")
else
- user.visible_message("[user] begins hunting for an injection port on [target]'s suit!")
+ user.visible_message("[user] begins hunting for an injection port on [target]'s suit!","You begin hunting for an injection port on [target]'s suit!")
- user.setClickCooldown(DEFAULT_QUICK_COOLDOWN)
+ //The warmup
+ user.setClickCooldown(DEFAULT_QUICK_COOLDOWN)
+ if(!do_after(user,warmup_time,target))
+ return
- if(!do_mob(user, target, injtime))
- return
+ var/trans = 0
+ var/contained = reagentlist()
+ while(reagents.total_volume)
+ if(ismob(target))
+ trans += reagents.trans_to_mob(target, amount_per_transfer_from_this, CHEM_BLOOD)
+ else
+ trans += reagents.trans_to_obj(target, amount_per_transfer_from_this)
+ update_icon()
+ if(!reagents.total_volume || !do_after(user,cycle_time,target))
+ break
- user.visible_message("[user] injects [target] with the syringe!")
+ if (reagents.total_volume <= 0 && mode == SYRINGE_INJECT)
+ mode = SYRINGE_DRAW
+ update_icon()
- var/trans
- if(ismob(target))
- var/contained = reagentlist()
- trans = reagents.trans_to_mob(target, amount_per_transfer_from_this, CHEM_BLOOD)
- admin_inject_log(user, target, src, contained, trans)
- else
- trans = reagents.trans_to_obj(target, amount_per_transfer_from_this)
if(trans)
to_chat(user, "You inject [trans] units of the solution. The syringe now contains [src.reagents.total_volume] units.")
+ if(ismob(target))
+ admin_inject_log(user, target, src, contained, trans)
else
to_chat(user, "The syringe is empty.")
if (reagents.total_volume <= 0 && mode == SYRINGE_INJECT)
diff --git a/html/changelogs/Anewbe - Syringes.yml b/html/changelogs/Anewbe - Syringes.yml
new file mode 100644
index 0000000000..90fd9a0b17
--- /dev/null
+++ b/html/changelogs/Anewbe - Syringes.yml
@@ -0,0 +1,36 @@
+################################
+# Example Changelog File
+#
+# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
+#
+# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
+# When it is, any changes listed below will disappear.
+#
+# Valid Prefixes:
+# bugfix
+# wip (For works in progress)
+# tweak
+# soundadd
+# sounddel
+# rscadd (general adding of nice things)
+# rscdel (general deleting of nice things)
+# imageadd
+# imagedel
+# maptweak
+# spellcheck (typo fixes)
+# experiment
+#################################
+
+# Your name.
+author: Anewbe
+
+# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
+delete-after: True
+
+# Any changes you've made. See valid prefix list above.
+# INDENT WITH TWO SPACES. NOT TABS. SPACES.
+# SCREW THIS UP AND IT WON'T WORK.
+# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
+# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
+changes:
+ - tweak: "Syringes now inject their entire payload with one click, but in 5 unit increments. There is a delay in between each of these."