diff --git a/code/game/gamemodes/steal_items.dm b/code/game/gamemodes/steal_items.dm index 44e722abfca..d3f29734815 100644 --- a/code/game/gamemodes/steal_items.dm +++ b/code/game/gamemodes/steal_items.dm @@ -118,7 +118,7 @@ datum/theft_objective/ai/check_special_completion(var/obj/item/aicard/C) typepath = /obj/item/documents //Any set of secret documents. Doesn't have to be NT's /datum/theft_objective/hypospray - name = "a hypospray" + name = "the Chief Medical Officer's hypospray" typepath = /obj/item/reagent_containers/hypospray/CMO protected_jobs = list("Chief Medical Officer") diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index 7fe19960100..42eeafd338c 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -1027,7 +1027,7 @@ req_access_txt = "5" products = list(/obj/item/reagent_containers/glass/bottle/charcoal = 4,/obj/item/reagent_containers/glass/bottle/morphine = 4,/obj/item/reagent_containers/glass/bottle/ether = 4,/obj/item/reagent_containers/glass/bottle/epinephrine = 4, /obj/item/reagent_containers/glass/bottle/toxin = 4,/obj/item/reagent_containers/syringe/antiviral = 6,/obj/item/reagent_containers/syringe/insulin = 4, - /obj/item/reagent_containers/syringe = 12,/obj/item/healthanalyzer = 5,/obj/item/healthupgrade = 5,/obj/item/reagent_containers/glass/beaker = 4, + /obj/item/reagent_containers/syringe = 12,/obj/item/healthanalyzer = 5,/obj/item/healthupgrade = 5,/obj/item/reagent_containers/glass/beaker = 4, /obj/item/reagent_containers/hypospray/safety = 2, /obj/item/reagent_containers/dropper = 2,/obj/item/stack/medical/bruise_pack/advanced = 3, /obj/item/stack/medical/ointment/advanced = 3, /obj/item/stack/medical/bruise_pack = 3,/obj/item/stack/medical/splint = 4, /obj/item/sensor_device = 2, /obj/item/reagent_containers/hypospray/autoinjector = 4, /obj/item/pinpointer/crew = 2) diff --git a/code/modules/reagents/reagent_containers/hypospray.dm b/code/modules/reagents/reagent_containers/hypospray.dm index feee1bab8b4..771d627b421 100644 --- a/code/modules/reagents/reagent_containers/hypospray.dm +++ b/code/modules/reagents/reagent_containers/hypospray.dm @@ -13,7 +13,9 @@ possible_transfer_amounts = list(1,2,3,4,5,10,15,20,25,30) flags = OPENCONTAINER slot_flags = SLOT_BELT - var/ignore_flags = 0 + var/ignore_flags = FALSE + var/emagged = FALSE + var/safety_hypo = FALSE /obj/item/reagent_containers/hypospray/attack(mob/living/M, mob/user) if(!reagents.total_volume) @@ -31,8 +33,13 @@ for(var/datum/reagent/R in reagents.reagent_list) injected += R.name + var/primary_reagent_name = reagents.get_master_reagent_name() var/trans = reagents.trans_to(M, amount_per_transfer_from_this) + if(safety_hypo) + visible_message("[user] injects [M] with [trans] units of [primary_reagent_name].") + playsound(loc, 'sound/goonstation/items/hypo.ogg', 80, 0) + to_chat(user, "[trans] unit\s injected. [reagents.total_volume] unit\s remaining in [src].") var/contained = english_list(injected) @@ -41,6 +48,31 @@ return TRUE +/obj/item/reagent_containers/hypospray/on_reagent_change() + if(safety_hypo && !emagged) + var/found_forbidden_reagent = FALSE + for(var/datum/reagent/R in reagents.reagent_list) + if(!safe_chem_list.Find(R.id)) + reagents.del_reagent(R.id) + found_forbidden_reagent = TRUE + if(found_forbidden_reagent) + if(ismob(loc)) + to_chat(loc, "[src] identifies and removes a harmful substance.") + else + visible_message("[src] identifies and removes a harmful substance.") + +/obj/item/reagent_containers/hypospray/emag_act(mob/user) + if(safety_hypo && !emagged) + emagged = TRUE + ignore_flags = TRUE + to_chat(user, "You short out the safeties on [src].") + +/obj/item/reagent_containers/hypospray/safety + name = "medical hypospray" + desc = "A modified hypospray for quickly injecting safe medicinal chemicals." + icon_state = "combat_hypo" + safety_hypo = TRUE + /obj/item/reagent_containers/hypospray/CMO list_reagents = list("omnizine" = 30) diff --git a/code/modules/research/designs/autolathe_designs.dm b/code/modules/research/designs/autolathe_designs.dm index 5cb51863851..bba85a5ff00 100644 --- a/code/modules/research/designs/autolathe_designs.dm +++ b/code/modules/research/designs/autolathe_designs.dm @@ -591,6 +591,14 @@ build_path = /obj/item/reagent_containers/syringe category = list("initial", "Medical") +/datum/design/safety_hypo + name = "Medical Hypospray" + id = "safetyhypo" + build_type = AUTOLATHE + materials = list(MAT_METAL = 500, MAT_GLASS = 500) + build_path = /obj/item/reagent_containers/hypospray/safety + category = list("initial", "Medical") + /datum/design/prox_sensor name = "Proximity Sensor" id = "prox_sensor" diff --git a/sound/goonstation/items/hypo.ogg b/sound/goonstation/items/hypo.ogg new file mode 100644 index 00000000000..8525a1b43c7 Binary files /dev/null and b/sound/goonstation/items/hypo.ogg differ