Files
+37 21b4095dfd [MDB IGNORE] [IDB IGNORE] Upstream Sync - 04/17/2026 (#5453)
Upstream 04/17/2026

fixes https://github.com/Bubberstation/Bubberstation/issues/5549

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Co-authored-by: ArcaneMusic <41715314+ArcaneMusic@users.noreply.github.com>
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: Rhials <28870487+Rhials@users.noreply.github.com>
Co-authored-by: rageguy505 <54517726+rageguy505@users.noreply.github.com>
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com>
Co-authored-by: Aliceee2ch <160794176+Aliceee2ch@users.noreply.github.com>
Co-authored-by: Time-Green <7501474+Time-Green@users.noreply.github.com>
Co-authored-by: Tsar-Salat <62388554+Tsar-Salat@users.noreply.github.com>
Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com>
Co-authored-by: Maxipat <108554989+Maxipat112@users.noreply.github.com>
Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
Co-authored-by: deltanedas <39013340+deltanedas@users.noreply.github.com>
Co-authored-by: SimplyLogan <47579821+loganuk@users.noreply.github.com>
Co-authored-by: loganuk <fakeemail123@aol.com>
Co-authored-by: Leland Kemble <70413276+lelandkemble@users.noreply.github.com>
Co-authored-by: FalloutFalcon <86381784+FalloutFalcon@users.noreply.github.com>
Co-authored-by: Roxy <75404941+TealSeer@users.noreply.github.com>
Co-authored-by: Lucy <lucy@absolucy.moe>
Co-authored-by: siliconOpossum <138069572+siliconOpossum@users.noreply.github.com>
Co-authored-by: Isratosh <Isratosh@hotmail.com>
Co-authored-by: TheRyeGuyWhoWillNowDie <70169560+TheRyeGuyWhoWillNowDie@users.noreply.github.com>
Co-authored-by: Neocloudy <88008002+Neocloudy@users.noreply.github.com>
Co-authored-by: Alexander V. <volas@ya.ru>
Co-authored-by: ElGitificador <168473461+ElGitificador@users.noreply.github.com>
Co-authored-by: Twaticus <46540570+Twaticus@users.noreply.github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
Co-authored-by: Cameron Lennox <killer65311@gmail.com>
Co-authored-by: Tim <timothymtorres@gmail.com>
Co-authored-by: Iamgoofball <iamgoofball@gmail.com>
Co-authored-by: Layzu666 <121319428+Layzu666@users.noreply.github.com>
Co-authored-by: Arturlang <24881678+Arturlang@users.noreply.github.com>
Co-authored-by: _0Steven <42909981+00-Steven@users.noreply.github.com>
Co-authored-by: mrmanlikesbt <99309552+mrmanlikesbt@users.noreply.github.com>
Co-authored-by: Ben10Omintrix <138636438+Ben10Omintrix@users.noreply.github.com>
Co-authored-by: John F. Kennedy <54908920+MacaroniCritter@users.noreply.github.com>
Co-authored-by: Cursor <102828457+theselfish@users.noreply.github.com>
Co-authored-by: Josh <josh.adam.powell@gmail.com>
Co-authored-by: Josh Powell <josh.powell@softwire.com>
Co-authored-by: Yobrocharlie <Charliemiller5617@gmail.com>
Co-authored-by: Hardly3D <66234359+Hardly3D@users.noreply.github.com>
Co-authored-by: shayoki <96078776+shayoki@users.noreply.github.com>
Co-authored-by: LT3 <83487515+lessthnthree@users.noreply.github.com>
2026-05-16 00:56:00 +02:00

457 lines
18 KiB
Plaintext

/datum/supply_pack/organic
group = "Food & Hydroponics"
crate_type = /obj/structure/closet/crate/freezer
/datum/supply_pack/organic/hydroponics
access_view = ACCESS_HYDROPONICS
crate_type = /obj/structure/closet/crate/hydroponics
/datum/supply_pack/organic/hydroponics/beekeeping_suits
name = "Beekeeper Suit Crate"
desc = "Bee business booming? Better be benevolent and boost botany by \
bestowing bi-Beekeeper-suits! Contains two beekeeper suits and matching headwear."
cost = CARGO_CRATE_VALUE * 2
contains = list(/obj/item/clothing/head/utility/beekeeper_head = 2,
/obj/item/clothing/suit/utility/beekeeper_suit = 2,
)
crate_name = "beekeeper suits"
crate_type = /obj/structure/closet/crate/hydroponics
/datum/supply_pack/organic/hydroponics/beekeeping_fullkit
name = "Beekeeping Starter Crate"
desc = "BEES BEES BEES. Contains three honey frames, a beekeeper suit and helmet, \
flyswatter, bee house, and, of course, a pure-bred Nanotrasen-Standardized Queen Bee!"
cost = CARGO_CRATE_VALUE * 3
contains = list(/obj/structure/beebox/unwrenched,
/obj/item/honey_frame = 3,
/obj/item/queen_bee/bought,
/obj/item/clothing/head/utility/beekeeper_head,
/obj/item/clothing/suit/utility/beekeeper_suit,
/obj/item/melee/flyswatter,
)
crate_name = "beekeeping starter crate"
crate_type = /obj/structure/closet/crate/hydroponics
/datum/supply_pack/organic/randomized
test_ignored = TRUE
crate_name = "food crate"
/datum/supply_pack/organic/randomized/fill(obj/container)
for(var/i in 1 to 15)
var/item = pick(contains)
new item(container)
/datum/supply_pack/organic/randomized/chef
name = "Excellent Meat Crate"
desc = "The best cuts in the whole galaxy. Contains a random assortment of exotic meats."
cost = CARGO_CRATE_VALUE * 4
contains = list(
/obj/item/food/meat/slab/human/mutant/slime,
/obj/item/food/meat/slab/killertomato,
/obj/item/food/meat/slab/bear,
/obj/item/food/meat/slab/xeno,
/obj/item/food/meat/slab/spider,
/obj/item/food/meat/rawbacon,
/obj/item/food/meat/slab/penguin,
/obj/item/food/spiderleg,
/obj/item/food/fishmeat/carp,
/obj/item/food/meat/slab/human,
/obj/item/food/meat/slab/grassfed,
)
/datum/supply_pack/organic/randomized/fruits
name = "Fruit Crate"
desc = "Rich in vitamins. Contains a lime, orange, watermelon, apple, berries and a lemon."
cost = CARGO_CRATE_VALUE * 3
contains = list(
/obj/item/food/grown/citrus/lime,
/obj/item/food/grown/citrus/orange,
/obj/item/food/grown/watermelon,
/obj/item/food/grown/apple,
/obj/item/food/grown/berries,
/obj/item/food/grown/citrus/lemon,
)
/datum/supply_pack/organic/randomized/vegetables
name = "Vegetables Crate"
desc = "Grown in vats. Contains a chili, corn, tomato, potato, carrot, chanterelle, onion, pumpkin, and cucumber."
cost = CARGO_CRATE_VALUE * 1.8
contains = list(
/obj/item/food/grown/chili,
/obj/item/food/grown/corn,
/obj/item/food/grown/tomato,
/obj/item/food/grown/potato,
/obj/item/food/grown/carrot,
/obj/item/food/grown/mushroom/chanterelle,
/obj/item/food/grown/onion,
/obj/item/food/grown/pumpkin,
/obj/item/food/grown/cucumber,
)
/datum/supply_pack/organic/exoticseeds
name = "Exotic Seeds Crate"
desc = "Any entrepreneuring botanist's dream. Contains twelve different seeds, \
including one replica-pod seed and two mystery seeds!"
cost = CARGO_CRATE_VALUE * 3
access_view = ACCESS_HYDROPONICS
contains = list(
/obj/item/seeds/amanita,
/obj/item/seeds/bamboo,
/obj/item/seeds/eggplant/eggy,
/obj/item/seeds/liberty,
/obj/item/seeds/nettle,
/obj/item/seeds/plump,
/obj/item/seeds/replicapod,
/obj/item/seeds/reishi,
/obj/item/seeds/rainbow_bunch,
/obj/item/seeds/seedling,
/obj/item/seeds/shrub,
/obj/item/seeds/random = 2,
)
crate_name = "exotic seeds crate"
crate_type = /obj/structure/closet/crate/hydroponics
/datum/supply_pack/organic/food
name = "Food Crate"
desc = "Get things cooking with this crate full of useful ingredients! \
Contains a dozen eggs, three bananas, and some flour, rice, milk, \
soymilk, salt, pepper, enzyme, sugar, and monkeymeat."
cost = CARGO_CRATE_VALUE * 2
contains = list(/obj/item/reagent_containers/condiment/flour,
/obj/item/reagent_containers/condiment/rice,
/obj/item/reagent_containers/condiment/milk,
/obj/item/reagent_containers/condiment/soymilk,
/obj/item/reagent_containers/condiment/saltshaker,
/obj/item/reagent_containers/condiment/peppermill,
/obj/item/storage/fancy/egg_box,
/obj/item/reagent_containers/condiment/enzyme,
/obj/item/reagent_containers/condiment/sugar,
/obj/item/food/meat/slab/monkey,
/obj/item/food/grown/banana = 3,
)
crate_name = "food crate"
/datum/supply_pack/organic/cream_piee
name = "High-yield Clown-grade Cream Pie Crate"
desc = "Designed by Aussec's Advanced Warfare Research Division, \
these high-yield, Clown-grade cream pies are powered by a synergy \
of performance and efficiency. Guaranteed to provide maximum results."
cost = CARGO_CRATE_VALUE * 12
contains = list(/obj/item/storage/backpack/duffelbag/clown/cream_pie)
crate_name = "party equipment crate"
order_flags = ORDER_CONTRABAND
access = ACCESS_THEATRE
access_view = ACCESS_THEATRE
crate_type = /obj/structure/closet/crate/secure
discountable = SUPPLY_PACK_RARE_DISCOUNTABLE
/datum/supply_pack/organic/hydroponics/supplies
name = "Hydroponics Crate"
desc = "Supplies for growing a great garden! Contains two bottles of ammonia, \
two Plant-B-Gone spray bottles, a hatchet, cultivator, plant analyzer, \
as well as a pair of leather gloves and a botanist's apron."
cost = CARGO_CRATE_VALUE * 3
contains = list(/obj/item/reagent_containers/spray/plantbgone = 2,
/obj/item/reagent_containers/cup/bottle/ammonia = 2,
/obj/item/hatchet,
/obj/item/cultivator,
/obj/item/plant_analyzer,
/obj/item/clothing/gloves/botanic_leather,
/obj/item/clothing/suit/apron,
)
crate_name = "hydroponics crate"
/datum/supply_pack/organic/hydroponics/hydrotank
name = "Hydroponics Backpack Crate"
desc = "Bring on the flood with this high-capacity backpack crate. \
Contains 500 units of life-giving H2O."
cost = CARGO_CRATE_VALUE * 2
access = ACCESS_HYDROPONICS
contains = list(/obj/item/watertank)
crate_name = "hydroponics backpack crate"
crate_type = /obj/structure/closet/crate/secure/hydroponics
/datum/supply_pack/organic/pizza
name = "Pizza Crate"
desc = "Why visit the kitchen when you can have five random pizzas in a fraction of the time? \
Best prices this side of the galaxy! All deliveries are guaranteed to be 99% anomaly-free."
cost = CARGO_CRATE_VALUE * 10 // Best prices this side of the galaxy.
contains = list()
crate_name = "pizza crate"
///Whether we've provided an infinite pizza box already this shift or not.
var/anomalous_box_provided = FALSE
/// one percent chance for a pizza box to be the ininfite pizza box
var/infinite_pizza_chance = 1
/// chance that any one of the pizzas in the crate will have romerol added to it
var/romerol_chance = 0.2
///Whether we've provided a bomb pizza box already this shift or not.
var/boombox_provided = FALSE
/// three percent chance for a pizza box to be the pizza bomb box
var/bomb_pizza_chance = 3
/// 1 in 3 pizza bombs spawned will be a dud
var/bomb_dud_chance = 33
/// list of pizza that can randomly go inside of a crate, weighted by how disruptive it would be
var/list/pizza_types = list(
/obj/item/food/pizza/margherita = 10,
/obj/item/food/pizza/meat = 10,
/obj/item/food/pizza/mushroom = 10,
/obj/item/food/pizza/vegetable = 10,
/obj/item/food/pizza/donkpocket = 10,
/obj/item/food/pizza/dank = 7,
/obj/item/food/pizza/sassysage = 10,
/obj/item/food/pizza/pineapple = 10,
/obj/item/food/pizza/arnold = 3,
/obj/item/food/pizza/energy = 5
)
/datum/supply_pack/organic/pizza/fill(obj/structure/closet/crate/new_crate)
. = ..()
var/list/rng_pizza_list = pizza_types.Copy()
var/add_romerol = prob(romerol_chance)
for(var/i in 1 to 5)
if(add_anomalous(new_crate))
continue
if(add_boombox(new_crate))
continue
var/obj/item/pizzabox/pizzabox = add_normal_pizza(new_crate, rng_pizza_list)
if(add_romerol && pizzabox.pizza)
pizzabox.pizza.reagents.add_reagent(/datum/reagent/romerol, pizzabox.pizza.slices_left)
add_romerol = FALSE
log_game("A romerol pizza (as [pizzabox.pizza]) was created in a pizza crate delivery.")
message_admins("A romerol pizza (as [pizzabox.pizza]) was created in a pizza crate delivery.")
/// adds the chance for an infinite pizza box
/datum/supply_pack/organic/pizza/proc/add_anomalous(obj/structure/closet/crate/new_crate)
if(anomalous_box_provided)
return FALSE
if(!prob(infinite_pizza_chance))
return FALSE
new /obj/item/pizzabox/infinite(new_crate)
anomalous_box_provided = TRUE
log_game("An anomalous pizza box was provided in a pizza crate at during cargo delivery.")
if(prob(50))
addtimer(CALLBACK(src, PROC_REF(anomalous_pizza_report)), rand(30 SECONDS, 180 SECONDS))
message_admins("An anomalous pizza box was provided in a pizza crate at during cargo delivery.")
else
message_admins("An anomalous pizza box was silently created with no command report in a pizza crate delivery.")
return TRUE
/// adds a chance of a pizza bomb replacing a pizza
/datum/supply_pack/organic/pizza/proc/add_boombox(obj/structure/closet/crate/new_crate)
if(boombox_provided)
return FALSE
if(!prob(bomb_pizza_chance))
return FALSE
var/boombox_type = (prob(bomb_dud_chance)) ? /obj/item/pizzabox/bomb : /obj/item/pizzabox/bomb/armed
new boombox_type(new_crate)
boombox_provided = TRUE
log_game("A pizza box bomb was created by a pizza crate delivery.")
message_admins("A pizza box bomb has arrived in a pizza crate delivery.")
return TRUE
/// adds a randomized pizza from the pizza list
/datum/supply_pack/organic/pizza/proc/add_normal_pizza(obj/structure/closet/crate/new_crate, list/rng_pizza_list)
var/randomize_pizza = pick_weight(rng_pizza_list)
rng_pizza_list -= randomize_pizza
var/obj/item/pizzabox/new_pizza_box = new(new_crate)
new_pizza_box.pizza = new randomize_pizza(new_pizza_box)
new_pizza_box.pizza.slice()
new_pizza_box.boxtag = new_pizza_box.pizza.boxtag
new_pizza_box.boxtag_set = TRUE
new_pizza_box.update_appearance(UPDATE_ICON | UPDATE_DESC)
return new_pizza_box
/// tells crew that an infinite pizza box exists, half of the time, based on a roll in the anamolous box proc
/datum/supply_pack/organic/pizza/proc/anomalous_pizza_report()
print_command_report("[station_name()], our anomalous materials divison has reported a missing object that is highly likely to have been sent to your station during a routine cargo \
delivery. Please search all crates and manifests provided with the delivery and return the object if is located. The object resembles a standard <b>\[DATA EXPUNGED\]</b> and is to be \
considered <b>\[REDACTED\]</b> and returned at your leisure. Note that objects the anomaly produces are specifically attuned exactly to the individual opening the anomaly; regardless \
of species, the individual will find the object edible and it will taste great according to their personal definitions, which vary significantly based on person and species.")
/datum/supply_pack/organic/potted_plants
name = "Potted Plants Crate"
desc = "Spruce up the station with these lovely plants! Contains a random \
assortment of five potted plants from Nanotrasen's potted plant research division. \
Warranty void if thrown."
cost = CARGO_CRATE_VALUE * 1.5
contains = list(/obj/item/kirbyplants/random = 5)
crate_name = "potted plants crate"
crate_type = /obj/structure/closet/crate/wooden
/datum/supply_pack/organic/seeds
name = "Seeds Crate"
desc = "Big things have small beginnings. Contains fifteen different seeds."
cost = CARGO_CRATE_VALUE * 2
contains = list(/obj/item/seeds/chili,
/obj/item/seeds/cotton,
/obj/item/seeds/berry,
/obj/item/seeds/corn,
/obj/item/seeds/eggplant,
/obj/item/seeds/tomato,
/obj/item/seeds/soya,
/obj/item/seeds/wheat,
/obj/item/seeds/wheat/rice,
/obj/item/seeds/carrot,
/obj/item/seeds/sunflower,
/obj/item/seeds/rose,
/obj/item/seeds/chanter,
/obj/item/seeds/potato,
/obj/item/seeds/sugarcane,
/obj/item/seeds/cucumber,
)
crate_name = "seeds crate"
crate_type = /obj/structure/closet/crate/hydroponics
/datum/supply_pack/organic/grill
name = "Grilling Starter Kit"
desc = "Hey dad I'm Hungry. Hi Hungry I'm THE NEW GRILLING STARTER KIT \
ONLY 5000 BUX GET NOW! Contains a grill and fuel."
cost = CARGO_CRATE_VALUE * 4
crate_type = /obj/structure/closet/crate
contains = list(
/obj/item/stack/sheet/mineral/coal/five,
/obj/item/kitchen/tongs,
/obj/item/reagent_containers/cup/soda_cans/monkey_energy,
/obj/machinery/grill/unwrenched,
)
crate_name = "grilling starter kit crate"
discountable = SUPPLY_PACK_UNCOMMON_DISCOUNTABLE
/datum/supply_pack/organic/grillfuel
name = "Grilling Fuel Kit"
desc = "Contains propane and propane accessories. \
(Note: doesn't contain any actual propane.)"
cost = CARGO_CRATE_VALUE * 4
crate_type = /obj/structure/closet/crate
contains = list(/obj/item/stack/sheet/mineral/coal/ten,
/obj/item/reagent_containers/cup/soda_cans/monkey_energy,
)
crate_name = "grilling fuel kit crate"
discountable = SUPPLY_PACK_UNCOMMON_DISCOUNTABLE
/datum/supply_pack/organic/tiziran_supply
name = "Tiziran Supply Box"
desc = "A packaged box of supplies from the heart of the Lizard Empire. \
Contains a selection of Tiziran ingredients and basic foods."
cost = CARGO_CRATE_VALUE * 3
contains = list(/obj/item/storage/box/tiziran_goods,
/obj/item/storage/box/tiziran_cans,
/obj/item/storage/box/tiziran_meats,
)
crate_name = "\improper Tiziran Supply box"
crate_type = /obj/structure/closet/crate/cardboard/tiziran
test_ignored = TRUE
/datum/supply_pack/organic/mothic_supply
name = "Mothic Supply Box"
desc = "A packaged box of surplus supplies from the Mothic Fleet. \
Contains a selection of Mothic ingredients and basic foods."
cost = CARGO_CRATE_VALUE * 3
contains = list(/obj/item/storage/box/mothic_goods,
/obj/item/storage/box/mothic_cans_sauces,
/obj/item/storage/box/mothic_rations,
)
crate_name = "\improper Mothic Supply box"
crate_type = /obj/structure/closet/crate/cardboard/mothic
/datum/supply_pack/organic/syrup
name = "Coffee Syrups Box"
desc = "A packaged box of various syrups, perfect for making your delicious coffee even more diabetic."
cost = CARGO_CRATE_VALUE * 4
contains = list(
/obj/item/reagent_containers/cup/bottle/syrup_bottle/caramel,
/obj/item/reagent_containers/cup/bottle/syrup_bottle/liqueur,
/obj/item/reagent_containers/cup/bottle/syrup_bottle/korta_nectar,
)
crate_name = "coffee syrups box"
crate_type = /obj/structure/closet/crate/cardboard
/datum/supply_pack/organic/syrup_contraband
order_flags = ORDER_CONTRABAND
name = "Contraband Syrups Box"
desc = "A packaged box containing illegal coffee syrups. Possession of these carries a penalty established in the galactic penal code."
cost = CARGO_CRATE_VALUE * 6
contains = list(
/obj/item/reagent_containers/cup/bottle/syrup_bottle/laughsyrup = 2,
)
crate_name = "illegal syrups box"
crate_type = /obj/structure/closet/crate/cardboard
/datum/supply_pack/organic/cooking_oil
name = "Cooking Oil Vat"
desc = "This high-grade cooking oil can make almost anything edible. \
From a plasma cutter to a Syndicate bomb, if it fits in the fryer, it's a snack. \
Contains a vat of cooking oil."
cost = CARGO_CRATE_VALUE * 4.75
contains = list(/obj/structure/reagent_dispensers/cooking_oil)
crate_name = "cooking oil crate"
crate_type = /obj/structure/closet/crate/wooden
/datum/supply_pack/organic/beer_keg
name = "Beer Keg"
desc = "The perfect way to start your shift... or end it. \
Contains a full barrel of Nanotrasen brewed, low-grade alcoholic beverage, \
perfect for getting loose after a hard day of not dying."
cost = CARGO_CRATE_VALUE * 6.25
contains = list(/obj/structure/reagent_dispensers/beerkeg)
crate_name = "beer keg crate"
crate_type = /obj/structure/closet/crate/wooden
/datum/supply_pack/organic/nutraslop
name = "Nutraslop Serving Dish"
desc = "A culinary masterpiece created from all of Nanotrasen's previous culinary... innovations. \
A single bite will transport you back to the taste of yesterday's prison rations. \
Contains a serving dish filled with Nutraslop."
cost = CARGO_CRATE_VALUE * 4
contains = list(/obj/structure/reagent_dispensers/servingdish)
crate_name = "nutraslop serving dish crate"
/datum/supply_pack/organic/hydroponics/soil_normal
name = "NT-Ag Potting Soil Crate"
desc = "A crate containing sacks of regular, commercial soil."
cost = CARGO_CRATE_VALUE * 2
crate_name = "potting soil crate"
contains = list(
/obj/item/soil_sack = 5,
)
/datum/supply_pack/organic/hydroponics/soil_vermaculite
name = "NT-Ag Vermaculite Crate"
desc = "A crate containing sacks of NT-Ag vermaculite. Your favorite expanded mineral!"
cost = CARGO_CRATE_VALUE * 2
crate_name = "vermaculite crate"
contains = list(
/obj/item/soil_sack/vermaculite = 3,
)
/datum/supply_pack/organic/hydroponics/soil_gel
name = "NT-Ag Hydrogel Beads Crate"
desc = "A crate containing sacks of prehydrated superabsorbent gel beads. Everyone likes some nice beads."
cost = CARGO_CRATE_VALUE * 2
crate_name = "hydrogel beads crate"
contains = list(
/obj/item/soil_sack/gel = 3,
)
/datum/supply_pack/organic/hydroponics/soil_coir
name = "NT-Ag Korta Coir Crate"
desc = "A crate containing sacks of korta root coir. Good for starting a mushroom farm!"
cost = CARGO_CRATE_VALUE * 3
crate_name = "korta coir crate"
contains = list(
/obj/item/soil_sack/coir = 3,
)
/datum/supply_pack/organic/hydroponics/soil_worm
name = "NT-Ag Worm Castings Crate"
desc = "A crate containing sacks of vermicompost. Worms not included! Or?.."
cost = CARGO_CRATE_VALUE * 4
crate_name = "worm castings crate"
contains = list(
/obj/item/soil_sack/worm = 3,
)