diff --git a/code/game/machinery/computer/cloning.dm b/code/game/machinery/computer/cloning.dm
index 2c3757fb61..ffd3091605 100644
--- a/code/game/machinery/computer/cloning.dm
+++ b/code/game/machinery/computer/cloning.dm
@@ -1,507 +1,320 @@
-/obj/machinery/computer/cloning
- name = "cloning console"
- desc = "Used to clone people and manage DNA."
- icon_screen = "dna"
- icon_keyboard = "med_key"
- circuit = /obj/item/circuitboard/computer/cloning
+/obj/machinery/computer/cloning
+ name = "cloning console"
+ desc = "Used to clone people and manage DNA."
+ icon_screen = "dna"
+ icon_keyboard = "med_key"
+ circuit = /obj/item/circuitboard/computer/cloning
req_access = list(ACCESS_HEADS) //ONLY USED FOR RECORD DELETION RIGHT NOW.
- var/obj/machinery/dna_scannernew/scanner = null //Linked scanner. For scanning.
- var/list/pods //Linked cloning pods
- var/temp = "Inactive"
- var/scantemp_ckey
- var/scantemp = "Ready to Scan"
- var/menu = 1 //Which menu screen to display
- var/list/records = list()
- var/datum/data/record/active_record = null
- var/obj/item/disk/data/diskette = null //Mostly so the geneticist can steal everything.
- var/loading = 0 // Nice loading text
- var/autoprocess = 0
-
- light_color = LIGHT_COLOR_BLUE
-
-/obj/machinery/computer/cloning/Initialize()
+ var/obj/machinery/dna_scannernew/scanner = null //Linked scanner. For scanning.
+ var/list/pods //Linked cloning pods
+ var/temp = "Inactive"
+ var/scantemp_ckey
+ var/scantemp = "Ready to Scan"
+ var/menu = 1 //Which menu screen to display
+ var/list/records = list()
+ var/datum/data/record/active_record = null
+ var/obj/item/disk/data/diskette = null //Mostly so the geneticist can steal everything.
+ var/loading = 0 // Nice loading text
+ var/autoprocess = 0
+
+ light_color = LIGHT_COLOR_BLUE
+
+/obj/machinery/computer/cloning/Initialize()
. = ..()
- updatemodules(TRUE)
-
-/obj/machinery/computer/cloning/Destroy()
- if(pods)
- for(var/P in pods)
- DetachCloner(P)
- pods = null
- return ..()
-
-/obj/machinery/computer/cloning/proc/GetAvailablePod(mind = null)
- if(pods)
- for(var/P in pods)
- var/obj/machinery/clonepod/pod = P
- if(pod.occupant && pod.clonemind == mind)
- return null
- if(pod.is_operational() && !(pod.occupant || pod.mess))
- return pod
-
-/obj/machinery/computer/cloning/proc/HasEfficientPod()
- if(pods)
- for(var/P in pods)
- var/obj/machinery/clonepod/pod = P
- if(pod.is_operational() && pod.efficiency > 5)
- return TRUE
-
-/obj/machinery/computer/cloning/proc/GetAvailableEfficientPod(mind = null)
- if(pods)
- for(var/P in pods)
- var/obj/machinery/clonepod/pod = P
- if(pod.occupant && pod.clonemind == mind)
- return pod
- else if(!. && pod.is_operational() && !(pod.occupant || pod.mess) && pod.efficiency > 5)
- . = pod
-
-/obj/machinery/computer/cloning/process()
- if(!(scanner && LAZYLEN(pods) && autoprocess))
- return
-
- if(scanner.occupant && scanner.scan_level > 2)
- scan_occupant(scanner.occupant)
-
- for(var/datum/data/record/R in records)
- var/obj/machinery/clonepod/pod = GetAvailableEfficientPod(R.fields["mind"])
-
- if(!pod)
- return
-
- if(pod.occupant)
- continue //how though?
-
- if(pod.growclone(R.fields["ckey"], R.fields["name"], R.fields["UI"], R.fields["SE"], R.fields["mind"], R.fields["mrace"], R.fields["features"], R.fields["factions"]))
- records -= R
-
-/obj/machinery/computer/cloning/proc/updatemodules(findfirstcloner)
- src.scanner = findscanner()
- if(findfirstcloner && !LAZYLEN(pods))
- findcloner()
-
-/obj/machinery/computer/cloning/proc/findscanner()
- var/obj/machinery/dna_scannernew/scannerf = null
-
- // Loop through every direction
- for(dir in list(NORTH,EAST,SOUTH,WEST))
-
- // Try to find a scanner in that direction
- scannerf = locate(/obj/machinery/dna_scannernew, get_step(src, dir))
-
- // If found and operational, return the scanner
- if (!isnull(scannerf) && scannerf.is_operational())
- return scannerf
-
- // If no scanner was found, it will return null
- return null
-
-/obj/machinery/computer/cloning/proc/findcloner()
- var/obj/machinery/clonepod/podf = null
-
- for(dir in list(NORTH,EAST,SOUTH,WEST))
-
- podf = locate(/obj/machinery/clonepod, get_step(src, dir))
-
- if (!isnull(podf) && podf.is_operational())
- AttachCloner(podf)
-
-/obj/machinery/computer/cloning/proc/AttachCloner(obj/machinery/clonepod/pod)
- if(!pod.connected)
- pod.connected = src
- LAZYADD(pods, pod)
-
-/obj/machinery/computer/cloning/proc/DetachCloner(obj/machinery/clonepod/pod)
- pod.connected = null
- LAZYREMOVE(pods, pod)
-
-/obj/machinery/computer/cloning/attackby(obj/item/W, mob/user, params)
- if(istype(W, /obj/item/disk/data)) //INSERT SOME DISKETTES
- if (!src.diskette)
- if(!user.drop_item())
- return
- W.loc = src
- src.diskette = W
- to_chat(user, "You insert [W].")
- playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, 0)
- src.updateUsrDialog()
+ updatemodules(TRUE)
+
+/obj/machinery/computer/cloning/Destroy()
+ if(pods)
+ for(var/P in pods)
+ DetachCloner(P)
+ pods = null
+ return ..()
+
+/obj/machinery/computer/cloning/proc/GetAvailablePod(mind = null)
+ if(pods)
+ for(var/P in pods)
+ var/obj/machinery/clonepod/pod = P
+ if(pod.occupant && pod.clonemind == mind)
+ return null
+ if(pod.is_operational() && !(pod.occupant || pod.mess))
+ return pod
+
+/obj/machinery/computer/cloning/proc/HasEfficientPod()
+ if(pods)
+ for(var/P in pods)
+ var/obj/machinery/clonepod/pod = P
+ if(pod.is_operational() && pod.efficiency > 5)
+ return TRUE
+
+/obj/machinery/computer/cloning/proc/GetAvailableEfficientPod(mind = null)
+ if(pods)
+ for(var/P in pods)
+ var/obj/machinery/clonepod/pod = P
+ if(pod.occupant && pod.clonemind == mind)
+ return pod
+ else if(!. && pod.is_operational() && !(pod.occupant || pod.mess) && pod.efficiency > 5)
+ . = pod
+
+/obj/machinery/computer/cloning/process()
+ if(!(scanner && LAZYLEN(pods) && autoprocess))
+ return
+
+ if(scanner.occupant && scanner.scan_level > 2)
+ scan_occupant(scanner.occupant)
+
+ for(var/datum/data/record/R in records)
+ var/obj/machinery/clonepod/pod = GetAvailableEfficientPod(R.fields["mind"])
+
+ if(!pod)
+ return
+
+ if(pod.occupant)
+ continue //how though?
+
+ if(pod.growclone(R.fields["ckey"], R.fields["name"], R.fields["UI"], R.fields["SE"], R.fields["mind"], R.fields["mrace"], R.fields["features"], R.fields["factions"]))
+ records -= R
+
+/obj/machinery/computer/cloning/proc/updatemodules(findfirstcloner)
+ src.scanner = findscanner()
+ if(findfirstcloner && !LAZYLEN(pods))
+ findcloner()
+
+/obj/machinery/computer/cloning/proc/findscanner()
+ var/obj/machinery/dna_scannernew/scannerf = null
+
+ // Loop through every direction
+ for(dir in list(NORTH,EAST,SOUTH,WEST))
+
+ // Try to find a scanner in that direction
+ scannerf = locate(/obj/machinery/dna_scannernew, get_step(src, dir))
+
+ // If found and operational, return the scanner
+ if (!isnull(scannerf) && scannerf.is_operational())
+ return scannerf
+
+ // If no scanner was found, it will return null
+ return null
+
+/obj/machinery/computer/cloning/proc/findcloner()
+ var/obj/machinery/clonepod/podf = null
+
+ for(dir in list(NORTH,EAST,SOUTH,WEST))
+
+ podf = locate(/obj/machinery/clonepod, get_step(src, dir))
+
+ if (!isnull(podf) && podf.is_operational())
+ AttachCloner(podf)
+
+/obj/machinery/computer/cloning/proc/AttachCloner(obj/machinery/clonepod/pod)
+ if(!pod.connected)
+ pod.connected = src
+ LAZYADD(pods, pod)
+
+/obj/machinery/computer/cloning/proc/DetachCloner(obj/machinery/clonepod/pod)
+ pod.connected = null
+ LAZYREMOVE(pods, pod)
+
+/obj/machinery/computer/cloning/attackby(obj/item/W, mob/user, params)
+ if(istype(W, /obj/item/disk/data)) //INSERT SOME DISKETTES
+ if (!src.diskette)
+ if(!user.drop_item())
+ return
+ W.loc = src
+ src.diskette = W
+ to_chat(user, "You insert [W].")
+ playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, 0)
+ src.updateUsrDialog()
else if(istype(W, /obj/item/device/multitool))
- var/obj/item/device/multitool/P = W
-
- if(istype(P.buffer, /obj/machinery/clonepod))
- if(get_area(P.buffer) != get_area(src))
- to_chat(user, "-% Cannot link machines across power zones. Buffer cleared %-")
- P.buffer = null
- return
- to_chat(user, "-% Successfully linked [P.buffer] with [src] %-")
- var/obj/machinery/clonepod/pod = P.buffer
- if(pod.connected)
- pod.connected.DetachCloner(pod)
- AttachCloner(pod)
- else
- P.buffer = src
- to_chat(user, "-% Successfully stored \ref[P.buffer] [P.buffer.name] in buffer %-")
- return
- else
- return ..()
-
-/obj/machinery/computer/cloning/attack_hand(mob/user)
- if(..())
- return
- interact(user)
-
-/obj/machinery/computer/cloning/interact(mob/user)
- user.set_machine(src)
- add_fingerprint(user)
-
- if(..())
- return
-
- updatemodules(TRUE)
-
- var/dat = ""
- dat += "Refresh"
-
- if(scanner && HasEfficientPod() && scanner.scan_level > 2)
- if(!autoprocess)
- dat += "Autoprocess"
- else
- dat += "Stop autoprocess"
- else
- dat += "Autoprocess"
- dat += "
Cloning Pod Status
"
- dat += "[temp]
"
-
- switch(src.menu)
- if(1)
- // Modules
- if (isnull(src.scanner) || !LAZYLEN(pods))
- dat += "Modules
"
- //dat += "Reload Modules"
- if (isnull(src.scanner))
- dat += "ERROR: No Scanner detected!
"
- if (!LAZYLEN(pods))
- dat += "ERROR: No Pod detected
"
-
- // Scanner
- if (!isnull(src.scanner))
- var/mob/living/scanner_occupant = get_mob_or_brainmob(scanner.occupant)
-
- dat += "Scanner Functions
"
-
- dat += ""
- if(!scanner_occupant)
- dat += "Scanner Unoccupied"
- else if(loading)
- dat += "[scanner_occupant] => Scanning..."
- else
- if(scanner_occupant.ckey != scantemp_ckey)
- scantemp = "Ready to Scan"
- scantemp_ckey = scanner_occupant.ckey
- dat += "[scanner_occupant] => [scantemp]"
- dat += "
"
-
- if(scanner_occupant)
- dat += "Start Scan"
- dat += "
[src.scanner.locked ? "Unlock Scanner" : "Lock Scanner"]"
- else
- dat += "Start Scan"
-
- // Database
- dat += "Database Functions
"
- if (src.records.len && src.records.len > 0)
- dat += "View Records ([src.records.len])
"
- else
- dat += "View Records (0)
"
- if (src.diskette)
- dat += "Eject Disk
"
-
-
-
- if(2)
- dat += "Current records
"
- dat += "<< Back
"
- for(var/datum/data/record/R in records)
- dat += "[R.fields["name"]]
Scan ID [R.fields["id"]] View Record"
- if(3)
- dat += "Selected Record
"
- dat += "<< Back
"
-
- if (!src.active_record)
- dat += "Record not found."
- else
- dat += "[src.active_record.fields["name"]]
"
- dat += "Scan ID [src.active_record.fields["id"]] Clone
"
-
- var/obj/item/implant/health/H = locate(src.active_record.fields["imp"])
-
- if ((H) && (istype(H)))
- dat += "Health Implant Data:
[H.sensehealth()]
"
- else
- dat += "Unable to locate Health Implant.
"
-
- dat += "Unique Identifier:
[src.active_record.fields["UI"]]
"
- dat += "Structural Enzymes:
[src.active_record.fields["SE"]]
"
-
- if(diskette && diskette.fields)
- dat += ""
- dat += "
Inserted Disk
"
- dat += "
Contents: "
- var/list/L = list()
- if(diskette.fields["UI"])
- L += "Unique Identifier"
- if(diskette.fields["UE"] && diskette.fields["name"] && diskette.fields["blood_type"])
- L += "Unique Enzymes"
- if(diskette.fields["SE"])
- L += "Structural Enzymes"
- dat += english_list(L, "Empty", " + ", " + ")
- dat += "
Load from Disk"
-
- dat += "
Save to Disk"
- dat += "
"
-
- dat += "Delete Record"
-
- if(4)
- if (!src.active_record)
- src.menu = 2
- dat = "[src.temp]
"
- dat += "Confirm Record Deletion
"
-
- dat += "Scan card to confirm.
"
- dat += "Cancel"
-
-
- var/datum/browser/popup = new(user, "cloning", "Cloning System Control")
- popup.set_content(dat)
- popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
- popup.open()
-
-/obj/machinery/computer/cloning/Topic(href, href_list)
- if(..())
- return
-
- if(loading)
- return
-
- if(href_list["task"])
- switch(href_list["task"])
- if("autoprocess")
- autoprocess = 1
- playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
- if("stopautoprocess")
- autoprocess = 0
- playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
-
- else if ((href_list["scan"]) && !isnull(scanner) && scanner.is_operational())
- scantemp = ""
-
- loading = 1
- src.updateUsrDialog()
- playsound(src, 'sound/machines/terminal_prompt.ogg', 50, 0)
- say("Initiating scan...")
-
- spawn(20)
- src.scan_occupant(scanner.occupant)
-
- loading = 0
- src.updateUsrDialog()
- playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
-
-
- //No locking an open scanner.
- else if ((href_list["lock"]) && !isnull(scanner) && scanner.is_operational())
- if ((!scanner.locked) && (scanner.occupant))
+ var/obj/item/device/multitool/P = W
+
+ if(istype(P.buffer, /obj/machinery/clonepod))
+ if(get_area(P.buffer) != get_area(src))
+ to_chat(user, "-% Cannot link machines across power zones. Buffer cleared %-")
+ P.buffer = null
+ return
+ to_chat(user, "-% Successfully linked [P.buffer] with [src] %-")
+ var/obj/machinery/clonepod/pod = P.buffer
+ if(pod.connected)
+ pod.connected.DetachCloner(pod)
+ AttachCloner(pod)
+ else
+ P.buffer = src
+ to_chat(user, "-% Successfully stored \ref[P.buffer] [P.buffer.name] in buffer %-")
+ return
+ else
+ return ..()
+
+/obj/machinery/computer/cloning/attack_hand(mob/user)
+ if(..())
+ return
+ interact(user)
+
+/obj/machinery/computer/cloning/interact(mob/user)
+ user.set_machine(src)
+ add_fingerprint(user)
+
+ if(..())
+ return
+
+ updatemodules(TRUE)
+
+ var/dat = ""
+ dat += "Refresh"
+
+ if(scanner && HasEfficientPod() && scanner.scan_level > 2)
+ if(!autoprocess)
+ dat += "Autoprocess"
+ else
+ dat += "Stop autoprocess"
+ else
+ dat += "Autoprocess"
+ dat += "Cloning Pod Status
"
+ dat += "[temp]
"
+
+ switch(src.menu)
+ if(1)
+ // Modules
+ if (isnull(src.scanner) || !LAZYLEN(pods))
+ dat += "Modules
"
+ //dat += "Reload Modules"
+ if (isnull(src.scanner))
+ dat += "ERROR: No Scanner detected!
"
+ if (!LAZYLEN(pods))
+ dat += "ERROR: No Pod detected
"
+
+ // Scanner
+ if (!isnull(src.scanner))
+ var/mob/living/scanner_occupant = get_mob_or_brainmob(scanner.occupant)
+
+ dat += "Scanner Functions
"
+
+ dat += ""
+ if(!scanner_occupant)
+ dat += "Scanner Unoccupied"
+ else if(loading)
+ dat += "[scanner_occupant] => Scanning..."
+ else
+ if(scanner_occupant.ckey != scantemp_ckey)
+ scantemp = "Ready to Scan"
+ scantemp_ckey = scanner_occupant.ckey
+ dat += "[scanner_occupant] => [scantemp]"
+ dat += "
"
+
+ if(scanner_occupant)
+ dat += "Start Scan"
+ dat += "
[src.scanner.locked ? "Unlock Scanner" : "Lock Scanner"]"
+ else
+ dat += "Start Scan"
+
+ // Database
+ dat += "Database Functions
"
+ if (src.records.len && src.records.len > 0)
+ dat += "View Records ([src.records.len])
"
+ else
+ dat += "View Records (0)
"
+ if (src.diskette)
+ dat += "Eject Disk
"
+
+
+
+ if(2)
+ dat += "Current records
"
+ dat += "<< Back
"
+ for(var/datum/data/record/R in records)
+ dat += "[R.fields["name"]]
Scan ID [R.fields["id"]] View Record"
+ if(3)
+ dat += "Selected Record
"
+ dat += "<< Back
"
+
+ if (!src.active_record)
+ dat += "Record not found."
+ else
+ dat += "[src.active_record.fields["name"]]
"
+ dat += "Scan ID [src.active_record.fields["id"]] Clone
"
+
+ var/obj/item/implant/health/H = locate(src.active_record.fields["imp"])
+
+ if ((H) && (istype(H)))
+ dat += "Health Implant Data:
[H.sensehealth()]
"
+ else
+ dat += "Unable to locate Health Implant.
"
+
+ dat += "Unique Identifier:
[src.active_record.fields["UI"]]
"
+ dat += "Structural Enzymes:
[src.active_record.fields["SE"]]
"
+
+ if(diskette && diskette.fields)
+ dat += ""
+ dat += "
Inserted Disk
"
+ dat += "
Contents: "
+ var/list/L = list()
+ if(diskette.fields["UI"])
+ L += "Unique Identifier"
+ if(diskette.fields["UE"] && diskette.fields["name"] && diskette.fields["blood_type"])
+ L += "Unique Enzymes"
+ if(diskette.fields["SE"])
+ L += "Structural Enzymes"
+ dat += english_list(L, "Empty", " + ", " + ")
+ dat += "
Load from Disk"
+
+ dat += "
Save to Disk"
+ dat += "
"
+
+ dat += "Delete Record"
+
+ if(4)
+ if (!src.active_record)
+ src.menu = 2
+ dat = "[src.temp]
"
+ dat += "Confirm Record Deletion
"
+
+ dat += "Scan card to confirm.
"
+ dat += "Cancel"
+
+
+ var/datum/browser/popup = new(user, "cloning", "Cloning System Control")
+ popup.set_content(dat)
+ popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
+ popup.open()
+
+/obj/machinery/computer/cloning/Topic(href, href_list)
+ if(..())
+ return
+
+ if(loading)
+ return
+
+ if(href_list["task"])
+ switch(href_list["task"])
+ if("autoprocess")
+ autoprocess = 1
+ playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
+ if("stopautoprocess")
+ autoprocess = 0
+ playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
+
+ else if ((href_list["scan"]) && !isnull(scanner) && scanner.is_operational())
+ scantemp = ""
+
+ loading = 1
+ src.updateUsrDialog()
+ playsound(src, 'sound/machines/terminal_prompt.ogg', 50, 0)
+ say("Initiating scan...")
+
+ spawn(20)
+ src.scan_occupant(scanner.occupant)
+
+ loading = 0
+ src.updateUsrDialog()
+ playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
+
+
+ //No locking an open scanner.
+ else if ((href_list["lock"]) && !isnull(scanner) && scanner.is_operational())
+ if ((!scanner.locked) && (scanner.occupant))
scanner.locked = TRUE
- playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
- else
+ playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
+ else
scanner.locked = FALSE
-<<<<<<< HEAD
- playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
-
- else if(href_list["view_rec"])
- playsound(src, "terminal_type", 25, 0)
- src.active_record = find_record("id", href_list["view_rec"], records)
- if(active_record)
- if(!active_record.fields["ckey"])
- records -= active_record
- active_record = null
- src.temp = "Record Corrupt"
- else
- src.menu = 3
- else
- src.temp = "Record missing."
-
- else if (href_list["del_rec"])
- if ((!src.active_record) || (src.menu < 3))
- return
- if (src.menu == 3) //If we are viewing a record, confirm deletion
- src.temp = "Delete record?"
- src.menu = 4
- playsound(src, 'sound/machines/terminal_prompt.ogg', 50, 0)
-
- else if (src.menu == 4)
- var/obj/item/card/id/C = usr.get_active_held_item()
- if (istype(C)||istype(C, /obj/item/device/pda))
- if(src.check_access(C))
- src.temp = "[src.active_record.fields["name"]] => Record deleted."
- src.records.Remove(active_record)
- active_record = null
- playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
- src.menu = 2
- else
- src.temp = "Access Denied."
- playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
-
- else if (href_list["disk"]) //Load or eject.
- switch(href_list["disk"])
- if("load")
- if (!diskette || !istype(diskette.fields) || !diskette.fields["name"] || !diskette.fields)
- src.temp = "Load error."
- src.updateUsrDialog()
- playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
- return
- if (!src.active_record)
- src.temp = "Record error."
- src.menu = 1
- src.updateUsrDialog()
- playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
- return
-
- for(var/key in diskette.fields)
- src.active_record.fields[key] = diskette.fields[key]
- src.temp = "Load successful."
- playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
-
- if("eject")
- if(src.diskette)
- src.diskette.loc = src.loc
- src.diskette = null
- playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, 0)
- if("save")
- if(!diskette || diskette.read_only || !active_record || !active_record.fields)
- src.temp = "Save error."
- src.updateUsrDialog()
- playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
- return
-
- diskette.fields = active_record.fields.Copy()
- diskette.name = "data disk - '[src.diskette.fields["name"]]'"
- src.temp = "Save successful."
- playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
-
- else if (href_list["refresh"])
- src.updateUsrDialog()
- playsound(src, "terminal_type", 25, 0)
-
- else if (href_list["clone"])
- var/datum/data/record/C = find_record("id", href_list["clone"], records)
- //Look for that player! They better be dead!
- if(C)
- var/obj/machinery/clonepod/pod = GetAvailablePod()
- //Can't clone without someone to clone. Or a pod. Or if the pod is busy. Or full of gibs.
- if(!LAZYLEN(pods))
- temp = "No Clonepods detected."
- playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
- else if(!pod)
- temp = "No Clonepods available."
- playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
- else if(!config.revival_cloning)
- temp = "Unable to initiate cloning cycle."
- playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
- else if(pod.occupant)
- temp = "Cloning cycle already in progress."
- playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
- else if(pod.growclone(C.fields["ckey"], C.fields["name"], C.fields["UI"], C.fields["SE"], C.fields["mind"], C.fields["mrace"], C.fields["features"], C.fields["factions"]))
- temp = "[C.fields["name"]] => Cloning cycle in progress..."
- playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
- records.Remove(C)
- if(active_record == C)
- active_record = null
- menu = 1
- else
- temp = "[C.fields["name"]] => Initialisation failure."
- playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
-
- else
- temp = "Data corruption."
- playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
-
- else if (href_list["menu"])
- src.menu = text2num(href_list["menu"])
- playsound(src, "terminal_type", 25, 0)
-
- src.add_fingerprint(usr)
- src.updateUsrDialog()
- return
-
-/obj/machinery/computer/cloning/proc/scan_occupant(occupant)
- var/mob/living/mob_occupant = get_mob_or_brainmob(occupant)
- var/datum/dna/dna
- if(iscarbon(mob_occupant))
- var/mob/living/carbon/C = mob_occupant
- dna = C.has_dna()
- if(isbrain(mob_occupant))
- var/mob/living/brain/B = mob_occupant
- dna = B.stored_dna
-
- if(!istype(dna))
- scantemp = "Unable to locate valid genetic data."
- playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
- return
- if(mob_occupant.suiciding || mob_occupant.hellbound)
- scantemp = "Subject's brain is not responding to scanning stimuli."
- playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
- return
- if((mob_occupant.disabilities & NOCLONE) && (src.scanner.scan_level < 2))
- scantemp = "Subject no longer contains the fundamental materials required to create a living clone."
- playsound(src, 'sound/machines/terminal_alert.ogg', 50, 0)
- return
- if ((!mob_occupant.ckey) || (!mob_occupant.client))
- scantemp = "Mental interface failure."
- playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
- return
- if (find_record("ckey", mob_occupant.ckey, records))
- scantemp = "Subject already in database."
- playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
- return
-
- var/datum/data/record/R = new()
- if(dna.species)
- // We store the instance rather than the path, because some
- // species (abductors, slimepeople) store state in their
- // species datums
- R.fields["mrace"] = dna.species
- else
- var/datum/species/rando_race = pick(config.roundstart_races)
- R.fields["mrace"] = rando_race.type
-
- R.fields["ckey"] = mob_occupant.ckey
- R.fields["name"] = mob_occupant.real_name
- R.fields["id"] = copytext(md5(mob_occupant.real_name), 2, 6)
- R.fields["UE"] = dna.unique_enzymes
- R.fields["UI"] = dna.uni_identity
- R.fields["SE"] = dna.struc_enzymes
- R.fields["blood_type"] = dna.blood_type
- R.fields["features"] = dna.features
- R.fields["factions"] = mob_occupant.faction
-
- if (!isnull(mob_occupant.mind)) //Save that mind so traitors can continue traitoring after cloning.
- R.fields["mind"] = "\ref[mob_occupant.mind]"
-
- //Add an implant if needed
- var/obj/item/implant/health/imp
- for(var/obj/item/implant/health/HI in mob_occupant.implants)
- imp = HI
- break
- if(!imp)
- imp = new /obj/item/implant/health(mob_occupant)
- imp.implant(mob_occupant)
- R.fields["imp"] = "\ref[imp]"
-
- src.records += R
- scantemp = "Subject successfully scanned."
- playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
-=======
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
else if(href_list["view_rec"])
@@ -687,4 +500,3 @@
src.records += R
scantemp = "Subject successfully scanned."
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
->>>>>>> 4178c20... Configuration datum refactor (#30763)