Files
Bubberstation/code/modules/hydroponics/growninedible.dm
T
a289fc4979 Fixes lingering bugs with inedible grown food items (#78414)
## About The Pull Request

Fixes https://github.com/tgstation/tgstation/issues/78375
Fixes  #78402
Fixes #78389

This is a followup to https://github.com/tgstation/tgstation/pull/78322

I am not really a fan of the solution in the above PR being overridding
the `New()` for `obj/item/food/grown`--I was told we should not be doing
that for atoms, hence my removing them, and now they're back! lol.

If we are going to do this (which please let's just do it, I'm tired of
being pinged for this and I'm sure Jacquerel is too) then we need to do
the same for the constructor of `/obj/item/grown`

This is because `to_prod` gets cast as `obj/item/food/grown` (shown
below) and the args must match the constructor for both types if we are
using a keyword there.


https://github.com/tgstation/tgstation/blob/b44fcdedfb7c7d8425bd75b9caf71644a86375d1/code/modules/hydroponics/seeds.dm#L226

Why do we have to do this? because keyword args in constructors do not
work unless you explicitly override the New() proc with those kwargs.
Just doing it in Initialize() is not going to work. And once again,
because `t_prod` can be either `obj/item/food/grown` or `obj/item/grown`
we have to override `New()` for both types if we want that keyword
constructor arg above to work.

## Why It's Good For The Game

Bugfix


![phnEOuTK0U](https://github.com/tgstation/tgstation/assets/13398309/c9a65403-db77-49b3-ada4-8081aac5b81c)

## Changelog

🆑
fix: fixes inedible grown items (such as tower caps) becoming
unclickable when harvested, fixes their seeds disappearing when inserted
into the seed machine
/🆑

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
2023-09-19 17:04:35 +01:00

60 lines
1.9 KiB
Plaintext

// **********************
// Other harvested materials from plants (that are not food)
// **********************
/obj/item/grown // Grown weapons
name = "grown_weapon"
icon = 'icons/obj/service/hydroponics/harvest.dmi'
worn_icon = 'icons/mob/clothing/head/hydroponics.dmi'
resistance_flags = FLAMMABLE
var/obj/item/seeds/seed = null // type path, gets converted to item on New(). It's safe to assume it's always a seed item.
/// Should we pixel offset ourselves at init? for mapping
var/offset_at_init = TRUE
/// The reagent this plant distill to. If NULL, it uses a generic fruit_wine reagent and adjusts its variables.
var/distill_reagent
// This may look like it's doing nothing but it's necessary, we do this to have kwargs work in New (for passing into Initialize)
/obj/item/grown/New(loc, obj/item/seeds/new_seed)
return ..()
/obj/item/grown/Initialize(mapload, obj/item/seeds/new_seed)
. = ..()
create_reagents(100)
if(istype(new_seed))
seed = new_seed.Copy()
else if(ispath(seed))
// This is for adminspawn or map-placed growns. They get the default stats of their seed type.
seed = new seed()
seed.adjust_potency(50-seed.potency)
if(offset_at_init)
pixel_x = base_pixel_x + rand(-5, 5)
pixel_y = base_pixel_y + rand(-5, 5)
if(seed)
// Go through all traits in their genes and call on_new_plant from them.
for(var/datum/plant_gene/trait/trait in seed.genes)
trait.on_new_plant(src, loc)
if(istype(src, seed.product)) // no adding reagents if it is just a trash item
seed.prepare_result(src)
transform *= TRANSFORM_USING_VARIABLE(seed.potency, 100) + 0.5
add_juice()
/obj/item/grown/Destroy()
if(isatom(seed))
QDEL_NULL(seed)
return ..()
/obj/item/grown/proc/add_juice()
if(reagents)
return TRUE
return FALSE
/obj/item/grown/on_grind()
. = ..()
for(var/i in 1 to grind_results.len)
grind_results[grind_results[i]] = round(seed.potency)