Merge branch 'master' into intent_define

Conflicts:
	code/modules/reagents/Chemistry-Reagents.dm
This commit is contained in:
Tigercat2000
2015-09-08 04:43:13 -07:00
54 changed files with 6103 additions and 5544 deletions
+104
View File
@@ -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("<span class='warning'>The [name] is unsecured!</span>")
return 0
var/dat = text("<TT><B>Health Sensor</B> <A href='?src=\ref[src];scanning=1'>[scanning?"On":"Off"]</A>")
if(scanning && health_scan)
dat += "<BR>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
+22
View File
@@ -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 += "<br><br>"
dat += "<b>Underwear:</b><BR><a href ='?_src_=prefs;preference=underwear;task=input'>[underwear]</a><BR>"
dat += "<b>Undershirt:</b><BR><a href ='?_src_=prefs;preference=undershirt;task=input'>[undershirt]</a><BR>"
dat += "<b>Socks:</b><BR><a href ='?_src_=prefs;preference=socks;task=input'>[socks]</a><BR>"
dat += "Backpack Type:<br><a href ='?_src_=prefs;preference=bag;task=input'><b>[backbaglist[backbag]]</b></a><br>"
dat += "Nanotrasen Relation:<br><a href ='?_src_=prefs;preference=nt_relation;task=input'><b>[nanotrasen_relation]</b></a><br>"
dat += "</td><td><b>Preview</b><br><img src=previewicon.png height=64 width=64><img src=previewicon2.png height=64 width=64></td></tr></table>"
@@ -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
+10 -3
View File
@@ -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]')
"}
)
@@ -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))
@@ -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)
@@ -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
@@ -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()
@@ -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)
@@ -1260,4 +1260,193 @@
name = "Fire Tank-Top"
icon_state = "tank_fire"
gender = NEUTER
//end tanktops
//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")
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+47 -47
View File
@@ -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"
+29
View File
@@ -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"
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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( "<span class='danger'>The blood writhes and wriggles and sizzles away from the container!</span>", 1, "<span class='warning'>You hear bubbling and sizzling.</span>", 2)
else
for(var/mob/M in viewers(get_turf(holder.my_atom), null))
M.show_message( "<span class ='notice'>The blood seems to break apart in the fuel.</span>", 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."
@@ -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("<span class='danger'>The slime extract begins to vibrate violently!</span>"), 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("<span class='notice'>The [BC.name] appears out of thin air!</span>")
//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)
@@ -0,0 +1,5 @@
#define SOLID 1
#define LIQUID 2
#define GAS 3
#define FOOD_METABOLISM 0.4
#define REM REAGENTS_EFFECT_MULTIPLIER
@@ -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 ..()
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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."
@@ -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
@@ -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
@@ -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 << "<span class = 'danger'>You pass out from hyperglycemic shock!</span>"
M.Paralyse(1)
if(prob(8))
M.adjustToxLoss(rand(1,2))
..()
return
@@ -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
@@ -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"
@@ -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 << "<b>You are now a Shadow Person, a mutant race of darkness-dwelling humanoids.</b>"
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 << "<span class = 'danger'>The greenish acidic substance stings you, but isn't concentrated enough to harm you!</span>"
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("<span class='warning'>[M] [pick("dry heaves!","coughs!","splutters!")]</span>")
..()
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))
@@ -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 << "<span class = 'warning'>Something sizzles in your veins!</span>"
M.mind.vampire.nullified = max(5, M.mind.vampire.nullified + 2)
if(5 to 12)
M << "<span class = 'danger'>You feel an intense burning inside of you!</span>"
M.adjustFireLoss(1)
M.mind.vampire.nullified = max(5, M.mind.vampire.nullified + 2)
if(13 to INFINITY)
M << "<span class = 'danger'>You suddenly ignite in a holy fire!</span>"
for(var/mob/O in viewers(M, null))
O.show_message(text("<span class = 'danger'>[] suddenly bursts into flames!<span>", 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 << "<span class='warning'>Something holy interferes with your powers!</span>"
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
*/
+87 -79
View File
@@ -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)
@@ -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")
@@ -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")