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()