diff --git a/code/__defines/misc_vr.dm b/code/__defines/misc_vr.dm
index f8da0d70ce..ed2f27978a 100644
--- a/code/__defines/misc_vr.dm
+++ b/code/__defines/misc_vr.dm
@@ -31,4 +31,10 @@
#define BLUE_SHIELDED 2 // Shield from bluespace teleportation (telescience)
//Assistant/Visitor/Whatever
-#define USELESS_JOB "Visitor"
\ No newline at end of file
+#define USELESS_JOB "Visitor"
+
+// Bluespace shelter deploy checks
+#define SHELTER_DEPLOY_ALLOWED "allowed"
+#define SHELTER_DEPLOY_BAD_TURFS "bad turfs"
+#define SHELTER_DEPLOY_BAD_AREA "bad area"
+#define SHELTER_DEPLOY_ANCHORED_OBJECTS "anchored objects"
diff --git a/code/controllers/subsystems/mapping_vr.dm b/code/controllers/subsystems/mapping_vr.dm
index 6e095c6b62..0a94cc4634 100644
--- a/code/controllers/subsystems/mapping_vr.dm
+++ b/code/controllers/subsystems/mapping_vr.dm
@@ -9,14 +9,15 @@ SUBSYSTEM_DEF(mapping)
var/obj/effect/landmark/engine_loader/engine_loader
+ var/list/shelter_templates = list()
+
/datum/controller/subsystem/mapping/Recover()
flags |= SS_NO_INIT // Make extra sure we don't initialize twice.
+ shelter_templates = SSmapping.shelter_templates
/datum/controller/subsystem/mapping/Initialize(timeofday)
loadEngine()
- // TODO - This probably should be here
- // // Pick a random away mission.
- // createRandomZlevel()
+ preloadShelterTemplates()
// Mining generation probably should be here too
// TODO - Other stuff related to maps and areas could be moved here too. Look at /tg
if(using_map)
@@ -88,6 +89,15 @@ SUBSYSTEM_DEF(mapping)
else
MT.load_new_z(centered = FALSE)
+/datum/controller/subsystem/mapping/proc/preloadShelterTemplates()
+ for(var/item in subtypesof(/datum/map_template/shelter))
+ var/datum/map_template/shelter/shelter_type = item
+ if(!(initial(shelter_type.mappath)))
+ continue
+ var/datum/map_template/shelter/S = new shelter_type()
+
+ shelter_templates[S.shelter_id] = S
+
/datum/controller/subsystem/mapping/stat_entry(msg)
if (!Debug2)
return // Only show up in stat panel if debugging is enabled.
diff --git a/code/game/machinery/kitchen/smartfridge.dm b/code/game/machinery/kitchen/smartfridge.dm
index b2c3d21b68..21ba5f25d0 100644
--- a/code/game/machinery/kitchen/smartfridge.dm
+++ b/code/game/machinery/kitchen/smartfridge.dm
@@ -10,7 +10,7 @@
idle_power_usage = 5
active_power_usage = 100
flags = NOREACT
- var/global/max_n_of_items = 999 // Sorry but the BYOND infinite loop detector doesn't look things over 1000.
+ var/max_n_of_items = 999 // Sorry but the BYOND infinite loop detector doesn't look things over 1000. //VOREStation Edit - Non-global
var/icon_on = "smartfridge"
var/icon_off = "smartfridge-off"
var/icon_panel = "smartfridge-panel"
diff --git a/code/modules/mining/shelter_atoms.dm b/code/modules/mining/shelter_atoms.dm
new file mode 100644
index 0000000000..cbf7ebf87f
--- /dev/null
+++ b/code/modules/mining/shelter_atoms.dm
@@ -0,0 +1,254 @@
+/*****************************Survival Pod********************************/
+/area/survivalpod
+ name = "\improper Emergency Shelter"
+ icon_state = "away"
+ dynamic_lighting = TRUE
+ requires_power = FALSE
+ has_gravity = TRUE
+
+//Survival Capsule
+/obj/item/device/survivalcapsule
+ name = "surfluid shelter capsule"
+ desc = "An emergency shelter programmed into construction nanomachines. It has a license for use printed on the bottom."
+ icon_state = "houseball"
+ icon = 'icons/obj/device_alt.dmi'
+ w_class = ITEMSIZE_TINY
+ var/template_id = "shelter_alpha"
+ var/datum/map_template/shelter/template
+ var/used = FALSE
+
+/obj/item/device/survivalcapsule/proc/get_template()
+ if(template)
+ return
+ template = SSmapping.shelter_templates[template_id]
+ if(!template)
+ throw EXCEPTION("Shelter template ([template_id]) not found!")
+ qdel(src)
+
+/obj/item/device/survivalcapsule/Destroy()
+ template = null // without this, capsules would be one use. per round.
+ . = ..()
+
+/obj/item/device/survivalcapsule/examine(mob/user)
+ . = ..()
+ get_template()
+ to_chat(user, "This capsule has the [template.name] stored.")
+ to_chat(user, template.description)
+
+/obj/item/device/survivalcapsule/attack_self()
+ //Can't grab when capsule is New() because templates aren't loaded then
+ get_template()
+ if(!used)
+ loc.visible_message("\The [src] begins to shake. Stand back!")
+ used = TRUE
+
+ sleep(5 SECONDS)
+
+ var/turf/deploy_location = get_turf(src)
+ var/status = template.check_deploy(deploy_location)
+ switch(status)
+ if(SHELTER_DEPLOY_BAD_AREA)
+ src.loc.visible_message("\The [src] will not function in this area.")
+ if(SHELTER_DEPLOY_BAD_TURFS, SHELTER_DEPLOY_ANCHORED_OBJECTS)
+ var/width = template.width
+ var/height = template.height
+ src.loc.visible_message("\The [src] doesn't have room to deploy! You need to clear a [width]x[height] area!")
+
+ if(status != SHELTER_DEPLOY_ALLOWED)
+ used = FALSE
+ return
+
+ var/turf/T = deploy_location
+ var/datum/effect/effect/system/smoke_spread/smoke = new /datum/effect/effect/system/smoke_spread()
+ smoke.attach(T)
+ smoke.set_up(10, 0, T)
+ smoke.start()
+ sleep(4 SECONDS)
+
+ playsound(get_turf(src), 'sound/effects/phasein.ogg', 100, 1)
+
+ log_and_message_admins("[key_name_admin(usr)] activated a bluespace capsule at [get_area(T)]!")
+ template.load(deploy_location, centered = TRUE)
+ qdel(src)
+
+/obj/item/device/survivalcapsule/luxury
+ name = "luxury surfluid shelter capsule"
+ desc = "An exorbitantly expensive luxury suite programmed into construction nanomachines. There's a license for use printed on the bottom."
+ template_id = "shelter_beta"
+
+//Pod objects
+//Walls
+/turf/simulated/shuttle/wall/voidcraft/survival
+ name = "survival shelter"
+ stripe_color = "#efbc3b"
+
+//Doors
+/obj/machinery/door/airlock/voidcraft/survival_pod
+ name = "survival airlock"
+ block_air_zones = 1
+
+//Windows
+/obj/structure/window/reinforced/survival_pod
+ name = "pod window"
+ icon = 'icons/obj/survival_pod.dmi'
+ icon_state = "pwindow"
+ basestate = "pwindow"
+
+//The windows have diagonal versions, and will never be a full window
+/obj/structure/window/reinforced/survival_pod/is_full_window()
+ return FALSE
+
+/obj/structure/window/reinforced/survival_pod/update_icon()
+ icon_state = basestate
+
+//Windoor
+/obj/machinery/door/window/survival_pod
+ icon = 'icons/obj/survival_pod.dmi'
+ icon_state = "windoor"
+ base_state = "windoor"
+
+//Table
+/obj/structure/table/survival_pod
+ icon = 'icons/obj/survival_pod.dmi'
+ icon_state = "table"
+
+//Sleeper
+/obj/machinery/sleeper/survival_pod
+ icon = 'icons/obj/survival_pod.dmi'
+ icon_state = "sleeper"
+ stasis_level = 100 //Just one setting
+
+/obj/machinery/sleeper/survival_pod/update_icon()
+ if(occupant)
+ add_overlay("sleeper_cover")
+ else
+ cut_overlays()
+
+//Computer
+/obj/item/device/gps/computer
+ name = "pod computer"
+ icon_state = "pod_computer"
+ icon = 'icons/obj/survival_pod_comp.dmi'
+ anchored = TRUE
+ density = TRUE
+ pixel_y = -32
+
+/obj/item/device/gps/computer/attackby(obj/item/I, mob/living/user)
+ if(istype(I, /obj/item/weapon/wrench))
+ user.visible_message("[user] disassembles [src].",
+ "You start to disassemble [src]...", "You hear clanking and banging noises.")
+ if(do_after(user,4 SECONDS,src))
+ new /obj/item/device/gps(loc)
+ qdel(src)
+ return TRUE
+
+ return FALSE
+
+/obj/item/device/gps/computer/attack_hand(mob/user)
+ . = ..()
+ if(.)
+ return
+ attack_self(user)
+
+//Bed
+/obj/structure/bed/pod
+ icon = 'icons/obj/survival_pod.dmi'
+ icon_state = "bed"
+
+//Survival Storage Unit
+/obj/machinery/smartfridge/survival_pod
+ name = "survival pod storage"
+ desc = "A heated storage unit."
+ icon_state = "donkvendor"
+ icon = 'icons/obj/survival_pod_vend.dmi'
+ icon_on = "donkvendor"
+ icon_off = "donkvendor"
+ light_range = 5
+ light_power = 1.2
+ light_color = "#DDFFD3"
+ pixel_y = -4
+ max_n_of_items = 10
+ var/empty = FALSE
+
+/obj/machinery/smartfridge/survival_pod/initialize(mapload)
+ . = ..()
+ if(empty)
+ return
+ for(var/i in 1 to 5)
+ var/obj/item/weapon/reagent_containers/food/snacks/liquidfood/W = new(src)
+ stock(W)
+ if(prob(50))
+ var/obj/item/weapon/storage/pill_bottle/dice/D = new(src)
+ stock(D)
+ else
+ var/obj/item/device/violin/V = new(src)
+ stock(V)
+
+/obj/machinery/smartfridge/survival_pod/accept_check(obj/item/O)
+ return isitem(O)
+
+/obj/machinery/smartfridge/survival_pod/empty
+ name = "dusty survival pod storage"
+ desc = "A heated storage unit. This one's seen better days."
+ empty = TRUE
+
+//Fans
+/obj/structure/fans
+ icon = 'icons/obj/survival_pod.dmi'
+ icon_state = "fans"
+ name = "environmental regulation system"
+ desc = "A large machine releasing a constant gust of air."
+ anchored = TRUE
+ density = TRUE
+ var/buildstacktype = /obj/item/stack/material/steel
+ var/buildstackamount = 5
+
+/obj/structure/fans/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
+ if(!height)
+ return FALSE
+ return TRUE
+
+/obj/structure/fans/proc/deconstruct()
+ new buildstacktype(loc,buildstackamount)
+ qdel(src)
+
+/obj/structure/fans/attackby(obj/item/I, mob/living/user)
+ if(istype(I, /obj/item/weapon/wrench))
+ user.visible_message("[user] disassembles [src].",
+ "You start to disassemble [src]...", "You hear clanking and banging noises.")
+ if(do_after(user,4 SECONDS,src))
+ deconstruct()
+ return TRUE
+
+ return TRUE
+
+/obj/structure/fans/tiny
+ name = "tiny fan"
+ desc = "A tiny fan, releasing a thin gust of air."
+ plane = TURF_PLANE
+ layer = ABOVE_TURF_LAYER
+ density = FALSE
+ icon_state = "fan_tiny"
+ buildstackamount = 2
+
+//Signs
+/obj/structure/sign/mining
+ name = "nanotrasen mining corps sign"
+ desc = "A sign of relief for weary miners, and a warning for would-be competitors to Nanotrasen's mining claims."
+ icon = 'icons/obj/survival_pod.dmi'
+ icon_state = "ntpod"
+
+/obj/structure/sign/mining/survival
+ name = "shelter sign"
+ desc = "A high visibility sign designating a safe shelter."
+ icon = 'icons/obj/survival_pod.dmi'
+ icon_state = "survival"
+
+//Fluff
+/obj/structure/tubes
+ icon_state = "tubes"
+ icon = 'icons/obj/survival_pod.dmi'
+ name = "tubes"
+ anchored = TRUE
+ layer = BELOW_MOB_LAYER
+ density = FALSE
diff --git a/code/modules/mining/shelters.dm b/code/modules/mining/shelters.dm
new file mode 100644
index 0000000000..19ad55f966
--- /dev/null
+++ b/code/modules/mining/shelters.dm
@@ -0,0 +1,60 @@
+/datum/map_template/shelter
+ var/shelter_id
+ var/description
+ var/blacklisted_turfs
+ var/whitelisted_turfs
+ var/banned_areas
+ var/banned_objects
+
+/datum/map_template/shelter/New()
+ . = ..()
+ blacklisted_turfs = typecacheof(/turf/unsimulated)
+ whitelisted_turfs = list()
+ banned_areas = typecacheof(/area/shuttle)
+ banned_objects = list()
+
+/datum/map_template/shelter/proc/check_deploy(turf/deploy_location)
+ var/affected = get_affected_turfs(deploy_location, centered=TRUE)
+ for(var/turf/T in affected)
+ var/area/A = get_area(T)
+ if(is_type_in_typecache(A, banned_areas))
+ return SHELTER_DEPLOY_BAD_AREA
+
+ var/banned = is_type_in_typecache(T, blacklisted_turfs)
+ var/permitted = is_type_in_typecache(T, whitelisted_turfs)
+ if(banned && !permitted)
+ return SHELTER_DEPLOY_BAD_TURFS
+
+ for(var/obj/O in T)
+ if((O.density && O.anchored) || is_type_in_typecache(O, banned_objects))
+ return SHELTER_DEPLOY_ANCHORED_OBJECTS
+ return SHELTER_DEPLOY_ALLOWED
+
+/datum/map_template/shelter/alpha
+ name = "Shelter Alpha"
+ shelter_id = "shelter_alpha"
+ description = "A cosy self-contained pressurized shelter, with \
+ built-in navigation, entertainment, medical facilities and a \
+ sleeping area! Order now, and we'll throw in a TINY FAN, \
+ absolutely free!"
+ mappath = "maps/submaps/shelters/shelter_1.dmm"
+
+/datum/map_template/shelter/alpha/New()
+ . = ..()
+ whitelisted_turfs = typecacheof(/turf/simulated/mineral)
+ banned_objects = list()
+
+/datum/map_template/shelter/beta
+ name = "Shelter Beta"
+ shelter_id = "shelter_beta"
+ description = "An extremely luxurious shelter, containing all \
+ the amenities of home, including carpeted floors, hot and cold \
+ running water, a gourmet three course meal, cooking facilities, \
+ and a deluxe companion to keep you from getting lonely during \
+ an ash storm."
+ mappath = "maps/submaps/shelters/shelter_2.dmm"
+
+/datum/map_template/shelter/beta/New()
+ . = ..()
+ whitelisted_turfs = typecacheof(/turf/simulated/mineral)
+ banned_objects = list()
diff --git a/icons/obj/device_alt.dmi b/icons/obj/device_alt.dmi
index 7f872af146..10c52d208e 100644
Binary files a/icons/obj/device_alt.dmi and b/icons/obj/device_alt.dmi differ
diff --git a/icons/obj/survival_pod.dmi b/icons/obj/survival_pod.dmi
new file mode 100644
index 0000000000..220ab7d84b
Binary files /dev/null and b/icons/obj/survival_pod.dmi differ
diff --git a/icons/obj/survival_pod_comp.dmi b/icons/obj/survival_pod_comp.dmi
new file mode 100644
index 0000000000..8417cfb880
Binary files /dev/null and b/icons/obj/survival_pod_comp.dmi differ
diff --git a/icons/obj/survival_pod_vend.dmi b/icons/obj/survival_pod_vend.dmi
new file mode 100644
index 0000000000..2c8b6d5775
Binary files /dev/null and b/icons/obj/survival_pod_vend.dmi differ
diff --git a/maps/submaps/shelters/shelter_1.dmm b/maps/submaps/shelters/shelter_1.dmm
new file mode 100644
index 0000000000..6ca59e7922
--- /dev/null
+++ b/maps/submaps/shelters/shelter_1.dmm
@@ -0,0 +1,106 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"a" = (
+/turf/simulated/shuttle/wall/voidcraft,
+/area/survivalpod)
+"b" = (
+/obj/structure/sign/mining/survival{
+ dir = 1
+ },
+/turf/simulated/shuttle/wall/voidcraft,
+/area/survivalpod)
+"c" = (
+/obj/structure/fans,
+/turf/simulated/shuttle/floor/voidcraft,
+/area/survivalpod)
+"d" = (
+/obj/machinery/smartfridge/survival_pod,
+/turf/simulated/shuttle/floor/voidcraft,
+/area/survivalpod)
+"e" = (
+/obj/item/device/gps/computer,
+/turf/simulated/shuttle/floor/voidcraft,
+/area/survivalpod)
+"f" = (
+/obj/structure/sign/mining/survival{
+ dir = 8
+ },
+/turf/simulated/shuttle/wall/voidcraft,
+/area/survivalpod)
+"g" = (
+/obj/machinery/sleeper/survival_pod,
+/turf/simulated/shuttle/floor/voidcraft,
+/area/survivalpod)
+"h" = (
+/turf/simulated/shuttle/floor/voidcraft,
+/area/survivalpod)
+"i" = (
+/obj/structure/bed/pod,
+/obj/item/weapon/bedsheet/mime,
+/turf/simulated/shuttle/floor/voidcraft,
+/area/survivalpod)
+"j" = (
+/obj/structure/sign/mining/survival{
+ dir = 4
+ },
+/turf/simulated/shuttle/wall/voidcraft,
+/area/survivalpod)
+"k" = (
+/obj/structure/table/survival_pod,
+/turf/simulated/shuttle/floor/voidcraft,
+/area/survivalpod)
+"l" = (
+/obj/structure/tubes,
+/obj/structure/bed/chair/comfy/black{
+ dir = 8
+ },
+/turf/simulated/shuttle/floor/voidcraft,
+/area/survivalpod)
+"m" = (
+/obj/structure/sign/mining/survival,
+/turf/simulated/shuttle/wall/voidcraft,
+/area/survivalpod)
+"n" = (
+/obj/structure/fans/tiny,
+/obj/machinery/door/airlock/voidcraft/survival_pod,
+/turf/simulated/shuttle/floor/voidcraft,
+/area/survivalpod)
+"o" = (
+/obj/structure/sign/mining,
+/turf/simulated/shuttle/wall/voidcraft,
+/area/survivalpod)
+
+(1,1,1) = {"
+a
+a
+f
+a
+a
+"}
+(2,1,1) = {"
+a
+c
+g
+k
+m
+"}
+(3,1,1) = {"
+b
+d
+h
+h
+n
+"}
+(4,1,1) = {"
+a
+e
+i
+l
+o
+"}
+(5,1,1) = {"
+a
+a
+j
+a
+a
+"}
diff --git a/maps/submaps/shelters/shelter_2.dmm b/maps/submaps/shelters/shelter_2.dmm
new file mode 100644
index 0000000000..5bb5a348f2
--- /dev/null
+++ b/maps/submaps/shelters/shelter_2.dmm
@@ -0,0 +1,254 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"a" = (
+/turf/simulated/shuttle/wall/voidcraft/survival,
+/area/survivalpod)
+"b" = (
+/obj/structure/sign/mining/survival{
+ dir = 1
+ },
+/turf/simulated/shuttle/wall/voidcraft/survival,
+/area/survivalpod)
+"c" = (
+/obj/structure/table/steel,
+/obj/item/weapon/reagent_containers/food/drinks/glass2/rocks{
+ pixel_x = 7;
+ pixel_y = 2
+ },
+/obj/item/weapon/reagent_containers/food/snacks/generalschicken,
+/obj/item/weapon/material/kitchen/utensil/fork{
+ pixel_x = 12
+ },
+/turf/simulated/floor/carpet/bcarpet,
+/area/survivalpod)
+"d" = (
+/obj/structure/sign/mining/survival{
+ dir = 8
+ },
+/turf/simulated/shuttle/wall/voidcraft/survival,
+/area/survivalpod)
+"e" = (
+/obj/structure/fans,
+/turf/simulated/shuttle/floor/voidcraft,
+/area/survivalpod)
+"f" = (
+/obj/machinery/smartfridge/survival_pod,
+/turf/simulated/shuttle/floor/voidcraft,
+/area/survivalpod)
+"g" = (
+/obj/item/device/gps/computer,
+/turf/simulated/shuttle/floor/voidcraft,
+/area/survivalpod)
+"h" = (
+/obj/machinery/shower,
+/obj/item/weapon/soap/deluxe,
+/obj/structure/curtain,
+/turf/simulated/shuttle/floor/voidcraft,
+/area/survivalpod)
+"i" = (
+/obj/structure/toilet,
+/turf/simulated/shuttle/floor/voidcraft,
+/area/survivalpod)
+"j" = (
+/obj/structure/sign/mining/survival{
+ dir = 4
+ },
+/turf/simulated/shuttle/wall/voidcraft/survival,
+/area/survivalpod)
+"k" = (
+/obj/machinery/sleeper/survival_pod,
+/turf/simulated/shuttle/floor/voidcraft,
+/area/survivalpod)
+"l" = (
+/turf/simulated/shuttle/floor/voidcraft,
+/area/survivalpod)
+"m" = (
+/obj/structure/bed/pod,
+/obj/item/weapon/bedsheet/blue,
+/turf/simulated/shuttle/floor/voidcraft,
+/area/survivalpod)
+"n" = (
+/obj/structure/window/reinforced/survival_pod{
+ dir = 8
+ },
+/obj/machinery/door/window/survival_pod{
+ dir = 1;
+ icon_state = "windoor"
+ },
+/turf/simulated/floor/carpet/bcarpet,
+/area/survivalpod)
+"o" = (
+/obj/structure/bed/chair/comfy/black,
+/obj/structure/window/reinforced/survival_pod{
+ icon_state = "pwindow";
+ dir = 1
+ },
+/turf/simulated/floor/carpet/bcarpet,
+/area/survivalpod)
+"p" = (
+/obj/structure/table/survival_pod,
+/obj/item/weapon/storage/firstaid/adv{
+ pixel_x = 4
+ },
+/turf/simulated/shuttle/floor/voidcraft,
+/area/survivalpod)
+"q" = (
+/obj/structure/tubes,
+/obj/machinery/holoplant,
+/turf/simulated/shuttle/floor/voidcraft,
+/area/survivalpod)
+"r" = (
+/obj/structure/window/reinforced/survival_pod{
+ dir = 8;
+ icon_state = "pwindow"
+ },
+/turf/simulated/floor/carpet/bcarpet,
+/area/survivalpod)
+"s" = (
+/obj/machinery/light{
+ dir = 4;
+ light_color = "#DDFFD3"
+ },
+/obj/structure/table/steel,
+/obj/item/weapon/reagent_containers/food/drinks/glass2/rocks{
+ pixel_x = 7;
+ pixel_y = 2
+ },
+/obj/item/weapon/reagent_containers/food/drinks/bottle/wine{
+ pixel_x = -6;
+ pixel_y = 10
+ },
+/turf/simulated/floor/carpet/bcarpet,
+/area/survivalpod)
+"t" = (
+/obj/machinery/microwave{
+ pixel_y = -2
+ },
+/obj/structure/window/reinforced/survival_pod{
+ icon_state = "pwindow";
+ dir = 1
+ },
+/obj/structure/table/steel{
+ pixel_y = -9
+ },
+/turf/simulated/floor/carpet/bcarpet,
+/area/survivalpod)
+"u" = (
+/obj/machinery/door/window/survival_pod{
+ icon_state = "windoor";
+ dir = 1
+ },
+/turf/simulated/floor/carpet/bcarpet,
+/area/survivalpod)
+"v" = (
+/obj/structure/window/reinforced/survival_pod{
+ icon_state = "pwindow";
+ dir = 1
+ },
+/turf/simulated/floor/carpet/bcarpet,
+/area/survivalpod)
+"w" = (
+/obj/structure/window/reinforced/survival_pod{
+ density = 0;
+ dir = 9;
+ icon_state = "pwindow"
+ },
+/turf/simulated/floor/carpet/bcarpet,
+/area/survivalpod)
+"y" = (
+/obj/structure/sink/kitchen{
+ icon_state = "sink_alt";
+ dir = 4;
+ pixel_x = -13
+ },
+/turf/simulated/floor/carpet/bcarpet,
+/area/survivalpod)
+"z" = (
+/obj/machinery/light,
+/turf/simulated/floor/carpet/bcarpet,
+/area/survivalpod)
+"A" = (
+/turf/simulated/floor/carpet/bcarpet,
+/area/survivalpod)
+"B" = (
+/obj/structure/bed/chair/comfy/black{
+ dir = 1
+ },
+/turf/simulated/floor/carpet/bcarpet,
+/area/survivalpod)
+"C" = (
+/obj/structure/sign/mining/survival,
+/turf/simulated/shuttle/wall/voidcraft/survival,
+/area/survivalpod)
+"D" = (
+/obj/structure/fans/tiny,
+/obj/machinery/door/airlock/voidcraft/survival_pod,
+/turf/simulated/shuttle/floor/voidcraft,
+/area/survivalpod)
+"E" = (
+/obj/structure/sign/mining,
+/turf/simulated/shuttle/wall/voidcraft/survival,
+/area/survivalpod)
+
+(1,1,1) = {"
+a
+d
+a
+d
+a
+d
+a
+"}
+(2,1,1) = {"
+b
+e
+k
+p
+t
+y
+C
+"}
+(3,1,1) = {"
+a
+f
+l
+l
+u
+z
+a
+"}
+(4,1,1) = {"
+b
+g
+m
+q
+v
+A
+D
+"}
+(5,1,1) = {"
+a
+h
+n
+r
+w
+A
+a
+"}
+(6,1,1) = {"
+b
+i
+o
+s
+c
+B
+E
+"}
+(7,1,1) = {"
+a
+j
+a
+j
+a
+j
+a
+"}
diff --git a/vorestation.dme b/vorestation.dme
index 1f66405dc4..1f733cc343 100644
--- a/vorestation.dme
+++ b/vorestation.dme
@@ -1852,6 +1852,8 @@
#include "code\modules\mining\ore.dm"
#include "code\modules\mining\ore_datum.dm"
#include "code\modules\mining\satchel_ore_boxdm.dm"
+#include "code\modules\mining\shelter_atoms.dm"
+#include "code\modules\mining\shelters.dm"
#include "code\modules\mining\drilling\drill.dm"
#include "code\modules\mining\drilling\scanner.dm"
#include "code\modules\mob\animations.dm"