From 36dc39053a6ff8b4b0f474b32eea62133d63399d Mon Sep 17 00:00:00 2001 From: MrMelbert <51863163+MrMelbert@users.noreply.github.com> Date: Sun, 4 Jan 2026 13:59:53 -0600 Subject: [PATCH] Medical larp: Adds vitals monitors to medbay (#94704) ## About The Pull Request Adds vitals monitors to medbay image These are wall mounted monitors that display a patient's state visually: - The doll on the left shows bodypart damage + missing bodyparts - The droplet next to the head shows blood level, from a bright red to a grey - The top bar shows heart rate (an approximation - stops when dead, speeds up in hard crit), as well as overall health - The second to the top shows respiration (stops when not breathing) - Second from the bottom bar shows oxyloss level - Bottom bar shows toxloss level You can **examine** a vitals display to get a condensed health analyzer output to your chat. (This lets the AI see health scans as well) They beep as patient conditions betters or worsens, though I didn't add any sound FX to it (yet), it's just a runechat message. They can link to most machines that accept an occupant - such as cryo cells and stasis beds - as well as operating tables. They are printable in two forms - basic and advanced, the latter requiring tech and does advanced scans on examine, rather than basic scans. The displays are mapped in every surgical theatre, as well as over most stasis beds and by a few cryo cells. ## Why It's Good For The Game I made these to cut down on juggling the health analyzer when trying to determine how a patient is faring. (And also to add to medical larp.) Currently while monitoring a patient's state you have to spam click them with your scanner and fill up your chat. This is cumbersome and distracts you from the rest of chat. The vitals display provides a visual feedback for how a patient is doing, no spam clicking needed unless you need specific details like... organ health. Some other benefits: - AI can now monitor patient health without a shell. - Other doctors don't need to crowd around a patient, they can step back to watch the screen instead. - Visitors don't need to rush in and print an analyzer to see how a patient is doing either. ## Changelog :cl: Melbert add: Adds vitals monitors, mapped into the medbay treatment center, cryogenics, and every surgical theatre. They act as wall mounted health scanners, providing visual feedback for a patient's health. /:cl: --- .../CatwalkStation/CatwalkStation_2023.dmm | 67 ++- .../map_files/Deltastation/DeltaStation2.dmm | 33 +- .../map_files/IceBoxStation/IceBoxStation.dmm | 22 +- _maps/map_files/MetaStation/MetaStation.dmm | 78 ++- .../map_files/NebulaStation/NebulaStation.dmm | 31 +- _maps/map_files/debug/runtimestation.dmm | 1 + _maps/map_files/generic/CentCom.dmm | 29 +- _maps/map_files/tramstation/tramstation.dmm | 41 +- _maps/map_files/wawastation/wawastation.dmm | 16 +- .../dcs/signals/signals_operating_computer.dm | 6 +- code/game/machinery/wall_vitals.dm | 538 ++++++++++++++++++ .../items/devices/scanners/health_analyzer.dm | 7 +- code/game/objects/structures/tables_racks.dm | 1 + .../research/designs/medical_designs.dm | 28 + .../research/techweb/nodes/medbay_nodes.dm | 58 +- icons/obj/machines/vitals_monitor.dmi | Bin 0 -> 1176 bytes tgstation.dme | 1 + 17 files changed, 787 insertions(+), 170 deletions(-) create mode 100644 code/game/machinery/wall_vitals.dm create mode 100644 icons/obj/machines/vitals_monitor.dmi diff --git a/_maps/map_files/CatwalkStation/CatwalkStation_2023.dmm b/_maps/map_files/CatwalkStation/CatwalkStation_2023.dmm index 1b2d3a0e6b5..55a0ab29350 100644 --- a/_maps/map_files/CatwalkStation/CatwalkStation_2023.dmm +++ b/_maps/map_files/CatwalkStation/CatwalkStation_2023.dmm @@ -2620,7 +2620,7 @@ /obj/effect/turf_decal/trimline/blue/filled/mid_joiner{ dir = 8 }, -/obj/machinery/status_display/evac/directional/west, +/obj/machinery/newscaster/directional/west, /turf/open/floor/iron/white/textured_large, /area/station/medical/medbay/central) "aKJ" = ( @@ -5968,10 +5968,10 @@ "bEU" = ( /obj/structure/extinguisher_cabinet/directional/west, /obj/machinery/camera/autoname/directional/south, -/obj/machinery/light_switch/directional/south, /obj/machinery/computer/operating{ dir = 4 }, +/obj/machinery/vitals_reader/directional/south, /turf/open/floor/iron/dark/textured_corner{ dir = 4 }, @@ -16264,10 +16264,7 @@ /obj/effect/turf_decal/tile/blue/opposingcorners{ dir = 1 }, -/obj/structure/sign/warning/cold_temp/directional/east{ - name = "Cryogenics"; - pixel_x = 26 - }, +/obj/structure/sign/warning/cold_temp/directional/east, /turf/open/floor/iron/white, /area/station/medical/medbay/central) "eta" = ( @@ -20589,7 +20586,7 @@ dir = 8 }, /obj/effect/turf_decal/trimline/blue/filled/mid_joiner, -/obj/machinery/newscaster/directional/west, +/obj/machinery/vitals_reader/directional/west, /turf/open/floor/iron/white/textured_large, /area/station/medical/medbay/central) "fFq" = ( @@ -22772,7 +22769,7 @@ /obj/effect/turf_decal/trimline/blue/filled/mid_joiner{ dir = 8 }, -/obj/machinery/status_display/ai/directional/west, +/obj/machinery/airalarm/directional/west, /turf/open/floor/iron/white/textured_large, /area/station/medical/medbay/central) "ghV" = ( @@ -32468,9 +32465,6 @@ network = list("ss13","medbay"); c_tag = "Medbay - Lower Central Hallway" }, -/obj/machinery/firealarm/directional/west{ - pixel_x = -20 - }, /turf/open/floor/iron/white, /area/station/medical/medbay/central) "iKm" = ( @@ -38122,9 +38116,6 @@ }, /obj/structure/tank_holder/extinguisher, /obj/structure/cable, -/obj/machinery/light_switch/directional/west{ - pixel_x = -22 - }, /turf/open/floor/iron/dark, /area/station/medical/cryo) "knj" = ( @@ -46936,11 +46927,6 @@ /turf/open/floor/iron, /area/station/cargo/storage) "mDX" = ( -/obj/structure/bed/pod{ - desc = "An old medical bed, just waiting for replacement with something up to date."; - name = "medical bed"; - dir = 1 - }, /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 8 }, @@ -46948,6 +46934,9 @@ /obj/effect/turf_decal/trimline/blue/filled/mid_joiner{ dir = 8 }, +/obj/machinery/stasis{ + dir = 4 + }, /turf/open/floor/iron/white/textured_large, /area/station/medical/medbay/central) "mDZ" = ( @@ -52406,8 +52395,13 @@ }, /area/station/hallway/primary/fore) "ofr" = ( -/obj/machinery/firealarm/directional/east, +/obj/machinery/firealarm/directional/east{ + pixel_y = -6 + }, /obj/machinery/atmospherics/components/unary/thermomachine/freezer, +/obj/machinery/light_switch/directional/east{ + pixel_y = 4 + }, /turf/open/floor/iron/dark, /area/station/medical/cryo) "ofs" = ( @@ -55231,7 +55225,6 @@ /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 9 }, -/obj/machinery/airalarm/directional/west, /obj/item/radio/intercom/directional/north, /obj/effect/turf_decal/trimline/blue/filled/mid_joiner{ dir = 1 @@ -55240,6 +55233,7 @@ dir = 8 }, /obj/item/stack/medical/mesh, +/obj/machinery/vitals_reader/directional/west, /turf/open/floor/iron/white/textured_large, /area/station/medical/medbay/central) "oTZ" = ( @@ -71461,6 +71455,7 @@ dir = 1 }, /obj/machinery/computer/crew, +/obj/machinery/status_display/ai/directional/north, /turf/open/floor/iron/white, /area/station/medical/medbay/central) "tqv" = ( @@ -73952,10 +73947,8 @@ /obj/structure/disposalpipe/trunk{ dir = 8 }, -/obj/machinery/firealarm/directional/east{ - pixel_x = 20 - }, /obj/machinery/disposal/bin, +/obj/machinery/firealarm/directional/east, /turf/open/floor/iron/dark/smooth_large, /area/station/medical/surgery) "tYE" = ( @@ -78116,6 +78109,17 @@ /obj/effect/turf_decal/trimline/dark_green, /turf/open/floor/iron/dark, /area/station/engineering/atmos/upper) +"vcG" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 1 + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/machinery/firealarm/directional/east, +/turf/open/floor/iron/white, +/area/station/medical/medbay/central) "vcH" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -82752,7 +82756,10 @@ /turf/open/floor/iron/dark, /area/station/medical/cryo) "wqq" = ( -/obj/machinery/stasis, +/obj/structure/bed/pod{ + desc = "An old medical bed, just waiting for replacement with something up to date."; + name = "medical bed" + }, /turf/open/floor/iron/white/textured_large, /area/station/medical/medbay/central) "wqB" = ( @@ -83753,6 +83760,7 @@ /obj/machinery/computer/operating{ dir = 8 }, +/obj/machinery/vitals_reader/directional/south, /turf/open/floor/iron/dark/textured_corner{ dir = 1 }, @@ -86459,6 +86467,7 @@ dir = 1 }, /obj/effect/turf_decal/siding/blue, +/obj/structure/tank_holder/extinguisher, /turf/open/floor/iron/white, /area/station/medical/medbay/central) "xsh" = ( @@ -88691,10 +88700,10 @@ /obj/item/storage/box/gloves{ pixel_y = 10 }, -/obj/structure/extinguisher_cabinet/directional/west, /obj/effect/turf_decal/trimline/blue/filled/mid_joiner{ dir = 8 }, +/obj/machinery/status_display/evac/directional/west, /turf/open/floor/iron/white/textured_large, /area/station/medical/medbay/central) "xUT" = ( @@ -119131,7 +119140,7 @@ tYC qdd uSP wER -oZn +ccN xeM fYF kLI @@ -119643,8 +119652,8 @@ xsD viV iKa uNT -pMm xeM +pMm xeM xeM siR @@ -119902,7 +119911,7 @@ oOS aJR pTV eZE -gPC +vcG gPC ovh ljq diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index 17f79580956..e671c1cc88f 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -31136,7 +31136,6 @@ /turf/open/floor/iron, /area/station/commons/storage/tools) "hJn" = ( -/obj/structure/extinguisher_cabinet/directional/north, /obj/item/stack/medical/gauze, /obj/item/stack/medical/suture, /obj/machinery/camera/directional/north{ @@ -31146,6 +31145,7 @@ }, /obj/structure/table/reinforced/rglass, /obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/firealarm/directional/north, /turf/open/floor/iron, /area/station/medical/treatment_center) "hJo" = ( @@ -36792,6 +36792,7 @@ }, /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/effect/turf_decal/bot_white, +/obj/machinery/vitals_reader/directional/south, /turf/open/floor/iron/dark, /area/station/medical/surgery/theatre) "jdg" = ( @@ -38037,6 +38038,7 @@ /obj/item/storage/box/rxglasses, /obj/structure/table/reinforced/rglass, /obj/effect/turf_decal/tile/blue/fourcorners, +/obj/item/radio/intercom/directional/south, /turf/open/floor/iron, /area/station/medical/treatment_center) "jsh" = ( @@ -40141,7 +40143,6 @@ /area/station/hallway/secondary/exit/departure_lounge) "jRJ" = ( /obj/machinery/defibrillator_mount/directional/south, -/obj/item/radio/intercom/directional/west, /obj/item/emergency_bed{ pixel_y = 6 }, @@ -40150,6 +40151,7 @@ }, /obj/structure/table/reinforced/rglass, /obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/vitals_reader/directional/west, /turf/open/floor/iron, /area/station/medical/treatment_center) "jRL" = ( @@ -44333,6 +44335,7 @@ /obj/item/reagent_containers/syringe, /obj/structure/table/reinforced/rglass, /obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/vitals_reader/directional/west, /turf/open/floor/iron, /area/station/medical/treatment_center) "kXb" = ( @@ -46091,7 +46094,6 @@ /area/station/maintenance/disposal/incinerator) "ltz" = ( /obj/machinery/defibrillator_mount/directional/north, -/obj/item/radio/intercom/directional/east, /obj/item/storage/box/bodybags{ pixel_x = 3; pixel_y = 3 @@ -46099,6 +46101,7 @@ /obj/item/storage/box/masks, /obj/structure/table/reinforced/rglass, /obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/vitals_reader/directional/east, /turf/open/floor/iron, /area/station/medical/treatment_center) "ltD" = ( @@ -47417,13 +47420,6 @@ }, /turf/open/floor/iron, /area/station/cargo/warehouse) -"lIG" = ( -/obj/structure/table/optable, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/status_display/ai/directional/south, -/obj/effect/turf_decal/bot_red, -/turf/open/floor/iron/dark, -/area/station/medical/surgery/theatre) "lII" = ( /obj/structure/railing, /obj/structure/chair/sofa/bench{ @@ -54928,11 +54924,11 @@ /area/station/hallway/primary/central/fore) "nFO" = ( /obj/machinery/firealarm/directional/east, -/obj/structure/extinguisher_cabinet/directional/north, /obj/item/kirbyplants/random, /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/structure/extinguisher_cabinet/directional/north, /turf/open/floor/iron, /area/station/medical/storage) "nFV" = ( @@ -55254,12 +55250,12 @@ /turf/open/floor/iron, /area/station/security/prison) "nJh" = ( -/obj/machinery/firealarm/directional/north, /obj/item/stack/medical/gauze, /obj/item/stack/medical/mesh, /obj/structure/table/reinforced/rglass, /obj/effect/turf_decal/tile/blue/fourcorners, /obj/machinery/light/cold/directional/north, +/obj/item/radio/intercom/directional/north, /turf/open/floor/iron, /area/station/medical/treatment_center) "nJj" = ( @@ -72194,6 +72190,7 @@ }, /obj/structure/extinguisher_cabinet/directional/west, /obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/firealarm/directional/south, /turf/open/floor/iron, /area/station/medical/surgery/theatre) "rSZ" = ( @@ -73809,7 +73806,6 @@ }, /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/machinery/light/small/directional/east, -/obj/structure/sign/poster/official/random/directional/east, /turf/open/floor/iron/textured, /area/station/medical/medbay) "snE" = ( @@ -75723,7 +75719,6 @@ pixel_x = -3 }, /obj/structure/window/reinforced/spawner/directional/west, -/obj/machinery/status_display/evac/directional/south, /obj/machinery/door/window/left/directional/north{ name = "Surgical Supplies"; req_access = list("surgery") @@ -81063,7 +81058,7 @@ /obj/machinery/computer/operating, /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/effect/turf_decal/bot_white, -/obj/machinery/firealarm/directional/east, +/obj/machinery/vitals_reader/directional/north, /turf/open/floor/iron/dark, /area/station/medical/surgery/theatre) "ubL" = ( @@ -82767,6 +82762,7 @@ /obj/structure/bodycontainer/morgue{ dir = 2 }, +/obj/machinery/status_display/evac/directional/north, /turf/open/floor/iron/dark/textured_half{ dir = 1 }, @@ -83139,10 +83135,10 @@ /obj/effect/turf_decal/trimline/neutral/mid_joiner{ dir = 8 }, -/obj/machinery/status_display/evac/directional/north, /obj/structure/bodycontainer/morgue{ dir = 2 }, +/obj/machinery/status_display/ai/directional/north, /turf/open/floor/iron/dark/textured_half{ dir = 1 }, @@ -84008,7 +84004,6 @@ /turf/open/floor/iron, /area/station/engineering/break_room) "uLx" = ( -/obj/machinery/status_display/ai/directional/south, /obj/effect/turf_decal/siding/thinplating/dark/corner, /obj/effect/turf_decal/siding/thinplating/dark{ dir = 8 @@ -91202,6 +91197,7 @@ dir = 8 }, /obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/structure/extinguisher_cabinet/directional/east, /turf/open/floor/iron, /area/station/medical/treatment_center) "wCc" = ( @@ -95027,7 +95023,6 @@ /area/station/security/detectives_office/private_investigators_office) "xAr" = ( /obj/structure/mannequin/skeleton, -/obj/machinery/status_display/ai/directional/north, /obj/effect/turf_decal/tile/dark_blue/half/contrasted{ dir = 1 }, @@ -138664,7 +138659,7 @@ tOS fCD jqJ jqJ -lIG +fCD qYL xAr xBJ diff --git a/_maps/map_files/IceBoxStation/IceBoxStation.dmm b/_maps/map_files/IceBoxStation/IceBoxStation.dmm index bf6538a41c4..cd3eaa228e7 100644 --- a/_maps/map_files/IceBoxStation/IceBoxStation.dmm +++ b/_maps/map_files/IceBoxStation/IceBoxStation.dmm @@ -6753,7 +6753,6 @@ /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/newscaster/directional/south, /obj/machinery/camera/directional/south{ c_tag = "Medbay North"; network = list("ss13","medbay") @@ -9300,6 +9299,7 @@ c_tag = "Surgery A"; network = list("ss13","medbay") }, +/obj/machinery/newscaster/directional/north, /turf/open/floor/iron/white, /area/station/medical/surgery/fore) "cyA" = ( @@ -13277,7 +13277,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/firealarm/directional/north, +/obj/machinery/airalarm/directional/north, /turf/open/floor/iron/white, /area/station/medical/medbay/central) "dDV" = ( @@ -22303,6 +22303,7 @@ }, /obj/item/reagent_containers/syringe, /obj/effect/turf_decal/tile/blue/full, +/obj/machinery/vitals_reader/directional/north, /turf/open/floor/iron/large, /area/station/medical/treatment_center) "gkY" = ( @@ -41573,6 +41574,7 @@ /area/station/tcommsat/computer) "lIP" = ( /obj/effect/mapping_helpers/trapdoor_placer, +/obj/item/radio/intercom/directional/north, /turf/open/floor/catwalk_floor/iron_white, /area/station/medical/medbay/central) "lIQ" = ( @@ -43221,10 +43223,10 @@ /area/station/hallway/secondary/entry) "mjH" = ( /obj/structure/table/optable, -/obj/machinery/newscaster/directional/east, /obj/effect/turf_decal/tile/blue/half/contrasted{ dir = 4 }, +/obj/machinery/vitals_reader/directional/east, /turf/open/floor/iron/white, /area/station/medical/surgery/fore) "mjI" = ( @@ -47054,10 +47056,10 @@ /area/icemoon/surface/outdoors/less_spawns) "nqd" = ( /obj/structure/table/optable, -/obj/machinery/newscaster/directional/east, /obj/effect/turf_decal/tile/blue/half/contrasted{ dir = 4 }, +/obj/machinery/vitals_reader/directional/east, /turf/open/floor/iron/white, /area/station/medical/surgery/aft) "nqn" = ( @@ -49062,7 +49064,7 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/trimline/blue/filled/line, -/obj/machinery/airalarm/directional/south, +/obj/machinery/newscaster/directional/south, /turf/open/floor/iron/white, /area/station/medical/medbay/central) "nRm" = ( @@ -54201,6 +54203,7 @@ c_tag = "Surgery B"; network = list("ss13","medbay") }, +/obj/machinery/newscaster/directional/south, /turf/open/floor/iron/white, /area/station/medical/surgery/aft) "pkf" = ( @@ -57463,6 +57466,7 @@ /obj/item/reagent_containers/syringe, /obj/effect/turf_decal/tile/blue/full, /obj/item/radio/intercom/directional/west, +/obj/machinery/vitals_reader/directional/north, /turf/open/floor/iron/large, /area/station/medical/treatment_center) "qfs" = ( @@ -71052,12 +71056,6 @@ /obj/effect/spawner/random/maintenance, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"tXc" = ( -/obj/effect/turf_decal/trimline/blue/filled/line, -/obj/structure/cable, -/obj/item/radio/intercom/directional/south, -/turf/open/floor/iron/white, -/area/station/medical/medbay/central) "tXh" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, @@ -254872,7 +254870,7 @@ mjI fCM dIL hDq -tXc +pZm lwQ gkX oeW diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index e8234f1482a..dd8fc524563 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -1099,7 +1099,6 @@ /obj/structure/disposalpipe/segment{ dir = 10 }, -/obj/structure/cable, /turf/open/floor/iron/white/smooth_half, /area/station/medical/cryo) "avc" = ( @@ -1539,7 +1538,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/obj/machinery/firealarm/directional/west, +/obj/machinery/airalarm/directional/west, /turf/open/floor/iron/dark, /area/station/medical/cryo) "aDa" = ( @@ -3600,6 +3599,7 @@ /obj/structure/table/glass, /obj/item/surgicaldrill, /obj/item/toy/figure/paramedic, +/obj/item/radio/intercom/directional/south, /turf/open/floor/iron/dark/smooth_large, /area/station/medical/paramedic) "bnx" = ( @@ -5921,8 +5921,8 @@ dir = 4 }, /obj/machinery/suit_storage_unit/medical, -/obj/structure/extinguisher_cabinet/directional/west, -/obj/structure/sign/clock/directional/north, +/obj/machinery/airalarm/directional/west, +/obj/machinery/digital_clock/directional/north, /turf/open/floor/iron/dark/smooth_large, /area/station/medical/paramedic) "ccc" = ( @@ -10777,7 +10777,6 @@ dir = 1 }, /obj/machinery/duct, -/obj/structure/cable, /turf/open/floor/iron/white/smooth_half, /area/station/medical/cryo) "dOA" = ( @@ -17817,7 +17816,7 @@ "gmN" = ( /obj/structure/table/glass, /obj/effect/turf_decal/tile/blue/fourcorners, -/obj/machinery/status_display/evac/directional/west, +/obj/machinery/newscaster/directional/west, /turf/open/floor/iron/white, /area/station/medical/treatment_center) "gmS" = ( @@ -18209,7 +18208,6 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/structure/cable, /turf/open/floor/iron/white/smooth_half, /area/station/medical/cryo) "gtm" = ( @@ -18353,7 +18351,7 @@ dir = 10 }, /obj/structure/cable, -/obj/structure/sign/eyechart/directional/west, +/obj/machinery/power/apc/auto_name/directional/west, /turf/open/floor/iron/white, /area/station/medical/cryo) "gvg" = ( @@ -24340,7 +24338,8 @@ "iwj" = ( /obj/structure/table/glass, /obj/effect/turf_decal/tile/blue/fourcorners, -/obj/machinery/status_display/evac/directional/east, +/obj/machinery/vitals_reader/directional/north, +/obj/machinery/newscaster/directional/east, /turf/open/floor/iron/white, /area/station/medical/treatment_center) "iwt" = ( @@ -24532,7 +24531,6 @@ /turf/open/floor/iron/dark, /area/station/security/courtroom) "izs" = ( -/obj/structure/cable, /obj/structure/sink/directional/east, /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, /obj/effect/turf_decal/tile/blue/fourcorners, @@ -25665,8 +25663,7 @@ "iRy" = ( /obj/structure/table/reinforced, /obj/machinery/cell_charger, -/obj/item/radio/intercom/directional/west, -/obj/machinery/firealarm/directional/north, +/obj/machinery/firealarm/directional/west, /turf/open/floor/iron/dark, /area/station/medical/storage) "iRW" = ( @@ -29456,6 +29453,7 @@ c_tag = "Medbay Storage"; network = list("ss13","medbay") }, +/obj/item/radio/intercom/directional/north, /turf/open/floor/iron/dark, /area/station/medical/storage) "kdx" = ( @@ -30163,8 +30161,8 @@ "kpi" = ( /obj/structure/table/glass, /obj/effect/turf_decal/tile/blue/fourcorners, -/obj/machinery/status_display/ai/directional/west, -/obj/item/radio/intercom/directional/north, +/obj/machinery/vitals_reader/directional/north, +/obj/item/radio/intercom/directional/west, /turf/open/floor/iron/white, /area/station/medical/treatment_center) "kpB" = ( @@ -30925,6 +30923,7 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/light/directional/west, +/obj/item/radio/intercom/directional/west, /turf/open/floor/iron/white, /area/station/medical/medbay/central) "kDb" = ( @@ -32261,14 +32260,6 @@ }, /turf/open/floor/iron, /area/station/commons/fitness/recreation) -"kZv" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/sign/poster/contraband/random/directional/east, -/obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer5, -/turf/open/floor/plating, -/area/station/maintenance/port/aft) "kZx" = ( /turf/closed/wall, /area/station/science/lab) @@ -32456,8 +32447,9 @@ "ldm" = ( /obj/structure/table/glass, /obj/effect/turf_decal/tile/blue/fourcorners, -/obj/machinery/status_display/evac/directional/west, /obj/effect/spawner/surgery_tray/full, +/obj/machinery/digital_clock/directional/north, +/obj/structure/sign/poster/official/cleanliness/directional/west, /turf/open/floor/iron/white, /area/station/medical/surgery/theatre) "lds" = ( @@ -33531,10 +33523,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/door/firedoor, /obj/effect/turf_decal/tile/blue/fourcorners, -/obj/machinery/door/airlock/medical/glass{ - name = "Cryogenics Bay" - }, /obj/effect/mapping_helpers/airlock/access/all/medical/paramedic, +/obj/machinery/door/airlock/medical/glass{ + name = "Paramedic Dispatch Room" + }, /turf/open/floor/iron/dark, /area/station/medical/paramedic) "lyu" = ( @@ -35808,8 +35800,6 @@ /area/station/science/research) "mpV" = ( /obj/structure/table/glass, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/structure/cable, /obj/item/reagent_containers/cup/beaker/cryoxadone{ pixel_x = -6; pixel_y = 10 @@ -35832,6 +35822,7 @@ }, /obj/effect/turf_decal/tile/blue/fourcorners, /obj/item/radio/intercom/directional/west, +/obj/machinery/vitals_reader/directional/north, /turf/open/floor/iron/white, /area/station/medical/cryo) "mqe" = ( @@ -38768,7 +38759,6 @@ "nnE" = ( /obj/structure/table/glass, /obj/effect/turf_decal/tile/blue/fourcorners, -/obj/machinery/status_display/evac/directional/west, /obj/machinery/digital_clock/directional/south, /obj/effect/spawner/surgery_tray/full, /turf/open/floor/iron/white, @@ -45151,8 +45141,7 @@ "pyU" = ( /obj/structure/table/glass, /obj/effect/turf_decal/tile/blue/fourcorners, -/obj/machinery/status_display/ai/directional/east, -/obj/item/radio/intercom/directional/south, +/obj/item/radio/intercom/directional/east, /turf/open/floor/iron/white, /area/station/medical/treatment_center) "pyY" = ( @@ -45865,6 +45854,7 @@ /obj/effect/turf_decal/trimline/blue/filled/corner{ dir = 8 }, +/obj/machinery/airalarm/directional/west, /turf/open/floor/iron/white, /area/station/medical/medbay/central) "pMd" = ( @@ -48313,7 +48303,6 @@ /obj/machinery/computer/crew{ dir = 1 }, -/obj/machinery/airalarm/directional/west, /obj/machinery/camera/directional/south, /turf/open/floor/iron/dark/smooth_large, /area/station/medical/paramedic) @@ -48809,12 +48798,15 @@ dir = 1 }, /obj/machinery/portable_atmospherics/canister/anesthetic_mix, -/obj/machinery/light_switch/directional/east{ - pixel_x = 21 - }, /obj/effect/turf_decal/stripes/end{ dir = 1 }, +/obj/machinery/light_switch/directional/east{ + pixel_y = 4 + }, +/obj/machinery/firealarm/directional/east{ + pixel_y = -6 + }, /turf/open/floor/iron/dark, /area/station/medical/cryo) "qNk" = ( @@ -50395,7 +50387,6 @@ /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 8 }, -/obj/machinery/airalarm/directional/west, /obj/machinery/door/firedoor, /turf/open/floor/iron/white, /area/station/medical/medbay/central) @@ -50502,6 +50493,7 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/light/cold/directional/west, +/obj/machinery/firealarm/directional/west, /turf/open/floor/iron/white, /area/station/medical/medbay/central) "rpx" = ( @@ -51420,6 +51412,7 @@ /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 9 }, +/obj/item/radio/intercom/directional/north, /turf/open/floor/iron/white, /area/station/medical/medbay/central) "rEu" = ( @@ -52292,7 +52285,7 @@ /turf/open/floor/wood, /area/station/commons/dorms) "rUp" = ( -/obj/item/radio/intercom/directional/east, +/obj/structure/sign/eyechart/directional/east, /turf/open/floor/iron/white, /area/station/medical/medbay/central) "rUE" = ( @@ -53325,6 +53318,7 @@ "snb" = ( /obj/structure/table/optable, /obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/vitals_reader/directional/west, /turf/open/floor/iron/white, /area/station/medical/surgery/theatre) "snt" = ( @@ -56879,6 +56873,7 @@ }, /obj/structure/table/glass, /obj/machinery/fax, +/obj/machinery/airalarm/directional/east, /turf/open/floor/iron/white, /area/station/medical/medbay/central) "tzJ" = ( @@ -58584,7 +58579,7 @@ network = list("ss13","medbay") }, /obj/effect/turf_decal/tile/blue/fourcorners, -/obj/machinery/airalarm/directional/north, +/obj/machinery/vitals_reader/directional/north, /turf/open/floor/iron/white, /area/station/medical/cryo) "ucc" = ( @@ -69529,6 +69524,7 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/spawner/random/structure/steam_vent, /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/hidden/layer5, +/obj/structure/sign/poster/contraband/random/directional/east, /turf/open/floor/plating, /area/station/maintenance/port/aft) "xLM" = ( @@ -69930,11 +69926,11 @@ "xST" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/item/radio/intercom/directional/west, /obj/machinery/light/directional/west, /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 8 }, +/obj/machinery/status_display/ai/directional/west, /turf/open/floor/iron/white, /area/station/medical/medbay/central) "xTg" = ( @@ -70873,10 +70869,10 @@ /turf/open/floor/iron/white/smooth_large, /area/station/medical/chemistry) "yiB" = ( -/obj/machinery/firealarm/directional/west, /obj/effect/turf_decal/trimline/blue/filled/warning, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/status_display/ai/directional/west, /turf/open/floor/iron/white, /area/station/medical/medbay/central) "yiH" = ( @@ -88929,7 +88925,7 @@ xNq bQm xNq mbx -kZv +xNq xNq xLB mbx diff --git a/_maps/map_files/NebulaStation/NebulaStation.dmm b/_maps/map_files/NebulaStation/NebulaStation.dmm index 268e8cd2164..68cda7ae99a 100644 --- a/_maps/map_files/NebulaStation/NebulaStation.dmm +++ b/_maps/map_files/NebulaStation/NebulaStation.dmm @@ -14853,11 +14853,11 @@ /obj/effect/turf_decal/tile/blue/anticorner/contrasted{ dir = 4 }, -/obj/machinery/digital_clock/directional/east, /obj/structure/bed/medical{ dir = 4 }, /obj/item/bedsheet/medical, +/obj/machinery/vitals_reader/directional/east, /turf/open/floor/iron/white, /area/station/medical/treatment_center) "ckV" = ( @@ -24174,6 +24174,9 @@ /obj/effect/turf_decal/siding/dark/end{ dir = 8 }, +/obj/machinery/vitals_reader/directional/west{ + id_tag = "uppercryo" + }, /turf/open/floor/iron/dark/small, /area/station/medical/cryo) "dDn" = ( @@ -35287,6 +35290,9 @@ /obj/structure/disposalpipe/segment{ dir = 6 }, +/obj/machinery/vitals_reader/directional/west{ + id_tag = "lowercryo" + }, /turf/open/floor/iron/dark/small, /area/station/medical/cryo) "fkb" = ( @@ -50307,6 +50313,7 @@ dir = 1 }, /obj/machinery/digital_clock/directional/south, +/obj/machinery/vitals_reader/directional/east, /turf/open/floor/iron/showroomfloor, /area/station/medical/surgery/theatre) "hud" = ( @@ -75513,6 +75520,7 @@ /obj/machinery/computer/operating{ dir = 1 }, +/obj/machinery/vitals_reader/directional/west, /turf/open/floor/iron/showroomfloor, /area/station/medical/surgery/theatre) "lfV" = ( @@ -78157,16 +78165,17 @@ "lAm" = ( /obj/machinery/defibrillator_mount/directional/south, /obj/effect/turf_decal/tile/blue/anticorner/contrasted, -/obj/machinery/digital_clock/directional/east, /obj/structure/bed/medical{ dir = 4 }, /obj/item/bedsheet/medical, +/obj/machinery/vitals_reader/directional/east, /turf/open/floor/iron/white, /area/station/medical/treatment_center) "lAq" = ( /obj/machinery/cryo_cell{ - dir = 4 + dir = 4; + id_tag = "lowercryo" }, /obj/effect/turf_decal/bot_white{ color = "#52B4E9" @@ -95271,6 +95280,17 @@ /obj/machinery/power/apc/auto_name/directional/north, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) +"ogk" = ( +/obj/machinery/cryo_cell{ + dir = 4; + id_tag = "uppercryo" + }, +/obj/effect/turf_decal/bot_white{ + color = "#52B4E9" + }, +/obj/structure/sign/warning/cold_temp/directional/west, +/turf/open/floor/iron/dark/textured, +/area/station/medical/cryo) "ogl" = ( /obj/structure/fluff/paper, /obj/structure/sign/poster/random/directional/south, @@ -118264,6 +118284,9 @@ /obj/item/bedsheet/medical{ dir = 4 }, +/obj/machinery/digital_clock/directional/north{ + pixel_y = 36 + }, /turf/open/floor/iron/white, /area/station/medical/treatment_center) "rwS" = ( @@ -254375,7 +254398,7 @@ aqQ gyf nHB dCZ -lAq +ogk tMT lAq fjZ diff --git a/_maps/map_files/debug/runtimestation.dmm b/_maps/map_files/debug/runtimestation.dmm index f7bdd888516..95d31cc2042 100644 --- a/_maps/map_files/debug/runtimestation.dmm +++ b/_maps/map_files/debug/runtimestation.dmm @@ -2522,6 +2522,7 @@ /obj/effect/turf_decal/tile/blue{ dir = 8 }, +/obj/machinery/vitals_reader/directional/south, /turf/open/floor/iron/white/corner, /area/station/medical/medbay) "SC" = ( diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm index f3e01239f79..ab2590e6901 100644 --- a/_maps/map_files/generic/CentCom.dmm +++ b/_maps/map_files/generic/CentCom.dmm @@ -5769,22 +5769,11 @@ /turf/open/floor/iron, /area/centcom/central_command_areas/control) "zH" = ( -/obj/item/scalpel{ - pixel_y = 12 - }, -/obj/item/circular_saw, -/obj/item/retractor{ - pixel_x = 4 - }, -/obj/item/hemostat{ - pixel_x = -4 - }, -/obj/item/clothing/gloves/latex, -/obj/item/clothing/mask/surgical, /obj/structure/table/reinforced, /obj/effect/turf_decal/tile/blue/opposingcorners{ dir = 1 }, +/obj/item/surgery_tray/full/advanced, /turf/open/floor/iron/white, /area/centcom/central_command_areas/control) "zI" = ( @@ -5932,7 +5921,6 @@ /area/centcom/central_command_areas/control) "Aq" = ( /obj/structure/table/optable, -/obj/item/surgical_drapes, /obj/effect/turf_decal/tile/blue/opposingcorners{ dir = 1 }, @@ -6052,10 +6040,10 @@ /obj/machinery/computer/operating{ dir = 4 }, -/obj/machinery/status_display/ai/directional/west, /obj/effect/turf_decal/tile/blue/opposingcorners{ dir = 1 }, +/obj/machinery/vitals_reader/directional/west, /turf/open/floor/iron/white, /area/centcom/central_command_areas/control) "AV" = ( @@ -6208,7 +6196,6 @@ "BF" = ( /obj/item/defibrillator/loaded, /obj/structure/table/reinforced, -/obj/machinery/status_display/evac/directional/west, /obj/effect/turf_decal/tile/blue/opposingcorners{ dir = 1 }, @@ -6249,6 +6236,7 @@ /obj/effect/turf_decal/tile/blue/opposingcorners{ dir = 1 }, +/obj/machinery/vitals_reader/directional/south, /turf/open/floor/iron/white, /area/centcom/central_command_areas/control) "BH" = ( @@ -6262,7 +6250,6 @@ /area/centcom/central_command_areas/control) "BI" = ( /obj/machinery/light/directional/south, -/obj/structure/noticeboard/directional/south, /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -6959,7 +6946,6 @@ /area/centcom/central_command_areas/evacuation/ship) "Fg" = ( /obj/structure/closet/crate/bin, -/obj/machinery/status_display/evac/directional/south, /obj/machinery/status_display/evac/directional/west, /obj/effect/turf_decal/tile/green/anticorner/contrasted{ dir = 8 @@ -9421,6 +9407,7 @@ /obj/effect/turf_decal/tile/blue/opposingcorners{ dir = 1 }, +/obj/machinery/vitals_reader/directional/south, /turf/open/floor/iron/white, /area/centcom/central_command_areas/control) "RA" = ( @@ -57319,9 +57306,9 @@ zI Ab xN BG -iu +io Tw -iu +io uc io iu @@ -58347,9 +58334,9 @@ zJ Ab xN Ry -iu +io oW -iu +io uc io io diff --git a/_maps/map_files/tramstation/tramstation.dmm b/_maps/map_files/tramstation/tramstation.dmm index 27fa9526b94..2b4d6f12f72 100644 --- a/_maps/map_files/tramstation/tramstation.dmm +++ b/_maps/map_files/tramstation/tramstation.dmm @@ -15128,6 +15128,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/science/ordnance) +"edV" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 8 + }, +/obj/machinery/portable_atmospherics/canister/anesthetic_mix, +/obj/machinery/status_display/evac/directional/south, +/turf/open/floor/iron/dark, +/area/station/medical/treatment_center) "eep" = ( /turf/open/floor/plating, /area/station/service/barber) @@ -27540,6 +27548,7 @@ /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 5 }, +/obj/machinery/vitals_reader/directional/east, /turf/open/floor/iron/white, /area/station/medical/treatment_center) "iOi" = ( @@ -30474,7 +30483,6 @@ dir = 5 }, /obj/item/radio/intercom/directional/east, -/obj/machinery/status_display/evac/directional/north, /obj/machinery/light/directional/east, /turf/open/floor/iron/white, /area/station/medical/treatment_center) @@ -33626,6 +33634,9 @@ dir = 1 }, /obj/machinery/light/directional/south, +/obj/machinery/vitals_reader/directional/south{ + id_tag = "lowersurgery" + }, /turf/open/floor/iron/white, /area/station/medical/surgery/aft) "kIi" = ( @@ -39844,7 +39855,6 @@ /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 9 }, -/obj/machinery/status_display/ai/directional/north, /obj/machinery/light/directional/west, /turf/open/floor/iron/white, /area/station/medical/treatment_center) @@ -40155,7 +40165,9 @@ /turf/open/floor/iron, /area/station/security/prison) "mXd" = ( -/obj/structure/table/optable, +/obj/structure/table/optable{ + id_tag = "uppersurgery" + }, /obj/effect/turf_decal/trimline/blue/filled/line, /turf/open/floor/iron/white, /area/station/medical/surgery/fore) @@ -40589,7 +40601,9 @@ /turf/open/floor/glass/reinforced, /area/station/security/brig) "neE" = ( -/obj/structure/table/optable, +/obj/structure/table/optable{ + id_tag = "lowersurgery" + }, /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 1 }, @@ -41724,13 +41738,13 @@ /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 10 }, -/obj/item/radio/intercom/directional/west, /obj/machinery/light/directional/west, /obj/item/storage/medkit/regular, /obj/item/storage/medkit/regular{ pixel_x = 4; pixel_y = 4 }, +/obj/item/radio/intercom/directional/south, /turf/open/floor/iron/white, /area/station/medical/treatment_center) "nyM" = ( @@ -48329,8 +48343,8 @@ network = list("ss13","medbay"); c_tag = "Medical - Treatment South-East" }, -/obj/machinery/wall_healer/directional/east, /obj/machinery/light/directional/east, +/obj/machinery/wall_healer/directional/south, /turf/open/floor/iron/white, /area/station/medical/treatment_center) "pUV" = ( @@ -53516,6 +53530,7 @@ network = list("ss13","medbay"); c_tag = "Medical - Treatment North-West" }, +/obj/machinery/vitals_reader/directional/west, /turf/open/floor/iron/white, /area/station/medical/treatment_center) "rNt" = ( @@ -62296,6 +62311,13 @@ /obj/machinery/firealarm/directional/south, /turf/open/floor/iron, /area/station/hallway/primary/tram/left) +"uId" = ( +/obj/machinery/cryo_cell{ + dir = 4 + }, +/obj/machinery/status_display/ai/directional/south, +/turf/open/floor/iron/dark, +/area/station/medical/treatment_center) "uIk" = ( /obj/machinery/atmospherics/pipe/smart/simple/purple/visible, /obj/effect/turf_decal/trimline/purple/filled/line{ @@ -65148,6 +65170,9 @@ }, /obj/machinery/light/directional/north, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/machinery/vitals_reader/directional/north{ + id_tag = "uppersurgery" + }, /turf/open/floor/iron/white, /area/station/medical/surgery/fore) "vGd" = ( @@ -168973,7 +168998,7 @@ aMG xdx gBt uVW -gBt +uId jtr dSZ aOO @@ -170515,7 +170540,7 @@ brx uem dqe dlN -dqe +edV jtr dSZ aOO diff --git a/_maps/map_files/wawastation/wawastation.dmm b/_maps/map_files/wawastation/wawastation.dmm index 28b390be699..d46ffefcacc 100644 --- a/_maps/map_files/wawastation/wawastation.dmm +++ b/_maps/map_files/wawastation/wawastation.dmm @@ -6004,6 +6004,7 @@ /obj/effect/turf_decal/tile/blue/fourcorners, /obj/structure/table/glass, /obj/machinery/light/cold/dim/directional/south, +/obj/machinery/vitals_reader/directional/south, /turf/open/floor/iron/white, /area/station/medical/treatment_center) "ceD" = ( @@ -17770,6 +17771,7 @@ /obj/effect/turf_decal/tile/blue/fourcorners, /obj/machinery/iv_drip, /obj/machinery/light/cold/dim/directional/north, +/obj/machinery/vitals_reader/directional/north, /turf/open/floor/iron/white, /area/station/medical/treatment_center) "gkt" = ( @@ -22400,9 +22402,9 @@ "hPp" = ( /obj/structure/table/glass, /obj/effect/turf_decal/tile/blue/fourcorners, -/obj/machinery/light_switch/directional/west, /obj/item/wrench/medical, /obj/machinery/light/cold/dim/directional/west, +/obj/machinery/vitals_reader/directional/west, /turf/open/floor/iron/white, /area/station/medical/treatment_center) "hPs" = ( @@ -23401,7 +23403,6 @@ "ifE" = ( /obj/machinery/vending/medical, /obj/effect/turf_decal/tile/blue/fourcorners, -/obj/machinery/firealarm/directional/south, /obj/machinery/newscaster/directional/east, /turf/open/floor/iron/white, /area/station/medical/storage) @@ -43587,6 +43588,13 @@ }, /turf/open/floor/engine, /area/station/engineering/supermatter/room) +"pek" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 5 + }, +/obj/machinery/firealarm/directional/east, +/turf/open/floor/iron/white, +/area/station/medical/treatment_center) "peo" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -44038,7 +44046,6 @@ dir = 4 }, /obj/machinery/duct, -/obj/machinery/firealarm/directional/south, /turf/open/floor/iron/dark, /area/station/medical/treatment_center) "pmp" = ( @@ -63424,6 +63431,7 @@ /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 10 }, +/obj/machinery/light_switch/directional/west, /turf/open/floor/iron/white, /area/station/medical/treatment_center) "vOu" = ( @@ -84884,7 +84892,7 @@ lcM isy isy lJo -crz +pek bui yit yit diff --git a/code/__DEFINES/dcs/signals/signals_operating_computer.dm b/code/__DEFINES/dcs/signals/signals_operating_computer.dm index 8974bb99db8..3517b0d01eb 100644 --- a/code/__DEFINES/dcs/signals/signals_operating_computer.dm +++ b/code/__DEFINES/dcs/signals/signals_operating_computer.dm @@ -1,5 +1,7 @@ -// /obj/machinery/computer/operating signals - /// Fired when a autopsy surgery completes. /// (mob/living/target) #define COMSIG_OPERATING_COMPUTER_AUTOPSY_COMPLETE "operating_computer_autopsy_complete" + +/// Fired when the patient on the operating table is changed. +/// (mob/living/target) +#define COMSIG_OPERATING_TABLE_SET_PATIENT "operating_table_set_patient" diff --git a/code/game/machinery/wall_vitals.dm b/code/game/machinery/wall_vitals.dm new file mode 100644 index 00000000000..c175fc98f48 --- /dev/null +++ b/code/game/machinery/wall_vitals.dm @@ -0,0 +1,538 @@ +/obj/item/wallframe/status_display/vitals + name = "vitals display frame" + desc = "Used to build vitals displays. Secure on a wall nearby a stasis bed, operating table, \ + or another machine that can hold patients such as cryo cells or sleepers." + custom_materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 4, + /datum/material/glass = SHEET_MATERIAL_AMOUNT * 2, + /datum/material/gold = HALF_SHEET_MATERIAL_AMOUNT * 0.5, + ) + result_path = /obj/machinery/vitals_reader + +/obj/item/wallframe/status_display/vitals/advanced + name = "advanced vitals display frame" + desc = "Used to build advanced vitals displays. Performs a more detailed scan of the patient than the basic display." + custom_materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 4, + /datum/material/glass = SHEET_MATERIAL_AMOUNT * 2, + /datum/material/gold = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT * 0.5, + ) + result_path = /obj/machinery/vitals_reader/advanced + +/// A wall mounted screen that showcases the vitals of a patient nearby. +/obj/machinery/vitals_reader + name = "vitals display" + desc = "A screen that displays the vitals of a patient." + icon = 'icons/obj/machines/vitals_monitor.dmi' + icon_state = "frame" + verb_say = "beeps" + verb_ask = "beeps" + verb_exclaim = "beeps" + density = FALSE + layer = ABOVE_WINDOW_LAYER + interaction_flags_machine = INTERACT_MACHINE_ALLOW_SILICON + use_power = NO_POWER_USE + idle_power_usage = BASE_MACHINE_IDLE_CONSUMPTION * 0.1 + active_power_usage = BASE_MACHINE_ACTIVE_CONSUMPTION * 0.1 + processing_flags = START_PROCESSING_MANUALLY + density = FALSE + max_integrity = 150 + payment_department = ACCOUNT_MED + armor_type = /datum/armor/obj_machinery/vitals_reader + light_range = 1.5 + light_power = 0.75 + light_color = LIGHT_COLOR_FAINT_CYAN + + /// Whether we perform an advanced scan on examine or not + var/advanced = FALSE + /// If TRUE, also append a chemical scan to the readout + var/chemscan = TRUE + /// Typepath to spawn when deconstructed + var/frame = /obj/item/wallframe/status_display/vitals + /// Range which we can connect to machines, don't go crazy ok? + var/connection_range = 3 + /// Static typecache of things the vitals display can connect to. + var/static/list/connectable_typecache = typecacheof(list( + /obj/machinery/abductor/experiment, + /obj/machinery/cryo_cell, + /obj/machinery/dna_scannernew, + /obj/machinery/gulag_teleporter, + /obj/machinery/hypnochair, + /obj/machinery/implantchair, + /obj/machinery/sleeper, + /obj/machinery/stasis, + /obj/structure/table/optable, + )) + /// The last stat we beeped about + VAR_FINAL/last_reported_stat = null + /// CD between beeps + COOLDOWN_DECLARE(beep_cd) + /// Reference to the mob that is being tracked / scanned + VAR_FINAL/mob/living/patient + /// What machine are we talking to + VAR_FINAL/obj/machinery/connected + +MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/vitals_reader, 32) + +/obj/machinery/vitals_reader/advanced + name = "advanced vitals display" + desc = "A screen that displays the vitals of a patient. \ + Performs a more detailed scan of the patient than a basic display." + frame = /obj/item/wallframe/status_display/vitals/advanced + advanced = TRUE + +MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/vitals_reader/advanced, 32) + +/datum/armor/obj_machinery/vitals_reader + melee = 30 + bullet = 20 + laser = 20 + energy = 30 + bomb = 10 + fire = 50 + acid = 80 + +/obj/machinery/vitals_reader/Initialize(mapload, obj/item/circuitboard/C) + . = ..() + register_context() + return INITIALIZE_HINT_LATELOAD + +/obj/machinery/vitals_reader/post_machine_initialize() + . = ..() + find_machine(prioritize_by_id = TRUE) // mappers can set an id tag to connect it to specific machines + if(is_operational) + set_light_on(TRUE) + +/obj/machinery/vitals_reader/Destroy(force) + unset_connection() + unset_patient() // unset connection also unsets patient, but just in case + return ..() + +/obj/machinery/vitals_reader/proc/unset_connected(...) + SIGNAL_HANDLER + UnregisterSignal(connected, COMSIG_QDELETING) + UnregisterSignal(connected, list(COMSIG_OPERATING_TABLE_SET_PATIENT, COMSIG_MACHINERY_SET_OCCUPANT)) + UnregisterSignal(connected, COMSIG_MOVABLE_MOVED) + connected = null + +/obj/machinery/vitals_reader/proc/connected_occupant_changed(datum/source, mob/living/new_patient) + SIGNAL_HANDLER + + set_patient(new_patient) + +/obj/machinery/vitals_reader/proc/connected_moved(...) + SIGNAL_HANDLER + if(get_dist(src, connected) > connection_range) + unset_connected() + +/obj/machinery/vitals_reader/proc/unset_connection(...) + SIGNAL_HANDLER + if(isnull(connected)) + return + + UnregisterSignal(connected, COMSIG_QDELETING) + UnregisterSignal(connected, list(COMSIG_OPERATING_TABLE_SET_PATIENT, COMSIG_MACHINERY_SET_OCCUPANT)) + UnregisterSignal(connected, COMSIG_MOVABLE_MOVED) + connected = null + unset_patient() + update_use_power(NO_POWER_USE) + +/obj/machinery/vitals_reader/proc/set_connection(obj/new_connected) + if(!isnull(connected)) + unset_connected() + + connected = new_connected + RegisterSignal(connected, COMSIG_QDELETING, PROC_REF(unset_connected)) + RegisterSignals(connected, list(COMSIG_OPERATING_TABLE_SET_PATIENT, COMSIG_MACHINERY_SET_OCCUPANT), PROC_REF(connected_occupant_changed)) + RegisterSignal(connected, COMSIG_MOVABLE_MOVED, PROC_REF(connected_moved)) + update_use_power(IDLE_POWER_USE) + + if(ismachinery(connected)) + var/obj/machinery/connected_machine = connected + set_patient(connected_machine.occupant) + else if(istype(connected, /obj/structure/table/optable)) + var/obj/structure/table/optable/connected_table = connected + set_patient(connected_table.patient) + +/obj/machinery/vitals_reader/wrench_act(mob/living/user, obj/item/tool) + balloon_alert(user, "detaching...") + if(tool.use_tool(src, user, 6 SECONDS, volume = 50)) + playsound(src, 'sound/items/deconstruct.ogg', 50, TRUE) + deconstruct(TRUE) + return ITEM_INTERACT_SUCCESS + +/obj/machinery/vitals_reader/multitool_act(mob/living/user, obj/item/tool) + if(!is_operational) + return NONE + + if(isnull(connected)) + if(find_machine()) + balloon_alert(user, "connected to [connected.name]") + else + balloon_alert(user, "no connectable machines nearby!") + return ITEM_INTERACT_SUCCESS + + balloon_alert(user, "disconnecting...") + if(!do_after(user, 2 SECONDS, target = src)) + return ITEM_INTERACT_BLOCKING + + balloon_alert(user, "disconnected from [connected.name]") + unset_connection() + return ITEM_INTERACT_SUCCESS + +/// Find and connects to a nearby machine +/// If prioritize_by_id is TRUE, will first try to find a machine with the same id_tag as this vitals reader +/obj/machinery/vitals_reader/proc/find_machine(prioritize_by_id = FALSE) + for(var/obj/nearby_thing in view(connection_range, src)) + if(prioritize_by_id && nearby_thing.id_tag != src.id_tag) + continue + if(!is_type_in_typecache(nearby_thing, connectable_typecache)) + continue + + set_connection(nearby_thing) + return nearby_thing + + if(prioritize_by_id) + return find_machine(prioritize_by_id = FALSE) + return null + +/obj/machinery/vitals_reader/on_deconstruction(disassembled) + var/atom/drop_loc = drop_location() + if(disassembled) + new frame(drop_loc) + else + new /obj/item/stack/sheet/iron(drop_loc, 2) + new /obj/item/shard(drop_loc) + new /obj/item/shard(drop_loc) + qdel(src) + +/obj/machinery/vitals_reader/examine(mob/user) + . = ..() + if(!is_operational) + return + + if(isnull(connected)) + . += span_notice("The display is currently not connected to anything. \ + Use a [EXAMINE_HINT("multitool")] to connect it to a neighboring machine.") + return + + if(user.is_blind()) + return + + if(machine_stat & EMPED) + . += span_warning("The display is flickering erratically!") + return + + if(!issilicon(user) && !isobserver(user) && get_dist(patient, user) > 2) + . += span_notice("You are too far away to read the display.") + else if(HAS_TRAIT(user, TRAIT_DUMB) || !user.can_read(src, reading_check_flags = READING_CHECK_LITERACY, silent = TRUE)) + . += span_warning("You try to comprehend the display, but it's too complex for you to understand.") + else + . += healthscan(user, patient, mode = SCANNER_CONDENSED, advanced = src.advanced, tochat = FALSE) + . += chemscan(user, patient, tochat = FALSE) + +/obj/machinery/vitals_reader/add_context(atom/source, list/context, obj/item/held_item, mob/user) + if(held_item?.tool_behaviour == TOOL_WRENCH) + context[SCREENTIP_CONTEXT_LMB] = "Detach" + . = CONTEXTUAL_SCREENTIP_SET + if(is_operational) + if(isnull(connected) && held_item?.tool_behaviour == TOOL_MULTITOOL) + context[SCREENTIP_CONTEXT_LMB] = "Connect to nearby machine" + . = CONTEXTUAL_SCREENTIP_SET + if(!isnull(patient)) + context[SCREENTIP_CONTEXT_SHIFT_LMB] = "Examine vitals" + . = CONTEXTUAL_SCREENTIP_SET + return . + +#define LOWER_BAR_OFFSET -3 + +/** + * Returns all overlays to be shown when a simple / basic animal patient is detected + * + * * hp_color - color being used for general, overrall health + */ +/obj/machinery/vitals_reader/proc/get_simple_mob_overlays(hp_color) + return list( + construct_overlay("mob", hp_color), + construct_overlay("blood", COLOR_GRAY), + construct_overlay("bar9", COLOR_GRAY), + construct_overlay("bar9", COLOR_GRAY, LOWER_BAR_OFFSET), + ) + +/** + * Returns all overlays to be shown when a humanoid patient is detected + * + * * hp_color - color being used for general, overrall health + */ +/obj/machinery/vitals_reader/proc/get_humanoid_overlays(hp_color) + var/list/returned_overlays = list() + + for(var/body_zone in GLOB.all_body_zones) + var/obj/item/bodypart/real_part = patient.get_bodypart(body_zone) + var/bodypart_color = isnull(real_part) ? COLOR_GRAY : percent_to_color((real_part.brute_dam + real_part.burn_dam) / real_part.max_damage) + returned_overlays += construct_overlay("human_[body_zone]", bodypart_color) + + if(CAN_HAVE_BLOOD(patient)) + var/blood_color = "#a51919" + switch((patient.blood_volume - BLOOD_VOLUME_SURVIVE) / (BLOOD_VOLUME_NORMAL - BLOOD_VOLUME_SURVIVE)) + if(-INFINITY to 0.2) + blood_color = "#a1a1a1" + if(0.2 to 0.4) + blood_color = "#a18282" + if(0.4 to 0.6) + blood_color = "#a16363" + if(0.6 to 0.8) + blood_color = "#a14444" + if(0.8 to INFINITY) + blood_color = "#a51919" + + returned_overlays += construct_overlay("blood", blood_color) + else + returned_overlays += construct_overlay("blood", COLOR_GRAY) + + if(HAS_TRAIT(patient, TRAIT_NOBREATH)) + returned_overlays += construct_overlay("bar9", COLOR_GRAY) + else + var/oxy_percent = patient.get_oxy_loss() / patient.maxHealth + returned_overlays += construct_overlay(percent_to_bar(oxy_percent), "#2A72AA") + + if(HAS_TRAIT(patient, TRAIT_TOXIMMUNE)) + returned_overlays += construct_overlay("bar9", COLOR_GRAY, LOWER_BAR_OFFSET) + else + var/tox_percent = patient.get_tox_loss() / patient.maxHealth + returned_overlays += construct_overlay(percent_to_bar(tox_percent), "#5d9c11", LOWER_BAR_OFFSET) + + return returned_overlays + +/** + * Returns the EKG and Respiration overlays + * + * * hp_color - color being used for general, overrall health + */ +/obj/machinery/vitals_reader/proc/get_ekg_and_resp(hp_color) + var/ekg_icon_state = "ekg" + var/resp_icon_state = "resp" + if(!patient.appears_alive()) + ekg_icon_state = "ekg_flat" + resp_icon_state = "resp_flat" + + else if(patient.stat == HARD_CRIT || patient.has_status_effect(/datum/status_effect/jitter)) + ekg_icon_state = "ekg_fast" + + if(patient.losebreath || HAS_TRAIT(patient, TRAIT_NOBREATH)) + resp_icon_state = "resp_flat" + + return list( + construct_overlay(ekg_icon_state, hp_color), + construct_overlay(resp_icon_state, "#00f7ff"), + ) + +/obj/machinery/vitals_reader/update_overlays() + . = ..() + if(!is_operational) + return + + . += emissive_appearance(icon, "outline", src, alpha = src.alpha) + if(isnull(patient)) + return + + . += "buttons" + + var/hp_color = percent_to_color((patient.maxHealth - patient.health) / patient.maxHealth) + . += get_ekg_and_resp(hp_color) + if(ishuman(patient)) + . += get_humanoid_overlays(hp_color) + else + . += get_simple_mob_overlays(hp_color) + +/// Converts a percentage to a color +/obj/machinery/vitals_reader/proc/percent_to_color(percent) + if(machine_stat & (EMPED|EMAGGED)) + percent = rand(1, 100) * 0.01 + + if(percent == 0) + return "#2A72AA" + + switch(percent) + if(0 to 0.125) + return "#A6BD00" + if(0.125 to 0.25) + return "#BDA600" + if(0.25 to 0.375) + return "#BD7E00" + if(0.375 to 0.5) + return "#BD4200" + + return "#BD0600" + +/// Converts a percentage to a bar icon state +/obj/machinery/vitals_reader/proc/percent_to_bar(percent) + if(machine_stat & (EMPED|EMAGGED)) + percent = rand(1, 100) * 0.01 + + if(percent >= 1) + return "bar9" + if(percent <= 0) + return "bar1" + + switch(percent) + if(0 to 0.125) + return "bar1" + if(0.125 to 0.25) + return "bar2" + if(0.25 to 0.375) + return "bar3" + if(0.375 to 0.5) + return "bar4" + if(0.5 to 0.625) + return "bar5" + if(0.625 to 0.75) + return "bar6" + if(0.75 to 0.875) + return "bar7" + if(0.875 to 1) + return "bar8" + + return "bar9" // ?? + +/** + * Helper to construct an overlay for the vitals display + * + * * state_to_use - icon state to use, required + * * color_to_use - color to use, optional + * * y_offset - offset to apply to the y position of the overlay, defaults to 0 + */ +/obj/machinery/vitals_reader/proc/construct_overlay(state_to_use, color_to_use, y_offset = 0) + var/mutable_appearance/overlay = mutable_appearance(icon, state_to_use, alpha = src.alpha) + overlay.appearance_flags |= RESET_COLOR + overlay.color = color_to_use + overlay.pixel_z += 32 + overlay.pixel_y += -32 + y_offset + return overlay + +#undef LOWER_BAR_OFFSET + +/obj/machinery/vitals_reader/on_set_is_operational(old_value) + update_appearance() + set_light_on(is_operational) + +/obj/machinery/vitals_reader/process() + if(!COOLDOWN_FINISHED(src, beep_cd) || !is_operational) + return + if(isnull(patient)) + stack_trace("[src] has no patient but is still processing!") + end_processing() + return + + var/patient_stat = patient.stat + if(machine_stat & (EMPED|EMAGGED)) + patient_stat = pick(CONSCIOUS, SOFT_CRIT, HARD_CRIT, DEAD, DEAD, DEAD) + + switch(patient_stat) + if(DEAD) + COOLDOWN_START(src, beep_cd, 11 SECONDS) + if(last_reported_stat != DEAD) + beep_message("lets out a droning beep.") + last_reported_stat = DEAD + if(HARD_CRIT) + COOLDOWN_START(src, beep_cd, 5 SECONDS) + if(last_reported_stat != HARD_CRIT) + beep_message("lets out an alternating beep.") + last_reported_stat = HARD_CRIT + if(SOFT_CRIT) + COOLDOWN_START(src, beep_cd, 7 SECONDS) + if(last_reported_stat != SOFT_CRIT) + beep_message("lets out a high pitch beep.") + last_reported_stat = SOFT_CRIT + else + COOLDOWN_START(src, beep_cd, 7 SECONDS) + if(last_reported_stat != CONSCIOUS) + beep_message("lets out a beep.") + last_reported_stat = CONSCIOUS + +/obj/machinery/vitals_reader/proc/beep_message(message) + for(var/mob/viewer as anything in viewers(src)) + if(isnull(viewer.client) || !viewer.can_hear()) + continue + if(!viewer.runechat_prefs_check(viewer, EMOTE_MESSAGE)) + continue + viewer.create_chat_message( + speaker = src, + raw_message = message, + runechat_flags = EMOTE_MESSAGE, + ) + +/// Sets the passed mob as the active patient +/// If there is already a patient, it will be unset first. +/obj/machinery/vitals_reader/proc/set_patient(mob/living/new_patient) + if(patient == new_patient) + return + if(isnull(new_patient)) + unset_patient() + return + + if(isnull(patient)) + unset_patient() + + patient = new_patient + RegisterSignal(patient, COMSIG_QDELETING, PROC_REF(unset_patient)) + RegisterSignals(patient, list( + COMSIG_CARBON_POST_REMOVE_LIMB, + COMSIG_CARBON_POST_ATTACH_LIMB, + COMSIG_LIVING_HEALTH_UPDATE, + COMSIG_LIVING_UPDATE_BLOOD_STATUS, + ), PROC_REF(update_overlay_on_signal)) + update_appearance() + begin_processing() + update_use_power(ACTIVE_POWER_USE) + last_reported_stat = null + +/// Unset the current patient. +/obj/machinery/vitals_reader/proc/unset_patient(...) + SIGNAL_HANDLER + if(isnull(patient)) + return + + UnregisterSignal(patient, list( + COMSIG_QDELETING, + COMSIG_CARBON_POST_REMOVE_LIMB, + COMSIG_CARBON_POST_ATTACH_LIMB, + COMSIG_LIVING_HEALTH_UPDATE, + COMSIG_LIVING_UPDATE_BLOOD_STATUS, + )) + + patient = null + end_processing() + update_use_power(IDLE_POWER_USE) + if(QDELING(src)) + return + + update_appearance() + +/// Signal proc to update the display when a signal is received. +/obj/machinery/vitals_reader/proc/update_overlay_on_signal(...) + SIGNAL_HANDLER + update_appearance() + +/obj/machinery/vitals_reader/emp_act(severity) + . = ..() + if(. & EMP_PROTECT_SELF) + return + + COOLDOWN_START(src, beep_cd, 1 SECONDS * rand(10, (severity == EMP_HEAVY ? 120 : 60))) + set_machine_stat(machine_stat | EMPED) + addtimer(CALLBACK(src, PROC_REF(fix_emp)), (severity == EMP_HEAVY ? 150 SECONDS : 75 SECONDS), TIMER_DELETE_ME) + +/obj/machinery/vitals_reader/proc/fix_emp() + set_machine_stat(machine_stat & ~EMPED) + +/obj/machinery/vitals_reader/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) + switch(damage_type) + if(BRUTE) + if(machine_stat & BROKEN) + playsound(src, 'sound/effects/hit_on_shattered_glass.ogg', 70, TRUE) + else + playsound(src, 'sound/effects/glass/glasshit.ogg', 75, TRUE) + if(BURN) + playsound(src, 'sound/items/tools/welder.ogg', 100, TRUE) diff --git a/code/game/objects/items/devices/scanners/health_analyzer.dm b/code/game/objects/items/devices/scanners/health_analyzer.dm index e1f4bc6d792..971dcd513a3 100644 --- a/code/game/objects/items/devices/scanners/health_analyzer.dm +++ b/code/game/objects/items/devices/scanners/health_analyzer.dm @@ -525,7 +525,7 @@ REMOVE_TRAIT(target, TRAIT_RECENTLY_TREATED, ANALYZER_TRAIT) return TRUE -/proc/chemscan(mob/living/user, mob/living/target, reagent_types_to_check = null) +/proc/chemscan(mob/living/user, mob/living/target, reagent_types_to_check = null, tochat = TRUE) if(user.incapacitated) return @@ -594,7 +594,10 @@ render_list += "[allergies]
" // we handled the last
so we don't need handholding - to_chat(user, custom_boxed_message("blue_box", jointext(render_list, "")), trailing_newline = FALSE, type = MESSAGE_TYPE_INFO) + if(tochat) + to_chat(user, custom_boxed_message("blue_box", jointext(render_list, "")), trailing_newline = FALSE, type = MESSAGE_TYPE_INFO) + else + return jointext(render_list, "") /obj/item/healthanalyzer/click_alt(mob/user) if(mode == SCANNER_NO_MODE) diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index 53e142dce59..00a7dec2bf6 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -1103,6 +1103,7 @@ if (patient.external && patient.external == air_tank) patient.close_externals() + SEND_SIGNAL(src, COMSIG_OPERATING_TABLE_SET_PATIENT, new_patient) patient = new_patient update_appearance() computer?.update_static_data_for_all_viewers() diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm index 3ca9a45b732..5fec94d4333 100644 --- a/code/modules/research/designs/medical_designs.dm +++ b/code/modules/research/designs/medical_designs.dm @@ -1379,3 +1379,31 @@ id = "surgery_oldstation_dissection" surgery = /datum/surgery_operation/basic/dissection research_icon_state = "surgery_chest" + +/datum/design/vitals_monitor + name = "Vitals Monitor" + desc = "A wall mounted computer that displays the vitals of a patient nearby. \ + Links to stasis beds, operating tables, and other machines that can hold patients \ + such as cryo cells, sleepers, and more." + id = "vitals_monitor" + build_type = PROTOLATHE + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 4, + /datum/material/glass = SHEET_MATERIAL_AMOUNT * 2, + /datum/material/gold = HALF_SHEET_MATERIAL_AMOUNT * 0.5, + ) + build_path = /obj/item/wallframe/status_display/vitals + category = list(RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_MEDICAL) + departmental_flags = DEPARTMENT_BITFLAG_MEDICAL + +/datum/design/vitals_monitor/advanced + name = "Advanced Vitals Monitor" + desc = "An updated vitals display which performs a more detailed scan of the patient than the basic display." + id = "vitals_monitor_advanced" + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT * 4, + /datum/material/glass = SHEET_MATERIAL_AMOUNT * 2, + /datum/material/gold = HALF_SHEET_MATERIAL_AMOUNT, + /datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT * 0.5, + ) + build_path = /obj/item/wallframe/status_display/vitals/advanced diff --git a/code/modules/research/techweb/nodes/medbay_nodes.dm b/code/modules/research/techweb/nodes/medbay_nodes.dm index c79bad013ef..6ae856d8173 100644 --- a/code/modules/research/techweb/nodes/medbay_nodes.dm +++ b/code/modules/research/techweb/nodes/medbay_nodes.dm @@ -4,35 +4,36 @@ display_name = "Medbay Equipment" description = "Essential medical tools to patch you up while medbay is still intact." design_ids = list( - "operating", - "medicalbed", - "defibmountdefault", - "surgical_drapes", - "scalpel", - "retractor", - "hemostat", - "cautery", - "circular_saw", - "surgicaldrill", - "bonesetter", + "beaker", "blood_filter", - "surgical_tape", + "blood_pack", + "blood_scanner", + "bonesetter", + "cautery", + "chem_pack", + "circular_saw", + "defibmountdefault", + "dropper", + "hemostat", + "jerrycan", + "large_beaker", + "medicalbed", + "operating", + "organ_jar", "penlight", "penlight_paramedic", - "stethoscope", - "beaker", - "large_beaker", - "chem_pack", - "blood_pack", - "syringe", - "dropper", "pillbottle", - "xlarge_beaker", - "organ_jar", - "jerrycan", "reflex_hammer", - "blood_scanner", + "retractor", + "scalpel", + "stethoscope", "suit_sensor", + "surgical_drapes", + "surgical_tape", + "surgicaldrill", + "syringe", + "vitals_monitor", + "xlarge_beaker", ) experiments_to_unlock = list( /datum/experiment/autopsy/human, @@ -74,16 +75,17 @@ description = "State-of-the-art medical gear for keeping the crew in one piece — mostly." prereq_ids = list(TECHWEB_NODE_CHEM_SYNTHESIS) design_ids = list( - "smoke_machine", "chem_mass_spec", - "healthanalyzer_advanced", - "mod_health_analyzer", "crewpinpointer", "defibmount", - "medicalbed_emergency", - "piercesyringe", "diode_disk_healing", "diode_disk_sanity", + "healthanalyzer_advanced", + "medicalbed_emergency", + "mod_health_analyzer", + "piercesyringe", + "smoke_machine", + "vitals_monitor_advanced", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) required_experiments = list(/datum/experiment/scanning/reagent/haloperidol) diff --git a/icons/obj/machines/vitals_monitor.dmi b/icons/obj/machines/vitals_monitor.dmi new file mode 100644 index 0000000000000000000000000000000000000000..d402e7f0b3e48a5ab53c43ee40a16567e1e53e4e GIT binary patch literal 1176 zcmeAS@N?(olHy`uVBq!ia0y~yU~~Xt1rBDQ$fsRVhk#UafKQ0)fddBuLQ@n>91Kj| z^6UH8?>?rWto#4}|0mC1O%vf;Fo}<&!Qz~(@bilz@}~@BWMo7|MI|LA6%-V%UArbE zB&4XQsIIR5;>C-zXV1=?H}B!YhvntvKr>ICJh^7gn(f=SFIcePX3^>|KoOl28*R#5( z?}a{2jSy){6}lSvEAydE1<&PH$vt7VdJ)$&UOTC#M`kZPocZtVv8bS{&EJ=m*Y7q8 z2|RrK`pvK;nc4H*pI&f`f9dtua_8BUx1nM=?puCw{noiyxo9ef@1(M2e)XvvELl0Z zv@|k&9aUL#H8Q*%t+{r2D|Np!ZA#;vz5dbS9XzX}csEWHSb5}T>w)PJ#o{lEr;1yK za&OeTdvw#0^)3G^S4K$-?_}9LBlkw_N&e-3e|Z09*^wO>mNxNJ6axd(aZeY=kcv5P z@4gPY6(GVEAm!YDi#sA~tHIXV|I2m6FK1fM*(}M|=yI*-&(~bTI^p9J-*~DCOYAA1 zZr4zlJ!`hw^GnCg*nF+`&P>}P#bcU#dtd%$lO2<{$^Tx%J;yKqect(A$1f0|~!ESY9H*NWLZ=$Kmet(!UX3}^ooy?5g4_S}Nl2Q~jT zT;Ju$ny0a05|g&(hMI7m)}tF^l>;r|XsGI@RAhx9aMa+<&~G`7h-coQxN^c;9i;b(7d@ zEWo7Fkp1<~pBOLorBhBmdsX}LQ|-<;HLfQrpVTiV1=<~5B);y?uZ<`E_o!=rcx!$m zy777u*SGKo2lth`&HA4DbIWg@(rVS6%r(8?PisQYL5QV$^x4Hv)Nz4K2U(zaqu%`a z{!jnd+jMPyooWoRy|B6do!92$MkoIBr0hRzbRwR;==gQsC!g{Z{{IS*eEsiE!k%^e zpMHNF_OwRy3B(WvhAS3_x$bhZHT`LNW&Xs^C?L%K!t^V;2cCYu>!5g_Z_1}b{^Gg+ zU0*j}{Fj(3_fDS)rtbj5(g*))G^f5lKYdqY&Ae0JpI6IjJYBhG{|;G==Rm6B&p!pI z+6$|V?`+K!VHW>$?Xld7+HI*_^Kxe{N{?Rl;^wrKUvf@g;e7(Lt>obB?d^@!#N%e$RLI$A1qT`gecf_H$Bi+U^9L+kf$2 z7pQOmgP!2Gb@3(t4{rbW#t$aOaO}C}iTXKDHGW-P`+e&C_0@O&JxGeo`|$L6bjAkv n^WCn7|G$1JTBghh*0An$zVol>iG94xb|Ai|tDnm{r-UW|&>ky* literal 0 HcmV?d00001 diff --git a/tgstation.dme b/tgstation.dme index 266fd8a0eb0..da561f0cec6 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -2256,6 +2256,7 @@ #include "code\game\machinery\teleporter.dm" #include "code\game\machinery\transformer.dm" #include "code\game\machinery\wall_healer.dm" +#include "code\game\machinery\wall_vitals.dm" #include "code\game\machinery\washing_machine.dm" #include "code\game\machinery\wishgranter.dm" #include "code\game\machinery\ai_core\_core.dm"