diff --git a/code/__DEFINES/dcs/signals.dm b/code/__DEFINES/dcs/signals.dm
index 195508298e0..285a9bd15ce 100644
--- a/code/__DEFINES/dcs/signals.dm
+++ b/code/__DEFINES/dcs/signals.dm
@@ -167,6 +167,11 @@
#define COMPONENT_NO_ATTACK_HAND (1<<0) //works on all 3.
//This signal return value bitflags can be found in __DEFINES/misc.dm
+///from base of atom/expose_reagents():
+#define COMSIG_ATOM_EXPOSE_REAGENTS "atom_expose_reagents"
+ /// Prevents the atom from being exposed to reagents if returned on [COMPONENT_ATOM_EXPOSE_REAGENTS]
+ #define COMPONENT_NO_EXPOSE_REAGENTS (1<<0)
+
///called for each movable in a turf contents on /turf/zImpact(): (atom/movable/A, levels)
#define COMSIG_ATOM_INTERCEPT_Z_FALL "movable_intercept_z_impact"
///called on a movable (NOT living) when someone starts pulling it (atom/movable/puller, state, force)
diff --git a/code/game/atoms.dm b/code/game/atoms.dm
index 30ba7006874..23672cbaa70 100644
--- a/code/game/atoms.dm
+++ b/code/game/atoms.dm
@@ -436,6 +436,27 @@
/atom/proc/is_drainable()
return reagents && (reagents.flags & DRAINABLE)
+/** Handles exposing this atom to a list of reagents.
+ *
+ * Sends COMSIG_ATOM_EXPOSE_REAGENTS
+ * Calls expose_atom() for every reagent in the reagent list.
+ *
+ * Arguments:
+ * - [reagents][/list]: The list of reagents the atom is being exposed to.
+ * - [source][/datum/reagents]: The reagent holder the reagents are being sourced from.
+ * - method: How the atom is being exposed to the reagents.
+ * - volume_modifier: Volume multiplier.
+ * - show_message: Whether to display anything to mobs when they are exposed.
+ */
+/atom/proc/expose_reagents(list/reagents, datum/reagents/source, method=TOUCH, volume_modifier=1, show_message=TRUE)
+ . = SEND_SIGNAL(src, COMSIG_ATOM_EXPOSE_REAGENTS, reagents, source, method, volume_modifier, show_message)
+ if(. & COMPONENT_NO_EXPOSE_REAGENTS)
+ return
+
+ for(var/reagent in reagents)
+ var/datum/reagent/R = reagent
+ . |= R.expose_atom(src, reagents[R] || (R.volume * volume_modifier))
+
/// Are you allowed to drop this atom
/atom/proc/AllowDrop()
return FALSE
diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm
index 6d8fd368f87..ba72905a4c7 100644
--- a/code/game/machinery/Sleeper.dm
+++ b/code/game/machinery/Sleeper.dm
@@ -310,7 +310,7 @@
if(chem in spray_chems)
var/datum/reagents/holder = new()
holder.add_reagent(chem_buttons[chem], 10) //I hope this is the correct way to do this.
- holder.reaction(occupant, VAPOR, 0)
+ holder.expose(occupant, VAPOR, 0)
holder.trans_to(occupant, 10)
playsound(src.loc, 'sound/effects/spray2.ogg', 50, TRUE, -6)
if(user)
diff --git a/code/game/machinery/medipen_refiller.dm b/code/game/machinery/medipen_refiller.dm
index 3dc2090260e..4b11076e04a 100644
--- a/code/game/machinery/medipen_refiller.dm
+++ b/code/game/machinery/medipen_refiller.dm
@@ -69,7 +69,7 @@
to_chat(user, "You start furiously plunging [name].")
if(do_after(user, 30, target = src))
to_chat(user, "You finish plunging the [name].")
- reagents.reaction(get_turf(src), TOUCH)
+ reagents.expose(get_turf(src), TOUCH)
reagents.clear_reagents()
/obj/machinery/medipen_refiller/wrench_act(mob/living/user, obj/item/I)
diff --git a/code/game/mecha/equipment/tools/medical_tools.dm b/code/game/mecha/equipment/tools/medical_tools.dm
index 555ccd313bc..a9e7d97380b 100644
--- a/code/game/mecha/equipment/tools/medical_tools.dm
+++ b/code/game/mecha/equipment/tools/medical_tools.dm
@@ -330,7 +330,7 @@
R += "[A.name] ([num2text(A.volume)]"
mechsyringe.icon_state = initial(mechsyringe.icon_state)
mechsyringe.icon = initial(mechsyringe.icon)
- mechsyringe.reagents.reaction(M, INJECT)
+ mechsyringe.reagents.expose(M, INJECT)
mechsyringe.reagents.trans_to(M, mechsyringe.reagents.total_volume, transfered_by = originaloccupant)
M.take_bodypart_damage(2)
log_combat(originaloccupant, M, "shot", "syringegun")
diff --git a/code/game/mecha/equipment/tools/work_tools.dm b/code/game/mecha/equipment/tools/work_tools.dm
index 35bf8797306..45f880d7659 100644
--- a/code/game/mecha/equipment/tools/work_tools.dm
+++ b/code/game/mecha/equipment/tools/work_tools.dm
@@ -230,9 +230,9 @@
if(!W)
return
var/turf/W_turf = get_turf(W)
- W.reagents.reaction(W_turf)
+ W.reagents.expose(W_turf)
for(var/atom/atm in W_turf)
- W.reagents.reaction(atm)
+ W.reagents.expose(atm)
if(W.loc == my_target)
break
sleep(2)
diff --git a/code/game/objects/effects/effect_system/effects_foam.dm b/code/game/objects/effects/effect_system/effects_foam.dm
index 1edd966ce0b..0207633bf23 100644
--- a/code/game/objects/effects/effect_system/effects_foam.dm
+++ b/code/game/objects/effects/effect_system/effects_foam.dm
@@ -142,7 +142,7 @@
if(O.type == src.type)
continue
if(lifetime % reagent_divisor)
- reagents.reaction(O, VAPOR, fraction)
+ reagents.expose(O, VAPOR, fraction)
var/hit = 0
for(var/mob/living/L in range(0,src))
hit += foam_mob(L)
@@ -150,7 +150,7 @@
lifetime++ //this is so the decrease from mobs hit and the natural decrease don't cumulate.
var/T = get_turf(src)
if(lifetime % reagent_divisor)
- reagents.reaction(T, VAPOR, fraction)
+ reagents.expose(T, VAPOR, fraction)
if(--amount < 0)
return
@@ -163,7 +163,7 @@
return 0
var/fraction = 1/initial(reagent_divisor)
if(lifetime % reagent_divisor)
- reagents.reaction(L, VAPOR, fraction)
+ reagents.expose(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 e0660523811..80ff9c7e8aa 100644
--- a/code/game/objects/effects/effect_system/effects_smoke.dm
+++ b/code/game/objects/effects/effect_system/effects_smoke.dm
@@ -232,9 +232,9 @@
for(var/atom/movable/AM in T)
if(AM.type == src.type)
continue
- reagents.reaction(AM, TOUCH, fraction)
+ reagents.expose(AM, TOUCH, fraction)
- reagents.reaction(T, TOUCH, fraction)
+ reagents.expose(T, TOUCH, fraction)
return 1
/obj/effect/particle_effect/smoke/chem/smoke_mob(mob/living/carbon/M)
@@ -247,7 +247,7 @@
return 0
var/fraction = 1/initial(lifetime)
reagents.copy_to(C, fraction*reagents.total_volume)
- reagents.reaction(M, INGEST, fraction)
+ reagents.expose(M, INGEST, fraction)
return 1
diff --git a/code/game/objects/effects/effect_system/effects_water.dm b/code/game/objects/effects/effect_system/effects_water.dm
index 31124381f6b..44d9c485544 100644
--- a/code/game/objects/effects/effect_system/effects_water.dm
+++ b/code/game/objects/effects/effect_system/effects_water.dm
@@ -21,7 +21,7 @@
/obj/effect/particle_effect/water/Bump(atom/A)
if(reagents)
- reagents.reaction(A)
+ reagents.expose(A)
return ..()
diff --git a/code/game/objects/items/airlock_painter.dm b/code/game/objects/items/airlock_painter.dm
index 1e93bba2727..86bab2ab1c8 100644
--- a/code/game/objects/items/airlock_painter.dm
+++ b/code/game/objects/items/airlock_painter.dm
@@ -87,7 +87,7 @@
// make some colorful reagent, and apply it to the lungs
L.create_reagents(10)
L.reagents.add_reagent(/datum/reagent/colorful_reagent, 10)
- L.reagents.reaction(L, TOUCH, 1)
+ L.reagents.expose(L, TOUCH, 1)
// TODO maybe add some colorful vomit?
@@ -100,7 +100,7 @@
else if(can_use(user) && !L)
user.visible_message("[user] is spraying toner on [user.p_them()]self from [src]! It looks like [user.p_theyre()] trying to commit suicide.")
user.reagents.add_reagent(/datum/reagent/colorful_reagent, 1)
- user.reagents.reaction(user, TOUCH, 1)
+ user.reagents.expose(user, TOUCH, 1)
return TOXLOSS
else
diff --git a/code/game/objects/items/cigs_lighters.dm b/code/game/objects/items/cigs_lighters.dm
index 91f214a1d89..9629bd98a9d 100644
--- a/code/game/objects/items/cigs_lighters.dm
+++ b/code/game/objects/items/cigs_lighters.dm
@@ -249,7 +249,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
if (smoke_all)
to_smoke = reagents.total_volume/((smoketime * 2) / (dragtime / 10))
- reagents.reaction(C, INGEST, fraction)
+ reagents.expose(C, INGEST, fraction)
var/obj/item/organ/lungs/L = C.getorganslot(ORGAN_SLOT_LUNGS)
if(L && !(L.organ_flags & ORGAN_SYNTHETIC))
C.adjustOrganLoss(ORGAN_SLOT_LUNGS, lung_harm)
@@ -934,7 +934,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
var/mob/living/carbon/C = loc
if (src == C.wear_mask) // if it's in the human/monkey mouth, transfer reagents to the mob
var/fraction = min(REAGENTS_METABOLISM/reagents.total_volume, 1) //this will react instantly, making them a little more dangerous than cigarettes
- reagents.reaction(C, INGEST, fraction)
+ reagents.expose(C, INGEST, fraction)
if(!reagents.trans_to(C, REAGENTS_METABOLISM))
reagents.remove_any(REAGENTS_METABOLISM)
if(reagents.get_reagent_amount(/datum/reagent/fuel))
diff --git a/code/game/objects/items/crayons.dm b/code/game/objects/items/crayons.dm
index 7daabcb06c4..677cf0def49 100644
--- a/code/game/objects/items/crayons.dm
+++ b/code/game/objects/items/crayons.dm
@@ -425,7 +425,7 @@
if(affected_turfs.len)
fraction /= affected_turfs.len
for(var/t in affected_turfs)
- reagents.reaction(t, TOUCH, fraction * volume_multiplier)
+ reagents.expose(t, TOUCH, fraction * volume_multiplier)
reagents.trans_to(t, ., volume_multiplier, transfered_by = user)
check_empty(user)
@@ -446,7 +446,7 @@
if(check_empty(user)) //Prevents divsion by zero
return
var/fraction = min(eaten / reagents.total_volume, 1)
- reagents.reaction(M, INGEST, fraction * volume_multiplier)
+ reagents.expose(M, INGEST, fraction * volume_multiplier)
reagents.trans_to(M, eaten, volume_multiplier, transfered_by = user)
// check_empty() is called during afterattack
else
@@ -669,7 +669,7 @@
H.update_body()
var/used = use_charges(user, 10, FALSE)
var/fraction = min(1, used / reagents.maximum_volume)
- reagents.reaction(user, VAPOR, fraction * volume_multiplier)
+ reagents.expose(user, VAPOR, fraction * volume_multiplier)
reagents.trans_to(user, used, volume_multiplier, transfered_by = user)
return (OXYLOSS)
@@ -725,7 +725,7 @@
. = use_charges(user, 10, FALSE)
var/fraction = min(1, . / reagents.maximum_volume)
- reagents.reaction(C, VAPOR, fraction * volume_multiplier)
+ reagents.expose(C, VAPOR, fraction * volume_multiplier)
return
@@ -745,7 +745,7 @@
. = use_charges(user, 2)
var/fraction = min(1, . / reagents.maximum_volume)
- reagents.reaction(target, TOUCH, fraction * volume_multiplier)
+ reagents.expose(target, TOUCH, fraction * volume_multiplier)
reagents.trans_to(target, ., volume_multiplier, transfered_by = user)
if(pre_noise || post_noise)
diff --git a/code/game/objects/items/extinguisher.dm b/code/game/objects/items/extinguisher.dm
index dfee23576ce..077dfa6d6e9 100644
--- a/code/game/objects/items/extinguisher.dm
+++ b/code/game/objects/items/extinguisher.dm
@@ -192,9 +192,9 @@
step_towards(W,my_target)
if(!W.reagents)
continue
- W.reagents.reaction(get_turf(W))
+ W.reagents.expose(get_turf(W))
for(var/A in get_turf(W))
- W.reagents.reaction(A)
+ W.reagents.expose(A)
if(W.loc == my_target)
particles -= W
if(repetition < power)
diff --git a/code/game/objects/items/mop.dm b/code/game/objects/items/mop.dm
index 534ae123de0..141b759860f 100644
--- a/code/game/objects/items/mop.dm
+++ b/code/game/objects/items/mop.dm
@@ -32,7 +32,7 @@
var/obj/effect/decal/cleanable/C = O
cleaner?.mind.adjust_experience(/datum/skill/cleaning, max(round(C.beauty/CLEAN_SKILL_BEAUTY_ADJUSTMENT,1),0)) //it is intentional that the mop rounds xp but soap does not, USE THE SACRED TOOL
qdel(O)
- reagents.reaction(A, TOUCH, 10) //Needed for proper floor wetting.
+ reagents.expose(A, TOUCH, 10) //Needed for proper floor wetting.
var/val2remove = 1
if(cleaner?.mind)
val2remove = round(cleaner.mind.get_skill_modifier(/datum/skill/cleaning, SKILL_SPEED_MODIFIER),0.1)
diff --git a/code/game/objects/items/tanks/watertank.dm b/code/game/objects/items/tanks/watertank.dm
index 0c4aa3d72eb..85477a713e4 100644
--- a/code/game/objects/items/tanks/watertank.dm
+++ b/code/game/objects/items/tanks/watertank.dm
@@ -410,7 +410,7 @@
return
var/used_amount = injection_amount/usage_ratio
- reagents.reaction(user, INJECT,injection_amount,0)
+ reagents.expose(user, INJECT,injection_amount,0)
reagents.trans_to(user,used_amount,multiplier=usage_ratio)
update_icon()
user.update_inv_back() //for overlays update
diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm
index 6cf73351103..e3f90449cf8 100644
--- a/code/game/objects/items/toys.dm
+++ b/code/game/objects/items/toys.dm
@@ -101,9 +101,9 @@
else
T = get_turf(src)
T.visible_message("[src] bursts!","You hear a pop and a splash.")
- reagents.reaction(T)
+ reagents.expose(T)
for(var/atom/A in T)
- reagents.reaction(A)
+ reagents.expose(A)
icon_state = "burst"
qdel(src)
diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm
index 4fbad44290e..51977a5e471 100644
--- a/code/game/objects/objs.dm
+++ b/code/game/objects/objs.dm
@@ -343,3 +343,13 @@
. += GLOB.acid_overlay
if(resistance_flags & ON_FIRE)
. += GLOB.fire_overlay
+
+/// Handles exposing an object to reagents.
+/obj/expose_reagents(list/reagents, datum/reagents/source, method=TOUCH, volume_modifier=1, show_message=TRUE)
+ . = ..()
+ if(. & COMPONENT_NO_EXPOSE_REAGENTS)
+ return
+
+ for(var/reagent in reagents)
+ var/datum/reagent/R = reagent
+ R.expose_obj(src, reagents[R] || (R.volume * volume_modifier))
diff --git a/code/game/objects/structures/janicart.dm b/code/game/objects/structures/janicart.dm
index eac7fc51b64..9045ccd3edf 100644
--- a/code/game/objects/structures/janicart.dm
+++ b/code/game/objects/structures/janicart.dm
@@ -88,7 +88,7 @@
user.visible_message("[user] begins to empty the contents of [src].", "You begin to empty the contents of [src]...")
if(I.use_tool(src, user, 30))
to_chat(usr, "You empty the contents of [src]'s bucket onto the floor.")
- reagents.reaction(src.loc)
+ reagents.expose(src.loc)
src.reagents.clear_reagents()
else
return ..()
diff --git a/code/game/objects/structures/shower.dm b/code/game/objects/structures/shower.dm
index 20e48a7efbb..b49c68b528c 100644
--- a/code/game/objects/structures/shower.dm
+++ b/code/game/objects/structures/shower.dm
@@ -99,7 +99,7 @@
/obj/machinery/shower/proc/wash_atom(atom/A)
A.washed(src)
- reagents.reaction(A, TOUCH, reaction_volume)
+ reagents.expose(A, TOUCH, reaction_volume)
if(isliving(A))
check_heat(A)
diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm
index 4d1768a40f7..ffc96bf999a 100644
--- a/code/game/objects/structures/watercloset.dm
+++ b/code/game/objects/structures/watercloset.dm
@@ -359,7 +359,7 @@
O.acid_level = 0
create_reagents(5)
reagents.add_reagent(dispensedreagent, 5)
- reagents.reaction(O, TOUCH)
+ reagents.expose(O, TOUCH)
user.visible_message("[user] washes [O] using [src].", \
"You wash [O] using [src].")
return 1
diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm
index 4b4933ee66a..ad99021f718 100755
--- a/code/game/turfs/turf.dm
+++ b/code/game/turfs/turf.dm
@@ -546,3 +546,13 @@ GLOBAL_LIST_EMPTY(station_turfs)
. = ..()
if(. != BULLET_ACT_FORCE_PIERCE)
. = BULLET_ACT_TURF
+
+/// Handles exposing a turf to reagents.
+/turf/expose_reagents(list/reagents, datum/reagents/source, method=TOUCH, volume_modifier=1, show_message=TRUE)
+ . = ..()
+ if(. & COMPONENT_NO_EXPOSE_REAGENTS)
+ return
+
+ for(var/reagent in reagents)
+ var/datum/reagent/R = reagent
+ . |= R.expose_turf(src, reagents[R] || (R.volume * volume_modifier))
diff --git a/code/modules/antagonists/blob/blobstrains/_reagent.dm b/code/modules/antagonists/blob/blobstrains/_reagent.dm
index f47c3b3378a..60ebd858cd4 100644
--- a/code/modules/antagonists/blob/blobstrains/_reagent.dm
+++ b/code/modules/antagonists/blob/blobstrains/_reagent.dm
@@ -8,12 +8,12 @@
/datum/blobstrain/reagent/attack_living(var/mob/living/L)
var/mob_protection = L.get_permeability_protection()
- reagent.reaction_mob(L, VAPOR, 25, 1, mob_protection, overmind)
+ reagent.expose_mob(L, VAPOR, 25, 1, mob_protection, overmind)
send_message(L)
/datum/blobstrain/reagent/blobbernaut_attack(mob/living/L)
var/mob_protection = L.get_permeability_protection()
- reagent.reaction_mob(L, VAPOR, 20, 0, mob_protection, overmind)//this will do between 10 and 20 damage(reduced by mob protection), depending on chemical, plus 4 from base brute damage.
+ reagent.expose_mob(L, VAPOR, 20, 0, mob_protection, overmind)//this will do between 10 and 20 damage(reduced by mob protection), depending on chemical, plus 4 from base brute damage.
/datum/blobstrain/reagent/on_sporedeath(mob/living/spore)
spore.reagents.add_reagent(reagent.type, 10)
@@ -27,7 +27,7 @@
can_synth = FALSE
-/datum/reagent/blob/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O)
+/datum/reagent/blob/expose_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O)
if(M.stat == DEAD || istype(M, /mob/living/simple_animal/hostile/blob))
return 0 //the dead, and blob mobs, don't cause reactions
return round(reac_volume * min(1.5 - touch_protection, 1), 0.1) //full touch protection means 50% volume, any prot below 0.5 means 100% volume.
diff --git a/code/modules/antagonists/blob/blobstrains/blazing_oil.dm b/code/modules/antagonists/blob/blobstrains/blazing_oil.dm
index f97e271e72a..67002c78030 100644
--- a/code/modules/antagonists/blob/blobstrains/blazing_oil.dm
+++ b/code/modules/antagonists/blob/blobstrains/blazing_oil.dm
@@ -31,7 +31,7 @@
taste_description = "burning oil"
color = "#B68D00"
-/datum/reagent/blob/blazing_oil/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O)
+/datum/reagent/blob/blazing_oil/expose_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O)
reac_volume = ..()
M.adjust_fire_stacks(round(reac_volume/10))
M.IgniteMob()
diff --git a/code/modules/antagonists/blob/blobstrains/cryogenic_poison.dm b/code/modules/antagonists/blob/blobstrains/cryogenic_poison.dm
index 1665724cbb3..8d2724d3261 100644
--- a/code/modules/antagonists/blob/blobstrains/cryogenic_poison.dm
+++ b/code/modules/antagonists/blob/blobstrains/cryogenic_poison.dm
@@ -16,7 +16,7 @@
color = "#8BA6E9"
taste_description = "brain freeze"
-/datum/reagent/blob/cryogenic_poison/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O)
+/datum/reagent/blob/cryogenic_poison/expose_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O)
reac_volume = ..()
if(M.reagents)
M.reagents.add_reagent(/datum/reagent/consumable/frostoil, 0.3*reac_volume)
diff --git a/code/modules/antagonists/blob/blobstrains/distributed_neurons.dm b/code/modules/antagonists/blob/blobstrains/distributed_neurons.dm
index 27edb0f205f..829d87f8a3b 100644
--- a/code/modules/antagonists/blob/blobstrains/distributed_neurons.dm
+++ b/code/modules/antagonists/blob/blobstrains/distributed_neurons.dm
@@ -24,7 +24,7 @@
name = "Distributed Neurons"
color = "#E88D5D"
-/datum/reagent/blob/distributed_neurons/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O)
+/datum/reagent/blob/distributed_neurons/expose_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O)
reac_volume = ..()
M.apply_damage(0.6*reac_volume, TOX)
if(O && ishuman(M) && M.stat == UNCONSCIOUS)
diff --git a/code/modules/antagonists/blob/blobstrains/electromagnetic_web.dm b/code/modules/antagonists/blob/blobstrains/electromagnetic_web.dm
index 1275473499a..c49c10fac89 100644
--- a/code/modules/antagonists/blob/blobstrains/electromagnetic_web.dm
+++ b/code/modules/antagonists/blob/blobstrains/electromagnetic_web.dm
@@ -29,7 +29,7 @@
taste_description = "pop rocks"
color = "#83ECEC"
-/datum/reagent/blob/electromagnetic_web/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O)
+/datum/reagent/blob/electromagnetic_web/expose_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O)
reac_volume = ..()
if(prob(reac_volume*2))
M.emp_act(EMP_LIGHT)
diff --git a/code/modules/antagonists/blob/blobstrains/energized_jelly.dm b/code/modules/antagonists/blob/blobstrains/energized_jelly.dm
index 7c07103d625..dfd761ed052 100644
--- a/code/modules/antagonists/blob/blobstrains/energized_jelly.dm
+++ b/code/modules/antagonists/blob/blobstrains/energized_jelly.dm
@@ -26,7 +26,7 @@
taste_description = "gelatin"
color = "#EFD65A"
-/datum/reagent/blob/energized_jelly/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O)
+/datum/reagent/blob/energized_jelly/expose_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O)
reac_volume = ..()
M.losebreath += round(0.2*reac_volume)
M.adjustStaminaLoss(reac_volume)
diff --git a/code/modules/antagonists/blob/blobstrains/explosive_lattice.dm b/code/modules/antagonists/blob/blobstrains/explosive_lattice.dm
index 3d005ba9138..4b59b796885 100644
--- a/code/modules/antagonists/blob/blobstrains/explosive_lattice.dm
+++ b/code/modules/antagonists/blob/blobstrains/explosive_lattice.dm
@@ -23,7 +23,7 @@
taste_description = "the bomb"
color = "#8B2500"
-/datum/reagent/blob/explosive_lattice/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O)
+/datum/reagent/blob/explosive_lattice/expose_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O)
var/initial_volume = reac_volume
reac_volume = ..()
if(reac_volume >= 10) //if it's not a spore cloud, bad time incoming
diff --git a/code/modules/antagonists/blob/blobstrains/networked_fibers.dm b/code/modules/antagonists/blob/blobstrains/networked_fibers.dm
index 6edc0e238a4..eada8f47b25 100644
--- a/code/modules/antagonists/blob/blobstrains/networked_fibers.dm
+++ b/code/modules/antagonists/blob/blobstrains/networked_fibers.dm
@@ -31,7 +31,7 @@
taste_description = "efficiency"
color = "#4F4441"
-/datum/reagent/blob/networked_fibers/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O)
+/datum/reagent/blob/networked_fibers/expose_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O)
reac_volume = ..()
M.apply_damage(0.6*reac_volume, BRUTE, wound_bonus=CANT_WOUND)
if(!QDELETED(M))
diff --git a/code/modules/antagonists/blob/blobstrains/pressurized_slime.dm b/code/modules/antagonists/blob/blobstrains/pressurized_slime.dm
index 766794e1561..05220e464de 100644
--- a/code/modules/antagonists/blob/blobstrains/pressurized_slime.dm
+++ b/code/modules/antagonists/blob/blobstrains/pressurized_slime.dm
@@ -37,7 +37,7 @@
taste_description = "a sponge"
color = "#AAAABB"
-/datum/reagent/blob/pressurized_slime/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O)
+/datum/reagent/blob/pressurized_slime/expose_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O)
reac_volume = ..()
var/turf/open/T = get_turf(M)
if(istype(T) && prob(reac_volume))
diff --git a/code/modules/antagonists/blob/blobstrains/reactive_spines.dm b/code/modules/antagonists/blob/blobstrains/reactive_spines.dm
index fca56d14022..9849c1177a7 100644
--- a/code/modules/antagonists/blob/blobstrains/reactive_spines.dm
+++ b/code/modules/antagonists/blob/blobstrains/reactive_spines.dm
@@ -24,7 +24,7 @@
taste_description = "rock"
color = "#9ACD32"
-/datum/reagent/blob/reactive_spines/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O)
+/datum/reagent/blob/reactive_spines/expose_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O)
if(M.stat == DEAD || istype(M, /mob/living/simple_animal/hostile/blob))
return 0 //the dead, and blob mobs, don't cause reactions
M.adjustBruteLoss(0.8*reac_volume)
diff --git a/code/modules/antagonists/blob/blobstrains/regenerative_materia.dm b/code/modules/antagonists/blob/blobstrains/regenerative_materia.dm
index 6ce9e29b1c2..500418b7be6 100644
--- a/code/modules/antagonists/blob/blobstrains/regenerative_materia.dm
+++ b/code/modules/antagonists/blob/blobstrains/regenerative_materia.dm
@@ -13,7 +13,7 @@
taste_description = "heaven"
color = "#A88FB7"
-/datum/reagent/blob/regenerative_materia/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O)
+/datum/reagent/blob/regenerative_materia/expose_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O)
reac_volume = ..()
M.adjust_drugginess(reac_volume)
if(M.reagents)
diff --git a/code/modules/antagonists/blob/blobstrains/replicating_foam.dm b/code/modules/antagonists/blob/blobstrains/replicating_foam.dm
index 70c5a21154f..5d590d45084 100644
--- a/code/modules/antagonists/blob/blobstrains/replicating_foam.dm
+++ b/code/modules/antagonists/blob/blobstrains/replicating_foam.dm
@@ -30,6 +30,6 @@
taste_description = "duplication"
color = "#7B5A57"
-/datum/reagent/blob/replicating_foam/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O)
+/datum/reagent/blob/replicating_foam/expose_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O)
reac_volume = ..()
M.apply_damage(0.7*reac_volume, BRUTE, wound_bonus=CANT_WOUND)
diff --git a/code/modules/antagonists/blob/blobstrains/shifting_fragments.dm b/code/modules/antagonists/blob/blobstrains/shifting_fragments.dm
index 5041bc231c2..c4e23d4554e 100644
--- a/code/modules/antagonists/blob/blobstrains/shifting_fragments.dm
+++ b/code/modules/antagonists/blob/blobstrains/shifting_fragments.dm
@@ -31,6 +31,6 @@
name = "Shifting Fragments"
color = "#C8963C"
-/datum/reagent/blob/shifting_fragments/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O)
+/datum/reagent/blob/shifting_fragments/expose_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O)
reac_volume = ..()
M.apply_damage(0.7*reac_volume, BRUTE, wound_bonus=CANT_WOUND)
diff --git a/code/modules/antagonists/blob/blobstrains/synchronous_mesh.dm b/code/modules/antagonists/blob/blobstrains/synchronous_mesh.dm
index 8b84a4973c9..682ef30ad42 100644
--- a/code/modules/antagonists/blob/blobstrains/synchronous_mesh.dm
+++ b/code/modules/antagonists/blob/blobstrains/synchronous_mesh.dm
@@ -29,7 +29,7 @@
taste_description = "toxic mold"
color = "#65ADA2"
-/datum/reagent/blob/synchronous_mesh/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O)
+/datum/reagent/blob/synchronous_mesh/expose_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O)
reac_volume = ..()
M.apply_damage(0.2*reac_volume, BRUTE, wound_bonus=CANT_WOUND)
if(M && reac_volume)
diff --git a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm
index 75b656880ca..0ed54f36f23 100644
--- a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm
+++ b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm
@@ -237,7 +237,7 @@
if(beaker)
if(reagent_transfer == 0) // Magically transfer reagents. Because cryo magic.
beaker.reagents.trans_to(occupant, 1, efficiency * 0.25) // Transfer reagents.
- beaker.reagents.reaction(occupant, VAPOR)
+ beaker.reagents.expose(occupant, VAPOR)
air1.gases[/datum/gas/oxygen][MOLES] -= max(0,air1.gases[/datum/gas/oxygen][MOLES] - 2 / efficiency) //Let's use gas for this
air1.garbage_collect()
if(++reagent_transfer >= 10 * efficiency) // Throttle reagent transfer (higher efficiency will transfer the same amount but consume less from the beaker).
diff --git a/code/modules/detectivework/footprints_and_rag.dm b/code/modules/detectivework/footprints_and_rag.dm
index e56c7494e0b..ba6563d0657 100644
--- a/code/modules/detectivework/footprints_and_rag.dm
+++ b/code/modules/detectivework/footprints_and_rag.dm
@@ -33,7 +33,7 @@
C.visible_message("[user] smothers \the [C] with \the [src]!", "[user] smothers you with \the [src]!", "You hear some struggling and muffled cries of surprise.")
log_combat(user, C, "smothered", src, log_object)
else
- reagents.reaction(C, TOUCH)
+ reagents.expose(C, TOUCH)
reagents.clear_reagents()
C.visible_message("[user] touches \the [C] with \the [src].")
log_combat(user, C, "touched", src, log_object)
diff --git a/code/modules/food_and_drinks/drinks/drinks.dm b/code/modules/food_and_drinks/drinks/drinks.dm
index f3bd2e07695..8bbd468a7f5 100644
--- a/code/modules/food_and_drinks/drinks/drinks.dm
+++ b/code/modules/food_and_drinks/drinks/drinks.dm
@@ -47,7 +47,7 @@
var/fraction = min(gulp_size/reagents.total_volume, 1)
checkLiked(fraction, M)
- reagents.reaction(M, INGEST, fraction)
+ reagents.expose(M, INGEST, fraction)
reagents.trans_to(M, gulp_size, transfered_by = user)
playsound(M.loc,'sound/items/drink.ogg', rand(10,50), TRUE)
return TRUE
diff --git a/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm b/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm
index 0e0484d157e..046c7249a17 100644
--- a/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm
+++ b/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm
@@ -111,7 +111,7 @@
target.visible_message("[user] splashes the contents of [src] onto [target]!", \
"[user] splashes the contents of [src] onto you!")
log_combat(user, target, "splashed", src)
- reagents.reaction(target, TOUCH)
+ reagents.expose(target, TOUCH)
reagents.clear_reagents()
return
..()
@@ -124,6 +124,6 @@
else if(reagents.total_volume && user.a_intent == INTENT_HARM)
user.visible_message("[user] splashes the contents of [src] onto [target]!", \
"You splash the contents of [src] onto [target].")
- reagents.reaction(target, TOUCH)
+ reagents.expose(target, TOUCH)
reagents.clear_reagents()
return
diff --git a/code/modules/food_and_drinks/food/condiment.dm b/code/modules/food_and_drinks/food/condiment.dm
index a94a7ad54ee..4dbe65a4175 100644
--- a/code/modules/food_and_drinks/food/condiment.dm
+++ b/code/modules/food_and_drinks/food/condiment.dm
@@ -92,7 +92,7 @@
log_combat(user, M, "fed", reagents.log_list())
var/fraction = min(10/reagents.total_volume, 1)
- reagents.reaction(M, INGEST, fraction)
+ reagents.expose(M, INGEST, fraction)
reagents.trans_to(M, 10, transfered_by = user)
playsound(M.loc,'sound/items/drink.ogg', rand(10,50), TRUE)
return 1
diff --git a/code/modules/food_and_drinks/food/snacks_egg.dm b/code/modules/food_and_drinks/food/snacks_egg.dm
index d5e97d241ae..b9cacc569cd 100644
--- a/code/modules/food_and_drinks/food/snacks_egg.dm
+++ b/code/modules/food_and_drinks/food/snacks_egg.dm
@@ -42,7 +42,7 @@
if(chick_count < MAX_CHICKENS) //Chicken code uses this MAX_CHICKENS variable, so I figured that I'd use it again here. Even this check and the check in chicken code both use the MAX_CHICKENS variable, they use independent counter variables and thus are independent of each other.
new /mob/living/simple_animal/chick(T)
chick_count++
- reagents.reaction(hit_atom, TOUCH)
+ reagents.expose(hit_atom, TOUCH)
qdel(src)
/obj/item/reagent_containers/food/snacks/egg/attackby(obj/item/W, mob/user, params)
diff --git a/code/modules/food_and_drinks/food/snacks_other.dm b/code/modules/food_and_drinks/food/snacks_other.dm
index 65b2a581dc7..24904fdad77 100644
--- a/code/modules/food_and_drinks/food/snacks_other.dm
+++ b/code/modules/food_and_drinks/food/snacks_other.dm
@@ -486,7 +486,7 @@
var/mob/living/carbon/C = loc
if (src == C.wear_mask) // if it's in the human/monkey mouth, transfer reagents to the mob
var/fraction = min(REAGENTS_METABOLISM/reagents.total_volume, 1)
- reagents.reaction(C, INGEST, fraction)
+ reagents.expose(C, INGEST, fraction)
if(!reagents.trans_to(C, REAGENTS_METABOLISM))
reagents.remove_any(REAGENTS_METABOLISM)
return
diff --git a/code/modules/food_and_drinks/food/snacks_pie.dm b/code/modules/food_and_drinks/food/snacks_pie.dm
index b61339552ae..91be3368b40 100644
--- a/code/modules/food_and_drinks/food/snacks_pie.dm
+++ b/code/modules/food_and_drinks/food/snacks_pie.dm
@@ -42,7 +42,7 @@
var/turf/T = get_turf(hit_atom)
new/obj/effect/decal/cleanable/food/pie_smudge(T)
if(reagents && reagents.total_volume)
- reagents.reaction(hit_atom, TOUCH)
+ reagents.expose(hit_atom, TOUCH)
if(isliving(hit_atom))
var/mob/living/L = hit_atom
if(stunning)
diff --git a/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm b/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm
index cb594988199..3fac557cdb6 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm
@@ -147,7 +147,7 @@ God bless America.
return
var/mob/living/carbon/C = user.pulling
user.visible_message("[user] dunks [C]'s face in [src]!")
- reagents.reaction(C, TOUCH)
+ reagents.expose(C, TOUCH)
var/permeability = 1 - C.get_permeability_protection(list(HEAD))
C.apply_damage(min(30 * permeability, reagents.total_volume), BURN, BODY_ZONE_HEAD)
reagents.remove_any((reagents.total_volume/2))
diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm
index ce41bf5bb89..e8055636763 100644
--- a/code/modules/hydroponics/grown.dm
+++ b/code/modules/hydroponics/grown.dm
@@ -122,9 +122,9 @@
for(var/datum/plant_gene/trait/trait in seed.genes)
trait.on_squash(src, target)
- reagents.reaction(T)
+ reagents.expose(T)
for(var/A in T)
- reagents.reaction(A)
+ reagents.expose(A)
qdel(src)
diff --git a/code/modules/hydroponics/plant_genes.dm b/code/modules/hydroponics/plant_genes.dm
index 8fc5d49d00a..26163b30dd2 100644
--- a/code/modules/hydroponics/plant_genes.dm
+++ b/code/modules/hydroponics/plant_genes.dm
@@ -433,7 +433,7 @@
if(L.reagents && L.can_inject(null, 0))
var/injecting_amount = max(1, G.seed.potency*0.2) // Minimum of 1, max of 20
var/fraction = min(injecting_amount/G.reagents.total_volume, 1)
- G.reagents.reaction(L, INJECT, fraction)
+ G.reagents.expose(L, INJECT, fraction)
G.reagents.trans_to(L, injecting_amount)
to_chat(target, "You are pricked by [G]!")
log_combat(G, L, "pricked and attempted to inject reagents from [G] to [L]. Last touched by: [G.fingerprintslast].")
diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm
index 2cb615a12d4..9eb383c0363 100644
--- a/code/modules/mining/lavaland/necropolis_chests.dm
+++ b/code/modules/mining/lavaland/necropolis_chests.dm
@@ -601,7 +601,7 @@
reagent_state = LIQUID
color = "#FFEBEB"
-/datum/reagent/flightpotion/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message = 1)
+/datum/reagent/flightpotion/expose_mob(mob/living/M, method=TOUCH, reac_volume, show_message = 1)
if(iscarbon(M) && M.stat != DEAD)
var/mob/living/carbon/C = M
var/holycheck = ishumanbasic(C)
diff --git a/code/modules/mob/living/carbon/human/species_types/synths.dm b/code/modules/mob/living/carbon/human/species_types/synths.dm
index 69001449fb4..f31389e9283 100644
--- a/code/modules/mob/living/carbon/human/species_types/synths.dm
+++ b/code/modules/mob/living/carbon/human/species_types/synths.dm
@@ -42,7 +42,7 @@
/datum/species/synth/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H)
if(chem.type == /datum/reagent/medicine/c2/instabitaluri)
- chem.reaction_mob(H, TOUCH, 2 ,0) //heal a little
+ chem.expose_mob(H, TOUCH, 2 ,0) //heal a little
H.reagents.remove_reagent(chem.type, REAGENTS_METABOLISM)
return 1
else
diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm
index 4104f4b4c7a..e49fa57cae4 100644
--- a/code/modules/mob/living/living_defense.dm
+++ b/code/modules/mob/living/living_defense.dm
@@ -434,3 +434,21 @@
used_item = get_active_held_item()
..()
setMovetype(movement_type & ~FLOATING) // If we were without gravity, the bouncing animation got stopped, so we make sure we restart the bouncing after the next movement.
+
+/** Handles exposing a mob to reagents.
+ *
+ * If the method is INGEST the mob tastes the reagents.
+ * If the method is VAPOR it incorporates permiability protection.
+ */
+/mob/living/expose_reagents(list/reagents, datum/reagents/source, method=TOUCH, volume_modifier=1, show_message=TRUE)
+ . = ..()
+ if(. & COMPONENT_NO_EXPOSE_REAGENTS)
+ return
+
+ if(method == INGEST)
+ taste(source)
+
+ var/touch_protection = (method == VAPOR) ? get_permeability_protection() : 0
+ for(var/reagent in reagents)
+ var/datum/reagent/R = reagent
+ . |= R.expose_mob(src, method, reagents[R] || (R.volume * volume_modifier), show_message, touch_protection)
diff --git a/code/modules/mob/living/simple_animal/hostile/bees.dm b/code/modules/mob/living/simple_animal/hostile/bees.dm
index 14e64861fff..86b9690b560 100644
--- a/code/modules/mob/living/simple_animal/hostile/bees.dm
+++ b/code/modules/mob/living/simple_animal/hostile/bees.dm
@@ -173,12 +173,12 @@
if(. && beegent && isliving(target))
var/mob/living/L = target
if(L.reagents)
- beegent.reaction_mob(L, INJECT)
+ beegent.expose_mob(L, INJECT)
L.reagents.add_reagent(beegent.type, rand(1,5))
/mob/living/simple_animal/hostile/poison/bees/inject_poison(mob/living/L)
if(beegent && istype(L) && L.reagents)
- beegent.reaction_mob(L, INJECT)
+ beegent.expose_mob(L, INJECT)
L.reagents.add_reagent(beegent.type, rand(1,5))
/mob/living/simple_animal/hostile/poison/bees/proc/assign_reagent(datum/reagent/R)
@@ -262,7 +262,7 @@
. = ..()
if(. && beegent && isliving(target))
var/mob/living/L = target
- beegent.reaction_mob(L, TOUCH)
+ beegent.expose_mob(L, TOUCH)
L.reagents.add_reagent(beegent.type, rand(1,5))
diff --git a/code/modules/paperwork/pen.dm b/code/modules/paperwork/pen.dm
index 4925bee1ef2..473ff19a63f 100644
--- a/code/modules/paperwork/pen.dm
+++ b/code/modules/paperwork/pen.dm
@@ -180,7 +180,7 @@
if(..())
if(reagents.total_volume)
if(M.reagents)
- reagents.reaction(M, INJECT, reagents.total_volume)
+ reagents.expose(M, INJECT, reagents.total_volume)
reagents.trans_to(M, reagents.total_volume, transfered_by = user)
diff --git a/code/modules/plumbing/plumbers/_plumb_machinery.dm b/code/modules/plumbing/plumbers/_plumb_machinery.dm
index 5c00404e81e..19bc21239ac 100644
--- a/code/modules/plumbing/plumbers/_plumb_machinery.dm
+++ b/code/modules/plumbing/plumbers/_plumb_machinery.dm
@@ -44,7 +44,7 @@
to_chat(user, "You start furiously plunging [name].")
if(do_after(user, 30, target = src))
to_chat(user, "You finish plunging the [name].")
- reagents.reaction(get_turf(src), TOUCH) //splash on the floor
+ reagents.expose(get_turf(src), TOUCH) //splash on the floor
reagents.clear_reagents()
/obj/machinery/plumbing/welder_act(mob/living/user, obj/item/I)
diff --git a/code/modules/projectiles/projectile/bullets/dart_syringe.dm b/code/modules/projectiles/projectile/bullets/dart_syringe.dm
index b56051d990e..2da73314474 100644
--- a/code/modules/projectiles/projectile/bullets/dart_syringe.dm
+++ b/code/modules/projectiles/projectile/bullets/dart_syringe.dm
@@ -14,7 +14,7 @@
if(blocked != 100) // not completely blocked
if(M.can_inject(null, FALSE, def_zone, piercing)) // Pass the hit zone to see if it can inject by whether it hit the head or the body.
..()
- reagents.reaction(M, INJECT)
+ reagents.expose(M, INJECT)
reagents.trans_to(M, reagents.total_volume)
return BULLET_ACT_HIT
else
diff --git a/code/modules/reagents/chem_splash.dm b/code/modules/reagents/chem_splash.dm
index b16392ecd16..519ae53cf92 100644
--- a/code/modules/reagents/chem_splash.dm
+++ b/code/modules/reagents/chem_splash.dm
@@ -70,7 +70,7 @@
var/atom/A = thing
var/distance = max(1,get_dist(A, epicenter))
var/fraction = 0.5/(2 ** distance) //50/25/12/6... for a 200u splash, 25/12/6/3... for a 100u, 12/6/3/1 for a 50u
- splash_holder.reaction(A, TOUCH, fraction)
+ splash_holder.expose(A, TOUCH, fraction)
qdel(splash_holder)
return 1
diff --git a/code/modules/reagents/chemistry/holder.dm b/code/modules/reagents/chemistry/holder.dm
index bce8e5792c6..e3eb513cf62 100644
--- a/code/modules/reagents/chemistry/holder.dm
+++ b/code/modules/reagents/chemistry/holder.dm
@@ -242,7 +242,7 @@
trans_data = copy_data(T)
R.add_reagent(T.type, transfer_amount * multiplier, trans_data, chem_temp, no_react = 1) //we only handle reaction after every reagent has been transfered.
if(method)
- R.react_single(T, target_atom, method, part, show_message)
+ R.expose_single(T, target_atom, method, part, show_message)
T.on_transfer(target_atom, method, transfer_amount * multiplier)
remove_reagent(T.type, transfer_amount)
transfer_log[T.type] = transfer_amount
@@ -262,7 +262,7 @@
R.add_reagent(T.type, transfer_amount * multiplier, trans_data, chem_temp, no_react = 1)
to_transfer = max(to_transfer - transfer_amount , 0)
if(method)
- R.react_single(T, target_atom, method, transfer_amount, show_message)
+ R.expose_single(T, target_atom, method, transfer_amount, show_message)
T.on_transfer(target_atom, method, transfer_amount * multiplier)
remove_reagent(T.type, transfer_amount)
transfer_log[T.type] = transfer_amount
@@ -638,64 +638,38 @@
return 0
/**
- * Applies the relevant reaction_ proc for every reagent in this holder
- * * [/datum/reagent/proc/reaction_mob]
- * * [/datum/reagent/proc/reaction_turf]
- * * [/datum/reagent/proc/reaction_obj]
+ * Applies the relevant expose_ proc for every reagent in this holder
+ * * [/datum/reagent/proc/expose_mob]
+ * * [/datum/reagent/proc/expose_turf]
+ * * [/datum/reagent/proc/expose_obj]
*/
-/datum/reagents/proc/reaction(atom/A, method = TOUCH, volume_modifier = 1, show_message = 1)
- var/react_type
- if(isliving(A))
- react_type = "LIVING"
- if(method == INGEST)
- var/mob/living/L = A
- L.taste(src)
- else if(isturf(A))
- react_type = "TURF"
- else if(isobj(A))
- react_type = "OBJ"
- else
- return
+/datum/reagents/proc/expose(atom/A, method = TOUCH, volume_modifier = 1, show_message = 1)
+ if(isnull(A))
+ return null
+
var/list/cached_reagents = reagent_list
+ if(!cached_reagents.len)
+ return null
+
+ var/list/reagents = list()
for(var/reagent in cached_reagents)
var/datum/reagent/R = reagent
- switch(react_type)
- if("LIVING")
- var/touch_protection = 0
- if(method == VAPOR)
- var/mob/living/L = A
- touch_protection = L.get_permeability_protection()
- R.reaction_mob(A, method, R.volume * volume_modifier, show_message, touch_protection)
- if("TURF")
- R.reaction_turf(A, R.volume * volume_modifier, show_message)
- if("OBJ")
- R.reaction_obj(A, R.volume * volume_modifier, show_message)
+ reagents[R] = R.volume * volume_modifier
-/// Same as [/datum/reagents/proc/reaction] but only for one reagent
-/datum/reagents/proc/react_single(datum/reagent/R, atom/A, method = TOUCH, volume_modifier = 1, show_message = TRUE)
- var/react_type
- if(isliving(A))
- react_type = "LIVING"
- if(method == INGEST)
- var/mob/living/L = A
- L.taste(src)
- else if(isturf(A))
- react_type = "TURF"
- else if(isobj(A))
- react_type = "OBJ"
- else
- return
- switch(react_type)
- if("LIVING")
- var/touch_protection = 0
- if(method == VAPOR)
- var/mob/living/L = A
- touch_protection = L.get_permeability_protection()
- R.reaction_mob(A, method, R.volume * volume_modifier, show_message, touch_protection)
- if("TURF")
- R.reaction_turf(A, R.volume * volume_modifier, show_message)
- if("OBJ")
- R.reaction_obj(A, R.volume * volume_modifier, show_message)
+ return A.expose_reagents(reagents, src, method, volume_modifier, show_message)
+
+
+/// Same as [/datum/reagents/proc/expose] but only for one reagent
+/datum/reagents/proc/expose_single(datum/reagent/R, atom/A, method = TOUCH, volume_modifier = 1, show_message = TRUE)
+ if(isnull(A))
+ return null
+
+ if(!istype(R))
+ R = get_reagent(R)
+ if(isnull(R))
+ return null
+
+ return A.expose_reagents(list(R = R.volume * volume_modifier), src, method, volume_modifier, show_message)
/// Is this holder full or not
/datum/reagents/proc/holder_full()
diff --git a/code/modules/reagents/chemistry/machinery/smoke_machine.dm b/code/modules/reagents/chemistry/machinery/smoke_machine.dm
index a604137c262..d5dd6b4f0a3 100644
--- a/code/modules/reagents/chemistry/machinery/smoke_machine.dm
+++ b/code/modules/reagents/chemistry/machinery/smoke_machine.dm
@@ -55,7 +55,7 @@
create_reagents(new_volume)
reagents.maximum_volume = new_volume
if(new_volume < reagents.total_volume)
- reagents.reaction(loc, TOUCH) // if someone manages to downgrade it without deconstructing
+ reagents.expose(loc, TOUCH) // if someone manages to downgrade it without deconstructing
reagents.clear_reagents()
efficiency = 9
for(var/obj/item/stock_parts/capacitor/C in component_parts)
@@ -99,7 +99,7 @@
return ..()
/obj/machinery/smoke_machine/deconstruct()
- reagents.reaction(loc, TOUCH)
+ reagents.expose(loc, TOUCH)
reagents.clear_reagents()
return ..()
diff --git a/code/modules/reagents/chemistry/readme.md b/code/modules/reagents/chemistry/readme.md
index f1f32485ff2..0b498dd3bee 100644
--- a/code/modules/reagents/chemistry/readme.md
+++ b/code/modules/reagents/chemistry/readme.md
@@ -66,7 +66,7 @@ The holder (reagents datum) is the datum that holds a list of all reagents curre
reaction(var/atom/A, var/method=TOUCH, var/volume_modifier=0)
This proc calls the appropriate reaction procs of the reagents.
- I.e. if A is an object, it will call the reagents reaction_obj
+ I.e. if A is an object, it will call the reagents expose_obj
proc. The method var is used for reaction on mobs. It simply tells
us if the mob TOUCHed the reagent, if it INGESTed the reagent, if the reagent
was VAPORIZEd on them, if the reagent was INJECTed, or transfered via a PATCH to them.
@@ -116,20 +116,20 @@ The holder (reagents datum) is the datum that holds a list of all reagents curre
# About Reagents:
Reagents are all the things you can mix and fille in bottles etc. This can be anything from rejuvs over water to ... iron. Each reagent also has a few procs - i'll explain those below.
```
- reaction_mob(var/mob/living/L, var/method=TOUCH)
+ expose_mob(var/mob/living/L, var/method=TOUCH)
This is called by the holder's reation proc.
This version is only called when the reagent
reacts with a mob. The method var can be either
TOUCH or INGEST. You'll want to put stuff like
acid-facemelting in here.
- reaction_obj(var/obj/O)
+ expose_obj(var/obj/O)
This is called by the holder's reation proc.
This version is called when the reagents reacts
with an object. You'll want to put stuff like
object melting in here ... or something. i dunno.
- reaction_turf(var/turf/T)
+ expose_turf(var/turf/T)
This is called by the holder's reation proc.
This version is called when the reagents reacts
with a turf. You'll want to put stuff like extra
diff --git a/code/modules/reagents/chemistry/reagents.dm b/code/modules/reagents/chemistry/reagents.dm
index 41c266c4a08..6239f162fa5 100644
--- a/code/modules/reagents/chemistry/reagents.dm
+++ b/code/modules/reagents/chemistry/reagents.dm
@@ -81,8 +81,12 @@ GLOBAL_LIST_INIT(name2reagent, build_name2reagent())
. = ..()
holder = null
+/// Applies this reagent to an [/atom]
+/datum/reagent/proc/expose_atom(atom/A, volume)
+ return
+
/// Applies this reagent to a [/mob/living]
-/datum/reagent/proc/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message = 1, touch_protection = 0)
+/datum/reagent/proc/expose_mob(mob/living/M, method=TOUCH, reac_volume, show_message = 1, touch_protection = 0)
if(!istype(M))
return 0
if(method == VAPOR) //smoke, foam, spray
@@ -94,11 +98,11 @@ GLOBAL_LIST_INIT(name2reagent, build_name2reagent())
return 1
/// Applies this reagent to an [/obj]
-/datum/reagent/proc/reaction_obj(obj/O, volume)
+/datum/reagent/proc/expose_obj(obj/O, volume)
return
/// Applies this reagent to a [/turf]
-/datum/reagent/proc/reaction_turf(turf/T, volume)
+/datum/reagent/proc/expose_turf(turf/T, volume)
return
/// Called from [/datum/reagents/proc/metabolize]
diff --git a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm
index 0491a6b08ba..4bb39410bb5 100644
--- a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm
@@ -48,7 +48,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
L.applyOrganDamage(((max(sqrt(volume) * (boozepwr ** ALCOHOL_EXPONENT) * L.alcohol_tolerance, 0))/150))
return ..()
-/datum/reagent/consumable/ethanol/reaction_obj(obj/O, reac_volume)
+/datum/reagent/consumable/ethanol/expose_obj(obj/O, reac_volume)
if(istype(O, /obj/item/paper))
var/obj/item/paper/paperaffected = O
paperaffected.clearpaper()
@@ -62,7 +62,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
O.visible_message("[O]'s ink is smeared by [name], but doesn't wash away!")
return
-/datum/reagent/consumable/ethanol/reaction_mob(mob/living/M, method=TOUCH, reac_volume)//Splashing people with ethanol isn't quite as good as fuel.
+/datum/reagent/consumable/ethanol/expose_mob(mob/living/M, method=TOUCH, reac_volume)//Splashing people with ethanol isn't quite as good as fuel.
if(!isliving(M))
return
diff --git a/code/modules/reagents/chemistry/reagents/cat2_medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/cat2_medicine_reagents.dm
index a812250d326..b655ae30568 100644
--- a/code/modules/reagents/chemistry/reagents/cat2_medicine_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/cat2_medicine_reagents.dm
@@ -189,7 +189,7 @@
..()
. = TRUE
-/datum/reagent/medicine/c2/hercuri/reaction_mob(mob/living/carbon/M, method=VAPOR, reac_volume)
+/datum/reagent/medicine/c2/hercuri/expose_mob(mob/living/carbon/M, method=VAPOR, reac_volume)
if(method != VAPOR)
return
@@ -412,7 +412,7 @@
reagent_state = LIQUID
color = "#FFEBEB"
-/datum/reagent/medicine/c2/instabitaluri/reaction_mob(mob/living/M, method=TOUCH, reac_volume,show_message = 1)
+/datum/reagent/medicine/c2/instabitaluri/expose_mob(mob/living/M, method=TOUCH, reac_volume,show_message = 1)
if(iscarbon(M))
var/mob/living/carbon/carbies = M
if (carbies.stat == DEAD)
diff --git a/code/modules/reagents/chemistry/reagents/drink_reagents.dm b/code/modules/reagents/chemistry/reagents/drink_reagents.dm
index f9e2902d174..87275535126 100644
--- a/code/modules/reagents/chemistry/reagents/drink_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/drink_reagents.dm
@@ -495,7 +495,7 @@
glass_name = "glass of Pwr Game"
glass_desc = "Goes well with a Vlad's salad."
-/datum/reagent/consumable/pwr_game/reaction_mob(mob/living/C, method=TOUCH, reac_volume)
+/datum/reagent/consumable/pwr_game/expose_mob(mob/living/C, method=TOUCH, reac_volume)
..()
if(C?.mind?.get_skill_level(/datum/skill/gaming) >= SKILL_LEVEL_LEGENDARY && method==INGEST && !HAS_TRAIT(C, TRAIT_GAMERGOD))
ADD_TRAIT(C, TRAIT_GAMERGOD, "pwr_game")
diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm
index 8c5d0c80507..81faab22570 100755
--- a/code/modules/reagents/chemistry/reagents/food_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm
@@ -22,7 +22,7 @@
H.adjust_nutrition(nutriment_factor)
holder.remove_reagent(type, metabolization_rate)
-/datum/reagent/consumable/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
+/datum/reagent/consumable/expose_mob(mob/living/M, method=TOUCH, reac_volume)
if(method == INGEST)
if (quality && !HAS_TRAIT(M, TRAIT_AGEUSIA))
switch(quality)
@@ -115,7 +115,7 @@
metabolization_rate = 10 * REAGENTS_METABOLISM
var/fry_temperature = 450 //Around ~350 F (117 C) which deep fryers operate around in the real world
-/datum/reagent/consumable/cooking_oil/reaction_obj(obj/O, reac_volume)
+/datum/reagent/consumable/cooking_oil/expose_obj(obj/O, reac_volume)
if(holder && holder.chem_temp >= fry_temperature)
if(isitem(O) && !istype(O, /obj/item/reagent_containers/food/snacks/deepfryholder))
O.loc.visible_message("[O] rapidly fries as it's splashed with hot oil! Somehow.")
@@ -123,7 +123,7 @@
F.fry(volume)
F.reagents.add_reagent(/datum/reagent/consumable/cooking_oil, reac_volume)
-/datum/reagent/consumable/cooking_oil/reaction_mob(mob/living/M, method = TOUCH, reac_volume, show_message = 1, touch_protection = 0)
+/datum/reagent/consumable/cooking_oil/expose_mob(mob/living/M, method = TOUCH, reac_volume, show_message = 1, touch_protection = 0)
if(!istype(M))
return
var/boiling = FALSE
@@ -149,7 +149,7 @@
M.adjustFireLoss(FryLoss)
return TRUE
-/datum/reagent/consumable/cooking_oil/reaction_turf(turf/open/T, reac_volume)
+/datum/reagent/consumable/cooking_oil/expose_turf(turf/open/T, reac_volume)
if(!istype(T) || isgroundlessturf(T))
return
if(reac_volume >= 5)
@@ -278,7 +278,7 @@
M.adjust_bodytemperature(cooling, 50)
..()
-/datum/reagent/consumable/frostoil/reaction_turf(turf/T, reac_volume)
+/datum/reagent/consumable/frostoil/expose_turf(turf/T, reac_volume)
if(reac_volume >= 5)
for(var/mob/living/simple_animal/slime/M in T)
M.adjustToxLoss(rand(15,30))
@@ -294,7 +294,7 @@
color = "#B31008" // rgb: 179, 16, 8
taste_description = "scorching agony"
-/datum/reagent/consumable/condensedcapsaicin/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
+/datum/reagent/consumable/condensedcapsaicin/expose_mob(mob/living/M, method=TOUCH, reac_volume)
if(!ishuman(M) && !ismonkey(M))
return
@@ -338,13 +338,13 @@
color = "#FFFFFF" // rgb: 255,255,255
taste_description = "salt"
-/datum/reagent/consumable/sodiumchloride/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
+/datum/reagent/consumable/sodiumchloride/expose_mob(mob/living/M, method=TOUCH, reac_volume)
if(!istype(M))
return
if(M.has_bane(BANE_SALT))
M.mind.disrupt_spells(-200)
-/datum/reagent/consumable/sodiumchloride/reaction_turf(turf/T, reac_volume) //Creates an umbra-blocking salt pile
+/datum/reagent/consumable/sodiumchloride/expose_turf(turf/T, reac_volume) //Creates an umbra-blocking salt pile
if(!istype(T))
return
if(reac_volume < 1)
@@ -436,7 +436,7 @@
color = "#302000" // rgb: 48, 32, 0
taste_description = "slime"
-/datum/reagent/consumable/cornoil/reaction_turf(turf/open/T, reac_volume)
+/datum/reagent/consumable/cornoil/expose_turf(turf/open/T, reac_volume)
if (!istype(T))
return
T.MakeSlippery(TURF_WET_LUBE, min_wet_time = 10 SECONDS, wet_time_to_add = reac_volume*2 SECONDS)
@@ -497,7 +497,7 @@
color = "#FFFFFF" // rgb: 0, 0, 0
taste_description = "chalky wheat"
-/datum/reagent/consumable/flour/reaction_turf(turf/T, reac_volume)
+/datum/reagent/consumable/flour/expose_turf(turf/T, reac_volume)
if(!isspaceturf(T))
var/obj/effect/decal/cleanable/food/flour/reagentdecal = new(T)
reagentdecal = locate() in T //Might have merged with flour already there.
@@ -583,7 +583,7 @@
M.adjustToxLoss(-1*REM, 0)
..()
-/datum/reagent/consumable/honey/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
+/datum/reagent/consumable/honey/expose_mob(mob/living/M, method=TOUCH, reac_volume)
if(iscarbon(M) && (method in list(TOUCH, VAPOR, PATCH)))
var/mob/living/carbon/C = M
for(var/s in C.surgeries)
@@ -609,7 +609,7 @@
color = "#c0c9a0"
taste_description = "bitterness"
-/datum/reagent/consumable/tearjuice/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
+/datum/reagent/consumable/tearjuice/expose_mob(mob/living/M, method=TOUCH, reac_volume)
if(!istype(M))
return
var/unprotected = FALSE
@@ -680,7 +680,7 @@
color = "#b5a213"
taste_description = "tingling mushroom"
-/datum/reagent/consumable/tinlux/reaction_mob(mob/living/M)
+/datum/reagent/consumable/tinlux/expose_mob(mob/living/M)
M.set_light(2)
/datum/reagent/consumable/tinlux/on_mob_end_metabolize(mob/living/M)
@@ -715,7 +715,7 @@
color = "#97ee63"
taste_description = "pure electricity"
-/datum/reagent/consumable/liquidelectricity/reaction_mob(mob/living/M, method=TOUCH, reac_volume) //can't be on life because of the way blood works.
+/datum/reagent/consumable/liquidelectricity/expose_mob(mob/living/M, method=TOUCH, reac_volume) //can't be on life because of the way blood works.
if((method == INGEST || method == INJECT || method == PATCH) && iscarbon(M))
var/mob/living/carbon/C = M
var/obj/item/organ/stomach/ethereal/stomach = C.getorganslot(ORGAN_SLOT_STOMACH)
diff --git a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm
index cb2236a777d..8b110970fa0 100644
--- a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm
@@ -230,7 +230,7 @@
..()
. = 1
-/datum/reagent/medicine/rezadone/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
+/datum/reagent/medicine/rezadone/expose_mob(mob/living/M, method=TOUCH, reac_volume)
. = ..()
if(iscarbon(M))
var/mob/living/carbon/patient = M
@@ -323,7 +323,7 @@
..()
return TRUE
-/datum/reagent/medicine/mine_salve/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message = 1)
+/datum/reagent/medicine/mine_salve/expose_mob(mob/living/M, method=TOUCH, reac_volume, show_message = 1)
if(iscarbon(M) && M.stat != DEAD)
if(method in list(INGEST, VAPOR, INJECT))
M.adjust_nutrition(-5)
@@ -756,7 +756,7 @@
if(chems.has_reagent(type, 1))
mytray.spawnplant()
-/datum/reagent/medicine/strange_reagent/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
+/datum/reagent/medicine/strange_reagent/expose_mob(mob/living/M, method=TOUCH, reac_volume)
if(M.stat != DEAD)
return ..()
if(M.suiciding || M.hellbound) //they are never coming back
@@ -907,7 +907,7 @@
color = "#CC23FF"
taste_description = "jelly"
-/datum/reagent/medicine/regen_jelly/reaction_mob(mob/living/M, reac_volume)
+/datum/reagent/medicine/regen_jelly/expose_mob(mob/living/M, reac_volume)
if(M && ishuman(M) && reac_volume >= 0.5)
var/mob/living/carbon/human/H = M
H.hair_color = "C2F"
@@ -1272,7 +1272,7 @@
..()
. = 1
-/datum/reagent/medicine/polypyr/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
+/datum/reagent/medicine/polypyr/expose_mob(mob/living/M, method=TOUCH, reac_volume)
if(method == TOUCH || method == VAPOR)
if(M && ishuman(M) && reac_volume >= 0.5)
var/mob/living/carbon/human/H = M
diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm
index 022ca8d8e95..f0b88f62822 100644
--- a/code/modules/reagents/chemistry/reagents/other_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm
@@ -16,7 +16,7 @@
if(chems.has_reagent(src.type, 1))
mytray.adjustPests(rand(2,3))
-/datum/reagent/blood/reaction_mob(mob/living/L, method=TOUCH, reac_volume)
+/datum/reagent/blood/expose_mob(mob/living/L, method=TOUCH, reac_volume)
if(data && data["viruses"])
for(var/thing in data["viruses"])
var/datum/disease/D = thing
@@ -75,7 +75,7 @@
var/datum/disease/D = thing
. += D
-/datum/reagent/blood/reaction_turf(turf/T, reac_volume)//splash the blood all over the place
+/datum/reagent/blood/expose_turf(turf/T, reac_volume)//splash the blood all over the place
if(!istype(T))
return
if(reac_volume < 3)
@@ -105,7 +105,7 @@
color = "#C81040" // rgb: 200, 16, 64
taste_description = "slime"
-/datum/reagent/vaccine/reaction_mob(mob/living/L, method=TOUCH, reac_volume)
+/datum/reagent/vaccine/expose_mob(mob/living/L, method=TOUCH, reac_volume)
if(islist(data) && (method == INGEST || method == INJECT))
for(var/thing in L.diseases)
var/datum/disease/D = thing
@@ -144,7 +144,7 @@
* Water reaction to turf
*/
-/datum/reagent/water/reaction_turf(turf/open/T, reac_volume)
+/datum/reagent/water/expose_turf(turf/open/T, reac_volume)
if(!istype(T))
return
var/CT = cooling_temperature
@@ -171,7 +171,7 @@
* Water reaction to an object
*/
-/datum/reagent/water/reaction_obj(obj/O, reac_volume)
+/datum/reagent/water/expose_obj(obj/O, reac_volume)
O.extinguish()
O.acid_level = 0
// Monkey cube
@@ -193,7 +193,7 @@
* Water reaction to a mob
*/
-/datum/reagent/water/reaction_mob(mob/living/M, method=TOUCH, reac_volume)//Splashing people with water can help put them out!
+/datum/reagent/water/expose_mob(mob/living/M, method=TOUCH, reac_volume)//Splashing people with water can help put them out!
if(!istype(M))
return
if(method == TOUCH)
@@ -227,7 +227,7 @@
REMOVE_TRAIT(L, TRAIT_HOLY, type)
..()
-/datum/reagent/water/holywater/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
+/datum/reagent/water/holywater/expose_mob(mob/living/M, method=TOUCH, reac_volume)
if(iscultist(M))
to_chat(M, "A vile holiness begins to spread its shining tendrils through your mind, purging the Geometer of Blood's influence!")
..()
@@ -263,7 +263,7 @@
return
holder.remove_reagent(type, 0.4) //fixed consumption to prevent balancing going out of whack
-/datum/reagent/water/holywater/reaction_turf(turf/T, reac_volume)
+/datum/reagent/water/holywater/expose_turf(turf/T, reac_volume)
..()
if(!istype(T))
return
@@ -300,7 +300,7 @@
* Water reaction to turf
*/
-/datum/reagent/hydrogen_peroxide/reaction_turf(turf/open/T, reac_volume)
+/datum/reagent/hydrogen_peroxide/expose_turf(turf/open/T, reac_volume)
if(!istype(T))
return
if(reac_volume >= 5)
@@ -309,7 +309,7 @@
* Water reaction to a mob
*/
-/datum/reagent/hydrogen_peroxide/reaction_mob(mob/living/M, method=TOUCH, reac_volume)//Splashing people with h2o2 can burn them !
+/datum/reagent/hydrogen_peroxide/expose_mob(mob/living/M, method=TOUCH, reac_volume)//Splashing people with h2o2 can burn them !
if(!istype(M))
return
if(method == TOUCH)
@@ -321,7 +321,7 @@
description = "Something that shouldn't exist on this plane of existence."
taste_description = "suffering"
-/datum/reagent/fuel/unholywater/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
+/datum/reagent/fuel/unholywater/expose_mob(mob/living/M, method=TOUCH, reac_volume)
if(method == TOUCH || method == VAPOR)
M.reagents.add_reagent(type,reac_volume/4)
return
@@ -373,7 +373,7 @@
taste_description = "cherry" // by popular demand
var/lube_kind = TURF_WET_LUBE ///What kind of slipperiness gets added to turfs.
-/datum/reagent/lube/reaction_turf(turf/open/T, reac_volume)
+/datum/reagent/lube/expose_turf(turf/open/T, reac_volume)
if (!istype(T))
return
if(reac_volume >= 1)
@@ -393,7 +393,7 @@
overdose_threshold = 11 //Slightly more than one un-nozzled spraybottle.
taste_description = "sour oranges"
-/datum/reagent/spraytan/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message = 1)
+/datum/reagent/spraytan/expose_mob(mob/living/M, method=TOUCH, reac_volume, show_message = 1)
if(ishuman(M))
if(method == PATCH || method == VAPOR)
var/mob/living/carbon/human/N = M
@@ -678,7 +678,7 @@
color = "#13BC5E" // rgb: 19, 188, 94
taste_description = "slime"
-/datum/reagent/aslimetoxin/reaction_mob(mob/living/L, method=TOUCH, reac_volume)
+/datum/reagent/aslimetoxin/expose_mob(mob/living/L, method=TOUCH, reac_volume)
if(method != TOUCH)
L.ForceContractDisease(new /datum/disease/transformation/slime(), FALSE, TRUE)
@@ -689,7 +689,7 @@
can_synth = FALSE
taste_description = "decay"
-/datum/reagent/gluttonytoxin/reaction_mob(mob/living/L, method=TOUCH, reac_volume)
+/datum/reagent/gluttonytoxin/expose_mob(mob/living/L, method=TOUCH, reac_volume)
L.ForceContractDisease(new /datum/disease/transformation/morph(), FALSE, TRUE)
/datum/reagent/serotrotium
@@ -712,13 +712,13 @@
color = "#808080" // rgb: 128, 128, 128
taste_mult = 0 // oderless and tasteless
-/datum/reagent/oxygen/reaction_obj(obj/O, reac_volume)
+/datum/reagent/oxygen/expose_obj(obj/O, reac_volume)
if((!O) || (!reac_volume))
return 0
var/temp = holder ? holder.chem_temp : T20C
O.atmos_spawn_air("o2=[reac_volume/2];TEMP=[temp]")
-/datum/reagent/oxygen/reaction_turf(turf/open/T, reac_volume)
+/datum/reagent/oxygen/expose_turf(turf/open/T, reac_volume)
if(istype(T))
var/temp = holder ? holder.chem_temp : T20C
T.atmos_spawn_air("o2=[reac_volume/2];TEMP=[temp]")
@@ -731,7 +731,7 @@
color = "#6E3B08" // rgb: 110, 59, 8
taste_description = "metal"
-/datum/reagent/copper/reaction_obj(obj/O, reac_volume)
+/datum/reagent/copper/expose_obj(obj/O, reac_volume)
if(istype(O, /obj/item/stack/sheet/metal))
var/obj/item/stack/sheet/metal/M = O
reac_volume = min(reac_volume, M.amount)
@@ -745,13 +745,13 @@
color = "#808080" // rgb: 128, 128, 128
taste_mult = 0
-/datum/reagent/nitrogen/reaction_obj(obj/O, reac_volume)
+/datum/reagent/nitrogen/expose_obj(obj/O, reac_volume)
if((!O) || (!reac_volume))
return 0
var/temp = holder ? holder.chem_temp : T20C
O.atmos_spawn_air("n2=[reac_volume/2];TEMP=[temp]")
-/datum/reagent/nitrogen/reaction_turf(turf/open/T, reac_volume)
+/datum/reagent/nitrogen/expose_turf(turf/open/T, reac_volume)
if(istype(T))
var/temp = holder ? holder.chem_temp : T20C
T.atmos_spawn_air("n2=[reac_volume/2];TEMP=[temp]")
@@ -799,7 +799,7 @@
color = "#1C1300" // rgb: 30, 20, 0
taste_description = "sour chalk"
-/datum/reagent/carbon/reaction_turf(turf/T, reac_volume)
+/datum/reagent/carbon/expose_turf(turf/T, reac_volume)
if(!isspaceturf(T))
var/obj/effect/decal/cleanable/dirt/D = locate() in T.contents
if(!D)
@@ -898,7 +898,7 @@
color = "#D0EFEE" // space cleaner but lighter
taste_description = "bitterness"
-/datum/reagent/space_cleaner/sterilizine/reaction_mob(mob/living/carbon/C, method=TOUCH, reac_volume)
+/datum/reagent/space_cleaner/sterilizine/expose_mob(mob/living/carbon/C, method=TOUCH, reac_volume)
if(method in list(TOUCH, VAPOR, PATCH))
for(var/s in C.surgeries)
var/datum/surgery/S = s
@@ -919,7 +919,7 @@
C.blood_volume += 0.5
..()
-/datum/reagent/iron/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
+/datum/reagent/iron/expose_mob(mob/living/M, method=TOUCH, reac_volume)
if(M.has_bane(BANE_IRON)) //If the target is weak to cold iron, then poison them.
if(holder && holder.chem_temp < 100) // COLD iron.
M.reagents.add_reagent(/datum/reagent/toxin, reac_volume)
@@ -941,7 +941,7 @@
taste_description = "expensive yet reasonable metal"
material = /datum/material/silver
-/datum/reagent/silver/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
+/datum/reagent/silver/expose_mob(mob/living/M, method=TOUCH, reac_volume)
if(M.has_bane(BANE_SILVER))
M.reagents.add_reagent(/datum/reagent/toxin, reac_volume)
..()
@@ -959,7 +959,7 @@
M.apply_effect(irradiation_level/M.metabolism_efficiency,EFFECT_IRRADIATE,0)
..()
-/datum/reagent/uranium/reaction_turf(turf/T, reac_volume)
+/datum/reagent/uranium/expose_turf(turf/T, reac_volume)
if(reac_volume >= 3)
if(!isspaceturf(T))
var/obj/effect/decal/cleanable/greenglow/GG = locate() in T.contents
@@ -999,7 +999,7 @@
taste_description = "fizzling blue"
material = /datum/material/bluespace
-/datum/reagent/bluespace/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
+/datum/reagent/bluespace/expose_mob(mob/living/M, method=TOUCH, reac_volume)
if(method == TOUCH || method == VAPOR)
do_teleport(M, get_turf(M), (reac_volume / 5), asoundin = 'sound/effects/phasein.ogg', channel = TELEPORT_CHANNEL_BLUESPACE) //4 tiles per crystal
..()
@@ -1039,7 +1039,7 @@
glass_name = "glass of welder fuel"
glass_desc = "Unless you're an industrial tool, this is probably not safe for consumption."
-/datum/reagent/fuel/reaction_mob(mob/living/M, method=TOUCH, reac_volume)//Splashing people with welding fuel to make them easy to ignite!
+/datum/reagent/fuel/expose_mob(mob/living/M, method=TOUCH, reac_volume)//Splashing people with welding fuel to make them easy to ignite!
if(method == TOUCH || method == VAPOR)
M.adjust_fire_stacks(reac_volume / 10)
return
@@ -1057,7 +1057,7 @@
taste_description = "sourness"
reagent_weight = 0.6 //so it sprays further
-/datum/reagent/space_cleaner/reaction_obj(obj/O, reac_volume)
+/datum/reagent/space_cleaner/expose_obj(obj/O, reac_volume)
if(istype(O, /obj/effect/decal/cleanable))
qdel(O)
else
@@ -1065,7 +1065,7 @@
O.remove_atom_colour(WASHABLE_COLOUR_PRIORITY)
SEND_SIGNAL(O, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD)
-/datum/reagent/space_cleaner/reaction_turf(turf/T, reac_volume)
+/datum/reagent/space_cleaner/expose_turf(turf/T, reac_volume)
if(reac_volume >= 1)
T.remove_atom_colour(WASHABLE_COLOUR_PRIORITY)
SEND_SIGNAL(T, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD)
@@ -1075,7 +1075,7 @@
for(var/mob/living/simple_animal/slime/M in T)
M.adjustToxLoss(rand(5,10))
-/datum/reagent/space_cleaner/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
+/datum/reagent/space_cleaner/expose_mob(mob/living/M, method=TOUCH, reac_volume)
if(method == TOUCH || method == VAPOR)
M.remove_atom_colour(WASHABLE_COLOUR_PRIORITY)
if(iscarbon(M))
@@ -1118,7 +1118,7 @@
M.adjustToxLoss(3.33)
..()
-/datum/reagent/space_cleaner/ez_clean/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
+/datum/reagent/space_cleaner/ez_clean/expose_mob(mob/living/M, method=TOUCH, reac_volume)
..()
if((method == TOUCH || method == VAPOR) && !issilicon(M))
M.adjustBruteLoss(1.5)
@@ -1161,7 +1161,7 @@
can_synth = FALSE
taste_description = "sludge"
-/datum/reagent/nanomachines/reaction_mob(mob/living/L, method=TOUCH, reac_volume, show_message = 1, touch_protection = 0)
+/datum/reagent/nanomachines/expose_mob(mob/living/L, method=TOUCH, reac_volume, show_message = 1, touch_protection = 0)
if(method==PATCH || method==INGEST || method==INJECT || (method == VAPOR && prob(min(reac_volume,100)*(1 - touch_protection))))
L.ForceContractDisease(new /datum/disease/transformation/robot(), FALSE, TRUE)
@@ -1172,7 +1172,7 @@
can_synth = FALSE
taste_description = "sludge"
-/datum/reagent/xenomicrobes/reaction_mob(mob/living/L, method=TOUCH, reac_volume, show_message = 1, touch_protection = 0)
+/datum/reagent/xenomicrobes/expose_mob(mob/living/L, method=TOUCH, reac_volume, show_message = 1, touch_protection = 0)
if(method==PATCH || method==INGEST || method==INJECT || (method == VAPOR && prob(min(reac_volume,100)*(1 - touch_protection))))
L.ForceContractDisease(new /datum/disease/transformation/xeno(), FALSE, TRUE)
@@ -1183,7 +1183,7 @@
can_synth = FALSE
taste_description = "slime"
-/datum/reagent/fungalspores/reaction_mob(mob/living/L, method=TOUCH, reac_volume, show_message = 1, touch_protection = 0)
+/datum/reagent/fungalspores/expose_mob(mob/living/L, method=TOUCH, reac_volume, show_message = 1, touch_protection = 0)
if(method==PATCH || method==INGEST || method==INJECT || (method == VAPOR && prob(min(reac_volume,100)*(1 - touch_protection))))
L.ForceContractDisease(new /datum/disease/tuberculosis(), FALSE, TRUE)
@@ -1194,7 +1194,7 @@
taste_description = "goo"
can_synth = FALSE //special orange man request
-/datum/reagent/snail/reaction_mob(mob/living/L, method=TOUCH, reac_volume, show_message = 1, touch_protection = 0)
+/datum/reagent/snail/expose_mob(mob/living/L, method=TOUCH, reac_volume, show_message = 1, touch_protection = 0)
if(method==PATCH || method==INGEST || method==INJECT || (method == VAPOR && prob(min(reac_volume,100)*(1 - touch_protection))))
L.ForceContractDisease(new /datum/disease/gastrolosis(), FALSE, TRUE)
@@ -1257,13 +1257,13 @@
color = "#B0B0B0" // rgb : 192, 192, 192
taste_description = "something unknowable"
-/datum/reagent/carbondioxide/reaction_obj(obj/O, reac_volume)
+/datum/reagent/carbondioxide/expose_obj(obj/O, reac_volume)
if((!O) || (!reac_volume))
return 0
var/temp = holder ? holder.chem_temp : T20C
O.atmos_spawn_air("co2=[reac_volume/5];TEMP=[temp]")
-/datum/reagent/carbondioxide/reaction_turf(turf/open/T, reac_volume)
+/datum/reagent/carbondioxide/expose_turf(turf/open/T, reac_volume)
if(istype(T))
var/temp = holder ? holder.chem_temp : T20C
T.atmos_spawn_air("co2=[reac_volume/5];TEMP=[temp]")
@@ -1277,18 +1277,18 @@
color = "#808080"
taste_description = "sweetness"
-/datum/reagent/nitrous_oxide/reaction_obj(obj/O, reac_volume)
+/datum/reagent/nitrous_oxide/expose_obj(obj/O, reac_volume)
if((!O) || (!reac_volume))
return 0
var/temp = holder ? holder.chem_temp : T20C
O.atmos_spawn_air("n2o=[reac_volume/5];TEMP=[temp]")
-/datum/reagent/nitrous_oxide/reaction_turf(turf/open/T, reac_volume)
+/datum/reagent/nitrous_oxide/expose_turf(turf/open/T, reac_volume)
if(istype(T))
var/temp = holder ? holder.chem_temp : T20C
T.atmos_spawn_air("n2o=[reac_volume/5];TEMP=[temp]")
-/datum/reagent/nitrous_oxide/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
+/datum/reagent/nitrous_oxide/expose_mob(mob/living/M, method=TOUCH, reac_volume)
if(method == VAPOR)
M.drowsyness += max(round(reac_volume, 1), 2)
@@ -1583,7 +1583,7 @@
taste_description = "carpet" // Your tounge feels furry.
var/carpet_type = /turf/open/floor/carpet
-/datum/reagent/carpet/reaction_turf(turf/T, reac_volume)
+/datum/reagent/carpet/expose_turf(turf/T, reac_volume)
if(isplatingturf(T) || istype(T, /turf/open/floor/plasteel))
var/turf/open/floor/F = T
F.PlaceOnTop(carpet_type, flags = CHANGETURF_INHERIT_AIR)
@@ -1699,7 +1699,7 @@
taste_description = "acid"
-/datum/reagent/acetone_oxide/reaction_mob(mob/living/M, method=TOUCH, reac_volume)//Splashing people kills people!
+/datum/reagent/acetone_oxide/expose_mob(mob/living/M, method=TOUCH, reac_volume)//Splashing people kills people!
if(!istype(M))
return
if(method == TOUCH)
@@ -1757,21 +1757,12 @@
M.add_atom_colour(pick(random_color_list), WASHABLE_COLOUR_PRIORITY)
return ..()
-/datum/reagent/colorful_reagent/reaction_mob(mob/living/M, reac_volume)
+/// Colors anything it touches a random color.
+/datum/reagent/colorful_reagent/expose_atom(mob/living/M, reac_volume)
if(can_colour_mobs)
M.add_atom_colour(pick(random_color_list), WASHABLE_COLOUR_PRIORITY)
..()
-/datum/reagent/colorful_reagent/reaction_obj(obj/O, reac_volume)
- if(O)
- O.add_atom_colour(pick(random_color_list), WASHABLE_COLOUR_PRIORITY)
- ..()
-
-/datum/reagent/colorful_reagent/reaction_turf(turf/T, reac_volume)
- if(T)
- T.add_atom_colour(pick(random_color_list), WASHABLE_COLOUR_PRIORITY)
- ..()
-
/datum/reagent/hair_dye
name = "Quantum Hair Dye"
description = "Has a high chance of making you look like a mad scientist."
@@ -1786,7 +1777,7 @@
/datum/reagent/hair_dye/proc/UpdateColor()
color = pick(potential_colors)
-/datum/reagent/hair_dye/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
+/datum/reagent/hair_dye/expose_mob(mob/living/M, method=TOUCH, reac_volume)
if(method == TOUCH || method == VAPOR)
if(M && ishuman(M))
var/mob/living/carbon/human/H = M
@@ -1801,7 +1792,7 @@
color = "#A86B45" //hair is brown
taste_description = "sourness"
-/datum/reagent/barbers_aid/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
+/datum/reagent/barbers_aid/expose_mob(mob/living/M, method=TOUCH, reac_volume)
if(method == TOUCH || method == VAPOR)
if(M && ishuman(M) && !HAS_TRAIT(M, TRAIT_BALD))
var/mob/living/carbon/human/H = M
@@ -1819,7 +1810,7 @@
color = "#7A4E33" //hair is dark browmn
taste_description = "sourness"
-/datum/reagent/concentrated_barbers_aid/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
+/datum/reagent/concentrated_barbers_aid/expose_mob(mob/living/M, method=TOUCH, reac_volume)
if(method == TOUCH || method == VAPOR)
if(M && ishuman(M) && !HAS_TRAIT(M, TRAIT_BALD))
var/mob/living/carbon/human/H = M
@@ -1835,7 +1826,7 @@
color = "#ecb2cf"
taste_description = "bitterness"
-/datum/reagent/baldium/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
+/datum/reagent/baldium/expose_mob(mob/living/M, method=TOUCH, reac_volume)
if(method == TOUCH || method == VAPOR)
if(M && ishuman(M))
var/mob/living/carbon/human/H = M
@@ -1875,11 +1866,11 @@
color = "#A70FFF"
taste_description = "dryness"
-/datum/reagent/drying_agent/reaction_turf(turf/open/T, reac_volume)
+/datum/reagent/drying_agent/expose_turf(turf/open/T, reac_volume)
if(istype(T))
T.MakeDry(ALL, TRUE, reac_volume * 5 SECONDS) //50 deciseconds per unit
-/datum/reagent/drying_agent/reaction_obj(obj/O, reac_volume)
+/datum/reagent/drying_agent/expose_obj(obj/O, reac_volume)
if(O.type == /obj/item/clothing/shoes/galoshes)
var/t_loc = get_turf(O)
qdel(O)
@@ -1957,7 +1948,7 @@
can_synth = FALSE
taste_description = "brains"
-/datum/reagent/romerol/reaction_mob(mob/living/carbon/human/H, method=TOUCH, reac_volume)
+/datum/reagent/romerol/expose_mob(mob/living/carbon/human/H, method=TOUCH, reac_volume)
// Silently add the zombie infection organ to be activated upon death
if(!H.getorganslot(ORGAN_SLOT_ZOMBIE))
var/obj/item/organ/zombie_infection/nodamage/ZI = new()
@@ -2021,7 +2012,7 @@
reagent_state = SOLID
var/glitter_type = /obj/effect/decal/cleanable/glitter
-/datum/reagent/glitter/reaction_turf(turf/T, reac_volume)
+/datum/reagent/glitter/expose_turf(turf/T, reac_volume)
if(!istype(T))
return
new glitter_type(T)
@@ -2126,7 +2117,7 @@
taste_description = "inner peace"
can_synth = FALSE
-/datum/reagent/tranquility/reaction_mob(mob/living/L, method=TOUCH, reac_volume, show_message = 1, touch_protection = 0)
+/datum/reagent/tranquility/expose_mob(mob/living/L, method=TOUCH, reac_volume, show_message = 1, touch_protection = 0)
if(method==PATCH || method==INGEST || method==INJECT || (method == VAPOR && prob(min(reac_volume,100)*(1 - touch_protection))))
L.ForceContractDisease(new /datum/disease/transformation/gondola(), FALSE, TRUE)
@@ -2225,11 +2216,11 @@
var/applied_material_flags = MATERIAL_ADD_PREFIX | MATERIAL_COLOR
var/minumum_material_amount = 100
-/datum/reagent/metalgen/reaction_obj(obj/O, volume)
+/datum/reagent/metalgen/expose_obj(obj/O, volume)
metal_morph(O)
return
-/datum/reagent/metalgen/reaction_turf(turf/T, volume)
+/datum/reagent/metalgen/expose_turf(turf/T, volume)
metal_morph(T)
return
@@ -2260,7 +2251,7 @@
metabolization_rate = 0.1 * REAGENTS_METABOLISM //20 times as long, so it's actually viable to use
var/time_multiplier = 1 MINUTES //1 minute per unit of gravitum on objects. Seems overpowered, but the whole thing is very niche
-/datum/reagent/gravitum/reaction_obj(obj/O, volume)
+/datum/reagent/gravitum/expose_obj(obj/O, volume)
O.AddElement(/datum/element/forced_gravity, 0)
addtimer(CALLBACK(O, .proc/_RemoveElement, list(/datum/element/forced_gravity, 0)), volume * time_multiplier)
diff --git a/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm b/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm
index 7564e77d34c..505a716126c 100644
--- a/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm
@@ -6,7 +6,7 @@
color = "#550000"
taste_description = "sweet tasting metal"
-/datum/reagent/thermite/reaction_turf(turf/T, reac_volume)
+/datum/reagent/thermite/expose_turf(turf/T, reac_volume)
if(reac_volume >= 1)
T.AddComponent(/datum/component/thermite, reac_volume)
@@ -49,7 +49,7 @@
..()
return TRUE
-/datum/reagent/clf3/reaction_turf(turf/T, reac_volume)
+/datum/reagent/clf3/expose_turf(turf/T, reac_volume)
if(isplatingturf(T))
var/turf/open/floor/plating/F = T
if(prob(10 + F.burnt + 5*F.broken)) //broken or burnt plating is more susceptible to being destroyed
@@ -69,7 +69,7 @@
if(prob(reac_volume))
W.ScrapeAway()
-/datum/reagent/clf3/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
+/datum/reagent/clf3/expose_mob(mob/living/M, method=TOUCH, reac_volume)
if(istype(M))
if(method != INGEST && method != INJECT)
M.adjust_fire_stacks(min(reac_volume/5, 10))
@@ -158,7 +158,7 @@
taste_description = "burning"
self_consuming = TRUE
-/datum/reagent/phlogiston/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
+/datum/reagent/phlogiston/expose_mob(mob/living/M, method=TOUCH, reac_volume)
M.adjust_fire_stacks(1)
var/burndmg = max(0.3*M.fire_stacks, 0.3)
M.adjustFireLoss(burndmg, 0)
@@ -193,7 +193,7 @@
M.adjust_fire_stacks(1)
..()
-/datum/reagent/napalm/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
+/datum/reagent/napalm/expose_mob(mob/living/M, method=TOUCH, reac_volume)
if(istype(M))
if(method != INGEST && method != INJECT)
M.adjust_fire_stacks(min(reac_volume/4, 20))
@@ -213,7 +213,7 @@
M.adjust_bodytemperature(-15)
..()
-/datum/reagent/cryostylane/reaction_turf(turf/T, reac_volume)
+/datum/reagent/cryostylane/expose_turf(turf/T, reac_volume)
if(reac_volume >= 5)
for(var/mob/living/simple_animal/slime/M in T)
M.adjustToxLoss(rand(15,30))
@@ -287,7 +287,7 @@
color = "#A6FAFF55"
taste_description = "the inside of a fire extinguisher"
-/datum/reagent/firefighting_foam/reaction_turf(turf/open/T, reac_volume)
+/datum/reagent/firefighting_foam/expose_turf(turf/open/T, reac_volume)
if (!istype(T))
return
@@ -307,10 +307,10 @@
G.react(src)
qdel(hotspot)
-/datum/reagent/firefighting_foam/reaction_obj(obj/O, reac_volume)
+/datum/reagent/firefighting_foam/expose_obj(obj/O, reac_volume)
O.extinguish()
-/datum/reagent/firefighting_foam/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
+/datum/reagent/firefighting_foam/expose_mob(mob/living/M, method=TOUCH, reac_volume)
if(method in list(VAPOR, TOUCH))
M.adjust_fire_stacks(-reac_volume)
M.ExtinguishMob()
diff --git a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm
index 518cfc550e5..dc16d2a09ca 100644
--- a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm
@@ -38,7 +38,7 @@
taste_description = "slime"
taste_mult = 0.9
-/datum/reagent/toxin/mutagen/reaction_mob(mob/living/carbon/M, method=TOUCH, reac_volume)
+/datum/reagent/toxin/mutagen/expose_mob(mob/living/carbon/M, method=TOUCH, reac_volume)
if(!..())
return
if(!M.has_dna() || (HAS_TRAIT(M, TRAIT_RADIMMUNE) || HAS_TRAIT(M, TRAIT_BADDNA)))
@@ -88,21 +88,21 @@
A.atmos_spawn_air("plasma=[volume];TEMP=[holder.chem_temp]")
holder.del_reagent(type)
-/datum/reagent/toxin/plasma/reaction_obj(obj/O, reac_volume)
+/datum/reagent/toxin/plasma/expose_obj(obj/O, reac_volume)
if((!O) || (!reac_volume))
return 0
var/temp = holder ? holder.chem_temp : T20C
if(temp >= LIQUID_PLASMA_BP)
O.atmos_spawn_air("plasma=[reac_volume];TEMP=[temp]")
-/datum/reagent/toxin/plasma/reaction_turf(turf/open/T, reac_volume)
+/datum/reagent/toxin/plasma/expose_turf(turf/open/T, reac_volume)
if(!istype(T))
return
var/temp = holder ? holder.chem_temp : T20C
if(temp >= LIQUID_PLASMA_BP)
T.atmos_spawn_air("plasma=[reac_volume];TEMP=[temp]")
-/datum/reagent/toxin/plasma/reaction_mob(mob/living/M, method=TOUCH, reac_volume)//Splashing people with plasma is stronger than fuel!
+/datum/reagent/toxin/plasma/expose_mob(mob/living/M, method=TOUCH, reac_volume)//Splashing people with plasma is stronger than fuel!
if(method == TOUCH || method == VAPOR)
M.adjust_fire_stacks(reac_volume / 5)
return
@@ -191,7 +191,7 @@
L.cure_fakedeath(type)
..()
-/datum/reagent/toxin/zombiepowder/reaction_mob(mob/living/L, method=TOUCH, reac_volume)
+/datum/reagent/toxin/zombiepowder/expose_mob(mob/living/L, method=TOUCH, reac_volume)
L.adjustOxyLoss(0.5*REM, 0)
if(method == INGEST)
var/datum/reagent/toxin/zombiepowder/Z = L.reagents.has_reagent(/datum/reagent/toxin/zombiepowder)
@@ -260,7 +260,7 @@
mytray.adjustToxic(round(chems.get_reagent_amount(type) * 6))
mytray.adjustWeeds(-rand(4,8))
-/datum/reagent/toxin/plantbgone/reaction_obj(obj/O, reac_volume)
+/datum/reagent/toxin/plantbgone/expose_obj(obj/O, reac_volume)
if(istype(O, /obj/structure/alien/weeds))
var/obj/structure/alien/weeds/alien_weeds = O
alien_weeds.take_damage(rand(15,35), BRUTE, 0) // Kills alien weeds pretty fast
@@ -270,7 +270,7 @@
var/obj/structure/spacevine/SV = O
SV.on_chem_effect(src)
-/datum/reagent/toxin/plantbgone/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
+/datum/reagent/toxin/plantbgone/expose_mob(mob/living/M, method=TOUCH, reac_volume)
if(method == VAPOR)
if(iscarbon(M))
var/mob/living/carbon/C = M
@@ -305,7 +305,7 @@
mytray.adjustToxic(round(chems.get_reagent_amount(type) * 1))
mytray.adjustPests(-rand(1,2))
-/datum/reagent/toxin/pestkiller/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
+/datum/reagent/toxin/pestkiller/expose_mob(mob/living/M, method=TOUCH, reac_volume)
..()
if(M.mob_biotypes & MOB_BUG)
var/damage = min(round(0.4*reac_volume, 0.1),10)
@@ -566,7 +566,7 @@
metabolization_rate = 0.4 * REAGENTS_METABOLISM
toxpwr = 0
-/datum/reagent/toxin/itching_powder/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
+/datum/reagent/toxin/itching_powder/expose_mob(mob/living/M, method=TOUCH, reac_volume)
if(method == TOUCH || method == VAPOR)
M.reagents?.add_reagent(/datum/reagent/toxin/itching_powder, reac_volume)
@@ -824,7 +824,7 @@
mytray.adjustToxic(round(chems.get_reagent_amount(type) * 1.5))
mytray.adjustWeeds(-rand(1,2))
-/datum/reagent/toxin/acid/reaction_mob(mob/living/carbon/C, method=TOUCH, reac_volume)
+/datum/reagent/toxin/acid/expose_mob(mob/living/carbon/C, method=TOUCH, reac_volume)
if(!istype(C))
return
reac_volume = round(reac_volume,0.1)
@@ -836,13 +836,13 @@
return
C.acid_act(acidpwr, reac_volume)
-/datum/reagent/toxin/acid/reaction_obj(obj/O, reac_volume)
+/datum/reagent/toxin/acid/expose_obj(obj/O, reac_volume)
if(ismob(O.loc)) //handled in human acid_act()
return
reac_volume = round(reac_volume,0.1)
O.acid_act(acidpwr, reac_volume)
-/datum/reagent/toxin/acid/reaction_turf(turf/T, reac_volume)
+/datum/reagent/toxin/acid/expose_turf(turf/T, reac_volume)
if (!istype(T))
return
reac_volume = round(reac_volume,0.1)
diff --git a/code/modules/reagents/reagent_containers.dm b/code/modules/reagents/reagent_containers.dm
index f4b4b5b99b4..2abbe668335 100644
--- a/code/modules/reagents/reagent_containers.dm
+++ b/code/modules/reagents/reagent_containers.dm
@@ -99,7 +99,7 @@
if(thrownby)
log_combat(thrownby, M, "splashed", R)
- reagents.reaction(target, TOUCH)
+ reagents.expose(target, TOUCH)
else if(bartender_check(target) && thrown)
visible_message("[src] lands onto the [target.name] without spilling a single drop.")
@@ -111,7 +111,7 @@
log_game("[key_name(thrownby)] splashed (thrown) [english_list(reagents.reagent_list)] on [target] in [AREACOORD(target)].")
message_admins("[ADMIN_LOOKUPFLW(thrownby)] splashed (thrown) [english_list(reagents.reagent_list)] on [target] in [ADMIN_VERBOSEJMP(target)].")
visible_message("[src] spills its contents all over [target].")
- reagents.reaction(target, TOUCH)
+ reagents.expose(target, TOUCH)
if(QDELETED(src))
return
diff --git a/code/modules/reagents/reagent_containers/dropper.dm b/code/modules/reagents/reagent_containers/dropper.dm
index ac94621690a..b87abd06603 100644
--- a/code/modules/reagents/reagent_containers/dropper.dm
+++ b/code/modules/reagents/reagent_containers/dropper.dm
@@ -53,7 +53,7 @@
target.visible_message("[user] squirts something into [target]'s eyes!", \
"[user] squirts something into your eyes!")
- reagents.reaction(target, TOUCH, fraction)
+ reagents.expose(target, TOUCH, fraction)
var/mob/M = target
var/R
if(reagents)
diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm
index b7cd730ed54..d04151a6df0 100755
--- a/code/modules/reagents/reagent_containers/glass.dm
+++ b/code/modules/reagents/reagent_containers/glass.dm
@@ -32,7 +32,7 @@
if(isturf(target) && reagents.reagent_list.len && thrownby)
log_combat(thrownby, target, "splashed (thrown) [english_list(reagents.reagent_list)]")
message_admins("[ADMIN_LOOKUPFLW(thrownby)] splashed (thrown) [english_list(reagents.reagent_list)] on [target] at [ADMIN_VERBOSEJMP(target)].")
- reagents.reaction(M, TOUCH)
+ reagents.expose(M, TOUCH)
log_combat(user, M, "splashed", R)
reagents.clear_reagents()
else
@@ -87,7 +87,7 @@
if(user.a_intent == INTENT_HARM)
user.visible_message("[user] splashes the contents of [src] onto [target]!", \
"You splash the contents of [src] onto [target].")
- reagents.reaction(target, TOUCH)
+ reagents.expose(target, TOUCH)
reagents.clear_reagents()
/obj/item/reagent_containers/glass/attackby(obj/item/I, mob/user, params)
@@ -266,7 +266,7 @@
if (slot == ITEM_SLOT_HEAD)
if(reagents.total_volume)
to_chat(user, "[src]'s contents spill all over you!")
- reagents.reaction(user, TOUCH)
+ reagents.expose(user, TOUCH)
reagents.clear_reagents()
reagents.flags = NONE
diff --git a/code/modules/reagents/reagent_containers/hypospray.dm b/code/modules/reagents/reagent_containers/hypospray.dm
index 863540c1647..f011e64e675 100644
--- a/code/modules/reagents/reagent_containers/hypospray.dm
+++ b/code/modules/reagents/reagent_containers/hypospray.dm
@@ -40,7 +40,7 @@
to_chat(M, "You feel a tiny prick!")
to_chat(user, "You inject [M] with [src].")
var/fraction = min(amount_per_transfer_from_this/reagents.total_volume, 1)
- reagents.reaction(M, INJECT, fraction)
+ reagents.expose(M, INJECT, fraction)
if(M.reagents)
var/trans = 0
diff --git a/code/modules/reagents/reagent_containers/spray.dm b/code/modules/reagents/reagent_containers/spray.dm
index 95ce4418463..d156d119488 100644
--- a/code/modules/reagents/reagent_containers/spray.dm
+++ b/code/modules/reagents/reagent_containers/spray.dm
@@ -93,19 +93,19 @@
if(!M.can_inject())
continue
if((M.mobility_flags & MOBILITY_STAND) || !range_left)
- D.reagents.reaction(M, VAPOR)
+ D.reagents.expose(M, VAPOR)
puff_reagent_left -= 1
var/contained = D.reagents.log_list() // looks like more copypasta but now the reagents are in a different place fuck you old coder
log_combat(user, M, "sprayed with", src, addition="which had [contained]")
else if(!range_left)
- D.reagents.reaction(T, VAPOR)
+ D.reagents.expose(T, VAPOR)
else
- D.reagents.reaction(T, VAPOR)
+ D.reagents.expose(T, VAPOR)
if(ismob(T))
puff_reagent_left -= 1
if(puff_reagent_left > 0 && (!stream_mode || !range_left))
- D.reagents.reaction(get_turf(D), VAPOR)
+ D.reagents.expose(get_turf(D), VAPOR)
puff_reagent_left -= 1
if(puff_reagent_left <= 0) // we used all the puff so we delete it.
@@ -140,7 +140,7 @@
return
if(isturf(usr.loc) && src.loc == usr)
to_chat(usr, "You empty \the [src] onto the floor.")
- reagents.reaction(usr.loc)
+ reagents.expose(usr.loc)
src.reagents.clear_reagents()
/obj/item/reagent_containers/spray/on_reagent_change(changetype)
diff --git a/code/modules/research/xenobiology/crossbreeding/_status_effects.dm b/code/modules/research/xenobiology/crossbreeding/_status_effects.dm
index 540f6a9c1aa..ac3a051031b 100644
--- a/code/modules/research/xenobiology/crossbreeding/_status_effects.dm
+++ b/code/modules/research/xenobiology/crossbreeding/_status_effects.dm
@@ -599,7 +599,7 @@ datum/status_effect/stabilized/blue/on_remove()
to_chat(owner, "[linked_extract] coats you in a watery goo, extinguishing the flames.")
var/obj/O = owner.get_active_held_item()
if(O)
- O.extinguish() //All shamelessly copied from water's reaction_obj, since I didn't seem to be able to get it here for some reason.
+ O.extinguish() //All shamelessly copied from water's expose_obj, since I didn't seem to be able to get it here for some reason.
O.acid_level = 0
// Monkey cube
if(istype(O, /obj/item/reagent_containers/food/snacks/monkeycube))
diff --git a/code/modules/ruins/lavalandruin_code/elephantgraveyard.dm b/code/modules/ruins/lavalandruin_code/elephantgraveyard.dm
index 120854a33a6..32bf9fd7fe1 100644
--- a/code/modules/ruins/lavalandruin_code/elephantgraveyard.dm
+++ b/code/modules/ruins/lavalandruin_code/elephantgraveyard.dm
@@ -75,7 +75,7 @@
/obj/structure/sink/oil_well/attack_hand(mob/M)
flick("puddle-oil-splash",src)
- reagents.reaction(M, TOUCH, 20) //Covers target in 20u of oil.
+ reagents.expose(M, TOUCH, 20) //Covers target in 20u of oil.
to_chat(M, "You touch the pool of oil, only to get oil all over yourself. It would be wise to wash this off with water.")
/obj/structure/sink/oil_well/attackby(obj/item/O, mob/user, params)
diff --git a/code/modules/surgery/dental_implant.dm b/code/modules/surgery/dental_implant.dm
index 478877ed357..64e6d9bb935 100644
--- a/code/modules/surgery/dental_implant.dm
+++ b/code/modules/surgery/dental_implant.dm
@@ -39,7 +39,7 @@
to_chat(owner, "You grit your teeth and burst the implanted [target.name]!")
log_combat(owner, null, "swallowed an implanted pill", target)
if(target.reagents.total_volume)
- target.reagents.reaction(owner, INGEST)
+ target.reagents.expose(owner, INGEST)
target.reagents.trans_to(owner, target.reagents.total_volume, transfered_by = owner)
qdel(target)
return TRUE