diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm index de8a39ffd31..d86e7d96b0a 100644 --- a/code/game/machinery/doors/windowdoor.dm +++ b/code/game/machinery/doors/windowdoor.dm @@ -6,20 +6,10 @@ var/base_state = "left" var/health = 150.0 //If you change this, consider changing ../door/window/brigdoor/ health at the bottom of this .dm file visible = 0.0 - use_power = 0 flags = ON_BORDER opacity = 0 var/obj/item/weapon/airlock_electronics/electronics = null explosion_resistance = 5 - air_properties_vary_with_direction = 1 - - -/obj/machinery/door/window/update_nearby_tiles(need_rebuild) - if(!air_master) return 0 - - air_master.mark_for_update(get_turf(src)) - - return 1 /obj/machinery/door/window/New() ..() @@ -27,54 +17,70 @@ if (src.req_access && src.req_access.len) src.icon_state = "[src.icon_state]" src.base_state = src.icon_state - + color = color_windows(src) return /obj/machinery/door/window/Destroy() density = 0 - playsound(src, "shatter", 70, 1) + if(health == 0) + playsound(src, "shatter", 70, 1) ..() + +/obj/machinery/door/window/proc/open_and_close() + open() + if(src.check_access(null)) + sleep(50) + else //secure doors close faster + sleep(20) + close() + /obj/machinery/door/window/Bumped(atom/movable/AM as mob|obj) + if( operating || !src.density ) + return if (!( ismob(AM) )) var/obj/machinery/bot/bot = AM if(istype(bot)) - if(density && src.check_access(bot.botcard)) - open() - sleep(50) - close() + if(src.check_access(bot.botcard)) + open_and_close() + else + flick(text("[]deny", src.base_state), src) else if(istype(AM, /obj/mecha)) var/obj/mecha/mecha = AM - if(density) - if(mecha.occupant && src.allowed(mecha.occupant)) - open() - sleep(50) - close() + if(mecha.occupant && src.allowed(mecha.occupant)) + open_and_close() + else + flick(text("[]deny", src.base_state), src) return if (!( ticker )) return - if (src.operating) - return - if (src.density && src.allowed(AM)) - open() - if(src.check_access(null)) - sleep(50) - else //secure doors close faster - sleep(20) - close() + var/mob/M = AM + if(!M.restrained()) + bumpopen(M) return -/obj/machinery/door/window/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) +/obj/machinery/door/window/bumpopen(mob/user as mob) + if( operating || !src.density ) + return + src.add_fingerprint(user) + if(!src.requiresID()) + user = null + + if(allowed(user)) + open_and_close() + else + flick(text("[]deny", src.base_state), src) + return + +/obj/machinery/door/window/CanPass(atom/movable/mover, turf/target, height=0) if(istype(mover) && mover.checkpass(PASSGLASS)) return 1 if(get_dir(loc, target) == dir) //Make sure looking at appropriate border - if(air_group) return 0 return !density else return 1 - //used in the AStar algorithm to determinate if the turf the door is on is passable /obj/machinery/door/window/CanAStarPass(var/obj/item/weapon/card/id/ID, var/to_dir) return !density || (dir != to_dir) || check_access(ID) @@ -87,11 +93,17 @@ else return 1 -/obj/machinery/door/window/open() +/obj/machinery/door/window/open(var/forced=0) if (src.operating == 1) //doors can still open when emag-disabled return 0 if (!ticker) return 0 + if(!forced) + if(stat & NOPOWER) + return 0 + if(forced < 2) + if(emagged) + return 0 if(!src.operating) //in case of emag src.operating = 1 flick(text("[]opening", src.base_state), src) @@ -108,9 +120,15 @@ src.operating = 0 return 1 -/obj/machinery/door/window/close() +/obj/machinery/door/window/close(var/forced=0) if (src.operating) return 0 + if(!forced) + if(stat & NOPOWER) + return 0 + if(forced < 2) + if(emagged) + return 0 src.operating = 1 flick(text("[]closing", src.base_state), src) playsound(src.loc, 'sound/machines/windowdoor.ogg', 100, 1) @@ -121,7 +139,6 @@ // if(src.visible) // SetOpacity(1) //TODO: why is this here? Opaque windoors? ~Carn update_nearby_tiles() - sleep(10) src.operating = 0 @@ -130,40 +147,29 @@ /obj/machinery/door/window/proc/take_damage(var/damage) src.health = max(0, src.health - damage) if (src.health <= 0) - getFromPool(/obj/item/weapon/shard, loc) - var/obj/item/stack/cable_coil/CC = new /obj/item/stack/cable_coil(src.loc) - CC.amount = 2 - var/obj/item/weapon/airlock_electronics/ae - if(!electronics) - ae = new/obj/item/weapon/airlock_electronics( src.loc ) - if(!src.req_access) - src.check_access() - if(src.req_access.len) - ae.conf_access = src.req_access - else if (src.req_one_access.len) - ae.conf_access = src.req_one_access - ae.one_access = 1 - else - ae = electronics - electronics = null - ae.loc = src.loc - if(operating == -1) - ae.icon_state = "door_electronics_smoked" - operating = 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) src.density = 0 - del(src) + qdel(src) return /obj/machinery/door/window/bullet_act(var/obj/item/projectile/Proj) if(Proj.damage) - take_damage(round(Proj.damage / 2)) + if((Proj.damage_type == BRUTE || Proj.damage_type == BURN)) + take_damage(round(Proj.damage / 2)) ..() //When an object is thrown at the window /obj/machinery/door/window/hitby(AM as mob|obj) ..() - visible_message("\red The glass door was hit by [AM].", 1) + visible_message("\The [src] was hit by \the [AM].") var/tforce = 0 if(ismob(AM)) tforce = 40 @@ -174,122 +180,159 @@ //..() //Does this really need to be here twice? The parent proc doesn't even do anything yet. - Nodrak return -/obj/machinery/door/window/attack_ghost(mob/user as mob) - return - - /obj/machinery/door/window/mech_melee_attack(obj/mecha/M) if(M.damtype == "brute") playsound(src.loc, 'sound/effects/Glasshit.ogg', 75, 1) M.occupant_message("You hit [src].") visible_message("[src] has been hit by [M.name].") take_damage(M.force) - return + return /obj/machinery/door/window/attack_ai(mob/user as mob) return src.attack_hand(user) -/obj/machinery/door/window/attack_paw(mob/user as mob) - if(istype(user, /mob/living/carbon/alien/humanoid)) - if(src.operating) - return - playsound(src.loc, 'sound/effects/Glasshit.ogg', 75, 1) - visible_message("\red [user] smashes against the [src.name].", 1) - if (src.health <= 0) - getFromPool(/obj/item/weapon/shard, loc) - var/obj/item/stack/cable_coil/CC = new /obj/item/stack/cable_coil(src.loc) - CC.amount = 2 - src.density = 0 - del(src) - else - return src.attack_hand(user) +/obj/machinery/door/window/proc/attack_generic(mob/user as mob, damage = 0) + if(src.operating) + return + playsound(src.loc, 'sound/effects/Glasshit.ogg', 75, 1) + user.visible_message("[user] smashes against the [src.name].", \ + "[user] smashes against the [src.name].") + take_damage(damage) +/obj/machinery/door/window/attack_alien(mob/living/user as mob) + if(islarva(user)) + return + attack_generic(user, 25) + +/obj/machinery/door/window/attack_animal(mob/living/user as mob) + if(!isanimal(user)) + return + var/mob/living/simple_animal/M = user + if(M.melee_damage_upper <= 0) + return + attack_generic(M, M.melee_damage_upper) + + +/obj/machinery/door/window/attack_slime(mob/living/carbon/slime/user as mob) + if(!user.is_adult) + return + attack_generic(user, 25) + +/obj/machinery/door/window/attack_paw(mob/user as mob) + return src.attack_hand(user) /obj/machinery/door/window/attack_hand(mob/user as mob) return src.attackby(user, user) -/obj/machinery/door/window/attack_animal(mob/user as mob) - if(!isanimal(user)) return - var/mob/living/simple_animal/M = user - if(M.melee_damage_upper <= 0) return - playsound(src.loc, 'sound/effects/Glasshit.ogg', 75, 1) - visible_message("\red [user] smashes against the [src.name].", 1) - take_damage(M.melee_damage_upper) - -/obj/machinery/door/window/attackby(obj/item/weapon/I as obj, mob/user as mob) +/obj/machinery/door/window/attackby(obj/item/weapon/I as obj, mob/living/user as mob) //If it's in the process of opening/closing, ignore the click - if (src.operating == 1) + if (src.operating) return + add_fingerprint(user) + //Emags and ninja swords? You may pass. if (src.density && (istype(I, /obj/item/weapon/card/emag)||istype(I, /obj/item/weapon/melee/energy/blade))) src.operating = -1 + flick("[src.base_state]spark", src) + sleep(6) + desc += "
Its access panel is smoking slightly." if(istype(I, /obj/item/weapon/melee/energy/blade)) var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread() spark_system.set_up(5, 0, src.loc) spark_system.start() playsound(src.loc, "sparks", 50, 1) playsound(src.loc, 'sound/weapons/blade1.ogg', 50, 1) - visible_message("\blue The glass door was sliced open by [user]!") - flick("[src.base_state]spark", src) - sleep(6) + visible_message(" The glass door was sliced open by [user]!") + open(2) + emagged = 1 + return 1 open() + emagged = 1 return 1 - //If it's emagged, crowbar can pry electronics out. - if (src.operating == -1 && istype(I, /obj/item/weapon/crowbar)) - playsound(src.loc, 'sound/items/Crowbar.ogg', 100, 1) - user.visible_message("[user] removes the electronics from the windoor.", "You start to remove electronics from the windoor.") - if (do_after(user,40)) - user << "\blue You removed the windoor electronics!" + 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 - var/obj/structure/windoor_assembly/wa = new/obj/structure/windoor_assembly(src.loc) - if (istype(src, /obj/machinery/door/window/brigdoor)) - wa.secure = "secure_" - wa.name = "Secure Wired Windoor Assembly" + 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)) + 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 + + user << "You removed the airlock electronics!" + + var/obj/item/weapon/airlock_electronics/ae + if(!electronics) + ae = new/obj/item/weapon/airlock_electronics( src.loc ) + if(!src.req_access) + src.check_access() + if(src.req_access.len) + ae.conf_access = src.req_access + else if (src.req_one_access.len) + ae.conf_access = src.req_one_access + ae.one_access = 1 + else + ae = electronics + electronics = null + ae.loc = src.loc + + qdel(src) + return + + + //If windoor is unpowered, crowbar, fireaxe and armblade can force it. + if(istype(I, /obj/item/weapon/crowbar) || istype(I, /obj/item/weapon/twohanded/fireaxe)) + if(stat & NOPOWER) + if(src.density) + open(2) else - wa.name = "Wired Windoor Assembly" - if (src.base_state == "right" || src.base_state == "rightsecure") - wa.facing = "r" - wa.dir = src.dir - wa.state = "02" - wa.update_icon() - - var/obj/item/weapon/airlock_electronics/ae - if(!electronics) - ae = new/obj/item/weapon/airlock_electronics( src.loc ) - if(!src.req_access) - src.check_access() - if(src.req_access.len) - ae.conf_access = src.req_access - else if (src.req_one_access.len) - ae.conf_access = src.req_one_access - ae.one_access = 1 - else - ae = electronics - electronics = null - ae.loc = src.loc - ae.icon_state = "door_electronics_smoked" - - operating = 0 - del(src) + close(2) return //If it's a weapon, smash windoor. Unless it's an id card, agent card, ect.. then ignore it (Cards really shouldnt damage a door anyway) - if(src.density && istype(I, /obj/item/weapon) && !istype(I, /obj/item/weapon/card)) + if(src.density && istype(I, /obj/item/weapon) && !istype(I, /obj/item/weapon/card) ) + if( (I.flags&NOBLUDGEON) || !I.force ) + return + var/aforce = I.force playsound(src.loc, 'sound/effects/Glasshit.ogg', 75, 1) - visible_message("\red [src] was hit by [I].") - if (src.health <= 0) - getFromPool(/obj/item/weapon/shard, loc) - var/obj/item/stack/cable_coil/CC = new /obj/item/stack/cable_coil(src.loc) - CC.amount = 2 - src.density = 0 - del(src) + visible_message("\The [src] has been hit by [user] with [I].") + if(I.damtype == BURN || I.damtype == BRUTE) + take_damage(aforce) return - - src.add_fingerprint(user) if (!src.requiresID()) //don't care who they are or what they have, act as if they're NOTHING user = null @@ -308,11 +351,10 @@ /obj/machinery/door/window/brigdoor - name = "Secure Door" + name = "secure door" icon = 'icons/obj/doors/windoor.dmi' icon_state = "leftsecure" base_state = "leftsecure" - req_access = list(access_security) var/id = null health = 300.0 //Stronger doors for prison (regular window door health is 200) diff --git a/code/game/objects/structures/windoor_assembly.dm b/code/game/objects/structures/windoor_assembly.dm index b571a869009..b9e5b2a34f6 100644 --- a/code/game/objects/structures/windoor_assembly.dm +++ b/code/game/objects/structures/windoor_assembly.dm @@ -1,18 +1,18 @@ /* Windoor (window door) assembly -Nodrak * Step 1: Create a windoor out of rglass - * Step 2: Add r-glass to the assembly to make a secure windoor (Optional) + * Step 2: Add plasteel to the assembly to make a secure windoor (Optional) * Step 3: Rotate or Flip the assembly to face and open the way you want * Step 4: Wrench the assembly in place * Step 5: Add cables to the assembly * Step 6: Set access for the door. - * Step 7: Screwdriver the door to complete + * Step 7: Crowbar the door to complete */ obj/structure/windoor_assembly icon = 'icons/obj/doors/windoor.dmi' - name = "Windoor Assembly" + name = "windoor Assembly" icon_state = "l_windoor_assembly01" anchored = 0 density = 0 @@ -20,12 +20,20 @@ obj/structure/windoor_assembly var/ini_dir var/obj/item/weapon/airlock_electronics/electronics = null + var/created_name = null //Vars to help with the icon's name var/facing = "l" //Does the windoor open to the left or right? - var/secure = "" //Whether or not this creates a secure windoor - var/state = "01" //How far the door assembly has progressed in terms of sprites + var/secure = 0 //Whether or not this creates a secure windoor + var/state = "01" //How far the door assembly has progressed +/obj/structure/windoor_assembly/proc/update_nearby_tiles(need_rebuild) + if(!air_master) return 0 + + air_master.mark_for_update(loc) + + return 1 + obj/structure/windoor_assembly/New(dir=NORTH) ..() src.ini_dir = src.dir @@ -37,13 +45,12 @@ obj/structure/windoor_assembly/Destroy() ..() /obj/structure/windoor_assembly/update_icon() - icon_state = "[facing]_[secure]windoor_assembly[state]" + icon_state = "[facing]_[secure ? "secure_" : ""]windoor_assembly[state]" -/obj/structure/windoor_assembly/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) +/obj/structure/windoor_assembly/CanPass(atom/movable/mover, turf/target, height=0) if(istype(mover) && mover.checkpass(PASSGLASS)) return 1 if(get_dir(loc, target) == dir) //Make sure looking at appropriate border - if(air_group) return 0 return !density else return 1 @@ -59,38 +66,49 @@ obj/structure/windoor_assembly/Destroy() /obj/structure/windoor_assembly/attackby(obj/item/W as obj, mob/user as mob) //I really should have spread this out across more states but thin little windoors are hard to sprite. + add_fingerprint(user) switch(state) if("01") if(istype(W, /obj/item/weapon/weldingtool) && !anchored ) var/obj/item/weapon/weldingtool/WT = W if (WT.remove_fuel(0,user)) - user.visible_message("[user] dissassembles the windoor assembly.", "You start to dissassemble the windoor assembly.") + user.visible_message("[user] dissassembles the windoor assembly.", "You start to dissassemble the windoor assembly.") playsound(src.loc, 'sound/items/Welder2.ogg', 50, 1) if(do_after(user, 40)) if(!src || !WT.isOn()) return - user << "\blue You dissasembled the windoor assembly!" - new /obj/item/stack/sheet/rglass(get_turf(src), 5) + user << "You dissasembled the windoor assembly!" + var/obj/item/stack/sheet/rglass/RG = new (get_turf(src), 5) + RG.add_fingerprint(user) if(secure) - new /obj/item/stack/rods(get_turf(src), 4) - del(src) + var/obj/item/stack/rods/R = new (get_turf(src), 4) + R.add_fingerprint(user) + qdel(src) else - user << "\blue You need more welding fuel to dissassemble the windoor assembly." return //Wrenching an unsecure assembly anchors it in place. Step 4 complete if(istype(W, /obj/item/weapon/wrench) && !anchored) + for(var/obj/machinery/door/window/WD in src.loc) + if(WD.dir == src.dir) + user << "There is already a windoor in that location." + return playsound(src.loc, 'sound/items/Ratchet.ogg', 100, 1) user.visible_message("[user] secures the windoor assembly to the floor.", "You start to secure the windoor assembly to the floor.") if(do_after(user, 40)) - if(!src) return - user << "\blue You've secured the windoor assembly!" + if(!src || src.anchored) + return + for(var/obj/machinery/door/window/WD in src.loc) + if(WD.dir == src.dir) + user << "There is already a windoor in that location." + return + user << "You've secured the windoor assembly!" src.anchored = 1 if(src.secure) - src.name = "Secure Anchored Windoor Assembly" + src.name = "secure anchored windoor assembly" else - src.name = "Anchored Windoor Assembly" + src.name = "anchored windoor assembly" //Unwrenching an unsecure assembly un-anchors it. Step 4 undone else if(istype(W, /obj/item/weapon/wrench) && anchored) @@ -98,104 +116,122 @@ obj/structure/windoor_assembly/Destroy() user.visible_message("[user] unsecures the windoor assembly to the floor.", "You start to unsecure the windoor assembly to the floor.") if(do_after(user, 40)) - if(!src) return - user << "\blue You've unsecured the windoor assembly!" + if(!src || !src.anchored) + return + user << "You've unsecured the windoor assembly!" src.anchored = 0 if(src.secure) - src.name = "Secure Windoor Assembly" + src.name = "secure windoor assembly" else - src.name = "Windoor Assembly" + src.name = "windoor assembly" //Adding plasteel makes the assembly a secure windoor assembly. Step 2 (optional) complete. - else if(istype(W, /obj/item/stack/rods) && !secure) - var/obj/item/stack/rods/R = W - if(R.amount < 4) - user << "\red You need more rods to do this." + else if(istype(W, /obj/item/stack/sheet/plasteel) && !secure) + var/obj/item/stack/sheet/plasteel/P = W + if(P.amount < 2) + user << "You need more plasteel to do this." return - user << "\blue You start to reinforce the windoor with rods." + user << "You start to reinforce the windoor with plasteel." if(do_after(user,40)) - if(!src) return + if(!src || secure) + return - R.use(4) - user << "\blue You reinforce the windoor." - src.secure = "secure_" + P.use(2) + user << "You reinforce the windoor." + src.secure = 1 if(src.anchored) - src.name = "Secure Anchored Windoor Assembly" + src.name = "secure anchored windoor assembly" else - src.name = "Secure Windoor Assembly" + src.name = "secure windoor assembly" //Adding cable to the assembly. Step 5 complete. else if(istype(W, /obj/item/stack/cable_coil) && anchored) user.visible_message("[user] wires the windoor assembly.", "You start to wire the windoor assembly.") if(do_after(user, 40)) - if(!src) return + if(!src || !src.anchored || src.state != "01") + return var/obj/item/stack/cable_coil/CC = W CC.use(1) - user << "\blue You wire the windoor!" + user << "You wire the windoor!" src.state = "02" if(src.secure) - src.name = "Secure Wired Windoor Assembly" + src.name = "secure wired windoor assembly" else - src.name = "Wired Windoor Assembly" + src.name = "wired windoor assembly" else ..() if("02") //Removing wire from the assembly. Step 5 undone. - if(istype(W, /obj/item/weapon/wirecutters) && !src.electronics) + if(istype(W, /obj/item/weapon/wirecutters)) playsound(src.loc, 'sound/items/Wirecutter.ogg', 100, 1) user.visible_message("[user] cuts the wires from the airlock assembly.", "You start to cut the wires from airlock assembly.") if(do_after(user, 40)) - if(!src) return + if(!src || src.state != "02") + return - user << "\blue You cut the windoor wires.!" + user << "You cut the windoor wires!" new/obj/item/stack/cable_coil(get_turf(user), 1) src.state = "01" if(src.secure) - src.name = "Secure Anchored Windoor Assembly" + src.name = "secure anchored windoor assembly" else - src.name = "Anchored Windoor Assembly" + src.name = "anchored windoor assembly" //Adding airlock electronics for access. Step 6 complete. - else if(istype(W, /obj/item/weapon/airlock_electronics) && W:icon_state != "door_electronics_smoked") + else if(istype(W, /obj/item/weapon/airlock_electronics)) playsound(src.loc, 'sound/items/Screwdriver.ogg', 100, 1) user.visible_message("[user] installs the electronics into the airlock assembly.", "You start to install electronics into the airlock assembly.") + user.drop_item() + W.loc = src if(do_after(user, 40)) - if(!src) return - - user.drop_item() - W.loc = src - user << "\blue You've installed the airlock electronics!" - src.name = "Near finished Windoor Assembly" + if(!src || src.electronics) + W.loc = src.loc + return + user << "You've installed the airlock electronics!" + src.name = "near finished windoor assembly" src.electronics = W else W.loc = src.loc //Screwdriver to remove airlock electronics. Step 6 undone. - else if(istype(W, /obj/item/weapon/screwdriver) && src.electronics) + else if(istype(W, /obj/item/weapon/screwdriver)) + if(!electronics) + return + playsound(src.loc, 'sound/items/Screwdriver.ogg', 100, 1) user.visible_message("[user] removes the electronics from the airlock assembly.", "You start to uninstall electronics from the airlock assembly.") if(do_after(user, 40)) - if(!src || !src.electronics) return - user << "\blue You've removed the airlock electronics!" - if(src.secure) - src.name = "Secure Wired Windoor Assembly" - else - src.name = "Wired Windoor Assembly" - var/obj/item/weapon/airlock_electronics/ae = electronics + if(!src || !electronics) + return + user << "You've removed the airlock electronics!" + src.name = "wired windoor assembly" + var/obj/item/weapon/airlock_electronics/ae + ae = electronics electronics = null ae.loc = src.loc + else if(istype(W, /obj/item/weapon/pen)) + var/t = stripped_input(user, "Enter the name for the door.", src.name, src.created_name,MAX_NAME_LEN) + if(!t) + return + if(!in_range(src, usr) && src.loc != usr) + return + created_name = t + return + + + //Crowbar to complete the assembly, Step 7 complete. else if(istype(W, /obj/item/weapon/crowbar)) if(!src.electronics) - usr << "\red The assembly is missing electronics." + usr << "The assembly is missing electronics." return usr << browse(null, "window=windoor_access") playsound(src.loc, 'sound/items/Crowbar.ogg', 100, 1) @@ -203,50 +239,53 @@ obj/structure/windoor_assembly/Destroy() if(do_after(user, 40)) - if(!src) return + if(src.loc && src.electronics) + + density = 1 //Shouldn't matter but just incase + user << "You finish the windoor!" + + if(secure) + var/obj/machinery/door/window/brigdoor/windoor = new /obj/machinery/door/window/brigdoor(src.loc) + if(src.facing == "l") + windoor.icon_state = "leftsecureopen" + windoor.base_state = "leftsecure" + else + windoor.icon_state = "rightsecureopen" + windoor.base_state = "rightsecure" + windoor.dir = src.dir + windoor.density = 0 + + if(src.electronics.one_access) + windoor.req_one_access = src.electronics.conf_access + else + windoor.req_access = src.electronics.conf_access + windoor.electronics = src.electronics + src.electronics.loc = windoor + if(created_name) + windoor.name = created_name + windoor.close() - density = 1 //Shouldn't matter but just incase - user << "\blue You finish the windoor!" - if(secure) - var/obj/machinery/door/window/brigdoor/windoor = new /obj/machinery/door/window/brigdoor(src.loc) - if(src.facing == "l") - windoor.icon_state = "leftsecureopen" - windoor.base_state = "leftsecure" else - windoor.icon_state = "rightsecureopen" - windoor.base_state = "rightsecure" - windoor.dir = src.dir - windoor.density = 0 + var/obj/machinery/door/window/windoor = new /obj/machinery/door/window(src.loc) + if(src.facing == "l") + windoor.icon_state = "leftopen" + windoor.base_state = "left" + else + windoor.icon_state = "rightopen" + windoor.base_state = "right" + windoor.dir = src.dir + windoor.density = 0 - if(src.electronics.one_access) - windoor.req_access = null - windoor.req_one_access = src.electronics.conf_access - else windoor.req_access = src.electronics.conf_access - windoor.electronics = src.electronics - src.electronics.loc = windoor - else - var/obj/machinery/door/window/windoor = new /obj/machinery/door/window(src.loc) - if(src.facing == "l") - windoor.icon_state = "leftopen" - windoor.base_state = "left" - else - windoor.icon_state = "rightopen" - windoor.base_state = "right" - windoor.dir = src.dir - windoor.density = 0 - - if(src.electronics.one_access) - windoor.req_access = null - windoor.req_one_access = src.electronics.conf_access - else - windoor.req_access = src.electronics.conf_access - windoor.electronics = src.electronics - src.electronics.loc = windoor + windoor.electronics = src.electronics + src.electronics.loc = windoor + if(created_name) + windoor.name = created_name + windoor.close() - del(src) + qdel(src) else @@ -261,17 +300,18 @@ obj/structure/windoor_assembly/Destroy() set name = "Rotate Windoor Assembly" set category = "Object" set src in oview(1) - + if(usr.stat || !usr.canmove || usr.restrained()) + return if (src.anchored) usr << "It is fastened to the floor; therefore, you can't rotate it!" return 0 - if(src.state != "01") - update_nearby_tiles(need_rebuild=1) //Compel updates before + //if(src.state != "01") + //update_nearby_tiles(need_rebuild=1) //Compel updates before src.dir = turn(src.dir, 270) - if(src.state != "01") - update_nearby_tiles(need_rebuild=1) + //if(src.state != "01") + //update_nearby_tiles(need_rebuild=1) src.ini_dir = src.dir update_icon() @@ -282,6 +322,8 @@ obj/structure/windoor_assembly/Destroy() set name = "Flip Windoor Assembly" set category = "Object" set src in oview(1) + if(usr.stat || !usr.canmove || usr.restrained()) + return if(src.facing == "l") usr << "The windoor will now slide to the right." @@ -292,10 +334,3 @@ obj/structure/windoor_assembly/Destroy() update_icon() return - -/obj/structure/windoor_assembly/proc/update_nearby_tiles(need_rebuild) - if(!air_master) return 0 - - air_master.mark_for_update(loc) - - return 1