diff --git a/code/__defines/_reagents.dm b/code/__defines/_reagents.dm
index 7759ba3cc3..d22187b05e 100644
--- a/code/__defines/_reagents.dm
+++ b/code/__defines/_reagents.dm
@@ -83,10 +83,6 @@
#define REAGENT_ID_TUNGSTEN "tungsten"
#define REAGENT_NUTRIMENT "Nutriment"
#define REAGENT_ID_NUTRIMENT "nutriment"
-#define REAGENT_STEEL "Liquid Steel"
-#define REAGENT_ID_STEEL "steel"
-#define REAGENT_PLASTEEL "Liquid Plasteel"
-#define REAGENT_ID_PLASTEEL "plasteel"
// Xeno chem react
diff --git a/code/__defines/_reagents_ch.dm b/code/__defines/_reagents_ch.dm
index b1429fc8e3..02eda658ef 100644
--- a/code/__defines/_reagents_ch.dm
+++ b/code/__defines/_reagents_ch.dm
@@ -58,11 +58,6 @@
#define REAGENT_ALIZENE "Alizene"
#define REAGENT_ID_ALIZENE "alizene"
-// Does not exist?
-#define REAGENT_ID_SPACEDRUGS "space_drugs"
-#define REAGENT_ID_HOTWATER "hotwater"
-#define REAGENT_ID_BURBON "burbon"
-
// Food & Drinks
#define REAGENT_SNAPS "Akvavit"
#define REAGENT_ID_SNAPS "snaps"
@@ -151,8 +146,6 @@
#define REAGENT_ID_MAUNALOA "mauna_loa"
#define REAGENT_HIVEMINDERASER "Hivemind Eraser"
#define REAGENT_ID_HIVEMINDERASER "hiveminderaser"
-#define REAGENT_STRAWBERRYLOVEPOTION "Strawberry Love Potion"
-#define REAGENT_ID_STRAWBERRYLOVEPOTION "strawberrylovepotion"
#define REAGENT_WORMBLOOD "Worm Blood"
#define REAGENT_ID_WORMBLOOD "wormblood"
diff --git a/code/controllers/subsystems/chemistry.dm b/code/controllers/subsystems/chemistry.dm
index f31441e34c..0e9aae6f58 100644
--- a/code/controllers/subsystems/chemistry.dm
+++ b/code/controllers/subsystems/chemistry.dm
@@ -5,8 +5,10 @@ SUBSYSTEM_DEF(chemistry)
init_order = INIT_ORDER_CHEMISTRY
var/list/chemical_reactions = list()
+ var/list/chemical_reactions_by_product = list()
var/list/instant_reactions_by_reagent = list()
var/list/distilled_reactions_by_reagent = list()
+ var/list/distilled_reactions_by_product = list()
// var/list/fusion_reactions_by_reagent = list() // TODO: Fusion reactions as chemical reactions
var/list/chemical_reagents = list()
@@ -45,6 +47,13 @@ SUBSYSTEM_DEF(chemistry)
if(istype(D, /decl/chemical_reaction/distilling))
add_to = distilled_reactions_by_reagent
+ if(istype(D, /decl/chemical_reaction/distilling))
+ LAZYINITLIST(distilled_reactions_by_product[D.result])
+ distilled_reactions_by_product[D.result] += D // for reverse lookup
+ else
+ LAZYINITLIST(chemical_reactions_by_product[D.result])
+ chemical_reactions_by_product[D.result] += D // for reverse lookup
+
LAZYINITLIST(add_to[reagent_id])
add_to[reagent_id] += D
diff --git a/code/modules/Phorochemistry/phororeactions.dm b/code/modules/Phorochemistry/phororeactions.dm
index 6f62888597..7b6f0f9b1e 100644
--- a/code/modules/Phorochemistry/phororeactions.dm
+++ b/code/modules/Phorochemistry/phororeactions.dm
@@ -32,7 +32,7 @@
/datum/phororeactions
var/list/random_reagents = list(REAGENT_ID_HYDROGEN,REAGENT_ID_LITHIUM,REAGENT_ID_CARBON,REAGENT_ID_NITROGEN,REAGENT_ID_OXYGEN,REAGENT_ID_FLUORINE, \
REAGENT_ID_SODIUM,REAGENT_ID_ALUMINIUM,REAGENT_ID_SILICON,REAGENT_ID_PHOSPHORUS,REAGENT_ID_SULFUR,REAGENT_ID_CHLORINE,REAGENT_ID_POTASSIUM,REAGENT_ID_IRON, \
- REAGENT_ID_COPPER,REAGENT_ID_MERCURY,REAGENT_ID_RADIUM,REAGENT_ID_WATER,REAGENT_ID_SUGAR,REAGENT_ID_SACID,REAGENT_ID_TUNGSTEN, REAGENT_ID_LUBE, REAGENT_ID_INAPROVALINE, REAGENT_ID_SPACEDRUGS, \
+ REAGENT_ID_COPPER,REAGENT_ID_MERCURY,REAGENT_ID_RADIUM,REAGENT_ID_WATER,REAGENT_ID_SUGAR,REAGENT_ID_SACID,REAGENT_ID_TUNGSTEN, REAGENT_ID_LUBE, REAGENT_ID_INAPROVALINE, REAGENT_ID_BLISS, \
REAGENT_ID_THERMITE, REAGENT_ID_TRAMADOL, REAGENT_ID_CLEANER, REAGENT_ID_KELOTANE, REAGENT_ID_DERMALINE, REAGENT_ID_ANTITOXIN, REAGENT_ID_SYNAPTIZINE, \
REAGENT_ID_ALKYSINE, REAGENT_ID_IMIDAZOLINE, REAGENT_ID_HYPERZINE, REAGENT_ID_AMMONIA, REAGENT_ID_SODIUMCHLORIDE, REAGENT_ID_STERILIZINE, REAGENT_ID_SILICATE, REAGENT_ID_MINDBREAKER, \
REAGENT_ID_IMPEDREZENE, REAGENT_ID_LIPOZINE)
diff --git a/code/modules/Phorochemistry/phororeagent.dm b/code/modules/Phorochemistry/phororeagent.dm
index 0e1c550bd1..700c6ce6c8 100644
--- a/code/modules/Phorochemistry/phororeagent.dm
+++ b/code/modules/Phorochemistry/phororeagent.dm
@@ -729,7 +729,7 @@ var/induromol_code = rand(1, 50)
if(!init)
to_chat(M, span_warning("You start tripping balls."))
init = 1
- var/drugs = list(REAGENT_ID_SPACEDRUGS, REAGENT_ID_SEROTROTIUM, REAGENT_ID_PSILOCYBIN, REAGENT_ID_NUKACOLA, REAGENT_ID_ATOMICBOMB, REAGENT_ID_HIPPIESDELIGHT)
+ var/drugs = list(REAGENT_ID_BLISS, REAGENT_ID_SEROTROTIUM, REAGENT_ID_PSILOCYBIN, REAGENT_ID_NUKACOLA, REAGENT_ID_ATOMICBOMB, REAGENT_ID_HIPPIESDELIGHT)
for(var/drug in drugs)
M.reagents.add_reagent(drug, 1)
M.reagents.add_reagent(REAGENT_ID_MINDBREAKER, 0.2)
diff --git a/code/modules/food/food/superfoods_ch.dm b/code/modules/food/food/superfoods_ch.dm
index 9c0f4016d8..fc28254d3b 100644
--- a/code/modules/food/food/superfoods_ch.dm
+++ b/code/modules/food/food/superfoods_ch.dm
@@ -443,7 +443,7 @@
desc = "A mysterious slice, coated in purple frosting that smells like grapes."
nutriment_desc = list("The desire to show off an party" = 10)
reagents.add_reagent(REAGENT_ID_STOXIN, 2)
- reagents.add_reagent(REAGENT_ID_SPACEDRUGS, 10)
+ reagents.add_reagent(REAGENT_ID_BLISS, 10)
reagents.add_reagent(REAGENT_ID_SEROTROTIUM, 4)
reagents.add_reagent(REAGENT_ID_CRYPTOBIOLIN, 8)
reagents.add_reagent(REAGENT_ID_MINDBREAKER, 10)
diff --git a/code/modules/reagents/holder/holder.dm b/code/modules/reagents/holder/holder.dm
index bbe8f4f78e..562cb49685 100644
--- a/code/modules/reagents/holder/holder.dm
+++ b/code/modules/reagents/holder/holder.dm
@@ -101,6 +101,9 @@
while(reaction_occurred)
for(var/decl/chemical_reaction/C as anything in effect_reactions)
C.post_reaction(src)
+ #ifdef UNIT_TEST
+ SEND_SIGNAL(src, COMSIG_UNITTEST_DATA, list(C))
+ #endif
update_total()
/* Holder-to-chemical */
diff --git a/code/modules/reagents/machinery/chemalyzer.dm b/code/modules/reagents/machinery/chemalyzer.dm
index b0433ec03d..29d38b78c0 100644
--- a/code/modules/reagents/machinery/chemalyzer.dm
+++ b/code/modules/reagents/machinery/chemalyzer.dm
@@ -1,9 +1,9 @@
// Detects reagents inside most containers, and acts as an infinite identification system for reagent-based unidentified objects.
/obj/machinery/chemical_analyzer
- name = "chem analyzer"
- desc = "Used to precisely scan chemicals and other liquids inside various containers. \
- It may also identify the liquid contents of unknown objects."
+ name = "chem analyzer PRO"
+ desc = "New and improved! Used to precisely scan chemicals and other liquids inside various containers. \
+ It can also identify the liquid contents of unknown objects and their chemical breakdowns."
description_info = "This machine will try to tell you what reagents are inside of something capable of holding reagents. \
It is also used to 'identify' specific reagent-based objects with their properties obscured from inspection by normal means."
icon = 'icons/obj/chemical.dmi'
@@ -45,19 +45,153 @@
I.identify(IDENTITY_FULL, user)
// Now tell us everything that is inside.
+ var/final_message = ""
if(I.reagents && I.reagents.reagent_list.len)
- to_chat(user, "
") // To add padding between regular chat and the output.
+ final_message += "
" // To add padding between regular chat and the output.
for(var/datum/reagent/R in I.reagents.reagent_list)
if(!R.name)
continue
- to_chat(user, span_notice("Contains [R.volume]u of [R.name].
[R.description]
"))
+ final_message += span_notice("*=*=*=*= Contains " + span_info("[R.volume]u") + " of " + span_bold(span_underline("[R.name]")) + " =*=*=*=*
[R.description][R.from_belly ? " Something seems strange about it...? (OOC: It's from a belly!)" : ""]
")
+ /* Downstream addiction code
+ if(R.id in addictives)
+ final_message += span_boldnotice(span_red("DANGER") + ", [(R.id in fast_addictives) ? "highly " : ""]addictive.)") + "
"
+ */
+ var/list/products = SSchemistry.chemical_reactions_by_product[R.id]
+ if(products != null && products.len > 0)
+ var/segment = 1
+ var/list/display_reactions = list()
+ for(var/decl/chemical_reaction/CR in products)
+ // if(!CR.spoiler) - Downstream self documenting wiki code
+ display_reactions.Add(CR)
+ for(var/decl/chemical_reaction/CR in display_reactions)
+ if(display_reactions.len == 1)
+ final_message += span_underline("Potential Chemical breakdown:
")
+ else
+ final_message += span_underline("Potential Chemical breakdown [segment]:
")
+ segment += 1
- // Last, unseal it if it's an autoinjector.
- if(istype(I,/obj/item/reagent_containers/hypospray/autoinjector/biginjector) && !(I.flags & OPENCONTAINER))
- I.flags |= OPENCONTAINER
- to_chat(user, span_notice("Sample container unsealed.
"))
+ if(istype(CR,/decl/chemical_reaction/instant/slime))
+ // Handle slimes
+ var/decl/chemical_reaction/instant/slime/SR = CR
+ if(SR.required)
+ var/slime_path = SR.required
+ final_message += " -core [span_info(initial(slime_path:name))]
"
+ for(var/RQ in CR.required_reagents)
+ var/decl/chemical_reaction/r_RQ = SSchemistry.chemical_reagents[RQ]
+ if(!r_RQ)
+ continue
+ final_message += " -inducer [span_info(r_RQ.name)]
"
+ else
+ // Standard
+ for(var/RQ in CR.required_reagents)
+ var/decl/chemical_reaction/r_RQ = SSchemistry.chemical_reagents[RQ]
+ if(!r_RQ)
+ continue
+ final_message += " -parts [span_info(r_RQ.name)]
"
+ for(var/IH in CR.inhibitors)
+ var/decl/chemical_reaction/r_IH = SSchemistry.chemical_reagents[IH]
+ if(!r_IH)
+ continue
+ final_message += " -inhbi [span_info(r_IH.name)]
"
+ for(var/CL in CR.catalysts)
+ var/decl/chemical_reaction/r_CL = SSchemistry.chemical_reagents[CL]
+ if(!r_CL)
+ continue
+ final_message += " -catyl [span_info(r_CL.name)]
"
+ final_message += "
"
+ else
+ final_message += span_underline("Potential Chemical breakdown:") + "
" + span_red("UNKNOWN OR BASE-REAGENT") + "
"
+ var/list/distilled_products = SSchemistry.distilled_reactions_by_product[R.id]
+ if(distilled_products != null && distilled_products.len > 0)
+ var/segment = 1
- to_chat(user, span_notice("Scanning of \the [I] complete."))
+ var/list/display_reactions = list()
+ for(var/decl/chemical_reaction/distilling/CR in distilled_products)
+ // if(!CR.spoiler) - Downstream self documenting wiki code
+ display_reactions.Add(CR)
+
+ for(var/decl/chemical_reaction/distilling/CR in display_reactions)
+ if(display_reactions.len == 1)
+ final_message += span_underline("Potential Chemical Distillation:
")
+ else
+ final_message += span_underline("Potential Chemical Distillation [segment]:
")
+ segment += 1
+
+ final_message += " -temps " + span_info("[CR.temp_range[1]]k") + " - " + span_info("[CR.temp_range[2]]k") + "
"
+
+ for(var/RQ in CR.required_reagents)
+ var/decl/chemical_reaction/r_RQ = SSchemistry.chemical_reagents[RQ]
+ if(!r_RQ)
+ continue
+ final_message += " -parts [span_info(r_RQ.name)]
"
+ for(var/IH in CR.inhibitors)
+ var/decl/chemical_reaction/r_IH = SSchemistry.chemical_reagents[IH]
+ if(!r_IH)
+ continue
+ final_message += " -inhbi [span_info(r_IH.name)]
"
+ for(var/CL in CR.catalysts)
+ var/decl/chemical_reaction/r_CL = SSchemistry.chemical_reagents[CL]
+ if(!r_CL)
+ continue
+ final_message += " -catyl [span_info(r_CL.name)]
"
+ final_message += "
"
+
+ // We can get some reagents by grinding sheets and ores!
+ var/grind_results = ""
+ for(var/source in global.sheet_reagents)
+ if(R.id in global.sheet_reagents[source])
+ var/nm = initial(source:name)
+ grind_results += " -grind [span_info(nm)]
"
+ if(grind_results != "")
+ final_message += span_underline("Material Sources:
")
+ final_message += grind_results
+ final_message += "
"
+
+ grind_results = ""
+ for(var/source in global.ore_reagents)
+ if(R.id in global.ore_reagents[source])
+ var/nm = initial(source:name)
+ grind_results += " -grind [span_info(nm)]
"
+ if(grind_results != "")
+ final_message += span_underline("Ore Sources:
")
+ final_message += grind_results
+ final_message += "
"
+
+ // The long forgotten fluid pumps!
+ // TODO : Update turfs to provide what their fluidpump outputs are too
+ var/pump_results = ""
+ for(var/O in GLOB.ore_data)
+ var/ore/OR = GLOB.ore_data[O]
+ if(OR.reagent == R.id)
+ pump_results += " -erosion [span_info(OR.display_name)]
"
+ if(pump_results != "")
+ final_message += span_underline("Fluid Pump Filtrate:
")
+ final_message += pump_results
+ final_message += "
"
+
+ var/makes_result = ""
+ var/list/instant_by_reagent = SSchemistry.instant_reactions_by_reagent["[R.id]"]
+ if(instant_by_reagent && instant_by_reagent.len)
+ for(var/i = 1, i <= instant_by_reagent.len, i++)
+ var/decl/chemical_reaction/OR = instant_by_reagent[i]
+ if(istype(OR,/decl/chemical_reaction/instant/slime)) // very bloated and meant to be a mystery
+ continue
+ makes_result += " -[span_info(OR.name)]
"
+
+ var/list/distilled_by_reagent = SSchemistry.distilled_reactions_by_reagent["[R.id]"]
+ if(distilled_by_reagent && distilled_by_reagent.len)
+ for(var/i = 1, i <= distilled_by_reagent.len, i++)
+ var/decl/chemical_reaction/OR = distilled_by_reagent[i]
+ makes_result += " -[span_info(OR.name)]
"
+
+ if(makes_result != "")
+ final_message += span_underline("Can Be Used To Produce:
")
+ final_message += makes_result
+ final_message += "
"
+
+ final_message += "Scanning of \the [I] complete."
+
+ to_chat(user, span_notice(final_message))
analyzing = FALSE
update_icon()
return
diff --git a/code/modules/reagents/machinery/pump.dm b/code/modules/reagents/machinery/pump.dm
index c6808f1762..c2ccbddc0b 100644
--- a/code/modules/reagents/machinery/pump.dm
+++ b/code/modules/reagents/machinery/pump.dm
@@ -7,8 +7,8 @@
conditions can cause different byproducts to be produced.
\
Magma or Lava can be pumped to produce mineralized fluid."
- anchored = 0
- density = 1
+ anchored = TRUE
+ density = TRUE
icon = 'icons/obj/machines/reagent.dmi'
icon_state = "pump"
diff --git a/code/modules/reagents/reactions/_reactions.dm b/code/modules/reagents/reactions/_reactions.dm
index 18a3058263..3240c46370 100644
--- a/code/modules/reagents/reactions/_reactions.dm
+++ b/code/modules/reagents/reactions/_reactions.dm
@@ -102,6 +102,9 @@
var/amt_produced = result_amount * reaction_progress
if(result)
holder.add_reagent(result, amt_produced, data, safety = 1, was_from_belly = belly_reagent)
+ // #ifdef UNIT_TEST
+ // log_unit_test("[name] - Reagent reaction result: [result] [amt_produced]") // Uncomment for UNIT_TEST debug assistance
+ // #endif
on_reaction(holder, amt_produced)
diff --git a/code/modules/reagents/reactions/instant/drinks.dm b/code/modules/reagents/reactions/instant/drinks.dm
index 79089ec5e0..a412710b55 100644
--- a/code/modules/reagents/reactions/instant/drinks.dm
+++ b/code/modules/reagents/reactions/instant/drinks.dm
@@ -87,7 +87,7 @@
/decl/chemical_reaction/instant/drinks/icecoffee/alt
name = "Iced Drip Coffee"
- id = REAGENT_ID_ICECOFFEE
+ id = REAGENT_ID_ICECOFFEE + "_drip"
result = REAGENT_ID_ICECOFFEE
required_reagents = list(REAGENT_ID_ICE = 1, REAGENT_ID_DRIPCOFFEE = 2)
result_amount = 3
@@ -150,14 +150,14 @@
/decl/chemical_reaction/instant/drinks/mocha
name = REAGENT_MOCHA
- id = REAGENT_ID_MOCHA
+ id = REAGENT_ID_MOCHA + "_milk"
result = REAGENT_ID_MOCHA
required_reagents = list(REAGENT_ID_MILK = 1, REAGENT_ID_CREAM = 1, REAGENT_ID_MILKFOAM = 1, REAGENT_ID_HOTCOCO = 2, REAGENT_ID_BREVE = 5) // 2 coffee, 2 milk, 2 cream, 2 milk foam and 2 hot coco
result_amount = 10
/decl/chemical_reaction/instant/drinks/mocha/alt //incase they use cream before milk
name = REAGENT_MOCHA
- id = REAGENT_ID_MOCHA
+ id = REAGENT_ID_MOCHA + "_cream"
result = REAGENT_ID_MOCHA
required_reagents = list(REAGENT_ID_CREAM = 2, REAGENT_ID_HOTCOCO = 2, REAGENT_ID_CAPPUCCINO = 6) // 2 coffee, 2 milk, 2 cream, 2 milk foam and 2 hot coco
result_amount = 10
@@ -563,7 +563,7 @@
/decl/chemical_reaction/instant/drinks/iced_beer2
name = REAGENT_ICEDBEER
- id = REAGENT_ID_ICEDBEER
+ id = REAGENT_ID_ICEDBEER + "_ice"
result = REAGENT_ID_ICEDBEER
required_reagents = list(REAGENT_ID_BEER = 5, REAGENT_ID_ICE = 1)
result_amount = 6
diff --git a/code/modules/reagents/reactions/instant/food.dm b/code/modules/reagents/reactions/instant/food.dm
index 55fbe611fb..720188560b 100644
--- a/code/modules/reagents/reactions/instant/food.dm
+++ b/code/modules/reagents/reactions/instant/food.dm
@@ -31,7 +31,7 @@
/decl/chemical_reaction/instant/food/chocolate_bar
name = "Chocolate Bar"
- id = "chocolate_bar"
+ id = "chocolate_bar_soy"
result = null
required_reagents = list(REAGENT_ID_SOYMILK = 2, REAGENT_ID_COCO = 2, REAGENT_ID_SUGAR = 2)
catalysts = list(REAGENT_ID_ENZYME = 5)
@@ -45,7 +45,7 @@
/decl/chemical_reaction/instant/food/chocolate_bar2
name = "Chocolate Bar"
- id = "chocolate_bar"
+ id = "chocolate_bar_milk"
result = null
required_reagents = list(REAGENT_ID_MILK = 2, REAGENT_ID_COCO = 2, REAGENT_ID_SUGAR = 2)
catalysts = list(REAGENT_ID_ENZYME = 5)
diff --git a/code/modules/reagents/reactions/instant/instant.dm b/code/modules/reagents/reactions/instant/instant.dm
index 81464c1dfa..b53d4bc515 100644
--- a/code/modules/reagents/reactions/instant/instant.dm
+++ b/code/modules/reagents/reactions/instant/instant.dm
@@ -76,6 +76,7 @@
id = REAGENT_ID_WATER
result = REAGENT_ID_WATER
required_reagents = list(REAGENT_ID_OXYGEN = 1, REAGENT_ID_HYDROGEN = 2)
+ inhibitors = list(REAGENT_ID_CARBON = 1) // CHOMPAdd
result_amount = 1
/decl/chemical_reaction/instant/thermite
@@ -363,7 +364,7 @@
id = REAGENT_ID_STOXIN
result = REAGENT_ID_STOXIN
required_reagents = list(REAGENT_ID_CHLORALHYDRATE = 1, REAGENT_ID_SUGAR = 4)
- inhibitors = list(REAGENT_ID_PHOSPHORUS) // Messes with the smoke
+ inhibitors = list(REAGENT_ID_PHOSPHORUS = 1) // Messes with the smoke
result_amount = 5
/decl/chemical_reaction/instant/chloralhydrate
@@ -614,14 +615,15 @@
/decl/chemical_reaction/instant/solidification/steel
name = "Solid Steel"
id = "solidsteel"
- required_reagents = list(REAGENT_ID_FROSTOIL = 5, REAGENT_ID_STEEL = REAGENTS_PER_SHEET)
+ required_reagents = list(REAGENT_ID_FROSTOIL = 10, REAGENT_ID_IRON = REAGENTS_PER_SHEET, REAGENT_ID_CARBON = REAGENTS_PER_SHEET)
+ inhibitors = list(REAGENT_ID_PLATINUM = 1) // do not block plasteel formation
sheet_to_give = /obj/item/stack/material/steel
/decl/chemical_reaction/instant/solidification/plasteel
name = "Solid Plasteel"
id = "solidplasteel"
- required_reagents = list(REAGENT_ID_FROSTOIL = 10, REAGENT_ID_PLASTEEL = REAGENTS_PER_SHEET)
+ required_reagents = list(REAGENT_ID_FROSTOIL = 10, REAGENT_ID_IRON = REAGENTS_PER_SHEET, REAGENT_ID_CARBON = REAGENTS_PER_SHEET, REAGENT_ID_PLATINUM = REAGENTS_PER_SHEET)
sheet_to_give = /obj/item/stack/material/plasteel
@@ -682,7 +684,7 @@
/decl/chemical_reaction/instant/carpetify/pcarpet
name = "Purple Carpet"
- id = "Purplecarpet"
+ id = "purplecarpet"
required_reagents = list(REAGENT_ID_LIQUIDCARPETP = 2, REAGENT_ID_PLASTICIDE = 1)
carpet_type = /obj/item/stack/tile/carpet/purcarpet
@@ -784,6 +786,8 @@
result_amount = 2
log_is_important = 1
+#ifndef UNIT_TEST
+// If it becomes possible to make this without exploding and clearing reagents, remove the UNIT_TEST wrapper
/decl/chemical_reaction/instant/nitroglycerin/on_reaction(var/datum/reagents/holder, var/created_volume)
var/datum/effect/effect/system/reagents_explosion/e = new()
e.set_up(round (created_volume/2, 1), holder.my_atom, 0, 0)
@@ -792,14 +796,13 @@
var/mob/living/L = holder.my_atom
if(L.stat!=DEAD)
e.amount *= 0.5
- //VOREStation Add Start
else
holder.clear_reagents() //No more powergaming by creating a tiny amount of this
- //VOREStation Add End
e.start()
//holder.clear_reagents() //VOREStation Removal
return
+#endif
/decl/chemical_reaction/instant/napalm
name = "Napalm"
diff --git a/code/modules/reagents/reactions/instant/instant_ch.dm b/code/modules/reagents/reactions/instant/instant_ch.dm
index e3d1a6845f..2c90bc576c 100644
--- a/code/modules/reagents/reactions/instant/instant_ch.dm
+++ b/code/modules/reagents/reactions/instant/instant_ch.dm
@@ -60,6 +60,7 @@
/decl/chemical_reaction/instant/glucose
name = REAGENT_GLUCOSE
+ id = REAGENT_ID_GLUCOSE
result = REAGENT_ID_GLUCOSE
required_reagents = list(REAGENT_ID_SODIUMCHLORIDE = 1, REAGENT_ID_WATER = 1, REAGENT_ID_SUGAR = 1)
result_amount = 1
@@ -67,7 +68,7 @@
/decl/chemical_reaction/instant/myelamine_sap //This is the clotting agent used by clotting packs.
name = REAGENT_MYELAMINE
- id = REAGENT_ID_MYELAMINE
+ id = REAGENT_ID_MYELAMINE + "sap"
result = REAGENT_ID_MYELAMINE
required_reagents = list(REAGENT_ID_BICARIDINE = 1, REAGENT_ID_IRON = 2, REAGENT_ID_KELOTANE = 1, REAGENT_ID_BLUESAP = 1)
result_amount = 1
diff --git a/code/modules/reagents/reactions/instant/instant_vr.dm b/code/modules/reagents/reactions/instant/instant_vr.dm
index c201d18451..8d0207ec05 100644
--- a/code/modules/reagents/reactions/instant/instant_vr.dm
+++ b/code/modules/reagents/reactions/instant/instant_vr.dm
@@ -103,6 +103,8 @@
/// Miscellaneous Reactions
/decl/chemical_reaction/instant/foam/softdrink
+ name = "Decarbonated Drink"
+ id = "soda_fizz"
required_reagents = list(REAGENT_ID_COLA = 1, REAGENT_ID_MINT = 1)
/decl/chemical_reaction/instant/firefightingfoam //TODO: Make it so we can add this to the foam tanks to refill them
diff --git a/code/modules/reagents/reactions/instant/virology.dm b/code/modules/reagents/reactions/instant/virology.dm
index 75c6ae0265..4b20bebcf4 100644
--- a/code/modules/reagents/reactions/instant/virology.dm
+++ b/code/modules/reagents/reactions/instant/virology.dm
@@ -56,6 +56,7 @@
var/level_max = 2
/decl/chemical_reaction/instant/mix_virus/picky
+ id = "mixviruspicky"
var/list/datum/symptom/symptoms
/decl/chemical_reaction/instant/mix_virus/on_reaction(datum/reagents/holder)
@@ -156,6 +157,6 @@
name = REAGENT_ANTIBODIES
id = "antibodiesmix"
result = REAGENT_ID_ANTIBODIES
- required_reagents = list(REAGENT_ID_VACCINE)
+ required_reagents = list(REAGENT_ID_VACCINE = 1)
catalysts = list(REAGENT_ID_INAPROVALINE = 0.1)
result_amount = 0.5
diff --git a/code/unit_tests/reagent_tests.dm b/code/unit_tests/reagent_tests.dm
index 9e9d866740..68f533437d 100644
--- a/code/unit_tests/reagent_tests.dm
+++ b/code/unit_tests/reagent_tests.dm
@@ -24,6 +24,10 @@
log_unit_test("[Rpath]: Reagents - reagent ID blank.")
failed = TRUE
+ if(R.id != lowertext(R.id))
+ log_unit_test("[Rpath]: Reagents - Reagent ID must be all lowercase.")
+ failed = TRUE
+
if(collection_name[R.name])
log_unit_test("[Rpath]: Reagents - WARNING - reagent name \"[R.name]\" is not unique, used first in [collection_name[R.name]]. Is this intentional?")
collection_name[R.name] = R.type
@@ -54,7 +58,9 @@
var/failed = FALSE
var/list/collection_id = list()
- for(var/decl/chemical_reaction/CR in decls_repository.get_decls_of_subtype(/decl/chemical_reaction))
+ var/list/all_reactions = decls_repository.get_decls_of_subtype(/decl/chemical_reaction)
+ for(var/rtype in all_reactions)
+ var/decl/chemical_reaction/CR = all_reactions[rtype]
if(CR.name == REAGENT_DEVELOPER_WARNING) // Ignore these types as they are meant to be overridden
continue
@@ -67,32 +73,50 @@
failed = TRUE
if(!CR.id)
- log_unit_test("[CR.type]: Reagents - chemical reaction had invalid id.")
+ log_unit_test("[CR.type]: Reagents - chemical reaction had invalid ID.")
+ failed = TRUE
+
+ if(CR.id != lowertext(CR.id))
+ log_unit_test("[CR.type]: Reagents - chemical reaction ID must be all lowercase.")
failed = TRUE
if(CR.id in collection_id)
- log_unit_test("[CR.type]: Reagents - chemical reaction id \"[CR.name]\" is not unique, used first in [collection_id[CR.id]].")
+ log_unit_test("[CR.type]: Reagents - chemical reaction ID \"[CR.name]\" is not unique, used first in [collection_id[CR.id]].")
failed = TRUE
else
collection_id[CR.id] = CR.type
- if(CR.required_reagents)
+ if(CR.result_amount < 0)
+ log_unit_test("[CR.type]: Reagents - chemical reaction ID \"[CR.name]\" had less than 0 as as result_amount?")
+ failed = TRUE
+
+ if(CR.required_reagents && CR.required_reagents.len)
for(var/RR in CR.required_reagents)
if(!SSchemistry.chemical_reagents[RR])
log_unit_test("[CR.type]: Reagents - chemical reaction had invalid required reagent ID \"[RR]\".")
failed = TRUE
+ if(CR.required_reagents[RR] <= 0)
+ log_unit_test("[CR.type]: Reagents - chemical reaction had invalid required reagent amount or in invalid format \"[CR.required_reagents[RR]]\".")
+ failed = TRUE
- if(CR.catalysts)
+
+ if(CR.catalysts && CR.catalysts.len)
for(var/RR in CR.catalysts)
if(!SSchemistry.chemical_reagents[RR])
log_unit_test("[CR.type]: Reagents - chemical reaction had invalid required reagent ID \"[RR]\".")
failed = TRUE
+ if(CR.catalysts[RR] <= 0)
+ log_unit_test("[CR.type]: Reagents - chemical reaction had invalid catalysts amount or in invalid format \"[CR.catalysts[RR]]\".")
+ failed = TRUE
- if(CR.inhibitors)
+ if(CR.inhibitors && CR.inhibitors.len)
for(var/RR in CR.inhibitors)
if(!SSchemistry.chemical_reagents[RR])
log_unit_test("[CR.type]: Reagents - chemical reaction had invalid required reagent ID \"[RR]\".")
failed = TRUE
+ if(CR.inhibitors[RR] <= 0)
+ log_unit_test("[CR.type]: Reagents - chemical reaction had invalid inhibitors amount or in invalid format \"[CR.inhibitors[RR]]\".")
+ failed = TRUE
if(CR.result)
if(!SSchemistry.chemical_reagents[CR.result])
@@ -142,3 +166,148 @@
else
pass("All /obj/item/reagent_containers had valid prefill reagents.")
return TRUE
+
+
+/datum/unit_test/chemical_reactions_shall_not_conflict
+ name = "REAGENTS: Chemical Reactions shall not conflict"
+ var/obj/fake_beaker = null
+ var/list/result_reactions = list()
+
+/datum/unit_test/chemical_reactions_shall_not_conflict/start_test()
+ var/failed = FALSE
+
+ #ifdef UNIT_TEST
+ var/list/all_reactions = decls_repository.get_decls_of_subtype(/decl/chemical_reaction)
+ for(var/rtype in all_reactions)
+ var/decl/chemical_reaction/CR = all_reactions[rtype]
+
+ if(CR.name == REAGENT_DEVELOPER_WARNING) // Ignore these types as they are meant to be overridden
+ continue
+ if(!CR.name || CR.name == "" || !CR.id || CR.id == "")
+ continue
+ if(CR.result_amount <= 0) //Makes nothing anyway, or maybe an effect/explosion!
+ continue
+ if(!CR.result) // Cannot check for this
+ continue
+
+ if(istype(CR, /decl/chemical_reaction/instant/slime))
+ // slime time
+ var/decl/chemical_reaction/instant/slime/SR = CR
+ if(!SR.required)
+ continue
+ var/obj/item/slime_extract/E = new SR.required()
+ qdel_swap(fake_beaker, E)
+ fake_beaker.reagents.maximum_volume = 5000
+ else if(istype(CR, /decl/chemical_reaction/distilling))
+ // distilling
+ var/decl/chemical_reaction/distilling/DR = CR
+ var/obj/machinery/portable_atmospherics/powered/reagent_distillery/D = new()
+ D.current_temp = DR.temp_range[1]
+ qdel_swap(fake_beaker, D)
+ fake_beaker.reagents.maximum_volume = 5000
+ else
+ // regular beaker
+ qdel_swap(fake_beaker, new /obj/item/reagent_containers/glass/beaker())
+ fake_beaker.reagents.maximum_volume = 5000
+
+ // Perform test! If it fails once, it will perform a deeper check trying to use the inhibitors of anything in the beaker
+ RegisterSignal(fake_beaker.reagents, COMSIG_UNITTEST_DATA, PROC_REF(get_signal_data))
+ if(perform_reaction(CR))
+ // Check if we failed the test with inhibitors in use, if so we absolutely couldn't make it...
+ // Uncomment the UNIT_TEST section in code\modules\reagents\reactions\_reactions.dm if you require more info
+ log_unit_test("[CR.type]: Reagents - chemical reaction did not produce \"[CR.result]\". CONTAINS: \"[fake_beaker.reagents.get_reagents()]\"")
+ failed = TRUE
+ UnregisterSignal(fake_beaker.reagents, COMSIG_UNITTEST_DATA)
+ qdel_null(fake_beaker)
+ #endif
+
+ if(failed)
+ fail("One or more /decl/chemical_reaction subtypes conflict with another reaction.")
+ else
+ pass("All /decl/chemical_reaction subtypes had no conflicts.")
+ return TRUE
+
+/datum/unit_test/chemical_reactions_shall_not_conflict/proc/perform_reaction(var/decl/chemical_reaction/CR, var/list/inhib = list())
+ // clear for inhibitor searches
+ fake_beaker.reagents.clear_reagents()
+ result_reactions.Cut()
+
+ var/scale = 1
+ if(CR.result_amount < 1)
+ scale = 1 / CR.result_amount // Create at least 1 unit
+
+ if(inhib.len) // taken from argument and not reaction! Put in FIRST!
+ for(var/RR in inhib)
+ fake_beaker.reagents.add_reagent(RR, inhib[RR] * scale)
+ if(CR.catalysts) // Required for reaction
+ for(var/RR in CR.catalysts)
+ fake_beaker.reagents.add_reagent(RR, CR.catalysts[RR] * scale)
+ if(CR.required_reagents)
+ for(var/RR in CR.required_reagents)
+ fake_beaker.reagents.add_reagent(RR, CR.required_reagents[RR] * scale)
+
+ if(fake_beaker.reagents.has_reagent(CR.result))
+ return FALSE // INSTANT SUCCESS!
+
+ if(inhib.len)
+ // We've checked with inhibitors, so we're already in inhibitor checking phase.
+ // So we've absolutely failed this time. There is no way to make this...
+ return TRUE
+
+ if(!result_reactions.len)
+ // Nothing to check for inhibitors...
+ for(var/decl/chemical_reaction/test_react in result_reactions)
+ log_unit_test("[CR.type]: Reagents - Used [test_react] but failed.")
+ return TRUE
+
+ // Otherwise we check the resulting reagents and use their inhibitor this time!
+ for(var/decl/chemical_reaction/test_react in result_reactions)
+ if(!test_react)
+ continue
+ if(!test_react.inhibitors.len)
+ continue
+ // Test one by one
+ for(var/each in test_react.inhibitors)
+ if(!perform_reaction(CR, list("[each]" = test_react.inhibitors["[each]"])))
+ return FALSE // SUCCESS using an inhibitor!
+ // Test all at once
+ if(!perform_reaction(CR, test_react.inhibitors))
+ return FALSE // SUCCESS using all inhibitors!
+
+ // No inhibiting reagent worked...
+ for(var/decl/chemical_reaction/test_react in result_reactions)
+ log_unit_test("[CR.type]: Reagents - Used [test_react] but failed.")
+ return TRUE
+
+/datum/unit_test/chemical_reactions_shall_not_conflict/get_signal_data(atom/source, list/data = list())
+ result_reactions.Add(data[1]) // Append the reactions that happened, then use that to check their inhibitors
+
+
+/datum/unit_test/chemical_grinding_must_produce_valid_results
+ name = "REAGENTS: Chemical Grinding Must Have Valid Results"
+
+/datum/unit_test/chemical_grinding_must_produce_valid_results/start_test()
+ var/failed = FALSE
+
+ for(var/grind in global.sheet_reagents + global.ore_reagents)
+ var/list/results = global.sheet_reagents[grind]
+ if(!results)
+ results = global.ore_reagents[grind]
+ if(!results || !islist(results))
+ log_unit_test("[grind]: Reagents - Grinding result had invalid list.")
+ failed = TRUE
+ continue
+ if(!results.len)
+ log_unit_test("[grind]: Reagents - Grinding result had empty.")
+ failed = TRUE
+ continue
+ for(var/reg_id in results)
+ if(!SSchemistry.chemical_reagents[reg_id])
+ log_unit_test("[grind]: Reagents - Grinding result had invalid reagent id \"[reg_id]\".")
+ failed = TRUE
+
+ if(failed)
+ fail("One or more grindable sheet or ore entries had invalid reagents or lists.")
+ else
+ pass("All grindable sheet or ore entries had valid lists and reagents.")
+ return TRUE
diff --git a/modular_chomp/code/modules/casino/casino_machines.dm b/modular_chomp/code/modules/casino/casino_machines.dm
index fc9a097e68..8eafc37c81 100644
--- a/modular_chomp/code/modules/casino/casino_machines.dm
+++ b/modular_chomp/code/modules/casino/casino_machines.dm
@@ -17,7 +17,7 @@
REAGENT_ID_TONIC, REAGENT_ID_BEER, REAGENT_ID_KAHLUA, REAGENT_ID_WHISKEY, REAGENT_ID_REDWINE, REAGENT_ID_VODKA, REAGENT_ID_GIN, REAGENT_ID_RUM, REAGENT_ID_TEQUILA, REAGENT_ID_VERMOUTH, REAGENT_ID_COGNAC,
REAGENT_ID_ALE, REAGENT_ID_MEAD, REAGENT_ID_BITTERS, REAGENT_ID_CHAMPAGNE, REAGENT_ID_SINGULO, REAGENT_ID_DOCTORSDELIGHT, REAGENT_ID_NOTHING, REAGENT_ID_BANANA, REAGENT_ID_HONEY, REAGENT_ID_EGG,
REAGENT_ID_COCO, REAGENT_ID_CHERRYJELLY, REAGENT_ID_CARROTJUICE, REAGENT_ID_APPLEJUICE, REAGENT_ID_TOMATOJUICE, REAGENT_ID_PEANUTBUTTER, REAGENT_ID_SOYMILK, REAGENT_ID_GRENADINE, REAGENT_ID_GINGERALE, REAGENT_ID_ROYROGERS,
- REAGENT_ID_PATRON, REAGENT_ID_GOLDSCHLAGER, REAGENT_GELATIN, REAGENT_ID_MELONLIQUOR, REAGENT_ID_BLUECURACAO, REAGENT_ID_THIRTEENLOKO, REAGENT_ID_DEADRUM, REAGENT_ID_SAKE, REAGENT_ID_ACIDSPIT,
+ REAGENT_ID_PATRON, REAGENT_ID_GOLDSCHLAGER, REAGENT_ID_GELATIN, REAGENT_ID_MELONLIQUOR, REAGENT_ID_BLUECURACAO, REAGENT_ID_THIRTEENLOKO, REAGENT_ID_DEADRUM, REAGENT_ID_SAKE, REAGENT_ID_ACIDSPIT,
REAGENT_ID_AMASEC, REAGENT_ID_BEEPSKYSMASH, REAGENT_ID_ATOMICBOMB, REAGENT_ID_NUKACOLA, REAGENT_ID_THREEMILEISLAND, REAGENT_ID_MANHATTANPROJ, REAGENT_ID_PSILOCYBIN, REAGENT_ID_MOONSHINE,
REAGENT_ID_SPECIALWHISKEY, REAGENT_ID_UNATHILIQUOR, REAGENT_ID_WINEBRANDY, REAGENT_ID_MATCHALATTE, REAGENT_ID_SNAPS
)
diff --git a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/slimess/xenobio.dm b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/slimess/xenobio.dm
index 3aa0ab49dd..f4d4d5a084 100644
--- a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/slimess/xenobio.dm
+++ b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/slimess/xenobio.dm
@@ -34,7 +34,7 @@
/decl/chemical_reaction/instant/slime/secertslime
name = "Secert Slime "
id = "sepia_swapm"
- result = "change_secert"
+ result = null
required_reagents = list(REAGENT_ID_BLOOD = 5, REAGENT_ID_WATER = 5)
result_amount = 1
required = /obj/item/slime_extract/sepia
@@ -427,7 +427,7 @@
/decl/chemical_reaction/instant/slime/nuclear_radpulse
name = "Slime Radiation Pulse"
- id = "m_green_radpulse"
+ id = "m_green_radpulse2"
required_reagents = list(REAGENT_ID_PHORON = 5)
result_amount = 1
required = /obj/item/slime_extract/nuclear
@@ -443,7 +443,7 @@
/decl/chemical_reaction/instant/slime/nuclear_emitter
name = "Slime Radiation Emitter"
- id = "m_green_emitter"
+ id = "m_green_emitter2"
required_reagents = list(REAGENT_ID_BLOOD = 5)
result_amount = 1
required = /obj/item/slime_extract/green
@@ -456,7 +456,7 @@
/decl/chemical_reaction/instant/slime/nuclear_radium
name = "Slime Radium"
- id = "m_green_radium"
+ id = "m_green_radium2"
result = REAGENT_ID_RADIUM
required_reagents = list(REAGENT_ID_WATER = 5)
result_amount = 30
@@ -465,7 +465,7 @@
/decl/chemical_reaction/instant/slime/nuclear_uranium
name = "Slime Uranium"
- id = "m_green_uranium"
+ id = "m_green_uranium2"
required_reagents = list(REAGENT_ID_SLIMEJELLY = 5)
result_amount = 1
required = /obj/item/slime_extract/green
@@ -690,8 +690,8 @@
..()
/decl/chemical_reaction/instant/slime/soundphoron
- name = "sound blood"
- id = "m_sound_blood"
+ name = "sound phoron"
+ id = "m_sound_phoron"
required_reagents = list(REAGENT_ID_PHORON = 5)
result_amount = 1
required = /obj/item/slime_extract/sound
diff --git a/modular_chomp/code/modules/reagents/reactions/instant/drinks.dm b/modular_chomp/code/modules/reagents/reactions/instant/drinks.dm
index e5d641f4d2..aac1dd0e4e 100644
--- a/modular_chomp/code/modules/reagents/reactions/instant/drinks.dm
+++ b/modular_chomp/code/modules/reagents/reactions/instant/drinks.dm
@@ -56,7 +56,7 @@
/decl/chemical_reaction/instant/freshtea/green
id = REAGENT_ID_FRESHTEAGREEN
result = REAGENT_ID_FRESHTEAGREEN
- required_reagents = list (REAGENT_ID_TEALEAVESGREEN = 1, REAGENT_ID_HOTWATER = 9)
+ required_reagents = list (REAGENT_ID_TEALEAVESGREEN = 1, REAGENT_ID_WATER = 9)
result_amount = 10
/decl/chemical_reaction/instant/instantteapowder/green
@@ -74,7 +74,7 @@
/decl/chemical_reaction/instant/matcha
id = REAGENT_ID_MATCHA
result = REAGENT_ID_MATCHA
- required_reagents = list (REAGENT_ID_MATCHAPOWDER = 1, REAGENT_ID_HOTWATER = 2)
+ required_reagents = list (REAGENT_ID_MATCHAPOWDER = 1, REAGENT_ID_WATER = 2)
result_amount = 2
/decl/chemical_reaction/instant/drinks/spiderdrink
@@ -86,37 +86,37 @@
/decl/chemical_reaction/instant/drinks/bubbleteawatermelon
name = REAGENT_BUBBLETEAWATERMELON
- id = REAGENT_BUBBLETEAWATERMELON
- result = REAGENT_BUBBLETEAWATERMELON
- required_reagents = list(REAGENT_GELATIN = 2, REAGENT_ID_WATERMELONTEA = 6, REAGENT_ID_MILK = 2)
+ id = REAGENT_ID_BUBBLETEAWATERMELON
+ result = REAGENT_ID_BUBBLETEAWATERMELON
+ required_reagents = list(REAGENT_ID_GELATIN = 2, REAGENT_ID_WATERMELONTEA = 6, REAGENT_ID_MILK = 2)
result_amount = 10
/decl/chemical_reaction/instant/drinks/bubbleteastrawberry
name = REAGENT_BUBBLETEASTRAWBERRY
id = REAGENT_ID_BUBBLETEASTRAWBERRY
result = REAGENT_ID_BUBBLETEASTRAWBERRY
- required_reagents = list(REAGENT_GELATIN = 2, REAGENT_ID_BERRYTEA = 6, REAGENT_ID_MILK = 2)
+ required_reagents = list(REAGENT_ID_GELATIN = 2, REAGENT_ID_BERRYTEA = 6, REAGENT_ID_MILK = 2)
result_amount = 10
/decl/chemical_reaction/instant/drinks/bubbleteacherry
name = REAGENT_BUBBLETEACHERRY
id = REAGENT_ID_BUBBLETEACHERRY
result = REAGENT_ID_BUBBLETEACHERRY
- required_reagents = list(REAGENT_GELATIN = 2, REAGENT_ID_CHERRYTEA = 6, REAGENT_ID_MILK = 2)
+ required_reagents = list(REAGENT_ID_GELATIN = 2, REAGENT_ID_CHERRYTEA = 6, REAGENT_ID_MILK = 2)
result_amount = 10
/decl/chemical_reaction/instant/drinks/bubbleteacoffee
name = REAGENT_BUBBLETEACOFFEE
id = REAGENT_ID_BUBBLETEACOFFEE
result = REAGENT_ID_BUBBLETEACOFFEE
- required_reagents = list(REAGENT_GELATIN = 2, REAGENT_ID_TEA = 5, REAGENT_ID_CAFELATTE = 3)
+ required_reagents = list(REAGENT_ID_GELATIN = 2, REAGENT_ID_TEA = 5, REAGENT_ID_CAFELATTE = 3)
result_amount = 10
/decl/chemical_reaction/instant/drinks/bubbleteabanana
name = REAGENT_BUBBLETEABANANA
id = REAGENT_ID_BUBBLETEABANANA
result = REAGENT_ID_BUBBLETEABANANA
- required_reagents = list(REAGENT_GELATIN = 2, REAGENT_ID_TEA = 5, REAGENT_ID_BANANA = 1, REAGENT_ID_MILK = 2)
+ required_reagents = list(REAGENT_ID_GELATIN = 2, REAGENT_ID_TEA = 5, REAGENT_ID_BANANA = 1, REAGENT_ID_MILK = 2)
result_amount = 10
/decl/chemical_reaction/instant/drinks/horchata
@@ -186,7 +186,7 @@
name = REAGENT_HACHI
id = REAGENT_ID_HACHI
result = REAGENT_ID_HACHI
- required_reagents = list(REAGENT_ID_BURBON = 2, REAGENT_ID_SAKE = 1, REAGENT_ID_LEMONJUICE = 1, PLANT_MUSHROOMS = 1) //Whoever coded this never made a mushroom reagent so this can't be created.
+ required_reagents = list(REAGENT_ID_WHISKEY = 2, REAGENT_ID_SAKE = 1, REAGENT_ID_LEMONJUICE = 1, REAGENT_ID_PSILOCYBIN = 1) //Whoever coded this never made a mushroom reagent so this can't be created.
result_amount = 5
/decl/chemical_reaction/instant/drinks/narsour
@@ -236,70 +236,70 @@
/decl/chemical_reaction/instant/drinks/enragedarachnidslammer1
name = REAGENT_ENRAGEDARACHNIDSLAMMER
- id = REAGENT_ID_ENRAGEDARACHNIDSLAMMER
+ id = REAGENT_ID_ENRAGEDARACHNIDSLAMMER + "1"
required_reagents = list(REAGENT_ID_ENRAGEDARACHNIDSLAMMER = 1, REAGENT_ID_CYANIDE = 1)
result = REAGENT_ID_ENRAGEDARACHNIDSLAMMER
result_amount = 0.1
/decl/chemical_reaction/instant/drinks/enragedarachnidslammer2
name = REAGENT_ENRAGEDARACHNIDSLAMMER
- id = REAGENT_ID_ENRAGEDARACHNIDSLAMMER
+ id = REAGENT_ID_ENRAGEDARACHNIDSLAMMER + "2"
required_reagents = list(REAGENT_ID_ENRAGEDARACHNIDSLAMMER = 1, REAGENT_ID_CHLORALHYDRATE = 1)
result = REAGENT_ID_ENRAGEDARACHNIDSLAMMER
result_amount = 0.1
/decl/chemical_reaction/instant/drinks/enragedarachnidslammer3
name = REAGENT_ENRAGEDARACHNIDSLAMMER
- id = REAGENT_ID_ENRAGEDARACHNIDSLAMMER
+ id = REAGENT_ID_ENRAGEDARACHNIDSLAMMER + "3"
required_reagents = list(REAGENT_ID_ENRAGEDARACHNIDSLAMMER = 1, REAGENT_ID_STIMM = 1)
result = REAGENT_ID_ENRAGEDARACHNIDSLAMMER
result_amount = 0.1
/decl/chemical_reaction/instant/drinks/enragedarachnidslammer4
name = REAGENT_ENRAGEDARACHNIDSLAMMER
- id = REAGENT_ID_ENRAGEDARACHNIDSLAMMER
+ id = REAGENT_ID_ENRAGEDARACHNIDSLAMMER + "4"
required_reagents = list(REAGENT_ID_ENRAGEDARACHNIDSLAMMER = 1, REAGENT_ID_CRYOTOXIN = 1)
result = REAGENT_ID_ENRAGEDARACHNIDSLAMMER
result_amount = 0.1
/decl/chemical_reaction/instant/drinks/enragedarachnidslammer5
name = REAGENT_ENRAGEDARACHNIDSLAMMER
- id = REAGENT_ID_ENRAGEDARACHNIDSLAMMER
+ id = REAGENT_ID_ENRAGEDARACHNIDSLAMMER + "5"
required_reagents = list(REAGENT_ID_ENRAGEDARACHNIDSLAMMER = 1, REAGENT_ID_CRYPTOBIOLIN = 1)
result = REAGENT_ID_ENRAGEDARACHNIDSLAMMER
result_amount = 0.1
/decl/chemical_reaction/instant/drinks/enragedarachnidslammer6
name = REAGENT_ENRAGEDARACHNIDSLAMMER
- id = REAGENT_ID_ENRAGEDARACHNIDSLAMMER
+ id = REAGENT_ID_ENRAGEDARACHNIDSLAMMER + "6"
required_reagents = list(REAGENT_ID_ENRAGEDARACHNIDSLAMMER = 1, REAGENT_ID_STOXIN = 1)
result = REAGENT_ID_ENRAGEDARACHNIDSLAMMER
result_amount = 0.1
/decl/chemical_reaction/instant/drinks/enragedarachnidslammer7
name = REAGENT_ENRAGEDARACHNIDSLAMMER
- id = REAGENT_ID_ENRAGEDARACHNIDSLAMMER
+ id = REAGENT_ID_ENRAGEDARACHNIDSLAMMER + "7"
required_reagents = list(REAGENT_ID_ENRAGEDARACHNIDSLAMMER = 1, REAGENT_ID_CONDENSEDCAPSAICINV = 1)
result = REAGENT_ID_ENRAGEDARACHNIDSLAMMER
result_amount = 0.1
/decl/chemical_reaction/instant/drinks/enragedarachnidslammer8
name = REAGENT_ENRAGEDARACHNIDSLAMMER
- id = REAGENT_ID_ENRAGEDARACHNIDSLAMMER
+ id = REAGENT_ID_ENRAGEDARACHNIDSLAMMER + "8"
required_reagents = list(REAGENT_ID_ENRAGEDARACHNIDSLAMMER = 1, REAGENT_ID_PHORON = 1)
result = REAGENT_ID_ENRAGEDARACHNIDSLAMMER
result_amount = 0.1
/decl/chemical_reaction/instant/drinks/enragedarachnidslammer9
name = REAGENT_ENRAGEDARACHNIDSLAMMER
- id = REAGENT_ID_ENRAGEDARACHNIDSLAMMER
+ id = REAGENT_ID_ENRAGEDARACHNIDSLAMMER + "9"
required_reagents = list(REAGENT_ID_ENRAGEDARACHNIDSLAMMER = 1, REAGENT_ID_THERMITEV = 1)
result = REAGENT_ID_ENRAGEDARACHNIDSLAMMER
result_amount = 0.1
/decl/chemical_reaction/instant/drinks/enragedarachnidslammer10
name = REAGENT_ENRAGEDARACHNIDSLAMMER
- id = REAGENT_ID_ENRAGEDARACHNIDSLAMMER
+ id = REAGENT_ID_ENRAGEDARACHNIDSLAMMER + "10"
required_reagents = list(REAGENT_ID_ENRAGEDARACHNIDSLAMMER = 1, REAGENT_ID_SEROTROTIUMV = 1)
result = REAGENT_ID_ENRAGEDARACHNIDSLAMMER
result_amount = 0.1
@@ -384,13 +384,6 @@
result_amount = 6
//YW drinks
-/decl/chemical_reaction/instant/drinks/lovepotion_yw
- name = REAGENT_STRAWBERRYLOVEPOTION
- id = REAGENT_ID_STRAWBERRYLOVEPOTION
- result = REAGENT_ID_STRAWBERRYLOVEPOTION
- required_reagents = list(REAGENT_ID_CREAM = 1, REAGENT_ID_BERRYJUICE = 1, REAGENT_ID_SUGAR = 1)
- result_amount = 3
-
/decl/chemical_reaction/instant/drinks/wormblood
name = "Wormblood"
id = REAGENT_ID_WORMBLOOD
diff --git a/modular_chomp/code/modules/reagents/reagents/food_drinks.dm b/modular_chomp/code/modules/reagents/reagents/food_drinks.dm
index 0c06d74c4a..e9fec17081 100644
--- a/modular_chomp/code/modules/reagents/reagents/food_drinks.dm
+++ b/modular_chomp/code/modules/reagents/reagents/food_drinks.dm
@@ -387,20 +387,9 @@
return
M.adjustToxLoss(-3 * removed) //Almost on par with dylovene despite being harder to obtain in bulk. Nerf if this causes problems.
-/datum/reagent/drink/juice/gelatin
- name = REAGENT_ID_GELATIN
- id = REAGENT_GELATIN
- description = "It doesnt taste like anything."
- taste_description = REAGENT_ID_NOTHING
- nutrition = 0
- color = "#aaabcf"
-
- glass_name = REAGENT_ID_GELATIN
- glass_desc = "It's like flavourless slime."
-
/datum/reagent/drink/bubbleteawatermelon
name = REAGENT_BUBBLETEAWATERMELON
- id = REAGENT_BUBBLETEAWATERMELON
+ id = REAGENT_ID_BUBBLETEAWATERMELON
description = "A tea with milk and watermelon in it and gelatin balls as well."
taste_description = "creamy tea and watermelon"
color = "#b83333"
@@ -682,16 +671,6 @@
//////////////////////////////////////////////
//YW drinks
-/datum/reagent/drink/lovepotion_yw
- name = REAGENT_STRAWBERRYLOVEPOTION
- id = REAGENT_ID_STRAWBERRYLOVEPOTION
- description = "Creamy strawberries and sugar, simple and sweet."
- taste_description = "strawberries and cream"
- color = "#fc8a8a" // rgb(252, 138, 138)
-
- glass_name = "Love Potion"
- glass_desc = "Love me tender, love me sweet."
-
/datum/reagent/ethanol/wormblood
name = REAGENT_WORMBLOOD
id = REAGENT_ID_WORMBLOOD