diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm
index e8055636763..e576dab5fdf 100644
--- a/code/modules/hydroponics/grown.dm
+++ b/code/modules/hydroponics/grown.dm
@@ -73,10 +73,14 @@
var/reag_txt = ""
if(seed && P_analyzer.scan_mode == PLANT_SCANMODE_CHEMICALS)
msg += "
*Plant Reagents:*"
+ var/chem_cap = 0
for(var/reagent_id in seed.reagents_add)
var/datum/reagent/R = GLOB.chemical_reagents_list[reagent_id]
var/amt = reagents.get_reagent_amount(reagent_id)
+ chem_cap += seed.reagents_add[reagent_id]
reag_txt += "\n- [R.name]: [amt]"
+ if(chem_cap > 1)
+ msg += "
- Reagent Traits Over 100% Production"
if(reag_txt)
msg += "
*---------*"
diff --git a/code/modules/hydroponics/seeds.dm b/code/modules/hydroponics/seeds.dm
index 0e82618d2bc..5f48c08eab0 100644
--- a/code/modules/hydroponics/seeds.dm
+++ b/code/modules/hydroponics/seeds.dm
@@ -192,12 +192,21 @@
/obj/item/seeds/proc/harvest(mob/user)
+ ///Reference to the tray/soil the seeds are planted in.
var/obj/machinery/hydroponics/parent = loc //for ease of access
+ ///Count used for creating the correct amount of results to the harvest.
var/t_amount = 0
+ ///List of plants all harvested from the same batch.
var/list/result = list()
+ ///Tile of the harvester to deposit the growables.
var/output_loc = parent.Adjacent(user) ? user.loc : parent.loc //needed for TK
+ ///Name of the grown products.
var/product_name
- while(t_amount < getYield())
+ ///The Number of products produced by the plant, typically the yield. Modified by Densified Chemicals.
+ var/product_count = getYield()
+ if(get_gene(/datum/plant_gene/trait/maxchem))
+ product_count = clamp(round(product_count/2),0,5)
+ while(t_amount < product_count)
var/obj/item/reagent_containers/food/snacks/grown/t_prod = new product(output_loc, src)
if(parent.myseed.plantname != initial(parent.myseed.plantname))
t_prod.name = lowertext(parent.myseed.plantname)
@@ -221,20 +230,23 @@
/obj/item/seeds/proc/prepare_result(var/obj/item/T)
if(!T.reagents)
CRASH("[T] has no reagents.")
-
+ var/reagent_max = 0
for(var/rid in reagents_add)
- var/amount = max(1, round(potency * reagents_add[rid], 1)) //the plant will always have at least 1u of each of the reagents in its reagent production traits
-
- var/list/data = null
- if(rid == /datum/reagent/blood) // Hack to make blood in plants always O-
- data = list("blood_type" = "O-")
- if(rid == /datum/reagent/consumable/nutriment || rid == /datum/reagent/consumable/nutriment/vitamin)
- // apple tastes of apple.
- if(istype(T, /obj/item/reagent_containers/food/snacks/grown))
- var/obj/item/reagent_containers/food/snacks/grown/grown_edible = T
- data = grown_edible.tastes
-
- T.reagents.add_reagent(rid, amount, data)
+ reagent_max += reagents_add[rid]
+ if(istype(T, /obj/item/reagent_containers/food/snacks/grown))
+ var/obj/item/reagent_containers/food/snacks/grown/grown_edible = T
+ for(var/rid in reagents_add)
+ var/reagent_overflow_mod = reagents_add[rid]
+ if(reagent_max > 1)
+ reagent_overflow_mod = (reagents_add[rid]/ reagent_max)
+ var/edible_vol = grown_edible.reagents ? grown_edible.reagents.maximum_volume : 0
+ var/amount = max(1, round((edible_vol)*(potency/100) * reagent_overflow_mod, 1)) //the plant will always have at least 1u of each of the reagents in its reagent production traits
+ var/list/data
+ if(rid == /datum/reagent/blood) // Hack to make blood in plants always O-
+ data = list("blood_type" = "O-")
+ if(rid == /datum/reagent/consumable/nutriment || rid == /datum/reagent/consumable/nutriment/vitamin)
+ data = grown_edible.tastes // apple tastes of apple.
+ T.reagents.add_reagent(rid, amount, data)
/// Setters procs ///