From 58b87f1a4be2ffdcf6fbd4cf7b6d694e9815d1a0 Mon Sep 17 00:00:00 2001 From: HarpyEagle Date: Wed, 1 Jun 2016 21:57:49 -0400 Subject: [PATCH] Adds do_surgery() behaviour for various items Heath scanners, autopsy scanners, syringes, hyposprays, droppers and bottles. --- code/game/objects/items/devices/scanners.dm | 13 ++++++++++--- code/game/objects/items/weapons/autopsy.dm | 14 +++++--------- .../modules/reagents/reagent_containers/dropper.dm | 11 +++++++++-- code/modules/reagents/reagent_containers/glass.dm | 11 +++++++++-- .../reagents/reagent_containers/hypospray.dm | 6 ++++++ .../reagents/reagent_containers/syringes.dm | 9 ++++++++- code/modules/surgery/other.dm | 1 + 7 files changed, 48 insertions(+), 17 deletions(-) diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index a4b159b734..8c9452ea49 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -24,8 +24,16 @@ REAGENT SCANNER origin_tech = list(TECH_MAGNET = 1, TECH_BIO = 1) var/mode = 1; +/obj/item/device/healthanalyzer/do_surgery(mob/living/M, mob/living/user) + if(user.a_intent != I_HELP) //in case it is ever used as a surgery tool + return ..() + scan_mob(M, user) //default surgery behaviour is just to scan as usual + return 1 -/obj/item/device/healthanalyzer/attack(mob/living/M as mob, mob/living/user as mob) +/obj/item/device/healthanalyzer/attack(mob/living/M, mob/living/user) + scan_mob(M, user) + +/obj/item/device/healthanalyzer/proc/scan_mob(mob/living/M, mob/living/user) if ((CLUMSY in user.mutations) && prob(50)) user << text("You try to analyze the floor's vitals!") for(var/mob/O in viewers(M, null)) @@ -168,8 +176,7 @@ REAGENT SCANNER else user.show_message("Blood Level Normal: [blood_percent]% [blood_volume]cl. Type: [blood_type]") user.show_message("Subject's pulse: [H.get_pulse(GETPULSE_TOOL)] bpm.") - src.add_fingerprint(user) - return + /obj/item/device/healthanalyzer/verb/toggle_mode() set name = "Switch Verbosity" diff --git a/code/game/objects/items/weapons/autopsy.dm b/code/game/objects/items/weapons/autopsy.dm index d196bc4ea7..61c6668c33 100644 --- a/code/game/objects/items/weapons/autopsy.dm +++ b/code/game/objects/items/weapons/autopsy.dm @@ -162,19 +162,16 @@ if(istype(usr,/mob/living/carbon)) usr.put_in_hands(src) -/obj/item/weapon/autopsy_scanner/attack(mob/living/carbon/human/M as mob, mob/living/carbon/user as mob) +/obj/item/weapon/autopsy_scanner/do_surgery(mob/living/carbon/human/M, mob/living/user) if(!istype(M)) - return - - if(!can_operate(M)) - return + return 0 if(target_name != M.name) target_name = M.name src.wdata = list() src.chemtraces = list() src.timeofdeath = null - user << "A new patient has been registered.. Purging data for previous patient." + user << "A new patient has been registered. Purging data for previous patient." src.timeofdeath = M.timeofdeath @@ -183,10 +180,9 @@ usr << "You can't scan this body part." return if(!S.open) - usr << "You have to cut the limb open first!" + usr << "You have to cut [S] open first!" return - for(var/mob/O in viewers(M)) - O.show_message("\The [user] scans the wounds on [M.name]'s [S.name] with \the [src]", 1) + M.visible_message("\The [user] scans the wounds on [M]'s [S.name] with [src]") src.add_data(S) diff --git a/code/modules/reagents/reagent_containers/dropper.dm b/code/modules/reagents/reagent_containers/dropper.dm index 36a8b40fef..ba671cdb50 100644 --- a/code/modules/reagents/reagent_containers/dropper.dm +++ b/code/modules/reagents/reagent_containers/dropper.dm @@ -12,8 +12,15 @@ slot_flags = SLOT_EARS volume = 5 -/obj/item/weapon/reagent_containers/dropper/afterattack(var/obj/target, var/mob/user, var/flag) - if(!target.reagents || !flag) return + +/obj/item/weapon/reagent_containers/dropper/do_surgery(mob/living/carbon/M, mob/living/user) + if(user.a_intent != I_HELP) //in case it is ever used as a surgery tool + return ..() + afterattack(M, user, 1) + return 1 + +/obj/item/weapon/reagent_containers/dropper/afterattack(var/obj/target, var/mob/user, var/proximity) + if(!target.reagents || !proximity) return if(reagents.total_volume) diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm index 4eb927444e..d131cdf9c9 100644 --- a/code/modules/reagents/reagent_containers/glass.dm +++ b/code/modules/reagents/reagent_containers/glass.dm @@ -69,8 +69,15 @@ flags |= OPENCONTAINER update_icon() -/obj/item/weapon/reagent_containers/glass/afterattack(var/obj/target, var/mob/user, var/flag) - if(!is_open_container() || !flag) +/obj/item/weapon/reagent_containers/glass/do_surgery(mob/living/carbon/M, mob/living/user) + if(user.a_intent != I_HELP) //in case it is ever used as a surgery tool + return ..() + afterattack(M, user, 1) + return 1 + +/obj/item/weapon/reagent_containers/glass/afterattack(var/obj/target, var/mob/user, var/proximity) + + if(!is_open_container() || !proximity) return for(var/type in can_be_placed_into) diff --git a/code/modules/reagents/reagent_containers/hypospray.dm b/code/modules/reagents/reagent_containers/hypospray.dm index 884afc5ed8..771ce4cc27 100644 --- a/code/modules/reagents/reagent_containers/hypospray.dm +++ b/code/modules/reagents/reagent_containers/hypospray.dm @@ -20,6 +20,12 @@ // reagents.add_reagent("tricordrazine", 30) // return +/obj/item/weapon/reagent_containers/hypospray/do_surgery(mob/living/carbon/M, mob/living/user) + if(user.a_intent != I_HELP) //in case it is ever used as a surgery tool + return ..() + attack(M, user) + return 1 + /obj/item/weapon/reagent_containers/hypospray/attack(mob/living/M as mob, mob/user as mob) if(!reagents.total_volume) user << "[src] is empty." diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm index 09ae98eb90..87b5311be2 100644 --- a/code/modules/reagents/reagent_containers/syringes.dm +++ b/code/modules/reagents/reagent_containers/syringes.dm @@ -52,6 +52,14 @@ /obj/item/weapon/reagent_containers/syringe/attackby(obj/item/I as obj, mob/user as mob) return +/obj/item/weapon/reagent_containers/syringe/do_surgery(mob/living/carbon/M, mob/living/user) + if(user.a_intent == I_HURT) + return 0 + if(user.a_intent != I_HELP) //in case it is ever used as a surgery tool + return ..() + afterattack(M, user, 1) + return 1 + /obj/item/weapon/reagent_containers/syringe/afterattack(obj/target, mob/user, proximity) if(!proximity || !target.reagents) return @@ -66,7 +74,6 @@ syringestab(target, user) return - switch(mode) if(SYRINGE_DRAW) diff --git a/code/modules/surgery/other.dm b/code/modules/surgery/other.dm index 82c6ad543c..d0ba959111 100644 --- a/code/modules/surgery/other.dm +++ b/code/modules/surgery/other.dm @@ -149,6 +149,7 @@ if(container.reagents.has_reagent("peridaxon")) affected.status &= ~ORGAN_DEAD + affected.owner.update_body(1) user.visible_message("\blue [user] applies [trans] units of the solution to affected tissue in [target]'s [affected.name]", \ "\blue You apply [trans] units of the solution to affected tissue in [target]'s [affected.name] with \the [tool].")