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."