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 00000000000..d402e7f0b3e
Binary files /dev/null and b/icons/obj/machines/vitals_monitor.dmi differ
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"