From 0e15736ba93b618b1698b645e7ea94ae96c86506 Mon Sep 17 00:00:00 2001 From: SkyMarshal Date: Thu, 2 Feb 2012 18:22:43 -0700 Subject: [PATCH] Fixes for gibber and detective computer. Fixed some hallucination and fingerprint stuff. --- code/WorkInProgress/detective_work.dm | 602 ++++++++++--------- code/game/atom_procs.dm | 20 +- code/game/machinery/bots/mulebot.dm | 9 +- code/game/machinery/kitchen/gibber.dm | 9 +- code/game/objects/displaycase.dm | 1 + code/modules/chemical/Chemistry-Reagents.dm | 2 + code/modules/mob/living/carbon/human/life.dm | 2 +- 7 files changed, 349 insertions(+), 296 deletions(-) diff --git a/code/WorkInProgress/detective_work.dm b/code/WorkInProgress/detective_work.dm index 742c0245012..3896b1973ec 100644 --- a/code/WorkInProgress/detective_work.dm +++ b/code/WorkInProgress/detective_work.dm @@ -121,6 +121,319 @@ obj/machinery/computer/forensic_scanning onclose(user,"scanner") + Topic(href,href_list) + switch(href_list["operation"]) + if("login") + var/mob/M = usr + if(istype(M,/mob/living/silicon)) + authenticated = 1 + updateDialog() + return + var/obj/item/weapon/card/id/I = M.equipped() + if (I && istype(I)) + if(src.check_access(I)) + authenticated = 1 + //usr << "\green Access Granted" + //if(!authenticated) + //usr << "\red Access Denied" + if("logout") + authenticated = 0 + if("clear") + if(canclear) + temp = null + if("eject") + if(scanning) + scanning.loc = loc + scanning = null + else + temp = "Eject Failed: No Object" + if("insert") + var/mob/M = usr + var/obj/item/I = M.equipped() + if(I && istype(I)) + if(istype(I, /obj/item/weapon/evidencebag)) + scanning = I.contents[1] + scanning.loc = src + I.overlays -= scanning + I.icon_state = "evidenceobj" + else + scanning = I + M.drop_item() + I.loc = src + else + temp = "Invalid Object Rejected." + if("card") + var/mob/M = usr + var/obj/item/I = M.equipped() + if(I && istype(I,/obj/item/weapon/f_card)) + card = I + M.drop_item() + I.loc = src + process_card() + usr << "You insert the card, and it is destroyed by the machinery in the process of comparing prints." + else + usr << "\red Invalid Object Rejected." + if("database") + canclear = 1 + if(!misc && !files) + temp = "Database is empty." + else + if(files && files.len) + temp = "Criminal Evidence Database

" + temp += "Consolidated data points:
" + for(var/i = 1, i < (files.len + 1), i++) + temp += "{Dossier [i]}
" + temp += "
{Insert Finger Print Card}


" + else + temp = "" + if(misc && misc.len) + if(href_list["delete"]) + 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++) + var/list/temp_list = misc[i] + var/item_name = get_name(temp_list[1]) + temp += "{[item_name]}
" + if("record") + canclear = 0 + if(files) + temp = "Criminal Evidence Database

" + temp += "Consolidated data points: Dossier [href_list["identifier"]]
" + var/identifier = text2num(href_list["identifier"]) + var/list/dossier = files[identifier] + var/list/prints = params2list(dossier[1]) + var/print_string = "Fingerprints: Print not complete!
" + 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++) + var/list/outputs = dossier[i] + var/item_name = get_name(outputs[1]) + var/list/prints_len = outputs[2] + temp += "Object: [item_name]
" + temp += "    [prints_len.len] Unique fingerprints found.
" + var/list/fibers = outputs[3] + if(fibers && fibers.len) + var/dat = "[fibers[1]]" + for(var/j = 2, j < (fibers.len + 1), j++) + dat += ",
      [fibers[j]]" + temp += "    Fibers: [dat]
" + else + temp += "    No fibers found.
" + var/list/blood = outputs[4] + if(blood && blood.len) + var/dat = "[blood[1]]" + if(blood.len > 1) + for(var/j = 2, j < (blood.len + 1), j++) + dat += ",
      [blood[j]]" + temp += "    Blood: [dat]
" + else + temp += "    No blood found.
" + else + temp = "ERROR. Database not found!
" + temp += "
{Print}" + temp += "
{Return}" + if("databaseprint") + if(files) + var/obj/item/weapon/paper/P = new(loc) + P.name = "Database File (Dossier [href_list["identifier"]])" + P.overlays += "paper_words" + P.info = "Criminal Evidence Database

