From e2acfcd38ee48cda6ed55618ab694d052007b959 Mon Sep 17 00:00:00 2001 From: Alberyk Date: Fri, 2 Jun 2017 12:59:41 -0300 Subject: [PATCH] Makes species with the NO_BLOOD flag immune to most chemical stuns and effects (#2568) Makes species with NO_BLOOD (skeletons, shadows, golems, etc) immune to most knock down/stuns/etc chems, no more injecting skeletons with chloral hydrate. --- .../Chemistry-Reagents-Toxins.dm | 60 ++++++++++++++----- 1 file changed, 46 insertions(+), 14 deletions(-) diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm index e3d9f23384f..9ebbac51a7e 100644 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm +++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm @@ -102,6 +102,9 @@ /datum/reagent/toxin/cyanide/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) ..() + var/mob/living/carbon/human/H = M + if(istype(H) && (H.species.flags & NO_BLOOD)) + return M.adjustOxyLoss(20 * removed) M.sleeping += 1 @@ -116,13 +119,14 @@ /datum/reagent/toxin/potassium_chloride/overdose(var/mob/living/carbon/M, var/alien) ..() - if(ishuman(M)) - var/mob/living/carbon/human/H = M - if(H.stat != 1) - if(H.losebreath >= 10) - H.losebreath = max(10, H.losebreath - 10) - H.adjustOxyLoss(2) - H.Weaken(10) + var/mob/living/carbon/human/H = M + if(!istype(H) || (H.species.flags & NO_BLOOD)) + return + if(H.stat != 1) + if(H.losebreath >= 10) + H.losebreath = max(10, H.losebreath - 10) + H.adjustOxyLoss(2) + H.Weaken(10) /datum/reagent/toxin/potassium_chlorophoride name = "Potassium Chlorophoride" @@ -135,13 +139,14 @@ /datum/reagent/toxin/potassium_chlorophoride/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) ..() - if(ishuman(M)) - var/mob/living/carbon/human/H = M - if(H.stat != 1) - if(H.losebreath >= 10) - H.losebreath = max(10, M.losebreath-10) - H.adjustOxyLoss(2) - H.Weaken(10) + var/mob/living/carbon/human/H = M + if(!istype(H) || (H.species.flags & NO_BLOOD)) + return + if(H.stat != 1) + if(H.losebreath >= 10) + H.losebreath = max(10, M.losebreath-10) + H.adjustOxyLoss(2) + H.Weaken(10) /datum/reagent/toxin/zombiepowder name = "Zombie Powder" @@ -156,6 +161,9 @@ ..() if(alien == IS_DIONA) return + var/mob/living/carbon/human/H = M + if(istype(H) && (H.species.flags & NO_SCAN)) + return M.status_flags |= FAKEDEATH M.adjustOxyLoss(3 * removed) M.Weaken(10) @@ -246,6 +254,9 @@ /datum/reagent/lexorin/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) if(alien == IS_DIONA) return + var/mob/living/carbon/human/H = M + if(istype(H) && (H.species.flags & NO_BLOOD)) + return M.adjustOxyLoss(2 * removed) if(M.losebreath < 15) M.losebreath++ @@ -291,6 +302,9 @@ /datum/reagent/slimejelly/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) if(alien == IS_DIONA) return + var/mob/living/carbon/human/H = M + if(istype(H) && (H.species.flags & NO_BLOOD)) + return if(prob(10)) M << "Your insides are burning!" M.adjustToxLoss(rand(100, 300) * removed) @@ -309,6 +323,9 @@ /datum/reagent/soporific/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) if(alien == IS_DIONA) return + var/mob/living/carbon/human/H = M + if(istype(H) && (H.species.flags & NO_BLOOD)) + return if(dose < 1) if(dose == metabolism * 2 || prob(5)) M.emote("yawn") @@ -334,6 +351,9 @@ /datum/reagent/chloralhydrate/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) if(alien == IS_DIONA) return + var/mob/living/carbon/human/H = M + if(istype(H) && (H.species.flags & NO_BLOOD)) + return if(dose == metabolism) M.confused += 2 M.drowsyness += 2 @@ -372,6 +392,9 @@ /datum/reagent/space_drugs/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) if(alien == IS_DIONA) return + var/mob/living/carbon/human/H = M + if(istype(H) && (H.species.flags & NO_BLOOD)) + return M.druggy = max(M.druggy, 15) if(prob(10) && isturf(M.loc) && !istype(M.loc, /turf/space) && M.canmove && !M.restrained()) step(M, pick(cardinal)) @@ -390,6 +413,9 @@ /datum/reagent/serotrotium/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) if(alien == IS_DIONA) return + var/mob/living/carbon/human/H = M + if(istype(H) && (H.species.flags & NO_BLOOD)) + return if(prob(7)) M.emote(pick("twitch", "drool", "moan", "gasp")) return @@ -406,6 +432,9 @@ /datum/reagent/cryptobiolin/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) if(alien == IS_DIONA) return + var/mob/living/carbon/human/H = M + if(istype(H) && (H.species.flags & NO_BLOOD)) + return M.dizziness = max(150, M.dizziness)//Setting dizziness directly works as long as the make_dizzy proc is called after to spawn the process M.make_dizzy(4) @@ -455,6 +484,9 @@ /datum/reagent/psilocybin/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) if(alien == IS_DIONA) return + var/mob/living/carbon/human/H = M + if(istype(H) && (H.species.flags & NO_BLOOD)) + return M.druggy = max(M.druggy, 30) if(dose < 1) M.apply_effect(3, STUTTER)