From 4baf4bc8d3491910e061ebe7513e6651aa4734e6 Mon Sep 17 00:00:00 2001
From: Gristlebee <56049844+Gristlebee@users.noreply.github.com>
Date: Sun, 25 Aug 2024 09:09:51 -0700
Subject: [PATCH] Reduces the cost of food/botany items in the outpost and
makes the grill not suck as much. (#3299)
## About The Pull Request
- Reduces and rebalances the prices of the items in the outpost food tab
- Rebrands the advanced cooking crate as the condiment crate and adds
BBQ sauce.
- Fixes the grill, it used to constantly process even when it's doing
nothing and spat out smoke for no reason, plus it didn't account for
having negative fuel, which then made it act like it had infinite fuel.
- The grill can now actually cook food.
- Removes the xeno-energy interaction with the grill. It no longer works
as fuel.
- Changes the span classes to macros for the grill.
## Why It's Good For The Game
A lot of the food items at the outpost are prohibitively expensive, or
weirdly priced. The exotic meat crate for example costed more than the
normal meat crate, and donk pockets costed as much as a shotgun. Making
food more accessible should hopefully encourage players to cook and make
their own things without it being a huge investment instead of ````
lava-cooked goliath steak ```` for the 1000th time.
Bugfixes are also probably good for the grill, and making it less of a
meme item.
## Changelog
:cl:
add: Grills can now cook food.
del: Xeno-energy working as grill fuel.
balance: Outpost food costs
fix: Grills
/:cl:
---
code/datums/components/sizzle.dm | 4 +-
code/modules/cargo/packs/food.dm | 76 +++++++-------
.../kitchen_machinery/grill.dm | 98 +++++++++++--------
3 files changed, 97 insertions(+), 81 deletions(-)
diff --git a/code/datums/components/sizzle.dm b/code/datums/components/sizzle.dm
index 88fadb377ceb..ecb45e448d84 100644
--- a/code/datums/components/sizzle.dm
+++ b/code/datums/components/sizzle.dm
@@ -3,9 +3,11 @@
var/sizzlealpha = 0
dupe_mode = COMPONENT_DUPE_UNIQUE_PASSARGS
-/datum/component/sizzle/Initialize()
+/datum/component/sizzle/Initialize(_alpha)
if(!isatom(parent))
return COMPONENT_INCOMPATIBLE
+ if(_alpha)
+ sizzlealpha = _alpha
setup_sizzle()
/datum/component/sizzle/InheritComponent(datum/component/C, i_am_original)
diff --git a/code/modules/cargo/packs/food.dm b/code/modules/cargo/packs/food.dm
index 9c366406af5c..6bf438f22867 100644
--- a/code/modules/cargo/packs/food.dm
+++ b/code/modules/cargo/packs/food.dm
@@ -8,7 +8,7 @@
/datum/supply_pack/food/donkpockets
name = "Donk Pocket Variety Crate"
desc = "Featuring a line up of Donk Co.'s most popular pastry!"
- cost = 2000
+ cost = 500
contains = list(/obj/item/storage/box/donkpockets/donkpocketspicy,
/obj/item/storage/box/donkpockets/donkpocketteriyaki,
/obj/item/storage/box/donkpockets/donkpocketpizza,
@@ -25,7 +25,7 @@
/datum/supply_pack/food/pizza
name = "Pizza Crate"
desc = "Best prices on this side of the galaxy. All deliveries are guaranteed to be 99.5% anomaly-free!"
- cost = 3000// Best prices this side of the galaxy.
+ cost = 750// Best prices this side of the galaxy.
contains = list(/obj/item/pizzabox/margherita,
/obj/item/pizzabox/mushroom,
/obj/item/pizzabox/meat,
@@ -42,6 +42,19 @@
fourfiveeight.boxtag = P.boxtag
qdel(P)
+/datum/supply_pack/food/ration
+ name = "Ration Crate"
+ desc = "6 standerd issue rations."
+ cost = 500
+ contains = list(/obj/effect/spawner/lootdrop/ration,
+ /obj/effect/spawner/lootdrop/ration,
+ /obj/effect/spawner/lootdrop/ration,
+ /obj/effect/spawner/lootdrop/ration,
+ /obj/effect/spawner/lootdrop/ration,
+ /obj/effect/spawner/lootdrop/ration)
+ crate_name = "ration crate"
+ crate_type = /obj/structure/closet/crate
+
/*
Ingredients
*/
@@ -49,7 +62,7 @@
/datum/supply_pack/food/ingredients_basic
name = "Basic Ingredients Crate"
desc = "Get things cooking with this crate full of useful ingredients! Contains a dozen eggs, two slabs of meat, some flour, some rice, a bottle of milk, a bottle of soymilk, and a bag of sugar."
- cost = 1000
+ cost = 300
contains = list(/obj/item/reagent_containers/food/condiment/flour,
/obj/item/reagent_containers/food/condiment/flour,
/obj/item/reagent_containers/food/condiment/rice,
@@ -63,16 +76,17 @@
crate_name = "food crate"
crate_type = /obj/structure/closet/crate/freezer
-/datum/supply_pack/food/ingredients_specialized
- name = "Advanced Cooking Crate"
- desc = "For the discerning chef. Contains a bottle of enzyme, a salt shaker, a pepper mill, a bottle of ketchup, a bottle of hot sauce, and a bottle of cream."
- cost = 2000
+/datum/supply_pack/food/ingredients_condiments
+ name = "Condiments Crate"
+ desc = "A variety of garnishes for topping off your dish with a little extra pizzaz. Contains a bottle of enzyme, a salt shaker, a pepper mill, a bottle of ketchup, a bottle of hot sauce, a bottle of BBQ sauce, and a bottle of cream."
+ cost = 250
contains = list(/obj/item/reagent_containers/food/condiment/enzyme,
/obj/item/reagent_containers/food/condiment/saltshaker,
/obj/item/reagent_containers/food/condiment/peppermill,
/obj/item/reagent_containers/food/condiment/ketchup,
/obj/item/reagent_containers/food/condiment/hotsauce,
- /obj/item/reagent_containers/food/drinks/bottle/cream
+ /obj/item/reagent_containers/food/drinks/bottle/cream,
+ /obj/item/reagent_containers/food/condiment/bbqsauce
)
crate_name = "condiments crate"
crate_type = /obj/structure/closet/crate/freezer
@@ -80,7 +94,7 @@
/datum/supply_pack/food/ingredients_randomized
name = "Exotic Meat Crate"
desc = "The best cuts in the whole galaxy. Probably."
- cost = 1000
+ cost = 500
contains = list(/obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/slime,
/obj/item/reagent_containers/food/snacks/meat/slab/killertomato,
/obj/item/reagent_containers/food/snacks/meat/slab/bear,
@@ -103,7 +117,7 @@
/datum/supply_pack/food/ingredients_randomized/meat
name = "Standard Meat Crate"
desc = "Less interesting cuts of meat, but filling nonetheless."
- cost = 1500
+ cost = 300
contains = list(/obj/item/reagent_containers/food/snacks/meat/slab,
/obj/item/reagent_containers/food/snacks/meat/slab/chicken,
/obj/item/reagent_containers/food/snacks/meat/slab/synthmeat,
@@ -116,7 +130,7 @@
/datum/supply_pack/food/ingredients_randomized/vegetables
name = "Vegetables Crate"
desc = "Grown in vats."
- cost = 1300
+ cost = 250
contains = list(/obj/item/reagent_containers/food/snacks/grown/chili,
/obj/item/reagent_containers/food/snacks/grown/corn,
/obj/item/reagent_containers/food/snacks/grown/tomato,
@@ -132,7 +146,7 @@
/datum/supply_pack/food/ingredients_randomized/fruits
name = "Fruit Crate"
desc = "Rich of vitamins, may contain oranges."
- cost = 1500
+ cost = 250
contains = list(/obj/item/reagent_containers/food/snacks/grown/citrus/lime,
/obj/item/reagent_containers/food/snacks/grown/citrus/orange,
/obj/item/reagent_containers/food/snacks/grown/citrus/lemon,
@@ -147,7 +161,7 @@
/datum/supply_pack/food/ingredients_randomized/grains
name = "Grains Crate"
desc = "A crate full of various grains. How interesting."
- cost = 1000
+ cost = 250
contains = list(/obj/item/reagent_containers/food/snacks/grown/wheat,
/obj/item/reagent_containers/food/snacks/grown/wheat,
/obj/item/reagent_containers/food/snacks/grown/wheat, //Weighted to be more common
@@ -162,7 +176,7 @@
/datum/supply_pack/food/ingredients_randomized/bread
name = "Bread Crate"
desc = "A crate full of various breads. Bready to either be eaten or made into delicious meals."
- cost = 1000
+ cost = 300
contains = list(/obj/item/food/bread/plain,
/obj/item/food/breadslice/plain,
/obj/item/food/breadslice/plain,
@@ -181,17 +195,16 @@
/datum/supply_pack/food/grill
name = "Grilling Starter Kit"
desc = "Sometimes the stresses of the world are too much to bear. Some times, for God's sake, you just want to grill. This crate is for those times."
- cost = 5000
+ cost = 1000
contains = list(/obj/item/stack/sheet/mineral/coal/five,
- /obj/machinery/grill/unwrenched,
- /obj/item/reagent_containers/food/drinks/soda_cans/xeno_energy)
+ /obj/machinery/grill/unwrenched)
crate_name = "grilling starter kit crate"
crate_type = /obj/structure/closet/crate/large
/datum/supply_pack/food/grillfuel
name = "Grilling Fuel Kit"
desc = "Contains propane and propane accessories. (Note: doesn't contain any actual propane.)"
- cost = 2000
+ cost = 250
contains = list(/obj/item/stack/sheet/mineral/coal/ten)
crate_name = "grilling fuel kit crate"
@@ -202,7 +215,7 @@
/datum/supply_pack/food/hydrotank
name = "Hydroponics Backpack Crate"
desc = "Bring on the flood with this high-capacity backpack crate. Contains 500 units of life-giving H2O."
- cost = 1000
+ cost = 750
contains = list(/obj/item/watertank)
crate_name = "hydroponics backpack crate"
crate_type = /obj/structure/closet/crate/hydroponics
@@ -210,7 +223,7 @@
/datum/supply_pack/food/gardening
name = "Gardening 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 = 1500
+ cost = 500
contains = list(/obj/item/reagent_containers/spray/plantbgone,
/obj/item/reagent_containers/spray/plantbgone,
/obj/item/reagent_containers/glass/bottle/ammonia,
@@ -227,7 +240,7 @@
/datum/supply_pack/food/weedcontrol
name = "Weed Control Crate"
desc = "Contains a scythe, gasmask, and two anti-weed defoliant grenades, for when your garden grows out of control."
- cost = 1500
+ cost = 750
contains = list(/obj/item/scythe,
/obj/item/clothing/mask/gas,
/obj/item/grenade/chem_grenade/antiweed,
@@ -238,7 +251,7 @@
/datum/supply_pack/food/seeds
name = "Seeds Crate"
desc = "Big things have small beginnings. Contains fourteen different seeds."
- cost = 2000
+ cost = 750
contains = list(/obj/item/seeds/chili,
/obj/item/seeds/cotton,
/obj/item/seeds/berry,
@@ -259,7 +272,7 @@
/datum/supply_pack/food/exoticseeds
name = "Exotic Seeds Crate"
desc = "Any entrepreneuring botanist's dream. Contains eleven different seeds, including two mystery seeds!"
- cost = 3000
+ cost = 1000
contains = list(/obj/item/seeds/nettle,
/obj/item/seeds/plump,
/obj/item/seeds/liberty,
@@ -281,7 +294,7 @@
/datum/supply_pack/food/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 = 2000
+ cost = 1000
contains = list(/obj/item/clothing/head/beekeeper_head,
/obj/item/clothing/suit/beekeeper_suit,
/obj/item/clothing/head/beekeeper_head,
@@ -292,7 +305,7 @@
/datum/supply_pack/food/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 = 3000
+ cost = 2000
contains = list(/obj/structure/beebox/unwrenched,
/obj/item/honey_frame,
/obj/item/honey_frame,
@@ -304,16 +317,5 @@
crate_name = "beekeeping starter crate"
crate_type = /obj/structure/closet/crate/hydroponics
-/datum/supply_pack/food/ration
- name = "Ration Crate"
- desc = "6 standerd issue rations."
- cost = 2000
- contains = list(/obj/effect/spawner/lootdrop/ration,
- /obj/effect/spawner/lootdrop/ration,
- /obj/effect/spawner/lootdrop/ration,
- /obj/effect/spawner/lootdrop/ration,
- /obj/effect/spawner/lootdrop/ration,
- /obj/effect/spawner/lootdrop/ration)
- crate_name = "ration crate"
- crate_type = /obj/structure/closet/crate
+
diff --git a/code/modules/food_and_drinks/kitchen_machinery/grill.dm b/code/modules/food_and_drinks/kitchen_machinery/grill.dm
index c349c7511752..c150fe94498d 100644
--- a/code/modules/food_and_drinks/kitchen_machinery/grill.dm
+++ b/code/modules/food_and_drinks/kitchen_machinery/grill.dm
@@ -9,7 +9,7 @@
layer = BELOW_OBJ_LAYER
use_power = NO_POWER_USE
var/grill_fuel = 0
- var/obj/item/reagent_containers/food/grilled_item
+ var/obj/item/reagent_containers/food/snacks/grilled_item
var/grill_time = 0
var/datum/looping_sound/grill/grill_loop
@@ -27,68 +27,74 @@
else
icon_state = "grill_open"
return ..()
+
+/obj/machinery/grill/examine(mob/user)
+ . = ..()
+ if(grill_fuel)
+ . += span_notice("\The [src] has [grill_fuel] units of fuel left.")
+ else
+ . += span_warning("\The [src] is out of fuel! Add some wood or coal!")
+
/obj/machinery/grill/attackby(obj/item/I, mob/user)
if(istype(I, /obj/item/stack/sheet/mineral/coal) || istype(I, /obj/item/stack/sheet/mineral/wood))
var/obj/item/stack/S = I
var/stackamount = S.get_amount()
- to_chat(user, "You put [stackamount] [I]s in [src].")
+ to_chat(user, span_notice("You put [stackamount] [I]s in [src]."))
if(istype(I, /obj/item/stack/sheet/mineral/coal))
- grill_fuel += (500 * stackamount)
- else
grill_fuel += (50 * stackamount)
+ else
+ grill_fuel += (5 * stackamount)
S.use(stackamount)
update_appearance()
return
if(I.resistance_flags & INDESTRUCTIBLE)
- to_chat(user, "You don't feel it would be wise to grill [I]...")
+ to_chat(user, span_warning("You don't feel it would be wise to grill [I]..."))
return ..()
- if(istype(I, /obj/item/reagent_containers))
- if(istype(I, /obj/item/reagent_containers/food) && !istype(I, /obj/item/reagent_containers/food/drinks))
- var/obj/item/reagent_containers/food/food_item = I
- if(HAS_TRAIT(food_item, TRAIT_NODROP) || (food_item.item_flags & (ABSTRACT | DROPDEL)))
- return ..()
- else if(food_item.foodtype & GRILLED)
- to_chat(user, "[food_item] has already been grilled!")
- return
- else if(!grill_fuel)
- to_chat(user, "There is not enough fuel!")
- return
- else if(!grilled_item && user.transferItemToLoc(food_item, src))
- grilled_item = food_item
- grilled_item.foodtype |= GRILLED
- to_chat(user, "You put the [grilled_item] on [src].")
- update_appearance()
- grill_loop.start()
- return
- else
- if(I.reagents.has_reagent(/datum/reagent/consumable/xeno_energy))
- grill_fuel += (20 * (I.reagents.get_reagent_amount(/datum/reagent/consumable/xeno_energy)))
- to_chat(user, "You pour the Monkey Energy in [src].")
- I.reagents.remove_reagent(/datum/reagent/consumable/xeno_energy, I.reagents.get_reagent_amount(/datum/reagent/consumable/xeno_energy))
- update_appearance()
- return
+
+ if(istype(I, /obj/item/reagent_containers/food/snacks))
+ var/obj/item/reagent_containers/food/snacks/food_item = I
+ if(HAS_TRAIT(food_item, TRAIT_NODROP) || (food_item.item_flags & (ABSTRACT | DROPDEL)))
+ return ..()
+ else if(food_item.foodtype & GRILLED)
+ to_chat(user, span_notice("[food_item] has already been grilled!"))
+ return
+ else if(grill_fuel <= 0)
+ to_chat(user, span_warning("There is not enough fuel!"))
+ return
+ else if(grilled_item)
+ to_chat(user,span_warning("\The [src] is already grilling something, take it out first!"))
+ return
+ else if(user.transferItemToLoc(food_item, src))
+ START_PROCESSING(SSmachines, src)
+ grilled_item = food_item
+ to_chat(user, span_notice("You put the [grilled_item] on [src]."))
+ update_appearance()
+ grill_loop.start()
+ return
..()
/obj/machinery/grill/process()
..()
+ if(!grilled_item)
+ return PROCESS_KILL
update_appearance()
- if(!grill_fuel)
+ if(grill_fuel <= 0)
+ grill_fuel = 0
+ visible_message(span_warning("\The [src] is out of fuel!"))
+ if(grilled_item)
+ grilled_item.forceMove(loc)
+ finish_grill()
return
- else
- grill_fuel -= 1
- if(prob(1))
- var/datum/effect_system/smoke_spread/bad/smoke = new
- smoke.set_up(1, loc)
- smoke.start()
- if(grilled_item)
- grill_time += 1
- grill_fuel -= 10
- grilled_item.AddComponent(/datum/component/sizzle)
+ grill_time += 1
+ grill_fuel -= 1
+ if(prob(1))
+ var/datum/effect_system/smoke_spread/bad/smoke = new
+ smoke.set_up(1, loc)
+ smoke.start()
/obj/machinery/grill/Exited(atom/movable/AM)
if(AM == grilled_item)
finish_grill()
- grilled_item = null
. = ..()
/obj/machinery/grill/Destroy()
@@ -118,13 +124,15 @@
/obj/machinery/grill/attack_hand(mob/user)
if(grilled_item)
- to_chat(user, "You take out [grilled_item] from [src].")
+ to_chat(user, span_notice("You take out [grilled_item] from [src]."))
grilled_item.forceMove(drop_location())
update_appearance()
return
return ..()
/obj/machinery/grill/proc/finish_grill()
+ if(grill_time >= 10 && grilled_item.cooked_type)
+ grilled_item = grilled_item.microwave_act()
switch(grill_time) //no 0-9 to prevent spam
if(10 to 15)
grilled_item.name = "lightly-grilled [grilled_item.name]"
@@ -141,8 +149,12 @@
grilled_item.name = "Powerfully Grilled [grilled_item.name]"
grilled_item.desc = "A [grilled_item.name]. Reminds you of your wife, wait, no, it's prettier!"
grilled_item.foodtype |= FRIED
+ grilled_item.AddComponent(/datum/component/sizzle, (grill_time * 7.5))
+ grilled_item.foodtype |= GRILLED
grill_time = 0
grill_loop.stop()
+ grilled_item = null
+ update_appearance()
/obj/machinery/grill/unwrenched
anchored = FALSE