diff --git a/code/datums/wires/taperecorder.dm b/code/datums/wires/taperecorder.dm new file mode 100644 index 00000000000..691d21fba59 --- /dev/null +++ b/code/datums/wires/taperecorder.dm @@ -0,0 +1,33 @@ +/datum/wires/taperecorder + wire_count = 2 + holder_type = /obj/item/device/taperecorder + +var/const/WIRE_PLAY = 1 +var/const/WIRE_RECORD = 2 + + +/datum/wires/taperecorder/UpdatePulsed(var/index) + switch(index) + if(WIRE_PLAY) + play() + if(WIRE_RECORD) + record() + +/datum/wires/taperecorder/CanUse(var/mob/living/L) + var/obj/item/device/taperecorder/T = holder + if(T.open_panel) + return 1 + return 0 + + +/datum/wires/taperecorder/proc/play() + var/obj/item/device/taperecorder/T = holder + T.stop() + T.play() + +/datum/wires/taperecorder/proc/record() + var/obj/item/device/taperecorder/T = holder + if(T.recording) + T.stop() + else + T.record() \ No newline at end of file diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm index fcee2eda98e..a98d0ba9c0b 100644 --- a/code/game/machinery/autolathe.dm +++ b/code/game/machinery/autolathe.dm @@ -34,7 +34,8 @@ var/global/list/autolathe_recipes = list( \ new /obj/item/ammo_casing/shotgun/blank(), \ new /obj/item/ammo_casing/shotgun/beanbag(), \ new /obj/item/ammo_magazine/c38(), \ - new /obj/item/device/taperecorder(), \ + new /obj/item/device/taperecorder/empty(), \ + new /obj/item/device/tape(), \ new /obj/item/device/assembly/igniter(), \ new /obj/item/device/assembly/signaler(), \ new /obj/item/device/radio/headset(), \ @@ -59,7 +60,7 @@ var/global/list/autolathe_recipes_hidden = list( \ ) /obj/machinery/autolathe - name = "\improper Autolathe" + name = "autolathe" desc = "It produces items using metal and glass." icon_state = "autolathe" density = 1 diff --git a/code/game/objects/items/devices/taperecorder.dm b/code/game/objects/items/devices/taperecorder.dm index 3ffa9dcec82..ff6e028831d 100644 --- a/code/game/objects/items/devices/taperecorder.dm +++ b/code/game/objects/items/devices/taperecorder.dm @@ -1,18 +1,32 @@ /obj/item/device/taperecorder name = "universal recorder" - desc = "A device that can record up to an hour of dialogue and play it back. It automatically translates the content in playback." + desc = "A device that can record to cassette tapes, and play them. It automatically translates the content in playback." icon_state = "taperecorder_empty" item_state = "analyzer" w_class = 2 m_amt = 60 g_amt = 30 - flags = FPRINT | TABLEPASS| CONDUCT + flags = FPRINT | TABLEPASS | CONDUCT force = 2 throwforce = 2 var/recording = 0 var/playing = 0 var/playsleepseconds = 0 var/obj/item/device/tape/mytape + var/open_panel = 0 + var/datum/wires/taperecorder/wires = null + + +/obj/item/device/taperecorder/New() + wires = new(src) + mytape = new /obj/item/device/tape/random(src) + update_icon() + + +/obj/item/device/taperecorder/examine() + set src in view(1) + ..() + usr << "The wire panel is [open_panel ? "opened" : "closed"]." /obj/item/device/taperecorder/attackby(obj/item/I, mob/user) @@ -22,6 +36,13 @@ mytape = I user << "You insert [I] into [src]." update_icon() + else if(istype(I, /obj/item/weapon/screwdriver)) + open_panel = !open_panel + user << "You [open_panel ? "open" : "close"] the wire panel." + if(open_panel) + wires.Interact(user) + else if(istype(I, /obj/item/weapon/wirecutters) || istype(I, /obj/item/device/multitool) || istype(I, /obj/item/device/assembly/signaler)) + wires.Interact(user) /obj/item/device/taperecorder/proc/eject(mob/user) @@ -53,7 +74,7 @@ if(!mytape) return - eject() + eject(usr) /obj/item/device/taperecorder/update_icon() @@ -193,6 +214,12 @@ record() +//empty tape recorders +/obj/item/device/taperecorder/empty/New() + wires = new(src) + return + + /obj/item/device/tape name = "tape" desc = "A magnetic tape that can hold up to ten minutes of content." @@ -201,7 +228,7 @@ w_class = 1 m_amt = 20 g_amt = 5 - flags = FPRINT | TABLEPASS| CONDUCT + flags = FPRINT | TABLEPASS | CONDUCT force = 1 throwforce = 1 var/max_capacity = 600 @@ -228,7 +255,7 @@ /obj/item/device/tape/attackby(obj/item/I, mob/user) - if(istype(I, /obj/item/weapon/screwdriver)) + if(ruined && istype(I, /obj/item/weapon/screwdriver)) user << "You start winding the tape back in." if(do_after(user, 120)) user << "You wound the tape back in!" diff --git a/icons/obj/device.dmi b/icons/obj/device.dmi index 453bb7cede4..1d1842b7a7c 100644 Binary files a/icons/obj/device.dmi and b/icons/obj/device.dmi differ diff --git a/tgstation.dme b/tgstation.dme index 81c37730a99..e1121945d54 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -158,6 +158,7 @@ #include "code\datums\wires\particle_accelerator.dm" #include "code\datums\wires\radio.dm" #include "code\datums\wires\robot.dm" +#include "code\datums\wires\taperecorder.dm" #include "code\datums\wires\vending.dm" #include "code\datums\wires\wires.dm" #include "code\defines\obj.dm"