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"