diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm
index f0e0e31644..e7d8859481 100755
--- a/code/datums/supplypacks.dm
+++ b/code/datums/supplypacks.dm
@@ -348,20 +348,17 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
/datum/supply_packs/exoticseeds
name = "Exotic seeds crate"
- contains = list(/obj/item/seeds/nettleseed,
+ contains = list(/obj/item/seeds/replicapod,
/obj/item/seeds/replicapod,
- /obj/item/seeds/replicapod,
- /obj/item/seeds/replicapod,
- /obj/item/seeds/plumpmycelium,
/obj/item/seeds/libertymycelium,
- /obj/item/seeds/amanitamycelium,
/obj/item/seeds/reishimycelium,
- /obj/item/seeds/bananaseed,
- /obj/item/seeds/riceseed,
- /obj/item/seeds/eggplantseed,
- /obj/item/seeds/limeseed,
- /obj/item/seeds/grapeseed,
- /obj/item/seeds/eggyseed)
+ /obj/item/seeds/random,
+ /obj/item/seeds/random,
+ /obj/item/seeds/random,
+ /obj/item/seeds/random,
+ /obj/item/seeds/random,
+ /obj/item/seeds/random,
+ /obj/item/seeds/kudzuseed)
cost = 15
containertype = /obj/structure/closet/crate/hydroponics
containername = "Exotic Seeds crate"
diff --git a/code/modules/hydroponics/seed_datums.dm b/code/modules/hydroponics/seed_datums.dm
index cfd7b70a11..206cb535f4 100644
--- a/code/modules/hydroponics/seed_datums.dm
+++ b/code/modules/hydroponics/seed_datums.dm
@@ -97,6 +97,136 @@ proc/populate_seed_list()
var/flower_icon = "vine_fruit" // Which overlay to use.
var/flower_colour // Which colour to use.
+//Creates a random seed. MAKE SURE THE LINE HAS DIVERGED BEFORE THIS IS CALLED.
+/datum/seed/proc/randomize()
+
+ roundstart = 0
+ seed_name = "strange plant" // TODO: name generator.
+ display_name = "strange plants" // TODO: name generator.
+
+ seed_noun = pick("spores","nodes","cuttings","seeds")
+ products = list(/obj/item/weapon/reagent_containers/food/snacks/grown/generic_fruit)
+ potency = rand(5,30)
+
+ //TODO: Finish generalizing the product icons so this can be randomized.
+ packet_icon = "seed-berry"
+ plant_icon = "berry"
+ if(prob(20))
+ harvest_repeat = 1
+
+ if(prob(5))
+ consume_gasses = list()
+ var/gas = pick("oxygen","nitrogen","phoron","carbon_dioxide")
+ consume_gasses[gas] = rand(3,9)
+
+ if(prob(5))
+ exude_gasses = list()
+ var/gas = pick("oxygen","nitrogen","phoron","carbon_dioxide")
+ exude_gasses[gas] = rand(3,9)
+
+ chems = list()
+ if(prob(80))
+ chems["nutriment"] = list(rand(1,10),rand(10,20))
+
+ var/additional_chems = rand(0,5)
+
+ var/list/possible_chems = list(
+ "bicaridine",
+ "hyperzine",
+ "cryoxadone",
+ "blood",
+ "water",
+ "potassium",
+ "plasticide",
+ "slimetoxin",
+ "aslimetoxin",
+ "inaprovaline",
+ "space_drugs",
+ "paroxetine",
+ "mercury",
+ "sugar",
+ "radium",
+ "ryetalyn",
+ "alkysine",
+ "thermite",
+ "tramadol",
+ "cryptobiolin",
+ "dermaline",
+ "dexalin",
+ "phoron",
+ "synaptizine",
+ "impedrezene",
+ "hyronalin",
+ "peridaxon",
+ "toxin",
+ "rezadone",
+ "ethylredoxrazine",
+ "slimejelly",
+ "cyanide",
+ "mindbreaker",
+ "stoxin"
+ )
+
+ for(var/x=1;x<=additional_chems;x++)
+ if(!possible_chems.len)
+ break
+ var/new_chem = pick(possible_chems)
+ possible_chems -= new_chem
+ chems[new_chem] = list(rand(1,10),rand(10,20))
+
+ if(prob(90))
+ requires_nutrients = 1
+ nutrient_consumption = rand(100)*0.1
+ else
+ requires_nutrients = 0
+
+ if(prob(90))
+ requires_water = 1
+ water_consumption = rand(10)
+ else
+ requires_water = 0
+
+ ideal_heat = rand(100,400)
+ heat_tolerance = rand(10,30)
+ ideal_light = rand(2,10)
+ light_tolerance = rand(2,7)
+ toxins_tolerance = rand(2,7)
+ pest_tolerance = rand(2,7)
+ weed_tolerance = rand(2,7)
+ lowkpa_tolerance = rand(10,50)
+ highkpa_tolerance = rand(100,300)
+
+ if(prob(5))
+ alter_temp = rand(-5,5)
+
+ if(prob(1))
+ immutable = -1
+
+ var/carnivore_prob = rand(100)
+ if(carnivore_prob < 5)
+ carnivorous = 2
+ else if(carnivore_prob < 10)
+ carnivorous = 1
+
+ if(prob(10))
+ parasite = 1
+
+ var/vine_prob = rand(100)
+ if(vine_prob < 5)
+ spread = 2
+ else if(vine_prob < 10)
+ spread = 1
+
+ if(prob(5))
+ biolum = 1
+ biolum_colour = "#[pick(list("FF0000","FF7F00","FFFF00","00FF00","0000FF","4B0082","8F00FF"))]"
+
+ endurance = rand(60,100)
+ yield = rand(3,15)
+ maturation = rand(5,15)
+ production = maturation + rand(2,5)
+ lifespan = production + rand(5,10)
+
//Returns a key corresponding to an entry in the global seed list.
/datum/seed/proc/get_mutant_variant()
if(!mutants || !mutants.len || immutable > 0) return 0
diff --git a/code/modules/hydroponics/seeds.dm b/code/modules/hydroponics/seeds.dm
index d0afda2e6f..77a220792b 100644
--- a/code/modules/hydroponics/seeds.dm
+++ b/code/modules/hydroponics/seeds.dm
@@ -40,6 +40,19 @@
..()
src.name = "packet of [seed.seed_name] cuttings"
+/obj/item/seeds/random
+ seed_type = null
+
+/obj/item/seeds/random/New()
+ seed = new()
+ seed.randomize()
+
+ seed.uid = seed_types.len + 1
+ seed.name = "[seed.uid]"
+ seed_types[seed.name] = seed
+
+ update_seed()
+
/obj/item/seeds/replicapod
seed_type = "diona"
diff --git a/code/modules/reagents/reagent_containers/food/snacks/grown.dm b/code/modules/reagents/reagent_containers/food/snacks/grown.dm
index c93de6ad17..5818191ddb 100644
--- a/code/modules/reagents/reagent_containers/food/snacks/grown.dm
+++ b/code/modules/reagents/reagent_containers/food/snacks/grown.dm
@@ -196,6 +196,12 @@
user.SetLuminosity(round(user.luminosity - (potency/5),1))
src.SetLuminosity(round(potency/5,1))
+/obj/item/weapon/reagent_containers/food/snacks/grown/generic_fruit
+ name = "fruit"
+ desc = "It smells weird."
+ icon_state = "orange"
+ potency = 10
+
/obj/item/weapon/reagent_containers/food/snacks/grown/cocoapod
name = "cocoa pod"
desc = "Can be ground into cocoa powder."
@@ -637,4 +643,4 @@
new/obj/effect/decal/cleanable/blood/oil(src.loc)
src.visible_message("The [src.name] has been squashed, causing a distortion in space-time.","You hear a splat and a crackle.")
del(src)
- return
+ return