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