diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm
index e5b26cc3038..7ad4d7adb45 100644
--- a/code/defines/obj/weapon.dm
+++ b/code/defines/obj/weapon.dm
@@ -135,42 +135,6 @@
w_class = 2.0
flags = NOSHIELD
-/obj/item/weapon/table_parts
- name = "table parts"
- desc = "Parts of a table. Poor table."
- gender = PLURAL
- icon = 'icons/obj/items.dmi'
- icon_state = "table_parts"
- var/table_type = /obj/structure/table
- var/construct_delay = 50
- m_amt = 3750
- flags = CONDUCT
- attack_verb = list("slammed", "bashed", "battered", "bludgeoned", "thrashed", "whacked")
-
-/obj/item/weapon/table_parts/reinforced
- name = "reinforced table parts"
- desc = "Hard table parts. Well...harder..."
- icon = 'icons/obj/items.dmi'
- icon_state = "reinf_tableparts"
- table_type = /obj/structure/table/reinforced
- construct_delay = 100
- m_amt = 7500
- flags = CONDUCT
-
-/obj/item/weapon/table_parts/wood
- name = "wooden table parts"
- desc = "Keep away from fire."
- icon_state = "wood_tableparts"
- table_type = /obj/structure/table/woodentable
- flags = null
-
-/obj/item/weapon/table_parts/wood/poker
- name = "poker table parts"
- desc = "Keep away from fire, and keep near seedy dealers."
- icon_state = "poker_tableparts"
- table_type = /obj/structure/table/woodentable/poker
- flags = null
-
/obj/item/weapon/module
icon = 'icons/obj/module.dmi'
icon_state = "std_module"
diff --git a/code/game/asteroid.dm b/code/game/asteroid.dm
index eff9492c13c..9721d00d06c 100644
--- a/code/game/asteroid.dm
+++ b/code/game/asteroid.dm
@@ -72,7 +72,7 @@ proc/make_mining_asteroid_secret()
treasureitems = list(/obj/item/device/soulstone=1, /obj/item/clothing/suit/space/cult=1, /obj/item/weapon/bedsheet/cult=2,
/obj/item/clothing/suit/cultrobes=2, /mob/living/simple_animal/hostile/creature=3)
fluffitems = list(/obj/effect/gateway=1,/obj/effect/gibspawner=1,/obj/structure/cult/talisman=1,/obj/item/toy/crayon/red=2,
- /obj/item/organ/heart=2, /obj/effect/decal/cleanable/blood=4,/obj/structure/table/woodentable=2,/obj/item/weapon/ectoplasm=3,
+ /obj/item/organ/heart=2, /obj/effect/decal/cleanable/blood=4,/obj/structure/table/wood=2,/obj/item/weapon/ectoplasm=3,
/obj/item/clothing/head/helmet/space/cult=1, /obj/item/clothing/shoes/cult=1)
if("wizden")
@@ -115,7 +115,7 @@ proc/make_mining_asteroid_secret()
floortypes = list(/turf/simulated/floor,/turf/simulated/floor/wood)
treasureitems = list(/obj/item/weapon/melee/energy/sword/pirate=1,/obj/item/weapon/gun/projectile/revolver/doublebarrel=1,/obj/item/weapon/storage/backpack/satchel_flat=1,
/obj/machinery/reagentgrinder=2, /obj/machinery/computer/security/wooden_tv=4, /obj/machinery/vending/coffee=3)
- fluffitems = list(/obj/structure/table/woodentable=2,/obj/structure/reagent_dispensers/beerkeg=1,/obj/item/weapon/spacecash/c500=4,
+ fluffitems = list(/obj/structure/table/wood=2,/obj/structure/reagent_dispensers/beerkeg=1,/obj/item/weapon/spacecash/c500=4,
/obj/item/weapon/reagent_containers/food/drinks/shaker=1,/obj/item/weapon/reagent_containers/food/drinks/bottle/wine=3,
/obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey=3,/obj/item/clothing/shoes/laceup=2)
diff --git a/code/game/gamemodes/changeling/powers/mutations.dm b/code/game/gamemodes/changeling/powers/mutations.dm
index 5781e7e7208..9fc79f95186 100644
--- a/code/game/gamemodes/changeling/powers/mutations.dm
+++ b/code/game/gamemodes/changeling/powers/mutations.dm
@@ -144,7 +144,7 @@
return
if(istype(target, /obj/structure/table))
var/obj/structure/table/T = target
- T.table_destroy(1, user)
+ T.table_destroy(1)
else if(istype(target, /obj/machinery/computer))
var/obj/machinery/computer/C = target
diff --git a/code/game/objects/items/stacks/rods.dm b/code/game/objects/items/stacks/rods.dm
index 4264f29e542..11d96de6459 100644
--- a/code/game/objects/items/stacks/rods.dm
+++ b/code/game/objects/items/stacks/rods.dm
@@ -1,3 +1,7 @@
+var/global/list/datum/stack_recipe/rod_recipes = list ( \
+ new/datum/stack_recipe("grille", /obj/structure/grille, 2, time = 10, one_per_turf = 1, on_floor = 1), \
+ )
+
/obj/item/stack/rods
name = "metal rod"
desc = "Some rods. Can be used for building, or something."
@@ -14,6 +18,10 @@
attack_verb = list("hit", "bludgeoned", "whacked")
hitsound = 'sound/weapons/grenadelaunch.ogg'
+/obj/item/stack/rods/New(var/loc, var/amount=null)
+ recipes = rod_recipes
+ return ..()
+
/obj/item/stack/rods/attackby(obj/item/W as obj, mob/user as mob)
..()
if (istype(W, /obj/item/weapon/weldingtool))
@@ -37,34 +45,16 @@
return
..()
-
-/obj/item/stack/rods/attack_self(mob/user as mob)
- src.add_fingerprint(user)
-
- if(!istype(user.loc,/turf)) return 0
-
- if (locate(/obj/structure/grille, usr.loc))
- for(var/obj/structure/grille/G in usr.loc)
- if (G.destroyed)
- G.health = 10
- G.density = 1
- G.destroyed = 0
- G.icon_state = "grille"
- use(1)
- else
- return 1
- else
- if(get_amount() < 2)
- user << "You need at least two rods to do this."
- return
- usr << "Assembling grille..."
- if (!do_after(usr, 10))
- return
- var/obj/structure/grille/F = new /obj/structure/grille/ ( usr.loc )
- usr << "You assemble a grille."
- F.add_fingerprint(usr)
- use(2)
- return
+/obj/item/stack/rods/attack(var/obj/structure/grille/G, mob/user)
+ ..()
+ if(istype(G, /obj/structure/grille))
+ if (G.destroyed)
+ user << "You rebuild the broken grille."
+ G.health = 10
+ G.density = 1
+ G.destroyed = 0
+ G.icon_state = "grille"
+ use(1)
/obj/item/stack/rods/cyborg/
m_amt = 0
diff --git a/code/game/objects/items/weapons/table_rack_parts.dm b/code/game/objects/items/weapons/table_rack_parts.dm
index ecea8326990..e69de29bb2d 100644
--- a/code/game/objects/items/weapons/table_rack_parts.dm
+++ b/code/game/objects/items/weapons/table_rack_parts.dm
@@ -1,97 +0,0 @@
-/* Table parts and rack parts
- * Contains:
- * Table Parts
- * Reinforced Table Parts
- * Wooden Table Parts
- * Rack Parts
- */
-
-
-
-/*
- * Table Parts
- */
-/obj/item/weapon/table_parts/attackby(obj/item/weapon/W as obj, mob/user as mob)
- ..()
- if (istype(W, /obj/item/weapon/wrench))
- new /obj/item/stack/sheet/metal( user.loc )
- //SN src = null
- qdel(src)
- if (istype(W, /obj/item/stack/rods))
- var/obj/item/stack/rods/V = W
- if (V.use(4))
- new /obj/item/weapon/table_parts/reinforced( user.loc )
- user << "You reinforce the [name]."
- qdel(src)
- else
- user << "You need four rods to reinforce table parts."
- return
-
-/obj/item/weapon/table_parts/attack_self(mob/user as mob)
- user << "Constructing table.."
- if (do_after(user, construct_delay))
- var/obj/new_table = new table_type( user.loc )
- new_table.add_fingerprint(user)
- user.drop_item()
- qdel(src)
- return
-
-/*
- * Reinforced Table Parts
- */
-/obj/item/weapon/table_parts/reinforced/attackby(obj/item/weapon/W as obj, mob/user as mob)
- if (istype(W, /obj/item/weapon/wrench))
- new /obj/item/stack/sheet/metal( user.loc )
- new /obj/item/stack/rods( user.loc )
- qdel(src)
-
-/*
- * Wooden Table Parts
- */
-/obj/item/weapon/table_parts/wood/attackby(obj/item/weapon/W as obj, mob/user as mob)
- if (istype(W, /obj/item/weapon/wrench))
- new /obj/item/stack/sheet/mineral/wood( user.loc )
- qdel(src)
-
- if (istype(W, /obj/item/stack/tile/grass))
- var/obj/item/stack/tile/grass/Grass = W
- if(Grass.amount > 1)
- Grass.amount -= 1
- else
- qdel(Grass)
- var/obj/item/weapon/table_parts/wood/poker/P = new
- user.put_in_hands(P)
- visible_message("[user] adds grass to the wooden table parts")
-
- qdel(src)
-
-
-/*
- * Poker Table Parts
- */
-
-/obj/item/weapon/table_parts/wood/poker/attackby(obj/item/weapon/W as obj, mob/user as mob)
- if (istype(W, /obj/item/weapon/wrench))
- new /obj/item/stack/sheet/mineral/wood( user.loc )
- new /obj/item/stack/tile/grass( user.loc )
- qdel(src)
-
-/*
- * Rack Parts
- */
-/obj/item/weapon/rack_parts/attackby(obj/item/weapon/W as obj, mob/user as mob)
- ..()
- if (istype(W, /obj/item/weapon/wrench))
- new /obj/item/stack/sheet/metal( user.loc )
- qdel(src)
- return
- return
-
-/obj/item/weapon/rack_parts/attack_self(mob/user as mob)
- user << "Constructing rack..."
- if (do_after(user, 50))
- var/obj/structure/rack/R = new /obj/structure/rack( user.loc )
- R.add_fingerprint(user)
- user.drop_item()
- qdel(src)
- return
diff --git a/code/game/objects/structures/table_frames.dm b/code/game/objects/structures/table_frames.dm
new file mode 100644
index 00000000000..33c404d136e
--- /dev/null
+++ b/code/game/objects/structures/table_frames.dm
@@ -0,0 +1,43 @@
+/* Table Frames
+ * Contains:
+ * Frames
+ * Wooden Frames
+ * Reinforced Frames
+ */
+
+
+/*
+ * Normal Frames
+ */
+
+/obj/structure/table_frame
+ name = "table frame"
+ desc = "Four metal legs with four framing rods for a table. You could easily pass through this."
+ icon = 'icons/obj/structures.dmi'
+ icon_state = "table_frame"
+ density = 0
+ anchored = 0
+ layer = 2.8
+
+/obj/structure/table_frame/attackby()
+
+/*
+ * Wooden Frames
+ */
+
+/obj/structure/table_frame/wood
+ name = "wooden table frame"
+ desc = "Four wooden legs with four framing wooden rods for a wooden table. You could easily pass through this."
+ icon_state = "wood_frame"
+
+ /*
+ * Reinforced Frames
+ */
+
+/obj/structure/table_frame/reinforced
+ name = "reinforced table frame"
+ desc = "Four metal legs with four framing rods for a table. They seem especially reinforced."
+ icon_state = "reinforced_frame"
+ density = 1
+ anchored = 1
+ throwpass = 1
\ No newline at end of file
diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm
index 82b9f69e9bd..58c92f4338a 100644
--- a/code/game/objects/structures/tables_racks.dm
+++ b/code/game/objects/structures/tables_racks.dm
@@ -1,12 +1,13 @@
/* Tables and Racks
* Contains:
* Tables
- * Wooden tables
- * Reinforced tables
+ * Glass Tables
+ * Wooden Tables
+ * Reinforced Tables
* Racks
+ * Rack Parts
*/
-
/*
* Tables
*/
@@ -20,8 +21,9 @@
anchored = 1.0
layer = 2.8
throwpass = 1 //You can throw objects over this, despite it's density.")
- var/parts = /obj/item/weapon/table_parts
+ var/frame = /obj/structure/table_frame
var/busy = 0
+ var/health = 15
/obj/structure/table/New()
..()
@@ -195,69 +197,34 @@
/obj/structure/table/blob_act()
if(prob(75))
- if(istype(src, /obj/structure/table/woodentable))
- new /obj/item/weapon/table_parts/wood( src.loc )
- qdel(src)
- return
- new /obj/item/weapon/table_parts( src.loc )
+ table_destroy(1)
qdel(src)
return
-/obj/structure/table/attack_paw(mob/user)
- if(HULK in user.mutations)
- user.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ))
- visible_message("[user] smashes the table apart!")
- if(istype(src, /obj/structure/table/reinforced))
- new /obj/item/weapon/table_parts/reinforced(loc)
- else if(istype(src, /obj/structure/table/woodentable))
- new/obj/item/weapon/table_parts/wood(loc)
- else
- new /obj/item/weapon/table_parts(loc)
- density = 0
- qdel(src)
-
-
/obj/structure/table/attack_alien(mob/user)
visible_message("[user] slices [src] apart!")
- if(istype(src, /obj/structure/table/reinforced))
- new /obj/item/weapon/table_parts/reinforced(loc)
- else if(istype(src, /obj/structure/table/woodentable))
- new/obj/item/weapon/table_parts/wood(loc)
- else
- new /obj/item/weapon/table_parts(loc)
- density = 0
- qdel(src)
-
+ table_destroy(1)
/obj/structure/table/attack_animal(mob/living/simple_animal/user)
if(user.environment_smash)
visible_message("[user] smashes [src] apart!")
- if(istype(src, /obj/structure/table/reinforced))
- new /obj/item/weapon/table_parts/reinforced(loc)
- else if(istype(src, /obj/structure/table/woodentable))
- new/obj/item/weapon/table_parts/wood(loc)
- else
- new /obj/item/weapon/table_parts(loc)
- density = 0
- qdel(src)
-
-
+ table_destroy(1)
+/obj/structure/table/attack_paw(mob/user)
+ attack_hand(user)
/obj/structure/table/attack_hand(mob/user)
+ user.changeNext_move(CLICK_CD_MELEE)
if(HULK in user.mutations)
visible_message("[user] smashes [src] apart!")
user.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ))
- if(istype(src, /obj/structure/table/reinforced))
- new /obj/item/weapon/table_parts/reinforced(loc)
- else if(istype(src, /obj/structure/table/woodentable))
- new/obj/item/weapon/table_parts/wood(loc)
- else
- new /obj/item/weapon/table_parts(loc)
- density = 0
- qdel(src)
+ table_destroy(1)
else
- ..()
+ playsound(loc, 'sound/items/dodgeball.ogg', 80, 1)
+ user.visible_message("[user] kicks [src].", \
+ "You kick [src].")
+ health -= rand(1,2)
+ healthcheck()
/obj/structure/table/attack_tk() // no telehulk sorry
return
@@ -304,14 +271,14 @@
qdel(I)
return
- if (istype(I, /obj/item/weapon/wrench))
+ if (istype(I, /obj/item/weapon/screwdriver))
if(istype(src, /obj/structure/table/reinforced))
var/obj/structure/table/reinforced/RT = src
if(RT.status == 1)
- table_destroy(2, user)
+ table_destroy(2)
return
else
- table_destroy(2, user)
+ table_destroy(2)
return
if (istype(I, /obj/item/weapon/storage/bag/tray))
@@ -336,14 +303,19 @@
SS.start()
playsound(src.loc, 'sound/weapons/blade1.ogg', 50, 1)
playsound(src.loc, "sparks", 50, 1)
- table_destroy(1, user)
+ user.visible_message("The [src.name] was sliced apart by [user]!")
+ table_destroy(1)
return
if(!(I.flags & ABSTRACT)) //rip more parems rip in peace ;_;
if(user.drop_item())
I.Move(loc)
-/obj/structure/table/proc/table_destroy(var/destroy_type, var/mob/user as mob)
+/obj/structure/table/proc/healthcheck()
+ if(health <= 0)
+ table_destroy(1)
+ return
+
/*
Destroy type values:
@@ -351,47 +323,100 @@ Destroy type values:
2 = Deconstruction.
*/
+/obj/structure/table/proc/table_destroy(var/destroy_type, var/mob/user as mob)
+
if(destroy_type == 1)
- user.visible_message("The table was sliced apart by [user]!")
- new parts( src.loc )
+ if(istype(src, /obj/structure/table/reinforced))
+ new /obj/item/stack/sheet/plasteel(src.loc)
+ new /obj/item/stack/rods(src.loc)
+ else if(istype(src, /obj/structure/table/wood))
+ new/obj/item/stack/sheet/mineral/wood(src.loc)
+ new/obj/item/stack/sheet/mineral/wood(src.loc)
+ else if(istype(src, /obj/structure/table/wood/poker))
+ new/obj/item/stack/tile/carpet(src.loc)
+ new/obj/item/stack/sheet/mineral/wood(src.loc)
+ else if(istype(src, /obj/structure/table/glass))
+ new /obj/item/stack/sheet/glass(src.loc)
+ new /obj/item/stack/rods(src.loc)
+ else
+ new /obj/item/stack/sheet/metal(src.loc)
+ new /obj/item/stack/rods(src.loc)
+ density = 0
qdel(src)
return
if(destroy_type == 2)
- user << "Now disassembling the [src.name]"
- playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
+ user << "Now disassembling [src]"
+ playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
if (do_after(user, 50))
- new parts( src.loc )
- playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
+ new frame(src.loc)
+ if(istype(src, /obj/structure/table/reinforced))
+ new /obj/item/stack/sheet/plasteel(src.loc)
+ else if(istype(src, /obj/structure/table/wood))
+ new/obj/item/stack/sheet/mineral/wood(src.loc)
+ else if(istype(src, /obj/structure/table/wood/poker))
+ new/obj/item/stack/tile/carpet(src.loc)
+ else if(istype(src, /obj/structure/table/glass))
+ new /obj/item/stack/sheet/glass(src.loc)
+ else
+ new /obj/item/stack/sheet/metal(src.loc)
qdel(src)
return
+/*
+ * TABLE CLIMBING
+ */
+/obj/structure/table/MouseDrop_T(mob/target, mob/living/carbon/human/user)
+ if(istype(target) && user == target && istype(user))
+ if(user.canmove)
+ climb_table(user)
+
+/obj/structure/table/proc/climb_table(mob/user)
+ src.add_fingerprint(user)
+ user.visible_message("[user] starts climbing onto [src].", \
+ "[user] starts climbing onto [src].")
+ if(do_mob(user, user, 20))
+ user.pass_flags += PASSTABLE
+ step(user,get_dir(user,src.loc))
+ user.pass_flags -= PASSTABLE
+ user.visible_message("[user] climbs onto [src].", \
+ "[user] climbs onto [src].")
+ add_logs(user, src, "climbed onto")
+ user.Stun(2)
+
+
+/*
+ * Glass tables
+ */
+/obj/structure/table/glass
+ name = "glass table"
+ desc = "What did I say about leaning on the glass tables? Now you need surgery."
+ icon_state = "glass_table"
/*
* Wooden tables
*/
-/obj/structure/table/woodentable
+/obj/structure/table/wood
name = "wooden table"
desc = "Do not apply fire to this. Rumour says it burns easily."
icon_state = "woodtable"
- parts = /obj/item/weapon/table_parts/wood
+ frame = /obj/item/weapon/table_frame/wood
-/obj/structure/table/woodentable/poker //No specialties, Just a mapping object.
+/obj/structure/table/wood/poker //No specialties, Just a mapping object.
name = "gambling table"
desc = "A seedy table for seedy dealings in seedy places."
icon_state = "pokertable"
- parts = /obj/item/weapon/table_parts/wood/poker
/*
* Reinforced tables
*/
/obj/structure/table/reinforced
name = "reinforced table"
- desc = "A version of the four legged table. It is stronger."
+ desc = "A reinforced version of the four legged table, much harder to simply deconstruct."
icon_state = "reinftable"
- parts = /obj/item/weapon/table_parts/reinforced
+ frame = /obj/item/weapon/table_frame/reinforced
var/status = 2
@@ -416,23 +441,17 @@ Destroy type values:
return
..()
-/obj/structure/table/MouseDrop_T(mob/target, mob/living/carbon/human/user)
- if(istype(target) && user == target && istype(user))
- if(user.canmove)
- climb_table(user)
-/obj/structure/table/proc/climb_table(mob/user)
- src.add_fingerprint(user)
- user.visible_message("[user] starts climbing onto [src].", \
- "[user] starts climbing onto [src].")
- if(do_mob(user, user, 20))
- user.pass_flags += PASSTABLE
- step(user,get_dir(user,src.loc))
- user.pass_flags -= PASSTABLE
- user.visible_message("[user] climbs onto [src].", \
- "[user] climbs onto [src].")
- add_logs(user, src, "climbed onto")
- user.Stun(2)
+/obj/structure/table/reinforced/attack_paw(mob/user)
+ attack_hand(user)
+
+/obj/structure/table/reinforced/attack_hand(mob/user)
+ if(HULK in user.mutations)
+ visible_message("[user] smashes [src] apart!")
+ user.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ))
+ table_destroy(1)
+ else
+ return
/*
* Racks
@@ -445,6 +464,7 @@ Destroy type values:
density = 1
anchored = 1.0
throwpass = 1 //You can throw objects over this, despite it's density.
+ var/health = 5
/obj/structure/rack/ex_act(severity)
switch(severity)
@@ -505,22 +525,20 @@ Destroy type values:
return 1
-/obj/structure/rack/attack_hand(mob/user)
- if(HULK in user.mutations)
- visible_message("[user] smashes [src] apart!")
- user.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ))
- new /obj/item/weapon/rack_parts(loc)
- density = 0
- qdel(src)
+/obj/structure/rack/attack_paw(mob/user as mob)
+ attack_hand(user)
+/obj/structure/rack/attack_hand(mob/user as mob)
+ user.changeNext_move(CLICK_CD_MELEE)
+ playsound(loc, 'sound/items/dodgeball.ogg', 80, 1)
+ user.visible_message("[user] kicks [src].", \
+ "You kick [src].")
-/obj/structure/rack/attack_paw(mob/user)
if(HULK in user.mutations)
- user.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ))
- visible_message("[user] smashes [src] apart!")
- new /obj/item/weapon/rack_parts(loc)
- density = 0
- qdel(src)
+ health -= 5
+ else
+ health -= rand(1,2)
+ healthcheck()
/obj/structure/rack/attack_alien(mob/user)
@@ -538,3 +556,31 @@ Destroy type values:
qdel(src)
/obj/structure/rack/attack_tk() // no telehulk sorry
return
+
+/obj/structure/rack/proc/healthcheck()
+ if(health <= 0)
+ density = 0
+ var/obj/item/weapon/rack_parts/newparts = new(loc)
+ transfer_fingerprints_to(newparts)
+ return
+
+/*
+ * Rack Parts
+ */
+
+/obj/item/weapon/rack_parts/attackby(obj/item/weapon/W as obj, mob/user as mob)
+ ..()
+ if (istype(W, /obj/item/weapon/wrench))
+ new /obj/item/stack/sheet/metal( user.loc )
+ qdel(src)
+ return
+ return
+
+/obj/item/weapon/rack_parts/attack_self(mob/user as mob)
+ user << "Constructing rack..."
+ if (do_after(user, 50))
+ var/obj/structure/rack/R = new /obj/structure/rack( user.loc )
+ R.add_fingerprint(user)
+ user.drop_item()
+ qdel(src)
+ return
\ No newline at end of file
diff --git a/icons/obj/structures.dmi b/icons/obj/structures.dmi
index 0f7700a18ea..37cb31eb248 100644
Binary files a/icons/obj/structures.dmi and b/icons/obj/structures.dmi differ