diff --git a/code/ATMOSPHERICS/components/unary_devices/cryo.dm b/code/ATMOSPHERICS/components/unary_devices/cryo.dm index 87eb0e606e8..246716772aa 100644 --- a/code/ATMOSPHERICS/components/unary_devices/cryo.dm +++ b/code/ATMOSPHERICS/components/unary_devices/cryo.dm @@ -314,7 +314,7 @@ occupant.heal_organ_damage(heal_brute,heal_fire) if(beaker && next_trans == 0) beaker.reagents.trans_to(occupant, 1, 10) - beaker.reagents.reaction(occupant) + beaker.reagents.reaction(occupant, VAPOR) next_trans++ if(next_trans == 10) next_trans = 0 diff --git a/code/game/gamemodes/blob/powers.dm b/code/game/gamemodes/blob/powers.dm index 78c15e08e5e..774f8f181f1 100644 --- a/code/game/gamemodes/blob/powers.dm +++ b/code/game/gamemodes/blob/powers.dm @@ -276,7 +276,7 @@ last_attack = world.time OB.expand(T, 0, blob_reagent_datum.color) for(var/mob/living/L in T) - blob_reagent_datum.reaction_mob(L, TOUCH, 25) + blob_reagent_datum.reaction_mob(L, PATCH, 25) blob_reagent_datum.send_message(L) OB.color = blob_reagent_datum.color return diff --git a/code/game/objects/effects/effect_system/effects_foam.dm b/code/game/objects/effects/effect_system/effects_foam.dm index aa1abe7ae6c..a3a305541c7 100644 --- a/code/game/objects/effects/effect_system/effects_foam.dm +++ b/code/game/objects/effects/effect_system/effects_foam.dm @@ -58,14 +58,14 @@ for(var/obj/O in range(0,src)) if(O.type == src.type) continue - reagents.reaction(O, TOUCH, fraction) + reagents.reaction(O, VAPOR, fraction) var/hit = 0 for(var/mob/living/L in range(0,src)) hit += foam_mob(L) if(hit) lifetime++ //this is so the decrease from mobs hit and the natural decrease don't cumulate. var/T = get_turf(src) - reagents.reaction(T, TOUCH, fraction) + reagents.reaction(T, VAPOR, fraction) if(--amount < 0) return @@ -77,7 +77,7 @@ if(!istype(L)) return 0 var/fraction = 1/initial(lifetime) - reagents.reaction(L, TOUCH, fraction) + reagents.reaction(L, VAPOR, fraction) lifetime-- return 1 diff --git a/code/game/objects/effects/effect_system/effects_smoke.dm b/code/game/objects/effects/effect_system/effects_smoke.dm index b1e6b6dde79..db7b6be9b54 100644 --- a/code/game/objects/effects/effect_system/effects_smoke.dm +++ b/code/game/objects/effects/effect_system/effects_smoke.dm @@ -156,10 +156,10 @@ for(var/obj/O in range(1,src)) if(O.type == src.type) continue - reagents.reaction(O, TOUCH, fraction) + reagents.reaction(O, VAPOR, fraction) for(var/turf/T in range(1,src)) - reagents.reaction(T, TOUCH, fraction) + reagents.reaction(T, VAPOR, fraction) var/hit = 0 for(var/mob/living/L in range(1,src)) @@ -173,7 +173,7 @@ if(!istype(M)) return 0 var/fraction = 1/initial(lifetime) - reagents.reaction(M, TOUCH, fraction) + reagents.reaction(M, VAPOR, fraction) lifetime-- return 1 diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 6b4660a28f0..9afcca1dc6f 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -450,7 +450,6 @@ var/global/image/fire_overlay = image("icon" = 'icons/effects/fire.dmi', "icon_s var/melting_threshold = 100 if(meltingpwr <= melting_threshold) // so a single unit can't melt items. You need 5.1+ unit for fluoro and 10.1+ for sulphuric return - for(var/V in armor) if(armor[V] > 0) .-- //it survives the acid... diff --git a/code/modules/detectivework/footprints_and_rag.dm b/code/modules/detectivework/footprints_and_rag.dm index 7d7818fa3e2..6e770a21eda 100644 --- a/code/modules/detectivework/footprints_and_rag.dm +++ b/code/modules/detectivework/footprints_and_rag.dm @@ -22,14 +22,17 @@ /obj/item/weapon/reagent_containers/glass/rag/afterattack(atom/A as obj|turf|area, mob/user,proximity) if(!proximity) return - if(ismob(A) && A.reagents && reagents.total_volume) - var/mob/M = A - if(user.a_intent == "harm") - reagents.reaction(M, TOUCH) - reagents.clear_reagents() + if(iscarbon(A) && A.reagents && reagents.total_volume) + var/mob/living/carbon/C = A + if(user.a_intent == "harm" && !C.is_mouth_covered()) + reagents.reaction(C, INGEST) + reagents.trans_to(C, reagents.total_volume) + C.visible_message("[user] has smothered \the [C] with \the [src]!", "[user] has smothered you with \the [src]!", "You hear some struggling and muffled cries of surprise.") else - reagents.trans_to(M, reagents.total_volume) - M.visible_message("[user] has smothered \the [A] with \the [src]!", "[user] has smothered you with \the [src]!", "You hear some struggling and muffled cries of surprise.") + reagents.reaction(C, TOUCH) + reagents.clear_reagents() + C.visible_message("[user] has touched \the [C] with \the [src].") + else if(istype(A) && src in user) user.visible_message("[user] starts to wipe down [A] with [src]!", "You start to wipe down [A] with [src]...") if(do_after(user,30, target = A)) diff --git a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm index 4c27150e481..32871dd073c 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm @@ -147,5 +147,5 @@ /mob/living/carbon/alien/humanoid/check_ear_prot() return 1 -/mob/living/carbon/alien/carbon/alien/humanoid/get_permeability_protection() +/mob/living/carbon/alien/humanoid/get_permeability_protection() return 0.8 \ No newline at end of file diff --git a/code/modules/reagents/Chemistry-Holder.dm b/code/modules/reagents/Chemistry-Holder.dm index e83acf03014..734b4d6aebf 100644 --- a/code/modules/reagents/Chemistry-Holder.dm +++ b/code/modules/reagents/Chemistry-Holder.dm @@ -1,7 +1,9 @@ //This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32 -var/const/TOUCH = 1 -var/const/INGEST = 2 +var/const/TOUCH = 1 //splashing +var/const/INGEST = 2 //injection, ingestion +var/const/VAPOR = 3 //smoke, foam, spray +var/const/PATCH = 4 //patches, blob attack /////////////////////////////////////////////////////////////////////////////////// @@ -429,7 +431,7 @@ var/const/INGEST = 2 if(isliving(A)) var/mob/living/L = A var/touch_protection = 0 - if(method == TOUCH) + if(method == VAPOR) touch_protection = L.get_permeability_protection() for(var/datum/reagent/R in reagent_list) R.reaction_mob(L, method, R.volume*volume_modifier, show_message, touch_protection) diff --git a/code/modules/reagents/Chemistry-Readme.dm b/code/modules/reagents/Chemistry-Readme.dm index 74e9fe0b093..e0b68c4a597 100644 --- a/code/modules/reagents/Chemistry-Readme.dm +++ b/code/modules/reagents/Chemistry-Readme.dm @@ -69,7 +69,7 @@ About the Holder: This proc calls the appropriate reaction procs of the reagents. I.e. if A is an object, it will call the reagents reaction_obj proc. The method var is used for reaction on mobs. It simply tells - us if the mob TOUCHed the reagent or if it INGESTed the reagent. + us if the mob TOUCHed the reagent, if it INGESTed the reagent or if the reagent was VAPORIZEd on them.. Since the volume can be checked in a reagents proc, you might want to use the volume_modifier var to modifiy the passed value without actually changing the volume of the reagents. diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm index c89a5d434eb..61290e5d22f 100644 --- a/code/modules/reagents/Chemistry-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents.dm @@ -40,9 +40,9 @@ var/datum/reagent/self = src src = null - if(method == TOUCH) + if(method == VAPOR) //smoke, foam, spray if(M.reagents) - var/modifier = Clamp((1 - touch_protection) + rand(-5,5)/100, 0, 1) + var/modifier = Clamp((1 - touch_protection), 0, 1) var/amount = round(volume*modifier, 0.1) if(amount >= 1) M.reagents.add_reagent(self.id, amount) diff --git a/code/modules/reagents/Chemistry-Reagents/Blob-Reagents.dm b/code/modules/reagents/Chemistry-Reagents/Blob-Reagents.dm index 5470a6f5db1..a47cc5e02e3 100644 --- a/code/modules/reagents/Chemistry-Reagents/Blob-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents/Blob-Reagents.dm @@ -12,7 +12,7 @@ message = "The blob splashes you with burning oil" /datum/reagent/blob/boiling_oil/reaction_mob(mob/living/M, method=TOUCH, volume) - if(method == TOUCH) + if(method == PATCH) var/ratio = volume/25 M.apply_damage(15*ratio, BURN) M.adjust_fire_stacks(2*ratio) @@ -28,7 +28,7 @@ message_living = ", and you feel sick and nauseated" /datum/reagent/blob/toxic_goop/reaction_mob(mob/living/M, method=TOUCH, volume) - if(method == TOUCH) + if(method == PATCH) var/ratio = volume/25 M.apply_damage(20*ratio, TOX) @@ -40,7 +40,7 @@ message_living = ", and you feel your skin ripping and tearing off" /datum/reagent/blob/skin_ripper/reaction_mob(mob/living/M, method=TOUCH, volume) - if(method == TOUCH) + if(method == PATCH) var/ratio = volume/25 M.apply_damage(20*ratio, BRUTE) if(iscarbon(M)) @@ -56,7 +56,7 @@ message_living = ", and you feel your skin char and melt" /datum/reagent/blob/skin_melter/reaction_mob(mob/living/M, method=TOUCH, volume) - if(method == TOUCH) + if(method == PATCH) var/ratio = volume/25 M.apply_damage(10*ratio, BRUTE) M.apply_damage(10*ratio, BURN) @@ -73,7 +73,7 @@ message_living = ", and your lungs feel heavy and weak" /datum/reagent/blob/lung_destroying_toxin/reaction_mob(mob/living/M, method=TOUCH, volume) - if(method == TOUCH) + if(method == PATCH) var/ratio = volume/25 M.apply_damage(20* ratio, OXY) M.losebreath += 15*ratio @@ -89,7 +89,7 @@ message_living = ", and your skin feels papery and everything hurts" /datum/reagent/blob/radioactive_liquid/reaction_mob(mob/living/M, method=TOUCH, volume) - if(method == TOUCH) + if(method == PATCH) var/ratio = volume/25 M.apply_damage(10*ratio, BRUTE) if(istype(M, /mob/living/carbon/human)) @@ -109,7 +109,7 @@ message = "You feel a thrum as the blob strikes you, and everything flies at you" /datum/reagent/blob/dark_matter/reaction_mob(mob/living/M, method=TOUCH, volume) - if(method == TOUCH) + if(method == PATCH) var/ratio = volume/25 M.apply_damage(15*ratio, BRUTE) reagent_vortex(M, 0) @@ -123,7 +123,7 @@ message = "The blob slams into you, and sends you flying" /datum/reagent/blob/b_sorium/reaction_mob(mob/living/M, method=TOUCH, volume) - if(method == TOUCH) + if(method == PATCH) var/ratio = volume/25 M.apply_damage(15*ratio, BRUTE) reagent_vortex(M, 1) @@ -137,7 +137,7 @@ message = "The blob strikes you, and its tendrils explode" /datum/reagent/blob/explosive/reaction_mob(mob/living/M, method=TOUCH, volume) - if(method == TOUCH) + if(method == PATCH) var/ratio = volume/25 if(prob(75*ratio)) explosion(M.loc, 0, 0, 1, 0, 0) @@ -151,7 +151,7 @@ message_living = ", and you feel great" /datum/reagent/blob/omnizine/reaction_mob(mob/living/M, method=TOUCH, volume) - if(method == TOUCH) + if(method == PATCH) var/ratio = volume/25 M.reagents.add_reagent("omnizine", 11*ratio) @@ -164,7 +164,7 @@ message_living = ", and you feel funny" /datum/reagent/blob/spacedrugs/reaction_mob(mob/living/M, method=TOUCH, volume) - if(method == TOUCH) + if(method == PATCH) var/ratio = volume/25 M.hallucination += 20*ratio M.reagents.add_reagent("space_drugs", 15*ratio) diff --git a/code/modules/reagents/Chemistry-Reagents/Consumable-Reagents/Drink-Reagents/Alcohols.dm b/code/modules/reagents/Chemistry-Reagents/Consumable-Reagents/Drink-Reagents/Alcohols.dm index df637f4eab8..c3d04b713e0 100644 --- a/code/modules/reagents/Chemistry-Reagents/Consumable-Reagents/Drink-Reagents/Alcohols.dm +++ b/code/modules/reagents/Chemistry-Reagents/Consumable-Reagents/Drink-Reagents/Alcohols.dm @@ -51,9 +51,9 @@ /datum/reagent/consumable/ethanol/reaction_mob(mob/living/M, method=TOUCH, volume)//Splashing people with ethanol isn't quite as good as fuel. if(!istype(M, /mob/living)) return - if(method == TOUCH) + if(method == TOUCH || method == VAPOR) M.adjust_fire_stacks(volume / 15) - return + ..() /datum/reagent/consumable/ethanol/beer name = "Beer" diff --git a/code/modules/reagents/Chemistry-Reagents/Consumable-Reagents/Food-Reagents.dm b/code/modules/reagents/Chemistry-Reagents/Consumable-Reagents/Food-Reagents.dm index 6ca5afcf052..f16ed8685fc 100644 --- a/code/modules/reagents/Chemistry-Reagents/Consumable-Reagents/Food-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents/Consumable-Reagents/Food-Reagents.dm @@ -168,7 +168,7 @@ return var/mob/living/carbon/victim = M - if(method == TOUCH) + if(method == TOUCH || method == VAPOR) //check for protection var/mouth_covered = 0 var/eyes_covered = 0 diff --git a/code/modules/reagents/Chemistry-Reagents/Medicine-Reagents.dm b/code/modules/reagents/Chemistry-Reagents/Medicine-Reagents.dm index 3f08110b756..611136589e6 100644 --- a/code/modules/reagents/Chemistry-Reagents/Medicine-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents/Medicine-Reagents.dm @@ -165,7 +165,7 @@ /datum/reagent/medicine/silver_sulfadiazine/reaction_mob(mob/living/M, method=TOUCH, volume, show_message = 1) if(iscarbon(M)) - if(method == TOUCH) + if(method == PATCH) M.adjustFireLoss(-volume) if(show_message) M << "You feel your burns healing!" @@ -175,12 +175,10 @@ if(show_message) M << "You probably shouldn't have eaten that. Maybe you should of splashed it on, or applied a patch?" ..() - return /datum/reagent/medicine/silver_sulfadiazine/on_mob_life(mob/living/M) M.adjustFireLoss(-2*REM) ..() - return /datum/reagent/medicine/styptic_powder name = "Styptic Powder" @@ -191,23 +189,21 @@ /datum/reagent/medicine/styptic_powder/reaction_mob(mob/living/M, method=TOUCH, volume, show_message = 1) if(iscarbon(M)) - if(method == TOUCH) + if(method == PATCH) M.adjustBruteLoss(-volume) if(show_message) M << "You feel your wounds knitting back together!" - if(M.stat) - M.emote("scream") + M.emote("scream") if(method == INGEST) M.adjustToxLoss(0.5*volume) if(show_message) M << "You feel kind of ill. Maybe you ate a medicine you shouldn't have?" ..() - return + /datum/reagent/medicine/styptic_powder/on_mob_life(mob/living/M) M.adjustBruteLoss(-2*REM) ..() - return /datum/reagent/medicine/salglu_solution name = "Saline-Glucose Solution" @@ -222,7 +218,6 @@ M.adjustBruteLoss(-0.5*REM) M.adjustFireLoss(-0.5*REM) ..() - return /datum/reagent/medicine/mine_salve name = "Miner's Salve" @@ -239,20 +234,19 @@ M.adjustBruteLoss(-0.25*REM) M.adjustFireLoss(-0.25*REM) ..() - return /datum/reagent/medicine/mine_salve/reaction_mob(mob/living/M, method=TOUCH, volume, show_message = 1) if(iscarbon(M)) if(method == TOUCH) if(show_message) M << "You feel your wounds knitting back together!" + method = VAPOR //so it's correctly absorbed in reagent/reaction_mob() if(method == INGEST) if(show_message) M << "That tasted horrible." M.AdjustStunned(2) M.AdjustWeakened(2) ..() - return /datum/reagent/medicine/mine_salve/on_mob_delete(mob/living/M) if(iscarbon(M)) @@ -269,13 +263,13 @@ /datum/reagent/medicine/synthflesh/reaction_mob(mob/living/M, method=TOUCH, volume,show_message = 1) if(iscarbon(M)) - if(method == TOUCH) + if(method == PATCH) M.adjustBruteLoss(-1.5*volume) M.adjustFireLoss(-1.5*volume) if(show_message) M << "You feel your burns healing and your flesh knitting together!" ..() - return + /datum/reagent/medicine/charcoal name = "Charcoal" diff --git a/code/modules/reagents/Chemistry-Reagents/Other-Reagents.dm b/code/modules/reagents/Chemistry-Reagents/Other-Reagents.dm index 8c4de4c0cd5..8b890157b4f 100644 --- a/code/modules/reagents/Chemistry-Reagents/Other-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents/Other-Reagents.dm @@ -14,9 +14,9 @@ if(D.spread_flags & SPECIAL || D.spread_flags & NON_CONTAGIOUS) continue - if(method == TOUCH) + if(method == TOUCH || method == VAPOR) M.ContractDisease(D) - else //injected + else //ingest or patch M.ForceContractDisease(D) /datum/reagent/blood/on_new(list/data) @@ -101,13 +101,11 @@ if(D.GetDiseaseID() in self.data) D.cure() M.resistances |= self.data - return /datum/reagent/vaccine/on_merge(list/data) if(istype(data)) src.data |= data.Copy() - /datum/reagent/water name = "Water" id = "water" @@ -171,6 +169,7 @@ return if(method == TOUCH) M.adjust_fire_stacks(-(volume / 10)) + ..() /datum/reagent/water/holywater name = "Holy Water" @@ -260,10 +259,10 @@ color = "#FFC080" // rgb: 255, 196, 128 Bright orange metabolization_rate = 10 * REAGENTS_METABOLISM // very fast, so it can be applied rapidly. But this changes on an overdose overdose_threshold = 11 //Slightly more than one un-nozzled spraybottle. - + /datum/reagent/spraytan/reaction_mob(mob/living/M, method=TOUCH, volume, show_message = 1) if(istype(M, /mob/living/carbon/human)) - if(method == TOUCH) + if(method == PATCH || method == VAPOR) var/mob/living/carbon/human/N = M if(N.dna.species.id == "human") switch(N.skin_tone) @@ -289,7 +288,7 @@ N.skin_tone = "caucasian2" if ("albino") N.skin_tone = "caucasian1" - + if(MUTCOLORS in N.dna.species.specflags) //take current alien color and darken it slightly var/newcolor = "" var/len = length(N.dna.features["mcolor"]) @@ -307,20 +306,20 @@ N.dna.features["mcolor"] = newcolor N.regenerate_icons() N.update_body() - - - + + + if(method == INGEST) if(show_message) M << "That tasted horrible." M.AdjustStunned(2) M.AdjustWeakened(2) ..() - - + + /datum/reagent/spraytan/overdose_process(mob/living/M) metabolization_rate = 1 * REAGENTS_METABOLISM - + if(istype(M, /mob/living/carbon/human)) var/mob/living/carbon/human/N = M if(N.dna.species.id == "human") // If they're human, turn em to the "orange" race, and give em spiky black hair @@ -329,7 +328,7 @@ N.hair_color = "000" N.update_hair() if(MUTCOLORS in N.dna.species.specflags) //Aliens with custom colors simply get turned orange - N.dna.features["mcolor"] = "f80" + N.dna.features["mcolor"] = "f80" N.regenerate_icons() N.update_body() if(prob(7)) @@ -382,9 +381,10 @@ description = "An advanced corruptive toxin produced by slimes." color = "#13BC5E" // rgb: 19, 188, 94 -/datum/reagent/aslimetoxin/reaction_mob(mob/M, volume) +/datum/reagent/aslimetoxin/reaction_mob(mob/M, method=TOUCH, volume) src = null - M.ForceContractDisease(new /datum/disease/transformation/slime(0)) + if(method != TOUCH) + M.ForceContractDisease(new /datum/disease/transformation/slime(0)) /datum/reagent/serotrotium name = "Serotrotium" @@ -583,8 +583,6 @@ /datum/reagent/uranium/on_mob_life(mob/living/M) M.apply_effect(1/M.metabolism_efficiency,IRRADIATE,0) ..() - return - /datum/reagent/uranium/reaction_turf(turf/T, volume) src = null @@ -616,14 +614,14 @@ /datum/reagent/fuel/reaction_mob(mob/living/M, method=TOUCH, volume)//Splashing people with welding fuel to make them easy to ignite! if(!istype(M, /mob/living)) return - if(method == TOUCH) + if(method == TOUCH || method == VAPOR) M.adjust_fire_stacks(volume / 10) return + ..() /datum/reagent/fuel/on_mob_life(mob/living/M) M.adjustToxLoss(1) ..() - return /datum/reagent/space_cleaner name = "Space cleaner" @@ -652,35 +650,36 @@ F.dirt = 0 /datum/reagent/space_cleaner/reaction_mob(mob/M, method=TOUCH, volume) - if(iscarbon(M)) - var/mob/living/carbon/C = M - if(istype(M,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = M - if(H.lip_style) - H.lip_style = null - H.update_body() - if(C.r_hand) - C.r_hand.clean_blood() - if(C.l_hand) - C.l_hand.clean_blood() - if(C.wear_mask) - if(C.wear_mask.clean_blood()) - C.update_inv_wear_mask() - if(ishuman(M)) - var/mob/living/carbon/human/H = C - if(H.head) - if(H.head.clean_blood()) - H.update_inv_head() - if(H.wear_suit) - if(H.wear_suit.clean_blood()) - H.update_inv_wear_suit() - else if(H.w_uniform) - if(H.w_uniform.clean_blood()) - H.update_inv_w_uniform() - if(H.shoes) - if(H.shoes.clean_blood()) - H.update_inv_shoes() - M.clean_blood() + if(method == TOUCH || VAPOR) + if(iscarbon(M)) + var/mob/living/carbon/C = M + if(istype(M,/mob/living/carbon/human)) + var/mob/living/carbon/human/H = M + if(H.lip_style) + H.lip_style = null + H.update_body() + if(C.r_hand) + C.r_hand.clean_blood() + if(C.l_hand) + C.l_hand.clean_blood() + if(C.wear_mask) + if(C.wear_mask.clean_blood()) + C.update_inv_wear_mask() + if(ishuman(M)) + var/mob/living/carbon/human/H = C + if(H.head) + if(H.head.clean_blood()) + H.update_inv_head() + if(H.wear_suit) + if(H.wear_suit.clean_blood()) + H.update_inv_wear_suit() + else if(H.w_uniform) + if(H.w_uniform.clean_blood()) + H.update_inv_w_uniform() + if(H.shoes) + if(H.shoes.clean_blood()) + H.update_inv_shoes() + M.clean_blood() /datum/reagent/cryptobiolin name = "Cryptobiolin" @@ -717,9 +716,9 @@ description = "Microscopic construction robots." color = "#535E66" // rgb: 83, 94, 102 -/datum/reagent/nanites/reaction_mob(mob/M, method=TOUCH, volume) +/datum/reagent/nanites/reaction_mob(mob/M, method=TOUCH, volume, show_message = 1, touch_protection = 0) src = null - if( (prob(min(10, volume)) && method==TOUCH) || method==INGEST) + if(method==PATCH || method==INGEST || (method == VAPOR && prob(min(volume,100)*(1 - touch_protection)))) M.ForceContractDisease(new /datum/disease/transformation/robot(0)) /datum/reagent/xenomicrobes @@ -728,9 +727,9 @@ description = "Microbes with an entirely alien cellular structure." color = "#535E66" // rgb: 83, 94, 102 -/datum/reagent/xenomicrobes/reaction_mob(mob/M, method=TOUCH, volume) +/datum/reagent/xenomicrobes/reaction_mob(mob/M, method=TOUCH, volume, show_message = 1, touch_protection = 0) src = null - if( (prob(min(10, volume)) && method==TOUCH) || method==INGEST) + if(method==PATCH || method==INGEST || (method == VAPOR && prob(min(volume,100)*(1 - touch_protection)))) M.ContractDisease(new /datum/disease/transformation/xeno(0)) /datum/reagent/fluorosurfactant//foam precursor @@ -956,17 +955,16 @@ if(M && isliving(M)) M.color = pick(random_color_list) ..() - return + /datum/reagent/colorful_reagent/reaction_obj(obj/O, volume) if(O) O.color = pick(random_color_list) ..() - return + /datum/reagent/colorful_reagent/reaction_turf(turf/T, volume) if(T) T.color = pick(random_color_list) ..() - return /datum/reagent/hair_dye name = "Quantum Hair Dye" @@ -976,14 +974,13 @@ color = "#C8A5DC" var/list/potential_colors = list("0ad","a0f","f73","d14","d14","0b5","0ad","f73","fc2","084","05e","d22","fa0") // fucking hair code -/datum/reagent/hair_dye/reaction_mob(mob/living/M, volume) - if(M && ishuman(M)) - var/mob/living/carbon/human/H = M - H.hair_color = pick(potential_colors) - H.facial_hair_color = pick(potential_colors) - H.update_hair() - ..() - return +/datum/reagent/hair_dye/reaction_mob(mob/living/M, method=TOUCH, volume) + if(method == TOUCH || method == VAPOR) + if(M && ishuman(M)) + var/mob/living/carbon/human/H = M + H.hair_color = pick(potential_colors) + H.facial_hair_color = pick(potential_colors) + H.update_hair() /datum/reagent/barbers_aid name = "Barber's Aid" @@ -992,16 +989,15 @@ reagent_state = LIQUID color = "#C8A5DC" -/datum/reagent/barbers_aid/reaction_mob(mob/living/M, volume) - if(M && ishuman(M)) - var/mob/living/carbon/human/H = M - var/datum/sprite_accessory/hair/picked_hair = pick(hair_styles_list) - var/datum/sprite_accessory/facial_hair/picked_beard = pick(facial_hair_styles_list) - H.hair_style = picked_hair - H.facial_hair_style = picked_beard - H.update_hair() - ..() - return +/datum/reagent/barbers_aid/reaction_mob(mob/living/M, method=TOUCH, volume) + if(method == TOUCH || method == VAPOR) + if(M && ishuman(M)) + var/mob/living/carbon/human/H = M + var/datum/sprite_accessory/hair/picked_hair = pick(hair_styles_list) + var/datum/sprite_accessory/facial_hair/picked_beard = pick(facial_hair_styles_list) + H.hair_style = picked_hair + H.facial_hair_style = picked_beard + H.update_hair() /datum/reagent/concentrated_barbers_aid name = "Concentrated Barber's Aid" @@ -1010,14 +1006,13 @@ reagent_state = LIQUID color = "#C8A5DC" -/datum/reagent/concentrated_barbers_aid/reaction_mob(mob/living/M, volume) - if(M && ishuman(M)) - var/mob/living/carbon/human/H = M - H.hair_style = "Very Long Hair" - H.facial_hair_style = "Very Long Beard" - H.update_hair() - ..() - return +/datum/reagent/concentrated_barbers_aid/reaction_mob(mob/living/M, method=TOUCH, volume) + if(method == TOUCH || method == VAPOR) + if(M && ishuman(M)) + var/mob/living/carbon/human/H = M + H.hair_style = "Very Long Hair" + H.facial_hair_style = "Very Long Beard" + H.update_hair() /datum/reagent/saltpetre name = "Saltpetre" diff --git a/code/modules/reagents/Chemistry-Reagents/Pyrotechnic-Reagents.dm b/code/modules/reagents/Chemistry-Reagents/Pyrotechnic-Reagents.dm index 56300fffd97..0303fe93a10 100644 --- a/code/modules/reagents/Chemistry-Reagents/Pyrotechnic-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents/Pyrotechnic-Reagents.dm @@ -67,10 +67,11 @@ W.ChangeTurf(/turf/simulated/floor/plating) /datum/reagent/clf3/reaction_mob(mob/living/M, method=TOUCH, volume) - if(method == TOUCH && isliving(M)) - M.adjust_fire_stacks(min(volume/5, 10)) - M.IgniteMob() - PoolOrNew(/obj/effect/hotspot, M.loc) + if(istype(M)) + if(method != INGEST) + M.adjust_fire_stacks(min(volume/5, 10)) + M.IgniteMob() + PoolOrNew(/obj/effect/hotspot, M.loc) /datum/reagent/sorium name = "Sorium" @@ -148,8 +149,9 @@ ..() /datum/reagent/napalm/reaction_mob(mob/living/M, method=TOUCH, volume) - if(method == TOUCH && isliving(M)) - M.adjust_fire_stacks(min(volume/4, 20)) + if(istype(M)) + if(method != INGEST) + M.adjust_fire_stacks(min(volume/4, 20)) /datum/reagent/cryostylane name = "Cryostylane" diff --git a/code/modules/reagents/Chemistry-Reagents/Toxin-Reagents.dm b/code/modules/reagents/Chemistry-Reagents/Toxin-Reagents.dm index c5416d0fe77..31ca9044802 100644 --- a/code/modules/reagents/Chemistry-Reagents/Toxin-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents/Toxin-Reagents.dm @@ -34,7 +34,7 @@ if(!istype(M) || !M.dna) return //No robots, AIs, aliens, Ians or other mobs should be affected by this. src = null - if((method==TOUCH && prob(min(33, volume))) || method==INGEST) + if((method==VAPOR && prob(min(33, volume))) || method==INGEST || method == PATCH) randmuti(M) if(prob(98)) randmutb(M) @@ -42,13 +42,12 @@ randmutg(M) domutcheck(M, null) updateappearance(M) - return + ..() /datum/reagent/toxin/mutagen/on_mob_life(mob/living/carbon/M) if(istype(M)) M.apply_effect(5,IRRADIATE,0) ..() - return /datum/reagent/toxin/plasma name = "Plasma" @@ -81,9 +80,10 @@ /datum/reagent/toxin/plasma/reaction_mob(mob/living/M, method=TOUCH, volume)//Splashing people with plasma is stronger than fuel! if(!istype(M, /mob/living)) return - if(method == TOUCH) + if(method == TOUCH || method == VAPOR) M.adjust_fire_stacks(volume / 5) return + ..() /datum/reagent/toxin/lexorin name = "Lexorin" @@ -191,11 +191,13 @@ /datum/reagent/toxin/plantbgone/reaction_mob(mob/living/M, method=TOUCH, volume) src = null - if(iscarbon(M)) - var/mob/living/carbon/C = M - if(!C.wear_mask) // If not wearing a mask - var/damage = min(round(0.4*volume, 0.1),10) - C.adjustToxLoss(damage) + if(method == VAPOR) + if(iscarbon(M)) + var/mob/living/carbon/C = M + if(!C.wear_mask) // If not wearing a mask + var/damage = min(round(0.4*volume, 0.1),10) + C.adjustToxLoss(damage) + /datum/reagent/toxin/plantbgone/weedkiller name = "Weed Killer" id = "weedkiller" @@ -212,11 +214,12 @@ /datum/reagent/toxin/pestkiller/reaction_mob(mob/living/M, method=TOUCH, volume) src = null - if(iscarbon(M)) - var/mob/living/carbon/C = M - if(!C.wear_mask) // If not wearing a mask - var/damage = min(round(0.4*volume, 0.1),10) - C.adjustToxLoss(damage) + if(method == VAPOR) + if(iscarbon(M)) + var/mob/living/carbon/C = M + if(!C.wear_mask) // If not wearing a mask + var/damage = min(round(0.4*volume, 0.1),10) + C.adjustToxLoss(damage) /datum/reagent/toxin/spore name = "Spore Toxin" @@ -454,9 +457,8 @@ toxpwr = 0 /datum/reagent/toxin/itching_powder/reaction_mob(mob/living/M, method=TOUCH, volume) - if(method == TOUCH) + if(method != INGEST) M.reagents.add_reagent("itching_powder", volume) - return /datum/reagent/toxin/itching_powder/on_mob_life(mob/living/M) if(prob(15)) @@ -624,17 +626,24 @@ if(!istype(C)) return volume = round(volume,0.1) - if(method != TOUCH) + if(method == INGEST) C.take_organ_damage(min(6*toxpwr, volume * toxpwr)) return - C.acid_act(acidpwr, toxpwr, volume) /datum/reagent/toxin/acid/reaction_obj(obj/O, volume) if(istype(O.loc, /mob)) //handled in human acid_act() return volume = round(volume,0.1) - O.acid_act(acidpwr, toxpwr, volume) + O.acid_act(acidpwr, volume) + +/datum/reagent/toxin/acid/reaction_turf(turf/T, volume) + if (!istype(T)) + return + src = null + volume = round(volume,0.1) + for(var/obj/O in T) + O.acid_act(acidpwr, volume) /datum/reagent/toxin/acid/fluacid name = "Fluorosulfuric acid" diff --git a/code/modules/reagents/reagent_containers/patch.dm b/code/modules/reagents/reagent_containers/patch.dm index f87d3682a7c..1b475da801e 100644 --- a/code/modules/reagents/reagent_containers/patch.dm +++ b/code/modules/reagents/reagent_containers/patch.dm @@ -6,7 +6,7 @@ item_state = "bandaid" possible_transfer_amounts = null volume = 50 - apply_type = TOUCH + apply_type = PATCH apply_method = "apply" /obj/item/weapon/reagent_containers/pill/patch/New() diff --git a/code/modules/reagents/reagent_containers/spray.dm b/code/modules/reagents/reagent_containers/spray.dm index 73923de0f62..46aef0834e4 100644 --- a/code/modules/reagents/reagent_containers/spray.dm +++ b/code/modules/reagents/reagent_containers/spray.dm @@ -79,12 +79,12 @@ continue if(puff_reagent_left <= 0) break - D.reagents.reaction(T) + D.reagents.reaction(T, VAPOR) if(ismob(T)) //mobs are obstacles that consume part of the puff, shortening its range. puff_reagent_left -= 1 if(puff_reagent_left > 0) - D.reagents.reaction(get_turf(D)) + D.reagents.reaction(get_turf(D), VAPOR) puff_reagent_left -= 1 if(puff_reagent_left <= 0) // we used all the puff so we delete it.