diff --git a/GainStation13/code/game/machinery/deployable.dm b/GainStation13/code/game/machinery/deployable.dm
new file mode 100644
index 0000000000..92128e29ab
--- /dev/null
+++ b/GainStation13/code/game/machinery/deployable.dm
@@ -0,0 +1,92 @@
+#define SINGLE "single"
+#define VERTICAL "vertical"
+#define HORIZONTAL "horizontal"
+
+#define METAL 1
+#define WOOD 2
+#define SAND 3
+
+/obj/structure/barricade/shadoww //GS13 wood barricades
+ name = "Shadow barricade"
+ desc = "This space is blocked off by a shadow wood barricade."
+ icon = 'GainStation13/icons/obj/structures.dmi'
+ icon_state = "shadowwbarricade"
+ max_integrity = 50
+ bar_material = WOOD
+ var/drop_amount = 3
+
+/obj/structure/barricade/shadoww/attackby(obj/item/I, mob/user)
+ if(istype(I,/obj/item/stack/sheet/mineral/shadoww))
+ var/obj/item/stack/sheet/mineral/shadoww/W = I
+ if(W.amount < 5)
+ to_chat(user, "You need at least five shadown planks to make a wall!")
+ return
+ else
+ to_chat(user, "You start adding [I] to [src]...")
+ if(do_after(user, 50, target=src))
+ W.use(5)
+ new /turf/closed/wall/mineral/shadoww/nonmetal(get_turf(src))
+ qdel(src)
+ return
+ return ..()
+
+/obj/structure/barricade/shadoww/make_debris()
+ new /obj/item/stack/sheet/mineral/shadoww(get_turf(src), drop_amount)
+
+
+/obj/structure/barricade/plaswood
+ name = "Plaswood barricade"
+ desc = "This space is blocked off by a plaswood barricade."
+ icon = 'GainStation13/icons/obj/structures.dmi'
+ icon_state = "plaswoodwbarricade"
+ max_integrity = 180
+ bar_material = WOOD
+ var/drop_amount = 3
+
+/obj/structure/barricade/plaswood/attackby(obj/item/I, mob/user)
+ if(istype(I,/obj/item/stack/sheet/mineral/plaswood))
+ var/obj/item/stack/sheet/mineral/plaswood/W = I
+ if(W.amount < 5)
+ to_chat(user, "You need at least five plaswood planks to make a wall!")
+ return
+ else
+ to_chat(user, "You start adding [I] to [src]...")
+ if(do_after(user, 50, target=src))
+ W.use(5)
+ new /turf/closed/wall/mineral/plaswood/nonmetal(get_turf(src))
+ qdel(src)
+ return
+ return ..()
+
+/obj/structure/barricade/plaswood/make_debris()
+ new /obj/item/stack/sheet/mineral/plaswood(get_turf(src), drop_amount)
+
+
+/obj/structure/barricade/gmushroom
+ name = "Mushroom barricade"
+ desc = "This space is blocked off by a mushroom barricade."
+ icon = 'GainStation13/icons/obj/structures.dmi'
+ icon_state = "gmushroombarricade"
+ max_integrity = 50
+ bar_material = WOOD
+ var/drop_amount = 3
+
+/obj/structure/barricade/gmushroom/attackby(obj/item/I, mob/user)
+ if(istype(I,/obj/item/stack/sheet/mineral/gmushroom))
+ var/obj/item/stack/sheet/mineral/gmushroom/W = I
+ if(W.amount < 5)
+ to_chat(user, "You need at least five mushroom planks to make a wall!")
+ return
+ else
+ to_chat(user, "You start adding [I] to [src]...")
+ if(do_after(user, 50, target=src))
+ W.use(5)
+ new /turf/closed/wall/mineral/gmushroom/nonmetal(get_turf(src))
+ qdel(src)
+ return
+ return ..()
+
+/obj/structure/barricade/gmushroom/make_debris()
+ new /obj/item/stack/sheet/mineral/gmushroom(get_turf(src), drop_amount)
+
+//GS13 wood barricades
diff --git a/GainStation13/code/game/objects/items/stacks/sheets/sheet_types.dm b/GainStation13/code/game/objects/items/stacks/sheets/sheet_types.dm
new file mode 100644
index 0000000000..f10387370c
--- /dev/null
+++ b/GainStation13/code/game/objects/items/stacks/sheets/sheet_types.dm
@@ -0,0 +1,146 @@
+//GS13: Shadow Wood
+
+GLOBAL_LIST_INIT(shadoww_recipes, list ( \
+ new/datum/stack_recipe("Shadow wood floor tile", /obj/item/stack/tile/shadoww, 1, 4, 20), \
+ new/datum/stack_recipe("Shadow wood table frame", /obj/structure/table_frame/shadoww, 2, time = 10), \
+ new/datum/stack_recipe("Shadow wood barricade", /obj/structure/barricade/shadoww, 5, time = 50, one_per_turf = TRUE, on_floor = TRUE), \
+ null, \
+ new/datum/stack_recipe("Shadow wood chair", /obj/structure/chair/shadoww, 3, time = 10, one_per_turf = TRUE, on_floor = TRUE), \
+ null, \
+ new/datum/stack_recipe("Shadow wood barricade", /obj/structure/barricade/shadoww, 5, time = 50, one_per_turf = TRUE, on_floor = TRUE), \
+ null, \
+ new/datum/stack_recipe("Dog bed", /obj/structure/bed/shadowwdogbed, 10, time = 10, one_per_turf = TRUE, on_floor = TRUE), \
+ new/datum/stack_recipe("Dresser", /obj/structure/shadowwdresser, 10, time = 15, one_per_turf = TRUE, on_floor = TRUE), \
+ new/datum/stack_recipe("shadow wood crate", /obj/structure/closet/crate/shadoww, 6, time = 50, one_per_turf = TRUE, on_floor = TRUE),\
+))
+
+
+/obj/item/stack/sheet/mineral/shadoww
+ name = "shadow wood"
+ desc = "An purplish wood, it's nothing special besides its color."
+ singular_name = "shadow wood plank"
+ icon_state = "sheet-shadoww"
+ item_state = "sheet-shadoww"
+ icon = 'GainStation13/icons/obj/stack_objects.dmi'
+ custom_materials = list(/datum/material/wood=MINERAL_MATERIAL_AMOUNT)
+ sheettype = "shadoww"
+ armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 0)
+ resistance_flags = FLAMMABLE
+ merge_type = /obj/item/stack/sheet/mineral/shadoww
+ novariants = TRUE
+ grind_results = list(/datum/reagent/carbon = 20)
+ walltype = /turf/closed/wall/mineral/shadoww
+
+/obj/item/stack/sheet/mineral/shadoww/get_main_recipes()
+ . = ..()
+ . += GLOB.shadoww_recipes
+
+/obj/item/stack/sheet/mineral/shadoww/fifty
+ amount = 50
+
+/obj/item/stack/sheet/mineral/shadoww/twenty
+ amount = 20
+
+/obj/item/stack/sheet/mineral/shadoww/ten
+ amount = 10
+
+/obj/item/stack/sheet/mineral/shadoww/five
+ amount = 5
+
+//GS13: Giant mushroom
+
+GLOBAL_LIST_INIT(gmushroom_recipes, list ( \
+ new/datum/stack_recipe("Mushroom floor tile", /obj/item/stack/tile/gmushroom, 1, 4, 20), \
+ new/datum/stack_recipe("Mushroom table frame", /obj/structure/table_frame/gmushroom, 2, time = 10), \
+ new/datum/stack_recipe("Mushroom barricade", /obj/structure/barricade/gmushroom, 5, time = 50, one_per_turf = TRUE, on_floor = TRUE), \
+ null, \
+ new/datum/stack_recipe("Mushroom chair", /obj/structure/chair/gmushroom, 3, time = 10, one_per_turf = TRUE, on_floor = TRUE), \
+ null, \
+ new/datum/stack_recipe("Mushroom barricade", /obj/structure/barricade/gmushroom, 5, time = 50, one_per_turf = TRUE, on_floor = TRUE), \
+ null, \
+ new/datum/stack_recipe("Dog bed", /obj/structure/bed/gmushroomdogbed, 10, time = 10, one_per_turf = TRUE, on_floor = TRUE), \
+ new/datum/stack_recipe("Dresser", /obj/structure/gmushroomdresser, 10, time = 15, one_per_turf = TRUE, on_floor = TRUE), \
+ new/datum/stack_recipe("Mushroom crate", /obj/structure/closet/crate/gmushroom, 6, time = 50, one_per_turf = TRUE, on_floor = TRUE),\
+ null, \
+))
+
+/obj/item/stack/sheet/mineral/gmushroom
+ name = "mushroom 'wood'"
+ desc = "A material similar to wood, except for being fireproof."
+ singular_name = "mushroom plank"
+ icon_state = "sheet-gmushroom"
+ item_state = "sheet-gmushroom"
+ icon = 'GainStation13/icons/obj/stack_objects.dmi'
+ sheettype = "gmushroom"
+ armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 0)
+ resistance_flags = FIRE_PROOF
+ merge_type = /obj/item/stack/sheet/mineral/gmushroom
+ novariants = TRUE
+ grind_results = list(/datum/reagent/carbon = 20)
+ walltype = /turf/closed/wall/mineral/gmushroom
+
+/obj/item/stack/sheet/mineral/gmushroom/get_main_recipes()
+ . = ..()
+ . += GLOB.gmushroom_recipes
+
+/obj/item/stack/sheet/mineral/gmushroom/fifty
+ amount = 50
+
+/obj/item/stack/sheet/mineral/gmushroom/twenty
+ amount = 20
+
+/obj/item/stack/sheet/mineral/gmushroom/ten
+ amount = 10
+
+/obj/item/stack/sheet/mineral/gmushroom/five
+ amount = 5
+
+//GS13: Plaswood
+
+GLOBAL_LIST_INIT(plaswood_recipes, list ( \
+ new/datum/stack_recipe("Plaswood floor tile", /obj/item/stack/tile/plaswood, 1, 4, 20), \
+ new/datum/stack_recipe("Plaswood table frame", /obj/structure/table_frame/plaswood, 2, time = 10), \
+ null, \
+ new/datum/stack_recipe("Plaswood chair", /obj/structure/chair/plaswood, 3, time = 10, one_per_turf = TRUE, on_floor = TRUE), \
+ null, \
+ new/datum/stack_recipe("Plaswood barricade", /obj/structure/barricade/plaswood, 5, time = 50, one_per_turf = TRUE, on_floor = TRUE), \
+ null, \
+ new/datum/stack_recipe("Dog bed", /obj/structure/bed/plaswooddogbed, 10, time = 10, one_per_turf = TRUE, on_floor = TRUE), \
+ new/datum/stack_recipe("Dresser", /obj/structure/plaswooddresser, 10, time = 15, one_per_turf = TRUE, on_floor = TRUE), \
+ new/datum/stack_recipe("Plaswood crate", /obj/structure/closet/crate/plaswood, 6, time = 50, one_per_turf = TRUE, on_floor = TRUE),\
+ null, \
+))
+
+
+/obj/item/stack/sheet/mineral/plaswood
+ name = "plaswood"
+ desc = "A type of resistant wood acquired from Plasma Trees. It amost looks like metal!"
+ singular_name = "plaswood plank"
+ icon_state = "sheet-plaswood"
+ item_state = "sheet-plaswood"
+ icon = 'GainStation13/icons/obj/stack_objects.dmi'
+ sheettype = "plaswood"
+ armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 80)
+ resistance_flags = FLAMMABLE | ACID_PROOF
+ throwforce = 10
+ merge_type = /obj/item/stack/sheet/mineral/plaswood
+ novariants = TRUE
+ grind_results = list(/datum/reagent/carbon = 20, /datum/reagent/toxin/plasma = 20)
+ point_value = 23
+ walltype = /turf/closed/wall/mineral/plaswood
+
+/obj/item/stack/sheet/mineral/plaswood/get_main_recipes()
+ . = ..()
+ . += GLOB.plaswood_recipes
+
+/obj/item/stack/sheet/mineral/plaswood/fifty
+ amount = 50
+
+/obj/item/stack/sheet/mineral/plaswood/twenty
+ amount = 20
+
+/obj/item/stack/sheet/mineral/plaswood/ten
+ amount = 10
+
+/obj/item/stack/sheet/mineral/plaswood/five
+ amount = 5
diff --git a/GainStation13/code/game/objects/items/stacks/tiles/tile_types.dm b/GainStation13/code/game/objects/items/stacks/tiles/tile_types.dm
new file mode 100644
index 0000000000..3eb2f5ca7e
--- /dev/null
+++ b/GainStation13/code/game/objects/items/stacks/tiles/tile_types.dm
@@ -0,0 +1,29 @@
+//Mushroom
+/obj/item/stack/tile/gmushroom
+ name = "mushroom floor tile"
+ singular_name = "mushroom floor tile"
+ desc = "An easy to fit mushroom floor tile."
+ icon = 'GainStation13/icons/obj/tiles.dmi'
+ icon_state = "tile-gmushroom"
+ turf_type = /turf/open/floor/gmushroom
+ resistance_flags = FIRE_PROOF
+
+//Shadow Wood
+/obj/item/stack/tile/shadoww
+ name = "shadow wood floor tile"
+ singular_name = "shadow wood floor tile"
+ desc = "An easy to fit wood floor tile."
+ icon = 'GainStation13/icons/obj/tiles.dmi'
+ icon_state = "tile-shadoww"
+ turf_type = /turf/open/floor/shadoww
+ resistance_flags = FLAMMABLE
+
+//Plaswood
+/obj/item/stack/tile/plaswood
+ name = "plaswood floor tile"
+ singular_name = "plaswood floor tile"
+ desc = "An easy to fit wood floor tile."
+ icon = 'GainStation13/icons/obj/tiles.dmi'
+ icon_state = "tile-plaswood"
+ turf_type = /turf/open/floor/plaswood
+ resistance_flags = FLAMMABLE | ACID_PROOF
diff --git a/GainStation13/code/game/objects/structures/beds_chairs/bed.dm b/GainStation13/code/game/objects/structures/beds_chairs/bed.dm
new file mode 100644
index 0000000000..df88709e8f
--- /dev/null
+++ b/GainStation13/code/game/objects/structures/beds_chairs/bed.dm
@@ -0,0 +1,30 @@
+//GS13: pet beds
+/obj/structure/bed/shadowwdogbed
+ name = "dog bed"
+ icon = 'GainStation13/icons/obj/objects.dmi'
+ icon_state = "shadowwdogbed"
+ desc = "A comfy-looking dog bed. You can even strap your pet in, in case the gravity turns off."
+ anchored = FALSE
+ buildstacktype = /obj/item/stack/sheet/mineral/shadoww
+ buildstackamount = 10
+ var/mob/living/owner = null
+
+/obj/structure/bed/plaswooddogbed
+ name = "dog bed"
+ icon = 'GainStation13/icons/obj/objects.dmi'
+ icon_state = "plaswooddogbed"
+ desc = "A comfy-looking dog bed. You can even strap your pet in, in case the gravity turns off."
+ anchored = FALSE
+ buildstacktype = /obj/item/stack/sheet/mineral/plaswood
+ buildstackamount = 10
+ var/mob/living/owner = null
+
+/obj/structure/bed/gmushroomdogbed
+ name = "dog bed"
+ icon = 'GainStation13/icons/obj/objects.dmi'
+ icon_state = "gmushroomdogbed"
+ desc = "A comfy-looking dog bed. You can even strap your pet in, in case the gravity turns off."
+ anchored = FALSE
+ buildstacktype = /obj/item/stack/sheet/mineral/gmushroom
+ buildstackamount = 10
+ var/mob/living/owner = null
diff --git a/GainStation13/code/game/objects/structures/beds_chairs/chair.dm b/GainStation13/code/game/objects/structures/beds_chairs/chair.dm
new file mode 100644
index 0000000000..71ff15b9ea
--- /dev/null
+++ b/GainStation13/code/game/objects/structures/beds_chairs/chair.dm
@@ -0,0 +1,69 @@
+//Shadow
+/obj/structure/chair/shadoww
+ name = "shadow wood chair"
+ desc = "Fashionable dark."
+ icon = 'GainStation13/icons/obj/chairs.dmi'
+ icon_state = "shadoww_chair"
+ resistance_flags = FLAMMABLE
+ max_integrity = 70
+ buildstacktype = /obj/item/stack/sheet/mineral/shadoww
+ buildstackamount = 3
+ item_chair = /obj/item/chair/shadoww
+
+//Plaswood
+/obj/structure/chair/plaswood
+ name = "plaswood chair"
+ desc = "Hard but confortable to sit."
+ icon = 'GainStation13/icons/obj/chairs.dmi'
+ icon_state = "plaswood_chair"
+ resistance_flags = FLAMMABLE | ACID_PROOF
+ max_integrity = 90
+ buildstacktype = /obj/item/stack/sheet/mineral/plaswood
+ buildstackamount = 3
+ item_chair = /obj/item/chair/plaswood
+
+//Mushroom
+/obj/structure/chair/gmushroom
+ name = "mushroom chair"
+ desc = "You don't need to worry about losing your seat in case of fire!"
+ icon = 'GainStation13/icons/obj/chairs.dmi'
+ icon_state = "gmushroom_chair"
+ resistance_flags = FIRE_PROOF
+ max_integrity = 70
+ buildstacktype = /obj/item/stack/sheet/mineral/gmushroom
+ buildstackamount = 3
+ item_chair = /obj/item/chair/gmushroom
+
+//Toppled chairs
+/obj/item/chair/shadoww
+ name = "shadow wood chair"
+ icon = 'GainStation13/icons/obj/chairs.dmi'
+ icon_state = "shadoww_chair_toppled"
+ item_state = "shadowwchair"
+ resistance_flags = FLAMMABLE
+ max_integrity = 70
+ hitsound = 'sound/weapons/genhit1.ogg'
+ origin_type = /obj/structure/chair/shadoww
+ break_chance = 50
+
+/obj/item/chair/plaswood
+ name = "plaswood chair"
+ icon = 'GainStation13/icons/obj/chairs.dmi'
+ icon_state = "plaswood_chair_toppled"
+ item_state = "plaswoodchair"
+ resistance_flags = FLAMMABLE | ACID_PROOF
+ max_integrity = 90
+ hitsound = 'sound/weapons/genhit1.ogg'
+ origin_type = /obj/structure/chair/plaswood
+ break_chance = 70
+
+/obj/item/chair/gmushroom
+ name = "mushroom chair"
+ icon = 'GainStation13/icons/obj/chairs.dmi'
+ icon_state = "gmushroom_chair_toppled"
+ item_state = "gmushroomchair"
+ resistance_flags = FIRE_PROOF
+ max_integrity = 70
+ hitsound = 'sound/weapons/genhit1.ogg'
+ origin_type = /obj/structure/chair/gmushroom
+ break_chance = 50
diff --git a/GainStation13/code/game/objects/structures/crates_lockers/crates/wooden.dm b/GainStation13/code/game/objects/structures/crates_lockers/crates/wooden.dm
new file mode 100644
index 0000000000..f0930acf53
--- /dev/null
+++ b/GainStation13/code/game/objects/structures/crates_lockers/crates/wooden.dm
@@ -0,0 +1,24 @@
+//Wood crates
+/obj/structure/closet/crate/shadoww
+ name = "shadown wood crate"
+ desc = "Works just as well as a metal one."
+ material_drop = /obj/item/stack/sheet/mineral/shadoww
+ material_drop_amount = 6
+ icon = 'GainStation13/icons/obj/crates.dmi'
+ icon_state = "shadoww"
+
+/obj/structure/closet/crate/plaswood
+ name = "plaswood crate"
+ desc = "Works just as well as a metal one."
+ material_drop = /obj/item/stack/sheet/mineral/plaswood
+ material_drop_amount = 6
+ icon = 'GainStation13/icons/obj/crates.dmi'
+ icon_state = "plaswood"
+
+/obj/structure/closet/crate/gmushroom
+ name = "mushroom crate"
+ desc = "Works just as well as a metal one."
+ material_drop = /obj/item/stack/sheet/mineral/gmushroom
+ material_drop_amount = 6
+ icon = 'GainStation13/icons/obj/crates.dmi'
+ icon_state = "gmushroom"
diff --git a/GainStation13/code/game/objects/structures/dresser.dm b/GainStation13/code/game/objects/structures/dresser.dm
new file mode 100644
index 0000000000..3f3203936e
--- /dev/null
+++ b/GainStation13/code/game/objects/structures/dresser.dm
@@ -0,0 +1,249 @@
+//GS13 Shadow/Mushroom/Plasma dressers
+/obj/structure/gmushroomdresser
+ name = "dresser"
+ desc = "A nicely-crafted mushroom dresser. It's filled with lots of undies."
+ icon = 'GainStation13/icons/obj/stationobjs.dmi'
+ icon_state = "gmushroomdresser"
+ density = TRUE
+ anchored = TRUE
+
+/obj/structure/gmushroomdresser/attackby(obj/item/I, mob/user, params)
+ if(I.tool_behaviour == TOOL_WRENCH)
+ to_chat(user, "You begin to [anchored ? "unwrench" : "wrench"] [src].")
+ if(I.use_tool(src, user, 20, volume=50))
+ to_chat(user, "You successfully [anchored ? "unwrench" : "wrench"] [src].")
+ setAnchored(!anchored)
+ else
+ return ..()
+
+/obj/structure/gmushroomdresser/deconstruct(disassembled = TRUE)
+ new /obj/item/stack/sheet/mineral/wood(drop_location(), 10)
+ qdel(src)
+
+/obj/structure/gmushroomdresser/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags)
+ . = ..()
+ if(. || !ishuman(user) || !user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
+ return
+ var/mob/living/carbon/human/H = user
+
+ if(H.dna && H.dna.species && (NO_UNDERWEAR in H.dna.species.species_traits))
+ to_chat(H, "You are not capable of wearing underwear.")
+ return
+
+ var/list/undergarment_choices = list("Underwear", "Underwear Color", "Undershirt", "Undershirt Color", "Socks", "Socks Color")
+ if(!(GLOB.underwear_list[H.underwear]?.has_color))
+ undergarment_choices -= "Underwear Color"
+ if(!(GLOB.undershirt_list[H.undershirt]?.has_color))
+ undergarment_choices -= "Undershirt Color"
+ if(!(GLOB.socks_list[H.socks]?.has_color))
+ undergarment_choices -= "Socks Color"
+
+ var/choice = input(H, "Underwear, Undershirt, or Socks?", "Changing") as null|anything in undergarment_choices
+ if(!H.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
+ return
+ var/dye_undie = FALSE
+ var/dye_shirt = FALSE
+ var/dye_socks = FALSE
+ switch(choice)
+ if("Underwear")
+ var/new_undies = input(H, "Select your underwear", "Changing") as null|anything in GLOB.underwear_list
+ if(new_undies)
+ H.underwear = new_undies
+ H.saved_underwear = new_undies
+ var/datum/sprite_accessory/underwear/bottom/B = GLOB.underwear_list[new_undies]
+ dye_undie = B?.has_color
+ if("Undershirt")
+ var/new_undershirt = input(H, "Select your undershirt", "Changing") as null|anything in GLOB.undershirt_list
+ if(new_undershirt)
+ H.undershirt = new_undershirt
+ H.saved_undershirt = new_undershirt
+ var/datum/sprite_accessory/underwear/top/T = GLOB.undershirt_list[new_undershirt]
+ dye_shirt = T?.has_color
+ if("Socks")
+ var/new_socks = input(H, "Select your socks", "Changing") as null|anything in GLOB.socks_list
+ if(new_socks)
+ H.socks = new_socks
+ H.saved_socks = new_socks
+ var/datum/sprite_accessory/underwear/socks/S = GLOB.socks_list[new_socks]
+ dye_socks = S?.has_color
+ if(dye_undie || choice == "Underwear Color")
+ H.undie_color = recolor_undergarment(H, "underwear", H.undie_color)
+ if(dye_shirt || choice == "Undershirt Color")
+ H.shirt_color = recolor_undergarment(H, "undershirt", H.shirt_color)
+ if(dye_socks || choice == "Socks Color")
+ H.socks_color = recolor_undergarment(H, "socks", H.socks_color)
+
+ add_fingerprint(H)
+ H.update_body(TRUE)
+
+/obj/structure/gmushroomdresser/proc/recolor_undergarment(mob/living/carbon/human/H, garment_type = "underwear", default_color)
+ var/n_color = input(H, "Choose your [garment_type]'\s color.", "Character Preference", default_color) as color|null
+ if(!n_color || !H.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
+ return default_color
+ return sanitize_hexcolor(n_color, 3, FALSE, default_color)
+
+/obj/structure/plaswooddresser
+ name = "dresser"
+ desc = "A nicely-crafted plaswood dresser. It's filled with lots of undies."
+ icon = 'GainStation13/icons/obj/stationobjs.dmi'
+ icon_state = "plaswooddresser"
+ density = TRUE
+ anchored = TRUE
+
+/obj/structure/plaswooddresser/attackby(obj/item/I, mob/user, params)
+ if(I.tool_behaviour == TOOL_WRENCH)
+ to_chat(user, "You begin to [anchored ? "unwrench" : "wrench"] [src].")
+ if(I.use_tool(src, user, 20, volume=50))
+ to_chat(user, "You successfully [anchored ? "unwrench" : "wrench"] [src].")
+ setAnchored(!anchored)
+ else
+ return ..()
+
+/obj/structure/plaswooddresser/deconstruct(disassembled = TRUE)
+ new /obj/item/stack/sheet/mineral/wood(drop_location(), 10)
+ qdel(src)
+
+/obj/structure/plaswooddresser/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags)
+ . = ..()
+ if(. || !ishuman(user) || !user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
+ return
+ var/mob/living/carbon/human/H = user
+
+ if(H.dna && H.dna.species && (NO_UNDERWEAR in H.dna.species.species_traits))
+ to_chat(H, "You are not capable of wearing underwear.")
+ return
+
+ var/list/undergarment_choices = list("Underwear", "Underwear Color", "Undershirt", "Undershirt Color", "Socks", "Socks Color")
+ if(!(GLOB.underwear_list[H.underwear]?.has_color))
+ undergarment_choices -= "Underwear Color"
+ if(!(GLOB.undershirt_list[H.undershirt]?.has_color))
+ undergarment_choices -= "Undershirt Color"
+ if(!(GLOB.socks_list[H.socks]?.has_color))
+ undergarment_choices -= "Socks Color"
+
+ var/choice = input(H, "Underwear, Undershirt, or Socks?", "Changing") as null|anything in undergarment_choices
+ if(!H.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
+ return
+ var/dye_undie = FALSE
+ var/dye_shirt = FALSE
+ var/dye_socks = FALSE
+ switch(choice)
+ if("Underwear")
+ var/new_undies = input(H, "Select your underwear", "Changing") as null|anything in GLOB.underwear_list
+ if(new_undies)
+ H.underwear = new_undies
+ H.saved_underwear = new_undies
+ var/datum/sprite_accessory/underwear/bottom/B = GLOB.underwear_list[new_undies]
+ dye_undie = B?.has_color
+ if("Undershirt")
+ var/new_undershirt = input(H, "Select your undershirt", "Changing") as null|anything in GLOB.undershirt_list
+ if(new_undershirt)
+ H.undershirt = new_undershirt
+ H.saved_undershirt = new_undershirt
+ var/datum/sprite_accessory/underwear/top/T = GLOB.undershirt_list[new_undershirt]
+ dye_shirt = T?.has_color
+ if("Socks")
+ var/new_socks = input(H, "Select your socks", "Changing") as null|anything in GLOB.socks_list
+ if(new_socks)
+ H.socks = new_socks
+ H.saved_socks = new_socks
+ var/datum/sprite_accessory/underwear/socks/S = GLOB.socks_list[new_socks]
+ dye_socks = S?.has_color
+ if(dye_undie || choice == "Underwear Color")
+ H.undie_color = recolor_undergarment(H, "underwear", H.undie_color)
+ if(dye_shirt || choice == "Undershirt Color")
+ H.shirt_color = recolor_undergarment(H, "undershirt", H.shirt_color)
+ if(dye_socks || choice == "Socks Color")
+ H.socks_color = recolor_undergarment(H, "socks", H.socks_color)
+
+ add_fingerprint(H)
+ H.update_body(TRUE)
+
+/obj/structure/plaswooddresser/proc/recolor_undergarment(mob/living/carbon/human/H, garment_type = "underwear", default_color)
+ var/n_color = input(H, "Choose your [garment_type]'\s color.", "Character Preference", default_color) as color|null
+ if(!n_color || !H.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
+ return default_color
+ return sanitize_hexcolor(n_color, 3, FALSE, default_color)
+
+/obj/structure/shadowwdresser
+ name = "dresser"
+ desc = "A nicely-crafted shadow wood dresser. It's filled with lots of undies."
+ icon = 'GainStation13/icons/obj/stationobjs.dmi'
+ icon_state = "shadowwdresser"
+ density = TRUE
+ anchored = TRUE
+
+/obj/structure/shadowwdresser/attackby(obj/item/I, mob/user, params)
+ if(I.tool_behaviour == TOOL_WRENCH)
+ to_chat(user, "You begin to [anchored ? "unwrench" : "wrench"] [src].")
+ if(I.use_tool(src, user, 20, volume=50))
+ to_chat(user, "You successfully [anchored ? "unwrench" : "wrench"] [src].")
+ setAnchored(!anchored)
+ else
+ return ..()
+
+/obj/structure/shadowwdresser/deconstruct(disassembled = TRUE)
+ new /obj/item/stack/sheet/mineral/wood(drop_location(), 10)
+ qdel(src)
+
+/obj/structure/shadowwdresser/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags)
+ . = ..()
+ if(. || !ishuman(user) || !user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
+ return
+ var/mob/living/carbon/human/H = user
+
+ if(H.dna && H.dna.species && (NO_UNDERWEAR in H.dna.species.species_traits))
+ to_chat(H, "You are not capable of wearing underwear.")
+ return
+
+ var/list/undergarment_choices = list("Underwear", "Underwear Color", "Undershirt", "Undershirt Color", "Socks", "Socks Color")
+ if(!(GLOB.underwear_list[H.underwear]?.has_color))
+ undergarment_choices -= "Underwear Color"
+ if(!(GLOB.undershirt_list[H.undershirt]?.has_color))
+ undergarment_choices -= "Undershirt Color"
+ if(!(GLOB.socks_list[H.socks]?.has_color))
+ undergarment_choices -= "Socks Color"
+
+ var/choice = input(H, "Underwear, Undershirt, or Socks?", "Changing") as null|anything in undergarment_choices
+ if(!H.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
+ return
+ var/dye_undie = FALSE
+ var/dye_shirt = FALSE
+ var/dye_socks = FALSE
+ switch(choice)
+ if("Underwear")
+ var/new_undies = input(H, "Select your underwear", "Changing") as null|anything in GLOB.underwear_list
+ if(new_undies)
+ H.underwear = new_undies
+ H.saved_underwear = new_undies
+ var/datum/sprite_accessory/underwear/bottom/B = GLOB.underwear_list[new_undies]
+ dye_undie = B?.has_color
+ if("Undershirt")
+ var/new_undershirt = input(H, "Select your undershirt", "Changing") as null|anything in GLOB.undershirt_list
+ if(new_undershirt)
+ H.undershirt = new_undershirt
+ H.saved_undershirt = new_undershirt
+ var/datum/sprite_accessory/underwear/top/T = GLOB.undershirt_list[new_undershirt]
+ dye_shirt = T?.has_color
+ if("Socks")
+ var/new_socks = input(H, "Select your socks", "Changing") as null|anything in GLOB.socks_list
+ if(new_socks)
+ H.socks = new_socks
+ H.saved_socks = new_socks
+ var/datum/sprite_accessory/underwear/socks/S = GLOB.socks_list[new_socks]
+ dye_socks = S?.has_color
+ if(dye_undie || choice == "Underwear Color")
+ H.undie_color = recolor_undergarment(H, "underwear", H.undie_color)
+ if(dye_shirt || choice == "Undershirt Color")
+ H.shirt_color = recolor_undergarment(H, "undershirt", H.shirt_color)
+ if(dye_socks || choice == "Socks Color")
+ H.socks_color = recolor_undergarment(H, "socks", H.socks_color)
+
+ add_fingerprint(H)
+ H.update_body(TRUE)
+
+/obj/structure/shadowwdresser/proc/recolor_undergarment(mob/living/carbon/human/H, garment_type = "underwear", default_color)
+ var/n_color = input(H, "Choose your [garment_type]'\s color.", "Character Preference", default_color) as color|null
+ if(!n_color || !H.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
+ return default_color
+ return sanitize_hexcolor(n_color, 3, FALSE, default_color)
diff --git a/GainStation13/code/game/objects/structures/false_walls.dm b/GainStation13/code/game/objects/structures/false_walls.dm
new file mode 100644
index 0000000000..1fc633e74d
--- /dev/null
+++ b/GainStation13/code/game/objects/structures/false_walls.dm
@@ -0,0 +1,27 @@
+//Shadow/Mushroom/Plasma false walls
+/obj/structure/falsewall/gmushroom
+ name = "mushroom wall"
+ desc = "A wall with mushroom plating."
+ icon = 'GainStation13/icons/turf/walls/gmushroom_wall.dmi'
+ icon_state = "gmushroom"
+ mineral = /obj/item/stack/sheet/mineral/gmushroom
+ walltype = /turf/closed/wall/mineral/gmushroom
+ canSmoothWith = list(/obj/structure/falsewall/gmushroom, /turf/closed/wall/mineral/gmushroom)
+
+/obj/structure/falsewall/plaswood
+ name = "plaswood wall"
+ desc = "A wall with plaswood plating."
+ icon = 'GainStation13/icons/turf/walls/plaswood_wall.dmi'
+ icon_state = "plaswood"
+ mineral = /obj/item/stack/sheet/mineral/plaswood
+ walltype = /turf/closed/wall/mineral/plaswood
+ canSmoothWith = list(/obj/structure/falsewall/plaswood, /turf/closed/wall/mineral/plaswood)
+
+/obj/structure/falsewall/shadoww
+ name = "shadow wall"
+ desc = "A wall with shadow wood plating."
+ icon = 'GainStation13/icons/turf/walls/shadoww_wall.dmi'
+ icon_state = "shadoww"
+ mineral = /obj/item/stack/sheet/mineral/shadoww
+ walltype = /turf/closed/wall/mineral/shadoww
+ canSmoothWith = list(/obj/structure/falsewall/shadoww, /turf/closed/wall/mineral/shadoww)
diff --git a/GainStation13/code/game/objects/structures/table_frames.dm b/GainStation13/code/game/objects/structures/table_frames.dm
new file mode 100644
index 0000000000..bcbed8d5eb
--- /dev/null
+++ b/GainStation13/code/game/objects/structures/table_frames.dm
@@ -0,0 +1,88 @@
+//Plaswood Frames
+/obj/structure/table_frame/plaswood
+ name = "Plaswood table frame"
+ desc = "Four wooden legs with four framing wooden rods for a wooden table. You could easily pass through this."
+ icon = 'GainStation13/icons/obj/structures.dmi'
+ icon_state = "plaswood_frame"
+ framestack = /obj/item/stack/sheet/mineral/plaswood
+ framestackamount = 2
+ resistance_flags = FLAMMABLE | ACID_PROOF
+
+/obj/structure/table_frame/plaswood/attackby(obj/item/I, mob/user, params)
+ if (istype(I, /obj/item/stack))
+ var/obj/item/stack/material = I
+ var/toConstruct // stores the table variant
+ if(istype(I, /obj/item/stack/sheet/mineral/plaswood))
+ toConstruct = /obj/structure/table/plaswood
+ else if(istype(I, /obj/item/stack/tile/carpet))
+ toConstruct = /obj/structure/table/plaswood/plaswoodpoker
+
+ if (toConstruct)
+ if(material.get_amount() < 1)
+ to_chat(user, "You need one [material.name] sheet to do this!")
+ return
+ to_chat(user, "You start adding [material] to [src]...")
+ if(do_after(user, 20, target = src) && material.use(1))
+ make_new_table(toConstruct)
+ else
+ return ..()
+
+
+//Mushroom Frames
+/obj/structure/table_frame/gmushroom
+ name = "mushroom table frame"
+ desc = "Four wooden legs with four framing wooden rods for a wooden table. You could easily pass through this."
+ icon = 'GainStation13/icons/obj/structures.dmi'
+ icon_state = "gmushroom_frame"
+ framestack = /obj/item/stack/sheet/mineral/gmushroom
+ framestackamount = 2
+ resistance_flags = FIRE_PROOF
+
+/obj/structure/table_frame/gmushroom/attackby(obj/item/I, mob/user, params)
+ if (istype(I, /obj/item/stack))
+ var/obj/item/stack/material = I
+ var/toConstruct // stores the table variant
+ if(istype(I, /obj/item/stack/sheet/mineral/gmushroom))
+ toConstruct = /obj/structure/table/gmushroom
+ else if(istype(I, /obj/item/stack/tile/carpet))
+ toConstruct = /obj/structure/table/gmushroom/gmushroompoker
+
+ if (toConstruct)
+ if(material.get_amount() < 1)
+ to_chat(user, "You need one [material.name] sheet to do this!")
+ return
+ to_chat(user, "You start adding [material] to [src]...")
+ if(do_after(user, 20, target = src) && material.use(1))
+ make_new_table(toConstruct)
+ else
+ return ..()
+
+
+//Shadow Wood Frames
+/obj/structure/table_frame/shadoww
+ name = "shadow wood frame"
+ desc = "Four wooden legs with four framing wooden rods for a wooden table. You could easily pass through this."
+ icon = 'GainStation13/icons/obj/structures.dmi'
+ icon_state = "shadoww_frame"
+ framestack = /obj/item/stack/sheet/mineral/shadoww
+ framestackamount = 2
+ resistance_flags = FLAMMABLE
+
+/obj/structure/table_frame/shadoww/attackby(obj/item/I, mob/user, params)
+ if (istype(I, /obj/item/stack))
+ var/obj/item/stack/material = I
+ var/toConstruct // stores the table variant
+ if(istype(I, /obj/item/stack/sheet/mineral/shadoww))
+ toConstruct = /obj/structure/table/shadoww
+ else if(istype(I, /obj/item/stack/tile/carpet))
+ toConstruct = /obj/structure/table/shadoww/shadowwpoker
+
+ if (toConstruct)
+ if(material.get_amount() < 1)
+ to_chat(user, "You need one [material.name] sheet to do this!")
+ return
+ to_chat(user, "You start adding [material] to [src]...")
+ if(do_after(user, 20, target = src) && material.use(1))
+ make_new_table(toConstruct)
+ else
+ return ..()
diff --git a/GainStation13/code/game/objects/structures/table_racks.dm b/GainStation13/code/game/objects/structures/table_racks.dm
new file mode 100644
index 0000000000..5d7362d160
--- /dev/null
+++ b/GainStation13/code/game/objects/structures/table_racks.dm
@@ -0,0 +1,68 @@
+//Shadowwood tables
+/obj/structure/table/shadoww
+ name = "Shadow wood table"
+ desc = "Do not apply fire to this. Rumour says it burns easily."
+ icon = 'GainStation13/icons/obj/smooth_structures/shadoww_table.dmi'
+ icon_state = "shadoww_table"
+ frame = /obj/structure/table_frame/shadoww
+ framestack = /obj/item/stack/sheet/mineral/shadoww
+ buildstack = /obj/item/stack/sheet/mineral/shadoww
+ resistance_flags = FLAMMABLE
+ max_integrity = 70
+ canSmoothWith = list(/obj/structure/table/shadoww,
+ /obj/structure/table/shadoww/shadowwpoker)
+
+/obj/structure/table/shadoww/shadowwpoker
+ name = "gambling table"
+ desc = "A seedy table for seedy dealings in seedy places."
+ icon = 'GainStation13/icons/obj/smooth_structures/shadowwpoker_table.dmi'
+ icon_state = "shadowwpoker_table"
+ frame = /obj/structure/table_frame/shadoww
+ buildstack = /obj/item/stack/tile/carpet
+
+//Plaswood tables
+/obj/structure/table/plaswood
+ name = "plaswood table"
+ desc = "An strong and grey wooden table."
+ icon = 'GainStation13/icons/obj/smooth_structures/plaswood_table.dmi'
+ icon_state = "plaswood_table"
+ frame = /obj/structure/table_frame/plaswood
+ framestack = /obj/item/stack/sheet/mineral/plaswood
+ buildstack = /obj/item/stack/sheet/mineral/plaswood
+ resistance_flags = FLAMMABLE
+ max_integrity = 200
+ integrity_failure = 50
+ armor = list("melee" = 10, "bullet" = 30, "laser" = 30, "energy" = 100, "bomb" = 20, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 70)
+ canSmoothWith = list(/obj/structure/table/plaswood,
+ /obj/structure/table/plaswood/plaswoodpoker)
+
+/obj/structure/table/plaswood/plaswoodpoker
+ name = "gambling table"
+ desc = "A seedy table for seedy dealings in seedy places."
+ icon = 'GainStation13/icons/obj/smooth_structures/plaswoodpoker_table.dmi'
+ icon_state = "plaswoodpoker_table"
+ frame = /obj/structure/table_frame/plaswood
+ buildstack = /obj/item/stack/tile/carpet
+
+
+//Mushroom tables
+/obj/structure/table/gmushroom
+ name = "Mushroom table"
+ desc = "A pinkish table. And is fireproof!"
+ icon = 'GainStation13/icons/obj/smooth_structures/gmushroom_table.dmi'
+ icon_state = "gmushroom_table"
+ frame = /obj/structure/table_frame/gmushroom
+ framestack = /obj/item/stack/sheet/mineral/gmushroom
+ buildstack = /obj/item/stack/sheet/mineral/gmushroom
+ resistance_flags = FIRE_PROOF
+ max_integrity = 70
+ canSmoothWith = list(/obj/structure/table/gmushroom,
+ /obj/structure/table/gmushroom/gmushroompoker)
+
+/obj/structure/table/gmushroom/gmushroompoker
+ name = "gambling table"
+ desc = "A seedy table for seedy dealings in seedy places."
+ icon = 'GainStation13/icons/obj/smooth_structures/gmushroompoker_table.dmi'
+ icon_state = "gmushroompoker_table"
+ frame = /obj/structure/table_frame/gmushroom
+ buildstack = /obj/item/stack/tile/carpet
diff --git a/GainStation13/code/game/turfs/closed.dm b/GainStation13/code/game/turfs/closed.dm
index d552cd6dd0..27b4a75c87 100644
--- a/GainStation13/code/game/turfs/closed.dm
+++ b/GainStation13/code/game/turfs/closed.dm
@@ -25,3 +25,30 @@
desc = "Somehow, it doesn't melt at all..."
icon = 'Gainstation13/icons/turf/walls/wall_candy.dmi'
icon_state = "choco_wall1"
+
+/turf/closed/indestructible/shadoww
+ name = "shadow wall"
+ desc = "A wall with shadow wood plating."
+ icon = 'GainStation13/icons/turf/walls/shadoww_wall.dmi'
+ icon_state = "shadoww"
+ baseturfs = /turf/closed/indestructible/shadoww
+ smooth = SMOOTH_TRUE
+ canSmoothWith = list(/turf/closed/wall/mineral/shadoww, /obj/structure/falsewall/shadoww, /turf/closed/indestructible/shadoww)
+
+/turf/closed/indestructible/plaswood
+ name = "plaswood wall"
+ desc = "A wall with plaswood plating."
+ icon = 'GainStation13/icons/turf/walls/plaswood_wall.dmi'
+ icon_state = "plaswood"
+ baseturfs = /turf/closed/indestructible/plaswood
+ smooth = SMOOTH_TRUE
+ canSmoothWith = list(/turf/closed/wall/mineral/plaswood, /obj/structure/falsewall/plaswood, /turf/closed/indestructible/shadoww)
+
+/turf/closed/indestructible/gmushroom
+ name = "mushroom wall"
+ desc = "A wall with mushroom plating."
+ icon = 'GainStation13/icons/turf/walls/gmushroom_wall.dmi'
+ icon_state = "gmushroom"
+ baseturfs = /turf/closed/indestructible/gmushroom
+ smooth = SMOOTH_TRUE
+ canSmoothWith = list(/turf/closed/wall/mineral/gmushroom, /obj/structure/falsewall/gmushroom, /turf/closed/indestructible/gmushroom)
diff --git a/GainStation13/code/game/turfs/simulated/floor/fancy_floor.dm b/GainStation13/code/game/turfs/simulated/floor/fancy_floor.dm
new file mode 100644
index 0000000000..d7cac032ab
--- /dev/null
+++ b/GainStation13/code/game/turfs/simulated/floor/fancy_floor.dm
@@ -0,0 +1,164 @@
+//Shadow wood
+/turf/open/floor/shadoww
+ desc = "Stylish shadow wood."
+ icon_state = "shadoww"
+ floor_tile = /obj/item/stack/tile/shadoww
+ broken_states = list("shadoww-broken", "shadoww-broken2", "shadoww-broken3", "shadoww-broken4", "shadoww-broken5", "shadoww-broken6", "shadoww-broken7")
+ footstep = FOOTSTEP_WOOD
+ barefootstep = FOOTSTEP_WOOD_BAREFOOT
+ clawfootstep = FOOTSTEP_WOOD_CLAW
+ heavyfootstep = FOOTSTEP_GENERIC_HEAVY
+ tiled_dirt = FALSE
+
+/turf/open/floor/shadoww/examine(mob/user)
+ . = ..()
+ . += "There's a few screws and a small crack visible."
+
+/turf/open/floor/shadoww/screwdriver_act(mob/living/user, obj/item/I)
+ if(..())
+ return TRUE
+ return pry_tile(I, user)
+
+/turf/open/floor/shadoww/try_replace_tile(obj/item/stack/tile/T, mob/user, params)
+ if(T.turf_type == type)
+ return
+ var/obj/item/tool = user.is_holding_item_of_type(/obj/item/screwdriver)
+ if(!tool)
+ tool = user.is_holding_item_of_type(/obj/item/crowbar)
+ if(!tool)
+ return
+ var/turf/open/floor/plating/P = pry_tile(tool, user, TRUE)
+ if(!istype(P))
+ return
+ P.attackby(T, user, params)
+
+/turf/open/floor/shadoww/pry_tile(obj/item/C, mob/user, silent = FALSE)
+ C.play_tool_sound(src, 80)
+ return remove_tile(user, silent, (C.tool_behaviour == TOOL_SCREWDRIVER))
+
+/turf/open/floor/shadoww/remove_tile(mob/user, silent = FALSE, make_tile = TRUE, forced = FALSE)
+ if(broken || burnt)
+ broken = 0
+ burnt = 0
+ if(user && !silent)
+ to_chat(user, "You remove the broken planks.")
+ else
+ if(make_tile)
+ if(user && !silent)
+ to_chat(user, "You unscrew the planks.")
+ if(floor_tile)
+ new floor_tile(src)
+ else
+ if(user && !silent)
+ to_chat(user, "You forcefully pry off the planks, destroying them in the process.")
+ return make_plating()
+
+//Mushroom wood
+/turf/open/floor/gmushroom
+ desc = "Stylish mushroom 'wood'."
+ icon_state = "gmushroom"
+ floor_tile = /obj/item/stack/tile/gmushroom
+ broken_states = list("gmushroom-broken", "gmushroom-broken2", "gmushroom-broken3", "gmushroom-broken4", "gmushroom-broken5", "gmushroom-broken6", "gmushroom-broken7")
+ footstep = FOOTSTEP_WOOD
+ barefootstep = FOOTSTEP_WOOD_BAREFOOT
+ clawfootstep = FOOTSTEP_WOOD_CLAW
+ heavyfootstep = FOOTSTEP_GENERIC_HEAVY
+ tiled_dirt = FALSE
+
+/turf/open/floor/gmushroom/examine(mob/user)
+ . = ..()
+ . += "There's a few screws and a small crack visible."
+
+/turf/open/floor/gmushroom/screwdriver_act(mob/living/user, obj/item/I)
+ if(..())
+ return TRUE
+ return pry_tile(I, user)
+
+/turf/open/floor/gmushroom/try_replace_tile(obj/item/stack/tile/T, mob/user, params)
+ if(T.turf_type == type)
+ return
+ var/obj/item/tool = user.is_holding_item_of_type(/obj/item/screwdriver)
+ if(!tool)
+ tool = user.is_holding_item_of_type(/obj/item/crowbar)
+ if(!tool)
+ return
+ var/turf/open/floor/plating/P = pry_tile(tool, user, TRUE)
+ if(!istype(P))
+ return
+ P.attackby(T, user, params)
+
+/turf/open/floor/gmushroom/pry_tile(obj/item/C, mob/user, silent = FALSE)
+ C.play_tool_sound(src, 80)
+ return remove_tile(user, silent, (C.tool_behaviour == TOOL_SCREWDRIVER))
+
+/turf/open/floor/gmushroom/remove_tile(mob/user, silent = FALSE, make_tile = TRUE, forced = FALSE)
+ if(broken || burnt)
+ broken = 0
+ burnt = 0
+ if(user && !silent)
+ to_chat(user, "You remove the broken planks.")
+ else
+ if(make_tile)
+ if(user && !silent)
+ to_chat(user, "You unscrew the planks.")
+ if(floor_tile)
+ new floor_tile(src)
+ else
+ if(user && !silent)
+ to_chat(user, "You forcefully pry off the planks, destroying them in the process.")
+ return make_plating()
+
+//Plaswood
+/turf/open/floor/plaswood
+ desc = "Stylish plaswood."
+ icon_state = "plaswood"
+ floor_tile = /obj/item/stack/tile/plaswood
+ broken_states = list("plaswood-broken", "plaswood-broken2", "plaswood-broken3", "plaswood-broken4", "plaswood-broken5", "plaswood-broken6", "plaswood-broken7")
+ footstep = FOOTSTEP_WOOD
+ barefootstep = FOOTSTEP_WOOD_BAREFOOT
+ clawfootstep = FOOTSTEP_WOOD_CLAW
+ heavyfootstep = FOOTSTEP_GENERIC_HEAVY
+ tiled_dirt = FALSE
+
+/turf/open/floor/plaswood/examine(mob/user)
+ . = ..()
+ . += "There's a few screws and a small crack visible."
+
+/turf/open/floor/plaswood/screwdriver_act(mob/living/user, obj/item/I)
+ if(..())
+ return TRUE
+ return pry_tile(I, user)
+
+/turf/open/floor/plaswood/try_replace_tile(obj/item/stack/tile/T, mob/user, params)
+ if(T.turf_type == type)
+ return
+ var/obj/item/tool = user.is_holding_item_of_type(/obj/item/screwdriver)
+ if(!tool)
+ tool = user.is_holding_item_of_type(/obj/item/crowbar)
+ if(!tool)
+ return
+ var/turf/open/floor/plating/P = pry_tile(tool, user, TRUE)
+ if(!istype(P))
+ return
+ P.attackby(T, user, params)
+
+/turf/open/floor/plaswood/pry_tile(obj/item/C, mob/user, silent = FALSE)
+ C.play_tool_sound(src, 80)
+ return remove_tile(user, silent, (C.tool_behaviour == TOOL_SCREWDRIVER))
+
+/turf/open/floor/plaswood/remove_tile(mob/user, silent = FALSE, make_tile = TRUE, forced = FALSE)
+ if(broken || burnt)
+ broken = 0
+ burnt = 0
+ if(user && !silent)
+ to_chat(user, "You remove the broken planks.")
+ else
+ if(make_tile)
+ if(user && !silent)
+ to_chat(user, "You unscrew the planks.")
+ if(floor_tile)
+ new floor_tile(src)
+ else
+ if(user && !silent)
+ to_chat(user, "You forcefully pry off the planks, destroying them in the process.")
+ return make_plating()
diff --git a/GainStation13/code/game/turfs/simulated/wall/mineral_walls.dm b/GainStation13/code/game/turfs/simulated/wall/mineral_walls.dm
new file mode 100644
index 0000000000..a8e8891944
--- /dev/null
+++ b/GainStation13/code/game/turfs/simulated/wall/mineral_walls.dm
@@ -0,0 +1,78 @@
+// GS13: Extra wood walls
+/turf/closed/wall/mineral/gmushroom
+ name = "mushroom wall"
+ desc = "A wall with mushroom plating."
+ icon = 'GainStation13/icons/turf/walls/gmushroom_wall.dmi'
+ icon_state = "gmushroom"
+ sheet_type = /obj/item/stack/sheet/mineral/gmushroom
+ hardness = 70
+ explosion_block = 0
+ canSmoothWith = list(/turf/closed/wall/mineral/gmushroom, /obj/structure/falsewall/gmushroom, /turf/closed/wall/mineral/gmushroom/nonmetal)
+
+/turf/closed/wall/mineral/gmushroom/attackby(obj/item/W, mob/user)
+ if(W.sharpness && W.force)
+ var/duration = (48/W.force) * 2 //In seconds, for now.
+ if(istype(W, /obj/item/hatchet) || istype(W, /obj/item/fireaxe))
+ duration /= 4 //Much better with hatchets and axes.
+ if(do_after(user, duration*10, target=src)) //Into deciseconds.
+ dismantle_wall(FALSE,FALSE)
+ return
+ return ..()
+
+/turf/closed/wall/mineral/gmushroom/nonmetal
+ desc = "A solidly mushroom wall. It's a bit weaker than a wall made with metal."
+ girder_type = /obj/structure/barricade/gmushroom
+ hardness = 50
+ canSmoothWith = list(/turf/closed/wall/mineral/gmushroom, /obj/structure/falsewall/gmushroom, /turf/closed/wall/mineral/gmushroom/nonmetal)
+
+/turf/closed/wall/mineral/plaswood
+ name = "plaswood wall"
+ desc = "A wall with plaswood plating."
+ icon = 'GainStation13/icons/turf/walls/plaswood_wall.dmi'
+ icon_state = "plaswood"
+ sheet_type = /obj/item/stack/sheet/mineral/plaswood
+ hardness = 90
+ explosion_block = 35
+ canSmoothWith = list(/turf/closed/wall/mineral/plaswood, /obj/structure/falsewall/plaswood, /turf/closed/wall/mineral/plaswood/nonmetal)
+
+/turf/closed/wall/mineral/plaswood/attackby(obj/item/W, mob/user)
+ if(W.sharpness && W.force)
+ var/duration = (48/W.force) * 2 //In seconds, for now.
+ if(istype(W, /obj/item/hatchet) || istype(W, /obj/item/fireaxe))
+ duration /= 4 //Much better with hatchets and axes.
+ if(do_after(user, duration*10, target=src)) //Into deciseconds.
+ dismantle_wall(FALSE,FALSE)
+ return
+ return ..()
+
+/turf/closed/wall/mineral/plaswood/nonmetal
+ desc = "A solidly plaswood wall. It's a bit weaker than a wall made with metal."
+ girder_type = /obj/structure/barricade/plaswood
+ hardness = 70
+ canSmoothWith = list(/turf/closed/wall/mineral/plaswood, /obj/structure/falsewall/plaswood, /turf/closed/wall/mineral/plaswood/nonmetal)
+
+/turf/closed/wall/mineral/shadoww
+ name = "shadow wall"
+ desc = "A wall with shadow wood plating."
+ icon = 'GainStation13/icons/turf/walls/shadoww_wall.dmi'
+ icon_state = "shadoww"
+ sheet_type = /obj/item/stack/sheet/mineral/shadoww
+ hardness = 70
+ explosion_block = 0
+ canSmoothWith = list(/turf/closed/wall/mineral/shadoww, /obj/structure/falsewall/shadoww, /turf/closed/wall/mineral/shadoww/nonmetal)
+
+/turf/closed/wall/mineral/shadoww/attackby(obj/item/W, mob/user)
+ if(W.sharpness && W.force)
+ var/duration = (48/W.force) * 2 //In seconds, for now.
+ if(istype(W, /obj/item/hatchet) || istype(W, /obj/item/fireaxe))
+ duration /= 4 //Much better with hatchets and axes.
+ if(do_after(user, duration*10, target=src)) //Into deciseconds.
+ dismantle_wall(FALSE,FALSE)
+ return
+ return ..()
+
+/turf/closed/wall/mineral/shadoww/nonmetal
+ desc = "A solidly shadow wall. It's a bit weaker than a wall made with metal."
+ girder_type = /obj/structure/barricade/shadoww
+ hardness = 50
+ canSmoothWith = list(/turf/closed/wall/mineral/shadoww, /obj/structure/falsewall/shadoww, /turf/closed/wall/mineral/shadoww/nonmetal)
diff --git a/GainStation13/code/modules/cargo/bounties/assistant.dm b/GainStation13/code/modules/cargo/bounties/assistant.dm
new file mode 100644
index 0000000000..2918fe6d3e
--- /dev/null
+++ b/GainStation13/code/modules/cargo/bounties/assistant.dm
@@ -0,0 +1,21 @@
+//Wood chair bounties
+/datum/bounty/item/assistant/shadow_wood_chair
+ name = "Shadow Wood Chairs"
+ description = "One of the Commanders is unhappy with his chair. He claims it hurts his back. Ship some shadow wood chairs to humor him."
+ reward = 1000
+ required_count = 5
+ wanted_types = list(/obj/structure/chair/shadoww)
+
+/datum/bounty/item/assistant/mushroom_chair
+ name = "Mushroom Chairs"
+ description = "One of the Commanders is unhappy with his chair. He claims it hurts his back. Ship some mushroom chairs to humor him."
+ reward = 1500
+ required_count = 5
+ wanted_types = list(/obj/structure/chair/gmushroom)
+
+/datum/bounty/item/assistant/plaswood_chair
+ name = "Plaswood Chairs"
+ description = "One of the Commanders is unhappy with his chair. He claims it hurts his back. Ship some shadow wood chairs to humor him."
+ reward = 2250
+ required_count = 5
+ wanted_types = list(/obj/structure/chair/plaswood)
diff --git a/GainStation13/code/modules/cargo/bounties/mining.dm b/GainStation13/code/modules/cargo/bounties/mining.dm
new file mode 100644
index 0000000000..53bc7bb093
--- /dev/null
+++ b/GainStation13/code/modules/cargo/bounties/mining.dm
@@ -0,0 +1,21 @@
+//Wood plank bounties
+/datum/bounty/item/mining/plaswood
+ name = "Plaswood Planks"
+ description = "Central Command's carpentry department needs more exotic wood, send us some plaswood planks!"
+ reward = 5500
+ required_count = 100
+ wanted_types = list(/obj/item/stack/sheet/mineral/plaswood)
+
+/datum/bounty/item/mining/gmushroom
+ name = "Mushroom Planks"
+ description = "Central Command's carpentry department needs more exotic 'wood', send us some mushroom planks!"
+ reward = 1100
+ required_count = 100
+ wanted_types = list(/obj/item/stack/sheet/mineral/gmushroom)
+
+/datum/bounty/item/mining/shadoww
+ name = "Shadow Planks"
+ description = "Central Command's carpentry department needs more exotic wood, send us some shadow planks!"
+ reward = 900
+ required_count = 100
+ wanted_types = list(/obj/item/stack/sheet/mineral/shadoww)
diff --git a/GainStation13/code/modules/cargo/packs.dm b/GainStation13/code/modules/cargo/packs.dm
index 5c153e5aff..1bb2b4a179 100644
--- a/GainStation13/code/modules/cargo/packs.dm
+++ b/GainStation13/code/modules/cargo/packs.dm
@@ -52,3 +52,24 @@
cost = 1500
contains = list(/obj/item/vending_refill/clothing)
crate_name = "clothesmate supply crate"
+
+/datum/supply_pack/materials/gmushroom50 //buyable special wood planks
+ name = "50 Mushroom Planks"
+ desc = "Looks like wood AND is fire proof? Of course you need fifty mushroom planks!"
+ cost = 1700
+ crate_type = /obj/structure/closet/secure_closet/cargo
+ contains = list(/obj/item/stack/sheet/mineral/gmushroom/fifty)
+
+/datum/supply_pack/materials/plaswood50
+ name = "50 Plaswood Planks"
+ desc = "Who need metal when you can have fifty plaswood planks?"
+ cost = 6000
+ crate_type = /obj/structure/closet/secure_closet/cargo
+ contains = list(/obj/item/stack/sheet/mineral/plaswood/fifty)
+
+/datum/supply_pack/materials/shadoww50
+ name = "50 Shadow Wood Planks"
+ desc = "Time to bring the dark side with fifty shadow wooden planks!"
+ cost = 1450
+ crate_type = /obj/structure/closet/secure_closet/cargo
+ contains = list(/obj/item/stack/sheet/mineral/shadoww/fifty)
diff --git a/GainStation13/code/modules/hydroponics/grown/towercap.dm b/GainStation13/code/modules/hydroponics/grown/towercap.dm
new file mode 100644
index 0000000000..e7d47f2b4f
--- /dev/null
+++ b/GainStation13/code/modules/hydroponics/grown/towercap.dm
@@ -0,0 +1,36 @@
+//extra chopped wood logs
+/obj/item/grown/log/gmushroom
+ seed = null
+ name = "mushroom log"
+ desc = "Looks like candy! Do not eat it."
+ icon = 'GainStation13/icons/obj/hydroponics/harvest.dmi'
+ icon_state = "mushroom_log"
+ plank_type = /obj/item/stack/sheet/mineral/gmushroom
+ plank_name = "mushroom planks"
+
+/obj/item/grown/log/gmushroom/CheckAccepted(obj/item/I)
+ return FALSE
+
+/obj/item/grown/log/shadowtree
+ seed = null
+ name = "shadow log"
+ desc = "A piece of dark log."
+ icon = 'GainStation13/icons/obj/hydroponics/harvest.dmi'
+ icon_state = "shadow_log"
+ plank_type = /obj/item/stack/sheet/mineral/shadoww
+ plank_name = "shadow planks"
+
+/obj/item/grown/log/gmushroom/CheckAccepted(obj/item/I)
+ return FALSE
+
+/obj/item/grown/log/plasmatree
+ seed = null
+ name = "plasma tree log"
+ desc = "A heavy piece log."
+ icon = 'GainStation13/icons/obj/hydroponics/harvest.dmi'
+ icon_state = "plasmatree_log"
+ plank_type = /obj/item/stack/sheet/mineral/plaswood
+ plank_name = "plaswood planks"
+
+/obj/item/grown/log/plasmatree/CheckAccepted(obj/item/I)
+ return FALSE
diff --git a/GainStation13/icons/obj/crates.dmi b/GainStation13/icons/obj/crates.dmi
new file mode 100644
index 0000000000..13703aa19b
Binary files /dev/null and b/GainStation13/icons/obj/crates.dmi differ
diff --git a/GainStation13/icons/obj/hydroponics/harvest.dmi b/GainStation13/icons/obj/hydroponics/harvest.dmi
index c8e3d4d042..c2e4af3a06 100644
Binary files a/GainStation13/icons/obj/hydroponics/harvest.dmi and b/GainStation13/icons/obj/hydroponics/harvest.dmi differ
diff --git a/GainStation13/icons/obj/smooth_structures/gmushroom_table.dmi b/GainStation13/icons/obj/smooth_structures/gmushroom_table.dmi
new file mode 100644
index 0000000000..42feccf233
Binary files /dev/null and b/GainStation13/icons/obj/smooth_structures/gmushroom_table.dmi differ
diff --git a/GainStation13/icons/obj/smooth_structures/gmushroompoker_table.dmi b/GainStation13/icons/obj/smooth_structures/gmushroompoker_table.dmi
new file mode 100644
index 0000000000..b5e396e30d
Binary files /dev/null and b/GainStation13/icons/obj/smooth_structures/gmushroompoker_table.dmi differ
diff --git a/GainStation13/icons/obj/smooth_structures/plaswood_table.dmi b/GainStation13/icons/obj/smooth_structures/plaswood_table.dmi
new file mode 100644
index 0000000000..4710cea48c
Binary files /dev/null and b/GainStation13/icons/obj/smooth_structures/plaswood_table.dmi differ
diff --git a/GainStation13/icons/obj/smooth_structures/plaswoodpoker_table.dmi b/GainStation13/icons/obj/smooth_structures/plaswoodpoker_table.dmi
new file mode 100644
index 0000000000..85bdbcbc79
Binary files /dev/null and b/GainStation13/icons/obj/smooth_structures/plaswoodpoker_table.dmi differ
diff --git a/GainStation13/icons/obj/smooth_structures/shadoww_table.dmi b/GainStation13/icons/obj/smooth_structures/shadoww_table.dmi
new file mode 100644
index 0000000000..2d62fe8f9a
Binary files /dev/null and b/GainStation13/icons/obj/smooth_structures/shadoww_table.dmi differ
diff --git a/GainStation13/icons/obj/smooth_structures/shadowwpoker_table.dmi b/GainStation13/icons/obj/smooth_structures/shadowwpoker_table.dmi
new file mode 100644
index 0000000000..1903c23c02
Binary files /dev/null and b/GainStation13/icons/obj/smooth_structures/shadowwpoker_table.dmi differ
diff --git a/GainStation13/icons/obj/stationobjs.dmi b/GainStation13/icons/obj/stationobjs.dmi
new file mode 100644
index 0000000000..e4314307e8
Binary files /dev/null and b/GainStation13/icons/obj/stationobjs.dmi differ
diff --git a/GainStation13/icons/obj/structure/flora.dm b/GainStation13/icons/obj/structure/flora.dm
index f2248f4d6b..64dc8dedd0 100644
--- a/GainStation13/icons/obj/structure/flora.dm
+++ b/GainStation13/icons/obj/structure/flora.dm
@@ -39,7 +39,7 @@
user.visible_message("[user] fells [src] with the [W].","You fell [src] with the [W].", "You hear the sound of a tree falling.")
playsound(get_turf(src), 'sound/effects/meteorimpact.ogg', 100 , 0, 0)
for(var/i=1 to log_amount)
- new /obj/item/grown/log(get_turf(src))
+ new /obj/item/grown/log/gmushroom(get_turf(src))
var/obj/structure/gmushroom/gmushroomstump/S = new(loc)
S.name = "[name] stump"
@@ -91,7 +91,7 @@
user.visible_message("[user] fells [src] with the [W].","You fell [src] with the [W].", "You hear the sound of a tree falling.")
playsound(get_turf(src), 'sound/effects/meteorimpact.ogg', 100 , 0, 0)
for(var/i=1 to log_amount)
- new /obj/item/grown/log(get_turf(src))
+ new /obj/item/grown/log/shadowtree(get_turf(src))
var/obj/structure/shadowtree/shadowtreestump/S = new(loc)
S.name = "[name] stump"
@@ -142,7 +142,7 @@
user.visible_message("[user] fells [src] with the [W].","You fell [src] with the [W].", "You hear the sound of a tree falling.")
playsound(get_turf(src), 'sound/effects/meteorimpact.ogg', 100 , 0, 0)
for(var/i=1 to log_amount)
- new /obj/item/grown/log(get_turf(src))
+ new /obj/item/grown/log/plasmatree(get_turf(src))
var/obj/structure/plasmatree/plasmatreestump/S = new(loc)
S.name = "[name] stump"
diff --git a/GainStation13/icons/obj/structures.dmi b/GainStation13/icons/obj/structures.dmi
new file mode 100644
index 0000000000..61f8e7aec5
Binary files /dev/null and b/GainStation13/icons/obj/structures.dmi differ
diff --git a/code/datums/mapgen/CaveGenerator.dm b/code/datums/mapgen/CaveGenerator.dm
index 4d6ae0ae07..13c43ef7a6 100644
--- a/code/datums/mapgen/CaveGenerator.dm
+++ b/code/datums/mapgen/CaveGenerator.dm
@@ -41,7 +41,7 @@
if(!megafauna_spawn_list)
megafauna_spawn_list = GLOB.megafauna_spawn_list
if(!flora_spawn_list)
- flora_spawn_list = list(/obj/structure/flora/ash/leaf_shroom = 2 , /obj/structure/flora/ash/cap_shroom = 2 , /obj/structure/flora/ash/stem_shroom = 2 , /obj/structure/flora/ash/cacti = 1, /obj/structure/flora/ash/tall_shroom = 2)
+ flora_spawn_list = list(/obj/structure/flora/ash/leaf_shroom = 2 , /obj/structure/flora/ash/cap_shroom = 2 , /obj/structure/flora/ash/stem_shroom = 2 , /obj/structure/flora/ash/cacti = 1, /obj/structure/flora/ash/tall_shroom = 2, /obj/structure/flora/gmushroom/gggmushroom = 2, /obj/structure/flora/shadowtree/shadowtreee = 2, /obj/structure/flora/plasmatree/plasmatreee = 2) //GS13 Edit: trees in caves
if(!feature_spawn_list)
feature_spawn_list = list(/obj/structure/geyser/random = 1)
diff --git a/code/datums/mapgen/Cavegens/LavalandGenerator.dm b/code/datums/mapgen/Cavegens/LavalandGenerator.dm
index 3ce3821708..b9c0278462 100644
--- a/code/datums/mapgen/Cavegens/LavalandGenerator.dm
+++ b/code/datums/mapgen/Cavegens/LavalandGenerator.dm
@@ -7,7 +7,7 @@
/mob/living/simple_animal/hostile/asteroid/basilisk/watcher/random = 40, /obj/structure/spawner/lavaland = 2, \
/mob/living/simple_animal/hostile/asteroid/hivelord/legion/random = 30, /obj/structure/spawner/lavaland/legion = 3, \
SPAWN_MEGAFAUNA = 4, /mob/living/simple_animal/hostile/asteroid/goldgrub = 10)
- flora_spawn_list = list(/obj/structure/flora/ash/leaf_shroom = 2 , /obj/structure/flora/ash/cap_shroom = 2 , /obj/structure/flora/ash/stem_shroom = 2 , /obj/structure/flora/ash/cacti = 1, /obj/structure/flora/ash/tall_shroom = 2, /obj/structure/flora/ashtree = 1)
+ flora_spawn_list = list(/obj/structure/flora/ash/leaf_shroom = 2 , /obj/structure/flora/ash/cap_shroom = 2 , /obj/structure/flora/ash/stem_shroom = 2 , /obj/structure/flora/ash/cacti = 1, /obj/structure/flora/ash/tall_shroom = 2, /obj/structure/flora/ashtree = 1, /obj/structure/flora/gmushroom/gggmushroom = 2, /obj/structure/flora/shadowtree/shadowtreee = 2, /obj/structure/flora/plasmatree/plasmatreee = 2) //GS13 Edit: trees in lavaland
feature_spawn_list = list(/obj/structure/geyser/random = 1)
initial_closed_chance = 45
diff --git a/icons/UI_Icons/tgui/jobs.dmi b/icons/UI_Icons/tgui/jobs.dmi
index 207f11afed..e4115d846b 100644
Binary files a/icons/UI_Icons/tgui/jobs.dmi and b/icons/UI_Icons/tgui/jobs.dmi differ
diff --git a/tgstation.dme b/tgstation.dme
index dae6690f2f..b929a40851 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -3963,6 +3963,7 @@
#include "GainStation13\code\game\plushes.dm"
#include "GainStation13\code\game\sound.dm"
#include "GainStation13\code\game\area\ruins.dm"
+#include "GainStation13\code\game\machinery\deployable.dm"
#include "GainStation13\code\game\objects\tiles.dm"
#include "GainStation13\code\game\objects\turfs.dm"
#include "GainStation13\code\game\objects\effects\landmarks.dm"
@@ -3975,14 +3976,25 @@
#include "GainStation13\code\game\objects\items\toys.dm"
#include "GainStation13\code\game\objects\items\storage\bags.dm"
#include "GainStation13\code\game\objects\items\storage\firstaid.dm"
+#include "GainStation13\code\game\objects\items\stacks\sheets\sheet_types.dm"
+#include "GainStation13\code\game\objects\items\stacks\tiles\tile_types.dm"
#include "GainStation13\code\game\objects\structures\barsigns.dm"
#include "GainStation13\code\game\objects\structures\crate.dm"
+#include "GainStation13\code\game\objects\structures\false_walls.dm"
+#include "GainStation13\code\game\objects\structures\dresser.dm"
#include "GainStation13\code\game\objects\structures\medikit.dm"
#include "GainStation13\code\game\objects\structures\sofa.dm"
#include "GainStation13\code\game\objects\structures\statues.dm"
+#include "GainStation13\code\game\objects\structures\table_frames.dm"
+#include "GainStation13\code\game\objects\structures\table_racks.dm"
+#include "GainStation13\code\game\objects\structures\beds_chairs\bed.dm"
+#include "GainStation13\code\game\objects\structures\beds_chairs\chair.dm"
+#include "GainStation13\code\game\objects\structures\crates_lockers\crates\wooden.dm"
#include "GainStation13\code\game\objects\structures\crates_lockers\closets\secure\psychology.dm"
#include "GainStation13\code\game\turfs\closed.dm"
#include "GainStation13\code\game\turfs\open.dm"
+#include "GainStation13\code\game\turfs\simulated\floor\fancy_floor.dm"
+#include "GainStation13\code\game\turfs\simulated\wall\mineral_walls.dm"
#include "GainStation13\code\machinery\adipoelectric_generator.dm"
#include "GainStation13\code\machinery\adipoelectric_transformer.dm"
#include "GainStation13\code\machinery\cryogenic.dm"
@@ -4023,6 +4035,8 @@
#include "GainStation13\code\modules\atmospherics\gasmixtures\reactions.dm"
#include "GainStation13\code\modules\atmospherics\machinery\portable\canister.dm"
#include "GainStation13\code\modules\cargo\packs.dm"
+#include "GainStation13\code\modules\cargo\bounties\assistant.dm"
+#include "GainStation13\code\modules\cargo\bounties\mining.dm"
#include "GainStation13\code\modules\client\border_control.dm"
#include "GainStation13\code\modules\client\loadout\head.dm"
#include "GainStation13\code\modules\client\loadout\uniform.dm"
@@ -4045,6 +4059,7 @@
#include "GainStation13\code\modules\hydroponics\lipoplant.dm"
#include "GainStation13\code\modules\hydroponics\munchies_weed.dm"
#include "GainStation13\code\modules\hydroponics\grown\berries.dm"
+#include "GainStation13\code\modules\hydroponics\grown\towercap.dm"
#include "GainStation13\code\modules\jobs\job_types\psychologist.dm"
#include "GainStation13\code\modules\loadout\backpack.dm"
#include "GainStation13\code\modules\loadout\gloves.dm"