/obj/machinery/sec_lock//P'sure this was part of the tunnel name = "Security Pad" desc = "A lock, for doors. Used by security." icon = 'icons/obj/stationobjs.dmi' icon_state = "sec_lock" var/obj/item/weapon/card/id/scan = null var/a_type = 0.0 var/obj/machinery/door/d1 = null var/obj/machinery/door/d2 = null anchored = 1.0 req_access = list(access_brig) use_power = 1 idle_power_usage = 2 active_power_usage = 4 /obj/move/airtunnel/process() if (!( src.deployed )) return null else ..() return /obj/move/airtunnel/connector/create() src.current = src src.next = new /obj/move/airtunnel( null ) src.next.master = src.master src.next.previous = src spawn( 0 ) src.next.create(airtunnel_start - airtunnel_stop, src.y) return return /obj/move/airtunnel/connector/wall/create() src.current = src src.next = new /obj/move/airtunnel/wall( null ) src.next.master = src.master src.next.previous = src spawn( 0 ) src.next.create(airtunnel_start - airtunnel_stop, src.y) return return /obj/move/airtunnel/connector/wall/process() return /obj/move/airtunnel/wall/create(num, y_coord) if (((num < 7 || (num > 16 && num < 23)) && y_coord == airtunnel_bottom)) src.next = new /obj/move/airtunnel( null ) else src.next = new /obj/move/airtunnel/wall( null ) src.next.master = src.master src.next.previous = src if (num > 1) spawn( 0 ) src.next.create(num - 1, y_coord) return return /obj/move/airtunnel/wall/move_right() flick("wall-m", src) return ..() /obj/move/airtunnel/wall/move_left() flick("wall-m", src) return ..() /obj/move/airtunnel/wall/process() return /obj/move/airtunnel/proc/move_left() src.relocate(get_step(src, WEST)) if ((src.next && src.next.deployed)) return src.next.move_left() else return src.next return /obj/move/airtunnel/proc/move_right() src.relocate(get_step(src, EAST)) if ((src.previous && src.previous.deployed)) src.previous.move_right() return src.previous /obj/move/airtunnel/proc/create(num, y_coord) if (y_coord == airtunnel_bottom) if ((num < 7 || (num > 16 && num < 23))) src.next = new /obj/move/airtunnel( null ) else src.next = new /obj/move/airtunnel/wall( null ) else src.next = new /obj/move/airtunnel( null ) src.next.master = src.master src.next.previous = src if (num > 1) spawn( 0 ) src.next.create(num - 1, y_coord) return return /obj/machinery/at_indicator/ex_act(severity) switch(severity) if(1.0) del(src) return if(2.0) if (prob(50)) for(var/x in src.verbs) src.verbs -= x src.icon_state = "reader_broken" stat |= BROKEN if(3.0) if (prob(25)) for(var/x in src.verbs) src.verbs -= x src.icon_state = "reader_broken" stat |= BROKEN else return /obj/machinery/at_indicator/blob_act() if (prob(75)) for(var/x in src.verbs) src.verbs -= x src.icon_state = "reader_broken" stat |= BROKEN /obj/machinery/at_indicator/proc/update_icon() if(stat & (BROKEN|NOPOWER)) icon_state = "reader_broken" return var/status = 0 if (SS13_airtunnel.operating == 1) status = "r" else if (SS13_airtunnel.operating == 2) status = "e" else if(!SS13_airtunnel.connectors) return var/obj/move/airtunnel/connector/C = pick(SS13_airtunnel.connectors) if (C.current == C) status = 0 else if (!( C.current.next )) status = 2 else status = 1 src.icon_state = text("reader[][]", (SS13_airtunnel.siphon_status == 2 ? "1" : "0"), status) return /obj/machinery/at_indicator/process() if(stat & (NOPOWER|BROKEN)) src.update_icon() return use_power(5, ENVIRON) src.update_icon() return /obj/machinery/computer/airtunnel/attack_paw(user as mob) return src.attack_hand(user) obj/machinery/computer/airtunnel/attack_ai(user as mob) return src.attack_hand(user) /obj/machinery/computer/airtunnel/attack_hand(var/mob/user as mob) if(..()) return var/dat = "Air Tunnel Controls
" user.machine = src if (SS13_airtunnel.operating == 1) dat += "Status: RETRACTING
" else if (SS13_airtunnel.operating == 2) dat += "Status: EXPANDING
" else var/obj/move/airtunnel/connector/C = pick(SS13_airtunnel.connectors) if (C.current == C) dat += "Status: Fully Retracted
" else if (!( C.current.next )) dat += "Status: Fully Extended
" else dat += "Status: Stopped Midway
" dat += text("Retract Stop Extend
", src, src, src) dat += text("
Air Level: []
", (SS13_airtunnel.air_stat ? "Acceptable" : "DANGEROUS")) dat += "Air System Status: " switch(SS13_airtunnel.siphon_status) if(0.0) dat += "Stopped " if(1.0) dat += "Siphoning (Siphons only) " if(2.0) dat += "Regulating (BOTH) " if(3.0) dat += "RELEASING MAX (Siphons only) " else dat += text("(Refresh)
", src) dat += text("RELEASE (Siphons only) Siphon (Siphons only) Stop Regulate
", src, src, src, src) dat += text("

