Merge remote-tracking branch 'upstream/master' into smoke-fix

This commit is contained in:
Fox-McCloud
2015-04-12 04:53:04 -04:00
36 changed files with 1237 additions and 421 deletions
@@ -2094,6 +2094,12 @@ datum
description = "The fatty, still liquid part of milk. Why don't you mix this with sum scotch, eh?"
color = "#DFD7AF" // rgb: 223, 215, 175
chocolate_milk
name = "Chocolate milk"
id ="chocolate_milk"
description = "Chocolate-flavored milk, tastes like being a kid again."
color = "#85432C"
hot_coco
name = "Hot Chocolate"
id = "hot_coco"
@@ -2383,6 +2389,7 @@ datum
var/confused_adj = 2
var/slur_start = 65 //amount absorbed after which mob starts slurring
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
@@ -2416,6 +2423,9 @@ datum
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)
@@ -979,6 +979,14 @@ datum
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"
+251
View File
@@ -139,6 +139,12 @@ datum/reagent/chocolate/on_mob_life(var/mob/living/M as mob)
..()
return
datum/reagent/chocolate/reaction_turf(var/turf/T, var/volume)
src = null
if(volume >= 5)
new /obj/item/weapon/reagent_containers/food/snacks/reagentchocolatebar(T)
return
/datum/reagent/mugwort
name = "Mugwort"
id = "mugwort"
@@ -220,6 +226,27 @@ datum/reagent/msg/reaction_mob(var/mob/M, var/method=TOUCH, var/volume)
..()
return
/datum/reagent/cheese
name = "Cheese"
id = "cheese"
description = "Some cheese. Pour it out to make it solid."
reagent_state = SOLID
color = "#FFFF00"
datum/reagent/cheese/reaction_turf(var/turf/T, var/volume)
src = null
if(volume >= 5)
new /obj/item/weapon/reagent_containers/food/snacks/cheesewedge(T)
return
/datum/chemical_reaction/cheese
name = "weird_cheese"
id = "weird_cheese"
result = "weird_cheese"
required_reagents = list("vomit" = 1, "milk" = 1)
result_amount = 1
mix_message = "The mixture curdles up."
/datum/reagent/fake_cheese
name = "Cheese substitute"
id = "fake_cheese"
@@ -227,6 +254,27 @@ datum/reagent/msg/reaction_mob(var/mob/M, var/method=TOUCH, var/volume)
reagent_state = LIQUID
color = "#B2B139"
/datum/reagent/weird_cheese
name = "Weird cheese"
id = "weird_cheese"
description = "Hell, I don't even know if this IS cheese. Whatever it is, it ain't normal. If you want to, pour it out to make it solid."
reagent_state = SOLID
color = "#50FF00"
datum/reagent/weird_cheese/reaction_turf(var/turf/T, var/volume)
src = null
if(volume >= 5)
new /obj/item/weapon/reagent_containers/food/snacks/weirdcheesewedge(T)
return
/datum/chemical_reaction/weird_cheese
name = "Weird cheese"
id = "weird_cheese"
result = "weird_cheese"
required_reagents = list("green_vomit" = 1, "milk" = 1)
result_amount = 1
mix_message = "The disgusting mixture sloughs together horribly, emitting a foul stench."
datum/reagent/beans
name = "Refried beans"
id = "beans"
@@ -241,5 +289,208 @@ datum/reagent/beans/on_mob_life(var/mob/living/M as mob)
..()
return
/datum/reagent/bread
name = "Bread"
id = "bread"
description = "Bread! Yep, bread."
reagent_state = SOLID
color = "#9C5013"
datum/reagent/bread/reaction_turf(var/turf/T, var/volume)
src = null
if(volume >= 5)
new /obj/item/weapon/reagent_containers/food/snacks/breadslice(T)
return
/datum/reagent/vomit
name = "Vomit"
id = "vomit"
description = "Looks like someone lost their lunch. And then collected it. Yuck."
reagent_state = LIQUID
color = "#FFFF00"
datum/reagent/vomit/reaction_turf(var/turf/T, var/volume)
src = null
if(volume >= 5)
new /obj/effect/decal/cleanable/vomit(T)
playsound(T, 'sound/effects/splat.ogg', 50, 1, -3)
return
/datum/reagent/greenvomit
name = "Green vomit"
id = "green_vomit"
description = "Whoa, that can't be natural. That's horrible."
reagent_state = LIQUID
color = "#78FF74"
datum/reagent/greenvomit/reaction_turf(var/turf/T, var/volume)
src = null
if(volume >= 5)
new /obj/effect/decal/cleanable/vomit/green(T)
playsound(T, 'sound/effects/splat.ogg', 50, 1, -3)
return
/datum/reagent/ectoplasm
name = "Ectoplasm"
id = "ectoplasm"
description = "A bizarre gelatinous substance supposedly derived from ghosts."
reagent_state = LIQUID
color = "#8EAE7B"
datum/reagent/ectoplasm/reaction_mob(var/mob/M, var/method=TOUCH, var/volume)
if(!istype(M, /mob/living))
return
if(method == INGEST)
var/spooky_eat = pick("Ugh, why did you eat that? Your mouth feels haunted. Haunted with bad flavors.", "Ugh, why did you eat that? It has the texture of ham aspic. From the 1950s. Left out in the sun.", "Ugh, why did you eat that? It tastes like a ghost fart.", "Ugh, why did you eat that? It tastes like flavor died.")
M << "<span class = 'warning'>[spooky_eat]</span>"
/datum/reagent/ectoplasm/on_mob_life(var/mob/living/M as mob)
var/spooky_message = pick("You notice something moving out of the corner of your eye, but nothing is there...", "Your eyes twitch, you feel like something you can't see is here...", "You've got the heebie-jeebies.", "You feel uneasy.", "You shudder as if cold...", "You feel something gliding across your back...")
if(prob(5))
M << "<span class='warning'>[spooky_message]</span>"
..()
return
datum/reagent/ectoplasm/reaction_turf(var/turf/T, var/volume)
src = null
if(volume >= 10)
new /obj/item/weapon/reagent_containers/food/snacks/ectoplasm(T)
return
/datum/reagent/soybeanoil
name = "Space-soybean oil "
id = "soybeanoil"
description = "An oil derived from extra-terrestrial soybeans."
reagent_state = LIQUID
color = "#B1B0B0"
/datum/reagent/soybeanoil/on_mob_life(var/mob/living/M as mob)
if(prob(5))
M.reagents.add_reagent("porktonium",5)
..()
return
/datum/reagent/hydrogenated_soybeanoil
name = "Partially hydrogenated space-soybean oil"
id = "hydrogenated_soybeanoil"
description = "An oil derived from extra-terrestrial soybeans, with additional hydrogen atoms added to convert it into a saturated form."
reagent_state = LIQUID
color = "#B1B0B0"
/datum/reagent/hydrogenated_soybeanoil/on_mob_life(var/mob/living/M as mob)
if(prob(8))
M.reagents.add_reagent("porktonium",5)
..()
return
/datum/chemical_reaction/hydrogenated_soybeanoil
name = "Partially hydrogenated space-soybean oil"
id = "hydrogenated_soybeanoil"
result = "hydrogenated_soybeanoil"
required_reagents = list("soybeanoil" = 1, "hydrogen" = 1)
result_amount = 2
required_temp = 520
mix_message = "The mixture emits a burnt, oily smell."
/datum/reagent/meatslurry
name = "Meat Slurry"
id = "meatslurry"
description = "A paste comprised of highly-processed organic material. Uncomfortably similar to deviled ham spread."
reagent_state = LIQUID
color = "#EBD7D7"
/datum/chemical_reaction/meatslurry
name = "Meat Slurry"
id = "meatslurry"
result = "meatslurry"
required_reagents = list("corn_starch" = 1, "blood" = 1)
result_amount = 2
mix_message = "The mixture congeals into a bloody mass."
/datum/reagent/mashedpotatoes
name = "Mashed potatoes"
id = "mashedpotatoes"
description = "A starchy food paste made from boiled potatoes."
reagent_state = SOLID
color = "#D6D9C1"
/datum/reagent/gravy
name = "Gravy"
id = "gravy"
description = "A savory sauce made from a simple meat-dripping roux and milk."
reagent_state = LIQUID
color = "#B4641B"
/datum/chemical_reaction/gravy
name = "Gravy"
id = "gravy"
result = "gravy"
required_reagents = list("porktonium" = 1, "corn_starch" = 1, "milk" = 1)
result_amount = 3
required_temp = 374
mix_message = "The substance thickens and takes on a meaty odor."
/datum/reagent/beff
name = "Beff"
id = "beff"
description = "An advanced blend of mechanically-recovered meat and textured synthesized protein product notable for its unusual crystalline grain when sliced."
reagent_state = SOLID
color = "#AC7E67"
/datum/reagent/beff/on_mob_life(var/mob/living/M as mob)
if(prob(5))
M.reagents.add_reagent("porktonium",5)
if(prob(5))
M.reagents.add_reagent(pick("blood", "corn_syrup", "synthflesh", "hydrogenated_soybeanoil"), 0.8)
if(prob(5))
M.emote("groan")
if(prob(2))
M << "<span class='warning'>You feel sick.</span>"
..()
return
/datum/chemical_reaction/beff
name = "Beff"
id = "beff"
result = "beff"
required_reagents = list("hydrogenated_soybeanoil" = 2, "meatslurry" = 1, "plasma" = 1)
result_amount = 4
mix_message = "The mixture solidifies, taking a crystalline appearance."
/datum/reagent/pepperoni
name = "Pepperoni"
id = "pepperoni"
description = "An Italian-American variety of salami usually made from beef and pork"
reagent_state = SOLID
color = "#AC7E67"
datum/reagent/pepperoni/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)
if(method == TOUCH)
if(ishuman(M))
var/mob/living/carbon/human/H = M
if(H.wear_mask)
H << "<span class='warning'>The pepperoni bounces off your mask!</span>"
return
if(H.head)
H << "<span class='warning'>Your mask protects you from the errant pepperoni!</span>"
return
if(prob(50))
M.adjustBruteLoss(1)
playsound(M, 'sound/effects/woodhit.ogg', 50, 1, -1)
M << "<span class='warning'>A slice of pepperoni slaps you!</span>"
else
M.emote("burp")
M << "<span class='warning'>My goodness, that was tasty!</span>"
/datum/chemical_reaction/pepperoni
name = "Pepperoni"
id = "pepperoni"
result = "pepperoni"
required_reagents = list("beff" = 1, "saltpetre" = 1, "synthflesh" = 1)
result_amount = 2
mix_message = "The beff and the synthflesh combine to form a smoky red log."
+2
View File
@@ -262,6 +262,7 @@
result = "smoke_powder"
required_reagents = list("stabilizing_agent" = 1, "potassium" = 1, "sugar" = 1, "phosphorus" = 1)
result_amount = 1
mix_message = "The mixture sets into a greyish powder!"
/datum/chemical_reaction/smoke
name = "smoke"
@@ -269,6 +270,7 @@
result = null
required_reagents = list("potassium" = 1, "sugar" = 1, "phosphorus" = 1)
result_amount = 1
mix_message = "The mixture quickly turns into a pall of smoke!"
var/forbidden_reagents = list("sugar", "phosphorus", "potassium") //Do not transfer this stuff through smoke.
/datum/chemical_reaction/smoke/on_reaction(var/datum/reagents/holder, var/created_volume)
@@ -130,6 +130,15 @@
return
attackby(var/obj/item/I, mob/user as mob, params)
if(istype(I, /obj/item/clothing/mask/cigarette)) //ciggies are weird
return
if(is_hot(I))
if(src.reagents)
src.reagents.chem_temp += 15
user << "<span class='notice'>You heat [src] with [I].</span>"
src.reagents.handle_reactions()
examine()
set src in view()
..()
@@ -392,6 +392,18 @@
reagents.add_reagent("coco", 2)
bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/reagentchocolatebar //for reagent chocolate
name = "Chocolate Bar"
desc = "A plain chocolate bar. Is it dark chocolate, milk chocolate? Who knows!"
icon_state = "chocolatebar"
filling_color = "#7D5F46"
New()
..()
reagents.add_reagent("sugar", 10)
reagents.add_reagent("chocolate",10)
bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/chocolateegg
name = "Chocolate Egg"
desc = "Such sweet, fattening food."
@@ -2576,7 +2588,18 @@
filling_color = "#FFF700"
bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/weirdcheesewedge
name = "Weird Cheese"
desc = "Some kind of... gooey, messy, gloopy thing. Similar to cheese, but only in the looser sense of the word."
icon_state = "weirdcheesewedge"
filling_color = "#00FF33"
bitesize = 2
New()
..()
reagents.add_reagent("mercury", 5)
reagents.add_reagent("mindbreaker", 5)
reagents.add_reagent("ethanol", 5)
reagents.add_reagent("weird_cheese", 5)
/obj/item/weapon/reagent_containers/food/snacks/sliceable/birthdaycake
name = "Birthday Cake"
@@ -2604,7 +2627,7 @@
icon_state = "Some plain old Earthen bread."
icon_state = "bread"
slice_path = /obj/item/weapon/reagent_containers/food/snacks/breadslice
slices_num = 5
slices_num = 6
filling_color = "#FFE396"
New()
@@ -2620,6 +2643,9 @@
filling_color = "#D27332"
bitesize = 2
New()
..()
reagents.add_reagent("bread", 5)
/obj/item/weapon/reagent_containers/food/snacks/sliceable/creamcheesebread
name = "Cream Cheese Bread"
@@ -3334,3 +3360,11 @@
..()
reagents.add_reagent("nutriment", 3)
/obj/item/weapon/reagent_containers/food/snacks/ectoplasm
name = "ectoplasm"
desc = "A luminescent blob of what scientists refer to as 'ghost goo'."
icon = 'icons/obj/wizard.dmi'
icon_state = "ectoplasm"
New()
..()
reagents.add_reagent("ectoplasm", 10)
@@ -1,361 +0,0 @@
////////////////////////////////////////////////////////////////////////////////
/// (Mixing)Glass.
////////////////////////////////////////////////////////////////////////////////
/obj/item/weapon/reagent_containers/glass
name = " "
var/base_name = " "
desc = " "
icon = 'icons/obj/chemical.dmi'
icon_state = "null"
item_state = "null"
amount_per_transfer_from_this = 10
possible_transfer_amounts = list(5,10,15,25,30,50)
volume = 50
flags = OPENCONTAINER
var/label_text = ""
// the fucking asshole who designed this can go die in a fire - Iamgoofball
var/list/can_be_placed_into = list(
/obj/machinery/chem_master/,
/obj/machinery/chem_heater/,
/obj/machinery/chem_dispenser/,
/obj/machinery/reagentgrinder,
/obj/structure/table,
/obj/structure/closet,
/obj/structure/sink,
/obj/item/weapon/storage,
/obj/machinery/atmospherics/unary/cryo_cell,
/obj/machinery/dna_scannernew,
/obj/item/weapon/grenade/chem_grenade,
/obj/machinery/bot/medbot,
/obj/item/weapon/storage/secure/safe,
/obj/machinery/iv_drip,
/obj/machinery/disease2/incubator,
/obj/machinery/disposal,
/obj/machinery/apiary,
/mob/living/simple_animal/cow,
/mob/living/simple_animal/hostile/retaliate/goat,
/obj/machinery/computer/centrifuge,
/obj/machinery/sleeper,
/obj/machinery/smartfridge/,
// /obj/machinery/biogenerator,
/obj/machinery/portable_atmospherics/hydroponics,
/obj/machinery/constructable_frame)
New()
..()
base_name = name
examine()
set src in view()
..()
if (!(usr in view(2)) && usr!=src.loc) return
usr << "\blue It contains:"
if(reagents && reagents.reagent_list.len)
usr << "\blue [src.reagents.total_volume] units of liquid."
else
usr << "\blue Nothing."
if (!is_open_container())
usr << "\blue Airtight lid seals it completely."
attack_self()
..()
if (is_open_container())
usr << "<span class = 'notice'>You put the lid on \the [src]."
flags ^= OPENCONTAINER
else
usr << "<span class = 'notice'>You take the lid off \the [src]."
flags |= OPENCONTAINER
update_icon()
afterattack(obj/target, mob/user, proximity)
if(!proximity) return
if (!is_open_container())
return
for(var/type in src.can_be_placed_into)
if(istype(target, type))
return
if(ismob(target) && target.reagents && reagents.total_volume)
user << "\blue You splash the solution onto [target]."
var/mob/living/M = target
var/list/injected = list()
for(var/datum/reagent/R in src.reagents.reagent_list)
injected += R.name
var/contained = english_list(injected)
M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been splashed with [src.name] by [user.name] ([user.ckey]). Reagents: [contained]</font>")
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [src.name] to splash [M.name] ([M.key]). Reagents: [contained]</font>")
if(M.ckey)
msg_admin_attack("[user.name] ([user.ckey]) splashed [M.name] ([M.key]) with [src.name]. Reagents: [contained] (INTENT: [uppertext(user.a_intent)]) (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[user.x];Y=[user.y];Z=[user.z]'>JMP</a>)")
if(!iscarbon(user))
M.LAssailant = null
else
M.LAssailant = user
for(var/mob/O in viewers(world.view, user))
O.show_message(text("\red [] has been splashed with something by []!", target, user), 1)
src.reagents.reaction(target, TOUCH)
spawn(5) src.reagents.clear_reagents()
return
else if(istype(target, /obj/structure/reagent_dispensers)) //A dispenser. Transfer FROM it TO us.
if(!target.reagents.total_volume && target.reagents)
user << "\red [target] is empty."
return
if(reagents.total_volume >= reagents.maximum_volume)
user << "\red [src] is full."
return
var/trans = target.reagents.trans_to(src, target:amount_per_transfer_from_this)
user << "\blue You fill [src] with [trans] units of the contents of [target]."
else if(target.is_open_container() && target.reagents) //Something like a glass. Player probably wants to transfer TO it.
if(!reagents.total_volume)
user << "\red [src] is empty."
return
if(target.reagents.total_volume >= target.reagents.maximum_volume)
user << "\red [target] is full."
return
if(istype(target, /obj/item/weapon/reagent_containers))
var/obj/item/weapon/reagent_containers/RC = target
for(var/bad_reg in RC.banned_reagents)
if(reagents.has_reagent(bad_reg, 1)) //Message is a bit "Game-y" but I can't think up a better one.
user << "<span class='warning'>A chemical in [src] is far too dangerous to transfer to [RC]!</span>"
return
// /vg/: Logging transfers of bad things
if(target.reagents_to_log.len)
var/list/badshit=list()
for(var/bad_reagent in target.reagents_to_log)
if(reagents.has_reagent(bad_reagent))
badshit += reagents_to_log[bad_reagent]
if(badshit.len)
var/hl="\red <b>([english_list(badshit)])</b> \black"
message_admins("[user.name] ([user.ckey]) added [reagents.get_reagent_ids(1)] to \a [target] with [src].[hl] (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[user.x];Y=[user.y];Z=[user.z]'>JMP</a>)")
log_game("[user.name] ([user.ckey]) added [reagents.get_reagent_ids(1)] to \a [target] with [src].")
var/trans = src.reagents.trans_to(target, amount_per_transfer_from_this)
user << "\blue You transfer [trans] units of the solution to [target]."
else if(istype(target, /obj/machinery/bunsen_burner))
return
else if(istype(target, /obj/machinery/radiocarbon_spectrometer))
return
else if(reagents.total_volume)
user << "\blue You splash the solution onto [target]."
src.reagents.reaction(target, TOUCH)
spawn(5) src.reagents.clear_reagents()
return
attackby(obj/item/weapon/W as obj, mob/user as mob, params)
..()
if(istype(W, /obj/item/weapon/pen) || istype(W, /obj/item/device/flashlight/pen))
var/tmp_label = sanitize(input(user, "Enter a label for [src.name]","Label",src.label_text))
if(length(tmp_label) > 10)
user << "\red The label can be at most 10 characters long."
else
user << "\blue You set the label to \"[tmp_label]\"."
src.label_text = tmp_label
src.update_name_label()
proc/update_name_label()
if(src.label_text == "")
src.name = src.base_name
else
src.name = "[src.base_name] ([src.label_text])"
/obj/item/weapon/reagent_containers/glass/beaker
name = "beaker"
desc = "A beaker. Can hold up to 50 units."
icon = 'icons/obj/chemical.dmi'
icon_state = "beaker"
item_state = "beaker"
m_amt = 0
g_amt = 500
on_reagent_change()
update_icon()
pickup(mob/user)
..()
update_icon()
dropped(mob/user)
..()
update_icon()
@@ -0,0 +1,367 @@
////////////////////////////////////////////////////////////////////////////////
/// (Mixing)Glass.
////////////////////////////////////////////////////////////////////////////////
/obj/item/weapon/reagent_containers/glass
name = " "
var/base_name = " "
desc = " "
icon = 'icons/obj/chemical.dmi'
icon_state = "null"
item_state = "null"
amount_per_transfer_from_this = 10
possible_transfer_amounts = list(5,10,15,25,30,50)
volume = 50
flags = OPENCONTAINER
var/label_text = ""
// the fucking asshole who designed this can go die in a fire - Iamgoofball
var/list/can_be_placed_into = list(
/obj/machinery/chem_master/,
/obj/machinery/chem_heater/,
/obj/machinery/chem_dispenser/,
/obj/machinery/reagentgrinder,
/obj/structure/table,
/obj/structure/closet,
/obj/structure/sink,
/obj/item/weapon/storage,
/obj/machinery/atmospherics/unary/cryo_cell,
/obj/machinery/dna_scannernew,
/obj/item/weapon/grenade/chem_grenade,
/obj/machinery/bot/medbot,
/obj/item/weapon/storage/secure/safe,
/obj/machinery/iv_drip,
/obj/machinery/disease2/incubator,
/obj/machinery/disposal,
/obj/machinery/apiary,
/mob/living/simple_animal/cow,
/mob/living/simple_animal/hostile/retaliate/goat,
/obj/machinery/computer/centrifuge,
/obj/machinery/sleeper,
/obj/machinery/smartfridge/,
// /obj/machinery/biogenerator,
/obj/machinery/portable_atmospherics/hydroponics,
/obj/machinery/constructable_frame)
New()
..()
base_name = name
examine()
set src in view()
..()
if (!(usr in view(2)) && usr!=src.loc) return
usr << "\blue It contains:"
if(reagents && reagents.reagent_list.len)
usr << "\blue [src.reagents.total_volume] units of liquid."
else
usr << "\blue Nothing."
if (!is_open_container())
usr << "\blue Airtight lid seals it completely."
attack_self()
..()
if (is_open_container())
usr << "<span class = 'notice'>You put the lid on \the [src]."
flags ^= OPENCONTAINER
else
usr << "<span class = 'notice'>You take the lid off \the [src]."
flags |= OPENCONTAINER
update_icon()
afterattack(obj/target, mob/user, proximity)
if(!proximity) return
if (!is_open_container())
return
for(var/type in src.can_be_placed_into)
if(istype(target, type))
return
if(ismob(target) && target.reagents && reagents.total_volume)
user << "\blue You splash the solution onto [target]."
var/mob/living/M = target
var/list/injected = list()
for(var/datum/reagent/R in src.reagents.reagent_list)
injected += R.name
var/contained = english_list(injected)
M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been splashed with [src.name] by [user.name] ([user.ckey]). Reagents: [contained]</font>")
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [src.name] to splash [M.name] ([M.key]). Reagents: [contained]</font>")
if(M.ckey)
msg_admin_attack("[user.name] ([user.ckey]) splashed [M.name] ([M.key]) with [src.name]. Reagents: [contained] (INTENT: [uppertext(user.a_intent)]) (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[user.x];Y=[user.y];Z=[user.z]'>JMP</a>)")
if(!iscarbon(user))
M.LAssailant = null
else
M.LAssailant = user
for(var/mob/O in viewers(world.view, user))
O.show_message(text("\red [] has been splashed with something by []!", target, user), 1)
src.reagents.reaction(target, TOUCH)
spawn(5) src.reagents.clear_reagents()
return
else if(istype(target, /obj/structure/reagent_dispensers)) //A dispenser. Transfer FROM it TO us.
if(!target.reagents.total_volume && target.reagents)
user << "\red [target] is empty."
return
if(reagents.total_volume >= reagents.maximum_volume)
user << "\red [src] is full."
return
var/trans = target.reagents.trans_to(src, target:amount_per_transfer_from_this)
user << "\blue You fill [src] with [trans] units of the contents of [target]."
else if(target.is_open_container() && target.reagents) //Something like a glass. Player probably wants to transfer TO it.
if(!reagents.total_volume)
user << "\red [src] is empty."
return
if(target.reagents.total_volume >= target.reagents.maximum_volume)
user << "\red [target] is full."
return
if(istype(target, /obj/item/weapon/reagent_containers))
var/obj/item/weapon/reagent_containers/RC = target
for(var/bad_reg in RC.banned_reagents)
if(reagents.has_reagent(bad_reg, 1)) //Message is a bit "Game-y" but I can't think up a better one.
user << "<span class='warning'>A chemical in [src] is far too dangerous to transfer to [RC]!</span>"
return
// /vg/: Logging transfers of bad things
if(target.reagents_to_log.len)
var/list/badshit=list()
for(var/bad_reagent in target.reagents_to_log)
if(reagents.has_reagent(bad_reagent))
badshit += reagents_to_log[bad_reagent]
if(badshit.len)
var/hl="\red <b>([english_list(badshit)])</b> \black"
message_admins("[user.name] ([user.ckey]) added [reagents.get_reagent_ids(1)] to \a [target] with [src].[hl] (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[user.x];Y=[user.y];Z=[user.z]'>JMP</a>)")
log_game("[user.name] ([user.ckey]) added [reagents.get_reagent_ids(1)] to \a [target] with [src].")
var/trans = src.reagents.trans_to(target, amount_per_transfer_from_this)
user << "\blue You transfer [trans] units of the solution to [target]."
else if(istype(target, /obj/machinery/bunsen_burner))
return
else if(istype(target, /obj/machinery/radiocarbon_spectrometer))
return
else if(reagents.total_volume)
user << "\blue You splash the solution onto [target]."
src.reagents.reaction(target, TOUCH)
spawn(5) src.reagents.clear_reagents()
return
attackby(var/obj/item/I, mob/user as mob, params)
if(istype(I, /obj/item/clothing/mask/cigarette)) //ciggies are weird
return
if(is_hot(I))
if(src.reagents)
src.reagents.chem_temp += 15
user << "<span class='notice'>You heat [src] with [I].</span>"
src.reagents.handle_reactions()
if(istype(I, /obj/item/weapon/pen) || istype(I, /obj/item/device/flashlight/pen))
var/tmp_label = sanitize(input(user, "Enter a label for [src.name]","Label",src.label_text))
if(length(tmp_label) > 10)
user << "\red The label can be at most 10 characters long."
else
user << "\blue You set the label to \"[tmp_label]\"."
src.label_text = tmp_label
src.update_name_label()
proc/update_name_label()
if(src.label_text == "")
src.name = src.base_name
else
src.name = "[src.base_name] ([src.label_text])"
/obj/item/weapon/reagent_containers/glass/beaker
name = "beaker"
desc = "A beaker. Can hold up to 50 units."
icon = 'icons/obj/chemical.dmi'
icon_state = "beaker"
item_state = "beaker"
m_amt = 0
g_amt = 500
on_reagent_change()
update_icon()
pickup(mob/user)
..()
update_icon()
dropped(mob/user)
..()
update_icon()
attack_hand()
..()
update_icon()
update_icon()
overlays.Cut()
if(reagents.total_volume)
var/image/filling = image('icons/obj/reagentfillings.dmi', src, "[icon_state]10")
var/percent = round((reagents.total_volume / volume) * 100)
switch(percent)
if(0 to 9) filling.icon_state = "[icon_state]-10"
if(10 to 24) filling.icon_state = "[icon_state]10"
if(25 to 49) filling.icon_state = "[icon_state]25"
if(50 to 74) filling.icon_state = "[icon_state]50"
if(75 to 79) filling.icon_state = "[icon_state]75"
if(80 to 90) filling.icon_state = "[icon_state]80"
if(91 to INFINITY) filling.icon_state = "[icon_state]100"
filling.icon += mix_color_from_reagents(reagents.reagent_list)
overlays += filling
if (!is_open_container())
var/image/lid = image(icon, src, "lid_[initial(icon_state)]")
overlays += lid
/obj/item/weapon/reagent_containers/glass/beaker/large
name = "large beaker"
desc = "A large beaker. Can hold up to 100 units."
icon_state = "beakerlarge"
g_amt = 2500
volume = 100
amount_per_transfer_from_this = 10
possible_transfer_amounts = list(5,10,15,25,30,50,100)
flags = OPENCONTAINER
/obj/item/weapon/reagent_containers/glass/beaker/vial
name = "vial"
desc = "A small glass vial. Can hold up to 25 units."
icon_state = "vial"
g_amt = 250
volume = 25
amount_per_transfer_from_this = 10
possible_transfer_amounts = list(5,10,15,25)
flags = OPENCONTAINER
/obj/item/weapon/reagent_containers/glass/beaker/noreact
name = "cryostasis beaker"
desc = "A cryostasis beaker that allows for chemical storage without reactions. Can hold up to 50 units."
icon_state = "beakernoreact"
g_amt = 500
volume = 50
amount_per_transfer_from_this = 10
flags = OPENCONTAINER | NOREACT
/obj/item/weapon/reagent_containers/glass/beaker/bluespace
name = "bluespace beaker"
desc = "A bluespace beaker, powered by experimental bluespace technology and Element Cuban combined with the Compound Pete. Can hold up to 300 units."
icon_state = "beakerbluespace"
g_amt = 5000
volume = 300
amount_per_transfer_from_this = 10
possible_transfer_amounts = list(5,10,15,25,30,50,100,300)
flags = OPENCONTAINER
/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone
New()
..()
reagents.add_reagent("cryoxadone", 30)
update_icon()
/obj/item/weapon/reagent_containers/glass/beaker/sulphuric
New()
..()
reagents.add_reagent("sacid", 50)
update_icon()
/obj/item/weapon/reagent_containers/glass/beaker/slime
New()
..()
reagents.add_reagent("slimejelly", 50)
update_icon()
/obj/item/weapon/reagent_containers/glass/bucket
desc = "It's a bucket."
name = "bucket"
icon = 'icons/obj/janitor.dmi'
icon_state = "bucket"
item_state = "bucket"
m_amt = 200
g_amt = 0
w_class = 3.0
amount_per_transfer_from_this = 20
possible_transfer_amounts = list(5,10,15,25,30,50,80,100,120)
volume = 120
flags = OPENCONTAINER
attackby(var/obj/D, mob/user as mob, params)
if(isprox(D))
user << "You add [D] to [src]."
del(D)
user.put_in_hands(new /obj/item/weapon/bucket_sensor)
user.unEquip(src)
qdel(src)
else
..()
/obj/item/weapon/reagent_containers/glass/beaker/vial
name = "vial"
desc = "Small glass vial. Looks fragile."
icon_state = "vial"
g_amt = 500
volume = 15
amount_per_transfer_from_this = 5
possible_transfer_amounts = list(1,5,15)
flags = OPENCONTAINER
/*
/obj/item/weapon/reagent_containers/glass/blender_jug
name = "Blender Jug"
desc = "A blender jug, part of a blender."
icon = 'icons/obj/kitchen.dmi'
icon_state = "blender_jug_e"
volume = 100
on_reagent_change()
switch(src.reagents.total_volume)
if(0)
icon_state = "blender_jug_e"
if(1 to 75)
icon_state = "blender_jug_h"
if(76 to 100)
icon_state = "blender_jug_f"
/obj/item/weapon/reagent_containers/glass/canister //not used apparantly
desc = "It's a canister. Mainly used for transporting fuel."
name = "canister"
icon = 'icons/obj/tank.dmi'
icon_state = "canister"
item_state = "canister"
m_amt = 300
g_amt = 0
w_class = 4.0
amount_per_transfer_from_this = 20
possible_transfer_amounts = list(10,20,30,60)
volume = 120
/obj/item/weapon/reagent_containers/glass/dispenser
name = "reagent glass"
desc = "A reagent glass."
icon = 'icons/obj/chemical.dmi'
icon_state = "beaker0"
amount_per_transfer_from_this = 10
flags = OPENCONTAINER
/obj/item/weapon/reagent_containers/glass/dispenser/surfactant
name = "reagent glass (surfactant)"
icon_state = "liquid"
New()
..()
reagents.add_reagent("fluorosurfactant", 20)
*/