diff --git a/code/modules/hydroponics/hydro_reagents.dm b/code/modules/hydroponics/hydro_reagents.dm
new file mode 100644
index 00000000000..5e5cb819b98
--- /dev/null
+++ b/code/modules/hydroponics/hydro_reagents.dm
@@ -0,0 +1,126 @@
+
+/obj/item/weapon/plantspray
+ icon = 'icons/obj/hydroponics_machines.dmi'
+ item_state = "spray"
+ flags = OPENCONTAINER | NOBLUDGEON
+ slot_flags = SLOT_BELT
+ throwforce = 4
+ w_class = 2.0
+ throw_speed = 2
+ throw_range = 10
+ var/toxicity = 4
+ var/pest_kill_str = 0
+ var/weed_kill_str = 0
+
+/obj/item/weapon/plantspray/weeds // -- Skie
+
+ name = "weed-spray"
+ desc = "It's a toxic mixture, in spray form, to kill small weeds."
+ icon_state = "weedspray"
+ weed_kill_str = 6
+
+/obj/item/weapon/plantspray/pests
+ name = "pest-spray"
+ desc = "It's some pest eliminator spray! Do not inhale!"
+ icon_state = "pestspray"
+ pest_kill_str = 6
+
+/obj/item/weapon/plantspray/pests/old
+ name = "bottle of pestkiller"
+ icon = 'icons/obj/chemical.dmi'
+ icon_state = "bottle16"
+
+/obj/item/weapon/plantspray/pests/old/carbaryl
+ name = "bottle of carbaryl"
+ icon_state = "bottle16"
+ toxicity = 4
+ pest_kill_str = 2
+
+/obj/item/weapon/plantspray/pests/old/lindane
+ name = "bottle of lindane"
+ icon_state = "bottle18"
+ toxicity = 6
+ pest_kill_str = 4
+
+/obj/item/weapon/plantspray/pests/old/phosmet
+ name = "bottle of phosmet"
+ icon_state = "bottle15"
+ toxicity = 8
+ pest_kill_str = 7
+
+
+// *************************************
+// Weedkiller defines for hydroponics
+// *************************************
+
+/obj/item/weedkiller
+ name = "bottle of weedkiller"
+ icon = 'icons/obj/chemical.dmi'
+ icon_state = "bottle16"
+ flags = OPENCONTAINER | NOBLUDGEON
+ var/toxicity = 0
+ var/weed_kill_str = 0
+
+/obj/item/weedkiller/triclopyr
+ name = "bottle of glyphosate"
+ icon = 'icons/obj/chemical.dmi'
+ icon_state = "bottle16"
+ toxicity = 4
+ weed_kill_str = 2
+
+/obj/item/weedkiller/lindane
+ name = "bottle of triclopyr"
+ icon = 'icons/obj/chemical.dmi'
+ icon_state = "bottle18"
+ toxicity = 6
+ weed_kill_str = 4
+
+/obj/item/weedkiller/D24
+ name = "bottle of 2,4-D"
+ icon = 'icons/obj/chemical.dmi'
+ icon_state = "bottle15"
+ toxicity = 8
+ weed_kill_str = 7
+
+// *************************************
+// Nutrient defines for hydroponics
+// *************************************
+
+/obj/item/weapon/reagent_containers/glass/fertilizer
+ name = "fertilizer bottle"
+ desc = "A small glass bottle. Can hold up to 10 units."
+ icon = 'icons/obj/chemical.dmi'
+ icon_state = "bottle16"
+ flags = OPENCONTAINER
+ possible_transfer_amounts = null
+ w_class = 2.0
+
+ var/fertilizer //Reagent contained, if any.
+
+ //Like a shot glass!
+ amount_per_transfer_from_this = 10
+ volume = 10
+
+/obj/item/weapon/reagent_containers/glass/fertilizer/New()
+ ..()
+
+ src.pixel_x = rand(-5.0, 5)
+ src.pixel_y = rand(-5.0, 5)
+
+ if(fertilizer)
+ reagents.add_reagent(fertilizer,10)
+
+/obj/item/weapon/reagent_containers/glass/fertilizer/ez
+ name = "bottle of E-Z-Nutrient"
+ icon_state = "bottle16"
+ fertilizer = "eznutrient"
+
+/obj/item/weapon/reagent_containers/glass/fertilizer/l4z
+ name = "bottle of Left 4 Zed"
+ icon_state = "bottle18"
+ fertilizer = "left4zed"
+
+/obj/item/weapon/reagent_containers/glass/fertilizer/rh
+ name = "bottle of Robust Harvest"
+ icon_state = "bottle15"
+ fertilizer = "robustharvest"
diff --git a/code/modules/hydroponics/seed.dm b/code/modules/hydroponics/seed.dm
index 86a4f19630d..2dbedafa353 100644
--- a/code/modules/hydroponics/seed.dm
+++ b/code/modules/hydroponics/seed.dm
@@ -771,7 +771,7 @@
// When the seed in this machine mutates/is modified, the tray seed value
// is set to a new datum copied from the original. This datum won't actually
// be put into the global datum list until the product is harvested, though.
-/datum/seed/proc/diverge(var/modified)
+/datum/seed/proc/diverge(var/modified = 0)
if(get_trait(TRAIT_IMMUTABLE) > 0) return
@@ -793,8 +793,17 @@
new_seed.modular_icon = modular_icon
new_seed.preset_icon = preset_icon
- new_seed.seed_name = "[(roundstart ? "[(modified ? "modified" : "mutant")] " : "")][seed_name]"
- new_seed.display_name = "[(roundstart ? "[(modified ? "modified" : "mutant")] " : "")][display_name]"
+ switch(modified)
+ if(0) //Mutant (default)
+ new_seed.seed_name = "mutant [seed_name]"
+ new_seed.display_name = "mutant [seed_name]"
+ if(1) //Modified
+ new_seed.seed_name = "modified [seed_name]"
+ new_seed.display_name = "modified [seed_name]"
+ if(2) //Enhanced
+ new_seed.seed_name = "enhanced [seed_name]"
+ new_seed.display_name = "enhanced [seed_name]"
+
new_seed.seed_noun = seed_noun
new_seed.traits = traits.Copy()
new_seed.update_growth_stages()
diff --git a/code/modules/hydroponics/trays/tray.dm b/code/modules/hydroponics/trays/tray.dm
index d4155f44dad..4eda71ebfd1 100644
--- a/code/modules/hydroponics/trays/tray.dm
+++ b/code/modules/hydroponics/trays/tray.dm
@@ -47,101 +47,14 @@
// Construction
var/unwrenchable = 1
- // Reagent information for process(), consider moving this to a controller along
- // with cycle information under 'mechanical concerns' at some point.
- var/global/list/toxic_reagents = list(
- "charcoal" = -2,
- "toxin" = 2,
- "fluorine" = 2.5,
- "chlorine" = 1.5,
- "sacid" = 1.5,
- "facid" = 3,
- "atrazine" = 3,
- "cryoxadone" = -3,
- "radium" = 2
- )
- var/global/list/nutrient_reagents = list(
- "milk" = 0.1,
- "beer" = 0.25,
- "phosphorus" = 0.1,
- "sugar" = 0.1,
- "sodawater" = 0.1,
- "ammonia" = 1,
- "diethylamine" = 2,
- "nutriment" = 1,
- "protein" = 1.75,
- "plantmatter" = 1.25,
- "adminordrazine" = 1,
- "eznutrient" = 1,
- "robustharvest" = 1,
- "left4zed" = 1,
- "fishwater" = 0.75,
- )
- var/global/list/weedkiller_reagents = list(
- "fluorine" = -4,
- "chlorine" = -3,
- "phosphorus" = -2,
- "sugar" = 2,
- "sacid" = -2,
- "facid" = -4,
- "atrazine" = -8,
- "adminordrazine" = -5
- )
- var/global/list/pestkiller_reagents = list(
- "sugar" = 2,
- "diethylamine" = -2,
- "adminordrazine" = -5
- )
- var/global/list/water_reagents = list(
- "water" = list(1, 0),
- "adminordrazine" = list(1, 0),
- "milk" = list(0.9, 0),
- "beer" = list(0.7, 0),
- "fluorine" = list(-0.5, 0),
- "chlorine" = list(-0.5, 0),
- "phosphorus" = list(-0.5, 0),
- "water" = list(1, 0),
- "sodawater" = list(1, 0),
- "fishwater" = list(1, 0),
- "holywater" = list(1, 0.1),
- )
-
- // Beneficial reagents also have values for modifying yield_mod and mut_mod (in that order).
- var/global/list/beneficial_reagents = list(
- // "reagent" = list(health, yield_Mod, mut_mod, production, potency),
- "beer" = list( -0.05, 0, 0, 0, 0),
- "fluorine" = list( -2, 0, 0, 0, 0),
- "chlorine" = list( -1, 0, 0, 0, 0),
- "phosphorus" = list( -0.75, 0, 0, 0, 0),
- "sodawater" = list( 0.1, 0, 0, 0, 0),
- "sacid" = list( -1, 0, 0, 0, 0),
- "facid" = list( -2, 0, 0, 0, 0),
- "atrazine" = list( -2, 0, 0.2, 0, 0),
- "cryoxadone" = list( 3, 0, 0, 0, 0),
- "ammonia" = list( 0.5, 0, 0, 0, 0),
- "diethylamine" = list( 1, 0, 0, 0, 0),
- "nutriment" = list( 0.25, 0.15, 0, 0, 0),
- "protein" = list( 0.25, 0.15, 0, 0, 0),
- "plantmatter" = list( 0.25, 0.15, 0, 0, 0),
- "radium" = list( -1.5, 0, 0.2, 0, 0),
- "adminordrazine" = list( 1, 1, 1, 0, 0),
- "robustharvest" = list( 0, 0.2, 0, 0, 0),
- "left4zed" = list( 0, 0, 0.2, 0, 0),
- "saltpetre" = list( 0.25, 0, 0, -0.02, 0.01),
- )
-
- //--FalseIncarnate
- // Mutagen list specifies reagent_min_value and reagent_step
- // Reagent_min_value (value 1) is the minimum number of units needed to begin mutations
- // Reagent_step (value 2) is the number of units between each mutation threshold
- var/global/list/mutagenic_reagents = list(
- "radium" = list(10,10),
- "mutagen" = list(1,5)
- )
- //--FalseIncarnate
-
var/last_plant_ikey //This is for debugging reference, and is otherwise useless. --FalseIncarnate
+/*
+* process() can be found in \code\modules\hydroponics\tray\tray_process.dm
+* reagent handling can be found in \code\modules\hydroponics\tray\tray_reagents.dm
+* icon handling can be found in \code\modules\hydroponics\tray\tray_update_icons.dm
+*/
+
/obj/machinery/portable_atmospherics/hydroponics/AltClick()
if(mechanical && !usr.stat && !usr.lying && Adjacent(usr))
close_lid(usr)
@@ -242,86 +155,6 @@
weedlevel += 1 * HYDRO_SPEED_MULTIPLIER
pestlevel = 0
-//Process reagents being input into the tray.
-/obj/machinery/portable_atmospherics/hydroponics/proc/process_reagents()
-
- if(!reagents) return
-
- if(reagents.total_volume <= 0)
- return
-
-/* I have plans for this at a later date, so it's just being commented out for now --FalseIncarnate
-
- reagents.trans_to(temp_chem_holder, min(reagents.total_volume,rand(1,3)))
-
- for(var/datum/reagent/R in temp_chem_holder.reagents.reagent_list)
-
- var/reagent_total = temp_chem_holder.reagents.get_reagent_amount(R.id)
-*/
-
- for(var/datum/reagent/R in reagents.reagent_list)
-
- var/reagent_total = reagents.get_reagent_amount(R.id)
-
- if(seed && !dead)
- //Handle some general level adjustments.
- if(toxic_reagents[R.id])
- toxins += toxic_reagents[R.id] * reagent_total
- if(weedkiller_reagents[R.id])
- weedlevel -= weedkiller_reagents[R.id] * reagent_total
- if(pestkiller_reagents[R.id])
- pestlevel += pestkiller_reagents[R.id] * reagent_total
-
- // Beneficial reagents have a few impacts along with health buffs.
- if(beneficial_reagents[R.id])
- health += beneficial_reagents[R.id][1] * reagent_total
- yield_mod = min(100, yield_mod + (beneficial_reagents[R.id][2] * reagent_total))
- mutation_mod += beneficial_reagents[R.id][3] * reagent_total
- if(seed.get_trait(TRAIT_PRODUCTION) > 1)
- seed.set_trait(TRAIT_PRODUCTION, max(2, seed.get_trait(TRAIT_PRODUCTION) + beneficial_reagents[R.id][4] * reagent_total))
- seed.set_trait(TRAIT_POTENCY, min(100, seed.get_trait(TRAIT_POTENCY) + beneficial_reagents[R.id][5] * reagent_total))
-
- // Mutagen is distinct from the previous types and mostly has a chance of proccing a mutation.
-
- //--FalseIncarnate
- // Mutation rework, will now use "thresholds" for proccing types of mutations and their respective chances.
- // This should make it easier to avoid species shifts when trying to only affect stats like potency.
- // Additionally, the chance of mutations will vary depending on the amount of mutagenic reagents added.
- if(mutagenic_reagents[R.id])
- var/reagent_min_value = mutagenic_reagents[R.id][1] //10 for radium, 1 for unstable mutagen
- var/reagent_step = mutagenic_reagents[R.id][2] //10 for radium, 5 for unstable mutagen
-
- if(reagent_total >= reagent_min_value + (3 * reagent_step)) //31+ for radium, 16+ for unstable mutagen
- mutate(4)
- else if(reagent_total >= reagent_min_value + (2 * reagent_step)) //21-30 for radium, 11-15 for unstable mutagen
- mutate(3)
- else if(reagent_total >= reagent_min_value + reagent_step) //11-20 for radium, 6-10 for unstable mutagen
- mutate(2)
- else if(reagent_total >= reagent_min_value) //1-10 for radium, 1-5 for unstable mutagen
- mutate(1)
-
- //--FalseIncarnate
-
- // Handle nutrient refilling.
- if(nutrient_reagents[R.id])
- nutrilevel += nutrient_reagents[R.id] * reagent_total
-
- // Handle water and water refilling.
- var/water_added = 0
- if(water_reagents[R.id])
- var/water_input = water_reagents[R.id][1] * reagent_total
- water_added += water_input
- waterlevel += water_input
- health += water_reagents[R.id][2] * reagent_total
-
- // Water dilutes toxin level.
- if(water_added > 0)
- toxins -= round(water_added/4)
-
-// temp_chem_holder.reagents.clear_reagents()
- reagents.clear_reagents()
- check_health()
-
//Harvests the product of a plant.
/obj/machinery/portable_atmospherics/hydroponics/proc/harvest(var/mob/user)
@@ -528,11 +361,12 @@
health = 0
dead = 0
- nutrilevel = max(0,min(nutrilevel,maxnutri))
- waterlevel = max(0,min(waterlevel,maxwater))
- pestlevel = max(0,min(pestlevel,10))
- weedlevel = max(0,min(weedlevel,10))
- toxins = max(0,min(toxins,10))
+ nutrilevel = max(0,min(nutrilevel,maxnutri))
+ waterlevel = max(0,min(waterlevel,maxwater))
+ pestlevel = max(0,min(pestlevel,10))
+ weedlevel = max(0,min(weedlevel,10))
+ toxins = max(0,min(toxins,10))
+ yield_mod = min(100, yield_mod)
/obj/machinery/portable_atmospherics/hydroponics/proc/mutate_species()
diff --git a/code/modules/hydroponics/trays/tray_reagents.dm b/code/modules/hydroponics/trays/tray_reagents.dm
index 5e5cb819b98..a2f308f9e33 100644
--- a/code/modules/hydroponics/trays/tray_reagents.dm
+++ b/code/modules/hydroponics/trays/tray_reagents.dm
@@ -1,126 +1,213 @@
-/obj/item/weapon/plantspray
- icon = 'icons/obj/hydroponics_machines.dmi'
- item_state = "spray"
- flags = OPENCONTAINER | NOBLUDGEON
- slot_flags = SLOT_BELT
- throwforce = 4
- w_class = 2.0
- throw_speed = 2
- throw_range = 10
- var/toxicity = 4
- var/pest_kill_str = 0
- var/weed_kill_str = 0
+//Process reagents being put into the tray.
+/obj/machinery/portable_atmospherics/hydroponics/proc/process_reagents()
-/obj/item/weapon/plantspray/weeds // -- Skie
+ if(!reagents) return
- name = "weed-spray"
- desc = "It's a toxic mixture, in spray form, to kill small weeds."
- icon_state = "weedspray"
- weed_kill_str = 6
+ if(reagents.total_volume <= 0)
+ return
-/obj/item/weapon/plantspray/pests
- name = "pest-spray"
- desc = "It's some pest eliminator spray! Do not inhale!"
- icon_state = "pestspray"
- pest_kill_str = 6
+ for(var/datum/reagent/R in reagents.reagent_list)
-/obj/item/weapon/plantspray/pests/old
- name = "bottle of pestkiller"
- icon = 'icons/obj/chemical.dmi'
- icon_state = "bottle16"
+ var/reagent_total = reagents.get_reagent_amount(R.id)
-/obj/item/weapon/plantspray/pests/old/carbaryl
- name = "bottle of carbaryl"
- icon_state = "bottle16"
- toxicity = 4
- pest_kill_str = 2
-
-/obj/item/weapon/plantspray/pests/old/lindane
- name = "bottle of lindane"
- icon_state = "bottle18"
- toxicity = 6
- pest_kill_str = 4
-
-/obj/item/weapon/plantspray/pests/old/phosmet
- name = "bottle of phosmet"
- icon_state = "bottle15"
- toxicity = 8
- pest_kill_str = 7
+ //These are here because they have checks that would clutter up the switch statement cases, and thus get handled after the switch (readability)
+ var/water_value = 0
+ var/health_value = 0
+ var/production_stat_value = 0
+ var/potency_stat_value = 0
-// *************************************
-// Weedkiller defines for hydroponics
-// *************************************
+ switch(R.id)
+ /* EXAMPLE:
+ *
+ * if("example")
+ * //Nutrients
+ * nutrilevel += reagent_total *
+ *
+ * //Water
+ * water_value =
+ *
+ * //Toxins
+ * toxins += reagent_total *
+ *
+ * //Weeds and Pests
+ * weedlevel += reagent_total *
+ * pestlevel += reagent_total *
+ *
+ * //Mutagens
+ * handle_mutagens(reagent_total, , )
+ *
+ * //Modifiers
+ * yield_mod += reagent_total *
+ * mutation_mod += reagent_total *
+ *
+ * //Health
+ * health_value =
+ *
+ * //Production Stat
+ * production_stat_value =
+ *
+ * //Potency Stat
+ * potency_stat_value =
+ *
+ */
-/obj/item/weedkiller
- name = "bottle of weedkiller"
- icon = 'icons/obj/chemical.dmi'
- icon_state = "bottle16"
- flags = OPENCONTAINER | NOBLUDGEON
- var/toxicity = 0
- var/weed_kill_str = 0
+ if("adminordrazine")
+ nutrilevel += reagent_total * 1
+ water_value = 1
+ weedlevel += reagent_total * -5
+ pestlevel += reagent_total * -5
+ yield_mod += reagent_total * 1
+ mutation_mod += reagent_total * 1
+ health_value = 1
+ if("ammonia")
+ nutrilevel += reagent_total * 1
+ health_value = 0.5
+ if("atrazine")
+ toxins += reagent_total * 3
+ weedlevel += reagent_total * -8
+ mutation_mod += reagent_total * 0.2
+ health_value = -2
+ if("beer")
+ nutrilevel += reagent_total * 0.25
+ water_value = 0.7
+ health_value = -0.05
+ if("charcoal")
+ toxins += reagent_total * -2
+ if("chlorine")
+ water_value = -0.5
+ toxins += reagent_total * 1.5
+ weedlevel += reagent_total * -3
+ health_value = -1
+ if("cryoxadone")
+ toxins += reagent_total * -3
+ if(seed && !dead)
+ health += reagent_total * 3
+ if("diethylamine")
+ nutrilevel += reagent_total * 2
+ pestlevel += reagent_total * -2
+ health_value = 1
+ if("eznutrient")
+ nutrilevel += reagent_total * 1
+ if("facid")
+ toxins += reagent_total * 3
+ weedlevel += reagent_total * -4
+ health_value = -2
+ if("fishwater")
+ nutrilevel += reagent_total * 0.75
+ water_value = 1
+ if("fluorine")
+ water_value = -0.5
+ toxins = reagent_total * 2.5
+ weedlevel += reagent_total * -4
+ health_value = -2
+ if("holywater")
+ water_value = 1
+ health_value = 0.1
+ if("left4zed")
+ nutrilevel += reagent_total * 1
+ mutation_mod += reagent_total * 0.2
+ if("milk")
+ nutrilevel += reagent_total * 0.1
+ water_value = 0.9
+ if("mutagen")
+ handle_mutagens(reagent_total, 1, 5)
+ if("nutriment")
+ nutrilevel += reagent_total * 1
+ yield_mod += reagent_total * 0.15
+ health_value = 0.25
+ if("phosphorus")
+ nutrilevel += reagent_total * 0.1
+ water_value = -0.5
+ weedlevel += reagent_total * -2
+ health_value = -0.75
+ if("plantmatter")
+ nutrilevel += reagent_total * 1.25
+ yield_mod += reagent_total * 0.15
+ health_value = 0.25
+ if("protein")
+ nutrilevel += reagent_total * 1.75
+ yield_mod += reagent_total * 0.15
+ health_value = 0.25
+ if("radium")
+ toxins += reagent_total * 2
+ handle_mutagens(reagent_total, 10, 10)
+ mutation_mod += reagent_total * 0.2
+ health_value = -1.5
+ if("robustharvest")
+ nutrilevel += reagent_total * 1
+ yield_mod += reagent_total * 0.2
+ if("sacid")
+ toxins += reagent_total * 1.5
+ weedlevel += reagent_total * -2
+ health_value = -1
+ if("saltpetre")
+ health_value = 0.25
+ production_stat_value = -0.02
+ potency_stat_value = 0.01
+ if("sodawater")
+ nutrilevel += reagent_total * 0.1
+ water_value = 1
+ health_value = 0.1
+ if("sugar")
+ nutrilevel += reagent_total * 0.1
+ weedlevel += reagent_total * 2
+ pestlevel += reagent_total * 2
+ if("toxin")
+ toxins += reagent_total * 2
+ if("water")
+ water_value = 1
-/obj/item/weedkiller/triclopyr
- name = "bottle of glyphosate"
- icon = 'icons/obj/chemical.dmi'
- icon_state = "bottle16"
- toxicity = 4
- weed_kill_str = 2
+ //END SWITCH
-/obj/item/weedkiller/lindane
- name = "bottle of triclopyr"
- icon = 'icons/obj/chemical.dmi'
- icon_state = "bottle18"
- toxicity = 6
- weed_kill_str = 4
+ //Handle water changes
+ if(water_value)
+ var/water_change = 0
+ water_change = reagent_total * water_value
+ waterlevel += water_change
+ if(water_value > 0) //adding water dilutes toxins
+ toxins -= round(water_change/4)
-/obj/item/weedkiller/D24
- name = "bottle of 2,4-D"
- icon = 'icons/obj/chemical.dmi'
- icon_state = "bottle15"
- toxicity = 8
- weed_kill_str = 7
+ //Handle health and stat changes (these require a non-dead seed to be present)
+ if(seed && !dead)
+ //Health
+ if(health_value)
+ health += reagent_total * health_value
+ //Stats
+ if(seed.get_trait(TRAIT_IMMUTABLE) <= 0)
+ //Production
+ if(production_stat_value && seed.get_trait(TRAIT_PRODUCTION) > 2)
+ if(!isnull(plant_controller.seeds[seed.name])) //This is so we don't affect plants in other trays unintentionally
+ seed = seed.diverge(2) //ENHANCE!
+ var/new_production = seed.get_trait(TRAIT_PRODUCTION) + (reagent_total * production_stat_value)
+ seed.set_trait(TRAIT_PRODUCTION, max(2, new_production)) //can't drop below 2 with this method
+ //Potency
+ if(potency_stat_value)
+ if(!isnull(plant_controller.seeds[seed.name])) //This is so we don't affect plants in other trays unintentionally
+ seed = seed.diverge(2) //ENHANCE!
+ var/new_potency = seed.get_trait(TRAIT_POTENCY) + (reagent_total * potency_stat_value)
+ seed.set_trait(TRAIT_POTENCY, max(0, min(100, new_potency))) //can't go above 100 or below 0 with this method
-// *************************************
-// Nutrient defines for hydroponics
-// *************************************
+ //END FOR LOOP
-/obj/item/weapon/reagent_containers/glass/fertilizer
- name = "fertilizer bottle"
- desc = "A small glass bottle. Can hold up to 10 units."
- icon = 'icons/obj/chemical.dmi'
- icon_state = "bottle16"
- flags = OPENCONTAINER
- possible_transfer_amounts = null
- w_class = 2.0
+ reagents.clear_reagents()
+ check_health() //This calls check_level_sanity, which is why it's not called from here directly
- var/fertilizer //Reagent contained, if any.
+/obj/machinery/portable_atmospherics/hydroponics/proc/handle_mutagens(var/amount, var/min_amount, var/step_amount)
+ //shouldn't be getting called without having reagent values supplied
+ if(!amount || !step_amount || !step_amount)
+ return
+ //shouldn't be getting called with negative values
+ if(amount < 0 || min_amount < 0 || step_amount < 0)
+ return
- //Like a shot glass!
- amount_per_transfer_from_this = 10
- volume = 10
-
-/obj/item/weapon/reagent_containers/glass/fertilizer/New()
- ..()
-
- src.pixel_x = rand(-5.0, 5)
- src.pixel_y = rand(-5.0, 5)
-
- if(fertilizer)
- reagents.add_reagent(fertilizer,10)
-
-/obj/item/weapon/reagent_containers/glass/fertilizer/ez
- name = "bottle of E-Z-Nutrient"
- icon_state = "bottle16"
- fertilizer = "eznutrient"
-
-/obj/item/weapon/reagent_containers/glass/fertilizer/l4z
- name = "bottle of Left 4 Zed"
- icon_state = "bottle18"
- fertilizer = "left4zed"
-
-/obj/item/weapon/reagent_containers/glass/fertilizer/rh
- name = "bottle of Robust Harvest"
- icon_state = "bottle15"
- fertilizer = "robustharvest"
+ if(amount > min_amount)
+ if(amount >= min_amount + (3 * step_amount))
+ mutate(4)
+ else if(amount >= min_amount + (2 * step_amount))
+ mutate(3)
+ else if(amount >= min_amount + step_amount)
+ mutate(2)
+ else if(amount >= min_amount)
+ mutate(1)
diff --git a/paradise.dme b/paradise.dme
index 04621e7920b..8e5d05ae200 100644
--- a/paradise.dme
+++ b/paradise.dme
@@ -1236,6 +1236,7 @@
#include "code\modules\hydroponics\grown.dm"
#include "code\modules\hydroponics\grown_inedible.dm"
#include "code\modules\hydroponics\grown_predefined.dm"
+#include "code\modules\hydroponics\hydro_reagents.dm"
#include "code\modules\hydroponics\seed.dm"
#include "code\modules\hydroponics\seed_controller.dm"
#include "code\modules\hydroponics\seed_datums.dm"