" + P.info += "Consolidated data points: Dossier [href_list["identifier"]]
" + var/list/dossier = files[text2num(href_list["identifier"])] + var/list/prints = params2list(dossier[1]) + var/print_string = "Fingerprints: Print not complete!
" + 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++) + var/list/outputs = dossier[i] + var/item_name = get_name(outputs[1]) + var/list/prints_len = outputs[2] + P.info += "Object: [item_name]
" + P.info += "    [prints_len.len] Unique fingerprints found.
" + var/list/fibers = outputs[3] + if(fibers && fibers.len) + var/dat = "[fibers[1]]" + for(var/j = 2, j < (fibers.len + 1), j++) + dat += ",
      [fibers[j]]" + P.info += "    Fibers: [dat]
" + else + P.info += "    No fibers found.
" + var/list/blood = outputs[4] + if(blood && blood.len) + var/dat = "[blood[1]]" + if(blood.len > 1) + for(var/j = 2, j < (blood.len + 1), j++) + dat += ",
      [blood[j]]" + P.info += "    Blood: [dat]
" + else + P.info += "    No blood found." + else + usr << "ERROR. Database not found!
" + if("auxiliary") + canclear = 0 + if(misc) + temp = "Auxiliary Evidence Database

" + var/identifier = text2num(href_list["identifier"]) + var/list/outputs = misc[identifier] + var/item_name = get_name(outputs[1]) + temp += "Consolidated data points: [item_name]
" + var/list/fibers = outputs[2] + if(fibers && fibers.len) + var/dat = "[fibers[1]]" + for(var/j = 2, j <= fibers.len, j++) + dat += "
      [fibers[j]]" + temp += "    Fibers: [dat]
" + else + temp += "    No fibers found." + var/list/blood = outputs[3] + if(blood && blood.len) + var/dat = "[blood[1]]" + for(var/j = 2, j <= blood.len, j++) + dat += "
      [blood[j]]" + temp += "    Blood: [dat]
" + else + temp += "    No blood found.
" + else + temp = "ERROR. Database not found!
" + temp += "
{Delete This Record}" + temp += "
{Print}" + temp += "
{Return}" + if("auxiliaryprint") + if(misc) + var/obj/item/weapon/paper/P = new(loc) + var/identifier = text2num(href_list["identifier"]) + var/list/outputs = misc[identifier] + var/item_name = get_name(outputs[1]) + P.name = "Auxiliary Database File ([item_name])" + P.overlays += "paper_words" + P.info = "Auxiliary Evidence Database

" + P.info += "Consolidated data points: [item_name]
" + var/list/fibers = outputs[2] + if(fibers && fibers.len) + var/dat = "[fibers[1]]" + for(var/j = 2, j <= fibers.len, j++) + dat += "
      [fibers[j]]" + P.info += "    Fibers: [dat]
" + else + P.info += "    No fibers found." + var/list/blood = outputs[3] + if(blood && blood.len) + var/dat = "[blood[1]]" + for(var/j = 2, j <= blood.len, j++) + dat += "
      [blood[j]]" + P.info += "    Blood: [dat]
" + else + P.info += "    No blood found.
" + else + usr << "ERROR. Database not found!
" + if("scan") + if(scanning) + scan_process = 3 + scan_data = "Scanning [scanning]: 25% complete" + updateDialog() + sleep(50) + if(!scan_process) + scan_data = null + updateDialog() + return + scan_data = "Scanning [scanning]: 50% complete" + updateDialog() + scan_process = 2 + sleep(50) + if(!scan_process) + scan_data = null + updateDialog() + return + scan_data = "Scanning [scanning]: 75% complete" + updateDialog() + scan_process = 1 + sleep(50) + if(!scan_process) + scan_data = null + updateDialog() + return + scan_process = 0 + scan_name = scanning.name + scan_data = "[scanning]

" + if (scanning.blood_DNA) + scan_data += "Blood Found:
" + for(var/i = 1, i < (scanning.blood_DNA.len + 1), i++) + var/list/templist = scanning.blood_DNA[i] + scan_data += "-Blood type: [templist[2]]\nDNA: [templist[1]]

" + else + scan_data += "No Blood Found

" + if (!length(scanning.fingerprints)) + scan_data += "No Fingerprints Found

