Files
Batrachophreno 4ecb0bc21c Repath obj/machinery to obj/structure/machinery [MDB Ignore] (#22500)
Repaths obj/machinery to obj/structure/machinery. **Note for
reviewers:** the only meaningful changed code exists within
**code/game/objects/structures.dm** and
**code/game/objects/structures/_machinery.dm**, largely concerning
damage procs. With the exception of moving airlock defines to their own
file, ALL OTHER CHANGES ARE STRICTLY PATH CHANGES.

Objects, _categorically_, are largely divided between those you can hold
in your hand/inventory and those you can't. Machinery objects are
already subtypes of Structures behaviorally, this PR just makes their
pathing reflect that, and allows for future work (tool actions, more
health/destruction functionality) to be developed without unnecessary
code duplication.

I have tested this PR by loading up the Horizon and dismantling various
machines and structures with tools, shooting guns of various types
throughout the ship, and detonating a bunch of explosions throughout the
ship.
2026-05-26 19:35:48 +00:00

759 lines
25 KiB
Plaintext

GLOBAL_LIST_EMPTY_TYPED(escape_pods, /datum/shuttle/autodock/ferry/escape_pod)
GLOBAL_LIST_EMPTY(escape_pods_by_name)
/datum/shuttle/autodock/ferry/escape_pod
var/datum/computer/file/embedded_program/docking/simple/escape_pod/arming_controller
category = /datum/shuttle/autodock/ferry/escape_pod
move_time = 100
/datum/shuttle/autodock/ferry/escape_pod/New()
..()
var/arming_controller_tag = arming_controller
arming_controller = SSshuttle.docking_registry[arming_controller_tag]
if(!istype(arming_controller))
CRASH("Could not find arming controller for escape pod \"[name]\", tag was '[arming_controller_tag]'.")
GLOB.escape_pods += src
GLOB.escape_pods_by_name[name] = src
move_time = GLOB.evacuation_controller.evac_transit_delay + rand(-30, 60)
if(dock_target)
var/datum/computer/file/embedded_program/docking/simple/own_target = SSshuttle.docking_registry[dock_target]
if(own_target)
var/obj/structure/machinery/embedded_controller/radio/simple_docking_controller/escape_pod/own_target_master = own_target.master
if(own_target_master)
own_target_master.set_pod(src)
/datum/shuttle/autodock/ferry/escape_pod/Destroy()
GLOB.escape_pods -= src
GLOB.escape_pods_by_name -= name
arming_controller = null
. = ..()
/datum/shuttle/autodock/ferry/escape_pod/can_launch()
if(arming_controller && !arming_controller.armed) //must be armed
return 0
if(location)
return 0 //it's a one-way trip.
return ..()
/datum/shuttle/autodock/ferry/escape_pod/can_force()
if(arming_controller.emagged && next_location && moving_status == SHUTTLE_IDLE && process_state <= WAIT_LAUNCH)
return TRUE
if(arming_controller.eject_time && world.time < arming_controller.eject_time + 50)
return FALSE //dont allow force launching until 5 seconds after the arming controller has reached it's countdown
return ..()
/datum/shuttle/autodock/ferry/escape_pod/can_cancel()
return 0
//This controller goes on the escape pod itself
/obj/structure/machinery/embedded_controller/radio/simple_docking_controller/escape_pod
name = "escape pod controller"
var/datum/shuttle/autodock/ferry/escape_pod/pod
/obj/structure/machinery/embedded_controller/radio/simple_docking_controller/escape_pod/Destroy()
pod = null
. = ..()
/obj/structure/machinery/embedded_controller/radio/simple_docking_controller/escape_pod/proc/set_pod(datum/shuttle/autodock/ferry/escape_pod/new_pod)
if(istype(new_pod))
pod = new_pod
RegisterSignal(pod, COMSIG_QDELETING, PROC_REF(clear_pod))
/obj/structure/machinery/embedded_controller/radio/simple_docking_controller/escape_pod/proc/clear_pod()
SIGNAL_HANDLER
if(pod)
UnregisterSignal(pod, COMSIG_QDELETING)
pod = null
/obj/structure/machinery/embedded_controller/radio/simple_docking_controller/escape_pod/ui_interact(mob/user, datum/tgui/ui)
ui = SStgui.try_update_ui(user, src, ui)
if(!ui)
ui = new(user, src, "EscapePodConsole", name, ui_x=470, ui_y=270)
ui.open()
/obj/structure/machinery/embedded_controller/radio/simple_docking_controller/escape_pod/ui_data(mob/user)
return list(
"docking_status" = docking_program.get_docking_status(),
"override_enabled" = docking_program.override_enabled,
"door_state" = docking_program.memory["door_status"]["state"],
"door_lock" = docking_program.memory["door_status"]["lock"],
"can_force" = pod.can_force() || (GLOB.evacuation_controller.has_evacuated() && pod.can_launch()), //allow players to manually launch ahead of time if the shuttle leaves
"is_armed" = pod.arming_controller.armed
)
/obj/structure/machinery/embedded_controller/radio/simple_docking_controller/escape_pod/ui_act(action, params)
. = ..()
if(.)
return
if(action == "command")
if(params["command"] == "manual_arm")
pod.arming_controller.arm()
return TRUE
if(params["command"] == "force_launch")
if (pod.can_force())
pod.force_launch(src)
else if (GLOB.evacuation_controller.has_evacuated() && pod.can_launch()) //allow players to manually launch ahead of time if the shuttle leaves
pod.launch(src)
return TRUE
/obj/structure/machinery/embedded_controller/radio/simple_docking_controller/escape_pod/emag_act(var/remaining_charges, var/mob/user)
var/datum/computer/file/embedded_program/docking/simple/escape_pod/pod_program = pod.arming_controller
if(pod_program)
if(pod_program.emagged)
to_chat(user, SPAN_WARNING("The pod has already been emagged!"))
return
to_chat(user, SPAN_NOTICE("You emag \the [src], arming the escape pod!"))
pod_program.emagged = TRUE
if(!pod_program.armed)
pod_program.arm()
return 1
//This controller is for the escape pod berth (station side)
/obj/structure/machinery/embedded_controller/radio/simple_docking_controller/escape_pod_berth
name = "escape pod berth controller"
/obj/structure/machinery/embedded_controller/radio/simple_docking_controller/escape_pod_berth/Initialize()
. = ..()
docking_program = new/datum/computer/file/embedded_program/docking/simple/escape_pod(src)
program = docking_program
/obj/structure/machinery/embedded_controller/radio/simple_docking_controller/escape_pod_berth/ui_interact(mob/user, datum/tgui/ui)
ui = SStgui.try_update_ui(user, src, ui)
if(!ui)
ui = new(user, src, "EscapePodBerthConsole", name, ui_x=470, ui_y=200)
ui.open()
/obj/structure/machinery/embedded_controller/radio/simple_docking_controller/escape_pod_berth/ui_data(mob/user)
var/armed = FALSE
if (istype(docking_program, /datum/computer/file/embedded_program/docking/simple/escape_pod))
var/datum/computer/file/embedded_program/docking/simple/escape_pod/P = docking_program
armed = P.armed
return list(
"docking_status" = docking_program.get_docking_status(),
"override_enabled" = docking_program.override_enabled,
"armed" = armed
)
/obj/structure/machinery/embedded_controller/radio/simple_docking_controller/escape_pod_berth/emag_act(var/remaining_charges, var/mob/user)
var/datum/computer/file/embedded_program/docking/simple/escape_pod/pod_program
if(istype(docking_program, /datum/computer/file/embedded_program/docking/simple/escape_pod))
pod_program = docking_program
if(pod_program)
if(pod_program.emagged)
to_chat(user, SPAN_WARNING("The pod has already been emagged!"))
return
to_chat(user, SPAN_NOTICE("You emag \the [src], arming the escape pod!"))
pod_program.emagged = TRUE
if(!pod_program.armed)
pod_program.arm()
return 1
//A docking controller program for a simple door based docking port
/datum/computer/file/embedded_program/docking/simple/escape_pod
var/armed = FALSE
var/emagged = FALSE
var/eject_delay = 10 //give latecomers some time to get out of the way if they don't make it onto the pod
var/eject_time = null
var/closing = FALSE
/datum/computer/file/embedded_program/docking/simple/escape_pod/proc/arm()
if(!armed)
armed = 1
open_door()
/datum/computer/file/embedded_program/docking/simple/escape_pod/receive_user_command(command)
if (!armed)
return
..(command)
/datum/computer/file/embedded_program/docking/simple/escape_pod/process()
..()
if (eject_time && world.time >= eject_time && !closing)
close_door()
closing = 1
/datum/computer/file/embedded_program/docking/simple/escape_pod/prepare_for_docking()
return
/datum/computer/file/embedded_program/docking/simple/escape_pod/ready_for_docking()
return 1
/datum/computer/file/embedded_program/docking/simple/escape_pod/finish_docking()
return //don't do anything - the doors only open when the pod is armed.
/datum/computer/file/embedded_program/docking/simple/escape_pod/prepare_for_undocking()
eject_time = world.time + eject_delay*10
/* OLD AURORA SHIT */
#define AURORA_ESCAPE_POD(NUMBER) \
/datum/shuttle/autodock/ferry/escape_pod/pod/escape_pod##NUMBER { \
name = "Escape Pod " + #NUMBER; \
shuttle_area = /area/horizon/shuttle/escape_pod/pod##NUMBER; \
location = 0; \
dock_target = "escape_pod_" + #NUMBER; \
arming_controller = "escape_pod_"+ #NUMBER +"_berth"; \
waypoint_station = "escape_pod_"+ #NUMBER +"_start"; \
landmark_transition = "escape_pod_"+ #NUMBER +"_interim"; \
waypoint_offsite = "escape_pod_"+ #NUMBER +"_out"; \
} \
/obj/effect/shuttle_landmark/escape_pod/start/pod##NUMBER { \
landmark_tag = "escape_pod_"+ #NUMBER +"_start"; \
docking_controller = "escape_pod_" + #NUMBER +"_berth"; \
} \
/obj/effect/shuttle_landmark/escape_pod/out/pod##NUMBER { \
landmark_tag = "escape_pod_"+ #NUMBER +"_out"; \
} \
/obj/effect/shuttle_landmark/escape_pod/transit/pod##NUMBER { \
landmark_tag = "escape_pod_"+ #NUMBER +"_interim"; \
}
AURORA_ESCAPE_POD(1)
AURORA_ESCAPE_POD(2)
AURORA_ESCAPE_POD(3)
AURORA_ESCAPE_POD(4)
#undef AURORA_ESCAPE_POD
/datum/shuttle/autodock/ferry/escape_pod/pod
category = /datum/shuttle/autodock/ferry/escape_pod/pod
sound_takeoff = 'sound/effects/rocket.ogg'
sound_landing = 'sound/effects/rocket_backwards.ogg'
warmup_time = 10
/obj/effect/shuttle_landmark/escape_pod/start
name = "Docked"
base_turf = /turf/simulated/floor/reinforced/airless
base_area = /area/mine/explored
/obj/effect/shuttle_landmark/escape_pod/transit
name = "In transit"
base_turf = /turf/space/transit/east
/obj/effect/shuttle_landmark/escape_pod/out
name = "Escaped"
base_turf = /turf/space/dynamic
//-// Transfer Shuttle //-//
/datum/shuttle/autodock/ferry/emergency/aurora
name = "Escape Shuttle"
location = 1
warmup_time = 10
shuttle_area = /area/shuttle/escape
dock_target = "escape_shuttle"
waypoint_station = "nav_emergency_dock"
landmark_transition = "nav_emergency_interim"
waypoint_offsite = "nav_emergency_start"
/obj/effect/shuttle_landmark/emergency/start
name = "Escape Shuttle Centcom Dock"
landmark_tag = "nav_emergency_start"
docking_controller = "centcom_dock"
base_turf = /turf/unsimulated/floor/plating
base_area = /area/centcom/evac
/obj/effect/shuttle_landmark/emergency/interim
name = "In Transit"
landmark_tag = "nav_emergency_interim"
base_turf = /turf/space/transit/bluespace/south
/obj/effect/shuttle_landmark/emergency/dock
name = "Escape Shuttle Dock"
landmark_tag = "nav_emergency_dock"
docking_controller = "escape_dock"
landmark_flags = SLANDMARK_FLAG_AUTOSET
//-// Arrival Shuttle //-//
/datum/shuttle/autodock/ferry/arrival/aurora
name = "Arrival Shuttle"
location = 1
warmup_time = 10
shuttle_area = /area/shuttle/arrival
move_time = 60
dock_target = "arrival_shuttle"
waypoint_station = "nav_arrival_dock"
landmark_transition = "nav_arrival_interim"
waypoint_offsite = "nav_arrival_start"
/obj/effect/shuttle_landmark/arrival/start
name = "Arrival Shuttle Centcom Dock"
landmark_tag = "nav_arrival_start"
docking_controller = "centcom_setup"
base_turf = /turf/unsimulated/floor/plating
base_area = /area/centcom/spawning
/obj/effect/shuttle_landmark/arrival/interim
name = "In Transit"
landmark_tag = "nav_arrival_interim"
base_turf = /turf/space/transit/bluespace/west
/obj/effect/shuttle_landmark/arrival/dock
name = "Arrival Shuttle Dock"
landmark_tag = "nav_arrival_dock"
docking_controller = "arrival_dock"
landmark_flags = SLANDMARK_FLAG_AUTOSET
//-// Supply Shuttle //-//
/datum/shuttle/autodock/ferry/supply/aurora
name = "Supply Shuttle"
location = 1
shuttle_area = /area/supply/dock
dock_target = "supply_shuttle"
waypoint_station = "nav_supply_dock"
waypoint_offsite = "nav_supply_start"
/obj/effect/shuttle_landmark/supply/start
name = "Supply Centcom Dock"
landmark_tag = "nav_supply_start"
base_turf = /turf/unsimulated/floor/plating
base_area = /area/centcom
/obj/effect/shuttle_landmark/supply/dock
name = "Supply Shuttle Dock"
landmark_tag = "nav_supply_dock"
docking_controller = "cargo_bay"
landmark_flags = SLANDMARK_FLAG_AUTOSET
//-// Merchant Shuttle //-//
/datum/shuttle/autodock/ferry/merchant_aurora
name = "ICV Enterprise"
location = 1
warmup_time = 10
shuttle_area = /area/shuttle/merchant
move_time = 20
dock_target = "merchant_shuttle"
waypoint_station = "nav_merchant_dock"
landmark_transition = "nav_merchant_interim"
waypoint_offsite = "nav_merchant_start"
/obj/effect/shuttle_landmark/merchant/start
name = "Merchant Shuttle Base"
landmark_tag = "nav_merchant_start"
docking_controller = "merchant_station"
base_turf = /turf/space/dynamic
base_area = /area/template_noop
/obj/effect/shuttle_landmark/merchant/interim
name = "In Transit"
landmark_tag = "nav_merchant_interim"
base_turf = /turf/space/transit/bluespace/west
/obj/effect/shuttle_landmark/merchant/dock
name = "Second Deck Starboard Dock 1"
landmark_tag = "nav_merchant_dock"
docking_controller = "merchant_shuttle_dock"
base_turf = /turf/space
base_area = /area/space
//-// CCIA Shuttle //-//
/datum/shuttle/autodock/ferry/autoreturn/ccia
name = "SCC Shuttle"
location = 1
warmup_time = 10
shuttle_area = /area/shuttle/transport1
dock_target = "centcom_shuttle"
waypoint_station = "nav_ccia_dock"
waypoint_offsite = "nav_ccia_start"
category = /datum/shuttle/autodock/ferry/autoreturn
/obj/effect/shuttle_landmark/ccia/start
name = "Agent Shuttle Base"
landmark_tag = "nav_ccia_start"
docking_controller = "centcom_shuttle_bay"
base_turf = /turf/unsimulated/floor/plating
base_area = /area/centcom/ferry
/obj/effect/shuttle_landmark/ccia/dock
name = "Second Deck Starboard Dock 2"
landmark_tag = "nav_ccia_dock"
docking_controller = "centcom_shuttle_dock_airlock"
landmark_flags = SLANDMARK_FLAG_AUTOSET
//-// ERT Shuttle (the NT one) //-//
/datum/shuttle/autodock/ferry/specops/ert_aurora
name = "Phoenix Shuttle"
location = 1
warmup_time = 10
shuttle_area = /area/shuttle/specops
dock_target = "specops_shuttle_port"
waypoint_station = "nav_horizon_dock_deck_3_port_5"
waypoint_offsite = "nav_ert_start"
/obj/effect/shuttle_landmark/ert/start
name = "Phoenix Base"
landmark_tag = "nav_ert_start"
docking_controller = "specops_centcom_dock"
base_turf = /turf/unsimulated/floor/plating
base_area = /area/centcom/specops
/obj/effect/shuttle_landmark/ert/dock
name = "Third Deck Port Dock 3"
landmark_tag = "nav_horizon_dock_deck_3_port_5"
docking_controller = "specops_dock_airlock"
special_dock_targets = list("Phoenix Shuttle" = "specops_shuttle_fore")
landmark_flags = SLANDMARK_FLAG_AUTOSET
//-// Burglar Shuttle //-//
/datum/shuttle/autodock/multi/antag/burglar_aurora
name = "Water Bear"
current_location = "nav_burglar_start"
landmark_transition = "nav_burglar_interim"
dock_target = "burglar_shuttle"
warmup_time = 10
move_time = 75
shuttle_area = /area/shuttle/burglar
destination_tags = list(
"nav_burglar_start",
"nav_burglar_surface",
"nav_burglar_under",
"nav_burglar_caverns",
"nav_burglar_blue"
)
announcer = "NDV Icarus"
arrival_message = "Attention, we just tracked a small target bypassing our defensive perimeter. Can't fire on it without hitting the station - you've got incoming visitors, like it or not."
departure_message = "Attention, your guests are pulling away - moving too fast for us to draw a bead on them. Looks like they're heading out of the system at a rapid clip."
/obj/effect/shuttle_landmark/burglar/start
name = "Hideout"
landmark_tag = "nav_burglar_start"
docking_controller = "burglar_hideout"
base_turf = /turf/unsimulated/floor/plating
base_area = /area/antag/burglar
/obj/effect/shuttle_landmark/burglar/interim
name = "In Transit"
landmark_tag = "nav_burglar_interim"
base_turf = /turf/space/transit/north
/obj/effect/shuttle_landmark/burglar/surface
name = "Exposed Hull, Surface Aft of Cargo"
landmark_tag = "nav_burglar_surface"
landmark_flags = SLANDMARK_FLAG_AUTOSET
/obj/effect/shuttle_landmark/burglar/under
name = "Under the Station, By Radiators"
landmark_tag = "nav_burglar_under"
base_turf = /turf/space
landmark_flags = SLANDMARK_FLAG_AUTOSET
/obj/effect/shuttle_landmark/burglar/caverns
name = "Caverns, Fore of Mining"
landmark_tag = "nav_burglar_caverns"
landmark_flags = SLANDMARK_FLAG_AUTOSET
/obj/effect/shuttle_landmark/burglar/blue
name = "Blue Dock"
landmark_tag = "nav_burglar_blue"
landmark_flags = SLANDMARK_FLAG_AUTOSET
docking_controller = "distress_shuttle_dock"
//-// Raider Skipjack //-//
/datum/shuttle/autodock/multi/antag/skipjack_aurora/New()
name = "Skipjack"
current_location = "nav_skipjack_start"
landmark_transition = "nav_skipjack_interim"
dock_target = "raider_east_control"
warmup_time = 10
move_time = 75
shuttle_area = /area/shuttle/skipjack
destination_tags = list(
"nav_skipjack_start",
"nav_skipjack_surface",
"nav_skipjack_under",
"nav_skipjack_caverns",
"nav_skipjack_interstitial",
"nav_skipjack_toxins"
)
announcer = "NDV Icarus"
arrival_message = "Attention, we just tracked a small target bypassing our defensive perimeter. Can't fire on it without hitting the [station_name(TRUE)] - you've got incoming visitors, like it or not."
departure_message = "Attention, your guests are pulling away - moving too fast for us to draw a bead on them. Looks like they're heading out of the system at a rapid clip."
..()
/obj/effect/shuttle_landmark/skipjack/start
name = "Raider Hideout"
landmark_tag = "nav_skipjack_start"
docking_controller = "pirate_hideout"
base_turf = /turf/space/dynamic
base_area = /area/template_noop
/obj/effect/shuttle_landmark/skipjack/interim
name = "In Transit"
landmark_tag = "nav_skipjack_interim"
base_turf = /turf/space/transit/north
/obj/effect/shuttle_landmark/skipjack/surface
name = "Surface, Aft of Cargo"
landmark_tag = "nav_skipjack_surface"
landmark_flags = SLANDMARK_FLAG_AUTOSET
/obj/effect/shuttle_landmark/skipjack/under
name = "Under the Station, By Radiators"
landmark_tag = "nav_skipjack_under"
landmark_flags = SLANDMARK_FLAG_AUTOSET
base_turf = /turf/space/dynamic
/obj/effect/shuttle_landmark/skipjack/caverns
name = "Caverns, Aft of Mining"
landmark_tag = "nav_skipjack_caverns"
landmark_flags = SLANDMARK_FLAG_AUTOSET
/obj/effect/shuttle_landmark/skipjack/interstitial
name = "Interstitial, Exposed Hull by Medical"
landmark_tag = "nav_skipjack_interstitial"
landmark_flags = SLANDMARK_FLAG_AUTOSET
/obj/effect/shuttle_landmark/skipjack/toxins
name = "Caverns, By Bombrange"
landmark_tag = "nav_skipjack_toxins"
landmark_flags = SLANDMARK_FLAG_AUTOSET
//-// Mercenary Shuttle //-//
/datum/shuttle/autodock/multi/antag/merc_aurora/New()
name = "ICV Raskolnikov"
current_location = "nav_merc_start"
landmark_transition = "nav_merc_interim"
dock_target = "merc_shuttle"
warmup_time = 10
move_time = 75
shuttle_area = /area/shuttle/mercenary
destination_tags = list(
"nav_merc_dock",
"nav_merc_start",
"nav_merc_surface",
"nav_merc_under",
"nav_merc_caverns"
)
announcer = "NDV Icarus"
arrival_message = "Attention, you have a large signature approaching the [station_name(TRUE)] - looks unarmed to surface scans. We're too far out to intercept - brace for visitors."
departure_message = "Attention, your visitors are on their way out of the system, burning delta-v like it's nothing. Good riddance."
..()
/obj/effect/shuttle_landmark/merc/start
name = "Mercenary Base"
landmark_tag = "nav_merc_start"
docking_controller = "merc_base"
base_turf = /turf/space/dynamic
base_area = /area/template_noop
/obj/effect/shuttle_landmark/merc/interim
name = "In Transit"
landmark_tag = "nav_merc_interim"
base_turf = /turf/space/transit/north
/obj/effect/shuttle_landmark/merc/dock
name = "Yellow Dock"
landmark_tag = "nav_merc_dock"
docking_controller = "nuke_shuttle_dock_airlock"
landmark_flags = SLANDMARK_FLAG_AUTOSET
/obj/effect/shuttle_landmark/merc/surface
name = "Surface, Aft of Command"
landmark_tag = "nav_merc_surface"
landmark_flags = SLANDMARK_FLAG_AUTOSET
/obj/effect/shuttle_landmark/merc/under
name = "Under the Station, At Radiators"
landmark_tag = "nav_merc_under"
landmark_flags = SLANDMARK_FLAG_AUTOSET
base_turf = /turf/space/dynamic
/obj/effect/shuttle_landmark/merc/caverns
name = "Caverns, Fore of Security"
landmark_tag = "nav_merc_caverns"
landmark_flags = SLANDMARK_FLAG_AUTOSET
//-// Merc Elite Shuttle //-//
/datum/shuttle/autodock/multi/merc_aurora_elite
name = "Merc Elite"
current_location = "nav_mercelite_start"
warmup_time = 10
shuttle_area = /area/shuttle/syndicate_elite
dock_target = "elite_shuttle_starboard"
destination_tags = list(
"nav_mercelite_start",
"nav_mercelite_command",
"nav_mercelite_merchant",
"nav_mercelite_yellow",
"nav_mercelite_green"
)
/obj/effect/shuttle_landmark/merc_elite/start
name = "Shuttle Hangar"
landmark_tag = "nav_mercelite_start"
docking_controller = "elite_shuttle_origin"
base_turf = /turf/unsimulated/floor/plating
base_area = /area/antag/mercenary
/obj/effect/shuttle_landmark/merc_elite/command
name = "Command Surface - Maintenance"
landmark_tag = "nav_mercelite_command"
docking_controller = "command_surface_airlock"
landmark_flags = SLANDMARK_FLAG_AUTOSET
/obj/effect/shuttle_landmark/merc_elite/merchant
name = "Merchant Dock"
landmark_tag = "nav_mercelite_merchant"
docking_controller = "merchant_shuttle_dock"
special_dock_targets = list("Merc Elite" = "elite_shuttle_port")
landmark_flags = SLANDMARK_FLAG_AUTOSET
/obj/effect/shuttle_landmark/merc_elite/yellow
name = "Yellow Dock"
landmark_tag = "nav_mercelite_yellow"
docking_controller = "nuke_shuttle_dock_airlock"
landmark_flags = SLANDMARK_FLAG_AUTOSET
/obj/effect/shuttle_landmark/merc_elite/green
name = "Emergency Services Dock"
landmark_tag = "nav_mercelite_green"
docking_controller = "green_dock_west"
landmark_flags = SLANDMARK_FLAG_AUTOSET
//-// TCFL Dropship //-//
/datum/shuttle/autodock/multi/legion
name = "Legion Shuttle"
current_location = "nav_legion_start"
warmup_time = 10
move_time = 75
ceiling_type = /turf/simulated/shuttle_roof/legion
shuttle_area = /area/shuttle/legion
dock_target = "legion_shuttle"
landmark_transition = "nav_legion_interim"
destination_tags = list(
"nav_legion_start",
"nav_legion_green",
"nav_legion_merchant",
"nav_legion_medical"
)
/obj/effect/shuttle_landmark/legion/start
name = "BLV The Tower"
landmark_tag = "nav_legion_start"
docking_controller = "legion_hangar"
base_turf = /turf/unsimulated/floor/plating
base_area = /area/centcom/legion/hangar5
/obj/effect/shuttle_landmark/legion/interim
name = "In Transit"
landmark_tag = "nav_legion_interim"
base_turf = /turf/space/transit/bluespace/west
/obj/effect/shuttle_landmark/legion/green
name = "Third Deck Port Dock 1"
landmark_tag = "nav_legion_green"
docking_controller = "legion_shuttle_dock"
landmark_flags = SLANDMARK_FLAG_AUTOSET
/obj/effect/shuttle_landmark/legion/merchant
name = "Merchant Dock"
landmark_tag = "nav_legion_merchant"
docking_controller = "merchant_shuttle_dock"
special_dock_targets = list("Legion Shuttle" = "legion_shuttle_aft_airlock")
landmark_flags = SLANDMARK_FLAG_AUTOSET
/obj/effect/shuttle_landmark/legion/medical
name = "External Airlock by Medical"
landmark_tag = "nav_legion_medical"
landmark_flags = SLANDMARK_FLAG_AUTOSET
//-// Research Shuttle //-//
/datum/shuttle/autodock/multi/research_aurora
name = "Research Shuttle"
current_location = "nav_research_dock"
warmup_time = 10
move_time = 60
shuttle_area = /area/shuttle/research
dock_target = "science_shuttle"
landmark_transition = "nav_research_interim"
destination_tags = list(
"nav_research_dock",
"nav_research_yellow",
"nav_research_away"
)
/obj/effect/shuttle_landmark/research/start
name = "Research Dock"
landmark_tag = "nav_research_dock"
docking_controller = "science_bridge"
base_turf = /turf/simulated/floor/exoplanet/asteroid/ash
base_area = /area/mine/explored
/obj/effect/shuttle_landmark/research/yellow
name = "Yellow Dock"
landmark_tag = "nav_research_yellow"
docking_controller = "yellow_shuttle_dock_airlock"
landmark_flags = SLANDMARK_FLAG_AUTOSET
/obj/effect/shuttle_landmark/research/interim
name = "In Transit"
landmark_tag = "nav_research_interim"
base_turf = /turf/space/transit/north
/obj/effect/shuttle_landmark/research/dock
name = "Away Site"
landmark_tag = "nav_research_away"
landmark_flags = SLANDMARK_FLAG_AUTOSET
//-// Distress Team Shuttle //-//
/datum/shuttle/autodock/multi/distress
name = "Distress Shuttle"
current_location = "nav_distress_away"
warmup_time = 10
move_time = 45
dock_target = "distress_shuttle_aft"
shuttle_area = /area/shuttle/distress
landmark_transition = "nav_distress_interim"
destination_tags = list(
"nav_distress_away",
"nav_distress_green",
"nav_distress_blue"
)
/obj/effect/shuttle_landmark/distress/start
name = "Distress Preparation Wing"
landmark_tag = "nav_distress_away"
docking_controller = "distress_shuttle_origin"
base_turf = /turf/unsimulated/floor/plating
base_area = /area/centcom/distress_prep
/obj/effect/shuttle_landmark/distress/interim
name = "In Transit"
landmark_tag = "nav_distress_interim"
base_turf = /turf/space/transit/bluespace/west
/obj/effect/shuttle_landmark/distress/green
name = "Emergency Services Dock"
landmark_tag = "nav_distress_green"
docking_controller = "green_dock_west"
special_dock_targets = list("Distress Shuttle" = "distress_shuttle_fore")
landmark_flags = SLANDMARK_FLAG_AUTOSET
/obj/effect/shuttle_landmark/distress/blue
name = "First Deck Port Hangar Bay 2b"
landmark_tag = "nav_distress_blue"
special_dock_targets = list("Distress Shuttle" = "distress_shuttle_fore")
landmark_flags = SLANDMARK_FLAG_AUTOSET
base_turf = /turf/simulated/floor/plating