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