diff --git a/code/game/objects/items/stacks/sheets/leather.dm b/code/game/objects/items/stacks/sheets/leather.dm
index 54bc1e2fce..3076d2dfb8 100644
--- a/code/game/objects/items/stacks/sheets/leather.dm
+++ b/code/game/objects/items/stacks/sheets/leather.dm
@@ -83,6 +83,30 @@
icon = 'icons/mob/alien.dmi'
icon_state = "weed_extract"
+//Step one - dehairing.
+/obj/item/stack/animalhide/attackby(obj/item/weapon/W as obj, mob/user as mob)
+ if(has_edge(W) || is_sharp(W))
+ //visible message on mobs is defined as visible_message(var/message, var/self_message, var/blind_message)
+ user.visible_message("\The [user] starts cutting hair off \the [src]", "You start cutting the hair off \the [src]", "You hear the sound of a knife rubbing against flesh")
+ if(do_after(user,50))
+ to_chat(user, "You cut the hair from this [src.singular_name]")
+ //Try locating an exisitng stack on the tile and add to there if possible
+ for(var/obj/item/stack/hairlesshide/HS in user.loc)
+ if(HS.amount < 50 && istype(HS, process_type))
+ HS.amount++
+ src.use(1)
+ return
+ //If it gets to here it means it did not find a suitable stack on the tile.
+ var/obj/item/stack/HS = new process_type(usr.loc)
+ if(istype(HS))
+ HS.amount = 1
+ src.use(1)
+ else
+ ..()
+
+
+//Step two - washing..... it's actually in washing machine code, and ere.
+
/obj/item/stack/hairlesshide
name = "hairless hide"
desc = "This hide was stripped of it's hair, but still needs tanning."
@@ -106,6 +130,19 @@
return
+/obj/item/stack/hairlesshide/proc/rapidcure(var/stacknum = 1)
+ stacknum = min(stacknum, amount)
+
+ while(stacknum)
+ var/obj/item/stack/wetleather/I = new wet_type(get_turf(src))
+
+ if(istype(I))
+ I.dry()
+
+ use(1)
+ stacknum -= 1
+
+//Step three - drying
/obj/item/stack/wetleather
name = "wet leather"
desc = "This leather has been cleaned but still needs to be dried."
@@ -119,31 +156,6 @@
var/dry_type = /obj/item/stack/material/leather
-//Step one - dehairing.
-/obj/item/stack/animalhide/attackby(obj/item/weapon/W as obj, mob/user as mob)
- if(has_edge(W) || is_sharp(W))
- //visible message on mobs is defined as visible_message(var/message, var/self_message, var/blind_message)
- usr.visible_message("\The [usr] starts cutting hair off \the [src]", "You start cutting the hair off \the [src]", "You hear the sound of a knife rubbing against flesh")
- if(do_after(user,50))
- to_chat(usr, "You cut the hair from this [src.singular_name]")
- //Try locating an exisitng stack on the tile and add to there if possible
- for(var/obj/item/stack/hairlesshide/HS in usr.loc)
- if(HS.amount < 50 && istype(HS, process_type))
- HS.amount++
- src.use(1)
- return
- //If it gets to here it means it did not find a suitable stack on the tile.
- var/obj/item/stack/HS = new process_type(usr.loc)
- if(istype(HS))
- HS.amount = 1
- src.use(1)
- else
- ..()
-
-
-//Step two - washing..... it's actually in washing machine code.
-
-//Step three - drying
/obj/item/stack/wetleather/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
..()
if(exposed_temperature >= drying_threshold_temperature)
diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm
index 27330786b1..a7037105d2 100644
--- a/code/game/objects/structures/watercloset.dm
+++ b/code/game/objects/structures/watercloset.dm
@@ -451,6 +451,7 @@
busy = 0
O.clean_blood()
+ O.water_act(rand(1,10))
user.visible_message( \
"[user] washes \a [I] using \the [src].", \
"You wash \a [I] using \the [src].")
diff --git a/code/modules/hydroponics/seed_packets.dm b/code/modules/hydroponics/seed_packets.dm
index 3db8840058..35e84e150d 100644
--- a/code/modules/hydroponics/seed_packets.dm
+++ b/code/modules/hydroponics/seed_packets.dm
@@ -176,6 +176,9 @@ GLOBAL_LIST_BOILERPLATE(all_seed_packs, /obj/item/seeds)
/obj/item/seeds/towermycelium
seed_type = "towercap"
+/obj/item/seeds/redtowermycelium
+ seed_type = "redcap"
+
/obj/item/seeds/glowshroom
seed_type = "glowshroom"
diff --git a/code/modules/hydroponics/seedtypes/eggplant.dm b/code/modules/hydroponics/seedtypes/eggplant.dm
index c856f0d382..cadcd3686c 100644
--- a/code/modules/hydroponics/seedtypes/eggplant.dm
+++ b/code/modules/hydroponics/seedtypes/eggplant.dm
@@ -28,4 +28,4 @@
kitchen_tag = "egg-plant"
mutants = null
chems = list("nutriment" = list(1,5), "egg" = list(3,12))
- has_item_product = /obj/item/weapon/reagent_containers/food/snacks/egg/purple
\ No newline at end of file
+ has_item_product = /obj/item/weapon/reagent_containers/food/snacks/egg/purple
diff --git a/code/modules/hydroponics/seedtypes/mushrooms.dm b/code/modules/hydroponics/seedtypes/mushrooms.dm
index ceb6b0a33b..6f3b36c806 100644
--- a/code/modules/hydroponics/seedtypes/mushrooms.dm
+++ b/code/modules/hydroponics/seedtypes/mushrooms.dm
@@ -131,7 +131,7 @@
seed_name = "tower cap"
display_name = "tower caps"
chems = list("woodpulp" = list(10,1))
- mutants = null
+ mutants = list("redcap")
has_item_product = /obj/item/stack/material/log
/datum/seed/mushroom/towercap/New()
@@ -142,6 +142,18 @@
set_trait(TRAIT_PLANT_COLOUR,"#857F41")
set_trait(TRAIT_PLANT_ICON,"mushroom8")
+/datum/seed/mushroom/towercap/red
+ name = "redcap"
+ seed_name = "red cap"
+ display_name = "red caps"
+ chems = list("woodpulp" = list(10,1), "tannin" = list(1,10))
+ mutants = null
+ has_item_product = null
+
+/datum/seed/mushroom/towercap/red/New()
+ ..()
+ set_trait(TRAIT_PRODUCT_COLOUR,"#b81414")
+
/datum/seed/mushroom/glowshroom
name = "glowshroom"
seed_name = "glowshroom"
diff --git a/code/modules/hydroponics/seedtypes/tobacco.dm b/code/modules/hydroponics/seedtypes/tobacco.dm
new file mode 100644
index 0000000000..d9550fef8c
--- /dev/null
+++ b/code/modules/hydroponics/seedtypes/tobacco.dm
@@ -0,0 +1,38 @@
+//Tobacco/varieties.
+/datum/seed/tobacco
+ name = "tobacco"
+ seed_name = "tobacco"
+ display_name = "tobacco"
+ kitchen_tag = "tobacco"
+ mutants = list("stimbush")
+ chems = list("nutriment" = list(1,15), "nicotine" = list(1,20))
+
+/datum/seed/tobacco/New()
+ ..()
+ set_trait(TRAIT_HARVEST_REPEAT,1)
+ set_trait(TRAIT_MATURATION,6)
+ set_trait(TRAIT_PRODUCTION,6)
+ set_trait(TRAIT_YIELD,6)
+ set_trait(TRAIT_POTENCY,5)
+ set_trait(TRAIT_PRODUCT_ICON,"leafy")
+ set_trait(TRAIT_PRODUCT_COLOUR,"#6f5648")
+ set_trait(TRAIT_PLANT_ICON,"ambrosia")
+ set_trait(TRAIT_IDEAL_LIGHT, 8)
+
+/datum/seed/tobacco/stimbush
+ name = "stimbush"
+ seed_name = "stim-bush"
+ display_name = "stim-bush"
+ chems = list("nutriment" = list(1,10), "hyperzine" = list(1,10), "synaptizine" = list(1,5))
+
+/datum/seed/tobacco/stimbush/New()
+ ..()
+ set_trait(TRAIT_HARVEST_REPEAT,1)
+ set_trait(TRAIT_MATURATION,6)
+ set_trait(TRAIT_PRODUCTION,6)
+ set_trait(TRAIT_YIELD,6)
+ set_trait(TRAIT_POTENCY,5)
+ set_trait(TRAIT_PRODUCT_ICON,"leafy")
+ set_trait(TRAIT_PRODUCT_COLOUR,"#e08a1e")
+ set_trait(TRAIT_PLANT_ICON,"ambrosia")
+ set_trait(TRAIT_IDEAL_LIGHT, 10)
diff --git a/code/modules/materials/materials.dm b/code/modules/materials/materials.dm
index 4c84c501be..c93c872672 100644
--- a/code/modules/materials/materials.dm
+++ b/code/modules/materials/materials.dm
@@ -1051,6 +1051,7 @@ var/list/name_to_material
//TODO PLACEHOLDERS:
/datum/material/leather
name = MAT_LEATHER
+ display_name = "plainleather"
icon_colour = "#5C4831"
stack_type = /obj/item/stack/material/leather
stack_origin_tech = list(TECH_MATERIAL = 2, TECH_BIO = 2)
diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm
index 6b41160d7a..6055ff244b 100644
--- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm
+++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm
@@ -376,6 +376,22 @@
name = "Robust Harvest"
id = "robustharvest"
+/datum/reagent/toxin/fertilizer/tannin
+ name = "tannin"
+ id = "tannin"
+ description = "A chemical found in some plants as a natural pesticide. It may also aid in regulating growth."
+ taste_description = "puckering"
+ taste_mult = 1.2
+ reagent_state = LIQUID
+ strength = 1.5
+ color = "#e67819"
+
+/datum/reagent/toxin/fertilizer/tannin/touch_obj(var/obj/O, var/volume)
+ if(istype(O, /obj/item/stack/hairlesshide))
+ var/obj/item/stack/hairlesshide/HH = O
+ HH.rapidcure(round(volume))
+ ..()
+
/datum/reagent/toxin/plantbgone
name = "Plant-B-Gone"
id = "plantbgone"
diff --git a/icons/obj/hydroponics_products.dmi b/icons/obj/hydroponics_products.dmi
index af1beb5679..cb0e503692 100644
Binary files a/icons/obj/hydroponics_products.dmi and b/icons/obj/hydroponics_products.dmi differ
diff --git a/vorestation.dme b/vorestation.dme
index db302dfa60..70c247f752 100644
--- a/vorestation.dme
+++ b/vorestation.dme
@@ -2409,6 +2409,7 @@
#include "code\modules\hydroponics\seedtypes\surik.dm"
#include "code\modules\hydroponics\seedtypes\telriis.dm"
#include "code\modules\hydroponics\seedtypes\thaadra.dm"
+#include "code\modules\hydroponics\seedtypes\tobacco.dm"
#include "code\modules\hydroponics\seedtypes\tomatoes.dm"
#include "code\modules\hydroponics\seedtypes\vale.dm"
#include "code\modules\hydroponics\seedtypes\vanilla.dm"