From d2a4024e7f4095a48fc3f2973baa38a44eb7a658 Mon Sep 17 00:00:00 2001 From: phil235 Date: Sun, 9 Aug 2015 14:23:12 +0200 Subject: [PATCH] reagent reaction() now use more methods. Instead of just INGEST or TOUCH, we now have INGEST (for injection, ingestion), TOUCH (for splashing), PATCH (for patch application and blob attack), and VAPOR (for smoke, foam and spray application). - TOUCH no longer transfer reagent by default, it's now only used for touch based effect like being flammable when touched by fuel or you and your stuff being acided when touched by acid). - PATCH does no transfer of its own (but actual patches code do make a transfer) but is used for touch effect that ignore clothes and protection (blob attacks, patches effect going through hardsuits) - VAPOR does reagent transfer but it takes into account clothing protection Fixes a typo in humanoid/get_permeability_prot Fixes acid splashing on objects not destroying it. Fixes acid splashing on turf not destroying objects on the turf. Changed damp rag smothering code a bit. Blob Smoke now doesn't do anything. --- .../components/unary_devices/cryo.dm | 2 +- code/game/gamemodes/blob/powers.dm | 2 +- .../effects/effect_system/effects_foam.dm | 6 +- .../effects/effect_system/effects_smoke.dm | 6 +- code/game/objects/items.dm | 1 - .../detectivework/footprints_and_rag.dm | 17 +- .../living/carbon/alien/humanoid/humanoid.dm | 2 +- code/modules/reagents/Chemistry-Holder.dm | 8 +- code/modules/reagents/Chemistry-Readme.dm | 2 +- code/modules/reagents/Chemistry-Reagents.dm | 4 +- .../Chemistry-Reagents/Blob-Reagents.dm | 22 +-- .../Drink-Reagents/Alcohols.dm | 4 +- .../Consumable-Reagents/Food-Reagents.dm | 2 +- .../Chemistry-Reagents/Medicine-Reagents.dm | 20 +-- .../Chemistry-Reagents/Other-Reagents.dm | 159 +++++++++--------- .../Pyrotechnic-Reagents.dm | 14 +- .../Chemistry-Reagents/Toxin-Reagents.dm | 47 +++--- .../reagents/reagent_containers/patch.dm | 2 +- .../reagents/reagent_containers/spray.dm | 4 +- 19 files changed, 164 insertions(+), 160 deletions(-) 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.