" + else + var/list/L = scanning.fingerprints + scan_data += "Isolated [L.len] Fingerprints. Loaded into database.
" + add_data(scanning) + + if(!scanning.suit_fibers) + /*if(istype(scanning,/obj/item/device/detective_scanner)) + var/obj/item/device/detective_scanner/scanner = scanning + if(scanner.stored_name) + scan_data += "Fibers/Materials Data - [scanner.stored_name]:
" + for(var/data in scanner.stored_fibers) + scan_data += "- [data]
" + else + scan_data += "No Fibers/Materials Data
" + else*/ + scan_data += "No Fibers/Materials Located
" + else + /*if(istype(scanning,/obj/item/device/detective_scanner)) + var/obj/item/device/detective_scanner/scanner = scanning + if(scanner.stored_name) + scan_data += "Fibers/Materials Data - [scanner.stored_name]:
" + for(var/data in scanner.stored_fibers) + scan_data += "- [data]
" + else + scan_data += "No Fibers/Materials Data
"*/ + + scan_data += "Fibers/Materials Found:
" + for(var/data in scanning.suit_fibers) + scan_data += "- [data]
" + if(istype(scanning,/obj/item/device/detective_scanner)) + scan_data += "
Data transfered from Scanner to Database.
" + add_data_scanner(scanning) + else if(!length(scanning.fingerprints)) + scan_data += "
Add to Database?
" + else + temp = "Scan Failed: No Object" + + + if("print") + if(scan_data) + temp = "Scan Data Printed." + var/obj/item/weapon/paper/P = new(loc) + P.name = "Scan Data ([scan_name])" + P.info = "[scan_data]" + P.overlays += "paper_words" + else + temp = "Print Failed: No Data" + if("erase") + scan_data = "" + if("cancel") + scan_process = 0 + if("add") + if(scanning) + add_data(scanning) + else + temp = "Data Transfer Failed: No Object." + updateUsrDialog() + + verb/reset() + set name = "Reset Screen" + set category = "Object" + set src in oview(1) + temp = "" + add_fingerprint(usr) + return + + ex_act() return @@ -312,289 +625,16 @@ obj/machinery/computer/forensic_scanning del(card) return + proc/delete_record(var/location) + if(misc) + for(var/i = location, i < misc.len, i++) + misc[i] = misc[i+i] + misc.len-- + return + proc/get_name(var/atom/A) return A.name - Topic(href,href_list) - switch(href_list["operation"]) - if("login") - var/mob/M = usr - if(istype(M,/mob/living/silicon)) - authenticated = 1 - updateDialog() - return - var/obj/item/weapon/card/id/I = M.equipped() - if (I && istype(I)) - if(src.check_access(I)) - authenticated = 1 - //usr << "\green Access Granted" - //if(!authenticated) - //usr << "\red Access Denied" - if("logout") - authenticated = 0 - if("clear") - if(canclear) - temp = null - if("eject") - if(scanning) - scanning.loc = loc - scanning = null - else - temp = "Eject Failed: No Object" - if("insert") - var/mob/M = usr - var/obj/item/I = M.equipped() - if(I && istype(I)) - if(istype(I, /obj/item/weapon/evidencebag)) - scanning = I.contents[1] - scanning.loc = src - I.overlays -= scanning - I.icon_state = "evidenceobj" - else - scanning = I - M.drop_item() - I.loc = src - else - temp = "Invalid Object Rejected." - if("card") - var/mob/M = usr - var/obj/item/I = M.equipped() - if(I && istype(I,/obj/item/weapon/f_card)) - card = I - M.drop_item() - I.loc = src - process_card() - usr << "You insert the card, and it is destroyed by the machinery in the process of comparing prints." - else - usr << "\red Invalid Object Rejected." - if("database") - canclear = 1 - if(!misc && !files) - temp = "Database is empty." - else - if(files) - temp = "Criminal Evidence Database

" - temp += "Consolidated data points:
" - for(var/i = 1, i < (files.len + 1), i++) - temp += "{Dossier [i]}
" - temp += "
{Insert Finger Print Card}


" - else - temp = "" - if(misc) - temp += "Auxiliary Evidence Database

" - temp += "This is where anything without fingerprints goes.

" - for(var/i = 1, i < (misc.len + 1), i++) - var/list/temp_list = misc[i] - var/item_name = get_name(temp_list[1]) - temp += "{[item_name]}
" - if("record") - canclear = 0 - if(files) - temp = "Criminal Evidence Database

