diff --git a/code/game/machinery/telecomms/broadcaster.dm b/code/game/machinery/telecomms/broadcaster.dm index 5b32f3a1f78..707e68225c4 100644 --- a/code/game/machinery/telecomms/broadcaster.dm +++ b/code/game/machinery/telecomms/broadcaster.dm @@ -288,6 +288,9 @@ var if (R.client && R.client.STFU_radio) //Adminning with 80 people on can be fun when you're trying to talk and all you can hear is radios. continue + if(istype(M, /mob/new_player)) // we don't want new players to hear messages. rare but generates runtimes. + continue + // --- Check for compression --- if(compression > 0) diff --git a/code/game/machinery/telecomms/logbrowser.dm b/code/game/machinery/telecomms/logbrowser.dm index a9934dd7b78..9e4bf23ab9c 100644 --- a/code/game/machinery/telecomms/logbrowser.dm +++ b/code/game/machinery/telecomms/logbrowser.dm @@ -58,10 +58,12 @@ for(var/datum/comm_log_entry/C in SelectedServer.log_entries) i++ - dat += "
  • [C.name] \[X\]
    " // If the log is a speech file if(C.input_type == "Speech File") + + dat += "
  • [C.name] \[X\]
    " + // -- Determine race of orator -- var/race // The actual race of the mob @@ -113,9 +115,10 @@ dat += "

  • " else if(C.input_type == "Execution Error") - dat += "Data type: [C.input_type]
    " - dat += "Source: Internal server code
    " - dat += "Contents: \"[C.parameters["message"]]\"
    " + + dat += "
  • [C.name] \[X\]
    " + dat += "Output: \"[C.parameters["message"]]\"
    " + dat += "

  • " dat += "" @@ -192,7 +195,7 @@ var/newnet = input(usr, "Which network do you want to view?", "Comm Monitor", network) as null|text - if(newnet && usr in range(1, src)) + if(newnet && ((usr in range(1, src) || issilicon(usr)))) if(length(newnet) > 15) temp = "- FAILED: NETWORK TAG STRING TOO LENGHTLY -" diff --git a/code/game/machinery/telecomms/traffic_control.dm b/code/game/machinery/telecomms/traffic_control.dm index 1014a2b62ea..972c36e9110 100644 --- a/code/game/machinery/telecomms/traffic_control.dm +++ b/code/game/machinery/telecomms/traffic_control.dm @@ -10,6 +10,7 @@ screen = 0 // the screen number: list/servers = list() // the servers located by the computer mob/editingcode + mob/lasteditor list/viewingcode = list() obj/machinery/telecomms/server/SelectedServer @@ -49,13 +50,13 @@ showcode = dd_replacetext(storedcode, "\"", "\\\"") for(var/mob/M in viewingcode) - if(M.machine == src && M in view(1, src)) + + if( (M.machine == src && M in view(1, src) ) || issilicon(M)) winset(M, "tcscode", "is-disabled=true") winset(M, "tcscode", "text=\"[showcode]\"") else - if(!issilicon(M)) - viewingcode.Remove(M) - winshow(M, "Telecomms IDE", 0) // hide the window! + viewingcode.Remove(M) + winshow(M, "Telecomms IDE", 0) // hide the window! sleep(5) @@ -164,6 +165,7 @@ if(usr in viewingcode) return if(!editingcode) + lasteditor = usr editingcode = usr winshow(editingcode, "Telecomms IDE", 1) // show the IDE winset(editingcode, "tcscode", "is-disabled=false") diff --git a/code/modules/DetectiveWork/detective_work.dm b/code/modules/DetectiveWork/detective_work.dm index 7e5b2bcdfb7..b2c22c4ccc9 100644 --- a/code/modules/DetectiveWork/detective_work.dm +++ b/code/modules/DetectiveWork/detective_work.dm @@ -219,7 +219,7 @@ obj/machinery/computer/forensic_scanning temp += "Consolidated data points:
    " for(var/i = 1, i <= files.len, i++) temp += "{Dossier [i]}
    " - temp += "
    {Insert Finger Print Card}


    " + temp += "
    {Insert Finger Print Card (To complete a Dossier)}


    " else temp = "" if(misc && misc.len) @@ -700,63 +700,89 @@ obj/machinery/computer/forensic_scanning obj/item/clothing/shoes/var track_blood = 0 mob/living/carbon/human/track_blood_mob + track_blood_type mob/var bloody_hands = 0 mob/living/carbon/human/bloody_hands_mob track_blood mob/living/carbon/human/track_blood_mob + track_blood_type obj/item/clothing/gloves/var transfer_blood = 0 mob/living/carbon/human/bloody_hands_mob -obj/effect/decal/cleanable/blood/var - track_amt = 2 +obj/effect/decal/cleanable/var + track_amt = 3 mob/blood_owner turf/Exited(mob/living/carbon/human/M) if(istype(M,/mob/living) && !istype(M,/mob/living/carbon/metroid)) - if(!istype(src, /turf/space)) // Bloody tracks code starts here - if(M.track_blood > 0) - M.track_blood-- - src.add_bloody_footprints(M.track_blood_mob,1,M.dir,get_tracks(M)) - else if(istype(M,/mob/living/carbon/human)) - if(M.shoes) - if(M.shoes.track_blood > 0) - M.shoes.track_blood-- - src.add_bloody_footprints(M.shoes.track_blood_mob,1,M.dir,M.shoes.name) // And bloody tracks end here + var/dofoot = 1 + if(istype(M,/mob/living/simple_animal)) + if(!(istype(M,/mob/living/simple_animal/cat) || istype(M,/mob/living/simple_animal/corgi) || istype(M,/mob/living/simple_animal/constructwraith))) + dofoot = 0 + + if(dofoot) + + if(!istype(src, /turf/space)) // Bloody tracks code starts here + if(M.track_blood > 0) + M.track_blood-- + src.add_bloody_footprints(M.track_blood_mob,1,M.dir,get_tracks(M),M.track_blood_type) + else if(istype(M,/mob/living/carbon/human)) + if(M.shoes) + if(M.shoes.track_blood > 0) + M.shoes.track_blood-- + src.add_bloody_footprints(M.shoes.track_blood_mob,1,M.dir,M.shoes.name,M.shoes.track_blood_type) // And bloody tracks end here . = ..() turf/Entered(mob/living/carbon/human/M) if(istype(M,/mob/living) && !istype(M,/mob/living/carbon/metroid)) - if(M.track_blood > 0) - M.track_blood-- - src.add_bloody_footprints(M.track_blood_mob,0,M.dir,get_tracks(M)) - else if(istype(M,/mob/living/carbon/human)) - if(M.shoes && !istype(src,/turf/space)) - if(M.shoes.track_blood > 0) - M.shoes.track_blood-- - src.add_bloody_footprints(M.shoes.track_blood_mob,0,M.dir,M.shoes.name) + var/dofoot = 1 + if(istype(M,/mob/living/simple_animal)) + if(!(istype(M,/mob/living/simple_animal/cat) || istype(M,/mob/living/simple_animal/corgi) || istype(M,/mob/living/simple_animal/constructwraith))) + dofoot = 0 + + if(dofoot) + + if(M.track_blood > 0) + M.track_blood-- + src.add_bloody_footprints(M.track_blood_mob,0,M.dir,get_tracks(M),M.track_blood_type) + else if(istype(M,/mob/living/carbon/human)) + if(M.shoes && !istype(src,/turf/space)) + if(M.shoes.track_blood > 0) + M.shoes.track_blood-- + src.add_bloody_footprints(M.shoes.track_blood_mob,0,M.dir,M.shoes.name,M.shoes.track_blood_type) - for(var/obj/effect/decal/cleanable/blood/B in src) - if(B.track_amt <= 0) continue - if(B.type != /obj/effect/decal/cleanable/blood/tracks) - if(istype(M,/mob/living/carbon/human)) - if(M.shoes) - M.shoes.add_blood(B.blood_owner) - M.shoes.track_blood_mob = B.blood_owner - M.shoes.track_blood = max(M.shoes.track_blood,8) - else - M.add_blood(B.blood_owner) - M.track_blood_mob = B.blood_owner - M.track_blood = max(M.track_blood,rand(4,8)) - B.track_amt-- - break + for(var/obj/effect/decal/cleanable/B in src) + if(B:track_amt <= 0) continue + if(B.type != /obj/effect/decal/cleanable/blood/tracks) + if(istype(B, /obj/effect/decal/cleanable/xenoblood) || istype(B, /obj/effect/decal/cleanable/blood) || istype(B, /obj/effect/decal/cleanable/oil) || istype(B, /obj/effect/decal/cleanable/robot_debris)) + + var/track_type = "blood" + if(istype(B, /obj/effect/decal/cleanable/xenoblood)) + track_type = "xeno" + else if(istype(B, /obj/effect/decal/cleanable/oil) || istype(B, /obj/effect/decal/cleanable/robot_debris)) + track_type = "oil" + + if(istype(M,/mob/living/carbon/human)) + if(M.shoes) + M.shoes.add_blood(B.blood_owner) + M.shoes.track_blood_mob = B.blood_owner + M.shoes.track_blood = max(M.shoes.track_blood,8) + M.shoes.track_blood_type = track_type + else + M.add_blood(B.blood_owner) + M.track_blood_mob = B.blood_owner + M.track_blood = max(M.track_blood,rand(4,8)) + M.track_blood_type = track_type + B.track_amt-- + break . = ..() -turf/proc/add_bloody_footprints(mob/living/carbon/human/M,leaving,d,info) +turf/proc/add_bloody_footprints(mob/living/carbon/human/M,leaving,d,info,bloodcolor) for(var/obj/effect/decal/cleanable/blood/tracks/T in src) - if(T.dir == d) + if(T.dir == d && findtext(T.icon, bloodcolor)) if((leaving && T.icon_state == "steps2") || (!leaving && T.icon_state == "steps1")) T.desc = "These bloody footprints appear to have been made by [info]." if(T.blood_DNA) @@ -770,12 +796,29 @@ turf/proc/add_bloody_footprints(mob/living/carbon/human/M,leaving,d,info) return var/obj/effect/decal/cleanable/blood/tracks/this = new(src) this.icon = 'footprints.dmi' + + var/preiconstate = "" + + if(info == "animal paws") + preiconstate = "paw" + else if(info == "alien claws") + preiconstate = "claw" + else if(info == "small alien feet") + preiconstate = "paw" + if(leaving) - this.icon_state = "blood2" + this.icon_state = "[bloodcolor][preiconstate]2" else - this.icon_state = "blood1" + this.icon_state = "[bloodcolor][preiconstate]1" this.dir = d - this.desc = "These bloody footprints appear to have been made by [info]." + + if(bloodcolor == "blood") + this.desc = "These bloody footprints appear to have been made by [info]." + else if(bloodcolor == "xeno") + this.desc = "These acidic bloody footprints appear to have been made by [info]." + else if(bloodcolor == "oil") + this.desc = "These oil footprints appear to have been made by [info]." + if(istype(M,/mob/living/carbon/human)) if(this.blood_DNA.len) this.blood_DNA.len++ @@ -787,15 +830,18 @@ proc/get_tracks(mob/M) if(istype(M,/mob/living)) if(istype(M,/mob/living/carbon/human)) . = "human feet" - else if(istype(M,/mob/living/carbon/monkey)) - . = "monkey paws" + else if(istype(M,/mob/living/carbon/monkey) || istype(M,/mob/living/simple_animal/cat) || istype(M,/mob/living/simple_animal/corgi) || istype(M,/mob/living/simple_animal/crab)) + . = "animal paws" else if(istype(M,/mob/living/silicon/robot)) . = "robot feet" - else if(istype(M,/mob/living/carbon/alien)) + else if(istype(M,/mob/living/carbon/alien/humanoid)) . = "alien claws" + else if(istype(M,/mob/living/carbon/alien/larva)) + . = "small alien feet" else . = "an unknown creature" + proc/blood_incompatible(donor,receiver) var donor_antigen = copytext(donor,1,lentext(donor)) diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 4279085a460..6fbfe0db907 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -962,7 +962,8 @@ lying = 1 stat = 0 if (paralysis > 0) - handle_dreams() + if(sleeping > 0) + handle_dreams() AdjustParalysis(-1) blinded = 1 lying = 1 diff --git a/icons/effects/footprints.dmi b/icons/effects/footprints.dmi index 61d86aaa16b..ede9c8e17d6 100644 Binary files a/icons/effects/footprints.dmi and b/icons/effects/footprints.dmi differ