mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-11 07:03:30 +01:00
Merge remote-tracking branch 'upstream/master' into smoke-fix
This commit is contained in:
@@ -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"
|
||||
|
||||
@@ -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."
|
||||
@@ -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)
|
||||
|
||||
*/
|
||||
Reference in New Issue
Block a user