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