diff --git a/code/game/objects/items/devices/taperecorder.dm b/code/game/objects/items/devices/taperecorder.dm
index ad36b6493e1..1c4be77e304 100644
--- a/code/game/objects/items/devices/taperecorder.dm
+++ b/code/game/objects/items/devices/taperecorder.dm
@@ -3,82 +3,82 @@
desc = "A device that can record up to an hour of dialogue and play it back. It automatically translates the content in playback."
icon_state = "taperecorderidle"
item_state = "analyzer"
- w_class = 2.0
+ w_class = ITEMSIZE_SMALL
matter = list(DEFAULT_WALL_MATERIAL = 60, MATERIAL_GLASS = 30)
- var/emagged = 0.0
- var/recording = 0.0
- var/playing = 0.0
- var/timerecorded = 0.0
- var/playsleepseconds = 0.0
- var/list/storedinfo = new/list()
- var/list/timestamp = new/list()
- var/canprint = 1
+ var/emagged = FALSE
+ var/recording = FALSE
+ var/playing = FALSE
+ var/time_recorded = 0
+ var/play_sleep_seconds = 0
+ var/list/stored_info = list() // TOOK OUT NEW THING
+ var/list/timestamp = list()
+ var/can_print = TRUE
+ var/obj/item/computer_hardware/hard_drive/portable/portable_drive
flags = CONDUCT
throwforce = 2
throw_speed = 4
throw_range = 20
-/obj/item/device/taperecorder/New()
- ..()
+/obj/item/device/taperecorder/Initialize()
+ . = ..()
listening_objects += src
+ portable_drive = new /obj/item/computer_hardware/hard_drive/portable(src)
/obj/item/device/taperecorder/Destroy()
listening_objects -= src
return ..()
-/obj/item/device/taperecorder/hear_talk(mob/living/M as mob, msg, var/verb="says", datum/language/speaking=null)
+/obj/item/device/taperecorder/hear_talk(mob/living/M, msg, var/verb = "says", datum/language/speaking = null)
if(isanimal(M))
if(!M.universal_speak)
return
if(recording)
- timestamp += timerecorded
+ timestamp += time_recorded
if(speaking)
if(!speaking.machine_understands)
msg = speaking.scramble(msg)
- storedinfo += "\[[time2text(timerecorded*10,"mm:ss")]\] [M.name] [speaking.format_message_plain(msg, verb)]"
+ stored_info += "\[[time2text(time_recorded*10,"mm:ss")]\] [M.name] [speaking.format_message_plain(msg, verb)]"
else
- storedinfo += "\[[time2text(timerecorded*10,"mm:ss")]\] [M.name] [verb], \"[msg]\""
+ stored_info += "\[[time2text(time_recorded*10,"mm:ss")]\] [M.name] [verb], \"[msg]\""
-/obj/item/device/taperecorder/see_emote(mob/M as mob, text, var/emote_type)
+/obj/item/device/taperecorder/see_emote(mob/M, text, var/emote_type)
if(emote_type != 2) //only hearable emotes
return
if(recording)
- timestamp += timerecorded
- storedinfo += "\[[time2text(timerecorded*10,"mm:ss")]\] [strip_html_properly(text)]"
+ timestamp += time_recorded
+ stored_info += "\[[time2text(time_recorded*10,"mm:ss")]\] [strip_html_properly(text)]"
/obj/item/device/taperecorder/show_message(msg, type, alt, alt_type)
var/recordedtext
- if (msg && type == 2) //must be hearable
+ if(msg && type == 2) //must be hearable
recordedtext = msg
- else if (alt && alt_type == 2)
+ else if(alt && alt_type == 2)
recordedtext = alt
else
return
if(recording)
- timestamp += timerecorded
- storedinfo += "*\[[time2text(timerecorded*10,"mm:ss")]\] *[strip_html_properly(recordedtext)]*" //"*" at front as a marker
+ timestamp += time_recorded
+ stored_info += "*\[[time2text(time_recorded*10,"mm:ss")]\] *[strip_html_properly(recordedtext)]*" //"*" at front as a marker
-/obj/item/device/taperecorder/emag_act(var/remaining_charges, var/mob/user)
- if(emagged == 0)
- emagged = 1
- recording = 0
- to_chat(user, "PZZTTPFFFT")
- icon_state = "taperecorderidle"
- return 1
- else
- to_chat(user, "It is already emagged!")
+/obj/item/device/taperecorder/emag_act(var/remaining_charges, mob/user)
+ if(emagged)
+ to_chat(user, SPAN_WARNING("It is already emagged!"))
+ return FALSE
+ emagged = TRUE
+ recording = FALSE
+ to_chat(user, SPAN_NOTICE("PZZTTPFFFT"))
+ icon_state = "taperecorderidle"
+ return TRUE
/obj/item/device/taperecorder/proc/explode()
var/turf/T = get_turf(loc)
- if(ismob(loc))
- var/mob/M = loc
- to_chat(M, "\The [src] explodes!")
+ visible_message(SPAN_DANGER("\The [src] explodes!"))
if(T)
- T.hotspot_expose(700,125)
+ T.hotspot_expose(700, 125)
explosion(T, -1, -1, 0, 4)
qdel(src)
return
@@ -87,207 +87,231 @@
set name = "Start Recording"
set category = "Object"
- if(usr.stat)
+ if(use_check_and_message(usr))
return
- if(emagged == 1)
- to_chat(usr, "The tape recorder makes a scratchy noise.")
+ if(emagged)
+ to_chat(usr, SPAN_WARNING("The tape recorder makes a scratchy noise."))
return
icon_state = "taperecorderrecording"
- if(timerecorded < 3600 && playing == 0)
- to_chat(usr, "Recording started.")
- recording = 1
- timestamp+= timerecorded
- storedinfo += "\[[time2text(timerecorded*10,"mm:ss")]\] Recording started."
- for(timerecorded, timerecorded<3600)
- if(recording == 0)
+ if(time_recorded < 3600 && !playing)
+ to_chat(usr, SPAN_NOTICE("Recording started."))
+ recording = TRUE
+ timestamp += time_recorded
+ stored_info += "\[[time2text(time_recorded*10,"mm:ss")]\] Recording started."
+ for(time_recorded, time_recorded < 3600)
+ if(!recording)
break
- timerecorded++
+ time_recorded++
sleep(10)
- recording = 0
+ recording = FALSE
icon_state = "taperecorderidle"
return
else
- to_chat(usr, "Either your tape recorder's memory is full, or it is currently playing back its memory.")
-
+ to_chat(usr, SPAN_NOTICE("Either your tape recorder's memory is full, or it is currently playing back its memory."))
/obj/item/device/taperecorder/verb/stop()
- set name = "Stop"
+ set name = "Stop Recording"
set category = "Object"
- if(usr.stat)
+ if(use_check_and_message(usr))
return
- if(emagged == 1)
- to_chat(usr, "The tape recorder makes a scratchy noise.")
- return
- if(recording == 1)
- recording = 0
- timestamp+= timerecorded
- storedinfo += "\[[time2text(timerecorded*10,"mm:ss")]\] Recording stopped."
- to_chat(usr, "Recording stopped.")
- icon_state = "taperecorderidle"
- return
- else if(playing == 1)
- playing = 0
- var/turf/T = get_turf(src)
- T.audible_message("Tape Recorder: Playback stopped.")
- icon_state = "taperecorderidle"
+ if(emagged)
+ to_chat(usr, SPAN_WARNING("The tape recorder makes a scratchy noise."))
return
+ if(recording)
+ recording = FALSE
+ timestamp += time_recorded
+ stored_info += "\[[time2text(time_recorded*10,"mm:ss")]\] Recording stopped."
+ to_chat(usr, SPAN_NOTICE("Recording stopped."))
+ icon_state = "taperecorderidle"
+ return
+ else if(playing)
+ playing = FALSE
+ audible_message("Tape Recorder: Playback stopped.", hearing_distance = 3)
+ icon_state = "taperecorderidle"
+ return
/obj/item/device/taperecorder/verb/clear_memory()
set name = "Clear Memory"
set category = "Object"
- if(usr.stat)
+ if(use_check_and_message(usr))
return
- if(emagged == 1)
- to_chat(usr, "The tape recorder makes a scratchy noise.")
+ if(emagged)
+ to_chat(usr, SPAN_WARNING("The tape recorder makes a scratchy noise."))
return
- if(recording == 1 || playing == 1)
- to_chat(usr, "You can't clear the memory while playing or recording!")
+ if(recording || playing)
+ to_chat(usr, SPAN_WARNING("You can't clear the memory while playing or recording!"))
return
else
- if(storedinfo) storedinfo.Cut()
- if(timestamp) timestamp.Cut()
- timerecorded = 0
- to_chat(usr, "Memory cleared.")
+ if(stored_info)
+ stored_info.Cut()
+ if(timestamp)
+ timestamp.Cut()
+ time_recorded = 0
+ to_chat(usr, SPAN_NOTICE("Memory cleared."))
return
-
/obj/item/device/taperecorder/verb/playback_memory()
set name = "Playback Memory"
set category = "Object"
- if(usr.stat)
+ if(use_check_and_message(usr))
return
- if(emagged == 1)
- to_chat(usr, "The tape recorder makes a scratchy noise.")
+ if(emagged)
+ to_chat(usr, SPAN_WARNING("The tape recorder makes a scratchy noise."))
return
- if(recording == 1)
- to_chat(usr, "You can't playback when recording!")
+ if(recording)
+ to_chat(usr, SPAN_WARNING("You can't playback when recording!"))
return
- if(playing == 1)
- to_chat(usr, "You're already playing!")
+ if(playing)
+ to_chat(usr, SPAN_WARNING("You're already playing!"))
return
- playing = 1
+ playing = TRUE
icon_state = "taperecorderplaying"
- to_chat(usr, "Playing started.")
- for(var/i=1,timerecorded<3600,sleep(10 * (playsleepseconds) ))
- if(playing == 0)
+ to_chat(usr, SPAN_NOTICE("Playing started."))
+ for(var/i = 1, time_recorded < 3600, sleep(10 * play_sleep_seconds))
+ if(!playing)
break
- if(storedinfo.len < i)
+ if(stored_info.len < i)
break
- var/turf/T = get_turf(src)
- var/playedmessage = storedinfo[i]
- if (findtextEx(playedmessage,"*",1,2)) //remove marker for action sounds
- playedmessage = copytext(playedmessage,2)
- T.audible_message("Tape Recorder: [playedmessage]")
- if(storedinfo.len < i+1)
- playsleepseconds = 1
+ var/playedmessage = stored_info[i]
+ if(findtextEx(playedmessage, "*" , 1, 2)) //remove marker for action sounds
+ playedmessage = copytext(playedmessage, 2)
+ audible_message("Tape Recorder: [playedmessage]", hearing_distance = 3)
+ if(stored_info.len < i + 1)
+ play_sleep_seconds = 1
sleep(10)
- T = get_turf(src)
- T.audible_message("Tape Recorder: End of recording.")
+ audible_message("Tape Recorder: End of recording.", hearing_distance = 3)
else
- playsleepseconds = timestamp[i+1] - timestamp[i]
- if(playsleepseconds > 14)
+ play_sleep_seconds = timestamp[i + 1] - timestamp[i]
+ if(play_sleep_seconds > 14)
sleep(10)
- T = get_turf(src)
- T.audible_message("Tape Recorder: Skipping [playsleepseconds] seconds of silence")
- playsleepseconds = 1
+ audible_message("Tape Recorder: Skipping [play_sleep_seconds] seconds of silence.", hearing_distance = 3)
+ play_sleep_seconds = 1
i++
icon_state = "taperecorderidle"
- playing = 0
- if(emagged == 1.0)
- var/turf/T = get_turf(src)
- T.audible_message("Tape Recorder: This tape recorder will self-destruct in... Five.")
+ playing = FALSE
+ if(emagged)
+ audible_message("Tape Recorder: This tape recorder will self-destruct in... Five.", hearing_distance = 3)
sleep(10)
- T = get_turf(src)
- T.audible_message("Tape Recorder: Four.")
+ audible_message("Tape Recorder: Four.", hearing_distance = 3)
sleep(10)
- T = get_turf(src)
- T.audible_message("Tape Recorder: Three.")
+ audible_message("Tape Recorder: Three.", hearing_distance = 3)
sleep(10)
- T = get_turf(src)
- T.audible_message("Tape Recorder: Two.")
+ audible_message("Tape Recorder: Two.", hearing_distance = 3)
sleep(10)
- T = get_turf(src)
- T.audible_message("Tape Recorder: One.")
+ audible_message("Tape Recorder: One.", hearing_distance = 3)
sleep(10)
explode()
-
/obj/item/device/taperecorder/verb/print_transcript()
set name = "Print Transcript"
set category = "Object"
- if(usr.stat)
+ if(use_check_and_message(usr))
return
- if(emagged == 1)
- to_chat(usr, "The tape recorder makes a scratchy noise.")
+ if(emagged)
+ to_chat(usr, SPAN_WARNING("The tape recorder makes a scratchy noise."))
return
- if(!canprint)
- to_chat(usr, "The recorder can't print that fast!")
+ if(!can_print)
+ to_chat(usr, SPAN_WARNING("The recorder can't print that fast!"))
return
- if(recording == 1 || playing == 1)
- to_chat(usr, "You can't print the transcript while playing or recording!")
+ if(recording || playing)
+ to_chat(usr, SPAN_WARNING("You can't print the transcript while playing or recording!"))
return
- to_chat(usr, "Transcript printed.")
+ to_chat(usr, SPAN_NOTICE("Transcript printed."))
var/obj/item/paper/P = new /obj/item/paper(get_turf(src))
var/t1 = "Transcript:
"
- for(var/i=1,storedinfo.len >= i,i++)
- var/printedmessage = storedinfo[i]
- if (findtextEx(printedmessage,"*",1,2)) //replace action sounds
- printedmessage = "\[[time2text(timestamp[i]*10,"mm:ss")]\] (Unrecognized sound)"
- t1 += "[printedmessage]
"
+ for(var/i = 1, stored_info.len >= i, i++)
+ var/printed_message = stored_info[i]
+ if(findtextEx(printed_message,"*", 1, 2))
+ printed_message = "\[[time2text(timestamp[i]*10,"mm:ss")]\] (Unrecognized sound)"
+ t1 += "[printed_message]
"
P.info = t1
P.name = "Transcript"
usr.put_in_hands(P)
- canprint = 0
- sleep(300)
- canprint = 1
+ can_print = FALSE
+ addtimer(CALLBACK(src, .proc/toggle_can_print), 300)
+ can_print = TRUE
+/obj/item/device/taperecorder/proc/toggle_can_print()
+ can_print = !can_print
+
+/obj/item/device/taperecorder/verb/eject_usb()
+ set name = "Eject Portable Storage"
+ set category = "Object"
+
+ if(use_check_and_message(usr))
+ return
+ if(!portable_drive)
+ to_chat(usr, SPAN_WARNING("There is no portable drive connected to \the [src]."))
+ return
+
+ var/datum/computer_file/data/F = new /datum/computer_file/data(portable_drive)
+ F.filename = "[capitalize_first_letters(src.name)] Digital Transcript ([worldtime2text()] - [time2text(world.time, "Month DD")])"
+ F.filetype = "TXT"
+
+ var/file_data = "Transcript:
"
+ for(var/i = 1, stored_info.len >= i, i++)
+ var/printed_message = stored_info[i]
+ if(findtextEx(printed_message,"*", 1, 2))
+ printed_message = "\[[time2text(timestamp[i]*10,"mm:ss")]\] (Unrecognized sound)"
+ file_data += "[printed_message]
"
+
+ F.stored_data = file_data
+ portable_drive.store_file(F)
+
+ to_chat(usr, SPAN_NOTICE("You eject the portable drive."))
+ usr.put_in_hands(portable_drive)
+ portable_drive = null
/obj/item/device/taperecorder/attack_self(mob/user)
- if(recording == 0 && playing == 0)
- if(usr.stat)
+ if(!recording && !playing)
+ if(use_check_and_message(usr))
return
- if(emagged == 1)
- to_chat(usr, "The tape recorder makes a scratchy noise.")
+ if(emagged)
+ to_chat(usr, SPAN_WARNING("The tape recorder makes a scratchy noise."))
return
icon_state = "taperecorderrecording"
- if(timerecorded < 3600 && playing == 0)
- to_chat(usr, "Recording started.")
- recording = 1
- timestamp+= timerecorded
- storedinfo += "\[[time2text(timerecorded*10,"mm:ss")]\] Recording started."
- for(timerecorded, timerecorded<3600)
- if(recording == 0)
+ if(time_recorded < 3600 && !playing)
+ to_chat(usr, SPAN_NOTICE("Recording started."))
+ recording = TRUE
+ timestamp += time_recorded
+ stored_info += "\[[time2text(time_recorded*10,"mm:ss")]\] Recording started."
+ for(time_recorded, time_recorded < 3600)
+ if(!recording)
break
- timerecorded++
+ time_recorded++
sleep(10)
- recording = 0
+ recording = FALSE
icon_state = "taperecorderidle"
return
else
- to_chat(usr, "Either your tape recorder's memory is full, or it is currently playing back its memory.")
+ to_chat(usr, SPAN_WARNING("Either your tape recorder's memory is full, or it is currently playing back its memory."))
else
- if(usr.stat)
- to_chat(usr, "Not when you're incapacitated.")
+ if(use_check_and_message(usr))
return
- if(recording == 1)
- recording = 0
- timestamp+= timerecorded
- storedinfo += "\[[time2text(timerecorded*10,"mm:ss")]\] Recording stopped."
- to_chat(usr, "Recording stopped.")
+ if(recording)
+ recording = FALSE
+ timestamp += time_recorded
+ stored_info += "\[[time2text(time_recorded*10,"mm:ss")]\] Recording stopped."
+ to_chat(usr, SPAN_NOTICE("Recording stopped."))
icon_state = "taperecorderidle"
return
- else if(playing == 1)
- playing = 0
- var/turf/T = get_turf(src)
- for(var/mob/O in hearers(world.view-1, T))
- O.show_message("Tape Recorder: Playback stopped.",2)
+ else if(playing)
+ playing = FALSE
+ audible_message("Tape Recorder: Playback stopped.", hearing_distance = 3)
icon_state = "taperecorderidle"
return
- else
- to_chat(usr, "Stop what?")
+
+/obj/item/device/taperecorder/attackby(obj/item/W, mob/user)
+ if(istype(W, /obj/item/computer_hardware/hard_drive/portable))
+ if(portable_drive)
+ to_chat(user, SPAN_WARNING("\The [src] already has a portable drive!"))
return
+ user.drop_from_inventory(W, src)
+ portable_drive = W
+ else
+ ..()
\ No newline at end of file
diff --git a/code/modules/cciaa/cciaa_items.dm b/code/modules/cciaa/cciaa_items.dm
index d4586e28675..3e29e8983ae 100644
--- a/code/modules/cciaa/cciaa_items.dm
+++ b/code/modules/cciaa/cciaa_items.dm
@@ -6,18 +6,18 @@
//CCIAA's tape recorder
/obj/item/device/taperecorder/cciaa
- w_class = 1.0
- recording = 0
+ w_class = ITEMSIZE_TINY
timestamp = list() //This actually turns timestamp into a string later on
//Redundent
matter = list()
- playing = 0
- emagged = 0
- timerecorded = 0
- playsleepseconds = 0
- storedinfo = list()
- canprint = 1
+ recording = FALSE
+ playing = FALSE
+ emagged = FALSE
+ time_recorded = FALSE
+ play_sleep_seconds = FALSE
+ stored_info = list()
+ can_print = TRUE
//Specific for Duty Officers
var/paused = FALSE
@@ -118,7 +118,7 @@
return
/obj/item/device/taperecorder/cciaa/stop()
- set name = "Stop"
+ set name = "Stop Recording"
set category = "Recorder"
if(use_check_and_message(usr))
diff --git a/html/changelogs/geeves-recorder_drive.yml b/html/changelogs/geeves-recorder_drive.yml
new file mode 100644
index 00000000000..1a50b9446eb
--- /dev/null
+++ b/html/changelogs/geeves-recorder_drive.yml
@@ -0,0 +1,7 @@
+author: Geeves
+
+delete-after: True
+
+changes:
+ - rscadd: "Tape recorders now come with a portable drive, that when ejected, saves the stored transcript in a digital form."
+ - tweak: "Tape recorders now only audibly play back in a 3 tile radius, no more room spam."
\ No newline at end of file