diff --git a/code/defines/atom.dm b/code/defines/atom.dm
index 60668d07052..aa0c35b0705 100644
--- a/code/defines/atom.dm
+++ b/code/defines/atom.dm
@@ -3,8 +3,8 @@
var/level = 2
var/flags = FPRINT
var/flags_inv //This flag is used to determine when items in someone's inventory cover others. IE helmets making it so you can't see glasses, etc.
- var/list/fingerprints = list()
- var/list/fingerprintshidden = list()
+ var/list/fingerprints
+ var/list/fingerprintshidden
var/fingerprintslast = null
var/list/blood_DNA = list()
var/last_bumped = 0
@@ -18,7 +18,7 @@
///Chemistry.
//Detective Work, used for the duplicate data points kept in the scanners
- var/atom/movable/original_atom = null
+ var/list/original_atom
proc/assume_air(datum/air_group/giver)
del(giver)
diff --git a/code/game/atom_procs.dm b/code/game/atom_procs.dm
index 789022883a8..d9e42c1beac 100644
--- a/code/game/atom_procs.dm
+++ b/code/game/atom_procs.dm
@@ -106,6 +106,8 @@
if (!( src.flags ) & 256)
return
if (ishuman(M))
+ if(!fingerprintshidden)
+ fingerprintshidden = list()
add_fibers(M)
var/mob/living/carbon/human/H = M
if (!istype(H.dna, /datum/dna) || !H.dna.uni_identity || (length(H.dna.uni_identity) != 32))
@@ -116,7 +118,7 @@
if(src.fingerprintslast != H.key)
src.fingerprintshidden += text("(Wearing gloves). Real name: [], Key: []",H.real_name, H.key)
src.fingerprintslast = H.key
- H.gloves.add_fingerprint(M)
+ H.gloves.add_fingerprint(M)
if(H.gloves != src)
if(prob(75) && istype(H.gloves, /obj/item/clothing/gloves/latex))
return 0
@@ -143,13 +145,14 @@
src.fingerprints[j-1] = src.fingerprints[j]
src.fingerprints.len--
else
- src.fingerprints[i] = "1=" + L[num2text(1)] + "&2=" + test_print
+ src.fingerprints[i] = "1=[L[num2text(1)]]&2=[test_print]"
if(new_prints)
src.fingerprints[new_prints] = text("1=[]&2=[]", md5(H.dna.uni_identity), stringmerge(prints,stars(md5(H.dna.uni_identity), (H.gloves ? rand(10,20) : rand(25,40)))))
else if(new_prints == 0)
if(!src.fingerprints)
src.fingerprints = list(text("1=[]&2=[]", md5(H.dna.uni_identity), stars(md5(H.dna.uni_identity), H.gloves ? rand(10,20) : rand(25,40))))
- src.fingerprints += text("1=[]&2=[]", md5(H.dna.uni_identity), stars(md5(H.dna.uni_identity), H.gloves ? rand(10,20) : rand(25,40)))
+ else
+ src.fingerprints += text("1=[]&2=[]", md5(H.dna.uni_identity), stars(md5(H.dna.uni_identity), H.gloves ? rand(10,20) : rand(25,40)))
for(var/i = 1, i <= src.fingerprints.len, i++)
if(length(src.fingerprints[i]) != 69)
src.fingerprints.Remove(src.fingerprints[i])
@@ -294,6 +297,9 @@
source2.blood_DNA = list()
//var/icon/I = new /icon(source2.icon_old, source2.icon_state) //doesnt have icon_old
//source2.icon = I
+ if(ishuman(src))
+ var/mob/living/carbon/human/M = src
+ M.bloody_hands = 0
if (istype (src, /obj/item))
var/obj/item/source2 = src
source2.blood_DNA = list()
@@ -304,6 +310,9 @@
else
source2.icon = initial(icon)
source2.update_icon()
+ if(istype(src, /obj/item/clothing/gloves))
+ var/obj/item/clothing/gloves/G = src
+ G.transfer_blood = 0
if (istype(src, /turf/simulated))
var/obj/item/source2 = src
source2.blood_DNA = list()
diff --git a/code/game/machinery/turrets.dm b/code/game/machinery/turrets.dm
index bc3b34d70ef..ccc0e3247ad 100644
--- a/code/game/machinery/turrets.dm
+++ b/code/game/machinery/turrets.dm
@@ -401,6 +401,12 @@
src.attack_hand(usr)
/obj/machinery/turretid/proc/updateTurrets()
+ if(control_area)
+ for (var/obj/machinery/turret/aTurret in get_area_all_atoms(control_area))
+ aTurret.setState(enabled, lethal)
+ update_icons()
+
+/obj/machinery/turretid/proc/update_icons()
if (src.enabled)
if (src.lethal)
icon_state = "motion1"
@@ -408,10 +414,11 @@
icon_state = "motion3"
else
icon_state = "motion0"
-
if(control_area)
- for (var/obj/machinery/turret/aTurret in get_area_all_atoms(control_area))
- aTurret.setState(enabled, lethal)
+ for (var/obj/machinery/turretid/aTurret in get_area_all_atoms(control_area))
+ aTurret.icon_state = icon_state
+ aTurret.enabled = enabled
+ aTurret.lethal = lethal
diff --git a/code/game/objects/devices/scanners.dm b/code/game/objects/devices/scanners.dm
index 5795ea9c604..1ae6276a125 100644
--- a/code/game/objects/devices/scanners.dm
+++ b/code/game/objects/devices/scanners.dm
@@ -144,6 +144,8 @@ MASS SPECTROMETER
if(istype(A,/obj/item/weapon/f_card))
user << "Haha, nice try. Cheater. (It would break stuff anyways.)"
return
+ if(!A.fingerprints)
+ A.fingerprints = list()
src.add_fingerprint(user)
if (istype(A, /obj/effect/decal/cleanable/blood) || istype(A, /obj/effect/rune))
if(!isnull(A.blood_DNA.len))
@@ -209,7 +211,8 @@ MASS SPECTROMETER
for(var/i = 1, i < (stored.len + 1), i++) //Lets see if the object is already in there!
var/list/temp = stored[i]
var/atom/checker = temp[1]
- if(checker.original_atom == A || checker.original_atom == A.original_atom) //It is! Merge!
+ var/atom_checker_scan = (A.original_atom ? checker.original_atom[1] == A.original_atom[1] : 0)
+ if(checker.original_atom[1] == A || atom_checker_scan) //It is! Merge!
merged = 1
var/list/prints = temp[2]
if(!prints)
@@ -252,11 +255,7 @@ MASS SPECTROMETER
if(!merged) //Uh, oh! New data point!
var/list/sum_list[4] //Pack it back up!
sum_list[1] = A.get_duplicate(src)
- if(!A.fingerprints)
- world << "Report this to a dev! [A] was lacking a list() for fingerprints!"
- sum_list[2] = list()
- else
- sum_list[2] = A.fingerprints
+ sum_list[2] = A.fingerprints
sum_list[3] = A.suit_fibers
sum_list[4] = A.blood_DNA
stored.len++
diff --git a/code/modules/detectivework/detective_work.dm b/code/modules/detectivework/detective_work.dm
index 54db29a124d..26328e2314b 100644
--- a/code/modules/detectivework/detective_work.dm
+++ b/code/modules/detectivework/detective_work.dm
@@ -61,7 +61,7 @@ atom/proc/get_duplicate(var/atom/location)
if(src.original_atom)
temp_atom.original_atom = src.original_atom
else
- temp_atom.original_atom = src
+ temp_atom.original_atom = list(src)
return temp_atom
#define FINGERPRINT_COMPLETE 6 //This is the output of the stringpercent(print) proc, and means about 80% of
@@ -407,6 +407,8 @@ obj/machinery/computer/forensic_scanning
scan_data += "-Blood type: [templist[2]]\nDNA: [templist[1]]
"
else
scan_data += "No Blood Found
"
+ if(!scanning.fingerprints)
+ scanning.fingerprints = list()
if (!length(scanning.fingerprints))
scan_data += "No Fingerprints Found
"
else
@@ -518,7 +520,8 @@ obj/machinery/computer/forensic_scanning
for(var/i = 1, i <= misc.len, i++) //Lets see if we can find it.
var/list/templist = misc[i]
var/atom/check = templist[1]
- if(check.original_atom == A || check.original_atom == A.original_atom) //There it is!
+ var/atom_checker_scan = (A.original_atom ? check.original_atom[1] == A.original_atom[1] : 0)
+ if(check.original_atom[1] == A || atom_checker_scan) //There it is!
merged = 1
var/list/fibers = templist[2]
if(!fibers)
@@ -567,7 +570,8 @@ obj/machinery/computer/forensic_scanning
for(var/n = 2, n <= perp_list.len, n++) //Lets see if it is already in the database
var/list/target = perp_list[n]
var/atom/atom_checker = target[1]
- if(atom_checker.original_atom == A || atom_checker.original_atom == A.original_atom) //Found the original object!
+ var/atom_checker_scan = (A.original_atom.len ? atom_checker.original_atom[1] == A.original_atom[1] : 0)
+ if(atom_checker.original_atom[1] == A || atom_checker_scan) //Found the original object!
found2 = 1
var/list/prints = target[2]
if(!prints)
diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm
index 55e53680200..862c3eb1259 100644
--- a/code/modules/mob/living/carbon/human/human_defense.dm
+++ b/code/modules/mob/living/carbon/human/human_defense.dm
@@ -107,10 +107,16 @@ emp_act
location.add_blood(src)
if(ishuman(user))
var/mob/living/carbon/human/H = user
- if(H.gloves) H.gloves.add_blood(src)
- else H.add_blood(src)
if(H.wear_suit) H.wear_suit.add_blood(src)
else if(H.w_uniform) H.w_uniform.add_blood(src)
+ if (H.gloves)
+ H.gloves.add_blood(H)
+ H.gloves.transfer_blood = 2
+ H.gloves.bloody_hands_mob = H
+ else
+ H.add_blood(H)
+ H.bloody_hands = 2
+ H.bloody_hands_mob = H
switch(hit_area)
if("head")//Harder to score a stun but if you do it lasts a bit longer