From 026e6ee7728d34a4eb3c2563d2f0462c925d9fa9 Mon Sep 17 00:00:00 2001 From: Vincent Date: Thu, 26 Nov 2015 21:11:54 -0500 Subject: [PATCH 1/4] 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" From 0218d519387199cd429158beae506fb454262001 Mon Sep 17 00:00:00 2001 From: Vincent Date: Fri, 27 Nov 2015 15:38:37 -0500 Subject: [PATCH 2/4] Better fireaxe-grill interactions --- code/game/objects/items/weapons/twohanded.dm | 5 ++++- code/game/objects/structures/grille.dm | 12 +++++++----- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/code/game/objects/items/weapons/twohanded.dm b/code/game/objects/items/weapons/twohanded.dm index 5038feeaeb1..b685d8da477 100644 --- a/code/game/objects/items/weapons/twohanded.dm +++ b/code/game/objects/items/weapons/twohanded.dm @@ -182,7 +182,10 @@ var/obj/structure/window/W = A W.spawnfragments() // this will qdel and spawn shards else if(istype(A,/obj/structure/grille)) - qdel(A) + var/obj/structure/grille/G = A + G.health = -6 + G.destroyed += prob(25) // If this is set, healthcheck will completely remove the grille + G.healthcheck() /* diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm index 8a02e0ad474..9b762e5c5a8 100644 --- a/code/game/objects/structures/grille.dm +++ b/code/game/objects/structures/grille.dm @@ -121,9 +121,10 @@ /obj/structure/grille/Deconstruct() if(!loc) //if already qdel'd somehow, we do nothing return - transfer_fingerprints_to(stored) - var/turf/T = loc - stored.loc = T + if(!(flags&ABSTRACT)) + transfer_fingerprints_to(stored) + var/turf/T = loc + stored.loc = T ..() /obj/structure/grille/proc/Break() @@ -131,8 +132,9 @@ density = 0 destroyed = 1 stored.amount = 1 - var/obj/item/stack/rods/newrods = new(loc) - transfer_fingerprints_to(newrods) + if(!(flags&ABSTRACT)) + var/obj/item/stack/rods/newrods = new(loc) + transfer_fingerprints_to(newrods) /obj/structure/grille/attackby(obj/item/weapon/W, mob/user, params) user.changeNext_move(CLICK_CD_MELEE) From 7bfa03a5ee0e99a0cac6d7f522ef1cef8a78fffe Mon Sep 17 00:00:00 2001 From: Vincent Date: Sat, 28 Nov 2015 17:39:02 -0500 Subject: [PATCH 3/4] Fixes #13277 Lasers beams spawning after the holdout sim ends --- code/modules/holodeck/area_copy.dm | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/code/modules/holodeck/area_copy.dm b/code/modules/holodeck/area_copy.dm index ae6236381f6..fe8621fdca4 100644 --- a/code/modules/holodeck/area_copy.dm +++ b/code/modules/holodeck/area_copy.dm @@ -91,11 +91,12 @@ for(var/obj/O in T) var/obj/O2 = DuplicateObject(O , 1, newloc = X, nerf=nerf_weapons) if(!O2) continue - copiedobjs += O2.contents + O2 + copiedobjs += O2.GetAllContents() + O2 for(var/mob/M in T) if(istype(M, /mob/camera)) continue // If we need to check for more mobs, I'll add a variable - copiedobjs += DuplicateObject(M , 1, newloc = X) + var/mob/SM = DuplicateObject(M , 1, newloc = X) + copiedobjs += SM.GetAllContents() + SM var/global/list/forbidden_vars = list("type","stat","loc","locs","vars", "parent", "parent_type","verbs","ckey","key","x","y","z","contents", "luminosity") for(var/V in T.vars - forbidden_vars) From 16303c1c1f8c9ff411d2d22c02b7feec84a977dd Mon Sep 17 00:00:00 2001 From: Vincent Date: Mon, 30 Nov 2015 20:22:04 -0500 Subject: [PATCH 4/4] Changes flag name from ABSTRACT to NODECONSTRUCT Removes holo-tables and holo-windows since those typepaths are no longer needed. Updates Z2 to reflect this. Removes spurious tag tags in Z2. --- _maps/map_files/generic/z2.dmm | 134 +++++++++--------- code/__DEFINES/flags.dm | 1 + code/game/machinery/computer/computer.dm | 2 +- code/game/machinery/doors/windowdoor.dm | 4 +- code/game/machinery/machinery.dm | 10 +- .../objects/structures/beds_chairs/bed.dm | 2 +- .../structures/crates_lockers/closets.dm | 2 +- code/game/objects/structures/grille.dm | 4 +- code/game/objects/structures/tables_racks.dm | 8 +- code/game/objects/structures/window.dm | 19 +-- code/modules/holodeck/computer_funcs.dm | 8 +- code/modules/holodeck/items.dm | 5 +- code/modules/holodeck/tables.dm | 24 ---- code/modules/holodeck/windows.dm | 30 ---- tgstation.dme | 2 - 15 files changed, 101 insertions(+), 154 deletions(-) delete mode 100644 code/modules/holodeck/tables.dm delete mode 100644 code/modules/holodeck/windows.dm diff --git a/_maps/map_files/generic/z2.dmm b/_maps/map_files/generic/z2.dmm index cd30e04891b..c742fd317a3 100644 --- a/_maps/map_files/generic/z2.dmm +++ b/_maps/map_files/generic/z2.dmm @@ -4,17 +4,17 @@ "ad" = (/turf/indestructible/riveted,/area/space) "ae" = (/obj/structure/window/reinforced,/turf/indestructible/riveted,/area/space) "af" = (/obj/structure/window/reinforced{dir = 4},/turf/indestructible/riveted,/area/space) -"ag" = (/obj/structure/foamedmetal,/obj/structure/window/holo{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor/holofloor/plating,/area/holodeck/rec_center/bunker) +"ag" = (/obj/structure/foamedmetal,/obj/structure/window{icon_state = "rwindow"; dir = 4},/turf/simulated/floor/holofloor/plating,/area/holodeck/rec_center/bunker) "ah" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/indestructible/riveted,/area/space) -"ai" = (/obj/structure/foamedmetal,/obj/structure/window/holo/opaque{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/holo{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/simulated/floor/holofloor/plating,/area/holodeck/rec_center/bunker) +"ai" = (/obj/structure/foamedmetal,/obj/structure/window/reinforced/tinted{icon_state = "rwindow"; dir = 4},/obj/structure/window{icon_state = "rwindow"; dir = 8},/turf/simulated/floor/holofloor/plating,/area/holodeck/rec_center/bunker) "aj" = (/turf/simulated/floor/holofloor/plating,/area/holodeck/rec_center/bunker) -"ak" = (/obj/structure/table/holo,/obj/item/stack/medical/ointment{heal_burn = 10},/turf/simulated/floor/holofloor/plating,/area/holodeck/rec_center/bunker) -"al" = (/obj/structure/bed/chair/wood/normal{tag = "icon-wooden_chair (EAST)"; icon_state = "wooden_chair"; dir = 4},/turf/simulated/floor/holofloor/carpet,/area/holodeck/rec_center/lounge) +"ak" = (/obj/structure/table,/obj/item/stack/medical/ointment{heal_burn = 10},/turf/simulated/floor/holofloor/plating,/area/holodeck/rec_center/bunker) +"al" = (/obj/structure/bed/chair/wood/normal{icon_state = "wooden_chair"; dir = 4},/turf/simulated/floor/holofloor/carpet,/area/holodeck/rec_center/lounge) "am" = (/obj/structure/window/reinforced{dir = 8},/turf/indestructible/riveted,/area/space) "an" = (/turf/simulated/floor/holofloor/carpet,/area/holodeck/rec_center/lounge) -"ao" = (/obj/structure/table/holo/poker,/obj/item/clothing/mask/cigarette/pipe,/turf/simulated/floor/holofloor/carpet,/area/holodeck/rec_center/lounge) -"ap" = (/obj/structure/table/holo/poker,/obj/effect/holodeck_effect/cards,/turf/simulated/floor/holofloor/carpet,/area/holodeck/rec_center/lounge) -"aq" = (/obj/structure/bed/chair/wood/normal{tag = "icon-wooden_chair (WEST)"; icon_state = "wooden_chair"; dir = 8},/turf/simulated/floor/holofloor/carpet,/area/holodeck/rec_center/lounge) +"ao" = (/obj/structure/table/wood/poker,/obj/item/clothing/mask/cigarette/pipe,/turf/simulated/floor/holofloor/carpet,/area/holodeck/rec_center/lounge) +"ap" = (/obj/structure/table/wood/poker,/obj/effect/holodeck_effect/cards,/turf/simulated/floor/holofloor/carpet,/area/holodeck/rec_center/lounge) +"aq" = (/obj/structure/bed/chair/wood/normal{icon_state = "wooden_chair"; dir = 8},/turf/simulated/floor/holofloor/carpet,/area/holodeck/rec_center/lounge) "ar" = (/turf/simulated/floor/holofloor/plating,/area/holodeck/rec_center/wildlife) "as" = (/turf/simulated/floor/holofloor/plating,/area/holodeck/rec_center/offline) "at" = (/turf/simulated/floor/holofloor{icon_state = "engine"; name = "Burn-Mix Floor"; nitrogen = 0; oxygen = 2500; temperature = 370; toxins = 5000},/area/holodeck/rec_center/burn) @@ -23,50 +23,50 @@ "aw" = (/obj/docking_port/stationary/transit{dir = 4; dwidth = 1; height = 4; id = "pod3_transit"; turf_type = /turf/space/transit/horizontal; width = 3},/turf/space/transit/horizontal,/area/space) "ax" = (/turf/simulated/floor/holofloor{dir = 9; icon_state = "red"},/area/holodeck/rec_center/court) "ay" = (/turf/simulated/floor/holofloor{dir = 5; icon_state = "red"},/area/holodeck/rec_center/court) -"az" = (/obj/structure/foamedmetal,/obj/structure/window/holo{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/simulated/floor/holofloor/plating,/area/holodeck/rec_center/bunker) +"az" = (/obj/structure/foamedmetal,/obj/structure/window{icon_state = "rwindow"; dir = 8},/turf/simulated/floor/holofloor/plating,/area/holodeck/rec_center/bunker) "aA" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/indestructible/riveted,/area/space) -"aB" = (/obj/structure/table/holo,/obj/machinery/recharger,/turf/simulated/floor/holofloor/plating,/area/holodeck/rec_center/bunker) -"aC" = (/obj/structure/bed/chair/wood/normal{tag = "icon-wooden_chair (NORTH)"; icon_state = "wooden_chair"; dir = 1},/turf/simulated/floor/holofloor/carpet,/area/holodeck/rec_center/lounge) +"aB" = (/obj/structure/table,/obj/machinery/recharger,/turf/simulated/floor/holofloor/plating,/area/holodeck/rec_center/bunker) +"aC" = (/obj/structure/bed/chair/wood/normal{icon_state = "wooden_chair"; dir = 1},/turf/simulated/floor/holofloor/carpet,/area/holodeck/rec_center/lounge) "aD" = (/obj/effect/holodeck_effect/mobspawner,/turf/simulated/floor/holofloor/plating,/area/holodeck/rec_center/wildlife) "aE" = (/obj/effect/holodeck_effect/sparks,/turf/simulated/floor/holofloor{icon_state = "engine"; name = "Burn-Mix Floor"; nitrogen = 0; oxygen = 2500; temperature = 370; toxins = 5000},/area/holodeck/rec_center/burn) "aF" = (/turf/simulated/floor/holofloor,/area/holodeck/rec_center/court) "aG" = (/turf/simulated/floor/holofloor{dir = 8; icon_state = "red"},/area/holodeck/rec_center/court) "aH" = (/turf/simulated/floor/holofloor{dir = 4; icon_state = "red"},/area/holodeck/rec_center/court) -"aI" = (/obj/structure/table/holo,/obj/item/weapon/gun/energy/laser,/turf/simulated/floor/holofloor/plating,/area/holodeck/rec_center/bunker) -"aJ" = (/obj/structure/window/holo/opaque{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor/holofloor{tag = "icon-wood (NORTHWEST)"; icon_state = "wood"; dir = 9},/area/holodeck/rec_center/lounge) -"aK" = (/obj/item/device/instrument/violin,/obj/structure/table/holo/wood,/turf/simulated/floor/holofloor/carpet,/area/holodeck/rec_center/lounge) +"aI" = (/obj/structure/table,/obj/item/weapon/gun/energy/laser,/turf/simulated/floor/holofloor/plating,/area/holodeck/rec_center/bunker) +"aJ" = (/obj/structure/window/reinforced/tinted{icon_state = "rwindow"; dir = 4},/turf/simulated/floor/holofloor{icon_state = "wood"; dir = 9},/area/holodeck/rec_center/lounge) +"aK" = (/obj/item/device/instrument/violin,/obj/structure/table/wood,/turf/simulated/floor/holofloor/carpet,/area/holodeck/rec_center/lounge) "aL" = (/obj/structure/bed/chair/comfy/brown{buildstackamount = 0},/turf/simulated/floor/holofloor/carpet,/area/holodeck/rec_center/lounge) "aM" = (/turf/simulated/floor/holofloor{dir = 8; icon_state = "green"},/area/holodeck/rec_center/court) "aN" = (/turf/simulated/floor/holofloor{dir = 4; icon_state = "green"},/area/holodeck/rec_center/court) -"aO" = (/obj/structure/table/holo/wood,/obj/item/device/flashlight/lamp/green,/turf/simulated/floor/holofloor/carpet,/area/holodeck/rec_center/lounge) +"aO" = (/obj/structure/table/wood,/obj/item/device/flashlight/lamp/green,/turf/simulated/floor/holofloor/carpet,/area/holodeck/rec_center/lounge) "aP" = (/obj/structure/bed/chair/comfy/brown{buildstackamount = 0; dir = 1},/turf/simulated/floor/holofloor/carpet,/area/holodeck/rec_center/lounge) "aQ" = (/obj/structure/bed/chair/wood/normal,/turf/simulated/floor/holofloor/carpet,/area/holodeck/rec_center/lounge) -"aR" = (/obj/structure/table/holo,/obj/item/stack/medical/bruise_pack{heal_brute = 10},/turf/simulated/floor/holofloor/plating,/area/holodeck/rec_center/bunker) -"aS" = (/obj/structure/table/holo/poker,/turf/simulated/floor/holofloor/carpet,/area/holodeck/rec_center/lounge) +"aR" = (/obj/structure/table,/obj/item/stack/medical/bruise_pack{heal_brute = 10},/turf/simulated/floor/holofloor/plating,/area/holodeck/rec_center/bunker) +"aS" = (/obj/structure/table/wood/poker,/turf/simulated/floor/holofloor/carpet,/area/holodeck/rec_center/lounge) "aT" = (/turf/simulated/floor/holofloor{dir = 2; icon_state = "green"},/area/holodeck/rec_center/court) "aU" = (/turf/simulated/floor/holofloor{dir = 10; icon_state = "green"},/area/holodeck/rec_center/court) "aV" = (/turf/simulated/floor/holofloor{dir = 6; icon_state = "green"},/area/holodeck/rec_center/court) "aW" = (/turf/simulated/floor/holofloor/grass,/area/holodeck/rec_center/pet_lounge) "aX" = (/obj/effect/holodeck_effect/mobspawner/pet,/turf/simulated/floor/holofloor/grass,/area/holodeck/rec_center/pet_lounge) "aY" = (/obj/docking_port/stationary/transit{dir = 4; dwidth = 1; height = 4; id = "pod4_transit"; turf_type = /turf/space/transit/horizontal; width = 3},/turf/space/transit/horizontal,/area/space) -"aZ" = (/obj/structure/table/holo/glass,/obj/item/weapon/hemostat,/turf/simulated/floor/holofloor{tag = "icon-warnwhite (NORTH)"; icon_state = "warnwhite"; dir = 1},/area/holodeck/rec_center/medical) -"ba" = (/obj/structure/table/holo/glass,/obj/item/weapon/surgicaldrill,/turf/simulated/floor/holofloor{tag = "icon-warnwhite (NORTHWEST)"; icon_state = "warnwhite"; dir = 9},/area/holodeck/rec_center/medical) -"bb" = (/obj/structure/table/holo/glass,/obj/item/weapon/retractor,/turf/simulated/floor/holofloor{tag = "icon-warnwhite (NORTH)"; icon_state = "warnwhite"; dir = 1},/area/holodeck/rec_center/medical) -"bc" = (/obj/structure/table/holo/glass,/obj/item/weapon/scalpel{pixel_y = 10},/obj/item/weapon/circular_saw,/turf/simulated/floor/holofloor{tag = "icon-warnwhite (NORTH)"; icon_state = "warnwhite"; dir = 1},/area/holodeck/rec_center/medical) -"bd" = (/obj/structure/table/holo/glass,/obj/item/weapon/cautery,/turf/simulated/floor/holofloor{tag = "icon-warnwhite (NORTHEAST)"; icon_state = "warnwhite"; dir = 5},/area/holodeck/rec_center/medical) +"aZ" = (/obj/structure/table/glass,/obj/item/weapon/hemostat,/turf/simulated/floor/holofloor{icon_state = "warnwhite"; dir = 1},/area/holodeck/rec_center/medical) +"ba" = (/obj/structure/table/glass,/obj/item/weapon/surgicaldrill,/turf/simulated/floor/holofloor{icon_state = "warnwhite"; dir = 9},/area/holodeck/rec_center/medical) +"bb" = (/obj/structure/table/glass,/obj/item/weapon/retractor,/turf/simulated/floor/holofloor{icon_state = "warnwhite"; dir = 1},/area/holodeck/rec_center/medical) +"bc" = (/obj/structure/table/glass,/obj/item/weapon/scalpel{pixel_y = 10},/obj/item/weapon/circular_saw,/turf/simulated/floor/holofloor{icon_state = "warnwhite"; dir = 1},/area/holodeck/rec_center/medical) +"bd" = (/obj/structure/table/glass,/obj/item/weapon/cautery,/turf/simulated/floor/holofloor{icon_state = "warnwhite"; dir = 5},/area/holodeck/rec_center/medical) "be" = (/turf/simulated/floor/holofloor{dir = 9; icon_state = "red"},/area/holodeck/rec_center/basketball) "bf" = (/turf/simulated/floor/holofloor{dir = 5; icon_state = "red"},/area/holodeck/rec_center/basketball) "bg" = (/obj/structure/holohoop,/turf/simulated/floor/holofloor{dir = 1; icon_state = "red"},/area/holodeck/rec_center/basketball) "bh" = (/turf/simulated/floor/holofloor/beach,/area/holodeck/rec_center/beach) -"bi" = (/obj/structure/table/holo,/obj/item/clothing/head/helmet/thunderdome,/obj/item/clothing/suit/armor/tdome/red,/obj/item/clothing/under/color/red,/obj/item/weapon/holo/esword/red,/turf/simulated/floor/holofloor{dir = 1; icon_state = "red"},/area/holodeck/rec_center/thunderdome) -"bj" = (/obj/structure/table/holo,/obj/machinery/readybutton,/turf/simulated/floor/holofloor{dir = 9; icon_state = "red"},/area/holodeck/rec_center/thunderdome) -"bk" = (/obj/structure/table/holo,/turf/simulated/floor/holofloor{dir = 5; icon_state = "red"},/area/holodeck/rec_center/thunderdome) +"bi" = (/obj/structure/table,/obj/item/clothing/head/helmet/thunderdome,/obj/item/clothing/suit/armor/tdome/red,/obj/item/clothing/under/color/red,/obj/item/weapon/holo/esword/red,/turf/simulated/floor/holofloor{dir = 1; icon_state = "red"},/area/holodeck/rec_center/thunderdome) +"bj" = (/obj/structure/table,/obj/machinery/readybutton,/turf/simulated/floor/holofloor{dir = 9; icon_state = "red"},/area/holodeck/rec_center/thunderdome) +"bk" = (/obj/structure/table,/turf/simulated/floor/holofloor{dir = 5; icon_state = "red"},/area/holodeck/rec_center/thunderdome) "bl" = (/turf/simulated/floor/holofloor{dir = 1; icon_state = "red"},/area/holodeck/rec_center/dodgeball) "bm" = (/obj/machinery/readybutton,/turf/simulated/floor/holofloor{dir = 9; icon_state = "red"},/area/holodeck/rec_center/dodgeball) "bn" = (/turf/simulated/floor/holofloor{dir = 5; icon_state = "red"},/area/holodeck/rec_center/dodgeball) -"bo" = (/turf/simulated/floor/holofloor{icon_state = "white"; tag = "icon-bluespace"},/area/holodeck/rec_center/medical) -"bp" = (/obj/structure/table/holo/glass,/obj/item/weapon/surgical_drapes,/obj/item/weapon/razor,/turf/simulated/floor/holofloor{tag = "icon-warnwhite (WEST)"; icon_state = "warnwhite"; dir = 8},/area/holodeck/rec_center/medical) -"bq" = (/turf/simulated/floor/holofloor{tag = "icon-warnwhite (EAST)"; icon_state = "warnwhite"; dir = 4},/area/holodeck/rec_center/medical) +"bo" = (/turf/simulated/floor/holofloor{icon_state = "white"},/area/holodeck/rec_center/medical) +"bp" = (/obj/structure/table/glass,/obj/item/weapon/surgical_drapes,/obj/item/weapon/razor,/turf/simulated/floor/holofloor{icon_state = "warnwhite"; dir = 8},/area/holodeck/rec_center/medical) +"bq" = (/turf/simulated/floor/holofloor{icon_state = "warnwhite"; dir = 4},/area/holodeck/rec_center/medical) "br" = (/turf/simulated/floor/holofloor{dir = 8; icon_state = "red"},/area/holodeck/rec_center/basketball) "bs" = (/turf/simulated/floor/holofloor{dir = 4; icon_state = "red"},/area/holodeck/rec_center/basketball) "bt" = (/obj/docking_port/stationary/transit{dir = 4; dwidth = 9; height = 11; id = "emergency_transit"; width = 22},/turf/space/transit,/area/space) @@ -79,17 +79,17 @@ "bA" = (/turf/simulated/floor/holofloor,/area/holodeck/rec_center/dodgeball) "bB" = (/turf/simulated/floor/holofloor{dir = 8; icon_state = "red"},/area/holodeck/rec_center/dodgeball) "bC" = (/turf/simulated/floor/holofloor{dir = 4; icon_state = "red"},/area/holodeck/rec_center/dodgeball) -"bD" = (/turf/simulated/floor/holofloor{tag = "icon-warnwhite"; icon_state = "warnwhite"},/area/holodeck/rec_center/medical) -"bE" = (/turf/simulated/floor/holofloor{tag = "icon-warnwhite (SOUTHWEST)"; icon_state = "warnwhite"; dir = 10},/area/holodeck/rec_center/medical) -"bF" = (/obj/machinery/computer/operating,/turf/simulated/floor/holofloor{tag = "icon-warnwhite"; icon_state = "warnwhite"},/area/holodeck/rec_center/medical) -"bG" = (/obj/structure/table/optable,/turf/simulated/floor/holofloor{tag = "icon-warnwhite"; icon_state = "warnwhite"},/area/holodeck/rec_center/medical) -"bH" = (/obj/structure/table/holo/glass,/obj/item/clothing/gloves/color/latex/nitrile,/obj/item/clothing/suit/apron/surgical,/obj/item/clothing/mask/surgical,/turf/simulated/floor/holofloor{tag = "icon-warnwhite (SOUTHEAST)"; icon_state = "warnwhite"; dir = 6},/area/holodeck/rec_center/medical) +"bD" = (/turf/simulated/floor/holofloor{icon_state = "warnwhite"},/area/holodeck/rec_center/medical) +"bE" = (/turf/simulated/floor/holofloor{icon_state = "warnwhite"; dir = 10},/area/holodeck/rec_center/medical) +"bF" = (/obj/machinery/computer/operating,/turf/simulated/floor/holofloor{icon_state = "warnwhite"},/area/holodeck/rec_center/medical) +"bG" = (/obj/structure/table/optable,/turf/simulated/floor/holofloor{icon_state = "warnwhite"},/area/holodeck/rec_center/medical) +"bH" = (/obj/structure/table/glass,/obj/item/clothing/gloves/color/latex/nitrile,/obj/item/clothing/suit/apron/surgical,/obj/item/clothing/mask/surgical,/turf/simulated/floor/holofloor{icon_state = "warnwhite"; dir = 6},/area/holodeck/rec_center/medical) "bI" = (/turf/simulated/floor/holofloor{dir = 1; icon_state = "red"},/area/holodeck/rec_center/basketball) "bJ" = (/turf/simulated/floor/holofloor{dir = 2; icon_state = "red"},/area/holodeck/rec_center/dodgeball) -"bK" = (/obj/structure/window/holo{dir = 1},/turf/simulated/floor/holofloor{icon_state = "white"; tag = "icon-bluespace"},/area/holodeck/rec_center/medical) -"bL" = (/turf/simulated/floor/holofloor{tag = "icon-warnwhite (WEST)"; icon_state = "warnwhite"; dir = 8},/area/holodeck/rec_center/medical) -"bM" = (/obj/structure/table/holo/glass,/obj/machinery/reagentgrinder,/turf/simulated/floor/holofloor{tag = "icon-warnwhite (NORTHWEST)"; icon_state = "warnwhite"; dir = 9},/area/holodeck/rec_center/medical) -"bN" = (/obj/structure/table/holo/glass,/obj/item/weapon/storage/box/beakers,/turf/simulated/floor/holofloor{icon_state = "white"; tag = "icon-bluespace"},/area/holodeck/rec_center/medical) +"bK" = (/obj/structure/window{dir = 1},/turf/simulated/floor/holofloor{icon_state = "white"},/area/holodeck/rec_center/medical) +"bL" = (/turf/simulated/floor/holofloor{icon_state = "warnwhite"; dir = 8},/area/holodeck/rec_center/medical) +"bM" = (/obj/structure/table/glass,/obj/machinery/reagentgrinder,/turf/simulated/floor/holofloor{icon_state = "warnwhite"; dir = 9},/area/holodeck/rec_center/medical) +"bN" = (/obj/structure/table/glass,/obj/item/weapon/storage/box/beakers,/turf/simulated/floor/holofloor{icon_state = "white"},/area/holodeck/rec_center/medical) "bO" = (/obj/structure/window/reinforced{dir = 1},/turf/indestructible/riveted,/area/space) "bP" = (/turf/indestructible/riveted,/area/tdome/arena_source) "bQ" = (/turf/simulated/floor/plasteel,/area/tdome/arena_source) @@ -228,7 +228,7 @@ "et" = (/obj/structure/table/wood,/obj/item/weapon/paper_bin,/turf/simulated/floor/carpet,/area/centcom/ferry) "eu" = (/turf/simulated/floor/carpet,/area/centcom/ferry) "ev" = (/obj/structure/table/wood,/obj/item/weapon/pen,/turf/simulated/floor/carpet,/area/centcom/ferry) -"ew" = (/obj/machinery/washing_machine,/turf/simulated/floor/holofloor{icon_state = "white"; tag = "icon-bluespace"},/area/holodeck/rec_center/medical) +"ew" = (/obj/machinery/washing_machine,/turf/simulated/floor/holofloor{icon_state = "white"},/area/holodeck/rec_center/medical) "ex" = (/turf/indestructible/fakeglass{icon_state = "fakewindows"; dir = 1},/area/centcom/ferry) "ey" = (/obj/machinery/button/door{id = "adminshut"; name = "Administrative Shutter-Control"; pixel_y = 26},/turf/simulated/floor/carpet,/area/centcom/ferry) "ez" = (/obj/machinery/door/poddoor/shutters/preopen{id = "adminshut"; name = "Administrative Shutters"},/turf/indestructible/fakeglass{icon_state = "fakewindows"; dir = 1},/area/centcom/ferry) @@ -237,44 +237,44 @@ "eC" = (/turf/simulated/floor/holofloor{dir = 10; icon_state = "red"},/area/holodeck/rec_center/basketball) "eD" = (/turf/simulated/floor/holofloor{dir = 6; icon_state = "red"},/area/holodeck/rec_center/basketball) "eE" = (/obj/item/clothing/under/color/rainbow,/obj/item/clothing/glasses/sunglasses,/turf/simulated/floor/holofloor/beach,/area/holodeck/rec_center/beach) -"eF" = (/obj/structure/window/holo,/turf/simulated/floor/holofloor,/area/holodeck/rec_center/thunderdome) +"eF" = (/obj/structure/window,/turf/simulated/floor/holofloor,/area/holodeck/rec_center/thunderdome) "eG" = (/turf/indestructible/fakeglass{icon_state = "fakewindows"; dir = 9},/area/centcom/ferry) "eH" = (/turf/indestructible/fakeglass{icon_state = "fakewindows"; dir = 6},/area/centcom/ferry) "eI" = (/obj/structure/showcase/fakesec,/turf/simulated/floor/carpet,/area/centcom/ferry) "eJ" = (/obj/machinery/door/poddoor/shutters/preopen{id = "adminshut"; name = "Administrative Shutters"},/turf/indestructible/fakeglass,/area/centcom/ferry) "eK" = (/obj/structure/reagent_dispensers/water_cooler,/turf/simulated/floor/carpet,/area/centcom/ferry) "eL" = (/obj/structure/filingcabinet,/turf/simulated/floor/carpet,/area/centcom/ferry) -"eM" = (/obj/structure/window/holo,/turf/simulated/floor/holofloor{dir = 8; icon_state = "red"},/area/holodeck/rec_center/thunderdome) -"eN" = (/obj/structure/window/holo,/turf/simulated/floor/holofloor{dir = 4; icon_state = "red"},/area/holodeck/rec_center/thunderdome) -"eO" = (/obj/structure/window/holo{dir = 1},/obj/item/toy/beach_ball/holoball/dodgeball,/turf/simulated/floor/holofloor{dir = 2; icon_state = "red"},/area/holodeck/rec_center/dodgeball) -"eP" = (/obj/structure/window/holo{dir = 1},/obj/item/toy/beach_ball/holoball/dodgeball,/turf/simulated/floor/holofloor{dir = 10; icon_state = "red"},/area/holodeck/rec_center/dodgeball) +"eM" = (/obj/structure/window,/turf/simulated/floor/holofloor{dir = 8; icon_state = "red"},/area/holodeck/rec_center/thunderdome) +"eN" = (/obj/structure/window,/turf/simulated/floor/holofloor{dir = 4; icon_state = "red"},/area/holodeck/rec_center/thunderdome) +"eO" = (/obj/structure/window{dir = 1},/obj/item/toy/beach_ball/holoball/dodgeball,/turf/simulated/floor/holofloor{dir = 2; icon_state = "red"},/area/holodeck/rec_center/dodgeball) +"eP" = (/obj/structure/window{dir = 1},/obj/item/toy/beach_ball/holoball/dodgeball,/turf/simulated/floor/holofloor{dir = 10; icon_state = "red"},/area/holodeck/rec_center/dodgeball) "eQ" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0},/turf/indestructible/fakeglass{icon_state = "fakewindows"; dir = 8},/area/centcom/ferry) "eR" = (/obj/machinery/computer/shuttle/ferry,/turf/simulated/floor/plasteel/darkwarning{dir = 8},/area/centcom/ferry) -"eS" = (/obj/structure/window/holo{dir = 1},/obj/item/toy/beach_ball/holoball/dodgeball,/turf/simulated/floor/holofloor{dir = 6; icon_state = "red"},/area/holodeck/rec_center/dodgeball) -"eT" = (/obj/machinery/chem_master,/turf/simulated/floor/holofloor{tag = "icon-warnwhite (SOUTHWEST)"; icon_state = "warnwhite"; dir = 10},/area/holodeck/rec_center/medical) -"eU" = (/obj/structure/table/holo/glass,/obj/item/weapon/storage/box/syringes,/turf/simulated/floor/holofloor{icon_state = "white"; tag = "icon-bluespace"},/area/holodeck/rec_center/medical) +"eS" = (/obj/structure/window{dir = 1},/obj/item/toy/beach_ball/holoball/dodgeball,/turf/simulated/floor/holofloor{dir = 6; icon_state = "red"},/area/holodeck/rec_center/dodgeball) +"eT" = (/obj/machinery/chem_master,/turf/simulated/floor/holofloor{icon_state = "warnwhite"; dir = 10},/area/holodeck/rec_center/medical) +"eU" = (/obj/structure/table/glass,/obj/item/weapon/storage/box/syringes,/turf/simulated/floor/holofloor{icon_state = "white"},/area/holodeck/rec_center/medical) "eV" = (/turf/simulated/floor/plasteel/delivery,/area/centcom/ferry) "eW" = (/obj/machinery/door/airlock/external{name = "Ferry Airlock"; req_access_txt = "0"},/turf/simulated/floor/plasteel/delivery,/area/centcom/ferry) "eX" = (/turf/simulated/floor/plasteel/darkwarning{dir = 8},/area/centcom/ferry) "eY" = (/turf/simulated/floor/plasteel/darkgreen/corner{dir = 4},/area/centcom/ferry) "eZ" = (/obj/structure/mirror{pixel_y = 32},/obj/structure/dresser,/turf/simulated/floor/wood,/area/centcom/ferry) "fa" = (/obj/machinery/vending/autodrobe,/turf/simulated/floor/wood,/area/centcom/ferry) -"fb" = (/obj/structure/closet/wardrobe/white,/turf/simulated/floor/holofloor{icon_state = "white"; tag = "icon-bluespace"},/area/holodeck/rec_center/medical) +"fb" = (/obj/structure/closet/wardrobe/white,/turf/simulated/floor/holofloor{icon_state = "white"},/area/holodeck/rec_center/medical) "fc" = (/turf/simulated/floor/holofloor{dir = 1; icon_state = "green"},/area/holodeck/rec_center/basketball) "fd" = (/turf/simulated/floor/holofloor{dir = 9; icon_state = "green"},/area/holodeck/rec_center/basketball) "fe" = (/turf/simulated/floor/holofloor{dir = 5; icon_state = "green"},/area/holodeck/rec_center/basketball) "ff" = (/obj/item/toy/beach_ball,/turf/simulated/floor/holofloor/beach,/area/holodeck/rec_center/beach) -"fg" = (/obj/structure/window/holo{dir = 1},/turf/simulated/floor/holofloor,/area/holodeck/rec_center/thunderdome) -"fh" = (/obj/structure/window/holo{dir = 1},/turf/simulated/floor/holofloor{dir = 8; icon_state = "green"},/area/holodeck/rec_center/thunderdome) +"fg" = (/obj/structure/window{dir = 1},/turf/simulated/floor/holofloor,/area/holodeck/rec_center/thunderdome) +"fh" = (/obj/structure/window{dir = 1},/turf/simulated/floor/holofloor{dir = 8; icon_state = "green"},/area/holodeck/rec_center/thunderdome) "fi" = (/turf/indestructible/fakeglass{icon_state = "fakewindows"; dir = 5},/area/centcom/ferry) "fj" = (/obj/machinery/door/airlock/centcom{name = "Dressing Room"; opacity = 1; req_access_txt = "0"},/turf/simulated/floor/wood,/area/centcom/ferry) "fk" = (/obj/machinery/vending/clothing,/turf/simulated/floor/wood,/area/centcom/ferry) "fl" = (/turf/indestructible/riveted,/area/centcom/evac) -"fm" = (/obj/structure/window/holo{dir = 1},/turf/simulated/floor/holofloor{dir = 4; icon_state = "green"},/area/holodeck/rec_center/thunderdome) -"fn" = (/obj/structure/window/holo,/obj/item/toy/beach_ball/holoball/dodgeball,/turf/simulated/floor/holofloor{dir = 1; icon_state = "green"},/area/holodeck/rec_center/dodgeball) -"fo" = (/obj/structure/window/holo,/obj/item/toy/beach_ball/holoball/dodgeball,/turf/simulated/floor/holofloor{dir = 9; icon_state = "green"},/area/holodeck/rec_center/dodgeball) -"fp" = (/obj/structure/window/holo,/obj/item/toy/beach_ball/holoball/dodgeball,/turf/simulated/floor/holofloor{dir = 5; icon_state = "green"},/area/holodeck/rec_center/dodgeball) -"fq" = (/obj/structure/window/holo,/turf/simulated/floor/holofloor{icon_state = "white"; tag = "icon-bluespace"},/area/holodeck/rec_center/medical) +"fm" = (/obj/structure/window{dir = 1},/turf/simulated/floor/holofloor{dir = 4; icon_state = "green"},/area/holodeck/rec_center/thunderdome) +"fn" = (/obj/structure/window,/obj/item/toy/beach_ball/holoball/dodgeball,/turf/simulated/floor/holofloor{dir = 1; icon_state = "green"},/area/holodeck/rec_center/dodgeball) +"fo" = (/obj/structure/window,/obj/item/toy/beach_ball/holoball/dodgeball,/turf/simulated/floor/holofloor{dir = 9; icon_state = "green"},/area/holodeck/rec_center/dodgeball) +"fp" = (/obj/structure/window,/obj/item/toy/beach_ball/holoball/dodgeball,/turf/simulated/floor/holofloor{dir = 5; icon_state = "green"},/area/holodeck/rec_center/dodgeball) +"fq" = (/obj/structure/window,/turf/simulated/floor/holofloor{icon_state = "white"},/area/holodeck/rec_center/medical) "fr" = (/turf/simulated/floor/holofloor{dir = 8; icon_state = "green"},/area/holodeck/rec_center/basketball) "fs" = (/obj/item/toy/beach_ball/holoball,/turf/simulated/floor/holofloor,/area/holodeck/rec_center/basketball) "ft" = (/turf/indestructible/fakeglass{icon_state = "fakewindows"; dir = 10},/area/centcom/ferry) @@ -288,26 +288,26 @@ "fB" = (/turf/simulated/floor/holofloor{dir = 4; icon_state = "green"},/area/holodeck/rec_center/thunderdome) "fC" = (/turf/simulated/floor/holofloor{dir = 8; icon_state = "green"},/area/holodeck/rec_center/dodgeball) "fD" = (/turf/simulated/floor/holofloor{dir = 4; icon_state = "green"},/area/holodeck/rec_center/dodgeball) -"fE" = (/obj/structure/window/holo{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/bed,/obj/item/weapon/bedsheet/medical,/turf/simulated/floor/holofloor{tag = "icon-warnwhite (NORTHEAST)"; icon_state = "warnwhite"; dir = 5},/area/holodeck/rec_center/medical) +"fE" = (/obj/structure/window{icon_state = "rwindow"; dir = 8},/obj/structure/bed,/obj/item/weapon/bedsheet/medical,/turf/simulated/floor/holofloor{icon_state = "warnwhite"; dir = 5},/area/holodeck/rec_center/medical) "fF" = (/turf/indestructible/fakeglass,/area/centcom/ferry) "fG" = (/obj/structure/table/wood,/turf/simulated/floor/wood,/area/centcom/ferry) "fH" = (/obj/structure/bed/chair/comfy/black{dir = 4},/turf/simulated/floor/wood,/area/centcom/ferry) "fI" = (/turf/indestructible/fakedoor{name = "Centcom Security"},/area/centcom/evac) "fJ" = (/turf/simulated/floor/plasteel/black,/area/centcom/evac) -"fK" = (/obj/structure/bed,/obj/item/weapon/bedsheet/medical,/turf/simulated/floor/holofloor{tag = "icon-warnwhite (NORTHWEST)"; icon_state = "warnwhite"; dir = 9},/area/holodeck/rec_center/medical) -"fL" = (/obj/structure/window/holo{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/holo,/obj/machinery/computer/pandemic,/turf/simulated/floor/holofloor{icon_state = "white"; tag = "icon-bluespace"},/area/holodeck/rec_center/medical) +"fK" = (/obj/structure/bed,/obj/item/weapon/bedsheet/medical,/turf/simulated/floor/holofloor{icon_state = "warnwhite"; dir = 9},/area/holodeck/rec_center/medical) +"fL" = (/obj/structure/window{icon_state = "rwindow"; dir = 8},/obj/structure/window,/obj/machinery/computer/pandemic,/turf/simulated/floor/holofloor{icon_state = "white"},/area/holodeck/rec_center/medical) "fM" = (/turf/simulated/floor/holofloor{dir = 2; icon_state = "green"},/area/holodeck/rec_center/basketball) "fN" = (/turf/simulated/floor/holofloor{dir = 1; icon_state = "green"},/area/holodeck/rec_center/dodgeball) -"fO" = (/obj/machinery/door/window/westleft,/turf/simulated/floor/holofloor{tag = "icon-warnwhitecorner (WEST)"; icon_state = "warnwhitecorner"; dir = 8},/area/holodeck/rec_center/medical) +"fO" = (/obj/machinery/door/window/westleft,/turf/simulated/floor/holofloor{icon_state = "warnwhitecorner"; dir = 8},/area/holodeck/rec_center/medical) "fP" = (/obj/machinery/door/airlock/centcom{name = "Transport Shuttle"; opacity = 1; req_access_txt = "101"},/turf/simulated/floor/plasteel/darkgreen/side{dir = 2},/area/centcom/ferry) "fQ" = (/obj/structure/table/reinforced,/obj/item/weapon/clipboard,/turf/simulated/floor/plasteel/darkred/side{dir = 8},/area/centcom/evac) "fR" = (/obj/structure/showcase/fakesec,/turf/simulated/floor/plasteel/black,/area/centcom/evac) "fS" = (/obj/structure/bed/chair/office/dark,/turf/simulated/floor/plasteel/black,/area/centcom/evac) -"fT" = (/obj/machinery/door/window/westleft,/turf/simulated/floor/holofloor{tag = "icon-warnwhite (SOUTHEAST)"; icon_state = "warnwhite"; dir = 6},/area/holodeck/rec_center/medical) -"fU" = (/obj/machinery/door/window/westleft,/turf/simulated/floor/holofloor{tag = "icon-warnwhite (NORTHEAST)"; icon_state = "warnwhite"; dir = 5},/area/holodeck/rec_center/medical) -"fV" = (/obj/structure/window/holo{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/simulated/floor/holofloor{tag = "icon-warnwhite (NORTHEAST)"; icon_state = "warnwhite"; dir = 5},/area/holodeck/rec_center/medical) +"fT" = (/obj/machinery/door/window/westleft,/turf/simulated/floor/holofloor{icon_state = "warnwhite"; dir = 6},/area/holodeck/rec_center/medical) +"fU" = (/obj/machinery/door/window/westleft,/turf/simulated/floor/holofloor{icon_state = "warnwhite"; dir = 5},/area/holodeck/rec_center/medical) +"fV" = (/obj/structure/window{icon_state = "rwindow"; dir = 8},/turf/simulated/floor/holofloor{icon_state = "warnwhite"; dir = 5},/area/holodeck/rec_center/medical) "fW" = (/turf/simulated/floor/holofloor/beach/coast,/area/holodeck/rec_center/beach) -"fX" = (/obj/structure/window/holo{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/bed,/obj/item/weapon/bedsheet/medical,/turf/simulated/floor/holofloor{tag = "icon-warnwhite"; icon_state = "warnwhite"},/area/holodeck/rec_center/medical) +"fX" = (/obj/structure/window{icon_state = "rwindow"; dir = 8},/obj/structure/bed,/obj/item/weapon/bedsheet/medical,/turf/simulated/floor/holofloor{icon_state = "warnwhite"},/area/holodeck/rec_center/medical) "fY" = (/turf/indestructible/riveted,/area/centcom/control) "fZ" = (/obj/structure/flora/ausbushes/palebush,/turf/simulated/floor/grass,/area/centcom/control) "ga" = (/obj/structure/flora/ausbushes/brflowers,/turf/simulated/floor/grass,/area/centcom/control) @@ -317,9 +317,9 @@ "ge" = (/obj/machinery/door/window/northleft{dir = 2; name = "Centcom Security"; req_access_txt = "101"},/turf/simulated/floor/plasteel/black,/area/centcom/evac) "gf" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin,/turf/simulated/floor/plasteel/darkred/side{dir = 2},/area/centcom/evac) "gg" = (/obj/structure/table/reinforced,/obj/item/weapon/pen,/turf/simulated/floor/plasteel/darkred/side{dir = 2},/area/centcom/evac) -"gh" = (/obj/structure/bed,/obj/item/weapon/bedsheet/medical,/turf/simulated/floor/holofloor{tag = "icon-warnwhite (SOUTHWEST)"; icon_state = "warnwhite"; dir = 10},/area/holodeck/rec_center/medical) -"gi" = (/obj/structure/window/holo{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/machinery/sleeper{tag = "icon-sleeper-open (NORTH)"; icon_state = "sleeper-open"; dir = 1},/turf/simulated/floor/holofloor{tag = "icon-warnwhite"; icon_state = "warnwhite"},/area/holodeck/rec_center/medical) -"gj" = (/obj/machinery/sleeper{tag = "icon-sleeper-open (NORTH)"; icon_state = "sleeper-open"; dir = 1},/turf/simulated/floor/holofloor{tag = "icon-warnwhite (SOUTHEAST)"; icon_state = "warnwhite"; dir = 6},/area/holodeck/rec_center/medical) +"gh" = (/obj/structure/bed,/obj/item/weapon/bedsheet/medical,/turf/simulated/floor/holofloor{icon_state = "warnwhite"; dir = 10},/area/holodeck/rec_center/medical) +"gi" = (/obj/structure/window{icon_state = "rwindow"; dir = 8},/obj/machinery/sleeper{icon_state = "sleeper-open"; dir = 1},/turf/simulated/floor/holofloor{icon_state = "warnwhite"},/area/holodeck/rec_center/medical) +"gj" = (/obj/machinery/sleeper{icon_state = "sleeper-open"; dir = 1},/turf/simulated/floor/holofloor{icon_state = "warnwhite"; dir = 6},/area/holodeck/rec_center/medical) "gk" = (/turf/simulated/floor/holofloor{dir = 10; icon_state = "green"},/area/holodeck/rec_center/basketball) "gl" = (/obj/docking_port/stationary{dir = 8; dwidth = 2; height = 12; id = "ferry_away"; name = "unknown"; width = 5},/turf/space,/area/space) "gm" = (/turf/indestructible/fakeglass,/area/centcom/control) @@ -349,9 +349,9 @@ "gK" = (/turf/simulated/floor/holofloor{dir = 6; icon_state = "green"},/area/holodeck/rec_center/basketball) "gL" = (/obj/structure/holohoop{dir = 1},/turf/simulated/floor/holofloor{dir = 2; icon_state = "green"},/area/holodeck/rec_center/basketball) "gM" = (/turf/simulated/floor/holofloor/beach/water,/area/holodeck/rec_center/beach) -"gN" = (/obj/structure/table/holo,/obj/item/clothing/head/helmet/thunderdome,/obj/item/clothing/suit/armor/tdome/green,/obj/item/clothing/under/color/green,/obj/item/weapon/holo/esword/green,/turf/simulated/floor/holofloor{dir = 2; icon_state = "green"},/area/holodeck/rec_center/thunderdome) -"gO" = (/obj/structure/table/holo,/turf/simulated/floor/holofloor{dir = 10; icon_state = "green"},/area/holodeck/rec_center/thunderdome) -"gP" = (/obj/structure/table/holo,/obj/machinery/readybutton,/turf/simulated/floor/holofloor{dir = 6; icon_state = "green"},/area/holodeck/rec_center/thunderdome) +"gN" = (/obj/structure/table,/obj/item/clothing/head/helmet/thunderdome,/obj/item/clothing/suit/armor/tdome/green,/obj/item/clothing/under/color/green,/obj/item/weapon/holo/esword/green,/turf/simulated/floor/holofloor{dir = 2; icon_state = "green"},/area/holodeck/rec_center/thunderdome) +"gO" = (/obj/structure/table,/turf/simulated/floor/holofloor{dir = 10; icon_state = "green"},/area/holodeck/rec_center/thunderdome) +"gP" = (/obj/structure/table,/obj/machinery/readybutton,/turf/simulated/floor/holofloor{dir = 6; icon_state = "green"},/area/holodeck/rec_center/thunderdome) "gQ" = (/turf/simulated/floor/grass,/area/centcom/control) "gR" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/plasteel/green/side{dir = 8},/area/centcom/control) "gS" = (/obj/machinery/door/airlock/centcom{name = "Centcom Customs"; opacity = 1; req_access_txt = "109"},/turf/simulated/floor/plasteel/black,/area/centcom/control) diff --git a/code/__DEFINES/flags.dm b/code/__DEFINES/flags.dm index 814a4fd966b..e8d68aad8c0 100644 --- a/code/__DEFINES/flags.dm +++ b/code/__DEFINES/flags.dm @@ -15,6 +15,7 @@ #define NOSHIELD 32 // weapon not affected by shield #define CONDUCT 64 // conducts electricity (metal etc.) #define ABSTRACT 128 // for all things that are technically items but used for various different stuff, made it 128 because it could conflict with other flags other way +#define NODECONSTRUCT 128 // For machines and structures that should not break into parts, eg, holodeck stuff #define FPRINT 256 // takes a fingerprint #define ON_BORDER 512 // item has priority to check when entering or leaving diff --git a/code/game/machinery/computer/computer.dm b/code/game/machinery/computer/computer.dm index 66f2c180578..b90cd0d3cdf 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/item/I, mob/user, params) - if(istype(I, /obj/item/weapon/screwdriver) && circuit && !(flags&ABSTRACT)) + if(istype(I, /obj/item/weapon/screwdriver) && circuit && !(flags&NODECONSTRUCT)) playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) user << " You start to disconnect the monitor..." if(do_after(user, 20/I.toolspeed, target = src)) diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm index aa09ff0e4e0..1c1da8d33a8 100644 --- a/code/game/machinery/doors/windowdoor.dm +++ b/code/game/machinery/doors/windowdoor.dm @@ -151,7 +151,7 @@ /obj/machinery/door/window/proc/take_damage(damage) src.health = max(0, src.health - damage) if (src.health <= 0) - if(!(flags&ABSTRACT)) + if(!(flags&NODECONSTRUCT)) var/debris = list( new /obj/item/weapon/shard(src.loc), new /obj/item/weapon/shard(src.loc), @@ -270,7 +270,7 @@ add_fingerprint(user) - if(!(flags&ABSTRACT)) + if(!(flags&NODECONSTRUCT)) if(istype(I, /obj/item/weapon/screwdriver)) if(src.density || src.operating) user << "You need to open the door to access the maintenance panel!" diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index d91fe7ccae3..65592005bac 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() || (flags & ABSTRACT)) && istype(C) + . = !(state_open || panel_open || is_operational() || (flags & NODECONSTRUCT)) && 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) && !(flags & ABSTRACT) + . = istype(C) && (panel_open || ignore_panel) && !(flags & NODECONSTRUCT) 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) && !(flags & ABSTRACT)) + if(istype(S) && !(flags & NODECONSTRUCT)) 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) && !(flags & ABSTRACT)) + if(istype(W) && !(flags & NODECONSTRUCT)) user << "You begin [anchored ? "un" : ""]securing [name]..." playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) if(do_after(user, time/W.toolspeed, target = src)) @@ -334,7 +334,7 @@ Class Procs: return 0 /obj/machinery/proc/exchange_parts(mob/user, obj/item/weapon/storage/part_replacer/W) - if(flags & ABSTRACT) + if(flags & NODECONSTRUCT) return var/shouldplaysound = 0 if(istype(W) && component_parts) diff --git a/code/game/objects/structures/beds_chairs/bed.dm b/code/game/objects/structures/beds_chairs/bed.dm index c6d06d46405..b0531d147fa 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) && !(flags&ABSTRACT)) + if(istype(W, /obj/item/weapon/wrench) && !(flags&NODECONSTRUCT)) 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 5e6b4418b76..1ab5437d9db 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -165,7 +165,7 @@ /obj/structure/closet/ex_act(severity, target) contents_explosion(severity, target) - if(loc && ispath(material_drop) && !(flags & ABSTRACT)) + if(loc && ispath(material_drop) && !(flags & NODECONSTRUCT)) new material_drop(loc) dump_contents() qdel(src) diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm index 9b762e5c5a8..293f881747f 100644 --- a/code/game/objects/structures/grille.dm +++ b/code/game/objects/structures/grille.dm @@ -121,7 +121,7 @@ /obj/structure/grille/Deconstruct() if(!loc) //if already qdel'd somehow, we do nothing return - if(!(flags&ABSTRACT)) + if(!(flags&NODECONSTRUCT)) transfer_fingerprints_to(stored) var/turf/T = loc stored.loc = T @@ -132,7 +132,7 @@ density = 0 destroyed = 1 stored.amount = 1 - if(!(flags&ABSTRACT)) + if(!(flags&NODECONSTRUCT)) var/obj/item/stack/rods/newrods = new(loc) transfer_fingerprints_to(newrods) diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index 653e753e119..00e68d88d95 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -147,7 +147,7 @@ if (istype(I, /obj/item/weapon/grab)) tablepush(I, user) return - if(!(flags&ABSTRACT)) + if(!(flags&NODECONSTRUCT)) if (istype(I, /obj/item/weapon/screwdriver)) if(istype(src, /obj/structure/table/reinforced)) var/obj/structure/table/reinforced/RT = src @@ -205,7 +205,7 @@ #define TBL_DECONSTRUCT 3 /obj/structure/table/proc/table_destroy(destroy_type, mob/user) - if(!deconstructable || (flags&ABSTRACT)) + if(!deconstructable || (flags&NODECONSTRUCT)) 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) && !(flags&ABSTRACT)) + if (istype(W, /obj/item/weapon/wrench) && !(flags&NODECONSTRUCT)) playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) rack_destroy() return @@ -517,7 +517,7 @@ */ /obj/structure/rack/proc/rack_destroy() - if(!(flags&ABSTRACT)) + if(!(flags&NODECONSTRUCT)) density = 0 var/obj/item/weapon/rack_parts/newparts = new(loc) transfer_fingerprints_to(newparts) diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index 9d785ce400c..c8180e6fa76 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -33,15 +33,16 @@ if(reinf) state = 2*anchored - if(!(flags & ABSTRACT)) - storeditems.Add(new/obj/item/weapon/shard(src)) - if(fulltile) + spawn(5) // The NODECONSTRUCT flag gets added immediately by the holodeck (but not immediately enough) + if(!(flags & NODECONSTRUCT)) 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) + 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) @@ -207,7 +208,7 @@ user << "[src] is already in good condition!" return update_nearby_icons() - else if(!(flags&ABSTRACT)) + else if(!(flags&NODECONSTRUCT)) if(istype(I, /obj/item/weapon/screwdriver)) playsound(loc, 'sound/items/Screwdriver.ogg', 75, 1) if(reinf && (state == 2 || state == 1)) @@ -377,7 +378,7 @@ /obj/structure/window/Destroy() density = 0 air_update_turf(1) - if(!disassembled) + if(!disassembled && !(flags&NODECONSTRUCT)) playsound(src, "shatter", 70, 1) update_nearby_icons() return ..() diff --git a/code/modules/holodeck/computer_funcs.dm b/code/modules/holodeck/computer_funcs.dm index 7e15d97ef5f..33edb15d605 100644 --- a/code/modules/holodeck/computer_funcs.dm +++ b/code/modules/holodeck/computer_funcs.dm @@ -71,9 +71,9 @@ // 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 + M.flags |= NODECONSTRUCT for(var/obj/structure/S in spawned) - S.flags |= ABSTRACT + S.flags |= NODECONSTRUCT effects = list() spawn(30) @@ -86,9 +86,9 @@ spawned += x // holocarp are not forever added += x for(var/obj/machinery/M in added) - M.flags |= ABSTRACT + M.flags |= NODECONSTRUCT for(var/obj/structure/S in added) - S.flags |= ABSTRACT + S.flags |= NODECONSTRUCT /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/items.dm b/code/modules/holodeck/items.dm index 755fcfcca20..a2839eeb6ec 100644 --- a/code/modules/holodeck/items.dm +++ b/code/modules/holodeck/items.dm @@ -213,8 +213,9 @@ eventstarted = 1 - for(var/obj/structure/window/holo/W in currentarea) - qdel(W) + for(var/obj/structure/window/W in currentarea) + if(W.flags&NODECONSTRUCT) // Just in case: only holo-windows + qdel(W) for(var/mob/M in currentarea) M << "FIGHT!" diff --git a/code/modules/holodeck/tables.dm b/code/modules/holodeck/tables.dm deleted file mode 100644 index c96a1f1523b..00000000000 --- a/code/modules/holodeck/tables.dm +++ /dev/null @@ -1,24 +0,0 @@ -/obj/structure/table/holo - name = "table" - frame = null - buildstackamount = 0 - framestackamount = 0 - canSmoothWith = null - -/obj/structure/table/holo/glass - name = "glass table" - icon = 'icons/obj/smooth_structures/glass_table.dmi' - icon_state = "glass_table" - -/obj/structure/table/holo/wood - name = "wood table" - icon = 'icons/obj/smooth_structures/wood_table.dmi' - icon_state = "wood_table" - canSmoothWith = list(/obj/structure/table/holo/wood, /obj/structure/table/holo/poker) - -/obj/structure/table/holo/poker - name = "poker table" - icon = 'icons/obj/smooth_structures/poker_table.dmi' - icon_state = "poker_table" - canSmoothWith = list(/obj/structure/table/holo/wood, /obj/structure/table/holo/poker) - diff --git a/code/modules/holodeck/windows.dm b/code/modules/holodeck/windows.dm deleted file mode 100644 index 8a74e2317a2..00000000000 --- a/code/modules/holodeck/windows.dm +++ /dev/null @@ -1,30 +0,0 @@ -/obj/structure/window/holo - name = "reinforced window" - icon = 'icons/obj/structures.dmi' - icon_state = "rwindow" - desc = "A window. It has an electric hum to it." - density = 1 - layer = 3.2//Just above doors - pressure_resistance = 4*ONE_ATMOSPHERE - anchored = 1.0 - flags = ON_BORDER | ABSTRACT - maxhealth = 100 - disassembled = 1 // prevents noise on destruction - -/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" - opacity = 1 - -/obj/structure/window/holo/fulltile - dir = 5 - maxhealth = 250 - -/obj/structure/window/holo/opaque/fulltile - dir = 5 - maxhealth = 250 \ No newline at end of file diff --git a/tgstation.dme b/tgstation.dme index ce238c87677..1e8065680fe 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -1087,9 +1087,7 @@ #include "code\modules\holodeck\computer_funcs.dm" #include "code\modules\holodeck\holo_effect.dm" #include "code\modules\holodeck\items.dm" -#include "code\modules\holodeck\tables.dm" #include "code\modules\holodeck\turfs.dm" -#include "code\modules\holodeck\windows.dm" #include "code\modules\html_interface\html_interface.dm" #include "code\modules\html_interface\html_interface_client.dm" #include "code\modules\html_interface\cards\cards.dm"