From acc3755a985b323109b1f866680c6f67c08d1a0b Mon Sep 17 00:00:00 2001 From: Tigercat2000 Date: Mon, 13 Apr 2015 06:29:05 -0700 Subject: [PATCH] Adds glass tables, glass table frames This commit adds glass tables (credit to WalterJe of -tg-'s fourms for the sprites) to the game. These can be constructed with two metal sheets, and two glass sheets. Flipping the table causes it to shatter and deconstruct itself. You can deconstruct the table at any stage with a wrench. --- code/defines/obj/weapon.dm | 6 + .../items/stacks/sheets/sheet_types.dm | 1 + .../objects/items/weapons/table_rack_parts.dm | 15 +++ code/game/objects/structures/tables_racks.dm | 119 ++++++++++++++++++ icons/obj/items.dmi | Bin 82496 -> 82829 bytes icons/obj/structures.dmi | Bin 160031 -> 162259 bytes 6 files changed, 141 insertions(+) diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm index c8e76fa8ac9..2462c13c2a7 100644 --- a/code/defines/obj/weapon.dm +++ b/code/defines/obj/weapon.dm @@ -485,6 +485,12 @@ icon_state = "wood_tableparts" flags = null +/obj/item/weapon/table_parts/glass + name = "glass table parts" + desc = "fragile!" + icon_state = "glass_tableparts" + flags = null + /obj/item/weapon/wire desc = "This is just a simple piece of regular insulated wire." name = "wire" diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index 69ab0899003..72aa63abf2e 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -28,6 +28,7 @@ var/global/list/datum/stack_recipe/metal_recipes = list ( \ ), 2), \ null, \ new/datum/stack_recipe("table parts", /obj/item/weapon/table_parts, 2), \ + new/datum/stack_recipe("glass table frame parts", /obj/item/weapon/table_parts/glass, 2), \ new/datum/stack_recipe("rack parts", /obj/item/weapon/rack_parts), \ new/datum/stack_recipe("closet", /obj/structure/closet, 2, time = 15, one_per_turf = 1, on_floor = 1), \ null, \ diff --git a/code/game/objects/items/weapons/table_rack_parts.dm b/code/game/objects/items/weapons/table_rack_parts.dm index 2c2b44ae387..03a07d4a2d1 100644 --- a/code/game/objects/items/weapons/table_rack_parts.dm +++ b/code/game/objects/items/weapons/table_rack_parts.dm @@ -62,6 +62,21 @@ del(src) return +/* + * Glass Table Parts + */ +/obj/item/weapon/table_parts/glass/attackby(obj/item/weapon/W as obj, mob/user as mob, params) + if (istype(W, /obj/item/weapon/wrench)) + new /obj/item/stack/sheet/metal( user.loc ) + new /obj/item/stack/sheet/metal( user.loc ) + del(src) + +/obj/item/weapon/table_parts/glass/attack_self(mob/user as mob) + new /obj/structure/glasstable_frame( user.loc ) + user.drop_item() + del(src) + return + /* * Rack Parts */ diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index 46558088bc8..0e9e4c5df39 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -237,6 +237,22 @@ icon_state = "wood_tabledir2" if(6) icon_state = "wood_tabledir3" + else if(istype(src,/obj/structure/table/glass)) + switch(table_type) + if(0) + icon_state = "glass_table" + if(1) + icon_state = "glass_table_1tileendtable" + if(2) + icon_state = "glass_table_1tilethick" + if(3) + icon_state = "glass_table_dir" + if(4) + icon_state = "glass_table_middle" + if(5) + icon_state = "glass_tabledir2" + if(6) + icon_state = "glass_tabledir3" else switch(table_type) if(0) @@ -668,6 +684,109 @@ return 1 +/obj/structure/glasstable_frame + name = "glass table frame" + desc = "A metal frame for a glass table." + icon = 'icons/obj/structures.dmi' + icon_state = "glass_table_frame" + density = 1 + +/obj/structure/glasstable_frame/attackby(obj/item/I as obj, mob/user as mob, params) + if(istype(I, /obj/item/stack/sheet/glass)) + var/obj/item/stack/sheet/glass/G = I + if(G.amount >= 2) + user << "You start to add the glass to \the [src]." + if(do_after(user, 10)) + G.use(2) + user << "You add the glass to \the [src]." + playsound(get_turf(src), 'sound/items/Deconstruct.ogg', 50, 1) + new /obj/structure/table/glass(loc) + del(src) + else + user << "You don't have enough glass! You need at least 2 sheets." + return + + if(iswrench(I)) + user << "You start to deconstruct \the [src]." + playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1) + if(do_after(user, 10)) + playsound(src.loc, 'sound/items/Deconstruct.ogg', 75, 1) + user << "You dismantle \the [src]." + new /obj/item/stack/sheet/metal(loc) + new /obj/item/stack/sheet/metal(loc) + del(src) + +/obj/structure/table/glass + name = "glass table" + desc = "Looks fragile. You should totally flip it. It's begging you too." + icon_state = "glass_table" + parts = /obj/item/weapon/table_parts/glass + health = 10 + +/obj/structure/table/glass/flip(var/direction) + src.visible_message("\The [src] shatters, and the frame collapses!") + new /obj/item/weapon/table_parts/glass(loc) + getFromPool(/obj/item/weapon/shard, loc) + if(prob(50)) //50% chance to spawn two shards + getFromPool(/obj/item/weapon/shard, loc) + qdel(src) + +/obj/structure/table/glass/attackby(obj/item/I as obj, mob/user as mob, params) + + if (istype(I, /obj/item/weapon/grab)) + var/obj/item/weapon/grab/G = I + if(G.affecting.buckled) + user << "[G.affecting] is buckled to [G.affecting.buckled]!" + return + if(G.state < GRAB_AGGRESSIVE) + user << "You need a better grip to do that!" + return + if(!G.confirm()) + return + G.affecting.loc = src.loc + G.affecting.Weaken(5) + visible_message("\red [G.assailant] puts [G.affecting] on the table.") + del(I) + return + + if (istype(I, /obj/item/weapon/wrench)) + user << "\blue Now disassembling the glass table" + playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) + sleep(50) + new /obj/item/weapon/table_parts/glass( src.loc ) + new /obj/item/stack/sheet/glass( src.loc ) + playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) + del(src) + return + + if(isrobot(user)) + return + if(istype(I, /obj/item/weapon/melee/energy/blade)) + var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread() + spark_system.set_up(5, 0, src.loc) + spark_system.start() + playsound(src.loc, 'sound/weapons/blade1.ogg', 50, 1) + playsound(src.loc, "sparks", 50, 1) + for(var/mob/O in viewers(user, 4)) + O.show_message("\blue The wooden table was sliced apart by [user]!", 1, "\red You hear glass being sliced apart.", 2) + new /obj/item/weapon/table_parts/glass( src.loc ) + new /obj/item/stack/sheet/glass( src.loc ) + del(src) + return + + if(!(I.flags & ABSTRACT)) + if(user.drop_item()) + I.Move(loc) + var/list/click_params = params2list(params) + //Center the icon where the user clicked. + if(!click_params || !click_params["icon-x"] || !click_params["icon-y"]) + return + //Clamp it so that the icon never moves more than 16 pixels in either direction (thus leaving the table turf) + I.pixel_x = Clamp(text2num(click_params["icon-x"]) - 16, -(world.icon_size/2), world.icon_size/2) + I.pixel_y = Clamp(text2num(click_params["icon-y"]) - 16, -(world.icon_size/2), world.icon_size/2) + + return 1 + /* * Reinforced tables diff --git a/icons/obj/items.dmi b/icons/obj/items.dmi index 18b76b545582fb09b8f5e41daf03c0610f4fe92b..6025a1d5cdbd0d940dc3646baea39a88c6ddc6ba 100644 GIT binary patch delta 62957 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