diff --git a/code/defines/atom.dm b/code/defines/atom.dm index c73885cbaa..abcfd9f21a 100644 --- a/code/defines/atom.dm +++ b/code/defines/atom.dm @@ -2,8 +2,8 @@ layer = 2 var/level = 2 var/flags = FPRINT - 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 @@ -13,7 +13,7 @@ var/datum/reagents/reagents = null //Detective Work, used for the duplicate data points kept in the scanners - var/atom/movable/original_atom = null + var/list/original_atom = list() //var/chem_is_open_container = 0 // replaced by OPENCONTAINER flags and atom/proc/is_open_container() diff --git a/code/game/atom_procs.dm b/code/game/atom_procs.dm index f58da87f7e..9d4083602e 100644 --- a/code/game/atom_procs.dm +++ b/code/game/atom_procs.dm @@ -84,6 +84,8 @@ if (!( src.flags ) & 256) return if (ishuman(M)) + if(!fingerprintshidden) + fingerprintshidden = list() add_fibers(M) if (M.mutations2 & mFingerprints) if(src.fingerprintslast != M.key) @@ -99,7 +101,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 @@ -128,13 +130,14 @@ src.fingerprints[j] = src.fingerprints[j+1] 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.len) 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]) @@ -279,6 +282,9 @@ if (istype (src, /mob/living/carbon)) var/obj/item/source2 = src source2.blood_DNA = list() + if(ishuman(src)) + var/mob/living/carbon/human/M = src + M.bloody_hands = 0 //var/icon/I = new /icon(source2.icon_old, source2.icon_state) //doesnt have icon_old //source2.icon = I if (istype (src, /obj/item)) @@ -291,6 +297,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/objects/devices/scanners.dm b/code/game/objects/devices/scanners.dm index 2123f6199b..070b24c715 100644 --- a/code/game/objects/devices/scanners.dm +++ b/code/game/objects/devices/scanners.dm @@ -143,6 +143,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)) @@ -208,7 +210,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.len ? 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) @@ -251,11 +254,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 a3ca97e562..dc0614653b 100644 --- a/code/modules/DetectiveWork/detective_work.dm +++ b/code/modules/DetectiveWork/detective_work.dm @@ -58,10 +58,10 @@ atom/proc/get_duplicate(var/atom/location) temp_atom.fingerprints = src.fingerprints temp_atom.blood_DNA = src.blood_DNA temp_atom.suit_fibers = src.suit_fibers - if(src.original_atom) + if(src.original_atom.len) 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.len ? 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/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 31f2cf9d26..0c96cd0594 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -85,8 +85,8 @@ else if(target && M == target) PreFire(M,user) return - else if(user.a_intent == "hurt" && (istype(src.in_chamber, /obj/item/projectile/beam) || istype(src.in_chamber, /obj/item/projectile/energy)\ - || istype(src.in_chamber, /obj/item/projectile/bullet)) && !istype(src.in_chamber, /obj/item/projectile/bullet/stunshot) && load_into_chamber()) + else if(user.a_intent == "hurt" && load_into_chamber() && (istype(src.in_chamber, /obj/item/projectile/beam) || istype(src.in_chamber, /obj/item/projectile/energy)\ + || istype(src.in_chamber, /obj/item/projectile/bullet))) //Lets shoot them, then. user.visible_message("\red [user] fires \the [src] point blank at [M]!") M.bullet_act(in_chamber,"head") @@ -97,9 +97,11 @@ if (M.weakened < 10) M.weakened = 10 if(M.stat != 2) M.stat = 1 + if(M.health <= -50) //I pumped 7 more rounds into the guy, and only did an extra 26 damage :| + M.apply_damage(45) //So we'll put him an inch from death. del(in_chamber) return - else if(user.a_intent != "hurt" && istype(src,/obj/item/weapon/gun/energy/taser) && load_into_chamber()) + else if(user.a_intent != "hurt" && load_into_chamber() && istype(src,/obj/item/weapon/gun/energy/taser)) if (prob(50)) if (M.paralysis < 60 && (!(M.mutations & 8)) ) M.paralysis = 60