diff --git a/_maps/RandomRuins/SpaceRuins/hellfactory.dmm b/_maps/RandomRuins/SpaceRuins/hellfactory.dmm
new file mode 100644
index 00000000000..6e973667359
--- /dev/null
+++ b/_maps/RandomRuins/SpaceRuins/hellfactory.dmm
@@ -0,0 +1,1773 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"aa" = (
+/turf/template_noop,
+/area/template_noop)
+"ab" = (
+/turf/closed/wall,
+/area/ruin/space/has_grav/hellfactory)
+"ac" = (
+/turf/closed/wall/r_wall,
+/area/ruin/space/has_grav/hellfactory)
+"ad" = (
+/obj/machinery/atmospherics/components/unary/thermomachine/freezer/on{
+ dir = 4
+ },
+/turf/open/floor/plastic,
+/area/ruin/space/has_grav/hellfactory)
+"ae" = (
+/obj/machinery/atmospherics/pipe/layer_manifold/visible{
+ dir = 4
+ },
+/obj/structure/closet/secure_closet/freezer/meat,
+/turf/open/floor/plastic,
+/area/ruin/space/has_grav/hellfactory)
+"af" = (
+/obj/machinery/atmospherics/pipe/heat_exchanging/junction{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/heat_exchanging/junction/layer3{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/heat_exchanging/junction/layer1{
+ dir = 4
+ },
+/turf/open/floor/plastic,
+/area/ruin/space/has_grav/hellfactory)
+"ag" = (
+/obj/machinery/atmospherics/pipe/heat_exchanging/manifold{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/heat_exchanging/manifold/layer1{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/heat_exchanging/manifold/layer3{
+ dir = 1
+ },
+/turf/open/floor/plastic,
+/area/ruin/space/has_grav/hellfactory)
+"ah" = (
+/turf/closed/indestructible{
+ icon = 'icons/turf/walls/reinforced_wall.dmi';
+ icon_state = "r_wall"
+ },
+/area/ruin/space/has_grav/hellfactoryoffice)
+"ai" = (
+/obj/machinery/atmospherics/pipe/heat_exchanging/junction{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/heat_exchanging/junction/layer1{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/heat_exchanging/junction/layer3{
+ dir = 8
+ },
+/turf/closed/indestructible{
+ icon = 'icons/turf/walls/reinforced_wall.dmi';
+ icon_state = "r_wall"
+ },
+/area/ruin/space/has_grav/hellfactoryoffice)
+"aj" = (
+/obj/machinery/atmospherics/pipe/layer_manifold/visible{
+ dir = 4
+ },
+/obj/structure/fluff/hedge/opaque,
+/turf/open/floor/plasteel/grimy,
+/area/ruin/space/has_grav/hellfactoryoffice)
+"ak" = (
+/obj/machinery/atmospherics/components/unary/tank/oxygen{
+ gas_type = /datum/gas/water_vapor
+ },
+/turf/open/floor/plasteel/grimy,
+/area/ruin/space/has_grav/hellfactoryoffice)
+"al" = (
+/obj/structure/table/reinforced,
+/obj/item/storage/cans/sixbeer,
+/turf/open/floor/plasteel/grimy,
+/area/ruin/space/has_grav/hellfactoryoffice)
+"am" = (
+/obj/machinery/paystand,
+/turf/open/floor/plasteel/grimy,
+/area/ruin/space/has_grav/hellfactoryoffice)
+"an" = (
+/obj/effect/decal/remains/human,
+/obj/effect/decal/cleanable/blood/old,
+/turf/open/floor/plasteel/grimy,
+/area/ruin/space/has_grav/hellfactoryoffice)
+"ao" = (
+/turf/open/floor/plasteel/grimy,
+/area/ruin/space/has_grav/hellfactoryoffice)
+"ap" = (
+/obj/structure/table/reinforced,
+/obj/machinery/computer/security/wooden_tv,
+/turf/open/floor/plasteel/grimy,
+/area/ruin/space/has_grav/hellfactoryoffice)
+"aq" = (
+/obj/item/pressure_plate/hologrid{
+ name = "bossman's hologrid";
+ reward = /obj/item/stack/spacecash/c10000
+ },
+/turf/open/floor/plasteel/grimy,
+/area/ruin/space/has_grav/hellfactoryoffice)
+"ar" = (
+/obj/structure/closet/crate,
+/obj/item/stack/sheet/metal/five,
+/obj/item/grenade/firecracker,
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/hellfactory)
+"as" = (
+/obj/structure/holobox,
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/hellfactory)
+"at" = (
+/obj/structure/closet/crate{
+ icon_state = "crateopen"
+ },
+/obj/item/reagent_containers/glass/beaker/large,
+/obj/item/reagent_containers/glass/beaker/large,
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/hellfactory)
+"au" = (
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
+ dir = 6
+ },
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple/layer1{
+ dir = 6
+ },
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple/layer3{
+ dir = 6
+ },
+/turf/open/floor/plastic,
+/area/ruin/space/has_grav/hellfactory)
+"av" = (
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple/layer3{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple/layer1{
+ dir = 4
+ },
+/obj/structure/holobox,
+/turf/open/floor/plastic,
+/area/ruin/space/has_grav/hellfactory)
+"aw" = (
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple/layer3{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple/layer1{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
+ dir = 4
+ },
+/turf/closed/wall,
+/area/ruin/space/has_grav/hellfactory)
+"ax" = (
+/obj/machinery/atmospherics/pipe/heat_exchanging/manifold{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/heat_exchanging/manifold/layer1{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/heat_exchanging/manifold/layer3{
+ dir = 4
+ },
+/turf/open/floor/plastic,
+/area/ruin/space/has_grav/hellfactory)
+"ay" = (
+/obj/structure/fluff/hedge/opaque,
+/turf/open/floor/plasteel/grimy,
+/area/ruin/space/has_grav/hellfactoryoffice)
+"az" = (
+/obj/item/trash/raisins,
+/turf/open/floor/plasteel/grimy,
+/area/ruin/space/has_grav/hellfactoryoffice)
+"aA" = (
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/hellfactory)
+"aB" = (
+/turf/open/floor/plasteel/checker,
+/area/ruin/space/has_grav/hellfactory)
+"aC" = (
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple,
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple/layer1,
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple/layer3,
+/turf/open/floor/plastic,
+/area/ruin/space/has_grav/hellfactory)
+"aD" = (
+/obj/structure/holobox,
+/turf/open/floor/plastic,
+/area/ruin/space/has_grav/hellfactory)
+"aE" = (
+/obj/machinery/photocopier,
+/turf/open/floor/plasteel/grimy,
+/area/ruin/space/has_grav/hellfactoryoffice)
+"aF" = (
+/obj/item/trash/can,
+/turf/open/floor/plasteel/grimy,
+/area/ruin/space/has_grav/hellfactoryoffice)
+"aG" = (
+/obj/structure/table/reinforced,
+/obj/item/storage/cans/sixsoda,
+/turf/open/floor/plasteel/grimy,
+/area/ruin/space/has_grav/hellfactoryoffice)
+"aH" = (
+/obj/structure/table/reinforced,
+/obj/item/trash/popcorn,
+/turf/open/floor/plasteel/grimy,
+/area/ruin/space/has_grav/hellfactoryoffice)
+"aI" = (
+/obj/structure/table/reinforced,
+/turf/open/floor/plasteel/grimy,
+/area/ruin/space/has_grav/hellfactoryoffice)
+"aJ" = (
+/obj/structure/table/reinforced,
+/obj/item/trash/candle,
+/obj/structure/cable,
+/turf/open/floor/plasteel/grimy,
+/area/ruin/space/has_grav/hellfactoryoffice)
+"aK" = (
+/obj/structure/table/reinforced,
+/obj/item/rsf,
+/turf/open/floor/plasteel/grimy,
+/area/ruin/space/has_grav/hellfactoryoffice)
+"aL" = (
+/turf/closed/wall/rust,
+/area/ruin/space/has_grav/hellfactory)
+"aM" = (
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
+ dir = 5
+ },
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple/layer1{
+ dir = 5
+ },
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple/layer3{
+ dir = 5
+ },
+/turf/open/floor/plastic,
+/area/ruin/space/has_grav/hellfactory)
+"aN" = (
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple/layer1{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple/layer3{
+ dir = 4
+ },
+/turf/open/floor/plastic,
+/area/ruin/space/has_grav/hellfactory)
+"aO" = (
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
+ dir = 9
+ },
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple/layer1{
+ dir = 9
+ },
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple/layer3{
+ dir = 9
+ },
+/turf/open/floor/plastic,
+/area/ruin/space/has_grav/hellfactory)
+"aP" = (
+/obj/structure/filingcabinet,
+/turf/open/floor/plasteel/grimy,
+/area/ruin/space/has_grav/hellfactoryoffice)
+"aQ" = (
+/obj/item/trash/can,
+/obj/item/trash/can,
+/obj/structure/closet/crate/bin,
+/obj/item/trash/chips,
+/turf/open/floor/plasteel/grimy,
+/area/ruin/space/has_grav/hellfactoryoffice)
+"aR" = (
+/obj/item/ammo_casing/spent,
+/obj/item/ammo_casing/spent{
+ pixel_x = 3;
+ pixel_y = 5
+ },
+/obj/item/ammo_casing/spent{
+ pixel_x = 4;
+ pixel_y = -10
+ },
+/turf/open/floor/plasteel/grimy,
+/area/ruin/space/has_grav/hellfactoryoffice)
+"aS" = (
+/obj/structure/closet/crate,
+/obj/item/stack/packageWrap,
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/hellfactory)
+"aT" = (
+/obj/effect/mine/gas/water_vapor,
+/obj/machinery/door/window,
+/turf/open/floor/plastic,
+/area/ruin/space/has_grav/hellfactory)
+"aU" = (
+/turf/open/floor/plastic,
+/area/ruin/space/has_grav/hellfactory)
+"aV" = (
+/obj/effect/mine/gas/water_vapor,
+/turf/open/floor/plastic,
+/area/ruin/space/has_grav/hellfactory)
+"aW" = (
+/turf/closed/wall/r_wall/rust,
+/area/ruin/space/has_grav/hellfactory)
+"aX" = (
+/obj/item/ammo_casing/spent{
+ pixel_x = -10;
+ pixel_y = -4
+ },
+/obj/item/ammo_casing/spent,
+/obj/structure/cable,
+/turf/open/floor/plasteel/grimy,
+/area/ruin/space/has_grav/hellfactoryoffice)
+"aY" = (
+/obj/structure/extinguisher_cabinet,
+/turf/closed/wall,
+/area/ruin/space/has_grav/hellfactory)
+"aZ" = (
+/obj/machinery/light{
+ dir = 4
+ },
+/turf/open/floor/plasteel/checker,
+/area/ruin/space/has_grav/hellfactory)
+"ba" = (
+/obj/structure/plasticflaps,
+/obj/machinery/conveyor/auto,
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/hellfactory)
+"bb" = (
+/obj/structure/window/reinforced/fulltile,
+/obj/structure/grille,
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/hellfactory)
+"bc" = (
+/obj/structure/plasticflaps,
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/hellfactory)
+"bd" = (
+/obj/structure/sign/warning/coldtemp{
+ name = "\improper BLAST FREEZER"
+ },
+/turf/closed/wall/r_wall,
+/area/ruin/space/has_grav/hellfactory)
+"be" = (
+/obj/structure/table,
+/obj/item/paper_bin/carbon,
+/obj/effect/decal/cleanable/cobweb,
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/hellfactory)
+"bf" = (
+/obj/machinery/light{
+ dir = 1
+ },
+/obj/item/chair/plastic{
+ pixel_y = 4
+ },
+/obj/item/chair/plastic{
+ pixel_y = 8
+ },
+/obj/item/chair/plastic{
+ pixel_y = 12
+ },
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/hellfactory)
+"bg" = (
+/obj/machinery/modular_computer/console/preset/civilian,
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/hellfactory)
+"bh" = (
+/obj/item/pressure_plate/hologrid{
+ reward = /obj/item/keycard/office
+ },
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/hellfactory)
+"bi" = (
+/obj/machinery/light{
+ dir = 1
+ },
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/hellfactory)
+"bj" = (
+/obj/structure/grille,
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/hellfactory)
+"bk" = (
+/obj/structure/tank_dispenser/oxygen,
+/turf/open/floor/plasteel/checker,
+/area/ruin/space/has_grav/hellfactory)
+"bl" = (
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/obj/machinery/conveyor/auto,
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/hellfactory)
+"bm" = (
+/obj/structure/table,
+/obj/item/stamp/denied,
+/obj/item/stamp{
+ pixel_x = 6;
+ pixel_y = 6
+ },
+/obj/structure/window{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/hellfactory)
+"bn" = (
+/obj/structure/closet/crate/trashcart,
+/obj/item/soap/nanotrasen,
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/hellfactory)
+"bo" = (
+/obj/structure/grille/broken,
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/hellfactory)
+"bp" = (
+/obj/structure/chair/plastic,
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/hellfactory)
+"bq" = (
+/obj/structure/extinguisher_cabinet,
+/turf/closed/wall/r_wall/rust,
+/area/ruin/space/has_grav/hellfactory)
+"br" = (
+/obj/machinery/door/keycard/stockroom,
+/obj/structure/cable,
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/hellfactory)
+"bs" = (
+/obj/machinery/conveyor/auto,
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/hellfactory)
+"bt" = (
+/obj/structure/holobox,
+/obj/machinery/conveyor/auto{
+ dir = 8
+ },
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/hellfactory)
+"bu" = (
+/obj/structure/fermenting_barrel,
+/obj/machinery/conveyor/auto{
+ dir = 8
+ },
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/hellfactory)
+"bv" = (
+/obj/machinery/conveyor/auto{
+ dir = 8
+ },
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/hellfactory)
+"bw" = (
+/obj/structure/table,
+/obj/structure/window{
+ dir = 8
+ },
+/obj/item/pen/fourcolor,
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/hellfactory)
+"bx" = (
+/obj/structure/table,
+/obj/item/storage/toolbox/mechanical,
+/obj/structure/window{
+ dir = 8
+ },
+/obj/structure/window,
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/hellfactory)
+"by" = (
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/hellfactory)
+"bz" = (
+/obj/structure/closet/crate,
+/obj/item/reagent_containers/glass/beaker/large,
+/obj/item/reagent_containers/glass/beaker/large,
+/obj/item/reagent_containers/glass/beaker/large,
+/obj/effect/decal/cleanable/cobweb,
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/hellfactory)
+"bA" = (
+/obj/structure/closet/crate,
+/obj/item/stack/packageWrap,
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/hellfactory)
+"bB" = (
+/obj/structure/fermenting_barrel,
+/obj/machinery/conveyor/auto,
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/hellfactory)
+"bC" = (
+/obj/structure/ore_box,
+/obj/machinery/conveyor/auto{
+ dir = 1
+ },
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/hellfactory)
+"bD" = (
+/obj/effect/turf_decal/arrows,
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/hellfactory)
+"bE" = (
+/obj/effect/turf_decal/box/white/corners{
+ dir = 1
+ },
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/hellfactory)
+"bF" = (
+/obj/effect/turf_decal/box/white/corners{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/hellfactory)
+"bG" = (
+/obj/structure/closet/crate,
+/obj/machinery/conveyor/auto,
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/obj/item/reagent_containers/food/drinks/flask,
+/obj/item/stack/sheet/glass,
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/hellfactory)
+"bI" = (
+/obj/structure/fermenting_barrel,
+/obj/machinery/conveyor/auto{
+ dir = 1
+ },
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/hellfactory)
+"bJ" = (
+/obj/effect/turf_decal/delivery,
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/hellfactory)
+"bK" = (
+/obj/machinery/light,
+/obj/structure/rack,
+/obj/item/book/manual/random,
+/obj/item/poster/random_contraband,
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/hellfactory)
+"bL" = (
+/obj/effect/decal/cleanable/dirt/dust,
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/hellfactory)
+"bM" = (
+/obj/structure/grille/broken,
+/obj/item/pressure_plate/hologrid{
+ reward = /obj/item/stack/spacecash/c500
+ },
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/hellfactory)
+"bN" = (
+/obj/structure/ore_box,
+/obj/machinery/conveyor/auto,
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/hellfactory)
+"bO" = (
+/obj/structure/closet/crate,
+/obj/machinery/conveyor/auto{
+ dir = 1
+ },
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/obj/item/stack/sheet/mineral/wood/fifty,
+/obj/item/plunger,
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/hellfactory)
+"bP" = (
+/obj/effect/turf_decal/arrows{
+ dir = 1
+ },
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/hellfactory)
+"bQ" = (
+/obj/structure/mirror,
+/turf/closed/wall/rust,
+/area/ruin/space/has_grav/hellfactory)
+"bR" = (
+/obj/item/pressure_plate/hologrid{
+ reward = /obj/item/keycard/stockroom
+ },
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/hellfactory)
+"bS" = (
+/obj/item/pressure_plate/hologrid{
+ reward = /obj/item/stack/arcadeticket/thirty
+ },
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/hellfactory)
+"bT" = (
+/obj/machinery/conveyor/auto{
+ dir = 4
+ },
+/obj/structure/window/reinforced,
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/hellfactory)
+"bU" = (
+/obj/structure/closet/crate/large,
+/obj/machinery/conveyor/auto{
+ dir = 4
+ },
+/obj/structure/window/reinforced,
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/hellfactory)
+"bV" = (
+/obj/structure/closet/crate,
+/obj/machinery/conveyor/auto{
+ dir = 4
+ },
+/obj/structure/window/reinforced,
+/obj/item/reagent_containers/food/drinks/shaker,
+/obj/item/stack/sheet/cardboard,
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/hellfactory)
+"bW" = (
+/obj/machinery/conveyor/auto{
+ dir = 1
+ },
+/obj/structure/window/reinforced,
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/hellfactory)
+"bX" = (
+/obj/structure/sign/warning/chemdiamond,
+/turf/closed/wall,
+/area/ruin/space/has_grav/hellfactory)
+"bY" = (
+/obj/machinery/light/small{
+ brightness = 3;
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/hellfactory)
+"bZ" = (
+/obj/effect/turf_decal/bot_white,
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/hellfactory)
+"ca" = (
+/obj/machinery/door/airlock,
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/hellfactory)
+"cb" = (
+/obj/machinery/light/small,
+/obj/structure/curtain,
+/turf/open/floor/holofloor/wood,
+/area/ruin/space/has_grav/hellfactory)
+"cc" = (
+/obj/structure/bed,
+/obj/item/bedsheet/dorms,
+/turf/open/floor/holofloor/wood,
+/area/ruin/space/has_grav/hellfactory)
+"cd" = (
+/obj/machinery/plumbing/synthesizer{
+ desc = "Produces a single chemical at a given volume. This one appears to have been hotwired to generate universal enzyme.";
+ dir = 2;
+ dispensable_reagents = list(/datum/reagent/consumable/enzyme);
+ reagent_id = /datum/reagent/consumable/enzyme
+ },
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/hellfactory)
+"ce" = (
+/obj/machinery/plumbing/synthesizer{
+ desc = "Produces a single chemical at a given volume. This one appears to have been hotwired to generate honey.";
+ dir = 2;
+ dispensable_reagents = list(/datum/reagent/consumable/honey);
+ reagent_id = /datum/reagent/consumable/honey
+ },
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/hellfactory)
+"cf" = (
+/obj/machinery/plumbing/synthesizer{
+ desc = "Produces a single chemical at a given volume. This one seems to have been hotwired to produce... blood?";
+ dir = 2;
+ dispensable_reagents = list(/datum/reagent/blood);
+ reagent_id = /datum/reagent/blood
+ },
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/hellfactory)
+"cg" = (
+/obj/structure/closet/crate,
+/obj/item/stack/ore/glass,
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/hellfactory)
+"ch" = (
+/obj/machinery/light{
+ dir = 8
+ },
+/obj/machinery/plumbing/tank,
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/hellfactory)
+"ci" = (
+/obj/machinery/light/small,
+/obj/effect/decal/remains/human,
+/obj/structure/curtain,
+/turf/open/floor/holofloor/wood,
+/area/ruin/space/has_grav/hellfactory)
+"cj" = (
+/obj/structure/closet/crate,
+/obj/item/stack/sheet/cloth/five,
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/hellfactory)
+"ck" = (
+/obj/machinery/plumbing/tank,
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/hellfactory)
+"cl" = (
+/obj/machinery/light{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/hellfactory)
+"cm" = (
+/obj/structure/cable,
+/obj/machinery/power/apc/highcap/ten_k{
+ dir = 1
+ },
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/hellfactory)
+"cn" = (
+/obj/machinery/plumbing/output{
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/hellfactory)
+"co" = (
+/obj/effect/turf_decal/box/white/corners{
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/hellfactory)
+"cp" = (
+/obj/effect/turf_decal/box/white/corners,
+/obj/effect/decal/cleanable/dirt/dust,
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/hellfactory)
+"cq" = (
+/obj/structure/cable,
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/hellfactory)
+"cr" = (
+/obj/structure/closet/crate/trashcart,
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/hellfactory)
+"cs" = (
+/obj/structure/fermenting_barrel,
+/obj/effect/turf_decal/box/white,
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/hellfactory)
+"ct" = (
+/obj/machinery/light/built,
+/obj/structure/marker_beacon{
+ icon_state = "markerburgundy-on"
+ },
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/hellfactory)
+"cu" = (
+/obj/effect/turf_decal{
+ dir = 9
+ },
+/turf/open/floor/plating{
+ broken = 1;
+ icon_state = "platingdmg1"
+ },
+/area/ruin/space/has_grav/hellfactory)
+"cv" = (
+/obj/effect/turf_decal{
+ dir = 1
+ },
+/obj/effect/turf_decal/caution/stand_clear/white,
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/hellfactory)
+"cw" = (
+/obj/effect/turf_decal{
+ dir = 1
+ },
+/obj/item/stack/tile/plasteel,
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/hellfactory)
+"cx" = (
+/obj/effect/turf_decal{
+ dir = 1
+ },
+/obj/effect/turf_decal/caution/stand_clear/white,
+/turf/open/floor/plating{
+ broken = 1;
+ icon_state = "platingdmg1"
+ },
+/area/ruin/space/has_grav/hellfactory)
+"cy" = (
+/obj/effect/turf_decal{
+ dir = 5
+ },
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/hellfactory)
+"cz" = (
+/obj/machinery/light/broken,
+/obj/structure/marker_beacon{
+ icon_state = "markerburgundy-on"
+ },
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/hellfactory)
+"cA" = (
+/obj/item/trash/raisins,
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/hellfactory)
+"cB" = (
+/obj/item/stack/tile/plasteel,
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/hellfactory)
+"cC" = (
+/obj/structure/sign/warning/vacuum,
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/hellfactory)
+"cD" = (
+/obj/structure/ore_box,
+/obj/effect/turf_decal/delivery/white,
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/hellfactory)
+"cE" = (
+/obj/structure/sign/warning/docking,
+/turf/closed/wall/rust,
+/area/ruin/space/has_grav/hellfactory)
+"cF" = (
+/obj/effect/turf_decal/delivery/white,
+/obj/machinery/door/poddoor,
+/turf/open/floor/plating{
+ broken = 1;
+ icon_state = "platingdmg1"
+ },
+/area/ruin/space/has_grav/hellfactory)
+"cG" = (
+/obj/effect/turf_decal/delivery/white,
+/obj/effect/turf_decal/delivery/red,
+/obj/item/stack/tile/plasteel,
+/obj/machinery/door/poddoor,
+/turf/open/floor/plating{
+ broken = 1;
+ icon_state = "platingdmg1"
+ },
+/area/ruin/space/has_grav/hellfactory)
+"cH" = (
+/obj/effect/turf_decal/delivery/white,
+/obj/structure/grille/broken,
+/obj/machinery/door/poddoor,
+/turf/open/floor/plating{
+ broken = 1;
+ icon_state = "platingdmg1"
+ },
+/area/ruin/space/has_grav/hellfactory)
+"cI" = (
+/obj/effect/turf_decal/delivery/white,
+/obj/effect/turf_decal/delivery/red,
+/obj/machinery/door/poddoor,
+/turf/open/floor/plating{
+ broken = 1;
+ icon_state = "platingdmg1"
+ },
+/area/ruin/space/has_grav/hellfactory)
+"cJ" = (
+/obj/effect/turf_decal/delivery/white,
+/obj/item/stack/tile/plasteel,
+/obj/machinery/door/poddoor,
+/turf/open/floor/plating{
+ broken = 1;
+ icon_state = "platingdmg1"
+ },
+/area/ruin/space/has_grav/hellfactory)
+"cK" = (
+/obj/machinery/power/port_gen/pacman,
+/obj/structure/cable,
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/hellfactory)
+"cL" = (
+/obj/item/bedsheet/brown,
+/obj/structure/bed,
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/hellfactory)
+"cM" = (
+/obj/item/storage/toolbox/emergency/old,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/hellfactory)
+"cN" = (
+/obj/machinery/door/keycard/entry,
+/obj/machinery/door/airlock/public,
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/hellfactory)
+"cO" = (
+/obj/structure/holobox,
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/hellfactory)
+"cQ" = (
+/obj/structure/lattice/catwalk,
+/turf/open/space/basic,
+/area/ruin/space/has_grav/hellfactory)
+"cR" = (
+/obj/structure/lattice/catwalk,
+/obj/structure/marker_beacon{
+ icon_state = "markerburgundy-on"
+ },
+/turf/open/space/basic,
+/area/ruin/space/has_grav/hellfactory)
+"cS" = (
+/obj/structure/lattice/catwalk,
+/obj/item/keycard/entry,
+/turf/open/space/basic,
+/area/ruin/space/has_grav/hellfactory)
+"cU" = (
+/obj/machinery/door/keycard/office,
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/hellfactoryoffice)
+"cV" = (
+/obj/structure/table,
+/obj/item/stack/ducts/fifty,
+/obj/structure/window,
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/hellfactory)
+"fj" = (
+/obj/structure/cable,
+/turf/closed/indestructible{
+ icon = 'icons/turf/walls/reinforced_wall.dmi';
+ icon_state = "r_wall"
+ },
+/area/ruin/space/has_grav/hellfactoryoffice)
+"hv" = (
+/obj/effect/decal/cleanable/blood/old,
+/turf/open/floor/plastic,
+/area/ruin/space/has_grav/hellfactory)
+"lv" = (
+/obj/structure/cable,
+/obj/structure/cable,
+/turf/closed/wall/r_wall,
+/area/ruin/space/has_grav/hellfactory)
+"lR" = (
+/obj/machinery/light/floor,
+/obj/effect/turf_decal/bot_white/right,
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/hellfactory)
+"nT" = (
+/obj/structure/rack,
+/obj/item/stack/wrapping_paper,
+/obj/item/stack/packageWrap,
+/obj/effect/spawner/lootdrop/donkpockets,
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/hellfactory)
+"oH" = (
+/obj/effect/decal/cleanable/dirt/dust,
+/obj/machinery/light/small{
+ brightness = 3;
+ dir = 8
+ },
+/turf/open/floor/plasteel/checker,
+/area/ruin/space/has_grav/hellfactory)
+"qB" = (
+/obj/item/pressure_plate/hologrid{
+ reward = /obj/item/skub
+ },
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/hellfactory)
+"ry" = (
+/obj/effect/decal/cleanable/dirt/dust,
+/obj/machinery/light/floor,
+/obj/effect/turf_decal/bot_white/left,
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/hellfactory)
+"rC" = (
+/obj/structure/sign/poster/random,
+/turf/closed/wall/rust,
+/area/ruin/space/has_grav/hellfactory)
+"uL" = (
+/obj/effect/decal/cleanable/dirt/dust,
+/obj/machinery/light/floor,
+/obj/effect/turf_decal/bot_white/right,
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/hellfactory)
+"wv" = (
+/obj/machinery/power/apc/highcap/ten_k{
+ dir = 1
+ },
+/obj/structure/cable,
+/turf/open/floor/plasteel/grimy,
+/area/ruin/space/has_grav/hellfactoryoffice)
+"xK" = (
+/obj/structure/bed,
+/obj/item/bedsheet/dorms,
+/obj/effect/decal/cleanable/cobweb/cobweb2,
+/turf/open/floor/holofloor/wood,
+/area/ruin/space/has_grav/hellfactory)
+"zI" = (
+/obj/structure/cable,
+/turf/closed/wall/r_wall/rust,
+/area/ruin/space/has_grav/hellfactory)
+"BC" = (
+/obj/machinery/light/floor,
+/obj/effect/turf_decal/bot_white/left,
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/hellfactory)
+"EP" = (
+/obj/structure/cable,
+/turf/closed/wall/r_wall,
+/area/ruin/space/has_grav/hellfactory)
+"Fs" = (
+/obj/effect/decal/cleanable/dirt/dust,
+/obj/structure/table,
+/obj/machinery/microwave,
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/hellfactory)
+"Gs" = (
+/obj/structure/cable,
+/obj/structure/cable,
+/turf/closed/wall/r_wall/rust,
+/area/ruin/space/has_grav/hellfactory)
+"GE" = (
+/obj/effect/decal/cleanable/dirt/dust,
+/turf/open/floor/plasteel/checker,
+/area/ruin/space/has_grav/hellfactory)
+"Mv" = (
+/obj/structure/sign/poster/random,
+/turf/closed/wall,
+/area/ruin/space/has_grav/hellfactory)
+"MR" = (
+/obj/item/pressure_plate/hologrid,
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/hellfactory)
+"OJ" = (
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple,
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple/layer1,
+/obj/machinery/atmospherics/pipe/heat_exchanging/simple/layer3,
+/obj/machinery/light{
+ dir = 4
+ },
+/turf/open/floor/plastic,
+/area/ruin/space/has_grav/hellfactory)
+"PO" = (
+/obj/machinery/light/small,
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/hellfactory)
+"Sz" = (
+/obj/effect/decal/cleanable/oil,
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/hellfactory)
+"UK" = (
+/obj/effect/decal/cleanable/oil/streak,
+/turf/open/floor/plasteel,
+/area/ruin/space/has_grav/hellfactory)
+"UN" = (
+/obj/structure/cable,
+/turf/open/floor/plasteel/grimy,
+/area/ruin/space/has_grav/hellfactoryoffice)
+"Wh" = (
+/obj/effect/decal/cleanable/dirt/dust,
+/turf/open/floor/plating,
+/area/ruin/space/has_grav/hellfactory)
+
+(1,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(2,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(3,1,1) = {"
+aa
+aa
+aW
+ac
+aW
+aW
+ac
+ac
+aW
+ac
+ac
+ac
+aW
+ac
+ac
+ac
+ac
+aW
+aW
+ac
+aW
+aW
+aW
+aa
+aa
+"}
+(4,1,1) = {"
+aa
+aa
+aW
+ad
+au
+aC
+aM
+aT
+ba
+bl
+bl
+bs
+bB
+bG
+bN
+bT
+cd
+ch
+ck
+ck
+cs
+cD
+aW
+aa
+aa
+"}
+(5,1,1) = {"
+aa
+aa
+ac
+ae
+av
+ab
+aN
+hv
+bb
+aA
+bL
+bt
+bb
+bb
+bb
+bU
+ce
+aA
+bL
+aA
+cn
+cs
+aW
+aa
+aa
+"}
+(6,1,1) = {"
+aa
+aa
+aW
+af
+aw
+aD
+aN
+aU
+bb
+bL
+aA
+bu
+bb
+bb
+bb
+bV
+cf
+aA
+aA
+UK
+bL
+cs
+aW
+aa
+aa
+"}
+(7,1,1) = {"
+aa
+aa
+aW
+ag
+ax
+OJ
+aO
+aV
+bc
+bL
+bL
+bv
+bC
+bI
+bO
+bW
+aA
+aA
+bL
+aA
+aA
+cs
+aW
+cQ
+aa
+"}
+(8,1,1) = {"
+aa
+aa
+ah
+ai
+ah
+ah
+ah
+ah
+bd
+aA
+aA
+aA
+bD
+bJ
+bP
+bX
+aA
+aA
+bL
+aA
+ct
+cE
+aW
+cR
+cQ
+"}
+(9,1,1) = {"
+aa
+aa
+ah
+aj
+az
+aF
+aQ
+ah
+be
+bm
+bw
+bx
+bE
+by
+by
+bY
+by
+by
+by
+co
+cu
+cF
+aa
+aa
+aa
+"}
+(10,1,1) = {"
+aa
+aa
+ah
+ak
+ao
+ao
+aF
+ah
+bf
+aA
+bp
+cV
+by
+Wh
+BC
+by
+Wh
+ry
+by
+by
+cv
+cG
+aa
+aa
+aa
+"}
+(11,1,1) = {"
+aa
+aa
+ah
+al
+ao
+aG
+ao
+ah
+bg
+aA
+bL
+aA
+Wh
+Wh
+by
+by
+by
+by
+Wh
+by
+cw
+cH
+aa
+aa
+aa
+"}
+(12,1,1) = {"
+aa
+aa
+ah
+am
+ao
+aH
+ao
+ah
+ac
+ac
+bq
+by
+by
+by
+lR
+by
+by
+uL
+by
+Wh
+cx
+cI
+aa
+aa
+aa
+"}
+(13,1,1) = {"
+aa
+aa
+ah
+an
+ao
+aI
+aR
+cU
+bh
+qB
+MR
+by
+bF
+by
+by
+bZ
+by
+bZ
+cl
+cp
+cy
+cJ
+aa
+aa
+aa
+"}
+(14,1,1) = {"
+aa
+aa
+ah
+wv
+UN
+aJ
+aX
+fj
+EP
+zI
+lv
+by
+by
+bK
+aL
+ca
+aL
+ca
+aL
+by
+cz
+cE
+ac
+cR
+cQ
+"}
+(15,1,1) = {"
+aa
+aa
+ah
+ap
+ao
+aK
+ao
+ah
+aA
+bn
+zI
+by
+Wh
+Fs
+bQ
+cb
+bQ
+ci
+aL
+cm
+cq
+cK
+aW
+cS
+aa
+"}
+(16,1,1) = {"
+aa
+aa
+ah
+aq
+ao
+ao
+ao
+ah
+aB
+bL
+br
+by
+by
+nT
+aL
+cc
+aL
+xK
+Gs
+EP
+aW
+ac
+aW
+aa
+aa
+"}
+(17,1,1) = {"
+aa
+aa
+ah
+ay
+aE
+aP
+aP
+ah
+bi
+aB
+Gs
+EP
+EP
+zI
+EP
+zI
+EP
+zI
+lv
+cr
+cA
+cC
+ab
+aa
+aa
+"}
+(18,1,1) = {"
+aa
+aa
+ah
+ah
+ah
+ah
+ah
+ah
+bj
+bo
+aL
+bz
+Mv
+aB
+bR
+PO
+ab
+as
+aL
+cr
+cB
+cL
+ab
+aa
+aa
+"}
+(19,1,1) = {"
+aa
+aa
+ac
+ar
+aA
+aB
+aS
+aL
+bk
+aB
+ab
+bA
+aA
+aB
+ab
+GE
+cg
+cj
+by
+Sz
+by
+cM
+cN
+aa
+aa
+"}
+(20,1,1) = {"
+aa
+aa
+aW
+ab
+bL
+aB
+aB
+aY
+aA
+aB
+ab
+ab
+ab
+bM
+ab
+ab
+rC
+ab
+Mv
+Wh
+Wh
+by
+ab
+aa
+aa
+"}
+(21,1,1) = {"
+aa
+aa
+ac
+as
+aA
+Mv
+aB
+aA
+bL
+aB
+aB
+aB
+oH
+aB
+ab
+aB
+bL
+aA
+by
+Wh
+by
+by
+ab
+aa
+aa
+"}
+(22,1,1) = {"
+aa
+aa
+ac
+at
+GE
+aL
+GE
+aZ
+aB
+aB
+aL
+by
+ab
+aA
+bS
+aB
+ab
+as
+aL
+by
+cl
+cO
+ab
+aa
+aa
+"}
+(23,1,1) = {"
+aa
+aa
+aW
+aW
+aW
+aW
+aW
+ac
+aW
+ac
+ac
+aW
+aW
+ac
+ac
+ac
+ac
+aW
+aW
+ab
+ab
+ab
+ab
+aa
+aa
+"}
+(24,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
+(25,1,1) = {"
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+aa
+"}
diff --git a/code/__DEFINES/radio.dm b/code/__DEFINES/radio.dm
index bfba80a80cb..af6a9ac51b1 100644
--- a/code/__DEFINES/radio.dm
+++ b/code/__DEFINES/radio.dm
@@ -65,6 +65,7 @@
#define FREQ_ENGINEERING 1357 // Engineering comms frequency, orange
#define FREQ_SECURITY 1359 // Security comms frequency, red
+#define FREQ_HOLOGRID_SOLUTION 1433
#define FREQ_STATUS_DISPLAYS 1435
#define FREQ_ATMOS_ALARMS 1437 // air alarms <-> alert computers
#define FREQ_ATMOS_CONTROL 1439 // air alarms <-> vents and scrubbers
diff --git a/code/datums/ruins/space.dm b/code/datums/ruins/space.dm
index d3465ca1476..880b4d709e7 100644
--- a/code/datums/ruins/space.dm
+++ b/code/datums/ruins/space.dm
@@ -295,3 +295,10 @@
description = "Well wish you luck."
allow_duplicates = FALSE
unpickable = TRUE
+
+/datum/map_template/ruin/space/hellfactory
+ id = "hellfactory"
+ suffix = "hellfactory.dmm"
+ name = "Heck Brewery"
+ description = "An abandoned warehouse and brewing facility, which has been recently rediscovered. Reports claim that the security system entered an ultra-hard lockdown, but these reports are inconclusive."
+
diff --git a/code/game/area/areas/ruins/space.dm b/code/game/area/areas/ruins/space.dm
index da0ee2cfadc..9f171b15a3a 100644
--- a/code/game/area/areas/ruins/space.dm
+++ b/code/game/area/areas/ruins/space.dm
@@ -419,3 +419,13 @@
/area/ruin/space/has_grav/powered/ancient_shuttle
name = "Ancient Shuttle"
icon_state = "yellow"
+
+//HELL'S FACTORY OPERATING FACILITY
+/area/ruin/space/has_grav/hellfactory
+ name = "Hell Factory"
+ icon_state = "yellow"
+
+/area/ruin/space/has_grav/hellfactoryoffice
+ name = "Hell Factory Office"
+ icon_state = "red"
+ noteleport = TRUE
diff --git a/code/game/objects/effects/mines.dm b/code/game/objects/effects/mines.dm
index 32998fbfd9e..30f28343fff 100644
--- a/code/game/objects/effects/mines.dm
+++ b/code/game/objects/effects/mines.dm
@@ -78,6 +78,11 @@
gas_type = "n2o"
+/obj/effect/mine/gas/water_vapor
+ name = "chilled vapor mine"
+ gas_amount = 500
+ gas_type = "water_vapor"
+
/obj/effect/mine/sound
name = "honkblaster 1000"
var/sound = 'sound/items/bikehorn.ogg'
diff --git a/code/game/objects/items/devices/pressureplates.dm b/code/game/objects/items/devices/pressureplates.dm
index 202bdcede17..60fa1fbadb4 100644
--- a/code/game/objects/items/devices/pressureplates.dm
+++ b/code/game/objects/items/devices/pressureplates.dm
@@ -1,13 +1,14 @@
-
/obj/item/pressure_plate
name = "pressure plate"
- desc = "An electronic device that triggers when stepped on."
- icon = 'icons/obj/device.dmi'
+ desc = "An electronic device that triggers when stepped on. Ctrl-Click to toggle the pressure plate off and on."
+ icon = 'icons/obj/puzzle_small.dmi'
item_state = "flash"
icon_state = "pressureplate"
level = 1
+ layer = LOW_OBJ_LAYER
var/trigger_mob = TRUE
var/trigger_item = FALSE
+ var/specific_item = null
var/trigger_silent = FALSE
var/sound/trigger_sound = 'sound/effects/pressureplate.ogg'
var/obj/item/assembly/signaler/sigdev = null
@@ -20,6 +21,7 @@
var/image/tile_overlay = null
var/can_trigger = TRUE
var/trigger_delay = 10
+ var/protected = FALSE
/obj/item/pressure_plate/Initialize()
. = ..()
@@ -35,6 +37,8 @@
. = ..()
if(!can_trigger || !active)
return
+ if(trigger_item && !istype(AM, specific_item))
+ return
if(trigger_mob && isliving(AM))
var/mob/living/L = AM
to_chat(L, "You feel something click beneath you!")
@@ -62,6 +66,16 @@
sigdev = null
return ..()
+/obj/item/pressure_plate/CtrlClick(mob/user)
+ if(protected)
+ to_chat(user, "You can't quite seem to turn this pressure plate off...")
+ return
+ active = !active
+ if (active == TRUE)
+ to_chat(user, "You turn [src] on.")
+ else
+ to_chat(user, "You turn [src] off.")
+
/obj/item/pressure_plate/hide(yes)
if(yes)
invisibility = INVISIBILITY_MAXIMUM
diff --git a/code/game/objects/items/puzzle_pieces.dm b/code/game/objects/items/puzzle_pieces.dm
new file mode 100644
index 00000000000..5e0dbc421a1
--- /dev/null
+++ b/code/game/objects/items/puzzle_pieces.dm
@@ -0,0 +1,135 @@
+//**************
+//*****Keys*******************
+//************** ** **
+/obj/item/keycard
+ name = "security keycard"
+ desc = "This feels like it belongs to a door."
+ icon = 'icons/obj/puzzle_small.dmi'
+ icon_state = "keycard"
+ force = 0
+ throwforce = 0
+ w_class = WEIGHT_CLASS_TINY
+ throw_speed = 1
+ throw_range = 7
+ resistance_flags = INDESTRUCTIBLE | FIRE_PROOF | ACID_PROOF | LAVA_PROOF
+ var/puzzle_id = null
+
+//Two test keys for use alongside the two test doors.
+/obj/item/keycard/cheese
+ name = "cheese keycard"
+ desc = "Look, I still don't understand the reference. What the heck is a keyzza?"
+ color = "#f0da12"
+ puzzle_id = "cheese"
+
+/obj/item/keycard/swordfish
+ name = "titanic keycard"
+ desc = "Smells like it was at the bottom of a harbor."
+ color = "#3bbbdb"
+ puzzle_id = "swordfish"
+
+//***************
+//*****Doors*****
+//***************
+
+/obj/machinery/door/keycard
+ name = "locked door"
+ desc = "This door only opens when a keycard is swiped. It looks virtually indestructable."
+ icon = 'icons/obj/doors/doorpuzzle.dmi'
+ icon_state = "door_closed"
+ explosion_block = 3
+ heat_proof = TRUE
+ max_integrity = 600
+ armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100)
+ resistance_flags = INDESTRUCTIBLE | FIRE_PROOF | ACID_PROOF | LAVA_PROOF
+ damage_deflection = 70
+ var/puzzle_id = null //Make sure that the key has the same puzzle_id as the keycard door!
+
+//Standard Expressions to make keycard doors basically un-cheeseable
+/obj/machinery/door/keycard/Bumped(atom/movable/AM)
+ return !density && ..()
+
+/obj/machinery/door/keycard/emp_act(severity)
+ return
+
+/obj/machinery/door/keycard/ex_act(severity, target)
+ return
+
+/obj/machinery/door/keycard/try_to_activate_door(mob/user)
+ add_fingerprint(user)
+ if(operating)
+ return
+
+/obj/machinery/door/keycard/attackby(obj/item/I, mob/user, params)
+ . = ..()
+ if(istype(I,/obj/item/keycard))
+ var/obj/item/keycard/key = I
+ if((!puzzle_id || puzzle_id == key.puzzle_id) && density)
+ to_chat(user, "The door beeps, and slides opens.")
+ open()
+ return
+ else if(puzzle_id != key.puzzle_id)
+ to_chat(user, "[src] buzzes. This must not be the right key.")
+ return
+ else
+ to_chat(user, "This door doesn't appear to close.")
+ return
+
+//Test doors. Gives admins a few doors to use quickly should they so choose.
+/obj/machinery/door/keycard/cheese
+ name = "blue airlock"
+ desc = "Smells like... pizza?"
+ puzzle_id = "cheese"
+
+/obj/machinery/door/keycard/swordfish
+ name = "blue airlock"
+ desc = "If nautical nonsense be something you wish."
+ puzzle_id = "swordfish"
+
+//*************************
+//***Box Pushing Puzzles***
+//*************************
+//We're working off a subtype of pressureplates, which should work just a BIT better now.
+/obj/structure/holobox
+ name = "holobox"
+ desc = "A hard-light box, containing a secure decryption key."
+ icon = 'icons/obj/puzzle_small.dmi'
+ icon_state = "laserbox"
+ density = TRUE
+ resistance_flags = INDESTRUCTIBLE | FIRE_PROOF | ACID_PROOF | LAVA_PROOF
+
+//Uses the pressure_plate settings for a pretty basic custom pattern that waits for a specific item to trigger. Easy enough to retool for mapping purposes or subtypes.
+/obj/item/pressure_plate/hologrid
+ name = "hologrid"
+ desc = "A high power, electronic input port for a holobox, which can unlock the hologrid's storage compartment. Safe to stand on."
+ icon = 'icons/obj/puzzle_small.dmi'
+ icon_state = "lasergrid"
+ anchored = TRUE
+ trigger_mob = FALSE
+ trigger_item = TRUE
+ specific_item = /obj/structure/holobox
+ removable_signaller = FALSE //Being a pressure plate subtype, this can also use signals.
+ roundstart_signaller_freq = FREQ_HOLOGRID_SOLUTION //Frequency is kept on it's own default channel however.
+ active = TRUE
+ trigger_delay = 10
+ protected = TRUE
+ resistance_flags = INDESTRUCTIBLE | FIRE_PROOF | ACID_PROOF | LAVA_PROOF
+ var/reward = /obj/item/reagent_containers/food/snacks/cookie
+ var/claimed = FALSE
+
+/obj/item/pressure_plate/hologrid/examine(mob/user)
+ . = ..()
+ if(claimed)
+ . += "This one appears to be spent already."
+
+/obj/item/pressure_plate/hologrid/trigger()
+ reward = new reward(loc)
+ flick("lasergrid_a",src)
+ icon_state = "lasergrid_full"
+
+/obj/item/pressure_plate/hologrid/Crossed(atom/movable/AM)
+ . = ..()
+ if(trigger_item && istype(AM, specific_item) && !claimed)
+ claimed = TRUE
+ flick("laserbox_burn", AM)
+ sleep(15)
+ qdel(AM)
diff --git a/code/modules/ruins/spaceruin_code/hellfactory.dm b/code/modules/ruins/spaceruin_code/hellfactory.dm
new file mode 100644
index 00000000000..6f992fbff52
--- /dev/null
+++ b/code/modules/ruins/spaceruin_code/hellfactory.dm
@@ -0,0 +1,32 @@
+/obj/machinery/door/keycard/office
+ name = "management airlock"
+ desc = "The boss man gets the best stuff. Always and forever."
+ puzzle_id = "factory1"
+
+/obj/item/keycard/office
+ name = "management keycard"
+ desc = "The Brewzone, first rate brewing and packaging. This one is labeled 'office'."
+ color = "#f05812"
+ puzzle_id = "factory1"
+
+/obj/machinery/door/keycard/stockroom
+ name = "stockroom airlock"
+ desc = "The boss man gets the best stuff. Always and forever."
+ puzzle_id = "factory2"
+
+/obj/item/keycard/stockroom
+ name = "stockroom keycard"
+ desc = "The Heck Brewzone, first rate brewing and packaging. This one is labeled 'stockroom'."
+ color = "#1272f0"
+ puzzle_id = "factory2"
+
+/obj/machinery/door/keycard/entry
+ name = "secure airlock"
+ desc = "The boss man gets the best stuff. Always and forever."
+ puzzle_id = "factory3"
+
+/obj/item/keycard/entry
+ name = "secure keycard"
+ desc = "The Heck Brewzone, first rate brewing and packaging. This one is labeled 'front door'."
+ color = "#12f049"
+ puzzle_id = "factory3"
diff --git a/icons/obj/doors/doorpuzzle.dmi b/icons/obj/doors/doorpuzzle.dmi
new file mode 100644
index 00000000000..ec4fbed514b
Binary files /dev/null and b/icons/obj/doors/doorpuzzle.dmi differ
diff --git a/icons/obj/puzzle_small.dmi b/icons/obj/puzzle_small.dmi
new file mode 100644
index 00000000000..e9dc82925aa
Binary files /dev/null and b/icons/obj/puzzle_small.dmi differ
diff --git a/tgstation.dme b/tgstation.dme
index 9da559403c9..a08344c11ab 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -938,6 +938,7 @@
#include "code\game\objects\items\plushes.dm"
#include "code\game\objects\items\pneumaticCannon.dm"
#include "code\game\objects\items\powerfist.dm"
+#include "code\game\objects\items\puzzle_pieces.dm"
#include "code\game\objects\items\RCD.dm"
#include "code\game\objects\items\RCL.dm"
#include "code\game\objects\items\religion.dm"
@@ -2769,6 +2770,7 @@
#include "code\modules\ruins\spaceruin_code\crashedship.dm"
#include "code\modules\ruins\spaceruin_code\deepstorage.dm"
#include "code\modules\ruins\spaceruin_code\DJstation.dm"
+#include "code\modules\ruins\spaceruin_code\hellfactory.dm"
#include "code\modules\ruins\spaceruin_code\hilbertshotel.dm"
#include "code\modules\ruins\spaceruin_code\listeningstation.dm"
#include "code\modules\ruins\spaceruin_code\oldstation.dm"