Forensics Datum (#17796)

* forensics datum initial work

* typo fix

* glove recursion fix

* missing bloodtype on organ data

* removed frustrating and unneeded b_type var from humans

* no leaky

* listcheck

* documenting

* documentation
This commit is contained in:
Will
2025-06-05 23:30:11 -07:00
committed by GitHub
parent be6680da62
commit ae718f07e3
62 changed files with 603 additions and 400 deletions
+5 -4
View File
@@ -93,13 +93,14 @@
var/whereLink = "<A href='byond://?_src_=holder;[HrefToken()];adminplayerobservecoodjump=1;X=[location.x];Y=[location.y];Z=[location.z]'>[where]</a>"
if(show_log)
if(carry.my_atom.fingerprintslast)
var/mob/M = get_mob_by_key(carry.my_atom.fingerprintslast)
var/print_name = carry.my_atom.forensic_data?.get_lastprint()
if(print_name)
var/mob/M = get_mob_by_key(print_name)
var/more = ""
if(M)
more = "(<A href='byond://?_src_=holder;[HrefToken()];adminmoreinfo=\ref[M]'>?</a>)"
message_admins("A chemical smoke reaction has taken place in ([whereLink])[contained]. Last associated key is [carry.my_atom.fingerprintslast][more].", 0, 1)
log_game("A chemical smoke reaction has taken place in ([where])[contained]. Last associated key is [carry.my_atom.fingerprintslast].")
message_admins("A chemical smoke reaction has taken place in ([whereLink])[contained]. Last associated key is [print_name][more].", 0, 1)
log_game("A chemical smoke reaction has taken place in ([where])[contained]. Last associated key is [print_name].")
else
message_admins("A chemical smoke reaction has taken place in ([whereLink]). No associated key.", 0, 1)
log_game("A chemical smoke reaction has taken place in ([where])[contained]. No associated key.")
@@ -16,7 +16,6 @@ var/global/list/image/splatter_cache=list()
icon_state = "mfloor1"
random_icon_states = list("mfloor1", "mfloor2", "mfloor3", "mfloor4", "mfloor5", "mfloor6", "mfloor7")
var/base_icon = 'icons/effects/blood.dmi'
blood_DNA = list()
var/basecolor="#A10808" // Color when wet.
var/synthblood = 0
var/list/datum/disease/viruses = list()
@@ -49,8 +48,7 @@ var/global/list/image/splatter_cache=list()
if(src.loc && isturf(src.loc))
for(var/obj/effect/decal/cleanable/blood/B in src.loc)
if(B != src)
if (B.blood_DNA)
blood_DNA |= B.blood_DNA.Copy()
init_forensic_data().merge_blooddna(B.forensic_data)
if(!(B.flags & ATOM_INITIALIZED))
B.delete_me = TRUE
else
@@ -102,21 +100,20 @@ var/global/list/image/splatter_cache=list()
S.update_icon() // Cut previous overlays
if(!S.blood_overlay)
S.generate_blood_overlay()
if(!S.blood_DNA)
S.blood_DNA = list()
if(!forensic_data?.has_blooddna())
S.blood_overlay.color = basecolor
S.add_overlay(S.blood_overlay)
if(S.blood_overlay && S.blood_overlay.color != basecolor)
S.blood_overlay.color = basecolor
S.add_overlay(S.blood_overlay)
S.blood_DNA |= blood_DNA.Copy()
transfer_blooddna_to(S)
perp.update_inv_shoes()
else if (hasfeet)//Or feet
perp.feet_blood_color = basecolor
perp.track_blood = max(amount,perp.track_blood)
LAZYINITLIST(perp.feet_blood_DNA)
perp.feet_blood_DNA |= blood_DNA.Copy()
perp.feet_blood_DNA |= init_forensic_data().get_blooddna().Copy()
perp.update_bloodied()
else if (perp.buckled && istype(perp.buckled, /obj/structure/bed/chair/wheelchair))
var/obj/structure/bed/chair/wheelchair/W = perp.buckled
@@ -145,9 +142,7 @@ var/global/list/image/splatter_cache=list()
var/taken = rand(1,amount)
amount -= taken
to_chat(user, span_notice("You get some of \the [src] on your hands."))
if (!user.blood_DNA)
user.blood_DNA = list()
user.blood_DNA |= blood_DNA.Copy()
transfer_blooddna_to(user)
user.bloody_hands += taken
user.hand_blood_color = basecolor
user.update_inv_gloves(1)
@@ -113,8 +113,7 @@ var/global/list/image/fluidtrack_cache=list()
updated=1
dirs |= comingdir|realgoing
if(islist(blood_DNA))
blood_DNA |= DNA.Copy()
init_forensic_data().merge_blooddna(null,DNA)
if(updated)
update_icon()
+3 -3
View File
@@ -46,11 +46,11 @@
gib.update_icon()
gib.blood_DNA = list()
gib.init_forensic_data()
if(MobDNA)
gib.blood_DNA[MobDNA.unique_enzymes] = MobDNA.b_type
gib.add_blooddna(MobDNA,null)
else if(istype(src, /obj/effect/gibspawner/human)) // Probably a monkey
gib.blood_DNA["Non-human DNA"] = "A+"
gib.add_blooddna(null,null)
if(istype(location,/turf/))
var/list/directions = gibdirections[i]
if(directions.len)