Close
", user) user << browse(dat, "window=computer;size=400x500") onclose(user, "computer") return /obj/machinery/computer/airtunnel/proc/update_icon() if(stat & BROKEN) icon_state = "broken" return if(stat & NOPOWER) icon_state = "c_unpowered" return var/status = 0 if (SS13_airtunnel.operating == 1) status = "r" else if (SS13_airtunnel.operating == 2) status = "e" else var/obj/move/airtunnel/connector/C = pick(SS13_airtunnel.connectors) if (C.current == C) status = 0 else if (!( C.current.next )) status = 2 else status = 1 src.icon_state = text("console[][]", (SS13_airtunnel.siphon_status >= 2 ? "1" : "0"), status) return /obj/machinery/computer/airtunnel/process() src.update_icon() if(stat & (NOPOWER|BROKEN)) return use_power(250) src.updateUsrDialog() return /obj/machinery/computer/airtunnel/Topic(href, href_list) if(..()) return if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf)) || (istype(usr, /mob/living/silicon)))) usr.machine = src if (href_list["retract"]) SS13_airtunnel.retract() else if (href_list["stop"]) SS13_airtunnel.operating = 0 else if (href_list["extend"]) SS13_airtunnel.extend() else if (href_list["release"]) SS13_airtunnel.siphon_status = 3 SS13_airtunnel.siphons() else if (href_list["siphon"]) SS13_airtunnel.siphon_status = 1 SS13_airtunnel.siphons() else if (href_list["stop_siph"]) SS13_airtunnel.siphon_status = 0 SS13_airtunnel.siphons() else if (href_list["auto"]) SS13_airtunnel.siphon_status = 2 SS13_airtunnel.siphons() else if (href_list["refresh"]) SS13_airtunnel.siphons() src.add_fingerprint(usr) src.updateUsrDialog() return /obj/machinery/sec_lock/attack_ai(user as mob) return src.attack_hand(user) /obj/machinery/sec_lock/attack_paw(user as mob) return src.attack_hand(user) /obj/machinery/sec_lock/attack_hand(var/mob/user as mob) if(..()) return use_power(10) if (src.loc == user.loc) var/dat = text("Security Pad:
\nKeycard: []
\nToggle Outer Door
\nToggle Inner Door
\n
\nEmergency Close
\nEmergency Open
", (src.scan ? text("[]", src, src.scan.name) : text("-----", src)), src, src, src, src) user << browse(dat, "window=sec_lock") onclose(user, "sec_lock") return /obj/machinery/sec_lock/attackby(nothing, user as mob) return src.attack_hand(user) /obj/machinery/sec_lock/New() ..() spawn( 2 ) if (src.a_type == 1) src.d2 = locate(/obj/machinery/door, locate(src.x - 2, src.y - 1, src.z)) src.d1 = locate(/obj/machinery/door, get_step(src, SOUTHWEST)) else if (src.a_type == 2) src.d2 = locate(/obj/machinery/door, locate(src.x - 2, src.y + 1, src.z)) src.d1 = locate(/obj/machinery/door, get_step(src, NORTHWEST)) else src.d1 = locate(/obj/machinery/door, get_step(src, SOUTH)) src.d2 = locate(/obj/machinery/door, get_step(src, SOUTHEAST)) return return /obj/machinery/sec_lock/Topic(href, href_list) if(..()) return if ((!( src.d1 ) || !( src.d2 ))) usr << "\red Error: Cannot interface with door security!" return if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf)) || (istype(usr, /mob/living/silicon)))) usr.machine = src if (href_list["card"]) if (src.scan) src.scan.loc = src.loc src.scan = null else var/obj/item/weapon/card/id/I = usr.equipped() if (istype(I, /obj/item/weapon/card/id)) usr.drop_item() I.loc = src src.scan = I if (href_list["door1"]) if (src.scan) if (src.check_access(src.scan)) if (src.d1.density) spawn( 0 ) src.d1.open() return else spawn( 0 ) src.d1.close() return if (href_list["door2"]) if (src.scan) if (src.check_access(src.scan)) if (src.d2.density) spawn( 0 ) src.d2.open() return else spawn( 0 ) src.d2.close() return if (href_list["em_cl"]) if (src.scan) if (src.check_access(src.scan)) if (!( src.d1.density )) src.d1.close() return sleep(1) spawn( 0 ) if (!( src.d2.density )) src.d2.close() return if (href_list["em_op"]) if (src.scan) if (src.check_access(src.scan)) spawn( 0 ) if (src.d1.density) src.d1.open() return sleep(1) spawn( 0 ) if (src.d2.density) src.d2.open() return src.add_fingerprint(usr) src.updateUsrDialog() return /datum/air_tunnel/air_tunnel1/New() ..() for(var/obj/move/airtunnel/A in locate(/area/airtunnel1)) A.master = src A.create() src.connectors += A //Foreach goto(21) return /datum/air_tunnel/proc/siphons() switch(src.siphon_status) if(0.0) for(var/obj/machinery/atmoalter/siphs/S in locate(/area/airtunnel1)) S.t_status = 3 if(1.0) for(var/obj/machinery/atmoalter/siphs/fullairsiphon/S in locate(/area/airtunnel1)) S.t_status = 2 S.t_per = 1000000.0 for(var/obj/machinery/atmoalter/siphs/scrubbers/S in locate(/area/airtunnel1)) S.t_status = 3 if(2.0) for(var/obj/machinery/atmoalter/siphs/S in locate(/area/airtunnel1)) S.t_status = 4 if(3.0) for(var/obj/machinery/atmoalter/siphs/fullairsiphon/S in locate(/area/airtunnel1)) S.t_status = 1 S.t_per = 1000000.0 for(var/obj/machinery/atmoalter/siphs/scrubbers/S in locate(/area/airtunnel1)) S.t_status = 3 else return /datum/air_tunnel/proc/stop() src.operating = 0 return /datum/air_tunnel/proc/extend() if (src.operating) return spawn(0) src.operating = 2 while(src.operating == 2) var/ok = 1 for(var/obj/move/airtunnel/connector/A in src.connectors) if (!( A.current.next )) src.operating = 0 return if (!( A.move_left() )) ok = 0 if (!( ok )) src.operating = 0 else for(var/obj/move/airtunnel/connector/A in src.connectors) if (A.current) A.current.next.loc = get_step(A.current.loc, EAST) A.current = A.current.next A.current.deployed = 1 else src.operating = 0 sleep(20) return /datum/air_tunnel/proc/retract() if (src.operating) return spawn(0) src.operating = 1 while(src.operating == 1) var/ok = 1 for(var/obj/move/airtunnel/connector/A in src.connectors) if (A.current == A) src.operating = 0 return if (A.current) A.current.loc = null A.current.deployed = 0 A.current = A.current.previous else ok = 0 if (!( ok )) src.operating = 0 else for(var/obj/move/airtunnel/connector/A in src.connectors) if (!( A.current.move_right() )) src.operating = 0 sleep(20) return