Refactor computers, outgoing portal, aicore unpushable

This commit is contained in:
Kyep
2018-01-08 01:16:15 -08:00
parent 4bafb660c4
commit 4e8e569754
4 changed files with 174 additions and 52 deletions
+3 -3
View File
@@ -698,7 +698,7 @@
"nv" = (/obj/effect/landmark/corpse/mime{name = "Mime Pilot"},/turf/simulated/floor/plasteel/airless,/area/space)
"nw" = (/obj/effect/decal/cleanable/blood,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot)
"nx" = (/obj/machinery/computer/syndicate_depot/teleporter,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot)
"ny" = (/obj/machinery/light{dir = 1; on = 1},/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot)
"ny" = (/obj/machinery/light{dir = 1; on = 1},/obj/effect/decal/warning_stripes/blue,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot)
"nz" = (/obj/machinery/bluespace_beacon/syndicate,/obj/effect/decal/warning_stripes/yellow,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot)
"nA" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/plating/airless/asteroid,/area/syndicate_depot/outer)
"nB" = (/obj/machinery/navbeacon/invisible{codes_txt = "patrol;next_patrol=SDSW"; invisibility = 100; location = "SDNW"},/turf/simulated/floor/plating/airless/asteroid,/area/syndicate_depot/outer)
@@ -777,7 +777,7 @@
"oW" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot)
"oX" = (/obj/item/candle,/obj/structure/table,/turf/simulated/floor/plating/airless/asteroid,/area/syndicate_depot)
"oY" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor/plating/airless/asteroid,/area/syndicate_depot)
"oZ" = (/obj/machinery/computer/syndicate_depot,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot)
"oZ" = (/obj/machinery/computer/syndicate_depot/doors,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot)
"pa" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot)
"pb" = (/obj/effect/spawner/random_spawners/syndicate/trap/mine,/obj/item/stack/sheet/metal{layer = 4.1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/syndicate_depot)
"pc" = (/obj/machinery/door/poddoor{id_tag = "syndi_depot_rear"; name = "Sealed Doors"; protected = 0},/turf/simulated/floor/plating/airless,/area/syndicate_depot)
@@ -1006,7 +1006,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamLnnnmncmLaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacznonpaznpnqmJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHlZlZlZlZmfmflZlZlZlZlZlZlZlZlZlZlZmrmjmimimimimimimimjmymzmrmbmblZlZlZmHmHaaaaaamHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHaaaaaaaamInrnomTnsnsnqmMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalZlZmbmbmrmrmBmAmrmrmrmrmrmCmrmrmrmrmrmrmDmimFmvmimimrmymGmrmrmrmombmblZlZmHmHmHaaaamHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHmHmHaaaamHmHmHmHmHntnvnumHmHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHlZlZmlmbmrmAmAmBmSmAmVmrmrnhnjninwnlmrmrmrmrmrmrmrmymrminynxnzmrmbmbmblZlZmHmHmHaamHmHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHmHmHmHmHmHmHmHmHmHmImImHmHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHlZmbnBnAmrmVnCmBmAmAnDmyminjnhnjnwmimymimimimumimimimrmimimimimrmsmblZlZlZaaaamHmHmHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHmHmHmHmHmHmHmHmHmHmImImHmHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHlZmbnBnAmrmVnCmBmAmAnDmyminjnhnjnwmimymimimimumimimimrmiminSmimrmsmblZlZlZaaaamHmHmHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHmHmHmHmHmHmHmHmHmHmHmHmHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHlZmbmbmbmrmrmrnEnFmimrmrminhnjmrmrmymrminGminHmiminImrminlminlmrmbmblZlZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHmHmHmHmHmHmHmHmHmHmHmImIaaaaczmKmKmLmLmKmKmKmKmJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHlZlZmbmomrmimimimimimrmrmrmrmrmrnJmimrnInImimimiminImrmynKmrmrmrmbmblZlZaaaamHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHmHmHmHmHmHmHmHmHmHmHmHmIczmKmNmImOazazmPmPmQazmRdlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamHlZlZmbmbmrmimimimimimrnHnLnImrnLmimimrmrnMmrmrmymrmrmrminOnNmvmrmbmblZlZlZmHmHaaaaaaaaaaaaaaaaaakVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+11 -2
View File
@@ -612,8 +612,7 @@ var/list/ghostteleportlocs = list()
/area/syndicate_depot/proc/locker_looted()
something_looted = TRUE
if(on_peaceful)
peaceful_mode(FALSE)
increase_alert("Nobody steals from the Syndicate!")
increase_alert("Thieves!")
/area/syndicate_depot/proc/saw_mech()
if(detected_mech)
@@ -632,6 +631,9 @@ var/list/ghostteleportlocs = list()
L.locked = 1
L.req_access = list(access_syndicate_leader)
L.update_icon()
for(var/obj/machinery/computer/syndicate_depot/teleporter/P in src)
if(!P.portal_enabled)
P.toggle_portal()
else
for(var/obj/machinery/door/airlock/A in src)
A.req_access_txt = "[access_syndicate_leader]"
@@ -671,6 +673,7 @@ var/list/ghostteleportlocs = list()
if(called_backup || used_self_destruct)
return
called_backup = TRUE
lockout_computers()
if(!silent)
announce_here("Depot Code RED", reason)
for(var/obj/machinery/door/poddoor/P in airlocks)
@@ -690,6 +693,8 @@ var/list/ghostteleportlocs = list()
used_self_destruct = TRUE
local_alarm("", TRUE)
activate_lockdown(TRUE)
lockout_computers()
updateicon()
if(containment_failure)
announce_here("Depot Code DELTA", reason)
else
@@ -722,6 +727,10 @@ var/list/ghostteleportlocs = list()
if(A.density)
A.lock()
/area/syndicate_depot/proc/lockout_computers()
for(var/obj/machinery/computer/syndicate_depot/C in src)
C.activate_security_lockout()
/area/syndicate_depot/proc/toggle_door_locks()
for(var/obj/machinery/door/airlock/A in src)
A.emergency = !A.emergency
+159 -47
View File
@@ -3,44 +3,61 @@
#define DEPOT_VISITOR_END 2
#define DEPOT_VISITOR_ADD 3
// Generic parent depot computer type
/obj/machinery/computer/syndicate_depot
name = "depot door control computer"
name = "depot computer"
icon = 'icons/obj/computer.dmi'
icon_keyboard = "syndie_key"
icon_screen = "tcboss"
light_color = LIGHT_COLOR_PURE_CYAN
req_access = list(access_syndicate)
var/activated = FALSE
var/security_lockout = FALSE
var/sound_yes = 'sound/machines/twobeep.ogg'
var/sound_no = 'sound/machines/buzz-sigh.ogg'
var/sound_click = 'sound/machines/click.ogg'
var/area/syndicate_depot/depotarea
var/alerts_when_broken = TRUE
/obj/machinery/computer/syndicate_depot/New()
. = ..()
depotarea = areaMaster
/obj/machinery/computer/syndicate_depot/attack_ai(var/mob/user as mob)
if(req_access.len)
/obj/machinery/computer/syndicate_depot/attack_ai(var/mob/user)
if(req_access.len && !("syndicate" in user.faction))
to_chat(user, "<span class='warning'>A firewall blocks your access.</span>")
return 1
..()
return ..()
/obj/machinery/computer/syndicate_depot/emp_act(severity)
return
/obj/machinery/computer/syndicate_depot/attackby(I as obj, user as mob, params)
if(istype(I,/obj/item/weapon/card/emag))
to_chat(user, "<span class='notice'>The electronic systems in this console is far too advanced for your primitive hacking peripherals.</span>")
else
return attack_hand(user)
/obj/machinery/computer/syndicate_depot/emag_act(var/mob/user)
to_chat(user, "<span class='notice'>The electronic systems in this console are far too advanced for your primitive hacking peripherals.</span>")
return
/obj/machinery/computer/syndicate_depot/allowed(var/mob/user)
if(user.can_admin_interact())
if(user.can_advanced_admin_interact())
return 1
if(!isliving(user))
return 0
if(has_security_lockout(user))
return 0
return ..()
/obj/machinery/computer/syndicate_depot/proc/has_security_lockout(var/mob/user)
if(security_lockout)
playsound(user, 'sound/machines/buzz-sigh.ogg', 50, 0)
to_chat(user, "<span class='userdanger'>[src] is under security lockout.</span>")
return TRUE
return FALSE
/obj/machinery/computer/syndicate_depot/proc/activate_security_lockout()
security_lockout = TRUE
disable_special_functions()
/obj/machinery/computer/syndicate_depot/attack_hand(var/mob/user as mob)
if(..())
return
@@ -59,7 +76,11 @@
/obj/machinery/computer/syndicate_depot/set_broken()
. = ..()
if(alerts_when_broken)
raise_alert("[src] destroyed.")
raise_alert("[src] damaged.")
disable_special_functions()
/obj/machinery/computer/syndicate_depot/proc/disable_special_functions()
return
/obj/machinery/computer/syndicate_depot/Topic(href, href_list)
if(..())
@@ -74,30 +95,25 @@
updateUsrDialog()
return
/obj/machinery/computer/syndicate_depot/proc/summon()
var/area/syndicate_depot/A = areaMaster
if(A)
A.call_backup(src)
/obj/machinery/computer/syndicate_depot/Destroy()
summon()
disable_special_functions()
if(alerts_when_broken)
raise_alert("[src] destroyed.")
return ..()
/obj/machinery/computer/syndicate_depot/proc/get_menu(var/mob/user)
return {"<B>Syndicate Depot Door Control Computer</B><HR>
<BR><BR><a href='?src=[UID()];primary=1'>Toggle Airlocks</a>
<BR><BR><a href='?src=[UID()];secondary=1'>Toggle Hidden Doors</a>
<BR>"}
return ""
/obj/machinery/computer/syndicate_depot/proc/primary(var/mob/user)
if(depotarea)
depotarea.toggle_door_locks(src)
to_chat(user, "<span class='notice'>Door locks toggled.</span>")
if(!allowed(user))
return 1
return 0
/obj/machinery/computer/syndicate_depot/proc/secondary(var/mob/user, var/subcommand)
if(depotarea)
depotarea.toggle_falsewalls(src)
to_chat(user, "<span class='notice'>False walls toggled.</span>")
if(!allowed(user))
return 1
return 0
/obj/machinery/computer/syndicate_depot/proc/raise_alert(var/reason)
if(depotarea)
@@ -105,6 +121,34 @@
// Door Control Computer
/obj/machinery/computer/syndicate_depot/doors
name = "depot door control computer"
/obj/machinery/computer/syndicate_depot/doors/get_menu(var/mob/user)
return {"<B>Syndicate Depot Door Control Computer</B><HR>
<BR><BR><a href='?src=[UID()];primary=1'>Toggle Airlocks</a>
<BR><BR><a href='?src=[UID()];secondary=1'>Toggle Hidden Doors</a>
<BR>"}
/obj/machinery/computer/syndicate_depot/doors/primary(var/mob/user)
if(..())
return
if(depotarea)
depotarea.toggle_door_locks(src)
to_chat(user, "<span class='notice'>Door locks toggled.</span>")
/obj/machinery/computer/syndicate_depot/doors/secondary(var/mob/user, var/subcommand)
if(..())
return
if(depotarea)
depotarea.toggle_falsewalls(src)
to_chat(user, "<span class='notice'>False walls toggled.</span>")
// Engineering AKA self destruct computer, no useful functions, just a trap for the people who can't resist pushing dangerous-sounding buttons.
/obj/machinery/computer/syndicate_depot/selfdestruct
name = "reactor control computer"
icon_screen = "explosive"
@@ -116,25 +160,31 @@
<BR>"}
/obj/machinery/computer/syndicate_depot/selfdestruct/primary(var/mob/user)
if(activated)
if(..())
return
if(depotarea.used_self_destruct)
playsound(user, sound_no, 50, 0)
return
activated = TRUE
playsound(user, sound_click, 20, 1)
if(depotarea)
depotarea.activate_self_destruct("Fusion reactor containment failure. All hands, evacuate. All hands, evacuate. Core breach imminent!", TRUE, user)
// Syndicate comms computer, used to activate visitor mode, and message syndicate. Traitor-only use.
/obj/machinery/computer/syndicate_depot/syndiecomms
name = "syndicate communications computer"
icon_screen = "syndishuttle"
req_access = list()
var/message_sent = FALSE
/obj/machinery/computer/syndicate_depot/syndiecomms/get_menu(var/mob/user)
var/menu = "<B>Syndicate Communications Relay</B><HR>"
menu += "<BR><BR><a href='?src=[UID()];primary=1'>Contact Syndicate Command</a>"
if(message_sent)
menu += "<BR><BR>Communications quota used. Unable to transmit messages at this time."
else
menu += "<BR><BR><a href='?src=[UID()];primary=1'>Contact Syndicate Command (one-time use)</a>"
if(depotarea.on_peaceful)
if(user in depotarea.peaceful_visitors)
menu += "<BR><BR>[user] is recognized as a friendly visitor to the depot."
@@ -147,15 +197,17 @@
return menu
/obj/machinery/computer/syndicate_depot/syndiecomms/primary(var/mob/user)
if(activated)
playsound(user, 'sound/machines/buzz-sigh.ogg', 50, 0)
to_chat(user, "<span class='userdanger'>[src] is under security lockout.</span>")
if(..())
return
activated = TRUE
if(message_sent)
playsound(user, 'sound/machines/buzz-sigh.ogg', 50, 0)
to_chat(user, "<span class='userdanger'>[src] has already been used to transmit a message to the Syndicate.</span>")
return
message_sent = TRUE
if(user.mind && user.mind.special_role == SPECIAL_ROLE_TRAITOR)
var/input = stripped_input(user, "Please choose a message to transmit to Syndicate HQ via quantum entanglement. Transmission does not guarantee a response. This terminal may only be used ONCE.", "To abort, send an empty message.", "") as text|null
var/input = stripped_input(user, "Please choose a message to transmit to Syndicate HQ via quantum entanglement. Transmission does not guarantee a response. This function may only be used ONCE.", "To abort, send an empty message.", "") as text|null
if(!input)
activated = FALSE
message_sent = FALSE
return
Syndicate_announce(input, user)
to_chat(user, "Message transmitted.")
@@ -165,9 +217,9 @@
raise_alert("Detected unauthorized access to [src]!")
/obj/machinery/computer/syndicate_depot/syndiecomms/secondary(var/mob/user, var/subcommand)
if(activated)
playsound(user, 'sound/machines/buzz-sigh.ogg', 50, 0)
to_chat(user, "<span class='userdanger'>[src] is under security lockout.</span>")
if(..())
return
if(has_security_lockout(user))
return
if(depotarea)
if(depotarea.local_alarm || depotarea.called_backup || depotarea.used_self_destruct)
@@ -196,7 +248,7 @@
else
to_chat(user, "<span class='userdanger'>[src]: Unrecognized subcommand: [subcommand]</span>")
else
to_chat(user, "<span class='userdanger'>[src]: Request denied. Unable to uplink to depot AI core.</span>")
to_chat(user, "<span class='userdanger'>[src]: Request denied. Unable to uplink to depot network.</span>")
/obj/machinery/computer/syndicate_depot/syndiecomms/proc/grant_syndie_faction(var/mob/user)
user.faction += "syndicate"
@@ -205,44 +257,104 @@
/obj/machinery/computer/syndicate_depot/syndiecomms/power_change()
. = ..()
if(!activated && (stat & NOPOWER))
activated = TRUE
if(!security_lockout && (stat & NOPOWER))
security_lockout = TRUE
raise_alert("Powergrid failure.")
// Syndicate teleporter control, used to manage incoming/outgoing teleports
/obj/machinery/computer/syndicate_depot/teleporter
name = "syndicate teleporter console"
icon_screen = "telesci"
icon_keyboard = "teleport_key"
var/obj/machinery/bluespace_beacon/syndicate/mybeacon
var/turf/tele_target
var/tele_area
var/obj/effect/portal/myportal
var/portal_enabled = FALSE
var/portaldir = WEST
/obj/machinery/computer/syndicate_depot/teleporter/New()
. = ..()
spawn(10)
findbeacon()
choosetarget()
update_portal()
/obj/machinery/computer/syndicate_depot/teleporter/disable_special_functions()
if(mybeacon)
if(mybeacon.enabled)
mybeacon.toggle()
if(portal_enabled)
portal_enabled = FALSE
update_portal()
/obj/machinery/computer/syndicate_depot/teleporter/proc/findbeacon()
if(mybeacon)
return TRUE
for(var/obj/machinery/bluespace_beacon/syndicate/B in myArea)
mybeacon = B
playsound(loc, sound_yes, 50, 0)
return TRUE
playsound(loc, sound_no, 50, 0)
return FALSE
/obj/machinery/computer/syndicate_depot/teleporter/proc/choosetarget()
var/list/possible_lms = list()
for(var/obj/effect/landmark/L in landmarks_list)
if(!is_station_level(L.z))
continue
possible_lms |= L
if(!possible_lms.len)
message_admins("Error: [src] could not find any station LMs")
return
var/obj/effect/landmark/selected_lm = pick(possible_lms)
tele_area = get_area(selected_lm)
tele_target = get_turf(selected_lm)
/obj/machinery/computer/syndicate_depot/teleporter/proc/update_portal()
if(portal_enabled && !myportal)
if(!tele_target)
return
var/turf/portal_turf = get_step(src, portaldir)
var/obj/effect/portal/P = new(portal_turf, tele_target, src, 0)
myportal = P
P.failchance = 0
P.icon_state = "portal1"
P.name = "[tele_area] portal"
else if(!portal_enabled && myportal)
qdel(myportal)
/obj/machinery/computer/syndicate_depot/teleporter/get_menu(var/mob/user)
var/menutext = "<B>Syndicate Teleporter Control</B><HR>"
findbeacon()
if(mybeacon)
menutext += {"<BR><BR><a href='?src=[UID()];primary=1'>Syndicate Teleporter Beacon: [mybeacon.enabled ? "ON" : "OFF"]</a><BR>"}
menutext += {"<BR><BR>(SYNDIE AGENT) <a href='?src=[UID()];primary=1'>Syndicate Teleporter Beacon: [mybeacon.enabled ? "ON" : "OFF"]</a><BR>"}
else
menutext += {"<BR><BR>Status: Reconnecting to beacon..."}
if(check_rights(R_ADMIN, 0, user))
menutext += {"<BR><BR>(ADMIN/DEBUG) <a href='?src=[UID()];secondary=1'>Syndicate Agent Insertion Portal: [portal_enabled ? "ON" : "OFF"]</a><BR>"}
return menutext
/obj/machinery/computer/syndicate_depot/teleporter/primary(var/mob/user)
activated = TRUE
if(..())
return
if(!mybeacon && user)
to_chat(user, "<span class='notice'>Unable to connect to teleport beacon.</span>")
return
var/bresult = mybeacon.toggle()
to_chat(user, "<span class='notice'>Syndicate Teleporter Beacon: [bresult ? "ONLINE" : "OFFLINE"]</span>")
/obj/machinery/computer/syndicate_depot/teleporter/secondary(var/mob/user)
if(..())
return
if(!check_rights(R_ADMIN, 0, user))
return
if(!portal_enabled && myportal)
to_chat(user, "<span class='notice'>Syndicate Agent Insertion Portal: deactivating... please wait...</span>")
return
toggle_portal()
to_chat(user, "<span class='notice'>Syndicate Agent Insertion Portal: [portal_enabled ? "ONLINE" : "OFFLINE"]</span>")
/obj/machinery/computer/syndicate_depot/teleporter/proc/toggle_portal()
portal_enabled = !portal_enabled
update_portal()
@@ -4,6 +4,7 @@
icon_state = "ai"
anchored = 1 // -- TLE
canmove = 0
a_intent = "harm" // This is apparently the only thing that stops other mobs walking through them as if they were thin air.
/mob/living/silicon/decoy/New()
src.icon = 'icons/mob/AI.dmi'