diff --git a/SQL/paradise_schema.sql b/SQL/paradise_schema.sql
index c6045cd835e..22369d5470d 100644
--- a/SQL/paradise_schema.sql
+++ b/SQL/paradise_schema.sql
@@ -78,6 +78,7 @@ CREATE TABLE `characters` (
`rlimb_data` mediumtext NOT NULL,
`nanotrasen_relation` varchar(45) NOT NULL,
`speciesprefs` int(1) NOT NULL,
+ `socks` mediumtext NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=18747 DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm
index c69742b94c8..a81a99c540b 100644
--- a/code/__HELPERS/global_lists.dm
+++ b/code/__HELPERS/global_lists.dm
@@ -12,6 +12,10 @@
init_sprite_accessory_subtypes(/datum/sprite_accessory/underwear, underwear_list, underwear_m, underwear_f)
//undershirt
init_sprite_accessory_subtypes(/datum/sprite_accessory/undershirt, undershirt_list, undershirt_m, undershirt_f)
+ //socks
+ init_sprite_accessory_subtypes(/datum/sprite_accessory/socks, socks_list, socks_m, socks_f)
+
+
var/list/paths
//Surgery Steps - Initialize all /datum/surgery_step into a list
diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm
index 619716363f9..fe27e399c84 100644
--- a/code/__HELPERS/mobs.dm
+++ b/code/__HELPERS/mobs.dm
@@ -10,6 +10,12 @@
if(FEMALE) return pick(undershirt_f)
else return pick(undershirt_list)
+/proc/random_socks(gender)
+ switch(gender)
+ if(MALE) return pick(socks_m)
+ if(FEMALE) return pick(socks_f)
+ else return pick(socks_list)
+
proc/random_hair_style(var/gender, species = "Human")
var/h_style = "Bald"
diff --git a/code/_globalvars/lists/flavor_misc.dm b/code/_globalvars/lists/flavor_misc.dm
index 882331d21de..516ae5630f9 100644
--- a/code/_globalvars/lists/flavor_misc.dm
+++ b/code/_globalvars/lists/flavor_misc.dm
@@ -15,6 +15,10 @@ var/global/list/underwear_f = list() //stores only underwear name
var/global/list/undershirt_list = list() //stores /datum/sprite_accessory/undershirt indexed by name
var/global/list/undershirt_m = list() //stores only undershirt name
var/global/list/undershirt_f = list() //stores only undershirt name
+ //Socks
+var/global/list/socks_list = list() //stores /datum/sprite_accessory/socks indexed by name
+var/global/list/socks_m = list() //stores only socks name
+var/global/list/socks_f = list() //stores only socks name
//Backpacks
var/global/list/backbaglist = list("Nothing", "Backpack", "Satchel", "Satchel Alt")
diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm
index 4cfdc0a6c29..1b3f89af28a 100644
--- a/code/game/machinery/vending.dm
+++ b/code/game/machinery/vending.dm
@@ -729,7 +729,7 @@
/obj/machinery/vending/assist
products = list( /obj/item/device/assembly/prox_sensor = 5,/obj/item/device/assembly/igniter = 3,/obj/item/device/assembly/signaler = 4,
/obj/item/weapon/wirecutters = 1, /obj/item/weapon/cartridge/signal = 4)
- contraband = list(/obj/item/device/flashlight = 5,/obj/item/device/assembly/timer = 2)
+ contraband = list(/obj/item/device/flashlight = 5,/obj/item/device/assembly/timer = 2, /obj/item/device/assembly/voice = 2, /obj/item/device/assembly/health = 2)
product_ads = "Only the finest!;Have some tools.;The most robust equipment.;The finest gear in space!"
/obj/machinery/vending/boozeomat/New()
@@ -887,6 +887,7 @@
products = list(/obj/item/clothing/under/rank/scientist = 6,/obj/item/clothing/suit/bio_suit = 6,/obj/item/clothing/head/bio_hood = 6,
/obj/item/device/transfer_valve = 6,/obj/item/device/assembly/timer = 6,/obj/item/device/assembly/signaler = 6,
/obj/item/device/assembly/prox_sensor = 6,/obj/item/device/assembly/igniter = 6)
+ contraband = list(/obj/item/device/assembly/health = 3)
/obj/machinery/vending/wallmed1
name = "NanoMed"
diff --git a/code/game/objects/items/weapons/implants/implant.dm b/code/game/objects/items/weapons/implants/implant.dm
index c964dd1e0b4..820a3311cff 100644
--- a/code/game/objects/items/weapons/implants/implant.dm
+++ b/code/game/objects/items/weapons/implants/implant.dm
@@ -4,6 +4,7 @@
name = "implant"
icon = 'icons/obj/device.dmi'
icon_state = "implant"
+ origin_tech = "materials=2;biotech=3;programming=2"
var/implanted = null
var/mob/living/imp_in = null
var/obj/item/organ/external/part = null
@@ -52,6 +53,7 @@
/obj/item/weapon/implant/tracking
name = "tracking"
desc = "Track with this."
+ origin_tech = "materials=2;magnets=2;programming=2;biotech=2"
var/id = 1.0
@@ -92,6 +94,7 @@ Implant Specifics:
"}
/obj/item/weapon/implant/dexplosive
name = "explosive"
desc = "And boom goes the weasel."
+ origin_tech = "materials=2;combat=3;biotech=4;syndicate=4"
icon_state = "implant_evil"
get_data()
@@ -127,6 +130,7 @@ Implant Specifics:
"}
/obj/item/weapon/implant/explosive
name = "explosive implant"
desc = "A military grade micro bio-explosive. Highly dangerous."
+ origin_tech = "materials=2;combat=3;biotech=4;syndicate=4"
var/elevel = "Localized Limb"
var/phrase = "supercalifragilisticexpialidocious"
icon_state = "implant_evil"
@@ -252,6 +256,7 @@ Implant Specifics:
"}
/obj/item/weapon/implant/chem
name = "chem"
desc = "Injects things."
+ origin_tech = "materials=3;biotech=4"
allow_reagents = 1
get_data()
@@ -316,6 +321,7 @@ the implant may become unstable and either pre-maturely inject the subject or si
/obj/item/weapon/implant/loyalty
name = "loyalty"
desc = "Makes you loyal or such."
+ origin_tech = "materials=2;biotech=4;programming=4"
get_data()
var/dat = {"
@@ -406,6 +412,7 @@ the implant may become unstable and either pre-maturely inject the subject or si
/obj/item/weapon/implant/adrenalin
name = "adrenalin"
desc = "Removes all stuns and knockdowns."
+ origin_tech = "materials=2;biotech=4;combat=3;syndicate=4"
var/uses = 3
get_data()
@@ -436,7 +443,7 @@ the implant may become unstable and either pre-maturely inject the subject or si
source.reagents.add_reagent("synaptizine", 10)
source.reagents.add_reagent("omnizine", 10)
- source.reagents.add_reagent("methamphetamine", 10)
+ source.reagents.add_reagent("stimulative_agent", 10)
return
@@ -523,6 +530,7 @@ the implant may become unstable and either pre-maturely inject the subject or si
name = "compressed matter implant"
desc = "Based on compressed matter technology, can store a single item."
icon_state = "implant_evil"
+ origin_tech = "materials=2;magnets=4;bluespace=4;syndicate=4"
var/activation_emote = "sigh"
var/obj/item/scanned = null
@@ -574,7 +582,7 @@ the implant may become unstable and either pre-maturely inject the subject or si
/obj/item/weapon/implant/emp
name = "emp implant"
desc = "Triggers an EMP."
-
+ origin_tech = "materials=2;biotech=3;magnets=4;syndicate=4"
var/activation_emote = "chuckle"
var/uses = 2
diff --git a/code/game/objects/items/weapons/implants/implantcase.dm b/code/game/objects/items/weapons/implants/implantcase.dm
index f4f9f3d2400..f32764ae410 100644
--- a/code/game/objects/items/weapons/implants/implantcase.dm
+++ b/code/game/objects/items/weapons/implants/implantcase.dm
@@ -8,7 +8,14 @@
throw_speed = 1
throw_range = 5
w_class = 1.0
+ origin_tech = "materials=1;biotech=2"
+ materials = list(MAT_GLASS=500)
var/obj/item/weapon/implant/imp = null
+
+ New()
+ ..()
+ update()
+
proc
update()
@@ -16,8 +23,10 @@
update()
if (src.imp)
src.icon_state = text("implantcase-[]", src.imp._color)
+ src.origin_tech = src.imp.origin_tech
else
src.icon_state = "implantcase-0"
+ src.origin_tech = initial(src.origin_tech)
return
@@ -148,4 +157,15 @@
New()
src.imp = new /obj/item/weapon/implant/freedom( src )
..()
+ return
+
+/obj/item/weapon/implantcase/adrenaline
+ name = "Glass Case- 'Adrenaline'"
+ desc = "A glass case containing an adrenaline implant."
+ icon = 'icons/obj/items.dmi'
+ icon_state = "implantcase-b"
+
+ New()
+ src.imp = new /obj/item/weapon/implant/adrenalin( src )
+ ..()
return
\ No newline at end of file
diff --git a/code/game/objects/items/weapons/implants/implanter.dm b/code/game/objects/items/weapons/implants/implanter.dm
index 423ab379253..f0cad339826 100644
--- a/code/game/objects/items/weapons/implants/implanter.dm
+++ b/code/game/objects/items/weapons/implants/implanter.dm
@@ -6,16 +6,23 @@
throw_speed = 1
throw_range = 5
w_class = 2.0
+ origin_tech = "materials=1;biotech=3;programming=2"
var/obj/item/weapon/implant/imp = null
+/obj/item/weapon/implanter/New()
+ ..()
+ update()
+
/obj/item/weapon/implanter/proc/update()
/obj/item/weapon/implanter/update()
if (src.imp)
src.icon_state = "implanter1"
+ src.origin_tech = src.imp.origin_tech
else
src.icon_state = "implanter0"
+ src.origin_tech = initial(src.origin_tech)
return
diff --git a/code/game/objects/items/weapons/implants/implantfreedom.dm b/code/game/objects/items/weapons/implants/implantfreedom.dm
index 9b225ac70fc..68497e500b7 100644
--- a/code/game/objects/items/weapons/implants/implantfreedom.dm
+++ b/code/game/objects/items/weapons/implants/implantfreedom.dm
@@ -5,12 +5,12 @@
desc = "Use this to escape from those evil Red Shirts."
_color = "r"
var/activation_emote = "chuckle"
- var/uses = 1.0
+ origin_tech = "materials=2;magnets=3;biotech=3;syndicate=4"
+ var/uses = 4
New()
src.activation_emote = pick("blink", "blink_r", "eyebrow", "chuckle", "twitch_s", "frown", "nod", "blush", "giggle", "grin", "groan", "shrug", "smile", "pale", "sniff", "whimper", "wink")
- src.uses = rand(1, 5)
..()
return
diff --git a/code/game/objects/items/weapons/implants/implantuplink.dm b/code/game/objects/items/weapons/implants/implantuplink.dm
index 05b50b49b03..6e7fac76a6c 100644
--- a/code/game/objects/items/weapons/implants/implantuplink.dm
+++ b/code/game/objects/items/weapons/implants/implantuplink.dm
@@ -1,6 +1,7 @@
/obj/item/weapon/implant/uplink
name = "uplink"
desc = "Summon things."
+ origin_tech = "materials=2;magnets=4;programming=4;biotech=4;syndicate=8;bluespace=5"
var/activation_emote = "chuckle"
/obj/item/weapon/implant/uplink/New()
diff --git a/code/game/objects/structures/dresser.dm b/code/game/objects/structures/dresser.dm
index 10898e80a47..f1eca747755 100644
--- a/code/game/objects/structures/dresser.dm
+++ b/code/game/objects/structures/dresser.dm
@@ -12,7 +12,7 @@
if(ishuman(user))
var/mob/living/carbon/human/H = user
- var/choice = input(user, "Underwear or Undershirt?", "Changing") as null|anything in list("Underwear","Undershirt")
+ var/choice = input(user, "Underwear, Undershirt, or Socks?", "Changing") as null|anything in list("Underwear","Undershirt","Socks")
if(!Adjacent(user))
return
@@ -27,5 +27,11 @@
if(new_undershirt)
H.undershirt = new_undershirt
+ if("Socks")
+ var/new_socks = input(user, "Select your socks", "Changing") as null|anything in socks_list
+ if(new_socks)
+ H.socks= new_socks
+
+
add_fingerprint(H)
H.update_body()
\ No newline at end of file
diff --git a/code/modules/assembly/health.dm b/code/modules/assembly/health.dm
new file mode 100644
index 00000000000..f1a3f402336
--- /dev/null
+++ b/code/modules/assembly/health.dm
@@ -0,0 +1,104 @@
+/obj/item/device/assembly/health
+ name = "health sensor"
+ desc = "Used for scanning and monitoring health."
+ icon_state = "health"
+ materials = list(MAT_METAL=800, MAT_GLASS=200)
+ origin_tech = "magnets=1;biotech=1"
+ secured = 0
+
+ var/scanning = 0
+ var/health_scan
+ var/alarm_health = 0
+
+
+
+/obj/item/device/assembly/health/activate()
+ if(!..()) return 0//Cooldown check
+ toggle_scan()
+ return 0
+
+/obj/item/device/assembly/health/toggle_secure()
+ secured = !secured
+ if(secured && scanning)
+ processing_objects.Add(src)
+ else
+ scanning = 0
+ processing_objects.Remove(src)
+ update_icon()
+ return secured
+
+/obj/item/device/assembly/health/attackby(obj/item/weapon/W as obj, mob/user as mob)
+ if(istype(W, /obj/item/device/multitool))
+ if(alarm_health == 0)
+ alarm_health = -90
+ user.show_message("You toggle [src] to \"detect death\" mode.")
+ else
+ alarm_health = 0
+ user.show_message("You toggle [src] to \"detect critical state\" mode.")
+ return
+ else
+ return ..()
+
+/obj/item/device/assembly/health/process()
+ if(!scanning || !secured)
+ return
+
+ var/atom/A = src
+ if(connected && connected.holder)
+ A = connected.holder
+
+ for(A, A && !ismob(A), A=A.loc);
+ // like get_turf(), but for mobs.
+ var/mob/living/M = A
+
+ if(M)
+ health_scan = M.health
+ if(health_scan <= alarm_health)
+ pulse()
+ audible_message("\icon[src] *beep* *beep*", "*beep* *beep*")
+ toggle_scan()
+ return
+ return
+
+/obj/item/device/assembly/health/proc/toggle_scan()
+ if(!secured) return 0
+ scanning = !scanning
+ if(scanning)
+ processing_objects.Add(src)
+ else
+ processing_objects.Remove(src)
+ return
+
+/obj/item/device/assembly/health/interact(mob/user as mob)//TODO: Change this to the wires thingy
+ if(!secured)
+ user.show_message("The [name] is unsecured!")
+ return 0
+ var/dat = text("Health Sensor [scanning?"On":"Off"]")
+ if(scanning && health_scan)
+ dat += "
Health: [health_scan]"
+ user << browse(dat, "window=hscan")
+ onclose(user, "hscan")
+ return
+
+
+/obj/item/device/assembly/health/Topic(href, href_list)
+ ..()
+ if(!ismob(usr))
+ return
+
+ var/mob/user = usr
+
+ if(!usr.canmove || usr.stat || usr.restrained() || !in_range(loc, usr))
+ usr << browse(null, "window=hscan")
+ onclose(usr, "hscan")
+ return
+
+ if(href_list["scanning"])
+ toggle_scan()
+
+ if(href_list["close"])
+ usr << browse(null, "window=hscan")
+ return
+
+ attack_self(user)
+ return
\ No newline at end of file
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index 338d57dd616..f49dd1d1bb4 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -108,6 +108,7 @@ datum/preferences
var/b_type = "A+" //blood type (not-chooseable)
var/underwear = "Nude" //underwear type
var/undershirt = "Nude" //undershirt type
+ var/socks = "Nude" //socks type
var/backbag = 2 //backpack type
var/h_style = "Bald" //Hair type
var/r_hair = 0 //Hair color
@@ -331,6 +332,7 @@ datum/preferences
dat += "
"
dat += "Underwear:
[underwear]
"
dat += "Undershirt:
[undershirt]
"
+ dat += "Socks:
[socks]
"
dat += "Backpack Type:
[backbaglist[backbag]]
"
dat += "Nanotrasen Relation:
[nanotrasen_relation]
"
dat += "Preview
  | "
@@ -1010,6 +1012,9 @@ datum/preferences
if("undershirt")
undershirt = random_undershirt(gender)
ShowChoices(user)
+ if("socks")
+ socks = random_socks(gender)
+ ShowChoices(user)
if("eyes")
r_eyes = rand(0,255)
g_eyes = rand(0,255)
@@ -1210,6 +1215,22 @@ datum/preferences
undershirt = new_undershirt
ShowChoices(user)
+ if("socks")
+ var/list/valid_sockstyles = list()
+ for(var/sockstyle in socks_list)
+ var/datum/sprite_accessory/S = socks_list[sockstyle]
+ if(gender == MALE && S.gender == FEMALE)
+ continue
+ if(gender == FEMALE && S.gender == MALE)
+ continue
+ if( !(species in S.species_allowed))
+ continue
+ valid_sockstyles[sockstyle] = socks_list[sockstyle]
+ var/new_socks = input(user, "Choose your character's socks:", "Character Preference") as null|anything in valid_sockstyles
+ ShowChoices(user)
+ if(new_socks)
+ socks = new_socks
+
if("eyes")
var/new_eyes = input(user, "Choose your character's eye colour:", "Character Preference") as color|null
if(new_eyes)
@@ -1548,6 +1569,7 @@ datum/preferences
character.underwear = underwear
character.undershirt = undershirt
+ character.socks = socks
if(backbag > 4 || backbag < 1)
backbag = 1 //Same as above
diff --git a/code/modules/client/preferences_mysql.dm b/code/modules/client/preferences_mysql.dm
index 96e51448c6d..8470ece80a9 100644
--- a/code/modules/client/preferences_mysql.dm
+++ b/code/modules/client/preferences_mysql.dm
@@ -149,6 +149,9 @@
nanotrasen_relation = query.item[52]
speciesprefs = text2num(query.item[53])
+ //socks
+ socks = query.item[54]
+
//Sanitize
metadata = sanitize_text(metadata, initial(metadata))
real_name = reject_bad_name(real_name)
@@ -196,6 +199,9 @@
disabilities = sanitize_integer(disabilities, 0, 65535, initial(disabilities))
be_special = sanitize_integer(be_special, 0, 65535, initial(be_special))
+ socks = sanitize_text(socks, initial(socks))
+
+
// if(isnull(disabilities)) disabilities = 0
if(!player_alt_titles) player_alt_titles = new()
if(!organ_data) src.organ_data = list()
@@ -267,7 +273,8 @@
organ_data='[organlist]',
rlimb_data='[rlimblist]',
nanotrasen_relation='[nanotrasen_relation]',
- speciesprefs='[speciesprefs]'
+ speciesprefs='[speciesprefs]',
+ socks='[socks]'
WHERE ckey='[C.ckey]'
AND slot='[default_slot]'"}
)
@@ -295,7 +302,7 @@
job_karma_high, job_karma_med, job_karma_low,
flavor_text, med_record, sec_record, gen_record,
player_alt_titles, be_special,
- disabilities, organ_data, rlimb_data, nanotrasen_relation, speciesprefs)
+ disabilities, organ_data, rlimb_data, nanotrasen_relation, speciesprefs, socks)
VALUES
('[C.ckey]', '[default_slot]', '[sql_sanitize_text(metadata)]', '[sql_sanitize_text(real_name)]', '[be_random_name]','[gender]',
'[age]', '[sql_sanitize_text(species)]', '[sql_sanitize_text(language)]',
@@ -312,7 +319,7 @@
'[job_karma_high]', '[job_karma_med]', '[job_karma_low]',
'[sql_sanitize_text(flavor_text)]', '[sql_sanitize_text(med_record)]', '[sql_sanitize_text(sec_record)]', '[sql_sanitize_text(gen_record)]',
'[playertitlelist]', '[be_special]',
- '[disabilities]', '[organlist]', '[rlimblist]', '[nanotrasen_relation]', '[speciesprefs]')
+ '[disabilities]', '[organlist]', '[rlimblist]', '[nanotrasen_relation]', '[speciesprefs]','[socks]')
"}
)
diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm
index 8e1c0e12964..f1dd7b307f3 100644
--- a/code/modules/client/preferences_savefile.dm
+++ b/code/modules/client/preferences_savefile.dm
@@ -141,6 +141,7 @@
S["eyes_blue"] >> b_eyes
S["underwear"] >> underwear
S["undershirt"] >> undershirt
+ S["socks"] >> socks
S["backbag"] >> backbag
S["b_type"] >> b_type
S["accent"] >> accent
@@ -203,6 +204,7 @@
b_eyes = sanitize_integer(b_eyes, 0, 255, initial(b_eyes))
underwear = sanitize_integer(underwear, 1, underwear_m.len, initial(underwear))
undershirt = sanitize_integer(undershirt, 1, undershirt_t.len, initial(undershirt))
+ socks = sanitize_integer(socks,1 socks_t.len, initial(socks))
backbag = sanitize_integer(backbag, 1, backbaglist.len, initial(backbag))
b_type = sanitize_text(b_type, initial(b_type))
accent = sanitize_text(accent, initial(accent))
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index cc287c81a21..7d464ff0f22 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -244,6 +244,8 @@
stat(null, eta_status)
if (client.statpanel == "Status")
+ if(locate(/obj/item/device/assembly/health) in src)
+ stat(null, "Health: [health]")
if (internal)
if (!internal.air_contents)
qdel(internal)
diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm
index bc10d54b1c8..7d7d400c9c3 100644
--- a/code/modules/mob/living/carbon/human/human_defines.dm
+++ b/code/modules/mob/living/carbon/human/human_defines.dm
@@ -30,7 +30,8 @@
var/b_type = "A+" //Player's bloodtype
var/underwear = "Nude" //Which underwear the player wants
- var/undershirt = "Nude" //Which undershirt the player wants.
+ var/undershirt = "Nude" //Which undershirt the player wants
+ var/socks = "Nude" //Which socks the player wants
var/backbag = 2 //Which backpack type the player has chosen. Nothing, Satchel or Backpack.
//Equipment slots
diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm
index 2e7a5e2be23..f7493c272d8 100644
--- a/code/modules/mob/living/carbon/human/update_icons.dm
+++ b/code/modules/mob/living/carbon/human/update_icons.dm
@@ -327,6 +327,13 @@ var/global/list/damage_icon_parts = list()
if(U2)
stand_icon.Blend(new /icon(U2.icon, "us_[U2.icon_state]_s"), ICON_OVERLAY)
+
+ if(socks)
+ var/datum/sprite_accessory/socks/U3 = socks_list[socks]
+ if(U3)
+ stand_icon.Blend(new /icon(U3.icon, "sk_[U3.icon_state]_s"), ICON_OVERLAY)
+
+
if(update_icons)
update_icons()
diff --git a/code/modules/mob/new_player/preferences_setup.dm b/code/modules/mob/new_player/preferences_setup.dm
index b60ebe12c5d..77f48b976d5 100644
--- a/code/modules/mob/new_player/preferences_setup.dm
+++ b/code/modules/mob/new_player/preferences_setup.dm
@@ -7,6 +7,7 @@ datum/preferences
gender = pick(MALE, FEMALE)
underwear = random_underwear(gender)
undershirt = random_undershirt(gender)
+ socks = random_socks(gender)
if(species == "Human")
s_tone = random_skin_tone()
h_style = random_hair_style(gender, species)
@@ -264,6 +265,12 @@ datum/preferences
if(U2)
undershirt_s = new/icon(U2.icon, "[U2.icon_state]_s", ICON_OVERLAY)
+ var/icon/socks_s = null
+ if(socks)
+ var/datum/sprite_accessory/socks/U3 = socks_list[socks]
+ if(U3)
+ socks_s = new/icon(U3.icon, "[U3.icon_state]_s", ICON_OVERLAY)
+
var/icon/clothes_s = null
var/uniform_dmi='icons/mob/uniform.dmi'
if(disabilities&DISABILITY_FLAG_FAT)
@@ -792,6 +799,8 @@ datum/preferences
preview_icon.Blend(underwear_s, ICON_OVERLAY)
if(undershirt_s)
preview_icon.Blend(undershirt_s, ICON_OVERLAY)
+ if(socks_s)
+ preview_icon.Blend(socks_s, ICON_OVERLAY)
if(clothes_s)
preview_icon.Blend(clothes_s, ICON_OVERLAY)
preview_icon_front = new(preview_icon, dir = SOUTH)
@@ -800,4 +809,5 @@ datum/preferences
del(eyes_s)
del(underwear_s)
del(undershirt_s)
+ del(socks_s)
del(clothes_s)
diff --git a/code/modules/mob/new_player/sprite_accessories.dm b/code/modules/mob/new_player/sprite_accessories.dm
index 45fe53c3d82..5cc722bb7fd 100644
--- a/code/modules/mob/new_player/sprite_accessories.dm
+++ b/code/modules/mob/new_player/sprite_accessories.dm
@@ -1260,4 +1260,193 @@
name = "Fire Tank-Top"
icon_state = "tank_fire"
gender = NEUTER
-//end tanktops
\ No newline at end of file
+//end tanktops
+
+///////////////////////
+// Socks Definitions //
+///////////////////////
+/datum/sprite_accessory/socks
+ icon = 'icons/mob/underwear.dmi'
+
+/datum/sprite_accessory/socks/nude
+ name = "Nude"
+ icon_state = null
+ gender = NEUTER
+ species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington")
+
+
+/datum/sprite_accessory/socks/white_norm
+ name = "Normal White"
+ icon_state = "white_norm"
+ gender = NEUTER
+ species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington")
+
+
+/datum/sprite_accessory/socks/black_norm
+ name = "Normal Black"
+ icon_state = "black_norm"
+ gender = NEUTER
+ species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington")
+
+
+/datum/sprite_accessory/socks/white_short
+ name = "Short White"
+ icon_state = "white_short"
+ gender = NEUTER
+ species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington")
+
+
+/datum/sprite_accessory/socks/black_short
+ name = "Short Black"
+ icon_state = "black_short"
+ gender = NEUTER
+ species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington")
+
+
+/datum/sprite_accessory/socks/white_knee
+ name = "Knee-high White"
+ icon_state = "white_knee"
+ gender = NEUTER
+ species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington")
+
+
+/datum/sprite_accessory/socks/black_knee
+ name = "Knee-high Black"
+ icon_state = "black_knee"
+ gender = NEUTER
+ species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington")
+
+
+/datum/sprite_accessory/socks/thin_knee
+ name = "Knee-high Thin"
+ icon_state = "thin_knee"
+ gender = FEMALE
+ species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington")
+
+
+/datum/sprite_accessory/socks/striped_knee
+ name = "Knee-high Striped"
+ icon_state = "striped_knee"
+ gender = NEUTER
+ species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington")
+
+
+/datum/sprite_accessory/socks/rainbow_knee
+ name = "Knee-high Rainbow"
+ icon_state = "rainbow_knee"
+ gender = NEUTER
+ species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington")
+
+
+/datum/sprite_accessory/socks/white_thigh
+ name = "Thigh-high White"
+ icon_state = "white_thigh"
+ gender = NEUTER
+ species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington")
+
+/datum/sprite_accessory/socks/black_thigh
+ name = "Thigh-high Black"
+ icon_state = "black_thigh"
+ gender = NEUTER
+ species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington")
+
+
+/datum/sprite_accessory/socks/thin_thigh
+ name = "Thigh-high Thin"
+ icon_state = "thin_thigh"
+ gender = FEMALE
+ species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington")
+
+
+/datum/sprite_accessory/socks/striped_thigh
+ name = "Thigh-high Striped"
+ icon_state = "striped_thigh"
+ gender = NEUTER
+ species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington")
+
+
+/datum/sprite_accessory/socks/rainbow_thigh
+ name = "Thigh-high Rainbow"
+ icon_state = "rainbow_thigh"
+ gender = NEUTER
+ species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington")
+
+
+/datum/sprite_accessory/socks/pantyhose
+ name = "Pantyhose"
+ icon_state = "pantyhose"
+ gender = FEMALE
+ species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington")
+
+
+/datum/sprite_accessory/socks/black_fishnet
+ name = "Black Fishnet"
+ icon_state = "black_fishnet"
+ gender = NEUTER
+ species_allowed = list("Human","Unathi","Diona","Grey","Machine","Tajaran","Vulpakanin","Slime People","Skellington")
+
+/datum/sprite_accessory/socks/vox_white
+ name = "Vox White"
+ icon_state = "vox_white"
+ gender = NEUTER
+ species_allowed = list("Vox")
+
+/datum/sprite_accessory/socks/vox_black
+ name = "Vox Black"
+ icon_state = "vox_black"
+ gender = NEUTER
+ species_allowed = list("Vox")
+
+/datum/sprite_accessory/socks/vox_thin
+ name = "Vox Black Thin"
+ icon_state = "vox_blackthin"
+ gender = NEUTER
+ species_allowed = list("Vox")
+
+/datum/sprite_accessory/socks/vox_rainbow
+ name = "Vox Rainbow"
+ icon_state = "vox_rainbow"
+ gender = NEUTER
+ species_allowed = list("Vox")
+
+/datum/sprite_accessory/socks/vox_stripped
+ name = "Vox Stripped"
+ icon_state = "vox_white"
+ gender = NEUTER
+ species_allowed = list("Vox")
+
+/datum/sprite_accessory/socks/vox_white_thigh
+ name = "Vox Thigh-high White"
+ icon_state = "vox_whiteTH"
+ gender = NEUTER
+ species_allowed = list("Vox")
+
+/datum/sprite_accessory/socks/vox_black_thigh
+ name = "Vox Thigh-high Black"
+ icon_state = "vox_blackTH"
+ gender = NEUTER
+ species_allowed = list("Vox")
+
+/datum/sprite_accessory/socks/vox_thin_thigh
+ name = "Vox Thigh-high Thin"
+ icon_state = "vox_blackthinTH"
+ gender = NEUTER
+ species_allowed = list("Vox")
+
+/datum/sprite_accessory/socks/vox_rainbow_thigh
+ name = "Vox Thigh-high Rainbow"
+ icon_state = "vox_rainbowTH"
+ gender = NEUTER
+ species_allowed = list("Vox")
+
+/datum/sprite_accessory/socks/vox_stripped_thigh
+ name = "Vox Thigh-high Stripped"
+ icon_state = "vox_strippedTH"
+ gender = NEUTER
+ species_allowed = list("Vox")
+
+/datum/sprite_accessory/socks/vox_fishnet
+ name = "Vox Fishnets"
+ icon_state = "vox_fishnet"
+ gender = NEUTER
+ species_allowed = list("Vox")
\ No newline at end of file
diff --git a/code/modules/reagents/Chemistry-Holder.dm b/code/modules/reagents/Chemistry-Holder.dm
index f8661d168e8..29a67ffe492 100644
--- a/code/modules/reagents/Chemistry-Holder.dm
+++ b/code/modules/reagents/Chemistry-Holder.dm
@@ -5,621 +5,618 @@ var/const/INGEST = 2
///////////////////////////////////////////////////////////////////////////////////
-datum
- reagents
- var/list/datum/reagent/reagent_list = new/list()
- var/total_volume = 0
- var/maximum_volume = 100
- var/atom/my_atom = null
+/datum/reagents
+ var/list/datum/reagent/reagent_list = new/list()
+ var/total_volume = 0
+ var/maximum_volume = 100
+ var/atom/my_atom = null
- New(maximum=100)
- maximum_volume = maximum
+/datum/reagents/New(maximum=100)
+ maximum_volume = maximum
- //I dislike having these here but map-objects are initialised before world/New() is called. >_>
- if(!chemical_reagents_list)
- //Chemical Reagents - Initialises all /datum/reagent into a list indexed by reagent id
- var/paths = subtypesof(/datum/reagent)
- chemical_reagents_list = list()
- for(var/path in paths)
- var/datum/reagent/D = new path()
- chemical_reagents_list[D.id] = D
- if(!chemical_reactions_list)
- //Chemical Reactions - Initialises all /datum/chemical_reaction into a list
- // It is filtered into multiple lists within a list.
- // For example:
- // chemical_reaction_list["plasma"] is a list of all reactions relating to plasma
+ //I dislike having these here but map-objects are initialised before world/New() is called. >_>
+ if(!chemical_reagents_list)
+ //Chemical Reagents - Initialises all /datum/reagent into a list indexed by reagent id
+ var/paths = subtypesof(/datum/reagent)
+ chemical_reagents_list = list()
+ for(var/path in paths)
+ var/datum/reagent/D = new path()
+ chemical_reagents_list[D.id] = D
+ if(!chemical_reactions_list)
+ //Chemical Reactions - Initialises all /datum/chemical_reaction into a list
+ // It is filtered into multiple lists within a list.
+ // For example:
+ // chemical_reaction_list["plasma"] is a list of all reactions relating to plasma
- var/paths = subtypesof(/datum/chemical_reaction)
- chemical_reactions_list = list()
+ var/paths = subtypesof(/datum/chemical_reaction)
+ chemical_reactions_list = list()
- for(var/path in paths)
+ for(var/path in paths)
- var/datum/chemical_reaction/D = new path()
- var/list/reaction_ids = list()
+ var/datum/chemical_reaction/D = new path()
+ var/list/reaction_ids = list()
- if(D && D.required_reagents && D.required_reagents.len)
- for(var/reaction in D.required_reagents)
- reaction_ids += reaction
+ if(D && D.required_reagents && D.required_reagents.len)
+ for(var/reaction in D.required_reagents)
+ reaction_ids += reaction
- // Create filters based on each reagent id in the required reagents list
- for(var/id in reaction_ids)
- if(!chemical_reactions_list[id])
- chemical_reactions_list[id] = list()
- chemical_reactions_list[id] += D
- break // Don't bother adding ourselves to other reagent ids, it is redundant.
+ // Create filters based on each reagent id in the required reagents list
+ for(var/id in reaction_ids)
+ if(!chemical_reactions_list[id])
+ chemical_reactions_list[id] = list()
+ chemical_reactions_list[id] += D
+ break // Don't bother adding ourselves to other reagent ids, it is redundant.
- proc
+/datum/reagents/proc/remove_any(var/amount=1)
+ var/total_transfered = 0
+ var/current_list_element = 1
- remove_any(var/amount=1)
- var/total_transfered = 0
- var/current_list_element = 1
+ current_list_element = rand(1,reagent_list.len)
- current_list_element = rand(1,reagent_list.len)
+ while(total_transfered != amount)
+ if(total_transfered >= amount) break
+ if(total_volume <= 0 || !reagent_list.len) break
- while(total_transfered != amount)
- if(total_transfered >= amount) break
- if(total_volume <= 0 || !reagent_list.len) break
+ if(current_list_element > reagent_list.len) current_list_element = 1
+ var/datum/reagent/current_reagent = reagent_list[current_list_element]
- if(current_list_element > reagent_list.len) current_list_element = 1
- var/datum/reagent/current_reagent = reagent_list[current_list_element]
+ src.remove_reagent(current_reagent.id, min(1, amount - total_transfered))
- src.remove_reagent(current_reagent.id, min(1, amount - total_transfered))
+ current_list_element++
+ total_transfered++
+ src.update_total()
- current_list_element++
- total_transfered++
- src.update_total()
+ handle_reactions()
+ return total_transfered
- handle_reactions()
- return total_transfered
+/datum/reagents/proc/get_master_reagent_name()
+ var/the_name = null
+ var/the_volume = 0
+ for(var/datum/reagent/A in reagent_list)
+ if(A.volume > the_volume)
+ the_volume = A.volume
+ the_name = A.name
- get_master_reagent_name()
- var/the_name = null
- var/the_volume = 0
- for(var/datum/reagent/A in reagent_list)
- if(A.volume > the_volume)
- the_volume = A.volume
- the_name = A.name
+ return the_name
- return the_name
+/datum/reagents/proc/get_master_reagent_id()
+ var/the_id = null
+ var/the_volume = 0
+ for(var/datum/reagent/A in reagent_list)
+ if(A.volume > the_volume)
+ the_volume = A.volume
+ the_id = A.id
- get_master_reagent_id()
- var/the_id = null
- var/the_volume = 0
- for(var/datum/reagent/A in reagent_list)
- if(A.volume > the_volume)
- the_volume = A.volume
- the_id = A.id
+ return the_id
- return the_id
+/datum/reagents/proc/trans_to(var/obj/target, var/amount=1, var/multiplier=1, var/preserve_data=1)//if preserve_data=0, the reagents data will be lost. Usefull if you use data for some strange stuff and don't want it to be transferred.
+ if (!target )
+ return
+ if (!target.reagents || src.total_volume<=0)
+ return
+ var/datum/reagents/R = target.reagents
+ amount = min(min(amount, src.total_volume), R.maximum_volume-R.total_volume)
+ var/part = amount / src.total_volume
+ var/trans_data = null
+ for (var/datum/reagent/current_reagent in src.reagent_list)
+ if (!current_reagent)
+ continue
+ if (current_reagent.id == "blood" && ishuman(target))
+ var/mob/living/carbon/human/H = target
+ H.inject_blood(my_atom, amount)
+ continue
+ var/current_reagent_transfer = current_reagent.volume * part
+ if(preserve_data)
+ trans_data = copy_data(current_reagent)
- trans_to(var/obj/target, var/amount=1, var/multiplier=1, var/preserve_data=1)//if preserve_data=0, the reagents data will be lost. Usefull if you use data for some strange stuff and don't want it to be transferred.
- if (!target )
- return
- if (!target.reagents || src.total_volume<=0)
- return
- var/datum/reagents/R = target.reagents
- amount = min(min(amount, src.total_volume), R.maximum_volume-R.total_volume)
- var/part = amount / src.total_volume
- var/trans_data = null
- for (var/datum/reagent/current_reagent in src.reagent_list)
- if (!current_reagent)
- continue
- if (current_reagent.id == "blood" && ishuman(target))
- var/mob/living/carbon/human/H = target
- H.inject_blood(my_atom, amount)
- continue
- var/current_reagent_transfer = current_reagent.volume * part
- if(preserve_data)
- trans_data = copy_data(current_reagent)
+ R.add_reagent(current_reagent.id, (current_reagent_transfer * multiplier), trans_data, src.chem_temp)
+ src.remove_reagent(current_reagent.id, current_reagent_transfer)
- R.add_reagent(current_reagent.id, (current_reagent_transfer * multiplier), trans_data, src.chem_temp)
- src.remove_reagent(current_reagent.id, current_reagent_transfer)
+ src.update_total()
+ R.update_total()
+ R.handle_reactions()
+ src.handle_reactions()
+ return amount
- src.update_total()
- R.update_total()
- R.handle_reactions()
- src.handle_reactions()
- return amount
+/datum/reagents/proc/trans_to_ingest(var/obj/target, var/amount=1, var/multiplier=1, var/preserve_data=1)//For items ingested. A delay is added between ingestion and addition of the reagents
+ if (!target )
+ return
+ if (!target.reagents || src.total_volume<=0)
+ return
- trans_to_ingest(var/obj/target, var/amount=1, var/multiplier=1, var/preserve_data=1)//For items ingested. A delay is added between ingestion and addition of the reagents
- if (!target )
- return
- if (!target.reagents || src.total_volume<=0)
- return
+ var/obj/item/weapon/reagent_containers/glass/beaker/noreact/B = new /obj/item/weapon/reagent_containers/glass/beaker/noreact //temporary holder
+ B.volume = 1000
- var/obj/item/weapon/reagent_containers/glass/beaker/noreact/B = new /obj/item/weapon/reagent_containers/glass/beaker/noreact //temporary holder
- B.volume = 1000
+ var/datum/reagents/BR = B.reagents
+ var/datum/reagents/R = target.reagents
- var/datum/reagents/BR = B.reagents
- var/datum/reagents/R = target.reagents
+ amount = min(min(amount, src.total_volume), R.maximum_volume-R.total_volume)
- amount = min(min(amount, src.total_volume), R.maximum_volume-R.total_volume)
+ src.trans_to(B, amount)
- src.trans_to(B, amount)
+ spawn(-1)
+ src = null // Survive through deletion of the reagent holder
+ sleep(100)
+ if(!target)
+ return
+ BR.trans_to(target, BR.total_volume)
+ qdel(B)
- spawn(-1)
- src = null // Survive through deletion of the reagent holder
- sleep(100)
- if(!target)
- return
- BR.trans_to(target, BR.total_volume)
- qdel(B)
+ return amount
- return amount
+/datum/reagents/proc/copy_to(var/obj/target, var/amount=1, var/multiplier=1, var/preserve_data=1, var/safety = 0)
+ if(!target)
+ return
+ if(!target.reagents || src.total_volume<=0)
+ return
+ var/datum/reagents/R = target.reagents
+ amount = min(min(amount, src.total_volume), R.maximum_volume-R.total_volume)
+ var/part = amount / src.total_volume
+ var/trans_data = null
+ for (var/datum/reagent/current_reagent in src.reagent_list)
+ var/current_reagent_transfer = current_reagent.volume * part
+ if(preserve_data)
+ trans_data = copy_data(current_reagent)
+ R.add_reagent(current_reagent.id, (current_reagent_transfer * multiplier), trans_data)
- copy_to(var/obj/target, var/amount=1, var/multiplier=1, var/preserve_data=1, var/safety = 0)
- if(!target)
- return
- if(!target.reagents || src.total_volume<=0)
- return
- var/datum/reagents/R = target.reagents
- amount = min(min(amount, src.total_volume), R.maximum_volume-R.total_volume)
- var/part = amount / src.total_volume
- var/trans_data = null
- for (var/datum/reagent/current_reagent in src.reagent_list)
- var/current_reagent_transfer = current_reagent.volume * part
- if(preserve_data)
- trans_data = copy_data(current_reagent)
- R.add_reagent(current_reagent.id, (current_reagent_transfer * multiplier), trans_data)
+ src.update_total()
+ R.update_total()
+ R.handle_reactions()
+ src.handle_reactions()
+ return amount
- src.update_total()
- R.update_total()
- R.handle_reactions()
- src.handle_reactions()
- return amount
+/datum/reagents/proc/trans_id_to(var/obj/target, var/reagent, var/amount=1, var/preserve_data=1)//Not sure why this proc didn't exist before. It does now! /N
+ if (!target)
+ return
+ if (!target.reagents || src.total_volume<=0 || !src.get_reagent_amount(reagent))
+ return
- trans_id_to(var/obj/target, var/reagent, var/amount=1, var/preserve_data=1)//Not sure why this proc didn't exist before. It does now! /N
- if (!target)
- return
- if (!target.reagents || src.total_volume<=0 || !src.get_reagent_amount(reagent))
- return
+ var/datum/reagents/R = target.reagents
+ if(src.get_reagent_amount(reagent) R.maximum_volume) return 0
+ if (!target) return
+ var/total_transfered = 0
+ var/current_list_element = 1
+ var/datum/reagents/R = target.reagents
+ var/trans_data = null
+ //if(R.total_volume + amount > R.maximum_volume) return 0
- current_list_element = rand(1,reagent_list.len) //Eh, bandaid fix.
+ current_list_element = rand(1,reagent_list.len) //Eh, bandaid fix.
- while(total_transfered != amount)
- if(total_transfered >= amount) break //Better safe than sorry.
- if(total_volume <= 0 || !reagent_list.len) break
- if(R.total_volume >= R.maximum_volume) break
+ while(total_transfered != amount)
+ if(total_transfered >= amount) break //Better safe than sorry.
+ if(total_volume <= 0 || !reagent_list.len) break
+ if(R.total_volume >= R.maximum_volume) break
- if(current_list_element > reagent_list.len) current_list_element = 1
- var/datum/reagent/current_reagent = reagent_list[current_list_element]
- if(preserve_data)
- trans_data = current_reagent.data
- R.add_reagent(current_reagent.id, (1 * multiplier), trans_data)
- src.remove_reagent(current_reagent.id, 1)
+ if(current_list_element > reagent_list.len) current_list_element = 1
+ var/datum/reagent/current_reagent = reagent_list[current_list_element]
+ if(preserve_data)
+ trans_data = current_reagent.data
+ R.add_reagent(current_reagent.id, (1 * multiplier), trans_data)
+ src.remove_reagent(current_reagent.id, 1)
- current_list_element++
- total_transfered++
- src.update_total()
- R.update_total()
- R.handle_reactions()
- handle_reactions()
+ current_list_element++
+ total_transfered++
+ src.update_total()
+ R.update_total()
+ R.handle_reactions()
+ handle_reactions()
- return total_transfered
+ return total_transfered
*/
- conditional_update_move(var/atom/A, var/Running = 0)
- for(var/datum/reagent/R in reagent_list)
- R.on_move (A, Running)
- update_total()
+/datum/reagents/proc/conditional_update_move(var/atom/A, var/Running = 0)
+ for(var/datum/reagent/R in reagent_list)
+ R.on_move (A, Running)
+ update_total()
- conditional_update(var/atom/A, )
- for(var/datum/reagent/R in reagent_list)
- R.on_update (A)
- update_total()
+/datum/reagents/proc/conditional_update(var/atom/A, )
+ for(var/datum/reagent/R in reagent_list)
+ R.on_update (A)
+ update_total()
+
+/datum/reagents/proc/handle_reactions()
+ if(my_atom.flags & NOREACT) return //Yup, no reactions here. No siree.
+
+ var/reaction_occured = 0
+ do
+ reaction_occured = 0
+ for(var/datum/reagent/R in reagent_list) // Usually a small list
+ for(var/reaction in chemical_reactions_list[R.id]) // Was a big list but now it should be smaller since we filtered it with our reagent id
+
+ if(!reaction)
+ continue
+
+ var/datum/chemical_reaction/C = reaction
+
+ var/total_required_reagents = C.required_reagents.len
+ var/total_matching_reagents = 0
+ var/total_required_catalysts = C.required_catalysts.len
+ var/total_matching_catalysts= 0
+ var/matching_container = 0
+ var/matching_other = 0
+ var/list/multipliers = new/list()
+ var/min_temp = C.min_temp //Minimum temperature required for the reaction to occur (heat to/above this)
+ var/max_temp = C.max_temp //Maximum temperature allowed for the reaction to occur (cool to/below this)
+ for(var/B in C.required_reagents)
+ if(!has_reagent(B, C.required_reagents[B])) break
+ total_matching_reagents++
+ multipliers += round(get_reagent_amount(B) / C.required_reagents[B])
+ for(var/B in C.required_catalysts)
+ if(!has_reagent(B, C.required_catalysts[B])) break
+ total_matching_catalysts++
+
+ if(!C.required_container)
+ matching_container = 1
+
+ else
+ if(my_atom.type == C.required_container)
+ matching_container = 1
+
+ if(!C.required_other)
+ matching_other = 1
+
+ else
+ /*if(istype(my_atom, /obj/item/slime_core))
+ var/obj/item/slime_core/M = my_atom
+
+ if(M.POWERFLAG == C.required_other && M.Uses > 0) // added a limit to slime cores -- Muskets requested this
+ matching_other = 1*/
+ if(istype(my_atom, /obj/item/slime_extract))
+ var/obj/item/slime_extract/M = my_atom
+
+ if(M.Uses > 0) // added a limit to slime cores -- Muskets requested this
+ matching_other = 1
+
+ if(min_temp == 0)
+ min_temp = chem_temp
+
+ if(total_matching_reagents == total_required_reagents && total_matching_catalysts == total_required_catalysts && matching_container && matching_other && chem_temp <= max_temp && chem_temp >= min_temp)
+ var/multiplier = min(multipliers)
+ var/preserved_data = null
+ for(var/B in C.required_reagents)
+ if(!preserved_data)
+ preserved_data = get_data(B)
+ remove_reagent(B, (multiplier * C.required_reagents[B]), safety = 1)
+
+ var/created_volume = C.result_amount*multiplier
+ if(C.result)
+ feedback_add_details("chemical_reaction","[C.result]|[C.result_amount*multiplier]")
+ multiplier = max(multiplier, 1) //this shouldnt happen ...
+ add_reagent(C.result, C.result_amount*multiplier)
+ set_data(C.result, preserved_data)
+
+ //add secondary products
+ for(var/S in C.secondary_results)
+ add_reagent(S, C.result_amount * C.secondary_results[S] * multiplier)
+
+ var/list/seen = viewers(4, get_turf(my_atom))
+ for(var/mob/M in seen)
+ if(!C.no_message)
+ M << "\blue \icon[my_atom] [C.mix_message]"
+
+ /* if(istype(my_atom, /obj/item/slime_core))
+ var/obj/item/slime_core/ME = my_atom
+ ME.Uses--
+ if(ME.Uses <= 0) // give the notification that the slime core is dead
+ for(var/mob/M in viewers(4, get_turf(my_atom)) )
+ M << "\blue \icon[my_atom] The innards begin to boil!"
+ */
+ if(istype(my_atom, /obj/item/slime_extract))
+ var/obj/item/slime_extract/ME2 = my_atom
+ ME2.Uses--
+ if(ME2.Uses <= 0) // give the notification that the slime core is dead
+ for(var/mob/M in seen)
+ M << "\blue \icon[my_atom] The [my_atom]'s power is consumed in the reaction."
+ ME2.name = "used slime extract"
+ ME2.desc = "This extract has been used up."
+
+ playsound(get_turf(my_atom), C.mix_sound, 80, 1)
+
+ C.on_reaction(src, created_volume)
+ reaction_occured = 1
+ break
+
+ while(reaction_occured)
+ update_total()
+ return 0
+
+/datum/reagents/proc/isolate_reagent(var/reagent)
+ for(var/A in reagent_list)
+ var/datum/reagent/R = A
+ if (R.id != reagent)
+ del_reagent(R.id)
+ update_total()
+
+/datum/reagents/proc/del_reagent(var/reagent)
+ for(var/A in reagent_list)
+ var/datum/reagent/R = A
+ if (R.id == reagent)
+ if(istype(my_atom, /mob/living))
+ var/mob/living/M = my_atom
+ R.reagent_deleted(M)
+ reagent_list -= A
+ qdel(A)
+ update_total()
+ my_atom.on_reagent_change()
+ check_ignoreslow(my_atom)
+ check_gofast(my_atom)
+ check_goreallyfast(my_atom)
+ return 0
+
+
+ return 1
+
+/datum/reagents/proc/update_total()
+ total_volume = 0
+ for(var/datum/reagent/R in reagent_list)
+ if(R.volume < 0.1)
+ del_reagent(R.id)
+ else
+ total_volume += R.volume
+
+ return 0
+
+/datum/reagents/proc/clear_reagents()
+ for(var/datum/reagent/R in reagent_list)
+ del_reagent(R.id)
+ return 0
+
+/datum/reagents/proc/reaction_check(var/mob/M, var/datum/reagent/R)
+ var/can_process = 0
+ if(!istype(M, /mob/living)) //Non-living mobs can't metabolize reagents, so don't bother trying (runtime safety check)
+ return can_process
+ if(ishuman(M))
+ var/mob/living/carbon/human/H = M
+ //Check if this mob's species is set and can process this type of reagent
+ if(H.species && H.species.reagent_tag)
+ if((R.process_flags & SYNTHETIC) && (H.species.reagent_tag & PROCESS_SYN)) //SYNTHETIC-oriented reagents require PROCESS_SYN
+ can_process = 1
+ if((R.process_flags & ORGANIC) && (H.species.reagent_tag & PROCESS_ORG)) //ORGANIC-oriented reagents require PROCESS_ORG
+ can_process = 1
+ //Species with PROCESS_DUO are only affected by reagents that affect both organics and synthetics, like acid and hellwater
+ if((R.process_flags & ORGANIC) && (R.process_flags & SYNTHETIC) && (H.species.reagent_tag & PROCESS_DUO))
+ can_process = 1
+ //We'll assume that non-human mobs lack the ability to process synthetic-oriented reagents (adjust this if we need to change that assumption)
+ else
+ if(R.process_flags != SYNTHETIC)
+ can_process = 1
+ return can_process
+
+/datum/reagents/proc/reaction(var/atom/A, var/method=TOUCH, var/volume_modifier=0)
+
+ switch(method)
+ if(TOUCH)
+ for(var/datum/reagent/R in reagent_list)
+ if(ismob(A))
+ spawn(0)
+ if(!R) return
+ var/check = reaction_check(A, R)
+ if(!check)
+ continue
+ else
+ R.reaction_mob(A, TOUCH, R.volume+volume_modifier)
+ if(isturf(A))
+ spawn(0)
+ if(!R) return
+ else R.reaction_turf(A, R.volume+volume_modifier)
+ if(isobj(A))
+ spawn(0)
+ if(!R) return
+ else R.reaction_obj(A, R.volume+volume_modifier)
+ if(INGEST)
+ for(var/datum/reagent/R in reagent_list)
+ if(ismob(A) && R)
+ spawn(0)
+ if(!R) return
+ var/check = reaction_check(A, R)
+ if(!check)
+ continue
+ else
+ R.reaction_mob(A, INGEST, R.volume+volume_modifier)
+ if(isturf(A) && R)
+ spawn(0)
+ if(!R) return
+ else R.reaction_turf(A, R.volume+volume_modifier)
+ if(isobj(A) && R)
+ spawn(0)
+ if(!R) return
+ else R.reaction_obj(A, R.volume+volume_modifier)
+ return
+
+/datum/reagents/proc/add_reagent(var/reagent, var/amount, var/list/data=null, var/reagtemp = 300)
+ if(!isnum(amount)) return 1
+ update_total()
+ if(total_volume + amount > maximum_volume) amount = (maximum_volume - total_volume) //Doesnt fit in. Make it disappear. Shouldnt happen. Will happen.
+ if(amount <= 0) return 0
+ chem_temp = round(((amount * reagtemp) + (total_volume * chem_temp)) / (total_volume + amount)) //equalize with new chems
+
+ for(var/A in reagent_list)
+
+ var/datum/reagent/R = A
+ if (R.id == reagent)
+ R.volume += amount
+ update_total()
+ my_atom.on_reagent_change()
+/*
+ // mix dem viruses
+ if(R.id == "blood" && reagent == "blood")
+ if(R.data && data)
+
+ if(R.data["viruses"] || data["viruses"])
+
+ var/list/mix1 = R.data["viruses"]
+ var/list/mix2 = data["viruses"]
+
+ // Stop issues with the list changing during mixing.
+ var/list/to_mix = list()
+
+ for(var/datum/disease/advance/AD in mix1)
+ to_mix += AD
+ for(var/datum/disease/advance/AD in mix2)
+ to_mix += AD
+
+ var/datum/disease/advance/AD = Advance_Mix(to_mix)
+ if(AD)
+ var/list/preserve = list(AD)
+ for(var/D in R.data["viruses"])
+ if(!istype(D, /datum/disease/advance))
+ preserve += D
+ R.data["viruses"] = preserve
+*/
handle_reactions()
- if(my_atom.flags & NOREACT) return //Yup, no reactions here. No siree.
+ return 0
- var/reaction_occured = 0
- do
- reaction_occured = 0
- for(var/datum/reagent/R in reagent_list) // Usually a small list
- for(var/reaction in chemical_reactions_list[R.id]) // Was a big list but now it should be smaller since we filtered it with our reagent id
+ var/datum/reagent/D = chemical_reagents_list[reagent]
+ if(D)
- if(!reaction)
- continue
-
- var/datum/chemical_reaction/C = reaction
-
- var/total_required_reagents = C.required_reagents.len
- var/total_matching_reagents = 0
- var/total_required_catalysts = C.required_catalysts.len
- var/total_matching_catalysts= 0
- var/matching_container = 0
- var/matching_other = 0
- var/list/multipliers = new/list()
- var/min_temp = C.min_temp //Minimum temperature required for the reaction to occur (heat to/above this)
- var/max_temp = C.max_temp //Maximum temperature allowed for the reaction to occur (cool to/below this)
- for(var/B in C.required_reagents)
- if(!has_reagent(B, C.required_reagents[B])) break
- total_matching_reagents++
- multipliers += round(get_reagent_amount(B) / C.required_reagents[B])
- for(var/B in C.required_catalysts)
- if(!has_reagent(B, C.required_catalysts[B])) break
- total_matching_catalysts++
-
- if(!C.required_container)
- matching_container = 1
-
- else
- if(my_atom.type == C.required_container)
- matching_container = 1
-
- if(!C.required_other)
- matching_other = 1
-
- else
- /*if(istype(my_atom, /obj/item/slime_core))
- var/obj/item/slime_core/M = my_atom
-
- if(M.POWERFLAG == C.required_other && M.Uses > 0) // added a limit to slime cores -- Muskets requested this
- matching_other = 1*/
- if(istype(my_atom, /obj/item/slime_extract))
- var/obj/item/slime_extract/M = my_atom
-
- if(M.Uses > 0) // added a limit to slime cores -- Muskets requested this
- matching_other = 1
-
- if(min_temp == 0)
- min_temp = chem_temp
-
- if(total_matching_reagents == total_required_reagents && total_matching_catalysts == total_required_catalysts && matching_container && matching_other && chem_temp <= max_temp && chem_temp >= min_temp)
- var/multiplier = min(multipliers)
- var/preserved_data = null
- for(var/B in C.required_reagents)
- if(!preserved_data)
- preserved_data = get_data(B)
- remove_reagent(B, (multiplier * C.required_reagents[B]), safety = 1)
-
- var/created_volume = C.result_amount*multiplier
- if(C.result)
- feedback_add_details("chemical_reaction","[C.result]|[C.result_amount*multiplier]")
- multiplier = max(multiplier, 1) //this shouldnt happen ...
- add_reagent(C.result, C.result_amount*multiplier)
- set_data(C.result, preserved_data)
-
- //add secondary products
- for(var/S in C.secondary_results)
- add_reagent(S, C.result_amount * C.secondary_results[S] * multiplier)
-
- var/list/seen = viewers(4, get_turf(my_atom))
- for(var/mob/M in seen)
- if(!C.no_message)
- M << "\blue \icon[my_atom] [C.mix_message]"
-
- /* if(istype(my_atom, /obj/item/slime_core))
- var/obj/item/slime_core/ME = my_atom
- ME.Uses--
- if(ME.Uses <= 0) // give the notification that the slime core is dead
- for(var/mob/M in viewers(4, get_turf(my_atom)) )
- M << "\blue \icon[my_atom] The innards begin to boil!"
- */
- if(istype(my_atom, /obj/item/slime_extract))
- var/obj/item/slime_extract/ME2 = my_atom
- ME2.Uses--
- if(ME2.Uses <= 0) // give the notification that the slime core is dead
- for(var/mob/M in seen)
- M << "\blue \icon[my_atom] The [my_atom]'s power is consumed in the reaction."
- ME2.name = "used slime extract"
- ME2.desc = "This extract has been used up."
-
- playsound(get_turf(my_atom), C.mix_sound, 80, 1)
-
- C.on_reaction(src, created_volume)
- reaction_occured = 1
- break
-
- while(reaction_occured)
- update_total()
- return 0
-
- isolate_reagent(var/reagent)
- for(var/A in reagent_list)
- var/datum/reagent/R = A
- if (R.id != reagent)
- del_reagent(R.id)
- update_total()
-
- del_reagent(var/reagent)
- for(var/A in reagent_list)
- var/datum/reagent/R = A
- if (R.id == reagent)
- if(istype(my_atom, /mob/living))
- var/mob/living/M = my_atom
- R.reagent_deleted(M)
- reagent_list -= A
- qdel(A)
- update_total()
- my_atom.on_reagent_change()
- check_ignoreslow(my_atom)
- check_gofast(my_atom)
- check_goreallyfast(my_atom)
- return 0
-
-
- return 1
-
- update_total()
- total_volume = 0
- for(var/datum/reagent/R in reagent_list)
- if(R.volume < 0.1)
- del_reagent(R.id)
- else
- total_volume += R.volume
-
- return 0
-
- clear_reagents()
- for(var/datum/reagent/R in reagent_list)
- del_reagent(R.id)
- return 0
-
- reaction_check(var/mob/M, var/datum/reagent/R)
- var/can_process = 0
- if(!istype(M, /mob/living)) //Non-living mobs can't metabolize reagents, so don't bother trying (runtime safety check)
- return can_process
- if(ishuman(M))
- var/mob/living/carbon/human/H = M
- //Check if this mob's species is set and can process this type of reagent
- if(H.species && H.species.reagent_tag)
- if((R.process_flags & SYNTHETIC) && (H.species.reagent_tag & PROCESS_SYN)) //SYNTHETIC-oriented reagents require PROCESS_SYN
- can_process = 1
- if((R.process_flags & ORGANIC) && (H.species.reagent_tag & PROCESS_ORG)) //ORGANIC-oriented reagents require PROCESS_ORG
- can_process = 1
- //Species with PROCESS_DUO are only affected by reagents that affect both organics and synthetics, like acid and hellwater
- if((R.process_flags & ORGANIC) && (R.process_flags & SYNTHETIC) && (H.species.reagent_tag & PROCESS_DUO))
- can_process = 1
- //We'll assume that non-human mobs lack the ability to process synthetic-oriented reagents (adjust this if we need to change that assumption)
- else
- if(R.process_flags != SYNTHETIC)
- can_process = 1
- return can_process
-
- reaction(var/atom/A, var/method=TOUCH, var/volume_modifier=0)
-
- switch(method)
- if(TOUCH)
- for(var/datum/reagent/R in reagent_list)
- if(ismob(A))
- spawn(0)
- if(!R) return
- var/check = reaction_check(A, R)
- if(!check)
- continue
- else
- R.reaction_mob(A, TOUCH, R.volume+volume_modifier)
- if(isturf(A))
- spawn(0)
- if(!R) return
- else R.reaction_turf(A, R.volume+volume_modifier)
- if(isobj(A))
- spawn(0)
- if(!R) return
- else R.reaction_obj(A, R.volume+volume_modifier)
- if(INGEST)
- for(var/datum/reagent/R in reagent_list)
- if(ismob(A) && R)
- spawn(0)
- if(!R) return
- var/check = reaction_check(A, R)
- if(!check)
- continue
- else
- R.reaction_mob(A, INGEST, R.volume+volume_modifier)
- if(isturf(A) && R)
- spawn(0)
- if(!R) return
- else R.reaction_turf(A, R.volume+volume_modifier)
- if(isobj(A) && R)
- spawn(0)
- if(!R) return
- else R.reaction_obj(A, R.volume+volume_modifier)
- return
-
- add_reagent(var/reagent, var/amount, var/list/data=null, var/reagtemp = 300)
- if(!isnum(amount)) return 1
- update_total()
- if(total_volume + amount > maximum_volume) amount = (maximum_volume - total_volume) //Doesnt fit in. Make it disappear. Shouldnt happen. Will happen.
- if(amount <= 0) return 0
- chem_temp = round(((amount * reagtemp) + (total_volume * chem_temp)) / (total_volume + amount)) //equalize with new chems
-
- for(var/A in reagent_list)
-
- var/datum/reagent/R = A
- if (R.id == reagent)
- R.volume += amount
- update_total()
- my_atom.on_reagent_change()
-/*
- // mix dem viruses
- if(R.id == "blood" && reagent == "blood")
- if(R.data && data)
-
- if(R.data["viruses"] || data["viruses"])
-
- var/list/mix1 = R.data["viruses"]
- var/list/mix2 = data["viruses"]
-
- // Stop issues with the list changing during mixing.
- var/list/to_mix = list()
-
- for(var/datum/disease/advance/AD in mix1)
- to_mix += AD
- for(var/datum/disease/advance/AD in mix2)
- to_mix += AD
-
- var/datum/disease/advance/AD = Advance_Mix(to_mix)
- if(AD)
- var/list/preserve = list(AD)
- for(var/D in R.data["viruses"])
- if(!istype(D, /datum/disease/advance))
- preserve += D
- R.data["viruses"] = preserve
-*/
-
- handle_reactions()
- return 0
-
- var/datum/reagent/D = chemical_reagents_list[reagent]
- if(D)
-
- var/datum/reagent/R = new D.type()
- reagent_list += R
- R.holder = src
- R.volume = amount
+ var/datum/reagent/R = new D.type()
+ reagent_list += R
+ R.holder = src
+ R.volume = amount
// SetViruses(R, data) // Includes setting data
- if(data) R.data = data
- //debug
- //world << "Adding data"
- //for(var/D in R.data)
- // world << "Container data: [D] = [R.data[D]]"
- //debug
- update_total()
- my_atom.on_reagent_change()
- handle_reactions()
- return 0
- else
- warning("[my_atom] attempted to add a reagent called '[reagent]' which doesn't exist. ([usr])")
+ if(data) R.data = data
+ //debug
+ //world << "Adding data"
+ //for(var/D in R.data)
+ // world << "Container data: [D] = [R.data[D]]"
+ //debug
+ update_total()
+ my_atom.on_reagent_change()
+ handle_reactions()
+ return 0
+ else
+ warning("[my_atom] attempted to add a reagent called '[reagent]' which doesn't exist. ([usr])")
+ handle_reactions()
+
+ return 1
+
+/datum/reagents/proc/remove_reagent(var/reagent, var/amount, var/safety)//Added a safety check for the trans_id_to
+
+ if(!isnum(amount)) return 1
+
+ for(var/A in reagent_list)
+ var/datum/reagent/R = A
+ if (R.id == reagent)
+ R.volume -= amount
+ update_total()
+ if(!safety)//So it does not handle reactions when it need not to
handle_reactions()
+ my_atom.on_reagent_change()
+ return 0
- return 1
+ return 1
- remove_reagent(var/reagent, var/amount, var/safety)//Added a safety check for the trans_id_to
+/datum/reagents/proc/has_reagent(var/reagent, var/amount = -1)
- if(!isnum(amount)) return 1
+ for(var/A in reagent_list)
+ var/datum/reagent/R = A
+ if (R.id == reagent)
+ if(!amount) return R
+ else
+ if(R.volume >= amount) return R
+ else return 0
- for(var/A in reagent_list)
- var/datum/reagent/R = A
- if (R.id == reagent)
- R.volume -= amount
- update_total()
- if(!safety)//So it does not handle reactions when it need not to
- handle_reactions()
- my_atom.on_reagent_change()
- return 0
+ return 0
- return 1
+/datum/reagents/proc/get_reagent_amount(var/reagent)
+ for(var/A in reagent_list)
+ var/datum/reagent/R = A
+ if (R.id == reagent)
+ return R.volume
- has_reagent(var/reagent, var/amount = -1)
+ return 0
- for(var/A in reagent_list)
- var/datum/reagent/R = A
- if (R.id == reagent)
- if(!amount) return R
- else
- if(R.volume >= amount) return R
- else return 0
+/datum/reagents/proc/get_reagents()
+ var/res = ""
+ for(var/datum/reagent/A in reagent_list)
+ if (res != "") res += ","
+ res += A.name
- return 0
+ return res
- get_reagent_amount(var/reagent)
- for(var/A in reagent_list)
- var/datum/reagent/R = A
- if (R.id == reagent)
- return R.volume
+/datum/reagents/proc/remove_all_type(var/reagent_type, var/amount, var/strict = 0, var/safety = 1) // Removes all reagent of X type. @strict set to 1 determines whether the childs of the type are included.
+ if(!isnum(amount)) return 1
- return 0
+ var/has_removed_reagent = 0
- get_reagents()
- var/res = ""
- for(var/datum/reagent/A in reagent_list)
- if (res != "") res += ","
- res += A.name
+ for(var/datum/reagent/R in reagent_list)
+ var/matches = 0
+ // Switch between how we check the reagent type
+ if(strict)
+ if(R.type == reagent_type)
+ matches = 1
+ else
+ if(istype(R, reagent_type))
+ matches = 1
+ // We found a match, proceed to remove the reagent. Keep looping, we might find other reagents of the same type.
+ if(matches)
+ // Have our other proc handle removement
+ has_removed_reagent = remove_reagent(R.id, amount, safety)
- return res
+ return has_removed_reagent
- remove_all_type(var/reagent_type, var/amount, var/strict = 0, var/safety = 1) // Removes all reagent of X type. @strict set to 1 determines whether the childs of the type are included.
- if(!isnum(amount)) return 1
+// Admin logging.
+/datum/reagents/proc/get_reagent_ids(var/and_amount=0)
+ var/list/stuff = list()
+ for(var/datum/reagent/A in reagent_list)
+ if(and_amount)
+ stuff += "[get_reagent_amount(A.id)]U of [A.id]"
+ else
+ stuff += A.id
+ return english_list(stuff)
- var/has_removed_reagent = 0
+//two helper functions to preserve data across reactions (needed for xenoarch)
+/datum/reagents/proc/get_data(var/reagent_id)
+ for(var/datum/reagent/D in reagent_list)
+ if(D.id == reagent_id)
+ //world << "proffering a data-carrying reagent ([reagent_id])"
+ return D.data
- for(var/datum/reagent/R in reagent_list)
- var/matches = 0
- // Switch between how we check the reagent type
- if(strict)
- if(R.type == reagent_type)
- matches = 1
- else
- if(istype(R, reagent_type))
- matches = 1
- // We found a match, proceed to remove the reagent. Keep looping, we might find other reagents of the same type.
- if(matches)
- // Have our other proc handle removement
- has_removed_reagent = remove_reagent(R.id, amount, safety)
+/datum/reagents/proc/set_data(var/reagent_id, var/new_data)
+ for(var/datum/reagent/D in reagent_list)
+ if(D.id == reagent_id)
+ //world << "reagent data set ([reagent_id])"
+ D.data = new_data
- return has_removed_reagent
+/datum/reagents/proc/copy_data(var/datum/reagent/current_reagent)
+ if (!current_reagent || !current_reagent.data) return null
+ if (!istype(current_reagent.data, /list)) return current_reagent.data
- // Admin logging.
- get_reagent_ids(var/and_amount=0)
- var/list/stuff = list()
- for(var/datum/reagent/A in reagent_list)
- if(and_amount)
- stuff += "[get_reagent_amount(A.id)]U of [A.id]"
- else
- stuff += A.id
- return english_list(stuff)
+ var/list/trans_data = current_reagent.data.Copy()
- //two helper functions to preserve data across reactions (needed for xenoarch)
- get_data(var/reagent_id)
- for(var/datum/reagent/D in reagent_list)
- if(D.id == reagent_id)
- //world << "proffering a data-carrying reagent ([reagent_id])"
- return D.data
+ // We do this so that introducing a virus to a blood sample
+ // doesn't automagically infect all other blood samples from
+ // the same donor.
+ //
+ // Technically we should probably copy all data lists, but
+ // that could possibly eat up a lot of memory needlessly
+ // if most data lists are read-only.
+ if (trans_data["virus2"])
+ var/list/v = trans_data["virus2"]
+ trans_data["virus2"] = v.Copy()
- set_data(var/reagent_id, var/new_data)
- for(var/datum/reagent/D in reagent_list)
- if(D.id == reagent_id)
- //world << "reagent data set ([reagent_id])"
- D.data = new_data
-
- copy_data(var/datum/reagent/current_reagent)
- if (!current_reagent || !current_reagent.data) return null
- if (!istype(current_reagent.data, /list)) return current_reagent.data
-
- var/list/trans_data = current_reagent.data.Copy()
-
- // We do this so that introducing a virus to a blood sample
- // doesn't automagically infect all other blood samples from
- // the same donor.
- //
- // Technically we should probably copy all data lists, but
- // that could possibly eat up a lot of memory needlessly
- // if most data lists are read-only.
- if (trans_data["virus2"])
- var/list/v = trans_data["virus2"]
- trans_data["virus2"] = v.Copy()
-
- return trans_data
+ return trans_data
///////////////////////////////////////////////////////////////////////////////////
diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm
deleted file mode 100644
index a97068fde56..00000000000
--- a/code/modules/reagents/Chemistry-Reagents.dm
+++ /dev/null
@@ -1,3283 +0,0 @@
-#define SOLID 1
-#define LIQUID 2
-#define GAS 3
-#define FOOD_METABOLISM 0.4
-#define REM REAGENTS_EFFECT_MULTIPLIER
-
-//The reaction procs must ALWAYS set src = null, this detaches the proc from the object (the reagent)
-//so that it can continue working when the reagent is deleted while the proc is still active.
-
-datum
- reagent
- var/name = "Reagent"
- var/id = "reagent"
- var/description = ""
- var/datum/reagents/holder = null
- var/reagent_state = SOLID
- var/list/data = null
- var/volume = 0
- var/nutriment_factor = 0
- var/metabolization_rate = REAGENTS_METABOLISM
- //var/list/viruses = list()
- var/color = "#000000" // rgb: 0, 0, 0 (does not support alpha channels - yet!)
- var/shock_reduction = 0
- var/penetrates_skin = 0 //Whether or not a reagent penetrates the skin
- //Processing flags, defines the type of mobs the reagent will affect
- //By default, all reagents will ONLY affect organics, not synthetics. Re-define in the reagent's definition if the reagent is meant to affect synths
- var/process_flags = ORGANIC
- proc
- reaction_mob(var/mob/M, var/method=TOUCH, var/volume) //Some reagents transfer on touch, others don't; dependent on if they penetrate the skin or not.
- if(!istype(M, /mob/living)) return 0
- var/datum/reagent/self = src
- src = null
-
- if(self.holder) //for catching rare runtimes
- if(method == TOUCH && self.penetrates_skin)
- var/block = 0
- for(var/obj/item/clothing/C in M.get_equipped_items())
- if(istype(C, /obj/item/clothing/suit/bio_suit))
- block += 1
- if(istype(C, /obj/item/clothing/head/bio_hood))
- block += 1
- if(block < 2)
- if(M.reagents)
- M.reagents.add_reagent(self.id,self.volume)
-
-/*
- if(method == INGEST && istype(M, /mob/living/carbon))
- if(prob(1 * self.addictiveness))
- if(prob(5 * volume))
- var/datum/disease/addiction/A = new /datum/disease/addiction
- A.addicted_to = self
- A.name = "[self.name] Addiction"
- A.addiction ="[self.name]"
- A.cure = self.id
- M.viruses += A
- A.affected_mob = M
- A.holder = M
-*/
- return 1
-
- reaction_obj(var/obj/O, var/volume) //By default we transfer a small part of the reagent to the object
- src = null //if it can hold reagents. nope!
- //if(O.reagents)
- // O.reagents.add_reagent(id,volume/3)
- return
-
- reaction_turf(var/turf/T, var/volume)
- src = null
- return
-
- on_mob_life(var/mob/living/M as mob, var/alien)
- if(!istype(M, /mob/living)) // YOU'RE A FUCKING RETARD NEO WHY CAN'T YOU JUST FIX THE PROBLEM ON THE REAGENT - Iamgoofball
- return //Noticed runtime errors from facid trying to damage ghosts, this should fix. --NEO
- // Certain elements in too large amounts cause side-effects
- holder.remove_reagent(src.id, metabolization_rate) //By default it slowly disappears.
- current_cycle++
- return
-
- // Called when two reagents of the same are mixing.
- on_merge(var/data)
- return
-
- on_move(var/mob/M)
- return
-
- on_update(var/atom/A)
- return
-
- slimejelly
- name = "Slime Jelly"
- id = "slimejelly"
- description = "A gooey semi-liquid produced from one of the deadliest lifeforms in existence. SO REAL."
- reagent_state = LIQUID
- color = "#801E28" // rgb: 128, 30, 40
- on_mob_life(var/mob/living/M as mob)
- if(prob(10))
- M << "\red Your insides are burning!"
- M.adjustToxLoss(rand(20,60)*REM)
- else if(prob(40))
- M.heal_organ_damage(5*REM,0)
- ..()
- return
-
-
- blood
- data = new/list("donor"=null,"viruses"=null,"blood_DNA"=null,"blood_type"=null,"blood_colour"= "#A10808","resistances"=null,"trace_chem"=null, "antibodies" = null)
- name = "Blood"
- id = "blood"
- reagent_state = LIQUID
- color = "#C80000" // rgb: 200, 0, 0
-
- reaction_mob(var/mob/M, var/method=TOUCH, var/volume)
- var/datum/reagent/blood/self = src
- src = null
- if(self.data && self.data["virus2"] && istype(M, /mob/living/carbon))//infecting...
- var/list/vlist = self.data["virus2"]
- if (vlist.len)
- for (var/ID in vlist)
- var/datum/disease2/disease/V = vlist[ID]
-
- if(method == TOUCH)
- infect_virus2(M,V.getcopy())
- else
- infect_virus2(M,V.getcopy(),1) //injected, force infection!
- if(self.data && self.data["antibodies"] && istype(M, /mob/living/carbon))//... and curing
- var/mob/living/carbon/C = M
- C.antibodies |= self.data["antibodies"]
-
- on_merge(var/data)
- if(data["blood_colour"])
- color = data["blood_colour"]
- return ..()
-
- on_update(var/atom/A)
- if(data["blood_colour"])
- color = data["blood_colour"]
- return ..()
-
-
-
- reaction_turf(var/turf/simulated/T, var/volume)//splash the blood all over the place
- if(!istype(T)) return
- var/datum/reagent/blood/self = src
- src = null
- if(!(volume >= 3)) return
- //var/datum/disease/D = self.data["virus"]
- if(!self.data["donor"] || istype(self.data["donor"], /mob/living/carbon/human))
- var/obj/effect/decal/cleanable/blood/blood_prop = locate() in T //find some blood here
- if(!blood_prop) //first blood!
- blood_prop = new(T)
- blood_prop.blood_DNA[self.data["blood_DNA"]] = self.data["blood_type"]
-
- if(self.data["virus2"])
- blood_prop.virus2 = virus_copylist(self.data["virus2"])
-
- else if(istype(self.data["donor"], /mob/living/carbon/alien))
- var/obj/effect/decal/cleanable/blood/xeno/blood_prop = locate() in T
- if(!blood_prop)
- blood_prop = new(T)
- blood_prop.blood_DNA["UNKNOWN DNA STRUCTURE"] = "X*"
- return
-
-/* Must check the transfering of reagents and their data first. They all can point to one disease datum.
-
- Destroy()
- if(src.data["virus"])
- var/datum/disease/D = src.data["virus"]
- D.cure(0)
- return ..()
-*/
-
-/*
- vaccine
- //data must contain virus type
- name = "Vaccine"
- id = "vaccine"
- reagent_state = LIQUID
- color = "#C81040" // rgb: 200, 16, 64
-
- reaction_mob(var/mob/M, var/method=TOUCH, var/volume)
- var/datum/reagent/vaccine/self = src
- src = null
- if(self.data&&method == INGEST)
- for(var/datum/disease/D in M.viruses)
- if(istype(D, /datum/disease/advance))
- var/datum/disease/advance/A = D
- if(A.GetDiseaseID() == self.data)
- D.cure()
- else
- if(D.type == self.data)
- D.cure()
-
- M.resistances += self.data
- return
-*/
-
- // Ported from Bay as part of the Botany Update
- // Allows you to make planks from any plant that has this reagent in it.
- // Also vines with this reagent are considered dense.
- woodpulp
- name = "Wood Pulp"
- id = "woodpulp"
- description = "A mass of wood fibers."
- reagent_state = LIQUID
- color = "#B97A57"
-
- fishwater
- name = "Fish Water"
- id = "fishwater"
- description = "Smelly water from a fish tank. Gross!"
- reagent_state = LIQUID
- color = "#757547"
-
- reaction_mob(var/mob/M, var/method=TOUCH, var/volume)
- if(!istype(M, /mob/living))
- return
- if(method == INGEST)
- M << "Oh god, why did you drink that?"
-
- on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- if(prob(30)) // Nasty, you drank this stuff? 30% chance of the fakevomit (non-stunning version)
- if(prob(50)) // 50/50 chance of green vomit vs normal vomit
- M.fakevomit(1)
- else
- M.fakevomit(0)
- ..()
- return
-
- water
- name = "Water"
- id = "water"
- description = "A ubiquitous chemical substance that is composed of hydrogen and oxygen."
- reagent_state = LIQUID
- color = "#0064C8" // rgb: 0, 100, 200
- var/cooling_temperature = 2
- process_flags = ORGANIC | SYNTHETIC
-
- reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)
- if(!istype(M, /mob/living))
- return
-
- // Put out fire
- if(method == TOUCH)
- M.adjust_fire_stacks(-(volume / 10))
- if(M.fire_stacks <= 0)
- M.ExtinguishMob()
- return
-
- reaction_turf(var/turf/simulated/T, var/volume)
- if (!istype(T)) return
- src = null
- if(volume >= 3)
- if(T.wet >= 1) return
- T.wet = 1
- if(T.wet_overlay)
- T.overlays -= T.wet_overlay
- T.wet_overlay = null
- T.wet_overlay = image('icons/effects/water.dmi',T,"wet_floor")
- T.overlays += T.wet_overlay
-
- spawn(800)
- if (!istype(T)) return
- if(T.wet >= 2) return
- T.wet = 0
- if(T.wet_overlay)
- T.overlays -= T.wet_overlay
- T.wet_overlay = null
-
- for(var/mob/living/carbon/slime/M in T)
- M.apply_water()
-
- var/hotspot = (locate(/obj/effect/hotspot) in T)
- if(hotspot && !istype(T, /turf/space))
- var/datum/gas_mixture/lowertemp = T.remove_air( T:air:total_moles() )
- lowertemp.temperature = max( min(lowertemp.temperature-2000,lowertemp.temperature / 2) ,0)
- lowertemp.react()
- T.assume_air(lowertemp)
- qdel(hotspot)
- return
-
- reaction_obj(var/obj/O, var/volume)
- src = null
- var/turf/T = get_turf(O)
- var/hotspot = (locate(/obj/effect/hotspot) in T)
- if(hotspot && !istype(T, /turf/space))
- var/datum/gas_mixture/lowertemp = T.remove_air( T:air:total_moles() )
- lowertemp.temperature = max( min(lowertemp.temperature-2000,lowertemp.temperature / 2) ,0)
- lowertemp.react()
- T.assume_air(lowertemp)
- qdel(hotspot)
- if(istype(O,/obj/item/weapon/reagent_containers/food/snacks/monkeycube))
- var/obj/item/weapon/reagent_containers/food/snacks/monkeycube/cube = O
- if(!cube.wrapped)
- cube.Expand()
- // Dehydrated carp
- if(istype(O,/obj/item/toy/carpplushie/dehy_carp))
- var/obj/item/toy/carpplushie/dehy_carp/dehy = O
- dehy.Swell() // Makes a carp
- return
-
- hellwater
- name = "Hell Water"
- id = "hell_water"
- description = "YOUR FLESH! IT BURNS!"
- process_flags = ORGANIC | SYNTHETIC //Admin-bus has no brakes! KILL THEM ALL.
-
- on_mob_life(var/mob/living/M as mob)
- M.fire_stacks = min(5,M.fire_stacks + 3)
- M.IgniteMob() //Only problem with igniting people is currently the commonly availible fire suits make you immune to being on fire
- M.adjustToxLoss(1)
- M.adjustFireLoss(1) //Hence the other damages... ain't I a bastard?
- M.adjustBrainLoss(5)
- holder.remove_reagent(src.id, 1)
-
- lube
- name = "Space Lube"
- id = "lube"
- description = "Lubricant is a substance introduced between two moving surfaces to reduce the friction and wear between them. giggity."
- reagent_state = LIQUID
- color = "#1BB1AB"
-
- reaction_turf(var/turf/simulated/T, var/volume)
- if (!istype(T)) return
- src = null
- if(volume >= 1)
- if(T.wet >= 2) return
- T.wet = 2
- spawn(800)
- if (!istype(T)) return
- T.wet = 0
- if(T.wet_overlay)
- T.overlays -= T.wet_overlay
- T.wet_overlay = null
- return
-
- toxin
- name = "Toxin"
- id = "toxin"
- description = "A Toxic chemical."
- reagent_state = LIQUID
- color = "#CF3600" // rgb: 207, 54, 0
-
- on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- M.adjustToxLoss(2)
- ..()
- return
-
- spider_venom
- name = "Spider venom"
- id = "spidertoxin"
- description = "A toxic venom injected by spacefaring arachnids."
- reagent_state = LIQUID
- color = "#CF3600" // rgb: 207, 54, 0
-
- on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- M.adjustToxLoss(1.5)
- ..()
- return
-
- plasticide
- name = "Plasticide"
- id = "plasticide"
- description = "Liquid plastic, do not eat."
- reagent_state = LIQUID
- color = "#CF3600" // rgb: 207, 54, 0
-
- on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- M.adjustToxLoss(1.5)
- ..()
- return
-
- minttoxin
- name = "Mint Toxin"
- id = "minttoxin"
- description = "Useful for dealing with undesirable customers."
- reagent_state = LIQUID
- color = "#CF3600" // rgb: 207, 54, 0
-
- on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- if (FAT in M.mutations)
- M.gib()
- ..()
- return
-
- slimetoxin
- name = "Mutation Toxin"
- id = "mutationtoxin"
- description = "A corruptive toxin produced by slimes."
- reagent_state = LIQUID
- color = "#13BC5E" // rgb: 19, 188, 94
-
- on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- if(ishuman(M))
- var/mob/living/carbon/human/human = M
- if(human.species.name != "Shadow")
- M << "\red Your flesh rapidly mutates!"
- M << "You are now a Shadow Person, a mutant race of darkness-dwelling humanoids."
- M << "\red Your body reacts violently to light. \green However, it naturally heals in darkness."
- M << "Aside from your new traits, you are mentally unchanged and retain your prior obligations."
- human.set_species("Shadow")
- ..()
- return
-
-
-
- aslimetoxin
- name = "Advanced Mutation Toxin"
- id = "amutationtoxin"
- description = "An advanced corruptive toxin produced by slimes."
- reagent_state = LIQUID
- color = "#13BC5E" // rgb: 19, 188, 94
-
- on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- if(istype(M, /mob/living/carbon) && M.stat != DEAD)
- M << "\red Your flesh rapidly mutates!"
- if(M.notransform) return
- M.notransform = 1
- M.canmove = 0
- M.icon = null
- M.overlays.Cut()
- M.invisibility = 101
- for(var/obj/item/W in M)
- if(istype(W, /obj/item/weapon/implant)) //TODO: Carn. give implants a dropped() or something
- qdel(W)
- continue
- W.layer = initial(W.layer)
- W.loc = M.loc
- W.dropped(M)
- var/mob/living/carbon/slime/new_mob = new /mob/living/carbon/slime(M.loc)
- new_mob.a_intent = I_HARM
- new_mob.universal_speak = 1
- if(M.mind)
- M.mind.transfer_to(new_mob)
- else
- new_mob.key = M.key
- qdel(M)
- ..()
- return
-
- space_drugs
- name = "Space drugs"
- id = "space_drugs"
- description = "An illegal chemical compound used as drug."
- reagent_state = LIQUID
- color = "#9087A2"
- metabolization_rate = 0.2
-
- on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- M.druggy = max(M.druggy, 15)
- if(isturf(M.loc) && !istype(M.loc, /turf/space))
- if(M.canmove && !M.restrained())
- if(prob(10)) step(M, pick(cardinal))
- if(prob(7)) M.emote(pick("twitch","drool","moan","giggle"))
- ..()
- return
-
- holywater
- name = "Water"
- id = "holywater"
- description = "A ubiquitous chemical substance that is composed of hydrogen and oxygen."
- reagent_state = LIQUID
- color = "#0064C8" // rgb: 0, 100, 200
- process_flags = ORGANIC | SYNTHETIC
-
- on_mob_life(var/mob/living/M as mob)
- if(!data) data = 1
- data++
- M.jitteriness = max(M.jitteriness-5,0)
- if(data >= 30) // 12 units, 60 seconds @ metabolism 0.4 units & tick rate 2.0 sec
- if (!M.stuttering) M.stuttering = 1
- M.stuttering += 4
- M.Dizzy(5)
- if(iscultist(M) && prob(5))
- M.say(pick("Av'te Nar'sie","Pa'lid Mors","INO INO ORA ANA","SAT ANA!","Daim'niodeis Arc'iai Le'eones","Egkau'haom'nai en Chaous","Ho Diak'nos tou Ap'iron","R'ge Na'sie","Diabo us Vo'iscum","Si gn'um Co'nu"))
- if(data >= 75 && prob(33)) // 30 units, 150 seconds
- if (!M.confused) M.confused = 1
- M.confused += 3
- if(iscultist(M))
- ticker.mode.remove_cultist(M.mind)
- holder.remove_reagent(src.id, src.volume) // maybe this is a little too perfect and a max() cap on the statuses would be better??
- M.jitteriness = 0
- M.stuttering = 0
- M.confused = 0
- if(ishuman(M)) .
- if(((M.mind in ticker.mode.vampires) || M.mind.vampire) && (!(VAMP_FULL in M.mind.vampire.powers)) && prob(80))
- switch(data)
- if(1 to 4)
- M << "Something sizzles in your veins!"
- M.mind.vampire.nullified = max(5, M.mind.vampire.nullified + 2)
- if(5 to 12)
- M << "You feel an intense burning inside of you!"
- M.adjustFireLoss(1)
- M.mind.vampire.nullified = max(5, M.mind.vampire.nullified + 2)
- if(13 to INFINITY)
- M << "You suddenly ignite in a holy fire!"
- for(var/mob/O in viewers(M, null))
- O.show_message(text("[] suddenly bursts into flames!", M), 1)
- M.fire_stacks = min(5,M.fire_stacks + 3)
- M.IgniteMob() //Only problem with igniting people is currently the commonly availible fire suits make you immune to being on fire
- M.adjustFireLoss(3) //Hence the other damages... ain't I a bastard?
- M.mind.vampire.nullified = max(5, M.mind.vampire.nullified + 2)
- ..()
- return
-
-
- reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)
- // Vampires have their powers weakened by holy water applied to the skin.
- if(ishuman(M))
- if((M.mind in ticker.mode.vampires) && !(VAMP_FULL in M.mind.vampire.powers))
- var/mob/living/carbon/human/H=M
- if(method == TOUCH)
- if(H.wear_mask)
- H << "\red Your mask protects you from the holy water!"
- return
- else if(H.head)
- H << "\red Your helmet protects you from the holy water!"
- return
- else
- M << "Something holy interferes with your powers!"
- M.mind.vampire.nullified = max(5, M.mind.vampire.nullified + 2)
- return
-
-
- reaction_turf(var/turf/simulated/T, var/volume)
- ..()
- if(!istype(T)) return
- if(volume>=10)
- for(var/obj/effect/rune/R in T)
- qdel(R)
- T.Bless()
-
- serotrotium
- name = "Serotrotium"
- id = "serotrotium"
- description = "A chemical compound that promotes concentrated production of the serotonin neurotransmitter in humans."
- reagent_state = LIQUID
- color = "#202040" // rgb: 20, 20, 40
-
- on_mob_life(var/mob/living/M as mob)
- if(ishuman(M))
- if(prob(7)) M.emote(pick("twitch","drool","moan","gasp"))
- holder.remove_reagent(src.id, 0.25 * REAGENTS_METABOLISM)
- return
-
-/* silicate
- name = "Silicate"
- id = "silicate"
- description = "A compound that can be used to reinforce glass."
- reagent_state = LIQUID
- color = "#C7FFFF" // rgb: 199, 255, 255
-
- reaction_obj(var/obj/O, var/volume)
- src = null
- if(istype(O,/obj/structure/window))
- if(O:silicate <= 200)
-
- O:silicate += volume
- O:health += volume * 3
-
- if(!O:silicateIcon)
- var/icon/I = icon(O.icon,O.icon_state,O.dir)
-
- var/r = (volume / 100) + 1
- var/g = (volume / 70) + 1
- var/b = (volume / 50) + 1
- I.SetIntensity(r,g,b)
- O.icon = I
- O:silicateIcon = I
- else
- var/icon/I = O:silicateIcon
-
- var/r = (volume / 100) + 1
- var/g = (volume / 70) + 1
- var/b = (volume / 50) + 1
- I.SetIntensity(r,g,b)
- O.icon = I
- O:silicateIcon = I
-
- return*/
-
- oxygen
- name = "Oxygen"
- id = "oxygen"
- description = "A colorless, odorless gas."
- reagent_state = GAS
- color = "#808080" // rgb: 128, 128, 128
-
- on_mob_life(var/mob/living/M as mob, var/alien)
- if(M.stat == 2) return
- if(ishuman(M))
- var/mob/living/carbon/human/H = M
- if(H.species && (H.species.name == "Vox" || H.species.name =="Vox Armalis"))
- M.adjustToxLoss(REAGENTS_METABOLISM)
- holder.remove_reagent(src.id, REAGENTS_METABOLISM) //By default it slowly disappears.
- return
- ..()
-
- copper
- name = "Copper"
- id = "copper"
- description = "A highly ductile metal."
- color = "#6E3B08" // rgb: 110, 59, 8
-
-
- nitrogen
- name = "Nitrogen"
- id = "nitrogen"
- description = "A colorless, odorless, tasteless gas."
- reagent_state = GAS
- color = "#808080" // rgb: 128, 128, 128
-
-
- on_mob_life(var/mob/living/M as mob, var/alien)
- if(M.stat == 2) return
- if(ishuman(M))
- var/mob/living/carbon/human/H = M
- if(H.species && (H.species.name == "Vox" || H.species.name =="Vox Armalis"))
- M.adjustOxyLoss(-2*REM)
- holder.remove_reagent(src.id, REAGENTS_METABOLISM) //By default it slowly disappears.
- return
- ..()
-
- hydrogen
- name = "Hydrogen"
- id = "hydrogen"
- description = "A colorless, odorless, nonmetallic, tasteless, highly combustible diatomic gas."
- reagent_state = GAS
- color = "#808080" // rgb: 128, 128, 128
-
-
- potassium
- name = "Potassium"
- id = "potassium"
- description = "A soft, low-melting solid that can easily be cut with a knife. Reacts violently with water."
- reagent_state = SOLID
- color = "#A0A0A0" // rgb: 160, 160, 160
-
-
- mercury
- name = "Mercury"
- id = "mercury"
- description = "A chemical element."
- reagent_state = LIQUID
- color = "#484848" // rgb: 72, 72, 72
- metabolization_rate = 0.2
- penetrates_skin = 1
-
- on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- if(prob(70))
- M.adjustBrainLoss(1)
- ..()
- return
-
- sulfur
- name = "Sulfur"
- id = "sulfur"
- description = "A chemical element."
- reagent_state = SOLID
- color = "#BF8C00" // rgb: 191, 140, 0
-
- carbon
- name = "Carbon"
- id = "carbon"
- description = "A chemical element."
- reagent_state = SOLID
- color = "#1C1300" // rgb: 30, 20, 0
-
-
- reaction_turf(var/turf/T, var/volume)
- src = null
- // Only add one dirt per turf. Was causing people to crash.
- if(!istype(T, /turf/space) && !(locate(/obj/effect/decal/cleanable/dirt) in T))
- new /obj/effect/decal/cleanable/dirt(T)
-
- chlorine
- name = "Chlorine"
- id = "chlorine"
- description = "A chemical element."
- reagent_state = GAS
- color = "#808080" // rgb: 128, 128, 128
- penetrates_skin = 1
- process_flags = ORGANIC | SYNTHETIC
-
- on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- M.adjustFireLoss(1)
- ..()
- return
-
- fluorine
- name = "Fluorine"
- id = "fluorine"
- description = "A highly-reactive chemical element."
- reagent_state = GAS
- color = "#6A6054"
- penetrates_skin = 1
- process_flags = ORGANIC | SYNTHETIC
-
-
- on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- M.adjustFireLoss(1)
- M.adjustToxLoss(1*REM)
- ..()
- return
-
- sodium
- name = "Sodium"
- id = "sodium"
- description = "A chemical element."
- reagent_state = SOLID
- color = "#808080" // rgb: 128, 128, 128
-
-
- phosphorus
- name = "Phosphorus"
- id = "phosphorus"
- description = "A chemical element."
- reagent_state = SOLID
- color = "#832828" // rgb: 131, 40, 40
-
-
- lithium
- name = "Lithium"
- id = "lithium"
- description = "A chemical element."
- reagent_state = SOLID
- color = "#808080" // rgb: 128, 128, 128
-
- on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- if(M.canmove && !M.restrained() && istype(M.loc, /turf/space))
- step(M, pick(cardinal))
- if(prob(5)) M.emote(pick("twitch","drool","moan"))
- ..()
- return
-
- sugar
- name = "Sugar"
- id = "sugar"
- description = "The organic compound commonly known as table sugar and sometimes called saccharose. This white, odorless, crystalline powder has a pleasing, sweet taste."
- reagent_state = SOLID
- color = "#FFFFFF" // rgb: 255, 255, 255
- overdose_threshold = 200 // Hyperglycaemic shock
-
- on_mob_life(var/mob/living/M as mob)
- if(prob(4))
- M.reagents.add_reagent("epinephrine", 1.2)
- if(prob(50))
- M.AdjustParalysis(-1)
- M.AdjustStunned(-1)
- M.AdjustWeakened(-1)
- if(current_cycle >= 90)
- M.jitteriness += 10
- ..()
- return
-
- overdose_process(var/mob/living/M as mob)
- if(volume > 200)
- M << "You pass out from hyperglycemic shock!"
- M.Paralyse(1)
- if(prob(8))
- M.adjustToxLoss(rand(1,2))
- ..()
- return
-
- sacid
- name = "Sulphuric acid"
- id = "sacid"
- description = "A strong mineral acid with the molecular formula H2SO4."
- reagent_state = LIQUID
- color = "#00D72B"
- process_flags = ORGANIC | SYNTHETIC
-
- on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- M.adjustFireLoss(1)
- ..()
- return
- reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)
- if(!istype(M, /mob/living))
- return
- if(method == TOUCH)
- if(ishuman(M))
- var/mob/living/carbon/human/H = M
-
- if(volume > 25)
-
- if(H.wear_mask)
- H << "\red Your mask protects you from the acid!"
- return
-
- if(H.head)
- H << "\red Your helmet protects you from the acid!"
- return
-
- if(!M.unacidable)
- if(prob(75))
- var/obj/item/organ/external/affecting = H.get_organ("head")
- if(affecting)
- affecting.take_damage(20, 0)
- H.UpdateDamageIcon()
- H.emote("scream")
- else
- M.take_organ_damage(15,0)
- else
- M.take_organ_damage(15,0)
-
- if(method == INGEST)
- if(ishuman(M))
- var/mob/living/carbon/human/H = M
-
- if(volume < 10)
- M << "The greenish acidic substance stings you, but isn't concentrated enough to harm you!"
-
- if(volume >=10 && volume <=25)
- if(!H.unacidable)
- M.take_organ_damage(min(max(volume-10,2)*2,20),0)
- M.emote("scream")
-
-
- if(volume > 25)
- if(!M.unacidable)
- if(prob(75))
- var/obj/item/organ/external/affecting = H.get_organ("head")
- if(affecting)
- affecting.take_damage(20, 0)
- H.UpdateDamageIcon()
- H.emote("scream")
- else
- M.take_organ_damage(15,0)
-
- reaction_obj(var/obj/O, var/volume)
- if((istype(O,/obj/item) || istype(O,/obj/effect/glowshroom)) && prob(40))
- if(!O.unacidable)
- var/obj/effect/decal/cleanable/molten_item/I = new/obj/effect/decal/cleanable/molten_item(O.loc)
- I.desc = "Looks like this was \an [O] some time ago."
- for(var/mob/M in viewers(5, O))
- M << "\red \the [O] melts."
- qdel(O)
-
- glycerol
- name = "Glycerol"
- id = "glycerol"
- description = "Glycerol is a simple polyol compound. Glycerol is sweet-tasting and of low toxicity."
- reagent_state = LIQUID
- color = "#808080" // rgb: 128, 128, 128
-
-
- nitroglycerin
- name = "Nitroglycerin"
- id = "nitroglycerin"
- description = "Nitroglycerin is a heavy, colorless, oily, explosive liquid obtained by nitrating glycerol."
- reagent_state = LIQUID
- color = "#808080" // rgb: 128, 128, 128
-
- radium
- name = "Radium"
- id = "radium"
- description = "Radium is an alkaline earth metal. It is extremely radioactive."
- reagent_state = SOLID
- color = "#C7C7C7" // rgb: 199,199,199
- metabolization_rate = 0.4
- penetrates_skin = 1
-
- on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- M.apply_effect(4*REM,IRRADIATE,0)
- // radium may increase your chances to cure a disease
- if(istype(M,/mob/living/carbon)) // make sure to only use it on carbon mobs
- var/mob/living/carbon/C = M
- if(C.virus2.len)
- for (var/ID in C.virus2)
- var/datum/disease2/disease/V = C.virus2[ID]
- if(prob(5))
- if(prob(50))
- M.apply_effect(50,IRRADIATE,0) // curing it that way may kill you instead
- M.adjustToxLoss(100)
- C.antibodies |= V.antigen
- ..()
- return
-
- reaction_turf(var/turf/T, var/volume)
- src = null
- if(volume >= 3)
- if(!istype(T, /turf/space))
- new /obj/effect/decal/cleanable/greenglow(T)
- return
-
- thermite
- name = "Thermite"
- id = "thermite"
- description = "Thermite produces an aluminothermic reaction known as a thermite reaction. Can be used to melt walls."
- reagent_state = SOLID
- color = "#673910" // rgb: 103, 57, 16
- process_flags = ORGANIC | SYNTHETIC
-
- reaction_turf(var/turf/T, var/volume)
- src = null
- if(volume >= 5)
- if(istype(T, /turf/simulated/wall))
- T:thermite = 1
- T.overlays.Cut()
- T.overlays = image('icons/effects/effects.dmi',icon_state = "thermite")
- return
-
- on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- M.adjustFireLoss(1)
- ..()
- return
-
- mutagen
- name = "Unstable mutagen"
- id = "mutagen"
- description = "Might cause unpredictable mutations. Keep away from children."
- reagent_state = LIQUID
- color = "#04DF27"
- metabolization_rate = 0.3
-
- reaction_mob(var/mob/M, var/method=TOUCH, var/volume)
- if(!..()) return
- if(!M.dna) return //No robots, AIs, aliens, Ians or other mobs should be affected by this.
- src = null
- if((method==TOUCH && prob(33)) || method==INGEST)
- if(prob(98))
- randmutb(M)
- else
- randmutg(M)
- domutcheck(M, null)
- M.UpdateAppearance()
- return
- on_mob_life(var/mob/living/M as mob)
- if(!M.dna) return //No robots, AIs, aliens, Ians or other mobs should be affected by this.
- if(!M) M = holder.my_atom
- M.apply_effect(2*REM,IRRADIATE,0)
- if(prob(4))
- randmutb(M)
- ..()
- return
-
- hydrocodone
- name = "Hydrocodone"
- id = "hydrocodone"
- description = "An extremely effective painkiller; may have long term abuse consequences."
- reagent_state = LIQUID
- color = "#C805DC"
- metabolization_rate = 0.3 // Lasts 1.5 minutes for 15 units
- shock_reduction = 200
-
- on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- ..()
- return
-
- virus_food
- name = "Virus Food"
- id = "virusfood"
- description = "A mixture of water, milk, and oxygen. Virus cells can use this mixture to reproduce."
- reagent_state = LIQUID
- nutriment_factor = 2 * REAGENTS_METABOLISM
- color = "#899613" // rgb: 137, 150, 19
-
- on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- M.nutrition += nutriment_factor*REM
- ..()
- return
-
- sterilizine
- name = "Sterilizine"
- id = "sterilizine"
- description = "Sterilizes wounds in preparation for surgery."
- reagent_state = LIQUID
- color = "#C8A5DC" // rgb: 200, 165, 220
-
- //makes you squeaky clean
- reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)
- if (method == TOUCH)
- M.germ_level -= min(volume*20, M.germ_level)
-
- reaction_obj(var/obj/O, var/volume)
- O.germ_level -= min(volume*20, O.germ_level)
-
- reaction_turf(var/turf/T, var/volume)
- T.germ_level -= min(volume*20, T.germ_level)
-
- iron
- name = "Iron"
- id = "iron"
- description = "Pure iron is a metal."
- reagent_state = SOLID
- color = "#C8A5DC" // rgb: 200, 165, 220
-/*
- on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- if((M.virus) && (prob(8) && (M.virus.name=="Magnitis")))
- if(M.virus.spread == "Airborne")
- M.virus.spread = "Remissive"
- M.virus.stage--
- if(M.virus.stage <= 0)
- M.resistances += M.virus.type
- M.virus = null
- holder.remove_reagent(src.id, 0.2)
- return
-*/
-
- gold
- name = "Gold"
- id = "gold"
- description = "Gold is a dense, soft, shiny metal and the most malleable and ductile metal known."
- reagent_state = SOLID
- color = "#F7C430" // rgb: 247, 196, 48
-
- silver
- name = "Silver"
- id = "silver"
- description = "A lustrous metallic element regarded as one of the precious metals."
- reagent_state = SOLID
- color = "#D0D0D0" // rgb: 208, 208, 208
-
- uranium
- name ="Uranium"
- id = "uranium"
- description = "A silvery-white metallic chemical element in the actinide series, weakly radioactive."
- reagent_state = SOLID
- color = "#B8B8C0" // rgb: 184, 184, 192
-
- on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- M.apply_effect(2,IRRADIATE,0)
- ..()
- return
-
-
- reaction_turf(var/turf/T, var/volume)
- src = null
- if(volume >= 3)
- if(!istype(T, /turf/space))
- new /obj/effect/decal/cleanable/greenglow(T)
-
- aluminum
- name = "Aluminum"
- id = "aluminum"
- description = "A silvery white and ductile member of the boron group of chemical elements."
- reagent_state = SOLID
- color = "#A8A8A8" // rgb: 168, 168, 168
-
- silicon
- name = "Silicon"
- id = "silicon"
- description = "A tetravalent metalloid, silicon is less reactive than its chemical analog carbon."
- reagent_state = SOLID
- color = "#A8A8A8" // rgb: 168, 168, 168
-
- fuel
- name = "Welding fuel"
- id = "fuel"
- description = "A highly flammable blend of basic hydrocarbons, mostly Acetylene. Useful for both welding and organic chemistry, and can be fortified into a heavier oil."
- reagent_state = LIQUID
- color = "#060606"
-
- reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)//Splashing people with welding fuel to make them easy to ignite!
- if(!istype(M, /mob/living))
- return
- if(method == TOUCH)
- M.adjust_fire_stacks(volume / 10)
- return
- ..()
-
- on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- M.adjustToxLoss(1)
- ..()
- return
-
- unholywater //if you somehow managed to extract this from someone, dont splash it on yourself and have a smoke
- name = "Unholy Water"
- id = "unholywater"
- description = "Something that shouldn't exist on this plane of existance."
- process_flags = ORGANIC | SYNTHETIC //ethereal means everything processes it.
-
- on_mob_life(mob/living/M)
- M.adjustBrainLoss(3)
- if(iscultist(M))
- M.status_flags |= GOTTAGOFAST
- M.drowsyness = max(M.drowsyness-5, 0)
- M.AdjustParalysis(-2)
- M.AdjustStunned(-2)
- M.AdjustWeakened(-2)
- else
- M.adjustToxLoss(2)
- M.adjustFireLoss(2)
- M.adjustOxyLoss(2)
- M.adjustBruteLoss(2)
- holder.remove_reagent(src.id, 1)
-
- incendiary_fuel //copy-pasta of welding fuel; allow incendiary grenades to function better without the headache of people spraying fuel everywhere with regular welding fuel.
- name = "Incendiary fuel"
- id = "incendiaryfuel"
- description = "A highly flammable compound used in incendiary grenades."
- reagent_state = LIQUID
- color = "#660000" // rgb: 102, 0, 0
-
- reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)//Splashing people with welding fuel to make them easy to ignite!
- if(!istype(M, /mob/living))
- return
- if(method == TOUCH)
- M.adjust_fire_stacks(volume / 10)
- return
-
- reaction_obj(var/obj/O, var/volume)
- var/turf/the_turf = get_turf(O)
- if(!the_turf)
- return //No sense trying to start a fire if you don't have a turf to set on fire. --NEO
- new /obj/effect/decal/cleanable/liquid_fuel(the_turf, volume)
- reaction_turf(var/turf/T, var/volume)
- new /obj/effect/decal/cleanable/liquid_fuel(T, volume)
- return
-
- on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- M.adjustToxLoss(1)
- ..()
- return
-
- space_cleaner
- name = "Space cleaner"
- id = "cleaner"
- description = "A compound used to clean things. Now with 50% more sodium hypochlorite!"
- reagent_state = LIQUID
- color = "#61C2C2"
-
- reaction_obj(var/obj/O, var/volume)
- if(istype(O,/obj/effect/decal/cleanable))
- qdel(O)
- else
- if(O)
- O.clean_blood()
- reaction_turf(var/turf/T, var/volume)
- if(volume >= 1)
- T.overlays.Cut()
- T.clean_blood()
- for(var/obj/effect/decal/cleanable/C in src)
- qdel(C)
-
- for(var/mob/living/carbon/slime/M in T)
- M.adjustToxLoss(rand(5,10))
- reaction_turf(var/turf/simulated/S, var/volume)
- if(volume >= 1)
- S.dirt = 0
- reaction_mob(var/mob/M, var/method=TOUCH, var/volume)
- if(iscarbon(M))
- var/mob/living/carbon/C = M
- if(istype(M,/mob/living/carbon/human))
- var/mob/living/carbon/human/H = M
- if(H.lip_style)
- H.lip_style = null
- H.update_body()
- if(C.r_hand)
- C.r_hand.clean_blood()
- if(C.l_hand)
- C.l_hand.clean_blood()
- if(C.wear_mask)
- if(C.wear_mask.clean_blood())
- C.update_inv_wear_mask(0)
- if(ishuman(M))
- var/mob/living/carbon/human/H = C
- if(H.head)
- if(H.head.clean_blood())
- H.update_inv_head(0,0)
- if(H.wear_suit)
- if(H.wear_suit.clean_blood())
- H.update_inv_wear_suit(0,0)
- else if(H.w_uniform)
- if(H.w_uniform.clean_blood())
- H.update_inv_w_uniform(0,0)
- if(H.shoes)
- if(H.shoes.clean_blood())
- H.update_inv_shoes(0,0)
- M.clean_blood()
- ..()
- return
-
- plasma
- name = "Plasma"
- id = "plasma"
- description = "The liquid phase of an unusual extraterrestrial compound."
- reagent_state = LIQUID
- color = "#7A2B94"
-
- on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- M.adjustToxLoss(1*REM)
- if(holder.has_reagent("epinephrine"))
- holder.remove_reagent("epinephrine", 2)
- ..()
- return
-
- reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)//Splashing people with plasma is stronger than fuel!
- if(!istype(M, /mob/living))
- return
- if(method == TOUCH)
- M.adjust_fire_stacks(volume / 5)
- ..()
- return
- lexorin
- name = "Lexorin"
- id = "lexorin"
- description = "Lexorin temporarily stops respiration. Causes tissue damage."
- reagent_state = LIQUID
- color = "#52685D"
- metabolization_rate = 0.2
-
- on_mob_life(var/mob/living/M as mob)
- if(M.stat == 2.0)
- return
- if(!M) M = holder.my_atom
- M.adjustToxLoss(1)
- ..()
- return
-
- adminordrazine //An OP chemical for admins
- name = "Adminordrazine"
- id = "adminordrazine"
- description = "It's magic. We don't have to explain it."
- reagent_state = LIQUID
- color = "#C8A5DC" // rgb: 200, 165, 220
- process_flags = ORGANIC | SYNTHETIC //Adminbuse knows no bounds!
-
- on_mob_life(var/mob/living/carbon/M as mob)
- if(!M) M = holder.my_atom ///This can even heal dead people.
- for(var/datum/reagent/R in M.reagents.reagent_list)
- if(R != src)
- M.reagents.remove_reagent(R.id,5)
- M.setCloneLoss(0)
- M.setOxyLoss(0)
- M.radiation = 0
- M.heal_organ_damage(5,5)
- M.adjustToxLoss(-5)
- M.hallucination = 0
- M.setBrainLoss(0)
- M.disabilities = 0
- M.sdisabilities = 0
- M.eye_blurry = 0
- M.eye_blind = 0
- if(ishuman(M))
- var/mob/living/carbon/human/H = M
- var/obj/item/organ/eyes/E = H.internal_organs_by_name["eyes"]
- if(istype(E))
- E.damage = max(E.damage-5 , 0)
- M.SetWeakened(0)
- M.SetStunned(0)
- M.SetParalysis(0)
- M.silent = 0
- M.dizziness = 0
- M.drowsyness = 0
- M.stuttering = 0
- M.slurring = 0
- M.confused = 0
- M.sleeping = 0
- M.jitteriness = 0
- if(istype(M,/mob/living/carbon)) // make sure to only use it on carbon mobs
- var/mob/living/carbon/C = M
- if(C.virus2.len)
- for (var/ID in C.virus2)
- var/datum/disease2/disease/V = C.virus2[ID]
- C.antibodies |= V.antigen
- ..()
- return
-
- nanites
- name = "Nanites"
- id = "nanites"
- description = "Nanomachines that aid in rapid cellular regeneration."
-
-
- synaptizine
- name = "Synaptizine"
- id = "synaptizine"
- description = "Synaptizine is used to treat neuroleptic shock. Can be used to help remove disabling symptoms such as paralysis."
- reagent_state = LIQUID
- color = "#FA46FA"
-
- on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- M.AdjustParalysis(-1)
- M.AdjustStunned(-1)
- M.AdjustWeakened(-1)
- if(prob(50))
- M.adjustBrainLoss(-1.0)
- ..()
- return
-
- audioline
- name = "Audioline"
- id = "audioline"
- description = "Heals ear damage."
- reagent_state = LIQUID
- color = "#6600FF" // rgb: 100, 165, 255
-
- on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- M.ear_damage = 0
- M.ear_deaf = 0
- ..()
- return
-
- mitocholide
- name = "Mitocholide"
- id = "mitocholide"
- description = "A specialized drug that stimulates the mitochondria of cells to encourage healing of internal organs."
- reagent_state = LIQUID
- color = "#C8A5DC" // rgb: 200, 165, 220
-
- on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- if(ishuman(M))
- var/mob/living/carbon/human/H = M
-
- //Mitocholide is hard enough to get, it's probably fair to make this all internal organs
- for(var/name in H.internal_organs_by_name)
- var/obj/item/organ/I = H.internal_organs_by_name[name]
- if(I.damage > 0)
- I.damage -= 0.20
- ..()
- return
-
- cryoxadone
- name = "Cryoxadone"
- id = "cryoxadone"
- description = "A plasma mixture with almost magical healing powers. Its main limitation is that the targets body temperature must be under 265K for it to metabolise correctly."
- reagent_state = LIQUID
- color = "#0000C8" // rgb: 200, 165, 220
-
- on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- if(M.bodytemperature < 265)
- M.adjustCloneLoss(-4)
- M.adjustOxyLoss(-10)
- M.heal_organ_damage(12,12)
- M.adjustToxLoss(-3)
- M.status_flags &= ~DISFIGURED
- ..()
- return
-
- rezadone
- name = "Rezadone"
- id = "rezadone"
- description = "A powder derived from fish toxin, this substance can effectively treat genetic damage in humanoids, though excessive consumption has side effects."
- reagent_state = SOLID
- color = "#669900" // rgb: 102, 153, 0
-
- on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- if(!data) data = 1
- data++
- switch(data)
- if(1 to 15)
- M.adjustCloneLoss(-1)
- M.heal_organ_damage(1,1)
- if(15 to 35)
- M.adjustCloneLoss(-2)
- M.heal_organ_damage(2,1)
- M.status_flags &= ~DISFIGURED
- if(35 to INFINITY)
- M.adjustToxLoss(1)
- M.Dizzy(5)
- M.Jitter(5)
-
- ..()
- return
-
- spaceacillin
- name = "Spaceacillin"
- id = "spaceacillin"
- description = "An all-purpose antibiotic agent extracted from space fungus."
- reagent_state = LIQUID
- color = "#0AB478"
-
- on_mob_life(var/mob/living/M as mob)
- ..()
- return
-
- carpotoxin
- name = "Carpotoxin"
- id = "carpotoxin"
- description = "A deadly neurotoxin produced by the dreaded spess carp."
- reagent_state = LIQUID
- color = "#003333" // rgb: 0, 51, 51
-
- on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- M.adjustToxLoss(2*REM)
- ..()
- return
-
- staminatoxin
- name = "Tirizene"
- id = "tirizene"
- description = "A toxin that affects the stamina of a person when injected into the bloodstream."
- reagent_state = LIQUID
- color = "#6E2828"
- data = 13
-
- on_mob_life(var/mob/living/M)
- M.adjustStaminaLoss(REM * data)
- data = max(data - 1, 3)
- ..()
-
- lsd
- name = "Lysergic acid diethylamide"
- id = "lsd"
- description = "A highly potent hallucinogenic substance. Far out, maaaan."
- reagent_state = LIQUID
- color = "#0000D8"
-
- on_mob_life(var/mob/living/M)
- if(!M) M = holder.my_atom
- M.hallucination += 10
- ..()
- return
-
-
- spores
- name = "Spore Toxin"
- id = "spores"
- description = "A toxic spore cloud which blocks vision when ingested."
- color = "#9ACD32"
-
- on_mob_life(var/mob/living/M as mob)
- M.adjustToxLoss(0.5)
- M.damageoverlaytemp = 60
- M.eye_blurry = max(M.eye_blurry, 3)
- ..()
- return
-
-///////////////////////////////////////////////////////////////////////////////////////////////////////////////
-/*
- nanomachines
- name = "Nanomachines"
- id = "nanomachines"
- description = "Microscopic construction robots."
- reagent_state = LIQUID
- color = "#535E66" // rgb: 83, 94, 102
-
- reaction_mob(var/mob/M, var/method=TOUCH, var/volume)
- src = null
- if( (prob(10) && method==TOUCH) || method==INGEST)
- M.contract_disease(new /datum/disease/robotic_transformation(0),1)
-
- xenomicrobes
- name = "Xenomicrobes"
- id = "xenomicrobes"
- description = "Microbes with an entirely alien cellular structure."
- reagent_state = LIQUID
- color = "#535E66" // rgb: 83, 94, 102
-
- reaction_mob(var/mob/M, var/method=TOUCH, var/volume)
- src = null
- if( (prob(10) && method==TOUCH) || method==INGEST)
- M.contract_disease(new /datum/disease/xeno_transformation(0),1)
-*/
-
- spore
- name = "Blob Spores"
- id = "spore"
- description = "Spores of some blob creature thingy."
- reagent_state = LIQUID
- color = "#CE760A" // rgb: 206, 118, 10
- var/client/blob_client = null
- var/blob_point_rate = 3
-
- on_mob_life(var/mob/living/M)
- if(!M) M = holder.my_atom
- if (holder.has_reagent("atrazine",45))
- holder.del_reagent("spore")
- if (prob(1))
- M << "\red Your mouth tastes funny."
- if (prob(1) && prob(25))
- if(iscarbon(M))
- var/mob/living/carbon/C = M
- if(directory[ckey(C.key)])
- blob_client = directory[ckey(C.key)]
- C.gib()
- if(blob_client)
- var/obj/effect/blob/core/core = new(get_turf(C), 200, blob_client, blob_point_rate)
- if(core.overmind && core.overmind.mind)
- core.overmind.mind.name = C.name
-
- return
-
-//foam
-
- fluorosurfactant
- name = "Fluorosurfactant"
- id = "fluorosurfactant"
- description = "A perfluoronated sulfonic acid that forms a foam when mixed with water."
- reagent_state = LIQUID
- color = "#9E6B38" // rgb: 158, 107, 56
-
-// metal foaming agent
-// this is lithium hydride. Add other recipies (e.g. LiH + H2O -> LiOH + H2) eventually
-
- ammonia
- name = "Ammonia"
- id = "ammonia"
- description = "A caustic substance commonly used in fertilizer or household cleaners."
- reagent_state = GAS
- color = "#404030" // rgb: 64, 64, 48
-
-
- diethylamine
- name = "Diethylamine"
- id = "diethylamine"
- description = "A secondary amine, useful as a plant nutrient and as building block for other compounds."
- reagent_state = LIQUID
- color = "#322D00"
-
- beer2 //disguised as normal beer for use by emagged brobots
- name = "Beer"
- id = "beer2"
- description = "An alcoholic beverage made from malted grains, hops, yeast, and water."
- color = "#664300" // rgb: 102, 67, 0
-
- on_mob_life(var/mob/living/M as mob)
- if(!data)
- data = 1
- switch(data)
- if(1 to 50)
- M.sleeping += 1
- if(51 to INFINITY)
- M.sleeping += 1
- M.adjustToxLoss((data - 50)*REM)
- data++
- holder.remove_reagent(src.id, 0.5 * REAGENTS_METABOLISM)
- ..()
- return
-
-/////////////////////////Food Reagents////////////////////////////
-// Part of the food code. Nutriment is used instead of the old "heal_amt" code. Also is where all the food
-// condiments, additives, and such go.
- nutriment // Pure nutriment, universally digestable and thus slightly less effective
- name = "Nutriment"
- id = "nutriment"
- description = "A questionable mixture of various pure nutrients commonly found in processed foods."
- reagent_state = SOLID
- nutriment_factor = 12 * REAGENTS_METABOLISM
- color = "#664330" // rgb: 102, 67, 48
-
- on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- if(!(M.mind in ticker.mode.vampires))
- if(ishuman(M))
- var/mob/living/carbon/human/H = M
- if(H.species && H.species.dietflags) //Make sure the species has it's dietflag set, otherwise it can't digest any nutrients
- H.nutrition += nutriment_factor // For hunger and fatness
- if(prob(50)) M.heal_organ_damage(1,0)
- if(istype(M,/mob/living/simple_animal)) //Any nutrients can heal simple animals
- if(prob(50)) M.heal_organ_damage(1,0)
- ..()
- return
-
- protein // Meat-based protein, digestable by carnivores and omnivores, worthless to herbivores
- name = "Protein"
- id = "protein"
- description = "Various essential proteins and fats commonly found in animal flesh and blood."
- reagent_state = SOLID
- nutriment_factor = 15 * REAGENTS_METABOLISM
- color = "#664330" // rgb: 102, 67, 48
-
- on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- if(!(M.mind in ticker.mode.vampires))
- if(ishuman(M))
- var/mob/living/carbon/human/H = M
- if(H.species && H.species.dietflags && !(H.species.dietflags & DIET_HERB)) //Make sure the species has it's dietflag set, and that it is not a herbivore
- H.nutrition += nutriment_factor // For hunger and fatness
- if(prob(50)) M.heal_organ_damage(1,0)
- if(istype(M,/mob/living/simple_animal)) //Any nutrients can heal simple animals
- if(prob(50)) M.heal_organ_damage(1,0)
- ..()
- return
-
- plantmatter // Plant-based biomatter, digestable by herbivores and omnivores, worthless to carnivores
- name = "Plant-matter"
- id = "plantmatter"
- description = "Vitamin-rich fibers and natural sugars commonly found in fresh produce."
- reagent_state = SOLID
- nutriment_factor = 15 * REAGENTS_METABOLISM
- color = "#664330" // rgb: 102, 67, 48
-
- on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- if(!(M.mind in ticker.mode.vampires))
- if(ishuman(M))
- var/mob/living/carbon/human/H = M
- if(H.species && H.species.dietflags && !(H.species.dietflags & DIET_CARN)) //Make sure the species has it's dietflag set, and that it is not a carnivore
- H.nutrition += nutriment_factor // For hunger and fatness
- if(prob(50)) M.heal_organ_damage(1,0)
- if(istype(M,/mob/living/simple_animal)) //Any nutrients can heal simple animals
- if(prob(50)) M.heal_organ_damage(1,0)
- ..()
- return
-
- soysauce
- name = "Soysauce"
- id = "soysauce"
- description = "A salty sauce made from the soy plant."
- reagent_state = LIQUID
- nutriment_factor = 2 * REAGENTS_METABOLISM
- color = "#792300" // rgb: 121, 35, 0
-
- ketchup
- name = "Ketchup"
- id = "ketchup"
- description = "Ketchup, catsup, whatever. It's tomato paste."
- reagent_state = LIQUID
- nutriment_factor = 5 * REAGENTS_METABOLISM
- color = "#731008" // rgb: 115, 16, 8
-
-
- capsaicin
- name = "Capsaicin Oil"
- id = "capsaicin"
- description = "This is what makes chilis hot."
- reagent_state = LIQUID
- color = "#B31008" // rgb: 179, 16, 8
-
- on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- if(!data) data = 1
- switch(data)
- if(1 to 15)
- M.bodytemperature += 5 * TEMPERATURE_DAMAGE_COEFFICIENT
- if(holder.has_reagent("frostoil"))
- holder.remove_reagent("frostoil", 5)
- if(istype(M, /mob/living/carbon/slime))
- M.bodytemperature += rand(5,20)
- if(15 to 25)
- M.bodytemperature += 10 * TEMPERATURE_DAMAGE_COEFFICIENT
- if(istype(M, /mob/living/carbon/slime))
- M.bodytemperature += rand(10,20)
- if(25 to INFINITY)
- M.bodytemperature += 15 * TEMPERATURE_DAMAGE_COEFFICIENT
- if(istype(M, /mob/living/carbon/slime))
- M.bodytemperature += rand(15,20)
- holder.remove_reagent(src.id, FOOD_METABOLISM)
- data++
- ..()
- return
-
- condensedcapsaicin
- name = "Condensed Capsaicin"
- id = "condensedcapsaicin"
- description = "This shit goes in pepperspray."
- reagent_state = LIQUID
- color = "#B31008" // rgb: 179, 16, 8
-
- reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)
- if(!istype(M, /mob/living))
- return
- if(method == TOUCH)
- if(istype(M, /mob/living/carbon/human))
- var/mob/living/carbon/human/victim = M
- var/mouth_covered = 0
- var/eyes_covered = 0
- var/obj/item/safe_thing = null
- if( victim.wear_mask )
- if ( victim.wear_mask.flags & MASKCOVERSEYES )
- eyes_covered = 1
- safe_thing = victim.wear_mask
- if ( victim.wear_mask.flags & MASKCOVERSMOUTH )
- mouth_covered = 1
- safe_thing = victim.wear_mask
- if( victim.head )
- if ( victim.head.flags & MASKCOVERSEYES )
- eyes_covered = 1
- safe_thing = victim.head
- if ( victim.head.flags & MASKCOVERSMOUTH )
- mouth_covered = 1
- safe_thing = victim.head
- if(victim.glasses)
- eyes_covered = 1
- if ( !safe_thing )
- safe_thing = victim.glasses
- if ( eyes_covered && mouth_covered )
- victim << "\red Your [safe_thing] protects you from the pepperspray!"
- return
- else if ( mouth_covered ) // Reduced effects if partially protected
- victim << "\red Your [safe_thing] protect you from most of the pepperspray!"
- if(prob(5))
- victim.emote("scream")
- victim.eye_blurry = max(M.eye_blurry, 3)
- victim.eye_blind = max(M.eye_blind, 1)
- victim.confused = max(M.confused, 3)
- victim.damageoverlaytemp = 60
- victim.Weaken(3)
- victim.drop_item()
- return
- else if ( eyes_covered ) // Eye cover is better than mouth cover
- victim << "\red Your [safe_thing] protects your eyes from the pepperspray!"
- victim.eye_blurry = max(M.eye_blurry, 3)
- victim.damageoverlaytemp = 30
- return
- else // Oh dear :D
- if(prob(5))
- victim.emote("scream")
- victim << "\red You're sprayed directly in the eyes with pepperspray!"
- victim.eye_blurry = max(M.eye_blurry, 5)
- victim.eye_blind = max(M.eye_blind, 2)
- victim.confused = max(M.confused, 6)
- victim.damageoverlaytemp = 75
- victim.Weaken(5)
- victim.drop_item()
-
- on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- if(prob(5))
- M.visible_message("[M] [pick("dry heaves!","coughs!","splutters!")]")
- ..()
- return
-
- frostoil
- name = "Frost Oil"
- id = "frostoil"
- description = "A special oil that noticably chills the body. Extraced from Icepeppers."
- reagent_state = LIQUID
- color = "#B31008" // rgb: 139, 166, 233
- process_flags = ORGANIC | SYNTHETIC
-
- on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- if(!data) data = 1
- switch(data)
- if(1 to 15)
- M.bodytemperature -= 10 * TEMPERATURE_DAMAGE_COEFFICIENT
- if(holder.has_reagent("capsaicin"))
- holder.remove_reagent("capsaicin", 5)
- if(istype(M, /mob/living/carbon/slime))
- M.bodytemperature -= rand(5,20)
- if(15 to 25)
- M.bodytemperature -= 15 * TEMPERATURE_DAMAGE_COEFFICIENT
- if(istype(M, /mob/living/carbon/slime))
- M.bodytemperature -= rand(10,20)
- if(25 to INFINITY)
- M.bodytemperature -= 20 * TEMPERATURE_DAMAGE_COEFFICIENT
- if(prob(1))
- M.emote("shiver")
- if(istype(M, /mob/living/carbon/slime))
- M.bodytemperature -= rand(15,20)
- data++
- holder.remove_reagent(src.id, FOOD_METABOLISM)
- ..()
- return
-
- reaction_turf(var/turf/simulated/T, var/volume)
- for(var/mob/living/carbon/slime/M in T)
- M.adjustToxLoss(rand(15,30))
-
- sodiumchloride
- name = "Salt"
- id = "sodiumchloride"
- description = "Sodium chloride, common table salt."
- reagent_state = SOLID
- color = "#B1B0B0"
-
- overdose_process(var/mob/living/M as mob)
- if(volume > 100)
- if(prob(70))
- M.adjustBrainLoss(1)
- if(prob(8))
- M.adjustToxLoss(rand(1,2))
- ..()
- return
-
- blackpepper
- name = "Black Pepper"
- id = "blackpepper"
- description = "A powder ground from peppercorns. *AAAACHOOO*"
- reagent_state = SOLID
- // no color (ie, black)
-
- coco
- name = "Coco Powder"
- id = "coco"
- description = "A fatty, bitter paste made from coco beans."
- reagent_state = SOLID
- nutriment_factor = 5 * REAGENTS_METABOLISM
- color = "#302000" // rgb: 48, 32, 0
-
- on_mob_life(var/mob/living/M as mob)
- M.nutrition += nutriment_factor
- ..()
- return
-
- hot_coco
- name = "Hot Chocolate"
- id = "hot_coco"
- description = "Made with love! And coco beans."
- reagent_state = LIQUID
- nutriment_factor = 2 * REAGENTS_METABOLISM
- color = "#403010" // rgb: 64, 48, 16
-
- on_mob_life(var/mob/living/M as mob)
- if (M.bodytemperature < 310)//310 is the normal bodytemp. 310.055
- M.bodytemperature = min(310, M.bodytemperature + (5 * TEMPERATURE_DAMAGE_COEFFICIENT))
- M.nutrition += nutriment_factor
- ..()
- return
-
- psilocybin
- name = "Psilocybin"
- id = "psilocybin"
- description = "A strong psycotropic derived from certain species of mushroom."
- color = "#E700E7" // rgb: 231, 0, 231
-
- on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- M.druggy = max(M.druggy, 30)
- if(!data) data = 1
- switch(data)
- if(1 to 5)
- if (!M.stuttering) M.stuttering = 1
- M.Dizzy(5)
- if(prob(10)) M.emote(pick("twitch","giggle"))
- if(5 to 10)
- if (!M.stuttering) M.stuttering = 1
- M.Jitter(10)
- M.Dizzy(10)
- M.druggy = max(M.druggy, 35)
- if(prob(20)) M.emote(pick("twitch","giggle"))
- if (10 to INFINITY)
- if (!M.stuttering) M.stuttering = 1
- M.Jitter(20)
- M.Dizzy(20)
- M.druggy = max(M.druggy, 40)
- if(prob(30)) M.emote(pick("twitch","giggle"))
- data++
- ..()
- return
-
- sprinkles
- name = "Sprinkles"
- id = "sprinkles"
- description = "Multi-colored little bits of sugar, commonly found on donuts. Loved by cops."
- nutriment_factor = 1 * REAGENTS_METABOLISM
- color = "#FF00FF" // rgb: 255, 0, 255
-
- on_mob_life(var/mob/living/M as mob)
- M.nutrition += nutriment_factor
- if(istype(M, /mob/living/carbon/human) && M.job in list("Security Officer", "Head of Security", "Detective", "Warden"))
- if(!M) M = holder.my_atom
- M.heal_organ_damage(1,1)
- M.nutrition += nutriment_factor
- ..()
- return
- ..()
-
- cornoil
- name = "Corn Oil"
- id = "cornoil"
- description = "An oil derived from various types of corn."
- reagent_state = LIQUID
- nutriment_factor = 20 * REAGENTS_METABOLISM
- color = "#302000" // rgb: 48, 32, 0
-
- on_mob_life(var/mob/living/M as mob)
- M.nutrition += nutriment_factor
- ..()
- return
- reaction_turf(var/turf/simulated/T, var/volume)
- if (!istype(T)) return
- src = null
- if(volume >= 3)
- if(T.wet >= 1) return
- T.wet = 1
- if(T.wet_overlay)
- T.overlays -= T.wet_overlay
- T.wet_overlay = null
- T.wet_overlay = image('icons/effects/water.dmi',T,"wet_floor")
- T.overlays += T.wet_overlay
-
- spawn(800)
- if (!istype(T)) return
- if(T.wet >= 2) return
- T.wet = 0
- if(T.wet_overlay)
- T.overlays -= T.wet_overlay
- T.wet_overlay = null
- var/hotspot = (locate(/obj/effect/hotspot) in T)
- if(hotspot)
- var/datum/gas_mixture/lowertemp = T.remove_air( T:air:total_moles() )
- lowertemp.temperature = max( min(lowertemp.temperature-2000,lowertemp.temperature / 2) ,0)
- lowertemp.react()
- T.assume_air(lowertemp)
- qdel(hotspot)
-
- enzyme
- name = "Denatured Enzyme"
- id = "enzyme"
- description = "Heated beyond usefulness, this enzyme is now worthless."
- reagent_state = LIQUID
- color = "#282314" // rgb: 54, 94, 48
-
- dry_ramen
- name = "Dry Ramen"
- id = "dry_ramen"
- description = "Space age food, since August 25, 1958. Contains dried noodles, vegetables, and chemicals that boil in contact with water."
- reagent_state = SOLID
- nutriment_factor = 1 * REAGENTS_METABOLISM
- color = "#302000" // rgb: 48, 32, 0
-
- on_mob_life(var/mob/living/M as mob)
- M.nutrition += nutriment_factor
- ..()
- return
-
- hot_ramen
- name = "Hot Ramen"
- id = "hot_ramen"
- description = "The noodles are boiled, the flavors are artificial, just like being back in school."
- reagent_state = LIQUID
- nutriment_factor = 5 * REAGENTS_METABOLISM
- color = "#302000" // rgb: 48, 32, 0
-
- on_mob_life(var/mob/living/M as mob)
- M.nutrition += nutriment_factor
- if (M.bodytemperature < 310)//310 is the normal bodytemp. 310.055
- M.bodytemperature = min(310, M.bodytemperature + (10 * TEMPERATURE_DAMAGE_COEFFICIENT))
- ..()
- return
-
- hell_ramen
- name = "Hell Ramen"
- id = "hell_ramen"
- description = "The noodles are boiled, the flavors are artificial, just like being back in school."
- reagent_state = LIQUID
- nutriment_factor = 5 * REAGENTS_METABOLISM
- color = "#302000" // rgb: 48, 32, 0
-
- on_mob_life(var/mob/living/M as mob)
- M.nutrition += nutriment_factor
- M.bodytemperature += 10 * TEMPERATURE_DAMAGE_COEFFICIENT
- ..()
- return
-
-
- flour
- name = "flour"
- id = "flour"
- description = "This is what you rub all over yourself to pretend to be a ghost."
- reagent_state = SOLID
- nutriment_factor = 1 * REAGENTS_METABOLISM
- color = "#FFFFFF" // rgb: 0, 0, 0
-
- on_mob_life(var/mob/living/M as mob)
- M.nutrition += nutriment_factor
- ..()
- return
-
- reaction_turf(var/turf/T, var/volume)
- src = null
- if(!istype(T, /turf/space))
- new /obj/effect/decal/cleanable/flour(T)
-
- rice
- name = "Rice"
- id = "rice"
- description = "Enjoy the great taste of nothing."
- reagent_state = SOLID
- nutriment_factor = 1 * REAGENTS_METABOLISM
- color = "#FFFFFF" // rgb: 0, 0, 0
-
- on_mob_life(var/mob/living/M as mob)
- M.nutrition += nutriment_factor
- ..()
- return
-
- cherryjelly
- name = "Cherry Jelly"
- id = "cherryjelly"
- description = "Totally the best. Only to be spread on foods with excellent lateral symmetry."
- reagent_state = LIQUID
- nutriment_factor = 1 * REAGENTS_METABOLISM
- color = "#801E28" // rgb: 128, 30, 40
-
- on_mob_life(var/mob/living/M as mob)
- M.nutrition += nutriment_factor
- ..()
- return
-
- toxin/coffeepowder
- name = "Coffee Grounds"
- id = "coffeepowder"
- description = "Finely ground Coffee beans, used to make coffee."
- reagent_state = SOLID
- color = "#5B2E0D" // rgb: 91, 46, 13
-
- toxin/teapowder
- name = "Ground Tea Leaves"
- id = "teapowder"
- description = "Finely shredded Tea leaves, used for making tea."
- reagent_state = SOLID
- color = "#7F8400" // rgb: 127, 132, 0
-
- //Reagents used for plant fertilizers.
- toxin/fertilizer
- name = "fertilizer"
- id = "fertilizer"
- description = "A chemical mix good for growing plants with."
- reagent_state = LIQUID
-// toxpwr = 0.2 //It's not THAT poisonous.
- color = "#664330" // rgb: 102, 67, 48
-
-
- toxin/fertilizer/eznutrient
- name = "EZ Nutrient"
- id = "eznutrient"
-
- toxin/fertilizer/left4zed
- name = "Left-4-Zed"
- id = "left4zed"
-
- toxin/fertilizer/robustharvest
- name = "Robust Harvest"
- id = "robustharvest"
-
-
-/////////////////////////////////////////////////////////////////////////////////////////////////////////
-/////////////////////// DRINKS BELOW, Beer is up there though, along with cola. Cap'n Pete's Cuban Spiced Rum////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////////////////////////////////
-
- drink
- name = "Drink"
- id = "drink"
- description = "Uh, some kind of drink."
- reagent_state = LIQUID
- nutriment_factor = 1 * REAGENTS_METABOLISM
- color = "#E78108" // rgb: 231, 129, 8
- var/adj_dizzy = 0
- var/adj_drowsy = 0
- var/adj_sleepy = 0
- var/adj_temp = 0
-
- on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- M.nutrition += nutriment_factor
- holder.remove_reagent(src.id, FOOD_METABOLISM)
- if (adj_dizzy) M.dizziness = max(0,M.dizziness + adj_dizzy)
- if (adj_drowsy) M.drowsyness = max(0,M.drowsyness + adj_drowsy)
- if (adj_sleepy) M.sleeping = max(0,M.sleeping + adj_sleepy)
- if (adj_temp)
- if (M.bodytemperature < 310)//310 is the normal bodytemp. 310.055
- M.bodytemperature = min(310, M.bodytemperature + (25 * TEMPERATURE_DAMAGE_COEFFICIENT))
- // Drinks should be used up faster than other reagents.
- holder.remove_reagent(src.id, FOOD_METABOLISM)
- ..()
- return
-
- orangejuice
- name = "Orange juice"
- id = "orangejuice"
- description = "Both delicious AND rich in Vitamin C, what more do you need?"
- color = "#E78108" // rgb: 231, 129, 8
-
- on_mob_life(var/mob/living/M as mob)
- ..()
- if(M.getOxyLoss() && prob(30)) M.adjustOxyLoss(-1*REM)
- return
-
- tomatojuice
- name = "Tomato Juice"
- id = "tomatojuice"
- description = "Tomatoes made into juice. What a waste of big, juicy tomatoes, huh?"
- color = "#731008" // rgb: 115, 16, 8
-
- on_mob_life(var/mob/living/M as mob)
- ..()
- if(M.getFireLoss() && prob(20)) M.heal_organ_damage(0,1)
- return
-
- limejuice
- name = "Lime Juice"
- id = "limejuice"
- description = "The sweet-sour juice of limes."
- color = "#365E30" // rgb: 54, 94, 48
- on_mob_life(var/mob/living/M as mob)
- ..()
- if(M.getToxLoss() && prob(20)) M.adjustToxLoss(-1)
- return
-
-
- carrotjuice
- name = "Carrot juice"
- id = "carrotjuice"
- description = "It is just like a carrot but without crunching."
- color = "#973800" // rgb: 151, 56, 0
-
- on_mob_life(var/mob/living/M as mob)
- ..()
- M.eye_blurry = max(M.eye_blurry-1 , 0)
- M.eye_blind = max(M.eye_blind-1 , 0)
- if(!data) data = 1
- switch(data)
- if(1 to 20)
- //nothing
- if(21 to INFINITY)
- if (prob(data-10))
- M.disabilities &= ~NEARSIGHTED
- data++
- return
-
- doctor_delight
- name = "The Doctor's Delight"
- id = "doctorsdelight"
- description = "A gulp a day keeps the MediBot away. That's probably for the best."
- reagent_state = LIQUID
- color = "#FF8CFF" // rgb: 255, 140, 255
-
- on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- if(M.getToxLoss() && prob(20)) M.adjustToxLoss(-1)
- ..()
- return
-
- berryjuice
- name = "Berry Juice"
- id = "berryjuice"
- description = "A delicious blend of several different kinds of berries."
- color = "#863333" // rgb: 134, 51, 51
-
- poisonberryjuice
- name = "Poison Berry Juice"
- id = "poisonberryjuice"
- description = "A tasty juice blended from various kinds of very deadly and toxic berries."
- color = "#863353" // rgb: 134, 51, 83
-
- on_mob_life(var/mob/living/M as mob)
- ..()
- M.adjustToxLoss(1)
- return
-
- watermelonjuice
- name = "Watermelon Juice"
- id = "watermelonjuice"
- description = "Delicious juice made from watermelon."
- color = "#863333" // rgb: 134, 51, 51
-
- lemonjuice
- name = "Lemon Juice"
- id = "lemonjuice"
- description = "This juice is VERY sour."
- color = "#863333" // rgb: 175, 175, 0
-
- grapejuice
- name = "Grape Juice"
- id = "grapejuice"
- description = "This juice is known to stain shirts."
- color = "#993399" // rgb: 153, 51, 153
-
- banana
- name = "Banana Juice"
- id = "banana"
- description = "The raw essence of a banana."
- color = "#863333" // rgb: 175, 175, 0
-
- on_mob_life(var/mob/living/M as mob)
- M.nutrition += nutriment_factor
- if(istype(M, /mob/living/carbon/human) && M.job in list("Clown"))
- if(!M) M = holder.my_atom
- M.heal_organ_damage(1,1)
- M.nutrition += nutriment_factor
- ..()
- return
- ..()
-
- nothing
- name = "Nothing"
- id = "nothing"
- description = "Absolutely nothing."
-
- on_mob_life(var/mob/living/M as mob)
- M.nutrition += nutriment_factor
- if(istype(M, /mob/living/carbon/human) && M.job in list("Mime"))
- if(!M) M = holder.my_atom
- M.heal_organ_damage(1,1)
- M.nutrition += nutriment_factor
- ..()
- return
- ..()
-
- potato_juice
- name = "Potato Juice"
- id = "potato"
- description = "Juice of the potato. Bleh."
- nutriment_factor = 2 * FOOD_METABOLISM
- color = "#302000" // rgb: 48, 32, 0
-
- milk
- name = "Milk"
- id = "milk"
- description = "An opaque white liquid produced by the mammary glands of mammals."
- color = "#DFDFDF" // rgb: 223, 223, 223
-
- on_mob_life(var/mob/living/M as mob)
- if(M.getBruteLoss() && prob(20)) M.heal_organ_damage(1,0)
- if(holder.has_reagent("capsaicin"))
- holder.remove_reagent("capsaicin", 10*REAGENTS_METABOLISM)
- ..()
- return
-
- soymilk
- name = "Soy Milk"
- id = "soymilk"
- description = "An opaque white liquid made from soybeans."
- color = "#DFDFC7" // rgb: 223, 223, 199
-
- cream
- name = "Cream"
- id = "cream"
- description = "The fatty, still liquid part of milk. Why don't you mix this with sum scotch, eh?"
- color = "#DFD7AF" // rgb: 223, 215, 175
-
- chocolate_milk
- name = "Chocolate milk"
- id ="chocolate_milk"
- description = "Chocolate-flavored milk, tastes like being a kid again."
- color = "#85432C"
-
- hot_coco
- name = "Hot Chocolate"
- id = "hot_coco"
- description = "Made with love! And coco beans."
- nutriment_factor = 2 * FOOD_METABOLISM
- color = "#403010" // rgb: 64, 48, 16
- adj_temp = 5
-
- coffee
- name = "Coffee"
- id = "coffee"
- description = "Coffee is a brewed drink prepared from roasted seeds, commonly called coffee beans, of the coffee plant."
- color = "#482000" // rgb: 72, 32, 0
- adj_dizzy = -5
- adj_drowsy = -3
- adj_sleepy = -2
- adj_temp = 25
- overdose_threshold = 45
-
- on_mob_life(var/mob/living/M as mob)
- if(adj_temp > 0 && holder.has_reagent("frostoil"))
- holder.remove_reagent("frostoil", 10*REAGENTS_METABOLISM)
- if(prob(50))
- M.AdjustParalysis(-1)
- M.AdjustStunned(-1)
- M.AdjustWeakened(-1)
- ..()
- return
-
- overdose_process(var/mob/living/M as mob)
- if(volume > 45)
- M.Jitter(5)
-
- ..()
- return
-
- icecoffee
- name = "Iced Coffee"
- id = "icecoffee"
- description = "Coffee and ice, refreshing and cool."
- color = "#102838" // rgb: 16, 40, 56
- adj_temp = -5
-
- soy_latte
- name = "Soy Latte"
- id = "soy_latte"
- description = "A nice and tasty beverage while you are reading your hippie books."
- color = "#664300" // rgb: 102, 67, 0
- adj_sleepy = 0
- adj_temp = 5
-
- on_mob_life(var/mob/living/M as mob)
- ..()
- M.sleeping = 0
- if(M.getBruteLoss() && prob(20)) M.heal_organ_damage(1,0)
- return
-
- cafe_latte
- name = "Cafe Latte"
- id = "cafe_latte"
- description = "A nice, strong and tasty beverage while you are reading."
- color = "#664300" // rgb: 102, 67, 0
- adj_sleepy = 0
- adj_temp = 5
-
- on_mob_life(var/mob/living/M as mob)
- ..()
- M.sleeping = 0
- if(M.getBruteLoss() && prob(20)) M.heal_organ_damage(1,0)
- return
-
- tea
- name = "Tea"
- id = "tea"
- description = "Tasty black tea: It has antioxidants. It's good for you!"
- color = "#101000" // rgb: 16, 16, 0
- adj_dizzy = -2
- adj_drowsy = -1
- adj_sleepy = -3
- adj_temp = 20
-
- on_mob_life(var/mob/living/M as mob)
- ..()
- if(M.getToxLoss() && prob(20))
- M.adjustToxLoss(-1)
- return
-
- icetea
- name = "Iced Tea"
- id = "icetea"
- description = "No relation to a certain rap artist/ actor."
- color = "#104038" // rgb: 16, 64, 56
- adj_temp = -5
-
- kahlua
- name = "Kahlua"
- id = "kahlua"
- description = "A widely known, Mexican coffee-flavoured liqueur. In production since 1936!"
- color = "#664300" // rgb: 102, 67, 0
- adj_dizzy = -5
- adj_drowsy = -3
- adj_sleepy = -2
-
- on_mob_life(var/mob/living/M as mob)
- ..()
- M.Jitter(5)
- return
-
- cold
- name = "Cold drink"
- adj_temp = -5
-
- tonic
- name = "Tonic Water"
- id = "tonic"
- description = "It tastes strange but at least the quinine keeps the Space Malaria at bay."
- color = "#664300" // rgb: 102, 67, 0
- adj_dizzy = -5
- adj_drowsy = -3
- adj_sleepy = -2
-
- sodawater
- name = "Soda Water"
- id = "sodawater"
- description = "A can of club soda. Why not make a scotch and soda?"
- color = "#619494" // rgb: 97, 148, 148
- adj_dizzy = -5
- adj_drowsy = -3
-
- ice
- name = "Ice"
- id = "ice"
- description = "Frozen water, your dentist wouldn't like you chewing this."
- reagent_state = SOLID
- color = "#619494" // rgb: 97, 148, 148
-
- space_cola
- name = "Cola"
- id = "cola"
- description = "A refreshing beverage."
- reagent_state = LIQUID
- color = "#100800" // rgb: 16, 8, 0
- adj_drowsy = -3
-
- nuka_cola
- name = "Nuka Cola"
- id = "nuka_cola"
- description = "Cola, cola never changes."
- color = "#100800" // rgb: 16, 8, 0
- adj_sleepy = -2
-
- on_mob_life(var/mob/living/M as mob)
- M.Jitter(20)
- M.druggy = max(M.druggy, 30)
- M.dizziness +=5
- M.drowsyness = 0
- M.status_flags |= GOTTAGOFAST
- ..()
- return
-
- spacemountainwind
- name = "Space Mountain Wind"
- id = "spacemountainwind"
- description = "Blows right through you like a space wind."
- color = "#102000" // rgb: 16, 32, 0
- adj_drowsy = -7
- adj_sleepy = -1
-
- dr_gibb
- name = "Dr. Gibb"
- id = "dr_gibb"
- description = "A delicious blend of 42 different flavours"
- color = "#102000" // rgb: 16, 32, 0
- adj_drowsy = -6
-
- space_up
- name = "Space-Up"
- id = "space_up"
- description = "Tastes like a hull breach in your mouth."
- color = "#202800" // rgb: 32, 40, 0
- adj_temp = -8
-
- lemon_lime
- name = "Lemon Lime"
- description = "A tangy substance made of 0.5% natural citrus!"
- id = "lemon_lime"
- color = "#878F00" // rgb: 135, 40, 0
- adj_temp = -8
-
- lemonade
- name = "Lemonade"
- description = "Oh the nostalgia..."
- id = "lemonade"
- color = "#FFFF00" // rgb: 255, 255, 0
-
- kiraspecial
- name = "Kira Special"
- description = "Long live the guy who everyone had mistaken for a girl. Baka!"
- id = "kiraspecial"
- color = "#CCCC99" // rgb: 204, 204, 153
-
- brownstar
- name = "Brown Star"
- description = "Its not what it sounds like..."
- id = "brownstar"
- color = "#9F3400" // rgb: 159, 052, 000
- adj_temp = - 2
-
- milkshake
- name = "Milkshake"
- description = "Glorious brainfreezing mixture."
- id = "milkshake"
- color = "#AEE5E4" // rgb" 174, 229, 228
- adj_temp = -9
-
- on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- if(!data) data = 1
- switch(data)
- if(1 to 15)
- M.bodytemperature -= 5 * TEMPERATURE_DAMAGE_COEFFICIENT
- if(holder.has_reagent("capsaicin"))
- holder.remove_reagent("capsaicin", 5)
- if(istype(M, /mob/living/carbon/slime))
- M.bodytemperature -= rand(5,20)
- if(15 to 25)
- M.bodytemperature -= 10 * TEMPERATURE_DAMAGE_COEFFICIENT
- if(istype(M, /mob/living/carbon/slime))
- M.bodytemperature -= rand(10,20)
- if(25 to INFINITY)
- M.bodytemperature -= 15 * TEMPERATURE_DAMAGE_COEFFICIENT
- if(prob(1)) M.emote("shiver")
- if(istype(M, /mob/living/carbon/slime))
- M.bodytemperature -= rand(15,20)
- data++
- holder.remove_reagent(src.id, FOOD_METABOLISM)
- ..()
- return
-
- rewriter
- name = "Rewriter"
- description = "The secert of the sanctuary of the Libarian..."
- id = "rewriter"
- color = "#485000" // rgb:72, 080, 0
-
- on_mob_life(var/mob/living/M as mob)
- ..()
- M.Jitter(5)
- return
-
- hippies_delight
- name = "Hippie's Delight"
- id = "hippiesdelight"
- description = "You just don't get it maaaan."
- reagent_state = LIQUID
- color = "#664300" // rgb: 102, 67, 0
-
- on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- M.druggy = max(M.druggy, 50)
- if(!data) data = 1
- switch(data)
- if(1 to 5)
- if (!M.stuttering) M.stuttering = 1
- M.Dizzy(10)
- if(prob(10)) M.emote(pick("twitch","giggle"))
- if(5 to 10)
- if (!M.stuttering) M.stuttering = 1
- M.Jitter(20)
- M.Dizzy(20)
- M.druggy = max(M.druggy, 45)
- if(prob(20)) M.emote(pick("twitch","giggle"))
- if (10 to INFINITY)
- if (!M.stuttering) M.stuttering = 1
- M.Jitter(40)
- M.Dizzy(40)
- M.druggy = max(M.druggy, 60)
- if(prob(30)) M.emote(pick("twitch","giggle"))
- holder.remove_reagent(src.id, 0.2)
- data++
- ..()
- return
-
-//ALCOHOL WOO
- ethanol
- name = "Ethanol" //Parent class for all alcoholic reagents.
- id = "ethanol"
- description = "A well-known alcohol with a variety of applications."
- reagent_state = LIQUID
- nutriment_factor = 0 //So alcohol can fill you up! If they want to.
- color = "#404030" // rgb: 64, 64, 48
- var/datum/martial_art/drunk_brawling/F = new
- var/dizzy_adj = 3
- var/slurr_adj = 3
- var/confused_adj = 2
- var/slur_start = 65 //amount absorbed after which mob starts slurring
- var/brawl_start = 75 //amount absorbed after which mob switches to drunken brawling as a fighting style
- var/confused_start = 130 //amount absorbed after which mob starts confusing directions
- var/vomit_start = 180 //amount absorbed after which mob starts vomitting
- var/blur_start = 260 //amount absorbed after which mob starts getting blurred vision
- var/pass_out = 325 //amount absorbed after which mob starts passing out
-
- on_mob_life(var/mob/living/M as mob, var/alien)
- // Sobering multiplier.
- // Sober block makes it more difficult to get drunk
- var/sober_str=!(SOBER in M.mutations)?1:2
- M:nutrition += nutriment_factor
- holder.remove_reagent(src.id, FOOD_METABOLISM)
- if(!src.data) data = 1
- src.data++
-
- var/d = data
-
- // make all the beverages work together
- for(var/datum/reagent/ethanol/A in holder.reagent_list)
- if(isnum(A.data)) d += A.data
-
- d/=sober_str
-
- if(ishuman(M))
- var/mob/living/carbon/human/H = M
- if(H.species && (H.species.name == "Skrell" || H.species.name =="Neara")) //Skrell and Neara get very drunk very quickly.
- d*=5
-
- M.dizziness += dizzy_adj.
- if(d >= slur_start && d < pass_out)
- if (!M:slurring) M:slurring = 1
- M:slurring += slurr_adj/sober_str
- if(d >= brawl_start && ishuman(M))
- var/mob/living/carbon/human/H = M
- F.teach(H,1)
- if(src.volume < 3)
- if(H.martial_art == F)
- F.remove(H)
- if(d >= confused_start && prob(33))
- if (!M:confused) M:confused = 1
- M.confused = max(M:confused+(confused_adj/sober_str),0)
- if(d >= blur_start)
- M.eye_blurry = max(M.eye_blurry, 10/sober_str)
- M:drowsyness = max(M:drowsyness, 0)
- if(d >= vomit_start)
- if(prob(8))
- M.fakevomit()
- if(d >= pass_out)
- M:paralysis = max(M:paralysis, 20/sober_str)
- M:drowsyness = max(M:drowsyness, 30/sober_str)
- if(ishuman(M))
- var/mob/living/carbon/human/H = M
- var/obj/item/organ/liver/L = H.internal_organs_by_name["liver"]
- if (istype(L))
- L.take_damage(0.1, 1)
- H.adjustToxLoss(0.1)
- holder.remove_reagent(src.id, 0.4)
- ..()
- return
-
- reaction_obj(var/obj/O, var/volume)
- if(istype(O,/obj/item/weapon/paper))
- var/obj/item/weapon/paper/paperaffected = O
- paperaffected.clearpaper()
- usr << "The solution melts away the ink on the paper."
- if(istype(O,/obj/item/weapon/book))
- if(volume >= 5)
- var/obj/item/weapon/book/affectedbook = O
- affectedbook.dat = null
- usr << "The solution melts away the ink on the book."
- else
- usr << "It wasn't enough..."
- return
-
- reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)//Splashing people with ethanol isn't quite as good as fuel.
- if(!istype(M, /mob/living))
- return
- if(method == TOUCH)
- M.adjust_fire_stacks(volume / 15)
- return
-
- beer //It's really much more stronger than other drinks.
- name = "Beer"
- id = "beer"
- description = "An alcoholic beverage made from malted grains, hops, yeast, and water."
- nutriment_factor = 2 * FOOD_METABOLISM
- color = "#664300" // rgb: 102, 67, 0
- on_mob_life(var/mob/living/M as mob)
- ..()
- M:jitteriness = max(M:jitteriness-3,0)
- return
-
- cider
- name = "Cider"
- id = "cider"
- description = "An alcoholic beverage derived from apples."
- color = "#174116"
-
- whiskey
- name = "Whiskey"
- id = "whiskey"
- description = "A superb and well-aged single-malt whiskey. Damn."
- color = "#664300" // rgb: 102, 67, 0
- dizzy_adj = 4
-
- specialwhiskey
- name = "Special Blend Whiskey"
- id = "specialwhiskey"
- description = "Just when you thought regular station whiskey was good... This silky, amber goodness has to come along and ruin everything."
- color = "#664300" // rgb: 102, 67, 0
- slur_start = 30 //amount absorbed after which mob starts slurring
- brawl_start = 40
-
- gin
- name = "Gin"
- id = "gin"
- description = "It's gin. In space. I say, good sir."
- color = "#664300" // rgb: 102, 67, 0
- dizzy_adj = 3
-
- absinthe
- name = "Absinthe"
- id = "absinthe"
- description = "Watch out that the Green Fairy doesn't come for you!"
- color = "#33EE00" // rgb: lots, ??, ??
- overdose_threshold = 30
- dizzy_adj = 5
- slur_start = 25
- brawl_start = 40
- confused_start = 100
-
- //copy paste from LSD... shoot me
- on_mob_life(var/mob/M)
- if(!M) M = holder.my_atom
- if(!data) data = 1
- data++
- M:hallucination += 5
- if(volume > overdose_threshold)
- M:adjustToxLoss(1)
- ..()
- return
-
- rum
- name = "Rum"
- id = "rum"
- description = "Popular with the sailors. Not very popular with everyone else."
- color = "#664300" // rgb: 102, 67, 0
- overdose_threshold = 30
-
- on_mob_life(var/mob/living/M as mob)
- ..()
- M.dizziness +=5
- if(volume > overdose_threshold)
- M:adjustToxLoss(1)
- return
-
- mojito
- name = "Mojito"
- id = "mojito"
- description = "If it's good enough for Spesscuba, it's good enough for you."
- color = "#664300" // rgb: 102, 67, 0
-
- vodka
- name = "Vodka"
- id = "vodka"
- description = "Number one drink AND fueling choice for Russians worldwide."
- color = "#664300" // rgb: 102, 67, 0
-
- sake
- name = "Sake"
- id = "sake"
- description = "Anime's favorite drink."
- color = "#664300" // rgb: 102, 67, 0
-
- tequilla
- name = "Tequila"
- id = "tequilla"
- description = "A strong and mildly flavoured, mexican produced spirit. Feeling thirsty hombre?"
- color = "#A8B0B7" // rgb: 168, 176, 183
-
- vermouth
- name = "Vermouth"
- id = "vermouth"
- description = "You suddenly feel a craving for a martini..."
- color = "#664300" // rgb: 102, 67, 0
-
- wine
- name = "Wine"
- id = "wine"
- description = "An premium alchoholic beverage made from distilled grape juice."
- color = "#7E4043" // rgb: 126, 64, 67
- dizzy_adj = 2
- slur_start = 65 //amount absorbed after which mob starts slurring
- confused_start = 145 //amount absorbed after which mob starts confusing directions
-
- cognac
- name = "Cognac"
- id = "cognac"
- description = "A sweet and strongly alchoholic drink, made after numerous distillations and years of maturing. Classy as fornication."
- color = "#664300" // rgb: 102, 67, 0
- dizzy_adj = 4
- confused_start = 115 //amount absorbed after which mob starts confusing directions
-
- suicider //otherwise known as "I want to get so smashed my liver gives out and I die from alcohol poisoning".
- name = "Suicider"
- id = "suicider"
- description = "An unbelievably strong and potent variety of Cider."
- color = "#CF3811"
- dizzy_adj = 20
- slurr_adj = 20
- confused_adj = 3
- slur_start = 15
- brawl_start = 25
- confused_start = 40
- blur_start = 60
- pass_out = 80
-
- ale
- name = "Ale"
- id = "ale"
- description = "A dark alchoholic beverage made by malted barley and yeast."
- color = "#664300" // rgb: 102, 67, 0
-
- thirteenloko
- name = "Thirteen Loko"
- id = "thirteenloko"
- description = "A potent mixture of caffeine and alcohol."
- reagent_state = LIQUID
- color = "#102000" // rgb: 16, 32, 0
-
- on_mob_life(var/mob/living/M as mob)
- ..()
- M:nutrition += nutriment_factor
- holder.remove_reagent(src.id, FOOD_METABOLISM)
- M:drowsyness = max(0,M:drowsyness-7)
- //if(!M:sleeping_willingly)
- // M:sleeping = max(0,M.sleeping-2)
- if (M.bodytemperature > 310)
- M.bodytemperature = max(310, M.bodytemperature-5)
- M.Jitter(1)
- return
-
-
-/////////////////////////////////////////////////////////////////cocktail entities//////////////////////////////////////////////
-
- bilk
- name = "Bilk"
- id = "bilk"
- description = "This appears to be beer mixed with milk. Disgusting."
- reagent_state = LIQUID
- color = "#895C4C" // rgb: 137, 92, 76
-
- atomicbomb
- name = "Atomic Bomb"
- id = "atomicbomb"
- description = "Nuclear proliferation never tasted so good."
- reagent_state = LIQUID
- color = "#666300" // rgb: 102, 99, 0
-
- threemileisland
- name = "THree Mile Island Iced Tea"
- id = "threemileisland"
- description = "Made for a woman, strong enough for a man."
- reagent_state = LIQUID
- color = "#666340" // rgb: 102, 99, 64
-
- goldschlager
- name = "Goldschlager"
- id = "goldschlager"
- description = "100 proof cinnamon schnapps, made for alcoholic teen girls on spring break."
- reagent_state = LIQUID
- color = "#664300" // rgb: 102, 67, 0
-
- patron
- name = "Patron"
- id = "patron"
- description = "Tequila with silver in it, a favorite of alcoholic women in the club scene."
- reagent_state = LIQUID
- color = "#585840" // rgb: 88, 88, 64
-
- gintonic
- name = "Gin and Tonic"
- id = "gintonic"
- description = "An all time classic, mild cocktail."
- reagent_state = LIQUID
- color = "#664300" // rgb: 102, 67, 0
-
- cuba_libre
- name = "Cuba Libre"
- id = "cubalibre"
- description = "Rum, mixed with cola. Viva la revolution."
- reagent_state = LIQUID
- color = "#3E1B00" // rgb: 62, 27, 0
-
- whiskey_cola
- name = "Whiskey Cola"
- id = "whiskeycola"
- description = "Whiskey, mixed with cola. Surprisingly refreshing."
- reagent_state = LIQUID
- color = "#3E1B00" // rgb: 62, 27, 0
-
- martini
- name = "Classic Martini"
- id = "martini"
- description = "Vermouth with Gin. Not quite how 007 enjoyed it, but still delicious."
- reagent_state = LIQUID
- color = "#664300" // rgb: 102, 67, 0
-
- vodkamartini
- name = "Vodka Martini"
- id = "vodkamartini"
- description = "Vodka with Gin. Not quite how 007 enjoyed it, but still delicious."
- reagent_state = LIQUID
- color = "#664300" // rgb: 102, 67, 0
-
- white_russian
- name = "White Russian"
- id = "whiterussian"
- description = "That's just, like, your opinion, man..."
- reagent_state = LIQUID
- color = "#A68340" // rgb: 166, 131, 64
-
- screwdrivercocktail
- name = "Screwdriver"
- id = "screwdrivercocktail"
- description = "Vodka, mixed with plain ol' orange juice. The result is surprisingly delicious."
- reagent_state = LIQUID
- color = "#A68310" // rgb: 166, 131, 16
-
- booger
- name = "Booger"
- id = "booger"
- description = "Ewww..."
- reagent_state = LIQUID
- color = "#A68310" // rgb: 166, 131, 16
-
- bloody_mary
- name = "Bloody Mary"
- id = "bloodymary"
- description = "A strange yet pleasurable mixture made of vodka, tomato and lime juice. Or at least you THINK the red stuff is tomato juice."
- reagent_state = LIQUID
- color = "#664300" // rgb: 102, 67, 0
-
- gargle_blaster
- name = "Pan-Galactic Gargle Blaster"
- id = "gargleblaster"
- description = "Whoah, this stuff looks volatile!"
- reagent_state = LIQUID
- color = "#664300" // rgb: 102, 67, 0
-
- brave_bull
- name = "Brave Bull"
- id = "bravebull"
- description = "A strange yet pleasurable mixture made of vodka, tomato and lime juice. Or at least you THINK the red stuff is tomato juice."
- reagent_state = LIQUID
- color = "#664300" // rgb: 102, 67, 0
-
- tequilla_sunrise
- name = "Tequila Sunrise"
- id = "tequillasunrise"
- description = "Tequila and orange juice. Much like a Screwdriver, only Mexican~"
- reagent_state = LIQUID
- color = "#664300" // rgb: 102, 67, 0
-
- toxins_special
- name = "Toxins Special"
- id = "toxinsspecial"
- description = "This thing is FLAMING!. CALL THE DAMN SHUTTLE!"
- reagent_state = LIQUID
- color = "#664300" // rgb: 102, 67, 0
-
- beepsky_smash
- name = "Beepsky Smash"
- id = "beepskysmash"
- description = "Deny drinking this and prepare for THE LAW."
- reagent_state = LIQUID
- color = "#664300" // rgb: 102, 67, 0
-
- changelingsting
- name = "Changeling Sting"
- id = "changelingsting"
- description = "You take a tiny sip and feel a burning sensation..."
- reagent_state = LIQUID
- color = "#2E6671" // rgb: 46, 102, 113
-
- irish_cream
- name = "Irish Cream"
- id = "irishcream"
- description = "Whiskey-imbued cream, what else would you expect from the Irish."
- reagent_state = LIQUID
- color = "#664300" // rgb: 102, 67, 0
-
- manly_dorf
- name = "The Manly Dorf"
- id = "manlydorf"
- description = "Beer and Ale, brought together in a delicious mix. Intended for true men only."
- reagent_state = LIQUID
- color = "#664300" // rgb: 102, 67, 0
-
- longislandicedtea
- name = "Long Island Iced Tea"
- id = "longislandicedtea"
- description = "The liquor cabinet, brought together in a delicious mix. Intended for middle-aged alcoholic women only."
- reagent_state = LIQUID
- color = "#664300" // rgb: 102, 67, 0
-
- moonshine
- name = "Moonshine"
- id = "moonshine"
- description = "You've really hit rock bottom now... your liver packed its bags and left last night."
- reagent_state = LIQUID
- color = "#664300" // rgb: 102, 67, 0
-
- b52
- name = "B-52"
- id = "b52"
- description = "Coffee, Irish Cream, and congac. You will get bombed."
- reagent_state = LIQUID
- color = "#664300" // rgb: 102, 67, 0
-
- irishcoffee
- name = "Irish Coffee"
- id = "irishcoffee"
- description = "Coffee, and alcohol. More fun than a Mimosa to drink in the morning."
- reagent_state = LIQUID
- color = "#664300" // rgb: 102, 67, 0
-
- margarita
- name = "Margarita"
- id = "margarita"
- description = "On the rocks with salt on the rim. Arriba~!"
- reagent_state = LIQUID
- color = "#664300" // rgb: 102, 67, 0
-
- black_russian
- name = "Black Russian"
- id = "blackrussian"
- description = "For the lactose-intolerant. Still as classy as a White Russian."
- reagent_state = LIQUID
- color = "#360000" // rgb: 54, 0, 0
-
- manhattan
- name = "Manhattan"
- id = "manhattan"
- description = "The Detective's undercover drink of choice. He never could stomach gin..."
- reagent_state = LIQUID
- color = "#664300" // rgb: 102, 67, 0
-
- manhattan_proj
- name = "Manhattan Project"
- id = "manhattan_proj"
- description = "A scienitst's drink of choice, for pondering ways to blow up the station."
- reagent_state = LIQUID
- color = "#664300" // rgb: 102, 67, 0
-
- whiskeysoda
- name = "Whiskey Soda"
- id = "whiskeysoda"
- description = "Ultimate refreshment."
- reagent_state = LIQUID
- color = "#664300" // rgb: 102, 67, 0
-
- antifreeze
- name = "Anti-freeze"
- id = "antifreeze"
- description = "Ultimate refreshment."
- reagent_state = LIQUID
- color = "#664300" // rgb: 102, 67, 0
-
- barefoot
- name = "Barefoot"
- id = "barefoot"
- description = "Barefoot and pregnant"
- reagent_state = LIQUID
- color = "#664300" // rgb: 102, 67, 0
-
- snowwhite
- name = "Snow White"
- id = "snowwhite"
- description = "A cold refreshment"
- reagent_state = LIQUID
- color = "#664300" // rgb: 102, 67, 0
-
- demonsblood
- name = "Demons Blood"
- id = "demonsblood"
- description = "AHHHH!!!!"
- reagent_state = LIQUID
- color = "#664300" // rgb: 102, 67, 0
- dizzy_adj = 10
- slurr_adj = 10
-
- vodkatonic
- name = "Vodka and Tonic"
- id = "vodkatonic"
- description = "For when a gin and tonic isn't russian enough."
- reagent_state = LIQUID
- color = "#664300" // rgb: 102, 67, 0
- dizzy_adj = 4
- slurr_adj = 3
-
- ginfizz
- name = "Gin Fizz"
- id = "ginfizz"
- description = "Refreshingly lemony, deliciously dry."
- reagent_state = LIQUID
- color = "#664300" // rgb: 102, 67, 0
- dizzy_adj = 4
- slurr_adj = 3
-
- bahama_mama
- name = "Bahama mama"
- id = "bahama_mama"
- description = "Tropic cocktail."
- reagent_state = LIQUID
- color = "#664300" // rgb: 102, 67, 0
-
- singulo
- name = "Singulo"
- id = "singulo"
- description = "A blue-space beverage!"
- reagent_state = LIQUID
- color = "#2E6671" // rgb: 46, 102, 113
- dizzy_adj = 15
- slurr_adj = 15
-
- sbiten
- name = "Sbiten"
- id = "sbiten"
- description = "A spicy Vodka! Might be a little hot for the little guys!"
- reagent_state = LIQUID
- color = "#664300" // rgb: 102, 67, 0
-
- on_mob_life(var/mob/living/M as mob)
- ..()
- if (M.bodytemperature < 360)
- M.bodytemperature = min(360, M.bodytemperature+50) //310 is the normal bodytemp. 310.055
- return
-
- devilskiss
- name = "Devils Kiss"
- id = "devilskiss"
- description = "Creepy time!"
- reagent_state = LIQUID
- color = "#A68310" // rgb: 166, 131, 16
-
- red_mead
- name = "Red Mead"
- id = "red_mead"
- description = "The true Viking drink! Even though it has a strange red color."
- reagent_state = LIQUID
- color = "#664300" // rgb: 102, 67, 0
-
- mead
- name = "Mead"
- id = "mead"
- description = "A Vikings drink, though a cheap one."
- reagent_state = LIQUID
- color = "#664300" // rgb: 102, 67, 0
-
- iced_beer
- name = "Iced Beer"
- id = "iced_beer"
- description = "A beer which is so cold the air around it freezes."
- reagent_state = LIQUID
- color = "#664300" // rgb: 102, 67, 0
-
- on_mob_life(var/mob/living/M as mob)
- ..()
- if (M.bodytemperature < 270)
- M.bodytemperature = min(270, M.bodytemperature-40) //310 is the normal bodytemp. 310.055
- return
-
- grog
- name = "Grog"
- id = "grog"
- description = "Watered down rum, Nanotrasen approves!"
- reagent_state = LIQUID
- color = "#664300" // rgb: 102, 67, 0
-
- aloe
- name = "Aloe"
- id = "aloe"
- description = "So very, very, very good."
- reagent_state = LIQUID
- color = "#664300" // rgb: 102, 67, 0
-
- andalusia
- name = "Andalusia"
- id = "andalusia"
- description = "A nice, strange named drink."
- reagent_state = LIQUID
- color = "#664300" // rgb: 102, 67, 0
-
- alliescocktail
- name = "Allies Cocktail"
- id = "alliescocktail"
- description = "A drink made from your allies."
- reagent_state = LIQUID
- color = "#664300" // rgb: 102, 67, 0
-
- acid_spit
- name = "Acid Spit"
- id = "acidspit"
- description = "A drink by Nanotrasen. Made from live aliens."
- reagent_state = LIQUID
- color = "#365000" // rgb: 54, 80, 0
-
- amasec
- name = "Amasec"
- id = "amasec"
- description = "Official drink of the Imperium."
- reagent_state = LIQUID
- color = "#664300" // rgb: 102, 67, 0
-
-
- neurotoxin
- name = "Neurotoxin"
- id = "neurotoxin"
- description = "A strong neurotoxin that puts the subject into a death-like state."
- reagent_state = LIQUID
- color = "#2E2E61" // rgb: 46, 46, 97
-
- on_mob_life(var/mob/living/M as mob)
- M.weakened = max(M.weakened, 3)
- if(!data)
- data = 1
- data++
- M.dizziness +=6
- if(data >= 15 && data <45)
- if (!M.slurring)
- M.slurring = 1
- M.slurring += 3
- else if(data >= 45 && prob(50) && data <55)
- M.confused = max(M.confused+3,0)
- else if(data >=55)
- M.druggy = max(M.druggy, 55)
- else if(data >=200)
- M.adjustToxLoss(2)
- ..()
- return
-
- bananahonk
- name = "Banana Mama"
- id = "bananahonk"
- description = "A drink from Clown Heaven."
- nutriment_factor = 1 * FOOD_METABOLISM
- color = "#664300" // rgb: 102, 67, 0
-
- on_mob_life(var/mob/living/M as mob)
- M.nutrition += nutriment_factor
- if(istype(M, /mob/living/carbon/human) && M.job in list("Clown"))
- if(!M) M = holder.my_atom
- M.heal_organ_damage(1,1)
- M.nutrition += nutriment_factor
- ..()
- return
- ..()
-
- silencer
- name = "Silencer"
- id = "silencer"
- description = "A drink from Mime Heaven."
- nutriment_factor = 1 * FOOD_METABOLISM
- color = "#664300" // rgb: 102, 67, 0
-
- on_mob_life(var/mob/living/M as mob)
- M.nutrition += nutriment_factor
- if(istype(M, /mob/living/carbon/human) && M.job in list("Mime"))
- if(!M) M = holder.my_atom
- M.heal_organ_damage(1,1)
- M.nutrition += nutriment_factor
- ..()
- return
- ..()
-
- changelingsting
- name = "Changeling Sting"
- id = "changelingsting"
- description = "A stingy drink."
- reagent_state = LIQUID
- color = "#2E6671" // rgb: 46, 102, 113
-
- on_mob_life(var/mob/living/M as mob)
- ..()
- M.dizziness +=5
- return
-
- erikasurprise
- name = "Erika Surprise"
- id = "erikasurprise"
- description = "The surprise is, it's green!"
- reagent_state = LIQUID
- color = "#2E6671" // rgb: 46, 102, 113
-
- irishcarbomb
- name = "Irish Car Bomb"
- id = "irishcarbomb"
- description = "Mmm, tastes like chocolate cake..."
- reagent_state = LIQUID
- color = "#2E6671" // rgb: 46, 102, 113
-
- on_mob_life(var/mob/living/M as mob)
- ..()
- M.dizziness +=5
- return
-
- syndicatebomb
- name = "Syndicate Bomb"
- id = "syndicatebomb"
- description = "A Syndicate bomb"
- reagent_state = LIQUID
- color = "#2E6671" // rgb: 46, 102, 113
-
- erikasurprise
- name = "Erika Surprise"
- id = "erikasurprise"
- description = "The surprise is, it's green!"
- reagent_state = LIQUID
- color = "#2E6671" // rgb: 46, 102, 113
-
- driestmartini
- name = "Driest Martini"
- id = "driestmartini"
- description = "Only for the experienced. You think you see sand floating in the glass."
- nutriment_factor = 1 * FOOD_METABOLISM
- color = "#2E6671" // rgb: 46, 102, 113
-
- on_mob_life(var/mob/living/M as mob)
- if(!data) data = 1
- data++
- M.dizziness +=10
- if(data >= 55 && data <115)
- if (!M.stuttering) M.stuttering = 1
- M.stuttering += 10
- else if(data >= 115 && prob(33))
- M.confused = max(M.confused+15,15)
- ..()
-
- return
-
-// Undefine the alias for REAGENTS_EFFECT_MULTIPLER
-#undef REM
-
-
-/datum/reagent/Destroy()
- holder = null
- return ..()
diff --git a/code/modules/reagents/Chemistry-Recipes.dm b/code/modules/reagents/Chemistry-Recipes.dm
deleted file mode 100644
index 8fcd9e8117b..00000000000
--- a/code/modules/reagents/Chemistry-Recipes.dm
+++ /dev/null
@@ -1,1576 +0,0 @@
-///////////////////////////////////////////////////////////////////////////////////
-datum
- chemical_reaction
- var/name = null
- var/id = null
- var/result = null
- var/list/required_reagents = list()
- var/list/required_catalysts = list()
-
- // Both of these variables are mostly going to be used with slime cores - but if you want to, you can use them for other things
- var/atom/required_container = null // the container required for the reaction to happen
- var/required_other = 0 // an integer required for the reaction to happen
-
- var/result_amount = 0
- var/secondary = 0 // set to nonzero if secondary reaction
- var/list/secondary_results = list() //additional reagents produced by the reaction
- var/min_temp = 0 //Minimum temperature required for the reaction to occur (heat to/above this). min_temp = 0 means no requirement
- var/max_temp = 9999 //Maximum temperature allowed for the reaction to occur (cool to/below this).
- var/mix_message = "The solution begins to bubble."
- var/mix_sound = 'sound/effects/bubbles.ogg'
- var/no_message = 0
-
-
- proc
- on_reaction(var/datum/reagents/holder, var/created_volume)
- return
-
- //I recommend you set the result amount to the total volume of all components.
-
- explosion_potassium
- name = "Explosion"
- id = "explosion_potassium"
- result = null
- required_reagents = list("water" = 1, "potassium" = 1)
- result_amount = 2
- mix_message = "The mixture explodes!"
-
- 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)
- e.start()
- holder.clear_reagents()
- return
-
- 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
-
- 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 / 14), 1)
- holder.clear_reagents()
- return
-/*
- silicate
- name = "Silicate"
- id = "silicate"
- result = "silicate"
- required_reagents = list("aluminum" = 1, "silicon" = 1, "oxygen" = 1)
- result_amount = 3
-*/
-
- ice
- name = "Ice"
- id = "ice"
- result = "ice"
- required_reagents = list("water" = 1)
- result_amount = 1
- max_temp = 273
- mix_message = "Ice forms as the water freezes."
- mix_sound = null
-
- sterilizine
- name = "Sterilizine"
- id = "sterilizine"
- result = "sterilizine"
- required_reagents = list("ethanol" = 1, "charcoal" = 1, "chlorine" = 1)
- result_amount = 3
-
- mutagen
- name = "Unstable mutagen"
- id = "mutagen"
- result = "mutagen"
- required_reagents = list("radium" = 1, "plasma" = 1, "chlorine" = 1)
- result_amount = 3
- mix_message = "The substance turns neon green and bubbles unnervingly."
-
- hydrocodone
- name = "Hydrocodone"
- id = "hydrocodone"
- result = "hydrocodone"
- required_reagents = list("morphine" = 1, "sacid" = 1, "water" = 1, "oil" = 1)
- result_amount = 2
-
- thermite
- name = "Thermite"
- id = "thermite"
- result = "thermite"
- required_reagents = list("aluminum" = 1, "iron" = 1, "oxygen" = 1)
- result_amount = 3
-
- space_drugs
- name = "Space Drugs"
- id = "space_drugs"
- result = "space_drugs"
- required_reagents = list("mercury" = 1, "sugar" = 1, "lithium" = 1)
- result_amount = 3
- mix_message = "Slightly dizzying fumes drift from the solution."
-
- lube
- name = "Space Lube"
- id = "lube"
- result = "lube"
- required_reagents = list("water" = 1, "silicon" = 1, "oxygen" = 1)
- result_amount = 3
- mix_message = "The substance turns a striking cyan and becomes oily."
-
- mitocholide
- name = "mitocholide"
- id = "mitocholide"
- result = "mitocholide"
- required_reagents = list("synthflesh" = 1, "cryoxadone" = 1, "plasma" = 1)
- result_amount = 3
-
- holy_water
- name = "Holy Water"
- id = "holywater"
- result = "holywater"
- required_reagents = list("water" = 1, "mercury" = 1, "wine" = 1)
- result_amount = 3
- mix_message = "The water somehow seems purified. Or maybe defiled."
-
- cryoxadone
- name = "Cryoxadone"
- id = "cryoxadone"
- result = "cryoxadone"
- required_reagents = list("cryostylane" = 1, "plasma" = 1, "acetone" = 1, "mutagen" = 1)
- result_amount = 4
- mix_message = "The solution bubbles softly."
-
- spaceacillin
- name = "Spaceacillin"
- id = "spaceacillin"
- result = "spaceacillin"
- required_reagents = list("fungus" = 1, "ethanol" = 1)
- result_amount = 2
- mix_message = "The solvent extracts an antibiotic compound from the fungus."
-
- Audioline
- name = "Audioline"
- id = "audioline"
- result = "audioline"
- required_reagents = list("spaceacillin" = 1, "salglu_solution" = 1, "epinephrine" = 1)
- result_amount = 3
-
- glycerol
- name = "Glycerol"
- id = "glycerol"
- result = "glycerol"
- required_reagents = list("cornoil" = 3, "sacid" = 1)
- result_amount = 1
-
- nitroglycerin
- name = "Nitroglycerin"
- id = "nitroglycerin"
- result = "nitroglycerin"
- required_reagents = list("glycerol" = 1, "facid" = 1, "sacid" = 1)
- result_amount = 2
- 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)
- e.start()
-
- holder.clear_reagents()
- return
-
- sodiumchloride
- name = "Sodium Chloride"
- id = "sodiumchloride"
- result = "sodiumchloride"
- required_reagents = list("sodium" = 1, "chlorine" = 1, "water" = 1)
- result_amount = 3
- mix_message = "The solution crystallizes with a brief flare of light."
-
- rezadone
- name = "Rezadone"
- id = "rezadone"
- result = "rezadone"
- required_reagents = list("carpotoxin" = 1, "spaceacillin" = 1, "copper" = 1)
- result_amount = 3
-
- lsd
- name = "Lysergic acid diethylamide"
- id = "lsd"
- result = "lsd"
- required_reagents = list("diethylamine" = 1, "fungus" = 1)
- result_amount = 3
- mix_message = "The mixture turns a rather unassuming color and settles."
-
- plastication
- name = "Plastic"
- id = "solidplastic"
- result = null
- required_reagents = list("facid" = 10, "plasticide" = 20)
- result_amount = 1
- on_reaction(var/datum/reagents/holder)
- var/obj/item/stack/sheet/metal/M = new /obj/item/stack/sheet/mineral/plastic
- M.amount = 10
- M.loc = get_turf(holder.my_atom)
- return
-
- virus_food
- name = "Virus Food"
- id = "virusfood"
- result = "virusfood"
- required_reagents = list("water" = 1, "milk" = 1, "oxygen" = 1)
- result_amount = 3
-/*
- mix_virus
- name = "Mix Virus"
- id = "mixvirus"
- result = "blood"
- required_reagents = list("virusfood" = 5)
- required_catalysts = list("blood")
- var/level = 2
-
- on_reaction(var/datum/reagents/holder, var/created_volume)
-
- var/datum/reagent/blood/B = locate(/datum/reagent/blood) in holder.reagent_list
- if(B && B.data)
- var/datum/disease/advance/D = locate(/datum/disease/advance) in B.data["viruses"]
- if(D)
- D.Evolve(level - rand(0, 1))
-
-
- mix_virus_2
-
- name = "Mix Virus 2"
- id = "mixvirus2"
- required_reagents = list("mutagen" = 5)
- level = 4
-
- rem_virus
-
- name = "Devolve Virus"
- id = "remvirus"
- required_reagents = list("synaptizine" = 5)
-
- on_reaction(var/datum/reagents/holder, var/created_volume)
-
- var/datum/reagent/blood/B = locate(/datum/reagent/blood) in holder.reagent_list
- if(B && B.data)
- var/datum/disease/advance/D = locate(/datum/disease/advance) in B.data["viruses"]
- if(D)
- D.Devolve()
-*/
- condensedcapsaicin
- name = "Condensed Capsaicin"
- id = "condensedcapsaicin"
- result = "condensedcapsaicin"
- required_reagents = list("capsaicin" = 2)
- required_catalysts = list("plasma" = 5)
- result_amount = 1
-///////////////////////////////////////////////////////////////////////////////////
-
-// foam and foam precursor
-
- surfactant
- name = "Foam surfactant"
- id = "foam surfactant"
- result = "fluorosurfactant"
- required_reagents = list("fluorine" = 2, "carbon" = 2, "sacid" = 1)
- result_amount = 5
- mix_message = "A head of foam results from the mixture's constant fizzing."
-
-
- foam
- name = "Foam"
- id = "foam"
- result = null
- required_reagents = list("fluorosurfactant" = 1, "water" = 1)
- result_amount = 2
-
- 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 << "\red The solution violently bubbles!"
-
- location = get_turf(holder.my_atom)
-
- for(var/mob/M in viewers(5, location))
- M << "\red The solution spews out foam!"
-
- //world << "Holder volume is [holder.total_volume]"
- //for(var/datum/reagent/R in holder.reagent_list)
- // world << "[R.name] = [R.volume]"
-
- var/datum/effect/effect/system/foam_spread/s = new()
- s.set_up(created_volume, location, holder, 0)
- s.start()
- holder.clear_reagents()
- return
-
- metalfoam
- name = "Metal Foam"
- id = "metalfoam"
- result = null
- required_reagents = list("aluminum" = 3, "fluorosurfactant" = 1, "sacid" = 1)
- result_amount = 5
-
- 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 << "\red The solution spews out a metalic foam!"
-
- var/datum/effect/effect/system/foam_spread/s = new()
- s.set_up(created_volume, location, holder, 1)
- s.start()
- return
-
- ironfoam
- name = "Iron Foam"
- id = "ironlfoam"
- result = null
- required_reagents = list("iron" = 3, "fluorosurfactant" = 1, "sacid" = 1)
- result_amount = 5
-
- 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 << "\red The solution spews out a metalic foam!"
-
- var/datum/effect/effect/system/foam_spread/s = new()
- s.set_up(created_volume, location, holder, 2)
- s.start()
- return
-
- // Synthesizing these three chemicals is pretty complex in real life, but fuck it, it's just a game!
- ammonia
- name = "Ammonia"
- id = "ammonia"
- result = "ammonia"
- required_reagents = list("hydrogen" = 3, "nitrogen" = 1)
- result_amount = 3
- mix_message = "The mixture bubbles, emitting an acrid reek."
-
- diethylamine
- name = "Diethylamine"
- id = "diethylamine"
- result = "diethylamine"
- required_reagents = list ("ammonia" = 1, "ethanol" = 1)
- result_amount = 2
- min_temp = 374
- mix_message = "A horrible smell pours forth from the mixture."
-
- space_cleaner
- name = "Space cleaner"
- id = "cleaner"
- result = "cleaner"
- required_reagents = list("ammonia" = 1, "water" = 1, "ethanol" = 1)
- result_amount = 3
- mix_message = "Ick, this stuff really stinks. Sure does make the container sparkle though!"
-
- sulfuric_acid
- name = "Sulfuric Acid"
- id = "sacid"
- result = "sacid"
- required_reagents = list("sulfur" = 1, "oxygen" = 1, "hydrogen" = 1)
- result_amount = 2
- mix_message = "The mixture gives off a sharp acidic tang."
-
-///////Changeling Blood Test/////////////
-/*
- changeling_test
- name = "Changeling blood test"
- id = "changelingblood"
- result = "blood"
- required_reagents = list("blood" = 5)
- required_catalysts = list("fuel")
- result_amount = 1 //Needs this in order to check the donor, as the data var in the reacted blood gets transferred.
- on_reaction(var/datum/reagents/holder, var/created_volume)
- if(!holder.reagent_list) //reagent_list is not null
- return
- var/datum/reagent/blood/B = locate() in holder.reagent_list
- if(!B) //B is not null
- return
- var/mob/living/carbon/human/H = B.data["donor"]
- if(!H) //H is not null.
- return
- if(H.mind && H.mind.changeling) //Checks if H, the blood donor is a ling.
- for(var/mob/M in viewers(get_turf(holder.my_atom), null))
- M.show_message( "The blood writhes and wriggles and sizzles away from the container!", 1, "You hear bubbling and sizzling.", 2)
- else
- for(var/mob/M in viewers(get_turf(holder.my_atom), null))
- M.show_message( "The blood seems to break apart in the fuel.", 1)
- holder.del_reagent("blood")
- return
-*/
-
-/////////////////////////////////////////////NEW SLIME CORE REACTIONS/////////////////////////////////////////////
-
-//Grey
- slimespawn
- name = "Slime Spawn"
- id = "m_spawn"
- result = null
- required_reagents = list("plasma" = 5)
- result_amount = 1
- required_container = /obj/item/slime_extract/grey
- required_other = 1
- on_reaction(var/datum/reagents/holder)
- for(var/mob/O in viewers(get_turf(holder.my_atom), null))
- O.show_message(text("\red Infused with plasma, the core begins to quiver and grow, and soon a new baby slime emerges from it!"), 1)
- var/mob/living/carbon/slime/S = new /mob/living/carbon/slime
- S.loc = get_turf(holder.my_atom)
-
-
- slimeinaprov
- name = "Slime Epinephrine"
- id = "m_epinephrine"
- result = "epinephrine"
- required_reagents = list("water" = 5)
- result_amount = 3
- required_other = 1
- required_container = /obj/item/slime_extract/grey
- on_reaction(var/datum/reagents/holder)
- feedback_add_details("slime_cores_used","[replacetext(name," ","_")]")
-
-
- slimemonkey
- name = "Slime Monkey"
- id = "m_monkey"
- result = null
- required_reagents = list("blood" = 5)
- result_amount = 1
- required_container = /obj/item/slime_extract/grey
- required_other = 1
- on_reaction(var/datum/reagents/holder)
- for(var/i = 1, i <= 3, i++)
- var /obj/item/weapon/reagent_containers/food/snacks/monkeycube/M = new /obj/item/weapon/reagent_containers/food/snacks/monkeycube
- M.loc = get_turf(holder.my_atom)
-
-//Green
- slimemutate
- name = "Mutation Toxin"
- id = "mutationtoxin"
- result = "mutationtoxin"
- required_reagents = list("plasma" = 5)
- result_amount = 1
- required_other = 1
- required_container = /obj/item/slime_extract/green
-
-//Metal
- slimemetal
- name = "Slime Metal"
- id = "m_metal"
- result = null
- required_reagents = list("plasma" = 5)
- result_amount = 1
- required_container = /obj/item/slime_extract/metal
- required_other = 1
- on_reaction(var/datum/reagents/holder)
- var/obj/item/stack/sheet/metal/M = new /obj/item/stack/sheet/metal
- M.amount = 15
- M.loc = get_turf(holder.my_atom)
- var/obj/item/stack/sheet/plasteel/P = new /obj/item/stack/sheet/plasteel
- P.amount = 5
- P.loc = get_turf(holder.my_atom)
-
-//Gold
- slimecrit
- name = "Slime Crit"
- id = "m_tele"
- result = null
- required_reagents = list("plasma" = 5)
- result_amount = 1
- required_container = /obj/item/slime_extract/gold
- required_other = 1
- on_reaction(var/datum/reagents/holder)
-
- var/blocked = blocked_mobs //global variable of blocked mobs
-
- var/list/critters = typesof(/mob/living/simple_animal/hostile) - blocked // list of possible hostile mobs
-
- playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1)
-
- for(var/mob/living/carbon/human/M in viewers(get_turf(holder.my_atom), null))
- if(M:eyecheck() <= 0)
- flick("e_flash", M.flash)
-
- for(var/i = 1, i <= 5, i++)
- var/chosen = pick(critters)
- var/mob/living/simple_animal/hostile/C = new chosen
- C.faction |= "slimesummon"
- C.loc = get_turf(holder.my_atom)
- if(prob(50))
- for(var/j = 1, j <= rand(1, 3), j++)
- step(C, pick(NORTH,SOUTH,EAST,WEST))
-// for(var/mob/O in viewers(get_turf(holder.my_atom), null))
-// O.show_message(text("\red The slime core fizzles disappointingly,"), 1)
-
-
- slimecritlesser
- name = "Slime Crit Lesser"
- id = "m_tele3"
- result = null
- required_reagents = list("blood" = 1)
- result_amount = 1
- required_container = /obj/item/slime_extract/gold
- required_other = 1
- on_reaction(var/datum/reagents/holder)
- feedback_add_details("slime_cores_used","[replacetext(name," ","_")]")
- for(var/mob/O in viewers(get_turf(holder.my_atom), null))
- O.show_message(text("The slime extract begins to vibrate violently!"), 1)
- spawn(50)
-
- if(holder && holder.my_atom)
-
- var/blocked = blocked_mobs
-
- var/list/critters = typesof(/mob/living/simple_animal/hostile) - blocked // list of possible hostile mobs
-
- playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1)
-
- for(var/mob/living/carbon/human/M in viewers(get_turf(holder.my_atom), null))
- if(M:eyecheck() <= 0)
- flick("e_flash", M.flash)
-
- var/chosen = pick(critters)
- var/mob/living/simple_animal/hostile/C = new chosen
- C.faction |= "neutral"
- C.loc = get_turf(holder.my_atom)
-
-//Silver
- slimebork
- name = "Slime Bork"
- id = "m_tele2"
- result = null
- required_reagents = list("plasma" = 5)
- result_amount = 1
- required_container = /obj/item/slime_extract/silver
- required_other = 1
- on_reaction(var/datum/reagents/holder)
-
- var/list/borks = subtypesof(/obj/item/weapon/reagent_containers/food/snacks)
- // BORK BORK BORK
-
- playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1)
-
- for(var/mob/living/carbon/human/M in viewers(get_turf(holder.my_atom), null))
- if(M:eyecheck() <= 0)
- flick("e_flash", M.flash)
-
- for(var/i = 1, i <= 4 + rand(1,2), i++)
- var/chosen = pick(borks)
- var/obj/B = new chosen
- if(B)
- B.loc = get_turf(holder.my_atom)
- if(prob(50))
- for(var/j = 1, j <= rand(1, 3), j++)
- step(B, pick(NORTH,SOUTH,EAST,WEST))
- slimedrinks
- name = "Slime Drinks"
- id = "m_tele3"
- result = null
- required_reagents = list("water" = 5)
- result_amount = 1
- required_container = /obj/item/slime_extract/silver
- required_other = 1
- on_reaction(var/datum/reagents/holder)
-
- var/list/borks = subtypesof(/obj/item/weapon/reagent_containers/food/drinks)
- // BORK BORK BORK
-
- playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1)
-
- for(var/mob/living/carbon/human/M in viewers(get_turf(holder.my_atom), null))
- if(M:eyecheck() <= 0)
- flick("e_flash", M.flash)
-
- for(var/i = 1, i <= 4 + rand(1,2), i++)
- var/chosen = pick(borks)
- var/obj/B = new chosen
- if(B)
- B.loc = get_turf(holder.my_atom)
- if(prob(50))
- for(var/j = 1, j <= rand(1, 3), j++)
- step(B, pick(NORTH,SOUTH,EAST,WEST))
-
-
-//Blue
- slimefrost
- name = "Slime Frost Oil"
- id = "m_frostoil"
- result = "frostoil"
- required_reagents = list("plasma" = 5)
- result_amount = 10
- required_container = /obj/item/slime_extract/blue
- required_other = 1
-//Dark Blue
- slimefreeze
- name = "Slime Freeze"
- id = "m_freeze"
- result = null
- required_reagents = list("plasma" = 5)
- result_amount = 1
- required_container = /obj/item/slime_extract/darkblue
- required_other = 1
- on_reaction(var/datum/reagents/holder)
- for(var/mob/O in viewers(get_turf(holder.my_atom), null))
- O.show_message(text("\red The slime extract begins to vibrate violently !"), 1)
- sleep(50)
- playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1)
- for(var/mob/living/M in range (get_turf(holder.my_atom), 7))
- M.bodytemperature -= 140
- M << "\blue You feel a chill!"
-
-//Orange
- slimecasp
- name = "Slime Capsaicin Oil"
- id = "m_capsaicinoil"
- result = "capsaicin"
- required_reagents = list("blood" = 5)
- result_amount = 10
- required_container = /obj/item/slime_extract/orange
- required_other = 1
-
- slimefire
- name = "Slime fire"
- id = "m_fire"
- result = null
- required_reagents = list("plasma" = 5)
- result_amount = 1
- required_container = /obj/item/slime_extract/orange
- required_other = 1
- on_reaction(var/datum/reagents/holder)
- feedback_add_details("slime_cores_used","[replacetext(name," ","_")]")
- for(var/mob/O in viewers(get_turf(holder.my_atom), null))
- O.show_message(text("\red The slime extract begins to vibrate violently !"), 1)
- sleep(50)
- var/turf/simulated/T = get_turf(holder.my_atom)
- if(istype(T))
- T.atmos_spawn_air(SPAWN_HEAT | SPAWN_TOXINS, 50)
-
-//Yellow
- slimeoverload
- name = "Slime EMP"
- id = "m_emp"
- result = null
- required_reagents = list("blood" = 5)
- result_amount = 1
- required_container = /obj/item/slime_extract/yellow
- required_other = 1
- on_reaction(var/datum/reagents/holder, var/created_volume)
- empulse(get_turf(holder.my_atom), 3, 7)
-
-
- slimecell
- name = "Slime Powercell"
- id = "m_cell"
- result = null
- required_reagents = list("plasma" = 5)
- result_amount = 1
- required_container = /obj/item/slime_extract/yellow
- required_other = 1
- on_reaction(var/datum/reagents/holder, var/created_volume)
- var/obj/item/weapon/stock_parts/cell/slime/P = new /obj/item/weapon/stock_parts/cell/slime
- P.loc = get_turf(holder.my_atom)
-
- slimeglow
- name = "Slime Glow"
- id = "m_glow"
- result = null
- required_reagents = list("water" = 5)
- result_amount = 1
- required_container = /obj/item/slime_extract/yellow
- required_other = 1
- on_reaction(var/datum/reagents/holder)
- for(var/mob/O in viewers(get_turf(holder.my_atom), null))
- O.show_message(text("\red The contents of the slime core harden and begin to emit a warm, bright light."), 1)
- var/obj/item/device/flashlight/slime/F = new /obj/item/device/flashlight/slime
- F.loc = get_turf(holder.my_atom)
-
-//Purple
-
- slimepsteroid
- name = "Slime Steroid"
- id = "m_steroid"
- result = null
- required_reagents = list("plasma" = 5)
- result_amount = 1
- required_container = /obj/item/slime_extract/purple
- required_other = 1
- on_reaction(var/datum/reagents/holder)
- var/obj/item/weapon/slimesteroid/P = new /obj/item/weapon/slimesteroid
- P.loc = get_turf(holder.my_atom)
-
-
-
- slimejam
- name = "Slime Jam"
- id = "m_jam"
- result = "slimejelly"
- required_reagents = list("sugar" = 5)
- result_amount = 10
- required_container = /obj/item/slime_extract/purple
- required_other = 1
-
-
-//Dark Purple
- slimeplasma
- name = "Slime Plasma"
- id = "m_plasma"
- result = null
- required_reagents = list("plasma" = 5)
- result_amount = 1
- required_container = /obj/item/slime_extract/darkpurple
- required_other = 1
- on_reaction(var/datum/reagents/holder)
- var/obj/item/stack/sheet/mineral/plasma/P = new /obj/item/stack/sheet/mineral/plasma
- P.amount = 10
- P.loc = get_turf(holder.my_atom)
-
-//Red
- slimeglycerol
- name = "Slime Glycerol"
- id = "m_glycerol"
- result = "glycerol"
- required_reagents = list("plasma" = 5)
- result_amount = 8
- required_container = /obj/item/slime_extract/red
- required_other = 1
-
-
- slimebloodlust
- name = "Bloodlust"
- id = "m_bloodlust"
- result = null
- required_reagents = list("blood" = 5)
- result_amount = 1
- required_container = /obj/item/slime_extract/red
- required_other = 1
- on_reaction(var/datum/reagents/holder)
- for(var/mob/living/carbon/slime/slime in viewers(get_turf(holder.my_atom), null))
- slime.rabid = 1
- for(var/mob/O in viewers(get_turf(holder.my_atom), null))
- O.show_message(text("\red The [slime] is driven into a frenzy!."), 1)
-
-//Pink
- slimeppotion
- name = "Slime Potion"
- id = "m_potion"
- result = null
- required_reagents = list("plasma" = 5)
- result_amount = 1
- required_container = /obj/item/slime_extract/pink
- required_other = 1
- on_reaction(var/datum/reagents/holder)
- var/obj/item/weapon/slimepotion/P = new /obj/item/weapon/slimepotion
- P.loc = get_turf(holder.my_atom)
-
-
-//Black
- slimemutate2
- name = "Advanced Mutation Toxin"
- id = "mutationtoxin2"
- result = "amutationtoxin"
- required_reagents = list("plasma" = 5)
- result_amount = 1
- required_other = 1
- required_container = /obj/item/slime_extract/black
-
-//Oil
- slimeexplosion
- name = "Slime Explosion"
- id = "m_explosion"
- result = null
- required_reagents = list("plasma" = 5)
- result_amount = 1
- required_container = /obj/item/slime_extract/oil
- required_other = 1
- on_reaction(var/datum/reagents/holder)
- for(var/mob/O in viewers(get_turf(holder.my_atom), null))
- O.show_message(text("\red The slime extract begins to vibrate violently !"), 1)
- sleep(50)
- explosion(get_turf(holder.my_atom), 1 ,3, 6)
-//Light Pink
- slimepotion2
- name = "Slime Potion 2"
- id = "m_potion2"
- result = null
- result_amount = 1
- required_container = /obj/item/slime_extract/lightpink
- required_reagents = list("plasma" = 5)
- required_other = 1
- on_reaction(var/datum/reagents/holder)
- var/obj/item/weapon/slimepotion2/P = new /obj/item/weapon/slimepotion2
- P.loc = get_turf(holder.my_atom)
-//Adamantine
- slimegolem
- name = "Slime Golem"
- id = "m_golem"
- result = null
- required_reagents = list("plasma" = 5)
- result_amount = 1
- required_container = /obj/item/slime_extract/adamantine
- required_other = 1
- on_reaction(var/datum/reagents/holder)
- feedback_add_details("slime_cores_used","[replacetext(name," ","_")]")
- var/obj/effect/goleRUNe/Z = new /obj/effect/goleRUNe
- Z.loc = get_turf(holder.my_atom)
- Z.announce_to_ghosts()
-//Bluespace
- slimecrystal
- name = "Slime Crystal"
- id = "m_crystal"
- result = null
- required_reagents = list("blood" = 1)
- result_amount = 1
- required_container = /obj/item/slime_extract/bluespace
- required_other = 1
- on_reaction(var/datum/reagents/holder, var/created_volume)
- feedback_add_details("slime_cores_used","[replacetext(name," ","_")]")
- if(holder.my_atom)
- var/obj/item/bluespace_crystal/BC = new(get_turf(holder.my_atom))
- BC.visible_message("The [BC.name] appears out of thin air!")
-//Cerulean
- slimepsteroid2
- name = "Slime Steroid 2"
- id = "m_steroid2"
- result = null
- required_reagents = list("plasma" = 1)
- result_amount = 1
- required_container = /obj/item/slime_extract/cerulean
- required_other = 1
- on_reaction(var/datum/reagents/holder)
- feedback_add_details("slime_cores_used","[replacetext(name," ","_")]")
- var/obj/item/weapon/slimesteroid2/P = new /obj/item/weapon/slimesteroid2
- P.loc = get_turf(holder.my_atom)
-//Sepia
- slimecamera
- name = "Slime Camera"
- id = "m_camera"
- result = null
- required_reagents = list("plasma" = 1)
- result_amount = 1
- required_container = /obj/item/slime_extract/sepia
- required_other = 1
- on_reaction(var/datum/reagents/holder)
- feedback_add_details("slime_cores_used","[replacetext(name," ","_")]")
- var/obj/item/device/camera/P = new /obj/item/device/camera
- P.loc = get_turf(holder.my_atom)
-
-
- slimefilm
- name = "Slime Film"
- id = "m_film"
- result = null
- required_reagents = list("blood" = 1)
- result_amount = 1
- required_container = /obj/item/slime_extract/sepia
- required_other = 1
- on_reaction(var/datum/reagents/holder)
- feedback_add_details("slime_cores_used","[replacetext(name," ","_")]")
- var/obj/item/device/camera_film/P = new /obj/item/device/camera_film
- P.loc = get_turf(holder.my_atom)
-//Pyrite
- slimepaint
- name = "Slime Paint"
- id = "s_paint"
- result = null
- required_reagents = list("plasma" = 1)
- result_amount = 1
- required_container = /obj/item/slime_extract/pyrite
- required_other = 1
- on_reaction(var/datum/reagents/holder)
- feedback_add_details("slime_cores_used","[replacetext(name," ","_")]")
- var/list/paints = subtypesof(/obj/item/weapon/reagent_containers/glass/paint)
- var/chosen = pick(paints)
- var/obj/P = new chosen
- if(P)
- P.loc = get_turf(holder.my_atom)
-
-
-//////////////////////////////////////////FOOD MIXTURES////////////////////////////////////
-
- tofu
- name = "Tofu"
- id = "tofu"
- result = null
- required_reagents = list("soymilk" = 10)
- required_catalysts = list("enzyme" = 5)
- result_amount = 1
- 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
-
- chocolate_bar
- name = "Chocolate Bar"
- id = "chocolate_bar"
- result = null
- required_reagents = list("soymilk" = 2, "coco" = 2, "sugar" = 2)
- result_amount = 1
- 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
-
- chocolate_bar2
- name = "Chocolate Bar"
- id = "chocolate_bar"
- result = null
- required_reagents = list("milk" = 2, "coco" = 2, "sugar" = 2)
- result_amount = 1
- 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
-
- hot_coco
- name = "Hot Coco"
- id = "hot_coco"
- result = "hot_coco"
- required_reagents = list("water" = 5, "coco" = 1)
- result_amount = 5
-
- chocolate_milk
- name = "Chocolate Milk"
- id = "chocolate_milk"
- result = "chocolate_milk"
- required_reagents = list("chocolate" = 1, "milk" = 1)
- result_amount = 2
- mix_message = "The mixture turns a nice brown color."
-
- coffee
- name = "Coffee"
- id = "coffee"
- result = "coffee"
- required_reagents = list("coffeepowder" = 1, "water" = 5)
- result_amount = 5
-
- tea
- name = "Tea"
- id = "tea"
- result = "tea"
- required_reagents = list("teapowder" = 1, "water" = 5)
- result_amount = 5
-
- soysauce
- name = "Soy Sauce"
- id = "soysauce"
- result = "soysauce"
- required_reagents = list("soymilk" = 2, "flour" = 1, "sodiumchloride" = 1, "water" = 3)
- result_amount = 7
-
- cheesewheel
- name = "Cheesewheel"
- id = "cheesewheel"
- result = null
- required_reagents = list("milk" = 40)
- required_catalysts = list("enzyme" = 5)
- result_amount = 1
- on_reaction(var/datum/reagents/holder, var/created_volume)
- var/location = get_turf(holder.my_atom)
- new /obj/item/weapon/reagent_containers/food/snacks/sliceable/cheesewheel(location)
- return
-
- syntiflesh
- name = "Syntiflesh"
- id = "syntiflesh"
- result = null
- required_reagents = list("blood" = 5, "cryoxadone" = 1)
- result_amount = 1
- on_reaction(var/datum/reagents/holder, var/created_volume)
- var/location = get_turf(holder.my_atom)
- new /obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh(location)
- return
-
- hot_ramen
- name = "Hot Ramen"
- id = "hot_ramen"
- result = "hot_ramen"
- required_reagents = list("water" = 1, "dry_ramen" = 3)
- result_amount = 3
-
- hell_ramen
- name = "Hell Ramen"
- id = "hell_ramen"
- result = "hell_ramen"
- required_reagents = list("capsaicin" = 1, "hot_ramen" = 6)
- result_amount = 6
-
- doughball
- name = "Ball of dough"
- id = "dough_ball"
- result = "dough_ball"
- required_reagents = list("flour" = 15, "water" = 5)
- required_catalysts = list("enzyme" = 5)
-
-
-////////////////////////////////////////// COCKTAILS //////////////////////////////////////
-
-
- goldschlager
- name = "Goldschlager"
- id = "goldschlager"
- result = "goldschlager"
- required_reagents = list("vodka" = 10, "gold" = 1)
- result_amount = 10
-
- patron
- name = "Patron"
- id = "patron"
- result = "patron"
- required_reagents = list("tequilla" = 10, "silver" = 1)
- result_amount = 10
-
- bilk
- name = "Bilk"
- id = "bilk"
- result = "bilk"
- required_reagents = list("milk" = 1, "beer" = 1)
- result_amount = 2
-
- icetea
- name = "Iced Tea"
- id = "icetea"
- result = "icetea"
- required_reagents = list("ice" = 1, "tea" = 3)
- result_amount = 4
-
- icecoffee
- name = "Iced Coffee"
- id = "icecoffee"
- result = "icecoffee"
- required_reagents = list("ice" = 1, "coffee" = 3)
- result_amount = 4
-
- nuka_cola
- name = "Nuka Cola"
- id = "nuka_cola"
- result = "nuka_cola"
- required_reagents = list("uranium" = 1, "cola" = 6)
- result_amount = 6
-
- moonshine
- name = "Moonshine"
- id = "moonshine"
- result = "moonshine"
- required_reagents = list("nutriment" = 10)
- required_catalysts = list("enzyme" = 5)
- result_amount = 10
-
- wine
- name = "Wine"
- id = "wine"
- result = "wine"
- required_reagents = list("berryjuice" = 10)
- required_catalysts = list("enzyme" = 5)
- result_amount = 10
-
- spacebeer
- name = "Space Beer"
- id = "spacebeer"
- result = "beer"
- required_reagents = list("cornoil" = 10)
- required_catalysts = list("enzyme" = 5)
- result_amount = 10
-
- vodka
- name = "Vodka"
- id = "vodka"
- result = "vodka"
- required_reagents = list("potato" = 10)
- required_catalysts = list("enzyme" = 5)
- result_amount = 10
- sake
- name = "Sake"
- id = "sake"
- result = "sake"
- required_reagents = list("rice" = 10,"water" = 5)
- required_catalysts = list("enzyme" = 5)
- result_amount = 15
-
- kahlua
- name = "Kahlua"
- id = "kahlua"
- result = "kahlua"
- required_reagents = list("coffee" = 5, "sugar" = 5, "rum" = 5)
- required_catalysts = list("enzyme" = 5)
- result_amount = 5
-
- kahluaVodka
- name = "KahluaVodka"
- id = "kahlauVodka"
- result = "kahlua"
- required_reagents = list("coffee" = 5, "sugar" = 5, "vodka" = 5)
- required_catalysts = list("enzyme" = 5)
- result_amount = 5
- gin_tonic
- name = "Gin and Tonic"
- id = "gintonic"
- result = "gintonic"
- required_reagents = list("gin" = 2, "tonic" = 1)
- result_amount = 3
- mix_message = "The tonic water and gin mix together perfectly."
-
- cuba_libre
- name = "Cuba Libre"
- id = "cubalibre"
- result = "cubalibre"
- required_reagents = list("rum" = 2, "cola" = 1)
- result_amount = 3
-
- mojito
- name = "Mojito"
- id = "mojito"
- result = "mojito"
- required_reagents = list("rum" = 1, "sugar" = 1, "limejuice" = 1, "sodawater" = 1)
- result_amount = 4
-
- martini
- name = "Classic Martini"
- id = "martini"
- result = "martini"
- required_reagents = list("gin" = 2, "vermouth" = 1)
- result_amount = 3
-
- vodkamartini
- name = "Vodka Martini"
- id = "vodkamartini"
- result = "vodkamartini"
- required_reagents = list("vodka" = 2, "vermouth" = 1)
- result_amount = 3
-
- white_russian
- name = "White Russian"
- id = "whiterussian"
- result = "whiterussian"
- required_reagents = list("blackrussian" = 3, "cream" = 2)
- result_amount = 5
-
- whiskey_cola
- name = "Whiskey Cola"
- id = "whiskeycola"
- result = "whiskeycola"
- required_reagents = list("whiskey" = 2, "cola" = 1)
- result_amount = 3
-
- screwdriver
- name = "Screwdriver"
- id = "screwdrivercocktail"
- result = "screwdrivercocktail"
- required_reagents = list("vodka" = 2, "orangejuice" = 1)
- result_amount = 3
-
- bloody_mary
- name = "Bloody Mary"
- id = "bloodymary"
- result = "bloodymary"
- required_reagents = list("vodka" = 1, "tomatojuice" = 2, "limejuice" = 1)
- result_amount = 4
-
- gargle_blaster
- name = "Pan-Galactic Gargle Blaster"
- id = "gargleblaster"
- result = "gargleblaster"
- required_reagents = list("vodka" = 1, "gin" = 1, "whiskey" = 1, "cognac" = 1, "limejuice" = 1)
- result_amount = 5
-
- brave_bull
- name = "Brave Bull"
- id = "bravebull"
- result = "bravebull"
- required_reagents = list("tequilla" = 2, "kahlua" = 1)
- result_amount = 3
-
- tequilla_sunrise
- name = "Tequilla Sunrise"
- id = "tequillasunrise"
- result = "tequillasunrise"
- required_reagents = list("tequilla" = 2, "orangejuice" = 1)
- result_amount = 3
-
- toxins_special
- name = "Toxins Special"
- id = "toxinsspecial"
- result = "toxinsspecial"
- required_reagents = list("rum" = 2, "vermouth" = 1, "plasma" = 2)
- result_amount = 5
-
- beepsky_smash
- name = "Beepksy Smash"
- id = "beepksysmash"
- result = "beepskysmash"
- required_reagents = list("limejuice" = 2, "whiskey" = 2, "iron" = 1)
- result_amount = 4
-
- doctor_delight
- name = "The Doctor's Delight"
- id = "doctordelight"
- result = "doctorsdelight"
- required_reagents = list("limejuice" = 1, "tomatojuice" = 1, "orangejuice" = 1, "cream" = 1)
- result_amount = 5
-
- irish_cream
- name = "Irish Cream"
- id = "irishcream"
- result = "irishcream"
- required_reagents = list("whiskey" = 2, "cream" = 1)
- result_amount = 3
-
- manly_dorf
- name = "The Manly Dorf"
- id = "manlydorf"
- result = "manlydorf"
- required_reagents = list ("beer" = 1, "ale" = 2)
- result_amount = 3
-
- suicider
- name = "Suicider"
- id = "suicider"
- result = "suicider"
- required_reagents = list ("vodka" = 1, "cider" = 1, "fuel" = 1, "epinephrine" = 1)
- result_amount = 4
- mix_message = "The drinks and chemicals mix together, emitting a potent smell."
-
- irish_coffee
- name = "Irish Coffee"
- id = "irishcoffee"
- result = "irishcoffee"
- required_reagents = list("irishcream" = 1, "coffee" = 1)
- result_amount = 2
-
- b52
- name = "B-52"
- id = "b52"
- result = "b52"
- required_reagents = list("irishcream" = 1, "kahlua" = 1, "cognac" = 1)
- result_amount = 3
-
- atomicbomb
- name = "Atomic Bomb"
- id = "atomicbomb"
- result = "atomicbomb"
- required_reagents = list("b52" = 10, "uranium" = 1)
- result_amount = 10
-
- margarita
- name = "Margarita"
- id = "margarita"
- result = "margarita"
- required_reagents = list("tequilla" = 2, "limejuice" = 1)
- result_amount = 3
-
- longislandicedtea
- name = "Long Island Iced Tea"
- id = "longislandicedtea"
- result = "longislandicedtea"
- required_reagents = list("vodka" = 1, "gin" = 1, "tequilla" = 1, "cubalibre" = 1)
- result_amount = 4
-
- threemileisland
- name = "Three Mile Island Iced Tea"
- id = "threemileisland"
- result = "threemileisland"
- required_reagents = list("longislandicedtea" = 10, "uranium" = 1)
- result_amount = 10
-
- whiskeysoda
- name = "Whiskey Soda"
- id = "whiskeysoda"
- result = "whiskeysoda"
- required_reagents = list("whiskey" = 2, "sodawater" = 1)
- result_amount = 3
-
- black_russian
- name = "Black Russian"
- id = "blackrussian"
- result = "blackrussian"
- required_reagents = list("vodka" = 3, "kahlua" = 2)
- result_amount = 5
-
- manhattan
- name = "Manhattan"
- id = "manhattan"
- result = "manhattan"
- required_reagents = list("whiskey" = 2, "vermouth" = 1)
- result_amount = 3
-
- manhattan_proj
- name = "Manhattan Project"
- id = "manhattan_proj"
- result = "manhattan_proj"
- required_reagents = list("manhattan" = 10, "uranium" = 1)
- result_amount = 10
-
- vodka_tonic
- name = "Vodka and Tonic"
- id = "vodkatonic"
- result = "vodkatonic"
- required_reagents = list("vodka" = 2, "tonic" = 1)
- result_amount = 3
-
- gin_fizz
- name = "Gin Fizz"
- id = "ginfizz"
- result = "ginfizz"
- required_reagents = list("gin" = 2, "sodawater" = 1, "limejuice" = 1)
- result_amount = 4
-
- 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
-
- singulo
- name = "Singulo"
- id = "singulo"
- result = "singulo"
- required_reagents = list("vodka" = 5, "radium" = 1, "wine" = 5)
- result_amount = 10
-
- alliescocktail
- name = "Allies Cocktail"
- id = "alliescocktail"
- result = "alliescocktail"
- required_reagents = list("martini" = 1, "vodka" = 1)
- result_amount = 2
-
- demonsblood
- name = "Demons Blood"
- id = "demonsblood"
- result = "demonsblood"
- required_reagents = list("rum" = 1, "spacemountainwind" = 1, "blood" = 1, "dr_gibb" = 1)
- result_amount = 4
-
- booger
- name = "Booger"
- id = "booger"
- result = "booger"
- required_reagents = list("cream" = 1, "banana" = 1, "rum" = 1, "watermelonjuice" = 1)
- result_amount = 4
-
- antifreeze
- name = "Anti-freeze"
- id = "antifreeze"
- result = "antifreeze"
- required_reagents = list("vodka" = 2, "cream" = 1, "ice" = 1)
- result_amount = 4
-
- barefoot
- name = "Barefoot"
- id = "barefoot"
- result = "barefoot"
- required_reagents = list("berryjuice" = 1, "cream" = 1, "vermouth" = 1)
- result_amount = 3
-
-
-////DRINKS THAT REQUIRED IMPROVED SPRITES BELOW:: -Agouri/////
-
- sbiten
- name = "Sbiten"
- id = "sbiten"
- result = "sbiten"
- required_reagents = list("vodka" = 10, "capsaicin" = 1)
- result_amount = 10
-
- red_mead
- name = "Red Mead"
- id = "red_mead"
- result = "red_mead"
- required_reagents = list("blood" = 1, "mead" = 1)
- result_amount = 2
-
- mead
- name = "Mead"
- id = "mead"
- result = "mead"
- required_reagents = list("sugar" = 1, "water" = 1)
- required_catalysts = list("enzyme" = 5)
- result_amount = 2
-
- iced_beer
- name = "Iced Beer"
- id = "iced_beer"
- result = "iced_beer"
- required_reagents = list("beer" = 10, "frostoil" = 1)
- result_amount = 10
-
- iced_beer2
- name = "Iced Beer"
- id = "iced_beer"
- result = "iced_beer"
- required_reagents = list("beer" = 5, "ice" = 1)
- result_amount = 6
-
- grog
- name = "Grog"
- id = "grog"
- result = "grog"
- required_reagents = list("rum" = 1, "water" = 1)
- result_amount = 2
-
- soy_latte
- name = "Soy Latte"
- id = "soy_latte"
- result = "soy_latte"
- required_reagents = list("coffee" = 1, "soymilk" = 1)
- result_amount = 2
-
- cafe_latte
- name = "Cafe Latte"
- id = "cafe_latte"
- result = "cafe_latte"
- required_reagents = list("coffee" = 1, "milk" = 1)
- result_amount = 2
-
- acidspit
- name = "Acid Spit"
- id = "acidspit"
- result = "acidspit"
- required_reagents = list("sacid" = 1, "wine" = 5)
- result_amount = 6
-
- amasec
- name = "Amasec"
- id = "amasec"
- result = "amasec"
- required_reagents = list("iron" = 1, "wine" = 5, "vodka" = 5)
- result_amount = 10
-
- changelingsting
- name = "Changeling Sting"
- id = "changelingsting"
- result = "changelingsting"
- required_reagents = list("screwdrivercocktail" = 1, "limejuice" = 1, "lemonjuice" = 1)
- result_amount = 5
-
- aloe
- name = "Aloe"
- id = "aloe"
- result = "aloe"
- required_reagents = list("cream" = 1, "whiskey" = 1, "watermelonjuice" = 1)
- result_amount = 2
-
- andalusia
- name = "Andalusia"
- id = "andalusia"
- result = "andalusia"
- required_reagents = list("rum" = 1, "whiskey" = 1, "lemonjuice" = 1)
- result_amount = 3
-
- neurotoxin
- name = "Neurotoxin"
- id = "neurotoxin"
- result = "neurotoxin"
- required_reagents = list("gargleblaster" = 1, "ether" = 1)
- result_amount = 2
-
- snowwhite
- name = "Snow White"
- id = "snowwhite"
- result = "snowwhite"
- required_reagents = list("beer" = 1, "lemon_lime" = 1)
- result_amount = 2
-
- irishcarbomb
- name = "Irish Car Bomb"
- id = "irishcarbomb"
- result = "irishcarbomb"
- required_reagents = list("ale" = 1, "irishcream" = 1)
- result_amount = 2
-
- syndicatebomb
- name = "Syndicate Bomb"
- id = "syndicatebomb"
- result = "syndicatebomb"
- required_reagents = list("beer" = 1, "whiskeycola" = 1)
- result_amount = 2
-
- erikasurprise
- name = "Erika Surprise"
- id = "erikasurprise"
- result = "erikasurprise"
- required_reagents = list("ale" = 1, "limejuice" = 1, "whiskey" = 1, "banana" = 1, "ice" = 1)
- result_amount = 5
-
- devilskiss
- name = "Devils Kiss"
- id = "devilskiss"
- result = "devilskiss"
- required_reagents = list("blood" = 1, "kahlua" = 1, "rum" = 1)
- result_amount = 3
-
- hippiesdelight
- name = "Hippies Delight"
- id = "hippiesdelight"
- result = "hippiesdelight"
- required_reagents = list("psilocybin" = 1, "gargleblaster" = 1)
- result_amount = 2
-
- bananahonk
- name = "Banana Honk"
- id = "bananahonk"
- result = "bananahonk"
- required_reagents = list("banana" = 1, "cream" = 1, "sugar" = 1)
- result_amount = 3
-
- silencer
- name = "Silencer"
- id = "silencer"
- result = "silencer"
- required_reagents = list("nothing" = 1, "cream" = 1, "sugar" = 1)
- result_amount = 3
-
- driestmartini
- name = "Driest Martini"
- id = "driestmartini"
- result = "driestmartini"
- required_reagents = list("nothing" = 1, "gin" = 1)
- result_amount = 2
-
- lemonade
- name = "Lemonade"
- id = "lemonade"
- result = "lemonade"
- required_reagents = list("lemonjuice" = 1, "sugar" = 1, "water" = 1)
- result_amount = 3
-
- kiraspecial
- name = "Kira Special"
- id = "kiraspecial"
- result = "kiraspecial"
- required_reagents = list("orangejuice" = 1, "limejuice" = 1, "sodawater" = 1)
- result_amount = 2
-
- brownstar
- name = "Brown Star"
- id = "brownstar"
- result = "brownstar"
- required_reagents = list("orangejuice" = 2, "cola" = 1)
- result_amount = 2
-
- milkshake
- name = "Milkshake"
- id = "milkshake"
- result = "milkshake"
- required_reagents = list("cream" = 1, "ice" = 2, "milk" = 2)
- result_amount = 5
-
- rewriter
- name = "Rewriter"
- id = "rewriter"
- result = "rewriter"
- required_reagents = list("spacemountainwind" = 1, "coffee" = 1)
- result_amount = 2
diff --git a/code/modules/reagents/grenade_launcher.dm b/code/modules/reagents/grenade_launcher.dm
index 3107faaae69..48c467fed02 100644
--- a/code/modules/reagents/grenade_launcher.dm
+++ b/code/modules/reagents/grenade_launcher.dm
@@ -17,57 +17,57 @@
materials = list(MAT_METAL=2000)
- examine()
- set src in view()
- ..()
- if (!(usr in view(2)) && usr!=src.loc) return
- usr << "\icon [name]:"
- usr << "\blue [grenades.len] / [max_grenades] [ammo_name]s."
+/obj/item/weapon/gun/grenadelauncher/examine()
+ set src in view()
+ ..()
+ if (!(usr in view(2)) && usr!=src.loc) return
+ usr << "\icon [name]:"
+ usr << "\blue [grenades.len] / [max_grenades] [ammo_name]s."
- attackby(obj/item/I as obj, mob/user as mob, params)
+/obj/item/weapon/gun/grenadelauncher/attackby(obj/item/I as obj, mob/user as mob, params)
- if((istype(I, ammo_type)))
- if(grenades.len < max_grenades)
- user.drop_item()
- I.loc = src
- grenades += I
- user << "\blue You put the [ammo_name] in the [name]."
- user << "\blue [grenades.len] / [max_grenades] [ammo_name]s."
- else
- usr << "\red The grenade launcher cannot hold more [ammo_name]s."
-
- afterattack(obj/target, mob/user , flag)
-
- if (istype(target, /obj/item/weapon/storage/backpack ))
- return
-
- else if (locate (/obj/structure/table, src.loc))
- return
-
- else if(target == user)
- return
-
- if(grenades.len)
- spawn(0) fire_grenade(target,user)
+ if((istype(I, ammo_type)))
+ if(grenades.len < max_grenades)
+ user.drop_item()
+ I.loc = src
+ grenades += I
+ user << "\blue You put the [ammo_name] in the [name]."
+ user << "\blue [grenades.len] / [max_grenades] [ammo_name]s."
else
- usr << "\red The [name] is empty."
+ usr << "\red The grenade launcher cannot hold more [ammo_name]s."
+
+/obj/item/weapon/gun/grenadelauncher/afterattack(obj/target, mob/user , flag)
+
+ if (istype(target, /obj/item/weapon/storage/backpack ))
+ return
+
+ else if (locate (/obj/structure/table, src.loc))
+ return
+
+ else if(target == user)
+ return
+
+ if(grenades.len)
+ spawn(0) fire_grenade(target,user)
+ else
+ usr << "\red The [name] is empty."
+
+/obj/item/weapon/gun/grenadelauncher/proc/fire_grenade(atom/target, mob/user)
+ for(var/mob/O in viewers(world.view, user))
+ O.show_message(text("\red [] fired a [ammo_name]!", user), 1)
+ user << "\red You fire the [name]!"
+ var/obj/item/weapon/grenade/chem_grenade/F = grenades[1] //Now with less copypasta!
+ grenades -= F
+ F.loc = user.loc
+ F.throw_at(target, 30, 2, user)
+ message_admins("[key_name_admin(user)] fired a [ammo_name] ([F.name]) from a launcher ([name]).")
+ log_game("[key_name_admin(user)] used a [ammo_name] ([name]).")
+ F.active = 1
+ F.icon_state = initial(icon_state) + "_active"
+ playsound(user.loc, 'sound/weapons/armbomb.ogg', 75, 1, -3)
+ spawn(15)
+ F.prime()
- proc
- fire_grenade(atom/target, mob/user)
- for(var/mob/O in viewers(world.view, user))
- O.show_message(text("\red [] fired a [ammo_name]!", user), 1)
- user << "\red You fire the [name]!"
- var/obj/item/weapon/grenade/chem_grenade/F = grenades[1] //Now with less copypasta!
- grenades -= F
- F.loc = user.loc
- F.throw_at(target, 30, 2, user)
- message_admins("[key_name_admin(user)] fired a [ammo_name] ([F.name]) from a launcher ([name]).")
- log_game("[key_name_admin(user)] used a [ammo_name] ([name]).")
- F.active = 1
- F.icon_state = initial(icon_state) + "_active"
- playsound(user.loc, 'sound/weapons/armbomb.ogg', 75, 1, -3)
- spawn(15)
- F.prime()
/obj/item/weapon/gun/grenadelauncher/piecannon
name = "pie cannon"
diff --git a/code/modules/reagents/newchem/medicine.dm b/code/modules/reagents/newchem/medicine.dm
index ea2675034e7..a54072e9bbb 100644
--- a/code/modules/reagents/newchem/medicine.dm
+++ b/code/modules/reagents/newchem/medicine.dm
@@ -825,6 +825,35 @@ datum/reagent/stimulants/reagent_deleted(var/mob/living/M as mob)
..()
return
+/datum/reagent/medicine/stimulative_agent
+ name = "Stimulative Agent"
+ id = "stimulative_agent"
+ description = "An illegal compound that dramatically enhances the body's performance and healing capabilities."
+ color = "#C8A5DC"
+ metabolization_rate = 0.5 * REAGENTS_METABOLISM
+ overdose_threshold = 60
+
+/datum/reagent/medicine/stimulative_agent/on_mob_life(mob/living/M)
+ M.status_flags |= GOTTAGOFAST
+ if(M.health < 50 && M.health > 0)
+ M.adjustOxyLoss(-1*REM)
+ M.adjustToxLoss(-1*REM)
+ M.adjustBruteLoss(-1*REM)
+ M.adjustFireLoss(-1*REM)
+ M.AdjustParalysis(-3)
+ M.AdjustStunned(-3)
+ M.AdjustWeakened(-3)
+ M.adjustStaminaLoss(-5*REM)
+ ..()
+
+/datum/reagent/medicine/stimulative_agent/overdose_process(mob/living/M)
+ if(prob(33))
+ M.adjustStaminaLoss(2.5*REM)
+ M.adjustToxLoss(1*REM)
+ M.losebreath++
+ ..()
+ return
+
datum/reagent/insulin
name = "Insulin"
id = "insulin"
diff --git a/code/modules/reagents/newchem/newchem_procs.dm b/code/modules/reagents/newchem/newchem_procs.dm
index 5c87c0f0044..b2d6edc0995 100644
--- a/code/modules/reagents/newchem/newchem_procs.dm
+++ b/code/modules/reagents/newchem/newchem_procs.dm
@@ -96,7 +96,7 @@ datum/reagents/proc/check_ignoreslow(var/mob/M)
datum/reagents/proc/check_gofast(var/mob/M)
if(istype(M, /mob))
- if(M.reagents.has_reagent("unholywater")||M.reagents.has_reagent("nuka_cola"))
+ if(M.reagents.has_reagent("unholywater")||M.reagents.has_reagent("nuka_cola")||M.reagents.has_reagent("stimulative_agent"))
return 1
else
M.status_flags &= ~GOTTAGOFAST
diff --git a/code/modules/reagents/oldchem/chemical_reaction/_chemical_reaction_base.dm b/code/modules/reagents/oldchem/chemical_reaction/_chemical_reaction_base.dm
new file mode 100644
index 00000000000..6b5656c8dc5
--- /dev/null
+++ b/code/modules/reagents/oldchem/chemical_reaction/_chemical_reaction_base.dm
@@ -0,0 +1,23 @@
+///////////////////////////////////////////////////////////////////////////////////
+/datum/chemical_reaction
+ var/name = null
+ var/id = null
+ var/result = null
+ var/list/required_reagents = list()
+ var/list/required_catalysts = list()
+
+ // Both of these variables are mostly going to be used with slime cores - but if you want to, you can use them for other things
+ var/atom/required_container = null // the container required for the reaction to happen
+ var/required_other = 0 // an integer required for the reaction to happen
+
+ var/result_amount = 0
+ var/secondary = 0 // set to nonzero if secondary reaction
+ var/list/secondary_results = list() //additional reagents produced by the reaction
+ var/min_temp = 0 //Minimum temperature required for the reaction to occur (heat to/above this). min_temp = 0 means no requirement
+ var/max_temp = 9999 //Maximum temperature allowed for the reaction to occur (cool to/below this).
+ var/mix_message = "The solution begins to bubble."
+ var/mix_sound = 'sound/effects/bubbles.ogg'
+ var/no_message = 0
+
+/datum/chemical_reaction/proc/on_reaction(var/datum/reagents/holder, var/created_volume)
+ return
\ No newline at end of file
diff --git a/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_drink.dm b/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_drink.dm
new file mode 100644
index 00000000000..d56cdcf5644
--- /dev/null
+++ b/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_drink.dm
@@ -0,0 +1,590 @@
+/datum/chemical_reaction/
+
+ hot_coco
+ name = "Hot Coco"
+ id = "hot_coco"
+ result = "hot_coco"
+ required_reagents = list("water" = 5, "coco" = 1)
+ result_amount = 5
+
+ chocolate_milk
+ name = "Chocolate Milk"
+ id = "chocolate_milk"
+ result = "chocolate_milk"
+ required_reagents = list("chocolate" = 1, "milk" = 1)
+ result_amount = 2
+ mix_message = "The mixture turns a nice brown color."
+
+ coffee
+ name = "Coffee"
+ id = "coffee"
+ result = "coffee"
+ required_reagents = list("coffeepowder" = 1, "water" = 5)
+ result_amount = 5
+
+ tea
+ name = "Tea"
+ id = "tea"
+ result = "tea"
+ required_reagents = list("teapowder" = 1, "water" = 5)
+ result_amount = 5
+
+
+
+
+ goldschlager
+ name = "Goldschlager"
+ id = "goldschlager"
+ result = "goldschlager"
+ required_reagents = list("vodka" = 10, "gold" = 1)
+ result_amount = 10
+
+ patron
+ name = "Patron"
+ id = "patron"
+ result = "patron"
+ required_reagents = list("tequilla" = 10, "silver" = 1)
+ result_amount = 10
+
+ bilk
+ name = "Bilk"
+ id = "bilk"
+ result = "bilk"
+ required_reagents = list("milk" = 1, "beer" = 1)
+ result_amount = 2
+
+ icetea
+ name = "Iced Tea"
+ id = "icetea"
+ result = "icetea"
+ required_reagents = list("ice" = 1, "tea" = 3)
+ result_amount = 4
+
+ icecoffee
+ name = "Iced Coffee"
+ id = "icecoffee"
+ result = "icecoffee"
+ required_reagents = list("ice" = 1, "coffee" = 3)
+ result_amount = 4
+
+ nuka_cola
+ name = "Nuka Cola"
+ id = "nuka_cola"
+ result = "nuka_cola"
+ required_reagents = list("uranium" = 1, "cola" = 6)
+ result_amount = 6
+
+ moonshine
+ name = "Moonshine"
+ id = "moonshine"
+ result = "moonshine"
+ required_reagents = list("nutriment" = 10)
+ required_catalysts = list("enzyme" = 5)
+ result_amount = 10
+
+ wine
+ name = "Wine"
+ id = "wine"
+ result = "wine"
+ required_reagents = list("berryjuice" = 10)
+ required_catalysts = list("enzyme" = 5)
+ result_amount = 10
+
+ spacebeer
+ name = "Space Beer"
+ id = "spacebeer"
+ result = "beer"
+ required_reagents = list("cornoil" = 10)
+ required_catalysts = list("enzyme" = 5)
+ result_amount = 10
+
+ vodka
+ name = "Vodka"
+ id = "vodka"
+ result = "vodka"
+ required_reagents = list("potato" = 10)
+ required_catalysts = list("enzyme" = 5)
+ result_amount = 10
+ sake
+ name = "Sake"
+ id = "sake"
+ result = "sake"
+ required_reagents = list("rice" = 10,"water" = 5)
+ required_catalysts = list("enzyme" = 5)
+ result_amount = 15
+
+ kahlua
+ name = "Kahlua"
+ id = "kahlua"
+ result = "kahlua"
+ required_reagents = list("coffee" = 5, "sugar" = 5, "rum" = 5)
+ required_catalysts = list("enzyme" = 5)
+ result_amount = 5
+
+ kahluaVodka
+ name = "KahluaVodka"
+ id = "kahlauVodka"
+ result = "kahlua"
+ required_reagents = list("coffee" = 5, "sugar" = 5, "vodka" = 5)
+ required_catalysts = list("enzyme" = 5)
+ result_amount = 5
+ gin_tonic
+ name = "Gin and Tonic"
+ id = "gintonic"
+ result = "gintonic"
+ required_reagents = list("gin" = 2, "tonic" = 1)
+ result_amount = 3
+ mix_message = "The tonic water and gin mix together perfectly."
+
+ cuba_libre
+ name = "Cuba Libre"
+ id = "cubalibre"
+ result = "cubalibre"
+ required_reagents = list("rum" = 2, "cola" = 1)
+ result_amount = 3
+
+ mojito
+ name = "Mojito"
+ id = "mojito"
+ result = "mojito"
+ required_reagents = list("rum" = 1, "sugar" = 1, "limejuice" = 1, "sodawater" = 1)
+ result_amount = 4
+
+ martini
+ name = "Classic Martini"
+ id = "martini"
+ result = "martini"
+ required_reagents = list("gin" = 2, "vermouth" = 1)
+ result_amount = 3
+
+ vodkamartini
+ name = "Vodka Martini"
+ id = "vodkamartini"
+ result = "vodkamartini"
+ required_reagents = list("vodka" = 2, "vermouth" = 1)
+ result_amount = 3
+
+ white_russian
+ name = "White Russian"
+ id = "whiterussian"
+ result = "whiterussian"
+ required_reagents = list("blackrussian" = 3, "cream" = 2)
+ result_amount = 5
+
+ whiskey_cola
+ name = "Whiskey Cola"
+ id = "whiskeycola"
+ result = "whiskeycola"
+ required_reagents = list("whiskey" = 2, "cola" = 1)
+ result_amount = 3
+
+ screwdriver
+ name = "Screwdriver"
+ id = "screwdrivercocktail"
+ result = "screwdrivercocktail"
+ required_reagents = list("vodka" = 2, "orangejuice" = 1)
+ result_amount = 3
+
+ bloody_mary
+ name = "Bloody Mary"
+ id = "bloodymary"
+ result = "bloodymary"
+ required_reagents = list("vodka" = 1, "tomatojuice" = 2, "limejuice" = 1)
+ result_amount = 4
+
+ gargle_blaster
+ name = "Pan-Galactic Gargle Blaster"
+ id = "gargleblaster"
+ result = "gargleblaster"
+ required_reagents = list("vodka" = 1, "gin" = 1, "whiskey" = 1, "cognac" = 1, "limejuice" = 1)
+ result_amount = 5
+
+ brave_bull
+ name = "Brave Bull"
+ id = "bravebull"
+ result = "bravebull"
+ required_reagents = list("tequilla" = 2, "kahlua" = 1)
+ result_amount = 3
+
+ tequilla_sunrise
+ name = "Tequilla Sunrise"
+ id = "tequillasunrise"
+ result = "tequillasunrise"
+ required_reagents = list("tequilla" = 2, "orangejuice" = 1)
+ result_amount = 3
+
+ toxins_special
+ name = "Toxins Special"
+ id = "toxinsspecial"
+ result = "toxinsspecial"
+ required_reagents = list("rum" = 2, "vermouth" = 1, "plasma" = 2)
+ result_amount = 5
+
+ beepsky_smash
+ name = "Beepksy Smash"
+ id = "beepksysmash"
+ result = "beepskysmash"
+ required_reagents = list("limejuice" = 2, "whiskey" = 2, "iron" = 1)
+ result_amount = 4
+
+ doctor_delight
+ name = "The Doctor's Delight"
+ id = "doctordelight"
+ result = "doctorsdelight"
+ required_reagents = list("limejuice" = 1, "tomatojuice" = 1, "orangejuice" = 1, "cream" = 1)
+ result_amount = 5
+
+ irish_cream
+ name = "Irish Cream"
+ id = "irishcream"
+ result = "irishcream"
+ required_reagents = list("whiskey" = 2, "cream" = 1)
+ result_amount = 3
+
+ manly_dorf
+ name = "The Manly Dorf"
+ id = "manlydorf"
+ result = "manlydorf"
+ required_reagents = list ("beer" = 1, "ale" = 2)
+ result_amount = 3
+
+ suicider
+ name = "Suicider"
+ id = "suicider"
+ result = "suicider"
+ required_reagents = list ("vodka" = 1, "cider" = 1, "fuel" = 1, "epinephrine" = 1)
+ result_amount = 4
+ mix_message = "The drinks and chemicals mix together, emitting a potent smell."
+
+ irish_coffee
+ name = "Irish Coffee"
+ id = "irishcoffee"
+ result = "irishcoffee"
+ required_reagents = list("irishcream" = 1, "coffee" = 1)
+ result_amount = 2
+
+ b52
+ name = "B-52"
+ id = "b52"
+ result = "b52"
+ required_reagents = list("irishcream" = 1, "kahlua" = 1, "cognac" = 1)
+ result_amount = 3
+
+ atomicbomb
+ name = "Atomic Bomb"
+ id = "atomicbomb"
+ result = "atomicbomb"
+ required_reagents = list("b52" = 10, "uranium" = 1)
+ result_amount = 10
+
+ margarita
+ name = "Margarita"
+ id = "margarita"
+ result = "margarita"
+ required_reagents = list("tequilla" = 2, "limejuice" = 1)
+ result_amount = 3
+
+ longislandicedtea
+ name = "Long Island Iced Tea"
+ id = "longislandicedtea"
+ result = "longislandicedtea"
+ required_reagents = list("vodka" = 1, "gin" = 1, "tequilla" = 1, "cubalibre" = 1)
+ result_amount = 4
+
+ threemileisland
+ name = "Three Mile Island Iced Tea"
+ id = "threemileisland"
+ result = "threemileisland"
+ required_reagents = list("longislandicedtea" = 10, "uranium" = 1)
+ result_amount = 10
+
+ whiskeysoda
+ name = "Whiskey Soda"
+ id = "whiskeysoda"
+ result = "whiskeysoda"
+ required_reagents = list("whiskey" = 2, "sodawater" = 1)
+ result_amount = 3
+
+ black_russian
+ name = "Black Russian"
+ id = "blackrussian"
+ result = "blackrussian"
+ required_reagents = list("vodka" = 3, "kahlua" = 2)
+ result_amount = 5
+
+ manhattan
+ name = "Manhattan"
+ id = "manhattan"
+ result = "manhattan"
+ required_reagents = list("whiskey" = 2, "vermouth" = 1)
+ result_amount = 3
+
+ manhattan_proj
+ name = "Manhattan Project"
+ id = "manhattan_proj"
+ result = "manhattan_proj"
+ required_reagents = list("manhattan" = 10, "uranium" = 1)
+ result_amount = 10
+
+ vodka_tonic
+ name = "Vodka and Tonic"
+ id = "vodkatonic"
+ result = "vodkatonic"
+ required_reagents = list("vodka" = 2, "tonic" = 1)
+ result_amount = 3
+
+ gin_fizz
+ name = "Gin Fizz"
+ id = "ginfizz"
+ result = "ginfizz"
+ required_reagents = list("gin" = 2, "sodawater" = 1, "limejuice" = 1)
+ result_amount = 4
+
+ 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
+
+ singulo
+ name = "Singulo"
+ id = "singulo"
+ result = "singulo"
+ required_reagents = list("vodka" = 5, "radium" = 1, "wine" = 5)
+ result_amount = 10
+
+ alliescocktail
+ name = "Allies Cocktail"
+ id = "alliescocktail"
+ result = "alliescocktail"
+ required_reagents = list("martini" = 1, "vodka" = 1)
+ result_amount = 2
+
+ demonsblood
+ name = "Demons Blood"
+ id = "demonsblood"
+ result = "demonsblood"
+ required_reagents = list("rum" = 1, "spacemountainwind" = 1, "blood" = 1, "dr_gibb" = 1)
+ result_amount = 4
+
+ booger
+ name = "Booger"
+ id = "booger"
+ result = "booger"
+ required_reagents = list("cream" = 1, "banana" = 1, "rum" = 1, "watermelonjuice" = 1)
+ result_amount = 4
+
+ antifreeze
+ name = "Anti-freeze"
+ id = "antifreeze"
+ result = "antifreeze"
+ required_reagents = list("vodka" = 2, "cream" = 1, "ice" = 1)
+ result_amount = 4
+
+ barefoot
+ name = "Barefoot"
+ id = "barefoot"
+ result = "barefoot"
+ required_reagents = list("berryjuice" = 1, "cream" = 1, "vermouth" = 1)
+ result_amount = 3
+
+
+////DRINKS THAT REQUIRED IMPROVED SPRITES BELOW:: -Agouri/////
+
+ sbiten
+ name = "Sbiten"
+ id = "sbiten"
+ result = "sbiten"
+ required_reagents = list("vodka" = 10, "capsaicin" = 1)
+ result_amount = 10
+
+ red_mead
+ name = "Red Mead"
+ id = "red_mead"
+ result = "red_mead"
+ required_reagents = list("blood" = 1, "mead" = 1)
+ result_amount = 2
+
+ mead
+ name = "Mead"
+ id = "mead"
+ result = "mead"
+ required_reagents = list("sugar" = 1, "water" = 1)
+ required_catalysts = list("enzyme" = 5)
+ result_amount = 2
+
+ iced_beer
+ name = "Iced Beer"
+ id = "iced_beer"
+ result = "iced_beer"
+ required_reagents = list("beer" = 10, "frostoil" = 1)
+ result_amount = 10
+
+ iced_beer2
+ name = "Iced Beer"
+ id = "iced_beer"
+ result = "iced_beer"
+ required_reagents = list("beer" = 5, "ice" = 1)
+ result_amount = 6
+
+ grog
+ name = "Grog"
+ id = "grog"
+ result = "grog"
+ required_reagents = list("rum" = 1, "water" = 1)
+ result_amount = 2
+
+ soy_latte
+ name = "Soy Latte"
+ id = "soy_latte"
+ result = "soy_latte"
+ required_reagents = list("coffee" = 1, "soymilk" = 1)
+ result_amount = 2
+
+ cafe_latte
+ name = "Cafe Latte"
+ id = "cafe_latte"
+ result = "cafe_latte"
+ required_reagents = list("coffee" = 1, "milk" = 1)
+ result_amount = 2
+
+ acidspit
+ name = "Acid Spit"
+ id = "acidspit"
+ result = "acidspit"
+ required_reagents = list("sacid" = 1, "wine" = 5)
+ result_amount = 6
+
+ amasec
+ name = "Amasec"
+ id = "amasec"
+ result = "amasec"
+ required_reagents = list("iron" = 1, "wine" = 5, "vodka" = 5)
+ result_amount = 10
+
+ changelingsting
+ name = "Changeling Sting"
+ id = "changelingsting"
+ result = "changelingsting"
+ required_reagents = list("screwdrivercocktail" = 1, "limejuice" = 1, "lemonjuice" = 1)
+ result_amount = 5
+
+ aloe
+ name = "Aloe"
+ id = "aloe"
+ result = "aloe"
+ required_reagents = list("cream" = 1, "whiskey" = 1, "watermelonjuice" = 1)
+ result_amount = 2
+
+ andalusia
+ name = "Andalusia"
+ id = "andalusia"
+ result = "andalusia"
+ required_reagents = list("rum" = 1, "whiskey" = 1, "lemonjuice" = 1)
+ result_amount = 3
+
+ neurotoxin
+ name = "Neurotoxin"
+ id = "neurotoxin"
+ result = "neurotoxin"
+ required_reagents = list("gargleblaster" = 1, "ether" = 1)
+ result_amount = 2
+
+ snowwhite
+ name = "Snow White"
+ id = "snowwhite"
+ result = "snowwhite"
+ required_reagents = list("beer" = 1, "lemon_lime" = 1)
+ result_amount = 2
+
+ irishcarbomb
+ name = "Irish Car Bomb"
+ id = "irishcarbomb"
+ result = "irishcarbomb"
+ required_reagents = list("ale" = 1, "irishcream" = 1)
+ result_amount = 2
+
+ syndicatebomb
+ name = "Syndicate Bomb"
+ id = "syndicatebomb"
+ result = "syndicatebomb"
+ required_reagents = list("beer" = 1, "whiskeycola" = 1)
+ result_amount = 2
+
+ erikasurprise
+ name = "Erika Surprise"
+ id = "erikasurprise"
+ result = "erikasurprise"
+ required_reagents = list("ale" = 1, "limejuice" = 1, "whiskey" = 1, "banana" = 1, "ice" = 1)
+ result_amount = 5
+
+ devilskiss
+ name = "Devils Kiss"
+ id = "devilskiss"
+ result = "devilskiss"
+ required_reagents = list("blood" = 1, "kahlua" = 1, "rum" = 1)
+ result_amount = 3
+
+ hippiesdelight
+ name = "Hippies Delight"
+ id = "hippiesdelight"
+ result = "hippiesdelight"
+ required_reagents = list("psilocybin" = 1, "gargleblaster" = 1)
+ result_amount = 2
+
+ bananahonk
+ name = "Banana Honk"
+ id = "bananahonk"
+ result = "bananahonk"
+ required_reagents = list("banana" = 1, "cream" = 1, "sugar" = 1)
+ result_amount = 3
+
+ silencer
+ name = "Silencer"
+ id = "silencer"
+ result = "silencer"
+ required_reagents = list("nothing" = 1, "cream" = 1, "sugar" = 1)
+ result_amount = 3
+
+ driestmartini
+ name = "Driest Martini"
+ id = "driestmartini"
+ result = "driestmartini"
+ required_reagents = list("nothing" = 1, "gin" = 1)
+ result_amount = 2
+
+ lemonade
+ name = "Lemonade"
+ id = "lemonade"
+ result = "lemonade"
+ required_reagents = list("lemonjuice" = 1, "sugar" = 1, "water" = 1)
+ result_amount = 3
+
+ kiraspecial
+ name = "Kira Special"
+ id = "kiraspecial"
+ result = "kiraspecial"
+ required_reagents = list("orangejuice" = 1, "limejuice" = 1, "sodawater" = 1)
+ result_amount = 2
+
+ brownstar
+ name = "Brown Star"
+ id = "brownstar"
+ result = "brownstar"
+ required_reagents = list("orangejuice" = 2, "cola" = 1)
+ result_amount = 2
+
+ milkshake
+ name = "Milkshake"
+ id = "milkshake"
+ result = "milkshake"
+ required_reagents = list("cream" = 1, "ice" = 2, "milk" = 2)
+ result_amount = 5
+
+ rewriter
+ name = "Rewriter"
+ id = "rewriter"
+ result = "rewriter"
+ required_reagents = list("spacemountainwind" = 1, "coffee" = 1)
+ result_amount = 2
\ No newline at end of file
diff --git a/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_food.dm b/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_food.dm
new file mode 100644
index 00000000000..146dc1da95c
--- /dev/null
+++ b/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_food.dm
@@ -0,0 +1,108 @@
+/datum/chemical_reaction/
+
+ tofu
+ name = "Tofu"
+ id = "tofu"
+ result = null
+ required_reagents = list("soymilk" = 10)
+ required_catalysts = list("enzyme" = 5)
+ result_amount = 1
+ 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
+
+ chocolate_bar
+ name = "Chocolate Bar"
+ id = "chocolate_bar"
+ result = null
+ required_reagents = list("soymilk" = 2, "coco" = 2, "sugar" = 2)
+ result_amount = 1
+ 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
+
+ chocolate_bar2
+ name = "Chocolate Bar"
+ id = "chocolate_bar"
+ result = null
+ required_reagents = list("milk" = 2, "coco" = 2, "sugar" = 2)
+ result_amount = 1
+ 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
+
+
+ soysauce
+ name = "Soy Sauce"
+ id = "soysauce"
+ result = "soysauce"
+ required_reagents = list("soymilk" = 2, "flour" = 1, "sodiumchloride" = 1, "water" = 3)
+ result_amount = 7
+
+ cheesewheel
+ name = "Cheesewheel"
+ id = "cheesewheel"
+ result = null
+ required_reagents = list("milk" = 40)
+ required_catalysts = list("enzyme" = 5)
+ result_amount = 1
+ on_reaction(var/datum/reagents/holder, var/created_volume)
+ var/location = get_turf(holder.my_atom)
+ new /obj/item/weapon/reagent_containers/food/snacks/sliceable/cheesewheel(location)
+ return
+
+ syntiflesh
+ name = "Syntiflesh"
+ id = "syntiflesh"
+ result = null
+ required_reagents = list("blood" = 5, "cryoxadone" = 1)
+ result_amount = 1
+ on_reaction(var/datum/reagents/holder, var/created_volume)
+ var/location = get_turf(holder.my_atom)
+ new /obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh(location)
+ return
+
+ hot_ramen
+ name = "Hot Ramen"
+ id = "hot_ramen"
+ result = "hot_ramen"
+ required_reagents = list("water" = 1, "dry_ramen" = 3)
+ result_amount = 3
+
+ hell_ramen
+ name = "Hell Ramen"
+ id = "hell_ramen"
+ result = "hell_ramen"
+ required_reagents = list("capsaicin" = 1, "hot_ramen" = 6)
+ result_amount = 6
+
+ doughball
+ name = "Ball of dough"
+ id = "dough_ball"
+ result = "dough_ball"
+ required_reagents = list("flour" = 15, "water" = 5)
+ required_catalysts = list("enzyme" = 5)
+
+ sodiumchloride
+ name = "Sodium Chloride"
+ id = "sodiumchloride"
+ result = "sodiumchloride"
+ required_reagents = list("sodium" = 1, "chlorine" = 1, "water" = 1)
+ result_amount = 3
+ mix_message = "The solution crystallizes with a brief flare of light."
+
+ ice
+ name = "Ice"
+ id = "ice"
+ result = "ice"
+ required_reagents = list("water" = 1)
+ result_amount = 1
+ max_temp = 273
+ mix_message = "Ice forms as the water freezes."
+ mix_sound = null
\ No newline at end of file
diff --git a/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_harm.dm b/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_harm.dm
new file mode 100644
index 00000000000..4ec4c1bb9e4
--- /dev/null
+++ b/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_harm.dm
@@ -0,0 +1,76 @@
+//Anything for harm or hostile intents go here (explosions, EMPs, thermite, mutagen)
+/datum/chemical_reaction
+
+ explosion_potassium
+ name = "Explosion"
+ id = "explosion_potassium"
+ result = null
+ required_reagents = list("water" = 1, "potassium" = 1)
+ result_amount = 2
+ mix_message = "The mixture explodes!"
+
+ 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)
+ e.start()
+ holder.clear_reagents()
+ return
+
+ 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
+
+ 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 / 14), 1)
+ holder.clear_reagents()
+ return
+
+ mutagen
+ name = "Unstable mutagen"
+ id = "mutagen"
+ result = "mutagen"
+ required_reagents = list("radium" = 1, "plasma" = 1, "chlorine" = 1)
+ result_amount = 3
+ mix_message = "The substance turns neon green and bubbles unnervingly."
+
+ thermite
+ name = "Thermite"
+ id = "thermite"
+ result = "thermite"
+ required_reagents = list("aluminum" = 1, "iron" = 1, "oxygen" = 1)
+ result_amount = 3
+
+ glycerol
+ name = "Glycerol"
+ id = "glycerol"
+ result = "glycerol"
+ required_reagents = list("cornoil" = 3, "sacid" = 1)
+ result_amount = 1
+
+ nitroglycerin
+ name = "Nitroglycerin"
+ id = "nitroglycerin"
+ result = "nitroglycerin"
+ required_reagents = list("glycerol" = 1, "facid" = 1, "sacid" = 1)
+ result_amount = 2
+ 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)
+ e.start()
+
+ holder.clear_reagents()
+ return
+
+ condensedcapsaicin
+ name = "Condensed Capsaicin"
+ id = "condensedcapsaicin"
+ result = "condensedcapsaicin"
+ required_reagents = list("capsaicin" = 2)
+ required_catalysts = list("plasma" = 5)
+ result_amount = 1
\ No newline at end of file
diff --git a/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_med.dm b/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_med.dm
new file mode 100644
index 00000000000..02e1f4a65cd
--- /dev/null
+++ b/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_med.dm
@@ -0,0 +1,98 @@
+/datum/chemical_reaction/
+
+ hydrocodone
+ name = "Hydrocodone"
+ id = "hydrocodone"
+ result = "hydrocodone"
+ required_reagents = list("morphine" = 1, "sacid" = 1, "water" = 1, "oil" = 1)
+ result_amount = 2
+
+ mitocholide
+ name = "mitocholide"
+ id = "mitocholide"
+ result = "mitocholide"
+ required_reagents = list("synthflesh" = 1, "cryoxadone" = 1, "plasma" = 1)
+ result_amount = 3
+
+ cryoxadone
+ name = "Cryoxadone"
+ id = "cryoxadone"
+ result = "cryoxadone"
+ required_reagents = list("cryostylane" = 1, "plasma" = 1, "acetone" = 1, "mutagen" = 1)
+ result_amount = 4
+ mix_message = "The solution bubbles softly."
+
+ spaceacillin
+ name = "Spaceacillin"
+ id = "spaceacillin"
+ result = "spaceacillin"
+ required_reagents = list("fungus" = 1, "ethanol" = 1)
+ result_amount = 2
+ mix_message = "The solvent extracts an antibiotic compound from the fungus."
+
+ audioline
+ name = "Audioline"
+ id = "audioline"
+ result = "audioline"
+ required_reagents = list("spaceacillin" = 1, "salglu_solution" = 1, "epinephrine" = 1)
+ result_amount = 3
+
+ rezadone
+ name = "Rezadone"
+ id = "rezadone"
+ result = "rezadone"
+ required_reagents = list("carpotoxin" = 1, "spaceacillin" = 1, "copper" = 1)
+ result_amount = 3
+
+ virus_food
+ name = "Virus Food"
+ id = "virusfood"
+ result = "virusfood"
+ required_reagents = list("water" = 1, "milk" = 1, "oxygen" = 1)
+ result_amount = 3
+/*
+ mix_virus
+ name = "Mix Virus"
+ id = "mixvirus"
+ result = "blood"
+ required_reagents = list("virusfood" = 5)
+ required_catalysts = list("blood")
+ var/level = 2
+
+ on_reaction(var/datum/reagents/holder, var/created_volume)
+
+ var/datum/reagent/blood/B = locate(/datum/reagent/blood) in holder.reagent_list
+ if(B && B.data)
+ var/datum/disease/advance/D = locate(/datum/disease/advance) in B.data["viruses"]
+ if(D)
+ D.Evolve(level - rand(0, 1))
+
+
+ mix_virus_2
+
+ name = "Mix Virus 2"
+ id = "mixvirus2"
+ required_reagents = list("mutagen" = 5)
+ level = 4
+
+ rem_virus
+
+ name = "Devolve Virus"
+ id = "remvirus"
+ required_reagents = list("synaptizine" = 5)
+
+ on_reaction(var/datum/reagents/holder, var/created_volume)
+
+ var/datum/reagent/blood/B = locate(/datum/reagent/blood) in holder.reagent_list
+ if(B && B.data)
+ var/datum/disease/advance/D = locate(/datum/disease/advance) in B.data["viruses"]
+ if(D)
+ D.Devolve()
+*/
+
+ sterilizine
+ name = "Sterilizine"
+ id = "sterilizine"
+ result = "sterilizine"
+ required_reagents = list("ethanol" = 1, "charcoal" = 1, "chlorine" = 1)
+ result_amount = 3
\ No newline at end of file
diff --git a/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_misc.dm b/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_misc.dm
new file mode 100644
index 00000000000..f884ef6cb63
--- /dev/null
+++ b/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_misc.dm
@@ -0,0 +1,199 @@
+/datum/chemical_reaction/
+// foam and foam precursor
+
+ surfactant
+ name = "Foam surfactant"
+ id = "foam surfactant"
+ result = "fluorosurfactant"
+ required_reagents = list("fluorine" = 2, "carbon" = 2, "sacid" = 1)
+ result_amount = 5
+ mix_message = "A head of foam results from the mixture's constant fizzing."
+
+
+ foam
+ name = "Foam"
+ id = "foam"
+ result = null
+ required_reagents = list("fluorosurfactant" = 1, "water" = 1)
+ result_amount = 2
+
+ 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 << "\red The solution violently bubbles!"
+
+ location = get_turf(holder.my_atom)
+
+ for(var/mob/M in viewers(5, location))
+ M << "\red The solution spews out foam!"
+
+ //world << "Holder volume is [holder.total_volume]"
+ //for(var/datum/reagent/R in holder.reagent_list)
+ // world << "[R.name] = [R.volume]"
+
+ var/datum/effect/effect/system/foam_spread/s = new()
+ s.set_up(created_volume, location, holder, 0)
+ s.start()
+ holder.clear_reagents()
+ return
+
+ metalfoam
+ name = "Metal Foam"
+ id = "metalfoam"
+ result = null
+ required_reagents = list("aluminum" = 3, "fluorosurfactant" = 1, "sacid" = 1)
+ result_amount = 5
+
+ 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 << "\red The solution spews out a metalic foam!"
+
+ var/datum/effect/effect/system/foam_spread/s = new()
+ s.set_up(created_volume, location, holder, 1)
+ s.start()
+ return
+
+ ironfoam
+ name = "Iron Foam"
+ id = "ironlfoam"
+ result = null
+ required_reagents = list("iron" = 3, "fluorosurfactant" = 1, "sacid" = 1)
+ result_amount = 5
+
+ 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 << "\red The solution spews out a metalic foam!"
+
+ var/datum/effect/effect/system/foam_spread/s = new()
+ s.set_up(created_volume, location, holder, 2)
+ s.start()
+ return
+
+ // Synthesizing these three chemicals is pretty complex in real life, but fuck it, it's just a game!
+ ammonia
+ name = "Ammonia"
+ id = "ammonia"
+ result = "ammonia"
+ required_reagents = list("hydrogen" = 3, "nitrogen" = 1)
+ result_amount = 3
+ mix_message = "The mixture bubbles, emitting an acrid reek."
+
+ diethylamine
+ name = "Diethylamine"
+ id = "diethylamine"
+ result = "diethylamine"
+ required_reagents = list ("ammonia" = 1, "ethanol" = 1)
+ result_amount = 2
+ min_temp = 374
+ mix_message = "A horrible smell pours forth from the mixture."
+
+ space_cleaner
+ name = "Space cleaner"
+ id = "cleaner"
+ result = "cleaner"
+ required_reagents = list("ammonia" = 1, "water" = 1, "ethanol" = 1)
+ result_amount = 3
+ mix_message = "Ick, this stuff really stinks. Sure does make the container sparkle though!"
+
+ sulfuric_acid
+ name = "Sulfuric Acid"
+ id = "sacid"
+ result = "sacid"
+ required_reagents = list("sulfur" = 1, "oxygen" = 1, "hydrogen" = 1)
+ result_amount = 2
+ mix_message = "The mixture gives off a sharp acidic tang."
+
+///////Changeling Blood Test/////////////
+/*
+ changeling_test
+ name = "Changeling blood test"
+ id = "changelingblood"
+ result = "blood"
+ required_reagents = list("blood" = 5)
+ required_catalysts = list("fuel")
+ result_amount = 1 //Needs this in order to check the donor, as the data var in the reacted blood gets transferred.
+ on_reaction(var/datum/reagents/holder, var/created_volume)
+ if(!holder.reagent_list) //reagent_list is not null
+ return
+ var/datum/reagent/blood/B = locate() in holder.reagent_list
+ if(!B) //B is not null
+ return
+ var/mob/living/carbon/human/H = B.data["donor"]
+ if(!H) //H is not null.
+ return
+ if(H.mind && H.mind.changeling) //Checks if H, the blood donor is a ling.
+ for(var/mob/M in viewers(get_turf(holder.my_atom), null))
+ M.show_message( "The blood writhes and wriggles and sizzles away from the container!", 1, "You hear bubbling and sizzling.", 2)
+ else
+ for(var/mob/M in viewers(get_turf(holder.my_atom), null))
+ M.show_message( "The blood seems to break apart in the fuel.", 1)
+ holder.del_reagent("blood")
+ return
+*/
+
+ plastication
+ name = "Plastic"
+ id = "solidplastic"
+ result = null
+ required_reagents = list("facid" = 10, "plasticide" = 20)
+ result_amount = 1
+ on_reaction(var/datum/reagents/holder)
+ var/obj/item/stack/sheet/metal/M = new /obj/item/stack/sheet/mineral/plastic
+ M.amount = 10
+ M.loc = get_turf(holder.my_atom)
+ return
+
+
+
+//Not really misc chems, but not enough to deserve their own file
+/*
+ silicate
+ name = "Silicate"
+ id = "silicate"
+ result = "silicate"
+ required_reagents = list("aluminum" = 1, "silicon" = 1, "oxygen" = 1)
+ result_amount = 3
+*/
+
+ space_drugs
+ name = "Space Drugs"
+ id = "space_drugs"
+ result = "space_drugs"
+ required_reagents = list("mercury" = 1, "sugar" = 1, "lithium" = 1)
+ result_amount = 3
+ mix_message = "Slightly dizzying fumes drift from the solution."
+
+ lube
+ name = "Space Lube"
+ id = "lube"
+ result = "lube"
+ required_reagents = list("water" = 1, "silicon" = 1, "oxygen" = 1)
+ result_amount = 3
+ mix_message = "The substance turns a striking cyan and becomes oily."
+
+ holy_water
+ name = "Holy Water"
+ id = "holywater"
+ result = "holywater"
+ required_reagents = list("water" = 1, "mercury" = 1, "wine" = 1)
+ result_amount = 3
+ mix_message = "The water somehow seems purified. Or maybe defiled."
+
+
+ lsd
+ name = "Lysergic acid diethylamide"
+ id = "lsd"
+ result = "lsd"
+ required_reagents = list("diethylamine" = 1, "fungus" = 1)
+ result_amount = 3
+ mix_message = "The mixture turns a rather unassuming color and settles."
\ No newline at end of file
diff --git a/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_slime.dm b/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_slime.dm
new file mode 100644
index 00000000000..a1d8b033672
--- /dev/null
+++ b/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_slime.dm
@@ -0,0 +1,487 @@
+/////////////////////////////////////////////NEW SLIME CORE REACTIONS/////////////////////////////////////////////
+
+//Grey
+/datum/chemical_reaction/
+
+ slimespawn
+ name = "Slime Spawn"
+ id = "m_spawn"
+ result = null
+ required_reagents = list("plasma" = 5)
+ result_amount = 1
+ required_container = /obj/item/slime_extract/grey
+ required_other = 1
+
+ on_reaction(var/datum/reagents/holder)
+ for(var/mob/O in viewers(get_turf(holder.my_atom), null))
+ O.show_message(text("\red Infused with plasma, the core begins to quiver and grow, and soon a new baby slime emerges from it!"), 1)
+ var/mob/living/carbon/slime/S = new /mob/living/carbon/slime
+ S.loc = get_turf(holder.my_atom)
+
+
+ slimeinaprov
+ name = "Slime Epinephrine"
+ id = "m_epinephrine"
+ result = "epinephrine"
+ required_reagents = list("water" = 5)
+ result_amount = 3
+ required_other = 1
+ required_container = /obj/item/slime_extract/grey
+
+ on_reaction(var/datum/reagents/holder)
+ feedback_add_details("slime_cores_used","[replacetext(name," ","_")]")
+
+
+ slimemonkey
+ name = "Slime Monkey"
+ id = "m_monkey"
+ result = null
+ required_reagents = list("blood" = 5)
+ result_amount = 1
+ required_container = /obj/item/slime_extract/grey
+ required_other = 1
+ on_reaction(var/datum/reagents/holder)
+ for(var/i = 1, i <= 3, i++)
+ var /obj/item/weapon/reagent_containers/food/snacks/monkeycube/M = new /obj/item/weapon/reagent_containers/food/snacks/monkeycube
+ M.loc = get_turf(holder.my_atom)
+
+//Green
+ slimemutate
+ name = "Mutation Toxin"
+ id = "mutationtoxin"
+ result = "mutationtoxin"
+ required_reagents = list("plasma" = 5)
+ result_amount = 1
+ required_other = 1
+ required_container = /obj/item/slime_extract/green
+
+//Metal
+ slimemetal
+ name = "Slime Metal"
+ id = "m_metal"
+ result = null
+ required_reagents = list("plasma" = 5)
+ result_amount = 1
+ required_container = /obj/item/slime_extract/metal
+ required_other = 1
+ on_reaction(var/datum/reagents/holder)
+ var/obj/item/stack/sheet/metal/M = new /obj/item/stack/sheet/metal
+ M.amount = 15
+ M.loc = get_turf(holder.my_atom)
+ var/obj/item/stack/sheet/plasteel/P = new /obj/item/stack/sheet/plasteel
+ P.amount = 5
+ P.loc = get_turf(holder.my_atom)
+
+//Gold
+ slimecrit
+ name = "Slime Crit"
+ id = "m_tele"
+ result = null
+ required_reagents = list("plasma" = 5)
+ result_amount = 1
+ required_container = /obj/item/slime_extract/gold
+ required_other = 1
+ on_reaction(var/datum/reagents/holder)
+
+ var/blocked = blocked_mobs //global variable of blocked mobs
+
+ var/list/critters = typesof(/mob/living/simple_animal/hostile) - blocked // list of possible hostile mobs
+
+ playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1)
+
+ for(var/mob/living/carbon/human/M in viewers(get_turf(holder.my_atom), null))
+ if(M:eyecheck() <= 0)
+ flick("e_flash", M.flash)
+
+ for(var/i = 1, i <= 5, i++)
+ var/chosen = pick(critters)
+ var/mob/living/simple_animal/hostile/C = new chosen
+ C.faction |= "slimesummon"
+ C.loc = get_turf(holder.my_atom)
+ if(prob(50))
+ for(var/j = 1, j <= rand(1, 3), j++)
+ step(C, pick(NORTH,SOUTH,EAST,WEST))
+// for(var/mob/O in viewers(get_turf(holder.my_atom), null))
+// O.show_message(text("\red The slime core fizzles disappointingly,"), 1)
+
+
+ slimecritlesser
+ name = "Slime Crit Lesser"
+ id = "m_tele3"
+ result = null
+ required_reagents = list("blood" = 1)
+ result_amount = 1
+ required_container = /obj/item/slime_extract/gold
+ required_other = 1
+ on_reaction(var/datum/reagents/holder)
+ feedback_add_details("slime_cores_used","[replacetext(name," ","_")]")
+ for(var/mob/O in viewers(get_turf(holder.my_atom), null))
+ O.show_message(text("The slime extract begins to vibrate violently!"), 1)
+ spawn(50)
+
+ if(holder && holder.my_atom)
+
+ var/blocked = blocked_mobs
+
+ var/list/critters = typesof(/mob/living/simple_animal/hostile) - blocked // list of possible hostile mobs
+
+ playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1)
+
+ for(var/mob/living/carbon/human/M in viewers(get_turf(holder.my_atom), null))
+ if(M:eyecheck() <= 0)
+ flick("e_flash", M.flash)
+
+ var/chosen = pick(critters)
+ var/mob/living/simple_animal/hostile/C = new chosen
+ C.faction |= "neutral"
+ C.loc = get_turf(holder.my_atom)
+
+//Silver
+ slimebork
+ name = "Slime Bork"
+ id = "m_tele2"
+ result = null
+ required_reagents = list("plasma" = 5)
+ result_amount = 1
+ required_container = /obj/item/slime_extract/silver
+ required_other = 1
+ on_reaction(var/datum/reagents/holder)
+
+ var/list/borks = subtypesof(/obj/item/weapon/reagent_containers/food/snacks)
+ // BORK BORK BORK
+
+ playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1)
+
+ for(var/mob/living/carbon/human/M in viewers(get_turf(holder.my_atom), null))
+ if(M:eyecheck() <= 0)
+ flick("e_flash", M.flash)
+
+ for(var/i = 1, i <= 4 + rand(1,2), i++)
+ var/chosen = pick(borks)
+ var/obj/B = new chosen
+ if(B)
+ B.loc = get_turf(holder.my_atom)
+ if(prob(50))
+ for(var/j = 1, j <= rand(1, 3), j++)
+ step(B, pick(NORTH,SOUTH,EAST,WEST))
+ slimedrinks
+ name = "Slime Drinks"
+ id = "m_tele3"
+ result = null
+ required_reagents = list("water" = 5)
+ result_amount = 1
+ required_container = /obj/item/slime_extract/silver
+ required_other = 1
+ on_reaction(var/datum/reagents/holder)
+
+ var/list/borks = subtypesof(/obj/item/weapon/reagent_containers/food/drinks)
+ // BORK BORK BORK
+
+ playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1)
+
+ for(var/mob/living/carbon/human/M in viewers(get_turf(holder.my_atom), null))
+ if(M:eyecheck() <= 0)
+ flick("e_flash", M.flash)
+
+ for(var/i = 1, i <= 4 + rand(1,2), i++)
+ var/chosen = pick(borks)
+ var/obj/B = new chosen
+ if(B)
+ B.loc = get_turf(holder.my_atom)
+ if(prob(50))
+ for(var/j = 1, j <= rand(1, 3), j++)
+ step(B, pick(NORTH,SOUTH,EAST,WEST))
+
+
+//Blue
+ slimefrost
+ name = "Slime Frost Oil"
+ id = "m_frostoil"
+ result = "frostoil"
+ required_reagents = list("plasma" = 5)
+ result_amount = 10
+ required_container = /obj/item/slime_extract/blue
+ required_other = 1
+//Dark Blue
+ slimefreeze
+ name = "Slime Freeze"
+ id = "m_freeze"
+ result = null
+ required_reagents = list("plasma" = 5)
+ result_amount = 1
+ required_container = /obj/item/slime_extract/darkblue
+ required_other = 1
+ on_reaction(var/datum/reagents/holder)
+ for(var/mob/O in viewers(get_turf(holder.my_atom), null))
+ O.show_message(text("\red The slime extract begins to vibrate violently !"), 1)
+ sleep(50)
+ playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1)
+ for(var/mob/living/M in range (get_turf(holder.my_atom), 7))
+ M.bodytemperature -= 140
+ M << "\blue You feel a chill!"
+
+//Orange
+ slimecasp
+ name = "Slime Capsaicin Oil"
+ id = "m_capsaicinoil"
+ result = "capsaicin"
+ required_reagents = list("blood" = 5)
+ result_amount = 10
+ required_container = /obj/item/slime_extract/orange
+ required_other = 1
+
+ slimefire
+ name = "Slime fire"
+ id = "m_fire"
+ result = null
+ required_reagents = list("plasma" = 5)
+ result_amount = 1
+ required_container = /obj/item/slime_extract/orange
+ required_other = 1
+ on_reaction(var/datum/reagents/holder)
+ feedback_add_details("slime_cores_used","[replacetext(name," ","_")]")
+ for(var/mob/O in viewers(get_turf(holder.my_atom), null))
+ O.show_message(text("\red The slime extract begins to vibrate violently !"), 1)
+ sleep(50)
+ var/turf/simulated/T = get_turf(holder.my_atom)
+ if(istype(T))
+ T.atmos_spawn_air(SPAWN_HEAT | SPAWN_TOXINS, 50)
+
+//Yellow
+ slimeoverload
+ name = "Slime EMP"
+ id = "m_emp"
+ result = null
+ required_reagents = list("blood" = 5)
+ result_amount = 1
+ required_container = /obj/item/slime_extract/yellow
+ required_other = 1
+ on_reaction(var/datum/reagents/holder, var/created_volume)
+ empulse(get_turf(holder.my_atom), 3, 7)
+
+
+ slimecell
+ name = "Slime Powercell"
+ id = "m_cell"
+ result = null
+ required_reagents = list("plasma" = 5)
+ result_amount = 1
+ required_container = /obj/item/slime_extract/yellow
+ required_other = 1
+ on_reaction(var/datum/reagents/holder, var/created_volume)
+ var/obj/item/weapon/stock_parts/cell/slime/P = new /obj/item/weapon/stock_parts/cell/slime
+ P.loc = get_turf(holder.my_atom)
+
+ slimeglow
+ name = "Slime Glow"
+ id = "m_glow"
+ result = null
+ required_reagents = list("water" = 5)
+ result_amount = 1
+ required_container = /obj/item/slime_extract/yellow
+ required_other = 1
+ on_reaction(var/datum/reagents/holder)
+ for(var/mob/O in viewers(get_turf(holder.my_atom), null))
+ O.show_message(text("\red The contents of the slime core harden and begin to emit a warm, bright light."), 1)
+ var/obj/item/device/flashlight/slime/F = new /obj/item/device/flashlight/slime
+ F.loc = get_turf(holder.my_atom)
+
+//Purple
+
+ slimepsteroid
+ name = "Slime Steroid"
+ id = "m_steroid"
+ result = null
+ required_reagents = list("plasma" = 5)
+ result_amount = 1
+ required_container = /obj/item/slime_extract/purple
+ required_other = 1
+ on_reaction(var/datum/reagents/holder)
+ var/obj/item/weapon/slimesteroid/P = new /obj/item/weapon/slimesteroid
+ P.loc = get_turf(holder.my_atom)
+
+
+
+ slimejam
+ name = "Slime Jam"
+ id = "m_jam"
+ result = "slimejelly"
+ required_reagents = list("sugar" = 5)
+ result_amount = 10
+ required_container = /obj/item/slime_extract/purple
+ required_other = 1
+
+
+//Dark Purple
+ slimeplasma
+ name = "Slime Plasma"
+ id = "m_plasma"
+ result = null
+ required_reagents = list("plasma" = 5)
+ result_amount = 1
+ required_container = /obj/item/slime_extract/darkpurple
+ required_other = 1
+ on_reaction(var/datum/reagents/holder)
+ var/obj/item/stack/sheet/mineral/plasma/P = new /obj/item/stack/sheet/mineral/plasma
+ P.amount = 10
+ P.loc = get_turf(holder.my_atom)
+
+//Red
+ slimeglycerol
+ name = "Slime Glycerol"
+ id = "m_glycerol"
+ result = "glycerol"
+ required_reagents = list("plasma" = 5)
+ result_amount = 8
+ required_container = /obj/item/slime_extract/red
+ required_other = 1
+
+
+ slimebloodlust
+ name = "Bloodlust"
+ id = "m_bloodlust"
+ result = null
+ required_reagents = list("blood" = 5)
+ result_amount = 1
+ required_container = /obj/item/slime_extract/red
+ required_other = 1
+ on_reaction(var/datum/reagents/holder)
+ for(var/mob/living/carbon/slime/slime in viewers(get_turf(holder.my_atom), null))
+ slime.rabid = 1
+ for(var/mob/O in viewers(get_turf(holder.my_atom), null))
+ O.show_message(text("\red The [slime] is driven into a frenzy!."), 1)
+
+//Pink
+ slimeppotion
+ name = "Slime Potion"
+ id = "m_potion"
+ result = null
+ required_reagents = list("plasma" = 5)
+ result_amount = 1
+ required_container = /obj/item/slime_extract/pink
+ required_other = 1
+ on_reaction(var/datum/reagents/holder)
+ var/obj/item/weapon/slimepotion/P = new /obj/item/weapon/slimepotion
+ P.loc = get_turf(holder.my_atom)
+
+
+//Black
+ slimemutate2
+ name = "Advanced Mutation Toxin"
+ id = "mutationtoxin2"
+ result = "amutationtoxin"
+ required_reagents = list("plasma" = 5)
+ result_amount = 1
+ required_other = 1
+ required_container = /obj/item/slime_extract/black
+
+//Oil
+ slimeexplosion
+ name = "Slime Explosion"
+ id = "m_explosion"
+ result = null
+ required_reagents = list("plasma" = 5)
+ result_amount = 1
+ required_container = /obj/item/slime_extract/oil
+ required_other = 1
+ on_reaction(var/datum/reagents/holder)
+ for(var/mob/O in viewers(get_turf(holder.my_atom), null))
+ O.show_message(text("\red The slime extract begins to vibrate violently !"), 1)
+ sleep(50)
+ explosion(get_turf(holder.my_atom), 1 ,3, 6)
+//Light Pink
+ slimepotion2
+ name = "Slime Potion 2"
+ id = "m_potion2"
+ result = null
+ result_amount = 1
+ required_container = /obj/item/slime_extract/lightpink
+ required_reagents = list("plasma" = 5)
+ required_other = 1
+ on_reaction(var/datum/reagents/holder)
+ var/obj/item/weapon/slimepotion2/P = new /obj/item/weapon/slimepotion2
+ P.loc = get_turf(holder.my_atom)
+//Adamantine
+ slimegolem
+ name = "Slime Golem"
+ id = "m_golem"
+ result = null
+ required_reagents = list("plasma" = 5)
+ result_amount = 1
+ required_container = /obj/item/slime_extract/adamantine
+ required_other = 1
+ on_reaction(var/datum/reagents/holder)
+ feedback_add_details("slime_cores_used","[replacetext(name," ","_")]")
+ var/obj/effect/goleRUNe/Z = new /obj/effect/goleRUNe
+ Z.loc = get_turf(holder.my_atom)
+ Z.announce_to_ghosts()
+//Bluespace
+ slimecrystal
+ name = "Slime Crystal"
+ id = "m_crystal"
+ result = null
+ required_reagents = list("blood" = 1)
+ result_amount = 1
+ required_container = /obj/item/slime_extract/bluespace
+ required_other = 1
+ on_reaction(var/datum/reagents/holder, var/created_volume)
+ feedback_add_details("slime_cores_used","[replacetext(name," ","_")]")
+ if(holder.my_atom)
+ var/obj/item/bluespace_crystal/BC = new(get_turf(holder.my_atom))
+ BC.visible_message("The [BC.name] appears out of thin air!")
+//Cerulean
+ slimepsteroid2
+ name = "Slime Steroid 2"
+ id = "m_steroid2"
+ result = null
+ required_reagents = list("plasma" = 1)
+ result_amount = 1
+ required_container = /obj/item/slime_extract/cerulean
+ required_other = 1
+ on_reaction(var/datum/reagents/holder)
+ feedback_add_details("slime_cores_used","[replacetext(name," ","_")]")
+ var/obj/item/weapon/slimesteroid2/P = new /obj/item/weapon/slimesteroid2
+ P.loc = get_turf(holder.my_atom)
+//Sepia
+ slimecamera
+ name = "Slime Camera"
+ id = "m_camera"
+ result = null
+ required_reagents = list("plasma" = 1)
+ result_amount = 1
+ required_container = /obj/item/slime_extract/sepia
+ required_other = 1
+ on_reaction(var/datum/reagents/holder)
+ feedback_add_details("slime_cores_used","[replacetext(name," ","_")]")
+ var/obj/item/device/camera/P = new /obj/item/device/camera
+ P.loc = get_turf(holder.my_atom)
+
+
+ slimefilm
+ name = "Slime Film"
+ id = "m_film"
+ result = null
+ required_reagents = list("blood" = 1)
+ result_amount = 1
+ required_container = /obj/item/slime_extract/sepia
+ required_other = 1
+ on_reaction(var/datum/reagents/holder)
+ feedback_add_details("slime_cores_used","[replacetext(name," ","_")]")
+ var/obj/item/device/camera_film/P = new /obj/item/device/camera_film
+ P.loc = get_turf(holder.my_atom)
+//Pyrite
+ slimepaint
+ name = "Slime Paint"
+ id = "s_paint"
+ result = null
+ required_reagents = list("plasma" = 1)
+ result_amount = 1
+ required_container = /obj/item/slime_extract/pyrite
+ required_other = 1
+ on_reaction(var/datum/reagents/holder)
+ feedback_add_details("slime_cores_used","[replacetext(name," ","_")]")
+ var/list/paints = subtypesof(/obj/item/weapon/reagent_containers/glass/paint)
+ var/chosen = pick(paints)
+ var/obj/P = new chosen
+ if(P)
+ P.loc = get_turf(holder.my_atom)
\ No newline at end of file
diff --git a/code/modules/reagents/oldchem/reagents/__oldchem_defines.dm b/code/modules/reagents/oldchem/reagents/__oldchem_defines.dm
new file mode 100644
index 00000000000..815c1208dd9
--- /dev/null
+++ b/code/modules/reagents/oldchem/reagents/__oldchem_defines.dm
@@ -0,0 +1,5 @@
+#define SOLID 1
+#define LIQUID 2
+#define GAS 3
+#define FOOD_METABOLISM 0.4
+#define REM REAGENTS_EFFECT_MULTIPLIER
\ No newline at end of file
diff --git a/code/modules/reagents/oldchem/reagents/_reagent_base.dm b/code/modules/reagents/oldchem/reagents/_reagent_base.dm
new file mode 100644
index 00000000000..2b2a94ee149
--- /dev/null
+++ b/code/modules/reagents/oldchem/reagents/_reagent_base.dm
@@ -0,0 +1,82 @@
+/datum/reagent
+ var/name = "Reagent"
+ var/id = "reagent"
+ var/description = ""
+ var/datum/reagents/holder = null
+ var/reagent_state = SOLID
+ var/list/data = null
+ var/volume = 0
+ var/nutriment_factor = 0
+ var/metabolization_rate = REAGENTS_METABOLISM
+ //var/list/viruses = list()
+ var/color = "#000000" // rgb: 0, 0, 0 (does not support alpha channels - yet!)
+ var/shock_reduction = 0
+ var/penetrates_skin = 0 //Whether or not a reagent penetrates the skin
+ //Processing flags, defines the type of mobs the reagent will affect
+ //By default, all reagents will ONLY affect organics, not synthetics. Re-define in the reagent's definition if the reagent is meant to affect synths
+ var/process_flags = ORGANIC
+
+
+/datum/reagent/proc/reaction_mob(var/mob/M, var/method=TOUCH, var/volume) //Some reagents transfer on touch, others don't; dependent on if they penetrate the skin or not.
+ if(!istype(M, /mob/living)) return 0
+ var/datum/reagent/self = src
+ src = null
+
+ if(self.holder) //for catching rare runtimes
+ if(method == TOUCH && self.penetrates_skin)
+ var/block = 0
+ for(var/obj/item/clothing/C in M.get_equipped_items())
+ if(istype(C, /obj/item/clothing/suit/bio_suit))
+ block += 1
+ if(istype(C, /obj/item/clothing/head/bio_hood))
+ block += 1
+ if(block < 2)
+ if(M.reagents)
+ M.reagents.add_reagent(self.id,self.volume)
+
+/*
+ if(method == INGEST && istype(M, /mob/living/carbon))
+ if(prob(1 * self.addictiveness))
+ if(prob(5 * volume))
+ var/datum/disease/addiction/A = new /datum/disease/addiction
+ A.addicted_to = self
+ A.name = "[self.name] Addiction"
+ A.addiction ="[self.name]"
+ A.cure = self.id
+ M.viruses += A
+ A.affected_mob = M
+ A.holder = M
+*/
+ return 1
+
+/datum/reagent/proc/reaction_obj(var/obj/O, var/volume) //By default we transfer a small part of the reagent to the object
+ src = null //if it can hold reagents. nope!
+ //if(O.reagents)
+ // O.reagents.add_reagent(id,volume/3)
+ return
+
+/datum/reagent/proc/reaction_turf(var/turf/T, var/volume)
+ src = null
+ return
+
+/datum/reagent/proc/on_mob_life(var/mob/living/M as mob, var/alien)
+ if(!istype(M, /mob/living)) // YOU'RE A FUCKING RETARD NEO WHY CAN'T YOU JUST FIX THE PROBLEM ON THE REAGENT - Iamgoofball
+ return //Noticed runtime errors from facid trying to damage ghosts, this should fix. --NEO
+ // Certain elements in too large amounts cause side-effects
+ holder.remove_reagent(src.id, metabolization_rate) //By default it slowly disappears.
+ current_cycle++
+ return
+
+// Called when two reagents of the same are mixing.
+/datum/reagent/proc/on_merge(var/data)
+ return
+
+/datum/reagent/proc/on_move(var/mob/M)
+ return
+
+/datum/reagent/proc/on_update(var/atom/A)
+ return
+
+/datum/reagent/Destroy()
+ holder = null
+ return ..()
\ No newline at end of file
diff --git a/code/modules/reagents/oldchem/reagents/drink/reagents_alcohol.dm b/code/modules/reagents/oldchem/reagents/drink/reagents_alcohol.dm
new file mode 100644
index 00000000000..b07cd8355e3
--- /dev/null
+++ b/code/modules/reagents/oldchem/reagents/drink/reagents_alcohol.dm
@@ -0,0 +1,748 @@
+//ALCOHOL WOO
+/datum/reagent/ethanol
+ name = "Ethanol" //Parent class for all alcoholic reagents.
+ id = "ethanol"
+ description = "A well-known alcohol with a variety of applications."
+ reagent_state = LIQUID
+ nutriment_factor = 0 //So alcohol can fill you up! If they want to.
+ color = "#404030" // rgb: 64, 64, 48
+ var/datum/martial_art/drunk_brawling/F = new
+ var/dizzy_adj = 3
+ var/slurr_adj = 3
+ var/confused_adj = 2
+ var/slur_start = 65 //amount absorbed after which mob starts slurring
+ var/brawl_start = 75 //amount absorbed after which mob switches to drunken brawling as a fighting style
+ var/confused_start = 130 //amount absorbed after which mob starts confusing directions
+ var/vomit_start = 180 //amount absorbed after which mob starts vomitting
+ var/blur_start = 260 //amount absorbed after which mob starts getting blurred vision
+ var/pass_out = 325 //amount absorbed after which mob starts passing out
+
+/datum/reagent/ethanol/on_mob_life(var/mob/living/M as mob, var/alien)
+ // Sobering multiplier.
+ // Sober block makes it more difficult to get drunk
+ var/sober_str=!(SOBER in M.mutations)?1:2
+ M:nutrition += nutriment_factor
+ holder.remove_reagent(src.id, FOOD_METABOLISM)
+ if(!src.data) data = 1
+ src.data++
+
+ var/d = data
+
+ // make all the beverages work together
+ for(var/datum/reagent/ethanol/A in holder.reagent_list)
+ if(isnum(A.data)) d += A.data
+
+ d/=sober_str
+
+ if(ishuman(M))
+ var/mob/living/carbon/human/H = M
+ if(H.species && (H.species.name == "Skrell" || H.species.name =="Neara")) //Skrell and Neara get very drunk very quickly.
+ d*=5
+
+ M.dizziness += dizzy_adj.
+ if(d >= slur_start && d < pass_out)
+ if (!M:slurring) M:slurring = 1
+ M:slurring += slurr_adj/sober_str
+ if(d >= brawl_start && ishuman(M))
+ var/mob/living/carbon/human/H = M
+ F.teach(H,1)
+ if(src.volume < 3)
+ if(H.martial_art == F)
+ F.remove(H)
+ if(d >= confused_start && prob(33))
+ if (!M:confused) M:confused = 1
+ M.confused = max(M:confused+(confused_adj/sober_str),0)
+ if(d >= blur_start)
+ M.eye_blurry = max(M.eye_blurry, 10/sober_str)
+ M:drowsyness = max(M:drowsyness, 0)
+ if(d >= vomit_start)
+ if(prob(8))
+ M.fakevomit()
+ if(d >= pass_out)
+ M:paralysis = max(M:paralysis, 20/sober_str)
+ M:drowsyness = max(M:drowsyness, 30/sober_str)
+ if(ishuman(M))
+ var/mob/living/carbon/human/H = M
+ var/obj/item/organ/liver/L = H.internal_organs_by_name["liver"]
+ if (istype(L))
+ L.take_damage(0.1, 1)
+ H.adjustToxLoss(0.1)
+ holder.remove_reagent(src.id, 0.4)
+ ..()
+ return
+
+/datum/reagent/ethanol/reaction_obj(var/obj/O, var/volume)
+ if(istype(O,/obj/item/weapon/paper))
+ var/obj/item/weapon/paper/paperaffected = O
+ paperaffected.clearpaper()
+ usr << "The solution melts away the ink on the paper."
+ if(istype(O,/obj/item/weapon/book))
+ if(volume >= 5)
+ var/obj/item/weapon/book/affectedbook = O
+ affectedbook.dat = null
+ usr << "The solution melts away the ink on the book."
+ else
+ usr << "It wasn't enough..."
+ return
+
+/datum/reagent/ethanol/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)//Splashing people with ethanol isn't quite as good as fuel.
+ if(!istype(M, /mob/living))
+ return
+ if(method == TOUCH)
+ M.adjust_fire_stacks(volume / 15)
+ return
+
+
+/datum/reagent/ethanol/beer //It's really much more stronger than other drinks.
+ name = "Beer"
+ id = "beer"
+ description = "An alcoholic beverage made from malted grains, hops, yeast, and water."
+ nutriment_factor = 2 * FOOD_METABOLISM
+ color = "#664300" // rgb: 102, 67, 0
+
+/datum/reagent/ethanol/beer/on_mob_life(var/mob/living/M as mob)
+ ..()
+ M:jitteriness = max(M:jitteriness-3,0)
+ return
+
+/datum/reagent/ethanol/cider
+ name = "Cider"
+ id = "cider"
+ description = "An alcoholic beverage derived from apples."
+ color = "#174116"
+
+/datum/reagent/ethanol/whiskey
+ name = "Whiskey"
+ id = "whiskey"
+ description = "A superb and well-aged single-malt whiskey. Damn."
+ color = "#664300" // rgb: 102, 67, 0
+ dizzy_adj = 4
+
+/datum/reagent/ethanol/specialwhiskey
+ name = "Special Blend Whiskey"
+ id = "specialwhiskey"
+ description = "Just when you thought regular station whiskey was good... This silky, amber goodness has to come along and ruin everything."
+ color = "#664300" // rgb: 102, 67, 0
+ slur_start = 30 //amount absorbed after which mob starts slurring
+ brawl_start = 40
+
+/datum/reagent/ethanol/gin
+ name = "Gin"
+ id = "gin"
+ description = "It's gin. In space. I say, good sir."
+ color = "#664300" // rgb: 102, 67, 0
+ dizzy_adj = 3
+
+/datum/reagent/ethanol/absinthe
+ name = "Absinthe"
+ id = "absinthe"
+ description = "Watch out that the Green Fairy doesn't come for you!"
+ color = "#33EE00" // rgb: lots, ??, ??
+ overdose_threshold = 30
+ dizzy_adj = 5
+ slur_start = 25
+ brawl_start = 40
+ confused_start = 100
+
+//copy paste from LSD... shoot me
+/datum/reagent/ethanol/absinthe/on_mob_life(var/mob/M)
+ if(!M) M = holder.my_atom
+ if(!data) data = 1
+ data++
+ M:hallucination += 5
+ if(volume > overdose_threshold)
+ M:adjustToxLoss(1)
+ ..()
+ return
+
+/datum/reagent/ethanol/rum
+ name = "Rum"
+ id = "rum"
+ description = "Popular with the sailors. Not very popular with everyone else."
+ color = "#664300" // rgb: 102, 67, 0
+ overdose_threshold = 30
+
+/datum/reagent/ethanol/rum/on_mob_life(var/mob/living/M as mob)
+ ..()
+ M.dizziness +=5
+ if(volume > overdose_threshold)
+ M:adjustToxLoss(1)
+ return
+
+/datum/reagent/ethanol/mojito
+ name = "Mojito"
+ id = "mojito"
+ description = "If it's good enough for Spesscuba, it's good enough for you."
+ color = "#664300" // rgb: 102, 67, 0
+
+/datum/reagent/ethanol/vodka
+ name = "Vodka"
+ id = "vodka"
+ description = "Number one drink AND fueling choice for Russians worldwide."
+ color = "#664300" // rgb: 102, 67, 0
+
+/datum/reagent/ethanol/sake
+ name = "Sake"
+ id = "sake"
+ description = "Anime's favorite drink."
+ color = "#664300" // rgb: 102, 67, 0
+
+/datum/reagent/ethanol/tequilla
+ name = "Tequila"
+ id = "tequilla"
+ description = "A strong and mildly flavoured, mexican produced spirit. Feeling thirsty hombre?"
+ color = "#A8B0B7" // rgb: 168, 176, 183
+
+/datum/reagent/ethanol/vermouth
+ name = "Vermouth"
+ id = "vermouth"
+ description = "You suddenly feel a craving for a martini..."
+ color = "#664300" // rgb: 102, 67, 0
+
+/datum/reagent/ethanol/wine
+ name = "Wine"
+ id = "wine"
+ description = "An premium alchoholic beverage made from distilled grape juice."
+ color = "#7E4043" // rgb: 126, 64, 67
+ dizzy_adj = 2
+ slur_start = 65 //amount absorbed after which mob starts slurring
+ confused_start = 145 //amount absorbed after which mob starts confusing directions
+
+/datum/reagent/ethanol/cognac
+ name = "Cognac"
+ id = "cognac"
+ description = "A sweet and strongly alchoholic drink, made after numerous distillations and years of maturing. Classy as fornication."
+ color = "#664300" // rgb: 102, 67, 0
+ dizzy_adj = 4
+ confused_start = 115 //amount absorbed after which mob starts confusing directions
+
+/datum/reagent/ethanol/suicider //otherwise known as "I want to get so smashed my liver gives out and I die from alcohol poisoning".
+ name = "Suicider"
+ id = "suicider"
+ description = "An unbelievably strong and potent variety of Cider."
+ color = "#CF3811"
+ dizzy_adj = 20
+ slurr_adj = 20
+ confused_adj = 3
+ slur_start = 15
+ brawl_start = 25
+ confused_start = 40
+ blur_start = 60
+ pass_out = 80
+
+/datum/reagent/ethanol/ale
+ name = "Ale"
+ id = "ale"
+ description = "A dark alchoholic beverage made by malted barley and yeast."
+ color = "#664300" // rgb: 102, 67, 0
+
+/datum/reagent/ethanol/thirteenloko
+ name = "Thirteen Loko"
+ id = "thirteenloko"
+ description = "A potent mixture of caffeine and alcohol."
+ reagent_state = LIQUID
+ color = "#102000" // rgb: 16, 32, 0
+
+/datum/reagent/ethanol/thirteenloko/on_mob_life(var/mob/living/M as mob)
+ ..()
+ M:nutrition += nutriment_factor
+ holder.remove_reagent(src.id, FOOD_METABOLISM)
+ M:drowsyness = max(0,M:drowsyness-7)
+ //if(!M:sleeping_willingly)
+ // M:sleeping = max(0,M.sleeping-2)
+ if (M.bodytemperature > 310)
+ M.bodytemperature = max(310, M.bodytemperature-5)
+ M.Jitter(1)
+ return
+
+
+/////////////////////////////////////////////////////////////////cocktail entities//////////////////////////////////////////////
+
+/datum/reagent/ethanol/bilk
+ name = "Bilk"
+ id = "bilk"
+ description = "This appears to be beer mixed with milk. Disgusting."
+ reagent_state = LIQUID
+ color = "#895C4C" // rgb: 137, 92, 76
+
+/datum/reagent/ethanol/atomicbomb
+ name = "Atomic Bomb"
+ id = "atomicbomb"
+ description = "Nuclear proliferation never tasted so good."
+ reagent_state = LIQUID
+ color = "#666300" // rgb: 102, 99, 0
+
+/datum/reagent/ethanol/threemileisland
+ name = "THree Mile Island Iced Tea"
+ id = "threemileisland"
+ description = "Made for a woman, strong enough for a man."
+ reagent_state = LIQUID
+ color = "#666340" // rgb: 102, 99, 64
+
+/datum/reagent/ethanol/goldschlager
+ name = "Goldschlager"
+ id = "goldschlager"
+ description = "100 proof cinnamon schnapps, made for alcoholic teen girls on spring break."
+ reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
+/datum/reagent/ethanol/patron
+ name = "Patron"
+ id = "patron"
+ description = "Tequila with silver in it, a favorite of alcoholic women in the club scene."
+ reagent_state = LIQUID
+ color = "#585840" // rgb: 88, 88, 64
+
+/datum/reagent/ethanol/gintonic
+ name = "Gin and Tonic"
+ id = "gintonic"
+ description = "An all time classic, mild cocktail."
+ reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
+/datum/reagent/ethanol/cuba_libre
+ name = "Cuba Libre"
+ id = "cubalibre"
+ description = "Rum, mixed with cola. Viva la revolution."
+ reagent_state = LIQUID
+ color = "#3E1B00" // rgb: 62, 27, 0
+
+/datum/reagent/ethanol/whiskey_cola
+ name = "Whiskey Cola"
+ id = "whiskeycola"
+ description = "Whiskey, mixed with cola. Surprisingly refreshing."
+ reagent_state = LIQUID
+ color = "#3E1B00" // rgb: 62, 27, 0
+
+/datum/reagent/ethanol/martini
+ name = "Classic Martini"
+ id = "martini"
+ description = "Vermouth with Gin. Not quite how 007 enjoyed it, but still delicious."
+ reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
+/datum/reagent/ethanol/vodkamartini
+ name = "Vodka Martini"
+ id = "vodkamartini"
+ description = "Vodka with Gin. Not quite how 007 enjoyed it, but still delicious."
+ reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
+/datum/reagent/ethanol/white_russian
+ name = "White Russian"
+ id = "whiterussian"
+ description = "That's just, like, your opinion, man..."
+ reagent_state = LIQUID
+ color = "#A68340" // rgb: 166, 131, 64
+
+/datum/reagent/ethanol/screwdrivercocktail
+ name = "Screwdriver"
+ id = "screwdrivercocktail"
+ description = "Vodka, mixed with plain ol' orange juice. The result is surprisingly delicious."
+ reagent_state = LIQUID
+ color = "#A68310" // rgb: 166, 131, 16
+
+/datum/reagent/ethanol/booger
+ name = "Booger"
+ id = "booger"
+ description = "Ewww..."
+ reagent_state = LIQUID
+ color = "#A68310" // rgb: 166, 131, 16
+
+/datum/reagent/ethanol/bloody_mary
+ name = "Bloody Mary"
+ id = "bloodymary"
+ description = "A strange yet pleasurable mixture made of vodka, tomato and lime juice. Or at least you THINK the red stuff is tomato juice."
+ reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
+/datum/reagent/ethanol/gargle_blaster
+ name = "Pan-Galactic Gargle Blaster"
+ id = "gargleblaster"
+ description = "Whoah, this stuff looks volatile!"
+ reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
+/datum/reagent/ethanol/brave_bull
+ name = "Brave Bull"
+ id = "bravebull"
+ description = "A strange yet pleasurable mixture made of vodka, tomato and lime juice. Or at least you THINK the red stuff is tomato juice."
+ reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
+/datum/reagent/ethanol/tequilla_sunrise
+ name = "Tequila Sunrise"
+ id = "tequillasunrise"
+ description = "Tequila and orange juice. Much like a Screwdriver, only Mexican~"
+ reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
+/datum/reagent/ethanol/toxins_special
+ name = "Toxins Special"
+ id = "toxinsspecial"
+ description = "This thing is FLAMING!. CALL THE DAMN SHUTTLE!"
+ reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
+/datum/reagent/ethanol/beepsky_smash
+ name = "Beepsky Smash"
+ id = "beepskysmash"
+ description = "Deny drinking this and prepare for THE LAW."
+ reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
+/datum/reagent/ethanol/changelingsting
+ name = "Changeling Sting"
+ id = "changelingsting"
+ description = "You take a tiny sip and feel a burning sensation..."
+ reagent_state = LIQUID
+ color = "#2E6671" // rgb: 46, 102, 113
+
+/datum/reagent/ethanol/irish_cream
+ name = "Irish Cream"
+ id = "irishcream"
+ description = "Whiskey-imbued cream, what else would you expect from the Irish."
+ reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
+/datum/reagent/ethanol/manly_dorf
+ name = "The Manly Dorf"
+ id = "manlydorf"
+ description = "Beer and Ale, brought together in a delicious mix. Intended for true men only."
+ reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
+/datum/reagent/ethanol/longislandicedtea
+ name = "Long Island Iced Tea"
+ id = "longislandicedtea"
+ description = "The liquor cabinet, brought together in a delicious mix. Intended for middle-aged alcoholic women only."
+ reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
+/datum/reagent/ethanol/moonshine
+ name = "Moonshine"
+ id = "moonshine"
+ description = "You've really hit rock bottom now... your liver packed its bags and left last night."
+ reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
+/datum/reagent/ethanol/b52
+ name = "B-52"
+ id = "b52"
+ description = "Coffee, Irish Cream, and congac. You will get bombed."
+ reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
+/datum/reagent/ethanol/irishcoffee
+ name = "Irish Coffee"
+ id = "irishcoffee"
+ description = "Coffee, and alcohol. More fun than a Mimosa to drink in the morning."
+ reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
+/datum/reagent/ethanol/margarita
+ name = "Margarita"
+ id = "margarita"
+ description = "On the rocks with salt on the rim. Arriba~!"
+ reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
+/datum/reagent/ethanol/black_russian
+ name = "Black Russian"
+ id = "blackrussian"
+ description = "For the lactose-intolerant. Still as classy as a White Russian."
+ reagent_state = LIQUID
+ color = "#360000" // rgb: 54, 0, 0
+
+/datum/reagent/ethanol/manhattan
+ name = "Manhattan"
+ id = "manhattan"
+ description = "The Detective's undercover drink of choice. He never could stomach gin..."
+ reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
+/datum/reagent/ethanol/manhattan_proj
+ name = "Manhattan Project"
+ id = "manhattan_proj"
+ description = "A scienitst's drink of choice, for pondering ways to blow up the station."
+ reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
+/datum/reagent/ethanol/whiskeysoda
+ name = "Whiskey Soda"
+ id = "whiskeysoda"
+ description = "Ultimate refreshment."
+ reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
+/datum/reagent/ethanol/antifreeze
+ name = "Anti-freeze"
+ id = "antifreeze"
+ description = "Ultimate refreshment."
+ reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
+/datum/reagent/ethanol/barefoot
+ name = "Barefoot"
+ id = "barefoot"
+ description = "Barefoot and pregnant"
+ reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
+/datum/reagent/ethanol/snowwhite
+ name = "Snow White"
+ id = "snowwhite"
+ description = "A cold refreshment"
+ reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
+/datum/reagent/ethanol/demonsblood
+ name = "Demons Blood"
+ id = "demonsblood"
+ description = "AHHHH!!!!"
+ reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+ dizzy_adj = 10
+ slurr_adj = 10
+
+/datum/reagent/ethanol/vodkatonic
+ name = "Vodka and Tonic"
+ id = "vodkatonic"
+ description = "For when a gin and tonic isn't russian enough."
+ reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+ dizzy_adj = 4
+ slurr_adj = 3
+
+/datum/reagent/ethanol/ginfizz
+ name = "Gin Fizz"
+ id = "ginfizz"
+ description = "Refreshingly lemony, deliciously dry."
+ reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+ dizzy_adj = 4
+ slurr_adj = 3
+
+/datum/reagent/ethanol/bahama_mama
+ name = "Bahama mama"
+ id = "bahama_mama"
+ description = "Tropic cocktail."
+ reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
+/datum/reagent/ethanol/singulo
+ name = "Singulo"
+ id = "singulo"
+ description = "A blue-space beverage!"
+ reagent_state = LIQUID
+ color = "#2E6671" // rgb: 46, 102, 113
+ dizzy_adj = 15
+ slurr_adj = 15
+
+/datum/reagent/ethanol/sbiten
+ name = "Sbiten"
+ id = "sbiten"
+ description = "A spicy Vodka! Might be a little hot for the little guys!"
+ reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
+/datum/reagent/ethanol/sbiten/on_mob_life(var/mob/living/M as mob)
+ ..()
+ if (M.bodytemperature < 360)
+ M.bodytemperature = min(360, M.bodytemperature+50) //310 is the normal bodytemp. 310.055
+ return
+
+/datum/reagent/ethanol/devilskiss
+ name = "Devils Kiss"
+ id = "devilskiss"
+ description = "Creepy time!"
+ reagent_state = LIQUID
+ color = "#A68310" // rgb: 166, 131, 16
+
+/datum/reagent/ethanol/red_mead
+ name = "Red Mead"
+ id = "red_mead"
+ description = "The true Viking drink! Even though it has a strange red color."
+ reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
+/datum/reagent/ethanol/mead
+ name = "Mead"
+ id = "mead"
+ description = "A Vikings drink, though a cheap one."
+ reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
+/datum/reagent/ethanol/iced_beer
+ name = "Iced Beer"
+ id = "iced_beer"
+ description = "A beer which is so cold the air around it freezes."
+ reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
+/datum/reagent/ethanol/iced_beer/on_mob_life(var/mob/living/M as mob)
+ ..()
+ if (M.bodytemperature < 270)
+ M.bodytemperature = min(270, M.bodytemperature-40) //310 is the normal bodytemp. 310.055
+ return
+
+/datum/reagent/ethanol/grog
+ name = "Grog"
+ id = "grog"
+ description = "Watered down rum, Nanotrasen approves!"
+ reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
+/datum/reagent/ethanol/aloe
+ name = "Aloe"
+ id = "aloe"
+ description = "So very, very, very good."
+ reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
+/datum/reagent/ethanol/andalusia
+ name = "Andalusia"
+ id = "andalusia"
+ description = "A nice, strange named drink."
+ reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
+/datum/reagent/ethanol/alliescocktail
+ name = "Allies Cocktail"
+ id = "alliescocktail"
+ description = "A drink made from your allies."
+ reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
+/datum/reagent/ethanol/acid_spit
+ name = "Acid Spit"
+ id = "acidspit"
+ description = "A drink by Nanotrasen. Made from live aliens."
+ reagent_state = LIQUID
+ color = "#365000" // rgb: 54, 80, 0
+
+/datum/reagent/ethanol/amasec
+ name = "Amasec"
+ id = "amasec"
+ description = "Official drink of the Imperium."
+ reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
+
+/datum/reagent/ethanol/neurotoxin
+ name = "Neurotoxin"
+ id = "neurotoxin"
+ description = "A strong neurotoxin that puts the subject into a death-like state."
+ reagent_state = LIQUID
+ color = "#2E2E61" // rgb: 46, 46, 97
+
+/datum/reagent/ethanol/neurotoxin/on_mob_life(var/mob/living/M as mob)
+ M.weakened = max(M.weakened, 3)
+ if(!data)
+ data = 1
+ data++
+ M.dizziness +=6
+ if(data >= 15 && data <45)
+ if (!M.slurring)
+ M.slurring = 1
+ M.slurring += 3
+ else if(data >= 45 && prob(50) && data <55)
+ M.confused = max(M.confused+3,0)
+ else if(data >=55)
+ M.druggy = max(M.druggy, 55)
+ else if(data >=200)
+ M.adjustToxLoss(2)
+ ..()
+ return
+
+/datum/reagent/ethanol/bananahonk
+ name = "Banana Mama"
+ id = "bananahonk"
+ description = "A drink from Clown Heaven."
+ nutriment_factor = 1 * FOOD_METABOLISM
+ color = "#664300" // rgb: 102, 67, 0
+
+/datum/reagent/ethanol/bananahonk/on_mob_life(var/mob/living/M as mob)
+ M.nutrition += nutriment_factor
+ if(istype(M, /mob/living/carbon/human) && M.job in list("Clown"))
+ if(!M) M = holder.my_atom
+ M.heal_organ_damage(1,1)
+ M.nutrition += nutriment_factor
+ ..()
+ return
+ ..()
+
+/datum/reagent/ethanol/silencer
+ name = "Silencer"
+ id = "silencer"
+ description = "A drink from Mime Heaven."
+ nutriment_factor = 1 * FOOD_METABOLISM
+ color = "#664300" // rgb: 102, 67, 0
+
+/datum/reagent/ethanol/silencer/on_mob_life(var/mob/living/M as mob)
+ M.nutrition += nutriment_factor
+ if(istype(M, /mob/living/carbon/human) && M.job in list("Mime"))
+ if(!M) M = holder.my_atom
+ M.heal_organ_damage(1,1)
+ M.nutrition += nutriment_factor
+ ..()
+ return
+ ..()
+
+/datum/reagent/ethanol/changelingsting
+ name = "Changeling Sting"
+ id = "changelingsting"
+ description = "A stingy drink."
+ reagent_state = LIQUID
+ color = "#2E6671" // rgb: 46, 102, 113
+
+/datum/reagent/ethanol/changelingsting/on_mob_life(var/mob/living/M as mob)
+ ..()
+ M.dizziness +=5
+ return
+
+/datum/reagent/ethanol/irishcarbomb
+ name = "Irish Car Bomb"
+ id = "irishcarbomb"
+ description = "Mmm, tastes like chocolate cake..."
+ reagent_state = LIQUID
+ color = "#2E6671" // rgb: 46, 102, 113
+
+/datum/reagent/ethanol/irishcarbomb/on_mob_life(var/mob/living/M as mob)
+ ..()
+ M.dizziness +=5
+ return
+
+/datum/reagent/ethanol/syndicatebomb
+ name = "Syndicate Bomb"
+ id = "syndicatebomb"
+ description = "A Syndicate bomb"
+ reagent_state = LIQUID
+ color = "#2E6671" // rgb: 46, 102, 113
+
+/datum/reagent/ethanol/erikasurprise
+ name = "Erika Surprise"
+ id = "erikasurprise"
+ description = "The surprise is, it's green!"
+ reagent_state = LIQUID
+ color = "#2E6671" // rgb: 46, 102, 113
+
+/datum/reagent/ethanol/driestmartini
+ name = "Driest Martini"
+ id = "driestmartini"
+ description = "Only for the experienced. You think you see sand floating in the glass."
+ nutriment_factor = 1 * FOOD_METABOLISM
+ color = "#2E6671" // rgb: 46, 102, 113
+
+/datum/reagent/ethanol/driestmartini/on_mob_life(var/mob/living/M as mob)
+ if(!data) data = 1
+ data++
+ M.dizziness +=10
+ if(data >= 55 && data <115)
+ if (!M.stuttering) M.stuttering = 1
+ M.stuttering += 10
+ else if(data >= 115 && prob(33))
+ M.confused = max(M.confused+15,15)
+ ..()
+
+ return
\ No newline at end of file
diff --git a/code/modules/reagents/oldchem/reagents/drink/reagents_drink.dm b/code/modules/reagents/oldchem/reagents/drink/reagents_drink.dm
new file mode 100644
index 00000000000..e66e48fbdfe
--- /dev/null
+++ b/code/modules/reagents/oldchem/reagents/drink/reagents_drink.dm
@@ -0,0 +1,279 @@
+/datum/reagent/drink/orangejuice
+ name = "Orange juice"
+ id = "orangejuice"
+ description = "Both delicious AND rich in Vitamin C, what more do you need?"
+ color = "#E78108" // rgb: 231, 129, 8
+
+/datum/reagent/drink/orangejuicde/on_mob_life(var/mob/living/M as mob)
+ ..()
+ if(M.getOxyLoss() && prob(30)) M.adjustOxyLoss(-1*REM)
+ return
+
+/datum/reagent/drink/tomatojuice
+ name = "Tomato Juice"
+ id = "tomatojuice"
+ description = "Tomatoes made into juice. What a waste of big, juicy tomatoes, huh?"
+ color = "#731008" // rgb: 115, 16, 8
+
+/datum/reagent/drink/tomatojuice/on_mob_life(var/mob/living/M as mob)
+ ..()
+ if(M.getFireLoss() && prob(20)) M.heal_organ_damage(0,1)
+ return
+
+/datum/reagent/drink/limejuice
+ name = "Lime Juice"
+ id = "limejuice"
+ description = "The sweet-sour juice of limes."
+ color = "#365E30" // rgb: 54, 94, 48
+
+/datum/reagent/drink/limejuice/on_mob_life(var/mob/living/M as mob)
+ ..()
+ if(M.getToxLoss() && prob(20)) M.adjustToxLoss(-1)
+ return
+
+
+/datum/reagent/drink/carrotjuice
+ name = "Carrot juice"
+ id = "carrotjuice"
+ description = "It is just like a carrot but without crunching."
+ color = "#973800" // rgb: 151, 56, 0
+
+/datum/reagent/drink/carrotjuicde/on_mob_life(var/mob/living/M as mob)
+ ..()
+ M.eye_blurry = max(M.eye_blurry-1 , 0)
+ M.eye_blind = max(M.eye_blind-1 , 0)
+ if(!data) data = 1
+ switch(data)
+ if(1 to 20)
+ //nothing
+ if(21 to INFINITY)
+ if (prob(data-10))
+ M.disabilities &= ~NEARSIGHTED
+ data++
+ return
+
+/datum/reagent/drink/doctor_delight
+ name = "The Doctor's Delight"
+ id = "doctorsdelight"
+ description = "A gulp a day keeps the MediBot away. That's probably for the best."
+ reagent_state = LIQUID
+ color = "#FF8CFF" // rgb: 255, 140, 255
+
+/datum/reagent/drink/doctors_delight/on_mob_life(var/mob/living/M as mob)
+ if(!M) M = holder.my_atom
+ if(M.getToxLoss() && prob(20)) M.adjustToxLoss(-1)
+ ..()
+ return
+
+/datum/reagent/drink/berryjuice
+ name = "Berry Juice"
+ id = "berryjuice"
+ description = "A delicious blend of several different kinds of berries."
+ color = "#863333" // rgb: 134, 51, 51
+
+/datum/reagent/drink/poisonberryjuice
+ name = "Poison Berry Juice"
+ id = "poisonberryjuice"
+ description = "A tasty juice blended from various kinds of very deadly and toxic berries."
+ color = "#863353" // rgb: 134, 51, 83
+
+/datum/reagent/drink/poisonberryjuice/on_mob_life(var/mob/living/M as mob)
+ ..()
+ M.adjustToxLoss(1)
+ return
+
+/datum/reagent/drink/watermelonjuice
+ name = "Watermelon Juice"
+ id = "watermelonjuice"
+ description = "Delicious juice made from watermelon."
+ color = "#863333" // rgb: 134, 51, 51
+
+/datum/reagent/drink/lemonjuice
+ name = "Lemon Juice"
+ id = "lemonjuice"
+ description = "This juice is VERY sour."
+ color = "#863333" // rgb: 175, 175, 0
+
+/datum/reagent/drink/grapejuice
+ name = "Grape Juice"
+ id = "grapejuice"
+ description = "This juice is known to stain shirts."
+ color = "#993399" // rgb: 153, 51, 153
+
+/datum/reagent/drink/banana
+ name = "Banana Juice"
+ id = "banana"
+ description = "The raw essence of a banana."
+ color = "#863333" // rgb: 175, 175, 0
+
+/datum/reagent/drink/banana/on_mob_life(var/mob/living/M as mob)
+ M.nutrition += nutriment_factor
+ if(istype(M, /mob/living/carbon/human) && M.job in list("Clown"))
+ if(!M) M = holder.my_atom
+ M.heal_organ_damage(1,1)
+ M.nutrition += nutriment_factor
+ ..()
+ return
+ ..()
+
+/datum/reagent/drink/nothing
+ name = "Nothing"
+ id = "nothing"
+ description = "Absolutely nothing."
+
+/datum/reagent/drink/nothing/on_mob_life(var/mob/living/M as mob)
+ M.nutrition += nutriment_factor
+ if(istype(M, /mob/living/carbon/human) && M.job in list("Mime"))
+ if(!M) M = holder.my_atom
+ M.heal_organ_damage(1,1)
+ M.nutrition += nutriment_factor
+ ..()
+ return
+ ..()
+
+/datum/reagent/drink/potato_juice
+ name = "Potato Juice"
+ id = "potato"
+ description = "Juice of the potato. Bleh."
+ nutriment_factor = 2 * FOOD_METABOLISM
+ color = "#302000" // rgb: 48, 32, 0
+
+/datum/reagent/drink/milk
+ name = "Milk"
+ id = "milk"
+ description = "An opaque white liquid produced by the mammary glands of mammals."
+ color = "#DFDFDF" // rgb: 223, 223, 223
+
+/datum/reagent/drink/milk/on_mob_life(var/mob/living/M as mob)
+ if(M.getBruteLoss() && prob(20)) M.heal_organ_damage(1,0)
+ if(holder.has_reagent("capsaicin"))
+ holder.remove_reagent("capsaicin", 10*REAGENTS_METABOLISM)
+ ..()
+ return
+
+/datum/reagent/drink/milk/soymilk
+ name = "Soy Milk"
+ id = "soymilk"
+ description = "An opaque white liquid made from soybeans."
+ color = "#DFDFC7" // rgb: 223, 223, 199
+
+/datum/reagent/drink/milk/cream
+ name = "Cream"
+ id = "cream"
+ description = "The fatty, still liquid part of milk. Why don't you mix this with sum scotch, eh?"
+ color = "#DFD7AF" // rgb: 223, 215, 175
+
+/datum/reagent/drink/milk/chocolate_milk
+ name = "Chocolate milk"
+ id ="chocolate_milk"
+ description = "Chocolate-flavored milk, tastes like being a kid again."
+ color = "#85432C"
+
+/datum/reagent/drink/hot_coco
+ name = "Hot Chocolate"
+ id = "hot_coco"
+ description = "Made with love! And coco beans."
+ nutriment_factor = 2 * FOOD_METABOLISM
+ color = "#403010" // rgb: 64, 48, 16
+ adj_temp = 5
+
+/datum/reagent/drink/coffee
+ name = "Coffee"
+ id = "coffee"
+ description = "Coffee is a brewed drink prepared from roasted seeds, commonly called coffee beans, of the coffee plant."
+ color = "#482000" // rgb: 72, 32, 0
+ adj_dizzy = -5
+ adj_drowsy = -3
+ adj_sleepy = -2
+ adj_temp = 25
+ overdose_threshold = 45
+
+/datum/reagent/drink/coffee/on_mob_life(var/mob/living/M as mob)
+ if(adj_temp > 0 && holder.has_reagent("frostoil"))
+ holder.remove_reagent("frostoil", 10*REAGENTS_METABOLISM)
+ if(prob(50))
+ M.AdjustParalysis(-1)
+ M.AdjustStunned(-1)
+ M.AdjustWeakened(-1)
+ ..()
+ return
+
+/datum/reagent/drink/coffee/overdose_process(var/mob/living/M as mob)
+ if(volume > 45)
+ M.Jitter(5)
+
+ ..()
+ return
+
+/datum/reagent/drink/coffee/icecoffee
+ name = "Iced Coffee"
+ id = "icecoffee"
+ description = "Coffee and ice, refreshing and cool."
+ color = "#102838" // rgb: 16, 40, 56
+ adj_temp = -5
+
+/datum/reagent/drink/coffee/soy_latte
+ name = "Soy Latte"
+ id = "soy_latte"
+ description = "A nice and tasty beverage while you are reading your hippie books."
+ color = "#664300" // rgb: 102, 67, 0
+ adj_sleepy = 0
+ adj_temp = 5
+
+/datum/reagent/drink/coffee/soy_latte/on_mob_life(var/mob/living/M as mob)
+ ..()
+ M.sleeping = 0
+ if(M.getBruteLoss() && prob(20)) M.heal_organ_damage(1,0)
+ return
+
+/datum/reagent/drink/coffee/cafe_latte
+ name = "Cafe Latte"
+ id = "cafe_latte"
+ description = "A nice, strong and tasty beverage while you are reading."
+ color = "#664300" // rgb: 102, 67, 0
+ adj_sleepy = 0
+ adj_temp = 5
+
+/datum/reagent/drink/coffee/cafe_latte/on_mob_life(var/mob/living/M as mob)
+ ..()
+ M.sleeping = 0
+ if(M.getBruteLoss() && prob(20))
+ M.heal_organ_damage(1,0)
+ return
+
+/datum/reagent/drink/tea
+ name = "Tea"
+ id = "tea"
+ description = "Tasty black tea: It has antioxidants. It's good for you!"
+ color = "#101000" // rgb: 16, 16, 0
+ adj_dizzy = -2
+ adj_drowsy = -1
+ adj_sleepy = -3
+ adj_temp = 20
+
+/datum/reagent/drink/tea/on_mob_life(var/mob/living/M as mob)
+ ..()
+ if(M.getToxLoss() && prob(20))
+ M.adjustToxLoss(-1)
+ return
+
+/datum/reagent/drink/tea/icetea
+ name = "Iced Tea"
+ id = "icetea"
+ description = "No relation to a certain rap artist/ actor."
+ color = "#104038" // rgb: 16, 64, 56
+ adj_temp = -5
+
+/datum/reagent/drink/kahlua
+ name = "Kahlua"
+ id = "kahlua"
+ description = "A widely known, Mexican coffee-flavoured liqueur. In production since 1936!"
+ color = "#664300" // rgb: 102, 67, 0
+ adj_dizzy = -5
+ adj_drowsy = -3
+ adj_sleepy = -2
+
+/datum/reagent/drink/kahlua/on_mob_life(var/mob/living/M as mob)
+ ..()
+ M.Jitter(5)
+ return
\ No newline at end of file
diff --git a/code/modules/reagents/oldchem/reagents/drink/reagents_drink_base.dm b/code/modules/reagents/oldchem/reagents/drink/reagents_drink_base.dm
new file mode 100644
index 00000000000..3bc3b364929
--- /dev/null
+++ b/code/modules/reagents/oldchem/reagents/drink/reagents_drink_base.dm
@@ -0,0 +1,26 @@
+/datum/reagent/drink
+ name = "Drink"
+ id = "drink"
+ description = "Uh, some kind of drink."
+ reagent_state = LIQUID
+ nutriment_factor = 1 * REAGENTS_METABOLISM
+ color = "#E78108" // rgb: 231, 129, 8
+ var/adj_dizzy = 0
+ var/adj_drowsy = 0
+ var/adj_sleepy = 0
+ var/adj_temp = 0
+
+/datum/reagent/drink/on_mob_life(var/mob/living/M as mob)
+ if(!M) M = holder.my_atom
+ M.nutrition += nutriment_factor
+ holder.remove_reagent(src.id, FOOD_METABOLISM)
+ if (adj_dizzy) M.dizziness = max(0,M.dizziness + adj_dizzy)
+ if (adj_drowsy) M.drowsyness = max(0,M.drowsyness + adj_drowsy)
+ if (adj_sleepy) M.sleeping = max(0,M.sleeping + adj_sleepy)
+ if (adj_temp)
+ if (M.bodytemperature < 310)//310 is the normal bodytemp. 310.055
+ M.bodytemperature = min(310, M.bodytemperature + (25 * TEMPERATURE_DAMAGE_COEFFICIENT))
+ // Drinks should be used up faster than other reagents.
+ holder.remove_reagent(src.id, FOOD_METABOLISM)
+ ..()
+ return
diff --git a/code/modules/reagents/oldchem/reagents/drink/reagents_drink_cold.dm b/code/modules/reagents/oldchem/reagents/drink/reagents_drink_cold.dm
new file mode 100644
index 00000000000..e9acef2da7d
--- /dev/null
+++ b/code/modules/reagents/oldchem/reagents/drink/reagents_drink_cold.dm
@@ -0,0 +1,141 @@
+/datum/reagent/drink/cold
+ name = "Cold drink"
+ adj_temp = -5
+
+/datum/reagent/drink/cold/tonic
+ name = "Tonic Water"
+ id = "tonic"
+ description = "It tastes strange but at least the quinine keeps the Space Malaria at bay."
+ color = "#664300" // rgb: 102, 67, 0
+ adj_dizzy = -5
+ adj_drowsy = -3
+ adj_sleepy = -2
+
+/datum/reagent/drink/cold/sodawater
+ name = "Soda Water"
+ id = "sodawater"
+ description = "A can of club soda. Why not make a scotch and soda?"
+ color = "#619494" // rgb: 97, 148, 148
+ adj_dizzy = -5
+ adj_drowsy = -3
+
+/datum/reagent/drink/cold/ice
+ name = "Ice"
+ id = "ice"
+ description = "Frozen water, your dentist wouldn't like you chewing this."
+ reagent_state = SOLID
+ color = "#619494" // rgb: 97, 148, 148
+
+/datum/reagent/drink/cold/space_cola
+ name = "Cola"
+ id = "cola"
+ description = "A refreshing beverage."
+ reagent_state = LIQUID
+ color = "#100800" // rgb: 16, 8, 0
+ adj_drowsy = -3
+
+/datum/reagent/drink/cold/nuka_cola
+ name = "Nuka Cola"
+ id = "nuka_cola"
+ description = "Cola, cola never changes."
+ color = "#100800" // rgb: 16, 8, 0
+ adj_sleepy = -2
+
+/datum/reagent/drink/cold/nuka_cola/on_mob_life(var/mob/living/M as mob)
+ M.Jitter(20)
+ M.druggy = max(M.druggy, 30)
+ M.dizziness +=5
+ M.drowsyness = 0
+ M.status_flags |= GOTTAGOFAST
+ ..()
+ return
+
+/datum/reagent/drink/cold/spacemountainwind
+ name = "Space Mountain Wind"
+ id = "spacemountainwind"
+ description = "Blows right through you like a space wind."
+ color = "#102000" // rgb: 16, 32, 0
+ adj_drowsy = -7
+ adj_sleepy = -1
+
+/datum/reagent/drink/cold/dr_gibb
+ name = "Dr. Gibb"
+ id = "dr_gibb"
+ description = "A delicious blend of 42 different flavours"
+ color = "#102000" // rgb: 16, 32, 0
+ adj_drowsy = -6
+
+/datum/reagent/drink/cold/space_up
+ name = "Space-Up"
+ id = "space_up"
+ description = "Tastes like a hull breach in your mouth."
+ color = "#202800" // rgb: 32, 40, 0
+ adj_temp = -8
+
+/datum/reagent/drink/cold/lemon_lime
+ name = "Lemon Lime"
+ description = "A tangy substance made of 0.5% natural citrus!"
+ id = "lemon_lime"
+ color = "#878F00" // rgb: 135, 40, 0
+ adj_temp = -8
+
+/datum/reagent/drink/cold/lemonade
+ name = "Lemonade"
+ description = "Oh the nostalgia..."
+ id = "lemonade"
+ color = "#FFFF00" // rgb: 255, 255, 0
+
+/datum/reagent/drink/cold/kiraspecial
+ name = "Kira Special"
+ description = "Long live the guy who everyone had mistaken for a girl. Baka!"
+ id = "kiraspecial"
+ color = "#CCCC99" // rgb: 204, 204, 153
+
+/datum/reagent/drink/cold/brownstar
+ name = "Brown Star"
+ description = "Its not what it sounds like..."
+ id = "brownstar"
+ color = "#9F3400" // rgb: 159, 052, 000
+ adj_temp = - 2
+
+/datum/reagent/drink/cold/milkshake
+ name = "Milkshake"
+ description = "Glorious brainfreezing mixture."
+ id = "milkshake"
+ color = "#AEE5E4" // rgb" 174, 229, 228
+ adj_temp = -9
+
+/datum/reagent/drink/cold/milkshake/on_mob_life(var/mob/living/M as mob)
+ if(!M) M = holder.my_atom
+ if(!data) data = 1
+ switch(data)
+ if(1 to 15)
+ M.bodytemperature -= 5 * TEMPERATURE_DAMAGE_COEFFICIENT
+ if(holder.has_reagent("capsaicin"))
+ holder.remove_reagent("capsaicin", 5)
+ if(istype(M, /mob/living/carbon/slime))
+ M.bodytemperature -= rand(5,20)
+ if(15 to 25)
+ M.bodytemperature -= 10 * TEMPERATURE_DAMAGE_COEFFICIENT
+ if(istype(M, /mob/living/carbon/slime))
+ M.bodytemperature -= rand(10,20)
+ if(25 to INFINITY)
+ M.bodytemperature -= 15 * TEMPERATURE_DAMAGE_COEFFICIENT
+ if(prob(1)) M.emote("shiver")
+ if(istype(M, /mob/living/carbon/slime))
+ M.bodytemperature -= rand(15,20)
+ data++
+ holder.remove_reagent(src.id, FOOD_METABOLISM)
+ ..()
+ return
+
+/datum/reagent/drink/cold/rewriter
+ name = "Rewriter"
+ description = "The secert of the sanctuary of the Libarian..."
+ id = "rewriter"
+ color = "#485000" // rgb:72, 080, 0
+
+/datum/reagent/drink/cold/rewriter/on_mob_life(var/mob/living/M as mob)
+ ..()
+ M.Jitter(5)
+ return
\ No newline at end of file
diff --git a/code/modules/reagents/oldchem/reagents/reagents_admin.dm b/code/modules/reagents/oldchem/reagents/reagents_admin.dm
new file mode 100644
index 00000000000..dd9e73a96b1
--- /dev/null
+++ b/code/modules/reagents/oldchem/reagents/reagents_admin.dm
@@ -0,0 +1,54 @@
+/datum/reagent/adminordrazine //An OP chemical for admins
+ name = "Adminordrazine"
+ id = "adminordrazine"
+ description = "It's magic. We don't have to explain it."
+ reagent_state = LIQUID
+ color = "#C8A5DC" // rgb: 200, 165, 220
+ process_flags = ORGANIC | SYNTHETIC //Adminbuse knows no bounds!
+
+/datum/reagent/adminordrazine/on_mob_life(var/mob/living/carbon/M as mob)
+ if(!M) M = holder.my_atom ///This can even heal dead people.
+ for(var/datum/reagent/R in M.reagents.reagent_list)
+ if(R != src)
+ M.reagents.remove_reagent(R.id,5)
+ M.setCloneLoss(0)
+ M.setOxyLoss(0)
+ M.radiation = 0
+ M.heal_organ_damage(5,5)
+ M.adjustToxLoss(-5)
+ M.hallucination = 0
+ M.setBrainLoss(0)
+ M.disabilities = 0
+ M.sdisabilities = 0
+ M.eye_blurry = 0
+ M.eye_blind = 0
+ if(ishuman(M))
+ var/mob/living/carbon/human/H = M
+ var/obj/item/organ/eyes/E = H.internal_organs_by_name["eyes"]
+ if(istype(E))
+ E.damage = max(E.damage-5 , 0)
+ M.SetWeakened(0)
+ M.SetStunned(0)
+ M.SetParalysis(0)
+ M.silent = 0
+ M.dizziness = 0
+ M.drowsyness = 0
+ M.stuttering = 0
+ M.slurring = 0
+ M.confused = 0
+ M.sleeping = 0
+ M.jitteriness = 0
+ if(istype(M,/mob/living/carbon)) // make sure to only use it on carbon mobs
+ var/mob/living/carbon/C = M
+ if(C.virus2.len)
+ for (var/ID in C.virus2)
+ var/datum/disease2/disease/V = C.virus2[ID]
+ C.antibodies |= V.antigen
+ ..()
+ return
+
+
+/datum/reagent/adminordrazine/nanites
+ name = "Nanites"
+ id = "nanites"
+ description = "Nanomachines that aid in rapid cellular regeneration."
\ No newline at end of file
diff --git a/code/modules/reagents/oldchem/reagents/reagents_drugs.dm b/code/modules/reagents/oldchem/reagents/reagents_drugs.dm
new file mode 100644
index 00000000000..a00da8f283a
--- /dev/null
+++ b/code/modules/reagents/oldchem/reagents/reagents_drugs.dm
@@ -0,0 +1,95 @@
+/datum/reagent/serotrotium
+ name = "Serotrotium"
+ id = "serotrotium"
+ description = "A chemical compound that promotes concentrated production of the serotonin neurotransmitter in humans."
+ reagent_state = LIQUID
+ color = "#202040" // rgb: 20, 20, 40
+
+/datum/reagent/serotrotium/on_mob_life(var/mob/living/M as mob)
+ if(ishuman(M))
+ if(prob(7)) M.emote(pick("twitch","drool","moan","gasp"))
+ holder.remove_reagent(src.id, 0.25 * REAGENTS_METABOLISM)
+ return
+
+
+/datum/reagent/lithium
+ name = "Lithium"
+ id = "lithium"
+ description = "A chemical element."
+ reagent_state = SOLID
+ color = "#808080" // rgb: 128, 128, 128
+
+/datum/reagent/lithium/on_mob_life(var/mob/living/M as mob)
+ if(!M) M = holder.my_atom
+ if(M.canmove && !M.restrained() && istype(M.loc, /turf/space))
+ step(M, pick(cardinal))
+ if(prob(5)) M.emote(pick("twitch","drool","moan"))
+ ..()
+ return
+
+
+/datum/reagent/hippies_delight
+ name = "Hippie's Delight"
+ id = "hippiesdelight"
+ description = "You just don't get it maaaan."
+ reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
+/datum/reagent/hippies_delight/on_mob_life(var/mob/living/M as mob)
+ if(!M) M = holder.my_atom
+ M.druggy = max(M.druggy, 50)
+ if(!data) data = 1
+ switch(data)
+ if(1 to 5)
+ if (!M.stuttering) M.stuttering = 1
+ M.Dizzy(10)
+ if(prob(10)) M.emote(pick("twitch","giggle"))
+ if(5 to 10)
+ if (!M.stuttering) M.stuttering = 1
+ M.Jitter(20)
+ M.Dizzy(20)
+ M.druggy = max(M.druggy, 45)
+ if(prob(20)) M.emote(pick("twitch","giggle"))
+ if (10 to INFINITY)
+ if (!M.stuttering) M.stuttering = 1
+ M.Jitter(40)
+ M.Dizzy(40)
+ M.druggy = max(M.druggy, 60)
+ if(prob(30)) M.emote(pick("twitch","giggle"))
+ holder.remove_reagent(src.id, 0.2)
+ data++
+ ..()
+ return
+
+
+/datum/reagent/lsd
+ name = "Lysergic acid diethylamide"
+ id = "lsd"
+ description = "A highly potent hallucinogenic substance. Far out, maaaan."
+ reagent_state = LIQUID
+ color = "#0000D8"
+
+/datum/reagent/lsd/on_mob_life(var/mob/living/M)
+ if(!M) M = holder.my_atom
+ M.hallucination += 10
+ ..()
+ return
+
+
+/datum/reagent/space_drugs
+ name = "Space drugs"
+ id = "space_drugs"
+ description = "An illegal chemical compound used as drug."
+ reagent_state = LIQUID
+ color = "#9087A2"
+ metabolization_rate = 0.2
+
+/datum/reagent/space_drugs/on_mob_life(var/mob/living/M as mob)
+ if(!M) M = holder.my_atom
+ M.druggy = max(M.druggy, 15)
+ if(isturf(M.loc) && !istype(M.loc, /turf/space))
+ if(M.canmove && !M.restrained())
+ if(prob(10)) step(M, pick(cardinal))
+ if(prob(7)) M.emote(pick("twitch","drool","moan","giggle"))
+ ..()
+ return
\ No newline at end of file
diff --git a/code/modules/reagents/oldchem/reagents/reagents_flammable.dm b/code/modules/reagents/oldchem/reagents/reagents_flammable.dm
new file mode 100644
index 00000000000..4603aa6c238
--- /dev/null
+++ b/code/modules/reagents/oldchem/reagents/reagents_flammable.dm
@@ -0,0 +1,136 @@
+/datum/reagent/fuel
+ name = "Welding fuel"
+ id = "fuel"
+ description = "A highly flammable blend of basic hydrocarbons, mostly Acetylene. Useful for both welding and organic chemistry, and can be fortified into a heavier oil."
+ reagent_state = LIQUID
+ color = "#060606"
+
+/datum/reagent/fuel/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)//Splashing people with welding fuel to make them easy to ignite!
+ if(!istype(M, /mob/living))
+ return
+ if(method == TOUCH)
+ M.adjust_fire_stacks(volume / 10)
+ return
+ ..()
+
+/datum/reagent/fuel/on_mob_life(var/mob/living/M as mob)
+ if(!M) M = holder.my_atom
+ M.adjustToxLoss(1)
+ ..()
+ return
+
+/datum/reagent/fuel/unholywater //if you somehow managed to extract this from someone, dont splash it on yourself and have a smoke
+ name = "Unholy Water"
+ id = "unholywater"
+ description = "Something that shouldn't exist on this plane of existance."
+ process_flags = ORGANIC | SYNTHETIC //ethereal means everything processes it.
+
+/datum/reagent/fuel/unholywater/on_mob_life(mob/living/M)
+ M.adjustBrainLoss(3)
+ if(iscultist(M))
+ M.status_flags |= GOTTAGOFAST
+ M.drowsyness = max(M.drowsyness-5, 0)
+ M.AdjustParalysis(-2)
+ M.AdjustStunned(-2)
+ M.AdjustWeakened(-2)
+ else
+ M.adjustToxLoss(2)
+ M.adjustFireLoss(2)
+ M.adjustOxyLoss(2)
+ M.adjustBruteLoss(2)
+ holder.remove_reagent(src.id, 1)
+
+
+/datum/reagent/incendiary_fuel //copy-pasta of welding fuel; allow incendiary grenades to function better without the headache of people spraying fuel everywhere with regular welding fuel.
+ name = "Incendiary fuel"
+ id = "incendiaryfuel"
+ description = "A highly flammable compound used in incendiary grenades."
+ reagent_state = LIQUID
+ color = "#660000" // rgb: 102, 0, 0
+
+/datum/reagent/incendiary_fuel/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)//Splashing people with welding fuel to make them easy to ignite!
+ if(!istype(M, /mob/living))
+ return
+ if(method == TOUCH)
+ M.adjust_fire_stacks(volume / 10)
+ return
+
+/datum/reagent/incendiary_fuel/reaction_obj(var/obj/O, var/volume)
+ var/turf/the_turf = get_turf(O)
+ if(!the_turf)
+ return //No sense trying to start a fire if you don't have a turf to set on fire. --NEO
+ new /obj/effect/decal/cleanable/liquid_fuel(the_turf, volume)
+
+/datum/reagent/incendiary_fuel/reaction_turf(var/turf/T, var/volume)
+ new /obj/effect/decal/cleanable/liquid_fuel(T, volume)
+ return
+
+/datum/reagent/incendiary_fuel/on_mob_life(var/mob/living/M as mob)
+ if(!M) M = holder.my_atom
+ M.adjustToxLoss(1)
+ ..()
+ return
+
+
+/datum/reagent/plasma
+ name = "Plasma"
+ id = "plasma"
+ description = "The liquid phase of an unusual extraterrestrial compound."
+ reagent_state = LIQUID
+ color = "#7A2B94"
+
+/datum/reagent/plasma/on_mob_life(var/mob/living/M as mob)
+ if(!M) M = holder.my_atom
+ M.adjustToxLoss(1*REM)
+ if(holder.has_reagent("epinephrine"))
+ holder.remove_reagent("epinephrine", 2)
+ ..()
+ return
+
+/datum/reagent/plasma/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)//Splashing people with plasma is stronger than fuel!
+ if(!istype(M, /mob/living))
+ return
+ if(method == TOUCH)
+ M.adjust_fire_stacks(volume / 5)
+ ..()
+ return
+
+
+/datum/reagent/thermite
+ name = "Thermite"
+ id = "thermite"
+ description = "Thermite produces an aluminothermic reaction known as a thermite reaction. Can be used to melt walls."
+ reagent_state = SOLID
+ color = "#673910" // rgb: 103, 57, 16
+ process_flags = ORGANIC | SYNTHETIC
+
+/datum/reagent/thermite/reaction_turf(var/turf/T, var/volume)
+ src = null
+ if(volume >= 5)
+ if(istype(T, /turf/simulated/wall))
+ T:thermite = 1
+ T.overlays.Cut()
+ T.overlays = image('icons/effects/effects.dmi',icon_state = "thermite")
+ return
+
+/datum/reagent/thermite/on_mob_life(var/mob/living/M as mob)
+ if(!M) M = holder.my_atom
+ M.adjustFireLoss(1)
+ ..()
+ return
+
+
+/datum/reagent/glycerol
+ name = "Glycerol"
+ id = "glycerol"
+ description = "Glycerol is a simple polyol compound. Glycerol is sweet-tasting and of low toxicity."
+ reagent_state = LIQUID
+ color = "#808080" // rgb: 128, 128, 128
+
+
+/datum/reagent/nitroglycerin
+ name = "Nitroglycerin"
+ id = "nitroglycerin"
+ description = "Nitroglycerin is a heavy, colorless, oily, explosive liquid obtained by nitrating glycerol."
+ reagent_state = LIQUID
+ color = "#808080" // rgb: 128, 128, 128
\ No newline at end of file
diff --git a/code/modules/reagents/oldchem/reagents/reagents_food.dm b/code/modules/reagents/oldchem/reagents/reagents_food.dm
new file mode 100644
index 00000000000..485a42e7ca7
--- /dev/null
+++ b/code/modules/reagents/oldchem/reagents/reagents_food.dm
@@ -0,0 +1,425 @@
+/////////////////////////Food Reagents////////////////////////////
+// Part of the food code. Nutriment is used instead of the old "heal_amt" code. Also is where all the food
+// condiments, additives, and such go.
+/datum/reagent/nutriment // Pure nutriment, universally digestable and thus slightly less effective
+ name = "Nutriment"
+ id = "nutriment"
+ description = "A questionable mixture of various pure nutrients commonly found in processed foods."
+ reagent_state = SOLID
+ nutriment_factor = 12 * REAGENTS_METABOLISM
+ color = "#664330" // rgb: 102, 67, 48
+
+/datum/reagent/nutriment/on_mob_life(var/mob/living/M as mob)
+ if(!M) M = holder.my_atom
+ if(!(M.mind in ticker.mode.vampires))
+ if(ishuman(M))
+ var/mob/living/carbon/human/H = M
+ if(H.species && H.species.dietflags) //Make sure the species has it's dietflag set, otherwise it can't digest any nutrients
+ H.nutrition += nutriment_factor // For hunger and fatness
+ if(prob(50)) M.heal_organ_damage(1,0)
+ if(istype(M,/mob/living/simple_animal)) //Any nutrients can heal simple animals
+ if(prob(50)) M.heal_organ_damage(1,0)
+ ..()
+ return
+
+
+/datum/reagent/protein // Meat-based protein, digestable by carnivores and omnivores, worthless to herbivores
+ name = "Protein"
+ id = "protein"
+ description = "Various essential proteins and fats commonly found in animal flesh and blood."
+ reagent_state = SOLID
+ nutriment_factor = 15 * REAGENTS_METABOLISM
+ color = "#664330" // rgb: 102, 67, 48
+
+/datum/reagent/protein/on_mob_life(var/mob/living/M as mob)
+ if(!M) M = holder.my_atom
+ if(!(M.mind in ticker.mode.vampires))
+ if(ishuman(M))
+ var/mob/living/carbon/human/H = M
+ if(H.species && H.species.dietflags && !(H.species.dietflags & DIET_HERB)) //Make sure the species has it's dietflag set, and that it is not a herbivore
+ H.nutrition += nutriment_factor // For hunger and fatness
+ if(prob(50)) M.heal_organ_damage(1,0)
+ if(istype(M,/mob/living/simple_animal)) //Any nutrients can heal simple animals
+ if(prob(50)) M.heal_organ_damage(1,0)
+ ..()
+ return
+
+
+/datum/reagent/plantmatter // Plant-based biomatter, digestable by herbivores and omnivores, worthless to carnivores
+ name = "Plant-matter"
+ id = "plantmatter"
+ description = "Vitamin-rich fibers and natural sugars commonly found in fresh produce."
+ reagent_state = SOLID
+ nutriment_factor = 15 * REAGENTS_METABOLISM
+ color = "#664330" // rgb: 102, 67, 48
+
+/datum/reagent/plantmatter/on_mob_life(var/mob/living/M as mob)
+ if(!M) M = holder.my_atom
+ if(!(M.mind in ticker.mode.vampires))
+ if(ishuman(M))
+ var/mob/living/carbon/human/H = M
+ if(H.species && H.species.dietflags && !(H.species.dietflags & DIET_CARN)) //Make sure the species has it's dietflag set, and that it is not a carnivore
+ H.nutrition += nutriment_factor // For hunger and fatness
+ if(prob(50)) M.heal_organ_damage(1,0)
+ if(istype(M,/mob/living/simple_animal)) //Any nutrients can heal simple animals
+ if(prob(50)) M.heal_organ_damage(1,0)
+ ..()
+ return
+
+
+/datum/reagent/soysauce
+ name = "Soysauce"
+ id = "soysauce"
+ description = "A salty sauce made from the soy plant."
+ reagent_state = LIQUID
+ nutriment_factor = 2 * REAGENTS_METABOLISM
+ color = "#792300" // rgb: 121, 35, 0
+
+/datum/reagent/ketchup
+ name = "Ketchup"
+ id = "ketchup"
+ description = "Ketchup, catsup, whatever. It's tomato paste."
+ reagent_state = LIQUID
+ nutriment_factor = 5 * REAGENTS_METABOLISM
+ color = "#731008" // rgb: 115, 16, 8
+
+
+/datum/reagent/capsaicin
+ name = "Capsaicin Oil"
+ id = "capsaicin"
+ description = "This is what makes chilis hot."
+ reagent_state = LIQUID
+ color = "#B31008" // rgb: 179, 16, 8
+
+/datum/reagent/capsaicin/on_mob_life(var/mob/living/M as mob)
+ if(!M) M = holder.my_atom
+ if(!data) data = 1
+ switch(data)
+ if(1 to 15)
+ M.bodytemperature += 5 * TEMPERATURE_DAMAGE_COEFFICIENT
+ if(holder.has_reagent("frostoil"))
+ holder.remove_reagent("frostoil", 5)
+ if(istype(M, /mob/living/carbon/slime))
+ M.bodytemperature += rand(5,20)
+ if(15 to 25)
+ M.bodytemperature += 10 * TEMPERATURE_DAMAGE_COEFFICIENT
+ if(istype(M, /mob/living/carbon/slime))
+ M.bodytemperature += rand(10,20)
+ if(25 to INFINITY)
+ M.bodytemperature += 15 * TEMPERATURE_DAMAGE_COEFFICIENT
+ if(istype(M, /mob/living/carbon/slime))
+ M.bodytemperature += rand(15,20)
+ holder.remove_reagent(src.id, FOOD_METABOLISM)
+ data++
+ ..()
+ return
+
+
+/datum/reagent/sodiumchloride
+ name = "Salt"
+ id = "sodiumchloride"
+ description = "Sodium chloride, common table salt."
+ reagent_state = SOLID
+ color = "#B1B0B0"
+
+/datum/reagent/sodiumchloride/overdose_process(var/mob/living/M as mob)
+ if(volume > 100)
+ if(prob(70))
+ M.adjustBrainLoss(1)
+ if(prob(8))
+ M.adjustToxLoss(rand(1,2))
+ ..()
+ return
+
+
+/datum/reagent/blackpepper
+ name = "Black Pepper"
+ id = "blackpepper"
+ description = "A powder ground from peppercorns. *AAAACHOOO*"
+ reagent_state = SOLID
+ // no color (ie, black)
+
+/datum/reagent/coco
+ name = "Coco Powder"
+ id = "coco"
+ description = "A fatty, bitter paste made from coco beans."
+ reagent_state = SOLID
+ nutriment_factor = 5 * REAGENTS_METABOLISM
+ color = "#302000" // rgb: 48, 32, 0
+
+/datum/reagent/coco/on_mob_life(var/mob/living/M as mob)
+ M.nutrition += nutriment_factor
+ ..()
+ return
+
+/datum/reagent/hot_coco
+ name = "Hot Chocolate"
+ id = "hot_coco"
+ description = "Made with love! And coco beans."
+ reagent_state = LIQUID
+ nutriment_factor = 2 * REAGENTS_METABOLISM
+ color = "#403010" // rgb: 64, 48, 16
+
+/datum/reagent/hot_coco/on_mob_life(var/mob/living/M as mob)
+ if (M.bodytemperature < 310)//310 is the normal bodytemp. 310.055
+ M.bodytemperature = min(310, M.bodytemperature + (5 * TEMPERATURE_DAMAGE_COEFFICIENT))
+ M.nutrition += nutriment_factor
+ ..()
+ return
+
+
+/datum/reagent/psilocybin
+ name = "Psilocybin"
+ id = "psilocybin"
+ description = "A strong psycotropic derived from certain species of mushroom."
+ color = "#E700E7" // rgb: 231, 0, 231
+
+/datum/reagent/psilocybin/on_mob_life(var/mob/living/M as mob)
+ if(!M) M = holder.my_atom
+ M.druggy = max(M.druggy, 30)
+ if(!data) data = 1
+ switch(data)
+ if(1 to 5)
+ if (!M.stuttering) M.stuttering = 1
+ M.Dizzy(5)
+ if(prob(10)) M.emote(pick("twitch","giggle"))
+ if(5 to 10)
+ if (!M.stuttering) M.stuttering = 1
+ M.Jitter(10)
+ M.Dizzy(10)
+ M.druggy = max(M.druggy, 35)
+ if(prob(20)) M.emote(pick("twitch","giggle"))
+ if (10 to INFINITY)
+ if (!M.stuttering) M.stuttering = 1
+ M.Jitter(20)
+ M.Dizzy(20)
+ M.druggy = max(M.druggy, 40)
+ if(prob(30)) M.emote(pick("twitch","giggle"))
+ data++
+ ..()
+ return
+
+
+/datum/reagent/sprinkles
+ name = "Sprinkles"
+ id = "sprinkles"
+ description = "Multi-colored little bits of sugar, commonly found on donuts. Loved by cops."
+ nutriment_factor = 1 * REAGENTS_METABOLISM
+ color = "#FF00FF" // rgb: 255, 0, 255
+
+/datum/reagent/sprinkles/on_mob_life(var/mob/living/M as mob)
+ M.nutrition += nutriment_factor
+ if(istype(M, /mob/living/carbon/human) && M.job in list("Security Officer", "Head of Security", "Detective", "Warden"))
+ if(!M) M = holder.my_atom
+ M.heal_organ_damage(1,1)
+ M.nutrition += nutriment_factor
+ ..()
+ return
+ ..()
+
+
+/datum/reagent/cornoil
+ name = "Corn Oil"
+ id = "cornoil"
+ description = "An oil derived from various types of corn."
+ reagent_state = LIQUID
+ nutriment_factor = 20 * REAGENTS_METABOLISM
+ color = "#302000" // rgb: 48, 32, 0
+
+/datum/reagent/cornoil/on_mob_life(var/mob/living/M as mob)
+ M.nutrition += nutriment_factor
+ ..()
+ return
+
+/datum/reagent/cornoil/reaction_turf(var/turf/simulated/T, var/volume)
+ if (!istype(T)) return
+ src = null
+ if(volume >= 3)
+ if(T.wet >= 1) return
+ T.wet = 1
+ if(T.wet_overlay)
+ T.overlays -= T.wet_overlay
+ T.wet_overlay = null
+ T.wet_overlay = image('icons/effects/water.dmi',T,"wet_floor")
+ T.overlays += T.wet_overlay
+
+ spawn(800)
+ if (!istype(T)) return
+ if(T.wet >= 2) return
+ T.wet = 0
+ if(T.wet_overlay)
+ T.overlays -= T.wet_overlay
+ T.wet_overlay = null
+ var/hotspot = (locate(/obj/effect/hotspot) in T)
+ if(hotspot)
+ var/datum/gas_mixture/lowertemp = T.remove_air( T:air:total_moles() )
+ lowertemp.temperature = max( min(lowertemp.temperature-2000,lowertemp.temperature / 2) ,0)
+ lowertemp.react()
+ T.assume_air(lowertemp)
+ qdel(hotspot)
+
+
+/datum/reagent/enzyme
+ name = "Denatured Enzyme"
+ id = "enzyme"
+ description = "Heated beyond usefulness, this enzyme is now worthless."
+ reagent_state = LIQUID
+ color = "#282314" // rgb: 54, 94, 48
+
+
+/datum/reagent/dry_ramen
+ name = "Dry Ramen"
+ id = "dry_ramen"
+ description = "Space age food, since August 25, 1958. Contains dried noodles, vegetables, and chemicals that boil in contact with water."
+ reagent_state = SOLID
+ nutriment_factor = 1 * REAGENTS_METABOLISM
+ color = "#302000" // rgb: 48, 32, 0
+
+/datum/reagent/dry_ramen/on_mob_life(var/mob/living/M as mob)
+ M.nutrition += nutriment_factor
+ ..()
+ return
+
+
+/datum/reagent/hot_ramen
+ name = "Hot Ramen"
+ id = "hot_ramen"
+ description = "The noodles are boiled, the flavors are artificial, just like being back in school."
+ reagent_state = LIQUID
+ nutriment_factor = 5 * REAGENTS_METABOLISM
+ color = "#302000" // rgb: 48, 32, 0
+
+/datum/reagent/hot_ramen/on_mob_life(var/mob/living/M as mob)
+ M.nutrition += nutriment_factor
+ if (M.bodytemperature < 310)//310 is the normal bodytemp. 310.055
+ M.bodytemperature = min(310, M.bodytemperature + (10 * TEMPERATURE_DAMAGE_COEFFICIENT))
+ ..()
+ return
+
+
+/datum/reagent/hell_ramen
+ name = "Hell Ramen"
+ id = "hell_ramen"
+ description = "The noodles are boiled, the flavors are artificial, just like being back in school."
+ reagent_state = LIQUID
+ nutriment_factor = 5 * REAGENTS_METABOLISM
+ color = "#302000" // rgb: 48, 32, 0
+
+/datum/reagent/hell_ramen/on_mob_life(var/mob/living/M as mob)
+ M.nutrition += nutriment_factor
+ M.bodytemperature += 10 * TEMPERATURE_DAMAGE_COEFFICIENT
+ ..()
+ return
+
+
+/datum/reagent/flour
+ name = "flour"
+ id = "flour"
+ description = "This is what you rub all over yourself to pretend to be a ghost."
+ reagent_state = SOLID
+ nutriment_factor = 1 * REAGENTS_METABOLISM
+ color = "#FFFFFF" // rgb: 0, 0, 0
+
+/datum/reagent/flour/on_mob_life(var/mob/living/M as mob)
+ M.nutrition += nutriment_factor
+ ..()
+ return
+
+/datum/reagent/flour/reaction_turf(var/turf/T, var/volume)
+ src = null
+ if(!istype(T, /turf/space))
+ new /obj/effect/decal/cleanable/flour(T)
+
+
+/datum/reagent/rice
+ name = "Rice"
+ id = "rice"
+ description = "Enjoy the great taste of nothing."
+ reagent_state = SOLID
+ nutriment_factor = 1 * REAGENTS_METABOLISM
+ color = "#FFFFFF" // rgb: 0, 0, 0
+
+/datum/reagent/rice/on_mob_life(var/mob/living/M as mob)
+ M.nutrition += nutriment_factor
+ ..()
+ return
+
+
+/datum/reagent/cherryjelly
+ name = "Cherry Jelly"
+ id = "cherryjelly"
+ description = "Totally the best. Only to be spread on foods with excellent lateral symmetry."
+ reagent_state = LIQUID
+ nutriment_factor = 1 * REAGENTS_METABOLISM
+ color = "#801E28" // rgb: 128, 30, 40
+
+/datum/reagent/cherryjelly/on_mob_life(var/mob/living/M as mob)
+ M.nutrition += nutriment_factor
+ ..()
+ return
+
+
+/datum/reagent/toxin/coffeepowder
+ name = "Coffee Grounds"
+ id = "coffeepowder"
+ description = "Finely ground Coffee beans, used to make coffee."
+ reagent_state = SOLID
+ color = "#5B2E0D" // rgb: 91, 46, 13
+
+/datum/reagent/toxin/teapowder
+ name = "Ground Tea Leaves"
+ id = "teapowder"
+ description = "Finely shredded Tea leaves, used for making tea."
+ reagent_state = SOLID
+ color = "#7F8400" // rgb: 127, 132, 0
+
+//Reagents used for plant fertilizers.
+/datum/reagent/toxin/fertilizer
+ name = "fertilizer"
+ id = "fertilizer"
+ description = "A chemical mix good for growing plants with."
+ reagent_state = LIQUID
+// toxpwr = 0.2 //It's not THAT poisonous.
+ color = "#664330" // rgb: 102, 67, 48
+
+/datum/reagent/toxin/fertilizer/eznutrient
+ name = "EZ Nutrient"
+ id = "eznutrient"
+
+/datum/reagent/toxin/fertilizer/left4zed
+ name = "Left-4-Zed"
+ id = "left4zed"
+
+/datum/reagent/toxin/fertilizer/robustharvest
+ name = "Robust Harvest"
+ id = "robustharvest"
+
+
+/datum/reagent/sugar
+ name = "Sugar"
+ id = "sugar"
+ description = "The organic compound commonly known as table sugar and sometimes called saccharose. This white, odorless, crystalline powder has a pleasing, sweet taste."
+ reagent_state = SOLID
+ color = "#FFFFFF" // rgb: 255, 255, 255
+ overdose_threshold = 200 // Hyperglycaemic shock
+
+/datum/reagent/sugar/on_mob_life(var/mob/living/M as mob)
+ if(prob(4))
+ M.reagents.add_reagent("epinephrine", 1.2)
+ if(prob(50))
+ M.AdjustParalysis(-1)
+ M.AdjustStunned(-1)
+ M.AdjustWeakened(-1)
+ if(current_cycle >= 90)
+ M.jitteriness += 10
+ ..()
+ return
+
+/datum/reagent/sugar/overdose_process(var/mob/living/M as mob)
+ if(volume > 200)
+ M << "You pass out from hyperglycemic shock!"
+ M.Paralyse(1)
+ if(prob(8))
+ M.adjustToxLoss(rand(1,2))
+ ..()
+ return
diff --git a/code/modules/reagents/oldchem/reagents/reagents_med.dm b/code/modules/reagents/oldchem/reagents/reagents_med.dm
new file mode 100644
index 00000000000..696fa6354a5
--- /dev/null
+++ b/code/modules/reagents/oldchem/reagents/reagents_med.dm
@@ -0,0 +1,152 @@
+/datum/reagent/hydrocodone
+ name = "Hydrocodone"
+ id = "hydrocodone"
+ description = "An extremely effective painkiller; may have long term abuse consequences."
+ reagent_state = LIQUID
+ color = "#C805DC"
+ metabolization_rate = 0.3 // Lasts 1.5 minutes for 15 units
+ shock_reduction = 200
+
+/datum/reagent/hydrocodone/on_mob_life(var/mob/living/M as mob)
+ if(!M) M = holder.my_atom
+ ..()
+ return
+
+/datum/reagent/virus_food
+ name = "Virus Food"
+ id = "virusfood"
+ description = "A mixture of water, milk, and oxygen. Virus cells can use this mixture to reproduce."
+ reagent_state = LIQUID
+ nutriment_factor = 2 * REAGENTS_METABOLISM
+ color = "#899613" // rgb: 137, 150, 19
+
+/datum/reagent/virus_food/on_mob_life(var/mob/living/M as mob)
+ if(!M) M = holder.my_atom
+ M.nutrition += nutriment_factor*REM
+ ..()
+ return
+
+/datum/reagent/sterilizine
+ name = "Sterilizine"
+ id = "sterilizine"
+ description = "Sterilizes wounds in preparation for surgery."
+ reagent_state = LIQUID
+ color = "#C8A5DC" // rgb: 200, 165, 220
+
+ //makes you squeaky clean
+/datum/reagent/sterilizine/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)
+ if (method == TOUCH)
+ M.germ_level -= min(volume*20, M.germ_level)
+
+/datum/reagent/sterilizine/reaction_obj(var/obj/O, var/volume)
+ O.germ_level -= min(volume*20, O.germ_level)
+
+/datum/reagent/sterilizine/reaction_turf(var/turf/T, var/volume)
+ T.germ_level -= min(volume*20, T.germ_level)
+
+/datum/reagent/synaptizine
+ name = "Synaptizine"
+ id = "synaptizine"
+ description = "Synaptizine is used to treat neuroleptic shock. Can be used to help remove disabling symptoms such as paralysis."
+ reagent_state = LIQUID
+ color = "#FA46FA"
+
+/datum/reagent/synaptizine/on_mob_life(var/mob/living/M as mob)
+ if(!M) M = holder.my_atom
+ M.AdjustParalysis(-1)
+ M.AdjustStunned(-1)
+ M.AdjustWeakened(-1)
+ if(prob(50))
+ M.adjustBrainLoss(-1.0)
+ ..()
+ return
+
+/datum/reagent/audioline
+ name = "Audioline"
+ id = "audioline"
+ description = "Heals ear damage."
+ reagent_state = LIQUID
+ color = "#6600FF" // rgb: 100, 165, 255
+
+/datum/reagent/audioline/on_mob_life(var/mob/living/M as mob)
+ if(!M) M = holder.my_atom
+ M.ear_damage = 0
+ M.ear_deaf = 0
+ ..()
+ return
+
+/datum/reagent/mitocholide
+ name = "Mitocholide"
+ id = "mitocholide"
+ description = "A specialized drug that stimulates the mitochondria of cells to encourage healing of internal organs."
+ reagent_state = LIQUID
+ color = "#C8A5DC" // rgb: 200, 165, 220
+
+/datum/reagent/mitocholide/on_mob_life(var/mob/living/M as mob)
+ if(!M) M = holder.my_atom
+ if(ishuman(M))
+ var/mob/living/carbon/human/H = M
+
+ //Mitocholide is hard enough to get, it's probably fair to make this all internal organs
+ for(var/name in H.internal_organs_by_name)
+ var/obj/item/organ/I = H.internal_organs_by_name[name]
+ if(I.damage > 0)
+ I.damage -= 0.20
+ ..()
+ return
+
+/datum/reagent/cryoxadone
+ name = "Cryoxadone"
+ id = "cryoxadone"
+ description = "A plasma mixture with almost magical healing powers. Its main limitation is that the targets body temperature must be under 265K for it to metabolise correctly."
+ reagent_state = LIQUID
+ color = "#0000C8" // rgb: 200, 165, 220
+
+/datum/reagent/cryoxadone/on_mob_life(var/mob/living/M as mob)
+ if(!M) M = holder.my_atom
+ if(M.bodytemperature < 265)
+ M.adjustCloneLoss(-4)
+ M.adjustOxyLoss(-10)
+ M.heal_organ_damage(12,12)
+ M.adjustToxLoss(-3)
+ M.status_flags &= ~DISFIGURED
+ ..()
+ return
+
+/datum/reagent/rezadone
+ name = "Rezadone"
+ id = "rezadone"
+ description = "A powder derived from fish toxin, this substance can effectively treat genetic damage in humanoids, though excessive consumption has side effects."
+ reagent_state = SOLID
+ color = "#669900" // rgb: 102, 153, 0
+
+/datum/reagent/rezadone/on_mob_life(var/mob/living/M as mob)
+ if(!M) M = holder.my_atom
+ if(!data) data = 1
+ data++
+ switch(data)
+ if(1 to 15)
+ M.adjustCloneLoss(-1)
+ M.heal_organ_damage(1,1)
+ if(15 to 35)
+ M.adjustCloneLoss(-2)
+ M.heal_organ_damage(2,1)
+ M.status_flags &= ~DISFIGURED
+ if(35 to INFINITY)
+ M.adjustToxLoss(1)
+ M.Dizzy(5)
+ M.Jitter(5)
+
+ ..()
+ return
+
+/datum/reagent/spaceacillin
+ name = "Spaceacillin"
+ id = "spaceacillin"
+ description = "An all-purpose antibiotic agent extracted from space fungus."
+ reagent_state = LIQUID
+ color = "#0AB478"
+
+/datum/reagent/spaceacillin/on_mob_life(var/mob/living/M as mob)
+ ..()
+ return
\ No newline at end of file
diff --git a/code/modules/reagents/oldchem/reagents/reagents_misc.dm b/code/modules/reagents/oldchem/reagents/reagents_misc.dm
new file mode 100644
index 00000000000..8c3352243eb
--- /dev/null
+++ b/code/modules/reagents/oldchem/reagents/reagents_misc.dm
@@ -0,0 +1,222 @@
+/*/datum/reagent/silicate
+ name = "Silicate"
+ id = "silicate"
+ description = "A compound that can be used to reinforce glass."
+ reagent_state = LIQUID
+ color = "#C7FFFF" // rgb: 199, 255, 255
+
+/datum/reagent/silicate/reaction_obj(var/obj/O, var/volume)
+ src = null
+ if(istype(O,/obj/structure/window))
+ if(O:silicate <= 200)
+
+ O:silicate += volume
+ O:health += volume * 3
+
+ if(!O:silicateIcon)
+ var/icon/I = icon(O.icon,O.icon_state,O.dir)
+
+ var/r = (volume / 100) + 1
+ var/g = (volume / 70) + 1
+ var/b = (volume / 50) + 1
+ I.SetIntensity(r,g,b)
+ O.icon = I
+ O:silicateIcon = I
+ else
+ var/icon/I = O:silicateIcon
+
+ var/r = (volume / 100) + 1
+ var/g = (volume / 70) + 1
+ var/b = (volume / 50) + 1
+ I.SetIntensity(r,g,b)
+ O.icon = I
+ O:silicateIcon = I
+
+ return*/
+
+
+/datum/reagent/oxygen
+ name = "Oxygen"
+ id = "oxygen"
+ description = "A colorless, odorless gas."
+ reagent_state = GAS
+ color = "#808080" // rgb: 128, 128, 128
+
+/datum/reagent/oxygen/on_mob_life(var/mob/living/M as mob, var/alien)
+ if(M.stat == 2) return
+ if(ishuman(M))
+ var/mob/living/carbon/human/H = M
+ if(H.species && (H.species.name == "Vox" || H.species.name =="Vox Armalis"))
+ M.adjustToxLoss(REAGENTS_METABOLISM)
+ holder.remove_reagent(src.id, REAGENTS_METABOLISM) //By default it slowly disappears.
+ return
+ ..()
+
+
+/datum/reagent/nitrogen
+ name = "Nitrogen"
+ id = "nitrogen"
+ description = "A colorless, odorless, tasteless gas."
+ reagent_state = GAS
+ color = "#808080" // rgb: 128, 128, 128
+
+/datum/reagent/nitrogen/on_mob_life(var/mob/living/M as mob, var/alien)
+ if(M.stat == 2) return
+ if(ishuman(M))
+ var/mob/living/carbon/human/H = M
+ if(H.species && (H.species.name == "Vox" || H.species.name =="Vox Armalis"))
+ M.adjustOxyLoss(-2*REM)
+ holder.remove_reagent(src.id, REAGENTS_METABOLISM) //By default it slowly disappears.
+ return
+ ..()
+
+
+/datum/reagent/hydrogen
+ name = "Hydrogen"
+ id = "hydrogen"
+ description = "A colorless, odorless, nonmetallic, tasteless, highly combustible diatomic gas."
+ reagent_state = GAS
+ color = "#808080" // rgb: 128, 128, 128
+
+
+/datum/reagent/potassium
+ name = "Potassium"
+ id = "potassium"
+ description = "A soft, low-melting solid that can easily be cut with a knife. Reacts violently with water."
+ reagent_state = SOLID
+ color = "#A0A0A0" // rgb: 160, 160, 160
+
+
+/datum/reagent/sulfur
+ name = "Sulfur"
+ id = "sulfur"
+ description = "A chemical element."
+ reagent_state = SOLID
+ color = "#BF8C00" // rgb: 191, 140, 0
+
+
+/datum/reagent/sodium
+ name = "Sodium"
+ id = "sodium"
+ description = "A chemical element."
+ reagent_state = SOLID
+ color = "#808080" // rgb: 128, 128, 128
+
+
+/datum/reagent/phosphorus
+ name = "Phosphorus"
+ id = "phosphorus"
+ description = "A chemical element."
+ reagent_state = SOLID
+ color = "#832828" // rgb: 131, 40, 40
+
+
+/datum/reagent/carbon
+ name = "Carbon"
+ id = "carbon"
+ description = "A chemical element."
+ reagent_state = SOLID
+ color = "#1C1300" // rgb: 30, 20, 0
+
+/datum/reagent/carbon/reaction_turf(var/turf/T, var/volume)
+ src = null
+ // Only add one dirt per turf. Was causing people to crash.
+ if(!istype(T, /turf/space) && !(locate(/obj/effect/decal/cleanable/dirt) in T))
+ new /obj/effect/decal/cleanable/dirt(T)
+
+
+/datum/reagent/gold
+ name = "Gold"
+ id = "gold"
+ description = "Gold is a dense, soft, shiny metal and the most malleable and ductile metal known."
+ reagent_state = SOLID
+ color = "#F7C430" // rgb: 247, 196, 48
+
+
+/datum/reagent/silver
+ name = "Silver"
+ id = "silver"
+ description = "A lustrous metallic element regarded as one of the precious metals."
+ reagent_state = SOLID
+ color = "#D0D0D0" // rgb: 208, 208, 208
+
+
+/datum/reagent/aluminum
+ name = "Aluminum"
+ id = "aluminum"
+ description = "A silvery white and ductile member of the boron group of chemical elements."
+ reagent_state = SOLID
+ color = "#A8A8A8" // rgb: 168, 168, 168
+
+
+/datum/reagent/silicon
+ name = "Silicon"
+ id = "silicon"
+ description = "A tetravalent metalloid, silicon is less reactive than its chemical analog carbon."
+ reagent_state = SOLID
+ color = "#A8A8A8" // rgb: 168, 168, 168
+
+
+/datum/reagent/copper
+ name = "Copper"
+ id = "copper"
+ description = "A highly ductile metal."
+ color = "#6E3B08" // rgb: 110, 59, 8
+
+
+/datum/reagent/iron
+ name = "Iron"
+ id = "iron"
+ description = "Pure iron is a metal."
+ reagent_state = SOLID
+ color = "#C8A5DC" // rgb: 200, 165, 220
+/*
+/datum/reagent/iron/on_mob_life(var/mob/living/M as mob)
+ if(!M) M = holder.my_atom
+ if((M.virus) && (prob(8) && (M.virus.name=="Magnitis")))
+ if(M.virus.spread == "Airborne")
+ M.virus.spread = "Remissive"
+ M.virus.stage--
+ if(M.virus.stage <= 0)
+ M.resistances += M.virus.type
+ M.virus = null
+ holder.remove_reagent(src.id, 0.2)
+ return
+*/
+
+
+
+//foam
+/datum/reagent/fluorosurfactant
+ name = "Fluorosurfactant"
+ id = "fluorosurfactant"
+ description = "A perfluoronated sulfonic acid that forms a foam when mixed with water."
+ reagent_state = LIQUID
+ color = "#9E6B38" // rgb: 158, 107, 56
+
+// metal foaming agent
+// this is lithium hydride. Add other recipies (e.g. LiH + H2O -> LiOH + H2) eventually
+/datum/reagent/ammonia
+ name = "Ammonia"
+ id = "ammonia"
+ description = "A caustic substance commonly used in fertilizer or household cleaners."
+ reagent_state = GAS
+ color = "#404030" // rgb: 64, 64, 48
+
+/datum/reagent/diethylamine
+ name = "Diethylamine"
+ id = "diethylamine"
+ description = "A secondary amine, useful as a plant nutrient and as building block for other compounds."
+ reagent_state = LIQUID
+ color = "#322D00"
+
+
+// Ported from Bay as part of the Botany Update
+// Allows you to make planks from any plant that has this reagent in it.
+// Also vines with this reagent are considered dense.
+/datum/reagent/woodpulp
+ name = "Wood Pulp"
+ id = "woodpulp"
+ description = "A mass of wood fibers."
+ reagent_state = LIQUID
+ color = "#B97A57"
\ No newline at end of file
diff --git a/code/modules/reagents/oldchem/reagents/reagents_toxin.dm b/code/modules/reagents/oldchem/reagents/reagents_toxin.dm
new file mode 100644
index 00000000000..e338766553f
--- /dev/null
+++ b/code/modules/reagents/oldchem/reagents/reagents_toxin.dm
@@ -0,0 +1,597 @@
+/datum/reagent/toxin
+ name = "Toxin"
+ id = "toxin"
+ description = "A Toxic chemical."
+ reagent_state = LIQUID
+ color = "#CF3600" // rgb: 207, 54, 0
+
+/datum/reagent/toxin/on_mob_life(var/mob/living/M as mob)
+ if(!M) M = holder.my_atom
+ M.adjustToxLoss(2)
+ ..()
+ return
+
+
+/datum/reagent/spider_venom
+ name = "Spider venom"
+ id = "spidertoxin"
+ description = "A toxic venom injected by spacefaring arachnids."
+ reagent_state = LIQUID
+ color = "#CF3600" // rgb: 207, 54, 0
+
+/datum/reagent/spider_venom/on_mob_life(var/mob/living/M as mob)
+ if(!M) M = holder.my_atom
+ M.adjustToxLoss(1.5)
+ ..()
+ return
+
+
+/datum/reagent/plasticide
+ name = "Plasticide"
+ id = "plasticide"
+ description = "Liquid plastic, do not eat."
+ reagent_state = LIQUID
+ color = "#CF3600" // rgb: 207, 54, 0
+
+/datum/reagent/plasticide/on_mob_life(var/mob/living/M as mob)
+ if(!M) M = holder.my_atom
+ M.adjustToxLoss(1.5)
+ ..()
+ return
+
+
+/datum/reagent/minttoxin
+ name = "Mint Toxin"
+ id = "minttoxin"
+ description = "Useful for dealing with undesirable customers."
+ reagent_state = LIQUID
+ color = "#CF3600" // rgb: 207, 54, 0
+
+/datum/reagent/minttoxin/on_mob_life(var/mob/living/M as mob)
+ if(!M) M = holder.my_atom
+ if (FAT in M.mutations)
+ M.gib()
+ ..()
+ return
+
+
+/datum/reagent/slimejelly
+ name = "Slime Jelly"
+ id = "slimejelly"
+ description = "A gooey semi-liquid produced from one of the deadliest lifeforms in existence. SO REAL."
+ reagent_state = LIQUID
+ color = "#801E28" // rgb: 128, 30, 40
+
+/datum/reagent/slimejelly/on_mob_life(var/mob/living/M as mob)
+ if(prob(10))
+ M << "\red Your insides are burning!"
+ M.adjustToxLoss(rand(20,60)*REM)
+ else if(prob(40))
+ M.heal_organ_damage(5*REM,0)
+ ..()
+ return
+
+/datum/reagent/slimetoxin
+ name = "Mutation Toxin"
+ id = "mutationtoxin"
+ description = "A corruptive toxin produced by slimes."
+ reagent_state = LIQUID
+ color = "#13BC5E" // rgb: 19, 188, 94
+
+/datum/reagent/slimetoxin/on_mob_life(var/mob/living/M as mob)
+ if(!M) M = holder.my_atom
+ if(ishuman(M))
+ var/mob/living/carbon/human/human = M
+ if(human.species.name != "Shadow")
+ M << "\red Your flesh rapidly mutates!"
+ M << "You are now a Shadow Person, a mutant race of darkness-dwelling humanoids."
+ M << "\red Your body reacts violently to light. \green However, it naturally heals in darkness."
+ M << "Aside from your new traits, you are mentally unchanged and retain your prior obligations."
+ human.set_species("Shadow")
+ ..()
+ return
+
+/datum/reagent/aslimetoxin
+ name = "Advanced Mutation Toxin"
+ id = "amutationtoxin"
+ description = "An advanced corruptive toxin produced by slimes."
+ reagent_state = LIQUID
+ color = "#13BC5E" // rgb: 19, 188, 94
+
+/datum/reagent/aslimetoxin/on_mob_life(var/mob/living/M as mob)
+ if(!M) M = holder.my_atom
+ if(istype(M, /mob/living/carbon) && M.stat != DEAD)
+ M << "\red Your flesh rapidly mutates!"
+ if(M.notransform) return
+ M.notransform = 1
+ M.canmove = 0
+ M.icon = null
+ M.overlays.Cut()
+ M.invisibility = 101
+ for(var/obj/item/W in M)
+ if(istype(W, /obj/item/weapon/implant)) //TODO: Carn. give implants a dropped() or something
+ qdel(W)
+ continue
+ W.layer = initial(W.layer)
+ W.loc = M.loc
+ W.dropped(M)
+ var/mob/living/carbon/slime/new_mob = new /mob/living/carbon/slime(M.loc)
+ new_mob.a_intent = I_HARM
+ new_mob.universal_speak = 1
+ if(M.mind)
+ M.mind.transfer_to(new_mob)
+ else
+ new_mob.key = M.key
+ qdel(M)
+ ..()
+ return
+
+
+/datum/reagent/mercury
+ name = "Mercury"
+ id = "mercury"
+ description = "A chemical element."
+ reagent_state = LIQUID
+ color = "#484848" // rgb: 72, 72, 72
+ metabolization_rate = 0.2
+ penetrates_skin = 1
+
+/datum/reagent/mercury/on_mob_life(var/mob/living/M as mob)
+ if(!M) M = holder.my_atom
+ if(prob(70))
+ M.adjustBrainLoss(1)
+ ..()
+ return
+
+
+/datum/reagent/chlorine
+ name = "Chlorine"
+ id = "chlorine"
+ description = "A chemical element."
+ reagent_state = GAS
+ color = "#808080" // rgb: 128, 128, 128
+ penetrates_skin = 1
+ process_flags = ORGANIC | SYNTHETIC
+
+/datum/reagent/chlorine/on_mob_life(var/mob/living/M as mob)
+ if(!M) M = holder.my_atom
+ M.adjustFireLoss(1)
+ ..()
+ return
+
+/datum/reagent/fluorine
+ name = "Fluorine"
+ id = "fluorine"
+ description = "A highly-reactive chemical element."
+ reagent_state = GAS
+ color = "#6A6054"
+ penetrates_skin = 1
+ process_flags = ORGANIC | SYNTHETIC
+
+/datum/reagent/fluorine/on_mob_life(var/mob/living/M as mob)
+ if(!M) M = holder.my_atom
+ M.adjustFireLoss(1)
+ M.adjustToxLoss(1*REM)
+ ..()
+ return
+
+
+/datum/reagent/radium
+ name = "Radium"
+ id = "radium"
+ description = "Radium is an alkaline earth metal. It is extremely radioactive."
+ reagent_state = SOLID
+ color = "#C7C7C7" // rgb: 199,199,199
+ metabolization_rate = 0.4
+ penetrates_skin = 1
+
+/datum/reagent/radium/on_mob_life(var/mob/living/M as mob)
+ if(!M) M = holder.my_atom
+ M.apply_effect(4*REM,IRRADIATE,0)
+ // radium may increase your chances to cure a disease
+ if(istype(M,/mob/living/carbon)) // make sure to only use it on carbon mobs
+ var/mob/living/carbon/C = M
+ if(C.virus2.len)
+ for (var/ID in C.virus2)
+ var/datum/disease2/disease/V = C.virus2[ID]
+ if(prob(5))
+ if(prob(50))
+ M.apply_effect(50,IRRADIATE,0) // curing it that way may kill you instead
+ M.adjustToxLoss(100)
+ C.antibodies |= V.antigen
+ ..()
+ return
+
+/datum/reagent/radium/reaction_turf(var/turf/T, var/volume)
+ src = null
+ if(volume >= 3)
+ if(!istype(T, /turf/space))
+ new /obj/effect/decal/cleanable/greenglow(T)
+ return
+
+
+/datum/reagent/mutagen
+ name = "Unstable mutagen"
+ id = "mutagen"
+ description = "Might cause unpredictable mutations. Keep away from children."
+ reagent_state = LIQUID
+ color = "#04DF27"
+ metabolization_rate = 0.3
+
+/datum/reagent/mutagen/reaction_mob(var/mob/M, var/method=TOUCH, var/volume)
+ if(!..()) return
+ if(!M.dna) return //No robots, AIs, aliens, Ians or other mobs should be affected by this.
+ src = null
+ if((method==TOUCH && prob(33)) || method==INGEST)
+ if(prob(98))
+ randmutb(M)
+ else
+ randmutg(M)
+ domutcheck(M, null)
+ M.UpdateAppearance()
+ return
+
+/datum/reagent/mutagen/on_mob_life(var/mob/living/M as mob)
+ if(!M.dna) return //No robots, AIs, aliens, Ians or other mobs should be affected by this.
+ if(!M) M = holder.my_atom
+ M.apply_effect(2*REM,IRRADIATE,0)
+ if(prob(4))
+ randmutb(M)
+ ..()
+ return
+
+
+/datum/reagent/uranium
+ name ="Uranium"
+ id = "uranium"
+ description = "A silvery-white metallic chemical element in the actinide series, weakly radioactive."
+ reagent_state = SOLID
+ color = "#B8B8C0" // rgb: 184, 184, 192
+
+/datum/reagent/uranium/on_mob_life(var/mob/living/M as mob)
+ if(!M) M = holder.my_atom
+ M.apply_effect(2,IRRADIATE,0)
+ ..()
+ return
+
+/datum/reagent/uranium/reaction_turf(var/turf/T, var/volume)
+ src = null
+ if(volume >= 3)
+ if(!istype(T, /turf/space))
+ new /obj/effect/decal/cleanable/greenglow(T)
+
+
+/datum/reagent/lexorin
+ name = "Lexorin"
+ id = "lexorin"
+ description = "Lexorin temporarily stops respiration. Causes tissue damage."
+ reagent_state = LIQUID
+ color = "#52685D"
+ metabolization_rate = 0.2
+
+/datum/reagent/lexorin/on_mob_life(var/mob/living/M as mob)
+ if(M.stat == 2.0)
+ return
+ if(!M) M = holder.my_atom
+ M.adjustToxLoss(1)
+ ..()
+ return
+
+
+/datum/reagent/sacid
+ name = "Sulphuric acid"
+ id = "sacid"
+ description = "A strong mineral acid with the molecular formula H2SO4."
+ reagent_state = LIQUID
+ color = "#00D72B"
+ process_flags = ORGANIC | SYNTHETIC
+
+/datum/reagent/sacid/on_mob_life(var/mob/living/M as mob)
+ if(!M) M = holder.my_atom
+ M.adjustFireLoss(1)
+ ..()
+ return
+
+/datum/reagent/sacid/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)
+ if(!istype(M, /mob/living))
+ return
+ if(method == TOUCH)
+ if(ishuman(M))
+ var/mob/living/carbon/human/H = M
+
+ if(volume > 25)
+
+ if(H.wear_mask)
+ H << "\red Your mask protects you from the acid!"
+ return
+
+ if(H.head)
+ H << "\red Your helmet protects you from the acid!"
+ return
+
+ if(!M.unacidable)
+ if(prob(75))
+ var/obj/item/organ/external/affecting = H.get_organ("head")
+ if(affecting)
+ affecting.take_damage(20, 0)
+ H.UpdateDamageIcon()
+ H.emote("scream")
+ else
+ M.take_organ_damage(15,0)
+ else
+ M.take_organ_damage(15,0)
+
+ if(method == INGEST)
+ if(ishuman(M))
+ var/mob/living/carbon/human/H = M
+
+ if(volume < 10)
+ M << "The greenish acidic substance stings you, but isn't concentrated enough to harm you!"
+
+ if(volume >=10 && volume <=25)
+ if(!H.unacidable)
+ M.take_organ_damage(min(max(volume-10,2)*2,20),0)
+ M.emote("scream")
+
+
+ if(volume > 25)
+ if(!M.unacidable)
+ if(prob(75))
+ var/obj/item/organ/external/affecting = H.get_organ("head")
+ if(affecting)
+ affecting.take_damage(20, 0)
+ H.UpdateDamageIcon()
+ H.emote("scream")
+ else
+ M.take_organ_damage(15,0)
+
+/datum/reagent/sacid/reaction_obj(var/obj/O, var/volume)
+ if((istype(O,/obj/item) || istype(O,/obj/effect/glowshroom)) && prob(40))
+ if(!O.unacidable)
+ var/obj/effect/decal/cleanable/molten_item/I = new/obj/effect/decal/cleanable/molten_item(O.loc)
+ I.desc = "Looks like this was \an [O] some time ago."
+ for(var/mob/M in viewers(5, O))
+ M << "\red \the [O] melts."
+ qdel(O)
+
+
+/datum/reagent/hellwater
+ name = "Hell Water"
+ id = "hell_water"
+ description = "YOUR FLESH! IT BURNS!"
+ process_flags = ORGANIC | SYNTHETIC //Admin-bus has no brakes! KILL THEM ALL.
+
+/datum/reagent/hellwater/on_mob_life(var/mob/living/M as mob)
+ M.fire_stacks = min(5,M.fire_stacks + 3)
+ M.IgniteMob() //Only problem with igniting people is currently the commonly availible fire suits make you immune to being on fire
+ M.adjustToxLoss(1)
+ M.adjustFireLoss(1) //Hence the other damages... ain't I a bastard?
+ M.adjustBrainLoss(5)
+ holder.remove_reagent(src.id, 1)
+
+
+/datum/reagent/carpotoxin
+ name = "Carpotoxin"
+ id = "carpotoxin"
+ description = "A deadly neurotoxin produced by the dreaded spess carp."
+ reagent_state = LIQUID
+ color = "#003333" // rgb: 0, 51, 51
+
+/datum/reagent/carpotoxin/on_mob_life(var/mob/living/M as mob)
+ if(!M) M = holder.my_atom
+ M.adjustToxLoss(2*REM)
+ ..()
+ return
+
+
+/datum/reagent/staminatoxin
+ name = "Tirizene"
+ id = "tirizene"
+ description = "A toxin that affects the stamina of a person when injected into the bloodstream."
+ reagent_state = LIQUID
+ color = "#6E2828"
+ data = 13
+
+/datum/reagent/staminatoxin/on_mob_life(var/mob/living/M)
+ M.adjustStaminaLoss(REM * data)
+ data = max(data - 1, 3)
+ ..()
+
+
+/datum/reagent/spores
+ name = "Spore Toxin"
+ id = "spores"
+ description = "A toxic spore cloud which blocks vision when ingested."
+ color = "#9ACD32"
+
+/datum/reagent/spores/on_mob_life(var/mob/living/M as mob)
+ M.adjustToxLoss(0.5)
+ M.damageoverlaytemp = 60
+ M.eye_blurry = max(M.eye_blurry, 3)
+ ..()
+ return
+
+
+/datum/reagent/beer2 //disguised as normal beer for use by emagged brobots
+ name = "Beer"
+ id = "beer2"
+ description = "An alcoholic beverage made from malted grains, hops, yeast, and water."
+ color = "#664300" // rgb: 102, 67, 0
+
+/datum/reagent/beer2/on_mob_life(var/mob/living/M as mob)
+ if(!data)
+ data = 1
+ switch(data)
+ if(1 to 50)
+ M.sleeping += 1
+ if(51 to INFINITY)
+ M.sleeping += 1
+ M.adjustToxLoss((data - 50)*REM)
+ data++
+ holder.remove_reagent(src.id, 0.5 * REAGENTS_METABOLISM)
+ ..()
+ return
+
+
+///////////////////////////////////////////////////////////////////////////////////////////////////////////////
+/*
+/datum/reagent/nanomachines
+ name = "Nanomachines"
+ id = "nanomachines"
+ description = "Microscopic construction robots."
+ reagent_state = LIQUID
+ color = "#535E66" // rgb: 83, 94, 102
+
+/datum/reagent/nanomachines/reaction_mob(var/mob/M, var/method=TOUCH, var/volume)
+ src = null
+ if( (prob(10) && method==TOUCH) || method==INGEST)
+ M.contract_disease(new /datum/disease/robotic_transformation(0),1)
+
+/datum/reagent/xenomicrobes
+ name = "Xenomicrobes"
+ id = "xenomicrobes"
+ description = "Microbes with an entirely alien cellular structure."
+ reagent_state = LIQUID
+ color = "#535E66" // rgb: 83, 94, 102
+
+/datum/reagent/xenomicrobes/reaction_mob(var/mob/M, var/method=TOUCH, var/volume)
+ src = null
+ if( (prob(10) && method==TOUCH) || method==INGEST)
+ M.contract_disease(new /datum/disease/xeno_transformation(0),1)
+*/
+
+/datum/reagent/spore
+ name = "Blob Spores"
+ id = "spore"
+ description = "Spores of some blob creature thingy."
+ reagent_state = LIQUID
+ color = "#CE760A" // rgb: 206, 118, 10
+ var/client/blob_client = null
+ var/blob_point_rate = 3
+
+/datum/reagent/spore/on_mob_life(var/mob/living/M)
+ if(!M) M = holder.my_atom
+ if (holder.has_reagent("atrazine",45))
+ holder.del_reagent("spore")
+ if (prob(1))
+ M << "\red Your mouth tastes funny."
+ if (prob(1) && prob(25))
+ if(iscarbon(M))
+ var/mob/living/carbon/C = M
+ if(directory[ckey(C.key)])
+ blob_client = directory[ckey(C.key)]
+ C.gib()
+ if(blob_client)
+ var/obj/effect/blob/core/core = new(get_turf(C), 200, blob_client, blob_point_rate)
+ if(core.overmind && core.overmind.mind)
+ core.overmind.mind.name = C.name
+
+ return
+
+/datum/reagent/condensedcapsaicin
+ name = "Condensed Capsaicin"
+ id = "condensedcapsaicin"
+ description = "This shit goes in pepperspray."
+ reagent_state = LIQUID
+ color = "#B31008" // rgb: 179, 16, 8
+
+/datum/reagent/condensedcapsaicin/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)
+ if(!istype(M, /mob/living))
+ return
+ if(method == TOUCH)
+ if(istype(M, /mob/living/carbon/human))
+ var/mob/living/carbon/human/victim = M
+ var/mouth_covered = 0
+ var/eyes_covered = 0
+ var/obj/item/safe_thing = null
+ if( victim.wear_mask )
+ if ( victim.wear_mask.flags & MASKCOVERSEYES )
+ eyes_covered = 1
+ safe_thing = victim.wear_mask
+ if ( victim.wear_mask.flags & MASKCOVERSMOUTH )
+ mouth_covered = 1
+ safe_thing = victim.wear_mask
+ if( victim.head )
+ if ( victim.head.flags & MASKCOVERSEYES )
+ eyes_covered = 1
+ safe_thing = victim.head
+ if ( victim.head.flags & MASKCOVERSMOUTH )
+ mouth_covered = 1
+ safe_thing = victim.head
+ if(victim.glasses)
+ eyes_covered = 1
+ if ( !safe_thing )
+ safe_thing = victim.glasses
+ if ( eyes_covered && mouth_covered )
+ victim << "\red Your [safe_thing] protects you from the pepperspray!"
+ return
+ else if ( mouth_covered ) // Reduced effects if partially protected
+ victim << "\red Your [safe_thing] protect you from most of the pepperspray!"
+ if(prob(5))
+ victim.emote("scream")
+ victim.eye_blurry = max(M.eye_blurry, 3)
+ victim.eye_blind = max(M.eye_blind, 1)
+ victim.confused = max(M.confused, 3)
+ victim.damageoverlaytemp = 60
+ victim.Weaken(3)
+ victim.drop_item()
+ return
+ else if ( eyes_covered ) // Eye cover is better than mouth cover
+ victim << "\red Your [safe_thing] protects your eyes from the pepperspray!"
+ victim.eye_blurry = max(M.eye_blurry, 3)
+ victim.damageoverlaytemp = 30
+ return
+ else // Oh dear :D
+ if(prob(5))
+ victim.emote("scream")
+ victim << "\red You're sprayed directly in the eyes with pepperspray!"
+ victim.eye_blurry = max(M.eye_blurry, 5)
+ victim.eye_blind = max(M.eye_blind, 2)
+ victim.confused = max(M.confused, 6)
+ victim.damageoverlaytemp = 75
+ victim.Weaken(5)
+ victim.drop_item()
+
+/datum/reagent/condensedcapsaicin/on_mob_life(var/mob/living/M as mob)
+ if(!M) M = holder.my_atom
+ if(prob(5))
+ M.visible_message("[M] [pick("dry heaves!","coughs!","splutters!")]")
+ ..()
+ return
+
+/datum/reagent/frostoil
+ name = "Frost Oil"
+ id = "frostoil"
+ description = "A special oil that noticably chills the body. Extraced from Icepeppers."
+ reagent_state = LIQUID
+ color = "#B31008" // rgb: 139, 166, 233
+ process_flags = ORGANIC | SYNTHETIC
+
+/datum/reagent/frostoil/on_mob_life(var/mob/living/M as mob)
+ if(!M) M = holder.my_atom
+ if(!data) data = 1
+ switch(data)
+ if(1 to 15)
+ M.bodytemperature -= 10 * TEMPERATURE_DAMAGE_COEFFICIENT
+ if(holder.has_reagent("capsaicin"))
+ holder.remove_reagent("capsaicin", 5)
+ if(istype(M, /mob/living/carbon/slime))
+ M.bodytemperature -= rand(5,20)
+ if(15 to 25)
+ M.bodytemperature -= 15 * TEMPERATURE_DAMAGE_COEFFICIENT
+ if(istype(M, /mob/living/carbon/slime))
+ M.bodytemperature -= rand(10,20)
+ if(25 to INFINITY)
+ M.bodytemperature -= 20 * TEMPERATURE_DAMAGE_COEFFICIENT
+ if(prob(1))
+ M.emote("shiver")
+ if(istype(M, /mob/living/carbon/slime))
+ M.bodytemperature -= rand(15,20)
+ data++
+ holder.remove_reagent(src.id, FOOD_METABOLISM)
+ ..()
+ return
+
+/datum/reagent/frostoil/reaction_turf(var/turf/simulated/T, var/volume)
+ for(var/mob/living/carbon/slime/M in T)
+ M.adjustToxLoss(rand(15,30))
diff --git a/code/modules/reagents/oldchem/reagents/reagents_water.dm b/code/modules/reagents/oldchem/reagents/reagents_water.dm
new file mode 100644
index 00000000000..12dfe89bb28
--- /dev/null
+++ b/code/modules/reagents/oldchem/reagents/reagents_water.dm
@@ -0,0 +1,351 @@
+/*
+// Frankly, this is just for chemicals that are sortof 'watery', which really didn't seem to fit under any other file
+// Current chems: Water, Space Lube, Space Cleaner, Blood, Fish Water, Holy water
+//
+//
+*/
+
+
+
+/datum/reagent/water
+ name = "Water"
+ id = "water"
+ description = "A ubiquitous chemical substance that is composed of hydrogen and oxygen."
+ reagent_state = LIQUID
+ color = "#0064C8" // rgb: 0, 100, 200
+ var/cooling_temperature = 2
+ process_flags = ORGANIC | SYNTHETIC
+
+/datum/reagent/water/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)
+ if(!istype(M, /mob/living))
+ return
+
+// Put out fire
+ if(method == TOUCH)
+ M.adjust_fire_stacks(-(volume / 10))
+ if(M.fire_stacks <= 0)
+ M.ExtinguishMob()
+ return
+
+/datum/reagent/water/reaction_turf(var/turf/simulated/T, var/volume)
+ if (!istype(T)) return
+ src = null
+ if(volume >= 3)
+ if(T.wet >= 1) return
+ T.wet = 1
+ if(T.wet_overlay)
+ T.overlays -= T.wet_overlay
+ T.wet_overlay = null
+ T.wet_overlay = image('icons/effects/water.dmi',T,"wet_floor")
+ T.overlays += T.wet_overlay
+
+ spawn(800)
+ if (!istype(T)) return
+ if(T.wet >= 2) return
+ T.wet = 0
+ if(T.wet_overlay)
+ T.overlays -= T.wet_overlay
+ T.wet_overlay = null
+
+ for(var/mob/living/carbon/slime/M in T)
+ M.apply_water()
+
+ var/hotspot = (locate(/obj/effect/hotspot) in T)
+ if(hotspot && !istype(T, /turf/space))
+ var/datum/gas_mixture/lowertemp = T.remove_air( T:air:total_moles() )
+ lowertemp.temperature = max( min(lowertemp.temperature-2000,lowertemp.temperature / 2) ,0)
+ lowertemp.react()
+ T.assume_air(lowertemp)
+ qdel(hotspot)
+ return
+
+/datum/reagent/water/reaction_obj(var/obj/O, var/volume)
+ src = null
+ var/turf/T = get_turf(O)
+ var/hotspot = (locate(/obj/effect/hotspot) in T)
+ if(hotspot && !istype(T, /turf/space))
+ var/datum/gas_mixture/lowertemp = T.remove_air( T:air:total_moles() )
+ lowertemp.temperature = max( min(lowertemp.temperature-2000,lowertemp.temperature / 2) ,0)
+ lowertemp.react()
+ T.assume_air(lowertemp)
+ qdel(hotspot)
+ if(istype(O,/obj/item/weapon/reagent_containers/food/snacks/monkeycube))
+ var/obj/item/weapon/reagent_containers/food/snacks/monkeycube/cube = O
+ if(!cube.wrapped)
+ cube.Expand()
+ // Dehydrated carp
+ if(istype(O,/obj/item/toy/carpplushie/dehy_carp))
+ var/obj/item/toy/carpplushie/dehy_carp/dehy = O
+ dehy.Swell() // Makes a carp
+ return
+
+
+/datum/reagent/lube
+ name = "Space Lube"
+ id = "lube"
+ description = "Lubricant is a substance introduced between two moving surfaces to reduce the friction and wear between them. giggity."
+ reagent_state = LIQUID
+ color = "#1BB1AB"
+
+/datum/reagent/lube/reaction_turf(var/turf/simulated/T, var/volume)
+ if (!istype(T)) return
+ src = null
+ if(volume >= 1)
+ if(T.wet >= 2) return
+ T.wet = 2
+ spawn(800)
+ if (!istype(T)) return
+ T.wet = 0
+ if(T.wet_overlay)
+ T.overlays -= T.wet_overlay
+ T.wet_overlay = null
+ return
+
+
+/datum/reagent/space_cleaner
+ name = "Space cleaner"
+ id = "cleaner"
+ description = "A compound used to clean things. Now with 50% more sodium hypochlorite!"
+ reagent_state = LIQUID
+ color = "#61C2C2"
+
+/datum/reagent/space_cleaner/reaction_obj(var/obj/O, var/volume)
+ if(O)
+ O.color = initial(O.color)
+ if(istype(O,/obj/effect/decal/cleanable))
+ qdel(O)
+ else
+ if(O)
+ O.clean_blood()
+
+/datum/reagent/space_cleaner/reaction_turf(var/turf/T, var/volume)
+ if(volume >= 1)
+ if(T)
+ T.color = initial(T.color)
+ T.overlays.Cut()
+ T.clean_blood()
+ for(var/obj/effect/decal/cleanable/C in src)
+ qdel(C)
+
+ for(var/mob/living/carbon/slime/M in T)
+ M.adjustToxLoss(rand(5,10))
+ if(istype(T,/turf/simulated))
+ var/turf/simulated/S = T
+ S.dirt = 0
+
+/datum/reagent/space_cleaner/reaction_mob(var/mob/M, var/method=TOUCH, var/volume)
+ if(iscarbon(M))
+ var/mob/living/carbon/C = M
+ if(istype(M,/mob/living/carbon/human))
+ var/mob/living/carbon/human/H = M
+ if(H.lip_style)
+ H.lip_style = null
+ H.update_body()
+ if(C.r_hand)
+ C.r_hand.clean_blood()
+ if(C.l_hand)
+ C.l_hand.clean_blood()
+ if(C.wear_mask)
+ if(C.wear_mask.clean_blood())
+ C.update_inv_wear_mask(0)
+ if(ishuman(M))
+ var/mob/living/carbon/human/H = C
+ if(H.head)
+ if(H.head.clean_blood())
+ H.update_inv_head(0,0)
+ if(H.wear_suit)
+ if(H.wear_suit.clean_blood())
+ H.update_inv_wear_suit(0,0)
+ else if(H.w_uniform)
+ if(H.w_uniform.clean_blood())
+ H.update_inv_w_uniform(0,0)
+ if(H.shoes)
+ if(H.shoes.clean_blood())
+ H.update_inv_shoes(0,0)
+ M.clean_blood()
+ ..()
+ return
+
+
+/datum/reagent/blood
+ data = new/list("donor"=null,"viruses"=null,"blood_DNA"=null,"blood_type"=null,"blood_colour"= "#A10808","resistances"=null,"trace_chem"=null, "antibodies" = null)
+ name = "Blood"
+ id = "blood"
+ reagent_state = LIQUID
+ color = "#C80000" // rgb: 200, 0, 0
+
+/datum/reagent/blood/reaction_mob(var/mob/M, var/method=TOUCH, var/volume)
+ var/datum/reagent/blood/self = src
+ src = null
+ if(self.data && self.data["virus2"] && istype(M, /mob/living/carbon))//infecting...
+ var/list/vlist = self.data["virus2"]
+ if (vlist.len)
+ for (var/ID in vlist)
+ var/datum/disease2/disease/V = vlist[ID]
+
+ if(method == TOUCH)
+ infect_virus2(M,V.getcopy())
+ else
+ infect_virus2(M,V.getcopy(),1) //injected, force infection!
+ if(self.data && self.data["antibodies"] && istype(M, /mob/living/carbon))//... and curing
+ var/mob/living/carbon/C = M
+ C.antibodies |= self.data["antibodies"]
+
+/datum/reagent/blood/on_merge(var/data)
+ if(data["blood_colour"])
+ color = data["blood_colour"]
+ return ..()
+
+/datum/reagent/blood/on_update(var/atom/A)
+ if(data["blood_colour"])
+ color = data["blood_colour"]
+ return ..()
+
+
+
+/datum/reagent/blood/reaction_turf(var/turf/simulated/T, var/volume)//splash the blood all over the place
+ if(!istype(T)) return
+ var/datum/reagent/blood/self = src
+ src = null
+ if(!(volume >= 3)) return
+ //var/datum/disease/D = self.data["virus"]
+ if(!self.data["donor"] || istype(self.data["donor"], /mob/living/carbon/human))
+ var/obj/effect/decal/cleanable/blood/blood_prop = locate() in T //find some blood here
+ if(!blood_prop) //first blood!
+ blood_prop = new(T)
+ blood_prop.blood_DNA[self.data["blood_DNA"]] = self.data["blood_type"]
+
+ if(self.data["virus2"])
+ blood_prop.virus2 = virus_copylist(self.data["virus2"])
+
+ else if(istype(self.data["donor"], /mob/living/carbon/alien))
+ var/obj/effect/decal/cleanable/blood/xeno/blood_prop = locate() in T
+ if(!blood_prop)
+ blood_prop = new(T)
+ blood_prop.blood_DNA["UNKNOWN DNA STRUCTURE"] = "X*"
+ return
+
+
+/datum/reagent/fishwater
+ name = "Fish Water"
+ id = "fishwater"
+ description = "Smelly water from a fish tank. Gross!"
+ reagent_state = LIQUID
+ color = "#757547"
+
+/datum/reagent/fishwater/reaction_mob(var/mob/M, var/method=TOUCH, var/volume)
+ if(!istype(M, /mob/living))
+ return
+ if(method == INGEST)
+ M << "Oh god, why did you drink that?"
+
+/datum/reagent/fishwater/on_mob_life(var/mob/living/M as mob)
+ if(!M) M = holder.my_atom
+ if(prob(30)) // Nasty, you drank this stuff? 30% chance of the fakevomit (non-stunning version)
+ if(prob(50)) // 50/50 chance of green vomit vs normal vomit
+ M.fakevomit(1)
+ else
+ M.fakevomit(0)
+ ..()
+ return
+
+
+/datum/reagent/holywater
+ name = "Water"
+ id = "holywater"
+ description = "A ubiquitous chemical substance that is composed of hydrogen and oxygen."
+ reagent_state = LIQUID
+ color = "#0064C8" // rgb: 0, 100, 200
+ process_flags = ORGANIC | SYNTHETIC
+
+/datum/reagent/holywater/on_mob_life(var/mob/living/M as mob)
+ if(!data) data = 1
+ data++
+ M.jitteriness = max(M.jitteriness-5,0)
+ if(data >= 30) // 12 units, 60 seconds @ metabolism 0.4 units & tick rate 2.0 sec
+ if (!M.stuttering) M.stuttering = 1
+ M.stuttering += 4
+ M.Dizzy(5)
+ if(iscultist(M) && prob(5))
+ M.say(pick("Av'te Nar'sie","Pa'lid Mors","INO INO ORA ANA","SAT ANA!","Daim'niodeis Arc'iai Le'eones","Egkau'haom'nai en Chaous","Ho Diak'nos tou Ap'iron","R'ge Na'sie","Diabo us Vo'iscum","Si gn'um Co'nu"))
+ if(data >= 75 && prob(33)) // 30 units, 150 seconds
+ if (!M.confused) M.confused = 1
+ M.confused += 3
+ if(iscultist(M))
+ ticker.mode.remove_cultist(M.mind)
+ holder.remove_reagent(src.id, src.volume) // maybe this is a little too perfect and a max() cap on the statuses would be better??
+ M.jitteriness = 0
+ M.stuttering = 0
+ M.confused = 0
+ if(ishuman(M)) .
+ if(((M.mind in ticker.mode.vampires) || M.mind.vampire) && (!(VAMP_FULL in M.mind.vampire.powers)) && prob(80))
+ switch(data)
+ if(1 to 4)
+ M << "Something sizzles in your veins!"
+ M.mind.vampire.nullified = max(5, M.mind.vampire.nullified + 2)
+ if(5 to 12)
+ M << "You feel an intense burning inside of you!"
+ M.adjustFireLoss(1)
+ M.mind.vampire.nullified = max(5, M.mind.vampire.nullified + 2)
+ if(13 to INFINITY)
+ M << "You suddenly ignite in a holy fire!"
+ for(var/mob/O in viewers(M, null))
+ O.show_message(text("[] suddenly bursts into flames!", M), 1)
+ M.fire_stacks = min(5,M.fire_stacks + 3)
+ M.IgniteMob() //Only problem with igniting people is currently the commonly availible fire suits make you immune to being on fire
+ M.adjustFireLoss(3) //Hence the other damages... ain't I a bastard?
+ M.mind.vampire.nullified = max(5, M.mind.vampire.nullified + 2)
+ ..()
+ return
+
+
+/datum/reagent/holywater/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)
+ // Vampires have their powers weakened by holy water applied to the skin.
+ if(ishuman(M))
+ if((M.mind in ticker.mode.vampires) && !(VAMP_FULL in M.mind.vampire.powers))
+ var/mob/living/carbon/human/H=M
+ if(method == TOUCH)
+ if(H.wear_mask)
+ H << "\red Your mask protects you from the holy water!"
+ return
+ else if(H.head)
+ H << "\red Your helmet protects you from the holy water!"
+ return
+ else
+ M << "Something holy interferes with your powers!"
+ M.mind.vampire.nullified = max(5, M.mind.vampire.nullified + 2)
+ return
+
+
+/datum/reagent/holywater/reaction_turf(var/turf/simulated/T, var/volume)
+ ..()
+ if(!istype(T)) return
+ if(volume>=10)
+ for(var/obj/effect/rune/R in T)
+ qdel(R)
+ T.Bless()
+
+/*
+/datum/reagent/vaccine
+ //data must contain virus type
+ name = "Vaccine"
+ id = "vaccine"
+ reagent_state = LIQUID
+ color = "#C81040" // rgb: 200, 16, 64
+
+/datum/reagent/vaccine/reaction_mob(var/mob/M, var/method=TOUCH, var/volume)
+ var/datum/reagent/vaccine/self = src
+ src = null
+ if(self.data&&method == INGEST)
+ for(var/datum/disease/D in M.viruses)
+ if(istype(D, /datum/disease/advance))
+ var/datum/disease/advance/A = D
+ if(A.GetDiseaseID() == self.data)
+ D.cure()
+ else
+ if(D.type == self.data)
+ D.cure()
+
+ M.resistances += self.data
+ return
+*/
\ No newline at end of file
diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm
index cd306a78e49..6c3b0db41e0 100644
--- a/code/modules/reagents/reagent_dispenser.dm
+++ b/code/modules/reagents/reagent_dispenser.dm
@@ -12,60 +12,60 @@
var/amount_per_transfer_from_this = 10
var/possible_transfer_amounts = list(10,25,50,100)
- attackby(obj/item/weapon/W as obj, mob/user as mob, params)
+/obj/structure/reagent_dispensers/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
+ return
+
+/obj/structure/reagent_dispensers/New()
+ var/datum/reagents/R = new/datum/reagents(1000)
+ reagents = R
+ R.my_atom = src
+ if (!possible_transfer_amounts)
+ src.verbs -= /obj/structure/reagent_dispensers/verb/set_APTFT
+ ..()
+
+/obj/structure/reagent_dispensers/examine()
+ set src in view()
+ ..()
+ if (!(usr in view(2)) && usr!=src.loc) return
+ usr << "\blue It contains:"
+ if(reagents && reagents.reagent_list.len)
+ for(var/datum/reagent/R in reagents.reagent_list)
+ usr << "\blue [R.volume] units of [R.name]"
+ else
+ usr << "\blue Nothing."
+
+/obj/structure/reagent_dispensers/verb/set_APTFT() //set amount_per_transfer_from_this
+ set name = "Set transfer amount"
+ set category = "Object"
+ set src in view(1)
+ if(usr.stat || !usr.canmove || usr.restrained())
return
+ var/N = input("Amount per transfer from this:","[src]") as null|anything in possible_transfer_amounts
+ if (N)
+ amount_per_transfer_from_this = N
- New()
- var/datum/reagents/R = new/datum/reagents(1000)
- reagents = R
- R.my_atom = src
- if (!possible_transfer_amounts)
- src.verbs -= /obj/structure/reagent_dispensers/verb/set_APTFT
- ..()
-
- examine()
- set src in view()
- ..()
- if (!(usr in view(2)) && usr!=src.loc) return
- usr << "\blue It contains:"
- if(reagents && reagents.reagent_list.len)
- for(var/datum/reagent/R in reagents.reagent_list)
- usr << "\blue [R.volume] units of [R.name]"
- else
- usr << "\blue Nothing."
-
- verb/set_APTFT() //set amount_per_transfer_from_this
- set name = "Set transfer amount"
- set category = "Object"
- set src in view(1)
- if(usr.stat || !usr.canmove || usr.restrained())
+/obj/structure/reagent_dispensers/ex_act(severity)
+ switch(severity)
+ if(1.0)
+ qdel(src)
return
- var/N = input("Amount per transfer from this:","[src]") as null|anything in possible_transfer_amounts
- if (N)
- amount_per_transfer_from_this = N
-
- ex_act(severity)
- switch(severity)
- if(1.0)
+ if(2.0)
+ if (prob(50))
+ new /obj/effect/effect/water(src.loc)
qdel(src)
return
- if(2.0)
- if (prob(50))
- new /obj/effect/effect/water(src.loc)
- qdel(src)
- return
- if(3.0)
- if (prob(5))
- new /obj/effect/effect/water(src.loc)
- qdel(src)
- return
- else
- return
+ if(3.0)
+ if (prob(5))
+ new /obj/effect/effect/water(src.loc)
+ qdel(src)
+ return
+ else
+ return
- blob_act()
- if(prob(50))
- new /obj/effect/effect/water(src.loc)
- qdel(src)
+/obj/structure/reagent_dispensers/blob_act()
+ if(prob(50))
+ new /obj/effect/effect/water(src.loc)
+ qdel(src)
@@ -80,9 +80,11 @@
icon = 'icons/obj/objects.dmi'
icon_state = "watertank"
amount_per_transfer_from_this = 10
- New()
- ..()
- reagents.add_reagent("water",1000)
+
+/obj/structure/reagent_dispensers/watertank/New()
+ ..()
+ reagents.add_reagent("water",1000)
+
/obj/structure/reagent_dispensers/fueltank
name = "fueltank"
@@ -91,22 +93,23 @@
icon_state = "weldtank"
amount_per_transfer_from_this = 10
var/obj/item/device/assembly_holder/rig = null
- New()
- ..()
- reagents.add_reagent("fuel",1000)
- bullet_act(var/obj/item/projectile/Proj)
- if(istype(Proj ,/obj/item/projectile/beam)||istype(Proj,/obj/item/projectile/bullet))
- if((Proj.damage_type == BURN) || (Proj.damage_type == BRUTE))
- message_admins("[key_name_admin(Proj.firer)] triggered a fueltank explosion.")
- log_game("[key_name(Proj.firer)] triggered a fueltank explosion.")
- explode()
+/obj/structure/reagent_dispensers/fueltank/New()
+ ..()
+ reagents.add_reagent("fuel",1000)
- blob_act()
- explosion(src.loc,0,1,5,7,10, flame_range = 5)
+/obj/structure/reagent_dispensers/fueltank/bullet_act(var/obj/item/projectile/Proj)
+ if(istype(Proj ,/obj/item/projectile/beam)||istype(Proj,/obj/item/projectile/bullet))
+ if((Proj.damage_type == BURN) || (Proj.damage_type == BRUTE))
+ message_admins("[key_name_admin(Proj.firer)] triggered a fueltank explosion.")
+ log_game("[key_name(Proj.firer)] triggered a fueltank explosion.")
+ explode()
- ex_act()
- explode()
+/obj/structure/reagent_dispensers/fueltank/blob_act()
+ explosion(src.loc,0,1,5,7,10, flame_range = 5)
+
+/obj/structure/reagent_dispensers/fueltank/ex_act()
+ explode()
/obj/structure/reagent_dispensers/fueltank/examine()
set src in view()
@@ -180,6 +183,7 @@
if(rig)
rig.process_movement()
+
/obj/structure/reagent_dispensers/peppertank
name = "Pepper Spray Refiller"
desc = "Refill pepper spray canisters."
@@ -188,9 +192,10 @@
anchored = 1
density = 0
amount_per_transfer_from_this = 45
- New()
- ..()
- reagents.add_reagent("condensedcapsaicin",1000)
+
+/obj/structure/reagent_dispensers/peppertank/New()
+ ..()
+ reagents.add_reagent("condensedcapsaicin",1000)
/obj/structure/reagent_dispensers/water_cooler
@@ -201,9 +206,10 @@
icon_state = "water_cooler"
possible_transfer_amounts = null
anchored = 1
- New()
- ..()
- reagents.add_reagent("water",500)
+
+/obj/structure/reagent_dispensers/water_cooler/New()
+ ..()
+ reagents.add_reagent("water",500)
/obj/structure/reagent_dispensers/beerkeg
@@ -212,9 +218,10 @@
icon = 'icons/obj/objects.dmi'
icon_state = "beertankTEMP"
amount_per_transfer_from_this = 10
- New()
- ..()
- reagents.add_reagent("beer",1000)
+
+/obj/structure/reagent_dispensers/beerkeg/New()
+ ..()
+ reagents.add_reagent("beer",1000)
/obj/structure/reagent_dispensers/beerkeg/blob_act()
explosion(src.loc,0,3,5,7,10)
@@ -229,9 +236,9 @@
anchored = 1
density = 0
- New()
- ..()
- reagents.add_reagent("virusfood", 1000)
+/obj/structure/reagent_dispensers/virusfood/New()
+ ..()
+ reagents.add_reagent("virusfood", 1000)
/obj/structure/reagent_dispensers/spacecleanertank
name = "space cleaner refiller"
@@ -241,6 +248,7 @@
anchored = 1
density = 0
amount_per_transfer_from_this = 250
- New()
- ..()
- reagents.add_reagent("cleaner",5000)
+
+/obj/structure/reagent_dispensers/spacecleanertank/New()
+ ..()
+ reagents.add_reagent("cleaner",5000)
diff --git a/code/modules/research/designs/autolathe_designs.dm b/code/modules/research/designs/autolathe_designs.dm
index 247bfdf25d8..90cebcf4648 100644
--- a/code/modules/research/designs/autolathe_designs.dm
+++ b/code/modules/research/designs/autolathe_designs.dm
@@ -162,6 +162,14 @@
build_path = /obj/item/device/assembly/infra
category = list("initial", "Miscellaneous")
+/datum/design/health_sensor
+ name = "Health sensor"
+ id = "health_sensor"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 800, MAT_GLASS = 200)
+ build_path = /obj/item/device/assembly/health
+ category = list("initial", "Medical")
+
/datum/design/kitchen_knife
name = "Kitchen knife"
id = "kitchen_knife"
@@ -546,3 +554,19 @@
materials = list(MAT_METAL = 4000)
build_path = /obj/item/ammo_casing/shotgun
category = list("hacked", "Security")
+
+/datum/design/desttagger
+ name = "Destination tagger"
+ id = "desttagger"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 250, MAT_GLASS = 125)
+ build_path = /obj/item/device/destTagger
+ category = list("initial", "Electronics")
+
+/datum/design/handlabeler
+ name = "Hand labeler"
+ id = "handlabel"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 150, MAT_GLASS = 125)
+ build_path = /obj/item/weapon/hand_labeler
+ category = list("initial", "Electronics")
\ No newline at end of file
diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm
index cf945134663..1cfd36c2bd6 100644
--- a/code/modules/research/designs/medical_designs.dm
+++ b/code/modules/research/designs/medical_designs.dm
@@ -204,4 +204,48 @@
build_type = PROTOLATHE
materials = list (MAT_METAL = 12500, MAT_GLASS = 7500, MAT_SILVER = 1500, MAT_GOLD = 1500, MAT_DIAMOND = 750)
build_path = /obj/item/weapon/scalpel/manager
+ category = list("Medical")
+
+/////////////////////////////////////////
+////////////Regular Implants/////////////
+/////////////////////////////////////////
+
+/datum/design/implanter
+ name = "Implanter"
+ desc = "A sterile automatic implant injector."
+ id = "implanter"
+ req_tech = list("materials" = 1, "programming" = 2, "biotech" = 3)
+ build_type = PROTOLATHE
+ materials = list(MAT_METAL = 600, MAT_GLASS = 200)
+ build_path = /obj/item/weapon/implanter
+ category = list("Medical")
+
+/datum/design/implantcase
+ name = "Implant Case"
+ desc = "A glass case containing an implant."
+ id = "implantcase"
+ req_tech = list("materials" = 1, "biotech" = 2)
+ build_type = PROTOLATHE
+ materials = list(MAT_GLASS = 500)
+ build_path = /obj/item/weapon/implantcase
+ category = list("Medical")
+
+/datum/design/implant_freedom
+ name = "Freedom Implant Case"
+ desc = "A glass case containing an implant."
+ id = "implant_freedom"
+ req_tech = list("materials" = 2, "biotech" = 3, "magnets" = 3, "syndicate" = 5)
+ build_type = PROTOLATHE
+ materials = list(MAT_METAL = 50, MAT_GLASS = 500, MAT_GOLD = 250)
+ build_path = /obj/item/weapon/implantcase/freedom
+ category = list("Medical")
+
+/datum/design/implant_adrenalin
+ name = "Adrenalin Implant Case"
+ desc = "A glass case containing an implant."
+ id = "implant_adrenalin"
+ req_tech = list("materials" = 2, "biotech" = 5, "combat" = 3, "syndicate" = 6)
+ build_type = PROTOLATHE
+ materials = list(MAT_METAL = 50, MAT_GLASS = 500, MAT_GOLD = 500, MAT_URANIUM = 100, MAT_DIAMOND = 200)
+ build_path = /obj/item/weapon/implantcase/adrenaline
category = list("Medical")
\ No newline at end of file
diff --git a/icons/mob/underwear.dmi b/icons/mob/underwear.dmi
index 5c303cbf642..6c36fd0651b 100644
Binary files a/icons/mob/underwear.dmi and b/icons/mob/underwear.dmi differ
diff --git a/icons/obj/assemblies/new_assemblies.dmi b/icons/obj/assemblies/new_assemblies.dmi
index 0f9dc460825..b50ef0e13e3 100644
Binary files a/icons/obj/assemblies/new_assemblies.dmi and b/icons/obj/assemblies/new_assemblies.dmi differ
diff --git a/icons/obj/device.dmi b/icons/obj/device.dmi
index 64e1b4941be..6ee1fbd0fd3 100644
Binary files a/icons/obj/device.dmi and b/icons/obj/device.dmi differ
diff --git a/paradise.dme b/paradise.dme
index b8184ad6713..12deff3c44e 100644
--- a/paradise.dme
+++ b/paradise.dme
@@ -959,6 +959,7 @@
#include "code\modules\alarm\power_alarm.dm"
#include "code\modules\assembly\assembly.dm"
#include "code\modules\assembly\bomb.dm"
+#include "code\modules\assembly\health.dm"
#include "code\modules\assembly\helpers.dm"
#include "code\modules\assembly\holder.dm"
#include "code\modules\assembly\igniter.dm"
@@ -1624,8 +1625,6 @@
#include "code\modules\reagents\Chemistry-Holder.dm"
#include "code\modules\reagents\Chemistry-Machinery.dm"
#include "code\modules\reagents\Chemistry-Readme.dm"
-#include "code\modules\reagents\Chemistry-Reagents.dm"
-#include "code\modules\reagents\Chemistry-Recipes.dm"
#include "code\modules\reagents\dartgun.dm"
#include "code\modules\reagents\grenade_launcher.dm"
#include "code\modules\reagents\reagent_containers.dm"
@@ -1642,6 +1641,27 @@
#include "code\modules\reagents\newchem\patch.dm"
#include "code\modules\reagents\newchem\pyro.dm"
#include "code\modules\reagents\newchem\toxins.dm"
+#include "code\modules\reagents\oldchem\chemical_reaction\_chemical_reaction_base.dm"
+#include "code\modules\reagents\oldchem\chemical_reaction\chemical_reaction_drink.dm"
+#include "code\modules\reagents\oldchem\chemical_reaction\chemical_reaction_food.dm"
+#include "code\modules\reagents\oldchem\chemical_reaction\chemical_reaction_harm.dm"
+#include "code\modules\reagents\oldchem\chemical_reaction\chemical_reaction_med.dm"
+#include "code\modules\reagents\oldchem\chemical_reaction\chemical_reaction_misc.dm"
+#include "code\modules\reagents\oldchem\chemical_reaction\chemical_reaction_slime.dm"
+#include "code\modules\reagents\oldchem\reagents\__oldchem_defines.dm"
+#include "code\modules\reagents\oldchem\reagents\_reagent_base.dm"
+#include "code\modules\reagents\oldchem\reagents\reagents_admin.dm"
+#include "code\modules\reagents\oldchem\reagents\reagents_drugs.dm"
+#include "code\modules\reagents\oldchem\reagents\reagents_flammable.dm"
+#include "code\modules\reagents\oldchem\reagents\reagents_food.dm"
+#include "code\modules\reagents\oldchem\reagents\reagents_med.dm"
+#include "code\modules\reagents\oldchem\reagents\reagents_misc.dm"
+#include "code\modules\reagents\oldchem\reagents\reagents_toxin.dm"
+#include "code\modules\reagents\oldchem\reagents\reagents_water.dm"
+#include "code\modules\reagents\oldchem\reagents\drink\reagents_alcohol.dm"
+#include "code\modules\reagents\oldchem\reagents\drink\reagents_drink.dm"
+#include "code\modules\reagents\oldchem\reagents\drink\reagents_drink_base.dm"
+#include "code\modules\reagents\oldchem\reagents\drink\reagents_drink_cold.dm"
#include "code\modules\reagents\reagent_containers\blood_pack.dm"
#include "code\modules\reagents\reagent_containers\borghydro.dm"
#include "code\modules\reagents\reagent_containers\dropper.dm"