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