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.