From 2ddbf8e6fde90c586d8c168f069d2669fe3439de Mon Sep 17 00:00:00 2001 From: Nathan Winters <100448493+CinnamonSnowball@users.noreply.github.com> Date: Thu, 13 Jul 2023 18:53:20 +0200 Subject: [PATCH] [s] Fixes some blood properties not interacting properly (#21647) * Minor cleanup * Fix blood not merging some properties properly --- .../reagents/chemistry/reagents/water.dm | 60 ++++++++++--------- 1 file changed, 33 insertions(+), 27 deletions(-) diff --git a/code/modules/reagents/chemistry/reagents/water.dm b/code/modules/reagents/chemistry/reagents/water.dm index b6ea31be1c4..fafda47c4fc 100644 --- a/code/modules/reagents/chemistry/reagents/water.dm +++ b/code/modules/reagents/chemistry/reagents/water.dm @@ -127,38 +127,44 @@ SetViruses(src, data) /datum/reagent/blood/on_merge(list/mix_data) - if(data && mix_data) - data["cloneable"] = 0 //On mix, consider the genetic sampling unviable for pod cloning, or else we won't know who's even getting cloned, etc coagulated - if(data["species"] != mix_data["species"] && (data["species_only"] == TRUE || mix_data["species_only"] == TRUE)) - data["species"] = "Cogulated blood" - data["blood_type"] = "UNUSABLE!" - data["species_only"] = TRUE - else if(data["species"] != mix_data["species"]) - data["species"] = "Mixed Humanoid blood" - if(data["viruses"] || mix_data["viruses"]) + if(!data || !mix_data) + return - var/list/mix1 = data["viruses"] - var/list/mix2 = mix_data["viruses"] + var/same_species = data["species"] == mix_data["species"] + var/species_unique = data["species_only"] || mix_data["species_only"] + var/species_mismatch = species_unique && !same_species + var/type_mismatch = data["blood_type"] != mix_data["blood_type"] - // Stop issues with the list changing during mixing. - var/list/to_mix = list() + if(mix_data["blood_color"]) + color = mix_data["blood_color"] + data["cloneable"] = 0 // On mix, consider the genetic sampling unviable for pod cloning, or else we won't know who's even getting cloned - for(var/datum/disease/advance/AD in mix1) - to_mix += AD - for(var/datum/disease/advance/AD in mix2) - to_mix += AD + if(type_mismatch || species_mismatch) + data["species"] = "Coagulated blood" + data["blood_type"] = "UNUSABLE!" + data["species_only"] = species_unique + else if(!same_species) // Same blood type, species-agnostic, but we're still mixing blood of different species + data["species"] = "Mixed humanoid blood" - var/datum/disease/advance/AD = Advance_Mix(to_mix) - if(AD) - var/list/preserve = list(AD) - for(var/D in data["viruses"]) - if(!istype(D, /datum/disease/advance)) - preserve += D - data["viruses"] = preserve + if(data["viruses"] || mix_data["viruses"]) + var/list/mix1 = data["viruses"] + var/list/mix2 = mix_data["viruses"] - if(mix_data["blood_color"]) - color = mix_data["blood_color"] - return 1 + // Stop issues with the list changing during mixing. + var/list/to_mix = list() + + for(var/datum/disease/advance/AD in mix1) + to_mix += AD + for(var/datum/disease/advance/AD in mix2) + to_mix += AD + + var/datum/disease/advance/AD = Advance_Mix(to_mix) + if(AD) + var/list/preserve = list(AD) + for(var/D in data["viruses"]) + if(!istype(D, /datum/disease/advance)) + preserve += D + data["viruses"] = preserve /datum/reagent/blood/on_update(atom/A) if(data["blood_color"])