//////////////////////////////////////////////////////////////////////////////// /// Drinks. //////////////////////////////////////////////////////////////////////////////// /obj/item/reagent_containers/food/drinks name = "drink" desc = "yummy" icon = 'icons/obj/drinks.dmi' icon_state = null lefthand_file = 'icons/mob/inhands/misc/food_lefthand.dmi' righthand_file = 'icons/mob/inhands/misc/food_righthand.dmi' container_type = OPENCONTAINER var/gulp_size = 5 //This is now officially broken ... need to think of a nice way to fix it. possible_transfer_amounts = list(5,10,15,20,25,30,50) volume = 50 resistance_flags = NONE var/isGlass = TRUE //Whether the 'bottle' is made of glass or not so that milk cartons dont shatter when someone gets hit by it /obj/item/reagent_containers/food/drinks/on_reagent_change(changetype) if (gulp_size < 5) gulp_size = 5 else gulp_size = max(round(reagents.total_volume / 5), 5) /obj/item/reagent_containers/food/drinks/attack(mob/living/M, mob/user, def_zone) if(!reagents || !reagents.total_volume) to_chat(user, "[src] is empty!") return 0 if(!canconsume(M, user)) return 0 if (!is_drainable()) to_chat(user, "[src]'s lid hasn't been opened!") return 0 if(M == user) user.visible_message("[user] swallows a gulp of [src].", "You swallow a gulp of [src].") if(M.has_trait(TRAIT_VORACIOUS)) M.changeNext_move(CLICK_CD_MELEE * 0.5) //chug! chug! chug! else M.visible_message("[user] attempts to feed the contents of [src] to [M].", "[user] attempts to feed the contents of [src] to [M].") if(!do_mob(user, M)) return if(!reagents || !reagents.total_volume) return // The drink might be empty after the delay, such as by spam-feeding M.visible_message("[user] feeds the contents of [src] to [M].", "[user] feeds the contents of [src] to [M].") log_combat(user, M, "fed", reagents.log_list()) var/fraction = min(gulp_size/reagents.total_volume, 1) checkLiked(fraction, M) reagents.reaction(M, INGEST, fraction) reagents.trans_to(M, gulp_size) playsound(M.loc,'sound/items/drink.ogg', rand(10,50), 1) return 1 /obj/item/reagent_containers/food/drinks/afterattack(obj/target, mob/user , proximity) . = ..() if(!proximity) return if(target.is_refillable() && is_drainable()) //Something like a glass. Player probably wants to transfer TO it. if(!reagents.total_volume) to_chat(user, "[src] is empty.") return if(target.reagents.holder_full()) to_chat(user, "[target] is full.") return var/refill = reagents.get_master_reagent_id() var/trans = src.reagents.trans_to(target, amount_per_transfer_from_this) to_chat(user, "You transfer [trans] units of the solution to [target].") if(iscyborg(user)) //Cyborg modules that include drinks automatically refill themselves, but drain the borg's cell var/mob/living/silicon/robot/bro = user bro.cell.use(30) addtimer(CALLBACK(reagents, /datum/reagents.proc/add_reagent, refill, trans), 600) else if(target.is_drainable()) //A dispenser. Transfer FROM it TO us. if (!is_refillable()) to_chat(user, "[src]'s tab isn't open!") return if(!target.reagents.total_volume) to_chat(user, "[target] is empty.") return if(reagents.holder_full()) to_chat(user, "[src] is full.") return var/trans = target.reagents.trans_to(src, amount_per_transfer_from_this) to_chat(user, "You fill [src] with [trans] units of the contents of [target].") /obj/item/reagent_containers/food/drinks/attackby(obj/item/I, mob/user, params) var/hotness = I.is_hot() if(hotness && reagents) reagents.expose_temperature(hotness) to_chat(user, "You heat [name] with [I]!") ..() /obj/item/reagent_containers/food/drinks/throw_impact(atom/target, datum/thrownthing/throwinfo) . = ..() if(!.) //if the bottle wasn't caught smash(target, throwinfo.thrower, TRUE) /obj/item/reagent_containers/food/drinks/proc/smash(atom/target, mob/thrower, ranged = FALSE) if(!isGlass) return if(QDELING(src) || !target) //Invalid loc return if(bartender_check(target) && ranged) return var/obj/item/broken_bottle/B = new (loc) B.icon_state = icon_state var/icon/I = new('icons/obj/drinks.dmi', src.icon_state) I.Blend(B.broken_outline, ICON_OVERLAY, rand(5), 1) I.SwapColor(rgb(255, 0, 220, 255), rgb(0, 0, 0, 0)) B.icon = I B.name = "broken [name]" if(ranged) var/matrix/M = matrix(B.transform) M.Turn(rand(-170, 170)) B.transform = M B.pixel_x = rand(-12, 12) B.pixel_y = rand(-12, 12) if(prob(33)) new/obj/item/shard(drop_location()) playsound(src, "shatter", 70, 1) transfer_fingerprints_to(B) qdel(src) //////////////////////////////////////////////////////////////////////////////// /// Drinks. END //////////////////////////////////////////////////////////////////////////////// /obj/item/reagent_containers/food/drinks/trophy name = "pewter cup" desc = "Everyone gets a trophy." icon_state = "pewter_cup" w_class = WEIGHT_CLASS_TINY force = 1 throwforce = 1 amount_per_transfer_from_this = 5 materials = list(MAT_METAL=100) possible_transfer_amounts = list() volume = 5 flags_1 = CONDUCT_1 container_type = OPENCONTAINER spillable = TRUE resistance_flags = FIRE_PROOF isGlass = FALSE /obj/item/reagent_containers/food/drinks/trophy/gold_cup name = "gold cup" desc = "You're winner!" icon_state = "golden_cup" w_class = WEIGHT_CLASS_BULKY force = 14 throwforce = 10 amount_per_transfer_from_this = 20 materials = list(MAT_GOLD=1000) volume = 150 /obj/item/reagent_containers/food/drinks/trophy/silver_cup name = "silver cup" desc = "Best loser!" icon_state = "silver_cup" w_class = WEIGHT_CLASS_NORMAL force = 10 throwforce = 8 amount_per_transfer_from_this = 15 materials = list(MAT_SILVER=800) volume = 100 /obj/item/reagent_containers/food/drinks/trophy/bronze_cup name = "bronze cup" desc = "At least you ranked!" icon_state = "bronze_cup" w_class = WEIGHT_CLASS_SMALL force = 5 throwforce = 4 amount_per_transfer_from_this = 10 materials = list(MAT_METAL=400) volume = 25 ///////////////////////////////////////////////Drinks //Notes by Darem: Drinks are simply containers that start preloaded. Unlike condiments, the contents can be ingested directly // rather then having to add it to something else first. They should only contain liquids. They have a default container size of 50. // Formatting is the same as food. /obj/item/reagent_containers/food/drinks/coffee name = "robust coffee" desc = "Careful, the beverage you're about to enjoy is extremely hot." icon_state = "coffee" list_reagents = list("coffee" = 30) spillable = TRUE resistance_flags = FREEZE_PROOF isGlass = FALSE /obj/item/reagent_containers/food/drinks/ice name = "ice cup" desc = "Careful, cold ice, do not chew." icon_state = "coffee" list_reagents = list("ice" = 30) spillable = TRUE isGlass = FALSE /obj/item/reagent_containers/food/drinks/mug/ // parent type is literally just so empty mug sprites are a thing name = "mug" desc = "A drink served in a classy mug." icon_state = "tea" item_state = "coffee" spillable = TRUE /obj/item/reagent_containers/food/drinks/mug/on_reagent_change(changetype) if(reagents.total_volume) icon_state = "tea" else icon_state = "tea_empty" /obj/item/reagent_containers/food/drinks/mug/tea name = "Duke Purple tea" desc = "An insult to Duke Purple is an insult to the Space Queen! Any proper gentleman will fight you, if you sully this tea." list_reagents = list("tea" = 30) /obj/item/reagent_containers/food/drinks/mug/coco name = "Dutch hot coco" desc = "Made in Space South America." list_reagents = list("hot_coco" = 30, "sugar" = 5) foodtype = SUGAR resistance_flags = FREEZE_PROOF /obj/item/reagent_containers/food/drinks/dry_ramen name = "cup ramen" desc = "Just add 10ml of water, self heats! A taste that reminds you of your school years." icon_state = "ramen" list_reagents = list("dry_ramen" = 30) foodtype = GRAIN isGlass = FALSE /obj/item/reagent_containers/food/drinks/beer name = "space beer" desc = "Beer. In space." icon_state = "beer" list_reagents = list("beer" = 30) foodtype = GRAIN | ALCOHOL /obj/item/reagent_containers/food/drinks/beer/light name = "Carp Lite" desc = "Brewed with \"Pure Ice Asteroid Spring Water\"." list_reagents = list("light_beer" = 30) /obj/item/reagent_containers/food/drinks/ale name = "Magm-Ale" desc = "A true dorf's drink of choice." icon_state = "alebottle" item_state = "beer" list_reagents = list("ale" = 30) foodtype = GRAIN | ALCOHOL /obj/item/reagent_containers/food/drinks/sillycup name = "paper cup" desc = "A paper water cup." icon_state = "water_cup_e" possible_transfer_amounts = list() volume = 10 spillable = TRUE isGlass = FALSE /obj/item/reagent_containers/food/drinks/sillycup/on_reagent_change(changetype) if(reagents.total_volume) icon_state = "water_cup" else icon_state = "water_cup_e" /obj/item/reagent_containers/food/drinks/sillycup/smallcarton name = "small carton" desc = "A small carton, intended for holding drinks." icon_state = "juicebox" volume = 15 //I figure if you have to craft these it should at least be slightly better than something you can get for free from a watercooler /obj/item/reagent_containers/food/drinks/sillycup/smallcarton/smash(atom/target, mob/thrower, ranged = FALSE) if(bartender_check(target) && ranged) return var/obj/item/broken_bottle/B = new (loc) B.icon_state = icon_state var/icon/I = new('icons/obj/drinks.dmi', src.icon_state) I.Blend(B.broken_outline, ICON_OVERLAY, rand(5), 1) I.SwapColor(rgb(255, 0, 220, 255), rgb(0, 0, 0, 0)) B.icon = I B.name = "broken [name]" B.force = 0 B.throwforce = 0 B.desc = "A carton with the bottom half burst open. Might give you a papercut." if(ranged) var/matrix/M = matrix(B.transform) M.Turn(rand(-170, 170)) B.transform = M B.pixel_x = rand(-12, 12) B.pixel_y = rand(-12, 12) transfer_fingerprints_to(B) qdel(src) /obj/item/reagent_containers/food/drinks/sillycup/smallcarton/on_reagent_change(changetype) if (reagents.reagent_list.len) switch(reagents.get_master_reagent_id()) if("orangejuice") icon_state = "orangebox" name = "orange juice box" desc = "A great source of vitamins. Stay healthy!" foodtype = FRUIT if("milk") icon_state = "milkbox" name = "carton of milk" desc = "An excellent source of calcium for growing space explorers." foodtype = DAIRY if("applejuice") icon_state = "juicebox" name = "apple juice box" desc = "Sweet apple juice. Don't be late for school!" foodtype = FRUIT if("grapejuice") icon_state = "grapebox" name = "grape juice box" desc = "Tasty grape juice in a fun little container. Non-alcoholic!" foodtype = FRUIT if("chocolate_milk") icon_state = "chocolatebox" name = "carton of chocolate milk" desc = "Milk for cool kids!" foodtype = SUGAR if("eggnog") icon_state = "nog2" name = "carton of eggnog" desc = "For enjoying the most wonderful time of the year." foodtype = MEAT else icon_state = "juicebox" name = "small carton" desc = "A small carton, intended for holding drinks." //////////////////////////drinkingglass and shaker// //Note by Darem: This code handles the mixing of drinks. New drinks go in three places: In Chemistry-Reagents.dm (for the drink // itself), in Chemistry-Recipes.dm (for the reaction that changes the components into the drink), and here (for the drinking glass // icon states. /obj/item/reagent_containers/food/drinks/shaker name = "shaker" desc = "A metal shaker to mix drinks in." icon_state = "shaker" materials = list(MAT_METAL=1500) amount_per_transfer_from_this = 10 volume = 100 isGlass = FALSE /obj/item/reagent_containers/food/drinks/flask name = "flask" desc = "Every good spaceman knows it's a good idea to bring along a couple of pints of whiskey wherever they go." icon_state = "flask" materials = list(MAT_METAL=250) volume = 60 isGlass = FALSE /obj/item/reagent_containers/food/drinks/flask/gold name = "captain's flask" desc = "A gold flask belonging to the captain." icon_state = "flask_gold" materials = list(MAT_GOLD=500) /obj/item/reagent_containers/food/drinks/flask/det name = "detective's flask" desc = "The detective's only true friend." icon_state = "detflask" list_reagents = list("whiskey" = 30) /obj/item/reagent_containers/food/drinks/britcup name = "cup" desc = "A cup with the british flag emblazoned on it." icon_state = "britcup" volume = 30 spillable = TRUE //////////////////////////soda_cans// //These are in their own group to be used as IED's in /obj/item/grenade/ghettobomb.dm /obj/item/reagent_containers/food/drinks/soda_cans name = "soda can" lefthand_file = 'icons/mob/inhands/misc/food_lefthand.dmi' righthand_file = 'icons/mob/inhands/misc/food_righthand.dmi' container_type = NONE spillable = FALSE isGlass = FALSE /obj/item/reagent_containers/food/drinks/soda_cans/suicide_act(mob/living/carbon/user) user.visible_message("[user] is trying to eat \the [src]! It looks like [user.p_theyre()] trying to commit suicide!") var/obj/item/trash/can/crushed_can = new /obj/item/trash/can(user.loc) crushed_can.icon_state = icon_state qdel(src) return BRUTELOSS /obj/item/reagent_containers/food/drinks/soda_cans/attack(mob/M, mob/user) if(M == user && !src.reagents.total_volume && user.a_intent == INTENT_HARM && user.zone_selected == BODY_ZONE_HEAD) user.visible_message("[user] crushes the can of [src] on [user.p_their()] forehead!", "You crush the can of [src] on your forehead.") playsound(user.loc,'sound/weapons/pierce.ogg', rand(10,50), 1) var/obj/item/trash/can/crushed_can = new /obj/item/trash/can(user.loc) crushed_can.icon_state = icon_state qdel(src) ..() /obj/item/reagent_containers/food/drinks/soda_cans/attack_self(mob/user) if(!is_drainable()) to_chat(user, "You pull back the tab of \the [src] with a satisfying pop.") //Ahhhhhhhh container_type = OPENCONTAINER playsound(src, "can_open", 50, 1) spillable = TRUE return return ..() /obj/item/reagent_containers/food/drinks/soda_cans/cola name = "Space Cola" desc = "Cola. in space." icon_state = "cola" list_reagents = list("cola" = 30) foodtype = SUGAR /obj/item/reagent_containers/food/drinks/soda_cans/tonic name = "T-Borg's tonic water" desc = "Quinine tastes funny, but at least it'll keep that Space Malaria away." icon_state = "tonic" list_reagents = list("tonic" = 50) foodtype = ALCOHOL /obj/item/reagent_containers/food/drinks/soda_cans/sodawater name = "soda water" desc = "A can of soda water. Why not make a scotch and soda?" icon_state = "sodawater" list_reagents = list("sodawater" = 50) /obj/item/reagent_containers/food/drinks/soda_cans/lemon_lime name = "orange soda" desc = "You wanted ORANGE. It gave you Lemon Lime." icon_state = "lemon-lime" list_reagents = list("lemon_lime" = 30) foodtype = FRUIT /obj/item/reagent_containers/food/drinks/soda_cans/lemon_lime/Initialize() . = ..() name = "lemon-lime soda" /obj/item/reagent_containers/food/drinks/soda_cans/space_up name = "Space-Up!" desc = "Tastes like a hull breach in your mouth." icon_state = "space-up" list_reagents = list("space_up" = 30) foodtype = SUGAR | JUNKFOOD /obj/item/reagent_containers/food/drinks/soda_cans/starkist name = "Star-kist" desc = "The taste of a star in liquid form. And, a bit of tuna...?" icon_state = "starkist" list_reagents = list("cola" = 15, "orangejuice" = 15) foodtype = SUGAR | FRUIT | JUNKFOOD /obj/item/reagent_containers/food/drinks/soda_cans/space_mountain_wind name = "Space Mountain Wind" desc = "Blows right through you like a space wind." icon_state = "space_mountain_wind" list_reagents = list("spacemountainwind" = 30) foodtype = SUGAR | JUNKFOOD /obj/item/reagent_containers/food/drinks/soda_cans/thirteenloko name = "Thirteen Loko" desc = "The CMO has advised crew members that consumption of Thirteen Loko may result in seizures, blindness, drunkenness, or even death. Please Drink Responsibly." icon_state = "thirteen_loko" list_reagents = list("thirteenloko" = 30) foodtype = SUGAR | JUNKFOOD /obj/item/reagent_containers/food/drinks/soda_cans/dr_gibb name = "Dr. Gibb" desc = "A delicious mixture of 42 different flavors." icon_state = "dr_gibb" list_reagents = list("dr_gibb" = 30) foodtype = SUGAR | JUNKFOOD /obj/item/reagent_containers/food/drinks/soda_cans/pwr_game name = "Pwr Game" desc = "The only drink with the PWR that true gamers crave." icon_state = "purple_can" list_reagents = list("pwr_game" = 30) /obj/item/reagent_containers/food/drinks/soda_cans/shamblers name = "Shambler's juice" desc = "~Shake me up some of that Shambler's Juice!~" icon_state = "shamblers" list_reagents = list("shamblers" = 30) foodtype = SUGAR | JUNKFOOD /obj/item/reagent_containers/food/drinks/soda_cans/air name = "canned air" desc = "There is no air shortage. Do not drink." icon_state = "air" list_reagents = list("nitrogen" = 24, "oxygen" = 6)