From 5361458b510682be1fe648d6d2adc9fa83ce042a Mon Sep 17 00:00:00 2001 From: paprka Date: Fri, 23 Jan 2015 21:00:09 -0800 Subject: [PATCH] some updates --- code/game/atoms.dm | 8 ++-- code/modules/admin/create_mob.dm | 1 + .../detectivework/footprints_and_rag.dm | 20 ---------- code/modules/mob/living/carbon/human/blood.dm | 40 +++++++++++-------- 4 files changed, 30 insertions(+), 39 deletions(-) diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 1c6692677cb..723e8d81a61 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -329,11 +329,12 @@ var/list/blood_splatter_icons = list() bloody_hands_mob = M return 1 -/turf/simulated/add_blood(mob/living/carbon/M) +/turf/simulated/add_blood(mob/living/carbon/human/M) if(..() == 0) return 0 var/obj/effect/decal/cleanable/blood/B = locate() in contents //check for existing blood splatter - if(!B) B = new /obj/effect/decal/cleanable/blood(src) //make a bloood splatter if we couldn't find one + if(!B) + blood_splatter(src,M.get_blood(M.vessel),1) B.add_blood_list(M) return 1 //we bloodied the floor @@ -366,7 +367,8 @@ var/list/blood_splatter_icons = list() if(istype(src, /turf/simulated)) if(check_dna_integrity(M)) //mobs with dna = (monkeys + humans at time of writing) var/obj/effect/decal/cleanable/blood/B = locate() in contents - if(!B) B = new(src) + if(!B) + blood_splatter(src,M,1) B.blood_DNA[M.dna.unique_enzymes] = M.dna.blood_type else if(istype(M, /mob/living/carbon/alien)) var/obj/effect/decal/cleanable/xenoblood/B = locate() in contents diff --git a/code/modules/admin/create_mob.dm b/code/modules/admin/create_mob.dm index 425837d9e84..656f0adfb7c 100644 --- a/code/modules/admin/create_mob.dm +++ b/code/modules/admin/create_mob.dm @@ -20,4 +20,5 @@ H.hair_color = random_short_color() H.facial_hair_color = H.hair_color H.eye_color = random_eye_color() + H.dna.blood_type = random_blood_type() H.update_icons() \ No newline at end of file diff --git a/code/modules/detectivework/footprints_and_rag.dm b/code/modules/detectivework/footprints_and_rag.dm index 098f7bfea7c..a2d323e81d8 100644 --- a/code/modules/detectivework/footprints_and_rag.dm +++ b/code/modules/detectivework/footprints_and_rag.dm @@ -8,26 +8,6 @@ var/mob/living/carbon/human/bloody_hands_mob - -/proc/blood_incompatible(donor,receiver) - - var/donor_antigen = copytext(donor,1,lentext(donor)) - var/receiver_antigen = copytext(receiver,1,lentext(receiver)) - var/donor_rh = findtext("+",donor) - var/receiver_rh = findtext("+",receiver) - - if(donor_rh && !receiver_rh) return 1 - switch(receiver_antigen) - if("A") - if(donor_antigen != "A" && donor_antigen != "O") return 1 - if("B") - if(donor_antigen != "B" && donor_antigen != "O") return 1 - if("O") - if(donor_antigen != "O") return 1 - //AB is a universal receiver. - return 0 - - /obj/item/weapon/reagent_containers/glass/rag name = "damp rag" desc = "For cleaning up messes, you suppose." diff --git a/code/modules/mob/living/carbon/human/blood.dm b/code/modules/mob/living/carbon/human/blood.dm index 373b6e3674a..6a4bee74152 100644 --- a/code/modules/mob/living/carbon/human/blood.dm +++ b/code/modules/mob/living/carbon/human/blood.dm @@ -234,7 +234,7 @@ var/const/BLOOD_VOLUME_SURVIVE = 122 return D return res -/mob/living/carbon/proc/blood_incompatible(donor,receiver,donor_species,receiver_species) +proc/blood_incompatible(donor,receiver,donor_species,receiver_species) if(!donor || !receiver) return 0 if(donor_species && receiver_species) @@ -257,8 +257,7 @@ var/const/BLOOD_VOLUME_SURVIVE = 122 //AB is a universal receiver. return 0 -/mob/living/carbon/proc/blood_splatter(var/target,var/datum/reagent/blood/source) - +proc/blood_splatter(var/target,var/datum/reagent/blood/source,var/large) var/obj/effect/decal/cleanable/blood/B var/decal_type = /obj/effect/decal/cleanable/blood/splatter var/turf/T = get_turf(target) @@ -273,21 +272,24 @@ var/const/BLOOD_VOLUME_SURVIVE = 122 source.data["blood_DNA"] = donor.dna.unique_enzymes source.data["blood_type"] = donor.dna.blood_type - // Only a certain number of drips can be on a given turf. - var/list/drips = list() - var/list/drip_icons = list("1","2","3","4","5") + // Are we dripping or splattering? + if(!large) - for(var/obj/effect/decal/cleanable/blood/drip/drop in T) - drips += drop - drip_icons.Remove(drop.icon_state) + // Only a certain number of drips can be on a given turf. + var/list/drips = list() + var/list/drip_icons = list("1","2","3","4","5") - // If we have too many drips, remove them and spawn a proper blood splatter. - if(drips.len >= 5) - //TODO: copy all virus data from drips to new splatter? - for(var/obj/effect/decal/cleanable/blood/drip/drop in drips) - del drop - else - decal_type = /obj/effect/decal/cleanable/blood/drip + for(var/obj/effect/decal/cleanable/blood/drip/drop in T) + drips += drop + drip_icons.Remove(drop.icon_state) + + // If we have too many drips, remove them and spawn a proper blood splatter. + if(drips.len >= 5) + //TODO: copy all virus data from drips to new splatter? + for(var/obj/effect/decal/cleanable/blood/drip/drop in drips) + del drop + else + decal_type = /obj/effect/decal/cleanable/blood/drip // Find a blood decal or create a new one. B = locate(decal_type) in T @@ -306,4 +308,10 @@ var/const/BLOOD_VOLUME_SURVIVE = 122 else B.blood_DNA[source.data["blood_DNA"]] = "O+" + // Update virus information. + for(var/datum/disease/D in source.data["viruses"]) + var/datum/disease/new_virus = D.Copy(1) + source.data["viruses"] += new_virus + new_virus.holder = B + return B \ No newline at end of file