diff --git a/code/datums/holocall.dm b/code/datums/holocall.dm
index 75abc87080f..f4e0edc67df 100644
--- a/code/datums/holocall.dm
+++ b/code/datums/holocall.dm
@@ -206,6 +206,8 @@
name = "holorecord disk"
desc = "Stores recorder holocalls."
icon_state = "holodisk"
+ obj_flags = UNIQUE_RENAME
+ materials = list(MAT_METAL = 100, MAT_GLASS = 100)
var/datum/holorecord/record
//Preset variables
var/preset_image_type
@@ -220,6 +222,22 @@
QDEL_NULL(record)
return ..()
+/obj/item/disk/holodisk/attackby(obj/item/W, mob/user, params)
+ if(istype(W, /obj/item/disk/holodisk))
+ var/obj/item/disk/holodisk/holodiskOriginal = W
+ if (holodiskOriginal.record)
+ if (!record)
+ record = new
+ record.caller_name = holodiskOriginal.record.caller_name
+ record.caller_image = holodiskOriginal.record.caller_image
+ record.entries = holodiskOriginal.record.entries.Copy()
+ record.language = holodiskOriginal.record.language
+ to_chat(user, "You copy the record from [holodiskOriginal] to [src] by connecting the ports!")
+ name = holodiskOriginal.name
+ else
+ to_chat(user, "[holodiskOriginal] has no record on it!")
+ ..()
+
/obj/item/disk/holodisk/proc/build_record()
record = new
var/list/lines = splittext(preset_record_text,"\n")
diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm
index 10a552564b5..3d3eb5c419f 100644
--- a/code/game/machinery/hologram.dm
+++ b/code/game/machinery/hologram.dm
@@ -49,6 +49,7 @@ Possible to do for anyone motivated enough:
var/datum/holocall/outgoing_call //do not modify the datums only check and call the public procs
var/obj/item/disk/holodisk/disk //Record disk
var/replay_mode = FALSE //currently replaying a recording
+ var/loop_mode = FALSE //currently looping a recording
var/record_mode = FALSE //currently recording
var/record_start = 0 //recording start time
var/record_user //user that inititiated the recording
@@ -150,19 +151,20 @@ Possible to do for anyone motivated enough:
if(temp)
dat = temp
else
- dat = "Request an AI's presence.
"
- dat += "Call another holopad.
"
+ dat = "Request an AI's presence
"
+ dat += "Call another holopad
"
if(disk)
if(disk.record)
//Replay
- dat += "Replay disk recording.
"
+ dat += "Replay disk recording
"
+ dat += "Loop disk recording
"
//Clear
- dat += "Clear disk recording.
"
+ dat += "Clear disk recording
"
else
//Record
- dat += "Start new recording.
"
+ dat += "Start new recording
"
//Eject
- dat += "Eject disk.
"
+ dat += "Eject disk
"
if(LAZYLEN(holo_calls))
dat += "=====================================================
"
@@ -172,7 +174,7 @@ Possible to do for anyone motivated enough:
for(var/I in holo_calls)
var/datum/holocall/HC = I
if(HC.connected_holopad != src)
- dat += "Answer call from [get_area(HC.calling_holopad)].
"
+ dat += "Answer call from [get_area(HC.calling_holopad)]
"
one_unanswered_call = TRUE
else
one_answered_call = TRUE
@@ -183,10 +185,10 @@ Possible to do for anyone motivated enough:
for(var/I in holo_calls)
var/datum/holocall/HC = I
if(HC.connected_holopad == src)
- dat += "Disconnect call from [HC.user].
"
+ dat += "Disconnect call from [HC.user]
"
- var/datum/browser/popup = new(user, "holopad", name, 300, 150)
+ var/datum/browser/popup = new(user, "holopad", name, 300, 175)
popup.set_content(dat)
popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
popup.open()
@@ -266,6 +268,9 @@ Possible to do for anyone motivated enough:
replay_stop()
else if(href_list["replay_start"])
replay_start()
+ else if(href_list["loop_start"])
+ loop_mode = TRUE
+ replay_start()
else if(href_list["record_start"])
record_start(usr)
else if(href_list["record_stop"])
@@ -464,6 +469,7 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/
/obj/machinery/holopad/proc/replay_stop()
if(replay_mode)
replay_mode = FALSE
+ loop_mode = FALSE
temp = null
QDEL_NULL(replay_holo)
SetLightsAndPower()
@@ -490,7 +496,7 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/
if(!record_mode)
return
//make this command so you can have multiple languages in single record
- if(!disk.record.caller_name && istype(speaker))
+ if((!disk.record.caller_name || disk.record.caller_name == "Unknown") && istype(speaker))
disk.record.caller_name = speaker.name
if(!disk.record.language)
disk.record.language = language
@@ -516,8 +522,11 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/
if(!replay_mode)
return
if(disk.record.entries.len < entry_number)
- replay_stop()
- return
+ if (loop_mode)
+ entry_number = 1
+ else
+ replay_stop()
+ return
var/list/entry = disk.record.entries[entry_number]
var/command = entry[1]
switch(command)
diff --git a/code/modules/research/designs/autolathe_designs.dm b/code/modules/research/designs/autolathe_designs.dm
index 95641aca6f1..443fef319cc 100644
--- a/code/modules/research/designs/autolathe_designs.dm
+++ b/code/modules/research/designs/autolathe_designs.dm
@@ -836,6 +836,6 @@
name = "Holodisk"
id = "holodisk"
build_type = AUTOLATHE
- materials = list(MAT_METAL = 1000)
+ materials = list(MAT_METAL = 100, MAT_GLASS = 100)
build_path = /obj/item/disk/holodisk
category = list("initial", "Misc")