mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-11 10:43:20 +00:00
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.
73 lines
2.6 KiB
Plaintext
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"] |