Files
CHOMPStation2/code/modules/detectivework/forensics.dm
Chinsky b43759fee9 Initial commit of detective console rewrite.
Changed forensic data to use record datum instead of unreadable arrays.
Now handheld scanner transfers data by clicking the big console, not by scan.
Rewrote high res scanner console. Now it leaves compiling dossiers to player, via use of filters.
2014-08-19 00:50:14 +04:00

73 lines
2.6 KiB
Plaintext

//This is the output of the stringpercent(print) proc, and means about 80% of
//the print must be there for it to be complete. (Prints are 32 digits)
var/const/FINGERPRINT_COMPLETE = 6
proc/is_complete_print(var/print)
return stringpercent(print) <= FINGERPRINT_COMPLETE
atom/var/list/suit_fibers
atom/proc/add_fibers(mob/living/carbon/human/M)
if(M.gloves && istype(M.gloves,/obj/item/clothing/gloves))
var/obj/item/clothing/gloves/G = M.gloves
if(G.transfer_blood) //bloodied gloves transfer blood to touched objects
if(add_blood(G.bloody_hands_mob)) //only reduces the bloodiness of our gloves if the item wasn't already bloody
G.transfer_blood--
else if(M.bloody_hands)
if(add_blood(M.bloody_hands_mob))
M.bloody_hands--
if(!suit_fibers) suit_fibers = list()
var/fibertext
var/item_multiplier = istype(src,/obj/item)?1.2:1
var/suit_coverage = 0
if(M.wear_suit)
fibertext = "Material from \a [M.wear_suit]."
if(prob(10*item_multiplier) && !(fibertext in suit_fibers))
suit_fibers += fibertext
suit_coverage = M.wear_suit.body_parts_covered
if(M.w_uniform && (M.w_uniform.body_parts_covered & ~suit_coverage))
fibertext = "Fibers from \a [M.w_uniform]."
if(prob(15*item_multiplier) && !(fibertext in suit_fibers))
suit_fibers += fibertext
if(M.gloves && (M.w_uniform.body_parts_covered & ~suit_coverage))
fibertext = "Material from a pair of [M.gloves.name]."
if(prob(20*item_multiplier) && !(fibertext in suit_fibers))
suit_fibers += "Material from a pair of [M.gloves.name]."
/datum/data/record/forensic
name = "forensic data"
var/uid
/datum/data/record/forensic/New(var/atom/A)
uid = "\ref [A]"
fields["name"] = sanitize(A.name)
fields["area"] = sanitize("[get_area(A)]")
fields["fprints"] = A.fingerprints ? A.fingerprints.Copy() : list()
fields["fibers"] = A.suit_fibers ? A.suit_fibers.Copy() : list()
fields["blood"] = A.blood_DNA ? A.blood_DNA.Copy() : list()
fields["time"] = world.time
/datum/data/record/forensic/proc/merge(var/datum/data/record/other)
var/list/prints = fields["fprints"]
var/list/o_prints = other.fields["fprints"]
for(var/print in o_prints)
if(!prints[print])
prints[print] = o_prints[print]
else
prints[print] = stringmerge(prints[print], o_prints[print])
fields["fprints"] = prints
var/list/fibers = fields["fibers"]
var/list/o_fibers = other.fields["fibers"]
fibers |= o_fibers
fields["fibers"] = fibers
var/list/blood = other.fields["blood"]
var/list/o_blood = other.fields["blood"]
blood |= o_blood
fields["blood"] = blood
fields["area"] = other.fields["area"]
fields["time"] = other.fields["time"]