mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-12 19:22:56 +00:00
- Nukeops (or newly mercenaries) can now dock with the station. Two locations are available, maintenance between virology and xenobiology and arrivals. - You always have to hack in or be let in. The door won't open on it's own. This is intentional as the shuttle is considered unrecognised by station's docking system. AI or anyone else can open the doors for you if needed. - Also fixes bug which broke the shuttle console, since someone who was renaming nukeops to mercenaries forgot to change one line in antagonist.dm
308 lines
13 KiB
Plaintext
308 lines
13 KiB
Plaintext
|
|
var/global/datum/shuttle_controller/shuttle_controller
|
|
|
|
|
|
/datum/shuttle_controller
|
|
var/list/shuttles //maps shuttle tags to shuttle datums, so that they can be looked up.
|
|
var/list/process_shuttles //simple list of shuttles, for processing
|
|
|
|
/datum/shuttle_controller/proc/process()
|
|
//process ferry shuttles
|
|
for (var/datum/shuttle/ferry/shuttle in process_shuttles)
|
|
if (shuttle.process_state)
|
|
shuttle.process()
|
|
|
|
|
|
/datum/shuttle_controller/New()
|
|
shuttles = list()
|
|
process_shuttles = list()
|
|
|
|
var/datum/shuttle/ferry/shuttle
|
|
|
|
// Escape shuttle and pods
|
|
shuttle = new/datum/shuttle/ferry/emergency()
|
|
shuttle.location = 1
|
|
shuttle.warmup_time = 10
|
|
shuttle.area_offsite = locate(/area/shuttle/escape/centcom)
|
|
shuttle.area_station = locate(/area/shuttle/escape/station)
|
|
shuttle.area_transition = locate(/area/shuttle/escape/transit)
|
|
shuttle.docking_controller_tag = "escape_shuttle"
|
|
shuttle.dock_target_station = "escape_dock"
|
|
shuttle.dock_target_offsite = "centcom_dock"
|
|
shuttle.transit_direction = NORTH
|
|
shuttle.move_time = SHUTTLE_TRANSIT_DURATION_RETURN
|
|
//shuttle.docking_controller_tag = "supply_shuttle"
|
|
//shuttle.dock_target_station = "cargo_bay"
|
|
shuttles["Escape"] = shuttle
|
|
process_shuttles += shuttle
|
|
|
|
shuttle = new/datum/shuttle/ferry/escape_pod()
|
|
shuttle.location = 0
|
|
shuttle.warmup_time = 0
|
|
shuttle.area_station = locate(/area/shuttle/escape_pod1/station)
|
|
shuttle.area_offsite = locate(/area/shuttle/escape_pod1/centcom)
|
|
shuttle.area_transition = locate(/area/shuttle/escape_pod1/transit)
|
|
shuttle.docking_controller_tag = "escape_pod_1"
|
|
shuttle.dock_target_station = "escape_pod_1_berth"
|
|
shuttle.dock_target_offsite = "escape_pod_1_recovery"
|
|
shuttle.transit_direction = NORTH
|
|
shuttle.move_time = SHUTTLE_TRANSIT_DURATION_RETURN + rand(-30, 60) //randomize this so it seems like the pods are being picked up one by one
|
|
process_shuttles += shuttle
|
|
shuttles["Escape Pod 1"] = shuttle
|
|
|
|
shuttle = new/datum/shuttle/ferry/escape_pod()
|
|
shuttle.location = 0
|
|
shuttle.warmup_time = 0
|
|
shuttle.area_station = locate(/area/shuttle/escape_pod2/station)
|
|
shuttle.area_offsite = locate(/area/shuttle/escape_pod2/centcom)
|
|
shuttle.area_transition = locate(/area/shuttle/escape_pod2/transit)
|
|
shuttle.docking_controller_tag = "escape_pod_2"
|
|
shuttle.dock_target_station = "escape_pod_2_berth"
|
|
shuttle.dock_target_offsite = "escape_pod_2_recovery"
|
|
shuttle.transit_direction = NORTH
|
|
shuttle.move_time = SHUTTLE_TRANSIT_DURATION_RETURN + rand(-30, 60) //randomize this so it seems like the pods are being picked up one by one
|
|
process_shuttles += shuttle
|
|
shuttles["Escape Pod 2"] = shuttle
|
|
|
|
shuttle = new/datum/shuttle/ferry/escape_pod()
|
|
shuttle.location = 0
|
|
shuttle.warmup_time = 0
|
|
shuttle.area_station = locate(/area/shuttle/escape_pod3/station)
|
|
shuttle.area_offsite = locate(/area/shuttle/escape_pod3/centcom)
|
|
shuttle.area_transition = locate(/area/shuttle/escape_pod3/transit)
|
|
shuttle.docking_controller_tag = "escape_pod_3"
|
|
shuttle.dock_target_station = "escape_pod_3_berth"
|
|
shuttle.dock_target_offsite = "escape_pod_3_recovery"
|
|
shuttle.transit_direction = EAST
|
|
shuttle.move_time = SHUTTLE_TRANSIT_DURATION_RETURN + rand(-30, 60) //randomize this so it seems like the pods are being picked up one by one
|
|
process_shuttles += shuttle
|
|
shuttles["Escape Pod 3"] = shuttle
|
|
|
|
//There is no pod 4, apparently.
|
|
|
|
shuttle = new/datum/shuttle/ferry/escape_pod()
|
|
shuttle.location = 0
|
|
shuttle.warmup_time = 0
|
|
shuttle.area_station = locate(/area/shuttle/escape_pod5/station)
|
|
shuttle.area_offsite = locate(/area/shuttle/escape_pod5/centcom)
|
|
shuttle.area_transition = locate(/area/shuttle/escape_pod5/transit)
|
|
shuttle.docking_controller_tag = "escape_pod_5"
|
|
shuttle.dock_target_station = "escape_pod_5_berth"
|
|
shuttle.dock_target_offsite = "escape_pod_5_recovery"
|
|
shuttle.transit_direction = EAST //should this be WEST? I have no idea.
|
|
shuttle.move_time = SHUTTLE_TRANSIT_DURATION_RETURN + rand(-30, 60) //randomize this so it seems like the pods are being picked up one by one
|
|
process_shuttles += shuttle
|
|
shuttles["Escape Pod 5"] = shuttle
|
|
|
|
//give the emergency shuttle controller it's shuttles
|
|
emergency_shuttle.shuttle = shuttles["Escape"]
|
|
emergency_shuttle.escape_pods = list(
|
|
shuttles["Escape Pod 1"],
|
|
shuttles["Escape Pod 2"],
|
|
shuttles["Escape Pod 3"],
|
|
shuttles["Escape Pod 5"],
|
|
)
|
|
|
|
// Supply shuttle
|
|
shuttle = new/datum/shuttle/ferry/supply()
|
|
shuttle.location = 1
|
|
shuttle.warmup_time = 10
|
|
shuttle.area_offsite = locate(/area/supply/dock)
|
|
shuttle.area_station = locate(/area/supply/station)
|
|
shuttle.docking_controller_tag = "supply_shuttle"
|
|
shuttle.dock_target_station = "cargo_bay"
|
|
shuttles["Supply"] = shuttle
|
|
process_shuttles += shuttle
|
|
|
|
supply_controller.shuttle = shuttle
|
|
|
|
// Admin shuttles.
|
|
shuttle = new()
|
|
shuttle.location = 1
|
|
shuttle.warmup_time = 10
|
|
shuttle.area_offsite = locate(/area/shuttle/transport1/centcom)
|
|
shuttle.area_station = locate(/area/shuttle/transport1/station)
|
|
shuttle.docking_controller_tag = "centcom_shuttle"
|
|
shuttle.dock_target_station = "centcom_shuttle_dock_airlock"
|
|
shuttle.dock_target_offsite = "centcom_shuttle_bay"
|
|
shuttles["Centcom"] = shuttle
|
|
process_shuttles += shuttle
|
|
|
|
shuttle = new()
|
|
shuttle.location = 1
|
|
shuttle.warmup_time = 10 //want some warmup time so people can cancel.
|
|
shuttle.area_offsite = locate(/area/shuttle/administration/centcom)
|
|
shuttle.area_station = locate(/area/shuttle/administration/station)
|
|
shuttle.docking_controller_tag = "admin_shuttle"
|
|
shuttle.dock_target_station = "admin_shuttle_dock_airlock"
|
|
shuttle.dock_target_offsite = "admin_shuttle_bay"
|
|
shuttles["Administration"] = shuttle
|
|
process_shuttles += shuttle
|
|
|
|
shuttle = new()
|
|
shuttle.area_offsite = locate(/area/shuttle/alien/base)
|
|
shuttle.area_station = locate(/area/shuttle/alien/mine)
|
|
shuttles["Alien"] = shuttle
|
|
//process_shuttles += shuttle //don't need to process this. It can only be moved using admin magic anyways.
|
|
|
|
// Public shuttles
|
|
shuttle = new()
|
|
shuttle.location = 1
|
|
shuttle.warmup_time = 10
|
|
shuttle.area_offsite = locate(/area/shuttle/constructionsite/site)
|
|
shuttle.area_station = locate(/area/shuttle/constructionsite/station)
|
|
shuttle.docking_controller_tag = "engineering_shuttle"
|
|
shuttle.dock_target_station = "engineering_dock_airlock"
|
|
shuttle.dock_target_offsite = "engineering_station_airlock"
|
|
shuttles["Engineering"] = shuttle
|
|
process_shuttles += shuttle
|
|
|
|
shuttle = new()
|
|
shuttle.warmup_time = 10
|
|
shuttle.area_offsite = locate(/area/shuttle/mining/outpost)
|
|
shuttle.area_station = locate(/area/shuttle/mining/station)
|
|
shuttle.docking_controller_tag = "mining_shuttle"
|
|
shuttle.dock_target_station = "mining_dock_airlock"
|
|
shuttle.dock_target_offsite = "mining_outpost_airlock"
|
|
shuttles["Mining"] = shuttle
|
|
process_shuttles += shuttle
|
|
|
|
shuttle = new()
|
|
shuttle.warmup_time = 10
|
|
shuttle.area_offsite = locate(/area/shuttle/research/outpost)
|
|
shuttle.area_station = locate(/area/shuttle/research/station)
|
|
shuttle.docking_controller_tag = "research_shuttle"
|
|
shuttle.dock_target_station = "research_dock_airlock"
|
|
shuttle.dock_target_offsite = "research_outpost_dock"
|
|
shuttles["Research"] = shuttle
|
|
process_shuttles += shuttle
|
|
|
|
// ERT Shuttle
|
|
var/datum/shuttle/ferry/multidock/specops/ERT = new()
|
|
ERT.location = 0
|
|
ERT.warmup_time = 10
|
|
ERT.area_offsite = locate(/area/shuttle/specops/station) //centcom is the home station, the Exodus is offsite
|
|
ERT.area_station = locate(/area/shuttle/specops/centcom)
|
|
ERT.docking_controller_tag = "specops_shuttle_port"
|
|
ERT.docking_controller_tag_station = "specops_shuttle_port"
|
|
ERT.docking_controller_tag_offsite = "specops_shuttle_fore"
|
|
ERT.dock_target_station = "specops_centcom_dock"
|
|
ERT.dock_target_offsite = "specops_dock_airlock"
|
|
shuttles["Special Operations"] = ERT
|
|
process_shuttles += ERT
|
|
|
|
//Vox Shuttle.
|
|
var/datum/shuttle/multi_shuttle/VS = new/datum/shuttle/multi_shuttle()
|
|
VS.origin = locate(/area/shuttle/vox/station)
|
|
|
|
VS.destinations = list(
|
|
"Fore Starboard Solars" = locate(/area/vox_station/northeast_solars),
|
|
"Fore Port Solars" = locate(/area/vox_station/northwest_solars),
|
|
"Aft Starboard Solars" = locate(/area/vox_station/southeast_solars),
|
|
"Aft Port Solars" = locate(/area/vox_station/southwest_solars),
|
|
"Mining asteroid" = locate(/area/vox_station/mining)
|
|
)
|
|
|
|
VS.announcer = "NSV Icarus"
|
|
VS.arrival_message = "Attention, Exodus, 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."
|
|
VS.departure_message = "Your guests are pulling away, Exodus - moving too fast for us to draw a bead on them. Looks like they're heading out of the system at a rapid clip."
|
|
VS.interim = locate(/area/vox_station/transit)
|
|
|
|
VS.warmup_time = 0
|
|
shuttles["Vox Skipjack"] = VS
|
|
|
|
//Nuke Ops shuttle.
|
|
var/datum/shuttle/multi_shuttle/MS = new/datum/shuttle/multi_shuttle()
|
|
MS.origin = locate(/area/syndicate_station/start)
|
|
|
|
MS.destinations = list(
|
|
"Northwest of the station" = locate(/area/syndicate_station/northwest),
|
|
"North of the station" = locate(/area/syndicate_station/north),
|
|
"Northeast of the station" = locate(/area/syndicate_station/northeast),
|
|
"Southwest of the station" = locate(/area/syndicate_station/southwest),
|
|
"South of the station" = locate(/area/syndicate_station/south),
|
|
"Southeast of the station" = locate(/area/syndicate_station/southeast),
|
|
"Telecomms Satellite" = locate(/area/syndicate_station/commssat),
|
|
"Mining Asteroid" = locate(/area/syndicate_station/mining),
|
|
"Dock - Arrivals" = locate(/area/syndicate_station/arrivals_dock),
|
|
"Dock - Maintenance" = locate(/area/syndicate_station/maint_dock)
|
|
)
|
|
|
|
MS.announcer = "NSV Icarus"
|
|
MS.arrival_message = "Attention, Exodus, you have a large signature approaching the station - looks unarmed to surface scans. We're too far out to intercept - brace for visitors."
|
|
MS.departure_message = "Your visitors are on their way out of the system, Exodus, burning delta-v like it's nothing. Good riddance."
|
|
MS.interim = locate(/area/syndicate_station/transit)
|
|
|
|
MS.warmup_time = 0
|
|
shuttles["Mercenary"] = MS
|
|
|
|
|
|
//This is called by gameticker after all the machines and radio frequencies have been properly initialized
|
|
/datum/shuttle_controller/proc/setup_shuttle_docks()
|
|
var/datum/shuttle/shuttle
|
|
var/datum/shuttle/ferry/multidock/multidock
|
|
var/list/dock_controller_map = list() //so we only have to iterate once through each list
|
|
|
|
//multidock shuttles
|
|
var/list/dock_controller_map_station = list()
|
|
var/list/dock_controller_map_offsite = list()
|
|
|
|
for (var/shuttle_tag in shuttles)
|
|
shuttle = shuttles[shuttle_tag]
|
|
if (shuttle.docking_controller_tag)
|
|
dock_controller_map[shuttle.docking_controller_tag] = shuttle
|
|
if (istype(shuttle, /datum/shuttle/ferry/multidock))
|
|
multidock = shuttle
|
|
dock_controller_map_station[multidock.docking_controller_tag_station] = multidock
|
|
dock_controller_map_offsite[multidock.docking_controller_tag_offsite] = multidock
|
|
|
|
//escape pod arming controllers
|
|
var/datum/shuttle/ferry/escape_pod/pod
|
|
var/list/pod_controller_map = list()
|
|
for (var/datum/shuttle/ferry/escape_pod/P in emergency_shuttle.escape_pods)
|
|
if (P.dock_target_station)
|
|
pod_controller_map[P.dock_target_station] = P
|
|
|
|
//search for the controllers, if we have one.
|
|
if (dock_controller_map.len)
|
|
for (var/obj/machinery/embedded_controller/radio/C in machines) //only radio controllers are supported at the moment
|
|
if (istype(C.program, /datum/computer/file/embedded_program/docking))
|
|
if (C.id_tag in dock_controller_map)
|
|
shuttle = dock_controller_map[C.id_tag]
|
|
shuttle.docking_controller = C.program
|
|
dock_controller_map -= C.id_tag
|
|
|
|
//escape pods
|
|
if(istype(C, /obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod) && istype(shuttle, /datum/shuttle/ferry/escape_pod))
|
|
var/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod/EPC = C
|
|
EPC.pod = shuttle
|
|
|
|
if (C.id_tag in dock_controller_map_station)
|
|
multidock = dock_controller_map_station[C.id_tag]
|
|
if (istype(multidock))
|
|
multidock.docking_controller_station = C.program
|
|
dock_controller_map_station -= C.id_tag
|
|
if (C.id_tag in dock_controller_map_offsite)
|
|
multidock = dock_controller_map_offsite[C.id_tag]
|
|
if (istype(multidock))
|
|
multidock.docking_controller_offsite = C.program
|
|
dock_controller_map_offsite -= C.id_tag
|
|
|
|
//escape pods
|
|
if (C.id_tag in pod_controller_map)
|
|
pod = pod_controller_map[C.id_tag]
|
|
if (istype(C.program, /datum/computer/file/embedded_program/docking/simple/escape_pod/))
|
|
pod.arming_controller = C.program
|
|
|
|
//sanity check
|
|
if (dock_controller_map.len || dock_controller_map_station.len || dock_controller_map_offsite.len)
|
|
var/dat = ""
|
|
for (var/dock_tag in dock_controller_map + dock_controller_map_station + dock_controller_map_offsite)
|
|
dat += "\"[dock_tag]\", "
|
|
world << "\red \b warning: shuttles with docking tags [dat] could not find their controllers!"
|
|
|
|
//makes all shuttles docked to something at round start go into the docked state
|
|
for (var/shuttle_tag in shuttles)
|
|
shuttle = shuttles[shuttle_tag]
|
|
shuttle.dock()
|