From b43845d267fc52b7e0c66a93a08534161df685ce Mon Sep 17 00:00:00 2001
From: SkyratBot <59378654+SkyratBot@users.noreply.github.com>
Date: Sat, 13 Feb 2021 11:13:50 +0100
Subject: [PATCH] [MIRROR] Syringe toggle has been replaced with left-click to
inject, right-click to draw. You can also now change transfer amount. (#3345)
* Syringe toggle has been replaced with left-click to inject, right-click to draw. You can also now change transfer amount. (#56865)
* Syringe toggle has been replaced with left-click to inject, right-click to draw. You can also now change transfer amount.
Co-authored-by: Mothblocks <35135081+Jared-Fogle@users.noreply.github.com>
---
code/__DEFINES/misc.dm | 3 -
code/modules/hydroponics/hydroponics.dm | 14 +-
code/modules/reagents/reagent_containers.dm | 5 +
.../reagents/reagent_containers/syringes.dm | 208 ++++++++----------
code/modules/unit_tests/metabolizing.dm | 10 +-
code/modules/unit_tests/reagent_mod_expose.dm | 3 +-
icons/obj/syringe.dmi | Bin 9073 -> 9004 bytes
7 files changed, 100 insertions(+), 143 deletions(-)
diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm
index 9404b57df8f..f8ed791c3f4 100644
--- a/code/__DEFINES/misc.dm
+++ b/code/__DEFINES/misc.dm
@@ -410,9 +410,6 @@ GLOBAL_LIST_INIT(pda_styles, sortList(list(MONO, VT, ORBITRON, SHARE)))
#define MAX_PROC_DEPTH 195 // 200 proc calls deep and shit breaks, this is a bit lower to give some safety room
-#define SYRINGE_DRAW 0
-#define SYRINGE_INJECT 1
-
//gold slime core spawning
#define NO_SPAWN 0
#define HOSTILE_SPAWN 1
diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm
index 08714ae174a..be938ea3a18 100644
--- a/code/modules/hydroponics/hydroponics.dm
+++ b/code/modules/hydroponics/hydroponics.dm
@@ -520,12 +520,6 @@
if(IS_EDIBLE(O) || istype(O, /obj/item/reagent_containers)) // Syringe stuff (and other reagent containers now too)
var/obj/item/reagent_containers/reagent_source = O
- if(istype(reagent_source, /obj/item/reagent_containers/syringe))
- var/obj/item/reagent_containers/syringe/syr = reagent_source
- if(syr.mode != 1)
- to_chat(user, "You can't get any extract out of this plant." )
- return
-
if(!reagent_source.reagents.total_volume)
to_chat(user, "[reagent_source] is empty!")
return 1
@@ -548,8 +542,6 @@
if(istype(reagent_source, /obj/item/reagent_containers/syringe/))
var/obj/item/reagent_containers/syringe/syr = reagent_source
visi_msg="[user] injects [target] with [syr]"
- if(syr.reagents.total_volume <= syr.amount_per_transfer_from_this)
- syr.mode = 0
// Beakers, bottles, buckets, etc.
if(reagent_source.is_drainable())
playsound(loc, 'sound/effects/slosh.ogg', 25, TRUE)
@@ -741,6 +733,12 @@
else
return ..()
+/obj/machinery/hydroponics/attackby_secondary(obj/item/weapon, mob/user, params)
+ if (istype(weapon, /obj/item/reagent_containers/syringe))
+ to_chat(user, "You can't get any extract out of this plant.")
+ return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN
+ return SECONDARY_ATTACK_CALL_NORMAL
+
/obj/machinery/hydroponics/can_be_unfasten_wrench(mob/user, silent)
if (!unwrenchable) // case also covered by NODECONSTRUCT checks in default_unfasten_wrench
return CANT_UNFASTEN
diff --git a/code/modules/reagents/reagent_containers.dm b/code/modules/reagents/reagent_containers.dm
index 6ccfb9729c8..36c4982b97c 100644
--- a/code/modules/reagents/reagent_containers.dm
+++ b/code/modules/reagents/reagent_containers.dm
@@ -35,6 +35,11 @@
/obj/item/reagent_containers/Destroy()
return ..()
+/obj/item/reagent_containers/attack(mob/living/M, mob/living/user, params)
+ if (!user.combat_mode)
+ return
+ return ..()
+
/obj/item/reagent_containers/proc/on_reagents_del(datum/reagents/reagents)
SIGNAL_HANDLER
UnregisterSignal(reagents, list(COMSIG_REAGENTS_NEW_REAGENT, COMSIG_REAGENTS_ADD_REAGENT, COMSIG_REAGENTS_DEL_REAGENT, COMSIG_REAGENTS_REM_REAGENT, COMSIG_PARENT_QDELETING))
diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm
index a13f550ac3e..417d42a605a 100644
--- a/code/modules/reagents/reagent_containers/syringes.dm
+++ b/code/modules/reagents/reagent_containers/syringes.dm
@@ -8,9 +8,8 @@
icon_state = "0"
worn_icon_state = "pen"
amount_per_transfer_from_this = 5
- possible_transfer_amounts = list()
+ possible_transfer_amounts = list(5, 10, 15)
volume = 15
- var/mode = SYRINGE_DRAW
var/busy = FALSE // needed for delayed drawing of blood
var/proj_piercing = 0 //does it pierce through thick clothes when shot with syringe gun
custom_materials = list(/datum/material/iron=10, /datum/material/glass=20)
@@ -18,138 +17,109 @@
custom_price = PAYCHECK_EASY * 0.5
sharpness = SHARP_POINTY
-/obj/item/reagent_containers/syringe/Initialize()
- . = ..()
- if(list_reagents) //syringe starts in inject mode if its already got something inside
- mode = SYRINGE_INJECT
- update_icon()
-
-/obj/item/reagent_containers/syringe/ComponentInitialize()
- . = ..()
- AddElement(/datum/element/update_icon_updates_onmob)
-
-/obj/item/reagent_containers/syringe/pickup(mob/user)
- ..()
- update_icon()
-
-/obj/item/reagent_containers/syringe/dropped(mob/user)
- ..()
- update_icon()
-
-/obj/item/reagent_containers/syringe/attack_self(mob/user)
- mode = !mode
- update_icon()
-
-//ATTACK HAND IGNORING PARENT RETURN VALUE
-/obj/item/reagent_containers/syringe/attack_hand()
- . = ..()
- update_icon()
-
-/obj/item/reagent_containers/syringe/attack_paw(mob/user)
- return attack_hand(user)
-
/obj/item/reagent_containers/syringe/attackby(obj/item/I, mob/user, params)
return
-/obj/item/reagent_containers/syringe/afterattack(atom/target, mob/user , proximity)
- . = ..()
+/obj/item/reagent_containers/syringe/proc/try_syringe(atom/target, mob/user, proximity)
if(busy)
- return
+ return FALSE
if(!proximity)
- return
+ return FALSE
if(!target.reagents)
- return
+ return FALSE
- var/mob/living/L
if(isliving(target))
- L = target
- if(!L.try_inject(user, injection_flags = INJECT_TRY_SHOW_ERROR_MESSAGE))
- return
+ var/mob/living/living_target = target
+ if(!living_target.try_inject(user, injection_flags = INJECT_TRY_SHOW_ERROR_MESSAGE))
+ return FALSE
// chance of monkey retaliation
SEND_SIGNAL(target, COMSIG_LIVING_TRY_SYRINGE, user)
+ return TRUE
- switch(mode)
- if(SYRINGE_DRAW)
+/obj/item/reagent_containers/syringe/afterattack(atom/target, mob/user, proximity)
+ . = ..()
- if(reagents.total_volume >= reagents.maximum_volume)
- to_chat(user, "The syringe is full.")
+ if (!try_syringe(target, user, proximity))
+ return
+
+ var/contained = reagents.log_list()
+ log_combat(user, target, "attempted to inject", src, addition="which had [contained]")
+
+ if(!reagents.total_volume)
+ to_chat(user, "[src] is empty! Right-click to draw.")
+ return
+
+ if(!isliving(target) && !target.is_injectable(user))
+ to_chat(user, "You cannot directly fill [target]!")
+ return
+
+ if(target.reagents.total_volume >= target.reagents.maximum_volume)
+ to_chat(user, "[target] is full.")
+ return
+
+ if(isliving(target))
+ var/mob/living/living_target = target
+ if(!living_target.try_inject(user, injection_flags = INJECT_TRY_SHOW_ERROR_MESSAGE))
+ return
+ if(living_target != user)
+ living_target.visible_message("[user] is trying to inject [living_target]!", \
+ "[user] is trying to inject you!")
+ if(!do_mob(user, living_target, 3 SECONDS, extra_checks = CALLBACK(living_target, /mob/living/proc/try_inject, user, null, INJECT_TRY_SHOW_ERROR_MESSAGE)))
return
-
- if(L) //living mob
- var/drawn_amount = reagents.maximum_volume - reagents.total_volume
- if(target != user)
- target.visible_message("[user] is trying to take a blood sample from [target]!", \
- "[user] is trying to take a blood sample from you!")
- busy = TRUE
- if(!do_mob(user, target, extra_checks=CALLBACK(L, /mob/living/proc/try_inject, user, null, INJECT_TRY_SHOW_ERROR_MESSAGE)))
- busy = FALSE
- return
- if(reagents.total_volume >= reagents.maximum_volume)
- return
- busy = FALSE
- if(L.transfer_blood_to(src, drawn_amount))
- user.visible_message("[user] takes a blood sample from [L].")
- else
- to_chat(user, "You are unable to draw any blood from [L]!")
-
- else //if not mob
- if(!target.reagents.total_volume)
- to_chat(user, "[target] is empty!")
- return
-
- if(!target.is_drawable(user))
- to_chat(user, "You cannot directly remove reagents from [target]!")
- return
-
- var/trans = target.reagents.trans_to(src, amount_per_transfer_from_this, transfered_by = user) // transfer from, transfer to - who cares?
-
- to_chat(user, "You fill [src] with [trans] units of the solution. It now contains [reagents.total_volume] units.")
- if (reagents.total_volume >= reagents.maximum_volume)
- mode=!mode
- update_icon()
-
- if(SYRINGE_INJECT)
- // Always log attemped injections for admins
- var/contained = reagents.log_list()
- log_combat(user, target, "attempted to inject", src, addition="which had [contained]")
-
if(!reagents.total_volume)
- to_chat(user, "[src] is empty!")
return
-
- if(!L && !target.is_injectable(user)) //only checks on non-living mobs, due to how can_inject() handles
- to_chat(user, "You cannot directly fill [target]!")
+ if(living_target.reagents.total_volume >= living_target.reagents.maximum_volume)
return
+ living_target.visible_message("[user] injects [living_target] with the syringe!", \
+ "[user] injects you with the syringe!")
- if(target.reagents.total_volume >= target.reagents.maximum_volume)
- to_chat(user, "[target] is full.")
- return
+ if (living_target == user)
+ living_target.log_message("injected themselves ([contained]) with [name]", LOG_ATTACK, color="orange")
+ else
+ log_combat(user, living_target, "injected", src, addition="which had [contained]")
+ reagents.trans_to(target, amount_per_transfer_from_this, transfered_by = user, methods = INJECT)
+ to_chat(user, "You inject [amount_per_transfer_from_this] units of the solution. The syringe now contains [reagents.total_volume] units.")
- if(L) //living mob
- if(!L.try_inject(user, injection_flags = INJECT_TRY_SHOW_ERROR_MESSAGE))
- return
- if(L != user)
- L.visible_message("[user] is trying to inject [L]!", \
- "[user] is trying to inject you!")
- if(!do_mob(user, L, extra_checks=CALLBACK(L, /mob/living/proc/try_inject, user, null, INJECT_TRY_SHOW_ERROR_MESSAGE)))
- return
- if(!reagents.total_volume)
- return
- if(L.reagents.total_volume >= L.reagents.maximum_volume)
- return
- L.visible_message("[user] injects [L] with the syringe!", \
- "[user] injects you with the syringe!")
+/obj/item/reagent_containers/syringe/afterattack_secondary(atom/target, mob/user, proximity_flag, click_parameters)
+ if (!try_syringe(target, user, proximity_flag))
+ return SECONDARY_ATTACK_CONTINUE_CHAIN
- if(L != user)
- log_combat(user, L, "injected", src, addition="which had [contained]")
- else
- L.log_message("injected themselves ([contained]) with [src.name]", LOG_ATTACK, color="orange")
- reagents.trans_to(target, amount_per_transfer_from_this, transfered_by = user, methods = INJECT)
- to_chat(user, "You inject [amount_per_transfer_from_this] units of the solution. The syringe now contains [reagents.total_volume] units.")
- if (reagents.total_volume <= 0 && mode==SYRINGE_INJECT)
- mode = SYRINGE_DRAW
- update_icon()
+ if(reagents.total_volume >= reagents.maximum_volume)
+ to_chat(user, "[src] is full.")
+ return SECONDARY_ATTACK_CONTINUE_CHAIN
+
+ if(isliving(target))
+ var/mob/living/living_target = target
+ var/drawn_amount = reagents.maximum_volume - reagents.total_volume
+ if(target != user)
+ target.visible_message("[user] is trying to take a blood sample from [target]!", \
+ "[user] is trying to take a blood sample from you!")
+ busy = TRUE
+ if(!do_mob(user, target, 3 SECONDS, extra_checks = CALLBACK(living_target, /mob/living/proc/try_inject, user, null, INJECT_TRY_SHOW_ERROR_MESSAGE)))
+ busy = FALSE
+ return SECONDARY_ATTACK_CONTINUE_CHAIN
+ if(reagents.total_volume >= reagents.maximum_volume)
+ return SECONDARY_ATTACK_CONTINUE_CHAIN
+ busy = FALSE
+ if(living_target.transfer_blood_to(src, drawn_amount))
+ user.visible_message("[user] takes a blood sample from [living_target].")
+ else
+ to_chat(user, "You are unable to draw any blood from [living_target]!")
+ else
+ if(!target.reagents.total_volume)
+ to_chat(user, "[target] is empty!")
+ return SECONDARY_ATTACK_CONTINUE_CHAIN
+
+ if(!target.is_drawable(user))
+ to_chat(user, "You cannot directly remove reagents from [target]!")
+ return SECONDARY_ATTACK_CONTINUE_CHAIN
+
+ var/trans = target.reagents.trans_to(src, amount_per_transfer_from_this, transfered_by = user) // transfer from, transfer to - who cares?
+
+ to_chat(user, "You fill [src] with [trans] units of the solution. It now contains [reagents.total_volume] units.")
+
+ return SECONDARY_ATTACK_CONTINUE_CHAIN
/*
* On accidental consumption, inject the eater with 2/3rd of the syringe and reveal it
@@ -177,14 +147,6 @@
var/mutable_appearance/filling_overlay = mutable_appearance('icons/obj/reagentfillings.dmi', "syringe[rounded_vol]")
filling_overlay.color = mix_color_from_reagents(reagents.reagent_list)
. += filling_overlay
- if(ismob(loc))
- var/injoverlay
- switch(mode)
- if (SYRINGE_DRAW)
- injoverlay = "draw"
- if (SYRINGE_INJECT)
- injoverlay = "inject"
- . += injoverlay
///Used by update_icon() and update_overlays()
/obj/item/reagent_containers/syringe/proc/get_rounded_vol()
@@ -258,12 +220,14 @@
name = "bluespace syringe"
desc = "An advanced syringe that can hold 60 units of chemicals."
amount_per_transfer_from_this = 20
+ possible_transfer_amounts = list(10, 20, 30, 40, 50, 60)
volume = 60
/obj/item/reagent_containers/syringe/piercing
name = "piercing syringe"
desc = "A diamond-tipped syringe that pierces armor when launched at high velocity. It can hold up to 10 units."
volume = 10
+ possible_transfer_amounts = list(5, 10)
proj_piercing = 1
/obj/item/reagent_containers/syringe/spider_extract
diff --git a/code/modules/unit_tests/metabolizing.dm b/code/modules/unit_tests/metabolizing.dm
index f7b689574c6..36c12693426 100644
--- a/code/modules/unit_tests/metabolizing.dm
+++ b/code/modules/unit_tests/metabolizing.dm
@@ -72,10 +72,7 @@
syringe.volume = meth.addiction_threshold
syringe.amount_per_transfer_from_this = meth.addiction_threshold
syringe.reagents.add_reagent(meth.type, meth.addiction_threshold)
-
- syringe.mode = SYRINGE_INJECT
- syringe_user.set_combat_mode(TRUE)
- syringe.afterattack(syringe_user, syringe_user, TRUE)
+ syringe.melee_attack_chain(syringe_user, syringe_user)
syringe_user.Life()
@@ -90,10 +87,7 @@
// One half pill
pill_two.reagents.add_reagent(meth.type, (meth.addiction_threshold * 0.5) + 1)
pill_two.attack(pill_syringe_user, pill_syringe_user)
-
- pill_syringe_user.set_combat_mode(TRUE)
- syringe.mode = SYRINGE_INJECT
- syringe.afterattack(pill_syringe_user, pill_syringe_user, TRUE)
+ syringe.melee_attack_chain(pill_syringe_user, pill_syringe_user)
// Set the metabolism efficiency to 1.0 so it transfers all reagents to the body in one go.
pill_belly = pill_syringe_user.getorganslot(ORGAN_SLOT_STOMACH)
diff --git a/code/modules/unit_tests/reagent_mod_expose.dm b/code/modules/unit_tests/reagent_mod_expose.dm
index 3fe02e044d4..d893fef405f 100644
--- a/code/modules/unit_tests/reagent_mod_expose.dm
+++ b/code/modules/unit_tests/reagent_mod_expose.dm
@@ -50,8 +50,7 @@
// INJECT
syringe.reagents.add_reagent(/datum/reagent/method_patch_test, 1)
- syringe.mode = SYRINGE_INJECT
- syringe.afterattack(human, human, TRUE)
+ syringe.melee_attack_chain(human, human)
TEST_ASSERT_EQUAL(human.health, 80, "Human health did not update after injection from syringe")
/datum/unit_test/reagent_mob_expose/Destroy()
diff --git a/icons/obj/syringe.dmi b/icons/obj/syringe.dmi
index df2e20cf5f18d5814ee9bfee3e74074e5717ccec..2981293d1a8377949e0c007acfba836b92f79b7f 100644
GIT binary patch
literal 9004
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