diff --git a/_maps/bubber/automapper/automapper_config.toml b/_maps/bubber/automapper/automapper_config.toml
index 7409bb38c59..f3ae507a5f6 100644
--- a/_maps/bubber/automapper/automapper_config.toml
+++ b/_maps/bubber/automapper/automapper_config.toml
@@ -67,6 +67,14 @@ required_map = "MetaStation.dmm"
coordinates = [163, 155, 1]
trait_name = "Station"
+# Metastation Medbay
+[templates.metastation_medbay]
+map_files = ["metastation_medbay.dmm"]
+directory = "_maps/bubber/automapper/templates/MetaStation/"
+required_map = "MetaStation.dmm"
+coordinates = [86, 105, 1]
+trait_name = "Station"
+
# DELTASTATION MAP EDITS
# Deltastation Arrivals
[templates.deltastation_arrivals]
@@ -108,6 +116,14 @@ required_map = "DeltaStation2.dmm"
coordinates = [84, 109, 1]
trait_name = "Station"
+# Deltastation Medbay
+[templates.deltastation_medbay]
+map_files = ["deltastation_medbay.dmm"]
+directory = "_maps/bubber/automapper/templates/Deltastation/"
+required_map = "DeltaStation2.dmm"
+coordinates = [157, 77, 1]
+trait_name = "Station"
+
# ICEBOX MAP EDITS
# Icebox Arrivals
[templates.icebox_arrivals]
@@ -157,6 +173,14 @@ required_map = "IceBoxStation.dmm"
coordinates = [114, 65, 3]
trait_name = "Station"
+# Icebox Medbay
+[templates.icebox_medbay]
+map_files = ["iceboxstation_medbay.dmm"]
+directory = "_maps/bubber/automapper/templates/IceBoxStation/"
+required_map = "IceBoxStation.dmm"
+coordinates = [141, 108, 3]
+trait_name = "Station"
+
# Icecats Camp Lower Level
[templates.icebox_icecats_lower]
map_files = ["icemoon_underground_icewalker_lower.dmm"]
@@ -214,6 +238,14 @@ required_map = "tramstation.dmm"
coordinates = [118, 75, 1]
trait_name = "Station"
+# Tramstation Medbay
+[templates.tramstation_medbay]
+map_files = ["tramstation_medbay.dmm"]
+directory = "_maps/bubber/automapper/templates/tramstation/"
+required_map = "tramstation.dmm"
+coordinates = [118, 101, 2]
+trait_name = "Station"
+
# BIRDSHOT MAP EDITS
# Birdshot Arrivals
[templates.birdshot_arrivals]
diff --git a/_maps/bubber/automapper/templates/Deltastation/deltastation_medbay.dmm b/_maps/bubber/automapper/templates/Deltastation/deltastation_medbay.dmm
new file mode 100644
index 00000000000..c3ea011a539
--- /dev/null
+++ b/_maps/bubber/automapper/templates/Deltastation/deltastation_medbay.dmm
@@ -0,0 +1,270 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"a" = (
+/turf/template_noop,
+/area/template_noop)
+"m" = (
+/obj/structure/closet/secure_closet/personal/patient,
+/obj/effect/turf_decal/bot,
+/obj/machinery/light/small/directional/north,
+/obj/effect/landmark/start/hangover/closet,
+/obj/effect/turf_decal/tile/neutral/fourcorners,
+/turf/open/floor/iron,
+/area/station/medical/cryo)
+"v" = (
+/obj/machinery/incident_display/disease,
+/turf/closed/wall,
+/area/station/medical/medbay/lobby)
+"x" = (
+/obj/structure/bed/medical/emergency,
+/obj/effect/turf_decal/trimline/blue/filled/line,
+/obj/machinery/light/directional/south,
+/turf/open/floor/iron/white,
+/area/station/medical/medbay/lobby)
+"D" = (
+/turf/closed/wall,
+/area/station/medical/storage)
+"F" = (
+/obj/effect/turf_decal/bot,
+/obj/machinery/vending/medical,
+/obj/effect/turf_decal/tile/neutral/half/contrasted{
+ dir = 1
+ },
+/turf/open/floor/iron,
+/area/station/medical/storage)
+"G" = (
+/turf/closed/wall,
+/area/station/medical/medbay/lobby)
+"M" = (
+/obj/structure/bed/medical/emergency,
+/obj/effect/turf_decal/trimline/blue/filled/line,
+/turf/open/floor/iron/white,
+/area/station/medical/medbay/lobby)
+"P" = (
+/obj/machinery/incident_display/disease,
+/turf/closed/wall,
+/area/station/medical/storage)
+"S" = (
+/obj/machinery/incident_display/disease/directional/north,
+/turf/template_noop,
+/area/template_noop)
+"W" = (
+/obj/item/radio/intercom/directional/east,
+/turf/template_noop,
+/area/template_noop)
+
+(1,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(2,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(3,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(4,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+F
+P
+"}
+(5,1,1) = {"
+x
+v
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+W
+a
+D
+"}
+(6,1,1) = {"
+M
+G
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(7,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(8,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+S
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(9,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+m
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
diff --git a/_maps/bubber/automapper/templates/IceBoxStation/iceboxstation_medbay.dmm b/_maps/bubber/automapper/templates/IceBoxStation/iceboxstation_medbay.dmm
new file mode 100644
index 00000000000..5e1f81b7088
--- /dev/null
+++ b/_maps/bubber/automapper/templates/IceBoxStation/iceboxstation_medbay.dmm
@@ -0,0 +1,392 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"a" = (
+/turf/template_noop,
+/area/template_noop)
+"c" = (
+/obj/structure/table/reinforced,
+/obj/item/screwdriver{
+ pixel_y = 10
+ },
+/obj/item/radio/off,
+/obj/machinery/airalarm/directional/east,
+/obj/effect/turf_decal/tile/red/full,
+/turf/open/floor/iron/dark/smooth_large,
+/area/station/security/checkpoint/medical)
+"g" = (
+/obj/effect/turf_decal/trimline/blue/filled/line{
+ dir = 1
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/iron/white,
+/area/station/medical/medbay/central)
+"h" = (
+/obj/machinery/light/small/directional/south,
+/turf/template_noop,
+/area/template_noop)
+"l" = (
+/turf/open/openspace,
+/area/station/medical/medbay/lobby)
+"p" = (
+/turf/closed/wall,
+/area/station/medical/medbay/lobby)
+"D" = (
+/turf/closed/wall/r_wall,
+/area/station/medical/treatment_center)
+"E" = (
+/obj/structure/sign/departments/chemistry/pharmacy/directional/west,
+/turf/open/openspace,
+/area/station/medical/medbay/lobby)
+"G" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/effect/turf_decal/trimline/blue/filled/line{
+ dir = 1
+ },
+/turf/open/floor/iron/white,
+/area/station/medical/medbay/central)
+"J" = (
+/obj/machinery/incident_display/disease/directional/south,
+/turf/template_noop,
+/area/template_noop)
+"K" = (
+/obj/machinery/incident_display/disease,
+/turf/closed/wall,
+/area/station/medical/medbay/lobby)
+"S" = (
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "medsecprivacy";
+ name = "Privacy Shutters"
+ },
+/turf/template_noop,
+/area/template_noop)
+"T" = (
+/obj/structure/table/reinforced,
+/obj/item/book/manual/wiki/security_space_law{
+ pixel_x = 3;
+ pixel_y = 4
+ },
+/obj/structure/cable,
+/obj/effect/turf_decal/tile/red/full,
+/obj/machinery/camera/directional/north{
+ c_tag = "Security Post - Medbay";
+ network = list("ss13","medbay")
+ },
+/turf/open/floor/iron/dark/smooth_large,
+/area/station/security/checkpoint/medical)
+"U" = (
+/obj/machinery/incident_display/disease,
+/turf/template_noop,
+/area/template_noop)
+"V" = (
+/obj/machinery/door/firedoor/border_only{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/dark/half/contrasted{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/blue,
+/turf/open/floor/iron/white,
+/area/station/medical/medbay/lobby)
+
+(1,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+J
+D
+"}
+(2,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+h
+D
+"}
+(3,1,1) = {"
+a
+a
+a
+a
+a
+E
+K
+G
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(4,1,1) = {"
+a
+a
+a
+a
+a
+l
+p
+g
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(5,1,1) = {"
+a
+a
+a
+a
+a
+V
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(6,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(7,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(8,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(9,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(10,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(11,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(12,1,1) = {"
+a
+U
+T
+a
+a
+a
+S
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(13,1,1) = {"
+a
+a
+c
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+a
+"}
diff --git a/_maps/bubber/automapper/templates/MetaStation/metastation_medbay.dmm b/_maps/bubber/automapper/templates/MetaStation/metastation_medbay.dmm
new file mode 100644
index 00000000000..956d4f1466a
--- /dev/null
+++ b/_maps/bubber/automapper/templates/MetaStation/metastation_medbay.dmm
@@ -0,0 +1,247 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"a" = (
+/turf/template_noop,
+/area/template_noop)
+"i" = (
+/turf/closed/wall,
+/area/station/medical/medbay/lobby)
+"q" = (
+/obj/machinery/power/apc/auto_name/directional/north,
+/obj/structure/cable,
+/turf/template_noop,
+/area/template_noop)
+"u" = (
+/obj/structure/table,
+/obj/item/stack/medical/gauze,
+/obj/item/stack/medical/mesh,
+/obj/item/stack/medical/suture,
+/obj/structure/cable,
+/obj/effect/turf_decal/tile/blue/half/contrasted{
+ dir = 1
+ },
+/turf/open/floor/iron/white,
+/area/station/medical/medbay/lobby)
+"w" = (
+/obj/effect/spawner/structure/window,
+/turf/open/floor/plating,
+/area/station/medical/medbay/lobby)
+"z" = (
+/obj/structure/sign/departments/medbay/alt,
+/turf/closed/wall,
+/area/station/medical/medbay/lobby)
+"O" = (
+/obj/machinery/incident_display/disease/directional/north,
+/turf/template_noop,
+/area/template_noop)
+"R" = (
+/obj/machinery/incident_display/disease,
+/turf/closed/wall,
+/area/station/medical/medbay/lobby)
+"U" = (
+/obj/machinery/door/poddoor/preopen{
+ id = "medsecprivacy";
+ name = "Privacy Shutter"
+ },
+/turf/template_noop,
+/area/template_noop)
+
+(1,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+O
+"}
+(2,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(3,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(4,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(5,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(6,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(7,1,1) = {"
+a
+a
+U
+a
+a
+a
+a
+a
+"}
+(8,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(9,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(10,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(11,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(12,1,1) = {"
+z
+a
+a
+a
+a
+a
+a
+a
+"}
+(13,1,1) = {"
+i
+q
+a
+a
+a
+a
+a
+a
+"}
+(14,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(15,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(16,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(17,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(18,1,1) = {"
+R
+a
+a
+a
+a
+a
+a
+a
+"}
+(19,1,1) = {"
+i
+u
+a
+a
+a
+a
+a
+a
+"}
+(20,1,1) = {"
+a
+w
+a
+a
+a
+a
+a
+a
+"}
diff --git a/_maps/bubber/automapper/templates/tramstation/tramstation_medbay.dmm b/_maps/bubber/automapper/templates/tramstation/tramstation_medbay.dmm
new file mode 100644
index 00000000000..0aef5a5d1c2
--- /dev/null
+++ b/_maps/bubber/automapper/templates/tramstation/tramstation_medbay.dmm
@@ -0,0 +1,174 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"a" = (
+/turf/template_noop,
+/area/template_noop)
+"o" = (
+/obj/machinery/incident_display/disease/directional/north,
+/turf/template_noop,
+/area/template_noop)
+"w" = (
+/obj/machinery/incident_display/disease,
+/turf/template_noop,
+/area/template_noop)
+"C" = (
+/obj/effect/turf_decal/trimline/yellow/filled/line{
+ dir = 8
+ },
+/obj/effect/turf_decal/trimline/neutral/filled/warning{
+ dir = 8
+ },
+/obj/structure/railing{
+ dir = 4
+ },
+/obj/effect/spawner/random/vending/snackvend{
+ pixel_x = -5
+ },
+/obj/machinery/incident_display/disease/directional/south,
+/turf/open/floor/iron,
+/area/station/hallway/primary/tram/center)
+"S" = (
+/obj/structure/table/glass,
+/obj/item/stack/medical/gauze,
+/obj/item/stack/medical/suture,
+/obj/effect/turf_decal/trimline/blue/filled/line{
+ dir = 9
+ },
+/obj/machinery/status_display/evac/directional/north,
+/obj/machinery/light/directional/west,
+/turf/open/floor/iron/white,
+/area/station/medical/treatment_center)
+"V" = (
+/obj/structure/table/glass,
+/obj/item/storage/box/beakers,
+/obj/item/storage/box/bodybags{
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/obj/effect/turf_decal/trimline/blue/filled/line{
+ dir = 5
+ },
+/obj/item/radio/intercom/directional/east,
+/obj/machinery/light/directional/east,
+/turf/open/floor/iron/white,
+/area/station/medical/treatment_center)
+
+(1,1,1) = {"
+C
+a
+o
+a
+a
+a
+a
+a
+"}
+(2,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(3,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(4,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+S
+"}
+(5,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(6,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(7,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(8,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(9,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(10,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(11,1,1) = {"
+a
+a
+a
+a
+a
+a
+a
+a
+"}
+(12,1,1) = {"
+a
+a
+a
+a
+a
+a
+w
+V
+"}
diff --git a/_maps/map_files/BoxStation/BoxStation.dmm b/_maps/map_files/BoxStation/BoxStation.dmm
index 5df96f211ec..1420c399bee 100644
--- a/_maps/map_files/BoxStation/BoxStation.dmm
+++ b/_maps/map_files/BoxStation/BoxStation.dmm
@@ -6738,6 +6738,14 @@
},
/turf/open/floor/iron,
/area/station/hallway/secondary/entry)
+"aHb" = (
+/obj/effect/turf_decal/tile/blue,
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/obj/machinery/incident_display/disease/directional/south,
+/turf/open/floor/iron,
+/area/station/hallway/primary/starboard)
"aHd" = (
/obj/machinery/disposal/bin,
/obj/structure/disposalpipe/trunk,
@@ -20978,6 +20986,7 @@
c_tag = "Medbay Storage";
network = list("ss13","medbay")
},
+/obj/machinery/incident_display/disease/directional/south,
/turf/open/floor/iron/dark,
/area/station/medical/storage)
"bEi" = (
@@ -33263,6 +33272,7 @@
/obj/effect/turf_decal/tile/red{
dir = 4
},
+/obj/machinery/incident_display/disease/directional/north,
/turf/open/floor/iron,
/area/station/command/bridge)
"cQt" = (
@@ -43397,6 +43407,7 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
dir = 4
},
+/obj/machinery/incident_display/disease/directional/north,
/turf/open/floor/iron/white,
/area/station/medical/medbay/central)
"jij" = (
@@ -48578,8 +48589,15 @@
/turf/open/floor/engine,
/area/station/science/explab)
"msc" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{
+ dir = 8
+ },
/obj/structure/sign/warning/no_smoking/circle/directional/east,
-/turf/closed/wall,
+/turf/open/floor/iron/white,
/area/station/medical/medbay/central)
"msK" = (
/obj/machinery/camera{
@@ -104464,7 +104482,7 @@ bai
aJC
bcr
iKz
-bet
+aHb
bfH
yiT
jsN
@@ -104472,7 +104490,7 @@ pnL
bln
hHU
boj
-msc
+bof
jib
bsx
jsH
@@ -104987,7 +105005,7 @@ sjV
bmR
pkL
bES
-uGy
+msc
pnW
jsH
odp
diff --git a/_maps/map_files/KiloStation/KiloStation.dmm b/_maps/map_files/KiloStation/KiloStation.dmm
index 3e9136f758e..5c69cc36384 100644
--- a/_maps/map_files/KiloStation/KiloStation.dmm
+++ b/_maps/map_files/KiloStation/KiloStation.dmm
@@ -18004,7 +18004,6 @@
/obj/structure/table,
/obj/item/clipboard,
/obj/item/storage/medkit/regular,
-/obj/machinery/power/apc/auto_name/directional/north,
/obj/structure/cable,
/obj/effect/turf_decal/tile/neutral/half/contrasted,
/turf/open/floor/iron/dark,
@@ -27596,6 +27595,7 @@
},
/obj/item/crowbar/red,
/obj/item/clothing/mask/gas,
+/obj/machinery/incident_display/disease/directional/south,
/turf/open/floor/iron/dark,
/area/station/command/bridge)
"iWm" = (
@@ -27848,6 +27848,7 @@
/obj/effect/turf_decal/tile/neutral/anticorner/contrasted{
dir = 8
},
+/obj/machinery/incident_display/disease/directional/north,
/turf/open/floor/iron/dark,
/area/station/medical/medbay/lobby)
"jas" = (
@@ -37657,6 +37658,8 @@
dir = 8
},
/obj/item/storage/box/bandages,
+/obj/machinery/power/apc/auto_name/directional/north,
+/obj/structure/cable,
/turf/open/floor/iron/dark,
/area/station/medical/medbay/lobby)
"mlB" = (
@@ -47784,6 +47787,7 @@
},
/obj/structure/curtain,
/obj/effect/turf_decal/tile/neutral/half/contrasted,
+/obj/machinery/incident_display/disease/directional/north,
/turf/open/floor/iron/dark,
/area/station/medical/exam_room)
"pJs" = (
@@ -48811,9 +48815,13 @@
/turf/open/floor/plating,
/area/station/maintenance/starboard/fore)
"qaR" = (
-/obj/structure/sign/departments/medbay/alt,
-/turf/closed/wall,
-/area/station/medical/paramedic)
+/obj/machinery/atmospherics/components/unary/portables_connector/visible,
+/obj/effect/turf_decal/bot,
+/obj/machinery/portable_atmospherics/canister/anesthetic_mix,
+/obj/effect/turf_decal/tile/neutral/half/contrasted,
+/obj/machinery/incident_display/disease/directional/north,
+/turf/open/floor/iron/dark,
+/area/station/medical/medbay/central)
"qaZ" = (
/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/mix_output{
dir = 1
@@ -94031,7 +94039,7 @@ bXe
huR
bXe
gsy
-srg
+qaR
uZT
gKd
pMj
@@ -96857,7 +96865,7 @@ dkh
oiq
giH
uVJ
-qaR
+xvW
jam
fgy
qht
diff --git a/_maps/map_files/VoidRaptor/VoidRaptor.dmm b/_maps/map_files/VoidRaptor/VoidRaptor.dmm
index 023f2ee0312..aa67d21a500 100644
--- a/_maps/map_files/VoidRaptor/VoidRaptor.dmm
+++ b/_maps/map_files/VoidRaptor/VoidRaptor.dmm
@@ -7132,12 +7132,13 @@
/obj/effect/turf_decal/trimline/blue/filled/line{
dir = 8
},
-/obj/structure/sign/clock/directional/west,
/obj/machinery/light_switch/directional/west{
pixel_y = 15
},
/obj/structure/disposalpipe/segment,
/obj/effect/turf_decal/bot,
+/obj/machinery/requests_console/auto_name/directional/west,
+/obj/effect/mapping_helpers/requests_console/assistance,
/turf/open/floor/iron/white/smooth_edge{
dir = 4
},
@@ -12465,6 +12466,7 @@
},
/obj/effect/turf_decal/tile/blue/half,
/obj/effect/turf_decal/bot,
+/obj/machinery/vending/wallmed/directional/south,
/turf/open/floor/iron/dark/smooth_large,
/area/station/command/bridge)
"dIg" = (
@@ -13325,7 +13327,6 @@
/turf/open/floor/carpet/blue,
/area/station/command/heads_quarters/cmo)
"dTL" = (
-/obj/machinery/status_display/evac/directional/west,
/obj/machinery/vending/access/command,
/obj/item/toy/figure/wizard{
pixel_y = 17
@@ -21885,10 +21886,7 @@
/obj/effect/turf_decal/trimline/blue/filled/line{
dir = 1
},
-/obj/structure/sign/logo{
- icon_state = "nanotrasen_sign4";
- pixel_y = 32
- },
+/obj/machinery/firealarm/directional/north,
/turf/open/floor/iron/white/smooth_edge,
/area/station/medical/medbay/lobby)
"gtG" = (
@@ -25356,13 +25354,13 @@
/turf/open/floor/circuit,
/area/station/command/teleporter)
"htb" = (
-/obj/machinery/status_display/evac/directional/south,
/obj/structure/rack,
/obj/effect/turf_decal/trimline/blue/filled/line,
/obj/effect/turf_decal/box/white{
color = "#52B4E9"
},
/obj/machinery/light/cold/directional/south,
+/obj/machinery/incident_display/disease/directional/south,
/turf/open/floor/iron/white/smooth_edge{
dir = 1
},
@@ -27690,13 +27688,6 @@
dir = 8
},
/area/station/hallway/primary/central)
-"hZK" = (
-/obj/effect/turf_decal/trimline/blue/filled/warning{
- dir = 5
- },
-/obj/machinery/firealarm/directional/north,
-/turf/open/floor/iron/white,
-/area/station/medical/medbay/lobby)
"hZN" = (
/obj/machinery/door/firedoor,
/obj/structure/disposalpipe/segment{
@@ -31488,10 +31479,10 @@
/obj/effect/turf_decal/trimline/blue/filled/line{
dir = 4
},
-/obj/structure/sign/warning/no_smoking/directional/east,
/obj/effect/turf_decal/box,
/obj/machinery/recharge_station,
/obj/machinery/light/cold/directional/east,
+/obj/machinery/newscaster/directional/east,
/turf/open/floor/iron/white/smooth_edge{
dir = 8
},
@@ -35744,9 +35735,6 @@
/turf/open/floor/iron/kitchen,
/area/station/service/kitchen/abandoned)
"kjS" = (
-/obj/structure/sign/logo{
- pixel_y = 32
- },
/obj/effect/turf_decal/trimline/blue/filled/line{
dir = 9
},
@@ -45676,10 +45664,11 @@
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/newscaster/directional/south,
/obj/structure/disposalpipe/segment{
dir = 4
},
+/obj/machinery/requests_console/directional/south,
+/obj/effect/mapping_helpers/requests_console/assistance,
/turf/open/floor/iron/white/smooth_edge{
dir = 1
},
@@ -50354,7 +50343,6 @@
/obj/structure/sign/nanotrasen{
pixel_x = 32
},
-/obj/machinery/requests_console/auto_name/directional/north,
/turf/open/floor/iron/freezer,
/area/station/medical/surgery)
"ofo" = (
@@ -53043,10 +53031,10 @@
"oSL" = (
/obj/structure/window/reinforced/spawner/directional/east,
/obj/structure/table/reinforced/rglass,
-/obj/machinery/vending/wallmed/directional/south,
/obj/item/storage/medkit/regular,
/obj/effect/turf_decal/tile/blue/anticorner,
/obj/machinery/light/cold/directional/south,
+/obj/machinery/incident_display/disease/directional/south,
/turf/open/floor/iron/dark/smooth_large,
/area/station/command/bridge)
"oSS" = (
@@ -53801,11 +53789,6 @@
dir = 1
},
/obj/structure/table/glass,
-/obj/machinery/requests_console/directional/north{
- department = "Medbay";
- name = "Medbay Requests Console"
- },
-/obj/effect/mapping_helpers/requests_console/assistance,
/obj/item/storage/box/gloves{
pixel_x = 4;
pixel_y = 6
@@ -53817,6 +53800,7 @@
/obj/item/storage/box/rxglasses{
pixel_y = 1
},
+/obj/machinery/incident_display/disease/directional/north,
/turf/open/floor/iron/white/smooth_edge,
/area/station/medical/medbay/central)
"pcq" = (
@@ -61778,6 +61762,7 @@
/obj/effect/turf_decal/tile/blue/half{
dir = 8
},
+/obj/machinery/status_display/evac/directional/east,
/turf/open/floor/iron/dark/smooth_large,
/area/station/command/bridge)
"rjI" = (
@@ -63372,7 +63357,6 @@
/obj/effect/turf_decal/trimline/yellow/filled/line{
dir = 9
},
-/obj/structure/sign/poster/official/periodic_table/directional/north,
/obj/machinery/light/cold/directional/north,
/obj/structure/table/reinforced/rglass,
/obj/machinery/reagentgrinder{
@@ -69597,12 +69581,9 @@
/obj/effect/turf_decal/trimline/blue/filled/line{
dir = 1
},
-/obj/structure/sign/logo{
- icon_state = "nanotrasen_sign2";
- pixel_y = 32
- },
/obj/effect/landmark/start/assistant,
/obj/structure/chair/sofa/bench/right,
+/obj/structure/sign/warning/no_smoking/directional/north,
/turf/open/floor/iron/white/smooth_edge,
/area/station/medical/medbay/lobby)
"tsi" = (
@@ -71947,15 +71928,12 @@
/obj/effect/turf_decal/trimline/blue/filled/line{
dir = 1
},
-/obj/structure/sign/logo{
- icon_state = "nanotrasen_sign5";
- pixel_y = 32
- },
/obj/machinery/camera/directional/north{
c_tag = "Medbay - Lobby";
name = "medbay camera";
network = list("ss13","medbay")
},
+/obj/machinery/incident_display/disease/directional/north,
/turf/open/floor/iron/white/smooth_edge,
/area/station/medical/medbay/lobby)
"uam" = (
@@ -76420,7 +76398,7 @@
/obj/item/clothing/gloves/latex,
/obj/item/clothing/suit/apron/surgical,
/obj/item/reagent_containers/spray/cleaner,
-/obj/machinery/newscaster/directional/north,
+/obj/machinery/incident_display/disease/directional/north,
/turf/open/floor/iron/freezer,
/area/station/medical/surgery)
"vlh" = (
@@ -83721,12 +83699,9 @@
/obj/effect/turf_decal/trimline/blue/filled/line{
dir = 1
},
-/obj/structure/sign/logo{
- icon_state = "nanotrasen_sign3";
- pixel_y = 32
- },
/obj/item/storage/medkit/emergency,
/obj/machinery/light/cold/directional/north,
+/obj/machinery/status_display/evac/directional/north,
/turf/open/floor/iron/white/smooth_edge,
/area/station/medical/medbay/lobby)
"xnk" = (
@@ -119131,7 +119106,7 @@ ccc
cnC
ulA
cnC
-hZK
+dZv
vSC
arF
tOQ
diff --git a/_maps/map_files/biodome/biodome.dmm b/_maps/map_files/biodome/biodome.dmm
index f42166b41f8..c2f9cd5f82b 100644
--- a/_maps/map_files/biodome/biodome.dmm
+++ b/_maps/map_files/biodome/biodome.dmm
@@ -6327,6 +6327,8 @@
dir = 4
},
/obj/item/kirbyplants/random,
+/obj/machinery/power/apc/auto_name/directional/south,
+/obj/structure/cable,
/turf/open/floor/iron/white,
/area/station/medical/medbay/lobby)
"cin" = (
@@ -24891,6 +24893,7 @@
/obj/effect/turf_decal/tile/blue/half{
dir = 8
},
+/obj/machinery/incident_display/disease/directional/north,
/turf/open/floor/iron/dark,
/area/station/medical/medbay/central)
"iFD" = (
@@ -34843,11 +34846,10 @@
/obj/structure/table,
/obj/item/stack/medical/mesh,
/obj/item/stack/medical/gauze,
-/obj/structure/cable,
-/obj/machinery/power/apc/auto_name/directional/south,
/obj/effect/turf_decal/tile/blue/half/contrasted{
dir = 1
},
+/obj/machinery/incident_display/disease/directional/south,
/turf/open/floor/iron/white,
/area/station/medical/medbay/lobby)
"lWF" = (
@@ -34878,6 +34880,10 @@
},
/turf/open/floor/plating,
/area/station/science/robotics/mechbay)
+"lWV" = (
+/obj/machinery/incident_display/disease/directional/south,
+/turf/open/floor/iron/dark,
+/area/station/command/bridge)
"lWZ" = (
/obj/structure/toilet,
/obj/machinery/light/small/directional/north,
@@ -35061,7 +35067,7 @@
/obj/effect/turf_decal/tile/blue/half/contrasted{
dir = 1
},
-/obj/machinery/incident_display/delam/directional/north,
+/obj/machinery/incident_display/disease/directional/north,
/turf/open/floor/iron/white,
/area/station/medical/treatment_center)
"lZZ" = (
@@ -46289,9 +46295,12 @@
/turf/open/floor/iron,
/area/station/hallway/primary/starboard)
"pQb" = (
-/obj/machinery/incident_display/delam/directional/north,
-/turf/closed/wall,
-/area/station/medical/medbay/lobby)
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/incident_display/disease/directional/south,
+/turf/open/floor/iron/dark,
+/area/station/command/bridge)
"pQc" = (
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -161052,7 +161061,7 @@ cVB
uGL
cpX
eyw
-pQb
+eyw
uCO
bIP
eyw
@@ -177226,7 +177235,7 @@ cFv
cFv
ofe
pbY
-gRD
+lWV
ofe
rAq
rAq
@@ -177239,7 +177248,7 @@ mrH
mrH
ofe
pbY
-uVv
+pQb
nOL
lcS
ydy
diff --git a/_maps/map_files/moonstation/moonstation.dmm b/_maps/map_files/moonstation/moonstation.dmm
index 9a7839f95bc..27d21c110e4 100644
--- a/_maps/map_files/moonstation/moonstation.dmm
+++ b/_maps/map_files/moonstation/moonstation.dmm
@@ -27889,7 +27889,6 @@
dir = 9
},
/obj/structure/hedge,
-/obj/machinery/status_display/evac/directional/east,
/obj/machinery/firealarm/directional/south,
/obj/structure/sign/directions/science/directional/east{
pixel_y = -24
@@ -34302,7 +34301,7 @@
dir = 1
},
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
-/obj/machinery/newscaster/directional/north,
+/obj/machinery/incident_display/disease/directional/north,
/turf/open/floor/iron/white,
/area/station/medical/treatment_center)
"jts" = (
@@ -42236,15 +42235,9 @@
/turf/open/floor/plating/rust/moonstation,
/area/moonstation/surface)
"lDV" = (
-/obj/effect/turf_decal/tile/blue/half/contrasted{
- dir = 1
- },
-/obj/effect/turf_decal/trimline/white/arrow_ccw{
- dir = 1
- },
-/obj/structure/sign/warning/no_smoking/directional/north,
-/turf/open/floor/iron/white,
-/area/station/medical/medbay/central)
+/obj/machinery/incident_display/disease,
+/turf/closed/wall,
+/area/station/medical/medbay/lobby)
"lEf" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
@@ -49120,10 +49113,16 @@
/turf/open/floor/plating,
/area/station/maintenance/starboard/fore)
"nyl" = (
-/obj/effect/turf_decal/tile/blue/half/contrasted,
-/obj/machinery/firealarm/directional/south,
-/turf/open/floor/iron/dark/corner,
-/area/station/hallway/primary/starboard)
+/obj/effect/turf_decal/tile/blue/half/contrasted{
+ dir = 1
+ },
+/obj/effect/turf_decal/trimline/white/arrow_ccw{
+ dir = 1
+ },
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
+/obj/machinery/incident_display/disease/directional/north,
+/turf/open/floor/iron/white,
+/area/station/medical/medbay/central)
"nyo" = (
/obj/effect/turf_decal/tile/red/half/contrasted{
dir = 8
@@ -50882,6 +50881,7 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
+/obj/machinery/incident_display/disease/directional/south,
/turf/open/floor/iron/dark/corner,
/area/station/hallway/primary/starboard)
"nZr" = (
@@ -58936,7 +58936,6 @@
name = "Desk Shutters";
dir = 8
},
-/obj/structure/sign/warning/no_smoking/directional/north,
/obj/machinery/door/firedoor,
/turf/open/floor/iron/white,
/area/station/medical/pharmacy)
@@ -64073,7 +64072,6 @@
/obj/effect/turf_decal/siding/wood{
dir = 10
},
-/obj/machinery/status_display/evac/directional/east,
/obj/machinery/firealarm/directional/north,
/obj/structure/sign/directions/security/directional/north{
pixel_x = 32;
@@ -82733,6 +82731,7 @@
/obj/machinery/door/firedoor,
/obj/machinery/door/airlock/public/glass,
/obj/effect/mapping_helpers/airlock/autoname,
+/obj/machinery/firealarm/directional/north,
/turf/open/floor/iron/dark/corner{
dir = 1
},
@@ -254110,7 +254109,7 @@ rpt
wQT
jjc
aCB
-hfe
+lDV
hfe
dac
dac
@@ -254366,7 +254365,7 @@ bYQ
trj
lxZ
sbo
-nyl
+xUZ
hfe
cAV
nFM
@@ -258744,7 +258743,7 @@ arh
fxD
fVk
rlX
-mMG
+hPq
fgf
sNI
oFu
@@ -258755,7 +258754,7 @@ oIv
ovV
sIP
jXJ
-vlE
+nyl
mYn
dba
cDk
@@ -259012,7 +259011,7 @@ uiz
nUu
xwk
jXJ
-dkG
+dHp
rCm
kOs
eCp
@@ -259269,7 +259268,7 @@ feK
xNX
qNp
qNp
-lDV
+dkG
hSn
msA
sBa
diff --git a/code/__DEFINES/~~bubber_defines/signals.dm b/code/__DEFINES/~~bubber_defines/signals.dm
index d8f2fba56a3..49876f8d3fc 100644
--- a/code/__DEFINES/~~bubber_defines/signals.dm
+++ b/code/__DEFINES/~~bubber_defines/signals.dm
@@ -8,3 +8,5 @@
#define COMSIG_ORGAN_BODYPART_REMOVED "organ_bodypart_removed"
/// From /datum/controller/subsystem/economy/proc/issue_paydays()
#define COMSIG_ON_BANK_ACCOUNT_PAYOUT "bank_account_payout"
+/// From modular_zubbers/code/modules/disease/disease_transmission.dm
+#define COMSIG_DISEASE_COUNT_UPDATE "disease_count_update"
diff --git a/code/controllers/subsystem/disease.dm b/code/controllers/subsystem/disease.dm
index bfa6fd66b7d..44b2969a848 100644
--- a/code/controllers/subsystem/disease.dm
+++ b/code/controllers/subsystem/disease.dm
@@ -19,9 +19,12 @@ SUBSYSTEM_DEF(disease)
archive_diseases[prototype.GetDiseaseID()] = prototype
return SS_INIT_SUCCESS
+// BUBBER EDIT REMOVAL - Moved to modular_zubbers/code/modules/disease/disease_transmission.dm
+/*
/datum/controller/subsystem/disease/stat_entry(msg)
msg = "P:[length(active_diseases)]"
return ..()
+*/
/datum/controller/subsystem/disease/proc/get_disease_name(id)
var/datum/disease/advance/A = archive_diseases[id]
diff --git a/code/game/machinery/incident_display.dm b/code/game/machinery/incident_display.dm
index 77194a26dd7..5c53acf0b51 100644
--- a/code/game/machinery/incident_display.dm
+++ b/code/game/machinery/incident_display.dm
@@ -8,10 +8,13 @@ GLOBAL_LIST_EMPTY(map_incident_displays)
#define DISPLAY_DELAM (1<<0)
/// Display current number of tram hits on incident sign
#define DISPLAY_TRAM (1<<1)
+/// Display current number of tram hits on incident sign
+#define DISPLAY_DISEASE (1<<2) // BUBBER EDIT ADDITION - Disease Counter
DEFINE_BITFIELD(sign_features, list(
"DISPLAY_DELAM" = DISPLAY_DELAM,
"DISPLAY_TRAM" = DISPLAY_TRAM,
+ "DISPLAY_DISEASE" = DISPLAY_DISEASE, // BUBBER EDIT ADDITION - Disease Counter
))
#define TREND_RISING "rising"
@@ -19,9 +22,11 @@ DEFINE_BITFIELD(sign_features, list(
#define NAME_DELAM "delamination incident display"
#define NAME_TRAM "tram incident display"
+#define NAME_DISEASE "epidemic display" // BUBBER EDIT ADDITION - Disease Counter
#define DESC_DELAM "A signs describe how long it's been since the last delamination incident. Features an advert for SAFETY MOTH."
#define DESC_TRAM "A display that provides the number of tram related safety incidents this shift."
+#define DESC_DISEASE "A display that provides the number of active disease outbreak cases on shift.
Doctor-Patient confidentiality is not practised on this station." // BUBBER EDIT ADDITION - Disease Counter
#define DISPLAY_PIXEL_1_W 21
#define DISPLAY_PIXEL_1_Z -2
@@ -100,8 +105,9 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/incident_display/tram, 32)
. = ..()
GLOB.map_incident_displays += src
update_delam_count(SSpersistence.rounds_since_engine_exploded, SSpersistence.delam_highscore)
+ update_disease_count(SSdisease.cached_event_disease_count, SSdisease.previous_event_disease_count) // BUBBER EDIT ADDITION - Disease Counter
RegisterSignal(SStransport, COMSIG_TRAM_COLLISION, PROC_REF(update_tram_count))
-
+ RegisterSignal(SSdisease, COMSIG_DISEASE_COUNT_UPDATE, PROC_REF(update_disease_count))
update_appearance()
/obj/machinery/incident_display/Destroy()
@@ -187,7 +193,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/incident_display/tram, 32)
// EMP causes the display to display random numbers or outright break.
/obj/machinery/incident_display/emp_act(severity)
. = ..()
- if(prob(50))
+ if(prob(50) || sign_features & DISPLAY_DISEASE) // BUBBER EDIT CHANGE - Disease Counter
set_machine_stat(machine_stat | BROKEN)
update_appearance()
return
@@ -261,6 +267,11 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/incident_display/tram, 32)
else if((sign_features & DISPLAY_DELAM) && last_delam <= 0) // you done fucked up
icon_state = "display_shame"
set_light(l_range = 1.7, l_power = 1.5, l_color = LIGHT_COLOR_SHAME, l_on = TRUE)
+ // BUBBER EDIT ADDITION BEGIN - Disease Counter
+ else if((sign_features & DISPLAY_DISEASE) && current_disease_metric >= 8)
+ icon_state = "display_shame"
+ set_light(l_range = 1.7, l_power = 1.5, l_color = LIGHT_COLOR_SHAME, l_on = TRUE)
+ // BUBBER EDIT ADDITION END - Disease Counter
else
icon_state = "display_normal"
set_light(l_range = 1.7, l_power = 1.5, l_color = LIGHT_COLOR_NORMAL, l_on = TRUE)
@@ -361,6 +372,51 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/incident_display/tram, 32)
. += tram_trend_overlay
. += tram_trend_emissive
+ // BUBBER EDIT ADDITION BEGIN - Disease Counter
+ if(sign_features & DISPLAY_DISEASE)
+ . += mutable_appearance(icon, "overlay_disease")
+ . += emissive_appearance(icon, "overlay_disease", src, alpha = DISPLAY_PIXEL_ALPHA)
+
+ var/disease_pos1 = current_disease_metric % 10
+ var/mutable_appearance/disease_pos1_overlay = mutable_appearance(icon, "num_[disease_pos1]")
+ var/mutable_appearance/disease_pos1_emissive = emissive_appearance(icon, "num_[disease_pos1]", src, alpha = DISPLAY_PIXEL_ALPHA)
+ disease_pos1_overlay.color = disease_display_color
+ disease_pos1_overlay.pixel_w = DISPLAY_PIXEL_1_W
+ disease_pos1_emissive.pixel_w = DISPLAY_PIXEL_1_W
+ disease_pos1_overlay.pixel_z = DISPLAY_PIXEL_1_Z
+ disease_pos1_emissive.pixel_z = DISPLAY_PIXEL_1_Z
+ . += disease_pos1_overlay
+ . += disease_pos1_emissive
+
+ var/disease_pos2 = (current_disease_metric / 10) % 10
+ var/mutable_appearance/disease_pos2_overlay = mutable_appearance(icon, "num_[disease_pos2]")
+ var/mutable_appearance/disease_pos2_emissive = emissive_appearance(icon, "num_[disease_pos2]", src, alpha = DISPLAY_PIXEL_ALPHA)
+ disease_pos2_overlay.color = disease_display_color
+ disease_pos2_overlay.pixel_w = DISPLAY_PIXEL_2_W
+ disease_pos2_emissive.pixel_w = DISPLAY_PIXEL_2_W
+ disease_pos2_overlay.pixel_z = DISPLAY_PIXEL_2_Z
+ disease_pos2_emissive.pixel_z = DISPLAY_PIXEL_2_Z
+ . += disease_pos2_overlay
+ . += disease_pos2_emissive
+
+ if(current_disease_metric >= 100)
+ . += mutable_appearance(icon, "num_100_blue")
+ . += emissive_appearance(icon, "num_100_blue", src, alpha = DISPLAY_BASE_ALPHA)
+
+ if(current_disease_metric > prev_disease_metric)
+ var/mutable_appearance/disease_trend_overlay = mutable_appearance(icon, TREND_RISING)
+ var/mutable_appearance/disease_trend_emissive = emissive_appearance(icon, "[TREND_RISING]", src, alpha = DISPLAY_PIXEL_ALPHA)
+ disease_trend_overlay.color = "#fb6493"
+ . += disease_trend_overlay
+ . += disease_trend_emissive
+ else
+ var/mutable_appearance/disease_trend_overlay = mutable_appearance(icon, TREND_FALLING)
+ var/mutable_appearance/disease_trend_emissive = emissive_appearance(icon, "[TREND_FALLING]", src, alpha = DISPLAY_PIXEL_ALPHA)
+ disease_trend_overlay.color = disease_display_color
+ . += disease_trend_overlay
+ . += disease_trend_emissive
+ // BUBBER EDIT ADDITION END - Disease Counter
+
/obj/machinery/incident_display/examine(mob/user)
. = ..()
if(atom_integrity < max_integrity)
@@ -385,7 +441,8 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/incident_display/tram, 32)
. += span_info("The supermatter crystal has delaminated, in case you didn't notice.")
if(sign_features & DISPLAY_TRAM)
- . += span_notice("It can be changed to display delam-free shifts with a [EXAMINE_HINT("multitool")].")
+ //. += span_notice("It can be changed to display delam-free shifts with a [EXAMINE_HINT("multitool")].")
+ . += span_notice("It can be changed to display disease infections with a [EXAMINE_HINT("multitool")].") // BUBBER EDIT CHANGE - Disease Counter
. += span_info("The station has had [hit_count] tram incident\s this shift.")
switch(hit_count)
if(0)
@@ -403,12 +460,15 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/incident_display/tram, 32)
#undef DISPLAY_DELAM
#undef DISPLAY_TRAM
+#undef DISPLAY_DISEASE // BUBBER EDIT ADDITION - Disease Counter
#undef NAME_DELAM
#undef NAME_TRAM
+#undef NAME_DISEASE // BUBBER EDIT ADDITION - Disease Counter
#undef DESC_DELAM
#undef DESC_TRAM
+#undef DESC_DISEASE // BUBBER EDIT ADDITION - Disease Counter
#undef TREND_RISING
#undef TREND_FALLING
diff --git a/modular_zubbers/code/game/machinery/incident_display.dm b/modular_zubbers/code/game/machinery/incident_display.dm
new file mode 100644
index 00000000000..f77da6837ae
--- /dev/null
+++ b/modular_zubbers/code/game/machinery/incident_display.dm
@@ -0,0 +1,184 @@
+/**
+ * Adds a disease outbreak epidemic function to incident displays
+ */
+
+/// Display days since last delam on incident sign
+#define DISPLAY_DELAM (1<<0)
+/// Display current number of tram hits on incident sign
+#define DISPLAY_TRAM (1<<1)
+/// Display current number of tram hits on incident sign
+#define DISPLAY_DISEASE (1<<2)
+
+#define TREND_RISING "rising"
+#define TREND_FALLING "falling"
+
+#define NAME_DELAM "delamination incident display"
+#define NAME_TRAM "tram incident display"
+#define NAME_DISEASE "epidemic display"
+
+#define DESC_DELAM "A signs describe how long it's been since the last delamination incident. Features an advert for SAFETY MOTH."
+#define DESC_TRAM "A display that provides the number of tram related safety incidents this shift."
+#define DESC_DISEASE "A display that provides the number of active disease outbreak cases on shift.
Doctor-Patient confidentiality is not practised on this station." // BUBBER EDIT ADDITION - Disease Counter
+
+
+/obj/machinery/incident_display
+ icon = 'modular_zubbers/icons/obj/machines/incident_display.dmi'
+ /// Disease metric digits color
+ var/disease_display_color = "#4bfba5"
+ /// Current active event diseases
+ var/current_disease_metric = 0
+ /// Previous event disease metric
+ var/prev_disease_metric = 0
+ var/static/list/disease_slogan_good = list(
+ "In the event of an epidemic, please try not to panic.",
+ "In the event of an epidemic, please try not to breathe.",
+ "Please look out for invisible and potentially lethal diseases.",
+ "Staff are reminded not to laugh at Patients whilst they are present. Thank you.",
+ "Don't interact with other crew members, you don't know where they've been.",
+ "Crew members are reminded not to be sick.",
+ )
+ var/static/list/disease_slogan_bad = list(
+ "If you have any questions, first ask yourself why that might be.",
+ "Please be on high alert for invisible and potentially lethal diseases!",
+ "Staff are reminded not to laugh at Patients whilst they are present. Thank you.",
+ "We hope you've enjoyed your stay at the medbay, but not so much that you don't leave... please, eventually leave.",
+ "Pretending your doctor is better than they are may aid recovery.",
+ "Don't interact with other crew members, you don't know where they've been.",
+ "Quality of treatment may depend on Patient behaviour.",
+ "Cured Patients should leave the medbay before they catch something else.",
+ "Please don't ask how our vaccines work, as, we are not exactly sure.",
+ )
+ /// How long between slogans
+ var/slogan_delay = 10 MINUTES
+ COOLDOWN_DECLARE(slogan_cooldown)
+ verb_say = "beeps"
+ verb_ask = "beeps"
+ verb_exclaim = "beeps"
+
+/// Counter board for disease outbreak
+/obj/machinery/incident_display/disease
+ name = NAME_DISEASE
+ desc = DESC_DISEASE
+ sign_features = DISPLAY_DISEASE
+
+MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/incident_display/disease, 32)
+
+/obj/machinery/incident_display/post_machine_initialize()
+ . = ..()
+ COOLDOWN_START(src, slogan_cooldown, rand(0, slogan_delay))
+
+/obj/machinery/incident_display/process()
+ if(COOLDOWN_FINISHED(src, slogan_cooldown) && (sign_features & DISPLAY_DISEASE))
+ if(current_disease_metric == 0)
+ speak(pick(disease_slogan_good))
+ else
+ speak(pick(disease_slogan_bad))
+
+ COOLDOWN_START(src, slogan_cooldown, slogan_delay)
+
+ return ..()
+
+/**
+ * Speak the given message verbally
+ *
+ * Checks if the machine is powered and the message exists
+ *
+ * Arguments:
+ * * message - the message to speak
+ */
+/obj/machinery/incident_display/proc/speak(message)
+ if(machine_stat & (BROKEN|NOPOWER))
+ return
+ if(!message)
+ return
+
+ say(message)
+
+/obj/machinery/incident_display/add_context(atom/source, list/context, obj/item/held_item, mob/user)
+ if(!isliving(user))
+ return
+
+ var/mob/living/living_user = user
+
+ if(held_item?.tool_behaviour == TOOL_WELDER && !living_user.combat_mode && atom_integrity < max_integrity)
+ context[SCREENTIP_CONTEXT_LMB] = "repair display"
+
+ if(held_item?.tool_behaviour == TOOL_MULTITOOL && !living_user.combat_mode)
+ if(sign_features == DISPLAY_TRAM)
+ context[SCREENTIP_CONTEXT_LMB] = "change to disease mode"
+ else if(sign_features == DISPLAY_DISEASE)
+ context[SCREENTIP_CONTEXT_LMB] = "change to delam mode"
+ else if(sign_features == DISPLAY_DELAM)
+ context[SCREENTIP_CONTEXT_LMB] = "change to tram mode"
+
+ return CONTEXTUAL_SCREENTIP_SET
+
+/// Switch modes with multitool
+/obj/machinery/incident_display/multitool_act(mob/living/user, obj/item/tool)
+ if(user.combat_mode)
+ return FALSE
+
+ if(sign_features == DISPLAY_TRAM)
+ tool.play_tool_sound(src)
+ balloon_alert(user, "set to disease")
+ name = NAME_DISEASE
+ desc = DESC_DISEASE
+ sign_features = DISPLAY_DISEASE
+ update_appearance()
+ return TRUE
+ else if(sign_features == DISPLAY_DISEASE)
+ tool.play_tool_sound(src)
+ balloon_alert(user, "set to delam")
+ name = NAME_DELAM
+ desc = DESC_DELAM
+ sign_features = DISPLAY_DELAM
+ update_delam_count(SSpersistence.rounds_since_engine_exploded, SSpersistence.delam_highscore)
+ update_appearance()
+ return TRUE
+ else
+ tool.play_tool_sound(src)
+ balloon_alert(user, "set to tram")
+ name = NAME_TRAM
+ desc = DESC_TRAM
+ sign_features = DISPLAY_TRAM
+ update_tram_count(src, SSpersistence.tram_hits_this_round)
+ update_appearance()
+ return TRUE
+
+/**
+ * Update the disease count on the display
+ *
+ * Use the provided args to update the incident display when in disease mode.
+ * Arguments:
+ * * current - current active event disease metric
+ * * previous - previous cached event disease metric
+ */
+/obj/machinery/incident_display/proc/update_disease_count(source, current, previous)
+ current_disease_metric = min(current, 199)
+ prev_disease_metric = min(previous, 199)
+ update_appearance()
+
+/obj/machinery/incident_display/examine(mob/user)
+ . = ..()
+ if(sign_features & DISPLAY_DISEASE)
+ . += span_notice("It can be changed to display delam-free shifts with a [EXAMINE_HINT("multitool")].")
+ . += span_info("The station has [current_disease_metric] reported active infections incident\s at the moment.")
+ if(current_disease_metric == 0)
+ . += span_notice("[pick(disease_slogan_good)]
")
+ else
+ . += span_notice("[pick(disease_slogan_bad)]
")
+
+#undef DISPLAY_DELAM
+#undef DISPLAY_TRAM
+#undef DISPLAY_DISEASE
+
+#undef NAME_DELAM
+#undef NAME_TRAM
+#undef NAME_DISEASE
+
+#undef DESC_DELAM
+#undef DESC_TRAM
+#undef DESC_DISEASE
+
+#undef TREND_RISING
+#undef TREND_FALLING
diff --git a/modular_zubbers/code/modules/disease/disease_transmission.dm b/modular_zubbers/code/modules/disease/disease_transmission.dm
index 2e7a04dd50f..9bfda714154 100644
--- a/modular_zubbers/code/modules/disease/disease_transmission.dm
+++ b/modular_zubbers/code/modules/disease/disease_transmission.dm
@@ -1,6 +1,36 @@
/datum/controller/subsystem/disease
+ runlevels = RUNLEVEL_GAME|RUNLEVEL_POSTGAME
+ flags = SS_BACKGROUND
+ wait = 16 SECONDS
/// List of event created diseases in all mobs
var/list/event_diseases = list()
+ var/cached_event_disease_count = 0
+ var/previous_event_disease_count = 0
+ var/next_cache_update = 0
+
+/datum/controller/subsystem/disease/stat_entry(msg)
+ msg = "P:[length(active_diseases)] EV:[cached_event_disease_count]"
+ return ..()
+
+/datum/controller/subsystem/disease/fire()
+ update_event_disease_cache()
+
+/datum/controller/subsystem/disease/proc/update_event_disease_cache()
+ if(world.time >= next_cache_update)
+ update_event_disease_metric()
+
+ var/current_infections = 0
+ for(var/datum/disease/active_infection as anything in event_diseases)
+ if(isnull(active_infection.affected_mob) || active_infection.affected_mob?.stat == DEAD)
+ continue // don't count dead people. they can't spread disease, right? right???...
+ current_infections++
+
+ cached_event_disease_count = current_infections
+ SEND_SIGNAL(src, COMSIG_DISEASE_COUNT_UPDATE, cached_event_disease_count, previous_event_disease_count)
+
+/datum/controller/subsystem/disease/proc/update_event_disease_metric()
+ previous_event_disease_count = cached_event_disease_count
+ next_cache_update = world.time + 4 MINUTES
/datum/disease
/// Debug logs for disease transmission refactor, to verify after the fact the system is working as intended
diff --git a/modular_zubbers/icons/obj/machines/incident_display.dmi b/modular_zubbers/icons/obj/machines/incident_display.dmi
new file mode 100644
index 00000000000..556a76c502e
Binary files /dev/null and b/modular_zubbers/icons/obj/machines/incident_display.dmi differ
diff --git a/tgstation.dme b/tgstation.dme
index 07243fe02f7..ed78db8f306 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -8876,6 +8876,7 @@
#include "modular_zubbers\code\game\Items\storage\backpack.dm"
#include "modular_zubbers\code\game\machinery\crew_monitor.dm"
#include "modular_zubbers\code\game\machinery\department_balance.dm"
+#include "modular_zubbers\code\game\machinery\incident_display.dm"
#include "modular_zubbers\code\game\machinery\medipen_refiller.dm"
#include "modular_zubbers\code\game\machinery\morgue.dm"
#include "modular_zubbers\code\game\machinery\syndiepad.dm"