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)