diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm index ffad437a651..2c0b448f32f 100644 --- a/code/modules/reagents/Chemistry-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents.dm @@ -25,38 +25,24 @@ datum //var/list/viruses = list() var/color = "#000000" // rgb: 0, 0, 0 (does not support alpha channels - yet!) var/shock_reduction = 0 + var/penetrates_skin = 0 //Whether or not a reagent penetrates the skin proc - reaction_mob(var/mob/M, var/method=TOUCH, var/volume) //By default we have a chance to transfer some + reaction_mob(var/mob/M, var/method=TOUCH, var/volume) //Some reagents transfer on touch, others don't; dependent on if they penetrate the skin or not. if(!istype(M, /mob/living)) return 0 var/datum/reagent/self = src - src = null //of the reagent to the mob on TOUCHING it. + src = null if(self.holder) //for catching rare runtimes - if(!istype(self.holder.my_atom, /obj/effect/effect/chem_smoke)) - // If the chemicals are in a smoke cloud, do not try to let the chemicals "penetrate" into the mob's system (balance station 13) -- Doohl - - if(method == TOUCH) - - var/chance = 1 - var/block = 0 - - for(var/obj/item/clothing/C in M.get_equipped_items()) - if(C.permeability_coefficient < chance) chance = C.permeability_coefficient - if(istype(C, /obj/item/clothing/suit/bio_suit)) - // bio suits are just about completely fool-proof - Doohl - // kind of a hacky way of making bio suits more resistant to chemicals but w/e - if(prob(75)) - block = 1 - - if(istype(C, /obj/item/clothing/head/bio_hood)) - if(prob(75)) - block = 1 - - chance = chance * 100 - - if(prob(chance) && !block) - if(M.reagents) - M.reagents.add_reagent(self.id,self.volume/2) + if(method == TOUCH && self.penetrates_skin) + var/block = 0 + for(var/obj/item/clothing/C in M.get_equipped_items()) + if(istype(C, /obj/item/clothing/suit/bio_suit)) + block += 1 + if(istype(C, /obj/item/clothing/head/bio_hood)) + block += 1 + if(block < 2) + if(M.reagents) + M.reagents.add_reagent(self.id,self.volume) /* if(method == INGEST && istype(M, /mob/living/carbon)) @@ -596,6 +582,7 @@ datum reagent_state = LIQUID color = "#484848" // rgb: 72, 72, 72 metabolization_rate = 0.2 + penetrates_skin = 1 on_mob_life(var/mob/living/M as mob) if(!M) M = holder.my_atom @@ -631,6 +618,7 @@ datum description = "A chemical element." reagent_state = GAS color = "#808080" // rgb: 128, 128, 128 + penetrates_skin = 1 on_mob_life(var/mob/living/M as mob) if(!M) M = holder.my_atom @@ -644,6 +632,8 @@ datum description = "A highly-reactive chemical element." reagent_state = GAS color = "#6A6054" + penetrates_skin = 1 + on_mob_life(var/mob/living/M as mob) if(!M) M = holder.my_atom @@ -810,6 +800,7 @@ datum reagent_state = SOLID color = "#C7C7C7" // rgb: 199,199,199 metabolization_rate = 0.4 + penetrates_skin = 1 on_mob_life(var/mob/living/M as mob) if(!M) M = holder.my_atom @@ -1258,7 +1249,7 @@ datum if(ishuman(M)) var/mob/living/carbon/human/H = M - //Peridaxon is hard enough to get, it's probably fair to make this all internal organs + //Mitocholide is hard enough to get, it's probably fair to make this all internal organs for(var/name in H.internal_organs_by_name) var/datum/organ/internal/I = H.internal_organs_by_name[name] if(I.damage > 0) diff --git a/code/modules/reagents/newchem/other.dm b/code/modules/reagents/newchem/other.dm index 18a5142cf1a..40bde42fd87 100644 --- a/code/modules/reagents/newchem/other.dm +++ b/code/modules/reagents/newchem/other.dm @@ -182,6 +182,7 @@ datum/reagent/hairgrownium description = "A mysterious chemical purported to help grow hair. Often found on late-night TV infomercials." reagent_state = LIQUID color = "#5DDA5D" + penetrates_skin = 1 /datum/chemical_reaction/hairgrownium name = "hairgrownium" @@ -206,6 +207,8 @@ datum/reagent/super_hairgrownium description = "A mysterious and powerful chemical purported to cause rapid hair growth." reagent_state = LIQUID color = "#5DD95D" + penetrates_skin = 1 + /datum/chemical_reaction/super_hairgrownium name = "Super Hairgrownium" diff --git a/code/modules/reagents/newchem/pyro.dm b/code/modules/reagents/newchem/pyro.dm index 44ec0f05271..14a10f6ef59 100644 --- a/code/modules/reagents/newchem/pyro.dm +++ b/code/modules/reagents/newchem/pyro.dm @@ -158,6 +158,7 @@ reagent_state = LIQUID color = "#000000" metabolization_rate = 0.05 + penetrates_skin = 1 /datum/chemical_reaction/blackpowder name = "Black Powder" @@ -173,10 +174,14 @@ required_reagents = list("blackpowder" = 1) result_amount = 1 required_temp = 474 - mix_message = "Sparks start flying around the black powder!" + mix_message = "sparks start flying about." /datum/chemical_reaction/blackpowder_explosion/on_reaction(var/datum/reagents/holder, var/created_volume) - sleep(rand(50,100)) + var/location = get_turf(holder.my_atom) + var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + s.set_up(2, 1, location) + s.start() + sleep(rand(30,50)) blackpowder_detonate(holder, created_volume) return diff --git a/code/modules/reagents/newchem/toxins.dm b/code/modules/reagents/newchem/toxins.dm index e427bb6e0d7..f82e15b4cba 100644 --- a/code/modules/reagents/newchem/toxins.dm +++ b/code/modules/reagents/newchem/toxins.dm @@ -11,6 +11,7 @@ datum/reagent/polonium reagent_state = LIQUID color = "#CF3600" metabolization_rate = 0.1 + penetrates_skin = 1 datum/reagent/polonium/on_mob_life(var/mob/living/M as mob) if(!M) M = holder.my_atom @@ -58,6 +59,7 @@ datum/reagent/formaldehyde description = "Formaldehyde is a common industrial chemical and is used to preserve corpses and medical samples. It is highly toxic and irritating." reagent_state = LIQUID color = "#CF3600" + penetrates_skin = 1 datum/reagent/formaldehyde/on_mob_life(var/mob/living/M as mob) if(!M) M = holder.my_atom @@ -143,6 +145,7 @@ datum/reagent/cyanide reagent_state = LIQUID color = "#CF3600" metabolization_rate = 0.1 + penetrates_skin = 1 datum/reagent/cyanide/on_mob_life(var/mob/living/M as mob) if(!M) M = holder.my_atom @@ -176,6 +179,7 @@ datum/reagent/itching_powder reagent_state = LIQUID color = "#CF3600" metabolization_rate = 0.3 + penetrates_skin = 1 /datum/reagent/itching_powder/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume) if(method == TOUCH) @@ -369,6 +373,7 @@ datum/reagent/ketamine reagent_state = LIQUID color = "#646EA0" metabolization_rate = 0.8 + penetrates_skin = 1 datum/reagent/ketamine/on_mob_life(var/mob/living/M as mob) if(!M) M = holder.my_atom @@ -470,6 +475,7 @@ datum/reagent/curare reagent_state = LIQUID color = "#CF3600" metabolization_rate = 0.1 + penetrates_skin = 1 datum/reagent/curare/on_mob_life(var/mob/living/M as mob) if(!M) M = holder.my_atom @@ -487,6 +493,7 @@ datum/reagent/sarin reagent_state = LIQUID color = "#C7C7C7" metabolization_rate = 0.1 + penetrates_skin = 1 /datum/chemical_reaction/sarin name = "sarin" diff --git a/code/modules/surgery/other.dm b/code/modules/surgery/other.dm index cc6b2d1a728..30ab6e43a06 100644 --- a/code/modules/surgery/other.dm +++ b/code/modules/surgery/other.dm @@ -56,7 +56,7 @@ /obj/item/weapon/kitchenknife = 75, \ /obj/item/weapon/shard = 50, \ ) - + can_infect = 1 blood_level = 1 @@ -69,7 +69,7 @@ if (target_zone == "mouth" || target_zone == "eyes") return 0 - + var/datum/organ/external/affected = target.get_organ(target_zone) return affected.open == 2 && (affected.status & ORGAN_DEAD) @@ -102,7 +102,7 @@ /obj/item/weapon/reagent_containers/spray = 50, /obj/item/weapon/reagent_containers/glass/bucket = 50, ) - + can_infect = 0 blood_level = 0 @@ -112,9 +112,9 @@ can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) if (!istype(tool, /obj/item/weapon/reagent_containers)) return 0 - + var/obj/item/weapon/reagent_containers/container = tool - if(!container.reagents.has_reagent("peridaxon")) + if(!container.reagents.has_reagent("mitocholide")) return 0 if(!hasorgans(target)) @@ -122,7 +122,7 @@ if (target_zone == "mouth" || target_zone == "eyes") return 0 - + var/datum/organ/external/affected = target.get_organ(target_zone) return affected.open == 3 && (affected.status & ORGAN_DEAD) @@ -135,34 +135,34 @@ end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) var/datum/organ/external/affected = target.get_organ(target_zone) - + if (!istype(tool, /obj/item/weapon/reagent_containers)) return - + var/obj/item/weapon/reagent_containers/container = tool - + var/trans = container.reagents.trans_to(target, container.amount_per_transfer_from_this) if (trans > 0) container.reagents.reaction(target, INGEST) //technically it's contact, but the reagents are being applied to internal tissue - - if(container.reagents.has_reagent("peridaxon")) + + if(container.reagents.has_reagent("mitocholide")) affected.status &= ~ORGAN_DEAD - + user.visible_message("\blue [user] applies [trans] units of the solution to affected tissue in [target]'s [affected.display_name]", \ "\blue You apply [trans] units of the solution to affected tissue in [target]'s [affected.display_name] with \the [tool].") fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) var/datum/organ/external/affected = target.get_organ(target_zone) - + if (!istype(tool, /obj/item/weapon/reagent_containers)) return - + var/obj/item/weapon/reagent_containers/container = tool - + var/trans = container.reagents.trans_to(target, container.amount_per_transfer_from_this) container.reagents.reaction(target, INGEST) //technically it's contact, but the reagents are being applied to internal tissue - + user.visible_message("\red [user]'s hand slips, applying [trans] units of the solution to the wrong place in [target]'s [affected.display_name] with the [tool]!" , \ "\red Your hand slips, applying [trans] units of the solution to the wrong place in [target]'s [affected.display_name] with the [tool]!") - + //no damage or anything, just wastes medicine