Fix botany grafts & glitchy-infinite-plant-spawney-ness (#51257)

* grafts taken from plants with a different gene to 'perennial growth' now work

* don't store same plant_gene ref on plants during cross-pollination
This commit is contained in:
William Wallace
2020-05-26 22:15:40 +08:00
committed by GitHub
parent 2b6c25a47a
commit e2a6e4de8b
3 changed files with 15 additions and 9 deletions
+11 -3
View File
@@ -8,7 +8,7 @@
icon = 'icons/obj/hydroponics/equipment.dmi'
icon_state = "graft_plant"
attack_verb = list("planted", "vegitized", "cropped", "reaped", "farmed")
///This stored the trait taken from the parent plant. Defaults to perenial growth.
///The stored trait taken from the parent plant. Defaults to perenial growth.
var/datum/plant_gene/trait/stored_trait
///Determines the appearance of the graft. Rudimentary right now so it just picks randomly.
var/graft_appearance
@@ -30,15 +30,23 @@
var/yield
/obj/item/graft/Initialize()
/obj/item/graft/Initialize(mapload, datum/plant_gene/trait/trait_path)
. = ..()
stored_trait = new /datum/plant_gene/trait/repeated_harvest //Default gene is repeated harvest.
//Default gene is repeated harvest.
if(trait_path)
stored_trait = new trait_path
else
stored_trait = new /datum/plant_gene/trait/repeated_harvest
icon_state = pick(
10 ; "graft_plant" , \
5 ; "graft_flower" , \
4 ; "graft_mushroom" , \
1 ; "graft_doom" )
/obj/item/graft/Destroy()
QDEL_NULL(stored_trait)
return ..()
/obj/item/graft/attackby(obj/item/I, mob/living/user, params)
if(istype(I, /obj/item/plant_analyzer) && user.a_intent == INTENT_HELP)
to_chat(user, get_graft_text())
+1 -1
View File
@@ -525,7 +525,7 @@
possible_reagents += reag
var/datum/plant_gene/reagent/reagent_gene = pick(possible_reagents) //Let this serve as a lession to delete your WIP comments before merge.
if(reagent_gene.can_add(myseed))
myseed.genes += reagent_gene
myseed.genes += reagent_gene.Copy()
myseed.reagents_from_genes()
continue
+3 -5
View File
@@ -56,7 +56,7 @@
var/weed_chance = 5
///Determines if the plant has had a graft removed or not.
var/grafted = FALSE
///Trait to be applied when grafting a plant.
///Type-path of trait to be applied when grafting a plant.
var/graft_gene
/obj/item/seeds/Initialize(mapload, nogenes = 0)
@@ -562,9 +562,7 @@
* Returns the created graft.
*/
/obj/item/seeds/proc/create_graft()
var/obj/item/graft/snip = new
if(graft_gene)
snip.stored_trait = graft_gene
var/obj/item/graft/snip = new(loc, graft_gene)
snip.parent_seed = src
snip.parent_name = plantname
snip.name += "([plantname])"
@@ -592,7 +590,7 @@
/obj/item/seeds/proc/apply_graft(obj/item/graft/snip)
var/datum/plant_gene/trait/new_trait = snip.stored_trait
if(new_trait?.can_add(src))
genes += new_trait
genes += new_trait.Copy()
// Adjust stats based on graft stats.
src.lifespan = round(clamp(max(src.lifespan, (src.lifespan +(2/3)*(snip.lifespan -src.lifespan) )),0,100))