diff --git a/code/game/atom_procs.dm b/code/game/atom_procs.dm index 20e5dc6a56..543deb2595 100644 --- a/code/game/atom_procs.dm +++ b/code/game/atom_procs.dm @@ -62,15 +62,10 @@ return /atom/proc/attackby(obj/item/weapon/W as obj, mob/user as mob) - if (istype(W, /obj/item/device/detective_scanner)) + if (!(istype(W, /obj/item/weapon/grab) ) && !(istype(W, /obj/item/weapon/plastique)) && !(istype(W, /obj/item/weapon/cleaner)) && !(istype(W, /obj/item/weapon/chemsprayer)) && !(istype(W, /obj/item/weapon/pepperspray)) && !(istype(W, /obj/item/weapon/plantbgone)) && !(istype(W, /obj/item/weapon/packageWrap))) for(var/mob/O in viewers(src, null)) if ((O.client && !( O.blinded ))) - O << "\red [src] has been scanned by [user] with the [W]" - else - if (!(istype(W, /obj/item/weapon/grab) ) && !(istype(W, /obj/item/weapon/plastique)) && !(istype(W, /obj/item/weapon/cleaner)) && !(istype(W, /obj/item/weapon/chemsprayer)) && !(istype(W, /obj/item/weapon/pepperspray)) && !(istype(W, /obj/item/weapon/plantbgone)) && !(istype(W, /obj/item/weapon/packageWrap))) - for(var/mob/O in viewers(src, null)) - if ((O.client && !( O.blinded ))) - O << "\red [src] has been hit by [user] with [W]" + O << "\red [src] has been hit by [user] with [W]" return /atom/proc/add_hiddenprint(mob/living/M as mob) @@ -106,7 +101,6 @@ 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)) if(!istype(H.dna, /datum/dna)) @@ -220,7 +214,6 @@ //if there isn't a blood decal already, make one. var/obj/effect/decal/cleanable/blood/newblood = new /obj/effect/decal/cleanable/blood(T) newblood.blood_DNA = list(list(M.dna.unique_enzymes, M.dna.b_type)) - newblood.blood_owner = M for(var/datum/disease/D in M.viruses) var/datum/disease/newDisease = new D.type newblood.viruses += newDisease @@ -294,9 +287,6 @@ if (istype (src, /mob/living/carbon)) var/mob/living/carbon/M = src del(M.blood_DNA) - if(ishuman(src)) - var/mob/living/carbon/human/H = src - H.bloody_hands = 0 //Cleaning blood off of items else if (istype (src, /obj/item)) @@ -305,10 +295,6 @@ if(O.blood_overlay) O.overlays.Remove(O.blood_overlay) - if(istype(src, /obj/item/clothing/gloves)) - var/obj/item/clothing/gloves/G = src - G.transfer_blood = 0 - //Cleaning blood off of turfs else if (istype(src, /turf/simulated)) var/turf/simulated/T = src diff --git a/code/game/jobs/job/civilian.dm b/code/game/jobs/job/civilian.dm index 595bda8b4b..470d3abf51 100644 --- a/code/game/jobs/job/civilian.dm +++ b/code/game/jobs/job/civilian.dm @@ -295,10 +295,8 @@ var/global/lawyer = 0//Checks for another lawyer H.equip_if_possible(new /obj/item/weapon/storage/briefcase(H), H.slot_l_hand) if(H.backbag == 1) H.equip_if_possible(new /obj/item/weapon/storage/box/survival(H), H.slot_r_hand) - H.equip_if_possible(new /obj/item/device/detective_scanner(H), H.slot_l_store)//Why do they even get this? else H.equip_if_possible(new /obj/item/weapon/storage/box/survival(H.back), H.slot_in_backpack) - H.equip_if_possible(new /obj/item/device/detective_scanner(H), H.slot_in_backpack)//No really.. why do they even get this? return 1 diff --git a/code/game/jobs/job/security.dm b/code/game/jobs/job/security.dm index 7c85aff30d..4e07e15585 100644 --- a/code/game/jobs/job/security.dm +++ b/code/game/jobs/job/security.dm @@ -106,13 +106,9 @@ var/obj/item/weapon/storage/box/survival/Evipack = new /obj/item/weapon/storage/box/survival(H) H.equip_if_possible(Evipack, H.slot_r_hand) new /obj/item/weapon/fcardholder(Evipack) - H.equip_if_possible(new /obj/item/weapon/storage/box/evidence(H), H.slot_l_hand) - H.equip_if_possible(new /obj/item/device/detective_scanner(H), H.slot_r_store) else H.equip_if_possible(new /obj/item/weapon/storage/box/survival(H.back), H.slot_in_backpack) - H.equip_if_possible(new /obj/item/weapon/storage/box/evidence(H.back), H.slot_in_backpack) H.equip_if_possible(new /obj/item/weapon/fcardholder(H), H.slot_in_backpack) - H.equip_if_possible(new /obj/item/device/detective_scanner(H), H.slot_in_backpack) var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H) L.imp_in = H diff --git a/code/game/machinery/door_control.dm b/code/game/machinery/door_control.dm index 4924cdc00f..33a72d933d 100644 --- a/code/game/machinery/door_control.dm +++ b/code/game/machinery/door_control.dm @@ -22,8 +22,6 @@ return } */ - if(istype(W, /obj/item/device/detective_scanner)) - return return src.attack_hand(user) /obj/machinery/door_control/attack_hand(mob/user as mob) @@ -106,9 +104,6 @@ return src.attack_hand(user) /obj/machinery/driver_button/attackby(obj/item/weapon/W, mob/user as mob) - - if(istype(W, /obj/item/device/detective_scanner)) - return return src.attack_hand(user) /obj/machinery/driver_button/attack_hand(mob/user as mob) diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 076a3149f7..ca5e78298a 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -965,8 +965,6 @@ About the new airlock wires panel: if(src.shock(user, 75)) return - if (istype(C, /obj/item/device/detective_scanner)) - return src.add_fingerprint(user) if((istype(C, /obj/item/weapon/weldingtool) && !( src.operating ) && src.density)) var/obj/item/weapon/weldingtool/W = C diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index 0a19b2925e..36bbbc3d75 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -114,8 +114,6 @@ attackby(obj/item/I as obj, mob/user as mob) - if (istype(I, /obj/item/device/detective_scanner)) - return if(src.operating || isrobot(user)) return //borgs can't attack doors open because it conflicts with their AI-like interaction with them. src.add_fingerprint(user) if(!src.requiresID()) diff --git a/code/game/machinery/igniter.dm b/code/game/machinery/igniter.dm index 9c4852d16a..a19a417e95 100644 --- a/code/game/machinery/igniter.dm +++ b/code/game/machinery/igniter.dm @@ -106,9 +106,6 @@ return src.attack_hand(user) /obj/machinery/ignition_switch/attackby(obj/item/weapon/W, mob/user as mob) - - if(istype(W, /obj/item/device/detective_scanner)) - return return src.attack_hand(user) /obj/machinery/ignition_switch/attack_hand(mob/user as mob) diff --git a/code/game/master_controller.dm b/code/game/master_controller.dm index 9766a8e5bf..1f29af3b3c 100644 --- a/code/game/master_controller.dm +++ b/code/game/master_controller.dm @@ -211,18 +211,18 @@ datum/controller/game_controller else while(spinning) current_iteration = controller_iteration - sleep(150) // Wait 15 seconds + sleep(600) // Wait 15 seconds if(current_iteration == controller_iteration) // Mm. The master controller hasn't ticked yet. for (var/mob/M in world) if (M.client && M.client.holder) - M << " Warning. The Master Controller has not fired in the last 15 seconds. Restart recommended. Automatic restart in 15 seconds." + M << " Warning. The Master Controller has not fired in the last 60 seconds. Restart recommended. Automatic restart in 60 seconds." - sleep(150) + sleep(600) if(current_iteration == controller_iteration) for (var/mob/M in world) if (M.client && M.client.holder) - M << " Warning. The Master Controller has not fired in the last 30 seconds. Automatic restart beginning." + M << " Warning. The Master Controller has not fired in the last 2 minutes. Automatic restart beginning." master_controller.process() sleep(150) else diff --git a/code/game/objects/closets/secure/security.dm b/code/game/objects/closets/secure/security.dm index d1148a14d1..521e8370f5 100644 --- a/code/game/objects/closets/secure/security.dm +++ b/code/game/objects/closets/secure/security.dm @@ -162,8 +162,6 @@ new /obj/item/weapon/storage/fcard_kit(src) new /obj/item/weapon/fcardholder(src) new /obj/item/weapon/clipboard(src) - new /obj/item/device/detective_scanner(src) - new /obj/item/weapon/storage/box/evidence(src) return diff --git a/code/game/objects/devices/scanners.dm b/code/game/objects/devices/scanners.dm index bdc0ab5def..e1ab5899cc 100644 --- a/code/game/objects/devices/scanners.dm +++ b/code/game/objects/devices/scanners.dm @@ -59,216 +59,6 @@ MASS SPECTROMETER if(M) M.invisibility = 2 - -/obj/item/device/detective_scanner - name = "Scanner" - desc = "Used to scan objects for DNA and fingerprints." - icon_state = "forensic1" - var/amount = 20.0 -// var/printing = 0.0 - var/list/stored = list() - w_class = 3.0 - item_state = "electronic" - flags = FPRINT | TABLEPASS | ONBELT | CONDUCT | USEDELAY - - - attackby(obj/item/weapon/f_card/W as obj, mob/user as mob) - ..() - if (istype(W, /obj/item/weapon/f_card)) - if (W.fingerprints) - return - if (src.amount == 20) - return - if (W.amount + src.amount > 20) - src.amount = 20 - W.amount = W.amount + src.amount - 20 - else - src.amount += W.amount - //W = null - del(W) - src.add_fingerprint(user) - if (W) - W.add_fingerprint(user) - return - -// attack_self(mob/user as mob) -// src.printing = !( src.printing ) -// if(src.printing) -// user << "\blue Printing turned on" -// else -// user << "\blue Printing turned off" -// src.icon_state = text("forensic[]", src.printing) -// add_fingerprint(user) -// return - - attack(mob/living/carbon/human/M as mob, mob/user as mob) - if (!ishuman(M)) - user << "\red [M] is not human and cannot have the fingerprints." - return 0 - if (( !( istype(M.dna, /datum/dna) ) || M.gloves) ) - user << "\blue No fingerprints found on [M]" - return 0 - else - if (src.amount < 1) - user << text("\blue Fingerprints scanned on [M]. Need more cards to print.") -// src.printing = 0 -// src.icon_state = text("forensic[]", src.printing) -// if (src.printing) - else - src.amount-- - var/obj/item/weapon/f_card/F = new /obj/item/weapon/f_card( user.loc ) - F.amount = 1 - F.fingerprints += md5(M.dna.uni_identity) - F.icon_state = "fingerprint1" - F.name = text("FPrintC- '[M.name]'") - - user << "\blue Done printing." - user << text("\blue [M]'s Fingerprints: [md5(M.dna.uni_identity)]") - if ( !M.blood_DNA || !M.blood_DNA.len ) - user << "\blue No blood found on [M]" - if(M.blood_DNA) - del(M.blood_DNA) - else - user << "\blue Blood found on [M]. Analysing..." - spawn(15) - for(var/i = 1, i <= M.blood_DNA.len, i++) - var/list/templist = M.blood_DNA[i] - user << "\blue Blood type: [templist[2]]\nDNA: [templist[1]]" - return - - afterattack(atom/A as obj|turf|area, mob/user as mob) - if(!(locate(A) in oview(1,user))) - return - if(src.loc != user) - return 0 - if(istype(A,/obj/machinery/computer/forensic_scanning)) //breaks shit. - return - 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)) - for(var/i = 1, i <= A.blood_DNA.len, i++) - var/list/templist = A.blood_DNA[i] - user << "\blue Blood type: [templist[2]]\nDNA: [templist[1]]" - return - var/duplicate = 0 - if ((!A.fingerprints || !A.fingerprints.len) && !A.suit_fibers && !A.blood_DNA) - user << "\blue Unable to locate any fingerprints, materials, fibers, or blood on [A]!" - return 0 - else if (A.blood_DNA) - user << "\blue Blood found on [A]. Analysing..." - sleep(15) - if(!duplicate) - duplicate = 1 - var/i = add_data(A) - if(i) - user << "\blue Blood already in memory." - for(var/i = 1, i < (A.blood_DNA.len + 1), i++) - var/list/templist = A.blood_DNA[i] - user << "\blue Blood type: [templist[2]]\nDNA: [templist[1]]" - else - user << "\blue No Blood Located" - if(!A.fingerprints || !A.fingerprints.len) - user << "\blue No Fingerprints Located." - if(A.fingerprints) - del(A.fingerprints) - else - user << text("\blue Isolated [A.fingerprints.len] fingerprints: Data Stored: Scan with Hi-Res Forensic Scanner to retrieve.") - if(!duplicate) - duplicate = 1 - var/i = add_data(A) - if(i) - user << "\blue Fingerprints already in memory." - if(!A.suit_fibers) - user << "\blue No Fibers/Materials Located." - else - user << "\blue Fibers/Materials Data Stored: Scan with Hi-Res Forensic Scanner to retrieve." - - if(!duplicate) - duplicate = 1 - var/i = add_data(A) - if(i) - user << "\blue Fibers/Materials already in memory." - // else - // if ((src.amount < 1 && src.printing)) - // user << "\blue Fingerprints found. Need more cards to print." - // src.printing = 0 - // src.icon_state = text("forensic[]", src.printing) - // if (src.printing) - // src.amount-- - // var/obj/item/weapon/f_card/F = new /obj/item/weapon/f_card( user.loc ) - // F.amount = 1 - // F.fingerprints = A.fingerprints - // F.icon_state = "fingerprint1" - // user << "\blue Done printing." - // for(var/i in L) - // user << text("\blue \t [i]") - // //Foreach goto(186) - return - - proc/add_data(atom/A as mob|obj|turf|area) - var/merged = 0 - if(!stored || !stored.len) - stored = list() - 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] - 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) - prints = list() - 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, 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! - prints[k] = test_print2 + "&" + stringmerge(print_test2[num2text(2)],print_test1[num2text(2)]) - found = 1 - break //We found it, we're done here. - if(!found) //It isn't! Add! - prints += A.fingerprints[j] - var/list/fibers = temp[3] - if(!fibers) - fibers = list() - 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 && A.blood_DNA.len) - 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! - sum_list[1] = checker - sum_list[2] = prints - sum_list[3] = fibers - sum_list[4] = blood - stored[i] = sum_list //Store it! - break //We found it, we're done here. - if(!merged) //Uh, oh! New data point! - var/list/sum_list[4] //Pack it back up! - sum_list[1] = A.get_duplicate(src) - sum_list[2] = A.fingerprints - sum_list[3] = A.suit_fibers - sum_list[4] = A.blood_DNA - stored.len++ - stored[stored.len] = sum_list - return merged - - /obj/item/device/healthanalyzer name = "Health Analyzer" icon_state = "health" diff --git a/code/modules/clothing/suits/detective.dm b/code/modules/clothing/suits/detective.dm index 841c9366c6..033d581efa 100644 --- a/code/modules/clothing/suits/detective.dm +++ b/code/modules/clothing/suits/detective.dm @@ -12,7 +12,7 @@ icon_state = "detective" item_state = "det_suit" body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS - allowed = list(/obj/item/weapon/tank/emergency_oxygen, /obj/item/device/flashlight,/obj/item/weapon/gun/energy,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/cigpacket,/obj/item/weapon/lighter,/obj/item/device/detective_scanner,/obj/item/device/taperecorder) + allowed = list(/obj/item/weapon/tank/emergency_oxygen, /obj/item/device/flashlight,/obj/item/weapon/gun/energy,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/cigpacket,/obj/item/weapon/lighter,/obj/item/device/taperecorder) armor = list(melee = 50, bullet = 10, laser = 25, energy = 10, bomb = 0, bio = 0, rad = 0) diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 08548c0645..2a2d149fb5 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -137,12 +137,8 @@ emp_act 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 diff --git a/html/changelog.html b/html/changelog.html index 5ba64f5d0a..88e6c31a4d 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -93,6 +93,15 @@ Stuff which is in development and not yet visible to players or just code relate should be listed in the changelog upon commit tho. Thanks. --> +
+

