diff --git a/code/game/machinery/washing_machine.dm b/code/game/machinery/washing_machine.dm
index 0a9a1359864..d44625e80a1 100644
--- a/code/game/machinery/washing_machine.dm
+++ b/code/game/machinery/washing_machine.dm
@@ -94,6 +94,10 @@
if(istype(WM.color_source, /obj/item/toy/crayon))
var/obj/item/toy/crayon/CR = WM.color_source
add_atom_colour(CR.paint_color, WASHABLE_COLOUR_PRIORITY)
+ else
+ if(istype(WM.color_source, /obj/item/reagent_containers/food/snacks/grown/rainbow_flower/))
+ var/obj/item/reagent_containers/food/snacks/grown/rainbow_flower/RF = WM.color_source
+ add_atom_colour(RF.color, WASHABLE_COLOUR_PRIORITY)
/mob/living/simple_animal/pet/dog/corgi/machine_wash(obj/machinery/washing_machine/WM)
gib()
@@ -129,6 +133,21 @@
if(!can_adjust && adjusted) //we deadjust the uniform if it's now unadjustable
toggle_jumpsuit_adjust()
+//dyed clothing results//
+
+/obj/item/storage/belt/fannypack/machine_wash(obj/machinery/washing_machine/WM)
+ if(WM.color_source)
+ var/wash_color = WM.color_source.item_color
+ for(var/T in typesof(/obj/item/storage/belt/fannypack))
+ var/obj/item/storage/belt/fannypack/FP = T
+ if(wash_color == initial(FP.item_color))
+ item_state = initial(FP.item_state)
+ icon_state = initial(FP.icon_state)
+ item_color = wash_color
+ name = initial(FP.name)
+ desc = "The colors are a bit dodgy."
+ break
+
/obj/item/clothing/gloves/color/machine_wash(obj/machinery/washing_machine/WM)
if(WM.color_source)
var/wash_color = WM.color_source.item_color
@@ -170,17 +189,29 @@
desc = "The colors are a bit dodgy."
break
-/obj/item/clothing/head/soft/machine_wash(obj/machinery/washing_machine/WM)
+/obj/item/clothing/neck/scarf/machine_wash(obj/machinery/washing_machine/WM)
if(WM.color_source)
- var/wash_color = WM.color_source.item_color
- for(var/T in typesof(/obj/item/clothing/head/soft))
- var/obj/item/clothing/head/soft/H = T
- if(wash_color == initial(H.item_color))
- icon_state = initial(H.icon_state)
- item_color = wash_color
- name = initial(H.name)
- desc = "The colors are a bit dodgy."
- break
+ if(istype(WM.color_source, /obj/item/toy/crayon))
+ var/obj/item/toy/crayon/CR = WM.color_source
+ add_atom_colour(CR.paint_color, WASHABLE_COLOUR_PRIORITY)
+ else
+ if(istype(WM.color_source, /obj/item/reagent_containers/food/snacks/grown/rainbow_flower/))
+ var/obj/item/reagent_containers/food/snacks/grown/rainbow_flower/RF = WM.color_source
+ add_atom_colour(RF.color, WASHABLE_COLOUR_PRIORITY)
+ name = "dyed scarf"
+ desc = "The colors are a bit dodgy."
+
+/obj/item/clothing/head/beanie/machine_wash(obj/machinery/washing_machine/WM)
+ if(WM.color_source)
+ if(istype(WM.color_source, /obj/item/toy/crayon))
+ var/obj/item/toy/crayon/CR = WM.color_source
+ add_atom_colour(CR.paint_color, WASHABLE_COLOUR_PRIORITY)
+ else
+ if(istype(WM.color_source, /obj/item/reagent_containers/food/snacks/grown/rainbow_flower/))
+ var/obj/item/reagent_containers/food/snacks/grown/rainbow_flower/RF = WM.color_source
+ add_atom_colour(RF.color, WASHABLE_COLOUR_PRIORITY)
+ name = "dyed beanie"
+ desc = "The colors are a bit dodgy."
/obj/machinery/washing_machine/relaymove(mob/user)
@@ -231,7 +262,7 @@
to_chat(user, "\The [W] is stuck to your hand, you cannot put it in the washing machine!")
return 1
- if(istype(W, /obj/item/toy/crayon) || istype(W, /obj/item/stamp))
+ if(istype(W, /obj/item/toy/crayon) || istype(W, /obj/item/stamp) || istype(W, /obj/item/reagent_containers/food/snacks/grown/rainbow_flower))
color_source = W
update_icon()
diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm
index b153479d3ad..fdb965686a7 100644
--- a/code/game/objects/items/stacks/sheets/sheet_types.dm
+++ b/code/game/objects/items/stacks/sheets/sheet_types.dm
@@ -198,6 +198,7 @@ GLOBAL_LIST_INIT(wood_recipes, list ( \
new/datum/stack_recipe("ore box", /obj/structure/ore_box, 4, time = 50, one_per_turf = TRUE, on_floor = TRUE),\
new/datum/stack_recipe("wooden crate", /obj/structure/closet/crate/wooden, 6, time = 50, one_per_turf = TRUE, on_floor = TRUE),\
new/datum/stack_recipe("baseball bat", /obj/item/melee/baseball_bat, 5, time = 15),\
+ new/datum/stack_recipe("loom", /obj/structure/loom, 10, time = 15, one_per_turf = TRUE, on_floor = TRUE), \
))
/obj/item/stack/sheet/mineral/wood
@@ -225,8 +226,9 @@ GLOBAL_LIST_INIT(wood_recipes, list ( \
* Cloth
*/
GLOBAL_LIST_INIT(cloth_recipes, list ( \
- new/datum/stack_recipe("grey jumpsuit", /obj/item/clothing/under/color/grey, 3), \
- new/datum/stack_recipe("black shoes", /obj/item/clothing/shoes/sneakers/black, 2), \
+ new/datum/stack_recipe("white jumpsuit", /obj/item/clothing/under/color/white, 3), \
+ new/datum/stack_recipe("white shoes", /obj/item/clothing/shoes/sneakers/white, 2), \
+ new/datum/stack_recipe("white scarf", /obj/item/clothing/neck/scarf, 1), \
null, \
new/datum/stack_recipe("backpack", /obj/item/storage/backpack, 4), \
new/datum/stack_recipe("duffel bag", /obj/item/storage/backpack/duffelbag, 6), \
@@ -243,7 +245,9 @@ GLOBAL_LIST_INIT(cloth_recipes, list ( \
new/datum/stack_recipe("empty sandbag", /obj/item/emptysandbag, 4), \
null, \
new/datum/stack_recipe("fingerless gloves", /obj/item/clothing/gloves/fingerless, 1), \
- new/datum/stack_recipe("black gloves", /obj/item/clothing/gloves/color/black, 3), \
+ new/datum/stack_recipe("white gloves", /obj/item/clothing/gloves/color/white, 3), \
+ new/datum/stack_recipe("white softcap", /obj/item/clothing/head/soft/mime, 2), \
+ new/datum/stack_recipe("white beanie", /obj/item/clothing/head/beanie, 2), \
null, \
new/datum/stack_recipe("blindfold", /obj/item/clothing/glasses/sunglasses/blindfold, 2), \
))
@@ -259,6 +263,13 @@ GLOBAL_LIST_INIT(cloth_recipes, list ( \
throwforce = 0
merge_type = /obj/item/stack/sheet/cloth
+/obj/item/stack/sheet/cloth/durathread
+ name = "durathread"
+ desc = "A fabric sown from incredibly durable threads, known for its usefulness in armor production."
+ singular_name = "durathread roll"
+ icon_state = "sheet-durathread"
+ merge_type = /obj/item/stack/sheet/cloth
+
/obj/item/stack/sheet/cloth/Initialize(mapload, new_amount, merge = TRUE)
recipes = GLOB.cloth_recipes
return ..()
@@ -266,6 +277,32 @@ GLOBAL_LIST_INIT(cloth_recipes, list ( \
/obj/item/stack/sheet/cloth/ten
amount = 10
+/obj/item/stack/sheet/cloth/five
+ amount = 5
+
+/obj/item/stack/sheet/cotton
+ name = "raw cotton bundle"
+ desc = "A bundle of raw cotton ready to be spun on the loom."
+ singular_name = "raw cotton ball"
+ icon_state = "sheet-cotton"
+ is_fabric = TRUE
+ resistance_flags = FLAMMABLE
+ force = 0
+ throwforce = 0
+ merge_type = /obj/item/stack/sheet/cotton
+ pull_effort = 30
+ loom_result = /obj/item/stack/sheet/cloth
+
+/obj/item/stack/sheet/cotton/durathread
+ name = "raw durathread bundle"
+ desc = "A bundle of raw durathread ready to be spun on the loom."
+ singular_name = "raw durathread ball"
+ icon_state = "sheet-durathreadraw"
+ merge_type = /obj/item/stack/sheet/cotton/durathread
+ pull_effort = 70
+ loom_result = /obj/item/stack/sheet/cloth/durathread
+
+
/*
* Cardboard
*/
diff --git a/code/game/objects/items/stacks/sheets/sheets.dm b/code/game/objects/items/stacks/sheets/sheets.dm
index 21b43eba201..53388ef325e 100644
--- a/code/game/objects/items/stacks/sheets/sheets.dm
+++ b/code/game/objects/items/stacks/sheets/sheets.dm
@@ -12,4 +12,7 @@
novariants = FALSE
var/perunit = MINERAL_MATERIAL_AMOUNT
var/sheettype = null //this is used for girders in the creation of walls/false walls
- var/point_value = 0 //turn-in value for the gulag stacker - loosely relative to its rarity.
\ No newline at end of file
+ var/point_value = 0 //turn-in value for the gulag stacker - loosely relative to its rarity.
+ var/is_fabric = FALSE //is this a valid material for the loom?
+ var/loom_result //result from pulling on the loom
+ var/pull_effort = 0 //amount of delay when pulling on the loom
\ No newline at end of file
diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm
index 0408f284d22..1d5834408b5 100644
--- a/code/game/objects/items/storage/belt.dm
+++ b/code/game/objects/items/storage/belt.dm
@@ -553,6 +553,7 @@
desc = "A dorky fannypack for keeping small items in."
icon_state = "fannypack_leather"
item_state = "fannypack_leather"
+ item_color = "fannypackleather"
/obj/item/storage/belt/fannypack/ComponentInitialize()
. = ..()
@@ -564,51 +565,61 @@
name = "black fannypack"
icon_state = "fannypack_black"
item_state = "fannypack_black"
+ item_color = "black"
/obj/item/storage/belt/fannypack/red
name = "red fannypack"
icon_state = "fannypack_red"
item_state = "fannypack_red"
+ item_color = "red"
/obj/item/storage/belt/fannypack/purple
name = "purple fannypack"
icon_state = "fannypack_purple"
item_state = "fannypack_purple"
+ item_color = "purple"
/obj/item/storage/belt/fannypack/blue
name = "blue fannypack"
icon_state = "fannypack_blue"
item_state = "fannypack_blue"
+ item_color = "blue"
/obj/item/storage/belt/fannypack/orange
name = "orange fannypack"
icon_state = "fannypack_orange"
item_state = "fannypack_orange"
+ item_color = "orange"
/obj/item/storage/belt/fannypack/white
name = "white fannypack"
icon_state = "fannypack_white"
item_state = "fannypack_white"
+ item_color = "white"
/obj/item/storage/belt/fannypack/green
name = "green fannypack"
icon_state = "fannypack_green"
item_state = "fannypack_green"
+ item_color = "green"
/obj/item/storage/belt/fannypack/pink
name = "pink fannypack"
icon_state = "fannypack_pink"
item_state = "fannypack_pink"
+ item_color = "pink"
/obj/item/storage/belt/fannypack/cyan
name = "cyan fannypack"
icon_state = "fannypack_cyan"
item_state = "fannypack_cyan"
+ item_color = "cyan"
/obj/item/storage/belt/fannypack/yellow
name = "yellow fannypack"
icon_state = "fannypack_yellow"
item_state = "fannypack_yellow"
+ item_color = "yellow"
/obj/item/storage/belt/sabre
name = "sabre sheath"
diff --git a/code/game/objects/structures/loom.dm b/code/game/objects/structures/loom.dm
new file mode 100644
index 00000000000..879287f3836
--- /dev/null
+++ b/code/game/objects/structures/loom.dm
@@ -0,0 +1,19 @@
+/obj/structure/loom
+ name = "loom"
+ desc = "A simple device used to weave cloth and other thread-based fabrics together into usable material."
+ icon = 'icons/obj/hydroponics/equipment.dmi'
+ icon_state = "loom"
+ density = TRUE
+ anchored = TRUE
+
+/obj/structure/loom/attackby(obj/item/stack/sheet/W, mob/user)
+ if(W.is_fabric && W.amount > 1)
+ user.show_message("You start weaving the [W.name] through the loom..", 1)
+ if(W.use_tool(src, user, W.pull_effort))
+ new W.loom_result(drop_location())
+ user.show_message("You weave the [W.name] into a workable fabric.", 1)
+ W.amount = (W.amount - 2)
+ if(W.amount < 1)
+ qdel(W)
+ else
+ user.show_message("You need a valid fabric and at least 2 of said fabric before using this.", 1)
\ No newline at end of file
diff --git a/code/modules/cargo/packs.dm b/code/modules/cargo/packs.dm
index 7e8fa9826b7..9c75a4b9a25 100644
--- a/code/modules/cargo/packs.dm
+++ b/code/modules/cargo/packs.dm
@@ -1585,9 +1585,10 @@
/datum/supply_pack/organic/seeds
name = "Seeds Crate"
- desc = "Big things have small beginnings. Contains thirteen different seeds."
+ desc = "Big things have small beginnings. Contains fourteen different seeds."
cost = 1000
contains = list(/obj/item/seeds/chili,
+ /obj/item/seeds/cotton,
/obj/item/seeds/berry,
/obj/item/seeds/corn,
/obj/item/seeds/eggplant,
@@ -1605,7 +1606,7 @@
/datum/supply_pack/organic/exoticseeds
name = "Exotic Seeds Crate"
- desc = "Any entrepreneuring botanist's dream. Contains twelve different seeds, including three replica-pod seeds and two mystery seeds!"
+ desc = "Any entrepreneuring botanist's dream. Contains fourteen different seeds, including three replica-pod seeds and two mystery seeds!"
cost = 1500
contains = list(/obj/item/seeds/nettle,
/obj/item/seeds/replicapod,
@@ -1617,6 +1618,8 @@
/obj/item/seeds/reishi,
/obj/item/seeds/banana,
/obj/item/seeds/eggplant/eggy,
+ /obj/item/seeds/rainbow_bunch,
+ /obj/item/seeds/rainbow_bunch,
/obj/item/seeds/random,
/obj/item/seeds/random)
crate_name = "exotic seeds crate"
diff --git a/code/modules/clothing/head/hardhat.dm b/code/modules/clothing/head/hardhat.dm
index f7c52c909e5..d83e7fb10c3 100644
--- a/code/modules/clothing/head/hardhat.dm
+++ b/code/modules/clothing/head/hardhat.dm
@@ -81,4 +81,4 @@
heat_protection = HEAD
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
cold_protection = HEAD
- min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT
+ min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT
\ No newline at end of file
diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm
index 8dd939b696a..bce67e92a2f 100644
--- a/code/modules/clothing/head/helmet.dm
+++ b/code/modules/clothing/head/helmet.dm
@@ -243,6 +243,14 @@
item_state = "skull"
strip_delay = 100
+/obj/item/clothing/head/helmet/durathread
+ name = "makeshift helmet"
+ desc = "A hardhat with strips of leather and durathread for additional blunt protection."
+ icon_state = "durathread"
+ item_state = "durathread"
+ armor = list("melee" = 25, "bullet" = 10, "laser" = 20,"energy" = 10, "bomb" = 30, "bio" = 15, "rad" = 20, "fire" = 100, "acid" = 50)
+ strip_delay = 60
+
//LightToggle
/obj/item/clothing/head/helmet/update_icon()
diff --git a/code/modules/clothing/neck/_neck.dm b/code/modules/clothing/neck/_neck.dm
index e89c6e1b81d..7a1b939d5ce 100644
--- a/code/modules/clothing/neck/_neck.dm
+++ b/code/modules/clothing/neck/_neck.dm
@@ -92,51 +92,60 @@
name = "white scarf"
icon_state = "scarf"
desc = "A stylish scarf. The perfect winter accessory for those with a keen fashion sense, and those who just can't handle a cold breeze on their necks."
- item_color = "scarf"
+ item_color = "white"
dog_fashion = /datum/dog_fashion/head
/obj/item/clothing/neck/scarf/black
name = "black scarf"
+ item_color = "black"
icon_state = "scarf"
color = "#4A4A4B" //Grey but it looks black
/obj/item/clothing/neck/scarf/pink
name = "pink scarf"
+ item_color = "pink"
icon_state = "scarf"
color = "#F699CD" //Pink
/obj/item/clothing/neck/scarf/red
name = "red scarf"
+ item_color = "red"
icon_state = "scarf"
color = "#D91414" //Red
/obj/item/clothing/neck/scarf/green
name = "green scarf"
+ item_color = "green"
icon_state = "scarf"
color = "#5C9E54" //Green
/obj/item/clothing/neck/scarf/darkblue
name = "dark blue scarf"
+ item_color = "blue"
icon_state = "scarf"
color = "#1E85BC" //Blue
/obj/item/clothing/neck/scarf/purple
name = "purple scarf"
+ item_color = "purple"
icon_state = "scarf"
color = "#9557C5" //Purple
/obj/item/clothing/neck/scarf/yellow
name = "yellow scarf"
+ item_color = "yellow"
icon_state = "scarf"
color = "#E0C14F" //Yellow
/obj/item/clothing/neck/scarf/orange
name = "orange scarf"
+ item_color = "orange"
icon_state = "scarf"
color = "#C67A4B" //Orange
/obj/item/clothing/neck/scarf/cyan
name = "cyan scarf"
+ item_color = "cyan"
icon_state = "scarf"
color = "#54A3CE" //Cyan
diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm
index f73ca30fb09..4569533dc28 100644
--- a/code/modules/clothing/suits/armor.dm
+++ b/code/modules/clothing/suits/armor.dm
@@ -234,3 +234,14 @@
/obj/item/clothing/suit/armor/riot/knight/red
icon_state = "knight_red"
item_state = "knight_red"
+
+/obj/item/clothing/suit/armor/vest/durathread
+ name = "makeshift vest"
+ desc = "A vest made of durathread with strips of leather acting as trauma plates."
+ icon_state = "durathread"
+ item_state = "durathread"
+ strip_delay = 60
+ equip_delay_other = 40
+ max_integrity = 200
+ resistance_flags = FLAMMABLE
+ armor = list("melee" = 20, "bullet" = 10, "laser" = 30, "energy" = 5, "bomb" = 15, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 50)
diff --git a/code/modules/crafting/recipes.dm b/code/modules/crafting/recipes.dm
index 253621d60bf..0c299feb0cb 100644
--- a/code/modules/crafting/recipes.dm
+++ b/code/modules/crafting/recipes.dm
@@ -635,68 +635,6 @@
tools = list(TOOL_SCREWDRIVER, TOOL_WRENCH, TOOL_WELDER)
category = CAT_MISC
-/datum/crafting_recipe/hudsunsec
- name = "Security HUDsunglasses"
- result = /obj/item/clothing/glasses/hud/security/sunglasses
- time = 20
- tools = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER)
- reqs = list(/obj/item/clothing/glasses/hud/security = 1,
- /obj/item/clothing/glasses/sunglasses = 1,
- /obj/item/stack/cable_coil = 5)
- category = CAT_CLOTHING
-
-/datum/crafting_recipe/hudsunsecremoval
- name = "Security HUD removal"
- result = /obj/item/clothing/glasses/sunglasses
- time = 20
- tools = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER)
- reqs = list(/obj/item/clothing/glasses/hud/security/sunglasses = 1)
- category = CAT_CLOTHING
-
-/datum/crafting_recipe/hudsunmed
- name = "Medical HUDsunglasses"
- result = /obj/item/clothing/glasses/hud/health/sunglasses
- time = 20
- tools = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER)
- reqs = list(/obj/item/clothing/glasses/hud/health = 1,
- /obj/item/clothing/glasses/sunglasses = 1,
- /obj/item/stack/cable_coil = 5)
- category = CAT_CLOTHING
-
-/datum/crafting_recipe/hudsunmedremoval
- name = "Medical HUD removal"
- result = /obj/item/clothing/glasses/sunglasses
- time = 20
- tools = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER)
- reqs = list(/obj/item/clothing/glasses/hud/health/sunglasses = 1)
- category = CAT_CLOTHING
-
-/datum/crafting_recipe/beergoggles
- name = "Beer Goggles"
- result = /obj/item/clothing/glasses/sunglasses/reagent
- time = 20
- tools = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER)
- reqs = list(/obj/item/clothing/glasses/science = 1,
- /obj/item/clothing/glasses/sunglasses = 1,
- /obj/item/stack/cable_coil = 5)
- category = CAT_CLOTHING
-
-/datum/crafting_recipe/beergogglesremoval
- name = "Beer Goggles removal"
- result = /obj/item/clothing/glasses/sunglasses
- time = 20
- tools = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER)
- reqs = list(/obj/item/clothing/glasses/sunglasses/reagent = 1)
- category = CAT_CLOTHING
-
-/datum/crafting_recipe/ghostsheet
- name = "Ghost Sheet"
- result = /obj/item/clothing/suit/ghost_sheet
- time = 5
- tools = list(TOOL_WIRECUTTER)
- reqs = list(/obj/item/bedsheet = 1)
- category = CAT_CLOTHING
-
/datum/crafting_recipe/aitater
name = "intelliTater"
result = /obj/item/aicard/aitater
diff --git a/code/modules/crafting/tailoring.dm b/code/modules/crafting/tailoring.dm
new file mode 100644
index 00000000000..89e100889a6
--- /dev/null
+++ b/code/modules/crafting/tailoring.dm
@@ -0,0 +1,86 @@
+/datum/crafting_recipe/durathread_vest
+ name = "Makeshift Durathread Vest"
+ result = /obj/item/clothing/suit/armor/vest/durathread
+ reqs = list(/obj/item/stack/sheet/cloth/durathread = 5,
+ /obj/item/stack/sheet/leather = 4)
+ time = 50
+ category = CAT_CLOTHING
+
+/datum/crafting_recipe/durathread_helmet
+ name = "Makeshift Durathread Helmet"
+ result = /obj/item/clothing/head/helmet/durathread
+ reqs = list(/obj/item/stack/sheet/cloth/durathread = 4,
+ /obj/item/stack/sheet/leather = 3,
+ /obj/item/clothing/head/hardhat = 1)
+ time = 40
+ category = CAT_CLOTHING
+
+/datum/crafting_recipe/fannypack
+ name = "Fannypack"
+ result = /obj/item/storage/belt/fannypack
+ reqs = list(/obj/item/stack/sheet/cloth = 2,
+ /obj/item/stack/sheet/leather = 1)
+ time = 20
+ category = CAT_CLOTHING
+
+/datum/crafting_recipe/hudsunsec
+ name = "Security HUDsunglasses"
+ result = /obj/item/clothing/glasses/hud/security/sunglasses
+ time = 20
+ tools = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER)
+ reqs = list(/obj/item/clothing/glasses/hud/security = 1,
+ /obj/item/clothing/glasses/sunglasses = 1,
+ /obj/item/stack/cable_coil = 5)
+ category = CAT_CLOTHING
+
+/datum/crafting_recipe/hudsunsecremoval
+ name = "Security HUD removal"
+ result = /obj/item/clothing/glasses/sunglasses
+ time = 20
+ tools = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER)
+ reqs = list(/obj/item/clothing/glasses/hud/security/sunglasses = 1)
+ category = CAT_CLOTHING
+
+/datum/crafting_recipe/hudsunmed
+ name = "Medical HUDsunglasses"
+ result = /obj/item/clothing/glasses/hud/health/sunglasses
+ time = 20
+ tools = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER)
+ reqs = list(/obj/item/clothing/glasses/hud/health = 1,
+ /obj/item/clothing/glasses/sunglasses = 1,
+ /obj/item/stack/cable_coil = 5)
+ category = CAT_CLOTHING
+
+/datum/crafting_recipe/hudsunmedremoval
+ name = "Medical HUD removal"
+ result = /obj/item/clothing/glasses/sunglasses
+ time = 20
+ tools = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER)
+ reqs = list(/obj/item/clothing/glasses/hud/health/sunglasses = 1)
+ category = CAT_CLOTHING
+
+/datum/crafting_recipe/beergoggles
+ name = "Beer Goggles"
+ result = /obj/item/clothing/glasses/sunglasses/reagent
+ time = 20
+ tools = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER)
+ reqs = list(/obj/item/clothing/glasses/science = 1,
+ /obj/item/clothing/glasses/sunglasses = 1,
+ /obj/item/stack/cable_coil = 5)
+ category = CAT_CLOTHING
+
+/datum/crafting_recipe/beergogglesremoval
+ name = "Beer Goggles removal"
+ result = /obj/item/clothing/glasses/sunglasses
+ time = 20
+ tools = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER)
+ reqs = list(/obj/item/clothing/glasses/sunglasses/reagent = 1)
+ category = CAT_CLOTHING
+
+/datum/crafting_recipe/ghostsheet
+ name = "Ghost Sheet"
+ result = /obj/item/clothing/suit/ghost_sheet
+ time = 5
+ tools = list(TOOL_WIRECUTTER)
+ reqs = list(/obj/item/bedsheet = 1)
+ category = CAT_CLOTHING
\ No newline at end of file
diff --git a/code/modules/hydroponics/grown/cotton.dm b/code/modules/hydroponics/grown/cotton.dm
new file mode 100644
index 00000000000..3fa4247f578
--- /dev/null
+++ b/code/modules/hydroponics/grown/cotton.dm
@@ -0,0 +1,79 @@
+/obj/item/seeds/cotton
+ name = "pack of cotton seeds"
+ desc = "A pack of seeds that'll grow into a cotton plant. Assistants make good free labor if neccesary."
+ icon_state = "seed-cotton"
+ species = "cotton"
+ plantname = "Cotton"
+ icon_harvest = "cotton-harvest"
+ product = /obj/item/grown/cotton
+ lifespan = 35
+ endurance = 25
+ maturation = 15
+ production = 1
+ yield = 2
+ potency = 50
+ growthstages = 3
+ growing_icon = 'icons/obj/hydroponics/growing.dmi'
+ icon_dead = "cotton-dead"
+ mutatelist = list(/obj/item/seeds/cotton/durathread)
+
+/obj/item/grown/cotton
+ seed = /obj/item/seeds/cotton
+ name = "cotton bundle"
+ desc = "A fluffy bundle of cotton."
+ icon_state = "cotton"
+ force = 0
+ throwforce = 0
+ w_class = WEIGHT_CLASS_TINY
+ throw_speed = 2
+ throw_range = 3
+ attack_verb = list("pomfed")
+ var/cotton_type = /obj/item/stack/sheet/cotton
+ var/cotton_name = "raw cotton"
+
+/obj/item/grown/cotton/attack_self(mob/user)
+ user.show_message("You pull some [cotton_name] out of the [name]!", 1)
+ var/seed_modifier = 0
+ if(seed)
+ seed_modifier = round(seed.potency / 25)
+ var/obj/item/stack/cotton = new cotton_type(user.loc, 1 + seed_modifier)
+ var/old_cotton_amount = cotton.amount
+ for(var/obj/item/stack/ST in user.loc)
+ if(ST != cotton && istype(ST, cotton_type) && ST.amount < ST.max_amount)
+ ST.attackby(cotton, user)
+ if(cotton.amount > old_cotton_amount)
+ to_chat(user, "You add the newly-formed [cotton_name] to the stack. It now contains [cotton.amount] [cotton_name].")
+ qdel(src)
+
+//reinforced mutated variant
+/obj/item/seeds/cotton/durathread
+ name = "pack of durathread seeds"
+ desc = "A pack of seeds that'll grow into an extremely durable thread that could easily rival plasteel if woven properly."
+ icon_state = "seed-durathread"
+ species = "durathread"
+ plantname = "Durathread"
+ icon_harvest = "durathread-harvest"
+ product = /obj/item/grown/cotton/durathread
+ lifespan = 80
+ endurance = 50
+ maturation = 15
+ production = 1
+ yield = 2
+ potency = 50
+ growthstages = 3
+ growing_icon = 'icons/obj/hydroponics/growing.dmi'
+ icon_dead = "cotton-dead"
+
+/obj/item/grown/cotton/durathread
+ seed = /obj/item/seeds/cotton/durathread
+ name = "durathread bundle"
+ desc = "A tough bundle of durathread, good luck unraveling this."
+ icon_state = "durathread"
+ force = 5
+ throwforce = 5
+ w_class = WEIGHT_CLASS_NORMAL
+ throw_speed = 2
+ throw_range = 3
+ attack_verb = list("bashed", "battered", "bludgeoned", "whacked")
+ cotton_type = /obj/item/stack/sheet/cotton/durathread
+ cotton_name = "raw durathread"
\ No newline at end of file
diff --git a/code/modules/hydroponics/grown/rainbow_bunch.dm b/code/modules/hydroponics/grown/rainbow_bunch.dm
new file mode 100644
index 00000000000..c50de8d8c50
--- /dev/null
+++ b/code/modules/hydroponics/grown/rainbow_bunch.dm
@@ -0,0 +1,77 @@
+/obj/item/seeds/rainbow_bunch
+ name = "pack of rainbow bunch seeds"
+ desc = "A pack of seeds that'll grow into a beautiful bush of various colored flowers."
+ icon_state = "seed-rainbowbunch"
+ species = "rainbowbunch"
+ plantname = "Rainbow Flowers"
+ icon_harvest = "rainbowbunch-harvest"
+ product = /obj/item/reagent_containers/food/snacks/grown/rainbow_flower
+ lifespan = 25
+ endurance = 10
+ maturation = 6
+ production = 3
+ yield = 5
+ potency = 20
+ growthstages = 4
+ growing_icon = 'icons/obj/hydroponics/growing_flowers.dmi'
+ icon_dead = "rainbowbunch-dead"
+ genes = list(/datum/plant_gene/trait/repeated_harvest)
+ reagents_add = list("nutriment" = 0.05)
+
+/obj/item/reagent_containers/food/snacks/grown/rainbow_flower
+ seed = /obj/item/seeds/rainbow_bunch
+ name = "rainbow flower"
+ desc = "A beautiful flower capable of being used for most dyeing processes."
+ icon_state = "rainbow_flower"
+ slot_flags = ITEM_SLOT_HEAD
+ force = 0
+ throwforce = 0
+ w_class = WEIGHT_CLASS_TINY
+ throw_speed = 2
+ throw_range = 3
+ attack_verb = list("pompfed")
+
+/obj/item/reagent_containers/food/snacks/grown/rainbow_flower/Initialize()
+ . = ..()
+ var/flower_color = rand(1,8)
+ switch(flower_color)
+ if(1)
+ item_color = "red"
+ color = "#DA0000"
+ list_reagents = list("redcrayonpowder" = 3)
+ desc += " This one is in a bright red color."
+ if(2)
+ item_color = "orange"
+ color = "#FF9300"
+ list_reagents = list("orangecrayonpowder" = 3)
+ desc += " This one is in a citrus orange color."
+ if(3)
+ item_color = "yellow"
+ color = "#FFF200"
+ list_reagents = list("yellowcrayonpowder" = 3)
+ desc += " This one is in a bright yellow color."
+ if(4)
+ item_color = "green"
+ color = "#A8E61D"
+ list_reagents = list("greencrayonpowder" = 3)
+ desc += " This one is in a grassy green color."
+ if(5)
+ item_color = "blue"
+ color = "#00B7EF"
+ list_reagents = list("bluecrayonpowder" = 3)
+ desc += " This one is in a soothing blue color."
+ if(6)
+ item_color = "purple"
+ color = "#DA00FF"
+ list_reagents = list("purplecrayonpowder" = 3)
+ desc += " This one is in a vibrant purple color."
+ if(7)
+ item_color = "black"
+ color = "#1C1C1C"
+ list_reagents = list("blackcrayonpowder" = 3)
+ desc += " This one is in a midnight black color."
+ if(8)
+ item_color = "white"
+ color = "#FFFFFF"
+ list_reagents = list("whitecrayonpowder" = 3)
+ desc += " This one is in a pure white color."
diff --git a/code/modules/vending/megaseed.dm b/code/modules/vending/megaseed.dm
index b3feaf619d4..f6763d6b846 100644
--- a/code/modules/vending/megaseed.dm
+++ b/code/modules/vending/megaseed.dm
@@ -6,6 +6,7 @@
icon_state = "seeds"
products = list(/obj/item/seeds/ambrosia = 3,
/obj/item/seeds/apple = 3,
+ /obj/item/seeds/cotton = 3,
/obj/item/seeds/banana = 3,
/obj/item/seeds/berry = 3,
/obj/item/seeds/cabbage = 3,
@@ -52,4 +53,4 @@
resistance_flags = FIRE_PROOF
default_price = 25
extra_price = 50
- payment_department = ACCOUNT_SRV
\ No newline at end of file
+ payment_department = ACCOUNT_SRV
diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi
index 5f01bb5749e..7a01cbcdc34 100644
Binary files a/icons/mob/head.dmi and b/icons/mob/head.dmi differ
diff --git a/icons/mob/mask.dmi b/icons/mob/mask.dmi
index 46b229388d5..d51b938c6e1 100644
Binary files a/icons/mob/mask.dmi and b/icons/mob/mask.dmi differ
diff --git a/icons/mob/suit.dmi b/icons/mob/suit.dmi
index fa10f9538ab..69b80e8a9c6 100644
Binary files a/icons/mob/suit.dmi and b/icons/mob/suit.dmi differ
diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi
index 10e45387e5f..abd533b0a97 100644
Binary files a/icons/obj/clothing/hats.dmi and b/icons/obj/clothing/hats.dmi differ
diff --git a/icons/obj/clothing/suits.dmi b/icons/obj/clothing/suits.dmi
index f01f7cac77b..a5c645130de 100644
Binary files a/icons/obj/clothing/suits.dmi and b/icons/obj/clothing/suits.dmi differ
diff --git a/icons/obj/hydroponics/equipment.dmi b/icons/obj/hydroponics/equipment.dmi
index 82dce552a78..dd4d1e1f93c 100644
Binary files a/icons/obj/hydroponics/equipment.dmi and b/icons/obj/hydroponics/equipment.dmi differ
diff --git a/icons/obj/hydroponics/growing.dmi b/icons/obj/hydroponics/growing.dmi
index 162c6b047e6..e7dee2290d7 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 2752ad8dc50..f8710f11310 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/harvest.dmi b/icons/obj/hydroponics/harvest.dmi
index 054aa47bbd0..40a52a9c456 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 4c898aecd36..2d34b2b7ed1 100644
Binary files a/icons/obj/hydroponics/seeds.dmi and b/icons/obj/hydroponics/seeds.dmi differ
diff --git a/icons/obj/stack_objects.dmi b/icons/obj/stack_objects.dmi
index 6d2b2b64cde..ac2d42378a8 100644
Binary files a/icons/obj/stack_objects.dmi and b/icons/obj/stack_objects.dmi differ
diff --git a/tgstation.dme b/tgstation.dme
index b20f1529c63..5a56c21e3cf 100755
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -972,6 +972,7 @@
#include "code\game\objects\structures\ladders.dm"
#include "code\game\objects\structures\lattice.dm"
#include "code\game\objects\structures\life_candle.dm"
+#include "code\game\objects\structures\loom.dm"
#include "code\game\objects\structures\manned_turret.dm"
#include "code\game\objects\structures\memorial.dm"
#include "code\game\objects\structures\mineral_doors.dm"
@@ -1518,6 +1519,7 @@
#include "code\modules\crafting\craft.dm"
#include "code\modules\crafting\guncrafting.dm"
#include "code\modules\crafting\recipes.dm"
+#include "code\modules\crafting\tailoring.dm"
#include "code\modules\detectivework\detective_work.dm"
#include "code\modules\detectivework\evidence.dm"
#include "code\modules\detectivework\footprints_and_rag.dm"
@@ -1684,6 +1686,7 @@
#include "code\modules\hydroponics\grown\citrus.dm"
#include "code\modules\hydroponics\grown\cocoa_vanilla.dm"
#include "code\modules\hydroponics\grown\corn.dm"
+#include "code\modules\hydroponics\grown\cotton.dm"
#include "code\modules\hydroponics\grown\eggplant.dm"
#include "code\modules\hydroponics\grown\flowers.dm"
#include "code\modules\hydroponics\grown\grass_carpet.dm"
@@ -1696,6 +1699,7 @@
#include "code\modules\hydroponics\grown\pineapple.dm"
#include "code\modules\hydroponics\grown\potato.dm"
#include "code\modules\hydroponics\grown\pumpkin.dm"
+#include "code\modules\hydroponics\grown\rainbow_bunch.dm"
#include "code\modules\hydroponics\grown\random.dm"
#include "code\modules\hydroponics\grown\replicapod.dm"
#include "code\modules\hydroponics\grown\root.dm"