diff --git a/_maps/bandastation/automapper/automapper_config.toml b/_maps/bandastation/automapper/automapper_config.toml
index 7a9c4e6a722b4..d022c9d1ed7b2 100644
--- a/_maps/bandastation/automapper/automapper_config.toml
+++ b/_maps/bandastation/automapper/automapper_config.toml
@@ -118,4 +118,99 @@ map_files = ["tramstation_ntr_blueshield_office.dmm"]
directory = "_maps/bandastation/automapper/templates/tramstation/"
required_map = "tramstation.dmm"
coordinates = [79, 130, 2]
+
+# Metastation Cryo
+[templates.metastation_cryo]
+map_files = ["metastation_cryo.dmm"]
+directory = "_maps/bandastation/automapper/templates/metastation/"
+required_map = "MetaStation.dmm"
+coordinates = [133, 182, 1]
+trait_name = "Station"
+
+# Metastation Perma Cryo
+[templates.metastation_perma_cryo]
+map_files = ["metastation_perma_cryo.dmm"]
+directory = "_maps/bandastation/automapper/templates/metastation/"
+required_map = "MetaStation.dmm"
+coordinates = [84, 189, 1]
+trait_name = "Station"
+
+# Deltastation Cryo
+[templates.deltastation_cryo]
+map_files = ["deltastation_cryo.dmm"]
+directory = "_maps/bandastation/automapper/templates/deltastation/"
+required_map = "DeltaStation2.dmm"
+coordinates = [216, 93, 1]
+trait_name = "Station"
+
+# Deltastation Perma Cryo
+[templates.deltastation_perma_cryo]
+map_files = ["deltastation_perma_cryo.dmm"]
+directory = "_maps/bandastation/automapper/templates/deltastation/"
+required_map = "DeltaStation2.dmm"
+coordinates = [206, 168, 1]
+trait_name = "Station"
+
+# Icebox Cryo
+[templates.icebox_cryo]
+map_files = ["icebox_cryo.dmm"]
+directory = "_maps/bandastation/automapper/templates/iceboxstation/"
+required_map = "IceBoxStation.dmm"
+coordinates = [117, 142, 3]
+trait_name = "Station"
+
+# Icebox Perma Cryo
+[templates.icebox_perma_cryo]
+map_files = ["icebox_perma_cryo.dmm"]
+directory = "_maps/bandastation/automapper/templates/iceboxstation/"
+required_map = "IceBoxStation.dmm"
+coordinates = [108, 184, 2]
+trait_name = "Station"
+
+# Tramstation Cryo
+[templates.tramstation_cryo]
+map_files = ["tramstation_cryo.dmm"]
+directory = "_maps/bandastation/automapper/templates/tramstation/"
+required_map = "tramstation.dmm"
+coordinates = [68, 102, 2]
+trait_name = "Station"
+
+# Tramstation Perma Cryo
+[templates.tramstation_perma_cryo]
+map_files = ["tramstation_perma_cryo.dmm"]
+directory = "_maps/bandastation/automapper/templates/tramstation/"
+required_map = "tramstation.dmm"
+coordinates = [79, 149, 1]
+trait_name = "Station"
+
+# Birdshot Cryo
+[templates.birdshot_cryo]
+map_files = ["birdshot_cryo.dmm"]
+directory = "_maps/bandastation/automapper/templates/birdshot/"
+required_map = "birdshot.dmm"
+coordinates = [142, 84, 1]
+trait_name = "Station"
+
+# Birdshot Perma Cryo
+[templates.birdshot_perma_cryo]
+map_files = ["birdshot_perma_cryo.dmm"]
+directory = "_maps/bandastation/automapper/templates/birdshot/"
+required_map = "birdshot.dmm"
+coordinates = [76, 33, 1]
+trait_name = "Station"
+
+# Nebulastation Cryo
+[templates.nebulastation_cryo]
+map_files = ["nebulastation_cryo.dmm"]
+directory = "_maps/bandastation/automapper/templates/nebulastation/"
+required_map = "NebulaStation.dmm"
+coordinates = [81, 145, 1]
+trait_name = "Station"
+
+# Nebulastation Perma Cryo
+[templates.nebulastation_perma_cryo]
+map_files = ["nebulastation_perma_cryo.dmm"]
+directory = "_maps/bandastation/automapper/templates/nebulastation/"
+required_map = "NebulaStation.dmm"
+coordinates = [154, 86, 2]
trait_name = "Station"
diff --git a/_maps/bandastation/automapper/templates/birdshot/birdshot_cryo.dmm b/_maps/bandastation/automapper/templates/birdshot/birdshot_cryo.dmm
new file mode 100644
index 0000000000000..bbe62f54c4ca4
--- /dev/null
+++ b/_maps/bandastation/automapper/templates/birdshot/birdshot_cryo.dmm
@@ -0,0 +1,216 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"a" = (
+/obj/effect/spawner/structure/window/reinforced,
+/obj/effect/turf_decal/stripes/corner{
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/station/common/cryopods)
+"c" = (
+/turf/closed/wall,
+/area/station/common/cryopods)
+"g" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/power/apc/auto_name/directional/north,
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/turf/open/floor/iron/white/corner{
+ dir = 1
+ },
+/area/station/hallway/secondary/entry)
+"m" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/obj/machinery/light/floor,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/iron/white/corner{
+ dir = 1
+ },
+/area/station/hallway/secondary/entry)
+"n" = (
+/obj/structure/sign/poster/official/random/directional/north,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2,
+/obj/effect/turf_decal/siding/thinplating_new/light{
+ dir = 1
+ },
+/turf/open/floor/iron/small,
+/area/station/common/cryopods)
+"p" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/power/apc/auto_name/directional/north,
+/obj/structure/cable,
+/obj/effect/turf_decal/siding/thinplating_new/light{
+ dir = 1
+ },
+/turf/open/floor/iron/small,
+/area/station/common/cryopods)
+"s" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/cable,
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
+/obj/effect/turf_decal/siding/thinplating_new/light{
+ dir = 1
+ },
+/turf/open/floor/iron/small,
+/area/station/common/cryopods)
+"v" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/item/radio/intercom/directional/north,
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/turf/open/floor/iron/white/corner{
+ dir = 1
+ },
+/area/station/hallway/secondary/entry)
+"x" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/turf/open/floor/iron/small,
+/area/station/common/cryopods)
+"A" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/obj/structure/cable,
+/turf/open/floor/iron/white/corner{
+ dir = 1
+ },
+/area/station/hallway/secondary/entry)
+"G" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/door/firedoor,
+/obj/effect/landmark/navigate_destination{
+ location = "Cryopods"
+ },
+/obj/machinery/door/airlock/public/glass{
+ name = "Cryopods"
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/iron/textured_half,
+/area/station/common/cryopods)
+"J" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/iron/white/corner{
+ dir = 1
+ },
+/area/station/hallway/secondary/entry)
+"K" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/landmark/event_spawn,
+/turf/open/floor/iron/small,
+/area/station/common/cryopods)
+"M" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/cable,
+/obj/effect/turf_decal/siding/thinplating_new/light/end,
+/turf/open/floor/iron/dark,
+/area/station/common/cryopods)
+"Q" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/vending/clothing,
+/turf/open/floor/iron/small,
+/area/station/common/cryopods)
+"R" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/turf/open/floor/iron/small,
+/area/station/common/cryopods)
+"S" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/broken_flooring/corner/directional/south,
+/obj/machinery/cryopod{
+ dir = 4
+ },
+/obj/machinery/camera/autoname/directional/west,
+/turf/open/floor/iron/small,
+/area/station/common/cryopods)
+"U" = (
+/obj/machinery/cryopod{
+ dir = 4
+ },
+/obj/machinery/airalarm/directional/north,
+/obj/effect/turf_decal/siding/thinplating_new/light{
+ dir = 1
+ },
+/turf/open/floor/iron/small,
+/area/station/common/cryopods)
+"V" = (
+/obj/effect/spawner/structure/window/reinforced,
+/obj/effect/turf_decal/stripes/corner{
+ dir = 8
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plating,
+/area/station/common/cryopods)
+"Y" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/door/firedoor,
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/cable,
+/turf/open/floor/catwalk_floor,
+/area/station/hallway/secondary/entry)
+
+(1,1,1) = {"
+a
+a
+c
+g
+"}
+(2,1,1) = {"
+U
+S
+a
+A
+"}
+(3,1,1) = {"
+n
+x
+a
+A
+"}
+(4,1,1) = {"
+M
+K
+G
+Y
+"}
+(5,1,1) = {"
+s
+R
+a
+J
+"}
+(6,1,1) = {"
+p
+Q
+a
+m
+"}
+(7,1,1) = {"
+V
+V
+c
+v
+"}
diff --git a/_maps/bandastation/automapper/templates/birdshot/birdshot_perma_cryo.dmm b/_maps/bandastation/automapper/templates/birdshot/birdshot_perma_cryo.dmm
new file mode 100644
index 0000000000000..7e7b362c1af52
--- /dev/null
+++ b/_maps/bandastation/automapper/templates/birdshot/birdshot_perma_cryo.dmm
@@ -0,0 +1,10 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"a" = (
+/obj/machinery/cryopod/prison/directional/east,
+/obj/machinery/computer/cryopod/directional/south,
+/turf/template_noop,
+/area/template_noop)
+
+(1,1,1) = {"
+a
+"}
diff --git a/_maps/bandastation/automapper/templates/deltastation/deltastation_cryo.dmm b/_maps/bandastation/automapper/templates/deltastation/deltastation_cryo.dmm
new file mode 100644
index 0000000000000..a851dc8cbca13
--- /dev/null
+++ b/_maps/bandastation/automapper/templates/deltastation/deltastation_cryo.dmm
@@ -0,0 +1,107 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"a" = (
+/turf/closed/wall,
+/area/station/commons/fitness/recreation)
+"d" = (
+/obj/effect/turf_decal/siding/white,
+/turf/open/floor/iron/dark,
+/area/station/commons/fitness/recreation)
+"e" = (
+/obj/machinery/computer/cryopod/directional/east,
+/obj/machinery/light/directional/east,
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
+ dir = 8
+ },
+/turf/open/floor/iron/white,
+/area/station/commons/fitness/recreation)
+"k" = (
+/obj/machinery/cryopod{
+ dir = 1
+ },
+/obj/effect/turf_decal/siding/white{
+ dir = 1
+ },
+/obj/machinery/airalarm/directional/east,
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
+ dir = 1
+ },
+/obj/machinery/camera/directional/east,
+/turf/open/floor/iron/dark,
+/area/station/commons/fitness/recreation)
+"v" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/turf/open/floor/iron/white,
+/area/station/commons/fitness/recreation)
+"F" = (
+/obj/machinery/cryopod{
+ dir = 1
+ },
+/obj/effect/turf_decal/siding/white{
+ dir = 1
+ },
+/turf/open/floor/iron/dark,
+/area/station/commons/fitness/recreation)
+"G" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/door/airlock/public/glass{
+ name = "Cryopods"
+ },
+/obj/effect/landmark/navigate_destination{
+ location = "Cryopods"
+ },
+/turf/open/floor/iron/white,
+/area/station/commons/fitness/recreation)
+"I" = (
+/obj/effect/spawner/structure/window/reinforced,
+/turf/open/floor/plating,
+/area/station/commons/fitness/recreation)
+"P" = (
+/obj/effect/landmark/start/hangover,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
+ dir = 8
+ },
+/turf/open/floor/iron/white,
+/area/station/commons/fitness/recreation)
+"Z" = (
+/obj/machinery/cryopod,
+/obj/effect/turf_decal/siding/white,
+/turf/open/floor/iron/dark,
+/area/station/commons/fitness/recreation)
+
+(1,1,1) = {"
+a
+I
+G
+I
+a
+"}
+(2,1,1) = {"
+I
+Z
+P
+F
+I
+"}
+(3,1,1) = {"
+I
+Z
+v
+F
+I
+"}
+(4,1,1) = {"
+I
+d
+e
+k
+I
+"}
+(5,1,1) = {"
+a
+a
+a
+a
+a
+"}
diff --git a/_maps/bandastation/automapper/templates/deltastation/deltastation_perma_cryo.dmm b/_maps/bandastation/automapper/templates/deltastation/deltastation_perma_cryo.dmm
new file mode 100644
index 0000000000000..85f53d3dc11bd
--- /dev/null
+++ b/_maps/bandastation/automapper/templates/deltastation/deltastation_perma_cryo.dmm
@@ -0,0 +1,14 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"a" = (
+/obj/machinery/computer/cryopod/directional/west,
+/turf/template_noop,
+/area/template_noop)
+"T" = (
+/obj/machinery/cryopod/prison/directional/west,
+/turf/template_noop,
+/area/template_noop)
+
+(1,1,1) = {"
+T
+a
+"}
diff --git a/_maps/bandastation/automapper/templates/iceboxstation/icebox_cryo.dmm b/_maps/bandastation/automapper/templates/iceboxstation/icebox_cryo.dmm
new file mode 100644
index 0000000000000..c74ca531336bf
--- /dev/null
+++ b/_maps/bandastation/automapper/templates/iceboxstation/icebox_cryo.dmm
@@ -0,0 +1,226 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"a" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/turf/open/floor/iron,
+/area/station/common/cryopods)
+"b" = (
+/obj/machinery/cryopod{
+ dir = 4
+ },
+/obj/effect/turf_decal/siding/white{
+ dir = 4
+ },
+/turf/open/floor/iron/dark,
+/area/station/common/cryopods)
+"e" = (
+/obj/machinery/door/firedoor,
+/obj/machinery/door/airlock/public/glass{
+ name = "Dormitory"
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/turf_decal/tile/neutral/fourcorners,
+/obj/effect/turf_decal/stripes/white/line,
+/obj/effect/turf_decal/stripes/white/line{
+ dir = 1
+ },
+/obj/structure/cable,
+/turf/open/floor/iron/dark/textured,
+/area/station/commons/dorms)
+"f" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/door/airlock/public/glass{
+ name = "Cryopods"
+ },
+/obj/effect/landmark/navigate_destination,
+/turf/open/floor/iron,
+/area/station/common/cryopods)
+"j" = (
+/obj/effect/turf_decal/siding/white{
+ dir = 9
+ },
+/obj/machinery/light/directional/east,
+/turf/open/floor/iron/dark,
+/area/station/common/cryopods)
+"k" = (
+/obj/machinery/computer/cryopod/directional/north,
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/turf/open/floor/iron,
+/area/station/common/cryopods)
+"v" = (
+/obj/effect/spawner/structure/window,
+/turf/open/floor/plating,
+/area/station/common/cryopods)
+"y" = (
+/turf/template_noop,
+/area/template_noop)
+"z" = (
+/obj/machinery/cryopod{
+ dir = 8
+ },
+/obj/effect/turf_decal/siding/white{
+ dir = 8
+ },
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
+ dir = 8
+ },
+/turf/open/floor/iron/dark,
+/area/station/common/cryopods)
+"B" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/structure/cable,
+/obj/machinery/light/floor,
+/turf/open/floor/iron,
+/area/station/hallway/primary/central)
+"C" = (
+/turf/closed/wall,
+/area/station/common/cryopods)
+"E" = (
+/obj/machinery/cryopod{
+ dir = 4
+ },
+/obj/effect/turf_decal/siding/white{
+ dir = 4
+ },
+/obj/machinery/power/apc/auto_name/directional/north,
+/obj/structure/cable,
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
+ dir = 4
+ },
+/obj/machinery/camera/directional/west,
+/turf/open/floor/iron/dark,
+/area/station/common/cryopods)
+"J" = (
+/obj/machinery/cryopod{
+ dir = 4
+ },
+/obj/effect/turf_decal/siding/white{
+ dir = 4
+ },
+/obj/machinery/airalarm/directional/west,
+/turf/open/floor/iron/dark,
+/area/station/common/cryopods)
+"K" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/light/directional/north,
+/turf/open/floor/iron,
+/area/station/common/cryopods)
+"M" = (
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/turf/open/floor/iron,
+/area/station/commons/dorms)
+"P" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/turf_decal/tile/neutral/half/contrasted{
+ dir = 4
+ },
+/obj/structure/cable,
+/turf/open/floor/iron,
+/area/station/hallway/primary/central)
+"Q" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/turf_decal/tile/neutral/half/contrasted{
+ dir = 4
+ },
+/turf/open/floor/iron,
+/area/station/commons/dorms)
+"T" = (
+/obj/machinery/light/floor,
+/turf/open/floor/iron,
+/area/station/hallway/primary/central)
+"W" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/turf_decal/tile/neutral/half/contrasted{
+ dir = 4
+ },
+/obj/structure/cable,
+/turf/open/floor/iron,
+/area/station/commons/dorms)
+"Z" = (
+/obj/structure/extinguisher_cabinet/directional/east,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/turf_decal/tile/neutral/half/contrasted{
+ dir = 4
+ },
+/obj/structure/cable,
+/turf/open/floor/iron,
+/area/station/hallway/primary/central)
+
+(1,1,1) = {"
+C
+C
+C
+v
+v
+y
+"}
+(2,1,1) = {"
+C
+E
+J
+b
+v
+y
+"}
+(3,1,1) = {"
+C
+k
+a
+a
+v
+y
+"}
+(4,1,1) = {"
+C
+K
+j
+z
+v
+T
+"}
+(5,1,1) = {"
+C
+f
+C
+v
+v
+y
+"}
+(6,1,1) = {"
+y
+M
+y
+y
+y
+y
+"}
+(7,1,1) = {"
+Q
+W
+e
+Z
+P
+B
+"}
diff --git a/_maps/bandastation/automapper/templates/iceboxstation/icebox_perma_cryo.dmm b/_maps/bandastation/automapper/templates/iceboxstation/icebox_perma_cryo.dmm
new file mode 100644
index 0000000000000..532b0796025f8
--- /dev/null
+++ b/_maps/bandastation/automapper/templates/iceboxstation/icebox_perma_cryo.dmm
@@ -0,0 +1,16 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"a" = (
+/obj/machinery/cryopod/prison/directional/south,
+/turf/template_noop,
+/area/template_noop)
+"V" = (
+/obj/machinery/computer/cryopod/directional/south,
+/turf/template_noop,
+/area/template_noop)
+
+(1,1,1) = {"
+V
+"}
+(2,1,1) = {"
+a
+"}
diff --git a/_maps/bandastation/automapper/templates/metastation/metastation_cryo.dmm b/_maps/bandastation/automapper/templates/metastation/metastation_cryo.dmm
index 70281bf54fbad..046a5d202a0b4 100644
--- a/_maps/bandastation/automapper/templates/metastation/metastation_cryo.dmm
+++ b/_maps/bandastation/automapper/templates/metastation/metastation_cryo.dmm
@@ -3,13 +3,24 @@
/turf/template_noop,
/area/template_noop)
"e" = (
+/obj/machinery/computer/cryopod/directional/west,
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
dir = 4
},
/obj/machinery/light/directional/west,
+/obj/effect/turf_decal/trimline/dark_green/line,
+/obj/effect/turf_decal/trimline/dark_green/line{
+ dir = 1
+ },
/turf/open/floor/iron/white,
/area/station/common/cryopods)
"i" = (
+/obj/machinery/cryopod{
+ dir = 1
+ },
+/obj/effect/turf_decal/siding/white{
+ dir = 1
+ },
/obj/machinery/airalarm/directional/south,
/turf/open/floor/iron/dark,
/area/station/common/cryopods)
@@ -18,15 +29,27 @@
/turf/open/floor/plating,
/area/station/common/cryopods)
"p" = (
+/obj/effect/turf_decal/siding/white,
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2,
/turf/open/floor/iron/dark,
/area/station/common/cryopods)
"q" = (
+/obj/machinery/cryopod{
+ dir = 1
+ },
+/obj/effect/turf_decal/siding/white{
+ dir = 1
+ },
/obj/structure/cable,
/obj/machinery/power/apc/auto_name/directional/south,
/turf/open/floor/iron/dark,
/area/station/common/cryopods)
"v" = (
+/obj/machinery/cryopod,
+/obj/effect/turf_decal/siding/white,
+/obj/machinery/camera/directional/north{
+ c_tag = "Cryogenics Pods"
+ },
/turf/open/floor/iron/dark,
/area/station/common/cryopods)
"x" = (
@@ -46,6 +69,10 @@
/obj/structure/cable,
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/turf_decal/trimline/dark_green/line,
+/obj/effect/turf_decal/trimline/dark_green/line{
+ dir = 1
+ },
/turf/open/floor/iron/white,
/area/station/common/cryopods)
"L" = (
diff --git a/_maps/bandastation/automapper/templates/metastation/metastation_perma_cryo.dmm b/_maps/bandastation/automapper/templates/metastation/metastation_perma_cryo.dmm
new file mode 100644
index 0000000000000..61876147aad3b
--- /dev/null
+++ b/_maps/bandastation/automapper/templates/metastation/metastation_perma_cryo.dmm
@@ -0,0 +1,14 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"a" = (
+/obj/machinery/cryopod/prison/directional/east,
+/turf/template_noop,
+/area/template_noop)
+"Z" = (
+/obj/machinery/computer/cryopod/directional/east,
+/turf/template_noop,
+/area/template_noop)
+
+(1,1,1) = {"
+Z
+a
+"}
diff --git a/_maps/bandastation/automapper/templates/nebulastation/nebulastation_cryo.dmm b/_maps/bandastation/automapper/templates/nebulastation/nebulastation_cryo.dmm
new file mode 100644
index 0000000000000..bd14bd0746950
--- /dev/null
+++ b/_maps/bandastation/automapper/templates/nebulastation/nebulastation_cryo.dmm
@@ -0,0 +1,506 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"b" = (
+/obj/effect/spawner/structure/window/reinforced,
+/turf/open/floor/plating,
+/area/station/common/cryopods)
+"c" = (
+/obj/effect/turf_decal/siding/thinplating_new/dark{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/item/kirbyplants/random,
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/item/radio/intercom/directional/east,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/turf/open/floor/iron/dark/side{
+ dir = 4
+ },
+/area/station/commons/dorms)
+"h" = (
+/obj/item/clothing/suit/caution,
+/obj/machinery/duct,
+/turf/open/floor/plating,
+/area/station/maintenance/port/central)
+"i" = (
+/obj/effect/turf_decal/siding/thinplating_new/light{
+ dir = 4
+ },
+/obj/effect/turf_decal/siding/thinplating_new/light/corner{
+ dir = 1
+ },
+/obj/effect/turf_decal/siding/thinplating_new/light/corner{
+ dir = 8
+ },
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/turf/open/floor/iron/white/herringbone,
+/area/station/commons/toilet/restrooms)
+"j" = (
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/structure/chair{
+ dir = 8
+ },
+/obj/structure/cable,
+/obj/effect/landmark/start/hangover,
+/obj/effect/turf_decal/siding/thinplating_new/dark{
+ dir = 9
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/turf/open/floor/iron/dark/corner,
+/area/station/commons/dorms)
+"k" = (
+/obj/machinery/cryopod{
+ dir = 8
+ },
+/obj/effect/turf_decal/trimline/dark_green/line{
+ dir = 5
+ },
+/turf/open/floor/iron/dark/textured,
+/area/station/common/cryopods)
+"l" = (
+/obj/machinery/door/airlock{
+ name = "Unisex Restrooms"
+ },
+/obj/machinery/door/firedoor,
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/turf/open/floor/iron/dark,
+/area/station/commons/toilet/restrooms)
+"m" = (
+/obj/machinery/computer/cryopod/directional/west,
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
+/obj/effect/turf_decal/trimline/dark_green/line{
+ dir = 9
+ },
+/turf/open/floor/iron/dark/textured,
+/area/station/common/cryopods)
+"o" = (
+/obj/effect/turf_decal/siding/thinplating_new/light/end{
+ dir = 1
+ },
+/obj/structure/table/glass,
+/obj/structure/bedsheetbin/empty,
+/obj/structure/sign/poster/random/directional/north,
+/obj/machinery/light/directional/north,
+/turf/open/floor/iron/white/small,
+/area/station/commons/toilet/restrooms)
+"p" = (
+/obj/effect/turf_decal/siding/thinplating_new/light{
+ dir = 8
+ },
+/obj/effect/turf_decal/siding/thinplating_new/light{
+ dir = 4
+ },
+/obj/machinery/light/directional/west,
+/obj/machinery/newscaster/directional/west,
+/turf/open/floor/iron/white/herringbone,
+/area/station/commons/toilet/restrooms)
+"q" = (
+/obj/effect/turf_decal/siding/thinplating_new/light{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/turf/open/floor/iron/white/herringbone,
+/area/station/commons/toilet/restrooms)
+"t" = (
+/obj/machinery/cryopod{
+ dir = 8
+ },
+/obj/machinery/power/apc/auto_name/directional/south,
+/obj/effect/turf_decal/trimline/dark_green/line{
+ dir = 6
+ },
+/obj/structure/cable,
+/turf/open/floor/iron/dark/textured,
+/area/station/common/cryopods)
+"u" = (
+/obj/effect/turf_decal/siding/thinplating_new/dark{
+ dir = 8
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/turf/open/floor/iron/dark/side{
+ dir = 4
+ },
+/area/station/commons/dorms)
+"x" = (
+/obj/effect/turf_decal/siding/thinplating_new/light/end,
+/obj/machinery/duct,
+/turf/open/floor/iron/white/small,
+/area/station/commons/toilet/restrooms)
+"A" = (
+/turf/open/floor/iron/stairs/medium{
+ dir = 4
+ },
+/area/station/commons/toilet/restrooms)
+"C" = (
+/turf/template_noop,
+/area/template_noop)
+"D" = (
+/obj/machinery/door/airlock/maintenance{
+ name = "Dormitory Maintenance"
+ },
+/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance,
+/obj/effect/mapping_helpers/airlock/unres,
+/obj/machinery/duct,
+/turf/open/floor/plating,
+/area/station/maintenance/port/central)
+"F" = (
+/obj/structure/mirror/directional/east,
+/obj/effect/turf_decal/siding/thinplating_new/light/end{
+ dir = 4
+ },
+/obj/machinery/duct,
+/obj/item/soap/deluxe{
+ pixel_y = 2
+ },
+/obj/item/soap{
+ pixel_y = -4
+ },
+/turf/open/floor/iron/white/small,
+/area/station/commons/toilet/restrooms)
+"G" = (
+/obj/structure/flora/bush/jungle/c/style_2,
+/obj/structure/flora/bush/sparsegrass/style_random,
+/obj/structure/flora/bush/lavendergrass/style_random,
+/obj/effect/turf_decal/siding/thinplating_new/dark{
+ dir = 1
+ },
+/obj/effect/turf_decal/siding/thinplating_new/dark,
+/obj/structure/flora/bush/large/style_2{
+ pixel_y = 0
+ },
+/obj/machinery/light/warm/directional/north,
+/turf/open/floor/grass,
+/area/station/common/cryopods)
+"H" = (
+/turf/closed/wall,
+/area/station/common/cryopods)
+"K" = (
+/obj/effect/turf_decal/trimline/dark_green/filled/line{
+ dir = 4
+ },
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/turf/open/floor/iron/dark/textured,
+/area/station/commons/dorms)
+"L" = (
+/obj/effect/turf_decal/siding/thinplating_new/dark{
+ dir = 10
+ },
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/landmark/start/hangover,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/turf/open/floor/iron/dark/corner{
+ dir = 4
+ },
+/area/station/commons/dorms)
+"M" = (
+/obj/effect/turf_decal/siding/thinplating_new/light{
+ dir = 4
+ },
+/obj/effect/turf_decal/siding/thinplating_new/light{
+ dir = 8
+ },
+/turf/open/floor/iron/white/herringbone,
+/area/station/commons/toilet/restrooms)
+"N" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
+ dir = 8
+ },
+/obj/machinery/airalarm/directional/south,
+/obj/effect/turf_decal/trimline/dark_green/line{
+ dir = 10
+ },
+/obj/structure/cable,
+/turf/open/floor/iron/dark/textured,
+/area/station/common/cryopods)
+"O" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/turf_decal/trimline/dark_green/filled/line{
+ dir = 4
+ },
+/turf/open/floor/iron/dark/textured,
+/area/station/commons/dorms)
+"S" = (
+/obj/structure/table/reinforced/rglass,
+/obj/item/reagent_containers/cup/glass/waterbottle{
+ pixel_x = -5;
+ pixel_y = 9
+ },
+/obj/item/reagent_containers/cup/glass/waterbottle{
+ pixel_x = 5;
+ pixel_y = 9
+ },
+/obj/item/reagent_containers/cup/glass/waterbottle{
+ pixel_y = 5
+ },
+/obj/effect/turf_decal/tile/green/diagonal_centre,
+/obj/effect/turf_decal/tile/blue/diagonal_centre,
+/obj/effect/turf_decal/tile/dark_blue/diagonal_edge,
+/obj/machinery/duct,
+/turf/open/floor/iron/white/diagonal,
+/area/station/commons/toilet/restrooms)
+"U" = (
+/obj/machinery/door/airlock/public/glass{
+ name = "Cryopods"
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/structure/cable,
+/obj/effect/landmark/navigate_destination{
+ location = "Cryopods"
+ },
+/turf/open/floor/iron/dark/textured,
+/area/station/common/cryopods)
+"W" = (
+/obj/structure/reagent_dispensers/plumbed{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/station/maintenance/port/central)
+"X" = (
+/obj/effect/turf_decal/siding/thinplating_new/light/corner,
+/obj/effect/turf_decal/siding/thinplating_new/light/corner{
+ dir = 8
+ },
+/obj/effect/turf_decal/siding/thinplating_new/light/corner{
+ dir = 4
+ },
+/obj/effect/turf_decal/siding/thinplating_new/light/corner{
+ dir = 1
+ },
+/obj/effect/landmark/start/hangover,
+/obj/machinery/duct,
+/turf/open/floor/iron/white/small,
+/area/station/commons/toilet/restrooms)
+"Y" = (
+/obj/effect/turf_decal/siding/thinplating_new/light{
+ dir = 4
+ },
+/turf/open/floor/iron/white/herringbone,
+/area/station/commons/toilet/restrooms)
+
+(1,1,1) = {"
+C
+C
+C
+O
+j
+u
+c
+L
+K
+C
+C
+C
+C
+C
+"}
+(2,1,1) = {"
+H
+H
+H
+U
+H
+C
+C
+C
+l
+C
+C
+C
+C
+C
+"}
+(3,1,1) = {"
+H
+G
+m
+N
+H
+C
+C
+C
+i
+p
+C
+C
+C
+C
+"}
+(4,1,1) = {"
+H
+H
+k
+t
+H
+C
+C
+C
+C
+S
+C
+C
+C
+C
+"}
+(5,1,1) = {"
+C
+H
+b
+b
+H
+C
+C
+C
+C
+M
+C
+C
+C
+C
+"}
+(6,1,1) = {"
+C
+C
+C
+C
+C
+C
+C
+C
+C
+A
+C
+C
+C
+C
+"}
+(7,1,1) = {"
+C
+C
+C
+C
+C
+C
+C
+C
+q
+Y
+C
+C
+C
+C
+"}
+(8,1,1) = {"
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+"}
+(9,1,1) = {"
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+"}
+(10,1,1) = {"
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+"}
+(11,1,1) = {"
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+C
+W
+C
+"}
+(12,1,1) = {"
+C
+C
+C
+C
+C
+C
+C
+C
+o
+X
+x
+D
+h
+C
+"}
+(13,1,1) = {"
+C
+C
+C
+C
+C
+C
+C
+C
+C
+F
+C
+C
+C
+C
+"}
diff --git a/_maps/bandastation/automapper/templates/nebulastation/nebulastation_perma_cryo.dmm b/_maps/bandastation/automapper/templates/nebulastation/nebulastation_perma_cryo.dmm
new file mode 100644
index 0000000000000..be5cea81a396c
--- /dev/null
+++ b/_maps/bandastation/automapper/templates/nebulastation/nebulastation_perma_cryo.dmm
@@ -0,0 +1,18 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"a" = (
+/obj/effect/turf_decal/siding/thinplating_new/dark{
+ dir = 9
+ },
+/obj/effect/turf_decal/trimline/red/filled/corner,
+/obj/effect/turf_decal/siding/thinplating_new/dark/corner,
+/obj/machinery/camera/autoname/directional/west{
+ network = list("prison")
+ },
+/obj/machinery/cryopod/prison/directional/west,
+/obj/machinery/computer/cryopod/directional/north,
+/turf/open/floor/iron/dark/textured,
+/area/station/security/prison)
+
+(1,1,1) = {"
+a
+"}
diff --git a/_maps/bandastation/automapper/templates/northstar/northstar_cryo.dmm b/_maps/bandastation/automapper/templates/northstar/northstar_cryo.dmm
new file mode 100644
index 0000000000000..fd4b5e70a6830
--- /dev/null
+++ b/_maps/bandastation/automapper/templates/northstar/northstar_cryo.dmm
@@ -0,0 +1,896 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"bp" = (
+/obj/effect/turf_decal/trimline/green/filled/line{
+ dir = 8
+ },
+/obj/machinery/light/directional/west,
+/turf/open/floor/iron,
+/area/station/commons/vacant_room/commissary)
+"bV" = (
+/obj/effect/turf_decal/trimline/green/filled/line{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/cable,
+/turf/open/floor/iron,
+/area/station/commons/vacant_room/commissary)
+"bX" = (
+/obj/effect/turf_decal/siding/thinplating_new/light{
+ dir = 8
+ },
+/obj/machinery/cryopod{
+ dir = 4
+ },
+/obj/effect/turf_decal/siding/thinplating_new/light{
+ dir = 4
+ },
+/obj/machinery/firealarm/directional/west,
+/turf/open/floor/iron/dark,
+/area/station/common/cryopods)
+"di" = (
+/obj/effect/spawner/structure/window/reinforced,
+/turf/open/floor/plating,
+/area/station/commons/vacant_room/commissary)
+"dG" = (
+/obj/effect/turf_decal/trimline/green/filled/line{
+ dir = 4
+ },
+/obj/effect/turf_decal/bot,
+/obj/effect/turf_decal/trimline/green/filled/line{
+ dir = 8
+ },
+/obj/structure/rack,
+/obj/item/circuitboard/machine/processor{
+ pixel_y = 10
+ },
+/obj/item/circuitboard/machine/oven,
+/obj/item/circuitboard/machine/microwave{
+ pixel_y = -10
+ },
+/turf/open/floor/iron,
+/area/station/commons/vacant_room/commissary)
+"dP" = (
+/obj/structure/window/spawner/directional/south,
+/obj/structure/flora/bush/flowers_br/style_random,
+/obj/structure/flora/bush/flowers_pp/style_random,
+/obj/structure/window/spawner/directional/east,
+/turf/open/floor/grass,
+/area/station/common/cryopods)
+"eu" = (
+/obj/machinery/newscaster/directional/south,
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
+ dir = 4
+ },
+/turf/open/floor/iron/checker,
+/area/station/commons/vacant_room/commissary)
+"eN" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/cable,
+/obj/effect/turf_decal/trimline/green/filled/line{
+ dir = 4
+ },
+/turf/open/floor/iron,
+/area/station/commons/vacant_room/commissary)
+"fj" = (
+/obj/effect/spawner/structure/window/reinforced,
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "comish_shutter"
+ },
+/turf/open/floor/plating,
+/area/station/commons/vacant_room/commissary)
+"fs" = (
+/obj/effect/turf_decal/trimline/green/filled/line{
+ dir = 8
+ },
+/obj/machinery/camera/directional/west,
+/turf/open/floor/iron,
+/area/station/commons/vacant_room/commissary)
+"hm" = (
+/obj/structure/table/reinforced,
+/obj/structure/window/reinforced/spawner/directional/west,
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "comish_shutter"
+ },
+/turf/open/floor/iron,
+/area/station/commons/vacant_room/commissary)
+"hN" = (
+/obj/structure/chair,
+/obj/structure/sign/poster/official/random/directional/east,
+/turf/open/floor/iron/checker,
+/area/station/commons/vacant_room/commissary)
+"ia" = (
+/obj/structure/table,
+/obj/item/pai_card,
+/turf/open/floor/iron/checker,
+/area/station/commons/vacant_room/commissary)
+"ib" = (
+/obj/effect/turf_decal/tile/green/opposingcorners{
+ dir = 8
+ },
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
+ dir = 8
+ },
+/turf/open/floor/iron/checker,
+/area/station/commons/vacant_room/commissary)
+"ic" = (
+/obj/effect/turf_decal/trimline/green/filled/line{
+ dir = 8
+ },
+/obj/item/radio/intercom/directional/west,
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
+ dir = 4
+ },
+/turf/open/floor/iron,
+/area/station/commons/vacant_room/commissary)
+"io" = (
+/obj/machinery/door/airlock/public/glass{
+ name = "Cryopods"
+ },
+/obj/effect/landmark/navigate_destination{
+ location = "Cryopods"
+ },
+/obj/machinery/door/firedoor,
+/turf/open/floor/iron/dark,
+/area/station/common/cryopods)
+"kc" = (
+/obj/effect/turf_decal/trimline/green/filled/line{
+ dir = 1
+ },
+/obj/effect/turf_decal/trimline/green/filled/line,
+/obj/structure/disposalpipe/segment{
+ dir = 10
+ },
+/turf/open/floor/iron,
+/area/station/commons/vacant_room/commissary)
+"lt" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/turf/open/floor/iron/dark,
+/area/station/common/cryopods)
+"lv" = (
+/obj/item/kirbyplants/random,
+/turf/open/floor/iron/checker,
+/area/station/commons/vacant_room/commissary)
+"lO" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/machinery/door/airlock{
+ name = "Vacant Commissary"
+ },
+/turf/open/floor/iron/dark,
+/area/station/commons/vacant_room/commissary)
+"mU" = (
+/obj/effect/turf_decal/siding/thinplating_new/light{
+ dir = 8
+ },
+/obj/machinery/cryopod{
+ dir = 8
+ },
+/obj/effect/turf_decal/siding/thinplating_new/light{
+ dir = 4
+ },
+/obj/machinery/camera/directional/east,
+/turf/open/floor/iron/dark,
+/area/station/common/cryopods)
+"ng" = (
+/obj/structure/chair,
+/obj/machinery/light_switch/directional/west,
+/turf/open/floor/iron/checker,
+/area/station/commons/vacant_room/commissary)
+"nC" = (
+/obj/effect/turf_decal/trimline/green/filled/line{
+ dir = 6
+ },
+/obj/effect/turf_decal/bot,
+/obj/effect/turf_decal/trimline/green/filled/corner{
+ dir = 1
+ },
+/obj/machinery/disposal/bin,
+/obj/structure/disposalpipe/trunk{
+ dir = 8
+ },
+/turf/open/floor/iron,
+/area/station/commons/vacant_room/commissary)
+"nQ" = (
+/obj/effect/turf_decal/trimline/green/filled/line,
+/obj/effect/turf_decal/trimline/green/filled/line{
+ dir = 1
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 5
+ },
+/obj/machinery/airalarm/directional/south,
+/turf/open/floor/iron,
+/area/station/commons/vacant_room/commissary)
+"oz" = (
+/obj/structure/chair{
+ dir = 1
+ },
+/turf/open/floor/iron/checker,
+/area/station/commons/vacant_room/commissary)
+"oE" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/iron/dark/side,
+/area/station/hallway/floor3/aft)
+"oI" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/turf_decal/trimline/green/filled/line,
+/obj/effect/turf_decal/trimline/green/filled/line{
+ dir = 1
+ },
+/turf/open/floor/iron,
+/area/station/commons/vacant_room/commissary)
+"oZ" = (
+/obj/effect/turf_decal/trimline/green/filled/line{
+ dir = 1
+ },
+/obj/effect/turf_decal/trimline/green/filled/line,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/iron,
+/area/station/commons/vacant_room/commissary)
+"qE" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/landmark/start/hangover,
+/obj/effect/turf_decal/trimline/green/filled/line{
+ dir = 4
+ },
+/obj/structure/cable,
+/turf/open/floor/iron,
+/area/station/commons/vacant_room/commissary)
+"qF" = (
+/obj/effect/turf_decal/siding/thinplating_new/light/end,
+/obj/machinery/cryopod{
+ dir = 4
+ },
+/obj/machinery/light/directional/west,
+/turf/open/floor/iron/dark,
+/area/station/common/cryopods)
+"qI" = (
+/obj/structure/sign/poster/official/random/directional/west,
+/obj/effect/spawner/random/vending/colavend,
+/turf/open/floor/iron/checker,
+/area/station/commons/vacant_room/commissary)
+"qP" = (
+/obj/effect/turf_decal/trimline/green/filled/line{
+ dir = 1
+ },
+/obj/effect/turf_decal/trimline/green/filled/line,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/machinery/light/directional/north,
+/obj/machinery/button/door/directional/north{
+ name = "Commissary Shutters";
+ pixel_x = -5;
+ id = "comish_shutter"
+ },
+/obj/machinery/button/door/directional/north{
+ name = "Commissary Door";
+ pixel_x = 7;
+ id = "comish_door";
+ normaldoorcontrol = 1;
+ specialfunctions = 4
+ },
+/turf/open/floor/iron,
+/area/station/commons/vacant_room/commissary)
+"rA" = (
+/obj/effect/turf_decal/tile/green/opposingcorners{
+ dir = 8
+ },
+/turf/open/floor/iron/checker,
+/area/station/commons/vacant_room/commissary)
+"rT" = (
+/obj/machinery/door/airlock/public/glass{
+ name = "Cryopods"
+ },
+/obj/machinery/door/firedoor,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/turf/open/floor/iron/dark,
+/area/station/common/cryopods)
+"se" = (
+/obj/machinery/airalarm/directional/south,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/structure/cable,
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
+ dir = 8
+ },
+/turf/open/floor/iron/dark,
+/area/station/common/cryopods)
+"si" = (
+/obj/effect/turf_decal/trimline/green/filled/line{
+ dir = 5
+ },
+/obj/effect/spawner/random/structure/crate,
+/obj/effect/turf_decal/bot,
+/obj/effect/turf_decal/trimline/green/filled/corner{
+ dir = 8
+ },
+/turf/open/floor/iron,
+/area/station/commons/vacant_room/commissary)
+"sM" = (
+/obj/machinery/airalarm/directional/north,
+/turf/open/floor/iron/checker,
+/area/station/commons/vacant_room/commissary)
+"tv" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/structure/cable,
+/turf/open/floor/iron/dark/side,
+/area/station/hallway/floor3/aft)
+"wl" = (
+/obj/structure/window/spawner/directional/south,
+/obj/structure/flora/bush/flowers_br/style_random,
+/obj/structure/flora/bush/flowers_pp/style_random,
+/obj/structure/window/spawner/directional/west,
+/turf/open/floor/grass,
+/area/station/common/cryopods)
+"wR" = (
+/obj/effect/turf_decal/trimline/green/filled/line{
+ dir = 4
+ },
+/obj/effect/turf_decal/bot,
+/obj/effect/turf_decal/trimline/green/filled/line{
+ dir = 8
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/light/directional/east,
+/obj/machinery/firealarm/directional/east,
+/turf/open/floor/iron,
+/area/station/commons/vacant_room/commissary)
+"zq" = (
+/obj/machinery/computer/cryopod/directional/south,
+/turf/open/floor/iron/dark,
+/area/station/common/cryopods)
+"Ao" = (
+/obj/effect/spawner/structure/window/reinforced,
+/turf/open/floor/plating,
+/area/station/common/cryopods)
+"AB" = (
+/obj/structure/table,
+/obj/machinery/light/directional/east,
+/turf/open/floor/iron/checker,
+/area/station/commons/vacant_room/commissary)
+"AR" = (
+/obj/effect/turf_decal/trimline/green/filled/line,
+/obj/effect/turf_decal/trimline/green/filled/line{
+ dir = 1
+ },
+/obj/structure/table,
+/obj/item/stack/cable_coil,
+/obj/item/stack/sheet/glass/fifty,
+/obj/machinery/power/apc/auto_name/directional/south,
+/obj/structure/cable,
+/turf/open/floor/iron,
+/area/station/commons/vacant_room/commissary)
+"CF" = (
+/obj/structure/chair{
+ dir = 1
+ },
+/obj/machinery/firealarm/directional/west,
+/turf/open/floor/iron/checker,
+/area/station/commons/vacant_room/commissary)
+"CO" = (
+/turf/template_noop,
+/area/template_noop)
+"Dz" = (
+/obj/structure/disposalpipe/junction{
+ dir = 4
+ },
+/turf/open/floor/iron/dark/side,
+/area/station/hallway/floor3/aft)
+"ED" = (
+/obj/effect/turf_decal/trimline/green/filled/line{
+ dir = 8
+ },
+/obj/effect/turf_decal/trimline/green/filled/line{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/structure/cable,
+/turf/open/floor/iron,
+/area/station/commons/vacant_room/commissary)
+"EE" = (
+/obj/structure/disposalpipe/segment,
+/obj/effect/turf_decal/trimline/green/filled/line{
+ dir = 8
+ },
+/obj/machinery/holopad,
+/turf/open/floor/iron,
+/area/station/commons/vacant_room/commissary)
+"Fk" = (
+/obj/effect/turf_decal/trimline/green/filled/line{
+ dir = 4
+ },
+/obj/effect/turf_decal/trimline/green/filled/line{
+ dir = 8
+ },
+/turf/open/floor/iron,
+/area/station/commons/vacant_room/commissary)
+"FP" = (
+/obj/effect/turf_decal/delivery,
+/obj/machinery/door/firedoor/heavy,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/cable,
+/turf/open/floor/iron/dark,
+/area/station/commons/vacant_room/commissary)
+"FR" = (
+/obj/effect/turf_decal/tile/green/opposingcorners{
+ dir = 8
+ },
+/obj/machinery/holopad,
+/turf/open/floor/iron/checker,
+/area/station/commons/vacant_room/commissary)
+"Hk" = (
+/obj/effect/turf_decal/trimline/green/filled/line{
+ dir = 10
+ },
+/obj/effect/turf_decal/trimline/green/filled/corner{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/table,
+/obj/item/stack/sheet/iron/ten,
+/obj/machinery/light_switch/directional/west,
+/obj/structure/cable,
+/turf/open/floor/iron,
+/area/station/commons/vacant_room/commissary)
+"Io" = (
+/obj/machinery/cryopod{
+ dir = 8
+ },
+/obj/effect/turf_decal/siding/thinplating_new/light/end,
+/turf/open/floor/iron/dark,
+/area/station/common/cryopods)
+"IB" = (
+/obj/effect/turf_decal/trimline/green/filled/line{
+ dir = 6
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/cable,
+/turf/open/floor/iron,
+/area/station/commons/vacant_room/commissary)
+"IH" = (
+/turf/closed/wall,
+/area/station/common/cryopods)
+"JW" = (
+/obj/machinery/firealarm/directional/north,
+/obj/item/radio/intercom/directional/west,
+/turf/open/floor/iron/checker,
+/area/station/commons/vacant_room/commissary)
+"KR" = (
+/obj/structure/disposalpipe/segment,
+/obj/machinery/door/firedoor/heavy,
+/obj/effect/turf_decal/delivery,
+/turf/open/floor/iron/dark,
+/area/station/commons/vacant_room/commissary)
+"Lc" = (
+/obj/effect/turf_decal/trimline/green/filled/line{
+ dir = 8
+ },
+/obj/structure/sign/poster/official/random/directional/west,
+/turf/open/floor/iron,
+/area/station/commons/vacant_room/commissary)
+"MQ" = (
+/obj/effect/turf_decal/stripes/full,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/cable,
+/obj/structure/disposalpipe/segment,
+/obj/machinery/door/firedoor,
+/obj/machinery/door/airlock{
+ name = "Vacant Commissary"
+ },
+/turf/open/floor/iron,
+/area/station/commons/vacant_room/commissary)
+"Nk" = (
+/obj/effect/turf_decal/trimline/green/filled/line{
+ dir = 8
+ },
+/obj/effect/turf_decal/trimline/green/filled/line{
+ dir = 4
+ },
+/obj/structure/chair/stool{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/structure/cable,
+/turf/open/floor/iron,
+/area/station/commons/vacant_room/commissary)
+"NZ" = (
+/obj/structure/chair,
+/turf/open/floor/iron/checker,
+/area/station/commons/vacant_room/commissary)
+"Oy" = (
+/obj/effect/turf_decal/trimline/green/filled/line{
+ dir = 8
+ },
+/obj/effect/turf_decal/trimline/green/filled/line{
+ dir = 4
+ },
+/obj/structure/cable,
+/turf/open/floor/iron,
+/area/station/commons/vacant_room/commissary)
+"Po" = (
+/obj/machinery/cryopod{
+ dir = 4
+ },
+/obj/effect/turf_decal/siding/thinplating_new/light/end{
+ dir = 1
+ },
+/obj/item/radio/intercom/directional/west,
+/turf/open/floor/iron/dark,
+/area/station/common/cryopods)
+"PN" = (
+/obj/structure/chair{
+ dir = 1
+ },
+/obj/effect/landmark/start/assistant,
+/turf/open/floor/iron/checker,
+/area/station/commons/vacant_room/commissary)
+"QZ" = (
+/obj/structure/table,
+/turf/open/floor/iron/checker,
+/area/station/commons/vacant_room/commissary)
+"Ra" = (
+/obj/structure/chair,
+/obj/effect/landmark/start/assistant,
+/turf/open/floor/iron/checker,
+/area/station/commons/vacant_room/commissary)
+"Sd" = (
+/obj/effect/turf_decal/tile/green/opposingcorners{
+ dir = 8
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
+ dir = 8
+ },
+/turf/open/floor/iron/checker,
+/area/station/commons/vacant_room/commissary)
+"Sf" = (
+/obj/structure/disposalpipe/segment{
+ dir = 10
+ },
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/effect/turf_decal/trimline/green/filled/line,
+/obj/effect/turf_decal/trimline/green/filled/line{
+ dir = 1
+ },
+/turf/open/floor/iron,
+/area/station/commons/vacant_room/commissary)
+"SN" = (
+/turf/closed/wall,
+/area/station/commons/vacant_room/commissary)
+"SW" = (
+/obj/structure/table,
+/obj/machinery/light/directional/west,
+/turf/open/floor/iron/checker,
+/area/station/commons/vacant_room/commissary)
+"Ty" = (
+/obj/machinery/power/apc/auto_name/directional/south,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/structure/cable,
+/turf/open/floor/iron/dark,
+/area/station/common/cryopods)
+"TI" = (
+/obj/structure/disposalpipe/junction/flip{
+ dir = 4
+ },
+/turf/open/floor/iron/dark/side,
+/area/station/hallway/floor3/aft)
+"Ut" = (
+/obj/effect/turf_decal/trimline/green/filled/line{
+ dir = 8
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 5
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/turf/open/floor/iron,
+/area/station/commons/vacant_room/commissary)
+"UU" = (
+/obj/effect/turf_decal/trimline/green/filled/line{
+ dir = 9
+ },
+/obj/effect/turf_decal/trimline/green/filled/corner,
+/obj/structure/disposalpipe/segment{
+ dir = 5
+ },
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/structure/cable,
+/turf/open/floor/iron,
+/area/station/commons/vacant_room/commissary)
+"Vu" = (
+/obj/structure/disposalpipe/segment,
+/obj/effect/turf_decal/trimline/green/filled/line{
+ dir = 8
+ },
+/turf/open/floor/iron,
+/area/station/commons/vacant_room/commissary)
+"Wr" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/effect/turf_decal/trimline/green/filled/line{
+ dir = 4
+ },
+/obj/structure/cable,
+/turf/open/floor/iron,
+/area/station/commons/vacant_room/commissary)
+"WD" = (
+/obj/effect/turf_decal/tile/green/opposingcorners{
+ dir = 8
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/iron/checker,
+/area/station/commons/vacant_room/commissary)
+"XL" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
+/turf/open/floor/iron/dark,
+/area/station/common/cryopods)
+"XR" = (
+/obj/structure/table/reinforced,
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "comish_shutter"
+ },
+/obj/machinery/door/firedoor/border_only{
+ dir = 8
+ },
+/turf/open/floor/iron,
+/area/station/commons/vacant_room/commissary)
+"Yt" = (
+/obj/effect/turf_decal/trimline/green/filled/line,
+/obj/effect/turf_decal/trimline/green/filled/line{
+ dir = 1
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/rack,
+/obj/item/wrench,
+/obj/item/radio/intercom/directional/south,
+/turf/open/floor/iron,
+/area/station/commons/vacant_room/commissary)
+"YW" = (
+/obj/effect/turf_decal/siding/thinplating_new/light/end{
+ dir = 1
+ },
+/obj/machinery/cryopod{
+ dir = 8
+ },
+/obj/machinery/light/directional/east,
+/turf/open/floor/iron/dark,
+/area/station/common/cryopods)
+"Zv" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/structure/cable,
+/obj/effect/turf_decal/trimline/green/filled/corner{
+ dir = 4
+ },
+/obj/effect/turf_decal/trimline/green/filled/corner,
+/turf/open/floor/iron,
+/area/station/commons/vacant_room/commissary)
+"ZM" = (
+/obj/effect/turf_decal/tile/green/opposingcorners{
+ dir = 8
+ },
+/obj/structure/disposalpipe/segment,
+/turf/open/floor/iron/checker,
+/area/station/commons/vacant_room/commissary)
+
+(1,1,1) = {"
+CO
+SN
+SN
+SN
+SN
+SN
+SN
+CO
+CO
+CO
+CO
+CO
+CO
+CO
+"}
+(2,1,1) = {"
+CO
+SN
+JW
+ng
+SW
+CF
+qI
+CO
+CO
+CO
+CO
+CO
+CO
+CO
+"}
+(3,1,1) = {"
+CO
+di
+lv
+Ra
+ia
+PN
+eu
+CO
+CO
+CO
+CO
+CO
+CO
+CO
+"}
+(4,1,1) = {"
+Dz
+KR
+Vu
+Vu
+EE
+Vu
+Ut
+fs
+ic
+bp
+Lc
+CO
+CO
+CO
+"}
+(5,1,1) = {"
+tv
+FP
+Wr
+qE
+Wr
+eN
+Zv
+bV
+bV
+bV
+bV
+bV
+IB
+CO
+"}
+(6,1,1) = {"
+TI
+di
+lv
+NZ
+QZ
+oz
+oI
+SN
+fj
+hm
+XR
+hm
+SN
+CO
+"}
+(7,1,1) = {"
+oE
+SN
+sM
+hN
+AB
+oz
+Sf
+MQ
+UU
+ED
+Nk
+Oy
+Hk
+CO
+"}
+(8,1,1) = {"
+CO
+IH
+IH
+IH
+IH
+IH
+rT
+SN
+qP
+Sd
+ib
+rA
+AR
+CO
+"}
+(9,1,1) = {"
+CO
+Ao
+dP
+Po
+bX
+qF
+se
+SN
+oZ
+rA
+FR
+rA
+Yt
+CO
+"}
+(10,1,1) = {"
+CO
+io
+XL
+lt
+lt
+lt
+Ty
+SN
+kc
+ZM
+WD
+ZM
+nQ
+CO
+"}
+(11,1,1) = {"
+CO
+Ao
+wl
+YW
+mU
+Io
+zq
+SN
+si
+dG
+wR
+Fk
+nC
+CO
+"}
+(12,1,1) = {"
+CO
+IH
+IH
+IH
+IH
+IH
+IH
+SN
+SN
+SN
+SN
+lO
+SN
+CO
+"}
diff --git a/_maps/bandastation/automapper/templates/tramstation/tramstation_cryo.dmm b/_maps/bandastation/automapper/templates/tramstation/tramstation_cryo.dmm
new file mode 100644
index 0000000000000..c7ac6ea3d396c
--- /dev/null
+++ b/_maps/bandastation/automapper/templates/tramstation/tramstation_cryo.dmm
@@ -0,0 +1,444 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"a" = (
+/turf/closed/wall,
+/area/station/commons/dorms/laundry)
+"b" = (
+/obj/effect/spawner/structure/window,
+/turf/open/floor/plating,
+/area/station/commons/dorms/laundry)
+"c" = (
+/obj/effect/turf_decal/siding/white{
+ dir = 8
+ },
+/obj/machinery/cryopod{
+ dir = 8
+ },
+/obj/machinery/power/apc/auto_name/directional/east,
+/obj/structure/cable,
+/turf/open/floor/iron/dark,
+/area/station/common/cryopods)
+"d" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2,
+/turf/open/floor/iron,
+/area/station/common/cryopods)
+"e" = (
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
+/turf/open/floor/iron/cafeteria,
+/area/station/commons/dorms/laundry)
+"f" = (
+/obj/structure/flora/bush/flowers_yw/style_random,
+/turf/open/floor/grass,
+/area/station/common/cryopods)
+"g" = (
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/obj/structure/cable,
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2,
+/turf/open/floor/iron/cafeteria,
+/area/station/commons/dorms/laundry)
+"j" = (
+/obj/structure/window/spawner/directional/south,
+/obj/structure/flora/bush/flowers_br/style_random,
+/obj/structure/flora/bush/flowers_pp/style_random,
+/turf/open/floor/grass,
+/area/station/common/cryopods)
+"k" = (
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/obj/structure/cable,
+/obj/effect/landmark/start/assistant,
+/turf/open/floor/iron/cafeteria,
+/area/station/commons/dorms/laundry)
+"l" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
+/turf/open/floor/iron,
+/area/station/common/cryopods)
+"m" = (
+/obj/structure/chair/stool/bar/directional/east,
+/obj/effect/turf_decal/trimline/neutral/filled/line{
+ dir = 1
+ },
+/obj/machinery/bluespace_vendor/directional/north,
+/turf/open/floor/iron,
+/area/station/commons/fitness/recreation)
+"n" = (
+/turf/closed/wall,
+/area/station/security/checkpoint/arrivals)
+"o" = (
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/turf/open/floor/iron/cafeteria,
+/area/station/commons/dorms/laundry)
+"q" = (
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/obj/machinery/vending/clothing,
+/turf/open/floor/iron/cafeteria,
+/area/station/commons/dorms/laundry)
+"r" = (
+/obj/effect/spawner/random/entertainment/arcade{
+ dir = 8
+ },
+/obj/effect/turf_decal/trimline/neutral/filled/line{
+ dir = 1
+ },
+/turf/open/floor/iron,
+/area/station/commons/fitness/recreation)
+"s" = (
+/obj/machinery/light/directional/west,
+/obj/effect/turf_decal/siding/white{
+ dir = 4
+ },
+/obj/machinery/cryopod{
+ dir = 4
+ },
+/obj/machinery/airalarm/directional/west,
+/turf/open/floor/iron/dark,
+/area/station/common/cryopods)
+"t" = (
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/obj/structure/closet/wardrobe/grey,
+/obj/machinery/light/directional/east,
+/obj/machinery/airalarm/directional/east,
+/turf/open/floor/iron/cafeteria,
+/area/station/commons/dorms/laundry)
+"u" = (
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/obj/machinery/vending/autodrobe/all_access,
+/turf/open/floor/iron/cafeteria,
+/area/station/commons/dorms/laundry)
+"v" = (
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/obj/structure/cable,
+/turf/open/floor/iron/cafeteria,
+/area/station/commons/dorms/laundry)
+"w" = (
+/obj/effect/turf_decal/trimline/neutral/filled/corner{
+ dir = 1
+ },
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/turf/open/floor/iron,
+/area/station/commons/fitness/recreation)
+"x" = (
+/obj/machinery/holopad,
+/obj/effect/turf_decal/bot,
+/obj/item/radio/intercom/directional/north,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/turf/open/floor/iron,
+/area/station/commons/fitness/recreation)
+"y" = (
+/obj/structure/flora/bush/flowers_br/style_random,
+/obj/structure/flora/bush/flowers_pp/style_random,
+/obj/structure/flora/bush/flowers_yw/style_random,
+/obj/structure/flora/bush/grassy/style_random,
+/turf/open/floor/grass,
+/area/station/common/cryopods)
+"A" = (
+/obj/structure/chair/stool/bar/directional/west,
+/obj/effect/turf_decal/trimline/neutral/filled/line{
+ dir = 1
+ },
+/obj/effect/landmark/start/assistant,
+/turf/open/floor/iron,
+/area/station/commons/fitness/recreation)
+"B" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/turf/open/floor/iron,
+/area/station/common/cryopods)
+"D" = (
+/turf/closed/wall,
+/area/station/common/cryopods)
+"E" = (
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/obj/structure/closet/wardrobe/white,
+/turf/open/floor/iron/cafeteria,
+/area/station/commons/dorms/laundry)
+"F" = (
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/turf/open/floor/iron,
+/area/station/commons/fitness/recreation)
+"H" = (
+/obj/effect/turf_decal/trimline/neutral/filled/corner{
+ dir = 4
+ },
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/turf/open/floor/iron,
+/area/station/commons/fitness/recreation)
+"I" = (
+/obj/effect/spawner/structure/window,
+/turf/open/floor/plating,
+/area/station/common/cryopods)
+"J" = (
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/obj/machinery/washing_machine,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/structure/extinguisher_cabinet/directional/west,
+/turf/open/floor/iron/cafeteria,
+/area/station/commons/dorms/laundry)
+"L" = (
+/obj/effect/turf_decal/siding/white{
+ dir = 4
+ },
+/obj/machinery/camera/directional/west,
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
+ dir = 4
+ },
+/turf/open/floor/iron/dark,
+/area/station/common/cryopods)
+"M" = (
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/door/airlock/public/glass{
+ name = "Cryopods"
+ },
+/obj/effect/landmark/navigate_destination,
+/turf/open/floor/iron,
+/area/station/common/cryopods)
+"N" = (
+/obj/effect/turf_decal/siding/white{
+ dir = 4
+ },
+/obj/machinery/cryopod{
+ dir = 4
+ },
+/obj/machinery/computer/cryopod/directional/west,
+/turf/open/floor/iron/dark,
+/area/station/common/cryopods)
+"O" = (
+/obj/structure/window/spawner/directional/south,
+/obj/structure/flora/bush/flowers_yw/style_random,
+/turf/open/floor/grass,
+/area/station/common/cryopods)
+"P" = (
+/obj/effect/spawner/random/entertainment/arcade{
+ dir = 4
+ },
+/obj/effect/turf_decal/trimline/neutral/filled/line{
+ dir = 1
+ },
+/turf/open/floor/iron,
+/area/station/commons/fitness/recreation)
+"Q" = (
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/obj/machinery/door/firedoor/border_only,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/turf/open/floor/iron/cafeteria,
+/area/station/commons/dorms/laundry)
+"S" = (
+/obj/structure/flora/bush/flowers_br/style_random,
+/obj/structure/flora/bush/flowers_pp/style_random,
+/obj/item/toy/plush/lizard_plushie{
+ desc = "A cute little lizard plushie. It has some soot on it.";
+ name = "Tends-The-Garden"
+ },
+/turf/open/floor/grass,
+/area/station/common/cryopods)
+"U" = (
+/obj/effect/turf_decal/siding/white{
+ dir = 8
+ },
+/obj/machinery/cryopod{
+ dir = 8
+ },
+/turf/open/floor/iron/dark,
+/area/station/common/cryopods)
+"V" = (
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/obj/machinery/power/apc/auto_name/directional/east,
+/obj/structure/cable,
+/obj/machinery/camera/directional/north{
+ c_tag = "Civilian - Laundry Room"
+ },
+/turf/open/floor/iron/cafeteria,
+/area/station/commons/dorms/laundry)
+"X" = (
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/obj/machinery/door/firedoor/border_only,
+/obj/structure/cable,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
+/turf/open/floor/iron/cafeteria,
+/area/station/commons/dorms/laundry)
+"Y" = (
+/obj/structure/window/spawner/directional/south,
+/obj/structure/flora/bush/flowers_pp/style_random,
+/obj/structure/flora/bush/flowers_yw/style_random,
+/obj/structure/flora/bush/grassy/style_random,
+/turf/open/floor/grass,
+/area/station/common/cryopods)
+"Z" = (
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 8
+ },
+/obj/machinery/washing_machine,
+/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
+/turf/open/floor/iron/cafeteria,
+/area/station/commons/dorms/laundry)
+
+(1,1,1) = {"
+n
+D
+D
+D
+D
+D
+D
+P
+"}
+(2,1,1) = {"
+n
+y
+O
+s
+N
+L
+I
+A
+"}
+(3,1,1) = {"
+n
+f
+Y
+l
+d
+B
+M
+w
+"}
+(4,1,1) = {"
+n
+S
+j
+U
+U
+c
+I
+F
+"}
+(5,1,1) = {"
+n
+a
+a
+b
+b
+a
+a
+x
+"}
+(6,1,1) = {"
+n
+e
+J
+Z
+Z
+Z
+Q
+F
+"}
+(7,1,1) = {"
+n
+V
+k
+v
+g
+o
+X
+H
+"}
+(8,1,1) = {"
+n
+a
+q
+t
+E
+u
+a
+m
+"}
+(9,1,1) = {"
+n
+a
+a
+a
+a
+a
+a
+r
+"}
diff --git a/_maps/bandastation/automapper/templates/tramstation/tramstation_perma_cryo.dmm b/_maps/bandastation/automapper/templates/tramstation/tramstation_perma_cryo.dmm
new file mode 100644
index 0000000000000..f7e5101185b80
--- /dev/null
+++ b/_maps/bandastation/automapper/templates/tramstation/tramstation_perma_cryo.dmm
@@ -0,0 +1,14 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"a" = (
+/obj/machinery/computer/cryopod/directional/east,
+/turf/template_noop,
+/area/template_noop)
+"k" = (
+/obj/machinery/cryopod/prison/directional/east,
+/turf/template_noop,
+/area/template_noop)
+
+(1,1,1) = {"
+k
+a
+"}
diff --git a/_maps/map_files/Cyberiad/Cyberiad.dmm b/_maps/map_files/Cyberiad/Cyberiad.dmm
index 78d3bb9c2a8ff..88e6ec210edb7 100644
--- a/_maps/map_files/Cyberiad/Cyberiad.dmm
+++ b/_maps/map_files/Cyberiad/Cyberiad.dmm
@@ -4737,6 +4737,7 @@
/area/station/maintenance/port/greater)
"bjb" = (
/obj/effect/turf_decal/tile/red,
+/obj/machinery/computer/cryopod/directional/south,
/turf/open/floor/iron,
/area/station/security/prison)
"bje" = (
@@ -8280,6 +8281,9 @@
/obj/effect/turf_decal/tile/green/half/contrasted{
dir = 4
},
+/obj/machinery/cryopod{
+ dir = 4
+ },
/turf/open/floor/iron/white,
/area/station/common/cryopods)
"cds" = (
@@ -28502,6 +28506,12 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron,
/area/station/engineering/atmos/hfr_room)
+"hlh" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/turf_decal/tile/red/half/contrasted,
+/obj/machinery/cryopod/prison/directional/south,
+/turf/open/floor/iron,
+/area/station/security/prison)
"hll" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/effect/decal/cleanable/blood,
@@ -33106,6 +33116,9 @@
/obj/effect/turf_decal/tile/green{
dir = 8
},
+/obj/machinery/cryopod{
+ dir = 8
+ },
/turf/open/floor/iron/white,
/area/station/common/cryopods)
"ivi" = (
@@ -34633,6 +34646,9 @@
/area/station/medical/surgery/theatre)
"iPy" = (
/obj/effect/turf_decal/tile/green,
+/obj/machinery/cryopod{
+ dir = 4
+ },
/turf/open/floor/iron/white,
/area/station/common/cryopods)
"iPz" = (
@@ -40011,6 +40027,7 @@
/obj/effect/turf_decal/tile/green/fourcorners,
/obj/machinery/light/directional/north,
/obj/machinery/holopad,
+/obj/machinery/computer/cryopod/directional/north,
/turf/open/floor/iron/white,
/area/station/common/cryopods)
"kjC" = (
@@ -53088,6 +53105,9 @@
/obj/effect/turf_decal/tile/green{
dir = 4
},
+/obj/machinery/cryopod{
+ dir = 4
+ },
/turf/open/floor/iron/white,
/area/station/common/cryopods)
"nvj" = (
@@ -63268,6 +63288,9 @@
dir = 1
},
/obj/machinery/light_switch/directional/east,
+/obj/machinery/cryopod{
+ dir = 8
+ },
/turf/open/floor/iron/white,
/area/station/common/cryopods)
"pWG" = (
@@ -76389,6 +76412,9 @@
dir = 8
},
/obj/machinery/airalarm/directional/east,
+/obj/machinery/cryopod{
+ dir = 8
+ },
/turf/open/floor/iron/white,
/area/station/common/cryopods)
"tra" = (
@@ -182342,7 +182368,7 @@ qfK
oxI
gPp
oZK
-nGb
+hlh
rkC
xSi
tNX
diff --git a/modular_bandastation/cryosleep/_cryosleep.dm b/modular_bandastation/cryosleep/_cryosleep.dm
new file mode 100644
index 0000000000000..8a3d62ba3f1c0
--- /dev/null
+++ b/modular_bandastation/cryosleep/_cryosleep.dm
@@ -0,0 +1,4 @@
+/datum/modpack/cryosleep
+ name = "Капсулы криосна"
+ desc = "Добавляет капсулы для криосна."
+ author = "Azarak (автор, NovaSector), Ros_Sample (порт)"
diff --git a/modular_bandastation/cryosleep/_cryosleep.dme b/modular_bandastation/cryosleep/_cryosleep.dme
new file mode 100644
index 0000000000000..35a958e627030
--- /dev/null
+++ b/modular_bandastation/cryosleep/_cryosleep.dme
@@ -0,0 +1,15 @@
+#include "_cryosleep.dm"
+
+#include "code/admin.dm"
+#include "code/ai.dm"
+#include "code/config.dm"
+#include "code/cryo_console_return.dm"
+#include "code/cryopod.dm"
+#include "code/cryoconsole.dm"
+#include "code/job.dm"
+#include "code/jobs.dm"
+#include "code/mood.dm"
+#include "code/extra_vv.dm"
+#include "code/ssd_time.dm"
+
+// tgui/packages/tgui/interfaces/CryopodConsole.jsx
diff --git a/modular_bandastation/cryosleep/code/admin.dm b/modular_bandastation/cryosleep/code/admin.dm
new file mode 100644
index 0000000000000..00b6fc9118924
--- /dev/null
+++ b/modular_bandastation/cryosleep/code/admin.dm
@@ -0,0 +1,33 @@
+/// Send player in not-quiet cryopod. If with_paper = TRUE, place a paper with notification under player.
+/mob/living/proc/send_to_cryo(with_paper = FALSE)
+ var/obj/machinery/cryopod/valid_pod
+ for(var/obj/machinery/cryopod/cryo in GLOB.valid_cryopods)
+ if(cryo.occupant || !cryo.state_open || cryo.panel_open) //free, opened, and panel closed?
+ return
+ if(buckled)
+ buckled.unbuckle_mob(src, TRUE)
+ if(buckled_mobs)
+ for(var/mob/buckled_mob in buckled_mobs)
+ unbuckle_mob(buckled_mob)
+ valid_pod = cryo
+ break
+
+ if(!valid_pod)
+ message_admins("no valid pod found for [key_name(name)]")
+ return
+
+ //effect
+ playsound(loc, 'sound/effects/magic/Repulse.ogg', 50, TRUE)
+ var/datum/effect_system/spark_spread/quantum/sparks = new
+ sparks.set_up(10, TRUE, loc)
+ sparks.start()
+
+ //make a paper if need
+ if(with_paper)
+ var/obj/item/paper/cryo_paper = new /obj/item/paper(loc)
+ cryo_paper.name = "Уведомление - [name]"
+ cryo_paper.add_raw_text("Приносим искренние извинения, персону \"[name][job ? ", [job]," : ""]\" пришлось отправить в криогенное хранилище по причинам, которые на данный момент не могут быть уточнены.
С уважением,
Агентство Нанотрейзен по борьбе с SSD.")
+ cryo_paper.update_appearance()
+
+ //put in pod
+ valid_pod.close_machine(src) //put player
diff --git a/modular_bandastation/cryosleep/code/ai.dm b/modular_bandastation/cryosleep/code/ai.dm
new file mode 100644
index 0000000000000..9754b8b6b37de
--- /dev/null
+++ b/modular_bandastation/cryosleep/code/ai.dm
@@ -0,0 +1,17 @@
+/mob/living/silicon/ai/verb/ai_cryo()
+ set name = "AI Cryogenic Stasis"
+ set desc = "Перемещает текущий ИИ в криогенное хранилище, освобождая место для другого."
+ set category = "AI Commands"
+
+ if(incapacitated)
+ return
+ if(tgui_alert(usr, "Войти в криогенный стазис? Вы станете призраком.", "Войти в криогенный стазис", list("Да", "Нет")) == "Да")
+ ghostize(FALSE)
+ minor_announce("Станционный ИИ был отключён от внутренних систем и был перемещён на хранение. Производится подготовка для загрузки нового ИИ.", "Станционный ИИ")
+ new /obj/structure/ai_core/latejoin_inactive(loc)
+ if(mind)
+ //Handle job slot/tater cleanup.
+ if(mind.assigned_role.title == JOB_AI)
+ SSjob.FreeRoleCryo(JOB_AI)
+ mind.special_role = null
+ qdel(src)
diff --git a/modular_bandastation/cryosleep/code/config.dm b/modular_bandastation/cryosleep/code/config.dm
new file mode 100644
index 0000000000000..ff1460ae1ec04
--- /dev/null
+++ b/modular_bandastation/cryosleep/code/config.dm
@@ -0,0 +1,2 @@
+/datum/config_entry/number/cryo_min_ssd_time
+ config_entry_value = 30
diff --git a/modular_bandastation/cryosleep/code/cryo_console_return.dm b/modular_bandastation/cryosleep/code/cryo_console_return.dm
new file mode 100644
index 0000000000000..4da60b9ad1876
--- /dev/null
+++ b/modular_bandastation/cryosleep/code/cryo_console_return.dm
@@ -0,0 +1,23 @@
+/// Returns any items inside of the `items_to_send` list to a cryo console on station.
+/mob/living/carbon/human/proc/return_items_to_console(list/items_to_send)
+ var/list/held_contents = get_contents()
+ if(!held_contents || !items_to_send)
+ return FALSE
+
+ var/obj/machinery/computer/cryopod/target_console
+ for(var/obj/machinery/computer/cryopod/cryo_console in GLOB.cryopod_computers)
+ target_console = cryo_console
+ var/turf/target_turf = get_turf(target_console)
+ if(is_station_level(target_turf.z)) //If we find a cryo console on station, send items to it first and foremost.
+ break
+
+ if(!target_console)
+ return FALSE
+
+ for(var/obj/item/found_item in held_contents)
+ if(!is_type_in_list(found_item, items_to_send))
+ continue
+ transferItemToLoc(found_item, target_console, force = TRUE, silent = TRUE)
+ target_console.frozen_item += found_item
+
+ return TRUE
diff --git a/modular_bandastation/cryosleep/code/cryoconsole.dm b/modular_bandastation/cryosleep/code/cryoconsole.dm
new file mode 100644
index 0000000000000..06e56032f5b5a
--- /dev/null
+++ b/modular_bandastation/cryosleep/code/cryoconsole.dm
@@ -0,0 +1,142 @@
+#define CRYO_JOIN "CRYO_JOIN"
+#define CRYO_LEAVE "CRYO_LEAVE"
+
+/*
+ * Cryogenic refrigeration unit. Basically a despawner.
+ * Stealing a lot of concepts/code from sleepers due to massive laziness.
+ * The despawn tick will only fire if it's been more than time_till_despawned ticks
+ * since time_entered, which is world.time when the occupant moves in.
+ * ~ Zuhayr
+ */
+GLOBAL_LIST_EMPTY(cryopod_computers)
+
+GLOBAL_LIST_EMPTY(ghost_records)
+
+/// A list of all cryopods that aren't quiet, to be used by the "Send to Cryogenic Storage" VV action.
+GLOBAL_LIST_EMPTY(valid_cryopods)
+
+//Main cryopod console.
+
+/obj/machinery/computer/cryopod
+ name = "cryogenic oversight console"
+ desc = "Интерфейс для взаимодействия экипажа с системами контроля криогенного хранилища."
+ icon = 'modular_bandastation/cryosleep/icons/cryogenics.dmi'
+ icon_state = "cellconsole_1"
+ icon_keyboard = null
+ icon_screen = null
+ use_power = FALSE
+ density = FALSE
+ interaction_flags_machine = INTERACT_MACHINE_OFFLINE
+ req_one_access = list(ACCESS_COMMAND, ACCESS_ARMORY) // Heads of staff or the warden can go here to claim recover items from their department that people went were cryodormed with.
+ verb_say = "coldly states"
+ verb_ask = "queries"
+ verb_exclaim = "alarms"
+
+ /// Used for logging people entering cryosleep and important items they are carrying.
+ var/list/frozen_crew = list()
+ /// The items currently stored in the cryopod control panel.
+ var/list/frozen_item = list()
+
+ /// This is what the announcement system uses to make announcements. Make sure to set a radio that has the channel you want to broadcast on.
+ var/obj/item/radio/headset/radio = /obj/item/radio/headset/silicon/ai
+ /// The channel to be broadcast on, valid values are the values of any of the "RADIO_CHANNEL_" defines.
+ var/announcement_channel = null // RADIO_CHANNEL_COMMON doesn't work here.
+
+MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/cryopod, 32)
+
+/obj/machinery/computer/cryopod/Initialize(mapload)
+ . = ..()
+ GLOB.cryopod_computers += src
+ radio = new radio(src)
+
+/obj/machinery/computer/cryopod/Destroy()
+ GLOB.cryopod_computers -= src
+ QDEL_NULL(radio)
+ return ..()
+
+/obj/machinery/computer/cryopod/update_icon_state()
+ if(machine_stat & (NOPOWER|BROKEN))
+ icon_state = "cellconsole"
+ return ..()
+ icon_state = "cellconsole_1"
+ return ..()
+
+/obj/machinery/computer/cryopod/ui_interact(mob/user, datum/tgui/ui)
+ . = ..()
+ if(machine_stat & (NOPOWER|BROKEN))
+ return
+
+ add_fingerprint(user)
+
+ ui = SStgui.try_update_ui(user, src, ui)
+ if(!ui)
+ ui = new(user, src, "CryopodConsole", name)
+ ui.open()
+
+/obj/machinery/computer/cryopod/ui_data(mob/user)
+ var/list/data = list()
+ data["frozen_crew"] = frozen_crew
+
+ /// The list of references to the stored items.
+ var/list/item_ref_list = list()
+ /// The associative list of the reference to an item and its name.
+ var/list/item_ref_name = list()
+
+ for(var/obj/item/item in frozen_item)
+ var/ref = REF(item)
+ item_ref_list += ref
+ item_ref_name[ref] = item.declent_ru(NOMINATIVE)
+
+ data["item_ref_list"] = item_ref_list
+ data["item_ref_name"] = item_ref_name
+
+ // Check Access for item dropping.
+ var/item_retrieval_allowed = allowed(user)
+ data["item_retrieval_allowed"] = item_retrieval_allowed
+
+ var/obj/item/card/id/id_card
+ if(isliving(user))
+ var/mob/living/person = user
+ id_card = person.get_idcard()
+ if(id_card?.registered_name)
+ data["account_name"] = id_card.registered_name
+
+ return data
+
+/obj/machinery/computer/cryopod/ui_act(action, list/params)
+ . = ..()
+ if(.)
+ return
+ switch(action)
+ if("item_get")
+ // This is using references, kinda clever, not gonna lie. Good work Zephyr
+ var/item_get = params["item_get"]
+ var/obj/item/item = locate(item_get)
+ if(item in frozen_item)
+ item.forceMove(drop_location())
+ frozen_item.Remove(item_get, item)
+ visible_message("[capitalize(declent_ru(NOMINATIVE))] выдаёт [item.declent_ru(NOMINATIVE)].")
+ message_admins("[item] was retrieved from cryostorage at [ADMIN_COORDJMP(src)]")
+ else
+ CRASH("Invalid REF# for ui_act. Not inside internal list!")
+ return TRUE
+
+ else
+ CRASH("Illegal action for ui_act: '[action]'")
+
+/obj/machinery/computer/cryopod/proc/announce(message_type, user, rank, occupant_departments_bitflags, occupant_job_radio, occupant_gender)
+ switch(message_type)
+ if(CRYO_JOIN)
+ radio.talk_into(src, "[user][rank ? ", [rank]," : ""] пробудил[genderize_ru(occupant_gender, "ся", "ась", "ось", "ись")] из криогенного хранилища.", announcement_channel)
+ if(CRYO_LEAVE)
+ if(occupant_job_radio)
+ if(occupant_departments_bitflags & DEPARTMENT_BITFLAG_COMMAND)
+ if(occupant_job_radio != RADIO_CHANNEL_COMMAND)
+ radio.talk_into(src, "[user][rank ? ", [rank]," : ""] был[genderize_ru(occupant_gender, "", "а", "о", "и")] перемещ[genderize_ru(occupant_gender, "ён", "ена", "ено", "ены")] в криогенное хранилище.", RADIO_CHANNEL_COMMAND)
+ radio.use_command = TRUE
+ radio.talk_into(src, "[user][rank ? ", [rank]," : ""] был[genderize_ru(occupant_gender, "", "а", "о", "и")] перемещ[genderize_ru(occupant_gender, "ён", "ена", "ено", "ены")] в криогенное хранилище.", occupant_job_radio)
+ radio.use_command = FALSE
+ radio.talk_into(src, "[user][rank ? ", [rank]," : ""] был[genderize_ru(occupant_gender, "", "а", "о", "и")] перемещ[genderize_ru(occupant_gender, "ён", "ена", "ено", "ены")] в криогенное хранилище.", announcement_channel)
+
+#undef CRYO_JOIN
+#undef CRYO_LEAVE
diff --git a/modular_bandastation/cryosleep/code/cryopod.dm b/modular_bandastation/cryosleep/code/cryopod.dm
new file mode 100644
index 0000000000000..6a2842cb7d89e
--- /dev/null
+++ b/modular_bandastation/cryosleep/code/cryopod.dm
@@ -0,0 +1,372 @@
+GLOBAL_LIST_EMPTY(objectives)
+
+#define CRYO_JOIN "CRYO_JOIN"
+#define CRYO_LEAVE "CRYO_LEAVE"
+
+/datum/objective/New()
+ . = ..()
+ GLOB.objectives += src
+
+//Apparently objectives can be qdel'd. Learn a new thing every day
+/datum/objective/Destroy()
+ GLOB.objectives -= src
+ return ..()
+
+// Cryopods themselves.
+/obj/machinery/cryopod
+ name = "cryogenic freezer"
+ desc = "Камера предназначенная для киборгов и гуманоидов, является безопасным местом, где персонал, страдающий от расстройства космического сна, может немного отдохнуть."
+ icon = 'modular_bandastation/cryosleep/icons/cryogenics.dmi'
+ icon_state = "cryopod-open"
+ base_icon_state = "cryopod"
+ use_power = FALSE
+ density = TRUE
+ anchored = TRUE
+ state_open = TRUE
+ interaction_flags_mouse_drop = NEED_DEXTERITY
+
+ var/open_icon_state = "cryopod-open"
+ /// Whether the cryopod respects the minimum time someone has to be disconnected before they can be put into cryo by another player
+ var/allow_timer_override = FALSE
+ /// Minimum time for someone to be SSD before another player can cryo them.
+ var/ssd_time = 30 MINUTES //Replace with "cryo_min_ssd_time" CONFIG
+
+ /// Time until despawn when a mob enters a cryopod. You cannot other people in pods unless they're catatonic.
+ var/time_till_despawn = 30 SECONDS
+ /// Cooldown for when it's now safe to try an despawn the player.
+ COOLDOWN_DECLARE(despawn_world_time)
+
+ ///Weakref to our controller
+ var/datum/weakref/control_computer_weakref
+ COOLDOWN_DECLARE(last_no_computer_message)
+ /// if false, plays announcement on cryo
+ var/quiet = FALSE
+ /// Has the occupant been tucked in?
+ var/tucked = FALSE
+
+/obj/machinery/cryopod/quiet
+ quiet = TRUE
+
+/obj/machinery/cryopod/Initialize(mapload)
+ ..()
+ if(!quiet)
+ GLOB.valid_cryopods += src
+ return INITIALIZE_HINT_LATELOAD //Gotta populate the cryopod computer GLOB first
+
+/obj/machinery/cryopod/post_machine_initialize()
+ . = ..()
+ update_icon()
+ find_control_computer()
+
+// This is not a good situation
+/obj/machinery/cryopod/Destroy()
+ GLOB.valid_cryopods -= src
+ control_computer_weakref = null
+ return ..()
+
+/obj/machinery/cryopod/proc/find_control_computer(urgent = FALSE)
+ for(var/cryo_console as anything in GLOB.cryopod_computers)
+ var/obj/machinery/computer/cryopod/console = cryo_console
+ if(get_area(console) == get_area(src))
+ control_computer_weakref = WEAKREF(console)
+ break
+
+ // Don't send messages unless we *need* the computer, and less than five minutes have passed since last time we messaged
+ if(!control_computer_weakref && urgent && COOLDOWN_FINISHED(src, last_no_computer_message))
+ COOLDOWN_START(src, last_no_computer_message, 5 MINUTES)
+ log_admin("Cryopod in [get_area(src)] could not find control computer!")
+ message_admins("Cryopod in [get_area(src)] could not find control computer!")
+ last_no_computer_message = world.time
+
+ return control_computer_weakref != null
+
+/obj/machinery/cryopod/close_machine(atom/movable/target, density_to_set = TRUE)
+ if(!control_computer_weakref)
+ find_control_computer(TRUE)
+ if((isnull(target) || isliving(target)) && state_open && !panel_open)
+ . = ..(target)
+ var/mob/living/mob_occupant = occupant
+ if(mob_occupant?.stat != DEAD)
+ to_chat(occupant, span_notice("Вы чувствуете, как холодный воздух обволакивает вас. Чувства затухают и ваше тело немеет."))
+
+ COOLDOWN_START(src, despawn_world_time, time_till_despawn)
+
+/obj/machinery/cryopod/open_machine(drop = TRUE, density_to_set = FALSE)
+ . = ..()
+ set_density(TRUE)
+ name = initial(name)
+ tucked = FALSE
+
+/obj/machinery/cryopod/container_resist_act(mob/living/user)
+ visible_message(span_notice("[capitalize(occupant.declent_ru(NOMINATIVE))] вылезает из [declent_ru(GENITIVE)]!"),
+ span_notice("Вы вылезаете из [declent_ru(GENITIVE)]!"))
+ open_machine()
+
+/obj/machinery/cryopod/relaymove(mob/user)
+ container_resist_act(user)
+
+/obj/machinery/cryopod/process()
+ if(!isliving(occupant))
+ return
+
+ var/mob/living/mob_occupant = occupant
+ if(mob_occupant.stat == DEAD)
+ open_machine()
+
+ if(!mob_occupant.client && COOLDOWN_FINISHED(src, despawn_world_time))
+ if(!control_computer_weakref)
+ find_control_computer(urgent = TRUE)
+
+ despawn_occupant()
+
+/obj/machinery/cryopod/proc/handle_objectives()
+ if(!isliving(occupant))
+ return
+
+ var/mob/living/mob_occupant = occupant
+ // Update any existing objectives involving this mob.
+ for(var/datum/objective/objective in GLOB.objectives)
+ // We don't want revs to get objectives that aren't for heads of staff. Letting
+ // them win or lose based on cryo is silly so we remove the objective.
+ if(istype(objective,/datum/objective/mutiny) && objective.target == mob_occupant.mind)
+ objective.team.objectives -= objective
+ qdel(objective)
+ for(var/datum/mind/mind in objective.team.members)
+ to_chat(mind.current, "
[span_userdanger("Ваша цель вне зоны досягаемости. Цель удалена!")]")
+ mind.announce_objectives()
+ return
+ if(istype(objective.target) && objective.target == mob_occupant.mind)
+ var/old_target = objective.target
+ objective.target = null
+ objective.find_target()
+ if(!objective.target && objective.owner)
+ to_chat(objective.owner.current, "
[span_userdanger("Ваша цель вне зоны досягаемости. Цель удалена!")]")
+ for(var/datum/antagonist/antag in objective.owner.antag_datums)
+ antag.objectives -= objective
+ if (!objective.team)
+ objective.update_explanation_text()
+ objective.owner.announce_objectives()
+ to_chat(objective.owner.current, "
[span_userdanger("Вы чувствуете, что ваша цель вне зоны досягаемости. Время плана [pick("Б","В","Г","Д","Ж","З")]. Цели обновлены!")]")
+ else
+ var/list/objectives_to_update
+ for(var/datum/mind/objective_owner in objective.get_owners())
+ to_chat(objective_owner.current, "
[span_userdanger("Вы чувствуете, что ваша цель вне зоны досягаемости. Время плана [pick("Б","В","Г","Д","Ж","З")]. Цели обновлены!")]")
+ for(var/datum/objective/update_target_objective in objective_owner.get_all_objectives())
+ LAZYADD(objectives_to_update, update_target_objective)
+ objectives_to_update += objective.team.objectives
+ for(var/datum/objective/update_objective in objectives_to_update)
+ if(update_objective.target != old_target || !istype(update_objective,objective.type))
+ continue
+ update_objective.target = objective.target
+ update_objective.update_explanation_text()
+ to_chat(objective.owner.current, "
[span_userdanger("Вы чувствуете, что ваша цель вне зоны досягаемости. Время плана [pick("Б","В","Г","Д","Ж","З")]. Цели обновлены!")]")
+ update_objective.owner.announce_objectives()
+ qdel(objective)
+
+/// This function can not be undone; do not call this unless you are sure.
+/// Handles despawning the player.
+/obj/machinery/cryopod/proc/despawn_occupant()
+ if(!isliving(occupant))
+ return
+
+ var/mob/living/mob_occupant = occupant
+
+ var/occupant_ckey = mob_occupant.ckey || mob_occupant.mind?.key
+ var/occupant_name = mob_occupant.name
+ var/occupant_rank = mob_occupant.mind?.assigned_role.title
+ var/occupant_departments_bitflags = mob_occupant.mind?.assigned_role.departments_bitflags
+ var/occupant_job_radio = mob_occupant.mind?.assigned_role.default_radio_channel
+ var/occupant_gender = mob_occupant.gender // для аннонсов
+
+ SSjob.FreeRoleCryo(occupant_rank)
+
+ // Delete them from datacore and ghost records.
+ var/announce_rank = null
+
+ for(var/list/record in GLOB.ghost_records)
+ if(record["name"] == occupant_name)
+ announce_rank = record["rank"]
+ GLOB.ghost_records.Remove(list(record))
+ break
+
+ if(!announce_rank) // No need to loop over all of those if we already found it beforehand.
+ for(var/datum/record/crew/possible_target_record as anything in GLOB.manifest.general)
+ if(possible_target_record.name == occupant_name && (occupant_rank == "N/A" || possible_target_record.trim == job_title_ru(occupant_rank)))
+ announce_rank = possible_target_record.rank
+ qdel(possible_target_record)
+ break
+
+ var/obj/machinery/computer/cryopod/control_computer = control_computer_weakref?.resolve()
+ if(!control_computer)
+ control_computer_weakref = null
+ else
+ control_computer.frozen_crew += list(list("name" = occupant_name, "job" = job_title_ru(occupant_rank)))
+
+ // Make an announcement and log the person entering storage. If set to quiet, does not make an announcement.
+ if(!quiet)
+ control_computer.announce(CRYO_LEAVE, mob_occupant.real_name, announce_rank, occupant_departments_bitflags, occupant_job_radio, occupant_gender)
+
+ visible_message(span_notice("[capitalize(declent_ru(NOMINATIVE))] гудит и шипит, перемещая [mob_occupant.declent_ru(ACCUSATIVE)] в хранилище."))
+
+ for(var/obj/item/item_content as anything in mob_occupant)
+ if(!istype(item_content) || HAS_TRAIT(item_content, TRAIT_NODROP))
+ continue
+ if(issilicon(mob_occupant) && istype(item_content, /obj/item/mmi))
+ continue
+ if(control_computer)
+ if(istype(item_content, /obj/item/modular_computer))
+ var/obj/item/modular_computer/computer = item_content
+ for(var/datum/computer_file/program/messenger/message_app in computer.stored_files)
+ message_app.invisible = TRUE
+ mob_occupant.transferItemToLoc(item_content, control_computer, force = TRUE, silent = TRUE)
+ item_content.dropped(mob_occupant)
+ control_computer.frozen_item += item_content
+ else
+ mob_occupant.transferItemToLoc(item_content, drop_location(), force = TRUE, silent = TRUE)
+
+ GLOB.joined_player_list -= occupant_ckey
+
+ handle_objectives()
+ mob_occupant.ghostize()
+ QDEL_NULL(occupant)
+ open_machine()
+ name = initial(name)
+
+/obj/machinery/cryopod/mouse_drop_receive(mob/living/target, mob/user, params)
+ if(!istype(target) || isanimal(target) || !istype(user.loc, /turf) || target.buckled)
+ return
+
+ if(occupant)
+ to_chat(user, span_notice("[capitalize(declent_ru(NOMINATIVE))] уже занята!"))
+ return
+
+ if(target.stat == DEAD)
+ to_chat(user, span_notice("Мёртвых людей нельзя поместить в криохранилище."))
+ return
+
+// Allows admins to enable players to override SSD Time check.
+ if(allow_timer_override)
+ if(tgui_alert(user, "Хотите помесить [target.declent_ru(ACCUSATIVE)] в [declent_ru(ACCUSATIVE)]?", "Поместить в [declent_ru(ACCUSATIVE)]?", list("Да", "Нет")) == "Да")
+ to_chat(user, span_danger("Вы помещаете [target.declent_ru(ACCUSATIVE)] в [declent_ru(ACCUSATIVE)]."))
+ log_admin("[key_name(user)] has put [key_name(target)] into a overridden stasis pod.")
+ message_admins("[key_name(user)] has put [key_name(target)] into a overridden stasis pod. [ADMIN_JMP(src)]")
+
+ add_fingerprint(target)
+
+ close_machine(target)
+ ru_names_rename(ru_names_toml(src::name, suffix = " ([target.declent_ru(NOMINATIVE)])", override_base = "[name] ([target.name])"))
+ name = "[name] ([target.name])"
+
+// Allows players to cryo others. Checks if they have been AFK for 30 minutes.
+ if(target.key && user != target)
+ if(target.get_organ_by_type(/obj/item/organ/brain)) //Target the Brain
+ if(!target.mind || target.is_ssd) // Is the character empty / AI Controlled
+ if(target.lastclienttime + ssd_time >= world.time)
+ to_chat(user, span_notice("Вы не можете поместить [target.declent_ru(ACCUSATIVE)] в [declent_ru(ACCUSATIVE)] ещё [round(((ssd_time - (world.time - target.lastclienttime)) / (1 MINUTES)), 1)] минут."))
+ log_admin("[key_name(user)] has attempted to put [key_name(target)] into a stasis pod, but they were only disconnected for [round(((world.time - target.lastclienttime) / (1 MINUTES)), 1)] minutes.")
+ message_admins("[key_name(user)] has attempted to put [key_name(target)] into a stasis pod. [ADMIN_JMP(src)]")
+ return
+ else if(tgui_alert(user, "Хотите поместить [target.declent_ru(ACCUSATIVE)] в [declent_ru(ACCUSATIVE)]?", "Поместить в криокамеру?", list("Да", "Нет")) == "Да")
+ if(target.mind.assigned_role.req_admin_notify)
+ tgui_alert(user, "Они играют на важной роли! Уверены что хотите переместить их в криохранилище?")
+ to_chat(user, span_danger("Вы помещаете [target.declent_ru(ACCUSATIVE)] в [declent_ru(ACCUSATIVE)]."))
+ log_admin("[key_name(user)] has put [key_name(target)] into a stasis pod.")
+ message_admins("[key_name(user)] has put [key_name(target)] into a stasis pod. [ADMIN_JMP(src)]")
+
+ add_fingerprint(target)
+
+ close_machine(target)
+
+ ru_names_rename(ru_names_toml(src::name, suffix = " ([target.declent_ru(NOMINATIVE)])", override_base = "[name] ([target.name])"))
+ name = "[name] ([target.name])"
+
+ else if(iscyborg(target))
+ to_chat(user, span_danger("Вы не можете поместить [target.declent_ru(ACCUSATIVE)] в [declent_ru(ACCUSATIVE)]. Юнит активен."))
+ else
+ to_chat(user, span_danger("Вы не можете поместить [target.declent_ru(ACCUSATIVE)] в [declent_ru(ACCUSATIVE)]. [target.ru_p_they(TRUE)] в сознании."))
+ return
+
+ if(target == user && (tgui_alert(target, "Войти в криохранилище?", "Войти в криокапсулу?", list("Да", "Нет")) == "Нет"))
+ return
+
+ if(target == user)
+ if(target.mind.assigned_role.req_admin_notify)
+ tgui_alert(target, "Вы играете на важной роли! Уверены что хотите покинуть раунд?")
+ var/datum/antagonist/antag = target.mind.has_antag_datum(/datum/antagonist)
+ if(antag)
+ tgui_alert(target, "Вы [antag.name]! Уверены что хотите покинуть раунд?")
+
+ if(LAZYLEN(target.buckled_mobs) > 0)
+ if(target == user)
+ to_chat(user, span_danger("Вы не сможете влезеть в [declent_ru(ACCUSATIVE)], пока к вам кто-то пристёгнут."))
+ else
+ to_chat(user, span_danger("[capitalize(target.declent_ru(NOMINATIVE))] не сможет влезть в [declent_ru(ACCUSATIVE)], пока [target.ru_p_they()] пристёгнут[genderize_ru(target.gender, "", "а", "о", "ы")]."))
+ return
+
+ if(!istype(target) || !can_interact(user) || !target.Adjacent(user) || !ismob(target) || isanimal(target) || !istype(user.loc, /turf) || target.buckled)
+ return
+ // rerun the checks in case of shenanigans
+
+ if(occupant)
+ to_chat(user, span_notice("[capitalize(declent_ru(NOMINATIVE))] занята!"))
+ return
+
+ if(target == user)
+ visible_message(span_infoplain("[capitalize(user.declent_ru(NOMINATIVE))] залезает в [declent_ru(ACCUSATIVE)]."))
+ else
+ visible_message(span_infoplain("[capitalize(user.declent_ru(NOMINATIVE))] помещает [target.declent_ru(ACCUSATIVE)] в [declent_ru(ACCUSATIVE)]."))
+
+ to_chat(target, span_warning("Если вы станете призраком, выйдете из игры или закроете клиент, ваш персонаж вскоре будет навсегда удален из раунда."))
+
+ log_admin("[key_name(target)] entered a stasis pod.")
+ message_admins("[key_name_admin(target)] entered a stasis pod. [ADMIN_JMP(src)]")
+ add_fingerprint(target)
+
+ close_machine(target)
+ ru_names_rename(ru_names_toml(src::name, suffix = " ([target.declent_ru(NOMINATIVE)])", override_base = "[name] ([target.name])"))
+ name = "[name] ([target.name])"
+
+// Attacks/effects.
+/obj/machinery/cryopod/blob_act()
+ return // Sorta gamey, but we don't really want these to be destroyed.
+
+/obj/machinery/cryopod/item_interaction(mob/living/user, obj/item/tool, list/modifiers)
+ . = ..()
+ if(istype(tool, /obj/item/bedsheet))
+ if(!isliving(occupant))
+ return ITEM_INTERACT_BLOCKING
+ if(tucked)
+ to_chat(user, span_warning("[capitalize(occupant.declent_ru(NOMINATIVE))] выглядит уже достаточно комфортабельно!"))
+ return ITEM_INTERACT_BLOCKING
+ to_chat(user, span_notice("Вы укладываете [occupant.declent_ru(ACCUSATIVE)] в [declent_ru(ACCUSATIVE)]!"))
+ qdel(tool)
+ user.add_mood_event("tucked", /datum/mood_event/tucked_in, occupant)
+ tucked = TRUE
+ return ITEM_INTERACT_SUCCESS
+
+/obj/machinery/cryopod/update_icon_state()
+ icon_state = state_open ? open_icon_state : base_icon_state
+ return ..()
+
+/// Special wall mounted cryopod for the prison, making it easier to autospawn.
+/obj/machinery/cryopod/prison
+ icon_state = "prisonpod"
+ base_icon_state = "prisonpod"
+ open_icon_state = "prisonpod"
+ density = FALSE
+
+MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/cryopod/prison, 18)
+
+/obj/machinery/cryopod/prison/close_machine(atom/movable/target, density_to_set = FALSE)
+ . = ..()
+ // Flick the pod for a second when user enters
+ set_density(FALSE)
+ flick("prisonpod-open", src)
+
+/obj/machinery/cryopod/prison/open_machine(drop = TRUE, density_to_set = FALSE)
+ . = ..()
+ set_density(FALSE)
+ flick("prisonpod-open", src)
+
+#undef CRYO_JOIN
+#undef CRYO_LEAVE
diff --git a/modular_bandastation/cryosleep/code/extra_vv.dm b/modular_bandastation/cryosleep/code/extra_vv.dm
new file mode 100644
index 0000000000000..b431a51362ed2
--- /dev/null
+++ b/modular_bandastation/cryosleep/code/extra_vv.dm
@@ -0,0 +1,37 @@
+// дефайн для vvшки модуля криосна
+#define VV_HK_SEND_CRYO "send_to_cryo"
+
+/**
+ * EXTRA MOB VV
+ */
+/mob/living/vv_get_dropdown()
+ . = ..()
+ VV_DROPDOWN_OPTION(VV_HK_SEND_CRYO, "Send to Cryogenic Storage")
+
+/mob/living/vv_do_topic(list/href_list)
+ . = ..()
+
+ if(!.)
+ return
+
+ if(href_list[VV_HK_SEND_CRYO])
+ vv_send_cryo()
+
+/mob/living/proc/vv_send_cryo()
+ if(!check_rights(R_SPAWN))
+ return
+
+ var/send_notice = tgui_alert(usr, "Добавить записку об отправке [declent_ru(ACCUSATIVE)] в криопод?", "Оставить записку?", list("Да", "Нет", "Отмена"))
+ if(send_notice != "Да" && send_notice != "Нет")
+ return
+
+ //log/message
+ log_admin("[key_name(usr)] has put [key_name(src)] into a cryopod.")
+ var/msg = span_notice("[key_name_admin(usr)] has put [key_name(src)] into a cryopod from [ADMIN_VERBOSEJMP(src)].")
+ message_admins(msg)
+ admin_ticket_log(src, msg)
+
+ send_notice = send_notice == "Да"
+ send_to_cryo(send_notice)
+
+#undef VV_HK_SEND_CRYO
diff --git a/modular_bandastation/cryosleep/code/job.dm b/modular_bandastation/cryosleep/code/job.dm
new file mode 100644
index 0000000000000..58c25a8795d1f
--- /dev/null
+++ b/modular_bandastation/cryosleep/code/job.dm
@@ -0,0 +1,8 @@
+/datum/controller/subsystem/job/proc/FreeRoleCryo(rank)
+ if(!rank)
+ return
+ job_debug("Freeing role: [rank]")
+ var/datum/job/job = get_job(rank)
+ if(!job)
+ return FALSE
+ job.current_positions = max(0, job.current_positions - 1)
diff --git a/modular_bandastation/cryosleep/code/jobs.dm b/modular_bandastation/cryosleep/code/jobs.dm
new file mode 100644
index 0000000000000..8416b1c913449
--- /dev/null
+++ b/modular_bandastation/cryosleep/code/jobs.dm
@@ -0,0 +1,16 @@
+/datum/job
+ var/default_radio_channel = null
+/datum/job/chief_medical_officer
+ default_radio_channel = RADIO_CHANNEL_MEDICAL
+/datum/job/chief_engineer
+ default_radio_channel = RADIO_CHANNEL_ENGINEERING
+/datum/job/head_of_security
+ default_radio_channel = RADIO_CHANNEL_SECURITY
+/datum/job/head_of_personnel
+ default_radio_channel = RADIO_CHANNEL_SERVICE
+/datum/job/research_director
+ default_radio_channel = RADIO_CHANNEL_SCIENCE
+/datum/job/quartermaster
+ default_radio_channel = RADIO_CHANNEL_SUPPLY
+/datum/job/captain
+ default_radio_channel = RADIO_CHANNEL_COMMAND
diff --git a/modular_bandastation/cryosleep/code/mood.dm b/modular_bandastation/cryosleep/code/mood.dm
new file mode 100644
index 0000000000000..322de63b31d37
--- /dev/null
+++ b/modular_bandastation/cryosleep/code/mood.dm
@@ -0,0 +1,9 @@
+/datum/mood_event/tucked_in
+ description = "Я чувствую себя лучше, уложив кого-то отдохнуть на ночь!"
+ mood_change = 3
+ timeout = 2 MINUTES
+
+/datum/mood_event/tucked_in/add_effects(mob/living/tuckee)
+ if(!tuckee)
+ return
+ description = "Я чувствую себя лучше, уложив [tuckee.declent_ru(ACCUSATIVE)] отдохнуть на ночь!"
diff --git a/modular_bandastation/cryosleep/code/ssd_time.dm b/modular_bandastation/cryosleep/code/ssd_time.dm
new file mode 100644
index 0000000000000..83848c3ef9ba0
--- /dev/null
+++ b/modular_bandastation/cryosleep/code/ssd_time.dm
@@ -0,0 +1,30 @@
+/mob/living
+ var/lastclienttime = 0
+ var/is_ssd = FALSE
+
+/mob/living/proc/set_ssd_state(state)
+ if(state == is_ssd)
+ return
+ is_ssd = state
+
+/mob/living/Login()
+ . = ..()
+ set_ssd_state(FALSE)
+
+/mob/living/Logout()
+ lastclienttime = world.time
+ set_ssd_state(TRUE)
+ . = ..()
+
+//Temporary, look below for the reason
+/mob/living/ghostize(can_reenter_corpse = TRUE)
+ . = ..()
+ set_ssd_state(FALSE)
+
+/*
+//EDIT - TRANSFER CKEY IS NOT A THING ON THE TG CODEBASE, if things break too bad because of it, consider implementing it
+//This proc should stop mobs from having the overlay when someone keeps jumping control of mobs, unfortunately it causes Aghosts to have their character without the SSD overlay, I wasn't able to find a better proc unfortunately
+/mob/living/transfer_ckey(mob/new_mob, send_signal = TRUE)
+ ..()
+ set_ssd_state(FALSE)
+*/
diff --git a/modular_bandastation/cryosleep/icons/cryogenics.dmi b/modular_bandastation/cryosleep/icons/cryogenics.dmi
new file mode 100644
index 0000000000000..44a68fa8d381a
Binary files /dev/null and b/modular_bandastation/cryosleep/icons/cryogenics.dmi differ
diff --git a/modular_bandastation/modular_bandastation.dme b/modular_bandastation/modular_bandastation.dme
index e0d19e63e5c8d..1555aa7cbd2b2 100644
--- a/modular_bandastation/modular_bandastation.dme
+++ b/modular_bandastation/modular_bandastation.dme
@@ -39,6 +39,7 @@
#include "world_topics/_world_topics.dme"
#include "preferences/_preferences.dme"
#include "jukebox/_jukebox.dme"
+#include "cryosleep/_cryosleep.dme"
#include "objects/_objects.dme"
#include "orderables/_orderables.dme"
#include "automatic_crew_transfer/_automatic_crew_transfer.dme"
diff --git a/modular_bandastation/translations/code/translation_data/ru_names.toml b/modular_bandastation/translations/code/translation_data/ru_names.toml
index cc1f2e0de84d8..cc799a0d6cb32 100644
--- a/modular_bandastation/translations/code/translation_data/ru_names.toml
+++ b/modular_bandastation/translations/code/translation_data/ru_names.toml
@@ -367,6 +367,24 @@ instrumental = "коробкой"
prepositional = "коробке"
gender = "female"
+["cryogenic freezer"]
+nominative = "криогенная морозильная камера"
+genitive = "криогенной морозильной камеры"
+dative = "криогенной морозильной камере"
+accusative = "криогенную морозильную камеру"
+instrumental = "криогенной морозильной камерой"
+prepositional = "криогенной морозильной камере"
+gender = "female"
+
+["cryogenic oversight console"]
+nominative = "консоль криогенного контроля"
+genitive = "консоли криогенного контроля"
+dative = "консоли криогенного контроля"
+accusative = "консоль криогенного контроля"
+instrumental = "консолью криогенного контроля"
+prepositional = "консоли криогенного контроля"
+gender = "female"
+
# MARK: Mobs. Uncategorized
# MARK: Mobs. Aliens
diff --git a/tgui/packages/tgui/interfaces/CryopodConsole.jsx b/tgui/packages/tgui/interfaces/CryopodConsole.jsx
new file mode 100644
index 0000000000000..70f5ee0683567
--- /dev/null
+++ b/tgui/packages/tgui/interfaces/CryopodConsole.jsx
@@ -0,0 +1,83 @@
+// THIS IS A BANDASTATION UI FILE
+import { useBackend } from '../backend';
+import {
+ Button,
+ LabeledList,
+ NoticeBox,
+ Section,
+ Stack,
+} from 'tgui-core/components';
+import { Window } from '../layouts';
+
+export const CryopodConsole = (props) => {
+ const { data } = useBackend();
+ const { account_name } = data;
+
+ const welcomeTitle = `Добро пожаловать, ${account_name || '[УДАЛЕНО]'}!`;
+
+ return (
+
+
+
+
+
+ Данная автоматизированная система криогенной заморозки надежно
+ сохранит вашу материальную оболочку до следующего назначения.
+
+
+
+
+
+
+
+
+
+
+
+ );
+};
+
+const CrewList = (props) => {
+ const { data } = useBackend();
+ const { frozen_crew } = data;
+
+ return (
+ (frozen_crew.length && (
+
+
+ {frozen_crew.map((person) => (
+
+ {person.job}
+
+ ))}
+
+
+ )) || Нет экипажа на хранении!
+ );
+};
+
+const ItemList = (props) => {
+ const { act, data } = useBackend();
+ const { item_ref_list, item_ref_name, item_retrieval_allowed } = data;
+ if (!item_retrieval_allowed) {
+ return Вы не авторизованы для менеджмента предметов.;
+ }
+ return (
+ (item_ref_list.length && (
+
+
+ {item_ref_list.map((item) => (
+
+
+ ))}
+
+
+ )) || Нет предметов на хранении!
+ );
+};