From dcca5ccb6e46b9af9f97773d365bc80d4692804a Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Sat, 18 Oct 2014 07:52:27 +1030 Subject: [PATCH] Fixes #6763 --- code/modules/organs/blood.dm | 19 ++++++++++++------- code/modules/organs/organ_internal.dm | 7 ++----- 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/code/modules/organs/blood.dm b/code/modules/organs/blood.dm index 9af498eea3..8d4144a550 100644 --- a/code/modules/organs/blood.dm +++ b/code/modules/organs/blood.dm @@ -232,7 +232,7 @@ var/const/BLOOD_VOLUME_SURVIVE = 122 if (!injected || !our) return - if(blood_incompatible(injected.data["blood_type"],our.data["blood_type"]) ) + if(blood_incompatible(injected.data["blood_type"],our.data["blood_type"],injected.data["species"],our.data["species"]) ) reagents.add_reagent("toxin",amount * 0.5) reagents.update_total() else @@ -250,13 +250,18 @@ var/const/BLOOD_VOLUME_SURVIVE = 122 return D return res -proc/blood_incompatible(donor,receiver) +proc/blood_incompatible(donor,receiver,donor_species,receiver_species) if(!donor || !receiver) return 0 - var - donor_antigen = copytext(donor,1,lentext(donor)) - receiver_antigen = copytext(receiver,1,lentext(receiver)) - donor_rh = (findtext(donor,"+")>0) - receiver_rh = (findtext(receiver,"+")>0) + + if(donor_species && receiver_species) + if(donor_species != receiver_species) + return 1 + + var/donor_antigen = copytext(donor,1,lentext(donor)) + var/receiver_antigen = copytext(receiver,1,lentext(receiver)) + var/donor_rh = (findtext(donor,"+")>0) + var/receiver_rh = (findtext(receiver,"+")>0) + if(donor_rh && !receiver_rh) return 1 switch(receiver_antigen) if("A") diff --git a/code/modules/organs/organ_internal.dm b/code/modules/organs/organ_internal.dm index 907d5fa122..183197dfbb 100644 --- a/code/modules/organs/organ_internal.dm +++ b/code/modules/organs/organ_internal.dm @@ -73,11 +73,8 @@ // Process unsuitable transplants. TODO: consider some kind of // immunosuppressant that changes transplant data to make it match. if(transplant_data) - if(!rejecting) //Should this transplant reject? - if(owner.species != transplant_data["species"]) //Nope. - rejecting = 1 - else if(prob(20) && owner.dna && blood_incompatible(transplant_data["blood_type"],owner.dna.b_type)) - rejecting = 1 + if(!rejecting && prob(20) && owner.dna && blood_incompatible(transplant_data["blood_type"],owner.dna.b_type,owner.species,transplant_data["species"])) + rejecting = 1 else rejecting++ //Rejection severity increases over time. if(rejecting % 10 == 0) //Only fire every ten rejection ticks.