From 99967959b21ffb7670253ec59dd5db1fcd4bb153 Mon Sep 17 00:00:00 2001 From: Aquidu <98631832+Aquidu@users.noreply.github.com> Date: Sun, 25 Aug 2024 09:05:55 -0700 Subject: [PATCH] Extra ration icons (#3290) ## About The Pull Request Adds a unique emblem for each ration box, providing a visual cue for what kind of food can be found inside, adds coloring to the condiment sprites, and creates new sprites for the ration heater side-size rations, drink mixes, and vodka! Ration boxes ![Screenshot (2932)](https://github.com/user-attachments/assets/5e88056f-4428-4dcc-b20a-eba7d0f54a78) Side ration, heater, and vodka ![Screenshot (2933)](https://github.com/user-attachments/assets/94185737-83c6-4722-975d-a8055408c67c) Drink mixes ![Screenshot (2927)](https://github.com/user-attachments/assets/8f47233c-e339-4c15-98a9-eea9ee5f50df) Condiments ![Screenshot (2926)](https://github.com/user-attachments/assets/db9b791e-912a-459a-b6d2-0c44c8d618da) ## Why It's Good For The Game Currently, the ration heater and vodka use the same icon as the ration box, all ration boxes look the same, "snack" and "side" rations look identical, condiments and drink packs use the same model, and filling color doesn't work for either one. This PR gives each ration a unique icon to be recognized by. Maintainer edit: cleaned up changelog ## Changelog :cl:Aquidu add: Rations now have icons that help show the contents. add: Condiments and drink mixes now have colors when full to help show the contents. add: Unique sprites for the ration heater, drink packs ration drinks, and "side" category rations. code: Changes the sound effect for opening the drink ration to the bottle cap sound to line up with the icon. /:cl: --- code/game/objects/items/storage/ration.dm | 52 +++++++++++------- code/modules/food_and_drinks/drinks/drinks.dm | 4 +- code/modules/food_and_drinks/food/ration.dm | 27 ++++++++- .../kitchen_machinery/microwave.dm | 2 +- icons/obj/food/ration.dmi | Bin 1832 -> 2145 bytes 5 files changed, 58 insertions(+), 27 deletions(-) diff --git a/code/game/objects/items/storage/ration.dm b/code/game/objects/items/storage/ration.dm index 482ba202a73e..b016cc339260 100644 --- a/code/game/objects/items/storage/ration.dm +++ b/code/game/objects/items/storage/ration.dm @@ -9,10 +9,20 @@ resistance_flags = FLAMMABLE drop_sound = 'sound/items/handling/cardboardbox_drop.ogg' pickup_sound = 'sound/items/handling/cardboardbox_pickup.ogg' + var/emblem_icon_state = "null" + var/ration_overlay = "null" /obj/item/storage/ration/Initialize(mapload) . = ..() update_icon() + update_overlays() + +/obj/item/storage/ration/update_overlays() + . = ..() + var/mutable_appearance/ration_overlay + if(emblem_icon_state) + ration_overlay = mutable_appearance(icon, emblem_icon_state) + add_overlay(ration_overlay) /obj/item/storage/ration/ComponentInitialize() . = ..() @@ -38,7 +48,7 @@ /obj/item/storage/ration/vegan_chili name = "vegan chili with beans ration" desc = "A complete meal package containing a hearty vegan chili with beans, complemented by vegetable crackers, savory cornbread, flavorful pizza crackers, and more. A perfect choice for plant-based nourishment." - + emblem_icon_state = "emblem_vegan_chili" /obj/item/storage/ration/vegan_chili/PopulateContents() var/static/items_inside = list( /obj/item/reagent_containers/food/snacks/ration/entree/vegan_chili = 1, @@ -54,7 +64,7 @@ /obj/item/storage/ration/shredded_beef name = "shredded beef in barbecue sauce ration" desc = "Enjoy the rich and savory flavors of shredded beef in smoky barbecue sauce with this satisfying ration. Accompanied by a fruit puree, jerky wrap, cinnamon bun, and additional condiments, this ration is perfect for meat lovers." - + emblem_icon_state = "emblem_shredded_beef" /obj/item/storage/ration/shredded_beef/PopulateContents() var/static/items_inside = list( /obj/item/reagent_containers/food/snacks/ration/entree/shredded_beef = 1, @@ -70,7 +80,7 @@ /obj/item/storage/ration/pork_spaghetti name = "spaghetti with pork and sauce ration" desc = "Indulge in a comforting meal of spaghetti with tender pork and savory sauce with this ration. Complemented by a toaster pastry, seasoned bread sticks, dried raisins, and other accompaniments, this ration offers a flavorful experience." - + emblem_icon_state = "emblem_pork_spaghetti" /obj/item/storage/ration/pork_spaghetti/PopulateContents() var/static/items_inside = list( /obj/item/reagent_containers/food/snacks/ration/entree/pork_spaghetti = 1, @@ -86,7 +96,7 @@ /obj/item/storage/ration/fried_fish name = "fried fish chunks ration" desc = "Experience the crispy delight of fried fish chunks with this ration. Accompanied by an energy bar, tortillas, toasted corn kernels, and more, this ration provides a satisfying combination of flavors and textures." - + emblem_icon_state = "emblem_fried_fish" /obj/item/storage/ration/fried_fish/PopulateContents() var/static/items_inside = list( /obj/item/reagent_containers/food/snacks/ration/entree/fried_fish = 1, @@ -103,7 +113,7 @@ /obj/item/storage/ration/beef_strips name = "beef strips in tomato sauce ration" desc = "Savor the deliciousness of tender beef strips in a flavorful tomato sauce with this ration. Enjoy a chocolate pudding, white wheat snack bread, blackberry preserves, and peppermint candy rings as delightful accompaniments." - + emblem_icon_state = "emblem_beef_strips" /obj/item/storage/ration/beef_strips/PopulateContents() var/static/items_inside = list( /obj/item/reagent_containers/food/snacks/ration/entree/beef_strips = 1, @@ -120,7 +130,7 @@ /obj/item/storage/ration/chili_macaroni name = "chili and macaroni ration" desc = "Indulge in the comforting combination of chili and macaroni in this flavorful ration. Satisfy your taste buds with a mix of sweet and savory treats." - + emblem_icon_state = "emblem_chili_macaroni" /obj/item/storage/ration/chili_macaroni/PopulateContents() var/static/items_inside = list( /obj/item/reagent_containers/food/snacks/ration/entree/chili_macaroni = 1, @@ -137,7 +147,7 @@ /obj/item/storage/ration/chicken_wings_hot_sauce name = "chicken wings in hot sauce ration" desc = "Experience the bold and spicy flavors of chicken wings drenched in hot sauce. This ration also includes a mix of delightful snacks for a well-rounded meal." - + emblem_icon_state = "emblem_chicken_wings_hot_sauce" /obj/item/storage/ration/chicken_wings_hot_sauce/PopulateContents() var/static/items_inside = list( /obj/item/reagent_containers/food/snacks/ration/entree/chicken_wings_hot_sauce = 1, @@ -153,7 +163,7 @@ /obj/item/storage/ration/fish_stew name = "fish stew ration" desc = "Dive into the depths of flavor with this fish stew ration. Enjoy a hearty blend of seafood and vegetables, complemented by a selection of tasty accompaniments." - + emblem_icon_state = "emblem_fish_stew" /obj/item/storage/ration/fish_stew/PopulateContents() var/static/items_inside = list( /obj/item/reagent_containers/food/snacks/ration/entree/fish_stew = 1, @@ -170,7 +180,7 @@ /obj/item/storage/ration/lemon_pepper_chicken name = "lemon pepper chicken ration" desc = "A tasty Lemon Pepper Chicken ration that combines the flavors of fruit and meat. Perfect for a satisfying meal." - + emblem_icon_state = "emblem_lemon_pepper_chicken" /obj/item/storage/ration/lemon_pepper_chicken/PopulateContents() var/static/items_inside = list( /obj/item/reagent_containers/food/snacks/ration/entree/lemon_pepper_chicken = 1, @@ -186,7 +196,7 @@ /obj/item/storage/ration/sausage_peppers_onions name = "sausage, peppers and onions ration" desc = "Indulge in the delightful combination of juicy sausage, peppers, and onions in this hearty ration." - + emblem_icon_state = "emblem_sausage_peppers_onions" /obj/item/storage/ration/sausage_peppers_onions/PopulateContents() var/static/items_inside = list( /obj/item/reagent_containers/food/snacks/ration/entree/sausage_peppers_onions = 1, @@ -202,7 +212,7 @@ /obj/item/storage/ration/pork_dumplings_chili_sauce name = "pork dumplings in chili sauce ration" desc = "Savor the rich flavors of pork dumplings in a spicy chili sauce, accompanied by a variety of complementary snacks." - + emblem_icon_state = "emblem_pork_dumplings_chili_sauce" /obj/item/storage/ration/pork_dumplings_chili_sauce/PopulateContents() var/static/items_inside = list( /obj/item/reagent_containers/food/snacks/ration/entree/dumplings_chili_sauce = 1, @@ -218,7 +228,7 @@ /obj/item/storage/ration/battered_fish_sticks name = "battered fish sticks ration" desc = "Enjoy the crispy goodness of battered fish sticks, along with a selection of sides and a delectable dessert." - + emblem_icon_state = "emblem_battered_fish_sticks" /obj/item/storage/ration/battered_fish_sticks/PopulateContents() var/static/items_inside = list( /obj/item/reagent_containers/food/snacks/ration/entree/battered_fish_sticks = 1, @@ -234,7 +244,7 @@ /obj/item/storage/ration/assorted_salted_offal name = "assorted salted offal ration" desc = "An adventurous choice, this ration offers an assortment of salted offal, providing a unique culinary experience." - + emblem_icon_state = "emblem_assorted_salted_offal" /obj/item/storage/ration/assorted_salted_offal/PopulateContents() var/static/items_inside = list( /obj/item/reagent_containers/food/snacks/ration/entree/assorted_salted_offal = 1, @@ -250,7 +260,7 @@ /obj/item/storage/ration/maple_pork_sausage_patty name = "maple pork sausage patty ration" desc = "Start your day with a satisfying breakfast featuring a maple-infused pork sausage patty and a variety of treats." - + emblem_icon_state = "emblem_maple_pork_sausage_patty" /obj/item/storage/ration/maple_pork_sausage_patty/PopulateContents() var/static/items_inside = list( /obj/item/reagent_containers/food/snacks/ration/entree/maple_pork_sausage_patty = 1, @@ -267,7 +277,7 @@ /obj/item/storage/ration/pepper_jack_beef_patty name = "jalapeno pepper jack beef patty ration" desc = "Experience a flavorful fusion of jalapeno, pepper jack cheese, and beef in this grilled beef patty ration." - + emblem_icon_state = "emblem_pepper_jack_beef_patty" /obj/item/storage/ration/pepper_jack_beef_patty/PopulateContents() var/static/items_inside = list( /obj/item/reagent_containers/food/snacks/ration/entree/pepper_jack_beef_patty = 1, @@ -284,7 +294,7 @@ /obj/item/storage/ration/beef_goulash name = "beef goulash ration" desc = "Delight in the rich flavors of beef goulash, accompanied by a selection of sides and a sweet treat." - + emblem_icon_state = "emblem_beef_goulash" /obj/item/storage/ration/beef_goulash/PopulateContents() var/static/items_inside = list( /obj/item/reagent_containers/food/snacks/ration/entree/beef_goulash = 1, @@ -301,7 +311,7 @@ /obj/item/storage/ration/pepperoni_pizza_slice name = "pepperoni pizza slice ration" desc = "Indulge in the classic taste of pepperoni pizza with this ration, complete with sides and a refreshing beverage." - + emblem_icon_state = "emblem_pepperoni_pizza_slice" /obj/item/storage/ration/pepperoni_pizza_slice/PopulateContents() var/static/items_inside = list( /obj/item/reagent_containers/food/snacks/ration/entree/pepperoni_pizza_slice = 1, @@ -317,7 +327,7 @@ /obj/item/storage/ration/blackened_calamari name = "blackened calamari in red sauce ration" desc = "Enjoy the savory delight of blackened calamari served in a rich red sauce." - + emblem_icon_state = "emblem_blackened_calamari" /obj/item/storage/ration/blackened_calamari/PopulateContents() var/static/items_inside = list( /obj/item/reagent_containers/food/snacks/ration/entree/blackened_calamari = 1, @@ -334,7 +344,7 @@ /obj/item/storage/ration/elbow_macaroni name = "elbow macaroni in tomato sauce ration" desc = "Savor the comforting taste of elbow macaroni in a delicious tomato sauce." - + emblem_icon_state = "emblem_elbow_macaroni" /obj/item/storage/ration/elbow_macaroni/PopulateContents() var/static/items_inside = list( /obj/item/reagent_containers/food/snacks/ration/entree/elbow_macaroni = 1, @@ -351,7 +361,7 @@ /obj/item/storage/ration/cheese_pizza_slice name = "cheese pizza slice ration" desc = "Experience the timeless flavor of a classic cheese pizza slice." - + emblem_icon_state = "emblem_cheese_pizza_slice" /obj/item/storage/ration/cheese_pizza_slice/PopulateContents() var/static/items_inside = list( /obj/item/reagent_containers/food/snacks/ration/entree/cheese_pizza_slice = 1, @@ -368,7 +378,7 @@ /obj/item/storage/ration/crayons name = "military grade crayon ration" desc = "Proven to increase kill count by atleast 1." - + emblem_icon_state = "emblem_crayons" /obj/item/storage/ration/crayons/PopulateContents() var/static/items_inside = list( /obj/item/toy/crayon/red = 1, diff --git a/code/modules/food_and_drinks/drinks/drinks.dm b/code/modules/food_and_drinks/drinks/drinks.dm index 6ffea82fb945..ec10f7dfb0f2 100644 --- a/code/modules/food_and_drinks/drinks/drinks.dm +++ b/code/modules/food_and_drinks/drinks/drinks.dm @@ -762,7 +762,7 @@ desc = "If you ever wondered where air came from..." list_reagents = list(/datum/reagent/oxygen = 6, /datum/reagent/nitrogen = 24) icon = 'icons/obj/food/ration.dmi' - icon_state = "ration_package" + icon_state = "ration_drink" drop_sound = 'sound/items/handling/cardboardbox_drop.ogg' pickup_sound = 'sound/items/handling/cardboardbox_pickup.ogg' in_container = TRUE @@ -773,7 +773,7 @@ /obj/item/reagent_containers/food/drinks/ration/proc/open_ration(mob/user) to_chat(user, "You tear open \the [src].") - playsound(user.loc, 'sound/effects/rip3.ogg', 50) + playsound(user.loc, 'sound/items/glass_cap.ogg', 50) reagents.flags |= OPENCONTAINER spillable = TRUE diff --git a/code/modules/food_and_drinks/food/ration.dm b/code/modules/food_and_drinks/food/ration.dm index 261fe707ed7f..6766a6aedbda 100644 --- a/code/modules/food_and_drinks/food/ration.dm +++ b/code/modules/food_and_drinks/food/ration.dm @@ -83,7 +83,7 @@ list_reagents = list(/datum/reagent/consumable/nutriment = 4) /obj/item/reagent_containers/food/snacks/ration/snack - icon_state = "ration_side" + icon_state = "ration_snack" list_reagents = list(/datum/reagent/consumable/nutriment = 2, /datum/reagent/consumable/sugar = 3) /obj/item/reagent_containers/food/snacks/ration/bar @@ -92,7 +92,7 @@ /obj/item/reagent_containers/food/snacks/ration/condiment name = "condiment pack" - desc = "Just your average condiment pacl." + desc = "Just your average condiment pack." icon_state = "ration_condi" volume = 10 amount_per_transfer_from_this = 10 @@ -126,7 +126,7 @@ /obj/item/reagent_containers/food/snacks/ration/pack name = "powder pack" desc = "Mix into a bottle of water and shake." - icon_state = "ration_condi" + icon_state = "ration_pack" volume = 10 amount_per_transfer_from_this = 10 possible_transfer_amounts = list() @@ -742,84 +742,105 @@ /obj/item/reagent_containers/food/snacks/ration/condiment/cheese_spread name = "cheese spread pack" + filling_color = "#ffcc00" list_reagents = list(/datum/reagent/consumable/cheese_spread = 8) /obj/item/reagent_containers/food/snacks/ration/condiment/hot_cheese_spread name = "jalapeno cheddar cheese spread pack" + filling_color = "#ffaa00" list_reagents = list(/datum/reagent/consumable/cheese_spread = 5 , /datum/reagent/consumable/capsaicin = 3) /obj/item/reagent_containers/food/snacks/ration/condiment/garlic_cheese_spread name = "garlic parmesan cheese spread pack" + filling_color = "#ffff00" list_reagents = list(/datum/reagent/consumable/cheese_spread = 8) /obj/item/reagent_containers/food/snacks/ration/condiment/bacon_cheddar_cheese_spread name = "bacon cheddar cheese spread pack" + filling_color = "#ff9900" list_reagents = list(/datum/reagent/consumable/cheese_spread = 8) /obj/item/reagent_containers/food/snacks/ration/condiment/peanut_butter name = "peanut butter pack" + filling_color = "#664400" list_reagents = list(/datum/reagent/consumable/sugar = 5, /datum/reagent/consumable/peanut_butter = 5) /obj/item/reagent_containers/food/snacks/ration/condiment/chunky_peanut_butter name = "chunky peanut butter pack" + filling_color = "#663300" list_reagents = list(/datum/reagent/consumable/peanut_butter = 10) /obj/item/reagent_containers/food/snacks/ration/condiment/maple_syrup name = "maple syrup pack" + filling_color = "#661100" list_reagents = list(/datum/reagent/consumable/sugar = 10) /obj/item/reagent_containers/food/snacks/ration/pack/chocolate_protein_beverage name = "chocolate hazelnut protein drink powder pack" + filling_color = "#664400" list_reagents = list(/datum/reagent/consumable/coco = 5, /datum/reagent/consumable/eggyolk = 5) /obj/item/reagent_containers/food/snacks/ration/pack/fruit_beverage name = "fruit punch beverage powder, carb-electrolyte pack" + filling_color = "#ff4400" list_reagents = list(/datum/reagent/consumable/sugar = 5, /datum/reagent/consumable/applejuice = 2, /datum/reagent/consumable/orangejuice = 2) /obj/item/reagent_containers/food/snacks/ration/pack/fruit_smoothie_beverage name = "tropical blend fruit and vegetable smoothie powder pack" + filling_color = "#ffaa00" list_reagents = list(/datum/reagent/consumable/pineapplejuice = 3, /datum/reagent/consumable/orangejuice = 3, /datum/reagent/consumable/eggyolk = 3) /obj/item/reagent_containers/food/snacks/ration/pack/grape_beverage name = "grape beverage powder, carb-fortified pack" + filling_color = "#9900ff" list_reagents = list(/datum/reagent/consumable/sugar = 5, /datum/reagent/consumable/grapejuice = 5) /obj/item/reagent_containers/food/snacks/ration/pack/grape_beverage_sugar_free name = "sugar-free grape beverage base powder" + filling_color = "#9900ff" list_reagents = list(/datum/reagent/consumable/grapejuice = 10) /obj/item/reagent_containers/food/snacks/ration/pack/lemonade_beverage name = "lemonade drink powder pack" + filling_color = "#ffff80" list_reagents = list(/datum/reagent/consumable/sugar = 5, /datum/reagent/consumable/lemonjuice = 5) /obj/item/reagent_containers/food/snacks/ration/pack/lemonade_beverage_suger_free name = "lemonade sugar-free beverage base pack" + filling_color = "#ffff00" list_reagents = list(/datum/reagent/consumable/lemonjuice = 10) /obj/item/reagent_containers/food/snacks/ration/pack/orange_beverage name = "orange beverage powder, carb-fortified pack" + filling_color = "#ffbb00" list_reagents = list(/datum/reagent/consumable/sugar = 5, /datum/reagent/consumable/orangejuice = 5) /obj/item/reagent_containers/food/snacks/ration/pack/orange_beverage_sugar_free name = "orange beverage base, sugar-free pack" + filling_color = "#ff9900" list_reagents = list(/datum/reagent/consumable/orangejuice = 10) /obj/item/reagent_containers/food/snacks/ration/pack/cherry_beverage name = "cherry high-energy beverage powder pack" + filling_color = "#ff5555" list_reagents = list(/datum/reagent/consumable/sugar = 5, /datum/reagent/consumable/cherryjelly = 5) /obj/item/reagent_containers/food/snacks/ration/pack/pineapple_beverage name = "pinapple fruit beverage base pack" + filling_color = "#fff111" list_reagents = list(/datum/reagent/consumable/pineapplejuice = 10) /obj/item/reagent_containers/food/snacks/ration/pack/freeze_dried_coffee_orange name = "freeze-dried coffee flavored with orange pack" + filling_color = "#cc7400" list_reagents = list(/datum/reagent/consumable/coffee = 5, /datum/reagent/consumable/orangejuice = 3) /obj/item/reagent_containers/food/snacks/ration/pack/freeze_dried_coffee_chocolate name = "freeze-dried coffee flavored with chocolate pack" + filling_color = "#803300" list_reagents = list(/datum/reagent/consumable/coffee = 5, /datum/reagent/consumable/coco = 3) /obj/item/reagent_containers/food/snacks/ration/pack/freeze_dried_coffee_hazelnut name = "freeze-dried coffee flavored with hazelnut pack" + filling_color = "#553300" list_reagents = list(/datum/reagent/consumable/coffee = 5, /datum/reagent/consumable/coco = 3) diff --git a/code/modules/food_and_drinks/kitchen_machinery/microwave.dm b/code/modules/food_and_drinks/kitchen_machinery/microwave.dm index 2762892110f8..0df04a08658b 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/microwave.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/microwave.dm @@ -362,7 +362,7 @@ name = "flameless ration heater" desc = "A magnisium based ration heater. It can be used to heat up entrees and other food items. reaches the same temperature as a microwave with half the volume." icon = 'icons/obj/food/ration.dmi' - icon_state = "ration_package" + icon_state = "ration_heater" grind_results = list(/datum/reagent/iron = 10, /datum/reagent/water = 10, /datum/reagent/consumable/sodiumchloride = 5) heat = 3800 var/obj/item/tocook = null diff --git a/icons/obj/food/ration.dmi b/icons/obj/food/ration.dmi index 5bcf1f2b490bdd68274c1a00f70b8e9b549b0589..42cc013cc14053eb394fd6b55c1d3aa7c926de7a 100644 GIT binary patch literal 2145 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 uknYmWR)5kfAVpqQFm%A&N8^7HyM