diff --git a/code/game/objects/items/stacks/sheets/glass.dm b/code/game/objects/items/stacks/sheets/glass.dm
index cca95e00390..ab7b3513c4b 100644
--- a/code/game/objects/items/stacks/sheets/glass.dm
+++ b/code/game/objects/items/stacks/sheets/glass.dm
@@ -25,6 +25,7 @@ GLOBAL_LIST_INIT(glass_recipes, list ( \
merge_type = /obj/item/stack/sheet/glass
grind_results = list(/datum/reagent/silicon = 20)
point_value = 1
+ tableVariant = /obj/structure/table/glass
/obj/item/stack/sheet/glass/suicide_act(mob/living/carbon/user)
user.visible_message("[user] begins to slice [user.p_their()] neck with \the [src]! It looks like [user.p_theyre()] trying to commit suicide!")
diff --git a/code/game/objects/items/stacks/sheets/mineral.dm b/code/game/objects/items/stacks/sheets/mineral.dm
index 6eb102006d9..7e999b451e8 100644
--- a/code/game/objects/items/stacks/sheets/mineral.dm
+++ b/code/game/objects/items/stacks/sheets/mineral.dm
@@ -231,6 +231,7 @@ GLOBAL_LIST_INIT(gold_recipes, list ( \
grind_results = list(/datum/reagent/silver = 20)
point_value = 20
merge_type = /obj/item/stack/sheet/mineral/silver
+ tableVariant = /obj/structure/table/optable
GLOBAL_LIST_INIT(silver_recipes, list ( \
new/datum/stack_recipe("silver door", /obj/structure/mineral_door/silver, 10, one_per_turf = 1, on_floor = 1), \
diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm
index 011eada4290..7f72b147f0a 100644
--- a/code/game/objects/items/stacks/sheets/sheet_types.dm
+++ b/code/game/objects/items/stacks/sheets/sheet_types.dm
@@ -106,6 +106,7 @@ GLOBAL_LIST_INIT(metal_recipes, list ( \
merge_type = /obj/item/stack/sheet/metal
grind_results = list(/datum/reagent/iron = 20)
point_value = 2
+ tableVariant = /obj/structure/table
/obj/item/stack/sheet/metal/ratvar_act()
new /obj/item/stack/tile/brass(loc, amount)
@@ -168,6 +169,7 @@ GLOBAL_LIST_INIT(plasteel_recipes, list ( \
merge_type = /obj/item/stack/sheet/plasteel
grind_results = list(/datum/reagent/iron = 20, /datum/reagent/toxin/plasma = 20)
point_value = 23
+ tableVariant = /obj/structure/table/reinforced
/obj/item/stack/sheet/plasteel/Initialize(mapload, new_amount, merge = TRUE)
recipes = GLOB.plasteel_recipes
@@ -593,6 +595,7 @@ GLOBAL_LIST_INIT(bronze_recipes, list ( \
novariants = FALSE
grind_results = list(/datum/reagent/iron = 5, /datum/reagent/copper = 3) //we have no "tin" reagent so this is the closest thing
merge_type = /obj/item/stack/tile/bronze
+ tableVariant = /obj/structure/table/bronze
/obj/item/stack/tile/bronze/attack_self(mob/living/user)
if(is_servant_of_ratvar(user)) //still lets them build with it, just gives a message
diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm
index 46ae0a70a50..a489d2f101f 100644
--- a/code/game/objects/items/stacks/stack.dm
+++ b/code/game/objects/items/stacks/stack.dm
@@ -22,6 +22,7 @@
var/full_w_class = WEIGHT_CLASS_NORMAL //The weight class the stack should have at amount > 2/3rds max_amount
var/novariants = TRUE //Determines whether the item should update it's sprites based on amount.
//NOTE: When adding grind_results, the amounts should be for an INDIVIDUAL ITEM - these amounts will be multiplied by the stack size in on_grind()
+ var/obj/structure/table/tableVariant // we tables now (stores table variant to be built from this stack)
/obj/item/stack/on_grind()
for(var/i in 1 to grind_results.len) //This should only call if it's ground, so no need to check if grind_results exists
diff --git a/code/game/objects/items/stacks/tiles/tile_types.dm b/code/game/objects/items/stacks/tiles/tile_types.dm
index 7a3d077fc47..171f4b8a6e9 100644
--- a/code/game/objects/items/stacks/tiles/tile_types.dm
+++ b/code/game/objects/items/stacks/tiles/tile_types.dm
@@ -105,19 +105,103 @@
item_state = "tile-carpet"
turf_type = /turf/open/floor/carpet
resistance_flags = FLAMMABLE
-
-/obj/item/stack/tile/carpet/fifty
- amount = 50
+ tableVariant = /obj/structure/table/wood/fancy
/obj/item/stack/tile/carpet/black
name = "black carpet"
icon_state = "tile-carpet-black"
item_state = "tile-carpet-black"
turf_type = /turf/open/floor/carpet/black
+ tableVariant = /obj/structure/table/wood/fancy/black
+
+/obj/item/stack/tile/carpet/blue
+ name = "blue carpet"
+ icon_state = "tile-carpet-blue"
+ item_state = "tile-carpet-blue"
+ turf_type = /turf/open/floor/carpet/blue
+ tableVariant = /obj/structure/table/wood/fancy/blue
+
+/obj/item/stack/tile/carpet/cyan
+ name = "cyan carpet"
+ icon_state = "tile-carpet-cyan"
+ item_state = "tile-carpet-cyan"
+ turf_type = /turf/open/floor/carpet/cyan
+ tableVariant = /obj/structure/table/wood/fancy/cyan
+
+/obj/item/stack/tile/carpet/green
+ name = "green carpet"
+ icon_state = "tile-carpet-green"
+ item_state = "tile-carpet-green"
+ turf_type = /turf/open/floor/carpet/green
+ tableVariant = /obj/structure/table/wood/fancy/green
+
+/obj/item/stack/tile/carpet/orange
+ name = "orange carpet"
+ icon_state = "tile-carpet-orange"
+ item_state = "tile-carpet-orange"
+ turf_type = /turf/open/floor/carpet/orange
+ tableVariant = /obj/structure/table/wood/fancy/orange
+
+/obj/item/stack/tile/carpet/purple
+ name = "purple carpet"
+ icon_state = "tile-carpet-purple"
+ item_state = "tile-carpet-purple"
+ turf_type = /turf/open/floor/carpet/purple
+ tableVariant = /obj/structure/table/wood/fancy/purple
+
+/obj/item/stack/tile/carpet/red
+ name = "red carpet"
+ icon_state = "tile-carpet-red"
+ item_state = "tile-carpet-red"
+ turf_type = /turf/open/floor/carpet/red
+ tableVariant = /obj/structure/table/wood/fancy/red
+
+/obj/item/stack/tile/carpet/royalblack
+ name = "royal black carpet"
+ icon_state = "tile-carpet-royalblack"
+ item_state = "tile-carpet-royalblack"
+ turf_type = /turf/open/floor/carpet/royalblack
+ tableVariant = /obj/structure/table/wood/fancy/royalblack
+
+/obj/item/stack/tile/carpet/royalblue
+ name = "royal blue carpet"
+ icon_state = "tile-carpet-royalblue"
+ item_state = "tile-carpet-royalblue"
+ turf_type = /turf/open/floor/carpet/royalblue
+ tableVariant = /obj/structure/table/wood/fancy/royalblue
+
+
+/obj/item/stack/tile/carpet/fifty
+ amount = 50
/obj/item/stack/tile/carpet/black/fifty
amount = 50
+/obj/item/stack/tile/carpet/blue/fifty
+ amount = 50
+
+/obj/item/stack/tile/carpet/cyan/fifty
+ amount = 50
+
+/obj/item/stack/tile/carpet/green/fifty
+ amount = 50
+
+/obj/item/stack/tile/carpet/orange/fifty
+ amount = 50
+
+/obj/item/stack/tile/carpet/purple/fifty
+ amount = 50
+
+/obj/item/stack/tile/carpet/red/fifty
+ amount = 50
+
+/obj/item/stack/tile/carpet/royalblack/fifty
+ amount = 50
+
+/obj/item/stack/tile/carpet/royalblue/fifty
+ amount = 50
+
+
/obj/item/stack/tile/fakespace
name = "astral carpet"
singular_name = "astral carpet"
diff --git a/code/game/objects/structures/table_frames.dm b/code/game/objects/structures/table_frames.dm
index 9520fc76ae2..ef579358cff 100644
--- a/code/game/objects/structures/table_frames.dm
+++ b/code/game/objects/structures/table_frames.dm
@@ -28,62 +28,16 @@
if(I.use_tool(src, user, 30))
playsound(src.loc, 'sound/items/deconstruct.ogg', 50, TRUE)
deconstruct(TRUE)
- else if(istype(I, /obj/item/stack/sheet/plasteel))
- var/obj/item/stack/sheet/plasteel/P = I
- if(P.get_amount() < 1)
- to_chat(user, "You need one plasteel sheet to do this!")
+ return
+
+ var/obj/item/stack/material = I
+ if (istype(I, /obj/item/stack) && material?.tableVariant)
+ if(material.get_amount() < 1)
+ to_chat(user, "You need one [material.name] sheet to do this!")
return
- to_chat(user, "You start adding [P] to [src]...")
- if(do_after(user, 50, target = src) && P.use(1))
- make_new_table(/obj/structure/table/reinforced)
- else if(istype(I, /obj/item/stack/sheet/metal))
- var/obj/item/stack/sheet/metal/M = I
- if(M.get_amount() < 1)
- to_chat(user, "You need one metal sheet to do this!")
- return
- to_chat(user, "You start adding [M] to [src]...")
- if(do_after(user, 20, target = src) && M.use(1))
- make_new_table(/obj/structure/table)
- else if(istype(I, /obj/item/stack/sheet/glass))
- var/obj/item/stack/sheet/glass/G = I
- if(G.get_amount() < 1)
- to_chat(user, "You need one glass sheet to do this!")
- return
- to_chat(user, "You start adding [G] to [src]...")
- if(do_after(user, 20, target = src) && G.use(1))
- make_new_table(/obj/structure/table/glass)
- else if(istype(I, /obj/item/stack/sheet/mineral/silver))
- var/obj/item/stack/sheet/mineral/silver/S = I
- if(S.get_amount() < 1)
- to_chat(user, "You need one silver sheet to do this!")
- return
- to_chat(user, "You start adding [S] to [src]...")
- if(do_after(user, 20, target = src) && S.use(1))
- make_new_table(/obj/structure/table/optable)
- else if(istype(I, /obj/item/stack/tile/carpet/black))
- var/obj/item/stack/tile/carpet/black/C = I
- if(C.get_amount() < 1)
- to_chat(user, "You need one black carpet sheet to do this!")
- return
- to_chat(user, "You start adding [C] to [src]...")
- if(do_after(user, 20, target = src) && C.use(1))
- make_new_table(/obj/structure/table/wood/fancy/black)
- else if(istype(I, /obj/item/stack/tile/carpet))
- var/obj/item/stack/tile/carpet/C = I
- if(C.get_amount() < 1)
- to_chat(user, "You need one carpet sheet to do this!")
- return
- to_chat(user, "You start adding [C] to [src]...")
- if(do_after(user, 20, target = src) && C.use(1))
- make_new_table(/obj/structure/table/wood/fancy)
- else if(istype(I, /obj/item/stack/tile/bronze))
- var/obj/item/stack/tile/bronze/B = I
- if(B.get_amount() < 1)
- to_chat(user, "You need one bronze sheet to do this!")
- return
- to_chat(user, "You start adding [B] to [src]...")
- if(do_after(user, 20, target = src) && B.use(1))
- make_new_table(/obj/structure/table/bronze)
+ to_chat(user, "You start adding [material] to [src]...")
+ if(do_after(user, 20, target = src) && material.use(1))
+ make_new_table(material.tableVariant)
else
return ..()
@@ -119,23 +73,21 @@
resistance_flags = FLAMMABLE
/obj/structure/table_frame/wood/attackby(obj/item/I, mob/user, params)
- if(istype(I, /obj/item/stack/sheet/mineral/wood))
- var/obj/item/stack/sheet/mineral/wood/W = I
- if(W.get_amount() < 1)
- to_chat(user, "You need one wood sheet to do this!")
- return
- to_chat(user, "You start adding [W] to [src]...")
- if(do_after(user, 20, target = src) && W.use(1))
- make_new_table(/obj/structure/table/wood)
- return
- else if(istype(I, /obj/item/stack/tile/carpet))
- var/obj/item/stack/tile/carpet/C = I
- if(C.get_amount() < 1)
- to_chat(user, "You need one carpet sheet to do this!")
- return
- to_chat(user, "You start adding [C] to [src]...")
- if(do_after(user, 20, target = src) && C.use(1))
- make_new_table(/obj/structure/table/wood/poker)
+ 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/wood))
+ toConstruct = /obj/structure/table/wood
+ else if(istype(I, /obj/item/stack/tile/carpet))
+ toConstruct = /obj/structure/table/wood/poker
+
+ 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/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm
index 6687fbc1fa1..90ad4e7b9f6 100644
--- a/code/game/objects/structures/tables_racks.dm
+++ b/code/game/objects/structures/tables_racks.dm
@@ -300,7 +300,16 @@
frame = /obj/structure/table_frame
framestack = /obj/item/stack/rods
buildstack = /obj/item/stack/tile/carpet
- canSmoothWith = list(/obj/structure/table/wood/fancy, /obj/structure/table/wood/fancy/black)
+ canSmoothWith = list(/obj/structure/table/wood/fancy,
+ /obj/structure/table/wood/fancy/black,
+ /obj/structure/table/wood/fancy/blue,
+ /obj/structure/table/wood/fancy/cyan,
+ /obj/structure/table/wood/fancy/green,
+ /obj/structure/table/wood/fancy/orange,
+ /obj/structure/table/wood/fancy/purple,
+ /obj/structure/table/wood/fancy/red,
+ /obj/structure/table/wood/fancy/royalblack,
+ /obj/structure/table/wood/fancy/royalblue)
var/smooth_icon = 'icons/obj/smooth_structures/fancy_table.dmi' // see Initialize()
/obj/structure/table/wood/fancy/Initialize()
@@ -316,6 +325,46 @@
buildstack = /obj/item/stack/tile/carpet/black
smooth_icon = 'icons/obj/smooth_structures/fancy_table_black.dmi'
+/obj/structure/table/wood/fancy/blue
+ icon_state = "fancy_table_blue"
+ buildstack = /obj/item/stack/tile/carpet/blue
+ smooth_icon = 'icons/obj/smooth_structures/fancy_table_blue.dmi'
+
+/obj/structure/table/wood/fancy/cyan
+ icon_state = "fancy_table_cyan"
+ buildstack = /obj/item/stack/tile/carpet/cyan
+ smooth_icon = 'icons/obj/smooth_structures/fancy_table_cyan.dmi'
+
+/obj/structure/table/wood/fancy/green
+ icon_state = "fancy_table_green"
+ buildstack = /obj/item/stack/tile/carpet/green
+ smooth_icon = 'icons/obj/smooth_structures/fancy_table_green.dmi'
+
+/obj/structure/table/wood/fancy/orange
+ icon_state = "fancy_table_orange"
+ buildstack = /obj/item/stack/tile/carpet/orange
+ smooth_icon = 'icons/obj/smooth_structures/fancy_table_orange.dmi'
+
+/obj/structure/table/wood/fancy/purple
+ icon_state = "fancy_table_purple"
+ buildstack = /obj/item/stack/tile/carpet/purple
+ smooth_icon = 'icons/obj/smooth_structures/fancy_table_purple.dmi'
+
+/obj/structure/table/wood/fancy/red
+ icon_state = "fancy_table_red"
+ buildstack = /obj/item/stack/tile/carpet/red
+ smooth_icon = 'icons/obj/smooth_structures/fancy_table_red.dmi'
+
+/obj/structure/table/wood/fancy/royalblack
+ icon_state = "fancy_table_royalblack"
+ buildstack = /obj/item/stack/tile/carpet/royalblack
+ smooth_icon = 'icons/obj/smooth_structures/fancy_table_royalblack.dmi'
+
+/obj/structure/table/wood/fancy/royalblue
+ icon_state = "fancy_table_royalblue"
+ buildstack = /obj/item/stack/tile/carpet/royalblue
+ smooth_icon = 'icons/obj/smooth_structures/fancy_table_royalblue.dmi'
+
/*
* Reinforced tables
*/
diff --git a/code/game/turfs/simulated/floor/fancy_floor.dm b/code/game/turfs/simulated/floor/fancy_floor.dm
index 04953472222..cc037476bab 100644
--- a/code/game/turfs/simulated/floor/fancy_floor.dm
+++ b/code/game/turfs/simulated/floor/fancy_floor.dm
@@ -201,6 +201,46 @@
floor_tile = /obj/item/stack/tile/carpet/black
canSmoothWith = list(/turf/open/floor/carpet/black)
+/turf/open/floor/carpet/blue
+ icon = 'icons/turf/floors/carpet_blue.dmi'
+ floor_tile = /obj/item/stack/tile/carpet/blue
+ canSmoothWith = list(/turf/open/floor/carpet/blue)
+
+/turf/open/floor/carpet/cyan
+ icon = 'icons/turf/floors/carpet_cyan.dmi'
+ floor_tile = /obj/item/stack/tile/carpet/cyan
+ canSmoothWith = list(/turf/open/floor/carpet/cyan)
+
+/turf/open/floor/carpet/green
+ icon = 'icons/turf/floors/carpet_green.dmi'
+ floor_tile = /obj/item/stack/tile/carpet/green
+ canSmoothWith = list(/turf/open/floor/carpet/green)
+
+/turf/open/floor/carpet/orange
+ icon = 'icons/turf/floors/carpet_orange.dmi'
+ floor_tile = /obj/item/stack/tile/carpet/orange
+ canSmoothWith = list(/turf/open/floor/carpet/orange)
+
+/turf/open/floor/carpet/purple
+ icon = 'icons/turf/floors/carpet_purple.dmi'
+ floor_tile = /obj/item/stack/tile/carpet/purple
+ canSmoothWith = list(/turf/open/floor/carpet/purple)
+
+/turf/open/floor/carpet/red
+ icon = 'icons/turf/floors/carpet_red.dmi'
+ floor_tile = /obj/item/stack/tile/carpet/red
+ canSmoothWith = list(/turf/open/floor/carpet/red)
+
+/turf/open/floor/carpet/royalblack
+ icon = 'icons/turf/floors/carpet_royalblack.dmi'
+ floor_tile = /obj/item/stack/tile/carpet/royalblack
+ canSmoothWith = list(/turf/open/floor/carpet/royalblack)
+
+/turf/open/floor/carpet/royalblue
+ icon = 'icons/turf/floors/carpet_royalblue.dmi'
+ floor_tile = /obj/item/stack/tile/carpet/royalblue
+ canSmoothWith = list(/turf/open/floor/carpet/royalblue)
+
/turf/open/floor/carpet/narsie_act(force, ignore_mobs, probability = 20)
. = (prob(probability) || force)
diff --git a/code/modules/cargo/packs.dm b/code/modules/cargo/packs.dm
index c7b7d52d4a1..9782c8aff56 100644
--- a/code/modules/cargo/packs.dm
+++ b/code/modules/cargo/packs.dm
@@ -1507,6 +1507,28 @@
/obj/item/stack/tile/carpet/black/fifty)
crate_name = "premium carpet crate"
+/datum/supply_pack/service/carpet_exotic
+ name = "Exotic Carpet Crate"
+ desc = "Exotic carpets straight from Space Russia, for all your decorating needs. Contains 100 tiles each of 8 different flooring patterns."
+ cost = 4000
+ contains = list(/obj/item/stack/tile/carpet/blue/fifty,
+ /obj/item/stack/tile/carpet/blue/fifty,
+ /obj/item/stack/tile/carpet/cyan/fifty,
+ /obj/item/stack/tile/carpet/cyan/fifty,
+ /obj/item/stack/tile/carpet/green/fifty,
+ /obj/item/stack/tile/carpet/green/fifty,
+ /obj/item/stack/tile/carpet/orange/fifty,
+ /obj/item/stack/tile/carpet/orange/fifty,
+ /obj/item/stack/tile/carpet/purple/fifty,
+ /obj/item/stack/tile/carpet/purple/fifty,
+ /obj/item/stack/tile/carpet/red/fifty,
+ /obj/item/stack/tile/carpet/red/fifty,
+ /obj/item/stack/tile/carpet/royalblue/fifty,
+ /obj/item/stack/tile/carpet/royalblue/fifty,
+ /obj/item/stack/tile/carpet/royalblack/fifty,
+ /obj/item/stack/tile/carpet/royalblack/fifty)
+ crate_name = "exotic carpet crate"
+
/datum/supply_pack/service/lightbulbs
name = "Replacement Lights"
desc = "May the light of Aether shine upon this station! Or at least, the light of forty two light tubes and twenty one light bulbs."
diff --git a/icons/mob/inhands/misc/tiles_lefthand.dmi b/icons/mob/inhands/misc/tiles_lefthand.dmi
index e969fc683ff..d7903fcd483 100644
Binary files a/icons/mob/inhands/misc/tiles_lefthand.dmi and b/icons/mob/inhands/misc/tiles_lefthand.dmi differ
diff --git a/icons/mob/inhands/misc/tiles_righthand.dmi b/icons/mob/inhands/misc/tiles_righthand.dmi
index 6e5c3745556..9295ac73444 100644
Binary files a/icons/mob/inhands/misc/tiles_righthand.dmi and b/icons/mob/inhands/misc/tiles_righthand.dmi differ
diff --git a/icons/obj/smooth_structures/fancy_table_blue.dmi b/icons/obj/smooth_structures/fancy_table_blue.dmi
new file mode 100644
index 00000000000..07e13e99e64
Binary files /dev/null and b/icons/obj/smooth_structures/fancy_table_blue.dmi differ
diff --git a/icons/obj/smooth_structures/fancy_table_cyan.dmi b/icons/obj/smooth_structures/fancy_table_cyan.dmi
new file mode 100644
index 00000000000..4f1a90e33b2
Binary files /dev/null and b/icons/obj/smooth_structures/fancy_table_cyan.dmi differ
diff --git a/icons/obj/smooth_structures/fancy_table_green.dmi b/icons/obj/smooth_structures/fancy_table_green.dmi
new file mode 100644
index 00000000000..ea7f8daa99f
Binary files /dev/null and b/icons/obj/smooth_structures/fancy_table_green.dmi differ
diff --git a/icons/obj/smooth_structures/fancy_table_orange.dmi b/icons/obj/smooth_structures/fancy_table_orange.dmi
new file mode 100644
index 00000000000..fe0375ddbb8
Binary files /dev/null and b/icons/obj/smooth_structures/fancy_table_orange.dmi differ
diff --git a/icons/obj/smooth_structures/fancy_table_purple.dmi b/icons/obj/smooth_structures/fancy_table_purple.dmi
new file mode 100644
index 00000000000..c404a9eb5f4
Binary files /dev/null and b/icons/obj/smooth_structures/fancy_table_purple.dmi differ
diff --git a/icons/obj/smooth_structures/fancy_table_red.dmi b/icons/obj/smooth_structures/fancy_table_red.dmi
new file mode 100644
index 00000000000..8bca0ca8c94
Binary files /dev/null and b/icons/obj/smooth_structures/fancy_table_red.dmi differ
diff --git a/icons/obj/smooth_structures/fancy_table_royalblack.dmi b/icons/obj/smooth_structures/fancy_table_royalblack.dmi
new file mode 100644
index 00000000000..064b7c1945e
Binary files /dev/null and b/icons/obj/smooth_structures/fancy_table_royalblack.dmi differ
diff --git a/icons/obj/smooth_structures/fancy_table_royalblue.dmi b/icons/obj/smooth_structures/fancy_table_royalblue.dmi
new file mode 100644
index 00000000000..9d0eba7265e
Binary files /dev/null and b/icons/obj/smooth_structures/fancy_table_royalblue.dmi differ
diff --git a/icons/obj/structures.dmi b/icons/obj/structures.dmi
index 897508fa8cf..baa3ba9bf59 100644
Binary files a/icons/obj/structures.dmi and b/icons/obj/structures.dmi differ
diff --git a/icons/obj/tiles.dmi b/icons/obj/tiles.dmi
index 5eab800ca26..fc13cf35116 100644
Binary files a/icons/obj/tiles.dmi and b/icons/obj/tiles.dmi differ
diff --git a/icons/turf/floors/carpet_blue.dmi b/icons/turf/floors/carpet_blue.dmi
new file mode 100644
index 00000000000..f797be9745a
Binary files /dev/null and b/icons/turf/floors/carpet_blue.dmi differ
diff --git a/icons/turf/floors/carpet_cyan.dmi b/icons/turf/floors/carpet_cyan.dmi
new file mode 100644
index 00000000000..feca351ca92
Binary files /dev/null and b/icons/turf/floors/carpet_cyan.dmi differ
diff --git a/icons/turf/floors/carpet_green.dmi b/icons/turf/floors/carpet_green.dmi
new file mode 100644
index 00000000000..fdd1f071f70
Binary files /dev/null and b/icons/turf/floors/carpet_green.dmi differ
diff --git a/icons/turf/floors/carpet_orange.dmi b/icons/turf/floors/carpet_orange.dmi
new file mode 100644
index 00000000000..ddf239b63b2
Binary files /dev/null and b/icons/turf/floors/carpet_orange.dmi differ
diff --git a/icons/turf/floors/carpet_purple.dmi b/icons/turf/floors/carpet_purple.dmi
new file mode 100644
index 00000000000..c1f40ec7fa8
Binary files /dev/null and b/icons/turf/floors/carpet_purple.dmi differ
diff --git a/icons/turf/floors/carpet_red.dmi b/icons/turf/floors/carpet_red.dmi
new file mode 100644
index 00000000000..926655688ed
Binary files /dev/null and b/icons/turf/floors/carpet_red.dmi differ
diff --git a/icons/turf/floors/carpet_royalblack.dmi b/icons/turf/floors/carpet_royalblack.dmi
new file mode 100644
index 00000000000..bc5cef1cf0e
Binary files /dev/null and b/icons/turf/floors/carpet_royalblack.dmi differ
diff --git a/icons/turf/floors/carpet_royalblue.dmi b/icons/turf/floors/carpet_royalblue.dmi
new file mode 100644
index 00000000000..841e49e957b
Binary files /dev/null and b/icons/turf/floors/carpet_royalblue.dmi differ