Monday, April 9th

+

Petethegoat updated:

+ +
+

Sunday, April 8th

PolymorphBlue updated:

diff --git a/maps/tgstation.2.0.8.dmm b/maps/tgstation.2.0.8.dmm index 561def04fe..7922fb292e 100644 --- a/maps/tgstation.2.0.8.dmm +++ b/maps/tgstation.2.0.8.dmm @@ -791,7 +791,7 @@ "apk" = (/turf/simulated/floor{dir = 10; icon_state = "carpetside"},/area/security/detectives_office) "apl" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = "Streight"},/turf/simulated/floor{icon_state = "carpetside"},/area/security/detectives_office) "apm" = (/turf/simulated/floor{dir = 6; icon_state = "carpetside"},/area/security/detectives_office) -"apn" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/computer/forensic_scanning,/turf/simulated/floor{icon_state = "grimy"},/area/security/detectives_office) +"apn" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor{icon_state = "grimy"},/area/security/detectives_office) "apo" = (/obj/structure/closet/lawcloset,/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/turf/simulated/floor{icon_state = "wood"},/area/lawoffice) "app" = (/obj/machinery/atmospherics/unary/vent_pump{on = 1},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = "Streight"},/turf/simulated/floor{icon_state = "wood"},/area/lawoffice) "apq" = (/obj/structure/stool/bed/chair,/obj/effect/landmark/start{name = "Lawyer"},/turf/simulated/floor{icon_state = "wood"},/area/lawoffice) @@ -6312,7 +6312,7 @@ "crt" = (/obj/machinery/door/airlock/external,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "NTrasen"; name = "Outer Airlock"; opacity = 0},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/specops/centcom) "cru" = (/turf/space,/turf/simulated/shuttle/wall{dir = 1; icon_state = "diagonalWall3"},/area/shuttle/specops/centcom) "crv" = (/obj/machinery/door/airlock/centcom{name = "General Access"; opacity = 1; req_access_txt = "101"},/turf/unsimulated/floor{icon_state = "delivery"},/area/centcom/control) -"crw" = (/obj/structure/table,/obj/item/assembly/shock_kit{icon = 'icons/obj/assemblies.dmi'},/obj/item/device/assembly/signaler,/obj/item/weapon/handcuffs,/obj/item/weapon/melee/classic_baton,/turf/unsimulated/floor{icon_state = "whiteshiny"},/area/centcom/control) +"crw" = (/obj/structure/table,/obj/item/assembly/shock_kit{icon = 'assemblies.dmi'},/obj/item/device/assembly/signaler,/obj/item/weapon/handcuffs,/obj/item/weapon/melee/classic_baton,/turf/unsimulated/floor{icon_state = "whiteshiny"},/area/centcom/control) "crx" = (/obj/structure/shuttle/engine/propulsion{tag = "icon-propulsion (EAST)"; icon_state = "propulsion"; dir = 4},/turf/space,/area/shuttle/specops/centcom) "cry" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/shuttle/engine/heater{tag = "icon-heater (WEST)"; icon_state = "heater"; dir = 8},/turf/unsimulated/floor,/area/shuttle/specops/centcom) "crz" = (/obj/effect/landmark{name = "Commando-Bomb"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/specops/centcom) diff --git a/tgstation.dme b/tgstation.dme index 02f7fe8b51..1871d56719 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -802,8 +802,6 @@ #include "code\modules\critters\critter_defenses.dm" #include "code\modules\critters\critters.dm" #include "code\modules\critters\hivebots\hivebot.dm" -#include "code\modules\detectivework\detective_work.dm" -#include "code\modules\detectivework\evidence.dm" #include "code\modules\flufftext\Dreaming.dm" #include "code\modules\flufftext\Hallucination.dm" #include "code\modules\flufftext\TextFilters.dm"