Files
CHOMPstation/code/modules/reagents/Chemistry-Recipes.dm
ReddeyfishVorandGitHub 768887d85a Virgo merge (#107)
* Move pilot helmets from southern_cross to main files, they are used on multiple maps now.

* Ports export reports (#5051)

* Ports export reports

* Absolute pathing, small touchups

* remove both layers

* POLARIS: No string compare for assistants

* Make turf obfuscation lists lazy

* Improve two image cleanups

* POLARIS: zshadows should be as invisible as their origin

* POLARIS: Allow alteration of mob default see_invisible

* say() safety check on client

Spawn keeps it from destroying all say(), thankfully, but needs to be fixed.

* POLARIS: Reduce double admin logs

* POLARIS: Clean up adminpm logs

* POLARIS: Communicator small refactor

* POLARIS: UI Tweak involving species rarity

* POLARIS: Allow species-specific statpanels

* POLARIS: "0x32" is not a valid single-bit flag

* POLARIS: Lazylen species restricted list

* POLARIS: Prevent ghosts from ejecting borgs from rechargers

* POLARIS: Make borg recharger test more robust

* POLARIS: Another recharger fix

* Fix nif logs

* Removes some problematic HIDEJUMPSUIT flags

* Camera fix

* adds statue

* adds statue

* Revert "adds statue"

This reverts commit f1c9193797.

* POLARIS: Improve robot and typing overlays

* Change to Teshari to test for bug

Removing these, to see if they are related to the Teshari bug. These are the only two unique sprite features that I can see.

* Promethean tweaks (hunger, regen time)

* Xenoarch Multitool & Xenoarch Excavation Drill (#5058)

* Xenoarch Multitool & Xenoarch Excavation Drill

* Makes the tool work better

* Cuts down on lines & left comments

* change to m

* Ports antibiotics overhaul (#5050)

* Ports antibiotics overhaul

* Update the rest of the places "spaceacillin" is used where antibiotics is meant.

* Antibiotics port compiles

* Fixes the drone borg ID thing AGAIN. (#5080)

* Fixes the drone borg ID thing

* Updates tracking implant description

* Update tools_pickaxe_vr.dm

* Removes excavation drill

* Fixes default synth tails necessitating potentially harmful mystery delays in mannequin generation.
-Now get_tail_image() can check the owner's syntheticness without having to wait for something else to call it whenever/wherever the fuck it happens.

* Fixes missing pixel on human ass.

* Update update_icons_vr.dm

* absolute pathing

* added slashes. No idea for what, but I don't want anyone to ask me to do it because they have OCD

* Some size stuff for Proteans

* Removes a bunch of my unused fluff stuff

* fixed vale borg flashlight eye sprites

* Changes to objects random

- Fixed the icon_state for 'structure/plushie/carp' and the random first aid kit spawner
- Added a random chance tool spawn for power tools (most of the time it should still just be regular tools)
- Adjusted the spawn rate of medkits, combat medkits should be more rare
- Cash split into its own loot item
- Plushies split into large and small plushies
- All the extra plushie spawns added to the random plushie spawn
- Eightball and conch shell added to toy spawns
- Added spawn points for the large plushies, cash, and the power tools

* Removes an inconsistency in custom species code

This line had no real use at all. It may even have contributed to various issues.
All basic humanoid species have had their appearances constructed onto an existing blank 32x32 icon_state named and called for as "nothing" inside the effects.dmi.
There are no untitled blanks either inside the effects.dmi file, so the funky deviant custom species icon_states would never have had any proper fallback.

* Re-establishes existing foundations for human icon

This line had no real use at all that I could find. It may even have contributed to various issues.
Before this line was added, all basic humanoid species have had their appearances constructed onto an actually existing blank 32x32 icon_state named and called for as "nothing" inside the effects.dmi.
There are no untitled blanks either inside the effects.dmi file, so the funky deviant species specific icon_states would never have had any proper fallback either.

No negative effects whatsoever detected in testing runs. Maybe slight framerate increase, but that was likely unrelated/placebo lmao

* Couple security otie fixes

-Fixes sec oties failing to announce arrests for sec comms.
-Adds another announcement for sec oties to confirm successfully detained crimester.

* Fixes custom accessories not showing up on things

Contradictory hardcoding babe.

* Fixes inconsistencies in organ system
-Seems the years old conversion to turn old limb names and tags and such to BP constants was never finished.
-This also fixes warning spammy diona organ tags.

* Balance pass on custom species traits

* Revert "Fixes cameras making completely black photos"

* Fixes handheld cameras

* Resh - Navy HoS Jacket

https://forum.vore-station.net/viewtopic.php?f=27&t=1065 - approved fluff app. Long time coming, lol.

(And first time 'coding'/using github to change files. hope I did it right. Oof.)

* Increase prom limb health by 60%

* changes hairstyles to use species defines

* Correct Resh custom_items.txt for HoS jacket

* (SQ-Merge) Adds in Floppy Bunny ears. (#3348)

* (SQ-Merge) Possible fix for drop-nomming (#3331)

* possible drop-nomming fix

* no longer 100% fall cushion on non-aligning prefs

* fixed some checks

* (SQ-Merge) Makes rads not kill people in stomachs (#3342)

* Makes rads not kill people in stomachs

* There we go

* Update radiation.dm

* POLARIS: Fixes #3308 (VS) - Skrell lack eyes

* POLARIS: Fixes #3280 (VS) - Typing as ghost removes overlays

Also gives them the proper ghost speech bubble. Unsure why it wasn't used!

* POLARIS: Fixes #3298 (VS) - Observer-ghosts were naked instead of dressed

* POLARIS: Fixes #3270 (VS) - Cleanbots make noise too often, reduce chance

* POLARIS: Fixes #3264 (VS) - MMI insertion sanitizes w/o numbers allowed

* POLARIS: Fixes #3237 (VS) - Cryoconsoles are lit even when unpowered

* POLARIS: Fixes #3238 (VS) - Nothing but humans can understand silicons talking

* POLARIS: Fixes #3221 (VS) - No explanation of what to do in the case of system instability

* POLARIS: Fixes #2601 (VS) - Allows mechs to continue charging after battery swap w/o moving

* POLARIS: Fixes #5282 (VS) - Allow use of pens to label pill bottles, like glass bottles

* POLARIS: Fixes #2573 (VS) - Slap cigarettes off people's faces

* POLARIS: Ventcrawling assistance

* POLARIS: Fix holders to avoid forcemoving held mob to nullspace

* POLARIS: Allow crawling through vertical pipes

* POLARIS: Weird snacks runtime

* POLARIS: Sometimes items have this set to null because they are bad.

* POLARIS: Beam weapons runtime when you shoot yourself

* POLARIS: Fix a call to the wrong update icons in prom regen

* POLARIS: Fix incorrect robolimb checks

* POLARIS: Heal robolimbs when you heal everything

Typically only used in magic and stuff, makes sense to heal both (otherwise there's no way to heal whole FBP bodies)

* POLARIS: Add eye color to shapeshifters

* POLARIS: Adds an animation thing, uses it on ventcrawls

* Fixes Suit Storage Icons
Items in suit storage should no longer vanish.

* Adds Keypad Auth to CE Office

* 44 revolvers

Port from Bay

- Addition of two more revolvers in 44 cal for variety
- Creation of rubber rounds for 44 cal (stats taken from virgo no idea how good they are in actual fights)
- Includes 44 ammo speedloaders, regular and rubber speedloaders
- Slight adjustments to allow for firing animations taken from Bay (the mosley revolver has a firing animation that plays)
- Includes in hand sprites

We did already have the 'webley' sprite (it exists in a recolored sprite). However it is a alternate sprite for the detective's 45 revolver. This brings it in as a actual proper revolver with sprites that are different than the detectives revolver, and maybe in the future can be thrown into loot lists and PoIs.

* Adds bioprinter to medical

Only internal organs work well

* Fixes feathered tesh tail and removes an useless piece of code.
-Feathered tesh tail now uses the proper dual color system now that it no longer comes with the default tail.
-Removes completely redundant body hair code from robolimb icon generation.

* byond beta back on its bullshit

* Update organ_icon.dm

* Update organ_icon.dm

* Probably maybe fixes blank lines for prey

* Fixes incorrect camera naming/networks. Fixes #3353

* Nanoui now supports use of multiple templates (#5105)

* Nanoui now supports use of multiple templates

* Removing debug code, indentation

* Indentation

* Arranges lots of things into planes (#5072)

* Rearranges a billion things into planes

* Make cryotubes fancy

* Update Travis

* Fix hiding logic

* Lore-Compliant Oculum News Channel (#5111)

* adds an e-reader full of news to the loadout

* Political Almanac -> Pocket Newscaster

* new news channel containing lore-compliant news that's not bad

* prettified lorecodex, added a month's worth of news (#5112)

* prettified lorecodex : added a month's worth of news

* what the hell elgie

* all according to kaikoku

* Grant remote profile access to R_DEBUG holders

* Fix for MOB_CAN_SEE_PLANE

* Normal brute kits disinfect wounds

* Fixes fullbright mode hiding lighting overlays.

Fullbright plane master being above lighting plane master is important, shouldn't be removed.

* Fixes machines being below tables they should sit upon.

* Fixes Runtime in logging.dm,61

* Removes vials

* Update and rename pai_manifest.tmpl to crew_manifest.tmpl

* Change of template

* Fixes infinite loop in FBP naming w/o client

* Adds Map Template Groups
Adds ability to have many different 'versions' of a PoI, yet only having one show up per round.
An example on how to do this is provided with Radio Free Sif (aka DJOutpost).
Just make sure all the different versions have the same 'template_group' value.

* Adds a message on emag to the battle arcade machine. (#5129)

* Updates one arcade machine emag message to to_chat, adds another.

* Returns 1 in emag_act for orion trail.

* Converts a bunch of stuff to macros. Should probably not break anything.

* Fixes an improper macro usage.

* Attempts to fix all 20 errors.

* Makes syndie dufflebags hint that they let you move faster

* Fixes untagged sorting junction

* Actually adds adhoc_fallback to pilot headsets

* Map fixes and tweaks

- Flashers in brig cells now should work, extra floor flash in communal brig to deal with crims.
- Inproper access, SMES rooms.
- Trader start point being dark now fixed.
- Medical Vendor Plus has more advanced burn and trauma kits. Also splints.
- Cell 1 and 2 in the brig can now be accessed by detectives.
- Additional r-walls next to the engine room to help with rads.
- Floor decals in a couple areas.
- RD office now has its telescreen back.

* Fix unused variable warnings.

* Fix light/camera layers for macros and fix constants for them too.

* Updates changelog

* Camera types exist to determine networks!

* Reverted use of 'usr' back to 'user' from commit 05fd53ebcc

* Fixes a bug. It's flatland zorren. 

Fixes #3376

* Fixes wallet-HUD interaction issues. (#5130)

* Fixes wallet-HUD interaction issues.

* Fixes HUDs, too. Forgot to commit this the first time. Also hopefully didn't change the map to examplemap.

* Fixes an indentation error.

* Nerfs solargrub drain speed.

Due to the lack of saturation in the moderate event container, solargrubs show up way too frequently, and changing the frequency doesn't help. The container has to pick. This change will just bump the drain speed down so severely, that if you kill one or two grubs, the station should barely feel the impact anymore. As opposed to having to kill 4/5 grubs on average.

Gradual nerfs seem logical, as grubs get more and mroe of a day-to-day experience, and most people know about them now. Time to stop the witch hunting for those annoying grubs :p

* In which MC is dumb. Actually removes network override

* Initial cleanup/changes

* More optimizations for character joins

* Switch cables and pipes to use define constants instead of literals for layers.

Also fix a few things to be on the correct plane.  Basically the under-floor stuff is supposed to be on PLATING_PLANE.
Portable atmospherics go on object layer so they are above stationary machinery, given that they move around.
Fixed wires to be on top of pipes like they used to be, otherwise they'd be obscured too often.

* Don't kick admin observers for inactivity.  They might be waiting for ahelps.

* Fixes vox not having hardsuit sprites. Uses the new defines.

* Replaces base egun sprite

* Small fixes and ports discovered during merge. (#5138)

* POLARIS: No string compare for assistants

* POLARIS: Move these planes to more useful places

* POLARIS: Only spam ghosts with chat messages from things with real clients

* Fix small forgotten lines of text accidentally left out of VS syncs.

* Fix typo'd plane in lighting.dm and remove redundant definitions.

* Fixes a bunch of simple animal vore icon issues.

* Fixes Pathing

* Small Shock/Holo collar tweaks.
-Updates their old >> dialogue.
-Makes shock collars taggable.

Was gonna fix them showing up in forced lowercase on people but that turned out to be a separate polaris issue that I just opened a fix for up there.

* more fixes etc

* Update solargrub.dm

* Improves contrasts on sprites and removes the need for mirroring upstream sprites

* adds generic gibs to vore mob icons to prevent sneks

* Adds a bunch of stuff to cargo selection.
-Xenowear crate, 13 non-random xenowear items for 100 points.
-Teshari smocks crate, comes with all the 5 basic colors for 25 points.
-Teshari undercoats, comes with 4 random colors from basic and grey selection for 20 points.
-Teshari undercoats black, comes with 4 random colors from the black trim selection for 20 points.
-Teshari cloaks, comes with 4 random colors from basic and grey selection for 40 points.
-Teshari cloaks black, comes with 4 random colors from the black trim selection for 40 points.
-Utility uniforms, comes with the 3 loadout utility uniforms (black/blue/grey) for 30 points.
-Skirts crate, comes with the 10 regular type skirts for 40 points.
-Varsity jackets, comes with the set of 6 colors for 60 points.
-Leather gear crate, comes with 5 random items from a selection of 21 more or less tough/kinky gear for 50 points.
-Eyewear crate, comes with 11 cosmetic and/or prescription pieces for 50 points.
-Gloves crate, comes with 4 random gloves with a chance to hit a couple fancier ones among the basic colors for 40 points.
-Boots crate, comes with 3 random pairs of boots freely available in loadout for 60 points.
-Taurbags crate, comes with the 3 universal saddlebags we have (basic/robust/vest) for 60 points.
-Cuisine crate, comes with 5 random foods from a list of varying cultural fanciness for 25 points.
-Burger crate, comes with 5 random basic burgers for 15 points.
-Special burger crate, comes with 3 random special burgers for 60 points.
-Bakery products, comes with 5 random bakery products for 15 points.
-Cakes crate, comes with 5 random cakes for 50 points.
-Mexican food crate, comes with 5 random mexican foods for 15 points.
-Asian food crate, comes with 5 random asian foods for 15 points.
-Action figures crate, comes with 5 random figures for 50 points.
-Tabletop miniatures crate, delivers the set of those characters for 30 points.
-Plushies crate, comes with 3 random plushies for 30 points.

* Changes wedding rings to be a subtype of ring

Also moves them to their own .dm, since they're now a subtype of the thing in rings.dm. Also changed bethrothed to spouse, as the former is usually before marriage and not after.

Benefits of this include: Being able to wear gloves over wedding rings. Making them tiny instead of small. Making their gender neuter instead of plural, so it wont say "some wedding ring" when you examine someone wearing them. Probably more good things.

Issue reported by HzDonut.

* Cargo pack tweaks.

* Adds a machine for recoloring apparel ingame.
-Not mapped in currently.
-Still unsure whether to have it whitelisted for white/grey items only or to let people have their fun experimenting on nasty aesthetics.
-Also supports bags and belts. Yes, I've heard the pleas of the people not liking the default grey being the only public backpack option there is.

* Reverts gauze disinfecting until a proper solution can be put in place.

* Fixed mesons NIFSoft overlay not highlighting open spaces above

* Fixes #3368 - Teleporting now often respects dropnom pref

* Fixes #3344 - Holocarp set DM_HOLD when holodeck is safe

* Squashed commit of the following:

commit f55edb98499b600186be9f58c0d245b454479b74
Author: Verkister <superverkelian@hotmail.com>
Date:   Sun Apr 8 17:05:19 2018 +0300

    we'll see about that whitelist crap later then

commit 186ce2aba274c4009c42a730d1ba7c67dddf8ea6
Author: Verkister <superverkelian@hotmail.com>
Date:   Sun Apr 8 16:32:08 2018 +0300

    screw you too travis

commit 470789300bda3949de4027dc8e2c25ae8427eaae
Author: Verkister <superverkelian@hotmail.com>
Date:   Sun Apr 8 16:10:29 2018 +0300

    Update painter_vr.dm

commit e9dee86b0cb84172c95f3a91ba73ce0b2661820c
Author: Verkister <superverkelian@hotmail.com>
Date:   Sun Apr 8 15:51:37 2018 +0300

    Update painter_vr.dm

* allows meteors to be deflected by baseball bats

* snib

* oh, and the DME, too

* fixes the meteor refusing to move at all after being deflected

* done

* Fix shuttle corner turfs disappearing when shuttle moves.

When shuttles land on a turf, it takes the appearance of the turf it lands on as an underlay.  Must make sure this underlay is on FLOAT_PLANE otherwise it will likely end up OVER the turf itself.

* Set appropriate vars for persisting adminspawned characters

* Minor Psych office tweaks. Closes 2090

* Adds compact defib to CC medbay. Closes #2287

* Makes the door button in EVA ACTUALLY WORK

* Squashed commit of the following:

commit bd470fd0276e83fa1516cc1b966308165d081b1b
Author: Verkister <superverkelian@hotmail.com>
Date:   Tue Apr 10 20:45:00 2018 +0300

    Update painter_vr.dm

commit 12e39bcec9b717d477a64aca0f8dfe917917986b
Author: Verkister <superverkelian@hotmail.com>
Date:   Mon Apr 9 09:34:50 2018 +0300

    Update painter_vr.dm

* Reduce abduction chance 1%->0.5%, add logs

* Removes Camilla's plush as per request

* Some protean fixes (regen, size as blob, gender)

* switch map to tgm for merge

* convert map to tgm for merge
2018-04-11 17:14:22 -07:00

2247 lines
66 KiB
Plaintext

//Chemical Reactions - Initialises all /datum/chemical_reaction into a list
// It is filtered into multiple lists within a list.
// For example:
// chemical_reaction_list["phoron"] is a list of all reactions relating to phoron
// Note that entries in the list are NOT duplicated. So if a reaction pertains to
// more than one chemical it will still only appear in only one of the sublists.
/proc/initialize_chemical_reactions()
var/paths = typesof(/datum/chemical_reaction) - /datum/chemical_reaction
chemical_reactions_list = list()
for(var/path in paths)
var/datum/chemical_reaction/D = new path()
if(D.required_reagents && D.required_reagents.len)
var/reagent_id = D.required_reagents[1]
if(!chemical_reactions_list[reagent_id])
chemical_reactions_list[reagent_id] = list()
chemical_reactions_list[reagent_id] += D
//helper that ensures the reaction rate holds after iterating
//Ex. REACTION_RATE(0.3) means that 30% of the reagents will react each chemistry tick (~2 seconds by default).
#define REACTION_RATE(rate) (1.0 - (1.0-rate)**(1.0/PROCESS_REACTION_ITER))
//helper to define reaction rate in terms of half-life
//Ex.
//HALF_LIFE(0) -> Reaction completes immediately (default chems)
//HALF_LIFE(1) -> Half of the reagents react immediately, the rest over the following ticks.
//HALF_LIFE(2) -> Half of the reagents are consumed after 2 chemistry ticks.
//HALF_LIFE(3) -> Half of the reagents are consumed after 3 chemistry ticks.
#define HALF_LIFE(ticks) (ticks? 1.0 - (0.5)**(1.0/(ticks*PROCESS_REACTION_ITER)) : 1.0)
/datum/chemical_reaction
var/name = null
var/id = null
var/result = null
var/list/required_reagents = list()
var/list/catalysts = list()
var/list/inhibitors = list()
var/result_amount = 0
//how far the reaction proceeds each time it is processed. Used with either REACTION_RATE or HALF_LIFE macros.
var/reaction_rate = HALF_LIFE(0)
//if less than 1, the reaction will be inhibited if the ratio of products/reagents is too high.
//0.5 = 50% yield -> reaction will only proceed halfway until products are removed.
var/yield = 1.0
//If limits on reaction rate would leave less than this amount of any reagent (adjusted by the reaction ratios),
//the reaction goes to completion. This is to prevent reactions from going on forever with tiny reagent amounts.
var/min_reaction = 2
var/mix_message = "The solution begins to bubble."
var/reaction_sound = 'sound/effects/bubbles.ogg'
var/log_is_important = 0 // If this reaction should be considered important for logging. Important recipes message admins when mixed, non-important ones just log to file.
/datum/chemical_reaction/proc/can_happen(var/datum/reagents/holder)
//check that all the required reagents are present
if(!holder.has_all_reagents(required_reagents))
return 0
//check that all the required catalysts are present in the required amount
if(!holder.has_all_reagents(catalysts))
return 0
//check that none of the inhibitors are present in the required amount
if(holder.has_any_reagent(inhibitors))
return 0
return 1
/datum/chemical_reaction/proc/calc_reaction_progress(var/datum/reagents/holder, var/reaction_limit)
var/progress = reaction_limit * reaction_rate //simple exponential progression
//calculate yield
if(1-yield > 0.001) //if yield ratio is big enough just assume it goes to completion
/*
Determine the max amount of product by applying the yield condition:
(max_product/result_amount) / reaction_limit == yield/(1-yield)
We make use of the fact that:
reaction_limit = (holder.get_reagent_amount(reactant) / required_reagents[reactant]) of the limiting reagent.
*/
var/yield_ratio = yield/(1-yield)
var/max_product = yield_ratio * reaction_limit * result_amount //rearrange to obtain max_product
var/yield_limit = max(0, max_product - holder.get_reagent_amount(result))/result_amount
progress = min(progress, yield_limit) //apply yield limit
//apply min reaction progress - wasn't sure if this should go before or after applying yield
//I guess people can just have their miniscule reactions go to completion regardless of yield.
for(var/reactant in required_reagents)
var/remainder = holder.get_reagent_amount(reactant) - progress*required_reagents[reactant]
if(remainder <= min_reaction*required_reagents[reactant])
progress = reaction_limit
break
return progress
/datum/chemical_reaction/proc/process(var/datum/reagents/holder)
//determine how far the reaction can proceed
var/list/reaction_limits = list()
for(var/reactant in required_reagents)
reaction_limits += holder.get_reagent_amount(reactant) / required_reagents[reactant]
//determine how far the reaction proceeds
var/reaction_limit = min(reaction_limits)
var/progress_limit = calc_reaction_progress(holder, reaction_limit)
var/reaction_progress = min(reaction_limit, progress_limit) //no matter what, the reaction progress cannot exceed the stoichiometric limit.
//need to obtain the new reagent's data before anything is altered
var/data = send_data(holder, reaction_progress)
//remove the reactants
for(var/reactant in required_reagents)
var/amt_used = required_reagents[reactant] * reaction_progress
holder.remove_reagent(reactant, amt_used, safety = 1)
//add the product
var/amt_produced = result_amount * reaction_progress
if(result)
holder.add_reagent(result, amt_produced, data, safety = 1)
on_reaction(holder, amt_produced)
return reaction_progress
//called when a reaction processes
/datum/chemical_reaction/proc/on_reaction(var/datum/reagents/holder, var/created_volume)
return
//called after processing reactions, if they occurred
/datum/chemical_reaction/proc/post_reaction(var/datum/reagents/holder)
var/atom/container = holder.my_atom
if(mix_message && container && !ismob(container))
var/turf/T = get_turf(container)
var/list/seen = viewers(4, T)
for(var/mob/M in seen)
M.show_message("<span class='notice'>\icon[container] [mix_message]</span>", 1)
playsound(T, reaction_sound, 80, 1)
//obtains any special data that will be provided to the reaction products
//this is called just before reactants are removed.
/datum/chemical_reaction/proc/send_data(var/datum/reagents/holder, var/reaction_limit)
return null
/* Common reactions */
/datum/chemical_reaction/inaprovaline
name = "Inaprovaline"
id = "inaprovaline"
result = "inaprovaline"
required_reagents = list("oxygen" = 1, "carbon" = 1, "sugar" = 1)
result_amount = 3
/datum/chemical_reaction/dylovene
name = "Dylovene"
id = "anti_toxin"
result = "anti_toxin"
required_reagents = list("silicon" = 1, "potassium" = 1, "nitrogen" = 1)
result_amount = 3
/datum/chemical_reaction/carthatoline
name = "Carthatoline"
id = "carthatoline"
result = "carthatoline"
required_reagents = list("anti_toxin" = 1, "carbon" = 2, "phoron" = 0.1)
catalysts = list("phoron" = 1)
result_amount = 2
/datum/chemical_reaction/tramadol
name = "Tramadol"
id = "tramadol"
result = "tramadol"
required_reagents = list("inaprovaline" = 1, "ethanol" = 1, "oxygen" = 1)
result_amount = 3
/datum/chemical_reaction/paracetamol
name = "Paracetamol"
id = "paracetamol"
result = "paracetamol"
required_reagents = list("tramadol" = 1, "sugar" = 1, "water" = 1)
result_amount = 3
/datum/chemical_reaction/oxycodone
name = "Oxycodone"
id = "oxycodone"
result = "oxycodone"
required_reagents = list("ethanol" = 1, "tramadol" = 1)
catalysts = list("phoron" = 5)
result_amount = 1
/datum/chemical_reaction/sterilizine
name = "Sterilizine"
id = "sterilizine"
result = "sterilizine"
required_reagents = list("ethanol" = 1, "anti_toxin" = 1, "chlorine" = 1)
result_amount = 3
/datum/chemical_reaction/silicate
name = "Silicate"
id = "silicate"
result = "silicate"
required_reagents = list("aluminum" = 1, "silicon" = 1, "oxygen" = 1)
result_amount = 3
/datum/chemical_reaction/mutagen
name = "Unstable mutagen"
id = "mutagen"
result = "mutagen"
required_reagents = list("radium" = 1, "phosphorus" = 1, "chlorine" = 1)
result_amount = 3
/datum/chemical_reaction/water
name = "Water"
id = "water"
result = "water"
required_reagents = list("oxygen" = 1, "hydrogen" = 2)
result_amount = 1
/datum/chemical_reaction/thermite
name = "Thermite"
id = "thermite"
result = "thermite"
required_reagents = list("aluminum" = 1, "iron" = 1, "oxygen" = 1)
result_amount = 3
/datum/chemical_reaction/space_drugs
name = "Space Drugs"
id = "space_drugs"
result = "space_drugs"
required_reagents = list("mercury" = 1, "sugar" = 1, "lithium" = 1)
result_amount = 3
/datum/chemical_reaction/lube
name = "Space Lube"
id = "lube"
result = "lube"
required_reagents = list("water" = 1, "silicon" = 1, "oxygen" = 1)
result_amount = 4
/datum/chemical_reaction/pacid
name = "Polytrinic acid"
id = "pacid"
result = "pacid"
required_reagents = list("sacid" = 1, "chlorine" = 1, "potassium" = 1)
result_amount = 3
/datum/chemical_reaction/synaptizine
name = "Synaptizine"
id = "synaptizine"
result = "synaptizine"
required_reagents = list("sugar" = 1, "lithium" = 1, "water" = 1)
result_amount = 3
/datum/chemical_reaction/hyronalin
name = "Hyronalin"
id = "hyronalin"
result = "hyronalin"
required_reagents = list("radium" = 1, "anti_toxin" = 1)
result_amount = 2
/datum/chemical_reaction/arithrazine
name = "Arithrazine"
id = "arithrazine"
result = "arithrazine"
required_reagents = list("hyronalin" = 1, "hydrogen" = 1)
result_amount = 2
/datum/chemical_reaction/impedrezene
name = "Impedrezene"
id = "impedrezene"
result = "impedrezene"
required_reagents = list("mercury" = 1, "oxygen" = 1, "sugar" = 1)
result_amount = 2
/datum/chemical_reaction/kelotane
name = "Kelotane"
id = "kelotane"
result = "kelotane"
required_reagents = list("silicon" = 1, "carbon" = 1)
result_amount = 2
log_is_important = 1
/datum/chemical_reaction/peridaxon
name = "Peridaxon"
id = "peridaxon"
result = "peridaxon"
required_reagents = list("bicaridine" = 2, "clonexadone" = 2)
catalysts = list("phoron" = 5)
result_amount = 2
/datum/chemical_reaction/osteodaxon
name = "Osteodaxon"
id = "osteodaxon"
result = "osteodaxon"
required_reagents = list("bicaridine" = 2, "phoron" = 0.1, "carpotoxin" = 1)
catalysts = list("phoron" = 5)
inhibitors = list("clonexadone" = 1) // Messes with cryox
result_amount = 2
/datum/chemical_reaction/virus_food
name = "Virus Food"
id = "virusfood"
result = "virusfood"
required_reagents = list("water" = 1, "milk" = 1)
result_amount = 5
/datum/chemical_reaction/leporazine
name = "Leporazine"
id = "leporazine"
result = "leporazine"
required_reagents = list("silicon" = 1, "copper" = 1)
catalysts = list("phoron" = 5)
result_amount = 2
/datum/chemical_reaction/cryptobiolin
name = "Cryptobiolin"
id = "cryptobiolin"
result = "cryptobiolin"
required_reagents = list("potassium" = 1, "oxygen" = 1, "sugar" = 1)
result_amount = 3
/datum/chemical_reaction/tricordrazine
name = "Tricordrazine"
id = "tricordrazine"
result = "tricordrazine"
required_reagents = list("inaprovaline" = 1, "anti_toxin" = 1)
result_amount = 2
/datum/chemical_reaction/alkysine
name = "Alkysine"
id = "alkysine"
result = "alkysine"
required_reagents = list("chlorine" = 1, "nitrogen" = 1, "anti_toxin" = 1)
result_amount = 2
/datum/chemical_reaction/dexalin
name = "Dexalin"
id = "dexalin"
result = "dexalin"
required_reagents = list("oxygen" = 2, "phoron" = 0.1)
catalysts = list("phoron" = 1)
inhibitors = list("water" = 1) // Messes with cryox
result_amount = 1
/datum/chemical_reaction/dermaline
name = "Dermaline"
id = "dermaline"
result = "dermaline"
required_reagents = list("oxygen" = 1, "phosphorus" = 1, "kelotane" = 1)
result_amount = 3
/datum/chemical_reaction/dexalinp
name = "Dexalin Plus"
id = "dexalinp"
result = "dexalinp"
required_reagents = list("dexalin" = 1, "carbon" = 1, "iron" = 1)
result_amount = 3
/datum/chemical_reaction/bicaridine
name = "Bicaridine"
id = "bicaridine"
result = "bicaridine"
required_reagents = list("inaprovaline" = 1, "carbon" = 1)
inhibitors = list("sugar" = 1) // Messes up with inaprovaline
result_amount = 2
/datum/chemical_reaction/myelamine
name = "Myelamine"
id = "myelamine"
result = "myelamine"
required_reagents = list("bicaridine" = 1, "iron" = 2, "spidertoxin" = 1)
result_amount = 2
/datum/chemical_reaction/hyperzine
name = "Hyperzine"
id = "hyperzine"
result = "hyperzine"
required_reagents = list("sugar" = 1, "phosphorus" = 1, "sulfur" = 1)
result_amount = 3
/datum/chemical_reaction/stimm
name = "Stimm"
id = "stimm"
result = "stimm"
required_reagents = list("left4zed" = 1, "fuel" = 1)
catalysts = list("fuel" = 5)
result_amount = 2
/datum/chemical_reaction/ryetalyn
name = "Ryetalyn"
id = "ryetalyn"
result = "ryetalyn"
required_reagents = list("arithrazine" = 1, "carbon" = 1)
result_amount = 2
/datum/chemical_reaction/cryoxadone
name = "Cryoxadone"
id = "cryoxadone"
result = "cryoxadone"
required_reagents = list("dexalin" = 1, "water" = 1, "oxygen" = 1)
result_amount = 3
/datum/chemical_reaction/clonexadone
name = "Clonexadone"
id = "clonexadone"
result = "clonexadone"
required_reagents = list("cryoxadone" = 1, "sodium" = 1, "phoron" = 0.1)
catalysts = list("phoron" = 5)
result_amount = 2
/datum/chemical_reaction/spaceacillin
name = "Spaceacillin"
id = "spaceacillin"
result = "spaceacillin"
required_reagents = list("cryptobiolin" = 1, "inaprovaline" = 1)
result_amount = 2
/datum/chemical_reaction/corophizine
name = "Corophizine"
id = "corophizine"
result = "corophizine"
required_reagents = list("spaceacillin" = 1, "carbon" = 1, "phoron" = 0.1)
catalysts = list("phoron" = 5)
result_amount = 2
/datum/chemical_reaction/imidazoline
name = "imidazoline"
id = "imidazoline"
result = "imidazoline"
required_reagents = list("carbon" = 1, "hydrogen" = 1, "anti_toxin" = 1)
result_amount = 2
/datum/chemical_reaction/ethylredoxrazine
name = "Ethylredoxrazine"
id = "ethylredoxrazine"
result = "ethylredoxrazine"
required_reagents = list("oxygen" = 1, "anti_toxin" = 1, "carbon" = 1)
result_amount = 3
/datum/chemical_reaction/soporific
name = "Soporific"
id = "stoxin"
result = "stoxin"
required_reagents = list("chloralhydrate" = 1, "sugar" = 4)
inhibitors = list("phosphorus") // Messes with the smoke
result_amount = 5
/datum/chemical_reaction/chloralhydrate
name = "Chloral Hydrate"
id = "chloralhydrate"
result = "chloralhydrate"
required_reagents = list("ethanol" = 1, "chlorine" = 3, "water" = 1)
result_amount = 1
/datum/chemical_reaction/potassium_chloride
name = "Potassium Chloride"
id = "potassium_chloride"
result = "potassium_chloride"
required_reagents = list("sodiumchloride" = 1, "potassium" = 1)
result_amount = 2
/datum/chemical_reaction/potassium_chlorophoride
name = "Potassium Chlorophoride"
id = "potassium_chlorophoride"
result = "potassium_chlorophoride"
required_reagents = list("potassium_chloride" = 1, "phoron" = 1, "chloralhydrate" = 1)
result_amount = 4
/datum/chemical_reaction/zombiepowder
name = "Zombie Powder"
id = "zombiepowder"
result = "zombiepowder"
required_reagents = list("carpotoxin" = 5, "stoxin" = 5, "copper" = 5)
result_amount = 2
/datum/chemical_reaction/mindbreaker
name = "Mindbreaker Toxin"
id = "mindbreaker"
result = "mindbreaker"
required_reagents = list("silicon" = 1, "hydrogen" = 1, "anti_toxin" = 1)
result_amount = 3
/datum/chemical_reaction/lipozine
name = "Lipozine"
id = "Lipozine"
result = "lipozine"
required_reagents = list("sodiumchloride" = 1, "ethanol" = 1, "radium" = 1)
result_amount = 3
/datum/chemical_reaction/surfactant
name = "Foam surfactant"
id = "foam surfactant"
result = "fluorosurfactant"
required_reagents = list("fluorine" = 2, "carbon" = 2, "sacid" = 1)
result_amount = 5
/datum/chemical_reaction/ammonia
name = "Ammonia"
id = "ammonia"
result = "ammonia"
required_reagents = list("hydrogen" = 3, "nitrogen" = 1)
result_amount = 3
/datum/chemical_reaction/diethylamine
name = "Diethylamine"
id = "diethylamine"
result = "diethylamine"
required_reagents = list ("ammonia" = 1, "ethanol" = 1)
result_amount = 2
/datum/chemical_reaction/space_cleaner
name = "Space cleaner"
id = "cleaner"
result = "cleaner"
required_reagents = list("ammonia" = 1, "water" = 1)
result_amount = 2
/datum/chemical_reaction/plantbgone
name = "Plant-B-Gone"
id = "plantbgone"
result = "plantbgone"
required_reagents = list("toxin" = 1, "water" = 4)
result_amount = 5
/datum/chemical_reaction/foaming_agent
name = "Foaming Agent"
id = "foaming_agent"
result = "foaming_agent"
required_reagents = list("lithium" = 1, "hydrogen" = 1)
result_amount = 1
/datum/chemical_reaction/glycerol
name = "Glycerol"
id = "glycerol"
result = "glycerol"
required_reagents = list("cornoil" = 3, "sacid" = 1)
result_amount = 1
/datum/chemical_reaction/sodiumchloride
name = "Sodium Chloride"
id = "sodiumchloride"
result = "sodiumchloride"
required_reagents = list("sodium" = 1, "chlorine" = 1)
result_amount = 2
/datum/chemical_reaction/condensedcapsaicin
name = "Condensed Capsaicin"
id = "condensedcapsaicin"
result = "condensedcapsaicin"
required_reagents = list("capsaicin" = 2)
catalysts = list("phoron" = 5)
result_amount = 1
/datum/chemical_reaction/coolant
name = "Coolant"
id = "coolant"
result = "coolant"
required_reagents = list("tungsten" = 1, "oxygen" = 1, "water" = 1)
result_amount = 3
log_is_important = 1
/datum/chemical_reaction/rezadone
name = "Rezadone"
id = "rezadone"
result = "rezadone"
required_reagents = list("carpotoxin" = 1, "cryptobiolin" = 1, "copper" = 1)
result_amount = 3
/datum/chemical_reaction/lexorin
name = "Lexorin"
id = "lexorin"
result = "lexorin"
required_reagents = list("phoron" = 1, "hydrogen" = 1, "nitrogen" = 1)
result_amount = 3
/datum/chemical_reaction/methylphenidate
name = "Methylphenidate"
id = "methylphenidate"
result = "methylphenidate"
required_reagents = list("mindbreaker" = 1, "hydrogen" = 1)
result_amount = 3
/datum/chemical_reaction/citalopram
name = "Citalopram"
id = "citalopram"
result = "citalopram"
required_reagents = list("mindbreaker" = 1, "carbon" = 1)
result_amount = 3
/datum/chemical_reaction/paroxetine
name = "Paroxetine"
id = "paroxetine"
result = "paroxetine"
required_reagents = list("mindbreaker" = 1, "oxygen" = 1, "inaprovaline" = 1)
result_amount = 3
/datum/chemical_reaction/neurotoxin
name = "Neurotoxin"
id = "neurotoxin"
result = "neurotoxin"
required_reagents = list("gargleblaster" = 1, "stoxin" = 1)
result_amount = 2
/datum/chemical_reaction/luminol
name = "Luminol"
id = "luminol"
result = "luminol"
required_reagents = list("hydrogen" = 2, "carbon" = 2, "ammonia" = 2)
result_amount = 6
/* Solidification */
/datum/chemical_reaction/solidification
name = "Solid Iron"
id = "solidiron"
result = null
required_reagents = list("frostoil" = 5, "iron" = REAGENTS_PER_SHEET)
result_amount = 1
var/sheet_to_give = /obj/item/stack/material/iron
/datum/chemical_reaction/solidification/on_reaction(var/datum/reagents/holder, var/created_volume)
new sheet_to_give(get_turf(holder.my_atom), created_volume)
return
/datum/chemical_reaction/solidification/phoron
name = "Solid Phoron"
id = "solidphoron"
required_reagents = list("frostoil" = 5, "phoron" = REAGENTS_PER_SHEET)
sheet_to_give = /obj/item/stack/material/phoron
/datum/chemical_reaction/solidification/silver
name = "Solid Silver"
id = "solidsilver"
required_reagents = list("frostoil" = 5, "silver" = REAGENTS_PER_SHEET)
sheet_to_give = /obj/item/stack/material/silver
/datum/chemical_reaction/solidification/gold
name = "Solid Gold"
id = "solidgold"
required_reagents = list("frostoil" = 5, "gold" = REAGENTS_PER_SHEET)
sheet_to_give = /obj/item/stack/material/gold
/datum/chemical_reaction/solidification/platinum
name = "Solid Platinum"
id = "solidplatinum"
required_reagents = list("frostoil" = 5, "platinum" = REAGENTS_PER_SHEET)
sheet_to_give = /obj/item/stack/material/platinum
/datum/chemical_reaction/solidification/uranium
name = "Solid Uranium"
id = "soliduranium"
required_reagents = list("frostoil" = 5, "uranium" = REAGENTS_PER_SHEET)
sheet_to_give = /obj/item/stack/material/uranium
/datum/chemical_reaction/solidification/hydrogen
name = "Solid Hydrogen"
id = "solidhydrogen"
required_reagents = list("frostoil" = 100, "hydrogen" = REAGENTS_PER_SHEET)
sheet_to_give = /obj/item/stack/material/mhydrogen
// These are from Xenobio.
/datum/chemical_reaction/solidification/steel
name = "Solid Steel"
id = "solidsteel"
required_reagents = list("frostoil" = 5, "steel" = REAGENTS_PER_SHEET)
sheet_to_give = /obj/item/stack/material/steel
/datum/chemical_reaction/solidification/plasteel
name = "Solid Plasteel"
id = "solidplasteel"
required_reagents = list("frostoil" = 10, "plasteel" = REAGENTS_PER_SHEET)
sheet_to_give = /obj/item/stack/material/plasteel
/datum/chemical_reaction/plastication
name = "Plastic"
id = "solidplastic"
result = null
required_reagents = list("pacid" = 1, "plasticide" = 2)
result_amount = 1
/datum/chemical_reaction/plastication/on_reaction(var/datum/reagents/holder, var/created_volume)
new /obj/item/stack/material/plastic(get_turf(holder.my_atom), created_volume)
return
/* Grenade reactions */
/datum/chemical_reaction/explosion_potassium
name = "Explosion"
id = "explosion_potassium"
result = null
required_reagents = list("water" = 1, "potassium" = 1)
result_amount = 2
mix_message = null
/datum/chemical_reaction/explosion_potassium/on_reaction(var/datum/reagents/holder, var/created_volume)
var/datum/effect/effect/system/reagents_explosion/e = new()
e.set_up(round (created_volume/10, 1), holder.my_atom, 0, 0)
if(isliving(holder.my_atom))
e.amount *= 0.5
var/mob/living/L = holder.my_atom
if(L.stat != DEAD)
e.amount *= 0.5
else
holder.clear_reagents() //No more powergaming by creating a tiny amount of this
e.start()
return
/datum/chemical_reaction/flash_powder
name = "Flash powder"
id = "flash_powder"
result = null
required_reagents = list("aluminum" = 1, "potassium" = 1, "sulfur" = 1 )
result_amount = null
/datum/chemical_reaction/flash_powder/on_reaction(var/datum/reagents/holder, var/created_volume)
var/location = get_turf(holder.my_atom)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(2, 1, location)
s.start()
for(var/mob/living/carbon/M in viewers(world.view, location))
switch(get_dist(M, location))
if(0 to 3)
if(hasvar(M, "glasses"))
if(istype(M:glasses, /obj/item/clothing/glasses/sunglasses))
continue
M.flash_eyes()
M.Weaken(15)
if(4 to 5)
if(hasvar(M, "glasses"))
if(istype(M:glasses, /obj/item/clothing/glasses/sunglasses))
continue
M.flash_eyes()
M.Stun(5)
/datum/chemical_reaction/emp_pulse
name = "EMP Pulse"
id = "emp_pulse"
result = null
required_reagents = list("uranium" = 1, "iron" = 1) // Yes, laugh, it's the best recipe I could think of that makes a little bit of sense
result_amount = 2
/datum/chemical_reaction/emp_pulse/on_reaction(var/datum/reagents/holder, var/created_volume)
var/location = get_turf(holder.my_atom)
// 100 created volume = 4 heavy range & 7 light range. A few tiles smaller than traitor EMP grandes.
// 200 created volume = 8 heavy range & 14 light range. 4 tiles larger than traitor EMP grenades.
empulse(location, round(created_volume / 24), round(created_volume / 20), round(created_volume / 18), round(created_volume / 14), 1)
if(!isliving(holder.my_atom)) //No more powergaming by creating a tiny amount of this
holder.clear_reagents()
return
/datum/chemical_reaction/nitroglycerin
name = "Nitroglycerin"
id = "nitroglycerin"
result = "nitroglycerin"
required_reagents = list("glycerol" = 1, "pacid" = 1, "sacid" = 1)
result_amount = 2
log_is_important = 1
/datum/chemical_reaction/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)
if(isliving(holder.my_atom))
e.amount *= 0.5
var/mob/living/L = holder.my_atom
if(L.stat!=DEAD)
e.amount *= 0.5
else
holder.clear_reagents() //No more powergaming by creating a tiny amount of this
e.start()
return
/datum/chemical_reaction/napalm
name = "Napalm"
id = "napalm"
result = null
required_reagents = list("aluminum" = 1, "phoron" = 1, "sacid" = 1 )
result_amount = 1
/datum/chemical_reaction/napalm/on_reaction(var/datum/reagents/holder, var/created_volume)
var/turf/location = get_turf(holder.my_atom.loc)
for(var/turf/simulated/floor/target_tile in range(0,location))
target_tile.assume_gas("volatile_fuel", created_volume, 400+T0C)
spawn (0) target_tile.hotspot_expose(700, 400)
holder.del_reagent("napalm")
return
/datum/chemical_reaction/chemsmoke
name = "Chemsmoke"
id = "chemsmoke"
result = null
required_reagents = list("potassium" = 1, "sugar" = 1, "phosphorus" = 1)
result_amount = 0.4
/datum/chemical_reaction/chemsmoke/on_reaction(var/datum/reagents/holder, var/created_volume)
var/location = get_turf(holder.my_atom)
var/datum/effect/effect/system/smoke_spread/chem/S = new /datum/effect/effect/system/smoke_spread/chem
S.attach(location)
S.set_up(holder, created_volume, 0, location)
playsound(location, 'sound/effects/smoke.ogg', 50, 1, -3)
spawn(0)
S.start()
if(!isliving(holder.my_atom)) //No more powergaming by creating a tiny amount of this
holder.clear_reagents()
return
/datum/chemical_reaction/foam
name = "Foam"
id = "foam"
result = null
required_reagents = list("fluorosurfactant" = 1, "water" = 1)
result_amount = 2
mix_message = "The solution violently bubbles!"
/datum/chemical_reaction/foam/on_reaction(var/datum/reagents/holder, var/created_volume)
var/location = get_turf(holder.my_atom)
for(var/mob/M in viewers(5, location))
M << "<span class='warning'>The solution spews out foam!</span>"
var/datum/effect/effect/system/foam_spread/s = new()
s.set_up(created_volume, location, holder, 0)
s.start()
if(!isliving(holder.my_atom)) //No more powergaming by creating a tiny amount of this
holder.clear_reagents()
return
/datum/chemical_reaction/metalfoam
name = "Metal Foam"
id = "metalfoam"
result = null
required_reagents = list("aluminum" = 3, "foaming_agent" = 1, "pacid" = 1)
result_amount = 5
/datum/chemical_reaction/metalfoam/on_reaction(var/datum/reagents/holder, var/created_volume)
var/location = get_turf(holder.my_atom)
for(var/mob/M in viewers(5, location))
M << "<span class='warning'>The solution spews out a metalic foam!</span>"
var/datum/effect/effect/system/foam_spread/s = new()
s.set_up(created_volume, location, holder, 1)
s.start()
return
/datum/chemical_reaction/ironfoam
name = "Iron Foam"
id = "ironlfoam"
result = null
required_reagents = list("iron" = 3, "foaming_agent" = 1, "pacid" = 1)
result_amount = 5
/datum/chemical_reaction/ironfoam/on_reaction(var/datum/reagents/holder, var/created_volume)
var/location = get_turf(holder.my_atom)
for(var/mob/M in viewers(5, location))
M << "<span class='warning'>The solution spews out a metalic foam!</span>"
var/datum/effect/effect/system/foam_spread/s = new()
s.set_up(created_volume, location, holder, 2)
s.start()
return
/* Paint */
/datum/chemical_reaction/red_paint
name = "Red paint"
id = "red_paint"
result = "paint"
required_reagents = list("plasticide" = 1, "water" = 3, "marker_ink_red" = 1)
result_amount = 5
/datum/chemical_reaction/red_paint/send_data()
return "#FE191A"
/datum/chemical_reaction/orange_paint
name = "Orange paint"
id = "orange_paint"
result = "paint"
required_reagents = list("plasticide" = 1, "water" = 3, "marker_ink_orange" = 1)
result_amount = 5
/datum/chemical_reaction/orange_paint/send_data()
return "#FFBE4F"
/datum/chemical_reaction/yellow_paint
name = "Yellow paint"
id = "yellow_paint"
result = "paint"
required_reagents = list("plasticide" = 1, "water" = 3, "marker_ink_yellow" = 1)
result_amount = 5
/datum/chemical_reaction/yellow_paint/send_data()
return "#FDFE7D"
/datum/chemical_reaction/green_paint
name = "Green paint"
id = "green_paint"
result = "paint"
required_reagents = list("plasticide" = 1, "water" = 3, "marker_ink_green" = 1)
result_amount = 5
/datum/chemical_reaction/green_paint/send_data()
return "#18A31A"
/datum/chemical_reaction/blue_paint
name = "Blue paint"
id = "blue_paint"
result = "paint"
required_reagents = list("plasticide" = 1, "water" = 3, "marker_ink_blue" = 1)
result_amount = 5
/datum/chemical_reaction/blue_paint/send_data()
return "#247CFF"
/datum/chemical_reaction/purple_paint
name = "Purple paint"
id = "purple_paint"
result = "paint"
required_reagents = list("plasticide" = 1, "water" = 3, "marker_ink_purple" = 1)
result_amount = 5
/datum/chemical_reaction/purple_paint/send_data()
return "#CC0099"
/datum/chemical_reaction/grey_paint //mime
name = "Grey paint"
id = "grey_paint"
result = "paint"
required_reagents = list("plasticide" = 1, "water" = 3, "marker_ink_grey" = 1)
result_amount = 5
/datum/chemical_reaction/grey_paint/send_data()
return "#808080"
/datum/chemical_reaction/brown_paint
name = "Brown paint"
id = "brown_paint"
result = "paint"
required_reagents = list("plasticide" = 1, "water" = 3, "marker_ink_brown" = 1)
result_amount = 5
/datum/chemical_reaction/brown_paint/send_data()
return "#846F35"
/datum/chemical_reaction/blood_paint
name = "Blood paint"
id = "blood_paint"
result = "paint"
required_reagents = list("plasticide" = 1, "water" = 3, "blood" = 2)
result_amount = 5
/datum/chemical_reaction/blood_paint/send_data(var/datum/reagents/T)
var/t = T.get_data("blood")
if(t && t["blood_colour"])
return t["blood_colour"]
return "#FE191A" // Probably red
/datum/chemical_reaction/milk_paint
name = "Milk paint"
id = "milk_paint"
result = "paint"
required_reagents = list("plasticide" = 1, "water" = 3, "milk" = 5)
result_amount = 5
/datum/chemical_reaction/milk_paint/send_data()
return "#F0F8FF"
/datum/chemical_reaction/orange_juice_paint
name = "Orange juice paint"
id = "orange_juice_paint"
result = "paint"
required_reagents = list("plasticide" = 1, "water" = 3, "orangejuice" = 5)
result_amount = 5
/datum/chemical_reaction/orange_juice_paint/send_data()
return "#E78108"
/datum/chemical_reaction/tomato_juice_paint
name = "Tomato juice paint"
id = "tomato_juice_paint"
result = "paint"
required_reagents = list("plasticide" = 1, "water" = 3, "tomatojuice" = 5)
result_amount = 5
/datum/chemical_reaction/tomato_juice_paint/send_data()
return "#731008"
/datum/chemical_reaction/lime_juice_paint
name = "Lime juice paint"
id = "lime_juice_paint"
result = "paint"
required_reagents = list("plasticide" = 1, "water" = 3, "limejuice" = 5)
result_amount = 5
/datum/chemical_reaction/lime_juice_paint/send_data()
return "#365E30"
/datum/chemical_reaction/carrot_juice_paint
name = "Carrot juice paint"
id = "carrot_juice_paint"
result = "paint"
required_reagents = list("plasticide" = 1, "water" = 3, "carrotjuice" = 5)
result_amount = 5
/datum/chemical_reaction/carrot_juice_paint/send_data()
return "#973800"
/datum/chemical_reaction/berry_juice_paint
name = "Berry juice paint"
id = "berry_juice_paint"
result = "paint"
required_reagents = list("plasticide" = 1, "water" = 3, "berryjuice" = 5)
result_amount = 5
/datum/chemical_reaction/berry_juice_paint/send_data()
return "#990066"
/datum/chemical_reaction/grape_juice_paint
name = "Grape juice paint"
id = "grape_juice_paint"
result = "paint"
required_reagents = list("plasticide" = 1, "water" = 3, "grapejuice" = 5)
result_amount = 5
/datum/chemical_reaction/grape_juice_paint/send_data()
return "#863333"
/datum/chemical_reaction/poisonberry_juice_paint
name = "Poison berry juice paint"
id = "poisonberry_juice_paint"
result = "paint"
required_reagents = list("plasticide" = 1, "water" = 3, "poisonberryjuice" = 5)
result_amount = 5
/datum/chemical_reaction/poisonberry_juice_paint/send_data()
return "#863353"
/datum/chemical_reaction/watermelon_juice_paint
name = "Watermelon juice paint"
id = "watermelon_juice_paint"
result = "paint"
required_reagents = list("plasticide" = 1, "water" = 3, "watermelonjuice" = 5)
result_amount = 5
/datum/chemical_reaction/watermelon_juice_paint/send_data()
return "#B83333"
/datum/chemical_reaction/lemon_juice_paint
name = "Lemon juice paint"
id = "lemon_juice_paint"
result = "paint"
required_reagents = list("plasticide" = 1, "water" = 3, "lemonjuice" = 5)
result_amount = 5
/datum/chemical_reaction/lemon_juice_paint/send_data()
return "#AFAF00"
/datum/chemical_reaction/banana_juice_paint
name = "Banana juice paint"
id = "banana_juice_paint"
result = "paint"
required_reagents = list("plasticide" = 1, "water" = 3, "banana" = 5)
result_amount = 5
/datum/chemical_reaction/banana_juice_paint/send_data()
return "#C3AF00"
/datum/chemical_reaction/potato_juice_paint
name = "Potato juice paint"
id = "potato_juice_paint"
result = "paint"
required_reagents = list("plasticide" = 1, "water" = 3, "potatojuice" = 5)
result_amount = 5
/datum/chemical_reaction/potato_juice_paint/send_data()
return "#302000"
/datum/chemical_reaction/carbon_paint
name = "Carbon paint"
id = "carbon_paint"
result = "paint"
required_reagents = list("plasticide" = 1, "water" = 3, "carbon" = 1)
result_amount = 5
/datum/chemical_reaction/carbon_paint/send_data()
return "#333333"
/datum/chemical_reaction/aluminum_paint
name = "Aluminum paint"
id = "aluminum_paint"
result = "paint"
required_reagents = list("plasticide" = 1, "water" = 3, "aluminum" = 1)
result_amount = 5
/datum/chemical_reaction/aluminum_paint/send_data()
return "#F0F8FF"
/* Food */
/datum/chemical_reaction/food/tofu
name = "Tofu"
id = "tofu"
result = null
required_reagents = list("soymilk" = 10)
catalysts = list("enzyme" = 5)
result_amount = 1
/datum/chemical_reaction/food/tofu/on_reaction(var/datum/reagents/holder, var/created_volume)
var/location = get_turf(holder.my_atom)
for(var/i = 1, i <= created_volume, i++)
new /obj/item/weapon/reagent_containers/food/snacks/tofu(location)
return
/datum/chemical_reaction/food/chocolate_bar
name = "Chocolate Bar"
id = "chocolate_bar"
result = null
required_reagents = list("soymilk" = 2, "coco" = 2, "sugar" = 2)
result_amount = 1
/datum/chemical_reaction/food/chocolate_bar/on_reaction(var/datum/reagents/holder, var/created_volume)
var/location = get_turf(holder.my_atom)
for(var/i = 1, i <= created_volume, i++)
new /obj/item/weapon/reagent_containers/food/snacks/chocolatebar(location)
return
/datum/chemical_reaction/food/chocolate_bar2
name = "Chocolate Bar"
id = "chocolate_bar"
result = null
required_reagents = list("milk" = 2, "coco" = 2, "sugar" = 2)
result_amount = 1
/datum/chemical_reaction/food/chocolate_bar2/on_reaction(var/datum/reagents/holder, var/created_volume)
var/location = get_turf(holder.my_atom)
for(var/i = 1, i <= created_volume, i++)
new /obj/item/weapon/reagent_containers/food/snacks/chocolatebar(location)
return
/datum/chemical_reaction/drinks/hot_coco
name = "Hot Coco"
id = "hot_coco"
result = "hot_coco"
required_reagents = list("water" = 5, "coco" = 1)
result_amount = 5
/datum/chemical_reaction/food/soysauce
name = "Soy Sauce"
id = "soysauce"
result = "soysauce"
required_reagents = list("soymilk" = 4, "sacid" = 1)
result_amount = 5
/datum/chemical_reaction/food/ketchup
name = "Ketchup"
id = "ketchup"
result = "ketchup"
required_reagents = list("tomatojuice" = 2, "water" = 1, "sugar" = 1)
result_amount = 4
/datum/chemical_reaction/food/cheesewheel
name = "Cheesewheel"
id = "cheesewheel"
result = null
required_reagents = list("milk" = 40)
catalysts = list("enzyme" = 5)
result_amount = 1
/datum/chemical_reaction/food/cheesewheel/on_reaction(var/datum/reagents/holder, var/created_volume)
var/location = get_turf(holder.my_atom)
for(var/i = 1, i <= created_volume, i++)
new /obj/item/weapon/reagent_containers/food/snacks/sliceable/cheesewheel(location)
return
/datum/chemical_reaction/food/meatball
name = "Meatball"
id = "meatball"
result = null
required_reagents = list("protein" = 3, "flour" = 5)
result_amount = 3
/datum/chemical_reaction/food/meatball/on_reaction(var/datum/reagents/holder, var/created_volume)
var/location = get_turf(holder.my_atom)
for(var/i = 1, i <= created_volume, i++)
new /obj/item/weapon/reagent_containers/food/snacks/meatball(location)
return
/datum/chemical_reaction/food/dough
name = "Dough"
id = "dough"
result = null
required_reagents = list("egg" = 3, "flour" = 10)
result_amount = 1
/datum/chemical_reaction/food/dough/on_reaction(var/datum/reagents/holder, var/created_volume)
var/location = get_turf(holder.my_atom)
for(var/i = 1, i <= created_volume, i++)
new /obj/item/weapon/reagent_containers/food/snacks/dough(location)
return
/datum/chemical_reaction/food/syntiflesh
name = "Syntiflesh"
id = "syntiflesh"
result = null
required_reagents = list("blood" = 5, "clonexadone" = 5)
result_amount = 1
/datum/chemical_reaction/food/syntiflesh/on_reaction(var/datum/reagents/holder, var/created_volume)
var/location = get_turf(holder.my_atom)
for(var/i = 1, i <= created_volume, i++)
new /obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh(location)
return
/datum/chemical_reaction/hot_ramen
name = "Hot Ramen"
id = "hot_ramen"
result = "hot_ramen"
required_reagents = list("water" = 1, "dry_ramen" = 3)
result_amount = 3
/datum/chemical_reaction/hell_ramen
name = "Hell Ramen"
id = "hell_ramen"
result = "hell_ramen"
required_reagents = list("capsaicin" = 1, "hot_ramen" = 6)
result_amount = 6
/* Alcohol */
/datum/chemical_reaction/drinks/goldschlager
name = "Goldschlager"
id = "goldschlager"
result = "goldschlager"
required_reagents = list("vodka" = 10, "gold" = 1)
result_amount = 10
/datum/chemical_reaction/drinks/patron
name = "Patron"
id = "patron"
result = "patron"
required_reagents = list("tequilla" = 10, "silver" = 1)
result_amount = 10
/datum/chemical_reaction/drinks/bilk
name = "Bilk"
id = "bilk"
result = "bilk"
required_reagents = list("milk" = 1, "beer" = 1)
result_amount = 2
/datum/chemical_reaction/drinks/icetea
name = "Iced Tea"
id = "icetea"
result = "icetea"
required_reagents = list("ice" = 1, "tea" = 2)
result_amount = 3
/datum/chemical_reaction/drinks/icecoffee
name = "Iced Coffee"
id = "icecoffee"
result = "icecoffee"
required_reagents = list("ice" = 1, "coffee" = 2)
result_amount = 3
/datum/chemical_reaction/drinks/nuka_cola
name = "Nuclear Cola"
id = "nuka_cola"
result = "nuka_cola"
required_reagents = list("uranium" = 1, "cola" = 5)
result_amount = 5
/datum/chemical_reaction/drinks/moonshine
name = "Moonshine"
id = "moonshine"
result = "moonshine"
required_reagents = list("nutriment" = 10)
catalysts = list("enzyme" = 5)
result_amount = 10
/datum/chemical_reaction/drinks/grenadine
name = "Grenadine Syrup"
id = "grenadine"
result = "grenadine"
required_reagents = list("berryjuice" = 10)
catalysts = list("enzyme" = 5)
result_amount = 10
/datum/chemical_reaction/drinks/wine
name = "Wine"
id = "wine"
result = "wine"
required_reagents = list("grapejuice" = 10)
catalysts = list("enzyme" = 5)
result_amount = 10
/datum/chemical_reaction/drinks/pwine
name = "Poison Wine"
id = "pwine"
result = "pwine"
required_reagents = list("poisonberryjuice" = 10)
catalysts = list("enzyme" = 5)
result_amount = 10
/datum/chemical_reaction/drinks/melonliquor
name = "Melon Liquor"
id = "melonliquor"
result = "melonliquor"
required_reagents = list("watermelonjuice" = 10)
catalysts = list("enzyme" = 5)
result_amount = 10
/datum/chemical_reaction/drinks/bluecuracao
name = "Blue Curacao"
id = "bluecuracao"
result = "bluecuracao"
required_reagents = list("orangejuice" = 10)
catalysts = list("enzyme" = 5)
result_amount = 10
/datum/chemical_reaction/drinks/spacebeer
name = "Space Beer"
id = "spacebeer"
result = "beer"
required_reagents = list("cornoil" = 10)
catalysts = list("enzyme" = 5)
result_amount = 10
/datum/chemical_reaction/drinks/vodka
name = "Vodka"
id = "vodka"
result = "vodka"
required_reagents = list("potatojuice" = 10)
catalysts = list("enzyme" = 5)
result_amount = 10
/datum/chemical_reaction/drinks/cider
name = "Cider"
id = "cider"
result = "cider"
required_reagents = list("applejuice" = 10)
catalysts = list("enzyme" = 5)
result_amount = 10
/datum/chemical_reaction/drinks/sake
name = "Sake"
id = "sake"
result = "sake"
required_reagents = list("rice" = 10)
catalysts = list("enzyme" = 5)
result_amount = 10
/datum/chemical_reaction/drinks/kahlua
name = "Kahlua"
id = "kahlua"
result = "kahlua"
required_reagents = list("coffee" = 5, "sugar" = 5)
catalysts = list("enzyme" = 5)
result_amount = 5
/datum/chemical_reaction/drinks/gin_tonic
name = "Gin and Tonic"
id = "gintonic"
result = "gintonic"
required_reagents = list("gin" = 2, "tonic" = 1)
result_amount = 3
/datum/chemical_reaction/drinks/cuba_libre
name = "Cuba Libre"
id = "cubalibre"
result = "cubalibre"
required_reagents = list("rum" = 2, "cola" = 1)
result_amount = 3
/datum/chemical_reaction/drinks/martini
name = "Classic Martini"
id = "martini"
result = "martini"
required_reagents = list("gin" = 2, "vermouth" = 1)
result_amount = 3
/datum/chemical_reaction/drinks/vodkamartini
name = "Vodka Martini"
id = "vodkamartini"
result = "vodkamartini"
required_reagents = list("vodka" = 2, "vermouth" = 1)
result_amount = 3
/datum/chemical_reaction/drinks/white_russian
name = "White Russian"
id = "whiterussian"
result = "whiterussian"
required_reagents = list("blackrussian" = 2, "cream" = 1)
result_amount = 3
/datum/chemical_reaction/drinks/whiskey_cola
name = "Whiskey Cola"
id = "whiskeycola"
result = "whiskeycola"
required_reagents = list("whiskey" = 2, "cola" = 1)
result_amount = 3
/datum/chemical_reaction/drinks/screwdriver
name = "Screwdriver"
id = "screwdrivercocktail"
result = "screwdrivercocktail"
required_reagents = list("vodka" = 2, "orangejuice" = 1)
result_amount = 3
/datum/chemical_reaction/drinks/bloody_mary
name = "Bloody Mary"
id = "bloodymary"
result = "bloodymary"
required_reagents = list("vodka" = 2, "tomatojuice" = 3, "limejuice" = 1)
result_amount = 6
/datum/chemical_reaction/drinks/gargle_blaster
name = "Pan-Galactic Gargle Blaster"
id = "gargleblaster"
result = "gargleblaster"
required_reagents = list("vodka" = 2, "gin" = 1, "whiskey" = 1, "cognac" = 1, "limejuice" = 1)
result_amount = 6
/datum/chemical_reaction/drinks/brave_bull
name = "Brave Bull"
id = "bravebull"
result = "bravebull"
required_reagents = list("tequilla" = 2, "kahlua" = 1)
result_amount = 3
/datum/chemical_reaction/drinks/tequilla_sunrise
name = "Tequilla Sunrise"
id = "tequillasunrise"
result = "tequillasunrise"
required_reagents = list("tequilla" = 2, "orangejuice" = 1)
result_amount = 3
/datum/chemical_reaction/drinks/phoron_special
name = "Toxins Special"
id = "phoronspecial"
result = "phoronspecial"
required_reagents = list("rum" = 2, "vermouth" = 2, "phoron" = 2)
result_amount = 6
/datum/chemical_reaction/drinks/beepsky_smash
name = "Beepksy Smash"
id = "beepksysmash"
result = "beepskysmash"
required_reagents = list("limejuice" = 1, "whiskey" = 1, "iron" = 1)
result_amount = 2
/datum/chemical_reaction/drinks/doctor_delight
name = "The Doctor's Delight"
id = "doctordelight"
result = "doctorsdelight"
required_reagents = list("limejuice" = 1, "tomatojuice" = 1, "orangejuice" = 1, "cream" = 2, "tricordrazine" = 1)
result_amount = 6
/datum/chemical_reaction/drinks/irish_cream
name = "Irish Cream"
id = "irishcream"
result = "irishcream"
required_reagents = list("whiskey" = 2, "cream" = 1)
result_amount = 3
/datum/chemical_reaction/drinks/manly_dorf
name = "The Manly Dorf"
id = "manlydorf"
result = "manlydorf"
required_reagents = list ("beer" = 1, "ale" = 2)
result_amount = 3
/datum/chemical_reaction/drinks/hooch
name = "Hooch"
id = "hooch"
result = "hooch"
required_reagents = list ("sugar" = 1, "ethanol" = 2, "fuel" = 1)
result_amount = 3
/datum/chemical_reaction/drinks/irish_coffee
name = "Irish Coffee"
id = "irishcoffee"
result = "irishcoffee"
required_reagents = list("irishcream" = 1, "coffee" = 1)
result_amount = 2
/datum/chemical_reaction/drinks/b52
name = "B-52"
id = "b52"
result = "b52"
required_reagents = list("irishcream" = 1, "kahlua" = 1, "cognac" = 1)
result_amount = 3
/datum/chemical_reaction/drinks/atomicbomb
name = "Atomic Bomb"
id = "atomicbomb"
result = "atomicbomb"
required_reagents = list("b52" = 10, "uranium" = 1)
result_amount = 10
/datum/chemical_reaction/drinks/margarita
name = "Margarita"
id = "margarita"
result = "margarita"
required_reagents = list("tequilla" = 2, "limejuice" = 1)
result_amount = 3
/datum/chemical_reaction/drinks/longislandicedtea
name = "Long Island Iced Tea"
id = "longislandicedtea"
result = "longislandicedtea"
required_reagents = list("vodka" = 1, "gin" = 1, "tequilla" = 1, "cubalibre" = 3)
result_amount = 6
/datum/chemical_reaction/drinks/icedtea
name = "Long Island Iced Tea"
id = "longislandicedtea"
result = "longislandicedtea"
required_reagents = list("vodka" = 1, "gin" = 1, "tequilla" = 1, "cubalibre" = 3)
result_amount = 6
/datum/chemical_reaction/drinks/threemileisland
name = "Three Mile Island Iced Tea"
id = "threemileisland"
result = "threemileisland"
required_reagents = list("longislandicedtea" = 10, "uranium" = 1)
result_amount = 10
/datum/chemical_reaction/drinks/whiskeysoda
name = "Whiskey Soda"
id = "whiskeysoda"
result = "whiskeysoda"
required_reagents = list("whiskey" = 2, "sodawater" = 1)
result_amount = 3
/datum/chemical_reaction/drinks/black_russian
name = "Black Russian"
id = "blackrussian"
result = "blackrussian"
required_reagents = list("vodka" = 2, "kahlua" = 1)
result_amount = 3
/datum/chemical_reaction/drinks/manhattan
name = "Manhattan"
id = "manhattan"
result = "manhattan"
required_reagents = list("whiskey" = 2, "vermouth" = 1)
result_amount = 3
/datum/chemical_reaction/drinks/manhattan_proj
name = "Manhattan Project"
id = "manhattan_proj"
result = "manhattan_proj"
required_reagents = list("manhattan" = 10, "uranium" = 1)
result_amount = 10
/datum/chemical_reaction/drinks/vodka_tonic
name = "Vodka and Tonic"
id = "vodkatonic"
result = "vodkatonic"
required_reagents = list("vodka" = 2, "tonic" = 1)
result_amount = 3
/datum/chemical_reaction/drinks/gin_fizz
name = "Gin Fizz"
id = "ginfizz"
result = "ginfizz"
required_reagents = list("gin" = 1, "sodawater" = 1, "limejuice" = 1)
result_amount = 3
/datum/chemical_reaction/drinks/bahama_mama
name = "Bahama mama"
id = "bahama_mama"
result = "bahama_mama"
required_reagents = list("rum" = 2, "orangejuice" = 2, "limejuice" = 1, "ice" = 1)
result_amount = 6
/datum/chemical_reaction/drinks/singulo
name = "Singulo"
id = "singulo"
result = "singulo"
required_reagents = list("vodka" = 5, "radium" = 1, "wine" = 5)
result_amount = 10
/datum/chemical_reaction/drinks/alliescocktail
name = "Allies Cocktail"
id = "alliescocktail"
result = "alliescocktail"
required_reagents = list("martini" = 1, "vodka" = 1)
result_amount = 2
/datum/chemical_reaction/drinks/demonsblood
name = "Demons Blood"
id = "demonsblood"
result = "demonsblood"
required_reagents = list("rum" = 3, "spacemountainwind" = 1, "blood" = 1, "dr_gibb" = 1)
result_amount = 6
/datum/chemical_reaction/drinks/booger
name = "Booger"
id = "booger"
result = "booger"
required_reagents = list("cream" = 2, "banana" = 1, "rum" = 1, "watermelonjuice" = 1)
result_amount = 5
/datum/chemical_reaction/drinks/antifreeze
name = "Anti-freeze"
id = "antifreeze"
result = "antifreeze"
required_reagents = list("vodka" = 1, "cream" = 1, "ice" = 1)
result_amount = 3
/datum/chemical_reaction/drinks/barefoot
name = "Barefoot"
id = "barefoot"
result = "barefoot"
required_reagents = list("berryjuice" = 1, "cream" = 1, "vermouth" = 1)
result_amount = 3
/datum/chemical_reaction/drinks/grapesoda
name = "Grape Soda"
id = "grapesoda"
result = "grapesoda"
required_reagents = list("grapejuice" = 2, "cola" = 1)
result_amount = 3
/datum/chemical_reaction/drinks/sbiten
name = "Sbiten"
id = "sbiten"
result = "sbiten"
required_reagents = list("vodka" = 10, "capsaicin" = 1)
result_amount = 10
/datum/chemical_reaction/drinks/red_mead
name = "Red Mead"
id = "red_mead"
result = "red_mead"
required_reagents = list("blood" = 1, "mead" = 1)
result_amount = 2
/datum/chemical_reaction/drinks/mead
name = "Mead"
id = "mead"
result = "mead"
required_reagents = list("sugar" = 1, "water" = 1)
catalysts = list("enzyme" = 5)
result_amount = 2
/datum/chemical_reaction/drinks/iced_beer
name = "Iced Beer"
id = "iced_beer"
result = "iced_beer"
required_reagents = list("beer" = 10, "frostoil" = 1)
result_amount = 10
/datum/chemical_reaction/drinks/iced_beer2
name = "Iced Beer"
id = "iced_beer"
result = "iced_beer"
required_reagents = list("beer" = 5, "ice" = 1)
result_amount = 6
/datum/chemical_reaction/drinks/grog
name = "Grog"
id = "grog"
result = "grog"
required_reagents = list("rum" = 1, "water" = 1)
result_amount = 2
/datum/chemical_reaction/drinks/soy_latte
name = "Soy Latte"
id = "soy_latte"
result = "soy_latte"
required_reagents = list("coffee" = 1, "soymilk" = 1)
result_amount = 2
/datum/chemical_reaction/drinks/cafe_latte
name = "Cafe Latte"
id = "cafe_latte"
result = "cafe_latte"
required_reagents = list("coffee" = 1, "milk" = 1)
result_amount = 2
/datum/chemical_reaction/drinks/acidspit
name = "Acid Spit"
id = "acidspit"
result = "acidspit"
required_reagents = list("sacid" = 1, "wine" = 5)
result_amount = 6
/datum/chemical_reaction/drinks/amasec
name = "Amasec"
id = "amasec"
result = "amasec"
required_reagents = list("iron" = 1, "wine" = 5, "vodka" = 5)
result_amount = 10
/datum/chemical_reaction/drinks/changelingsting
name = "Changeling Sting"
id = "changelingsting"
result = "changelingsting"
required_reagents = list("screwdrivercocktail" = 1, "limejuice" = 1, "lemonjuice" = 1)
result_amount = 3
/datum/chemical_reaction/drinks/aloe
name = "Aloe"
id = "aloe"
result = "aloe"
required_reagents = list("cream" = 1, "whiskey" = 1, "watermelonjuice" = 1)
result_amount = 3
/datum/chemical_reaction/drinks/andalusia
name = "Andalusia"
id = "andalusia"
result = "andalusia"
required_reagents = list("rum" = 1, "whiskey" = 1, "lemonjuice" = 1)
result_amount = 3
/datum/chemical_reaction/drinks/snowwhite
name = "Snow White"
id = "snowwhite"
result = "snowwhite"
required_reagents = list("beer" = 1, "lemon_lime" = 1)
result_amount = 2
/datum/chemical_reaction/drinks/irishcarbomb
name = "Irish Car Bomb"
id = "irishcarbomb"
result = "irishcarbomb"
required_reagents = list("ale" = 1, "irishcream" = 1)
result_amount = 2
/datum/chemical_reaction/drinks/syndicatebomb
name = "Syndicate Bomb"
id = "syndicatebomb"
result = "syndicatebomb"
required_reagents = list("beer" = 1, "whiskeycola" = 1)
result_amount = 2
/datum/chemical_reaction/drinks/erikasurprise
name = "Erika Surprise"
id = "erikasurprise"
result = "erikasurprise"
required_reagents = list("ale" = 2, "limejuice" = 1, "whiskey" = 1, "banana" = 1, "ice" = 1)
result_amount = 6
/datum/chemical_reaction/drinks/devilskiss
name = "Devils Kiss"
id = "devilskiss"
result = "devilskiss"
required_reagents = list("blood" = 1, "kahlua" = 1, "rum" = 1)
result_amount = 3
/datum/chemical_reaction/drinks/hippiesdelight
name = "Hippies Delight"
id = "hippiesdelight"
result = "hippiesdelight"
required_reagents = list("psilocybin" = 1, "gargleblaster" = 1)
result_amount = 2
/datum/chemical_reaction/drinks/bananahonk
name = "Banana Honk"
id = "bananahonk"
result = "bananahonk"
required_reagents = list("banana" = 1, "cream" = 1, "sugar" = 1)
result_amount = 3
/datum/chemical_reaction/drinks/silencer
name = "Silencer"
id = "silencer"
result = "silencer"
required_reagents = list("nothing" = 1, "cream" = 1, "sugar" = 1)
result_amount = 3
/datum/chemical_reaction/drinks/driestmartini
name = "Driest Martini"
id = "driestmartini"
result = "driestmartini"
required_reagents = list("nothing" = 1, "gin" = 1)
result_amount = 2
/datum/chemical_reaction/drinks/lemonade
name = "Lemonade"
id = "lemonade"
result = "lemonade"
required_reagents = list("lemonjuice" = 1, "sugar" = 1, "water" = 1)
result_amount = 3
/datum/chemical_reaction/drinks/kiraspecial
name = "Kira Special"
id = "kiraspecial"
result = "kiraspecial"
required_reagents = list("orangejuice" = 1, "limejuice" = 1, "sodawater" = 1)
result_amount = 3
/datum/chemical_reaction/drinks/brownstar
name = "Brown Star"
id = "brownstar"
result = "brownstar"
required_reagents = list("orangejuice" = 2, "cola" = 1)
result_amount = 3
/datum/chemical_reaction/drinks/milkshake
name = "Milkshake"
id = "milkshake"
result = "milkshake"
required_reagents = list("cream" = 1, "ice" = 2, "milk" = 2)
result_amount = 5
/datum/chemical_reaction/drinks/rewriter
name = "Rewriter"
id = "rewriter"
result = "rewriter"
required_reagents = list("spacemountainwind" = 1, "coffee" = 1)
result_amount = 2
/datum/chemical_reaction/drinks/suidream
name = "Sui Dream"
id = "suidream"
result = "suidream"
required_reagents = list("space_up" = 1, "bluecuracao" = 1, "melonliquor" = 1)
result_amount = 3
/datum/chemical_reaction/drinks/shirleytemple
name = "Shirley Temple"
id = "shirley_temple"
result = "shirley_temple"
required_reagents = list("gingerale" = 4, "grenadine" = 1)
result_amount = 5
/datum/chemical_reaction/drinks/royrogers
name = "Roy Rogers"
id = "roy_rogers"
result = "roy_rogers"
required_reagents = list("gingerale" = 4, "lemon_lime" = 2, "grenadine" = 1)
result_amount = 7
/datum/chemical_reaction/drinks/collinsmix
name = "Collins Mix"
id = "collins_mix"
result = "collins_mix"
required_reagents = list("lemon_lime" = 3, "sodawater" = 1)
result_amount = 4
/datum/chemical_reaction/drinks/arnoldpalmer
name = "Arnold Palmer"
id = "arnold_palmer"
result = "arnold_palmer"
required_reagents = list("icetea" = 1, "lemonade" = 1)
result_amount = 2
/datum/chemical_reaction/drinks/minttea
name = "Mint Tea"
id = "minttea"
result = "minttea"
required_reagents = list("tea" = 5, "mint" = 1)
result_amount = 6
/datum/chemical_reaction/drinks/lemontea
name = "Lemon Tea"
id = "lemontea"
result = "lemontea"
required_reagents = list("tea" = 5, "lemonjuice" = 1)
result_amount = 6
/datum/chemical_reaction/drinks/limetea
name = "Lime Tea"
id = "limetea"
result = "limetea"
required_reagents = list("tea" = 5, "limejuice" = 1)
result_amount = 6
/datum/chemical_reaction/drinks/orangetea
name = "Orange Tea"
id = "orangetea"
result = "orangetea"
required_reagents = list("tea" = 5, "orangejuice" = 1)
result_amount = 6
/datum/chemical_reaction/drinks/berrytea
name = "Berry Tea"
id = "berrytea"
result = "berrytea"
required_reagents = list("tea" = 5, "berryjuice" = 1)
result_amount = 6
/datum/chemical_reaction/drinks/sakebomb
name = "Sake Bomb"
id = "sakebomb"
result = "sakebomb"
required_reagents = list("beer" = 2, "sake" = 1)
result_amount = 3
/datum/chemical_reaction/drinks/tamagozake
name = "Tamagozake"
id = "tamagozake"
result = "tamagozake"
required_reagents = list("sake" = 10, "sugar" = 5, "egg" = 3)
result_amount = 15
/datum/chemical_reaction/drinks/ginzamary
name = "Ginza Mary"
id = "ginzamary"
result = "ginzamary"
required_reagents = list("sake" = 2, "vodka" = 2, "tomatojuice" = 1)
result_amount = 5
/datum/chemical_reaction/drinks/tokyorose
name = "Tokyo Rose"
id = "tokyorose"
result = "tokyorose"
required_reagents = list("sake" = 1, "berryjuice" = 1)
result_amount = 2
/datum/chemical_reaction/drinks/saketini
name = "Saketini"
id = "saketini"
result = "saketini"
required_reagents = list("sake" = 1, "gin" = 1)
result_amount = 2
/datum/chemical_reaction/drinks/elysiumfacepunch
name = "Elysium Facepunch"
id = "elysiumfacepunch"
result = "elysiumfacepunch"
required_reagents = list("kahlua" = 1, "lemonjuice" = 1)
result_amount = 2
/datum/chemical_reaction/drinks/erebusmoonrise
name = "Erebus Moonrise"
id = "erebusmoonrise"
result = "erebusmoonrise"
required_reagents = list("whiskey" = 1, "vodka" = 1, "tequilla" = 1)
result_amount = 3
/datum/chemical_reaction/drinks/balloon
name = "Balloon"
id = "balloon"
result = "balloon"
required_reagents = list("cream" = 1, "bluecuracao" = 1)
result_amount = 2
/datum/chemical_reaction/drinks/natunabrandy
name = "Natuna Brandy"
id = "natunabrandy"
result = "natunabrandy"
required_reagents = list("beer" = 1, "sodawater" = 2)
result_amount = 3
/datum/chemical_reaction/drinks/euphoria
name = "Euphoria"
id = "euphoria"
result = "euphoria"
required_reagents = list("specialwhiskey" = 1, "cognac" = 2)
result_amount = 3
/datum/chemical_reaction/drinks/xanaducannon
name = "Xanadu Cannon"
id = "xanaducannon"
result = "xanaducannon"
required_reagents = list("ale" = 1, "dr_gibb" = 1)
result_amount = 2
/datum/chemical_reaction/drinks/debugger
name = "Debugger"
id = "debugger"
result = "debugger"
required_reagents = list("fuel" = 1, "sugar" = 2, "cornoil" = 2)
result_amount = 5
/datum/chemical_reaction/drinks/spacersbrew
name = "Spacer's Brew"
id = "spacersbrew"
result = "spacersbrew"
required_reagents = list("brownstar" = 4, "ethanol" = 1)
result_amount = 5
/datum/chemical_reaction/drinks/binmanbliss
name = "Binman Bliss"
id = "binmanbliss"
result = "binmanbliss"
required_reagents = list("sake" = 1, "tequilla" = 1)
result_amount = 2
/datum/chemical_reaction/drinks/chrysanthemum
name = "Chrysanthemum"
id = "chrysanthemum"
result = "chrysanthemum"
required_reagents = list("sake" = 1, "melonliquor" = 1)
result_amount = 2
/datum/chemical_reaction/bitters
name = "Bitters"
id = "bitters"
result = "bitters"
required_reagents = list("mint" = 5)
catalysts = list("enzyme" = 5)
result_amount = 5
/datum/chemical_reaction/drinks/soemmerfire
name = "Soemmer Fire"
id = "soemmerfire"
result = "soemmerfire"
required_reagents = list("manhattan" = 2, "condensedcapsaicin" = 1)
result_amount = 3
/datum/chemical_reaction/drinks/winebrandy
name = "Wine brandy"
id = "winebrandy"
result = "winebrandy"
required_reagents = list("wine" = 10)
catalysts = list("enzyme" = 10) //10u enzyme so it requires more than is usually added. Stops overlap with wine recipe
result_amount = 5
/datum/chemical_reaction/drinks/lovepotion
name = "Love Potion"
id = "lovepotion"
result = "lovepotion"
required_reagents = list("cream" = 1, "berryjuice" = 1, "sugar" = 1)
result_amount = 3
/datum/chemical_reaction/drinks/morningafter
name = "Morning After"
id = "morningafter"
result = "morningafter"
required_reagents = list("sbiten" = 1, "coffee" = 5)
result_amount = 6
/datum/chemical_reaction/drinks/vesper
name = "Vesper"
id = "vesper"
result = "vesper"
required_reagents = list("gin" = 3, "vodka" = 1, "wine" = 1)
result_amount = 4
/datum/chemical_reaction/drinks/rotgut
name = "Rotgut Fever Dream"
id = "rotgut"
result = "rotgut"
required_reagents = list("vodka" = 3, "rum" = 1, "whiskey" = 1, "cola" = 3)
result_amount = 8
/datum/chemical_reaction/drinks/entdraught
name = "Ent's Draught"
id = "entdraught"
result = "entdraught"
required_reagents = list("tonic" = 1, "holywater" = 1, "honey" = 1)
result_amount = 3
/datum/chemical_reaction/drinks/voxdelight
name = "Vox's Delight"
id = "voxdelight"
result = "voxdelight"
required_reagents = list("phoron" = 3, "fuel" = 1, "water" = 1)
result_amount = 4
/datum/chemical_reaction/drinks/screamingviking
name = "Screaming Viking"
id = "screamingviking"
result = "screamingviking"
required_reagents = list("vodka" = 1, "vermouth" = 1, "limejuice" = 1, "rum" = 1, "gin" = 1, "tonic" = 1)
result_amount = 6
/datum/chemical_reaction/drinks/vilelemon
name = "Vile Lemon"
id = "vilelemon"
result = "vilelemon"
required_reagents = list("lemonade" = 5, "spacemountainwind" = 1)
result_amount = 6
/datum/chemical_reaction/drinks/dreamcream
name = "Dream Cream"
id = "dreamcream"
result = "dreamcream"
required_reagents = list("milk" = 2, "cream" = 1, "honey" = 1)
result_amount = 4
/datum/chemical_reaction/drinks/robustin
name = "Robustin"
id = "robustin"
result = "robustin"
required_reagents = list("antifreeze" = 1, "phoron" = 1, "fuel" = 1, "vodka" = 1)
result_amount = 4
/datum/chemical_reaction/drinks/virginsip
name = "Virgin Sip"
id = "virginsip"
result = "virginsip"
required_reagents = list("driestmartini" = 1, "water" = 1)
result_amount = 2
/datum/chemical_reaction/drinks/chocoshake
name = "Chocolate Milkshake"
id = "chocoshake"
result = "chocoshake"
required_reagents = list("milkshake" = 1, "coco" = 1)
result_amount = 2
/datum/chemical_reaction/drinks/berryshake
name = "Berry Milkshake"
id = "berryshake"
result = "berryshake"
required_reagents = list("milkshake" = 1, "berryjuice" = 1)
result_amount = 2
/datum/chemical_reaction/drinks/coffeeshake
name = "Coffee Milkshake"
id = "coffeeshake"
result = "coffeeshake"
required_reagents = list("milkshake" = 1, "coffee" = 1)
result_amount = 2
/datum/chemical_reaction/drinks/jellyshot
name = "Jelly Shot"
id = "jellyshot"
result = "jellyshot"
required_reagents = list("cherryjelly" = 4, "vodka" = 1)
result_amount = 5
/datum/chemical_reaction/drinks/slimeshot
name = "Named Bullet"
id = "slimeshot"
result = "slimeshot"
required_reagents = list("slimejelly" = 4, "vodka" = 1)
result_amount = 5
/datum/chemical_reaction/drinks/negroni
name = "Negroni"
id = "negroni"
result = "negroni"
required_reagents = list("gin" = 1, "bitters" = 1, "vermouth" = 1)
result_amount = 3
/datum/chemical_reaction/drinks/cloverclub
name = "Clover Club"
id = "cloverclub"
result = "cloverclub"
required_reagents = list("berryjuice" = 1, "lemonjuice" = 1, "gin" = 3)
result_amount = 5
/datum/chemical_reaction/drinks/oldfashioned
name = "Old Fashioned"
id = "oldfashioned"
result = "oldfashioned"
required_reagents = list("whiskey" = 3, "bitters" = 1, "sugar" = 1)
result_amount = 5
/datum/chemical_reaction/drinks/whiskeysour
name = "Whiskey Sour"
id = "whiskeysour"
result = "whiskeysour"
required_reagents = list("whiskey" = 2, "lemonjuice" = 1, "sugar" = 1)
result_amount = 4
/datum/chemical_reaction/drinks/daiquiri
name = "Daiquiri"
id = "daiquiri"
result = "daiquiri"
required_reagents = list("rum" = 3, "limejuice" = 2, "sugar" = 1)
result_amount = 5
/datum/chemical_reaction/drinks/mintjulep
name = "Mint Julep"
id = "mintjulep"
result = "mintjulep"
required_reagents = list("whiskey" = 2, "water" = 1, "mint" = 1)
result_amount = 4
/datum/chemical_reaction/drinks/paloma
name = "Paloma"
id = "paloma"
result = "paloma"
required_reagents = list("orangejuice" = 1, "sodawater" = 1, "tequilla" = 1)
result_amount = 3
/datum/chemical_reaction/drinks/mojito
name = "Mojito"
id = "mojito"
result = "mojito"
required_reagents = list("rum" = 3, "limejuice" = 1, "mint" = 1)
result_amount = 5
/datum/chemical_reaction/drinks/piscosour
name = "Pisco Sour"
id = "piscosour"
result = "piscosour"
required_reagents = list("winebrandy" = 1, "lemonjuice" = 1, "sugar" = 1)
result_amount = 3
/datum/chemical_reaction/drinks/coldfront
name = "Cold Front"
id = "coldfront"
result = "coldfront"
required_reagents = list("icecoffee" = 1, "whiskey" = 1, "mint" = 1)
result_amount = 3
//R-UST Port
/datum/chemical_reaction/hyrdophoron
name = "Hydrophoron"
id = "hydrophoron"
result = "hydrophoron"
required_reagents = list("hydrogen" = 1, "phoron" = 1)
inhibitors = list("nitrogen" = 1) //So it doesn't mess with lexorin
result_amount = 2
/datum/chemical_reaction/deuterium
name = "Deuterium"
id = "deuterium"
result = null
required_reagents = list("hydrophoron" = 5, "water" = 10)
result_amount = 15
/datum/chemical_reaction/deuterium/on_reaction(var/datum/reagents/holder, var/created_volume)
var/turf/T = get_turf(holder.my_atom)
if(istype(T)) new /obj/item/stack/material/deuterium(T, created_volume)
return
//Skrellian crap.
/datum/chemical_reaction/talum_quem
name = "Talum-quem"
id = "talum_quem"
result = "talum_quem"
required_reagents = list("space_drugs" = 2, "sugar" = 1, "amatoxin" = 1)
result_amount = 4
/datum/chemical_reaction/qerr_quem
name = "Qerr-quem"
id = "qerr_quem"
result = "qerr_quem"
required_reagents = list("nicotine" = 1, "carbon" = 1, "sugar" = 2)
result_amount = 4