diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm
index e8d4078593e..045257fc71d 100644
--- a/code/game/machinery/doors/airlock.dm
+++ b/code/game/machinery/doors/airlock.dm
@@ -1238,7 +1238,11 @@ About the new airlock wires panel:
var/obj/item/weapon/airlock_electronics/ae
if(!electronics)
ae = new/obj/item/weapon/airlock_electronics( src.loc )
- ae.conf_access = src.req_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
diff --git a/code/game/machinery/doors/airlock_electronics.dm b/code/game/machinery/doors/airlock_electronics.dm
index 2310e85c07c..ddedf045e7e 100644
--- a/code/game/machinery/doors/airlock_electronics.dm
+++ b/code/game/machinery/doors/airlock_electronics.dm
@@ -11,6 +11,7 @@
req_access = list(access_engine)
var/list/conf_access = null
+ var/one_access = 0 //if set to 1, door would receive req_one_access instead of req_access
var/last_configurator = null
var/locked = 1
@@ -33,6 +34,8 @@
else
t1 += "Block
"
+ t1 += "Access requirement is set to "
+ t1 += one_access ? "ONE
" : "ALL
"
t1 += conf_access == null ? "All
" : "All
"
@@ -44,6 +47,8 @@
if (!conf_access || !conf_access.len || !(acc in conf_access))
t1 += "[aname]
"
+ else if(one_access)
+ t1 += "[aname]
"
else
t1 += "[aname]
"
@@ -75,6 +80,9 @@
if (href_list["logout"])
locked = 1
+ if (href_list["one_access"])
+ one_access = !one_access
+
if (href_list["access"])
toggle_access(href_list["access"])
diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm
index 45ff776d401..66184774c49 100644
--- a/code/game/machinery/doors/windowdoor.dm
+++ b/code/game/machinery/doors/windowdoor.dm
@@ -130,6 +130,21 @@
new /obj/item/weapon/shard(src.loc)
var/obj/item/weapon/cable_coil/CC = new /obj/item/weapon/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.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
src.density = 0
del(src)
return
@@ -162,15 +177,9 @@
if(istype(user, /mob/living/carbon/alien/humanoid) || istype(user, /mob/living/carbon/slime/adult))
if(src.operating)
return
- src.health = max(0, src.health - 25)
playsound(src.loc, 'sound/effects/Glasshit.ogg', 75, 1)
visible_message("\red [user] smashes against the [src.name].", 1)
- if (src.health <= 0)
- new /obj/item/weapon/shard(src.loc)
- var/obj/item/weapon/cable_coil/CC = new /obj/item/weapon/cable_coil(src.loc)
- CC.amount = 2
- src.density = 0
- del(src)
+ take_damage(25)
else
return src.attack_hand(user)
@@ -181,7 +190,7 @@
/obj/machinery/door/window/attackby(obj/item/weapon/I as obj, mob/user as mob)
//If it's in the process of opening/closing, ignore the click
- if (src.operating)
+ if (src.operating == 1)
return
//Emags and ninja swords? You may pass.
@@ -199,19 +208,50 @@
open()
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!"
+
+ 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"
+ 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.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)
+ 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))
var/aforce = I.force
- if(I.damtype == BRUTE || I.damtype == BURN)
- src.health = max(0, src.health - aforce)
playsound(src.loc, 'sound/effects/Glasshit.ogg', 75, 1)
visible_message("\red [src] was hit by [I].")
- if (src.health <= 0)
- new /obj/item/weapon/shard(src.loc)
- var/obj/item/weapon/cable_coil/CC = new /obj/item/weapon/cable_coil(src.loc)
- CC.amount = 2
- src.density = 0
- del(src)
+ if(I.damtype == BRUTE || I.damtype == BURN)
+ take_damage(aforce)
return
diff --git a/code/game/objects/structures/door_assembly.dm b/code/game/objects/structures/door_assembly.dm
index 7ece9970d55..9930d8d84fb 100644
--- a/code/game/objects/structures/door_assembly.dm
+++ b/code/game/objects/structures/door_assembly.dm
@@ -421,7 +421,11 @@ obj/structure/door_assembly
door = new src.airlock_type( src.loc )
//door.req_access = src.req_access
door.electronics = src.electronics
- door.req_access = src.electronics.conf_access
+ if(src.electronics.one_access)
+ door.req_access = null
+ door.req_one_access = src.electronics.conf_access
+ else
+ door.req_access = src.electronics.conf_access
if(created_name)
door.name = created_name
src.electronics.loc = door
diff --git a/code/game/objects/structures/windoor_assembly.dm b/code/game/objects/structures/windoor_assembly.dm
index 532819d0201..478f6989baa 100644
--- a/code/game/objects/structures/windoor_assembly.dm
+++ b/code/game/objects/structures/windoor_assembly.dm
@@ -107,17 +107,17 @@ obj/structure/windoor_assembly/Del()
src.name = "Windoor Assembly"
//Adding plasteel makes the assembly a secure windoor assembly. Step 2 (optional) complete.
- else if(istype(W, /obj/item/stack/sheet/plasteel) && !secure)
- var/obj/item/stack/sheet/plasteel/P = W
- if(P.amount < 2)
- user << "\red You need more plasteel to do this."
+ 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."
return
- user << "\blue You start to reinforce the windoor with plasteel."
+ user << "\blue You start to reinforce the windoor with rods."
if(do_after(user,40))
if(!src) return
- P.use(2)
+ R.use(4)
user << "\blue You reinforce the windoor."
src.secure = "secure_"
if(src.anchored)
@@ -145,7 +145,7 @@ obj/structure/windoor_assembly/Del()
if("02")
//Removing wire from the assembly. Step 5 undone.
- if(istype(W, /obj/item/weapon/wirecutters))
+ if(istype(W, /obj/item/weapon/wirecutters) && !src.electronics)
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.")
@@ -156,12 +156,12 @@ obj/structure/windoor_assembly/Del()
new/obj/item/weapon/cable_coil(get_turf(user), 1)
src.state = "01"
if(src.secure)
- src.name = "Secure Wired Windoor Assembly"
+ src.name = "Secure Anchored Windoor Assembly"
else
- src.name = "Wired Windoor Assembly"
+ src.name = "Anchored Windoor Assembly"
//Adding airlock electronics for access. Step 6 complete.
- else if(istype(W, /obj/item/weapon/airlock_electronics))
+ else if(istype(W, /obj/item/weapon/airlock_electronics) && W:icon_state != "door_electronics_smoked")
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.")
@@ -177,22 +177,20 @@ obj/structure/windoor_assembly/Del()
W.loc = src.loc
//Screwdriver to remove airlock electronics. Step 6 undone.
- else if(istype(W, /obj/item/weapon/screwdriver))
+ else if(istype(W, /obj/item/weapon/screwdriver) && src.electronics)
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) return
+ if(!src || !src.electronics) return
user << "\blue You've removed the airlock electronics!"
- src.name = "Wired Windoor Assembly"
- var/obj/item/weapon/airlock_electronics/ae
- if (!electronics)
- ae = new/obj/item/weapon/airlock_electronics( src.loc )
+ if(src.secure)
+ src.name = "Secure Wired Windoor Assembly"
else
- ae = electronics
- electronics = null
- ae.loc = src.loc
-
+ src.name = "Wired Windoor Assembly"
+ var/obj/item/weapon/airlock_electronics/ae = electronics
+ electronics = null
+ ae.loc = src.loc
//Crowbar to complete the assembly, Step 7 complete.
else if(istype(W, /obj/item/weapon/crowbar))
@@ -221,7 +219,11 @@ obj/structure/windoor_assembly/Del()
windoor.dir = src.dir
windoor.density = 0
- windoor.req_access = src.electronics.conf_access
+ 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
@@ -235,7 +237,11 @@ obj/structure/windoor_assembly/Del()
windoor.dir = src.dir
windoor.density = 0
- windoor.req_access = src.electronics.conf_access
+ 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
diff --git a/html/changelog.html b/html/changelog.html
index 44b3cd609bc..ccfe5623a1c 100644
--- a/html/changelog.html
+++ b/html/changelog.html
@@ -57,6 +57,17 @@ Stuff which is in development and not yet visible to players or just code relate
(ie. code improvements for expandability, etc.) should not be listed here. They
should be listed in the changelog upon commit though. Thanks. -->
+
+
18.06.2013
+
Segrain updated:
+
+ - Fixed some bugs in windoor construction.
+ - Secure windoors are made with rods again.
+ - Windoors drop their electronics when broken. Emagged windoors can have theirs removed by crowbar.
+ - Airlock electronics can be configured to make door open for any single access on it instead of all of them.
+
+
+
13.06.2013
Kilakk updated: