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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