diff --git a/code/__DEFINES/_hydro_setup.dm b/code/__DEFINES/_hydro_setup.dm
index 4eed9915bf6..ddb2c022977 100644
--- a/code/__DEFINES/_hydro_setup.dm
+++ b/code/__DEFINES/_hydro_setup.dm
@@ -60,9 +60,10 @@
#define TRAIT_FLESH_COLOUR "39"
#define TRAIT_CHEM_SPRAYER "40"
#define TRAIT_WALL_HUGGER "41"
-#define TRAIT_INVASIVE "42"//Allows to invade already seeded tiles
+#define TRAIT_INVASIVE "42" //Allows to invade already seeded tiles
#define TRAIT_BOOSTED_GROWTH "43" // 1 by default, increase it to boost plant growth
#define TRAIT_LARGE "44"
#define TRAIT_CHEM_PRODUCTION "45"
+#define TRAIT_COMPANION_PLANT "46" //tray_process.dm for how this one works
#define WALL_HUG_OFFSET 12 //How many pixels a wallhugging plant is offset towards a wall
\ No newline at end of file
diff --git a/code/datums/craft/recipes/misc.dm b/code/datums/craft/recipes/misc.dm
index 0ef09e3a994..bf71a225310 100644
--- a/code/datums/craft/recipes/misc.dm
+++ b/code/datums/craft/recipes/misc.dm
@@ -126,29 +126,29 @@
)
/datum/craft_recipe/consumer/cement_bag
- name = "Quick-Cement Bag"
+ name = "Bag: Quick-Cement"
result = /obj/item/cement_bag
steps = list(
- list(/obj/item/stack/ore/glass, 2),
- list(/obj/item/stack/rods, 2),
- list(/obj/item/stack/ore, 3),
+ list(/obj/item/stack/ore/glass, 2, "time" = 2),
+ list(/obj/item/stack/rods, 1, "time" = 2),
+ list(/obj/item/stack/ore, 1, "time" = 2),
list(QUALITY_HAMMERING, 1, 12),
list(QUALITY_SHOVELING, 1, 15)
)
/datum/craft_recipe/consumer/hydro_tray_plant_bag_water
- name = "Woodchips Bag"
+ name = "Bag: Woodchips"
result = /obj/item/hydro_tray_plant_bag_water
steps = list(
- list(CRAFT_MATERIAL, 10, MATERIAL_WOOD),
- list(QUALITY_CUTTING, 10, 10)
+ list(CRAFT_MATERIAL, 10, MATERIAL_WOOD, "time" = 15),
+ list(QUALITY_CUTTING, 5, 5)
)
/datum/craft_recipe/consumer/hydro_tray_plant_bag_nutrient
- name = "Mealworms Bag"
+ name = "Bag: Mealworms"
result = /obj/item/hydro_tray_plant_bag_nutrient
steps = list(
- list(/obj/item/stack/ore, 2),
- list(/obj/item/reagent_containers/food/snacks/meat, 2), // 10u oil per meat
+ list(/obj/item/stack/ore, 2, "time" = 15),
+ list(/obj/item/reagent_containers/food/snacks/meat, 2, "time" = 2),
list(QUALITY_CUTTING, 10, 10)
)
\ No newline at end of file
diff --git a/code/game/objects/items/devices/scanners/plant.dm b/code/game/objects/items/devices/scanners/plant.dm
index 2b75ea5aaf2..52d0f340c09 100755
--- a/code/game/objects/items/devices/scanners/plant.dm
+++ b/code/game/objects/items/devices/scanners/plant.dm
@@ -188,6 +188,9 @@
if(2)
dat += "
It is carnivorous and poses a significant threat to living things around it."
+ if(grown_seed.get_trait(TRAIT_COMPANION_PLANT))
+ dat += "
It will yields, production, and growth of other plants close to itself."
+
if(grown_seed.get_trait(TRAIT_PARASITE))
dat += "
It is capable of parisitizing and gaining sustenance from tray weeds."
@@ -233,6 +236,11 @@
dat += "
Expected reagent production: [chem_exspection]x (i.e mult)."
+ if(grown_seed.companions)
+ for(var/friends in grown_seed.companions)
+ dat += "
This plant has benefits when growing next to [friends]."
+
+
return JOINTEXT(dat)
// A special paper that we can scan with the science tool
diff --git a/code/modules/hydroponics/seed.dm b/code/modules/hydroponics/seed.dm
index 06514729e7f..31de74531af 100644
--- a/code/modules/hydroponics/seed.dm
+++ b/code/modules/hydroponics/seed.dm
@@ -32,26 +32,27 @@
/datum/seed
//Tracking.
- var/uid // Unique identifier.
- var/name // Index for global list.
- var/seed_name // Plant name for seed packet.
- var/seed_noun = "seeds" // Descriptor for packet.
- var/display_name // Prettier name.
- var/roundstart // If set, seed will not display variety number.
- var/mysterious // Only used for the random seed packets.
- var/can_self_harvest = 0 // Mostly used for living mobs.
- var/growth_stages = 0 // Number of stages the plant passes through before it is mature.
- var/list/materials // List used to determine material values for recycling in autolathe
- var/list/origin_tech = list() // List used to determine research values for recyling in deconstructive analyzer
- var/list/traits = list() // Initialized in New()
- var/list/mutants // Possible predefined mutant varieties, if any.
- var/list/greatMutants // Possible floral gun mutations
- var/list/evolutions =list() // Possible floral evolutions
- var/list/chems // Chemicals that plant produces in products/injects into victim.
- var/list/consume_gasses // The plant will absorb these gasses during its life.
- var/list/exude_gasses // The plant will exude these gasses during its life.
- var/kitchen_tag // Used by the reagent grinder.
- var/trash_type // Garbage item produced when eaten.
+ var/uid // Unique identifier.
+ var/name // Index for global list.
+ var/seed_name // Plant name for seed packet.
+ var/seed_noun = "seeds" // Descriptor for packet.
+ var/display_name // Prettier name.
+ var/roundstart // If set, seed will not display variety number.
+ var/mysterious // Only used for the random seed packets.
+ var/can_self_harvest = 0 // Mostly used for living mobs.
+ var/growth_stages = 0 // Number of stages the plant passes through before it is mature.
+ var/list/materials // List used to determine material values for recycling in autolathe
+ var/list/origin_tech =list() // List used to determine research values for recyling in deconstructive analyzer
+ var/list/traits = list() // Initialized in New()
+ var/list/mutants // Possible predefined mutant varieties, if any.
+ var/list/greatMutants // Possible floral gun mutations
+ var/list/evolutions =list() // Possible floral evolutions
+ var/list/chems // Chemicals that plant produces in products/injects into victim.
+ var/list/consume_gasses // The plant will absorb these gasses during its life.
+ var/list/exude_gasses // The plant will exude these gasses during its life.
+ var/list/companions =list() // What plants this one gets boosts *This is for the plant itself not affecting others*
+ var/kitchen_tag // Used by the reagent grinder.
+ var/trash_type // Garbage item produced when eaten.
var/splat_type = /obj/effect/decal/cleanable/fruit_smudge // Graffiti decal.
var/has_mob_product
var/force_layer
@@ -78,7 +79,7 @@
set_trait(TRAIT_PLANT_ICON, 0) // Icon to use for the plant growing in the tray.
set_trait(TRAIT_PRODUCT_COLOUR, 0) // Colour to apply to product icon.
set_trait(TRAIT_BIOLUM_COLOUR, 0) // The colour of the plant's radiance.
- set_trait(TRAIT_CHEM_SPRAYER, 0) // The ability to spray its chemicals on movement.
+ set_trait(TRAIT_CHEM_SPRAYER, 0) // The ability to spray its chemicals on movement.
set_trait(TRAIT_POTENCY, 1) // General purpose plant strength value.
set_trait(TRAIT_REQUIRES_NUTRIENTS, 1) // The plant can starve.
set_trait(TRAIT_REQUIRES_WATER, 1) // The plant can become dehydrated.
@@ -521,6 +522,8 @@
set_trait(TRAIT_BIOLUM_COLOUR,get_random_colour(0,75,190))
if(prob(1))
set_trait(TRAIT_CHEM_PRODUCTION,1)
+ if(prob(10))
+ set_trait(TRAIT_COMPANION_PLANT,1)
set_trait(TRAIT_ENDURANCE,rand(60,100))
set_trait(TRAIT_YIELD,rand(3,15))
@@ -709,7 +712,7 @@
if(GENE_PIGMENT)
traits_to_copy = list(TRAIT_PLANT_COLOUR,TRAIT_PRODUCT_COLOUR,TRAIT_BIOLUM_COLOUR)
if(GENE_STRUCTURE)
- traits_to_copy = list(TRAIT_PLANT_ICON,TRAIT_PRODUCT_ICON,TRAIT_HARVEST_REPEAT)
+ traits_to_copy = list(TRAIT_PLANT_ICON,TRAIT_PRODUCT_ICON,TRAIT_HARVEST_REPEAT, TRAIT_COMPANION_PLANT)
if(GENE_FRUIT)
traits_to_copy = list(TRAIT_STINGS,TRAIT_EXPLOSIVE,TRAIT_FLESH_COLOUR,TRAIT_JUICY,TRAIT_CHEM_SPRAYER)
if(GENE_SPECIAL)
diff --git a/code/modules/hydroponics/seed_datums.dm b/code/modules/hydroponics/seed_datums.dm
index 1fd5dd9a2f6..c0be8cf9a97 100644
--- a/code/modules/hydroponics/seed_datums.dm
+++ b/code/modules/hydroponics/seed_datums.dm
@@ -5,6 +5,7 @@
display_name = "chili plants"
chems = list("capsaicin" = list(3,5), "nutriment" = list(1,25))
mutants = list("icechili")
+ companions = list("carrot", "tomato", "corn", "cabbage", "eggplant")
kitchen_tag = "chili"
/datum/seed/chili/New()
@@ -40,6 +41,7 @@
seed_name = "berry"
display_name = "berry bush"
mutants = list("glowberries","poisonberries")
+ companions = list("lemon", "harebell", "silverbell")
chems = list("nutriment" = list(1,10), "berryjuice" = list(10,10))
kitchen_tag = "berries"
@@ -105,30 +107,6 @@
set_trait(TRAIT_PRODUCT_COLOUR,"#7A5454")
set_trait(TRAIT_NUTRIENT_CONSUMPTION, 0.35)
-/datum/seed/blueberry
- name = "blueberries"
- seed_name = "blueberry"
- display_name = "blueberry bush"
- chems = list("nutriment" = list(1,10), "blueberryjuice" = list(10,10))
- kitchen_tag = "blueberries"
-
-
-/datum/seed/blueberry/New()
- ..()
- set_trait(TRAIT_HARVEST_REPEAT,1)
- set_trait(TRAIT_JUICY,1)
- set_trait(TRAIT_MATURATION,5)
- set_trait(TRAIT_PRODUCTION,5)
- set_trait(TRAIT_YIELD,4)
- set_trait(TRAIT_POTENCY,10)
- set_trait(TRAIT_PRODUCT_ICON,"berry")
- set_trait(TRAIT_PRODUCT_COLOUR,"#3BA4EC")
- set_trait(TRAIT_PLANT_ICON,"bush")
- set_trait(TRAIT_IDEAL_HEAT, 298)
- set_trait(TRAIT_IDEAL_LIGHT, 7)
- set_trait(TRAIT_WATER_CONSUMPTION, 6)
- set_trait(TRAIT_NUTRIENT_CONSUMPTION, 0.15)
-
// Nettles/variants.
/datum/seed/nettle
name = "nettle"
@@ -138,6 +116,8 @@
chems = list("nutriment" = list(1,50), "sacid" = list(0,1))
kitchen_tag = "nettle"
kitchen_tag = "nettle"
+ //Random no research
+ companions = list("grass", "tower cap")
/datum/seed/nettle/New()
..()
@@ -176,6 +156,7 @@
mutants = list("bluetomato","bloodtomato")
chems = list("nutriment" = list(1,10), "tomatojuice" = list(10,10))
kitchen_tag = "tomato"
+ companions = list("carrot", "tower cap")
/datum/seed/tomato/New()
..()
@@ -251,6 +232,7 @@
display_name = "eggplants"
chems = list("nutriment" = list(1,10))
kitchen_tag = "eggplant"
+ companions = list("carrot", "tower cap")
/datum/seed/eggplant/New()
..()
@@ -276,6 +258,8 @@
mutants = list("poisonapple","goldapple")
chems = list("nutriment" = list(1,10))
kitchen_tag = "apple"
+ //Random no research
+ companions = list("grass", "lime")
/datum/seed/apple/New()
@@ -323,6 +307,8 @@
greatMutants = list("ambrosiainfernum", "ambrosiaomni")
chems = list("nutriment" = list(1), "space_drugs" = list(1,8), "monocaridine" = list(1,10,1), "toxin" = list(1,10))
kitchen_tag = "ambrosia"
+ //Random no research
+ companions = list("harebell", "silverbell")
/datum/seed/ambrosia/New()
..()
@@ -439,6 +425,7 @@
chems = list("nutriment" = list(1,25))
splat_type = /obj/effect/plant
kitchen_tag = "chanterelle"
+ companions = list("tower cap", "metal cap")
/datum/seed/mushroom/New()
..()
@@ -599,6 +586,7 @@
chems = list("woodpulp" = list(10,1))
mutants = list("metalcap")
kitchen_tag = "towercap"
+ companions = list("metal cap")
/datum/seed/mushroom/towercap/New()
..()
@@ -617,6 +605,7 @@
origin_tech = list(TECH_MATERIAL = 1)
mutants = null
evolutions = list("plasmacap"=list("plasma"))
+ companions = list("tower cap")
/datum/seed/mushroom/towercap/metalcap/New()
..()
@@ -780,6 +769,8 @@
mutants = list("silverbells")
chems = list("nutriment" = list(1,20))
kitchen_tag = "harebell"
+ //Random no research
+ companions = list("tower cap", "wheat")
/datum/seed/flower/New()
..()
@@ -798,6 +789,8 @@
display_name = "silverbells"
mutants = null
chems = list("nutriment" = list(1,50), "silver" = list(1,5))
+ //Random no research
+ companions = list("white-beet", "watermelon")
/datum/seed/flower/silverBell/New()
..()
@@ -812,6 +805,8 @@
display_name = "poppies"
chems = list("space_drugs" = list(1,20), "monocaridine" = list(1,10))
kitchen_tag = "poppy"
+ //Random no research
+ companions = list("grass", "wheat")
/datum/seed/flower/poppy/New()
..()
@@ -831,9 +826,11 @@
seed_name = "sunflower"
display_name = "sunflowers"
kitchen_tag = "sunflower"
+ companions = list("tomato", "blue tomato", "chili", "corn")
/datum/seed/flower/sunflower/New()
..()
+ set_trait(TRAIT_COMPANION_PLANT,1)
set_trait(TRAIT_MATURATION,6)
set_trait(TRAIT_PRODUCT_ICON,"flower2")
set_trait(TRAIT_PRODUCT_COLOUR,"#FFF700")
@@ -850,6 +847,7 @@
mutants = list("greengrapes")
chems = list("nutriment" = list(1,10), "sugar" = list(1,5), "grapejuice" = list(10,10))
kitchen_tag = "grape"
+ companions = list("tower cap", "strawberries")
/datum/seed/grapes/New()
..()
@@ -883,6 +881,8 @@
seed_name = "peanut"
display_name = "peanut vines"
chems = list("nutriment" = list(1,10))
+ //0 research done random plant
+ companions = list("tower cap")
/datum/seed/peanuts/New()
..()
@@ -902,6 +902,7 @@
display_name = "cabbages"
chems = list("nutriment" = list(1,10))
kitchen_tag = "cabbage"
+ companions = list("carrot")
/datum/seed/cabbage/New()
..()
@@ -926,6 +927,8 @@
evolutions = list("clownana"=list("lube","blood"))
trash_type = /obj/item/bananapeel
kitchen_tag = "banana"
+ //0 research done random plant
+ companions = list("tower cap")
/datum/seed/banana/New()
..()
@@ -960,6 +963,7 @@
chems = list("nutriment" = list(1,10), "cornoil" = list(1,10))
kitchen_tag = "corn"
trash_type = /obj/item/corncob
+ companions = list("pumpkin", "soybean", "strawberries", "cabbage")
/datum/seed/corn/New()
..()
@@ -982,6 +986,7 @@
mutants = list("broot")
chems = list("nutriment" = list(1,10), "potato" = list(10,10))
kitchen_tag = "potato"
+ companions = list("corn", "wheat", "strawberries", "cabbage")
/datum/seed/potato/New()
..()
@@ -1001,6 +1006,7 @@
display_name = "soybeans"
chems = list("nutriment" = list(1,20), "soymilk" = list(10,20))
kitchen_tag = "soybeans"
+ companions = list("corn", "potato", "eggplant", "chili")
/datum/seed/soybean/New()
..()
@@ -1019,6 +1025,7 @@
display_name = "wheat stalks"
chems = list("nutriment" = list(1,25), "flour" = list(15,15))
kitchen_tag = "wheat"
+ companions = list("white-beet")
/datum/seed/wheat/New()
..()
@@ -1039,6 +1046,7 @@
display_name = "rice stalks"
chems = list("nutriment" = list(1,25), "rice" = list(10,15))
kitchen_tag = "rice"
+ companions = list("potato")
/datum/seed/rice/New()
..()
@@ -1059,6 +1067,7 @@
display_name = "carrots"
chems = list("nutriment" = list(1,20), "imidazoline" = list(3,5), "carrotjuice" = list(10,20))
kitchen_tag = "carrot"
+ companions = list("chili", "cabbage", "tomato")
/datum/seed/carrots/New()
..()
@@ -1094,6 +1103,7 @@
display_name = "white-beets"
chems = list("nutriment" = list(0,20), "sugar" = list(1,5))
kitchen_tag = "whitebeet"
+ companions = list("carrot", "cabbage", "tomato")
/datum/seed/whitebeets/New()
..()
@@ -1113,6 +1123,7 @@
display_name = "sugarcanes"
chems = list("sugar" = list(4,5))
kitchen_tag = "sugarcane"
+ companions = list("potato")
/datum/seed/sugarcane/New()
..()
@@ -1132,6 +1143,7 @@
seed_name = "watermelon"
display_name = "watermelon vine"
chems = list("nutriment" = list(1,6), "watermelonjuice" = list(10,6))
+ companions = list("corn", "soybean")
/datum/seed/watermelon/New()
..()
@@ -1156,6 +1168,7 @@
display_name = "pumpkin vine"
chems = list("nutriment" = list(1,6))
kitchen_tag = "pumpkin"
+ companions = list("corn", "soybean")
/datum/seed/pumpkin/New()
..()
@@ -1176,6 +1189,8 @@
display_name = "lime trees"
chems = list("nutriment" = list(1,20), "limejuice" = list(10,20))
kitchen_tag = "lime"
+ //Generic list without any research
+ companions = list("gelthi", "tower cap")
/datum/seed/citrus/New()
..()
@@ -1306,6 +1321,7 @@
seed_name = "cacao"
display_name = "cacao tree"
chems = list("nutriment" = list(1,10), "coco" = list(4,5))
+ companions = list("pineapple", "gelthi", "banana", "tower cap")
/datum/seed/cocoa/New()
..()
@@ -1327,6 +1343,7 @@
display_name = "cherry tree"
chems = list("nutriment" = list(1,15), "sugar" = list(1,15), "cherryjelly" = list(10,15))
kitchen_tag = "cherries"
+ companions = list("tower cap")
/datum/seed/cherries/New()
..()
@@ -1366,6 +1383,7 @@
display_name = "mercy's hand leaves"
chems = list("bicaridine" = list(1,10), "anti_toxin" = list(1,10))
kitchen_tag = "shand"
+ companions = list("moon tear", "sun tear")
/datum/seed/shand/New()
..()
@@ -1380,6 +1398,7 @@
set_trait(TRAIT_IDEAL_HEAT, 283)
set_trait(TRAIT_NUTRIENT_CONSUMPTION, 0.15)
+//alocasia hate mint, sadly this is over-wrote in game.
/datum/seed/alocasia
name = "space alocasia"
seed_name = "space alocasia"
@@ -1407,6 +1426,7 @@
display_name = "sun tear leaves"
chems = list("honey" = list(1,10), "kelotane" = list(3,5))
kitchen_tag = "mtear"
+ companions = list("moon tear")
/datum/seed/mtear/New()
..()
@@ -1429,6 +1449,7 @@
mutants = list("sun tear")
chems = list("sugar" = list(1,10), "moon water" = list(3,5))
kitchen_tag = "mtear"
+ companions = list("sun tear")
/datum/seed/moontear/New()
..()
@@ -1449,6 +1470,7 @@
display_name = "blood root"
chems = list("nutriment" = list(1,10), "sanguinum" = list(3,5))
kitchen_tag = "broot"
+ companions = list("tower cap")
/datum/seed/broot/New()
..()
@@ -1669,9 +1691,9 @@
seed_name = "blueberry"
display_name = "blueberry bush"
chems = list("nutriment" = list(1,10), "blueberryjuice" = list(10,10))
+ companions = list("lemon", "harebell", "silverbell", "strawberries") //Spefically you have strawberries
kitchen_tag = "blueberries"
-
/datum/seed/blueberry/New()
..()
set_trait(TRAIT_HARVEST_REPEAT,1)
@@ -1688,12 +1710,12 @@
set_trait(TRAIT_WATER_CONSUMPTION, 6)
set_trait(TRAIT_NUTRIENT_CONSUMPTION, 0.15)
-
/datum/seed/strawberry
name = "strawberries"
seed_name = "strawberries"
display_name = "strawberry bush"
chems = list("nutriment" = list(1,10), "strawberryjuice" = list(10,10))
+ companions = list("lemon", "harebell", "silverbell", "cabbage") //Spefically you have cabbage
kitchen_tag = "strawberries"
/datum/seed/strawberry/New()
@@ -1738,6 +1760,7 @@
seed_name = "cinnamon"
display_name = "cinnamon"
chems = list("cinnamonpowder" = list(6,12))
+ companions = list("maidengrass", "grass", "lemon")
/datum/seed/cinnamon/New()
..()
@@ -1758,10 +1781,12 @@
display_name = "mint plant"
chems = list("blendedmint" = list(10,10))
kitchen_tag = "mint"
+ companions = list("chili", "cabbage", "eggplant")
/datum/seed/mint/New()
..()
set_trait(TRAIT_HARVEST_REPEAT,1)
+ set_trait(TRAIT_COMPANION_PLANT,1)
set_trait(TRAIT_MATURATION,6)
set_trait(TRAIT_PRODUCTION,6)
set_trait(TRAIT_YIELD,5)
diff --git a/code/modules/hydroponics/seed_gene_presets.dm b/code/modules/hydroponics/seed_gene_presets.dm
index fb1ad9025fe..143a199744c 100644
--- a/code/modules/hydroponics/seed_gene_presets.dm
+++ b/code/modules/hydroponics/seed_gene_presets.dm
@@ -269,6 +269,16 @@
trait_info = "single harvest"
preset_values = list(TRAIT_HARVEST_REPEAT = 0)
+/obj/item/computer_hardware/hard_drive/portable/plantgene/structure/companion
+ disk_name = "plant gene disk - companion plant"
+ trait_info = "companion plaint"
+ preset_values = list(TRAIT_COMPANION_PLANT = 1)
+
+/obj/item/computer_hardware/hard_drive/portable/plantgene/structure/loner
+ disk_name = "plant gene disk - loner plant"
+ trait_info = "loner plant"
+ preset_values = list(TRAIT_COMPANION_PLANT = 0)
+
// OUTPUT
/obj/item/computer_hardware/hard_drive/portable/plantgene/output
preset_genetype = GENE_OUTPUT
diff --git a/code/modules/hydroponics/trays/tray.dm b/code/modules/hydroponics/trays/tray.dm
index f167246e118..05845fe4992 100644
--- a/code/modules/hydroponics/trays/tray.dm
+++ b/code/modules/hydroponics/trays/tray.dm
@@ -75,7 +75,8 @@
"adminordrazine" = 1,
"eznutrient" = 1,
"robustharvest" = 1,
- "left4zed" = 1
+ "left4zed" = 1,
+ "protein" = 5
)
var/global/list/weedkiller_reagents = list(
"hydrazine" = -4,
@@ -89,6 +90,10 @@
)
var/global/list/pestkiller_reagents = list(
"sugar" = 2,
+ "protein" = 3,
+ "toxin" = -1,
+ "beer" = -0.5,
+ "ethanol" = -1,
"diethylamine" = -2,
"adminordrazine" = -5
)
@@ -103,9 +108,11 @@
"sodawater" = 1,
)
- // Beneficial reagents also have values for modifying yield_mod and mut_mod (in that order).
+ // Beneficial reagents also have values for modifying:
+ // health | yield_mod | mut_mod - in this order
var/global/list/beneficial_reagents = list(
"beer" = list( -0.05, 0, 0 ),
+ "ethanol" = list( -0.25, 0, 0 ),
"hydrazine" = list( -2, 0, 0 ),
"phosphorus" = list( -0.75, 0, 0 ),
"sodawater" = list( 0.1, 0, 0 ),
@@ -117,6 +124,7 @@
"ammonia" = list( 0.5, 0, 0 ),
"diethylamine" = list( 1, 0, 0 ),
"nutriment" = list( 0.5, 0.1, 0 ),
+ "carbon" = list( 0.1, 0.01,0 ),
"radium" = list( -1.5, 0, 0.2),
"adminordrazine" = list( 1, 1, 1 ),
"robustharvest" = list( 0, 0.2, 0 ),
@@ -131,7 +139,8 @@
)
var/global/list/potency_reagents = list(
- "diethylamine" = 1
+ "diethylamine" = 1,
+ "carbon" = 0.01
)
/obj/machinery/portable_atmospherics/hydroponics/AltClick()
@@ -271,11 +280,14 @@
if(seed.get_trait(TRAIT_HARVEST_REPEAT))
post_moder_yield_mod *= 0.5
+/*
//Fast growing crops dont get hit by the first harvest being elder
if(age >= 70)
post_moder_yield_mod -= (age * 0.005)
if(age >= 120 && user) //Losing yield slowly now
to_chat(user, "This plant appears to be deteriorating with age, surpassing any reasonable life expectancy for a [seed.display_name]. It's yield is suffering as a result.")
+*/
+
post_moder_yield_mod = round(post_moder_yield_mod)
yield_mod = post_moder_yield_mod
// to_chat(user, "yield_mod [seed.display_name]. post_moder_yield_mod [post_moder_yield_mod].")
@@ -326,7 +338,7 @@
//Remove the seed if something is already planted.
if(seed) seed = null
- seed = plant_controller.seeds[pick(list("reishi","nettles","amanita","chanterelle","plumphelmet","towercap","harebells","weeds"))]
+ seed = plant_controller.seeds[pick(list("reishi","nettles","amanita","chanterelle","plumphelmet","towercap","harebells","weeds","grass","wheat"))]
if(!seed) return //Weed does not exist, someone fucked up.
dead = 0
@@ -717,7 +729,7 @@
if(weedlevel >= 5)
to_chat(usr, "\The [src] is infested with weeds!")
if(pestlevel >= 5)
- to_chat(usr, "\The [src] is infested with tiny worms!")
+ to_chat(usr, "\The [src] is infested with tiny harmful pests!")
if(dead)
to_chat(usr, SPAN_DANGER("The plant is dead."))
diff --git a/code/modules/hydroponics/trays/tray_process.dm b/code/modules/hydroponics/trays/tray_process.dm
index 0bc18dc6d51..0314d605397 100644
--- a/code/modules/hydroponics/trays/tray_process.dm
+++ b/code/modules/hydroponics/trays/tray_process.dm
@@ -1,4 +1,5 @@
/obj/machinery/portable_atmospherics/hydroponics/Process()
+ var/mono_crop_booster = 0
if (frozen == 1) // If the tray is frozen, it won't do anything.
return
@@ -8,6 +9,46 @@
if(smoke.reagents.total_volume)
smoke.reagents.trans_to_obj(src, 5, copy = 1)
+ //stacking hydro trays or soil piles is harmful
+ for(var/obj/machinery/portable_atmospherics/hydroponics/over_crowarding in view(0, src))
+ if(over_crowarding != src && seed)
+ weedlevel += 0.1
+ pestlevel += 0.1
+ health -= 3
+ mono_crop_booster -= 1
+
+ if(seed)
+ //monocrop boosting
+ for(var/obj/machinery/portable_atmospherics/hydroponics/field in oview(1, src))
+ if(field == src || field.dead || !seed)
+ continue
+
+ var/is_companion = FALSE
+
+ //Silly complication do to lists
+ if(seed == field.seed || seed.get_trait(TRAIT_COMPANION_PLANT))
+ is_companion = TRUE
+
+ if(seed.companions && !is_companion) //Dont need to go through the list if your already getting a boost from same seed/trait
+ for(var/list_of_companions in seed.companions)
+ if(seed.seed_name == list_of_companions || seed.seed_name == "modifed [list_of_companions]" || seed.seed_name == "mutant [list_of_companions]")
+ is_companion = TRUE
+ break
+
+ if(!is_companion)
+ continue
+
+ health += 0.01
+ mono_crop_booster += 1
+ //companions
+ if(pestlevel > 0 && prob(1+mono_crop_booster))
+ pestlevel -= 0.02
+ if(2 < yield_mod)
+ yield_mod += 0.01
+ if(100 < potency_mod)
+ potency_mod += 0.01
+
+
//Do this even if we're not ready for a plant cycle.
process_reagents()
@@ -39,7 +80,8 @@
return
// Advance plant age.
- if(prob(30*seed.get_trait(TRAIT_BOOSTED_GROWTH))) age += 1 * HYDRO_SPEED_MULTIPLIER
+ if(prob((30+mono_crop_booster)*seed.get_trait(TRAIT_BOOSTED_GROWTH)))
+ age += 1 * HYDRO_SPEED_MULTIPLIER
//Highly mutable plants have a chance of mutating every tick.
if(seed.get_trait(TRAIT_IMMUTABLE) == -1)
diff --git a/code/modules/mob/living/silicon/robot/gripper.dm b/code/modules/mob/living/silicon/robot/gripper.dm
index 8c8fdb28b6e..77331ff7410 100644
--- a/code/modules/mob/living/silicon/robot/gripper.dm
+++ b/code/modules/mob/living/silicon/robot/gripper.dm
@@ -30,7 +30,9 @@
/obj/item/am_containment,
/obj/item/am_shielding_container,
/obj/item/stack/tile, //Repair floors yay
- /obj/item/oddity/blackbox_nanoforge
+ /obj/item/oddity/blackbox_nanoforge,
+ /obj/item/cement_bag,
+ /obj/item/stack/ore //So they can craft cement bags
)
var/obj/item/wrapped = null // Item currently being held.
@@ -264,7 +266,9 @@
/obj/item/am_containment,
/obj/item/am_shielding_container,
/obj/item/device/integrated_electronics,
- /obj/item/integrated_circuit
+ /obj/item/integrated_circuit,
+ /obj/item/hydro_tray_plant_bag_water,
+ /obj/item/hydro_tray_plant_bag_nutrient
)
/obj/item/gripper/chemistry //A gripper designed for chemistry and medical, to allow borgs to work efficiently in the lab
@@ -297,7 +301,7 @@
/obj/item/gripper/service //Used to handle food, drinks, and seeds.
name = "service gripper"
icon_state = "gripper"
- desc = "A simple grasping tool used to perform tasks in the service sector, such as handling food, drinks, and seeds."
+ desc = "A simple grasping tool used to perform tasks in the service sector, such as handling food, drinks, ores, and seeds."
can_hold = list(
/obj/item/reagent_containers/glass,
@@ -313,7 +317,10 @@
/obj/item/am_shielding_container,
/obj/item/clothing/mask/smokable/cigarette,
/obj/item/reagent_containers/cooking_with_jane/cooking_container,
- /obj/item/spatula
+ /obj/item/spatula,
+ /obj/item/hydro_tray_plant_bag_water,
+ /obj/item/hydro_tray_plant_bag_nutrient,
+ /obj/item/stack/ore //So they can craft some items
)
/obj/item/gripper/ammo //Used to boxes, ammo and shells
diff --git a/code/modules/research/experiment.dm b/code/modules/research/experiment.dm
index c2b8a366720..1b40dd08c2a 100644
--- a/code/modules/research/experiment.dm
+++ b/code/modules/research/experiment.dm
@@ -429,6 +429,12 @@ GLOBAL_LIST_EMPTY(explosion_watcher_list)
if ((P.get_trait(TRAIT_JUICY)) && !("TRAIT_JUICY" in scanned_fruittraits))
scanned_fruittraits += "TRAIT_JUICY"
scanneddata += 1
+ if ((P.get_trait(TRAIT_CHEM_PRODUCTION)) && !("CHEM_PRODUCTION" in scanned_fruittraits))
+ scanned_fruittraits += "CHEM_PRODUCTION"
+ scanneddata += 1
+ if ((P.get_trait(TRAIT_COMPANION_PLANT)) && !("COMPANION_PLANT" in scanned_fruittraits))
+ scanned_fruittraits += "COMPANION_PLANT"
+ scanneddata += 1
if ((P.get_trait(TRAIT_EXPLOSIVE)) && !("TRAIT_EXPLOSIVE" in scanned_fruittraits))
scanned_fruittraits += "TRAIT_EXPLOSIVE"
scanneddata += 1
diff --git a/code/modules/trade/datums/trade_stations_presets/1-common/botany.dm b/code/modules/trade/datums/trade_stations_presets/1-common/botany.dm
index bf6718c58df..a66d9256673 100644
--- a/code/modules/trade/datums/trade_stations_presets/1-common/botany.dm
+++ b/code/modules/trade/datums/trade_stations_presets/1-common/botany.dm
@@ -53,7 +53,9 @@
/obj/item/computer_hardware/hard_drive/portable/plantgene/vigour/wall_hugger = custom_good_name("plant gene disk: wall growth"),
/obj/item/computer_hardware/hard_drive/portable/plantgene/vigour/non_wall_hugger = custom_good_name("plant gene disk: no wall growth"),
/obj/item/computer_hardware/hard_drive/portable/plantgene/structure/repeat_harvest = custom_good_name("plant gene disk: repeatable harvest"),
- /obj/item/computer_hardware/hard_drive/portable/plantgene/structure/single_harvest = custom_good_name("plant gene disk: single harvest")
+ /obj/item/computer_hardware/hard_drive/portable/plantgene/structure/single_harvest = custom_good_name("plant gene disk: single harvest"),
+ /obj/item/computer_hardware/hard_drive/portable/plantgene/structure/companion = custom_good_name("plant gene disk: companion plant"),
+ /obj/item/computer_hardware/hard_drive/portable/plantgene/structure/loner = custom_good_name("plant gene disk: loner plant")
),
"Output" = list(
/obj/item/computer_hardware/hard_drive/portable/plantgene/output/power_producer = custom_good_name("plant gene disk: battery"),
diff --git a/modular_sojourn/brewing_datums.dm b/modular_sojourn/brewing_datums.dm
index 05a455cd405..49d1a7cf6e7 100644
--- a/modular_sojourn/brewing_datums.dm
+++ b/modular_sojourn/brewing_datums.dm
@@ -410,7 +410,7 @@
/datum/brewing_product/fernet
reagent_to_brew = "fernet"
display_name = "Fernet"
- needed_crops = list("mint" = 20, "thaadra" = 20, "harebell" = 5)
+ needed_crops = list("mint" = 20, "thaadra" = 20, "harebells" = 5)
needed_chems = list("water" = 60)
brew_timer = 15 MINUTES
brewed_amount = 1