Syncs maps, and a bunch of other things that no one will care about/notice/give fucks about until they break. Welcome to conflict hell. (#2460)

* fuck pubby

* fuck you too ceres

* ree

* this is going to be a disaster isn't it

* disaster

* dme

* -_-

* tg

* woops

* proper sync

* Welcome to conflict hell.

* lets hope this fixes more things than it breaks

* gdi

* goddamnit
This commit is contained in:
kevinz000
2017-08-24 21:07:58 -07:00
committed by GitHub
parent 188193eb61
commit c638386507
219 changed files with 40493 additions and 56328 deletions
-1
View File
@@ -1,4 +1,3 @@
/obj/docking_port/mobile/arrivals
name = "arrivals shuttle"
id = "arrivals"
+3 -1
View File
@@ -20,7 +20,9 @@
/obj/item/device/assault_pod
name = "Assault Pod Targetting Device"
icon_state = "gangtool-red"
item_state = "walkietalkie"
item_state = "radio"
lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi'
righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi'
desc = "Used to select a landing zone for assault pods."
var/shuttle_id = "steel_rain"
var/dwidth = 3
+29 -29
View File
@@ -1,33 +1,33 @@
/obj/machinery/computer/shuttle/ferry
name = "transport ferry console"
circuit = /obj/item/circuitboard/computer/ferry
shuttleId = "ferry"
possible_destinations = "ferry_home;ferry_away"
/obj/machinery/computer/shuttle/ferry
name = "transport ferry console"
circuit = /obj/item/circuitboard/computer/ferry
shuttleId = "ferry"
possible_destinations = "ferry_home;ferry_away"
req_access = list(ACCESS_CENT_GENERAL)
var/aiControlDisabled = 1
/obj/machinery/computer/shuttle/ferry/proc/canAIControl(mob/user)
return ((aiControlDisabled != 1));
/obj/machinery/computer/shuttle/ferry/attack_ai(mob/user)
if(!src.canAIControl(user))
return
/obj/machinery/computer/shuttle/ferry/request
name = "ferry console"
circuit = /obj/item/circuitboard/computer/ferry/request
var/last_request //prevents spamming admins
var/cooldown = 600
possible_destinations = "ferry_home;ferry_away"
var/aiControlDisabled = 1
/obj/machinery/computer/shuttle/ferry/proc/canAIControl(mob/user)
return ((aiControlDisabled != 1));
/obj/machinery/computer/shuttle/ferry/attack_ai(mob/user)
if(!src.canAIControl(user))
return
/obj/machinery/computer/shuttle/ferry/request
name = "ferry console"
circuit = /obj/item/circuitboard/computer/ferry/request
var/last_request //prevents spamming admins
var/cooldown = 600
possible_destinations = "ferry_home;ferry_away"
req_access = list(ACCESS_CENT_GENERAL)
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF
/obj/machinery/computer/shuttle/ferry/request/Topic(href, href_list)
..()
if(href_list["request"])
if(last_request && (last_request + cooldown > world.time))
return
last_request = world.time
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF
/obj/machinery/computer/shuttle/ferry/request/Topic(href, href_list)
..()
if(href_list["request"])
if(last_request && (last_request + cooldown > world.time))
return
last_request = world.time
to_chat(usr, "<span class='notice'>Your request has been recieved by CentCom.</span>")
to_chat(GLOB.admins, "<b>FERRY: <font color='blue'>[ADMIN_LOOKUPFLW(usr)] (<A HREF='?_src_=holder;secrets=moveferry'>Move Ferry</a>)</b> is requesting to move the transport ferry to CentCom.</font>")
+244
View File
@@ -0,0 +1,244 @@
/obj/machinery/computer/camera_advanced/shuttle_docker
name = "navigation computer"
desc = "Used to designate a precise transit location for a spacecraft."
z_lock = ZLEVEL_STATION
jump_action = null
var/datum/action/innate/shuttledocker_rotate/rotate_action = new
var/datum/action/innate/shuttledocker_place/place_action = new
var/shuttleId = ""
var/shuttlePortId = ""
var/shuttlePortName = ""
var/list/jumpto_ports = list() //hashset of ports to jump to and ignore for collision purposes
var/list/blacklisted_turfs
var/obj/docking_port/stationary/my_port
var/view_range = 7
var/x_offset = 0
var/y_offset = 0
var/space_turfs_only = TRUE
/obj/machinery/computer/camera_advanced/shuttle_docker/GrantActions(mob/living/user)
if(jumpto_ports.len)
jump_action = new /datum/action/innate/camera_jump/shuttle_docker
..()
if(rotate_action)
rotate_action.target = user
rotate_action.Grant(user)
actions += rotate_action
if(place_action)
place_action.target = user
place_action.Grant(user)
actions += place_action
/obj/machinery/computer/camera_advanced/shuttle_docker/CreateEye()
var/obj/docking_port/mobile/M = SSshuttle.getShuttle(shuttleId)
if(QDELETED(M))
return
eyeobj = new /mob/camera/aiEye/remote/shuttle_docker()
var/mob/camera/aiEye/remote/shuttle_docker/the_eye = eyeobj
the_eye.origin = src
the_eye.dir = M.dir
var/area/A = get_area(M)
if(QDELETED(A))
return
var/turf/origin = locate(M.x + x_offset, M.y + y_offset, M.z)
for(var/turf/T in A)
if(T.z != origin.z)
continue
var/image/I = image('icons/effects/alphacolors.dmi', origin, "red")
I.layer = ABOVE_NORMAL_TURF_LAYER
I.plane = 0
I.mouse_opacity = 0
var/x_off = T.x - origin.x
var/y_off = T.y - origin.y
I.pixel_x = x_off * 32
I.pixel_y = y_off * 32
the_eye.placement_images[I] = list(x_off, y_off)
generateBlacklistedTurfs()
/obj/machinery/computer/camera_advanced/shuttle_docker/give_eye_control(mob/user)
..()
if(!QDELETED(user) && user.client)
var/mob/camera/aiEye/remote/shuttle_docker/the_eye = eyeobj
user.client.images += the_eye.placement_images
user.client.images += the_eye.placed_images
user.client.view = view_range
/obj/machinery/computer/camera_advanced/shuttle_docker/remove_eye_control(mob/living/user)
..()
if(!QDELETED(user) && user.client)
var/mob/camera/aiEye/remote/shuttle_docker/the_eye = eyeobj
user.client.images -= the_eye.placement_images
user.client.images -= the_eye.placed_images
user.client.view = world.view
/obj/machinery/computer/camera_advanced/shuttle_docker/proc/placeLandingSpot()
if(!checkLandingSpot())
return FALSE
var/mob/camera/aiEye/remote/shuttle_docker/the_eye = eyeobj
if(!my_port)
my_port = new /obj/docking_port/stationary
my_port.name = shuttlePortName
my_port.id = shuttlePortId
var/obj/docking_port/mobile/M = SSshuttle.getShuttle(shuttleId)
my_port.height = M.height
my_port.width = M.width
my_port.dheight = M.dheight
my_port.dwidth = M.dwidth
my_port.dir = the_eye.dir
my_port.loc = locate(eyeobj.x - x_offset, eyeobj.y - y_offset, eyeobj.z)
if(current_user && current_user.client)
current_user.client.images -= the_eye.placed_images
for(var/V in the_eye.placed_images)
qdel(V)
the_eye.placed_images = list()
for(var/V in the_eye.placement_images)
var/turf/T = locate(eyeobj.x + the_eye.placement_images[V][1], eyeobj.y + the_eye.placement_images[V][2], eyeobj.z)
var/image/I = image('icons/effects/alphacolors.dmi', T, "blue")
I.layer = ABOVE_OPEN_TURF_LAYER
I.plane = 0
I.mouse_opacity = 0
the_eye.placed_images += I
if(current_user && current_user.client)
current_user.client.images += the_eye.placed_images
return TRUE
/obj/machinery/computer/camera_advanced/shuttle_docker/proc/rotateLandingSpot()
var/mob/camera/aiEye/remote/shuttle_docker/the_eye = eyeobj
the_eye.dir = turn(the_eye.dir, -90)
for(var/V in the_eye.placement_images)
var/image/I = V
var/list/coords = the_eye.placement_images[V]
var/Tmp = coords[1]
coords[1] = coords[2]
coords[2] = -Tmp
I.pixel_x = coords[1] * 32
I.pixel_y = coords[2] * 32
var/Tmp = x_offset
x_offset = y_offset
y_offset = -Tmp
checkLandingSpot()
/obj/machinery/computer/camera_advanced/shuttle_docker/proc/checkLandingTurf(turf/T)
return T && (!blacklisted_turfs || !blacklisted_turfs[T]) && (!space_turfs_only || isspaceturf(T))
/obj/machinery/computer/camera_advanced/shuttle_docker/proc/generateBlacklistedTurfs()
blacklisted_turfs = list()
for(var/V in SSshuttle.stationary)
if(!V)
continue
var/obj/docking_port/stationary/S = V
if(z_lock && (S.z != z_lock))
continue
if((S.id == shuttlePortId) || jumpto_ports[S.id])
continue
for(var/T in S.return_turfs())
blacklisted_turfs[T] = TRUE
/obj/machinery/computer/camera_advanced/shuttle_docker/proc/checkLandingSpot()
var/mob/camera/aiEye/remote/shuttle_docker/the_eye = eyeobj
var/turf/eyeturf = get_turf(the_eye)
if(!eyeturf)
return
var/landing_spot_clear = TRUE
for(var/V in the_eye.placement_images)
var/image/I = V
I.loc = eyeturf
var/list/coords = the_eye.placement_images[V]
var/turf/T = locate(eyeturf.x + coords[1], eyeturf.y + coords[2], eyeturf.z)
if(checkLandingTurf(T))
I.icon_state = "green"
else
I.icon_state = "red"
landing_spot_clear = FALSE
return landing_spot_clear
/mob/camera/aiEye/remote/shuttle_docker
visible_icon = FALSE
use_static = FALSE
var/list/placement_images = list()
var/list/placed_images = list()
/mob/camera/aiEye/remote/shuttle_docker/setLoc(T)
..()
var/obj/machinery/computer/camera_advanced/shuttle_docker/console = origin
console.checkLandingSpot()
/mob/camera/aiEye/remote/shuttle_docker/update_remote_sight(mob/living/user)
user.sight = BLIND|SEE_TURFS
user.lighting_alpha = LIGHTING_PLANE_ALPHA_INVISIBLE
user.sync_lighting_plane_alpha()
return TRUE
/datum/action/innate/shuttledocker_rotate
name = "Rotate"
icon_icon = 'icons/mob/actions/actions_mecha.dmi'
button_icon_state = "mech_cycle_equip_off"
/datum/action/innate/shuttledocker_rotate/Activate()
if(QDELETED(target) || !isliving(target))
return
var/mob/living/C = target
var/mob/camera/aiEye/remote/remote_eye = C.remote_control
var/obj/machinery/computer/camera_advanced/shuttle_docker/origin = remote_eye.origin
origin.rotateLandingSpot()
/datum/action/innate/shuttledocker_place
name = "Place"
icon_icon = 'icons/mob/actions/actions_mecha.dmi'
button_icon_state = "mech_zoom_off"
/datum/action/innate/shuttledocker_place/Activate()
if(QDELETED(target) || !isliving(target))
return
var/mob/living/C = target
var/mob/camera/aiEye/remote/remote_eye = C.remote_control
var/obj/machinery/computer/camera_advanced/shuttle_docker/origin = remote_eye.origin
if(origin.placeLandingSpot())
to_chat(target, "<span class='notice'>Transit location designated</span>")
else
to_chat(target, "<span class='warning'>Invalid transit location</span>")
/datum/action/innate/camera_jump/shuttle_docker
name = "Jump to Location"
button_icon_state = "camera_jump"
/datum/action/innate/camera_jump/shuttle_docker/Activate()
if(QDELETED(target) || !isliving(target))
return
var/mob/living/C = target
var/mob/camera/aiEye/remote/remote_eye = C.remote_control
var/obj/machinery/computer/camera_advanced/shuttle_docker/console = remote_eye.origin
playsound(console, 'sound/machines/terminal_prompt_deny.ogg', 25, 0)
var/list/L = list()
for(var/V in SSshuttle.stationary)
if(!V)
continue
var/obj/docking_port/stationary/S = V
if(console.z_lock && (S.z != console.z_lock))
continue
if(console.jumpto_ports[S.id])
L[S.name] = S
playsound(console, 'sound/machines/terminal_prompt.ogg', 25, 0)
var/selected = input("Choose location to jump to", "Locations", null) as null|anything in L
if(QDELETED(src) || QDELETED(target) || !isliving(target))
return
playsound(src, "terminal_type", 25, 0)
if(selected)
var/turf/T = get_turf(L[selected])
if(T)
playsound(console, 'sound/machines/terminal_prompt_confirm.ogg', 25, 0)
remote_eye.setLoc(T)
to_chat(target, "<span class='notice'>Jumped to [selected]</span>")
C.overlay_fullscreen("flash", /obj/screen/fullscreen/flash/static)
C.clear_fullscreen("flash", 3)
else
playsound(console, 'sound/machines/terminal_prompt_deny.ogg', 25, 0)
+32 -38
View File
@@ -78,7 +78,7 @@ All ShuttleMove procs go here
return FALSE
// Called on atoms to move the atom to the new location
/atom/movable/proc/onShuttleMove(turf/newT, turf/oldT, rotation, list/movement_force, move_dir)
/atom/movable/proc/onShuttleMove(turf/newT, turf/oldT, rotation, list/movement_force, move_dir, old_dock)
if(newT == oldT) // In case of in place shuttle rotation shenanigans.
return
@@ -162,7 +162,7 @@ All ShuttleMove procs go here
/************************************Machinery move procs************************************/
/obj/machinery/door/airlock/beforeShuttleMove()
/obj/machinery/door/airlock/beforeShuttleMove(turf/newT, rotation)
. = ..()
shuttledocked = 0
for(var/obj/machinery/door/airlock/A in range(1, src))
@@ -170,56 +170,55 @@ All ShuttleMove procs go here
A.air_tight = TRUE
INVOKE_ASYNC(A, /obj/machinery/door/.proc/close)
/obj/machinery/door/airlock/afterShuttleMove()
/obj/machinery/door/airlock/afterShuttleMove(list/movement_force, shuttle_dir, shuttle_preferred_direction, move_dir)
. = ..()
shuttledocked = 1
for(var/obj/machinery/door/airlock/A in range(1, src))
A.shuttledocked = 1
/obj/machinery/camera/beforeShuttleMove()
/obj/machinery/camera/beforeShuttleMove(turf/newT, rotation)
. = ..()
GLOB.cameranet.removeCamera(src)
GLOB.cameranet.updateChunk()
return TRUE
/obj/machinery/camera/afterShuttleMove()
/obj/machinery/camera/afterShuttleMove(list/movement_force, shuttle_dir, shuttle_preferred_direction, move_dir)
. = ..()
if(can_use())
GLOB.cameranet.addCamera(src)
var/datum/camerachunk/chunk = GLOB.cameranet.getCameraChunk(x, y, z)
chunk.hasChanged(TRUE)
/obj/machinery/telecomms/onShuttleMove(turf/T1)
/obj/machinery/telecomms/afterShuttleMove(list/movement_force, shuttle_dir, shuttle_preferred_direction, move_dir)
. = ..()
if(. && T1) // Update listening Z, just in case you have telecomm relay on a shuttle
listening_level = T1.z
listening_level = z // Update listening Z, just in case you have telecomm relay on a shuttle
/obj/machinery/mech_bay_recharge_port/afterShuttleMove()
/obj/machinery/mech_bay_recharge_port/afterShuttleMove(list/movement_force, shuttle_dir, shuttle_preferred_direction, move_dir)
. = ..()
recharging_turf = get_step(loc, dir)
/obj/machinery/atmospherics/afterShuttleMove()
/obj/machinery/atmospherics/afterShuttleMove(list/movement_force, shuttle_dir, shuttle_preferred_direction, move_dir)
. = ..()
if(pipe_vision_img)
pipe_vision_img.loc = loc
/obj/machinery/computer/auxillary_base/onShuttleMove(turf/T1)
/obj/machinery/computer/auxillary_base/onShuttleMove(turf/newT, turf/oldT, rotation, list/movement_force, move_dir, old_dock)
. = ..()
if(z == ZLEVEL_MINING) //Avoids double logging and landing on other Z-levels due to badminnery
SSblackbox.add_details("colonies_dropped", "[x]|[y]|[z]") //Number of times a base has been dropped!
/obj/machinery/gravity_generator/main/beforeShuttleMove()
/obj/machinery/gravity_generator/main/beforeShuttleMove(turf/newT, rotation)
. = ..()
on = FALSE
update_list()
/obj/machinery/gravity_generator/main/afterShuttleMove()
/obj/machinery/gravity_generator/main/afterShuttleMove(list/movement_force, shuttle_dir, shuttle_preferred_direction, move_dir)
. = ..()
if(charge_count != 0 && charging_state != POWER_UP)
on = TRUE
update_list()
/obj/machinery/thruster/beforeShuttleMove()
/obj/machinery/thruster/beforeShuttleMove(turf/newT, rotation)
. = ..()
. = TRUE
@@ -238,7 +237,7 @@ All ShuttleMove procs go here
var/new_pos = supposed_node_connect.Find(real_node_connect[I])
nodes[new_pos] = nodes_copy[I]
/obj/machinery/atmospherics/afterShuttleMove()
/obj/machinery/atmospherics/afterShuttleMove(list/movement_force, shuttle_dir, shuttle_preferred_direction, move_dir)
. = ..()
var/missing_nodes = FALSE
for(DEVICE_TYPE_LOOP)
@@ -267,17 +266,17 @@ All ShuttleMove procs go here
// atmosinit() calls update_icon(), so we don't need to call it
update_icon()
/obj/machinery/atmospherics/pipe/afterShuttleMove()
/obj/machinery/atmospherics/pipe/afterShuttleMove(list/movement_force, shuttle_dir, shuttle_preferred_direction, move_dir)
. = ..()
var/turf/T = loc
hide(T.intact)
/obj/machinery/navbeacon/beforeShuttleMove()
/obj/machinery/navbeacon/beforeShuttleMove(turf/newT, rotation)
. = ..()
GLOB.navbeacons["[z]"] -= src
GLOB.deliverybeacons -= src
/obj/machinery/navbeacon/afterShuttleMove()
/obj/machinery/navbeacon/afterShuttleMove(list/movement_force, shuttle_dir, shuttle_preferred_direction, move_dir)
. = ..()
var/turf/T = loc
hide(T.intact)
@@ -289,7 +288,7 @@ All ShuttleMove procs go here
GLOB.deliverybeacons += src
GLOB.deliverybeacontags += location
/obj/machinery/power/terminal/afterShuttleMove()
/obj/machinery/power/terminal/afterShuttleMove(list/movement_force, shuttle_dir, shuttle_preferred_direction, move_dir)
. = ..()
var/turf/T = src.loc
if(level==1)
@@ -297,14 +296,14 @@ All ShuttleMove procs go here
/************************************Item move procs************************************/
/obj/item/storage/pod/onShuttleMove()
/obj/item/storage/pod/onShuttleMove(turf/newT, turf/oldT, rotation, list/movement_force, move_dir, old_dock)
unlocked = TRUE
// If the pod was launched, the storage will always open.
return ..()
/************************************Mob move procs************************************/
/mob/onShuttleMove()
/mob/onShuttleMove(turf/newT, turf/oldT, rotation, list/movement_force, move_dir, old_dock)
if(!move_on_shuttle)
return 0
. = ..()
@@ -328,26 +327,25 @@ All ShuttleMove procs go here
if(movement_force["KNOCKDOWN"])
Knockdown(movement_force["KNOCKDOWN"])
/mob/living/simple_animal/hostile/megafauna/onShuttleMove()
var/turf/oldT = loc
/mob/living/simple_animal/hostile/megafauna/onShuttleMove(turf/newT, turf/oldT, rotation, list/movement_force, move_dir, old_dock)
. = ..()
message_admins("Megafauna [src] [ADMIN_FLW(src)] moved via shuttle from [ADMIN_COORDJMP(oldT)] to [ADMIN_COORDJMP(loc)]")
/************************************Structure move procs************************************/
/obj/structure/grille/beforeShuttleMove()
/obj/structure/grille/beforeShuttleMove(turf/newT, rotation)
. = ..()
. = TRUE
/obj/structure/lattice/beforeShuttleMove()
/obj/structure/lattice/beforeShuttleMove(turf/newT, rotation)
. = ..()
. = TRUE
/obj/structure/disposalpipe/afterShuttleMove()
/obj/structure/disposalpipe/afterShuttleMove(list/movement_force, shuttle_dir, shuttle_preferred_direction, move_dir)
. = ..()
update()
/obj/structure/cable/afterShuttleMove()
/obj/structure/cable/afterShuttleMove(list/movement_force, shuttle_dir, shuttle_preferred_direction, move_dir)
. = ..()
var/turf/T = loc
if(level==1)
@@ -355,26 +353,22 @@ All ShuttleMove procs go here
/************************************Misc move procs************************************/
/atom/movable/lighting_object/onShuttleMove()
/atom/movable/lighting_object/onShuttleMove(turf/newT, turf/oldT, rotation, list/movement_force, move_dir, old_dock)
return FALSE
/atom/movable/light/onShuttleMove()
/atom/movable/light/onShuttleMove(turf/newT, turf/oldT, rotation, list/movement_force, move_dir, old_dock)
return FALSE
/obj/docking_port/stationary/onShuttleMove(turf/newT, turf/oldT, rotation, list/movement_force)
var/obj/docking_port/mobile/docked_port = get_docked()
if(!docked_port)
docked_port = locate(/obj/docking_port/mobile) in newT
if(docked_port && locate(/obj/docking_port/stationary) in newT)
return FALSE //There's a mobile dock that's moving to the new turf to be with another stationary dock! After all I did for them...
/obj/docking_port/stationary/onShuttleMove(turf/newT, turf/oldT, rotation, list/movement_force, move_dir, old_dock)
if(old_dock == src) //Don't move the dock we're leaving
return FALSE
. = ..()
obj/docking_port/stationary/public_mining_dock/onShuttleMove()
/obj/docking_port/stationary/public_mining_dock/onShuttleMove(turf/newT, turf/oldT, rotation, list/movement_force, move_dir, old_dock)
id = "mining_public" //It will not move with the base, but will become enabled as a docking point.
return 0
/obj/effect/abstract/proximity_checker/onShuttleMove()
/obj/effect/abstract/proximity_checker/onShuttleMove(turf/newT, turf/oldT, rotation, list/movement_force, move_dir, old_dock)
//timer so it only happens once
addtimer(CALLBACK(monitor, /datum/proximity_monitor/proc/SetRange, monitor.current_range, TRUE), 0, TIMER_UNIQUE)
+7 -1
View File
@@ -71,6 +71,12 @@
_y + (-dwidth+width-1)*sin + (-dheight+height-1)*cos
)
//returns turfs within our projected rectangle in no particular order
/obj/docking_port/proc/return_turfs()
var/list/L = return_coords()
var/turf/T0 = locate(L[1],L[2],z)
var/turf/T1 = locate(L[3],L[4],z)
return block(T0,T1)
//returns turfs within our projected rectangle in a specific order.
//this ensures that turfs are copied over in the same order, regardless of any rotation
@@ -535,7 +541,7 @@
continue
for(var/thing in oldT) //Needs to be this kind of loop in case, because of shuttle rotation shenanigans, the destination turf is the same as the source turf
var/atom/movable/moving_atom = thing
moving_atom.onShuttleMove(newT, oldT, rotation, movement_force, movement_direction) //atoms
moving_atom.onShuttleMove(newT, oldT, rotation, movement_force, movement_direction, old_dock) //atoms
moved_atoms += moving_atom
oldT.onShuttleMove(newT, turf_type, baseturf_type, rotation, movement_force, movement_direction) //turfs
var/area/shuttle_area = oldT.loc
+14 -1
View File
@@ -8,7 +8,7 @@
light_color = LIGHT_COLOR_RED
req_access = list(ACCESS_SYNDICATE)
shuttleId = "syndicate"
possible_destinations = "syndicate_away;syndicate_z5;syndicate_ne;syndicate_nw;syndicate_n;syndicate_se;syndicate_sw;syndicate_s"
possible_destinations = "syndicate_away;syndicate_z5;syndicate_ne;syndicate_nw;syndicate_n;syndicate_se;syndicate_sw;syndicate_s;syndicate_custom"
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF
/obj/machinery/computer/shuttle/syndicate/recall
@@ -42,5 +42,18 @@
return 0
..()
/obj/machinery/computer/camera_advanced/shuttle_docker/syndicate
name = "syndicate shuttle navigation computer"
desc = "Used to designate a precise transit location for the syndicate shuttle."
icon_screen = "syndishuttle"
icon_keyboard = "syndie_key"
z_lock = ZLEVEL_STATION
shuttleId = "syndicate"
shuttlePortId = "syndicate_custom"
shuttlePortName = "custom location"
jumpto_ports = list("syndicate_ne" = 1, "syndicate_nw" = 1, "syndicate_n" = 1, "syndicate_se" = 1, "syndicate_sw" = 1, "syndicate_s" = 1)
view_range = 13
x_offset = -4
y_offset = -2
#undef SYNDICATE_CHALLENGE_TIMER