mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-23 21:18:37 +01:00
## 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  ## 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>
60 lines
1.9 KiB
Plaintext
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)
|