mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-11 10:43:20 +00:00
Web Shuttle Update
Adds autopilot functionality for shuttle one and shuttle two. It can be enabled and disabled by the flight computer. Autopilot is active by default on both shuttles. The shuttle waits for two minutes when it reaches the outpost or station, except for the first flight, where it waits for about ten minutes, which should be plenty of time for people to get on and for the pilot to turn it off if one exists. Adds renaming feature to all shuttles. Ports /tg/'s 'shuttle warning' effect, which adds a bunch of blue circles where a ship is about to land, which should prevent surprise shuttle crushes if paying attention. Flight times for all routes are cut in half to act as the bonus for flying manually. Automatic flight takes twice as long, and so it will take the current amount of time. Makes Ninja shuttle faster because Nippen steal. Does some cleanup with temporary effects.
This commit is contained in:
@@ -8,8 +8,12 @@ var/global/datum/shuttle_controller/shuttle_controller
|
|||||||
|
|
||||||
/datum/shuttle_controller/proc/process()
|
/datum/shuttle_controller/proc/process()
|
||||||
//process ferry shuttles
|
//process ferry shuttles
|
||||||
for (var/datum/shuttle/ferry/shuttle in process_shuttles)
|
for (var/datum/shuttle/shuttle in process_shuttles)
|
||||||
if (shuttle.process_state || shuttle.always_process)
|
if(istype(shuttle, /datum/shuttle/ferry))
|
||||||
|
var/datum/shuttle/ferry/F = shuttle
|
||||||
|
if(F.process_state || F.always_process)
|
||||||
|
F.process()
|
||||||
|
else
|
||||||
shuttle.process()
|
shuttle.process()
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -25,5 +25,6 @@
|
|||||||
/obj/effect/temporary_effect/darkness
|
/obj/effect/temporary_effect/darkness
|
||||||
name = "darkness"
|
name = "darkness"
|
||||||
time_to_die = 2 MINUTES
|
time_to_die = 2 MINUTES
|
||||||
new_light_range = 6
|
invisibility = 101
|
||||||
new_light_power = -20
|
light_range = 6
|
||||||
|
light_power = -20
|
||||||
@@ -26,13 +26,11 @@
|
|||||||
/obj/effect/temporary_effect/destablize
|
/obj/effect/temporary_effect/destablize
|
||||||
name = "destablizing disturbance"
|
name = "destablizing disturbance"
|
||||||
desc = "This can't be good..."
|
desc = "This can't be good..."
|
||||||
icon = 'icons/effects/effects.dmi'
|
|
||||||
icon_state = "blueshatter"
|
icon_state = "blueshatter"
|
||||||
time_to_die = null
|
time_to_die = null
|
||||||
invisibility = 0
|
light_range = 6
|
||||||
new_light_range = 6
|
light_power = 20
|
||||||
new_light_power = 20
|
light_color = "#C26DDE"
|
||||||
new_light_color = "#C26DDE"
|
|
||||||
var/pulses_remaining = 40 // Lasts 20 seconds.
|
var/pulses_remaining = 40 // Lasts 20 seconds.
|
||||||
var/instability_power = 5
|
var/instability_power = 5
|
||||||
var/instability_range = 6
|
var/instability_range = 6
|
||||||
|
|||||||
@@ -22,13 +22,11 @@
|
|||||||
/obj/effect/temporary_effect/fire_blast
|
/obj/effect/temporary_effect/fire_blast
|
||||||
name = "fire blast"
|
name = "fire blast"
|
||||||
desc = "Run!"
|
desc = "Run!"
|
||||||
icon = 'icons/effects/effects.dmi'
|
|
||||||
icon_state = "at_shield1"
|
icon_state = "at_shield1"
|
||||||
time_to_die = 2.5 SECONDS // After which we go boom.
|
time_to_die = 2.5 SECONDS // After which we go boom.
|
||||||
invisibility = 0
|
light_range = 4
|
||||||
new_light_range = 4
|
light_power = 5
|
||||||
new_light_power = 5
|
light_color = "#FF6A00"
|
||||||
new_light_color = "#FF6A00"
|
|
||||||
|
|
||||||
/obj/effect/temporary_effect/fire_blast/Destroy()
|
/obj/effect/temporary_effect/fire_blast/Destroy()
|
||||||
explosion(get_turf(src), -1, 1, 2, 5, adminlog = 1)
|
explosion(get_turf(src), -1, 1, 2, 5, adminlog = 1)
|
||||||
|
|||||||
@@ -28,13 +28,11 @@
|
|||||||
/obj/effect/temporary_effect/pulsar
|
/obj/effect/temporary_effect/pulsar
|
||||||
name = "pulsar"
|
name = "pulsar"
|
||||||
desc = "Not a real pulsar, but still emits loads of EMP."
|
desc = "Not a real pulsar, but still emits loads of EMP."
|
||||||
icon = 'icons/effects/effects.dmi'
|
|
||||||
icon_state = "shield2"
|
icon_state = "shield2"
|
||||||
time_to_die = null
|
time_to_die = null
|
||||||
invisibility = 0
|
light_range = 4
|
||||||
new_light_range = 4
|
light_power = 5
|
||||||
new_light_power = 5
|
light_color = "#2ECCFA"
|
||||||
new_light_color = "#2ECCFA"
|
|
||||||
var/pulses_remaining = 3
|
var/pulses_remaining = 3
|
||||||
|
|
||||||
/obj/effect/temporary_effect/pulsar/New()
|
/obj/effect/temporary_effect/pulsar/New()
|
||||||
|
|||||||
@@ -6,22 +6,6 @@
|
|||||||
aspect = null
|
aspect = null
|
||||||
var/obj/effect/spawner_type = null
|
var/obj/effect/spawner_type = null
|
||||||
|
|
||||||
/obj/effect/temporary_effect
|
|
||||||
name = "self deleting effect"
|
|
||||||
desc = "How are you examining what which cannot be seen?"
|
|
||||||
invisibility = 101
|
|
||||||
var/time_to_die = 10 SECONDS // Afer which, it will delete itself.
|
|
||||||
var/new_light_range = 6
|
|
||||||
var/new_light_power = 6
|
|
||||||
var/new_light_color = "#FFFFFF"
|
|
||||||
|
|
||||||
/obj/effect/temporary_effect/New()
|
|
||||||
..()
|
|
||||||
set_light(new_light_range, new_light_power, l_color = new_light_color)
|
|
||||||
if(time_to_die)
|
|
||||||
spawn(time_to_die)
|
|
||||||
qdel(src)
|
|
||||||
|
|
||||||
/obj/item/weapon/spell/spawner/on_ranged_cast(atom/hit_atom, mob/user)
|
/obj/item/weapon/spell/spawner/on_ranged_cast(atom/hit_atom, mob/user)
|
||||||
var/turf/T = get_turf(hit_atom)
|
var/turf/T = get_turf(hit_atom)
|
||||||
if(T)
|
if(T)
|
||||||
|
|||||||
@@ -7,6 +7,19 @@
|
|||||||
density = 1
|
density = 1
|
||||||
anchored = 0
|
anchored = 0
|
||||||
|
|
||||||
|
/obj/effect/temporary_effect
|
||||||
|
name = "self deleting effect"
|
||||||
|
desc = "How are you examining what which cannot be seen?"
|
||||||
|
icon = 'icons/effects/effects.dmi'
|
||||||
|
invisibility = 0
|
||||||
|
var/time_to_die = 10 SECONDS // Afer which, it will delete itself.
|
||||||
|
|
||||||
|
/obj/effect/temporary_effect/New()
|
||||||
|
..()
|
||||||
|
if(time_to_die)
|
||||||
|
spawn(time_to_die)
|
||||||
|
qdel(src)
|
||||||
|
|
||||||
// Shown really briefly when attacking with axes.
|
// Shown really briefly when attacking with axes.
|
||||||
/obj/effect/temporary_effect/cleave_attack
|
/obj/effect/temporary_effect/cleave_attack
|
||||||
name = "cleaving attack"
|
name = "cleaving attack"
|
||||||
@@ -16,12 +29,19 @@
|
|||||||
layer = 6
|
layer = 6
|
||||||
time_to_die = 6
|
time_to_die = 6
|
||||||
alpha = 140
|
alpha = 140
|
||||||
invisibility = 0
|
|
||||||
mouse_opacity = 0
|
mouse_opacity = 0
|
||||||
new_light_range = 0
|
|
||||||
new_light_power = 0
|
|
||||||
pixel_x = -32
|
pixel_x = -32
|
||||||
pixel_y = -32
|
pixel_y = -32
|
||||||
|
|
||||||
/obj/effect/temporary_effect/cleave_attack/initialize() // Makes the slash fade smoothly. When completely transparent it should qdel itself.
|
/obj/effect/temporary_effect/cleave_attack/initialize() // Makes the slash fade smoothly. When completely transparent it should qdel itself.
|
||||||
animate(src, alpha = 0, time = time_to_die - 1)
|
animate(src, alpha = 0, time = time_to_die - 1)
|
||||||
|
|
||||||
|
/obj/effect/temporary_effect/shuttle_landing
|
||||||
|
name = "shuttle landing"
|
||||||
|
desc = "You better move if you don't want to go splat!"
|
||||||
|
icon_state = "shuttle_warning_still"
|
||||||
|
time_to_die = 4.9 SECONDS
|
||||||
|
|
||||||
|
/obj/effect/temporary_effect/shuttle_landing/initialize()
|
||||||
|
flick("shuttle_warning", src) // flick() forces the animation to always begin at the start.
|
||||||
|
..()
|
||||||
@@ -281,15 +281,11 @@ var/list/blobs = list()
|
|||||||
/obj/effect/temporary_effect/blob_attack
|
/obj/effect/temporary_effect/blob_attack
|
||||||
name = "blob"
|
name = "blob"
|
||||||
desc = "The blob lashing out at something."
|
desc = "The blob lashing out at something."
|
||||||
icon = 'icons/effects/effects.dmi'
|
|
||||||
icon_state = "blob_attack"
|
icon_state = "blob_attack"
|
||||||
layer = 5.2
|
layer = 5.2
|
||||||
time_to_die = 6
|
time_to_die = 6
|
||||||
alpha = 140
|
alpha = 140
|
||||||
invisibility = 0
|
|
||||||
mouse_opacity = 0
|
mouse_opacity = 0
|
||||||
new_light_range = 0
|
|
||||||
new_light_power = 0
|
|
||||||
|
|
||||||
/obj/structure/grille/blob_act()
|
/obj/structure/grille/blob_act()
|
||||||
qdel(src)
|
qdel(src)
|
||||||
|
|||||||
@@ -37,12 +37,20 @@
|
|||||||
supply_controller.shuttle = null
|
supply_controller.shuttle = null
|
||||||
. = ..()
|
. = ..()
|
||||||
|
|
||||||
|
/datum/shuttle/proc/process()
|
||||||
|
return
|
||||||
|
|
||||||
/datum/shuttle/proc/init_docking_controllers()
|
/datum/shuttle/proc/init_docking_controllers()
|
||||||
if(docking_controller_tag)
|
if(docking_controller_tag)
|
||||||
docking_controller = locate(docking_controller_tag)
|
docking_controller = locate(docking_controller_tag)
|
||||||
if(!istype(docking_controller))
|
if(!istype(docking_controller))
|
||||||
world << "<span class='danger'>warning: shuttle with docking tag [docking_controller_tag] could not find it's controller!</span>"
|
world << "<span class='danger'>warning: shuttle with docking tag [docking_controller_tag] could not find it's controller!</span>"
|
||||||
|
|
||||||
|
// This creates a graphical warning to where the shuttle is about to land, in approximately five seconds.
|
||||||
|
/datum/shuttle/proc/create_warning_effect(area/landing_area)
|
||||||
|
for(var/turf/T in landing_area)
|
||||||
|
new /obj/effect/temporary_effect/shuttle_landing(T) // It'll delete itself when needed.
|
||||||
|
|
||||||
// Return false to abort a jump, before the 'warmup' phase.
|
// Return false to abort a jump, before the 'warmup' phase.
|
||||||
/datum/shuttle/proc/pre_warmup_checks()
|
/datum/shuttle/proc/pre_warmup_checks()
|
||||||
return TRUE
|
return TRUE
|
||||||
@@ -70,6 +78,7 @@
|
|||||||
spawn(warmup_time*10)
|
spawn(warmup_time*10)
|
||||||
|
|
||||||
make_sounds(origin, HYPERSPACE_WARMUP)
|
make_sounds(origin, HYPERSPACE_WARMUP)
|
||||||
|
create_warning_effect(destination)
|
||||||
sleep(5 SECONDS) // so the sound finishes.
|
sleep(5 SECONDS) // so the sound finishes.
|
||||||
|
|
||||||
if(!post_warmup_checks())
|
if(!post_warmup_checks())
|
||||||
@@ -102,6 +111,7 @@
|
|||||||
spawn(warmup_time*10)
|
spawn(warmup_time*10)
|
||||||
|
|
||||||
make_sounds(departing, HYPERSPACE_WARMUP)
|
make_sounds(departing, HYPERSPACE_WARMUP)
|
||||||
|
create_warning_effect(interim) // Really doubt someone is gonna get crushed in the interim area but for completeness's sake we'll make the warning.
|
||||||
sleep(5 SECONDS) // so the sound finishes.
|
sleep(5 SECONDS) // so the sound finishes.
|
||||||
|
|
||||||
if(!post_warmup_checks())
|
if(!post_warmup_checks())
|
||||||
@@ -122,11 +132,16 @@
|
|||||||
move(departing, interim, direction)
|
move(departing, interim, direction)
|
||||||
|
|
||||||
var/last_progress_sound = 0
|
var/last_progress_sound = 0
|
||||||
|
var/made_warning = FALSE
|
||||||
while (world.time < arrive_time)
|
while (world.time < arrive_time)
|
||||||
// Make the shuttle make sounds every four seconds, since the sound file is five seconds.
|
// Make the shuttle make sounds every four seconds, since the sound file is five seconds.
|
||||||
if(last_progress_sound + 4 SECONDS < world.time)
|
if(last_progress_sound + 4 SECONDS < world.time)
|
||||||
make_sounds(interim, HYPERSPACE_PROGRESS)
|
make_sounds(interim, HYPERSPACE_PROGRESS)
|
||||||
last_progress_sound = world.time
|
last_progress_sound = world.time
|
||||||
|
|
||||||
|
if(arrive_time - world.time <= 5 SECONDS && !made_warning)
|
||||||
|
made_warning = TRUE
|
||||||
|
create_warning_effect(destination)
|
||||||
sleep(5)
|
sleep(5)
|
||||||
|
|
||||||
move(interim, destination, direction)
|
move(interim, destination, direction)
|
||||||
|
|||||||
@@ -57,9 +57,9 @@
|
|||||||
|
|
||||||
..() // Do everything else
|
..() // Do everything else
|
||||||
|
|
||||||
/datum/shuttle/ferry/arrivals/proc/message_passengers(area/A, var/message)
|
/datum/shuttle/proc/message_passengers(area/A, var/message)
|
||||||
for(var/mob/M in A)
|
for(var/mob/M in A)
|
||||||
to_chat(M, message)
|
M.show_message(message, 2)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
/datum/shuttle/ferry/arrivals/current_dock_target()
|
/datum/shuttle/ferry/arrivals/current_dock_target()
|
||||||
|
|||||||
@@ -76,7 +76,7 @@
|
|||||||
Please ensure that long_jump() and short_jump() are only called from here. This applies to subtypes as well.
|
Please ensure that long_jump() and short_jump() are only called from here. This applies to subtypes as well.
|
||||||
Doing so will ensure that multiple jumps cannot be initiated in parallel.
|
Doing so will ensure that multiple jumps cannot be initiated in parallel.
|
||||||
*/
|
*/
|
||||||
/datum/shuttle/ferry/proc/process()
|
/datum/shuttle/ferry/process()
|
||||||
switch(process_state)
|
switch(process_state)
|
||||||
if (WAIT_LAUNCH)
|
if (WAIT_LAUNCH)
|
||||||
if (skip_docking_checks() || docking_controller.can_launch())
|
if (skip_docking_checks() || docking_controller.can_launch())
|
||||||
|
|||||||
@@ -1,20 +1,32 @@
|
|||||||
//This shuttle traverses a "web" of route_datums to have a wider range of places to go and make flying feel like movement is actually occuring.
|
//This shuttle traverses a "web" of route_datums to have a wider range of places to go and make flying feel like movement is actually occuring.
|
||||||
/datum/shuttle/web_shuttle
|
/datum/shuttle/web_shuttle
|
||||||
flags = SHUTTLE_FLAGS_NONE
|
flags = SHUTTLE_FLAGS_NONE
|
||||||
|
var/visible_name = null // The pretty name shown to people in announcements, since the regular name var is used internally for other things.
|
||||||
var/cloaked = FALSE
|
var/cloaked = FALSE
|
||||||
var/can_cloak = FALSE
|
var/can_cloak = FALSE
|
||||||
var/cooldown = 5 SECONDS
|
var/cooldown = 0
|
||||||
var/last_move = 0 //the time at which we last moved
|
var/last_move = 0 //the time at which we last moved
|
||||||
var/area/current_area = null
|
var/area/current_area = null
|
||||||
var/datum/shuttle_web_master/web_master = null
|
var/datum/shuttle_web_master/web_master = null
|
||||||
var/web_master_type = null
|
var/web_master_type = null
|
||||||
var/flight_time_modifier = 1.0
|
var/flight_time_modifier = 1.0
|
||||||
|
var/autopilot = FALSE
|
||||||
|
var/can_autopilot = FALSE
|
||||||
|
var/autopilot_delay = 60 // How many ticks to not do anything when not following an autopath. Should equal two minutes.
|
||||||
|
var/autopilot_first_delay = null // If your want your shuttle to stay for a different amount of time for the first time, set this.
|
||||||
|
var/can_rename = TRUE // Lets the pilot rename the shuttle. Only available once.
|
||||||
category = /datum/shuttle/web_shuttle
|
category = /datum/shuttle/web_shuttle
|
||||||
|
|
||||||
/datum/shuttle/web_shuttle/New()
|
/datum/shuttle/web_shuttle/New()
|
||||||
current_area = locate(current_area)
|
current_area = locate(current_area)
|
||||||
web_master = new web_master_type(src)
|
web_master = new web_master_type(src)
|
||||||
build_destinations()
|
build_destinations()
|
||||||
|
if(autopilot)
|
||||||
|
flags |= SHUTTLE_FLAGS_PROCESS
|
||||||
|
if(autopilot_first_delay)
|
||||||
|
autopilot_delay = autopilot_first_delay
|
||||||
|
if(!visible_name)
|
||||||
|
visible_name = name
|
||||||
..()
|
..()
|
||||||
|
|
||||||
/datum/shuttle/web_shuttle/Destroy()
|
/datum/shuttle/web_shuttle/Destroy()
|
||||||
@@ -39,6 +51,78 @@
|
|||||||
/datum/shuttle/web_shuttle/proc/build_destinations()
|
/datum/shuttle/web_shuttle/proc/build_destinations()
|
||||||
return
|
return
|
||||||
|
|
||||||
|
/datum/shuttle/web_shuttle/process()
|
||||||
|
if(moving_status == SHUTTLE_IDLE)
|
||||||
|
if(web_master.autopath) // We're currently flying a path.
|
||||||
|
autopilot_say("Continuing route.")
|
||||||
|
web_master.process_autopath()
|
||||||
|
|
||||||
|
else // Otherwise we are about to start one or just finished one.
|
||||||
|
if(autopilot_delay > 0) // Wait for awhile so people can get on and off.
|
||||||
|
if(docking_controller && !skip_docking_checks()) // Dock to the destination if possible.
|
||||||
|
var/docking_status = docking_controller.get_docking_status()
|
||||||
|
if(docking_status == "undocked")
|
||||||
|
dock()
|
||||||
|
autopilot_say("Docking.")
|
||||||
|
return
|
||||||
|
else if(docking_status == "docking")
|
||||||
|
return // Give it a few more ticks to finish docking.
|
||||||
|
|
||||||
|
if(autopilot_delay % 10 == 0) // Every ten ticks.
|
||||||
|
var/seconds_left = autopilot_delay * 2
|
||||||
|
if(seconds_left >= 60) // A minute
|
||||||
|
var/minutes_left = Floor(seconds_left / 60)
|
||||||
|
seconds_left = seconds_left % 60
|
||||||
|
autopilot_say("Departing in [minutes_left] minute\s[seconds_left ? ", [seconds_left] seconds":""].")
|
||||||
|
else
|
||||||
|
autopilot_say("Departing in [seconds_left] seconds.")
|
||||||
|
autopilot_delay--
|
||||||
|
|
||||||
|
else // Time to go.
|
||||||
|
if(docking_controller && !skip_docking_checks()) // Undock if possible.
|
||||||
|
var/docking_status = docking_controller.get_docking_status()
|
||||||
|
if(docking_status == "docked")
|
||||||
|
undock()
|
||||||
|
autopilot_say("Undocking.")
|
||||||
|
return
|
||||||
|
else if(docking_status == "undocking")
|
||||||
|
return // Give it a few more ticks to finish undocking.
|
||||||
|
|
||||||
|
autopilot_delay = initial(autopilot_delay)
|
||||||
|
autopilot_say("Taking off.")
|
||||||
|
web_master.process_autopath()
|
||||||
|
|
||||||
|
/datum/shuttle/web_shuttle/proc/adjust_autopilot(on)
|
||||||
|
if(on)
|
||||||
|
if(autopilot)
|
||||||
|
return
|
||||||
|
autopilot = TRUE
|
||||||
|
autopilot_delay = initial(autopilot_delay)
|
||||||
|
shuttle_controller.process_shuttles += src
|
||||||
|
else
|
||||||
|
if(!autopilot)
|
||||||
|
return
|
||||||
|
autopilot = FALSE
|
||||||
|
shuttle_controller.process_shuttles -= src
|
||||||
|
|
||||||
|
/datum/shuttle/web_shuttle/proc/autopilot_say(message) // Makes the autopilot 'talk' to the passengers.
|
||||||
|
var/padded_message = "<span class='game say'><span class='name'>shuttle autopilot</span> states, \"[message]\"</span>"
|
||||||
|
message_passengers(current_area, padded_message)
|
||||||
|
|
||||||
|
/datum/shuttle/web_shuttle/proc/rename_shuttle(mob/user)
|
||||||
|
if(!can_rename)
|
||||||
|
to_chat(user, "<span class='warning'>You can't rename this vessel.</span>")
|
||||||
|
return
|
||||||
|
var/new_name = input(user, "Please enter a new name for this vessel. Note that you can only set its name once, so choose wisely.", "Rename Shuttle", visible_name) as null|text
|
||||||
|
var/sanitized_name = sanitizeName(new_name, MAX_NAME_LEN, TRUE)
|
||||||
|
if(sanitized_name)
|
||||||
|
can_rename = FALSE
|
||||||
|
to_chat(user, "<span class='notice'>You've renamed the vessel to '[sanitized_name]'.</span>")
|
||||||
|
message_admins("[key_name_admin(user)] renamed shuttle '[visible_name]' to '[sanitized_name]'.")
|
||||||
|
visible_name = sanitized_name
|
||||||
|
else
|
||||||
|
to_chat(user, "<span class='warning'>The name you supplied was invalid. Try another name.</span>")
|
||||||
|
|
||||||
/obj/machinery/computer/shuttle_control/web
|
/obj/machinery/computer/shuttle_control/web
|
||||||
name = "flight computer"
|
name = "flight computer"
|
||||||
icon_state = "flightcomp_center"
|
icon_state = "flightcomp_center"
|
||||||
@@ -174,13 +258,16 @@
|
|||||||
"travel_progress" = between(0, percent_finished, 100),
|
"travel_progress" = between(0, percent_finished, 100),
|
||||||
"time_left" = round( (total_time - elapsed_time) / 10),
|
"time_left" = round( (total_time - elapsed_time) / 10),
|
||||||
"can_cloak" = shuttle.can_cloak ? 1 : 0,
|
"can_cloak" = shuttle.can_cloak ? 1 : 0,
|
||||||
"cloaked" = shuttle.cloaked ? 1 : 0
|
"cloaked" = shuttle.cloaked ? 1 : 0,
|
||||||
|
"can_autopilot" = shuttle.can_autopilot ? 1 : 0,
|
||||||
|
"autopilot" = shuttle.autopilot ? 1 : 0,
|
||||||
|
"can_rename" = shuttle.can_rename ? 1 : 0
|
||||||
)
|
)
|
||||||
|
|
||||||
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
|
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
|
||||||
|
|
||||||
if(!ui)
|
if(!ui)
|
||||||
ui = new(user, src, ui_key, "flight.tmpl", "[shuttle_tag] Flight Computer", 470, 500)
|
ui = new(user, src, ui_key, "flight.tmpl", "[shuttle.visible_name] Flight Computer", 470, 500)
|
||||||
ui.set_initial_data(data)
|
ui.set_initial_data(data)
|
||||||
ui.open()
|
ui.open()
|
||||||
ui.set_auto_update(1)
|
ui.set_auto_update(1)
|
||||||
@@ -202,13 +289,22 @@
|
|||||||
ui_interact(usr)
|
ui_interact(usr)
|
||||||
|
|
||||||
if (WS.moving_status != SHUTTLE_IDLE)
|
if (WS.moving_status != SHUTTLE_IDLE)
|
||||||
usr << "<font color='blue'>[shuttle_tag] vessel is busy moving.</font>"
|
usr << "<font color='blue'>[WS.visible_name] is busy moving.</font>"
|
||||||
return
|
return
|
||||||
|
|
||||||
|
if(href_list["rename_command"])
|
||||||
|
WS.rename_shuttle(usr)
|
||||||
|
|
||||||
if(href_list["dock_command"])
|
if(href_list["dock_command"])
|
||||||
|
if(WS.autopilot)
|
||||||
|
to_chat(usr, "<span class='warning'>The autopilot must be disabled before you can control the vessel manually.</span>")
|
||||||
|
return
|
||||||
WS.dock()
|
WS.dock()
|
||||||
|
|
||||||
if(href_list["undock_command"])
|
if(href_list["undock_command"])
|
||||||
|
if(WS.autopilot)
|
||||||
|
to_chat(usr, "<span class='warning'>The autopilot must be disabled before you can control the vessel manually.</span>")
|
||||||
|
return
|
||||||
WS.undock()
|
WS.undock()
|
||||||
|
|
||||||
if(href_list["cloak_command"])
|
if(href_list["cloak_command"])
|
||||||
@@ -223,7 +319,17 @@
|
|||||||
WS.cloaked = FALSE
|
WS.cloaked = FALSE
|
||||||
to_chat(usr, "<span class='danger'>Ship stealth systems have been deactivated. The station will be warned of our arrival.</span>")
|
to_chat(usr, "<span class='danger'>Ship stealth systems have been deactivated. The station will be warned of our arrival.</span>")
|
||||||
|
|
||||||
|
if(href_list["autopilot_on_command"])
|
||||||
|
WS.adjust_autopilot(TRUE)
|
||||||
|
|
||||||
|
if(href_list["autopilot_off_command"])
|
||||||
|
WS.adjust_autopilot(FALSE)
|
||||||
|
|
||||||
if(href_list["traverse"])
|
if(href_list["traverse"])
|
||||||
|
if(WS.autopilot)
|
||||||
|
to_chat(usr, "<span class='warning'>The autopilot must be disabled before you can control the vessel manually.</span>")
|
||||||
|
return
|
||||||
|
|
||||||
if((WS.last_move + WS.cooldown) > world.time)
|
if((WS.last_move + WS.cooldown) > world.time)
|
||||||
usr << "<font color='red'>The ship's drive is inoperable while the engines are charging.</font>"
|
usr << "<font color='red'>The ship's drive is inoperable while the engines are charging.</font>"
|
||||||
return
|
return
|
||||||
@@ -245,7 +351,8 @@
|
|||||||
return
|
return
|
||||||
|
|
||||||
WS.web_master.future_destination = target_destination
|
WS.web_master.future_destination = target_destination
|
||||||
to_chat(usr, "<span class='notice'>[shuttle_tag] flight computer received command.</span>")
|
to_chat(usr, "<span class='notice'>[WS.visible_name] flight computer received command.</span>")
|
||||||
|
WS.web_master.reset_autopath() // Deviating from the path will almost certainly confuse the autopilot, so lets just reset its memory.
|
||||||
|
|
||||||
var/travel_time = new_route.travel_time * WS.flight_time_modifier
|
var/travel_time = new_route.travel_time * WS.flight_time_modifier
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,8 @@
|
|||||||
// This file actually has three seperate datums.
|
// This file actually has four seperate datums.
|
||||||
|
|
||||||
|
/**********
|
||||||
|
* Routes *
|
||||||
|
**********/
|
||||||
|
|
||||||
// This is the first datum, and it connects shuttle_destinations together.
|
// This is the first datum, and it connects shuttle_destinations together.
|
||||||
/datum/shuttle_route
|
/datum/shuttle_route
|
||||||
@@ -39,6 +43,10 @@
|
|||||||
|
|
||||||
return target.name
|
return target.name
|
||||||
|
|
||||||
|
/****************
|
||||||
|
* Destinations *
|
||||||
|
****************/
|
||||||
|
|
||||||
// This is the second datum, and contains information on all the potential destinations for a specific shuttle.
|
// This is the second datum, and contains information on all the potential destinations for a specific shuttle.
|
||||||
/datum/shuttle_destination
|
/datum/shuttle_destination
|
||||||
var/name = "a place" // Name of the destination, used for the flight computer.
|
var/name = "a place" // Name of the destination, used for the flight computer.
|
||||||
@@ -50,8 +58,8 @@
|
|||||||
var/dock_target = null // The tag_id that the shuttle will use to try to dock to the destination, if able.
|
var/dock_target = null // The tag_id that the shuttle will use to try to dock to the destination, if able.
|
||||||
|
|
||||||
var/announcer = null // The name of the 'announcer' that will say the arrival/departure messages. Defaults to the map's boss name if blank.
|
var/announcer = null // The name of the 'announcer' that will say the arrival/departure messages. Defaults to the map's boss name if blank.
|
||||||
var/arrival_message = null // Message said if the ship enters this destination. Not announced if the ship is cloaked.
|
// var/arrival_message = null // Message said if the ship enters this destination. Not announced if the ship is cloaked.
|
||||||
var/departure_message = null // Message said if the ship exits this destination. Not announced if the ship is cloaked.
|
// var/departure_message = null // Message said if the ship exits this destination. Not announced if the ship is cloaked.
|
||||||
|
|
||||||
// When this destination is instantiated, it will go and instantiate other destinations in this assoc list and build routes between them.
|
// When this destination is instantiated, it will go and instantiate other destinations in this assoc list and build routes between them.
|
||||||
// The list format is '/datum/shuttle_destination/subtype = 1 MINUTES'
|
// The list format is '/datum/shuttle_destination/subtype = 1 MINUTES'
|
||||||
@@ -101,18 +109,23 @@
|
|||||||
/datum/shuttle_destination/proc/exit(var/datum/shuttle_destination/new_destination)
|
/datum/shuttle_destination/proc/exit(var/datum/shuttle_destination/new_destination)
|
||||||
announce_departure()
|
announce_departure()
|
||||||
|
|
||||||
|
/datum/shuttle_destination/proc/get_departure_message()
|
||||||
|
return null
|
||||||
|
|
||||||
/datum/shuttle_destination/proc/announce_departure()
|
/datum/shuttle_destination/proc/announce_departure()
|
||||||
if(isnull(departure_message) || master.my_shuttle.cloaked)
|
if(isnull(get_departure_message()) || master.my_shuttle.cloaked)
|
||||||
return
|
return
|
||||||
|
|
||||||
command_announcement.Announce(departure_message,(announcer ? announcer : "[using_map.boss_name]"))
|
command_announcement.Announce(get_departure_message(),(announcer ? announcer : "[using_map.boss_name]"))
|
||||||
|
|
||||||
|
/datum/shuttle_destination/proc/get_arrival_message()
|
||||||
|
return null
|
||||||
|
|
||||||
/datum/shuttle_destination/proc/announce_arrival()
|
/datum/shuttle_destination/proc/announce_arrival()
|
||||||
if(isnull(arrival_message) || master.my_shuttle.cloaked)
|
if(isnull(get_arrival_message()) || master.my_shuttle.cloaked)
|
||||||
return
|
return
|
||||||
|
|
||||||
command_announcement.Announce(arrival_message,(announcer ? announcer : "[using_map.boss_name]"))
|
command_announcement.Announce(get_arrival_message(),(announcer ? announcer : "[using_map.boss_name]"))
|
||||||
|
|
||||||
/datum/shuttle_destination/proc/link_destinations(var/datum/shuttle_destination/other_place, var/area/interim_area, var/travel_time = 0)
|
/datum/shuttle_destination/proc/link_destinations(var/datum/shuttle_destination/other_place, var/area/interim_area, var/travel_time = 0)
|
||||||
// First, check to make sure this doesn't cause a duplicate route.
|
// First, check to make sure this doesn't cause a duplicate route.
|
||||||
@@ -131,6 +144,17 @@
|
|||||||
/datum/shuttle_destination/proc/flight_failure()
|
/datum/shuttle_destination/proc/flight_failure()
|
||||||
return
|
return
|
||||||
|
|
||||||
|
// Returns a /datum/shuttle_route connecting this destination to origin, if one exists.
|
||||||
|
/datum/shuttle_destination/proc/get_route_to(origin_type)
|
||||||
|
for(var/datum/shuttle_route/R in routes)
|
||||||
|
if(R.start.type == origin_type || R.end.type == origin_type)
|
||||||
|
return R
|
||||||
|
return null
|
||||||
|
|
||||||
|
/***************
|
||||||
|
* Web Masters *
|
||||||
|
***************/
|
||||||
|
|
||||||
// This is the third and final datum, which coordinates with the shuttle datum to tell it where it is, where it can go, and how long it will take.
|
// This is the third and final datum, which coordinates with the shuttle datum to tell it where it is, where it can go, and how long it will take.
|
||||||
// It is also responsible for instancing all the destinations it has control over, and linking them together.
|
// It is also responsible for instancing all the destinations it has control over, and linking them together.
|
||||||
/datum/shuttle_web_master
|
/datum/shuttle_web_master
|
||||||
@@ -141,12 +165,17 @@
|
|||||||
var/list/destinations = list() // List of currently instanced destinations.
|
var/list/destinations = list() // List of currently instanced destinations.
|
||||||
var/destination_class = null // Type to use in typesof(), to build destinations.
|
var/destination_class = null // Type to use in typesof(), to build destinations.
|
||||||
|
|
||||||
|
var/datum/shuttle_autopath/autopath = null // Datum used to direct an autopilot.
|
||||||
|
var/list/autopaths = list() // Potential autopaths the autopilot can use. The autopath's start var must equal current_destination to be viable.
|
||||||
|
var/autopath_class = null // Similar to destination_class, used for typesof().
|
||||||
|
|
||||||
/datum/shuttle_web_master/New(var/new_shuttle, var/new_destination_class = null)
|
/datum/shuttle_web_master/New(var/new_shuttle, var/new_destination_class = null)
|
||||||
my_shuttle = new_shuttle
|
my_shuttle = new_shuttle
|
||||||
if(new_destination_class)
|
if(new_destination_class)
|
||||||
destination_class = new_destination_class
|
destination_class = new_destination_class
|
||||||
build_destinations()
|
build_destinations()
|
||||||
current_destination = get_destination_by_type(starting_destination)
|
current_destination = get_destination_by_type(starting_destination)
|
||||||
|
build_autopaths()
|
||||||
|
|
||||||
/datum/shuttle_web_master/Destroy()
|
/datum/shuttle_web_master/Destroy()
|
||||||
my_shuttle = null
|
my_shuttle = null
|
||||||
@@ -189,4 +218,84 @@
|
|||||||
return current_destination
|
return current_destination
|
||||||
|
|
||||||
/datum/shuttle_web_master/proc/get_destination_by_type(var/type_to_get)
|
/datum/shuttle_web_master/proc/get_destination_by_type(var/type_to_get)
|
||||||
return locate(type_to_get) in destinations
|
return locate(type_to_get) in destinations
|
||||||
|
|
||||||
|
// Autopilot stuff.
|
||||||
|
/datum/shuttle_web_master/proc/build_autopaths()
|
||||||
|
init_subtypes(autopath_class, autopaths)
|
||||||
|
for(var/datum/shuttle_autopath/P in autopaths)
|
||||||
|
P.master = src
|
||||||
|
|
||||||
|
/datum/shuttle_web_master/proc/choose_path()
|
||||||
|
if(!autopaths.len)
|
||||||
|
return
|
||||||
|
for(var/datum/shuttle_autopath/path in autopaths)
|
||||||
|
if(path.start == current_destination.type)
|
||||||
|
autopath = path
|
||||||
|
break
|
||||||
|
|
||||||
|
/datum/shuttle_web_master/proc/path_finished(datum/shuttle_autopath/path)
|
||||||
|
autopath = null
|
||||||
|
|
||||||
|
/datum/shuttle_web_master/proc/walk_path(target_type)
|
||||||
|
var/datum/shuttle_route/R = current_destination.get_route_to(target_type)
|
||||||
|
if(!R)
|
||||||
|
return FALSE
|
||||||
|
future_destination = R.get_other_side(current_destination)
|
||||||
|
|
||||||
|
var/travel_time = R.travel_time * my_shuttle.flight_time_modifier * 2 // Autopilot is less efficent than having someone flying manually.
|
||||||
|
if(R.interim && R.travel_time > 0)
|
||||||
|
my_shuttle.long_jump(my_shuttle.current_area, future_destination.my_area, R.interim, travel_time / 10)
|
||||||
|
else
|
||||||
|
my_shuttle.short_jump(my_shuttle.current_area, future_destination.my_area)
|
||||||
|
return TRUE // Note this will return before the shuttle actually arrives.
|
||||||
|
|
||||||
|
/datum/shuttle_web_master/proc/process_autopath()
|
||||||
|
if(!autopath) // If we don't have a path, get one.
|
||||||
|
if(!autopaths.len)
|
||||||
|
return
|
||||||
|
choose_path()
|
||||||
|
|
||||||
|
if(!autopath) // Still nothing, oh well.
|
||||||
|
return
|
||||||
|
|
||||||
|
var/datum/shuttle_destination/target = autopath.get_next_node()
|
||||||
|
if(walk_path(target))
|
||||||
|
autopath.walk_path()
|
||||||
|
|
||||||
|
// Call this to reset everything related to autopiloting.
|
||||||
|
/datum/shuttle_web_master/proc/reset_autopath()
|
||||||
|
autopath = null
|
||||||
|
my_shuttle.autopilot = FALSE
|
||||||
|
|
||||||
|
|
||||||
|
/*************
|
||||||
|
* Autopaths *
|
||||||
|
*************/
|
||||||
|
|
||||||
|
|
||||||
|
// Fourth datum, this one essentially acts as directions for an autopilot to go to the correct places.
|
||||||
|
/datum/shuttle_autopath
|
||||||
|
var/datum/shuttle_web_master/master = null
|
||||||
|
var/datum/shuttle_destination/start = null
|
||||||
|
var/list/path_nodes = list()
|
||||||
|
var/index = 1
|
||||||
|
|
||||||
|
/datum/shuttle_autopath/Destroy()
|
||||||
|
master = null
|
||||||
|
return ..()
|
||||||
|
|
||||||
|
/datum/shuttle_autopath/proc/reset_path()
|
||||||
|
index = 1
|
||||||
|
|
||||||
|
/datum/shuttle_autopath/proc/get_next_node()
|
||||||
|
return path_nodes[index]
|
||||||
|
|
||||||
|
/datum/shuttle_autopath/proc/walk_path()
|
||||||
|
index++
|
||||||
|
if(index > path_nodes.len)
|
||||||
|
finish_path()
|
||||||
|
|
||||||
|
/datum/shuttle_autopath/proc/finish_path()
|
||||||
|
reset_path()
|
||||||
|
master.path_finished(src)
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 388 KiB After Width: | Height: | Size: 387 KiB |
@@ -10,11 +10,36 @@
|
|||||||
current_area = /area/shuttle/shuttle1/start
|
current_area = /area/shuttle/shuttle1/start
|
||||||
docking_controller_tag = "shuttle1_shuttle"
|
docking_controller_tag = "shuttle1_shuttle"
|
||||||
web_master_type = /datum/shuttle_web_master/shuttle1
|
web_master_type = /datum/shuttle_web_master/shuttle1
|
||||||
|
autopilot = TRUE
|
||||||
|
can_autopilot = TRUE
|
||||||
|
autopilot_delay = 60
|
||||||
|
autopilot_first_delay = 300 // Ten minutes at roundstart. Two minutes otherwise.
|
||||||
|
|
||||||
/datum/shuttle_web_master/shuttle1
|
/datum/shuttle_web_master/shuttle1
|
||||||
destination_class = /datum/shuttle_destination/shuttle1
|
destination_class = /datum/shuttle_destination/shuttle1
|
||||||
|
autopath_class = /datum/shuttle_autopath/shuttle1
|
||||||
starting_destination = /datum/shuttle_destination/shuttle1/root
|
starting_destination = /datum/shuttle_destination/shuttle1/root
|
||||||
|
|
||||||
|
/datum/shuttle_autopath/shuttle1/to_outpost
|
||||||
|
start = /datum/shuttle_destination/shuttle1/root
|
||||||
|
|
||||||
|
path_nodes = list(
|
||||||
|
/datum/shuttle_destination/shuttle1/outside_SC,
|
||||||
|
/datum/shuttle_destination/shuttle1/sif_orbit,
|
||||||
|
/datum/shuttle_destination/shuttle1/sky,
|
||||||
|
/datum/shuttle_destination/shuttle1/main_base
|
||||||
|
)
|
||||||
|
|
||||||
|
/datum/shuttle_autopath/shuttle1/to_home
|
||||||
|
start = /datum/shuttle_destination/shuttle1/main_base
|
||||||
|
|
||||||
|
path_nodes = list(
|
||||||
|
/datum/shuttle_destination/shuttle1/sky,
|
||||||
|
/datum/shuttle_destination/shuttle1/sif_orbit,
|
||||||
|
/datum/shuttle_destination/shuttle1/outside_SC,
|
||||||
|
/datum/shuttle_destination/shuttle1/root
|
||||||
|
)
|
||||||
|
|
||||||
//Shuttle 2
|
//Shuttle 2
|
||||||
|
|
||||||
/obj/machinery/computer/shuttle_control/web/shuttle2
|
/obj/machinery/computer/shuttle_control/web/shuttle2
|
||||||
@@ -27,11 +52,38 @@
|
|||||||
current_area = /area/shuttle/shuttle2/start
|
current_area = /area/shuttle/shuttle2/start
|
||||||
docking_controller_tag = "shuttle2_shuttle"
|
docking_controller_tag = "shuttle2_shuttle"
|
||||||
web_master_type = /datum/shuttle_web_master/shuttle2
|
web_master_type = /datum/shuttle_web_master/shuttle2
|
||||||
|
autopilot = TRUE
|
||||||
|
can_autopilot = TRUE
|
||||||
|
autopilot_delay = 60
|
||||||
|
autopilot_first_delay = 380 // Twelve and a half minutes at roundstart. Two minutes otherwise. This should leave when the first shuttle arrives at the outpost.
|
||||||
|
|
||||||
/datum/shuttle_web_master/shuttle2
|
/datum/shuttle_web_master/shuttle2
|
||||||
destination_class = /datum/shuttle_destination/shuttle2
|
destination_class = /datum/shuttle_destination/shuttle2
|
||||||
|
autopath_class = /datum/shuttle_autopath/shuttle2
|
||||||
starting_destination = /datum/shuttle_destination/shuttle2/root
|
starting_destination = /datum/shuttle_destination/shuttle2/root
|
||||||
|
|
||||||
|
/datum/shuttle_autopath/shuttle2/to_outpost
|
||||||
|
start = /datum/shuttle_destination/shuttle2/root
|
||||||
|
|
||||||
|
path_nodes = list(
|
||||||
|
/datum/shuttle_destination/shuttle2/outside_SC,
|
||||||
|
/datum/shuttle_destination/shuttle2/sif_orbit,
|
||||||
|
/datum/shuttle_destination/shuttle2/sky,
|
||||||
|
/datum/shuttle_destination/shuttle2/main_base
|
||||||
|
)
|
||||||
|
|
||||||
|
/datum/shuttle_autopath/shuttle2/to_home
|
||||||
|
start = /datum/shuttle_destination/shuttle2/main_base
|
||||||
|
|
||||||
|
path_nodes = list(
|
||||||
|
/datum/shuttle_destination/shuttle2/sky,
|
||||||
|
/datum/shuttle_destination/shuttle2/sif_orbit,
|
||||||
|
/datum/shuttle_destination/shuttle2/outside_SC,
|
||||||
|
/datum/shuttle_destination/shuttle2/root
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/datum/shuttle_destination/shuttle1/root
|
/datum/shuttle_destination/shuttle1/root
|
||||||
name = "Southern Cross Hangar One"
|
name = "Southern Cross Hangar One"
|
||||||
my_area = /area/shuttle/shuttle1/start
|
my_area = /area/shuttle/shuttle1/start
|
||||||
@@ -39,13 +91,17 @@
|
|||||||
|
|
||||||
dock_target = "hangar_1"
|
dock_target = "hangar_1"
|
||||||
announcer = "Southern Cross Docking Computer"
|
announcer = "Southern Cross Docking Computer"
|
||||||
arrival_message = "Attention, shuttle one has arrived to Hangar One."
|
|
||||||
departure_message = "Attention, shuttle one has departed Hangar One."
|
|
||||||
|
|
||||||
routes_to_make = list(
|
routes_to_make = list(
|
||||||
/datum/shuttle_destination/shuttle1/outside_SC = 0,
|
/datum/shuttle_destination/shuttle1/outside_SC = 0,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
/datum/shuttle_destination/shuttle1/root/get_arrival_message()
|
||||||
|
return "Attention, [master.my_shuttle.visible_name] has arrived to Hangar One."
|
||||||
|
|
||||||
|
/datum/shuttle_destination/shuttle1/root/get_departure_message()
|
||||||
|
return "Attention, [master.my_shuttle.visible_name] has departed Hangar One."
|
||||||
|
|
||||||
/datum/shuttle_destination/shuttle2/root
|
/datum/shuttle_destination/shuttle2/root
|
||||||
name = "Southern Cross Hangar Two"
|
name = "Southern Cross Hangar Two"
|
||||||
my_area = /area/shuttle/shuttle2/start
|
my_area = /area/shuttle/shuttle2/start
|
||||||
@@ -53,13 +109,17 @@
|
|||||||
|
|
||||||
dock_target = "hangar_2"
|
dock_target = "hangar_2"
|
||||||
announcer = "Southern Cross Docking Computer"
|
announcer = "Southern Cross Docking Computer"
|
||||||
arrival_message = "Attention, shuttle two has arrived to Hangar Two."
|
|
||||||
departure_message = "Attention, shuttle two has departed Hangar Two."
|
|
||||||
|
|
||||||
routes_to_make = list(
|
routes_to_make = list(
|
||||||
/datum/shuttle_destination/shuttle2/outside_SC = 0,
|
/datum/shuttle_destination/shuttle2/outside_SC = 0,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
/datum/shuttle_destination/shuttle2/root/get_arrival_message()
|
||||||
|
return "Attention, [master.my_shuttle.visible_name] has arrived to Hangar Two."
|
||||||
|
|
||||||
|
/datum/shuttle_destination/shuttle2/root/get_departure_message()
|
||||||
|
return "Attention, [master.my_shuttle.visible_name] has departed Hangar Two."
|
||||||
|
|
||||||
|
|
||||||
/datum/shuttle_destination/shuttle1/outside_SC
|
/datum/shuttle_destination/shuttle1/outside_SC
|
||||||
name = "Outside of NLS Southern Cross"
|
name = "Outside of NLS Southern Cross"
|
||||||
@@ -67,7 +127,7 @@
|
|||||||
preferred_interim_area = /area/shuttle/shuttle1/transit
|
preferred_interim_area = /area/shuttle/shuttle1/transit
|
||||||
|
|
||||||
routes_to_make = list(
|
routes_to_make = list(
|
||||||
/datum/shuttle_destination/shuttle1/sif_orbit = 1 MINUTE,
|
/datum/shuttle_destination/shuttle1/sif_orbit = 30 SECONDS,
|
||||||
/datum/shuttle_destination/shuttle1/docked_SC = 0
|
/datum/shuttle_destination/shuttle1/docked_SC = 0
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -77,7 +137,7 @@
|
|||||||
preferred_interim_area = /area/shuttle/shuttle2/transit
|
preferred_interim_area = /area/shuttle/shuttle2/transit
|
||||||
|
|
||||||
routes_to_make = list(
|
routes_to_make = list(
|
||||||
/datum/shuttle_destination/shuttle2/sif_orbit = 1 MINUTE,
|
/datum/shuttle_destination/shuttle2/sif_orbit = 30 SECONDS,
|
||||||
/datum/shuttle_destination/shuttle2/docked_SC = 0
|
/datum/shuttle_destination/shuttle2/docked_SC = 0
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -89,8 +149,13 @@
|
|||||||
|
|
||||||
dock_target = "shuttle1_dock_airlocksc"
|
dock_target = "shuttle1_dock_airlocksc"
|
||||||
announcer = "Southern Cross Docking Computer"
|
announcer = "Southern Cross Docking Computer"
|
||||||
arrival_message = "Attention, shuttle one has arrived to the Arrivals Dock."
|
|
||||||
departure_message = "Attention, shuttle one has departed the Arrivals Dock."
|
/datum/shuttle_destination/shuttle1/docked_SC/get_arrival_message()
|
||||||
|
return "Attention, [master.my_shuttle.visible_name] has arrived to the Arrivals Dock."
|
||||||
|
|
||||||
|
/datum/shuttle_destination/shuttle1/docked_SC/get_departure_message()
|
||||||
|
return "Attention, [master.my_shuttle.visible_name] has departed the Arrivals Dock."
|
||||||
|
|
||||||
|
|
||||||
/datum/shuttle_destination/shuttle2/docked_SC
|
/datum/shuttle_destination/shuttle2/docked_SC
|
||||||
name = "Southern Cross Docking Port"
|
name = "Southern Cross Docking Port"
|
||||||
@@ -99,8 +164,12 @@
|
|||||||
|
|
||||||
dock_target = "shuttle2_dock_airlocksc"
|
dock_target = "shuttle2_dock_airlocksc"
|
||||||
announcer = "Southern Cross Docking Computer"
|
announcer = "Southern Cross Docking Computer"
|
||||||
arrival_message = "Attention, shuttle two has arrived to the Arrivals Dock."
|
|
||||||
departure_message = "Attention, shuttle two has departed the Arrivals Dock."
|
/datum/shuttle_destination/shuttle2/docked_SC/get_arrival_message()
|
||||||
|
return "Attention, [master.my_shuttle.visible_name] has arrived to the Arrivals Dock."
|
||||||
|
|
||||||
|
/datum/shuttle_destination/shuttle2/docked_SC/get_departure_message()
|
||||||
|
return "Attention, [master.my_shuttle.visible_name] has departed the Arrivals Dock."
|
||||||
|
|
||||||
|
|
||||||
/datum/shuttle_destination/shuttle1/sif_orbit
|
/datum/shuttle_destination/shuttle1/sif_orbit
|
||||||
@@ -109,7 +178,7 @@
|
|||||||
preferred_interim_area = /area/shuttle/shuttle1/transit
|
preferred_interim_area = /area/shuttle/shuttle1/transit
|
||||||
|
|
||||||
routes_to_make = list(
|
routes_to_make = list(
|
||||||
/datum/shuttle_destination/shuttle1/sky = 1 MINUTE
|
/datum/shuttle_destination/shuttle1/sky = 30 SECONDS
|
||||||
)
|
)
|
||||||
|
|
||||||
/datum/shuttle_destination/shuttle2/sif_orbit
|
/datum/shuttle_destination/shuttle2/sif_orbit
|
||||||
@@ -118,7 +187,7 @@
|
|||||||
preferred_interim_area = /area/shuttle/shuttle2/transit
|
preferred_interim_area = /area/shuttle/shuttle2/transit
|
||||||
|
|
||||||
routes_to_make = list(
|
routes_to_make = list(
|
||||||
/datum/shuttle_destination/shuttle2/sky = 1 MINUTE
|
/datum/shuttle_destination/shuttle2/sky = 30 SECONDS
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@@ -128,8 +197,8 @@
|
|||||||
preferred_interim_area = /area/shuttle/shuttle1/sky_transit
|
preferred_interim_area = /area/shuttle/shuttle1/sky_transit
|
||||||
|
|
||||||
routes_to_make = list(
|
routes_to_make = list(
|
||||||
/datum/shuttle_destination/shuttle1/main_base = 30 SECONDS,
|
/datum/shuttle_destination/shuttle1/main_base = 15 SECONDS,
|
||||||
/datum/shuttle_destination/shuttle1/mining_base = 30 SECONDS
|
/datum/shuttle_destination/shuttle1/mining_base = 15 SECONDS
|
||||||
)
|
)
|
||||||
|
|
||||||
/datum/shuttle_destination/shuttle2/sky
|
/datum/shuttle_destination/shuttle2/sky
|
||||||
@@ -138,8 +207,8 @@
|
|||||||
preferred_interim_area = /area/shuttle/shuttle2/sky_transit
|
preferred_interim_area = /area/shuttle/shuttle2/sky_transit
|
||||||
|
|
||||||
routes_to_make = list(
|
routes_to_make = list(
|
||||||
/datum/shuttle_destination/shuttle2/main_base = 30 SECONDS,
|
/datum/shuttle_destination/shuttle2/main_base = 15 SECONDS,
|
||||||
/datum/shuttle_destination/shuttle2/mining_base = 30 SECONDS
|
/datum/shuttle_destination/shuttle2/mining_base = 15 SECONDS
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@@ -150,8 +219,12 @@
|
|||||||
|
|
||||||
dock_target = "surface_dock_1"
|
dock_target = "surface_dock_1"
|
||||||
announcer = "Outpost Automated ATC"
|
announcer = "Outpost Automated ATC"
|
||||||
arrival_message = "Attention, shuttle one has arrived to the Main Outpost."
|
|
||||||
departure_message = "Attention, shuttle one has departed the Main Outpost."
|
/datum/shuttle_destination/shuttle1/main_base/get_arrival_message()
|
||||||
|
return "Attention, [master.my_shuttle.visible_name] has arrived to the Main Outpost."
|
||||||
|
|
||||||
|
/datum/shuttle_destination/shuttle1/main_base/get_departure_message()
|
||||||
|
return "Attention, [master.my_shuttle.visible_name] has departed the Main Outpost."
|
||||||
|
|
||||||
/datum/shuttle_destination/shuttle2/main_base
|
/datum/shuttle_destination/shuttle2/main_base
|
||||||
name = "Main Outpost"
|
name = "Main Outpost"
|
||||||
@@ -160,8 +233,12 @@
|
|||||||
|
|
||||||
dock_target = "surface_dock_2"
|
dock_target = "surface_dock_2"
|
||||||
announcer = "Outpost Automated ATC"
|
announcer = "Outpost Automated ATC"
|
||||||
arrival_message = "Attention, shuttle two has arrived to the Main Outpost."
|
|
||||||
departure_message = "Attention, shuttle two has departed the Main Outpost."
|
/datum/shuttle_destination/shuttle2/main_base/get_arrival_message()
|
||||||
|
return "Attention, [master.my_shuttle.visible_name] has arrived to the Main Outpost."
|
||||||
|
|
||||||
|
/datum/shuttle_destination/shuttle2/main_base/get_departure_message()
|
||||||
|
return "Attention, [master.my_shuttle.visible_name] has departed the Main Outpost."
|
||||||
|
|
||||||
|
|
||||||
/datum/shuttle_destination/shuttle1/mining_base
|
/datum/shuttle_destination/shuttle1/mining_base
|
||||||
@@ -171,8 +248,11 @@
|
|||||||
|
|
||||||
dock_target = "mining_dock_1"
|
dock_target = "mining_dock_1"
|
||||||
announcer = "Outpost Automated ATC"
|
announcer = "Outpost Automated ATC"
|
||||||
arrival_message = "Attention, shuttle one has arrived to the Mining Outpost."
|
/datum/shuttle_destination/shuttle1/mining_base/get_arrival_message()
|
||||||
departure_message = "Attention, shuttle one has departed the Mining Outpost."
|
return "Attention, [master.my_shuttle.visible_name] has arrived to the Mining Outpost."
|
||||||
|
|
||||||
|
/datum/shuttle_destination/shuttle1/mining_base/get_departure_message()
|
||||||
|
return "Attention, [master.my_shuttle.visible_name] has departed the Mining Outpost."
|
||||||
|
|
||||||
/datum/shuttle_destination/shuttle2/mining_base
|
/datum/shuttle_destination/shuttle2/mining_base
|
||||||
name = "Mining Outpost"
|
name = "Mining Outpost"
|
||||||
@@ -181,5 +261,9 @@
|
|||||||
|
|
||||||
dock_target = "mining_dock_2"
|
dock_target = "mining_dock_2"
|
||||||
announcer = "Outpost Automated ATC"
|
announcer = "Outpost Automated ATC"
|
||||||
arrival_message = "Attention, shuttle two has arrived to the Mining Outpost."
|
|
||||||
departure_message = "Attention, shuttle two has departed the Mining Outpost."
|
/datum/shuttle_destination/shuttle2/mining_base/get_arrival_message()
|
||||||
|
return "Attention, [master.my_shuttle.visible_name] has arrived to the Mining Outpost."
|
||||||
|
|
||||||
|
/datum/shuttle_destination/shuttle2/mining_base/get_departure_message()
|
||||||
|
return "Attention, [master.my_shuttle.visible_name] has departed the Mining Outpost."
|
||||||
@@ -50,7 +50,7 @@
|
|||||||
dock_target = "response_base"
|
dock_target = "response_base"
|
||||||
|
|
||||||
routes_to_make = list(
|
routes_to_make = list(
|
||||||
/datum/shuttle_destination/ert/orbit = 2 MINUTES,
|
/datum/shuttle_destination/ert/orbit = 1 MINUTE,
|
||||||
)
|
)
|
||||||
|
|
||||||
/datum/shuttle_destination/ert/orbit
|
/datum/shuttle_destination/ert/orbit
|
||||||
@@ -59,10 +59,10 @@
|
|||||||
preferred_interim_area = /area/shuttle/response_ship/transit
|
preferred_interim_area = /area/shuttle/response_ship/transit
|
||||||
|
|
||||||
routes_to_make = list(
|
routes_to_make = list(
|
||||||
/datum/shuttle_destination/ert/outside_SC_1d = 1 MINUTE,
|
/datum/shuttle_destination/ert/outside_SC_1d = 30 SECONDS,
|
||||||
/datum/shuttle_destination/ert/outside_SC_2d = 1 MINUTE,
|
/datum/shuttle_destination/ert/outside_SC_2d = 30 SECONDS,
|
||||||
/datum/shuttle_destination/ert/outside_SC_3d = 1 MINUTE,
|
/datum/shuttle_destination/ert/outside_SC_3d = 30 SECONDS,
|
||||||
/datum/shuttle_destination/ert/sky = 1 MINUTE
|
/datum/shuttle_destination/ert/sky = 30 SECONDS
|
||||||
)
|
)
|
||||||
|
|
||||||
/datum/shuttle_destination/ert/outside_SC_1d
|
/datum/shuttle_destination/ert/outside_SC_1d
|
||||||
@@ -106,8 +106,12 @@
|
|||||||
|
|
||||||
dock_target = "response_shuttle_dock_airlock"
|
dock_target = "response_shuttle_dock_airlock"
|
||||||
announcer = "Southern Cross Docking Computer"
|
announcer = "Southern Cross Docking Computer"
|
||||||
arrival_message = "Attention, the Emergency Response Team's shuttle has arrived to the Arrivals Dock."
|
|
||||||
departure_message = "Attention, the Emergency Response Team's shuttle has departed the Arrivals Dock."
|
/datum/shuttle_destination/ert/docked_SC/get_arrival_message()
|
||||||
|
return "Attention, the Emergency Response Team's shuttle has arrived to the Arrivals Dock."
|
||||||
|
|
||||||
|
/datum/shuttle_destination/ert/docked_SC/get_departure_message()
|
||||||
|
return "Attention, the Emergency Response Team's shuttle has departed the Arrivals Dock."
|
||||||
|
|
||||||
/datum/shuttle_destination/ert/sky
|
/datum/shuttle_destination/ert/sky
|
||||||
name = "Skies of Sif"
|
name = "Skies of Sif"
|
||||||
@@ -115,7 +119,7 @@
|
|||||||
preferred_interim_area = /area/shuttle/response_ship/sky_transit
|
preferred_interim_area = /area/shuttle/response_ship/sky_transit
|
||||||
|
|
||||||
routes_to_make = list(
|
routes_to_make = list(
|
||||||
/datum/shuttle_destination/ert/planet = 30 SECONDS
|
/datum/shuttle_destination/ert/planet = 15 SECONDS
|
||||||
)
|
)
|
||||||
|
|
||||||
/datum/shuttle_destination/ert/planet
|
/datum/shuttle_destination/ert/planet
|
||||||
|
|||||||
@@ -35,10 +35,10 @@
|
|||||||
preferred_interim_area = /area/skipjack_station/transit
|
preferred_interim_area = /area/skipjack_station/transit
|
||||||
|
|
||||||
routes_to_make = list(
|
routes_to_make = list(
|
||||||
/datum/shuttle_destination/heist/outside_SC_1d = 1 MINUTE,
|
/datum/shuttle_destination/heist/outside_SC_1d = 30 SECONDS,
|
||||||
/datum/shuttle_destination/heist/outside_SC_2d = 1 MINUTE,
|
/datum/shuttle_destination/heist/outside_SC_2d = 30 SECONDS,
|
||||||
/datum/shuttle_destination/heist/outside_SC_3d = 1 MINUTE,
|
/datum/shuttle_destination/heist/outside_SC_3d = 30 SECONDS,
|
||||||
/datum/shuttle_destination/heist/sky = 1 MINUTE,
|
/datum/shuttle_destination/heist/sky = 30 SECONDS,
|
||||||
)
|
)
|
||||||
|
|
||||||
/datum/shuttle_destination/heist/outside_SC_1d
|
/datum/shuttle_destination/heist/outside_SC_1d
|
||||||
@@ -82,8 +82,12 @@
|
|||||||
|
|
||||||
// dock_target = "skipjack_shuttle_dock_airlock"
|
// dock_target = "skipjack_shuttle_dock_airlock"
|
||||||
announcer = "Southern Cross Docking Computer"
|
announcer = "Southern Cross Docking Computer"
|
||||||
arrival_message = "Attention, a shuttle has arrived to the Arrivals Dock."
|
|
||||||
departure_message = "Attention, a shuttle has departed the Arrivals Dock."
|
/datum/shuttle_destination/heist/docked_SC/get_arrival_message()
|
||||||
|
return "Attention, [master.my_shuttle.visible_name] has arrived to the Arrivals Dock."
|
||||||
|
|
||||||
|
/datum/shuttle_destination/heist/docked_SC/get_departure_message()
|
||||||
|
return "Attention, [master.my_shuttle.visible_name] has departed the Arrivals Dock."
|
||||||
|
|
||||||
/datum/shuttle_destination/heist/sky
|
/datum/shuttle_destination/heist/sky
|
||||||
name = "Skies of Sif"
|
name = "Skies of Sif"
|
||||||
@@ -91,7 +95,7 @@
|
|||||||
preferred_interim_area = /area/skipjack_station/sky_transit
|
preferred_interim_area = /area/skipjack_station/sky_transit
|
||||||
|
|
||||||
routes_to_make = list(
|
routes_to_make = list(
|
||||||
/datum/shuttle_destination/heist/planet = 30 SECONDS
|
/datum/shuttle_destination/heist/planet = 15 SECONDS
|
||||||
)
|
)
|
||||||
|
|
||||||
/datum/shuttle_destination/heist/planet
|
/datum/shuttle_destination/heist/planet
|
||||||
|
|||||||
@@ -34,12 +34,14 @@
|
|||||||
|
|
||||||
/datum/shuttle/web_shuttle/syndicate
|
/datum/shuttle/web_shuttle/syndicate
|
||||||
name = "Mercenary"
|
name = "Mercenary"
|
||||||
|
visible_name = "Unknown Vessel"
|
||||||
warmup_time = 0
|
warmup_time = 0
|
||||||
can_cloak = TRUE
|
can_cloak = TRUE
|
||||||
cloaked = TRUE
|
cloaked = TRUE
|
||||||
current_area = /area/syndicate_station/start
|
current_area = /area/syndicate_station/start
|
||||||
docking_controller_tag = "merc_shuttle"
|
docking_controller_tag = "merc_shuttle"
|
||||||
web_master_type = /datum/shuttle_web_master/syndie
|
web_master_type = /datum/shuttle_web_master/syndie
|
||||||
|
flight_time_modifier = 2 // Assumption that 'larger ship + few engines = slower'
|
||||||
|
|
||||||
/datum/shuttle_web_master/syndie
|
/datum/shuttle_web_master/syndie
|
||||||
destination_class = /datum/shuttle_destination/syndie
|
destination_class = /datum/shuttle_destination/syndie
|
||||||
@@ -55,7 +57,7 @@
|
|||||||
dock_target = "merc_base"
|
dock_target = "merc_base"
|
||||||
|
|
||||||
routes_to_make = list(
|
routes_to_make = list(
|
||||||
/datum/shuttle_destination/syndie/orbit = 3 MINUTES,
|
/datum/shuttle_destination/syndie/orbit = 1.5 MINUTES,
|
||||||
)
|
)
|
||||||
|
|
||||||
/datum/shuttle_destination/syndie/orbit
|
/datum/shuttle_destination/syndie/orbit
|
||||||
@@ -64,10 +66,10 @@
|
|||||||
preferred_interim_area = /area/syndicate_station/transit
|
preferred_interim_area = /area/syndicate_station/transit
|
||||||
|
|
||||||
routes_to_make = list(
|
routes_to_make = list(
|
||||||
/datum/shuttle_destination/syndie/outside_SC_1d = 1 MINUTE,
|
/datum/shuttle_destination/syndie/outside_SC_1d = 30 SECONDS,
|
||||||
/datum/shuttle_destination/syndie/outside_SC_2d = 1 MINUTE,
|
/datum/shuttle_destination/syndie/outside_SC_2d = 30 SECONDS,
|
||||||
/datum/shuttle_destination/syndie/outside_SC_3d = 1 MINUTE,
|
/datum/shuttle_destination/syndie/outside_SC_3d = 30 SECONDS,
|
||||||
/datum/shuttle_destination/syndie/sky = 1 MINUTE
|
/datum/shuttle_destination/syndie/sky = 30 SECONDS
|
||||||
)
|
)
|
||||||
|
|
||||||
/datum/shuttle_destination/syndie/outside_SC_1d
|
/datum/shuttle_destination/syndie/outside_SC_1d
|
||||||
@@ -110,8 +112,12 @@
|
|||||||
|
|
||||||
dock_target = "nuke_shuttle_dock_airlock"
|
dock_target = "nuke_shuttle_dock_airlock"
|
||||||
announcer = "Southern Cross Docking Computer"
|
announcer = "Southern Cross Docking Computer"
|
||||||
arrival_message = "Attention, a shuttle has arrived to the Arrivals Dock."
|
|
||||||
departure_message = "Attention, a shuttle has departed the Arrivals Dock."
|
/datum/shuttle_destination/syndie/docked_SC/get_arrival_message()
|
||||||
|
return "Attention, [master.my_shuttle.visible_name] has arrived to the Arrivals Dock."
|
||||||
|
|
||||||
|
/datum/shuttle_destination/syndie/docked_SC/get_departure_message()
|
||||||
|
return "Attention, [master.my_shuttle.visible_name] has departed the Arrivals Dock."
|
||||||
|
|
||||||
/datum/shuttle_destination/syndie/sky
|
/datum/shuttle_destination/syndie/sky
|
||||||
name = "Skies of Sif"
|
name = "Skies of Sif"
|
||||||
@@ -119,7 +125,7 @@
|
|||||||
preferred_interim_area = /area/syndicate_station/sky_transit
|
preferred_interim_area = /area/syndicate_station/sky_transit
|
||||||
|
|
||||||
routes_to_make = list(
|
routes_to_make = list(
|
||||||
/datum/shuttle_destination/syndie/planet = 30 SECONDS
|
/datum/shuttle_destination/syndie/planet = 15 SECONDS
|
||||||
)
|
)
|
||||||
|
|
||||||
/datum/shuttle_destination/syndie/planet
|
/datum/shuttle_destination/syndie/planet
|
||||||
|
|||||||
@@ -5,12 +5,14 @@
|
|||||||
|
|
||||||
/datum/shuttle/web_shuttle/ninja
|
/datum/shuttle/web_shuttle/ninja
|
||||||
name = "Ninja"
|
name = "Ninja"
|
||||||
|
visible_name = "Unknown Vessel"
|
||||||
warmup_time = 0
|
warmup_time = 0
|
||||||
can_cloak = TRUE
|
can_cloak = TRUE
|
||||||
cloaked = TRUE
|
cloaked = TRUE
|
||||||
current_area = /area/ninja_dojo/start
|
current_area = /area/ninja_dojo/start
|
||||||
docking_controller_tag = "ninja_shuttle"
|
docking_controller_tag = "ninja_shuttle"
|
||||||
web_master_type = /datum/shuttle_web_master/ninja
|
web_master_type = /datum/shuttle_web_master/ninja
|
||||||
|
flight_time_modifier = 0.5 // Nippon steel.
|
||||||
|
|
||||||
/datum/shuttle_web_master/ninja
|
/datum/shuttle_web_master/ninja
|
||||||
destination_class = /datum/shuttle_destination/ninja
|
destination_class = /datum/shuttle_destination/ninja
|
||||||
@@ -24,7 +26,7 @@
|
|||||||
dock_target = "ninja_base"
|
dock_target = "ninja_base"
|
||||||
|
|
||||||
routes_to_make = list(
|
routes_to_make = list(
|
||||||
/datum/shuttle_destination/ninja/sky = 30 SECONDS,
|
/datum/shuttle_destination/ninja/sky = 15 SECONDS,
|
||||||
)
|
)
|
||||||
|
|
||||||
/datum/shuttle_destination/ninja/orbit
|
/datum/shuttle_destination/ninja/orbit
|
||||||
@@ -33,10 +35,10 @@
|
|||||||
preferred_interim_area = /area/ninja_dojo/transit
|
preferred_interim_area = /area/ninja_dojo/transit
|
||||||
|
|
||||||
routes_to_make = list(
|
routes_to_make = list(
|
||||||
/datum/shuttle_destination/ninja/outside_SC_1d = 1 MINUTE,
|
/datum/shuttle_destination/ninja/outside_SC_1d = 30 SECONDS,
|
||||||
/datum/shuttle_destination/ninja/outside_SC_2d = 1 MINUTE,
|
/datum/shuttle_destination/ninja/outside_SC_2d = 30 SECONDS,
|
||||||
/datum/shuttle_destination/ninja/outside_SC_3d = 1 MINUTE,
|
/datum/shuttle_destination/ninja/outside_SC_3d = 30 SECONDS,
|
||||||
/datum/shuttle_destination/ninja/sky = 1 MINUTE,
|
/datum/shuttle_destination/ninja/sky = 30 SECONDS,
|
||||||
)
|
)
|
||||||
|
|
||||||
/datum/shuttle_destination/ninja/outside_SC_1d
|
/datum/shuttle_destination/ninja/outside_SC_1d
|
||||||
@@ -80,8 +82,12 @@
|
|||||||
|
|
||||||
dock_target = "ninja_shuttle_dock_airlock"
|
dock_target = "ninja_shuttle_dock_airlock"
|
||||||
announcer = "Southern Cross Docking Computer"
|
announcer = "Southern Cross Docking Computer"
|
||||||
arrival_message = "Attention, a shuttle has arrived to the Arrivals Dock."
|
|
||||||
departure_message = "Attention, a shuttle has departed the Arrivals Dock."
|
/datum/shuttle_destination/syndie/docked_SC/get_arrival_message()
|
||||||
|
return "Attention, [master.my_shuttle.visible_name] has arrived to the Arrivals Dock."
|
||||||
|
|
||||||
|
/datum/shuttle_destination/syndie/docked_SC/get_departure_message()
|
||||||
|
return "Attention, [master.my_shuttle.visible_name] has departed the Arrivals Dock."
|
||||||
|
|
||||||
/datum/shuttle_destination/ninja/sky
|
/datum/shuttle_destination/ninja/sky
|
||||||
name = "Skies of Sif"
|
name = "Skies of Sif"
|
||||||
@@ -89,7 +95,7 @@
|
|||||||
preferred_interim_area = /area/ninja_dojo/sky_transit
|
preferred_interim_area = /area/ninja_dojo/sky_transit
|
||||||
|
|
||||||
routes_to_make = list(
|
routes_to_make = list(
|
||||||
/datum/shuttle_destination/ninja/planet = 30 SECONDS
|
/datum/shuttle_destination/ninja/planet = 15 SECONDS
|
||||||
)
|
)
|
||||||
|
|
||||||
/datum/shuttle_destination/ninja/planet
|
/datum/shuttle_destination/ninja/planet
|
||||||
|
|||||||
@@ -1,3 +1,22 @@
|
|||||||
|
{{if data.autopilot == 1}}
|
||||||
|
<div class='notice'>
|
||||||
|
<b><h3>AI PILOT (CLASS D) ACTIVE</h3></b>
|
||||||
|
<i>This vessel will start and stop automatically.<br>
|
||||||
|
Ensure that all non-cycling capable hatches and doors are closed, as the automated system may not be able to control them.<br>
|
||||||
|
Docking and flight controls are locked. To unlock, disable the automated flight system.</i><br>
|
||||||
|
</div>
|
||||||
|
{{/if}}
|
||||||
|
|
||||||
|
{{if data.can_rename == 1}}
|
||||||
|
<div class='item'>
|
||||||
|
<div class="itemContent">
|
||||||
|
<div style="float: left; width: 100%;">
|
||||||
|
{{:helper.link('Rename', 'pencil', {"rename_command" : 1})}}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{{/if}}
|
||||||
|
|
||||||
<h3>Shuttle Status</h3>
|
<h3>Shuttle Status</h3>
|
||||||
{{if data.is_moving == 0}}
|
{{if data.is_moving == 0}}
|
||||||
<div class="item">
|
<div class="item">
|
||||||
@@ -81,6 +100,18 @@
|
|||||||
</div>
|
</div>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
|
||||||
|
{{if data.can_autopilot == 1}}
|
||||||
|
<div class="item">
|
||||||
|
<div class="itemLabel">
|
||||||
|
Automated Flight Control:
|
||||||
|
</div>
|
||||||
|
<span style="float:right">
|
||||||
|
{{:helper.link('On', 'circle-check', {'autopilot_on_command' : 1}, (data.autopilot == 1)? 'selected' : null)}}
|
||||||
|
{{:helper.link('Off', 'circle-close ', {'autopilot_off_command' : 1}, (data.autopilot == 0)? 'selected' : null)}}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{{/if}}
|
||||||
|
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
|
||||||
{{if data.is_moving == 0}}
|
{{if data.is_moving == 0}}
|
||||||
|
|||||||
Reference in New Issue
Block a user