mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2026-01-03 14:04:41 +00:00
MAJOR UPDATE: Detective/Fingerprints update
bugfix for wardrobes blood type is now handled by datum/dna, and blood_DNA for atoms is a list of list, each sub list containing DNA and blood-type. (This allows multiple blood splatters) added BS12 give command and explosives Map update to remove blob spawn.
This commit is contained in:
@@ -38,7 +38,7 @@
|
||||
U.contents.Remove(O)
|
||||
user << "You put the [O] inside the [src]."
|
||||
icon_state = "evidence"
|
||||
src.underlays += O
|
||||
src.overlays += O
|
||||
desc = "An evidence bag containing \a [O]. [O.desc]"
|
||||
O.loc = src
|
||||
w_class = O.w_class
|
||||
@@ -49,7 +49,7 @@
|
||||
if (src.contents.len > 0)
|
||||
var/obj/item/I = src.contents[1]
|
||||
user << "You take the [I] out of the [src]."
|
||||
src.underlays -= I
|
||||
src.overlays -= I
|
||||
I.loc = get_turf(user.loc)
|
||||
w_class = 1
|
||||
src.icon_state = "evidenceobj"
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
icon_state = "wardrobe"
|
||||
item_state = "wardrobe"
|
||||
w_class = 4
|
||||
layer = 2.9
|
||||
var
|
||||
descriptor = "various clothing."
|
||||
|
||||
@@ -34,7 +35,7 @@
|
||||
examine()
|
||||
set src in usr
|
||||
..()
|
||||
usr << "It claims to contain [contents.len ? descriptor : descriptor + "...but it looks empty"]"
|
||||
usr << "It claims to contain [contents.len ? descriptor : descriptor + "... but it looks empty"]"
|
||||
return
|
||||
|
||||
update_icon()
|
||||
@@ -481,7 +482,6 @@
|
||||
new /obj/item/weapon/pen(src)
|
||||
new /obj/item/weapon/clipboard(src)
|
||||
new /obj/item/device/pda/quartermaster(src)
|
||||
new /obj/item/clothing/gloves/black(src)
|
||||
new /obj/item/clothing/glasses/sunglasses(src)
|
||||
new /obj/item/device/radio/headset/heads/qm(src)
|
||||
new /obj/item/clothing/shoes/black(src)
|
||||
@@ -497,7 +497,6 @@
|
||||
new /obj/item/weapon/storage/box(BPK)
|
||||
new /obj/item/weapon/pen(src)
|
||||
new /obj/item/device/pda/quartermaster(src)
|
||||
new /obj/item/clothing/gloves/black(src)
|
||||
new /obj/item/device/radio/headset/headset_cargo(src)
|
||||
new /obj/item/clothing/shoes/black(src)
|
||||
new /obj/item/clothing/under/rank/cargo(src)
|
||||
@@ -518,7 +517,6 @@
|
||||
new /obj/item/weapon/pickaxe(src)
|
||||
new /obj/item/weapon/crowbar(src)
|
||||
new /obj/item/clothing/glasses/meson(src)
|
||||
new /obj/item/clothing/gloves/black(src)
|
||||
new /obj/item/device/radio/headset/headset_mine(src)
|
||||
new /obj/item/clothing/shoes/black(src)
|
||||
new /obj/item/clothing/under/rank/miner(src)
|
||||
|
||||
@@ -53,20 +53,36 @@ atom/proc/add_fibers(mob/living/carbon/human/M)
|
||||
obj/machinery/computer/forensic_scanning
|
||||
name = "High-Res Forensic Scanning Computer"
|
||||
icon_state = "forensic"
|
||||
var/obj/item/scanning
|
||||
var/temp = ""
|
||||
var/canclear = 1
|
||||
var/authenticated = 0
|
||||
var
|
||||
obj/item/scanning
|
||||
temp = ""
|
||||
canclear = 1
|
||||
authenticated = 0
|
||||
|
||||
var/scan_data = ""
|
||||
var/scan_name = ""
|
||||
var/scan_process = 0
|
||||
//Here's the structure for files: each entry is a list, and entry one in that list is the string of their
|
||||
//full and scrambled fingerprint. This acts as the method to arrange evidence. Each subsequent entry is list
|
||||
//in the form (from entries):
|
||||
// 1: Object
|
||||
// 2: All prints on the object
|
||||
// 3: All fibers on the object
|
||||
// 4: All blood on the object
|
||||
//This is then used to show what objects were used to "find" the full print, as well as the fibers on it.
|
||||
list/files = list()
|
||||
//This holds objects (1) without prints, and their fibers(2) and blood(3).
|
||||
list/misc = list()
|
||||
obj/item/weapon/f_card/card
|
||||
|
||||
scan_data = ""
|
||||
scan_name = ""
|
||||
scan_process = 0
|
||||
|
||||
req_access = list(access_forensics_lockers)
|
||||
|
||||
|
||||
attack_ai(mob/user)
|
||||
return attack_hand(user)
|
||||
|
||||
|
||||
attack_hand(mob/user)
|
||||
if(..())
|
||||
return
|
||||
@@ -100,8 +116,198 @@ obj/machinery/computer/forensic_scanning
|
||||
dat += "<br><a href='?src=\ref[src];operation=erase'>{Erase Data}</a>"
|
||||
user << browse(dat,"window=scanner")
|
||||
onclose(user,"scanner")
|
||||
|
||||
|
||||
ex_act()
|
||||
return
|
||||
|
||||
|
||||
proc/add_data_scanner(var/obj/item/device/detective_scanner/W as obj)
|
||||
for(var/i = 1, i < W.stored.len, i++)
|
||||
var/list/data = W.stored[i]
|
||||
var/atom/A = new
|
||||
A = W
|
||||
world << "[A] at [A.loc]"
|
||||
A.fingerprints = data[2]
|
||||
A.suit_fibers = data[3]
|
||||
A.blood_DNA = data[4]
|
||||
add_data(A,1)
|
||||
del(A)
|
||||
|
||||
|
||||
proc/add_data(var/atom/A, var/override = 0)
|
||||
//What follows is massive. It cross references all stored data in the scanner with the other stored data,
|
||||
//and what is already in the computer. Not sure how bad the lag may/may not be.
|
||||
if((!A.fingerprints || A.fingerprints.len < 1) && !override) //No prints
|
||||
var/merged = 0
|
||||
for(var/i = 1, i < misc.len, i++) //Lets see if we can find it.
|
||||
var/list/templist = misc[i]
|
||||
var/check = templist[1]
|
||||
if(check == A) //There it is!
|
||||
merged = 1
|
||||
var/list/fibers = templist[2]
|
||||
if(A.suit_fibers)
|
||||
for(var/j = 1, j < A.suit_fibers.len, j++) //Fibers~~~
|
||||
var/test_print1 = A.suit_fibers[j]
|
||||
var/found = 0
|
||||
for(var/k = 1, k <= fibers.len, k++) //Lets see if the fiber is already in there
|
||||
var/test_print2 = fibers[k]
|
||||
if(test_print2 == test_print1) //It is! Do nothing!
|
||||
found = 1
|
||||
break
|
||||
if(!found) //It isn't! Add!
|
||||
fibers += A.suit_fibers[j]
|
||||
var/list/blood = templist[3]
|
||||
if(A.blood_DNA)
|
||||
for(var/j = 1, j < A.blood_DNA.len, j++) //Blood~~~
|
||||
var/test_print1 = A.blood_DNA[j]
|
||||
var/found = 0
|
||||
for(var/k = 1, k <= blood.len, k++) //Lets see if the fiber is already in there
|
||||
var/test_print2 = blood[k]
|
||||
if(test_print2 == test_print1) //It is! Do nothing!
|
||||
found = 1
|
||||
break
|
||||
if(!found) //It isn't! Add!
|
||||
blood += A.blood_DNA[j]
|
||||
var/list/sum_list[3] //Pack it back up!
|
||||
sum_list[1] = A
|
||||
sum_list[2] = fibers
|
||||
sum_list[3] = blood
|
||||
misc[i] = sum_list //Store it!
|
||||
break //We found it, we're done here.
|
||||
if(!merged) //Nope! Guess we have to add it!
|
||||
var/list/templist[4]
|
||||
templist[1] = A
|
||||
templist[2] = A.suit_fibers
|
||||
templist[3] = A.blood_DNA
|
||||
misc.len++
|
||||
misc[misc.len] = templist //Store it!
|
||||
return !merged
|
||||
else //Has prints.
|
||||
var/list/found_prints[A.fingerprints.len]
|
||||
for(var/i = 1, i < found_prints.len, i++)
|
||||
found_prints[i] = 0
|
||||
for(var/i = 1, i < files.len, i++) //Lets see if we can find the owner of the prints
|
||||
var/merged = 0
|
||||
var/list/perp_list = files[i]
|
||||
var/list/perp_prints = params2list(perp_list[1])
|
||||
var/perp = perp_prints[1]
|
||||
for(var/m = 1, m < A.fingerprints.len, m++) //Compare database prints with prints on object.
|
||||
var/list/test_prints_list = params2list(A.fingerprints[m])
|
||||
var/checker = test_prints_list[1]
|
||||
if(checker == perp) //Found 'em! Merge!
|
||||
found_prints[m] = 1
|
||||
for(var/n = 2, n < perp_list.len, n++) //Lets see if it is already in the database
|
||||
var/list/target = perp_list[n]
|
||||
if(target[1] == A) //Found the original object!
|
||||
merged = 1
|
||||
var/list/prints = target[2]
|
||||
if(A.fingerprints)
|
||||
for(var/j = 1, j < A.fingerprints.len, j++) //Fingerprints~~~
|
||||
var/list/print_test1 = params2list(A.fingerprints[j])
|
||||
var/test_print1 = print_test1[1]
|
||||
var/found = 0
|
||||
for(var/k = 1, k <= prints.len, k++) //Lets see if the print is already in there
|
||||
var/list/print_test2 = params2list(prints[k])
|
||||
var/test_print2 = print_test2[1]
|
||||
if(test_print2 == test_print1) //It is! Merge!
|
||||
prints[k] = test_print2 + "&" + stringmerge(print_test2[2],print_test1[2])
|
||||
found = 1
|
||||
break //We found it, we're done here.
|
||||
if(!found) //It isn't! Add!
|
||||
prints += A.fingerprints[j]
|
||||
var/list/fibers = target[3]
|
||||
if(A.suit_fibers)
|
||||
for(var/j = 1, j < A.suit_fibers.len, j++) //Fibers~~~
|
||||
var/test_print1 = A.suit_fibers[j]
|
||||
var/found = 0
|
||||
for(var/k = 1, k <= fibers.len, k++) //Lets see if the fiber is already in there
|
||||
var/test_print2 = fibers[k]
|
||||
if(test_print2 == test_print1) //It is! Do nothing!
|
||||
found = 1
|
||||
break //We found it, we're done here.
|
||||
if(!found) //It isn't! Add!
|
||||
fibers += A.suit_fibers[j]
|
||||
var/list/blood = target[4]
|
||||
if(A.blood_DNA)
|
||||
for(var/j = 1, j < A.blood_DNA.len, j++) //Blood~~~
|
||||
var/test_print1 = A.blood_DNA[j]
|
||||
var/found = 0
|
||||
for(var/k = 1, k <= blood.len, k++) //Lets see if the blood is already in there
|
||||
var/test_print2 = blood[k]
|
||||
if(test_print2 == test_print1) //It is! Do nothing!
|
||||
found = 1
|
||||
break //We found it, we're done here.
|
||||
if(!found) //It isn't! Add!
|
||||
blood += A.blood_DNA[j]
|
||||
var/list/sum_list[4] //Pack it back up!
|
||||
sum_list[1] = A
|
||||
sum_list[2] = prints
|
||||
sum_list[3] = fibers
|
||||
sum_list[4] = blood
|
||||
perp_list[n] = sum_list //Store it!
|
||||
files[i] = perp_list
|
||||
break //We found it, we're done here.
|
||||
if(merged)
|
||||
update_fingerprints(i) //Lets update the calculated sum of the stored prints.
|
||||
for(var/m = 1, m < found_prints.len, m++) //Uh Oh! A print wasn't used! New datapoint!
|
||||
if(found_prints.len[m] == 0)
|
||||
var/list/newperp[2]
|
||||
var/list/sum_list
|
||||
sum_list[1] = A
|
||||
sum_list[2] = A.fingerprints
|
||||
sum_list[3] = A.suit_fibers
|
||||
sum_list[4] = A.blood_DNA
|
||||
newperp[2] = sum_list
|
||||
newperp[1] = A.fingerprints[m]
|
||||
files.len++
|
||||
files[files.len] = newperp
|
||||
return
|
||||
|
||||
|
||||
proc/update_fingerprints(var/index) //I am tired, but this updates the master print, which is used to determine completion of a print.
|
||||
if(!index)
|
||||
return
|
||||
var/list/perp_list = files[1]
|
||||
var/list/perp_prints = params2list(perp_list[1])
|
||||
var/perp = perp_prints[1]
|
||||
var/list/found_prints = list()
|
||||
for(var/i = 2, i < perp_list.len, i++)
|
||||
var/list/test_list = perp_list[i]
|
||||
var/list/test_prints = test_list[2]
|
||||
for(var/j = 1, j < test_prints.len)
|
||||
var/list/test_list_2 = params2list(test_prints[j])
|
||||
var/test_prints_2 = test_list_2[1]
|
||||
if(test_prints_2 == perp)
|
||||
found_prints += test_list_2[2]
|
||||
break
|
||||
for(var/prints in found_prints)
|
||||
perp_prints[2] = stringmerge(perp_prints[2],prints)
|
||||
perp_list[1] = perp + "&" + perp_prints[2]
|
||||
files[1] = perp_list
|
||||
return
|
||||
|
||||
// attackby(var/obj/item/device/detective_scanner/W as obj, mob/user as mob)
|
||||
// ..()
|
||||
// if (istype(W, /obj/item/device/detective_scanner))
|
||||
//
|
||||
//What follows is massive. It cross references all stored data in the scanner with the other stored data,
|
||||
//and what is already in the computer. Not sure how bad the lag may/may not be.
|
||||
//
|
||||
// var/list/data = W.stored
|
||||
// if(files.len || misc.len)
|
||||
//
|
||||
//
|
||||
//
|
||||
// else
|
||||
//
|
||||
//
|
||||
// src.add_fingerprint(user)
|
||||
// if (W)
|
||||
// W.add_fingerprint(user)
|
||||
// return
|
||||
|
||||
|
||||
Topic(href,href_list)
|
||||
switch(href_list["operation"])
|
||||
if("login")
|
||||
@@ -135,7 +341,7 @@ obj/machinery/computer/forensic_scanning
|
||||
if(istype(I, /obj/item/weapon/evidencebag))
|
||||
scanning = I.contents[1]
|
||||
scanning.loc = src
|
||||
I.underlays = null
|
||||
I.overlays -= scanning
|
||||
I.icon_state = "evidenceobj"
|
||||
else
|
||||
scanning = I
|
||||
@@ -174,20 +380,20 @@ obj/machinery/computer/forensic_scanning
|
||||
scan_data = "<u>[scanning]</u><br><br>"
|
||||
if (scanning.blood_DNA)
|
||||
scan_data += "Blood Found:<br>"
|
||||
scan_data += "-Blood type: [scanning.blood_type]\nDNA: [scanning.blood_DNA]<br><br>"
|
||||
for(var/i = 1, i < scanning.blood_DNA.len, i++)
|
||||
var/list/templist = scanning.blood_DNA[i]
|
||||
scan_data += "-Blood type: [templist[2]]\nDNA: [templist[1]]<br><br>"
|
||||
else
|
||||
scan_data += "No Blood Found<br><br>"
|
||||
if (!( scanning.fingerprints ))
|
||||
if (!( scanning.fingerprints.len ))
|
||||
scan_data += "No Fingerprints Found<br><br>"
|
||||
else
|
||||
var/list/L = params2list(scanning.fingerprints)
|
||||
scan_data += "Isolated [L.len] Fingerprints:<br>"
|
||||
for(var/i in L)
|
||||
scan_data += "#[L.Find(i)] - [i]<br>"
|
||||
scan_data += "<br>"
|
||||
var/list/L = scanning.fingerprints
|
||||
scan_data += "Isolated [L.len] Fingerprints. Loaded into database.<br>"
|
||||
add_data(scanning)
|
||||
|
||||
if(!scanning.suit_fibers)
|
||||
if(istype(scanning,/obj/item/device/detective_scanner))
|
||||
if(!scanning.suit_fibers.len)
|
||||
/*if(istype(scanning,/obj/item/device/detective_scanner))
|
||||
var/obj/item/device/detective_scanner/scanner = scanning
|
||||
if(scanner.stored_name)
|
||||
scan_data += "Fibers/Materials Data - [scanner.stored_name]:<br>"
|
||||
@@ -195,21 +401,25 @@ obj/machinery/computer/forensic_scanning
|
||||
scan_data += "- [data]<br>"
|
||||
else
|
||||
scan_data += "No Fibers/Materials Data<br>"
|
||||
else
|
||||
else*/
|
||||
scan_data += "No Fibers/Materials Located<br>"
|
||||
else
|
||||
if(istype(scanning,/obj/item/device/detective_scanner))
|
||||
/*if(istype(scanning,/obj/item/device/detective_scanner))
|
||||
var/obj/item/device/detective_scanner/scanner = scanning
|
||||
if(scanner.stored_name)
|
||||
scan_data += "Fibers/Materials Data - [scanner.stored_name]:<br>"
|
||||
for(var/data in scanner.stored_fibers)
|
||||
scan_data += "- [data]<br>"
|
||||
else
|
||||
scan_data += "No Fibers/Materials Data<br>"
|
||||
scan_data += "No Fibers/Materials Data<br>"*/
|
||||
|
||||
scan_data += "Fibers/Materials Found:<br>"
|
||||
for(var/data in scanning.suit_fibers)
|
||||
scan_data += "- [data]<br>"
|
||||
if(istype(scanning,/obj/item/device/detective_scanner))
|
||||
scan_data += "<br><b>Data transfered from Scanner to Database.</b><br>"
|
||||
else if(!scanning.fingerprints.len)
|
||||
scan_data += "<br><b><a href='?src=\ref[src];operation=add'>Add to Database?</a></b><br>"
|
||||
else
|
||||
temp = "Scan Failed: No Object"
|
||||
|
||||
@@ -227,6 +437,11 @@ obj/machinery/computer/forensic_scanning
|
||||
scan_data = ""
|
||||
if("cancel")
|
||||
scan_process = 0
|
||||
if("add")
|
||||
if(scanning)
|
||||
add_data(scanning)
|
||||
else
|
||||
temp = "Data Transfer Failed: No Object."
|
||||
updateUsrDialog()
|
||||
|
||||
detective
|
||||
@@ -295,8 +510,8 @@ turf/proc/add_bloody_footprints(mob/living/carbon/human/M,leaving,d,info)
|
||||
if((leaving && T.icon_state == "steps2") || (!leaving && T.icon_state == "steps1"))
|
||||
T.desc = "These bloody footprints appear to have been made by [info]."
|
||||
if(istype(M,/mob/living/carbon/human))
|
||||
T.blood_DNA = M.dna.unique_enzymes
|
||||
T.blood_type = M.b_type
|
||||
T.blood_DNA.len++
|
||||
T.blood_DNA[T.blood_DNA.len] = list(M.dna.unique_enzymes,M.b_type)
|
||||
return
|
||||
var/obj/effect/decal/cleanable/blood/tracks/this = new(src)
|
||||
this.icon = 'footprints.dmi'
|
||||
@@ -307,8 +522,8 @@ turf/proc/add_bloody_footprints(mob/living/carbon/human/M,leaving,d,info)
|
||||
this.dir = d
|
||||
this.desc = "These bloody footprints appear to have been made by [info]."
|
||||
if(istype(M,/mob/living/carbon/human))
|
||||
this.blood_DNA = M.dna.unique_enzymes
|
||||
this.blood_type = M.b_type
|
||||
this.blood_DNA.len++
|
||||
this.blood_DNA[this.blood_DNA.len] = list(M.dna.unique_enzymes,M.b_type)
|
||||
|
||||
proc/get_tracks(mob/M)
|
||||
if(istype(M,/mob/living))
|
||||
|
||||
@@ -5,8 +5,7 @@
|
||||
var/list/fingerprints
|
||||
var/list/fingerprintshidden = new/list()
|
||||
var/fingerprintslast = null
|
||||
var/blood_DNA = null
|
||||
var/blood_type = null
|
||||
var/list/blood_DNA = null
|
||||
var/last_bumped = 0
|
||||
var/pass_flags = 0
|
||||
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
var/health = 100 //Might be a bit much, dono can always change later //Nerfed -Pete
|
||||
var/lastbang //
|
||||
var/lasttry = 0
|
||||
layer = 2.8
|
||||
|
||||
/obj/structure/closet/acloset
|
||||
name = "Strange closet"
|
||||
|
||||
@@ -49,8 +49,7 @@
|
||||
icon_state = "floor1"
|
||||
random_icon_states = list("floor1", "floor2", "floor3", "floor4", "floor5", "floor6", "floor7")
|
||||
var/list/viruses = list()
|
||||
blood_DNA = null
|
||||
blood_type = null
|
||||
blood_DNA = list()
|
||||
var/datum/disease2/disease/virus2 = null
|
||||
var/OriginalMob = null
|
||||
|
||||
|
||||
@@ -1512,3 +1512,15 @@ proc/get_opposite(var/checkdir)
|
||||
else //The lists disagree, Uh-oh!
|
||||
return 0
|
||||
return newtext
|
||||
|
||||
/proc/stringpercent(var/text,character = "*")
|
||||
//This proc returns the number of chars of the string that is the character
|
||||
//This is used for detective work to determine fingerprint completion.
|
||||
if(!text || !character)
|
||||
return 0
|
||||
var/count = 0
|
||||
for(var/i = 1, i < lentext(text), i++)
|
||||
var/a = copytext(text,i,i+1)
|
||||
if(a == character)
|
||||
count++
|
||||
return count
|
||||
@@ -88,7 +88,6 @@
|
||||
var/mob/living/carbon/human/H = M
|
||||
if (!istype(H.dna, /datum/dna))
|
||||
return 0
|
||||
world << md5(H.dna.uni_identity)
|
||||
if (H.gloves)
|
||||
if(src.fingerprintslast != H.key)
|
||||
src.fingerprintshidden += text("(Wearing gloves). Real name: [], Key: []",H.real_name, H.key)
|
||||
@@ -112,6 +111,8 @@
|
||||
new_prints = i
|
||||
prints = L[2]
|
||||
break
|
||||
else
|
||||
src.fingerprints[i] = L[1] + "&" + stars(L[2], rand(90,95))
|
||||
if(new_prints)
|
||||
src.fingerprints[new_prints] = list(text("[]&[]", md5(H.dna.uni_identity), stringmerge(prints,stars(md5(H.dna.uni_identity), rand(40,60)))))
|
||||
return 1
|
||||
@@ -139,8 +140,8 @@
|
||||
I.Blend(new /icon('blood.dmi', "itemblood"),ICON_MULTIPLY)
|
||||
I.Blend(new /icon(src.icon, src.icon_state),ICON_UNDERLAY)
|
||||
src.icon = I
|
||||
src.blood_DNA = M.dna.unique_enzymes
|
||||
src.blood_type = M.b_type
|
||||
src.blood_DNA.len++
|
||||
src.blood_DNA[src.blood_DNA.len] = list(M.dna.unique_enzymes, M.b_type)
|
||||
else if (istype(src, /turf/simulated))
|
||||
var/turf/simulated/source2 = src
|
||||
var/list/objsonturf = range(0,src)
|
||||
@@ -149,16 +150,16 @@
|
||||
if(istype(objsonturf[i],/obj/effect/decal/cleanable/blood))
|
||||
return
|
||||
var/obj/effect/decal/cleanable/blood/this = new /obj/effect/decal/cleanable/blood(source2)
|
||||
this.blood_DNA = M.dna.unique_enzymes
|
||||
this.blood_type = M.b_type
|
||||
this.blood_DNA.len++
|
||||
this.blood_DNA[this.blood_DNA.len] = list(M.dna.unique_enzymes, M.b_type)
|
||||
this.virus2 = M.virus2
|
||||
for(var/datum/disease/D in M.viruses)
|
||||
var/datum/disease/newDisease = new D.type
|
||||
this.viruses += newDisease
|
||||
newDisease.holder = this
|
||||
else if (istype(src, /mob/living/carbon/human))
|
||||
src.blood_DNA = M.dna.unique_enzymes
|
||||
src.blood_type = M.b_type
|
||||
src.blood_DNA.len++
|
||||
src.blood_DNA[src.blood_DNA.len] = list(M.dna.unique_enzymes,M.b_type)
|
||||
else
|
||||
return
|
||||
else
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
var/struc_enzymes = null
|
||||
var/uni_identity = null
|
||||
var/original_name = "Unknown"
|
||||
var/b_type
|
||||
var/b_type = "A+"
|
||||
|
||||
/datum/dna/proc/check_integrity()
|
||||
//Lazy.
|
||||
|
||||
@@ -53,7 +53,9 @@ Devices and Tools;
|
||||
/obj/item/weapon/storage/toolbox/syndicate:1:Fully Loaded Toolbox;
|
||||
/obj/item/weapon/aiModule/syndicate:7:Hacked AI Upload Module;
|
||||
/obj/item/device/radio/headset/traitor:3:Headset with Binary Translator;
|
||||
/obj/item/weapon/plastique:2:C-4;
|
||||
/obj/item/weapon/plastique:2:C-4 (Destroys walls);
|
||||
/obj/item/weapon/syndie/c4explosive:4:Low Power Explosive Charge, with Detonator;
|
||||
/obj/item/weapon/syndie/c4explosive/heavy:7:High (!) Power Explosive Charge, with Detonator;
|
||||
/obj/item/device/powersink:5:Powersink (DANGER!);
|
||||
/obj/machinery/singularity_beacon/syndicate:7:Singularity Beacon (DANGER!);
|
||||
Whitespace:Seperator;
|
||||
|
||||
@@ -82,7 +82,6 @@
|
||||
H.equip_if_possible(new /obj/item/clothing/under/rank/cargo(H), H.slot_w_uniform)
|
||||
H.equip_if_possible(new /obj/item/clothing/shoes/black(H), H.slot_shoes)
|
||||
H.equip_if_possible(new /obj/item/device/pda/quartermaster(H), H.slot_belt)
|
||||
H.equip_if_possible(new /obj/item/clothing/gloves/black(H), H.slot_gloves)
|
||||
H.equip_if_possible(new /obj/item/clothing/glasses/sunglasses(H), H.slot_glasses)
|
||||
H.equip_if_possible(new /obj/item/weapon/clipboard(H), H.slot_r_store)
|
||||
return 1
|
||||
@@ -104,7 +103,6 @@
|
||||
H.equip_if_possible(new /obj/item/clothing/under/rank/cargo(H), H.slot_w_uniform)
|
||||
H.equip_if_possible(new /obj/item/clothing/shoes/black(H), H.slot_shoes)
|
||||
H.equip_if_possible(new /obj/item/device/pda/quartermaster(H), H.slot_belt)
|
||||
H.equip_if_possible(new /obj/item/clothing/gloves/black(H), H.slot_gloves)
|
||||
return 1
|
||||
|
||||
|
||||
@@ -124,7 +122,6 @@
|
||||
H.equip_if_possible(new /obj/item/weapon/storage/backpack/industrial (H), H.slot_back)
|
||||
H.equip_if_possible(new /obj/item/clothing/under/rank/miner(H), H.slot_w_uniform)
|
||||
H.equip_if_possible(new /obj/item/clothing/shoes/black(H), H.slot_shoes)
|
||||
H.equip_if_possible(new /obj/item/clothing/gloves/black(H), H.slot_gloves)
|
||||
H.equip_if_possible(new /obj/item/weapon/crowbar(H), H.slot_in_backpack)
|
||||
H.equip_if_possible(new /obj/item/weapon/satchel(H), H.slot_in_backpack)
|
||||
return 1
|
||||
|
||||
@@ -805,8 +805,8 @@
|
||||
H.apply_damage(0.5*damage, BRUTE, "r_arm")
|
||||
|
||||
var/obj/effect/decal/cleanable/blood/B = new(src.loc)
|
||||
B.blood_DNA = H.dna.unique_enzymes
|
||||
B.blood_type = H.b_type
|
||||
B.blood_DNA.len++
|
||||
B.blood_DNA[B.blood_DNA.len] = list(H.dna.unique_enzymes, H.b_type)
|
||||
|
||||
bloodiness += 4
|
||||
|
||||
|
||||
@@ -555,8 +555,8 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology",
|
||||
R.word2 = w2
|
||||
R.word3 = w3
|
||||
R.check_icon()
|
||||
R.blood_DNA = H.dna.unique_enzymes
|
||||
R.blood_type = H.b_type
|
||||
R.blood_DNA.len++
|
||||
R.blood_DNA[R.blood_DNA.len] = list(H.dna.unique_enzymes, H.b_type)
|
||||
return
|
||||
else
|
||||
user << "The book seems full of illegible scribbles. Is this a joke?"
|
||||
@@ -601,8 +601,8 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology",
|
||||
var/obj/effect/rune/R = new /obj/effect/rune
|
||||
if(istype(user, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = user
|
||||
R.blood_DNA = H.dna.unique_enzymes
|
||||
R.blood_type = H.b_type
|
||||
R.blood_DNA.len++
|
||||
R.blood_DNA[R.blood_DNA.len] = list(H.dna.unique_enzymes, H.b_type)
|
||||
switch(r)
|
||||
if("teleport")
|
||||
var/list/words = list("ire", "ego", "nahlizet", "certum", "veri", "jatkaa", "balaq", "mgar", "karazet", "geeri")
|
||||
|
||||
@@ -898,7 +898,7 @@ var/list/sacrificed = list()
|
||||
culcount++
|
||||
if(culcount >= 5)
|
||||
for(var/obj/effect/rune/R in world)
|
||||
if(R.blood_DNA == src.blood_DNA && R.blood_type == src.blood_type)
|
||||
if(R.blood_DNA == src.blood_DNA)
|
||||
for(var/mob/living/M in orange(2,R))
|
||||
M.take_overall_damage(0,15)
|
||||
if (R.invisibility>M.see_invisible)
|
||||
@@ -908,7 +908,7 @@ var/list/sacrificed = list()
|
||||
var/turf/T = get_turf(R)
|
||||
T.hotspot_expose(700,125)
|
||||
for(var/obj/effect/decal/cleanable/blood/B in world)
|
||||
if(B.blood_DNA == src.blood_DNA && B.blood_type == src.blood_type)
|
||||
if(B.blood_DNA == src.blood_DNA)
|
||||
for(var/mob/living/M in orange(1,B))
|
||||
M.take_overall_damage(0,5)
|
||||
M << "\red Blood suddenly ignites, burning you!"
|
||||
|
||||
@@ -21,7 +21,6 @@
|
||||
if (i > 0)
|
||||
var/obj/effect/decal/cleanable/blood/b = new /obj/effect/decal/cleanable/blood/splatter(src.loc)
|
||||
b.blood_DNA = blood_DNA
|
||||
b.blood_type = blood_type
|
||||
b.OriginalMob = OriginalMob
|
||||
for(var/datum/disease/D in src.viruses)
|
||||
b.viruses += D
|
||||
|
||||
@@ -743,7 +743,9 @@
|
||||
else
|
||||
user << "\blue Blood found on [C]. Analysing..."
|
||||
spawn(15)
|
||||
user << "\blue Blood type: [C:blood_type]\nDNA: [C:blood_DNA]"
|
||||
for(var/i = 1, i < C:blood_DNA.len, i++)
|
||||
var/list/templist = C:blood_DNA[i]
|
||||
user << "\blue Blood type: [templist[2]]\nDNA: [templist[1]]"
|
||||
|
||||
if(4)
|
||||
for (var/mob/O in viewers(C, null))
|
||||
@@ -761,10 +763,9 @@
|
||||
if (!A.fingerprints)
|
||||
user << "\blue Unable to locate any fingerprints on [A]!"
|
||||
else
|
||||
var/list/L = params2list(A:fingerprints)
|
||||
user << "\blue Isolated [L.len] fingerprints."
|
||||
for(var/i in L)
|
||||
user << "\blue \t [i]"
|
||||
user << "\blue Isolated [A:fingerprints.len] fingerprints."
|
||||
// for(var/i in L)
|
||||
// user << "\blue \t [i]"
|
||||
|
||||
if(3)
|
||||
if(!isnull(A.reagents))
|
||||
|
||||
@@ -65,20 +65,14 @@ MASS SPECTROMETER
|
||||
icon_state = "forensic0"
|
||||
var/amount = 20.0
|
||||
var/printing = 0.0
|
||||
var/fibers_index = 0
|
||||
var/list/stored_fibers = list()
|
||||
var/list/stored_name = list()
|
||||
var/prints_index = 0
|
||||
var/list/stored_prints = list()
|
||||
var/list/prints_name = list()
|
||||
var/list/stored = list()
|
||||
w_class = 3.0
|
||||
item_state = "electronic"
|
||||
flags = FPRINT | TABLEPASS | ONBELT | CONDUCT | USEDELAY
|
||||
|
||||
|
||||
/obj/item/device/detective_scanner/attackby(obj/item/weapon/f_card/W as obj, mob/user as mob)
|
||||
attackby(obj/item/weapon/f_card/W as obj, mob/user as mob)
|
||||
..()
|
||||
|
||||
if (istype(W, /obj/item/weapon/f_card))
|
||||
if (W.fingerprints)
|
||||
return
|
||||
@@ -96,8 +90,7 @@ MASS SPECTROMETER
|
||||
W.add_fingerprint(user)
|
||||
return
|
||||
|
||||
/obj/item/device/detective_scanner/attack_self(mob/user as mob)
|
||||
|
||||
attack_self(mob/user as mob)
|
||||
src.printing = !( src.printing )
|
||||
if(src.printing)
|
||||
user << "\blue Printing turned on"
|
||||
@@ -107,8 +100,7 @@ MASS SPECTROMETER
|
||||
add_fingerprint(user)
|
||||
return
|
||||
|
||||
/obj/item/device/detective_scanner/attack(mob/living/carbon/human/M as mob, mob/user as mob)
|
||||
|
||||
attack(mob/living/carbon/human/M as mob, mob/user as mob)
|
||||
if (!ishuman(M))
|
||||
user << "\red [M] is not human and cannot have the fingerprints."
|
||||
return 0
|
||||
@@ -134,56 +126,129 @@ MASS SPECTROMETER
|
||||
else
|
||||
user << "\blue Blood found on [M]. Analysing..."
|
||||
spawn(15)
|
||||
user << "\blue Blood type: [M.blood_type]\nDNA: [M.blood_DNA]"
|
||||
for(var/i = 1, i < M.blood_DNA.len, i++)
|
||||
var/list/templist = M.blood_DNA[i]
|
||||
user << "\blue Blood type: [templist[2]]\nDNA: [templist[1]]"
|
||||
return
|
||||
|
||||
/obj/item/device/detective_scanner/afterattack(atom/A as mob|obj|turf|area, mob/user as mob)
|
||||
afterattack(atom/A as mob|obj|turf|area, mob/user as mob)
|
||||
if(src.loc != user)
|
||||
return 0
|
||||
src.add_fingerprint(user)
|
||||
if (istype(A, /obj/effect/decal/cleanable/blood) || istype(A, /obj/effect/rune))
|
||||
if(A.blood_DNA)
|
||||
user << "\blue Blood type: [A.blood_type]\nDNA: [A.blood_DNA]"
|
||||
if(!isnull(A.blood_DNA.len))
|
||||
for(var/i = 1, i < A.blood_DNA.len, i++)
|
||||
var/list/templist = A.blood_DNA[i]
|
||||
user << "\blue Blood type: [templist[2]]\nDNA: [templist[1]]"
|
||||
return
|
||||
if (!( A.fingerprints ) && !(A.suit_fibers) && !(A.blood_DNA))
|
||||
user << "\blue Unable to locate any fingerprints, materials, fibers, or fingerprints on [A]!"
|
||||
user << "\blue Unable to locate any fingerprints, materials, fibers, or blood on [A]!"
|
||||
return 0
|
||||
else if (A.blood_DNA)
|
||||
user << "\blue Blood found on [A]. Analysing..."
|
||||
sleep(15)
|
||||
user << "\blue Blood type: [A.blood_type]\nDNA: [A.blood_DNA]"
|
||||
var/duplicate = add_data(A)
|
||||
if(duplicate)
|
||||
user << "\blue Blood already in memory."
|
||||
for(var/i = 1, i < A.blood_DNA.len, i++)
|
||||
var/list/templist = A.blood_DNA[i]
|
||||
user << "\blue Blood type: [templist[2]]\nDNA: [templist[1]]"
|
||||
else
|
||||
user << "\blue No blood found on [A]."
|
||||
user << "\blue No Blood Located"
|
||||
if(!( A.fingerprints ))
|
||||
user << "\blue Unable to locate any fingerprints on [A]!"
|
||||
user << "\blue No Fingerprints Located."
|
||||
else
|
||||
var/list/L = params2list(A.fingerprints)
|
||||
stored_prints[prints_index] = L
|
||||
prints_name[prints_index] = A.name
|
||||
user << text("\blue Isolated [L.len] fingerprints. Stored in memory.")
|
||||
user << text("\blue Isolated [A.fingerprints.len] fingerprints: Data Stored: Scan with Hi-Res Forensic Scanner to retrieve.")
|
||||
var/duplicate = add_data(A)
|
||||
if(duplicate)
|
||||
user << "\blue Figerprints already in memory."
|
||||
if(!A.suit_fibers)
|
||||
user << "\blue No Fibers/Materials Located."
|
||||
else
|
||||
user << "\blue Fibers/Materials Data Stored: Scan with Hi-Res Forensic Scanner to retrieve."
|
||||
stored_fibers[fibers_index] = A.suit_fibers
|
||||
stored_name[fibers_index] = A.name
|
||||
// else
|
||||
// if ((src.amount < 1 && src.printing))
|
||||
// user << "\blue Fingerprints found. Need more cards to print."
|
||||
// src.printing = 0
|
||||
// src.icon_state = text("forensic[]", src.printing)
|
||||
// if (src.printing)
|
||||
// src.amount--
|
||||
// var/obj/item/weapon/f_card/F = new /obj/item/weapon/f_card( user.loc )
|
||||
// F.amount = 1
|
||||
// F.fingerprints = A.fingerprints
|
||||
// F.icon_state = "fingerprint1"
|
||||
// user << "\blue Done printing."
|
||||
// for(var/i in L)
|
||||
// user << text("\blue \t [i]")
|
||||
// //Foreach goto(186)
|
||||
var/duplicate = add_data(A)
|
||||
if(duplicate)
|
||||
user << "\blue Fibers/Materials already in memory."
|
||||
// else
|
||||
// if ((src.amount < 1 && src.printing))
|
||||
// user << "\blue Fingerprints found. Need more cards to print."
|
||||
// src.printing = 0
|
||||
// src.icon_state = text("forensic[]", src.printing)
|
||||
// if (src.printing)
|
||||
// src.amount--
|
||||
// var/obj/item/weapon/f_card/F = new /obj/item/weapon/f_card( user.loc )
|
||||
// F.amount = 1
|
||||
// F.fingerprints = A.fingerprints
|
||||
// F.icon_state = "fingerprint1"
|
||||
// user << "\blue Done printing."
|
||||
// for(var/i in L)
|
||||
// user << text("\blue \t [i]")
|
||||
// //Foreach goto(186)
|
||||
return
|
||||
|
||||
proc/add_data(atom/A as mob|obj|turf|area)
|
||||
var/merged = 0
|
||||
for(var/i = 1, i < stored.len, i++) //Lets see if the object is already in there!
|
||||
var/list/temp = stored[i]
|
||||
var/checker = temp[1]
|
||||
if(checker == A) //It is! Merge!
|
||||
merged = 1
|
||||
var/list/prints = temp[2]
|
||||
if(A.fingerprints)
|
||||
for(var/j = 1, j < A.fingerprints.len, j++) //Fingerprints~~~
|
||||
var/list/print_test1 = params2list(A.fingerprints[j])
|
||||
var/test_print1 = print_test1[1]
|
||||
var/found = 0
|
||||
for(var/k = 1, k <= prints.len, k++) //Lets see if the print is already in there
|
||||
var/list/print_test2 = params2list(prints[k])
|
||||
var/test_print2 = print_test2[1]
|
||||
if(test_print2 == test_print1) //It is! Merge!
|
||||
prints[k] = test_print2 + "&" + stringmerge(print_test2[2],print_test1[2])
|
||||
found = 1
|
||||
break //We found it, we're done here.
|
||||
if(!found) //It isn't! Add!
|
||||
prints += A.fingerprints[j]
|
||||
var/list/fibers = temp[3]
|
||||
if(A.suit_fibers)
|
||||
for(var/j = 1, j < A.suit_fibers.len, j++) //Fibers~~~
|
||||
var/test_print1 = A.suit_fibers[j]
|
||||
var/found = 0
|
||||
for(var/k = 1, k <= fibers.len, k++) //Lets see if the fiber is already in there
|
||||
var/test_print2 = fibers[k]
|
||||
if(test_print2 == test_print1) //It is! Do nothing!
|
||||
found = 1
|
||||
break //We found it, we're done here.
|
||||
if(!found) //It isn't! Add!
|
||||
fibers += A.suit_fibers[j]
|
||||
var/list/blood = temp[4]
|
||||
if(A.blood_DNA)
|
||||
for(var/j = 1, j < A.blood_DNA.len, j++) //Blood~~~
|
||||
var/test_print1 = A.blood_DNA[j]
|
||||
var/found = 0
|
||||
for(var/k = 1, k <= blood.len, k++) //Lets see if the blood is already in there
|
||||
var/test_print2 = blood[k]
|
||||
if(test_print2 == test_print1) //It is! Do nothing!
|
||||
found = 1
|
||||
break //We found it, we're done here.
|
||||
if(!found) //It isn't! Add!
|
||||
blood += A.blood_DNA[j]
|
||||
var/list/sum_list[4] //Pack it back up!
|
||||
sum_list[1] = A
|
||||
sum_list[2] = prints
|
||||
sum_list[3] = fibers
|
||||
sum_list[4] = blood
|
||||
stored[i] = sum_list //Store it!
|
||||
break //We found it, we're done here.
|
||||
if(!merged) //Uh, oh! New data point!
|
||||
var/list/sum_list[4] //Pack it back up!
|
||||
sum_list[1] = A
|
||||
sum_list[2] = A.fingerprints
|
||||
sum_list[3] = A.suit_fibers
|
||||
sum_list[4] = A.blood_DNA
|
||||
stored.len++
|
||||
stored[stored.len] = sum_list
|
||||
return !merged
|
||||
|
||||
|
||||
/obj/item/device/healthanalyzer
|
||||
name = "Health Analyzer"
|
||||
@@ -198,7 +263,7 @@ MASS SPECTROMETER
|
||||
m_amt = 200
|
||||
origin_tech = "magnets=1;biotech=1"
|
||||
|
||||
/obj/item/device/healthanalyzer/attack(mob/M as mob, mob/user as mob)
|
||||
attack(mob/M as mob, mob/user as mob)
|
||||
if ((user.mutations & CLUMSY || user.getBrainLoss() >= 60) && prob(50))
|
||||
user << text("\red You try to analyze the floor's vitals!")
|
||||
for(var/mob/O in viewers(M, null))
|
||||
|
||||
@@ -51,9 +51,8 @@
|
||||
viruus.holder = gib
|
||||
viruus.spread_type = CONTACT_FEET
|
||||
if(MobDNA)
|
||||
gib.blood_DNA = MobDNA.unique_enzymes
|
||||
if(MobDNA.b_type)
|
||||
gib.blood_type = MobDNA.b_type
|
||||
gib.blood_DNA.len++
|
||||
gib.blood_DNA[gib.blood_DNA.len] = list(MobDNA.unique_enzymes, MobDNA.b_type)
|
||||
if(MobDNA.original_name != "Unknown")
|
||||
gib.OriginalMob = MobDNA.original_name
|
||||
var/list/directions = gibdirections[i]
|
||||
|
||||
@@ -82,7 +82,6 @@
|
||||
|
||||
/obj/item/stack/proc/copy_evidences(obj/item/stack/from as obj)
|
||||
src.blood_DNA = from.blood_DNA
|
||||
src.blood_type = from.blood_type
|
||||
src.fingerprints = from.fingerprints
|
||||
src.fingerprintshidden = from.fingerprintshidden
|
||||
src.fingerprintslast = from.fingerprintslast
|
||||
|
||||
@@ -1690,7 +1690,7 @@
|
||||
dat += "<table cellspacing=5><tr><th>Name</th><th>DNA</th><th>Blood Type</th></tr>"
|
||||
for(var/mob/living/carbon/human/H in world)
|
||||
if(H.dna && H.ckey)
|
||||
dat += "<tr><td>[H]</td><td>[H.dna.unique_enzymes]</td><td>[H.b_type]</td></tr>"
|
||||
dat += "<tr><td>[H]</td><td>[H.dna.unique_enzymes]</td><td>[H.dna.b_type]</td></tr>"
|
||||
dat += "</table>"
|
||||
usr << browse(dat, "window=DNA;size=440x410")
|
||||
if("fingerprints")
|
||||
|
||||
@@ -21,7 +21,12 @@
|
||||
|
||||
var/list/replacechars = list("'","\"",">","<","(",")")
|
||||
for(var/rep in replacechars)
|
||||
msg = dd_list2text((dd_text2list(msg, rep)))
|
||||
var/list/temp = dd_text2list(msg, rep)
|
||||
if(temp.len > 1)
|
||||
for(var/i = 1, i < temp.len, i++)
|
||||
world << temp[i]
|
||||
temp[i] = copytext(temp[i],1,lentext(temp[i]))
|
||||
msg = dd_list2text(temp)
|
||||
world << msg
|
||||
send2adminirc("#bs12admin","HELP: [src.key]: [msg]")
|
||||
if(tension_master)
|
||||
|
||||
@@ -339,7 +339,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
new_character.name = record_found.fields["name"]
|
||||
new_character.gender = record_found.fields["sex"]//Sex
|
||||
new_character.age = record_found.fields["age"]//Age
|
||||
new_character.b_type = record_found.fields["b_type"]//Blood type
|
||||
new_character.dna.b_type = record_found.fields["b_type"]//Blood type
|
||||
//We will update their appearance when determining DNA.
|
||||
else
|
||||
new_character.gender = MALE
|
||||
|
||||
@@ -149,8 +149,8 @@ datum
|
||||
var/obj/effect/decal/cleanable/blood/blood_prop = locate() in T //find some blood here
|
||||
if(!blood_prop) //first blood!
|
||||
blood_prop = new(T)
|
||||
blood_prop.blood_DNA = self.data["blood_DNA"]
|
||||
blood_prop.blood_type = self.data["blood_type"]
|
||||
blood_prop.blood_DNA.len++
|
||||
blood_prop.blood_DNA[blood_prop.blood_DNA.len] = list(self.data["blood_DNA"], self.data["blood_type"])
|
||||
|
||||
for(var/datum/disease/D in self.data["viruses"])
|
||||
var/datum/disease/newVirus = new D.type
|
||||
@@ -174,7 +174,7 @@ datum
|
||||
var/obj/effect/decal/cleanable/blood/blood_prop = locate() in T
|
||||
if(!blood_prop)
|
||||
blood_prop = new(T)
|
||||
blood_prop.blood_DNA = self.data["blood_DNA"]
|
||||
blood_prop.blood_DNA = list(self.data["blood_DNA"])
|
||||
for(var/datum/disease/D in self.data["viruses"])
|
||||
var/datum/disease/newVirus = new D.type
|
||||
blood_prop.viruses += newVirus
|
||||
@@ -191,7 +191,7 @@ datum
|
||||
var/obj/effect/decal/cleanable/xenoblood/blood_prop = locate() in T
|
||||
if(!blood_prop)
|
||||
blood_prop = new(T)
|
||||
blood_prop.blood_DNA = self.data["blood_DNA"]
|
||||
blood_prop.blood_DNA = list(self.data["blood_DNA"])
|
||||
for(var/datum/disease/D in self.data["viruses"])
|
||||
var/datum/disease/newVirus = new D.type
|
||||
blood_prop.viruses += newVirus
|
||||
|
||||
@@ -950,8 +950,7 @@
|
||||
if(T.resistances&&T.resistances.len)
|
||||
B.data["resistances"] = T.resistances.Copy()
|
||||
if(istype(target, /mob/living/carbon/human))//I wish there was some hasproperty operation...
|
||||
var/mob/living/carbon/human/HT = target
|
||||
B.data["blood_type"] = copytext(HT.b_type,1,0)
|
||||
B.data["blood_type"] = copytext(T.dna.b_type,1,0)
|
||||
var/list/temp_chem = list()
|
||||
for(var/datum/reagent/R in target.reagents.reagent_list)
|
||||
temp_chem += R.name
|
||||
|
||||
@@ -379,7 +379,7 @@
|
||||
if (!t1)
|
||||
t1 = wear_suit.icon_state
|
||||
overlays += image("icon" = 'mob.dmi', "icon_state" = text("[][]", t1, (!( lying ) ? null : "2")), "layer" = MOB_LAYER)
|
||||
if (wear_suit.blood_DNA)
|
||||
if (wear_suit.blood_DNA.len)
|
||||
if (istype(wear_suit, /obj/item/clothing/suit/armor))
|
||||
overlays += image("icon" = 'blood.dmi', "icon_state" = "armorblood[!lying ? "" : "2"]", "layer" = MOB_LAYER)
|
||||
else
|
||||
@@ -404,7 +404,7 @@
|
||||
if (!t1)
|
||||
t1 = head.icon_state
|
||||
overlays += image("icon" = 'mob.dmi', "icon_state" = text("[][]", t1, (!( lying ) ? null : "2")), "layer" = MOB_LAYER)
|
||||
if (head.blood_DNA)
|
||||
if (head.blood_DNA.len)
|
||||
overlays += image("icon" = 'blood.dmi', "icon_state" = "helmetblood[!lying ? "" : "2"]", "layer" = MOB_LAYER)
|
||||
head.screen_loc = ui_oclothing
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
var/b_eyes = 0.0
|
||||
var/s_tone = 0.0
|
||||
var/age = 30.0
|
||||
var/b_type = "A+"
|
||||
var/b_type
|
||||
|
||||
var/obj/item/clothing/suit/wear_suit = null
|
||||
var/obj/item/clothing/under/w_uniform = null
|
||||
|
||||
@@ -303,7 +303,7 @@
|
||||
G.fields["fingerprint"] = text("[]", md5(H.dna.uni_identity))
|
||||
G.fields["p_stat"] = "Active"
|
||||
G.fields["m_stat"] = "Stable"
|
||||
M.fields["b_type"] = text("[]", H.b_type)
|
||||
M.fields["b_type"] = text("[]", H.dna.b_type)
|
||||
M.fields["b_dna"] = H.dna.unique_enzymes
|
||||
M.fields["mi_dis"] = "None"
|
||||
M.fields["mi_dis_d"] = "No minor disabilities have been declared."
|
||||
@@ -327,7 +327,7 @@
|
||||
L.fields["age"] = H.age
|
||||
L.fields["id"] = md5("[H.real_name][H.mind.assigned_role]")
|
||||
L.fields["rank"] = H.mind.assigned_role
|
||||
L.fields["b_type"] = H.b_type
|
||||
L.fields["b_type"] = H.dna.b_type
|
||||
L.fields["b_dna"] = H.dna.unique_enzymes
|
||||
L.fields["enzymes"] = H.dna.struc_enzymes
|
||||
L.fields["identity"] = H.dna.uni_identity
|
||||
|
||||
@@ -669,7 +669,7 @@ datum/preferences
|
||||
character.gender = gender
|
||||
|
||||
character.age = age
|
||||
character.b_type = b_type
|
||||
character.dna.b_type = b_type
|
||||
|
||||
character.r_eyes = r_eyes
|
||||
character.g_eyes = g_eyes
|
||||
|
||||
@@ -92,8 +92,8 @@ obj/item/weapon/organ/New(loc, mob/living/carbon/human/H)
|
||||
if(!istype(H))
|
||||
return
|
||||
if(H.dna)
|
||||
blood_DNA = H.dna.unique_enzymes
|
||||
blood_type = H.b_type
|
||||
blood_DNA.len++
|
||||
blood_DNA[blood_DNA.len] = list(H.dna.unique_enzymes, H.dna.b_type)
|
||||
|
||||
var/icon/I = new /icon(icon, icon_state)
|
||||
|
||||
|
||||
@@ -65,7 +65,9 @@
|
||||
if ( !(H.blood_DNA) )
|
||||
dat += "\blue No blood found on [H]\n"
|
||||
else
|
||||
dat += "\blue Blood type: [H.blood_type]\nDNA: [H.blood_DNA]\n"
|
||||
for(var/i = 1, i < H.blood_DNA.len, i++)
|
||||
var/list/templist = H.blood_DNA[i]
|
||||
user << "\blue Blood type: [templist[2]]\nDNA: [templist[1]]"
|
||||
|
||||
if (!A.fingerprints)
|
||||
dat += "\blue Unable to locate any fingerprints on [A]!\n"
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user