diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index 01953690274..8b77b80b769 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -62,8 +62,6 @@ else M.LAssailant = user - //spawn(1800) // this wont work right - // M.lastattacker = null ///////////////////////// if(istype(M, /mob/living/simple_animal)) diff --git a/code/modules/surgery/organs/blood.dm b/code/modules/surgery/organs/blood.dm index 60dd2f1f10c..46ce153254e 100644 --- a/code/modules/surgery/organs/blood.dm +++ b/code/modules/surgery/organs/blood.dm @@ -187,7 +187,7 @@ var/const/BLOOD_VOLUME_SURVIVE = 122 //Gets blood from mob to the container, preserving all data in it. /mob/living/carbon/proc/take_blood(obj/item/weapon/reagent_containers/container, var/amount) var/datum/reagent/B = get_blood(container.reagents) - if(!B) B = new /datum/reagent/blood + if(!istype(B, /datum/reagent/blood)) B = new /datum/reagent/blood B.holder = container B.volume += amount @@ -241,7 +241,7 @@ var/const/BLOOD_VOLUME_SURVIVE = 122 //Transfers blood from container ot vessels /mob/living/carbon/proc/inject_blood(obj/item/weapon/reagent_containers/container, var/amount) var/datum/reagent/blood/injected = get_blood(container.reagents) - if (!injected) + if (!istype(injected)) return var/list/sniffles = virus_copylist(injected.data["virus2"]) for(var/ID in sniffles) @@ -269,7 +269,7 @@ var/const/BLOOD_VOLUME_SURVIVE = 122 var/datum/reagent/blood/our = get_blood(vessel) - if (!injected || !our) + if (!istype(injected) || !istype(our)) return if(blood_incompatible(injected.data["blood_type"],our.data["blood_type"]) ) reagents.add_reagent("toxin",amount * 0.5) @@ -289,6 +289,12 @@ var/const/BLOOD_VOLUME_SURVIVE = 122 return D return res +/mob/living/carbon/human/get_blood(datum/reagents/container) + if(species.exotic_blood) + return container.reagent_list[species.exotic_blood] + else + return ..() + /proc/blood_incompatible(donor,receiver) var/donor_antigen = copytext(donor,1,lentext(donor)) @@ -307,15 +313,28 @@ var/const/BLOOD_VOLUME_SURVIVE = 122 //AB is a universal receiver. return 0 -proc/blood_splatter(var/target,var/datum/reagent/blood/source,var/large) +/* +Target: Thing to get bloody +Source: Human or blood reagent +Large: Whether the splat should be big or not +*/ +/proc/blood_splatter(var/target,var/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) + var/datum/reagent/blood/bld if(istype(source,/mob/living/carbon/human)) - var/mob/living/carbon/human/M = source - source = M.get_blood(M.vessel) + var/mob/living/carbon/human/H = source + bld = H.get_blood(H.vessel) + if(H.species.exotic_blood) + H.vessel.reaction(T, TOUCH) + return + else if(H.species.flags & NO_BLOOD) + return + else + bld = source // Are we dripping or splattering? var/list/drips = list() @@ -337,24 +356,24 @@ proc/blood_splatter(var/target,var/datum/reagent/blood/source,var/large) drop.drips |= drips // If there's no data to copy, call it quits here. - if(!source) + if(!bld) return B // Update appearance. - if(source.data["blood_colour"]) - B.basecolor = source.data["blood_colour"] + if(bld.data["blood_colour"]) + B.basecolor = bld.data["blood_colour"] B.update_icon() // Update blood information. - if(source.data["blood_DNA"]) + if(bld.data["blood_DNA"]) B.blood_DNA = list() - if(source.data["blood_type"]) - B.blood_DNA[source.data["blood_DNA"]] = source.data["blood_type"] + if(bld.data["blood_type"]) + B.blood_DNA[bld.data["blood_DNA"]] = bld.data["blood_type"] else - B.blood_DNA[source.data["blood_DNA"]] = "O+" + B.blood_DNA[bld.data["blood_DNA"]] = "O+" // Update virus information. - if(source.data["virus2"]) - B.virus2 = virus_copylist(source.data["virus2"]) + if(bld.data["virus2"]) + B.virus2 = virus_copylist(bld.data["virus2"]) return B \ No newline at end of file