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"