diff --git a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_mining_telecomms.dmm b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_mining_telecomms.dmm index 127330a5feb..d66bb492e0f 100644 --- a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_mining_telecomms.dmm +++ b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_mining_telecomms.dmm @@ -104,7 +104,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/obj/item/food/liquidfood, +/obj/item/food/rations/liquidfood, /obj/item/pickaxe/emergency, /turf/simulated/floor/pod, /area/ruin/lavaland_relay) diff --git a/code/datums/outfits/outfit_admin.dm b/code/datums/outfits/outfit_admin.dm index 370d18f15bf..93d22ac4852 100644 --- a/code/datums/outfits/outfit_admin.dm +++ b/code/datums/outfits/outfit_admin.dm @@ -293,7 +293,8 @@ /obj/item/grenade/barrier, /obj/item/melee/energy/sword/saber, /obj/item/shield/energy, - /obj/item/soap/ds + /obj/item/soap/ds, + /obj/item/food/rations/liquidfood ) cybernetic_implants = list( @@ -318,7 +319,8 @@ /obj/item/flashlight/seclite, /obj/item/melee/energy/sword/saber, /obj/item/shield/energy, - /obj/item/disk/nuclear/unrestricted + /obj/item/disk/nuclear/unrestricted, + /obj/item/food/rations/liquidfood ) /datum/outfit/admin/deathsquad_commando/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) @@ -602,7 +604,8 @@ backpack_contents = list( /obj/item/storage/box/soviet = 1, - /obj/item/ammo_box/a762 = 4 + /obj/item/ammo_box/a762 = 4, + /obj/item/storage/soviet_ration = 1 ) /datum/outfit/admin/soviet/soldier @@ -616,9 +619,8 @@ backpack_contents = list( /obj/item/storage/box/soviet = 1, - /obj/item/lighter = 1, - /obj/item/storage/fancy/cigarettes/cigpack_robust = 1, - /obj/item/ammo_box/magazine/apsm10mm = 2 + /obj/item/ammo_box/magazine/apsm10mm = 2, + /obj/item/storage/soviet_ration = 1 ) /datum/outfit/admin/soviet/officer @@ -657,8 +659,7 @@ /obj/item/storage/box/soviet = 1, /obj/item/gun/projectile/automatic/pistol/type_230 = 1, /obj/item/ammo_box/magazine/apsm10mm = 2, - /obj/item/storage/fancy/cigarettes/cigpack_syndicate = 1, - /obj/item/lighter/zippo/engraved = 1 + /obj/item/storage/soviet_ration = 1 ) /datum/outfit/admin/soviet/marine/captain @@ -671,8 +672,7 @@ /obj/item/storage/box/soviet = 1, /obj/item/gun/projectile/revolver/mateba = 1, /obj/item/ammo_box/a357 = 2, - /obj/item/storage/fancy/cigarettes/cigpack_syndicate = 1, - /obj/item/lighter/zippo/engraved = 1 + /obj/item/storage/soviet_ration = 1 ) /datum/outfit/admin/soviet/admiral @@ -745,9 +745,10 @@ backpack_contents = list( /obj/item/clothing/shoes/magboots = 1, /obj/item/whetstone = 1, - /obj/item/storage/fancy/crayons/marine = 1, /obj/item/clothing/mask/gas/explorer/marines = 1, - /obj/item/reagent_containers/hypospray/autoinjector/survival = 1 + /obj/item/reagent_containers/hypospray/autoinjector/survival = 1, + /obj/item/storage/fancy/crayons/marine = 1, + /obj/item/storage/mre = 1 ) cybernetic_implants = list( /obj/item/organ/internal/cyberimp/arm/flash, @@ -795,7 +796,8 @@ /obj/item/storage/box/handcuffs = 1, /obj/item/reagent_containers/hypospray/autoinjector/survival = 1, /obj/item/clothing/mask/gas/explorer/marines = 1, - /obj/item/ammo_box/magazine/m50 = 3 + /obj/item/ammo_box/magazine/m50 = 3, + /obj/item/storage/mre = 1 ) is_solgov_lieutenant = TRUE @@ -810,7 +812,8 @@ l_hand = /obj/item/gun/projectile/automatic/ar backpack_contents = list( /obj/item/whetstone = 1, - /obj/item/reagent_containers/hypospray/autoinjector/survival = 1 + /obj/item/reagent_containers/hypospray/autoinjector/survival = 1, + /obj/item/storage/mre = 1 ) cybernetic_implants = list( /obj/item/organ/internal/cyberimp/eyes/hud/security, @@ -833,7 +836,8 @@ backpack_contents = list( /obj/item/storage/box/handcuffs = 1, /obj/item/reagent_containers/hypospray/autoinjector/survival = 1, - /obj/item/ammo_box/magazine/m50 = 3 + /obj/item/ammo_box/magazine/m50 = 3, + /obj/item/storage/mre = 1 ) is_solgov_lieutenant = TRUE @@ -1569,7 +1573,8 @@ /obj/item/storage/box/smoke_grenades = 1, /obj/item/lighter/zippo = 1, /obj/item/clothing/mask/cigarette/cigar = 3, - /obj/item/clothing/mask/gas/explorer = 1 + /obj/item/clothing/mask/gas/explorer = 1, + /obj/item/storage/mre = 1 ) bio_chips = list(/obj/item/bio_chip/stealth) diff --git a/code/game/objects/effects/spawners/random/bluespace_tap_spawners.dm b/code/game/objects/effects/spawners/random/bluespace_tap_spawners.dm index 5b214141b2d..f8908238a8a 100644 --- a/code/game/objects/effects/spawners/random/bluespace_tap_spawners.dm +++ b/code/game/objects/effects/spawners/random/bluespace_tap_spawners.dm @@ -280,7 +280,7 @@ /obj/item/food/dionaroast, /obj/item/food/boiledslimecore, /obj/item/food/burger/brain, - /obj/item/food/liquidfood, + /obj/item/food/rations/liquidfood, /obj/item/food/burger/ghost, /obj/item/food/burger/hamborger, /obj/item/food/burger/ppatty/rainbow, diff --git a/code/game/objects/items/weapons/kitchen.dm b/code/game/objects/items/weapons/kitchen.dm index d8d8c16c8f1..08352887903 100644 --- a/code/game/objects/items/weapons/kitchen.dm +++ b/code/game/objects/items/weapons/kitchen.dm @@ -156,6 +156,13 @@ flags = NONE materials = list(MAT_PLASTIC = 2000) +/obj/item/kitchen/utensil/pspoon/mre + name = "\improper MRE spoon" + desc = "A military-grade plastic spoon. Robust construction, thin end towards enemy." + icon_state = "pspoon_mre" + force = 10 + attack_verb = list("attacked", "poked", "stabbed", "shanked") + /obj/item/kitchen/utensil/spork name = "spork" desc = "It's a spork. Marvel at its innovative design." diff --git a/code/game/objects/items/weapons/storage/ration_pack.dm b/code/game/objects/items/weapons/storage/ration_pack.dm new file mode 100644 index 00000000000..53c247028bf --- /dev/null +++ b/code/game/objects/items/weapons/storage/ration_pack.dm @@ -0,0 +1,195 @@ + + +/obj/item/storage/soviet_ration + name = "The People's Field Ration" + desc = "A compact USSP-produced field ration designed to feed a soldier in active combat for multiple days. Contains bars of ultra-condensed nutrition for maximum efficiency, \ + making it both the lightest and most calorie-dense ration in the entire Orion Arm. The USSP Bureau of Food stamp on the side certifies it as edible.\ + The USSP Bureau of Construction stamp on the other side certifies it as suitable to use as a building material." + icon_state = "ration_soviet" + can_hold = list( + /obj/item/food/rations, + /obj/item/reagent_containers/drinks/cans/sodawater, + /obj/item/clothing/mask/cigarette, + /obj/item/storage/fancy/cigarettes, + /obj/item/storage/fancy/matches, + /obj/item/match + ) + +/obj/item/storage/soviet_ration/populate_contents() + new /obj/item/food/rations/nutrient_prism(src) + new /obj/item/food/rations/nutrient_prism(src) + new /obj/item/food/rations/nutrient_prism(src) + new /obj/item/food/rations/nutrient_prism(src) + new /obj/item/reagent_containers/drinks/cans/sodawater(src) + new /obj/item/storage/fancy/cigarettes/cigpack_our_brand(src) + new /obj/item/storage/fancy/matches(src) + +#define MAIN_FOOD 1 +#define SIDE_FOOD 2 +#define SNACK_FOOD 3 +#define DESSERT_FOOD 4 + +// Base type will randomly pick one of the menus. +/obj/item/storage/mre + name = "Meal, Ready-to-Eat" + desc = "A compact SolGov-produced field ration designed to feed a soldier in active combat. Contains self-heating food packets that require no prior preperation. \ + It meets all of the legal and technical requirements to be considered real food!" + icon_state = "ration_solgov" + storage_slots = 8 + drop_sound = null + pickup_sound = null + can_hold = list( + /obj/item/food/rations, + /obj/item/reagent_containers/glass/beaker/waterbottle, + /obj/item/clothing/mask/cigarette, + /obj/item/storage/fancy/cigarettes, + /obj/item/storage/fancy/matches, + /obj/item/match, + /obj/item/kitchen/utensil/pspoon/mre + ) + /// Has anyone looked inside the MRE yet? Setting to TRUE changes the sprite and allows items to be added to the container. + var/opened = FALSE + /// Determines what set of food items will spawn in the MRE. Also alters the name and description of the MRE. + var/menu_option + /// Used when populating contents after doing get_menu_items(). + var/main_food + /// Used when populating contents after doing get_menu_items(). + var/side_food + /// Used when populating contents after doing get_menu_items(). + var/snack_food + /// Used when populating contents after doing get_menu_items(). + var/dessert_food + +/obj/item/storage/mre/Initialize(mapload) + if(!menu_option) + menu_option = pick("Chicken & Cavatelli", "BBQ Pork & Rice", "Pepperoni Pizza & Cheese-Filled Crackers", "Sushi & Rice Onigiri", "Spaghetti & Meatballs", "Creamy Spinach Fettuccini", "Cheese & Veggie Omlette") + name = "[name] ([menu_option])" + get_menu_items(menu_option) + . = ..() + +/obj/item/storage/mre/show_to(mob/user as mob) + if(!opened) + opened = TRUE + icon_state = "ration_solgov_open" + playsound(loc, 'sound/items/poster_ripped.ogg', 50, TRUE, -5) + to_chat(user, "You tear open the packaging of [src].") + ..() + +/obj/item/storage/mre/can_be_inserted(obj/item/I as obj, stop_messages = FALSE) + if(!opened) + to_chat(usr, "You need to open [src] before you can put things inside it.") + return FALSE + + return ..() + +/obj/item/storage/mre/examine() + . = ..() + . += "This one contains the [menu_option] menu." + if(menu_option == "Cheese & Veggie Omlette") + // The Cheese & Veggie Omlette is widely considered to be the most vile, disgusting MRE menu in history. + . += "Looks like you'll be going hungry tonight..." + +/obj/item/storage/mre/examine_more(mob/user) + . = ..() + . += "The MRE is a lightweight, multi-component field ration used by the armed forces of the Trans-Solar Federation. The food is fortified with additional vitamins and nutrients, \ +and designed with a minimum shelf life of 10 years. It's not exactly the most appetising thing out there, how appealing the food is can vary a lot, but it'll refill your energy after a strenuous day's work." + . += "" + . += "In addition to being used in all branches of the TSF's armed forces, it is also distributed as food aid in disaster zones, and can be bought from surplus sales. \ +Frequently bought by preppers, explorers, and colonists heading out to the frontier." + +/obj/item/storage/mre/populate_contents() + new main_food(src) + new side_food(src) + new snack_food(src) + new dessert_food(src) + new /obj/item/kitchen/utensil/pspoon/mre(src) + new /obj/item/reagent_containers/glass/beaker/waterbottle(src) + new /obj/item/storage/fancy/cigarettes/cigpack_solar_rays(src) + new /obj/item/storage/fancy/matches(src) + +/** + * Selects one of several MRE menus based on the menu_option of the MRE. + * + * Arguments: + * * menu_item_list - Static list containing the food items associated with each MRE menu option. + * * main_food - Takes first food item from the list for use in populate_contents(). + * * side_food - Takes second food item from the list for use in populate_contents(). + * * snack_food - Takes third food item from the list for use in populate_contents(). + * * dessert_food - Takes fourth food item from the list for use in populate_contents(). + */ +/obj/item/storage/mre/proc/get_menu_items() + var/static/list/menu_item_list = list( + "Chicken & Cavatelli" = list( + /obj/item/food/rations/mre/chicken, + /obj/item/food/rations/mre/cavatelli, + /obj/item/food/rations/mre/trail_mix, + /obj/item/food/rations/mre/brownie + ), + "BBQ Pork & Rice" = list( + /obj/item/food/rations/mre/pork, + /obj/item/food/rations/mre/rice, + /obj/item/food/rations/mre/fighting_fuel, + /obj/item/food/rations/mre/pancake + ), + "Pepperoni Pizza & Cheese-Filled Crackers" = list( + /obj/item/food/rations/mre/pizza, + /obj/item/food/rations/mre/cheese_crackers, + /obj/item/food/rations/mre/trail_mix, + /obj/item/food/rations/mre/smores + ), + "Sushi & Rice Onigiri" = list( + /obj/item/food/rations/mre/sushi, + /obj/item/food/rations/mre/onigiri, + /obj/item/food/rations/mre/bun, + /obj/item/food/rations/mre/spiced_apple + ), + "Spaghetti & Meatballs" = list( + /obj/item/food/rations/mre/spaghetti, + /obj/item/food/rations/mre/meatballs, + /obj/item/food/rations/mre/peanut_crackers, + /obj/item/food/rations/mre/flan + ), + "Creamy Spinach Fettuccini" = list( + /obj/item/food/rations/mre/fettuccini, + /obj/item/food/rations/mre/pretzel_nugget, + /obj/item/food/rations/mre/fighting_fuel, + /obj/item/food/rations/mre/pbj + ), + // The Vomlette. The worst MRE in history. + "Cheese & Veggie Omlette" = list( + /obj/item/food/rations/mre/vomlette, + /obj/item/food/rations/mre/cheese_crackers, + /obj/item/food/rations/mre/bun, + /obj/item/food/rations/mre/granola + ) + ) + main_food = menu_item_list[menu_option][MAIN_FOOD] + side_food = menu_item_list[menu_option][SIDE_FOOD] + snack_food = menu_item_list[menu_option][SNACK_FOOD] + dessert_food = menu_item_list[menu_option][DESSERT_FOOD] + +/obj/item/storage/mre/chicken + menu_option = "Chicken & Cavatelli" + +/obj/item/storage/mre/pork + menu_option = "BBQ Pork & Rice" + +/obj/item/storage/mre/pizza + menu_option = "Pepperoni Pizza & Cheese-Filled Crackers" + +/obj/item/storage/mre/sushi + menu_option = "Sushi & Rice Onigiri" + +/obj/item/storage/mre/spaghetti + menu_option = "Spaghetti & Meatballs" + +/obj/item/storage/mre/fettuccini + menu_option = "Creamy Spinach Fettuccini" + +/obj/item/storage/mre/vomlette + menu_option = "Cheese & Veggie Omlette" + +#undef MAIN_FOOD +#undef SIDE_FOOD +#undef SNACK_FOOD +#undef DESSERT_FOOD diff --git a/code/modules/food_and_drinks/food/foods/misc_food.dm b/code/modules/food_and_drinks/food/foods/misc_food.dm index 37aa5d5afbd..3e228086384 100644 --- a/code/modules/food_and_drinks/food/foods/misc_food.dm +++ b/code/modules/food_and_drinks/food/foods/misc_food.dm @@ -290,12 +290,3 @@ to_chat(user, SPAN_USERDANGER("You bite down on an un-popped kernel!")) unpopped = max(0, unpopped-1) ..() - -/obj/item/food/liquidfood - name = "\improper LiquidFood ration" - desc = "A prepackaged grey slurry of all the essential nutrients for a spacefarer on the go. Should this be crunchy?" - icon_state = "liquidfood" - trash = /obj/item/trash/liquidfood - filling_color = "#A8A8A8" - bitesize = 4 - list_reagents = list("nutriment" = 20, "iron" = 3, "vitamin" = 2) diff --git a/code/modules/food_and_drinks/food/foods/rations.dm b/code/modules/food_and_drinks/food/foods/rations.dm new file mode 100644 index 00000000000..fad88102da2 --- /dev/null +++ b/code/modules/food_and_drinks/food/foods/rations.dm @@ -0,0 +1,299 @@ +// MARK: Standalone Rations +/obj/item/food/rations + name = "arbitrary ration" + desc = "If you can see this, make an issue report on GitHub. Something went wrong!" + icon = 'icons/obj/food/rations.dmi' + icon_state = "liquidfood" + /// For rations with removable packaging. + var/opened = FALSE + /// Icon to swap to when the packaging is opened. + var/opened_icon = "liquidfood" + +/obj/item/food/rations/interact_with_atom(atom/target, mob/living/user, list/modifiers) + if(opened || !ishuman(target)) + return ..() + + to_chat(user, "[src] cannot be eaten without removing the packaging first!") + return ITEM_INTERACT_COMPLETE + +/obj/item/food/rations/activate_self(mob/user) + if(..()) + return + + if(!opened) + opened = TRUE + update_icon(UPDATE_ICON_STATE) + playsound(loc, 'sound/items/poster_ripped.ogg', 50, TRUE, -5) + to_chat(user, "You tear open the packaging of [src].") + +/obj/item/food/rations/update_icon_state() + icon_state = opened_icon + +/obj/item/food/rations/liquidfood + name = "\improper LiquidFood ration packet" + desc = "A prepackaged grey slurry containing all the essential vitamins, nutrients, and calories that a hungry spacefarer needs. Guaranteed to cause mental breakdowns after only 2 consecutive days of consumption." + consume_sound = 'sound/items/drink.ogg' + opened = TRUE + trash = /obj/item/trash/liquidfood + filling_color = "#A8A8A8" + list_reagents = list("nutriment" = 20, "iron" = 5, "vitamin" = 10) + tastes = list("chemicals" = 3, "mush" = 2, "artificial vanilla, struggling to reach your tastebuds" = 1) + +/obj/item/food/rations/liquidfood/examine_more(mob/user) + . = ..() + . += "LiquidFood rations were created by the startup UltraFood Solutions in response to a call by the Trans-Solar Federation's armed forces to develop an ultra high-performance combat ration for use by elite units." + . += "" + . += "Through tireless research, constant re-evaluation, and (some would say) dubious testing methodology, they successfully created what they pitched as the perfect ration: \ + lightweight, compact, requiring no preperation, able to be consumed on the move, full of nutrition that is fully absorbed by all humanoid species, all while being cheap and easy to mass manufacture." + . += "" + . += "Unfortunately, the TSF's trials of the new ration revealed that it was almost universally loathed by anyone that consumed it. \ + Whilst it was ultimately rejected, UltraFood simply turned around and started marketing to penny-pinching megacorporations that didn't care about that particular detail." + // Only show the snarky final part if you actually work for NT. + if(user.mind.special_role) + var/role = lowertext(user.mind.special_role) + if(!role == SPECIAL_ROLE_DEATHSQUAD && !role == ROLE_ERT) + return + . += "" + . += "Like the one you work for..." + +/obj/item/food/rations/liquidfood/On_Consume(mob/M, mob/user) + if(prob(10)) + M.visible_message( + SPAN_DANGER("[M] vomits on the floor profusely!"), + SPAN_DANGER("The vile taste of [src] overpowers you, and you empty your stomach onto the floor!"), + SPAN_DANGER("You hear someone vomiting all over the floor!") + ) + M.fakevomit(no_text = 1) + M.adjust_nutrition(-rand(5, 10)) + +/obj/item/food/rations/nutrient_prism + name = "type I survival bar" + desc = "The standard field ration for the USSP. An ultra-dense bar of compressed nutritional components and essential vitamins, known to be difficult to chew. \ + It has a shelf life so long that it has not yet been demonstrated to exist." + icon_state = "nutrient_prism" + opened_icon = "nutrient_prism_open" + bitesize = 5 // It will take a while to get through this thing. + list_reagents = list("nutriment" = 30, "vitamin" = 20) // It's PURE, CONCENTRATED NUTRITION, COMRADE! + tastes = list("malt" = 3, "whey protien" = 2, "expired multivitamins" = 1) + +/obj/item/food/rations/nutrient_prism/examine_more(mob/user) + . = ..() + . += "The Type I Survival Bar replaced the USSP's older ramshackle collection of canned rations in 2530, \ + with the dual aim of reducing the carry mass and volume of its soldiers, and massively simplifying the food logistics involved with supplying its vast armies." + . += "" + . += "Weighing just 600 grams and small enough to fit into any pocket, it is a testement to the genius minds of the USSP's food scientists. \ + It also takes forever to chew through it thanks to its sheer density and chewy texture, and the flavour is quite bland - with no menu variation. \ + Rumors are abound that the Type II may finally be on the horizon, giving a glimmer of hope that something better will come along." + +/obj/item/food/rations/nutrient_prism/interact_with_atom(atom/target, mob/living/user, list/modifiers) + if(!ishuman(target)) + return ..() + + if(!opened) + to_chat(user, "[src] cannot be eaten without removing the packaging first!") + return ITEM_INTERACT_COMPLETE + + to_chat(user, "You start to bite into [src] and try to rip a small piece off.") + if(!do_after_once(user, delay = 5 SECONDS, target = user)) // It's VERY VERY chewy. A few months of service and you shall have the most strong, chiseled jaw ever. Like the soldiers on propaganda posters have. + to_chat(user, "You give up on trying to bite through [src].") + return ITEM_INTERACT_COMPLETE + + to_chat(user, "You successfully manage to rip a small chunk out of [src].") + return ..() + +// MARK: MRE Mains +/obj/item/food/rations/mre/chicken + name = "fried chicken breast" + desc = "It's a little tough, but the taste is still fine." + icon_state = "ration_pouch" + opened_icon = "chicken" + list_reagents = list("nutriment" = 3, "vitamin" = 5, "protein" = 12, "salt" = 3) + tastes = list("chicken" = 3, "salt and spices" = 2) + +/obj/item/food/rations/mre/pork + name = "Boneless BBQ Pork" + desc = "Smokey, meaty, delicous. The sauce is a little dry." + icon_state = "ration_pouch" + opened_icon = "boneless_pork" + list_reagents = list("nutriment" = 3, "vitamin" = 5, "protein" = 12, "bbqsauce" = 10, "salt" = 3) + tastes = list("pork" = 2, "BBQ sauce" = 3, "salt" = 1) + +/obj/item/food/rations/mre/pizza + name = "pepperoni pizza square" + desc = "Unfortunately, you can go wrong with pizza." + icon_state = "ration_pouch" + opened_icon = "pizza_square" + list_reagents = list("nutriment" = 10, "protein" = 5, "tomatojuice" = 6) + tastes = list("cheese" = 2, "cardboard" = 3, "bread" = 1) + +/obj/item/food/rations/mre/sushi + name = "sushi bites" + desc = "Multiple bits of assorted sushi. The fish is cooked..." + icon_state = "ration_pouch" + opened_icon = "sushi_bites" + list_reagents = list("vitamin" = 4, "protein" = 8, "plantmatter" = 8) + tastes = list("rice" = 3, "fish" = 2, "egg" = 2, "seaweed" = 1) + +/obj/item/food/rations/mre/spaghetti + name = "spaghetti bolognese" + desc = "A mass of overcooked spaghetti in tomato purée." + icon_state = "ration_pouch" + opened_icon = "spaghetti_pouch" + list_reagents = list("vitamin" = 6, "plantmatter" = 12, "tomatojuice" = 6, "salt" = 3) + tastes = list("spaghetti" = 2, "tomato" = 3) + +/obj/item/food/rations/mre/fettuccini + name = "spinach fettuccini" + desc = "A mixture of pasta and spinach in a creamy sauce. Doesn't smell inviting." + icon_state = "ration_pouch" + opened_icon = "fettuccini_pouch" + list_reagents = list("nutriment" = 4, "vitamin" = 10, "plantmatter" = 12, "salt" = 3) + tastes = list("rubbery pasta" = 2, "earthy spinach" = 2, "an unsettling cream sauce" = 3, "herbs" = 1, "salt" = 1) + +/obj/item/food/rations/mre/vomlette + name = "cheese and vegetable omlette" + desc = "Also known as the \"Vomlette\". It doesn't look like an omelette, it doesn't taste like an omelette, and it sure as hell doesn't smell like an omelette! No redeeming qualities whatsoever." + icon_state = "ration_pouch" + opened_icon = "vomlette" + list_reagents = list("nutriment" = 10, "plantmatter" = 15) + tastes = list("very artificial cheese" = 3, "chemicals" = 2 , "artificial preservatives" = 1, "something resembling a vegetable" = 2) + +// MARK: MRE Sides +/obj/item/food/rations/mre/cavatelli + name = "cavatelli pasta" + desc = "Lots of bits of cavatelli. Some of them are still hard and crunchy." + icon_state = "ration_pouch" + opened_icon = "pasta_pouch" + list_reagents = list("nutriment" = 5, "vitamin" = 3, "salt" = 3) + tastes = list("pasta" = 3, "salt" = 1) + +/obj/item/food/rations/mre/rice + name = "fried rice" + desc = "A portion of dry fried rice." + icon_state = "ration_pouch" + opened_icon = "rice_pouch" + list_reagents = list("nutriment" = 5, "plantmatter" = 5, "salt" = 1) + tastes = list("rice" = 3, "salt" = 1) + +/obj/item/food/rations/mre/cheese_crackers + name = "cheese crackers" + desc = "Crackers injected with imitation cheese product." + icon_state = "ration_packet" + opened_icon = "cheese_cracker" + list_reagents = list("nutriment" = 5, "plantmatter" = 5, "salt" = 3) + tastes = list("cracker" = 2, "artificial cheese" = 2, "salt" = 1) + +/obj/item/food/rations/mre/onigiri + name = "rice onigiri" + desc = "A ball of sticky white rice with a strip of seaweed wrapped around the base. This one is actually okay." + icon_state = "ration_packet" + opened_icon = "onigiri" + list_reagents = list("nutriment" = 3, "vitamin" = 3, "plantmatter" = 4) + tastes = list("rice" = 2, "sweetness" = 3, "seaweed" = 1) + +/obj/item/food/rations/mre/meatballs + name = "meatballs" + desc = "A collection of small meatballs. Some of them are charred." + icon_state = "ration_pouch" + opened_icon = "meatball_cluster" + list_reagents = list("nutriment" = 1, "vitamin" = 4, "protein" = 4) + tastes = list("meat" = 3) + +/obj/item/food/rations/mre/pretzel_nugget + name = "pretzel nuggets" + desc = "A collection of crunchy treats, flavoured with honey mustard and big salt crystals." + icon_state = "ration_packet" + opened_icon = "pretzel_nuggets" + list_reagents = list("nutriment" = 8, "plantmatter" = 1, "salt" = 5) + tastes = list("mustard" = 2, "tangy sweetness" = 2, "salt" = 2) + +// MARK: MRE Snacks +/obj/item/food/rations/mre/peanut_crackers + name = "peanut butter crackers" + desc = "Crackers injected with peanut butter. The crackers are liable to crumble before you can get them to your mouth." + icon_state = "ration_packet" + opened_icon = "peanut_cracker" + list_reagents = list("nutriment" = 5, "peanutbutter" = 5, "salt" = 3) + tastes = list("peanut butter" = 3, "cracker" = 2, "salt" = 1) + +/obj/item/food/rations/mre/fighting_fuel // Powerful ration bar, can also be found on its own. + name = "fighting fuel" + desc = "A nutritious, calorie-dense energy bar that is also found in the pre-emptive strike ration - manufactured by SolGov. Makes you want to scream \"OORAH!\". \ + People are known to save the label to affix it to various items." + icon_state = "fighting_fuel" + opened_icon = "fighting_fuel_open" + list_reagents = list("vitamin" = 13, "chocolate" = 5) + tastes = list("chocolate" = 2, "fruits and nuts" = 2, "FREEDOM" = 3) + +/obj/item/food/rations/mre/bun + name = "cinnamon bun" + desc = "Despite alledgedly being a bun, it's more like cake. Contains so much sugar that your teeth are getting cavities just from looking at this thing." + icon_state = "ration_pouch" + opened_icon = "cinnamon_bun" + list_reagents = list("nutriment" = 5, "sugar" = 15) + tastes = list("overwhelming sweetness" = 3, "cinnamon" = 2, "cake" = 3, "bread" = 1) + +/obj/item/food/rations/mre/trail_mix + name = "recovery trail mix" + desc = "A healthy mix of dried fruit and nuts, helps keep hunger at bay." + icon_state = "ration_packet" + opened_icon = "trail_mix" + list_reagents = list("vitamin" = 6) + tastes = list("fruits" = 2, "nuts" = 2) + +// MARK: MRE Desserts +/obj/item/food/rations/mre/brownie + name = "chocolate brownie" + desc = "The flavour is so good, you don't really mind that it's dry and crumbly." + icon_state = "ration_packet" + opened_icon = "brownie" + list_reagents = list("nutriment" = 6, "chocolate" = 5, "sugar" = 3) + tastes = list("chocolate" = 3, "sweetness" = 2) + +/obj/item/food/rations/mre/flan + name = "honey flan" + desc = "A sweet dessert made from condensed milk, caramel sauce, and honey. This jackpot item has high value in ration trading." + icon_state = "ration_packet" + opened_icon = "flan" + list_reagents = list("nutriment" = 5, "honey" = 2, "cream" = 2, "milk" = 2, "sugar" = 3) + tastes = list("honey" = 3, "caramel" = 2, "sweetness" = 2) + +/obj/item/food/rations/mre/pbj + name = "peanut butter & jelly cracker" + desc = "A large cracker filled with a PB&J mix. Takes the edge off." + icon_state = "ration_packet" + opened_icon = "pbj_cracker" + list_reagents = list("nutriment" = 6, "peanutbutter" = 3, "cherryjelly" = 3, "sugar" = 2) + tastes = list("peanut butter" = 2, "jelly" = 2, "cracker" = 1) + +/obj/item/food/rations/mre/spiced_apple + name = "spiced apple" + desc = "An apple, sliced into sections, drenched in a spiced cinnamon sauce." + icon_state = "ration_pouch" + opened_icon = "spiced_apple" + list_reagents = list("nutriment" = 6, "sugar" = 4) + tastes = list("cinnamon" = 2, "apple" = 2, "spices" = 1) + +/obj/item/food/rations/mre/smores + name = "military-grade s'mores bar" + desc = "A bunch of marshmallows and chocolate bits stuck together with sticky granola. Surprisingly tastes better than any s'mores bar you can find in stores." + icon_state = "ration_bar" + opened_icon = "smores" + list_reagents = list("nutriment" = 6, "chocolate" = 3, "sugar" = 8) + tastes = list("chocolate" = 2, "marshmallow" = 2, "sweet sticky granola" = 3) + +/obj/item/food/rations/mre/pancake + name = "maple syrup pancake" + desc = "A pancake fortified with maple syrup and butter. A wonder of modern food technology." + icon_state = "ration_pouch" + opened_icon = "pancake" + list_reagents = list("nutriment" = 5, "sugar" = 12) + tastes = list("pancake" = 2, "maple syrup" = 3, "butter" = 1) + +/obj/item/food/rations/mre/granola + name = "blueberry granola" + desc = "Blueberry granola suspended in milk. It's less bad than it sounds." + icon_state = "ration_pouch" + opened_icon = "granola_drink" + list_reagents = list("vitamin" = 3, "milk" = 5, "sugar" = 5) + tastes = list("blueberry" = 3, "granola" = 2, "milk" = 3) diff --git a/code/modules/response_team/ert_outfits.dm b/code/modules/response_team/ert_outfits.dm index 11b3ef0e3c1..a058aff0189 100644 --- a/code/modules/response_team/ert_outfits.dm +++ b/code/modules/response_team/ert_outfits.dm @@ -60,7 +60,8 @@ /obj/item/clothing/head/helmet/ert/command = 1, /obj/item/restraints/handcuffs = 1, /obj/item/storage/box/mindshield = 1, - /obj/item/flashlight = 1 + /obj/item/flashlight = 1, + /obj/item/food/rations/liquidfood ) /datum/outfit/job/response_team/commander/red @@ -76,7 +77,8 @@ /obj/item/door_remote/omni = 1, /obj/item/restraints/handcuffs = 1, /obj/item/clothing/shoes/magboots = 1, - /obj/item/storage/box/mindshield = 1 + /obj/item/storage/box/mindshield = 1, + /obj/item/food/rations/liquidfood ) cybernetic_implants = list( @@ -104,7 +106,8 @@ /obj/item/camera_bug/ert = 1, /obj/item/door_remote/omni = 1, /obj/item/ammo_box/magazine/enforcer/lethal = 2, - /obj/item/gun/energy/gun/blueshield/pdw9 = 1 + /obj/item/gun/energy/gun/blueshield/pdw9 = 1, + /obj/item/food/rations/liquidfood ) cybernetic_implants = list( @@ -145,7 +148,8 @@ /obj/item/clothing/head/helmet/ert/security = 1, /obj/item/storage/box/zipties = 1, /obj/item/storage/box/teargas = 1, - /obj/item/flashlight/seclite = 1 + /obj/item/flashlight/seclite = 1, + /obj/item/food/rations/liquidfood ) /datum/outfit/job/response_team/security/red @@ -161,7 +165,8 @@ /obj/item/clothing/shoes/magboots = 1, /obj/item/storage/box/handcuffs = 1, /obj/item/grenade/flashbang = 2, - /obj/item/ammo_box/magazine/laser/ert = 2 + /obj/item/ammo_box/magazine/laser/ert = 2, + /obj/item/food/rations/liquidfood ) cybernetic_implants = list( @@ -191,7 +196,8 @@ /obj/item/storage/box/flashbangs = 1, /obj/item/whetstone = 1, /obj/item/storage/box/breaching = 1, - /obj/item/gun/energy/gun/nuclear = 1 + /obj/item/gun/energy/gun/nuclear = 1, + /obj/item/food/rations/liquidfood ) cybernetic_implants = list( @@ -236,7 +242,8 @@ /obj/item/stack/sheet/metal/fifty = 1, /obj/item/flashlight = 1, /obj/item/rpd = 1, - /obj/item/storage/bag/construction = 1 + /obj/item/storage/bag/construction = 1, + /obj/item/food/rations/liquidfood ) cybernetic_implants = list( @@ -259,7 +266,8 @@ /obj/item/rcd_ammo = 3, /obj/item/gun/energy/gun = 1, /obj/item/rpd/bluespace = 1, - /obj/item/storage/bag/construction = 1 + /obj/item/storage/bag/construction = 1, + /obj/item/food/rations/liquidfood ) cybernetic_implants = list( @@ -288,7 +296,8 @@ /obj/item/rcd_ammo/large = 3, /obj/item/gun/energy/gun/blueshield/pdw9 = 1, /obj/item/rpd/bluespace = 1, - /obj/item/storage/bag/construction = 1 + /obj/item/storage/bag/construction = 1, + /obj/item/food/rations/liquidfood ) cybernetic_implants = list( @@ -335,7 +344,8 @@ /obj/item/roller/holo = 1, /obj/item/flashlight = 1, /obj/item/handheld_defibrillator = 1, - /obj/item/soap/nanotrasen = 1 + /obj/item/soap/nanotrasen = 1, + /obj/item/food/rations/liquidfood ) /datum/outfit/job/response_team/medic/red @@ -357,7 +367,8 @@ /obj/item/handheld_defibrillator = 1, /obj/item/storage/pill_bottle/ert_red = 1, /obj/item/storage/pill_bottle/patch_pack/ert = 1, - /obj/item/soap/nanotrasen = 1 + /obj/item/soap/nanotrasen = 1, + /obj/item/food/rations/liquidfood ) cybernetic_implants = list( @@ -389,7 +400,8 @@ /obj/item/storage/box/autoinjectors = 1, /obj/item/storage/pill_bottle/ert_gamma = 1, /obj/item/storage/pill_bottle/patch_pack/ert/gamma = 1, - /obj/item/gun/energy/gun/blueshield/pdw9 = 1 + /obj/item/gun/energy/gun/blueshield/pdw9 = 1, + /obj/item/food/rations/liquidfood ) cybernetic_implants = list( @@ -424,7 +436,8 @@ backpack_contents = list( /obj/item/storage/box/zipties = 1, /obj/item/flashlight/seclite = 1, - /obj/item/storage/bible = 1 + /obj/item/storage/bible = 1, + /obj/item/food/rations/liquidfood ) /datum/outfit/job/response_team/paranormal/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE) @@ -450,7 +463,8 @@ /obj/item/clothing/shoes/magboots = 1, /obj/item/storage/box/zipties = 1, /obj/item/flashlight/seclite = 1, - /obj/item/storage/bible = 1 + /obj/item/storage/bible = 1, + /obj/item/food/rations/liquidfood ) cybernetic_implants = list( @@ -477,6 +491,7 @@ /obj/item/gun/energy/gun/nuclear = 1, /obj/item/storage/bible = 1, /obj/item/grenade/frag/holy = 1, + /obj/item/food/rations/liquidfood ) cybernetic_implants = list( @@ -509,7 +524,8 @@ /obj/item/grenade/chem_grenade/antiweed = 2, /obj/item/push_broom = 1, /obj/item/storage/box/lights/mixed = 1, - /obj/item/melee/flyswatter = 1 + /obj/item/melee/flyswatter = 1, + /obj/item/food/rations/liquidfood ) /datum/outfit/job/response_team/janitorial/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) @@ -561,7 +577,8 @@ /obj/item/grenade/clusterbuster/cleaner = 1, /obj/item/storage/box/lights/mixed = 1, /obj/item/push_broom = 1, - /obj/item/gun/energy/gun/nuclear = 1 + /obj/item/gun/energy/gun/nuclear = 1, + /obj/item/food/rations/liquidfood ) cybernetic_implants = list( diff --git a/code/modules/supply/supply_packs/pack_organic.dm b/code/modules/supply/supply_packs/pack_organic.dm index 2e5a52f6adb..2fb5053b43e 100644 --- a/code/modules/supply/supply_packs/pack_organic.dm +++ b/code/modules/supply/supply_packs/pack_organic.dm @@ -25,6 +25,17 @@ containername = "food crate" announce_beacons = list("Kitchen" = list("Kitchen")) +/datum/supply_packs/organic/liquid_food + name = "LiquidFood Ration Crate" + contains = list(/obj/item/food/rations/liquidfood, + /obj/item/food/rations/liquidfood, + /obj/item/food/rations/liquidfood, + /obj/item/food/rations/liquidfood, + /obj/item/food/rations/liquidfood, + /obj/item/food/rations/liquidfood) + cost = 500 + containername = "Ration crate" + /datum/supply_packs/organic/pizza name = "Pizza Crate" contains = list(/obj/item/pizzabox/margherita, diff --git a/icons/obj/food/rations.dmi b/icons/obj/food/rations.dmi new file mode 100644 index 00000000000..9f23e5e6387 Binary files /dev/null and b/icons/obj/food/rations.dmi differ diff --git a/icons/obj/kitchen.dmi b/icons/obj/kitchen.dmi index 52245571df9..83bcc974d4d 100644 Binary files a/icons/obj/kitchen.dmi and b/icons/obj/kitchen.dmi differ diff --git a/icons/obj/storage.dmi b/icons/obj/storage.dmi index fc22b608210..a8d6f4e3287 100644 Binary files a/icons/obj/storage.dmi and b/icons/obj/storage.dmi differ diff --git a/paradise.dme b/paradise.dme index aed30e34b33..09011c95d4e 100644 --- a/paradise.dme +++ b/paradise.dme @@ -1515,6 +1515,7 @@ #include "code\game\objects\items\weapons\storage\boxes.dm" #include "code\game\objects\items\weapons\storage\briefcase.dm" #include "code\game\objects\items\weapons\storage\lockbox.dm" +#include "code\game\objects\items\weapons\storage\ration_pack.dm" #include "code\game\objects\items\weapons\storage\secure.dm" #include "code\game\objects\items\weapons\storage\toolbox.dm" #include "code\game\objects\items\weapons\storage\uplink_kits.dm" @@ -2343,6 +2344,7 @@ #include "code\modules\food_and_drinks\food\foods\misc_food.dm" #include "code\modules\food_and_drinks\food\foods\pasta.dm" #include "code\modules\food_and_drinks\food\foods\pizza.dm" +#include "code\modules\food_and_drinks\food\foods\rations.dm" #include "code\modules\food_and_drinks\food\foods\sandwiches.dm" #include "code\modules\food_and_drinks\food\foods\seafood.dm" #include "code\modules\food_and_drinks\food\foods\side_dishes.dm"