From 026e6ee7728d34a4eb3c2563d2f0462c925d9fa9 Mon Sep 17 00:00:00 2001 From: Vincent Date: Thu, 26 Nov 2015 21:11:54 -0500 Subject: [PATCH] Sets up the the ABSTRACT flag to be used by machines and structures that should not be disassembled or break into parts. This is specifically used by the holodeck for things that should be immune to disassembly. Fixes invisible windoors in the holodeck. Standardizes the fire axe's interaction with windows. Fixes a runtime with holodeck tiles getting broken or burned. --- code/game/machinery/computer/computer.dm | 2 +- code/game/machinery/doors/windowdoor.dm | 124 +++++++++--------- code/game/machinery/machinery.dm | 10 +- code/game/objects/items/weapons/twohanded.dm | 15 +-- .../objects/structures/beds_chairs/bed.dm | 2 +- .../structures/crates_lockers/closets.dm | 3 +- code/game/objects/structures/tables_racks.dm | 41 +++--- code/game/objects/structures/window.dm | 122 ++++++++--------- code/modules/holodeck/computer_funcs.dm | 10 ++ code/modules/holodeck/tables.dm | 44 ------- code/modules/holodeck/turfs.dm | 4 +- code/modules/holodeck/windows.dm | 18 +-- 12 files changed, 178 insertions(+), 217 deletions(-) diff --git a/code/game/machinery/computer/computer.dm b/code/game/machinery/computer/computer.dm index 4e83a662499..f4051c16279 100644 --- a/code/game/machinery/computer/computer.dm +++ b/code/game/machinery/computer/computer.dm @@ -91,7 +91,7 @@ return /obj/machinery/computer/attackby(obj/I, mob/user, params) - if(istype(I, /obj/item/weapon/screwdriver) && circuit) + if(istype(I, /obj/item/weapon/screwdriver) && circuit && !(flags&ABSTRACT)) playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) user << " You start to disconnect the monitor..." if(do_after(user, 20, target = src)) diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm index 7d611a644c9..af7ab8934a3 100644 --- a/code/game/machinery/doors/windowdoor.dm +++ b/code/game/machinery/doors/windowdoor.dm @@ -26,7 +26,11 @@ electronics = null return ..() - +/obj/machinery/door/window/update_icon() + if(density) + icon_state = base_state + else + icon_state = "[src.base_state]open" /obj/machinery/door/window/proc/open_and_close() open() @@ -153,14 +157,15 @@ /obj/machinery/door/window/proc/take_damage(damage) src.health = max(0, src.health - damage) if (src.health <= 0) - var/debris = list( - new /obj/item/weapon/shard(src.loc), - new /obj/item/weapon/shard(src.loc), - new /obj/item/stack/rods(src.loc, 2), - new /obj/item/stack/cable_coil(src.loc, 2) - ) - for(var/obj/fragment in debris) - transfer_fingerprints_to(fragment) + if(!(flags&ABSTRACT)) + var/debris = list( + new /obj/item/weapon/shard(src.loc), + new /obj/item/weapon/shard(src.loc), + new /obj/item/stack/rods(src.loc, 2), + new /obj/item/stack/cable_coil(src.loc, 2) + ) + for(var/obj/fragment in debris) + transfer_fingerprints_to(fragment) src.density = 0 qdel(src) return @@ -271,63 +276,64 @@ add_fingerprint(user) - if(istype(I, /obj/item/weapon/screwdriver)) - if(src.density || src.operating) - user << "You need to open the door to access the maintenance panel!" + if(!(flags&ABSTRACT)) + if(istype(I, /obj/item/weapon/screwdriver)) + if(src.density || src.operating) + user << "You need to open the door to access the maintenance panel!" + return + playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + src.p_open = !( src.p_open ) + user << "You [p_open ? "open":"close"] the maintenance panel of the [src.name]." return - playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) - src.p_open = !( src.p_open ) - user << "You [p_open ? "open":"close"] the maintenance panel of the [src.name]." - return - if(istype(I, /obj/item/weapon/crowbar)) - if(p_open && !src.density && !src.operating) - playsound(src.loc, 'sound/items/Crowbar.ogg', 100, 1) - user.visible_message("[user] removes the electronics from the [src.name].", \ - "You start to remove electronics from the [src.name]...") - if(do_after(user,40, target = src)) - if(src.p_open && !src.density && !src.operating && src.loc) - var/obj/structure/windoor_assembly/WA = new /obj/structure/windoor_assembly(src.loc) - switch(base_state) - if("left") - WA.facing = "l" - if("right") - WA.facing = "r" - if("leftsecure") - WA.facing = "l" - WA.secure = 1 - if("rightsecure") - WA.facing = "r" - WA.secure = 1 - WA.anchored = 1 - WA.state= "02" - WA.dir = src.dir - WA.ini_dir = src.dir - WA.update_icon() - WA.created_name = src.name + if(istype(I, /obj/item/weapon/crowbar)) + if(p_open && !src.density && !src.operating) + playsound(src.loc, 'sound/items/Crowbar.ogg', 100, 1) + user.visible_message("[user] removes the electronics from the [src.name].", \ + "You start to remove electronics from the [src.name]...") + if(do_after(user,40, target = src)) + if(src.p_open && !src.density && !src.operating && src.loc) + var/obj/structure/windoor_assembly/WA = new /obj/structure/windoor_assembly(src.loc) + switch(base_state) + if("left") + WA.facing = "l" + if("right") + WA.facing = "r" + if("leftsecure") + WA.facing = "l" + WA.secure = 1 + if("rightsecure") + WA.facing = "r" + WA.secure = 1 + WA.anchored = 1 + WA.state= "02" + WA.dir = src.dir + WA.ini_dir = src.dir + WA.update_icon() + WA.created_name = src.name - if(emagged) - user << "You discard the damaged electronics." - qdel(src) - return + if(emagged) + user << "You discard the damaged electronics." + qdel(src) + return - user << "You remove the airlock electronics." + user << "You remove the airlock electronics." - var/obj/item/weapon/electronics/airlock/ae - if(!electronics) - ae = new/obj/item/weapon/electronics/airlock( src.loc ) - if(req_one_access) - ae.use_one_access = 1 - ae.conf_access = src.req_one_access + var/obj/item/weapon/electronics/airlock/ae + if(!electronics) + ae = new/obj/item/weapon/electronics/airlock( src.loc ) + if(req_one_access) + ae.use_one_access = 1 + ae.conf_access = src.req_one_access + else + ae.conf_access = src.req_access else - ae.conf_access = src.req_access - else - ae = electronics - electronics = null - ae.loc = src.loc + ae = electronics + electronics = null + ae.loc = src.loc - qdel(src) - return + qdel(src) + return //If windoor is unpowered, crowbar, fireaxe and armblade can force it. diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index 1c2c307973c..2de1afe916c 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/machinery.dm @@ -278,7 +278,7 @@ Class Procs: gl_uid++ /obj/machinery/proc/default_pry_open(obj/item/weapon/crowbar/C) - . = !(state_open || panel_open || is_operational()) && istype(C) + . = !(state_open || panel_open || is_operational() || (flags & ABSTRACT)) && istype(C) if(.) playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1) visible_message("[usr] pry open \the [src].", "You pry open \the [src].") @@ -286,7 +286,7 @@ Class Procs: return 1 /obj/machinery/proc/default_deconstruction_crowbar(obj/item/weapon/crowbar/C, ignore_panel = 0) - . = istype(C) && (panel_open || ignore_panel) + . = istype(C) && (panel_open || ignore_panel) && !(flags & ABSTRACT) if(.) deconstruction() playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1) @@ -301,7 +301,7 @@ Class Procs: qdel(src) /obj/machinery/proc/default_deconstruction_screwdriver(mob/user, icon_state_open, icon_state_closed, obj/item/weapon/screwdriver/S) - if(istype(S)) + if(istype(S) && !(flags & ABSTRACT)) playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) if(!panel_open) panel_open = 1 @@ -323,7 +323,7 @@ Class Procs: return 0 /obj/proc/default_unfasten_wrench(mob/user, obj/item/weapon/wrench/W, time = 20) - if(istype(W)) + if(istype(W) && !(flags & ABSTRACT)) user << "You begin [anchored ? "un" : ""]securing [name]..." playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) if(do_after(user, time, target = src)) @@ -334,6 +334,8 @@ Class Procs: return 0 /obj/machinery/proc/exchange_parts(mob/user, obj/item/weapon/storage/part_replacer/W) + if(flags & ABSTRACT) + return var/shouldplaysound = 0 if(istype(W) && component_parts) if(panel_open || W.works_from_distance) diff --git a/code/game/objects/items/weapons/twohanded.dm b/code/game/objects/items/weapons/twohanded.dm index 66cb8cf9d13..5038feeaeb1 100644 --- a/code/game/objects/items/weapons/twohanded.dm +++ b/code/game/objects/items/weapons/twohanded.dm @@ -177,17 +177,12 @@ /obj/item/weapon/twohanded/fireaxe/afterattack(atom/A as mob|obj|turf|area, mob/user, proximity) if(!proximity) return - if(A && wielded && (istype(A,/obj/structure/window) || istype(A,/obj/structure/grille))) //destroys windows and grilles in one hit - if(istype(A,/obj/structure/window)) //should just make a window.Break() proc but couldn't bother with it + if(wielded) //destroys windows and grilles in one hit + if(istype(A,/obj/structure/window)) var/obj/structure/window/W = A - - new /obj/item/weapon/shard( W.loc ) - if(W.reinf) new /obj/item/stack/rods( W.loc) - - if (W.dir == SOUTHWEST) - new /obj/item/weapon/shard( W.loc ) - if(W.reinf) new /obj/item/stack/rods( W.loc) - qdel(A) + W.spawnfragments() // this will qdel and spawn shards + else if(istype(A,/obj/structure/grille)) + qdel(A) /* diff --git a/code/game/objects/structures/beds_chairs/bed.dm b/code/game/objects/structures/beds_chairs/bed.dm index df7d7673d92..c6d06d46405 100644 --- a/code/game/objects/structures/beds_chairs/bed.dm +++ b/code/game/objects/structures/beds_chairs/bed.dm @@ -58,7 +58,7 @@ qdel(src) /obj/structure/bed/attackby(obj/item/weapon/W, mob/user, params) - if(istype(W, /obj/item/weapon/wrench)) + if(istype(W, /obj/item/weapon/wrench) && !(flags&ABSTRACT)) playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) if(buildstacktype) new buildstacktype(loc, buildstackamount) diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index fc34408821c..65568b54bca 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -165,7 +165,8 @@ /obj/structure/closet/ex_act(severity, target) contents_explosion(severity, target) - new material_drop(loc) + if(loc && ispath(material_drop) && !(flags & ABSTRACT)) + new material_drop(loc) dump_contents() qdel(src) ..() diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index 2d8da625c67..859dc5560bb 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -147,26 +147,26 @@ if (istype(I, /obj/item/weapon/grab)) tablepush(I, user) return - - 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) + if(!(flags&ABSTRACT)) + 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) + return + else table_destroy(2, user) return - else - table_destroy(2, user) - return - if (istype(I, /obj/item/weapon/wrench)) - if(istype(src, /obj/structure/table/reinforced)) - var/obj/structure/table/reinforced/RT = src - if(RT.status == 1) + if (istype(I, /obj/item/weapon/wrench)) + if(istype(src, /obj/structure/table/reinforced)) + var/obj/structure/table/reinforced/RT = src + if(RT.status == 1) + table_destroy(3, user) + return + else table_destroy(3, user) return - else - table_destroy(3, user) - return if (istype(I, /obj/item/weapon/storage/bag/tray)) var/obj/item/weapon/storage/bag/tray/T = I @@ -205,7 +205,7 @@ #define TBL_DECONSTRUCT 3 /obj/structure/table/proc/table_destroy(destroy_type, mob/user) - if(!deconstructable) + if(!deconstructable || (flags&ABSTRACT)) return if(destroy_type == TBL_DESTROY) @@ -462,7 +462,7 @@ return /obj/structure/rack/attackby(obj/item/weapon/W, mob/user, params) - if (istype(W, /obj/item/weapon/wrench)) + if (istype(W, /obj/item/weapon/wrench) && !(flags&ABSTRACT)) playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) rack_destroy() return @@ -517,9 +517,10 @@ */ /obj/structure/rack/proc/rack_destroy() - density = 0 - var/obj/item/weapon/rack_parts/newparts = new(loc) - transfer_fingerprints_to(newparts) + if(!(flags&ABSTRACT)) + density = 0 + var/obj/item/weapon/rack_parts/newparts = new(loc) + transfer_fingerprints_to(newparts) qdel(src) diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index cb0c4bc4957..ae75bbc7808 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -30,17 +30,20 @@ health = maxhealth if(re) reinf = re - storeditems.Add(new/obj/item/weapon/shard(src)) - if(fulltile) - storeditems.Add(new/obj/item/weapon/shard(src)) - ini_dir = dir if(reinf) state = 2*anchored - var/obj/item/stack/rods/R = new/obj/item/stack/rods(src) - storeditems.Add(R) - if(fulltile) - R.add(1) + if(!(flags & ABSTRACT)) + storeditems.Add(new/obj/item/weapon/shard(src)) + if(fulltile) + storeditems.Add(new/obj/item/weapon/shard(src)) + if(reinf) + var/obj/item/stack/rods/R = new/obj/item/stack/rods(src) + storeditems.Add(R) + if(fulltile) + R.add(1) + + ini_dir = dir air_update_turf(1) return @@ -191,38 +194,8 @@ return 1 //skip the afterattack add_fingerprint(user) - if(istype(I, /obj/item/weapon/screwdriver)) - playsound(loc, 'sound/items/Screwdriver.ogg', 75, 1) - if(reinf && (state == 2 || state == 1)) - user << (state == 2 ? "You begin to unscrew the window from the frame..." : "You begin to screw the window to the frame...") - else if(reinf && state == 0) - user << (anchored ? "You begin to unscrew the frame from the floor..." : "You begin to screw the frame to the floor...") - else if(!reinf) - user << (anchored ? "You begin to unscrew the window from the floor..." : "You begin to screw the window to the floor...") - if(do_after(user, 40, target = src)) - if(reinf && (state == 1 || state == 2)) - //If state was unfastened, fasten it, else do the reverse - state = (state == 1 ? 2 : 1) - user << (state == 1 ? "You unfasten the window from the frame." : "You fasten the window to the frame.") - else if(reinf && state == 0) - anchored = !anchored - update_nearby_icons() - user << (anchored ? "You fasten the frame to the floor." : "You unfasten the frame from the floor.") - else if(!reinf) - anchored = !anchored - update_nearby_icons() - user << (anchored ? "You fasten the window to the floor." : "You unfasten the window.") - - else if (istype(I, /obj/item/weapon/crowbar) && reinf && (state == 0 || state == 1)) - user << (state == 0 ? "You begin to lever the window into the frame..." : "You begin to lever the window out of the frame...") - playsound(loc, 'sound/items/Crowbar.ogg', 75, 1) - if(do_after(user, 40, target = src)) - //If state was out of frame, put into frame, else do the reverse - state = (state == 0 ? 1 : 0) - user << (state == 1 ? "You pry the window into the frame." : "You pry the window out of the frame.") - - else if(istype(I, /obj/item/weapon/weldingtool) && user.a_intent == "help") + if(istype(I, /obj/item/weapon/weldingtool) && user.a_intent == "help") var/obj/item/weapon/weldingtool/WT = I if(health < maxhealth) if(WT.remove_fuel(0,user)) @@ -235,32 +208,63 @@ user << "[src] is already in good condition!" return update_nearby_icons() + else if(!(flags&ABSTRACT)) + if(istype(I, /obj/item/weapon/screwdriver)) + playsound(loc, 'sound/items/Screwdriver.ogg', 75, 1) + if(reinf && (state == 2 || state == 1)) + user << (state == 2 ? "You begin to unscrew the window from the frame..." : "You begin to screw the window to the frame...") + else if(reinf && state == 0) + user << (anchored ? "You begin to unscrew the frame from the floor..." : "You begin to screw the frame to the floor...") + else if(!reinf) + user << (anchored ? "You begin to unscrew the window from the floor..." : "You begin to screw the window to the floor...") - else if(istype(I, /obj/item/weapon/wrench) && !anchored) - playsound(loc, 'sound/items/Ratchet.ogg', 75, 1) - user << " You begin to disassemble [src]..." - if(do_after(user, 40, target = src)) - if(disassembled) - return //Prevents multiple deconstruction attempts + if(do_after(user, 40, target = src)) + if(reinf && (state == 1 || state == 2)) + //If state was unfastened, fasten it, else do the reverse + state = (state == 1 ? 2 : 1) + user << (state == 1 ? "You unfasten the window from the frame." : "You fasten the window to the frame.") + else if(reinf && state == 0) + anchored = !anchored + update_nearby_icons() + user << (anchored ? "You fasten the frame to the floor." : "You unfasten the frame from the floor.") + else if(!reinf) + anchored = !anchored + update_nearby_icons() + user << (anchored ? "You fasten the window to the floor." : "You unfasten the window.") - if(reinf) - var/obj/item/stack/sheet/rglass/RG = new (user.loc) - RG.add_fingerprint(user) - if(fulltile) //fulltiles drop two panes - RG = new (user.loc) + else if (istype(I, /obj/item/weapon/crowbar) && reinf && (state == 0 || state == 1)) + user << (state == 0 ? "You begin to lever the window into the frame..." : "You begin to lever the window out of the frame...") + playsound(loc, 'sound/items/Crowbar.ogg', 75, 1) + if(do_after(user, 40, target = src)) + //If state was out of frame, put into frame, else do the reverse + state = (state == 0 ? 1 : 0) + user << (state == 1 ? "You pry the window into the frame." : "You pry the window out of the frame.") + + else if(istype(I, /obj/item/weapon/wrench) && !anchored) + playsound(loc, 'sound/items/Ratchet.ogg', 75, 1) + user << " You begin to disassemble [src]..." + if(do_after(user, 40, target = src)) + if(disassembled) + return //Prevents multiple deconstruction attempts + + if(reinf) + var/obj/item/stack/sheet/rglass/RG = new (user.loc) RG.add_fingerprint(user) + if(fulltile) //fulltiles drop two panes + RG = new (user.loc) + RG.add_fingerprint(user) - else - var/obj/item/stack/sheet/glass/G = new (user.loc) - G.add_fingerprint(user) - if(fulltile) - G = new (user.loc) + else + var/obj/item/stack/sheet/glass/G = new (user.loc) G.add_fingerprint(user) + if(fulltile) + G = new (user.loc) + G.add_fingerprint(user) - playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) - disassembled = 1 - user << "You successfully disassemble [src]." - qdel(src) + playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) + disassembled = 1 + user << "You successfully disassemble [src]." + qdel(src) else if(istype(I, /obj/item/weapon/rcd)) //Do not attack the window if the user is holding an RCD return diff --git a/code/modules/holodeck/computer_funcs.dm b/code/modules/holodeck/computer_funcs.dm index 0913af05f55..7e15d97ef5f 100644 --- a/code/modules/holodeck/computer_funcs.dm +++ b/code/modules/holodeck/computer_funcs.dm @@ -70,15 +70,25 @@ // should also remove/limit/filter reagents? // this is an exercise left to others I'm afraid. -Sayu spawned = A.copy_contents_to(linked, 1, nerf_weapons = !emagged) + for(var/obj/machinery/M in spawned) + M.flags |= ABSTRACT + for(var/obj/structure/S in spawned) + S.flags |= ABSTRACT effects = list() spawn(30) + var/list/added = list() for(var/obj/effect/holodeck_effect/HE in spawned) effects += HE spawned -= HE var/atom/x = HE.activate(src) if(istype(x) || islist(x)) spawned += x // holocarp are not forever + added += x + for(var/obj/machinery/M in added) + M.flags |= ABSTRACT + for(var/obj/structure/S in added) + S.flags |= ABSTRACT /obj/machinery/computer/holodeck/proc/derez(var/obj/obj, var/silent = 1, var/forced = 0) // Emagging a machine creates an anomaly in the derez systems. diff --git a/code/modules/holodeck/tables.dm b/code/modules/holodeck/tables.dm index b91731b33e8..c96a1f1523b 100644 --- a/code/modules/holodeck/tables.dm +++ b/code/modules/holodeck/tables.dm @@ -22,47 +22,3 @@ icon_state = "poker_table" canSmoothWith = list(/obj/structure/table/holo/wood, /obj/structure/table/holo/poker) -/obj/structure/table/holo/attack_paw(mob/user as mob) - return - -/obj/structure/table/holo/attack_alien(mob/user as mob) - return - -/obj/structure/table/holo/attack_animal(mob/living/simple_animal/user as mob) - return - -/obj/structure/table/holo/attack_hand(mob/user as mob) - return -/obj/structure/table/holo/attack_hulk() - return - -/obj/structure/table/holo/attackby(obj/item/I, mob/user, params) - if (istype(I, /obj/item/weapon/grab)) - tablepush(I, user) - return - if (istype(I, /obj/item/weapon/storage/bag/tray)) - var/obj/item/weapon/storage/bag/tray/T = I - if(T.contents.len > 0) // If the tray isn't empty - var/list/obj/item/oldContents = T.contents.Copy() - T.quick_empty() - - for(var/obj/item/C in oldContents) - C.loc = src.loc - - user.visible_message("[user] empties [I] on [src].") - return - // If the tray IS empty, continue on (tray will be placed on the table like other items) - - if(isrobot(user)) - return - - if(!(I.flags & ABSTRACT)) //rip more parems rip in peace ;_; - 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) diff --git a/code/modules/holodeck/turfs.dm b/code/modules/holodeck/turfs.dm index b19c5bb019e..11d22461ae9 100644 --- a/code/modules/holodeck/turfs.dm +++ b/code/modules/holodeck/turfs.dm @@ -1,8 +1,8 @@ /turf/simulated/floor/holofloor icon_state = "floor" thermal_conductivity = 0 - broken_states = list() - burnt_states = list() + broken_states = list("engine") + burnt_states = list("engine") /turf/simulated/floor/holofloor/attackby(obj/item/weapon/W as obj, mob/user as mob) return // HOLOFLOOR DOES NOT GIVE A FUCK diff --git a/code/modules/holodeck/windows.dm b/code/modules/holodeck/windows.dm index 41d3de65da7..8a74e2317a2 100644 --- a/code/modules/holodeck/windows.dm +++ b/code/modules/holodeck/windows.dm @@ -7,29 +7,15 @@ layer = 3.2//Just above doors pressure_resistance = 4*ONE_ATMOSPHERE anchored = 1.0 - flags = ON_BORDER + flags = ON_BORDER | ABSTRACT maxhealth = 100 disassembled = 1 // prevents noise on destruction -/obj/structure/window/holo/New() - ..() - for(var/O in contents) - qdel(O) // standard window code generates stuff no matter what we want - -/obj/structure/window/holo/spawnfragments() - qdel(src) - return - -/obj/structure/window/holo/attackby(var/obj/item/I, var/mob/user) - if(istype(I,/obj/item/weapon/screwdriver)) - user << "You see no screws to unfasten!" - return - return ..() - /obj/structure/window/holo/hit(var/damage, var/sound_effect = 1) . = ..() spawn(50) // self-healing health += damage + update_icon() /obj/structure/window/holo/opaque name = "tinted window"