diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm
index 2028a84ea99..d1006837106 100644
--- a/code/game/machinery/Sleeper.dm
+++ b/code/game/machinery/Sleeper.dm
@@ -563,4 +563,16 @@
component_parts += new /obj/item/stack/cable_coil(null, 1)
RefreshParts()
+/obj/machinery/sleeper/clockwork
+ name = "soothing sleeper"
+ desc = "A large cryogenics unit built from brass. Its surface is pleasantly cool the touch."
+ icon_state = "sleeper_c-open"
+ base_icon = "sleeper_c"
+ possible_chems = list("epinephrine", "salbutamol", "styptic_powder", "silver_sulfadiazine", "oculine", "mannitol")
+ light_color = LIGHT_COLOR_DARKRED
+
+/obj/machinery/sleeper/clockwork/crowbar_act(mob/user, obj/item/I)
+ to_chat(user, "You pry on the internal mechanisms of [src] with all your might, but they refuse to budge!")
+ return FALSE
+
#undef ADDICTION_SPEEDUP_TIME
diff --git a/code/game/machinery/doors/airlock_types.dm b/code/game/machinery/doors/airlock_types.dm
index 81bbc3a5781..b4551ee4071 100644
--- a/code/game/machinery/doors/airlock_types.dm
+++ b/code/game/machinery/doors/airlock_types.dm
@@ -487,6 +487,29 @@
security_level = 1
paintable = FALSE
+// MARK: Clockwork Airlocks
+
+/obj/machinery/door/airlock/clockwork
+ name = "pinion airlock"
+ desc = "A massive cogwheel set into two heavy slabs of brass."
+ icon = 'icons/obj/doors/airlocks/clockwork/clockwork.dmi'
+ overlays_file = 'icons/obj/doors/airlocks/clockwork/clockwork-overlays.dmi'
+ assemblytype = /obj/structure/door_assembly/door_assembly_clockwork
+ paintable = FALSE
+
+/obj/machinery/door/airlock/clockwork/Initialize(mapload)
+ . = ..()
+ new /obj/effect/temp_visual/ratvar/door(loc)
+
+/obj/machinery/door/airlock/clockwork/allowed(mob/living/L)
+ if(..())
+ new /obj/effect/temp_visual/ratvar/door(loc)
+ return TRUE
+
+/obj/machinery/door/airlock/clockwork/glass
+ glass = TRUE
+ opacity = FALSE
+
//////////////////////////////////
/*
MARK: Cult Airlocks
diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm
index 313caa58c9b..c35f465cbf0 100644
--- a/code/game/objects/items/stacks/sheets/sheet_types.dm
+++ b/code/game/objects/items/stacks/sheets/sheet_types.dm
@@ -611,7 +611,15 @@ GLOBAL_LIST_INIT(brass_recipes, list (
new /datum/stack_recipe/window("directional brass window", /obj/structure/window/reinforced/clockwork, time = 0 SECONDS, on_floor = TRUE, window_checks = TRUE),
new /datum/stack_recipe/window("fulltile brass window", /obj/structure/window/reinforced/clockwork/fulltile, 2, time = 0 SECONDS, on_floor = TRUE, window_checks = TRUE),
new /datum/stack_recipe("brass chair", /obj/structure/chair/brass, 1, time = 0 SECONDS, one_per_turf = TRUE, on_floor = TRUE),
+ new /datum/stack_recipe_list("pews", list(
+ new /datum/stack_recipe("brass pew (middle)", /obj/structure/chair/sofa/pew/clockwork, 5, one_per_turf = TRUE, on_floor = TRUE),
+ new /datum/stack_recipe("brass pew (left)", /obj/structure/chair/sofa/pew/clockwork/left, 5, one_per_turf = TRUE, on_floor = TRUE),
+ new /datum/stack_recipe("brass pew (right)", /obj/structure/chair/sofa/pew/clockwork/right, 5, one_per_turf = TRUE, on_floor = TRUE)
+ )),
+ new /datum/stack_recipe("pinion airlock assembly", /obj/structure/door_assembly/door_assembly_clockwork, 4, time = 5 SECONDS, one_per_turf = TRUE, on_floor = TRUE),
new /datum/stack_recipe("brass table frame", /obj/structure/table_frame/brass, 1, time = 0.5 SECONDS, one_per_turf = TRUE, on_floor = TRUE),
+ new /datum/stack_recipe("brass storage shelf", /obj/structure/shelf/clockwork, 5, time = 2.5 SECONDS, one_per_turf = TRUE, on_floor = TRUE),
+ new /datum/stack_recipe("brass gun rack", /obj/structure/gunrack/clockwork, 5, time = 2.5 SECONDS, one_per_turf = TRUE, on_floor = TRUE),
new /datum/stack_recipe("brass light fixture frame", /obj/item/mounted/frame/light_fixture/clockwork, 2, time = 0 SECONDS, one_per_turf = FALSE, on_floor = FALSE),
new /datum/stack_recipe("small brass light fixture frame", /obj/item/mounted/frame/light_fixture/clockwork/small, 1, time = 0 SECONDS, one_per_turf = FALSE, on_floor = FALSE),
new /datum/stack_recipe("brass floor light fixture frame", /obj/item/mounted/frame/light_fixture/clockwork/floor, 3, time = 0 SECONDS, one_per_turf = FALSE, on_floor = FALSE),
diff --git a/code/game/objects/structures/door_assembly_types.dm b/code/game/objects/structures/door_assembly_types.dm
index a74b9d2cd95..8d5035018f0 100644
--- a/code/game/objects/structures/door_assembly_types.dm
+++ b/code/game/objects/structures/door_assembly_types.dm
@@ -186,6 +186,12 @@
overlays_file = GET_CULT_DATA(airlock_unruned_overlays_file, initial(overlays_file))
update_icon()
+/obj/structure/door_assembly/door_assembly_clockwork
+ icon = 'icons/obj/doors/airlocks/clockwork/clockwork.dmi'
+ overlays_file = 'icons/obj/doors/airlocks/clockwork/clockwork-overlays.dmi'
+ airlock_type = /obj/machinery/door/airlock/clockwork
+ glass_type = /obj/machinery/door/airlock/clockwork/glass
+
/obj/structure/door_assembly/door_assembly_centcom
icon = 'icons/obj/doors/airlocks/centcom/centcom.dmi'
overlays_file = 'icons/obj/doors/airlocks/centcom/overlays.dmi'
diff --git a/code/game/objects/structures/shelves.dm b/code/game/objects/structures/shelves.dm
index f6585a6720c..c0175375fe8 100644
--- a/code/game/objects/structures/shelves.dm
+++ b/code/game/objects/structures/shelves.dm
@@ -14,6 +14,7 @@ GLOBAL_LIST_INIT(shelf_colors, list("basic", "sci", "sup", "serv", "med", "sec",
var/shelf_style = "basic"
/// The current overlay of the top shelf. Used for interleaving objects and shelf layers for the illusion of depth.
var/image/shelf_overlay
+ var/build_stack_type = /obj/item/stack/sheet/metal
COOLDOWN_DECLARE(spraypaint_cd)
/obj/structure/shelf/Initialize(mapload)
@@ -30,9 +31,14 @@ GLOBAL_LIST_INIT(shelf_colors, list("basic", "sci", "sup", "serv", "med", "sec",
var/obj/item/toy/crayon/spraycan/spraycan = I
if(!istype(spraycan))
return ..()
+
if(spraycan.capped)
return ..()
+ // Spraypaint cannot turn brass into steel.
+ if(shelf_style == "clockwork")
+ return ..()
+
if(!COOLDOWN_FINISHED(src, spraypaint_cd))
to_chat(user, "The paint on [src] is still drying!")
return
@@ -74,7 +80,7 @@ GLOBAL_LIST_INIT(shelf_colors, list("basic", "sci", "sup", "serv", "med", "sec",
deconstruct()
/obj/structure/shelf/deconstruct(disassembled)
- new /obj/item/stack/sheet/metal(get_turf(src), 5)
+ new build_stack_type(get_turf(src), 5)
return ..()
/obj/structure/shelf/engineering
@@ -105,6 +111,12 @@ GLOBAL_LIST_INIT(shelf_colors, list("basic", "sci", "sup", "serv", "med", "sec",
icon_state = "shelf_sup"
shelf_style = "sup"
+/obj/structure/shelf/clockwork
+ name = "brass shelf"
+ icon_state = "shelf_clockwork"
+ shelf_style = "clockwork"
+ build_stack_type = /obj/item/stack/tile/brass
+
/obj/structure/gunrack
name = "gun rack"
desc = "A rack for stowing firearms."
@@ -115,6 +127,7 @@ GLOBAL_LIST_INIT(shelf_colors, list("basic", "sci", "sup", "serv", "med", "sec",
anchored = TRUE
pass_flags_self = PASSTAKE
max_integrity = 80
+ var/build_stack_type = /obj/item/stack/sheet/metal
/obj/structure/gunrack/Initialize(mapload)
. = ..()
@@ -135,5 +148,10 @@ GLOBAL_LIST_INIT(shelf_colors, list("basic", "sci", "sup", "serv", "med", "sec",
deconstruct()
/obj/structure/gunrack/deconstruct(disassembled)
- new /obj/item/stack/sheet/metal(get_turf(src), 5)
+ new build_stack_type(get_turf(src), 5)
return ..()
+
+/obj/structure/gunrack/clockwork
+ name = "brass weapon rack"
+ icon_state = "gunrack_clockwork"
+ build_stack_type = /obj/item/stack/tile/brass
diff --git a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm
index 68acdf87b61..b84616c0d91 100644
--- a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm
+++ b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm
@@ -373,6 +373,19 @@
/obj/structure/chair/sofa/pew/right
icon_state = "pewend_right"
+/obj/structure/chair/sofa/pew/clockwork
+ name = "brass pew"
+ desc = "An ornate pew fashioned from brass. It is even less comfortable than a regular pew, but it does radiate a pleasent warmth."
+ icon_state = "clockwork_pew_middle"
+ buildstacktype = /obj/item/stack/tile/brass
+ buildstackamount = 5
+
+/obj/structure/chair/sofa/pew/clockwork/left
+ icon_state = "clockwork_pew_left"
+
+/obj/structure/chair/sofa/pew/clockwork/right
+ icon_state = "clockwork_pew_right"
+
/obj/structure/chair/sofa/bench
name = "bench"
desc = "You sit in this. Either by will or force."
diff --git a/icons/obj/chairs.dmi b/icons/obj/chairs.dmi
index 969f2e3e7de..7b2a970ac0d 100644
Binary files a/icons/obj/chairs.dmi and b/icons/obj/chairs.dmi differ
diff --git a/icons/obj/cryogenic2.dmi b/icons/obj/cryogenic2.dmi
index d92b54b5dbd..c5093f23540 100644
Binary files a/icons/obj/cryogenic2.dmi and b/icons/obj/cryogenic2.dmi differ
diff --git a/icons/obj/doors/airlocks/clockwork/clockwork-overlays.dmi b/icons/obj/doors/airlocks/clockwork/clockwork-overlays.dmi
new file mode 100644
index 00000000000..161f78b5b1a
Binary files /dev/null and b/icons/obj/doors/airlocks/clockwork/clockwork-overlays.dmi differ
diff --git a/icons/obj/doors/airlocks/clockwork/clockwork.dmi b/icons/obj/doors/airlocks/clockwork/clockwork.dmi
new file mode 100644
index 00000000000..61cb9ae2746
Binary files /dev/null and b/icons/obj/doors/airlocks/clockwork/clockwork.dmi differ
diff --git a/icons/obj/structures.dmi b/icons/obj/structures.dmi
index 8a21b505ce4..91da581928f 100644
Binary files a/icons/obj/structures.dmi and b/icons/obj/structures.dmi differ
diff --git a/icons/obj/structures/shelves.dmi b/icons/obj/structures/shelves.dmi
index fd3991998c4..3c4ddc332f9 100644
Binary files a/icons/obj/structures/shelves.dmi and b/icons/obj/structures/shelves.dmi differ