From f65792207b5561bd555caaf9e277957291bcda9e Mon Sep 17 00:00:00 2001 From: Casper3667 <8396443+Casper3667@users.noreply.github.com> Date: Sun, 25 Jan 2026 19:59:22 +0100 Subject: [PATCH] Reduces vending machine stock to put it in the commissary instead (#21717) This remaps the commissary and library, increasing the size of the former at the cost of the latter. Several vending machines have been touched onboard the Horizon only. The idris refresh and getmore vending machines have been merged into the getmore, with the available items strongly reduced. The cigarette vending machine also had their options lowered. All of the options and some extra was moved to the restock packs the commissary gets now, so it can be sold from there. The nanopharm in the commissary is now free to vend, containing only drugs and over the counter meds, intended to be paid for at the commissary desk. New restock packs were made, which are intended similarly to vending machine restocks except they work on the shelves in the commissary and gives them a set of items based on the pack, after which the pack can be folded into cardboard. All the new restock packs are also available to order from operations, should more stock be necessary or other reasons. For mapping I was aided by Kaizr, with helpful suggestions from RHG and Noble Row. Commissary: billede billede Library: billede the nanopharm in the commissary, alongside how the getmore and cigarette vending machines look around the horizon now. billede --- code/game/machinery/vending/cigarette.dm | 17 + code/game/machinery/vending/medical.dm | 23 + code/game/machinery/vending/snacks.dm | 64 + code/game/machinery/vending/soda.dm | 22 + code/modules/cargo/items/operations.dm | 154 + code/modules/cooking/machinery/commissary.dm | 332 +- code/modules/cooking/machinery/smartfridge.dm | 2 +- .../changelogs/YetAnotherCommissaryChange.yml | 11 + icons/obj/storage/boxes.dmi | Bin 13158 -> 13280 bytes maps/sccv_horizon/sccv_horizon.dmm | 6657 +++++++++-------- 10 files changed, 3955 insertions(+), 3327 deletions(-) create mode 100644 html/changelogs/YetAnotherCommissaryChange.yml diff --git a/code/game/machinery/vending/cigarette.dm b/code/game/machinery/vending/cigarette.dm index 124e31d6b21..57c7ed06afa 100644 --- a/code/game/machinery/vending/cigarette.dm +++ b/code/game/machinery/vending/cigarette.dm @@ -3,6 +3,7 @@ * Low Supply * Merchant Station * Hacked + * Horizon */ /obj/machinery/vending/cigarette @@ -149,6 +150,22 @@ /obj/item/clothing/mask/smokable/cigarette/cigar/havana = 2 ) +// The Horizon gets a basic list of products. The rest should be put in commissary stocks. +/obj/machinery/vending/cigarette/horizon + products = list( + /obj/item/storage/box/fancy/cigarettes/rugged = 6, + /obj/item/storage/box/fancy/cigarettes = 8, + /obj/item/storage/chewables/tobacco = 8, + /obj/item/storage/cigfilters = 6, + /obj/item/storage/box/fancy/cigpaper = 6, + /obj/item/storage/box/fancy/matches = 10, + /obj/item/flame/lighter/random = 4, + /obj/item/spacecash/ewallet/lotto = 30, + /obj/item/clothing/mask/smokable/ecig/simple = 2, + /obj/item/reagent_containers/ecig_cartridge/med_nicotine = 10, + /obj/item/reagent_containers/ecig_cartridge/high_nicotine = 10 + ) + /obj/item/device/vending_refill/smokes name = "smokes resupply canister" vend_id = "smokes" diff --git a/code/game/machinery/vending/medical.dm b/code/game/machinery/vending/medical.dm index 58416b92f5a..ec50e2ec3d2 100644 --- a/code/game/machinery/vending/medical.dm +++ b/code/game/machinery/vending/medical.dm @@ -7,6 +7,7 @@ * Low Supply * NanoPharm Mini * Low Supply + * NanoPharm Mini (commissary) */ /obj/machinery/vending/medical @@ -206,3 +207,25 @@ /obj/item/storage/pill_bottle/cetahydramine = 1, /obj/item/storage/pill_bottle/rmt = 1 ) + +/obj/machinery/vending/wallpharm/commissary + random_itemcount = TRUE + products = list( + /obj/item/storage/box/mms_inhaler = 3, + /obj/item/storage/box/ambrosia = 3, + /obj/item/storage/box/reishi = 3, + /obj/item/storage/box/wulumunusha = 3, + /obj/item/storage/pill_bottle/colorspace = 3, + /obj/item/storage/pill_bottle/snowflake = 3, + /obj/item/storage/pill_bottle/psilocybin = 3, + /obj/item/reagent_containers/food/condiment/wulumunusha = 3, + /obj/item/reagent_containers/food/condiment/ambrosia = 3, + /obj/item/storage/pill_bottle/antidexafen = 3, + /obj/item/storage/pill_bottle/vitamin = 3, + /obj/item/storage/pill_bottle/cetahydramine = 3, + /obj/item/storage/pill_bottle/caffeine = 3, + /obj/item/storage/pill_bottle/nicotine = 3, + /obj/item/storage/pill_bottle/rmt = 3 + ) + prices = list( + ) diff --git a/code/game/machinery/vending/snacks.dm b/code/game/machinery/vending/snacks.dm index ae0708f92f9..2fe61e33787 100644 --- a/code/game/machinery/vending/snacks.dm +++ b/code/game/machinery/vending/snacks.dm @@ -2,6 +2,7 @@ * GetMore Chocolate Corp * Low Supply * Konyang + * Horizon * FrontierVend * Low Supply * Hacked @@ -135,6 +136,69 @@ /obj/item/reagent_containers/food/snacks/seaweed = 10, ) +/obj/machinery/vending/snack/horizon + products = list( + /obj/item/reagent_containers/food/drinks/dry_ramen = 6, + /obj/item/reagent_containers/food/snacks/sosjerky = 6, + /obj/item/reagent_containers/food/snacks/spacetwinkie = 6, + /obj/item/reagent_containers/food/snacks/cheesiehonkers = 6, + /obj/item/reagent_containers/food/snacks/tastybread = 6, + /obj/item/reagent_containers/food/snacks/maps = 2, + /obj/item/reagent_containers/food/snacks/koisbar_clean = 4, + /obj/item/reagent_containers/food/snacks/tuna = 2, + /obj/item/reagent_containers/food/drinks/jyalra = 5, + /obj/item/reagent_containers/food/drinks/jyalra/cheese = 5, + /obj/item/reagent_containers/food/drinks/jyalra/apple = 5, + /obj/item/reagent_containers/food/drinks/jyalra/cherry = 5, + /obj/item/reagent_containers/food/drinks/cans/cola = 10, + /obj/item/reagent_containers/food/drinks/cans/diet_cola = 10, + /obj/item/reagent_containers/food/drinks/waterbottle = 10, + /obj/item/reagent_containers/food/drinks/carton/small/milk = 10, + /obj/item/reagent_containers/food/drinks/carton/small/milk/choco = 10, + /obj/item/reagent_containers/food/drinks/carton/small/milk/strawberry = 10, + /obj/item/reagent_containers/food/drinks/zobo = 10 + ) + contraband = list( + /obj/item/reagent_containers/food/snacks/syndicake = 6, + /obj/item/reagent_containers/food/snacks/koisbar = 4, + /obj/item/reagent_containers/food/drinks/cans/thirteenloko = 5, + /obj/item/reagent_containers/food/drinks/cans/koispunch = 3 + ) + premium = list( + /obj/item/reagent_containers/food/snacks/cookie = 6, + /obj/item/storage/box/fancy/food/pralinebox = 2, + /obj/item/reagent_containers/food/drinks/bottle/cola = 2, + /obj/item/reagent_containers/food/drinks/bottle/space_mountain_wind = 2, + /obj/item/reagent_containers/food/drinks/bottle/space_up = 2 + ) + prices = list( + /obj/item/reagent_containers/food/drinks/dry_ramen = 2.00, + /obj/item/reagent_containers/food/snacks/sosjerky = 3.50, + /obj/item/reagent_containers/food/snacks/spacetwinkie = 2.00, + /obj/item/reagent_containers/food/snacks/cheesiehonkers = 2.50, + /obj/item/reagent_containers/food/snacks/tastybread = 3.50, + /obj/item/reagent_containers/food/snacks/maps = 3.25, + /obj/item/reagent_containers/food/snacks/koisbar_clean = 4.25, + /obj/item/reagent_containers/food/snacks/tuna = 2.50, + /obj/item/reagent_containers/food/drinks/jyalra = 1.50, + /obj/item/reagent_containers/food/drinks/jyalra/cheese = 1.75, + /obj/item/reagent_containers/food/drinks/jyalra/apple = 1.75, + /obj/item/reagent_containers/food/drinks/jyalra/cherry = 1.75, + /obj/item/reagent_containers/food/snacks/syndicake = 3.50, + /obj/item/reagent_containers/food/snacks/koisbar = 12.00, + + /obj/item/reagent_containers/food/drinks/cans/cola = 1.50, + /obj/item/reagent_containers/food/drinks/cans/diet_cola = 1.50, + /obj/item/reagent_containers/food/drinks/cans/space_mountain_wind = 1.50, + /obj/item/reagent_containers/food/drinks/waterbottle = 1.25, + /obj/item/reagent_containers/food/drinks/cans/space_up = 1.50, + /obj/item/reagent_containers/food/drinks/cans/koispunch = 5.00, + /obj/item/reagent_containers/food/drinks/carton/small/milk = 1.80, + /obj/item/reagent_containers/food/drinks/carton/small/milk/choco = 1.80, + /obj/item/reagent_containers/food/drinks/carton/small/milk/strawberry = 1.80, + /obj/item/reagent_containers/food/drinks/zobo = 1.75 + ) + /obj/item/device/vending_refill/snack name = "snacks resupply canister" vend_id = "snacks" diff --git a/code/game/machinery/vending/soda.dm b/code/game/machinery/vending/soda.dm index 3ba0674dead..9452802611d 100644 --- a/code/game/machinery/vending/soda.dm +++ b/code/game/machinery/vending/soda.dm @@ -2,6 +2,7 @@ * Idris Re-Fresh * Low Supply * Konyang + * Horizon * Zo'ra Soda * Low Supply * BODA (Soviet Soda) @@ -108,6 +109,27 @@ /obj/item/reagent_containers/food/drinks/cans/melon_soda = 10 ) +// Reduced list of products as most are in the commissary +/obj/machinery/vending/cola/horizon + products = list( + /obj/item/reagent_containers/food/drinks/cans/cola = 10, + /obj/item/reagent_containers/food/drinks/cans/diet_cola = 10, + /obj/item/reagent_containers/food/drinks/waterbottle = 10, + /obj/item/reagent_containers/food/drinks/carton/small/milk = 10, + /obj/item/reagent_containers/food/drinks/carton/small/milk/choco = 10, + /obj/item/reagent_containers/food/drinks/carton/small/milk/strawberry = 10, + /obj/item/reagent_containers/food/drinks/zobo = 10 + ) + contraband = list( + /obj/item/reagent_containers/food/drinks/cans/thirteenloko = 5, + /obj/item/reagent_containers/food/drinks/cans/koispunch = 3 + ) + premium = list( + /obj/item/reagent_containers/food/drinks/bottle/cola = 2, + /obj/item/reagent_containers/food/drinks/bottle/space_mountain_wind = 2, + /obj/item/reagent_containers/food/drinks/bottle/space_up = 2 + ) + /obj/item/device/vending_refill/cola name = "cola resupply canister" vend_id = "cola" diff --git a/code/modules/cargo/items/operations.dm b/code/modules/cargo/items/operations.dm index 8c150de5ccc..d226fd90121 100644 --- a/code/modules/cargo/items/operations.dm +++ b/code/modules/cargo/items/operations.dm @@ -581,3 +581,157 @@ container_type = "crate" groupable = TRUE spawn_amount = 1 + +/singleton/cargo_item/cigarette_restock + category = "operations" + name = "commissary cigarette restock" + supplier = "getmore" + description = "A box full of stock for the commissary." + price = 200 + items = list( + /obj/item/commissary_restrock + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/rollable_restock + category = "operations" + name = "commissary tobacco leaves restock" + supplier = "getmore" + description = "A box full of stock for the commissary." + price = 150 + items = list( + /obj/item/commissary_restrock/rollable + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/chewable_restock + category = "operations" + name = "commissary chewing tobacco restock" + supplier = "getmore" + description = "A box full of stock for the commissary." + price = 175 + items = list( + /obj/item/commissary_restrock/chewable + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/smoking_accessory_restock + category = "operations" + name = "commissary smoking accessories restock" + supplier = "getmore" + description = "A box full of stock for the commissary." + price = 400 // includes a bunch of lottery tickets, so it should be relatively high compared to other restocks + items = list( + /obj/item/commissary_restrock/smoking_accessory + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/electric_cig_restock + category = "operations" + name = "commissary electronic cigarette restock" + supplier = "getmore" + description = "A box full of stock for the commissary." + price = 225 + items = list( + /obj/item/commissary_restrock/electronic_cig + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/snack_restock + category = "operations" + name = "commissary snack restock" + supplier = "getmore" + description = "A box full of stock for the commissary." + price = 150 + items = list( + /obj/item/commissary_restrock/food + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/xeno_restock + category = "operations" + name = "commissary xeno snack restock" + supplier = "getmore" + description = "A box full of stock for the commissary." + price = 150 + items = list( + /obj/item/commissary_restrock/food/xeno + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/candy_restock + category = "operations" + name = "commissary candy restock" + supplier = "getmore" + description = "A box full of stock for the commissary." + price = 150 + items = list( + /obj/item/commissary_restrock/food/candy + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/microwave_restock + category = "operations" + name = "commissary microwave meal restock" + supplier = "getmore" + description = "A box full of stock for the commissary." + price = 150 + items = list( + /obj/item/commissary_restrock/food/microwave + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/drink_restock + category = "operations" + name = "commissary drink restock" + supplier = "getmore" + description = "A box full of stock for the commissary." + price = 300 + items = list( + /obj/item/commissary_restrock/drink + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 + +/singleton/cargo_item/cheap_booze_restock + category = "operations" + name = "commissary beer restock" + supplier = "getmore" + description = "A box full of stock for the commissary." + price = 200 + items = list( + /obj/item/commissary_restrock/drink/booze_cheap + ) + access = 0 + container_type = "crate" + groupable = TRUE + spawn_amount = 1 diff --git a/code/modules/cooking/machinery/commissary.dm b/code/modules/cooking/machinery/commissary.dm index 86c15951972..7b2736526c6 100644 --- a/code/modules/cooking/machinery/commissary.dm +++ b/code/modules/cooking/machinery/commissary.dm @@ -1,3 +1,24 @@ +/** + * Cigarette shelf + * Clothing shelf + * Food and drinks shelf + * Toy shelf + * Cash register + * Commissary restock + * Cigarettes + * Tobacco leaves + * Chewing tobacco + * Smoking accessories + * Electronic cigarette + * Snack + * Xeno snack + * Candy + * Microwave meal + * Drink + * Cheap booze + * Restock crate + */ + /obj/machinery/smartfridge/tradeshelf name = "cigarette shelf" desc = "A commercialized shelf for cigarettes and associated items." @@ -14,7 +35,8 @@ /obj/item/storage/box/fancy/matches, /obj/item/flame/lighter, /obj/item/clothing/mask/smokable/ecig, - /obj/item/reagent_containers/ecig_cartridge + /obj/item/reagent_containers/ecig_cartridge, + /obj/item/spacecash/ewallet/lotto ) display_tiers = 5 display_tier_amt = 3 @@ -41,7 +63,22 @@ active_power_usage = 100 cooling = TRUE accepted_items = list(/obj/item/reagent_containers/food, - /obj/item/storage/box/fancy/cookiesnack + /obj/item/storage/box/fancy/cookiesnack, + /obj/item/storage/box/pineapple, + /obj/item/storage/box/fancy/gum, + /obj/item/storage/box/fancy/vkrexitaffy, + /obj/item/clothing/mask/chewable/candy/lolli, + /obj/item/storage/box/fancy/admints, + /obj/item/storage/box/fancy/quick_microwave_pizza, + /obj/item/reagent_containers/food/snacks/packaged_microwave_mac_and_cheeze, + /obj/item/reagent_containers/food/snacks/packaged_microwave_fiery_mac_and_cheeze, + /obj/item/storage/box/fancy/packaged_burger, + /obj/item/storage/box/fancy/packaged_mossburger, + /obj/item/storage/box/fancy/toptarts_strawberry, + /obj/item/storage/box/fancy/toptarts_chocolate_peanutbutter, + /obj/item/storage/box/fancy/toptarts_blueberry, + /obj/item/storage/box/unique/donkpockets, + /obj/item/storage/box/fancy/yoke ) display_tiers = 4 display_tier_amt = 5 @@ -73,6 +110,28 @@ display_tiers = 4 display_tier_amt = 5 +/obj/machinery/smartfridge/tradeshelf/mouse_drop_receive(atom/dropping, mob/user, params) + LoadComponent(/datum/component/leanable, dropping) + +/obj/machinery/smartfridge/tradeshelf/attackby(obj/item/attacking_item, mob/user) + if(istype(attacking_item, /obj/item/commissary_restrock)) + var/obj/item/commissary_restrock/P = attacking_item + var/item_loaded = 0 + for(var/obj/G in P.contents) + if(accept_check(G)) + if(length(contents) >= max_n_of_items) + break + P.remove_from_storage(G,src) + item_quants[G.name]++ + item_loaded++ + if(item_loaded) + user.visible_message("[user] loads [src] with [P].", SPAN_NOTICE("You load [src] with [P].")) + if(length(P.contents) > 0) + to_chat(user, SPAN_NOTICE("Some items are refused.")) + update_overlays() + return TRUE + . = ..() + // ------------------------------------------------- /obj/structure/cash_register/commissary var/machine_id = "" @@ -345,3 +404,272 @@ buying.Cut() sum = 0 receipt = "" + +/obj/item/commissary_restrock + name = "commissary cigarette restock pack" + icon = 'icons/obj/storage/boxes.dmi' + icon_state = "commissary_restock" + item_state = "commissary_restock" + w_class = WEIGHT_CLASS_NORMAL + var/illustration = "sparkler" + var/starts_with = list( + // Cigarettes + /obj/item/storage/box/fancy/cigarettes/pra = 3, + /obj/item/storage/box/fancy/cigarettes/dpra = 3, + /obj/item/storage/box/fancy/cigarettes/nka = 3, + /obj/item/storage/box/fancy/cigarettes/federation = 3, + /obj/item/storage/box/fancy/cigarettes/dyn = 3, + /obj/item/storage/box/fancy/cigarettes/oracle = 3, + /obj/item/storage/box/fancy/cigarettes/koko = 3, + /obj/item/storage/box/fancy/cigarettes/dromedaryco = 3, + /obj/item/storage/box/fancy/cigarettes/nicotine = 3, + /obj/item/storage/box/fancy/cigarettes/cigar = 3 + ) + +/obj/item/commissary_restrock/rollable + name = "commissary tobacco leaves restock pack" + starts_with = list( + // Rollables + /obj/item/storage/chewables/rollable = 3, + /obj/item/storage/chewables/rollable/unathi = 3, + /obj/item/storage/chewables/rollable/fine = 3, + /obj/item/storage/chewables/rollable/nico = 3, + /obj/item/storage/chewables/rollable/oracle = 3, + /obj/item/storage/chewables/rollable/vedamor = 3 + ) + +/obj/item/commissary_restrock/chewable + name = "commissary chewing tobacco restock pack" + starts_with = list( + // Chewing tobacco + /obj/item/storage/chewables/tobacco = 3, + /obj/item/storage/chewables/tobacco/bad = 3, + /obj/item/storage/chewables/tobacco/fine = 3, + /obj/item/storage/chewables/tobacco/federation = 3, + /obj/item/storage/chewables/tobacco/dyn = 3, + /obj/item/storage/chewables/tobacco/koko = 3, + /obj/item/storage/box/fancy/chewables/tobacco/nico = 3, + /obj/item/storage/chewables/oracle = 3 + ) + +/obj/item/commissary_restrock/smoking_accessory + name = "commissary smoking accessories restock pack" + starts_with = list( + // Misc smoking + /obj/item/storage/cigfilters = 6, + /obj/item/storage/box/fancy/cigpaper = 3, + /obj/item/storage/box/fancy/cigpaper/fine = 3, + // Lighters & stuff + /obj/item/storage/box/fancy/matches = 5, + /obj/item/flame/lighter/random = 4, + /obj/item/flame/lighter/zippo = 4, + /obj/item/spacecash/ewallet/lotto = 8 // A bit of a risk that hangar techs may just use them instead of selling, but that should be handled IC as theft + ) + +/obj/item/commissary_restrock/electronic_cig + name = "commissary electronic cigarette restock pack" + starts_with = list( + // Electronic + /obj/item/clothing/mask/smokable/ecig/util = 3, + /obj/item/reagent_containers/ecig_cartridge/med_nicotine = 2, + /obj/item/reagent_containers/ecig_cartridge/high_nicotine = 2, + /obj/item/reagent_containers/ecig_cartridge/orange = 2, + /obj/item/reagent_containers/ecig_cartridge/watermelon = 2, + /obj/item/reagent_containers/ecig_cartridge/grape = 2 + ) + +/obj/item/commissary_restrock/food + name = "commissary snack restock pack" + illustration = "snack" + starts_with = list( + // Chips + /obj/item/reagent_containers/food/snacks/chips = 6, + /obj/item/reagent_containers/food/snacks/chips/chicken = 3, + /obj/item/reagent_containers/food/snacks/chips/cucumber = 3, + /obj/item/reagent_containers/food/snacks/chips/dirtberry = 3, + /obj/item/reagent_containers/food/snacks/chips/phoron = 3, // Not actually phoron + /obj/item/reagent_containers/food/snacks/algaechips = 2, + // General + /obj/item/reagent_containers/food/snacks/no_raisin = 3, + /obj/item/storage/box/pineapple = 2, + /obj/item/reagent_containers/food/snacks/ricetub = 4, + /obj/item/reagent_containers/food/snacks/riceball = 4, + /obj/item/reagent_containers/food/snacks/seaweed = 4, + /obj/item/reagent_containers/food/snacks/tuna = 2, + /obj/item/reagent_containers/food/drinks/dry_ramen = 3, + /obj/item/reagent_containers/food/snacks/sosjerky = 3 + ) + +/obj/item/commissary_restrock/food/xeno + name = "commissary xeno snack restock pack" + illustration = "snack" + starts_with = list( + // Skrell + /obj/item/reagent_containers/food/snacks/skrellsnacks = 3, + /obj/item/reagent_containers/food/snacks/meatsnack = 2, + /obj/item/reagent_containers/food/drinks/jyalra = 2, + /obj/item/reagent_containers/food/drinks/jyalra/cheese = 2, + /obj/item/reagent_containers/food/drinks/jyalra/apple = 2, + /obj/item/reagent_containers/food/drinks/jyalra/cherry = 2, + // Vaurca + /obj/item/reagent_containers/food/snacks/koisbar_clean = 6, + // Unathi + /obj/item/reagent_containers/food/snacks/nathisnack = 2, + /obj/item/reagent_containers/food/snacks/candy/koko = 3, + // Tajara + /obj/item/reagent_containers/food/snacks/adhomian_can = 2, + ) + +/obj/item/commissary_restrock/food/candy + name = "commissary candy restock pack" + starts_with = list( + // Candy + /obj/item/reagent_containers/food/snacks/candy = 4, + /obj/item/reagent_containers/food/snacks/chocolatebar = 4, + /obj/item/reagent_containers/food/snacks/whitechocolate/wrapped = 4, + /obj/item/storage/box/fancy/cookiesnack = 3, + /obj/item/storage/box/fancy/gum = 4, + /obj/item/storage/box/fancy/vkrexitaffy = 3, + /obj/item/clothing/mask/chewable/candy/lolli = 5, + /obj/item/storage/box/fancy/admints = 3, + /obj/item/reagent_containers/food/drinks/bottle/bestblend, + /obj/item/storage/box/fancy/foysnack, + /obj/item/reagent_containers/food/snacks/choctruffles + ) + +/obj/item/commissary_restrock/food/microwave + name = "commissary microwave meal restock pack" + starts_with = list( + // Microwave meals + /obj/item/storage/box/fancy/quick_microwave_pizza = 3, + /obj/item/storage/box/fancy/quick_microwave_pizza/olive = 3, + /obj/item/storage/box/fancy/quick_microwave_pizza/pepperoni = 3, + /obj/item/storage/box/fancy/quick_microwave_pizza/district6 = 3, + /obj/item/reagent_containers/food/snacks/packaged_microwave_mac_and_cheeze = 3, + /obj/item/reagent_containers/food/snacks/packaged_microwave_fiery_mac_and_cheeze = 3, + /obj/item/storage/box/fancy/packaged_burger = 3, + /obj/item/storage/box/fancy/packaged_mossburger = 2, + /obj/item/reagent_containers/food/snacks/quick_curry = 3, + /obj/item/reagent_containers/food/snacks/hv_dinner = 3, + /obj/item/storage/box/fancy/toptarts_strawberry = 3, + /obj/item/storage/box/fancy/toptarts_chocolate_peanutbutter = 3, + /obj/item/storage/box/fancy/toptarts_blueberry = 3, + /obj/item/storage/box/unique/donkpockets = 3 + ) + +/obj/item/commissary_restrock/drink + name = "commissary drink restock pack" + illustration = "soda" + starts_with = list( + // Soda + /obj/item/reagent_containers/food/drinks/cans/cola = 5, + /obj/item/reagent_containers/food/drinks/cans/diet_cola = 5, + /obj/item/reagent_containers/food/drinks/cans/space_mountain_wind = 5, + /obj/item/reagent_containers/food/drinks/cans/dr_gibb = 5, + /obj/item/reagent_containers/food/drinks/cans/starkist = 5, + /obj/item/reagent_containers/food/drinks/cans/peach_soda = 5, + /obj/item/reagent_containers/food/drinks/cans/space_up = 5, + /obj/item/reagent_containers/food/drinks/cans/melon_soda = 5, + // Misc + /obj/item/reagent_containers/food/drinks/waterbottle = 5, + /obj/item/reagent_containers/food/drinks/cans/root_beer = 5, + /obj/item/reagent_containers/food/drinks/cans/iced_tea = 5, + /obj/item/reagent_containers/food/drinks/cans/grape_juice = 5, + /obj/item/reagent_containers/food/drinks/zobo = 5, + // Skrell + /obj/item/reagent_containers/food/drinks/cans/dyn = 5, + // Tajara + /obj/item/reagent_containers/food/drinks/cans/hrozamal_soda = 5, + /obj/item/reagent_containers/food/drinks/cans/adhomai_milk = 3, + // Milk + /obj/item/reagent_containers/food/drinks/cans/beetle_milk = 5, + /obj/item/reagent_containers/food/drinks/carton/small/milk = 5, + /obj/item/reagent_containers/food/drinks/carton/small/milk/choco = 5, + /obj/item/reagent_containers/food/drinks/carton/small/milk/strawberry = 5 + ) + +/obj/item/commissary_restrock/drink/booze_cheap + name = "commissary cheap booze restock pack" + starts_with = list( + // Booze + /obj/item/storage/box/fancy/yoke/beer = 2, + /obj/item/storage/box/fancy/yoke/ebisu = 2, + /obj/item/storage/box/fancy/yoke/shimauma = 2, + /obj/item/reagent_containers/food/drinks/cans/beer = 6, + /obj/item/reagent_containers/food/drinks/cans/beer/rice = 6, + /obj/item/reagent_containers/food/drinks/cans/beer/rice/shimauma = 6, + /obj/item/reagent_containers/food/drinks/cans/beer/whistlingforest = 6, + /obj/item/reagent_containers/food/drinks/bottle/small/xuizijuice = 6 + ) + +/obj/item/commissary_restrock/Initialize(mapload, ...) + . = ..() + if(illustration) + var/image/illustration_img = image(icon, illustration) + illustration_img.appearance_flags |= RESET_COLOR + AddOverlays(illustration_img) + fill() + +/obj/item/commissary_restrock/proc/fill() + if(LAZYLEN(starts_with)) + for(var/t in starts_with) + if(!ispath(t)) + crash_with("[t] in [src]'s starts_with list is not a path!") + continue + for(var/i=0, i 0) - items.Add(list(list("display_name" = html_encode(capitalize(K)), "vend" = i, "quantity" = count))) + items.Add(list(list("display_name" = capitalize(K), "vend" = i, "quantity" = count))) if(length(items) > 0) data["contents"] = items diff --git a/html/changelogs/YetAnotherCommissaryChange.yml b/html/changelogs/YetAnotherCommissaryChange.yml new file mode 100644 index 00000000000..04b0092dcd0 --- /dev/null +++ b/html/changelogs/YetAnotherCommissaryChange.yml @@ -0,0 +1,11 @@ +author: TheGreyWolf & Kaizr + +delete-after: True + +changes: + - rscadd: "Commissary restocks are now supplied to operations." + - rscadd: "It is now possible to order commissary restocks from the ordering console." + - rscadd: "The commissary was expanded in size and the library reduced in size." + - rscdel: "The cigarette, getmore and idris refresh machines had their stock severely reduced, with idris refresh and getmore being combined into a single vending machine on the Horizon." + - bugfix: "Smartfridges sanitization was fixed." + - rscadd: "The specialized commissary shelves can now be leaned on." diff --git a/icons/obj/storage/boxes.dmi b/icons/obj/storage/boxes.dmi index 427cb4372e8c9a5f0964e3a60042e74e85f9cf4a..7f9c639879397814bce500378e605c77f2197553 100644 GIT binary patch literal 13280 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 asx^Z