Stomach Contamination DNA Residue (#19622)

* Fix advanced scanner

* p1

* p2

* Blood name to DNA
This commit is contained in:
Cameron Lennox
2026-07-24 11:00:55 +02:00
committed by GitHub
parent 5c064f11ea
commit 1a182c64d3
7 changed files with 31 additions and 27 deletions
+3 -3
View File
@@ -81,7 +81,7 @@
var/list/choices = list()
if(A.forensic_data?.has_blooddna())
choices |= "Blood"
choices |= "DNA"
if(istype(A, /obj/item/clothing))
choices |= "Gunshot Residue"
@@ -98,10 +98,10 @@
return
var/sample_type
if(choice == "Blood")
if(choice == "DNA")
if(!A.forensic_data?.has_blooddna()) return
dna = A.forensic_data?.get_blooddna().Copy()
sample_type = "blood"
sample_type = "DNA"
else if(choice == "Gunshot Residue")
var/obj/item/clothing/B = A
+3 -3
View File
@@ -889,7 +889,7 @@
if(I)
M.unEquip(I,force = TRUE)
if(contaminates)
I.gurgle_contaminate(contents, contamination_flavor, contamination_color) //We do an initial contamination pass to get stuff like IDs wet.
I.gurgle_contaminate(contents, contamination_flavor, contamination_color, src) //We do an initial contamination pass to get stuff like IDs wet.
if(item_digest_mode == IM_HOLD)
items_preserved |= I
else if(item_digest_mode == IM_DIGEST_FOOD && !(istype(I,/obj/item/reagent_containers/food) || istype(I,/obj/item/organ)))
@@ -1119,10 +1119,10 @@
if(isitem(content))
var/obj/item/I = content
if(istype(I,/obj/item/card/id))
I.gurgle_contaminate(target.contents, target.contamination_flavor, target.contamination_color)
I.gurgle_contaminate(target.contents, target.contamination_flavor, target.contamination_color, src)
if(I.gurgled && target.contaminates)
I.wash(CLEAN_WASH)
I.gurgle_contaminate(target.contents, target.contamination_flavor, target.contamination_color)
I.gurgle_contaminate(target.contents, target.contamination_flavor, target.contamination_color, src)
items_preserved -= content
if(!silent)
handle_visual_update()
+1 -1
View File
@@ -284,7 +284,7 @@
var/did_an_item = FALSE
// We always contaminate IDs.
if(contaminates || istype(I, /obj/item/card/id))
I.gurgle_contaminate(src, contamination_flavor, contamination_color)
I.gurgle_contaminate(src, contamination_flavor, contamination_color, src)
switch(item_digest_mode)
if(IM_HOLD)
+21 -17
View File
@@ -16,7 +16,7 @@ GLOBAL_LIST_INIT(gurgled_overlays, list(
"pink" = image('icons/effects/sludgeoverlay_vr.dmi', icon_state = "pink")
))
/obj/item/proc/gurgle_contaminate(atom/movable/item_storage = null, contamination_flavor = "Generic", contamination_color = "green")
/obj/item/proc/gurgle_contaminate(atom/movable/item_storage = null, contamination_flavor = "Generic", contamination_color = "green", obj/belly/contamination_source = null)
if(!can_gurgle())
return FALSE
@@ -34,6 +34,10 @@ GLOBAL_LIST_INIT(gurgled_overlays, list(
cleandesc = src.desc
name = "[gurgleflavor] [cleanname]"
desc = "[cleandesc] It seems to be covered in ominously foul residue and needs a wash."
if(contamination_source && contamination_source.owner) //Add something to track back the owner. Until we get various 'dna sources' we'll just settle on blooddna
if(ishuman(contamination_source.owner))
var/mob/living/carbon/human/stomach_owner = contamination_source.owner
add_blooddna(stomach_owner.dna, stomach_owner)
// for(var/obj/item/O in contents) //Yeah, no. This contaminates stuff that should never be contaminated in places that should not be reached. Handle it for specific cases instead.
// O.gurgle_contaminate(item_storage, contamination_flavor, contamination_color)
return TRUE
@@ -62,62 +66,62 @@ GLOBAL_LIST_INIT(gurgled_overlays, list(
//////////////
// Special handling of gurgle_contaminate
//////////////
/obj/item/card/id/gurgle_contaminate(atom/movable/item_storage = null)
/obj/item/card/id/gurgle_contaminate(atom/movable/item_storage = null, contamination_flavor = "Generic", contamination_color = "green", obj/belly/contamination_source = null)
digest_act(item_storage) //Contamination and digestion does same thing to these
return TRUE
/obj/item/pda/gurgle_contaminate(atom/movable/item_storage = null)
/obj/item/pda/gurgle_contaminate(atom/movable/item_storage = null, contamination_flavor = "Generic", contamination_color = "green", obj/belly/contamination_source = null)
return FALSE
/obj/item/reagent_containers/food/gurgle_contaminate(atom/movable/item_storage = null)
/obj/item/reagent_containers/food/gurgle_contaminate(atom/movable/item_storage = null, contamination_flavor = "Generic", contamination_color = "green", obj/belly/contamination_source = null)
return FALSE
/obj/item/storage/vore_egg/gurgle_contaminate(atom/movable/item_storage = null)
/obj/item/storage/vore_egg/gurgle_contaminate(atom/movable/item_storage = null, contamination_flavor = "Generic", contamination_color = "green", obj/belly/contamination_source = null)
return FALSE
/obj/item/holder/gurgle_contaminate(atom/movable/item_storage = null)
/obj/item/holder/gurgle_contaminate(atom/movable/item_storage = null, contamination_flavor = "Generic", contamination_color = "green", obj/belly/contamination_source = null)
if(isbelly(loc))
digest_act(item_storage)
return TRUE
return FALSE
/obj/item/organ/gurgle_contaminate(atom/movable/item_storage = null)
/obj/item/organ/gurgle_contaminate(atom/movable/item_storage = null, contamination_flavor = "Generic", contamination_color = "green", obj/belly/contamination_source = null)
return FALSE
/obj/item/cell/gurgle_contaminate(atom/movable/item_storage = null)
/obj/item/cell/gurgle_contaminate(atom/movable/item_storage = null, contamination_flavor = "Generic", contamination_color = "green", obj/belly/contamination_source = null)
if(!gurgled)
//Don't make them wet, just drain
var/obj/item/cell/C = src
C.charge = 0
return TRUE
/obj/item/storage/box/gurgle_contaminate(atom/movable/item_storage = null)
/obj/item/storage/box/gurgle_contaminate(atom/movable/item_storage = null, contamination_flavor = "Generic", contamination_color = "green", obj/belly/contamination_source = null)
if((. = ..()))
name = "soggy [cleanname]"
desc = "This soggy box is about to fall apart any time."
//Storages that contaminate contents
/obj/item/storage/backpack/gurgle_contaminate(atom/movable/item_storage = null, contamination_flavor = "Generic", contamination_color = "green")
/obj/item/storage/backpack/gurgle_contaminate(atom/movable/item_storage = null, contamination_flavor = "Generic", contamination_color = "green", obj/belly/contamination_source = null)
if(contents)
for(var/obj/item/O in contents)
O.gurgle_contaminate(item_storage, contamination_flavor, contamination_color)
O.gurgle_contaminate(item_storage, contamination_flavor, contamination_color, contamination_source)
..()
/obj/item/storage/belt/gurgle_contaminate(atom/movable/item_storage = null, contamination_flavor = "Generic", contamination_color = "green")
/obj/item/storage/belt/gurgle_contaminate(atom/movable/item_storage = null, contamination_flavor = "Generic", contamination_color = "green", obj/belly/contamination_source = null)
if(contents)
for(var/obj/item/O in contents)
O.gurgle_contaminate(item_storage, contamination_flavor, contamination_color)
O.gurgle_contaminate(item_storage, contamination_flavor, contamination_color, contamination_source)
..()
/obj/item/storage/belt/gurgle_contaminate(atom/movable/item_storage = null, contamination_flavor = "Generic", contamination_color = "green")
/obj/item/storage/belt/gurgle_contaminate(atom/movable/item_storage = null, contamination_flavor = "Generic", contamination_color = "green", obj/belly/contamination_source = null)
if(contents)
for(var/obj/item/O in contents)
O.gurgle_contaminate(item_storage, contamination_flavor, contamination_color)
O.gurgle_contaminate(item_storage, contamination_flavor, contamination_color, contamination_source)
..()
/obj/item/clothing/suit/storage/gurgle_contaminate(atom/movable/item_storage = null, contamination_flavor = "Generic", contamination_color = "green")
/obj/item/clothing/suit/storage/gurgle_contaminate(atom/movable/item_storage = null, contamination_flavor = "Generic", contamination_color = "green", obj/belly/contamination_source = null)
if(pockets)
if(pockets.contents)
for(var/obj/item/O in pockets.contents)
O.gurgle_contaminate(item_storage, contamination_flavor, contamination_color)
O.gurgle_contaminate(item_storage, contamination_flavor, contamination_color, contamination_source)
..()
+1 -1
View File
@@ -73,7 +73,7 @@
wash(CLEAN_ALL)
if(istype(B))
gurgled_color = B.contamination_color //Apply the correct color setting so uncontaminable things can still have the right overlay.
gurgle_contaminate(B, B.contamination_flavor, B.contamination_color)
gurgle_contaminate(B, B.contamination_flavor, B.contamination_color, B)
if(digest_stage <= 0)
if(istype(src, /obj/item/pda))
var/obj/item/pda/P = src
@@ -674,7 +674,7 @@
/obj/item/clothing/head/fluff/pompom/digest_act(atom/movable/item_storage = null)
return FALSE
/obj/item/clothing/head/fluff/pompom/gurgle_contaminate(atom/movable/item_storage = null)
/obj/item/clothing/head/fluff/pompom/gurgle_contaminate(atom/movable/item_storage = null, contamination_flavor = "Generic", contamination_color = "green", obj/belly/contamination_source = null)
return FALSE
/obj/item/clothing/head/fluff/pompom/attack_self(mob/user)
@@ -1592,7 +1592,7 @@ Departamental Swimsuits, for general use
/obj/item/clothing/accessory/bracer/fluff/xander_sthasha/digest_act(atom/movable/item_storage = null)
return FALSE
/obj/item/clothing/accessory/bracer/fluff/xander_sthasha/gurgle_contaminate(atom/movable/item_storage = null)
/obj/item/clothing/accessory/bracer/fluff/xander_sthasha/gurgle_contaminate(atom/movable/item_storage = null, contamination_flavor = "Generic", contamination_color = "green", obj/belly/contamination_source = null)
return FALSE
//Heroman3003:Lauren Zackson