/proc/scram(n) var/t = "" var/p = null p = 1 while(p <= n) t = text("[][]", t, rand(1, 9)) p++ return t /obj/machinery/computer/dna name = "DNA operations computer" desc = "A Computer used to advanced DNA stuff." icon_state = "dna" var/obj/item/weapon/card/data/scan = null var/obj/item/weapon/card/data/modify = null var/obj/item/weapon/card/data/modify2 = null var/mode = null var/temp = null /obj/machinery/computer/dna/attack_ai(mob/user as mob) return src.attack_hand(user) /obj/machinery/computer/dna/attack_paw(mob/user as mob) return src.attack_hand(user) /obj/machinery/computer/dna/attack_hand(mob/user as mob) if(..()) return user.machine = src if (istype(user, /mob/living/carbon/human) || istype(user, /mob/living/silicon/ai)) var/dat = text("Please Insert the cards into the slots
\n\t\t\t\tFunction Disk: []
\n\t\t\t\tTarget Disk: []
\n\t\t\t\tAux. Data Disk: []
\n\t\t\t\t\t(Not always used!)
\n\t\t\t\t[]", src, (src.scan ? text("[]", src.scan.name) : "----------"), src, (src.modify ? text("[]", src.modify.name) : "----------"), src, (src.modify2 ? text("[]", src.modify2.name) : "----------"), (src.scan ? text("Execute Function", src) : "No function disk inserted!")) if (src.temp) dat = text("[]

Clear Message", src.temp, src) user << browse(dat, "window=dna_comp") onclose(user, "dna_comp") else var/dat = text("[]
\n\t\t\t\t[] []
\n\t\t\t\t[] []
\n\t\t\t\t[] []
\n\t\t\t\t\t(Not always used!)
\n\t\t\t\t[]", stars("Please Insert the cards into the slots"), stars("Function Disk:"), src, (src.scan ? text("[]", src.scan.name) : "----------"), stars("Target Disk:"), src, (src.modify ? text("[]", src.modify.name) : "----------"), stars("Aux. Data Disk:"), src, (src.modify2 ? text("[]", src.modify2.name) : "----------"), (src.scan ? text("[]", src, stars("Execute Function")) : stars("No function disk inserted!"))) if (src.temp) dat = text("[]

[]", stars(src.temp), src, stars("Clear Message")) user << browse(dat, "window=dna_comp") onclose(user, "dna_comp") return /obj/machinery/computer/dna/Topic(href, href_list) if(..()) return if ((usr.contents.Find(src) || ((get_dist(src, usr) <= 1 || usr.telekinesis == 1) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon/ai))) usr.machine = src if (href_list["modify"]) if (src.modify) src.modify.loc = src.loc src.modify = null src.mode = null else var/obj/item/I = usr.equipped() if (istype(I, /obj/item/weapon/card/data)) usr.drop_item() I.loc = src src.modify = I src.mode = null if (href_list["modify2"]) if (src.modify2) src.modify2.loc = src.loc src.modify2 = null src.mode = null else var/obj/item/I = usr.equipped() if (istype(I, /obj/item/weapon/card/data)) usr.drop_item() I.loc = src src.modify2 = I src.mode = null if (href_list["scan"]) if (src.scan) src.scan.loc = src.loc src.scan = null src.mode = null else var/obj/item/I = usr.equipped() if (istype(I, /obj/item/weapon/card/data)) usr.drop_item() I.loc = src src.scan = I src.mode = null if (href_list["clear"]) src.temp = null if (href_list["execute"]) if ((src.scan && src.scan.function)) switch(src.scan.function) if("data_mutate") if (src.modify) if (!( findtext(src.scan.data, "-", 1, null) )) if ((src.modify.data && src.scan.data && length(src.modify.data) >= length(src.scan.data))) src.modify.data = text("[][]", src.scan.data, (length(src.modify.data) > length(src.scan.data) ? copytext(src.modify.data, length(src.scan.data) + 1, length(src.modify.data) + 1) : null)) else src.temp = "Disk Failure: Cannot examine data! (Null or wrong format)" else var/d = findtext(src.modify.data, "-", 1, null) var/t = copytext(src.modify.data, d + 1, length(src.modify.data) + 1) d = text2num(copytext(1, d, null)) if ((d && t && src.modify.data && src.scan.data && length(src.modify.data) >= (length(t) + d - 1) )) src.modify.data = text("[][][]", copytext(src.modify.data, 1, d), t, (length(src.modify.data) > length(t) + d ? copytext(src.modify.data, length(t) + d, length(src.modify.data) + 1) : null)) else src.temp = "Disk Failure: Cannot examine data! (Null or wrong format)" else src.temp = "Disk Failure: Cannot read target disk!" if("dna_seq") src.temp = "DNA Systems Help:\nHuman DNA sequences: (Compressed in *.dna format version 10.76)\n\tSpecies Identification Marker: (28 chromosomes)\n\t\t5BDFE293BA5500F9FFFD500AAFFE\n\tStructural Enzymes:\n\t\tCDE375C9A6C25A7DBDA50EC05AC6CEB63\n\t\tNote: The first id set is used for DNA clean up operations.\n\tUsed Enzymes:\n\t\t493DB249EB6D13236100A37000800AB71\n\tSpecies/Genus Classification: Homo Sapien\n\nMonkey DNA sequences: (Compressed in *.dna format version 10.76)\n\tSpecies Identification Marker: (16 chromosomes)\n\t\t2B6696D2B127E5A4\n\tStructural Enzymes:\n\t\tCDEAF5B90AADBC6BA8033DB0A7FD613FA\n\t\tNote: The first id set is used for DNA clean up operations.\n\tUsed Enzymes:\n\t\tC8FFFE7EC09D80AEDEDB9A5A0B4085B61\n\tSpecies/Genus Classification: Generic Monkey\n>" if("dna_help") src.temp = "DNA Systems Help:\nThe DNA systems consists 3 systems.\nI. DNA Scanner/Implanter - This system is slightly advanced to use. It accepts\n\t1 disk. Before you wish to run a function/program you must implant the\n\tdisk data into the temporary memory. Note that once this is done the disk can\n\tbe removed to place a data disk in.\nII. DNA computer - This is a simple yet fast computer that basically operates on data.\nIII. Restructurer - This device reorganizes the anatomical structure of the subject\n\taccording to the DNA sequences. Please note that it is illegal to perform a\n\ttransfer from one species to or from the Homo sapiens species but\n\thuman to human is acceptable under UNSD guidlines.\n\tNote: This machine is programmed to operate on specific preprogrammed species with\n\tspecialized anatomical blueprints hard coded into its databanks. It cannot operate\n\ton other species. (Current: Human, Monkey)\n\nData Disks:\n\tThese run on 2 (or 3) types: DNA scanner program disks and data modification\nfunctions (and disk modification functions)\n\nDisk-Copy\n\tThis erases the target disk and completely copies the data from the aux. disk.\nDisk-Erase\n\tThis erases everything on the target disk.\nData-Clear\n\tThis erases (clears) only the data.\n\nData-Trunicate\n\tThis removes data from the target disk (parameters gathered from data slot on target\n\tdisk). This fuction has 4 modes (a,b,c,default) defined by this way. (mode id)(#)\n\ta - This cuts # data from the end. (ex a1 on ABCD = ABC)\n\tb - This cuts # data from the beginning. (ex b1 on ABCD = BCD)\n\tc - This limits the data from the end. (ex c1 on ABCD = A)\n\tdefault - This limits the data from the end. (ex 1 on ABCD = D)\nData-Add\n\tThis adds thedata on the aux. disk to the data on the target disk.\nData-Sramble\n\tThis scrambles the data on the target disk. The length is equal to\n\tthe length of the original data.\nData-Input\n\tThis lets you input data into the data slot of any data disk.\n\tNote: This doesn't work only on storage.\nData-Mutate\n\tThis basically inserts text. You follow this format:\n\tpos-text (or just text for automatic pos 1)\n\tie 2-IVE on FOUR yields FIVE\n" if("data_add") if (src.modify) if (src.modify2) if ((src.modify.data && src.modify2.data)) src.modify.data += src.modify2.data src.temp = text("Done!
New Data:
[]", src.modify.data) else src.temp = "Cannot read data! (may be null)" else src.temp = "Disk Failure: Cannot read aux. data disk!" else src.temp = "Disk Failure: Cannot read target disk!" if("data_scramble") if (src.modify) if (length(text("[]", src.modify.data)) >= 1) src.modify.data = scram(length(text("[]", src.modify.data))) src.temp = text("Data scrambled: []", src.modify.data) else src.temp = "No data to scramble" else src.temp = "Disk Failure: Cannot read target disk!" if("data_input") if (src.modify) var/dat = input(usr, ">", text("[]", src.name), null) as text var/s = src.scan var/m = src.modify if ((usr.stat || usr.restrained() || src.modify != m || src.scan != s)) return if (((get_dist(src, usr) <= 1 || usr.telekinesis == 1) && istype(src.loc, /turf))) src.modify.data = dat else src.temp = "Disk Failure: Cannot read target disk!" if("disk_copy") if (src.modify) if (src.modify2) src.modify.function = src.modify2.function src.modify.data = src.modify2.data src.modify.special = src.modify2.special src.temp = "All disk data/programs copied." else src.temp = "Disk Failure: Cannot read aux. data disk!" else src.temp = "Disk Failure: Cannot read target disk!" if("disk_dis") if (src.modify) src.temp = text("Function: [][]
Data: []", src.modify.function, (src.modify.special ? text("-[]", src.modify.special) : null), src.modify.data) else src.temp = "Disk Failure: Cannot read target disk!" if("disk_erase") if (src.modify) src.modify.data = null src.modify.function = "storage" src.modify.special = null src.temp = "All Disk contents deleted." else src.temp = "Disk Failure: Cannot read target disk!" if("data_clear") if (src.modify) src.modify.data = null src.temp = "Disk data cleared." else src.temp = "Disk Failure: Cannot read target disk!" if("data_trun") if (src.modify) if ((src.modify.data && src.scan.data)) var/l1 = length(src.modify.data) var/l2 = max(round(text2num(src.scan.data)), 1) switch(copytext(src.modify.data, 1, 2)) if("a") if (l1 > l2) src.modify.data = copytext(src.modify.data, 1, (l1 - l2) + 1) else src.modify.data = "" src.temp = text("Done!
New Data:
[]", src.modify.data) if("b") if (l1 > l2) src.modify.data = copytext(src.modify.data, l2, l1 + 1) else src.modify.data = "" src.temp = text("Done!
New Data:
[]", src.modify.data) if("c") if (l1 >= l2) src.modify.data = copytext(src.modify.data, l1 - l2, l1 + 1) src.temp = text("Done!
New Data:
[]", src.modify.data) else if (l1 >= l2) src.modify.data = copytext(src.modify.data, 1, l2 + 1) src.temp = text("Done!
New Data:
[]", src.modify.data) else src.temp = "Cannot read data! (may be null and note that function data slot is used instead of aux disk!!)" else src.temp = "Disk Failure: Cannot read target disk!" else else src.temp = "System Failure: Cannot read disk function!" src.add_fingerprint(usr) src.updateUsrDialog() return /obj/machinery/computer/dna/ex_act(severity) switch(severity) if(1.0) //SN src = null del(src) return if(2.0) if (prob(50)) //SN src = null del(src) return else return /obj/machinery/dna_scanner/allow_drop() return 0 /obj/machinery/dna_scanner/relaymove(mob/user as mob) if (user.stat) return src.go_out() return /obj/machinery/dna_scanner/verb/eject() set src in oview(1) if (usr.stat != 0) return src.go_out() add_fingerprint(usr) return /obj/machinery/dna_scanner/verb/move_inside() set src in oview(1) if (usr.stat != 0) return if (src.occupant) usr << "\blue The scanner is already occupied!" return if (usr.abiotic()) usr << "\blue Subject cannot have abiotic items on." return usr.stop_pulling() usr.client.perspective = EYE_PERSPECTIVE usr.client.eye = src usr.loc = src src.occupant = usr src.icon_state = "scanner_1" for(var/obj/O in src) //O = null del(O) //Foreach goto(124) src.add_fingerprint(usr) return /obj/machinery/dna_scanner/attackby(obj/item/weapon/grab/G as obj, user as mob) if ((!( istype(G, /obj/item/weapon/grab) ) || !( ismob(G.affecting) ))) return if (src.occupant) user << "\blue The scanner is already occupied!" return if (G.affecting.abiotic()) user << "\blue Subject cannot have abiotic items on." return var/mob/M = G.affecting if (M.client) M.client.perspective = EYE_PERSPECTIVE M.client.eye = src M.loc = src src.occupant = M src.icon_state = "scanner_1" for(var/obj/O in src) O.loc = src.loc //Foreach goto(154) src.add_fingerprint(user) //G = null del(G) return /obj/machinery/dna_scanner/proc/go_out() if ((!( src.occupant ) || src.locked)) return for(var/obj/O in src) O.loc = src.loc //Foreach goto(30) if (src.occupant.client) src.occupant.client.eye = src.occupant.client.mob src.occupant.client.perspective = MOB_PERSPECTIVE src.occupant.loc = src.loc src.occupant = null src.icon_state = "scanner_0" return /obj/machinery/dna_scanner/ex_act(severity) switch(severity) if(1.0) for(var/atom/movable/A as mob|obj in src) A.loc = src.loc ex_act(severity) //Foreach goto(35) //SN src = null del(src) return if(2.0) if (prob(50)) for(var/atom/movable/A as mob|obj in src) A.loc = src.loc ex_act(severity) //Foreach goto(108) //SN src = null del(src) return if(3.0) if (prob(25)) for(var/atom/movable/A as mob|obj in src) A.loc = src.loc ex_act(severity) //Foreach goto(181) //SN src = null del(src) return else return /obj/machinery/dna_scanner/blob_act() if(prob(75)) for(var/atom/movable/A as mob|obj in src) A.loc = src.loc del(src) /obj/machinery/scan_console/ex_act(severity) switch(severity) if(1.0) //SN src = null del(src) return if(2.0) if (prob(50)) //SN src = null del(src) return else return /obj/machinery/scan_console/blob_act() if(prob(75)) del(src) /obj/machinery/scan_console/power_change() if(stat & BROKEN) icon_state = "broken" else if(powered()) icon_state = initial(icon_state) stat &= ~NOPOWER else spawn(rand(0, 15)) src.icon_state = "c_unpowered" stat |= NOPOWER /obj/machinery/scan_console/New() ..() spawn( 5 ) src.connected = locate(/obj/machinery/dna_scanner, get_step(src, WEST)) return return /obj/machinery/scan_console/process() if(stat & (NOPOWER|BROKEN)) return use_power(250) var/mob/M if (!( src.status )) return if (!( src.func )) src.temp = "No function loaded into memory core!" src.status = null if ((src.connected && src.connected.occupant)) M = src.connected.occupant if (src.status == "load") src.prog_p1 = null src.prog_p2 = null src.prog_p3 = null src.prog_p4 = null switch(src.func) if("dna_trun") if (src.data) src.prog_p1 = copytext(src.data, 1, 2) src.prog_p2 = text2num(src.data) src.prog_p3 = src.special src.status = "dna_trun" src.temp = "Executing trunication function on occupant." else src.temp = "No data implanted in core memory." src.status = null if("dna_scan") if (src.special) if (src.scan) if (istype(M, /mob)) switch(src.special) if("UI") src.temp = text("Scan Complete:
Data downloaded to disk!
Unique Identifier: []", M.primary.uni_identity) src.scan.data = M.primary.uni_identity if("SE") src.temp = text("Scan Complete:
Data downloaded to disk!
Structural Enzymes: []", M.primary.struc_enzyme) src.scan.data = M.primary.struc_enzyme if("UE") src.temp = text("Scan Complete:
Data downloaded to disk!
Used Enzynmes: []", M.primary.use_enzyme) src.scan.data = M.primary.use_enzyme if("SI") src.temp = text("Scan Complete:
Data downloaded to disk!
Species Identifier: []", M.primary.spec_identity) src.scan.data = M.primary.spec_identity else else src.temp = "No occupant to scan!" else src.temp = "Error: No disk to upload data to." else src.temp = "Error: Function program errors." src.status = null if("dna_replace") if ((src.data && src.special)) src.prog_p1 = src.special src.prog_p2 = src.data src.status = "dna_replace" src.temp = "Executing repalcement function on occupant." else src.temp = "Error: No DNA data loaded into core or function program errors." src.status = null if("dna_add") if ((src.data && src.special)) src.prog_p1 = src.special src.prog_p2 = src.data src.status = "dna_add" src.temp = "Executing addition function on occupant." else src.temp = "Error: No DNA data loaded into core or function program errors." src.status = null else src.temp = "Cannot execute program!" src.status = null else if (src.status == "dna_trun") if (istype(M, /mob)) var/t = null switch(src.prog_p3) if("UI") t = M.primary.uni_identity if("SE") t = M.primary.struc_enzyme if("UE") t = M.primary.use_enzyme if("SI") t = M.primary.spec_identity else if (!( src.prog_p4 )) switch(src.prog_p1) if("a") src.prog_p4 = length(t) if("b") src.prog_p4 = 1 else else if (src.prog_p1 == "a") src.prog_p4-- else if (src.prog_p1 == "b") src.prog_p4-- switch(src.prog_p1) if("a") if (src.prog_p4 <= 0) src.temp = "Trunication complete" src.status = null else t = copytext(t, 1, length(t)) src.temp = text("Trunicating []'s DNA sequence...
[]
Status: [] units left.

Emergency Abort", M.name, t, src.prog_p4, src) if("b") if (src.prog_p4 <= 0) src.temp = "Trunication complete" src.status = null else t = copytext(t, 2, length(t) + 1) src.temp = text("Trunicating []'s DNA sequence...
[]
Status: [] units left.

Emergency Abort", M.name, t, src.prog_p4, src) if("c") if (length(t) <= src.prog_p2) src.temp = "Limitation complete" src.status = null else t = copytext(t, 1, length(t)) src.temp = text("Limiting []'s DNA sequence...
[]
Status: [] units converting to [] units.

Emergency Abort", M.name, t, length(t), src.prog_p2, src) else if (length(t) <= src.prog_p2) src.temp = "Limitation complete" src.status = null else t = copytext(t, 2, length(t) + 1) src.temp = text("Limiting []'s DNA sequence...
[]
Status: [] units converting to [] units.

Emergency Abort", M.name, t, length(t), src.prog_p2, src) switch(src.prog_p3) if("UI") M.primary.uni_identity = t if("SE") M.primary.struc_enzyme = t if("UE") M.primary.use_enzyme = t if("SI") M.primary.spec_identity = t else else src.temp = "Process terminated due to lack of occupant in DNA chamber." src.status = null else if (src.status == "dna_replace") if (istype(M, /mob)) var/t = null switch(src.prog_p1) if("UI") t = M.primary.uni_identity if("SE") t = M.primary.struc_enzyme if("UE") t = M.primary.use_enzyme if("SI") t = M.primary.spec_identity else if (!( src.prog_p4 )) src.prog_p4 = 1 else src.prog_p4++ if ((src.prog_p4 > length(t) || src.prog_p4 > length(src.prog_p2))) src.temp = "Replacement complete" src.status = null else t = text("[][][]", copytext(t, 1, src.prog_p4), copytext(src.prog_p2, src.prog_p4, src.prog_p4 + 1), (src.prog_p4 < length(t) ? copytext(t, src.prog_p4 + 1, length(t) + 1) : null)) src.temp = text("Replacing []'s DNA sequence...
[]
Target: []
Status: At position []

Emergency Abort", M.name, t, src.prog_p2, src.prog_p4, src) switch(src.prog_p1) if("UI") M.primary.uni_identity = t if("SE") M.primary.struc_enzyme = t if("UE") M.primary.use_enzyme = t if("SI") M.primary.spec_identity = t else else src.temp = "Process terminated due to lack of occupant in DNA chamber." src.status = null else if (src.status == "dna_add") if (istype(M, /mob)) var/t = null switch(src.prog_p1) if("UI") t = M.primary.uni_identity if("SE") t = M.primary.struc_enzyme if("UE") t = M.primary.use_enzyme if("SI") t = M.primary.spec_identity else if (!( src.prog_p4 )) src.prog_p4 = 1 else src.prog_p4++ if (src.prog_p4 > length(src.prog_p2)) src.temp = "Addition complete" src.status = null else t = text("[][]", t, copytext(src.prog_p2, src.prog_p4, src.prog_p4 + 1)) src.temp = text("Adding to []'s DNA sequence...
[]
Adding: []
Position: []

Emergency Abort", M.name, t, src.prog_p2, src.prog_p4, src) switch(src.prog_p1) if("UI") M.primary.uni_identity = t if("SE") M.primary.struc_enzyme = t if("UE") M.primary.use_enzyme = t if("SI") M.primary.spec_identity = t else else src.temp = "Process terminated due to lack of occupant in DNA chamber." src.status = null else src.status = null src.temp = "Unknown system error." src.updateDialog() return /obj/machinery/scan_console/attack_paw(user as mob) return src.attack_hand(user) /obj/machinery/scan_console/attack_ai(user as mob) return src.attack_hand(user) /obj/machinery/scan_console/attack_hand(user as mob) if(..()) return var/dat if (src.temp) dat = text("[]

Clear Message", src.temp, src) else if (src.connected) var/mob/occupant = src.connected.occupant dat = "Occupant Statistics:
" if (occupant) var/t1 switch(occupant.stat) if(0) t1 = "Conscious" if(1) t1 = "Unconscious" else t1 = "*dead*" dat += text("[]\tHealth %: [] ([])

", (occupant.health > 50 ? "" : ""), occupant.health, t1) else dat += "The scanner is empty.
" if (!( src.connected.locked )) dat += text("Lock (Unlocked)
", src) else dat += text("Unlock (Locked)
", src) dat += text("Disk: []
\n[]
\n[]
", src, (src.scan ? text("[]", src.scan.name) : "----------"), (src.scan ? text("Upload Data", src) : "No disk to upload"), ((src.data || src.func || src.special) ? text("Clear Data
Execute Data
Function Type: [][]
Data: []", src, src, src.func, (src.special ? text("-[]", src.special) : null), src.data) : "No data uploaded")) dat += text("

Close", user) user << browse(dat, "window=scanner;size=400x500") onclose(user, "scanner") return /obj/machinery/scan_console/Topic(href, href_list) if(..()) return if ((usr.contents.Find(src) || (get_dist(src, usr) <= 1 || usr.telekinesis == 1) && istype(src.loc, /turf)) || (istype(usr, /mob/living/silicon/ai))) usr.machine = src if (href_list["locked"]) if ((src.connected && src.connected.occupant)) src.connected.locked = !( src.connected.locked ) if (href_list["scan"]) if (src.scan) src.scan.loc = src.loc src.scan = null else var/obj/item/I = usr.equipped() if (istype(I, /obj/item/weapon/card/data)) usr.drop_item() I.loc = src src.scan = I if (href_list["u_dat"]) if ((src.scan && !( src.status ))) if ((src.scan.function && src.scan.function != "storage")) src.func = src.scan.function src.special = src.scan.special if (src.scan.data) src.data = src.scan.data else src.temp = "No disk found or core data access lock out!" if (href_list["c_dat"]) if (!src.status) src.func = null src.data = null src.special = null else src.temp = "No disk found or core data access lock out!" if (href_list["clear"]) src.temp = null if (href_list["abort"]) src.status = null if (href_list["e_dat"]) if (!( src.status )) src.status = "load" src.temp = "Loading..." src.add_fingerprint(usr) src.updateUsrDialog() return /obj/machinery/restruct/allow_drop() return 0 /obj/machinery/restruct/verb/eject() set src in oview(1) if (usr.stat != 0) return src.go_out() add_fingerprint(usr) return /obj/machinery/restruct/verb/operate() set src in oview(1) src.add_fingerprint(usr) if ((src.occupant && src.occupant.primary)) switch(src.occupant.primary.spec_identity) if("5BDFE293BA5500F9FFFD500AAFFE") if (!istype(src.occupant, /mob/living/carbon/human)) for(var/obj/O in src.occupant) del(O) var/mob/living/carbon/human/O = new /mob/living/carbon/human( src ) if(ticker.killer == src.occupant) O.memory = src.occupant.memory ticker.killer = O var/mob/M = src.occupant O.start = 1 O.primary = M.primary M.primary = null var/t1 = hex2num(copytext(O.primary.uni_identity, 25, 28)) if (t1 < 125) O.gender = MALE else O.gender = FEMALE M << "Genetic Transversal Complete!" if (M.client) M << "Transferring..." M.client.mob = O O << "Neural Sequencing Complete!" O.loc = src src.occupant = O //M = null del(M) src.occupant = O src.occupant << "Done!" if("2B6696D2B127E5A4") if (!istype(src.occupant, /mob/living/carbon/monkey)) for(var/obj/O in src.occupant) del(O) var/mob/living/carbon/monkey/O = new /mob/living/carbon/monkey(src) if(ticker.killer == src.occupant) O.memory = src.occupant.memory ticker.killer = O var/mob/M = src.occupant O.start = 1 O.primary = M.primary M.primary = null M << "Genetic Transversal Complete!" if (M.client) M << "Transferring..." M.client.mob = O O << "Neural Sequencing Complete!" O.loc = src O << "Genetic Transversal Complete!" src.occupant = O del(M) O.name = text("monkey ([])", copytext(md5(src.occupant.primary.uni_identity), 2, 6)) src.occupant << "Done!" else if (istype(src.occupant, /mob/living/carbon/human)) var/mob/living/carbon/human/H = src.occupant var/speak = (length(H.primary.struc_enzyme) >= 25 ? hex2num(copytext(H.primary.struc_enzyme, 22, 25)) : 9999) var/ears = (length(H.primary.struc_enzyme) >= 10 ? hex2num(copytext(H.primary.struc_enzyme, 7, 10)) : 9999) var/vision = (length(H.primary.struc_enzyme) >= 16 ? hex2num(copytext(H.primary.struc_enzyme, 13, 16)) : 1) var/mental1 = (length(H.primary.struc_enzyme) >= 31 ? hex2num(copytext(H.primary.struc_enzyme, 28, 31)) : 1) var/mental2 = (length(H.primary.struc_enzyme) >= 28 ? hex2num(copytext(H.primary.struc_enzyme, 25, 28)) : 1) var/speak2 = (length(H.primary.struc_enzyme) >= 22 ? hex2num(copytext(H.primary.struc_enzyme, 19, 22)) : 1) H.sdisabilities = 0 H.disabilities = 0 if (speak < 3776) H.disabilities = H.disabilities | 4 else if (speak > 3776) H.sdisabilities = H.sdisabilities | 2 if (speak2 < 2640) H.disabilities = H.disabilities | 16 if (ears > 3226) H.sdisabilities = H.sdisabilities | 4 if (vision < 1447) H.sdisabilities = H.sdisabilities | 1 else if (vision > 1447) H.disabilities = H.disabilities | 1 if (mental1 < 1742) H.disabilities = H.disabilities | 2 if (mental2 < 1452) H.disabilities = H.disabilities | 8 var/t1 = null if (length(H.primary.uni_identity) >= 20) t1 = copytext(H.primary.uni_identity, 19, 21) if (hex2num(t1) > 127) H.gender = FEMALE else H.gender = MALE else H.gender = NEUTER if (length(H.primary.uni_identity) >= 18) t1 = copytext(H.primary.uni_identity, 17, 19) H.ns_tone = hex2num(t1) H.ns_tone = -H.ns_tone + 35 else H.ns_tone = 1 H.ns_tone = -H.ns_tone + 35 if (length(H.primary.uni_identity) >= 16) t1 = copytext(H.primary.uni_identity, 15, 17) H.b_eyes = hex2num(t1) else H.b_eyes = 255 if (length(H.primary.uni_identity) >= 14) t1 = copytext(H.primary.uni_identity, 13, 15) H.g_eyes = hex2num(t1) else H.g_eyes = 255 if (length(H.primary.uni_identity) >= 12) t1 = copytext(H.primary.uni_identity, 11, 13) H.r_eyes = hex2num(t1) else H.r_eyes = 255 if (length(H.primary.uni_identity) >= 10) t1 = copytext(H.primary.uni_identity, 9, 11) H.nb_hair = hex2num(t1) else H.nb_hair = 255 if (length(H.primary.uni_identity) >= 8) t1 = copytext(H.primary.uni_identity, 7, 9) H.ng_hair = hex2num(t1) else H.ng_hair = 255 if (length(H.primary.uni_identity) >= 6) t1 = copytext(H.primary.uni_identity, 5, 7) H.nr_hair = hex2num(t1) else H.nr_hair = 255 H.r_hair = H.nr_hair H.g_hair = H.ng_hair H.b_hair = H.nb_hair H.s_tone = H.ns_tone H.update_face() H.update_body() if (reg_dna[H.primary.uni_identity]) H.real_name = reg_dna[H.primary.uni_identity] else var/i while (!i) var/randomname if (src.gender == MALE) randomname = capitalize(pick(first_names_male) + " " + capitalize(pick(last_names))) else randomname = capitalize(pick(first_names_female) + " " + capitalize(pick(last_names))) if (findname(randomname)) continue else H.real_name = randomname i++ reg_dna[H.primary.uni_identity] = H.real_name H << text("\red Your name is now [].", H.real_name) return /obj/machinery/restruct/verb/move_inside() set src in oview(1) if (usr.stat != 0) return if (src.occupant) usr << "\blue The scanner is already occupied!" return if (usr.abiotic()) usr << "\blue Subject cannot have abiotic items on." return usr.stop_pulling() usr.client.perspective = EYE_PERSPECTIVE usr.client.eye = src usr.loc = src src.occupant = usr src.icon_state = "restruct_1" for(var/obj/O in src) //O = null del(O) //Foreach goto(124) src.add_fingerprint(usr) return /obj/machinery/restruct/relaymove(mob/user as mob) if (user.stat) return src.go_out() return /obj/machinery/restruct/attackby(obj/item/weapon/grab/G as obj, user as mob) if(..()) return if ((!( istype(G, /obj/item/weapon/grab) ) || !( ismob(G.affecting) ))) return if (src.occupant) user << "\blue The machine is already occupied!" return if (G.affecting.abiotic()) user << "\blue Subject cannot have abiotic items on." return var/mob/M = G.affecting if (M.client) M.client.perspective = EYE_PERSPECTIVE M.client.eye = src M.loc = src src.occupant = M src.icon_state = "restruct_1" for(var/obj/O in src) O.loc = src.loc //Foreach goto(154) src.add_fingerprint(user) //G = null del(G) return /obj/machinery/restruct/proc/go_out() if ((!( src.occupant ) || src.locked)) return for(var/obj/O in src) O.loc = src.loc //Foreach goto(30) if (src.occupant.client) src.occupant.client.eye = src.occupant.client.mob src.occupant.client.perspective = MOB_PERSPECTIVE src.occupant.loc = src.loc src.occupant = null src.icon_state = "restruct_0" return /obj/machinery/restruct/ex_act(severity) switch(severity) if(1.0) for(var/atom/movable/A as mob|obj in src) A.loc = src.loc ex_act(severity) del(src) return if(2.0) if (prob(50)) for(var/atom/movable/A as mob|obj in src) A.loc = src.loc ex_act(severity) del(src) return if(3.0) if (prob(25)) for(var/atom/movable/A as mob|obj in src) A.loc = src.loc ex_act(severity) del(src) return else return /obj/machinery/restruct/blob_act() if(prob(75)) for(var/atom/movable/A as mob|obj in src) A.loc = src.loc del(src)