diff --git a/code/_globalvars/lists/reagents_lists.dm b/code/_globalvars/lists/reagents_lists.dm
index eb4c2c84ff0..6ed324fe5b0 100644
--- a/code/_globalvars/lists/reagents_lists.dm
+++ b/code/_globalvars/lists/reagents_lists.dm
@@ -52,20 +52,18 @@ GLOBAL_LIST_INIT(drinks, list("beer2","hot_coco","orangejuice","tomatojuice","li
//Liver Toxins list
GLOBAL_LIST_INIT(liver_toxins, list("toxin", "plasma", "sacid", "facid", "cyanide","amanitin", "carpotoxin"))
-//Random chem blacklist
+//General chem blacklist. This is for the really good stuff that we just want to restrict from things like bees and smoke
GLOBAL_LIST_INIT(blocked_chems, list("polonium", "initropidril", "concentrated_initro",
- "sodium_thiopental", "ketamine", "coniine",
- "adminordrazine", "nanites", "hellwater",
+ "sodium_thiopental", "ketamine",
+ "adminordrazine", "nanites", "hell_water",
"mutationtoxin", "amutationtoxin", "venom",
"spore", "stimulants", "stimulative_agent",
"syndicate_nanites", "ripping_tendrils", "boiling_oil",
"envenomed_filaments", "lexorin_jelly", "kinetic",
- "cryogenic_liquid", "dark_matter", "b_sorium",
- "reagent", "life","dragonsbreath", "nanocalcium"))
-
-GLOBAL_LIST_INIT(safe_chem_list, list("antihol", "charcoal", "epinephrine", "insulin", "teporone","silver_sulfadiazine", "salbutamol",
- "omnizine", "stimulants", "synaptizine", "potass_iodide", "oculine", "mannitol", "styptic_powder",
- "spaceacillin", "salglu_solution", "sal_acid", "cryoxadone", "blood", "synthflesh", "hydrocodone",
- "mitocholide", "rezadone", "menthol"))
-
-GLOBAL_LIST_INIT(safe_chem_applicator_list, list("silver_sulfadiazine", "styptic_powder", "synthflesh"))
+ "cryogenic_liquid", "liquid_dark_matter", "b_sorium",
+ "reagent", "dragonsbreath", "nanocalcium",
+ "xenomicrobes", "nanomachines", "gibbis", "prions",
+ "spidereggs", "heartworms", "bacon_grease",
+ "fungalspores", "jagged_crystals", "salmonella",
+ "lavaland_extract", "stable_mutagen", "beer2",
+ "curare", "gluttonytoxin", "smoke_powder"))
diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm
index 0fde645c7d9..863eccee2dd 100644
--- a/code/game/machinery/Sleeper.dm
+++ b/code/game/machinery/Sleeper.dm
@@ -120,9 +120,14 @@
if(beaker.reagents.total_volume < beaker.reagents.maximum_volume)
occupant.transfer_blood_to(beaker, 1)
- for(var/datum/reagent/x in occupant.reagents.reagent_list)
- occupant.reagents.trans_to(beaker, 3)
+ for(var/datum/reagent/R in occupant.reagents.reagent_list)
occupant.transfer_blood_to(beaker, 1)
+ var/datum/reagent/G
+ if(G.id in GLOB.blocked_chems)
+ occupant.reagents.remove_reagent(G.id, 3)
+ beaker.reagents.add_reagent("saturated_charcoal", 3)
+ continue
+ occupant.reagents.trans_to(beaker, 3)
for(var/A in occupant.reagents.addiction_list)
var/datum/reagent/R = A
diff --git a/code/game/mecha/equipment/tools/medical_tools.dm b/code/game/mecha/equipment/tools/medical_tools.dm
index 8fccf2825cb..faa26088e4c 100644
--- a/code/game/mecha/equipment/tools/medical_tools.dm
+++ b/code/game/mecha/equipment/tools/medical_tools.dm
@@ -469,8 +469,11 @@
occupant_message("No reagent info gained from [A].")
return FALSE
occupant_message("Analyzing reagents...")
- for(var/datum/reagent/R in A.reagents.reagent_list)
- if(R.can_synth && add_known_reagent(R.id, R.name))
+ for(var/datum/reagent/R as anything in A.reagents.reagent_list)
+ if(initial(R.id) in GLOB.blocked_chems)
+ occupant_message("Reagent unable to be analyzed, purging from analyzer.")
+ return FALSE
+ if(add_known_reagent(R.id, R.name))
occupant_message("Reagent analyzed, identified as [R.name] and added to database.")
send_byjax(chassis.occupant,"msyringegun.browser","reagents_form",get_reagents_form())
occupant_message("Analysis complete.")
diff --git a/code/modules/hydroponics/beekeeping/beebox.dm b/code/modules/hydroponics/beekeeping/beebox.dm
index af0cb2eb0ff..f1f91d5a8e6 100644
--- a/code/modules/hydroponics/beekeeping/beebox.dm
+++ b/code/modules/hydroponics/beekeeping/beebox.dm
@@ -93,13 +93,12 @@
/obj/structure/beebox/process()
if(queen_bee)
- if(bee_resources >= BEE_RESOURCE_HONEYCOMB_COST)
- if(honeycombs.len < get_max_honeycomb())
- bee_resources = max(bee_resources-BEE_RESOURCE_HONEYCOMB_COST, 0)
- var/obj/item/reagent_containers/food/snacks/honeycomb/HC = new(src)
- if(queen_bee.beegent)
- HC.set_reagent(queen_bee.beegent.id)
- honeycombs += HC
+ if(bee_resources >= BEE_RESOURCE_HONEYCOMB_COST && honeycombs.len < get_max_honeycomb())
+ bee_resources = max(bee_resources-BEE_RESOURCE_HONEYCOMB_COST, 0)
+ var/obj/item/reagent_containers/food/snacks/honeycomb/HC = new(src)
+ if(queen_bee.beegent)
+ HC.set_reagent(queen_bee.beegent.id)
+ honeycombs += HC
if(bees.len < get_max_bees())
var/freebee = FALSE //a freebee, geddit?, hahaha HAHAHAHA
@@ -166,16 +165,12 @@
return
var/obj/item/queen_bee/qb = I
- if(!qb.queen.beegent || (qb.queen.beegent && qb.queen.beegent.can_synth))
- if(!user.unEquip(qb))
- return
- qb.queen.forceMove(src)
- bees += qb.queen
- queen_bee = qb.queen
- qb.queen = null
- else
- visible_message("[qb] refuses to settle down. Maybe it's something to do with its reagent?")
+ if(!user.unEquip(qb))
return
+ qb.queen.forceMove(src)
+ bees += qb.queen
+ queen_bee = qb.queen
+ qb.queen = null
if(queen_bee)
visible_message("[user] sets [qb] down inside the apiary, making it [qb.p_their()] new home.")
diff --git a/code/modules/mining/lavaland/loot/tendril_loot.dm b/code/modules/mining/lavaland/loot/tendril_loot.dm
index 63e671cd70d..3a57d6eb065 100644
--- a/code/modules/mining/lavaland/loot/tendril_loot.dm
+++ b/code/modules/mining/lavaland/loot/tendril_loot.dm
@@ -93,45 +93,7 @@
new /obj/effect/decal/cleanable/ash(get_turf(user))
qdel(src)
-//Potion of Flight: as we do not have the "Angel" species this currently does not work.
-
-/obj/item/reagent_containers/glass/bottle/potion
- icon = 'icons/obj/lavaland/artefacts.dmi'
- icon_state = "potionflask"
-
-/obj/item/reagent_containers/glass/bottle/potion/flight
- name = "strange elixir"
- desc = "A flask with an almost-holy aura emitting from it. The label on the bottle says: 'erqo'hyy tvi'rf lbh jv'atf'."
- list_reagents = list("flightpotion" = 5)
-
-/obj/item/reagent_containers/glass/bottle/potion/update_icon_state()
- if(reagents.total_volume)
- icon_state = "potionflask"
- else
- icon_state = "potionflask_empty"
-
-/datum/reagent/flightpotion
- name = "Flight Potion"
- id = "flightpotion"
- description = "Strange mutagenic compound of unknown origins."
- reagent_state = LIQUID
- color = "#FFEBEB"
-
-/datum/reagent/flightpotion/reaction_mob(mob/living/M, method = REAGENT_TOUCH, reac_volume, show_message = 1)
- to_chat(M, "This item is currently non-functional.")
- /*if(ishuman(M) && M.stat != DEAD)
- var/mob/living/carbon/human/H = M
- if(!ishumanbasic(H) || reac_volume < 5) // implying xenohumans are holy
- if(method == INGEST && show_message)
- to_chat(H, "You feel nothing but a terrible aftertaste.")
- return ..()
-
- to_chat(H, "A terrible pain travels down your back as wings burst out!")
- H.set_species(/datum/species/angel)
- playsound(H.loc, 'sound/items/poster_ripped.ogg', 50, 1, -1)
- H.adjustBruteLoss(20)
- H.emote("scream")
- ..()*/
+//Jacob's ladder
/obj/item/jacobs_ladder
name = "jacob's ladder"
diff --git a/code/modules/mob/living/simple_animal/hostile/bees.dm b/code/modules/mob/living/simple_animal/hostile/bees.dm
index 79ee843835d..8df9f19377a 100644
--- a/code/modules/mob/living/simple_animal/hostile/bees.dm
+++ b/code/modules/mob/living/simple_animal/hostile/bees.dm
@@ -290,30 +290,31 @@
/obj/item/queen_bee/attackby(obj/item/I, mob/user, params)
- if(istype(I, /obj/item/reagent_containers/syringe))
- var/obj/item/reagent_containers/syringe/S = I
- if(S.reagents.has_reagent("royal_bee_jelly")) //checked twice, because I really don't want royal bee jelly to be duped
- if(S.reagents.has_reagent("royal_bee_jelly", 5))
- S.reagents.remove_reagent("royal_bee_jelly", 5)
- var/obj/item/queen_bee/qb = new(user.drop_location())
- qb.queen = new(qb)
- if(queen && queen.beegent)
- qb.queen.assign_reagent(queen.beegent) //Bees use the global singleton instances of reagents, so we don't need to worry about one bee being deleted and her copies losing their reagents.
- user.put_in_active_hand(qb)
- user.visible_message("[user] injects [src] with royal bee jelly, causing it to split into two bees, MORE BEES!","You inject [src] with royal bee jelly, causing it to split into two bees, MORE BEES!")
- else
- to_chat(user, "You don't have enough royal bee jelly to split a bee in two!")
- else
- var/datum/reagent/R = GLOB.chemical_reagents_list[S.reagents.get_master_reagent_id()]
- if(R && S.reagents.has_reagent(R.id, 5))
- S.reagents.remove_reagent(R.id, 5)
- queen.assign_reagent(R)
- user.visible_message("[user] injects [src]'s genome with [R.name], mutating its DNA!", "You inject [src]'s genome with [R.name], mutating its DNA!")
- name = queen.name
- else
- to_chat(user, "You don't have enough units of that chemical to modify the bee's DNA!")
- else
+ if(!istype(I, /obj/item/reagent_containers/syringe))
return ..()
+ var/obj/item/reagent_containers/syringe/S = I
+ if(S.reagents.has_reagent("royal_bee_jelly", 5))
+ S.reagents.remove_reagent("royal_bee_jelly", 5)
+ var/obj/item/queen_bee/qb = new(user.drop_location())
+ qb.queen = new(qb)
+ if(queen?.beegent)
+ qb.queen.assign_reagent(queen.beegent) //Bees use the global singleton instances of reagents, so we don't need to worry about one bee being deleted and her copies losing their reagents.
+ user.put_in_active_hand(qb)
+ user.visible_message("[user] injects [src] with royal bee jelly, causing it to split into two bees, MORE BEES!", "You inject [src] with royal bee jelly, causing it to split into two bees, MORE BEES!")
+ else
+ to_chat(user, "You don't have enough royal bee jelly to split a bee in two!")
+ return
+ var/datum/reagent/R = GLOB.chemical_reagents_list[S.reagents.get_master_reagent_id()]
+ if(R && S.reagents.has_reagent(R.id, 5))
+ S.reagents.remove_reagent(R.id, 5) // Whether or not the chemical is blocked, we want it gone just because you tried to
+ if(R.id in GLOB.blocked_chems)
+ to_chat(user, "The [src]'s immune system rejects [R.name]!")
+ return
+ queen.assign_reagent(R)
+ user.visible_message("[user] injects [src]'s genome with [R.name], mutating its DNA!", "You inject [src]'s genome with [R.name], mutating its DNA!")
+ name = queen.name
+ else
+ to_chat(user, "You don't have enough units of that chemical to modify the bee's DNA!")
/obj/item/queen_bee/bought/Initialize(mapload)
. = ..()
diff --git a/code/modules/reagents/chemistry/machinery/chem_master.dm b/code/modules/reagents/chemistry/machinery/chem_master.dm
index b74f2f78227..561c2c54a67 100644
--- a/code/modules/reagents/chemistry/machinery/chem_master.dm
+++ b/code/modules/reagents/chemistry/machinery/chem_master.dm
@@ -28,6 +28,10 @@
var/printing = FALSE
var/static/list/pill_bottle_wrappers
var/static/list/bottle_styles
+ var/list/safe_chem_list = list("antihol", "charcoal", "epinephrine", "insulin", "teporone", "silver_sulfadiazine", "salbutamol",
+ "omnizine", "stimulants", "synaptizine", "potass_iodide", "oculine", "mannitol", "styptic_powder",
+ "spaceacillin", "salglu_solution", "sal_acid", "cryoxadone", "blood", "synthflesh", "hydrocodone",
+ "mitocholide", "rezadone", "menthol")
/obj/machinery/chem_master/Initialize(mapload)
. = ..()
@@ -546,7 +550,7 @@
/obj/machinery/chem_master/proc/chemical_safety_check(datum/reagents/R)
var/all_safe = TRUE
for(var/datum/reagent/A in R.reagent_list)
- if(!GLOB.safe_chem_list.Find(A.id))
+ if(!safe_chem_list.Find(A.id))
all_safe = FALSE
return all_safe
diff --git a/code/modules/reagents/chemistry/reagents/admin_reagents.dm b/code/modules/reagents/chemistry/reagents/admin_reagents.dm
index 18a25e5ae8e..32dc34f79de 100644
--- a/code/modules/reagents/chemistry/reagents/admin_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/admin_reagents.dm
@@ -5,7 +5,6 @@
reagent_state = LIQUID
color = "#C8A5DC" // rgb: 200, 165, 220
process_flags = ORGANIC | SYNTHETIC //Adminbuse knows no bounds!
- can_synth = FALSE
taste_description = "admin abuse"
/datum/reagent/medicine/adminordrazine/on_mob_life(mob/living/carbon/M)
diff --git a/code/modules/reagents/chemistry/reagents/alcohol.dm b/code/modules/reagents/chemistry/reagents/alcohol.dm
index 576ef53a691..7314ed61bdb 100644
--- a/code/modules/reagents/chemistry/reagents/alcohol.dm
+++ b/code/modules/reagents/chemistry/reagents/alcohol.dm
@@ -1162,7 +1162,6 @@
reagent_state = LIQUID
color = "#DC0000"
alcohol_perc = 1
- can_synth = FALSE
taste_description = "LIQUID FUCKING DEATH OH GOD WHAT THE FUCK"
/datum/reagent/consumable/ethanol/dragons_breath/reaction_mob(mob/living/M, method=REAGENT_TOUCH, volume)
@@ -1311,7 +1310,6 @@
color = "#FFFFFF"
alcohol_perc = 0.35
taste_description = "bad coding"
- can_synth = FALSE
var/list/names = list("null fruit" = 1) //Names of the fruits used. Associative list where name is key, value is the percentage of that fruit.
var/list/tastes = list("bad coding" = 1) //List of tastes. See above.
diff --git a/code/modules/reagents/chemistry/reagents/blob_reagents.dm b/code/modules/reagents/chemistry/reagents/blob_reagents.dm
index 540026fd3f8..4fc3ce1c13e 100644
--- a/code/modules/reagents/chemistry/reagents/blob_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/blob_reagents.dm
@@ -5,7 +5,6 @@
var/complementary_color = COLOR_BLACK
var/message = "The blob strikes you" //message sent to any mob hit by the blob
var/message_living = null //extension to first mob sent to only living mobs i.e. silicons have no skin to be burnt
- can_synth = FALSE
/datum/reagent/blob/reaction_mob(mob/living/M, method=REAGENT_TOUCH, volume, show_message, touch_protection)
return round(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/reagents/chemistry/reagents/disease.dm b/code/modules/reagents/chemistry/reagents/disease.dm
index 7c3fe25e446..c5941b34245 100644
--- a/code/modules/reagents/chemistry/reagents/disease.dm
+++ b/code/modules/reagents/chemistry/reagents/disease.dm
@@ -4,7 +4,6 @@
description = "A fine dust containing spider eggs. Oh gosh."
reagent_state = SOLID
color = "#FFFFFF"
- can_synth = FALSE
taste_mult = 0
/datum/reagent/spider_eggs/on_mob_life(mob/living/M)
@@ -19,7 +18,6 @@
id = "nanomachines"
description = "Microscopic construction robots."
color = "#535E66" // rgb: 83, 94, 102
- can_synth = FALSE
taste_mult = 0
/datum/reagent/nanomachines/on_mob_life(mob/living/carbon/M)
@@ -32,7 +30,6 @@
id = "xenomicrobes"
description = "Microbes with an entirely alien cellular structure."
color = "#535E66" // rgb: 83, 94, 102
- can_synth = FALSE
taste_mult = 0
/datum/reagent/xenomicrobes/on_mob_life(mob/living/carbon/M)
@@ -45,7 +42,6 @@
id = "fungalspores"
description = "Active fungal spores."
color = "#92D17D" // rgb: 146, 209, 125
- can_synth = FALSE
taste_mult = 0
/datum/reagent/fungalspores/on_mob_life(mob/living/carbon/M)
@@ -59,7 +55,6 @@
description = "Rapid chemical decomposition has warped these crystals into twisted spikes."
reagent_state = SOLID
color = "#FA0000" // rgb: 250, 0, 0
- can_synth = FALSE
taste_mult = 0
/datum/reagent/jagged_crystals/on_mob_life(mob/living/carbon/M)
@@ -72,7 +67,6 @@
description = "A nasty bacteria found in spoiled food."
reagent_state = LIQUID
color = "#1E4600"
- can_synth = FALSE
taste_mult = 0
/datum/reagent/salmonella/on_mob_life(mob/living/carbon/M)
@@ -85,7 +79,6 @@
description = "Liquid gibbis."
reagent_state = LIQUID
color = "#FF0000"
- can_synth = FALSE
taste_mult = 0
/datum/reagent/gibbis/on_mob_life(mob/living/carbon/M)
@@ -99,7 +92,6 @@
description = "A disease-causing agent that is neither bacterial nor fungal nor viral and contains no genetic material."
reagent_state = LIQUID
color = "#FFFFFF"
- can_synth = FALSE
taste_mult = 0
/datum/reagent/prions/on_mob_life(mob/living/carbon/M)
@@ -113,7 +105,6 @@
description = "Hook me up to an IV of that sweet, sweet stuff!"
reagent_state = LIQUID
color = "#F7E6B1"
- can_synth = FALSE
taste_description = "bacon"
/datum/reagent/bacon_grease/on_mob_life(mob/living/carbon/M)
@@ -127,7 +118,6 @@
description = "Aww, gross! These things can't be good for your heart. They're gunna eat it!"
reagent_state = SOLID
color = "#925D6C"
- can_synth = FALSE
taste_mult = 0
/datum/reagent/heartworms/on_mob_life(mob/living/carbon/M)
@@ -146,7 +136,6 @@
description = "A guaranteed heart-stopper!"
reagent_state = LIQUID
color = "#AB1CCF"
- can_synth = FALSE
taste_mult = 0
/datum/reagent/concentrated_initro/on_mob_life(mob/living/M)
diff --git a/code/modules/reagents/chemistry/reagents/medicine.dm b/code/modules/reagents/chemistry/reagents/medicine.dm
index 29ca4f9f7be..9e12b907659 100644
--- a/code/modules/reagents/chemistry/reagents/medicine.dm
+++ b/code/modules/reagents/chemistry/reagents/medicine.dm
@@ -962,7 +962,6 @@
description = "An illegal compound that dramatically enhances the body's performance and healing capabilities."
color = "#C8A5DC"
harmless = FALSE
- can_synth = FALSE
taste_description = "an unstoppable force"
/datum/reagent/medicine/stimulants/on_mob_life(mob/living/M)
@@ -1004,7 +1003,6 @@
metabolization_rate = 0.5 * REAGENTS_METABOLISM
overdose_threshold = 60
harmless = FALSE
- can_synth = FALSE
/datum/reagent/medicine/stimulative_agent/on_mob_add(mob/living/L)
ADD_TRAIT(L, TRAIT_GOTTAGOFAST, id)
@@ -1166,7 +1164,6 @@
description = "Miniature medical robots that swiftly restore bodily damage. May begin to attack their host's cells in high amounts."
reagent_state = SOLID
color = "#555555"
- can_synth = FALSE
taste_description = "bodily perfection"
/datum/reagent/medicine/syndicate_nanites/on_mob_life(mob/living/M)
@@ -1366,7 +1363,6 @@
description = "Highly advanced nanites equipped with an unknown payload designed to repair a body. Nanomachines son."
color = "#9b3401"
metabolization_rate = 0.5
- can_synth = FALSE
harmless = FALSE
taste_description = "2 minutes of suffering"
var/list/stimulant_list = list("methamphetamine", "crank", "bath_salts", "stimulative_agent", "stimulants")
@@ -1436,7 +1432,6 @@
color = "#C8A5DC" // rgb: 200, 165, 220
overdose_threshold = 3 //To prevent people stacking massive amounts of a very strong healing reagent
harmless = FALSE
- can_synth = FALSE
/datum/reagent/medicine/lavaland_extract/on_mob_life(mob/living/carbon/M)
var/update_flags = STATUS_UPDATE_NONE
diff --git a/code/modules/reagents/chemistry/reagents/toxins.dm b/code/modules/reagents/chemistry/reagents/toxins.dm
index 16f1df0c91f..29b69f03bb1 100644
--- a/code/modules/reagents/chemistry/reagents/toxins.dm
+++ b/code/modules/reagents/chemistry/reagents/toxins.dm
@@ -81,7 +81,6 @@
description = "A corruptive toxin produced by slimes."
reagent_state = LIQUID
color = "#13BC5E" // rgb: 19, 188, 94
- can_synth = FALSE
taste_description = "shadows"
/datum/reagent/slimetoxin/on_mob_life(mob/living/M)
@@ -101,7 +100,6 @@
description = "An advanced corruptive toxin produced by slimes."
reagent_state = LIQUID
color = "#13BC5E" // rgb: 19, 188, 94
- can_synth = FALSE
taste_description = "slime"
/datum/reagent/aslimetoxin/reaction_mob(mob/living/M, method=REAGENT_TOUCH, volume)
@@ -209,7 +207,6 @@
reagent_state = LIQUID
color = "#7DFF00"
taste_description = "slime"
- can_synth = FALSE
/datum/reagent/stable_mutagen/on_new(data)
..()
@@ -459,7 +456,6 @@
drink_icon ="beerglass"
drink_name = "Beer glass"
drink_desc = "A freezing pint of beer"
- can_synth = FALSE
taste_description = "beer"
taste_description = "piss water"
@@ -491,7 +487,6 @@
color = "#CF3600"
metabolization_rate = 0.1
penetrates_skin = TRUE
- can_synth = FALSE
taste_mult = 0
/datum/reagent/polonium/on_mob_life(mob/living/M)
@@ -615,7 +610,6 @@
color = "#CF3600"
metabolization_rate = 0.2
overdose_threshold = 40
- can_synth = FALSE
taste_mult = 0
/datum/reagent/venom/on_mob_life(mob/living/M)
@@ -741,7 +735,6 @@
description = "A highly potent cardiac poison - can kill within minutes."
reagent_state = LIQUID
color = "#7F10C0"
- can_synth = FALSE
taste_mult = 0
/datum/reagent/initropidril/on_mob_life(mob/living/M)
@@ -806,7 +799,6 @@
reagent_state = LIQUID
color = "#5F8BE1"
metabolization_rate = 0.7
- can_synth = FALSE
taste_mult = 0
/datum/reagent/sodium_thiopental/on_mob_life(mob/living/M)
@@ -836,7 +828,6 @@
color = "#646EA0"
metabolization_rate = 0.8
penetrates_skin = TRUE
- can_synth = FALSE
taste_mult = 0
/datum/reagent/ketamine/on_mob_life(mob/living/M)
@@ -930,7 +921,6 @@
reagent_state = LIQUID
color = "#C2D8CD"
metabolization_rate = 0.05
- can_synth = FALSE
taste_mult = 0
/datum/reagent/coniine/on_mob_life(mob/living/M)
@@ -946,7 +936,6 @@
reagent_state = LIQUID
color = "#191919"
metabolization_rate = 0.1
- can_synth = FALSE
penetrates_skin = TRUE
taste_mult = 0
@@ -1301,7 +1290,6 @@
description = "An advanced corruptive toxin produced by something terrible."
reagent_state = LIQUID
color = "#5EFF3B" //RGB: 94, 255, 59
- can_synth = FALSE
taste_description = "decay"
/datum/reagent/gluttonytoxin/reaction_mob(mob/living/L, method=REAGENT_TOUCH, reac_volume)
diff --git a/code/modules/reagents/chemistry/reagents/water.dm b/code/modules/reagents/chemistry/reagents/water.dm
index 6d909c8c320..1298eafddad 100644
--- a/code/modules/reagents/chemistry/reagents/water.dm
+++ b/code/modules/reagents/chemistry/reagents/water.dm
@@ -396,7 +396,6 @@
description = "YOUR FLESH! IT BURNS!"
process_flags = ORGANIC | SYNTHETIC //Admin-bus has no brakes! KILL THEM ALL.
metabolization_rate = 1
- can_synth = FALSE
taste_description = "burning"
/datum/reagent/hellwater/on_mob_life(mob/living/M)
@@ -446,3 +445,11 @@
var/t_loc = get_turf(O)
qdel(O)
new /obj/item/clothing/shoes/galoshes/dry(t_loc)
+
+/datum/reagent/saturated_activated_charcoal
+ name = "Saturated activated charcoal"
+ id = "saturated_charcoal"
+ description = "Charcoal that is completely saturated with various toxins. Useless."
+ reagent_state = LIQUID
+ color = "#29262b"
+ taste_description = "burnt dirt"
diff --git a/code/modules/reagents/chemistry/reagents_datum.dm b/code/modules/reagents/chemistry/reagents_datum.dm
index 001232a37e1..6f2f09a42e5 100644
--- a/code/modules/reagents/chemistry/reagents_datum.dm
+++ b/code/modules/reagents/chemistry/reagents_datum.dm
@@ -19,7 +19,6 @@
//By default, all reagents will ONLY affect organics, not synthetics. Re-define in the reagent's definition if the reagent is meant to affect synths
var/process_flags = ORGANIC
var/harmless = FALSE //flag used for attack logs
- var/can_synth = TRUE //whether or not a mech syringe gun and synthesize this reagent
var/overdose_threshold = 0
var/addiction_chance = 0
var/addiction_chance_additional = 100 // If we want to lower the chance of addiction even more, set this
diff --git a/code/modules/reagents/chemistry/reagents_holder.dm b/code/modules/reagents/chemistry/reagents_holder.dm
index 9e6ad2e544c..07f8d48f7bb 100644
--- a/code/modules/reagents/chemistry/reagents_holder.dm
+++ b/code/modules/reagents/chemistry/reagents_holder.dm
@@ -941,12 +941,14 @@
reagents.my_atom = src
/proc/get_random_reagent_id() // Returns a random reagent ID minus blacklisted reagents
- var/static/list/random_reagents = list()
+ var/static/list/random_reagents
if(!length(random_reagents))
- for(var/thing in subtypesof(/datum/reagent))
- var/datum/reagent/R = thing
- if(initial(R.can_synth))
- random_reagents += initial(R.id)
+ random_reagents = list()
+ for(var/datum/reagent/thing as anything in subtypesof(/datum/reagent))
+ var/R = initial(thing.id)
+ if(R in GLOB.blocked_chems)
+ continue
+ random_reagents += R
var/picked_reagent = pick(random_reagents)
return picked_reagent
diff --git a/code/modules/reagents/chemistry/recipes/pyrotechnics.dm b/code/modules/reagents/chemistry/recipes/pyrotechnics.dm
index 00b1f7ac9ae..da5947ebb19 100644
--- a/code/modules/reagents/chemistry/recipes/pyrotechnics.dm
+++ b/code/modules/reagents/chemistry/recipes/pyrotechnics.dm
@@ -44,7 +44,7 @@
var/datum/reagent/R = X
if(R.id in required_reagents)
continue
- if(!R.can_synth)
+ if(R in GLOB.blocked_chems)
continue
beeagents += R
var/bee_amount = round(created_volume * 0.2)
@@ -259,7 +259,7 @@
required_reagents = list("potassium" = 1, "sugar" = 1, "phosphorus" = 1)
result_amount = 1
mix_message = "The mixture quickly turns into a pall of smoke!"
- var/forbidden_reagents = list("sugar", "phosphorus", "potassium", "stimulants") //Do not transfer this stuff through smoke.
+ var/forbidden_reagents = list("sugar", "phosphorus", "potassium", "stimulants", "smoke_powder") //Do not transfer this stuff through smoke.
/datum/chemical_reaction/smoke/on_reaction(datum/reagents/holder, created_volume)
for(var/f_reagent in forbidden_reagents)
@@ -284,7 +284,6 @@
required_reagents = list("smoke_powder" = 1)
min_temp = T0C + 100
result_amount = 1
- forbidden_reagents = list("stimulants")
mix_sound = null
/datum/chemical_reaction/sonic_powder
diff --git a/code/modules/reagents/reagent_containers/applicator.dm b/code/modules/reagents/reagent_containers/applicator.dm
index 83ecbc4a76e..553d3861287 100644
--- a/code/modules/reagents/reagent_containers/applicator.dm
+++ b/code/modules/reagents/reagent_containers/applicator.dm
@@ -15,6 +15,7 @@
var/applied_amount = 8 // How much it applies
var/applying = FALSE // So it can't be spammed.
var/measured_health = 0 // Used for measuring health; we don't want this to stop applying once the person's health isn't changing.
+ var/static/list/safe_chem_applicator_list = list("silver_sulfadiazine", "styptic_powder", "synthflesh")
/obj/item/reagent_containers/applicator/emag_act(mob/user)
if(!emagged)
@@ -29,7 +30,7 @@
if(!emagged)
var/found_forbidden_reagent = FALSE
for(var/datum/reagent/R in reagents.reagent_list)
- if(!GLOB.safe_chem_applicator_list.Find(R.id))
+ if(!safe_chem_applicator_list.Find(R.id))
reagents.del_reagent(R.id)
found_forbidden_reagent = TRUE
if(found_forbidden_reagent)
diff --git a/code/modules/reagents/reagent_containers/hypospray.dm b/code/modules/reagents/reagent_containers/hypospray.dm
index 17b119a69d3..3e1bf44c541 100644
--- a/code/modules/reagents/reagent_containers/hypospray.dm
+++ b/code/modules/reagents/reagent_containers/hypospray.dm
@@ -17,6 +17,10 @@
slot_flags = SLOT_BELT
var/ignore_flags = FALSE
var/safety_hypo = FALSE
+ var/static/list/safe_chem_list = list("antihol", "charcoal", "epinephrine", "insulin", "teporone", "silver_sulfadiazine", "salbutamol",
+ "omnizine", "stimulants", "synaptizine", "potass_iodide", "oculine", "mannitol", "styptic_powder",
+ "spaceacillin", "salglu_solution", "sal_acid", "cryoxadone", "blood", "synthflesh", "hydrocodone",
+ "mitocholide", "rezadone", "menthol")
/obj/item/reagent_containers/hypospray/proc/apply(mob/living/M, mob/user)
if(!reagents.total_volume)
@@ -62,7 +66,7 @@
if(safety_hypo && !emagged)
var/found_forbidden_reagent = FALSE
for(var/datum/reagent/R in reagents.reagent_list)
- if(!GLOB.safe_chem_list.Find(R.id))
+ if(!safe_chem_list.Find(R.id))
reagents.del_reagent(R.id)
found_forbidden_reagent = TRUE
if(found_forbidden_reagent)
diff --git a/code/modules/reagents/reagent_containers/iv_bag.dm b/code/modules/reagents/reagent_containers/iv_bag.dm
index 9782863e450..fe3d6fcfc66 100644
--- a/code/modules/reagents/reagent_containers/iv_bag.dm
+++ b/code/modules/reagents/reagent_containers/iv_bag.dm
@@ -75,6 +75,9 @@
if(reagents.total_volume < reagents.maximum_volume)
injection_target.transfer_blood_to(src, amount_per_transfer_from_this)
for(var/datum/reagent/x in injection_target.reagents.reagent_list) // Pull small amounts of reagents from the person while drawing blood
+ var/datum/reagent/R
+ if(R.id in GLOB.blocked_chems)
+ continue
injection_target.reagents.trans_to(src, amount_per_transfer_from_this/10)
update_icon(UPDATE_OVERLAYS)