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