From 382b91dc64b6b5c2caa0ff4c18114a1c1eae45b2 Mon Sep 17 00:00:00 2001
From: ArcaneMusic <41715314+ArcaneMusic@users.noreply.github.com>
Date: Sun, 16 Feb 2020 02:44:14 -0500
Subject: [PATCH] Adds a new Space Ruin, the Hell Factory. (#49186)
* The hell factory is born. Initial Commit.
* Alright just makes sure to re-add the dmi files, so at least SOMEWHERE they exist
* I somehow lost my pressure plate fix and didn't actually fix the conflict.
* No, really, how did I break this so badly. Jesus christ.
* Quick anti-cheese measures.
* Made the map a bit more comfortable, APCs/ Keycard
* mapmerge hook :(
---
_maps/RandomRuins/SpaceRuins/hellfactory.dmm | 1773 +++++++++++++++++
code/__DEFINES/radio.dm | 1 +
code/datums/ruins/space.dm | 7 +
code/game/area/areas/ruins/space.dm | 10 +
code/game/objects/effects/mines.dm | 5 +
.../objects/items/devices/pressureplates.dm | 20 +-
code/game/objects/items/puzzle_pieces.dm | 135 ++
.../ruins/spaceruin_code/hellfactory.dm | 32 +
icons/obj/doors/doorpuzzle.dmi | Bin 0 -> 1513 bytes
icons/obj/puzzle_small.dmi | Bin 0 -> 9077 bytes
tgstation.dme | 2 +
11 files changed, 1982 insertions(+), 3 deletions(-)
create mode 100644 _maps/RandomRuins/SpaceRuins/hellfactory.dmm
create mode 100644 code/game/objects/items/puzzle_pieces.dm
create mode 100644 code/modules/ruins/spaceruin_code/hellfactory.dm
create mode 100644 icons/obj/doors/doorpuzzle.dmi
create mode 100644 icons/obj/puzzle_small.dmi
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 0000000000000000000000000000000000000000..ec4fbed514bfa467e1896b7708146523a45b2ebb
GIT binary patch
literal 1513
zcmYjRdo+}39R9xfWMD-O>Lwd6N6krGlO!MgorUN6^8j}$E9MDTrxsi
zCqz`Ic95D7a*IM2wKE%OGqoZU!!G-E&h9yT&hxuG?{nVg{hi+*Z=ScOi>i{I5&!_I
zu6t>8v~tl1#X)F(dnG>&EjivEOec{@#AGt9tgPbV;;g82M%uN2tVTvkB`pl$W@dV^
zON)z(-D3)17&bRIH!(9geB^LIcz`~vZ(v{mtN}?WNzn<>IwT#&$;zC(oYbt;O$M8y
zGOu_=pSPffI|ZNI8#BJ8$_UWJ#AKyc
zUlAP%Orm=-0P6IMBPc0MWgbYPMI?r^qghGO@o@lfLcs84v6B}U7_2$jl)3vB^Pzz!
zjAkF}5whg1%tYRPI|`R-qL3OYIILH=kQzN<;~DWK_`Q#&1@`>3z`YAl2h-RII1yzARZHn6?2R
zTyb#R;uwSj0EJ{%+8$;U@~JE)@hwS<=Q`}{C=Gtqo)que_^MI5w#L~+5`jbbn!bUd
zf^=3ak+)mJ;RM01vcB~@|Da0GtG4F_R>R#sg&hL3`+>jxG2U=-Zeoz#B9XSzU;jmz
zuc$c9+I+IDYnSE3qt^NjJy;Is7kuL~_B
z@344-eT-2^Yq|#bSmT!vHZ;>VcqB1$*Y>l|!xH^MvK~}OvVr%nQw}_A8{I0@m&C5F
zcDh`=y`0e=EY{>nS5nn7%ciO*_UUrB`8`xz7#8>EIX)y9BtGC=YtdQ)6@@b2IvBlX
z^YE(3i%eY*%z*jq7R8M6H2qoT46OYw8(4c(rxvK@T|&TgCVC{l=mq=cGbIs58rb}f
z^fIId$}ly^d^ifcPc$CBQ%0RA2U|C8l57iXL~g|NjN8kmVI_NSYENjId>=elzrFPL
z;@N^CVqwlhS+B95_;_ZL(6X;QzsarvIT6Ia9m646h<93a>lL}12V}Dyg9zS4(&7wB
zyn-<#tV@TL@6}M$@wunCdvR0aSa0y0x;h>aKu$)I1RB6%l6GENtHS8YGeo_NP~qiX
zMs>^85r(zB*g{1mok9-x|5(lzA6^$9o0G*AZf?bSH`e=`Zh^?$lc7
zZ6YlFyPZHO^n6)#hawrnN+=Ou&H1xXeVPr-czGm2^T`h&e|A6EzrMc7nvEeJAd(bl
z4pbvFiN>&-|LeI;CJF;cmd3DPBMONhcw6xv!%n?cBc|G|0WrU+=&_sdbR|kM&(Wm6
z>120^J|D#7BK?c|Xg-8~Jk%Kt1`u(#uCH&F!&R6bJlKy1{fM}yZRi2zvcHJ!@C{?w
zT-|2*r82O;E+Ev#P%;B`>2c+-X0t#Y1xp6nw@am+=|uV%#9GFfQO2>k9MN>zA!2hn
zJ+!D$hD7m>sk$T{{eGK3C{jUX99S`nzLlpuAPMJi)lqNM=$mx^Ol?4Q$Y#}6Wt#$m
z{bIzGc{}6kFF$Rmw&ft(iBgC`wl=Pok6L-m-K22w!gMcOlC}n4ZooS}mRdHuVnVBq
zZ|iRWFNniZe2*!A`TMKx`WGps7r}Dzez0^l0qmKZi=2z$Nc@RQ%9GZQEwO1IKBIpl
N;OgW_yWtR;^$&R-o^${J
literal 0
HcmV?d00001
diff --git a/icons/obj/puzzle_small.dmi b/icons/obj/puzzle_small.dmi
new file mode 100644
index 0000000000000000000000000000000000000000..e9dc82925aac7efc870558901356bfb5207c4d79
GIT binary patch
literal 9077
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