diff --git a/code/__DEFINES/machines.dm b/code/__DEFINES/machines.dm
index 1ce5b88945..db13c21c44 100644
--- a/code/__DEFINES/machines.dm
+++ b/code/__DEFINES/machines.dm
@@ -100,3 +100,8 @@
#define NUKE_OFF_UNLOCKED 1
#define NUKE_ON_TIMING 2
#define NUKE_ON_EXPLODING 3
+
+
+//these flags are used to tell the DNA modifier if a plant gene cannot be extracted or modified.
+#define PLANT_GENE_REMOVABLE (1<<0)
+#define PLANT_GENE_EXTRACTABLE (1<<1)
\ No newline at end of file
diff --git a/code/game/objects/items/stacks/tiles/tile_types.dm b/code/game/objects/items/stacks/tiles/tile_types.dm
index 847e1b521e..3fc9bd9535 100644
--- a/code/game/objects/items/stacks/tiles/tile_types.dm
+++ b/code/game/objects/items/stacks/tiles/tile_types.dm
@@ -73,6 +73,15 @@
turf_type = /turf/open/floor/grass
resistance_flags = FLAMMABLE
+//Fairygrass
+/obj/item/stack/tile/fairygrass
+ name = "fairygrass tile"
+ singular_name = "fairygrass floor tile"
+ desc = "A patch of odd, glowing blue grass."
+ icon_state = "tile_fairygrass"
+ item_state = "tile-fairygrass"
+ turf_type = /turf/open/floor/grass/fairy
+ resistance_flags = FLAMMABLE
//Wood
/obj/item/stack/tile/wood
diff --git a/code/game/turfs/simulated/floor/fancy_floor.dm b/code/game/turfs/simulated/floor/fancy_floor.dm
index 43fce2e516..a0697634bd 100644
--- a/code/game/turfs/simulated/floor/fancy_floor.dm
+++ b/code/game/turfs/simulated/floor/fancy_floor.dm
@@ -96,6 +96,15 @@
if(..())
return
+/turf/open/floor/grass/fairy //like grass but fae-er
+ name = "fairygrass patch"
+ desc = "Something about this grass makes you want to frolic. Or get high."
+ icon_state = "fairygrass"
+ floor_tile = /obj/item/stack/tile/fairygrass
+ light_range = 2
+ light_power = 0.80
+ light_color = "#33CCFF"
+
/turf/open/floor/grass/snow
gender = PLURAL
name = "snow"
diff --git a/code/modules/hydroponics/gene_modder.dm b/code/modules/hydroponics/gene_modder.dm
index 79a23014b0..6a36614002 100644
--- a/code/modules/hydroponics/gene_modder.dm
+++ b/code/modules/hydroponics/gene_modder.dm
@@ -201,9 +201,9 @@
if(!G)
continue
dat += "
| [G.get_name()] | "
- if(can_extract)
+ if(can_extract && G.mutability_flags & PLANT_GENE_EXTRACTABLE)
dat += "Extract"
- if(can_insert && istype(disk.gene, G.type))
+ if(can_insert && istype(disk.gene, G.type) && G.mutability_flags & PLANT_GENE_REMOVABLE)
dat += "Replace"
dat += " |
"
dat += ""
@@ -232,9 +232,10 @@
for(var/a in trait_genes)
var/datum/plant_gene/G = a
dat += "| [G.get_name()] | "
- if(can_extract)
+ if(can_extract && G.mutability_flags & PLANT_GENE_EXTRACTABLE)
dat += "Extract"
- dat += "Remove"
+ if(G.mutability_flags & PLANT_GENE_REMOVABLE)
+ dat += "Remove"
dat += " |
"
dat += ""
else
diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm
index 096c7b5b2b..cc4f0a34a0 100644
--- a/code/modules/hydroponics/grown.dm
+++ b/code/modules/hydroponics/grown.dm
@@ -131,7 +131,7 @@
..()
/obj/item/reagent_containers/food/snacks/grown/generate_trash(atom/location)
- if(trash && ispath(trash, /obj/item/grown))
+ if(trash && (ispath(trash, /obj/item/grown) || ispath(trash, /obj/item/reagent_containers/food/snacks/grown)))
. = new trash(location, seed)
trash = null
return
diff --git a/code/modules/hydroponics/grown/berries.dm b/code/modules/hydroponics/grown/berries.dm
index ef019387e8..62c9c7ffaa 100644
--- a/code/modules/hydroponics/grown/berries.dm
+++ b/code/modules/hydroponics/grown/berries.dm
@@ -90,7 +90,7 @@
lifespan = 30
endurance = 25
mutatelist = list()
- genes = list(/datum/plant_gene/trait/glow/berry , /datum/plant_gene/trait/noreact, /datum/plant_gene/trait/repeated_harvest)
+ genes = list(/datum/plant_gene/trait/glow/white, /datum/plant_gene/trait/noreact, /datum/plant_gene/trait/repeated_harvest)
reagents_add = list("uranium" = 0.25, "iodine" = 0.2, "vitamin" = 0.04, "nutriment" = 0.1)
rarity = 20
@@ -121,8 +121,9 @@
growing_icon = 'icons/obj/hydroponics/growing_fruits.dmi'
icon_grow = "cherry-grow"
icon_dead = "cherry-dead"
+ icon_harvest = "cherry-harvest"
genes = list(/datum/plant_gene/trait/repeated_harvest)
- mutatelist = list(/obj/item/seeds/cherry/blue)
+ mutatelist = list(/obj/item/seeds/cherry/blue, /obj/item/seeds/cherry/bulb)
reagents_add = list("nutriment" = 0.07, "sugar" = 0.07)
/obj/item/reagent_containers/food/snacks/grown/cherries
@@ -162,6 +163,31 @@
tastes = list("blue cherry" = 1)
wine_power = 50
+//Cherry Bulbs
+/obj/item/seeds/cherry/bulb
+ name = "pack of cherry bulb pits"
+ desc = "The glowy kind of cherries."
+ icon_state = "seed-cherrybulb"
+ species = "cherrybulb"
+ plantname = "Cherry Bulb Tree"
+ product = /obj/item/reagent_containers/food/snacks/grown/cherrybulbs
+ genes = list(/datum/plant_gene/trait/repeated_harvest, /datum/plant_gene/trait/glow/pink)
+ mutatelist = list()
+ reagents_add = list(/datum/reagent/consumable/nutriment = 0.07, /datum/reagent/consumable/sugar = 0.07)
+ rarity = 10
+
+/obj/item/reagent_containers/food/snacks/grown/cherrybulbs
+ seed = /obj/item/seeds/cherry/bulb
+ name = "cherry bulbs"
+ desc = "They're like little Space Christmas lights!"
+ icon_state = "cherry_bulb"
+ filling_color = "#FF0000"
+ bitesize_mod = 2
+ foodtype = FRUIT
+ grind_results = list(/datum/reagent/consumable/cherryjelly = 0)
+ tastes = list("cherry" = 1)
+ wine_power = 50
+
// Grapes
/obj/item/seeds/grape
name = "pack of grape seeds"
diff --git a/code/modules/hydroponics/grown/cannabis.dm b/code/modules/hydroponics/grown/cannabis.dm
index 67c5e61dcf..6ce3558bc3 100644
--- a/code/modules/hydroponics/grown/cannabis.dm
+++ b/code/modules/hydroponics/grown/cannabis.dm
@@ -61,6 +61,7 @@
species = "ocannabis"
plantname = "Omega Weed"
product = /obj/item/reagent_containers/food/snacks/grown/cannabis/ultimate
+ genes = list(/datum/plant_gene/trait/repeated_harvest, /datum/plant_gene/trait/glow/green)
mutatelist = list()
reagents_add = list("space_drugs" = 0.3,
"mindbreaker" = 0.3,
diff --git a/code/modules/hydroponics/grown/citrus.dm b/code/modules/hydroponics/grown/citrus.dm
index 97b30aec06..7355aa5ab1 100644
--- a/code/modules/hydroponics/grown/citrus.dm
+++ b/code/modules/hydroponics/grown/citrus.dm
@@ -33,6 +33,26 @@
filling_color = "#00FF00"
juice_results = list("limejuice" = 0)
+// Electric Lime
+/obj/item/seeds/lime/electric
+ name = "pack of electric lime seeds"
+ desc = "Electrically sour seeds."
+ icon_state = "seed-electriclime"
+ species = "electric lime"
+ plantname = "Electric Lime Tree"
+ growing_icon = 'icons/obj/hydroponics/growing_fruits.dmi'
+ icon_grow = "lime-grow"
+ icon_dead = "lime-dead"
+ icon_harvest = "lime-harvest"
+ product = /obj/item/reagent_containers/food/snacks/grown/citrus/lime/electric
+ genes = list(/datum/plant_gene/trait/repeated_harvest, /datum/plant_gene/trait/cell_charge, /datum/plant_gene/trait/glow/green)
+
+/obj/item/reagent_containers/food/snacks/grown/citrus/lime/electric
+ seed = /obj/item/seeds/lime/electric
+ name = "electric lime"
+ desc = "It's so sour, you'll be shocked!"
+ icon_state = "electriclime"
+
// Orange
/obj/item/seeds/orange
name = "pack of orange seeds"
@@ -49,7 +69,7 @@
icon_grow = "lime-grow"
icon_dead = "lime-dead"
genes = list(/datum/plant_gene/trait/repeated_harvest)
- mutatelist = list(/obj/item/seeds/lime)
+ mutatelist = list(/obj/item/seeds/lime, /obj/item/seeds/orange_3d)
reagents_add = list("vitamin" = 0.04, "nutriment" = 0.05)
/obj/item/reagent_containers/food/snacks/grown/citrus/orange
@@ -61,6 +81,43 @@
juice_results = list("orangejuice" = 0)
distill_reagent = "triple_sec"
+
+//3D Orange
+/obj/item/seeds/orange_3d
+ name = "pack of extradimensional orange seeds"
+ desc = "Polygonal seeds."
+ icon_state = "seed-orange"
+ species = "orange"
+ plantname = "Extradimensional Orange Tree"
+ product = /obj/item/reagent_containers/food/snacks/grown/citrus/orange
+ lifespan = 60
+ endurance = 50
+ yield = 5
+ potency = 20
+ growing_icon = 'icons/obj/hydroponics/growing_fruits.dmi'
+ icon_grow = "lime-grow"
+ icon_dead = "lime-dead"
+ genes = list(/datum/plant_gene/trait/repeated_harvest)
+ reagents_add = list("vitamin" = 0.04, "nutriment" = 0.05)
+
+/obj/item/reagent_containers/food/snacks/grown/citrus/orange_3d
+ seed = /obj/item/seeds/orange
+ name = "extradminesional orange"
+ desc = "You can hardly wrap your head around this thing."
+ icon_state = "orang"
+ filling_color = "#FFA500"
+ juice_results = list("orangejuice" = 0)
+ distill_reagent = "triple_sec"
+ tastes = list("polygons" = 1, "oranges" = 1)
+
+/obj/item/reagent_containers/food/snacks/grown/citrus/orange_3d/pickup(mob/user)
+ . = ..()
+ icon_state = "orange"
+
+/obj/item/reagent_containers/food/snacks/grown/citrus/orange_3d/dropped(mob/user)
+ . = ..()
+ icon_state = "orang"
+
// Lemon
/obj/item/seeds/lemon
name = "pack of lemon seeds"
diff --git a/code/modules/hydroponics/grown/cocoa_vanilla.dm b/code/modules/hydroponics/grown/cocoa_vanilla.dm
index ea1b9716bd..55fa327f1f 100644
--- a/code/modules/hydroponics/grown/cocoa_vanilla.dm
+++ b/code/modules/hydroponics/grown/cocoa_vanilla.dm
@@ -15,7 +15,7 @@
icon_grow = "cocoapod-grow"
icon_dead = "cocoapod-dead"
genes = list(/datum/plant_gene/trait/repeated_harvest)
- mutatelist = list(/obj/item/seeds/cocoapod/vanillapod)
+ mutatelist = list(/obj/item/seeds/cocoapod/vanillapod, /obj/item/seeds/cocoapod/bungotree)
reagents_add = list("cocoa" = 0.25, "nutriment" = 0.1)
/obj/item/reagent_containers/food/snacks/grown/cocoapod
@@ -50,3 +50,54 @@
foodtype = FRUIT
tastes = list("vanilla" = 1)
distill_reagent = "vanilla" //Takes longer, but you can get even more vanilla from it.
+
+/obj/item/seeds/cocoapod/bungotree
+ name = "pack of bungo tree seeds"
+ desc = "These seeds grow into bungo trees. They appear to be heavy and almost perfectly spherical."
+ icon_state = "seed-bungotree"
+ species = "bungotree"
+ plantname = "Bungo Tree"
+ product = /obj/item/reagent_containers/food/snacks/grown/bungofruit
+ lifespan = 30
+ maturation = 4
+ yield = 3
+ production = 7
+ genes = list(/datum/plant_gene/trait/repeated_harvest)
+ mutatelist = list()
+ reagents_add = list(/datum/reagent/consumable/enzyme = 0.1, /datum/reagent/consumable/nutriment = 0.1)
+ growthstages = 4
+ growing_icon = 'icons/obj/hydroponics/growing_fruits.dmi'
+ icon_grow = "bungotree-grow"
+ icon_dead = "bungotree-dead"
+ rarity = 15
+
+/obj/item/reagent_containers/food/snacks/grown/bungofruit
+ seed = /obj/item/seeds/cocoapod/bungotree
+ name = "bungo fruit"
+ desc = "A strange fruit, tough leathery skin protects its juicy flesh and large poisonous seed."
+ icon_state = "bungo"
+ trash = /obj/item/reagent_containers/food/snacks/grown/bungopit
+ filling_color = "#E8C22F"
+ foodtype = FRUIT
+ tastes = list("bungo" = 2, "tropical fruitiness" = 1)
+ distill_reagent = null
+
+/obj/item/reagent_containers/food/snacks/grown/bungopit
+ seed = /obj/item/seeds/cocoapod/bungotree
+ name = "bungo pit"
+ icon_state = "bungopit"
+ desc = "A large seed, it is said to be potent enough to be able to stop a mans heart."
+ w_class = WEIGHT_CLASS_TINY
+ throwforce = 5
+ throw_speed = 3
+ throw_range = 7
+ foodtype = TOXIC
+ tastes = list("acrid bitterness" = 1)
+
+/obj/item/reagent_containers/food/snacks/grown/bungopit/Initialize()
+ . =..()
+ reagents.clear_reagents()
+ reagents.add_reagent(/datum/reagent/toxin/bungotoxin, seed.potency * 0.10) //More than this will kill at too low potency
+ reagents.add_reagent(/datum/reagent/consumable/nutriment, seed.potency * 0.04)
+
+
diff --git a/code/modules/hydroponics/grown/flowers.dm b/code/modules/hydroponics/grown/flowers.dm
index af5919969c..80d3f343af 100644
--- a/code/modules/hydroponics/grown/flowers.dm
+++ b/code/modules/hydroponics/grown/flowers.dm
@@ -37,7 +37,7 @@
species = "lily"
plantname = "Lily Plants"
product = /obj/item/reagent_containers/food/snacks/grown/poppy/lily
- mutatelist = list(/obj/item/seeds/bee_balm)
+ mutatelist = list(/obj/item/seeds/bee_balm, /obj/item/seeds/poppy/lily/trumpet)
/obj/item/reagent_containers/food/snacks/grown/poppy/lily
seed = /obj/item/seeds/poppy/lily
@@ -47,6 +47,43 @@
tastes = list("pelts " = 1)
filling_color = "#FFA500"
+/obj/item/seeds/poppy/lily/trumpet
+ name = "pack of spaceman's trumpet seeds"
+ desc = "A plant sculped by extensive genetic engineering. The spaceman's trumpet is said to bear no resemblance to its wild ancestors. Inside NT AgriSci circles it is better known as NTPW-0372."
+ icon_state = "seed-trumpet"
+ species = "spacemanstrumpet"
+ plantname = "Spaceman's Trumpet Plant"
+ product = /obj/item/reagent_containers/food/snacks/grown/trumpet
+ lifespan = 80
+ production = 5
+ endurance = 10
+ maturation = 12
+ yield = 4
+ potency = 20
+ growthstages = 4
+ weed_rate = 2
+ weed_chance = 10
+ growing_icon = 'icons/obj/hydroponics/growing_flowers.dmi'
+ icon_grow = "spacemanstrumpet-grow"
+ icon_dead = "spacemanstrumpet-dead"
+ mutatelist = list()
+ genes = list(/datum/plant_gene/reagent/polypyr)
+ reagents_add = list(/datum/reagent/consumable/nutriment = 0.05)
+ rarity = 30
+
+/obj/item/seeds/poppy/lily/trumpet/Initialize()
+ ..()
+ unset_mutability(/datum/plant_gene/reagent/polypyr, PLANT_GENE_EXTRACTABLE)
+
+/obj/item/reagent_containers/food/snacks/grown/trumpet
+ seed = /obj/item/seeds/poppy/lily/trumpet
+ name = "spaceman's trumpet"
+ desc = "A vivid flower that smells faintly of freshly cut grass. Touching the flower seems to stain the skin some time after contact, yet most other surfaces seem to be unaffected by this phenomenon."
+ icon_state = "spacemanstrumpet"
+ filling_color = "#FF6347"
+ bitesize_mod = 3
+ foodtype = VEGETABLES
+
// Geranium
/obj/item/seeds/poppy/geranium
name = "pack of geranium seeds"
@@ -145,6 +182,7 @@
icon_grow = "moonflower-grow"
icon_dead = "sunflower-dead"
product = /obj/item/reagent_containers/food/snacks/grown/moonflower
+ genes = list(/datum/plant_gene/trait/glow/purple)
mutatelist = list()
reagents_add = list("moonshine" = 0.2, "vitamin" = 0.02, "nutriment" = 0.02)
rarity = 15
diff --git a/code/modules/hydroponics/grown/grass_carpet.dm b/code/modules/hydroponics/grown/grass_carpet.dm
index 1a1c2ac07f..6401d32768 100644
--- a/code/modules/hydroponics/grown/grass_carpet.dm
+++ b/code/modules/hydroponics/grown/grass_carpet.dm
@@ -15,7 +15,7 @@
icon_grow = "grass-grow"
icon_dead = "grass-dead"
genes = list(/datum/plant_gene/trait/repeated_harvest)
- mutatelist = list(/obj/item/seeds/grass/carpet)
+ mutatelist = list(/obj/item/seeds/grass/carpet, /obj/item/seeds/grass/fairy)
reagents_add = list("nutriment" = 0.02, "hydrogen" = 0.05)
/obj/item/reagent_containers/food/snacks/grown/grass
@@ -40,6 +40,27 @@
new stacktype(user.drop_location(), grassAmt)
qdel(src)
+//Fairygrass
+/obj/item/seeds/grass/fairy
+ name = "pack of fairygrass seeds"
+ desc = "These seeds grow into a more mystical grass."
+ icon_state = "seed-fairygrass"
+ species = "fairygrass"
+ plantname = "Fairygrass"
+ product = /obj/item/reagent_containers/food/snacks/grown/grass/fairy
+ icon_grow = "fairygrass-grow"
+ icon_dead = "fairygrass-dead"
+ genes = list(/datum/plant_gene/trait/repeated_harvest, /datum/plant_gene/trait/glow/blue)
+ reagents_add = list(/datum/reagent/consumable/nutriment = 0.02, /datum/reagent/hydrogen = 0.05, /datum/reagent/drug/space_drugs = 0.15)
+
+/obj/item/reagent_containers/food/snacks/grown/grass/fairy
+ seed = /obj/item/seeds/grass/fairy
+ name = "fairygrass"
+ desc = "Blue, glowing, and smells fainly of mushrooms."
+ icon_state = "fairygrassclump"
+ filling_color = "#3399ff"
+ stacktype = /obj/item/stack/tile/fairygrass
+
// Carpet
/obj/item/seeds/grass/carpet
name = "pack of carpet seeds"
diff --git a/code/modules/hydroponics/grown/melon.dm b/code/modules/hydroponics/grown/melon.dm
index 87db12d892..e85a36f4b6 100644
--- a/code/modules/hydroponics/grown/melon.dm
+++ b/code/modules/hydroponics/grown/melon.dm
@@ -44,6 +44,7 @@
species = "holymelon"
plantname = "Holy Melon Vines"
product = /obj/item/reagent_containers/food/snacks/grown/holymelon
+ genes = list(/datum/plant_gene/trait/glow/yellow)
mutatelist = list()
reagents_add = list("holywater" = 0.2, "vitamin" = 0.04, "nutriment" = 0.1)
rarity = 20
diff --git a/code/modules/hydroponics/grown/misc.dm b/code/modules/hydroponics/grown/misc.dm
index 0902052a11..af19e3edaf 100644
--- a/code/modules/hydroponics/grown/misc.dm
+++ b/code/modules/hydroponics/grown/misc.dm
@@ -15,7 +15,7 @@
grind_results = list("mustardgrind" = 1)
growing_icon = 'icons/obj/hydroponics/growing_flowers.dmi'
genes = list(/datum/plant_gene/trait/plant_type/weed_hardy)
- mutatelist = list(/obj/item/seeds/harebell)
+ mutatelist = list(/obj/item/seeds/starthistle/corpse_flower, /obj/item/seeds/galaxythistle)
/obj/item/seeds/starthistle/harvest(mob/user)
var/obj/machinery/hydroponics/parent = loc
@@ -29,6 +29,76 @@
parent.update_tray()
+// Corpse flower
+/obj/item/seeds/starthistle/corpse_flower
+ name = "pack of corpse flower seeds"
+ desc = "A species of plant that emits a horrible odor. The odor stops being produced in difficult atmospheric conditions."
+ icon_state = "seed-corpse-flower"
+ species = "corpse-flower"
+ plantname = "Corpse flower"
+ production = 2
+ growing_icon = 'icons/obj/hydroponics/growing_flowers.dmi'
+ genes = list()
+ mutatelist = list()
+
+/obj/item/seeds/starthistle/corpse_flower/pre_attack(obj/machinery/hydroponics/I)
+ if(istype(I, /obj/machinery/hydroponics))
+ if(!I.myseed)
+ START_PROCESSING(SSobj, src)
+ return ..()
+
+/obj/item/seeds/starthistle/corpse_flower/process()
+ var/obj/machinery/hydroponics/parent = loc
+ if(parent.age < maturation) // Start a little before it blooms
+ return
+
+ var/turf/open/T = get_turf(parent)
+ if(abs(ONE_ATMOSPHERE - T.return_air().return_pressure()) > (potency/10 + 10)) // clouds can begin showing at around 50-60 potency in standard atmos
+ return
+
+ var/datum/gas_mixture/stank = new
+ stank.gases[/datum/gas/miasma] = (yield + 6)*7*0.02 // this process is only being called about 2/7 as much as corpses so this is 12-32 times a corpses
+ stank.temperature = T20C // without this the room would eventually freeze and miasma mining would be easier
+ T.assume_air(stank)
+ T.air_update_turf()
+
+//Galaxy Thistle
+/obj/item/seeds/galaxythistle
+ name = "pack of galaxythistle seeds"
+ desc = "An impressive species of weed that is thought to have evolved from the simple milk thistle. Contains flavolignans that can help repair a damaged liver."
+ icon_state = "seed-galaxythistle"
+ species = "galaxythistle"
+ plantname = "Galaxythistle"
+ product = /obj/item/reagent_containers/food/snacks/grown/galaxythistle
+ lifespan = 70
+ endurance = 40
+ maturation = 3
+ production = 2
+ yield = 2
+ potency = 25
+ growthstages = 3
+ growing_icon = 'icons/obj/hydroponics/growing_flowers.dmi'
+ genes = list(/datum/plant_gene/trait/plant_type/weed_hardy, /datum/plant_gene/trait/invasive)
+ mutatelist = list()
+ reagents_add = list(/datum/reagent/consumable/nutriment = 0.05, /datum/reagent/medicine/silibinin = 0.1)
+
+/obj/item/seeds/galaxythistle/Initialize()
+ ..()
+ unset_mutability(/datum/plant_gene/trait/invasive, PLANT_GENE_REMOVABLE)
+
+/obj/item/reagent_containers/food/snacks/grown/galaxythistle
+ seed = /obj/item/seeds/galaxythistle
+ name = "galaxythistle flower head"
+ desc = "This spiny cluster of florets reminds you of the highlands."
+ icon_state = "galaxythistle"
+ filling_color = "#1E7549"
+ bitesize_mod = 3
+ foodtype = VEGETABLES
+ wine_power = 35
+ tastes = list("thistle" = 2, "artichoke" = 1)
+
+
+
// Cabbage
/obj/item/seeds/cabbage
name = "pack of cabbage seeds"
diff --git a/code/modules/hydroponics/grown/mushrooms.dm b/code/modules/hydroponics/grown/mushrooms.dm
index fe2beb896c..e6280f150b 100644
--- a/code/modules/hydroponics/grown/mushrooms.dm
+++ b/code/modules/hydroponics/grown/mushrooms.dm
@@ -191,6 +191,7 @@
genes = list(/datum/plant_gene/trait/plant_type/fungal_metabolism)
growing_icon = 'icons/obj/hydroponics/growing_mushrooms.dmi'
reagents_add = list("nutriment" = 0.1)
+ mutatelist = list(/obj/item/seeds/chanterelle/jupitercup)
/obj/item/reagent_containers/food/snacks/grown/mushroom/chanterelle
seed = /obj/item/seeds/chanter
@@ -199,6 +200,34 @@
icon_state = "chanterelle"
filling_color = "#FFA500"
+//Jupiter Cup
+/obj/item/seeds/chanterelle/jupitercup
+ name = "pack of jupiter cup mycelium"
+ desc = "This mycelium grows into jupiter cups. Zeus would be envious at the power at your fingertips."
+ icon_state = "mycelium-jupitercup"
+ species = "jupitercup"
+ plantname = "Jupiter Cups"
+ product = /obj/item/reagent_containers/food/snacks/grown/mushroom/jupitercup
+ lifespan = 40
+ production = 4
+ endurance = 8
+ yield = 4
+ growthstages = 2
+ genes = list(/datum/plant_gene/trait/plant_type/fungal_metabolism, /datum/plant_gene/reagent/liquidelectricity, /datum/plant_gene/trait/plant_type/carnivory)
+ growing_icon = 'icons/obj/hydroponics/growing_mushrooms.dmi'
+ reagents_add = list(/datum/reagent/consumable/nutriment = 0.1)
+
+/obj/item/seeds/chanterelle/jupitercup/Initialize()
+ ..()
+ unset_mutability(/datum/plant_gene/reagent/liquidelectricity, PLANT_GENE_EXTRACTABLE)
+ unset_mutability(/datum/plant_gene/trait/plant_type/carnivory, PLANT_GENE_REMOVABLE)
+
+/obj/item/reagent_containers/food/snacks/grown/mushroom/jupitercup
+ seed = /obj/item/seeds/chanterelle/jupitercup
+ name = "jupiter cup"
+ desc = "A strange red mushroom, its surface is moist and slick. You wonder how many tiny worms have met their fate inside."
+ icon_state = "jupitercup"
+ filling_color = "#B5003D"
// Glowshroom
/obj/item/seeds/glowshroom
diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm
index f464fccf91..9e987c6d60 100644
--- a/code/modules/hydroponics/hydroponics.dm
+++ b/code/modules/hydroponics/hydroponics.dm
@@ -169,8 +169,27 @@
//Pests & Weeds//////////////////////////////////////////////////////////
- else if(pestlevel >= 5)
- adjustHealth(-1 / rating)
+ if(pestlevel >= 8)
+ if(!myseed.get_gene(/datum/plant_gene/trait/plant_type/carnivory))
+ adjustHealth(-2 / rating)
+
+ else
+ adjustHealth(2 / rating)
+ adjustPests(-1 / rating)
+
+ else if(pestlevel >= 4)
+ if(!myseed.get_gene(/datum/plant_gene/trait/plant_type/carnivory))
+ adjustHealth(-1 / rating)
+
+ else
+ adjustHealth(1 / rating)
+ if(prob(50))
+ adjustPests(-1 / rating)
+
+ else if(pestlevel < 4 && myseed.get_gene(/datum/plant_gene/trait/plant_type/carnivory))
+ adjustHealth(-2 / rating)
+ if(prob(5))
+ adjustPests(-1 / rating)
// If it's a weed, it doesn't stunt the growth
if(weedlevel >= 5 && !myseed.get_gene(/datum/plant_gene/trait/plant_type/weed_hardy))
@@ -210,6 +229,12 @@
needs_update = 1
if (needs_update)
update_icon()
+
+ if(myseed && prob(5 * (11-myseed.production)))
+ for(var/g in myseed.genes)
+ if(istype(g, /datum/plant_gene/trait))
+ var/datum/plant_gene/trait/selectedtrait = g
+ selectedtrait.on_grow(src)
return
/obj/machinery/hydroponics/proc/nutrimentMutation()
diff --git a/code/modules/hydroponics/plant_genes.dm b/code/modules/hydroponics/plant_genes.dm
index db529e8ffb..5b65cb1b5f 100644
--- a/code/modules/hydroponics/plant_genes.dm
+++ b/code/modules/hydroponics/plant_genes.dm
@@ -1,8 +1,18 @@
/datum/plant_gene
var/name
+ var/mutability_flags = PLANT_GENE_EXTRACTABLE | PLANT_GENE_REMOVABLE ///These flags tells the genemodder if we want the gene to be extractable, only removable or neither.
/datum/plant_gene/proc/get_name() // Used for manipulator display and gene disk name.
- return name
+ var/formatted_name
+ if(!(mutability_flags & PLANT_GENE_REMOVABLE && mutability_flags & PLANT_GENE_EXTRACTABLE))
+ if(mutability_flags & PLANT_GENE_REMOVABLE)
+ formatted_name += "Fragile "
+ else if(mutability_flags & PLANT_GENE_EXTRACTABLE)
+ formatted_name += "Essential "
+ else
+ formatted_name += "Immutable "
+ formatted_name += name
+ return formatted_name
/datum/plant_gene/proc/can_add(obj/item/seeds/S)
return !istype(S, /obj/item/seeds/sample) // Samples can't accept new genes
@@ -101,7 +111,18 @@
var/rate = 0.04
/datum/plant_gene/reagent/get_name()
- return "[name] production [rate*100]%"
+ var/formatted_name
+ if(!(mutability_flags & PLANT_GENE_REMOVABLE && mutability_flags & PLANT_GENE_EXTRACTABLE))
+ if(mutability_flags & PLANT_GENE_REMOVABLE)
+ formatted_name += "Fragile "
+ else if(mutability_flags & PLANT_GENE_EXTRACTABLE)
+ formatted_name += "Essential "
+ else
+ formatted_name += "Immutable "
+ formatted_name += "[name] production [rate*100]%"
+ return formatted_name
+
+
/datum/plant_gene/reagent/proc/set_reagent(reag_id)
reagent_id = reag_id
@@ -132,6 +153,15 @@
return FALSE
return TRUE
+/datum/plant_gene/reagent/polypyr
+ name = "Polypyrylium Oligomers"
+ reagent_id = /datum/reagent/medicine/polypyr
+ rate = 0.15
+
+/datum/plant_gene/reagent/liquidelectricity
+ name = "Liquid Electricity"
+ reagent_id = /datum/reagent/consumable/liquidelectricity
+ rate = 0.1
// Various traits affecting the product. Each must be somehow useful.
/datum/plant_gene/trait
@@ -173,6 +203,10 @@
/datum/plant_gene/trait/proc/on_throw_impact(obj/item/reagent_containers/food/snacks/grown/G, atom/target)
return
+///This proc triggers when the tray processes and a roll is sucessful, the success chance scales with production.
+/datum/plant_gene/trait/proc/on_grow(obj/machinery/hydroponics/H)
+ return
+
/datum/plant_gene/trait/squash
// Allows the plant to be squashed when thrown or slipped on, leaving a colored mess and trash type item behind.
// Also splashes everything in target turf with reagents and applies other trait effects (teleporting, etc) to the target by on_squash.
@@ -261,22 +295,44 @@
/datum/plant_gene/trait/glow/shadow
//makes plant emit slightly purple shadows
- //adds -potency*(rate*0.2) light power to products
name = "Shadow Emission"
rate = 0.04
glow_color = "#AAD84B"
-/datum/plant_gene/trait/glow/shadow/glow_power(obj/item/seeds/S)
- return -max(S.potency*(rate*0.2), 0.2)
+datum/plant_gene/trait/glow/white
+ name = "White Bioluminescence"
+ glow_color = "#FFFFFF"
/datum/plant_gene/trait/glow/red
- name = "Red Electrical Glow"
- glow_color = LIGHT_COLOR_RED
+ //Colored versions of bioluminescence.
+ name = "Red Bioluminescence"
+ glow_color = "#FF3333"
+
+/datum/plant_gene/trait/glow/yellow
+ //not the disgusting glowshroom yellow hopefully
+ name = "Yellow Bioluminescence"
+ glow_color = "#FFFF66"
+
+/datum/plant_gene/trait/glow/green
+ //oh no, now i'm radioactive
+ name = "Green Bioluminescence"
+ glow_color = "#99FF99"
+
+/datum/plant_gene/trait/glow/blue
+ //the best one
+ name = "Blue Bioluminescence"
+ glow_color = "#6699FF"
+
+/datum/plant_gene/trait/glow/purple
+ //did you know that notepad++ doesnt think bioluminescence is a word
+ name = "Purple Bioluminescence"
+ glow_color = "#D966FF"
+
+/datum/plant_gene/trait/glow/pink
+ //gay tide station pride
+ name = "Pink Bioluminescence"
+ glow_color = "#FFB3DA"
-/datum/plant_gene/trait/glow/berry
- name = "Strong Bioluminescence"
- rate = 0.05
- glow_color = null
/datum/plant_gene/trait/teleport
@@ -400,6 +456,30 @@
if(!(G.resistance_flags & FIRE_PROOF))
G.resistance_flags |= FIRE_PROOF
+//Invasive spreading lets the plant jump to other trays, the spreadinhg plant won't replace plants of the same type.
+/datum/plant_gene/trait/invasive
+ name = "Invasive Spreading"
+
+/datum/plant_gene/trait/invasive/on_grow(obj/machinery/hydroponics/H)
+ for(var/step_dir in GLOB.alldirs)
+ var/obj/machinery/hydroponics/HY = locate() in get_step(H, step_dir)
+ if(HY && prob(15))
+ if(HY.myseed) // check if there is something in the tray.
+ if(HY.myseed.type == H.myseed.type && HY.dead != 0)
+ continue //It should not destroy its owm kind.
+ qdel(HY.myseed)
+ HY.myseed = null
+ HY.myseed = H.myseed.Copy()
+ HY.age = 0
+ HY.dead = 0
+ HY.plant_health = HY.myseed.endurance
+ HY.lastcycle = world.time
+ HY.harvest = 0
+ HY.weedlevel = 0 // Reset
+ HY.pestlevel = 0 // Reset
+ HY.update_icon()
+ HY.visible_message("The [H.myseed.plantname] spreads!")
+
/datum/plant_gene/trait/plant_type // Parent type
name = "you shouldn't see this"
trait_id = "plant_type"
@@ -412,3 +492,7 @@
/datum/plant_gene/trait/plant_type/alien_properties
name ="?????"
+
+/datum/plant_gene/trait/plant_type/carnivory
+ name = "Obligate Carnivory"
+
diff --git a/code/modules/hydroponics/seeds.dm b/code/modules/hydroponics/seeds.dm
index 2a28b7b097..16863b0aa4 100644
--- a/code/modules/hydroponics/seeds.dm
+++ b/code/modules/hydroponics/seeds.dm
@@ -67,6 +67,7 @@
for(var/reag_id in reagents_add)
genes += new /datum/plant_gene/reagent(reag_id, reagents_add[reag_id])
+ reagents_from_genes() //quality coding
/obj/item/seeds/proc/Copy()
var/obj/item/seeds/S = new type(null, 1)
@@ -94,6 +95,18 @@
for(var/datum/plant_gene/reagent/R in genes)
reagents_add[R.reagent_id] = R.rate
+///This proc adds a mutability_flag to a gene
+/obj/item/seeds/proc/set_mutability(typepath, mutability)
+ var/datum/plant_gene/g = get_gene(typepath)
+ if(g)
+ g.mutability_flags |= mutability
+
+///This proc removes a mutability_flag from a gene
+/obj/item/seeds/proc/unset_mutability(typepath, mutability)
+ var/datum/plant_gene/g = get_gene(typepath)
+ if(g)
+ g.mutability_flags &= ~mutability
+
/obj/item/seeds/proc/mutate(lifemut = 2, endmut = 5, productmut = 1, yieldmut = 2, potmut = 25, wrmut = 2, wcmut = 5, traitmut = 0)
adjust_lifespan(rand(-lifemut,lifemut))
adjust_endurance(rand(-endmut,endmut))
diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm
index 547f610d11..4d02706a3c 100644
--- a/code/modules/reagents/chemistry/reagents/food_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm
@@ -756,6 +756,30 @@
taste_description = "mournful honking"
pH = 9.2
+/datum/reagent/consumable/liquidelectricity
+ name = "Liquid Electricity"
+ id = "liquidelectricity"
+ description = "The blood of Ethereals, and the stuff that keeps them going. Great for them, horrid for anyone else."
+ nutriment_factor = 5 * REAGENTS_METABOLISM
+ color = "#97ee63"
+ taste_description = "pure electricity"
+
+/* //We don't have ethereals here, so I'll just comment it out.
+/datum/reagent/consumable/liquidelectricity/reaction_mob(mob/living/M, method=TOUCH, reac_volume) //can't be on life because of the way blood works.
+ if((method == INGEST || method == INJECT || method == PATCH) && iscarbon(M))
+
+ var/mob/living/carbon/C = M
+ var/obj/item/organ/stomach/ethereal/stomach = C.getorganslot(ORGAN_SLOT_STOMACH)
+ if(istype(stomach))
+ stomach.adjust_charge(reac_volume * REM)
+*/
+
+/datum/reagent/consumable/liquidelectricity/on_mob_life(mob/living/carbon/M)
+ if(prob(25)) // && !isethereal(M))
+ M.electrocute_act(rand(10,15), "Liquid Electricity in their body", 1) //lmao at the newbs who eat energy bars
+ playsound(M, "sparks", 50, TRUE)
+ return ..()
+
/datum/reagent/consumable/astrotame
name = "Astrotame"
id = "astrotame"
diff --git a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm
index c4decc081d..6700c6c006 100644
--- a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm
@@ -1464,3 +1464,50 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
M.adjustToxLoss(1, 0)
..()
. = 1
+
+/datum/reagent/medicine/silibinin
+ name = "Silibinin"
+ id = "silibinin"
+ description = "A thistle derrived hepatoprotective flavolignan mixture that help reverse damage to the liver."
+ reagent_state = SOLID
+ color = "#FFFFD0"
+ metabolization_rate = 1.5 * REAGENTS_METABOLISM
+
+/datum/reagent/medicine/silibinin/on_mob_life(mob/living/carbon/M)
+ M.adjustOrganLoss(ORGAN_SLOT_LIVER, -2)//Add a chance to cure liver trauma once implemented.
+ ..()
+ . = 1
+
+/datum/reagent/medicine/polypyr //This is intended to be an ingredient in advanced chems.
+ name = "Polypyrylium Oligomers"
+ id = "polypyr"
+ description = "A�purple mixture of short polyelectrolyte chains not easily synthesized in the laboratory. It is valued as an intermediate in the synthesis of the cutting edge pharmaceuticals."
+ reagent_state = SOLID
+ color = "#9423FF"
+ metabolization_rate = 0.25 * REAGENTS_METABOLISM
+ overdose_threshold = 50
+ taste_description = "numbing bitterness"
+
+/datum/reagent/medicine/polypyr/on_mob_life(mob/living/carbon/M) //I w�nted a collection of small positive effects, this is as hard to obtain as coniine after all.
+ M.adjustOrganLoss(ORGAN_SLOT_LUNGS, -0.25)
+ M.adjustBruteLoss(-0.35, 0)
+ if(prob(50))
+ if(ishuman(M))
+ var/mob/living/carbon/human/H = M
+ H.bleed_rate = max(H.bleed_rate - 1, 0)
+ ..()
+ . = 1
+
+/datum/reagent/medicine/polypyr/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
+ if(method == TOUCH || method == VAPOR)
+ if(M && ishuman(M) && reac_volume >= 0.5)
+ var/mob/living/carbon/human/H = M
+ H.hair_color = "92f"
+ H.facial_hair_color = "92f"
+ H.update_hair()
+
+/datum/reagent/medicine/polypyr/overdose_process(mob/living/M)
+ M.adjustOrganLoss(ORGAN_SLOT_LUNGS, 0.5)
+ ..()
+ . = 1
+
diff --git a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm
index 2b50ecc0f1..e77cf5b9dc 100644
--- a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm
@@ -967,3 +967,23 @@
else
M.gain_trauma_type(BRAIN_TRAUMA_SPECIAL)
..()
+
+/datum/reagent/toxin/bungotoxin
+ name = "Bungotoxin"
+ id = "bungotoxin"
+ description = "A horrible cardiotoxin that protects the humble bungo pit."
+ //silent_toxin = TRUE //I guess we don't really have the entire tox system ported.
+ color = "#EBFF8E"
+ metabolization_rate = 0.5 * REAGENTS_METABOLISM
+ toxpwr = 0
+ taste_description = "tannin"
+
+/datum/reagent/toxin/bungotoxin/on_mob_life(mob/living/carbon/M)
+ M.adjustOrganLoss(ORGAN_SLOT_HEART, 3)
+ M.confused = M.dizziness //add a tertiary effect here if this is isn't an effective poison.
+ if(current_cycle >= 12 && prob(8))
+ var/tox_message = pick("You feel your heart spasm in your chest.", "You feel faint.","You feel you need to catch your breath.","You feel a prickle of pain in your chest.")
+ to_chat(M, "[tox_message]")
+ . = 1
+ ..()
+
diff --git a/icons/obj/hydroponics/growing.dmi b/icons/obj/hydroponics/growing.dmi
index e7dee2290d..45e73c9281 100644
Binary files a/icons/obj/hydroponics/growing.dmi and b/icons/obj/hydroponics/growing.dmi differ
diff --git a/icons/obj/hydroponics/growing_flowers.dmi b/icons/obj/hydroponics/growing_flowers.dmi
index 245841a6b4..98d9af2ce6 100644
Binary files a/icons/obj/hydroponics/growing_flowers.dmi and b/icons/obj/hydroponics/growing_flowers.dmi differ
diff --git a/icons/obj/hydroponics/growing_fruits.dmi b/icons/obj/hydroponics/growing_fruits.dmi
index dfcb54b7b9..6630da1478 100644
Binary files a/icons/obj/hydroponics/growing_fruits.dmi and b/icons/obj/hydroponics/growing_fruits.dmi differ
diff --git a/icons/obj/hydroponics/growing_mushrooms.dmi b/icons/obj/hydroponics/growing_mushrooms.dmi
index aa24b394f2..20633cf85b 100644
Binary files a/icons/obj/hydroponics/growing_mushrooms.dmi and b/icons/obj/hydroponics/growing_mushrooms.dmi differ
diff --git a/icons/obj/hydroponics/harvest.dmi b/icons/obj/hydroponics/harvest.dmi
index 63dc8b98fd..9d4eefc3bb 100644
Binary files a/icons/obj/hydroponics/harvest.dmi and b/icons/obj/hydroponics/harvest.dmi differ
diff --git a/icons/obj/hydroponics/seeds.dmi b/icons/obj/hydroponics/seeds.dmi
index 3c625cbe40..7bc9ac1fe3 100644
Binary files a/icons/obj/hydroponics/seeds.dmi and b/icons/obj/hydroponics/seeds.dmi differ
diff --git a/icons/obj/tiles.dmi b/icons/obj/tiles.dmi
index 3aa6912da7..90d648d0be 100644
Binary files a/icons/obj/tiles.dmi and b/icons/obj/tiles.dmi differ
diff --git a/icons/turf/floors.dmi b/icons/turf/floors.dmi
index 2a56a03e66..18ebd6b91e 100644
Binary files a/icons/turf/floors.dmi and b/icons/turf/floors.dmi differ