diff --git a/code/game/objects/items/devices/taperecorder.dm b/code/game/objects/items/devices/taperecorder.dm
index 15f71520fac..97280d6c2c8 100644
--- a/code/game/objects/items/devices/taperecorder.dm
+++ b/code/game/objects/items/devices/taperecorder.dm
@@ -283,9 +283,8 @@
set name = "Print Transcript"
set category = "Object"
- if(!mytape.storedinfo.len)
- return
- if(!can_use(usr))
+ var/list/transcribed_info = mytape.storedinfo
+ if(!length(transcribed_info))
return
if(!mytape)
return
@@ -294,23 +293,49 @@
return
if(recording || playing)
return
+ if(!can_use(usr))
+ return
+
+ var/transcribed_text = "Transcript:
"
+ var/page_count = 1
+
+ var/tape_name = mytape.name
+ var/initial_tape_name = initial(mytape.name)
+ var/paper_name = "paper- '[tape_name == initial_tape_name ? "Tape" : "[tape_name]"] Transcript'"
+
+ for(var/transcript_excerpt in transcribed_info)
+ var/excerpt_length = length(transcript_excerpt)
+
+ // Very unexpected. Better abort non-gracefully.
+ if(excerpt_length > MAX_PAPER_LENGTH)
+ say("Error: Data corruption detected. Cannot print.")
+ CRASH("Transcript entry has more than [MAX_PAPER_LENGTH] chars: [excerpt_length] chars")
+
+ // If we're going to overflow the paper's length, print the current transcribed text out first and reset to prevent us
+ // going over the paper char count.
+ if((length(transcribed_text) + excerpt_length) > MAX_PAPER_LENGTH)
+ var/obj/item/paper/transcript_paper = new /obj/item/paper(get_turf(src))
+ transcript_paper.add_raw_text(transcribed_text)
+ transcript_paper.name = "[paper_name] page [page_count]"
+ transcript_paper.update_appearance()
+ transcribed_text = ""
+ page_count++
+
+ transcribed_text += "[transcript_excerpt]
"
- say("Transcript printed.")
- playsound(src, 'sound/items/taperecorder/taperecorder_print.ogg', 50, FALSE)
var/obj/item/paper/transcript_paper = new /obj/item/paper(get_turf(src))
- var/t1 = "Transcript:
"
- for(var/i in 1 to mytape.storedinfo.len)
- t1 += "[mytape.storedinfo[i]]
"
- transcript_paper.add_raw_text(t1)
- var/tapename = mytape.name
- var/prototapename = initial(mytape.name)
- transcript_paper.name = "paper- '[tapename == prototapename ? "Tape" : "[tapename]"] Transcript'"
+ transcript_paper.add_raw_text(transcribed_text)
+ transcript_paper.name = "[paper_name] page [page_count]"
transcript_paper.update_appearance()
+
+ say("Transcript printed, [page_count] pages.")
+ playsound(src, 'sound/items/taperecorder/taperecorder_print.ogg', 50, FALSE)
+
+ // Can't put the entire stack into their hands if there's multple pages, but hey we can at least put one page in.
usr.put_in_hands(transcript_paper)
canprint = FALSE
addtimer(VARSET_CALLBACK(src, canprint, TRUE), 30 SECONDS)
-
//empty tape recorders
/obj/item/taperecorder/empty
starting_tape_type = null