diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index e9a622365a..e55c728121 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -73,6 +73,7 @@ MASS SPECTROMETER origin_tech = "magnets=1;biotech=1" var/mode = 1 var/scanmode = 0 + var/advanced = FALSE /obj/item/device/healthanalyzer/attack_self(mob/user) if(!scanmode) @@ -97,7 +98,7 @@ MASS SPECTROMETER user.visible_message("[user] has analyzed [M]'s vitals.") if(scanmode == 0) - healthscan(user, M, mode) + healthscan(user, M, mode, advanced) else if(scanmode == 1) chemscan(user, M) @@ -105,7 +106,7 @@ MASS SPECTROMETER // Used by the PDA medical scanner too -/proc/healthscan(mob/living/user, mob/living/M, mode = 1) +/proc/healthscan(mob/living/user, mob/living/M, mode = 1, advanced = FALSE) if(user.incapacitated() || user.eye_blind) return //Damage specifics @@ -115,8 +116,8 @@ MASS SPECTROMETER var/brute_loss = M.getBruteLoss() var/mob_status = (M.stat == DEAD ? "Deceased" : "[round(M.health/M.maxHealth,0.01)*100] % healthy") - if(M.status_flags & FAKEDEATH) - mob_status = "Deceased" + if(M.status_flags & FAKEDEATH && !advanced) + mob_status = "Deceased" oxy_loss = max(rand(1, 40), oxy_loss, (300 - (tox_loss + fire_loss + brute_loss))) // Random oxygen loss if(ishuman(M)) @@ -141,19 +142,77 @@ MASS SPECTROMETER if(oxy_loss > 10) to_chat(user, "\t[oxy_loss > 50 ? "Severe" : "Minor"] oxygen deprivation detected.") if(tox_loss > 10) - to_chat(user, "\t[tox_loss > 50 ? "Critical" : "Dangerous"] amount of toxins detected.") + to_chat(user, "\t[tox_loss > 50 ? "Severe" : "Minor"] amount of toxin damage detected.") if(M.getStaminaLoss()) to_chat(user, "\tSubject appears to be suffering from fatigue.") + if(advanced) + to_chat(user, "\tFatigue Level: [M.getStaminaLoss()]%.") if (M.getCloneLoss()) to_chat(user, "\tSubject appears to have [M.getCloneLoss() > 30 ? "severe" : "minor"] cellular damage.") - if (M.reagents && M.reagents.get_reagent_amount("epinephrine")) - to_chat(user, "\tBloodstream analysis located [M.reagents.get_reagent_amount("epinephrine")] units of rejuvenation chemicals.") + if(advanced) + to_chat(user, "\tCellular Damage Level: [M.getCloneLoss()].") if (M.getBrainLoss() >= 100 || !M.getorgan(/obj/item/organ/brain)) to_chat(user, "\tSubject brain function is non-existent.") else if (M.getBrainLoss() >= 60) to_chat(user, "\tSevere brain damage detected. Subject likely to have mental retardation.") else if (M.getBrainLoss() >= 10) to_chat(user, "\tBrain damage detected. Subject may have had a concussion.") + if(advanced) + to_chat(user, "\tBrain Activity Level: [100 - M.getBrainLoss()]%.") + if (M.radiation) + to_chat(user, "\tSubject is irradiated.") + if(advanced) + to_chat(user, "\tRadiation Level: [M.radiation]%.") + + if(advanced && M.hallucinating()) + to_chat(user, "\tSubject is hallucinating.") + + //Eyes and ears + if(advanced) + if(iscarbon(M)) + var/mob/living/carbon/C = M + var/obj/item/organ/ears/ears = C.getorganslot("ears") + to_chat(user, "\t==EAR STATUS==") + if(istype(ears)) + var/healthy = TRUE + if(C.disabilities & DEAF) + healthy = FALSE + to_chat(user, "\tSubject is genetically deaf.") + else + if(ears.ear_damage) + to_chat(user, "\tSubject has [ears.ear_damage > UNHEALING_EAR_DAMAGE? "permanent ": "temporary "]hearing damage.") + healthy = FALSE + if(ears.deaf) + to_chat(user, "\tSubject is [ears.ear_damage > UNHEALING_EAR_DAMAGE ? "permanently ": "temporarily "] deaf.") + healthy = FALSE + if(healthy) + to_chat(user, "\tHealthy.") + else + to_chat(user, "\tSubject does not have ears.") + var/obj/item/organ/eyes/eyes = C.getorganslot("eye_sight") + to_chat(user, "\t==EYE STATUS==") + if(istype(eyes)) + var/healthy = TRUE + if(C.disabilities & BLIND) + to_chat(user, "\tSubject is blind.") + healthy = FALSE + if(C.disabilities & NEARSIGHT) + to_chat(user, "\tSubject is nearsighted.") + healthy = FALSE + if(eyes.eye_damage > 30) + to_chat(user, "\tSubject has severe eye damage.") + healthy = FALSE + else if(eyes.eye_damage > 20) + to_chat(user, "\tSubject has significant eye damage.") + healthy = FALSE + else if(eyes.eye_damage) + to_chat(user, "\tSubject has minor eye damage.") + healthy = FALSE + if(healthy) + to_chat(user, "\tHealthy.") + else + to_chat(user, "\tSubject does not have eyes.") + if(ishuman(M)) var/mob/living/carbon/human/H = M @@ -177,7 +236,7 @@ MASS SPECTROMETER to_chat(user, "Body temperature: [round(M.bodytemperature-T0C,0.1)] °C ([round(M.bodytemperature*1.8-459.67,0.1)] °F)") // Time of death - if(M.tod && (M.stat == DEAD || (M.status_flags & FAKEDEATH))) + if(M.tod && (M.stat == DEAD || ((M.status_flags & FAKEDEATH) && !advanced))) to_chat(user, "Time of Death: [M.tod]") var/tdelta = round(world.time - M.timeofdeath) if(tdelta < (DEFIB_TIME_LIMIT * 10)) @@ -251,6 +310,12 @@ MASS SPECTROMETER if(0) to_chat(usr, "The scanner no longer shows limb damage.") +/obj/item/device/healthanalyzer/advanced + name = "advanced health analyzer" + icon_state = "health_adv" + desc = "A hand-held body scanner able to distinguish vital signs of the subject with high accuracy." + origin_tech = "magnets=3;biotech=3" + advanced = TRUE /obj/item/device/analyzer desc = "A hand-held environmental scanner which reports current gas levels." diff --git a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm index a2a055f464..bf42619280 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm @@ -50,6 +50,7 @@ /obj/structure/closet/secure_closet/CMO name = "\proper chief medical officer's locker" req_access = list(ACCESS_CMO) +<<<<<<< HEAD icon_state = "cmo" /obj/structure/closet/secure_closet/CMO/PopulateContents() @@ -74,6 +75,33 @@ /obj/structure/closet/secure_closet/animal name = "animal control" +======= + icon_state = "cmo" + +/obj/structure/closet/secure_closet/CMO/PopulateContents() + ..() + new /obj/item/clothing/neck/cloak/cmo(src) + new /obj/item/storage/backpack/duffelbag/med(src) + new /obj/item/clothing/suit/bio_suit/cmo(src) + new /obj/item/clothing/head/bio_hood/cmo(src) + new /obj/item/clothing/suit/toggle/labcoat/cmo(src) + new /obj/item/clothing/under/rank/chief_medical_officer(src) + new /obj/item/clothing/shoes/sneakers/brown (src) + new /obj/item/cartridge/cmo(src) + new /obj/item/device/radio/headset/heads/cmo(src) + new /obj/item/device/megaphone/command(src) + new /obj/item/defibrillator/compact/loaded(src) + new /obj/item/clothing/gloves/color/latex/nitrile(src) + new /obj/item/storage/belt/medical(src) + new /obj/item/device/healthanalyzer/advanced(src) + new /obj/item/device/assembly/flash/handheld(src) + new /obj/item/reagent_containers/hypospray/CMO(src) + new /obj/item/device/autosurgeon/cmo(src) + new /obj/item/door_remote/chief_medical_officer(src) + +/obj/structure/closet/secure_closet/animal + name = "animal control" +>>>>>>> 6ed612c... Adds the advanced medical scanner, gives one to the CMO (#31179) req_access = list(ACCESS_SURGERY) /obj/structure/closet/secure_closet/animal/PopulateContents() diff --git a/icons/obj/device.dmi b/icons/obj/device.dmi index 79f0a207d4..71ce7d6df5 100644 Binary files a/icons/obj/device.dmi and b/icons/obj/device.dmi differ