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")