diff --git a/code/__defines/mobs.dm b/code/__defines/mobs.dm index 36a0f6ccc70..3fedc45b938 100644 --- a/code/__defines/mobs.dm +++ b/code/__defines/mobs.dm @@ -47,6 +47,15 @@ #define GETPULSE_TOOL 1 // More accurate. (med scanner, sleeper, etc.) #define PULSE_MAX_BPM 250 // Highest, readable BPM by machines and humans. +// Blood pressure levels, simplified +#define BP_HIGH_SYSTOLIC 140 +#define BP_PRE_HIGH_SYSTOLIC 125 +#define BP_IDEAL_SYSTOLIC 80 + +#define BP_HIGH_DIASTOLIC 100 +#define BP_PRE_HIGH_DIASTOLIC 85 +#define BP_IDEAL_DIASTOLIC 60 + //intent flags, why wasn't this done the first time? #define I_HELP "help" #define I_DISARM "disarm" diff --git a/code/datums/repositories/crew.dm b/code/datums/repositories/crew.dm index b1a6a5d5b67..07d70649f8c 100644 --- a/code/datums/repositories/crew.dm +++ b/code/datums/repositories/crew.dm @@ -49,17 +49,25 @@ var/global/datum/repository/crew/crew_repository = new() if(C.sensor_mode >= SUIT_SENSOR_BINARY) crewmemberData["pulse"] = "N/A" crewmemberData["tpulse"] = -1 - if(!H.isSynthetic() && H.should_have_organ(BP_HEART)) - var/obj/item/organ/internal/heart/O = H.internal_organs_by_name[BP_HEART] - if (!O || !BP_IS_ROBOTIC(O)) // Don't make medical freak out over prosthetic hearts - crewmemberData["tpulse"] = H.pulse() - crewmemberData["pulse"] = H.get_pulse(GETPULSE_TOOL) + crewmemberData["cellCharge"] = -1 + if(!H.isSynthetic()) + if(H.should_have_organ(BP_HEART)) + var/obj/item/organ/internal/heart/O = H.internal_organs_by_name[BP_HEART] + if (!O || !BP_IS_ROBOTIC(O)) // Don't make medical freak out over prosthetic hearts + crewmemberData["tpulse"] = H.pulse() + crewmemberData["pulse"] = H.get_pulse(GETPULSE_TOOL) + else + if(isipc(H) && H.internal_organs_by_name[BP_IPCTAG]) // Don't make untagged IPCs obvious + var/obj/item/organ/internal/cell/cell = H.internal_organs_by_name[BP_CELL] + if(cell) + crewmemberData["cellCharge"] = Floor(100*H.nutrition / H.max_nutrition) if(C.sensor_mode >= SUIT_SENSOR_VITAL) crewmemberData["pressure"] = "N/A" crewmemberData["toxyg"] = -1 crewmemberData["oxyg"] = OXYGENATION_STATE_UNDEFINED if(!H.isSynthetic() && H.should_have_organ(BP_HEART)) + crewmemberData["tpressure"] = H.get_blood_pressure_alert() crewmemberData["pressure"] = H.get_blood_pressure() crewmemberData["toxyg"] = H.get_blood_oxygenation() switch (crewmemberData["toxyg"]) diff --git a/code/game/machinery/adv_med.dm b/code/game/machinery/adv_med.dm index fe09126ba12..892bb367f52 100644 --- a/code/game/machinery/adv_med.dm +++ b/code/game/machinery/adv_med.dm @@ -58,7 +58,7 @@ /obj/machinery/bodyscanner/relaymove(mob/user as mob) if (user.stat) return - src.go_out() + go_out() return /obj/machinery/bodyscanner/verb/eject() @@ -66,9 +66,9 @@ set category = "Object" set name = "Eject Body Scanner" - if (usr.stat != 0) + if (usr.stat != CONSCIOUS) return - src.go_out() + go_out() add_fingerprint(usr) return @@ -77,50 +77,50 @@ set category = "Object" set name = "Enter Body Scanner" - if (usr.stat != 0) + if (usr.stat != CONSCIOUS) return - if (src.occupant) - to_chat(usr, "The scanner is already occupied!") + if (occupant) + to_chat(usr, span("warning", "The scanner is already occupied!")) return if (usr.abiotic()) - to_chat(usr, "The subject cannot have abiotic items on.") + to_chat(usr, span("warning", "The subject cannot have abiotic items on.")) return usr.pulling = null usr.client.perspective = EYE_PERSPECTIVE usr.client.eye = src usr.forceMove(src) - src.occupant = usr + occupant = usr update_use_power(2) update_icon() - src.add_fingerprint(usr) + add_fingerprint(usr) return /obj/machinery/bodyscanner/proc/go_out() - if ((!( src.occupant ) || src.locked)) + if(!occupant || locked) return - last_occupant_name = src.occupant.name - if (src.occupant.client) - src.occupant.client.eye = src.occupant.client.mob - src.occupant.client.perspective = MOB_PERSPECTIVE - src.occupant.forceMove(src.loc) - src.occupant = null + last_occupant_name = occupant.name + if (occupant.client) + occupant.client.eye = occupant.client.mob + occupant.client.perspective = MOB_PERSPECTIVE + occupant.forceMove(loc) + occupant = null update_use_power(1) update_icon() return /obj/machinery/bodyscanner/attackby(obj/item/grab/G, mob/user) - if ((!( istype(G, /obj/item/grab) ) || !( isliving(G.affecting) ))) + if (!istype(G, /obj/item/grab) || !isliving(G.affecting) ) return - if (src.occupant) - to_chat(user, "The scanner is already occupied!") + if (occupant) + to_chat(user, span("warning", "The scanner is already occupied!")) return if (G.affecting.abiotic()) - to_chat(user, "Subject cannot have abiotic items on.") + to_chat(user, span("warning", "Subject cannot have abiotic items on.")) return var/mob/living/M = G.affecting - user.visible_message("[user] starts putting [M] into [src].", "You start putting [M] into [src].", range = 3) + user.visible_message(span("notice", "\The [user] starts putting \the [M] into \the [src]."), span("notice", "You start putting \the [M] into \the [src]."), range = 3) if (do_mob(user, G.affecting, 30, needhand = 0)) var/bucklestatus = M.bucklecheck(user) @@ -134,11 +134,11 @@ M.client.eye = src M.forceMove(src) - src.occupant = M + occupant = M update_use_power(2) update_icon() //Foreach goto(154) - src.add_fingerprint(user) + add_fingerprint(user) //G = null qdel(G) return @@ -149,11 +149,11 @@ if(!ismob(O)) return var/mob/living/M = O//Theres no reason this shouldn't be /mob/living - if (src.occupant) - to_chat(user, "The scanner is already occupied!") + if (occupant) + to_chat(user, span("notice", "The scanner is already occupied!")) return if (M.abiotic()) - to_chat(user, "Subject cannot have abiotic items on.") + to_chat(user, span("notice", "Subject cannot have abiotic items on.")) return var/mob/living/L = O @@ -163,9 +163,9 @@ return if(L == user) - user.visible_message("[user] starts climbing into [src].", "You start climbing into [src].", range = 3) + user.visible_message(span("notice", "\The [user] starts climbing into \the [src]."), span("notice", "You start climbing into \the [src]."), range = 3) else - user.visible_message("[user] starts putting [L] into [src].", "You start putting [L] into [src].", range = 3) + user.visible_message(span("notice", "\The [user] starts putting \the [L] into \the [src]."), span("notice", "You start putting \the [L] into \the [src]."), range = 3) if (do_mob(user, L, 30, needhand = 0)) if (bucklestatus == 2) @@ -175,11 +175,11 @@ M.client.perspective = EYE_PERSPECTIVE M.client.eye = src M.forceMove(src) - src.occupant = M + occupant = M update_use_power(2) update_icon() - playsound(src.loc, 'sound/machines/medbayscanner1.ogg', 50) - src.add_fingerprint(user) + playsound(loc, 'sound/machines/medbayscanner1.ogg', 50) + add_fingerprint(user) //G = null return @@ -187,7 +187,7 @@ switch(severity) if(1.0) for(var/atom/movable/A as mob|obj in src) - A.forceMove(src.loc) + A.forceMove(loc) ex_act(severity) //Foreach goto(35) //SN src = null @@ -196,7 +196,7 @@ if(2.0) if (prob(50)) for(var/atom/movable/A as mob|obj in src) - A.forceMove(src.loc) + A.forceMove(loc) ex_act(severity) //Foreach goto(108) //SN src = null @@ -205,7 +205,7 @@ if(3.0) if (prob(25)) for(var/atom/movable/A as mob|obj in src) - A.forceMove(src.loc) + A.forceMove(loc) ex_act(severity) //Foreach goto(181) //SN src = null @@ -216,10 +216,10 @@ /obj/machinery/bodyscanner/proc/check_species() if (!occupant || !ishuman(occupant)) - return 1 + return TRUE var/mob/living/carbon/human/O = occupant if (!O) - return 1 + return TRUE return !(O.get_species() in allowed_species) /obj/machinery/body_scanconsole/ex_act(severity) @@ -269,27 +269,27 @@ else if (stat & NOPOWER) spawn(rand(0, 15)) - src.icon_state = "body_scannerconsole-p" + icon_state = "body_scannerconsole-p" else icon_state = initial(icon_state) /obj/machinery/body_scanconsole/proc/get_collapsed_lung_desc() - if (!src.connected || !src.connected.occupant) + if (!connected || !connected.occupant) return - if (src.connected.occupant.name != src.connected.last_occupant_name || !collapse_desc) + if (connected.occupant.name != connected.last_occupant_name || !collapse_desc) var/ldesc = pick("Shows symptoms of collapse.", "Collapsed.", "Pneumothorax detected.") collapse_desc = ldesc - src.connected.last_occupant_name = src.connected.occupant.name + connected.last_occupant_name = connected.occupant.name return collapse_desc /obj/machinery/body_scanconsole/proc/get_broken_lung_desc() - if (!src.connected || !src.connected.occupant) + if (!connected || !connected.occupant) return - if (src.connected.occupant.name != src.connected.last_occupant_name || !broken_desc) + if (connected.occupant.name != connected.last_occupant_name || !broken_desc) var/ldesc = pick("Shows symptoms of rupture.", "Ruptured.", "Extensive damage detected.") broken_desc = ldesc - src.connected.last_occupant_name = src.connected.occupant.name + connected.last_occupant_name = connected.occupant.name return broken_desc @@ -298,13 +298,12 @@ for(var/obj/machinery/bodyscanner/C in orange(1,src)) connected = C break - src.connected.connected = src + connected.connected = src -/obj/machinery/body_scanconsole/attack_ai(user as mob) - return src.attack_hand(user) - -/obj/machinery/body_scanconsole/attack_hand(user as mob) +/obj/machinery/body_scanconsole/attack_ai(var/mob/user) + return attack_hand(user) +/obj/machinery/body_scanconsole/attack_hand(var/mob/user) if(..()) return @@ -314,29 +313,37 @@ ..() // shouldn't be reachable if occupant is invalid - if (href_list["print"]) - var/obj/item/paper/R = new(src.loc) + if(href_list["print"]) + var/obj/item/paper/R = new(loc) R.color = "#eeffe8" - R.set_content_unsafe("Scan ([src.connected.occupant])", format_occupant_data(src.connected.get_occupant_data())) + R.set_content_unsafe("Scan ([connected.occupant])", format_occupant_data(connected.get_occupant_data())) print(R, "[src] beeps, printing [R.name] after a moment.") -/obj/machinery/body_scanconsole/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = default_state) - var/list/data = list() - var/occupied = (src.connected && src.connected.occupant) - var/mob/living/carbon/human/occupant - if (src.connected) - occupant = src.connected.occupant +/obj/machinery/body_scanconsole/ui_interact(mob/user) + var/datum/vueui/ui = SSvueui.get_open_ui(user, src) + if (!ui) + ui = new(user, src, "medical-bodyscanner", 800, 600, capitalize(name)) + ui.open() + +/obj/machinery/body_scanconsole/vueui_data_change(var/list/data, var/mob/user, var/datum/vueui/ui) + if(!data) + data = list() + + var/mob/living/carbon/human/occupant + if (connected) + occupant = connected.occupant + + VUEUI_SET_CHECK(data["noscan"], !!connected.check_species(), ., data) + VUEUI_SET_CHECK(data["nocons"], !connected, ., data) + VUEUI_SET_CHECK(data["occupied"], connected.occupant, ., data) + VUEUI_SET_CHECK(data["invalid"], !!connected.check_species(), ., data) + VUEUI_SET_CHECK(data["ipc"], !!(occupant && isipc(occupant)), ., data) - data["noscan"] = src.connected.check_species() - data["nocons"] = !src.connected - data["occupied"] = occupied - data["invalid"] = src.connected && src.connected.check_species() - data["ipc"] = src.connected && occupant && isipc(occupant) if (!data["invalid"]) var/datum/reagents/R = occupant.bloodstr - var/brain_result = occupant.get_brain_status() + var/brain_result = occupant.get_brain_result() var/pulse_result if(occupant.should_have_organ(BP_HEART)) @@ -355,46 +362,40 @@ if(pulse_result == ">250") pulse_result = -3 - data["stat"] = occupant.stat - data["name"] = occupant.name - data["species"] = occupant.get_species() // mostly for fluff. - data["brain_activity"] = brain_result - data["pulse"] = text2num(pulse_result) - data["blood_pressure"] = occupant.get_blood_pressure() - data["blood_volume"] = occupant.get_blood_volume() - data["blood_o2"] = occupant.get_blood_oxygenation() - data["rads"] = occupant.total_radiation + VUEUI_SET_CHECK(data["stat"], occupant.stat, ., data) + VUEUI_SET_CHECK(data["name"], occupant.name, ., data) + VUEUI_SET_CHECK(data["species"], occupant.get_species(), ., data) + VUEUI_SET_CHECK(data["brain_activity"], brain_result, ., data) + VUEUI_SET_CHECK(data["pulse"], text2num(pulse_result), ., data) + VUEUI_SET_CHECK(data["blood_pressure"], occupant.get_blood_pressure(), ., data) + VUEUI_SET_CHECK(data["blood_pressure_level"], occupant.get_blood_pressure_alert(), ., data) + VUEUI_SET_CHECK(data["blood_volume"], occupant.get_blood_volume(), ., data) + VUEUI_SET_CHECK(data["blood_o2"], occupant.get_blood_oxygenation(), ., data) + VUEUI_SET_CHECK(data["rads"], occupant.total_radiation, ., data) - data["cloneLoss"] = get_severity(occupant.getCloneLoss(), TRUE) - data["oxyLoss"] = get_severity(occupant.getOxyLoss(), TRUE) - data["bruteLoss"] = get_severity(occupant.getBruteLoss(), TRUE) - data["fireLoss"] = get_severity(occupant.getFireLoss(), TRUE) - data["toxLoss"] = get_severity(occupant.getToxLoss(), TRUE) + VUEUI_SET_CHECK(data["cloneLoss"], get_severity(occupant.getCloneLoss()), ., data) + VUEUI_SET_CHECK(data["oxyLoss"], get_severity(occupant.getOxyLoss()), ., data) + VUEUI_SET_CHECK(data["bruteLoss"], get_severity(occupant.getBruteLoss()), ., data) + VUEUI_SET_CHECK(data["fireLoss"], get_severity(occupant.getFireLoss()), ., data) + VUEUI_SET_CHECK(data["toxLoss"], get_severity(occupant.getToxLoss()), ., data) - data["paralysis"] = occupant.paralysis - data["bodytemp"] = occupant.bodytemperature - data["occupant"] = occupant - data["norepiAmt"] = R.get_reagent_amount("norepinephrine") - data["soporAmt"] = R.get_reagent_amount("stoxin") - data["bicardAmt"] = R.get_reagent_amount("bicaridine") - data["dexAmt"] = R.get_reagent_amount("dexalin") - data["dermAmt"] = R.get_reagent_amount("dermaline") - data["otherAmt"] = R.total_volume - (data["soporAmt"] + data["dexAmt"] + data["bicardAmt"] + data["norepiAmt"] + data["dermAmt"]) - data["bodyparts"] = get_external_wound_data(occupant) - data["organs"] = get_internal_wound_data(occupant) + VUEUI_SET_CHECK(data["paralysis"], occupant.paralysis, ., data) + VUEUI_SET_CHECK(data["bodytemp"], occupant.bodytemperature, ., data) + VUEUI_SET_CHECK(data["occupant"], occupant, ., data) + VUEUI_SET_CHECK(data["norepiAmt"], R.get_reagent_amount("norepinephrine"), ., data) + VUEUI_SET_CHECK(data["soporAmt"], R.get_reagent_amount("stoxin"), ., data) + VUEUI_SET_CHECK(data["bicardAmt"], R.get_reagent_amount("bicaridine"), ., data) + VUEUI_SET_CHECK(data["dexAmt"], R.get_reagent_amount("dexalin"), ., data) + VUEUI_SET_CHECK(data["dermAmt"], R.get_reagent_amount("dermaline"), ., data) + VUEUI_SET_CHECK(data["otherAmt"], R.total_volume - (data["soporAmt"] + data["dexAmt"] + data["bicardAmt"] + data["norepiAmt"] + data["dermAmt"]), ., data) + VUEUI_SET_CHECK(data["bodyparts"], get_external_wound_data(occupant), ., data) + VUEUI_SET_CHECK(data["organs"], get_internal_wound_data(occupant), ., data) var/list/missing = get_missing_organs(occupant) - data["missingparts"] = missing - data["hasmissing"] = missing.len ? 1 : 0 - data["hasvirus"] = occupant.virus2.len || occupant.viruses.len - data["hastgvirus"] = occupant.viruses.len - data["tgvirus"] = occupant.viruses - - ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new(user, src, ui_key, "med_diagnostics.tmpl", "Medical Diagnostics", 800, 500, state = state) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) + VUEUI_SET_CHECK(data["missingparts"], missing, ., data) + VUEUI_SET_CHECK(data["hasmissing"], !!missing.len, ., data) + VUEUI_SET_CHECK(data["hasvirus"], occupant.virus2.len || occupant.viruses.len, ., data) + VUEUI_SET_CHECK(data["hastgvirus"], occupant.viruses.len, ., data) + VUEUI_SET_CHECK(data["tgvirus"], occupant.viruses, ., data) /obj/machinery/body_scanconsole/proc/get_internal_damage(var/obj/item/organ/internal/I) if(I.is_broken()) @@ -457,7 +458,7 @@ if (unk) wounds += "Has an abnormal mass present." - data["hasWounds"] = length(wounds) ? 1 : 0 + data["hasWounds"] = !!length(wounds) data["wounds"] = wounds organs += list(data) @@ -500,8 +501,9 @@ if(O.get_scarring_level() > 0.01) wounds += "[O.get_scarring_results()]." - data["hasWounds"] = length(wounds) ? 1 : 0 + data["hasWounds"] = !!length(wounds) data["wounds"] = wounds + organs += list(data) return organs diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index bcb69d92f8e..774eaed7eba 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -123,7 +123,7 @@ BREATH ANALYZER pulse_result = 0 else pulse_result = H.get_pulse(GETPULSE_TOOL) - pulse_result = "[pulse_result]bpm" + pulse_result = "[pulse_result]bpm" if(H.pulse() == PULSE_NONE) pulse_result = "[pulse_result]" else if(H.pulse() < PULSE_NORM) @@ -141,7 +141,7 @@ BREATH ANALYZER if(H.should_have_organ(BP_HEART)) if(H.get_blood_volume() <= 70) dat += "Severe blood loss detected." - var/oxygenation_string = "[H.get_blood_oxygenation()]% blood oxygenation" + var/oxygenation_string = "[H.get_blood_oxygenation()]% blood oxygenation" switch(H.get_blood_oxygenation()) if(BLOOD_VOLUME_OKAY to BLOOD_VOLUME_SAFE) oxygenation_string = "[oxygenation_string]" @@ -149,7 +149,18 @@ BREATH ANALYZER oxygenation_string = "[oxygenation_string]" if(-(INFINITY) to BLOOD_VOLUME_SURVIVE) oxygenation_string = "[oxygenation_string]" - dat += "[b]Blood pressure:[endb] [H.get_blood_pressure()] ([oxygenation_string])" + + var/blood_pressure_string + switch(H.get_blood_pressure_alert()) + if(1) + blood_pressure_string = "[H.get_blood_pressure()]" + if(2) + blood_pressure_string = "[H.get_blood_pressure()]" + if(3) + blood_pressure_string = "[H.get_blood_pressure()]" + if(4) + blood_pressure_string = "[H.get_blood_pressure()]" + dat += "[b]Blood pressure:[endb] [blood_pressure_string] ([oxygenation_string])" else if(H.isFBP()) dat += "[b]Blood pressure:[endb] [rand(118, 125)]/[rand(77, 85)] (100%)" @@ -157,7 +168,12 @@ BREATH ANALYZER dat += "[b]Blood pressure:[endb] N/A" // Body temperature. - dat += "Body temperature: [H.bodytemperature-T0C]°C ([H.bodytemperature*1.8-459.67]°F)" + var/temperature_string + if(H.bodytemperature < H.species.cold_level_1 || H.bodytemperature > H.species.heat_level_1) + temperature_string = "Body temperature: [H.bodytemperature-T0C]°C ([H.bodytemperature*1.8-459.67]°F)" + else + temperature_string = "Body temperature: [H.bodytemperature-T0C]°C ([H.bodytemperature*1.8-459.67]°F)" + dat += temperature_string // Traumatic shock. if(H.is_asystole()) @@ -168,7 +184,7 @@ BREATH ANALYZER if(H.getOxyLoss() > 50) dat += "[b]Severe oxygen deprivation detected.[endb]" if(H.getToxLoss() > 50) - dat += "[b]Major systemic organ failure detected.[endb]" + dat += "[b]Major systemic organ failure detected.[endb]" if(H.getFireLoss() > 50) dat += "[b]Severe burn damage detected.[endb]" if(H.getBruteLoss() > 50) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 0941fdbb9ac..bea02e6889a 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1864,11 +1864,50 @@ return 0 //Get fluffy numbers -/mob/living/carbon/human/proc/get_blood_pressure() +/mob/living/carbon/human/proc/blood_pressure() if(status_flags & FAKEDEATH) - return "[Floor(120+rand(-5,5))*0.25]/[Floor(80+rand(-5,5)*0.25)]" + return list(Floor(120+rand(-5,5))*0.25, Floor(80+rand(-5,5)*0.25)) var/blood_result = get_blood_circulation() - return "[Floor((120+rand(-5,5))*(blood_result/100))]/[Floor((80+rand(-5,5))*(blood_result/100))]" + return list(Floor((120+rand(-5,5))*(blood_result/100)), Floor((80+rand(-5,5))*(blood_result/100))) + +//Formats blood pressure for text display +/mob/living/carbon/human/proc/get_blood_pressure() + var/list/bp = blood_pressure() + return "[bp[1]]/[bp[2]]" + +//Works out blood pressure alert level -- not very accurate +/mob/living/carbon/human/proc/get_blood_pressure_alert() + var/list/bp = blood_pressure() + var/systolic_alert + var/diastolic_alert + + switch(bp[1]) + if(BP_HIGH_SYSTOLIC to INFINITY) + systolic_alert = 4 + if(BP_PRE_HIGH_SYSTOLIC to BP_HIGH_SYSTOLIC) + systolic_alert = 3 + if(BP_IDEAL_SYSTOLIC to BP_PRE_HIGH_SYSTOLIC) + systolic_alert = 2 + if(-INFINITY to BP_IDEAL_SYSTOLIC) + systolic_alert = 1 + + switch(bp[2]) + if(BP_HIGH_DIASTOLIC to INFINITY) + diastolic_alert = 4 + if(BP_PRE_HIGH_DIASTOLIC to BP_HIGH_DIASTOLIC) + diastolic_alert = 3 + if(BP_IDEAL_DIASTOLIC to BP_PRE_HIGH_DIASTOLIC) + diastolic_alert = 2 + if(-INFINITY to BP_IDEAL_DIASTOLIC) + diastolic_alert = 1 + if(systolic_alert == 4 || diastolic_alert == 4) + return 4 + if(systolic_alert == 3 || diastolic_alert == 3) + return 3 + if(systolic_alert == 1 || diastolic_alert == 1) + return 1 + if(systolic_alert <= 2 && diastolic_alert <= 2) + return 2 //Point at which you dun breathe no more. Separate from asystole crit, which is heart-related. /mob/living/carbon/human/nervous_system_failure() diff --git a/code/modules/mob/living/carbon/human/human_organs.dm b/code/modules/mob/living/carbon/human/human_organs.dm index c532e762c78..c4e4033349c 100644 --- a/code/modules/mob/living/carbon/human/human_organs.dm +++ b/code/modules/mob/living/carbon/human/human_organs.dm @@ -205,7 +205,7 @@ return TRUE return FALSE -/mob/living/carbon/human/proc/get_brain_status() +/mob/living/carbon/human/proc/get_brain_result() var/brain_result if(should_have_organ(BP_BRAIN)) var/obj/item/organ/internal/brain/brain = internal_organs_by_name[BP_BRAIN] @@ -215,7 +215,10 @@ brain_result = round(max(0,(1 - brain.damage/brain.max_damage)*100)) else brain_result = -1 + return brain_result +/mob/living/carbon/human/proc/get_brain_status() + var/brain_result = get_brain_result() switch(brain_result) if(0) brain_result = "none, patient is braindead" @@ -227,5 +230,5 @@ else if(brain_result <= 80) brain_result = "[brain_result]%" else - brain_result = "[brain_result]%" + brain_result = "[brain_result]%" return brain_result diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm index 7656f0ebbc5..50ab088e0f6 100644 --- a/code/modules/mob/living/living_defines.dm +++ b/code/modules/mob/living/living_defines.dm @@ -60,7 +60,7 @@ var/move_delay_mod = 0//Added to move delay, used for calculating movement speeds. Provides a centralised value for modifiers to alter - var/total_radiation // DON'T MODIFY THIS DIRECTLY. USE apply_radiation()! + var/total_radiation = 0 // DON'T MODIFY THIS DIRECTLY. USE apply_radiation()! var/cloaked = 0//Set to 1 by cloaking devices, optimises update_icons var/tesla_ignore = 0 // If true, mob is not affected by tesla bolts. diff --git a/html/changelogs/medical_scanner_colours.yml b/html/changelogs/medical_scanner_colours.yml new file mode 100644 index 00000000000..453cbb64984 --- /dev/null +++ b/html/changelogs/medical_scanner_colours.yml @@ -0,0 +1,43 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# maptweak +# spellcheck (typo fixes) +# experiment +# balance +# admin +# backend +# security +# refactor +################################# + +# Your name. +author: mikomyazaki + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. +# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. +changes: + - tweak: "Bodyscanner has a new Vue-UI." + - tweak: "Suit sensors UI now displays cell charge for IPCs." + - tweak: "Adds colours to the handheld medical scanner report." \ No newline at end of file diff --git a/vueui/src/components/view/mcomputer/medical/sensors.vue b/vueui/src/components/view/mcomputer/medical/sensors.vue index 67feabc07a8..0f7aadff805 100644 --- a/vueui/src/components/view/mcomputer/medical/sensors.vue +++ b/vueui/src/components/view/mcomputer/medical/sensors.vue @@ -3,7 +3,7 @@
Name
-
Pulse
+
Pulse rate or Cell Charge (IPCs)
Blood pressure
Oxygenation
Temperature
@@ -12,8 +12,9 @@
{{ sensor.name }} ({{ sensor.ass }})
-
{{ sensor.pulse }}
-
{{ sensor.pressure }}
+
{{ sensor.pulse }}
+
{{ sensor.cellCharge }}%
+
{{ sensor.pressure }}
N/A
{{ toOxyLabel(sensor.oxyg) }}
{{ roundTemp(sensor.bodytemp) }}
@@ -83,6 +84,26 @@ export default { default: return "neutral" } + }, + getPressureClass(tpressure) { + switch (tpressure) { + case 1: + return "bad" + case 2: + return "good" + case 3: + return "average" + case 4: + return "bad" + default: + return "neutral" + } + }, + getChargeClass(cellCharge) { + if(cellCharge > 10) { + return "highlight" + } + return "bad" } } } diff --git a/vueui/src/components/view/medical/bodyscanner.vue b/vueui/src/components/view/medical/bodyscanner.vue new file mode 100644 index 00000000000..bd0ec73ac09 --- /dev/null +++ b/vueui/src/components/view/medical/bodyscanner.vue @@ -0,0 +1,285 @@ + + + + + + \ No newline at end of file