-
Notifications
You must be signed in to change notification settings - Fork 220
/
forensics.dm
73 lines (60 loc) · 2.67 KB
/
forensics.dm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
/atom/var/list/fingerprintshidden
/atom/var/fingerprintslast
/atom/proc/add_hiddenprint(mob/M)
if(!M || !M.key)
return
if(fingerprintslast == M.key)
return
fingerprintslast = M.key
if(!fingerprintshidden)
fingerprintshidden = list()
if (ishuman(M))
var/mob/living/human/H = M
if (H.get_equipped_item(slot_gloves_str))
src.fingerprintshidden += "\[[time_stamp()]\] (Wearing gloves). Real name: [H.real_name], Key: [H.key]"
return 0
src.fingerprintshidden += "\[[time_stamp()]\] Real name: [M.real_name], Key: [M.key]"
return 1
/atom/proc/add_fingerprint(mob/M, ignoregloves, obj/item/tool)
if(isnull(M)) return
if(isAI(M)) return
if(!M || !M.key)
return
if(QDELETED(src))
return
if(istype(tool) && (tool.item_flags & ITEM_FLAG_NO_PRINT))
return
var/datum/extension/forensic_evidence/forensics = get_or_create_extension(src, /datum/extension/forensic_evidence)
forensics.add_from_atom(/datum/forensics/fingerprints, M, ignoregloves)
forensics.add_from_atom(/datum/forensics/fibers, M)
add_hiddenprint(M)
return 1
/// Reveal any blood on the item and update its color to that of luminol
/atom/proc/reveal_blood()
return
/atom/proc/add_fibers(obj/item/clothing/source)
if(!istype(source) || (source.item_flags & ITEM_FLAG_NO_PRINT))
return
var/datum/extension/forensic_evidence/forensics = get_or_create_extension(src, /datum/extension/forensic_evidence)
forensics.add_from_atom(/datum/forensics/fibers, source)
/atom/proc/transfer_fingerprints_to(var/atom/A)
var/datum/extension/forensic_evidence/forensics = get_extension(src, /datum/extension/forensic_evidence)
if(!forensics)
return
var/datum/extension/forensic_evidence/other_forensics = get_or_create_extension(A, /datum/extension/forensic_evidence)
for(var/T in forensics.evidence)
var/datum/forensics/F = forensics.evidence[T]
other_forensics.add_data(T, F.data)
/obj/item/proc/add_trace_DNA(mob/living/M)
if(istype(M) && M.has_genetic_information())
var/datum/extension/forensic_evidence/forensics = get_or_create_extension(src, /datum/extension/forensic_evidence)
forensics.add_from_atom(/datum/forensics/trace_dna, M)
// On examination get hints of evidence
/obj/item/examine(mob/user, distance)
. = ..()
if(distance <= 1 && user.skill_check(SKILL_FORENSICS, SKILL_ADEPT))
to_chat(user, SPAN_INFO("As a murder weapon, it's [english_list(get_autopsy_descriptors())]."))
// Detective is on the case
var/datum/extension/forensic_evidence/forensics = get_extension(src, /datum/extension/forensic_evidence)
if(forensics?.check_spotting(user) && user.has_client_color(/datum/client_color/noir))
user.playsound_local(null, pick('sound/effects/clue1.ogg','sound/effects/clue2.ogg'), 60, is_global = TRUE)