diff --git a/code/game/machinery/kitchen/smartfridge.dm b/code/game/machinery/kitchen/smartfridge.dm index 397ee26b20a..523f52bdff2 100644 --- a/code/game/machinery/kitchen/smartfridge.dm +++ b/code/game/machinery/kitchen/smartfridge.dm @@ -43,6 +43,8 @@ /obj/machinery/smartfridge/extract/accept_check(var/obj/item/O as obj) if(istype(O,/obj/item/slime_extract)) return 1 + if(istype(O,/obj/item/device/slime_scanner)) + return 1 return 0 /obj/machinery/smartfridge/medbay diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index 9707a2b2383..d5dc9a0e838 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -891,7 +891,7 @@ products = list(/obj/item/weapon/reagent_containers/glass/bottle/antitoxin = 4,/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline = 4, /obj/item/weapon/reagent_containers/glass/bottle/stoxin = 4,/obj/item/weapon/reagent_containers/glass/bottle/toxin = 4, /obj/item/weapon/reagent_containers/syringe/antiviral = 4,/obj/item/weapon/reagent_containers/syringe = 12, - /obj/item/device/healthanalyzer = 5,/obj/item/weapon/reagent_containers/glass/beaker = 4, /obj/item/weapon/reagent_containers/dropper = 2, + /obj/item/device/healthanalyzer = 5,/obj/item/device/healthupgrade = 5,/obj/item/weapon/reagent_containers/glass/beaker = 4, /obj/item/weapon/reagent_containers/dropper = 2, /obj/item/stack/medical/advanced/bruise_pack = 3, /obj/item/stack/medical/advanced/ointment = 3, /obj/item/stack/medical/splint = 2, /obj/item/device/sensor_device = 2) contraband = list(/obj/item/weapon/reagent_containers/pill/tox = 3,/obj/item/weapon/reagent_containers/pill/stox = 4,/obj/item/weapon/reagent_containers/pill/antitox = 6) diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index 92cfb499ad0..ada6dcfce83 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -106,6 +106,7 @@ REAGENT SCANNER throw_range = 10 m_amt = 200 origin_tech = "magnets=1;biotech=1" + var/upgraded = 0 var/mode = 1; @@ -171,21 +172,11 @@ REAGENT SCANNER OX = fake_oxy > 50 ? "\red Severe oxygen deprivation detected\blue" : "Subject bloodstream oxygen level normal" user.show_message("[OX] | [TX] | [BU] | [BR]") if (istype(M, /mob/living/carbon)) - if(M:reagents.total_volume > 0) - var/unknown = 0 - var/reagentdata[0] + if(M:reagents.total_volume > 0 && upgraded) + user.show_message("\blue Reagents detected in subject's blood:") for(var/A in M.reagents.reagent_list) var/datum/reagent/R = A - if(R.scannable) - reagentdata["[R.id]"] = "\t \blue [round(M.reagents.get_reagent_amount(R.id), 1)]u [R.name]" - else - unknown++ - if(reagentdata.len) - user.show_message("\blue Beneficial reagents detected in subject's blood:") - for(var/d in reagentdata) - user.show_message(reagentdata[d]) - if(unknown) - user.show_message(text("\red Warning: Unknown substance[(unknown>1)?"s":""] detected in subject's blood.")) + user.show_message("\t \blue [M.reagents.get_reagent_amount(R.id)]u [R.name]") if(M:virus2.len) var/mob/living/carbon/C = M for (var/ID in C.virus2) @@ -252,6 +243,30 @@ REAGENT SCANNER if(0) usr << "The scanner no longer shows limb damage." +/obj/item/device/healthanalyzer/attackby(obj/item/W, mob/user, params) + if(istype(W, /obj/item/device/healthupgrade)) + if(upgraded) + user << "You have already installed an upgraded in the [src]." + else + user << "You install the upgrade in the [src]." + overlays += "advanced" + playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) + upgraded = 1 + qdel(W) + +/obj/item/device/healthanalyzer/advanced + upgraded = 1 + +/obj/item/device/healthanalyzer/advanced/New() + overlays += "advanced" + + +/obj/item/device/healthupgrade + name = "Health Analyzer Upgrade" + icon_state = "healthupgrade" + desc = "An upgrade unit that can be installed on a health analyzer for expanded functionality." + w_class = 1.0 + origin_tech = "magnets=2;biotech=2" /obj/item/device/analyzer desc = "A hand-held environmental scanner which reports current gas levels." @@ -464,35 +479,37 @@ REAGENT SCANNER throwforce = 0 throw_speed = 3 throw_range = 7 -// matter = list("metal" = 30,"glass" = 20) + m_amt = 30 + g_amt = 20 /obj/item/device/slime_scanner/attack(mob/living/M as mob, mob/living/user as mob) if (!isslime(M)) - user << "This device can only scan slimes!" + user.show_message("This device can only scan slimes!", 1) return var/mob/living/carbon/slime/T = M - user.show_message("Slime scan results:") - user.show_message(text("[T.colour] [] slime", T.is_adult ? "adult" : "baby")) - user.show_message(text("Nutrition: [T.nutrition]/[]", T.get_max_nutrition())) + user.show_message("Slime scan results:", 1) + user.show_message(text("[T.colour] [] slime", T.is_adult ? "adult" : "baby"), 1) + user.show_message(text("Nutrition: [T.nutrition]/[]", T.get_max_nutrition()), 1) if (T.nutrition < T.get_starve_nutrition()) - user.show_message("Warning: slime is starving!") + user.show_message("Warning: slime is starving!", 1) else if (T.nutrition < T.get_hunger_nutrition()) - user.show_message("Warning: slime is hungry") - user.show_message("Electric change strength: [T.powerlevel]") - user.show_message("Health: [T.health]") + user.show_message("Warning: slime is hungry", 1) + user.show_message("Electric change strength: [T.powerlevel]", 1) + user.show_message("Health: [T.health]", 1) if (T.slime_mutation[4] == T.colour) - user.show_message("This slime does not evolve any further") + user.show_message("This slime does not evolve any further.", 1) else if (T.slime_mutation[3] == T.slime_mutation[4]) if (T.slime_mutation[2] == T.slime_mutation[1]) - user.show_message(text("Possible mutation: []", T.slime_mutation[3])) - user.show_message("Genetic destability: [T.mutation_chance/2]% chance of mutation on splitting") + user.show_message("Possible mutation: [T.slime_mutation[3]]", 1) + user.show_message("Genetic destability: [T.mutation_chance/2]% chance of mutation on splitting", 1) else - user.show_message(text("Possible mutations: [], [], [] (x2)", T.slime_mutation[1], T.slime_mutation[2], T.slime_mutation[3])) - user.show_message("Genetic destability: [T.mutation_chance]% chance of mutation on splitting") + user.show_message("Possible mutations: [T.slime_mutation[1]], [T.slime_mutation[2]], [T.slime_mutation[3]] (x2)", 1) + user.show_message("Genetic destability: [T.mutation_chance]% chance of mutation on splitting", 1) else - user.show_message(text("Possible mutations: [], [], [], []", T.slime_mutation[1], T.slime_mutation[2], T.slime_mutation[3], T.slime_mutation[4])) - user.show_message("Genetic destability: [T.mutation_chance]% chance of mutation on splitting") + user.show_message("Possible mutations: [T.slime_mutation[1]], [T.slime_mutation[2]], [T.slime_mutation[3]], [T.slime_mutation[4]]", 1) + user.show_message("Genetic destability: [T.mutation_chance]% chance of mutation on splitting", 1) if (T.cores > 1) - user.show_message("Anomalious slime core amount detected") - user.show_message("Growth progress: [T.amount_grown]/10") + user.show_message("Anomalious slime core amount detected", 1) + user.show_message("Growth progress: [T.amount_grown]/10", 1) + diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm index 141da47284a..143f8170572 100644 --- a/code/modules/reagents/Chemistry-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents.dm @@ -23,7 +23,6 @@ datum var/nutriment_factor = 0 var/custom_metabolism = REAGENTS_METABOLISM var/overdose = 0 - var/scannable = 0 //shows up on health analyzers //var/list/viruses = list() var/color = "#000000" // rgb: 0, 0, 0 (does not support alpha channels - yet!) @@ -325,7 +324,6 @@ datum description = "Dylovene is a broad-spectrum antitoxin." reagent_state = LIQUID color = "#C8A5DC" // rgb: 200, 165, 220 - scannable = 1 on_mob_life(var/mob/living/M as mob, var/alien) if(!M) M = holder.my_atom @@ -504,7 +502,6 @@ datum description = "Inaprovaline is a synaptic stimulant and cardiostimulant. Commonly used to stabilize patients." reagent_state = LIQUID color = "#C8A5DC" // rgb: 200, 165, 220 - scannable = 1 on_mob_life(var/mob/living/M as mob, var/alien) if(!M) M = holder.my_atom @@ -1011,7 +1008,6 @@ datum description = "Ryetalyn can cure all genetic abnomalities." reagent_state = SOLID color = "#C8A5DC" // rgb: 200, 165, 220 - scannable = 1 on_mob_life(var/mob/living/M as mob) if(!M) M = holder.my_atom @@ -1062,7 +1058,6 @@ datum description = "Most probably know this as Tylenol, but this chemical is a mild, simple painkiller." reagent_state = LIQUID color = "#C855DC" - scannable = 1 custom_metabolism = 0.2 // Lasts 2.5 minutes for 15 units on_mob_life(var/mob/living/M as mob) @@ -1103,7 +1098,6 @@ datum description = "A simple, yet effective painkiller." reagent_state = LIQUID color = "#C8A5DC" - scannable = 1 custom_metabolism = 0.2 // Lasts 2.5 minutes for 15 units on_mob_life(var/mob/living/M as mob) @@ -1119,7 +1113,6 @@ datum reagent_state = LIQUID color = "#C805DC" custom_metabolism = 0.3 // Lasts 1.5 minutes for 15 units - scannable = 1 on_mob_life(var/mob/living/M as mob) if(!M) M = holder.my_atom @@ -1461,7 +1454,6 @@ datum description = "Leporazine can be use to stabilize an individuals body temperature." reagent_state = LIQUID color = "#E9D66B" // rgb: 233, 214, 107 - scannable = 1 on_mob_life(var/mob/living/M as mob) if(!M) M = holder.my_atom @@ -1512,7 +1504,6 @@ datum description = "Kelotane is a drug used to treat burns." reagent_state = LIQUID color = "#ECD540" // rgb: 236, 213, 64 - scannable = 1 on_mob_life(var/mob/living/M as mob) if(M.stat == 2.0) @@ -1529,7 +1520,6 @@ datum description = "Dermaline is the next step in burn medication. Works twice as good as kelotane and enables the body to restore even the direst heat-damaged tissue." reagent_state = LIQUID color = "#C8A5DC" // rgb: 200, 165, 220 - scannable = 1 on_mob_life(var/mob/living/M as mob, var/alien) if(M.stat == 2.0) //THE GUY IS **DEAD**! BEREFT OF ALL LIFE HE RESTS IN PEACE etc etc. He does NOT metabolise shit anymore, god DAMN @@ -1546,7 +1536,6 @@ datum description = "Dexalin is used in the treatment of oxygen deprivation." reagent_state = LIQUID color = "#C8A5DC" // rgb: 200, 165, 220 - scannable = 1 on_mob_life(var/mob/living/M as mob, var/alien) if(M.stat == 2.0) @@ -1569,7 +1558,6 @@ datum description = "Dexalin Plus is used in the treatment of oxygen deprivation. Its highly effective." reagent_state = LIQUID color = "#C8A5DC" // rgb: 200, 165, 220 - scannable = 1 on_mob_life(var/mob/living/M as mob, var/alien) if(M.stat == 2.0) @@ -1592,7 +1580,6 @@ datum description = "Tricordrazine is a highly potent stimulant, originally derived from cordrazine. Can be used to treat a wide range of injuries." reagent_state = LIQUID color = "#C8A5DC" // rgb: 200, 165, 220 - scannable = 1 on_mob_life(var/mob/living/M as mob, var/alien) if(M.stat == 2.0) @@ -1666,7 +1653,6 @@ datum description = "Synaptizine is a synaptic stimulant that can also be used to treat certain diseases." reagent_state = LIQUID color = "#C8A5DC" // rgb: 200, 165, 220 - scannable = 1 on_mob_life(var/mob/living/M as mob) if(!M) M = holder.my_atom @@ -1704,7 +1690,6 @@ datum description = "Hyronalin is a medicinal drug used to counter the effect of radiation poisoning." reagent_state = LIQUID color = "#C8A5DC" // rgb: 200, 165, 220 - scannable = 1 on_mob_life(var/mob/living/M as mob) if(!M) M = holder.my_atom @@ -1718,7 +1703,6 @@ datum description = "Arithrazine is an unstable medication used for the most extreme cases of radiation poisoning." reagent_state = LIQUID color = "#BFFF00" // rgb: 191, 255, 0 - scannable = 1 on_mob_life(var/mob/living/M as mob) if(M.stat == 2.0) @@ -1737,7 +1721,6 @@ datum description = "Alkysine is a drug used to lessen the damage to neurological tissue after a catastrophic injury. Can heal brain tissue." reagent_state = LIQUID color = "#F77FBE" // rgb: 247, 127, 190 - scannable = 1 on_mob_life(var/mob/living/M as mob) if(!M) M = holder.my_atom @@ -1751,7 +1734,6 @@ datum description = "Heals eye damage" reagent_state = LIQUID color = "#C8A5DC" // rgb: 200, 165, 220 - scannable = 1 on_mob_life(var/mob/living/M as mob) if(!M) M = holder.my_atom @@ -1772,7 +1754,6 @@ datum description = "Heals ear damage." reagent_state = LIQUID color = "#6600FF" // rgb: 100, 165, 255 - scannable = 1 on_mob_life(var/mob/living/M as mob) if(!M) M = holder.my_atom @@ -1787,7 +1768,6 @@ datum description = "Used to encourage recovery of internal organs and nervous systems. Medicate cautiously." reagent_state = LIQUID color = "#C8A5DC" // rgb: 200, 165, 220 - scannable = 1 on_mob_life(var/mob/living/M as mob) if(!M) M = holder.my_atom @@ -1809,7 +1789,6 @@ datum description = "Bicaridine is an analgesic medication and can be used to treat blunt trauma." reagent_state = LIQUID color = "#C8A5DC" // rgb: 200, 165, 220 - scannable = 1 on_mob_life(var/mob/living/M as mob, var/alien) if(M.stat == 2.0) @@ -1841,7 +1820,6 @@ datum description = "A chemical mixture with almost magical healing powers. Its main limitation is that the targets body temperature must be under 170K for it to metabolise correctly." reagent_state = LIQUID color = "#C8A5DC" // rgb: 200, 165, 220 - scannable = 1 on_mob_life(var/mob/living/M as mob) if(!M) M = holder.my_atom @@ -1859,7 +1837,6 @@ datum description = "A liquid compound similar to that used in the cloning process. Can be used to 'finish' clones that get ejected early when used in conjunction with a cryo tube." reagent_state = LIQUID color = "#C8A5DC" // rgb: 200, 165, 220 - scannable = 1 on_mob_life(var/mob/living/M as mob) if(!M) M = holder.my_atom @@ -1878,7 +1855,6 @@ datum description = "A powder derived from fish toxin, this substance can effectively treat genetic damage in humanoids, though excessive consumption has side effects." reagent_state = SOLID color = "#669900" // rgb: 102, 153, 0 - scannable = 1 on_mob_life(var/mob/living/M as mob) if(!M) M = holder.my_atom @@ -1906,7 +1882,6 @@ datum description = "An all-purpose antiviral agent." reagent_state = LIQUID color = "#228B22" // rgb: 34, 139, 34 - scannable = 1 on_mob_life(var/mob/living/M as mob) ..() @@ -2092,7 +2067,6 @@ datum description = "A powerful oxidizer that reacts with ethanol." reagent_state = SOLID color = "#605048" // rgb: 96, 80, 72 - scannable = 1 on_mob_life(var/mob/living/M as mob) if(!M) M = holder.my_atom @@ -2188,7 +2162,6 @@ datum reagent_state = LIQUID nutriment_factor = 10 * REAGENTS_METABOLISM color = "#BBEDA4" // rgb: 187, 237, 164 - scannable = 1 on_mob_life(var/mob/living/M as mob) if(!M) M = holder.my_atom diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm index 0c03f1c6756..44eb8c6cf1e 100644 --- a/code/modules/research/designs/medical_designs.dm +++ b/code/modules/research/designs/medical_designs.dm @@ -45,6 +45,16 @@ build_path = /obj/item/device/robotanalyzer category = list("Medical") +/datum/design/healthanalyzer_upgrade + name = "Health Analyzer Upgrade" + desc = "An upgrade unit for expanding the functionality of a health analyzer." + id = "healthanalyzer_upgrade" + req_tech = list("biotech" = 2, "magnets" = 2) + build_type = PROTOLATHE + materials = list("$metal" = 20, "$glass" = 20) + build_path = /obj/item/device/healthupgrade + category = list("Medical") + /datum/design/defib name = "Defibrillator" desc = "A device that delivers powerful shocks to detachable paddles that resuscitate incapacitated patients." diff --git a/icons/obj/device.dmi b/icons/obj/device.dmi index 374d95f9bc1..33f94a46604 100644 Binary files a/icons/obj/device.dmi and b/icons/obj/device.dmi differ diff --git a/maps/cyberiad.dmm b/maps/cyberiad.dmm index c166b09612a..eb04e1ab564 100644 --- a/maps/cyberiad.dmm +++ b/maps/cyberiad.dmm @@ -6367,7 +6367,7 @@ "csw" = (/turf/simulated/wall,/area/medical/morgue) "csx" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "xenobio2"; name = "Containment Blast Doors"; opacity = 0},/obj/machinery/door/window/northleft{base_state = "right"; dir = 8; icon_state = "right"; name = "Containment Pen"; req_access_txt = "55"},/turf/simulated/floor/engine,/area/toxins/xenobiology) "csy" = (/obj/structure/stool/bed/chair{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor{icon_state = "white"},/area/toxins/xenobiology) -"csz" = (/obj/structure/table,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/item/weapon/storage/box/beakers{pixel_x = -1; pixel_y = -1; pixel_x = 2; pixel_y = 2},/turf/simulated/floor{icon_state = "white"},/area/toxins/xenobiology) +"csz" = (/obj/structure/table,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/item/weapon/storage/box/beakers{pixel_x = -1; pixel_y = -1; pixel_x = 2; pixel_y = 2},/obj/item/device/slime_scanner,/obj/item/device/slime_scanner,/turf/simulated/floor{icon_state = "white"},/area/toxins/xenobiology) "csA" = (/obj/structure/table,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/item/weapon/storage/box/syringes,/turf/simulated/floor{icon_state = "white"},/area/toxins/xenobiology) "csB" = (/obj/structure/stool/bed/chair{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/effect/landmark/start{name = "Scientist"},/turf/simulated/floor{icon_state = "white"},/area/toxins/xenobiology) "csC" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "white"},/area/toxins/xenobiology)