diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm
index 9228b425b8c..7cb46a33d89 100644
--- a/code/game/objects/items/devices/PDA/PDA.dm
+++ b/code/game/objects/items/devices/PDA/PDA.dm
@@ -887,49 +887,14 @@ var/global/list/obj/item/device/pda/PDAs = list()
/obj/item/device/pda/attack(mob/living/carbon/C, mob/living/user as mob)
if(istype(C))
switch(scanmode)
+
if(1)
-
- for (var/mob/O in viewers(C, null))
- O.show_message("\red [user] has analyzed [C]'s vitals!", 1)
-
- user.show_message("\blue Analyzing Results for [C]:")
- user.show_message("\blue \t Overall Status: [C.stat > 1 ? "dead" : "[C.health - C.halloss]% healthy"]", 1)
- user.show_message("\blue \t Damage Specifics: [C.getOxyLoss() > 50 ? "\red" : "\blue"][C.getOxyLoss()]-[C.getToxLoss() > 50 ? "\red" : "\blue"][C.getToxLoss()]-[C.getFireLoss() > 50 ? "\red" : "\blue"][C.getFireLoss()]-[C.getBruteLoss() > 50 ? "\red" : "\blue"][C.getBruteLoss()]", 1)
- user.show_message("\blue \t Key: Suffocation/Toxin/Burns/Brute", 1)
- user.show_message("\blue \t Body Temperature: [C.bodytemperature-T0C]°C ([C.bodytemperature*1.8-459.67]°F)", 1)
- if(C.tod && (C.stat == DEAD || (C.status_flags & FAKEDEATH)))
- user.show_message("\blue \t Time of Death: [C.tod]")
- if(istype(C, /mob/living/carbon/human))
- var/mob/living/carbon/human/H = C
- var/list/damaged = H.get_damaged_organs(1,1)
- user.show_message("\blue Localized Damage, Brute/Burn:",1)
- if(length(damaged)>0)
- for(var/datum/limb/org in damaged)
- user.show_message(text("\blue \t []: []\blue-[]",capitalize(org.getDisplayName()),(org.brute_dam > 0)?"\red [org.brute_dam]":0,(org.burn_dam > 0)?"\red [org.burn_dam]":0),1)
- else
- user.show_message("\blue \t Limbs are OK.",1)
-
- for(var/datum/disease/D in C.viruses)
- if(!D.hidden[SCANNER])
- user.show_message(text("\red Warning: [D.form] Detected\nName: [D.name].\nType: [D.spread].\nStage: [D.stage]/[D.max_stages].\nPossible Cure: [D.cure]"))
+ user.visible_message(text("[] has analyzed []'s vitals!", user, C))
+ healthscan(user, C, 1)
+ src.add_fingerprint(user)
if(2)
- if(!istype(C.dna))
- user << "\blue No fingerprints found on [C]"
- else if(!istype(C, /mob/living/carbon/monkey))
- if(!isnull(C:gloves))
- user << "\blue No fingerprints found on [C]"
- else
- user << text("\blue [C]'s Fingerprints: [md5(C.dna.uni_identity)]")
- if ( !(C:blood_DNA) )
- user << "\blue No blood found on [C]"
- if(C:blood_DNA)
- del(C:blood_DNA)
- else
- user << "\blue Blood found on [C]. Analysing..."
- spawn(15)
- for(var/blood in C:blood_DNA)
- user << "\blue Blood type: [C:blood_DNA[blood]]\nDNA: [blood]"
+ // Unused
if(4)
for (var/mob/O in viewers(C, null))
diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm
index e753d4f51bc..9d7401c7132 100644
--- a/code/game/objects/items/devices/scanners.dm
+++ b/code/game/objects/items/devices/scanners.dm
@@ -76,61 +76,79 @@ MASS SPECTROMETER
var/mode = 1;
/obj/item/device/healthanalyzer/attack(mob/living/M as mob, mob/living/user as mob)
- if (( (CLUMSY in user.mutations) || user.getBrainLoss() >= 60) && prob(50))
- user << text("\red You try to analyze the floor's vitals!")
- for(var/mob/O in viewers(M, null))
- O.show_message(text("\red [user] has analyzed the floor's vitals!"), 1)
- user.show_message(text("\blue Analyzing Results for The floor:\n\t Overall Status: Healthy"), 1)
- user.show_message(text("\blue \t Damage Specifics: [0]-[0]-[0]-[0]"), 1)
- user.show_message("\blue Key: Suffocation/Toxin/Burns/Brute", 1)
- user.show_message("\blue Body Temperature: ???", 1)
+
+ // Clumsiness/brain damage check
+ if (CLUMSY in user.mutations || user.getBrainLoss() >= 60 && prob(50))
+ user << text("You try to analyze the floor's vitals!")
+ user.visible_message(text("[user] has analyzed the floor's vitals!"))
+ user.show_message(text("Analyzing Results for The floor:\n\t Overall Status: Healthy"), 1)
+ user.show_message(text("\t Damage Specifics: 0-0-0-0"), 1)
+ user.show_message("Key: Suffocation/Toxin/Burns/Brute", 1)
+ user.show_message("Body Temperature: ???", 1)
return
- if (!(istype(usr, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey")
- usr << "\red You don't have the dexterity to do this!"
- return
- for(var/mob/O in viewers(M, null))
- O.show_message(text("\red [] has analyzed []'s vitals!", user, M), 1)
- //Foreach goto(67)
- var/fake_oxy = max(rand(1,40), M.getOxyLoss(), (300 - (M.getToxLoss() + M.getFireLoss() + M.getBruteLoss())))
+
+
+ user.visible_message(text("[] has analyzed []'s vitals!", user, M))
+
+ healthscan(user, M, mode)
+
+ src.add_fingerprint(user)
+ return
+
+// Used by the PDA medical scanner too
+/proc/healthscan(var/mob/living/user, var/mob/living/M, var/mode = 1)
+
+ //Damage specifics
+ var/oxy_loss = M.getOxyLoss()
+ var/tox_loss = M.getToxLoss()
+ var/fire_loss = M.getFireLoss()
+ var/brute_loss = M.getBruteLoss()
+ var/mob_status = (M.stat > 1 ? "Deceased" : text("[]% healthy", M.health - M.halloss))
+
if(M.status_flags & FAKEDEATH)
- user.show_message(text("\blue Analyzing Results for []:\n\t Overall Status: []", M, "dead"), 1)
- user.show_message(text("\blue \t Damage Specifics: []-[]-[]-[]", fake_oxy < 50 ? "\red [fake_oxy]" : fake_oxy , M.getToxLoss() > 50 ? "\red [M.getToxLoss()]" : M.getToxLoss(), M.getFireLoss() > 50 ? "\red[M.getFireLoss()]" : M.getFireLoss(), M.getBruteLoss() > 50 ? "\red[M.getBruteLoss()]" : M.getBruteLoss()), 1)
- else
- user.show_message(text("\blue Analyzing Results for []:\n\t Overall Status: []", M, (M.stat > 1 ? "dead" : text("[]% healthy", M.health - M.halloss))), 1)
- user.show_message(text("\blue \t Damage Specifics: []-[]-[]-[]", M.getOxyLoss() > 50 ? "\red [M.getOxyLoss()]" : M.getOxyLoss(), M.getToxLoss() > 50 ? "\red [M.getToxLoss()]" : M.getToxLoss(), M.getFireLoss() > 50 ? "\red[M.getFireLoss()]" : M.getFireLoss(), M.getBruteLoss() > 50 ? "\red[M.getBruteLoss()]" : M.getBruteLoss()), 1)
- user.show_message("\blue Key: Suffocation/Toxin/Burns/Brute", 1)
- user.show_message("\blue Body Temperature: [M.bodytemperature-T0C]°C ([M.bodytemperature*1.8-459.67]°F)", 1)
+ mob_status = "Deceased"
+ oxy_loss = max(rand(1, 40), oxy_loss, (300 - (tox_loss + fire_loss + brute_loss))) // Random oxygen loss
+
+ user.show_message(text("Analyzing Results for []:\n\t Overall Status: []", M, mob_status), 1)
+ user.show_message(text("\t Damage Specifics: []-[]-[]-[]", oxy_loss, tox_loss, fire_loss, brute_loss), 1)
+
+ user.show_message("Key: Suffocation/Toxin/Burns/Brute", 1)
+ user.show_message("Body Temperature: [M.bodytemperature-T0C]°C ([M.bodytemperature*1.8-459.67]°F)", 1)
+
+ // Time of death
if(M.tod && (M.stat == DEAD || (M.status_flags & FAKEDEATH)))
- user.show_message("\blue Time of Death: [M.tod]")
+ user.show_message("Time of Death: [M.tod]")
+
+ // Organ damage report
if(istype(M, /mob/living/carbon/human) && mode == 1)
var/mob/living/carbon/human/H = M
var/list/damaged = H.get_damaged_organs(1,1)
- user.show_message("\blue Localized Damage, Brute/Burn:",1)
+ user.show_message("Localized Damage, Burn/Brute:",1)
if(length(damaged)>0)
for(var/datum/limb/org in damaged)
- user.show_message(text("\blue \t []: []\blue-[]",capitalize(org.getDisplayName()),(org.brute_dam > 0)?"\red [org.brute_dam]":0,(org.burn_dam > 0)?"\red [org.burn_dam]":0),1)
+ user.show_message(text("\t []: []-[]", capitalize(org.getDisplayName()), (org.burn_dam > 0) ? "[org.burn_dam]" : 0, (org.brute_dam > 0) ? "[org.brute_dam]" : 0), 1)
else
- user.show_message("\blue \t Limbs are OK.",1)
+ user.show_message("\t Limbs are OK.",1)
+
+ // Damage descriptions
+
+ user.show_message(text("[] | [] | [] | []", oxy_loss > 50 ? "\red Severe oxygen deprivation detected\blue" : "Subject bloodstream oxygen level normal", tox_loss > 50 ? "\red Dangerous amount of toxins detected\blue" : "Subject bloodstream toxin level minimal", fire_loss > 50 ? "\red Severe burn damage detected\blue" : "Subject burn injury status O.K", brute_loss > 50 ? "\red Severe anatomical damage detected\blue" : "Subject brute-force injury status O.K"), 1)
- if(M.status_flags & FAKEDEATH)
- user.show_message(text("\blue [] | [] | [] | []", fake_oxy > 50 ? "\red Severe oxygen deprivation detected\blue" : "Subject bloodstream oxygen level normal", M.getToxLoss() > 50 ? "\red Dangerous amount of toxins detected\blue" : "Subject bloodstream toxin level minimal", M.getFireLoss() > 50 ? "\red Severe burn damage detected\blue" : "Subject burn injury status O.K", M.getBruteLoss() > 50 ? "\red Severe anatomical damage detected\blue" : "Subject brute-force injury status O.K"), 1)
- else
- user.show_message(text("\blue [] | [] | [] | []", M.getOxyLoss() > 50 ? "\red Severe oxygen deprivation detected\blue" : "Subject bloodstream oxygen level normal", M.getToxLoss() > 50 ? "\red Dangerous amount of toxins detected\blue" : "Subject bloodstream toxin level minimal", M.getFireLoss() > 50 ? "\red Severe burn damage detected\blue" : "Subject burn injury status O.K", M.getBruteLoss() > 50 ? "\red Severe anatomical damage detected\blue" : "Subject brute-force injury status O.K"), 1)
if (M.getCloneLoss())
- user.show_message(text("\red Subject appears to have been imperfectly cloned."), 1)
+ user.show_message(text("Subject appears to have been imperfectly cloned."), 1)
+
for(var/datum/disease/D in M.viruses)
if(!D.hidden[SCANNER])
- user.show_message(text("\red Warning: [D.form] Detected\nName: [D.name].\nType: [D.spread].\nStage: [D.stage]/[D.max_stages].\nPossible Cure: [D.cure]"))
+ user.show_message(text("Warning: [D.form] Detected\nName: [D.name].\nType: [D.spread].\nStage: [D.stage]/[D.max_stages].\nPossible Cure: [D.cure]"))
+
if (M.reagents && M.reagents.get_reagent_amount("inaprovaline"))
- user.show_message(text("\blue Bloodstream Analysis located [M.reagents:get_reagent_amount("inaprovaline")] units of rejuvenation chemicals."), 1)
+ user.show_message(text("Bloodstream Analysis located [M.reagents:get_reagent_amount("inaprovaline")] units of rejuvenation chemicals."), 1)
if (M.getBrainLoss() >= 100 || !getbrain(M))
- user.show_message(text("\red Subject is brain dead."), 1)
+ user.show_message(text("Subject brain function is non-existant."), 1)
else if (M.getBrainLoss() >= 60)
- user.show_message(text("\red Severe brain damage detected. Subject likely to have mental retardation."), 1)
+ user.show_message(text("Severe brain damage detected. Subject likely to have mental retardation."), 1)
else if (M.getBrainLoss() >= 10)
- user.show_message(text("\red Significant brain damage detected. Subject may have had a concussion."), 1)
- src.add_fingerprint(user)
- return
+ user.show_message(text("Significant brain damage detected. Subject may have had a concussion."), 1)
/obj/item/device/healthanalyzer/verb/toggle_mode()
set name = "Switch Verbosity"
@@ -163,9 +181,6 @@ MASS SPECTROMETER
if (user.stat)
return
- if (!(istype(usr, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey")
- usr << "\red You don't have the dexterity to do this!"
- return
var/turf/location = user.loc
if (!( istype(location, /turf) ))