diff --git a/code/game/objects/effects/decals/cleanable/gibs.dm b/code/game/objects/effects/decals/cleanable/gibs.dm
index 09fbdb6528..2762416949 100644
--- a/code/game/objects/effects/decals/cleanable/gibs.dm
+++ b/code/game/objects/effects/decals/cleanable/gibs.dm
@@ -11,12 +11,12 @@
var/gibs_reagent_id = /datum/reagent/liquidgibs
var/gibs_bloodtype = "A+"
-/obj/effect/decal/cleanable/blood/gibs/Initialize(mapload, list/datum/disease/diseases)
+/obj/effect/decal/cleanable/blood/gibs/Initialize(mapload, list/datum/disease/diseases, list/blood_data)
. = ..()
if(random_icon_states && (icon_state == initial(icon_state)) && length(random_icon_states) > 0)
icon_state = pick(random_icon_states)
if(gibs_reagent_id)
- reagents.add_reagent(gibs_reagent_id, 5)
+ reagents.add_reagent(gibs_reagent_id, 5, blood_data)
if(gibs_bloodtype)
add_blood_DNA(list("Non-human DNA" = gibs_bloodtype), diseases)
update_icon()
diff --git a/code/game/objects/effects/spawners/gibspawner.dm b/code/game/objects/effects/spawners/gibspawner.dm
index 231c1465cd..00ddf0e9ef 100644
--- a/code/game/objects/effects/spawners/gibspawner.dm
+++ b/code/game/objects/effects/spawners/gibspawner.dm
@@ -31,7 +31,10 @@
var/list/dna_to_add //find the dna to pass to the spawned gibs. do note this can be null if the mob doesn't have blood. add_blood_DNA() has built in null handling.
var/body_coloring = ""
+
+ var/list/blood_data_to_add
if(source_mob)
+ blood_data_to_add = source_mob.get_blood_data()
if(!issilicon(source_mob))
dna_to_add = blood_dna || source_mob.get_blood_dna_list() //ez pz
if(ishuman(source_mob))
@@ -65,7 +68,7 @@
if(gibamounts[i])
for(var/j = 1, j<= gibamounts[i], j++)
var/gibType = gibtypes[i]
- gib = new gibType(loc, diseases)
+ gib = new gibType(loc, diseases, blood_data_to_add)
if(iscarbon(loc))
var/mob/living/carbon/digester = loc
digester.stomach_contents += gib
diff --git a/code/modules/arousal/genitals.dm b/code/modules/arousal/genitals.dm
index b7e90e5b84..60a858386c 100644
--- a/code/modules/arousal/genitals.dm
+++ b/code/modules/arousal/genitals.dm
@@ -168,9 +168,9 @@
R.clear_reagents()
R.maximum_volume = fluid_max_volume
if(fluid_id)
- R.add_reagent(fluid_id,amount)
+ R.add_reagent(fluid_id,amount, owner.get_blood_data())
else if(linked_organ?.fluid_id)
- R.add_reagent(linked_organ.fluid_id,amount)
+ R.add_reagent(linked_organ.fluid_id,amount, owner.get_blood_data())
return TRUE
/obj/item/organ/genital/proc/update_link()
diff --git a/code/modules/hydroponics/grown/replicapod.dm b/code/modules/hydroponics/grown/replicapod.dm
index 328b4c391c..053daaf3af 100644
--- a/code/modules/hydroponics/grown/replicapod.dm
+++ b/code/modules/hydroponics/grown/replicapod.dm
@@ -53,31 +53,21 @@
/obj/item/seeds/replicapod/on_reagent_change(changetype)
if(changetype == ADD_REAGENT)
- var/datum/reagent/blood/B = reagents.has_reagent(/datum/reagent/blood)
- if(B)
- if(B.data["mind"] && B.data["cloneable"])
- mind = B.data["mind"]
- ckey = B.data["ckey"]
- realName = B.data["real_name"]
- blood_gender = B.data["gender"]
- blood_type = B.data["blood_type"]
- features = B.data["features"]
- factions = B.data["factions"]
- quirks = B.data["quirks"]
- contains_sample = TRUE
- visible_message("The [src] is injected with a fresh blood sample.")
- else
- visible_message("The [src] rejects the sample!")
-
- if(!reagents.has_reagent(/datum/reagent/blood))
- mind = null
- ckey = null
- realName = null
- blood_gender = null
- blood_type = null
- features = null
- factions = null
- contains_sample = FALSE
+ for(var/datum/reagent/R as anything in reagents.reagent_list)
+ if(R.data["mind"])
+ if(R.data["cloneable"])
+ mind = R.data["mind"]
+ ckey = R.data["ckey"]
+ realName = R.data["real_name"]
+ blood_gender = R.data["gender"]
+ blood_type = R.data["blood_type"]
+ features = R.data["features"]
+ factions = R.data["factions"]
+ quirks = R.data["quirks"]
+ contains_sample = TRUE
+ visible_message("The [src] is injected with a fresh blood sample.")
+ else
+ visible_message("The [src] rejects the sample!")
/obj/item/seeds/replicapod/get_analyzer_text()
var/text = ..()
diff --git a/code/modules/mob/living/blood.dm b/code/modules/mob/living/blood.dm
index 7615792028..2a05639ad9 100644
--- a/code/modules/mob/living/blood.dm
+++ b/code/modules/mob/living/blood.dm
@@ -156,7 +156,7 @@
blood_volume -= amount
- var/list/blood_data = get_blood_data(blood_id)
+ var/list/blood_data = get_blood_data()
if(iscarbon(AM))
var/mob/living/carbon/C = AM
@@ -177,54 +177,53 @@
return TRUE
-/mob/living/proc/get_blood_data(blood_id)
+/mob/living/proc/get_blood_data()
return
-/mob/living/carbon/get_blood_data(blood_id)
- if(blood_id == /datum/reagent/blood || /datum/reagent/blood/jellyblood) //actual blood reagent
- var/blood_data = list()
- //set the blood data
- blood_data["donor"] = src
- blood_data["viruses"] = list()
+/mob/living/carbon/get_blood_data()
+ var/blood_data = list()
+ //set the blood data
+ blood_data["donor"] = src
+ blood_data["viruses"] = list()
- for(var/thing in diseases)
- var/datum/disease/D = thing
- blood_data["viruses"] += D.Copy()
+ for(var/thing in diseases)
+ var/datum/disease/D = thing
+ blood_data["viruses"] += D.Copy()
- blood_data["blood_DNA"] = dna.unique_enzymes
- blood_data["bloodcolor"] = dna.species.exotic_blood_color
- if(disease_resistances && disease_resistances.len)
- blood_data["resistances"] = disease_resistances.Copy()
- var/list/temp_chem = list()
- for(var/datum/reagent/R in reagents.reagent_list)
- temp_chem[R.type] = R.volume
- blood_data["trace_chem"] = list2params(temp_chem)
- if(mind)
- blood_data["mind"] = mind
- else if(last_mind)
- blood_data["mind"] = last_mind
- if(ckey)
- blood_data["ckey"] = ckey
- else if(last_mind)
- blood_data["ckey"] = ckey(last_mind.key)
+ blood_data["blood_DNA"] = dna.unique_enzymes
+ blood_data["bloodcolor"] = dna.species.exotic_blood_color
+ if(disease_resistances && disease_resistances.len)
+ blood_data["resistances"] = disease_resistances.Copy()
+ var/list/temp_chem = list()
+ for(var/datum/reagent/R in reagents.reagent_list)
+ temp_chem[R.type] = R.volume
+ blood_data["trace_chem"] = list2params(temp_chem)
+ if(mind)
+ blood_data["mind"] = mind
+ else if(last_mind)
+ blood_data["mind"] = last_mind
+ if(ckey)
+ blood_data["ckey"] = ckey
+ else if(last_mind)
+ blood_data["ckey"] = ckey(last_mind.key)
- if(!suiciding)
- blood_data["cloneable"] = 1
- blood_data["blood_type"] = dna.blood_type
- blood_data["gender"] = gender
- blood_data["real_name"] = real_name
- blood_data["features"] = dna.features
- blood_data["factions"] = faction
- blood_data["quirks"] = list()
- for(var/V in roundstart_quirks)
- var/datum/quirk/T = V
- blood_data["quirks"] += T.type
- blood_data["changeling_loudness"] = 0
- if(mind)
- var/datum/antagonist/changeling/ling = mind.has_antag_datum(/datum/antagonist/changeling)
- if(istype(ling))
- blood_data["changeling_loudness"] = ling.loudfactor
- return blood_data
+ if(!suiciding)
+ blood_data["cloneable"] = 1
+ blood_data["blood_type"] = dna.blood_type
+ blood_data["gender"] = gender
+ blood_data["real_name"] = real_name
+ blood_data["features"] = dna.features
+ blood_data["factions"] = faction
+ blood_data["quirks"] = list()
+ for(var/V in roundstart_quirks)
+ var/datum/quirk/T = V
+ blood_data["quirks"] += T.type
+ blood_data["changeling_loudness"] = 0
+ if(mind)
+ var/datum/antagonist/changeling/ling = mind.has_antag_datum(/datum/antagonist/changeling)
+ if(istype(ling))
+ blood_data["changeling_loudness"] = ling.loudfactor
+ return blood_data
//get the id of the substance this mob use as blood.
/mob/proc/get_blood_id()