diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 1c5da420ea6..d4d94632866 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1119,8 +1119,10 @@ var/datum/organ/external/head/h = organs_by_name["head"] h.disfigured = 0 - vessel.add_reagent("blood",560-vessel.total_volume) - fixblood() + if(species && !(species.flags & NO_BLOOD)) + vessel.add_reagent("blood",560-vessel.total_volume) + fixblood() + for (var/obj/item/weapon/organ/head/H in world) if(H.brainmob) if(H.brainmob.real_name == src.real_name) @@ -1422,4 +1424,4 @@ mob/living/carbon/human/yank_out_object() var/obj/effect/decal/cleanable/blood/writing/W = new(T) W.message = message - W.add_fingerprint(src) \ No newline at end of file + W.add_fingerprint(src) diff --git a/code/modules/organs/blood.dm b/code/modules/organs/blood.dm index cf245a3b51d..50c8564c793 100644 --- a/code/modules/organs/blood.dm +++ b/code/modules/organs/blood.dm @@ -12,8 +12,13 @@ var/const/BLOOD_VOLUME_SURVIVE = 122 //Initializes blood vessels /mob/living/carbon/human/proc/make_blood() + if (vessel) return + + if(species && species.flags & NO_BLOOD) + return + vessel = new/datum/reagents(600) vessel.my_atom = src if(species.bloodflags &BLOOD_SLIME) @@ -33,6 +38,8 @@ var/const/BLOOD_VOLUME_SURVIVE = 122 // Takes care blood loss and regeneration /mob/living/carbon/human/proc/handle_blood() var/blood_volume + if(species && species.flags & NO_BLOOD) + return if(stat != DEAD && bodytemperature >= 170) //Dead or cryosleep people do not pump the blood. if(species.bloodflags &BLOOD_SLIME) blood_volume = round(vessel.get_reagent_amount("water")) @@ -138,6 +145,10 @@ var/const/BLOOD_VOLUME_SURVIVE = 122 //Makes a blood drop, leaking certain amount of blood from the mob /mob/living/carbon/human/proc/drip(var/amt as num) + + if(species && species.flags & NO_BLOOD) //TODO: Make drips come from the reagents instead. + return + if(!amt) return @@ -241,6 +252,8 @@ var/const/BLOOD_VOLUME_SURVIVE = 122 W.data["trace_chem"] = list2params(temp_chem) vessel.remove_reagent("water",amount) // Removes blood if human return W + if(species && species.flags & NO_BLOOD) + return null else if(vessel.get_reagent_amount("blood") < amount) return null @@ -265,8 +278,16 @@ var/const/BLOOD_VOLUME_SURVIVE = 122 //Transfers blood from container ot vessels, respecting blood types compatability. /mob/living/carbon/human/inject_blood(obj/item/weapon/reagent_containers/container, var/amount) - var/datum/reagent/blood/our = get_blood(vessel) + var/datum/reagent/blood/injected = get_blood(container.reagents) + + if(species && species.flags & NO_BLOOD) + reagents.add_reagent("blood", amount, injected.data) + reagents.update_total() + return + + var/datum/reagent/blood/our = get_blood(vessel) + if (!injected || !our) return if(blood_incompatible(injected.data["blood_type"],our.data["blood_type"]) ) diff --git a/code/modules/organs/pain.dm b/code/modules/organs/pain.dm index 718abbe2726..5ff936d4d1d 100644 --- a/code/modules/organs/pain.dm +++ b/code/modules/organs/pain.dm @@ -53,6 +53,9 @@ mob/living/carbon/proc/pain(var/partname, var/amount, var/force, var/burning = 0 // flash_strength is 0 for weak pain flash, 1 for strong pain flash mob/living/carbon/human/proc/custom_pain(var/message, var/flash_strength) if(stat >= 1) return + + if(species && species.flags & IS_PLANT) return + if(reagents.has_reagent("tramadol")) return if(reagents.has_reagent("oxycodone")) @@ -71,6 +74,9 @@ mob/living/carbon/human/proc/custom_pain(var/message, var/flash_strength) mob/living/carbon/human/proc/handle_pain() // not when sleeping + + if(species && species.flags & IS_PLANT) return + if(stat >= 2) return if(reagents.has_reagent("tramadol")) return