diff --git a/code/WorkInProgress/detective_work.dm b/code/WorkInProgress/detective_work.dm
index d4b450ce6e8..1ac12140cfc 100644
--- a/code/WorkInProgress/detective_work.dm
+++ b/code/WorkInProgress/detective_work.dm
@@ -83,7 +83,7 @@ obj/machinery/computer/forensic_scanning
New()
..()
- new /obj/item/weapon/book/manual/detective(get_turf(src)) //DEEEERP
+ new /obj/item/weapon/book/manual/detective(get_turf(src))
return
@@ -187,7 +187,7 @@ obj/machinery/computer/forensic_scanning
if(files && files.len)
temp = "Criminal Evidence Database
"
temp += "Consolidated data points:
"
- for(var/i = 1, i < (files.len + 1), i++)
+ for(var/i = 1, i <= files.len, i++)
temp += "{Dossier [i]}
"
temp += "
{Insert Finger Print Card}
"
else
@@ -197,7 +197,7 @@ obj/machinery/computer/forensic_scanning
delete_record(text2num(href_list["delete"]))
temp += "Auxiliary Evidence Database
"
temp += "This is where anything without fingerprints goes.
"
- for(var/i = 1, i < (misc.len + 1), i++)
+ for(var/i = 1, i <= misc.len, i++)
var/list/temp_list = misc[i]
var/item_name = get_name(temp_list[1])
temp += "{[item_name]}
"
@@ -213,7 +213,7 @@ obj/machinery/computer/forensic_scanning
if(stringpercent(prints[num2text(2)]) <= FINGERPRINT_COMPLETE)
print_string = "Fingerprints: (80% or higher completion reached)
" + prints[num2text(2)] + "
"
temp += print_string
- for(var/i = 2, i < (dossier.len + 1), i++)
+ for(var/i = 2, i <= dossier.len, i++)
var/list/outputs = dossier[i]
var/item_name = get_name(outputs[1])
var/list/prints_len = outputs[2]
@@ -222,7 +222,7 @@ obj/machinery/computer/forensic_scanning
var/list/fibers = outputs[3]
if(fibers && fibers.len)
var/dat = "[fibers[1]]"
- for(var/j = 2, j < (fibers.len + 1), j++)
+ for(var/j = 2, j <= fibers.len, j++)
dat += ",
[fibers[j]]"
temp += " Fibers: [dat]
"
else
@@ -231,7 +231,7 @@ obj/machinery/computer/forensic_scanning
if(blood && blood.len)
var/dat = "[blood[1]]"
if(blood.len > 1)
- for(var/j = 2, j < (blood.len + 1), j++)
+ for(var/j = 2, j <= blood.len, j++)
dat += ",
[blood[j]]"
temp += " Blood: [dat]
"
else
@@ -253,7 +253,7 @@ obj/machinery/computer/forensic_scanning
if(stringpercent(prints[num2text(2)]) <= FINGERPRINT_COMPLETE)
print_string = "Fingerprints: " + prints[num2text(2)] + "
"
P.info += print_string
- for(var/i = 2, i < (dossier.len + 1), i++)
+ for(var/i = 2, i <= dossier.len, i++)
var/list/outputs = dossier[i]
var/item_name = get_name(outputs[1])
var/list/prints_len = outputs[2]
@@ -262,7 +262,7 @@ obj/machinery/computer/forensic_scanning
var/list/fibers = outputs[3]
if(fibers && fibers.len)
var/dat = "[fibers[1]]"
- for(var/j = 2, j < (fibers.len + 1), j++)
+ for(var/j = 2, j <= fibers.len, j++)
dat += ",
[fibers[j]]"
P.info += " Fibers: [dat]
"
else
@@ -271,7 +271,7 @@ obj/machinery/computer/forensic_scanning
if(blood && blood.len)
var/dat = "[blood[1]]"
if(blood.len > 1)
- for(var/j = 2, j < (blood.len + 1), j++)
+ for(var/j = 2, j <= blood.len, j++)
dat += ",
[blood[j]]"
P.info += " Blood: [dat]
"
else
@@ -366,7 +366,7 @@ obj/machinery/computer/forensic_scanning
scan_data = "[scanning]
"
if (scanning.blood_DNA.len)
scan_data += "Blood Found:
"
- for(var/i = 1, i < (scanning.blood_DNA.len + 1), i++)
+ for(var/i = 1, i <= scanning.blood_DNA.len, i++)
var/list/templist = scanning.blood_DNA[i]
scan_data += "-Blood type: [templist[2]]\nDNA: [templist[1]]
"
else
@@ -432,11 +432,13 @@ obj/machinery/computer/forensic_scanning
updateUsrDialog()
verb/reset()
- set name = "Reset Screen"
+ set name = "Reset Database"
set category = "Object"
set src in oview(1)
temp = ""
add_fingerprint(usr)
+ files = list()
+ misc = list()
return
@@ -445,9 +447,10 @@ obj/machinery/computer/forensic_scanning
proc/add_data_scanner(var/obj/item/device/detective_scanner/W)
- for(var/i = 1, i < (W.stored.len + 1), i++)
+ for(var/i = 1, i <= W.stored.len, i++)
var/list/data = W.stored[i]
add_data(data[1],1,data[2],data[3],data[4])
+ W.stored = list()
proc/add_data(var/atom/A, var/override = 0, var/tempfingerprints, var/tempsuit_fibers,var/tempblood_DNA)
@@ -469,7 +472,7 @@ obj/machinery/computer/forensic_scanning
if(!misc)
misc = list()
if(misc)
- for(var/i = 1, i < (misc.len + 1), i++) //Lets see if we can find it.
+ for(var/i = 1, i <= misc.len, i++) //Lets see if we can find it.
var/list/templist = misc[i]
var/check = templist[1]
if(check == A) //There it is!
@@ -478,14 +481,14 @@ obj/machinery/computer/forensic_scanning
if(!fibers)
fibers = list()
if(A.suit_fibers)
- for(var/j = 1, j < (A.suit_fibers.len + 1), j++) //Fibers~~~
+ for(var/j = 1, j <= A.suit_fibers.len, j++) //Fibers~~~
if(!fibers.Find(A.suit_fibers[j])) //It isn't! Add!
fibers += A.suit_fibers[j]
var/list/blood = templist[3]
if(!blood)
blood = list()
if(A.blood_DNA)
- for(var/j = 1, j < (A.blood_DNA.len + 1), j++) //Blood~~~
+ for(var/j = 1, j <= A.blood_DNA.len, j++) //Blood~~~
if(!blood.Find(A.blood_DNA[j])) //It isn't! Add!
blood += A.blood_DNA[j]
var/list/sum_list[3] //Pack it back up!
@@ -504,21 +507,21 @@ obj/machinery/computer/forensic_scanning
return !merged
else //Has prints.
var/list/found_prints[A.fingerprints.len + 1]
- for(var/i = 1, i < (found_prints.len + 1), i++)
+ for(var/i = 1, i <= found_prints.len, i++)
found_prints[i] = 0
if(!files)
files = list()
- for(var/i = 1, i < (files.len + 1), i++) //Lets see if we can find the owner of the prints
+ for(var/i = 1, i <= files.len, i++) //Lets see if we can find the owner of the prints
var/list/perp_list = files[i]
var/list/perp_prints = params2list(perp_list[1])
var/perp = perp_prints[num2text(1)]
var/found2 = 0
- for(var/m = 1, m < (A.fingerprints.len + 1), m++) //Compare database prints with prints on object.
+ for(var/m = 1, m <= A.fingerprints.len, m++) //Compare database prints with prints on object.
var/list/test_prints_list = params2list(A.fingerprints[m])
var/checker = test_prints_list[num2text(1)]
if(checker == perp) //Found 'em! Merge!
found_prints[m] = 1
- for(var/n = 2, n < (perp_list.len + 1), n++) //Lets see if it is already in the database
+ for(var/n = 2, n <= perp_list.len, n++) //Lets see if it is already in the database
var/list/target = perp_list[n]
if(target[1] == A) //Found the original object!
found2 = 1
@@ -526,11 +529,11 @@ obj/machinery/computer/forensic_scanning
if(!prints)
prints = list()
if(A.fingerprints)
- for(var/j = 1, j < (A.fingerprints.len + 1), j++) //Fingerprints~~~
+ for(var/j = 1, j <= A.fingerprints.len, j++) //Fingerprints~~~
var/list/print_test1 = params2list(A.fingerprints[j])
var/test_print1 = print_test1[num2text(1)]
var/found = 0
- for(var/k = 1, k <= (prints.len + 1), k++) //Lets see if the print is already in there
+ for(var/k = 1, k <= prints.len, k++) //Lets see if the print is already in there
var/list/print_test2 = params2list(prints[k])
var/test_print2 = print_test2[num2text(1)]
if(test_print2 == test_print1) //It is! Merge!
@@ -594,15 +597,15 @@ obj/machinery/computer/forensic_scanning
proc/update_fingerprints() //I am tired, but this updates the master print, which is used to determine completion of a print.
- for(var/k = 1, k < (files.len + 1), k++)
+ for(var/k = 1, k <= files.len, k++)
var/list/perp_list = files[k]
var/list/perp_prints = params2list(perp_list[1])
var/perp = perp_prints[num2text(1)]
var/list/found_prints = list()
- for(var/i = 2, i < (perp_list.len + 1), i++)
+ for(var/i = 2, i <= perp_list.len, i++)
var/list/test_list = perp_list[i]
var/list/test_prints = test_list[2]
- for(var/j = 1, j < (test_prints.len + 1), j++)
+ for(var/j = 1, j <= test_prints.len, j++)
var/list/test_list_2 = params2list(test_prints[j])
var/test_prints_2 = test_list_2[num2text(1)]
if(test_prints_2 == perp)
@@ -617,10 +620,10 @@ obj/machinery/computer/forensic_scanning
proc/process_card() //I am tired, but this updates the master print from a fingerprint card
//which is used to determine completion of a print.
if(card.fingerprints)
- for(var/k = 1, k < (card.fingerprints.len + 1), k++)
+ for(var/k = 1, k <= card.fingerprints.len, k++)
var/list/test_prints = params2list(card.fingerprints[k])
var/print = test_prints[num2text(1)]
- for(var/i = 1, i < (files.len + 1), i++)
+ for(var/i = 1, i <= files.len, i++)
var/list/test_list = files[i]
var/list/perp_prints = params2list(test_list[1])
var/perp = perp_prints[num2text(1)]
diff --git a/code/defines/obj.dm b/code/defines/obj.dm
index f537f56aaa4..6e19ed87e7c 100644
--- a/code/defines/obj.dm
+++ b/code/defines/obj.dm
@@ -359,6 +359,7 @@
/obj/item/device/hacktool/engineer
name = "door debugger"
desc = "An item of immense complexion, it appears to work by magic."
+ icon_state = "hacktool-g"
/obj/item/blueprints
name = "station blueprints"
diff --git a/code/defines/obj/supplypacks.dm b/code/defines/obj/supplypacks.dm
index a64ea20d0a6..4aa5b528987 100644
--- a/code/defines/obj/supplypacks.dm
+++ b/code/defines/obj/supplypacks.dm
@@ -322,7 +322,7 @@
containertype = "/obj/structure/closet/crate"
containername = "Replacement lights"
-/*/datum/supply_packs/costume
+/datum/supply_packs/costume
name = "Standard Costume crate"
contains = list("/obj/item/weapon/storage/backpack/clown",
"/obj/item/clothing/shoes/clown_shoes",
@@ -340,7 +340,7 @@
containertype = "/obj/structure/closet/crate/secure"
containername = "Standard Costumes"
access = access_theatre
- group = "Clothing" */
+ group = "Clothing"
/datum/supply_packs/wizard
name = "Wizard costume"
@@ -421,7 +421,8 @@
"/obj/item/weapon/reagent_containers/glass/bottle/antitoxin",
"/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline",
"/obj/item/weapon/reagent_containers/glass/bottle/stoxin",
- "/obj/item/weapon/storage/syringes")
+ "/obj/item/weapon/storage/syringes",
+ "/obj/item/weapon/reagent_containers/glass/large")
cost = 10
containertype = "/obj/structure/closet/crate/medical"
containername = "Medical crate"
diff --git a/code/defines/obj/vending.dm b/code/defines/obj/vending.dm
index abd5e107907..6289fb1db55 100644
--- a/code/defines/obj/vending.dm
+++ b/code/defines/obj/vending.dm
@@ -168,7 +168,7 @@
icon_state = "sec"
icon_deny = "sec-deny"
req_access_txt = "1"
- product_paths = "/obj/item/weapon/handcuffs;/obj/item/weapon/flashbang;/obj/item/device/flash;/obj/item/weapon/reagent_containers/food/snacks/donut;/obj/item/weapon/evidencebag"
+ product_paths = "/obj/item/weapon/handcuffs;/obj/item/weapon/flashbang;/obj/item/device/flash;/obj/item/weapon/reagent_containers/food/snacks/donut;/obj/item/weapon/storage/box/evidence"
product_amounts = "8;4;5;12;6"
product_hidden = "/obj/item/clothing/glasses/sunglasses;/obj/item/kitchen/donut_box"
product_hideamt = "2;2"
diff --git a/code/game/atom_procs.dm b/code/game/atom_procs.dm
index aeac2e04bbf..978a4679a68 100644
--- a/code/game/atom_procs.dm
+++ b/code/game/atom_procs.dm
@@ -122,6 +122,8 @@
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)))
for(var/i = 1, i <= src.fingerprints.len, i++)
if(length(src.fingerprints[i]) != 69)
@@ -254,8 +256,9 @@
if (istype(src, /turf/simulated))
var/obj/item/source2 = src
source2.blood_DNA = list()
- var/icon/I = new /icon(source2.icon_old, source2.icon_state)
- source2.icon = I
+ if(source2.icon_old)
+ var/icon/I = new /icon(source2.icon_old, source2.icon_state)
+ source2.icon = I
if(src.fingerprints && src.fingerprints.len)
var/done = 0
while(!done)
@@ -275,6 +278,8 @@
break
else
src.fingerprints[i] = "1=" + prints["1"] + "&2=" + new_print
+ if(!src.fingerprints)
+ src.fingerprints = list()
return
/atom/MouseDrop(atom/over_object as mob|obj|turf|area)
diff --git a/code/game/objects/devices/scanners.dm b/code/game/objects/devices/scanners.dm
index 182730a526d..2b6ccd576d5 100644
--- a/code/game/objects/devices/scanners.dm
+++ b/code/game/objects/devices/scanners.dm
@@ -207,12 +207,12 @@ MASS SPECTROMETER
var/list/prints = temp[2]
if(!prints)
prints = list()
- if(A.fingerprints)
- for(var/j = 1, j < (A.fingerprints.len + 1), j++) //Fingerprints~~~
+ if(A.fingerprints && A.fingerprints.len)
+ for(var/j = 1, j <= A.fingerprints.len, j++) //Fingerprints~~~
var/list/print_test1 = params2list(A.fingerprints[j])
var/test_print1 = print_test1[num2text(1)]
var/found = 0
- for(var/k = 1, k < (prints.len + 1), k++) //Lets see if the print is already in there
+ for(var/k = 1, k <= prints.len, k++) //Lets see if the print is already in there
var/list/print_test2 = params2list(prints[k])
var/test_print2 = print_test2[num2text(1)]
if(test_print2 == test_print1) //It is! Merge!
@@ -224,15 +224,15 @@ MASS SPECTROMETER
var/list/fibers = temp[3]
if(!fibers)
fibers = list()
- if(A.suit_fibers)
- for(var/j = 1, j < (A.suit_fibers.len + 1), j++) //Fibers~~~
+ if(A.suit_fibers && A.suit_fibers.len)
+ for(var/j = 1, j <= A.suit_fibers.len, j++) //Fibers~~~
if(!fibers.Find(A.suit_fibers[j])) //It isn't! Add!
fibers += A.suit_fibers[j]
var/list/blood = temp[4]
if(!blood)
blood = list()
- if(A.blood_DNA.len)
- for(var/j = 1, j < (A.blood_DNA.len + 1), j++) //Blood~~~
+ if(A.blood_DNA.len && A.blood_DNA)
+ for(var/j = 1, j <= A.blood_DNA.len, j++) //Blood~~~
if(!blood.Find(A.blood_DNA[j])) //It isn't! Add!
blood += A.blood_DNA[j]
var/list/sum_list[4] //Pack it back up!
@@ -245,7 +245,11 @@ MASS SPECTROMETER
if(!merged) //Uh, oh! New data point!
var/list/sum_list[4] //Pack it back up!
sum_list[1] = A
- sum_list[2] = A.fingerprints
+ 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[3] = A.suit_fibers
sum_list[4] = A.blood_DNA
stored.len++
diff --git a/code/game/objects/items/weapons/cards_ids.dm b/code/game/objects/items/weapons/cards_ids.dm
index 37d1370d4ae..27a5155766c 100644
--- a/code/game/objects/items/weapons/cards_ids.dm
+++ b/code/game/objects/items/weapons/cards_ids.dm
@@ -276,7 +276,7 @@ FINGERPRINT CARD
var/dat = "Fingerprints on Card