diff --git a/code/game/objects/items/devices/pressureplates.dm b/code/game/objects/items/devices/pressureplates.dm
new file mode 100644
index 00000000000..8c0ecb0fe72
--- /dev/null
+++ b/code/game/objects/items/devices/pressureplates.dm
@@ -0,0 +1,99 @@
+
+/obj/item/device/pressure_plate
+ name = "pressure plate"
+ desc = "Useful for autismforts"
+ item_state = "flash"
+ icon_state = "pressureplate"
+ level = 1
+ var/trigger_mob = TRUE
+ var/trigger_item = FALSE
+ var/trigger_silent = FALSE
+ var/sound/trigger_sound = 'sound/effects/pressureplate.ogg'
+ var/obj/item/device/assembly/signaler/sigdev = null
+ var/roundstart_signaller = FALSE
+ var/roundstart_signaller_freq = 1447
+ var/roundstart_signaller_code = 30
+ var/roundstart_hide = FALSE
+ var/removable_signaller = TRUE
+ var/active = FALSE
+ var/image/tile_overlay = null
+ var/crossed = FALSE
+ var/trigger_delay = 10
+
+/obj/item/device/pressure_plate/Initialize()
+ ..()
+ tile_overlay = image(icon = 'icons/turf/floors.dmi', icon_state = "pp_overlay")
+ if(roundstart_signaller)
+ sigdev = new
+ sigdev.code = roundstart_signaller_code
+ sigdev.frequency = roundstart_signaller_freq
+ if(istype(loc, /turf/open))
+ hide(TRUE)
+
+/obj/item/device/pressure_plate/Crossed(atom/movable/AM)
+ if(!active)
+ return
+ if(isliving(AM) && trigger_mob)
+ var/mob/living/L = AM
+ step_living(L)
+ crossed = TRUE
+ else if(trigger_item)
+ step_item(AM)
+ crossed = TRUE
+ if(!trigger_silent)
+ if(isturf(loc))
+ loc.visible_message("Click!")
+ playsound(loc, trigger_sound, 50, 1)
+ . = ..()
+
+/obj/item/device/pressure_plate/Uncrossed(atom/movable/AM)
+ if(crossed)
+ playsound(loc, trigger_sound, 50, 1)
+ if(isliving(AM))
+ var/mob/living/L = AM
+ L << "You feel something click back into place as you step off [loc]!"
+ addtimer(CALLBACK(src, .proc/trigger), trigger_delay)
+ . = ..()
+
+/obj/item/device/pressure_plate/proc/trigger()
+ if(istype(sigdev))
+ sigdev.signal()
+
+/obj/item/device/pressure_plate/proc/step_living(mob/living/L)
+ L << "You feel a click under your feet!"
+
+/obj/item/device/pressure_plate/proc/step_item(atom/movable/AM)
+ return
+
+/obj/item/device/pressure_plate/attackby(obj/item/I, mob/living/L)
+ if(istype(I, /obj/item/device/assembly/signaler) && !istype(sigdev) && removable_signaller && L.transferItemToLoc(I, src))
+ sigdev = I
+ L << "You attach [I] to [src]!"
+ . = ..()
+
+/obj/item/device/pressure_plate/attack_self(mob/living/L)
+ if(removable_signaller && istype(sigdev))
+ L << "You remove [sigdev] from [src]"
+ if(!L.put_in_hands(sigdev))
+ sigdev.forceMove(get_turf(src))
+ sigdev = null
+ . = ..()
+
+/obj/item/device/pressure_plate/hide(yes)
+ if(yes)
+ invisibility = INVISIBILITY_MAXIMUM
+ anchored = TRUE
+ icon_state = null
+ active = TRUE
+ if(tile_overlay)
+ loc.overlays += tile_overlay
+ else
+ if(crossed)
+ trigger() //no cheesing.
+ invisibility = initial(invisibility)
+ anchored = FALSE
+ icon_state = initial(icon_state)
+ active = FALSE
+ if(tile_overlay)
+ loc.overlays -= tile_overlay
+
diff --git a/code/modules/crafting/recipes.dm b/code/modules/crafting/recipes.dm
index 671105f5c5e..bdabcc3b7ac 100644
--- a/code/modules/crafting/recipes.dm
+++ b/code/modules/crafting/recipes.dm
@@ -444,3 +444,10 @@
time = 10
reqs = list(/obj/item/stack/sheet/cardboard = 1)
category = CAT_MISC
+
+/datum/crafting_recipe/pressureplate
+ name = "Pressure Plate"
+ result = /obj/item/device/pressure_plate
+ time = 5
+ reqs = list(/obj/item/stack/sheet/plasteel = 1, /obj/item/stack/tile = 1, /obj/item/stack/cable_coil = 2)
+ category = CAT_MISC
diff --git a/icons/obj/device.dmi b/icons/obj/device.dmi
index 90fcacacb61..4432e972a2f 100644
Binary files a/icons/obj/device.dmi and b/icons/obj/device.dmi differ
diff --git a/icons/turf/floors.dmi b/icons/turf/floors.dmi
index ea4c5d5ba74..c35e2d1b644 100644
Binary files a/icons/turf/floors.dmi and b/icons/turf/floors.dmi differ
diff --git a/sound/effects/pressureplate.ogg b/sound/effects/pressureplate.ogg
new file mode 100644
index 00000000000..aff7d198b5a
Binary files /dev/null and b/sound/effects/pressureplate.ogg differ
diff --git a/tgstation.dme b/tgstation.dme
index 056f2cb2bf1..098c179931f 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -701,6 +701,7 @@
#include "code\game\objects\items\devices\paicard.dm"
#include "code\game\objects\items\devices\pipe_painter.dm"
#include "code\game\objects\items\devices\powersink.dm"
+#include "code\game\objects\items\devices\pressureplates.dm"
#include "code\game\objects\items\devices\scanners.dm"
#include "code\game\objects\items\devices\sensor_device.dm"
#include "code\game\objects\items\devices\taperecorder.dm"