" - temp += "Consolidated data points: Dossier [href_list["identifier"]]
" - var/identifier = text2num(href_list["identifier"]) - var/list/dossier = files[identifier] - var/list/prints = params2list(dossier[1]) - var/print_string = "Fingerprints: Print not complete!
" - 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++) - var/list/outputs = dossier[i] - var/item_name = get_name(outputs[1]) - var/list/prints_len = outputs[2] - temp += "Object: [item_name]
" - temp += "    [prints_len.len] Unique fingerprints found.
" - var/list/fibers = outputs[3] - if(fibers && fibers.len) - var/dat = "[fibers[1]]" - for(var/j = 2, j < (fibers.len + 1), j++) - dat += ",
      [fibers[j]]" - temp += "    Fibers: [dat]
" - else - temp += "    No fibers found.
" - var/list/blood = outputs[4] - if(blood && blood.len) - var/dat = "[blood[1]]" - if(blood.len > 1) - for(var/j = 2, j < (blood.len + 1), j++) - dat += ",
      [blood[j]]" - temp += "    Blood: [dat]
" - else - temp += "    No blood found.
" - else - temp = "ERROR. Database not found!
" - temp += "
{Print}" - temp += "
{Return}" - if("databaseprint") - if(files) - var/obj/item/weapon/paper/P = new(loc) - P.name = "Database File (Dossier [href_list["identifier"]])" - P.overlays += "paper_words" - P.info = "Criminal Evidence Database

" - P.info += "Consolidated data points: Dossier [href_list["identifier"]]
" - var/list/dossier = files[text2num(href_list["identifier"])] - var/list/prints = params2list(dossier[1]) - var/print_string = "Fingerprints: Print not complete!
" - 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++) - var/list/outputs = dossier[i] - var/item_name = get_name(outputs[1]) - var/list/prints_len = outputs[2] - P.info += "Object: [item_name]
" - P.info += "    [prints_len.len] Unique fingerprints found.
" - var/list/fibers = outputs[3] - if(fibers && fibers.len) - var/dat = "[fibers[1]]" - for(var/j = 2, j < (fibers.len + 1), j++) - dat += ",
      [fibers[j]]" - P.info += "    Fibers: [dat]
" - else - P.info += "    No fibers found.
" - var/list/blood = outputs[4] - if(blood && blood.len) - var/dat = "[blood[1]]" - if(blood.len > 1) - for(var/j = 2, j < (blood.len + 1), j++) - dat += ",
      [blood[j]]" - P.info += "    Blood: [dat]
" - else - P.info += "    No blood found." - else - usr << "ERROR. Database not found!
" - if("auxiliary") - canclear = 0 - if(misc) - temp = "Auxiliary Evidence Database

" - var/identifier = text2num(href_list["identifier"]) - var/list/outputs = misc[identifier] - var/item_name = get_name(outputs[1]) - temp += "Consolidated data points: [item_name]
" - var/list/fibers = outputs[2] - if(fibers && fibers.len) - var/dat = "[fibers[1]]" - for(var/j = 2, j <= fibers.len, j++) - dat += "
      [fibers[j]]" - temp += "    Fibers: [dat]
" - else - temp += "    No fibers found." - var/list/blood = outputs[3] - if(blood && blood.len) - var/dat = "[blood[1]]" - for(var/j = 2, j <= blood.len, j++) - dat += "
      [blood[j]]" - temp += "    Blood: [dat]
" - else - temp += "    No blood found.
" - else - temp = "ERROR. Database not found!
" - temp += "
{Return}" - if("scan") - if(scanning) - scan_process = 3 - scan_data = "Scanning [scanning]: 25% complete" - updateDialog() - sleep(50) - if(!scan_process) - scan_data = null - updateDialog() - return - scan_data = "Scanning [scanning]: 50% complete" - updateDialog() - scan_process = 2 - sleep(50) - if(!scan_process) - scan_data = null - updateDialog() - return - scan_data = "Scanning [scanning]: 75% complete" - updateDialog() - scan_process = 1 - sleep(50) - if(!scan_process) - scan_data = null - updateDialog() - return - scan_process = 0 - scan_name = scanning.name - scan_data = "[scanning]

" - if (scanning.blood_DNA) - scan_data += "Blood Found:
" - for(var/i = 1, i < (scanning.blood_DNA.len + 1), i++) - var/list/templist = scanning.blood_DNA[i] - scan_data += "-Blood type: [templist[2]]\nDNA: [templist[1]]

" - else - scan_data += "No Blood Found

" - if (!length(scanning.fingerprints)) - scan_data += "No Fingerprints Found

" - else - var/list/L = scanning.fingerprints - scan_data += "Isolated [L.len] Fingerprints. Loaded into database.
" - add_data(scanning) - - if(!scanning.suit_fibers) - /*if(istype(scanning,/obj/item/device/detective_scanner)) - var/obj/item/device/detective_scanner/scanner = scanning - if(scanner.stored_name) - scan_data += "Fibers/Materials Data - [scanner.stored_name]:
" - for(var/data in scanner.stored_fibers) - scan_data += "- [data]
" - else - scan_data += "No Fibers/Materials Data
" - else*/ - scan_data += "No Fibers/Materials Located
" - else - /*if(istype(scanning,/obj/item/device/detective_scanner)) - var/obj/item/device/detective_scanner/scanner = scanning - if(scanner.stored_name) - scan_data += "Fibers/Materials Data - [scanner.stored_name]:
" - for(var/data in scanner.stored_fibers) - scan_data += "- [data]
" - else - scan_data += "No Fibers/Materials Data
"*/ - - scan_data += "Fibers/Materials Found:
" - for(var/data in scanning.suit_fibers) - scan_data += "- [data]
" - if(istype(scanning,/obj/item/device/detective_scanner)) - scan_data += "
Data transfered from Scanner to Database.
" - add_data_scanner(scanning) - else if(!length(scanning.fingerprints)) - scan_data += "
Add to Database?
" - else - temp = "Scan Failed: No Object" - - - if("print") - if(scan_data) - temp = "Scan Data Printed." - var/obj/item/weapon/paper/P = new(loc) - P.name = "Scan Data ([scan_name])" - P.info = "[scan_data]" - P.overlays += "paper_words" - else - temp = "Print Failed: No Data" - if("erase") - scan_data = "" - if("cancel") - scan_process = 0 - if("add") - if(scanning) - add_data(scanning) - else - temp = "Data Transfer Failed: No Object." - updateUsrDialog() - - verb/reset() - set name = "Reset Screen" - set category = "Object" - set src in oview(1) - temp = "" - add_fingerprint(usr) - return - detective icon_state = "old" name = "PowerScan Mk.I" @@ -663,7 +703,7 @@ turf/proc/add_bloody_footprints(mob/living/carbon/human/M,leaving,d,info) T.desc = "These bloody footprints appear to have been made by [info]." if(istype(M,/mob/living/carbon/human)) T.blood_DNA.len++ - T.blood_DNA[T.blood_DNA.len] = list(M.dna.unique_enzymes,M.b_type) + T.blood_DNA[T.blood_DNA.len] = list(M.dna.unique_enzymes,M.dna.b_type) return var/obj/effect/decal/cleanable/blood/tracks/this = new(src) this.icon = 'footprints.dmi' diff --git a/code/game/atom_procs.dm b/code/game/atom_procs.dm index 0305d64ef21..75b93c8cc81 100644 --- a/code/game/atom_procs.dm +++ b/code/game/atom_procs.dm @@ -93,13 +93,17 @@ src.fingerprintshidden += text("(Wearing gloves). Real name: [], Key: []",H.real_name, H.key) src.fingerprintslast = H.key return 0 - if (H.dna.uni_identity || (H.gloves && prob(25) && istype(H.gloves, /obj/item/clothing/gloves/latex))) + if (H.dna.uni_identity) + if(prob(75) && istype(H.gloves, /obj/item/clothing/gloves/latex)) + return 0 + else if(H.gloves) + return 0 if(src.fingerprintslast != H.key) src.fingerprintshidden += text("Real name: [], Key: []",H.real_name, H.key) src.fingerprintslast = H.key var/new_prints = 0 var/prints - for(var/i = 1, i < (src.fingerprints.len + 1), i++) + for(var/i = 1, i <= src.fingerprints.len, i++) var/list/L = params2list(src.fingerprints[i]) if(L[num2text(1)] == md5(H.dna.uni_identity)) new_prints = i @@ -117,9 +121,12 @@ else 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)))) + 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) 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]) return 1 else if(src.fingerprintslast != M.key) @@ -133,7 +140,7 @@ return 0 if (!( src.flags ) & 256) return - if (!( src.blood_DNA )) + if (src.blood_DNA) if (istype(src, /obj/item)&&!istype(src, /obj/item/weapon/melee/energy))//Only regular items. Energy melee weapon are not affected. var/obj/item/source2 = src source2.icon_old = src.icon @@ -158,7 +165,7 @@ return var/obj/effect/decal/cleanable/blood/this = new /obj/effect/decal/cleanable/blood(source2) var/list/blood_DNA_temp[1] - blood_DNA_temp[1] = list(M.dna.unique_enzymes, M.b_type) + blood_DNA_temp[1] = list(M.dna.unique_enzymes, M.dna.b_type) this.blood_DNA = blood_DNA_temp this.virus2 = M.virus2 for(var/datum/disease/D in M.viruses) @@ -201,7 +208,8 @@ if( istype(src, /turf/simulated) ) var/turf/simulated/source1 = src var/obj/effect/decal/cleanable/blood/this = new /obj/effect/decal/cleanable/blood(source1) - this.blood_DNA = M.dna.unique_enzymes + this.blood_DNA = list(M.dna.unique_enzymes, M.dna.b_type) + this.OriginalMob = M.dna.original_name for(var/datum/disease/D in M.viruses) var/datum/disease/newDisease = new D.type this.viruses += newDisease diff --git a/code/game/machinery/bots/mulebot.dm b/code/game/machinery/bots/mulebot.dm index 3326604e932..441a7f06fbe 100644 --- a/code/game/machinery/bots/mulebot.dm +++ b/code/game/machinery/bots/mulebot.dm @@ -698,13 +698,8 @@ // calculates a path to the current destination // given an optional turf to avoid /obj/machinery/bot/mulebot/proc/calc_path(var/turf/avoid = null) - if(src.target) - src.path = AStar(src.loc, src.target, /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance_ortho, 0, 250, id=botcard, exclude=avoid) - src.path = reverselist(src.path) - else - for (var/mob/M in world) - if (M.client && M.client.holder) - M << "ERROR:A Mulebot has attempted to path to a null target! This is a bug!" + src.path = AStar(src.loc, src.target, /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance_ortho, 0, 250, id=botcard, exclude=avoid) + src.path = reverselist(src.path) // sets the current destination diff --git a/code/game/machinery/kitchen/gibber.dm b/code/game/machinery/kitchen/gibber.dm index f22e963b133..fb144b3e56e 100644 --- a/code/game/machinery/kitchen/gibber.dm +++ b/code/game/machinery/kitchen/gibber.dm @@ -176,15 +176,22 @@ newmeat.reagents.add_reagent("nutriment", sourcenutriment / totalslabs) // Thehehe. Fat guys go first allmeat += newmeat + for (var/mob/M in world) + if (M.client && M.client.holder && (M.client.holder.level != -3)) + M << "\red [user.name]//[user.ckey] has gibbed [src.occupant.name]//[src.occupant.ckey]" src.occupant.death(1) src.occupant.ghostize() del(src.occupant) spawn(src.gibtime) playsound(src.loc, 'splat.ogg', 50, 1) operating = 0 + var/iterator = 0 for (var/i=1 to allmeat.len) var/obj/item/meatslab = allmeat[i] - var/turf/Tx = locate(src.x - i, src.y, src.z) + var/turf/Tx = locate(src.x - i - iterator, src.y, src.z) + if(Tx.density) + iterator += 1 + Tx = locate(src.x - i - iterator, src.y, src.z) meatslab.loc = src.loc meatslab.throw_at(Tx,i,3) if (!Tx.density) diff --git a/code/game/objects/displaycase.dm b/code/game/objects/displaycase.dm index aa06f50f3f3..ea1f08b8c48 100644 --- a/code/game/objects/displaycase.dm +++ b/code/game/objects/displaycase.dm @@ -81,6 +81,7 @@ if ((O.client && !( O.blinded ))) O << text("\red [] kicks the display case.", usr) src.health -= 2 + src.add_fingerprint(user) healthcheck() return diff --git a/code/modules/chemical/Chemistry-Reagents.dm b/code/modules/chemical/Chemistry-Reagents.dm index b95d019cd77..fb7b81f6dde 100644 --- a/code/modules/chemical/Chemistry-Reagents.dm +++ b/code/modules/chemical/Chemistry-Reagents.dm @@ -1450,6 +1450,8 @@ datum M:adjustOxyLoss(-3) M:heal_organ_damage(3,3) M:adjustToxLoss(-3) + M:halloss = 0 + M:hallucination -= 5 ..() return diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index f5db92ac0b9..5a551dd5fd5 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -159,7 +159,7 @@ // a.hallucinate(src) if(!handling_hal && hallucination > 20) spawn handle_hallucinations() //The not boring kind! - hallucination -= 1 + hallucination -= 2 //if(health < 0) // for(var/obj/a in hallucinations) // del a